diff --git a/.gitignore b/.gitignore index acaea0eabe1..e0957a1837a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,9 @@ +.vs/ log/ obj/ _site/ .optemp/ _themes*/ -.openpublishing.buildcore.ps1 \ No newline at end of file +.openpublishing.buildcore.ps1 +*.bmp diff --git a/.openpublishing.publish.config.json b/.openpublishing.publish.config.json index 3fb0b6d28d5..053337aff2c 100644 --- a/.openpublishing.publish.config.json +++ b/.openpublishing.publish.config.json @@ -1,5 +1,5 @@ { - "need_generate_pdf": false, + "need_generate_pdf_url_template": true, "need_generate_intellisense": false, "docsets_to_publish": [ { @@ -54,6 +54,15 @@ "branch_mapping": {} } ], - "branch_target_mapping": {}, - "need_generate_pdf_url_template": false + + "Targets": { + "Pdf": { + "template_folder": "_themes.pdf" + } + }, + + "branch_target_mapping": { + "live": ["Publish", "Pdf"], + "master": ["Publish", "Pdf"] +} } \ No newline at end of file diff --git a/.openpublishing.redirection.json b/.openpublishing.redirection.json new file mode 100644 index 00000000000..13595e7b0e6 --- /dev/null +++ b/.openpublishing.redirection.json @@ -0,0 +1,353 @@ +{ + "redirections": [{ + "source_path": "docs/test-redirect.md", + "redirect_url": "/vsts/work/scrum/index", + "redirect_document_id": false + }, + { + "source_path": "docs/test/test-redirect-2.md", + "redirect_url": "/vsts/build-release/apps/aspnet/build-aspnet-4", + "redirect_document_id": false + }, + { + "source_path": "release-notes/features-timeline.md", + "redirect_url": "/vsts/release-notes/index", + "redirect_document_id": false + }, + { + "source_path": "docs/build/apps/aspnet/cd/deploy-cloudservice-cloudservice.md", + "redirect_url": "/vsts/build-release/apps/cd/deploy-cloudservice-cloudservice", + "redirect_document_id": false + }, + { + "source_path": "docs/build/apps/aspnet/ci/build-aspnet-4.md", + "redirect_url": "/vsts/build-release/apps/aspnet/build-aspnet-4", + "redirect_document_id": false + }, + { + "source_path": "docs/build/apps/aspnet/ci/build-aspnet-cloudservice.md", + "redirect_url": "/vsts/build-release/apps/aspnet/build-aspnet-cloudservice", + "redirect_document_id": false + }, + { + "source_path": "docs/build/apps/aspnet/ci/build-aspnet-core.md", + "redirect_url": "/vsts/build-release/apps/aspnet/build-aspnet-core", + "redirect_document_id": false + }, + { + "source_path": "docs/build/apps/aspnet/ci/build-aspnet-dacpac.md", + "redirect_url": "/vsts/build-release/apps/aspnet/build-aspnet-dacpac", + "redirect_document_id": false + }, + { + "source_path": "docs/build/apps/node/nodejs-to-azure.md", + "redirect_url": "/vsts/build-release/apps/nodejs/nodejs-to-azure", + "redirect_document_id": false + }, + { + "source_path": "docs/build/define/history.md", + "redirect_url": "/vsts/build-release/concepts/definitions/build/history", + "redirect_document_id": false + }, + { + "source_path": "docs/build/define/options.md", + "redirect_url": "/vsts/build-release/concepts/definitions/build/options", + "redirect_document_id": false + }, + { + "source_path": "docs/build/define/repository.md", + "redirect_url": "/vsts/build-release/concepts/definitions/build/repository", + "redirect_document_id": false + }, + { + "source_path": "docs/build/define/triggers.md", + "redirect_url": "/vsts/build-release/concepts/definitions/build/triggers", + "redirect_document_id": false + }, + { + "source_path": "docs/build/define/variables.md", + "redirect_url": "/vsts/build-release/concepts/definitions/build/variables", + "redirect_document_id": false + }, + { + "source_path": "docs/build/get-started/aspnet-4-ci-cd-azure-automatic.md", + "redirect_url": "/vsts/build-release/apps/aspnet/aspnet-4-ci-cd-azure-automatic", + "redirect_document_id": false + }, + { + "source_path": "docs/build/get-started/aspnet-4-ci-cd-vs-automatic.md", + "redirect_url": "/vsts/build-release/apps/aspnet/aspnet-4-ci-cd-vs-automatic", + "redirect_document_id": false + }, + { + "source_path": "docs/build/get-started/dot-net.md", + "redirect_url": "/vsts/build-release/apps/windows/dot-net", + "redirect_document_id": false + }, + { + "source_path": "docs/build/get-started/java-maven.md", + "redirect_url": "/vsts/build-release/apps/java/java-maven", + "redirect_document_id": false + }, + { + "source_path": "docs/build/steps/file-matching-patterns.md", + "redirect_url": "/vsts/build-release/tasks/file-matching-patterns", + "redirect_document_id": false + }, + { + "source_path": "docs/build/steps/transforms-variable-substitution.md", + "redirect_url": "/vsts/build-release/tasks/transforms-variable-substitution", + "redirect_document_id": false + }, + { + "source_path": "docs/collaborate/manage-personal-notifications.md", + "redirect_url": "/vsts/notifications/manage-personal-notifications", + "redirect_document_id": false + }, + { + "source_path": "docs/git/howto/create-pr-status-server.md", + "redirect_url": "/vsts/git/how-to/create-pr-status-server", + "redirect_document_id": false + }, + { + "source_path": "docs/git/howto/pr-status-policy.md", + "redirect_url": "/vsts/git/how-to/pr-status-policy", + "redirect_document_id": false + }, + { + "source_path": "docs/marketplace/get-hockeyapp.md", + "redirect_url": "/vsts/billing/get-hockeyapp", + "redirect_document_id": false + }, + { + "source_path": "docs/marketplace/xamarin-univ.md", + "redirect_url": "/vsts/billing/xamarin-univ", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/account-preferences.md", + "redirect_url": "/vsts/accounts/account-preferences", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/add-administrator-tfs.md", + "redirect_url": "/vsts/accounts/add-administrator-project-collection", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/add-users.md", + "redirect_url": "/vsts/accounts/add-users", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/buy-access-tfs-test-hub.md", + "redirect_url": "/vsts/billing/buy-access-tfs-test-hub", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/clean-up-data.md", + "redirect_url": "/vsts/accounts/clean-up-data", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/create-team-project.md", + "redirect_url": "/vsts/accounts/create-team-project", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/delete-team-project.md", + "redirect_url": "/vsts/accounts/delete-team-project", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/get-started.md", + "redirect_url": "/vsts/accounts/index", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/git-permissions-before-2017.md", + "redirect_url": "/vsts/security/git-permissions-before-2017", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/permissions.md", + "redirect_url": "/vsts/security/permissions", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/permissions-access.md", + "redirect_url": "/vsts/security/permissions-access", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/rename-team-project.md", + "redirect_url": "/vsts/accounts/rename-team-project", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/requirements.md", + "redirect_url": "/vsts/accounts/requirements", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/restrict-access-tfs.md", + "redirect_url": "/vsts/accounts/restrict-access-tfs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/add-account-users-assign-access-levels-team-services.md", + "redirect_url": "/vsts/accounts/add-account-users-assign-access-levels", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/add-team-members-vs.md", + "redirect_url": "/vsts/accounts/add-team-members-vs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/buy-basic-access-add-team-services-users.md", + "redirect_url": "/vsts/billing/buy-basic-access-add-users", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/buy-load-testing-vs.md", + "redirect_url": "/vsts/billing/buy-load-testing-vs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/buy-more-build-vs.md", + "redirect_url": "/vsts/billing/buy-more-build-vs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/change-account-ownership-vs.md", + "redirect_url": "/vsts/accounts/change-account-ownership-vs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/change-application-access-policies-vs.md", + "redirect_url": "/vsts/accounts/change-application-access-policies-vs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/change-azure-active-directory-team-services-account.md", + "redirect_url": "/vsts/accounts/change-azure-active-directory-vsts-account", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/connect-to-visual-studio-team-services.md", + "redirect_url": "/vsts/connect/connect-team-projects", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/delete-or-recover-your-account-vs.md", + "redirect_url": "/vsts/accounts/recover-your-vsts-account", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/link-msdn-subscription-to-organizational-account-vs.md", + "redirect_url": "/vsts/billing/link-msdn-subscription-to-organizational-account-vs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/manage-azure-active-directory-groups-visual-studio-team-services.md", + "redirect_url": "/vsts/accounts/manage-azure-active-directory-groups-vsts", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/manage-conditional-access.md", + "redirect_url": "/vsts/accounts/manage-conditional-access", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/manage-organization-access-for-your-account-vs.md", + "redirect_url": "/vsts/accounts/access-with-azure-ad", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/manage-users-and-access-user-hub-team-services.md", + "redirect_url": "/vsts/accounts/add-account-users-from-user-hub", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/rename-visual-studio-team-services-account.md", + "redirect_url": "/vsts/accounts/rename-vsts-account", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/set-up-billing-for-your-account-vs.md", + "redirect_url": "/vsts/billing/set-up-billing-for-your-account-vs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/set-up-vs.md", + "redirect_url": "/vsts/accounts/set-up-vs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/sign-up-for-visual-studio-team-services.md", + "redirect_url": "/vsts/accounts/create-account-with-work-school", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/try-additional-features-vs.md", + "redirect_url": "/vsts/billing/try-additional-features-vs", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/team-services/use-personal-access-tokens-to-authenticate.md", + "redirect_url": "/vsts/accounts/use-personal-access-tokens-to-authenticate", + "redirect_document_id": false + }, + { + "source_path": "docs/setup-admin/websitesettings.md", + "redirect_url": "/vsts/security/websitesettings", + "redirect_document_id": false + }, + { + "source_path": "docs/whats-new.md", + "redirect_url": "/vsts/whats-new", + "redirect_document_id": false + }, + { + "source_path": "docs/work/agile-project-management.md", + "redirect_url": "/vsts/work/overview", + "redirect_document_id": false + }, + { + "source_path": "docs/work/connect/change-access-levels.md", + "redirect_url": "/vsts/security/change-access-levels", + "redirect_document_id": false + }, + { + "source_path": "docs/work/connect/work-as-a-stakeholder.md", + "redirect_url": "/vsts/quickstart/get-started-stakeholder", + "redirect_document_id": false + }, + { + "source_path": "integrate/extensions/reference/client/client-services.md", + "redirect_url": "/vsts/extend/reference/client/client-services", + "redirect_document_id": false + }, + { + "source_path": "integrate/extensions/reference/client/context.md", + "redirect_url": "/vsts/extend/reference/client/context", + "redirect_document_id": false + }, + { + "source_path": "integrate/extensions/reference/client/core-sdk.md", + "redirect_url": "/vsts/extend/reference/client/core-sdk", + "redirect_document_id": false + }, + { + "source_path": "integrate/extensions/reference/client/rest-clients.md", + "redirect_url": "/vsts/extend/reference/client/rest-clients", + "redirect_document_id": false + }, + { + "source_path": "integrate/extensions/reference/client/ui-controls.md", + "redirect_url": "/vsts/extend/reference/client/ui-controls", + "redirect_document_id": false + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index 824a7c6d569..1209e01a4cf 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,9 @@ ## Microsoft Open Source Code of Conduct This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. \ No newline at end of file +For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +# Content repo for docs.microsoft.com/vsts and docs.microsoft.com/vsts/release-notes + +> * For content contributions to docs.microsoft.com/vsts, work in the /docs folder. +> * For content contributions to docs.microsoft.com/vsts/release-notes, work in the /release-notes folder. +> * Contact Doug Erickson (douge) for details and training on content contribution or publishing. \ No newline at end of file diff --git a/TOC.md b/TOC.md new file mode 100644 index 00000000000..06913f7aeff --- /dev/null +++ b/TOC.md @@ -0,0 +1 @@ +# [Index](index.md) \ No newline at end of file diff --git a/docfx.json b/docfx.json index 9b855cc93bd..2e6c36ef9d8 100644 --- a/docfx.json +++ b/docfx.json @@ -3,7 +3,8 @@ "content": [ { "files": [ - "**/*.md" + "**/*.md", + "**/*.yml" ], "exclude": [ "**/obj/**", @@ -11,7 +12,9 @@ "README.md", "LICENSE", "LICENSE-CODE", - "ThirdPartyNotices" + "ThirdPartyNotices", + "**/_themes/**", + "**/_themes.pdf/**" ] } ], @@ -29,9 +32,15 @@ ], "overwrite": [], "externalReference": [], - "globalMetadata": {}, + "globalMetadata": { + "author": "erickson-doug", + "ms.author": "douge", + "ms.topic": "douge", + "ms.prod": "vs-devops-alm", + "ms.technology": "vs-devops-articles" + }, "fileMetadata": {}, "template": [], - "dest": "test-docset" + "dest": "vscom" } } \ No newline at end of file diff --git a/docs/_img/alm-dashboards-test-quality-failure-duration-charts.png b/docs/_img/alm-dashboards-test-quality-failure-duration-charts.png new file mode 100644 index 00000000000..1ff37d340a7 Binary files /dev/null and b/docs/_img/alm-dashboards-test-quality-failure-duration-charts.png differ diff --git a/docs/_img/alm-devops-continuous-planning-delivery-code-test-analytics.png b/docs/_img/alm-devops-continuous-planning-delivery-code-test-analytics.png new file mode 100644 index 00000000000..dc70216ea7e Binary files /dev/null and b/docs/_img/alm-devops-continuous-planning-delivery-code-test-analytics.png differ diff --git a/docs/_img/alm-feature-add-a-dashboard-2.png b/docs/_img/alm-feature-add-a-dashboard-2.png new file mode 100644 index 00000000000..885d7fecbd5 Binary files /dev/null and b/docs/_img/alm-feature-add-a-dashboard-2.png differ diff --git a/docs/_img/alm-feature-add-a-dashboard.png b/docs/_img/alm-feature-add-a-dashboard.png new file mode 100644 index 00000000000..030267ac46c Binary files /dev/null and b/docs/_img/alm-feature-add-a-dashboard.png differ diff --git a/docs/_img/alm-feature-add-work-items-discussion.png b/docs/_img/alm-feature-add-work-items-discussion.png new file mode 100644 index 00000000000..9acb4e201ee Binary files /dev/null and b/docs/_img/alm-feature-add-work-items-discussion.png differ diff --git a/docs/_img/alm-feature-admin-context.png b/docs/_img/alm-feature-admin-context.png new file mode 100644 index 00000000000..b9625953c55 Binary files /dev/null and b/docs/_img/alm-feature-admin-context.png differ diff --git a/docs/_img/alm-feature-area-paths.png b/docs/_img/alm-feature-area-paths.png new file mode 100644 index 00000000000..faf408dac66 Binary files /dev/null and b/docs/_img/alm-feature-area-paths.png differ diff --git a/docs/_img/alm-feature-at-mention-control_305.png b/docs/_img/alm-feature-at-mention-control_305.png new file mode 100644 index 00000000000..6c541d9a33a Binary files /dev/null and b/docs/_img/alm-feature-at-mention-control_305.png differ diff --git a/docs/_img/alm-feature-build-summary-widget.png b/docs/_img/alm-feature-build-summary-widget.png new file mode 100644 index 00000000000..916a8a571e1 Binary files /dev/null and b/docs/_img/alm-feature-build-summary-widget.png differ diff --git a/docs/_img/alm-feature-capacity-widget.png b/docs/_img/alm-feature-capacity-widget.png new file mode 100644 index 00000000000..0a836f40355 Binary files /dev/null and b/docs/_img/alm-feature-capacity-widget.png differ diff --git a/docs/_img/alm-feature-chart-work.png b/docs/_img/alm-feature-chart-work.png new file mode 100644 index 00000000000..76dd60f5a3b Binary files /dev/null and b/docs/_img/alm-feature-chart-work.png differ diff --git a/docs/_img/alm-feature-define-sprints.png b/docs/_img/alm-feature-define-sprints.png new file mode 100644 index 00000000000..0f3bb26d132 Binary files /dev/null and b/docs/_img/alm-feature-define-sprints.png differ diff --git a/docs/_img/alm-feature-email-control.png b/docs/_img/alm-feature-email-control.png new file mode 100644 index 00000000000..526015e0ac2 Binary files /dev/null and b/docs/_img/alm-feature-email-control.png differ diff --git a/docs/_img/alm-feature-filter-backlog.png b/docs/_img/alm-feature-filter-backlog.png new file mode 100644 index 00000000000..138de882a0f Binary files /dev/null and b/docs/_img/alm-feature-filter-backlog.png differ diff --git a/docs/_img/alm-feature-followed-work-items.png b/docs/_img/alm-feature-followed-work-items.png new file mode 100644 index 00000000000..fad9ee1171e Binary files /dev/null and b/docs/_img/alm-feature-followed-work-items.png differ diff --git a/docs/_img/alm-feature-follows.png b/docs/_img/alm-feature-follows.png new file mode 100644 index 00000000000..9240bec3e95 Binary files /dev/null and b/docs/_img/alm-feature-follows.png differ diff --git a/docs/_img/alm-feature-git-dev-commit-push.png b/docs/_img/alm-feature-git-dev-commit-push.png new file mode 100644 index 00000000000..e26c03b9ddf Binary files /dev/null and b/docs/_img/alm-feature-git-dev-commit-push.png differ diff --git a/docs/_img/alm-feature-git-dev-section.png b/docs/_img/alm-feature-git-dev-section.png new file mode 100644 index 00000000000..41021f76a39 Binary files /dev/null and b/docs/_img/alm-feature-git-dev-section.png differ diff --git a/docs/_img/alm-feature-kanban-filter-fields.png b/docs/_img/alm-feature-kanban-filter-fields.png new file mode 100644 index 00000000000..45901ae352a Binary files /dev/null and b/docs/_img/alm-feature-kanban-filter-fields.png differ diff --git a/docs/_img/alm-feature-kanban-filter.png b/docs/_img/alm-feature-kanban-filter.png new file mode 100644 index 00000000000..f16fa6e6286 Binary files /dev/null and b/docs/_img/alm-feature-kanban-filter.png differ diff --git a/docs/_img/alm-feature-kanban-flow.png b/docs/_img/alm-feature-kanban-flow.png new file mode 100644 index 00000000000..a25807f3664 Binary files /dev/null and b/docs/_img/alm-feature-kanban-flow.png differ diff --git a/docs/_img/alm-feature-links-control.png b/docs/_img/alm-feature-links-control.png new file mode 100644 index 00000000000..4656152d9d1 Binary files /dev/null and b/docs/_img/alm-feature-links-control.png differ diff --git a/docs/_img/alm-feature-live-updates.png b/docs/_img/alm-feature-live-updates.png new file mode 100644 index 00000000000..0cf60d5db33 Binary files /dev/null and b/docs/_img/alm-feature-live-updates.png differ diff --git a/docs/_img/alm-feature-manage-members-widget.png b/docs/_img/alm-feature-manage-members-widget.png new file mode 100644 index 00000000000..4044b46feec Binary files /dev/null and b/docs/_img/alm-feature-manage-members-widget.png differ diff --git a/docs/_img/alm-feature-manage-members.png b/docs/_img/alm-feature-manage-members.png new file mode 100644 index 00000000000..f4333d21e2d Binary files /dev/null and b/docs/_img/alm-feature-manage-members.png differ diff --git a/docs/_img/alm-feature-markdown-widget.png b/docs/_img/alm-feature-markdown-widget.png new file mode 100644 index 00000000000..07fee7d81d0 Binary files /dev/null and b/docs/_img/alm-feature-markdown-widget.png differ diff --git a/docs/_img/alm-feature-multiple-teams.png b/docs/_img/alm-feature-multiple-teams.png new file mode 100644 index 00000000000..a72c97b7eee Binary files /dev/null and b/docs/_img/alm-feature-multiple-teams.png differ diff --git a/docs/_img/alm-feature-new-work-item-widget.png b/docs/_img/alm-feature-new-work-item-widget.png new file mode 100644 index 00000000000..115fa028119 Binary files /dev/null and b/docs/_img/alm-feature-new-work-item-widget.png differ diff --git a/docs/_img/alm-feature-notifications-in-vs.png b/docs/_img/alm-feature-notifications-in-vs.png new file mode 100644 index 00000000000..7e04f02a2f3 Binary files /dev/null and b/docs/_img/alm-feature-notifications-in-vs.png differ diff --git a/docs/_img/alm-feature-op-hubs-2.png b/docs/_img/alm-feature-op-hubs-2.png new file mode 100644 index 00000000000..f1f98d1977b Binary files /dev/null and b/docs/_img/alm-feature-op-hubs-2.png differ diff --git a/docs/_img/alm-feature-permission-states.png b/docs/_img/alm-feature-permission-states.png new file mode 100644 index 00000000000..f39aa23aa37 Binary files /dev/null and b/docs/_img/alm-feature-permission-states.png differ diff --git a/docs/_img/alm-feature-portfolio-management.png b/docs/_img/alm-feature-portfolio-management.png new file mode 100644 index 00000000000..9b5051a6ccf Binary files /dev/null and b/docs/_img/alm-feature-portfolio-management.png differ diff --git a/docs/_img/alm-feature-release-1.png b/docs/_img/alm-feature-release-1.png new file mode 100644 index 00000000000..bac8ec53688 Binary files /dev/null and b/docs/_img/alm-feature-release-1.png differ diff --git a/docs/_img/alm-feature-release-3.png b/docs/_img/alm-feature-release-3.png new file mode 100644 index 00000000000..8ebfe0e6f9b Binary files /dev/null and b/docs/_img/alm-feature-release-3.png differ diff --git a/docs/_img/alm-feature-service-hooks.png b/docs/_img/alm-feature-service-hooks.png new file mode 100644 index 00000000000..9d652433892 Binary files /dev/null and b/docs/_img/alm-feature-service-hooks.png differ diff --git a/docs/_img/alm-feature-switch-team-context.png b/docs/_img/alm-feature-switch-team-context.png new file mode 100644 index 00000000000..ecc94d3d862 Binary files /dev/null and b/docs/_img/alm-feature-switch-team-context.png differ diff --git a/docs/_img/alm-feature-tags.png b/docs/_img/alm-feature-tags.png new file mode 100644 index 00000000000..e2d8e48262e Binary files /dev/null and b/docs/_img/alm-feature-tags.png differ diff --git a/docs/_img/alm-feature-team-settings-gear-icon.png b/docs/_img/alm-feature-team-settings-gear-icon.png new file mode 100644 index 00000000000..68f0eccd05e Binary files /dev/null and b/docs/_img/alm-feature-team-settings-gear-icon.png differ diff --git a/docs/_img/alm-feature-team-velocity-chart.png b/docs/_img/alm-feature-team-velocity-chart.png new file mode 100644 index 00000000000..80f51831e5b Binary files /dev/null and b/docs/_img/alm-feature-team-velocity-chart.png differ diff --git a/docs/_img/alm-feature-test-chart.png b/docs/_img/alm-feature-test-chart.png new file mode 100644 index 00000000000..ec37fc7c7e5 Binary files /dev/null and b/docs/_img/alm-feature-test-chart.png differ diff --git a/docs/_img/alm-feature-test-unittests.png b/docs/_img/alm-feature-test-unittests.png new file mode 100644 index 00000000000..5cd13281d43 Binary files /dev/null and b/docs/_img/alm-feature-test-unittests.png differ diff --git a/docs/_img/alm-feature-widget-other-links.png b/docs/_img/alm-feature-widget-other-links.png new file mode 100644 index 00000000000..c38da99084e Binary files /dev/null and b/docs/_img/alm-feature-widget-other-links.png differ diff --git a/docs/_img/alm-feature-widget-query-tile.png b/docs/_img/alm-feature-widget-query-tile.png new file mode 100644 index 00000000000..2408b9a23b1 Binary files /dev/null and b/docs/_img/alm-feature-widget-query-tile.png differ diff --git a/docs/_img/alm-features-test-configuration.png b/docs/_img/alm-features-test-configuration.png new file mode 100644 index 00000000000..081cb6cae66 Binary files /dev/null and b/docs/_img/alm-features-test-configuration.png differ diff --git a/docs/_img/alm-index-copy-clone-work-item.png b/docs/_img/alm-index-copy-clone-work-item.png new file mode 100644 index 00000000000..229e28dbc49 Binary files /dev/null and b/docs/_img/alm-index-copy-clone-work-item.png differ diff --git a/docs/_img/alm-index-my-profile-menu.png b/docs/_img/alm-index-my-profile-menu.png new file mode 100644 index 00000000000..5b9a1a0fb40 Binary files /dev/null and b/docs/_img/alm-index-my-profile-menu.png differ diff --git a/docs/_img/alm-index-search-work-items-vsts.png b/docs/_img/alm-index-search-work-items-vsts.png new file mode 100644 index 00000000000..0c0f4d15e57 Binary files /dev/null and b/docs/_img/alm-index-search-work-items-vsts.png differ diff --git a/docs/_img/alm-index-sprint-burndown-widget.png b/docs/_img/alm-index-sprint-burndown-widget.png new file mode 100644 index 00000000000..03a0fdac8d9 Binary files /dev/null and b/docs/_img/alm-index-sprint-burndown-widget.png differ diff --git a/docs/_img/alm-index-team-favorites.png b/docs/_img/alm-index-team-favorites.png new file mode 100644 index 00000000000..7133c86628b Binary files /dev/null and b/docs/_img/alm-index-team-favorites.png differ diff --git a/docs/_img/articles-icon.png b/docs/_img/articles-icon.png new file mode 100644 index 00000000000..43a60a9d94c Binary files /dev/null and b/docs/_img/articles-icon.png differ diff --git a/docs/_img/check.png b/docs/_img/check.png new file mode 100644 index 00000000000..38dbfe17d4b Binary files /dev/null and b/docs/_img/check.png differ diff --git a/docs/_img/clients-vsts-tfs.png b/docs/_img/clients-vsts-tfs.png new file mode 100644 index 00000000000..ef5ee7e9445 Binary files /dev/null and b/docs/_img/clients-vsts-tfs.png differ diff --git a/docs/_img/customize-vsts-process.png b/docs/_img/customize-vsts-process.png new file mode 100644 index 00000000000..65c35588983 Binary files /dev/null and b/docs/_img/customize-vsts-process.png differ diff --git a/docs/_img/devops-feature-release-view-tests.png b/docs/_img/devops-feature-release-view-tests.png new file mode 100644 index 00000000000..17018ff10b0 Binary files /dev/null and b/docs/_img/devops-feature-release-view-tests.png differ diff --git a/docs/_img/feature-request-feedback.png b/docs/_img/feature-request-feedback.png new file mode 100644 index 00000000000..b2f80ed19e7 Binary files /dev/null and b/docs/_img/feature-request-feedback.png differ diff --git a/docs/_img/feature-widget-pull-request.png b/docs/_img/feature-widget-pull-request.png new file mode 100644 index 00000000000..b55040fccdb Binary files /dev/null and b/docs/_img/feature-widget-pull-request.png differ diff --git a/docs/_img/featured-extensions.png b/docs/_img/featured-extensions.png new file mode 100644 index 00000000000..688228fa357 Binary files /dev/null and b/docs/_img/featured-extensions.png differ diff --git a/docs/_img/features-agile-wits.png b/docs/_img/features-agile-wits.png new file mode 100644 index 00000000000..38dbc828b43 Binary files /dev/null and b/docs/_img/features-agile-wits.png differ diff --git a/docs/_img/features-app-insights-dashboard-blades.png b/docs/_img/features-app-insights-dashboard-blades.png new file mode 100644 index 00000000000..d3dfdec9e3c Binary files /dev/null and b/docs/_img/features-app-insights-dashboard-blades.png differ diff --git a/docs/_img/features-cmmi-wits.png b/docs/_img/features-cmmi-wits.png new file mode 100644 index 00000000000..accdd33456b Binary files /dev/null and b/docs/_img/features-cmmi-wits.png differ diff --git a/docs/_img/features-exploratory-testing.png b/docs/_img/features-exploratory-testing.png new file mode 100644 index 00000000000..e7cca78b811 Binary files /dev/null and b/docs/_img/features-exploratory-testing.png differ diff --git a/docs/_img/features-follow-pull-request.png b/docs/_img/features-follow-pull-request.png new file mode 100644 index 00000000000..6802fcc2191 Binary files /dev/null and b/docs/_img/features-follow-pull-request.png differ diff --git a/docs/_img/features-git-vs-ui.png b/docs/_img/features-git-vs-ui.png new file mode 100644 index 00000000000..6d3bf57dc3a Binary files /dev/null and b/docs/_img/features-git-vs-ui.png differ diff --git a/docs/_img/features-global-profile.png b/docs/_img/features-global-profile.png new file mode 100644 index 00000000000..0dd20bd2921 Binary files /dev/null and b/docs/_img/features-global-profile.png differ diff --git a/docs/_img/features-hockeyapp-dashboard.png b/docs/_img/features-hockeyapp-dashboard.png new file mode 100644 index 00000000000..157886429c1 Binary files /dev/null and b/docs/_img/features-hockeyapp-dashboard.png differ diff --git a/docs/_img/features-index-code-search-vsts.png b/docs/_img/features-index-code-search-vsts.png new file mode 100644 index 00000000000..404a76238c2 Binary files /dev/null and b/docs/_img/features-index-code-search-vsts.png differ diff --git a/docs/_img/features-notifications-option.png b/docs/_img/features-notifications-option.png new file mode 100644 index 00000000000..2050a074167 Binary files /dev/null and b/docs/_img/features-notifications-option.png differ diff --git a/docs/_img/features-query-permissions.png b/docs/_img/features-query-permissions.png new file mode 100644 index 00000000000..c4bfc93b645 Binary files /dev/null and b/docs/_img/features-query-permissions.png differ diff --git a/docs/_img/features-quick-add-panel.png b/docs/_img/features-quick-add-panel.png new file mode 100644 index 00000000000..3c6e2973d2f Binary files /dev/null and b/docs/_img/features-quick-add-panel.png differ diff --git a/docs/_img/features-scrum-wits.png b/docs/_img/features-scrum-wits.png new file mode 100644 index 00000000000..7ee1ae51417 Binary files /dev/null and b/docs/_img/features-scrum-wits.png differ diff --git a/docs/_img/features-team-sprints-2.png b/docs/_img/features-team-sprints-2.png new file mode 100644 index 00000000000..f578080a648 Binary files /dev/null and b/docs/_img/features-team-sprints-2.png differ diff --git a/docs/_img/features-test-results.png b/docs/_img/features-test-results.png new file mode 100644 index 00000000000..16870abb4e8 Binary files /dev/null and b/docs/_img/features-test-results.png differ diff --git a/docs/_img/features-tfvc-ui-vs.png b/docs/_img/features-tfvc-ui-vs.png new file mode 100644 index 00000000000..df7fbb7d6d1 Binary files /dev/null and b/docs/_img/features-tfvc-ui-vs.png differ diff --git a/docs/_img/features-wit-link-tab.png b/docs/_img/features-wit-link-tab.png new file mode 100644 index 00000000000..c33d32db989 Binary files /dev/null and b/docs/_img/features-wit-link-tab.png differ diff --git a/docs/_img/icons/admin-gear-icon.png b/docs/_img/icons/admin-gear-icon.png new file mode 100644 index 00000000000..8f79c4767e0 Binary files /dev/null and b/docs/_img/icons/admin-gear-icon.png differ diff --git a/docs/_img/icons/bug-icon.png b/docs/_img/icons/bug-icon.png new file mode 100644 index 00000000000..6b53afe6854 Binary files /dev/null and b/docs/_img/icons/bug-icon.png differ diff --git a/docs/_img/icons/checkmark.png b/docs/_img/icons/checkmark.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/_img/icons/checkmark.png differ diff --git a/docs/_img/icons/gear-icon.png b/docs/_img/icons/gear-icon.png new file mode 100644 index 00000000000..0bad2ccf47b Binary files /dev/null and b/docs/_img/icons/gear-icon.png differ diff --git a/docs/_img/icons/icon-favorite-star.png b/docs/_img/icons/icon-favorite-star.png new file mode 100644 index 00000000000..af0fee33365 Binary files /dev/null and b/docs/_img/icons/icon-favorite-star.png differ diff --git a/docs/_img/icons/icon-favorited.png b/docs/_img/icons/icon-favorited.png new file mode 100644 index 00000000000..3ae00263960 Binary files /dev/null and b/docs/_img/icons/icon-favorited.png differ diff --git a/docs/_img/icons/icon-followed.png b/docs/_img/icons/icon-followed.png new file mode 100644 index 00000000000..eabdea31069 Binary files /dev/null and b/docs/_img/icons/icon-followed.png differ diff --git a/docs/_img/icons/project-icon.png b/docs/_img/icons/project-icon.png new file mode 100644 index 00000000000..806ceb3f6b7 Binary files /dev/null and b/docs/_img/icons/project-icon.png differ diff --git a/docs/_img/icons/save-icon.png b/docs/_img/icons/save-icon.png new file mode 100644 index 00000000000..06e97592f0b Binary files /dev/null and b/docs/_img/icons/save-icon.png differ diff --git a/docs/_img/icons/user-story-icon.png b/docs/_img/icons/user-story-icon.png new file mode 100644 index 00000000000..0932a9dc8ca Binary files /dev/null and b/docs/_img/icons/user-story-icon.png differ diff --git a/docs/_img/index-add-field.png b/docs/_img/index-add-field.png new file mode 100644 index 00000000000..76dbef12c28 Binary files /dev/null and b/docs/_img/index-add-field.png differ diff --git a/docs/_img/index-add-group.png b/docs/_img/index-add-group.png new file mode 100644 index 00000000000..2135a0747f6 Binary files /dev/null and b/docs/_img/index-add-group.png differ diff --git a/docs/_img/index/arrow_24x.svg b/docs/_img/index/arrow_24x.svg new file mode 100644 index 00000000000..e98bfed72db --- /dev/null +++ b/docs/_img/index/arrow_24x.svg @@ -0,0 +1,11 @@ + + + + + arrow_24x + + diff --git a/docs/_img/index/i_account-management.svg b/docs/_img/index/i_account-management.svg new file mode 100644 index 00000000000..baed0b512f6 --- /dev/null +++ b/docs/_img/index/i_account-management.svg @@ -0,0 +1,45 @@ + + + + + i_account-management + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_agent.svg b/docs/_img/index/i_agent.svg new file mode 100644 index 00000000000..98eebccfd0a --- /dev/null +++ b/docs/_img/index/i_agent.svg @@ -0,0 +1,40 @@ + + + + + i_agent + + + + + + + + + + + + diff --git a/docs/_img/index/i_agile.svg b/docs/_img/index/i_agile.svg new file mode 100644 index 00000000000..6bcdab4a81d --- /dev/null +++ b/docs/_img/index/i_agile.svg @@ -0,0 +1,37 @@ + + + + + i_agile + + + + + + + + + + + + + diff --git a/docs/_img/index/i_alert.svg b/docs/_img/index/i_alert.svg new file mode 100644 index 00000000000..a7cac9684f1 --- /dev/null +++ b/docs/_img/index/i_alert.svg @@ -0,0 +1,34 @@ + + + + + i_alert + + + + + + diff --git a/docs/_img/index/i_backlog.svg b/docs/_img/index/i_backlog.svg new file mode 100644 index 00000000000..46ee968246b --- /dev/null +++ b/docs/_img/index/i_backlog.svg @@ -0,0 +1,28 @@ + + + + + i_backlog + + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_billing.svg b/docs/_img/index/i_billing.svg new file mode 100644 index 00000000000..2cf9e94db4f --- /dev/null +++ b/docs/_img/index/i_billing.svg @@ -0,0 +1,48 @@ + + + + + i_billing + + + + + + + + + + + + + diff --git a/docs/_img/index/i_branch-policies.svg b/docs/_img/index/i_branch-policies.svg new file mode 100644 index 00000000000..7ed11270138 --- /dev/null +++ b/docs/_img/index/i_branch-policies.svg @@ -0,0 +1,32 @@ + + + + + i_branch-policies + + + + + + + + + diff --git a/docs/_img/index/i_build.svg b/docs/_img/index/i_build.svg new file mode 100644 index 00000000000..7291a54702c --- /dev/null +++ b/docs/_img/index/i_build.svg @@ -0,0 +1,62 @@ + + + + + i_build + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_code-quality.svg b/docs/_img/index/i_code-quality.svg new file mode 100644 index 00000000000..cabb545813e --- /dev/null +++ b/docs/_img/index/i_code-quality.svg @@ -0,0 +1,44 @@ + + + + + i_code-quality + + + + + + + + + + + + + diff --git a/docs/_img/index/i_config-tools.svg b/docs/_img/index/i_config-tools.svg new file mode 100644 index 00000000000..bcaf6bfd1e8 --- /dev/null +++ b/docs/_img/index/i_config-tools.svg @@ -0,0 +1,32 @@ + + + + + i_config-tools + + + + + diff --git a/docs/_img/index/i_configure-teams.svg b/docs/_img/index/i_configure-teams.svg new file mode 100644 index 00000000000..51276d9c8ff --- /dev/null +++ b/docs/_img/index/i_configure-teams.svg @@ -0,0 +1,34 @@ + + + + + i_configure-teams + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_continuous-testing.svg b/docs/_img/index/i_continuous-testing.svg new file mode 100644 index 00000000000..d58267a0013 --- /dev/null +++ b/docs/_img/index/i_continuous-testing.svg @@ -0,0 +1,38 @@ + + + + + i_continuous-testing + + + + + + + diff --git a/docs/_img/index/i_dashboard.svg b/docs/_img/index/i_dashboard.svg new file mode 100644 index 00000000000..998f5e0727a --- /dev/null +++ b/docs/_img/index/i_dashboard.svg @@ -0,0 +1,35 @@ + + + + + i_dashboard + + + + + + + + diff --git a/docs/_img/index/i_delivery.svg b/docs/_img/index/i_delivery.svg new file mode 100644 index 00000000000..aece6f9efe4 --- /dev/null +++ b/docs/_img/index/i_delivery.svg @@ -0,0 +1,52 @@ + + + + + i_delivery + + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_deploy.svg b/docs/_img/index/i_deploy.svg new file mode 100644 index 00000000000..ad98ec83a8c --- /dev/null +++ b/docs/_img/index/i_deploy.svg @@ -0,0 +1,41 @@ + + + + + deploy + + + + + + + + + + diff --git a/docs/_img/index/i_download-install.svg b/docs/_img/index/i_download-install.svg new file mode 100644 index 00000000000..a4712d4802e --- /dev/null +++ b/docs/_img/index/i_download-install.svg @@ -0,0 +1,37 @@ + + + + + i_download-install + + + + + + + + + diff --git a/docs/_img/index/i_exploratory-testing.svg b/docs/_img/index/i_exploratory-testing.svg new file mode 100644 index 00000000000..d2ea8c83750 --- /dev/null +++ b/docs/_img/index/i_exploratory-testing.svg @@ -0,0 +1,49 @@ + + + + + i_exploratory-testing + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_extend.svg b/docs/_img/index/i_extend.svg new file mode 100644 index 00000000000..07829d0be42 --- /dev/null +++ b/docs/_img/index/i_extend.svg @@ -0,0 +1,34 @@ + + + + + i_extend + + + + + + + diff --git a/docs/_img/index/i_extensions.svg b/docs/_img/index/i_extensions.svg new file mode 100644 index 00000000000..50e8e158272 --- /dev/null +++ b/docs/_img/index/i_extensions.svg @@ -0,0 +1,33 @@ + + + + + i_extensions + + + + + + diff --git a/docs/_img/index/i_forks.svg b/docs/_img/index/i_forks.svg new file mode 100644 index 00000000000..ddbfb9f5abd --- /dev/null +++ b/docs/_img/index/i_forks.svg @@ -0,0 +1,29 @@ + + + + + i_fork + + + + + + diff --git a/docs/_img/index/i_generic-database.svg b/docs/_img/index/i_generic-database.svg new file mode 100644 index 00000000000..ae0a83633fb --- /dev/null +++ b/docs/_img/index/i_generic-database.svg @@ -0,0 +1,34 @@ + + + + + i_generic-database + + + + + + + diff --git a/docs/_img/index/i_kanban.svg b/docs/_img/index/i_kanban.svg new file mode 100644 index 00000000000..4d3de6245d2 --- /dev/null +++ b/docs/_img/index/i_kanban.svg @@ -0,0 +1,58 @@ + + + + + i_kaban + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_library.svg b/docs/_img/index/i_library.svg new file mode 100644 index 00000000000..10f179d1617 --- /dev/null +++ b/docs/_img/index/i_library.svg @@ -0,0 +1,37 @@ + + + + + i_library + + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_load-testing.svg b/docs/_img/index/i_load-testing.svg new file mode 100644 index 00000000000..154c06729ef --- /dev/null +++ b/docs/_img/index/i_load-testing.svg @@ -0,0 +1,46 @@ + + + + + i_load-testing + + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_management.svg b/docs/_img/index/i_management.svg new file mode 100644 index 00000000000..79efe6d427e --- /dev/null +++ b/docs/_img/index/i_management.svg @@ -0,0 +1,41 @@ + + + + + i_management + + + + + + + + + + diff --git a/docs/_img/index/i_protect.svg b/docs/_img/index/i_protect.svg new file mode 100644 index 00000000000..2b0d3be6fe3 --- /dev/null +++ b/docs/_img/index/i_protect.svg @@ -0,0 +1,40 @@ + + + + + i_protect + + + + + + + + + diff --git a/docs/_img/index/i_pull-request.svg b/docs/_img/index/i_pull-request.svg new file mode 100644 index 00000000000..14621a4774b --- /dev/null +++ b/docs/_img/index/i_pull-request.svg @@ -0,0 +1,47 @@ + + + + + i_pull-request + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/i_queries.svg b/docs/_img/index/i_queries.svg new file mode 100644 index 00000000000..41de09cf2bd --- /dev/null +++ b/docs/_img/index/i_queries.svg @@ -0,0 +1,44 @@ + + + + + i_queries + + + + + + + + + + + + + diff --git a/docs/_img/index/i_reference.svg b/docs/_img/index/i_reference.svg new file mode 100644 index 00000000000..3eca11b0d00 --- /dev/null +++ b/docs/_img/index/i_reference.svg @@ -0,0 +1,26 @@ + + + + + i_reference + + + + + + diff --git a/docs/_img/index/i_scrum.svg b/docs/_img/index/i_scrum.svg new file mode 100644 index 00000000000..d3b0d825084 --- /dev/null +++ b/docs/_img/index/i_scrum.svg @@ -0,0 +1,32 @@ + + + + + i_scrum + + + + + + + + + diff --git a/docs/_img/index/i_search.svg b/docs/_img/index/i_search.svg new file mode 100644 index 00000000000..b71255f6105 --- /dev/null +++ b/docs/_img/index/i_search.svg @@ -0,0 +1,29 @@ + + + + + i_search + + + + + diff --git a/docs/_img/index/i_service-hooks.svg b/docs/_img/index/i_service-hooks.svg new file mode 100644 index 00000000000..cc3c1fa7450 --- /dev/null +++ b/docs/_img/index/i_service-hooks.svg @@ -0,0 +1,37 @@ + + + + + i_service-hooks + + + + + + + + + + diff --git a/docs/_img/index/i_tasks.svg b/docs/_img/index/i_tasks.svg new file mode 100644 index 00000000000..16620ffce21 --- /dev/null +++ b/docs/_img/index/i_tasks.svg @@ -0,0 +1,34 @@ + + + + + i_tasks + + + + + + + + + + diff --git a/docs/_img/index/i_unit-testing.svg b/docs/_img/index/i_unit-testing.svg new file mode 100644 index 00000000000..f12fd9fb4f5 --- /dev/null +++ b/docs/_img/index/i_unit-testing.svg @@ -0,0 +1,39 @@ + + + + + i_unit-testing + + + + + + + + diff --git a/docs/_img/index/logo-git-mark.svg b/docs/_img/index/logo-git-mark.svg new file mode 100644 index 00000000000..7f81f0ee04c --- /dev/null +++ b/docs/_img/index/logo-git-mark.svg @@ -0,0 +1,13 @@ + + + + + logo-git-mark + + + + diff --git a/docs/_img/index/logo-slack.svg b/docs/_img/index/logo-slack.svg new file mode 100644 index 00000000000..f416d188da8 --- /dev/null +++ b/docs/_img/index/logo-slack.svg @@ -0,0 +1,48 @@ + + + + + logo-slack + + + + + + + + + + + diff --git a/docs/_img/index/logo-timetracker.svg b/docs/_img/index/logo-timetracker.svg new file mode 100644 index 00000000000..3f5ac1fc71e --- /dev/null +++ b/docs/_img/index/logo-timetracker.svg @@ -0,0 +1,16 @@ + + + + + logo-timetracker + + + diff --git a/docs/_img/index/logo-uservoice.svg b/docs/_img/index/logo-uservoice.svg new file mode 100644 index 00000000000..144ec62b971 --- /dev/null +++ b/docs/_img/index/logo-uservoice.svg @@ -0,0 +1,25 @@ + + + + + logo-uservoice + + + + + + + + diff --git a/docs/_img/index/logo-work-item-visualizer.svg b/docs/_img/index/logo-work-item-visualizer.svg new file mode 100644 index 00000000000..4f87a8ff635 --- /dev/null +++ b/docs/_img/index/logo-work-item-visualizer.svg @@ -0,0 +1,43 @@ + + + + + logo-work-item-visualizer + + + + + + + + + + + + diff --git a/docs/_img/index/logo_NET.svg b/docs/_img/index/logo_NET.svg new file mode 100644 index 00000000000..a71342c9b6f --- /dev/null +++ b/docs/_img/index/logo_NET.svg @@ -0,0 +1,26 @@ + + + + + logo_NET + + + + + + + + + diff --git a/docs/_img/index/logo_REST.svg b/docs/_img/index/logo_REST.svg new file mode 100644 index 00000000000..a15cdf1f0fd --- /dev/null +++ b/docs/_img/index/logo_REST.svg @@ -0,0 +1,26 @@ + + + + + logo_REST + + + + + + + + + diff --git a/docs/_img/index/logo_agile-cards.svg b/docs/_img/index/logo_agile-cards.svg new file mode 100644 index 00000000000..32da87cc8d2 --- /dev/null +++ b/docs/_img/index/logo_agile-cards.svg @@ -0,0 +1,18 @@ + + + + + logo_agile-cards + + + + + diff --git a/docs/_img/index/logo_bamboo.svg b/docs/_img/index/logo_bamboo.svg new file mode 100644 index 00000000000..d76ef49ac82 --- /dev/null +++ b/docs/_img/index/logo_bamboo.svg @@ -0,0 +1,32 @@ + + + + + logo_bamboo + + + + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/logo_code-search.svg b/docs/_img/index/logo_code-search.svg new file mode 100644 index 00000000000..b8d6929c94b --- /dev/null +++ b/docs/_img/index/logo_code-search.svg @@ -0,0 +1,29 @@ + + + + + logo_code-search + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/logo_jenkins.svg b/docs/_img/index/logo_jenkins.svg new file mode 100644 index 00000000000..d3cf4503d50 --- /dev/null +++ b/docs/_img/index/logo_jenkins.svg @@ -0,0 +1,128 @@ + + + + + logo_jenkins + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/logo_octopus-deploy.svg b/docs/_img/index/logo_octopus-deploy.svg new file mode 100644 index 00000000000..d08c6ffd16e --- /dev/null +++ b/docs/_img/index/logo_octopus-deploy.svg @@ -0,0 +1,11 @@ + + + + + logo_octopus-deploy + + diff --git a/docs/_img/index/logo_odata.svg b/docs/_img/index/logo_odata.svg new file mode 100644 index 00000000000..c1eccecb703 --- /dev/null +++ b/docs/_img/index/logo_odata.svg @@ -0,0 +1,23 @@ + + + + + logo_odata + + + + + + + + + + diff --git a/docs/_img/index/logo_power-bi.svg b/docs/_img/index/logo_power-bi.svg new file mode 100644 index 00000000000..eed9e4a4561 --- /dev/null +++ b/docs/_img/index/logo_power-bi.svg @@ -0,0 +1,29 @@ + + + + + logo_power-bi + + + + + + + + + diff --git a/docs/_img/index/logo_project-server.svg b/docs/_img/index/logo_project-server.svg new file mode 100644 index 00000000000..b00dc975d64 --- /dev/null +++ b/docs/_img/index/logo_project-server.svg @@ -0,0 +1,51 @@ + + + + + + + + + logo_project-server + + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/logo_sharepoint.svg b/docs/_img/index/logo_sharepoint.svg new file mode 100644 index 00000000000..5a511f8c6e9 --- /dev/null +++ b/docs/_img/index/logo_sharepoint.svg @@ -0,0 +1,55 @@ + + + + + + + + + logo_sharepoint + + + + + + + + + + + + + + + + + diff --git a/docs/_img/index/logo_test-feedback.svg b/docs/_img/index/logo_test-feedback.svg new file mode 100644 index 00000000000..b9b33e00505 --- /dev/null +++ b/docs/_img/index/logo_test-feedback.svg @@ -0,0 +1,31 @@ + + + + + logo_test-feedback + + + + + + + + + + + diff --git a/docs/_img/index/logo_trello.svg b/docs/_img/index/logo_trello.svg new file mode 100644 index 00000000000..d1d032993c8 --- /dev/null +++ b/docs/_img/index/logo_trello.svg @@ -0,0 +1,17 @@ + + + + + logo_trello + + + + diff --git a/docs/_img/index/logo_vs-team-services.svg b/docs/_img/index/logo_vs-team-services.svg new file mode 100644 index 00000000000..4900af6fdd5 --- /dev/null +++ b/docs/_img/index/logo_vs-team-services.svg @@ -0,0 +1,13 @@ + + + + + logo_vs-team-services + + + + diff --git a/docs/_img/index/logo_zendesk.svg b/docs/_img/index/logo_zendesk.svg new file mode 100644 index 00000000000..f99fc1b9775 --- /dev/null +++ b/docs/_img/index/logo_zendesk.svg @@ -0,0 +1,16 @@ + + + + + logo_zendesk + + + + + + + diff --git a/docs/_img/index/team-services-agile.svg b/docs/_img/index/team-services-agile.svg new file mode 100644 index 00000000000..5ab6d0b6190 --- /dev/null +++ b/docs/_img/index/team-services-agile.svg @@ -0,0 +1,40 @@ + + + + + team-services-agile + + + + + + + + + + + + diff --git a/docs/_img/index/team-services-devops.svg b/docs/_img/index/team-services-devops.svg new file mode 100644 index 00000000000..48fd6f42afa --- /dev/null +++ b/docs/_img/index/team-services-devops.svg @@ -0,0 +1,47 @@ + + + + + team-services-devops + + + + + + + + + + + + diff --git a/docs/_img/index/team-services-git.svg b/docs/_img/index/team-services-git.svg new file mode 100644 index 00000000000..acd2a90a519 --- /dev/null +++ b/docs/_img/index/team-services-git.svg @@ -0,0 +1,27 @@ + + + + + team-services-git + + + + + + diff --git a/docs/_img/index/team-services-marketplace.svg b/docs/_img/index/team-services-marketplace.svg new file mode 100644 index 00000000000..5cb738ba1ff --- /dev/null +++ b/docs/_img/index/team-services-marketplace.svg @@ -0,0 +1,44 @@ + + + + + team-services-marketplace + + + + + + + + + + + + + diff --git a/docs/_img/migration-import/VSTSMigrationGuideCover-227x300.png b/docs/_img/migration-import/VSTSMigrationGuideCover-227x300.png new file mode 100644 index 00000000000..85449ef32b1 Binary files /dev/null and b/docs/_img/migration-import/VSTSMigrationGuideCover-227x300.png differ diff --git a/docs/_img/multi-platform.png b/docs/_img/multi-platform.png new file mode 100644 index 00000000000..e58fe6134c2 Binary files /dev/null and b/docs/_img/multi-platform.png differ diff --git a/docs/_img/overview/GetStartedLearningGuide.pptx b/docs/_img/overview/GetStartedLearningGuide.pptx new file mode 100644 index 00000000000..3c109479c81 Binary files /dev/null and b/docs/_img/overview/GetStartedLearningGuide.pptx differ diff --git a/docs/_img/overview/code-git-android-studio-1.png b/docs/_img/overview/code-git-android-studio-1.png new file mode 100644 index 00000000000..3fb7d581406 Binary files /dev/null and b/docs/_img/overview/code-git-android-studio-1.png differ diff --git a/docs/_img/overview/code-git-eclipse-2.png b/docs/_img/overview/code-git-eclipse-2.png new file mode 100644 index 00000000000..bee9c6b7a88 Binary files /dev/null and b/docs/_img/overview/code-git-eclipse-2.png differ diff --git a/docs/_img/overview/code-git-intellij-3.png b/docs/_img/overview/code-git-intellij-3.png new file mode 100644 index 00000000000..983c59257e0 Binary files /dev/null and b/docs/_img/overview/code-git-intellij-3.png differ diff --git a/docs/_img/overview/code-git-visual-studio-code.png b/docs/_img/overview/code-git-visual-studio-code.png new file mode 100644 index 00000000000..33edadc47f0 Binary files /dev/null and b/docs/_img/overview/code-git-visual-studio-code.png differ diff --git a/docs/_img/overview/code-git-visual-studio.png b/docs/_img/overview/code-git-visual-studio.png new file mode 100644 index 00000000000..14e1f48e004 Binary files /dev/null and b/docs/_img/overview/code-git-visual-studio.png differ diff --git a/docs/_img/overview/code-git-xcode.png b/docs/_img/overview/code-git-xcode.png new file mode 100644 index 00000000000..2029159b20e Binary files /dev/null and b/docs/_img/overview/code-git-xcode.png differ diff --git a/docs/_img/overview/code-tfvc-eclipse.png b/docs/_img/overview/code-tfvc-eclipse.png new file mode 100644 index 00000000000..26a613380d8 Binary files /dev/null and b/docs/_img/overview/code-tfvc-eclipse.png differ diff --git a/docs/_img/overview/code-tfvc-visualstudio.png b/docs/_img/overview/code-tfvc-visualstudio.png new file mode 100644 index 00000000000..1c9948c00ce Binary files /dev/null and b/docs/_img/overview/code-tfvc-visualstudio.png differ diff --git a/docs/_img/overview/code-tfvc-xcode.png b/docs/_img/overview/code-tfvc-xcode.png new file mode 100644 index 00000000000..1c9948c00ce Binary files /dev/null and b/docs/_img/overview/code-tfvc-xcode.png differ diff --git a/docs/_img/overview/ov-agile-plan-1.png b/docs/_img/overview/ov-agile-plan-1.png new file mode 100644 index 00000000000..d310a185a4b Binary files /dev/null and b/docs/_img/overview/ov-agile-plan-1.png differ diff --git a/docs/_img/overview/ov-agile-plan-2.png b/docs/_img/overview/ov-agile-plan-2.png new file mode 100644 index 00000000000..81c56f32abf Binary files /dev/null and b/docs/_img/overview/ov-agile-plan-2.png differ diff --git a/docs/_img/overview/ov-agile-plan-3.png b/docs/_img/overview/ov-agile-plan-3.png new file mode 100644 index 00000000000..539c3a138a4 Binary files /dev/null and b/docs/_img/overview/ov-agile-plan-3.png differ diff --git a/docs/_img/overview/ov-agile-plan-dashboards-4.png b/docs/_img/overview/ov-agile-plan-dashboards-4.png new file mode 100644 index 00000000000..fc3c9ec3457 Binary files /dev/null and b/docs/_img/overview/ov-agile-plan-dashboards-4.png differ diff --git a/docs/_img/overview/ov-devops-build.png b/docs/_img/overview/ov-devops-build.png new file mode 100644 index 00000000000..448cdd90745 Binary files /dev/null and b/docs/_img/overview/ov-devops-build.png differ diff --git a/docs/_img/overview/ov-devops-release.png b/docs/_img/overview/ov-devops-release.png new file mode 100644 index 00000000000..7d9aa23e1c0 Binary files /dev/null and b/docs/_img/overview/ov-devops-release.png differ diff --git a/docs/_img/overview/ov-devops-test.png b/docs/_img/overview/ov-devops-test.png new file mode 100644 index 00000000000..85a045334a7 Binary files /dev/null and b/docs/_img/overview/ov-devops-test.png differ diff --git a/docs/_img/overview/ov-scale-1.png b/docs/_img/overview/ov-scale-1.png new file mode 100644 index 00000000000..935b57317b0 Binary files /dev/null and b/docs/_img/overview/ov-scale-1.png differ diff --git a/docs/_img/overview/ov-scale-2.png b/docs/_img/overview/ov-scale-2.png new file mode 100644 index 00000000000..ae67d01b7f4 Binary files /dev/null and b/docs/_img/overview/ov-scale-2.png differ diff --git a/docs/_img/overview/ov-scale-3.png b/docs/_img/overview/ov-scale-3.png new file mode 100644 index 00000000000..7f3a5eefd89 Binary files /dev/null and b/docs/_img/overview/ov-scale-3.png differ diff --git a/docs/_img/overview/tfs-setup-1.png b/docs/_img/overview/tfs-setup-1.png new file mode 100644 index 00000000000..47766622211 Binary files /dev/null and b/docs/_img/overview/tfs-setup-1.png differ diff --git a/docs/_img/overview/tfs-setup-2.png b/docs/_img/overview/tfs-setup-2.png new file mode 100644 index 00000000000..afe0b47fa17 Binary files /dev/null and b/docs/_img/overview/tfs-setup-2.png differ diff --git a/docs/_img/overview/tfs-setup-3.png b/docs/_img/overview/tfs-setup-3.png new file mode 100644 index 00000000000..87e9e9586cf Binary files /dev/null and b/docs/_img/overview/tfs-setup-3.png differ diff --git a/docs/_img/overview/tfs-setup-4.png b/docs/_img/overview/tfs-setup-4.png new file mode 100644 index 00000000000..dbabea6a77d Binary files /dev/null and b/docs/_img/overview/tfs-setup-4.png differ diff --git a/docs/_img/overview/vsts-setup-1.png b/docs/_img/overview/vsts-setup-1.png new file mode 100644 index 00000000000..5c325da7b0c Binary files /dev/null and b/docs/_img/overview/vsts-setup-1.png differ diff --git a/docs/_img/overview/vsts-setup-3.png b/docs/_img/overview/vsts-setup-3.png new file mode 100644 index 00000000000..8a84a0f3e94 Binary files /dev/null and b/docs/_img/overview/vsts-setup-3.png differ diff --git a/docs/_img/overview/vsts-setup-4.png b/docs/_img/overview/vsts-setup-4.png new file mode 100644 index 00000000000..a3f6fbf59ed Binary files /dev/null and b/docs/_img/overview/vsts-setup-4.png differ diff --git a/docs/_img/provide-feedback-content-feedback.png b/docs/_img/provide-feedback-content-feedback.png new file mode 100644 index 00000000000..91742529000 Binary files /dev/null and b/docs/_img/provide-feedback-content-feedback.png differ diff --git a/docs/_img/provide-feedback-platform-version-header.png b/docs/_img/provide-feedback-platform-version-header.png new file mode 100644 index 00000000000..c3178517594 Binary files /dev/null and b/docs/_img/provide-feedback-platform-version-header.png differ diff --git a/docs/_img/provide-feedback-report-problem.png b/docs/_img/provide-feedback-report-problem.png new file mode 100644 index 00000000000..873deb0973f Binary files /dev/null and b/docs/_img/provide-feedback-report-problem.png differ diff --git a/docs/_img/send-smile-2.png b/docs/_img/send-smile-2.png new file mode 100644 index 00000000000..8166d8e3f74 Binary files /dev/null and b/docs/_img/send-smile-2.png differ diff --git a/docs/_img/services-hubs.png b/docs/_img/services-hubs.png new file mode 100644 index 00000000000..fffb38d0658 Binary files /dev/null and b/docs/_img/services-hubs.png differ diff --git a/docs/_img/services/build-release-hub.jpg b/docs/_img/services/build-release-hub.jpg new file mode 100644 index 00000000000..d35c27d8009 Binary files /dev/null and b/docs/_img/services/build-release-hub.jpg differ diff --git a/docs/_img/services/build-release-hub.png b/docs/_img/services/build-release-hub.png new file mode 100644 index 00000000000..8d770265107 Binary files /dev/null and b/docs/_img/services/build-release-hub.png differ diff --git a/docs/_img/services/code-git-hub.png b/docs/_img/services/code-git-hub.png new file mode 100644 index 00000000000..393110c5e16 Binary files /dev/null and b/docs/_img/services/code-git-hub.png differ diff --git a/docs/_img/services/test-hub.png b/docs/_img/services/test-hub.png new file mode 100644 index 00000000000..214de7e7ce4 Binary files /dev/null and b/docs/_img/services/test-hub.png differ diff --git a/docs/_img/services/work-hub-backlogs.png b/docs/_img/services/work-hub-backlogs.png new file mode 100644 index 00000000000..f35785ed568 Binary files /dev/null and b/docs/_img/services/work-hub-backlogs.png differ diff --git a/docs/_img/version-team-services.png b/docs/_img/version-team-services.png new file mode 100644 index 00000000000..fee114a3f44 Binary files /dev/null and b/docs/_img/version-team-services.png differ diff --git a/docs/_img/version-tfs.png b/docs/_img/version-tfs.png new file mode 100644 index 00000000000..f4d29dc7b8a Binary files /dev/null and b/docs/_img/version-tfs.png differ diff --git a/docs/_img/x.png b/docs/_img/x.png new file mode 100644 index 00000000000..c88f3bcf55d Binary files /dev/null and b/docs/_img/x.png differ diff --git a/docs/_shared/_img/GoHomeOpenInVisualStudio.png b/docs/_shared/_img/GoHomeOpenInVisualStudio.png new file mode 100644 index 00000000000..480a2ca1698 Binary files /dev/null and b/docs/_shared/_img/GoHomeOpenInVisualStudio.png differ diff --git a/docs/_shared/_img/account-check-connected-azure-ad-new-ui.png b/docs/_shared/_img/account-check-connected-azure-ad-new-ui.png new file mode 100644 index 00000000000..92653d2e969 Binary files /dev/null and b/docs/_shared/_img/account-check-connected-azure-ad-new-ui.png differ diff --git a/docs/_shared/_img/account-owner-new-ui.png b/docs/_shared/_img/account-owner-new-ui.png new file mode 100644 index 00000000000..9e4785a999e Binary files /dev/null and b/docs/_shared/_img/account-owner-new-ui.png differ diff --git a/docs/_shared/_img/account-settings-new-ui.png b/docs/_shared/_img/account-settings-new-ui.png new file mode 100644 index 00000000000..3a05e90074e Binary files /dev/null and b/docs/_shared/_img/account-settings-new-ui.png differ diff --git a/docs/_shared/_img/add-existing-team-project.png b/docs/_shared/_img/add-existing-team-project.png new file mode 100644 index 00000000000..3f1b9f0d9cc Binary files /dev/null and b/docs/_shared/_img/add-existing-team-project.png differ diff --git a/docs/_shared/_img/azure-remove-spending-limit.png b/docs/_shared/_img/azure-remove-spending-limit.png new file mode 100644 index 00000000000..d796a7edccd Binary files /dev/null and b/docs/_shared/_img/azure-remove-spending-limit.png differ diff --git a/docs/_shared/_img/change-details-standard1.png b/docs/_shared/_img/change-details-standard1.png new file mode 100644 index 00000000000..37afec3ef20 Binary files /dev/null and b/docs/_shared/_img/change-details-standard1.png differ diff --git a/docs/_shared/_img/change-details-standard2-with-directory.png b/docs/_shared/_img/change-details-standard2-with-directory.png new file mode 100644 index 00000000000..62473231a9c Binary files /dev/null and b/docs/_shared/_img/change-details-standard2-with-directory.png differ diff --git a/docs/_shared/_img/change-details-standard2.png b/docs/_shared/_img/change-details-standard2.png new file mode 100644 index 00000000000..71378296093 Binary files /dev/null and b/docs/_shared/_img/change-details-standard2.png differ diff --git a/docs/_shared/_img/collection-manage-security-groups-new-ui.png b/docs/_shared/_img/collection-manage-security-groups-new-ui.png new file mode 100644 index 00000000000..285b0eee801 Binary files /dev/null and b/docs/_shared/_img/collection-manage-security-groups-new-ui.png differ diff --git a/docs/_shared/_img/create-new-project-account-home.png b/docs/_shared/_img/create-new-project-account-home.png new file mode 100644 index 00000000000..79278c72d06 Binary files /dev/null and b/docs/_shared/_img/create-new-project-account-home.png differ diff --git a/docs/_shared/_img/create-team-project-updated.png b/docs/_shared/_img/create-team-project-updated.png new file mode 100644 index 00000000000..0c056fe985a Binary files /dev/null and b/docs/_shared/_img/create-team-project-updated.png differ diff --git a/docs/_shared/_img/old-azuread-signin.png b/docs/_shared/_img/old-azuread-signin.png new file mode 100644 index 00000000000..e75ee63e584 Binary files /dev/null and b/docs/_shared/_img/old-azuread-signin.png differ diff --git a/docs/_shared/_img/old-msa-signin.png b/docs/_shared/_img/old-msa-signin.png new file mode 100644 index 00000000000..574098a796e Binary files /dev/null and b/docs/_shared/_img/old-msa-signin.png differ diff --git a/docs/_shared/_img/preview-features-account-landing-off-on.png b/docs/_shared/_img/preview-features-account-landing-off-on.png new file mode 100644 index 00000000000..2501fa91ec6 Binary files /dev/null and b/docs/_shared/_img/preview-features-account-landing-off-on.png differ diff --git a/docs/_shared/_img/preview-features-open.png b/docs/_shared/_img/preview-features-open.png new file mode 100644 index 00000000000..ae80d0c3c4c Binary files /dev/null and b/docs/_shared/_img/preview-features-open.png differ diff --git a/docs/_shared/_img/sign-in-picker.png b/docs/_shared/_img/sign-in-picker.png new file mode 100644 index 00000000000..7d394b2ae8e Binary files /dev/null and b/docs/_shared/_img/sign-in-picker.png differ diff --git a/docs/_shared/_img/spending-limit.png b/docs/_shared/_img/spending-limit.png new file mode 100644 index 00000000000..af055c8eb20 Binary files /dev/null and b/docs/_shared/_img/spending-limit.png differ diff --git a/docs/_shared/_img/switch-context-tfs-2017.png b/docs/_shared/_img/switch-context-tfs-2017.png new file mode 100644 index 00000000000..2a32c9654ac Binary files /dev/null and b/docs/_shared/_img/switch-context-tfs-2017.png differ diff --git a/docs/_shared/_img/switch-team-focus-account-project-page-icon.png b/docs/_shared/_img/switch-team-focus-account-project-page-icon.png new file mode 100644 index 00000000000..806ceb3f6b7 Binary files /dev/null and b/docs/_shared/_img/switch-team-focus-account-project-page-icon.png differ diff --git a/docs/_shared/_img/switch-team-project-2.png b/docs/_shared/_img/switch-team-project-2.png new file mode 100644 index 00000000000..dad19cb2435 Binary files /dev/null and b/docs/_shared/_img/switch-team-project-2.png differ diff --git a/docs/_shared/_img/tfs-server-settings-new.png b/docs/_shared/_img/tfs-server-settings-new.png new file mode 100644 index 00000000000..9850ae9dbe8 Binary files /dev/null and b/docs/_shared/_img/tfs-server-settings-new.png differ diff --git a/docs/_shared/_img/users-hub-tfs-updated.png b/docs/_shared/_img/users-hub-tfs-updated.png new file mode 100644 index 00000000000..c71b422282a Binary files /dev/null and b/docs/_shared/_img/users-hub-tfs-updated.png differ diff --git a/docs/_shared/_img/users-hub-updated-ui.png b/docs/_shared/_img/users-hub-updated-ui.png new file mode 100644 index 00000000000..4ea6cbacdda Binary files /dev/null and b/docs/_shared/_img/users-hub-updated-ui.png differ diff --git a/docs/_shared/_img/work-web-portal-home-page-icon.png b/docs/_shared/_img/work-web-portal-home-page-icon.png new file mode 100644 index 00000000000..0cc163cba58 Binary files /dev/null and b/docs/_shared/_img/work-web-portal-home-page-icon.png differ diff --git a/docs/_shared/_img/work-web-portal-tfs-2017-1-switch-team-focus.png b/docs/_shared/_img/work-web-portal-tfs-2017-1-switch-team-focus.png new file mode 100644 index 00000000000..f66eee755cc Binary files /dev/null and b/docs/_shared/_img/work-web-portal-tfs-2017-1-switch-team-focus.png differ diff --git a/docs/_shared/_img/work-web-portal-ts-switch-team-focus.png b/docs/_shared/_img/work-web-portal-ts-switch-team-focus.png new file mode 100644 index 00000000000..aa8dc6912b7 Binary files /dev/null and b/docs/_shared/_img/work-web-portal-ts-switch-team-focus.png differ diff --git a/docs/_shared/help-support-shared.md b/docs/_shared/help-support-shared.md new file mode 100644 index 00000000000..cb200b31ba9 --- /dev/null +++ b/docs/_shared/help-support-shared.md @@ -0,0 +1,8 @@ + +### Feedback and support + +We welcome your feedback. + +Send suggestions on **[UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services)**, and follow us on **[Twitter](https://twitter.com/vsts) @vsts**. + +See also our [comprehensive feedback and support page](/vsts/provide-feedback). diff --git a/docs/_shared/images-not-appearing-vs.md b/docs/_shared/images-not-appearing-vs.md new file mode 100644 index 00000000000..3db90c023ce --- /dev/null +++ b/docs/_shared/images-not-appearing-vs.md @@ -0,0 +1,13 @@ + + + +### Resolve images that don't display in Team Explorer + +If an in-line image fails to display in a work item form you view from Team Explorer, but does display in the web portal, your credentials to access VSTS or TFS have expired. + +You can resolve it with the following steps. + +1. In Visual Studio, click **View>Other Windows>Web Browser** (Or, use the shortcut **Cltr+Alt+R**). +1. In the web browser, locate either your VSTS or TFS account. +1. Login with your account. +1. Refresh your work item in Team Explorer. diff --git a/docs/_shared/preview-features.md b/docs/_shared/preview-features.md new file mode 100644 index 00000000000..98e0ba2d515 --- /dev/null +++ b/docs/_shared/preview-features.md @@ -0,0 +1,16 @@ + + + +### Turn preview features on or off + +From time to time, a new feature is introduced in Preview mode, which allows you to turn it on or off. + +To enable or disable a feature in preview, access the Preview features option from your user account menu. + +Open Preview Features + +Here, the New Account Landing page has been enabled. + +Account Landing Page has been enabled + + diff --git a/docs/_shared/qa-account-location-process-template.md b/docs/_shared/qa-account-location-process-template.md new file mode 100644 index 00000000000..736d719561e --- /dev/null +++ b/docs/_shared/qa-account-location-process-template.md @@ -0,0 +1,21 @@ +####Q: How do I change my team project name, account location, or process? + +A: Change these when you sign up for your VSTS account. + +Change account details + +VSTS uses Agile as the default +[process](https://msdn.microsoft.com/Library/vs/alm/Work/guidance/choose-process) +to organize your work. And your account's default location is based on the closest +[Microsoft Azure region](https://azure.microsoft.com/en-us/regions) +where VSTS is available. For a better experience, +select a location that's closest to most users in your account. +You can select another process, like Scrum, if that works best for you. + +Rename team project, change account location, or select another process + +If you connected your VSTS account to an organization's directory in Azure Active Directory, +but you belong to multiple directories and want to select a different directory, +change your directory here: + +Change your directory diff --git a/docs/_shared/qa-another-team-project.md b/docs/_shared/qa-another-team-project.md new file mode 100644 index 00000000000..b45fa6da249 --- /dev/null +++ b/docs/_shared/qa-another-team-project.md @@ -0,0 +1,17 @@ +####Q: Can I create more than one team project? + +A: Yes, multiple team projects help you keep work separate when +you have development projects for different teams. +VSTS currently supports one team project collection. + +To create team projects, you'll need VSTS +project collection administrator or account owner permissions. + +If you've [turned on the Account Landing preview](../connect/account-home-pages.md), +go to your **Projects** page (```https://{youraccount}.visualstudio.com/_projects```). + +Projects page: + +From your Projects page, create more team projects + +Your account home page is associated with your team project collection, and not any single team project or team. diff --git a/docs/_shared/qa-azure-account-billing-support.md b/docs/_shared/qa-azure-account-billing-support.md new file mode 100644 index 00000000000..a4f9cffa36e --- /dev/null +++ b/docs/_shared/qa-azure-account-billing-support.md @@ -0,0 +1,11 @@ + +###Q: Where can I check my bill or update billing details on my Azure subscription? + +A: If you're the Azure Account Administrator, +[view your subscription at the Azure account portal](https://portal.azure.com). + +###Q: What if I have other questions about Azure subscriptions and billing? + +A: Check the +[Azure Billing and Subscription FAQ](https://azure.microsoft.com/en-us/documentation/articles/billing-subscription-faq/), +or try [Azure Support](https://azure.microsoft.com/en-us/support/options/). \ No newline at end of file diff --git a/docs/_shared/qa-azure-bill-larger.md b/docs/_shared/qa-azure-bill-larger.md new file mode 100644 index 00000000000..320608ff41d --- /dev/null +++ b/docs/_shared/qa-azure-bill-larger.md @@ -0,0 +1,9 @@ + + +###Q: Why is my first Azure bill larger than expected? + +A: Charges for your first purchase are prorated during the +1st month and are combined with charges for the next month, +which are billed on the 1st day of the calendar month. +This means your first Azure bill might include these +partial charges **and** your 1st full month. \ No newline at end of file diff --git a/docs/_shared/qa-azure-subscription-disabled-tfs.md b/docs/_shared/qa-azure-subscription-disabled-tfs.md new file mode 100644 index 00000000000..5da426df079 --- /dev/null +++ b/docs/_shared/qa-azure-subscription-disabled-tfs.md @@ -0,0 +1,5 @@ +###Q: What happens if my Azure subscription is disabled? + +A: If you're the [Azure subscription Account Administrator](https://docs.microsoft.com/en-us/azure/billing-add-change-azure-subscription-administrator), +check your subscription status in the [Account Center](https://account.windowsazure.com/), +then try to [fix your subscription](https://azure.microsoft.com/en-us/documentation/articles/billing-subscription-become-disable/). diff --git a/docs/_shared/qa-azure-subscription-disabled.md b/docs/_shared/qa-azure-subscription-disabled.md new file mode 100644 index 00000000000..227f4921514 --- /dev/null +++ b/docs/_shared/qa-azure-subscription-disabled.md @@ -0,0 +1,11 @@ +####Q: What happens if my Azure subscription is disabled? + +A: If you're the VSTS account owner or +[Azure subscription Account Administrator](https://docs.microsoft.com/en-us/azure/billing-add-change-azure-subscription-administrator), +check your subscription status in the [Account Center](https://account.windowsazure.com/), +then try to [fix your subscription](https://docs.microsoft.com/en-us/azure/billing-subscription-become-disable). +This will restore your account's paid settings. +Or you can link your VSTS account to another Azure subscription by +[unlinking your account from the disabled subscription](../billing/change-azure-subscription.md). +While your subscription is disabled, your account goes back to the free +monthly limits until your subscription is fixed. diff --git a/docs/_shared/qa-azure-subscriptions-for-billing.md b/docs/_shared/qa-azure-subscriptions-for-billing.md new file mode 100644 index 00000000000..70597d6f006 --- /dev/null +++ b/docs/_shared/qa-azure-subscriptions-for-billing.md @@ -0,0 +1,43 @@ + + + +###Q: Which Azure subscriptions can I link to my VSTS account and use for billing? + +A: You can use an [Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +that's not: + +* An [Azure Free Trial](https://azure.microsoft.com/en-us/offers/ms-azr-0044p/) +* A [free Azure AD subscription](https://technet.microsoft.com/library/dn832618.aspx) +* From the [Cloud Solution Provider program](https://partner.microsoft.com/en-US/Solutions/cloud-reseller-overview) + +If you have one of these subscriptions, set up a separate +[Pay-As-You-Go Azure subscription](https://azure.microsoft.com/en-us/offers/ms-azr-0003p/) +instead. + +**Important for Visual Studio subscribers and Visual Studio Dev Essentials members**: + +* You can't use [monthly credits for Visual Studio subscriptions](https://azure.microsoft.com/en-us/pricing/member-offers/msdn-benefits-details/) +or [monthly credits for Visual Studio Dev Essentials](https://azure.microsoft.com/en-us/offers/ms-azr-0022p/) to pay for VSTS purchases. +You can still use these types of Azure subscriptions for billing, +but the monthly credits won't apply, so your credit card will be billed for charges instead. + +* Before you use these Azure subscriptions for billing, you must remove their +[default spending limit indefinitely](https://azure.microsoft.com/en-us/pricing/spending-limits/). + + This prevents disabling your Azure subscription + when your monthly charges are billed the next month. + Otherwise, all resources billed to this subscription + will be suspended, including VSTS purchases, + Visual Studio Marketplace purchases, and Azure resources. + + Spending limit + + Remove spending limit indefinitely + + If you have Account Administrator permissions for your subscription, + remove the spending limit by visiting the + [Azure Account Center](https://account.windowsazure.com): + + 0. Sign in to [Azure Account Center (**Account** > **subscriptions**)](https://portal.azure.com). + 0. Select your Azure subscription. + 0. Remove your spending limit **indefinitely**. diff --git a/docs/_shared/qa-azure-why-no-vsts-account.md b/docs/_shared/qa-azure-why-no-vsts-account.md new file mode 100644 index 00000000000..8d8751c87e4 --- /dev/null +++ b/docs/_shared/qa-azure-why-no-vsts-account.md @@ -0,0 +1,7 @@ +####Q: Why don't I see my VSTS account in the Azure portal? + +A: In both Azure portals, you must have +[Azure Service Administrator or Co-administrator](https://docs.microsoft.com/en-us/azure/billing-add-change-azure-subscription-administrator) +permissions for the Azure subscription that's linked to your VSTS account. +Also, in the [Azure portal](https://portal.azure.com), you must have VSTS +project collection administrator or account owner permissions. \ No newline at end of file diff --git a/docs/_shared/qa-browser-problems-azure.md b/docs/_shared/qa-browser-problems-azure.md new file mode 100644 index 00000000000..680a225581d --- /dev/null +++ b/docs/_shared/qa-browser-problems-azure.md @@ -0,0 +1,5 @@ +####Q: Why am I having browser problems with Azure? + +A: This might happen if you're using an unsupported browser. +For the best experience, please check that you're using a +[supported browser](https://azure.microsoft.com/en-us/documentation/articles/azure-preview-portal-supported-browsers-devices/). diff --git a/docs/_shared/qa-browser-problems.md b/docs/_shared/qa-browser-problems.md new file mode 100644 index 00000000000..dc3f4cdb7b9 --- /dev/null +++ b/docs/_shared/qa-browser-problems.md @@ -0,0 +1,5 @@ +####Q: Why won't my browser work with VSTS? + +A: This might happen if you're using an unsupported browser. +For the best experience, please check that you're using a +[supported browser](../accounts/requirements.md#supported-browsers). diff --git a/docs/_shared/qa-can-paid-Basic-users-join-other-accounts.md b/docs/_shared/qa-can-paid-Basic-users-join-other-accounts.md new file mode 100644 index 00000000000..ad007a6a4bf --- /dev/null +++ b/docs/_shared/qa-can-paid-Basic-users-join-other-accounts.md @@ -0,0 +1,5 @@ +####Q: Can users with paid Basic access join other VSTS accounts? + +A: No, users can only join the VSTS account where you've paid for Basic access. +But those users can join any VSTS account where free users with Basic access are still available +or as users with Stakeholder access for free. diff --git a/docs/_shared/qa-change-account-name-owner.md b/docs/_shared/qa-change-account-name-owner.md new file mode 100644 index 00000000000..9fd67519286 --- /dev/null +++ b/docs/_shared/qa-change-account-name-owner.md @@ -0,0 +1,7 @@ +####Q: Can I change my VSTS account name (URL) or owner? + +A: Yes, if you have at least Basic access, +you can do this in your account settings. Learn how to: + +* [Rename your account](/vsts/accounts/rename-vsts-account). +* [Change the account owner](/vsts/accounts/change-account-ownership-vs). diff --git a/docs/_shared/qa-choose-msa-azuread-account.md b/docs/_shared/qa-choose-msa-azuread-account.md new file mode 100644 index 00000000000..02882ad9754 --- /dev/null +++ b/docs/_shared/qa-choose-msa-azuread-account.md @@ -0,0 +1,10 @@ +####Q: Why must I choose between a "work or school account" and my "personal account"? + +A: This happens when you sign-in with an email address, +like jamalhartnett@fabrikam.com, that's shared by your +personal Microsoft account and by your work account or school account. +Although both identities use the same sign-in address, +they're still separate identities with different profiles, +security settings, and permissions, so you see this screen when you sign in: + +Choose work or school account, or personal Microsoft account diff --git a/docs/_shared/qa-choose-msa-azuread-account2.md b/docs/_shared/qa-choose-msa-azuread-account2.md new file mode 100644 index 00000000000..18254d3a420 --- /dev/null +++ b/docs/_shared/qa-choose-msa-azuread-account2.md @@ -0,0 +1,17 @@ +* Choose **Work or school account** if you used this identity +to create your VSTS account or signed in with this +identity before. For example, choose this option if you used to sign in to VSTS here: + + Old signin for work or school accounts + + Your identity is authenticated by your organization's + directory in Azure Active Directory (Azure AD), + which controls access to your VSTS account. + +* Choose **Personal account** if you used your Microsoft account with VSTS. + For example, choose this option if you used to sign in to VSTS here: + + Old signin for Microsoft account + + Your identity is authenticated by the global directory for Microsoft accounts. + diff --git a/docs/_shared/qa-delete-account.md b/docs/_shared/qa-delete-account.md new file mode 100644 index 00000000000..e0d6f92c7c9 --- /dev/null +++ b/docs/_shared/qa-delete-account.md @@ -0,0 +1,3 @@ +####Q: Can I delete a VSTS account that I don't need anymore? + +A: Yes, see [Delete or recover your VSTS account](/vsts/accounts/delete-your-vsts-account). \ No newline at end of file diff --git a/docs/_shared/qa-delete-team-project.md b/docs/_shared/qa-delete-team-project.md new file mode 100644 index 00000000000..3866745c897 --- /dev/null +++ b/docs/_shared/qa-delete-team-project.md @@ -0,0 +1,5 @@ +####Q: Can I delete a team project that I've created? + +A: Yes, you can +[delete a team project](/vsts/accounts/delete-team-project) +that you don't use anymore. \ No newline at end of file diff --git a/docs/_shared/qa-does-account-use-azuread.md b/docs/_shared/qa-does-account-use-azuread.md new file mode 100644 index 00000000000..39bdc97ce49 --- /dev/null +++ b/docs/_shared/qa-does-account-use-azuread.md @@ -0,0 +1,13 @@ +####Q: How do I find out if my VSTS account controls access with Azure Active Directory (Azure AD)? + +A: If you have at least Basic access, here's how: + +Go your VSTS account settings by choosing the gear cog and then **Settings**: + +Check if your account controls access with Azure AD. + +![Go to Settings, check for a connected directory](_img/account-check-connected-azure-ad-new-ui.png) + +If your account is connected to your organization's directory, +this means that only users from your organization's directory can join your account. +Learn about [controlling account access with Azure AD](/vsts/accounts/add-users-to-aad). diff --git a/docs/_shared/qa-extension-trial-ending-expiring-free-users.md b/docs/_shared/qa-extension-trial-ending-expiring-free-users.md new file mode 100644 index 00000000000..a46ad819495 --- /dev/null +++ b/docs/_shared/qa-extension-trial-ending-expiring-free-users.md @@ -0,0 +1,9 @@ +####Q: What should I do when the trial is almost expired or has ended for extensions that include free users? + +A: To keep or restore access to an extension that includes free users, +[assign the extension up to the number of free users that you get](../marketplace/assign-paid-extensions.md). +For additional users who need access, +[buy the extension for these users from the Visual Studio Marketplace](../billing/change-number-paid-extension-users.md) +and [assign the extension to these users](../marketplace/assign-paid-extensions.md), +so they have access. Otherwise, non-free users will lose access +when the extension trial expires. diff --git a/docs/_shared/qa-find-account-name.md b/docs/_shared/qa-find-account-name.md new file mode 100644 index 00000000000..fe7a7a4c5f3 --- /dev/null +++ b/docs/_shared/qa-find-account-name.md @@ -0,0 +1,4 @@ +####Q: I don't remember my VSTS account name (URL). Where can I find it? + +A: [Sign in to your Visual Studio profile](https://go.microsoft.com/fwlink/?LinkId=309329) +to find your account list. \ No newline at end of file diff --git a/docs/_shared/qa-find-account-owner.md b/docs/_shared/qa-find-account-owner.md new file mode 100644 index 00000000000..06f7980adcd --- /dev/null +++ b/docs/_shared/qa-find-account-owner.md @@ -0,0 +1,12 @@ +####Q: How do I find the account owner? + +If you have at least Basic access, +you can find the current owner in your VSTS account settings. + +0. Go to your VSTS account settings. + + Go to account settings + +0. Under **Settings**, find the current owner. + + Find current owner diff --git a/docs/_shared/qa-find-project-collection-administrator.md b/docs/_shared/qa-find-project-collection-administrator.md new file mode 100644 index 00000000000..5d86a794a1a --- /dev/null +++ b/docs/_shared/qa-find-project-collection-administrator.md @@ -0,0 +1,13 @@ +####Q: How do I find a project collection administrator? + +A: If you have at least Basic access, +you can find your [project collection administrator](../accounts/add-administrator-project-collection.md) +in your VSTS account's security settings. + +0. Go to your VSTS account's security settings. + + Click gear button, Security + +0. Under **Security**, view your project collection administrators. + + Go to Project Collection Administrators, Members diff --git a/docs/_shared/qa-get-vsts-support.md b/docs/_shared/qa-get-vsts-support.md new file mode 100644 index 00000000000..c0432f75aa1 --- /dev/null +++ b/docs/_shared/qa-get-vsts-support.md @@ -0,0 +1,6 @@ + + +####Q: How do I get help or support for VSTS? + +A: Try the [VSTS forum](https://social.msdn.microsoft.com/Forums/en-us/home?forum=TFService) +or [VSTS Support](https://www.visualstudio.com/team-services/support). diff --git a/docs/_shared/qa-no-access-existing-features.md b/docs/_shared/qa-no-access-existing-features.md new file mode 100644 index 00000000000..add797908a9 --- /dev/null +++ b/docs/_shared/qa-no-access-existing-features.md @@ -0,0 +1,25 @@ +####Q: Why can't users access some features? + +A: Make sure that users have the correct +[access level](https://www.visualstudio.com/team-services/compare-features/) +in the Users hub. For VSTS, learn [how to manage users and access levels](/vsts/accounts/add-account-users-assign-access-levels). +For TFS, learn [learn how to change access levels](/vsts/security/change-access-levels). + +Also, [some features are available only as extensions](https://www.visualstudio.com/team-services/compare-features/), +so you'll need to install these extensions. Most extensions require that you have at least Basic access, not Stakeholder. +Check the extension's description in the [Visual Studio Marketplace](https://marketplace.visualstudio.com). + +For example, to search your code, you can install the free +[Code Search extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search) +but you'll need at least Basic access to use the extension. +To help your team improve app quality, you can install the free +[Test & Feedback extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web), +but you'll get different capabilities based on your access level +and whether you work offline or connected to VSTS or TFS. +To create test plans in the Test hub, you'll need to install the +[Test Manager extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web). +Some [Visual Studio subscribers](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web) +can use this extension for free, but users with Basic access will need paid extension access before they can use Test Manager. +Learn [how to get extensions for VSTS](/vsts/marketplace/install-vsts-extension) or +[how to get extensions for TFS](/vsts/marketplace/get-tfs-extensions). Also, learn +[how to buy access to the TFS Test hub](/vsts/billing/buy-access-tfs-test-hub). diff --git a/docs/_shared/qa-no-access-extension-features.md b/docs/_shared/qa-no-access-extension-features.md new file mode 100644 index 00000000000..e5bd0570782 --- /dev/null +++ b/docs/_shared/qa-no-access-extension-features.md @@ -0,0 +1,34 @@ +####Q: Why can't users access extension features? + +A: This can happen for these reasons: + +* Most extensions require that users have at least Basic access, not Stakeholder. +For example, you can install the free +[Code Search extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search), +but each user must have at least Basic access to search for code. +To help your team improve app quality, you can install the free +[Test & Feedback extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web), +but you'll get different capabilities based on your access level +and whether you work offline or connected to VSTS or TFS. +For more details, see the extension's description +in the [Visual Studio Marketplace](https://marketplace.visualstudio.com). + + +* If you're using a VSTS account, and you started a free extension trial, +your trial might have expired. To check whether your trial expired: + + 0. On your VSTS account toolbar, go to **Users**. + 0. Go to the extension pane. + 0. Check for an expiration message to find if or when your extension expired. + + +* If you're using a VSTS account, and you paid for this extension, +make sure that you assigned this extension to users. + + 0. On your VSTS account toolbar, go to **Users**. + 0. Go to the extension pane. + 0. Check whether the extension is assigned to the user. + If not, assign the extension to the user. + +Learn more about +[assigning paid extensions to users](/vsts/marketplace/install-vsts-extension#assign-extension). diff --git a/docs/_shared/qa-recover-password.md b/docs/_shared/qa-recover-password.md new file mode 100644 index 00000000000..47d6b1a3bb3 --- /dev/null +++ b/docs/_shared/qa-recover-password.md @@ -0,0 +1,8 @@ +####Q: What happens if I forget my password? + +A: You can recover your +[Microsoft account password here](https://account.live.com/ResetPassword.aspx) +or your [work or school account password here](https://passwordreset.microsoftonline.com), +if your organization turned on this feature. Otherwise, +contact your Azure Active Directory administrator to +recover your work or school account. \ No newline at end of file diff --git a/docs/_shared/qa-secure-protect-data.md b/docs/_shared/qa-secure-protect-data.md new file mode 100644 index 00000000000..3abf97c792d --- /dev/null +++ b/docs/_shared/qa-secure-protect-data.md @@ -0,0 +1,19 @@ +####Q: How do you store, secure, and protect my data? + +A: VSTS re +storage features to make sure your data is available in case +of hardware failure, service disruption, or data center disasters. +Also, the VSTS +to protect data from accidental or malicious deletion. + +We follow industry best practices, and have enterprise-grade +security measures to help protect your code and project data. +Also, all communication between your computer and the service +takes place over an encrypted HTTPS connection. Learn +[how VSTS secures and protects your data](http://aka.ms/VSOSecurity). + +####Q: Do I still own my code and intellectual property? What do you do with my personal information? + +A: Yes, your code and your IP are yours. Please review our +[Terms of Service](https://go.microsoft.com/fwlink/?LinkID=266231) +and [Privacy Policy](https://go.microsoft.com/fwlink/?LinkID=264782). diff --git a/docs/_shared/qa-user-delay.md b/docs/_shared/qa-user-delay.md new file mode 100644 index 00000000000..b9ac4131a65 --- /dev/null +++ b/docs/_shared/qa-user-delay.md @@ -0,0 +1,8 @@ +####Q: Why don't users appear or disappear promptly in VSTS after I add or delete them in the Users hub? + +A: If you experience delays finding users or having them +promptly removed from VSTS, like in drop-down +lists and VSTS groups, after you add or delete +them through the Users Hub, please +[file a problem report on Developer Community](http://go.microsoft.com/fwlink/?LinkId=820594) +so that we can investigate. diff --git a/docs/_shared/qa-visual-studio-subscription-support.md b/docs/_shared/qa-visual-studio-subscription-support.md new file mode 100644 index 00000000000..7d6d20107d6 --- /dev/null +++ b/docs/_shared/qa-visual-studio-subscription-support.md @@ -0,0 +1,3 @@ +####Q: I'm having problems with my Visual Studio subscription. How do I get help? + +A: Try [Subscription Support](https://www.visualstudio.com/support/subscription-support-vs). \ No newline at end of file diff --git a/docs/_shared/qa-visual-studio-versions.md b/docs/_shared/qa-visual-studio-versions.md new file mode 100644 index 00000000000..71447d44b69 --- /dev/null +++ b/docs/_shared/qa-visual-studio-versions.md @@ -0,0 +1,26 @@ +####Q: Which versions of Visual Studio can I use with VSTS? + +A: You can use: + +* Visual Studio 2017 +* Visual Studio 2015 +* Visual Studio 2013 +* Visual Studio 2012 +* Visual Studio 2010, +requires [Service Pack 1](https://www.microsoft.com/download/details.aspx?id=29082) +and [KB2662296](http://support.microsoft.com/kb/2662296) +* Visual Studio 2008 SP1, requires [GDR update](http://support.microsoft.com/kb/2673642) + +To connect to VSTS with Visual Studio 2008 through Visual Studio 2012 + +1. Start Visual Studio. +2. From the Team menu or Team Explorer, +go to Connect to Team Foundation Server > Select Team Projects > Servers. +3. Add your VSTS account ({youraccount}.visualstudio.com). +4. Select your team project, +and finish connecting. + +If you get connection errors, try choosing HTTPS as your protocol. + +To connect to VSTS with Visual Studio 2015 and later, +learn [how to connect to team projects](../connect/connect-team-projects.md). diff --git a/docs/_shared/qa-vs-launch-fail.md b/docs/_shared/qa-vs-launch-fail.md new file mode 100644 index 00000000000..3894b1141cf --- /dev/null +++ b/docs/_shared/qa-vs-launch-fail.md @@ -0,0 +1,7 @@ +####Q: Why doesn't Visual Studio launch when I click "Open in Visual Studio" on my team project page? + +A: This link requires [Visual Studio 2013 or later](http://go.microsoft.com/fwlink/p/?LinkId=254509). +It doesn't launch earlier versions of Visual Studio. + +To connect earlier versions, see +[Which versions of Visual Studio can I use with VSTS?](../connect/connect-team-projects.md) \ No newline at end of file diff --git a/docs/_shared/qa-vs-legacy-connect.md b/docs/_shared/qa-vs-legacy-connect.md new file mode 100644 index 00000000000..9390421d5cf --- /dev/null +++ b/docs/_shared/qa-vs-legacy-connect.md @@ -0,0 +1,8 @@ +####Q: Can I use earlier versions of Visual Studio to connect to VSTS? + +A: Yes, you can use Visual Studio 2013 or 2012. You can also use Visual Studio 2010, +but you'll need to install [Service Pack 1](http://www.microsoft.com/download/details.aspx?id=23691) +and [KB2662296](http://support.microsoft.com/kb/2662296) first. Or, you can use Visual +Studio 2008 SP1, with [this GDR update](http://support.microsoft.com/kb/2673642). +Launch Visual Studio, then connect to VSTS +and select your team project. \ No newline at end of file diff --git a/docs/_shared/qa-vsts-sla.md b/docs/_shared/qa-vsts-sla.md new file mode 100644 index 00000000000..e08275fccc9 --- /dev/null +++ b/docs/_shared/qa-vsts-sla.md @@ -0,0 +1,3 @@ +####Q: Where can I find the VSTS + +A: You can find them here: [VSTS rosoft.com/en-us/support/legal/sla/visual-studio-team-services/v1_2) diff --git a/docs/_shared/qa-what-happened-preview-extensions.md b/docs/_shared/qa-what-happened-preview-extensions.md new file mode 100644 index 00000000000..e92f8268851 --- /dev/null +++ b/docs/_shared/qa-what-happened-preview-extensions.md @@ -0,0 +1,8 @@ +####Q: What happened to my preview extension? + +A: Your extension is no longer in preview and +is now generally available as a paid extension, +but offers a grace period before you have to buy the extension. +All preview extensions will automatically convert to a +[free trial](/vsts/billing/try-additional-features-vs) +before you have to buy the extension. diff --git a/docs/_shared/qa-why-cant-sign-in-msa-azuread-account.md b/docs/_shared/qa-why-cant-sign-in-msa-azuread-account.md new file mode 100644 index 00000000000..251bf4cea49 --- /dev/null +++ b/docs/_shared/qa-why-cant-sign-in-msa-azuread-account.md @@ -0,0 +1,28 @@ +####Q: Why can't I sign in after I choose either "personal Microsoft account" or "work or school account"? + +A: This happens when your sign-in address is shared by your +personal Microsoft account and by your work account or school account, +but your selected identity doesn't have access. +Although both identities have the same sign-in address, +they're still separate identities with different profiles, +security settings, and permissions. + +Please try signing out completely from VSTS by following the steps below +because just closing your browser might not sign you out completely from VSTS. +Then sign in again to VSTS, and select your other identity: + +0. Close all browsers, including those that aren't running VSTS. + +0. Open a private or incognito browsing session. + +0. Go to this URL: http://aka.ms/vssignout + + You'll get a message that says "Sign out in progress". + After you're signed out, you're redirected to the + Visual Studio page @www.visualstudio.com. + + **Tip** If the sign-out page takes more than a minute, + close the browser, and continue. + +0. Sign in to VSTS again. +Select your other identity. diff --git a/docs/_shared/qa-why-no-owned-accounts.md b/docs/_shared/qa-why-no-owned-accounts.md new file mode 100644 index 00000000000..2a42e25022a --- /dev/null +++ b/docs/_shared/qa-why-no-owned-accounts.md @@ -0,0 +1,34 @@ +####Q: Why don't I see the VSTS accounts that I own after I sign in to my Visual Studio profile on visualstudio.com? + +A: The list of accounts that you own are +associated with the identity that you use +to sign in to VSTS. + +If you were asked to choose between your personal Microsoft account, +or your work or school account when you signed in, +you might have selected the wrong identity. + +Choose work or school account, or personal Microsoft account + +Please try signing out completely from VSTS, +then sign in again, and select your other identity. + +Here's how you can sign out completely because +just closing your browser doesn't always sign you +out completely from VSTS: + +0. Close all browsers, including those that aren't running VSTS. + +0. Open a private or incognito browsing session. + +0. Go to this URL: http://aka.ms/vssignout + + You'll get a message that says "Sign out in progress". + After you're signed out, you're redirected to the + Visual Studio page @www.visualstudio.com. + + **Tip** If the sign-out page takes more than a minute, + close the browser, and continue. + +0. Sign in to VSTS +Select your other identity. diff --git a/docs/_shared/switch-team-context.md b/docs/_shared/switch-team-context.md new file mode 100644 index 00000000000..3be6e8a3201 --- /dev/null +++ b/docs/_shared/switch-team-context.md @@ -0,0 +1,70 @@ + + + +### Switch team project or team focus +Several features depend on the team project or team that you have selected. For example, dashboards, backlogs, and board views will change depending on the context selected. + +For example, when you add a work item, the system references the default area and iteration paths defined for the team context. Work items you add from the team dashboard (new work item widget) and queries page are assigned the team default iteration. Work items you add from a team backlog or board, are assigned the team default backlog iteration. To change team defaults, see [Set team defaults](../work/scale/set-team-defaults.md). + +Also, several hubs enable you to set team favorites. The favorites you set and see are dependent on the team context you've chosen. + +You navigate to your team context from the top navigation bar. The method changes slightly depending on the platform/version you work from. + +>[!NOTE] +>**Feature availability**: The Account Landing Page feature is in preview mode for VSTS and enabled for all users from web portal for TFS 2017.1 and later versions. To learn more about this feature, see [Work effectively from your account hub](../connect/account-home-pages.md). To enable or disable the feature, see [Enable preview features](../collaborate/preview-features.md). + + +
+ + + +
+ +
+

You can switch your team focus to a team project or team you've recently viewed from the team project/team drop-down menu. If you don't see the team or team project you want, click **Browse…** to [browse all team projects and teams](../connect/account-home-pages.md). Your selection will open the [Dashboard hub](../report/dashboards.md) for the team project/team.

+ +

To access your [account hub](../connect/account-home-pages.md), click the ![VSTS icon](../_shared/_img/switch-team-focus-account-project-page-icon.png) VSTS icon. If you haven't yet enabled the Account Landing Page, you'll be taken to the account home page.

+ +

To go directly to the [project vision and status page](../collaborate/project-vision-status.md), choose the project home icon from the drop-down menu, for example, ![project home icon](../_shared/_img/work-web-portal-home-page-icon.png).

+ +Choose another team from the team project menu + +
+ +
+ +

To switch your team focus to a team project or team you've recently viewed, hover over the ![VSTS icon](../_shared/_img/switch-team-focus-account-project-page-icon.png) VSTS icon and choose from the drop-down menu of options. If you don't see the team or team project you want, choose **Browse…** to [browse all team projects and teams](../connect/account-home-pages.md). Your selection will open the [project vision and status page](../collaborate/project-vision-status.md) for the team project.

+ +

To access your [account hub](../connect/account-home-pages.md), click the ![VSTS icon](../_shared/_img/switch-team-focus-account-project-page-icon.png) VSTS icon. If you haven't yet enabled the Account Landing Page, you'll be taken to the account home page.

+ +Choose another team from the team project menu +
+ +
+

Open the team project/team drop-down menu and select the team project/team that you've recently visited. If you don't see the team or team project you want, choose **Browse all** to browse all team projects and teams.

+ +Choose another team from the team project menu +
+ + + +
+ +

Open the team project/team drop-down menu and select the team project/team that you've recently visited. If you don't see the team or team project you want, choose **Browse all** to browse all team projects and teams.

+ +Choose another team from the team project menu + +
+
+
diff --git a/docs/_shared/tfs-2016.md b/docs/_shared/tfs-2016.md new file mode 100644 index 00000000000..df8301c8544 --- /dev/null +++ b/docs/_shared/tfs-2016.md @@ -0,0 +1 @@ +**TFS 2017** \ No newline at end of file diff --git a/docs/_shared/version-header-hosted-plus-tfs-all.md b/docs/_shared/version-header-hosted-plus-tfs-all.md new file mode 100644 index 00000000000..44128eaabf0 --- /dev/null +++ b/docs/_shared/version-header-hosted-plus-tfs-all.md @@ -0,0 +1 @@ +

VSTS (Hosted XML) | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013

diff --git a/docs/_shared/version-header-hosted-plus-tfs.md b/docs/_shared/version-header-hosted-plus-tfs.md new file mode 100644 index 00000000000..23128fc4c22 --- /dev/null +++ b/docs/_shared/version-header-hosted-plus-tfs.md @@ -0,0 +1 @@ +

VSTS (Hosted XML) | TFS 2018 | TFS 2017

diff --git a/docs/_shared/version-ts-tfs-2015-2016.md b/docs/_shared/version-ts-tfs-2015-2016.md new file mode 100644 index 00000000000..a2da07b3e30 --- /dev/null +++ b/docs/_shared/version-ts-tfs-2015-2016.md @@ -0,0 +1 @@ +**VSTS** | **TFS 2017** | **TFS 2015** \ No newline at end of file diff --git a/docs/_shared/version-ts-tfs-generic.md b/docs/_shared/version-ts-tfs-generic.md new file mode 100644 index 00000000000..e29986c8691 --- /dev/null +++ b/docs/_shared/version-ts-tfs-generic.md @@ -0,0 +1 @@ +**VSTS** | **TFS** \ No newline at end of file diff --git a/docs/_shared/version-vsts-tfs-all-versions.md b/docs/_shared/version-vsts-tfs-all-versions.md new file mode 100644 index 00000000000..18b1f9b4daf --- /dev/null +++ b/docs/_shared/version-vsts-tfs-all-versions.md @@ -0,0 +1 @@ +

VSTS | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013

\ No newline at end of file diff --git a/docs/about-vsts-tfs.md b/docs/about-vsts-tfs.md new file mode 100644 index 00000000000..0468b0c2e7c --- /dev/null +++ b/docs/about-vsts-tfs.md @@ -0,0 +1,227 @@ +--- +title: Understand differences between VSTS and TFS +description: Understand the fundamental differences between Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.assetid: 458FAFD1-98B0-4B74-B8E7-F2C73D4EED6B +ms.manager: douge +ms.author: kaelli +ms.date: 06/22/2017 +--- + +# About VSTS and Team Foundation Server + +VSTS and Team Foundation Server (TFS) both provide an integrated, collaborative environment that supports Git, continuous integration, and Agile tools for planning and tracking work. + +Team Services is the cloud offering that provides a scalable, reliable, and globally available hosted service. It is backed by a 99.9% SLA, monitored by our 24—7 operations team, and available in local data centers around the world. + +Team Foundation Server is the on-premises offering built on a SQL Server backend. Organizations typically choose on-premises TFS when they need their data to stay within your network, or they want access to SharePoint sites and SQL Server reporting services that integrate with TFS data and tools. + +While both offerings provide the same [essential services](services.md), compared with TFS, Team Services provides organizations these added benefits: + +- Simplified server management +- Immediate access to the latest and greatest features +- Improved connectivity with remote sites +- A transition from capital expenditures (servers and the like) to operational expenditures (subscriptions). + +Use this topic to determine which offering—cloud or on-premises—meets your organizational needs by considering these important areas: + +- Fundamental differences between TFS and Team Services +- Differences in specific feature areas between TFS and Team Services + +For each area, we'll discuss both the current state of the world and the expected impacts from short and medium-term plans. Check back here for updates, because this information may change frequently. + +If you're on TFS and considering moving to Team Services, read [Migrate data from TFS to Team Services](migrate-to-vsts-from-tfs.md) to understand your options. + +## Fundamental differences between TFS and Team Services + +When you plan a move, there are a few fundamental differences between TFS and Team Services that are important +for you to understand. + + + +### Scope and scale data + +TFS has three options for scoping and scaling data—deployments, +team project collections, and team projects. In the simplest case, deployments are just servers. +Deployments can also be more complicated, however, including everything from a two-server deployment +where SQL is split out on a separate machine to high availability farms comprising lots of servers. +Team project collections serve as containers for security and administration in addition to serving as +physical database boundaries. They are also used to group related team projects. Finally, team projects +are used to encapsulate the assets of individual software projects, including source code, work items, +and so on. Learn more about these concepts at +[Manage team project collections](tfs-server/admin/manage-team-project-collections.md). + +Team Services is slightly different. It currently only has two options for scoping and scaling +data—accounts and team projects. Accounts in Team Services get their own URLs (for example, ```https://contoso.visualstudio.com```) +and always contain exactly one team project collection. Accounts can contain multiple team projects, like +TFS team project collections. + +We are planning a third option for scoping and scaling data in Team Services—a new entity called an +Organization. Rather than adding support for multiple team project collections within an account, multiple +accounts could be grouped within an organization. Additionally, we will merge accounts and their single +team project collections into a single entity. The organization will be similar to the TFS deployment, +and the account will be similar to the TFS collection. + +To be ready to use the organization entity, we recommend that you create accounts in Team Services whenever you would +have created collections in TFS. In the short term, having your work split across multiple accounts can cause some +problems, but we plan to address these when the organization entity is introduced. In particular: + +* You purchase Team Services users per account, meaning that paid users only have access to the Team Services account +in which the payment is made. If you have users who need access to multiple accounts, Visual Studio subscriptions can +be an attractive option, since subscribers can be added to any number of Team Services accounts at no charge. We are +also considering other ways we might make access to multiple accounts grouped into an organization available. + +* You currently have to administer accounts one at a time, which can be cumbersome when you have many accounts. We're +working to support organization-wide policies. + +### Authentication + +With TFS, you typically connect to an intranet server (for example, ```https://tfs.corp.contoso.com:8080/tfs```). +You authenticate with Windows Authentication and your Active Directory (AD) domain credentials. Usually this +process is transparent, and you'll never see any kind of sign-in experience. + +With Team Services, you connect over the public internet (for example, ```https://contoso.visualstudio.com```). You'll either +authenticate with [Microsoft Account](http://www.microsoft.com/account) credentials or with +[Azure Active Directory (Azure AD)](https://docs.microsoft.com/azure/active-directory/active-directory-whatis) account +credentials, depending on your Team Services account setup. You can also set up Azure AD +to require features like multi-factor-authentication, IP address restrictions, and so on. + +We recommend that organizations configure their Team Services accounts to use Azure AD rather than +Microsoft Accounts. This provides a better experience in many scenarios and more options for enhanced +security. + +### Users and groups + +In TFS, you provide users access to deployments by adding Active Directory (AD) groups to various TFS groups +(for example the Project Contributors group for an individual team project). The AD group memberships are kept in sync. +As users are added and removed in AD they also gain and lose access to TFS. + +In Team Services, you can use a similar mechanism to +[provide access to groups of users](accounts/manage-azure-active-directory-groups-vsts.md) +by adding Azure AD groups to TFS groups. If you use Microsoft Accounts instead of Azure AD, you will have to +[add users](accounts/add-account-users-assign-access-levels.md) one at a time. + +### Manage user access + +In TFS and Team Services, you can give free access to work item features to an unlimited number of +Stakeholders. Also, unlimited Visual Studio subscribers can have access to all Basic features at +no additional charge. You only need to pay for other users who need access. + +In TFS, all use is on the honor system. To set access levels for users based on their licenses, use specify their +[access levels](./security/change-access-levels.md) +administration page. For example, assign unlicensed users Stakeholder access only. +Users with a TFS Client Access License (CAL) can have Basic access. +Visual Studio subscribers can have either Basic or Advanced access, based on their subscriptions. +Note that TFS does not attempt to verify these licenses or enforce compliance. + +In Team Services, you must +[assign an access level](accounts/add-account-users-assign-access-levels.md) +to each user in your account's Users hub. Team Services validates Visual Studio subscribers as +they sign in. You can assign Basic access for free to five users without Visual Studio subscriptions. +To give Basic access to more users, you'll need to set up billing for your account and +[pay for more users](billing/buy-basic-access-add-users.md). +Otherwise, all other users get Stakeholder access. + +If you use Azure AD groups to provide access to groups of users, Team Services will assign appropriate +access levels to them automatically when they sign in for the first time. For Team Services accounts configured +to use Microsoft Accounts for sign-in, you will have to assign access levels to each user explicitly. + +### Security and data protection + +Many organizations want to know more about data protection when they consider moving to the cloud. Microsoft is committed to ensuring +that Team Services projects stay safe and secure. We have technical features and business processes in place +to deliver on that commitment. You can also take steps to secure your data. Learn more in our +[Data Protection Overview whitepaper](/vsts/articles/team-services-security-whitepaper). + +## Key feature differences between Team Services and TFS + +Even though Team Services is a hosted version of TFS, there are some differences between the features available +in the two products. Some TFS features are not supported in Team Services at all—for example, Team Services does not support integration with +SharePoint or Project Server. + +### Process customization + +You customize the work tracking experience in two different ways depending on the supported process model: + +>- For Team Services, you use the **Inheritance** process model which supports WYSIWYG customization +>- For TFS, you use the **On-premises XML**process model which supports customization through import/export of XML definition files for work tracking objects + +While the **On-premises XML** process model option is quite powerful, it also +can cause a number of problems. Chief among these is that processes for existing team projects do not update automatically +when TFS is upgraded. + +For example, TFS 2013 introduced several new features which depended on new work item types and other process template +changes. When you upgrade from TFS 2012 to TFS 2013, each team project collection gets new versions of each of the +"in the box" process templates which include these changes. However, these changes are not automatically incorporated +in existing team projects. Instead, after you finish upgrading you have to include them in each team project by using +the [Configure Features](./work/customize/configure-features-after-upgrade.md) +wizard or a more manual process. + +To avoid these issues in Team Services, custom process templates and **witadmin.exe** have always been disabled (only export functions are enabled). This has +enabled us to automatically update all team projects with each Team Services upgrade. Meanwhile, the product team has been +working hard to make customizing processes possible in ways that we can support easily and continuously. These first +of these changes was recently introduced, and more changes are on the way. + +With these new Team Services process customization capabilities, you can make customizations directly within the +Team Services Web UI. If you want to customize your processes programmatically, you can also make customizations +through REST endpoints. When you customize team projects in this way, those projects will continue to update +automatically when we release new versions of their base processes with Team Services updgrades. + +To learn more, see [Customize your work tracking experience](./work/customize/customize-work.md). + +Over time we will support more and more types of process customizations with this new approach. If you need +process customization features which are not yet available and cannot wait for them, a second option for process +customization in Team Services is available, referred to as **Hosted XML** process model, and in private preview and by request only. + +With this option, you +[import customized process templates](./work/import-process/import-process.md). +This option is quite similar to using custom process templates in TFS, except that: + +* [Restrictions](./work/import-process/import-process.md) exist in the customizations +that can be imported into Team Services. + +* Process templates are associated with all team projects created from them, and changes made to the process are reflected +in each team project. + +Team projects in accounts which participate in this process customization private preview will not update automatically with +Team Services upgrades. + +### Reporting + +Both TFS and Team Services have a variety of tools to give you insight into the progress as well as the quality of +your software projects. These include: + +* [Dashboards](./report/dashboards.md) and lightweight +[charts](./report/charts.md), available in both TFS and Team Services. These are +very easy to set up and use, but are also fairly limited in what they can do. + +The following reports and dashboards—which are more complicated to use, but also more powerful—are only available in TFS: +- [Excel reports](./report/excel/excel-reports.md) +- [SQL Server Reporting Services (SSRS) reports](report/sql-reports/reporting-services-reports.md) +- [SharePoint dashboards](https://msdn.microsoft.com/Library/vs/alm/Report/overview#sharepoint-dashboards) + +And, available today only in Team Services: +* A [PowerBI connector](./report/powerbi/overview.md) which provides a nice combination of simplicity and power. We plan to make it available in TFS in a future release. + + +## Related notes +- [Devops overview for Team Services and TFS](index.md) +- [Key concepts](concepts.md) +- [Essential services](services.md) +- [Client-server tools](tools.md) +- [Software development roles](roles.md) + +- [Pricing - Team Services](https://www.visualstudio.com/team-services/pricing/) +- [Pricing - TFS](https://www.visualstudio.com/team-services/tfs-pricing/) + + diff --git a/docs/accounts/_img/IC658167.png b/docs/accounts/_img/IC658167.png new file mode 100644 index 00000000000..b7849f5b7f4 Binary files /dev/null and b/docs/accounts/_img/IC658167.png differ diff --git a/docs/accounts/_img/IC671598.png b/docs/accounts/_img/IC671598.png new file mode 100644 index 00000000000..c8e6257cddf Binary files /dev/null and b/docs/accounts/_img/IC671598.png differ diff --git a/docs/accounts/_img/IC671600.png b/docs/accounts/_img/IC671600.png new file mode 100644 index 00000000000..74607bf86e3 Binary files /dev/null and b/docs/accounts/_img/IC671600.png differ diff --git a/docs/accounts/_img/IC680074.png b/docs/accounts/_img/IC680074.png new file mode 100644 index 00000000000..d2eccf41496 Binary files /dev/null and b/docs/accounts/_img/IC680074.png differ diff --git a/docs/accounts/_img/IC779380.png b/docs/accounts/_img/IC779380.png new file mode 100644 index 00000000000..7894de4a463 Binary files /dev/null and b/docs/accounts/_img/IC779380.png differ diff --git a/docs/accounts/_img/IC795955.png b/docs/accounts/_img/IC795955.png new file mode 100644 index 00000000000..e3049fd3689 Binary files /dev/null and b/docs/accounts/_img/IC795955.png differ diff --git a/docs/accounts/_img/IC795956.png b/docs/accounts/_img/IC795956.png new file mode 100644 index 00000000000..e9122b789bb Binary files /dev/null and b/docs/accounts/_img/IC795956.png differ diff --git a/docs/accounts/_img/IC827208.png b/docs/accounts/_img/IC827208.png new file mode 100644 index 00000000000..ebeb64be009 Binary files /dev/null and b/docs/accounts/_img/IC827208.png differ diff --git a/docs/accounts/_img/IC827209.png b/docs/accounts/_img/IC827209.png new file mode 100644 index 00000000000..2f92e2b7ed1 Binary files /dev/null and b/docs/accounts/_img/IC827209.png differ diff --git a/docs/accounts/_img/IC827210.png b/docs/accounts/_img/IC827210.png new file mode 100644 index 00000000000..6206fa0421a Binary files /dev/null and b/docs/accounts/_img/IC827210.png differ diff --git a/docs/accounts/_img/_shared/AP_VSO_ManageLicenses.png b/docs/accounts/_img/_shared/AP_VSO_ManageLicenses.png new file mode 100644 index 00000000000..cd5c464c2b9 Binary files /dev/null and b/docs/accounts/_img/_shared/AP_VSO_ManageLicenses.png differ diff --git a/docs/accounts/_img/_shared/AP_VSO_SelectLinkedAccount.png b/docs/accounts/_img/_shared/AP_VSO_SelectLinkedAccount.png new file mode 100644 index 00000000000..ae6c431f15a Binary files /dev/null and b/docs/accounts/_img/_shared/AP_VSO_SelectLinkedAccount.png differ diff --git a/docs/accounts/_img/_shared/AccountSettings.png b/docs/accounts/_img/_shared/AccountSettings.png new file mode 100644 index 00000000000..26d2ca2736d Binary files /dev/null and b/docs/accounts/_img/_shared/AccountSettings.png differ diff --git a/docs/accounts/_img/_shared/AzureChooseLinkedAccount.png b/docs/accounts/_img/_shared/AzureChooseLinkedAccount.png new file mode 100644 index 00000000000..d466f79203d Binary files /dev/null and b/docs/accounts/_img/_shared/AzureChooseLinkedAccount.png differ diff --git a/docs/accounts/_img/_shared/AzureScaleLicensesResources.png b/docs/accounts/_img/_shared/AzureScaleLicensesResources.png new file mode 100644 index 00000000000..b64086fae68 Binary files /dev/null and b/docs/accounts/_img/_shared/AzureScaleLicensesResources.png differ diff --git a/docs/accounts/_img/_shared/azure-conditional-access-738.png b/docs/accounts/_img/_shared/azure-conditional-access-738.png new file mode 100644 index 00000000000..341c5b00897 Binary files /dev/null and b/docs/accounts/_img/_shared/azure-conditional-access-738.png differ diff --git a/docs/accounts/_img/_shared/azure-portal-unlink-subscription.png b/docs/accounts/_img/_shared/azure-portal-unlink-subscription.png new file mode 100644 index 00000000000..1083830c936 Binary files /dev/null and b/docs/accounts/_img/_shared/azure-portal-unlink-subscription.png differ diff --git a/docs/accounts/_img/_shared/azure-unlink-subscription.png b/docs/accounts/_img/_shared/azure-unlink-subscription.png new file mode 100644 index 00000000000..ce428d18ebf Binary files /dev/null and b/docs/accounts/_img/_shared/azure-unlink-subscription.png differ diff --git a/docs/accounts/_img/_shared/no-directory.png b/docs/accounts/_img/_shared/no-directory.png new file mode 100644 index 00000000000..50ca23b0247 Binary files /dev/null and b/docs/accounts/_img/_shared/no-directory.png differ diff --git a/docs/accounts/_img/_shared/save-changes.png b/docs/accounts/_img/_shared/save-changes.png new file mode 100644 index 00000000000..cb020ea59c2 Binary files /dev/null and b/docs/accounts/_img/_shared/save-changes.png differ diff --git a/docs/accounts/_img/_shared/sign-in-aad.png b/docs/accounts/_img/_shared/sign-in-aad.png new file mode 100644 index 00000000000..93455dabb7b Binary files /dev/null and b/docs/accounts/_img/_shared/sign-in-aad.png differ diff --git a/docs/accounts/_img/_shared/sign-in-msa2.png b/docs/accounts/_img/_shared/sign-in-msa2.png new file mode 100644 index 00000000000..34f6bfb48bf Binary files /dev/null and b/docs/accounts/_img/_shared/sign-in-msa2.png differ diff --git a/docs/accounts/_img/_shared/sign-in.png b/docs/accounts/_img/_shared/sign-in.png new file mode 100644 index 00000000000..dd966048b5a Binary files /dev/null and b/docs/accounts/_img/_shared/sign-in.png differ diff --git a/docs/accounts/_img/_shared/team-project-created.png b/docs/accounts/_img/_shared/team-project-created.png new file mode 100644 index 00000000000..ec159b7f1fb Binary files /dev/null and b/docs/accounts/_img/_shared/team-project-created.png differ diff --git a/docs/accounts/_img/_shared/users-hub-jamal.png b/docs/accounts/_img/_shared/users-hub-jamal.png new file mode 100644 index 00000000000..03c1cfd681c Binary files /dev/null and b/docs/accounts/_img/_shared/users-hub-jamal.png differ diff --git a/docs/accounts/_img/_shared/users-hub-updated.png b/docs/accounts/_img/_shared/users-hub-updated.png new file mode 100644 index 00000000000..15264af86bb Binary files /dev/null and b/docs/accounts/_img/_shared/users-hub-updated.png differ diff --git a/docs/accounts/_img/account-prefs/account-pref-ts-profile-page.png b/docs/accounts/_img/account-prefs/account-pref-ts-profile-page.png new file mode 100644 index 00000000000..f25e2a04971 Binary files /dev/null and b/docs/accounts/_img/account-prefs/account-pref-ts-profile-page.png differ diff --git a/docs/accounts/_img/account-prefs/account-prefs-tfs-user-profile.png b/docs/accounts/_img/account-prefs/account-prefs-tfs-user-profile.png new file mode 100644 index 00000000000..43fb7edbc86 Binary files /dev/null and b/docs/accounts/_img/account-prefs/account-prefs-tfs-user-profile.png differ diff --git a/docs/accounts/_img/account-prefs/open-profile-team-services.png b/docs/accounts/_img/account-prefs/open-profile-team-services.png new file mode 100644 index 00000000000..6e6989625e4 Binary files /dev/null and b/docs/accounts/_img/account-prefs/open-profile-team-services.png differ diff --git a/docs/accounts/_img/account-prefs/open-profile.png b/docs/accounts/_img/account-prefs/open-profile.png new file mode 100644 index 00000000000..a0b6b21fdf9 Binary files /dev/null and b/docs/accounts/_img/account-prefs/open-profile.png differ diff --git a/docs/accounts/_img/account-prefs/team-services-profile-dialog-co.png b/docs/accounts/_img/account-prefs/team-services-profile-dialog-co.png new file mode 100644 index 00000000000..ea142263766 Binary files /dev/null and b/docs/accounts/_img/account-prefs/team-services-profile-dialog-co.png differ diff --git a/docs/accounts/_img/add-administrator-tfs/add-user-group.png b/docs/accounts/_img/add-administrator-tfs/add-user-group.png new file mode 100644 index 00000000000..d9e12d339a7 Binary files /dev/null and b/docs/accounts/_img/add-administrator-tfs/add-user-group.png differ diff --git a/docs/accounts/_img/add-administrator-tfs/invite-administrators.png b/docs/accounts/_img/add-administrator-tfs/invite-administrators.png new file mode 100644 index 00000000000..728e5cc90e5 Binary files /dev/null and b/docs/accounts/_img/add-administrator-tfs/invite-administrators.png differ diff --git a/docs/accounts/_img/add-administrator-tfs/people-and-groups-collection.png b/docs/accounts/_img/add-administrator-tfs/people-and-groups-collection.png new file mode 100644 index 00000000000..232f1679889 Binary files /dev/null and b/docs/accounts/_img/add-administrator-tfs/people-and-groups-collection.png differ diff --git a/docs/accounts/_img/add-administrator-tfs/rs-role-assignment.png b/docs/accounts/_img/add-administrator-tfs/rs-role-assignment.png new file mode 100644 index 00000000000..0e65b08ad5c Binary files /dev/null and b/docs/accounts/_img/add-administrator-tfs/rs-role-assignment.png differ diff --git a/docs/accounts/_img/add-team-members/add-user.png b/docs/accounts/_img/add-team-members/add-user.png new file mode 100644 index 00000000000..12d3f9598d2 Binary files /dev/null and b/docs/accounts/_img/add-team-members/add-user.png differ diff --git a/docs/accounts/_img/add-team-members/add-user2.png b/docs/accounts/_img/add-team-members/add-user2.png new file mode 100644 index 00000000000..a67734e0703 Binary files /dev/null and b/docs/accounts/_img/add-team-members/add-user2.png differ diff --git a/docs/accounts/_img/add-team-members/invite-team-existing.png b/docs/accounts/_img/add-team-members/invite-team-existing.png new file mode 100644 index 00000000000..d0980e8ea32 Binary files /dev/null and b/docs/accounts/_img/add-team-members/invite-team-existing.png differ diff --git a/docs/accounts/_img/add-team-members/invite-team.png b/docs/accounts/_img/add-team-members/invite-team.png new file mode 100644 index 00000000000..62a01fae759 Binary files /dev/null and b/docs/accounts/_img/add-team-members/invite-team.png differ diff --git a/docs/accounts/_img/add-team-members/select-team-project-updated-ui.png b/docs/accounts/_img/add-team-members/select-team-project-updated-ui.png new file mode 100644 index 00000000000..c1ee49162cd Binary files /dev/null and b/docs/accounts/_img/add-team-members/select-team-project-updated-ui.png differ diff --git a/docs/accounts/_img/add-team-members/team-project-members.png b/docs/accounts/_img/add-team-members/team-project-members.png new file mode 100644 index 00000000000..205fcc9ad54 Binary files /dev/null and b/docs/accounts/_img/add-team-members/team-project-members.png differ diff --git a/docs/accounts/_img/add-users-team-project/add-contributor.png b/docs/accounts/_img/add-users-team-project/add-contributor.png new file mode 100644 index 00000000000..e8127f75fdb Binary files /dev/null and b/docs/accounts/_img/add-users-team-project/add-contributor.png differ diff --git a/docs/accounts/_img/add-users-team-project/assign-rs-browser.png b/docs/accounts/_img/add-users-team-project/assign-rs-browser.png new file mode 100644 index 00000000000..83e5e8f6c18 Binary files /dev/null and b/docs/accounts/_img/add-users-team-project/assign-rs-browser.png differ diff --git a/docs/accounts/_img/add-users-team-project/assign-rs-role.png b/docs/accounts/_img/add-users-team-project/assign-rs-role.png new file mode 100644 index 00000000000..bea69450b8a Binary files /dev/null and b/docs/accounts/_img/add-users-team-project/assign-rs-role.png differ diff --git a/docs/accounts/_img/add-users-team-project/invite-people.png b/docs/accounts/_img/add-users-team-project/invite-people.png new file mode 100644 index 00000000000..d12a325b7f7 Binary files /dev/null and b/docs/accounts/_img/add-users-team-project/invite-people.png differ diff --git a/docs/accounts/_img/add-users-team-project/overview.png b/docs/accounts/_img/add-users-team-project/overview.png new file mode 100644 index 00000000000..1041ed3bb50 Binary files /dev/null and b/docs/accounts/_img/add-users-team-project/overview.png differ diff --git a/docs/accounts/_img/add-users-team-project/permissions.png b/docs/accounts/_img/add-users-team-project/permissions.png new file mode 100644 index 00000000000..5e133ac0e74 Binary files /dev/null and b/docs/accounts/_img/add-users-team-project/permissions.png differ diff --git a/docs/accounts/_img/admin-gear-icon.png b/docs/accounts/_img/admin-gear-icon.png new file mode 100644 index 00000000000..75ad52da534 Binary files /dev/null and b/docs/accounts/_img/admin-gear-icon.png differ diff --git a/docs/accounts/_img/assign-licenses/VSO-UsersHub-AddMSDNUsers.png b/docs/accounts/_img/assign-licenses/VSO-UsersHub-AddMSDNUsers.png new file mode 100644 index 00000000000..91ca5b95220 Binary files /dev/null and b/docs/accounts/_img/assign-licenses/VSO-UsersHub-AddMSDNUsers.png differ diff --git a/docs/accounts/_img/assign-licenses/VSO-UsersHub-BoughtLicenses-Stake.png b/docs/accounts/_img/assign-licenses/VSO-UsersHub-BoughtLicenses-Stake.png new file mode 100644 index 00000000000..ae73238f8df Binary files /dev/null and b/docs/accounts/_img/assign-licenses/VSO-UsersHub-BoughtLicenses-Stake.png differ diff --git a/docs/accounts/_img/assign-licenses/VSO-UsersHub-DeleteUser.png b/docs/accounts/_img/assign-licenses/VSO-UsersHub-DeleteUser.png new file mode 100644 index 00000000000..3edd50483f7 Binary files /dev/null and b/docs/accounts/_img/assign-licenses/VSO-UsersHub-DeleteUser.png differ diff --git a/docs/accounts/_img/assign-licenses/VSO-UsersHub-LicenseValidated.png b/docs/accounts/_img/assign-licenses/VSO-UsersHub-LicenseValidated.png new file mode 100644 index 00000000000..da7b0993845 Binary files /dev/null and b/docs/accounts/_img/assign-licenses/VSO-UsersHub-LicenseValidated.png differ diff --git a/docs/accounts/_img/assign-licenses/VSO-UsersHub-OwnerOnly.png b/docs/accounts/_img/assign-licenses/VSO-UsersHub-OwnerOnly.png new file mode 100644 index 00000000000..62cda425298 Binary files /dev/null and b/docs/accounts/_img/assign-licenses/VSO-UsersHub-OwnerOnly.png differ diff --git a/docs/accounts/_img/assign-licenses/users-hub-add-from-directory.png b/docs/accounts/_img/assign-licenses/users-hub-add-from-directory.png new file mode 100644 index 00000000000..eacb1bee8b5 Binary files /dev/null and b/docs/accounts/_img/assign-licenses/users-hub-add-from-directory.png differ diff --git a/docs/accounts/_img/buy-more-basic-access/AP_VSO_SelectTotalUsers.png b/docs/accounts/_img/buy-more-basic-access/AP_VSO_SelectTotalUsers.png new file mode 100644 index 00000000000..4c30b0be09b Binary files /dev/null and b/docs/accounts/_img/buy-more-basic-access/AP_VSO_SelectTotalUsers.png differ diff --git a/docs/accounts/_img/buy-more-basic-access/confirm-azure-subscription-vs-marketplace.png b/docs/accounts/_img/buy-more-basic-access/confirm-azure-subscription-vs-marketplace.png new file mode 100644 index 00000000000..5cb716a9836 Binary files /dev/null and b/docs/accounts/_img/buy-more-basic-access/confirm-azure-subscription-vs-marketplace.png differ diff --git a/docs/accounts/_img/buy-more-basic-access/confirm-basic-access-purchase-vs-marketplace.png b/docs/accounts/_img/buy-more-basic-access/confirm-basic-access-purchase-vs-marketplace.png new file mode 100644 index 00000000000..6a3639f878e Binary files /dev/null and b/docs/accounts/_img/buy-more-basic-access/confirm-basic-access-purchase-vs-marketplace.png differ diff --git a/docs/accounts/_img/buy-more-basic-access/confirm-updated-basic-access-purchase-vs-marketplace.png b/docs/accounts/_img/buy-more-basic-access/confirm-updated-basic-access-purchase-vs-marketplace.png new file mode 100644 index 00000000000..b3b7b072081 Binary files /dev/null and b/docs/accounts/_img/buy-more-basic-access/confirm-updated-basic-access-purchase-vs-marketplace.png differ diff --git a/docs/accounts/_img/buy-more-basic-access/paid-basic-access-for-team-services-users.png b/docs/accounts/_img/buy-more-basic-access/paid-basic-access-for-team-services-users.png new file mode 100644 index 00000000000..3b5a6f95dc8 Binary files /dev/null and b/docs/accounts/_img/buy-more-basic-access/paid-basic-access-for-team-services-users.png differ diff --git a/docs/accounts/_img/buy-more-basic-access/select-number-users-vs-marketplace-add-more.png b/docs/accounts/_img/buy-more-basic-access/select-number-users-vs-marketplace-add-more.png new file mode 100644 index 00000000000..ae203c99c2b Binary files /dev/null and b/docs/accounts/_img/buy-more-basic-access/select-number-users-vs-marketplace-add-more.png differ diff --git a/docs/accounts/_img/buy-more-basic-access/select-number-users-vs-marketplace.png b/docs/accounts/_img/buy-more-basic-access/select-number-users-vs-marketplace.png new file mode 100644 index 00000000000..8c02534a995 Binary files /dev/null and b/docs/accounts/_img/buy-more-basic-access/select-number-users-vs-marketplace.png differ diff --git a/docs/accounts/_img/buy-more-basic-access/select-team-services-account-vs-marketplace.png b/docs/accounts/_img/buy-more-basic-access/select-team-services-account-vs-marketplace.png new file mode 100644 index 00000000000..14c91473760 Binary files /dev/null and b/docs/accounts/_img/buy-more-basic-access/select-team-services-account-vs-marketplace.png differ diff --git a/docs/accounts/_img/buy-more-basic-access/team-services-users-vs-marketplace.png b/docs/accounts/_img/buy-more-basic-access/team-services-users-vs-marketplace.png new file mode 100644 index 00000000000..9daca836449 Binary files /dev/null and b/docs/accounts/_img/buy-more-basic-access/team-services-users-vs-marketplace.png differ diff --git a/docs/accounts/_img/change-account-access-policies/Connections.png b/docs/accounts/_img/change-account-access-policies/Connections.png new file mode 100644 index 00000000000..2985f2c59e8 Binary files /dev/null and b/docs/accounts/_img/change-account-access-policies/Connections.png differ diff --git a/docs/accounts/_img/change-account-ownership/VSOControlPanelChangeOwner.png b/docs/accounts/_img/change-account-ownership/VSOControlPanelChangeOwner.png new file mode 100644 index 00000000000..98cc3bd308c Binary files /dev/null and b/docs/accounts/_img/change-account-ownership/VSOControlPanelChangeOwner.png differ diff --git a/docs/accounts/_img/change-account-ownership/VSOFindNewAccountOwner.png b/docs/accounts/_img/change-account-ownership/VSOFindNewAccountOwner.png new file mode 100644 index 00000000000..7654ccc4cf2 Binary files /dev/null and b/docs/accounts/_img/change-account-ownership/VSOFindNewAccountOwner.png differ diff --git a/docs/accounts/_img/change-account-ownership/VSOSaveNewAccountOwner.png b/docs/accounts/_img/change-account-ownership/VSOSaveNewAccountOwner.png new file mode 100644 index 00000000000..92f818de83d Binary files /dev/null and b/docs/accounts/_img/change-account-ownership/VSOSaveNewAccountOwner.png differ diff --git a/docs/accounts/_img/change-azure-active-directory/add-msa-vsts.png b/docs/accounts/_img/change-azure-active-directory/add-msa-vsts.png new file mode 100644 index 00000000000..184e223a8f2 Binary files /dev/null and b/docs/accounts/_img/change-azure-active-directory/add-msa-vsts.png differ diff --git a/docs/accounts/_img/change-azure-active-directory/azure-choose-target-directory.png b/docs/accounts/_img/change-azure-active-directory/azure-choose-target-directory.png new file mode 100644 index 00000000000..039c4671fc7 Binary files /dev/null and b/docs/accounts/_img/change-azure-active-directory/azure-choose-target-directory.png differ diff --git a/docs/accounts/_img/change-azure-active-directory/select-account-subscription.png b/docs/accounts/_img/change-azure-active-directory/select-account-subscription.png new file mode 100644 index 00000000000..3e93f90d7b6 Binary files /dev/null and b/docs/accounts/_img/change-azure-active-directory/select-account-subscription.png differ diff --git a/docs/accounts/_img/change-azure-active-directory/select-directory.png b/docs/accounts/_img/change-azure-active-directory/select-directory.png new file mode 100644 index 00000000000..b6d1d1e71d8 Binary files /dev/null and b/docs/accounts/_img/change-azure-active-directory/select-directory.png differ diff --git a/docs/accounts/_img/checkmark.png b/docs/accounts/_img/checkmark.png new file mode 100644 index 00000000000..252cab0a68e Binary files /dev/null and b/docs/accounts/_img/checkmark.png differ diff --git a/docs/accounts/_img/connect-to-visual-studio-online-eclipse/add-server.png b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/add-server.png new file mode 100644 index 00000000000..48067e881d3 Binary files /dev/null and b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/add-server.png differ diff --git a/docs/accounts/_img/connect-to-visual-studio-online-eclipse/add-servers.png b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/add-servers.png new file mode 100644 index 00000000000..9ff632e7d05 Binary files /dev/null and b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/add-servers.png differ diff --git a/docs/accounts/_img/connect-to-visual-studio-online-eclipse/add-site.png b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/add-site.png new file mode 100644 index 00000000000..fc313fbf982 Binary files /dev/null and b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/add-site.png differ diff --git a/docs/accounts/_img/connect-to-visual-studio-online-eclipse/connect-to-tfs.jpg b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/connect-to-tfs.jpg new file mode 100644 index 00000000000..5e78f79d3cd Binary files /dev/null and b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/connect-to-tfs.jpg differ diff --git a/docs/accounts/_img/connect-to-visual-studio-online-eclipse/select-tee-for-install.png b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/select-tee-for-install.png new file mode 100644 index 00000000000..9c5db40b17c Binary files /dev/null and b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/select-tee-for-install.png differ diff --git a/docs/accounts/_img/connect-to-visual-studio-online-eclipse/show-view.png b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/show-view.png new file mode 100644 index 00000000000..bd8b65e66fb Binary files /dev/null and b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/show-view.png differ diff --git a/docs/accounts/_img/connect-to-visual-studio-online-eclipse/team-explorer-view.png b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/team-explorer-view.png new file mode 100644 index 00000000000..e1575a5d51c Binary files /dev/null and b/docs/accounts/_img/connect-to-visual-studio-online-eclipse/team-explorer-view.png differ diff --git a/docs/accounts/_img/connect-to-visual-studio-team-services/open-visual-studio.png b/docs/accounts/_img/connect-to-visual-studio-team-services/open-visual-studio.png new file mode 100644 index 00000000000..2262ebcdd07 Binary files /dev/null and b/docs/accounts/_img/connect-to-visual-studio-team-services/open-visual-studio.png differ diff --git a/docs/accounts/_img/context-menu-icon.png b/docs/accounts/_img/context-menu-icon.png new file mode 100644 index 00000000000..f2f1c931094 Binary files /dev/null and b/docs/accounts/_img/context-menu-icon.png differ diff --git a/docs/accounts/_img/create-team-project-add-repositories.png b/docs/accounts/_img/create-team-project-add-repositories.png new file mode 100644 index 00000000000..4565b55512e Binary files /dev/null and b/docs/accounts/_img/create-team-project-add-repositories.png differ diff --git a/docs/accounts/_img/create-team-project/AdminOverview.png b/docs/accounts/_img/create-team-project/AdminOverview.png new file mode 100644 index 00000000000..efea045a71a Binary files /dev/null and b/docs/accounts/_img/create-team-project/AdminOverview.png differ diff --git a/docs/accounts/_img/create-team-project/CollectionOverview.png b/docs/accounts/_img/create-team-project/CollectionOverview.png new file mode 100644 index 00000000000..979d97eff06 Binary files /dev/null and b/docs/accounts/_img/create-team-project/CollectionOverview.png differ diff --git a/docs/accounts/_img/create-team-project/CreateProject.png b/docs/accounts/_img/create-team-project/CreateProject.png new file mode 100644 index 00000000000..0c608b07cad Binary files /dev/null and b/docs/accounts/_img/create-team-project/CreateProject.png differ diff --git a/docs/accounts/_img/delete-account/APP_UnlinkVSOAccount2.png b/docs/accounts/_img/delete-account/APP_UnlinkVSOAccount2.png new file mode 100644 index 00000000000..3e3a35af71e Binary files /dev/null and b/docs/accounts/_img/delete-account/APP_UnlinkVSOAccount2.png differ diff --git a/docs/accounts/_img/delete-account/AzureUnlinkVSOAccount.png b/docs/accounts/_img/delete-account/AzureUnlinkVSOAccount.png new file mode 100644 index 00000000000..dbaa02ab8d9 Binary files /dev/null and b/docs/accounts/_img/delete-account/AzureUnlinkVSOAccount.png differ diff --git a/docs/accounts/_img/delete-account/VSODeleteAccount.png b/docs/accounts/_img/delete-account/VSODeleteAccount.png new file mode 100644 index 00000000000..d83a64967be Binary files /dev/null and b/docs/accounts/_img/delete-account/VSODeleteAccount.png differ diff --git a/docs/accounts/_img/delete-account/deleted-account.png b/docs/accounts/_img/delete-account/deleted-account.png new file mode 100644 index 00000000000..30537e4434f Binary files /dev/null and b/docs/accounts/_img/delete-account/deleted-account.png differ diff --git a/docs/accounts/_img/delete-account/rename-deleted-account.png b/docs/accounts/_img/delete-account/rename-deleted-account.png new file mode 100644 index 00000000000..218829c3b6f Binary files /dev/null and b/docs/accounts/_img/delete-account/rename-deleted-account.png differ diff --git a/docs/accounts/_img/delete-account/restore-account.png b/docs/accounts/_img/delete-account/restore-account.png new file mode 100644 index 00000000000..e996ddf4522 Binary files /dev/null and b/docs/accounts/_img/delete-account/restore-account.png differ diff --git a/docs/accounts/_img/delete-account/restore-confirm.png b/docs/accounts/_img/delete-account/restore-confirm.png new file mode 100644 index 00000000000..a4c27bf464e Binary files /dev/null and b/docs/accounts/_img/delete-account/restore-confirm.png differ diff --git a/docs/accounts/_img/delete-team-project-dialog.png b/docs/accounts/_img/delete-team-project-dialog.png new file mode 100644 index 00000000000..2365f73eec8 Binary files /dev/null and b/docs/accounts/_img/delete-team-project-dialog.png differ diff --git a/docs/accounts/_img/delete-team-project-select-actions-menu.png b/docs/accounts/_img/delete-team-project-select-actions-menu.png new file mode 100644 index 00000000000..9b530ea4fc7 Binary files /dev/null and b/docs/accounts/_img/delete-team-project-select-actions-menu.png differ diff --git a/docs/accounts/_img/delete-team-project/IC623347.png b/docs/accounts/_img/delete-team-project/IC623347.png new file mode 100644 index 00000000000..7f76c912513 Binary files /dev/null and b/docs/accounts/_img/delete-team-project/IC623347.png differ diff --git a/docs/accounts/_img/delete-team-project/IC686856.png b/docs/accounts/_img/delete-team-project/IC686856.png new file mode 100644 index 00000000000..79f90938809 Binary files /dev/null and b/docs/accounts/_img/delete-team-project/IC686856.png differ diff --git a/docs/accounts/_img/delete-team-project/IC686857.png b/docs/accounts/_img/delete-team-project/IC686857.png new file mode 100644 index 00000000000..2502fa4626a Binary files /dev/null and b/docs/accounts/_img/delete-team-project/IC686857.png differ diff --git a/docs/accounts/_img/delete-team-project/IC687180.png b/docs/accounts/_img/delete-team-project/IC687180.png new file mode 100644 index 00000000000..fe6797fdd3f Binary files /dev/null and b/docs/accounts/_img/delete-team-project/IC687180.png differ diff --git a/docs/accounts/_img/delete-team-project/IC760345.png b/docs/accounts/_img/delete-team-project/IC760345.png new file mode 100644 index 00000000000..0691ca7610b Binary files /dev/null and b/docs/accounts/_img/delete-team-project/IC760345.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/AP_VSO_ManageServices.png b/docs/accounts/_img/get-more-build-load-testing/AP_VSO_ManageServices.png new file mode 100644 index 00000000000..9492610d390 Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/AP_VSO_ManageServices.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/AP_VSO_PaidCloudLoadTesting.png b/docs/accounts/_img/get-more-build-load-testing/AP_VSO_PaidCloudLoadTesting.png new file mode 100644 index 00000000000..777d7dd4721 Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/AP_VSO_PaidCloudLoadTesting.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/AzureDashboard.png b/docs/accounts/_img/get-more-build-load-testing/AzureDashboard.png new file mode 100644 index 00000000000..0772da4d22f Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/AzureDashboard.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/AzureManageResources.png b/docs/accounts/_img/get-more-build-load-testing/AzureManageResources.png new file mode 100644 index 00000000000..bbaf1e2e459 Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/AzureManageResources.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/buy-hosted-build-release-pipelines.png b/docs/accounts/_img/get-more-build-load-testing/buy-hosted-build-release-pipelines.png new file mode 100644 index 00000000000..5b74fdbf4a6 Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/buy-hosted-build-release-pipelines.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/confirm-hosted-pipeline-purchase.png b/docs/accounts/_img/get-more-build-load-testing/confirm-hosted-pipeline-purchase.png new file mode 100644 index 00000000000..a3ab41b3a90 Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/confirm-hosted-pipeline-purchase.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/manage-pipelines-team-services.png b/docs/accounts/_img/get-more-build-load-testing/manage-pipelines-team-services.png new file mode 100644 index 00000000000..87bd03035ac Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/manage-pipelines-team-services.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/select-azure-subscription.png b/docs/accounts/_img/get-more-build-load-testing/select-azure-subscription.png new file mode 100644 index 00000000000..fc9ce7ce7f4 Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/select-azure-subscription.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/select-number-hosted-pipelines.png b/docs/accounts/_img/get-more-build-load-testing/select-number-hosted-pipelines.png new file mode 100644 index 00000000000..7bb6c7c04bc Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/select-number-hosted-pipelines.png differ diff --git a/docs/accounts/_img/get-more-build-load-testing/select-team-services-account.png b/docs/accounts/_img/get-more-build-load-testing/select-team-services-account.png new file mode 100644 index 00000000000..06553d1cfb2 Binary files /dev/null and b/docs/accounts/_img/get-more-build-load-testing/select-team-services-account.png differ diff --git a/docs/accounts/_img/link-msdn-subscription/add-alternate-account-my-visual-studio-com-portal.png b/docs/accounts/_img/link-msdn-subscription/add-alternate-account-my-visual-studio-com-portal.png new file mode 100644 index 00000000000..b081f93ad03 Binary files /dev/null and b/docs/accounts/_img/link-msdn-subscription/add-alternate-account-my-visual-studio-com-portal.png differ diff --git a/docs/accounts/_img/link-msdn-subscription/choose-subscriptions-my-visual-studio-com-portal.png b/docs/accounts/_img/link-msdn-subscription/choose-subscriptions-my-visual-studio-com-portal.png new file mode 100644 index 00000000000..b52d975daa9 Binary files /dev/null and b/docs/accounts/_img/link-msdn-subscription/choose-subscriptions-my-visual-studio-com-portal.png differ diff --git a/docs/accounts/_img/link-msdn-subscription/enter-alternate-account-my-visual-studio-com-portal.png b/docs/accounts/_img/link-msdn-subscription/enter-alternate-account-my-visual-studio-com-portal.png new file mode 100644 index 00000000000..ec9db4b0882 Binary files /dev/null and b/docs/accounts/_img/link-msdn-subscription/enter-alternate-account-my-visual-studio-com-portal.png differ diff --git a/docs/accounts/_img/manage-azure-ad-groups/AddAADGroupPanelBrowse.png b/docs/accounts/_img/manage-azure-ad-groups/AddAADGroupPanelBrowse.png new file mode 100644 index 00000000000..f67f94a7b27 Binary files /dev/null and b/docs/accounts/_img/manage-azure-ad-groups/AddAADGroupPanelBrowse.png differ diff --git a/docs/accounts/_img/manage-azure-ad-groups/CheckIdentitySourceAAD.png b/docs/accounts/_img/manage-azure-ad-groups/CheckIdentitySourceAAD.png new file mode 100644 index 00000000000..fbf85f02b53 Binary files /dev/null and b/docs/accounts/_img/manage-azure-ad-groups/CheckIdentitySourceAAD.png differ diff --git a/docs/accounts/_img/manage-azure-ad-groups/DeleteAADGroupFromVSO.png b/docs/accounts/_img/manage-azure-ad-groups/DeleteAADGroupFromVSO.png new file mode 100644 index 00000000000..b7ada77340e Binary files /dev/null and b/docs/accounts/_img/manage-azure-ad-groups/DeleteAADGroupFromVSO.png differ diff --git a/docs/accounts/_img/manage-azure-ad-groups/VSOGroupAddMemberButton.png b/docs/accounts/_img/manage-azure-ad-groups/VSOGroupAddMemberButton.png new file mode 100644 index 00000000000..9c1c439d382 Binary files /dev/null and b/docs/accounts/_img/manage-azure-ad-groups/VSOGroupAddMemberButton.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureADAdmin.png b/docs/accounts/_img/manage-work-access/AzureADAdmin.png new file mode 100644 index 00000000000..6fe0fa60705 Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureADAdmin.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureAddMembers3.png b/docs/accounts/_img/manage-work-access/AzureAddMembers3.png new file mode 100644 index 00000000000..3ab7ca7f01e Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureAddMembers3.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureConfigureVSO.png b/docs/accounts/_img/manage-work-access/AzureConfigureVSO.png new file mode 100644 index 00000000000..313d7b2bf14 Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureConfigureVSO.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureConnectDirectory1.png b/docs/accounts/_img/manage-work-access/AzureConnectDirectory1.png new file mode 100644 index 00000000000..83a6ab4d544 Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureConnectDirectory1.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureConnectDirectory2.png b/docs/accounts/_img/manage-work-access/AzureConnectDirectory2.png new file mode 100644 index 00000000000..8a27bc074fd Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureConnectDirectory2.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureConnectDirectory3.png b/docs/accounts/_img/manage-work-access/AzureConnectDirectory3.png new file mode 100644 index 00000000000..588e1adb398 Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureConnectDirectory3.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureDisconnectDirectory1.png b/docs/accounts/_img/manage-work-access/AzureDisconnectDirectory1.png new file mode 100644 index 00000000000..74eac366b30 Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureDisconnectDirectory1.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureDisconnectDirectory2.png b/docs/accounts/_img/manage-work-access/AzureDisconnectDirectory2.png new file mode 100644 index 00000000000..d79cbff9de0 Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureDisconnectDirectory2.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureDisconnectDirectory3.png b/docs/accounts/_img/manage-work-access/AzureDisconnectDirectory3.png new file mode 100644 index 00000000000..e65ebd9042e Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureDisconnectDirectory3.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureFindConnectedDirectory.png b/docs/accounts/_img/manage-work-access/AzureFindConnectedDirectory.png new file mode 100644 index 00000000000..ab59112fc3f Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureFindConnectedDirectory.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureSelectConnectedVSO.png b/docs/accounts/_img/manage-work-access/AzureSelectConnectedVSO.png new file mode 100644 index 00000000000..8db3545f40f Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureSelectConnectedVSO.png differ diff --git a/docs/accounts/_img/manage-work-access/AzureVSO_Unconnected.png b/docs/accounts/_img/manage-work-access/AzureVSO_Unconnected.png new file mode 100644 index 00000000000..1b5cda5aa4b Binary files /dev/null and b/docs/accounts/_img/manage-work-access/AzureVSO_Unconnected.png differ diff --git a/docs/accounts/_img/manage-work-access/azure-configure-disconnect.png b/docs/accounts/_img/manage-work-access/azure-configure-disconnect.png new file mode 100644 index 00000000000..23db4e077ed Binary files /dev/null and b/docs/accounts/_img/manage-work-access/azure-configure-disconnect.png differ diff --git a/docs/accounts/_img/manage-work-access/guest-access.png b/docs/accounts/_img/manage-work-access/guest-access.png new file mode 100644 index 00000000000..09596f7d100 Binary files /dev/null and b/docs/accounts/_img/manage-work-access/guest-access.png differ diff --git a/docs/accounts/_img/open-admin-context-team-services.png b/docs/accounts/_img/open-admin-context-team-services.png new file mode 100644 index 00000000000..0a0f2ebb7c7 Binary files /dev/null and b/docs/accounts/_img/open-admin-context-team-services.png differ diff --git a/docs/accounts/_img/permissions/area-permissions.png b/docs/accounts/_img/permissions/area-permissions.png new file mode 100644 index 00000000000..59828eeee3e Binary files /dev/null and b/docs/accounts/_img/permissions/area-permissions.png differ diff --git a/docs/accounts/_img/permissions/build-permissions.png b/docs/accounts/_img/permissions/build-permissions.png new file mode 100644 index 00000000000..3e2bfd62429 Binary files /dev/null and b/docs/accounts/_img/permissions/build-permissions.png differ diff --git a/docs/accounts/_img/permissions/collection-groups-and-permissions.png b/docs/accounts/_img/permissions/collection-groups-and-permissions.png new file mode 100644 index 00000000000..173b2062819 Binary files /dev/null and b/docs/accounts/_img/permissions/collection-groups-and-permissions.png differ diff --git a/docs/accounts/_img/permissions/git-permissions-prior-to-2017.png b/docs/accounts/_img/permissions/git-permissions-prior-to-2017.png new file mode 100644 index 00000000000..1af505e1e10 Binary files /dev/null and b/docs/accounts/_img/permissions/git-permissions-prior-to-2017.png differ diff --git a/docs/accounts/_img/permissions/git-permissions.png b/docs/accounts/_img/permissions/git-permissions.png new file mode 100644 index 00000000000..1cf6fba249c Binary files /dev/null and b/docs/accounts/_img/permissions/git-permissions.png differ diff --git a/docs/accounts/_img/permissions/iteration-permissions.png b/docs/accounts/_img/permissions/iteration-permissions.png new file mode 100644 index 00000000000..b1c0fec675f Binary files /dev/null and b/docs/accounts/_img/permissions/iteration-permissions.png differ diff --git a/docs/accounts/_img/permissions/permissions-overview.png b/docs/accounts/_img/permissions/permissions-overview.png new file mode 100644 index 00000000000..d443f13cc60 Binary files /dev/null and b/docs/accounts/_img/permissions/permissions-overview.png differ diff --git a/docs/accounts/_img/permissions/query-folder-permissions.png b/docs/accounts/_img/permissions/query-folder-permissions.png new file mode 100644 index 00000000000..f6909cc58b6 Binary files /dev/null and b/docs/accounts/_img/permissions/query-folder-permissions.png differ diff --git a/docs/accounts/_img/permissions/server-groups-and-permissions.png b/docs/accounts/_img/permissions/server-groups-and-permissions.png new file mode 100644 index 00000000000..52b8baa3065 Binary files /dev/null and b/docs/accounts/_img/permissions/server-groups-and-permissions.png differ diff --git a/docs/accounts/_img/permissions/team-project-groups-and-permissions.png b/docs/accounts/_img/permissions/team-project-groups-and-permissions.png new file mode 100644 index 00000000000..c15e042de81 Binary files /dev/null and b/docs/accounts/_img/permissions/team-project-groups-and-permissions.png differ diff --git a/docs/accounts/_img/permissions/tfvc-permissions.png b/docs/accounts/_img/permissions/tfvc-permissions.png new file mode 100644 index 00000000000..12e727b69db Binary files /dev/null and b/docs/accounts/_img/permissions/tfvc-permissions.png differ diff --git a/docs/accounts/_img/rename-team-project/CloneURL.png b/docs/accounts/_img/rename-team-project/CloneURL.png new file mode 100644 index 00000000000..1100e207203 Binary files /dev/null and b/docs/accounts/_img/rename-team-project/CloneURL.png differ diff --git a/docs/accounts/_img/rename-team-project/EditRepoSettings.png b/docs/accounts/_img/rename-team-project/EditRepoSettings.png new file mode 100644 index 00000000000..e77eda63f25 Binary files /dev/null and b/docs/accounts/_img/rename-team-project/EditRepoSettings.png differ diff --git a/docs/accounts/_img/rename-team-project/ProjectRename1.png b/docs/accounts/_img/rename-team-project/ProjectRename1.png new file mode 100644 index 00000000000..5492f8ce60f Binary files /dev/null and b/docs/accounts/_img/rename-team-project/ProjectRename1.png differ diff --git a/docs/accounts/_img/rename-team-project/ProjectSettings.png b/docs/accounts/_img/rename-team-project/ProjectSettings.png new file mode 100644 index 00000000000..e6e7eea69b1 Binary files /dev/null and b/docs/accounts/_img/rename-team-project/ProjectSettings.png differ diff --git a/docs/accounts/_img/rename-team-project/RefreshTeamExplorer.png b/docs/accounts/_img/rename-team-project/RefreshTeamExplorer.png new file mode 100644 index 00000000000..c420368bc61 Binary files /dev/null and b/docs/accounts/_img/rename-team-project/RefreshTeamExplorer.png differ diff --git a/docs/accounts/_img/rename-team-project/RepoConnect.png b/docs/accounts/_img/rename-team-project/RepoConnect.png new file mode 100644 index 00000000000..1590823c86a Binary files /dev/null and b/docs/accounts/_img/rename-team-project/RepoConnect.png differ diff --git a/docs/accounts/_img/rename-team-project/RepoSettings.png b/docs/accounts/_img/rename-team-project/RepoSettings.png new file mode 100644 index 00000000000..6ee5a4683d8 Binary files /dev/null and b/docs/accounts/_img/rename-team-project/RepoSettings.png differ diff --git a/docs/accounts/_img/rename-team-project/Result.png b/docs/accounts/_img/rename-team-project/Result.png new file mode 100644 index 00000000000..3b3376fc27a Binary files /dev/null and b/docs/accounts/_img/rename-team-project/Result.png differ diff --git a/docs/accounts/_img/rename-team-project/collection-rename.png b/docs/accounts/_img/rename-team-project/collection-rename.png new file mode 100644 index 00000000000..b74e2314a63 Binary files /dev/null and b/docs/accounts/_img/rename-team-project/collection-rename.png differ diff --git a/docs/accounts/_img/rename-team-project/gearicon.png b/docs/accounts/_img/rename-team-project/gearicon.png new file mode 100644 index 00000000000..7f76c912513 Binary files /dev/null and b/docs/accounts/_img/rename-team-project/gearicon.png differ diff --git a/docs/accounts/_img/rename-team-project/lab-build-process.png b/docs/accounts/_img/rename-team-project/lab-build-process.png new file mode 100644 index 00000000000..37ebeaa4fde Binary files /dev/null and b/docs/accounts/_img/rename-team-project/lab-build-process.png differ diff --git a/docs/accounts/_img/rename-team-project/remotelink.PNG b/docs/accounts/_img/rename-team-project/remotelink.PNG new file mode 100644 index 00000000000..2b4ddd4928f Binary files /dev/null and b/docs/accounts/_img/rename-team-project/remotelink.PNG differ diff --git a/docs/accounts/_img/rename-team-project/team-project-git-tabs.png b/docs/accounts/_img/rename-team-project/team-project-git-tabs.png new file mode 100644 index 00000000000..c399a6f2dc8 Binary files /dev/null and b/docs/accounts/_img/rename-team-project/team-project-git-tabs.png differ diff --git a/docs/accounts/_img/rename-team-project/tfvc-get.png b/docs/accounts/_img/rename-team-project/tfvc-get.png new file mode 100644 index 00000000000..f6fbf515a64 Binary files /dev/null and b/docs/accounts/_img/rename-team-project/tfvc-get.png differ diff --git a/docs/accounts/_img/rename-vso-account/VSOConfirmAccountRename.png b/docs/accounts/_img/rename-vso-account/VSOConfirmAccountRename.png new file mode 100644 index 00000000000..104c34050d1 Binary files /dev/null and b/docs/accounts/_img/rename-vso-account/VSOConfirmAccountRename.png differ diff --git a/docs/accounts/_img/rename-vso-account/VSORenameAccount.png b/docs/accounts/_img/rename-vso-account/VSORenameAccount.png new file mode 100644 index 00000000000..becf2b27352 Binary files /dev/null and b/docs/accounts/_img/rename-vso-account/VSORenameAccount.png differ diff --git a/docs/accounts/_img/restrict-access-tfs/build-security.png b/docs/accounts/_img/restrict-access-tfs/build-security.png new file mode 100644 index 00000000000..8eac442428a Binary files /dev/null and b/docs/accounts/_img/restrict-access-tfs/build-security.png differ diff --git a/docs/accounts/_img/restrict-access-tfs/git-permissions.png b/docs/accounts/_img/restrict-access-tfs/git-permissions.png new file mode 100644 index 00000000000..a648471144b Binary files /dev/null and b/docs/accounts/_img/restrict-access-tfs/git-permissions.png differ diff --git a/docs/accounts/_img/restrict-access-tfs/readers-permissions.png b/docs/accounts/_img/restrict-access-tfs/readers-permissions.png new file mode 100644 index 00000000000..aa810ac8b41 Binary files /dev/null and b/docs/accounts/_img/restrict-access-tfs/readers-permissions.png differ diff --git a/docs/accounts/_img/set-up-billing/AP_VSO_Linked.png b/docs/accounts/_img/set-up-billing/AP_VSO_Linked.png new file mode 100644 index 00000000000..1b8d11d1f16 Binary files /dev/null and b/docs/accounts/_img/set-up-billing/AP_VSO_Linked.png differ diff --git a/docs/accounts/_img/set-up-billing/AP_VSO_SelectSubscription.png b/docs/accounts/_img/set-up-billing/AP_VSO_SelectSubscription.png new file mode 100644 index 00000000000..a0509b8c4cd Binary files /dev/null and b/docs/accounts/_img/set-up-billing/AP_VSO_SelectSubscription.png differ diff --git a/docs/accounts/_img/set-up-billing/AP_VSO_StartLink2.png b/docs/accounts/_img/set-up-billing/AP_VSO_StartLink2.png new file mode 100644 index 00000000000..f39b86a92bc Binary files /dev/null and b/docs/accounts/_img/set-up-billing/AP_VSO_StartLink2.png differ diff --git a/docs/accounts/_img/set-up-billing/AP_VSO_change-azure-subscription.png b/docs/accounts/_img/set-up-billing/AP_VSO_change-azure-subscription.png new file mode 100644 index 00000000000..8eafd15c63b Binary files /dev/null and b/docs/accounts/_img/set-up-billing/AP_VSO_change-azure-subscription.png differ diff --git a/docs/accounts/_img/set-up-billing/AzureDeveloperServicesStart.png b/docs/accounts/_img/set-up-billing/AzureDeveloperServicesStart.png new file mode 100644 index 00000000000..969b6789e04 Binary files /dev/null and b/docs/accounts/_img/set-up-billing/AzureDeveloperServicesStart.png differ diff --git a/docs/accounts/_img/set-up-billing/AzureSubscriptionsFilter.png b/docs/accounts/_img/set-up-billing/AzureSubscriptionsFilter.png new file mode 100644 index 00000000000..504242db587 Binary files /dev/null and b/docs/accounts/_img/set-up-billing/AzureSubscriptionsFilter.png differ diff --git a/docs/accounts/_img/set-up-billing/ap-add-owncontrib.png b/docs/accounts/_img/set-up-billing/ap-add-owncontrib.png new file mode 100644 index 00000000000..c9a7a7ebd23 Binary files /dev/null and b/docs/accounts/_img/set-up-billing/ap-add-owncontrib.png differ diff --git a/docs/accounts/_img/set-up-billing/ap-vso-selectlink2.png b/docs/accounts/_img/set-up-billing/ap-vso-selectlink2.png new file mode 100644 index 00000000000..c570762c949 Binary files /dev/null and b/docs/accounts/_img/set-up-billing/ap-vso-selectlink2.png differ diff --git a/docs/accounts/_img/set-up-vs/HelloNewProfile.png b/docs/accounts/_img/set-up-vs/HelloNewProfile.png new file mode 100644 index 00000000000..1614f8c8965 Binary files /dev/null and b/docs/accounts/_img/set-up-vs/HelloNewProfile.png differ diff --git a/docs/accounts/_img/set-up-vs/change-location.png b/docs/accounts/_img/set-up-vs/change-location.png new file mode 100644 index 00000000000..69517a2d9b8 Binary files /dev/null and b/docs/accounts/_img/set-up-vs/change-location.png differ diff --git a/docs/accounts/_img/set-up-vs/create-team-project-vs.png b/docs/accounts/_img/set-up-vs/create-team-project-vs.png new file mode 100644 index 00000000000..3fab651e3e0 Binary files /dev/null and b/docs/accounts/_img/set-up-vs/create-team-project-vs.png differ diff --git a/docs/accounts/_img/set-up-vs/profile-account-details.png b/docs/accounts/_img/set-up-vs/profile-account-details.png new file mode 100644 index 00000000000..e334aaef312 Binary files /dev/null and b/docs/accounts/_img/set-up-vs/profile-account-details.png differ diff --git a/docs/accounts/_img/set-up-vs/profile-account-details2.png b/docs/accounts/_img/set-up-vs/profile-account-details2.png new file mode 100644 index 00000000000..1c0946ba8ed Binary files /dev/null and b/docs/accounts/_img/set-up-vs/profile-account-details2.png differ diff --git a/docs/accounts/_img/set-up-vs/sign-in-visual-studio.png b/docs/accounts/_img/set-up-vs/sign-in-visual-studio.png new file mode 100644 index 00000000000..1c130a49930 Binary files /dev/null and b/docs/accounts/_img/set-up-vs/sign-in-visual-studio.png differ diff --git a/docs/accounts/_img/sign-up-visual-studio-team-services/change-account-directory.png b/docs/accounts/_img/sign-up-visual-studio-team-services/change-account-directory.png new file mode 100644 index 00000000000..53e2fb7589e Binary files /dev/null and b/docs/accounts/_img/sign-up-visual-studio-team-services/change-account-directory.png differ diff --git a/docs/accounts/_img/sign-up-visual-studio-team-services/check-account-location-standard.png b/docs/accounts/_img/sign-up-visual-studio-team-services/check-account-location-standard.png new file mode 100644 index 00000000000..a06e5b43118 Binary files /dev/null and b/docs/accounts/_img/sign-up-visual-studio-team-services/check-account-location-standard.png differ diff --git a/docs/accounts/_img/sign-up-visual-studio-team-services/create-profile-msa.png b/docs/accounts/_img/sign-up-visual-studio-team-services/create-profile-msa.png new file mode 100644 index 00000000000..7f13a6e10f3 Binary files /dev/null and b/docs/accounts/_img/sign-up-visual-studio-team-services/create-profile-msa.png differ diff --git a/docs/accounts/_img/sign-up-visual-studio-team-services/create-team-services-account-directory.png b/docs/accounts/_img/sign-up-visual-studio-team-services/create-team-services-account-directory.png new file mode 100644 index 00000000000..78d1569c22e Binary files /dev/null and b/docs/accounts/_img/sign-up-visual-studio-team-services/create-team-services-account-directory.png differ diff --git a/docs/accounts/_img/sign-up-visual-studio-team-services/create-team-services-account.png b/docs/accounts/_img/sign-up-visual-studio-team-services/create-team-services-account.png new file mode 100644 index 00000000000..78d1569c22e Binary files /dev/null and b/docs/accounts/_img/sign-up-visual-studio-team-services/create-team-services-account.png differ diff --git a/docs/accounts/_img/sign-up-visual-studio-team-services/my-info-account-list.png b/docs/accounts/_img/sign-up-visual-studio-team-services/my-info-account-list.png new file mode 100644 index 00000000000..855c407136f Binary files /dev/null and b/docs/accounts/_img/sign-up-visual-studio-team-services/my-info-account-list.png differ diff --git a/docs/accounts/_img/sign-up-visual-studio-team-services/my-info-new-account.png b/docs/accounts/_img/sign-up-visual-studio-team-services/my-info-new-account.png new file mode 100644 index 00000000000..10b2c8d04f3 Binary files /dev/null and b/docs/accounts/_img/sign-up-visual-studio-team-services/my-info-new-account.png differ diff --git a/docs/accounts/_img/try-additional-features/check-extension-trial-updated-ui.png b/docs/accounts/_img/try-additional-features/check-extension-trial-updated-ui.png new file mode 100644 index 00000000000..e122b7d68cf Binary files /dev/null and b/docs/accounts/_img/try-additional-features/check-extension-trial-updated-ui.png differ diff --git a/docs/accounts/_img/try-additional-features/extension-installed.png b/docs/accounts/_img/try-additional-features/extension-installed.png new file mode 100644 index 00000000000..c0e3f3230ad Binary files /dev/null and b/docs/accounts/_img/try-additional-features/extension-installed.png differ diff --git a/docs/accounts/_img/try-additional-features/extension-trial-in-account-updated-ui.png b/docs/accounts/_img/try-additional-features/extension-trial-in-account-updated-ui.png new file mode 100644 index 00000000000..1685ce6d022 Binary files /dev/null and b/docs/accounts/_img/try-additional-features/extension-trial-in-account-updated-ui.png differ diff --git a/docs/accounts/_img/try-additional-features/mp-start-test-manager-trial.png b/docs/accounts/_img/try-additional-features/mp-start-test-manager-trial.png new file mode 100644 index 00000000000..d13ffe4e563 Binary files /dev/null and b/docs/accounts/_img/try-additional-features/mp-start-test-manager-trial.png differ diff --git a/docs/accounts/_img/try-additional-features/select-account.png b/docs/accounts/_img/try-additional-features/select-account.png new file mode 100644 index 00000000000..8dccad50dcf Binary files /dev/null and b/docs/accounts/_img/try-additional-features/select-account.png differ diff --git a/docs/accounts/_img/user-hub/acct-level-users.png b/docs/accounts/_img/user-hub/acct-level-users.png new file mode 100644 index 00000000000..c03e7522271 Binary files /dev/null and b/docs/accounts/_img/user-hub/acct-level-users.png differ diff --git a/docs/accounts/_img/user-hub/add-users-button.png b/docs/accounts/_img/user-hub/add-users-button.png new file mode 100644 index 00000000000..645ec795525 Binary files /dev/null and b/docs/accounts/_img/user-hub/add-users-button.png differ diff --git a/docs/accounts/_img/user-hub/add-users.png b/docs/accounts/_img/user-hub/add-users.png new file mode 100644 index 00000000000..35725641ecb Binary files /dev/null and b/docs/accounts/_img/user-hub/add-users.png differ diff --git a/docs/accounts/_img/user-hub/preview-features.png b/docs/accounts/_img/user-hub/preview-features.png new file mode 100644 index 00000000000..fbb381b1537 Binary files /dev/null and b/docs/accounts/_img/user-hub/preview-features.png differ diff --git a/docs/accounts/_img/user-hub/user-details.png b/docs/accounts/_img/user-hub/user-details.png new file mode 100644 index 00000000000..af2a2e0e110 Binary files /dev/null and b/docs/accounts/_img/user-hub/user-details.png differ diff --git a/docs/accounts/access-with-azure-ad.md b/docs/accounts/access-with-azure-ad.md new file mode 100644 index 00000000000..47b0b0f1bf5 --- /dev/null +++ b/docs/accounts/access-with-azure-ad.md @@ -0,0 +1,112 @@ +--- +title: VSTS - Access with Azure AD | Visual Studio Team Services +description: Azure Active Directory (Azure AD) - Control access to Visual Studio Team Services (VSTS, Visual Studio Online, VSO) +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: c9aecaaf-9dfb-4877-84b4-60da253e3dc2 +ms.manager: douge +ms.author: estfan +ms.date: 08/01/2017 +--- + +# Access VSTS with Azure Active Directory (Azure AD) + +**VSTS** + +Want to authenticate users and control access to +your VSTS account the same way that you +can with Microsoft services like Office 365 and Azure? +If your VSTS account was created with a Microsoft account, +you can connect your VSTS account to your +organization's directory (tenant) in +[Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/documentation/articles/active-directory-whatis/). +You can then sign in to VSTS with the same username +and password that you use with these Microsoft services. +You can also enforce policies for accessing +your team's critical resources and key assets. + +> To use existing on-premises identities with VSTS, +> you can integrate on-premises directories with Azure AD by using +> [Azure AD Connect](https://azure.microsoft.com/en-us/documentation/articles/active-directory-aadconnect/). +> To switch your VSTS account to another directory, +> learn [how to change your directory in Azure AD](change-azure-active-directory-vsts-account.md). + +## How does Azure AD control access to VSTS? + +Your VSTS account authenticates users +through your organization's directory so that +only users who are members in that directory can +get access to your VSTS account. +When users are removed from your directory, +for example, because they've moved elsewhere, +they can't access your account anymore. +Only specific [Azure AD administrators](https://azure.microsoft.com/en-us/documentation/articles/active-directory-assign-admin-roles/) +can manage users in your directory, +so they control who can get access to your VSTS account. + +Without Azure AD, you're solely responsible for +controlling VSTS account access. +And all users must sign in with Microsoft accounts. + + +## What do I need to set up an existing VSTS with Azure AD? + +You'll need: + +* [Ownership of the VSTS account](faq-add-delete-users.md#find-owner) that you want to connect to Azure AD. + +* A ["full" Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/), +such as a ["Pay-As-You-Go" subscription](https://azure.microsoft.com/en-us/offers/ms-azr-0003p/), +associated with your organization's Azure AD and at +least Co-administrator permissions for your subscription. +You'll need both to make your directory appear in the Azure portal, +so that you can link your subscription and connect your +Azure AD to your VSTS account. Learn about +[Azure subscription Co-administrator permissions](../billing/add-backup-billing-managers.md). + + [Want to use Office 365 Azure AD with VSTS?](faq-azure-access.md#o365aad) + +* (Only needed if you need to add users to Azure AD) Global administrator permissions for your directory so +you can add current VSTS users to that directory. +Otherwise, work with your directory's global administrator to add users. +Learn more about [Azure AD administrators](https://azure.microsoft.com/en-us/documentation/articles/active-directory-assign-admin-roles/). + + To check your permissions, [Sign in to the Azure classic portal](https://manage.windowsazure.com/) with your + work or school account. Go to your target directory. + + ![Check that you're a global administrator](_img/manage-work-access/azureadadmin.png) + +* You must add your Microsoft account to your Azure AD. Although directory membership isn't required to +connect your VSTS account to Azure AD, this will make sure that you can sign in and +access your VSTS account after connecting to Azure AD. Otherwise, your Microsoft account will not have access to +your VSTS account. + +## What happens to current users? + +Your work in VSTS is associated with your sign-in address. +After your VSTS account is connected to your directory, +users will continue working seamlessly if their +sign-in addresses appear in the connected directory. +If they don't, you'll have to [add those users to your directory](add-users-to-aad.md#SetUpCurrentUsers). +Your organization might have policies about adding users to the directory, +so find out more first. + +What if we can't use the same sign-in addresses? You'll have to add these users to the directory with new work or school accounts, +or if they have existing work or school accounts, they can use those instead. Their work in VSTS +won't be lost and will stay with their current VSTS sign-in addresses. You'll have to add them as new +users to VSTS, reassign access levels, and readd them to any team projects. They can migrate work that they want to keep, +except for their work history. Learn [how to manage VSTS account users](add-account-users-assign-access-levels.md). + +What happens to tools that use my credentials, like alternate credentials? Alternate credentials won't work anymore for +tools that run outside a web browser, like the Git command line tool. You'll have +to [set up your credentials](http://support.microsoft.com/kb/2991274/en-us) again for the VSTS account that you connected. + + +## Manage organization access with Azure AD + +- [Add VSTS users to your Azure AD](add-users-to-aad.md) +- [Connect VSTS account to Azure AD](connect-account-to-aad.md) +- [Disconnect VSTS account from Azure AD](disconnect-account-from-aad.md) +- [Delete users from VSTS connected to Azure AD](delete-users-from-services-aad.md) +- diff --git a/docs/accounts/account-management.md b/docs/accounts/account-management.md new file mode 100644 index 00000000000..df0f6014f77 --- /dev/null +++ b/docs/accounts/account-management.md @@ -0,0 +1,81 @@ +--- +title: Create and manage your VSTS account +description: Develop apps and collaborate with other code developers using the VSTS integrated cloud service +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: fa1dbe39-08b1-4eba-886a-33c1aa1e6a83 +ms.topic: get-started-article +toc: show +ms.manager: douge +ms.author: elbatk +ms.date: 04/04/2017 +--- + + +# About account management +VSTS + +With Visual Studio Team Services (VSTS), you can collaborate with others to develop applications using our cloud service. + +## Create your account + +To get started, you'll want to [create your VSTS account](create-account-msa-or-work-student.md) and then invite others to collaborate within your account. + +You'll choose Git or Team Foundation as your version control, +so that VSTS can create your team project for code and other assets, +like builds, tests, and work items. If you're starting with Visual Studio +as your development environment, you can create your VSTS account when you +[set up Visual Studio](set-up-vs.md). + +Your VSTS account includes 5 free users +with Basic access plus unlimited Visual Studio +subscribers and Stakeholders at no extra charge. +Your account also includes free monthly amounts +of additional services, like build and deployment, +and cloud-based load testing. + +## Connect to your account +After VSTS creates your account, +[connect to your account](../connect/connect-team-projects.md) +with tools like Xcode, Eclipse, or Visual Studio, +and add code to your team project. + +Some clients, like Xcode, Git, and NuGet, require basic credentials +(a username and password) for you to access VSTS. +To connect these clients to VSTS, +create personal access tokens to authenticate your identity. +Use a credential manager to create, store, and secure your tokens, +so you don't have to reenter them every time you push. +Or if you don't want to use a credential manager, you can +[create personal access tokens manually](use-personal-access-tokens-to-authenticate.md). + +## Add users and assign access +To share work with others, +[add users and assign access](add-account-users-assign-access-levels.md). +That way, you control the access that each user gets. +Or [add users to your team project](add-team-members-vs.md), +and let VSTS assign the next available access to them. + +## Try extensions for free +Help your team do more with VSTS extensions. +For example, VSTS account owners can +try the Test Manager extension free for 90 days. +During the trial, all users with Basic access can +[try Test Manager for free](../billing/try-additional-features-vs.md). + +## Set up billing +If you need more than free users and amounts +of services included with your account, +[set up billing for your account](../billing/set-up-billing-for-your-account-vs.md). +You can then pay for more users with Basic access, +pay for more services, and purchase extensions for your account. + +## Access with Azure AD +VSTS works with Azure Active Directory (Azure AD), +so that you can control access the same way that you do +with Microsoft services like Office 365 and Microsoft Azure. +If your organization uses a directory (tenant) managed by Azure AD, +your VSTS account can also +[use your directory to authenticate access](access-with-azure-ad.md). +Or [change your Azure AD](change-azure-active-directory-vsts-account.md), +if you're already connected to an existing directory. diff --git a/docs/accounts/account-preferences.md b/docs/accounts/account-preferences.md new file mode 100644 index 00000000000..af089396cc3 --- /dev/null +++ b/docs/accounts/account-preferences.md @@ -0,0 +1,55 @@ +--- +title: View and change account preferences in VSTS & TFS +description: Change picture, set preferred email, or other account preferences from your account profile in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-setup +ms.prod: vs-devops-alm +ms.assetid: 30821EA7-F20F-4A15-B4E3-A023C39FFF72 +ms.manager: douge +ms.author: kaelli +ms.date: 08/24/2017 +--- + +#Set your account preferences + +**VSTS | TFS 2015** + +From your profile page, you can change your picture or other account preferences. Specifically, you can set the following: + +> [!div class="mx-tdBreakAll"]   +> |Profile | Security  | Other |   +> |-------------|----------|---------| +> |- Your picture
- Your display name
- Your preferred email
- Locale settings |- [Personal access tokens](use-personal-access-tokens-to-authenticate.md)
- [Alternate authentication credentials](../git/auth-overview.md#alternate-credentials)
- [OAuth authorizations](../integrate/get-started/authentication/oauth.md)
- [SSH public keys](../git/use-ssh-keys-to-authenticate.md) |- [Manage personal notifications](../notifications/manage-personal-notifications.md)
- [Enable preview features](../connect/work-web-portal.md#admin-context) | + +Locale settings include language, date and time pattern, time zone, and user interface theme. + +## Change profile settings (VSTS) + +To change your your account information, open your account menu. + +![VSTS, My Profile link on Account menu](_img/account-prefs/open-profile-team-services.png) + +From the Profile/Information page, click Edit to change the picture, display name, or preferred email. Open the Preferences page to change a locale preference. + + +VSTS, Profile page + + +## Change profile settings (TFS) + +![TFS, My Profile link on Account menu](_img/account-prefs/open-profile.png) + +Click edit to change a setting. Choose the Locale tab to change a locale preference. + +![TFS, Set preferences](_img/account-prefs/account-prefs-tfs-user-profile.png) + +## Try this next + +> [!div class="nextstepaction"] +> [Work effectively from your account hub](../connect/account-home-pages.md) +> or +> [Set favorites](../collaborate/set-favorites.md) + + + \ No newline at end of file diff --git a/docs/accounts/add-account-users-assign-access-levels.md b/docs/accounts/add-account-users-assign-access-levels.md new file mode 100644 index 00000000000..456ad97eb70 --- /dev/null +++ b/docs/accounts/add-account-users-assign-access-levels.md @@ -0,0 +1,203 @@ +--- +title: Add user accounts and assign access level in VSTS +description: Add users and assign access levels in Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 90f45ebb-88e2-46bf-b4cf-083281923c77 +ms.manager: douge +ms.author: estfan +ms.date: 1/13/2017 +--- + +# Manage users and access in Visual Studio Team Services + +**VSTS** + +Add users to your VSTS account so you can specify +the level of features that they can use: Basic or Stakeholder. +These users can join your VSTS account for free: + +* 5 users who get [Basic features](https://www.visualstudio.com/team-services/compare-features/), +like version control, tools for Agile, Java, build, release management, and more +* Unlimited users who get [Stakeholder features](https://www.visualstudio.com/team-services/compare-features/) +like working with your backlog, work items, and queries +* Unlimited [Visual Studio subscribers](https://www.visualstudio.com/team-services/compare-features/) +who also get Basic features, and in some cases, additional features with specific extensions, like +[Test Manager](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web) + +## Need more users with Basic features or Visual Studio subscriptions? + +When your account stays within the free limits, +you don't have to pay for users to join your account. +You only have to pay if you have more than 5 users +who need Basic features, and they don't have Visual Studio subscriptions. +You can [pay for additional users in the Visual Studio Marketplace](../billing/buy-basic-access-add-users.md), +return to your VSTS account, add these users, and assign them Basic access. +This lets you pay monthly for their access, and you can cancel anytime. + +Visual Studio subscriptions give you flexible ways to access VSTS +and to license the Visual Studio IDE and other Microsoft software for dev and test. +Learn [how to buy Visual Studio subscriptions](../billing/vs-subscriptions/buy-vs-subscriptions.md) +from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/subscriptions). + +Or learn [how to manage purchased Visual Studio subscriptions](../billing/vs-subscriptions/buy-vs-subscriptions.md#manage-subscriptions) +in the [Visual Studio Subscriptions Administration portal](https://manage.visualstudio.com/_apis/Home/redirect?RedirectSource=Commerce). +Make sure to sign in with the ID that you used to purchase your subscriptions. + +> You can add people to team projects, +> rather than to your account. VSTS automatically assigns them +> [Basic features](https://www.visualstudio.com/team-services/compare-features/), +> if your account has seats available, +> or [Stakeholder features](https://www.visualstudio.com/team-services/compare-features/), +> if not. Learn [how to add members to team projects](add-team-members-vs.md). + +## How does access differ from permissions? + +Access levels control which features are available to users, +while permissions control their access to account resources. +[Can't access some features?](faq-add-delete-users.md#feature-access) +For TFS, learn [how to change access levels](../security/change-access-levels.md) +or [buy more access to TFS or the Test hub](../billing/buy-access-tfs-test-hub.md). + +To control access to account resources instead, +learn [how to add permissions](add-users.md) or +[restrict permissions](restrict-access-tfs.md). +To change how many users can access +paid extensions in your VSTS account, +learn [how to change paid extension users](../billing/change-number-paid-extension-users.md). + + +## Required permissions + +You'll need [VSTS project collection administrator or account owner permissions](faq-add-delete-users.md#find-owner). + +## Add users to your VSTS account + +0. Sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```). + + [Why am I asked to choose between my "work or school account" and my "personal account"?](faq-add-delete-users.md#ChooseOrgAcctMSAcct) + +0. Go to **Users** where you can view and assign access levels for all account users. + + Why can't I access the Users hub? You must have [VSTS project collection administrator permissions or account owner permissions](faq-add-delete-users.md#find-owner) to access the Users hub. + + > [!NOTE] + > If have an Azure Active Directory (Azure AD) backed VSTS account, and you need to add users who are + > external to your Azure AD, first + > [add those users as foreign principals](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-create-users#add-a-user) to + > your Azure AD. Be sure on the **Tell us about this user page**, under **Type of user**, to choose **User with an + > existing Microsoft account**. After completing those steps, follow the steps below to add the foreign Azure AD + > user to VSTS. + + ![Go to Users hub](_img/_shared/users-hub-updated.png) + + ![Your account access appears in the Users hub](_img/assign-licenses/vso-usershub-owneronly.png) + +0. Add the user's email address. +Select their access level, based on the features they need. + +

Which email addresses can I add? ▼

+
+

You must add email addresses for + ["personal" Microsoft accounts](https://www.microsoft.com/account) + unless your VSTS account + authenticates users and control account access through + [Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/documentation/articles/active-directory-whatis/). + [Learn if your VSTS account uses your organization's directory](faq-add-delete-users.md#ConnectedDirectory). + If your users don't have Microsoft accounts, + have them [sign up](https://signup.live.com/). + +

If your VSTS account is connected to your organization's directory, + all users must be members in that directory. If they're not members, + have a directory administrator add them to that directory. + You can then find them in that directory when you add them to your + account by searching for their email addresses or display names. +

+ ![Add users from a directory when connected to your account](_img/assign-licenses/users-hub-add-from-directory.png) +

+

+ +

Can I get more info about access levels? ▼

+
+

You can add these users for free: +

+
+ + For example, to add another Visual Studio subscriber: + + ![Add Visual Studio subscribers](_img/assign-licenses/vso-usershub-addmsdnusers.png) + + VSTS automatically recognizes and validates Visual Studio subscribers, + and assigns access levels that match their subscriptions, no matter which access levels you give them. + + ![VSTS validates Visual Studio subscribers when they sign in](_img/assign-licenses/vso-usershub-licensevalidated.png) + + [Why won't my subscription validate when I sign in?](faq-add-delete-users.md#ValidateMSDNSubscription) + + And here's what a team might look like after + adding Visual Studio subscribers, some free users who get Basic features, + a Stakeholder, and paying for more users with get Basic features: + + ![Added users and assigned access](_img/assign-licenses/vso-usershub-boughtlicenses-stake.png) + + Your user summary shows only the number of users with access levels assigned to them. + +0. To finish inviting and adding a user to your account, +click **Send Invitation**. + + Each user gets an invitation email that + has a link to your VSTS account. + + > To sign in to your account, they can use the invitation link, + > or go directly to your account at ```https://{youraccount}.visualstudio.com```. + > + > First-time users might be asked for extra details when they sign in to personalize their experience. + +0. After adding users to your account, +you can [add them to team projects](add-team-members-vs.md). + + [Why don't users appear or disappear promptly in VSTS after I add or delete them in the Users hub?](faq-add-delete-users.md#users-delay) + + +## Next + +* Add code to Git or Team Foundation version control + + * Git with [Eclipse](https://java.visualstudio.com/Docs/tools/eclipse), + [Xcode](../git/share-your-code-in-git-xcode.md), + [Visual Studio](../connect/connect-team-projects.md), + [Android Studio](http://java.visualstudio.com/Docs/tools/androidstudio), + [IntelliJ](http://java.visualstudio.com/Docs/tools/intelliJ), + or [Visual Studio Code](https://code.visualstudio.com/docs/editor/versioncontrol) + + * TFVC using [Eclipse](https://java.visualstudio.com/Docs/tools/eclipse), + [Xcode](../tfvc/share-your-code-in-tfvc-xcode.md), + [Visual Studio](../connect/connect-team-projects.md), or + [Visual Studio Code](https://code.visualstudio.com/docs/editor/versioncontrol) + +* [Create a backlog](../work/backlogs/create-your-backlog.md) +to plan, organize, and track your work, +[manage your process](../work/process/manage-process.md), +or [customize your process](../work/process/customize-process.md) + +* [Grow and scale your teams](../work/scale/multiple-teams.md) + + diff --git a/docs/accounts/add-account-users-from-user-hub.md b/docs/accounts/add-account-users-from-user-hub.md new file mode 100644 index 00000000000..5b10ea1f54f --- /dev/null +++ b/docs/accounts/add-account-users-from-user-hub.md @@ -0,0 +1,89 @@ +--- +title: Add account users from the user hub for Visual Studio Team Services +description: Add users and assign access levels in user hub Visual Studio Team Services +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 19ac647f-04c1-4ddd-9953-b3ecfa0f1457 +ms.manager: douge +ms.author: estfan +ms.date: 4/17/2017 +--- + +# Add account users from the user hub for Visual Studio Team Services + +**VSTS Streamlined User Management Preview** + +If you are a Project Collection Administrator, you can now navigate to the new Users page by turning on "Streamlined User Management" under "Preview features". + +![Choose Preview features from your user menu in the upper right corner](_img/user-hub/preview-features.png) + +Add users to your VSTS account and specify the level of features they can use, such as Basic or Stakeholder. +These kinds of users can join your VSTS account for free: + +* 5 users who get [Basic features](https://www.visualstudio.com/team-services/compare-features/), +such as version control, tools for Agile, Java, build, release management, and more +* Unlimited users who get [Stakeholder features](https://www.visualstudio.com/team-services/compare-features/), +such as working with your backlog, work items, and queries +* Unlimited [Visual Studio subscribers](https://www.visualstudio.com/team-services/compare-features/) +who also get Basic features, and in some cases, additional features with specific extensions, such as +[Test Manager](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web) + +[Need more users with Basic features or Visual Studio subscriptions?](add-basic-or-vs-subscription-users.md) + + +> You can add people to team projects, +> rather than to your account. VSTS automatically assigns them +> [Basic features](https://www.visualstudio.com/team-services/compare-features/), +> if your account has seats available, +> or [Stakeholder features](https://www.visualstudio.com/team-services/compare-features/), +> if not. Learn [how to add members to team projects](add-team-members-vs.md). +> +> When people don't need access to your VSTS account anymore, [delete them](delete-account-users-users-hub.md) from your account. + + +## How does *access* differ from *permissions*? + +Access levels control which features are available to users, while permissions control their access to account resources. +[Can't access some features?](faq-add-delete-users.md#feature-access) +For TFS, learn [how to change access levels](../security/change-access-levels.md) +or [buy more access to TFS or the Test hub](../billing/buy-access-tfs-test-hub.md). + +To control access to account resources instead, learn [how to add permissions](add-users.md) or +[restrict permissions](restrict-access-tfs.md). To change how many users can access paid extensions in your +VSTS account, +learn [how to change paid extension users](../billing/change-number-paid-extension-users.md). + + +## Required Permissions + +You'll need [VSTS project collection administrator or account owner permissions](faq-add-delete-users.md#find-owner). + +## Add users to your VSTS account + +Administrators can now add users to an account, grant access to appropriate tooling extensions and service access level, +and add users to groups all in one view. You can add up to 50 users at once. You can add more than 50 users by repeatedly +using this Users view. When you add users, each receives a notification email with a +link to the account page. + + > [!NOTE] + > If have an Azure Active Directory (Azure AD) backed VSTS account, and you need to add users who are + > external to your Azure AD, first + > [add those users as foreign principals](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-create-users#add-a-user) to + > your Azure AD. Be sure on the **Tell us about this user page**, under **Type of user**, to choose **User with an + > existing Microsoft account**. After completing those steps, follow the steps below to add the foreign Azure AD + > user to VSTS. + +![Click the Add Users button](_img/user-hub/add-users-button.png) + +![Add users by inviting them to the account](_img/user-hub/add-users.png) + + +[Manage users in table view](manage-users-table-view.md) + + + +## Troubleshooting + +[Troubleshooting](faq-add-delete-users.md) + diff --git a/docs/accounts/add-administrator-project-collection.md b/docs/accounts/add-administrator-project-collection.md new file mode 100644 index 00000000000..97ce5c2b9d1 --- /dev/null +++ b/docs/accounts/add-administrator-project-collection.md @@ -0,0 +1,56 @@ +--- +title: Add administrators to VSTS project collections +description: Add administrators to VSTS project collections +ms.assetid: d8b3e709-b868-409b-98d7-03ea6d1cb77b +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.manager: douge +ms.author: estfan +ms.date: 03/29/2017 +--- + +# Add administrators to project collections + +**VSTS** + +In TFS and VSTS, each team project collection is its own grouping +of projects that can share reports, work items, and other items, all stored in a single database. +Project collection administrators maintain the collection and administer permissions and security +for other roles at the collection level. + +1. Open the web portal and switch to administration mode by choosing the gear icon ![Settings icon](_img/admin-gear-icon.png). + +2. Navigate to security at the collection level, and add a member to **Project Collection Administrators**. + + ![Navigate by clicking or tabbing](_img/add-administrator-tfs/add-user-group.png) + +### SharePoint + +If your deployment is integrated with SharePoint Products, +add team project collection administrators to the site collection administrators group in SharePoint Products. + +1. Open SharePoint Central Administration. + +2. Grant permissions that are appropriate for this user at the farm or the Web application level, depending on your security needs. + + For optimum interoperability, consider adding users of the **Project Collection Administrators** group to the **Site Collection Administrators** group in SharePoint Products. + + ![Follow guidance for your version of SharePoint](_img/add-administrator-tfs/people-and-groups-collection.png) + +### Reporting Services + +If your deployment is integrated with Reporting Services, +add team project collection administrators to the Team Foundation Content Manager group +in SQL Server Reporting Services. + +1. Open Internet Explorer running as an administrator. + +2. In the Address bar, specify the following URL, where *ReportServer* is the name of the server that is running Reporting Services: **http://***ReportServer***/Reports/Pages/Folder.aspx** + + >**Important:** + > If you are using a named instance, you must include its name in the path of the reports. You use the following syntax, where *ReportServer* is the name of the report server for Team Foundation and *InstanceName* is the name of the instance of SQL Server: **http://***ReportServer***/Reports_***InstanceName***/Pages/Folder.aspx** + +3. On the **Home** page, choose **Folder Settings**, and add the user by granting them the Team Foundation Content Manager role as a new role assignment. + + ![Click and choose, or tab, spacebar, and enter](_img/add-administrator-tfs/rs-role-assignment.png) + diff --git a/docs/accounts/add-administrator-team-project.md b/docs/accounts/add-administrator-team-project.md new file mode 100644 index 00000000000..cb75fb8c06b --- /dev/null +++ b/docs/accounts/add-administrator-team-project.md @@ -0,0 +1,23 @@ +--- +title: Add administrators to VSTS team projects +description: Add administrators to VSTS team projects +ms.assetid: 3f11f0b6-42bd-48c7-b5f9-0946240392cf +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.manager: douge +ms.author: estfan +ms.date: 03/29/2017 +--- + +# Add administrators to VSTS team projects + +**VSTS** + +0. From the team page, click the ![Settings icon](_img/admin-gear-icon.png) to go to the team administraton page. + +0. Add the user to the **Project Administrators** group. + +0. If you use SharePoint with TFS, go to the team project portal and choose **Share** to give the user **Full Control**. + + ![Choose the SharePoint group and add users](_img/add-administrator-tfs/invite-administrators.png) + diff --git a/docs/accounts/add-basic-or-vs-subscription-users.md b/docs/accounts/add-basic-or-vs-subscription-users.md new file mode 100644 index 00000000000..ef4c73878de --- /dev/null +++ b/docs/accounts/add-basic-or-vs-subscription-users.md @@ -0,0 +1,37 @@ +--- +title: Add more VSTS users with Basic features or Visual Studio subscriptions +description: Add more VSTS users with Basic features or Visual Studio subscriptions +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: f36c2fbd-7683-4620-9636-97144c7779f2 +ms.manager: douge +ms.author: estfan +ms.date: 4/17/2017 +--- + +# Add more users with Basic features or Visual Studio subscriptions + +**VSTS Streamlined User Management Preview** + + +If you are a Project Collection Administrator, you can now navigate to the new Users page by turning on "Streamlined User Management" under "Preview features". + +![Choose Preview features from your user menu in the upper right corner](_img/user-hub/preview-features.png) + + +When your account stays within the free limits, you don't have to pay for users to join your account. +You only have to pay if you have more than 5 users who need Basic features, and they don't have Visual Studio subscriptions. +You can [pay for additional users in the Visual Studio Marketplace](../billing/buy-basic-access-add-users.md), +return to your VSTS account, add these users, and assign them Basic access. +You pay monthly for their access and cancel the access anytime. + +Visual Studio subscriptions give you flexible ways to access VSTS +and to license the Visual Studio IDE and other Microsoft software for dev and test. +Learn [how to buy Visual Studio subscriptions](../billing/vs-subscriptions/buy-vs-subscriptions.md) +from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/subscriptions). + +Learn [how to manage purchased Visual Studio subscriptions](../billing/vs-subscriptions/buy-vs-subscriptions.md#manage-subscriptions) +in the [Visual Studio Subscriptions Administration portal](https://manage.visualstudio.com/_apis/Home/redirect?RedirectSource=Commerce). +Make sure to sign in with the ID that you used to purchase your subscriptions. + diff --git a/docs/accounts/add-team-members-vs.md b/docs/accounts/add-team-members-vs.md new file mode 100644 index 00000000000..17bb4d14147 --- /dev/null +++ b/docs/accounts/add-team-members-vs.md @@ -0,0 +1,116 @@ +--- +title: VSTS - Add team project members | Visual Studio Team Services +description: Add members to team projects in Visual Studio Team Services (Visual Studio Online, VSTS, VSO) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 1cd6673e-f83a-403b-884b-b69b8e3f5c46 +ms.manager: douge +ms.author: estfan +ms.date: 1/11/2017 +--- + +# Add team project members in Visual Studio Team Services + +**VSTS** + +Add members to your team project in Visual Studio Team Services, +so you can share code and work with your team, track their status, +coordinate dev, build, test, and release activities, and more. +For Team Foundation Server, learn [how to add team project members here](add-users.md). + +When you add members to team projects, +VSTS will automatically assign them +[Basic access](https://www.visualstudio.com/team-services/compare-features/), +if your account has seats available, +or [Stakeholder access](https://www.visualstudio.com/team-services/compare-features/), +if not. When a [Visual Studio subscriber](https://www.visualstudio.com/products/subscriber-benefits-vs) +signs in, they'll get Basic access, and in some cases, additional features with specific extensions, +like [Test Manager](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web). + +> To manually assign access levels, +> [add members to your account instead](add-account-users-assign-access-levels.md). +> To control access to account resources, +> [add permissions](add-users.md) or [restrict permissions](restrict-access-tfs.md) instead. + +## Before you get started + +If you don't have a team project yet, +[create your team project first](../connect/connect-team-projects.md). +To add members to team projects, you'll need +[project administrator](add-administrator-team-project.md), +[project collection administrator, or account owner](faq-add-team-members.md#find-pca-owner) permissions. + +## Add members to your team project + +0. Sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```) +as project administrator, project collection administrator, or account owner. + + [Why am I asked to choose between my "work or school account" and my "personal account"?](faq-add-team-members.md#ChooseOrgAcctMSAcct) + +0. On the account landing page (which is your projects page, ```https://{youraccount}.visualstudio.com/_projects```), +find and select your team project. + + ![On your Projects page, select your team project](_img/add-team-members/select-team-project-updated-ui.png) + +0. Invite members to your new team project... + + ![On your team project home page, click Invite a friend](_img/add-team-members/invite-team.png) + + Or invite them to an existing team project. + + ![On your team project page, click Manage team members](_img/add-team-members/invite-team-existing.png) + + Adding members from the project page adds them to the default team for the project. To add a member to a different team, choose + the gear cog and **Security** from the menu. Then find the team on the left pane of the security page and select it. In + the right pane, choose the **Members** view (next to **Permissions**), and then you will see a green plus symbol and + the **Add...** button. + + +0. Add your team members. + + ![Click Add](_img/add-team-members/add-user.png) + +0. Enter the email addresses for new users. +Otherwise, enter the display names for existing users. +Add them one at a time or all at the same time. + + Which email addresses can I add? + * If your VSTS account is Azure Active Directory backed, then you can only add email addresses that are + internal to the tenant. + + * You must add email addresses for users who have ["personal" Microsoft accounts](https://www.microsoft.com/account) + unless your VSTS account [uses your organization's directory](faq-add-team-members.md#ConnectedDirectory) + to authenticate users and control account access through + [Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/documentation/articles/active-directory-whatis/). + If new users don't have Microsoft accounts, have them [sign up](https://signup.live.com/). + + * If your VSTS account is connected to your organization's directory, + all users must be directory members and sign in to VSTS with "work or school accounts" that are managed by + your organization's directory. If they're not members, have a directory administrator add them to the directory. + That way, you can find them in this directory when you add users by searching for their email addresses or display names. + + ![Add members' sign-in addresses or display names](_img/add-team-members/add-user2.png) + + ![Add members' sign-in addresses or display names](_img/add-team-members/add-user2.png) + + ![Members are now added to your team project](_img/add-team-members/team-project-members.png) + + After you add members to your team project, + each member gets an invitation email that + links to your VSTS account. + They can use this link to sign in to your account + and find your team project. + First-time members might be asked for extra details + when they sign in to personalize their experience. + + What if new team members don't receive or lose the invitation email? You can just send a link to the project page to + the new team members, which is what the email contains. + + [Why can't I add any more members?](faq-add-team-members.md#cant-add-users) + +#### Next + +* [Connect to VSTS](../connect/connect-team-projects.md) to share code from Xcode, Eclipse, or Visual Studio +* [Create a backlog](../work/backlogs/create-your-backlog.md) to plan, organize, and track your work. +* [Grow and scale your teams](../work/scale/multiple-teams.md) diff --git a/docs/accounts/add-users-to-aad.md b/docs/accounts/add-users-to-aad.md new file mode 100644 index 00000000000..77061332dbd --- /dev/null +++ b/docs/accounts/add-users-to-aad.md @@ -0,0 +1,65 @@ +--- +title: Add VSTS account users to your Azure Active Directory +description: Add VSTS account users to your Azure Active Directory +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 22ed079f-0321-4c8b-ab06-a289450fb557 +ms.manager: douge +ms.author: estfan +ms.date: 1/19/2017 +--- + + +# Add VSTS account users to your Azure Active Directory + +**VSTS** + +If your VSTS account was created with a Microsoft account, +you can connect your VSTS account to your +organization's directory (tenant) in +[Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/documentation/articles/active-directory-whatis/). +You can then sign in to VSTS with the same username +and password that you use with these Microsoft services. +You can also enforce policies for accessing +your team's critical resources and key assets. + +For more information, see the [conceptual overview](access-with-azure-ad.md) for using Azure AD with VSTS. + +If your users do not already exist in Azure AD: + +0. Sign in to the [Azure classic portal](https://manage.windowsazure.com/) +or the [Azure portal](https://portal.azure.com) +as global administrator for your organization's directory. +See these topics for how to: + + * [Add users in the Azure classic portal](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-create-users). + * [Add users in the Azure portal](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-users-create-azure-portal). + + [Why am I asked to choose between a "work or school account" and a "personal account"?](faq-azure-access.md#ChooseOrgAcctMSAcct) + +0. Add the sign-in addresses for all your VSTS account users to your directory, +including yourself as the VSTS account owner, if not in the directory already. + + What does an example directory look like? + + Suppose Jamal is an Azure AD global administrator at Fabrikam and is in the Fabrikam directory with his + work account (jamalhartnett@fabrikam.com). He's also the VSTS account owner and a user with his Microsoft + account (jamalhartnett@live.com). He wants to keep his work history, so he adds his Microsoft account to the + Fabrikam directory. If Jamal doesn't need his work history, he can use his work account with VSTS. But + free up the access used by his Microsoft account, he must change the VSTS account owner to his work account. + + Nicole, another user, has a work account (nicolezamora@fabrikam.com) that shares the same sign-in address with her + Microsoft account, so she will continue to work seamlessly with the same sign-in address. + + Here's what the Fabrikam directory might look like in the Azure classic portal after Jamal adds users from his + VSTS account. + + ![Directory after adding users](_img/manage-work-access/azureaddmembers3.png) + + [More questions about setting up users?](faq-azure-access.md#faq-users) + +0. After adding your account users to your directory, +connect your VSTS account to your directory. + + +[Troubleshooting Q&A](faq-azure-access.md) diff --git a/docs/accounts/add-users.md b/docs/accounts/add-users.md new file mode 100644 index 00000000000..abbff5ecc19 --- /dev/null +++ b/docs/accounts/add-users.md @@ -0,0 +1,117 @@ +--- +title: Add users to a team project and groups +description: Add users to a team project and groups +ms.assetid: 3cfefdd2-b161-4e04-8dc0-e2deeac50262 +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2017 +ms.topic: get-started-article +--- + +# Add users to a team project + +**VSTS** | **TFS 2015** | **TFS 2013** + +As roles and responsibilities change, +you might need to change the membership or permission levels for individual members of a team project. +This is particularly true if your project depends on resources +that use SQL Server Reporting Services or SharePoint Products +because permissions for those resources are managed separately. + +If all you want to do is add a user to an existing team in TFS, +and you don't have to worry about specific permissions for other resources, +skip this topic and [simply add them to a team](../work/scale/multiple-teams.md). + +To view permissions for yourself or another user, see [View permissions](../security/view-permissions.md). + + +## Add users to a team project + +1. Open the web portal and navigate to the project where you want to add users or groups. + + ![Select team project from TFS home page](_img/add-users-team-project/overview.png) + + > [!TIP] + > Managing users is much easier [using groups](../security/about-permissions.md), not individual users. + + Choose the gear icon ![Settings icon](_img/admin-gear-icon.png) to open the administration context for the project, + and then navigate to the Security tab. + +2. In **Groups**, choose one of the following: + + - To add users who will require minimal access to the project, choose **Readers**. + + - To add users who will contribute fully to this project, choose **Contributors**. + By default, the team group created when you created the project is included as a member of the Contributors group, + so you could choose to add the new user as a member of the team instead, and the user would automatically inherit Contributor permissions. + For more information, see [Add team members to a team](../work/scale/multiple-teams.md). + + - To add users who will act as project leads, choose **Project Administrators**. + + After you have chosen one of those groups, add a user or a user group. + + ![Choose the team project group and add members](_img/add-users-team-project/add-contributor.png) + +3. In **Identities**, specify the name of the user or group you want to add. + + > The first time you add a user or group to Team Foundation Server, + > you can't browse to it or check the friendly name. + > After the identity has been added once in Team Foundation Server, you can just type the friendly name. + +4. Depending on the user, you might want to customize their permissions for other functionality in the project, +such as [areas and iterations](../work/customize/set-area-paths.md) +or [shared queries](../work/customize/set-area-paths.md). +You can also control access to projects, version control, build, and work items; +learn how in [Restrict access in TFS](restrict-access-tfs.md). + +If your TFS deployment is integrated with SharePoint Foundation, +you'll need to manage membership in the SharePoint groups to grant permissions to the team project portal +for your TFS users. + +See [Set SharePoint site permissions](../security/set-sharepoint-permissions.md) or [Grant permissions to view or create SQL Server reports in TFS](../report/admin/grant-permissions-to-reports.md). + + +## Verify + +1. Open the web portal in administration mode and choose **Control Panel** +to navigate to the top-level administration context. + +2. Choose the **Access levels** tab. + +3. Choose the name of each license group in turn, and review the following information: + + - Which licensing group is set as the default group for the deployment. + That group name will be followed by **(Default)**. + This is the group that all users of your deployment of Team Foundation Server will be assigned to by default. + + - Whether the user for whom you are determining licensing levels is a member + of a different licensing group than the default group. + If so, review the description of the features of that licensing group to better understand + what features are and are not available to that user. + +4. To review the licensing group membership of all users in the deployment at once, choose **Export Audit Log**. +The membership information will be exported to a comma-delimited file. +Save or open the file. + +## Q & A + + + + +#### Q: How do I add someone as an administrator? + +A: You'll need to add that user to groups +at the [project-collection level](add-administrator-project-collection.md) +or at the [server-level for TFS](../tfs-server/add-administrator-tfs.md). + +#### Q: Can I restrict access to a team project or to functional areas within a team project? + +A: Yes. Learn how in [Restrict access in TFS](restrict-access-tfs.md). + + + +[!INCLUDE [user-delay](../_shared/qa-user-delay.md)] + + diff --git a/docs/accounts/breadcrumb/toc.yml b/docs/accounts/breadcrumb/toc.yml new file mode 100644 index 00000000000..9f7b19cf592 --- /dev/null +++ b/docs/accounts/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Admin + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=admin + items: + - name: Account Management + tocHref: /vsts/ + topicHref: /vsts/accounts/index \ No newline at end of file diff --git a/docs/accounts/change-account-ownership-vs.md b/docs/accounts/change-account-ownership-vs.md new file mode 100644 index 00000000000..f31ecf8545d --- /dev/null +++ b/docs/accounts/change-account-ownership-vs.md @@ -0,0 +1,152 @@ +--- +title: Change the VSTS account owner +description: How to change account owner in Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: ec935536-6a5e-4b62-adf2-4207a70440bd +ms.manager: douge +ms.author: estfan +ms.date: 10/21/2016 +--- + +# Change account owner for Visual Studio Team Services + +**VSTS** + +When your team's roles and responsibilities change, +you can change your VSTS account owner to another user. + + +## Before you start + +You must have at least Basic access, not Stakeholder, and VSTS +[project collection administrator or account owner permissions](#find-owner-pca). +If no one has these permissions, contact +[VSTS Support](https://www.visualstudio.com/team-services/support). + +Make sure that the new owner: + +* Has been added and invited to your VSTS account +(```https://{youraccount}.visualstudio.com```). +* Also has at least Basic access, not Stakeholder. +Learn [how to manage users and access](add-account-users-assign-access-levels.md). +* Has signed in to your VSTS account, +created a Visual Studio profile, +and agreed to the Terms of Service. + +## Change VSTS account owner + +0. Sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```). + + [Why am I asked to choose between my work or school account and my personal account?](#ChooseOrgAcctMSAcct) + +0. To find the current account owner, +go to your VSTS account settings + + ![Go to account settings](../_shared/_img/account-settings-new-ui.png) + +0. Under **Settings**, find the current owner. + + ![Find current owner](../_shared/_img/account-owner-new-ui.png) + +0. Change the account owner. + + ![Change current owner](_img/change-account-ownership/vsocontrolpanelchangeowner.png) + +0. Find and select the new owner. + + ![Find and select owner](_img/change-account-ownership/vsofindnewaccountowner.png) + + [Can't find the person you want?](#NoNewOwner) + +0. Save your changes. + + ![Select new owner, save changes](_img/change-account-ownership/vsosavenewaccountowner.png) + + Your VSTS account has a new owner! + + +## Q&A + + + + + +[!INCLUDE [find-project-collection-administrator](../_shared/qa-find-project-collection-administrator.md)] + +[!INCLUDE [find-account-owner](../_shared/qa-find-account-owner.md)] + + +####Q: Why can't I find the user I want to make the new owner? + +A: This might happen because: + +* They're not in your VSTS account, +or they don't have account access. +Learn how to [add them to your account](add-account-users-assign-access-levels.md). +* They haven't created a Visual Studio profile +and agreed to the Terms of Service. +* If you recently added this person to your account, +you might experience a delay before this person appears +in the possible account owners list. +* If your account uses Azure Active Directory to control access, +directory members won't appear in the possible account owners +list until they meet the requirements above. + +[!INCLUDE [recover-password](../_shared/qa-recover-password.md)] + +####Q: Can I reverse the account owner change? + +A: Yes, if you're a project collection administrator. + +####Q: Can I change the account name (URL) too? + +A: Only the account owner can change the URL. +If you're the account owner, learn how to +[change the account URL here](rename-vsts-account.md). + +####Q: How many account owners can I have? + +A: Your account can have only one owner. +Only they can [perform certain actions](#owner-differences), +so make sure to keep your account owner updated. + +####Q: Why did you ask for extra information when I signed in? + +A: If our Terms of Service have changed since you last signed in, +you might be asked to agree and confirm that your information is up to date. + + +####Q: What makes the account owner different than other account users? + +A: The account owner manages payments and access for account users. +They're also the same person who manages billing for the account through the +[Azure classic portal](https://manage.windowsazure.com/) or the +[Azure portal](https://portal.azure.com). + +Account owners also have permissions to perform these tasks: + +* Pay for users accessing the account +* Pay for additional account services +* Rename the account URL +* Change the account owner + +In contrast, project collection administrators can manage user access +and change the account owner, but they can't rename the account URL. + + + +[!INCLUDE [choose-msa-azuread-account](../_shared/qa-choose-msa-azuread-account.md)] + +[!INCLUDE [choose-msa-azuread-account2](../_shared/qa-choose-msa-azuread-account2.md)] + +[!INCLUDE [why-cant-sign-in-msa-azuread-account](../_shared/qa-why-cant-sign-in-msa-azuread-account.md)] + +[!INCLUDE [why-no-owned-accounts](../_shared/qa-why-no-owned-accounts.md)] + + + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] + + \ No newline at end of file diff --git a/docs/accounts/change-application-access-policies-vs.md b/docs/accounts/change-application-access-policies-vs.md new file mode 100644 index 00000000000..5f950ce650c --- /dev/null +++ b/docs/accounts/change-application-access-policies-vs.md @@ -0,0 +1,77 @@ +--- +title: Change your account's app access policies in VSTS +description: Change app access policies for Visual Studio Team Services (VSTS, Visual Studio Online, VSO) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 2fdfbfe2-b9b2-4d61-ad3e-45f11953ef3e +ms.manager: douge +ms.author: estfan +ms.date: 08/04/2016 +--- + +# Change application access policies for your account + +**VSTS** + +VSTS offers the capability for other apps +to integrate with its services and resources in your VSTS account. +To access your account without asking for user credentials multiple times, +apps can use these authentication methods: + +* [OAuth](../integrate/get-started/authentication/oauth.md) +to generate tokens for accessing [REST APIs for VSTS and Team Foundation Server](../integrate/get-started/rest/basics.md). +The [Accounts](../integrate/api/shared/accounts.md) +and [Profiles](../integrate/api/shared/profiles.md) +APIs support only OAuth. + +* [Alternate credentials](../git/auth-overview.md#alternate-credentials) +as a single set of credentials across all tools that don't have +plug-in, extension, or native support. For example, +you can use basic authentication to access +[REST APIs for VSTS and TFS](../integrate/get-started/rest/basics.md), +but you must turn on alternate credentials. + +* [SSH authentication](../git/use-ssh-keys-to-authenticate.md) +to generate encryption keys when you use Linux, Mac, +or Windows running [Git for Windows](http://www.git-scm.com/download/win) +and can't use +[Git credential managers](../git/set-up-credential-managers.md) +or [personal access tokens](use-personal-access-tokens-to-authenticate.md) +for HTTPS authentication. + +* [Personal access tokens](use-personal-access-tokens-to-authenticate.md) +to generate tokens for: + + * Accessing specific resources or activities, like builds or work items + * Clients like Xcode and Nuget that require usernames and passwords + as basic credentials and don't support Microsoft account + and Azure Active Directory features like multi-factor authentication + * Accessing [REST APIs for VSTS and TFS](../integrate/get-started/rest/basics.md) + +By default, your VSTS account allows access for all authentication methods. +You can limit access, but you must specifically restrict access for each method. +When you deny access to an authentication method, +no app can use that method to access your account. +Any app that previously had access will get an +authentication error and can't access your account. + +> To remove access for personal access tokens, +> you must [revoke them](use-personal-access-tokens-to-authenticate.md). + +To continue, you'll need at least Basic access and VSTS account owner permissions. +[How do I find the account owner?](faq-change-app-access.md#find-owner) + +0. Sign in as the account owner to your VSTS account (```https://{youraccount}.visualstudio.com```). + + [Why am I asked to choose between my work or school account and my personal account?](faq-change-app-access.md#ChooseOrgAcctMSAcct) + +0. From your account toolbar, go to **Settings**. + + ![Click the gear icon, go to Settings](../_shared/_img/account-settings-new-ui.png) + +0. Review your application connection settings. +Change these settings, based on your security policies. + + ![Under Application Connections, change each setting as necessary, save your changes](_img/change-account-access-policies/connections.png) + + [Need help?](faq-change-app-access.md#get-support) diff --git a/docs/accounts/change-azure-active-directory-vsts-account.md b/docs/accounts/change-azure-active-directory-vsts-account.md new file mode 100644 index 00000000000..ac671d65dc5 --- /dev/null +++ b/docs/accounts/change-azure-active-directory-vsts-account.md @@ -0,0 +1,207 @@ +--- +title: Change your VSTS account Azure Active Directory tenant +description: VSTS - Change directory (tenant) in Azure Active Directory (Azure AD, AAD) for Visual Studio Team Services (VSTS, Visual Studio Online, VSO) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: c687302d-ca34-44ea-8cfb-88fe7330072d +ms.manager: douge +ms.author: estfan +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Change Azure Active Directory (Azure AD) tenant + +**VSTS** + +To move your VSTS account +between directories (tenants) in Azure AD, +disconnect your account from its current directory, +then reconnect your account to the directory that you want. + + + +You'll need: + +* VSTS account owner permissions. Only account +owners can manage directory connections. +[How do I find the account owner?](faq-change-app-access.md#find-owner) + +* At least Basic access, not Stakeholder + +* Global administrator permissions +for your source and target Azure AD directories (tenants). +Learn [how to manage Azure AD administrators](https://azure.microsoft.com/en-us/documentation/articles/active-directory-assign-admin-roles/). + +* Co-administrator permissions for the Azure subscriptions +associated with your source and target directories. +Learn [how to manage Azure subscription administrators](../billing/add-backup-billing-managers.md). + +* A temporary Microsoft account, like @outlook.com, +to move your VSTS account between directories. +This Microsoft account will need these permissions, +which you'll set up below: + + * Source directory global administrator + * (if adding users to target directory) Target directory user administrator + * Azure subscription Co-administrator for both directories + * VSTS account owner. Only account owners can change directory connections. + +## What happens to current users? + +Your work in VSTS is associated with your sign-in address. +During directory migration, all VSTS account users need +Microsoft accounts to sign in. They'll continue working seamlessly +if their Microsoft accounts share the same sign-in addresses that they use now. +Otherwise, they'll lose access until you finish the migration or +unless you add them as new users to your VSTS account. + +After migration, users must be members of the target directory +to get access to your VSTS account. They'll continue +working seamlessly if they use the same sign-in addresses that they use now. +Otherwise, you'll have to add them as new users to your VSTS account. +Your organization might have policies about adding external users to the directory, +so find out more first. + +## Prepare your source directory + +You'll now set up source directory permissions and VSTS account owner permissions +so you can perform the migration. + +### Set up your Microsoft account as Azure subscription co-administrator + +[See steps here](https://docs.microsoft.com/en-us/azure/billing/billing-add-change-azure-subscription-administrator). + + +[Why am I asked to choose between my work or school account and my personal account?](faq-azure-access.md#ChooseOrgAcctMSAcct) + + +### Set up your Microsoft account as global administrator in your source directory + +[Add your account to the directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-create-users), and in the **Tell us about this user** step, choose **User with an existing Microsoft account**. In the **user profile** step, choose **Global Admin**. + + +### Set up your Microsoft account as your VSTS account owner + +0. Sign in to your VSTS account (```http://{youraccount}.visualstudio.com```) as the account owner. + + [Why am I asked to choose between my work or school account and my personal account?](faq-azure-access.md#ChooseOrgAcctMSAcct) + +0. View your VSTS account users. + + ![Users hub](_img/_shared/users-hub-jamal.png) + +0. Add your Microsoft account to your VSTS account as a user. + + ![Add your Microsoft account](_img/change-azure-active-directory/add-msa-vsts.png) + + Your Microsoft account appears in this list + because you added this user to the source directory. + +0. Sign in to your VSTS account with your Microsoft account, +so that VSTS can validate this user. Otherwise, +your Microsoft account won't appear in the possible account owners list. + +0. Sign back in to your VSTS account as the account owner. +Now change the VSTS account owner to your Microsoft account. +Learn [how to change VSTS account owners](change-account-ownership-vs.md). + + **Important**: Before you disconnect your VSTS account, + make sure that this Microsoft account is the VSTS account owner. + +## Prepare your target directory + +Now you'll set up target directory permissions for your Microsoft account +to continue performing the migration. You'll also add your VSTS +account users to the target directory, if they're not members already, +so they can get VSTS account access as directory members. + +### Set up your Microsoft account as Azure subscription Co-administrator + +[See steps here](https://docs.microsoft.com/en-us/azure/billing/billing-add-change-azure-subscription-administrator). + +[Why am I asked to choose between my work or school account and my personal account?](faq-azure-access.md#ChooseOrgAcctMSAcct) + + +### Set up your Microsoft account as a user administrator in the target directory + +0. Find and select the directory that you want connected to your VSTS account. + + ![Find target directory](_img/change-azure-active-directory/azure-choose-target-directory.png) + +0. [Add your account to the directory](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-create-users), and in the **Tell us about this user** step, choose **User with an existing Microsoft account**. In the **user profile** step, choose the user administrator role. + + +## Migrate your VSTS account between directories + +### Disconnect your VSTS account from the source directory + +0. Sign in to the [Azure classic portal](https://manage.windowsazure.com) +with the Microsoft account that you're using for the migration. + +0. Select your VSTS account. + + ![Select your VSTS account](_img/manage-work-access/azureselectconnectedvso.png) + +0. Configure your account. + + ![Configure your account](_img/manage-work-access/azure-configure-disconnect.png) + +0. Disconnect your account from the source directory. + + ![Disconnect account](_img/manage-work-access/azuredisconnectdirectory1.png) + + ![Select None, no directory connection](_img/manage-work-access/azuredisconnectdirectory2.png) + + After you save your changes, your VSTS account is disconnected. + Now, only users with Microsoft accounts can sign in to your VSTS account. + This is why we previously set up your Microsoft account as a VSTS account user. + + ![Your account is now disconnected](_img/manage-work-access/azuredisconnectdirectory3.png) + +0. Unlink your VSTS account from the source Azure subscription. + + ![Select your VSTS account](_img/_shared/azure-unlink-subscription.png) + + Your VSTS account is removed from the Azure classic portal. + You can now link your account to another Azure subscription and directory. + +### Connect your VSTS account to the target directory + +0. Link your VSTS account to the target Azure subscription. + + ![Link VSTS account](_img/set-up-billing/azuredeveloperservicesstart.png) + + ![Select your VSTS account and target Azure subscription](_img/change-azure-active-directory/select-account-subscription.png) + +0. Configure your account. + + ![Configure your account](_img/manage-work-access/azure-configure-disconnect.png) + +0. Connect your account to the target directory. Save your changes when you're done. + + ![Connect your VSTS account](_img/manage-work-access/azuredisconnectdirectory3.png) + + ![Select target directory](_img/change-azure-active-directory/select-directory.png) + +0. To check that you finished this task successfully, invite a user from the target directory +to your VSTS account. Confirm that they can sign in. Learn how to +[add users and assign access](add-account-users-assign-access-levels.md). + +0. Add the remaining users from the target directory to your VSTS account. + +0. If you use tools that run outside a web browser, like the Git command line tool, +then your alternate credentials for those tools won't work anymore. +You must [set up your credentials](http://support.microsoft.com/kb/2991274/en-us) +again for the VSTS account that you connected. + +### Reassign VSTS account ownership to a directory member + +0. Sign in to your VSTS account (```https://{youraccount}.visualstudio.com```) +with the Microsoft account that you used for the migration. + +0. Reassign ownership for your VSTS account to a directory member. +Learn [how to change VSTS account owners](change-account-ownership-vs.md). + +0. Remove the Microsoft account that you used for the migration +from your source and target Azure subscriptions and directories. diff --git a/docs/accounts/clean-up-data.md b/docs/accounts/clean-up-data.md new file mode 100644 index 00000000000..bcd88bd9e8e --- /dev/null +++ b/docs/accounts/clean-up-data.md @@ -0,0 +1,78 @@ +--- +title: Clean up TFS Data +description: Clean up stale data in your Team Foundation Server instance +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 53bcaf92-9dea-46f5-8a1f-637bcf61b4db +toc: show +ms.manager: douge +ms.author: douge +ms.date: 08/04/2016 +--- + +# Cleaning up old data + +**TFS 2015** | **TFS 2013** + +Over time, Team Foundation Server instances can build up very large volumes of data - files, builds, work items, etc. +For the most part this is a very good thing - a big part of the value of many devops +features, after all, is maintaining a reliable history of the various artifacts involved in producing software. At +some point, however, the costs involved in maintaining older data - which include performance impacts and increased +time spent on upgrades in addition to the increased disk space requirements - may exceed the benefits. + +This document provides guidance for cleaning up a variety of different types of data, primarily from TFS collection +databases. Note that in all of these cases, once the data has been cleaned up it *cannot be recovered* except by +restoring a database backup. As such, be careful to only clean up data that you are sure you will not need in the +future. Also note that you will need to be a highly permissioned user - typically a member of a Team Project +Collection or Team Project Administrators group - in order to perform these actions. + +Finally, it should be noted that the size of the SQL data files will not decrease after you perform any of the +below commands, since SQL will reserve the space for later use. + +## Team Projects + +If you have whole team projects that are no longer needed, deleting them can potentially have a very large impact, +since this will remove all content for the team project across all feature areas. There are three ways to delete a +team project: + +1. From the [Team Foundation Server Administration Console](delete-team-project.md#delete-team-proj). +2. Using the [TfsDeleteProject](https://msdn.microsoft.com/library/ms181482.aspx) tool that is included with Visual +Studio installations. + +The primary difference between these two methods of deleting a team project is that TfsDeleteProject will attempt to +delete artifacts from the Sharepoint site with which TFS is integrated. If your TFS deployment is not integrated +with Sharepoint, the two methods will by default perform the same set of actions. + +## Files + +In most cases, file contents of one sort or another will consume the majority of the space in TFS collection +databases, so cleaning up unneeded files can often have a significant impact on data volume. There are many +different types of files stored in TFS collection databases, including Team Foundation Version Control files, Git files, work +item attachments, test case attachments, build outputs, etc. Not all of them support cleanup, but check back here +for updates. Also, note that file contents are not generally cleaned up *immediately* upon deletion, but rather by +a background job that runs on a periodic basis (typically once per day). + +### TFS VC Content + +When TFS version control branches, folders, and files are deleted, they are only *logically* deleted - their content +is still available in history. TFS VC branches, folders, or individual files can be physically deleted using the +[destroy command](https://msdn.microsoft.com/library/bb386005.aspx) via tf.exe. + +### Test Attachments + +Test attachments created during test runs can be cleaned up using the Test Attachment Cleaner, which is included +with the [TFS Power Tools](https://visualstudiogallery.msdn.microsoft.com/f017b10c-02b4-4d6d-9845-58a06545627f). + +[//]: # (TODO: Would be really nice to get WIT attachments documented. Needs code.) +[//]: # (TODO: Would be really nice to get Build outputs that are copied to the server documented.) +[//]: # (TODO: Would be really nice to get Git content documented.) + +[//]: # (TODO: Workspaces and shelvesets? Ping Taylor.) + +## XAML Builds + +When builds in TFS are deleted, a subset of the information they produced is preserved in order to avoid losing +reporting data the next time the [warehouse is rebuilt](../report/admin/rebuild-data-warehouse-and-cube.md). Build +data can be physically deleted using the [destroy command](https://msdn.microsoft.com/library/ee794689.aspx) vis +tfsbuild.exe. + diff --git a/docs/accounts/connect-account-to-aad.md b/docs/accounts/connect-account-to-aad.md new file mode 100644 index 00000000000..48c4da6ace9 --- /dev/null +++ b/docs/accounts/connect-account-to-aad.md @@ -0,0 +1,106 @@ +--- +title: Connect VSTS account to Azure Active Directory (Azure AD) +description: Connect VSTS account to Azure Active Directory (Azure AD) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 629a48b6-b2ab-4706-8256-d187c8ed5ce7 +ms.manager: douge +ms.author: estfan +ms.date: 1/19/2017 +--- + +# Connect VSTS account to Azure Active Directory (Azure AD) + +**VSTS** + +If your VSTS account was created with a Microsoft account, +you can connect your VSTS account to your +organization's directory (tenant) in +[Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/documentation/articles/active-directory-whatis/). +You can then sign in to VSTS with the same username +and password that you use with these Microsoft services. +You can also enforce policies for accessing +your team's critical resources and key assets. + +For more information, see the [conceptual overview](access-with-azure-ad.md) for using Azure AD with VSTS. + + + + +## Connect your VSTS account to your directory + +0. [Sign in to the Azure classic portal](https://manage.windowsazure.com/) +with your personal Microsoft account as the VSTS account owner. + + > [!NOTE] + > You can connect your VSTS account + > and your directory only through the Azure classic portal. + + [Why am I asked to choose between a "work or school account" and a "personal account"?](faq-azure-access.md#ChooseOrgAcctMSAcct) + +0. If you haven't already, +[link your VSTS account](../billing/set-up-billing-for-your-account-vs.md) +to the Azure subscription associated with your directory. + + Why don't I see a directory when I link my account? **Directory** shows a directory only when the selected + VSTS account is already connected to that directory. You'll actually connect your account to a directory + elsewhere and later in Azure. + + ![No connected directory](_img/_shared/no-directory.png) + + [What if my account is already linked to an Azure subscription?](faq-azure-access.md#subscription-linked-already) + + **Important** Want to use your Azure subscription to bill VSTS purchases? You can use your linked Azure + subscription to bill purchases for your VSTS account, but if your subscription has a + [spending limit](https://azure.microsoft.com/en-us/pricing/spending-limits/), you must first remove this + spending limit **indefinitely**. Learn [how and why you must remove this spending limit](faq-azure-access.md#remove-spending-limit). + +0. Go to **Visual Studio Team Services**. +Select your VSTS account. + + ![Azure portal, VSTS, select your account](_img/manage-work-access/azurevso_unconnected.png) + +0. Choose **Configure** > **Connect**. + + ![Configure your account](_img/manage-work-access/azureconfigurevso.png) + + ![Connect your account](_img/manage-work-access/azureconnectdirectory1.png) + +0. From the list of directories associated with the Azure subscription +that's linked to your VSTS account, +select the directory that you want to connect. +Save your changes when you're done. + + ![Select your directory](_img/manage-work-access/azureconnectdirectory2.png) + + * [Why don't I see the directory that I want?](faq-azure-access.md#why-not-my-directory) + * [My account's already connected to a directory. What do I do?](faq-azure-access.md#AlreadyConnected) + + ![Account is now connected to your directory](_img/manage-work-access/azureconnectdirectory3.png) + + Your account is now connected to your organization's directory. + +0. To check that users can access your VSTS account, +invite a user from your directory to your VSTS account +and confirm that they can sign in. + +0. If you use alternate credentials with tools that run outside a web browser, +like the Git command line tool, those tools won't work anymore. +You must [set up your credentials](http://support.microsoft.com/kb/2991274/en-us) +again for the VSTS account that you connected. + +0. If you used a Microsoft account to sign up for a +[Visual Studio with MSDN subscription](https://www.visualstudio.com/vs/pricing/) +that includes VSTS as a benefit, +you can add a work or school account that's +managed by Azure Active Directory to your subscription. +Learn [how to link work or school accounts to Visual Studio with MSDN subscriptions](../billing/link-msdn-subscription-to-organizational-account-vs.md). + + [More questions about connecting?](faq-azure-access.md#faq-connect) + +**Next:** + +* [Manage users and access](add-account-users-assign-access-levels.md) +* [Manage access with Azure AD groups](manage-azure-active-directory-groups-vsts.md) + + diff --git a/docs/accounts/create-account-msa-or-work-student.md b/docs/accounts/create-account-msa-or-work-student.md new file mode 100644 index 00000000000..977cdda9b29 --- /dev/null +++ b/docs/accounts/create-account-msa-or-work-student.md @@ -0,0 +1,164 @@ +--- +title: Create your VSTS account with a Microsoft account or a work/school/organization account +description: Create your VSTS account with a personal Microsoft account or a work/school/organization account +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: e2eacd25-e6be-4294-b1da-5529195f30d0 +ms.manager: douge +ms.author: estfan +ms.date: 03/30/2017 +--- + +# Create your VSTS account with a personal Microsoft account or a work/school/organization account + +**VSTS** + +Sign up for a [Visual Studio Team Services](https://www.visualstudio.com/products/visual-studio-team-services-vs) +account to upload and share code in free unlimited private +Git repositories or Team Foundation Version Control. +Then connect your favorite development tool like Eclipse, Xcode, +Visual Studio, IntelliJ, or Android Studio to work on apps anytime, anywhere. +VSTS offers integrated, enterprise Agile tools for DevOps, +so your team can build often, test early, and ship faster. + +> Want to set up an on-premises server? +> [Get Team Foundation Server here](https://www.visualstudio.com/products/tfs-overview-vs), +> or learn [how to install and set up Team Foundation Server](../tfs-server/install/get-started.md). + + +[What users can join for free? What do they get in Visual Studio Team Services?](faq-create-account.md#free-users) + + + +## What do I need to sign up for a VSTS account? + +* To use only Microsoft accounts + with your VSTS account, follow the steps below and ignore the Azure Active Directory (Azure AD) call outs. + + Don't have a Microsoft account? You can create a Microsoft account + when you sign up for Visual Studio Team Services. + + Use your Microsoft account if you don't need to authenticate users + for an organization with [Azure AD](https://azure.microsoft.com/en-us/documentation/articles/active-directory-whatis/). + All users must sign in with Microsoft accounts to your VSTS account. + +* Alternatively, to authenticate users and control account access through your + organization's directory (tenant) in Azure AD, follow the steps below and pay attention to the Azure AD call outs. + + Use your work or school account to **automatically connect** your VSTS account to your organization's directory. + All users must be members in that directory to get access to your VSTS account, or you must use + [Azure AD business-to-business (B2B) collaboration capabilities](https://docs.microsoft.com/azure/active-directory/active-directory-b2b-what-is-azure-ad-b2b) to + add users from other organizations. + + You'll need a work or school account that's managed by your organization's directory. + If you use Azure or Office 365, you might have this already. If you don't, learn how to + [sign up for Azure as an organization](https://azure.microsoft.com/en-us/documentation/articles/sign-up-organization/). + + To use existing on-premises identities with VSTS, learn how to + [use Azure AD Connect for integrating on-premises directories with Azure AD](https://azure.microsoft.com/en-us/documentation/articles/active-directory-aadconnect/). + + +## How does Azure AD control access to Visual Studio Team Services? + +VSTS authenticates users through your organization's directory +so that only users who are members in that directory can get access to your VSTS account. +When you remove users from that directory, +they can't access your account anymore. Only specific +[Azure AD administrators](https://azure.microsoft.com/en-us/documentation/articles/active-directory-assign-admin-roles/) +can manage users in your directory, so administrators control who can get access to your VSTS account. + +Without Azure AD, you're solely responsible for controlling +VSTS account access. And all users must sign in with Microsoft accounts. +[What are other differences?](faq-create-account.md#SignInAccountDifferences) + + + +## Create your account and sign up for VSTS + +0. Go to [VSTS](https://go.microsoft.com/fwlink/?LinkId=307137). Enter the email address for your Microsoft account, or for Azure AD, use your work or school account. + + **Microsoft account**: If you're a Visual Studio subscriber and get VSTS as a benefit, use the Microsoft account associated with your subscription. + + **Azure AD**: Your sign-in page might look different, based on the work or school account that you used. + + ![Enter your email address](_img/_shared/sign-in.png) + + Got [browser problems?](faq-create-account.md#browser-problems) + +0. Enter your email address for your Microsoft account. Then enter your password to finish signing in. If you are not +using **Azure AD**, and you don't have a Microsoft account, you can create a Microsoft account at this time. + + ![Enter password for your Microsoft account](_img/_shared/sign-in-msa2.png) + + **Azure AD**: Enter your password for your work or school account. + + ![Enter your password for your work or school account](_img/_shared/sign-in-aad.png) + + [Why am I asked to choose between my work or school account and my personal account?](faq-create-account.md#ChooseOrgAcctMSAcct) + +0. Name your VSTS account. To manage your code, choose Git or Team Foundation Version Control. + + ![Name your account, choose your version control](_img/sign-up-visual-studio-team-services/create-team-services-account-directory.png) + + Learn which version control ([Git](../git/overview.md) or [Team Foundation Version Control](../tfvc/overview.md)) + works best for you. + +0. Confirm your account's location, and if you're using **Azure AD**, confirm the **directory** +that you're connecting to your VSTS account. + + ![Rename team project, change account location, or select another process](_img/sign-up-visual-studio-team-services/check-account-location-standard.png) + + **Azure AD**: + + ![Rename team project, change account location, or select another process](_img/sign-up-visual-studio-team-services/change-account-directory.png) + + **Microsoft account and Azure AD**: VSTS creates your first team project as "MyFirstProject" + and uses Agile as your default work item process to organize your work. + Choose **Change details** to + [rename your team project, change the account location, or select another process, like Scrum](faq-create-account.md#account-location). + + **Azure AD**: After you create your account, only members of + the directory shown here can get access to your VSTS account, or you must use + [Azure AD business-to-business (B2B) collaboration capabilities](https://docs.microsoft.com/azure/active-directory/active-directory-b2b-what-is-azure-ad-b2b) to + add users from other organizations. If you belong to multiple directories, check that you want + to connect this directory to your VSTS account. Changing the directory now is easier than [changing the + directory later](faq-create-account.md#ChangeDirectory). + +0. After VSTS creates your account and team project, +add code, work items, or more users. + + ![Add code or work items](_img/_shared/team-project-created.png) + + Congratulations, you're now a VSTS account owner! + + To sign in to your VSTS account at any time, go to ```https://{youraccount}.visualstudio.com```. + + > [!NOTE] + > If you activated your Visual Studio subscription with a Microsoft account, and your subscription includes VSTS + > as a benefit, learn [how to add your work or school account](../billing/link-msdn-subscription-to-organizational-account-vs.md) to your + > subscription so you can use your subscriber benefits in VSTS. + +## Next steps + +* [Manage users and access](add-account-users-assign-access-levels.md) + +* Add code to Git or Team Foundation version control + + * Git with [Eclipse](https://java.visualstudio.com/Docs/tools/eclipse), + [Xcode](../git/share-your-code-in-git-xcode.md), + [Android Studio](http://java.visualstudio.com/Docs/tools/androidstudio), + [IntelliJ](http://java.visualstudio.com/Docs/tools/intelliJ), + [Visual Studio](../git/share-your-code-in-git-vs-2017.md), or + [Visual Studio Code](https://code.visualstudio.com/docs/editor/versioncontrol) + + * TFVC using [Eclipse](https://java.visualstudio.com/Docs/tools/eclipse), + [Xcode](../tfvc/share-your-code-in-tfvc-xcode.md), + [Visual Studio](../tfvc/use-visual-studio-git.md), or + [Visual Studio Code](https://code.visualstudio.com/docs/editor/versioncontrol) + +* [Create your backlog](../work/backlogs/create-your-backlog.md), + [manage your process](../work/process/manage-process.md), + or [customize your process](../work/process/customize-process.md) + + diff --git a/docs/accounts/create-team-project.md b/docs/accounts/create-team-project.md new file mode 100644 index 00000000000..2d4106937c5 --- /dev/null +++ b/docs/accounts/create-team-project.md @@ -0,0 +1,216 @@ +--- +title: Create a team project in VSTS or TFS +description: Add a team project to an on-premises Team Foundation Server (TFS) +ms.assetid: 21F3C364-34F4-41B0-9EFC-6D4A141D81E0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.manager: douge +ms.author: douge +ms.date: 04/13/2017 +ms.topic: get-started-article +--- + +# Create a team project + +**TFS 2017 | TFS 2015 | [Previous versions](https://msdn.microsoft.com/library/ms181477%28v=vs.120%29.aspx)** + + +>[!NOTE] +>If you don’t want to manage an on-premises server, you can +[Sign up for VSTS and create a team project](create-account-msa-or-work-student.md). This topic applies to creating a team project when you have an on-premises Team Foundation Server (TFS) deployed. + +You create a team project to establish a repository for source code and a place for a group of developers and teams to plan, track progress, and collaborate on building software solutions. Team projects differ from [software application projects or solutions](https://msdn.microsoft.com/library/zfzh36t7.aspx). + +If you have a team project already, and want to start coding an application project, then see one of the following topics: [Set up Git on your dev machine](../git/gitquickstart.md) or [Develop your app in Team Foundation version control](../git/gitquickstart.md). + + +>[!IMPORTANT] +>When you create a team project from the web portal, several process template files are ignored. Specifically, the files that would create a Report Manager site and a SharePoint project portal aren't supported. These features aren't supported for VSTS. +> +>If you want these features to be to be available on your on-premises TFS, then create your team project from Visual Studio or Team Explorer. For details, see [Process template and plug-in files, Client support for project creation](../work/reference/process-templates/overview-process-template-files.md#client-support). + + +### From the web + +If you're using TFS 2015 Update 2 or later then you can create a team project from the web as well. It's important to note that for team projects created from the web, Reporting and SharePoint integration steps will be skipped when creating the team project. You can still set up [Reporting](../report/admin/add-reports-to-a-team-project.md) and [SharePoint](../tfs-server/admin/add-sharepoint-to-tfs.md) manually after team project creation. + +1. If you're not a member of the Project Collection Administrators Group, [get added as one](add-administrator-project-collection.md). To create team projects you must have the Create new projects permission set to **Allow**. + +2. Navigate to the administation overview page by choosing the ![Settings Icon (TFS Web Portal)](_img/rename-team-project/gearicon.png) gear icon in the top right. + +3. Open the collection administration page for the collection you want to create the team project in. + + ![Collection administration link](_img/create-team-project/adminoverview.png) + +4. Click New team project. + + ![New team project button](_img/create-team-project/collectionoverview.png) + +5. Provide a name for your new Team project, select it's initial source control type, and select a process to create a team project. + + ![Create team project dialog](_img/create-team-project/createproject.png) + +### From Team Explorer + +You can create a team project from Team Explorer after you have connected to an on-premises server. + +1. If you're not a member of the Project Collection Administrators Group, [get added as one](add-administrator-project-collection.md). To create team projects you must have the Create new projects permission set to **Allow**. + +2. Ask your TFS administrator about the following resources and get additional permissions as needed: + + - Which team project collection you should connect to when you create your team project? If you installed TFS using the Basic Server Configuration Wizard, you have only one project collection named **DefaultCollection**. Unless you work in an enterprise organization and will be supporting hundreds of team projects, you should add all your team projects to a single project collection. If you need to create additional collections, see [Manage team project collections](../tfs-server/admin/manage-team-project-collections.md). + + - Has SQL Server Analysis Services and SQL Server Reporting Services been configured for the deployment? If so, ask your administrator to [add you as a member of the Team Foundation Content Managers group](../report/admin/grant-permissions-to-reports.md) on the server that hosts SQL Server Reporting Services. Without these permissions, you’ll be unable to create a team project. + + - Has a SharePoint Web application been configured for your deployment? If you want to configure a SharePoint portal when you create your team project, ask the SharePoint administrator to give you Full Control permissions on the server that hosts SharePoint Products. Otherwise, you can skip this step and configure a portal at a later time. + +3. Open the same version of Visual Studio as the version of TFS that you're connecting to. If you don’t see the Team Explorer pane, open **View\>Team Explorer** from the menu. + + As needed, [Download and install Visual Studio Community](https://www.visualstudio.com/products/visual-studio-community-vs.aspx) to get a free copy of the latest version. + +4. Connect to the server and team project collection where you want to create your team project. + + ![ALM\_CTP\_Connect](_img/IC827208.png) + + You can access Team Explorer for free by installing [Visual Studio Community](https://www.visualstudio.com/downloads/download-visual-studio-vs) or any other Visual Studio version. + + You must connect from a client that is at the same version level as TFS. That is, you must connect to TFS 2015 from a version of Visual Studio 2015. + + ![ALM\_EXL\_Connect](_img/IC680074.png) + + >**Tip:** If you are running Team Explorer from a server that hosts SharePoint Products and SQL Server Reporting Services, you might need to run Visual Studio as an administrator. + +5. If it’s your first time connecting to TFS, you’ll need to add TFS to the list of recognized servers. + + ![ALM\_EXL\_AddServer](_img/IC658167.png) + +6. Open the New Team Project Wizard. + + ![New link on Connect page (Team Explorer)](_img/IC779380.png) + +7. Name the team project. Don’t specify more than 64 characters. + + ![ALM\_CTP\_NameProject](_img/IC671598.png) + +8. Choose a process template. For a comparison of the default process templates, see [Choose a process](../work/guidance/choose-process.md). + + ![ALM\_CTP\_SelectTemplate](_img/IC795955.png) + +9. Choose your version control, either Git distributed repositories or TFVC, one centralized repo. + + ![ALM\_CTP\_SelectSource](_img/IC671600.png) + + Not sure which system to use? Learn more about + [Git](../git/overview.md) or [TFVC](../tfvc/overview.md). + + After you've created your team project, you can[add repositories](#git-and-tfvs-repos). + +10. Unless your team project collection is configured to support a SharePoint project portal, you’re done. + + ![ALM\_CTP\_Finish](_img/IC795956.png) + + If the Next button is active, you can configure your project portal. + + If the wizard encounters a problem, you’ll receive an error message and a link to the project creation log. Review the [log file](#log-file) for specific errors and exceptions. + +11. When you’re finished, you can see your team project in Team Explorer. You can also choose the **Web Access** link to connect to your team project from the web portal. + + + + + + + + + + + +
![Team Explorer Home page w/ TFVC as source control](_img/IC827209.png)![Team Explorer Home page with Git as source control](_img/IC827210.png)
+ +## Try this next + +[Add team members](../work/scale/multiple-teams.md#add-team-members) to enable other users to connect to your team project. + +Also, with the team project created, you can start [developing your app in Team Foundation version control](https://msdn.microsoft.com/library/ms181382.aspx) or [use Git](../git/overview.md). + +To start planning work and collaborating as a team, see [Agile tools](../work/overview.md). + + + +##Add repositories +From the admin context of the web portal, you can add additional repositories to a team project, either Git (distributed) or TFVC (centralized). While you can create many Git repositories, you can only create a single TFVC repository for a team project. + +![Add repositories to an existing team project](_img/create-team-project-add-repositories.png) + +
Feature availability: The ability to work from both Git and TFVC repositories from the same team project is only supported when you connect to VSTS or an on-premises application server that you've upgraded to TFS 2015 Update 1. Additional steps to address permissions may be required. See [Git team projects](../git/team-projects.md) or [TFVC team projects](../git/team-projects.md).
   + +##Resolve errors + +###To resolve permission related errors +If you receive an error message that states you don’t have permission, go get those permissions: become a member of the [Project Collection Administrators group](https://msdn.microsoft.com/library/dd547204.aspx), [Team Foundation Content Managers group](../report/admin/grant-permissions-to-reports.md) become a member of the, and [Full Control permissions](https://msdn.microsoft.com/library/dd547204.aspx) on the server that hosts SharePoint Products. + +###To resolve Error TF30169 + +**Error TF30169: The New Team Project Wizard was unable to download the process template {0}.** indicates that SharePoint site process templates are not available on the server that hosts SharePoint Products. + +Contact the system administrator for the server that hosts SharePoint Products and request the required process templates be added to the server. See [Requirements and compatibility](requirements.md). + +###To resolve Error TF30321 + +**Error TF30321: The name you typed is already used for another team project on the Team Foundation Server** indicates that you should use a different name for your team project. The name you entered is either in active use or has undergone partial deletion, but not full deletion. + +Even when you've deleted a team project, you may get the same name error. If a team project create or delete operation doesn’t successfully finish, some components could be created or deleted even though others are not. In this event, you can’t reuse the name associated with the team project. + +To verify project deletion or remove remaining components associated with a partially deleted team project, use the [Delete a team project [TFSDeleteProject]](https://msdn.microsoft.com/library/ms181482). Then try again to create the team project with the same name. + +Even with troubleshooting, you might not be able to use the same name. Some components of the deleted team project could be scheduled for deletion but not yet deleted. + + +###To resolve an error message related to a plug-in + +The process template used to create the team project contains several XML plug-in files. If one of these files contains a format or other error, an error message appears. + +Review the project creation log to determine the plug-in that caused the error. After you discover the problem, you can either contact the developer or vendor that provided the plug-in, or attempt to fix the problem yourself. For more information, see [Customize a Process Template](https://msdn.microsoft.com/library/ms243782.aspx). + +###To resolve a problem connecting to a server + +If you receive an error message about a problem connecting to a server, retrieving information from a server, or checking permissions to create projects, it could be caused by an incorrectly configured server in the deployment. This problem is especially common after a server move, failover, or other maintenance activity. + +Contact the TFS system administrator and request that they verify the server configuration. + + +## Q & A + + + +###Q: How do I add my custom process template to the list? + +**A:** You’ll need to first [upload your template](../work/guidance/manage-process-templates.md) using the Process Template Manager. To learn more about customizing a process template, go [here](https://msdn.microsoft.com/library/ms243782.aspx). + + +###Q: Where is the log file located? + +**A:** The log file is stored in $:\\Users\\*user name*\\AppData\\Local\\Temp and labeled vso\_TeamProjectCreation\_*yyyy\_mm\_dd\_hh\_mm\_ss*.log. + +The log shows each action taken by the wizard at the time of the failure and may include additional details about the error. You can review the log entries to find network or file related issues by searching for **Exception** or **Error**. + +###Q: How do I delete a team project? + +**A:** You can delete a team project you no longer use, which helps simplify the navigation to team projects that are in use. See [Delete a team project](delete-team-project.md). + +###Q: How do I add reporting or SharePoint portal resources? + +**A:** See one of these topics: + +- To add reporting: [Add reports to a team project](../report/admin/add-reports-to-a-team-project.md). + +- To add a SharePoint web application: [Add SharePoint products to your deployment](../tfs-server/admin/add-sharepoint-to-tfs.md). + +- To configure a team project portal to use an existing website or SharePoint site: [Configure a project portal](https://msdn.microsoft.com/library/ms242865.aspx). + +###Q: Where can I go if I have more questions? + +**A:** You can post a question or search for answers in the [Team Foundation Server – Project Management & Work Item](http://social.msdn.microsoft.com/Forums/tfsworkitemtracking/threads) forum. + + + \ No newline at end of file diff --git a/docs/accounts/delete-account-users-users-hub.md b/docs/accounts/delete-account-users-users-hub.md new file mode 100644 index 00000000000..c2b1b9efe57 --- /dev/null +++ b/docs/accounts/delete-account-users-users-hub.md @@ -0,0 +1,59 @@ +--- +title: Delete users using the user hub for Visual Studio Team Services +description: Delete users using the user hub for Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: d3a31878-a869-45a9-9bca-f46cc2682596 +ms.manager: douge +ms.author: estfan +ms.date: 8/1/2017 +--- + +# Delete users using the user hub for Visual Studio Team Services + +**VSTS Streamlined User Management Preview** + +If you are a Project Collection Administrator, you can now navigate to the new Users page by turning on "Streamlined User Management" under "Preview features". + +![Choose Preview features from your user menu in the upper right corner](_img/user-hub/preview-features.png) + + +## How does *access* differ from *permissions*? + +Access levels control which features are available to users, while permissions control their access to account resources. +[Can't access some features?](faq-add-delete-users.md#feature-access) +For TFS, learn [how to change access levels](../security/change-access-levels.md) +or [buy more access to TFS or the Test hub](../billing/buy-access-tfs-test-hub.md). + +To control access to account resources instead, learn [how to add permissions](add-users.md) or +[restrict permissions](restrict-access-tfs.md). To change how many users can access paid extensions in your +VSTS account, +learn [how to change paid extension users](../billing/change-number-paid-extension-users.md). + + +## Required permissions + +You'll need [VSTS project collection administrator or account owner permissions](faq-add-delete-users.md#find-owner). + + +## Delete users from your VSTS account + +0. Sign in to your VSTS account (```https://{youraccount}.visualstudio.com```). + + [Why am I asked to choose between my "work or school account" and my "personal account"?](faq-add-delete-users.md#ChooseOrgAcctMSAcct) + +0. Go to the users hub. Select the user, choose **...** in the name column, then choose **Remove**. + + ![Account level table of users with key information per user](_img/user-hub/acct-level-users.png) + +0. To make sure that you've removed the user completely, make sure they are not in any of your [security groups](add-users.md). + + [Why don't users appear or disappear promptly in VSTS after I add or delete them in the Users hub?](faq-add-delete-users.md#users-delay) + +0. If you deleted paid users who had Basic features, and you don't want to pay for these users, you must also +[reduce these users in the Visual Studio Marketplace](../billing/buy-basic-access-add-users.md), +so you're not charged in your next Azure billing cycle. + + > To reduce or cancel these users for the next month, you must make updates before the last day of the current month. + > Your bill won't show these change until the next month because paid users are monthly purchases. + diff --git a/docs/accounts/delete-account-users.md b/docs/accounts/delete-account-users.md new file mode 100644 index 00000000000..8fc2deea0f7 --- /dev/null +++ b/docs/accounts/delete-account-users.md @@ -0,0 +1,46 @@ +--- +title: Delete users from your VSTS account +description: Delete users from your VSTS account +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 6be2e639-2d40-4406-8f34-2a08018b4383 +ms.manager: douge +ms.author: estfan +ms.date: 1/13/2017 +--- + +# Delete users from your account in Visual Studio Team Services + +**VSTS** + +Before you start, you'll need +[VSTS project collection administrator or account owner permissions](faq-add-delete-users.md#find-owner). + +0. Sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```). + + [Why am I asked to choose between my "work or school account" and my "personal account"?](faq-add-delete-users.md#ChooseOrgAcctMSAcct) + +0. Go to **Users**. +Select the user, +then choose **Delete**. + + ![Go to Users hub](_img/_shared/users-hub-updated.png) + + ![Delete users from the Users hub](_img/assign-licenses/vso-usershub-deleteuser.png) + +0. To make sure that you've removed the user completely, +check your [security groups and permissions](add-users.md). + + [Why don't users appear or disappear promptly in VSTS after I add or delete them in the Users hub?](faq-add-delete-users.md#users-delay) + +0. If you deleted paid users who had Basic features, +and you don't want to pay for these users, you must also +[reduce these users in the Visual Studio Marketplace](../billing/buy-basic-access-add-users.md), +so you're not charged in your next Azure billing cycle. + + > To reduce or cancel these users for the next month, + > you must make updates before the last day of the current month. + > Your bill won't show these change until the next + > month because paid users are monthly purchases. + diff --git a/docs/accounts/delete-team-project.md b/docs/accounts/delete-team-project.md new file mode 100644 index 00000000000..1fac7bc8175 --- /dev/null +++ b/docs/accounts/delete-team-project.md @@ -0,0 +1,88 @@ +--- +title: Delete a team project from VSTS and TFS +description: Delete or remove a team project from Visual Studio Team Services (VSTS) or from Team Foundation Server (TFS) +ms.assetid: f8638962-1732-4600-94bb-3dc34e0ac48e +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.manager: douge +ms.author: estfan +ms.date: 08/11/2016 +--- + +# Delete a team project + +**VSTS** | **[Previous Versions](https://msdn.microsoft.com//library/ff357756(v=vs.110).aspx)** + +If you find that you have a team project you no longer use, you can delete it. Deleting a team project helps simplify the navigation to team projects that are in use. + +>**Caution:** Deleting a team project permanently removes data associated with that project from the database. You cannot recover it later. Therefore, you should [save team project data](save-team-project-data.md) that you might want to access later. + +You can delete a team project from VSTS or from an on-premises deployment of Team Foundation Server (TFS). + +## Delete a team project from Visual Studio Team Services + +1. Open the administration context for the team project collection by choosing the ![gear icon image](_img/delete-team-project/ic623347.png) gear icon. + + Open the admin context + +2. Open the ![action icon image](../work/_img/icons/actions-icon.png) menu for the team project that you want to delete. + + Open the actions menu for a team project + + If you don’t see the actions icon ![actions icon image](../work/_img/icons/actions-icon.png), either you’re not accessing VSTS or you’re not a member of the Project Collection Administrators group. Learn about [joining the Project Collection Administrators group](add-administrator-project-collection.md). + +3. You must type the name of the team project in order to initiate the delete operation. + + Delete team project dialog + + +## Delete a team project from Team Foundation Server (on-premises) + +Using the administration console, you can delete a team project from a team project collection. Afterwards, you'll need to manually delete any associated reports and SharePoint project portal. Or, you can use the [TFSDeleteProject command line tool](../tfs-server/command-line/tfsdeleteproject-cmd.md) to delete all artifacts. + +1. If you're not a member of one or more of the following administrator groups, [get those permissions now](../tfs-server/add-administrator-tfs.md): + + - Team Foundation Administrators group (required). + + - SQL Server System Administrators group (required). + + - Farm Administrators group for SharePoint Products (required when your deployment uses SharePoint Products). + +2. Open the administration console for TFS and delete the team project from its team project collection. + + ![team project collection delete button](_img/delete-team-project/ic686856.png) + +3. Choose whether to delete external data associated with the team project and then initiate the delete action. + + ![delete team projects dialog](_img/delete-team-project/ic687180.png) + +4. (Optional) To review the status of the delete action, open the **Status** tab. + + To review the details of the delete action, you can open the log file from either the **Status** tab or **Logs** tab. + + +### Delete reports that remain after deleting a project + +If your on-premises team project used reporting, and you didn’t choose to delete external artifacts, you can delete the reports using SQL Server Report Manager. From the team project collection page, delete the folder that corresponds to the deleted team project. + +![context menu with delete command](_img/delete-team-project/ic686857.png) + +### Remove the team project portal + +If your on-premises team project had a team project portal, all links to that portal will be removed from TWA and Team Explorer, but the SharePoint site or website that acted as the portal will not be deleted. If you want to delete the portal, you must do so manually after the project has been deleted. See [How to: Create, Edit, and Delete Windows SharePoint Services Sites](http://go.microsoft.com/fwlink/?LinkId=131660). + +### What to do if the delete action doesn’t finish + +For on-premises deployments, review the status and log files for the delete action. Open the **Status** tab and for **Deleted**, review the additional information in parentheses, and take the indicated action. + +- (**Processing**) means that the process has started and is in progress. + +- (**Pending**) means that the deletion process has started from a client application. The deletion might be in progress or might have failed. Because the process was started from a client application, the server cannot accurately report the status of the deletion. + + If a project deletion remains pending for a long time, try to delete the project again from the administration console. + +- (**Failed**) means that the deletion process started but did not successfully finish. The log file will contain specific information about the failure. + + Review the information about the failure, and then try to delete the project again. + + If partial data remains, you can also use the [TFSDeleteProject](../tfs-server/command-line/tfsdeleteproject-cmd.md) command line tool. diff --git a/docs/accounts/delete-users-from-services-aad.md b/docs/accounts/delete-users-from-services-aad.md new file mode 100644 index 00000000000..607f5e7d7ee --- /dev/null +++ b/docs/accounts/delete-users-from-services-aad.md @@ -0,0 +1,46 @@ +--- +title: Delete users from VSTS connected to Azure AD +description: Delete users from VSTS connected to Azure AD +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: eb0d51c2-fb28-4c55-9fcd-33a5942130f0 +ms.manager: douge +ms.author: estfan +ms.date: 1/19/2017 +--- + +# Delete users from VSTS connected to Azure AD + +**VSTS** + +For more information, see the [conceptual overview](access-with-azure-ad.md) for using Azure AD with VSTS. + + +You can just [delete the user from each VSTS account](delete-account-users.md) +where you need to remove them. If you delete the user only from Azure AD, they may still show up in VSTS, but +they won't be able to sign in. + +0. [Sign in to the Azure classic portal](https://manage.windowsazure.com/) +as the directory administrator in Azure. + + > [!NOTE] + > You can find the connected Azure AD + > only through the Azure classic portal. + +0. Go to **Visual Studio Team Services**. +Find the Azure AD that's connected to your +VSTS account. + + ![Find the directory connected to your account](_img/manage-work-access/azurefindconnecteddirectory.png) + +### Delete users from Azure AD + +0. Follow [these steps](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-users-delete-user-azure-portal) on the azure portal. + +0. [Remove the user](delete-account-users.md) +from your VSTS account and reassign their access levels, if necessary. + + + +[Troubleshooting Q&A](faq-azure-access.md) + diff --git a/docs/accounts/delete-your-vsts-account.md b/docs/accounts/delete-your-vsts-account.md new file mode 100644 index 00000000000..416c5ed113e --- /dev/null +++ b/docs/accounts/delete-your-vsts-account.md @@ -0,0 +1,137 @@ +--- +title: Delete or recover VSTS account +description: How to delete, quit, stop using, restore, or recover your VSTS account +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 82433ad3-d665-4a11-95b7-82178f493fb5 +ms.manager: douge +ms.author: estfan +ms.date: 08/01/2017 +--- + +# Delete your VSTS account + +**VSTS** + +If you don't need your Visual Studio +VSTS account, you can delete it. +If you change your mind within 90 days, +you can [recover your account](recover-your-vsts-account.md). +After 90 days, your account +and data are permanently deleted. + +When you delete your VSTS account: + +* All users lose access to account services and resources immediately. + +* Your account URL becomes available for anyone to use. +But it might take up to 1 hour before your account URL becomes available again. + +* Your account is disabled and appears deleted in your profile for 90 days. + +* If your account is linked to an Azure subscription for billing purchases, +you must unlink your account before you delete your account. + + You're still charged for any paid users and + team services that your account uses during this billing cycle. + Billing will stop after the current cycle ends. + +To delete your VSTS account, +you'll need VSTS account owner permissions. +[How do I find the account owner?](faq-delete-restore-vsts-account.md#find-owner) + +## Before you delete your VSTS account + +If your VSTS account uses an Azure subscription to bill purchases, +you must first unlink your account from your Azure subscription before deleting your account. + +To unlink your account, +you'll need VSTS account owner permissions +and at least Azure subscription Co-Administrator permissions. +[How do I find the account owner?](faq-delete-restore-vsts-account.md#find-owner) Or learn more about +[Azure subscription administrators](https://azure.microsoft.com/en-us/documentation/articles/billing-add-change-azure-subscription-administrator/). + +0. Sign in to the [Azure classic portal](https://manage.windowsazure.com/) +or [Azure portal](https://portal.azure.com). + +0. Unlink your account from your Azure subscription. + + **Azure classic portal** + + ![Select your VSTS account, unlink your account from your Azure subscription](_img/delete-account/azureunlinkvsoaccount.png) + + **Azure portal** + + ![Browse, VSTS accounts, select your account](_img/_shared/ap_vso_selectlinkedaccount.png) + + ![Unlink your account from an Azure subscription](_img/delete-account/app_unlinkvsoaccount2.png) + + [Need help?](faq-delete-restore-vsts-account.md#get-support) + +## Delete your VSTS account + +You'll need at least Basic access and VSTS account owner +permissions to delete your VSTS account. +[How do I find the account owner?](faq-delete-restore-vsts-account.md#find-owner) + +0. Sign in to your VSTS account (```https://{youraccount}.visualstudio.com```). + +0. Go to your VSTS account settings. + + ![Go to account settings](../_shared/_img/account-settings-new-ui.png) + +0. Under **Settings**, delete your account. + + ![Click Delete account](_img/delete-account/vsodeleteaccount.png) + + You'll be redirected to www.visualstudio.com, but you'll stay signed in. + +0. To review your accounts, go to your +[Visual Studio profile](https://app.vsaex.visualstudio.com/profile/view) +where you'll see your deleted account. + + ![Your account will appear deleted on your account list](_img/delete-account/deleted-account.png) + + [Need help?](faq-delete-restore-vsts-account.md#get-support) + + +## Restore your VSTS account + +Your account will be disabled but available for 90 days after you delete it. +If you change your mind during this time, you can recover your account. +After 90 days, your account and data are permanently deleted. + +You'll need VSTS account owner +permissions to restore your VSTS account. +[How do I find the account owner?](faq-delete-restore-vsts-account.md#find-owner) + +0. Sign in to your [Visual Studio profile](https://app.vsaex.visualstudio.com/profile/view). + + [Why am I asked to choose between my work or school account and my personal account?](faq-delete-restore-vsts-account.md#ChooseOrgAcctMSAcct) + +0. Restore your account. + + ![Next to your deleted account, click Restore](_img/delete-account/restore-account.png) + + * If your account URL is still available, you can restore your account. + + ![Confirm restoring your account](_img/delete-account/restore-confirm.png) + + * If your account URL isn't available, provide a new URL. + + ![Rename your deleted account](_img/delete-account/rename-deleted-account.png) + +0. After you restore your account: + + * If billing was set up for your account, you'll have to set it up again. Just +[relink your account](../billing/set-up-billing-for-your-account-vs.md) to an Azure subscription. + + * If your account was connected to Azure AD for authenticating user access, you won't have to reconnect it again. + + [Need help?](faq-delete-restore-vsts-account.md#get-support) + + +## Troubleshooting + +[Troubleshooting](faq-delete-restore-vsts-account.md) + diff --git a/docs/accounts/disconnect-account-from-aad.md b/docs/accounts/disconnect-account-from-aad.md new file mode 100644 index 00000000000..07c9868a34d --- /dev/null +++ b/docs/accounts/disconnect-account-from-aad.md @@ -0,0 +1,82 @@ +--- +title: Disconnect your VSTS account from your Azure AD +description: Azure Active Directory (Azure AD) - Control access to Visual Studio Team Services (VSTS, Visual Studio Online, VSO) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 3eb744cf-854d-4cbd-b725-c2e070bd922b +ms.manager: douge +ms.author: estfan +ms.date: 1/19/2017 +--- + +# Disconnect your VSTS account from your directory + +**VSTS** + + + +To stop using your organization's directory and return to signing in with Microsoft accounts, +you can disconnect your VSTS account from your directory. + +For more information, see the [conceptual overview](access-with-azure-ad.md) for using Azure AD with VSTS. + + +You'll need: + +* [Microsoft accounts](https://signup.live.com/) +for all users in your VSTS account, +including yourself as VSTS account owner + +* [VSTS account ownership](faq-change-app-access.md#find-owner) for your Microsoft account + +* Global administrator permissions in your Azure AD +for your Microsoft account as the VSTS account owner. You'll need both +because Azure AD users can't disconnect VSTS accounts from directories. +You can add Microsoft accounts to a directory as external users. +Learn about [managing Azure administrators](https://azure.microsoft.com/en-us/documentation/articles/active-directory-assign-admin-roles/). + +**What happens to current users?** Users will continue working seamlessly if they have Microsoft accounts +that share the same sign-in addresses that they use now. +Otherwise, they won't have access until you add them to +VSTS as new users. They can migrate everything except work history, +relink Visual Studio subscriptions, and have their access levels reassigned to their new identities. + +0. [Sign in to the Azure classic portal](https://manage.windowsazure.com/) +with your Microsoft account as the VSTS account owner. + + > [!NOTE] + > You can disconnect your VSTS account + > from your directory only through the Azure classic portal. + + [Why am I asked to choose between a work or school account and a personal account?](faq-azure-access.md#ChooseOrgAcctMSAcct) + +0. Go to **Visual Studio Team Services**. +Select your VSTS account. + + ![Select your account](_img/manage-work-access/azureselectconnectedvso.png) + +0. Chooose **Configure** > **Disconnect**. + + ![Configure account](_img/manage-work-access/azure-configure-disconnect.png) + + ![Disconnect account from directory](_img/manage-work-access/azuredisconnectdirectory1.png) + +0. Select **None (no directory connection)**. + + ![Select no directory connection](_img/manage-work-access/azuredisconnectdirectory2.png) + + ![Account is now disconnected from your directory](_img/manage-work-access/azuredisconnectdirectory3.png) + + Your VSTS account is disconnected from your organization's directory. + Only users with Microsoft accounts can sign in. + **Before you disconnect your VSTS account from your directory**, + make sure to **change the VSTS account owner to a Microsoft account**, + and not to a school or work account. If you don't do this, + you can't sign in to your VSTS account unless your work or school + account has the same email address as your Microsoft account. + + [More questions about disconnecting?](faq-azure-access.md#faq-disconnect) + + +[Troubleshooting Q&A](faq-azure-access.md) + diff --git a/docs/accounts/faq-add-administrators.md b/docs/accounts/faq-add-administrators.md new file mode 100644 index 00000000000..38c1f746cad --- /dev/null +++ b/docs/accounts/faq-add-administrators.md @@ -0,0 +1,56 @@ +--- +title: Troubleshooting adding administrators to VSTS project collections and projects +description: Troubleshooting adding administrators to VSTS project collections and projects +ms.assetid: 7ad07299-c9c5-4748-bf31-6518356ee0d0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.manager: douge +ms.author: estfan +ms.date: 03/29/2017 +--- + +# Troubleshooting adding administrators to VSTS project collections and projects + +**VSTS** + +#### Q: When do I need to add someone to the team project collection administrator role in TFS? + +**A:** It varies. For most organizations that use TFS, project collection administrators manage the collections that members of the Team Foundation Administrators group create, but members of the **Project Collection Administrators** group do not create the collections themselves. Project collection administrators also perform any operations that are required to maintain the collection, such as creating team projects, adding users to groups, or modifying the settings for the collection. + +#### Q: What are the optimal permissions needed to administer a team project collection across all its components and dependencies? + +**A:** A team project collection administrator for TFS must be a member of the following groups or have the following permissions: + +- Team Foundation Server: **Project Collection Administrators** or the appropriate [collection-level permissions](../security/permissions.md#collection) set to **Allow**. + +- SharePoint Products: If the collection is configured with a site collection resource, **Site Collection Administrators**. + +- Reporting Services: If the collection is configured with reporting resources, **Team Foundation Content Manager** + +#### Q: I'm an admin, but I don't seem to have all the permissions I need to add a team project collection administrator. What might I need? + +**A: These are the required permissions:** + +- In TFS, you must belong to the **Project Collection Administrators **group, or your **View Server-Level Information** and **Edit Server-Level Information** permissions must be set to **Allow**. + +- To add permissions for SharePoint Products, you must be a member of the **Site Collection Administrators** group or the **Farm Administrators** group for SharePoint Products. + +- To add permissions for Reporting Services, you must be a member of the **Content Managers** group or the **Team Foundation Content Managers** group for Reporting Services. + +>**Important:** +> To perform administrative tasks such as creating team project collections, your user account requires administrative permissions, and the service account that the Team Foundation Background Job Agent uses also must have certain permissions granted to it. For more information, see [Service accounts and dependencies in Team Foundation Server](../tfs-server/admin/service-accounts-dependencies-tfs.md) and [Team Foundation Background Job Agent](../tfs-server/architecture/background-job-agent.md). + +#### Q: Where can I find information about each individual permission? + +**A:** You can find detailed information about individual permissions and their relationship to default groups in TFS in the [Permission reference for Team Foundation Server](../security/permissions.md). + +## Team project + +0. From the team page, click the ![Settings icon](_img/admin-gear-icon.png) to go to the team administraton page. + +0. Add the user to the **Project Administrators** group. + +0. If you use SharePoint with TFS, go to the team project portal and choose **Share** to give the user **Full Control**. + + ![Choose the SharePoint group and add users](_img/add-administrator-tfs/invite-administrators.png) + diff --git a/docs/accounts/faq-add-delete-users.md b/docs/accounts/faq-add-delete-users.md new file mode 100644 index 00000000000..19170a2c54e --- /dev/null +++ b/docs/accounts/faq-add-delete-users.md @@ -0,0 +1,273 @@ +--- +title: Manage users and access user hub Visual Studio Team Services +description: Add users and assign access levels in user hub Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 7107fb6c-c132-45c2-a0d1-d44e9270e907 +ms.manager: douge +ms.author: estfan +ms.date: 4/17/2017 +--- + +# Troubleshoot adding and deleting users in the VSTS user hub + +**VSTS** + +## Permissions + +#### Q: Why can't I manage users? + +A: To access the Users hub and manage users, you must have +[VSTS project collection administrator or account owner permissions](#find-owner). + + + + +[!INCLUDE [find-project-collection-administrator](../_shared/qa-find-project-collection-administrator.md)] + +[!INCLUDE [find-account-owner](../_shared/qa-find-account-owner.md)] + + + + +[!INCLUDE [user-delay](../_shared/qa-user-delay.md)] + + +## Visual Studio subscriptions + + + +#### Q: When do I select "Visual Studio/MSDN Subscriber"? + +A: Assign this access level to users who have active and valid +[Visual Studio subscriptions](#EligibleMSDNSubscriptions). +You'll need the email address that's associated with this subscription. +VSTS automatically recognizes and validates Visual Studio +subscribers who have VSTS as a benefit. + +For example, if you select "Visual Studio/MSDN Subscriber", +but you don't have a valid and active Visual Studio subscription, you can only +[work as a stakeholder](../quickstart/get-started-stakeholder.md). + + + +#### Q: Which Visual Studio subscriptions can I use with VSTS? + +A: These subscriptions include VSTS at no extra charge +([check here for the current list](https://azure.microsoft.com/en-us/pricing/details/visual-studio-team-services/)): + +* Visual Studio Enterprise - monthly +* Visual Studio Enterprise - annual +* Visual Studio Enterprise with MSDN, +including subscriptions offered through BizSpark and Microsoft Partner Network (MPN) +* Visual Studio Professional - monthly +* Visual Studio Professional - annual +* Visual Studio Professional with MSDN +* Visual Studio Test Professional with MSDN +* MSDN Platforms + +Not eligible: + +* MSDN Operating Systems +* MSDN Essentials +* Visual Studio Professional (MPN) + +Learn more about [Visual Studio subscriptions](https://www.visualstudio.com/vs/pricing/). + + + +#### Q: Which specific subscriptions do "Visual Studio Enterprise subscription" and "Visual Studio Professional subscription" include? + +A: "Visual Studio Enterprise subscription" can describe: + +* Visual Studio Enterprise - monthly +* Visual Studio Enterprise - annual +* Visual Studio Enterprise with MSDN + +"Visual Studio Professional subscription" can describe: + +* Visual Studio Professional - monthly +* Visual Studio Professional - annual +* Visual Studio Professional with MSDN + + + +#### Q: Why won't my Visual Studio subscription validate? + +A: This might happen for different reasons: + +* Make sure that you have an active, valid, and +[eligible Visual Studio subscription](#EligibleMSDNSubscriptions) +that you can use with VSTS. + +* You might experience a delay if your subscription is new. + +* If you used a Microsoft account to activate your Visual Studio subscription, +and you're using an Azure "work or school account" with VSTS, +learn [how to add your "work or school account" to your subscription](../billing/link-msdn-subscription-to-organizational-account-vs.md). + +Still having problems? Try these +[troubleshooting tips](http://blogs.msdn.com/b/visualstudioalm/archive/2014/03/19/visual-studio-online-best-practices-troubleshooting-issues-with-the-quot-eligible-msdn-subscriber-license-type.aspx). +If you need more help, contact [Support](https://www.visualstudio.com/support/). + + +#### Q: Why do Visual Studio subscribers' access levels change after they sign in? + +A: VSTS recognizes Visual Studio subscribers +and will automatically assign them access based on their subscription, +no matter the current access level that's assigned to them. + + + +#### Q: What happens if a user's subscription expires? + +A: If no other access levels are available, they'll +[work as stakeholders](../quickstart/get-started-stakeholder.md). +To restore access, they must renew their subscription. + + + +#### Q: What happened to Visual Studio Online Professional? + +A: On December 1, 2015, we replaced Visual Studio Online Professional with the +[Visual Studio Professional monthly subscription](https://marketplace.visualstudio.com/items/ms.vs-professional-monthly) +and will transition users automatically. While Visual Studio Online Professional +purchases now appear as Visual Studio Professional monthly subscriptions on your monthly invoice, +we haven't determined when users will be transitioned systematically. +This transition provides an upgrade by offering access to unlimited +VSTS accounts, not just one account, like Visual Studio Online Professional. +The rest stays the same - monthly access to the Visual Studio Professional IDE, +and pricing remains at $45 per user, per month. +Learn more about [Visual Studio subscriptions](https://www.visualstudio.com/products/how-to-buy-vs). + +If you're buying Professional users for a specific VSTS account, +which is possible only if you bought before November 2015, +and want to upgrade, do this: + +0. Before the last day of the calendar month, +sign in to the [Azure portal](https://portal.azure.com), +and reduce the number of paid Visual Studio Online Professional +users to 0. + + This change will take effect on the 1st day of next month. + This means that in the next calendar month, + you won't be billed for Visual Studio Online Professional users at all. + +0. On the 1st day of the next calendar month, +[go to the Marketplace](https://marketplace.visualstudio.com/items/ms.vs-professional-monthly) +and buy Visual Studio Professional monthly subscriptions for the same users. +Learn [how to buy Visual Studio subscriptions](../billing/vs-subscriptions/buy-vs-subscriptions.md). + + **Note** If you want to use your monthly Azure credits as a Visual Studio subscriber to pay for users, + make sure to remove your subscription's default spending limit indefinitely. + [Learn more](../billing/faq-billing-setup.md#AzureMSDNSubscription). + + +## User access + +#### Q: What does *Last Access* mean in the All Users view? + +Last Access is the last date a user accessed any VSTS resources or services. Accessing VSTS includes using +*accountname*.visualstudio.com directly as well as using resources or services indirectly, such as using the Package Management +service from a build definition or pushing code to VSTS from a git command line or from an IDE. + + + +[!INCLUDE [can-paid-Basic-users-join-other-accounts](../_shared/qa-can-paid-basic-users-join-other-accounts.md)] + + + +[!INCLUDE [no-access-existing-features](../_shared/qa-no-access-existing-features.md)] + + + +#### Q: Why did I or my team member lose access to certain features? + +A: This might happen for different reasons, +but meanwhile, you or your team member can continue +[working as a stakeholder](../quickstart/get-started-stakeholder.md): + +* Your or your team member's Visual Studio subscription has expired. +Meanwhile, they'll [work as stakeholders](../quickstart/get-started-stakeholder.md), +or you can give them Basic access until they renew their subscriptions. +After they sign in, VSTS will restore their access automatically. + +* The Azure subscription used for billing is no longer active. +This affects all purchases made with this subscription, +including Visual Studio subscriptions. +To fix this problem, visit the [Azure account portal](https://portal.azure.com). + +* The Azure subscription used for billing was +unlinked from your VSTS account. +Learn more about [linking your account](../billing/set-up-billing-for-your-account-vs.md). + +* Your VSTS account has more users with Basic access +than the number of users that you're paying for in Azure. +Your account includes 5 free users with Basic access, +but if you need to add more users with Basic access, +you can [pay for these users](../billing/buy-basic-access-add-users.md). +Otherwise, on the 1st day of the calendar month, users who haven't +signed into your account the longest will lose access first. +If your account has users who don't need access anymore, +[remove them from your account](delete-account-users.md). + +* You no longer have access to +[features that are available only as extensions](https://www.visualstudio.com/team-services/compare-features/). +This might happen for different reasons. + + * Your access level no longer meets your extension's requirements. + Most extensions require at least Basic access, not Stakeholder. + For more details, see the extension's description + in the [Visual Studio Marketplace](https://marketplace.visualstudio.com). + + * The extension was uninstalled. You can reinstall the extension by + visiting the extension page in the [Visual Studio Marketplace](https://marketplace.visualstudio.com). + + * If you're using a paid extension, + the Azure subscription used for billing might + be unlinked from your VSTS account + or might no longer be active. Learn more about + [linking your VSTS account](../billing/set-up-billing-for-your-account-vs.md), + or visit the [Azure account portal](https://account.windowsazure.com/subscriptions) + to check your payment details. + + +### Azure Active Directory (Azure AD) and your account + + + +#### Q: Why do I have to add users to a directory? + +A: Your VSTS account authenticates users and controls access +through Azure Active Directory (Azure AD). All users must be directory members to get access. + +If you're a directory administrator, you can +[add users to the directory](https://msdn.microsoft.com/library/azure/hh967632.aspx). +If you're not, work with your directory administrator to add users. +Learn more about [controlling access with a directory](access-with-azure-ad.md). + + + +[!INCLUDE [does-account-use-azuread](../_shared/qa-does-account-use-azuread.md)] + + + +#### Q: My account controls access with Azure Active Directory (Azure AD). Can I just delete users from the directory? + +A: Yes, but this removes their access to all VSTS accounts and other +assets associated with that directory. You must have Azure AD global administrator permissions to +[delete a user from your Azure AD](delete-users-from-services-aad.md). + + + +[!INCLUDE [choose-msa-azuread-account](../_shared/qa-choose-msa-azuread-account.md)] + +[!INCLUDE [choose-msa-azuread-account2](../_shared/qa-choose-msa-azuread-account2.md)] + +[!INCLUDE [why-cant-sign-in-msa-azuread-account](../_shared/qa-why-cant-sign-in-msa-azuread-account.md)] + + +### More support + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] + diff --git a/docs/accounts/faq-add-team-members.md b/docs/accounts/faq-add-team-members.md new file mode 100644 index 00000000000..cecc3b6de6e --- /dev/null +++ b/docs/accounts/faq-add-team-members.md @@ -0,0 +1,94 @@ +--- +title: VSTS - Add team project members | Visual Studio Team Services +description: Add members to team projects in Visual Studio Team Services (Visual Studio Online, VSTS, VSO) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: d3945cd4-d024-4d6f-b949-9feaa62e9948 +ms.manager: douge +ms.author: estfan +ms.date: 1/11/2017 +--- + +# Troubleshooting adding members to team projects in Visual Studio Team Services (VSTS) + +**VSTS** + + + + +####Q: Why can't I add any more members to my team project? + +A: Your VSTS account is free for the first 5 users with Basic access. +You can add unlimited Stakeholders and Visual Studio subscribers for no extra charge. +After you assign all 5 free users with Basic access, +you can continue adding Stakeholders and Visual Studio subscribers. +To add a 6th user or more with Basic access, +you'll need to [set up billing in Azure](../billing/set-up-billing-for-your-account-vs.md). +You can then [pay for more users who need Basic access](../billing/buy-basic-access-add-users.md), +return to your VSTS account, +[add these users, and assign them Basic access](add-account-users-assign-access-levels.md). +This lets you pay monthly for their access, and you can cancel anytime. + +If you need more Visual Studio subscriptions, +learn [how to buy these subscriptions](../billing/vs-subscriptions/buy-vs-subscriptions.md) +from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/subscriptions). + + + +####Q: Why can't some users sign in? + +A: This might happen because users must +sign in with Microsoft accounts +unless your VSTS account +controls access with Azure Active Directory (Azure AD). +If your account is connected to Azure AD, +users must be directory members to get access. +[How do I find out if my account uses Azure Active Directory (Azure AD)?](#ConnectedDirectory) + +If you're an Azure AD administrator, +you can add users to the directory. If you're not, +work with the directory administrator to add them. +Learn [how to control account access with Azure AD](access-with-azure-ad.md). + + + +[!INCLUDE [no-access-existing-features](../_shared/qa-no-access-existing-features.md)] + +####Q: Why did some users lose access to certain features? + +A: This might happen for [different reasons](faq-add-delete-users.md#stopped-features). + + + +[!INCLUDE [does-account-use-azuread](../_shared/qa-does-account-use-azuread.md)] + + + +####Q: How do I remove users from my VSTS account? + +A: Learn [how to delete users](delete-account-users.md) +across all team projects in your VSTS account. +If you paid for more users, but don't need their account access +anymore, you must reduce your paid users to avoid charges. + + + +[!INCLUDE [user-delay](../_shared/qa-user-delay.md)] + + + +[!INCLUDE [choose-msa-azuread-account](../_shared/qa-choose-msa-azuread-account.md)] + +[!INCLUDE [choose-msa-azuread-account2](../_shared/qa-choose-msa-azuread-account2.md)] + +[!INCLUDE [why-cant-sign-in-msa-azuread-account](../_shared/qa-why-cant-sign-in-msa-azuread-account.md)] + + + +[!INCLUDE [find-project-collection-administrator](../_shared/qa-find-project-collection-administrator.md)] + +[!INCLUDE [find-account-owner](../_shared/qa-find-account-owner.md)] + + + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] diff --git a/docs/accounts/faq-azure-access.md b/docs/accounts/faq-azure-access.md new file mode 100644 index 00000000000..ccdfcd9fa5f --- /dev/null +++ b/docs/accounts/faq-azure-access.md @@ -0,0 +1,274 @@ +--- +title: Troubleshooting access with Azure Active Directory (Azure AD) +description: Troubleshooting access with Azure Active Directory (Azure AD) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: d51de748-c53e-4468-ad9b-275d6bf1a4dd +ms.manager: douge +ms.author: estfan +ms.date: 1/19/2017 +--- + +# Troubleshooting access with Azure Active Directory (Azure AD) + +**VSTS** + +## General + + +#### Q: Can I use Office 365 Azure AD with VSTS? + +A: To connect your VSTS account to an Office 365 Azure AD, +you can't use the [free subscription](https://technet.microsoft.com/library/dn832618.aspx) +that you can activate for your Office 365 Azure AD. + +You must [sign up for a new Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +or use an existing Azure subscription +that's **not** from one of these offers: + +* An [Azure Free Trial](https://azure.microsoft.com/en-us/offers/ms-azr-0044p/) + +* A [free Azure AD subscription](https://technet.microsoft.com/library/dn832618.aspx) + +* From the [Cloud Solution Provider program](https://partner.microsoft.com/en-US/Solutions/cloud-reseller-overview) + +You must then associate that subscription with your Office 365 Azure AD. You'll also need additional subscription +administrator permissions beyond Co-administrator permissions. + +Learn how to [associate your Azure subscription to your Office 365 Azure AD](https://docs.microsoft.com/en-us/azure/billing-add-office-365-tenant-to-azure-subscription). + + + + +[!INCLUDE [choose-msa-azuread-account](../_shared/qa-choose-msa-azuread-account.md)] + +[!INCLUDE [choose-msa-azuread-account2](../_shared/qa-choose-msa-azuread-account2.md)] + + +[!INCLUDE [find-account-owner](../_shared/qa-find-account-owner.md)] + +[!INCLUDE [why-no-owned-accounts](../_shared/qa-why-no-owned-accounts.md)] + + +[!INCLUDE [why-cant-sign-in-msa-azuread-account](../_shared/qa-why-cant-sign-in-msa-azuread-account.md)] + + + +## Add users to directory + + +####Q: Can I switch current users from Microsoft accounts to work accounts in VSTS? + +A: No, although you can add new work accounts to your VSTS account, +they're treated as new users. If you want to access all your work, +including its history, you must use the same sign-in addresses that +you used before your VSTS account was connected to your Azure AD. +You can do this by adding your Microsoft account as a member to your Azure AD. + +####Q: Why can't I add users from other directories to my Azure AD? + +A: You must be a member or have read access in those directories. +Otherwise, you can add them +[using B2B collaboration through your Azure AD administrator](https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2b-collaboration-overview/), +using their Microsoft accounts, +or create new work accounts for them in your directory. + +####Q: How do I use my work or school account with my Visual Studio with MSDN subscription? + +A: If you used a Microsoft account to activate a +[Visual Studio with MSDN subscription](https://www.visualstudio.com/vs/pricing/) +that includes VSTS as a benefit, +you can add a work or school account that's +managed by Azure Active Directory to your subscription. +Learn [how to link work or school accounts to Visual Studio with MSDN subscriptions](../billing/link-msdn-subscription-to-organizational-account-vs.md). + + +####Q: Can I control access to my VSTS account for external users in the connected directory? + +A: Yes, but only for external users who are +[added as guests through Office 365](https://support.office.com/en-us/article/Share-sites-or-documents-with-people-outside-your-organization-80E49744-E30F-44DB-8D51-16661B1D4232) +or [added using B2B collaboration by your Azure AD administrator](https://azure.microsoft.com/en-us/documentation/articles/active-directory-b2b-collaboration-overview/). +These external users are managed outside the connected directory. +To learn more, contact your Azure AD administrator. The setting below doesn't affect +[users who are added directly to your organization's directory](https://azure.microsoft.com/en-us/documentation/articles/active-directory-create-users/). + +> Before you start, make sure you have at least Basic access, not Stakeholder. + +**To control account access for external users added through Office 365 or Azure AD B2B collaboration** + +0. Go to your VSTS account's control panel. + + ![Go to account control panel](_img/_shared/accountsettings.png) + +0. Go to your account settings. +Allow or deny account access for external users added as guests. + + ![Change external guest access](_img/manage-work-access/guest-access.png) + + +## Connect to directory + + +####Q: Can I connect my VSTS account to an Azure AD created from Office 365? + +A: Yes, but if you can't find your Office 365 Azure AD +when connecting your account in the Azure portal, +learn what you're missing in this FAQ: +[Why don't I see the directory that I want to connect?](#why-not-my-directory) + + +####Q: Why don't I see a directory associated with my Azure subscription? + +A: You need an active and valid +["full" Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/), +such as a ["Pay-As-You-Go" subscription](https://azure.microsoft.com/en-us/offers/ms-azr-0003p/), +associated with your organization's Azure AD and at +least Co-administrator permissions for your subscription. +You need both to make your directory appear in the Azure portal, +so that you can link your subscription +and connect your Azure AD to your VSTS account. Learn +[how to manage Azure subscription administrators](../billing/add-backup-billing-managers.md). + + +####Q: Why don't I see the directory that I want to connect? What should I do? + +A: This might happen because: + +* You don't have +[VSTS account owner permissions](faq-change-app-access.md#find-owner) to manage directory connections. + +* You don't have an active and valid +["full" Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/), +such as a ["Pay-As-You-Go" subscription](https://azure.microsoft.com/en-us/offers/ms-azr-0003p/), +associated with your organization's Azure AD and at +least Co-administrator permissions for your subscription. +You need both to make your directory appear in the Azure portal, +so that you can link your subscription +and connect your Azure AD to your VSTS account. Learn +[how to manage Azure subscription administrators](../billing/add-backup-billing-managers.md). + + For example, if you want to use an Office 365 Azure AD, + you can't use the [free subscription](https://technet.microsoft.com/library/dn832618.aspx) + that you can get for Office 365 Azure AD. + You must [sign up for a new Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) + or use an existing Azure subscription + that's **not** from one of these offers: + + * An [Azure Free Trial](https://azure.microsoft.com/en-us/offers/ms-azr-0044p/) + * A [free Azure AD subscription](https://technet.microsoft.com/library/dn832618.aspx) + * From the [Cloud Solution Provider program](https://partner.microsoft.com/en-US/Solutions/cloud-reseller-overview) + + You must then associate that subscription with your Office 365 Azure AD. + To do this for your Office 365 Azure AD, + you'll also need addtional subscription administrator permissions + beyond Co-administrator permissions. Learn how to + [associate your Azure subscription to your Office 365 Azure AD](https://docs.microsoft.com/en-us/azure/billing-add-office-365-tenant-to-azure-subscription), + or learn more about the + [relationship between your Azure subscription and your Azure AD](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory#how-an-azure-subscription-is-related-to-azure-ad). + + + +* Your VSTS account isn't linked to the Azure +subscription that's associated with your directory. Learn +[how to link your VSTS account to an Azure subscription](../billing/set-up-billing-for-your-account-vs.md). + + **Important** This link also sets up account billing, + so you can bill VSTS purchases to your Azure subscription. + Some Azure subscriptions have a + [spending limit](https://azure.microsoft.com/en-us/pricing/spending-limits/). + If your Azure subscription has a spending limit, + and you want to bill purchases to this subscription, + you must remove this limit **indefinitely**. + This prevents disabling your Azure subscription the + next month when your monthly charges are billed. + Otherwise, all resources billed to this subscription will be suspended, + including all VSTS purchases, + Visual Studio Marketplace purchases, + and Azure resources. Learn more about + [how to manage your subscription's spending limit](https://msdn.microsoft.com/library/azure/dn465781.aspx). + + If you're the subscription [Account Administrator](https://azure.microsoft.com/en-us/documentation/articles/billing-add-change-azure-subscription-administrator), + visit the Azure Account Center to remove the spending limit: + + 0. Sign in to [Azure Account Center (**Account** > **subscriptions**)](https://portal.azure.com). + 0. Select your Azure subscription. + 0. Remove your spending limit **indefinitely**. + + +####Q: What if my VSTS account is already linked to an Azure subscription? + +A: You can [change the Azure subscription](../billing/change-azure-subscription.md) +that's linked to your VSTS account. +However, unlinking will cause your account +to go back to the +[free account limits](../billing/faq-billing-setup.md#unlinking), +and some users might lose access until you relink. + +####Q: What happens if I unlink my Azure subscription while my VSTS account is connected to a directory? + +A: This doesn't affect your account's connection to the directory, +but unlinking will cause your account to go back to the +[free account limits](../billing/faq-billing-setup.md#unlinking), +and some users might lose access until you relink. + + +####Q: Why is my VSTS account already connected to a directory? Can I change that directory? + +A: Your VSTS account was connected to a directory when the +account owner created the account or sometime after that. +When you create a VSTS account with a work or school account, +your VSTS account is automatically connected to the directory +that manages that work or school account. +You can [disconnect your VSTS account](disconnect-account-from-aad.md) from this directory +and reconnect to another directory, but you might have to migrate some users. + + +####Q: My alternate credentials don't work anymore. What do I do? + +A: This happens after you connect your VSTS +account to a directory. You must +[set up your credentials](http://support.microsoft.com/kb/2991274) +again for the account that you connected. + + +####Q: Why can't users sign in after my VSTS account is connected to a directory? + +A: Make sure their sign-in addresses are in the +connected directory and in your VSTS account. +If they're not directory members, and you have at least +[user administrator permissions](https://azure.microsoft.com/en-us/documentation/articles/active-directory-assign-admin-roles/), +you can [add them to the directory](https://azure.microsoft.com/en-us/documentation/articles/active-directory-create-users/). + +Some users have sign-in addresses that are shared by their +Microsoft account and their work or school account. +These are treated as separate identities with different profiles, +security settings, and permissions. When they're asked to choose +which account they want to use when they sign in, they should +choose the identity that's a member in your directory because +only directory members can get access to your account. + +If you have a Visual Studio with MSDN subscription that +[includes VSTS](https://www.visualstudio.com/vs/pricing/) as a benefit, +and you activated that subscription with a Microsoft account, +you can add a work or school account that's managed by Azure Active Directory to your subscription. +Learn [how to link work or school accounts to Visual Studio with MSDN subscriptions](../billing/link-msdn-subscription-to-organizational-account-vs.md). + + +## Disconnect from directory + +####Q: Why can't users sign in after my VSTS account is disconnected? + +A: They must now use Microsoft accounts to sign in. +They can continue working seamlessly if they have Microsoft +accounts with the same sign-in addresses that they use now. + +If they must create Microsoft accounts with different sign-in addresses, +you must add those sign-in-addresses to your VSTS account, +and reassign access to them. They can migrate work that they want to keep, +except work history. They might also have to relink their MSDN +subscriptions. They can use any email address to create a Microsoft account. + + + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] + diff --git a/docs/accounts/faq-change-app-access.md b/docs/accounts/faq-change-app-access.md new file mode 100644 index 00000000000..8f362822955 --- /dev/null +++ b/docs/accounts/faq-change-app-access.md @@ -0,0 +1,57 @@ +--- +title: Change app access policies | Visual Studio Team Services +description: Change app access policies for Visual Studio Team Services (VSTS, Visual Studio Online, VSO) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 25b0a617-6d77-44d7-80a5-bf38a541817e +ms.manager: douge +ms.author: estfan +ms.date: 08/04/2016 +--- + +# Troubleshootig changing app access policies for your account + +**VSTS** + + +####Q: How do personal access tokens differ from alternate authentication credentials? + +A: Personal access tokens are a more convenient and +secure replacement for alternate authentication credentials. +You can limit a token's use to a specific lifetime, +a VSTS account, +and to [scopes](https://www.visualstudio.com/integrate/get-started/Authentication/oauth#scopes) +of activities that the token authorizes. Learn more about +[personal access tokens here](use-personal-access-tokens-to-authenticate.md). + +####Q: If I deny access to one authentication method in one VSTS account, does that affect all the accounts I own? + +A: No, you can still use that method in all the other VSTS accounts that you own. +[Personal access tokens](use-personal-access-tokens-to-authenticate.md) apply to specific accounts +or to all accounts, based on your selection when you created the token. + +####Q: If I deny access to an authentication method, then allow access again, will the apps that need access continue to work? + +A: Yes, those apps will continue working. + +####Q: What apps integrate with Visual Studio Team Services? + +A: Find the [apps that integrate with VSTS here](https://marketplace.visualstudio.com/VSTS). + + + +[!INCLUDE [find-account-owner](../_shared/qa-find-account-owner.md)] + +[!INCLUDE [why-no-owned-accounts](../_shared/qa-why-no-owned-accounts.md)] + + + +[!INCLUDE [choose-msa-azuread-account](../_shared/qa-choose-msa-azuread-account.md)] + +[!INCLUDE [choose-msa-azuread-account2](../_shared/qa-choose-msa-azuread-account2.md)] + +[!INCLUDE [why-cant-sign-in-msa-azuread-account](../_shared/qa-why-cant-sign-in-msa-azuread-account.md)] + + + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] diff --git a/docs/accounts/faq-create-account.md b/docs/accounts/faq-create-account.md new file mode 100644 index 00000000000..8d51f0c1381 --- /dev/null +++ b/docs/accounts/faq-create-account.md @@ -0,0 +1,160 @@ +--- +title: Troubleshoot creating a VSTS account +description: Troubleshoot creating a VSTS account +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 5288549e-30cb-4ac0-81dd-8ba4890e8448 +ms.manager: douge +ms.author: estfan +ms.date: 03/30/2017 +--- + +# Troubleshoot creating a VSTS account + +**VSTS** + + + +#### Q: What users can join for free? What do they get in Visual Studio Team Services? + +A: VSTS is free for these users to join: + +* 5 users who get [Basic features](https://www.visualstudio.com/team-services/compare-features/) +like version control, tools for Agile, Java, build, release management, and more + +* Unlimited users who get [Stakeholder features](https://www.visualstudio.com/team-services/compare-features/) +like working with your backlog, work items, and queries + +* Unlimited [Visual Studio subscribers](https://www.visualstudio.com/team-services/compare-features/) +who also get Basic features, and in some cases, additional features with specific extensions, like +[Test Manager](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web) + + Learn what else you get with [Visual Studio Team Services](https://www.visualstudio.com/team-services/pricing/). + + + + + +[!INCLUDE [browser-problems](../_shared/qa-browser-problems.md)] + +####Q: Which Visual Studio subscriptions can I use with Visual Studio Team Services? + +A: Go here to find +[Visual Studio subscriptions that include Visual Studio Team Services](https://azure.microsoft.com/pricing/details/visual-studio-team-services/). + +####Q: Why am I asked to provide profile details? + +A: If you're a new user, you can change your profile details. +You only have to do this step once. + +0. Confirm your profile details. + + ![Confirm profile details](_img/sign-up-visual-studio-team-services/create-profile-msa.png) + +0. Continue creating your VSTS account. + + ![Create your VSTS account](_img/sign-up-visual-studio-team-services/my-info-new-account.png) + + + +[!INCLUDE [account-location-process-template](../_shared/qa-account-location-process-template.md)] + +####Q: Why are some features not available with my account? + +A: Some features require that you install an extension, +which are available as free or paid. + +For example, [web-based test case management](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web) +requires that you install the Test Manager extension, +but you can [try paid extensions for free](../billing/try-additional-features-vs.md), +if you haven't started the extension trials already. +Otherwise, you can [pay for user access](/vsts/marketplace/install-vsts-extension) +to these features. + +####Q: How many VSTS accounts can I create? + +A: You can [create multiple VSTS accounts](#create-another-account). +But rather than create another account, you might consider +[creating another team project](#another-team-project). +Your account can have unlimited private team projects using Git or TFVC. + +There's no limit on how many VSTS accounts where you can be a member. + + + +####Q: How do I create another VSTS account? + +A: Just sign in to your [Visual Studio profile](https://app.vsaex.visualstudio.com/profile/view). + +![Create your VSTS account](_img/sign-up-visual-studio-team-services/my-info-account-list.png) + + + +[!INCLUDE [another-team-project](../_shared/qa-another-team-project.md)] + +[!INCLUDE [delete-team-project](../_shared/qa-delete-team-project.md)] + +[!INCLUDE [find-account-name](../_shared/qa-find-account-name.md)] + +[!INCLUDE [recover-password](../_shared/qa-recover-password.md)] + +[!INCLUDE [change-account-name-owner](../_shared/qa-change-account-name-owner.md)] + +[!INCLUDE [delete-account](../_shared/qa-delete-account.md)] + + +####Q: What's the difference between using a Microsoft account and a work account or school account to sign up? + +A: Your choice affects how you control access and +authenticate users for your VSTS account. + +When you sign up with a Microsoft account: + +* You're solely responsible for managing access +to your VSTS account. +* All users must sign in with Microsoft accounts. + +When you sign up with a work or school account: + +* Your VSTS account is +automatically connected to your directory in Azure AD. +* All users must members in the connected directory +to get access to your VSTS account. +* The directory administrator has control over who can join the directory. +* You sign in with work or school accounts, +or with Microsoft accounts if your company allows that. + +To [add users to the directory](https://docs.microsoft.com/azure/active-directory/active-directory-create-users), +you must be a directory administrator. If you don't have access, +work with your directory administrator to add users. +Learn more about +[work or school accounts for your organization](https://docs.microsoft.com/azure/active-directory/sign-up-organization). + + +####Q: Can I change the directory after signup? + +A: Yes, see [Change your account's Azure AD](change-azure-active-directory-vsts-account.md). + + + +[!INCLUDE [choose-msa-azuread-account](../_shared/qa-choose-msa-azuread-account.md)] + +* Choose **Work or school account** if you want to use your organization's directory +to authenticate VSTS users and to control VSTS account access. +This limits access to members in your organization's directory. +All other users must sign in with work or school accounts too. + +* Choose **Personal account** if you want to use your Microsoft account with VSTS. +All other users must sign in with Microsoft accounts too. + +[!INCLUDE [why-cant-sign-in-msa-azuread-account](../_shared/qa-why-cant-sign-in-msa-azuread-account.md)] + +[!INCLUDE [secure-protect-data](../_shared/qa-secure-protect-data.md)] + +[!INCLUDE [team-services-sla](../_shared/qa-vsts-sla.md)] + + + +[!INCLUDE [visual-studio-subscription-support](../_shared/qa-visual-studio-subscription-support.md)] + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] diff --git a/docs/accounts/faq-delete-restore-vsts-account.md b/docs/accounts/faq-delete-restore-vsts-account.md new file mode 100644 index 00000000000..a63a8bb6d5d --- /dev/null +++ b/docs/accounts/faq-delete-restore-vsts-account.md @@ -0,0 +1,34 @@ +--- +title: Troubleshooting deleting or restoring VSTS acounts +description: Troubleshooting deleting or restoring VSTS acounts +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 12cffcaf-295a-4931-9844-81a12c512158 +ms.manager: douge +ms.author: estfan +ms.date: 1/19/2017 +--- + +# Troubleshooting deleting or restoring VSTS acounts + +**VSTS** + + + + + +[!INCLUDE [find-account-owner](../_shared/qa-find-account-owner.md)] + +[!INCLUDE [why-no-owned-accounts](../_shared/qa-why-no-owned-accounts.md)] + + + +[!INCLUDE [choose-msa-azuread-account](../_shared/qa-choose-msa-azuread-account.md)] + +[!INCLUDE [choose-msa-azuread-account2](../_shared/qa-choose-msa-azuread-account2.md)] + +[!INCLUDE [why-cant-sign-in-msa-azuread-account](../_shared/qa-why-cant-sign-in-msa-azuread-account.md)] + + + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] diff --git a/docs/accounts/faq-rename-team-project.md b/docs/accounts/faq-rename-team-project.md new file mode 100644 index 00000000000..264f5499079 --- /dev/null +++ b/docs/accounts/faq-rename-team-project.md @@ -0,0 +1,57 @@ +--- +title: Troubleshooting renaming a team project +description: Troubleshooting renaming a team project +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: befe4a1c-90da-425d-a377-436fe73c21c6 +toc: show +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Troubleshooting renaming a team project + +**VSTS** | **TFS 2015** + + +#### Q: What permission do I need to rename a team project? + +If you're using VSTS or Team Foundation Server 2017 or later, team project rename requires the "rename team project" permission for a team project. +If you're using Team Foundation Server 2015, users require "edit project-level information" permission on a team project to rename it. + +#### Q: Can I use a team project name again? + +Yes, team project names can be reused. + +#### Q: Why did my attempt to reuse a team project name fail due to existing workspaces? + +A team project name can't be reused if there are still workspace mappings addressing it. +This is done to avoid the ambiguity case where a workspace could be mapped to two projects. +You will need to reach out to the users that have these mappings, and either delete them or [update them](rename-team-project.md#tfvc-server) to use the new name. +If the user's machine containing the workspace is no longer available then you can delete the workspace +by running the following command from Visual Studio's developer command prompt: + +```tf workspace /delete [/collection:TeamProjectCollectionUrl] workspacename[;workspaceowner]``` + + +#### Q: How does renaming a team project impact my browser navigation experience? + +After a team project is renamed, any browsers with the team project opened may encounter some errors. These errors are due to caches held by the browser which include the old team project name. +Refreshing will make these errors go away since the cache will be repopulated with the new team project name. + +#### Q: Do other artifacts in the team project get renamed when it is renamed? + +Yes, all artifacts which share the same name get renamed along with the team project. The only exceptions to this are for the default team room, team, and repo. The rename of those artifcats is done as a best effort. +For example, if a team project Foo was renamed to Bar, the default team Foo would not be renamed if a team named Bar already existed in the team project. + +#### Q: Why can't I open queries saved to disk after a rename? + +If you use Visual Studio 2010 and you have queries save to disk, you will not be able to open them after a team project is renamed. You can use Visual Studio 2012 or newer to open them. + +#### Q: Why does the existing Lab Management BDT in Visual Studio fails with the error 'oldprojectName' cannot be found? + +The issue is encountered when Build Controller 2013 is used with TFS 2015. To fix the issue, open the existing Build Definition, select the process tab under it, click on the ellipses next to the Lab Process settings to +open the Lab Workflow Parameters wizard, and then click on Finish. The issue is permanently resolved by using the TFS 2015 Build Controller that ships with TFS 2015. + +![Process Tab](_img/rename-team-project/lab-build-process.png) diff --git a/docs/accounts/index.md b/docs/accounts/index.md new file mode 100644 index 00000000000..73756084a3b --- /dev/null +++ b/docs/accounts/index.md @@ -0,0 +1,40 @@ +--- +title: Account management for VSTS +description: Index to topics for managing the account for Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 753DE499-C3D1-426B-B2B0-855D99669223 +ms.manager: douge +ms.author: estfan +ms.date: 07/12/2017 +--- + +# Account Management + +**VSTS** + +You can be up and running with a free account within 5 minutes. + +## 5-Minute Quickstarts + +* [Create your VSTS account](create-account-msa-or-work-student.md) +* [Try extensions for free](../billing/try-additional-features-vs.md) + + +## Step-by-Step Tutorials + +* [Change Azure AD tenant](change-azure-active-directory-vsts-account.md) + + +## Reference + +* [Permissions and access](/vsts/security/permissions-access?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) + + +## Resources + +* [New User Guide](../user-guide/index.md) +* [Billing](../billing/index.md) +* [Security & Identity](../security/index.md) +* [Manage Extensions](../marketplace/index.md) +* [Service Hooks](../service-hooks/index.md) diff --git a/docs/accounts/manage-azure-active-directory-groups-vsts.md b/docs/accounts/manage-azure-active-directory-groups-vsts.md new file mode 100644 index 00000000000..d8d3c6a99ce --- /dev/null +++ b/docs/accounts/manage-azure-active-directory-groups-vsts.md @@ -0,0 +1,235 @@ +--- +title: VSTS - Access with Azure AD groups | Visual Studio Team Services +description: VSTS - Access with Azure Active Directory (Azure AD, AAD) groups in Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 882E6E07-F407-478A-9DCC-9324493CBE11 +ms.manager: douge +ms.author: estfan +ms.date: 12/01/2016 +--- + +# VSTS: Access with Azure Active Directory (Azure AD) groups + +**VSTS** + +Do you want an easier way to control who can access your team's +critical resources and key business assets in VSTS? +If you already use Microsoft services like Office 365 or +[Azure Active Directory (Azure AD)](https://www.microsoft.com/en-us/server-cloud/products/azure-active-directory/), +you can use the same identities with your VSTS account. +[Azure AD works with your VSTS account](access-with-azure-ad.md) +to control access and authenticate users through your organization's directory. + +When you organize directory members with +[Azure AD groups](https://azure.microsoft.com/en-us/documentation/articles/active-directory-manage-groups), +you can reuse those groups to manage permissions +in bulk for your VSTS account. +Just add those groups to the VSTS group that you want. +For example, add them to built-in groups like +Project Collection Administrators or Contributors, +or manually-created groups like your project management team. +Azure AD group members will inherit permissions from the VSTS group, +so you don't have to manage group members one at a time. + +Not familiar with Azure AD, +but want to check it out? Learn more about +[Azure AD benefits](https://azure.microsoft.com/en-us/documentation/articles/active-directory-whatis/) +and differences in how you +[control VSTS account access with Microsoft accounts or with Azure AD](access-with-azure-ad.md). + +## Before you start + +* Your VSTS account must be connected +to your organization's directory (tenant) in Azure AD. +[My account uses Microsoft accounts only. Can I switch to Azure AD?](#ChangeMSA) + +* You must be a VSTS project administrator, +project collection administrator, or account owner. +You must also have at least Basic access, not Stakeholder. + +* To create and manage Azure AD groups, +you must have tenant administrator permissions +or have the tenant administrator delegate those permissions to you in the +[Azure classic portal](https://manage.windowsazure.com) +or [Azure portal](https://portal.azure.com). + +## Add an Azure AD group to a VSTS group + +0. Sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```). + + [Why am I asked to choose between my work or school account and my personal account?](#ChooseOrgAcctMSAcct) + +0. Go to your team project collection or team project, +depending on the VSTS group that you want to work on. + +0. Go to the control panel by choosing the gear icon in the top navigation bar and **Security** in the menu. + +0. Select the VSTS group where you want to add your Azure AD group. + + ![Select a VSTS group. Go to Members, Add](_img/manage-azure-ad-groups/vsogroupaddmemberbutton.png) + +0. Find the Azure AD group that you want to add. Just start typing the group's name, alias, +or display name. Then select the group to add it. You can get more details about a group and its members by choosing +the contact card icon to the right of the name. + + ![Browse directory for groups](_img/manage-azure-ad-groups/addaadgrouppanelbrowse.png) + + You [invite guests into your Azure AD](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/11/inviting-directory-guests-to-aad-backed-vsts-accounts) + and into your Azure AD backed VSTS accounts, without waiting for them + to accept, which in turn allows you + to add those guests to your account, grant access to projects, assign extensions, etc. + +0. Add more groups, or save your changes if you're done. + + +## Q&A + + +####Q: My account uses Microsoft accounts only. Can I switch to Azure AD? + +A: Yes, but before you switch, make sure that Azure AD meets your needs +for sharing work items, code, resources, +and other assets with your team and partners. + +Learn more about the differences in how you +[control access with Microsoft accounts or with Azure AD, and how to switch](access-with-azure-ad.md) +when you're ready. + +####Q: Why can't I assign VSTS permissions directly to an Azure AD group? + +A: Because these groups are created and managed in Azure, +you can't assign VSTS permissions directly +or secure version control paths to these groups. +You'll get an error if you try to assign permissions directly. + +But, you can add an Azure AD group to the VSTS +group that has the permissions you want. Or, +you can assign these permissions to the VSTS group instead. +Azure AD group members will inherit permissions from +the VSTS group where you add them. + +####Q: Can I manage Azure AD groups in VSTS? + +A: No, because these groups are created and managed in Azure. +VSTS doesn't store or sync member status for Azure AD groups. +So, to manage Azure AD groups, use the +[Azure classic portal](https://manage.windowsazure.com) +or [Azure portal](https://portal.azure.com), Microsoft Identity Manager (MIM), +or the group management tools that your organization supports. + +####Q: How do I tell the difference between a VSTS group and an Azure AD group? + +A: On the group's identity card, check the group's source: + +![To find the group's source, check the group's identity card](_img/manage-azure-ad-groups/checkidentitysourceaad.png) + +####Q: Why doesn't the Users hub show all Azure AD group members? + +A: These users have to sign in to your VSTS +account before they appear in the Users hub. + + +####Q: How do I assign account access to Azure AD group members? + +A: When these group members sign in to your VSTS account for the first time, +VSTS assigns an access level to them automatically. If they have +[Visual Studio subscriptions](faq-add-delete-users.md#EligibleMSDNSubscriptions), +VSTS assigns the respective access level to them. +Otherwise, VSTS assigns them the next "best available" +[access level](https://www.visualstudio.com/pricing/visual-studio-online-feature-matrix-vs) +in this order: Basic, Stakeholder + +If you don't have enough access levels for all Azure AD group members, +those members who sign in will get a Stakeholder access. + +####Q: Why doesn't the Security tab show all members when I select an Azure AD group? + +A: The Security tab shows Azure AD group members +only after they sign in to your VSTS account +and have an access level assigned to them. + +To see all Azure AD group members, use the +[Azure classic portal](https://manage.windowsazure.com), +[Azure portal](https://portal.azure.com), Microsoft Identity Manager (MIM), +or the group management tools that your organization supports. + +####Q: Why doesn't the team members widget show all Azure AD group members? + +A: The team members widget shows only users who previously +signed in to your VSTS account. + +####Q: Why doesn't the team capacity pane show all Azure AD group members? + +A: The team capacity pane shows only users who previously +signed in to your VSTS account. +To set capacity, manually add users to your team. + +####Q: Why doesn't the team room show offline users? + +A: The team room shows Azure AD group members, +but only when they're online. + +####Q: Why doesn't VSTS reclaim access levels from users who aren't Azure AD group members anymore? + +A: VSTS doesn't automatically +reclaim access levels from these users. +To manually remove their access, go to the Users hub. + +####Q: Can I assign work items to Azure AD group members who haven't signed in? + +A: You can assign work items to any Azure AD member who has permissions +for your VSTS account. +This also adds that member to your VSTS account. +When you add users this way, they'll automatically appear +in the Users hub with the best available +access level and in the security settings, too. + +####Q: Can I use Azure AD groups to query work items using the "In Group" clause? + +A: No, querying on Azure AD groups is unsupported. + +####Q: Can I use Azure AD groups to set up field rules in my work item templates? + +A: No, but read more here about our +[process customization plans](https://blogs.msdn.com/b/visualstudioalm/archive/2015/07/27/visual-studio-online-process-customization-update.aspx). + + +####Q: Why am I asked to remove a user from an Azure AD group when I delete that user from my VSTS account? + +A: Users can belong to your VSTS account, +both as individuals and as members of Azure AD groups +that were added to VSTS groups in your VSTS account. +These users can still access your VSTS account while they're members of these Azure AD groups. + +To block all access for these users, +please remove them from Azure AD groups in your VSTS account, +or remove these groups from your VSTS account. +Although we'd like to make it possible to block +access completely or make exceptions for such users, +VSTS doesn't currently have this capability. + +####Q: How do I remove an Azure AD group from VSTS? + +A: Go to your team project collection or team project. Then, go to the control panel by choosing the gear icon in the +top navigation bar and **Security** in the menu. + +Find the Azure AD group, then delete that group from your VSTS account. + +![Find the Azure Active Directory group, delete from VSTS](_img/manage-azure-ad-groups/deleteaadgroupfromvso.png) + + + +[!INCLUDE [choose-msa-azuread-account](../_shared/qa-choose-msa-azuread-account.md)] + +[!INCLUDE [choose-msa-azuread-account2](../_shared/qa-choose-msa-azuread-account2.md)] + +[!INCLUDE [why-cant-sign-in-msa-azuread-account](../_shared/qa-why-cant-sign-in-msa-azuread-account.md)] + +####Q: Where can I ask more questions or send suggestions? + +A: We'd love to hear from you. For help from the Microsoft Developer Community, +visit the [VSTS forum](https://social.msdn.microsoft.com/Forums/en-US/home?forum=TFService). +For suggestions, visit +[Visual Studio UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services). diff --git a/docs/accounts/manage-conditional-access.md b/docs/accounts/manage-conditional-access.md new file mode 100644 index 00000000000..611612249a1 --- /dev/null +++ b/docs/accounts/manage-conditional-access.md @@ -0,0 +1,45 @@ +--- +title: Manage conditional access to Visual Studio Team Services +description: Manage conditional access to VSTS to restrict access based on multi-factor authentication +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 2e3b01ab-b5f5-4e4d-9509-7095246f6fe7 +ms.manager: douge +ms.author: estfan +ms.date: 05/05/2017 +--- + +# Manage conditional access to VSTS + +**VSTS** + +Conditional access offers simple ways to help secure resources for VSTS accounts backed by an Azure Active +Directory (AAD) tenant. Conditional access policies like multi-factor +authentication can help protect against the risk of compromised credentials and help keep your organization's data safe. +For example, in addition to requiring credentials, you can have a policy that only devices connected to a corporate network +can gain access. More generally, there are a few requirements and actions you can take for devices in a device +management system, which is security software used by IT departments to manage devices running various operating systems +from various locations/networks. + +You can require conditions such security group membership, location and network identity, specific OS, enabled device +in a management system, and so on. + +Depending on which conditions the user satsifies, you can require multi-factor authentication, require further checks, +or block access. + +> [!IMPORTANT] +> VSTS only enforces conditional access policies when a user signs into services with their AAD credentials. +> Accessing VSTS using personal access tokens (PATs), alternate authentication, OAuth, and SSH keys circumvents +> conditional access policies. + +See [more information and resources](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-conditional-access). + + +## Enable conditional access for Visual Studio Team Services + +You need to use the azure portal to enable conditional access. + +See [detailed instructions and requirements](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-conditional-access-azuread-connected-apps). + +![azure portal turning on conditional access for VSTS](_img/_shared/azure-conditional-access-738.png) + diff --git a/docs/accounts/manage-users-table-view.md b/docs/accounts/manage-users-table-view.md new file mode 100644 index 00000000000..a4b1ffed9d7 --- /dev/null +++ b/docs/accounts/manage-users-table-view.md @@ -0,0 +1,86 @@ +--- +title: Manage users and access user hub Visual Studio Team Services +description: Add users and assign access levels in user hub VSTS +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 9f142821-1772-413f-a0e0-9b47b11a410f +ms.manager: douge +ms.author: estfan +ms.date: 4/17/2017 +--- + +# Manage users in user hub table view for Visual Studio Team Services + +**VSTS Streamlined User Management Preview** + +If you are a Project Collection Administrator, you can now navigate to the new Users page by turning on "Streamlined User Management" under "Preview features". + +![Choose Preview features from your user menu in the upper right corner](_img/user-hub/preview-features.png) + +Add users to your VSTS account and specify the level of features they can use, such as Basic or Stakeholder. +These kinds of users can join your VSTS account for free: + +* 5 users who get [Basic features](https://www.visualstudio.com/team-services/compare-features/), +such as version control, tools for Agile, Java, build, release management, and more +* Unlimited users who get [Stakeholder features](https://www.visualstudio.com/team-services/compare-features/), +such as working with your backlog, work items, and queries +* Unlimited [Visual Studio subscribers](https://www.visualstudio.com/team-services/compare-features/) +who also get Basic features, and in some cases, additional features with specific extensions, such as +[Test Manager](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web) + +[Need more users with Basic features or Visual Studio subscriptions?](../billing/buy-basic-access-add-users.md) + + +> You can add people to team projects, +> rather than to your account. VSTS automatically assigns them +> [Basic features](https://www.visualstudio.com/team-services/compare-features/), +> if your account has seats available, +> or [Stakeholder features](https://www.visualstudio.com/team-services/compare-features/), +> if not. Learn [how to add members to team projects](add-team-members-vs.md). +> +> When people don't need access to your VSTS account anymore, [delete them](delete-account-users.md) from your account. + + +## How does *access* differ from *permissions*? + +Access levels control which features are available to users, while permissions control their access to account resources. +[Can't access some features?](faq-add-delete-users.md#feature-access) +For TFS, learn [how to change access levels](../security/change-access-levels.md) +or [buy more access to TFS or the Test hub](../billing/buy-access-tfs-test-hub.md). + +To control access to account resources instead, learn [how to add permissions](add-users.md) or +[restrict permissions](restrict-access-tfs.md). To change how many users can access paid extensions in your +VSTS account, +learn [how to change paid extension users](../billing/change-number-paid-extension-users.md). + + +## Required Permissions + +You'll need [VSTS project collection administrator or account owner permissions](faq-add-delete-users.md#find-owner). + + +## Manage users in table view + +The Users view shows key information per user in a table. You can see and modify assigned service extensions and +access levels. You can multi-select users and bulk edit their extensions and access. You can filter by searching for +partial user names, access level, or extension names. You can see the last access date for each user to help you choose +from whom you might remove access or lower access to stay within your license limits. + +Go to the User Hub: + +![go to the user hub](_img/_shared/users-hub-updated.png) + +Choose a user in the table and then choose the **...** in the name column to see the context menu. The menu supports **Change access level**, **Manage project**, **Manage extension** (if there are extensions), and **Remove from account** (deletes user). + +![Account level table of users with key information per user](_img/user-hub/acct-level-users.png) + + +## Detailed view of individual users + +Using the detailed user view, you can change the access level, service extensions, and project group memberships that +a user has. The same operations from the table's context menu are available in this dialog. + +![User details view](_img/user-hub/user-details.png) + + +[Troubleshooting](faq-add-delete-users.md) diff --git a/docs/accounts/recover-your-vsts-account.md b/docs/accounts/recover-your-vsts-account.md new file mode 100644 index 00000000000..66ca447cbd4 --- /dev/null +++ b/docs/accounts/recover-your-vsts-account.md @@ -0,0 +1,50 @@ +--- +title: Restore your VSTS account +description: Restore your VSTS account +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: b81adafa-adac-4e80-baa6-140fb58fbeff +ms.manager: douge +ms.author: estfan +ms.date: 08/04/2016 +--- + +# Restore your VSTS account + +**VSTS** + + +Your account will be disabled but available for 90 days after you delete it. +If you change your mind during this time, you can recover your account. +After 90 days, your account and data are permanently deleted. + +You'll need VSTS account owner +permissions to restore your VSTS account. +[How do I find the account owner?](faq-delete-restore-vsts-account.md#find-owner) + +0. Sign in to your [Visual Studio profile](https://app.vsaex.visualstudio.com/profile/view). + + [Why am I asked to choose between my work or school account and my personal account?](faq-delete-restore-vsts-account.md#ChooseOrgAcctMSAcct) + +0. Restore your account. + + ![Next to your deleted account, click Restore](_img/delete-account/restore-account.png) + + * If your account URL is still available, you can restore your account. + + ![Confirm restoring your account](_img/delete-account/restore-confirm.png) + + * If your account URL isn't available, provide a new URL. + + ![Rename your deleted account](_img/delete-account/rename-deleted-account.png) + +0. After you restore your account: + + * If billing was set up for your account, you'll have to set it up again. Just +[relink your account](../billing/set-up-billing-for-your-account-vs.md) to an Azure subscription. + + * If your account was connected to Azure AD for authenticating user access, you won't have to reconnect it again. + + [Need help?](faq-delete-restore-vsts-account.md#get-support) + + diff --git a/docs/accounts/rename-team-project.md b/docs/accounts/rename-team-project.md new file mode 100644 index 00000000000..3772884559f --- /dev/null +++ b/docs/accounts/rename-team-project.md @@ -0,0 +1,204 @@ +--- +title: Rename a team project in VSTS or TFS +description: You can rename your team project in VSTS or TFS, and then there are some things you need to do to work with the renamed team project. +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 23729f9a-9947-4fc1-89b0-07e3b52298ac +toc: show +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Rename a team project + +**VSTS** | **TFS 2015** + +A team project rename updates all of your version control paths, work items, queries, and other team project artifacts to reflect the new name. +Team projects can be renamed multiple times and older names can be reused as well. +Post rename, there might be some [reactions](#more-work) required from team members. It is recommended to perform this action during off-hours to minimize any impact. + +## Perform a team project rename + +### From the team project administration page + +You can change the name of a team project from its administration overview page. + +1. Open the administration overview page by choosing the ![Settings Icon (TFS Web Portal)](_img/rename-team-project/gearicon.png) gear icon in the top right. + +2. Edit the name. + + ![Enter a new project name](_img/rename-team-project/projectrename1.png) + + If you don't see the textbox appear, then you're not a member of the Project Administrators group for that particular project. Learn how to [get added](add-users.md) to the Project Administrators group. + +### From the project collection administration page + +You can also change the name of a team project from the project collection administration page. + +1. From your account's home page, use the ![Settings Icon (TFS Web Portal)](_img/rename-team-project/gearicon.png) gear icon to open the control panel and then go to the project collection administration page. + +2. Rename the team project from its context menu. + + ![Rename menu item in the team project context menu on the project collection administration page](_img/rename-team-project/collection-rename.png) + + If the rename action is disabled, then you're not a member of the Project Administrators group for that particular project. Learn how to [get added](add-users.md) to the Project Administrators group. + + + +## Let your team know what they have to do + +Now that you've renamed your team project, +your team will need to restart their clients and perform additional actions based on the features they use. + + +### Restart your clients +Opened clients keep a cache of all team project names in memory and this cache isn't automatically cleared after a team project is renamed. +To clear the cache, all that is necessary is to restart the client so it populates the new team project name. +If you don't restart the client, then operations that use the cached team project name will +fail with a project not found exception. + +For the following clients, save your work in each and restart: + +- Visual Studio/Team Explorer + +- Eclipse, if your team uses the Team Foundation Server plugin (Team Explorer Everywhere) + +- Microsoft Excel, PowerPoint, or Project, if your team uses the Team Foundation Server Extension for these Office products + +- Any additional clients which use the .NET Team Foundation Server Client Object Model + + +### Update your Git remotes +If your team project uses Git, then your remote references for each repository from the renamed team project need to be updated. This is due to the fact that the remote repository URL contains the team project and the repository name. Git uses remote references to fetch and push changes between your local copy of a repository and the remote version stored on the server. Each member of your team must update their local Git repos to continue connecting from their dev machines to the repo in the team project. + + +#### Get the new URL for the repo + +Copy the repository URL to your clipboard. + +![Git code explorer tab](_img/rename-team-project/team-project-git-tabs.png) + +![Remote URL for the repository](_img/rename-team-project/cloneurl.png) + +#### Update your remote in Visual Studio 2015 + +1. Connect to the repo. + + ![Connect to the repository](_img/rename-team-project/repoconnect.png) + +2. Open the project settings. + + ![Project settings](_img/rename-team-project/projectsettings.png) + +3. Open the repo settings. + + ![Repository settings](_img/rename-team-project/reposettings.png) + +4. Edit the fetch and push remote references and paste the URL that you [copied from the remote repo](#copy_remote_repo_url). + + ![Edit remote](_img/rename-team-project/editreposettings.png) + +#### Update your remote in older versions of Visual Studio from the command prompt + +If you use an older version of Visual Studio or work with Git from the command prompt: + +1. Open the Git command prompt. + +2. Go to the local repository and update the remote to the URL you [copied from the remote repo](#copy_remote_repo_url). + + ``` + git remote set-url origin {URL_you_copied_from_the_remote_repo} + ``` + +#### Refresh Team Explorer + +1. Refresh Team Explorer. + + ![Refresh Team Explorer](_img/rename-team-project/refreshteamexplorer.png) + +2. Team Explorer now shows the updated repo name. + + ![Team Explorer Updated](_img/rename-team-project/result.png) + + + +### Update your TFVC server workspaces +If your team project uses TFVC with [server workspaces](../tfvc/decide-between-using-local-server-workspace.md), these workspaces will need to be updated with the new project name. +For the following clients, execute a get or check-in and the workspace mapping will be corrected to use the new team project name: + +- Visual Studio 2015 (RC or newer) + +- Visual Studio 2013 + +- Visual Studio 2012 + +- Visual Studio 2010 (Only supports server workspaces) + +- Team Explorer Everywhere (2012 or newer) + +![Source control explorer, get latest version](_img/rename-team-project/tfvc-get.png) + + +### Update your TFVC local workspaces +If your team uses TFVC with [local workspaces](../tfvc/decide-between-using-local-server-workspace.md), these workspaces will need to be updated with the new project name. +For the following clients, execute a get or check-in and the workspace mapping will be corrected to use the new team project name: + +- Visual Studio 2015 (RC or newer) + +- Visual Studio 2012 with [Update 5](http://go.microsoft.com/fwlink/?LinkId=615776) (RC or newer) + +- Team Foundation Server plugin [Team Explorer Everywhere 2015](http://go.microsoft.com/fwlink/?LinkID=617042) + +It's recommended you update your clients to the latest update or release, if possible. For all other supported Visual Studio versions, +except for Visual Studio 2010 which only supports server worksapces, +and Team Foundation Server plugin for Eclipse, +you will need to create a new local workspace mapped to the new team project name. + +1. [Shelve your changes](https://msdn.microsoft.com/library/ms181404). + +2. [Create a new workspace](https://msdn.microsoft.com/library/ms181383.aspx) mapped to the new team project name. + +3. Unshelve your changes. + +Since local workspaces are managed locally and not on the server, older clients without the updated rename logic are unable to update local workspaces to the new team project name on the next get or check-in. + + +### Update your Team Foundation Server SharePoint and Reporting Integrations (on-premises) +Both SharePoint and Reporting Services integrations continue to work, but some reports will not work as expected until the new team project name is populated. +The old project name is still present until caches are updated with the new name. +The reporting and SharePoint server administrator can manually run these jobs to immediately populate the new name. + +- If your team uses reports, they will reflect the new names after the next incremental analysis job runs for the data warehouse. +By default it runs every two hours. +To expedite the process, +[manually run the warehouse jobs and incremental analysis job](../report/admin/manually-process-data-warehouse-and-cube.md) +so the new name gets synced to warehouse and reports start using the new name. +Reports will not work as expected until the jobs have run. + +- If your team uses SharePoint Integration and has custom queries or web parts which directly reference the team project name, + update the name in each to the new team project name. All default queries and web parts do not need to be updated and will continue to work. + Uses of *@project* will also continue to work after a team project rename and also don't need to be updated. + +- Excel reports and Excel web parts on MOSS will not show the right data until the execution of a couple of jobs. + 1. Warehouse job – [Run the warehouse jobs](../report/admin/manually-process-data-warehouse-and-cube.md) + so that Excel reports contain the correct data. + If the new project name is not synced to the warehouse, + Excel reports will not show the correct data. + To avoid this, manually run warehouse jobs. + 2. SharePoint timer job – Run the "Team Foundation Server Dashboard Update" job + from the SharePoint central admin to update Excel web parts on the dashboard. + By default, it runs every 30 minutes. + Until this job runs, the Excel web parts on the dashboard + and the web parts that show reports directly from the reporting folder + won't work because they'll use either the wrong project name or the wrong reporting folder. + 3. SharePoint cache – Manually clear the SharePoint cache to avoid stale data, + such as report folder locations, appearing in the dashboards. + By default, this cache clears about every hour. + You can also clear some TFS specific cache using the tfs redirect url + and providing a "clearcache" parameter. For example + + ``` + http:///sites///_layouts/TfsRedirect.aspx?tf:type=Report&tf:clearcache=1 + ``` + diff --git a/docs/accounts/rename-vsts-account.md b/docs/accounts/rename-vsts-account.md new file mode 100644 index 00000000000..567e84951df --- /dev/null +++ b/docs/accounts/rename-vsts-account.md @@ -0,0 +1,44 @@ +--- +title: Rename VSTS account | Visual Studio Team Services +description: Change account name in Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: a69f3789-19e9-40c5-ade3-4e11435d452d +ms.manager: douge +ms.author: estfan +ms.date: 10/31/2016 +--- + +# Rename your VSTS account + +**VSTS** + +You can change your VSTS account name (URL) at any time. + +**Caution**: This affects your account's connections +and those currently working with your account. +So before you start, find out +[what to do before and after renaming your account](https://support.microsoft.com/kb/2793597). + +To change your VSTS account URL, +you'll need at least Basic access and account owner permissions. +[How do I find the account owner?](faq-delete-restore-vsts-account.md#find-owner) + +0. Sign in to your VSTS account (```https://{youraccount}.visualstudio.com```). + + [Why am I asked to choose between my work or school account and my personal account?](faq-create-account.md#ChooseOrgAcctMSAcct) + +0. Go to your VSTS account settings. + + ![Go to account settings](../_shared/_img/account-settings-new-ui.png) + +0. Under **Settings**, change your account URL. + + ![Change your account name](_img/rename-vso-account/vsorenameaccount.png) + +0. Confirm that you want to rename your account. +Give your account a new name. Save your changes. + + ![Confirm renaming your account, provide new account name](_img/rename-vso-account/vsoconfirmaccountrename.png) + + [Need help?](faq-create-account.md#get-support) diff --git a/docs/accounts/requirements.md b/docs/accounts/requirements.md new file mode 100644 index 00000000000..4f978f1670c --- /dev/null +++ b/docs/accounts/requirements.md @@ -0,0 +1,648 @@ +--- +title: Requirements and compatibility | Team Foundation Server Setup, Upgrade and Administration +description: Describes hardware, operating systems, SQL Server, compatibility, and other requirements for TFS. Also describes compatibility between TFS client versions and server versions. Plus supported browsers for VSTS and web client access to TFS. +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 12652666-b74e-4fd8-aab1-d87cbba6b820 +toc: show +ms.manager: douge +ms.author: elbatk +ms.date: 03/02/2016 +--- + +# Requirements and compatibility + +**VSTS** | **TFS 2018** | **TFS 2017** | **TFS 2015** | **TFS 2013** + + +## Operating systems + +TFS can be installed on a Windows server or client operating system. +TFS 2017 and TFS 2018 only support 64-bit operating systems. +For earlier versions of TFS, you can use either the 32-bit or 64-bit operating systems when a 32-bit version is available. +We recommend using a server OS unless your TFS instance is for evaluation or personal use. + +### Server operating systems + +TFS Version | Supported server operating systems +------------|-------------------------------- +TFS 2018 | Windows Server 2016
Windows Server 2012 R2 (Essentials, Standard, Datacenter)
Windows Server 2012 (Essentials, Standard, Datacenter) +TFS 2017 | Windows Server 2016
Windows Server 2012 R2 (Essentials, Standard, Datacenter)
Windows Server 2012 (Essentials, Standard, Datacenter)
Windows Server 2008 R2 (minimum SP1) (Standard, Enterprise, Datacenter) +TFS 2015 | Windows Server 2016
Windows Server 2012 R2 (Essentials, Standard, Datacenter)
Windows Server 2012 (Essentials, Standard, Datacenter)
Windows Server 2008 R2 (minimum SP1) (Standard, Enterprise, Datacenter) +TFS 2013 | Windows Server 2012 R2 (Essentials, Standard, Datacenter)
Windows Server 2012 (Essentials, Standard, Datacenter)
Windows Server 2008 R2 (minimum SP1) (Standard, Enterprise, Datacenter) +TFS 2012 | Windows Server 2012 R2 (Essentials, Standard, Datacenter)
Windows Server 2012 (Essentials, Standard, Datacenter)
Windows Server 2008 R2 (Standard, Enterprise, Datacenter)
Windows Server 2008 (minimum SP2)
Windows Small Business Server 2011 (Standard, Essentials, Premium Add-On)
Windows Home Server 2011 +TFS 2010 | Windows Server 2008 R2 (Standard, Enterprise, Datacenter)
Windows Server 2008 (minimum SP2)
Windows Server 2003 R2
Windows Server 2003 (minimum SP2) + +The [server core](https://msdn.microsoft.com/library/dd184075.aspx) installation option is supported for TFS 2017 and TFS 2018, but not for earlier versions. + +### Client operating systems + +TFS Version | Supported client operating systems +------------|-------------------------------- +TFS 2018 | Windows 10 (Professional, Enterprise) +TFS 2017 | Windows 10 (Home, Professional, Enterprise)
Windows 8.1 (Basic, Professional, Enterprise)
Windows 7 (minimum SP1) (Home Premium, Professional, Enterprise, Ultimate) +TFS 2015 | Windows 10 (Home, Professional, Enterprise)
Windows 8.1 (Basic, Professional, Enterprise)
Windows 7 (minimum SP1) (Home Premium, Professional, Enterprise, Ultimate) +TFS 2013 | Windows 8.1 (Basic, Professional, Enterprise)
Windows 7 (minimum SP1) (Home Premium, Professional, Enterprise, Ultimate) +TFS 2012 | Windows 8.1 (Basic, Professional, Enterprise)
Windows 7 (Home Premium, Professional, Enterprise, Ultimate) +TFS 2010 | Windows 7 (Home Premium, Professional, Enterprise, Ultimate)
Windows Vista SP2 + +While TFS supports installation on client OSes, we don't recommend this except for evaluation purposes or personal use. +TFS installations on client OSes don't support integration with SharePoint products or reporting. +The TFS proxy can't be installed on client OSes. If you need to use any of these features, install TFS on a server OS. + + + +## System requirements for Team Foundation Server Proxy + +The proxy feature is available only if you installed Team Foundation Server on a server operating system. + +Review these hardware recommendations to determine the optimal hardware to use for Team Foundation Server Proxy. Unlike operating system requirements, hardware recommendations for proxy are different than those for setting up the application tier of Team Foundation Server. The application tier of TFS requires more robust hardware than the proxy feature does. + +These recommendations are guidelines for Team Foundation Server Proxy. Recommended hardware is based on the size of the team that will use the proxy server. Usually this is the team in your remote office. The larger the team, the more robust your hardware must be. + +| **Remote team size** | **Hardware recommendations (CPU/RAM) for Team Foundation Server Proxy ** | +|---|---| +| 450 or fewer users | 1 processor, 2.2 GHz CPU, 2 GB RAM | +| Between 450 and 2,200 users | 2 processors, 2.0 GHz CPU, 2 GB RAM | +| Between 2,200 and 3,600 users | 4 processors, 2.0 GHz CPU, 2 GB RAM | + + +## Virtualization + +Microsoft supports the virtualization of Team Foundation Server in supported virtualization environments. +For more information, see the following pages on the Microsoft website: + +* [Microsoft server software and supported virtualization environments](http://go.microsoft.com/fwlink/?LinkId=196061) +* [Support policy for Microsoft software running in non-Microsoft hardware virtualization software](http://go.microsoft.com/fwlink/?LinkId=196062) +* [Support partners for non-Microsoft hardware virtualization software](http://go.microsoft.com/fwlink/?LinkId=196063) +* [Server Virtualization](http://go.microsoft.com/fwlink/?LinkId=196072) (officially supported products) + + +## SQL Server + +Use one of the following versions of SQL Server for TFS: + +TFS version | Support SQL Server version +-------------------|------------------------------------ +TFS 2018 | SQL Server 2017
SQL Server 2016 (minimum SP1) +TFS 2017 Update 1 | SQL Server 2016 (minimum SP1)
SQL Server 2014
+TFS 2017 | SQL Server 2016
SQL Server 2014
+TFS 2015 Update 3 | SQL Server 2016
SQL Server 2014
SQL Server 2012 (minimum SP1) +TFS 2015 | SQL Server 2014
SQL Server 2012 (minimum SP1) +TFS 2013 Update 2 | SQL Server 2014
SQL Server 2012 (minimum SP1) +TFS 2013 | SQL Server 2012 (minimum SP1) +TFS 2012 | SQL Server 2012
SQL Server 2008 R2 +TFS 2010 | SQL Server 2008 R2
SQL Server 2008 + +If you're using SQL Server 2016, we require a Visual C++ runtime [update](http://support.microsoft.com/kb/3138367) to be installed. + +SQL Server 2014 has increased hardware requirements compared with previous versions. +Certain configurations might hurt TFS performance. +For more information, read [TFS 2013 Update 2: performance considerations using SQL Server 2014](http://support.microsoft.com/kb/2953452). + +If you're using SQL Server 2012 with SP1, +we recommend you also apply [cumulative update 2](http://support.microsoft.com/kb/2790947) +on top of SP1 to address a critical SQL Server bug around resource consumption. +This isn't a requirement because the bug only affects a small number of instances, +but we wanted you to be aware of it. +If you don't apply CU2, you should apply a SQL Server hotfix ([KB2793634](http://support.microsoft.com/kb/2793634)) +to addresses another (different) issue where SQL Server 2012 with SP1 might request an excessive amount of restarts. + +### TFS 2013 additional information + +| Category | Requirements | +| --- | --- | +| Required for TFS | Database Engine Services

Full-Text and Semantic Extractions for Search | +Required for reporting | Reporting Services – Native
Analysis Services | +| Collation settings | Must be accent sensitive
Must not be case sensitive
Must not be Binary
Must not be Binary - code point
For more information, see [SQL Server Collation Requirements for Team Foundation Server](../tfs-server/install/sql-server/collation-requirements.md) | +| Authentication | Windows authentication | +| Service account | You can use a domain account or a built-in account. | + + +**Your limits on database read operations** +Microsoft does not support any read operations against the TFS databases that originate from queries, scripts, .dll files, and so on, not provided by Microsoft or its support teams. If Microsoft Support determines that those read operations prevent them from solving your problem, the entire database will be unsupported. To return the database to a supported state, all unsupported read operations must stop. + +**SQL Server High Availability features Supported by Team Foundation Server** +SQL Server 2012 offers a new high availability (HA) feature that requires a Team Foundation Server-specific configuration. For more information, see: [Use SQL Server 2012 Always On Availability Groups with Team Foundation Server](../tfs-server/install/sql-server/use-always-on-groups.md) + +|SQL Server HA feature|TFS support|Requires TFS Configuration| +|---|---|---| +|Always On Failover Cluster Instances|Yes|No| +|Always On Availability Groups|Yes|Yes| +|SQL Mirroring|Yes|No| +|SQL Replication|No|No| +|SQL Log Shipping|No|No| + + +### SQL Server editions + +TFS supports Express, Standard, and Enterprise [editions of SQL server](http://www.microsoft.com/en-us/server-cloud/products/sql-server-editions/). +The Express edition is only recommended for evaluation purposes, personal use, or for very small teams. +We recommend Standard or Enterprise for all other scenarios. + + +## SharePoint + +**TFS 2018 discontinues support for the TFS Extension for SharePoint. +For more information, go here: +[https://go.microsoft.com/fwlink/?linkid=852977](https://go.microsoft.com/fwlink/?linkid=852977).** + +SharePoint is a collaboration product is not a TFS requirement, but some teams find SharePoint integration useful. If you want to use SharePoint Products, you must use a supported version that has the TFS extension for SharePoint installed. + +TFS version | Supported SharePoint versions +------------|------------------------------ +TFS 2018 | No longer supported +TFS 2017 | SharePoint 2013 (Foundation, Standard, Enterprise)
SharePoint 2010 (Foundation, Standard, Enterprise) +TFS 2015 | SharePoint 2013 (Foundation, Standard, Enterprise)
SharePoint 2010 (Foundation, Standard, Enterprise) +TFS 2013 | SharePoint 2013 (Foundation, Standard, Enterprise)
SharePoint 2010 (Foundation, Standard, Enterprise) +TFS 2012 | SharePoint 2013 (Foundation, Standard, Enterprise)
SharePoint 2010 (Foundation, Standard, Enterprise)
Office SharePoint Server 2007 (Standard, Enterprise)
Windows SharePoint Services 3.0 +TFS 2010 | Office SharePoint Server 2007 (Standard, Enterprise)
Windows SharePoint Services 3.0 + +**Authentication**: NTLM is the recommended authentication provider. Team Foundation Server Extensions for SharePoint Products does not support Basic authentication or anonymous authentication. In SharePoint Server 2013, Microsoft deprecated Windows classic-authentication in favor of claims-based authentication. TFS supports both, but for claims-based authentication, the authentication provider must be NTLM. TFS will only support NTLM-based claims. + +You can configure the TFS extension for SharePoint Products on your SharePoint server from the [TFS administration console](../tfs-server/command-line/open-admin-console.md). + +>**Tip:** +If you plan to install SharePoint, make sure that the version of SharePoint you want to use is compatible with the server operating system you’re using. Support for server operating systems in TFS is more amenable than in SharePoint. + +Here are your main options: + +- You can use Team Foundation Server standard or advanced configuration wizards to install SharePoint Foundation 2013 on the same server as Team Foundation Server. The Team Foundation Server extensions for SharePoint Products are installed automatically during Team Foundation Server installation. + +- You can use Team Foundation Server extensions for SharePoint Products configuration wizard to install SharePoint Foundation 2013 on a different server from the one running Team Foundation Server. + +- You can use SharePoint Server. If you use the enterprise version of SharePoint Server, you must configure it for dashboard compatibility. + +- You can use a different version of SharePoint Foundation than the one that ships with TFS. + + +**Dashboard requirements**: Team Foundation Server contains dashboards that use SharePoint Products features to display team data. The dashboards that are available to you depend on the version of SharePoint Products that you use. + +- If you use any supported enterprise edition of SharePoint Server, you get five dashboards that are based on Microsoft Excel. + +- If you use any other SharePoint Product (including the standard editions of SharePoint Server), you get two dashboards that are based on SQL Server Reporting Services. + + +## Active Directory + +You can install Team Foundation Server on more than one server if they are all joined to an Active Directory domain that is based on a functional level that TFS supports. You can install TFS on a single server that is joined to an Active Directory domain or that is a member of a workgroup. + +You cannot install TFS on servers that are joined to domains whose domain controllers are running Windows NT Server 4.0. The following table shows which functional levels for Active Directory domains TFS does not support: + +| Functional levels for Active Directory domains | Supported | +| --- | --- | +| **Windows 2000 mixed mode**: Domain controllers that are running Windows NT Server 4.0, Windows 2000, Windows Server 2003, and Windows Server 2003 R2. | No | +|**Windows Server 2003 interim mode**: Domain controllers that are running Windows NT Server 4.0, Windows Server 2003, and Windows Server 2003 R2. | No | + + +## Accounts + +You must use service accounts to install Team Foundation Server, Team +Foundation Build, and Team Foundation Server Proxy. If you use +reporting, you also need a report reader account when you install Team +Foundation Server. This topic describes the requirements for service +accounts and the report reader account for installation. For more +information, see [Service Accounts and Dependencies in Team Foundation Server](../tfs-server/admin/service-accounts-dependencies-tfs.md). + +Team Foundation Server requires multiple identities for installation, +but you can use a single account for all the identities, as long as that +account meets the requirements for all the identities for which you use +it. + +> **Tip:** +> Confused about accounts? New for this release is a tutorial available +> for Team Foundation Server installation that covers how to create +> accounts and groups for a single server installation. For more +> information, see [Set up groups for use in TFS deployments.](../tfs-server/admin/setup-ad-groups.md) + +**Best practices for accounts:** + +- If you use domain accounts for your service accounts, you should use + a different identity for the report reader account. + +- If you are installing a component in a workgroup, you must use local + accounts for user accounts. + +### Report reader account + +The report reader account is the identity that is used to gather +information for reports. If you use reporting, you must specify a report +reader account when you install Team Foundation Server. + +If you install Team Foundation Server with the default options, the +report reader account is also used as the identity of the service +account for SharePoint Foundation. + +| Feature | Sample user logon name (1) | Requirements | +| --- | --- | --- | +| Reporting | **TFSREPORTS** | You must specify a user account that has the Allow log on locally permission.
Default: You are prompted for this account. You cannot use a built-in account for the report reader account. | + + +### Service accounts + +Team Foundation Server, Team Foundation Build and Team Foundation Server +Proxy all require a service account. These service accounts become the +identity for the installed component. By default, every component uses a +built-in account (such as Network Service) as its service account. You +can change this account to a user account when you install the +component, but you must ensure that any user accounts that you use have +the **Log on as a service** permission. + +> **Tip:** +> Built-in accounts do not use passwords and already have the +> **Log on as a service** permission, making them easier +> to manage, especially in a domain environment. + +#### Service accounts for Team Foundation Server + +The service accounts in the following table are the identities for Team +Foundation Server and its components. + +The service account for Team Foundation Server is also used in +Internet Information Services (IIS) as the identity of the application +pool for Team Foundation Server. + +| Component | Sample user logon name (1) | Requirements | +| --- | --- | --- | +| Team Foundation Server | **TFSSERVICE** | You can specify a built-in account or a user account. If you specify a user account, it must have the **Log on as a service** permission.
You must not use the account that you use to install Team Foundation Server as the account for TFSSERVICE. For example, if you are logged in as domain\user1 when you install Team Foundation Server, do not use domain\user1 as the account for TFSSERVICE.
If your SharePoint site was not installed at the same time as Team Foundation Server, you must add TFSSERVICE to the Farm Administrators group for the SharePoint Central Administration site. For more information, see [Add the service account for Team Foundation Server to the Farm Administrators group](../tfs-server/install/sharepoint/setup-remote-sharepoint.md#tfs-svc-acct-to-farm-admin-group).
Default: Network Service | +| Team Foundation Build | **TFSBUILD** | You can specify a built-in account or a user account. If you use a user account, it must have the **Log on as a service** permission. | +| Team Foundation Server Proxy | **TFSPROXY** | You can specify a built-in account or a user account. If you use a user account, it must have the **Log on as a service** permission. | + + +#### Service accounts for Release Management for Visual Studio 2013 + +The service accounts in the following table are the identities for +Release Management Server and the Microsoft Deployment agent. + +| Component | Sample user logon name (1) | Requirements | +| --- | --- | --- | +| Release Management Server | **RMSERVER** | This is the identity used in Internet Information Service (IIS) for the application pool and the **Release Management Monitor** Windows service.
Default: Network Service | +| Microsoft Deployment Agent | **DEPLOY** | This identity is used to configure the machines in your environment for release. Make sure the identity you use here has enough permission to do whatever tasks are required. For example, if you need to install your application on this machine as part of your release, add this identity to the local Windows Administrators security group. If this identity will need to access builds on the network, make sure it has access to the network drop location. For step-by-step procedure, see [Install deployment agent and set up machines for an environment](../release/previous-version/install-release-management/install-deployment-agent.md).
Default: you are prompted for an account. | + + +#### Connect Release Management to TFS account + +If you connect Release Management to TFS, you need an account in TFS to +act as an intermediary account. For a step-by-step procedure, go here: +[Connect Release Management to TFS](../release/previous-version/install-release-management/connect-to-tfs.md) + + +| Component | Sample user logon name (1) | Requirements | +| --- | --- | --- | +| Release Management Server (connected to TFS) | **RMTFS** | A TFS user that is a member of the **Project Collection Administrators** ([minimal permissions that this account must have](http://blogs.msdn.com/b/visualstudioalm/archive/2013/12/19/how-to-configure-team-foundation-server-with-release-management.aspx)) group and has the **Make requests on behalf of others** permission set to allow in TFS. | + + +#### Service accounts for additional software + +The following table lists the service accounts that are the identities + +that are used to run Windows services for SharePoint Products and SQL +Server. + +The service account for SharePoint Products is also the identity of the +application pool for the SharePoint Central Administration site. + +| Component | Sample user logon name (1) | Requirements | +| --- | --- | --- | +| SharePoint Products | **WSSSERVICE** | You must specify a user account.
Default: If you install Team Foundation Server with the default options, the account that you specified as the report reader account is also used for this account. | +| SQL Server | **SQLSERVICE** | You can use a built-in system account or set up an account before you install SQL Server. Team Foundation Server has no requirements for this account. | + + +(1) To make it easier to discuss the different accounts that Team +Foundation Server requires, this guide uses the placeholder names that +are specified in the preceding tables. You do not have to use these +placeholder names for any accounts that you might create. + + + + +## Project Server + +**TFS 2017 discontinues support for Project Server.** + +Team Foundation Server doesn't require Project Server, but if you use Project Server, you must use a supported version. TFS-Project Server integration [enables data to flow from work items in Team Foundation Server to tasks in enterprise project plans in Project Server](../work/tfs-ps-sync/synchronize-tfs-project-server.md). + +TFS version | Supported Project Server versions | Supported Project versions +------------|---------------------------------- | --------------------------- +TFS 2017 | Not supported. See [Synchronize TFS with Project Server](../work/office/sync-ps-tfs.md) for details. | Not supported. +TFS 2015 | Project Server 2010 with SP1
Project Server 2013 | Project Professional 2007 with SP2 and [update](http://go.microsoft.com/fwlink/?LinkId=211633)
Project Professional 2007 with SP3
Project Professional 2010
Project Professional 2013 +TFS 2013 | Project Server 2010 with SP1
Project Server 2013 | Project Professional 2007 with SP2 and [update](http://go.microsoft.com/fwlink/?LinkId=211633)
Project Professional 2007 with SP3
Project Professional 2010
Project Professional 2013 +TFS 2012 | Project Server 2007 with SP2
Project Server 2007 with SP3
Project Server 2010 with SP1
Project Server 2013 | Project Professional 2007 with SP2 and [update](http://go.microsoft.com/fwlink/?LinkId=211633)
Project Professional 2007 with SP3
Project Professional 2010
Project Professional 2013 +TFS 2010 | Office Project Server 2007 with SP2
Office Project Server 2010 with [required updates](https://msdn.microsoft.com/library/gg412650%28v=vs.100%29.aspx) | Project Professional 2007 with SP2
Project Professional 2010 with [required updates](https://msdn.microsoft.com/library/gg412650%28v=vs.100%29.aspx) + +### Additional Project Server installation requirements notes + +To use Project Server with TFS, you must install Team Foundation Server Extensions for Project Server on your Project Server, and then configure the integration. If you run multiple servers with Project Server in a web farm, you must install these extensions on every application-tier and web-tier server in that farm. + +NTLM is the recommended authentication. In SharePoint Server 2013, Microsoft deprecated Windows classic-authentication in favor of claims-based authentication. TFS 2012 supports both, but for claims-based authentication, the authentication provider must be NTLM. TFS 2012 supports only NTLM-based claims. + +If you upgrade to Project Server 2013 from a Project Server 2010 installation that has been added to TFS, you have to perform a few extra steps to maintain the connection between TFS and Project Server. For more information, see this topic: [Upgrade Microsoft Project Server 2010 to Microsoft Project Server 2013](../work/tfs-ps-sync/upgrade-ps-2010-to-ps-2013.md). + +### Should you add Project Server to your current team project portal site? + +Project Server is an extension of SharePoint Products. You can easily run Project Server on the same SharePoint Products farm you use for Team Foundation Server. If you run Project Server this way, you need to install both the Team Foundation Server extensions for SharePoint Products and the extensions for Project Server on the same server. Team Foundation Server recommends you use a web application running on port 80 for integration with SharePoint Products and you can use this same web application to host the Project Server projects. For example, the URL for team portal sites and Microsoft Project Web App (PWA) sites both hosted on a web application on port 80 might look something like these: + +- http://*MOSS2013Server*/sites/DefaultCollection/*TFSProject* + +- http://*MOSS2013Server*/pwa/*EnterpriseProject* + +You can also run Project Server on its own SharePoint farm, separate from any farm where you might host team project portal sites. This would give you two SharePoint Products farm integrations in a single Team Foundation Server deployment. + +> [!TIP] +> Team Foundation Server has no topology requirements for Project Server. For performance reasons, we recommend you run Project Server on a server other than Team Foundation Server. If you want to set up a sandbox integration of Project Server and Team Foundation Server, you could install all the products on a single server for demonstrations or test purposes. + + +## Major releases and service packs + +We don't always immediately support major new versions of our dependencies (like SQL Server) +because we sometimes have to do updates to add support for those versions. +However, once we support a major version, we always support the latest service pack immediately when it releases. +We work with those teams to test the service pack before release. + + +## Hardware recommendations + +Team Foundation Server can scale from an Express installation on a laptop +used by a single person all the way up to a highly available deployment used +by thousands of people and comprising multiple application tiers behind a +load balancer, multiple SQL instances using SQL Always On, etc. The +following recommendations should apply to most TFS deployments, but your +requirements may vary depending on the usage of your team. For example, if +you have particularly large Git repositories or Team Foundation Version +Control branches, you may need higher spec machines that what are listed +below. Note that all of the machines discussed below could be either +physical or virtual. + +### Single Server deployment + +A single machine, with one dual-core processor, 4 GB of RAM, and a fast hard +disk drive. This configuration should support up to 250 users of core source +control (TF VC or Git) and work item tracking functionality. Extensive use of +automated build, test, or release would likely cause performance issues. Use +of search or reporting features would not be recommended with this configuration. + +Scaling a single server up can enable it to handle a larger number of users; +increased use of automated build, test, or release; and/or use of search or +reporting features. For example, increasing RAM to 8 GB should enable +a single server deployment to scale up to 500 users. + +For evaluation or personal use, you can use a a basic configuration with as +little as 1 GB of RAM, but clearly this would not be recommended for a +production server used by more than one person. + +### Multi Server deployments + +Scaling beyond 500 users; enabling extensive use of automated build, test, or release; +enabling use of Code Search; enabling use of reporting features; or enabling SharePoint +integration typically requires expanding to a multiple server deployment. + +For a team of more than 500 users, consider: + +- An application tier with one dual-core processor, 8 GB of memory, and a +fast hard disk drive. +- A data tier with one quad-core processor, 8 GB of memory, and high +performance storage such as an SSD. + +For a team of more than 2,000 users, consider: + +- An application tier with one quad-core processor, 16 GB or more of memory, +and a fast hard disk drive. +- A data tier with two or more quad-core processors, 16 GB or more of memory, +and very high performance storage (SSD, high performance SAN, etc.). + +If you plan to extensively use build, test, or release automation, we +recommend using higher spec application and data tiers to avoid performance +issues. For example, a team of 250 might use a multiple server deployment +that is more in line with the recommendations for a team of 500-2,000 users. We also +recommend that you keep an eye on your automated processes to ensure that +they are efficient – for example, retrieve data from source control +incrementally during builds whenever possible, rather than fully refreshing +on each build. NOTE: except for very small teams with extremely limited usage +of these features we do not recommend installing build, test, or release +agents on your TFS application tiers. + +If you plan to use Code Search, we typically recommend setting up a separate server for it. +For more details, see +[hardware requirements for Code Search](../search/code/administration.md#hardware-recommendations). + +If you plan to use reporting features, we recommend setting up a separate +server for your warehouse database and Analysis Services cube or using a +higher spec data tier. + +If you plan to use SharePoint integration, we recommend setting up a separate +server for your SharePoint instance or using a higher spec application tier. + +If you want to guarantee high availability, you should consider multiple +application tiers behind a load balancer and multiple SQL instances with your +TFS DBs in an Always On availability group. + +### Build service hardware requirements + +The XAML build service has the same operating system requirements as TFS. +It normally makes sense to run the build service on a machine separate from the TFS application tier. +Hardware requirements for the build service are the same as the operating system on which it is running. +However, you can optimize build service performance by tailoring the hardware specs +of your build machine to the types of builds your team will use. + + + +### SharePoint hardware requirements + +If you install SharePoint Products, +you will need more robust hardware than what is listed in the previous table. +For example, SharePoint Foundation 2013 requires a 64-bit 4 core CPU and a base minimum of 8 GB of system memory. +If you install SharePoint 2013 on a server that is also running SQL Server, +SharePoint recommends that you have 24 GB of system memory. + +Go here for complete SharePoint hardware requirements: + +* [Hardware and software requirements for SharePoint 2013 (SharePoint Foundation 2013/SharePoint Server 2013)](https://technet.microsoft.com/library/cc262485.aspx) +* [Hardware and software requirements (SharePoint Foundation 2010)](http://go.microsoft.com/fwlink/?LinkId=231850) +* Hardware and software requirements (SharePoint Server 2010) + + + + + +## Natural Languages + +You can install TFS in various languages on supported operating systems in various languages. However, you cannot use every combination of localized operating system with TFS and you can't install multiple languages on a single TFS server. The language of the installation of SharePoint Products can also complicate your deployment. However, you can add an appropriate language pack to the server that is running SharePoint Products to meet requirements for Team Foundation Server. + +The following table outlines the various language combinations that are supported: + +| Operating system | Team Foundation Server | Sharepoint Products | +| --- | --- | --- | +| English | English | English | +| English | Language other than English | Language (or language pack) must match Team Foundation Server | +| Language other than English | English | English (or English language pack added) | +| Language other than English | Language must match the operating system | Language (or language pack added) to match Team Foundation Server | + +The following rules clarify the language requirements for installations of Team Foundation Server. + +- If you are running an English language operating system, you can install any language version of Team Foundation Server. If you are not running an English language operating system, you must install the English version of Team Foundation Server or the version of Team Foundation Server that has been localized for the same language as the operating system. + +- If you want to use SharePoint Products, it must match the language of the installation of Team Foundation Server, or you must install the language pack that matches the language of your installation of Team Foundation Server. + +For example, you can install a Japanese version of Team Foundation Server on an English or Japanese operating system but not on a German operating system. If you install a Japanese version of Team Foundation Server, you must also have either a Japanese version of SharePoint Products or the Japanese language pack for SharePoint Products on the server that is running SharePoint Products. + +The following components do not have additional language requirements that are specific to working with Team Foundation Server: + +- Team Foundation Build Service + +- Team Foundation Server Proxy + +- Team Explorer + +- Visual Studio Lab Management + +Test controllers and agents have their own language requirements. For more information, see the following page on the Microsoft website: [Test Controller and Test Agent Requirements](https://msdn.microsoft.com/library/ff937706.aspx) + + + +## Client compatibility + +### Visual Studio + +We define three levels of client support for different versions of Visual Studio and Team Explorer. +Only the latest version has "full" compatibility with the latest Team Foundation Server, +because this will be the only client that contains components that can interface with new features for that release, +and will also be the only client from which you can perform certain administrative tasks such as creating new team projects. +Previous versions will have varying levels of support below that, depending on how old they are. + +Next, we describe the level of support that we guarantee with each client version. +Keep in mind that additional functionality other than what is listed below might continue to work using older clients. In fact, +it often does, but is outside the scope of what we test and support officially. + +Visual Studio/ Team Explorer version | TFS 2017 and VSTS support notes | TFS 2015 support notes | TFS 2013 support notes | TFS 2012 support notes | TFS 2010 support notes +-------------------------------------|-----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------- +Visual Studio 15 | Supported (RTM or latest update) | Supported (RTM or latest update) | Supported (RTM or latest update) | Supported (RTM or latest update) | Supported (RTM or latest update) +Visual Studio 2015 | Supported (RTM or latest update) | Supported (RTM or latest update) | Supported (RTM or latest update) | Supported (RTM or latest update) | Supported (RTM or latest update) +Visual Studio/Team Explorer 2013 | Supported (RTM or latest update) | Supported (RTM or latest update) | Supported (RTM or latest update) | Supported (RTM or latest update) | Supported (RTM or latest update) +Visual Studio/Team Explorer 2012 | Requires latest Visual Studio 2012 update. Supports Git with Visual Studio Tools for Git extension. | Requires latest Visual Studio 2012 update. Supports Git with Visual Studio Tools for Git extension. | Requires latest Visual Studio 2012 update. Supports Git with Visual Studio Tools for Git extension. | Supported (RTM or latest update). Supports Git with Visual Studio Tools for Git extension. | Supported (RTM or latest update). Supports Git with Visual Studio Tools for Git extension. +Visual Studio/Team Explorer 2010 | Requires SP1 and Compat GDR. | Requires SP1 and Compat GDR. | Requires SP1 and Compat GDR. | Requires SP1 and Compat GDR. | Requires SP1 and Compat GDR. +Visual Studio/Team Explorer 2008 | Version Control available using MSSCCI provider | Version Control available using MSSCCI provider | Version Control available using MSSCCI provider | Requires SP1 and Compat GDR. | Version control officially supported with MSSCCI provider. Version control unofficially supported with SP1 and Compat GDR. +Visual Studio 2005 | Version Control available using MSSCCI provider | Version Control available using MSSCCI provider | Version Control available using MSSCCI provider | Version Control available using MSSCCI provider | Version Control available using MSSCCI provider + +#### Full-featured support + +Any TFS-facing functionality exposed in the UI of Visual Studio and Team Explorer should work. +We guarantee full feature support between client and server of the same version. + +Note: If you are using the latest version of Visual Studio, +but will continue to use the most recent previous version of Team Foundation Server (either temporarily or permanently), +you can expect a high level of compatibility here as well. +All non-administrative scenarios will be supported. + +#### High level of support + +If you are running the most recent previous version of Visual Studio or Team Explorer +(for example: Visual Studio 2013, if you are on TFS 2015), +then you can expect most features to be supported from Visual Studio. +You might need to install the latest update, +but after doing so, mainline scenarios for all non-admin personas will be supported. +This includes features needed for developers and testers to continue their daily work, +such as queuing builds, running queries, viewing documents, and getting, editing, and checking in files. +Program Managers should also be able to continue using most features relevant to them, +but might need to rely on web access for some scenarios, such as managing areas and iterations, and writing new queries. + +Older process templates that were in use with the previous version of Team Foundation Server should continue to be compatible with the new server. + +#### General support + +If a client is two versions older than your server, you can expect general support (after installing a compatibility GDR). +This will look similar to the high level of support you see when Visual Studio is one release older than TFS; +however, the experience for some non-mainline scenarios may be degraded but not entirely blocked. +Non-admins should still be able to continue unimpeded in their daily work, +and older process templates should remain compatible with the new server. + +#### MSSCCI support + +Visual Studio/Team Explorer 2008 and Visual Studio 2005 are no longer officially supported. +To connect to the server, these clients must interface through the MSSCCI provider instead. +MSSCCI support only includes support for source control integration and MSSCCI commands. +The goal is simply to allow developers to continue working with legacy applications in an upgraded server. + +### Team Explorer Everywhere + +New versions of Team Explorer Everywhere are released through [GitHub](https://github.com/Microsoft/team-explorer-everywhere) +and the [Eclipse Marketplace](https://marketplace.eclipse.org/content/team-explorer-everywhere). +To maximize compatibility with the latest version of Team Foundation Server, you should use the latest version of Team Explorer Everywhere. +If you need support for an older version of Eclipse, Java, or an Operating System, +you may choose to use an older version of Team Explorer Everywhere that encompasses the range you need. +Multiple versions of Team Explorer Everywhere can also be installed side-by-side if you are running multiple versions of Eclipse. + +The following table includes all versions of Team Explorer Everywhere that are compatible with TFS 2013, and lists other TFS and Eclipse compatibility. + +Team Explorer Everywhere | Eclipse version | TFS 2017 | TFS 2015 | TFS 2013 | TFS 2012 | TFS 2010 | TFS 2008 | TFS 2005 +----------------------------------|-----------------|-----------------------------|-----------------------------|-----------------------------|-----------------------------|-----------------------------|-----------------------------|----------------- +Team Explorer Everywhere 2015 | Eclipse 3.5-4.3 | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![x](../_img/x.png) | ![x](../_img/x.png) +Team Explorer Everywhere 2013 | Eclipse 3.5-4.3 | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![x](../_img/x.png) | ![x](../_img/x.png) +Team Explorer Everywhere 2012 | Eclipse 3.4-4.3 | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) +Team Explorer Everywhere 2010 SP1 | Eclipse 3.2-3.6 | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) +Team Explorer Everywhere 2010 | Eclipse 3.0-3.5 | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) | ![Check](../_img/check.png) + + +### Browsers + +You can use these browsers with VSTS +and to access TFS with the web client. + +Version | Edge | Internet Explorer | Safari (Mac) | Firefox | Chrome +---------------|-------------|-------------------|----------------|-------------|------------- +VSTS | most recent | 11 and later | 9.1 and later | most recent | most recent +TFS 2017 | most recent | 11 and later | 9.1 and later | most recent | most recent +TFS 2015 | most recent | 9 and later | 5 and later | most recent | most recent +TFS 2013 | | 9 and later | 5 and later | most recent | most recent + +Edge, Firefox, and Chrome automatically update themselves, +so VSTS and TFS support the most recent version. + +### Office + +Office integration supports the following clients: [Excel](../work/office/bulk-add-modify-work-items-excel.md), [Project](../work/office/create-your-backlog-tasks-using-project.md), and [PowerPoint with Storyboarding](../work/office/storyboard-your-ideas-using-powerpoint.md). + + +TFS version | Supported Office versions +------------|-------------------------- +TFS 2017 | Office 2016
Office 2013
Office 2010 +TFS 2015 | Office 2013
Office 2010
Office 2007 +TFS 2013 | Office 2013
Office 2010
Office 2007 +TFS 2012 | Office 2010
Office 2007 +TFS 2010 | Office 2010
Office 2007 + +* If you are using SharePoint with TFS, you will need to add SP2 to Office 2007 and SP1 to Office 2010 for integration between Office and SharePoint. +* SharePoint 2010 does not support Office 2013. + +## TFS Build Compatibility + +**TFS 2018 discontinues support for the Xaml build system.** + +We've built a brand new [scriptable build system](../build-release/overview.md) that's web based and cross-platform. + +You may want to use an older version of Build if you plan to continue using the Xaml build system, +if you are using Build servers against multiple versions of TFS, or if you need to leverage servers +with older operating systems in your TFS deployment. TFS 2010 Xaml Controllers support operating +systems as far back as Windows XP and Windows Server 2003. + +TFS Version | Supported Build versions +------------|-------------------------- +TFS 2018 | TFS 2018 Build Agent
TFS 2017 Build Agent
TFS 2015 Build Agent +TFS 2017 | TFS 2017 Build Agent
TFS 2015 Build Agent
TFS 2015 Xaml Controller
TFS 2013 Xaml Controller
TFS 2010 Xaml Controller +TFS 2015 | TFS 2015 Build Agent
TFS 2015 Xaml Controller
TFS 2013 Xaml Controller
TFS 2010 Xaml Controller +TFS 2013 | TFS 2013 Xaml Controller
TFS 2012 Xaml Controller
TFS 2010 Xaml Controller +TFS 2012 | TFS 2012 Xaml Controller
TFS 2010 Xaml Controller +TFS 2010 | TFS 2010 Xaml Controller + +## More information about TFS requirements for companion products: + +SQL Server, SharePoint Products, and Project Server + +* [SQL Server requirements for Team Foundation Server](#sql-server) + + Team Foundation Server requires SQL Server, but you have many options, + including an option to let Team Foundation Server install SQL Server Express for you. + +* [SharePoint Products requirements for Team Foundation Server](requirements.md#sharepoint) + + Team Foundation Server doesn't require SharePoint Products. + diff --git a/docs/accounts/restrict-access-tfs.md b/docs/accounts/restrict-access-tfs.md new file mode 100644 index 00000000000..8cf5753d65d --- /dev/null +++ b/docs/accounts/restrict-access-tfs.md @@ -0,0 +1,74 @@ +--- +title: Restrict access in VSTS and TFS +description: How to set permissions to grant or restrict access to select build, version control, or work tracking functions VSTS and TFS +ms.assetid: ee4c4a8f-0478-4ade-8b12-4e5ffd0054c7 +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.manager: douge +ms.author: douge +ms.date: 08/04/2017 +--- + +# Restrict access in VSTS and TFS + +**VSTS** | **TFS 2017** | **TFS 2015** | **TFS 2013** + +You can restrict access to resources that you manage in TFS or VSTS by setting the permission state to Deny through a security group. For a comprehensive list of default groups and permissions, see [Permission reference for Team Foundation Server](../security/permissions.md). + +## TFVC + +From the Version Control tab in the TWA administration context, you can set permissions for a group or individual. + +![Permissions page for TF version control](_img/restrict-access-tfs/readers-permissions.png) + +## Git + +For team projects that use Git for version control, you can set the following permissions. + +![Permissions page for Git project in admin context](_img/restrict-access-tfs/git-permissions.png) +For additional information, see [Permission reference for Team Foundation Server](../security/permissions.md). + +## Build definitions + +From the Build hub in TWA, you can set build permissions at the project level for a group or individual. + +![Security link in Actions menu on Build page](_img/restrict-access-tfs/build-security.png) + +You can set permissions for the build operations shown in the following image. + +![Permissions page for TF version control](_img/restrict-access-tfs/readers-permissions.png) + +Also, you can set permissions by opening the ![Context Menu Icon](_img/context-menu-icon.png) context menu for a build definition. +For additional information, see [Permission reference for Team Foundation Server](../security/permissions.md). + + +## Work items + +### Changing work items + +By [setting permissions on an area path](../work/how-to/set-permissions-access-work-tracking.md), you can deny a group or individual the ability to create or edit work items assigned under an area path. + +[Set a condition field rule](../work/reference/apply-rule-work-item-field.md), [a condition-based field rule](https://msdn.microsoft.com/library/ms194966.aspx) or a combination of the two that applies to a group. You can restrict changes from being made to a field by specifying a qualifying rule and making it apply for a specific group. Conditional rules can include **CANNOTLOSEVALUE**, **EMPTY**, **FROZEN**, **NOTSAMEAS**, **READONLY**, and **REQUIRED** elements. + +### Creating specific types of work items + +You can restrict access in one of two ways: + +- By [adding WITs to the Hidden Categories group](https://msdn.microsoft.com/library/dd695775.aspx), you can prevent the majority of project contributors from creating them. You [can create a hyperlink to a template](https://msdn.microsoft.com/library/ff407162.aspx) that opens the work item form and share that link with those team members who you do want to create them. +- By adding [a field rule to the workflow](../work/reference/apply-rule-work-item-field.md) for the System.CreatedBy field, you can effectively restrict a group of users from creating a work item of a specific type. As the following example shows, the user who creates the work item must belong to the `Allowed Group` in order to save the work item. + + + + + + + + + +For more information about how to customize WITs, +see [Modify or add a custom work item type (WIT)](../work/customize/add-modify-wit.md). + +## Work item queries + +[Set permissions on a shared query or query folder](../work/how-to/set-permissions-access-work-tracking.md) +to restrict who can modify the query or queries within the folder. diff --git a/docs/accounts/save-team-project-data.md b/docs/accounts/save-team-project-data.md new file mode 100644 index 00000000000..a59c22895c1 --- /dev/null +++ b/docs/accounts/save-team-project-data.md @@ -0,0 +1,37 @@ +--- +title: Save team project data for Visual Studio Team Services +description: Save team project data for Visual Studio Team Services +ms.assetid: b944f980-81c0-4100-b0d8-2fc575c65693 +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.manager: douge +ms.author: estfan +ms.date: 08/11/2016 +--- + +# Save team project data for Visual Studio Team Services + +**VSTS** + + +When you delete a team project, you cannot recover its data later. Therefore, you should save team project data. + +You can use the following procedures to save data that users most care about, such as source code, build data, and work items. + +- **Source code and custom build templates:** You can download your files as a zip file. + + ![context menu with download as zip menu item](_img/delete-team-project/ic760345.png) + + This process doesn’t save any change history or links to other artifacts. + + If you use Git, [clone your repositories](../git/gitquickstart.md) to retain the full project history and all the branches. + +- **Build data**: To save logs and data in your drop build folders, see [View build results](https://msdn.microsoft.com/library/ms181733.aspx). + +- **Work item tracking data:** Create a work item query and open it [using Excel](../work/office/bulk-add-modify-work-items-excel.md). Save the Excel spreadsheet. + + This process doesn’t save any attachments, change history, or links to other artifacts. + +If you have Team Foundation Server OnPrem, you can easily save data stored for a team project collection +by [making a backup of the database](../tfs-server/admin/backup/config-backup-sched-plan.md). You can also +use the same steps as above. diff --git a/docs/accounts/set-up-vs.md b/docs/accounts/set-up-vs.md new file mode 100644 index 00000000000..303dc7ca9e3 --- /dev/null +++ b/docs/accounts/set-up-vs.md @@ -0,0 +1,221 @@ +--- +title: Set up Visual Studio with VSTS +description: Share code with Git and manage work with Agile tools in Visual Studio Team Services (VSTS) for continuous integration and continuous delivery +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: abf70640-8fb2-4def-9237-21276a39b5ad +ms.manager: douge +ms.author: estfan +ms.date: 08/04/2016 +--- + +# Set up Visual Studio with VSTS + +**VSTS** + +When you first launch [Visual Studio 2015](https://www.visualstudio.com/products/vs-2015-product-editions), +you can sign in and connect to [Visual Studio Team Services](https://www.visualstudio.com/products/visual-studio-team-services-vs). + +If you have already gone through Visual Studio sign in, or you are using Visual Studio 2017, then [learn how](../git/gitquickstart.md) to connect to +your VSTS from the Team Explorer window. + +Once connected, you can store or share code in free, unlimited, private, +cloud-based Git repositories or Team Foundation version control. +Organize and manage your work using Agile tools for DevOps, +continuous integration, and continuous delivery so your team can build often, +test early, and ship faster. + +> To set up Visual Studio without VSTS, +> learn how to [get started here](https://msdn.microsoft.com/library/e2h7fzkw.aspx). +> To host your own server, +> learn how to [install and set up Team Foundation Server](../tfs-server/install/get-started.md). + +VSTS is free for +[up to 5 users with access to Basic features](https://www.visualstudio.com/products/visual-studio-team-services-feature-matrix-vs) +and for unlimited [Visual Studio subscribers](https://www.visualstudio.com/products/how-to-buy-vs) and +[Stakeholders who can access limited features](https://www.visualstudio.com/products/visual-studio-team-services-feature-matrix-vs). +Learn [what else you get with VSTS](https://www.visualstudio.com/pricing/visual-studio-team-services-pricing-vs). +If you want, you can also use VSTS with any IDE or code editor, like: + +* [Eclipse, Android Studio, or IntelliJ](http://java.visualstudio.com/Docs/tools/intro) +* Xcode (see [Git](../git/share-your-code-in-git-xcode.md) or [TFVC](../tfvc/share-your-code-in-tfvc-xcode.md)) +* [Visual Studio Code](https://code.visualstudio.com/docs/editor/versioncontrol) + +## How do I set up Visual Studio 2015 for VSTS during sign in? + +0. [Download and install Visual Studio](https://go.microsoft.com/fwlink/?LinkId=309297&clcid=0x409&slcid=0x409), +if you don't have the version you want already. +[Which versions can I use with Visual Studio Team Services?](#vs-versions) + + If you have a Visual Studio subscription that + includes the Visual Studio IDE, get the version + that's available with your subscription. + +0. Start Visual Studio, +then sign in to create your profile. + + This profile saves your settings and roams with you + when you sign in to Visual Studio on any computer. + [Why else should I sign in?](#why-sign-in) + If you're a Visual Studio subscriber, + use the sign-in address for your subscription. + + ![Sign in to Visual Studio](_img/set-up-vs/sign-in-visual-studio.png) + + [Can't sign in?](#cannot-sign-in) + +0. Enter your sign-in address, +then enter your password. + +0. Add your Visual Studio profile details. You only have to do this once. + + ![Create your profile](_img/set-up-vs/profile-account-details.png) + +0. Give your VSTS account a name, +and confirm its location. + + ![Name your account, confirm its location](_img/set-up-vs/profile-account-details2.png) + + [How can I create a VSTS account later](#WhatIsVSO) or [change its location?](#change-location) + +0. Create your first team project to store your code, +work items, backlog, builds, tests, and other assets. +Name your team project, select a process to organize your work, +and choose the version control to manage your code. + + ![Create your team project](_img/set-up-vs/create-team-project-vs.png) + + Not sure which to choose? Learn which + [process](../work/guidance/choose-process.md) + and version control ([Git](../git/overview.md) + or [Team Foundation Version Control](../tfvc/overview.md)) + work best for you. + +0. If you're a new Visual Studio user, you can change your settings here, +or change them later in Visual Studio options. + + ![Change settings, if you want](_img/set-up-vs/hellonewprofile.png) + + These changes are saved with your profile, + and your settings roam with you wherever you sign in. + +0. To view your new VSTS account, + sign in to ```https://{youraccount}.visualstudio.com```. + + [Having browser problems with VSTS?](#browser-problems) + +#### Next + +* [Add users to your VSTS account](add-account-users-assign-access-levels.md) + +* Add code to [Git](../git/share-your-code-in-git-vs.md) +or [Team Foundation](../tfvc/share-your-code-in-tfvc-vs.md) version control + +* [Create your backlog](../work/backlogs/create-your-backlog.md) to organize your work, + [manage your process](../work/process/manage-process.md), + or [customize your process](../work/process/customize-process.md) + +## Q & A + +### Visual Studio + + + + +####Q: Why sign in? + +A: Your Visual Studio settings, +like automatic brace completion, +are saved with your profile. +These settings roam with your [personal Microsoft account](https://www.microsoft.com/account), +or your [work or school account](https://azure.microsoft.com/en-us/documentation/articles/sign-up-organization/), +when you sign in to Visual Studio on any computer. + +Sign in to Visual Studio during the 30-day +trial period for these benefits: + +* Visual Studio Enterprise: Extend your trial for 90 days. When your trial expires, +learn [how to unlock Visual Studio](https://msdn.microsoft.com/library/dn950037.aspx). +* Visual Studio Express or Community: Continue to use this edition for free + +When you create your profile, +you can also create a VSTS account. + +Learn more about +[the benefits of signing in and creating a profile](https://msdn.microsoft.com/library/dn457348.aspx). + + +####Q: Why can't I sign in? + +A: To create a profile and save your settings, +you'll need to sign in with a [personal Microsoft account](https://www.microsoft.com/account) +or a [work or school account](https://azure.microsoft.com/en-us/documentation/articles/sign-up-organization/) +that's managed by Azure Active Directory. + + + +[!INCLUDE [visual-studio-versions](../_shared/qa-visual-studio-versions.md)] + +####Q: Can I use Visual Studio 2015 with Visual Studio 2013 and 2012 on the same computer? + +A: Yes, you can run all these versions on the same computer. + +####Q: My subscription expired. What do I do? + +A: Here's [how to unlock Visual Studio](https://msdn.microsoft.com/library/dn950037.aspx). +If you're having subscription problems, +try [Subscription Support](https://www.visualstudio.com/support/subscription-support-vs). + +####Q: I'm having problems installing or signing in to Visual Studio. How do I get help? + +A: Learn more about: + +* [Installing Visual Studio](https://msdn.microsoft.com/en-us/library/e2h7fzkw.aspx). +* [Signing in to Visual Studio](https://msdn.microsoft.com/library/dn457348.aspx). +* [Managing multiple user accounts](https://msdn.microsoft.com/en-us/library/dn872465.aspx). + +Or contact [Visual Studio Support](https://www.visualstudio.com/support/support-overview-vs). + + + +### Visual Studio Team Services + + + + +####Q: How can I create a VSTS account later? + +A: Learn how to [sign up for Visual Studio Team Services](create-account-msa-or-work-student.md). + + + +[!INCLUDE [browser-problems](../_shared/qa-browser-problems.md)] + +[!INCLUDE [find-account-name](../_shared/qa-find-account-name.md)] + +[!INCLUDE [recover-password](../_shared/qa-recover-password.md)] + + +####Q: Can I change my VSTS account location? + +A: Yes, for a better experience, +you can change your account's location during signup +so that your account is closest to most users. + +![Change account location](_img/set-up-vs/change-location.png) + +Your account's default location is selected based on the closest +[Microsoft Azure region](https://azure.microsoft.com/en-us/regions) +where VSTS is available. + +[!INCLUDE [secure-protect-data](../_shared/qa-secure-protect-data.md)] + +[!INCLUDE [team-services-sla](../_shared/qa-vsts-sla.md)] + +[!INCLUDE [change-account-name-owner](../_shared/qa-change-account-name-owner.md)] + +[!INCLUDE [delete-account](../_shared/qa-delete-account.md)] + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] + + diff --git a/docs/accounts/toc.yml b/docs/accounts/toc.yml new file mode 100644 index 00000000000..818443d2cc1 --- /dev/null +++ b/docs/accounts/toc.yml @@ -0,0 +1,119 @@ +- name: Account Management + href: index.md +- name: Overview + items: + - name: About account management + href: account-management.md + - name: Access with Azure AD + href: access-with-azure-ad.md +- name: Quickstarts + items: + - name: Create your VSTS account + href: create-account-msa-or-work-student.md + - name: Try extensions for free + href: /vsts/billing/try-additional-features-vs?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json +- name: Tutorials + items: + - name: Change Azure AD tenant + href: change-azure-active-directory-vsts-account.md +- name: Concepts + items: + - name: Adding Basic or VS subscription users to your account + href: add-basic-or-vs-subscription-users.md +- name: How-to Guides + items: + - name: Manage accounts + items: + - name: Change account owner + href: change-account-ownership-vs.md + - name: Rename account + href: rename-vsts-account.md + - name: Delete account + href: delete-your-vsts-account.md + - name: Recover account + href: recover-your-vsts-account.md + - name: Manage team projects + items: + - name: Create team project + href: create-team-project.md + - name: Rename team project + href: rename-team-project.md + - name: Delete team project + href: delete-team-project.md + - name: Save team project data + href: save-team-project-data.md + - name: Connect to team projects + href: /vsts/connect/connect-team-projects?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json + - name: Manage account access + items: + - name: Add users and assign access + href: add-account-users-assign-access-levels.md + - name: "Add users to your account (Streamlined User Management)" + href: manage-users-table-view.md + - name: "Add users to your account (User hub)" + href: add-account-users-from-user-hub.md + - name: Manage conditional access + href: manage-conditional-access.md + - name: Add existing users to additional team projects + href: add-team-members-vs.md + - name: Link work accounts to Visual Studio with MSDN subscriptions + href: /vsts/billing/link-msdn-subscription-to-organizational-account-vs?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json + - name: Authenticate with personal access tokens + href: use-personal-access-tokens-to-authenticate.md + - name: Change app access policies + href: change-application-access-policies-vs.md + - name: Delete users from your account + href: delete-account-users.md + - name: "Delete users from your account (User hub)" + href: delete-account-users-users-hub.md + - name: Access with Azure AD + items: + - name: Add Azure AD group to VSTS group + href: manage-azure-active-directory-groups-vsts.md + - name: Connect VSTS account to Azure AD + href: connect-account-to-aad.md + - name: Add VSTS users to your Azure AD + href: add-users-to-aad.md + - name: Disconnect VSTS account from Azure AD + href: disconnect-account-from-aad.md + - name: Delete users from VSTS connected to Azure AD + href: delete-users-from-services-aad.md + - name: Permissions and access + items: + - name: Add a user as an administrator + href: ../security/set-project-collection-level-permissions.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json + - name: Restrict access to resources + href: restrict-access-tfs.md?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json +- name: Troubleshooting + items: + - name: Account creation + href: faq-create-account.md + - name: Add and delete users + href: faq-add-delete-users.md + - name: Delete and restore account + href: faq-delete-restore-vsts-account.md + - name: Access with Azure Active Directory + href: faq-azure-access.md + - name: Rename team project + href: faq-rename-team-project.md +- name: Reference + items: + - name: Permissions and access + href: /vsts/security/permissions-access?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Permissions and groups reference + href: /vsts/security/permissions?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Migrate from TFS to VSTS + href: ../migrate-to-vsts-from-tfs.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json +- name: Resources + items: + - name: New User Guide + href: ../user-guide/index.md + - name: Billing + href: ../billing/index.md + - name: "Security & Identity" + href: ../security/index.md + - name: Manage Extensions + href: ../marketplace/index.md + - name: Service hooks + href: ../service-hooks/index.md + diff --git a/docs/accounts/use-personal-access-tokens-to-authenticate.md b/docs/accounts/use-personal-access-tokens-to-authenticate.md new file mode 100644 index 00000000000..6afb9f181a5 --- /dev/null +++ b/docs/accounts/use-personal-access-tokens-to-authenticate.md @@ -0,0 +1,37 @@ +--- +title: Authenticate access with personal access tokens | VSTS & TFS +description: Use personal access tokens to authenticate access to VSTS and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: d980d58e-4240-47c7-977c-baaa7028a1d8 +ms.manager: douge +ms.author: estfan +ms.date: 08/08/2016 +--- + +# Authenticate access with personal access tokens for VSTS and TFS + +**VSTS** | **TFS 2017** + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) use enterprise-grade authentication, +backed by Microsoft account or Azure Active Directory (Azure AD), to protect and secure your data. Clients +like Visual Studio and +Eclipse (with the Team Explorer Everywhere plug-in) +natively support Microsoft account and Azure AD authentication, so you can directly use those authentication methods +to sign in. + +For non-Microsoft tools that integrate into VSTS but do not support Microsoft account or Azure AD authentication +interactions (for example, Git, NuGet, or XCode), you need to set up personal access tokens by using +[Git credential managers](../git/set-up-credential-managers.md) or by creating PATs manually (see below). You can also use personal access tokens when there is no "pop up UI" such as with command-line tools, integrating tools or tasks into build pipelines, or using [REST APIs](../integrate/get-started/rest/basics.md). + +Personal access tokens essentially are alternate passwords that you create in a secure way using your normal authentication, +and PATs can have expiration dates, limited scopes (for example, only certain REST APIs or command line operations are valid), +and specific VSTS accounts. You can put them into environment variables so that scripts do not hardcode +passwords. For more information, see [Authentication overview](../git/auth-overview.md) and [scopes](../integrate/get-started/authentication/oauth.md#scopes). + +[!INCLUDE [personal-access-tokens-procedure](../git/_shared/personal-access-tokens.md)] + +## Using PATs + +For example using PATs, see using [Git credential managers](../git/set-up-credential-managers.md), [REST APIs](../integrate/get-started/rest/basics.md), [NuGet on a Mac](../package/nuget/consume.md#mac-os), and +[Reporting clients](../report/analytics/client-authentication-options.md#enter-credentials-within-a-client). diff --git a/docs/articles/_img/build-deployment-best-practices/continuous-delivery-release-pipeline.png b/docs/articles/_img/build-deployment-best-practices/continuous-delivery-release-pipeline.png new file mode 100644 index 00000000000..18d0ac198c4 Binary files /dev/null and b/docs/articles/_img/build-deployment-best-practices/continuous-delivery-release-pipeline.png differ diff --git a/docs/articles/_img/build-deployment-best-practices/release-template.png b/docs/articles/_img/build-deployment-best-practices/release-template.png new file mode 100644 index 00000000000..9e9ff726a8b Binary files /dev/null and b/docs/articles/_img/build-deployment-best-practices/release-template.png differ diff --git a/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-drift.png b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-drift.png new file mode 100644 index 00000000000..99704cbeb69 Binary files /dev/null and b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-drift.png differ diff --git a/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-noise-vside.png b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-noise-vside.png new file mode 100644 index 00000000000..b2a187d23e0 Binary files /dev/null and b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-noise-vside.png differ diff --git a/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-noise.png b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-noise.png new file mode 100644 index 00000000000..5353d0310d8 Binary files /dev/null and b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-noise.png differ diff --git a/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic.png b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic.png new file mode 100644 index 00000000000..d259dddf2de Binary files /dev/null and b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-basic.png differ diff --git a/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-delete-branches-show.png b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-delete-branches-show.png new file mode 100644 index 00000000000..4a5ee1c35c0 Binary files /dev/null and b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-delete-branches-show.png differ diff --git a/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-delete-branches.png b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-delete-branches.png new file mode 100644 index 00000000000..b450b97ea20 Binary files /dev/null and b/docs/articles/_img/effective-feature-isolation-on-tfvc/feature-isolation-delete-branches.png differ diff --git a/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/channel9.png b/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/channel9.png new file mode 100644 index 00000000000..7c74e9d665b Binary files /dev/null and b/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/channel9.png differ diff --git a/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-complex.png b/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-complex.png new file mode 100644 index 00000000000..8752efb99d6 Binary files /dev/null and b/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-complex.png differ diff --git a/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-initial.png b/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-initial.png new file mode 100644 index 00000000000..e2297f31a4d Binary files /dev/null and b/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-initial.png differ diff --git a/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-vnext.png b/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-vnext.png new file mode 100644 index 00000000000..b5d86d36dca Binary files /dev/null and b/docs/articles/_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-vnext.png differ diff --git a/docs/articles/_img/git-dates/commit-details.png b/docs/articles/_img/git-dates/commit-details.png new file mode 100644 index 00000000000..c5aa5e7a494 Binary files /dev/null and b/docs/articles/_img/git-dates/commit-details.png differ diff --git a/docs/articles/_img/git-dates/git.png b/docs/articles/_img/git-dates/git.png new file mode 100644 index 00000000000..54f2b1a1a03 Binary files /dev/null and b/docs/articles/_img/git-dates/git.png differ diff --git a/docs/articles/_img/git-log-history-simplification/Filters.png b/docs/articles/_img/git-log-history-simplification/Filters.png new file mode 100644 index 00000000000..0ef5b2734ad Binary files /dev/null and b/docs/articles/_img/git-log-history-simplification/Filters.png differ diff --git a/docs/articles/_img/git-log-history-simplification/git.png b/docs/articles/_img/git-log-history-simplification/git.png new file mode 100644 index 00000000000..54f2b1a1a03 Binary files /dev/null and b/docs/articles/_img/git-log-history-simplification/git.png differ diff --git a/docs/articles/_img/git-log-history-simplification/history-simplification-branches.png b/docs/articles/_img/git-log-history-simplification/history-simplification-branches.png new file mode 100644 index 00000000000..74e606fe66a Binary files /dev/null and b/docs/articles/_img/git-log-history-simplification/history-simplification-branches.png differ diff --git a/docs/articles/_img/migration-advanced-topics/identityMapOverride.png b/docs/articles/_img/migration-advanced-topics/identityMapOverride.png new file mode 100644 index 00000000000..b551194a5f5 Binary files /dev/null and b/docs/articles/_img/migration-advanced-topics/identityMapOverride.png differ diff --git a/docs/articles/_img/migration-import/ImportSpecFillOutNoCode.png b/docs/articles/_img/migration-import/ImportSpecFillOutNoCode.png new file mode 100644 index 00000000000..678566f794a Binary files /dev/null and b/docs/articles/_img/migration-import/ImportSpecFillOutNoCode.png differ diff --git a/docs/articles/_img/migration-import/StorageExplorer.png b/docs/articles/_img/migration-import/StorageExplorer.png new file mode 100644 index 00000000000..b9476de5774 Binary files /dev/null and b/docs/articles/_img/migration-import/StorageExplorer.png differ diff --git a/docs/articles/_img/migration-import/VSTSMigrationGuideCover-227x300.png b/docs/articles/_img/migration-import/VSTSMigrationGuideCover-227x300.png new file mode 100644 index 00000000000..85449ef32b1 Binary files /dev/null and b/docs/articles/_img/migration-import/VSTSMigrationGuideCover-227x300.png differ diff --git a/docs/articles/_img/migration-import/aadLogin.png b/docs/articles/_img/migration-import/aadLogin.png new file mode 100644 index 00000000000..d6d9dc85e6e Binary files /dev/null and b/docs/articles/_img/migration-import/aadLogin.png differ diff --git a/docs/articles/_img/migration-import/identityMapNewlyGenerated.png b/docs/articles/_img/migration-import/identityMapNewlyGenerated.png new file mode 100644 index 00000000000..7c24636dd3c Binary files /dev/null and b/docs/articles/_img/migration-import/identityMapNewlyGenerated.png differ diff --git a/docs/articles/_img/migration-import/importFiles.png b/docs/articles/_img/migration-import/importFiles.png new file mode 100644 index 00000000000..51251df0043 Binary files /dev/null and b/docs/articles/_img/migration-import/importFiles.png differ diff --git a/docs/articles/_img/migration-import/importSpecAfter.png b/docs/articles/_img/migration-import/importSpecAfter.png new file mode 100644 index 00000000000..977a2322c7d Binary files /dev/null and b/docs/articles/_img/migration-import/importSpecAfter.png differ diff --git a/docs/articles/_img/migration-import/importSpecBefore.png b/docs/articles/_img/migration-import/importSpecBefore.png new file mode 100644 index 00000000000..45f35b4e3a9 Binary files /dev/null and b/docs/articles/_img/migration-import/importSpecBefore.png differ diff --git a/docs/articles/_img/migration-import/importSpecCompleted.png b/docs/articles/_img/migration-import/importSpecCompleted.png new file mode 100644 index 00000000000..fa9f208395d Binary files /dev/null and b/docs/articles/_img/migration-import/importSpecCompleted.png differ diff --git a/docs/articles/_img/migration-import/importSpecHalfFilledOut.png b/docs/articles/_img/migration-import/importSpecHalfFilledOut.png new file mode 100644 index 00000000000..394b21d1889 Binary files /dev/null and b/docs/articles/_img/migration-import/importSpecHalfFilledOut.png differ diff --git a/docs/articles/_img/migration-import/importSpecIaaS.png b/docs/articles/_img/migration-import/importSpecIaaS.png new file mode 100644 index 00000000000..d41e35694f3 Binary files /dev/null and b/docs/articles/_img/migration-import/importSpecIaaS.png differ diff --git a/docs/articles/_img/migration-import/importSpecNotFilledOut.png b/docs/articles/_img/migration-import/importSpecNotFilledOut.png new file mode 100644 index 00000000000..a7a35623789 Binary files /dev/null and b/docs/articles/_img/migration-import/importSpecNotFilledOut.png differ diff --git a/docs/articles/_img/migration-import/loggingFiles.png b/docs/articles/_img/migration-import/loggingFiles.png new file mode 100644 index 00000000000..f22de5f1c5f Binary files /dev/null and b/docs/articles/_img/migration-import/loggingFiles.png differ diff --git a/docs/articles/_img/migration-import/tfsmigratorConsole.png b/docs/articles/_img/migration-import/tfsmigratorConsole.png new file mode 100644 index 00000000000..7853e5de400 Binary files /dev/null and b/docs/articles/_img/migration-import/tfsmigratorConsole.png differ diff --git a/docs/articles/_img/migration-integration/migrate-integrate-featured-solution.png b/docs/articles/_img/migration-integration/migrate-integrate-featured-solution.png new file mode 100644 index 00000000000..6b43247db99 Binary files /dev/null and b/docs/articles/_img/migration-integration/migrate-integrate-featured-solution.png differ diff --git a/docs/articles/_img/migration-integration/migrate-integrate-featured-tools.png b/docs/articles/_img/migration-integration/migrate-integrate-featured-tools.png new file mode 100644 index 00000000000..04f46ef5ed4 Binary files /dev/null and b/docs/articles/_img/migration-integration/migrate-integrate-featured-tools.png differ diff --git a/docs/articles/_img/migration-overview/MigrationHighLevelExample.PNG b/docs/articles/_img/migration-overview/MigrationHighLevelExample.PNG new file mode 100644 index 00000000000..e1dd33bfe56 Binary files /dev/null and b/docs/articles/_img/migration-overview/MigrationHighLevelExample.PNG differ diff --git a/docs/articles/_img/migration-post-import/UserSummary.png b/docs/articles/_img/migration-post-import/UserSummary.png new file mode 100644 index 00000000000..23849c701ec Binary files /dev/null and b/docs/articles/_img/migration-post-import/UserSummary.png differ diff --git a/docs/articles/_img/migration-troubleshooting/conformProjectProcessesPowerShell.png b/docs/articles/_img/migration-troubleshooting/conformProjectProcessesPowerShell.png new file mode 100644 index 00000000000..a2c281d4e23 Binary files /dev/null and b/docs/articles/_img/migration-troubleshooting/conformProjectProcessesPowerShell.png differ diff --git a/docs/articles/_img/migration-troubleshooting/exportProjectProcessesPowerShell.png b/docs/articles/_img/migration-troubleshooting/exportProjectProcessesPowerShell.png new file mode 100644 index 00000000000..3ec867511c0 Binary files /dev/null and b/docs/articles/_img/migration-troubleshooting/exportProjectProcessesPowerShell.png differ diff --git a/docs/articles/_img/migration-troubleshooting/witLogFile.png b/docs/articles/_img/migration-troubleshooting/witLogFile.png new file mode 100644 index 00000000000..bfe14f0662c Binary files /dev/null and b/docs/articles/_img/migration-troubleshooting/witLogFile.png differ diff --git a/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Mirror-Done.PNG b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Mirror-Done.PNG new file mode 100644 index 00000000000..dd7a3a6356d Binary files /dev/null and b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Mirror-Done.PNG differ diff --git a/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-NewRepo.PNG b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-NewRepo.PNG new file mode 100644 index 00000000000..ba0388dd164 Binary files /dev/null and b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-NewRepo.PNG differ diff --git a/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-NewRepoInfo.PNG b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-NewRepoInfo.PNG new file mode 100644 index 00000000000..47faead05f4 Binary files /dev/null and b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-NewRepoInfo.PNG differ diff --git a/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Push-Done.PNG b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Push-Done.PNG new file mode 100644 index 00000000000..feeacc64827 Binary files /dev/null and b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Push-Done.PNG differ diff --git a/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Validate.PNG b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Validate.PNG new file mode 100644 index 00000000000..7fecb47b421 Binary files /dev/null and b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Validate.PNG differ diff --git a/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Visual.PNG b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Visual.PNG new file mode 100644 index 00000000000..cbce25d9116 Binary files /dev/null and b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Visual.PNG differ diff --git a/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Warning.PNG b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Warning.PNG new file mode 100644 index 00000000000..88553e224d6 Binary files /dev/null and b/docs/articles/_img/move-git-repos-between-team-projects/MoveRepo-Warning.PNG differ diff --git a/docs/articles/_img/move-git-repos-between-team-projects/git.png b/docs/articles/_img/move-git-repos-between-team-projects/git.png new file mode 100644 index 00000000000..54f2b1a1a03 Binary files /dev/null and b/docs/articles/_img/move-git-repos-between-team-projects/git.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-app-layer.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-app-layer.png new file mode 100644 index 00000000000..88af73f874b Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-app-layer.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-ai.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-ai.png new file mode 100644 index 00000000000..a45fe3655e5 Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-ai.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-build.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-build.png new file mode 100644 index 00000000000..3d16303eee9 Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-build.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-release.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-release.png new file mode 100644 index 00000000000..4b8b80d7b6f Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-release.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash.png new file mode 100644 index 00000000000..1d185da7c90 Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-dash.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-early-approval.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-early-approval.png new file mode 100644 index 00000000000..cb41d09d49a Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-early-approval.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-feature-flags.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-feature-flags.png new file mode 100644 index 00000000000..655e073a3e6 Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-feature-flags.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-inf-layer.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-inf-layer.png new file mode 100644 index 00000000000..2f1a7a7656b Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-inf-layer.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-pipeline.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-pipeline.png new file mode 100644 index 00000000000..f1fb17c208a Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-pipeline.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-rings.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-rings.png new file mode 100644 index 00000000000..fcfdc618b9f Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-rings.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-users-approval.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-users-approval.png new file mode 100644 index 00000000000..9128d5f42fc Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-users-approval.png differ diff --git a/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-value.png b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-value.png new file mode 100644 index 00000000000..821e2be0381 Binary files /dev/null and b/docs/articles/_img/phase-rollout-with-rings/phase-rollout-with-rings-value.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-force-push.png b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-force-push.png new file mode 100644 index 00000000000..e617d483acf Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-force-push.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-local-after-large-file-added.png b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-local-after-large-file-added.png new file mode 100644 index 00000000000..523c6f753b9 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-local-after-large-file-added.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-local-repo-after-large-file-removed.png b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-local-repo-after-large-file-removed.png new file mode 100644 index 00000000000..963a3f20c5e Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-local-repo-after-large-file-removed.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-local-repo-rebase.png b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-local-repo-rebase.png new file mode 100644 index 00000000000..a02aa1f0d30 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-local-repo-rebase.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-server-repo-after-large-file-added.png b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-server-repo-after-large-file-added.png new file mode 100644 index 00000000000..6d8a03672d1 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-server-repo-after-large-file-added.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-server-repo-before-large-file-added.png b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-server-repo-before-large-file-added.png new file mode 100644 index 00000000000..d6fd6358874 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-diagram-server-repo-before-large-file-added.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-drop-in-vi-editor.png b/docs/articles/_img/remove-binaries/RemoveBinaries-drop-in-vi-editor.png new file mode 100644 index 00000000000..017669281af Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-drop-in-vi-editor.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-force-push-command.png b/docs/articles/_img/remove-binaries/RemoveBinaries-force-push-command.png new file mode 100644 index 00000000000..475de8007ec Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-force-push-command.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-force-push-permissions.png b/docs/articles/_img/remove-binaries/RemoveBinaries-force-push-permissions.png new file mode 100644 index 00000000000..d1a55ae0598 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-force-push-permissions.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-force-push.png b/docs/articles/_img/remove-binaries/RemoveBinaries-force-push.png new file mode 100644 index 00000000000..98c7cb562f9 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-force-push.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-large-file-sha.png b/docs/articles/_img/remove-binaries/RemoveBinaries-large-file-sha.png new file mode 100644 index 00000000000..9a761efa5a0 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-large-file-sha.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-large-file-to-be-added.png b/docs/articles/_img/remove-binaries/RemoveBinaries-large-file-to-be-added.png new file mode 100644 index 00000000000..e70969e7e98 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-large-file-to-be-added.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-open-command-prompt.png b/docs/articles/_img/remove-binaries/RemoveBinaries-open-command-prompt.png new file mode 100644 index 00000000000..01cf0f143b5 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-open-command-prompt.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-pick-in-vi-editor.png b/docs/articles/_img/remove-binaries/RemoveBinaries-pick-in-vi-editor.png new file mode 100644 index 00000000000..d988d678dc1 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-pick-in-vi-editor.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-repo-after-rebase.png b/docs/articles/_img/remove-binaries/RemoveBinaries-repo-after-rebase.png new file mode 100644 index 00000000000..dd401100615 Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-repo-after-rebase.png differ diff --git a/docs/articles/_img/remove-binaries/RemoveBinaries-view-history-for-sha.png b/docs/articles/_img/remove-binaries/RemoveBinaries-view-history-for-sha.png new file mode 100644 index 00000000000..f52eef85d2b Binary files /dev/null and b/docs/articles/_img/remove-binaries/RemoveBinaries-view-history-for-sha.png differ diff --git a/docs/articles/_img/team-services-security-whitepaper/Figure1_VSOArchitecture.png b/docs/articles/_img/team-services-security-whitepaper/Figure1_VSOArchitecture.png new file mode 100644 index 00000000000..2a4140203f4 Binary files /dev/null and b/docs/articles/_img/team-services-security-whitepaper/Figure1_VSOArchitecture.png differ diff --git a/docs/articles/_img/team-services-security-whitepaper/Figure2_VSOSiteManagementProcess.png b/docs/articles/_img/team-services-security-whitepaper/Figure2_VSOSiteManagementProcess.png new file mode 100644 index 00000000000..c10e2ed48a7 Binary files /dev/null and b/docs/articles/_img/team-services-security-whitepaper/Figure2_VSOSiteManagementProcess.png differ diff --git a/docs/articles/breadcrumb/toc.yml b/docs/articles/breadcrumb/toc.yml new file mode 100644 index 00000000000..04592da2f96 --- /dev/null +++ b/docs/articles/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Ecosystem + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=ecosystem + items: + - name: Technical Articles + tocHref: /vsts/ + topicHref: /vsts/articles/index \ No newline at end of file diff --git a/docs/articles/build-deployment-best-practices.md b/docs/articles/build-deployment-best-practices.md new file mode 100644 index 00000000000..0e68dc2342f --- /dev/null +++ b/docs/articles/build-deployment-best-practices.md @@ -0,0 +1,216 @@ +--- +title: VSTS - A Build and Deployment Automation Case Study for World Wide Time Keeping +description: Automate builds and releases with Visual Studio Team Services (VSTS), a case study for World Wide Time Keeping +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.assetid: 3cb56371-3ef2-4bd9-871b-ec6cfa93bedf +ms.manager: douge +ms.date: 06/01/2016 +ms.author: mlearned +author: samgu +--- + +# Build and Deployment Automation Case Study for World Wide Time Keeping: Higher Quality and Faster Delivery in an Increasingly Agile World + +> Author: Vaibhav Rajeev Thombre + +October 2015 + +## Introduction + +In an Agile world, delivering quick and frequent releases for large, complex systems with multiple components +becomes cumbersome and time-consuming if done manually, because each component has a high degree of complexity and +requires a lot of resource intervention and configuration to ensure that it works as expected. + +That's why many teams opt for Build and Deployment Automation to ensure faster releases and reduce manual +intervention. However, automating multiple components of a system has its own challenges. Even though releases can be +automated in silos, if we need a one-click deployment for the entire system, we need to have an +automation framework that can automate an entire custom workflow. + +Throughout this paper, we give insight on our project – World Wide Time Keeping — and how we implemented build +and deployment automation using Gated Check-ins, Code Analysis, and Fortify Integrations. We discuss build and +deployment automation by using PowerShell scripts and how we can create custom workflows and deploy all at once +using Release Management. We also talk about how these can help you cut down your engineering cycle time and +play an important role in hitting Production Ready at Code Complete (PRCC) goals. This lets you have a +Continuous Integration Continuous Delivery (CICD) Project and helps you go faster, without introducing issues. + +This content is useful for SWE teams who are working in an Agile model for large, complex systems and want +to cut down their release cycles and deliver faster. We assume that readers have a fundamental knowledge +of Engineering Cycles and their phases (Develop/Test/Build/Deploy) and a fundamental knowledge of Agile practices +and delivery cycles. + +## Build Automation + +Many teams have multiple requirements for build, but the following practices can be applied to most teams. +You may adopt the whole approach or just implement the components that work out best for you. + +**Daily Builds:** Have a build definition for scheduled builds. Aim for a daily schedule with builds +released to the internal SWE environment by the end of each day. + +**One-click builds for non-internal environments:** For Integration/UAT environments, you automate the builds. +Instead of scheduling them on a per day basis, you can trigger them by queuing them in VSTF. (The reason for +not scheduling them is that a build is not required on Integration/UAT environments on a daily basis. Rather, +they tend to happen on an as-needed basis. This will depend on your team's needs and you can adopt the rhythm +that works best for your team.) + +**Gated Check-ins:** Set up gated check-ins to ensure that only code that complies and passed unit testing +gets checked in. It ensures that code quality remains high and that there are no broken builds. Integrate Fortify +and Code Analysis to get further insight into code quality. + +**Code Analysis Integrations:** To get insight into whether the code is of good quality or if any changes need to be made, +integrate Code Analysis into the build definitions and set the threshold to low. The changes +can be identified and fixed early, which is required in the Agile world. + +**Fortify Integrations:** Use Fortify for security-based checks of the build definitions associated with +your check-ins and daily builds. This ensures that any security vulnerabilities are identified +as soon as possible and can be fixed quickly. + +## Deployment Automation + +### Using Deployment Scripts + +**Deployments for internal SWE environment:** Set up the internal SWE environments deployments with the +daily automated builds by integrating the build definitions with the deployment scripts. All the +checked-in changes will then be deployed at the end of each day, without any manual intervention. + +This way, the latest build is present in the SWE environment in case you would like to demo the +product to stakeholders. + +**Deployments for Integration/UAT environments:** For Integration/UAT environments, you can integrate the +scripts with the build definitions without scheduling them and trigger them on an as-needed basis. +Because you have set up one-click builds for them, when the build completes successfully, the scripts get +executed at the end and the product is deployed. Therefore, you do not have to manually deploy the +system. Instead it's deployed automatically by simply queuing a build. + +### The Release Pipeline + +In theory, a release pipeline is a process that dictates how you deliver software to your end users. +In practice, a release pipeline is an implementation of that pattern. The pipeline begins with code +in version control and ends with code deployed to the production environment. In between, a lot can happen. +Code is compiled, environments are configured, many types of tests run, and finally, the code is +considered "done". By done, we mean that the code is in production. Anything you successfully put +through the release pipeline should be something you would give to your customers. Here is a diagram +based on the one you will see on Jez Humble's +[Continuous Delivery](http://continuousdelivery.com/) website. It is an example of what can +occur as code moves through a release pipeline. + +![Pipeline for continuous delivery](./_img/build-deployment-best-practices/continuous-delivery-release-pipeline.png) + +### Using Release Management + +If your team is working on Azure-based components – web apps, services, web jobs, and so on — you can use +Release Management for automating deployments. + +Release Management consists of various pre-created components which you can configure and use either +independently or in conjunction with other components through workflows. + +You might face pain points when you manually deploy an entire system. For a large complex system +with multiple components, like service, web jobs, and dapac scripts, here are example pain points: + +* A large amount of time goes into configuration of each component + +* Deployment needs to be done separately for each, adding to the overall deployment time. + +* Multiple resources have to be engaged to ensure that the deployments happen as expected. + +How Release Management (RM) solves them: + +* RM allows you to create custom workflows which sequence the deployment to ensure that +the components get deployed as soon as their dependencies have been deployed. + +* Configurations can be stored in RM to ensure that configuration per deployment is not required. + +* It automates the entire workflow which ensures manual intervention is not required and resources +can be utilized for functional tasks. + +**Key takeaways** + +* Set up Automated Builds scheduled for the rhythm that works best for your product and Implement +Gated Check-ins. + +* Integrate Code Analysis and Fortify into the build setup to improve the code quality and security +of the application + +* Set up daily automated deployments to the internal SWE environments and set up one click deployments +to environments like UAT and Prod. + +* Use Release Management to set up custom workflows for your releases and triggering them with a single click. + +To use Release Management, you need to set up the following components: + +* **RM Server**: Is the central repository for configuration and release information. + +* **Build Agent**: This is a machine (physical or VM) that you set up at your end on which you will +run all your builds and deployments. + +* **Environments**: This signifies the environment which will be used in conjunction with your machine +that you have set up. + +* **Release Paths**: You need to create Release Paths for the multiple releases that you want to +automate for multiple environments - internal SWE envs, INT, UAT, and so on. + +* **Build Components**: The build component is used configure the build and change any environment +specific configurations. It picks up the build from the remote machine in which VSTF auto-generates +the builds as per the build definition and runs the configuration changes that are defined within it. + +* **Release Templates**: Release template defines the workflow that you have set up as per your specific +needs of deployment. It also defines the sequence in which the RM components are to get executed. You need +to integrate your build definition from Team Foundation Server (TFS) with the release template to enable +continuous delivery. You can either pick up the latest build or select the build. + + ![Release template](./_img/build-deployment-best-practices/release-template.png) + +## Conclusion + +In this paper, we discussed the various engineering practices we can use for enabling faster product +delivery with higher quality. We discussed: + +* **Build Automation**: Builds can be set up for triggering on a schedule or on an ad-hoc basis +just by a single click. It can vary based on the rhythm that works best for your team. Gated +check-ins should be set up on top of the build definitions to accept only the check-ins which meet +the criteria bar. + +* **Code Analysis and Fortify Integration**: The build definitions should be integrated with Code +Analysis and Fortify to trigger on a schedule and also with the Gated Check-ins. Code Analysis +will improve the code quality and Fortify will point out the security-based gaps in the application, +if any. + +* **Deployment Automation**: You can integrate PowerShell scripts with your build definitions to achieve +deployment automation. You can also use Release Management to set up custom workflows and integrate it with +your TFS to pick up the latest builds or even select builds. + +We also discussed the benefits that we found by taking up these practices: + +* Minimal wastage of time due to automations of build, deploy phases + +* Higher code quality due to Gated check-ins (with integrated Test Automation), Code Analysis, +and Fortify Integration + +* Faster delivery + +* Will enable you to hit Production Ready at Code Complete (PRCC) + +* Will enable you to hit Continuous Integration & Continuous Delivery targets (CI/CD) + +## References + +[1] Visual Studio team, +[Automate deployments with Release Management](https://msdn.microsoft.com/en-us/Library/vs/alm/Release/overview), +MSDN Article + +[2] Visual Studio team, +[Build and Deploy Continuously](https://msdn.microsoft.com/en-us/library/ee308011%28v=vs.100%29.aspx), +MSDN Article + +[3] Visual Studio team, +[Building a Release Pipeline with Team Foundation Server 2012](https://msdn.microsoft.com/en-us/library/dn449957.aspx), +MSDN Article + +*(c) 2015 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* \ No newline at end of file diff --git a/docs/articles/effective-feature-isolation-on-tfvc.md b/docs/articles/effective-feature-isolation-on-tfvc.md new file mode 100644 index 00000000000..abc505099b2 --- /dev/null +++ b/docs/articles/effective-feature-isolation-on-tfvc.md @@ -0,0 +1,122 @@ +--- +title: Version Control - Effective feature isolation on TFVC +description: Explore the feature isolation branching strategy and explore when and how to delete branches +ms.assetid: 00303E47-5B7F-4A25-901B-0B6F2007911D +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: willys +ms.date: 03/05/2017 +ms.author: willys +author: willys +--- + +#Effective feature isolation on TFVC + +Are you planning to implement Team Foundation Version Control‘s feature isolation strategy ([TFVC](../tfvc/overview.md)? You probably have a few questions, such as: + +- Is it practical with large development teams? +- Does it align well with your agile process(es)? +- What’s the proper lifetime of isolated feature branches? + +This topic aims to answer those questions, and give you a clear perspective on feature isolation in TFVC. (For guidance on TFVC branch strategies overall, read [Branching Strategies with TFVC](./effective-tfvc-branching-strategies-for-devops.md).) + +> [!NOTE] +> +> This topic covers TFVC. For Git, refer to [adopt a Git branching strategy](../git/concepts/git-branching-guidance.md). + +#What's feature isolation? + +The feature isolation strategy allows you work on your features or fix bugs in **feature** branches (also known as “topic branches”) based off your **main** branch, or **dev**, or other central branches. It isolates your changes from the rest of your team, allows you to experiment with a feature, and enables easy rollback or merging of changes with your parent branch. + +> [!NOTE] +> +> The reference to "feature" is **not** related to the Feature work item type. This strategy can be used with Epic, Feature, Program Backlog Item, User Story, or whatever work item type you've defined in your process. + +It’s typical to create one feature branch per feature or bug, but in this strategy, you can create a miscellaneous feature branch to isolate a couple of low risk features. + +![Basic feature isolation](./_img/effective-feature-isolation-on-tfvc/feature-isolation-basic.png) + +Unlike Git branches, which are repository-scoped, TFVC branches are path-scoped and therefore not as lightweight. To workaround this, limit the number of and the lifetime of your TFVC feature branches, and [optimize your workspace](../tfvc/optimize-your-workspace.md) using explicit, implicit, cloaked, and non-recursive folder mappings, to improve performance, and to reduce required disk space on your machine. + +> [!TIP] +> +> Your workspace should contain only the files you need. Consider creating multiple workspaces to isolate and switch among multiple feature branches. To avoid confusing yourself, use a consistent naming convention for both your workspace and feature branch. + +#Naming convention is important +Use a consistent naming convention for your feature branches. Branches should be self-describing and easily identified by your users. Some suggestions: + +- features/username/description for work performed by an individual. For example, *features/sandra/sdk-java*. +- features/workitem for feature work associated with a specific work item. For example, *features/115673*. +- sprint/username/description for work done by an individual in a specific sprint. For example, *S53/bill/dictionary-refactor*. +- bugfix/username/bugid for work done specific to an engineering bug. For example, *bugfix/takashi/707*. + +#Creating feature branches + +Create a feature branch when you need to work on a feature, typically within the context of a sprint or iteration. + +To protect your parent branch and minimize merge conflicts, regularly forward integrate (FI) changes from the parent branch to your feature branch. It ensures that you resolve merge conflicts on your feature branch, not the parent branch. + +![Feature isolation drift](./_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-drift.png) + +This strategy also keeps features from getting out of sync with the parent branch, especially if your feature work is taking time or is blocked on the integration of another feature. Remember to FI before you reverse integrate (RI) your changes back to the parent branch! + +> [!TIP] +> +> Keep your feature branch **short-lived**! +> +> Unlike main or other central branches, feature branches have a limited life time. They are scoped to features, bugs, and hot fixes, which are typically developed within a sprint or iteration. Consider removing your feature branch once your feature has met your team's definition of done [DoD](https://aka.ms/vsardod) and changes have been merged with the parent branch. + +As the number of your feature branches increase, your storage requirements and branch hierarchy visualization noise increases. With only five feature branches, the diagram is already noisy and rapidly losing its monitoring qualities. Can you imagine the impact of your team creating hundreds of feature branches? + +![Feature isolation noise](./_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-noise.png) + +Similarly, the **Source Control Explorer** view becomes noisy and impractical as the number of branches increases. Unless you have a consistent naming convention, finding a specific feature branch among hundreds of feature branches is challenging. + +![Feature isolation noise](./_img/effective-feature-isolation-on-tfvc/feature-isolation-basic-noise-vside.png) + +> [!TIP] +> +> **Delete** your feature branch when you're done! + +#Impact of deleting a feature branch + +By [deleting](../tfvc/delete-restore-files-folders.md#delete-an-item) feature branches you minimise noise and focus on active feature development. + +![Delete feature branches](./_img/effective-feature-isolation-on-tfvc/feature-isolation-delete-branches.png) + +Remember it's a soft delete and your history is not lost. You can show deleted branches as follows: + +- Select **Tools > Options > Visual Studio Team Foundation Server**. +- From the submenu, select **Show deleted items in the Source Control Explorer** to view the deleted branch(es). + +If needed, you can also [restore](../tfvc/delete-restore-files-folders.md#restore-items-deleted-from-visual-studio) deleted branches and associated items. + +![Show deleted feature branches](./_img/effective-feature-isolation-on-tfvc/feature-isolation-delete-branches-show.png) + +If no one in your team has destroyed a branch using the [destroy](../tfvc/destroy-command-team-foundation-version-control.md) command, you'll have the complete history needed for auditing and migration tools that rely on replaying history. + +> [!NOTE] +> +> Use the [destroy](../tfvc/destroy-command-team-foundation-version-control.md) command with caution. It's a **permanent** delete! + +So, by keeping your branches **short-lived** and adopting a **consistent naming convention**, the feature isolation strategy is effective for small and large teams. + +Now that you're using feature isolation, you should explore continuous integration, feature toggles, and other complementary strategies. + +## Reference information +- [Branching Strategies with TFVC (new guidance)](./effective-tfvc-branching-strategies-for-devops.md) +- [Branching and Merging Guidance (latest copy of classic guidance)](https://vsardata.blob.core.windows.net/projects/TFS%20Version%20Control%20Part%201%20-%20Branching%20Strategies.pdf) +- [Continuous Integration](https://www.visualstudio.com/learn/what-is-continuous-integration/) +- [Feature Toggles](https://msdn.microsoft.com/magazine/dn683796.aspx) +- [Team Foundation Version Control (TFVC)](../tfvc/overview.md) + +> Author: Willy Schaub | Find the origin of this article and connect with the ALM Rangers [here](https://github.com/ALM-Rangers/Guidance/blob/master/README.md) + +*(c) 2017 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* \ No newline at end of file diff --git a/docs/articles/effective-tfvc-branching-strategies-for-devops.md b/docs/articles/effective-tfvc-branching-strategies-for-devops.md new file mode 100644 index 00000000000..a754eeccddc --- /dev/null +++ b/docs/articles/effective-tfvc-branching-strategies-for-devops.md @@ -0,0 +1,132 @@ +--- +title: Version Control - Effective TFVC branching strategies for DevOps +description: Explore TFVC branching strategies for DevOps +ms.assetid: 7910781F-8DA2-4AFB-B73C-B1833A364734 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: willys +ms.date: 03/20/2017 +ms.author: willys +author: sergio romero +--- + +# Effective TFVC branching strategies for DevOps + +Are you planning to embrace [DevOps](http://donovanbrown.com/post/what-is-devops) using the Team Foundation Version Control ([TFVC](/vsts/tfvc/index))? You probably have a few questions, such as: + +- How do I decide on the right branching strategy? +- Is there an effective strategy for DevOps? +- How do I support applications with single or multiple versions? + +[![Channel9](_img/effective-tfvc-branching-strategies-for-devops/channel9.png)](https://channel9.msdn.com/Blogs/DevOps-Interviews/Interview-with-Abel-Wang-and-Steven-St-Jean) *(Based on an interview with Abel Wang and Steve St Jean)* + +## TFVC + +TFVC is a centralized version control system to maintain code and make teams more effective, by providing collaboration and consistent code sharing, publishing, and review features. + +## Keep it simple! + +By adopting an effective branching strategy you'll: +- Foster a *DevOps culture* +- Promote collaboration flow and increased productivity +- Enable teams to spend more time developing and less time managing code + +To embrace DevOps, it's important to keep your branch strategy simple and strive for high-quality. Some suggestions: + +- Start with a simple strategy and evolve as needed +- Use consistent naming conventions for branches + - features/username/description for work performed by an individual - example, *features/sandra/sdk-java* + - bugfix/username/bugid for work done specific to an engineering bug - example, *bugfix/takashi/707* + - releases/version for planned releases - example, *releases/V1.00* +- Frequently reverse integrate (RI) and merge into your main branch +- Encourage consistent code reviews - garbage in, garbage out +- Implement a CI/CD pipeline, using: + - [Gated](/vsts/tfvc/check-folder-controlled-by-gated-check-build-process) checkins + - Automated testing + +## Start with a simple branching strategy + +Create a source control structure that identifies *shippable* release units. The concept of *releasable units* are a foundational piece of this strategy, which Steve St Jean describes as follows: +- The physical unit of versioning and delivery. +- The primary unit to support the branching and release models. +- Can be at the Suite-, Application-, or Component-level. +- For Suites, all applications must version and patch together. For example, Microsoft Word and Excel are part of the Microsoft Office Suite releasable unit but Visio is not as it may release or patch independent of the rest of the Microsoft Office Suite. +- In TFVC this would be the root node under the team project node. +- Can be equated to a repo in Git + +You typically start with having to support only one production version, with parallel defect corrections and development of new features for future releases. Typical examples include web sites, corporate line of business applications, and interim tools. + +Start with the simple **main-only** branching strategy. + +![initial branch diagram](_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-initial.png) + +Automate your build to trigger with every checkin to the main branch, run automated tests, and if successful, deploy the release to a development (dev) environment. + +|Branch|Build|Environments|Notes| +|------|-----|---------|-----| +|Main|CI_Bld|Dev|Triggered with every checkin to main| + +When you complete a release cycle, create a **release** branch. Use the release branch to stabilize the release, and continue development for your next version in main. Reverse integrate (RI) and merge validated bug fixes with your main branch frequently, to minimize your overall technical debt. + +![Version 1.0 is released](_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-vnext.png) + +Automate your build to trigger with every checkin to the release branch, run automated tests, and use release management to deploy to a development, quality assurance, user acceptance, staging, and finally your production environment. + +|Branch|Build|Pipelines|Notes| +|------|-----|---------|-----| +|Main|CI_Bld|Dev|Triggered with every checkin to main| +|V1.00|RC_Bld|Dev -> QA -> UAT -> Staging -> Prod|Triggered with every checkin to release| + +When version 2 becomes the Release Candidate you can update your existing RC build definition to point to the V2.00 branch and it will now build and release just as V1.00 did when it was the current version. + +|Branch|Build|Pipelines|Notes| +|------|-----|---------|-----| +|Main|CI_Bld|Dev|Triggered with every checkin to main| +|V2.00|RC_Bld|Dev -> QA -> UAT -> Staging -> Prod|Triggered with every checkin to release| +|V1.00|Hotfix_Bld|Hotfix -> Staging -> Prod|Triggered with every checkin to hotfix| + +## Expand branching strategy as needed + +When the need arises to support more than one production version, for example a commercial solution such as Word, you can expand your simple branching strategy. + +For every completed release cycle you need to support, create a new release branch and continue next version development in main, using [feature isolation](./effective-feature-isolation-on-tfvc.md). Take note of the reverse integration (RI) merges from v1.0 and v2.0 to **main**, which represent bug fixes that are released to production. + +![Version 2.0 is released](_img/effective-tfvc-branching-strategies-for-devops/effective-tfvc-branching-strategies-for-devops-complex.png) + +So, by using a **simple** branching strategy and adopting a **consistent naming convention**, you'll be able to support applications that have one or more supported releases, continuous development of new features, and continuous delivery of value to your users. + +## Checklist and lessons from the field + +**Checklist** + +- Keep it simple and expand branching complexity as needed +- Organize your code into shippable units +- Use a consistent naming strategy for your branches +- Build with every check in +- Create a CI/CD pipeline using gated checkins and automated testing + +**Lessons from the field - things to avoid** + +- Avoid going branch crazy! + - **merging** changes comes with complexity and a cost + - there's no need to have a separate branch per environment +- Avoid using **cherry-picking** to get your code to production +- Do not attempt to solve **people** or **process** problems with tools + +#Reference information +- [Continuous Integration](https://www.visualstudio.com/learn/what-is-continuous-integration/) +- [Interview with Abel Wang and Steve St Jean](https://channel9.msdn.com/Blogs/DevOps-Interviews/Interview-with-Abel-Wang-and-Steven-St-Jean) +- [Team Foundation Version Control (TFVC)](../tfvc/overview.md) +- [What is DevOps - Definition](http://donovanbrown.com/post/what-is-devops) +- [What is DevOps - Sticker](https://www.stickermule.com/marketplace/9107-devops-donovan-brown) + +> Authors: Sergio A Romero | Find the origin of this article and connect with the ALM Rangers [here](https://github.com/ALM-Rangers/Guidance/blob/master/README.md) + +*(c) 2017 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* diff --git a/docs/articles/git-dates.md b/docs/articles/git-dates.md new file mode 100644 index 00000000000..8c9b9084af3 --- /dev/null +++ b/docs/articles/git-dates.md @@ -0,0 +1,105 @@ +--- +title: Version Control - How Dates Work in Git +description: Reviewing the Git Date Fundamentals +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.assetid: c41816e7-6ecc-44ad-b047-b9f983b205db +ms.manager: douge +ms.date: 06/01/2016 +ms.author: mlearned +author: samgu +--- + +# How Dates Work in Git +## Reviewing the Git Date Fundamentals + +![Git Version Control](./_img/git-dates/git.png) + +> Authors: Ross Brodbeck + +In this article I'm going to take a look at dates in Git. The subject doesn't make for good dinner conversation, but when you're blearily staring at a list of Git commits at 2 am, it certainly helps to know what they mean. +Since there are three types of dates floating around with various formats and options, having a primer before you need the information can be useful. + +## Author Date vs. Commit Date vs. Push Date + +When looking at any particular Git commit, it helps to keep in mind there are actually three different types of date. +Here's a look at the VSTS commit details section, so you can see what I mean: + +![Commit Details Page](./_img/git-dates/commit-details.png) + +* **Author Date** - This is the time you originally authored a commit. Basically, when you first ran `git commit`. +* **Commit Date** - This is the date your commit was *applied* to the branch. In many cases it is the same as the author date, but sometimes it will be different if you amended, rebased or someone else applied your commit as part of a patch. In those cases, the date will be when you rebased or the patch was applied. +* **Push Date** - This is the date you actually pushed your commit to the remote repository in question. This date is specific to the remote version control system you are using, and won't be available in your local repository. + +When you run `git log`, by default you will see the *author date*. +If you want to see commit date, you can use one of the many command line options, such as `--pretty=fuller`. + +Let's look at a brief example to see these concepts in practice. First we will create a normal commit: + + git init + echo test > file.txt + git add * + git commit -m "A normal commit message" + +Now let's ammend our commit with a different message: + + echo again > file.txt + git add * + git commit --amend -m "An ammended commit" + +If we look at our regular log history we would see something like the following: + + git log + + commit 17232459f0ae25adeff21c9e21742ba22b7f3499 + Author: Ross Brodbeck + Date: Thu Feb 25 19:38:54 2016 -0500 + + An amended commit + +Now let's view the same commit with the author date: + + git log --pretty=fuller + + commit 17232459f0ae25adeff21c9e21742ba22b7f3499 + Author: Ross Brodbeck + AuthorDate: Thu Feb 25 19:38:54 2016 -0500 + Commit: Ross Brodbeck + CommitDate: Thu Feb 25 19:39:36 2016 -0500 + + An amended commit + +Note the (slight) difference between the author date and commit date above. +The commit date is my original, unedited, commit time. The author date is the time at which I ran the `--amend` command. + +In fact, there are a lot of fun `git log` command line options to help you understand dates better. +For example, passing the `--date` flag will allow you to determine how dates are displayed. +This can be useful for normalizing time zones (git displays dates in their original time zone, by default) or changing the date display string. + +To learn more about the various formatting options, see the [git log man page](https://git-scm.com/docs/git-log). + +## Changing Git Dates + +When you are getting ready to commit your code, you should note that you have the ability to set both the author and commit dates, although beware -- this isn't something you should do often. + +You can change the author date of a given commit by passing the `--date` flag when you run `git commit`. +There are various articles regarding the formatting of this flag, but the gist is that it isn't well documented. [This stack overflow question](http://stackoverflow.com/questions/19742345/what-is-the-format-for-date-parameter-of-git-commit) does a great job of explaining the acceptable date formats. + +You can also use the environment variables `GIT_COMMITTER_DATE` and `GIT_AUTHOR_DATE` to set the corresponding dates, as documented in the [man page](https://git-scm.com/docs/git-commit). +If you need to go this route I would also [suggest a Stack Overflow question](http://stackoverflow.com/questions/454734/how-can-one-change-the-timestamp-of-an-old-commit-in-git) as a good place to start. + +## Git Date Fundamentals + +That wraps up our tour of date fundamentals in Git. Hopefully you now know: + +* What the different types of dates mean in Git +* How you can change them and display them using the command line + +*(c) 2016 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* \ No newline at end of file diff --git a/docs/articles/git-log-history-simplification.md b/docs/articles/git-log-history-simplification.md new file mode 100644 index 00000000000..ca30018f2b0 --- /dev/null +++ b/docs/articles/git-log-history-simplification.md @@ -0,0 +1,192 @@ +--- +title: Version Control - How to Simply Git Log History +description: How git log history simplification works, and why it can lead to confusion. +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.assetid: 663ea04b-ee1e-41f9-8c5b-dfc269b093c2 +ms.manager: douge +ms.date: 06/01/2016 +ms.author: mlearned +author: samgu +--- + +# Git lost my changes: Taking a look at Git's history simplification +## How Git Log History Simplification Works + +![Git Version Control](./_img/git-log-history-simplification/git.png) + +> Authors: Ross Brodbeck + +Git history simplification can be a confusing beast. 99% of the time you won't even know it exists, but every once in a while it will jump out of the dark corners of Git and bite you. In this article we'll explore what history simplification is and how it can cause confusion when looking at file history. + +Let's start with a common scenario: + + 1. You push a change to a file and then merge the change into master. + 2. Some of your colleagues also merge their branches to master. + 3. You come back some time later and notice your changes are missing. + 4. Looking for the culprit, you go look at the file history and notice... your changes aren't even listed!? + +What is happening here is that Git commit history is a tree, and sometimes the chronological history is not the same as the actual file tree history. This is particularly true in cases where a merge commit reverts a file back to its original state. In that case, the default history view *won't actually show you all changes*, because technically the file didn't change. + +In the above scenario, Git realizes it can simplify the history and the "changes" you are most likely looking for are removed from the log. + +Unless you have run into it before, the result is often a lot of hair pulling and wondering *Where the heck did my changes go?* + +## History Simplification: On by Default + +By default, running the log command on a file: `git log file.txt` will automatically simplify history, possibly hiding some commits from its output. You can read more details over at the [git log man page](http://git-scm.com/docs/git-log#_history_simplification). + +What makes this a tad more confusing is that history simplification does *not* occur if you just run `git log` (because you are looking at all changes there is nothing to simplify). + +In order to turn off history simplification, we need to use the command line switch `--full-history`. + +### An Example of History Simplification + +This is all nice and theoretical, but let's create our own example of history simplification so we can see how it works. First, let's look at a diagram of the history we are going to create: + +![Git Branches](./_img/git-log-history-simplification/history-simplification-branches.png) + +As you can see, we are going to: + +1. Create a file. +2. Add a line to that file in a branch (animals). +3. Add a different line to that file in another branch (fruit). +4. Merge branch *animals* back into master. +5. Merge branch *fruit* back into master, and choose the entire copy of the file from the fruit branch. +6. Check the history of the file. + +As you will see, Git is going to simplify the history for us. The key here is step 5 -- we ignored all changes from the *animal* branch. Git will notice that our file essentially *did not change* between step 1 and step 5, and so it will only show us *two history entries*. + +First we create the file and add it to our repo: +
+    > cd sample
+    > git init
+    > echo "some content" > test.txt
+    > git add test.txt
+    > git commit -m "Initial commit"
+
+ +Now we decide to append the text "donkeys" to the file in an animal branch: +
+    > git checkout -b animals
+    > echo "donkeys" >> test.txt
+    > git commit -am "We have added an animal"
+
+ +While we are experimenting, we decide maybe we want to go with fruit in our file instead, so we create a different branch and append the text "bananas" at the end of the file instead: +
+    > git checkout master -b fruit
+    > echo "bananas" >> test.txt
+    > git commit -am "We have added a fruit"
+
+ +Feeling satisfied with our changes, we decide to merge our animal branch back into master: +
+    > git checkout master
+    > git merge animals
+
+ +Now let's look at the log for our `test.txt` file: +
+    > git log test.txt
+    
+    commit 6b33d99b996c430a60c9552b79245d1aa8320339
+    Author: hross <robrodbe@microsoft.com>
+    Date:   Mon Feb 15 10:45:33 2016 -0500
+
+        We have added an animal
+
+    commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
+    Author: hross <robrodbe@microsoft.com>
+    Date:   Mon Feb 15 10:44:18 2016 -0500
+
+        Initial commit
+
+ +So far so good, right? Nothing looks out of the ordinary in our log output. Now let's say we changed our minds and decided to merge our fruit branch: +
+    > git merge fruit
+    
+    Auto-merging test.txt
+    CONFLICT (content): Merge conflict in test.txt
+    Automatic merge failed; fix conflicts and then commit the result.
+
+ + Uh-oh, a merge conflict. After some consideration, we decide to _use the entire `test.txt` file_ from our fruit branch. Typically you would use some kind of text editor or merge tool, but we'll just recreate the entire file, since it's only two lines: +
+    > echo "some content" > test.txt
+    > echo "bananas" >> test.txt
+    > git commit -am "Fixed merge conflict"
+
+ +Now let's take a look at the history for our `test.txt` file: +
+    > git log test.txt
+    
+    commit fdd4dfd816c4efebc5bdb240f49e934e299db581
+    Author: hross <robrodbe@microsoft.com>
+    Date:   Mon Feb 15 10:51:06 2016 -0500
+
+        We have added a fruit
+
+    commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
+    Author: hross <robrodbe@microsoft.com>
+    Date:   Mon Feb 15 10:44:18 2016 -0500
+
+        Initial commit
+
+ +Sure enough, we don't see any changes from our first experiment in the log, nor do we see our merge! Are they still there? Did Git eliminate the changes entirely? +
+    > git log --full-history test.txt
+
+ +As you can see, although it simplified the log without the `full-history` flag, Git has kept all of our changes: +
+    commit 5d0bb77a24e265dc154654fb3b5be331b53bf977
+    Merge: 6b33d99 fdd4dfd
+    Author: hross <robrodbe@microsoft.com>
+    Date:   Mon Feb 15 10:59:34 2016 -0500
+
+        Fixed merge conflict
+
+    commit fdd4dfd816c4efebc5bdb240f49e934e299db581
+    Author: hross <robrodbe@microsoft.com>
+    Date:   Mon Feb 15 10:51:06 2016 -0500
+
+        We have added a fruit
+
+    commit 6b33d99b996c430a60c9552b79245d1aa8320339
+    Author: hross <robrodbe@microsoft.com>
+    Date:   Mon Feb 15 10:45:33 2016 -0500
+
+        We have added an animal
+
+    commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
+    Author: hross <robrodbe@microsoft.com>
+    Date:   Mon Feb 15 10:44:18 2016 -0500
+
+        Initial commit
+
+ +## Git History Simplification in a Nutshell + +The thing about history simplification is that most of the time you will never notice it. But when a merge conflict goes wrong and you want to know what happened -- you may find yourself looking at the git log history and wondering where your changes went. + +Now, instead of panicking, you know that: +* History simplification for files is turned on by default +* The `--full-history` flag will give you a more comprehensive file history + +**Update**: Since I wrote this article, [VSTS has introduced a number of awesome history viewing options on the web](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/10/announcing-git-graph-and-advanced-filters-to-visualize-commit-history/). +What this means is that if you don't want to go slogging through the command line, you can simply pull up the file you wish to view history for in our explorer and you will be presented with the below history filter where you can specify simple or non-simple history views: + +![Git Filters](./_img/git-log-history-simplification/Filters.png) + +*(c) 2016 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* \ No newline at end of file diff --git a/docs/articles/index.md b/docs/articles/index.md new file mode 100644 index 00000000000..8892c0dd060 --- /dev/null +++ b/docs/articles/index.md @@ -0,0 +1,49 @@ +--- +title: VSTS Public Articles +description: A public collection of VSTS-specific topics shared for partners. +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.date: 06/01/2016 +ms.author: samgu +author: mlearned +--- + +# Articles about DevOps and VSTS + +Here you'll find more resources to support your development efforts with Visual Studio Team Services, Team Foundation Server, and Visual Studio. These topics include materials for public preview, use cases, and whitepapers. + +> [!NOTE] +> For the full VSTS documentation, go to [VSTS Documentation](/vsts). + +## Migration and integration + +* [High fidelity migration from TFS to VSTS](migration-overview.md) + +## Security + +* [VSTS Data Protection](team-services-security-whitepaper.md) + +## Version Control + +* [Effective feature isolation on TFVC](effective-feature-isolation-on-tfvc.md) +* [Effective TFVC branching strategies for DevOps](effective-tfvc-branching-strategies-for-devops.md) +* [Git lost my changes?](git-log-history-simplification.md) +* [How dates work in Git](git-dates.md) +* [Move Git repos between team projects](move-git-repos-between-team-projects.md) +* [Remove large binaries from Git](remove-binaries.md) + +## DevOps: Continuous integration and continuous delivery + +* [Build and Deployment Automation Case Study](build-deployment-best-practices.md) +* [Phase the roll-out of your application through rings](phase-rollout-with-rings.md) + +## DevOps at Microsoft + +* [Articles](https://www.visualstudio.com/learn/what-is-devops/) about how we use DevOps at Microsoft, best practices research, lessons learned, etc. + +## Journey content + +* [Agile](https://www.visualstudio.com/learn/what-is-agile/) +* [DevOps](https://www.visualstudio.com/learn/what-is-devops/) +* [Git at Scale](https://www.visualstudio.com/learn/git-at-scale/) diff --git a/docs/articles/migration-advanced-topics.md b/docs/articles/migration-advanced-topics.md new file mode 100644 index 00000000000..e558726bc34 --- /dev/null +++ b/docs/articles/migration-advanced-topics.md @@ -0,0 +1,55 @@ +--- +title: Migration from TFS to Visual Studio Team Services (VSTS), advanced topics | VSTS & TFS +description: Advanced Team Foundation Server to Team Services topics. +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.contentid: f069d4ab-c824-4eb4-94ea-8e24942d5dcd +--- + +> [!NOTE] +> The TFS Database Import Service for Visual Studio Team Services (VSTS) is currently in preview. + +# Advanced Topics + +## Overriding Licensing Map Values +To learn more about [licensing in Visual Studio Team Services (VSTS)](https://www.visualstudio.com/en-us/products/visual-studio-team-services-pricing-vs.aspx), visit our website. Generated identity mapping files provide a best guess as to what level of access each user will require. Upon inspecting the file you will notice one the following entries for each row’s license field: + +* **Stakeholder** - This license is free for people that just need to use work items. Team Service accounts can have as many stakeholder users as they wish. +* **Basic** - Standard license that gives the individual access to code and allows them to contribute to projects. +* **MSDN** - Also known as a Visual Studio subscriber. Users that have linked their subscription to their AAD identity can input "MSDN" to use their included benefits as a license in VSTS after the migration. + +Ensure that you have reviewed the license assignment for each user. Any changes from the generated output should be placed in the "License Assignment Override" column and the identity mapping file [re-validated](#validating-sync-between-on-premises-ad-and-azure-ad). Instructions on how to re-validate the input are included in the section below. An identity's license can also be changed after import if more or less access is required. + +> **IMPORTANT** +> You must re-validate the identity mapping file for the changes placed in the override column to be respected. If this step is missed then your new license assignments will not be respected at import time. + + +## Validating issues addressed in the sync between on-premises AD and Azure AD +Once the issues in the identity map are addressed by checking and fixing the sync process between on-premises AD and Azure AD, TfsMigrator's validate command can be used to validate changes to import files. The command can also be used to verify and apply values placed in the license override column. It's always recommended that you validate your changes to ensure that no typos or mistakes make it into the migration. + +> The UserPrincipalName[Target] column **CANNOT** be manually updated. Users marked as "NO MATCH" will need to be investigated with your AAD admin to see why they aren't part of your directory sync. + +The command will ask you to sign into AAD so that the identity changes can be validated. After the validate has completed running you will be able to open the identity mapping file and review the results. Assuming if an sync issue for a given identity is addressed, you will see the mapping between the on-premises AD user and AAD correctly reflect that. The status column will also be updated to reflect that the row is now "OK". Any rows that are still marked as "NO MATCH" will need to be reviewed further. It could be that there was a typo in the entry or that the identity doesn't exist. Repeat this process as many times as needed to get the desired set of identities to be imported as active. + +Instructions and an example of how to run validation on the identity mapping file are included in TfsMigrator's help text: + +```cmdline +TfsMigrator validate /help +``` + +The command structure to run a validate against both the collection and identity mapping file will look like the following: + +```cmdline +TfsMigrator validate /collection:{Collection Url} /identityMap:{Location on Disc} /tenantDomainName:{name} +``` + +Note that /tenantDomainName is required since validating the changes made to the identity mapping file require a connection to AAD. + +Following the Fabrikam example, the command would look like: + +```cmdline +TfsMigrator validate /collection:http://localhost:8080/tfs/DefaultCollection /identityMap:C:\DataImport\IdentityMap.csv /tenantDomainName:Fabrikam.OnMicrosoft.com +``` + + + diff --git a/docs/articles/migration-import.md b/docs/articles/migration-import.md new file mode 100644 index 00000000000..ce4ea9ad6b8 --- /dev/null +++ b/docs/articles/migration-import.md @@ -0,0 +1,545 @@ +--- +title: Migration import from TFS to Visual Studio Team Services (VSTS) | VSTS & TFS +description: Walks through the steps from prepping a collection to getting it uploaded for import +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.contentid: 829179bc-1f98-49e5-af9f-c224269f7910 +--- + +> [!NOTE] +> The TFS Database Import Service for Visual Studio Team Services (VSTS) is currently in preview. + +# Import + +This page walks through how to perform all of the necessary preparation work required to get an import to Visual Studio Team Services (VSTS) ready to run. If you encounter errors during the process be sure to review the [troubleshooting](.\migration-troubleshooting.md) and [advanced topics](.\migration-advanced-topics.md) documentation. + +## Validating a Collection +Now that you’ve confirmed you’re on the latest version of TFS the next step is to validate each collection you wish to migrate to VSTS. +Validate will examine a variety of aspects in your collection, including, but not limited to: size, collation, identity, and processes. +Running a validation is done through TfsMigrator. To start, take a copy of [TfsMigrator](https://aka.ms/TFSDataImport) and copy it onto one of your +TFS server’s Application Tiers (AT). Once there you can unzip it. The tool can also be run from the TFS AT as long as this PC can +connect to the TFS instance's configuration database – example below. + +To get started, open a command prompt on the server and CD to the path where you have TfsMigrator placed. Once there it’s recommended that you take a second to review the help text provided with the tool. Run the following command to see the top level help and guidance: + +```cmdline +TfsMigrator /help +``` + +For this step, we’ll be focusing on the validate command. To see the help text for that command simply run: + +```cmdline +TfsMigrator validate /help +``` + +Since this is our first time validating a collection we’ll keep it simple. Your command should have the following structure: + +```cmdline +TfsMigrator validate /collection:{collection URL} +``` + +For example, if one was to run this command against their default collection the command would look like: + +```cmdline +TfsMigrator validate /collection:http://localhost:8080/tfs/DefaultCollection +``` + +Running it from a machine other than the TFS server requires the /connectionString parameter. The connection string parameter is a pointer to your TFS server's configuration database. As an example, if the prepare command was being run by the Fabrikam corporation the command would look like: + +```cmdline +TfsMigrator validate /collection:http://fabrikam:8080/tfs/DefaultCollection /tenantDomainName:fabrikam.OnMicrosoft.com /connectionString:"Data Source=fabrikamtfs;Initial Catalog=Tfs_Configuration;Integrated Security=True" +``` + +Executing the validate command will have TfsMigrator go through the entire collection and check for potential migration issues. +It’s important to note that TfsMigrator **DOES NOT** edit any data or structures in the collection. It also **DOES NOT** +try to send any data back to Microsoft. It only reads the collection to identify issues. + +Once the validation is complete you’ll be left with a set of log files and a set of results printed to the command prompt screen. + +![TfsMigrator validate output](_img/migration-import/tfsmigratorConsole.png) + +If all validations passed, then the collection is ready to import and you can safely move on to generating the required import files. +Validating import file output can be safely ignored for now – it’s covered later on. If TfsMigrator flagged any errors, +they will need to be corrected before moving on. See [troubleshooting](.\migration-troubleshooting.md) for guidance on correcting validation errors. + +When you open up the log directory you will notice that there are several logging files. + +![Logging files generated by TfsMigrator](_img/migration-import/loggingFiles.png) + +The log titled ```TfsMigrator.log``` is going to be the main log which contains details on everything that was run. To make it easier to narrow down on specific areas, +a log is generated for each major validation operation. For example, if TfsMigrator had reported an error in the “Validating Project Processes” step, then one can +simply open the ```ProjectProcessMap.log``` file to see everything that was run for that step instead of having to scroll through the overall log. +The ```TryMatchOOProcessMatch.log``` should be ignored if you have applied any customizations to your projects' processes. It's meant to confirm if your +collection is eligible to start using the inherited process management model after migration. + +If you do hit a failure we would like to ask that you zip up your logs from the run and send them to +[vstsdataimport@microsoft.com](mailto:vstsdataimport@microsoft.com). This helps us identify areas of future investment for our migration pipeline. + +## Generating Import Files +By this point you will have run TfsMigrator *validate* against the collection that you plan to migrate and It should be returning "All collection validation passed". This is a great message! It means that your collection is ready to import to VSTS. But, before you start taking the collection offline and notifying your co-workers about the upcoming migration, there is one more bit of preparation that needs to be completed – generating the import files. These two files specify your identity map between Active Directory (AD) and Azure Active Directory (AAD), and the import specification that will be used to kick off your migration. + +### Prepare Command +The prepare command assists with generating the required import files. Essentially, this command scans the collection to find a list of all users to populate the identity map and then tries to connect to AAD to find each identity’s match. If your company has employed the Azure Active Directory Connect tool (formerly known as the Directory Synchronization tool, Directory Sync tool, or the DirSync.exe tool), then TfsMigrator should be able to auto-populate the mapping file. The Import specification file is simply a near empty file which you'll need to fill out prior to import. + +Unlike the validate command, prepare **DOES** require an internet connection as it needs to reach out to AAD in order to populate the identity mapping file. If your TFS server doesn't have internet access, you'll need to run the tool from a different PC that does. As long as you can find a PC that has an intranet connection to your TFS server and an internet connection then you can run this command. Run the following command to see the guidance for the prepare command: + +```cmdline +TfsMigrator prepare /help +``` + +Included in the help documentation are instructions and examples for running TfsMigrator from the TFS server itself and a remote PC. If you're running the command from one of the TFS server's Application Tiers (ATs) then your command should have the following structure: + +```cmdline +TfsMigrator prepare /collection:{collection URL} /tenantDomainName:{name} +``` + +If you're not running it from the TFS server, then the command will have the following structure: + +```cmdline +TfsMigrator prepare /collection:{collection URL} /tenantDomainName:{name} /connectionString:"Data Source={sqlserver};Initial Catalog=Tfs_Configuration;Integrated Security=True" +``` + +The connection string parameter is a pointer to your TFS server's configuration database. As an example, if the prepare command was being run by the Fabrikam corporation the command would look like: + +```cmdline +TfsMigrator prepare /collection:http://fabrikam:8080/tfs/DefaultCollection /tenantDomainName:fabrikam.OnMicrosoft.com /connectionString:"Data Source=fabrikamtfs;Initial Catalog=Tfs_Configuration;Integrated Security=True" +``` + +Upon executing this command, TfsMigrator will run a complete validate to ensure that nothing has changed with your collection since the last full validate. +If any new issues are detected, then the import files will not be generated. Shortly after the command has started running an AAD login window will appear. +You will need to sign in with an identity that belongs to the tenant domain specified in the command. It's important to make sure that the AAD tenant specified +is the one you want your future VSTS account to be backed with. For our Fabrikam example the user would enter something similar to what's shown in the below image. + +![AAD login prompt](_img/migration-import/aadLogin.png) + +A successful run of TfsMigrator prepare will result in a set of logs and import files. + +![Import files generated by TfsMigrator](_img/migration-import/importFiles.png) + +After opening the log directory noted in TfsMigrator's output you will notice that there are two files and a Logs folder. ```IdentityMap.csv``` +contains the generated mapping of AD to AAD identities. ```import.json``` is the import specification file which needs to be filled out. +It's recommended that you take time to fill out the import specification file and review the identity mapping file for completeness. + +### Import Specification File + +The import specification is a JSON file that serves as the master import file and provides information such as the desired account name, subscription, account region, storage account information, and location of the identity mapping file. Most of fields are auto-populated, some fields require user input prior to attempting an import. + +![Newly generated import specification file](_img/migration-import/importSpecNotFilledOut.png) + +Here is the breakdown of the fields and what action needs to be taken: + +| Field | Explanation | Action | +|--------------------------------------------------|------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| +| Source | Information detailing location and names of source data files used for import. | None - Review information for subfield actions below. | +| Target | Information detailing desired region and name for the new VSTS account. | None - Review information for subfield actions below. | +| ValidationData | Contains data related to database size, collation, and usage. | None – It contains data that is captured during import. | +| Files | Name of the files containing import data. | None - Review information for subfield actions below. | +| Target | Properties describing the new VSTS account to import into. | None - Review information for subfield actions below. | +| AccountName | Desired name for the account that will be created during the import. | Select a name. This name can be quickly changed later after the import has completed. Note – do **NOT** create the account before running the import. The account will be created as part of the import process. | +| Region | Region that your account will be hosted in. | Review the list of regions in the generated files text. Replace the entry for this value with the short name of the region you desire the account to reside in. | +| Location | SAS key to the Azure storage account hosting the DACPAC and identity mapping file. | None – This will be covered in a later step. | +| Dacpac | A file that packages up your collection database that is used to bring the data in during import. | None - In a later step you'll generate this file using your collection and will upload it to an Azure storage account. It will need to be updated based on the name you use when generating the DACPAC later in this process. | +| IdentityMapping | Name of the identity mapping file to use. | None - In a later step you'll upload this file along with the DACPAC to an Azure storage account. If you change the name of the file be sure to update it here as well. | +| ImportCode | Code given out during the preview to allow an import to be queued. | None - In a later step you'll add this to the import specification. + +> It's important to note that if you have selected to import your collection into a region outside of the United States or Europe, then your data will be held in a secured location in the United States for up to 7 days as a staging point for the data import process. After that period has ended your staged data will be deleted. + +After following the above instructions, you should have a file that looks somewhat like the below. + +![Half filled out import specification file](_img/migration-import/importSpecHalfFilledOut.png) + +In this case, the user planning the Fabrikam import added the account name "Fabrikam-Import" and selected the Central US region in the Target object. Other values were left as is to be modified just before taking the collection offline for the migration. + +#### Supported Azure Regions for Import +VSTS is available in a multitude of Azure [regions](https://azure.microsoft.com/en-us/regions/services/). However, not all Azure regions that VSTS is present in are supported for import. The below table details the Azure regions that can be selected for import. Also included is the value which needs to be placed in the import specification file to target that region for import. + +| Geographic Region | Azure Region | Import Specification Value | +|---------------------------------|--------------------------------|-----------------------------| +| United States | Central United States | CUS | +| Europe | Western Europe | WEU | +| Australia | Australia East | EAU | +| South America | Brazil South | SBR | +| Asia Pacific | South India | MA | + +### Identity Map +Arguably the identity map is of equal importance to the actual data that you will be migrating to VSTS. Before opening the file it's important to understand how identity import operates and what the potential results could entail. When importing an identity, they could either end up becoming active or historical. The difference between active and historical identities is that active identities can log into VSTS whereas historical identities cannot. It's important to note that once imported as a historical identity, there is no way to move that identity to become active. + +> When reviewing and editing the identity mapping file in Excel, ensure that the file is saved as a comma delimited CSV. Mapping files that are saved using a non-comma delimiter can't be used for import. + +#### Active Identities +Active identities refer to identities that will be users in VSTS post-import. On VSTS, these identities will be licensed and show up as a user in the account after migration. These identities will have a completed mapping between on-prem AD and hosted AAD in the identity mapping file. + + +#### Historical Identities +These are identities that do **NOT** have completed mappings specified in the identity mapping file. This can either mean that there is no line entry present in the file for that identity or it could also be the case that there is a line in the file for that identity, but it isn't completely filled out. For example, no AAD user principal name was provided for a user. +Historical Identities do **NOT** have access to a VSTS account after migration, do **NOT** have a licenses, and do **NOT** show up as a user in the account. All that is persisted is the notion of that identity's name in the account. This way their history can be searched at a later date. It's recommended that historical identities be used for users that are no longer at the company or won't ever be needing access to the VSTS account. Identities imported historically **CANNOT** be migrated later to become active identities. + +### Understanding an Identity Map +It's recommended that the identity mapping file be opened up in Excel. This will make it easier to both read and make edits. After opening the file, you will be presented with something similar to the below example. + + +![Identity mapping file generated by TfsMigrator](_img/migration-import/identityMapNewlyGenerated.png) + +The table below explains what each column is used for. + +| Column | Explanation | +|-------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| User | Friendly display name used by the identity in TFS. Makes it easier to identify which user the line in the map is referencing. | +| AD:SecurityIdentifier[Source] | The unique identifier for the on-prem AD identity in TFS. This column is used to identify users in the collection. | +| AAD:UserPrincipalName[Target] | The identifier for the matching AAD identity. Entries in this column will show the identity that users will log into after the migration. Everything belonging to the TFS identity will be remastered to this AAD identity if the map is valid. | +| License | Desired license the user should have after import. | +| License Assignment Override | Used for overriding the value currently in the licensing column. See [overriding licensing](migration-advanced-topics.md) values for more details on using this column. | +| Status | Indication of whether or not the identity mapped on this line is valid or not. | +| Validation Date | Last time the identity map was validated. | + +Reading through the file you will notice the status column has either "OK" or "NO MATCH". OK indicates that it's expected that the identity on this row will map correctly on import and will become active. No matches will become historical identities on import. It's important that you review the generated mapping file for completeness and correctness. + +Start by reviewing the correctly matched identities. Are all of the expected identities present? Are the users mapped to the correct AAD identity? If any values are incorrectly mapped or need to be changed then you'll need to contact your Azure AD administrator to check whether the on-premises AD identity is part of the sync to Azure AD and have setup correctly. Check the [documentation](http://aks.ms/azureADconnect "Integrating your on-premises identities with Azure Active Directory") on setting a sync between your on-premises AD and Azure AD. + +Next, review the identities that are labeled as 'NO MATCH'. This implies that a matching AAD identity couldn't be found. This could be for one of four reasons. + +1. The identity hasn't been setup for sync between on-premises AD and Azure AD. +2. The identity hasn't been populated in your AAD yet; new employee scenario. +3. The identity simply doesn't exist in your AAD. +4. The user that owned that identity no longer works at the company. + +In the first two cases the desired on-premises AD identity will need to be setup for sync with Azure AD. Check the [documentation](http://aks.ms/azureADconnect "Integrating your on-premises identities with Azure Active Directory") on setting a sync between your on-premises AD and Azure AD. It's required that Azure AD Connect be setup and run for identities to be imported as active in VSTS. + +For the second and third case, the row can be left or removed from the file. The end result will be the same case - a historical identity. It's recommended that you reduce the mapping file down to just the set of identities that you wish be active after import, for simplicity and readability. + +> The UserPrincipalName[Target] column **CANNOT** be manually updated. Users marked as "NO MATCH" will need to be investigated with your AAD admin to see why they aren't part of your directory sync. + +License assignments populated by TfsMigrator's Prepare command can be overriden. Please see [overriding licensing](migration-advanced-topics.md) values for more details on how to change the assignments. + +#### No Matched Identities + +> The identity import strategy proposed in this section should only be considered by small teams. + +In cases where the Azure AD Connect hasn't been configured and run previously, you will notice that all users in the identity mapping file will be marked as 'NO MATCH'. Running an import with a complete set of no match identities will result in all users getting imported [historically](#historical-identities). It's strongly recommended that you configure [Azure AD Connect](https://aka.ms/azureadconnect) to ensure that your users are imported as active. + +> Running an import with all no matches has consequences which need to be considered carefully. It should only be considered by teams with a small number of users were the cost of setting up an Azure AD Connect is deemed too high. + +To import with all no matches, simply follow the steps outlined in later sections. When queuing an import, the identity that is used to queue the import will be bootstrapped into the account as the account owner. All other users will be imported historically. The account owner will then be able to [add users](../accounts/add-account-users-assign-access-levels.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) back in using their AAD identity. Users added will be treated as new users. They will **NOT** own any of their history and there is no way to re-parent this history to the AAD identity. However, users can still lookup their pre-import history by searching for {domain}\{AD username}. + +TfsMigrator will warn if it detects the complete no match scenario. If you decide to go down this migration path you will need to consent in the tool to the limitations. + +### Visual Studio Subscriptions +TfsMigrator will not be able to automatically detect Visual Studio subscriptions when generating the identity mapping file. There are two ways to ensure that your users have their Visual Studio subscription benefits applied in VSTS post import: + +* **Override License Assignments** - Follow the instructions on [overriding licensing](migration-advanced-topics.md) values to specify Visual Studio subscriptions for the correct set of users. +* **Auto Upgrade Post Import** - As long as a user's work account is [linked](https://aka.ms/LinkVSSubscriptionToAADAccount) correctly, VSTS will automatically apply their Visual Studio subscription benefits on their first login post import. You're never charged for other types of licenses assigned during import. + +## Getting Ready to Import +By this point you will have everything ready to execute on your import. You will need to schedule downtime with your team to the take the collection offline for the migration. Once you have an agreed upon a time to run the import you need to get all of the required assets you have generated and a copy of the database uploaded to Azure. This process has five steps: + +1. Take the collection offline and detach it. +2. Generate a DACPAC from the collection you're going to import. +3. Upload the DACPAC and import files to an Azure storage account. +4. Generate a SAS Key to that storage account. +5. Fill out the last fields in the import specification. + +### Detaching your Collection +Detaching the collection is a crucial step in the import processes. Identity data for the collection resides in the TFS server’s configuration database while the collection is attached and online. When a collection is detached from the TFS server it will take a copy of that identity data and package it up with the collection for transport. Without this data the identity portion of the import **CANNOT** be executed. Resources are available online to walk through [detaching a collection](../tfs-server/admin/move-project-collection.md?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json). It's recommended that the collection stay detached until the import has been completed, as there isn't a way to import the changes which occurred during the import. + +If you're running a dry run (test) import, it's recommended to reattach your collection after backing it up for import since you won't be concerned about having the latest data for this type of import. You could also choose to employ an [offline detach](../tfs-server/command-line/tfsconfig-cmd.md?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json#offlinedetach) for dry runs to avoid offline time all together. It's important to weigh the cost involved with going the zero downtime route for a dry run. It requires taking backups of the collection and configuration database, restoring them on a SQL instance, and then creating a detached backup. A cost analysis could prove that taking just a few hours of downtime to directly take the detached backup is better in the long run. + +### Generating a DACPAC + +> **Important**: Before proceeding, ensure that your collection was [detached](migration-import.md#detaching-your-collection) prior to generating a DACPAC. If you didn't complete this step the import will fail. + +Data-tier Application Component Packages ([DACPAC](https://docs.microsoft.com/sql/relational-databases/data-tier-applications/data-tier-applications)) is a feature in SQL server that allows database changes to be packaged into a single file and deployed to other instances of SQL. It can also be restored directly to VSTS and is therefore utilized as the packaging method for getting your collection's data in the cloud. You're going to use the SqlPackage.exe tool to generate the DACPAC. This tool is included as part of the [SQL Server Data Tools](https://docs.microsoft.com/sql/ssdt/download-sql-server-data-tools-ssdt). + +When generating a DACPAC there are two considerations that you'll want to keep in mind, the disk that the DACPAC will be saved on and the space on disk for the machine performing the DACPAC generation. Before generating a DACPAC you’ll want to ensure that you have enough space on disk to complete the operation. While creating the package, SqlPackage.exe temporarily stores data from your collection in the temp directory on the C: drive of the machine you initiate the packaging request from. Some users might find that their C: drive is too small to support creating a DACPAC. Estimating the amount of space you'll need can be found by looking for the largest table in your collection database. As DACPACs are created one table at a time. The maximum space requirement to run the generation will be roughly equivalent to the size of the largest table in the collection's database. Running the below query will display the size of the largest table in your collection's database in MBs. Compare that size with the free space on the C: drive for the machine you plan to run the generation on. + +```SQL +SELECT TOP 1 OBJECT_NAME(object_id), sum(reserved_page_count) * 8/1024.0 as SizeInMb +FROM sys.dm_db_partition_stats +WHERE index_id = 1 +GROUP BY object_id +ORDER BY SizeInMb DESC +``` + +Using the size output from the SQL command, ensure that the C: drive of the machine that will create the DACPAC has at least that much space. If it doesn't then you'll need to redirect the temp directory by setting an environment variable. + +```cmdline +SET TEMP={location on disk} +``` + +Another consideration is where the DACPAC data is saved. Pointing the save location to a far off remote drive could result in much longer generation times. It's recommended that if a fast drive, such as an SSD, is available locally that you target that drive as the DACPAC's save location. Otherwise, it's always faster to use a disk that's on the machine where the collection database is residing over a remote drive. + +Now that you've identified the target location for the DACPAC and ensured that you'll have enough space, it's time to generate the DACPAC file. Open a command prompt and navigate to the location where SqlPackage.exe is located. Taking the command example below, replace the required values and generate the DACPAC + +```cmdline +SqlPackage.exe /sourceconnectionstring:"Data Source={database server name};Initial Catalog={Database Name};Integrated Security=True" /targetFile:{Location & File name} /action:extract /p:ExtractAllTableData=true /p:IgnoreUserLoginMappings=true /p:IgnorePermissions=true /p:Storage=Memory +``` + +* **Data Source** - SQL Server instance hosting your TFS collection database. +* **Initial Catalog** - Name of the collection database. +* **targetFile** - Location on disk + name of DACPAC file. + +Below is an example of the DACPAC generation command that is running on the TFS data tier itself: + +```cmdline +SqlPackage.exe /sourceconnectionstring:"Data Source=localhost;Initial Catalog=Tfs_Foo;Integrated Security=True" /targetFile:C:\DACPAC\Tfs_Foo.dacpac /action:extract /p:ExtractAllTableData=true /p:IgnoreUserLoginMappings=true /p:IgnorePermissions=true /p:Storage=Memory +``` + +The output of the command will be a DACPAC that is generated from the collection database Tfs_Foo called Tfs_Foo.dacpac. + +If you run into trouble generating the DACPAC or if your total collection data size is greater than 500GBs, please reach out to [vstsdataimport@microsoft.com](mailto:vstsdataimport@microsoft.com). We'll work with you to get your collection imported into VSTS. + +### Importing Large Collections + +> Importing using a SQL Azure VM must only be used if your collection database is above the recommended size below. Otherwise, use the DACPAC method outlined above. + +DACPACs offer a fast and relatively simplistic method for moving collections into VSTS. However, once a collection database crosses the 150GB size threshold the benefits of using a DACPAC start to diminish. For databases over this size threshold, a different data packaging approach is required to migrate to VSTS. + +Before going any further, it’s always recommended to see if [old data can be cleaned up](../accounts/clean-up-data.md?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json). Overtime collections can build up very large volumes of data. This is a natural part of the devops process. However, some of this data might no longer be relevant and doesn’t need to be kept around. Some common examples are older workspaces and build results. Cleaning older, no longer relevant artifacts, might remove a lot more space than one would expect. It could be the difference between using the DACPAC import method or having to use a SQL Azure VM. It's important to note that once you deleted older data that it **CANNOT** be recovered without restoring an older backup of the collection. + +If you’re still unable to get the database under the DACPAC threshold then you will need to setup a SQL Azure VM to import to VSTS. There several steps involved in setting up a SQL Azure VM for migrating data to VSTS. We’ll walk through how to accomplish this end-to-end. Steps covered include: + +1. Setting up a SQL Azure VM +2. Restoring your database on the VM +3. Creating an identity to connect to the collection database +4. Configuring your import specification file to use a SQL connection string +5. Optionally, we recommend restricting access to just VSTS IPs + +Setting up a SQL Azure VM can be done from the Azure portal with just a few clicks. Azure has a [tutorial](https://docs.microsoft.com/azure/virtual-machines/windows/sql/virtual-machines-windows-portal-sql-server-provision) on how to setup and configure a SQL Azure VM. Follow that tutorial to ensure that your VM is configured correctly and SQL can be accessed remotely. Note, it’s important that you put your VM in the same Azure region that your future VSTS account will be residing. This will increase the import speed as all transfers will be within a data center. + +Below are some recommended configurations for your SQL Azure VM. + +1. It's recommended that D Series VMs be used as they're optimized for database operations. +2. [Configure](https://docs.microsoft.com/sql/relational-databases/databases/move-system-databases#a-nameexamplesa-examples) the SQL temporary database to use a drive other than the C drive. Ideally this drive should have ample free space; at least equivalent to your database's [large table](migration-import.md#generating-a-dacpac). +3. If your source database is still over 1TB after [reducing the size](../accounts/clean-up-data.md?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) then you will need to [attach](https://docs.microsoft.com/azure/virtual-machines/windows/attach-disk-portal) additional 1TB disks and combine them into a single partition to restore your database on the VM. +4. Collection databases over 1TB in size should consider using Solid State Drives (SSDs) for both the temporary database and collection database. + + +VSTS is available in a multitude of [regions](https://azure.microsoft.com/en-us/regions/services/) across the globe. When importing to these regions it's critical that you place your data in the correct region to ensure that the import can start correctly. Setting up your SQL Azure VM in a location other than the ones recommended below will result in the import either failing to start or taking much longer than expected to complete. + +Use the table below to decide where you should create you SQL Azure VM if you're using this method to import. + +| Desired Import Region | SQL Azure VM Region | +|---------------------------------|--------------------------------| +| Central United States | Central United States | +| Western Europe | Western Europe | +| Australia East | Australia East | +| Brazil South | Brazil South | +| South India | South India | + +While VSTS is available in multiple regions in the United States, only the Central United States region is accepting new VSTS accounts. Customers will not be able to import their data into other United States Azure regions at this time. + +> DACPAC customers should consult the region table in the [uploading DACPAC and import files section](#uploading-the-dacpac-and-import-files). The above guidelines are for SQL Azure VMs only. + + +After setting up and configuring an Azure VM, you will need to take your detached backup from your TFS server to your Azure VM. Azure has several methods [documented](https://docs.microsoft.com/azure/virtual-machines/windows/sql/virtual-machines-windows-migrate-sql) for how to accomplish this task. The collection database needs to be restored on SQL and doesn’t require TFS to be installed on the VM. + +Once your collection database has been restored onto your Azure VM, you will need to configure a SQL login to allow VSTS to connect to the database to import the data. This login will only allow **read** access to a single database. Start by opening SQL Server Management Studio on the VM and open a new query window against the database that will be imported. + +You will need to set the database’s recovery to simple: + +```sql +ALTER DATABASE [] SET RECOVERY SIMPLE; +``` + +Next you will need to create a SQL login for the database and assign that login the 'TFSEXECROLE': + +```sql +USE [] +CREATE LOGIN WITH PASSWORD = '' +CREATE USER FOR LOGIN WITH DEFAULT_SCHEMA=[dbo] +EXEC sp_addrolemember @rolename='TFSEXECROLE', @membername='' +``` + +Following our Fabrikam example the two SQL commands would look like the following: + +```sql +ALTER DATABASE [Tfs_Foo] SET RECOVERY SIMPLE; + +USE [Tfs_Foo] +CREATE LOGIN fabrikam WITH PASSWORD = 'fabrikamimport1!' +CREATE USER fabrikam FOR LOGIN fabrikam WITH DEFAULT_SCHEMA=[dbo] +EXEC sp_addrolemember @rolename='TFSEXECROLE', @membername='fabrikam' +``` + +Finally, the import specification file will need to be updated to include information on how to connect to the SQL instance. Open your import specification file and make the following updates: + +Remove the DACPAC parameter from the source files object. + +**Before** + +![Import specification before change](_img/migration-import/importSpecBefore.png) + +**After** + +![Import specification after change](_img/migration-import/importSpecAfter.png) + +Fill out the required parameters and add the following properties object within your source object in the specification file. + +```json +"Properties": +{ + "ConnectionString": "Data Source={SQL Azure VM IP};Initial Catalog={Database Name};Integrated Security=False;User ID={SQL Login Username};Password={SQL Login Password};Encrypt=True;TrustServerCertificate=True" +} +``` + +Following the Fabrikam example, the import specification would look like the following after applying the changes: + +![Import specification referencing a SQL Azure VM](_img/migration-import/importSpecIaaS.png) + +Your import specification is now configured to use a SQL Azure VM for import! Proceed with the rest of preparation steps to import to VSTS. Once the import has completed be sure to delete the SQL login or rotate the password. Microsoft does not hold onto the login information once the import has completed. + +Optionally, but recommended is to further restrict access to their SQL Azure VM. This can be accomplished by allowing connections only from the set of VSTS IPs that are involved in the collection database import process. The IPs that need to be granted access to your collection database will depend on what region you're importing into. The tables below will help you identify the correct IPs. The only port that is required to be opened to connections is the standard SQL connection port 1433. + +First, no matter what VSTS region you're import into the following IP must be granted access to your collection database. + + +| Service | IP | +|-------------------------------------------|---------------------| +| VSTS Identity Service | 168.62.105.45 | + +Next you will need to grant access to the TFS Database Import Service itself. Customers in Europe and the United States should select the service which is in their own region from the below table. Customers importing to locations outside of the United States and Europe must add an exception for the United States instance. + +| Service | IP | +|----------------------------------------------------------|---------------------| +| Database Import Service - West Europe | 40.115.43.138 | +| Database Import Service - Central United States | 52.173.74.9 | +| Database Import Service - South Central United States | 40.124.13.10 | + +Then you will need to grant access to the VSTS instances in the region that you're importing into. + +If you're importing into Western Europe you will need grant access for the following IP: + +| Service | IP | +|-------------------------------------------|---------------------| +| VSTS - Western Europe 2 | 40.68.34.220 | + +If you're importing into Central United States you will need to grant access for the following IP: + +| Service | IP | +|--------------------------------------------|---------------------| +| VSTS - Central United States 2 | 13.89.236.72 | + +If you're importing into India South you will need to grant access for the following IP: + +| Service | IP | +|-------------------------------------------|---------------------| +| VSTS - India South | 104.211.227.29 | + +If you're importing into Australia East you will need to grant access for the following IP: + +| Service | IP | +|-------------------------------------------|---------------------| +| VSTS - Australia East | 191.239.82.211 | + +If you're importing into South Brazil you will need to grant access for the following IPs: + +| Service | IP | +|-------------------------------------------|---------------------| +| VSTS - South Brazil 1 | 191.232.37.247  | +| VSTS - South Brazil 2 | 13.75.145.145   | + +Finally, if you're queuing the import from a machine other than your SQL Azure VM, you will need to grant an exception for that Machine's IP as well. It's recommended that you run the import command with the '/validateOnly' flag prior to queuing it. That allow you to quickly ensure if the firewall rules are working. + + +### Uploading the DACPAC and Import Files +All of the files required to run the import need to be placed in an Azure storage container. This can be an existing container or one created specifically created for your migration effort. It's always recommend to create a new container as the Azure region that this container exists in matters when queuing an import. + +VSTS is available in a multitude of [regions](https://azure.microsoft.com/en-us/regions/services/) across the globe. When importing to these regions it's critical that you place your data in the correct region to ensure that the import can start correctly. Place your data in a location other than the ones recommended below will result in the the import either failing to start or taking much longer than expected to complete. + +| Desired Import Region | Storage Account Region | +|---------------------------------|--------------------------------| +| Central United States | Central United States | +| Western Europe | Western Europe | +| Australia East | Central United States | +| Brazil South | Central United States | +| South India | Central United States | + +While VSTS is available in multiple regions in the United States, only the Central United States region is accepting new VSTS. Customers will not be able to import their data into other United States Azure regions at this time. + +> Customers outside of the United States and Europe will need to place their data in Central United States. This is temporary as we work to put instances of the TFS Database Import Service in those countries. Your data will still be imported into your desired import region. + +[Creating a container](https://docs.microsoft.com/azure/storage/common/storage-create-storage-account) can be done from the Azure portal. Once the container has been created you will need to upload the following files: + +* Identity Map CSV +* Collection DACPAC + +This can be accomplished using tools like [AzCopy](https://docs.microsoft.com/azure/storage/common/storage-use-azcopy) or any other Azure storage [explorer tool](http://storageexplorer.com/). + +### Generating SAS Key +A shared access signature ([SAS](https://docs.microsoft.com/azure/storage/common/storage-dotnet-shared-access-signature-part-1)) key provides delegated access to resources in a storage account. This allows you to give Microsoft the lowest level of privilege required to access your data for executing the import. At a minimum we require both read and list permission to the container hosting the files you uploaded in the previous step. The SAS key can even be time limited to cut off access after a desired time period has passed. It's strongly recommended that you time limit the key last for a minimum of seven days. + +There are several ways to generate a SAS key. The recommended way is to use the [Microsoft Azure Storage Explorer](http://storageexplorer.com/). After installing the tool you can complete the following steps to generate a SAS Key: + +1. Connect your storage account to the tool by using one of the two account keys +2. Once the storage account has been connected you can expand out the list of blob containers in the account +3. Right click on the blob container that contains your import files and select "Get Shared Access Signature..." +4. Ensure that read and list permissions are selected and extend the expiration time for the key. It's recommended that your SAS Key be valid for at least 7 days + +![Microsoft Azure Storage Explorer](_img/migration-import/ImportSpecFillOutNoCode.png)git + +5. Click create and copy the URL link provided + +You will input the newly generated SAS Key into your import specification file as the "PackageLocation" parameter. + +### Completing the Import Specification +Earlier in the process you partially filled out the import specification file generally known as ```import.json```. At this point you have enough information to fill out all of the remaining fields expect for the import code. The import code will be covered in the import section below. Open your import specification file and fill out the following fields. + +* **PackageLocation** - Place the SAS key generated from the script in the last step here. +* **DacpacFile** - Ensure the name in field is the same as the DACPAC file you uploaded to the storage account. Including the ".dacpac" extension. +* **IdentityMapFile** - Ensure the name in the field is the same as the identity mapping file you uploaded to the Azure storage container. Including the ".csv" extension. + +Using the Fabrikam example, the final import specification file should look like the following: + +![Completed import specification file](_img/migration-import/importSpecCompleted.png) + +Now you're ready to actually queue an import to VSTS! + +## Running an Import +The great news is that your team is now ready to begin the process of running an import. It's recommended that your team start with a dry run import and then finally a production run import. Dry run imports allow your team to see how the end results of an import will look, identify potential issues, and gain experience before heading into your production run. To queue imports you will need to use one of the import codes that was given to your team as part of the preview. + +> Before proceeding, ensure that you’ve received your import codes for the TFS Database Import Service preview. Be sure to download the [migration guide](https://aka.ms/TFSDataImport) as requesting invitation codes is covered in Phase 1 within the guide. + +### Considerations for Roll Back Planning +A common concern that teams have for the final production run is to think through what the rollback plan will be if there is anything goes wrong with import. This is also why we highly recommend doing a dry run to make sure you are able to test the import settings and identity map that you provide to the TFS Database Import Service. + +Rollback for the final production run is fairly simple. Before you queue the import, you will be detaching the team project collection from Team Foundation Server which will make it unavailable to your team members. If for any reason, you need to roll back the production run and have Team Foundation Server come back online for your team members, you can simply attach the team project collection on-premises again and inform your team that they will continue to work as normal while your team regroups to understand any potential failures. + +### Determining the Type of Import +Imports can either be queued as a dry or production run. Dry runs are for testing and production runs are when your team intends to use the account full time in VSTS once the import completes. Determining which type of import to be run is based off the code that you provide in the import specification file. You will have two import codes; one for a dry run and the other for a production run. Select the code that matches the type of run you wish to queue and place it in the import specification file in the “ImportCode” parameter. + +![Completed import specification file with import code](_img/migration-import/importSpecCompleted.png) + +Each import code is valid until an import has been successfully completed. The same code may be used if the import failed and you need to queue it again. + +### Queueing an Import + +> **Important**: Before proceeding, ensure that your collection was [detached](migration-import.md#detaching-your-collection) prior to generating a DACPAC or uploading the collection database to a SQL Azure VM. If you didn't complete this step the import will fail. + +Starting an import is done by using TfsMigrator's import command. The import command takes an import specification file as input. It will parse through the file to ensure the values which have been provided are valid, and if successful, it will queue an import to VSTS. + +To get started, open a command prompt and CD to path where you have TfsMigrator placed. Once there it’s recommended that you take a second to review the help text provided with the tool. Run the following command to see the guidance and help for the import command: + +```cmdline +TfsMigrator import /help +``` + +The command to queue an import will have the following structure: + +```cmdline +TfsMigrator import /importFile:{location of import specification file} +``` + +Here is an example of a completed import command: + +```cmdline +TfsMigrator import /importFile:C:\TFSDataImportFiles\import.json +``` + +Once the validation passes you will be asked to sign into to AAD. It’s important that you sign in with an identity that is a member of the same AAD as the identity mapping file was built against. The user that signs in will become the owner of the imported account. + +After the import starts the user that queued the import will receive an email. Shortly after that the team will be able to navigate to the import account to check on the status. For now, it will show a 503 offline for data import message. Once the import completes your team will be directed to sign in. The owner of the account will also receive an email when the import finishes. + +### Dry Run Accounts +Dry run imports help teams to test the migration of their collections. It’s not expected that these accounts will remain around forever, but rather to exist for a small timeframe. In fact, before a production migration can be run a complimenting dry run account will need to be deleted. All dry run accounts have a **limited existence and will be automatically deleted after a set period of time**. When the account will be deleted is included in the success email received after the import completes. Be sure to take note of this date and plan accordingly. Once that time period passes the dry run account will be deleted. If your team is ready to perform a production migration before then you will need to manually delete the account. + +Be sure to check out the [post import](migration-post-import.md) documentation for additional details on post import activities. Should your import encounter and problems, be sure to review the [import troubleshooting](migration-troubleshooting.md#dealing-with-import-errors) steps. + diff --git a/docs/articles/migration-overview.md b/docs/articles/migration-overview.md new file mode 100644 index 00000000000..a94918be402 --- /dev/null +++ b/docs/articles/migration-overview.md @@ -0,0 +1,137 @@ +--- +title: Migration overview from TFS to Visual Studio Team Services (VSTS) | VSTS & TFS +description: Overview of the high fidelity migration process from Team Foundation Server to Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.contentid: 3d6edd06-ceed-43b4-9e77-4a121864594c +--- + +> [!NOTE] +> The TFS Database Import Service for Visual Studio Team Services (VSTS) is currently in preview. + +# Overview + +An increasing number of Team Foundation Server (TFS) teams are starting to transition to Visual Studio Team Services (VSTS). There is an abundance of reasons why we’re seeing this up-tick. To name a few of the most common driving forces: + +* Getting the latest and greatest features every three weeks. +* Offloading maintenance and uptime responsibilities to Microsoft. +* Cost saving measure through a removal of servers that need to be maintained locally for TFS. +* Going all in on the cloud in every aspect of the company; including the devops space. + +Microsoft has designed the TFS Database Import Service with the goals of being high fidelity, as simple as possible to use, and requiring as little downtime as possible. + +## TFS Database Import Service preview +The TFS Database Import Service for VSTS is currently in a preview. Make sure you download the [migration guide](https://aka.ms/TFSDataImport) for more details on how to participate in this preview. + +## Migration Process + +Before diving too deeply into planning a migration it’s important to understand, at least at high-level, how the migration process functions. Migrations operate on two main concepts: + +* **Team Project Collection**: Collections in TFS are a physical container for projects and their artifacts. Each collection equates to a single database; thus they’re the unit of import for migrations to VSTS. +* **VSTS Account**: Accounts are the management unit in the cloud. Logically they map to the concept of a collection in TFS. Therefore, accounts are the target for imports during migrations to VSTS. + +The action of detaching a TFS collection, moving it to another TFS instance, and reattaching it is very similar to how import works on a high-level. Each import takes a detached collection and ‘reattaches’ it to a VSTS account. Let’s take an example where we have three TFS collections; like in the diagram below. + +![High level migration example](_img/migration-overview/MigrationHighLevelExample.png) + +Each collection (A, B, and C) gets imported into its own VSTS account. This means that you **CANNOT** import a collection into an existing account. Each import account is created at the time the import occurs. It also means that the import process is done in a single shot. You take the collection offline, detach it, and package the collection up for import. Changes that occur in-between **CANNOT** be automatically streamed over. In fact, it’s recommend that teams keep their collections offline during the migration process. + +Before a collection can be migrated from TFS to VSTS, there are a set of steps that need to be completed. The migration process has been built in such a way to deal with most of the heavy lifting, but some work should be expected to make highly customized collections ready for import. A tool, TfsMigrator, was created to assist with validating and preparing for a migration. At a high-level the migration process has seven steps: + +1. Ensuring your version of TFS is supported. +2. Running TfsMigrator to validate your collection is OK to be migrated. +3. Fixing any validation errors that are discovered. +4. Running TfsMigrator prepare to generate the necessary import files. +5. Take the collection offline and generating a DACPAC. +6. Uploading the import files and DACPAC to an Azure storage account. +7. Notifying Microsoft to execute the import. + +Assuming that you’re on a supported version, you can start focusing on the validation and preparation steps. Depending on the level of customizations in your collections, some might find that their collections are already OK for import right away and the process can be completed quickly. Larger, more customized collections should include extra time into their migration plans for encountering validation errors that need to be corrected. + +## Data Migrated +Since each collection maps to one database in TFS, and the migration process works by importing an entire collection, all data in the collection will be brought over to VSTS. More specifically, this means that all of your work items, work item history, TFVC changesets, TFVC changeset history, Git data, build definitions, build history, and other data stored in the collection will be migrated over. Furthermore, the work item, TFVC changeset, and Git commit numbers/IDs will be retained and won't change as part of the migration. + +It's important to note that some data isn't brought along during the migration. Any data that resides in a separate database outside the collection database won't be imported. Prime examples of this scenario include reporting and SharePoint data. There are also a few other instances where data won't be brought over: + +* **Release Management** - Both the previous and new Release Management data will not be migrated at this time. We're working on adding Release Management to the migration as soon as possible. +* **Package Management** - As Package Management is new to TFS we're unable to include it at this time in the import process. We're working on adding Package Management to the migration as soon as possible. +* **Extensions** - Extensions will need to be reinstalled post import. Local extensions will need to be published to the Marketplace as private extensions and shared with the account post import to be installed. We're working on adding Extensions to the migration as soon as possible. +* **Service Hooks** - Service Hooks data currently isn't included in the migration process. Hooks will need to be reconfigured after import. +* **Load Test** - Load test data will not be brought over as part of import. You will have reconfigure load test after import. +* **Mentions** - Mentions of users in work item discussions will remain but reference the on-premises identity and not the new AAD identity. Hovering on the user name will not display a contact card. Mentions of pull requests and other work items will have an invalid hyperlink. +* **Project Server Integrations** - Project Server integration does not exist for VSTS. + +## Process Customization +There are two types of process customization that are supported in VSTS. [Inherited](../work/customize/inheritance-process-model.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) and [Hosted XML](../work/customize/hosted-xml-process-model.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json). If you have customized any of your projects in TFS on-premises, you will automatically be placed on Hosted XML. **There is currently no path to move your Hosted XML projects to Inherited**. This is on our roadmap to get resolved. + +Here are some key process customization points to consider when coming into VSTS with data import. + +* **Hosted XML** - Unless all of your projects are using a core process (un-customized Agile, Scrum or CMMI), all of those projects will use Hosted XML. +* **Process per Project** - Just like in TFS, each project will be mapped to its own unique corresponding process. For example, if you have 30 projects, you will have 30 unique processes to manage. +* **All Projects are Considered Customized** - If just one project has been customized, then data import considers **all** projects as customized. This means all projects will use Hosted XML. +* **Updated a Process** - If you want to add a new customization (add a new field for example) to all your projects, you will need to update each and every process separately. +* **Consolidate Processes** - VSTS currently does not support consolidating projects to use a shared process. +* **Inherited and Hosted XML Together** - When using the TfsMigrator, be sure you understand the [different logs and validation types](migration-processtemplates.md#process-validation-types). If you elect to import your data and use Hosted XML, the Inherited features will not be available. +* **Inherited Only** - If all of your projects are un-customized, data import will place your account into the Inherited model. Therefore Hosted XML will not be available. + +> These restrictions are items we plan to address and are on our backlog to fix. Be sure to check back here for updates on when these items are resolved. + +## Work item form +Work items in VSTS have been given a [facelift](../work/process/new-work-item-experience.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json). This is the same modern experience that appears in TFS "15" for our on-premises customers. The new user experience provides the building blocks for: +* Improved readability and usability +* Richer, interactive experiences within the work item including discussion, code viewing, and more +* Extensibility support + +When a collection is imported, the form definitions for all work item types (WITs) defined in your project collection undergo an automated transformation to the new layout. This is a [best-effort transformation](../work/customize/manage-new-form-rollout.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json#best-effort-transformation) meant to maintain the field groupings and layout of your customized WIT definitions. You can [manually opt-in](../work/process/new-work-item-experience.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json#switch-to-the-new-experience) to the new experience on-premises before migrating to the cloud. +Reviewing and optimizing the transformed web layout will allow you to adjust this new layout to your own needs. Even though these changes can also be done once the import is completed we recommend you to do them beforehand to prepare your customers for the change. + +## Projects +TFS Data Import Services supports collections that contain up to 300 projects. If your collection has more than 300 projects you can [split the collection](../tfs-server/admin/split-team-project-collection.md) into two or more collections. Each collection can then be imported seperately into their own account. If splitting the collection is not an option for you, please contact us at [vstsdataimport@microsoft.com](mailto:vstsdataimport@microsoft.com). + +## Supported TFS Versions for Import +Support for the TFS Database Import Service is limited to the two most recent releases of TFS. Releases include all major and regular updates. Currently the following versions of TFS are supported for import: + +* TFS 2017 Update 1 +* TFS 2017 Update 2 + +It's strongly recommended that you upgrade to the latest supported version of TFS before importing to VSTS. + +> Release Candidate (RC) and preview versions of TFS are NOT supported by the Import Service. You will need to be on an RTW version for one of the above supported TFS versions to import. + +Normal release cadence for new TFS versions is once every three-to-four months. Meaning that support for a given version of TFS for migration to VSTS should stay in support for anywhere between six-to-eight months. It’s important to ensure that your planning accounts for this support window to avoid having to suddenly upgrade to migrate. + +## FAQ + + + +#### Q: Is there any risk of using the Hosting XML model becoming a problem in future updates of the service? + +A: No, when it comes to service updates, Hosted XML accounts are treated the same as accounts using the Inheritance process model. + +#### Q: Will my account be stuck in Hosted XML forever? + +A: You are using the Hosted XML, because the Inheritance process model does not contain all features yet. We are planning to allow you to migrate from the Hosted XML into the Inheritance process model later this year. + +#### Q: Will migrating from Hosted XML into Inheritance process model be a manual process? + +A: No, the plan is to provide a simple and automated experience through the web interface. + +#### Q: What happens in Hosted XML when Microsoft makes a change to a system process? + +A: This is the same experience with TFS on-premises. If we make a change to a system process, it will not be applied to any of your Hosted XML processes. You won't have to update your processes if you don't want to. But if you do, you will need to make the changes in the XML definition files manually for each process. + +#### Q: Is there a difference between a team project that was created manually versus one that was created from data import? + +A. The features available to each team project are the same. The differences occur in how you modify the processes in your account. When you create an account, you will use the [Inheritance process model](../work/process/manage-process.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) to customize the work tracking experience. Team projects migrated via data import, however, will use the [Hosted XML process model](../work/import-process/import-process.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) to customize the work tracking experience. + +#### Q: If my account is using Hosted XML, can I create new projects to use the Inheritance process model? + +Yes. For data import accounts, VSTS supports team projects that use Inheritance as well as Hosted XML process models. To learn more about the Inheritance process, see [Manage processes](../work/process/manage-process.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json). + +#### Q: Where can I find more information on Hosted XML and the Inheritance process model? + +* [VSTS Process Customization Roadmap (2017)](https://blogs.msdn.microsoft.com/visualstudioalm/2017/01/26/team-services-process-customization-roadmap-jan-2017/) +* [Inheritance Process Model](../work/process/manage-process.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +* [Hosted XML](../work/import-process/import-process.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) + + diff --git a/docs/articles/migration-post-import.md b/docs/articles/migration-post-import.md new file mode 100644 index 00000000000..b52507baca5 --- /dev/null +++ b/docs/articles/migration-post-import.md @@ -0,0 +1,43 @@ +--- +title: Post Import +description: Guidance on how to validate and configure a Visual Studio Team Services (VSTS) account after it has been imported. +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.contentid: db186305-0d82-4152-bb04-e7b44b56305f +--- + +> [!NOTE] +> The TFS Database Import Service for Visual Studio Team Services (VSTS) is currently in preview. + +# Post Import + +A Visual Studio Team Services (VSTS) account is ready for use once an import has completed successfully. However, there are common tasks that you should perform before opening the account up to all of your users. Below is a list of the most common after import tasks that should be completed. Tasks are listed in recommended order of completion. + +## Immediately After Import +Immediately after the account becomes available you will want to take a small team and perform spot checks on the account. It's recommended that this team consists of the project collection administrators. This shouldn’t be an in-depth check, but rather making sure that major pieces from your collection were brought over. Did your source code get imported? Are you seeing your build history? Are all of our area paths still present? It's best to confirm these artifacts are present before opening the account to the entirety of your user base. + +After spot checking the account you will want to consider if you want to rename it. [Renaming a VSTS account](../accounts/rename-vsts-account.md) is a simple operation, but it has [large impacts](https://support.microsoft.com/en-us/kb/2793597) on users currently using the account. Some examples being Team Explore connections breaking or bookmarks no longer working. Getting a rename out of the way while it's just a small group of users using the account allows the rest of the users to come in and configure their connections once. + +## Set up Billing + +To pay for users or services in VSTS, like hosted build and deployment agents, you'll need to set up billing for your VSTS account. You can do this when you make your first purchase by selecting an Azure subscription that you'd like to use for billing. This links the subscription to your VSTS account, so that all future purchases for your VSTS account will use the same Azure subscription for billing. + +## Manage Users and Access + +Your VSTS account includes 5 free users with [Basic](https://www.visualstudio.com/products/visual-studio-team-services-feature-matrix-vs) access. Basic includes features like Git and Team Foundation version control, tools for agile planning and Java teams, and more. Also, you can add [Visual Studio subscribers](https://www.visualstudio.com/products/how-to-buy-vs) for free - they get basic features plus additional features, based on their subscription level. Add [Stakeholder](https://www.visualstudio.com/products/visual-studio-team-services-feature-matrix-vs) for free, too—they can access your work items and view your backlogs. + +This means that you shouldn't have to take any other import steps if your identity mapping file has just 5 users with Basic access, Visual Studio subscriptions, and Stakeholder access. If you have more than 5 users with Basic access, you'll need to [pay for these users in your VSTS account](../billing/buy-basic-access-add-users.md). Just make sure to do this before the end of the calendar month when you import. Otherwise, these users' feature access will change from Basic to Stakeholder on the 1st day of the next calendar month. To find out how many additional users you'll need to pay for, visit your VSTS account (```https://{youraccount}.visualstudio.com/_user```) so you can find the number of paid users that you've assigned: + +![User Summary on a VSTS account](_img/migration-post-import/UserSummary.png) + +Dry run imports do not have their licenses reset on the 1st of the month. Unlike production imports, their grace period extends for the life of the account. So you don't need to worry about purchasing licenses while testing out an import. + +## Builds +Next, you will want to configure your build agents. As part of the migration, all of your build definitions have been brought over, but agents and pools need to be reconfigured against the new VSTS account. VSTS offers the ability to use a hosted pool of build agents that you can pay to use, or you can connect your private build agent(s). It's important to note that only one private build agent is included for free. After that there is a [fee](https://www.visualstudio.com/en-us/products/visual-studio-team-services-pricing-vs.aspx) for having additional private build agents. To pay for hosted and private build agents you will need to link a subscription to your VSTS account. See the following resources for details on performing this task: + +* [Build Agents](../build-release/concepts/agents/agents.md) + +If you plan on using your existing on-premises private build agents, there is one more recommended step that needs to be taken after registering them to your new account. Clearing their cache will ensure that you don't encounter any build issues related to older TFVC or Git pointers to your on-premises TFS collection. See [refreshing caches on client computers](../tfs-server/admin/backup/refresh-data-caches.md) for details on how to accomplish this task. + +## Notifying the Team +After getting your builds running and license subscription configured, it's recommended that the account be opened up to all users for validation. This is when individual users can ensure that all of the content is in place, they have the right access level, and that they can pull code. Be sure to point users to our [documentation](../accounts/set-up-vs.md) on connecting to VSTS from all of our supported IDEs and Team Explorer. Users of TFVC with local workspaces will need to remap their workspaces against the new account and Git users will have to reconfigure their remotes to be able to pull code. If anything is reported as missing from the migrated account, please reach out to [vstsdataimport@microsoft.com](mailto:vstsdataimport@microsoft.com). For other functional issues, please reach out to [customer support](https://www.visualstudio.com/support/). diff --git a/docs/articles/migration-processtemplates.md b/docs/articles/migration-processtemplates.md new file mode 100644 index 00000000000..48613002275 --- /dev/null +++ b/docs/articles/migration-processtemplates.md @@ -0,0 +1,171 @@ +--- +title: Validation of process templates for migration import from TFS to Visual Studio Team Services (VSTS) | VSTS & TFS +description: Guidance for fixing common TfsMigrator process template issues. +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.contentid: ee8c290d-0b48-4cbd-b7fd-7afb9591c169 +--- + +> [!NOTE] +> The TFS Database Import Service for Visual Studio Team Services (VSTS) is currently in preview. + +# Process Templates + +TfsMigrator could flag errors which need to be corrected prior to performing a migration. Below are the most common process related errors that are encountered when prepping for a migration. After correcting each error you will need to run TfsMigrator's validate command again to ensure the error(s) is/are actually gone. + + +## Process Validation Types + +There are two types of process validation done by the tfsMigrator. First, it checks to see if your projects have been customized and can be imported using the xml process customization model. Second, it checks to see if any of your projects can be converted into the new inherited process customization model. Two log files are generated. TfsMigrator.log and TryMatchOobProcesses.log. + + + + + + + + + + + + +
+ TfsMigrator.log + TfsMigrator.log contains the logs that prevent your collection from being imported becuase of process errors. By default your projects will land under the xml process customization model. This is the most flexible as it allows for most customizations such as custom fields, work item types, and workflows. You must fix all the errors in this file in order to proceed with the data import.
+ TryMatchOobProcesses.log + TryMatchOobProcesses.log file will be generated and contains the list of errors that the validator found for your projects land in the inherited model. TfsMigrator will look at your projects and determine if that project is using an OOB process such as Agile, Scrum, or CMMI. If it is, and does not contain and customizations, will we bring that project into the inherited model. Errors in this file will not prevent you from doing the data import.
+ +Most customers have a mix of projects that have been customized (i.e. custom fields) and projects that are using an OOB process template. TfsMigrator checks each project and validates it accordingly. It is very possible you will have some projects that will be mapped to an OOB process and some projects will use the xml for process customization. + +We recommend that for any project that has not been customized, that you review the TryMatchOobProcesses.log to determine if there are any errors. If so, make the adjustments accordingly so that the project can be mapped to an OOB process upon data import. + +## Update to a System Process + +If you started with an older version of TFS, odds are your projects are still using an older process template. If those projects have not been updated using the [Configure Features Wizard](../work/customize/configure-features-after-upgrade.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) then the tfsMigrator will find process errors. In some rare cases, if your process is so old, even the Configure Features Wizard will not reslove the errors. + +Here are some examples of error messages you will probably recieve: + +```no-highlight +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402571: Required element PortfolioBacklog is missing from Process Configuration. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402571: Required element BugWorkItems is missing from Process Configuration. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402571: Required element FeedbackRequestWorkItems is missing from Process Configuration. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402571: Required element FeedbackResponseWorkItems is missing from Process Configuration. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402574: ProcessConfiguration doesn't specify required TypeField Team. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402574: ProcessConfiguration doesn't specify required TypeField RemainingWork. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402574: ProcessConfiguration doesn't specify required TypeField Order. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402574: ProcessConfiguration doesn't specify required TypeField Effort. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402574: ProcessConfiguration doesn't specify required TypeField Activity. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402574: ProcessConfiguration doesn't specify required TypeField ApplicationStartInformation. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402574: ProcessConfiguration doesn't specify required TypeField ApplicationLaunchInstructions. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF402574: ProcessConfiguration doesn't specify required TypeField ApplicationType. +Invalid process template: WorkItem Tracking\Process\ProcessConfiguration.xml:: TF400572: The Project Process Settings must be configured for this feature to be used. +``` +
+If you have never customized your project (added fields, work item types, etc.), then fixing these is actually pretty simple. + +> If you customized your process, then this approach will not work. You will need to manually change the process templates so that your customizations do not get overwritten. + +First, make sure you know what process your project started as. Is it Scrum, Agile or CMMI? In this example, let us assume Agile. Now go to https://github.com/Microsoft/process-customization-scripts and download the repo. In this instance, we are going to focus on contents in the "Import" folder. + +Use the "ConformProject.ps1" script to conform a project of your choosing to the Agile system process. This will update the entire project to be Agile. + +``` +.\ConformProjects.ps1 "" "" "c:\process-customization-scripts\import\agile" +``` +
+Make sure you do this for each and every project. + +## Dealing with Process Errors + +Are your process templates customized? Are you using an older outdated process template? If so, you will most likely have process validation errors. TfsMigrator does an exhaustive check against your process templates. It checks to make sure that it is valid for VSTS. Odds are you will need to make some adjustments and apply them to your TFS collection. + +> If you are using an OOB Agile, Scrum, or CMMI process you probably won't see any errors in the tfsMigrator.log. Instead, check the TryMatchOobProcesses.log for errors. If you are error free then your project will map to an OOB process. + +There are variety of customizations that will not work in VSTS. Make sure you review the [list of customizations](../work/import-process/differences.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) that are supported. + +If you have projects that are using an older process template, the TfsMigrator will find several errors. This is because your process templates have not been updated to match the most recent process templates. To start, try running the [Configure Features Wizard](../work/customize/configure-features-after-upgrade.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) for each project. This will attempt to update your process templates with the most recent features. Doing so should drastically reduce the error count. + +Finally, make sure you have [witadmin](../work/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) on the machine that you intend to use to fix the process errors. This can be your local desktop. Witadmin is used in the automated scripts and is required whenever making changes to the process templates. + +### Step 1 – Review Errors +TfsMigrator.log file will be generated and contains the list of errors that the validation process found. To view the logs, open the TfsMigrator.log file. Search for the string "Validation - Starting validation of project 1". Each project is validated so you will need to scan through all the projects. Examine any lines that have a prefix of "[Error …". + +![Process logging file generated by TfsMigrator](_img/migration-troubleshooting/witLogFile.png) + +We have documented the majority of the [validation errors](../work/import-process/resolve-errors.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json). For each validation error we have provided the error number, description, and the method to resolve. + +### Step 2 – Fix Errors +Now you know what projects have errors, the details of those errors, and how to fix them. Fixing the errors requires that you to change the xml and apply the changes back into the project. + +> We do not suggest using the TFS Power Tools. It is highly recommended that you modify the XML manually. + +To get the process template from the project add the /SaveProcesses parameter when running the tfsMigrator command. + +```cmdline +TfsMigrator validate /collection:{collection URL} /SaveProcesses +``` + +This command will extract the xml from the project and place it into the same folder as the logs. Extract the zip files to your local machine so that you can edit the files. + +Now you need to fix the xml. Use the logs from the ```TfsMigrator.log``` file to determine the errors for each project. + +![Process logging file generated by TfsMigrator](_img/migration-troubleshooting/witLogFile.png) + +Some errors will require you to do use a [witamdin changefield](../work/reference/witadmin/manage-work-item-fields.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) command. Changing a field name is the most common example. To save yourself some time, we recommend you run the ```witadmin changfield ...``` command and then re-run the tfsMigrator tool. Doing this will re-export the xml with the corrected names. Otherwise you will need manually fix the fields in the xml as well. + +Once you make a fix then you need to conform. Conform is defined as taking the XML you just changed and applying it back into TFS. To do this, depending on the changes you made, you will need to run one or more [witadmin](../work/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) commands. To make this easier for you, we created a PowerShell script to automate the process. The script contains all of the witadmin commands needed to conform the entire process. + +You can get the scripts at https://github.com/Microsoft/process-customization-scripts. Use the import/ConformProject.ps1 script. + +```cmdline +.\conformproject.ps1 “” “” “” +``` +![Conform project processes script running](_img/migration-troubleshooting/conformProjectProcessesPowerShell.png) + +When the script has completed you need to re-run the TfsMigrator to validate the collection. Follow steps 1 - 3 until the TfsMigrator generates no more validation errors. + +> If you are new to xml and witadmin, we suggest you make one fix at a time and then conform. Continue this loop until all errors are resolved. + +### Common Validation Errors + +#### VS402841: Field X in work item type Bug has syncnamechanges=false but has rules making it an identity field. Identity fields must have syncnamechanges=true. Please update your process template to include this change. + +In VSTS we added a rule so that every identity field must have the syncnamechanges=true attribute. In TFS that rule does not apply. Therefore, the TfsMigrator will identify this as an issue. Don't worry, making this change on TFS on-prem will not cause any harm. + +To fix this you will need to run the witadmin changefield command. Syntax for the command will look something like this: + +```cmdline +witadmin changefield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:fieldname /syncnamechanges:true +``` + +For more information on the changfield command see https://msdn.microsoft.com/en-us/library/dd236909.aspx + +#### TF402556: For field System.IterationId to be well defined, you must name it Iteration ID and set its type to Integer. + +This error is typical for old process templates that have not been updated in some time. Try running the [configure features wizard](../work/customize/configure-features-after-upgrade.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) on each project. Alternatively you can run the follow witadmin command: + +```cmdline +witadmin changefield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:fieldname /name:newname +``` +#### TF402571: Required element BugWorkItems is missing from Process Configuration. + +This error typically occurs when a process has not been updated in a while. Try running the [configure features wizard](../work/customize/configure-features-after-upgrade.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) on each project to resolve. + +#### TF402564: You've defined XX global lists. Only 64 are allowed. + +By default, VSTS will support 64 global lists. You will typically run across this error if you have a large amount of build definitions. The global list named Builds – **TeamProjectName** gets created for each new build definition. You will need remove the outdated global lists. + +### Additional Resources + +* [witadmin](../work/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +* [Differences between VSTS and TFS process template customizations](../work/import-process/differences.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +* [Configure features after TFS upgrade](../work/customize/configure-features-after-upgrade.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +* [Resolve validation errors](../work/import-process/resolve-errors.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +* [Defining global lists in TFS](../work/reference/define-global-lists.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +* [Process customization PowerShell scripts](https://github.com/Microsoft/process-customization-scripts) + + + + + + diff --git a/docs/articles/migration-troubleshooting.md b/docs/articles/migration-troubleshooting.md new file mode 100644 index 00000000000..0639a34c844 --- /dev/null +++ b/docs/articles/migration-troubleshooting.md @@ -0,0 +1,253 @@ +--- +title: Troubleshooting the migration import from TFS to Visual Studio Team Services (VSTS) | VSTS & TFS +description: Guidance for fixing common TfsMigrator valdiation errors. +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.contentid: ee8c290d-0b48-4cbd-b7fd-7afb9591c169 +--- + +> [!NOTE] +> The TFS Database Import Service for Visual Studio Team Services (VSTS) is currently in preview. + +# Troubleshooting + +TfsMigrator could flag errors which need to be corrected prior to performing a migration. Below are the most common errors that are encountered when prepping +for a migration. After correcting each error you will need to run TfsMigrator's validate command again to ensure the error(s) is/are actually gone. + +## Dealing with Size Warnings +If your collection is particularly large then you might receive one of the below messages after running TfsMigrator. If you receive any of the below warnings or errors, it's always recommended that you try to [reduce your database's size](../accounts/clean-up-data.md). + + The database is currently {Database Size}GBs. This is above the recommended size of {DACPAC Size Limit}GBs to use the DACPAC import method. Please see the following page to learn how to import using a SQL Azure VM: https://aka.ms/VSTSImportLargeCollection + +This is a warning that means you will need to use the SQL Azure VM method to complete your import. Once a database reaches a certain size it becomes faster to setup a SQL Azure VM to complete the import to Visual Studio Team Services (VSTS). Follow the instructions linked from the warning message to setup the VM and complete your import. This warning does **NOT** mean that your collection is too big to be imported. + + The largest table size is currently {Table size}GBs. This is above the recommended size of {Size limit}GBs to use the DACPAC import method. Please see the following page to learn how to import using a SQL Azure VM: https://aka.ms/VSTSImportLargeCollection + +Similar to the previous warning, this warning means you will have to use the SQL Azure VM method to complete the import. Follow the instructions linked from the warning message to setup the VM and complete your import. This warning does **NOT** mean that your collection is too big to be imported. + + The database metadata size is currently {Metadata Size}GBs. This is above the recommended size of {Warning Size}GBs. It's recommended that you consider cleaning up older data as described in [Cleaning up old data] (../../accounts/clean-up-data.md). + +This warning means that your database is approaching the limit for total metadata size. Metadata size refers to the size of your database without including files, code, and other binary data. The warning does **NOT** mean that your collection is too big for import, rather its metadata size is larger than the vast majority of other databases. It's strongly recommended that you [reduce the size](../accounts/clean-up-data.md) of your database before import. Reducing the size provides the additional benefit of speeding up your import. + + The database metadata size is currently {Metadata Size}GBs. This is above the maximum supported size of {Metadata Limit}GBs. + +Unlike the previous warnings, this is an error that **WILL** block you from moving forward with your migration to VSTS. The volume of metadata in your collection is too large and needs to be [reduced](../accounts/clean-up-data.md) below the mentioned limit to proceed with the import. + +## Dealing with Collation Warnings +Collation in this case refers to the collection database’s collation. Collations control the way string values are sorted and compared. Collections that aren't using either SQL_Latin1_General_CP1_CI_AS or Latin1_General_CI_AS will receive a **warning** similar to the one below. + + The collection database collation 'Finnish_CI_AS' is not supported by Visual Studio Team Services. See more details at https://aka.ms/vstsimportcollations + +Receiving this warning **does not** mean that you can't import your collection to VSTS. Rather, it means that you will need to think through some additional considerations before performing an import. When a non-supported collation is imported into VSTS it is effectively transformed to the supported VSTS collation. While this generally works without issue, unexpected results could be observed post import or the import could fail if a unique collation translation issue is encountered. For instance, customers will notice different ordering for strings containing non-English characters. Non-English characters like 'é' become equivalent to the English 'e' after the import has completed. It's important that you complete and vet out a dry run import when importing a collection with a non-supported collation. + +Collation warnings require an acknowledgement from the user running the TfsMigrator command. Accepting the warning will allow TfsMigrator to continue assisting you with preparing for your import. + +> To reduce the chance of collation issues causing an import to fail, it's recommended that you extract your database as a DACPAC and restore the DACPAC into a database locally that uses the SQL_Latin1_General_CP1_CI_AS collation. + +## Dealing with Identity Errors +Identity errors aren't common when validating a collection, but when they do come up it's important to fix them prior to migration to avoid any undesired results. Generally, identity problems stem from valid operations on previous versions of TFS that are no longer valid on your current TFS version. For example, some users being members of a built-in valid users group was once allowed, but isn't in more recent versions. The most common identity errors and guidance on fixing them can be found below. + +### ISVError:100014 +This error indicates that a permission is missing from a system group. System groups are well known groups in TFS and VSTS. For example, every collection that you create has “Project Collection Valid Users” and “Project Collection Administrators” groups. They’re created by default and it’s not possible to edit the permissions for these groups. What this error indicates is that somehow one or more of these groups is missing a permission that it's expected to have. In order to fix this, you will need to use TFSSecurity.exe to apply the expected permissions onto the flagged system groups. To get started you will need to identify which [TFSSecurity](../tfs-server/command-line/tfssecurity-cmd.md) command(s) will need to be run. + +#### Project Collection Valid Users Error Message + +Carefully examine the error message(s) TfsMigrator highlighted. If the group that was flagged ends with “**0-0-0-0-3**”, such as in the example below, then you will need to fix a missing permission for the “Project Collection Valid Users” group. Run the below command against TFSSecurity.exe after replacing the scope with the one from the error message and adding in your collection URL. + +```cmdline +TFSSecurity.exe /a+ Identity "{scope}\\" Read sid:{Group SID} ALLOW /collection:{collectionUrl}* +``` +In the below example you will need to take the scope and group SID from the error message, and add it the templated command above. + + ISVError:100014 Missing permission for group:Microsoft.TeamFoundation.Identity;S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-3 for scope:397c326b-b97c-4510-8271-75aac13de7a9. Expected:1 and Actual:0 + +The final command will look like: + +```cmdline +TFSSecurity.exe /a+ Identity "397c326b-b97c-4510-8271-75aac13de7a9\\" Read sid:S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-3 ALLOW /collection:https://localhost:8080/tfs/defaultcollection +``` +#### Project Collection Administrators Error Message + +Carefully examine the error message(s) TfsMigrator highlighted. If the group that was flagged ends with “**0-0-0-0-1**”, such as in the example below, then you will need to fix a missing permission for the “Project Collection Administrators” group. Run the below commands against TFSSecurity.exe after replacing the scope with the one from the error message and adding in your collection. + +```cmdline +TFSSecurity.exe /a+ Identity "{scope}\\" Read sid:{Group SID} ALLOW /collection:{collectionUrl} + +TFSSecurity.exe /a+ Identity "{scope}\\" Write sid:{Group SID} ALLOW /collection:{collectionUrl} + +TFSSecurity.exe /a+ Identity "{scope}\\" Delete sid:{Group SID} ALLOW /collection:{collectionUrl} + +TFSSecurity.exe /a+ Identity "{scope}\\" ManageMembership sid:{Group SID} ALLOW /collection:{collectionUrl} +``` +In the below example you will need to take the scope and group SID from the error message, and add it the templated command above. + + ISVError:100014 Missing permission for group:Microsoft.TeamFoundation.Identity;S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 for scope:0c7c2216-fa4b-4107-a203-82b324a147ef. Expected:15 and Actual:0 + +The final command will look like: + +```cmdline +TFSSecurity.exe /a+ Identity "0c7c2216-fa4b-4107-a203-82b324a147ef\\" Read sid:S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 ALLOW /collectionhttps://localhost:8080/tfs/defaultcollection + +TFSSecurity.exe /a+ Identity "0c7c2216-fa4b-4107-a203-82b324a147ef\\" Write sid:S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 ALLOW /collectionhttps://localhost:8080/tfs/defaultcollection + +TFSSecurity.exe /a+ Identity "0c7c2216-fa4b-4107-a203-82b324a147ef\\" Delete sid:S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 ALLOW /collectionhttps://localhost:8080/tfs/defaultcollection + +TFSSecurity.exe /a+ Identity "0c7c2216-fa4b-4107-a203-82b324a147ef\\" ManageMembership sid:S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 ALLOW /collectionhttps://localhost:8080/tfs/defaultcollection +``` +If you have multiple errors that need to be corrected, it’s recommended that you put all of the commands into a batch file to execute them against TFSSecurity in an automated fashion. Once the commands have been executed you will need to run TfsMigrator validate again to ensure that the error(s) has\have been corrected. If the error(s) still persists, please contact [VSTS customer support](https://aka.ms/vstscustomersupport). + +### ISVError:300005 +ISVError:300005 indicates that a non-group identity is a member of an everyone group, more commonly known as the Valid Users groups. Valid Users groups are created by default for all projects and collections. They’re uneditable groups that only contain other TFS groups as members. In the case of ISVError:300005, a non TFS group identity, such as an AD group or user identity, has a direct membership in a Valid Users group. + +Since Valid Users groups can’t be edited directly or through TFSSecurity.exe, correcting the invalid membership will need to be done by running a SQL statement against the configuration database to remove the offending identity. Carefully examine the error message(s) TfsMigrator highlighted. You will need copy down the GroupSid, MemberId, and ScopeId as these values will need to be placed into the templated command below. + +```SQL +DECLARE @p6 dbo.typ_GroupMembershipTable + +INSERT into @p6 values('{GroupSid}','Microsoft.TeamFoundation.Identity','{MemberId}',0) + +EXEC prc_UpdateGroupMembership @partitionId=1,@scopeId='{ScopeId}',@idempotent=1,@incremental=1,@insertInactiveUpdates=0,@updates=@p6,@eventAuthor='9EE20697-5343-43FC-8FC5-3D5D455D21C5',@updateGroupAudit=0 +``` + + +Below is an example ISVError:300005 message from TfsMigrator. + +```cmdline +ISVError:300005 Unexpected non group identity was found to have direct membership to everyone group. GroupSid:S-1-9-1551374245-3746625149-2333054533-2458719197-2313548623-0-0-0-0-3, MemberId:76050ddf-4fd8-48c4-a1ff-859e44364519, ScopeId:7df650df-0f8b-4596-928d-13dd89e5f34f +``` + + +Copy the GroupSid, MemberId, and ScopeId into the templated SQL command. + +```SQL +DECLARE @p6 dbo.typ_GroupMembershipTable + +INSERT into @p6 values('S-1-9-1551374245-3746625149-2333054533-2458719197-2313548623-0-0-0-0-3','Microsoft.TeamFoundation.Identity','76050ddf-4fd8-48c4-a1ff-859e44364519',0) + +EXEC prc_UpdateGroupMembership @partitionId=1,@scopeId='7df650df-0f8b-4596-928d-13dd89e5f34f',@idempotent=1,@incremental=1,@insertInactiveUpdates=0,@updates=@p6,@eventAuthor='9EE20697-5343-43FC-8FC5-3D5D455D21C5',@updateGroupAudit=0 +``` + +Run the completed command against the TFS configuration database. This will need to be repeated for each ISVError:300005 instance that TfsMigrator found. Errors with the same scope ID can be batched into one command. Once the commands have been executed you will need to run TfsMigartor validate again to ensure that the errors have been corrected. If the errors still persist, please contact [VSTS customer support](https://aka.ms/vstscustomersupport). + +### AAD Timeout Exception +On rare occasions some might receive an AAD timeout error when running the TfsMigrator prepare command. + + Exception Message: Request failed (type AadGraphTimeoutException) + +This error means that the requests to AAD to find the matching AAD identities for users in your collection timed out. Generally, this error can be resolved by waiting to run the prepare command at a less busy time of the day. Such as after regular business hours. + +In the event that the error continues there are few troubleshooting steps which should be undertaken. First, you will want to test your connection to AAD from the machine running the prepare command. Follow the below steps and see if you can retrieve information on a user in your AAD. + +1. Open PowerShell in elevated mode +2. In PowerShell, execute the below commands +3. Install-Module AzureAD // select Yes to All +4. Install-Module MSOnline // select Yes to All +5. Connect-MsolService // Use your AAD credentials (someone@somecompany.com) to login when the pop-up appears +6. Get-MsolUser -UserPrincipalName someone@somecompany.com + +If any of the above steps fail or you're unable to look up a users identity, that's a strong indication that there is a connection issue between the machine running the prepare command and AAD. You should run a network trace while executing the prepare command to ensure that nothing within your own network is stopping the calls from reaching AAD. If you've confirmed that the problem is not with your network then you will need reach out to Azure support for assistance with troubleshooting. + +If you are able to get information back on a user, open your log file from the prepare attempt and look for a line like the following. + + Number of active users is {Number of Users}. + +If this number is in the high five-digits or even six-digits ranges then it could be an indication that the volume of identities being mapped require more time than the timeout limit provides. You should inspect your collection for inclusions of large AD groups such as an 'everyone' group. If possible remove these groups and try again. If you still can't resolve this error then please reach out to [VSTS customer support](https://aka.ms/vstscustomersupport). + +## Dealing with Process Errors +See the separate [Process Templates](migration-processtemplates.md) page for details on resolving common process errors. + +## Dealing with Import Errors +Hit a failure when running your import? Failures in the import space fall into one of two categories. Verification failures happen when the import fails to start. The indication that this has occurred is when TfsMigrator attempts to queue an import, but returns an error instead. Import failures happen when the import was queued successfully in TfsMigrator, but failed after that point. The individual that queued the import will recieve a failure email if this happens. + +### Verification Failures +Verification failures happen when the import fails to start. Issues falling into this category mean that something with your import request isn't valid. Look up you error message below and follow the recommended guidance on how to resolve the error. After that your team can try to queue the import again. + + VS403252: The specified import code {0} is not valid, expired, or is already in use. + +This error means that something is wrong with your import code. Either it has already been successfully used for another import, it expired, or it isn't valid. Double check the code that you've placed in the import specification file against the codes that you were given as part of the preview. + + VS403253: Queuing an import requires an import code. + +An import code was not provided in the import specification file. Open your import specification file and be sure that you've placed one of your team's import codes into the "ImportCode" parameter. + + VS403254: Region {0} may not be used for the Import, it is not a supported region. + +The region that you entered for your VSTS import isn't supported. Open your import specification file and update the region that you've provided with the correct short name for the region you want to import into. These could be, but aren't limited to: CUS, WEU, MA, EAU, SBR. These correspond to Central US, West Europe, India South, East Australia, and South Brazil respectively. + + VS403249: The account {0} already exists. Please select a different name and try the import again. + +All VSTS imports go into a new account that is created at import time. This error indicates that the account name your team has selected is already being used by an existing account. Select a different name and update the import specification file before retrying the import. + + VS403250: The dacpac is not a detached TFS Collection database. + VS403286: The dacpac is from a TFS Configuration database. You must use a detached TFS Collection database. + +The DACPAC is not built off a detached collection. The collection database will need to be [detached](migration-import.md#detaching-your-collection) and the DACPAC generated again. + + VS403243: Unable to connect to the database using the provided SQL Connection String {0}. + +Unable to make a connection to the database using the provided SQL Connection String. Review the parameters that were provided to ensure they’re correct and try again. + + VS403260: The database is not detached. + VS403351: The DACPAC or source database is missing an expected table. It’s possible that the database was not correctly detached from TFS. + +The database is not detached. It will need to be [detached](migration-import.md#detaching-your-collection) and the import queued again. + + VS403261: The SQL connection string must use encryption. + +The connection string must be excrypted otherwise the password will be sent in the clear. Please add "Encrypt=true" to your SQL connection string. + + VS403262: The SQL connection string must use SQL Authentication, Integrated Authentication is not supported. + +Please add "Integrated Security=False" to your SQL connection string. + + VS403263: The User ID {0} must be member of the database role {1}. + +This error means that your SQL login user does not have the required database role. Please make sure ['TFSEXECROLE'](migration-import.md#importing-large-collections) is assigned to the login. + + VS403264: The database is not a TFS Collection database, it cannot be used for import. + +The connection string does not point to a TFS Collection database. + + VS403255: The collection cannot be imported due to an ongoing post upgrade job. Please wait and try again later + +The TFS Update has queued the file migration job. Imports cannot be performed until this job has completed. The completion time for this job is dependent on the size of the collection. Job progress can be tracked by running the below query on the collection database: + +```SQL +SELECT COUNT (*) as remaining_files_to_migrate +FROM tbl_FileReference +WHERE PartitionId > 0 + AND MigrateFileId IS NOT NULL +``` + +Once the number of files remaining to migrate is zero you can run TfsMigrator. + + VS403282: The source location parameter contains a new line character. Please ensure the SAS key is defined on a single line in the import specification file. + +There is a new line character in the source location value, this could have been left over when copying the SAS key from your windows console, please remove the line break and try again. + + VS403285: Invalid identity mapping file - {0} + +Identity mapping file has unexpected (invalid) content. This error may be reported in different cases: +- File may be completely empty +- File may have single line with column names but no actual content (identity mapping entries) +- File may not be parsed as CSV file (usually it happens when text editor used to edit generated mapping file didn't save it as proper CSV file) +- File may have duplicated records for the same identity + + VS403271: It appears that your DACPAC was uploaded to East US. It’s required that customers targeting Central US for import put their DACPACs in Central US. Please move your DACPAC to Central US and requeue the import. + +Your import files and DACPAC are not located in the **required** Azure region to complete the import to your target VSTS region. Please [Create a new windows azure storage account](https://docs.microsoft.com/azure/storage/common/storage-create-storage-account) in the required region and copy your files. Below is an example of how to copy your data using AzCopy. + +```cmdline +AzCopy.exe /Source:https://accountSCUS.blob.core.windows.net/mycontainer /SourceKey:"primary access key" /Dest:https://accountCUS.blob.core.windows.net/mycontainer /DestKey:"primary access key" /S +``` + +### Import Failures +When an imports fails the individual that queued the import will receive an email. In this case, your team will need to roll back by bringing your Team Foundation Server instance back online and attaching your collection. This will allow your team members to continue working. Once your team is back up and working again, follow the instructions in the failure email and file a [support case](https://www.visualstudio.com/team-services/support/#vsts-support) to get assistance. + + + + + + + + diff --git a/docs/articles/move-git-repos-between-team-projects.md b/docs/articles/move-git-repos-between-team-projects.md new file mode 100644 index 00000000000..5317002756e --- /dev/null +++ b/docs/articles/move-git-repos-between-team-projects.md @@ -0,0 +1,100 @@ +--- +title: Version Control - Move Git repositories between VSTS Team Projects +description: Moving Git Repositories from one Team Services Team Project to another +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.assetid: 5CB114EA-EC65-4FF8-BC71-1B7E4B15D921 +ms.manager: willys +ms.date: 06/01/2016 +ms.author: willys +author: willys +--- + +[comment]: <> (Document was created as part of our team project consolidation and validated with engineers / MVPs in the field.) +[comment]: <> (We considered the `git remote add origin ` command, but clone+push was simple and fast.) + +# Move Git repositories between team projects + +![](./_img/move-git-repos-between-team-projects/git.png) + +Do you plan to consolidate multiple team projects into one? If yes, you are probably wondering what to do with all the repositories. Move or merge them? Keep history or just the tip of the iceberg? + +In this article you will learn how to move your Git repositories to another team project, with full-fidelity history. + +## What's the scenario? + +As shown, we need to move the MigrationDemo repo, from the FabrikamOld to the new Fabrikam team project. + +> ![Move Repo Scenario](./_img/move-git-repos-between-team-projects/MoveRepo-Visual.png) + +## How do I move? + +You have 2 options as outlined below. Import functionality is easier, but is only available in Team Services and TFS 2017 Update 1 and above. + +### Use Import Git repository functionality +Using Import Repository, you can import a Git repository to your team project from TFS/Team Services or any other Git source code provider like Github. +Review the [import repository documentation](../git/import-git-repository.md) for more details. + +### Manually migrate the Git repo in 5 easy steps: + +#### Create an empty Git repo. + +From the code explorer, click on the repo name. Choose **New Repository** from the list, select Git as the type and give it a name. + +![Create New Repo](./_img/move-git-repos-between-team-projects/MoveRepo-NewRepo.png) + +Once the repo is created, you are presented with step-by-step instructions to quickly get started. Copy the `Clone URL` to your clipboard. + +![New Repo Information](./_img/move-git-repos-between-team-projects/MoveRepo-NewRepoInfo.png) + +> Important - Clear the **Automatically create links for work items mentioned in a commit comment** if you are importing from a different project collection or a foreign git repository. Team Services will otherwise associate the commits to existing work items of unrelated team projects in the team project collection. + +![New Repo Options and Links Warning](./_img/move-git-repos-between-team-projects/MoveRepo-Warning.png) + +#### Mirror the repository + +Switch to a Developer Command Prompt and path to your local (source) repository for the MigrationDemo repo in FabrikamOld. Run the `git clone --mirror` command, using the Clone URL from above. + +> Command Line: `git clone --mirror https://demo-fabrikam.visualstudio.com/DefaultCollection/Fabrikam/_git/MigrationDemo` + +As shown, the `clone --mirror` is redundant in this case, as the remote repository is bare. It is used here as a safe and easy way to setup the remote. + +![Git Clone Command Done](./_img/move-git-repos-between-team-projects/MoveRepo-Mirror-Done.png) + +#### Push the repo + +Run the `git push` command to push the local changes to the remote (target) repo. + +![Git Push Command Done](./_img/move-git-repos-between-team-projects/MoveRepo-Push-Done.png) + +The `--mirror` option is used with both the clone and push command, and ensures that all branches and other attributes are replicated in the new repo. + +#### Validate the new repository + + Switch to the VSTS web portal and validate the new repository and the history in the **CODE** hub. + +![Repo Validation in CODE Explorer](./_img/move-git-repos-between-team-projects/MoveRepo-Validate.png) + +Verify that all your branches were moved over to the new repo. + +#### Configure the new repo + + Verify that the permissions and policies are correctly configured for the new repo. You can configure the security after step 1, or at this stage. Reconfigure your builds to connect with the new repo. Lastly, notify users of the original repo to update their remotes in Visual Studio, or running the `git remote set-url origin` command. + +> Command line: `git remote set-url origin https://demo-fabrikam.visualstudio.com/DefaultCollection/Fabrikam/_git/MigrationDemo` + + +> Important - Remember to clean up the original project by either deleting the repo (be careful, there's no undo) or locking the branches so that no one accidentally keeps updating it. + +For detailed information on planning your team project collections and team projects refer to the [TFS Planning, Disaster Avoidance and Recovery, and TFS on Azure Iaas Guide](http://vsarplanningguide.codeplex.com/). + +> Authors: Jesse Houwing, Mike Fourie, and Willy Schaub + +*(c) 2016 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* diff --git a/docs/articles/phase-rollout-with-rings.md b/docs/articles/phase-rollout-with-rings.md new file mode 100644 index 00000000000..def7cd78c3d --- /dev/null +++ b/docs/articles/phase-rollout-with-rings.md @@ -0,0 +1,183 @@ +--- +title: DevOps - Phase the roll-out of your application through rings +description: Explore how to phase your application roll-out using a tier or ring model +ms.assetid: F6B1E468-A762-4E6A-BBAB-8D9C0EA8A095 +ms.prod: vs-devops-phase-rollout-with-rings +ms.technology: vs-devops-articles +ms.manager: willys +ms.date: 05/22/2017 +ms.author: willys +author: josh garverick +--- + +# Phase the roll-out of your application through rings + +In today's fast-paced, feature-driven markets, it is imperative to be able to deliver value and receive feedback on features quickly and continuously. Partnering with end-users to get early versions of features vetted out is extremely valuable. + +Are you planning to build and deploy Visual Studio Team Services (VSTS) extensions to production? You probably have a few questions, such as: +- How do you embrace DevOps to deliver changes and value faster? +- How do you mitigate the risk of deploying to production? +- How do you automate the build and deployment? + +This topic aims to answer this and share our implementation of tiers, or rings, within our production infrastructure for DevLabs extensions. For an insight into the guidelines we follow in Microsoft, please read [Configuring your release pipelines for safe deployments](https://blogs.msdn.microsoft.com/visualstudioalm/2017/04/24/configuring-your-release-pipelines-for-safe-deployments/). + +## One or more rings to rule your deployments + +Deployment rings are one of DevOps practices used to limit impact on end-users, while gradually deploying and validating change in production. The impact, sometimes called the "blast radius", is typically be evaluated through observation, testing, diagnosis of telemetry, and most importantly, user feedback. + +## Considerations + +Before you convert your deployment infrastructure to a ringed deployment model, it's important to consider the following: +- Who are your primary types of users? For example early adopters and users. +- What's your application topology? +- What's the value of embracing ringed deployment model? +- What's the cost to convert your current infrastructure to a ringed deployment model? + +## User types + +Our users fall into three general buckets in production: + +- **Canaries** who voluntarily test bleeding edge features as soon as they are available. +- **Early adopters** who voluntarily preview releases, considered more refined than the canary bits. +- **Users** who consume our products, after passing through canaries and early adopters. + +![User Rings](./_img/phase-rollout-with-rings/phase-rollout-with-rings-rings.png) + +> [!NOTE] +> It’s important to weigh out which users in your value chain are best suited for each of these buckets. Communicating the opportunity to provide feedback, as well as the risk levels at each tier, is critical to setting expectations and ensuring success. + +## Application topology + +Next you need to map the topology of your application to the ringed deployment model. Remember, we want to limit the impact of change on end-users and to continuously deliver value. Value includes both the value delivered to the end-user and the value (return-on-investment) of converting your existing infrastructure. + +> [!NOTE] +> The ringed deployment model is not a silver bullet! +> Start small, prototype, and continuously compare impact, value, and cost. + +At the application level, the composition of our extensions is innocuous, easy to digest, scale, and deploy independently. Each extension has one of more web and script files, interfaces with Core client, REST client, and REST APIs, and persists state in cache or resilient storage. + +![Application Layer Roll-out](./_img/phase-rollout-with-rings/phase-rollout-with-rings-app-layer.png) + +At the infrastructure level, the extensions are published to the [Visual Studio marketplace](https://marketplace.visualstudio.com). Once installed in VSTS accounts, they are hosted by the VSTS web application, with state persisted to Azure storage and/or the extension [data storage](/vsts/extend/develop/data-storage). + +![Infrastructure Layer Roll-out](./_img/phase-rollout-with-rings/phase-rollout-with-rings-inf-layer.png) + +The extension topology is perfectly suited for the ring deployment model and we publish a version of each extension for each deployment ring: +- A private **DEV**elopment version for your canary ring +- A private **BETA** version for the early adopter ring +- A public **PROD**uction version for the public production ring + +> [!TIP] +> By publishing your extension as private, you're effectively limiting and controlling their exposure for users you explicitly invite. + +## Moving changes through our ring-based deployment process + +Let's observe how a change triggers and moves through our ring based deployment process we're using for all our extension projects, using the [VSTS Developer Tools Build Tasks](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vsts-developer-tools-build-tasks) extension. + +> **VSTS Developer Tools Build Tasks** extension is our secret sauce, used to package and publish Team Services extensions to the Visual Studio Marketplace. + +![Extension rings](./_img/phase-rollout-with-rings/phase-rollout-with-rings-pipeline.png) + +1. A developer from the [Countdown Widget extension](hhttps://marketplace.visualstudio.com/items?itemName=ms-devlabs.CountdownWidget) project commits a change to the [GitHub](https://github.com/ALM-Rangers/Countdown-Widget-Extension) repository. + +2. The commit triggers a continuous integration build. +3. The new build triggers a continuous deployment trigger, which automatically starts the **Canaries** environment deployment. +4. The **Canaries** deployment publishes a private extension to the marketplace and shares it with predefined VSTS accounts. At this point only the **Canaries** are impacted by the change. +5. The **Canaries** deployment triggers the **Early Adopter** environment deployment. This time we have a pre-deployment approval gate, which requires any one of the authorized users to approve the release. + + ![Pre-deployment approval for Early Adopter environment](./_img/phase-rollout-with-rings/phase-rollout-with-rings-early-approval.png) + +6. The **Early Adopter** deployment publishes a private extension to the marketplace and shares it with predefined VSTS accounts. At this point both the **Canaries** and **Early Adopter** are impacted by the change. +7. The **Early Adopter** deployment triggers the **Users** environment deployment. This time we have a stricter pre-deployment approval gate, which requires all of the authorized users to approve the release. + + ![Pre-deployment approval for User environment](./_img/phase-rollout-with-rings/phase-rollout-with-rings-users-approval.png) + +8. The **Users** deployment publishes a public extension to the marketplace. At this stage, everyone who has installed the extension in their VSTS account is affected by the change. +9. It's key to realize that the impact ("blast radius") increases as your change moves through the rings. Exposing the change to the **Canaries** and the **Early Adopters**, is giving us two opportunities to validate the change and hotfix critical bugs before we release to production. + +> [!NOTE] +> Review [CI/CD Pipelines](https://aka.ms/cicdpipelines) and [Approvals](/vsts/build-release/concepts/definitions/release/environments#approvals) for detailed documentation of our pipelines and the approval features for release management. + +## Dealing with monitoring and noise + +To detect and mitigate issues, learn from tracking usage, "test in production", determine cost and value, you need **effective** monitoring. Determine what type data is important, for example infrastructure issues, violations, and feature usage. Avoid noisy alerts which get ignored, or drown out alerts for higher priority issues. + +> [!TIP] +> Start with high-level views of your data, visual dashboards that you can watch from afar, and drill-down as needed. Perform, regular housekeeping of your views and remove all noise. A visual dashboard tells a far better story than hundreds of notification emails, often filtered and forgotten by email rules. + +Here are a few examples of visual dashboards we use to "spot" the anomalies, the unexpected, and the overall health of our pipelines within the ring deployment model. + +Using the [Team Project Health](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.TeamProjectHealth) and out-of-the-box extensions extension we have an overview of our pipeline builds and releases, as well as lead and cycle time trends. It's evident that we have 33 successful builds, 1 failed build, 12 successful releases, and 12 releases in progress. + +![High-level dashboard on VSTS](./_img/phase-rollout-with-rings/phase-rollout-with-rings-dash.png) + +Another dashboard gives us a visual view of all the release. The visual indicators and colours allow us to glance at these dashboards from afar. In fact, we only react if we see the **X** counters increment or parts of the dashboard turning **red**. + +![Release dashboard on VSTS](./_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-release.png) + +If you're looking for more detail you can use the build overview. We have a healthy code coverage, happy tests, and the BETA ring deployment is in progress. + +![Build Overview on VSTS](./_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-build.png) + +You're able to continue the drill-down from visual cue to detailed telemetry. Using Application Insights you can drill into live metrics, smart detection, and usage telemetry. + +![AI metrics on VSTS](./_img/phase-rollout-with-rings/phase-rollout-with-rings-dash-ai.png) + +## What's the value? + +The return on investment and ongoing value we get from the ring deployment model is astounding, especially considering our challenging environment. Our engineers are all part-time volunteers, geographically distributed around the globe, with limited bandwidth, and constantly challenged with a variety of time zones injecting latency into our process. + +Here's a summary of how our engineering process has evolved since we have introduced ring deployment models. + +![High-level deashboard on VSTS](./_img/phase-rollout-with-rings/phase-rollout-with-rings-value.png) + +We achieved consistent and reliable automation, we reduced all response times, we removed all error prone manual intervention, and our users are happy. Here's a recent example response from the marketplace that sums it all up" "*Development team is quick to respond to bug fixes!*". + +## Is there a dependency on feature flags? + +No, rings and feature flags are symbiotic. Feature flags give you fine-grained control of features included in your change. For example, if you're not fully confident about a feature you can use feature flags to **hide** the feature in one or all of the deployment rings. For example, you could enable all features in the canaries ring, and fine-tune a subset for the early adopters and production users, as shown. + +![Feature flags](./_img/phase-rollout-with-rings/phase-rollout-with-rings-feature-flags.png) + +[LaunchDarkly](https://launchdarkly.com/microsoft/) provides an extension for VSTS & Team Foundation Server. It integrates with VSTS RM and gives you "run-time" control of features deployed with your ring deployment process. + +## Conclusion + +Now that you've covered the concepts and considerations of rings, and our implementation of rings, you should be confident to explore ways to improve your CI/CD pipelines. While the use of rings adds a level of complexity, having a game plan to address feature management and rapid customer feedback is invaluable. + +## Q&A + +### How do we know that a change can be deployed to the next ring? + +Your goal should be to have a consistent checklist for the users approving a release. See [aka.ms/vsarDoD](https://aka.ms/vsarDoD) for an example definition of done checklist. + +### How long do we wait before we push a change to the next ring? + +There is no fixed duration or "cool off" period. It depends on how long it takes for you to complete all release validations successfully. In our environment changes are automatically delivered to the **Canaries** and as quickly as possible to the **Early Adopters**. Our objective is to gather telemetry and feedback from **Canaries** and **Early Adopters**, working in different and geographically distributed environments as quickly as possible. + +### How do you manage a hotfix? + +The ring deployment model allows you to process a hotfix like any other change. The sooner an issue is caught, the sooner a hotfix can be deployed, with no impact to downstream rings. + +### How do we deal with variables that span (shared) release environments? + +Refer to [Variables in Release Management](/vsts/build-release/concepts/definitions/release/variables). + +### How can we manage secrets used by the pipeline? + +Refer to [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) to safeguard cryptographic keys and other secrets used by your pipelines. + +##Reference information +- [Configuring your release pipelines for safe deployments](https://blogs.msdn.microsoft.com/visualstudioalm/2017/04/24/configuring-your-release-pipelines-for-safe-deployments/) +- [CI/CD pipeline examples](https://blogs.msdn.microsoft.com/visualstudioalmrangers/tag/cicd-pipeline/) + +> Authors: Josh Garverick, Willy Schaub | Find the origin of this article and connect with the ALM Rangers [here](https://github.com/ALM-Rangers/Guidance/blob/master/README.md) + +*(c) 2017 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* diff --git a/docs/articles/remove-binaries.md b/docs/articles/remove-binaries.md new file mode 100644 index 00000000000..23df10aa1e7 --- /dev/null +++ b/docs/articles/remove-binaries.md @@ -0,0 +1,163 @@ +--- +title: Remove large binaries from your Git history +description: Remove large binaries from your existing Git repo +ms.assetid: ea4cadcc-c8c7-4f05-adc3-9a3ba07a2bd6 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: willys +ms.date: 06/01/2016 +ms.author: edwardf +author: edwardf +--- + +# Remove large binaries from your Git repo + +Git has gained a lot of popularity in recent years as a distributed source code repository that lets users work with the full repository while in a disconnected state. The benefits of git are well-documented, but what happens if you need to "roll back the clock" on the primary repository? Doing so is not quite so intuitive and requires elevated permissions, as you might expect for something that affects every single user of the repository. + +So how can you roll back the central repository safely? + +## Problem Scenario + +Imagine that you commit a large file, such as a video, to your git server. In a traditional source code system, it is convenient to store everything in one place and then pull down what you need. However, with git, the entire repository is cloned down to each user's local computer. With a large file, every single user on the project will need to download the large file(s), too. With each subsequent large file committed to the server, the problem only grows, until the repository is simply too large to be efficient for its users. To make matters worse, even if you remove the offender from your local repository and re-commit, the file will still exist in the repository's history, which means that it will still be downloaded to everyone's local computer as part of the history. + +> ![](./_img/remove-binaries/RemoveBinaries-large-file-to-be-added.png) + +*Adding large file to the local repository* + +> ![](./_img/remove-binaries/RemoveBinaries-diagram-local-after-large-file-added.png) + +*After committing from the local repository, the server will also have the large file* + +## Freeze the repo + +> [!IMPORTANT] +> The following steps will remove the video from your branch history, +> but the file remains in your repo history when you clone your repo from Team Services. Removing the files from your branch history prevents the files from being updated, which will +> create another version of the large file in your repo. Learn more about [managing large files in Git](../git/manage-large-files.md) and +> see this [blog post](https://blogs.msdn.microsoft.com/congyiw/2015/12/14/why-does-cloning-from-vsts-return-old-unreferenced-objects/) for a detailed explanation and workaround for this behavior +> when using VSTS Git repos. + +To fix this, you have to start at the source, which, in this case, is the server repository. Ask the team to stop pushing to the repository, but be aware that if additional pushes happen during this process, you will have to account for them, too, so as not to lose any data. + +## Rebase and force push +If no one else on the team has made any changes to the repository - usually through a push - you can take the easy route, in which you essentially make your local repository look the way that you want it to (i.e. without the large file), then force your changes to the server. + +__Please note: You may need to clone or fix your local repo before beginning this work. This could result in lost work or changes, so proceed with caution.__ + +By default, you likely only have the ability to change their local project files and repository and to push your changes to the server, so you do not have the ability to make other changes, such as deletions or rebasing, at the server level. Therefore, you will need to either acquire project Force push (preferred) or admin permissions from your administrator or find someone who has them and is willing to help. For more information on git permissions, go [here](../security/set-git-tfvc-repository-permissions.md). + +> ![](./_img/remove-binaries/RemoveBinaries-force-push-permissions.png) + +Next, you need to rebase the repository. + +1) But first, use `git log` to find the SHA hash values of the most recent commits - you will need this information in a moment. This is because we need to know the most recent good commit. You get that information by opening a git command prompt and typing: + +> `git log` + +Alternatively, you can get the SHA hash from viewing the branch history in the Visual Studio Team Explorer. +> ![](./_img/remove-binaries/RemoveBinaries-view-history-for-sha.png) + +2) Now, open a Git command prompt. + +> ![](./_img/remove-binaries/RemoveBinaries-open-command-prompt.png) + +3) Find SHA hash number of interest. + +> ![](./_img/remove-binaries/RemoveBinaries-large-file-sha.png) + +4) You will need the sha that starts "25b4" + +Remember that git uses pointers to determine where in the repository the head or current branch are located. Because of this, the repository state that you are interested in will be at some point in the past. To 'go back in time' and make that prior desired state the new current state, you will need to use the git rebase command: + +> `git rebase -i ` + +> ![](./_img/remove-binaries/RemoveBinaries-diagram-local-repo-rebase.png) + +The `-i` switch provides a little extra safety, because it will bring up the history in an editor (My implementation of git on the command line in Windows brings up the classic *vi* editor, which you may remember if you've worked with a Unix-based system.) + +5) For our example, you would enter: + +> `git rebase -i 25b4` + +6) Once the editor comes up, remove all of the 'pick' lines except for the branch you want to keep as your new head. When everything looks as you want it, in *vi*, type ":w\" to save or "!q\" to exit without saving. + +> ![](./_img/remove-binaries/RemoveBinaries-pick-in-vi-editor.png) + +*You will be changing the line(s) that you no longer want* + +> ![](./_img/remove-binaries/RemoveBinaries-drop-in-vi-editor.png) + +7) Change "`pick`" to "`drop`" as shown, then type "`:w`" (in vi) to save and "`:q!`" to start the rebase + +Now type `git log` again - the offending branch should be absent from the log. If it is, you are ready for the final step, which requires project admin permissions. + +> `git log` + +> ![](./_img/remove-binaries/RemoveBinaries-repo-after-rebase.png) + +*Notice that the commit for the large video is now gone from the local repo* + +8) Type: +`git push --force` + +> ![](./_img/remove-binaries/RemoveBinaries-force-push-command.png) + + +> ![](./_img/remove-binaries/RemoveBinaries-force-push.png) + +This command will force your repository to overwrite the repository on the server. + +__Use with caution, as you can easily lose data on the server!!__ + +> ![](./_img/remove-binaries/RemoveBinaries-diagram-force-push.png) + +*Notice that you must authenticate to the server for this to work* + +If you are using Visual Studio Team Services, you may need to set up an alternate credential that doesn't use special characters (such as the "@" in an email address). To do this, follow the instructions [here](https://www.visualstudio.com/get-started/code/share-your-code-in-git-eclipse#pat). + +Now, the branch will be permanently gone from the server, and subsequent clones and syncs by project team members will not download the large files we were trying to remove. Users will need to pull down from the server in order to make sure that they are in sync with the new server repo state. + +## If Users Have Newer Commits + +If other users have already committed to the server repository, you have an additional consideration. You want to remove the branch that contains the large file(s), but you don't want to lose changes the team has made. To address this, when you open the editor as part of rebasing, look carefully at the commits. Make sure that those you want to retain are listed on the 'pick' lines; delete the ones you want to remove, such as where a large file was added. + +Note that after rebasing, the other users on the team will also need to rebase so that everyone has a consistent copy of the server repository. This is a pain for everyone and normally should be avoided. Thus, if you do need to remove a push as noted here, it is important to coordinate with the team. For full details on rebasing, take a look at the official rebasing documentation [here](https://www.git-scm.com/book/en/v2/Git-Branching-Rebasing). + +The key is to make sure that you know which commits are desired and undesired. Study the git log or the history in your IDE (such as Visual Studio) and make a meticulous note of the SHA hashes to keep and those to toss. + +In scenarios where the large file has been around for a while and there have been subsequent branches and merges, you may be able to remove the file by using the `git filter-branch` switch. If you want to give this a try, follow the instructions [here](https://help.github.com/articles/remove-sensitive-data/). + +## Best Practice Considerations + +Of course, it saves a lot of work to make sure that large files stay out of the main repository in the first place. With that in mind, here are some common sense best practices for the team to keep in mind: + +> Do's + + +- Do commit changes frequently. You can always fix them up later with a squash or rebase. +- Do use branches to isolate your changes. Branches are cheap and private, and merging is simple. You can also backup changes on a branch by pushing it to the server. +- Do use a naming convention when publishing topic branches. Name the branch "`users//`". This will help group your branches and make it easy for others to identify the "owner". +- Do remember to push your changes. `Commit != Checkin`. `(Commit + Push) == Checkin`. +- Do consider using `.gitignore` for large binaries so that they aren't added to the repo in the first place - more information [here](https://help.github.com/articles/ignoring-files/). +- Do consider using Nuget or TFS version control to store your large binaries. + +> Don'ts + + +- Don't rebase after pushing. Rebasing pushed commmits in git can be really bad because it forces everyone else in the repo to rebase their local changes - and they won't be happy if they need to do this. Of course, rebasing pushed commits on your own personal branch, even if pushed, isn't a big deal unless other people are pulling those commits. +- Don't commit binaries to your repo. Git doesn't compress binary files the way that TFVC does, and because all repos have all of the history, committing binary files means permanent bloat. + +## Summary + +Sometimes, undesirable elements, such as very large files, are added to a repository and need to be removed in order to keep the repository clean and lightweight. You can do this by getting your local repository in order using the `git rebase` command, then using the `git push --force` command to overwrite the server repository with your local repository. + +> Authors: Edward Fry and Jesse Houwing + +*(c) 2015 Microsoft Corporation. All rights reserved.ÿThis document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* \ No newline at end of file diff --git a/docs/articles/team-services-security-whitepaper.md b/docs/articles/team-services-security-whitepaper.md new file mode 100644 index 00000000000..67a72f65c8e --- /dev/null +++ b/docs/articles/team-services-security-whitepaper.md @@ -0,0 +1,578 @@ +--- +title: VSTS - Data Protection +description: Learn how Microsoft protects your Visual Studio Team Services (VSTS) projects and data. Microsoft is committed to making sure that your VSTS projects stay safe and secure, without exception. +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.author: mlearned +ms.date: 09/08/2017 +--- + + +# Data Protection Overview + +**VSTS** + +Microsoft Visual Studio Team Services (VSTS) is a cloud-hosted application for +your development projects, from planning through deployment. Based on +the capabilities of Team Foundation Server, with additional cloud +services, VSTS manages your source code, work items, builds, tests, and +much more. VSTS uses Microsoft Azure's Platform as a Service +infrastructure and many of Azure's services, including Azure SQL +databases, to deliver a reliable, globally available service for your +development projects. Because important data is at stake, this white +paper discusses the steps that Microsoft takes to keep your VSTS projects +safe, available, secure, and private. In addition, it describes the role +you play in keeping your VSTS projects safe and secure. + +This white paper is part of our effort to illuminate how we manage and +protect your data and is intended for account administrators and IT +professionals who manage their project assets on a daily basis. It will +be most useful to individuals who are already familiar with VSTS and want +to know more about how Microsoft protects the assets that are stored in +VSTS. + +## Our commitment + +Microsoft is committed to ensuring that your VSTS projects remain safe +and secure, without exception. When stored in VSTS, your projects benefit +from multiple layers of security and governance technologies, +operational practices, and compliance policies. We enforce data privacy +and integrity both at rest and in transit. + +As we look at the broader landscape of threats facing VSTS customers, +they boil down to four basic categories: data availability, service +availability, service security, and data privacy. We will investigate +each of these categories to explore specific threats and explain what +VSTS does to address them through both the technology that we use and the +way we put it into practice. However, we will first describe how data is +stored and how VSTS manages access to your data. + +Because proper data protection also requires active engagement of +customer administrators and users, we also discuss steps you should take +to protect your project assets from unauthorized disclosure and +tampering. Much of this has to do with being explicit about granting +permissions to user access points in order to have confidence that only +the right people are accessing data within your VSTS. + +Regardless of your approach, you should consider all data potentially +"at risk" no matter where it is or how it is being used; this is true +for both data in the cloud as well as data stored in a private +datacenter. Thus, it is important to classify your data, its sensitivity +/ risk horizon, and the damage it could do if it is compromised. You +should also categorize your data relative to an overall information +security management policy. + +## Built on Microsoft Azure + +![VSTS high-level architecture diagram ](./_img/team-services-security-whitepaper/Figure1_VSOArchitecture.png) + +VSTS is hosted entirely in Microsoft Azure datacenters and uses many of the +core Azure services including Compute, Storage, Networking, SQL Database, +Identity and Access Management Services, and Service Bus. This lets us +focus on the unique aspects of running VSTS while taking advantage +of the state of the art capabilities, protection, and industry certifications +available from the Azure platform. + +VSTS uses Azure Storage as the primary repository for service metadata +and customer data. Depending on the type of data and the storage and +retrieval needs, we use Azure Blob (binary large objects) storage and +Azure SQL data storage. To provide a seamless experience, we work hard +to abstract these details from the end user. However, to discuss the +details surrounding VSTS approach to data protection, some background +in these elements is important. + +**Azure Blob storage** is generally used to store large chunks of +unstructured data. All VSTS projects use the Azure Blob storage service. +This data includes potentially sensitive or private information such as +the contents of source files and the attachments on work items. For most +VSTS projects, the majority of storage in use is this type of +unstructured blob storage. For more information, see documentation on +[Azure Blob Storage](https://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/). + +**Azure SQL database storage** is used to store the structured and +transactional aspects of your account, including project metadata, the +versioned source control history, and work item details. Database +storage gives you fast access to the important elements of your project +and provides indexes into the blob storage to look up files and +attachments. For more information, see documentation on +[Azure SQL Database](https://azure.microsoft.com/en-us/documentation/services/sql-database/). + +Administrators can manage access to resources by granting or restricting +permissions on user identities or groups. VSTS uses federated +authentication of user identities via Azure Active Directory (AAD) and +Microsoft Account (MSA, formerly LiveID). During authentication, the +user is routed to the authentication provider (AAD or MSA) where they +provide their credentials. Once the authentication provider has verified +the user's credentials, VSTS issues an authentication cookie to the user, +which allows them to remain authenticated against VSTS. In this way, the +user's credential information is never shared directly with VSTS. For +each VSTS resource the user attempts to access, permissions are validated +based on the user's explicit permissions as well as permissions +inherited through group membership. Administrators can leverage access +controls to protect access to account, team project collection, team +project, and team scoped data and functionality, as well as to more +specific assets like version control folders and work item area paths. + +## Data availability + +VSTS leverages many of the Microsoft Azure storage +features to ensure data availability in the case of hardware failure, +service disruption, or data center disasters. Additionally, the VSTS team +has procedures to protect data from accidental or malicious deletion. + +### Data redundancy + +To protect data in the case of hardware or service failures, Microsoft +Azure storage typically geo-replicates customer data between two locations within +the same region that are hundreds of miles apart; for instance, between +North and West Europe or between North and South United States*. For +Azure blobs, customer data is replicated three times within a single +data center and is replicated asynchronously to a second data center +hundreds of miles away. As such, Azure maintains the equivalent of six +copies of your data at all times. This enables us to failover to a +separate data center in the case of a major outage or disaster while +also providing local redundancy for hardware failures within a data +center. For Azure SQL database storage, daily backups are maintained +offsite in the case of data center disasters. + +* Because there is only one region in Brazil, customer data in Brazil is replicated +to South Central US for disaster recovery purposes. + +### Mistakes happen + +To protect against accidental deletion of data either by our customers +or by our operation team, we also take point-in-time backups of both the +Azure blob and the SQL databases. Our approach to these backups varies +based on the storage type. For blobs, we have a separate copy of all +blobs and regularly append new changes to each storage account. Since +this data is immutable, we don't need to rewrite any existing storage +as part of our backup procedures. SQL Azure on the other hand handles +backups as a standard part of their service which we rely on. In both +cases, these backups are also replicated in a paired data center to ensure +we can recover from a data center outage. + +In addition, we perform a "soft delete" for account deletion operations. +This lets us recover entire accounts for up to 90 days after deletion. + +### Practice is critical + +Having multiple, redundant backups of your data is good but without +practice, restoring can be unpredictable. It's been said that +"backups never fail, it's the restores that do". While technically +incorrect, the sentiment is right. The good news is that we regularly +practice restoring various data sets from backup. The geo-redundant +storage that we get from Azure is tested regularly. In addition, from +time to time we restore from backups to recover from human error, +such as when a customer has inadvertently deleted a VSTS team project. While our turnaround time sometimes takes more than day, we have always +been able to restore the customer’s data given enough time. Since +there are many permutations of disaster and data corruption +scenarios, we continue to plan and execute new tests on a regular basis +to ensure our systems and associated process are up to the challenge. + +## Service availability + +Ensuring that VSTS is available for you to access your account and +associated assets is of utmost importance to us. + +### DDoS protections + +In some cases, a malicious distributed denial-of-service (DDoS) attack +can affect service availability. Azure has a DDoS defense system that +helps prevent attacks against our service. It uses standard detection +and mitigation techniques such as SYN cookies, rate limiting and +connection limits. The system is designed not only to withstand attacks +from the outside but also from within Azure. For application-specific +attacks that are able to penetrate the Azure defense systems, VSTS +establishes application and account level quotas and throttling to +prevent any overuse of key service resources during an attack or +accidental misuse of resources. + +### Live site response + +While we strive for the service to be available 100% of the time, +sometimes things happen that prevent us from meeting that goal. When +that happens, we provide transparency to our users throughout the +incident. Our 24x7 operations team is always on hand to rapidly identify +the issue and to engage the necessary development team resources. Those +resources then address the problem. They also aim to update the service +status page and blog within minutes of detecting an issue that affects +the service. Once the team has addressed an issue, our "live-site +incident" process continues as we identify the root cause of the issue +and track the necessary changes to ensure we prevent similar issues in +the future. + +VSTS live-site management processes are crafted to ensure a deep focus +on service health and customer experience. Our processes minimize our +time to detect, respond to, and mitigate impacting issues. Ownership for +Live-site is shared across all engineering disciplines, so there are +continual improvements that evolve out of direct experience. This means +that monitoring, diagnostics, resiliency, and quality assurance process +are improved over time. Live-site management in VSTS is broken into three +distinct tracks as shown here: + +![VSTS live-site management process](./_img/team-services-security-whitepaper/Figure2_VSOSiteManagementProcess.png) + +The operations team also monitors the availability metrics for +individual accounts. These metrics provide insights into specific +conditions that might affect only some of our customers. Investigations +into this data can often result in targeted improvements to address +customer-specific issues. In some cases, we will even contact the +customer directly to understand their experience and work with them to +improve the service from their vantage point. + +We understand that availability of our service is an integral part of +your team's success. Because of this, we publish a service level +agreement (SLA) and provide a financial guarantee to ensure we meet this +agreement each month. For more specifics on our SLA and financial +guarantees, please see +[VSTS SLAs](https://azure.microsoft.com/support/legal/sla/visual-studio-team-services/v1_2/). + +Of course, sometimes our partner teams or dependencies have incidents +that affect VSTS. All our partner teams follow similar approaches to +identifying, resolving and learning from these service outages. + +## Service security + +Ensuring a secure service requires constant vigilance, from proper +design and coding techniques, all the way through to the way we operate +the service. Along those lines, we actively invest in the prevention of +security holes and in breach detection. In the event of a breach, we use +security response plans to minimize data leakage, loss or corruption. + +### Secure by design + +To implement industry best practices and stay on the forefront of +information security, we engage various teams within Microsoft including +Azure, Global Foundation Services (GFS), and Trustworthy Computing. +Microsoft's Security Development Lifecycle (SDL) is at the core of our +development process and Microsoft's Operational Security Assurance (OSA) +program guides our cloud operation procedures. The SDL and OSA +methodologies address security threats throughout the development +process and operation of VSTS. They specify requirements that +include threat modeling during service design, following design and code +best practices, verifying security with standard tooling and testing, +limiting access to operational and customer data, and gating rollout of +new features through a rigid approval process. + +Because the security landscape is continually changing, it is important +for our team to keep current with the latest in best practices. Towards +that end, we have annual training requirements for all engineers and +operations personnel working on VSTS. In addition, we sponsor informal +"brownbag" meetings. These meetings are hosted by our own engineers. +After they've solved an issue, they share what they've learned with the +rest of the team. + +A cloud service is only as secure as the host platform. VSTS uses Azure's +Platform as a Service (PaaS) offering for much of our infrastructure. +PaaS automatically provides regular updates for known security +vulnerabilities. When we host virtual machines in Azure using their +Infrastructure as a Service (IaaS) offering-such as for our hosted build +service-we regularly update those images to include the latest security +patches available from Windows Update. The same update rigor applies for +our on-premises machines, including those used for deployment, +monitoring, and reporting. + +Our team conducts regular security-focused penetration testing of VSTS. +Using the same techniques and mechanisms as real malicious attackers, +penetration testing tries to exploit the live production services and +infrastructure of VSTS. The goal is to identify real-world vulnerabilities, +configurations errors or other security gaps in a controlled process. +The team reviews the results to identify other areas of improvement and +to increase the quality of the preventative systems and training. + +### Restricting access + +We maintain strict control over who has access to our production +environment and customer data. Access is only granted at the level of +least privilege required and only after proper justifications are +provided and verified. If a team member needs access to resolve an +urgent issue or deploy a configuration change, they must apply for "just +in time" access to the production service. Access is revoked as soon as +the situation is resolved. Access requests and approvals are tracked and +monitored in a separate system. All access to the system is correlated +against these approvals and if unapproved access is detected, an alert +is raised for the operations team to investigate. + +If the username and password for one of our developers or operation +staff were ever stolen, data is still protected because we use +two-factor authentication for all remote system access. This means that +additional authentication checks via smart card or phone call to a +pre-approved number must take place before any remote access to the +service is permitted. + +In addition, secrets that we use to manage and maintain the service, +such as RDP passwords, SSL certificates and encryption keys are managed, +stored, and transmitted securely through the Azure Management Portal. +Any access to these secrets requires specific permission, which is +logged and recorded in a secure manner. All secrets are rotated on a +regular cadence and can be rotated on-demand in the case of a security +event. + +The VSTS operations team uses hardened administrator workstations to +manage the service. These machines run a minimal number of applications +and operate in a logically segmented environment. Operations team +members must provide specific credentials with two-factor authentication +to access the workstations and all access is monitored and securely +logged. To isolate the service from outside tampering, applications such +as Outlook and Office, which are often targets of spear-phishing and +other types of attacks, are not permitted in this environment. + +### Intrusion protection & response + +To ensure data is not intercepted or modified while in transit between +you and VSTS, we encrypt via HTTPS / SSL. In addition, +Azure encrypts all connections to Azure Storage and SQL databases to protect +the integrity of the data. VSTS also enables Transparent Data Encryption +(TDE) on SQL Databases to protect against the threat of malicious activity +by performing real-time encryption of the database, +associated backups, and transaction log files at rest. + + +To ensure that activities within the service are legitimate as well as +to detect breaches or attempted breaches, we leverage Azure's +infrastructure to log and monitor key aspects of the service. In +addition, all deployment and administrator activities are securely +logged, as is operator access to production storage. Real-time alerts +are raised because the log information is automatically analyzed to +uncover potentially malicious or unauthorized behavior. + +In the case where a possible intrusion has been detected or high +priority security vulnerability has been identified, we have a clear +security incident response plan. This plan outlines responsible parties, +steps required to secure customer data, and how to engage with security +experts in Microsoft Security Response Center (MSRC), Global Foundation +Services (GFS), Azure and members of the VSTS leadership team. We will +also notify any account owners if we believe their data was disclosed or +corrupted so that they can take appropriate steps to remedy the +situation. + +Finally, to help combat emerging threats, we employ an Assume Breach +strategy. A highly specialized group of security experts within +Microsoft, known as the Red Team, assumes the role of sophisticated +adversaries. This team tests our breach detection and response, enabling +us to accurately measure our readiness and the impacts of real-world +attacks. This strategy strengthens threat detection, response, and +defense of the service. It also allows us to validate and improve the +effectiveness of our entire security program. + +## Data privacy + +We want you to have confidence that your data is being handled +appropriately and for legitimate uses. Part of that assurance involves +appropriately restricting usage so that your data is used only for +legitimate reasons. + +### Law enforcement access + +In some cases, third parties such as law enforcement entities may +approach us to obtain access to customer data stored within VSTS. +By policy, we will attempt to redirect the requests to the account owner +for resolution. When we are compelled by court order to disclose +customer data to a third party, we will make a reasonable effort to +notify the account owner in advance unless we are legally prohibited +from doing so. + +Some customers require that their data be stored in a particular +geographic location to ensure a specific legal jurisdiction for any law +enforcement activities. At this time, VSTS can host accounts in data +centers in either the United States or the European Union regions. All +customer data such as source code, work items, and test results as well +as the geo-redundant mirrors and offsite backups are maintained within +the selected region. + +### Microsoft access + +From time to time, Microsoft employees need to obtain access to customer +data stored within VSTS. As a precaution, all employees who have or may +ever have access to customer data must pass a background check, which +verifies previous employment and criminal convictions. In addition, we +permit access to the production systems only when there's a live site +incident or other approved maintenance activity, which is logged and +monitored. + +Since not all data within our system is treated the same, data is +classified to distinguish between customer data (what you upload to +VSTS), account data (information used when signing up for or +administering your account) and Microsoft data (information required for +or collected through the operation of the service). Based on the +classification we control usage scenarios, geolocation requirements, +access restrictions and retention requirements. + +### Microsoft promotional use + +From time to time, we want to contact customers to let them know about +additional features and services that might be useful to them. Since not +all customers want to be contacted about these offers, we allow you to +opt-in and opt-out of marketing email communications. We never use +customer data to target specific offers for specific users or accounts. +Instead, we leverage account data and aggregate usage statistics at the +VSTS account level to determine groups of accounts that should receive +specific offers. + +## Building confidence + +In addition to these protections, we have also taken steps outside of +the service itself to help you decide to move forward with VSTS. +These include Microsoft's own internal adoption policies, the level of +transparency that we provide into the state of our service, and our +progress towards receiving certification of our information security +management systems. All of these efforts are designed to build your +confidence in VSTS. + +## Internal adoption + +Teams across Microsoft have begun adopting VSTS internally. +The VSTS team moved into a VSTS account in 2014 and +uses it extensively. More broadly, +we have established guidelines to enable the adoption plans for other +teams. Obviously large teams move more gradually than smaller ones, +given their investments in existing devops +systems. For teams able to move quickly, we have established a +project classification approach. It assesses our risk tolerance, based +on project characteristics, to determine if the project is appropriate +for VSTS. For larger teams, the adoption typically occurs +in phases with more planning. Additional requirements for internal +projects include associating the account with the Microsoft.com Azure +Active Directory to ensure proper user identity lifecycle and password +complexity along with requiring the use of two-factor authentication +for more sensitive projects. + +### Transparency + +We are convinced that transparency around how we design and operate our +service is critical to establishing trust with our customers. This white +paper is part of our effort to shed light on how we manage and protect +your data. In addition, we maintain a +[blog](https://blogs.msdn.com/b/vsoservice/) that provides real time +updates whenever a service disruption, planned or unplanned, takes place +so you can adjust your activities as needed. Furthermore, Brian Harry, +the corporate vice-president in charge of VSTS, maintains a very active +[blog](https://blogs.msdn.com/b/bharry/) addressing, among other things, +lessons learned by operating the service. + +### Certification + +Finally, for some customers, it is important to understand third-party +evaluation of our data security procedures. Towards that end, we have +achieved ISO 27001:2013, HIPAA (Health Insurance Portability and Accountability Act) + BAA (Business Associate Agreeement), EU Model Clauses, SOC 1 Type 2 and SOC 2 Type 2 certifications. +The SOC audit for VSTS covers controls for data security, availability, +processing integrity, and confidentiality. In general, the availability of SOC 1, +SOC 2 reports and other audit material is restricted to customers who have signed +non-disclosure agreements with Microsoft. The audit materials are available upon request. + + +## Steps you can take + +Proper data protection requires active engagement of customer +administrators and users. Your project data stored within VSTS is only as +secure as the end user access points. So it is important to match the +level of permission strictness and granularity for those accounts with +the level of sensitivity of your project. + +### Classify your data + +The first step is to classify your data based on its sensitivity / risk +horizon, and the damage it could do if it is compromised. Many +enterprises have existing classification methods that can be reused when +projects move to VSTS. Refer to these +[materials](https://download.microsoft.com/download/0/A/3/0A3BE969-85C5-4DD2-83B6-366AA71D1FE3/Data-Classification-for-Cloud-Readiness.pdf) +for more information on how to classify your data. + +### Adopt Azure Active Directory + +Another action you can take to improve the security of your end users' +credentials is to use Azure Active Directory (AAD) instead of Microsoft +Accounts (MSA) to manage your organization's access to VSTS. +This allows your IT department to manage its end user access policy including +password complexity, password refreshes and expiration if the user +leaves your organization. Through Active Directory federation, you can +directly link Azure Active Directory to your organization's central +directory so you have only one location to manage these details for your +enterprise. Here is a brief comparison between MSA and AAD +characteristics relative to VSTS access: + +| Properties | MSA | AAD | +| :-------------------------------------|:---------------------------|:-----| +| Identity creator | User | Organization | +| Single user name / password for all work assets | No | Yes | +| Password lifetime & complexity control | User | Organization| +| VSTS account membership limits | Any MAS | Organization's directory +| Traceable identity | No | Yes +| Account & IP ownership | Unclear | Organization +| 2-factor authentication enrollment | User | Organization +| Device-based conditional access | No | Organization + +You can learn more about how to +[configure this support for your VSTS account](../accounts/access-with-azure-ad.md). + +### Require two-factor authentication + +In some cases, you might want to restrict access to your VSTS account +by requiring more than one factor to sign in. AAD lets you require multiple factors, +such as phone authentication in addition to a username and password, for all +authentication requests. You can [learn more](https://docs.microsoft.com/en-us/azure/multi-factor-authentication/) about turning on multifactor authentication for AAD. + +### Use BitLocker + +For sensitive projects, we also recommend use of BitLocker on your +Windows laptop or desktop computer. BitLocker encrypts the entire drive +on which Windows and your data reside, keeping everything safe. Once +BitLocker is enabled, it will automatically encrypt any file you save on +that drive. If your laptop or desktop machine were to fall into the +wrong hands, BitLocker prevents unauthorized access of local copies of +data from your VSTS projects. + +### Limit use of Alternate Authentication Credentials + +The default authentication mechanism for Git related tooling is alternate +authentication (sometimes referred to as Basic Authentication). This mechanism +allows the end user to set up an alternate username and password for use +during Git command line operations. This username and password combination can also be used to +access any other data for which that user has permissions. By its +nature, alternate authentication credentials are less secure than the default federated +authentication. However, we have taken steps to help people make secure +choices. For example, all communication is sent over HTTPS and there +are password complexity requirements. Nevertheless, your organization +should evaluate if additional policies are required to meet your +projects security requirements. You can [learn more](../accounts/change-application-access-policies-vs.md) about disabling alternate +authentication credentials altogether for your account if it doesn't meet your +security requirements. + +### Secure access to your account + +Azure Active Directory (Azure AD) provides the capability for administrators to +control access to Azure resources and applications such as VSTS. With +conditional access control in place, Azure AD checks for the specific conditions +you set for a user to access an application. After access requirements are met, +the user is authenticated and can access the application. Visit the [Microsoft Azure documentation site](https://docs.microsoft.com/azure/active-directory/active-directory-conditional-access) +to learn more about conditional access policy (CAP). One limitation of Azure AD conditional access policy is that it is enforced at the time a user signs in, and therefore access can continue +to be granted even if conditions change which would otherwise conflict with policy. +For example, you may choose to have location conditions applied to limit access to +only within your corporate walls, but after sign-in, the user may pick their laptop +up and walk out the door while still retaining access. In addition, custom VSTS +authentication mechanisms including personal access tokens, alternate authentication, +OAuth and SSH keys are not constrained or checked by conditional access policy. + +## Additional resources + +In addition to this white paper, there are other resources available for +your review and education. These include: + +- [VSTS home page](https://www.visualstudio.com/) +- [VSTS status](https://blogs.msdn.com/b/vsoservice/) +- [Developer Services privacy statement](http://www.visualstudio.com/support/privacy-policy-vs) +- [Developer Services Agreement](http://www.visualstudio.com/support/terms-of-service-vs) +- [Brian Harry's blog](http://blogs.msdn.com/b/bharry/) +- [Azure trust center](http://azure.microsoft.com/support/trust-center/) +- [Microsoft Security Development Lifecycle](http://www.microsoft.com/security/sdl/) + +*(c) 2016 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml new file mode 100644 index 00000000000..d7067c628c3 --- /dev/null +++ b/docs/articles/toc.yml @@ -0,0 +1,40 @@ +- name: VSTS Public Articles + href: index.md +- name: Security + items: + - name: VSTS Data Protection + href: team-services-security-whitepaper.md +- name: High-Fidelity Migration + items: + - name: Overview + href: migration-overview.md + - name: Import + href: migration-import.md + - name: Process Templates + href: migration-processtemplates.md + - name: Post-Import + href: migration-post-import.md + - name: Advanced Topics + href: migration-advanced-topics.md + - name: Troubleshooting + href: migration-troubleshooting.md +- name: Version Control + items: + - name: Effective feature isolation on TFVC + href: effective-feature-isolation-on-tfvc.md + - name: Effective TFVC branching strategies for DevOps + href: effective-tfvc-branching-strategies-for-devops.md + - name: Git lost my changes? + href: git-log-history-simplification.md + - name: How dates work in Git + href: git-dates.md + - name: Move Git repos between team projects + href: move-git-repos-between-team-projects.md + - name: Remove large binaries from Git + href: remove-binaries.md +- name: DevOps + items: + - name: CI/CD Best Practices Case Study + href: build-deployment-best-practices.md + - name: Ring-based Phased Feature Rollouts + href: phase-rollout-with-rings.md \ No newline at end of file diff --git a/docs/billing/_img/IC658167.png b/docs/billing/_img/IC658167.png new file mode 100644 index 00000000000..b7849f5b7f4 Binary files /dev/null and b/docs/billing/_img/IC658167.png differ diff --git a/docs/billing/_img/IC671598.png b/docs/billing/_img/IC671598.png new file mode 100644 index 00000000000..c8e6257cddf Binary files /dev/null and b/docs/billing/_img/IC671598.png differ diff --git a/docs/billing/_img/IC671600.png b/docs/billing/_img/IC671600.png new file mode 100644 index 00000000000..74607bf86e3 Binary files /dev/null and b/docs/billing/_img/IC671600.png differ diff --git a/docs/billing/_img/IC680074.png b/docs/billing/_img/IC680074.png new file mode 100644 index 00000000000..d2eccf41496 Binary files /dev/null and b/docs/billing/_img/IC680074.png differ diff --git a/docs/billing/_img/IC779380.png b/docs/billing/_img/IC779380.png new file mode 100644 index 00000000000..7894de4a463 Binary files /dev/null and b/docs/billing/_img/IC779380.png differ diff --git a/docs/billing/_img/IC795955.png b/docs/billing/_img/IC795955.png new file mode 100644 index 00000000000..e3049fd3689 Binary files /dev/null and b/docs/billing/_img/IC795955.png differ diff --git a/docs/billing/_img/IC795956.png b/docs/billing/_img/IC795956.png new file mode 100644 index 00000000000..e9122b789bb Binary files /dev/null and b/docs/billing/_img/IC795956.png differ diff --git a/docs/billing/_img/IC827208.png b/docs/billing/_img/IC827208.png new file mode 100644 index 00000000000..ebeb64be009 Binary files /dev/null and b/docs/billing/_img/IC827208.png differ diff --git a/docs/billing/_img/IC827209.png b/docs/billing/_img/IC827209.png new file mode 100644 index 00000000000..2f92e2b7ed1 Binary files /dev/null and b/docs/billing/_img/IC827209.png differ diff --git a/docs/billing/_img/IC827210.png b/docs/billing/_img/IC827210.png new file mode 100644 index 00000000000..6206fa0421a Binary files /dev/null and b/docs/billing/_img/IC827210.png differ diff --git a/docs/billing/_img/_shared/AP_VSO_ManageLicenses.png b/docs/billing/_img/_shared/AP_VSO_ManageLicenses.png new file mode 100644 index 00000000000..cd5c464c2b9 Binary files /dev/null and b/docs/billing/_img/_shared/AP_VSO_ManageLicenses.png differ diff --git a/docs/billing/_img/_shared/AP_VSO_SelectLinkedAccount.png b/docs/billing/_img/_shared/AP_VSO_SelectLinkedAccount.png new file mode 100644 index 00000000000..ae6c431f15a Binary files /dev/null and b/docs/billing/_img/_shared/AP_VSO_SelectLinkedAccount.png differ diff --git a/docs/billing/_img/_shared/AccountSettings.png b/docs/billing/_img/_shared/AccountSettings.png new file mode 100644 index 00000000000..26d2ca2736d Binary files /dev/null and b/docs/billing/_img/_shared/AccountSettings.png differ diff --git a/docs/billing/_img/_shared/AzureChooseLinkedAccount.png b/docs/billing/_img/_shared/AzureChooseLinkedAccount.png new file mode 100644 index 00000000000..d466f79203d Binary files /dev/null and b/docs/billing/_img/_shared/AzureChooseLinkedAccount.png differ diff --git a/docs/billing/_img/_shared/AzureScaleLicensesResources.png b/docs/billing/_img/_shared/AzureScaleLicensesResources.png new file mode 100644 index 00000000000..b64086fae68 Binary files /dev/null and b/docs/billing/_img/_shared/AzureScaleLicensesResources.png differ diff --git a/docs/billing/_img/_shared/azure-conditional-access-738.png b/docs/billing/_img/_shared/azure-conditional-access-738.png new file mode 100644 index 00000000000..341c5b00897 Binary files /dev/null and b/docs/billing/_img/_shared/azure-conditional-access-738.png differ diff --git a/docs/billing/_img/_shared/azure-portal-unlink-subscription.png b/docs/billing/_img/_shared/azure-portal-unlink-subscription.png new file mode 100644 index 00000000000..1083830c936 Binary files /dev/null and b/docs/billing/_img/_shared/azure-portal-unlink-subscription.png differ diff --git a/docs/billing/_img/_shared/azure-unlink-subscription.png b/docs/billing/_img/_shared/azure-unlink-subscription.png new file mode 100644 index 00000000000..ce428d18ebf Binary files /dev/null and b/docs/billing/_img/_shared/azure-unlink-subscription.png differ diff --git a/docs/billing/_img/_shared/no-directory.png b/docs/billing/_img/_shared/no-directory.png new file mode 100644 index 00000000000..50ca23b0247 Binary files /dev/null and b/docs/billing/_img/_shared/no-directory.png differ diff --git a/docs/billing/_img/_shared/save-changes.png b/docs/billing/_img/_shared/save-changes.png new file mode 100644 index 00000000000..cb020ea59c2 Binary files /dev/null and b/docs/billing/_img/_shared/save-changes.png differ diff --git a/docs/billing/_img/_shared/sign-in-aad.png b/docs/billing/_img/_shared/sign-in-aad.png new file mode 100644 index 00000000000..93455dabb7b Binary files /dev/null and b/docs/billing/_img/_shared/sign-in-aad.png differ diff --git a/docs/billing/_img/_shared/sign-in-msa2.png b/docs/billing/_img/_shared/sign-in-msa2.png new file mode 100644 index 00000000000..34f6bfb48bf Binary files /dev/null and b/docs/billing/_img/_shared/sign-in-msa2.png differ diff --git a/docs/billing/_img/_shared/sign-in.png b/docs/billing/_img/_shared/sign-in.png new file mode 100644 index 00000000000..dd966048b5a Binary files /dev/null and b/docs/billing/_img/_shared/sign-in.png differ diff --git a/docs/billing/_img/_shared/team-project-created.png b/docs/billing/_img/_shared/team-project-created.png new file mode 100644 index 00000000000..ec159b7f1fb Binary files /dev/null and b/docs/billing/_img/_shared/team-project-created.png differ diff --git a/docs/billing/_img/_shared/users-hub-jamal.png b/docs/billing/_img/_shared/users-hub-jamal.png new file mode 100644 index 00000000000..03c1cfd681c Binary files /dev/null and b/docs/billing/_img/_shared/users-hub-jamal.png differ diff --git a/docs/billing/_img/_shared/users-hub-updated.png b/docs/billing/_img/_shared/users-hub-updated.png new file mode 100644 index 00000000000..15264af86bb Binary files /dev/null and b/docs/billing/_img/_shared/users-hub-updated.png differ diff --git a/docs/billing/_img/add-administrator-tfs/add-team-administrator.png b/docs/billing/_img/add-administrator-tfs/add-team-administrator.png new file mode 100644 index 00000000000..242729b19da Binary files /dev/null and b/docs/billing/_img/add-administrator-tfs/add-team-administrator.png differ diff --git a/docs/billing/_img/add-administrator-tfs/add-user-group.png b/docs/billing/_img/add-administrator-tfs/add-user-group.png new file mode 100644 index 00000000000..d9e12d339a7 Binary files /dev/null and b/docs/billing/_img/add-administrator-tfs/add-user-group.png differ diff --git a/docs/billing/_img/add-administrator-tfs/admin-console.png b/docs/billing/_img/add-administrator-tfs/admin-console.png new file mode 100644 index 00000000000..45a30b4aa09 Binary files /dev/null and b/docs/billing/_img/add-administrator-tfs/admin-console.png differ diff --git a/docs/billing/_img/add-administrator-tfs/invite-administrators.png b/docs/billing/_img/add-administrator-tfs/invite-administrators.png new file mode 100644 index 00000000000..728e5cc90e5 Binary files /dev/null and b/docs/billing/_img/add-administrator-tfs/invite-administrators.png differ diff --git a/docs/billing/_img/add-administrator-tfs/people-and-groups-collection.png b/docs/billing/_img/add-administrator-tfs/people-and-groups-collection.png new file mode 100644 index 00000000000..232f1679889 Binary files /dev/null and b/docs/billing/_img/add-administrator-tfs/people-and-groups-collection.png differ diff --git a/docs/billing/_img/add-administrator-tfs/people-and-groups.png b/docs/billing/_img/add-administrator-tfs/people-and-groups.png new file mode 100644 index 00000000000..630628904ce Binary files /dev/null and b/docs/billing/_img/add-administrator-tfs/people-and-groups.png differ diff --git a/docs/billing/_img/add-administrator-tfs/rs-role-assignment.png b/docs/billing/_img/add-administrator-tfs/rs-role-assignment.png new file mode 100644 index 00000000000..0e65b08ad5c Binary files /dev/null and b/docs/billing/_img/add-administrator-tfs/rs-role-assignment.png differ diff --git a/docs/billing/_img/add-administrator-tfs/windows-groups.png b/docs/billing/_img/add-administrator-tfs/windows-groups.png new file mode 100644 index 00000000000..1a25c6769fc Binary files /dev/null and b/docs/billing/_img/add-administrator-tfs/windows-groups.png differ diff --git a/docs/billing/_img/add-team-members/add-user.png b/docs/billing/_img/add-team-members/add-user.png new file mode 100644 index 00000000000..12d3f9598d2 Binary files /dev/null and b/docs/billing/_img/add-team-members/add-user.png differ diff --git a/docs/billing/_img/add-team-members/add-user2.png b/docs/billing/_img/add-team-members/add-user2.png new file mode 100644 index 00000000000..a67734e0703 Binary files /dev/null and b/docs/billing/_img/add-team-members/add-user2.png differ diff --git a/docs/billing/_img/add-team-members/invite-team-existing.png b/docs/billing/_img/add-team-members/invite-team-existing.png new file mode 100644 index 00000000000..d0980e8ea32 Binary files /dev/null and b/docs/billing/_img/add-team-members/invite-team-existing.png differ diff --git a/docs/billing/_img/add-team-members/invite-team.png b/docs/billing/_img/add-team-members/invite-team.png new file mode 100644 index 00000000000..62a01fae759 Binary files /dev/null and b/docs/billing/_img/add-team-members/invite-team.png differ diff --git a/docs/billing/_img/add-team-members/select-team-project-updated-ui.png b/docs/billing/_img/add-team-members/select-team-project-updated-ui.png new file mode 100644 index 00000000000..c1ee49162cd Binary files /dev/null and b/docs/billing/_img/add-team-members/select-team-project-updated-ui.png differ diff --git a/docs/billing/_img/add-team-members/team-project-members.png b/docs/billing/_img/add-team-members/team-project-members.png new file mode 100644 index 00000000000..205fcc9ad54 Binary files /dev/null and b/docs/billing/_img/add-team-members/team-project-members.png differ diff --git a/docs/billing/_img/add-users-team-project/add-contributor.png b/docs/billing/_img/add-users-team-project/add-contributor.png new file mode 100644 index 00000000000..e8127f75fdb Binary files /dev/null and b/docs/billing/_img/add-users-team-project/add-contributor.png differ diff --git a/docs/billing/_img/add-users-team-project/assign-rs-browser.png b/docs/billing/_img/add-users-team-project/assign-rs-browser.png new file mode 100644 index 00000000000..83e5e8f6c18 Binary files /dev/null and b/docs/billing/_img/add-users-team-project/assign-rs-browser.png differ diff --git a/docs/billing/_img/add-users-team-project/assign-rs-role.png b/docs/billing/_img/add-users-team-project/assign-rs-role.png new file mode 100644 index 00000000000..bea69450b8a Binary files /dev/null and b/docs/billing/_img/add-users-team-project/assign-rs-role.png differ diff --git a/docs/billing/_img/add-users-team-project/invite-people.png b/docs/billing/_img/add-users-team-project/invite-people.png new file mode 100644 index 00000000000..d12a325b7f7 Binary files /dev/null and b/docs/billing/_img/add-users-team-project/invite-people.png differ diff --git a/docs/billing/_img/add-users-team-project/overview.png b/docs/billing/_img/add-users-team-project/overview.png new file mode 100644 index 00000000000..1041ed3bb50 Binary files /dev/null and b/docs/billing/_img/add-users-team-project/overview.png differ diff --git a/docs/billing/_img/add-users-team-project/permissions.png b/docs/billing/_img/add-users-team-project/permissions.png new file mode 100644 index 00000000000..5e133ac0e74 Binary files /dev/null and b/docs/billing/_img/add-users-team-project/permissions.png differ diff --git a/docs/billing/_img/admin-gear-icon.png b/docs/billing/_img/admin-gear-icon.png new file mode 100644 index 00000000000..75ad52da534 Binary files /dev/null and b/docs/billing/_img/admin-gear-icon.png differ diff --git a/docs/billing/_img/assign-extensions/assign-extension-add-one-user.png b/docs/billing/_img/assign-extensions/assign-extension-add-one-user.png new file mode 100644 index 00000000000..b49e456db2a Binary files /dev/null and b/docs/billing/_img/assign-extensions/assign-extension-add-one-user.png differ diff --git a/docs/billing/_img/assign-extensions/assign-extension-assigned-basic.png b/docs/billing/_img/assign-extensions/assign-extension-assigned-basic.png new file mode 100644 index 00000000000..ce25b9ffcb7 Binary files /dev/null and b/docs/billing/_img/assign-extensions/assign-extension-assigned-basic.png differ diff --git a/docs/billing/_img/assign-extensions/assign-extension-no-users.png b/docs/billing/_img/assign-extensions/assign-extension-no-users.png new file mode 100644 index 00000000000..72825a9aac8 Binary files /dev/null and b/docs/billing/_img/assign-extensions/assign-extension-no-users.png differ diff --git a/docs/billing/_img/assign-extensions/check-user-access.png b/docs/billing/_img/assign-extensions/check-user-access.png new file mode 100644 index 00000000000..bc602e94190 Binary files /dev/null and b/docs/billing/_img/assign-extensions/check-user-access.png differ diff --git a/docs/billing/_img/assign-extensions/extension-add-users.png b/docs/billing/_img/assign-extensions/extension-add-users.png new file mode 100644 index 00000000000..fea674e24eb Binary files /dev/null and b/docs/billing/_img/assign-extensions/extension-add-users.png differ diff --git a/docs/billing/_img/assign-extensions/update-paid-users.png b/docs/billing/_img/assign-extensions/update-paid-users.png new file mode 100644 index 00000000000..8dccc7e2cfd Binary files /dev/null and b/docs/billing/_img/assign-extensions/update-paid-users.png differ diff --git a/docs/billing/_img/assign-licenses/VSO-UsersHub-AddMSDNUsers.png b/docs/billing/_img/assign-licenses/VSO-UsersHub-AddMSDNUsers.png new file mode 100644 index 00000000000..91ca5b95220 Binary files /dev/null and b/docs/billing/_img/assign-licenses/VSO-UsersHub-AddMSDNUsers.png differ diff --git a/docs/billing/_img/assign-licenses/VSO-UsersHub-BoughtLicenses-Stake.png b/docs/billing/_img/assign-licenses/VSO-UsersHub-BoughtLicenses-Stake.png new file mode 100644 index 00000000000..ae73238f8df Binary files /dev/null and b/docs/billing/_img/assign-licenses/VSO-UsersHub-BoughtLicenses-Stake.png differ diff --git a/docs/billing/_img/assign-licenses/VSO-UsersHub-DeleteUser.png b/docs/billing/_img/assign-licenses/VSO-UsersHub-DeleteUser.png new file mode 100644 index 00000000000..3edd50483f7 Binary files /dev/null and b/docs/billing/_img/assign-licenses/VSO-UsersHub-DeleteUser.png differ diff --git a/docs/billing/_img/assign-licenses/VSO-UsersHub-LicenseValidated.png b/docs/billing/_img/assign-licenses/VSO-UsersHub-LicenseValidated.png new file mode 100644 index 00000000000..da7b0993845 Binary files /dev/null and b/docs/billing/_img/assign-licenses/VSO-UsersHub-LicenseValidated.png differ diff --git a/docs/billing/_img/assign-licenses/VSO-UsersHub-OwnerOnly.png b/docs/billing/_img/assign-licenses/VSO-UsersHub-OwnerOnly.png new file mode 100644 index 00000000000..62cda425298 Binary files /dev/null and b/docs/billing/_img/assign-licenses/VSO-UsersHub-OwnerOnly.png differ diff --git a/docs/billing/_img/assign-licenses/users-hub-add-from-directory.png b/docs/billing/_img/assign-licenses/users-hub-add-from-directory.png new file mode 100644 index 00000000000..eacb1bee8b5 Binary files /dev/null and b/docs/billing/_img/assign-licenses/users-hub-add-from-directory.png differ diff --git a/docs/billing/_img/buy-more-basic-access/AP_VSO_SelectTotalUsers.png b/docs/billing/_img/buy-more-basic-access/AP_VSO_SelectTotalUsers.png new file mode 100644 index 00000000000..4c30b0be09b Binary files /dev/null and b/docs/billing/_img/buy-more-basic-access/AP_VSO_SelectTotalUsers.png differ diff --git a/docs/billing/_img/buy-more-basic-access/confirm-azure-subscription-vs-marketplace.png b/docs/billing/_img/buy-more-basic-access/confirm-azure-subscription-vs-marketplace.png new file mode 100644 index 00000000000..5cb716a9836 Binary files /dev/null and b/docs/billing/_img/buy-more-basic-access/confirm-azure-subscription-vs-marketplace.png differ diff --git a/docs/billing/_img/buy-more-basic-access/confirm-basic-access-purchase-vs-marketplace.png b/docs/billing/_img/buy-more-basic-access/confirm-basic-access-purchase-vs-marketplace.png new file mode 100644 index 00000000000..6a3639f878e Binary files /dev/null and b/docs/billing/_img/buy-more-basic-access/confirm-basic-access-purchase-vs-marketplace.png differ diff --git a/docs/billing/_img/buy-more-basic-access/confirm-updated-basic-access-purchase-vs-marketplace.png b/docs/billing/_img/buy-more-basic-access/confirm-updated-basic-access-purchase-vs-marketplace.png new file mode 100644 index 00000000000..b3b7b072081 Binary files /dev/null and b/docs/billing/_img/buy-more-basic-access/confirm-updated-basic-access-purchase-vs-marketplace.png differ diff --git a/docs/billing/_img/buy-more-basic-access/paid-basic-access-for-team-services-users.png b/docs/billing/_img/buy-more-basic-access/paid-basic-access-for-team-services-users.png new file mode 100644 index 00000000000..3b5a6f95dc8 Binary files /dev/null and b/docs/billing/_img/buy-more-basic-access/paid-basic-access-for-team-services-users.png differ diff --git a/docs/billing/_img/buy-more-basic-access/select-number-users-vs-marketplace-add-more.png b/docs/billing/_img/buy-more-basic-access/select-number-users-vs-marketplace-add-more.png new file mode 100644 index 00000000000..ae203c99c2b Binary files /dev/null and b/docs/billing/_img/buy-more-basic-access/select-number-users-vs-marketplace-add-more.png differ diff --git a/docs/billing/_img/buy-more-basic-access/select-number-users-vs-marketplace.png b/docs/billing/_img/buy-more-basic-access/select-number-users-vs-marketplace.png new file mode 100644 index 00000000000..8c02534a995 Binary files /dev/null and b/docs/billing/_img/buy-more-basic-access/select-number-users-vs-marketplace.png differ diff --git a/docs/billing/_img/buy-more-basic-access/select-team-services-account-vs-marketplace.png b/docs/billing/_img/buy-more-basic-access/select-team-services-account-vs-marketplace.png new file mode 100644 index 00000000000..14c91473760 Binary files /dev/null and b/docs/billing/_img/buy-more-basic-access/select-team-services-account-vs-marketplace.png differ diff --git a/docs/billing/_img/buy-more-basic-access/team-services-users-vs-marketplace.png b/docs/billing/_img/buy-more-basic-access/team-services-users-vs-marketplace.png new file mode 100644 index 00000000000..9daca836449 Binary files /dev/null and b/docs/billing/_img/buy-more-basic-access/team-services-users-vs-marketplace.png differ diff --git a/docs/billing/_img/change-account-access-policies/Connections.png b/docs/billing/_img/change-account-access-policies/Connections.png new file mode 100644 index 00000000000..2985f2c59e8 Binary files /dev/null and b/docs/billing/_img/change-account-access-policies/Connections.png differ diff --git a/docs/billing/_img/change-account-ownership/VSOControlPanelChangeOwner.png b/docs/billing/_img/change-account-ownership/VSOControlPanelChangeOwner.png new file mode 100644 index 00000000000..98cc3bd308c Binary files /dev/null and b/docs/billing/_img/change-account-ownership/VSOControlPanelChangeOwner.png differ diff --git a/docs/billing/_img/change-account-ownership/VSOFindNewAccountOwner.png b/docs/billing/_img/change-account-ownership/VSOFindNewAccountOwner.png new file mode 100644 index 00000000000..7654ccc4cf2 Binary files /dev/null and b/docs/billing/_img/change-account-ownership/VSOFindNewAccountOwner.png differ diff --git a/docs/billing/_img/change-account-ownership/VSOSaveNewAccountOwner.png b/docs/billing/_img/change-account-ownership/VSOSaveNewAccountOwner.png new file mode 100644 index 00000000000..92f818de83d Binary files /dev/null and b/docs/billing/_img/change-account-ownership/VSOSaveNewAccountOwner.png differ diff --git a/docs/billing/_img/change-azure-active-directory/add-msa-vsts.png b/docs/billing/_img/change-azure-active-directory/add-msa-vsts.png new file mode 100644 index 00000000000..184e223a8f2 Binary files /dev/null and b/docs/billing/_img/change-azure-active-directory/add-msa-vsts.png differ diff --git a/docs/billing/_img/change-azure-active-directory/azure-choose-target-directory.png b/docs/billing/_img/change-azure-active-directory/azure-choose-target-directory.png new file mode 100644 index 00000000000..039c4671fc7 Binary files /dev/null and b/docs/billing/_img/change-azure-active-directory/azure-choose-target-directory.png differ diff --git a/docs/billing/_img/change-azure-active-directory/select-account-subscription.png b/docs/billing/_img/change-azure-active-directory/select-account-subscription.png new file mode 100644 index 00000000000..3e93f90d7b6 Binary files /dev/null and b/docs/billing/_img/change-azure-active-directory/select-account-subscription.png differ diff --git a/docs/billing/_img/change-azure-active-directory/select-directory.png b/docs/billing/_img/change-azure-active-directory/select-directory.png new file mode 100644 index 00000000000..b6d1d1e71d8 Binary files /dev/null and b/docs/billing/_img/change-azure-active-directory/select-directory.png differ diff --git a/docs/billing/_img/checkmark.png b/docs/billing/_img/checkmark.png new file mode 100644 index 00000000000..252cab0a68e Binary files /dev/null and b/docs/billing/_img/checkmark.png differ diff --git a/docs/billing/_img/connect-to-visual-studio-online-eclipse/add-server.png b/docs/billing/_img/connect-to-visual-studio-online-eclipse/add-server.png new file mode 100644 index 00000000000..48067e881d3 Binary files /dev/null and b/docs/billing/_img/connect-to-visual-studio-online-eclipse/add-server.png differ diff --git a/docs/billing/_img/connect-to-visual-studio-online-eclipse/add-servers.png b/docs/billing/_img/connect-to-visual-studio-online-eclipse/add-servers.png new file mode 100644 index 00000000000..9ff632e7d05 Binary files /dev/null and b/docs/billing/_img/connect-to-visual-studio-online-eclipse/add-servers.png differ diff --git a/docs/billing/_img/connect-to-visual-studio-online-eclipse/add-site.png b/docs/billing/_img/connect-to-visual-studio-online-eclipse/add-site.png new file mode 100644 index 00000000000..fc313fbf982 Binary files /dev/null and b/docs/billing/_img/connect-to-visual-studio-online-eclipse/add-site.png differ diff --git a/docs/billing/_img/connect-to-visual-studio-online-eclipse/connect-to-tfs.jpg b/docs/billing/_img/connect-to-visual-studio-online-eclipse/connect-to-tfs.jpg new file mode 100644 index 00000000000..5e78f79d3cd Binary files /dev/null and b/docs/billing/_img/connect-to-visual-studio-online-eclipse/connect-to-tfs.jpg differ diff --git a/docs/billing/_img/connect-to-visual-studio-online-eclipse/select-tee-for-install.png b/docs/billing/_img/connect-to-visual-studio-online-eclipse/select-tee-for-install.png new file mode 100644 index 00000000000..9c5db40b17c Binary files /dev/null and b/docs/billing/_img/connect-to-visual-studio-online-eclipse/select-tee-for-install.png differ diff --git a/docs/billing/_img/connect-to-visual-studio-online-eclipse/show-view.png b/docs/billing/_img/connect-to-visual-studio-online-eclipse/show-view.png new file mode 100644 index 00000000000..bd8b65e66fb Binary files /dev/null and b/docs/billing/_img/connect-to-visual-studio-online-eclipse/show-view.png differ diff --git a/docs/billing/_img/connect-to-visual-studio-online-eclipse/team-explorer-view.png b/docs/billing/_img/connect-to-visual-studio-online-eclipse/team-explorer-view.png new file mode 100644 index 00000000000..e1575a5d51c Binary files /dev/null and b/docs/billing/_img/connect-to-visual-studio-online-eclipse/team-explorer-view.png differ diff --git a/docs/billing/_img/connect-to-visual-studio-team-services/open-visual-studio.png b/docs/billing/_img/connect-to-visual-studio-team-services/open-visual-studio.png new file mode 100644 index 00000000000..2262ebcdd07 Binary files /dev/null and b/docs/billing/_img/connect-to-visual-studio-team-services/open-visual-studio.png differ diff --git a/docs/billing/_img/context-menu-icon.png b/docs/billing/_img/context-menu-icon.png new file mode 100644 index 00000000000..f2f1c931094 Binary files /dev/null and b/docs/billing/_img/context-menu-icon.png differ diff --git a/docs/billing/_img/create-team-project-add-repositories.png b/docs/billing/_img/create-team-project-add-repositories.png new file mode 100644 index 00000000000..4565b55512e Binary files /dev/null and b/docs/billing/_img/create-team-project-add-repositories.png differ diff --git a/docs/billing/_img/create-team-project/AdminOverview.png b/docs/billing/_img/create-team-project/AdminOverview.png new file mode 100644 index 00000000000..efea045a71a Binary files /dev/null and b/docs/billing/_img/create-team-project/AdminOverview.png differ diff --git a/docs/billing/_img/create-team-project/CollectionOverview.png b/docs/billing/_img/create-team-project/CollectionOverview.png new file mode 100644 index 00000000000..979d97eff06 Binary files /dev/null and b/docs/billing/_img/create-team-project/CollectionOverview.png differ diff --git a/docs/billing/_img/create-team-project/CreateProject.png b/docs/billing/_img/create-team-project/CreateProject.png new file mode 100644 index 00000000000..0c608b07cad Binary files /dev/null and b/docs/billing/_img/create-team-project/CreateProject.png differ diff --git a/docs/billing/_img/delete-account/APP_UnlinkVSOAccount2.png b/docs/billing/_img/delete-account/APP_UnlinkVSOAccount2.png new file mode 100644 index 00000000000..3e3a35af71e Binary files /dev/null and b/docs/billing/_img/delete-account/APP_UnlinkVSOAccount2.png differ diff --git a/docs/billing/_img/delete-account/AzureUnlinkVSOAccount.png b/docs/billing/_img/delete-account/AzureUnlinkVSOAccount.png new file mode 100644 index 00000000000..dbaa02ab8d9 Binary files /dev/null and b/docs/billing/_img/delete-account/AzureUnlinkVSOAccount.png differ diff --git a/docs/billing/_img/delete-account/VSODeleteAccount.png b/docs/billing/_img/delete-account/VSODeleteAccount.png new file mode 100644 index 00000000000..d83a64967be Binary files /dev/null and b/docs/billing/_img/delete-account/VSODeleteAccount.png differ diff --git a/docs/billing/_img/delete-account/deleted-account.png b/docs/billing/_img/delete-account/deleted-account.png new file mode 100644 index 00000000000..30537e4434f Binary files /dev/null and b/docs/billing/_img/delete-account/deleted-account.png differ diff --git a/docs/billing/_img/delete-account/rename-deleted-account.png b/docs/billing/_img/delete-account/rename-deleted-account.png new file mode 100644 index 00000000000..218829c3b6f Binary files /dev/null and b/docs/billing/_img/delete-account/rename-deleted-account.png differ diff --git a/docs/billing/_img/delete-account/restore-account.png b/docs/billing/_img/delete-account/restore-account.png new file mode 100644 index 00000000000..e996ddf4522 Binary files /dev/null and b/docs/billing/_img/delete-account/restore-account.png differ diff --git a/docs/billing/_img/delete-account/restore-confirm.png b/docs/billing/_img/delete-account/restore-confirm.png new file mode 100644 index 00000000000..a4c27bf464e Binary files /dev/null and b/docs/billing/_img/delete-account/restore-confirm.png differ diff --git a/docs/billing/_img/delete-team-project-dialog.png b/docs/billing/_img/delete-team-project-dialog.png new file mode 100644 index 00000000000..2365f73eec8 Binary files /dev/null and b/docs/billing/_img/delete-team-project-dialog.png differ diff --git a/docs/billing/_img/delete-team-project-select-actions-menu.png b/docs/billing/_img/delete-team-project-select-actions-menu.png new file mode 100644 index 00000000000..9b530ea4fc7 Binary files /dev/null and b/docs/billing/_img/delete-team-project-select-actions-menu.png differ diff --git a/docs/billing/_img/delete-team-project/IC623347.png b/docs/billing/_img/delete-team-project/IC623347.png new file mode 100644 index 00000000000..7f76c912513 Binary files /dev/null and b/docs/billing/_img/delete-team-project/IC623347.png differ diff --git a/docs/billing/_img/delete-team-project/IC686856.png b/docs/billing/_img/delete-team-project/IC686856.png new file mode 100644 index 00000000000..79f90938809 Binary files /dev/null and b/docs/billing/_img/delete-team-project/IC686856.png differ diff --git a/docs/billing/_img/delete-team-project/IC686857.png b/docs/billing/_img/delete-team-project/IC686857.png new file mode 100644 index 00000000000..2502fa4626a Binary files /dev/null and b/docs/billing/_img/delete-team-project/IC686857.png differ diff --git a/docs/billing/_img/delete-team-project/IC687180.png b/docs/billing/_img/delete-team-project/IC687180.png new file mode 100644 index 00000000000..fe6797fdd3f Binary files /dev/null and b/docs/billing/_img/delete-team-project/IC687180.png differ diff --git a/docs/billing/_img/delete-team-project/IC760345.png b/docs/billing/_img/delete-team-project/IC760345.png new file mode 100644 index 00000000000..0691ca7610b Binary files /dev/null and b/docs/billing/_img/delete-team-project/IC760345.png differ diff --git a/docs/billing/_img/get-hockeyapp/buy-hockeyapp-azure-sub.png b/docs/billing/_img/get-hockeyapp/buy-hockeyapp-azure-sub.png new file mode 100644 index 00000000000..698d07564ea Binary files /dev/null and b/docs/billing/_img/get-hockeyapp/buy-hockeyapp-azure-sub.png differ diff --git a/docs/billing/_img/get-hockeyapp/buy-hockeyapp-plan-success.png b/docs/billing/_img/get-hockeyapp/buy-hockeyapp-plan-success.png new file mode 100644 index 00000000000..a95247deb7c Binary files /dev/null and b/docs/billing/_img/get-hockeyapp/buy-hockeyapp-plan-success.png differ diff --git a/docs/billing/_img/get-hockeyapp/buy-hockeyapp-plan.png b/docs/billing/_img/get-hockeyapp/buy-hockeyapp-plan.png new file mode 100644 index 00000000000..ec7c34be1f6 Binary files /dev/null and b/docs/billing/_img/get-hockeyapp/buy-hockeyapp-plan.png differ diff --git a/docs/billing/_img/get-hockeyapp/choose-plan.png b/docs/billing/_img/get-hockeyapp/choose-plan.png new file mode 100644 index 00000000000..6b0e2919f53 Binary files /dev/null and b/docs/billing/_img/get-hockeyapp/choose-plan.png differ diff --git a/docs/billing/_img/get-hockeyapp/confirm-purchase.png b/docs/billing/_img/get-hockeyapp/confirm-purchase.png new file mode 100644 index 00000000000..5cf2cd42533 Binary files /dev/null and b/docs/billing/_img/get-hockeyapp/confirm-purchase.png differ diff --git a/docs/billing/_img/get-hockeyapp/hockey-app-extension.png b/docs/billing/_img/get-hockeyapp/hockey-app-extension.png new file mode 100644 index 00000000000..a265f3ef52c Binary files /dev/null and b/docs/billing/_img/get-hockeyapp/hockey-app-extension.png differ diff --git a/docs/billing/_img/get-hockeyapp/select-hockeyapp-plans.png b/docs/billing/_img/get-hockeyapp/select-hockeyapp-plans.png new file mode 100644 index 00000000000..ea8068d4936 Binary files /dev/null and b/docs/billing/_img/get-hockeyapp/select-hockeyapp-plans.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/AP_VSO_ManageServices.png b/docs/billing/_img/get-more-build-load-testing/AP_VSO_ManageServices.png new file mode 100644 index 00000000000..9492610d390 Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/AP_VSO_ManageServices.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/AP_VSO_PaidCloudLoadTesting.png b/docs/billing/_img/get-more-build-load-testing/AP_VSO_PaidCloudLoadTesting.png new file mode 100644 index 00000000000..777d7dd4721 Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/AP_VSO_PaidCloudLoadTesting.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/AzureDashboard.png b/docs/billing/_img/get-more-build-load-testing/AzureDashboard.png new file mode 100644 index 00000000000..0772da4d22f Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/AzureDashboard.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/AzureManageResources.png b/docs/billing/_img/get-more-build-load-testing/AzureManageResources.png new file mode 100644 index 00000000000..bbaf1e2e459 Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/AzureManageResources.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/buy-hosted-build-release-pipelines.png b/docs/billing/_img/get-more-build-load-testing/buy-hosted-build-release-pipelines.png new file mode 100644 index 00000000000..5b74fdbf4a6 Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/buy-hosted-build-release-pipelines.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/confirm-hosted-pipeline-purchase.png b/docs/billing/_img/get-more-build-load-testing/confirm-hosted-pipeline-purchase.png new file mode 100644 index 00000000000..a3ab41b3a90 Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/confirm-hosted-pipeline-purchase.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/manage-pipelines-team-services.png b/docs/billing/_img/get-more-build-load-testing/manage-pipelines-team-services.png new file mode 100644 index 00000000000..87bd03035ac Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/manage-pipelines-team-services.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/select-azure-subscription.png b/docs/billing/_img/get-more-build-load-testing/select-azure-subscription.png new file mode 100644 index 00000000000..fc9ce7ce7f4 Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/select-azure-subscription.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/select-number-hosted-pipelines.png b/docs/billing/_img/get-more-build-load-testing/select-number-hosted-pipelines.png new file mode 100644 index 00000000000..7bb6c7c04bc Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/select-number-hosted-pipelines.png differ diff --git a/docs/billing/_img/get-more-build-load-testing/select-team-services-account.png b/docs/billing/_img/get-more-build-load-testing/select-team-services-account.png new file mode 100644 index 00000000000..06553d1cfb2 Binary files /dev/null and b/docs/billing/_img/get-more-build-load-testing/select-team-services-account.png differ diff --git a/docs/billing/_img/get-vsts-extensions/account.png b/docs/billing/_img/get-vsts-extensions/account.png new file mode 100644 index 00000000000..bb3436780e5 Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/account.png differ diff --git a/docs/billing/_img/get-vsts-extensions/approve-request-updated-ui.png b/docs/billing/_img/get-vsts-extensions/approve-request-updated-ui.png new file mode 100644 index 00000000000..91ba3bcdc4a Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/approve-request-updated-ui.png differ diff --git a/docs/billing/_img/get-vsts-extensions/go-to-account.png b/docs/billing/_img/get-vsts-extensions/go-to-account.png new file mode 100644 index 00000000000..d05c883db4e Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/go-to-account.png differ diff --git a/docs/billing/_img/get-vsts-extensions/hockey-app-extension.png b/docs/billing/_img/get-vsts-extensions/hockey-app-extension.png new file mode 100644 index 00000000000..a265f3ef52c Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/hockey-app-extension.png differ diff --git a/docs/billing/_img/get-vsts-extensions/marketplace.png b/docs/billing/_img/get-vsts-extensions/marketplace.png new file mode 100644 index 00000000000..2a66a68127a Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/marketplace.png differ diff --git a/docs/billing/_img/get-vsts-extensions/my-request.png b/docs/billing/_img/get-vsts-extensions/my-request.png new file mode 100644 index 00000000000..b54c76ff139 Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/my-request.png differ diff --git a/docs/billing/_img/get-vsts-extensions/request-install.png b/docs/billing/_img/get-vsts-extensions/request-install.png new file mode 100644 index 00000000000..bd162d6ce77 Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/request-install.png differ diff --git a/docs/billing/_img/get-vsts-extensions/select-azure-sub.png b/docs/billing/_img/get-vsts-extensions/select-azure-sub.png new file mode 100644 index 00000000000..25fa2b8960a Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/select-azure-sub.png differ diff --git a/docs/billing/_img/get-vsts-extensions/select-paid-users.png b/docs/billing/_img/get-vsts-extensions/select-paid-users.png new file mode 100644 index 00000000000..8430259bf9e Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/select-paid-users.png differ diff --git a/docs/billing/_img/get-vsts-extensions/subscription-directory.png b/docs/billing/_img/get-vsts-extensions/subscription-directory.png new file mode 100644 index 00000000000..eef96e4b308 Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/subscription-directory.png differ diff --git a/docs/billing/_img/get-vsts-extensions/team-services-account-directory.png b/docs/billing/_img/get-vsts-extensions/team-services-account-directory.png new file mode 100644 index 00000000000..7bd2eba4028 Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/team-services-account-directory.png differ diff --git a/docs/billing/_img/get-vsts-extensions/team-services-account-no-directory.png b/docs/billing/_img/get-vsts-extensions/team-services-account-no-directory.png new file mode 100644 index 00000000000..af304bf01c9 Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/team-services-account-no-directory.png differ diff --git a/docs/billing/_img/get-vsts-extensions/test-manager-extension.png b/docs/billing/_img/get-vsts-extensions/test-manager-extension.png new file mode 100644 index 00000000000..854fe6c8b9b Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/test-manager-extension.png differ diff --git a/docs/billing/_img/get-vsts-extensions/view-request.png b/docs/billing/_img/get-vsts-extensions/view-request.png new file mode 100644 index 00000000000..c4d8cd59578 Binary files /dev/null and b/docs/billing/_img/get-vsts-extensions/view-request.png differ diff --git a/docs/billing/_img/link-msdn-subscription/add-alternate-account-my-visual-studio-com-portal.png b/docs/billing/_img/link-msdn-subscription/add-alternate-account-my-visual-studio-com-portal.png new file mode 100644 index 00000000000..b081f93ad03 Binary files /dev/null and b/docs/billing/_img/link-msdn-subscription/add-alternate-account-my-visual-studio-com-portal.png differ diff --git a/docs/billing/_img/link-msdn-subscription/choose-subscriptions-my-visual-studio-com-portal.png b/docs/billing/_img/link-msdn-subscription/choose-subscriptions-my-visual-studio-com-portal.png new file mode 100644 index 00000000000..b52d975daa9 Binary files /dev/null and b/docs/billing/_img/link-msdn-subscription/choose-subscriptions-my-visual-studio-com-portal.png differ diff --git a/docs/billing/_img/link-msdn-subscription/enter-alternate-account-my-visual-studio-com-portal.png b/docs/billing/_img/link-msdn-subscription/enter-alternate-account-my-visual-studio-com-portal.png new file mode 100644 index 00000000000..ec9db4b0882 Binary files /dev/null and b/docs/billing/_img/link-msdn-subscription/enter-alternate-account-my-visual-studio-com-portal.png differ diff --git a/docs/billing/_img/manage-azure-ad-groups/AddAADGroupPanelBrowse.png b/docs/billing/_img/manage-azure-ad-groups/AddAADGroupPanelBrowse.png new file mode 100644 index 00000000000..f67f94a7b27 Binary files /dev/null and b/docs/billing/_img/manage-azure-ad-groups/AddAADGroupPanelBrowse.png differ diff --git a/docs/billing/_img/manage-azure-ad-groups/CheckIdentitySourceAAD.png b/docs/billing/_img/manage-azure-ad-groups/CheckIdentitySourceAAD.png new file mode 100644 index 00000000000..fbf85f02b53 Binary files /dev/null and b/docs/billing/_img/manage-azure-ad-groups/CheckIdentitySourceAAD.png differ diff --git a/docs/billing/_img/manage-azure-ad-groups/DeleteAADGroupFromVSO.png b/docs/billing/_img/manage-azure-ad-groups/DeleteAADGroupFromVSO.png new file mode 100644 index 00000000000..b7ada77340e Binary files /dev/null and b/docs/billing/_img/manage-azure-ad-groups/DeleteAADGroupFromVSO.png differ diff --git a/docs/billing/_img/manage-azure-ad-groups/VSOGroupAddMemberButton.png b/docs/billing/_img/manage-azure-ad-groups/VSOGroupAddMemberButton.png new file mode 100644 index 00000000000..9c1c439d382 Binary files /dev/null and b/docs/billing/_img/manage-azure-ad-groups/VSOGroupAddMemberButton.png differ diff --git a/docs/billing/_img/manage-work-access/AzureADAdmin.png b/docs/billing/_img/manage-work-access/AzureADAdmin.png new file mode 100644 index 00000000000..6fe0fa60705 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureADAdmin.png differ diff --git a/docs/billing/_img/manage-work-access/AzureAddMembers1.png b/docs/billing/_img/manage-work-access/AzureAddMembers1.png new file mode 100644 index 00000000000..82f215fb5b1 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureAddMembers1.png differ diff --git a/docs/billing/_img/manage-work-access/AzureAddMembers2.png b/docs/billing/_img/manage-work-access/AzureAddMembers2.png new file mode 100644 index 00000000000..3950d555bbd Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureAddMembers2.png differ diff --git a/docs/billing/_img/manage-work-access/AzureAddMembers3.png b/docs/billing/_img/manage-work-access/AzureAddMembers3.png new file mode 100644 index 00000000000..3ab7ca7f01e Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureAddMembers3.png differ diff --git a/docs/billing/_img/manage-work-access/AzureChooseAD.png b/docs/billing/_img/manage-work-access/AzureChooseAD.png new file mode 100644 index 00000000000..385e5baf7ad Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureChooseAD.png differ diff --git a/docs/billing/_img/manage-work-access/AzureChooseVSODirectory.png b/docs/billing/_img/manage-work-access/AzureChooseVSODirectory.png new file mode 100644 index 00000000000..0d9ea79bda3 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureChooseVSODirectory.png differ diff --git a/docs/billing/_img/manage-work-access/AzureConfigureVSO.png b/docs/billing/_img/manage-work-access/AzureConfigureVSO.png new file mode 100644 index 00000000000..313d7b2bf14 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureConfigureVSO.png differ diff --git a/docs/billing/_img/manage-work-access/AzureConnectDirectory1.png b/docs/billing/_img/manage-work-access/AzureConnectDirectory1.png new file mode 100644 index 00000000000..83a6ab4d544 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureConnectDirectory1.png differ diff --git a/docs/billing/_img/manage-work-access/AzureConnectDirectory2.png b/docs/billing/_img/manage-work-access/AzureConnectDirectory2.png new file mode 100644 index 00000000000..8a27bc074fd Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureConnectDirectory2.png differ diff --git a/docs/billing/_img/manage-work-access/AzureConnectDirectory3.png b/docs/billing/_img/manage-work-access/AzureConnectDirectory3.png new file mode 100644 index 00000000000..588e1adb398 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureConnectDirectory3.png differ diff --git a/docs/billing/_img/manage-work-access/AzureDirectoryDeleteUser.png b/docs/billing/_img/manage-work-access/AzureDirectoryDeleteUser.png new file mode 100644 index 00000000000..b7d73e1b053 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureDirectoryDeleteUser.png differ diff --git a/docs/billing/_img/manage-work-access/AzureDirectoryViewUsers.png b/docs/billing/_img/manage-work-access/AzureDirectoryViewUsers.png new file mode 100644 index 00000000000..1b87850abf2 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureDirectoryViewUsers.png differ diff --git a/docs/billing/_img/manage-work-access/AzureDisconnectDirectory1.png b/docs/billing/_img/manage-work-access/AzureDisconnectDirectory1.png new file mode 100644 index 00000000000..74eac366b30 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureDisconnectDirectory1.png differ diff --git a/docs/billing/_img/manage-work-access/AzureDisconnectDirectory2.png b/docs/billing/_img/manage-work-access/AzureDisconnectDirectory2.png new file mode 100644 index 00000000000..d79cbff9de0 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureDisconnectDirectory2.png differ diff --git a/docs/billing/_img/manage-work-access/AzureDisconnectDirectory3.png b/docs/billing/_img/manage-work-access/AzureDisconnectDirectory3.png new file mode 100644 index 00000000000..e65ebd9042e Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureDisconnectDirectory3.png differ diff --git a/docs/billing/_img/manage-work-access/AzureFindConnectedDirectory.png b/docs/billing/_img/manage-work-access/AzureFindConnectedDirectory.png new file mode 100644 index 00000000000..ab59112fc3f Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureFindConnectedDirectory.png differ diff --git a/docs/billing/_img/manage-work-access/AzureSelectConnectedVSO.png b/docs/billing/_img/manage-work-access/AzureSelectConnectedVSO.png new file mode 100644 index 00000000000..8db3545f40f Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureSelectConnectedVSO.png differ diff --git a/docs/billing/_img/manage-work-access/AzureSubscriptionEditDirectory.png b/docs/billing/_img/manage-work-access/AzureSubscriptionEditDirectory.png new file mode 100644 index 00000000000..380f8d25ea4 Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureSubscriptionEditDirectory.png differ diff --git a/docs/billing/_img/manage-work-access/AzureVSO_Unconnected.png b/docs/billing/_img/manage-work-access/AzureVSO_Unconnected.png new file mode 100644 index 00000000000..1b5cda5aa4b Binary files /dev/null and b/docs/billing/_img/manage-work-access/AzureVSO_Unconnected.png differ diff --git a/docs/billing/_img/manage-work-access/azure-configure-disconnect.png b/docs/billing/_img/manage-work-access/azure-configure-disconnect.png new file mode 100644 index 00000000000..23db4e077ed Binary files /dev/null and b/docs/billing/_img/manage-work-access/azure-configure-disconnect.png differ diff --git a/docs/billing/_img/manage-work-access/guest-access.png b/docs/billing/_img/manage-work-access/guest-access.png new file mode 100644 index 00000000000..09596f7d100 Binary files /dev/null and b/docs/billing/_img/manage-work-access/guest-access.png differ diff --git a/docs/billing/_img/open-admin-context-team-services.png b/docs/billing/_img/open-admin-context-team-services.png new file mode 100644 index 00000000000..0a0f2ebb7c7 Binary files /dev/null and b/docs/billing/_img/open-admin-context-team-services.png differ diff --git a/docs/billing/_img/permissions/area-permissions.png b/docs/billing/_img/permissions/area-permissions.png new file mode 100644 index 00000000000..59828eeee3e Binary files /dev/null and b/docs/billing/_img/permissions/area-permissions.png differ diff --git a/docs/billing/_img/permissions/build-permissions.png b/docs/billing/_img/permissions/build-permissions.png new file mode 100644 index 00000000000..3e2bfd62429 Binary files /dev/null and b/docs/billing/_img/permissions/build-permissions.png differ diff --git a/docs/billing/_img/permissions/collection-groups-and-permissions.png b/docs/billing/_img/permissions/collection-groups-and-permissions.png new file mode 100644 index 00000000000..173b2062819 Binary files /dev/null and b/docs/billing/_img/permissions/collection-groups-and-permissions.png differ diff --git a/docs/billing/_img/permissions/git-permissions-prior-to-2017.png b/docs/billing/_img/permissions/git-permissions-prior-to-2017.png new file mode 100644 index 00000000000..1af505e1e10 Binary files /dev/null and b/docs/billing/_img/permissions/git-permissions-prior-to-2017.png differ diff --git a/docs/billing/_img/permissions/git-permissions.png b/docs/billing/_img/permissions/git-permissions.png new file mode 100644 index 00000000000..1cf6fba249c Binary files /dev/null and b/docs/billing/_img/permissions/git-permissions.png differ diff --git a/docs/billing/_img/permissions/iteration-permissions.png b/docs/billing/_img/permissions/iteration-permissions.png new file mode 100644 index 00000000000..b1c0fec675f Binary files /dev/null and b/docs/billing/_img/permissions/iteration-permissions.png differ diff --git a/docs/billing/_img/permissions/permissions-overview.png b/docs/billing/_img/permissions/permissions-overview.png new file mode 100644 index 00000000000..d443f13cc60 Binary files /dev/null and b/docs/billing/_img/permissions/permissions-overview.png differ diff --git a/docs/billing/_img/permissions/query-folder-permissions.png b/docs/billing/_img/permissions/query-folder-permissions.png new file mode 100644 index 00000000000..f6909cc58b6 Binary files /dev/null and b/docs/billing/_img/permissions/query-folder-permissions.png differ diff --git a/docs/billing/_img/permissions/server-groups-and-permissions.png b/docs/billing/_img/permissions/server-groups-and-permissions.png new file mode 100644 index 00000000000..52b8baa3065 Binary files /dev/null and b/docs/billing/_img/permissions/server-groups-and-permissions.png differ diff --git a/docs/billing/_img/permissions/team-project-groups-and-permissions.png b/docs/billing/_img/permissions/team-project-groups-and-permissions.png new file mode 100644 index 00000000000..c15e042de81 Binary files /dev/null and b/docs/billing/_img/permissions/team-project-groups-and-permissions.png differ diff --git a/docs/billing/_img/permissions/tfvc-permissions.png b/docs/billing/_img/permissions/tfvc-permissions.png new file mode 100644 index 00000000000..12e727b69db Binary files /dev/null and b/docs/billing/_img/permissions/tfvc-permissions.png differ diff --git a/docs/billing/_img/rename-team-project/CloneURL.png b/docs/billing/_img/rename-team-project/CloneURL.png new file mode 100644 index 00000000000..1100e207203 Binary files /dev/null and b/docs/billing/_img/rename-team-project/CloneURL.png differ diff --git a/docs/billing/_img/rename-team-project/EditRepoSettings.png b/docs/billing/_img/rename-team-project/EditRepoSettings.png new file mode 100644 index 00000000000..e77eda63f25 Binary files /dev/null and b/docs/billing/_img/rename-team-project/EditRepoSettings.png differ diff --git a/docs/billing/_img/rename-team-project/ProjectRename1.png b/docs/billing/_img/rename-team-project/ProjectRename1.png new file mode 100644 index 00000000000..5492f8ce60f Binary files /dev/null and b/docs/billing/_img/rename-team-project/ProjectRename1.png differ diff --git a/docs/billing/_img/rename-team-project/ProjectSettings.png b/docs/billing/_img/rename-team-project/ProjectSettings.png new file mode 100644 index 00000000000..e6e7eea69b1 Binary files /dev/null and b/docs/billing/_img/rename-team-project/ProjectSettings.png differ diff --git a/docs/billing/_img/rename-team-project/RefreshTeamExplorer.png b/docs/billing/_img/rename-team-project/RefreshTeamExplorer.png new file mode 100644 index 00000000000..c420368bc61 Binary files /dev/null and b/docs/billing/_img/rename-team-project/RefreshTeamExplorer.png differ diff --git a/docs/billing/_img/rename-team-project/RepoConnect.png b/docs/billing/_img/rename-team-project/RepoConnect.png new file mode 100644 index 00000000000..1590823c86a Binary files /dev/null and b/docs/billing/_img/rename-team-project/RepoConnect.png differ diff --git a/docs/billing/_img/rename-team-project/RepoSettings.png b/docs/billing/_img/rename-team-project/RepoSettings.png new file mode 100644 index 00000000000..6ee5a4683d8 Binary files /dev/null and b/docs/billing/_img/rename-team-project/RepoSettings.png differ diff --git a/docs/billing/_img/rename-team-project/Result.png b/docs/billing/_img/rename-team-project/Result.png new file mode 100644 index 00000000000..3b3376fc27a Binary files /dev/null and b/docs/billing/_img/rename-team-project/Result.png differ diff --git a/docs/billing/_img/rename-team-project/collection-rename.png b/docs/billing/_img/rename-team-project/collection-rename.png new file mode 100644 index 00000000000..b74e2314a63 Binary files /dev/null and b/docs/billing/_img/rename-team-project/collection-rename.png differ diff --git a/docs/billing/_img/rename-team-project/gearicon.png b/docs/billing/_img/rename-team-project/gearicon.png new file mode 100644 index 00000000000..7f76c912513 Binary files /dev/null and b/docs/billing/_img/rename-team-project/gearicon.png differ diff --git a/docs/billing/_img/rename-team-project/lab-build-process.png b/docs/billing/_img/rename-team-project/lab-build-process.png new file mode 100644 index 00000000000..37ebeaa4fde Binary files /dev/null and b/docs/billing/_img/rename-team-project/lab-build-process.png differ diff --git a/docs/billing/_img/rename-team-project/remotelink.PNG b/docs/billing/_img/rename-team-project/remotelink.PNG new file mode 100644 index 00000000000..2b4ddd4928f Binary files /dev/null and b/docs/billing/_img/rename-team-project/remotelink.PNG differ diff --git a/docs/billing/_img/rename-team-project/team-project-git-tabs.png b/docs/billing/_img/rename-team-project/team-project-git-tabs.png new file mode 100644 index 00000000000..c399a6f2dc8 Binary files /dev/null and b/docs/billing/_img/rename-team-project/team-project-git-tabs.png differ diff --git a/docs/billing/_img/rename-team-project/tfvc-get.png b/docs/billing/_img/rename-team-project/tfvc-get.png new file mode 100644 index 00000000000..f6fbf515a64 Binary files /dev/null and b/docs/billing/_img/rename-team-project/tfvc-get.png differ diff --git a/docs/billing/_img/rename-vso-account/VSOConfirmAccountRename.png b/docs/billing/_img/rename-vso-account/VSOConfirmAccountRename.png new file mode 100644 index 00000000000..104c34050d1 Binary files /dev/null and b/docs/billing/_img/rename-vso-account/VSOConfirmAccountRename.png differ diff --git a/docs/billing/_img/rename-vso-account/VSORenameAccount.png b/docs/billing/_img/rename-vso-account/VSORenameAccount.png new file mode 100644 index 00000000000..becf2b27352 Binary files /dev/null and b/docs/billing/_img/rename-vso-account/VSORenameAccount.png differ diff --git a/docs/billing/_img/restrict-access-tfs/build-security.png b/docs/billing/_img/restrict-access-tfs/build-security.png new file mode 100644 index 00000000000..8eac442428a Binary files /dev/null and b/docs/billing/_img/restrict-access-tfs/build-security.png differ diff --git a/docs/billing/_img/restrict-access-tfs/git-permissions.png b/docs/billing/_img/restrict-access-tfs/git-permissions.png new file mode 100644 index 00000000000..a648471144b Binary files /dev/null and b/docs/billing/_img/restrict-access-tfs/git-permissions.png differ diff --git a/docs/billing/_img/restrict-access-tfs/readers-permissions.png b/docs/billing/_img/restrict-access-tfs/readers-permissions.png new file mode 100644 index 00000000000..aa810ac8b41 Binary files /dev/null and b/docs/billing/_img/restrict-access-tfs/readers-permissions.png differ diff --git a/docs/billing/_img/set-up-billing/AP_VSO_Linked.png b/docs/billing/_img/set-up-billing/AP_VSO_Linked.png new file mode 100644 index 00000000000..1b8d11d1f16 Binary files /dev/null and b/docs/billing/_img/set-up-billing/AP_VSO_Linked.png differ diff --git a/docs/billing/_img/set-up-billing/AP_VSO_SelectSubscription.png b/docs/billing/_img/set-up-billing/AP_VSO_SelectSubscription.png new file mode 100644 index 00000000000..a0509b8c4cd Binary files /dev/null and b/docs/billing/_img/set-up-billing/AP_VSO_SelectSubscription.png differ diff --git a/docs/billing/_img/set-up-billing/AP_VSO_StartLink2.png b/docs/billing/_img/set-up-billing/AP_VSO_StartLink2.png new file mode 100644 index 00000000000..f39b86a92bc Binary files /dev/null and b/docs/billing/_img/set-up-billing/AP_VSO_StartLink2.png differ diff --git a/docs/billing/_img/set-up-billing/AP_VSO_change-azure-subscription.png b/docs/billing/_img/set-up-billing/AP_VSO_change-azure-subscription.png new file mode 100644 index 00000000000..8eafd15c63b Binary files /dev/null and b/docs/billing/_img/set-up-billing/AP_VSO_change-azure-subscription.png differ diff --git a/docs/billing/_img/set-up-billing/AzureDeveloperServicesStart.png b/docs/billing/_img/set-up-billing/AzureDeveloperServicesStart.png new file mode 100644 index 00000000000..969b6789e04 Binary files /dev/null and b/docs/billing/_img/set-up-billing/AzureDeveloperServicesStart.png differ diff --git a/docs/billing/_img/set-up-billing/AzureSubscriptionsFilter.png b/docs/billing/_img/set-up-billing/AzureSubscriptionsFilter.png new file mode 100644 index 00000000000..504242db587 Binary files /dev/null and b/docs/billing/_img/set-up-billing/AzureSubscriptionsFilter.png differ diff --git a/docs/billing/_img/set-up-billing/ap-add-owncontrib.png b/docs/billing/_img/set-up-billing/ap-add-owncontrib.png new file mode 100644 index 00000000000..c9a7a7ebd23 Binary files /dev/null and b/docs/billing/_img/set-up-billing/ap-add-owncontrib.png differ diff --git a/docs/billing/_img/set-up-billing/ap-vso-selectlink2.png b/docs/billing/_img/set-up-billing/ap-vso-selectlink2.png new file mode 100644 index 00000000000..c570762c949 Binary files /dev/null and b/docs/billing/_img/set-up-billing/ap-vso-selectlink2.png differ diff --git a/docs/billing/_img/set-up-vs/HelloNewProfile.png b/docs/billing/_img/set-up-vs/HelloNewProfile.png new file mode 100644 index 00000000000..1614f8c8965 Binary files /dev/null and b/docs/billing/_img/set-up-vs/HelloNewProfile.png differ diff --git a/docs/billing/_img/set-up-vs/change-location.png b/docs/billing/_img/set-up-vs/change-location.png new file mode 100644 index 00000000000..69517a2d9b8 Binary files /dev/null and b/docs/billing/_img/set-up-vs/change-location.png differ diff --git a/docs/billing/_img/set-up-vs/create-team-project-vs.png b/docs/billing/_img/set-up-vs/create-team-project-vs.png new file mode 100644 index 00000000000..3fab651e3e0 Binary files /dev/null and b/docs/billing/_img/set-up-vs/create-team-project-vs.png differ diff --git a/docs/billing/_img/set-up-vs/profile-account-details.png b/docs/billing/_img/set-up-vs/profile-account-details.png new file mode 100644 index 00000000000..e334aaef312 Binary files /dev/null and b/docs/billing/_img/set-up-vs/profile-account-details.png differ diff --git a/docs/billing/_img/set-up-vs/profile-account-details2.png b/docs/billing/_img/set-up-vs/profile-account-details2.png new file mode 100644 index 00000000000..1c0946ba8ed Binary files /dev/null and b/docs/billing/_img/set-up-vs/profile-account-details2.png differ diff --git a/docs/billing/_img/set-up-vs/sign-in-visual-studio.png b/docs/billing/_img/set-up-vs/sign-in-visual-studio.png new file mode 100644 index 00000000000..1c130a49930 Binary files /dev/null and b/docs/billing/_img/set-up-vs/sign-in-visual-studio.png differ diff --git a/docs/billing/_img/sign-up-visual-studio-team-services/change-account-directory.png b/docs/billing/_img/sign-up-visual-studio-team-services/change-account-directory.png new file mode 100644 index 00000000000..53e2fb7589e Binary files /dev/null and b/docs/billing/_img/sign-up-visual-studio-team-services/change-account-directory.png differ diff --git a/docs/billing/_img/sign-up-visual-studio-team-services/check-account-location-standard.png b/docs/billing/_img/sign-up-visual-studio-team-services/check-account-location-standard.png new file mode 100644 index 00000000000..a06e5b43118 Binary files /dev/null and b/docs/billing/_img/sign-up-visual-studio-team-services/check-account-location-standard.png differ diff --git a/docs/billing/_img/sign-up-visual-studio-team-services/create-profile-msa.png b/docs/billing/_img/sign-up-visual-studio-team-services/create-profile-msa.png new file mode 100644 index 00000000000..7f13a6e10f3 Binary files /dev/null and b/docs/billing/_img/sign-up-visual-studio-team-services/create-profile-msa.png differ diff --git a/docs/billing/_img/sign-up-visual-studio-team-services/create-team-services-account-directory.png b/docs/billing/_img/sign-up-visual-studio-team-services/create-team-services-account-directory.png new file mode 100644 index 00000000000..78d1569c22e Binary files /dev/null and b/docs/billing/_img/sign-up-visual-studio-team-services/create-team-services-account-directory.png differ diff --git a/docs/billing/_img/sign-up-visual-studio-team-services/create-team-services-account.png b/docs/billing/_img/sign-up-visual-studio-team-services/create-team-services-account.png new file mode 100644 index 00000000000..78d1569c22e Binary files /dev/null and b/docs/billing/_img/sign-up-visual-studio-team-services/create-team-services-account.png differ diff --git a/docs/billing/_img/sign-up-visual-studio-team-services/my-info-account-list.png b/docs/billing/_img/sign-up-visual-studio-team-services/my-info-account-list.png new file mode 100644 index 00000000000..855c407136f Binary files /dev/null and b/docs/billing/_img/sign-up-visual-studio-team-services/my-info-account-list.png differ diff --git a/docs/billing/_img/sign-up-visual-studio-team-services/my-info-new-account.png b/docs/billing/_img/sign-up-visual-studio-team-services/my-info-new-account.png new file mode 100644 index 00000000000..10b2c8d04f3 Binary files /dev/null and b/docs/billing/_img/sign-up-visual-studio-team-services/my-info-new-account.png differ diff --git a/docs/billing/_img/try-additional-features/check-extension-trial-updated-ui.png b/docs/billing/_img/try-additional-features/check-extension-trial-updated-ui.png new file mode 100644 index 00000000000..e122b7d68cf Binary files /dev/null and b/docs/billing/_img/try-additional-features/check-extension-trial-updated-ui.png differ diff --git a/docs/billing/_img/try-additional-features/extension-installed.png b/docs/billing/_img/try-additional-features/extension-installed.png new file mode 100644 index 00000000000..c0e3f3230ad Binary files /dev/null and b/docs/billing/_img/try-additional-features/extension-installed.png differ diff --git a/docs/billing/_img/try-additional-features/extension-trial-in-account-updated-ui.png b/docs/billing/_img/try-additional-features/extension-trial-in-account-updated-ui.png new file mode 100644 index 00000000000..1685ce6d022 Binary files /dev/null and b/docs/billing/_img/try-additional-features/extension-trial-in-account-updated-ui.png differ diff --git a/docs/billing/_img/try-additional-features/mp-start-test-manager-trial.png b/docs/billing/_img/try-additional-features/mp-start-test-manager-trial.png new file mode 100644 index 00000000000..d13ffe4e563 Binary files /dev/null and b/docs/billing/_img/try-additional-features/mp-start-test-manager-trial.png differ diff --git a/docs/billing/_img/try-additional-features/select-account.png b/docs/billing/_img/try-additional-features/select-account.png new file mode 100644 index 00000000000..8dccad50dcf Binary files /dev/null and b/docs/billing/_img/try-additional-features/select-account.png differ diff --git a/docs/billing/_img/user-hub/acct-level-users.jpg b/docs/billing/_img/user-hub/acct-level-users.jpg new file mode 100644 index 00000000000..c937fd842f9 Binary files /dev/null and b/docs/billing/_img/user-hub/acct-level-users.jpg differ diff --git a/docs/billing/_img/user-hub/add-users-button.png b/docs/billing/_img/user-hub/add-users-button.png new file mode 100644 index 00000000000..645ec795525 Binary files /dev/null and b/docs/billing/_img/user-hub/add-users-button.png differ diff --git a/docs/billing/_img/user-hub/add-users.jpg b/docs/billing/_img/user-hub/add-users.jpg new file mode 100644 index 00000000000..984e6005033 Binary files /dev/null and b/docs/billing/_img/user-hub/add-users.jpg differ diff --git a/docs/billing/_img/user-hub/preview-features.png b/docs/billing/_img/user-hub/preview-features.png new file mode 100644 index 00000000000..fbb381b1537 Binary files /dev/null and b/docs/billing/_img/user-hub/preview-features.png differ diff --git a/docs/billing/_img/user-hub/user-details.jpg b/docs/billing/_img/user-hub/user-details.jpg new file mode 100644 index 00000000000..e1fdb3b1f71 Binary files /dev/null and b/docs/billing/_img/user-hub/user-details.jpg differ diff --git a/docs/billing/_img/xamarin/01-marketplace.png b/docs/billing/_img/xamarin/01-marketplace.png new file mode 100644 index 00000000000..453996321ef Binary files /dev/null and b/docs/billing/_img/xamarin/01-marketplace.png differ diff --git a/docs/billing/_img/xamarin/02-xamarin-univ.png b/docs/billing/_img/xamarin/02-xamarin-univ.png new file mode 100644 index 00000000000..7af8e7530bb Binary files /dev/null and b/docs/billing/_img/xamarin/02-xamarin-univ.png differ diff --git a/docs/billing/_img/xamarin/03-xamarin-id.png b/docs/billing/_img/xamarin/03-xamarin-id.png new file mode 100644 index 00000000000..db1838f8782 Binary files /dev/null and b/docs/billing/_img/xamarin/03-xamarin-id.png differ diff --git a/docs/billing/_img/xamarin/04-xamarin-quantity.png b/docs/billing/_img/xamarin/04-xamarin-quantity.png new file mode 100644 index 00000000000..eba1cc5e276 Binary files /dev/null and b/docs/billing/_img/xamarin/04-xamarin-quantity.png differ diff --git a/docs/billing/_img/xamarin/05-xamarin-confirm.png b/docs/billing/_img/xamarin/05-xamarin-confirm.png new file mode 100644 index 00000000000..406044d82cd Binary files /dev/null and b/docs/billing/_img/xamarin/05-xamarin-confirm.png differ diff --git a/docs/billing/_img/xamarin/06-ms-confirm.png b/docs/billing/_img/xamarin/06-ms-confirm.png new file mode 100644 index 00000000000..9670afc8f6b Binary files /dev/null and b/docs/billing/_img/xamarin/06-ms-confirm.png differ diff --git a/docs/billing/_img/xamarin/07-email-notice.png b/docs/billing/_img/xamarin/07-email-notice.png new file mode 100644 index 00000000000..6e3ceee4b85 Binary files /dev/null and b/docs/billing/_img/xamarin/07-email-notice.png differ diff --git a/docs/billing/_img/xamarin/08-xamarin-email.png b/docs/billing/_img/xamarin/08-xamarin-email.png new file mode 100644 index 00000000000..f924d261ee3 Binary files /dev/null and b/docs/billing/_img/xamarin/08-xamarin-email.png differ diff --git a/docs/billing/_shared/_img/remove-spending-limit.png b/docs/billing/_shared/_img/remove-spending-limit.png new file mode 100644 index 00000000000..afaa7a20a9a Binary files /dev/null and b/docs/billing/_shared/_img/remove-spending-limit.png differ diff --git a/docs/billing/_shared/_img/spending-limit.png b/docs/billing/_shared/_img/spending-limit.png new file mode 100644 index 00000000000..b6f089dafd9 Binary files /dev/null and b/docs/billing/_shared/_img/spending-limit.png differ diff --git a/docs/billing/_shared/_img/uninstall-disable.png b/docs/billing/_shared/_img/uninstall-disable.png new file mode 100644 index 00000000000..041345fbce6 Binary files /dev/null and b/docs/billing/_shared/_img/uninstall-disable.png differ diff --git a/docs/billing/_shared/qa-azure-billing-support.md b/docs/billing/_shared/qa-azure-billing-support.md new file mode 100644 index 00000000000..d0051052bb7 --- /dev/null +++ b/docs/billing/_shared/qa-azure-billing-support.md @@ -0,0 +1,6 @@ + +###Q: How do I get other help or support for Azure subscriptions and billing? + +A: Check these [topics about Azure billing and subscriptions](https://azure.microsoft.com/en-us/documentation/articles/?tag=billing), +the [Azure Billing and Subscription FAQ](https://azure.microsoft.com/en-us/documentation/articles/billing-subscription-faq/), +or try [Azure Support](https://azure.microsoft.com/en-us/support/options/). diff --git a/docs/billing/_shared/qa-azure-billing.md b/docs/billing/_shared/qa-azure-billing.md new file mode 100644 index 00000000000..7f148e61594 --- /dev/null +++ b/docs/billing/_shared/qa-azure-billing.md @@ -0,0 +1,77 @@ +####Q: How does Azure billing work? + +A: When you buy from the Visual Studio Marketplace, +you select an Azure subscription to use for billing. +If you don't have an Azure subscription, +you can [sign up](https://portal.azure.com) +either before or during your first purchase. +You can set up payment with a credit card, +or by invoice in some cases. Charges for your +purchases will show up on your monthly Azure bill. + +**Note:** You must keep your Azure subscription in good +standing to use your Visual Studio Marketplace purchases. +If your Azure subscription is canceled or becomes disabled, +for example, because the credit card used for payment expires, +then any purchases with this Azure subscription will be +deactivated on the 1st day of next month. +To continue using your Visual Studio Marketplace purchases, +please keep your Azure subscription active and updated. + + +####Q: Can I use an Enterprise Agreement to buy from the Visual Studio Marketplace? + +A: Yes, please buy directly from the Visual Studio Marketplace +where you can bill purchases to the Azure subscription that was created +under your [Enterprise Agreement (EA)](https://azure.microsoft.com/en-us/pricing/enterprise-agreement/). +Don't order Visual Studio Marketplace services through your reseller. + +####Q: Can I use the Azure Monetary Commitment funds from my Enterprise Agreement to buy from the Visual Studio Marketplace? + +A: Yes. You can use these prepaid funds to pay for: + +* [VSTS users](https://marketplace.visualstudio.com/items?itemName=ms.vss-vstsuser) +* [Microsoft-published extensions for VSTS and Team Foundation Server](https://marketplace.visualstudio.com/vsts) +* [Virtual user minutes for Cloud-based Load Testing](/vsts/billing/buy-more-build-vs) +* [HockeyApp user plans](https://marketplace.visualstudio.com/subscriptions) +* [Xamarin University](https://www.xamarin.com/university) + +You can't use these funds to pay for Visual Studio cloud +subscriptions and non-Microsoft extensions for VSTS and Team Foundation Server. + +####Q: Can I use the Azure Free Trial to buy from the Visual Studio Marketplace? + +A: No, you can't use the +[Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/) +to pay for Visual Studio Marketplace purchases, +which applies to Visual Studio Team Services, HockeyApp plans, Xamarin University, and so on. +Instead, set up a separate Pay-As-You-Go Azure subscription, +which you can do before or during your purchase. + +####Q: Can I use the monthly Azure credits from Visual Studio subscriptions or Visual Studio Dev Essentials to buy from the Visual Studio Marketplace? + +A: No, you can't use the monthly Azure credits from +[Visual Studio subscriptions](https://www.visualstudio.com/products/subscriber-benefits-vs) +and [Visual Studio Dev Essentials](https://www.visualstudio.com/products/visual-studio-dev-essentials-vs.aspx) +to pay for Visual Studio Marketplace purchases. +However, you can use the included Azure subscriptions to bill your purchases. +Before you make purchases, you must +[remove your spending limit](https://azure.microsoft.com/pricing/spending-limits/) +from these subscriptions. + +Spending limit + + + +**Important:** Remove your spending limit indefinitely. +This prevents disabling your Azure subscription +when your monthly charges are billed the next month. +Otherwise, all resources billed to this subscription will be suspended, +including virtual machines and all other workloads. + +Remove spending limit indefinitely + +####Q: Where can I check my bill or correct any billing information on my Azure subscription? + +A: If you're the Azure account administrator, +[visit the Azure Account portal](https://account.windowsazure.com). diff --git a/docs/billing/_shared/qa-marketplace-support.md b/docs/billing/_shared/qa-marketplace-support.md new file mode 100644 index 00000000000..2e5873834f8 --- /dev/null +++ b/docs/billing/_shared/qa-marketplace-support.md @@ -0,0 +1,28 @@ +### Q: How do I get support for the Visual Studio Marketplace? + +A: Depending on the support you need: + +* Billing questions -- [Azure billing support](https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade) + +* Visual Studio subscriptions -- [subscriptions support](https://www.visualstudio.com/subscriptions/support) + +* Help with VSTS -- [VSTS support](https://www.visualstudio.com/team-services/support-visual-studio-team-services) + +* Help with Team Foundation Server -- [TFS support](https://www.visualstudio.com/team-services/tfs_support) + +* General marketplace help -- [Contact the Visual Studio Marketplace team](mailto:vsmarketplace@microsoft.com) + + +### Q: Can I use an Enterprise Agreement to buy from the Visual Studio Marketplace? + +A: Yes, please buy directly from the Visual Studio Marketplace +where you can bill purchases to the Azure subscription that was created +under your [Enterprise Agreement (EA)](https://azure.microsoft.com/en-us/pricing/enterprise-agreement/). +Don't order Visual Studio Marketplace services through your reseller. + + +### Q: How can I tell whether I have the necessary privileges to buy services in the Visual Studio Marketplace through my organization's Enterprise Agreement? + +A: The easiest approach to determine if you have the right privileges is to click the **Buy** button for a service offered in the Visual Studio Marketplace. You need to select an Azure subscription (which is a billing account) from a presented list of Azure subscriptions that are currently linked to your login. Because the name of the Azure subscription defaults to the type of billing account ("Pay-As-You-Go", "Enterprise Agreement", etc.), it is often clear if the Azure subscription is part of your Enterprise Agreement. + +Another approach is to attempt to visit the [Azure Enterprise Portal](http://ea.azure.com). If you can reach it successfully, then you already have either the Enterprise Admin or the Account Owner role. Only Account Owners can set up new Azure billing accounts in an Enterprise Agreement. If you cannot access the Azure Enterprise Portal, then please inquire within your organization to find out who your Enterprise Admin is, and ask that person to add you as an Account Owner within the Azure Enterprise Portal. If you are unable to find this person, you can [submit a support ticket](http://aka.ms/AzureEntSupport) and request the contact information. You need your organization's name and your Enterprise Agreement enrollment number for the support ticket. diff --git a/docs/billing/_shared/qa-no-accounts.md b/docs/billing/_shared/qa-no-accounts.md new file mode 100644 index 00000000000..3cadaee8695 --- /dev/null +++ b/docs/billing/_shared/qa-no-accounts.md @@ -0,0 +1,24 @@ +####Q: Why don't I see my VSTS account in the Visual Studio Marketplace? + +A: If you don't see your account when buying from the Visual Studio Marketplace, +try these steps: + +0. Check the identity that you use to sign in to the Visual Studio Marketplace. +In the top right corner of the page, click your user name to view your profile. +0. On the left side, make sure that your email address and directory are correct. +0. Close all browser windows. +0. Open a private or incognito browsing session. +0. Sign in to the Visual Studio Marketplace with the identity +that's a user in the VSTS account that you want. + + > [!TIP] + > If you're asked to choose "work or school account" or + > "personal account", this means you used an email address + > that's the same for a Microsoft account and a "work or school account" + > that's managed by your organization in Azure Active Directory. + > Although these identities have the same email address, + > they're still separate identities with different profiles, + > security settings, and permissions. + > + > Choose the identity that's the user in + > the VSTS account that you want to select. diff --git a/docs/billing/add-backup-billing-managers.md b/docs/billing/add-backup-billing-managers.md new file mode 100644 index 00000000000..91001aeed78 --- /dev/null +++ b/docs/billing/add-backup-billing-managers.md @@ -0,0 +1,42 @@ +--- +title: Add backup billing managers for your VSTS account +description: Add backup billing managers for your VSTS account +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: bd87ec5c-84f2-4efa-bc37-a6999cb9532e +ms.manager: douge +ms.author: estfan +ms.date: 04/28/2017 +--- + +# Add backup billing managers for your VSTS account + +**VSTS** + + + +To let others manage billing or make purchases through Visual Studio Marketplace for your VSTS account, +add **owner** or **contributor** roles to users in the Azure subscription that's linked to your VSTS account. + +For for information on billing, see [billing concepts](billing-concepts.md) + + +[Sign in to the Azure portal](https://portal.azure.com/) as the Azure subscription administrator. + +Choose the Subscriptions blade, and if there are more than one, choose the subscription to modify. + +Then in the IAM screen (shown below) follow the numbered steps: + +![access control adding owners and contributors](_img/set-up-billing/ap-add-owncontrib.png) + +Owners and contributors of the Azure subscription linked to your VSTS account can make purchases in the +Marketplace. Owners can also add these roles to other users. + +Learn more about [viewing access assignments for users](https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-manage-assignments#view-access-assignments). + +If needed, you can [pay for more users](buy-basic-access-add-users.md). + +Learn more about [adding roles in Azure portal](https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-configure#add-access). + + +[Troubleshooting](faq-billing-setup.md) diff --git a/docs/billing/billing-concepts.md b/docs/billing/billing-concepts.md new file mode 100644 index 00000000000..e88a8dc0c31 --- /dev/null +++ b/docs/billing/billing-concepts.md @@ -0,0 +1,75 @@ +--- +title: Understand how to buy VSTS services +description: Understand what you need to setup to pay for VSTS users, build & release pipelines, extensions, and cload testing for VSTS +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: e8991424-ab10-4188-aa44-66e9af288c11 +ms.manager: douge +ms.author: estfan +ms.date: 04/28/2017 +--- + +# VSTS billing concepts + +**VSTS** + +You have to set up billing when you need more than the free limits in your VSTS account (number of Team +Services users, pipelines for Build & Release, or virtual user minutes for Cloud-Based Load Testing. Also, when +you want to buy VSTS extensions from the +[Visual Studio Marketplace](https://marketplace.visualstudio.com/). Learn [what you get for free in VSTS](https://www.visualstudio.com/team-services/pricing/). + +> If this is your first time paying for VSTS users, pipelines, +> or extensions, you can go directly to the Visual Studio Marketplace and +> set up billing during your first purchase: +> +> * [Pay for more users](buy-basic-access-add-users.md) +> * [Buy more capacity for Build & Release](buy-more-build-vs.md) +> +> Otherwise, if you're buying Cloud-Based Load Testing for the first time, +> or if you want to change the Azure subscription that you use for billing, +> follow the steps in this topic to go through the Azure portal. +> +> To change the Azure subscription that's linked to your VSTS account, +> [unlink your VSTS account](change-azure-subscription.md), +> then [relink your account to another Azure subscription](set-up-billing-for-your-account-vs.md#Link). + +## What do I need to set up billing? + +Microsoft Azure handles billing for your VSTS account, +so you'll need: + +* [VSTS project collection administrator or account owner permissions](../accounts/faq-add-delete-users.md#find-owner) + + + +* An [Azure subscription](faq-billing-setup.md#AzureMSDNSubscription) to bill your purchases. +You must have at least [an **owner** or **contributor** role](add-backup-billing-managers.md) +to link this subscription to your VSTS account. + + [Sign up for an Azure subscription](https://portal.azure.com), + if you don't have one. Or have an Azure administrator + [add you as an **owner** or **contributor** role](add-backup-billing-managers.md) + to an Azure subscription that you can use to bill purchases. + Make sure to use the same email address + that you sign in to VSTS with for this activity. + + You'll link this Azure subscription to your VSTS + account in the [Azure portal](https://portal.azure.com). Your + Azure subscription has all the necessary billing information, + so you won't set this up separately for your VSTS account. + [How does Azure billing work?](faq-billing-setup.md#azure-billing) + + If you've lost access to your Azure subscription, + contact [Azure Support](http://azure.microsoft.com/en-us/support/options/). + + +## Next + +[Link work accounts to Visual Studio with MSDN subscriptions](link-msdn-subscription-to-organizational-account-vs.md) + +[Link Azure subscription to VSTS Account](set-up-billing-for-your-account-vs.md) + +[Add backup billing managers](add-backup-billing-managers.md) + +[Change Azure subscription for billing](change-azure-subscription.md) + diff --git a/docs/billing/breadcrumb/toc.yml b/docs/billing/breadcrumb/toc.yml new file mode 100644 index 00000000000..f1c274ae8cf --- /dev/null +++ b/docs/billing/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Admin + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=admin + items: + - name: Billing + tocHref: /vsts/ + topicHref: /vsts/billing/index \ No newline at end of file diff --git a/docs/billing/buy-access-tfs-test-hub.md b/docs/billing/buy-access-tfs-test-hub.md new file mode 100644 index 00000000000..b6d5d0e364f --- /dev/null +++ b/docs/billing/buy-access-tfs-test-hub.md @@ -0,0 +1,140 @@ +--- +title: Buy access to TFS or Test hub | Team Foundation Server (TFS) +description: Get more access to Team Foundation Server (TFS) or the Test hub +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: B6BED64A-DA53-4AB0-B200-85F86A869D7B +ms.manager: douge +ms.author: estfan +ms.date: 10/21/2016 +--- + +# Buy access to Team Foundation Server or TFS Test hub + +**TFS 2015.2** + +> **Required:** TFS 2015.2 or later to buy monthly access + +For [TFS](https://www.visualstudio.com/tfs/) +and [Visual Studio Team Services](https://www.visualstudio.com/team-services/), +you usually pay per user so they can access your TFS or your VSTS account. +Some users are free, like [Visual Studio subscribers](https://www.visualstudio.com/vs/pricing/), +[stakeholders who can access limited features](../quickstart/get-started-stakeholder.md), +and 5 users in each VSTS account. +If you need to add more than these users, +you can just pay monthly for these users in your VSTS account. +This works for TFS too because each paid +[VSTS user](https://www.visualstudio.com/team-services/pricing/) +can also access your TFS. You don't have to use VSTS; +you can just create a VSTS account to pay for more TFS users. + +[Follow these steps to pay monthly for TFS users](#rent-cal). + +For users who have TFS client access (CALs) or paid monthly access, +you can get some additional features on a monthly basis, +like [Test Manager](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web) +which provides access to the full test capabilities in the Test hub for TFS and VSTS. + +[Follow these steps to pay monthly for TFS Test hub access](#test-hub). + +To learn more about requirements to access TFS or the Test hub, +see [Change access levels](../security/change-access-levels.md). +For more about TFS licensing, see the +[Team Foundation Server pricing page](https://www.visualstudio.com/team-services/tfs-pricing). + + +## Buy monthly access to TFS + +0. [Sign up for a VSTS account](../accounts/create-account-msa-or-work-student.md), +if you don't have one already. + +0. Based on the number of users who need TFS CALs, +[pay for users who need Basic access](buy-basic-access-add-users.md). + +0. If you haven't already, sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```). + +0. [Add your users who need Basic access](../accounts/add-account-users-assign-access-levels.md) +to your VSTS account so that you can track these users more easily. + + Though these users will get invited to your VSTS account, + you're not required to use VSTS. + +0. As TFS administrator, +now [add these same users to TFS](../accounts/add-users.md#add-users-team-project), +and [give them the necessary access](../security/change-access-levels.md). + + **Note** TFS doesn't detect what happens in VSTS + so make sure to add these users to TFS and assign them the + access that they need. + + If you stop paying for these VSTS users, + your TFS administrator should remove those users from TFS. + + +## Buy monthly access to the Test hub + +0. [Sign up for a VSTS account](../accounts/create-account-msa-or-work-student.md), +if you don't have one already. + +0. Based on the number of users who need TFS CALs, +[pay for users who need Basic access](buy-basic-access-add-users.md). + +0. [Buy the Test Manager extension](../marketplace/install-vsts-extension.md#install-extension) +for users who need Test hub access. + + Test Manager is installed automatically in your VSTS account. + +0. If you haven't already, sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```). + +0. [Add your users who need Basic access](../accounts/add-account-users-assign-access-levels.md) +to your VSTS account and +[assign them the Test Manager extension](../marketplace/assign-paid-extensions.md) +so that you can track these users. + + Though these users will get invited to your VSTS account, + you're not required to use VSTS. + These users can now download and install the trial version + for Visual Studio Test Professional 2015 or later. + After they sign in to Visual Studio Test Professional, + this product will no longer be under trial. + + **Note** These users must sign in to Visual Studio Test Professional with + the same credentials that they used to join your VSTS account. + +0. As TFS administrator, [add these same users to TFS](../accounts/add-users.md#add-users-team-project) +if necessary. [Give them Advanced access](../security/change-access-levels.md) +so they can use the Test hub. + + **Note** TFS doesn't detect what happens in VSTS + so make sure these users get Advanced access in TFS. + + If you stop paying for these VSTS users, + your TFS administrator should remove those users from TFS. + +## Q&A + + + +####Q: Why should I pay for VSTS users to access TFS or the Test hub? + +A: You get many benefits, for example: + +* VSTS users give you the flexibility +to access both TFS and VSTS. +* You get a simpler way to manage users who need temporary access. +* You get all the purchasing capabilities that Azure offers, +like payment by credit card and more. + +####Q: Where can I learn more about TFS CALs and access levels for the Test hub? + +A: See [Change access levels](../security/change-access-levels.md). + +####Q: Where can I find more VSTS extensions and more info about the Visual Studio Marketplace? + +A: See [VSTS extensions](https://marketplace.visualstudio.com/vsts) +and [Visual Studio Marketplace Overview](/vsts/marketplace/overview). + + + diff --git a/docs/billing/buy-basic-access-add-users.md b/docs/billing/buy-basic-access-add-users.md new file mode 100644 index 00000000000..7ef3346e45c --- /dev/null +++ b/docs/billing/buy-basic-access-add-users.md @@ -0,0 +1,229 @@ +--- +title: Buy Basic access to add VSTS users | Visual Studio Team Services +description: Buy Basic access to add more users in Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 02cb8774-6d1d-4f15-8818-b56541033b1f +ms.manager: douge +ms.author: estfan +ms.date: 1/10/2017 +--- + +# Pay for VSTS users who need Basic access + +**VSTS** + +You can add these users to your VSTS account for free: + +* 5 users who get [Basic](https://www.visualstudio.com/team-services/compare-features/) +features like version control, tools for Agile, Java, build, release management, and more +* Unlimited [Stakeholders](https://www.visualstudio.com/team-services/compare-features/) +who get more restricted features like working with your backlog, work items, and queries +* Unlimited [Visual Studio subscribers](https://www.visualstudio.com/team-services/compare-features/) +who also get Basic features, and in some cases, additional features with specific extensions like +[Test Manager](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web) + +When your account stays within these free limits, +you don't have to pay for these users to join your account. +If you have to add 6 users or more who need Basic access, +you can pay monthly for additional users in the Visual Studio Marketplace. +Each of these users also gets a Team Foundation Server +CAL (Client Access License) to access an on-premises TFS, +so you can buy monthly TFS access for your team. To calculate pricing, +[go to the Azure pricing calculator](https://azure.microsoft.com/en-us/pricing/calculator/?service=visual-studio-team-services), +or learn about [VSTS user pricing for Basic access](https://www.visualstudio.com/team-services/pricing/). +If you previously paid for Basic access through the Azure portal, +you can still [find those steps here](faq-pay-for-basic-users.md#update-paid-users-azure). + +>

Need more Visual Studio subscriptions? ▼

+>
+>

Visual Studio subscriptions give you flexible ways to access VSTS +> and to license the Visual Studio IDE and other Microsoft software for dev and test. +> To buy more [Visual Studio subscriptions](https://www.visualstudio.com/products/how-to-buy-vs), +> visit the [Visual Studio Marketplace](https://marketplace.visualstudio.com/subscriptions), +> or learn [how to buy Visual Studio subscriptions here](vs-subscriptions/buy-vs-subscriptions.md). +>

+> +>

Need to change paid extension users instead? ▼

+>
+>

To change the number of paid extension users that you have in your VSTS account, +> learn [how to update your paid extension users here](change-number-paid-extension-users.md). +>

+> +>

How does access differ from permissions? ▼

+>
+>

Access levels control which features are available to users, +> while permissions control access to account resources. +> Learn how to [manage users and access levels here](../accounts/add-account-users-assign-access-levels.md). +> For TFS, learn how to [change access levels here](../security/change-access-levels.md) +> or [buy more access to TFS or the Test hub here](buy-access-tfs-test-hub.md). +> +> To manage permissions for VSTS or TFS instead, +> learn how to [add permissions here](../accounts/add-users.md) or +> [restrict permissions here](../accounts/restrict-access-tfs.md). +>

+ +## Before you start + +* To manage users, you'll need VSTS +[project collection administrator or account owner permissions](faq-pay-for-basic-users.md#FindOwnerPCA). + +* You'll need an Azure subscription +that you can link to your VSTS account for billing, +if your VSTS account isn't linked already. +[Which Azure subscriptions can I use?](faq-pay-for-basic-users.md#AzureMSDNSubscription) + + To use an existing Azure subscription for billing, + you'll need at least Co-administrator permissions for that subscription. + If you don't have permissions, + have an Azure Account Administrator or Service Administrator + [add you as a Co-administrator to the Azure subscription that you want to use for billing](add-backup-billing-managers.md). + + If you don't have an Azure subscription, + you can create a subscription when you start your purchase. + Or [create your Azure subscription here before you start](https://portal.azure.com). + You'll get the necessary administrator permissions + with your new subscription. + + Your VSTS account will reuse this Azure subscription + when you make future purchases for your VSTS account + from the [Visual Studio Marketplace](https://marketplace.visualstudio.com) + or from Azure. [More about Azure subscriptions for billing](faq-pay-for-basic-users.md#billing) + + + + +## Pay for more VSTS users who need Basic access + +0. As VSTS project collection administrator or account owner, +sign in to [**Visual Studio Marketplace** > **Other** > **VSTS Users**](https://marketplace.visualstudio.com/items?itemName=ms.vss-vstsuser), +and choose **Buy**. + + ![Go to Visual Studio Marketplace, Other, VSTS Users](_img/buy-more-basic-access/team-services-users-vs-marketplace.png) + +0. Select your VSTS account, +if you have multiple accounts. + + ![Select your VSTS account](_img/buy-more-basic-access/select-team-services-account-vs-marketplace.png) + +

Don't see your VSTS accounts? ▼

+
+

To select your VSTS account here, you must have have VSTS + [project collection administrator or account owner permissions](faq-pay-for-basic-users.md#FindOwnerPCA). +

+ +0. Confirm the Azure subscription that you'll use for billing. + + If you have multiple Azure subscriptions, + select the Azure subscription that you want to use. + Or if you don't have an Azure subscription, + create a new subscription now to use for billing. + [More about Azure subscriptions for billing](faq-pay-for-basic-users.md#billing) + + ![Confirm or select your Azure subscription](_img/buy-more-basic-access/confirm-azure-subscription-vs-marketplace.png) + +

Don't see the Azure subscription that you expect? ▼

+
+

To use an existing Azure subscription for billing, + you'll need at least Co-administrator permissions for that subscription. + If you don't have permissions, + have an Azure Account Administrator or Service Administrator + [add you as a Co-administrator to the linked Azure subscription](add-backup-billing-managers.md). +

+ +0. Enter the number of users who need paid Basic access. + + ![Enter the number of users who need paid Basic access](_img/buy-more-basic-access/select-number-users-vs-marketplace.png) + +0. Now go to your VSTS account, +[add your new users, and assign them Basic access](../accounts/add-account-users-assign-access-levels.md). + + ![Go to your VSTS account](_img/buy-more-basic-access/confirm-basic-access-purchase-vs-marketplace.png) + + The number of users who you can assign paid Basic access appears here. + + ![Number of users who you can assign paid Basic access](_img/buy-more-basic-access/paid-basic-access-for-team-services-users.png) + + Your user summary shows only the number of users with access levels assigned to them. + + + +## Change number of users who have paid Basic access + +When your team size changes, and you have to update the users +who have paid Basic access in your VSTS account, +update this quantity in the Visual Studio Marketplace, +whether you're adding or removing these users. + +For example, if you remove users who have paid +Basic access from your VSTS account, +you must reduce them too in the Visual Studio Marketplace. That way, +you're not charged for them when your next Azure billing cycle starts. +If you previously managed paid Basic access through the Azure portal, +you can still [find those steps here](faq-pay-for-basic-users.md#update-paid-users-azure). + +> To reduce or cancel users who have paid Basic access for the next month, +> you must make your changes before the last day of the month. +> Your charges won't change until the next month because paid users are monthly purchases. + +### Before you start + +* You'll need VSTS +[project collection administrator or account owner permissions](faq-pay-for-basic-users.md#FindOwnerPCA). + +* You'll need at least Co-administrator permissions for the Azure subscription +that's linked to your VSTS account for billing. If you don't have permissions, +have an Azure Account Administrator or Service Administrator +[add you as a Co-administrator to the linked Azure subscription](add-backup-billing-managers.md). + +### Update number of users who have paid Basic access + +0. As VSTS project collection administrator or account owner, +sign in to [**Visual Studio Marketplace** > **Other** > **VSTS Users**](https://marketplace.visualstudio.com/items?itemName=ms.vss-vstsuser), +and choose **Buy**. + + ![Go to Visual Studio Marketplace, Other, VSTS Users](_img/buy-more-basic-access/team-services-users-vs-marketplace.png) + +0. Select your VSTS account, +if you have multiple accounts. + + ![Select your VSTS account](_img/buy-more-basic-access/select-team-services-account-vs-marketplace.png) + +

Don't see your VSTS accounts? ▼

+
+

To select your VSTS account here, you must have have VSTS + [project collection administrator or account owner permissions](faq-pay-for-basic-users.md#FindOwnerPCA). +

+ +0. Update your total users who have paid Basic access. +To cancel all your paid users, +reduce this number to zero (0). + + For example, we're going to increase our total paid users from this number: + + ![Current number of users who have paid Basic access](_img/buy-more-basic-access/select-number-users-vs-marketplace.png) + + to this number: + + ![Increase users who have paid Basic access](_img/buy-more-basic-access/select-number-users-vs-marketplace-add-more.png) + + **Note** When you reduce users, make sure that you don't have more users with paid Basic + access in your VSTS account than you have in the Visual Studio Marketplace. + Otherwise, when the next Azure billing cycle starts, + the paid users who haven't signed into your account the longest will lose access first. + If you [pay for TFS client access licenses (CALs) through VSTS](buy-access-tfs-test-hub.md), + make sure that you still have enough CALs for the users who need them. + + +

What if I reduce users during the month? ▼

+
+

Your charges won't change until the next month + because paid Basic access is a monthly commitment. +

+ +0. Confirm your changes. Go back to your VSTS account to +[reassign access levels for your users, if necessary](../accounts/add-account-users-assign-access-levels.md). + + ![Reassign user access levels, if necesary](_img/buy-more-basic-access/confirm-updated-basic-access-purchase-vs-marketplace.png) + diff --git a/docs/billing/buy-load-testing-vs.md b/docs/billing/buy-load-testing-vs.md new file mode 100644 index 00000000000..3f26368d961 --- /dev/null +++ b/docs/billing/buy-load-testing-vs.md @@ -0,0 +1,156 @@ +--- +title: How to buy cloud-based load testing | VSTS +description: Buy cloud-based load testing in Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: A93C7909-4F5B-4758-B6CE-8DE127A91FB9 +ms.manager: douge +ms.author: kaelli +ms.date: 04/28/2017 +--- + +# How to buy cloud-based load testing in Visual Studio Team Services + +**VSTS** + +You can purchase additional minutes to support [load testing your apps](../load-test/index.md). You can create load tests using Visual Studio Ultimate 2013, Visual Studio Enterprise 2015, or later versions. You can then run these tests in VSTS. + +Load tests are measured and billed in virtual user minutes (VUM) as described in this Q&A: [What are virtual user minutes (VUMs)? How many minutes will my load test use?](../load-test/reference-qa.md#VUM). + +Your VSTS account includes **free** +20,000 virtual user minutes per month for cloud-based load testing. +If you need more than this amount, you must first +[set up billing for your VSTS account](set-up-billing-for-your-account-vs.md). +You can then [buy more Cloud-based Load Testing](#buy-load-testing) in the +[Azure classic portal](https://manage.windowsazure.com/) or the [Azure portal](https://portal.azure.com). + + + + +## Pre-requisites + +Before you start: + +* You'll need VSTS +[project collection administrator or account owner permissions](faq-pay-for-basic-users.md#FindOwnerPCA) +to purchase for your VSTS account. + +* You must first +[set up billing for your VSTS account](set-up-billing-for-your-account-vs.md), +if you haven't already. You'll need an [Azure subscription](faq-pay-for-basic-users.md#AzureMSDNSubscription) +that you can link to your VSTS account for billing. + +* If you're going through the Azure portal, you'll also need at least +[Co-administrator permissions](add-backup-billing-managers.md) +for the Azure subscription that's linked to your VSTS account for billing. + +You can follow the steps below for the Azure classic portal +or the Azure portal. Both portals will give you the same results. + +
+ + +
+
+

**Azure portal** +

+

    +
  1. [Sign in to the Azure portal](https://portal.azure.com/). +

    If you experience browser problems with Azure, +make sure that you use a [supported browser](https://azure.microsoft.com/en-us/documentation/articles/azure-preview-portal-supported-browsers-devices/). +

  2. Go to **More services** > **Developer tools** > **VSTS accounts**. +Select your VSTS account. +

    +

    ![Browse, VSTS accounts, select your account](_img/_shared/ap_vso_selectlinkedaccount.png) +

    +

    [Why don't I see my VSTS account?](faq-pay-for-basic-users.md#WhyNoVSOAccount) +

    +

  3. Select **Cloud-based load testing**. +

    +

    ![Click Settings, select Clouse-based load testing](_img/get-more-build-load-testing/ap_vso_manageservices.png) +

    +

  4. Turn on paid load testing. +

    +

    If you want, set a monthly limit on the virtual user minutes that you use. +When you're done, save your changes. +

    +

    ![Click Paid, select an optional monthly limit, save changes](_img/get-more-build-load-testing/ap_vso_paidcloudloadtesting.png) +

    +

+
+ +
+

**Azure classic portal** +

+

    +
  1. [Sign in to the Azure classic portal](https://manage.windowsazure.com/) +as your Azure subscription Co-administrator. +

    +

    If you experience browser problems with Azure, +make sure that you use a [supported browser](https://azure.microsoft.com/en-us/documentation/articles/azure-preview-portal-supported-browsers-devices/). +

    +

  2. Select your VSTS account. +

    +

    ![Select your VSTS account](_img/_shared/azurechooselinkedaccount.png) +

    +

    [Why don't I see my VSTS account?](faq-pay-for-basic-users.md#WhyNoVSOAccount) +

    +

  3. Go to **Scale**. +

    +

    ![Click Scale](_img/_shared/azurescalelicensesresources.png) +

    +

  4. Turn on paid Load Testing. +You can also set monthly limits on the amounts that your account uses. +

    +

    You're not charged until your account goes above the free monthly amounts. +

    +

    ![Turn on paid Load Testing. Select optional monthly limits](_img/get-more-build-load-testing/azuremanageresources.png) +

    +

  5. When you're done, save your changes. +

    +

    ![Save changes](_img/_shared/save-changes.png) +

    +

    To check the amounts used by your account, +you can come back to the Azure classic portal. +

    +

    ![Check amounts used on your account dashboard in Azure](_img/get-more-build-load-testing/azuredashboard.png) +

    +

+
+ + +
+ +## Related notes + +- [Build your app](../build-release/apps/index.md) +- [Load test your app](../load-test/get-started-simple-cloud-load-test.md) +- [How to buy more pipeline capacity for builds and releases in VSTS](buy-more-build-vs.md) +- [Marketplace support](../marketplace/marketplace-billing-qa.md) + + +## Limits on load testing + +There's a limit on the duration for each test run. For Cloud-based Load Testing, the limit depends on where you're +running your test. For details, see [this Q&A](../load-test/reference-qa.md#test-limits). + + +## Billing and free monthly limits + +You're charged only for services used above the free monthly limits. Your charges are prorated during the first +month. After that, you're billed automatically on the 1st day of the calendar month. + +* Free minutes reset on the 1st of the month. + +* For Cloud-based Load Testing, you're charged for each + [virtual user minute](../load-test/reference-qa.md#VUM). + +* Graduated discounts Cloud-based Load Testing +are calculated based on your Azure subscription billing cycle. + +Learn more about [pricing here](https://www.visualstudio.com/team-services/pricing). + diff --git a/docs/billing/buy-more-build-vs.md b/docs/billing/buy-more-build-vs.md new file mode 100644 index 00000000000..49bb8c43775 --- /dev/null +++ b/docs/billing/buy-more-build-vs.md @@ -0,0 +1,244 @@ +--- +title: How to buy build hosted and private pipelines | VSTS +description: Buy more capacity for builds and releases by purchasing more private or hosted pipelines in Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 3f42a1b2-1a32-440a-bf43-61006c59c5bf +ms.manager: douge +ms.author: kaelli +ms.date: 04/28/2017 +--- + +# How to buy more pipeline capacity for builds and releases in Visual Studio Team Services + +**VSTS** + +VSTS offers these +[additional team services](https://www.visualstudio.com/team-services/pricing): + +Create, queue, and monitor cross-platform builds and releases with these [Build & Release task-based services](../build-release/concepts/licensing/concurrent-pipelines-ts.md). +Use Hosted Pipelines to run builds and deploy releases concurrently on Microsoft-managed +agents. Use Private Pipelines to run builds and deploy releases on machines that you manage, +running agent software from Microsoft. + + > To better connect with Release Management, **Build & Deployment** was renamed **Build & Release**. + > Unit names are now **Hosted Pipelines** and **Private Pipelines**, rather than Hosted Agents and Private Agents. + + Each pipeline lets you run 1 build or deploy 1 release at a time. + The maximum number of concurrent builds that you can run and releases + that you can deploy at the same time is limited only by the number of pipelines that you have. + + Your VSTS account includes these **free** amounts: + + * 1 free Private Pipeline + + With this free Private Pipeline, run unlimited concurrent builds + or deploy 1 release at a time in Team Foundation Server 2017, + or run 1 build or deploy 1 release at a time in VSTS on + agent software from Microsoft. Private agents are now free and unlimited. + Each Visual Studio Enterprise subscriber also contributes + a Private Pipeline that you can use. You can also + [buy more Private Pipelines](#buy-build-release). + + * 1 free Hosted Pipeline + + With this free Hosted Pipeline, you get 4 hours (240 minutes) per month + and a maximum duration of 30 minutes per build or deployment in VSTS. + If you just need more build time for 1 concurrent build or release, + [buy another Hosted Pipeline](#buy-build-release) without the 4-hour limit + to increase your maximum duration per build or deployment up to 6 hours. + For more concurrent builds or releases, [buy more Hosted Pipelines](#buy-build-release). + + Learn about: + + * [VSTS: Build & Release pipelines](../build-release/concepts/licensing/concurrent-pipelines-ts.md) + * [TFS: Build & Release pipelines](../build-release/concepts/licensing/concurrent-pipelines-tfs.md) + * [Pricing for Build & Release pipelines](https://www.visualstudio.com/team-services/pricing) + + + + * **Build (XAML)**: The hosted XAML build controller is no longer supported. + Accounts created on or after April 2016 do not have access to it. + We plan to remove the hosted XAML build controller from all accounts on July 1 2017. + + > **Important:** If you have an account where you still need to run [XAML builds](https://msdn.microsoft.com/en-us/library/ms181709%28v=vs.120%29.aspx), + > you should set up an [on-premises build server](https://msdn.microsoft.com/en-us/library/ms252495%28v=vs.120%29.aspx) + > and switch to an [on-premises build controller](https://msdn.microsoft.com/en-us/library/ee330987%28v=vs.120%29.aspx) now. + > If you used the hosted XAML build controller, you might have been paying for build minutes, which is a model we no longer support. + > Please purchase concurrent pipelines. See [Buy pipelines for Build & Release](#buy-build-release). + > We will soon block the hosted pool from using the per-minute billing model. + > By making this switch, you can run longer builds (unlimited minutes within reason). + + +> [!NOTE] +> When you pay for pipelines, you can run more than one build or release at the same time +> in your VSTS account. Learn [about pipeline pricing](https://www.visualstudio.com/team-services/pricing) +or [how pipelines work](../build-release/concepts/licensing/concurrent-pipelines-ts.md). + + + +## Pre-requisites + +Before you start: + +* You'll need VSTS +[project collection administrator or account owner permissions](faq-pay-for-basic-users.md#FindOwnerPCA) +to purchase for your VSTS account. + +* You'll need an Azure subscription that you can +link to your VSTS account for billing, +if your VSTS account isn't linked already. +[Which Azure subscriptions can I use?](faq-pay-for-basic-users.md#AzureMSDNSubscription) + + To use an existing Azure subscription for billing, + you'll need at least Co-administrator permissions for that subscription. + If you don't have permissions, have an Azure Account + Administrator or Service Administrator + [add you as Co-administrator to the Azure subscription that you want to use for billing](add-backup-billing-managers.md). + + If you don't have an Azure subscription, + you can create a subscription when you start your purchase. + Or [create your Azure subscription here before you start](https://portal.azure.com). + You'll get the necessary administrator permissions + with your new subscription. + + Your VSTS account will reuse this Azure subscription + when you make future purchases for your VSTS account + from the [Visual Studio Marketplace](https://marketplace.visualstudio.com) + or from Azure. [More about Azure subscriptions for billing](faq-pay-for-basic-users.md#billing). + +## Buy pipelines + +> **Note** If you previously bought agents in the Azure portal, they're now pipelines, +> but don't worry, your monthly purchases and pricing won't change. +> If you need to change the number of pipelines that you're buying each month, +> please go to the Visual Studio Marketplace. +> We plan to retire the experience for buying agents in the Azure portal soon. + + +0. As VSTS project collection administrator or account owner, +sign in to either: + + * [**Visual Studio Marketplace** > **Build and release** > **Hosted pipelines for Build and Release**](https://marketplace.visualstudio.com/items?itemName=ms.build-release-hosted-pipelines) + * [**Visual Studio Marketplace** > **Build and release** > **Private pipelines for Build and Release**](https://marketplace.visualstudio.com/items?itemName=ms.build-release-private-pipelines)

+ +0. Choose **Buy** for your selected pipeline. + + ![Select your VSTS account](_img/get-more-build-load-testing/buy-hosted-build-release-pipelines.png) + +0. Select your VSTS account, +if you have multiple accounts. + + ![Select your VSTS account](_img/get-more-build-load-testing/select-team-services-account.png) + +

Don't see your VSTS accounts? ▼

+
+

To select your VSTS account here, you must have have VSTS + [project collection administrator or account owner permissions](faq-pay-for-basic-users.md#FindOwnerPCA). +

+ +0. Confirm the Azure subscription that you'll use for billing. + + If you have multiple Azure subscriptions, + select the Azure subscription that you want to use. + Or if you don't have an Azure subscription, + create a new subscription now to use for billing. + [More about Azure subscriptions for billing](faq-pay-for-basic-users.md#billing) + + ![Confirm or select your Azure subscription](_img/get-more-build-load-testing/select-azure-subscription.png) + +

Don't see the Azure subscription that you expect? ▼

+
+

To use an existing Azure subscription for billing, + you'll need at least Co-administrator permissions for that subscription. + If you don't have permissions, + have an Azure Account Administrator or Service Administrator + [add you as a Co-administrator to the linked Azure subscription](add-backup-billing-managers.md). +

+ +0. Select the number of pipelines that you want to buy. +Finish your purchase. + + ![Select number of pipelines to buy](_img/get-more-build-load-testing/select-number-hosted-pipelines.png) + +0. To view your pipelines, go to your VSTS account. + + ![View pipelines in your VSTS account](_img/get-more-build-load-testing/confirm-hosted-pipeline-purchase.png) + + ![Go to VSTS account toolbar > Build and Release](_img/get-more-build-load-testing/manage-pipelines-team-services.png) + + To return to the Build & Release hub in + your VSTS account at any time, + go to your VSTS account toolbar, + then go to **Build and Release** + (```https://{youraccount}.visualstudio.com/_admin/_buildQueue?_a=resourceLimits```). + + +## Change your purchased pipelines + +When your team's needs for build or release capacity changes, +you can update the number of pipelines that you bought. + +0. Go to your VSTS account toolbar, +then go to **Build and Release** +(```https://{youraccount}.visualstudio.com/_admin/_buildQueue?_a=resourceLimits```). + + ![Go to VSTS account toolbar > Build and Release](_img/get-more-build-load-testing/manage-pipelines-team-services.png) + +0. Choose **Change purchased quantity** +for the paid pipeline that you want to update, +so you can go to the Visual Studio Marketplace. + +0. In the Visual Studio Marketplace, +choose **Buy**, select your VSTS account, +then update your number of paid pipelines. + + + +## Related notes + +- [Build your app](../build-release/apps/index.md) +- [Concurrent build and release pipelines in Visual Studio Team Services](../build-release/concepts/licensing/concurrent-pipelines-ts.md) +- [Concurrent release pipelines in Team Foundation Server](../build-release/concepts/licensing/concurrent-pipelines-tfs.md) +- [How to buy cloud-based load testing in VSTS](buy-load-testing-vs.md) +- [Marketplace support](../marketplace/marketplace-billing-qa.md) + + + + + + +## Limits on builds and releases + +Your free hosted pipeline includes 4 hours per month +for builds and releases with a maximum duration of 30 minutes per build or deployment. +A paid hosted pipeline increases your maximum duration to 6 hours per build or deployment. + + +## Billing and free monthly limits + +You're charged only for services used above the free monthly limits. Your charges are prorated during the first +month. After that, you're billed automatically on the 1st day of the calendar month. + +* Free minutes reset on the 1st of the month. + +* Each paid hosted pipeline or private pipeline +includes unlimited minutes per month, within reason. + +* Each connected private XAML controller is counted as one private pipeline, +although a private XAML controller can host more than one agent. + +* For Cloud-based Load Testing, you're charged for each + [virtual user minute](../load-test/reference-qa.md#VUM). + +* Graduated discounts Cloud-based Load Testing +are calculated based on your Azure subscription billing cycle. + +Learn more about [pricing here](https://www.visualstudio.com/team-services/pricing). + + +## Support + +Try the [VSTS forum](https://social.msdn.microsoft.com/Forums/en-us/home?forum=TFService) +or [VSTS Support](https://www.visualstudio.com/team-services/support). + diff --git a/docs/billing/change-azure-subscription.md b/docs/billing/change-azure-subscription.md new file mode 100644 index 00000000000..13c16c7ff85 --- /dev/null +++ b/docs/billing/change-azure-subscription.md @@ -0,0 +1,93 @@ +--- +title: Change the Azure subscription your VSTS account uses for billing +description: Change the Azure subscription your VSTS account uses for billing +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: e447adb1-6208-49f6-a488-515aa4b2fdcf +ms.manager: douge +ms.author: estfan +ms.date: 04/28/2017 +--- + +# Change the Azure subscription your VSTS account uses for billing + +**VSTS** + + +If you want to use another Azure subscription to bill purchases for your VSTS account, +you can unlink your VSTS account from your current Azure subscription, +and relink your account to another Azure subscription that's associated with you as the VSTS account owner. + + +## What do I need to change my Azure subscription? + +* VSTS project collection administrator or account owner permissions ([How do I find the project collection administrator or account owner permissions](../accounts/faq-add-delete-users.md#find-owner)) + +* At least [an **owner** or **contributor** role](add-backup-billing-managers.md) for both Azure subscriptions + +> When you unlink your account, any paid users or pipelines that you've +> committed for the month will stay unaffected until the 1st of next month, +> but your account will revert immediately to the free monthly limits +> for Cloud-based Load Testing. This will also cancel any +> non-Microsoft paid extensions without refund or credit. +> +> When you relink your account to another Azure subscription, +> you'll have to add your paid users again, +> extensions, and pipelines by repurchasing them in the +> Visual Studio Marketplace, or if applicable, +> resetting previous quantities in the Azure portal. If +> you've paid for any Microsoft resources this month, +> those resources won't be billed again, +> but rebuying non-Microsoft extensions +> will be treated as new purchases and +> billed immediately to your new Azure subscription. +> +> If you wait until the 1st of next month to relink, +> your VSTS account will revert back to the free amounts, +> for example, 5 free users. This means that if you have +> any paid users, they'll appear expired in your VSTS account. +> So, make sure to restore any paid users so they don't lose access +> on the 1st of next month. + + + +## Change subscription + +0. [Sign in to the Azure portal](https://portal.azure.com/) +as VSTS account owner and as Azure subscription Co-administrator or greater. + + If you experience browser problems with Azure, + make sure that you use a [supported browser](https://azure.microsoft.com/en-us/documentation/articles/azure-preview-portal-supported-browsers-devices/). + +0. Go to **More services** > **Developer tools** > **VSTS accounts**. +Select your VSTS account. + + ![More services, Developer tools, VSTS, select your account](_img/_shared/ap_vso_selectlinkedaccount.png) + +0. Unlink your account. + + ![Unlink your account](_img/_shared/azure-portal-unlink-subscription.png) + + Your VSTS account is removed from Azure. + You'll now relink your account to a new Azure subscription. + +0. Go to **More services** > **Developer tools** > **VSTS accounts**. +Select your VSTS account. + + ![More services, Developer tools, VSTS accounts, select your account](_img/set-up-billing/ap_vso_startlink2.png) + +0. Select your Azure subscription. +Finish relinking your account. + + ![Select an Azure subscription](_img/set-up-billing/ap_vso_change-azure-subscription.png) + + After you finish relinking, + your account reappears in the Azure portal with + your selected Azure subscription. For more details, see + [how to link your VSTS account to an Azure subscription](set-up-billing-for-your-account-vs.md#AzurePortal). + +0. Follow these steps to restore any +[paid users](buy-basic-access-add-users.md) or +[agents](buy-more-build-vs.md) +that you had in Azure. + diff --git a/docs/billing/change-number-paid-extension-users.md b/docs/billing/change-number-paid-extension-users.md new file mode 100644 index 00000000000..3a665d00e0f --- /dev/null +++ b/docs/billing/change-number-paid-extension-users.md @@ -0,0 +1,42 @@ +--- +title: Change number of paid extension users for Visual Studio Team Services +description: Change number of paid extension users for Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: efbb3c0f-3128-4b34-bd3b-82f31677293f +ms.manager: douge +ms.author: elbatk +ms.date: 01/10/2017 +--- + +# Change number of paid extension users for Visual Studio Team Services + +**VSTS** + + +To scale with your team's needs, increase or decrease your total number of paid extension users. +You'll need VSTS +[project collection administrator or account owner permissions](../accounts/faq-add-delete-users.md#find-owner). + +> [!IMPORTANT] +> To cancel access completely for a paid extension, +> reduce all your paid users to zero (0). +> [How do you bill changes in users?](../marketplace/faq-extensions.md#bill-period) + +0. Sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```). + +0. Go to **Users**. + + Go to Users + +0. Go to the extension pane. +Change the number of extension users that you're paying for. + + Edit your total paid extension users + +0. Update your total paid extension users. + + Update total paid extension users + + diff --git a/docs/billing/faq-azure-billing.md b/docs/billing/faq-azure-billing.md new file mode 100644 index 00000000000..526e838ca49 --- /dev/null +++ b/docs/billing/faq-azure-billing.md @@ -0,0 +1,130 @@ +--- +title: Troubleshooting Azure billing for VSTS and Visual Studio Subscriptions +description: Troubleshooting Azure billing for VSTS and Visual Studio Subscriptions +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 62d94b8a-256a-4347-905a-3393f5d8a13f +ms.manager: douge +ms.author: elbatk +ms.date: 04/28/2017 +--- + +#Troubleshooting Azure billing + +**VSTS** + + +## Azure billing + +When you buy from the Visual Studio Marketplace, +you select an Azure subscription to use for billing. +If you don't have an Azure subscription, +you can [sign up](https://portal.azure.com) +either before or during your first purchase. +You can set up payment with a credit card, +or by invoice in some cases. Charges for your +purchases will show up on your monthly Azure bill. + +>[!NOTE] +>You must keep your Azure subscription in good +standing to use your Visual Studio Marketplace purchases. + + +If your Azure subscription is canceled or becomes disabled, +for example, because the credit card used for payment expires, +then any purchases with this Azure subscription will be +deactivated on the 1st day of next month. +To continue using your Visual Studio Marketplace purchases, +please keep your Azure subscription active and updated. + +For example, if you bought a Visual Studio Professional subscription, +and you used an Azure subscription that becomes disabled, +your Visual Studio Professional IDE will stop working on +the 1st of the following month. This also applies to annual +Visual Studio subscriptions that are paid in full for the year. + +###Q: Can I use an Enterprise Agreement to buy from the Visual Studio Marketplace? + +A: Yes, please buy directly from the Visual Studio Marketplace +where you can bill purchases to the Azure subscription that was created +under your [Enterprise Agreement (EA)](https://azure.microsoft.com/en-us/pricing/enterprise-agreement/). +Don't order Visual Studio Marketplace services through your reseller. + +###Q: How can I tell whether I have the necessary privileges to buy services in the Visual Studio Marketplace through my organization's Enterprise Agreement? + +A: The easiest approach to determine if you have the right privileges is to click the **Buy** button for a service offered in the Visual Studio Marketplace. You need to select an Azure subscription (which is a billing account) from a presented list of Azure subscriptions that are currently linked to your login. Because the name of the Azure subscription defaults to the type of billing account ("Pay-As-You-Go", "Enterprise Agreement", etc.), it is often clear if the Azure subscription is part of your Enterprise Agreement. + +Another approach is to attempt to visit the [Azure Enterprise Portal](http://ea.azure.com). If you can reach it successfully, then you already have either the Enterprise Admin or the Account Owner role. Only Account Owners can set up new Azure billing accounts in an Enterprise Agreement. If you cannot access the Azure Enterprise Portal, then please inquire within your organization to find out who your Enterprise Admin is, and ask that person to add you as an Account Owner within the Azure Enterprise Portal. If you are unable to find this person, you can [submit a support ticket](http://aka.ms/AzureEntSupport) and request the contact information. You need your organization's name and your Enterprise Agreement enrollment number for the support ticket. + + +###Q: Can I use the Azure Monetary Commitment funds from my Enterprise Agreement to buy from the Visual Studio Marketplace? + +A: You can use these prepaid funds to pay for: + +* [Team Services users](https://marketplace.visualstudio.com/items?itemName=ms.vss-vstsuser) +* [Microsoft-published extensions for Team Services and Team Foundation Server](https://marketplace.visualstudio.com/vsts) +* [Virtual user minutes for Cloud-based Load Testing](/vsts/billing/buy-more-build-vs) +* [HockeyApp plans](https://marketplace.visualstudio.com/subscriptions) + +You can't use these funds to pay for Visual Studio cloud +subscriptions and non-Microsoft extensions for Team Services and Team Foundation Server. + +###Q: Can I use the Azure Free Trial to buy from the Visual Studio Marketplace? + +A: No, you can't use the +[Azure Free Trial](https://azure.microsoft.com/en-us/pricing/free-trial/) +to pay for Visual Studio Marketplace purchases, +which applies to Visual Studio Team Services, HockeyApp user plans, and so on. +Instead, set up a separate Pay-As-You-Go Azure subscription, +which you can do before or during your purchase. + +###Q: Can I use the monthly Azure credits from Visual Studio subscriptions or Visual Studio Dev Essentials to buy from the Visual Studio Marketplace? + +A: No, you can't use the monthly Azure credits from +[Visual Studio subscriptions](https://www.visualstudio.com/products/subscriber-benefits-vs) +and [Visual Studio Dev Essentials](https://www.visualstudio.com/products/visual-studio-dev-essentials-vs.aspx) +to pay for Visual Studio Marketplace purchases. +However, you can use the included Azure subscriptions to bill your purchases. +Before you make purchases though, you must +[remove your spending limit](https://azure.microsoft.com/pricing/spending-limits/) +from these subscriptions. + +Spending limit + + + +>[!IMPORTANT] +>Remove your spending limit indefinitely. +This prevents disabling your Azure subscription +when your monthly charges are billed the next month. +Otherwise, all resources billed to this subscription will be suspended, +including virtual machines and all other workloads. + +Remove spending limit indefinitely + +###Q: How often am I billed for Visual Studio subscriptions? + +A: Your billing frequency depends on the subscriptions that you purchased: + +* Monthly subscriptions are prorated during the 1st month. +After that, they're billed on the 1st day of the calendar month. + + Increases for monthly subscriptions are prorated, + while updated charges for decreases take effect on the 1st of next month. + +* Annual subscriptions are always purchased in whole +increments and are never prorated. Charges for subsequent +years will be billed on the 1st day of the calendar month +after the anniversary date of your subscription purchase. + +[!INCLUDE [azure-bill-larger](../_shared/qa-azure-bill-larger.md)] + +[!INCLUDE [azure-billing-support](_shared/qa-azure-billing-support.md)] + + + + + + +[!INCLUDE [azure-subscriptions-for-billing](../_shared/qa-azure-subscriptions-for-billing.md)] + diff --git a/docs/billing/faq-billing-setup.md b/docs/billing/faq-billing-setup.md new file mode 100644 index 00000000000..bdd522c9fab --- /dev/null +++ b/docs/billing/faq-billing-setup.md @@ -0,0 +1,222 @@ +--- +title: Troubleshoot VSTS billing +description: Solutions for resolving VSTS billing issues +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: b59c53fb-aaa5-408c-8c7d-ab72974ee922 +ms.manager: douge +ms.author: estfan +ms.date: 04/28/2017 +--- + +# Billing troubleshooting + +**VSTS** + + +[!INCLUDE [browser-problems-azure](../_shared/qa-browser-problems-azure.md)] + + + +[!INCLUDE [find project collection administrator](../_shared/qa-find-project-collection-administrator.md)] + +[!INCLUDE [find-account-owner](../_shared/qa-find-account-owner.md)] + +[!INCLUDE [why-no-owned-accounts](../_shared/qa-why-no-owned-accounts.md)] + + + +[!INCLUDE [azure-subscriptions-for-billing](../_shared/qa-azure-subscriptions-for-billing.md)] + + + +####Q: Why don't my options look the same? + +A: Your options might look different based on the VSTS account that you select +and how that account is set up: + +* **URL**: This list shows only the VSTS accounts that you own. +[Why don't I see any accounts?](#CannotLinkVSOAccount) + +* **Directory**: The name of a directory appears here only when a directory is +connected to the VSTS account selected in the **URL** box. +This directory controls access and authenticates users for the +selected VSTS account. Learn more about +[why a directory is connected to your account](#WhyDirectory). + +* **Subscription**: Appears only when you have more +than one Azure subscription. These subscriptions are +also filtered by the directories selected in the Azure +classic portal's **Subscriptions** list: + + ![Subscriptions filter](_img/set-up-billing/azuresubscriptionsfilter.png) + + + +####Q: Why is a directory connected to my account? + +A: Your VSTS account authenticates users through a directory, +which is managed through [Azure Active Directory (Azure AD)](http://azure.microsoft.com/en-us/documentation/articles/active-directory-whatis/). +This directory controls who can get access to your account +by requiring that all users belong to the directory to get access. +Your VSTS account was connected to a directory when the +account owner created the account or sometime after that. + +Your directory administrator controls who can +[join the directory](https://msdn.microsoft.com/library/azure/hh967632.aspx) +and get access. Otherwise, the VSTS account owner +is solely responsible for managing access. Learn more about +[managing work access](../accounts/access-with-azure-ad.md) +for your account. + + + +####Q: Why can't I link my VSTS account? + +A: This might happen because: + +* You're not the VSTS account owner. + +* You're not at least Co-administrator +on the Azure subscription that you want to link. + +* If you don't see any VSTS accounts, +your account might already linked to another Azure subscription. + +* If your VSTS account uses Azure Active Directory (Azure AD) + to authenticate users, you might have a different directory + selected in the Azure portal than the directory that's connected + to your VSTS account. + + To select the directory that your VSTS account uses, + open the Azure portal's **Subscriptions** list: + + ![Filter your subscriptions to the connected directory ](_img/set-up-billing/azuresubscriptionsfilter.png) + + + +####Q: Are there billing restrictions that might stop me from linking my VSTS account to my Azure subscription? + +A: Yes, you can link accounts in India South +only to Azure subscriptions with +billing addresses in the same region. +Otherwise, you'll see this message: + +"You need an Azure subscription that is +valid for VSTS accounts in India South." + +####Q: Why is my VSTS account already linked to an Azure subscription? + +A: This happens if your VSTS account was already +set up for billing with an Azure subscription, either manually +through Azure or while purchasing from the +[Visual Studio Marketplace](../marketplace/index.md) +for your account. The selected Azure subscription is also +used to bill all later purchases for your account. + +####Q: Can I link an Azure subscription to multiple VSTS accounts? + +A: Yes, you can link an Azure subscription to multiple VSTS accounts. But you can't link a Team +Services account to multiple Azure subscriptions. + + + +####Q: How does Azure billing work? + +A: When you link your VSTS account to an Azure subscription, +you select an eligible [Azure subscription](#AzureMSDNSubscription) +where you have Co-administrator permissions or greater. +If you don't have an Azure subscription, you can either +[sign up](https://portal.azure.com) for a new one, +or have an Azure administrator [add you as Co-Administrator](add-backup-billing-managers.md) +to an Azure subscription that you can use to bill purchases. + +Payment is set up with a credit card, or by invoice in some cases. +Charges for your purchases will show up on your monthly Azure bill. + +**Note**: You must keep your Azure subscription in good standing +to use your VSTS purchases. If your Azure subscription +is canceled or becomes disabled, for example, because the +[credit card used for payment expires](#cc-expires), then any purchases with this +Azure subscription will be deactivated on the 1st day of next month. +To avoid losing access to your VSTS purchases, +please keep your Azure subscription active and updated. + +For example, if you paid for users with an Azure subscription that becomes disabled, +those users will lose access on the 1st of next month. + + + +####Q: When do I get billed? + +A: You're charged only after you've paid for users +or used team services above the free limits. +Your charges are prorated during the 1st month. +After that, you're billed automatically on the +1st day of the calendar month. +Learn more about [pricing here](https://www.visualstudio.com/products/visual-studio-team-services-pricing-vs). + +[!INCLUDE [azure-bill-larger](../_shared/qa-azure-bill-larger.md)] + +####Q: How do I stop billing? + +A: Sign in to the [Azure classic portal](https://manage.windowsazure.com/) +or the [Azure portal](https://portal.azure.com/) +as the VSTS account owner or at least Azure subscription Co-administrator. +Select your VSTS account, reduce any paid users to zero, and turn off any +paid team services. Your VSTS account and bill won't show any changes +in paid users or team services until next month when these changes take effect. +You're still charged for team services that you've already used. + +####Q: What happens if I cancel my Azure subscription? + +A: Your VSTS account goes back to the free monthly limits, +but you'll keep any paid users or team services until next month. +Your account stays linked to your Azure subscription until you unlink your account, +or until your account unlinks automatically when your Azure subscription is disabled. + + +####Q: What happens if my credit card expires? + +A: Your VSTS account goes back to the free monthly limits, +but you'll keep any paid users or team services until next month. +Your Azure subscription will eventually become disabled, but +fixing this issue reactivates your subscription and restores your account's paid settings. + + + +[!INCLUDE [azure-subscription-disabled-team-services](../_shared/qa-azure-subscription-disabled.md)] + + +####Q: What happens if I unlink my VSTS account? + +A: Your account will revert to the free number +of users and pipelines on the 1st of next month, +but Cloud-based Load Testing **immediately** +reverts to your free monthly limits. +Unlinking will cancel paid non-Microsoft +extensions **without refund or credit**. + +You can relink your VSTS account +to another Azure subscription by going to +the Visual Studio Marketplace and repurchasing +VSTS users, pipelines, +or other extensions that you paid for this month. +You can also relink by going to the Azure portal. If +you've paid for any Microsoft resources this month, +those resources won't be billed again. Buying non-Microsoft extensions again will be treated as +new purchases, and the Marketplace will bill immediately to your +new Azure subscription. + +If you wait until the 1st of next month to relink, +your VSTS account will revert to the free amounts. +Any paid users will appear expired in your account's +Users hub. Make sure that you repurchase any paid users +so they don't lose access on the 1st of next month. + + + +[!INCLUDE [azure-account-billing-support](../_shared/qa-azure-account-billing-support.md)] + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] + diff --git a/docs/billing/faq-extension-trials.md b/docs/billing/faq-extension-trials.md new file mode 100644 index 00000000000..f0c1f14e181 --- /dev/null +++ b/docs/billing/faq-extension-trials.md @@ -0,0 +1,75 @@ +--- +title: Troubleshooting paid extensions trials for Visual Studio Team Services +description: Troubleshooting paid extensions trials for Visual Studio Team Services +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 4a6f0af1-aee7-404a-a566-da7922127c69 +ms.manager: douge +ms.author: estfan +ms.date: 1/13/2017 +--- + +# Troubleshooting paid extensions trials for Visual Studio Team Services + +**VSTS** + + + +####Q: What happened to the account trial? + +A: VSTS replaced the account trial with the +[Test Manager extension trial](https://marketplace.visualstudio.com/items/ms.vss-testmanager-web), +which also offers the same integrated, +comprehensive manual and exploratory testing features. + +####Q: How many times can I start an extension trial? + +A: You can start an extension trial only once per account. + + + +[!INCLUDE [no-accounts](_shared/qa-no-accounts.md)] + + +####Q: Why can't I start an extension trial for the selected VSTS account? + +A: You must be the VSTS [account owner or project collection administrator](faq-billing-setup.md#find-owner) +to start an extension trial for the selected VSTS account. If you don't have permissions, +you can [request the extension](../marketplace/request-vsts-extension.md) instead. + + +####Q: How do I check an extension's trial status? + +A: Check the extension pane in your Users hub. + +![Check extension trial](_img/try-additional-features/check-extension-trial-updated-ui.png) + +####Q: How do I cancel my trial? + +A: To stop your trial, just +[uninstall the extension](/vsts/marketplace/install-vsts-extension#uninstall-disable-extension) +from your VSTS account. + + + +[!INCLUDE [no-access-existing-features](../_shared/qa-no-access-existing-features.md)] + + + +[!INCLUDE [no-access-extension-features](../_shared/qa-no-access-extension-features.md)] + +[!INCLUDE [extension-trial-ending-expiring-free-users](../_shared/qa-extension-trial-ending-expiring-free-users.md)] + + + +[!INCLUDE [choose-msa-azuread-account](../_shared/qa-choose-msa-azuread-account.md)] + +[!INCLUDE [choose-msa-azuread-account2](../_shared/qa-choose-msa-azuread-account2.md)] + +[!INCLUDE [why-cant-sign-in-msa-azuread-account](../_shared/qa-why-cant-sign-in-msa-azuread-account.md)] + + + + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] diff --git a/docs/billing/faq-link-msdn-subscription-org-account.md b/docs/billing/faq-link-msdn-subscription-org-account.md new file mode 100644 index 00000000000..5b835bf65c1 --- /dev/null +++ b/docs/billing/faq-link-msdn-subscription-org-account.md @@ -0,0 +1,52 @@ +--- +title: Troubleshooting linking work or school accounts to MSDN subscriptions +description: Troubleshooting linking work or school accounts to MSDN subscriptions +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: e018c9fc-dfda-488c-a43e-33af6a78932b +ms.manager: douge +ms.author: estfan +ms.date: 11/29/2016 +--- + +# Troubleshooting linking work or school accounts to MSDN subscriptions + +**VSTS** + + +####Q: Why can't I add my work or school account to my Visual Studio with MSDN subscription? + +A: This feature is only available for Visual Studio subscribers accessing their subscriptions using their personal Microsoft account. If your subscription is already assigned to your work or school account, you should use the same credentials to access other services (such as VSTS and Azure). + +You must also use your Microsoft account, not your work or school account, to sign in to the +[Visual Studio subscriptions portal (https://my.visualstudio.com)](https://my.visualstudio.com). + +####Q: Can I add more than one work or school account to my subscription? + +A: No, you can add only one work or school account. + +####Q: Why doesn't VSTS recognize my subscription? + +A: This might happen for different reasons: + +* You must have an active, valid, and +[eligible Visual Studio subscription](../accounts/faq-add-delete-users.md#EligibleMSDNSubscriptions) +that includes VSTS as a benefit. + +* If your Visual Studio subscription is valid and eligible, +make sure you access the Visual Studio subscriptions portal (```https://my.visualstudio.com```) +before you sign in to VSTS. + +* VSTS should automatically recognize your subscription when you sign in. +If not, try having the VSTS account owner set +[your access level to "Visual Studio/MSDN Subscriber" in the VSTS account](../accounts/add-account-users-assign-access-levels.md). + +If VSTS still doesn't recognize your subscription, try these other +[troubleshooting tips](http://blogs.msdn.com/b/visualstudioalm/archive/2014/03/19/visual-studio-online-best-practices-troubleshooting-issues-with-the-quot-eligible-msdn-subscriber-license-type.aspx). + +####Q: Why can't I sign in with my work or school account after adding it to my subscription or getting invited to VSTS? + +A: Check with the VSTS account owner that they've +[set up Azure Active Directory (Azure AD) access](../accounts/access-with-azure-ad.md) +between the VSTS account and your organization's +directory that manages your work or school account. diff --git a/docs/billing/faq-pay-for-basic-users.md b/docs/billing/faq-pay-for-basic-users.md new file mode 100644 index 00000000000..7805059fe72 --- /dev/null +++ b/docs/billing/faq-pay-for-basic-users.md @@ -0,0 +1,164 @@ +--- +title: Buy Basic access to add VSTS users | Visual Studio Team Services +description: Buy Basic access to add more users in Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: c229c564-bda3-4d5d-92a9-4dbe45223367 +ms.manager: douge +ms.author: estfan +ms.date: 1/10/2017 +--- + +# Troubleshooting paying for VSTS Basic access + +**VSTS** + + +## Permissions + + + +[!INCLUDE [find-project-collection-administrator](../_shared/qa-find-project-collection-administrator.md)] + +[!INCLUDE [find-account-owner](../_shared/qa-find-account-owner.md)] + + +## Purchases and billing + + + +[!INCLUDE [azure-subscriptions-for-billing](../_shared/qa-azure-subscriptions-for-billing.md)] + + + +[!INCLUDE [azure-billing](../marketplace/_shared/qa-azure-billing.md)] + + + +####Q: When do I get billed? + +A: You're charged only when you've paid +for users above the free limits. +Your charges are prorated during the 1st month. +After that, you're billed automatically on the +1st day of the calendar month. To calculate pricing, +[go to the Azure pricing calculator](https://azure.microsoft.com/en-us/pricing/calculator/?service=visual-studio-team-services), +or learn about [VSTS user pricing for Basic access](https://www.visualstudio.com/team-services/pricing/). + +####Q: When do paid users renew? + +A: Paid users renew automatically on the 1st of each month. +To reduce paid users for the next month, +you must make the change before the last day of the month. + + + +[!INCLUDE [no-accounts](_shared/qa-no-accounts.md)] + +[!INCLUDE [azure-bill-larger](../_shared/qa-azure-bill-larger.md)] + +[!INCLUDE [azure-subscription-disabled-team-services](../_shared/qa-azure-subscription-disabled.md)] + + +####Q: Can I still buy or manage paid Basic access through the Azure portal? + +A: You can still use the Azure portal or Azure classic portal +to pay for users who need Basic access or to manage the number +of VSTS users that you're paying to get Basic access. + +> Try [buying or managing paid Basic access through Visual Studio Marketplace](buy-basic-access-add-users.md#buy-access-vs-marketplace). +> Otherwise, if you're buying Basic access for the first time, +> and you haven't set up billing for your VSTS account yet, +> you must [link your VSTS account to an Azure subscription for billing](set-up-billing-for-your-account-vs.md). +> You can then pay for VSTS users in the Azure classic portal or the Azure portal. +> +> To reduce or cancel users who have paid Basic access for the next month, +> you must make your changes before the last day of the month. +> Your charges won't change until the next month because paid users are monthly purchases. + +
+ + +
+
+

**Azure portal** +

+

Before you start, you'll need [VSTS project collection administrator or account owner permissions](faq-billing-setup.md#find-owner). +You'll also need at least [Co-administrator permissions](add-backup-billing-managers.md) +for the Azure subscription that's linked to your VSTS account. +

+

    +
  1. Sign in to the [Azure portal](https://portal.azure.com). +
  2. Go to **Browse** > **VSTS accounts**. +Select your VSTS account. +

    +

    ![Browse, VSTS accounts, select your VSTS account](_img/_shared/ap_vso_selectlinkedaccount.png) +

    +

    [Why don't I see my VSTS account?](#WhyNoVSOAccount) +

    +

  3. Go to **Settings** > **Users**. +

    +

    ![View users](_img/_shared/ap_vso_managelicenses.png) +

    +

  4. Select the number of users with Basic access that you want to pay for. +To cancel all paid users, reduce this number to zero (0). Save your changes. +

    +

    ![Update paid users. Save changes](_img/buy-more-basic-access/ap_vso_selecttotalusers.png) +

    If you add users, you're not charged until you save your changes. +

+
+ +
+

**Azure classic portal** +

+

Before you start, you'll need at least [Co-administrator permissions](add-backup-billing-managers.md) +for the Azure subscription that's linked to your VSTS account. +

+

    +
  1. Sign in to the [Azure classic portal](https://manage.windowsazure.com/). +
  2. Go to **Visual Studio Team Services**. +Select your VSTS account. +

    +

    ![Visual Studio Team Services, select your VSTS account](_img/_shared/azurechooselinkedaccount.png) +

    +

    [Why don't I see my VSTS account?](#WhyNoVSOAccount) +

    +

  3. Go to **Scale**. +

    +

    ![Go to the Scale page](_img/_shared/azurescalelicensesresources.png) +

    +

  4. Drag the slider to select the total number of users with Basic access +that you want in your VSTS account. To cancel all paid users, +drag the slider until only 5 users appear. Save your changes. +

    +

    ![Update paid users](_img/buy-more-basic-access/ap_vso_selecttotalusers.png) +

    +

    **Note** Your account includes 5 free users who get Basic access. +So you'll only pay for users beyond that quantity. You're not charged until you save your changes. +

    +

    ![Save changes](_img/_shared/save-changes.png) +

+
+ + + +[!INCLUDE [azure-why-no-vsts-account](../_shared/qa-azure-why-no-vsts-account.md)] + +
+ + + +####Q: What happened to Visual Studio Online Professional? + +A: [Learn more here](https://go.microsoft.com/fwlink/?LinkId=698858). + +[!INCLUDE [azure-account-billing-support](../_shared/qa-azure-account-billing-support.md)] + +[!INCLUDE [marketplace-support](../marketplace/_shared/qa-marketplace-support.md)] + +[!INCLUDE [get-team-services-support](../_shared/qa-get-vsts-support.md)] + diff --git a/docs/billing/faq-vs-subscriptions.md b/docs/billing/faq-vs-subscriptions.md new file mode 100644 index 00000000000..3b1b78f0ac4 --- /dev/null +++ b/docs/billing/faq-vs-subscriptions.md @@ -0,0 +1,158 @@ +--- +title: Troubleshooting Visual Studio Subscriptions +description: Troubleshooting Visual Studio Subscriptions +ms.technology: vs-devops-setup +ms.assetid: d32c0b7a-a9f8-4629-9b54-f115c2adc4e2 +ms.manager: douge +ms.author: elbatk +ms.date: 04/28/2017 +--- + +# Troubleshooting Visual Studio Subscriptions + +**VSTS** | **TFS 2017** | **TFS 2015** + + +Visual Studio Professional and Visual Studio Enterprise +are both available as monthly and annual subscriptions. +The annual subscriptions provide incremental subscriber benefits, +such as a monthly Azure credit and software for dev and test. + +Learn more about Visual Studio subscriptions from this short video. To compare subscription options and select the best option for you, see [How to Buy Visual Studio](https://www.visualstudio.com/products/how-to-buy-vs). + + + + + +###Q: What are the key differences between cloud subscriptions and standard subscriptions? + +A: Here are the key differences: + +* Your rights to use the included software expire when your +cloud subscription expires. + + Standard subscriptions, like Visual Studio Professional + with MSDN and Visual Studio Enterprise with MSDN, + usually include perpetual rights to use the included software. + +* You must sign in to the Visual IDE when you have +a cloud subscription. + + Cloud subscriptions aren't the right option if you're disconnected + from the Internet for more than 30 days at a time. The Visual + Studio IDE will revert to a trial if a cloud subscription expires + (or reassigned to another user.) + + With a standard subscription, you can unlock the Visual Studio + IDE by using the provided product key, so you don't have to sign in. + +* You can only buy Visual Studio cloud subscriptions from the Visual Studio Marketplace. +You pay either monthly or annually based on the subscription, +use an Azure subscription for billing, and pay with a credit card +(or by invoice, if you set up invoicing). + + You buy standard subscriptions as usual directly from the online + Microsoft Store or from a reseller. + +###Q: Who should consider buying cloud subscriptions? + +A: Here's some considerations: + +* *Monthly* subscriptions: You just need the Visual Studio IDE +and already have licenses for other Microsoft software running +in your dev and test environments. + +* *Annual* subscriptions: You need both the Visual Studio IDE +**and** a license to use other Microsoft software running +in your dev and test environments. You also get +[additional benefits](https://www.visualstudio.com/products/subscriber-benefits-vs), +like a monthly Azure credit, technical support, special offers, and more. + +For both subscriptions, you get Basic access +to any VSTS account. + +###Q: What's the difference between annual cloud subscriptions and standard subscriptions? + +A: Currently, Visual Studio Professional annual +has the same benefits as Visual Studio Professional +with MSDN. Visual Studio Enterprise annual has the +same benefits as Visual Studio Enterprise with MSDN. + +###Q: Do I get new versions of Visual Studio IDEs if I buy a Visual Studio subscription? + +A: Yes, if you have an active subscription, +you can use any version of Visual Studio 2013 or later. +Just download the trial version, +sign in with the username and password that +you used with your Visual Studio subscription, +which unlocks the trial, and start coding! + + + +###Q: Are you going to discontinue standard Visual Studio subscriptions? + +A: Standard Visual Studio subscriptions are still the best option if you have +long-term software development needs, or if you need to work +in fully offline development environments without Internet access. +We understand that cloud subscriptions will not meet the needs for all customers. + +If you buy through volume licensing, these subscriptions are still +the most cost effective way to get Visual Studio and other +Microsoft software and services for dev and test. +There's no plan to stop selling standard Visual Studio subscriptions, +so they're still available through Microsoft Volume Licensing +resellers and the online Microsoft Store. + +###Q: Where are Visual Studio subscriptions offered? + +A: Visual Studio subscriptions are sold worldwide, +in the markets where Microsoft Azure is +[commercially available](https://azure.microsoft.com/en-us/pricing/faq/). + +###Q: Why don't I see Visual Studio subscriptions in the Azure classic portal and Azure portal? + +A: You can only buy Visual Studio subscriptions +through the Visual Studio Marketplace. + +###Q: Can I buy Visual Studio cloud subscriptions from my software reseller? + +A: No, you can only buy these subscriptions from the +[Visual Studio Marketplace](https://marketplace.visualstudio.com). +Resellers can sell prepaid amounts of Azure services +through the Enterprise Agreement (EA), Microsoft Products +and Services Agreement (MPSA), and Open programs. +Although you can use prepaid Azure funds from EA and +MPSA toward most Azure services, you can't +use these funds to pay for Visual Studio cloud subscriptions. + +You can use prepaid funds from Open to pay for Visual Studio subscriptions. + +###Q: What kind of volume discounts are available for Visual Studio subscriptions? + +A: You get a 5% discount on the 6th and all subsequent +subscriptions within each type of subscription: + +* Visual Studio Professional monthly +* Visual Studio Professional annual +* Visual Studio Enterprise monthly +* Visual Studio Enterprise annual + +So for example, if you buy 6 Visual Studio Professional +monthly subscriptions and 5 Visual Studio Enterprise +monthly subscriptions, you'll pay the regular price on +5 Professional, get a 5% discount on the 6th Professional, +and pay regular price on all 5 Enterprise subscriptions. + +Also, the discount only applies to charges in a given monthly +billing period. So if you buy 5 Visual Studio Professional annual +subscriptions in one month, and then you buy 5 more the next month, +you'll pay the regular price on all 10 subscriptions. + +###Q: Are there renewal discounts? + +A: No, prices for Visual Studio subscriptions are flat. +The same price is offered for new customers and continuing customers. + +###Q: Are there supplemental Enterprise Agreement discounts available for Visual Studio subscriptions? + +A: No, the only discounts available are based on volume of purchases. diff --git a/docs/billing/get-hockeyapp.md b/docs/billing/get-hockeyapp.md new file mode 100644 index 00000000000..8ed62e7fd64 --- /dev/null +++ b/docs/billing/get-hockeyapp.md @@ -0,0 +1,315 @@ +--- +title: Get HockeyApp - Bring DevOps to mobile app development | Visual Studio Marketplace +description: Distribute mobile apps for testing, collect user feedback, metrics, and live crash reports for apps on Android, iOS, Mac OS X, and Windows. Add DevOps to your Agile, continuous integration, and continuous delivery workflows in Visual Studio Team Services, GitHub, Jira, Bamboo, Team Foundation Server, and more. +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: b572fa78-70ba-4060-bcc3-1f8c342d98f8 +ms.manager: douge +ms.author: elbatk +ms.date: 10/17/2016 +--- + +# Get HockeyApp: Bring DevOps to mobile app development + +Distribute mobile apps for testing, collect user metrics and feedback, +and respond to crashes more easily by adding +[HockeyApp](https://www.visualstudio.com/hockey-app-vs) +to your Agile, continuous integration, and continuous delivery workflows. + +Build apps for Android, iOS, Mac OS X, and the Windows platform using +Cordova, Unity, Xamarin, or native languages. Upload your apps to HockeyApp, +so you can invite users to test them. Collect their feedback, metrics, +and live crash reports at any development stage, even after releasing +your apps through a store. Your users will always have the latest +versions and get updates automatically. Your developers will always get +the latest user feedback and crash reports. + +HockeyApp works with tools that support team-based development +and collaboration, work item and project management, continuous +integration and delivery, such as Visual Studio Team Services, +Team Foundation Server, GitHub, Bamboo, Jira, and more. + +Learn more about: + +* HockeyApp at the +[Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.hockeyapp) +or at the [HockeyApp.net website](http://hockeyapp.net/features/) + +* Tools and apps that integrate with HockeyApp at the +[HockeyApp Knowledge Base](http://support.hockeyapp.net/kb) + +## How do I get HockeyApp? + +You'll need a HockeyApp plan for the number of apps and owners in your HockeyApp account. +Owners can create and delete apps in your account. Learn more about [HockeyApp plans](http://hockeyapp.net/pricing/). + +For example, you can start for free with just 1 account owner and up to 10 apps when you sign +up for the HockeyApp Free Plan. If you have more than 1 account owner, you'll need a HockeyApp Business Plan, +no matter how many apps you have. [Still not sure which plan to choose?](#choose-plan) + +You can get the +[HockeyApp Free plan](https://marketplace.visualstudio.com/items?itemName=ms.hockeyapp-free) +or buy [monthly HockeyApp Business plans](https://marketplace.visualstudio.com/subscriptions) +directly from the Visual Studio Marketplace. +[Why buy from Visual Studio Marketplace?](#why-marketplace) + +To continue, you'll need: + +* A [Microsoft account](https://www.microsoft.com/account), like @outlook.com or @hotmail.com, +or a work or school account, like @fabrikam.com + +* A [Microsoft Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +to use for billing purchases from the Visual Studio Marketplace + + For example, you can use the Azure subscription that's linked to + your VSTS account, if your account is already + [set up for billing](set-up-billing-for-your-account-vs.md). + If you don't have an Azure subscription, you can + [sign up for Azure](https://portal.azure.com) + before or during your first Marketplace purchase. Learn more about + [using Azure subscriptions to bill Marketplace purchases](#azure-billing). + + + +### Buy HockeyApp Business plans from the Visual Studio Marketplace + +0. Sign in to [Visual Studio Marketplace > Subscriptions](https://marketplace.visualstudio.com/subscriptions) with your Microsoft account, or with your work or school account. + +0. Choose the HockeyApp Business plan based how how many apps and owners that you'll have in your HockeyApp account. For example: + + ![Choose a monthly HockeyApp Business plan](_img/get-hockeyapp/choose-plan.png) + + ![Click Buy](_img/get-hockeyapp/buy-hockeyapp-plan.png) + +0. Select the Azure subscription that you want to use for billing. Or sign up for a new Azure subscription, if you don't have one. + + ![Select your Azure subscription](_img/get-hockeyapp/buy-hockeyapp-azure-sub.png) + +0. Select 1 to buy the HockeyApp plan that you chose. + + ![Select 1 to buy your plan](_img/get-hockeyapp/select-hockeyapp-plans.png) + +0. Finish your purchase. + + ![Click Confirm](_img/get-hockeyapp/confirm-purchase.png) + + Congratulations, you completed your purchase successfully! + + ![Purchase confirmed, sending activation mail, and setting up account](_img/get-hockeyapp/buy-hockeyapp-plan-success.png) + +### Activate your HockeyApp plan after purchase + +After you finish your purchase, you'll get a confirmation +mail from HockeyApp with an activation link and instructions +to choose a new or existing HockeyApp account. + +If you purchased a HockeyApp plan from the Visual Studio +Marketplace with an Azure subscription, sign in to your +HockeyApp account with the same credentials that you used +to purchase from the Visual Studio Marketplace. +HockeyApp will recognize your purchase and show +your plan in your HockeyApp account. +Otherwise, wait for your confirmation mail to +manually activate your HockeyApp plan. + +**Note**: If you're a new HockeyApp user, it might +take up to 1 hour before your plan appears in your account. + +**To review your plans** + +0. Sign in to your [HockeyApp account](https://rink.hockeyapp.net/users/sign_in) +with the same credentials used to purchase from the Visual Studio Marketplace. + +0. Go to [Manage Account > Upgrade](https://rink.hockeyapp.net/manage/subscriptions). + + + +### Connect HockeyApp to your tools and workflows + +HockeyApp integrates with tools that support team-based development +and collaboration, project management, continuous integration, +and continuous delivery. Learn how to integrate these tools with +HockeyApp at the [HockeyApp Knowledge Base](http://support.hockeyapp.net/kb). + +For example, when you use HockeyApp with Visual Studio Team Services, +every code commit can trigger a build, upload your app to HockeyApp, +and make your app available to testers. While your app runs, +you'll collect user feedback and crash reports, +which feed back into work items for your next cycle. +Learn more about [HockeyApp and Visual Studio Team Services](http://hockeyapp.net/blog/2015/11/18/introducing-mobile-devops.html). + +0. Sign in to +[Visual Studio Marketplace > VSTS > Build and release > HockeyApp](https://marketplace.visualstudio.com/items?itemName=ms.hockeyapp) +as the VSTS account owner. + + If you're not the VSTS account owner, + learn how to [request extensions](../marketplace/request-vsts-extension.md). + +0. Install the [HockeyApp extension](https://marketplace.visualstudio.com/items?itemName=ms.hockeyapp) +in your VSTS account. Learn more at +[Get extensions for VSTS](../marketplace/install-vsts-extension.md#install-extension). + + ![Install HockeyApp extension](_img/get-hockeyapp/hockey-app-extension.png) + +0. To start using HockeyApp with VSTS, follow the steps on the +[HockeyApp extension page](https://marketplace.visualstudio.com/items?itemName=ms.hockeyapp). + +For more details, visit +[How to use HockeyApp with VSTS or Team Foundation Server](http://support.hockeyapp.net/kb/third-party-bug-trackers-services-and-webhooks/how-to-use-hockeyapp-with-visual-studio-team-services-vsts-or-team-foundation-server-tfs). + +## Q & A + + + +####Q: How do I choose a HockeyApp plan? + +A: Start with a plan that supports the number of apps +that you want to host and the number of account owners +that can create and delete apps in your HockeyApp account. +You can always change plans later. You have unlimited +storage and can upload as many versions of your app as you need. + +**Note**: The same app for each platform counts as a separate app. +For example, if you want to ship an app for both iOS and Android, +this app counts as 2 apps, whether you build it with Cordova +and a single code base, or build for each platform natively. + +For example, if you have: + +| HockeyApp account owners | Number of apps | Choose this HockeyApp plan | +| ------------------------ | -------------- | -------------------------- | +| Exactly 1 | Up to 10 | [Free plan](#free-plan) | +| More than 1 | Any | [Business plan](http://hockeyapp.net/pricing/#business) | + +Learn more about these plans at the +[HockeyApp Knowledge Base](http://support.hockeyapp.net/kb/general-account-management-2/how-to-sign-up-for-a-paid-plan). + + + +####Q: What's the HockeyApp Free plan? + +A: You can manage up to 10 apps free as the only HockeyApp account owner. +Like other plans, you have unlimited storage and can upload as many +versions of your apps as you need. Learn more about the +[HockeyApp Free plan](https://marketplace.visualstudio.com/items?itemName=ms.hockeyapp-free), +or [sign up to use HockeyApp for free at HockeyApp](https://rink.hockeyapp.net/users/sign_up). + +####Q: How do I buy for more than 500 apps or 100 owners? + +A: Contact [HockeyApp Support](http://support.hockeyapp.net/). + +####Q: Does HockeyApp have other plans? + +A: Yes, visit the HockeyApp +[pricing page](http://hockeyapp.net/pricing/#personal). +You can buy these plans through FastSpring. +Learn more at the +[HockeyApp Knowledge Base](http://support.hockeyapp.net/kb/general-account-management-2/how-to-sign-up-for-a-paid-plan). + + + +####Q: Why buy HockeyApp Business plans from Visual Studio Marketplace? + +A: You can buy HockeyApp Business plans on a monthly basis +from the Visual Studio Marketplace by selecting an +[Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +to use for billing your purchase. Just think of this subscription +like a billing account. + +If you don't have an Azure subscription, just +[sign up](https://portal.azure.com) +before or during your first Marketplace purchase. You can also +use your Azure subscription to buy other Azure services, +like Cloud Services, compute instances, Visual Studio Team Services, +and more. You get everything all in one convenient monthly bill +that's charged to your credit card or invoiced to your organization. + +Learn how to [buy monthly HockeyApp Business plans from Visual Studio Marketplace](#buy-hockeyapp-business) +or about [billing Marketplace purchases with Azure](#azure-billing). + +####Q: How do I estimate the cost for HockeyApp Business plans? + +A: Use the [HockeyApp pricing calculator](https://azure.microsoft.com/en-us/pricing/calculator/) +on the Azure website. + +####Q: How do I switch from paying through HockeyApp to paying through Azure? + +A: Here's how: + +0. Sign in to +[Visual Studio Marketplace > Subscriptions](https://marketplace.visualstudio.com/subscriptions), +which uses Azure subscriptions for billing. + +0. Buy the same plan that you have now. + + After you finish your purchase, + you'll get a HockeyApp confirmation mail with an activation link + and instructions to choose a new or existing HockeyApp account. + +0. At any time, sign in to your old HockeyApp account, +go to the billing page, and transfer your apps +and data to your other HockeyApp account. + +0. After you confirm that everything transferred correctly, +cancel your old plan. + + + +[!INCLUDE [azure-billing](_shared/qa-azure-billing.md)] + +####Q: How often am I billed for HockeyApp Business plans? + +A: We prorate monthly plans purchased from the +Visual Studio Marketplace during the 1st month. +After that, monthly plans are billed on the +1st day of the calendar month. + +[!INCLUDE [azure-bill-larger](../_shared/qa-azure-bill-larger.md)] + +####Q: Where can I see my HockeyApp plans? + +A: Sign in to your [HockeyApp account](https://rink.hockeyapp.net/users/sign_in). +Go to [Account Settings > Upgrade](https://rink.hockeyapp.net/manage/subscriptions). + +####Q: How do I cancel or change my HockeyApp Business plan? + +A: **To cancel your plan** + +0. Sign in to +[Visual Studio Marketplace > Subscriptions](https://marketplace.visualstudio.com/subscriptions) +with the credentials used to purchase your plan. + +0. Select the plan that you want to cancel. + +0. Continue through the Buy page, and select the Azure +subscription that was used to purchase your plan. + +0. Reduce your plan from 1 to 0. Confirm and finish your update. + +**To change your plan** + +0. Sign in to +[Visual Studio Marketplace > Subscriptions](https://marketplace.visualstudio.com/subscriptions) +with the credentials used to purchase your plan. + +0. Cancel your current plan, then buy the new plan. + + We'll prorate the 1st month of charges for your new plan + based on the number of days remaining in the current month. + + After you finish your purchase, + you'll get a HockeyApp confirmation mail with an activation link + and instructions to choose a new or existing HockeyApp account. + +0. To move your data at any time from your old plan to the new plan, +use the activation link in your purchase confirmation email. + +####Q: How do I get more HockeyApp information or support? + +A: Visit the +[HockeyApp FAQ](http://support.hockeyapp.net/kb/general-account-management-2/general-questions), +or contact [HockeyApp Support](http://support.hockeyapp.net/). + +[!INCLUDE [azure-billing-support](_shared/qa-azure-billing-support.md)] + +[!INCLUDE [marketplace-support](_shared/qa-marketplace-support.md)] diff --git a/docs/billing/index.md b/docs/billing/index.md new file mode 100644 index 00000000000..9c6ed5a9066 --- /dev/null +++ b/docs/billing/index.md @@ -0,0 +1,38 @@ +--- +title: Billing for VSTS +description: Index to topics for account billing for Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: eec3c8aa-7985-47fc-8c10-6be0f41eb441 +ms.manager: douge +ms.author: estfan +ms.date: 07/12/2017 +--- + +# Billing + +**VSTS** | **TFS** | **HockeyApp** | **Xamarin University** | **VS Subscriptions** + +## 5-Minute Quickstarts + + * [Set up billing](set-up-billing-for-your-account-vs.md) + * [Try extensions for free](try-additional-features-vs.md) + * [Pay for more users](buy-basic-access-add-users.md) + + +## Step-by-Step Tutorials + +* [Change Azure AD tenant](../accounts/change-azure-active-directory-vsts-account.md) + + +## Concepts + +* [Set up billing](billing-concepts.md) +* [Use MSDN subscription with organizational account](link-msdn-subscription-concept.md) + + +## Resources + +* [Key concepts](../concepts.md) +* [Software development roles](../roles.md) +* [Pricing](https://www.visualstudio.com/team-services/pricing/) diff --git a/docs/billing/link-msdn-subscription-concept.md b/docs/billing/link-msdn-subscription-concept.md new file mode 100644 index 00000000000..a415017ad29 --- /dev/null +++ b/docs/billing/link-msdn-subscription-concept.md @@ -0,0 +1,32 @@ +--- +title: Why add work or school accounts to Visual Studio with MSDN subscriptions +description: Why add work or school accounts to Visual Studio with MSDN subscriptions +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 01e4ac42-3d2b-419b-ad17-1d0bb5d96f85 +ms.manager: douge +ms.author: estfan +ms.date: 11/29/2016 +--- + +# Why add work or school accounts to Visual Studio with MSDN subscriptions + +**VSTS** + + +If you access your Visual Studio Team Services (VSTS) or Microsoft Azure account with a +work or school account, but access your Visual Studio subscriptions with a different identity (such as your personal +Microsoft account), you can link your work or school account to your Visual Studio subscription. + +You need an [eligible Visual Studio subscription](../accounts/faq-add-delete-users.md#EligibleMSDNSubscriptions) that +includes VSTS as a benefit so that other services (VSTS and Azure) can recognize you. + +The Visual Studio subscriptions portal (```https://my.visualstudio.com```) requires you to sign-in with the email +address that was used to access your subscription on the legacy MSDN portal, or the email address that was assigned +to you by your company's Visual Studio subscriptions administrator after October 2016. This email address can be either +your personal Microsoft account or a "work or school account" managed by your organization with Azure Active Directory. + +If your Visual Studio subscription is accessed using your Microsoft account, and you're accessing other services (VSTS or Microsoft Azure) using your work or school account, you can link your personal account to your work or school account in order for the services to recognize you as a Visual Studio subscriber. + +[Link between your Microsoft account and your work or school account](link-msdn-subscription-to-organizational-account-vs.md). + diff --git a/docs/billing/link-msdn-subscription-to-organizational-account-vs.md b/docs/billing/link-msdn-subscription-to-organizational-account-vs.md new file mode 100644 index 00000000000..b93dc488159 --- /dev/null +++ b/docs/billing/link-msdn-subscription-to-organizational-account-vs.md @@ -0,0 +1,45 @@ +--- +title: Add work or school account to MSDN subscription | VSTS +description: Link work or school account to Visual Studio with MSDN subscriptions for use with VSTS +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 185741f9-5305-4fcd-8be9-5e77c413b38a +ms.manager: douge +ms.author: estfan +ms.date: 11/29/2016 +--- + +# Add work or school accounts to Visual Studio with MSDN subscriptions + +**VSTS** + +To set up the linking between your Microsoft account to your work or school account ([learn more](link-msdn-subscription-concept.md)), sign in to the Visual Studio subscriptions portal (```https://my.visualstudio.com```) with your Microsoft account, and follow the steps below: + + + + +0. Sign in with your Microsoft account to the +[Visual Studio subscriptions portal (https://my.visualstudio.com)](https://my.visualstudio.com). + + > If you're asked to choose "personal account" + > or "work or school account", choose "personal account" (your Microsoft account). + > + > Sometimes you need to choose because your Microsoft account and your work or school + > account share the same email address. Although both identities use the same email address, + > they're still separate identities with different profiles, security settings, and permissions. + +0. Go to **Subscriptions** tab. + + ![Choose Subscriptions](_img/link-msdn-subscription/choose-subscriptions-my-visual-studio-com-portal.png) + +0. Under **Related Links**, go to **Add alternate account**. + + ![Under Related Links, go to Add alternate account](_img/link-msdn-subscription/add-alternate-account-my-visual-studio-com-portal.png) + +0. Enter your work or school account and choose **Add**. + + ![Enter your work or school account](_img/link-msdn-subscription/enter-alternate-account-my-visual-studio-com-portal.png) + +0. Use your work or school account to sign in to your VSTS account. +There may be a slight delay for the information to propagate, so check again 15 minutes later. (```https://{youraccount}.visualstudio.com```). + diff --git a/docs/billing/overview.md b/docs/billing/overview.md new file mode 100644 index 00000000000..926caaec8a5 --- /dev/null +++ b/docs/billing/overview.md @@ -0,0 +1,102 @@ +--- +title: VSTS billing overview +description: VSTS billing overview +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: d5bd13e2-aa7c-4191-aefd-bd9f05663e7b +ms.manager: douge +ms.author: estfan +ms.date: 04/28/2017 +--- + +# VSTS billing overview + +VSTS billing covers: + +* Purchasing extensions for Visual Studio, Visual Studio Team Services, Team Foundation Server (TFS), and Visual Studio Code + +* Purchase pay-for-usage extensions, such as Test Manager and Package Management (these extensions are assigned to specific users). + + +## What are extensions + +An extension is an installable unit that contributes new capabilities into Visual Studio, Visual Studio Team Services, Team Foundation Server, or Visual Studio Code. You can find extensions from within these product or from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/). + +Extending VSTS is the easiest way for users to get the most out of their +devops environment. The [Visual Studio Marketplace](https://marketplace.visualstudio.com) is home to hundreds of extensions +that can be installed to help with: +- Planning and tracking of work items, sprints, scrums, etc. +- Build and release flows +- Code testing and tracking +- Collaboration amongst team members + +Adding extensions to your VSTS account is incredibly easy: + +1. Search and find extensions for your account in the [Visual Studio Marketplace](https://marketplace.visualstudio.com). +2. Install the extension from the Marketplace and start using it in VSTS. +You can install them with a few clicks. You must have administrative permissions to upload or install extensions. + +## Get or build extensions + +| Product | Topics | +|-----------------------------|--------------------------------------------------------------------------------------------------| +| VSTS | [Get extensions for VSTS](../marketplace/install-vsts-extension.md)
[Develop extensions for VSTS](https://aka.ms/vsoextensions) | +| Visual Studio | [Get extensions for Visual Studio](https://marketplace.visualstudio.com/vs)
[Develop extensions for Visual Studio](http://aka.ms/extendvs) | +| Visual Studio Code | [Get extensions for Visual Studio Code](https://marketplace.visualstudio.com/vscode)
[Develop extensions for Visual Studio Code](http://go.microsoft.com/fwlink/?LinkID=703825) | + + +## Free extensions + +There are many free extensions available in the Marketplace, too numerous to list. However, the following extensions are listed as they quickly add a lot of value and are easily installed. + +- [Work Item Search](https://marketplace.visualstudio.com/items?itemName=ms.vss-workitem-search) +- [Campfire integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.services-campfire) +- [Hipchat integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.services-hipchat) +- [Slack integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-slack) +- [Microsoft Teams integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-teams) + +Browse the [Marketplace](https://marketplace.visualstudio.com/) to find additional extensions you want to install. + + +## Billing and subscriptions + + +### Azure Billing +When you buy from the Visual Studio Marketplace, you select an Azure subscription to use for billing. +If you don't have an Azure subscription, you can [sign up](https://portal.azure.com) +either before or during your first purchase. You can set up payment with a credit card, +or by invoice in some cases. Charges for your purchases will show up on your monthly Azure bill. + +>[!NOTE] +>You must keep your Azure subscription in good standing to use your Visual Studio Marketplace purchases. + +If your Azure subscription is canceled or becomes disabled, for example, because the credit card used for payment expires, +then any purchases with this Azure subscription will be deactivated on the 1st day of the next month. +To continue using your Visual Studio Marketplace purchases, please keep your Azure subscription active and updated. + +For example, if you bought a Visual Studio Professional subscription, and you used an Azure subscription that becomes disabled, +your Visual Studio Professional IDE will stop working on the 1st of the following month. This also applies to annual +Visual Studio subscriptions that are paid in full for the year. + +>[!NOTE] +>You can't use the [Azure Free Trial](https://azure.microsoft.com/pricing/free-trial/) to pay for Visual Studio Marketplace purchases, +>which applies to Visual Studio Team Services, HockeyApp user plans, and so on. + + +### Billing frequency + +For subscriptions, the billing frequency depends on the subscription that you purchased: + +* Monthly subscriptions are prorated during the 1st month. After that, they're billed on the 1st day of the calendar month. + +* Annual subscriptions are always purchased in whole increments and are never prorated. Charges for subsequent years +will be billed on the 1st day of the calendar month after the anniversary date of your subscription purchase. + +>[!NOTE] +> To find answers to commonly asked questions such as how to remove the spending limit in Azure or other questions around Visual Studio Subscriptions and Azure Billing, see [Marketplace support](../marketplace/marketplace-billing-qa.md), +[Visual Studio subscriptions troubleshooting](faq-vs-subscriptions.md), or +[Azure billing troubleshooting](faq-azure-billing.md). + +For the billing frequency of extensions, see [Get extensions for VSTS](/vsts/marketplace/install-vsts-extension#bill-period). + diff --git a/docs/billing/set-up-billing-for-your-account-vs.md b/docs/billing/set-up-billing-for-your-account-vs.md new file mode 100644 index 00000000000..064ff9bbc5d --- /dev/null +++ b/docs/billing/set-up-billing-for-your-account-vs.md @@ -0,0 +1,100 @@ +--- +title: Set up billing for VSTS to pay for more services +description: Use an Azure subscription to pay for more users, build & release pipelines, extensions, and cloud-based load testing for Visual Studio Team Services (Visual Studio Online, VSO, VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 87b994d6-2a92-46e5-b667-afe4eb198e25 +ms.manager: douge +ms.author: estfan +ms.date: 04/28/2017 +--- + +# Set up billing to pay for users, pipelines, and cloud-based load testing in Visual Studio Team Services + +**VSTS** + +You have to set up billing when you need more than the free limits in your VSTS account (number of Team +Services users, pipelines for Build & Release, or virtual user minutes for Cloud-Based Load Testing. Also, when +you want to buy VSTS extensions from the +[Visual Studio Marketplace](https://marketplace.visualstudio.com/). Learn [what you get for free in VSTS](https://www.visualstudio.com/team-services/pricing/). + +> If this is your first time paying for VSTS users, pipelines, +> or extensions, you can go directly to the Visual Studio Marketplace and +> set up billing during your first purchase: +> +> * [Pay for more users](buy-basic-access-add-users.md) +> * [Buy more capacity for Build & Release](buy-more-build-vs.md) +> +> Otherwise, if you're buying Cloud-Based Load Testing for the first time, +> or if you want to change the Azure subscription that you use for billing, +> follow the steps in this topic to go through the Azure portal. +> +> To change the Azure subscription that's linked to your VSTS account, +> [unlink your VSTS account](change-azure-subscription.md), +> then [relink your account to another Azure subscription](#Link). + +## What do I need to set up billing? + +Microsoft Azure handles billing for your VSTS account, +so you'll need: + +* [VSTS project collection administrator or account owner permissions](faq-billing-setup.md#find-owner) + + + +* An [Azure subscription](faq-pay-for-basic-users.md#AzureMSDNSubscription) to bill your purchases. +You must have at least [an **owner** or **contributor** role](add-backup-billing-managers.md) +to link this subscription to your VSTS account. + + [Sign up for an Azure subscription](https://portal.azure.com), + if you don't have one. Or have an Azure administrator + [add you as an **owner** or **contributor** role](add-backup-billing-managers.md) + to an Azure subscription that you can use to bill purchases. + Make sure to use the same email address + that you sign in to VSTS with for this activity. + + You'll link this Azure subscription to your VSTS + account in the [Azure portal](https://portal.azure.com). Your + Azure subscription has all the necessary billing information, + so you won't set this up separately for your VSTS account. + [How does Azure billing work?](faq-billing-setup.md#azure-billing) + + If you've lost access to your Azure subscription, + contact [Azure Support](http://azure.microsoft.com/en-us/support/options/). + + + +## Link an Azure subscription to your VSTS account for billing + +0. [Sign in to the Azure portal](https://portal.azure.com/) +as VSTS account owner and as Azure subscription Co-administrator or greater. + + [Browser problems in Azure?](https://azure.microsoft.com/en-us/documentation/articles/azure-preview-portal-supported-browsers-devices/) + +0. Go to **More services** > **Developer tools** > **VSTS accounts**. +Select your VSTS account. + + ![More services, Developer tools, VSTS accounts, select your account](_img/set-up-billing/ap_vso_startlink2.png) + +0. Choose the **Link** button. + + ![Choose Link button over middle panel](_img/set-up-billing/ap-vso-selectlink2.png) + +0. Select your Azure subscription. + + ![Select an Azure subscription](_img/set-up-billing/ap_vso_selectsubscription.png) + + After Azure sets up the link, your VSTS account appears linked to your Azure subscription. + + ![Your account is now linked to your Azure subscription](_img/set-up-billing/ap_vso_linked.png) + +## Next + +* [Pay for more users](buy-basic-access-add-users.md) +* [Buy more pipeline capacity for builds](buy-more-build-vs.md) +* [Buy more cloud-based testing services](buy-load-testing-vs.md) + + +## Troubleshooting + +[Troubleshooting](faq-billing-setup.md) diff --git a/docs/billing/toc.yml b/docs/billing/toc.yml new file mode 100644 index 00000000000..7178b68334e --- /dev/null +++ b/docs/billing/toc.yml @@ -0,0 +1,80 @@ +- name: Billing + href: index.md +- name: Overview + items: + - name: Billing overview + href: overview.md +- name: Quickstarts + items: + - name: Pay for VSTS users + href: buy-basic-access-add-users.md + - name: Try extensions for free + href: try-additional-features-vs.md +- name: Tutorials + items: + - name: Change Azure AD tenant + href: ../accounts/change-azure-active-directory-vsts-account.md +- name: Concepts + items: + - name: Billing and Microsoft Azure + href: billing-concepts.md + - name: Use MSDN subscription with organizational account + href: link-msdn-subscription-concept.md +- name: How-to Guides + items: + - name: Set up billing + items: + - name: Link Azure subscription to VSTS Account + href: set-up-billing-for-your-account-vs.md + - name: Add backup billing managers + href: add-backup-billing-managers.md + - name: Change Azure subscription for billing + href: change-azure-subscription.md + - name: Link work accounts to Visual Studio with MSDN subscriptions + href: link-msdn-subscription-to-organizational-account-vs.md + - name: How to buy build pipelines + href: buy-more-build-vs.md + - name: How to buy load testing services + href: buy-load-testing-vs.md + - name: Buy basic access to TFS Test hub + href: buy-access-tfs-test-hub.md + - name: Buy HockeyApp + href: get-hockeyapp.md + - name: Buy Xamarin University + href: xamarin-univ.md + - name: Manage Visual Studio subscriptions + items: + - name: Buy Visual Studio subscriptions + href: vs-subscriptions/buy-vs-subscriptions.md + - name: Manage Visual Studio subscriptions + href: vs-subscriptions/manage-vs-subscriptions.md + - name: View Visual Studio subscriptions + href: vs-subscriptions/view-vs-subscriptions.md +- name: Troubleshooting + items: + - name: Billing signup + href: faq-billing-setup.md + - name: Pay for more Basic users + href: faq-pay-for-basic-users.md + - name: Try extensions + href: faq-extension-trials.md + - name: Visual Studio subscriptions + href: faq-vs-subscriptions.md + - name: Azure billing + href: faq-azure-billing.md + - name: Link work or school account to MSDN subscription + href: faq-link-msdn-subscription-org-account.md +- name: Reference + items: + - name: Permissions and access for VSTS + href: ../security/permissions.md +- name: Resources + items: + - name: Account Management + href: ../accounts/index.md + - name: "Security & Identity" + href: ../security/index.md + - name: Manage Extensions + href: ../marketplace/index.md + - name: Service hooks + href: ../service-hooks/index.md \ No newline at end of file diff --git a/docs/billing/try-additional-features-vs.md b/docs/billing/try-additional-features-vs.md new file mode 100644 index 00000000000..c7541af21a5 --- /dev/null +++ b/docs/billing/try-additional-features-vs.md @@ -0,0 +1,100 @@ +--- +title: Try paid VSTS extensions free | Visual Studio Team Services +description: Trial the paid feature extensions in Visual Studio Team Services (VSTS, Visual Studio Online, VSO) +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 435fb3a4-1766-4172-928d-80c09cfb1410 +ms.manager: douge +ms.author: estfan +ms.date: 1/13/2017 +--- + +# Try paid extensions for free in Visual Studio Team Services + +**VSTS** + +Extensions offer features and capabilities that you +can install in your VSTS account. +Some paid extensions offer a trial so that you can try +their features free for a limited time. +For example, the [Test Manager](https://marketplace.visualstudio.com/items/ms.vss-testmanager-web) +extension offers a free 30-day trial so that all +users with access to Basic features can try the integrated, +comprehensive manual and exploratory testing features. + +## Who can start extension trials? + +As the VSTS [account owner or project collection administrator](faq-billing-setup.md#find-owner), +you can start extension trials for your VSTS account. +Otherwise, you can +[request extensions](/vsts/marketplace/install-vsts-extension#request) +instead. Learn about other +[VSTS extensions](https://marketplace.visualstudio.com/vsts). + +[Can't access existing features?](faq-extension-trials.md#feature-access) + +## Start an extension trial + +0. Sign in to [Visual Studio Marketplace > Visual Studio Team Services](https://marketplace.visualstudio.com/vsts). + + ![Find extension trial](_img/get-vsts-extensions/marketplace.png) + + [Why am I asked to choose between my work or school account and my personal account?](faq-extension-trials.md#ChooseOrgAcctMSAcct) + +0. Find and select a paid extension that you want to try. + + ![Start the extension trial](_img/try-additional-features/mp-start-test-manager-trial.png) + +0. Select your VSTS account to install this extension. + + ![Select VSTS account for extension trial](_img/try-additional-features/select-account.png) + + * [Why don't I see any VSTS accounts?](faq-extension-trials.md#no-accounts) + * [Why can't I start an extension trial for the selected account?](faq-extension-trials.md#no-permissions) + +0. After your extension finishes installing, + go to your VSTS account to use your extension. + Let your team know that they have access too. + + ![Marketplace installs your extension](_img/try-additional-features/extension-installed.png) + + [Need help?](faq-extension-trials.md#get-support) + + +## Keep using your extension after the trial ends + +Follow these steps *before* the trial ends if you want +to keep using your extension without disruption. +Otherwise, you'll lose access when the trial expires. +Charges won't start until the trial ends. + +> [!TIP] +> You only have to buy and assign extensions for users who need access. +> Some extensions include free users. To keep access to such extensions, +> [assign the extension up to the number of free users that you get](../marketplace/assign-paid-extensions.md). +> For additional users who need access, +> [buy the extension from the Visual Studio Marketplace](../marketplace/install-vsts-extension.md) +> and [assign the extension to these users](../marketplace/assign-paid-extensions.md). +> If you have [Visual Studio subscribers](https://marketplace.visualstudio.com/subscriptions), +> check their subscription benefits. These users get additional features, +> like Test Manager, included with their subscriptions as benefits. +> So if you installed these extensions, Visual Studio subscribers +> can continue using them without paid access and assignment. +> +> To change the number of users that already have paid extension access, +> learn [how to change that quantity here](change-number-paid-extension-users.md). + +If you lose access because the trial expires, +just follow these steps to buy and assign the +extension for users who need access. + +0. [Buy the extension](../marketplace/install-vsts-extension.md#install-extension) +only for users who need access. + + To buy the extension, you can also go to the extension pane in your account. + + ![Users hub, extension pane](_img/try-additional-features/extension-trial-in-account-updated-ui.png) + +0. [Assign the extension](../marketplace/assign-paid-extensions.md) +only to users who need access. diff --git a/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/assign-subscriptions.png b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/assign-subscriptions.png new file mode 100644 index 00000000000..1dec63924e6 Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/assign-subscriptions.png differ diff --git a/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-Azure-sub.png b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-Azure-sub.png new file mode 100644 index 00000000000..20422896a3f Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-Azure-sub.png differ diff --git a/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-start.png b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-start.png new file mode 100644 index 00000000000..dc86782b281 Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-start.png differ diff --git a/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-success-many.png b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-success-many.png new file mode 100644 index 00000000000..b03014f0a35 Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-success-many.png differ diff --git a/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-success.png b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-success.png new file mode 100644 index 00000000000..f01e154160a Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-success.png differ diff --git a/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-users.png b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-users.png new file mode 100644 index 00000000000..99751c9fb77 Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/buy-vs-sub-users.png differ diff --git a/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/manage-subscriptions.png b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/manage-subscriptions.png new file mode 100644 index 00000000000..475186cb1c5 Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/manage-subscriptions.png differ diff --git a/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/view-assigned-subscription-list-subscriptions-portal.png b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/view-assigned-subscription-list-subscriptions-portal.png new file mode 100644 index 00000000000..d1b5403252b Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/view-assigned-subscription-list-subscriptions-portal.png differ diff --git a/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/view-subscription-benefits-subscriptions-portal.png b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/view-subscription-benefits-subscriptions-portal.png new file mode 100644 index 00000000000..138f88829a9 Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/buy-vs-subscriptions/view-subscription-benefits-subscriptions-portal.png differ diff --git a/docs/billing/vs-subscriptions/_img/details-page.png b/docs/billing/vs-subscriptions/_img/details-page.png new file mode 100644 index 00000000000..e4773212ad0 Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/details-page.png differ diff --git a/docs/billing/vs-subscriptions/_img/subscribers-page.png b/docs/billing/vs-subscriptions/_img/subscribers-page.png new file mode 100644 index 00000000000..3aef1ecaa0a Binary files /dev/null and b/docs/billing/vs-subscriptions/_img/subscribers-page.png differ diff --git a/docs/billing/vs-subscriptions/buy-vs-subscriptions.md b/docs/billing/vs-subscriptions/buy-vs-subscriptions.md new file mode 100644 index 00000000000..077b641067b --- /dev/null +++ b/docs/billing/vs-subscriptions/buy-vs-subscriptions.md @@ -0,0 +1,94 @@ +--- +title: Buy Visual Studio subscriptions | Visual Studio Marketplace +description: Subscriptions that include integrated developer tools and services for Windows, Java, Android, iOS, Linux, and modern app development +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: f5fab296-1942-47c9-b4c8-61bf347b3d87 +ms.manager: douge +ms.author: elbatk +ms.date: 11/29/2016 +--- + +# Buy Visual Studio Professional and Visual Studio Enterprise subscriptions + +You can buy [Visual Studio Professional and Visual Studio Enterprise subscriptions](https://www.visualstudio.com/subscriptions/) +from the [Visual Studio Marketplace](https://marketplace.visualstudio.com). +Learn about the [full benefits for these subscriptions](https://www.visualstudio.com/subscriptions/), +[compare their benefits](https://www.visualstudio.com/vs/compare/), or [subscription pricing](https://www.visualstudio.com/vs/pricing/). + +## Before you start + +* To bill your purchases, you'll need an [Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/). +You can [sign up](https://portal.azure.com) +before your first purchase or during your first purchase in the Visual Studio Marketplace. +Learn [which Azure subscriptions you can use for Visual Studio Marketplace purchases](../faq-azure-billing.md#billing). + +* To sign up for your Azure subscription and buy from the Visual Studio Marketplace, +you'll need a ["personal" Microsoft account](https://www.microsoft.com/account) +or a ["work or school account"](https://azure.microsoft.com/en-us/documentation/articles/sign-up-organization/) +if you're buying for your organization, and they manage identities with Azure Active Directory (Azure AD). + +## Buy subscriptions + +0. Sign in to +[Visual Studio Marketplace > Subscriptions](https://marketplace.visualstudio.com/subscriptions). + +0. Choose the subscription that you want to buy, for example: + + Buy a Visual Studio subscription + +0. Select the Azure subscription to use for billing. +Or sign up for a new subscription, if you don't have one. + + Select Azure subscription for biling + +0. Select the number of subscriptions to buy. + + Select number of subscriptions + + If you don't want subscriptions assigned to yourself, clear **Assign this subscription to me**. + +0. Confirm and finish your purchase. +To view your subscription benefits now, +go to the Visual Studio subscriptions portal +(```https://my.visualstudio.com```). + + Finish purchase successfully + + Go to Visual Studio subscriptions portal + + Or if you purchased more than one subscription, + assign subscriptions to others in the + [Visual Studio Subscriptions Administration portal](https://manage.visualstudio.com/_apis/Home/redirect?RedirectSource=Commerce). + + Assign subscriptions to others + + View subscriptions + + +## Change the number of purchased subscriptions + +To view all Visual Studio subscriptions purchased +from the Visual Studio Marketplace and their assignments to users, +change these subscriptions, +or cancel these subscriptions as the subscription administrator, go to the +[Visual Studio Subscriptions Administration portal](https://manage.visualstudio.com/_apis/Home/redirect?RedirectSource=Commerce), +and sign in with the identity used to purchase these subscriptions. + +* To change the number of purchased subscriptions: + + Change subscriptions + +* To cancel these subscriptions, reduce the number of subscriptions to zero (0). +They won't renew at the end of the month. + + +## Marketplace and Billing Q&A + +Visit [Marketplace support](../../marketplace/marketplace-billing-qa.md), +[Visual Studio subscriptions troubleshooting](../faq-vs-subscriptions.md), or +[Azure billing troubleshooting](../faq-azure-billing.md) to +find answers to multiple common questions around the Visual Studio Marketplace and Azure billing. + + + diff --git a/docs/billing/vs-subscriptions/manage-vs-subscriptions.md b/docs/billing/vs-subscriptions/manage-vs-subscriptions.md new file mode 100644 index 00000000000..3502b4f21c3 --- /dev/null +++ b/docs/billing/vs-subscriptions/manage-vs-subscriptions.md @@ -0,0 +1,64 @@ +--- +title: Using the Administrator Portal | Visual Studio Marketplace +description: How to use the Visual Studio Subscriptions Administrator portal to manage subscriptions +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.manager: douge +author: douge +ms.date: 07/17/2017 +--- + +# Using the Visual Studio Subscriptions Administrator Portal + +Keep this in mind when you use the Visual Studio Subscriptions Administration Portal: + +- **Visual Studio Subscriptions are licensed per user.** Each subscriber can use the software on as many computers as needed for development and testing. +- **Assign only one subscription level for each subscriber**, corresponding to the Visual Studio Subscription your organization purchased. If you have subscribers with more than one subscription level assigned to them, edit their settings so that they only have one. +- **A subscriber’s subscription level will need to be updated** when the subscription is upgraded (after the purchase of a “step-up” license) or renewed at a lower level. +- **Do not share subscriptions between subscribers.** You must assign a subscription to anyone who uses all or part of the subscription benefits (software for development and testing, Microsoft Azure, e-learning, etc.). + +## Adminstrator Roles +There are two different roles that exist in the new Visual Studio Subscriptions Administration Portal for Volume Licensing customers. These roles are like the Primary/Notices Contact role and the Subscriptions Manager role in the VLSC today. + +**Super admins:** Upon first setting up an organization, the Primary or Notices Contact becomes a super admin by default. The Primary or Notices contact can choose to assign additional super admins or administrators. A super admin can add and remove other administrators as well as subscribers. If there are more than two super admins in the system, a super-admin can delete all but the last two for security. + +**Administrators:** An administrator can only be set up by a super admin. An administrator can manage subscribers in the agreements that the super admin assigns to them. + +## Getting Started +### Onboarding +When your organization is ready to be onboarded to the Visual Studio Subscriptions Administration Portal an email will be sent to the Primary and Notices Contacts inviting them to complete the onboarding process. The below details are the steps that will need to be taken to onboard to the new portal. If you’d like a walkthrough of the process, check out this [administrator onboarding video](https://channel9.msdn.com/Series/Visual-Studio-Subscriptions-Administration/Onboarding-your-organization-to-the-new-Visual-Studio-Subscription-Administration-Portal-and-setting) or this [support article](https://support.microsoft.com/help/4013931/visual-studio-subscriptions-administrator-migration-process "Visual Studio Subscriptions Administrator Migration Process"). +1. **Locating your PCN and signing in:** +- In the email, the Primary and Notices Contacts are provided with a unique link and the last three digits of their Public Customer Number (PCN). * +- In order to obtain the entire PCN, the Primary Contact will need to sign in to the VLSC (instructions for locating the PCN can be found here). +- After obtaining the PCN, they’ll need to select their unique link which will prompt them to sign in. They will be able to sign in using either a work/school account (if your organization is on AAD) or a Microsoft Account (MSA) if your organization is not on AAD. +- Next, they will need to enter the PCN. +2. **Set up your administrators.** After entering the PCN, they will be registered as a super admin in the new system and will be able to add other super admins and administrators (previously known as Subscription Managers). To avoid losing access this should be completed prior to your organization’s migration date. +3. **Accessing the new subscription management portal.** Once your organization is migrated, emails will be sent to the newly added super admins and administrators inviting them to access the new portal and begin managing subscriptions. + +* *Note: If the Primary or Notices Contacts receive more than one email, this means that they have more than one PCN. They will need to complete the process using the unique link for the PCN referenced in each email.* + +If you need to be added to the new Visual Studio Subscriptions Administration Portal and you aren’t sure who your Primary/Notices Contact is, you can find this information after signing in to the [VLSC](https://www.microsoft.com/Licensing/servicecenter/default.aspx). Take a look at [this article](http://www.visualstudio.com/subscriptions/support/#!articles/962-6707-how-do-i-locate-my-primary-contact "How Do I Locate My Primary Contact?") for steps on locating your Primary/Notices Contact in the VLSC. +If you have already been set up as an administrator, then you can go directly to the [Visual Studio Subscriptions Administration Portal](https://manage.visualstudio.com). + +### Understanding the Subscribers Page +Once you’ve assigned subscriptions, the Subscribers tab provides detailed information about your subscribers, including: +- The first and last name of each subscriber. +- The email address for this user. +- The subscription level that has been assigned to them. +- The date that their subscription was assigned to them. +- The expiration date for their subscription. +- An optional text description. +- An indication of whether subscriber downloads has been enabled or disabled. +- The country in which they are located. +- Their language preference for the assignment communication email from the administration portal. +- An optional field for a different email address used for communications than sign-in. + +On the left-hand side of this page you can see additional information about the number of subscription licenses purchased, assigned, and still available in your organization for each agreement. + +![Visual Studio Subscriptions Admin Portal Subscibers Page](_img/subscribers-page.png) + +### Understanding the Details Page +For more information about the agreement you are viewing, select the Details tab. It shows the agreement status, purchase account, org details, primary contacts (VLSC), super-admins (if available) and other pertinent information. + +![Visual Studio Subscriptions Admin Portal Details Page](_img/details-page.png) + diff --git a/docs/billing/vs-subscriptions/view-vs-subscriptions.md b/docs/billing/vs-subscriptions/view-vs-subscriptions.md new file mode 100644 index 00000000000..fe05342c1fb --- /dev/null +++ b/docs/billing/vs-subscriptions/view-vs-subscriptions.md @@ -0,0 +1,21 @@ +--- +title: View Visual Studio subscriptions assigned to you +description: View Visual Studio subscriptions assigned to you +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: a133e7f0-690f-4c68-8e4f-ed40ef241d35 +ms.manager: douge +ms.author: elbatk +ms.date: 11/29/2016 +--- + +# View Visual Studio subscriptions assigned to you + +To view Visual Studio subscriptions assigned to you +specifically and your subscription benefits, +go to the Visual Studio subscriptions portal +(```https://my.visualstudio.com```). + +Visual Studio subscriptions portal, Subscriptions + +Visual Studio subscriptions portal, Benefits diff --git a/docs/billing/xamarin-univ.md b/docs/billing/xamarin-univ.md new file mode 100644 index 00000000000..7c602d15914 --- /dev/null +++ b/docs/billing/xamarin-univ.md @@ -0,0 +1,135 @@ +--- +title: Buy to Xamarin University +description: Get training on Xamarin forms for device app development +ms.prod: vs-devops-alm +ms.technology: vs-devops-setup +ms.assetid: 0b264fc8-f2b9-4636-9caf-ef3a85b45835 +ms.manager: douge +ms.author: esther +ms.date: 03/29/2017 +--- + +# Buy Xamarin University + +[Xamarin University](https://www.xamarin.com/university) offers live, online classes, office hours, self-guided learning, +and guest lectures. + +In this topic: + + * [Steps to buy Xamarin University from the Visual Studio Marketplace](#buy-it) + * [Q & A](#q-n-a) + +To subscribe to Xamarin University you need: + +* A [Microsoft account](https://www.microsoft.com/account), such as, an outlook.com or hotmail.com address, +or a work or school account, such as someone@fabrikam.com. + +* A [Microsoft Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +to use for billing. There is no cost to create an Azure subscription, which essentially is a billing account +that gets charged when you buy something. + + You may already have an Azure subscription if you use Azure, or you pay for VSTS or other + services through Visual Studio Marketplace. If you don't have an Azure subscription, you can + [sign up for Azure](https://portal.azure.com) + before or during your first Marketplace purchase. Learn more about + [using Azure subscriptions to bill Marketplace purchases](#azure-billing). + + + +## Steps to buy Xamarin University from the Visual Studio Marketplace + +0. Sign in to +[Visual Studio Marketplace > Subscriptions](https://marketplace.visualstudio.com/subscriptions) +with your Microsoft account, or with your work or school account: + +0. Choose Xamarin University: + + ![Choose Xamarin University](_img/xamarin/01-marketplace.png) + +0. On the next screen choose **Buy**: + + ![Buy Xamarin University](_img/xamarin/02-xamarin-univ.png) + +0. Choose the Azure subscription that you want to use for billing. The name of the subscription defaults to the type of account it is, but you can change the name within the [Azure Account portal](https://portal.azure.com). You can also create a new Azure subscription to use instead. + + ![Choose your Azure subscription or create a new one](_img/xamarin/03-xamarin-id.png) + +0. Choose the number of users: + + ![Choose the quantity of Xamarin University licenses you need](_img/xamarin/04-xamarin-quantity.png) + +0. Confirm your purchase: + + ![Confirm your purcase](_img/xamarin/05-xamarin-confirm.png) + + Your purchase is complete, and you can get started: + + ![Microsoft confirmation screen for purchasing Xamarin University](_img/xamarin/06-ms-confirm.png) + +0. There is information on the next screen explaining that Xamarin University will send you a redemption +code to use on the Xamarin site: + + ![You will receive email with a redemption code for the Xamarin site](_img/xamarin/07-email-notice.png) + +0. The email that you will receive looks like this: + + ![Example email with redeption code](_img/xamarin/08-xamarin-email.png) + + + + +## Q & A + +####Q: Where can I manage the Xamarin University subscriptions I've purchased? + +A: If you're the Xamarin University team admin, use the [Xamarin University Subscription Administration](https://university.xamarin.com/subscriptions) to assign Xamarin University subscriptions to your users. + + +####Q: Can I buy Xamarin University through the Visual Studio Marketplace now? + +A: Yes. Previously, Xamarin University was available for sale through Xamarin.com. We have moved purchasing to the Visual Studio Marketplace so that customers can buy Xamarin University along with other services on the same Azure bill. + +Learn about [billing Marketplace purchases with Azure](#azure-billing). + + +####Q: I'm an existing Xamarin University customer. How do I switch from paying through xamarin.com to paying through Azure? + +A: Here's how: + +0. Wait until your existing Xamarin University subscription expires. + +0. Sign in to [Visual Studio Marketplace > Subscriptions](https://marketplace.visualstudio.com/subscriptions). + +0. Buy Xamarin University for the number of users who need it. + + If you need additional Xamarin University subscriptions before your current annual subscription expires, + please make the new purchases in the Visual Studio Marketplace. All of your Xamarin University subscriptions`, + wherever you purchased them, are managed in the [Xamarin University Subscription Administration](https://university.xamarin.com/subscriptions) portal. + + +####Q: How do I cancel or change the number of Xamarin University subscriptions I'm buying? + +A: Follow these steps: + +0. Sign in to [Visual Studio Marketplace > Subscriptions](https://marketplace.visualstudio.com/subscriptions) +with the credentials used to purchase Xamarin University. + +0. Choose **Xamarin University**. + +0. Choose **Buy**, just as if you were buying a new Xamarin University subscription. + +0. Change the number of subscriptions. To cancel, enter zero. Confirm and finish. + + Increases take effect immediately, and your charges are prorated based on the number of days remaining in the current + calendar month. + + Reducing the number of Xamarin University subscribers takes effect the first day of the following calendar month. At + this time, please return to the Xamarin University portal to delete the users who should no longer have + Xamarin University subscriptions. + + + + +[!INCLUDE [azure-billing](_shared/qa-azure-billing.md)] + +[!INCLUDE [marketplace-support](_shared/qa-marketplace-support.md)] diff --git a/docs/breadcrumb/toc.yml b/docs/breadcrumb/toc.yml new file mode 100644 index 00000000000..c4deb7ea5db --- /dev/null +++ b/docs/breadcrumb/toc.yml @@ -0,0 +1,154 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: New User Guide + tocHref: /vsts/user-guide/ + topicHref: /vsts/user-guide/index + - name: Code + tocHref: /vsts/git/ + topicHref: /vsts/index#pivot=services&panel=code + items: + - name: Git + tocHref: /vsts/git/ + topicHref: /vsts/git/index + - name: TFVC + tocHref: /vsts/tfvc/ + topicHref: /vsts/tfvc/overview + - name: "Continuous Integration & Delivery" + tocHref: /vsts/build-release/ + topicHref: /vsts/index#pivot=services&panel=delivery + items: + - name: Deploy to Azure + tocHref: /vsts/deploy-azure/ + topicHref: /vsts/deploy-azure/index + - name: Build and Release + tocHref: /vsts/build-release/ + topicHref: /vsts/build-release/index + - name: Package Management + tocHref: /vsts/package/ + topicHref: /vsts/package/index + - name: Continuous Testing + tocHref: /vsts/build-release/ + topicHref: /vsts/build-release/test/index + - name: Testing + tocHref: /vsts/manual-test/ + topicHref: /vsts/index#pivot=services&panel=testing + items: + - name: "Exploratory & Manual Testing" + tocHref: /vsts/manual-test/ + topicHref: /vsts/manual-test/index + - name: Load Testing + tocHref: /vsts/load-test/ + topicHref: /vsts/load-test/index + - name: Unit Testing + tocHref: https://docs.microsoft.com/visualstudio/test/improve-code-quality/ + topicHref: https://docs.microsoft.com/visualstudio/test/unit-test-your-code + - name: Agile + tocHref: /vsts/work/ + topicHref: /vsts/index#pivot=services&panel=agile + items: + - name: Kanban + tocHref: /vsts/work/kanban/ + topicHref: /vsts/work/kanban/index + - name: Backlogs + tocHref: /vsts/work/backlogs/ + topicHref: /vsts/work/backlogs/index + - name: Scrum + tocHref: /vsts/work/scrum/ + topicHref: /vsts/work/scrum/index + - name: Work items + tocHref: /vsts/work/work-items/ + topicHref: /vsts/work/work-items/index + - name: Queries + tocHref: /vsts/work/track/ + topicHref: /vsts/work/track/index + - name: Customization + tocHref: /vsts/work/customize/ + topicHref: /vsts/work/customize/index + - name: Agile at Scale + tocHref: /vsts/work/scale/ + topicHref: /vsts/work/scale/index + - name: Analytics + tocHref: /vsts/report/ + topicHref: /vsts/index#pivot=services&panel=analytics + items: + - name: "Charts, Dashboards & Widgets" + tocHref: /vsts/report/ + topicHref: /vsts/report/index + - name: "VSTS & PowerBI" + tocHref: /vsts/report/powerbi/ + topicHref: /vsts/report/powerbi/index + - name: Collaboration + tocHref: /vsts/collaborate/ + topicHref: /vsts/index#pivot=services&panel=collaboration + items: + - name: Notifications + tocHref: /vsts/notifications/ + topicHref: /vsts/notifications/index + - name: "READMEs & Wikis" + tocHref: /vsts/collaborate/ + topicHref: /vsts/collaborate/index + - name: Search + tocHref: /vsts/search/ + topicHref: /vsts/search/index + - name: Feedback + tocHref: /vsts/feedback/ + topicHref: /vsts/feedback/index + - name: Admin + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=admin + items: + - name: Account Management + tocHref: /vsts/accounts/ + topicHref: /vsts/accounts/index + - name: "Server Administration (TFS)" + tocHref: /vsts/tfs-server/ + topicHref: /vsts/tfs-server/index + - name: "Security & Identity" + tocHref: /vsts/security/ + topicHref: /vsts/security/index + - name: "Scale & Configure Teams" + tocHref: /vsts/teams/ + topicHref: /vsts/teams/index + - name: Billing + tocHref: /vsts/billing/ + topicHref: /vsts/billing/index + - name: Manage Extensions + tocHref: /vsts/marketplace/ + topicHref: /vsts/marketplace/index + - name: Extend + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=integration + items: + - name: Build extensions + tocHref: /vsts/extend/ + topicHref: /vsts/extend/index + - name: Visual Studio Extensions + tocHref: /vsts/integrate/ide/extensions/ + topicHref: /vsts/integrate/ide/extensions/overview + - name: Integrate + tocHref: /vsts/integrate/ + topicHref: /vsts/integrate/index + - name: TFS SharePoint integration + tocHref: /vsts/ecosystem/sharepoint/ + topicHref: /vsts/ecosystem/sharepoint/index + - name: TFS-Project Server integration + tocHref: /vsts/work/tfs-ps-sync/ + topicHref: /vsts/work/tfs-ps-sync/index + - name: "Data Warehouse & SQL Reports" + tocHref: /vsts/report/sql-reports/ + topicHref: /vsts/report/sql-reports/index + - name: Marketplace + tocHref: /vsts/extend/ + topicHref: /vsts/index#pivot=services&panel=integration + items: + - name: Discover Extensions + tocHref: /vsts/marketplace/ + topicHref: https://marketplace.visualstudio.com/ + - name: Service Hooks + tocHref: /vsts/service-hooks/ + topicHref: /vsts/service-hooks/index + - name: Visual Studio subscriptions + tocHref: /vsts/marketplace/vs-subscriptions/ + topicHref: /vsts/marketplace/vs-subscriptions/buy-vs-subscriptions \ No newline at end of file diff --git a/docs/build-release/_img/index/app-service-web.png b/docs/build-release/_img/index/app-service-web.png new file mode 100644 index 00000000000..d6732db2005 Binary files /dev/null and b/docs/build-release/_img/index/app-service-web.png differ diff --git a/docs/build-release/_img/index/appservice.png b/docs/build-release/_img/index/appservice.png new file mode 100644 index 00000000000..b451547c8a9 Binary files /dev/null and b/docs/build-release/_img/index/appservice.png differ diff --git a/docs/build-release/_img/index/logo_cpp.svg b/docs/build-release/_img/index/logo_cpp.svg new file mode 100644 index 00000000000..2705a3e4373 --- /dev/null +++ b/docs/build-release/_img/index/logo_cpp.svg @@ -0,0 +1,10214 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzUvVuPZsd1JfgugP8h58GA1IOqivtFgB+oEu1md0oURMkjj2EQqaoUWVZlFbsuVrN//cS+rBXx +ZWZRBGYeemyYJneeL06cuO7L2mv/w//xu6+ffP7y7Z9vn+Sn4eqzn/3DPzx/d3vz4e27X16p+OrL +168/vv/wTkQ///0vrmJ/GuSpz78c3/iT/3L77v2rt29+eZXi02h//Sf5/c9/ffvnt+9uvrv6+sPt +qzd/vf3F1c9/IX/8w6sPr2/Xn1+//fbt+6c3r37Bt65Wfn3zYf1tPovPUoj9KsZfhnL1+W/0kZs3 +/3nz/v2r/7UeiC2PLMJfvf345uWrN9/+6u3/XB2YV09iieuvY/1LKPLAf331+9v39556Gusso4Q6 +29SfhKelhVhGGjXGtn7fn7YSWp81lZyiNnbxiLT867cvPt7dvvnwu3dvX9y+f//87eu3797/8ur5 +Dzdvrn5z8+36y83Vv96+fv32b1e/en3z4q/nb/7p7ZsP69mvb799e/vHL598fXv36s9vX788H/nt +7e3L25effvDzL+s3//Tq9e0a67ubD1cx69B//mVM3/zq46vXL3/78e7Pt2sacmoqz99oD//4fnVt +9VL+XeX9my/vlujr2w8f1gitd+kM/v6ff/V8zfvbO31wCfV/f/71h5sPH9/b9/zCnzu/fz34NOZe +UgolrEEbrYkkpT5HmWXO0ooKWhihjl5DS7Nc/fxXr/969d9jCNrm/7meSK3Eknsrs6c2+pXMUC8t +raZKCTmPJRmpl/X3OerIq3lp5ePtVXgSU3iSYkVb68maR6px9DZyDLXKb2MuddQWx3pBH/7b1YMn +OTxZ/8uOlBrmCCGsrozSxk+S/Pz5P8+1dOsT/7+jJz33VFene0otVfmuNSohhZBGXB8c5/qxLCD5 +jDGepJLYk9hmiGk9tRZuy0kGac5Yakqxx9WEfNZqYg3TGoAc2lrcaw/+9eqf393evlnt9fokDbY2 +Sl8TMNbqKLVEmaWUo3SurpfMMZcghDzXOLYx6szS2Ffvbt58e7v2eXtS55N4fFaYJcY+51xjMEqW +IW+hy7SsqW9z7eSf/+7z3/7hq99+cZVGu1qrhh3J8uDaZSmkvN4nH7HGcXVupraa1J6sPrQ12b21 +mdJq6uO771/fXs30pKzxLXW3tcarzdJzrakHXWkzhlxXL2TNDGm91tzrmqWew3pDfdja1THka7mu +zq0lmtv6LnlDXDNXRg55rGmTD5WDYsT1oWvFr5lZe+SvP/z63av/XOPU07ia5UkfFytKNkOTGY91 +xCaz1prslZBbzmsUZVGMdT6NddiUXtMIQxv9/vZKF+nzf1wj+Jt/HFf/+o/h6r//Y9jTIDv0335/ +++0rPbDXafrvxxS1tbrWLPYR10aM8i3TpjutBThnz1c/v3uPHdTKk5Tn3gRreee5FngcTSekryFZ +qyzOtAZaeiw//ud3b65i6mvhtuNz769vGcP14rZam+sQH7ps8/qftZr7WjVr/Uljv799ebVm88lY +O7J4Y1HfXMtYT5Y1fjMme/M6Zq/Wp6w3V3uzHnfv3n5/d/Pur+9/7Mgvo68OpqtW7z/hJ36VbdeL +t/mH27vvX68rSi+StceunuTZntbjX/HgOpn1obWFZbOFKs2vbbkuk7qa7uO4b3K+9/b1LevMWgfb +2tmyELzRfePc/uer27/98uq3b9/c+lXw+bsPX9vVuM6HYP/0P/3+4+vbd39880ouErsLpt0Fv3n7 +8vb1+sVu4p9e3+gVoP8b9z/9iT/cvPv29sO6UN++/vhB7/zBt6z75vrmh1u5ApNdRP2bX621+Ga9 +682H1etvXv3lm/80XeGbbz/8Um5378xX39+++cPbf9FPelJLlgGVPy9tY622ucY2Du1HX8dqquxe +3P/EGz9//eH23Zs1Q3jr//ev+OLNy29c57l9efGaqq+Rl2Akevc/iPB3N6/XJXsrw5tWkyMO+UeI ++t9rE2FxXT1/fXvzRpb879bF/NW7V2sQf/mkpau1GerTpZX0YP8T/QL/53evXu77u6erYf/QqXs6 +/OG1WdeJN3+qZOr/9CanVEk/ReJDvdbQ+so3WFdLH3n+m0O7CE9/87V82xrG52/vZDm/V0VOlspS +JZZW6H/d/6F/W018/P6zn/3bZz/L89n/+Pj2w+371aIc3O3Zt+9u1nkb03j2xcd3b5cuFI4n/nzz +/vbZX9Zyf/XGpC//bLKlm736/v2r9fpnL2++/fb2nf+/9fdnL169W3vtL69v/+ez72/fffju7cf3 +N29ePvv6xc27t2+efbsULG379e1fPjz76ou13aq1LYLVnv77mrjvPvCV+ij+w/70549L+uHZ7ZuX +N++/e3Z7p//vw9Ldbp+tA/zlrZxeq7H3915qP357++zl26VJL434ah0ez/715avbd+uL3189e//9 +zYs1HK08e/Hx3bvbNy9+WP/Rnv353du/3r75883S+5aG/AzPP3vx9vsfvM13L/+yNMw3r96sn/f0 +bI3/qxc3r9+8/fDsux++/+72zbN3erusH758dnfzQrq1hnVN0rPvl5mwfvnx/bMPf3v7/uMatFdv +3z378N1SPvhfNy8+frh9dvdx7bX8TGUvX6z519Ze3L589fr1zWppbSv+YnXo7ub9i4+vtUdjyB// +x8ebd+s38q/f3bz+i73Dhe+v1gp+9rmuh9XU5/bGz4/Z/NzG93N+/efyAc8+/+LZc+/Csy/058++ +0B+vVr44fv4Ff/elPfWlveLL45kv+cwXH7579lt94WrmK/vBV/aDr44ffGV9+oq/u/v4+sOr71// +8Oyr969lTfwRH/RH+/Efjx//kb/6V/vjH757+26tlttlFrxZS+39sxt78Q2+5+b49Y29+oaN3Ohw +3Nw+e4HhuLWf31rrt/vHq6lb/u6VPfXKnnp1vOIVn7ldw/HGXvjWHn+LPr09fvDWH+HvXr76z1ci +sMH4aD/9aG/6eNGfj/zND/bnDzoYP0D82c/+8IWdyPW/ffOH9+s2PS7RbPfVF29evBVj8ZdX39w3 +ux6xw/7t2YOnnj34md0mf/i/P9O3rLMN77j6w7uPt39Yqp1fE3Zhrh79bk3DB91Zv/1e/za++d3r +j+uP//zu7cfvv3zzl7ef/eznZqFfy96wP17pX5ehrbK1I/729t1f139++fL2ZtuKy+b+/hd/p9Gv +/3r74cV395t16f+bhv/l9sWHdRT/r6XeffXn/1j/Ia2IAbqGYi3MN9+u/+YzP6XBdd28w/ev3+p/ +4v//lN//+vYvq/O7AZN+8eY/b1+//f5o2J77KS3+7vXNm5t3HDTM0rqhfnezZnU3KQ/efvjTT2pz +nW3fr2HRVi4n5e8+cPzpJ73q5sN3y9JYt9J7tm7/uXsuX2Oyn7SYfrhb2+DV+zu2d0p+t5bTqxev +b7/+YV0sP2mAn9+sm3udAt9/9+rF1a/efXz/3dUf3r59zdYf+Tt7fv5N/yS//InDIqrlV29sfB6+ +1R+4/8KlVdtv/jd+G3/12JvWH///9JalosnIPPaOyz/xPS7+3/AtmOSldawD8RMb/0ef+fpvN+vE +vn7157+zUWWY//LqzcvV768/vvpwu/fS27vvxXt69fV3N9/f6nbFk1/vJqtaRce99eTJT7jR9G86 +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 +o21WBNdiA0Y3k9HV6Ta6wjzq0pq6Ns7J51jFaNZGqHTLNxwFNOpx+BIDUEfwzWE6leZG40TCNcOe +jV6DN2ai5uhnBxprwBWHrSYEeqaLdXiclEsm7DZWz28bnVKWAnkpnZ3Vd1pZ/QbSd/uxHRSPve5f +gZcUql2sv0vCM6dJkA3qQxTnW6NJ6s32TQYfbYsg9S04YidNossktXMY9Hg1h9MXh2lpVE3EzyNK +lt/WShbMawbv+vMHgX+PH6IocAXWr0zOlb9dzP6mxsxN0P0ZIP/Hq2fwgSoYRLZ+9fv7uz8+3Nw9 +3tz99cWL2i57Pf+Xn/7k96/l36wp//jFf/7m1ze3GOqnP/lF+/PZf+BvX/7u4vf3L6/lz5/fXD3e +3N9dPnz/nn/65Ozf/vHq9g7/+AIf+HDz9dvH6zf/fvZzdPz04eFyu8/Vtze3Lx+u76SHO/vFb+8e +p3/kfz1+//pa/vHfPv3tV5/evv728iv772e/+AJD3/11s+vfL2/f1r43L3f04S2TLvgGdvr5nhZz +//V/X189/vL+7d1LfOMv7//x/jV9Iyfzl7ubxzcrFrfRe1+rtMb87P0L++7m5eO3K5ZU++1rMWuW +susY58v4x2Ev4fsVS/j+0K/Ut9c3f/32ccVKtOPP133zodHEx7cPX7+9vb67un7/npRfvXdH2uB7 +W9D7l/Jw/ebt7Zrj1Y77Wo57/1ru3r76w9Xj5d+v11D1eee9ERFI+O9f1teXb65//XD9/97icq4h +KVv997W4u/svHm8er3axo9kC30i/P9/crjq4jd4ric2uFdh3reD9YsT1n99HNGYf/u5z2MsRfXH/ +9uHq+jcPl6+/vblaIQrerREF7w6d5N3c7aIlm+tw+1vIzp2eLeP+9fXD5eP9w4q1TF33/F4+u3/1 ++v7NzeO65/KRvkLE+fd/wC8+v/7m7JOjUeXCSZU7qXKHqQedVLnDuFI/FlXum4dLSPa3v7+/eXNS +5rqL2bcyt4JZHaEyt8KaetLlTrrcSZc76XJbyzjpciddTnS5X17//fr2i28vX95/9yycczY8I13n +hXsG2s66RRy6vrPqWv1Y9J3C+sUM9AwY/wrd4M3jy8+v/35zye9ZJWXOu+9rXV/fvt3Fqf5JFW6f +UsBvLt++eXNzeffL3as7bLl5xXV7uYYavtwjOVyzhjVs6eUe+dK653Hw1Ov+m2/eXD++4zUc8Vv/ +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 +5dXN4/f/scpu+Obx+9s1Vurab1/3bmXF5aN5RyvXcyzP6Ne8eEf5itYexHPkOj9yK+fRnNPRULU3 +Avr62fOibcddL291jaYvri5XCQIbvfd10VasqlbZ/Oz+TqqUr9F9tn+xr9V99+0qJILbWu78xbt4 +2HyB2z/Y1/pWRJS9efvwzeXV9dpLudn9pMD+U8tYXZ/2aPjS+oq7zxzoxPoVb+/yf25evV3lVmo9 +93Wwwwoopetb/G2luXvWd19LEiK9B0yejyU+fX4j3PRinUfp5x/zQ4QIXFQm+FylOa2i+gTBZ/mT +vcl1K96zfu2v/vH6/u76SQucfnIS7U6i3Y9QtHtSieWPBXZ9cET1JBQdhVB0kok++Id8UenBUQtF +T6wbf+Ak+hSnfOAW/IPgoSdj9w9Uj/62q8/8MNhpX9drBfP+2y6//sYawmGvYRdI1MYa/GGvYQ3x +/dseae9zi29db8c9fL54+XDz+O2r61XFJY6KP97ePP7x8manXebEHA+YoJ2Y42EIKYfOHNes4dCZ +43o6dfB88Yka8Ik3Hv6d+9HyxmO0IJ+KDR6q0PNxiPzxnMdH/YqjvBHPqwT3M0Qkei9cyjFGoD3L +mm8nnFkRvk/ARHt6U2em/qf3p9by/hOUP645PO14DKTx4FnXq0sMtwK85SiY1m/w6zfviGg6as3u +9v7hd+86rMMmE89L4HuuEB8fPyNun2/o6DEyXqyQ9A4eJOPFc0DJ+HhWpr0s5w//onzYfb7+IwaZ +eIJc8yyv2hE4S55dgB1dCTylP380aOpn4Sg5grM5eJJg1xR8Pkp5en5QK7IJj+0VHb1A/ZwYK+/a +l99cP/z65mGP9o9DO2F3tsLm/3j59e31f661P2703tdpy0d8eLPdPqnJr9/eXf3pKMnIeTozZ6dr +djzX7DfHec3siZgd0y375V6DQ0TFYZ79nx8u7958s6aSwgHe+adJNQcvpD05F+Rk+NjHjSvHtF9J ++mT66J2OhLx9ent70nB+6H09hVh+nBDLj/QFTyyC9LNPf2vNV7+6e9mKIUlbZNNXv7+/+yNGEYia +F7X9l9d/vbmb/8tPf/L712WcUP7xi+9ffX1/i2/5r5u7l/ffvfn3n5qzT3/6E3P25Xf870+vf/qT +t1zm5/zbH/Bf50N22aXgjPXZW39mzm1IQxhc9iYEkzUs6HxIY0CH5GLIBqr6ea5/tnkw+LezLy85 +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 +z3/WH37Rvzz+vP766//ep982/rwlfPnn9Zv887bv/yfjD7/4qbeNP28JX/55xzts+7NqbcF+wboz +7ZPDvvyip3rAuIMa75ff2TV2X/zwJds39iG67fwNHG9v1qHjn+0zZ19UHesP/9YHz/opcvbhh+fn +D57ps0R3+Jlylvzq//Xp7ar2z6ywfb79Z6o97fPtqvbPrPBbZ8lbZ8ltnCVfdP7Vu/6XWzxJPnH2 +4vmHXuWkuDhLnr/3yoNXX3j3iy/agfJlzr/w/o9/6NV7D1/6GM/46ue/cv9FW1Iubz9L7IQoAAnb +WUKWbX6WPBLSh/nRD2cJmbXHHCaleB0mown9x7/+b/+9v/6Ryz9/9yc+bB/23/6dH/rAL37qz13+ ++e2f+fjv/9Zf67/9uv/y9fd+7/9gf/0fP/21/ZO/+3N//g9/+xtf/4OfvPj59Hf/W7/363/p6OdC +/n/71a9H7He/lZ9/+Fde/z++zf76o9/+5fatX/zU/YufC/nf/uX/8PV/+uOv/+63vP4PvoV/m7z9 +/N6PHP3Y17v83/uFf//13//R1//+N68//+CTr/+O/vA7h0/+12/6g9/6hgv5//nn/uKf/N6n7MNf ++5Vf/Zt/45d/+Rd/6Zd+7ud//qd/5md+6tOf/smf/Mn/6sd+7Ed+5Ed+6Id+6Ad+4Af+s+/93r/2 +3b/503/hT/7x9//J//KN//0v/8pJL+UnfuKPf/AH//C1j3/Pd37nb/zUv/vP/9H3/NFvff2v/tLf +mMr+77/5P/3xD/zAH33yk//sK/7N//Svfsff/sl/5//7h9/5f//mf/DLv/CL9tv6LT9r//6uv/rD +9tOF7d9/+PGP/7Ov+Ip/EuN/8u3f/mv/9Z//o9/9tj/4jb/0iz/38yfv5/DPd3zrt/7NH/u6//fv +f/L3f/0v/nc/87OXf7V8/9/pf7gY0f79bd/8yZ/+z7+q//zsf/PT9skP/63fsX+/+3v/9v/5h/98 +vP63ftM3Xfz5v/2pT9u/P/y9v/ovffiH/sKnfuVv/dpv2s/R9T/5l//yhbzNtv37N37nH3/ld/7C +P/qn/8/0/v+jb/iGiz//9R//8R//0R/90U/98Kd+8L/4we/7vu/77u/5nu/8ru/6j7/jO771r3zb +J7/5W77pm775G7/xm77+69+mf9bF9KG3ve3zr1zwbUfe55P+/c3/521HQ17391s9qQ== + + + 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 +qvS172y495q9x2/+7qEb7hu/47m3PXp+9My/7b/x3KW3PfT750hjfPmR51O3Pfa1n33/Ty9tf+3u +DQ9dV/vki79cWPjzT3/96vVnnh781KPz977c/9Xnm6679+GfUly/+c+e+/RjPzz/K/u172146u8r +wJuFhdecfnV+9HtvOfPrwbtePPQPD1/++YeRM/iJ7zz3/InXfrLh0duOHb35oeT7z+x57z3l771n +999+w/6bu2o/fN9b7391/JsvtXzy8f3X3kPtefCa137+fz77UfnDj/3s3U/96V1P/ekqXD/+05U/ +/tNfP/nHd/7oD2///qujZ15quOWxqvefXvjzA7/92SUv/+N//bvHf/aOJ/5Qd/2DKJNdp62rT1vv +Pm2+6+vGu76qX3WncdWdU5984LXzb/v9/Rs+ecvsW75//i0P/67jxgczjThPf/6Z9YtP/cXkp77X +dcezlz10vu8LT05/5vsPPftrMPm3f/iPc8/9OnXz98yr7tSu/FeU/4/f/cn5b/7frz4ycfTGe3d/ +4N6hu1+8/OHzk/e8cPDG+62rv5b8wDfaPnrf7JlfnbrvlaN3/HT/NXejkFdO/zfU8stXfl/z3tPJ +D367/fbnTn7n5dmzr86dexV/J+5/pesrP2266VzFe0//4IXfgPL33z/26qNX48O//eaVweu/UPeB +u2o/dG/yxoeStzy2/+aHD9z0YPN13zp8/b1P//K3vP2v/fH5fz9d8bNrNjx/wyUvf+fdX3/kqUv/ ++Wzj330j+bdf6/3Yd976hUfu+sEv/vza8vClhaVbeQz1kilZcb+SX2m3ed/7p/RYdYFTemvTOxPe +RiLvwPzEQGqmt1eGneyYHKXQc0vmEircXjw3uXrZSBTAsLrbKQVtZ47WWFlq7HJpqLWjobpqan4S +rY/BaLuKWqpxejrVP0MnVB+8NDUD27xEqxVhyoFLu0DMu+Fv3uWi5DTdHuSnYHM7SP919edk++WE +ZS7OJCZoDrV82+Tcli7d+94u3Q1nwtyuVTOKGyYvBZeHvIDsHy0rawXS+idPwD0pawWChvAFMbis +TE4f/jTqqvGpwbHLRmeXxkJdHLU0sobJ0bnR/vFD8/1DAMzcknAGbVPV1Mxkaoa3SMrnYXVZMLj8 ++NK29g+Nzs8uU4eqSsnnYTnXh1eOmpJTN3OjzrNpOfN05eNSTm1djTpJ/ywhlyb5/mSdo0NzI0uC +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 +9/fv3XPijFt0h88+s5gdOf/1pV2vnL0slWPHrleuPTjLDx8cuvj8pYN7Fw/dv6d71dXic7f2nZr/ +cMe+k4uHFo6ez/bseO3W4blbOz/ac/vUpYPZnvLo0WK+eGE+27NvruJvw+JLZ99e3P/Khfn5xWcW +rt/8anjzSLCVdRtbPNw/vnj80MUzx6oDN/bfKOyz/XOL/fuLrx6/cmMIfzz+M9yWhT3n33rvwOun +X62Lpdf6OxefffNmwS65/XePFHsPv/P2qUN6636p27z8zJF9Zx+t4Q/df++94r13Pnpm/yuvLvZf +efkbS9fLZ95/7/7+s1/9xtsHXn/+mXxx55Vj+a79B164uOeDW18/ceBGdfTZwwfKG89qEw4uhW+8 +fuHI4sKN/JmFK83hN+0RbdPsDm9dvq5nO/nCoYt73vnq/Mlj947Nv/bB9Rey5evs+UW375Xnv/rq +LR3BucPuavHMnZElD17+8Jj+eevgyAu/eu7mpUPP33mvmK9ffvuruk24v9Md8w92XTmSLR/eVe85 +caz/fnblbHEsO3biha/ve2bXkfPc3y0sv/T67cP3buw8P//a1cMLg9XO7r0/X12+/uH8mRP7dxy4 +8fWsv3Cl//7h4bMv22+hnxGA3Uuv6OMb+f63dh/M/bkXX3hr5AH5ZwU3Tp0/tPPejmsv73iw89VD +z98+95KOavFrhpt7btVX57Jw9fYhYclOmeFvn/oGm3bn9uF6dLW3bx8+eM3vPbP40s6911dhWnFh +z63n5/bsP7sj27FwZUf/1P69N6+f3vPB8t1nX9n9/uLtLL80//zClTsvuvnXn3nx5MvNlb1vP0Lo +4V7qAa/UZ54/c33/3nffuFyfPHVhWfu1a/7A9ay6VZ16w1+t3pj/8FJ29fKN09kHz1x5P3/p3tkP +8vdfun3WXdr/wlv5wuVXTmfhg32vNx9c/sarC8cO3O4vHH0ncJtwZ+7uc2OYBtTcwvIzd16eP/3g +zLvhzr4P/aEdb79Tzxcv9Y9lV9+5cjXUx+dPhjPh/OmqrHZdDnMvnfvQXf7wudP5wtG33tZdj7DD +B283Vy6+s6Tb7L/34rlnF459/cgr/s61hTPDG34whHpDBPVuf94fPHNu4YXiejZ/7cLNfYcuvb18 +/chzb3zt3MvPnX1wK27VsQ/3Lo6dpj90+M0DoMDplx7sffR+K0/+4ddGn9ztOb72k8eDvHbh3IK+ +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 +q8Xnbu07Nf/hjn0nFw8tHD2f7dnx2q3Dc7d2frTn9qlLB7M95dGjxXzxwny2Z99cxd+GxZfOvr24 +/5UL8/OLzyxcvzkcZSjC3mGLh/vHF48funjmWHXgxv4bhX22f26xf3/x1eNXboyPPhxuy8Ke94sF +7c3r7y4u3KtvZ+XFD97fP3du7tL8if7X84WdV3cfOLTj/TtiiTuyr+9v3sl2v/n+4VVDE5dPLuz5 +2kt5cenKwf3zp3ftPH7g9dOv1sXSa/2di8++ebNgz93+u0eKvYffefvUIe1hv1x8/p3FnfMnwkc3 +F198PZ/f/9H8qePzV+tj739l9VT3ty5ftwcs3rt88+7i+fvv7l7cv3z9gvbw4Kn5+uU36uLAnrtv +FvOHbpzNX9xx5HK2fOOlk2GuOHclnL66dL04GPo3Xf+ZK2f8PvfR3UM77+24Eh68/sY5UKD/xpsv +1ydPvT86/fHVczcvGVR95vkz1/fvffeNywK5sLyw5/yu+QPXs+pi8fz777+ZXb38jdez40v73s8+ +eObK++HM7otX3ZHq2oUwd+jylVC/eeq9LHyw73Xdpvng8jdeXTh24HZ/4eg74Xi4M3f3uUc39Ifu +v/ceIHPzZxaO9+ffuFW/tnDlq2f3/v/sfQdgVFXWP7rfft+3u3939yvr9t0BBWkZXi+AQCD03kGQ +EEghEBJIgoKIinQFaQooRbGgoKIgVaSXEHrvCNJEeq/C/H/n3mSYzHszmUkhYb/3vIZ5951367nn +d84t50XqsUmRNapG1HmqakTnOilg/Fgjq6mqJzbw603itOrtOsVVqZ9W7+maSUZJLWfJq7KSq2mx +6SWlCjVTnpYjExs+J8T1qFVTTY0qlS7Wl/u001Ut+jktpYM7QdCqqGpky/J9qvgV+wn/72t2q1O+ +bJUekYkx9WvUSCvXrlRUwwb1qqrPtO7VuVJyZIeK8vOtGvREkqWT0Sw9k4RGHZ5vIsS3qddGa922 +U6pcpmnF56TOz5bpLD9jdDfqRHbt0EnuIlei4fmgp3MyQynq+BQzvkuHFuD0592RSq1W7aLKR1bO +7r42VdLRcj26R7ZqXKN0zaQGgjsq3u3l17axcQ+eIpssgoiOVam5pRptI2pJSrtyz7T1+yho9pBt +Fl37GbVW++whK8dUSi5TuVKNNqWF0lHxpd3NalTp2aNlpW5xvcsovRKjWvl+lLQblbyj9lzzmHp1 +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 +gi1Eb1qfuWFdRsaatWtXrFy5dNmyxd9+u2DBgjlz586ePXvmzJmffPLJB9OnT5nqhaCNGes9ga75 +8+/NmHEzvc+0d9/1Qlzm2nW2tD/u3nPvk0/ujB59rcNzkydO8JY/Y/UaPDXGLMff9yZ+jsCJ8fdm +nz7XOnS4qCiT3n7bm/6aFSsDlif7mjB2rDf9VcuW+z4SPt7Jf3hzxN/xb432pr98yVLEfL75OP5G +Tt96/ubP1vTHjhzpbZ/vFn+LmITpmY8lzHxt1vrNm3Yj+KU/+o03+ItIH62NHzuOX3j+3dVnrtyy +Lf+o4cO9vxd+8803X3311azPZ834dMaHH344ddq0d997750JE8aOGz/6rTEjR741YsTIYcMeLoh7 +/G8tEQX9PCeIM1jPce+guoPqxQvVzWKE6qoUHRXXpU8CADwqMY26KtbB8YeE4xnrNnr/5orj6zM2 +lfjLXvzAX/wOguNIZ33GRpBlJTvj66SUoV26dOkc02Xw4CEvD3zns88+8/iYkhmMGKnd//kuHo0Z +M2bdunUX2IUfuH377bcR72tq81dGT/8ST3nuVdiFH+fPn0fk4MGD/cqPV2K7DUGCXnpJkvhvRHbv +3t3X1OYBZUYZrPSIbN++vVXP6dq1Kx5Vyb6effZZvIK/nN5qaqe8OICXB8TVqlWrU6cOiHl54uPj +rab2yhXLfevLiXEh8oUXXuC//QzrsWPHWdtz5MiRLVq08Ic5diEeSSH39uzCD9xy4oeL44/7Pd/y +uB/wDvTD4Qy/55f8nl/0e77S73l6Tthe8VjWFMRj6SsvXlyZ/phjnTs4XrxwvFhNrpvRTePj0Rpx +ZInXSUmKBRsVWxz3u+5t631wYTffcGB+AiL5050z262Z1d03fL+sz+X9U/jTl7701J2+Bbe7vu3H +Yw6s6H/z+xGeqwu84dupnS9tG+QXvPQ/ZA4jspNjKZwe5/lpPG6/erst3lozK8kbvPTfZwz1XPnG +c3KM58QY+gt6hEuz/QJe5/QHVw/2XP7Kc+ytrHBitOc4+3E8O+boyKv7h3vp9614/f6lWYj0HBlJ +f4+OQri0Y+zo3s2t4fXYqN1LX7t/4eP7h0fcP/TGPYSDI/B3xvBuL3Wsev/uLd9wY98i0O9Y/MrP +Z6bd2T8M4fY+/B1+98CIC5vfWjy5vx/9tT0LQL91wct3T797Y/eQm7uH3thFf2/tGTbppeeQPl7x +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 +lK43/59R8/4WOfevNebeY6qI1mYJfvPwdN15vjveandZ8o+a33BihDVbzmbuOC80X+ylr95xke+O +t7QhK7zECBWbLIpouggl8cakDl7uu+Pt63mrK7db5H3K61v5uaX8tnL7RV/NW+W34+3dj1Z5Xzl/ +6fbFK3d4+UGMR7Y73pBI78HLUdSn6sxDwA8UA5HOjrcH9M6ONwe+/2/Bd3FyySrLNnPqTRs6WP7x +/MzZA7clttkiV9/wx2oZf2y+VkxbEj1nzee2WP7hlrdbbxGqbPp95czfG2t/p638XaPvIgZsj28+ +z3hv1Rg/LJ+3fnarzULlDf9lrv0vbcXvlKW/Uxb9btfJrbfv3pK/+N+aX5b7asUsXyx/dXOCmfFf +xurfa0t/Ly/8rTD3t81n0Z704d8NKPP+r5+e8qvec7r6YnmrdbK+7Pfqov+S5v6u0he/rTjjt3O2 +zQK9NrFkqfG/+ueYX1V/N8IXy6ss/ZM8//dtl1TrurxRxIe/rzzlKRDP3vjZP0f9599G/Mdfhvy7 +a+jvfLHc+ObP7lm/G7+azgl3mdHi9Xkv4kedt7W/DvuPP7/+73985Zd/e/UJXyxv/LVS/sMnKk1+ +8srNKyfOH7t47cLOH7b9dfB//unVX/7h5X/7nxd/oQ+t4Ivl/eYllnnvN0+9/ZuRiwbxRu48uc0f +B/zyD/3+7b9f+MXvU3/RY0qsL5bPWf5ljakVUFp5VMnz1899f+bg3wf89n/6/tt/pf/id70fr/Rq +6dmLP/fH8kXjK79dHqV98pVf/m9Wso//NuUx9yul3/5qrD2Wf/dF8odxxhsV/9L3//2pz2+U18t1 +n9z1y8X+/BAuv4XFzw6WO1juYHlxwvLi5JFVVaKbpQKoU/oUV09unn/dq3///iFSpqb2mjZtanp6 ++oABA3Il7t2biLdt23nsxM1u3RJefvnlUIi/P3rmwsUr9+7RxHOggvXqlcKJj/xw5vKV6yD++WcK +CQkJ1lfiIU+CXiHW/f/4lduO7pCvv+S4i/BceSbHrcezrnSOW49n/l9y3IKCR/xzbsGXLuDl4LeD +38ULv4uTK1ZVjm4S1zfdwe5H++JY2T/wZX2FY/Hy5as2bd518ODh48dPXr58FfE8HdtcONZnZGzY +uefIyVM/Ab6DEPu+snv3vjNnb4M4uC7BL66rgDgUXYVfger4qF+Fj45WLM7Gao8feD+AfxZR2icN +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 + + + wGd/4NLfelsT2Lzruz/3xk//8ed/+PbP/91zP/CNY6+9/fo3/pdffulH86kb/alX1fD/5sZP/OFn +/+6tn/nBb777b8uTw3/8V9e/5fOPfO6t9srfr+F/8ZUf/NPPfv/0W7+++vARr/zrE2/+wvxXXoAN +HcFvv+DWWz/3g7qda9769X99zWtq+Dfcvztvnzr2L343XPIrs0ueqi/Bh5ddeskbqvP25gde8ueP +6c7zN5/6r/Dr0+0AfnGehzLqSGi+pPX73f57/+uPyve39b9/vvz+rzsD8g9+uiObP/bufzhz5h// +ar4kpL9y5syvrRLWK86cuW7524+944f/+KP//ske/n/vluL7P1N+X1yWvym/L8bzT3cbjfd/aI1/ +ON8NPd/Q84NFz/0BoufaXnE+TcN3Tq9+zn8++qEP489ffPBDH/nzD37otvd/4L3ve9+7b731He98 +5y233PKWt7zlT/7kjTfffPNNN9306te85pWvfNXLXw7gZjtf+eSn8PcdX/0aPpQ/+PyKl7y0CV+A +C9iZt771R695zd9ffwM+v/xFL8JI8FV67q34+yUvfB3+jF780atf/f895znff9S/xeeXvOAFGPYO +48Hff3/DDd9/1KPucA6fX/T7v/eh93+gbn8BPBr/C573vA/e9v7pi/n7z3kOFnD1ifr3n1h8Xu20 +9Pv83/3d224lyn/dx76Av+/zyv/4zb//xx3af+6znvXed70LH65+5YfvdvVNT37thz720U/iz7r2 +n/PM3373n70DH/7zF771mBff9vXv/nDn8f/uM575zlve/va3/Olb3/jGN978hjfcdNNrX4N9f9Wr +/vAPX/GSl7z0hS980e/93h8877m/9+xnYyTPfuYzf+fpT5++OHfu55Jdfva7//3+2W1+Gxq+oeEH +i4aHdTT8IfhrHrRNyUelojIhxJmae5OtUTopp4NW5YmNyqUUnA0uGDzBA5tzCtro4J3HExuDi8qn +ZCwacJOePPJwz0qYKayEmftgdbJK2WS8d7MtMzt+93+5peYxGdBvrUJMUWl84Wfbd/+Xep6Ncc5F +g5dc6h+HuVMxqJxjzl7b2VZ/ieTHBpu6lzM/q6x8diHP5N1GX/K8GpoWaLqxLz9huC3Q8viqdRcu +dCfl8kfc/4rLrzl83dH6bOjZfa7j2j30vG8ojpmZPf7uGssUVYo2aesz+S1ZYucw8+hy1p4bV0H5 +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 + + + 9I//8v5HsPn7779++3Uhya3P5wE2D7B5gD1zgMU7TqxrMK/0iGrMMu5yOolIr9/Jr02tKAqzv/vy +3LzTEGHWN6vS3PQxbq1dTP18ircp3qZ4+zg3nKe//+137787JWPi8rh6oC6+YJCHOp19URZVVRKX +n2dftMXyc1MXz6Hqi+dQFUZdVMT6ozQvP6fKOGXqlKlTpj6wyri+GNIWjfmKBtlBDRXK81oHMQW0 +KjtUJe+DGo849c8pK6esnLLyM9E/Q9U/w8HRqKvWGRrtM1btU1Xtsvoy4/KjtMape055OuXplKcP +qHvGRscryqZqW58GrUWodV1cadZTXZzibYq3Kd5eWl0cZLoe5rYeZrPeoqJ2Am3UOGOjpjCbwmw+ +Pn9GnD3uq43Xk6P6mx8/WuhtW22AdcQk/6S9XvpgBzM6LUphAxedNiwMMTw87oAZjTWPlnm0zKNl +Hi0fTVN+wUQca2m45Z7Ij8SrO95e+ZF4PcDwLU4nOpux7oEZjfXDFK9TvE7x+jLi9Z53DJ/Zw4WX +qfjoBlf+rWAdhQW0grUNClBHnTQu9ft+AtRovJl1ZwrXKVxfSLj+2pLunM0dQtDeIQTtXeLN/BSo +KQSnEJxCcArBlxOC6g4hqO8Qgg1M+b0xn9vB7gKaInCKwCkCH0sE2s9JBI6C0RsJ2EYtDURSG8I0 +VO/a6Ph7gKb8m/Jvyr/Hkn+flQpob8s/c1skmXtEm/0JQFP+Tfk35d+Ufy8m//xt+edui6QGZGja ++g+HmdJvSr8p/R5L+n1W1u8MIv15QaS3ChTdHUpaymI7r7R1rNCz1MlWIWkcANbtanez+ndgTfDY +Qz2NoJbC3NlKJu0QtsLcuxHvgxqNOINK55E0j6SXOZJefz2KTxEqaljDyzaiyh4lVRWhrhGOHdTT +COocDrLRF+HYjngf1GjEGTg6RegUoS8jQk26Jy7/Wk+PIEIfJXKUpRLPR+0SaqIZydl4E+ppBFW9 +IkcJ2g95J9hozOk/mZJ2StoXkrR3CNprUfyvUs4WOXRTGNq7hGEHVVpaKdcNeSfYFIZTGE5h+FjC +8LN6DGqOdq4bykLVAA2gnkZQQ42vG/E+qCkJpySckvCxJOFnpRaGeyShu0csdUBDCdeNdx/UlINT +Dk45OOXgywXXN3rcUA6me8RSBzQ0ervx7oOacnDKwSkHH0sOflaW8QOGWaWTcfw3PXyYFcXe1Wx9 +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 +4wdra5WDauiv/wdtkQoa + + + diff --git a/docs/build-release/_img/index/logo_java.svg b/docs/build-release/_img/index/logo_java.svg new file mode 100644 index 00000000000..4d87bef869d --- /dev/null +++ b/docs/build-release/_img/index/logo_java.svg @@ -0,0 +1 @@ +logo_java \ No newline at end of file diff --git a/docs/build-release/_img/index/logo_net.svg b/docs/build-release/_img/index/logo_net.svg new file mode 100644 index 00000000000..8aad8f23b90 --- /dev/null +++ b/docs/build-release/_img/index/logo_net.svg @@ -0,0 +1 @@ +logo_NET \ No newline at end of file diff --git a/docs/build-release/_img/index/logo_nodejs.svg b/docs/build-release/_img/index/logo_nodejs.svg new file mode 100644 index 00000000000..2deab0dd1a4 --- /dev/null +++ b/docs/build-release/_img/index/logo_nodejs.svg @@ -0,0 +1 @@ +logo_nodejs \ No newline at end of file diff --git a/docs/build-release/_img/index/logo_uwp.svg b/docs/build-release/_img/index/logo_uwp.svg new file mode 100644 index 00000000000..d650fb644c0 --- /dev/null +++ b/docs/build-release/_img/index/logo_uwp.svg @@ -0,0 +1,10216 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzUvVuPXseVJfhuQP8h56EAuxsk434xUA8yrapRd9oyLLvGNYWGkCbTEttMUs2L3epfP7Eva0V8 +mUlZwMxDTxVKJe08X5w4cd2Xtdf+p//jd18/+fzl2z/fPslPw9VnP/unf3r+7vbmw9t3v7xS8dWX +r19/fP/hnYh+/vtfXMX+NMhTn385vvEn/+323ftXb9/88irFp9H++i/y+5//+vbPb9/dfHf19Yfb +V2/+evuLq5//Qv74h1cfXt+uPz//z//5m9yevv/bt7/ge1c7v775sP46n8VnKcR+FeMvQ736/Df6 +yM2bv928f//qf60HYssji/BXbz++efnqzbe/evs/Vxfm1ZNY4vrrWP8Sijzwf776/e37e089jXWW +UUKdbepPwtPSQiwjjRpjW7/vT1sJrc+aSk5RG7t4RFr+9dsXH+9u33z43bu3L27fv3/+9vXbd+9/ +efX8h5s3V7+5+Xb95ebq329fv37796tfvb558dfzN//y9s2H9ezXt9++vf3jl0++vr179ee3r1+e +j/z29vbl7ctPP/j5l/Wbf3n1+naN9t3Nh6uYdfA//zKmb3718dXrl7/9ePfn2zUROTWV52+0h398 +v7q2ein/rvL+zZd3S/T17YcPa4TWu3QOf/+vv3q+Zv7tnT64hPq/P//6w82Hj+/te37hz53fvx58 +GnMvKYUS1qCN1kSSUp+jzDJnaUUFLYxQR6+hpVmufv6r13+9+q8xBG3zP68nUiux5N7K7KmNfiUz +1EtLq6lSQs5jSUbqZf19jjryal5a+Xh7FZ7EFJ6kWNHWerLmkWocvY0cQ63y25hLHbXFsV7Qh/92 +9eBJDk/W/7IjpYY5QgirK6O08ZMkP3/+r3Mt3frE/+/oSc891dXpnlJLVb5rjUpIIaQR1wfHuX4s +C0g+Y4wnqST2JLYZYlpPrYXbcpJBmjOWmlLscTUhn7WaWMO0BiCHthb32oV/vfrXd7e3b1Z7vT5J +g62N0tcEjLU6Si1RZinlKJ2r6yVzzCUIIc81jm2MOrM09tW7mzff3q6d3p7U+SQenxVmibHPOdcY +jJJlyFvoMi1r6ttcO/nnv/v8t3/46rdfXKXRrtaqYUeyPLh2WQopr/fJR6xxXJ2bqa0mtSerD21N +dm9tprSa+vju+9e3VzM9KWt8S91trfFqs/Rca+pBV9qMIdfVC1kzQ1qvNfe6ZqnnsN5QH7Z2dQz5 +Wq6rc2uJ5ra+S94Q18yVkUMea9rkQ+WgGHF96Frxa2bWHvnrD79+9+pva5x6GlezPOnjYkXJZmgy +47GO2GTWWpO9EnLLeY2iLIqxzqexDpvSaxphaKPf317pIn3+z2sEf/PP4+rf/zlc/dd/DnsaZIf+ +x+9vv32lR/Y6Tf/bMUVtra41i33EtRGjfMu06U5rAc7Z89XP795jB7XyJOW5N8Fa3nmuBR5H0wnp +a0jWKoszrYGWHsuP//Xdm6uY+lq47fjc++tbxnC9uK3W5jrEhy7bvP5nrea+Vs1af9LY729fXq3Z +fDLWjizeWNQ31zLWk2WN34zJ3ryO2av1KevN1d6sx927t9/f3bz76zrSxupGX2fRmra6PiQ+dubH +dvHMo2e+NPuH27vvX69bSu+Stc2unuTZntbjX/HgOpz1odWt+XR1N6/hXwdaW6+vq+0+jtfnce/1 +63PWsbXOtrW5ZS14o/vSuf3bq9u///Lqt2/f3Ppt8Pm7D1/b7biOiGD/9D/9/uPr23d/fPNK7hL7 +kGnXwW/evrx9vX6xm/iX1zd6C+j/xv1Pf+IPN+++vf2w7tS3rz9+0It/8C3ryrm++eFWbsFkd1H/ +5ldrOb5Z73rzYfX6m1d/+eZvpjB88+2HX8oF75356vvbN394+2/6SU9qyTKg8uelcqwFN9fYxqH9 +6OtkTZXdi/ufeOPnrz/cvnuzZghv/f/+FV+8efmNKz63Ly9eU/U18hKMRO/+BxH+7ub1umdvZXjT +anLEIf8IUf977SMsrqvnr29v3siq/926m79692oN4i+ftHS19kN9uhSTHux/ot/h//ru1ct9hfd0 +NewfOnVPhz+89us69OZPlUz9n97koCrpp0h8qNcaWl/5ButqqSTPf3MoGOHpb76Wb1vD+PztnSzn +96rLyVJZ2sTrt9/6X/d/6N9WEx+//+xn//HZz/J89j8+vv1w+361KGd3e/btu5t15MY0nn3x8d3b +pQ6F44k/37y/ffaXtdxfvTHpyz+bbKlnr75//2q9/tnLm2+/vX3n/2/9/dmLV+/WXvvL69v/+ez7 +23cfvnv78f3Nm5fPvn5x8+7tm2ffLh1L2359+5cPz776Ym23am2LYLWn/74m7rsPfKU+iv+wP/35 +45J+eHb75uXN+++e3d7p//uw1LfbZ+sMf3krB9hq7P29l9qP394+e/l2qdNLKb5aKu2zf3/56vbd ++uL3V8/ef3/zYg1HK89efHz37vbNix/Wf7Rnf3739q+3b/58s1S/pSQ/w/PPXrz9/gdv893Lvywl +882rN+vnPT1b4//qxc3rN28/PPvuh++/u33z7J1eMOuHL5/d3byQbq1hXZP07PtlK6xffnz/7MPf +377/uAbt1dt3zz58t/QP/tfNi48fbp/dfVx7LT9T2csXa/61tRe3L1+9fn2zWlrbir9YHbq7ef/i +42vt0Rjyx//x8ebd+o3863c3r/9i73Dh+6u1gp99ruthNfW5vfHzYzY/t/H9nF//uXzAs8+/ePbc +u/DsC/35sy/0x6uVL46ff8HffWlPfWmv+PJ45ks+88WH7579Vl+4mvnKfvCV/eCr4wdfWZ++4u/u +Pr7+8Or71z88++r9a1kTf8QH/dF+/Mfjx3/kr/7d/viH796+W6vldlkGb9ZSe//sxl58g++5OX59 +Y6++YSM3Ohw3t89eYDhu7ee31vrt/vFq6pa/e2VPvbKnXh2veMVnbtdwvLEXvrXH36JPb48fvPVH ++LuXr/72SgQ2GB/tpx/tTR8v+vORv/nB/vxBB+MHiD/72R++sBO5/pdv/vB+3abHJZrtvvrizYu3 +Yi/+8uqb+5bXI6bYfzx78NSzBz+z2+QP//dn+pZ1tuEdV3949/H2D0u782vCLszVo9+tafigO+u3 +3+vfxje/e/1x/fFf3739+P2Xb/7y9rOf/dzM9GvZG/bHK/3rsrZVtnbE39++++v6zy9f3t5sc/Hp +zavvf/EPGv36r7cfXnx3v1mX/r9p+N9uX3xYR/H/WhreV3/+7+s/pBWxQddQrIX55tv133zmpzS4 +rpt3+P71W/1P/P+f8vtf3/5ldX43YNIv3vzt9vXb74+G7bmf0uLvXt+8uXnHQcMsrRvqdzdrVneT +8uDthz/9pDbX2fb9GhZt5XJS/uEDx59+0qtuPny3jI11K71n6/afu+fyNSb7SYvph7u1DV69v2N7 +p+R3azm9evH69usf1sXykwb4+c26udcp8P13r15c/erdx/ffXf3h7dvXbP2Rv7Pn59/0T/LLnzgs +olp+9cbG5+Fb/YH7L1xatf3mf+O38VePvWn98f9Pb1kqmozMY++4/BPf4+L/Dd+CSV5axzoQP7Hx +f/SZr/9+s07s61d//gcbVYb5L6/evFz9/vrjqw+3ey+9vfteHKhXX3938/2tblc8+fVusqpVdNxb +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 +uyMTVFJTKhqDGm2zIrgWGzC6mYyuTrfRFeZRl9bUtXFOPscqRrM2QqVbvuEooFGPw5cYgDqCbw7T +qTQ3GicSrhn2bPQavDETNUc/O9BYA644bDUh0DNdrMPjpFwyYbexen7b6JSyFMhL6eysvtPK6jeQ +vtuP7aB47HX/CrykUO1i/V0SnjlNgmxQH6I43xpNUm+2bzL4aFsEqW/BETtpEl0mqZ3DoMerOZy+ +OExLo2oifh5Rsvy2VrJgXjN4158/CPx7/BBFgSuwfmVyrvztYvY3NWZugu7PAPk/Xj2DD1TBILL1 +q9/f3/3x4ebu8ebury9e1HbZ6/m//PQnv38t/2ZN+ccv/vM3v765xVA//ckv2p/P/gN/+/J3F7+/ +f3ktf/785urx5v7u8uH79/zTJ2f/9o9Xt3f4xxf4wIebr98+Xr/597Ofo+OnDw+X232uvr25fflw +fSc93Nkvfnv3OP0j/+vx+9fX8o//9ulvv/r09vW3l1/Zfz/7xRcY+u6vm13/fnn7tva9ebmjD2+Z +dME3sNPP97SY+6//+/rq8Zf3b+9e4ht/ef+P96/pGzmZv9zdPL5ZsbiN3vtapTXmZ+9f2Hc3Lx+/ +XbGk2m9fi1mzlF3HOF/GPw57Cd+vWML3h36lvr2++eu3jytWoh1/vu6bD40mPr59+Prt7fXd1fX7 +96T86r070gbf24Lev5SH6zdvb9ccr3bc13Lc+9dy9/bVH64eL/9+vYaqzzvvjYhAwn//sr6+fHP9 +64fr//cWl3MNSdnqv6/F3d1/8XjzeLWLHc0W+Eb6/fnmdtXBbfReSWx2rcC+awXvFyOu//w+ojH7 +8Hefw16O6Iv7tw9X1795uHz97c3VClHwbo0oeHfoJO/mbhct2VyH299Cdu70bBn3r68fLh/vH1as +Zeq65/fy2f2r1/dvbh7XPZeP9BUizr//A37x+fU3Z58cjSoXTqrcSZU7TD3opModxpX6sahy3zxc +QrK//f39zZuTMtddzL6VuRXM6giVuRXW1JMud9LlTrrcSZfbWsZJlzvpcqLL/fL679e3X3x7+fL+ +u2fhnLPhGek6L9wz0HbWLeLQ9Z1V1+rHou8U1i9moGfA+FfoBm8eX35+/febS37PKilz3n1f6/r6 +9u0uTvVPqnD7lAJ+c/n2zZuby7tf7l7dYcvNK67byzXU8OUeyeGaNaxhSy/3yJfWPY+Dp17333zz +5vrxHa/hiN/6H2RtR/nKV8jSb15fX729vXz47P7uzePl3ZpzWf5kbwKRWb/AX/3j9f3d9ZMWOP1k +Xwu8pYTGcMyr+9v7h//47tvdiueGoPD97Rrjbu23r8WtCAJ58/bhm8ur6y+uLtctaKP7iab/U8vg +K/jD213v5V9A0A+NmkKHxP+8fz/+Z8VW/M8eVeG4ahWHrtDbdYexXqXfp4zxx/ubu8eLdXr7zz/e +Z3xRGd9FZTtHKfSsplsHT4GfaOH4UfsEDvuqHZvO8zQvx6FRgBVs4W+7VKP5YbDTvq7WmjXsMoBs +rCHsUT1bsQa/Zg3+sNewhvD+bY9097k5yZ/A4Q+eJ14+3Dx+++r6cc3BHBVvvL15/OPlzU57y4k5 +HqcS/BRL71MIyT4P9HfXD3+95k4epbSz/qE9z/P4qF9xivL5cFE+n93f3/7y4fr6f1aYsA8+xOdH +krRhn1MgU1yxlkM3e64KATrFMR2RRGXPVyR5P1y+vHm7hmxox/3qms8lKuvlze3lGo/rUWlmKw7m +aFJq1lyyJ4gSe5V67x9ef3t/e//XFdT7ANWQ50XGTsTrQInXc8oHXJPpcyJe/xqx+g== + + + GcTDrkocO3Ca9fUKf8vxvO8PnMu0zwd+xFGwq47h0B/GM8zu/3qNwHgsb31FMOsR5vavOKFTbv87 +c/sP9mUdC+M5coCCP60wOX/27eXd3fXtF9e311fr9LDlT/Z11T5dYY1++vqWP9nX+nbFJ80JxNrs +hD2nJTwHMWgVZTv8qJ+vV1yroxF91izmWLjN5zdvXt9eXl2/ur57/N3l66NkOeZM/3O2+KPd+OP7 +z03+uEbu0Y4HfQkPnbq9usRwKyIJjkO9W2FTOx4a94GBRvdJ4z5jLunv3nXVDpu+rTqLQ3/qa1Kz +jxLvY4Uh5Hhe/YrFfOhXf2iv7ZuVEXvf3Nzergtru93fga44z8f7NZz1fn9ruLz97vL7XSLZ5it7 +vHxY+cxKz70dy4rlvFyDtFN6HTBN/+bh/tWaVyLd9rUOs+I4vmbprzXm3tJvX0t5uBZ17v3ruXz5 +8ubx5u9rxOqp675WdXd/t2ZJV1dvX719RwzIxqJmnfe1rNubu+vLFXklV5e3V7+7X5MeMOu6r0Wt +kOLmZ6aT/14W8f5j2+y/V83i8u7m1arL9vOP9QXPAJjtxXiKRDkIBe3qOUWirFnMsZgvjjgSZdUx +HPrDeIaRKFfPKRJlDSjeEYainGoGHmcsypq3dSys5xSL0jmXUyzKv2p9K1SDI4lFeRaC0CrKdvix +KFfPKRZlzWKOhds8y1gU+yOIRVl1CQ+duj2rWJSr5xSLsmYxx0Ljjj0WZdVZHPpTf66xKFfPKRZl +zWKO5dV/SC/NMcbUrDrLJ1CNfZ7lcYPnrYrwOp3E8SFuHM9BfNSv2OcXPDf8ws8FT+WrPVgYDm0z +1liMjgXp57mBY39s1J+9Etanocyc6NpT6NpwomsrtuBE10507UTXjoKu/eoBLSdx7SSuHTJZu+Yl +PVG1E1V7GlU7CWsnYe1E1U5U7blQtblH6Ks9+LcPbUtWbME/65I9Kgfg6Rk9/Rml0zNasQWnZ3R6 +Rht3JpqzuCIasSz6T6sCEmd99yWRgTj88eYf17d/vL38/qsPnA24lwX9ywtwHSP9u7l7ef3Nzd3u +WpUbkVCvry8fP18FszHru6/zf7h+db8TruHYcGmeIaaLXYMicgSgLicwlHcu6QSG8pGW9eY14VDe +v7CjAkN5n9D0QZFQ9kP2zuwnzpzZiP82Z/i/T/Bn/P9P8A9nHyfHZX8ayFMQXw5NNHpehQr/BYru +fuJzVxUaP5og/nXL+TGG8R/ycRz643+y9+jgc5J3bvkHcB7tJ+Pj/tXr+zfQw//wdhed+ifp2T4J +wWe6uqOkAiuMfX/bZTGbHwY77U1LXbGGXT6ljTWEPYrOK9awK5RpYw3+sNewhvr+bZ+AEE+iVUfC +HVcL+gfPGy8fbh6/fXX9uIbVHy2P/Ejgi8+CSR6jI+KJZ3vK9Dtl+p38vx/N//uBIflO/t9DJbsn +/+/J/3vy/578v+2Fn/y/qxZ1AP7fZ1kM4/n7f0V6pAfYmU9WSpInn++BmoIO3LB18vmefL4nn++T +5dK1V+uLlVDaG733Jm2vkLVvvvnm7Zvrz+7voBncrXk5i1/sa3XfX9/e3n/3/iXe3vz120d0eHFF +WNEVK9z+wd6khhWk/O3DNxDe197Kze4HTvsOndPWh/CMmNLqFT33DLGThexkIdsXz34mZW9PFrKT +hexkIftgi1ohwh6/maxI9J/89eH6+u4TSInXn4AR3/z1/pO/39zfXj9+8nD98pP7h8u7nX7tk/1s +HxxrXGHOvPyfm1dvH3cVs9u4i9pzX7dwWLGc61v8baX9bNZ3z2aaz29EZb8gNdlrbMrnRdG4qGTt +OK/9imvy5vX1FfjhwxPMK8uf7E8SXb/AX/3jNcSJJy1w+sn+5LpdauxzsB6tOr6T+Whvy9B3sNfc +j0MjqifDy8nwcjK8nAwvJ8PLyfByMrz8K9kuzSzF8FKtMGJ/ORleDlkDPRlenmB42R/9eD5xPgdj +QPqiKk9HbUF6kgZ48Prsc8uofXZoEwdhcPhYBOG4wSbWAAScwCYOYw2HDjaxZg2HDjbx3CpfrA+s +O3y++GyRJm5vHv94ebPTh3VijgdM0E7M8TCElENnjs8BiWk9nTp4vvhEDfjEG/d9504ITM8LgekJ +53pCXzqhL+3rmn7626+++Pby5f13pyI1PxaQoueVlb8CW+uUlX8wIsHRp7OvKBT5ckWlUum0r6u1 +Zg27KOfGGv5x6M/j4KnX/TffvLl+5Gt4uH65kiQf25v/g6zxx6gD/JDTfZ7KwKGdzEd0gxzPoZw0 +tOPS0E4wsj9AQ9uPMTyYn71/Yd/dvFwVPlj77WsxL2xcsZg1AuMe5cV1i1gjue9RcLd+zbX69npd +EGHreLJjHIAmMJzsGEek0xy9HWN8BnaMNWs42TEOVtM9tjd/smOc7BiHdjInO8bJjnFEdozHy1UB +PCcrxnPwM1994NCX/VRQeLi8ery8/f39zZog8/K79y6oDb+fc1lhRzwaYN01WFF3b1/9AYf491W5 +0/PO+1qUOV+BMPT15ZvrXz9c/7+313dXazS1rf77Wtvd/RePN49Xu+yeG+YO9vvzze2qc9vofchP +64TwfAIaakx+j0BD5nxFQZPH+zXs7H5/q3iGcEnPBS1pDRP75uH+1ZqXIt329+xPYEknsKR9giWt +kfU+KFbS/ow/T4EN+liGnz+/ffj67S32+jiNgquk0ENXvE+gJ+9cy0bi2j5NtU9L8joZSt9/Uz79 +7VcTAfpqV97vyVx6cEFf5hkFfa1ZyoGHfK1ZwqEHfK26Uj+WgK/H94llx2aJ54KekS1+RTzOEZri +zckW/8/a4vcpnx65LreORJy0uZM2d9LmjkCbW8FLTtrcSZs7aXMnbe65a3PPMLLqmelzK3AijlCf +W7Gqkzp3UudO6txJnTupcyd1bqnO/df9/cu/PlyuuTMnXe4wdLn4jHS5F/YZaHPrFnHo+tyqa/Vj +0eeeW2WJFXrCCZBh/0rqygT6IykDd/S4Eid8zBOuxBHiSuxxcc+HeH0YgIz9GKNvodSVUsT/8fXt +5dXfPjkrTfevL69uHr//j1V2wzeP39+usVLXfvu6dysrLh/NO1q5nmN5Rr/mxTvKV7T2IJ4j1/mR +WzmP5pyOhqq9EdDXz54XbTvuenmrazR9cXW5ShDY6L2vi7ZiVbXK5mf3d1KlfI3us/2Lfa3uu29X +IRHc1nLnL97Fw+YL3P7Bvta3IqLszduHby6vrtdeys3uJwX2n1rG6vq0R8OX1lfcfeZAJ9aveHuX +/3Pz6u0qt1Lrua+DHVZAKV3f4m8rzd2zvvtakhDpPWDyfCzx6fMb4aYX6zxKP/+YHyJE4KIywecq +zWkV1ScIPsuf7E2uW/Ge9Wt/9Y/X93fXT1rg9JOTaHcS7X6Eot2TSix/LLDrgyOqJ6HoKISik0z0 +wT/ki0oPjlooemLd+AMn0ac45QO34B8EDz0Zu3+gevS3XX3mh8FO+7peK5j333b59TfWEA57DbtA +ojbW4A97DWuI79/2SHufW3zrejvu4fPFy4ebx29fXa8qLnFU/PH25vGPlzc77TIn5njABO3EHA9D +SDl05rhmDYfOHNfTqYPni0/UgE+88fDv3I+WNx6jBflUbPBQhZ6PQ+SP5zw+6lcc5Y14XiW4nyEi +0XvhUo4xAu1Z1nw74cyK8H0CJtrTmzoz9T+9P7WW95+g/HHN4WnHYyCNB8+6Xl1iuBXgLUfBtH6D +X795R0TTUWt2t/cPv3vXYR02mXheAt9zhfj4+Blx+3xDR4+R8WKFpHfwIBkvngNKxsezMu1lOX/4 +F+XD7vP1HzHIxBPkmmd51Y7AWfLsAuzoSuAp/fmjQVM/C0fJEZzNwZMEu6bg81HK0/ODWpFNeGyv +6OgF6ufEWHnXvvzm+uHXNw97tH8c2gm7sxU2/8fLr2+v/3Ot/XGj975OWz7iw5vt9klNfv327upP +R0lGztOZOTtds+O5Zr85zmtmT8TsmG7ZL/caHCIqDvPs//xweffmmzWVFA7wzj9Nqjl4Ie3JuSAn +w8c+blw5pv1K0ifTR+90JOTt09vbk4bzQ+/rKcTy44RYfqQveGIRpJ99+ltrvvrV3ctWDEnaIpu+ ++v393R8xikDUvKjtv7z+683d/F9++pPfvy7jhPKPX3z/6uv7W3zLf93cvbz/7s2//9ScffrTn5iz +L7/jf396/dOfvOUyP+ff/oD/Oh+yyy4FZ6zP3vozc25DGsLgsjchmKxhQedDGgM6JBdDNlDVz3P9 +s82Dwb+dfXnJQRlPhH89+/J7/u1/40//jbbvzqw5+93Z//m/5uwlPunLP/30Jy/cuTP8n8S5cohn +L+y5lRY/2jDk5M9e4UH12i9KO/7vojuQs7XJYC2jTzu69cb9Bvv5FV7M4yZN+NlXQ70bOKyvvvj2 +8vX1n/Vi/Oyrf0P/37999fX1w1df0WX6l7ubK5y53gOcTy4n89vP/7/r7+uPeAO+wneFc5f5P84n +M5i4Yx863RzOoKwyRz+kUFbJ36dd/9BZ8Jr5P8S++H96X8x5mjeEJPviev9QF6wbYaOLYxpzf726 +j+/u1Z3kn94V99RdWdziHbuy3a09idIS6xty+ocde/j+2T7ELtgn7sJfdk04H9SsHTSe/eJP15e3 +83/GMH/57eef3b+9E4ou3czZL355f1+6+T+Cx14/3P3qjurwb97evKy89mdfqQQw7/WP1/cPj7O1 +29lQOuPr19eX0P6urv/w9+uHh5uXra87j2c+6X/JX0mR5ZtLlBm7bUyYv7i9KQhgWPZvMNjGYrc/ +70/gHG8eH8T/MvvIutf57N/+/ezL/5qzq8pkenzny8tXl9jrPt8xM74zDn6wYYwJ7GM0Iy5WyIO3 +IQc3gmYN5DDG+Rhx1/JovLGBLXilzpnkbIpWrqNJJo4jOrocrJVxZn9Pg1xZZ+MwDmBz0eTxyYxq +BJOU/wneJ3zQmbXnURqGYXD4Lj44G86jPBXrMa/BQc37+Fyoio2VtNqYcnRktxu9QHyWfV5gBdIQ +XYjOjCDoy+lAtMvL5E/s4Mazz3qf/gLfPsrvbCB7d/JZY50RFD8FD+7+Atdss9uLdG5mEwr79OUb +rM0OXTB4rN/gE7bednrgm2IdGP/BwYK5LHvhk+psNiXvwIbGTi/9aBeSj9mN8tGFkDssYzAeXcrG +YTtG11s8vgc7GeSjxwEXJw+ykxvbze9ph1Jm6x7Kos/ycBeT6VxVUJEv2vpq/WgTXLbRCzdfrF3P +q3UazvNsIvCvxf4tDqJ3Wi9qL+NdGEP0dtmLF2hxOdBL+OcYnR1NwOEs7hg+WS4nhAzjfbRn739o +n72D16SPJIdUYVnF4FykXZWEV7WQ4ECgsFtPMdWtzQaLNIOQkfTeXtxuX/cy2hhHw9dhSos1eeCc +Q6jHsjVa6hGlxZd1e5mtI7a7Jn3/QvchOAnvCVWcUXrQOYH0ni74dr8gPN2N2Bqptw== + + + qeH9XVbv+/vWdvxyWjhoOS2dhySEMWG/cS3OnDsPji3OJdDXkXqG/N2mcaS2DRpdfhFBL3CKByTX +fRAbhMNKv/rPL3bJgvzD/3rbBMKEaz+CDUUIhSalQkYhv+HPYNcUcfgSQFS4w2bA/7fSYuM4ZD+6 +xF+jxW9TYwiBYSYkkitPwqDxOKlJIDSrBEIPGdwMOYzekbuOIlhAEIgD6HGEYuSElqObzXbAMx0H +LIryEJYJxSlG7/GBA2QN9AHzg9ALmQ300kkf7AGE13EYsEzb65Mh5yTwzJRGamZnV2W2Ra/gx8Fi +cyBDUa8tXwSaMVoXbR6ljwmZmpyhUmfLF0XnLC5oclSJyZaTzxC4OdUQIaPU6caQOTC+FYI7uwUO +jC1FkyfL9xACfDQjWLfDvkgfl1zGK4D0HsjR2WcY3ZCtHXgeqdNHpgNXCXaAeOnxXHzsDgWZGJJf +HCP+PhhXPgn3xGMPoodeIX1wORxkrQipkr/C6hxorXeOljBfVwdRLpKBOedwTkk2Cn+KvGdYieF0 +8dzbZHBbTbDJBdlwjDngwg6Dd9H3+3SObtGLlyDg1mIxUJRSlpFwlUYIkQaaUyoXJVH2xN7iV3Es +i4uYf0w41JRiuZcBf8a7gjjmBt1L/AJqUjSej0e6YW0ZW5CM0C7Zb2wsPgCX0LlyxSOuO1YWYhx8 +7h3doo9Mh1sgY+ENYjm2OxRuE7Z6RNuAAYf6SaPH8vEY8KTP1ry6q3fwuA3h4amMTITA0Z+ngfpV +xJc5FzsLeSW9QKIyjUm4K6G3cyP0FPBy0IDR4ehS5wDQZcAoA9aecFa+f5To5cDfcfh4nfJWF5cC +XSy0aJxzpFXXd+7WskvnkvY6bd12+Rq8GPwS94+C3+LRyLKwTDwsAwLUf33cHih9uMqeFyB33jE3 +2ZpRFPxoy1PfIgfL0+oRlhFiE/YJywLR9bbXC12gS+IG41DxPocOpUMX0CVwHmxXirFPMscI9h9x +MQaQw4FTLYgvumBPscQYArlhh4b3uiwPa9FpwVX4NfjeAdoYCIr3HebEVeHGBgie3Grff3DcHqhz +hnQiBec6T5eb7MHZcVHk8HtP4v1va/XjXi1QNkvzwPsVRzw+MhkK4ri0eIi8s9icXAzw6DUGUCcP +0uohdC96UVyP/pzKPC53wFdXiwu0Z0oBY7alD5Rq8CcLJgSRpL7/rT6BpuuQcLADZ4PeTZtZiIH7 +zsFLr3iOD7BuAGUAQXH9Xp7qOV4YDo0f5nvz+UxhdAw4aRmw+03v3ad3KRkbikR+6hmBIUGMyhYE +EFcd93Wx0ipyBbKkYYSmZFzasR/bvaCzYmdABEALwH1iOcrFlCu79eZctyvjk70B/hwvc7RYxQix +DkrHOc5wiB7HAb7gcnWRkA77AAKWSdZomwRjpxEfstRIkoYufHZ4bAHaih3RBeQetM1hKHAx3GM3 +QMMkX8NFcpCxaViFKAKSSPplQhWd0A36DMg1KBuu70CRHMSNu+NcGJN1MhRoGebKBq1GrGkQOCG9 +DRaiKfZx6HcawTK59YmqgU631ctCEYOIgG+CWIJnISNFLBWXNPkg5Ae6Bej0gNlAlLz0ADuG7AEC +ZCBnoeU84HLkZLGPoMBlrgiSxFHBAl0Zmds/YDcGMCfsC1ogg4EnGYpETlgcCILFZYAGiE2PFAjQ +x1CjIb/A/7hOH5mOBrLE7QCvTlxaZygcJVaARw3+E2hNxY8CiC1un+Nb9uInDLiHuB8ZYkfIsn5D +SgxOgCXGYitedgt47gYsfTRGZP3iErK01DtQJWyQG+TxYO/BDKE1eDwNfhU+AjzDCZ/DfaRl2IId +Qe6GHAj5nF+FqxtoVMTYuJO9PnXPA8RQSscOE9ruUFSkR5oSybrJWfFQHUgS+E/Ez8gAXYKGCf6G +Q4byTXESsjIYDPkSrqqvWz7iiuFi2ORJIHieuCrQOMHMIGlBaEFLJiulwIVHZ2OS7SSHxKEkPrGh +18dgR/DFuG+Zqqqvq9vuB+UUWjOdHB4c1YxlPoi9GDd7kUPwNAPNqBFPYJC3ys8OuO6QhkYapQLJ +ANipoQTCKxbLZGApuL4erwXMGtfXYds8VgetItD+LDtJ/4HB2iFLQKuDnAXZMmAasXRnoRSYGZcH +g4AzBHSBroH/xShg1rkI/Y5WQKrikF3wyPIZhSjISJlKeczUnxxlOEo1oMBgcjRIQyimRSuD4gzU +lx0lQblC2AxKh5GEG6dBGzf+K+g7wTJAlkGCDBUM0DL8s6MBGiSYCg66QIzA04X6BK3Hng3noIeJ +n0JbADXhTpfM6wkZ3UChjDrVZqcR+2OwG5D0wNCFtmFZHs/IUpSBDH6Wz3E5AoV4nLqlKoUtxLrx +2MaBAvSyhxI2UinQF3wgrnlnnJFPAeKkpzrn6O/As8PNAIXCBNRuecHwcsAKSKKgIYBl43JhGHB2 +ELhYnv52L7Aw7F60eNaBsmV5+RSNIz0K6AUSyF5Ux/ExWEuy9f6MUGJw8TxfJy34uCjQWwM1O9Iw +3h/cPtwm0GhDdrnd5aowtgTuAn2HYnfoDoSzGDNOIeGiQxwXvusKKaQBIwl1xHFB1sI2B3TEHmZe +HjBDiC9JWQg4lIFoDnoMqgpyjJ3GjkLthcQNIkCGAekI54yNg+QjSsE5yS22B/NTj+50GaAdc0CI +9onWFplr0SueU3kyoixGMdzic/C9jrohVoZvBDEDi8EXezp35K6CmoBc4NT5VEAUA0kEmkAoMQjo +yFWh1LjZ4FhYMV5Y5mMGR8aF8qT6rhBqL/yWz5uCAEgCXuuAlXlHBfFshYixVjC36aniDeRWvOiB +DA66n+NWUGYZwJVJxdVlstUJW4qvH2lItBB4xBZOFjJiM3B3KIEMoBADdW9Q9SASOJ4SNh10NpDO +gjiCX4DpBp/xlMElypaOII/YK2p1OHbs80gJ2JFBQNx3qdjm8AdoWvwa+rGX75Z3GdwpgYFFkPkd +BMDiCVCfjmTmOOPOOOC8UEc8PhDkO/FxB8hqBkLDWAx+ix6B5lCQYIZt4YDl9S869eVci9Ez1UE+ +lWx2Sc2LbuGcUjG1Xs83v6MXTQUQNqBYG+jIYt/COeJR4G1HkFzTIwF0jfJuxwxig+fdJSWZJgbI +jThxvrtOLx6+kyeIWx7JdIX+4URx46nhWHF/g8NnavQ0rwjlB1O0VOICVOZBtnJxFxe9Lnq9+rod +JTuIkrjH2Crs27pe/VNZTLmy2/aDW63KDD/EP4cV0mgBCgW2i0vKsMNM3uLEGkMT8qtOr97GgEDj +ERjRKQYMsa4TLTtYpgFxxo4aW/x4oIcgJIGqOI+w1wkEBXJWxl5BTBTvNplKoOsb8gxkAVAluhwi +aSjkNt+5zh7cHPfNYRojZsHedbbn1D8gd48gQOCNy04Q46HE0ewDqoV/KUqwh0BFBp+LMIp2Wpuh +NkG0KrwT0iJIoKEsWC23tOOIlRAMzoMXgAJRjTMMGB3Ih/D8HBfJTo7sfqQ5Ai8Y1BePSUxG210g +1lg6Mjkb1hHqTFu9PIWfkWYmyFViSxSnp6fCBl0OU3gyIkYPUPZmbAJ/BKFj4KMNjOPDqiDsQIFj +PCutXKFEV2ydOYQYvE30ATHKtL93bwY+EQozpscGgF6NifJhpJQQ6EOCKtNRz6ALQhG0kCI8VkxO +1FP0xNxpEripTdRZOr1wxo4KHqQvkDAvah7kHksfDQR36vQvSLJEGMSPeAq5BHJCCEF7oOssCY3q +9PPnII20++Bij2D/3AHsN5/LQDZnKBOCYojrEmsNNOTzpmVcb8j+UN/w4UJUaOXDM8BeQjbhEWHD +IJMnGp+KpQVT4YFw5xibwg3AxcfLAhuGmIOPLSql2IOhUQnxId+KVOsZ2IP/7WmLNHKIGGc5G3l6 +T6EchaJ48F3cnMH3BlrQF+yPYzAsjhLCkUvjssuSUL0rVmWDUsYf5IvYvp+OtxEXDcQm4DqKOQzE +G+LCSO2MKh8fSCCdgHYi8lwJpOYhQuvPibfLUkqkDga1DKI3hWIeImQkGj34OnGq0PhGUg0qaSBy +nvYkOlchQOA+gcbhuAINJ6CFiXpjLpQLBMcHemsdHQ98HRgRdw6HhjXQM5ugh0YanS09UzxTPk1I +JYabO9pOlwEMEONBasMXYDJOteyVzmm4Gal50jdIJRp3MAwgzlQCRd6DFge6Cq7oQT1JPKB3RgaK +BYqASXg5DVSMuKC5p7xdHDd1II8dHOiZACOguZ6+Q8jIGbsHHouNxPWBIgK+s5DjPO3uVEZxkhD0 +OpLeFc8yg71EcGu8Pe86nYZzBgSRNDpIUuRleDlUCxyJoyfB4mZLHG+C0j1QxM3U3rDiTDMv54F+ +SJ8udxwvOHF/QWZGTD3gt1FU3q2rR9Mhjslgz6kpDMseFFIgg0FpZthnzF06vLjBq2WNp4bcQ+Cl +Xzd5UC7q+F1bsgWjEuFP/Bpj36y76MQYROy32EogRmUJzVnMt67XD7cjPzXGzVs+D5wCuCsussRA +0vc/8J3icY7cEM9oC09lh0rUWAIlwYRI+DIJTTijqQrasKVpAxLkIGwKhABXUMwBWKgbz2k4xC1I +YGz0/ULlhHaG/zAmxlWWiNcIUhJwN8FJioUU78eKGQx6uo1n6DKYDFqP4W0ShzxdptDaUxQr8cAu +tF06Rn7QrSUszI+QBRi4KI+8zIVl04aBOx69cDG5/9AdoY3ganMg46FZMegYJMCRaYAeyq3HkdHA +2OsCwuv4oEld41Dn2uo10M5BcSrRGhlkruCwJLxcCA1RVI8oES15gJJDTZR2n5HZOoZuVFsUGGwW +VFnKIlA2ZC4qqxQ9POTNLG5L2uhoYQNBAsPlcWW6mAKdQolMFeeXaX+DYGWxcjADy0AIbIPwixQ7 +XcjA8XZH+gsgJlPR6w2ETR2Kdw+PPsk3D/ROQvMkW6V5Agqf4alAvsPnBK4cVJGi9sgAn2KnXvay +tK1mHrSnJFJi9CBn0PNK54SRjbb0aGD9lgITo3oZl0BbGI5iZChrcVxmqomQhMg8zjrvYrsLNzoz +rosEk84knzq9cKh0lPGGM3gjykejA08w8NWjy3DOyD1sEM2YVDmhuEKewAnhb1ivSMqOkhGNtmPi +tpagWcrMifYoCF64iRDCxK2csLchyTbiAPHIyGXRd+h0AaNlNAhfoKcIWqba6kRlcKCnBzwDl8Jy +HFquwc9x7qMY1Wm5xuthVDGt9TTfgxPiLkPcLPZ0Xu5MeRSHg2VypgGXjJZYI4+SESKMa4DEDJmZ +9lUrr8LSsshI5CGKM4hBAxZHCTZIDz6vs6OVPFoGoAffEcquhNYZDEQPB81ZliHYA33s+C3ZEU6d +RIvdMZLn3XXgiSTyIFNkiZk96AgDlYGmlUWwcqN4zcmgZfdwu3D2IIMUSSlqQWjyjO5gFAPJE+8f +ZALDa8xrQiMerphhRAOFYRCiRQ9c/cBwCXwJqXOqE212SvSSUZDhJfHYBro7QSXA1A== + + + 8Q94nuDPmQIe5YLAR8qdo50FVx0ieBF1tnoUeoLvY1wYJgpD7gyD94oddbShQEWgIMCIAr7vLGok +L3lixuEYRSkWmQrfThMcJ8+FIINyRmq00dCiQTkF9Ik3l0azUa5d5k1FF4j8gXYvrJxbN9Lkhk/j +3aXdiFlKuFWDKGu03EH39rTOkZIsOoEcZhoKc6L13ogiyCsO2Rm8wNJqFsU0hJ1yjFjBWZQrTvsI +/0o1W5SDxA/BkqG/JK4a4q2n35LRHMVgAYY50P0E4psqa4iM2GF8I57qSMUeijJN/2jHrpLsg2/S +4oznHmil2lb9F5SoZ0HAAwDBow+Xl3roGOAXlFGiihxlHAYhe6HmICZ4IzgGHChNAwPNlKC24PO5 +uII9wxxwj0c6gRwDSvCOJB8AdDiTyngK7yOvr6GrgScN3Q065UjhnB7WRY94DgqK24QNgWzuyoq2 +OwWaIQyDqD1ZX+IwfHf0BmF/BzrIKEeMFFwSw6rIfDz9TLg+ll9ArcePDK6neZE+zCvhKtQJMBW5 +Lc6NtATPmc4myKy4iRLyaOhKgPY6lJwlOsWgKNIU70OPp2zJWqvt6U+NgQ90yw6BarLkRpHFeMbA +4u7SxGUk0zRA87fUM8Ark7BOiGwjLoJErA30Ul70evUMip7CDDbMM5Yg7bJOLnvRiZ0pbXpKk6Pt +z7iq13DO9yAj40qM3T68vaDlOClwVQt1NTCIAEws8YEM8hadFXmUchoOPjDcPrhiU3Y0NW33oM4W +cZ1pVTAMt/WdTuhBhwK9QTQ2n0mQn3jX8M7ppg642hK2g1FoSZKnCCWLRJeWLjHpLDrhwBKnZS4d +48Jk0dAPM22UtGRI0No5lT5wSOzewE6BQgCIH1MQLKPsIMRBnaQLggYqUIoQJOsbb8Lw3ozLHlx1 +OKfI59EDVy3ZzjBeXIAjRB1LZyKVZpATT2EaVCiwg6U+iY3IYA5il2XYVSLrDNVZj9uc+PFe6EUQ +NkHTorideWxni/sOQYgfRlKcGby37DHQPwIqzVhbXFAv27t4Nt2Lt30IK3v1HsRyxnW9Fs95tcb4 +1IDYmKk0QWeLMYgw0PHMLfosHHMRAgKjSV1mQKjr+OUiFUHG/ztRbcauWw6dKHZJdMcowY3bXrko +sUtUtSE1UMdcWE9ioJkfIlPkHeq52zgRJKlAy+HIO5I6PvkIpk0x1lL/hYy7cMktOnQ8cos+/eOn +gQfsjapulliVVb167rhFp4U3LkKmgbaGyxYo1i5lBuyfo25JgxvuwdAVPXAMgSKFFy3VdkQP3AgD +NskY4kx1aOmJi1QtmfkWaJJKY9cRt7h6PT/colPP4DLQ4QLCxaiPMe0wAy06dY9iMd+6Xj/YBffU +OFhxwSW8FDw4+qqoqruOrYpZcqOYDhlfl2mY71u0Fr16e7eYcFWn8ZyODyfR5ZDog3ZykODpyi6+ +106fyEiJyBB65pIUcR7PIYr2ZiDzJ0hw4IZG/FA9ETpRcwd3Ek+X6V1i3PQBLA1sf4DEwXCvjrdv +SOd0+tCClmjrKj4FhmbQ4M1A6oFCK7MhMh19g1Ab5rUwqs6IdMyJSLfwd1wW3G8XGeCTaSCBCkOP +SjpDjxqjxF2A9CYpvYyvBwPOQnW3e3gJcLeMcPHMgakTbXaiDsN4IA8Ky4zqeDbQBcO8T3yjZGNR +j/fUFiONyYH8dTinowfEnAZACb3E1zDphWF6DKGTuWiFxknjA1IkkadjaaCnX0g6BKSzAbwOarv4 +q8TVtPTjJAua5eigoG9ghz8oMYlFYtsYEWtyb5x4znwKT++Up+WIXwMmECN1syQ699bVI+8HreH3 +Qy2k9vBZ72ktevWuevdpraIATw2ytl0CQHVxpEsv0i+SBF9k0ckwsQzXXQ6bjkPuGgOv6O/Jg7gn +6SGXUFZc4ABNiG/RUC7MUIrphBaDMljSyEhPiWblATHzC4tPzGiwEhAJdSQx2JCZ/rQH4AwNnRoG +TDaSLS8dqLgLjOCkASAEyR/reWITsyRoIMBtCGKIWvTCvaO1xYhdD+RJIoVBCDy60eVt8OAYJ4dn +Tq95RVM491wPBFVcGm/1jtMhYiW60Q6SRUzxlz54bqMrryWTaEBgom2KtipKpgbLgC6LJ7Lswbx7 +/Cs9STQ/lKe73SnSBIbXg69lmJcVYjRIZCNGzWIvKUn+HAqSi+WimDHIuCdqKIk2l+AFIyoZiXPk +RJkpAyMoD12wmWyXCWZQjaElRbHUGAY5JNozEgX7hQDFRyt2OWZ95J6kxnOi05KKPROiGF26HCac +M2iY8UOZV2QRGZlIN3Gf8eWGH7gMjLwSboFN81bi70DmqEzSksiURobopbPFQ4g4asccKHIw3Idl +D4Y20IZAy2FiWEWPNCwe3do3/9QUgpGvCSs3tgRudn1hI9NMjKdTn76c2A+m2e7UFW8W863r9YN9 +YU+NOaxxSAziJUnGXWTqMf0bkTcyJFCcklax6BQh6meK1NDsQeIoKtJyDE2cdupBlJcgPtnosrg9 +0MOK6hI9iEAWi2mWqFIRtF0xvOZ8zsgYx/gDoR6WkfoGIgjhNRhKnqElWT5dwm3E3BHPMz3pdP57 +5s35TtgQJ/LCrkFpB5/pi1oOAwJE3JKBcfVyKhRNGBBtBc4kS452opvQ+SCvl5YCPCuJpY4isoyj +ZIwl6DgUHEhJxKtAh5iEwI5YTmDsAUW0EJcxstsdPLkv2IvDZ6NXyezb6mPobqLNhpHujIE443dA +NcOHG4YZitvB5yz2HNpEsEtZzHe07zGMIIllKhfIlEgRbBSyl2ktgmBCQY6+f/EgGnEoCvYKLUwU +qRKfPPNwmKKwEDNwRCABnmkOhEByfXklg7mAgtHvGoVrdMJXDPMKwVVBg4dY0jiYGzhgESBkQW6d +Z+iDFflFeFgmTTZi52ZGFOM1eHvBrfkIQehFmosgRgwdzjStUmTdegIMLDO05CcSWRGv3/eS1lo7 +nxpQaMtDZpISLbw0MchNMUJtwP4IPDWUh7zViYZ33kRwfdy4HGVL8XAY/QF9YhDnE0PFcADgBZAf +cXpZYuosjg+XWcS2c+ZS0ZBBw3RxFeL0IrNI+Qyh3JU8IyqmTNkHHQDLxFtmyhUfC13kPUkFN4U5 +/AyTcOJx6AozGYIT1gge7+jHGnoDMYmf7JsOg2zK5ySyPAe5zJIEZEluGcQTMdCnw3Xx6ju6E6Gk +lxdgcIEkw9vTYiDiHu5MpDogVnTGvTC3JUpKM1OWZZsh4WfKMXjWEAgXPTxdtlbcIVTfc51qsxPY +Dp4N40Yi7ej2TD5mYNot4/IMrUpBfDiWFxNCUFkU3xjDEnCmJEGOD2iIkGjwU5kIm8PIIJGTButF +mMGJF6RM8iDusHAjxhjY1LEZLU6qJ83wxKHfU0k2cieXw4xMQabrUFKKo3wK9AwwCEdv0FiuH+25 +tKsaSc2ErMPMTceQnGKZLdcYYlcJX+/ETi2eAjU6JrgxphIf5JY9Fi9q7YN+atybcOYXic5BGlBH +XmNP9/9Ip5fly/MSasCkAIi8vMSRZlYjIGqE3sJfaeGzDEaUeOdFN+nlRYWlt67Ga2/PuZiSvXDt +qJJQAcSFNhT0oiA08SoyOa30ymBmjMqzTKQvvjUQb9oeGVZTZ+z3yhRgsclDiTl+QQrtaBoCscp0 +RTKNZ2Boh/Ojq3GcL7ZIcBCeTPe657MZw0YnqO3QUrJ/Z6fNkcaRSZU2VNvUsheDQQhJx1AvcKQK +O7pY4gtZYyJai0/8+WxXGVVArAInMQZRVHpG4VOb6x/R8lqslRifHE0m9zLTIeTIkz3hCQtaDSMG +IFHgm5hU8Kq7aigMidIQBec87Dh+dqKAGOihZ8rfxbop1675yeCsy/1OpHSMY6YrItTljgxKzHQA +8x3koXwig5gY8MkI+v7pyWBUVxnKaCok64o51673qZ7T/7UKyWq/8FjOHTQ+VrR4yIS+cEpq6XIB +9wTNiZL7ynC9xFgHanp+FK2eOByMSYmSXX0w+Fi7sK7c+8GuPj9GxKsAFZTBTJEsKgzi4ABJp0Ao +gEu5pOIN0BBAyqglMNasYISSvDHFmXKoU67LfGdyYsOE7YI1wdz8zCnoeu52Qy8IPQyxSoFhJaXX +9pwSRwuJh7iTlH5KmtT2AuiaZ5oz41uIBFWgHCxjCyEXCh4NBEVHtU18fVR8Kq9xTEVhBlBkvjvV +4PFc4CQsJLJQcUAWnQSVO5H0QSg2tO93Z5Rs5sR0kYQzzhXifMX+ryZ9T6VSyx3GO6WwR6QxIze3 +f/YUu71wc1xNWyCnX8QgC7ZE/ByzgKRyh5laQwekH/uHuphy9XKfjAazOBLs/UiHpKWASywsQYPx +YEaZEjhTneKOdSyPl57VLHFVBLsKvt9tMeVHA1ahF0coLOO4SXfFI5NptRno2gj6tMVbhSs4lByP +elElExjXMpcjecFcBij4nh4V9HT9bpZho9BtxCcemTg+nGMjqSpDJIBaMZReTDsgMBTt65SVcKOI +qMcoxZEUl0FaIAhQ1YnnQp8C8Wo97WKUPUdCHzm8w0yFlSEnkeuL50wDZRZd5kdJNgJ60bLNgGJq +MrnTS3JlQC0S4XEGyhxifYH0nWlnxuyQ2DAdyPHAF++oY1t+tBuoS1NfZoDLmYRtMGKWGF1CGgjW +i08L6JNIjkp+BMgc44QsAXiC37GTNGvhtpW0PPpZer1IhAnpN0gyfw6dM75YdxVW38On2qEd04Mi +c6+puDhxjkVxYhiiVpEQ0lQjkVqRvjg3+uJo2+oFYhz5bCzUA8YhcA2+IKcK52BRAJIe6PoMoQ7i +LSJqgFg0mFYvF2LZCzfLUqGgEyfTvMvtl5BGxlBRc4oSI00PDrT1SMwMQj5nIg5Cn3f0FpeIn8AN +tpbWwMQrasmMJE8PRM52ejA+lPkxUQA7MtSoXi+BVBnFiEE0luITdYSrCpL6mWOnC94UM9mgblC9 +siUgu9MrQyMZiQ42MGyOA0GTw82v7l0K4x4skKmfxGQLMhfWQ7+co99YMhkSR6S3jL2SriuBA+PR +0OQvEe20SEFhIKwDo8zQhRE3VJKTk2xsnjGBXSgZeSxRajgwxyjzjGkhIaGFDuxp5yKShayL6AsC +VOYSIdckYoqAFyAijCGno0h4OVmWYST8UCL1JfJ8dMWtzS6Eg2MW68D4ogKdhmNncoojCKfMRQBe +ep/x6cT8FiEHKg+jOEYiWwxyE3F+TP5gwpgtrl5cBMIWCbxApwfRFAMxVSQV0tWptnsFQj1gHYxH +EUstNtUy8pmQEpkX1dJTJcArXiRudsFtot2bgRAkEnagAM7c1bGkWpQtZGCDk1hl2p/RiSQCuwzu +kKxUmqCHY2QQRcJmi+RDtkZrf2LWKQ800sGRCVcqRHLRpdzCgenIGU+TprDeQIEZvlmCB+g7lS4Q +FhmGxIWE8UzwRohFRZcMZV9+MdfoAvGbKa99JjHn270YcsCgUFxKPxTSh+kicyyIVA== + + + OeJGyC4yoSeW7OqQeOkjY8wIoWEUx8Ancrs8ShDBmYBu0FhP37+ATS26XAlBjHTSCgxLtxPvPLFO +GUycJP2CCPRQtgOjhRxBu5zkqRKpJxGDdpBlgYDhFYjxtkRSEnEEl8IYCeSQ7BSawUSucdxdL1Ss +pHRDKIuCNMksUCKQYCuJrtXvEnAYYOcMcKk2yGUvd07fCY1yDKuRt8wEH4bveSOvFF2YRCZwOPLi +CNmS6H4mIKipCHo5MQtNwGkqGZPSD0zBoC5QnyAtn/huw5hcy8tKrksaTozKgs0h6QiWnmW8Jd5V +yTvhfQ2u2Kn4wcTWpwDulGLSAk0rKsPKizWLHgKJLMKn864yIpeBYlyokCh6EzxN0pF+dt5VCAGR +l4LoIMV0JiTYEzmKoFwlP2IcmQnA0XCPSA4l1d+Q+ICynUlCDWs48Qp6hmcRWhxXBQSAiBsudLrg +VUSiD+AhiTeyZeZs9GI+T2QuJ93gICj8ZnpBmAvPoLzClxjzCCJKKAEG2zOHgkZJ5qcUeFn8hnkB +zNSnwVK30DDoFpLTwLcl4E9QHAxdUwTM5FEMliFHTIIPPRlhhRjx0eBqGPvPaPDIm82n1RVhmHQH +4jQyTWPwzvcWMYof1lLFdwKGGaQLMWwco8ddpwvzKsFdGQ9F32zJcFn0IrUmZil0WWLNi0LrobqI +T452Ayt+0FW9GEBO31Zis439TpEphoFEkz4GBqjgCeKeQmLBKzM9MYYZTRSpmfmJZx/78pBn9BAe +YGbYAOGfOgPRo8qIcrz/UMAHWHsCXSQAFgTJMzuACaGMl3FFf2BUeqK8JkBsMhVD9YJg5g5BQLIl +oYcgE4F030ptHvrAM92FDNOUF8eQN+ovWMMYOl1GQmhbgQFm7Q+J/V326h4GQV/JDSD0j+JxXter +J88vZ1zXi3BtQWIpmQBvaydCJoJCUMW1qd8Jez54ifIaC7Ik2QS9MAO9SnzonsoX7is1L6Jsdd7I +ise2+qH/INdypFJFUwS9kUYAMjt687KXZWJRYOiXqcBqnT6RiHYDQ7Kkog+jxulRpzALYawnUgWm +SEAyJ5VltkFfpAo4RZB2pkiA/oiMtxiIYIrgQEzB8wJmjC6s1DQERu8zGCeIIZ6wwIziZ+IBbh/o +OANGbUFHKnkgSUCJs0ilSXrFxFztBC5N7osujMcygkKT6jXGsVLLkEzZgakgRFtI3opeWuSgPBAP +UCJ4c8mAWfZCS2SqCCEsY02+IMngDhK/hOlblHOShBsS1g6/lnwbz1xVEisz9sQ37LRjpjYeLlc8 +9MW3KIFuchlE2+j0Ypg/xV8iQKcCXRoY+E+1initkOg6XaQakEAtEibA1fwfInDSeDyAlJQ0ZSeO +fw8CBQIjq2eiKEmE5wJVbWHIIkOvyI+ZDgNNyMndww0V2HtJAmAGA66L6/TAa8ZD9qIrhrL2ZafI +2GEmEAbGCWEdQWJLCO7Bml8lw8UzcZApylmebxC0EkZLMF/fCJIqJZSR8UasmqHZRl5wkhm0PRbA +TtoImXLMCim8rJ4BTAwgYuxih1DwyuNFWrlQLvVJCXMkpOCLpZ069HpFIvcx05kQ7kQ9EcsC+DVz +q+ma43kaZggMDFWwoxiQ8J6JGMdUWk5e8z82T33R66LXq0e3V5Cp1TadH+Sx56Z4yx1hwIWTsCYq +xCPNwpL2LUmHmcc4sHZKKvDyxNGl5ExchExFPBBr0/GSMFmoKxaAvEG+ZqAVYbZiz9ZyJc8lCCQT +YaKEmi4HohmRoRJMX/YlSnGgAYC6BKNlotwrR9McqUkeS0SXYXwJFkf02Xo7xTBJXK9xKAyRhjnH +zOAgmMmBCTmBGaUMRvPyovi+aQ11jJKL3S78/xKihCdRYnCWvRKNkyOjMxhTZkcOxHx5SGyWlFpk +OK7IM0yEkMVC27l9DHMlKk0uVbnAMhKRNxjbUDMbE6GyCARiJa+f5hZD+yY90SHXzEWmM7C8mJw7 +sW5BDYcoAfeJp5UYW8jAPioK7MEoR+oghLnJOx4DscqY8kbFRPLBu4+BITMYhSYbKz6vbi9mnhLM +gHglOBN5w7iEiThFIQjgLQ1kEpaOD6cEeLbiRq8WPZ4abBAhdA+MPMdMPgoWaE/qIMgaz8oR7TOn +HaRh2cufM7OTMMOJ6XPSaznjul4/mMw8uUKbpOjTqgVuzLgREYahkvLZ0QwlluNFJ3wgRROHLkQk +kWtkGY5HdAsC+kY7rO21PeHFmq9avSFPjVbg1LRlQ2pzBOWugNx44cSgTuDEdUdYTSbSnkwclooG +O4jll+mKTioa8m6MNJ07AWW3BPhl3oth8F7od2FiVKaXlplsYvXp9bKSSUTYSqn1x89hHGJkSKKA +0xpSKwkkYmo+ezAHiNCHPpgCbB4Z5kr08bFSJprtMi0qBMg2NKGw7BY1sWCY2B8kxovWIIKegaiF +ArlrJeqfQKGeU1GeTDSXSDpT7HThXIyXpijL+K3ouwPh/mCVaKHlxfn6OdhvFolgyrnUQTSkMIzS +Zai/rIuBmhT58X9lBwlKQkRvQwSFsawrEbSZu5UpZaGLTVIvg2g9saDDW3AZ0OkgIXv9LsvT6vUi +ePpAHEFaRM/kc5h35ojCU5GELesHMKfMDjJVpKrIFItBqDsvoQlM0CY8Rsmw4P5ANMkM9adRSXqN +ghLOfHHJnGN0dyScOTOHXSFA3DDGfLLma+od13aXcjUMVVcJ0hZ/4nIgxkoTmsmwRmW29XOIdjlI +KMJwtuJxrab+T866Pie2KKN6mcLO1MPIGnNEq6GzaZTYR4acRqonDOukVZE6FRUayB1sJlAco81w +TJS28ZCoAzK8LBNhJUmay3aPkj8r6WdQC0tW0XYn2m1p8PBEgUsC6B4YoAcFIrMqXjgTPG6ijDL0 +Aid8JlEMRO0gIjURqBxz3TJDWJlKXDipJ8ZeHCTHnQ4N2tiJOeQlZpoNuMMgw0wPJn5Klh6bLKpA +njK5SeILBXBpu08BIqW9OzJucRSAruVI0N+Jl0WMcfqMspj8pQ4WoztMLOH0RHEzRCPAXQviCmOi +PmFQbJXXpAIB02O9IJwSaJF5bDSKGsFjFrMfFp0Izs0sEs/tGWn5JLaWeI4h0NFO4FiCNhbfQqTx +eiSAuS8wlItO4pKkIRW7kbRoJ18frkkm0C0aaWFnAgPzuW2p0UUy5TG4ANxCDiIB4kEmSI4sVCH5 +jNmxQFkuuW7i2WQKGUFAE5OZyx4nyvHQzlhw3RUbPBO1RkvxXsLr+UDFQyPhgpl9+MG8gSkLRAgo +LVP0rASuMwJ/0UXgGTmPBDdT4I/LTqQcnhSSSL7EdiK2ugSnELaJQfKLHnT6gu0boWIMDJc7ut0p +EeKH2naUop4Cvs5YBk8E+iy16Wk9oKORMHeMZaA7KEqmd2I4PM0lUqc4ERAuF6yxc8FKYI0vlh0W +Fk3Te5Ao9FJ3mlm0jK3B2bLwJ3lvIpBNrMHjfAujMFIpq5EL86VTSHC0TavhwMgJYWNMxY1CZqFT +swQfiKQksXjyMiJk8oEIPImjO5kVm0tElNTZwIsastTCjJJTRJMrNANHb4+YisS+jYWyIBKtRZIE +Th8Lc0kZtlZuugQnJ7phIwOUeYtMFLhLW0ASNnssNIAy02andE6rhfiwQWEKioIgNKcoIe6G+dKk +6ok4R4QO9AXmjOUfaNik902AfmNJYcYDqfjtJcGQVyAQYAw3gIEILMFDaCtne0TJS6aolRrONIAz +4zONst+RxxuWPXoUctEp0G3DMCxyBCMp3pHVeVhkTaI9iE9NRDRCOIhgRyHJExeLFAD7VWp3b/bZ +tv1cCOYscWFxhgxmFCYwEthipL8v0Ysr/F1QaFlERJCxCQNDNyaYhOQnnTPigkdASK+87HBV4IlZ +S4XHONIFvOz1QmrhZdI0usuJqUfrPmeXUPpQklmYyTsyr53wQ1gSi9NlCUjgY20vIbGQBOX5QdJj +IcBb+t9YC614okKUHDXrBXmHuX4sioFL4YuVcNGDPFUSshiQUI2my14sEhclHp7F2kKBfqZPPBBw +UUzxmRVZSD8ZphCLLZxGeMN4EUqZ7MLwRAawsMpeLdVkieYjEdWs7eAlsZAyAqgjcz0kfpOJJqOg +fhKoQDI/xVZmnVR09AVkmuY4w0x7CVqglp0kzYkVAmUqQjTiDdITYinrSWlvPiKaa1nZ74zuUhAy +CF28GTFJTXNyxiTpYnQML94CRWeWghJcS+crJbY0MTMozDFrsQiHLElCnyoIHoUOXF5iPoDaSFyp +oJmxfBezIzOTeN8nZ60W8Z4afmilvJIUVxeANeZ0UHAoGoat2LT8QJBleskz4xAWnS46nXpG4cV0 +6zrlc6kfOo6i68RuJ6ljwmIx0JGpPwvlj7QIJ+JfCadNLOwgYRa+AGkQeo/wxCDpg7B0S7QflgFM +GoBCFpgY25MFQomdGDnA9Dk6SLPoXEzyHsQ8lWUYCYGiAyMI06TERkM8n73xYdmjqAtMaqETkpji +rjNMIDAks6MCIYzkU8AHB7oER6bsni3OgBIwBGb+npephJotOlHjIcgfk15MCZylZkJALcIVomsJ +NKGjhFqRYyox88q9F6P3EEp8FkVJzEZjNHeFCHWWwYvUqJc9JEOMWIZGPCaGpWYWnegQwNETyMtJ +7igldmjXdLKynFanB24L0+oYLsB0ZeEky06dezecj05CC5iMLNr0mk69t7CYblUnIlgQG4CR90QN +6l7zyFuSJWydvx26nXrTfRQIDzcwQZuxh8Wb2iUfjq4MpkMSw5jehN7nLTpRhyHwDPE/obOXgNjt +6dZ1IhRviZJOpN/aiYFnBFWmut/vFBlBR25uWIQyFH1oFBfVQMwLzp+FTweWQ0ppqb/hJ8woYsaU +I0JGVw+kiA/pU2rGsAbgshONeYlYtIw5HIpmkQSxdhCEs04PSPws7BEYHslVydvf7tSl5LiZjGb2 +BF9d1cUyiVgqjYBMstT8sotUvRIkVxayhaTuBPxE/GDMUBedC0JOlqpPXoKlBAiX9VkzIx/jskcJ +42FkFuttZNobOsMEbi7NZkxFHqWHFyGEPjxH5ZNxUHTB0qHCwDFaxAYGjEQWl6hRa8M5bVH0rWWJ +M2R0J6UzWmeIbnK2uHg41gSJgzWwCDVuOz1YKoqedob4xQIm9v439bHAOSTQIFiiaNFVRe9SrV8k ++f+SQ5dLqQd7LnDKjrB/2KplpwvBvRzpTKOdTsLLMh0wVrwdJPY+UxGnG5WCUaSEKmX1cGEo61mG +sIDGQ7RMEs4eFx1KXA5zPGkqYJLDcoxAJ3wsYOZOsp3Fl81oYrGTsxY4QWWpfBAgQHKDnNQdwYcX +xD8GESVWO8DNYiiR6J0UCRieSWHhTGCeExOXWbalmPYgEUuVT+pKsdMD6kyC8sCUNDGoXlW06I1O +I8E4CFcvVU8Ez3VgPBczyemOkrtqJVGb6a8EfHG0F/DD/n/23vbZsuyu71PeUqV/IQ== + + + dd6oSry4h72e11JeiRGISZqHSAFUQdSk1XORxurpUXpG4sGpxGUnAVwEgSE4EEMFAqQQFahAwIUS +ngIYcHBM4ZAKdoVKjKk4rooNxgkJMUx+n+/a5/a9Z63Td9/pnusWzOhqpvvc39lr77XX+q3f4/cL +K7tbdwSkpQJ5v4BxLh3gqOFT9WBQBgbZRzHpQAAPHT244qDjjiopqAwACESgjsokCnZPNUELqa1G +n0nJE80Wgc0mXQw/Jl3iHqDNwPGOgW9ad1hsVKJishVxf/ddMyzbQejOTGhyflAlogYyIBKrcxuF +LmXniUjPh9siNNtKbx72zDh8EXGKrbmoUuTDdr8qJGfS9hOdMIJQBcuESmWKoPEjZYU1DDEidgBB +LnuV7GDdZIAmIIANhOqpbW7Vr8uF0lnAM0m7dAOWfQsDk1l9bRdEK+CIYlKwOzkU0Bqp472RZwrT +YyNk4UdStJH9WkZ+dBkYyyFBwbK3w0234kBdS5Sa1iBUapCmiTYshJdVJpzIbkD8t9TDRqMo3is0 +0M1THtuDLk67B6VlgrUGnsTGY25pKPE0VNLQNwqQ6nawR8AgvLqhxzLAHCXZ3hUCUy5SAGDB2aeO +WtE1O+sa5g+RQD0O9bB4SOJrIOlCHCWSbVjiQd2KbAZc8VrlZIGKx1IAPB+lAE4Z4TiALDp+JX0c +thcb2p7XU53m0EPIl0cJhgHs3bZIjaoknQixUkCYSQBMkE1m22TTGcS4M4YWCw4uB1pbIXbaHZXC +3dO6BqJBdQI194QVvV+EHipoOrtx5et9wg5M4JASpUEC1OJFnCUEOsJUOw27bOsmf0PFg4ApAuZB +N5EnJguVqiOZaQ8SVpDNLBRk8KHNCYxRJyUAdhwHXkTLtEnCGZbVmFPHwzaxtgGWFSCbc7MDOxVo +3TCJXSF6OV4ECuaooF4Fooz7oESOkDplgR7wVw4PwUWKbpjHqXiEEL31Qq1E3I/cAY587OlK8rj2 +CgBOSrtE1RjRS+ilKfvHAQeMF9x2pmUiQR0uOeQGvWsHxByFQAO2I5OzlE3KZaq8Ch4B7HfURCuq +Wg24cnoesKRI9LUeh+Bs7BVraR3HNh5WUAFSvjQdpCrItytSKSvs4gUyjOZ7rmg8asF6hVubVBEB +jumJnQWimYiE0p4zSVxl8k00nInsqR/8mAhAzInvGoRPBRyQB31fkQrzQ9CCdFoospIFYLZQB0Tf +bu4uAr0j1DjZZa82ZFfZ07ZAM1CBkGxMBCjnhDZANLT1gEZ4JIRFCA44BNEFvJ6k2GCEt5PWT5YK +DPJZNZkCrrl2/7ypKDQZR6jBL2C7xC+ybYIAuMSDHJSHtfdWlT2jL2Xpxx59Y3Y6JcWWd5kAtR1C +i3gPWx3PPFsg1EvROUq74/zotHVGIViiK77MvLIEFTFrI0hRtB6FousdhFpKcxNAh7T/CLyx9+AE +QJ/oyLHjv+9g8BqCthstfFUnp7rnGhH0on2jdkl6iShzVNtZE/ckZWFQcw8SWdegGQTAtLYOdCQU +2cIUVxGXtp2kW7E7JcYCvJuKBEycjCAQEv2JMFQCySui0Kgb3wjmLeKDWfGoyfNgmEPWqcMz4yVQ +oWk2ODOLN0xbkbmjcTz1hhc0Ozz1np0gTcWxOQqxVszphiMH0DCFx4HnVv8ZTKw7LTkP7LnKlXV4 +8sSwRsAo07cWlfQkVTHYXLcp4EmyLRNg7LMditVBYnURwFePfUNfzjDw3E0kzP0l1lpdUjHrOtCR +UBXVZIMOMlHnolspeiBiOuogI8tLuQAefNpdv4m27uGbFtHFxnIiyqGu7awUrzALcY7tdteKVLKh +ppwL6TuQVRuddAt93ocywEqDUqLkIZEx86L4a4ta2dxMguRuwt+FOsatheJXhYDRJFPDeRUIJHEn +tALEIq5RZboijXlkSRb6qXggaJaI0hIPIWVp9izgyaRmi6aSEluKGuhXCXaSiDDQce7BhmC6lctQ +iyGoN7pfYUOwpc85UwWrGIGvozyjQemiS1wV6HXSrpKuAWy/Ta4BP1ERkrQnP6bbIBKEdKKpP+Iv +RJKHUEgAqr+n7hqQHzCyXFs7GVBXkfQ5WLhC38xO1WAR3FouA3sOOWBS3QRqHd37MA5Ukn/HArO3 +M8qQCIbjzvSa7zdrb52cxgIjRxLPk2k6IKxCETc7nUB2RbF0gTCtYiXAtRKUbdGv41RWD5glYhwJ +e4FHquiJAk3m3tHJLYo7CGrUCNyfyNNkML6dQaKvAlL4vQuRJPR4mQZkSwB0nrr/oFsBl4YjG470 +3fX7Z+vOvWmpp00TlqjwX8xFbQrFLQAyAD/n66GWPKuCy9HF4soodGciRFBBSULYWGqHjRmG2yQ0 +G+4tVKpnE5XKvHCMARizErEPgBRB8qYHNct/hhSHQ4zAYM9bAyCoUjMOg2cfk+qF5x+8+trd+/dt +qh8DTnUFpcpdQqmiUwsG50QEE6B3+gnF5gdnsLn1wpAiFxkJva1YVMBSlSsf8c2jT26IQkVHNUy6 +lL6umDQ4hwIqp7tGhTkVkr3DJx1yiBKpqMInQhKAEK7/rL+G9q36w2XUhmAqNByukuJcDCkS4P2f +ejSW60UsFxfpsEbHNwzOhlsO95PjCunSH9OesqdtGDceZMgpkwc+XNlPhc5WqSuPemUC36z4Rofp +vJgHetXbo1kSw9ilN8Kv7ZWt/9QOiiUevnJ4wgLu253HXnPrs9yYavswYXVP8+/hNl3sT2Enab54 +m67223w0ycOX7jzuiluf4abG7rZD4qYH8aaL3vQ8kxZ40byLCzX3QtdJ73gBrYRmf4/+c6QI3vHC +RlVggo9XBghsUgczwZlCuDziTCXMbn2mFC49dN+79sEWxTARm6qGo0nVJw/ejAIFXuk7P2RH8Ytn +n3hV5/DhRb/n6mzNFMeV9zdTHSYwVx6PvfL2p71pAvfU0z5WsXCvU9Vy+SXN9Mfjrrv9GW+atTr1 +jG+OdeomYz1di9Utz7TFyvqGO/dCiwAoQnNOOmz7sGA7Pbt26btffPG5h+d3Xzuf26OXjc8AR4A5 +oU4YGq3DnwZClCTjqhNmKiWEtYF+EqtsUWKNjwBPIao6gKPK9qydregKaOojU9RvNEUptye0CbRa +VaGsKjOvfu76L+5Mf7HsV5txTzeabfgANZJrj//V4TfLlV/5x/zGnbrY6V8sJ2769C/2Bwvz6ryc ++vxwtydNnryuwfd/2XtfeP9H7n7sfFx1J7f95Z2ZvuSlrzm//yXnD7/q/N5rfQn2TfrRi+X+FDdy +2nsVfZbDv/XBM7wVHz58xZb3Cdhit3v3xy4gi0+5afF4a6RdWY38XVnt9t1ZB6u89Af994EG0xjv +41/vRTruZNSprtPhX99XQaUrtjD1l/cf1MPuw6ys3Re+ncqApdAbIRxBBYHAYQTwcO/VOdWrMk3I +97P08PuzSwKHy9DfQTJNXwpo19y/dDzO/KOveiaXZtl3AK2+h8P+WV6W7zm/f/7a+Yu7/sHjF+dt +r0uQD1gvWoosUtr5xnVJdjh4mg1azUHWq5ZSTV348Puzg8D98Tv3t6+lP7OLY5cfvzw60jpdSy5S +FUxyHi4oAP7ItEFjX6M+IVXC8QRJBaZGU8acfi1HLvSwzm4WtBKhKW9fRtkd/qvOfzhM1/+6QzDG +/uxzl/UdkXfXWUv5xcUf8iNpIMUrFMHkfUC/6eMcf6orOfIs3Z3wYIceBj/x8eQafczg+yjB9+su +6zcO/+2fn/Q0PufaD975/INP2Kp6cbTX7770rne9z3Tl3Qcfvn9ufzRz/EX7BQvqXe9yx7b0kfRz +91+599GvfunVi8jvukqPxJ5/8NJrL929/69//O6LZn2/tgpvvqfnXnn44Pxhv6PlSb4cHp0A3RmZ +yr7v7osvffzVR9JvaCj/JF92N/3y1bfmb/SYN5N+wlu78Zxe/fpyo3u9Tvrd/Oewcv0JoS9/6cXX +PnKd0Becv/ThjxzW9b/Sf33npU+cy8h+17u+xJzOlw9Hx9Xvzifg0ne/wPzy++cPv+juy+cnrn8E +mPmWNnlLm7ylTd7SJk9Fm9yGnVyxw+ynPol97N5k+/ilV3m2F09mex/ZxYBVlwwWbsc6I5pGySus +pVHNW8iAzVFdrNRQy+7dt+NkLwngy5+EctOImojBLkWUQHDrfnx0FJ0DAxlwis6ocl6OYmmS8kWY +eoAijSKLOGGPPx2+NwxXd+Od1RVJIgLWKbYT+zzbx2eFcOTlSNowwCiiOxs/Hp9pHPFsdndn9bHl +N+76wNqyOjdO/+NF4qUeByK7M3z8Jjoa3/HHKwnT8UVOfHz2eCK35TMyNEgvAz/xWXatX3r13t2H +JzTH5bj8M6Q4ykQZwPEO7gaAKDF0NUKrZoOGBNgjIT8uS6YJVATHBwYc+0xS8KvZLzshbgCbzZ6N +roh1xVJkS9sU2G4danO8mmh9jvf00a3d6ZAfRWKgO9NOd9ZZEj1T66FgrvPLqd0JMqSFZoelze8t +q2rbVBqNg6X1PadXWNV1AFs3/dZi61IVYOWl9iAp7Z5qwXYRltxFuFxg54A4hMgw/XpEhOwhgXlX +37Z4zwWQWWvpyDeTJ9zwKh+nFz4zUwbhEHVTjqSJBhhwJif+2EDivpi6r+UZ1huf9/DhKw93X/zx +12zkE1m95dnUHuPxmXoiD7LsANlQhr/ZC8hIRQdHqbIgLFj4TchSlolEP9+Hj/sASs+DMtyhso6G +BC14dsLzsaBuFsrAVXFPN3T/RRoyjcNIg4jucfj0+NmG8ea3t97dyX1atlggjwgzj22R2XwI1QK4 +eT4PoUfoz0RffTQXXhgBFMI0AUeMIutcHH06fG8YbjoVK6YTEKGLYMk9rO9CGTtS5sMAo8iy2p3H +p8r41WHEs/k6ohXy8w9H+/j7vO4EQOAW00nsTSDExSx2fBeIRQWM7T5Ayh1lDluhHe+h428OQ+bJ +7a/gkJwNnSUKLohdVkPB0To+uv4gsayAlsPGOfriMNrZ7MbO1AA//byfX6dLYzbtjenLAlyJIq8i +jganFjSQCIIvQOUUOhTaKIVWtQOnerr+bM3AYLgUAVVmwEM6L+0gklR5lQXysOQOyHYsJTTLpXi6 +zJ3d6W68nUCjHxom0HstNtDj5xpEOpwYxPUlOrE+QgQ4iAEiSZu6o/U8Qwo03tBEZvZoU7GjSZrc +0mSur31pT+i5rRsZQHcgSsGLyKAt25NX1QfRYEVz9st6Kqjd7akKtWJLcBO5bitWHUuAOtqhPL1e +l0s0t4PkYSe5YwLoCKFNCSaxC8vzeNSZ2PgMc6mkYnzTv91JPiFFOz1UaUX51RPPuWXa/hSan7tm +/3uW2xhkXLrPLKtSngvrBoyavtVlocSafFUiGsK2iVTcqyTF5MAoos8My1+fSns8kl1ZSUjc67Lm +OwjrEhDg43HAjruwDqAdWcaPVvDJa754Nh3w7PQNns2faBxqnIvZLD71yNaCyogLrQ== + + + 8zaCgAh0cAbQZ4F8NA3DcTJICSVHBZeZtuleAwcKCrSBsLvEqUgLatOnpZDSYx2cx1J0Knvam505 +7TRmjrfj96IQ5dDAydfKPP6on1zXfvNsww1MZGaPMhU7mpTJLY1zO370lA7GBXMOPBjAaBXewcIL +AInVtDL0nW2R60eZCtFP/A5o9AvTcZEZpaoyO/NY8x1saDLWVG6z2KZRH3PjG5/9T9kp6CnThPis +/8s/21Wbn3/3E688fOlU/fRl3/nS6QiPJtgrtjxKVgl0KiE5qJiBUELJAARHJBKmB7DvdTpWQCRg +ZofSkfVUr9ROy6+8qLUGZtvf9LScxEndocHvOGGwHMK0x372LHzYpceoYv98Pmxf2yCs1EsmI13S +S1bIsgrevh8Sx7fBvkIKZqd0CLVyrfLIfM7jtXoQOHAzdO23mHuFtHP10YnaY8Azt7sKJd/x1aVj +olLRXTHZYS6ijx6xdlkzuPk8ntW9V2eQmdVmA3duJS6G/UxIGUaAfjEap2xJLNC8ITXznsc78wLw +FLwYBMlt/pjXT/9T8KOfQTX0KBacds+0Anrp/knl88UnrKzN2iAOkdI1JBuHwGbqTQTDL9bPx0ud +/MXhUk+SdLykeIWsV0S1DOSx1K1ZOzGDpQN4hJyRDG9DE/sZNPeo23DkeNBunS6pYCngg6ZVl0tv +o57PzWzS3vjcnJz/QwRxjDznNZg+Rr/zOtrwm/UXw7VOfX523S+eTrxtp215UfMLZ+2giPWsYRJ+ +79zIwy/8OgfjtU7/Jjz5Op1c1Z26d3fq3peTd3j6N9f1/Lyhe19O3Ppy4s7dqds7+Yvlzbhtf+K2 +/YnbDqfu7uQv/JPf9jN4RJLZ2FXsc9CeMQye5YPy+RdUKLp7/kMvfd3da8sqnujYhLMN0D/z2Q+d +TeBtLiIlA0lJlbZnZS+kNWEdQv4jMWDfYDcFqc6JotqMRph9FAXodNMmgAkbBDgpMkNHZh7OKKA5 +xbi8AMjnBBbsRW1AkzzkaTEmKgm8LMwGCBqcoGsHjCdoy3B2PTvhipRc4EpiLGuifONZnCcZ5JNQ +2/cYiw7QqAYPqUbToxRgyZoTbRRPWyu4ysAqi1pbTwLfKMCLXtiCUPY4ob0Det0fhKmEww+OBj1r +BL5pAbRKWTM9BwhoaYEcqXUcWXgpXIda8/0xFkpHXGuKnnlBOTKR0NDkpKdwAKGLuqCUlX3K7iZ1 +mlaG0isDpo5GM+3sRYlie6/gT2bfn6FA5WJGx9LRTCGVd8A/RqDI9AiPLiIKjCXptTcxYQiMnpeF +EOxjtnJAAvXgBIL3i1bpD0BkvUB8JPQooOVcYZ0oD9JfVIF+Rd8RF03xLK8KWm/VSHpRHcm21aJq +HDOMHBBzgNQCxWdPAMUtIIANeixWZY1aX8nmPInno4FxBqhhtCnu7OEByGyw/c3R6UwToPAm2K9i +MEd3x5qE1aiKjNqLHAn0xGR3CYXIStJoqxyRCAQp0ZZLYc3x12vsy34LnG2GZrJckoNIBo4T8Q3B +9QPBTw5xJXsswmKsCcqhstuyk3va9o2bNOBO2jaFvj1l50jNwbYICyzEXj0RVwtw0dD7LfbkMk/9 +5VjAwteycH3424WZKtXlbVIT00rgobMWZYEf2jqFsEzx8Lg3JVRAo69O9O8N5DfWStcWIiVIQEtC +U25LoQi9gqMRjGPTNJ2BVG+3+nV38oJTBErdA8AWtYmAkBRfn61dW0adXjRIyzCWfSRWmMx6ykns +pyimRfcc9EpjR5lP4gcGvDRKJGsoB0hqV0N4cOpQN7dZDBMonSoUSg+yXilrN6rNVgHFNTbwn5EK +RdeCCW8RZCXBcnN8wVyCAd0WeBWp0tJLuU5vAbajS0lgx6f30gI7Hqm6w4a0RRHtna07knLTBkRu +WdadfeVtsVCvbFp29qohSlrVIhrika5yIg+KgIGLvjl2EgGeuNZ+3bBRWU11npjn7J1Br3G93lzV +r70nwqMuTNXvGa+YrW5vvscsWBdS44c1mfZA8UYuBGRhXLk0KgRsfSnVPRxeov6gm7DzCBTupQGg +GdeRFtSpiTXA9aroMEErdCBoSt/2uJU9NKwAPThPQbrZfuXSteCohI4ut4Ux4fFJMHtVMbHapOSd +tmNJdqYle9ogVo5KaiwDXmmnRtedEeRtoM6ag6vWixOpOtEjwucIMZaDJ/yiLIYUADy/EYoV31+3 +oHp9UiBIjfGeuwVRFejh50QaAqkRBAngz3f+v8z9go1u98ADcO5DuAz8BXWGguCD94sJ0iw8XuM8 +sdIMEBQ6omehh9Zt8ROiAnfcFGrrn0CZa2/Ct6CgqrDNs60KbrJ5xQgfBUsdipUT8wifIl/Ws6nj +U8gwER2RbWKAPla7xIEMnYJbsbVWA4ebEny3NkplKj0Qr2k3N5Mgcu+LZaVWztguAUYWj+nS7S3R +qpFZ7/bWarmhW+C/6CaPd2tKqKus1QIMYFOiNdjusNRDOwO4+WpL6pbRkCTe+4ZHK9sDQ+6n3bGa +pcEWnkdPXJil7O6Qofw7Yd7aiPAhxrCs5ysHdc4KX8ZH56stNTFNP6dAZXSPSl27qncsfk4UBwi4 +dDHrreuKPmsLsK2YfBXw0/lRUCC8Bfh38X5VZbNjJesaUKSp7rXuF3g5UpKml1EMqneT5W6v2uM8 +VpS4HWg2u51tOsHHiYjpefp4tSuYRADkPfr4TBtHl1moGNMtnbH1q1aRsKT7aBBIVjaALXavozg6 +vTcmln4E7f4gGQeLW3/9MtyFKUqnvfa/DB4zlaBnO/gJrFjIbWGrkJTTTTlBz/cgOWoCozsCldqB +UjAi7VoZyuGoB07dvofoElJ7myToXDns0Jm1PzAInpCwZR6YOWGHcABSlNwXN89bZYdR0gKMKOQ4 +B7210n3jfdhKMQEKNjUjkRMGzt6a16dlRTboi2rHQeaIMSOGL65LG70a+Xsj0yYSmQJgNsyFkI/q +yLaTmgtBJ+o6FDiOC2w7wsLpxwfvo6xmho4PMFtb7WAa3XFJWv4engO+p6PIJij2O/QHFBmzhi/p +mto1PzkE7lP4acDyQ6YDDq8OYFSFgyd1qasj9Vh99cQa+bbDrG+p4LdU8Fsq+C0V/JYKvlqMnMQV +D9V0L4te9li4S1xU7Gv3xieRGahQNGTYUxeoISpP6LlbYQbHS5hsErnuA5SyAM9wDeAtYengICUC +KlBctxVSZV+bCNAB+16qCNmvzGY8lOOYIwIBnMpgguryeTM2ZXacSDMQ6CF4BEuOk+vhsOm5VKZt +Q7XHgehQoA4qyGNVHIPLxNQ9rrVE/FJUiUnjazBRwbrMdZ14EinFgnxYBcuNQeH0Ciqh9uwtfHv7 +FjQyuj8iGh4GgeTh6X5O4YZKe5eIZu3rPJccbgD1ol9jEp5TCJJbU7M+kXd33N0l5922Pz4jhSKa +nrhXYCpr0ygWqegppM3w1jUSjkEuozmIUbBGXd3mi0AeREYwP1T0hznHxH2ghw6Cu7djORTSghBw +2Wqp8E4s8hCveevPPVkPCmuhsXXg/AmCeWIt4HMWeP0gKeswwFQMmzYX9UDLoxTH3eUrUfFWC5yL +lIUUYqKjyHL1KnE97o/FFPCJWqENDtG1mGSQKvug4Hyr4hDZjbd9ZvrlypUmEzDI9MJ/wNFzMovD +26uvo5Q9LlCsmTLcrAj/cD8TkaMHY9kcC62TlCu5i5p6ddsgxWyzMswEJOpahe2kPQPFk+0aP3ln +G97+kzY5AVQJyKsdnxmLBL8/w8QAUzoBLz4wNWdnAA2YUeVXhLGxmSAkxXLC5L0Sf930iYzZyfsl +4rhwTtupzG10TEu4wMwkMC1AUHgi5XkUJrRi3gblh80Es90LeY2d4crYHMmMK/yeuriuSsF5Bz4/ +XI8EenbD7YR9ljnrFQjMbfbuBpl72rkE7B/pkMmVTAFi2gVIpxflN45vZxSZPtcoNpmi8Y7Gqd70 +1p60TPpf7IGOoaW4nz1RiV030bvTbPYgDCL4/LIM5JJpji3qASHh4tSDQtqcAuTaDnZUgrPV3EJb ++8Rr7Yv2/oKM/WzbqIsxhLkKzjRJo/On3wbNzwtsxr5X4G24tyctFlhW+7lqFVY9WIHfDE/LDkge +tXd3YS7bC+/GsJuI3ZmLwYWLZR8U0j405oyjbpWbDPskM0DiA1JAcz8yFDl6FQ1aYvpOPV3tL0uK +aCn0XGZi+S5ly89MBMwj0/A6DVioOUAtZ2+au4VweFnEV5+oaUYKSkPWPMxFvqW+lODlqymwxrrU +hvt60iePRO7t8HLkbTlLZTiS8VndaUGE24SbOXph9fmZ2J2JmEmhWeGbws7seKXDmNuk5kM+0cMv +e6I4lMDCv1Z3ilssUMdiNQe3vnWqRzMZJwdJlZmK4NubHeGovPVrcg3+Ox+bWaZseX2LfJsZ6D70 +lYwzCb5KoguFDgbGN7PW3m9zpiDCunyuuae3HvqpqDiho4ZHEYC5hhukpgrOQblFwTKUgfgXc721 +VWwy5hM9/J/x4w3NukDHXEl1ijCLIF+G7c7BT70+PQxlnXKbYgAWaqjB4Qq3nFeIFTSyU4l5MR1v +z4AL25TqLiRaw0HKTCzigpniJBEP28J2PUcdHuGmP/623nrwN/rgxUxdKrwIrcNuNz/VsDeoC+tG +p+su6OSMGeWmJ9Y47Eaxp3+y3XIh5QRhbuSc8OrtNBVTA3S/8IDzQaA2iph2/4DiNNp8XNASA52m +qjCEoMyzXHjJcI+ru3zGGSaUyKDOybytZLuyp3F4YRE6dRZ+3zJu78guBHh67cVNxO7MxdwehlCz +5cxwXdXFZMxtUpMhn0hhmDlOOWAwV9lcbZ9OPDzRkHTIGVF5c+LpZ3KTB5uMuk3qKT/+cqVApnts +k8fnRh5VEOlEn9zIRGp8qNmI26Se8qNrnRJPrhk+5DJ/8v7ZpSzG9D4mUuMzTQbcJPS0V/y4qbAD +CjZYrzENJ7b7IDbf7qaiFqz3Q/YnndjKW+Vmwz7lLT+dgMlWns7ARG7+aOO4W+We9hRMttdsCsYN +PbuRUWr6WJMxt8o97ccfN9ns6cdNPbuPUWr6VOOQG8We+uofNhg3AiltJLoUc67z7T+KTbd/w2Lx +aW1H8PM9vUloOuDT3fjzRx839PzZR7nZcw2DbhJ66g8/bqvpww+beXojg9TkmcYBNwk99QcfttT0 +uYdtPL2PQWrySMN4W2Se/loftpOMjeopzaZqZb7Jj4WmW7xf2oSyXTz6E+f2NqnJgE93i88ee9y4 +s+cepaaPNIy4TeopP/i4kSYPPmzbyU0MMrPHGUfbJvWUH3rYRpNnHrbs5B4GmdnTDINtEnrKT/ws +RncWaECfdSbQ51/4gvO7D1/bEKZxVNOZr6WSVqp/dq7nm4GbckstGcA+9bXFS7UOyBwnnN1yJTRz +Y+rPZmuH8hISha33ZIUclgwabIZomvVdwTlZe6DCmiKlJPlQJaMcRSSZkpZFefS1Lg== + + + NXMhlm7NFOsFvm3rtndxUlhjd20iydeae4OjSqXqWjYpjDZ1tjFWpSoyQiiXPGWygQ7XQ6KYckyb +NLpcF0wbp7attTU19tgPpch5LTjuZZLZNBFVkhnUIBd7CKAE7inbY2VQNV3cU1cbgx2fKKze4qs5 +on8nhe6wU9NKAbTqwibzqHqnuqeWN0bKnqnwpvuptIU+pqbaUX2xhUedl3GX975kajQ9xbL0L9f9 +kqiTtBlXpbB6/ezgDHZ2smB6+3DsjVWkhRNXtgvbH1oIZIWLAl17qnrtXUS6g+lBrTSzmUghGtA9 +CGHuRteVTVYH1GJzGmIl1Jr7g03FHND00U50+6itxx3ZvZiWi1o+iS2NPuywhNhHdEzRUprKBruM +Lc5AFbJI3Treu01R6P1+7CBkSApg3vhDOSJ15EwiHBPJXwzmOGxDUR8s3aBmC4XQMeeH2/4yXWiU +ujoHdzoFZ7YNAIJ9piKS7kZb1YEHXbLtreCuVgMJ2Ni7xbaDvTxn72F3/XZ84grXsSt/YUz948Fs +IrHyiA2Qs+ZR/7P360birg95xpdPbyT2W6ahVhqBjUTREEiLbXHrRoo8naDzy8mN5Nj+9vZzeMw+ +MgVg01gTrCLrPtJodk9s5K37yNa/XXghvSiFNFdbejKKTXvecqjw7GorqiLUbjO6g9pKsdiOT34t +3XdFLxdgQMXZr53tJ1wAz+Lpbqsg2aanVYNaq10IZhabuUOFb23gE9e96lgobbaJysrp5aTjwDSx +f5aNggdf9cpJuFcZA7WCi2Inf6YuWVUtDiDRRckpMMRQQKbbMJap30kdWNr+VtRgaruOD64URQZV +tF1uA1Kv5pU+ofAUWI3iPl1gwYK2F9Rxm/svRoilCSTrDLt/+HT43jBgnIL3x316BAULZMMS5HZ0 +DNoBG2oG4zrlPxhRpcavDmOeze/xLF7DMPDGkGDHcUIvQrHjl5pH042mzVBDCkQ4lWV4R5NOEeZ+ +pqTZL9FOnhRPyJgWBqmfinsT6vXTg5gde6YmazFFbWeZCGuHe3Cm5LmS6T07H5cpE9Qg03EqIllc ++uNKaGnxEznioE5Y3s032vTL5KZmQrMHnMsdTdbstmZw8GdPjAEswB2qaM1YXhywxKw1v1tfNqi3 +Zv2sjfBld8h8Cb04UBAo8/3Ex5QOaCqbSINsu3W546vO5SZ3dVKQii6bUudr76I/LRhAebATMjCL +eRdOjPSnkVznMwvXlZNvM4mO8LRzNhvHTidZ5qZMm1nOiZamWP2q4Gan2gyw5S3SnLdIc94izXmL +NOfPFGnOAbQT5Xnoely7MYO2aUsiLRDwj3rZbTvjZvqUIQTxZSbj9ykCj1wIWuaLLrlRDMilYh5+ +XYS4M7kLR6L5Mp/J1Mo7klkZcnzqja1Lnl6JXtKEacCLycRcJrc0FxofbyY3TNV4U2GuqsOT2/cX +Vh7N7GYkHfpVL164i7LIzB4VKtEKo9nPVdtoiT5ge77Tv6DPNgsqP0Qzufyh2+bownOxyZ2dFKwE +Ul20DUQ1an6MYOKKRCILzeAHZND5JPzpM/aefSobu7Zd8fy1nd37/Z1zuzuvfPiVHWHsx0H5j384 +Bvcn9GHuQK1ZTEdsKaAm1IWIux8vbMHSEyGleFuewp5qpEUWEEBd5LvvfO5r7z7Y7ZYzV+uZnYuf +LTviAx89WIjL4y1E16tXi9kzdE8AIbo4WXjAkUQUghkAPUtyVqJ6T+jAoD+8CXUOshBwSYI9jS12 +kxFMYQL4LineD35LEILnQqn7jtEywA0LTVxlzV0Uwl8tuyR4UHEsk4OpxfRU9bRHqLchEiokvggX +wu6sOiLeNaclEnjvbRLN293lUBnCbrKmvXc+V2JLvlcMLgs5CdqslrVT24TMUcbaaQTeesnpQg5y +gYPMgXppMqQS7OIgjIR+34sn5J7slco0rkKvWMCXsFda00SGZ6sVtLMEVRU9zWV2qeb2UYxI5q6a +BlHxoJpJTGbBQaeoLaCj7V3EQpgtEvN1y5IX4mu52ZvScM2ejhB9Ldn04RpPdraqUgLVNRJDaHTk +e3u9etzWKa3pIcM/TXI8zlohUwFxWiakq175xU4ggF8J+Xe4UC5l/i5vFDA14byArRqbA2AvArx4 +1qLwE4LNqC1xLTm/cNYF85JCxEW2CWCTlCbgDeYy28JxHekSe7SfZYhBgWF2YYlqvDGxjEmfyI0V +0G5NxkGHksEMFZccPBOwo1UwG1Puw5E4yWC20EsrGQ91twcw1TyW/nBcaoGazlZKYMnlPe9oAYTV +9hDPBhZOSeymQIqAh1Mu1O7JZpMALzJEd2GQZd3J77KhCng2Nvt2CPeHq3sgFhJRNlt3qAAH0p6H +aiHSP8YOA1iEZBAwQqJTbwAXyiqAN8RGU/oIpmHglaKKNbCnaQ7wIFFqLHKcyjrCOVIEDkHg2vat +nfh4G/bSiM/akrEzq6llzZ7KfFh7r05BwUYVDqTM9g7RHLTDgGwJxqri2323tb0dccVeSIqwCnE7 +2TapE84P/TFntdAnBl8fMDWl9h468ARtAdkszvbaIKKthkELukUwfWC29uxCIETmhR59F4hkgvbp +iJ0VT5uaWV+lsThsBm09mT4W8QM9pKYQmdEVVNZUlgMCmZ69GDxgmeofBz1ZL21Vfs5Wkw1ls0+k +AwVDYzY97EkqFJgam5vGdgSzo9mrtY1QsVNWPGNHf6cL4CblLCLnI6k7XYr1vGQzY225myNIBpEc +pg8YPTtmx2bXB8CHyD6KNdoUc2BCgmj1bJpN5dpk2fOa2nWjyKrR8BdsI+YqOr7xQg3cLl6XKevm +9GTQWRdxAeJeSSDCdJXsOwseqSNTtLAOAnpLGxCkH5OKi5iWcVMXsmwoANs2Za37V+VMcl4KBSwU +O6tMH9rEe1uzzh2kSHKRVbVbAQ9lJmVvJHBgm941RehOCwHYCbQKpQLgWICibBshtSacGUQWIQA5 +NfPsFKQFrox1JbQaiYDglIAUpfBAZyXrw+aM3qZ760kMahb3IzNABFysuQSyVO1j2cYGHdhOD6ck +i61ncLw4TUC/ncoAEC5wGNveoGIfRrsihnfi7Y3Z+VEb3GO6lClqWtWS6hTkWJrdYtuJs4F+pA1W +xuMwYN5pn33Rx1/+0PnDF15I4bN3n/OlD16698qL5+83q/HBh2UEtm66Pf+eRybiRU1b2XOo2LDm +a4PtzHlLhrtDUXUDx5Qta9X0ayNNTNlh9fAuJdydRZDHgNnbarHDFkMh2jIP4CkAvQCIRNJBanvA +ThqwQew9gn2KJ2krOwoL57l+Ijdbvb3dzxQLmDqgdhWQW20pNinbIiZETgWbblMmi00SBlBISibb +6Q9mrSkCm3Y7Dmj85VhM4EzQ7dDVup00No73pgEDpwFP5WE5MpUL/I4OI84JwB3QV3Ax2ZUhRTJD +R5U5HHtkevGIo+DNnPhhbQbZBXlV7HbPKnL04Njg6gBkZBZsgnsVWGhNj4dAldiNgH+FmwzYk2ll +uFV317+sx3mbV9aJv+E66X5oI20PqaztFXKUPCvVaILktZfd2x+RsmNFqZLAh0g1U8BeFKepmx02 +D5gwoXCGCyjXUa0OMHPoAmZLgJxPF1sX8ICoJRDJYjxYONdfZsOtPP6ZNk+qu+Gkyvc5q3bPZpbb +eNTB9PIcBzoweku2VJ9VW1bcdIL7s5dMHIsd1LsA7OAkFEbdaTFKL2yz1ShAcnwYkPZawLhvB7Ek +vDfTRRyWaC+glPEkbEt6SDPtgCNQTHTZFMCiELVZTw2gQjMNhCeHh4B5qWXLTQ0iOipxUYqtbtv/ +EBdPryQ7yo4zDqaq9NqeShAKUEwdAQKOTBaMeqGxuKX14VgYdjQ6EPie6xNPzQ4FPpT+nJipDa/n +cTGIKwtkual2NrsJaHBHqn8RVl5RbRF2fmgAvHcHtALMTpLfFCIxE6AxPRj4Zg2wFvrEmU6MAOJU +QNDUX2+TasvJ5o4Cctl7tuITPoxNZkdFtM1Ri667FqFg8pl5Byo66rN7e6CVQCKN5W83mWUIQDZB +X353GrPOYQ8ooevOLu67LRvf1qo0oeiIwCPZ1fPhjKX6ylay7VrVF4GKb68iCe1czp7JNNl8UFaI +n6DgVtjjrlCIXsNhWlVMLGgfWFsZrjrTwRmywP5oJrWQCI3yQXOXAonQ1hpt6btVxA4jO6BM5fgu +Asq3vSGi8KsINoU5lT67dSyhuUaISFYXxmbJnisJkY7MMg5TRNtDSGJflWVk1mIAEsLDUoerZ86/ +o4se/79hY21ZJFtVWGxv6FzgXTpTG4mD3vwmQcmjTm25LVCX9FWKlJ1WMI9H2VkAzttOZ8XZns99 +6sCEjyqCoWcfGWqDmg5BwXYhE4R2QdEULXFg82l3OurCSvfatl5qyy09/uE2z2694eyezhVcuWy5 +4WW3XTXf8KoXMcRtl083Piw7JbX998W3f1a+CFi+0GOJ73iBaOI7XtgWskPuVoN2DHiLYTsb7nYD +dwx4q6E7G/B2g3cMeJvhO8a71QBeH/D2QniMd3tBPEa7rTAem+H2AnmMdnuhvK7IbieYx5NtCed1 +uVsK6HVNdzshPRbtlqDeKndtWK/LXR/Y68fjtaG9VeyWgnvrmX1r4b11vFsL8L3jhQebnMibmuhY +SO9894NXHuzMj/WPrKb3HJTitfG/rqlvKQLYD/ZbigEy2O1FARnt1uKAW5fTTX2S+XJyh+W0JUK4 +yt1KjHAd61aihFun/Kb+2uN38Lb4YVf9GyKIhzPn2hjiQfDaKOI69K3FEZmTW40k9pdwfSxx28u6 +s30h3dRFny+kjVFGBG8zzsh4txhp7Mf97cUae6ji1qKNDHer8cata/imcaDHnz+bIpEHuVuLRa4D +3lo0cuvcx6cy9xujlDcdzA1DPRPlg2cZCt5Ai5lps4iZm+XCYuybj9Czddm2FsSlUOOaC5FHqTsz +KdtJBbY0sX7QVd7FjkYcpe5vua+taap40yKCjQvgpjnnR2/5LHkz4VDhOBepzOc8AXANjMbCRjs1 +54OUEyFqBTVCsONzKSrDRTyEhsP/xKaw8yICKVuw1H2nvzGNiImTRMtmMuLzWfDrCV26iYz6IopW +goPIJvgcppeqQBTAiJuI3sl2gFOaqBcAx9DhmEyB2Bi4fDP1uiEiJpBaRZ7WcyOp4d3DYwcCbuh9 +i+LHjlJdtDwihMMv1ltoOiAchPspEFeyQ8lNRIbJXEe7KjXfDI6AtR1XvqIp60Yp3G3iD9nsDegT +e7/gMORWMUcTdub8R5OkdhBLZtJ6DstlySfFKjzptcmXbV69EcS9KyZSMQ+EGSt7e5/4EdClVN1Y +xvXEmSRCzPmdCHGar1kbZIRtIqNpjbzrQNyZpls3vVSAioWeb7P5s9Nw0PUJ79NuiBi5yWA8mFUl +B7J3a3PX9n/BdfRqp0TDBExgFPDXoKUFmg1QHAAsaz0c7VNaJUB6YmXZdMk6OpZhYw== + + + 2Q4zbcaCBR7i3pYdv1mb3bQqY6M2u2ku/5I2i4SZbZOZsxoI1RXB4TdCrcnWdcdPN6Gi48xhUXUe +cHNyPcE3jG/6x7E1oHE0I4/AmYk0OlLIPjgSQiaS9xxq6C1IEEcJdZXZp0RXaK/IM6GzCNVmBizS +bimbb5b3FZYyomUVbtGJSITUz46pJYDpX3rOe5CCK8iM0JroSCkdpP0s0WodFC8FFz1vlZru8XHI +jWI2dRynJCbgqexncST4bVvcfOOAwaCczELQnSyNh9RiLjYf9GglbJSazcY44iapiDqtZNuwRuNc +KMG2aE6f9iJMgYgs5l9kRyoTHnPzOdICkge8drJLI0F/R4qVMELOxORtddv3G7mAtYTLpGCcsSfO +0FwWobWQmEsLCla9kBnmBrgbbPnbyWsiULHbX6P4orJ2QlLzuoP5KsdRRGOlPbRVNQhCyLnZhSLc +WfbCA0BEup1gRztOZwFipu2Gt2F3V4h12x7FK+zn+bVbfKv6CjcN925TX+GmYb9L6itwpnBaAMvU +QLTjEA2ZlwPIfuv6y04HUbrit8Y4kbrTpex9mK/qOA4dVI0E4qE4qrx/umVBiYnQPWB4eBQL3jGO +kvnB0k6dKjICc0kWwlZazEUhokRPbAeMCADxAVSG1iIMIQ5Rsu92dpLJ2SFiDrO9skpOT28/KiVr +S9/TsGoidb+QZFmA6aIxbhDRWLb2TYEucJS00Jfs8YWSUBsLK3qBKzJDONlEgELCEXUW4dCwo9l3 +VWvPZTfsyWLZdBzq+AepDEeoFz5OuihjC6T68Yxs5uz6ssHMkiFMg59f0T2ZdHMKYFeRUeEcAK9R +pMdZ0S97etstdhX7DMUwSGjt0wqZMQpgnkhhch3eaQD6BhY6M41MhNyPTVAllYyPE2EGISEm1eS1 +V83BwxiuYX2lMdhI3l4mWUVoahO0nmStFtCedggA8kQ2n/gFyDSYK3ZgFmIXMwmzO+y4jCS5bMUd +TshjKbOqbVGamQ3FjF8vhPYvhGI4Rsll+wrntDn3NtPksiNspahEgGJyEkBJKUw2B30hQN2H83vz +MxopVTPau71pfsAC/YmtGCIsTCGQGGbCkWRvstrMGms0d9pi6NqMdtbILXuzsKIM0or6pToC2Lh4 +eGH2GPaqIMQuvaE1EKPM0L6Ci6WtYT50gi+4BaXCRmMzkM6v3YsoLZ+yWwMAXWS/7Fwi+Dq9VOpZ +mJAVjJMMdMhJfLBwqEqG8hLAAD0ZFJ6Od0eIEte4HbYHTLSAuLFFegjX3gjUh7ZrPKmrQaOBqpSI ++xHWzsIlGWQoSzA7ydyHRD3Ouhmv1Y2bFf9NswS9FA+1EqBDJ4nPqSv/z4G4arrIL70UDymyqMUM +A0iAOwglQHAEu1vNXUFVYo82BbYYU2cMBhCHAiiUGAZ/AKQN2EqAGuPSMwAJbB2h9EHku77yaq8A +h4dzUq4rtOLky5ZKGtEuVfYqNrCVU+pahnPsArPCTO8u5B1L6t3nE286gKZnd9WAGhKowORSjcgq +meFlqX61qsyQg0MM8D6yCxFyXhzDSnGHkx1qM6QiAdsfbe0Ps61oOizgH9K3rG2dQ2d4N93kQOcw +GfKglM04vHfUA/TeQF3C1Z66Vkw2/AKJsK1sP767e5ve8OYldtP8wUbb4ualfVfCeWcekyqkoK29 +hO5uJzmwzGhcodQ9dMtg/hTQ9bqWNMMByIZC0ldN/pxp5kMtpscAV0XGVgUHrMio0Cy+iAza91Ah +pusgIySPuqfALuDU9FKyyaXqnvIezBfwMGWEE6VtlHpQ9oeSIvZilrWtPmFhHdD6GyUdQpbq79nk ++vqwMWwiFIJS/RunfATZED3JZy5SHGiKv3Hq1ErSMjoSLkkb61jG29+zghdkzNu6rI6lpuGXwL4F +ndPuJLPUt0nN/ZphyK1ijomoYC809ma7ECOaxZmI03FCzEMrh70PgFVZum8ZOOltC0NRHvsrMiWA +yqpg2Coigh0P9gfgbuurxgoz6wQM1ayztXDZsN79YdVgphKIplSwn60Eo205YsewJG0BirrQ3KCe +8Qc5gshHoYZEexwZ87VQViQXfJ7I3Ot7IoO1CSy06ybbeCl8Gj7ylNU1+abkwhvVTFg5fd8cbUG7 +bU5NlR6BV3wY7rqdulkZ3TQ/sFEZ3TSYfcnRcZjoIL4ESpVkyE7CznCAm8EN+OiiqOh0SwxS07Dz +IDULO4uWPFL8RVylQ/4cn26gjidowzPJqXQq7OxNXQDfakILkZrZpTyvlLJQSm2dWNiHsLO3rxFH +dpDYxm5kTcLOHtzbQJoq9zzoLOzsA8YXJYjQBM6izscS06DzsdD0rfhIdRgpZjNpvJuHGUepuZ46 +HnGj1DSUbDPVbJfzNDmv6DhTKUxos9o4lHyeBZw9K4g6C28Xan4acLbVElTAWUksx3zCcLeFR7zN +3oF5Nqr9nVyKfLHwSsljejcLODtAe0HyqwDXp1MBZ0cZWKMCEROpK/TjgPOwRWcR50FoHnK+frtv +1mU3TXVt1GU3bzB8FHO2fW2rl6yP+ScCUp0EbahGa5SjZKAWc5oHbZCypYnvo0K/MWbTwdxNX1Eg +R6HGELOhbnoRDyjF2MHNYzZi8LWlbFZ6wpaYxGwo62v9a0QN2yTUYvrSflEIqlAb6OYxm7K347ng +9OIDxDy5EJUWtpvNSwlEMuMkZmMPWswrJM4HrHGax2wGqWnMxhww3hg165SWTEI2GAVmeTaCGUuZ +RWzqnkKNoPoixWWnIRvNM6/djm6g9ScX4pUSAG1eZTVuErKBWJNIg4PvlZaaWcyGonsQt2hGgKx1 +iNmYgFkmHh52ukDaGLMZJKYxm0FqjNkA+00dl7OjhWr0WcwG3uAMSGVPj7hTMRt7eLt9m+lIlfs0 +ZANtrZncRJrtQPeziA2Q2MTEArVQpaeUJxEbCphsUdnkAjrm3Cxi02y12AozPyMrfzRR1nWfk22t +TGNGbrOYTt8YduhVOcY2LWF2IduW/NFTBk230SxcQ50K+SRzakyd5xPhGhCgMZZNuXCytVm4ZtBl +k3DNIDMN11yvFTer/JvmA3u4hkoxe9vk7xol8fNwDcWLdG6w25Q0noRr7BXg78mSy9JWk3CNeQe2 +qE33sOJ7jmgSrTGtEszS95TVJdo3JtEaqt7IBjOhdJjNLEdbXvhUULczpaeiNabBm0eJZ4o/l7k9 +S1Whp0/NNFRQN9sQraGst5BkyRRt9PrWSbSGxhezXgPgnaYuyixaQwsfzSw8GmpxFq3hFMRujcrs +RDeP1lz/greuMP/mZIL8G88EKVpDCB7yGtvGTfXzs2y27+W/i/kyxKHzmMymrcV+ZUuRjGULYxLa +Xlss4DpmMwVoq5zmshc6zczfpxgvcJ5OstnEZOj4M1c2q/plzGYPItNs9iA1zbmad40tBGOOLZPl +RP52lJq6D+OQG8Vm2Ww79SmAg4NjQX/GeTZ7IjYbdFgJG6UmszEZcZPUJJs9Cg3ZbPMwoaEp9DHS +51vHbDZdUxRYegpoKcmZJbOBroQMQLYpp96YzKZ8XLXQxJVaTx9eTUFjW9MI5elpLbNs9z32U+BE +hFEkUQI4CtlBRsIDGgl6ZNqYyB5exCyRff3u3qy+bprP2Ki+bhrDfqS+zFWF+9Q8U2pfnJ+Gd9o+ +QTEXMPDZT1OncBCa1nH24A7F8Z07aJuQPB6CLaWqR24lnQnSlXa6Lmq13ia10GydKJYpBfbBTjKb +TUHSSAT8/4rVv0XMtkSCNAq3r+Xg2nTMbVL4URFTg5SGWSPrTFx9PYPQ/S3vcPP6vGnWYuP6vGlY +89H6hPzGtEQwp9oc5TQLj3O0pjUH3mhLFJi4D8S/yZ3Kzr6jS9kiMw/Y/EuayafT5PNKB0y7rVlk +c6GIpoFXjEbQRkOuQ1Mlsi5qvkYo2FrBz4/06QYiBHaHZk2RJeMUPgiRlsHsTPbLuRAd6SLsoEok +zMN4cEeZTjZPmK6lOk9KEFHD8jKHb6ERjHki4kQjCHd/4Fonk1OBuLfj4MRB57EgW1EVbnanDjoG +XEgCQ2WgxlDKVArOEF3VxWd7VwGTdaGJLOYsRlzzFs0IsPdG3NfsDKYpY+omJsscKTtCGqQHBdCE +0JuSPT4yYTcdcfQMHgv191sUwYeaSxRbw23f37TqNm+pN6eQ3L/xQnIqHWzeF9O6dqYpCk+yjOpf +GZYyVgche0kklcgnO3qgd6GRZWFVRsJeWBQt4Xdkgmc226HCENAALTBFJ94OFL0nfru0FRMkFEya +6DhM8fGJqJBv71gG5uzuAuxqgXy3KIbGqAwlELYrzL8LnZBwFt0J5q9HD7yGHSylTYQCOBZVyyxR +/0PrbozC8bD1a5azKOwq1RoeZ6ZhLDga8cgAmNnhFEFFiPi/l8O+xFHozkTI+T3tiOZcFTsegoR8 +25saAGCeVGfM24Tm9ubxeBulQCoJ2sDFUYxzkLoyC3Mps70SqAMUuPjWq24KhTHZlEqAkNBeCXrA +TEO51LOgPGl+kn22OjO+8Tw4Qy2NPOAq93hWckPFGggz5hLD36EJIIgKxgPKAhaguq/gfBDEaZRP +4oHTlGYKMpFcly9rq744AG0I2fref+CoVqiELOk62Q1bx/5uJ3ZTASjN0xORYQtuhVPyNw2HK+RC +CYltYnv1dmTa0zI+R4y9MZqCggLhg5AqDMnbFIqkyJkzrZBY8GYhakS9B5OptHxD7Edg3HZ0oQDL +H/BDQOEowAeRlluWfHiH+J62IsxT6bEN9LMpbhBD7EREEdAh30BhgbVgEiKx9eLkw1LMkjoP2Rhs +CVHYHdC5mle8zPKCtjaDV12VKYfS6/xpy/QE+DiCMvoik96HgRM9qOci3AfgCh2d8sVNaqEuEcKP +uFI1BOhN7eLAwgAdMuy7hfwxsTgi/GjTUQRwCOYJu4BOiqnqCdgNibdlo8Xkp5t8sF24ZZmTTf34 +qjVtwMNI04M8oM0N9o0NH4HqofI4qeKgiYh61bg0NpP7gNYIPRjxEu3V23tnnAgAhA1qwxB1H3MN +gZFRa7ZnwWiZ5iyCvFDTD3aOwC06uYyd+exsWL1s/XArnO2FvK2zZy5aowvqiqDngutLzpHQol9o +FNU4KnoFs6OqS2QnECWOirrwXR14VzcMxpxdAwAacxNDHSWGfbd539801LrNrHA3ja8dBcJiBGFH +wFa2dMvEVMW2MKszQ/FJawe4NzNTdRAikhoppCHyIRVxZzLeKHV/y11ttebcm4Ne524aF3g07YmU +HYvWBduvCnq4oI4ECHtyB5sYhOjyJ1tHfXYj10yLnqlkaEWXxmFsW8DMA0CGPEyFbZfAbwGSBNio +psYBm1OwAxY79V3nB0zwLkMdDFCPjDkz9+wKGQwCM8kTiXCbetodzJyPoxmWiNrRx0DxqCmXqTUX +myLKaCwO64lQBIiNX9qWV6EauFemBukqF/TPLhb6zFlcpoVFsWT7OUJ8XASPJNMiAg== + + + 1hKxGs1kSSquNo8S8BZzmcx02EVSDkAnmJZzRFrpmaQuDbw8Tr1RgrhV6AcbxWF1HeeqkJrztZKJ +sFUNlGHwxVOiRkARClrczXqDd9wup0cq1HmBZ5V7OTRpWtI4qtiTfmFqSgQIzZT+0kufOLHpnjcz +JrpdAvNqyVl4Pa7N0maJ1ENQ1hOstBNps0TJuCcWWAgtxtmFIj3hbaEzqwmiL0DrjkfaTBubTcfK +Y12aBrVdS2sDj4URQg2NHThaEkkkyDSbR47afhwniCkDU2jnx27YBRzFKqwHfsyWaR5Fht20VUG7 +m8bkZJjZo3oot+htx8RkfDMARPgDR7qiHYMQtZMYTgnzzCaSScUKWchO9XoQgr8IKA1tj5FAmyKv +Q1I99AQQ3UU2q3ZJRNz6AmG5FLkuhQordajPnbGIlpZkhr3LrZKHAsdhYk0l0sAx6XXaop9VWDHW +QleoZ+0SISgTKdv3gATi1menShdyVLZkMc3AYMlsfLjVbN1617Ow7JNCqI3qviV3qyFWIb9FnEHX +qp7fo/kIDpiKC3BWm1ah+cIthDWz5tl2V8CKBQzLvK1BZAg8MdaxUNgzF7Z8CS8UUz3cDdEQUGDI +xMPQ2zpFVKAsNvTHSrxScMNkcgU1UERHe0RYtWImw2eGNdTsmDlQ8rISzMPznn2dCEmBYWFW68Se +Gt7UzOLijbO6gLXDv59chmiBPSsZTWADdSsgEoA8V+lkYf05IAxNNxUIyu15ePs2CwGzPKynCR6i +6Ql7LkpQI8VJCzRZnhIRqYarW4GpJUvM/JLQHyWGHbV5R785wVH3xoOjMrlypJME9dShTueF4gAj +eGxQIl+llxQc1YmbiFMvta032qgmtd05gPDVQL2kBHteJJ49YDAZHDQqfMPsOvYSCvCtwJ528Jvj +EvFMrYIt7rSAqFjaiQpxE3PQ8AZWuJBnxwLx3An7yHt2hNexPnwQmZWHD0IzMzI1wM0S7ohNftwo +NI3HDONtlJqVfGep94inokKWE1KqvGH7EZUJflIXznthE2dAOX0vtzwqC+ftUv2E+YjnOa8Kz/BG +25rEmgmpF3MfFYVn2skoagIxqM7quDOGrAeMyBRNjTORe1r8lH+AhpuoLJ5diJ7XdWjqHyf14ONG +m5WDb9iOm52NNyd07N546BjAUqHqMlHgIM0KKDPhOLCAopa3n9YTZeBCKdahYcpkx/pJkwh46K0J +FLkN5ZOZjv0meEXT7pwpk+rJXPfYhBhGoHHWsXgytz0JCg+MMrys42lWqKegGAggaXpCZ4dioTwI +U5HyQBbreBmPk7KgfiNG81g4Wcx5qBT3QJxuinhaNzkIzcomTcjuF/C+htkxVk0WwkDmTzTQ32qZ +eFCFsKWnv8qui46cOWJMb1E9aCDzNPHneI0JOGyFDZsfSyYBAMrUs9B3aS9pVjGZE8UzKqSitsEd +F0za7ynzwJEjkzTWSw4Cs3LJQWiolsz4f+QP7EMR+g61khko6JApPKdI4lSppD20t5MnYyLZk8dJ +qWSmIscWeqp4bj2YeVQqmfFhFzurIWoVWN+sUtJeUgSVlfauJPN7KJS0TYC7Y5NlC3TJM0fN1oOn +TtKLqT7NSiD7NjBXwXawjRWmbmEhi+HZGk3QppMyyYIVF3rjJWfdtEoSvNyMA2v7Yll9gaMiyUFd +jTWSg8isRPJ6tbdZpb+hcD2aw/ZOBp4do2FaIIkQ+yoXbB8V+B/XRxZgXs2hYvG4PK2OLMy0raUl +q2+9zqsj0R4EUAHsp3x9UhxZsC+Smv/NcpgF61EwjVFBcQ55Vj3J4m3qHePNm9WfZxfKVWEPVCuZ +w1ldZBY0Lr0YhKJ6/dtYFmnbyRQxgTFw2zsi1FFVZAYWxMY1+6hS1z8piuT8a5FuJcgK/ORt3dvy +SjcvqTcnEvyEgeDqmcpi5/YCGHCeeyVVzhjYGLTo91bRI6+kclCZ0w5MdCcmGLwJCCMEhrUwWNel +o1tSlz24pxQ3UlWUJ1KlAahMk6zpydRVypFbYiJemoAAQ8zhhFtS6l6qgipCs2/izC0xmQSTQsO9 +CT5M3JJBZOaWDEIzj6PkfQEq3vYiB9lGoanDMYy3UWrmcCBFOUAKOORqZppL2e88zfUqbJ24JeD2 +V0ixlTHwE6/EJNS8Z1qkoBLnXkklDESJgNK7fuKUdPTaqDIw1fWMzoQtSM52QA05aercK6msP6H1 +MEVxeiGSIAVcoEpdz6xLddxoM69kw3bcqm/enAzIm0Lfc9MQbNx94dsHcp0p4OYtYm1CyP32RgUv +ug0fo8mKppSWOF4gECuI+kEIEFyKDmSsJFBo7CVXciesDKoP1AGETWtWn13LFJ3Z8bvaxO0ACC7l +CuIuIe/fSIEXrPIdRDfmrwXITAjc0WyShbWbzLwA+lrLztwBe+Sq7lc1S0Yi0VQ6ZKEQ2VjFPuHv +jibYDhLWgKDOCocSYahQwzTwYG0rrHGQSiKEBL4gEDXWIEUrIw2zNP+WpZdLV1JSRB0jyFR6eJtH +UIyxXQhD2JOROATYGlz/3lVCHRnBSQqDI/NDLiAq+xR4eJIzFMJxeLgeU2wkUSgPsC3n1dRrpgNx +KtJbdtqYEwN0eFXvlYf6BZIEJhESG5Ck7VK75iiosDnmkHFVaVDSdrSfkZfqBqpJmc7Al4Q3g0aU +QerORGpYRPcni2gQ2qoo3pxw6RuPlsLNEIglLhSodHCHcQ8dC033UGNdB+xJMyBzmmwheHYWyh0A +OvclT7aQiCDMC1IqzoOcMdtC8EDY9qg04hCXn2whEzGlkmWlFzUXD1uoRUqQMaycWEPmW2iUmm2h +hu/dmjD0vcCwhz0EfQNFHSzhGtfmuKt7CMIpRSQi07J2XQx7yMz2jG5VvU6ebSEztGpKtFCDvT3b +QabM0MaEAQIZvPkOAhjt0T/uxA46lpruoGvX2eZ+ujendPTNOGpv6tdOj9pNI212d5bd53zuK6/c +16/Tl7z0Nef3v+T84Ved33uti37eg7sfun/+0QvxbPLvO797//LlbNgvff49z73y8QevnT+cXDZ8 +yd3X7DcP+rXe+/GXXjx/dRXzu895/sFrV6W+5mOvPHzt3/jaj52vMu7SpQ4jfuxj53cf3n1w7/yL +P3H+8KFdcJWNV5de2rmjT3ZUgFNDbs57K6pngMeBFGKGAKJbI3rEL7xrE/c1XPXK/bX333/p3vn7 +7929b7P6Xhv70Vym8Wned/7hl1597eFdXtSlZzomQnyHfWV54fMevNifr38QX/hc+/aDw0fvfJ75 +fXD+2s6m6P4rD88f7ogyfbatkHeL9PCrBzNs/IO6WW4dCZ3/9ut84Gv5279qf/pz9tlX77Dbdl/x +lcvuxbc70TaeBQpKCSbQ2tyJHOB2ipTmUR/TAZ2aTCYPbxoZBCFFwEPArfllBU/CGwHx2Ow4fUIW +jOIc1TiRLLOxAkDZghXNaGDK7EOjZBu2rV6sDI6WuZH2+Jwwi6IrGdo4goguSg2DyGVuLP20eLMU +cXhw/KFbzEvn/ziztQhEWs0kq8WW4j1HIl3ORSE6UcuaGKB3wEfRTV66mGpBaVfUs5DFtkWM0jX3 +TbhlJlPxvQSPSj4pijFRh1SEfWkio75TO3MTnBR2XGRhCo2XSnapAPIQAG86HvxiMxCpAgAagxvI +gXPRzGEnY3ZF+ADdEQYMu3bv4c30FpiMTQqZZqIZ0dw1s4+FxRSZqAxzXxVZZiVk1Dt2a/UQf3Hm +chA2KhaqamFtkjq8LiWjHEP0XwZNJjFbAEQASRRWb9kniHqwQAD+YDSzDEQZiGEQVcZqa1CEc/S3 +qS47M34EpYY2J2HAxT0RVfrgbBWs6AhZscJCRzTZd9fFbKnYdUqlRklzCUcTRJXE9LJQR9QhYIZP +WgQcYDIUjxMtJFK4yhA1tAnA7s56OC4VIT0hWpMOlyL0XNkxjshLdnsQxmrQWtFWCSRMgIu2qWUx +kYoU04cKW4jGQ2dIIS6Q71jUvdmbMp+FQlR78NIUiizqgIGbAro6MX40FhsRXwpSdwI7WCIcjLEJ +pLeYdw4FiLf5gA6MVdJbE0B6LCuSwAJ9GgViAC1XZ6oOvd0iJbpJgGbkIQIoAp4gUgio9kgAyhWQ +0FrHwSebEOgqoO5nZ1piwayHQ5QCnT6LGeIS5oMFbfYKd0QdCaETuFoEfO6pKCPwDt0TImaTUUZG +aV0pk902iKzAwgW0R1sNNr32GicX4oUlgLipBIfiDohYoMrs7S9CnRO4Kgjs8BQ24P8iZYdqtool +dVov8CxbpOGcPDXKxYGUDiwORdOKyaD/lkj2ykEbAj+jCmhsVxGXyYKEA8zBxqbArgIDDWNq05za +KdE1FgFJu39HA19SYumq0J2OjEodJUXAmQA7rSPUjKlQRU0ZIDxzCcAzIuVygDMC5+KgQcO6ZJYr +xcC2nxwlOqPIvY53bycBHL1CHJhICYF/cQoiKzqmUk5aGJR0U7O/RCpvCpKEptZeWqTx52tijvry +gdSSMkrsCjgtF1NnEQorUrSL7+1pHfK/eQegKQn2HURGxLar0GYg6F3FqFVMpCXNHHcnxICwo6KU +ItHagS1mYpyTtB0kAJsOULO2FGCW4VWEDmHXCoctKjEWBWtt5igPpLARD6kLQcAF/SqpH4Qc3QwB +swDmzAskQuKYLHBaAhT4JRscSVw12g12K1yhAyPGDoaOLZE7r52te4iXZjJeqLIAwlCoFi4jH14W +s/0VKV8jJWyHR9MKzmrpBneuE0/taV2hhMweW7SL1xodz71ZxN0dx9LUXSDxGTl/WJ8uq4S2CLgT +IsGXuwImo2Ir1lOpp21PUV+J1IehAs+KmSHR019WWPjJVj6VIZAEooTXg9Opgp+ixkWblT4/QKEJ +qea+qnMRgdeCggUgANpEOZSBDAJEmyhg0WLDwWxbGGpB2ipJni6EfWUSkGmjE0A2UaexTpBigqXa +j0yyG/a68NYhfNZD6QhtHP1ggVBwk1Sj6lZWRRgPhFBdcdz7+eyzjjjor83F5SCkwAFwgpCW1B8q +Kg1hT150QqN9bYvbBlJjBMQYpIFBmbLjj7puexM4qrRBspqoirn+XW2tlbsxHTsHPnB/ZHTNOnB6 +TCpRi0hczA7qIDCNDxdgTOGAqZKyuQB7hDLfvNKxcABBKWxbChGbF62uBdj7bqdQaQL/KBXgEvGc +yIUewRWfatuFNtzONc+1eU5vGs7m8FKfFjTFZhMqCAXTM41NlWxUdzmkmENSf3oSZcsgdlDzYlAB +V0LV5SfFPKceKjHkTs6lZlo7SWiqueCJAa86qjZE8Z8G3Azc0KD7ZN0GRaJmfi0kWx1uDduMIBxd +WEUYyrgLBMPgnbVtnyYy9w60Bw2KVXrA00xM02VvnDARBdAwGINuQyGL2a5FnWImAz+RAPKSeS0d +0qnB/0q/CWy4q9ngqHbIodMCnpirDS9oa6wo3jTcCh71Inq2Tqyd5WnWCpGlYDN95w== + + + YAmU9NCwleFtUzkn3dFmXSRQ67o/BnRaxBvhRbTuRJHaJuxFQtGtuO+2nWxjVIpp5LUubC7McWJl +mrkAsCdsJqXUjhVrjqupZkdxNmA2sXMCuKpSMWa9O7fUhS9AH8VeTEg7b6NBwMtV1XAQItp4qjt2 +B8Tfihlpei9XaXaztYHmtC9DqagkqL3MhTpUOBVL98g5CxJ737nubZu+Nj/B1j2cz3IzaHKBzLOS +13yu+/+F8hFbpmH1V6jZAGaAssQS1ysBggsQlyurx9Z0ZYcroLJDOSf04wnQ+XCdRDGPuezLCuVI +y7NYfRPwJa67o0GNwhUUMqyBgA+HIoQ6wss+QMmZwrPFDGZ+2m1ZJ5tV2E2j9zwr280MXFIpoTtw +oObBDEDhYOyL1MSASrOlRcNg6WJUsZhtzGnfV4R5mADe2C4P8jzB6qtqBXWEsrsMFfl4ryWUFc/P +00Di8NAONBobL7Xllq55us1T+4wQ1m276k3Dxe1GIeI3wEtFgG6IRxPsJbT4jhcILj4i2NwSyDOx +Ww3lcVu3GsyzAW83nGcD3m5Azwa83ZAeA95mUI/xbjWsxyu8zcAenLO3F9pjtNsL7jGXtxfeY7ff +XoAPZXZbIT6ebEOQD7FbC/Pxbm8x0Mdwm0J9q+D1wb4uuCHcx5veFPBbz9NbDPn1EW8z6LeOeFth +v9tlyF4O7ORbAoJdcd9WSJBz8JaCggx1e2FBRru1wODW5XRTR2W+nLYFDLvcbYUM19FuKWi4db5v +6sGdmO9twcSD4r82nLgeJdcHFA+H07UhxS54i0HFbhPdYlixv4UNgcVtr+vO9jV0U3/9xBraFnJE +8FaDjgx4q2HHbvXcVuCxRyxuMfTIgLcafNy6jG8aFzq1jDcFJVfB2wtLrgPeXmBy47THm/aSzad9 +Iz/QTQdzw1D/ojs+2Cq0q+PnBnwPokWAtQtlvRCdEk8RwOq1QsTj+54+lrozlSLgF4jLoDGWjl4+ +GXIQu7/pzjbXNr85fUQ3Zoy9VDxKYC8vHcScPvTprNurpWUr0yCiiM182idiNne+qJ1+wfPOJ+WK ++QfEf4BCap1QAbKSkHVSRN/p7wh50skrKH2V/NNOD2Nj6xHGQUZJbfghwWoi/uzXg/XoUnQcwGzN +CWL3WnedbY9zxo5InQO0LgCNbOYJ7a9Ndx3BCRBNHxR9qnXbB/Ub00S0LEvX3pk9ENgMqrMHAH4p +kOjRBFN7QDAlsKUAqBR+yETmeDL7cMdis1dDhMDDQWTWAwgAW6U8DfAYFhxfbi1DGofcKEbwzMYk +qArWUjuIAYQGDhogRafE6JSglSACDECUz4HF7OwsN0sRijkZe7h7UUy7Td2OgD/Zdq654+up776I +Nb2Dzs5k7olGIyc1ShcBgM6uBEUw/V1mvNCj7fs0gDVjpz+kDwLP8sR0wFwKNNA23fZCKyxBLuFg +3WMXLg2CPUG9Htb6AjKuWWwg1oHrfbxRnWaEvEAwu4y44yhifrA9hq1NuoB7mO36Hb9Zmz1zLMLQ +CziejQRNDNoLiROcWC2041JnylQkvDQ1mWkG4AVhIzvs6rxzi+C14V00MzuoUQeceY4GgNVtqzdA +z4L+BqKun4jQXb/HsqaRlz737CZStBulhOGyQP+phrgI9FdKuqUwE4EWCViQTJzO9X7XiVTd44AB +D0wfce40LET7PAJkHjZLzbb4OOJGqbC3wYgQBXh9JFX2SmJ4QAeqCEkj7H0ivgT72M+FJuONq2Cb +1GwehgG3CaEsHD56j9JNhQia2LHgFjZ+EOskyIRkc5zv+Msk2cpCO6XAfsuu4iDDFmwCTn2RiYAr +WOtNTJn0hAIdD+ZrWiKxK3V1FSK8MO81M+Js7TpizbYHCtkWLTlgMzh9CumeuGsiOV7gRNCxOBG5 +p60UIYCvtnOC2rkHKfgegRvgDIAuXrfj8cvspuk4D7vxVdQ9mlDUM2QnupK8fnNv1lzPHOWwx80O +is7bc6+pPTMrzMq27W0HgBo1iYiCHUWeLQtCbZC6IylBoACPafZOUCAcMJ0shnLT9YTWvFsDdoui +b2g800e1ayYz6iFhbXTgR1o5ixYsbEABmClyjf00yeRcSa4Iv0eNhmwPc3hJLSkdVoj8dKZhJ2g8 +MKy8kvG2tCo4ICDxmPObREEU80TExoKzmICtgKVzmUl5D1IFgE+g4eS+kkDPCQRCEqEpdA95cbHJ +eELBZHE9sHscjL4qrTlKYdaZdWQrV4UGbmX6ECBlgv9RhQW2JCEltb834NCVCzUNDvlozL0+gbQm +IIG2hxfqIog8E08VZvaiCRpE1pkuISTBo3vl4IcLAfsIABWRtqU7KgRvic5Dt2bairC72BjrAjh/ +3/mgEvpGGpbeUcYCSSvCG7OgtBtz5MVNRTcrzb1kJm3kBh6NPXgnsGTfi10ggmU2SuhQcQro2urt +TzUIxT1ZcXpvKTkQ/4Odn3S/EhjupL7CtKbd1GuBBdOK5gYEWEuKKByERuNx2MiDrY9UCVLZszeF +EOE0hucMIq8KkrlGTiCl4L3286DhI2ATCz4QGx1oaDu/8QI6fzJw0NgNySytuL6oJDDOymmnqNrC +e7GFK9CXoGQzDYrgU4ET7CfmpQ1ewa6k2AXetrmdap/hwpBWBzrGTaRsjZo9CuCgGYteATXqMoh6 +LBj79qZgpl4a4VqaoEXja6MLjwbU2VjTBdUMlRYwR+TSnTbAmDGAbALsuSZaLDM6ZKxQJqQ4EzEv +jlxjAkQ799jWBnW4WdffNBWggicUSSQcB4JSUrFMFImPK0q9VVmSSNmEdEsGMB1RVyvBugB/ZxvO +uz3mXi2yJ7XwhF2X0Y9LJc4Oq5Anp8SVlMJnYsFjJuoEvcv6qklWZ7D5IfvspgjoEfBs4qWgRqsZ +GUDQJBC+J34uuoa+WA8dw3LKYyZdBl+NaSxC6TOHWU9hGmKBVqnTYsK27MQN1QKa1kRsb5jha+e+ +ExyAXRe+NBSqYwtprAT/YRAamk1dXzOAK3to7bhTdiaozamovV2sE3TfLyIDE45XzxU6wtILnnia +vK97m97q5mV10+zARhPi5lV8V0k5I6UvwB9zAPu+STm2GtMbOcleFk2FnZbVbFHvD4kGzoBAiUoR +aQO1R4XTxozIRTSMdpI6mCHBQDMzTNxBDhbvAOFR9RORe6LeEMQxLBohrWvy6EK2sqMK2pTvj/2e +TRtQC0FovCECfj2AlhVMBYlgB0dAIrypdL3etk9AJZMmKn0hOSfMiArq085+7x2FZ1Db5NALxCiA +Af4sKKU7EQHOHdA+U6BkI9eBjqQmPrQH7RMERPPiKWzYKDTzVcbxtknBKQiMXMAWZLevUqBUUMRU +OgjjXIqoVgQ2dH37puBgIqNGz2wkClhgZYUFl9qEHtgohLcW8kBV7zULVxJ8j36sNIo4bA5YEEs6 +cEdR7MBZ3Iht9YyWzRIrJlFyInIWuDcBqVrqmvSyN2Y3UFCSXsQ0HYtO7nididzTurfbZcUkSojq +7EIB+hUKSqi3SP30Do1DDFzWautq3GNe1TuO2iCqeqTXNuzErbrm2SMAjmUPq2+WYdmxgIaoMWni +THAWDDEYaGbrfxSaRYwnUsfx4igOCmL3tp3LkidHVnTA7QJYyoXDibMvAl0Kl0dG/S11IhXsnDXD +rVIGAk7fGCs2CUd20gkxLc8jxRDjwC/gH1mcx4FicU0JDxhMaFmcx3HiicgkTDxKTV5GsFPVVCkO +XQYIc6PQTBeN422TmoV+kUJBwwJQ2gmZJijJBONAUERjCA9HKsjs1gHglrk02soRjFPqOED2bctM +5J6YdQAwzyhQVRNOLkRVorB4G7CJk8hwhB0APONKzVYo88BwJO9rM5QzhXq1TgLDw1Yc4sKjxCQs +fO2O3qysnjm6X9DbbcGEoLLMJc5jK0l1dVRI2MZVpd3M5UAKsG6zTWLtvuZxbCVRnW+K3gzUCqHL +JLaSyEJkqnhr7EBZs9hKggDUPFvTMOZkYasPsRX1Bthmr1kkqXUSEkl538FvbfVFEQXOYisJoi+A +RG1BLzFPL9SI9VHNscB85CaxlazMHs4yjEl2ck9jK6PULLZC8RmstcToQX+cxFYSioDi5QB7SpqF +RBJ5PUDKouojZyLrTCfwbOFMUfn/eCFvVisg62a3QAk6ia3Y2ggLASyzS4sM0FlsJQG2SSKLAvCA +7z/EVqjEStA/monMFEyCKxORSXRlInUUXqEO3pvWKtTJZ18m4ZUELRPOF7he0blpeCXBb2gmfQDd +fVldiqvxlURGlziXrdPFxTgJsCSvUnoz1gOaOs0DLBCtmCsh8HF7J24SYEmm4eRRAvndm2uOVXQi +MgHyuR0juEFzXW9LjPKgRJx+OeT4ji7E3gWilUSPit+GAEum1JowOhE8F+I8wCJaD+Gn2fGkBowh +wDJRZccBlonIJMCyQSduVvg3zdd10qe2V3yVMFmp5USABSlK+cVuXrKfBFiYfptZU1SYdYf4wZUA +C8WZZlbxpaLy+Fl8BWWCLk0g6WWfJvEViLLM7nMwd8HoOjEN0TdwPdIA0msoJyYmFD9REQiVZMfZ +daId8xSvQM1bYpiEVxIIxDAb8f77upuEV5Jg28EgvKg3Ow6vmIiTDmWFB1cn4RWOPTPACRubyePL +PLyy4Z1uXlRvTobmxsTUR+EVWp1sqos5z2BWp3mCuWDsQTjqOvftJMEMwjv0YpC2YvVN8sLQTNh7 +RI3Y5aci98SpAFND7xxL3cs6vhCMooXzDMBMFyYJ5lFklmCeSE2yodlTCl1LEz6991ulZg7COOJG +qUmCGRR7gAFNMScR6E0zzBOpyYjjOtgmNZ2JYcSNUpMk8yg1ZJkzTZ9QU0bV6qZJlhlKALFr8/Zh +HJvmmekeMasJF7jQ0zammemxMItEkMKUVU2yw7Sq2MFuZyOtttRlztLMmdaAXCvFvYsCwIMUxAr0 +kdQma2+SZR7fxizLvGGHb9ZhN808bNRhN408P9Jh6AbCg412HxHOObqZ7fggqQi/w7zIcpCaFlmK +QJOjkYY1GGjWuq0IKzW8eFTuhq1iMF6YGQg9Pb3haV6xuU3Kli+4zqlB0NPdC1tB9AsuUJJRnZK3 +CbHp6DfC4HI419PxNkpB9mS+kZ27jmrldR6O39Cx1P1N73HzIn3mOJVBDhZLUkBPhQbRdqEn1I41 +0xSdDjTszZmFOge4V5rizXxNOlCxoMyC6yU3xGgSrLQBHpvpLCURf8O5atrP3KaZDGn+CFU75Qc2 +qjJSjiIcAiw4dpRd7EX/Q5464vPtlHI2r57mvQXiJAllAKhtA0D2wyKYCIngE0o6wtC2WeavV5jY +BMTR+FBaTKUo0Ak0sxKvI9igPm8qt9W9E8vhWmICQ3uqG3Sc9H5fdgTII7dLUjM/k1rQqpG84YIR +CHS82cTK31UaNqlC2Iuh2Bw9NSrnXiS0NDusaXanJIimxko1J+4ik2nOtYikaJDHpg== + + + UiljhQHPQ4nMXhuF9H5p8YUuiSKDZfJk97esua376dkjyyYDDRQG7jEsPywAaLtgDKVYpmeyByGY +3ml7b5E8nCNLDWuXHe7w1ji1Q3raMOmftreUKXWxBQlARCKCrl55bcnAvlg6BxiAzQ4yaVhhStV+ +W2gLN99ULKZ8i0gI/HVmXCw6fQhC9qYgzDQaA8289mKEEyz0scSh4KM0aHSC+eZlchlqT2oiFaWG +PJLjTWUHFWcxVtYTnF00fYPUoCdi9xYIVID3WOvSovAzEj1ILYxCdyZCs4YEZeY8ATYcPdMqm4Rm +S3UYbpNQ3RNSz3AEe6Vdu9DVKZgKAR1hr9TH4MyHhm/QFCMgDbCoUwsUAW2ws6q0pPIbSP484C4g +xGutZJxtYDn4YkmjBFNNvsB2Ni5JnVyDaEETHQEkz1yjiraK0Ax8OyxRgBgcSrsT/pmbbX6DhzSG +Ljtld10nRzT7D61Zd3jeNnlQw0eyhsNmId7jw6Le4oZ9ev2e2wpx9MYotZ0MZghJ7Z5lt9j4EBM5 +uN7ZVC/PhESVbN4LCAS5Cl09gOqRaOmHk46/E7bOpN3gCVHgQggktoYouKuCRKG4HP+jT6jS+aw7 +QsERbgCa70jk2bt2i1SJnQKmFcSEAFMjVWr4BB5YgKiCRTvJPasVhIg6StxT4SP06ApzQw4/uYwS +wJyHixpNdStY+hSPwfCq05FnhyHdVk3jgeBHqyyaaFO1bnmzXR0xfgdNBPMSoMqEHwOKyd2oFEg0 +Z9G3w94ZJxKikwORQRTSba5bwp4eQZA94Ngs0308WCdcOrNJ4D7CMCDAA24P0T86D7tR0OCNy93t +IYuUOeUBC7IJXVWqrSEF3Alfd03HkgdXAxZvRran49i3Yzm7XvzZmbWUcVLfN9Trif3Zqq+jxFrr +mKmeo7Fi8ZOr2AdmqdA2wnKMspJNudvSKNSxNBYmD5cXsAKoT+C4oslEaEi1o12wvkEByjblS0BP +ATMUPQ0pGI790Li6R0InqOQ2Uux75JqttnmrP5tc2z6T7WY/iJY1Tn1GD4uKbeVCja9PE6E7EyGI +z+AxARmAQKh4ZobxRqn7W+5qs8X2zDEOx6AEs8MYNUMoylJRVpK8P2f+yzMhsZ3bpordnyGbjeZi +I7XuH8COAZaMnZoReI/oiAXRo2lnvKp6C6ADzLWZfq5bbBEwGXBVlg59IYst2SkXcZxypQLB9Eyl +koxQjxstrZAh60H5KYY8N9gomHFkf4B+se00uYyn/rbAFgvUiS5DMhxNRh172lFMRPUR4ffGMatK +RtVUUKzQgZYoJkuUY3q4ePAtCD7ggkU6K0yNUf0E1S44LGCXqbzQDv8Ex2zMrU4kTIFCrwpIEj1o +h3q0q0KL3R45uqZQocrahChCeCxCbEfpsGv0uJm3abdmDwTLD5hnUIZy7tmxpBwgPFvdkAicWQwQ +4f30mITNrJ1C6ijAFkjJkr15L4YlPxpO9n5SFe0Z23JinfUKkqwSDDYh2AqDENgEASuAFg3cPA4Z +bzMGJVLuyy3QXu3pTWmiicdO7CBEcA5puQGBA+wPcEhJCFcs6EUhbRq8d+PKJ6VKeQVgcSTOrt9A +m3XyG+KutZmw9Wd2B5yFvmh1JDLeFKimTl07ylB4ZG+1YqxQYhcFR2V+bAFaq9GTw0zYtNh5Vsui +MqMCKZsd7gFsJ9YPzZFmVpEC7ilMe3GyqhMlOwmm4T1gUh72bE9pwS7YaUp2N4rCaXGj3WQLxBYb +zG/qC41T8wv0skYaFFPfVvHkMoFWEPLD0NaGIopugCIKjNJmviCB8Q5ps92cD9oRdhHwudQksK53 +W3iUq1KJb8vb9hlEU6KwBiwyEBkoTlhjZuhpbvFgKM8jHpQnEsfxo16aeCSEiqpKpJmdUaSRwCkh +uesoYVCLAMoJtk3uWg9EChoHV2Yf5RhO2HAAOPq1LLFiQNkj4DfLzeRPTQljU8a7kPC67N5qAnZp +NIiGFzQzq3jPSc6TEr1lcpkO64gDBu5BvxE2sw8cEE0rzsOdRmmu7yh9ZC2VPaSuaj0xItUsKiml +UYdZAfuQchJ7a7tx7dvE0myooF4yvXftDtq8gZ9JpuBkq8L0ObWojhoS2wgV7kWbo2Qvo+e+Facj +SE7sKrNZqO+g2wMUC9umyesgduqJC9pwpsCJn/Mppx0lKb5hRwc6Atwo0StSiG6Cc8g2HGViU17Z +NgLDV7zmSo0L1TgJJvhdRMeYKWanS4NfF1hCe5FmejvhQGlVkNUimQ04ZoALcE+avCXI5TMYdSaB +JeICBbPFTlm2Le3cAP1xAEwkPKCcSVk8QpfrQEdCE9MwUsZIv0ulLG8eOz2WmQVRhsE2CQ2Zp1WI +fIoo6Ws/+GZCgTQU1IymKHkVdkBQi4bxYYcAU2Sbmbo9s5voJjFfSgkNWwWR8jNeJ4BRqsvBiiJa +k+gJAWXNttu6Jjo6oZnqALrSggyNeEFdcEeUBaHAbFXRBqJgi70n1Lkp7obtkqgxsWVpWgElOpHo +9QlUSJnKsg1BKHi8jBc+jr0YM9E4ARLVYjak6QYzg7IqIa7uprRXuiZAR5xaV37Xbrmt/sKzwQV8 +qbwR1CyVa2DTNiHwLQKbJf1kxpiUCWXD9OFGqn18GIXudCF744lmG1K4gilV9xK+LTy1KpoyG8xW +EwUk0uxmnVAlQy+AmbQmUQAqIjEVyEpfrml2a6GN4rLkZgJbdq2NXkAhThSGpQqOkml52CRpdRrO +qQyzeIAmc0m9RWhy3FHjJMuDJQpO2XgZDmdor02fVpf6wYsmpUUAOlwKI+jwNB+jUB8nXyEAn7yA +ILX0vpNRiF3K4gVA0CZCqXls0qAKIyV/1PRaSIxwdy5TuEXdMXjXZlHEOvo/lEQGgg22is1EmUis +05sFzQOEcmqTy5A9pNQXJ4QqZ9woPChQHRPvnQIl2nmB/KLFRjNHfUCTLl4HChSCk8IFprup30sl +cRzhEfceHF5hN3GEhY5mScAd8F6wwGcSQIkR4VqyYGDXgY6E3N6ZRmmqGJDOpVuXUEDAyHeAMzTw +IGsT2mnRE5m6WFAqVekM+uBwdyi+Ng3R1rqsLB8VC5RGXDNP7UabcFR5M5R34QeDKQfFq0O5khT0 +pLwExprwsalsBaM5de0Kmi1JZFtiF7VmJJQdhSexB6oF+1kEiUP+C1A/2jXN142YX6O3JdBF21b2 +raJ65ZnTlknawKMO7jbNPoNQ9nvKd+04iUTbOL+omRPwN+4xe4TgIi8VTN6yy+LZNQ8EyNAQw6Ey +aAHRFSPeVoRNr9mY4IrKHKUI6VhLAfzmqsAl1WQ9SvQoq1BamPL+QNcqu61q/A3F1VEYkVCvF2xv +0VI08yUQVSbRha7N6p5uqu4z9eOFpQAKuyk0KpI8k455XWxDkSfhqK8sXDDQ2dmSsAVO6hOQFoWh +bf3YImQ1kD9b365ZhHSqUOHrOdKiWkmouKtAQYJ0rhQXcVBImweXDJ2CxQZ6cj3h2CXFUilkALV/ +FnxPJFAbsQHKE/udNBwAL1QAp30B4gTwa/a2Exaip/tPQSP6Rxkn7ykhTujoAHISiWOTNn/KYYuw +/egAZc+abnLgQwMsBAGso8xLBfGUZ6v0nmqn4f3c2/ISt66hZ43tu9coppk3UaJc7UYzPUnd0Zsw +CQCDdR6iEEY/oIR9wAwzT5zUwNybKCqWoCmQxKrcluPLqCUUIwIAPq25I3eiLPB/20pX2rjkmTsB +PC+5DIDwqRkY3QnKMAUcDhLKEuPoTowSE3diFJq4Cpk6cdNJnPmyaTbIzDyFYbBNQjNPASGqT811 +B7g7nxKiLtAsexor5B8euRMmAacCJaCAcKbRnShKPwXet4JMU38CRgKn/paCQxBGf8IkaiKIksGH +1vQcOQK2/OjkrZQlJG5l5k8UqmLoLCaQa2p3cpkI+4OjshHn2o/+hLLPowcx2Vibu8XfIjW/PVJz +WxnPMql54Gx89A9VJv7KJ0Th7LymTAbF5gWCUkG1YUdRfPMMs5p/4fvvvPLhV06xmG/gDe+0RHbp +9MLnv3T//F3rnzXK++6+avdrozz3rg9+8EtfPX/46gc/+NHz+/df+ugHP/ie81c/+torH/vgB7/8 +i9/3r33wgxek6q+dv/yx+3dfO//gB7/u/Oy+3dvZV3/kpdfO9x978GHQRz/w3rd/1ue85/wTNl3v +e+/n7j7wRW//rK9Yb5MGLnqkzME1r2T3lebs8mPf+chjhPRhevRTd0FiiMedwFLtkd6h53nP3dfu +vmtnNv7bP+sDz3/WH37Rvzz+vP766//ep982/rwlfPnn9Zv887bv/yfjD7/4qbeNP28JX/55xzts ++7NqbcF+wboz7ZPDvvyip3rAuIMa75ff2TV2X/zwJds39iG67fwNHG9v1qHjn+0zZ19UHesP/9YH +z/opcvbhh+fnD57ps0R3+Jlylvzq//Xp7ar2z6ywfb79Z6o97fPtqvbPrPBbZ8lbZ8ltnCVfdP7V +u/6XWzxJPnH24vmHXuWkuDhLnr/3yoNXX3j3iy/agfJlzr/w/o9/6NV7D1/6GM/46ue/cv9FW1Iu +bz9L7IQoAAnbWUKWbX6WPBLSh/nRD2cJmbXHHCaleB0mown9x7/+b/+9v/6Ryz9/9yc+bB/23/6d +H/rAL37qz13++e2f+fjv/9Zf67/9uv/y9fd+7/9gf/0fP/21/ZO/+3N//g9/+xtf/4OfvPj59Hf/ +W7/363/p6OdC/n/71a9H7He/lZ9/+Fde/z++zf76o9/+5fatX/zU/YufC/nf/uX/8PV/+uOv/+63 +vP4PvoV/m7z9/N6PHP3Y17v83/uFf//13//R1//+N68//+CTr/+O/vA7h0/+12/6g9/6hgv5//nn +/uKf/N6n7MNf+5Vf/Zt/45d/+Rd/6Zd+7ud//qd/5md+6tOf/smf/Mn/6sd+7Ed+5Ed+6Id+6Ad+ +4Af+s+/93r/23b/503/hT/7x9//J//KN//0v/8pJL+UnfuKPf/AH//C1j3/Pd37nb/zUv/vP/9H3 +/NFvff2v/tLfmMr+77/5P/3xD/zAH33yk//sK/7N//Svfsff/sl/5//7h9/5f//mf/DLv/CL9tv6 +LT9r//6uv/rD9tOF7d9/+PGP/7Ov+Ip/EuN/8u3f/mv/9Z//o9/9tj/4jb/0iz/38yfv5/DPd3zr +t/7NH/u6//fvf/L3f/0v/nc/87OXf7V8/9/pf7gY0f79bd/8yZ/+z7+q//zsf/PT9skP/63fsX+/ ++3v/9v/5h/98vP63ftM3Xfz5v/2pT9u/P/y9v/ovffiH/sKnfuVv/dpv2s/R9T/5l//yhbzNtv37 +N37nH3/ld/7CP/qn/8/0/v+jb/iGiz//9R//8R//0R/90U/98Kd+8L/4we/7vu/77u/5nu/8ru/6 +j7/jO771r3zbJ7/5W77pm775G7/xm77+69+mf9bF9KG3ve3zr1zwbUfe55P+/c3/5w== + + + bUdDXvf3Wz2p3wlYEv/YFw6Sn/u577537+Mvv++V13QivHWmP+0zncwHP/Ez4hzfuVMn+WP+8MWd +63xZHSi3+8Ddw9nvt5z98JSINQyQy7q0FaXepQVUaRIrfuXKEV5ao1hpInJnEHHAOCCikvA720Z6 +XOIhr+/h/V/23hfe/5G7HzsfZ34BUc+5JYrgPPZaM4pt4MTIoEK8rKbgkL2nWxkEhIUkdFA3KB12 +FIdwY+pLF/UgFcl0eEAqHEAP98mNEhTftwQhWqFDuFewD1JnnfzL24cAbC0iziigtAKwqDzzzu5P +NSsV8FKhL0dVqUQPyF5rHccLDKqF5rTCXUMNdwZjKVcSn5tAJyJpr4WCIvo+11b8CIaIozOidhwh ++yJARDFDyNgxL0jPRTCXA3A+gkGF9SbSQgECzFInMpSrU6tAbS+0ymFlKToSC7RVOE/UH9RKGMoo +3MlqwQqFXrS0b4CC2XsLJAhEzlUScD+w4taswpEG9WEBlsdRGfwc3fNOjdetKItHym4Rhf3/z96b +wNdRXOnizrzJ+838J5k3EzIzyeRlIiDs6Lqqq1ebxbLlDcsL3g0yQpblBWTLi4yBJBAg7DthCRDA +mH1fzL4ZAzE7gYBZQ0hIyGTC5EEghMwE0P/7qrqv+nbXla5kyZIyahr53r6nazl16pxT2/lcHuOU +evEN/wQRj2lzUbiKG2xc7sGGrEY8/ZslEDwuHGhEesHN3WZDTYaIsh45wiFEmBKMVsO1OCKJEndd +BoxqjVr7IaO8RdJj2C1kLV1GdeWipWRwF55MdhmiLOBqdqRrxIiGYeiyXbiwrMN2SBUxmDue8Uyj +XoEthKyhb86ZMzdXg2UIlIHHacEugnBEjOwpY1R5wszrdVY+dfTWhlIK4gCxDVCS0BUm0GyWxkUj +sONwB4eDrlxF/G+GedTwSIy3F2ZT6bqLjulEBwRd64BZ+aFPfhWv8pW94XMn18GcVY2APW5etKp5 +9ZIGp2G3qpHaHogGY+wspgkqr/EIWO+Jy5NRWtESJtYEVW1taV1VNXVRGdriRohKC9tN492LVjm2 +tBprPdSRvNCxqniugHHOlORhAgZJGRRmWAygEbUIGsa3tC5obKlrXTw0nP6LGE63v3Ua//789Jdf +es7cL7347E+ef+q5Z594+qnHnnj8kccefejhjfcXh9Of/fSUT3G/cTIo//ff3vRXX3ryr/7Pr6cd +8skDL352+9Of3fLUZ+se+PP9999dHE7j/q9X8fekl1969u++cu2wr94/7F9fcSb9HmPMLT9rf/1X +7c+89tndd20oDqc/3nLCH1/i3xdfeFpE137+n64d9k8Pf3G3V79/xR9ve+iTmx/87Kq7P739tluK +w2ncH7xw3B9e/N7zzz0Zjr76S/922bB/vPF/fXXjosPfPmfd70+/9ONjzv3w5ptuKA6nzY1Xnnlq +87/tctGXqy4c9n/wys3R5Gea1/584drf7H/om9dff21xOG3u+9Y1gRX/9M+n//2XTv/C35/2hb// +4deH3+1OeMwZ/6SY8NjVV1+Vl7fHMHDfeP8D999zz913bNhw66233HTjjddfd901V1995RVXrC83 +bHz55VdefnnLA/ffvX79ZevW8S5HGefy2MOPPvLgnXfeetVV6y+//NLLL19XHF7+pQ2nS0bMw+Ir +uOrj9rlfH1a8Nn302998eP2wbTvxPTScHhpOd23HB5IhV7Khpq2tsWlJzczG1YcqZ+Ba8fvuu++x +i4/ecuZum37w7YfOPeK+Mw+785SVt56w7Iajl+C+au2Cy1bNv/DQud9vnnH4xL1BD8rnrjjssw07 +PnN5Gz5feXiTJph3bvNM3Kc3TDlp3sTjZow9enLNtzT9O/ceCeL2Zw/E39+/fm85/fPMM8+0jQmQ +IImfnP7p/SPMK3hy6qmnNjU14e+mTZs+++wzQ7958+aVK1dm0n/itrPOPPeC13/960dvP/qXr960 +/ocnXXvtteaVIj0SfPup60D80oMX4/MvP/jg7Q8+aD78+HdfveTd19ZdfvFJDz/8MMg2btxo6HG9 +8sorphhI+e00/auX/PLlG0/Rc7f33ntvkf7555/HX5TZEJ9z5c2gN/e7r65bsGABfr3jjjuK9E89 +9RT+Iv3X3nmn+Ir58PLbb5900kl//vOfb775ZkN//fXXP/bYY3jy0EMPnf798wxZ8T75jLPQoO+/ +/z7IDP111133wAMPfPzxx3/84x/Xr19/2tnff+Xtt9/+/e+3/OIXJ59x5qWXXvrhhx++9dZbV199 +taFHRqD/UF8ffPDB3XfffcIJJ6DMxx9//F133fXee+8hcTDzpptuMvS33HIL6vuevv5fcv0uufD5 +nXfe2bBhA94FPRJHwdAo1+gLmV555ZXr9XU5TOu6dSgPCFC1l19+ucifc84559FOLwhPmn5lxdew +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 +P/eNX9z3ywf/+KvS176z4d5r9h6/+buHbrhv/I7n3vbo+dEz/7b/xnOX3vbQ758jjfHlR55P3fbY +1372/T+9tP21uzc8dF3tky/+cmHhzz/99avXn3l68FOPzt/7cv9Xn2+67t6Hf0px/eY/e+7Tj/3w +/K/s17634am/rwBvFhZec/rV+dHvveXMrwfvevHQPzx8+ecfRs7gJ77z3PMnXvvJhkdvO3b05oeS +7z+z5733lL/3nt1/+w37b+6q/fB9b73/1fFvvtTyycf3X3sPtefBa177+f/57EflDz/2s3c/9ad3 +PfWnq3D9+E9X/vhPf/3kH9/5oz+8/fuvjp55qeGWx6ref3rhzw/89meXvPyP//XvHv/ZO574Q931 +D6JMdp22rj5tvfu0+a6vG+/6qn7VncZVd0598oHXzr/t9/dv+OQts2/5/vm3PPy7jhsfzDTiPP35 +Z9YvPvUXk5/6Xtcdz1720Pm+Lzw5/ZnvP/Tsr8Hk3/7hP8499+vUzd8zr7pTu/JfUf4/fvcn57/5 +f7/6yMTRG+/d/YF7h+5+8fKHz0/e88LBG++3rv5a8gPfaPvofbNnfnXqvleO3vHT/dfcjUJeOf3f +UMsvX/l9zXtPJz/47fbbnzv5nZdnz746d+5V/J24/5Wur/y06aZzFe89/YMXfgPK33//2KuPXo0P +//abVwav/0LdB+6q/dC9yRsfSt7y2P6bHz5w04PN133r8PX3Pv3L3/L2v/bH5//9dMXPrtnw/A2X +vPydd3/9kacu/eezjX/3jeTffq33Y9956xceuesHv/jza8vDlxaWbuUx1EumZMX9Sn6l3eZ975/S +Y9UFTumtTe9MeBuJvAPzEwOpmd5eGXayY3KUQs8tmUuocHvx3OTqZSNRAMPqbqcUtJ05WmNlqbHL +paHWjobqqqn5SbQ+BqPtKmqpxunpVP8MnVB98NLUDGzzEq1WhCkHLu0CMe+Gv3mXi5LTdHuQn4LN +7SD919Wfk+2XE5a5OJOYoDnU8m2Tc1u6dO97u3Q3nAlzu1bNKG6YvBRcHvICsn+0rKwVSOufPAH3 +pKwVCBrCF8TgsjI5ffjTqKvGpwbHLhudXRoLdXHU0sgaJkfnRvvHD833DwEwc0vCGbRNVVMzk6kZ +3iIpn4fVZcHg8uNL29o/NDo/u0wdqioln4flXB9eOWpKTt3MjTrPpuXM05WPSzm1dTXqJP2zhFya +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 ++RUeD2aOWkDDa20LaPOXTPXuZ5FE6WnvODdZz1xjwW2NAW0ALR+uoNak2GLH8M0mV3g8mPlwm71G +k05k+6JC625md967rZi5MbSM15PN6FhDCK7LOjbgaZfsjp52fbN93PJJXdNu4Ma2carriVDoE7+e +ziSZz9w128bZlj6d12wbZ1v6dF6zbZxds2vda1Zz3KHmuCz7Zc+FYP/qH378bNQbN5OqjdvfnNQ/ +/aYo8jI0dVGVVeaaXtavqqwoXZVVTVEWRdHj3KuyqZsmb7K8qgM70Xc++Kr2eeOLEGqvTwpX5bmv +i6yoBcffBZ+F2jV1nnn9r+ztPH39lxbuXvt4uZdXed1r/O6q3p3tzl60wt9z16cqit5d1v3K5XVw +hZ41BN/zfd3cV6VrAo9e9W4ClffrssjrKpS5r4qco8zKkDtfVkVdFK7XBnGuX4fG+9LpP1Xuex+n +FnJem9doV1yR62OvhXxfW5mHsvD6T11RrV7qebS1ZalN4V7jD90CuaR7NVmf8uwmi4ulFmryfu4b +34TSBd+Urg3CQzd1P+hmja/zwruqSCzkMqcDLsu88mUmGN7LhSorc21mWfoUSKOj1Q== + + + c+mzINTR6fPQLai8n+lOLi/yonbOe3vossxcFbK6EaqIuPqVziCrfOUqvW3d+yUeWttfVk2duTwv +tLm93SLBPLg6K6tamyec3F37vv6mzoRstSuCYGptWVXXlT4rnd7N3r+q+nWd+zLXQ+pB9IdNv8qC +9qtpCm2wznZ3pfcVfjcu91oslNwuL50wKdPZc76CyfuFfhXqsg4+VKG3u+iXddkUWeZqvV3T2BaE +ul9UPohqqiDS0O1K3V+v4rXXmef+oRCW6jBEIfpPWbBSzR7kIiUvrCzswYPru1wPJbqrywzkyvuh +yYS6+rkJehTDJYiwFIpktatqqLIMUK5eMdcBJtCtRSN67CsTWb4+e+3BzYvLd8+fzyvx/TdvXbt0 ++/LyCvsXK2oi3zm68IjZDViY8KHo675eO69tq52wpilybR6fZcJdo88WlOtDPLlwJFROr6Ij8zra +3OmQCpfpzPSeucsN82udLqT3NmhTCN9Erk0GmNMGVX12vWqEpcL2Kje00dkLITyEmufgg04nLzkK +HUoVyaYS2Wh/Mm1m4zJBiSNo17X/hWAzzrEqtHgos7ypXKElQMBKeCwGqHuJAmrBCJGr4EImDC9C +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 +yLs7suWLVeV23d+/d8+JM27RHT77zGJ25PzXl3a9cvayVI4du1659uAsP3xw6OLzlw7uXTx0/57u +VVeLz93ad2r+wx37Ti4eWjh6Ptuz47Vbh+du7fxoz+1Tlw5me8qjR4v54oX5bM++uYq/DYsvnX17 +cf8rF+bnF59ZuH7zq+HNI8FW1m1s8XD/+OLxQxfPHKsO3Nh/o7DP9s8t9u8vvnr8yo0h/PH4z3Bb +Fvacf+u9A6+ffrUull7r71x89s2bBbvk9t89Uuw9/M7bpw7prfulbvPyM0f2nX20hj90/733ivfe ++eiZ/a+8uth/5eVvLF0vn3n/vfv7z371G28feP35Z/LFnVeO5bv2H3jh4p4Pbn39xIEb1dFnDx8o +bzyrTTi4FL7x+oUjiws38mcWrjSH37RHtE2zO7x1+bqe7eQLhy7ueeer8yeP3Ts2/9oH11/Ilq+z +5xfdvlee/+qrt3QE5w67q8Uzd0aWPHj5w2P6562DIy/86rmblw49f+e9Yr5++e2v6jbh/k53zD/Y +deVItnx4V73nxLH++9mVs8Wx7NiJF76+75ldR85zf7ew/NLrtw/fu7Hz/PxrVw8vDFY7u/f+fHX5 ++ofzZ07s33Hgxtez/sKV/vuHh8++bL+FfkYAdi+9oo9v5Pvf2n0w9+defOGtkQfknxXcOHX+0M57 +O669vOPBzlcPPX/73Es6qsWvGW7uuVVfncvC1duHhCU7ZYa/feobbNqd24fr0dXevn344DW/98zi +Szv3Xl+FacWFPbeen9uz/+yObMfClR39U/v33rx+es8Hy3effWX3+4u3s/zS/PMLV+686OZff+bF +ky83V/a+/Qihh3upB7xSn3n+zPX9e99943J98tSFZe3XrvkD17PqVnXqDX+1emP+w0vZ1cs3Tmcf +PHPl/fyle2c/yN9/6fZZd2n/C2/lC5dfOZ2FD/a93nxw+RuvLhw7cLu/cPSdwG3Cnbm7z41hGlBz +C8vP3Hl5/vSDM++GO/s+9Id2vP1OPV+81D+WXX3nytVQH58/Gc6E86erstp1Ocy9dO5Dd/nD507n +C0ffelt3PcIOH7zdXLn4zpJus//ei+eeXTj29SOv+DvXFs4Mb/jBEOoNEdS7/Xl/8My5hReK69n8 +tQs39x269Pby9SPPvfG1cy8/d/bBrbhVxz7cuzh2mv7Q4TcPgAKnX3qw99H7rTz5h18bfXK35/ja +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 +km8Vfo4i55CLtjlnGz8nYeP6+Pl02EdPBD/jVxf87H6tsfNdULSNWlPh5xC4vY2bx89R5OzyLmvz +zzWup9C/9Hjwc2lpaSjfRy99qF9tHjkfbht+TvsMW84/p0XOh1vnn//xJ3+1Se/65ld4PPg5ah8N +r7Xto81fMue7n2kSsTeGn2N7OGStG8DPDSDnFuLnwzWjkx1DP5tc4fHg58Nt9i9NOtntiyitu5nd ++fAa27gB5Hz4+coPWUMsrstGNuCflzSP/nl9s32c80ld027gutu4MSqb5detu7Gz6wlu4ww/t2lj +v5jXDD8/Kxv7xbxm+Dm7vlDXDD9n19N8zeqLZ9fn/tqx49CtyzQV+cqXzx0ZdE/RJyu9U16b2Ggn +62f29SJNjmJ3nQMH5i9denBzpY3Vo+Y1sV1OXLOnxXon7167eu2WPqT7TNfePtkTa+dahp4Ldc81 +/bIX+p+ZzjpV9jR21lk4cHjh6Pzh8ycOndDHty5cXb7MW997Y5ldP69N+eDemdtv3L4t2PmObXfq +pqahTtU0tN2hg0676c4qGGu6A5z9s37DnZDX1m7nxebNeH30v/yqrkk/TnXpD3/05z/73/+P7yV/ +/GwtJQCBjV36MH4+3KKxH7svOHyAzS849i6bWTC5LWOfTwJb+5qx5w7sGZYcefNnpte2nzUMnTUM +nTUMnTUMHW0YOmu1PesXOusXuo7kLGeScyY5Z5JzJjlXSc6Z6JyJzpnoXE90VvXT6BCcf3D/9hHt +6slbo9/3r1670snzl5tPTxTzbs8VvSbp+RuBsQ+Bs3/w/Lmeq9Zw/RVlaa6/f9jQ1z/6n/5RR7D2 +lQT75M8+Gb2GYGN/OwlsYzftCNblTSd9fan1teqjVVDDH1p/v8YP7Rt86Uvb717bc+Ba/LPenvnT +B48ercuFZdik/da/emtntn/u5M4Li68c3rHzQPliOPKyP9R/e9e9uTPOn3vp7sVm+d25pfB29tFi +Pffc3it7r57IX9l/7+yd54rFD1954O98uHCvuLzv+NJC/40r93ct7riwb+HY/g/f9+d2vbK4cPlm +8zXdhk/enD9z9tWw697eXdcPL320MH/wyFvXd8/XF+9c3XXg7KvVrv0HX7gyf+yta+ezr+++dDVf +eLUqsuVTbs5dOvrqqT3ZkXd3ZMsXq8rtur9/754TZ9yiO3z2mcXsyPmvLz0aR3jtwVl++ODQxecv +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 ++UYLfHe86W2XlK43/59R8/4WOfevNebeY6qI1mYJfvPwdN15vjveandZ8o+a33BihDVbzmbuOC80 +X+ylr95xke+Ot7QhK7zECBWbLIpouggl8cakDl7uu+Pt63mrK7db5H3K61v5uaX8tnL7RV/NW+W3 +4+3dj1Z5Xzl/6fbFK3d4+UGMR7Y73pBI78HLUdSn6sxDwA8UA5HOjrcH9M6ONwe+/2/Bd3FyySrL +NnPqTRs6WP7x/MzZA7clttkiV9/wx2oZf2y+VkxbEj1nzee2WP7hlrdbbxGqbPp95czfG2t/p638 +XaPvIgZsj28+z3hv1Rg/LJ+3fnarzULlDf9lrv0vbcXvlKW/Uxb9btfJrbfv3pK/+N+aX5b7asUs +Xyx/dXOCmfFfxurfa0t/Ly/8rTD3t81n0Z704d8NKPP+r5+e8qvec7r6YnmrdbK+7Pfqov+S5v6u +0he/rTjjt3O2zQK9NrFkqfG/+ueYX1V/N8IXy6ss/ZM8//dtl1TrurxRxIe/rzzlKRDP3vjZP0f9 +599G/Mdfhvy7a+jvfLHc+ObP7lm/G7+azgl3mdHi9Xkv4kedt7W/DvuPP7/+73985Zd/e/UJXyxv +/LVS/sMnKk1+8srNKyfOH7t47cLOH7b9dfB//unVX/7h5X/7nxd/oQ+t4Ivl/eYllnnvN0+9/ZuR +iwbxRu48uc0fB/zyD/3+7b9f+MXvU3/RY0qsL5bPWf5ljakVUFp5VMnz1899f+bg3wf89n/6/tt/ +pf/id70fr/Rq6dmLP/fH8kXjK79dHqV98pVf/m9Wso//NuUx9yul3/5qrD2Wf/dF8odxxhsV/9L3 +//2pz2+U18t1n9z1y8X+/BAuv4XFzw6WO1juYHlxwvLi5JFVVaKbpQKoU/oUV09unn/dq3///iFS +pqb2mjZtanp6+oABA3Il7t2biLdt23nsxM1u3RJefvnlUIi/P3rmwsUr9+7RxHOggvXqlcKJj/xw +5vKV6yD++WcKCQkJ1lfiIU+CXiHW/f/4lduO7pCvv+S4i/BceSbHrcezrnSOW49n/l9y3IKCR/xz +bsGXLuDl4LeD38ULv4uTK1ZVjm4S1zfdwe5H++JY2T/wZX2FY/Hy5as2bd518ODh48dPXr58FfE8 +HdtcONZnZGzYuefIyVM/Ab6DEPu+snv3vjNnb4M4uC7BL66rgDgUXYVfger4qF+Fj45WLM7Gao8f +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 +m9fFxalnT+9OBMt32yFV8+mx61ce5WXIie0XL8SLZx+OXbt0dbJ96dPPZ9+Fx16+2L726MTnT0fv +nTrGJ8+s3ORD10ZPLw5dnr50bvzG0rNg8vhpeZaYMDarPr83f31yfJUfG1+Jpx6aJhqmmRoeL72j +tt05PbFw/tmJkTs3t26O3H797nSwcmYsEic/X7ty6dSweBPcvHjuM379jdgsFDm29PYm/Xg8Vujw +1SdrixOn3r8QI9GnT09QNWr7DLspPw6tXGdTZy5cPX/r+fHP2acX1ibE6VOLd68cG7o+h/rZ+PK5 +extTW6tn5kZuv5oaT0p7dHF7RC+9ezvy4Na1k6OrnwXt8ZX2y6ms7cvmU8yfAsHw7CV6vMqvPR4e +4/LJ2dOPCw3Ej1Q27s5NnNk6+ebTkx/PXJ04tfHkHA3V5GUjm+fXo1cXAvVqY4Kk5EwYhE/vfg6m +vd+YioqlPd2YGnsjLz6YPHfm4ruSpIn58+unLpy/9uhkcHJ85WT77rWLa+/un3+9vHn80vDLyY2A +L46cGl95f5aN3Dt29s6n8crFp7lAZ7ykBq5ED049eHft4vOZpejO3fll4tfQyOi7QK+p9Vd3l4Pp +2ZGXYuzuwufB62OrCyp6HZ5gn74+PaGi9wuv2NTridlAvb5yL3699PnV8ZujG+3xG88UqlHvL2x+ +UpE0UF0YXz72/tOR+x8fPFfvr7yVEyefPotGxLmh68FNfvWe1iNrb3V4b25Ghzf0Fp+cPv6GvxTx +Q/qx8YQtPbn4BFKyEa8sPJulaq5tnX1yfPzmZ9cvyfdvxh9kFb7OqGZoQj1vj8ixB0/GT4t3wcib ++bUrE4tPl99d/2Tm8pNPP3n0cd2y6ubbi5OV0ZQTUw9HIQL3z328mPcvbfnby8WWn3r2aueW24F8 +M/9knP560772YSQ8nje7OG9WJkcWn70QC+L85cm57efDk9eW382jS3dJ9mci9X7zxYq6P/1hM7g5 +fu9psLx67p66cG7mo777+fqzYPra84cqmp5akFfYwvbFG1vXT5DgbX9C6vQhNDSN9Mvp4sR6dOnk ++PmXYly8WLp7fHRt6NRH/fj2xHzeNipobnHkzcvL7ybPxOrsxPCnK3J8YnbsVipNzx5UPoWGHr29 +zai71wLib3thaOvGtQsl/i7fGT9/+RwXC3zuZT5RJoYVv2iVqJy9NzVyf+H9e5KXhxyzRQXDj2eW +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 +e/fmzZu3bt169erVt7/97Z3n2ne/+10i3tzc/LVf+7U///M//8u//Ev6+Ru/8Rs/9EM/NDEx8U// +6T91futb3/rW9PT0H/zBHzg//bM/+7MnT558/Pix/q1vfvOb3/ve93Zoz9///d//+I//+MbGRrGF +VNfO38q+Ozc39wu/8Av2LfWrUwvrr7/4i7+g/n5heEjccNL88R//MVVRf/6TP/mTP/ETP0GcJx7W +PyVmKqW+8Y1v1L/7R3/0RzMzMzRexHPnt4R51b/7N3/zN1EUTU1N/dVf/ZXzWz/4gz94+fJl53fp +IckG9Td78nu/93v2W9QR2yr73R/5kR/JaIj/REMSRVUUHy4uLtpvZT2anJykn9mTP/mTP6EOkhyS +RBWb8Xd/93eVLlee/MzP/MyP/uiP0h80LiRRXzR7EUPsONKLpJfk0Dlk9ReJ3E//9E9nb0l6qV+7 +fvc73/nO/Px8vSiSwyKHKy0kgvq37Iukl9pPVRMPrczTT+IhcYOeF1vofJEckkSRbNDw0XgR5y0P +Ky8LDFh6U3hQeFj/Vr0kR+n1Rzs3+4BezZrq6qOLEy5+Vbnaf+uE2eW+dcaW2aLCWnc239ByQQ+x +zi8fejNGwnphEuaL/WkeHB1Lpu+Qq72zZMa8JVN+/cO0ZDq9Olkyv/RLv1Rc9//6r/+abINiR5yW +DLXZLkP2u/St+/fvV+yKTpYMtcR+95d/+Zftt+gnlVCkqVsyxe/aV/1bTkum8t36t77obMlkLzIG +6t/6wlsy3pLp+ctbMt6S6YMlow+lJTN9++bcg4mJuTvv0ee97FZHMfDiNZkn2lggNQsmJ8AjEOH/ +BrZLFJUtl2sL25W5dunF5qP/9rde/Dc/nz95ujr/M//8W//r//OP/re//if//Hfoydjcxn/9z37n +1//df/q1/+tv/pd//59+///+3m//h+9h5qXzL52F6Vz0s7DBLGSYdCGmn0jG+kjMvkNxdcPYxubS +xjfm5+wFDjQZt968Wl/e9BEiT3noKA9NhOhLoDOPciiJh4dZcTYPHn2pFeff/u3fvn371rq/O1N+ +61vfOnbs2NTU1M6Uv/u7v2sD0fRHhZK8zIyMnM7Lly8T2Y/92I9V2vmLv/iLJ06c+Nmf/Vn7nBxl +IhsfH6emVijpu7aub37zm9/97nfpD/riH/7hHzr7/vM///P0aRYn/6mf+qkduPSbv/mbQ0NDRHbz +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 ++N3/F36CPzJ+sLZWOaiG/vp/Wi4KXw== + + + diff --git a/docs/build-release/_img/index/logo_xamarin.svg b/docs/build-release/_img/index/logo_xamarin.svg new file mode 100644 index 00000000000..44e2b78c2ff --- /dev/null +++ b/docs/build-release/_img/index/logo_xamarin.svg @@ -0,0 +1,10216 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + eJzUvVuPXseVJfhuQP8h56EAuwck434xUA8yrapRd9oyLLvaNYWGkCbTEttMUs2L3epfP7Eva0V8 +mUlZmJmHmSqUStp5vjhx4rova6/9T//b775+8vnLt3++fZKfhqvPfvZP//T83e3Nh7fvfnml4qsv +X7/++P7DOxH9/Pe/uIr9aZCnPv9yfONP/tvtu/ev3r755VWKT6P99V/k9z//9e2f3767+e7q6w+3 +r9789fYXVz//hfzxD68+vL5df/6vr968fPv399/k9vT93779Bd+92vr1zYf1xHwWn6UQ+1WMvwz1 +6vPf6CM3b/528/79q/+1HogtjyzCX739+Oblqzff/urt/1zdmFdPYonrr2P9SyjywP/x6ve37+89 +9TTWWUYJdbapPwlPSwuxjDRqjG39vj9tJbQ+ayo5RW3s4hFp+ddvX3y8u33z4Xfv3r64ff/++dvX +b9+9/+XV8x9u3lz95ubb9Zebq3+/ff367d+vfvX65sVfz9/8y9s3H9azX99++/b2j18++fr27tWf +375+eT7y29vbl7cvP/3g51/Wb/7l1evbNeJ3Nx+uYtYJ+PzLmL751cdXr1/+9uPdn2/XZOTUVJ6/ +0R7+8f3q2uql/LvK+zdf3i3R17cfPqwRWu/Sefz9v/7q+Zr9t3f64BLq//786w83Hz6+t+/5hT93 +fv968GnMvaQUSliDNloTSUp9jjLLnKUVFbQwQh29hpZmufr5r17/9eq/xBC0zf99PZFaiSX3VmZP +bfQrmaFeWlpNlRJyHksyUi/r73PUkVfz0srH26vwJKbwJMWKttaTNY9U4+ht5Bhqld/GXOqoLY71 +gj78t6sHT3J4sv6XHSk1zBFCWF0ZpY2fJPn583+da+nWJ/5/R0967qmuTveUWqryXWtUQgohjbg+ +OM71Y1lA8hljPEklsSexzRDTemot3JaTDNKcsdSUYo+rCfms1cQapjUAObS1uNdO/OvVv767vX2z +2uv1SRpsbZS+JmCs1VFqiTJLKUfpXF0vmWMuQQh5rnFsY9SZpbGv3t28+fZ27fb2pM4n8fisMEuM +fc65xmCULEPeQpdpWVPf5trJP//d57/9w1e//eIqjXa1Vg07kuXBtctSSHm9Tz5ijePq3ExtNak9 +WX1oa7J7azOl1dTHd9+/vr2a6UlZ41vqbmuNV5ul51pTD7rSZgy5rl7ImhnSeq251zVLPYf1hvqw +tatjyNdyXZ1bSzS39V3yhrhmrowc8ljTJh8qB8WI60PXil8zs/bIX3/49btXf1vj1NO4muVJHxcr +SjZDkxmPdcQms9aa7JWQW85rFGVRjHU+jXXYlF7TCEMb/f72Shfp839eI/ibfx5X//7P4eq//HPY +0yA79D9+f/vtKz2212n6344pamt1rVnsI66NGOVbpk13Wgtwzp6vfn73HjuolScpz70J1vLOcy3w +OJpOSF9DslZZnGkNtPRYfvyv795cxdTXwm3H595f3zKG68VttTbXIT502eb1P2s197Vq1vqTxn5/ ++/JqzeaTsXZk8caivrmWsZ4sa/xmTPbmdcxerU9Zb672Zj3u3r39/u7m3V/XkbZ69bSvn6xzf715 +1v+7Z740+4fbu+9fr1tK75K1za6e5Nme1uNf8eA6nPUhfVmSxZbWKVTWGn9SV9t9HK8vuT7toeey +ujnqmvH1OevYWmfb2tyyFrzRfenc/u3V7d9/efXbt29u/Tb4/N2Hr+12XEdEsH/6n37/8fXtuz++ +eSV3iX3ItOvgN29f3r5ev9hN/MvrG70F9H/j/qc/8Yebd9/eflh36tvXHz/o5T/4lnXlXN/8cCu3 +YLK7qH/zq7Uc36x3vfmwev3Nq7988zdTGr759sMv5YL3znz1/e2bP7z9N/2kJ7VkGVD581I71oKb +a2zj0H70dbKmyu7F/U+88fPXH27fvVkzhLf+v/+KL968/MaVn9uXF6+p+hp5CUaid/+DCH9383rd +s7cyvGk1OeKQf4So/732ERbX1fPXtzdvZNX/bt3NX717tQbxl0/aWjnr2ny6FmkP9j/R7/B/fffq +5b7Ce7oa9g+duqfDH177dR1686dKpv5Pb3JQlfRTJD7Uaw2tr3yDdbVUkue/ORSM8PQ3X8u3rWF8 +/vZOlvN71eVkqSxt4vXbb/2v+z/0b6uJj99/9rP/+OxneT77Hx/ffrh9v1qUs7s9+/bdzTpyYxrP +vvj47u1Sh8LxxJ9v3t8++8ta7q/emPTln0221LNX379/tV7/7OXNt9/evvP/t/7+7MWrd2uv/eX1 +7f989v3tuw/fvf34/ubNy2dfv7h59/bNs2+XjqVtv779y4dnX32xtlu1tkWw2tN/XxP33Qe+Uh/F +f9if/vxxST88u33z8ub9d89u7/T/fVjq2+2zdYa/vJUDbDX2/t5L7cdvb5+9fLtU6qUUX62j7dm/ +v3x1+2598furZ++/v3mxhqOVZy8+vnt3++bFD+s/2rM/v3v719s3f75Zqt9Skp/h+Wcv3n7/g7f5 +7uVflpL55tWb9fOenq3xf/Xi5vWbtx+efffD99/dvnn2Ti+Y9cOXz+5uXki31rCuSXr2/bIX1i8/ +vn/24e9v339cg/bq7btnH75b+gf/6+bFxw+3z+4+rr2Wn6ns5Ys1/9rai9uXr16/vlktrW3FX6wO +3d28f/HxtfZoDPnj//h48279Rv71u5vXf7F3uPD91VrBzz7X9bCa+tze+Pkxm5/b+H7Or/9cPuDZ +5188e+5dePaF/vzZF/rj1coXx8+/4O++tKe+tFd8eTzzJZ/54sN3z36rL1zNfGU/+Mp+8NXxg6+s +T1/xd3cfX3949f3rH5599f61rIk/4oP+aD/+4/HjP/JX/25//MN3b9+t1XK7LIM3a6m9f3ZjL77B +99wcv76xV9+wkRsdjpvbZy8wHLf281tr/Xb/eDV1y9+9sqde2VOvjle84jO3azje2Avf2uNv0ae3 +xw/e+iP83ctXf3slAhuMj/bTj/amjxf9+cjf/GB//qCD8QPEn/3sD1/YiVz/8zd/eL9u0+MSzXZf +ffHmxVuxF3959c19y+sRU+w/nj146tmDn9lt8of/8zN9yzrb8I6rP7z7ePuHpd35NWEX5urR79Y0 +fNCd9dvv9W/jm9+9/rj++K/v3n78/ss3f3n72c9+bqb6tewN++OV/nVZ3CpbO+Lvb9/9df3nly9v +b7a5+PTm1fe/+AeNfv3X2w8vvrvfrEv/nzT8b7cvPqyj+H8tDe+rP//39R/SitigayjWwnzz7fpv +PvNTGlzXzTt8//qt/if+/0/5/a9v/7I6vxsw6Rdv/nb7+u33R8P23E9p8Xevb97cvOOgYZbWDfW7 +mzWru0l58PbDn35Sm+ts+34Ni7ZyOSn/8IHjTz/pVTcfvlvGxrqV3rN1+8/dc/kak/2kxfTD3doG +r97fsb1T8ru1nF69eH379Q/rYvlJA/z8Zt3c6xT4/rtXL65+9e7j+++u/vD27Wu2/sjf2fPzb/on ++eVPHBZRLb96Y+Pz8K3+wP0XLq3afvP/4bfxV4+9af3x/09vWSqajMxj77j8E9/j4v8PvgWTvLSO +dSB+YuP/6DNf//1mndjXr/78DzaqDPNfXr15ufr99cdXH273Xnp79704UK++/u7m+1vdrnjy691k +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 +fAY4AswJdcLQaB3+NBCiJBlXnTBTKSGsDfSTWGWLEmt8BHgKUdUBHFW2Z+1sRVdAUx+Zon6jKUq5 +PaFNoNWqCmVVmXn1c9d/cWf6i2W/2ox7utFswweokVx7/K8Ov1mu/Mo/5jfu1MVO/2I5cdOnf7E/ +WJhX5+XU54e7PWny5HUNvv/L3vvC+z9y92Pn46o7ue0v78z0JS99zfn9Lzl/+FXn917rS7Bv0o9e +LPenuJHT3qvosxz+rQ+e4a348OErtrxPwBa73bs/dgFZfMpNi8dbI+3KauTvymq37846WOWlP+i/ +DzSYxngf/3ov0nEno051nQ7/+r4KKl2xham/vP+gHnYfZmXtvvDtVAYshd4I4QgqCAQOI4CHe6/O +qV6VaUK+n6WH359dEjhchv4Okmn6UkC75v6l43HmH33VM7k0y74DaPU9HPbP8rJ8z/n989fOX9z1 +Dx6/OG97XYJ8wHrRUmSR0s43rkuyw8HTbNBqDrJetZRq6sKH358dBO6P37m/fS39mV0cu/z45dGR +1ulacpGqYJLzcEEB8EemDRr7GvUJqRKOJ0gqMDWaMub0azlyoYd1drOglQhNefsyyu7wX3X+w2G6 +/tcdgjH2Z5+7rO+IvLvOWsovLv6QH0kDKV6hCCbvA/pNH+f4U13JkWfp7oQHO/Qw+ImPJ9foYwbf +Rwm+X3dZv3H4b//8pKfxOdd+8M7nH3zCVtWLo71+96V3vet9pivvPvjw/XP7o5njL9ovWFDvepc7 +tqWPpJ+7/8q9j371S69eRH7XVXok9vyDl1576e79f/3jd1806/u1VXjzPT33ysMH5w/7HS1P8uXw +6ATozshU9n13X3zp468+kn5DQ/kn+bK76ZevvjV/o8e8mfQT3tqN5/Tq15cb3et10u/mP4eV608I +fflLL772keuEvuD8pQ9/5LCu/5X+6zsvfeJcRva73vUl5nS+fDg6rn53PgGXvvsF5pffP3/4RXdf +Pj9x/SPAzLe0yVva5C1t8pY2eSra5Dbs5IodZj/1Sexj9ybbxy+9yrO9eDLb+8guBqy6ZLBwO9YZ +0TRKXmEtjWreQgZsjupipYZadu++HSd7SQBf/iSUm0bURAx2KaIEglv346Oj6BwYyIBTdEaV83IU +S5OUL8LUAxRpFFnECXv86fC9Ybi6G++srkgSEbBOsZ3Y59k+PiuEIy9H0oYBRhHd2fjx+EzjiGez +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 +z3vuvnb3XTuz8d/+WR94/rP+8Iv+5fHn9ddf//c+/bbx5y3hyz+v3+Sft33/Pxl/+MVPvW38eUv4 +8s873mHbn1VrC/YL1p1pnxz25Rc91QPGHdR4v/zOrrH74ocv2b6xD9Ft52/geHuzDh3/bJ85+6Lq +WH/4tz541k+Rsw8/PD9/8EyfJbrDz5Sz5Ff/r09vV7V/ZoXt8+0/U+1pn29XtX9mhd86S946S27j +LPmi86/e9b/c4knyibMXzz/0KifFxVny/L1XHrz6wrtffNEOlC9z/oX3f/xDr957+NLHeMZXP/+V ++y/aknJ5+1liJ0QBSNjOErJs87PkkZA+zI9+OEvIrD3mMCnF6zAZTeg//vV/++/99Y9c/vm7P/Fh ++7D/9u/80Ad+8VN/7vLPb//Mx3//t/5a/+3X/Zevv/d7/wf76//46a/tn/zdn/vzf/jb3/j6H/zk +xc+nv/vf+r1f/0tHPxfy/9uvfj1iv/ut/PzDv/L6//Ft9tcf/fYvt2/94qfuX/xcyP/2L/+Hr//T +H3/9d7/l9X/wLfzb5O3n937k6Me+3uX/3i/8+6///o++/ve/ef35B598/Xf0h985fPK/ftMf/NY3 +XMj/zz/3F//k9z5lH/7ar/zq3/wbv/zLv/hLv/RzP//zP/0zP/NTn/70T/7kT/5XP/ZjP/IjP/JD +P/RDP/ADP/Cffe/3/rXv/s2f/gt/8o+//0/+l2/873/5V056KT/xE3/8gz/4h699/Hu+8zt/46f+ +3X/+j77nj37r63/1l/7GVPZ//83/6Y9/4Af+6JOf/Gdf8W/+p3/1O/72T/47/98//M7/+zf/g1/+ +hV+039Zv+Vn793f91R+2ny5s//7Dj3/8n33FV/yTGP+Tb//2X/uv//wf/e63/cFv/KVf/LmfP3k/ +h3++41u/9W/+2Nf9v3//k7//63/xv/uZn738q+X7/07/w8WI9u9v++ZP/vR//lX952f/m5+2T374 +b/2O/fvd3/u3/88//Ofj9b/1m77p4s//7U992v794e/91X/pwz/0Fz71K3/r137Tfo6u/8m//Jcv +5G227d+/8Tv/+Cu/8xf+0T/9f6b3/x99wzdc/Pmv//iP//iP/uiPfuqHP/WD/8UPft/3fd93f8/3 +fOd3fdd//B3f8a1/5ds++c3f8k3f9M3f+I3f9PVf/zb9sy6mD73tbZ9/5YJvO/I+nw== + + + 9O9v/j9vOxryur/f6kn9TsCS+Me+cJD83M999717H3/5fa+8phPhrTP9aZ/pZD74iZ8R5/jOnTrJ +H/OHL+5c58vqQLndB+4ezn6/5eyHp0SsYYBc1qWtKPUuLaBKk1jxK1eO8NIaxUoTkTuDiAPGARGV +hN/ZNtLjEg95fQ/v/7L3vvD+j9z92Pk48wuIes4tUQTnsdeaUWwDJ0YGFeJlNQWH7D3dyiAgLCSh +g7pB6bCjOIQbU1+6qAepSKbDA1LhAHq4T26UoPi+JQjRCh3CvYJ9kDrr5F/ePgRgaxFxRgGlFYBF +5Zl3dn+qWamAlwp9OapKJXpA9lrrOF5gUC00pxXuGmq4MxhLuZL43AQ6EUl7LRQU0fe5tuJHMEQc +nRG14wjZFwEiihlCxo55QXougrkcgPMRDCqsN5EWChBgljqRoVydWgVqe6FVDitL0ZFYoK3CeaL+ +oFbCUEbhTlYLVij0oqV9AxTM3lsgQSByrpKA+4EVt2YVjjSoDwuwPI7K4OfonndqvG5FWbz/n703 +ga+juNLFnXmT95v5TzJvJmRmksnLREDY0XVVV682i2XLG5YXvBtkhCzLC8iWFxkDSSBA2HfCEiCA +Mfu+mH0zBmJ2AgGzhpCQkMmEyYNACJkJoP/3VXVf9e2uK13JkiVl1DTyvX1P13Lq1DmntvNxyU5o +CHuXxzilXnzDP0HEY9pcFK7iBhuXe7AhqxFP/2YJBI8LBxqRXnBzt9lQkyGirEeOcAgRpgSj1XAt +jkiixF2XAaNao9Z+yChvkfQYdgtZS5dRXbloKRnchSeTXYYoC7iaHekaMaJhGLpsFy4s67AdUkUM +5o5nPNOoV2ALIWvom3PmzM3VYBkCZeBxWrCLIBwRI3vKGFWeMPN6nZVPHb21oZSCOEBsA5QkdIUJ +NJulcdEI7DjcweGgK1cR/5thHjU8EuPthdlUuu6iYzrRAUHXOmBWfuiTX8WrfGVv+NzJdTBnVSNg +j5sXrWpevaTBaditaqS2B6LBGDuLaYLKazwC1nvi8mSUVrSEiTVBVVtbWldVTV1Uhra4EaLSwnbT +ePeiVY4trcZaD3UkL3SsKp4rYJwzJXmYgEFSBoUZFgNoRC2ChvEtrQsaW+paFw8Np/8ihtPtb53G +vz8//eWXnjP3Sy8++5Pnn3ru2SeefuqxJx5/5LFHH3p44/3F4fRnPz3lU9xvnAzK//23N/3Vl578 +q//z62mHfPLAi5/d/vRntzz12boH/nz//XcXh9O4/+tV/D3p5Zee/buvXDvsq/cP+9dXnEm/xxhz +y8/aX/9V+zOvfXb3XRuKw+mPt5zwx5f498UXnhbRtZ//p2uH/dPDX9zt1e9f8cfbHvrk5gc/u+ru +T2+/7ZbicBr3By8c94cXv/f8c0+Go6/+0r9dNuwfb/xfX9246PC3z1n3+9Mv/fiYcz+8+aYbisNp +c+OVZ57a/G+7XPTlqguH/R+8cnM0+ZnmtT9fuPY3+x/65vXXX1scTpv7vnVNYMU//fPpf/+l07/w +96d94e9/+PXhd7sTHnPGPykmPHb11Vfl5e0xDNw33v/A/ffcc/cdGzbceustN9144/XXXXfN1Vdf +ecUV68sNG19++ZWXX97ywP13r19/2bp1vMtRxrk89vCjjzx45523XnXV+ssvv/Tyy9cVh5d/acPp +khHzsPgKrvq4fe7XhxWvTR/99jcfXj9s2058Dw2nh4bTXdvxgWTIlWyoaWtrbFpSM7Nx9aHKGbhW +/L777nvs4qO3nLnbph98+6Fzj7jvzMPuPGXlrScsu+HoJbivWrvgslXzLzx07vebZxw+cW/Qg/K5 +Kw77bMOOz1zehs9XHt6kCead2zwT9+kNU06aN/G4GWOPnlzzLU3/zr1Hgrj92QPx9/ev31tO/zzz +zDNtYwIkSOInp396/wjzCp6ceuqpTU1N+Ltp06bPPvvM0G/evHnlypWZ9J+47awzz73g9V//+tHb +j/7lqzet/+FJ1157rXmlSI8E337qOhC/9ODF+PzLDz54+4MPmg8//t1XL3n3tXWXX3zSww8/DLKN +GzcaelyvvPKKKQZSfjtN/+olv3z5xlP03O29995bpH/++efxF2U2xOdceTPozf3uq+sWLFiAX++4 +444i/VNPPYW/SP+1d94pvmI+vPz22yeddNKf//znm2++2dBff/31jz32GJ489NBDp3//PENWvE8+ +4yw06Pvvvw8yQ3/dddc98MADH3/88R//+Mf169efdvb3X3n77bd///stv/jFyWeceemll3744Ydv +vfXW1VdfbeiREeg/1NcHH3xw9913n3DCCSjz8ccff9ddd7333ntIHMy86aabDP0tt9yC+r6nr/+X +XL9LLnx+5513NmzYgHdBj8RRMDTKNfpCpldeeeV6fV0O07puHcoDAlTt5ZdfLvLnnHPOebTTC8KT +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 +LoNwJUoE+f0quZ4QcPNNxJ1LgguQUZ4i16E6zLkNIbC/j9lX06eB34fRDIEeuRTnBAW9p4Rz3oJb +AvUeacgQ2kyy3eCWu/oIBpdWaSuJBanMxmZX74kUumyecuIjcUxI6ZUKs5PU6CzaCp7qiw+ocnlJ +8OAk50/sZIZKcBsbva4yeZosufLKJas4qWz5dfHBWG7boY4yVFlmaF7AAeQ4NzIpwTvmCr3S+pCK +zuGpcthx7T+EMWptjqo6Jotr6Ep7hnnuGx9KO4D5qoY89M7zpjDMNKumrXKNQDIO2jxaLeitmCV6 +bZ76z+duiCodLkRxGxlPkIi4vl3naUpYTWcQDi3XuUJClFrSW2atMj03h8eH0W00LquVMwkVvHh4 +UImEdJ1nXbr/DTSAy8DnKRuuN3g82xBVgZ/6/A5EKdCnp10Bm+V6Ir6cuA8UH8hBEmdkQMFtiIap +K5qX17UuZnKDIVRYmevzf//5b9T+ayWUXx/7L/scraZfULv2zYV//3//rhPKYZ8bttd3xcpfHnjk +e41rf3/Qgl9OKpxc1Ql91X7/utex4h/3/MLfVv3v0XcW1PodvjSps8L/n93iOMyf+5th243+u2F/ +bYcg/PDJ5RmUz4+eWpEmePG6uT97aE36/uPPT28vQnz+pAOy01y/ePLEz/793Pb/fhb3Zx9v/uT9 +u0FfvK307Z88gVeeuvs7RSzR+y45+J0njmz/1Ql5+jce/d6nHzz40r0rf/HSpe1/fNDc7/38iitO +nmzgQc39zlPHx+W//6jfvfS9e9ctxFufvXwM71eOa//pKZ99eG/x/uNvbnr8phhsCrk/deuhKMyn +v73xT6+c+PFLx3285Xu88cHcW4575OrFG6+M8SVuOnvWzd+f+8YzF3z0sx/+x5PfLt6/fcr8/c4v +Nq29//IFd15cb+ivOHnKGWvHvf/2Te8+f8qvHju8eL/zI/P3iB/ffsiDVzTdd1kMPAriDT88+MO3 +r/j5pjUv3708f992fv196xruXxfTP3J9y+abVj9yXesDVx5y5yVNN59ff/UZsy47ccoPvjv+nG+N +PmPtPtefPSvNz3Tky3+sS38bffTl729f/Pa5i0h9f/H7vA21w3/99neK3+WwYX/d/KX4i4lfdgI/ +jsvklc27s+/tt3UB+nF5Kgw3rxmlvz/1t6Xfv/XXw4bd2vH1laFQYUOhwgaeCe8n0I1WCGHz8jY8 +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 +6Kun9mRH3t2RLV+sKrfr/v69e06ccYvu8NlnFrMj57++tOuVs5elcuzY9cq1B2f54YNDF5+/dHDv +4qH793Svulp87ta+U/Mf7th3cvHQwtHz2Z4dr906PHdr50d7bp+6dDDbUx49WswXL8xne/bNVfxt +WHzp7NuL+1+5MD+/+MzC9ZtfDW8eCbaybmOLh/vHF48funjmWHXgxv4bhX22f26xf3/x1eNXbgzh +j8d/htuysOf8W+8deP30q3Wx9Fp/5+Kzb94s2CW3/+6RYu/hd94+dUhv3S91m5efObLv7KM1/KH7 +771XvPfOR8/sf+XVxf4rL39j6Xr5zPvv3d9/9qvfePvA688/ky/uvHIs37X/wAsX93xw6+snDtyo +jj57+EB541ltwsGl8I3XLxxZXLiRP7NwpTn8pj2ibZrd4a3L1/VsJ184dHHPO1+dP3ns3rH51z64 +/kK2fJ09v+j2vfL8V1+9pSM4d9hdLZ65M7LkwcsfHtM/bx0ceeFXz928dOj5O+8V8/XLb39Vtwn3 +d7pj/sGuK0ey5cO76j0njvXfz66cLY5lx0688PV9z+w6cp77u4Xll16/ffjejZ3n51+7enhhsNrZ +vffnq8vXP5w/c2L/jgM3vp71F6703z88fPZl+y30MwKwe+kVfXwj3//W7oO5P/fiC2+NPCD/rODG +qfOHdt7bce3lHQ92vnro+dvnXtJRLX7NcHPPrfrqXBau3j4kLNkpM/ztU99g0+7cPlyPrvb27cMH +r/m9ZxZf2rn3+ipMKy7sufX83J79Z3dkOxau7Oif2r/35vXTez5YvvvsK7vfX7yd5Zfmn1+4cudF +N//6My+efLm5svftRwg93Es94JX6zPNnru/f++4bl+uTpy4sa792zR+4nlW3qlNv+KvVG/MfXsqu +Xr5xOvvgmSvv5y/dO/tB/v5Lt8+6S/tfeCtfuPzK6Sx8sO/15oPL33h14diB2/2Fo+8EbhPuzN19 +bgzTgJpbWH7mzsvzpx+ceTfc2fehP7Tj7Xfq+eKl/rHs6jtXrob6+PzJcCacP12V1a7LYe6lcx+6 +yx8+dzpfOPrW27rrEXb44O3mysV3lnSb/fdePPfswrGvH3nF37m2cGZ4ww+GUG+IoN7tz/uDZ84t +vFBcz+avXbi579Clt5evH3nuja+de/m5sw9uxa069uHexbHT9IcOv3kAFDj90oO9j95v5ck//Nro +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 +2eVvH6aQfKvwcxQ5h1y0zTnb+DkJG9fHz6fDPnoi+Bm/uuBn92uNne+Com3Umgo/h8Dtbdw8fo4i +Z5d3WZt/rnE9hf6lx4OfS0tLQ/k+eulD/WrzyPlw2/Bz2mfYcv45LXI+3Dr//I8/+atNetc3v8Lj +wc9R+2h4rW0fbf6SOd/9TJOIvTH8HNvDIWvdAH5uADm3ED8frhmd7Bj62eQKjwc/H26zf2nSyW5f +RGndzezOh9fYxg0g58PPV37IGmJxXTayAf+8pHn0z+ub7eOcT+qadgPX3caNUdksv27djZ1dT3Ab +Z/i5TRv7xbxm+PlZ2dgv5jXDz9n1hbpm+Dm7nuZrVl88uz73144dh25dpqnIV7587sige4o+Wemd +8trERjtZP7OvF2lyFLvrHDgwf+nSg5srbaweNa+J7XLimj0t1jt599rVa7f0Id1nuvb2yZ5YO9cy +9Fyoe67pl73Q/8x01qmyp7GzzsKBwwtH5w+fP3HohD6+deHq8mXe+t4by+z6eW3KB/fO3H7j9m3B +zndsu1M3NQ11qqah7Q4ddNpNd1bBWNMd4Oyf9RvuhLy2djsvNm/G66P/5Vd1Tfpxqkt/+KM//9n/ +/n98L/njZ2spAQhs7NKH8fPhFo392H3B4QNsfsGxd9nMgsltGft8Etja14w9d2DPsOTImz8zvbb9 +rGHorGHorGHorGHoaMPQWavtWb/QWb/QdSRnOZOcM8k5k5wzyblKcs5E50x0zkTneqKzqp9Gh+D8 +g/u3j2hXT94a/b5/9dqVTp6/3Hx6oph3e67oNUnP3wiMfQic/YPnz/VctYbrryhLc/39w4a+/tH/ +9I86grWvJNgnf/bJ6DUEG/vbSWAbu2lHsC5vOunrS62vVR+tghr+0Pr7NX5o3+BLX9p+99qeA9fi +n/X2zJ8+ePRoXS4swybtt/7VWzuz/XMnd15YfOXwjp0HyhfDkZf9of7bu+7NnXH+3Et3LzbL784t +hbezjxbruef2Xtl79UT+yv57Z+88Vyx++MoDf+fDhXvF5X3Hlxb6b1y5v2txx4V9C8f2f/i+P7fr +lcWFyzebr+k2fPLm/Jmzr4Zd9/buun546aOF+YNH3rq+e76+eOfqrgNnX6127T/4wpX5Y29dO599 +ffelq/nCq1WRLZ9yc+7S0VdP7cmOvLsjW75YVW7X/f1795w44xbd4bPPLGZHzn996dE4wmsPzvLD +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 +j/wGATHlGy3w3fGmt11Sut78f0bN+1vk3L/WmHuPqSJamyX4zcPTdef57nir3WXJP2p+w4kR1mw5 +m7njvNB8sZe+esdFvjve0oas8BIjVGyyKKLpIpTEG5M6eLnvjrev562u3G6R9ymvb+XnlvLbyu0X +fTVvld+Ot3c/WuV95fyl2xev3OHlBzEe2e54QyK9By9HUZ+qMw8BP1AMRDo73h7QOzveHPj+vwXf +xcklqyzbzKk3behg+cfzM2cP3JbYZotcfcMfq2X8sflaMW1J9Jw1n9ti+Ydb3m69Raiy6feVM39v +rP2dtvJ3jb6LGLA9vvk8471VY/ywfN762a02C5U3/Je59r+0Fb9Tlv5OWfS7XSe33r57S/7if2t+ +We6rFbN8sfzVzQlmxn8Zq3+vLf29vPC3wtzfNp9Fe9KHfzegzPu/fnrKr3rP6eqL5a3Wyfqy36uL +/kua+7tKX/y24ozfztk2C/TaxJKlxv/qn2N+Vf3dCF8sr7L0T/L837ddUq3r8kYRH/6+8pSnQDx7 +42f/HPWffxvxH38Z8u+uob/zxXLjmz+7Z/1u/Go6J9xlRovX572IH3Xe1v467D/+/Pq///GVX/7t +1Sd8sbzx10r5D5+oNPnJKzevnDh/7OK1Czt/2PbXwf/5p1d/+YeX/+1/XvyFPrSCL5b3m5dY5r3f +PPX2b0YuGsQbufPkNn8c8Ms/9Pu3/37hF79P/UWPKbG+WD5n+Zc1plZAaeVRJc9fP/f9mYN/H/Db +/+n7b/+V/ovf9X680qulZy/+3B/LF42v/HZ5lPbJV375v1nJPv7blMfcr5R++6ux9lj+3RfJH8YZ +b1T8S9//96c+v1FeL9d9ctcvF/vzQ7j8FhY/O1juYLmD5cUJy4uTR1ZViW6WCqBO6VNcPbl5/nWv +/v37h0iZmtpr2rSp6enpAwYMyJW4d28i3rZt57ETN7t1S3j55ZdDIf7+6JkLF6/cu0cTz4EK1qtX +Cic+8sOZy1eug/jnnykkJCRYX4mHPAl6hVj3/+NXbju6Q77+kuMuwnPlmRy3Hs+60jluPZ75f8lx +Cwoe8c+5BV+6gJeD3w5+Fy/8Lk6uWFU5uklc33QHux/ti2Nl/8CX9RWOxcuXr9q0edfBg4ePHz95 ++fJVxPN0bHPhWJ+RsWHnniMnT/0E+A5C7PvK7t37zpy9DeLgugS/uK4C4lB0FX4FquOjfhU+Olqx +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 + + + v/UV/+m7T//gNy97yace8OwPXfrbb28Cm3d//xfe9Nk//uKP3vHFv3vuh7517HW3Xvem//KrL/t4 +PnWDP/XqGv7f3PCpP/z8373tcz/8rff8bXly+I//6rq3fvERz32vveL3a/hfftWH//Tzt59+2zdX +Hz78VX994i1fmj/mhdjQEfz2C9/73i/8sG7n6rd9819f/doa/o33687bZ479i98LlzxmdslT9SX4 +8PJLL3ljdd7e8oBL/vzR3Xn+9lP/FX59uh3AL87zUEYdCc2XtH6/y3/vf/1x+f6W/vcvlt//dWdA +/uHPdmTzJ97zD2fO/ONfzZeE9DFnzvz6KmG9/MyZa5e//cQ7f/SPP/7vn+7h//duKW7/ufL74rL8 +Tfl9MZ5/ustovP9Da/zD+W7o+YaeHyx67g8QPdf28vNpGr5jevVz/vPxj3wUf/7iwx/52J9/+CO3 +fPBD7//AB97z3ve+813vuvnmm9/61rf+yZ+86aabbrrxxhtf89rXvupVr37FKwDcbOdrn/4M/r7t +69/Ah/IHn1/50pc14QtwATvztrf9+LWv/fvrrsfnV7z4xRgJvkrPfS/+fumLXo8/oxd//JrX/H/P +ec7tj/y3+PzSF74Qw95hPPj776+//vZHPvI25/D5xb//go988EN1+wvg0fhf+LznffiWD05fzN9/ +znOwgKtP1L//1OLzaqel3+f/3u/d8l6i/Nd/4kv4+16v+o/f/vt/3KH95z7rWe9/97vx4apXffQu +V9345Nd95BMf/zT+rGv/Oc/8nff82Tvx4T9/6TuPfskt3/z+j3Ye/+8945nvuvkd73jrn77tTW96 +001vfOONN77utdj3V7/6D//wlS996cte9KIXv+AFf/C8577g2c/GSJ79zGf+7tOfPn1x7tjPJbv8 +7Hf/+/2z2/w2NHxDww8WDQ/raPiD8dc8aJuSj0pFZUKIMzX3JlujdFJOB63KExuVSyk4G1wweIIH +NucUtNHBO48nNgYXlU/JWDTgJj15xOGelTBTWAkz98HqZJWyyXjvZltmdvyu/3JLzWMyoN9ahZii +0vjCz7bv+i/1PBvjnIsGL7nUPw5zp2JQOcecvbazrf4SyY8NNnUvZ35WWfnsQp7Ju42+5Hk1NC3Q +dGNffsJwW6Dl8ZXrLlzoTsplD7/f5Zddffjao/XZ0LN7Xcu1e8h531AcMzN7/F01limqFG3S1mfy +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 + + + gYmeT+Bw08HM0qUXkmDXO8UuIHFztq/x6zIYo/DBLlRc+WUx6aJLW8MPqmIDAmLXzWnDZT3p0dnN +HGO/mbM5jExynl3s9VCvOaIa1Zah0u9VNKNqIxqdhdWFGrnnxaM27Jwmq5iGPrfyqV300i9MKZHm +lHGNFnPEXdiqlswOZxCKuuDpgsq7coaxmGwdY7FJlp/VJxm4EIR70wYSGXGQxP2rCbDJcDwYuT3b +jMorra3yqaF4gLVsRye5KVkZgOFhRfeBXfjecON74Es9y117WEEd065IAs2iEC06rTw2oRNQrRB5 +oFvEpdpdsqtU6a9KTM9kD4aDuTcxAVfvsvm1bAVTLIzTWGM6WfLgsoJUdKk9DtHg6hddYCrz58/b +OZt3YGcVH1edECd1v18TMn3SObIXMioktmUMoXURpCEmHQh8oW5+qgbidb2L/EFjD1d1eTbu3ZzY +9qvZyP/JK7TeMtJvGem3jPS/8opmL7j48ispj/Wf//j19//08V+uCtEzZPCzC3F29zn7zycG2lEq +SDp9BnV9jvI0GBkpKTJtVmxONBJSGXyZq8oOoAnSlyq+PBm6Bgg5Xixvx9uGWji6HnNevFf6W5Ve +Ei1+9J5t2//CzxVmHepHWQZtVyvKUcQ0aGvraKVhDqHqFaYursB2supuPeT0TX8jl26XKFBEIdXD +RqSTSJmLlM5ah3k/5Ax046YyIxlxfmnN0+kQ5bVdhOH7/p6+/3RYcFHINqtxib4d90wUWGfNqtLG +ebPfHGU8PJIIkR7Jj3giId3Fo/SI/ae9ieHTdPhpxzM64NuuJJlqNLQ/dV82mQ/FxXn2+nSf1NEg +mZbayftv6+ypvhwP3u1W5i3e95EHFrY1n44mtf+wXjAGUf4UJVx2U6M/mGZ/pTpQ9g70wt1sqQul +v1DQMbi5uZGxp9kU1GBkt5t3aiZ1+z4v+Xr/dee9Y9bbjyQPz3O7ZT+Y8LwSLuy+iXPx9/2nD+On +84fhmk+XYzB293A8EDcPZPdxPhrI4YfueCBu6XHHTr2/3Yf9OPorPuzNjm3OttOO+qivowb68ux/ +/cin7ujTZQRn4+gnSfe6GUc34+hmHN3Kdb0q4+i11Hb4z+8//tPv3v/d7/73f/zn779/Asj83/Zf +/fqb77SHb9+xvL/81bv3775/9/u7/tVd/td3dzPZ37/7mnFNpx5fgk9PekRtgCCVOgE09Q+Sit99 +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 +NQEusWub18XFqWdP704Ey3fbIVXz6bHrVx7lZciJ7RcvxItnH45du3R1sn3p089n34XHXr7Yvvbo +xOdPR++dOsYnz6zc5EPXRk8vDl2evnRu/MbSs2Dy+Gl5lpgwNqs+vzd/fXJ8lR8bX4mnHpomGqaZ +Gh4vvaO23Tk9sXD+2YmROze3bo7cfv3udLByZiwSJz9fu3Lp1LB4E9y8eO4zfv2N2CwUObb09ib9 +eDxW6PDVJ2uLE6fevxAj0adPT1A1avsMuyk/Dq1cZ1NnLlw9f+v58c/ZpxfWJsTpU4t3rxwbuj6H ++tn48rl7G1Nbq2fmRm6/mhpPSnt0cXtEL717O/Lg1rWTo6ufBe3xlfbLqazty+ZTzJ8CwfDsJXq8 +yq89Hh7j8snZ048LDcSPVDbuzk2c2Tr55tOTH89cnTi18eQcDdXkZSOb59ejVxcC9WpjgqTkTBiE +T+9+Dqa935iKiqU93ZgaeyMvPpg8d+biu5Kkifnz66cunL/26GRwcnzlZPvutYtr7+6ff728efzS +8MvJjYAvjpwaX3l/lo3cO3b2zqfxysWnuUBnvKQGrkQPTj14d+3i85ml6M7d+WXi19DI6LtAr6n1 +V3eXg+nZkZdi7O7C58HrY6sLKnodnmCfvj49oaL3C6/Y1OuJ2UC9vnIvfr30+dXxm6Mb7fEbzxSq +Ue8vbH5SkTRQXRhfPvb+05H7Hx88V++vvJUTJ58+i0bEuaHrwU1+9Z7WI2tvdXhvbkaHN/QWn5w+ +/oa/FPFD+rHxhC09ufgEUrIRryw8m6Vqrm2dfXJ8/OZn1y/J92/GH2QVvs6oZmhCPW+PyLEHT8ZP +i3fByJv5tSsTi0+X313/ZObyk08/efRx3bLq5tuLk5XRlBNTD0chAvfPfbyY9y9t+dvLxZafevZq +55bbgXwz/2Sc/nrTvvZhJDyeN7s4b1YmRxafvRAL4vzlybnt58OT15bfzaNLd0n2ZyL1fvPFiro/ +/WEzuDl+72mwvHrunrpwbuajvvv5+rNg+trzhyqanlqQV9jC9sUbW9dPkOBtf0Lq9CE0NI30y+ni +xHp06eT4+ZdiXLxYunt8dG3o1Ef9+PbEfN42KmhuceTNy8vvJs/E6uzE8KcrcnxiduxWKk3PHlQ+ +hYYevb3NqLvXAuJve2Fo68a1CyX+Lt8ZP3/5HBcLfO5lPlEmhhW/aJWonL03NXJ/4f17kpeHHLNF +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 +N2/e3L179+bNm7du3Xr16tW3v/3tnefad7/7XSLe3Nz8tV/7tT//8z//y7/8S/r5G7/xGz/0Qz80 +MTHxT//pP3V+61vf+tb09PQf/MEfOD/9sz/7sydPnnz8+LH+rW9+85vf+973dmjP3//93//4j//4 +xsZGsYVU187fyr47Nzf3C7/wC/Yt9atTC+uvv/iLv6D+fmF4SNxw0vzxH/8xVVF//pM/+ZM/8RM/ +QZwnHtY/JWYqpb7xjW/Uv/tHf/RHMzMzNF7Ec+e3hHnVv/s3f/M3URRNTU391V/9lfNbP/iDP3j5 +8mXnd+khyQb1N3vye7/3e/Zb1BHbKvvdH/mRH8loiP9EQxJFVRQfLi4u2m9lPZqcnKSf2ZM/+ZM/ +oQ6SHJJEFZvxd3/3d5UuV578zM/8zI/+6I/SHzQuJFFfNHsRQ+w40oukl+TQOWT1F4ncT//0T2dv +SXqpX7t+9zvf+c78/Hy9KJLDIocrLSSC+rfsi6SX2k9VEw+tzNNP4iFxg54XW+h8kRySRJFs0PDR +eBHnLQ8rLwsMWHpTeFB4WP9WvSRH6fVHOzf7gF7Nmurqo4sTLn5Vudp/64TZ5b51xpbZosJadzbf +0HJBD7HOLx96M0bCemES5ov9aR4cHUum75CrvbNkxrwlU379w7RkOr06WTK/9Eu/VFz3//qv/5ps +g2JHnJYMtdkuQ/a79K379+9X7IpOlgy1xH73l3/5l+236CeVUKSpWzLF79pX/VtOS6by3fq3vuhs +yWQvMgbq3/rCWzLekun5y1sy3pLpgyWjD6UlM3375tyDiYm5O+/R573sVkcx8OI1mSfaWCA1CyYn +wCMQ4f8GtksUlS2Xawvblbl26cXmo//2t178Nz+fP3m6Ov8z//xb/+v/84/+t7/+J//8d+jJ2NzG +f/3PfufX/91/+rX/62/+l3//n37///7eb/+H72HmpfMvnYXpXPSzsMEsZJh0IaafSMb6SMy+Q3F1 +w9jG5tLGN+bn7AUONBm33rxaX970ESJPeegoD02E6EugM49yKImHh1lxNg8efakV59/+7d++ffvW +ur87U37rW986duzY1NTUzpS/+7u/awPR9EeFkrzMjIyczsuXLxPZj/3Yj1Xa+Yu/+IsnTpz42Z/9 +WfucHGUiGx8fp6ZWKOm7tq5vfvOb3/3ud+kP+uIf/uEfOvv+8z//8/RpFif/qZ/6qR249Ju/+ZtD +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 +wbD//bA0+N3/F36CPzJ+sLZWOaiG/vp/2YAMoA== + + + diff --git a/docs/build-release/_img/index/logo_xcode.png b/docs/build-release/_img/index/logo_xcode.png new file mode 100644 index 00000000000..2730f0a213b Binary files /dev/null and b/docs/build-release/_img/index/logo_xcode.png differ diff --git a/docs/build-release/_img/index/virtualmachine.png b/docs/build-release/_img/index/virtualmachine.png new file mode 100644 index 00000000000..2d8b5917a59 Binary files /dev/null and b/docs/build-release/_img/index/virtualmachine.png differ diff --git a/docs/build-release/_img/index/zero-to-devops-video.png b/docs/build-release/_img/index/zero-to-devops-video.png new file mode 100644 index 00000000000..61f2ecb3136 Binary files /dev/null and b/docs/build-release/_img/index/zero-to-devops-video.png differ diff --git a/docs/build-release/_shared/_img/browse-to-team-project.png b/docs/build-release/_shared/_img/browse-to-team-project.png new file mode 100644 index 00000000000..54755c6a278 Binary files /dev/null and b/docs/build-release/_shared/_img/browse-to-team-project.png differ diff --git a/docs/build-release/_shared/_img/create-new-build-definition.png b/docs/build-release/_shared/_img/create-new-build-definition.png new file mode 100644 index 00000000000..b69dc703986 Binary files /dev/null and b/docs/build-release/_shared/_img/create-new-build-definition.png differ diff --git a/docs/build-release/_shared/begin-create-build-definition.md b/docs/build-release/_shared/begin-create-build-definition.md new file mode 100644 index 00000000000..f1c6fe3bae4 --- /dev/null +++ b/docs/build-release/_shared/begin-create-build-definition.md @@ -0,0 +1,19 @@ +
  • Open your team project in your web browser ▼

    +
    +![Browse to team project](_img/browse-to-team-project.png) + +

    (If you don't see your team project listed on the home page, select **Browse**.)

    +
      +
    • On-premises TFS: ```http://{your_server}:8080/tfs/DefaultCollection/{your_team_project}```
    • +
    • Visual Studio Team Services: ```https://{your_account}.visualstudio.com/DefaultCollection/{your_team_project}```
    • +
    +

    [The TFS URL doesn't work for me. How can I get the correct URL?](../../security/websitesettings.md)

    +
    +
  • + +
  • Create a build definition (Build & Release tab > Builds) ▼

    +
    +![Build tab](_img/create-new-build-definition.png) +

    +
    +
  • diff --git a/docs/build-release/_shared/ci-cd-prerequisites-tfs.md b/docs/build-release/_shared/ci-cd-prerequisites-tfs.md new file mode 100644 index 00000000000..3f24919a467 --- /dev/null +++ b/docs/build-release/_shared/ci-cd-prerequisites-tfs.md @@ -0,0 +1 @@ +* While the simplest way to try this quickstart is to use a VSTS account, you can also use a TFS server instead of a VSTS account. Make sure that you have [configured a build agent](../actions/agents/v2-windows.md) for your team project, and that you have Visual Studio 2017 installed on the agent machine. \ No newline at end of file diff --git a/docs/build-release/_shared/ci-cd-prerequisites-vsts.md b/docs/build-release/_shared/ci-cd-prerequisites-vsts.md new file mode 100644 index 00000000000..224e8d20ff9 --- /dev/null +++ b/docs/build-release/_shared/ci-cd-prerequisites-vsts.md @@ -0,0 +1 @@ +* A VSTS account. If you don't have one, you can [create one for free](https://go.microsoft.com/fwlink/?LinkId=307137). If your team already has one, then make sure you are an administrator of the team project you want to use. diff --git a/docs/build-release/_shared/ci-quickstart-intro.md b/docs/build-release/_shared/ci-quickstart-intro.md new file mode 100644 index 00000000000..0d7817cb45e --- /dev/null +++ b/docs/build-release/_shared/ci-quickstart-intro.md @@ -0,0 +1 @@ +A continuous integration (CI) process automatically builds and tests code every time a team member commits changes to version control. Here you'll create a CI build definition that helps your team keep the master branch clean. \ No newline at end of file diff --git a/docs/build-release/_shared/qa-agents.md b/docs/build-release/_shared/qa-agents.md new file mode 100644 index 00000000000..4a2b4b27883 --- /dev/null +++ b/docs/build-release/_shared/qa-agents.md @@ -0,0 +1,8 @@ +### Do I need an agent? + +You need at least one agent to run your build or release. Get an [agent](../concepts/agents/agents.md). + + +### I can't select a default agent queue and I can't queue my build or release. How do I fix this? + +See [queues](../concepts/agents/pools-queues.md). diff --git a/docs/build-release/_shared/qa-definition-common-all-platforms.md b/docs/build-release/_shared/qa-definition-common-all-platforms.md new file mode 100644 index 00000000000..1f86dd4ffc1 --- /dev/null +++ b/docs/build-release/_shared/qa-definition-common-all-platforms.md @@ -0,0 +1,37 @@ +### What other kinds of apps can I build? + +[Build your app](../apps/index.md) + +### What other kinds of build steps are available? + +[Specify your build steps](../tasks/index.md) + + +### How do we protect our codebase from build breaks? + +* Git: [Improve code quality with branch policies](../../git/branch-policies.md) with an option to require that code builds before it can be merged to a branch. This option is not available for GitHub repos. + +* TFVC: [Use gated check-in](../concepts/definitions/build/triggers.md#gated). + + +### How do I modify other parts of my build definition? + +* [Specify your build steps](../tasks/index.md) to run tests, scripts, and a wide range of other processes. + +* [Specify build options](../concepts/definitions/build/options.md) such as specifying how completed builds are named, building multiple configurations, creating work items on failure. + +* [Specify the repository](../concepts/definitions/build/repository.md) to pick the source of the build and modify options such as how the agent workspace is cleaned. + +* [Set build triggers](../concepts/definitions/build/triggers.md) to modify how your CI builds run and to specify scheduled builds. + +* [Specify build retention policies](../concepts/policies/retention.md) to automatically delete old builds. + + +### I selected parallel multi-configuration, but only one build is running at a time. + +If you're using VSTS, you might need more concurrent pipelines. See [Concurrent build and release pipelines in Visual Studio Team Services](../concepts/licensing/concurrent-pipelines-ts.md). + + +### How do I see what has changed in my build definition? + +[View the change history of your build definition](../concepts/definitions/build/history.md) diff --git a/docs/build-release/_shared/qa-versions.md b/docs/build-release/_shared/qa-versions.md new file mode 100644 index 00000000000..5511f05fba6 --- /dev/null +++ b/docs/build-release/_shared/qa-versions.md @@ -0,0 +1,6 @@ +### I use Team Foundation Server on-premises and I don't see some of these features. Why not? + +Some of these features are available only on +[Visual Studio Team Services](https://www.visualstudio.com/products/visual-studio-team-services-vs) +and not yet available on-premises. Some features are available on-premises if you have +[upgraded to the latest version of TFS](../../tfs-server/upgrade/get-started.md). diff --git a/docs/build-release/_shared/rm-help-support-shared.md b/docs/build-release/_shared/rm-help-support-shared.md new file mode 100644 index 00000000000..1f0a8d3efcf --- /dev/null +++ b/docs/build-release/_shared/rm-help-support-shared.md @@ -0,0 +1,9 @@ +## Help and support + +* See our [troubleshooting](../actions/troubleshooting.md) page. + +* Report any problems on [Developer Community](https://developercommunity.visualstudio.com/), + make suggestions on [UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services), + get advice on [Stack Overflow](https://stackoverflow.com/questions/tagged/vs-team-services), + and get support via our [Support](https://www.visualstudio.com/team-services/support/) page. + diff --git a/docs/build-release/_shared/test-help-support-shared.md b/docs/build-release/_shared/test-help-support-shared.md new file mode 100644 index 00000000000..023f253d905 --- /dev/null +++ b/docs/build-release/_shared/test-help-support-shared.md @@ -0,0 +1,5 @@ +## Help and support + +* Report problems through the [Developer Community](https://developercommunity.visualstudio.com/) + +* Send suggestions on [UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services) diff --git a/docs/build-release/_shared/version-rm-dev14.md b/docs/build-release/_shared/version-rm-dev14.md new file mode 100644 index 00000000000..4bdf9a8f300 --- /dev/null +++ b/docs/build-release/_shared/version-rm-dev14.md @@ -0,0 +1 @@ +**VSTS | TFS 2017 | TFS 2015** diff --git a/docs/build-release/_shared/version-team-services.md b/docs/build-release/_shared/version-team-services.md new file mode 100644 index 00000000000..9d50580e6ae --- /dev/null +++ b/docs/build-release/_shared/version-team-services.md @@ -0,0 +1 @@ +**VSTS** diff --git a/docs/build-release/_shared/version-tfs-2015-rtm.md b/docs/build-release/_shared/version-tfs-2015-rtm.md new file mode 100644 index 00000000000..4bdf9a8f300 --- /dev/null +++ b/docs/build-release/_shared/version-tfs-2015-rtm.md @@ -0,0 +1 @@ +**VSTS | TFS 2017 | TFS 2015** diff --git a/docs/build-release/_shared/version-tfs-2015-update.md b/docs/build-release/_shared/version-tfs-2015-update.md new file mode 100644 index 00000000000..29a6a64a709 --- /dev/null +++ b/docs/build-release/_shared/version-tfs-2015-update.md @@ -0,0 +1 @@ +**VSTS | TFS 2017 | TFS 2015 Update 3** diff --git a/docs/build-release/_shared/version-tfs-2017-rtm.md b/docs/build-release/_shared/version-tfs-2017-rtm.md new file mode 100644 index 00000000000..4eb11897b97 --- /dev/null +++ b/docs/build-release/_shared/version-tfs-2017-rtm.md @@ -0,0 +1 @@ +**VSTS | TFS 2017** diff --git a/docs/build-release/_shared/version.md b/docs/build-release/_shared/version.md new file mode 100644 index 00000000000..4bdf9a8f300 --- /dev/null +++ b/docs/build-release/_shared/version.md @@ -0,0 +1 @@ +**VSTS | TFS 2017 | TFS 2015** diff --git a/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-01.png b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-01.png new file mode 100644 index 00000000000..3b6e1889241 Binary files /dev/null and b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-01.png differ diff --git a/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-02.png b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-02.png new file mode 100644 index 00000000000..255c180e0f5 Binary files /dev/null and b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-02.png differ diff --git a/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-03.png b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-03.png new file mode 100644 index 00000000000..cce2ace3792 Binary files /dev/null and b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-03.png differ diff --git a/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-04.png b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-04.png new file mode 100644 index 00000000000..9320baf7700 Binary files /dev/null and b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-04.png differ diff --git a/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-05.png b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-05.png new file mode 100644 index 00000000000..69d0890d868 Binary files /dev/null and b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-05.png differ diff --git a/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-06.png b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-06.png new file mode 100644 index 00000000000..52db48fce0f Binary files /dev/null and b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-06.png differ diff --git a/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-07.png b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-07.png new file mode 100644 index 00000000000..f0bbd1f76e5 Binary files /dev/null and b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-07.png differ diff --git a/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-08.png b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-08.png new file mode 100644 index 00000000000..0c083ad9231 Binary files /dev/null and b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-08.png differ diff --git a/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-09.png b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-09.png new file mode 100644 index 00000000000..168bba1234d Binary files /dev/null and b/docs/build-release/actions/_img/azure-rm-endpoint/azure-rm-endpoint-09.png differ diff --git a/docs/build-release/actions/_img/ci-build-git/customconditions.png b/docs/build-release/actions/_img/ci-build-git/customconditions.png new file mode 100644 index 00000000000..133b79f63ac Binary files /dev/null and b/docs/build-release/actions/_img/ci-build-git/customconditions.png differ diff --git a/docs/build-release/actions/_img/ci-build-git/editcode.png b/docs/build-release/actions/_img/ci-build-git/editcode.png new file mode 100644 index 00000000000..1097c6b2afc Binary files /dev/null and b/docs/build-release/actions/_img/ci-build-git/editcode.png differ diff --git a/docs/build-release/actions/_img/ci-build-git/retentionpolicy.png b/docs/build-release/actions/_img/ci-build-git/retentionpolicy.png new file mode 100644 index 00000000000..174446d8d75 Binary files /dev/null and b/docs/build-release/actions/_img/ci-build-git/retentionpolicy.png differ diff --git a/docs/build-release/actions/_img/ci-build-git/triggerwildcard.png b/docs/build-release/actions/_img/ci-build-git/triggerwildcard.png new file mode 100644 index 00000000000..39a126af6e1 Binary files /dev/null and b/docs/build-release/actions/_img/ci-build-git/triggerwildcard.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/ReleasePipeline.png b/docs/build-release/actions/_img/ci-cd/part-1/ReleasePipeline.png new file mode 100644 index 00000000000..3e249d2c0c9 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/ReleasePipeline.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/add-a-file.png b/docs/build-release/actions/_img/ci-cd/part-1/add-a-file.png new file mode 100644 index 00000000000..69229171925 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/add-a-file.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/all-definitions-build-action-menu-replicate-actions.png b/docs/build-release/actions/_img/ci-cd/part-1/all-definitions-build-action-menu-replicate-actions.png new file mode 100644 index 00000000000..530e290ce5f Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/all-definitions-build-action-menu-replicate-actions.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/artifacts-explorer.png b/docs/build-release/actions/_img/ci-cd/part-1/artifacts-explorer.png new file mode 100644 index 00000000000..dcb24edb313 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/artifacts-explorer.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/build-console-link-to-build-summary.png b/docs/build-release/actions/_img/ci-cd/part-1/build-console-link-to-build-summary.png new file mode 100644 index 00000000000..b84b92a1d94 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/build-console-link-to-build-summary.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/build-console.png b/docs/build-release/actions/_img/ci-cd/part-1/build-console.png new file mode 100644 index 00000000000..e532ea664cc Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/build-console.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/build-summary-powershell-script-log.png b/docs/build-release/actions/_img/ci-cd/part-1/build-summary-powershell-script-log.png new file mode 100644 index 00000000000..c61f9b890b8 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/build-summary-powershell-script-log.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/builds-tab-mine-new-button.png b/docs/build-release/actions/_img/ci-cd/part-1/builds-tab-mine-new-button.png new file mode 100644 index 00000000000..af1a159e2c2 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/builds-tab-mine-new-button.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/clone-release-environment.png b/docs/build-release/actions/_img/ci-cd/part-1/clone-release-environment.png new file mode 100644 index 00000000000..d61f300d6b6 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/clone-release-environment.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/create-release.png b/docs/build-release/actions/_img/ci-cd/part-1/create-release.png new file mode 100644 index 00000000000..bc3f310c310 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/create-release.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/create-team-services-account.png b/docs/build-release/actions/_img/ci-cd/part-1/create-team-services-account.png new file mode 100644 index 00000000000..d21d22fa2b6 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/create-team-services-account.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/edit-draft.png b/docs/build-release/actions/_img/ci-cd/part-1/edit-draft.png new file mode 100644 index 00000000000..172da6e2c2e Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/edit-draft.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/navigate-to-builds-tab.png b/docs/build-release/actions/_img/ci-cd/part-1/navigate-to-builds-tab.png new file mode 100644 index 00000000000..39cba3af278 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/navigate-to-builds-tab.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/powershell-task-1.png b/docs/build-release/actions/_img/ci-cd/part-1/powershell-task-1.png new file mode 100644 index 00000000000..e5b6db4cfb1 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/powershell-task-1.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/powershell-task-2.png b/docs/build-release/actions/_img/ci-cd/part-1/powershell-task-2.png new file mode 100644 index 00000000000..a0bc96c6191 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/powershell-task-2.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/project-home-page-click-code-hub.png b/docs/build-release/actions/_img/ci-cd/part-1/project-home-page-click-code-hub.png new file mode 100644 index 00000000000..190bd4eb935 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/project-home-page-click-code-hub.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/publish-artifact-task.png b/docs/build-release/actions/_img/ci-cd/part-1/publish-artifact-task.png new file mode 100644 index 00000000000..1e3b88ad3c5 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/publish-artifact-task.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/publish-draft.png b/docs/build-release/actions/_img/ci-cd/part-1/publish-draft.png new file mode 100644 index 00000000000..e99a6ccb197 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/publish-draft.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/release-created.png b/docs/build-release/actions/_img/ci-cd/part-1/release-created.png new file mode 100644 index 00000000000..e560a7c13d8 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/release-created.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/release-logs.png b/docs/build-release/actions/_img/ci-cd/part-1/release-logs.png new file mode 100644 index 00000000000..9d9718d7fda Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/release-logs.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/release-script-step-final-log.png b/docs/build-release/actions/_img/ci-cd/part-1/release-script-step-final-log.png new file mode 100644 index 00000000000..faf6f9f1dc2 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/release-script-step-final-log.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/rename-release-definition.png b/docs/build-release/actions/_img/ci-cd/part-1/rename-release-definition.png new file mode 100644 index 00000000000..000584a13aa Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/rename-release-definition.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/rename-release-environment.png b/docs/build-release/actions/_img/ci-cd/part-1/rename-release-environment.png new file mode 100644 index 00000000000..336848c0b40 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/rename-release-environment.png differ diff --git a/docs/build-release/actions/_img/ci-cd/part-1/save-as-draft.png b/docs/build-release/actions/_img/ci-cd/part-1/save-as-draft.png new file mode 100644 index 00000000000..07a8ed18e15 Binary files /dev/null and b/docs/build-release/actions/_img/ci-cd/part-1/save-as-draft.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/build-release-01.png b/docs/build-release/actions/_img/create-deploy-releases/build-release-01.png new file mode 100644 index 00000000000..44cf4bc7836 Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/build-release-01.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/build-release-02.png b/docs/build-release/actions/_img/create-deploy-releases/build-release-02.png new file mode 100644 index 00000000000..6beef77bb34 Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/build-release-02.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/build-release-03.png b/docs/build-release/actions/_img/create-deploy-releases/build-release-03.png new file mode 100644 index 00000000000..9d4c90b65b1 Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/build-release-03.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/create-draft-release.png b/docs/build-release/actions/_img/create-deploy-releases/create-draft-release.png new file mode 100644 index 00000000000..2b5edf24d16 Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/create-draft-release.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/create-release-manually-01.png b/docs/build-release/actions/_img/create-deploy-releases/create-release-manually-01.png new file mode 100644 index 00000000000..6b7e67b613d Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/create-release-manually-01.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/create-release-manually-02.png b/docs/build-release/actions/_img/create-deploy-releases/create-release-manually-02.png new file mode 100644 index 00000000000..685053cc393 Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/create-release-manually-02.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/create-release-manually-03.png b/docs/build-release/actions/_img/create-deploy-releases/create-release-manually-03.png new file mode 100644 index 00000000000..7ac8d139393 Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/create-release-manually-03.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/deploy-manually-01.png b/docs/build-release/actions/_img/create-deploy-releases/deploy-manually-01.png new file mode 100644 index 00000000000..3a80c509f15 Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/deploy-manually-01.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/deploy-manually-02.png b/docs/build-release/actions/_img/create-deploy-releases/deploy-manually-02.png new file mode 100644 index 00000000000..b8b60c4ed3d Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/deploy-manually-02.png differ diff --git a/docs/build-release/actions/_img/create-deploy-releases/start-draft-release.png b/docs/build-release/actions/_img/create-deploy-releases/start-draft-release.png new file mode 100644 index 00000000000..cd591df23cf Binary files /dev/null and b/docs/build-release/actions/_img/create-deploy-releases/start-draft-release.png differ diff --git a/docs/build-release/actions/_img/debug-deployment-issues/column-sort-icon.png b/docs/build-release/actions/_img/debug-deployment-issues/column-sort-icon.png new file mode 100644 index 00000000000..0edda3a323f Binary files /dev/null and b/docs/build-release/actions/_img/debug-deployment-issues/column-sort-icon.png differ diff --git a/docs/build-release/actions/_img/debug-deployment-issues/logs-in-progress-02a.png b/docs/build-release/actions/_img/debug-deployment-issues/logs-in-progress-02a.png new file mode 100644 index 00000000000..15ab1cf0acf Binary files /dev/null and b/docs/build-release/actions/_img/debug-deployment-issues/logs-in-progress-02a.png differ diff --git a/docs/build-release/actions/_img/debug-deployment-issues/logs-released-02.png b/docs/build-release/actions/_img/debug-deployment-issues/logs-released-02.png new file mode 100644 index 00000000000..0d52ccb3931 Binary files /dev/null and b/docs/build-release/actions/_img/debug-deployment-issues/logs-released-02.png differ diff --git a/docs/build-release/actions/_img/debug-deployment-issues/overview-03c.png b/docs/build-release/actions/_img/debug-deployment-issues/overview-03c.png new file mode 100644 index 00000000000..70c055634e3 Binary files /dev/null and b/docs/build-release/actions/_img/debug-deployment-issues/overview-03c.png differ diff --git a/docs/build-release/actions/_img/debug-deployment-issues/summary-approvals-only-01.png b/docs/build-release/actions/_img/debug-deployment-issues/summary-approvals-only-01.png new file mode 100644 index 00000000000..d5e3f260bdc Binary files /dev/null and b/docs/build-release/actions/_img/debug-deployment-issues/summary-approvals-only-01.png differ diff --git a/docs/build-release/actions/_img/debug-deployment-issues/summary-details-off-01.png b/docs/build-release/actions/_img/debug-deployment-issues/summary-details-off-01.png new file mode 100644 index 00000000000..47e1f473604 Binary files /dev/null and b/docs/build-release/actions/_img/debug-deployment-issues/summary-details-off-01.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/approval-waiting.png b/docs/build-release/actions/_img/define-multistage-release-process/approval-waiting.png new file mode 100644 index 00000000000..1061add3d32 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/approval-waiting.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/approve-dialog.png b/docs/build-release/actions/_img/define-multistage-release-process/approve-dialog.png new file mode 100644 index 00000000000..40c55e3e201 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/approve-dialog.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/change-target-environment.png b/docs/build-release/actions/_img/define-multistage-release-process/change-target-environment.png new file mode 100644 index 00000000000..d1ff69138e5 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/change-target-environment.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/change-trigger-prod.png b/docs/build-release/actions/_img/define-multistage-release-process/change-trigger-prod.png new file mode 100644 index 00000000000..34c710f2091 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/change-trigger-prod.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/change-trigger-qa.png b/docs/build-release/actions/_img/define-multistage-release-process/change-trigger-qa.png new file mode 100644 index 00000000000..b639210ecb7 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/change-trigger-qa.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/ci-trigger.png b/docs/build-release/actions/_img/define-multistage-release-process/ci-trigger.png new file mode 100644 index 00000000000..4138df88e33 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/ci-trigger.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/clone-environment.png b/docs/build-release/actions/_img/define-multistage-release-process/clone-environment.png new file mode 100644 index 00000000000..7a3342c43b5 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/clone-environment.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/create-release.png b/docs/build-release/actions/_img/define-multistage-release-process/create-release.png new file mode 100644 index 00000000000..4851330e580 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/create-release.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/default-pipeline.png b/docs/build-release/actions/_img/define-multistage-release-process/default-pipeline.png new file mode 100644 index 00000000000..2534b7c82de Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/default-pipeline.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/default-task-phase.png b/docs/build-release/actions/_img/define-multistage-release-process/default-task-phase.png new file mode 100644 index 00000000000..75d13d5c3f2 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/default-task-phase.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/deploy-task-settings.png b/docs/build-release/actions/_img/define-multistage-release-process/deploy-task-settings.png new file mode 100644 index 00000000000..7260af98f24 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/deploy-task-settings.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/download-logs.png b/docs/build-release/actions/_img/define-multistage-release-process/download-logs.png new file mode 100644 index 00000000000..efb740898be Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/download-logs.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/environment-result-details.png b/docs/build-release/actions/_img/define-multistage-release-process/environment-result-details.png new file mode 100644 index 00000000000..3d3c13da710 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/environment-result-details.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/environment-trigger.png b/docs/build-release/actions/_img/define-multistage-release-process/environment-trigger.png new file mode 100644 index 00000000000..ee245b03276 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/environment-trigger.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/final-summary.png b/docs/build-release/actions/_img/define-multistage-release-process/final-summary.png new file mode 100644 index 00000000000..a9a1e18a3b5 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/final-summary.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/finished-app.png b/docs/build-release/actions/_img/define-multistage-release-process/finished-app.png new file mode 100644 index 00000000000..90a29233316 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/finished-app.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/list-approval-waiting.png b/docs/build-release/actions/_img/define-multistage-release-process/list-approval-waiting.png new file mode 100644 index 00000000000..6dabafc37d6 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/list-approval-waiting.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/live-logs-deployment.png b/docs/build-release/actions/_img/define-multistage-release-process/live-logs-deployment.png new file mode 100644 index 00000000000..eeeff09967e Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/live-logs-deployment.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/open-approvers.png b/docs/build-release/actions/_img/define-multistage-release-process/open-approvers.png new file mode 100644 index 00000000000..8337e2c29be Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/open-approvers.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/open-for-edit.png b/docs/build-release/actions/_img/define-multistage-release-process/open-for-edit.png new file mode 100644 index 00000000000..1c744087887 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/open-for-edit.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/open-qa-tasks.png b/docs/build-release/actions/_img/define-multistage-release-process/open-qa-tasks.png new file mode 100644 index 00000000000..3f62da9526b Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/open-qa-tasks.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/open-release-definition.png b/docs/build-release/actions/_img/define-multistage-release-process/open-release-definition.png new file mode 100644 index 00000000000..97f45ff0a04 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/open-release-definition.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/queue-release.png b/docs/build-release/actions/_img/define-multistage-release-process/queue-release.png new file mode 100644 index 00000000000..9111d65e11c Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/queue-release.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/release-link.png b/docs/build-release/actions/_img/define-multistage-release-process/release-link.png new file mode 100644 index 00000000000..dc0703fe820 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/release-link.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/rename-copy-environment.png b/docs/build-release/actions/_img/define-multistage-release-process/rename-copy-environment.png new file mode 100644 index 00000000000..8cdd96781c2 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/rename-copy-environment.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/rename-environment-prod.png b/docs/build-release/actions/_img/define-multistage-release-process/rename-environment-prod.png new file mode 100644 index 00000000000..1921ef17a44 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/rename-environment-prod.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/save-definition.png b/docs/build-release/actions/_img/define-multistage-release-process/save-definition.png new file mode 100644 index 00000000000..1dbaf2fe7e2 Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/save-definition.png differ diff --git a/docs/build-release/actions/_img/define-multistage-release-process/select-approvers.png b/docs/build-release/actions/_img/define-multistage-release-process/select-approvers.png new file mode 100644 index 00000000000..82cd24effcd Binary files /dev/null and b/docs/build-release/actions/_img/define-multistage-release-process/select-approvers.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/git-template-12-xaml-git.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/git-template-12-xaml-git.png new file mode 100644 index 00000000000..9d4e9a8bbf2 Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/git-template-12-xaml-git.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/inline-powershell-script.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/inline-powershell-script.png new file mode 100644 index 00000000000..2ad98845a69 Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/inline-powershell-script.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-build-defaults-tab.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-build-defaults-tab.png new file mode 100644 index 00000000000..fc8c7fe1ec0 Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-build-defaults-tab.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-general-tab.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-general-tab.png new file mode 100644 index 00000000000..d397eb9c2bf Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-general-tab.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-retention-policy-tab.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-retention-policy-tab.png new file mode 100644 index 00000000000..a4553ecd51e Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-retention-policy-tab.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-source-settings-git-tfs.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-source-settings-git-tfs.png new file mode 100644 index 00000000000..7420a30f582 Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-source-settings-git-tfs.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-source-settings-tfvc.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-source-settings-tfvc.png new file mode 100644 index 00000000000..2a56b0bb05f Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-source-settings-tfvc.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-advanced.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-advanced.png new file mode 100644 index 00000000000..c52df014fb8 Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-advanced.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-build.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-build.png new file mode 100644 index 00000000000..50f7b4254a3 Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-build.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-publish-symbols.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-publish-symbols.png new file mode 100644 index 00000000000..4b5bdc425a6 Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-publish-symbols.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-test.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-test.png new file mode 100644 index 00000000000..32c131341d3 Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-test.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-tf-version-control.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-tf-version-control.png new file mode 100644 index 00000000000..a50101a86ee Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-template-12-tf-version-control.png differ diff --git a/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-trigger-tab.png b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-trigger-tab.png new file mode 100644 index 00000000000..5b215b7c30a Binary files /dev/null and b/docs/build-release/actions/_img/migrate-from-xaml-builds/xaml-build-trigger-tab.png differ diff --git a/docs/build-release/actions/_img/troubleshooting/iis-tfs-anonymous-authentication-enabled.png b/docs/build-release/actions/_img/troubleshooting/iis-tfs-anonymous-authentication-enabled.png new file mode 100644 index 00000000000..e83663b4bce Binary files /dev/null and b/docs/build-release/actions/_img/troubleshooting/iis-tfs-anonymous-authentication-enabled.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/add-to-dashboard-01.png b/docs/build-release/actions/_img/view-manage-releases/add-to-dashboard-01.png new file mode 100644 index 00000000000..93e6e85c4e8 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/add-to-dashboard-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/add-to-dashboard-02.png b/docs/build-release/actions/_img/view-manage-releases/add-to-dashboard-02.png new file mode 100644 index 00000000000..927bb7d3e6f Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/add-to-dashboard-02.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/approve-01.png b/docs/build-release/actions/_img/view-manage-releases/approve-01.png new file mode 100644 index 00000000000..3dc4ee7709a Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/approve-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/approve-01c.png b/docs/build-release/actions/_img/view-manage-releases/approve-01c.png new file mode 100644 index 00000000000..3abbefa8f43 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/approve-01c.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/approve-03.png b/docs/build-release/actions/_img/view-manage-releases/approve-03.png new file mode 100644 index 00000000000..30b68216202 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/approve-03.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/approve-04.png b/docs/build-release/actions/_img/view-manage-releases/approve-04.png new file mode 100644 index 00000000000..94241b87356 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/approve-04.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/approve-icon.png b/docs/build-release/actions/_img/view-manage-releases/approve-icon.png new file mode 100644 index 00000000000..4ab1edef5c6 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/approve-icon.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/approve-other-icon.png b/docs/build-release/actions/_img/view-manage-releases/approve-other-icon.png new file mode 100644 index 00000000000..ce0980522f2 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/approve-other-icon.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/cancel-04.png b/docs/build-release/actions/_img/view-manage-releases/cancel-04.png new file mode 100644 index 00000000000..c978cc3df60 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/cancel-04.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/ci-icon.png b/docs/build-release/actions/_img/view-manage-releases/ci-icon.png new file mode 100644 index 00000000000..88bbb8b34df Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/ci-icon.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/column-selector-icon.png b/docs/build-release/actions/_img/view-manage-releases/column-selector-icon.png new file mode 100644 index 00000000000..0a2f111e279 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/column-selector-icon.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/column-sort-down-icon.png b/docs/build-release/actions/_img/view-manage-releases/column-sort-down-icon.png new file mode 100644 index 00000000000..c1188adca58 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/column-sort-down-icon.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/column-sort-icon.png b/docs/build-release/actions/_img/view-manage-releases/column-sort-icon.png new file mode 100644 index 00000000000..0edda3a323f Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/column-sort-icon.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/deploy-03.png b/docs/build-release/actions/_img/view-manage-releases/deploy-03.png new file mode 100644 index 00000000000..384b369f8ea Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/deploy-03.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/deploy-status-widget.png b/docs/build-release/actions/_img/view-manage-releases/deploy-status-widget.png new file mode 100644 index 00000000000..0ec31b932ce Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/deploy-status-widget.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/manually-05b.png b/docs/build-release/actions/_img/view-manage-releases/manually-05b.png new file mode 100644 index 00000000000..810fa40ab41 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/manually-05b.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/notifications-settings.png b/docs/build-release/actions/_img/view-manage-releases/notifications-settings.png new file mode 100644 index 00000000000..4860457ac7d Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/notifications-settings.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-01a.png b/docs/build-release/actions/_img/view-manage-releases/overview-01a.png new file mode 100644 index 00000000000..ba721fe21eb Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-01a.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-02.png b/docs/build-release/actions/_img/view-manage-releases/overview-02.png new file mode 100644 index 00000000000..c294b4a51f7 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-02.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-03.png b/docs/build-release/actions/_img/view-manage-releases/overview-03.png new file mode 100644 index 00000000000..933921ec253 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-03.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-03a.png b/docs/build-release/actions/_img/view-manage-releases/overview-03a.png new file mode 100644 index 00000000000..f46f9c99b8a Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-03a.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-03b.png b/docs/build-release/actions/_img/view-manage-releases/overview-03b.png new file mode 100644 index 00000000000..a7f63cc3be5 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-03b.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-03c.png b/docs/build-release/actions/_img/view-manage-releases/overview-03c.png new file mode 100644 index 00000000000..f897194d802 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-03c.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-03d.png b/docs/build-release/actions/_img/view-manage-releases/overview-03d.png new file mode 100644 index 00000000000..f07905bdc5d Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-03d.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-branch-01.png b/docs/build-release/actions/_img/view-manage-releases/overview-branch-01.png new file mode 100644 index 00000000000..8fa965fefa0 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-branch-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-menu-01.png b/docs/build-release/actions/_img/view-manage-releases/overview-menu-01.png new file mode 100644 index 00000000000..74d94bb6ac5 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-menu-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/overview-restore-01.png b/docs/build-release/actions/_img/view-manage-releases/overview-restore-01.png new file mode 100644 index 00000000000..041b74d1a64 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/overview-restore-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/redeploy-01.png b/docs/build-release/actions/_img/view-manage-releases/redeploy-01.png new file mode 100644 index 00000000000..c88b63a15dc Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/redeploy-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/redeploy-02.png b/docs/build-release/actions/_img/view-manage-releases/redeploy-02.png new file mode 100644 index 00000000000..059d3bd51a2 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/redeploy-02.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/redeploy-05.png b/docs/build-release/actions/_img/view-manage-releases/redeploy-05.png new file mode 100644 index 00000000000..da6637a1c17 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/redeploy-05.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/redeploy-07.png b/docs/build-release/actions/_img/view-manage-releases/redeploy-07.png new file mode 100644 index 00000000000..5236cd81009 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/redeploy-07.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/release-history-01.png b/docs/build-release/actions/_img/view-manage-releases/release-history-01.png new file mode 100644 index 00000000000..1c00d97b87a Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/release-history-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/release-history-02.png b/docs/build-release/actions/_img/view-manage-releases/release-history-02.png new file mode 100644 index 00000000000..5daef1104d0 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/release-history-02.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/release-history-03.png b/docs/build-release/actions/_img/view-manage-releases/release-history-03.png new file mode 100644 index 00000000000..ef7a21a6b8b Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/release-history-03.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/release-history-04.png b/docs/build-release/actions/_img/view-manage-releases/release-history-04.png new file mode 100644 index 00000000000..7fc5273c44c Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/release-history-04.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/release-history-05.png b/docs/build-release/actions/_img/view-manage-releases/release-history-05.png new file mode 100644 index 00000000000..2cc5e6d15b2 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/release-history-05.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/release-summary-01.png b/docs/build-release/actions/_img/view-manage-releases/release-summary-01.png new file mode 100644 index 00000000000..f5fbe014e30 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/release-summary-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/send-email-01.png b/docs/build-release/actions/_img/view-manage-releases/send-email-01.png new file mode 100644 index 00000000000..481e15e26e9 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/send-email-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/send-email-02.png b/docs/build-release/actions/_img/view-manage-releases/send-email-02.png new file mode 100644 index 00000000000..730d98866db Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/send-email-02.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/send-email-03.png b/docs/build-release/actions/_img/view-manage-releases/send-email-03.png new file mode 100644 index 00000000000..b87aba31ebd Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/send-email-03.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/summary-in-progress-01a.png b/docs/build-release/actions/_img/view-manage-releases/summary-in-progress-01a.png new file mode 100644 index 00000000000..817d93d0435 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/summary-in-progress-01a.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/summary-links-01.png b/docs/build-release/actions/_img/view-manage-releases/summary-links-01.png new file mode 100644 index 00000000000..f4ee62eea7a Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/summary-links-01.png differ diff --git a/docs/build-release/actions/_img/view-manage-releases/view-test-results-01.png b/docs/build-release/actions/_img/view-manage-releases/view-test-results-01.png new file mode 100644 index 00000000000..8fdab92b182 Binary files /dev/null and b/docs/build-release/actions/_img/view-manage-releases/view-test-results-01.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/add-artifacts.png b/docs/build-release/actions/_img/work-with-release-definitions/add-artifacts.png new file mode 100644 index 00000000000..e5dba718d95 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/add-artifacts.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/add-phase.png b/docs/build-release/actions/_img/work-with-release-definitions/add-phase.png new file mode 100644 index 00000000000..3a2d523f6e2 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/add-phase.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/add-tasks.png b/docs/build-release/actions/_img/work-with-release-definitions/add-tasks.png new file mode 100644 index 00000000000..5ab4847f7c2 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/add-tasks.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/cd-trigger.png b/docs/build-release/actions/_img/work-with-release-definitions/cd-trigger.png new file mode 100644 index 00000000000..74f3b4182ea Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/cd-trigger.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/check-queue.png b/docs/build-release/actions/_img/work-with-release-definitions/check-queue.png new file mode 100644 index 00000000000..a9493ba2f34 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/check-queue.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/choose-template.png b/docs/build-release/actions/_img/work-with-release-definitions/choose-template.png new file mode 100644 index 00000000000..a7cca624b0c Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/choose-template.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/clone-definition.png b/docs/build-release/actions/_img/work-with-release-definitions/clone-definition.png new file mode 100644 index 00000000000..f7dac384384 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/clone-definition.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/clone-environment-03.png b/docs/build-release/actions/_img/work-with-release-definitions/clone-environment-03.png new file mode 100644 index 00000000000..cc51ad9bdba Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/clone-environment-03.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/clone-environment-04.png b/docs/build-release/actions/_img/work-with-release-definitions/clone-environment-04.png new file mode 100644 index 00000000000..e116bb87c93 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/clone-environment-04.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/create-new.png b/docs/build-release/actions/_img/work-with-release-definitions/create-new.png new file mode 100644 index 00000000000..18c33ea2f66 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/create-new.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/create-task-group.png b/docs/build-release/actions/_img/work-with-release-definitions/create-task-group.png new file mode 100644 index 00000000000..18207daad09 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/create-task-group.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/goto-tasks.png b/docs/build-release/actions/_img/work-with-release-definitions/goto-tasks.png new file mode 100644 index 00000000000..52f44b82d55 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/goto-tasks.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/import.png b/docs/build-release/actions/_img/work-with-release-definitions/import.png new file mode 100644 index 00000000000..f2ff59fe002 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/import.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/new-environment.png b/docs/build-release/actions/_img/work-with-release-definitions/new-environment.png new file mode 100644 index 00000000000..525fd9f5bd8 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/new-environment.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/old-editor.png b/docs/build-release/actions/_img/work-with-release-definitions/old-editor.png new file mode 100644 index 00000000000..57e0460dba3 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/old-editor.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/save-template.png b/docs/build-release/actions/_img/work-with-release-definitions/save-template.png new file mode 100644 index 00000000000..14fbf89cfda Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/save-template.png differ diff --git a/docs/build-release/actions/_img/work-with-release-definitions/set-conditions.png b/docs/build-release/actions/_img/work-with-release-definitions/set-conditions.png new file mode 100644 index 00000000000..95586fb2539 Binary files /dev/null and b/docs/build-release/actions/_img/work-with-release-definitions/set-conditions.png differ diff --git a/docs/build-release/actions/_shared/build-prerequisites.md b/docs/build-release/actions/_shared/build-prerequisites.md new file mode 100644 index 00000000000..37426544143 --- /dev/null +++ b/docs/build-release/actions/_shared/build-prerequisites.md @@ -0,0 +1 @@ +This tutorial requires that you are an administrator of a team project in a VSTS account. If you don't have a VSTS account, you can [create one for free](https://go.microsoft.com/fwlink/?LinkId=307137). \ No newline at end of file diff --git a/docs/build-release/actions/agents/_img/configure-tfs-authentication/iis-tfs-authentication-windows-negotiate-and-ntlm-providers.png b/docs/build-release/actions/agents/_img/configure-tfs-authentication/iis-tfs-authentication-windows-negotiate-and-ntlm-providers.png new file mode 100644 index 00000000000..7eccc6b9b94 Binary files /dev/null and b/docs/build-release/actions/agents/_img/configure-tfs-authentication/iis-tfs-authentication-windows-negotiate-and-ntlm-providers.png differ diff --git a/docs/build-release/actions/agents/_img/configure-tfs-authentication/iis-tfs-authentication-windows-ntlm-provider.png b/docs/build-release/actions/agents/_img/configure-tfs-authentication/iis-tfs-authentication-windows-ntlm-provider.png new file mode 100644 index 00000000000..a36003093d2 Binary files /dev/null and b/docs/build-release/actions/agents/_img/configure-tfs-authentication/iis-tfs-authentication-windows-ntlm-provider.png differ diff --git a/docs/build-release/actions/agents/_img/configure-tfs-authentication/iis-tfs-authentication-windows.png b/docs/build-release/actions/agents/_img/configure-tfs-authentication/iis-tfs-authentication-windows.png new file mode 100644 index 00000000000..b13b87b8bd3 Binary files /dev/null and b/docs/build-release/actions/agents/_img/configure-tfs-authentication/iis-tfs-authentication-windows.png differ diff --git a/docs/build-release/actions/agents/_img/v1-windows/tfs-on-premises-xaml-build-system-configure-start.png b/docs/build-release/actions/agents/_img/v1-windows/tfs-on-premises-xaml-build-system-configure-start.png new file mode 100644 index 00000000000..3df925d1284 Binary files /dev/null and b/docs/build-release/actions/agents/_img/v1-windows/tfs-on-premises-xaml-build-system-configure-start.png differ diff --git a/docs/build-release/actions/agents/_shared/capabilities.md b/docs/build-release/actions/agents/_shared/capabilities.md new file mode 100644 index 00000000000..ffe4606c3dc --- /dev/null +++ b/docs/build-release/actions/agents/_shared/capabilities.md @@ -0,0 +1,11 @@ +## Capabilities + +Your agent's capabilities are cataloged and advertised in the pool so that only the builds and releases it can handle are assigned to it. See [Build and release agent capabilities](../../../concepts/agents/agents.md#capabilities). + +In many cases after you deploy an agent you'll need to install software or utilities. Generally you should install on your agents whatever software and tools you use on your dev machine. + +For example, if your build includes the [npm task](../../../tasks/package/npm-install.md), then the build won't run unless there's a build agent in the pool that has npm installed. + +> [!IMPORTANT] +> +> After you install new software on a agent, you must restart the agent for the new capability to show up in the pool so that the build can run. \ No newline at end of file diff --git a/docs/build-release/actions/agents/_shared/concepts.md b/docs/build-release/actions/agents/_shared/concepts.md new file mode 100644 index 00000000000..3dfe43e10f5 --- /dev/null +++ b/docs/build-release/actions/agents/_shared/concepts.md @@ -0,0 +1,3 @@ +## Learn about agents + +If you already know what an agent is and how it works, feel free to jump right in to the following sections. But if you'd like some more background about what they do and how they work, see [Build and release agents](../../../concepts/agents/agents.md). \ No newline at end of file diff --git a/docs/build-release/actions/agents/_shared/qa-no-agent-with-capabilities.md b/docs/build-release/actions/agents/_shared/qa-no-agent-with-capabilities.md new file mode 100644 index 00000000000..acb2ef066ce --- /dev/null +++ b/docs/build-release/actions/agents/_shared/qa-no-agent-with-capabilities.md @@ -0,0 +1,3 @@ +### Why do I get this message when I try to queue my build? + +When you try to queue a build or a deployment, you might get a message such as: "No agent could be found with the following capabilities: msbuild, vsiualstudio, vstest." One common cause of this problem is that you need to install prerequisite software such as Visual Studio on the machine where the build agent is running. diff --git a/docs/build-release/actions/agents/_shared/qa-windows-agent-powershell-version.md b/docs/build-release/actions/agents/_shared/qa-windows-agent-powershell-version.md new file mode 100644 index 00000000000..6bf052d99d3 --- /dev/null +++ b/docs/build-release/actions/agents/_shared/qa-windows-agent-powershell-version.md @@ -0,0 +1,13 @@ +

    What version of PowerShell do I need? Where can I get a newer version?

    + +The Windows Agent requires PowerShell version 3 or later. To check your PowerShell version: + +```bash +$PSVersionTable.PSVersion +``` + +If you need a newer version of PowerShell, you can download it: + +* PowerShell 3: [Windows Management Framework 3.0](http://www.microsoft.com/en-us/download/details.aspx?id=34595) +* PowerShell 4: [Windows Management Framework 4.0](http://www.microsoft.com/en-us/download/details.aspx?id=40855) +* PowerShell 5: [Windows Management Framework 5.0](https://www.microsoft.com/en-us/download/details.aspx?id=50395) diff --git a/docs/build-release/actions/agents/_shared/v2/configure-help-unix.md b/docs/build-release/actions/agents/_shared/v2/configure-help-unix.md new file mode 100644 index 00000000000..8eaefd76cf6 --- /dev/null +++ b/docs/build-release/actions/agents/_shared/v2/configure-help-unix.md @@ -0,0 +1,9 @@ +## Help on other options + +To learn about other options: + +```bash +./config.sh --help +``` + +The help provides information on authentication alternatives and unattended configuration. \ No newline at end of file diff --git a/docs/build-release/actions/agents/_shared/v2/prepare-permissions.md b/docs/build-release/actions/agents/_shared/v2/prepare-permissions.md new file mode 100644 index 00000000000..ef4a6a2a6f3 --- /dev/null +++ b/docs/build-release/actions/agents/_shared/v2/prepare-permissions.md @@ -0,0 +1,47 @@ +### Decide which user you'll use + +Decide which user account you're going to use to register the agent. + +#### Authenticate with a personal access token (PAT) to Team Services or TFS 2017 + +1. Sign in with the user account you plan to use in either your VSTS account (```https://{your-account}.visualstudio.com```) +or your Team Foundation Server web portal (```https://{your-server}:8080/tfs/```). + +1. From your home page, open your profile. Go to your security details. + + ![test](../../../../../git/_shared/_img/my-profile-team-services.png) + +1. Create a personal access token. + + ![test](../../../../../git/_shared/_img/add-personal-access-token.png) + +1. For the scope select **Agent Pools (read, manage)** and make sure all the other boxes are cleared. + If its a [deployment group](../../../../concepts/definitions/release/deployment-groups/index.md) agent, for the scope select **Deployment group (read, manage)** and make sure all the other boxes are cleared. + +1. Copy the token. You'll use this token when you configure the agent. + +#### Authenticate as TFS user + +* **TFS 2017:** You can use either a domain user or a local Windows user on each of your TFS application tiers. + +* **TFS 2015 (applies only to OSX and Linux):** We recommend that you create a local Windows user on each of your TFS application tiers and dedicate that user for the purpose of deploying build agents. + +### Confirm the user has permission + +Make sure the user account that you're going to use has permission to register the agent. + +> Is the user you plan to use is a Team Services account owner or a TFS server administrator? If so, then skip these steps. Otherwise you might see a message like this: _Sorry, we couldn't add the identity. Please try a different identity._ + +
      +
    1. Open a browser and navigate to the _Agent pools_ tab for your Team Services account or TFS server: + +[!INCLUDE [include](../../../../concepts/agents/_shared/agent-pools-tab.md)]
    2. + +
    3. Click the pool on the left side of the page and then click **Roles**.
    4. + +
    5. If the user account you're going to use is not shown, then get an administrator to add it. The administrator can be an agent pool administrator, a [Team Services account owner](../../../../../accounts/faq-add-delete-users.md#find-owner), or a [TFS server administrator](../../../../../tfs-server/add-administrator-tfs.md). +If its a [deployment group](../../../../concepts/definitions/release/deployment-groups/index.md) agent, the administrator can be an deployment group administrator, a [Team Services account owner](../../../../../accounts/faq-add-delete-users.md#find-owner), or a [TFS server administrator](../../../../../tfs-server/add-administrator-tfs.md). +You can add a user to the deployment group adminstrator role in the **Security** tab on the **Deployment Groups** page of the **Build & Release** hub.
    6. +
    + +**Q:** I'm concerned about security. How is this account used? **A:** [Agent communication](../../../../concepts/agents/agents.md#communication). diff --git a/docs/build-release/actions/agents/_shared/v2/qa-firewall.md b/docs/build-release/actions/agents/_shared/v2/qa-firewall.md new file mode 100644 index 00000000000..e6fa5330ff2 --- /dev/null +++ b/docs/build-release/actions/agents/_shared/v2/qa-firewall.md @@ -0,0 +1,10 @@ +### I'm running a firewall and my code is in Team Services. What URLs does the agent need to communicate with? + +If you're running an agent in a secure network behind a firewall, make sure the agent can initiate communication with the following URLs: + +``` +https://login.microsoftonline.com +https://app.vssps.visualstudio.com +https://{accountname}.visualstudio.com +https://{accountname}.vsrm.visualstudio.com + ``` \ No newline at end of file diff --git a/docs/build-release/actions/agents/_shared/v2/qa-proxy-unix.md b/docs/build-release/actions/agents/_shared/v2/qa-proxy-unix.md new file mode 100644 index 00000000000..813dbe634f5 --- /dev/null +++ b/docs/build-release/actions/agents/_shared/v2/qa-proxy-unix.md @@ -0,0 +1,30 @@ +### How do I run the agent behind a web proxy? + +In the agent root directory, create .proxy file with your proxy server url. + +```bash +echo http://name-of-your-web-proxy:8888 > .proxy +``` + +If your proxy doesn't require authentication, then you're ready to configure and run the agent as explained above. + +Note: For backwards compatibility, if the proxy is not specified as described above, the agent also checks for a proxy URL from the VSTS_HTTP_PROXY environment variable. + +If your proxy requires authentication, the simplest way to handle it is to grant permissions to the user under which the agent runs. Otherwise, you can provide credentials through environment variables. When you provide credentials through environment variables, the agent keeps the credentials secret by masking them in job and diagnostic logs. To grant credentials through environment variables, set the following variables: + +```bash +export VSTS_HTTP_PROXY_USERNAME=proxyuser +export VSTS_HTTP_PROXY_PASSWORD=proxypassword +``` + +If you are running your agent as a service: + +0. Add the following section to .env file under the agent root directory, + ``` +VSTS_HTTP_PROXY_USERNAME=proxyuser +VSTS_HTTP_PROXY_PASSWORD=proxypassword + ``` + +0. [Update the environment variables](#service-update-environment-variables). + +This procedure enables the agent infrastructure to operate behind a web proxy. Your build definition and scripts must still handle proxy configuration for each task and tool you run in your build. For example, if you are using a task that makes a REST API call, you must configure the proxy for that task. \ No newline at end of file diff --git a/docs/build-release/actions/agents/_shared/v2/qa-urls.md b/docs/build-release/actions/agents/_shared/v2/qa-urls.md new file mode 100644 index 00000000000..1ab27b79e38 --- /dev/null +++ b/docs/build-release/actions/agents/_shared/v2/qa-urls.md @@ -0,0 +1,3 @@ +### I'm using TFS and the URLs in the sections above don't work for me. Where can I get help? + +[Web site settings and security](../../../../../security/websitesettings.md) diff --git a/docs/build-release/actions/agents/_shared/v2/remove-and-reconfigure-unix.md b/docs/build-release/actions/agents/_shared/v2/remove-and-reconfigure-unix.md new file mode 100644 index 00000000000..faec5d9062f --- /dev/null +++ b/docs/build-release/actions/agents/_shared/v2/remove-and-reconfigure-unix.md @@ -0,0 +1,13 @@ +## Remove and re-configure an agent + +To remove the agent: + +0. Stop and uninstall the service as explained above. + +0. Remove the agent. + ```bash +./config.sh remove + ``` +0. Enter your credentials. + +After you've removed the agent, you can [configure it again](#download-configure). \ No newline at end of file diff --git a/docs/build-release/actions/agents/_shared/v2/replace-agent.md b/docs/build-release/actions/agents/_shared/v2/replace-agent.md new file mode 100644 index 00000000000..be1cecb683f --- /dev/null +++ b/docs/build-release/actions/agents/_shared/v2/replace-agent.md @@ -0,0 +1,3 @@ + ## Replace an agent + + When you configure an agent using the same name as an agent that already exists, you're asked if you want to replace the existing agent. If you answer `Y`, then make sure you remove the agent (see below) that you're replacing. Otherwise after a few minutes of conflicts, one of the agents will shut down. diff --git a/docs/build-release/actions/agents/_shared/v2/unix-authentication-types.md b/docs/build-release/actions/agents/_shared/v2/unix-authentication-types.md new file mode 100644 index 00000000000..35d62e0a8f8 --- /dev/null +++ b/docs/build-release/actions/agents/_shared/v2/unix-authentication-types.md @@ -0,0 +1,25 @@ +#### Team Services + +Choose **PAT**, and then paste the [PAT token you created](#permissions) into the command prompt window. + +> [!NOTE] +> When using PAT as the authentication method, the PAT token is used only for the initial configuration of the agent. Learn more at [Communication with Team Services or TFS](../../../../concepts/agents/agents.md). + +#### TFS + +> [!IMPORTANT] +> +> Make sure your server is [configured to support the authentication method](../../configure-tfs-authentication.md) you want to use. + +When you configure your agent to connect to TFS, you've got the following options: + +* **Alternate** Connect to TFS using Basic authentication. After you select Alternate you'll be prompted for your credentials. + +* **Integrated** Not supported on OSX or Linux. + +* **Negotiate** (Default) Connect to TFS as a user other than the signed-in user via a Windows authentication scheme such as NTLM or Kerberos. After you select Negotiate you'll be prompted for credentials. + +* **PAT** Supported only on Team Services and TFS 2017 or newer. After you choose PAT, paste the [PAT token you created](#permissions) into the command prompt window. + +> [!NOTE] +> When using PAT as the authentication method, the PAT token is used only for the initial configuration of the agent on newer versions of TFS. Learn more at [Communication with Team Services or TFS](../../../../concepts/agents/agents.md). \ No newline at end of file diff --git a/docs/build-release/actions/agents/_shared/v2/web-proxy-bypass.md b/docs/build-release/actions/agents/_shared/v2/web-proxy-bypass.md new file mode 100644 index 00000000000..e0caf80b397 --- /dev/null +++ b/docs/build-release/actions/agents/_shared/v2/web-proxy-bypass.md @@ -0,0 +1,18 @@ +### How do I configure the agent to bypass a web proxy and connect to Team Services? + +If you want the agent to bypass your proxy and connect to Team Services directly, then you should configure your web proxy to enable the agent to access the following URLs: + +* `https://management.core.windows.net` + +* `*.visualstudio.com` + +* `https://login.microsoftonline.com` + +* `https://app.vsspsext.visualstudio.com` + +> [!NOTE] +> This procedure enables the agent to bypass a web proxy. Your build definition and scripts must still handle bypassing your web proxy for each task and tool you run in your build. +> +> For example, if you are using a NuGet task, you must configure your web proxy to support bypassing the URL for the server that hosts the NuGet feed you're using. + + diff --git a/docs/build-release/actions/agents/configure-tfs-authentication.md b/docs/build-release/actions/agents/configure-tfs-authentication.md new file mode 100644 index 00000000000..a3c9df3e8aa --- /dev/null +++ b/docs/build-release/actions/agents/configure-tfs-authentication.md @@ -0,0 +1,64 @@ +--- +title: Configure TFS authentication for private agents +description: Configure authentication for all your private build and release agents to connect to your Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 66E3A184-6F3F-41D3-B522-55671DD5B98D +ms.manager: douge +ms.author: alewis +ms.date: 03/03/2017 +--- + +# Configure TFS authentication for your private build and release agents + +**TFS 2017 | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/en-us/library/ms252495%28v=vs.120%29.aspx)** + +When you deploy a private agent, you choose how the agent will authenticate to your Team Foundation Server (TFS). Here we'll show you how to configure TFS to enable your agents to use different authentication methods. + +## Log on to your server + +Log on to the machine where you are running TFS. + +## Configure authentication + +### Alternate + +Configure basic authentication. See https://github.com/Microsoft/tfs-cli/blob/master/docs/configureBasicAuth.md. + +### Integrated + +Start Internet Information Services (IIS) Manager. Select your TFS site and make sure Windows Authentication is enabled with a valid provider such as NTLM or Kerberos. + +![iis tfs windows authentication](_img/configure-tfs-authentication/iis-tfs-authentication-windows.png) + +![iis tfs windows authentication with ntlm provider](_img/configure-tfs-authentication/iis-tfs-authentication-windows-ntlm-provider.png) + +### Negotiate + +Start Internet Information Services (IIS) Manager. Select your TFS site and make sure Windows Authentication is enabled with the Negotiate provider and with another method such as NTLM or Kerberos. + +![iis tfs windows authentication](_img/configure-tfs-authentication/iis-tfs-authentication-windows.png) + +![iis tfs windows authentication with negotiate and ntlm provider](_img/configure-tfs-authentication/iis-tfs-authentication-windows-negotiate-and-ntlm-providers.png) + +### PAT + +Personal access token (PAT) authentication is available in TFS 2015 Update 3 or newer and TFS 2017 RTM and newer. To use PAT, your server must be configured with HTTPS. See [Web site settings and security](../../../security/websitesettings.md). + +## Deploy your agent + +### TFS 2017 + +* [Windows agent v2](../../actions/agents/v2-windows.md) +* [OSX agent](../../actions/agents/v2-osx.md) +* [Ubuntu 14.04 agent](../../actions/agents/v2-linux.md) +* [Ubuntu 16.04 agent](../../actions/agents/v2-linux.md) +* [RedHat agent](../../actions/agents/v2-linux.md) + +### TFS 2015 + +* [Windows agent v1](../../actions/agents/v1-windows.md) +* [OSX agent](../../actions/agents/v2-osx.md) +* [Ubuntu 14.04 agent](../../actions/agents/v2-linux.md) +* [Ubuntu 16.04 agent](../../actions/agents/v2-linux.md) +* [RedHat agent](../../actions/agents/v2-linux.md) diff --git a/docs/build-release/actions/agents/prepare-permissions.md b/docs/build-release/actions/agents/prepare-permissions.md new file mode 100644 index 00000000000..2a4d99d3924 --- /dev/null +++ b/docs/build-release/actions/agents/prepare-permissions.md @@ -0,0 +1,14 @@ +--- +title: Prepare permissions +description: Prepare permissions +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: D54EB55B-78E0-4B32-9DDB-C8C0B58A3AB3 +ms.manager: douge +ms.author: alewis +ms.date: 12/01/2016 +--- + +# Prepare permissions + +[!INCLUDE [include](_shared/v2/prepare-permissions.md)] \ No newline at end of file diff --git a/docs/build-release/actions/agents/v1-windows.md b/docs/build-release/actions/agents/v1-windows.md new file mode 100644 index 00000000000..d8dd05caac9 --- /dev/null +++ b/docs/build-release/actions/agents/v1-windows.md @@ -0,0 +1,179 @@ +--- +title: Deploy an agent on Windows for TFS 2015 +description: Use Build and Release agents for TFS 2015 to build or deploy your Windows and Azure applications. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 9FD46361-985B-4886-A042-9C322CE3CD92 +ms.manager: douge +ms.author: alewis +ms.date: 08/26/2016 +--- +# Deploy an agent on Windows for TFS 2015 + +**[VSTS](v2-windows.md) | [TFS 2017](v2-windows.md) | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/en-us/library/ms252495%28v=vs.120%29.aspx)** + +To build and deploy Windows, Azure, and other Visual Studio solutions you may need a Windows agent. Windows agents can also build and deploy Java and Android apps. + +> Before you begin: + * If you use [Visual Studio Team Services](https://www.visualstudio.com/products/visual-studio-team-services-vs) or a TFS 2017 server, then you need to use a newer agent. See [Deploy an agent on Windows](v2-windows.md). + * If you use TFS, you might already have a build and release agent running. An agent is automatically or optionally deployed in some cases when you [set up Team Foundation Server](../../../tfs-server/install/single-server.md). + * Otherwise, you've come to the right place to set up an agent on Windows for TFS 2015. Continue to the next section. + +[!INCLUDE [include](_shared/concepts.md)] + +## Check prerequisites + +Before you begin, make sure your agent machine is prepared with these prerequisites: + +* An [operating system that is supported by Visual Studio 2013](http://www.visualstudio.com/products/visual-studio-2013-compatibility-vs) or newer + +* Visual Studio 2013 or Visual Studio 2015 + +* PowerShell 3 or newer ([Where can I get a newer version of PowerShell?](#powershell-version)) + +## Download and configure the agent + +1. Make sure you're logged on the machine as an agent pool administrator. See [Agent pools](../../concepts/agents/pools-queues.md#security-tfs2015). + +2. Navigate to the **Agent pools** tab: `http://{your_server}:8080/tfs/_admin/_AgentPool` + +3. Click **Download agent**. + +4. Unzip the .zip file into the folder on disk from which you would like to run the agent. To avoid "path too long" issues on the file system, keep the path short. For example: `C:\Agent\` + +5. Run Command Prompt as Administrator, and then run: + ``` +ConfigureAgent.cmd + ``` + +6. Respond to the prompts. + +### Choose interactive or service mode + +For guidance on whether to run the agent in interactive mode or as a service, see [Agents: Interactive vs. service](../../concepts/agents/agents.md#account). + +#### Run as a service + +If you chose to run the agent as a Windows service, then the agent running status can be controlled from the Services snap-in. Run services.msc and look for "VSO Agent (<name of your agent>)". + +If you need to change the logon account, don't do it from the services snap-in. Instead, from an elevated Command Prompt, run: + +``` +C:\Agent\Agent\VsoAgent.exe /ChangeWindowsServiceAccount +``` + +#### Run interactively + +If you chose to run interactively, then to run the agent: + +``` +C:\Agent\Agent\VsoAgent.exe +``` + +## Command-line parameters + +You can use command-line parameters when you configure the agent (```ConfigureAgent.cmd```) and when you run the agent (```Agent\VsoAgent.exe```). These are useful to avoid being prompted during unattended installation scripts and for power users. + +### Common parameters + +*/Login:UserName,Password[;AuthType=(AAD|Basic|PAT)]* +Used for configuration commands against a VSTS account. The parameter is used to specify the pool administrator credentials. The credentials are used to perform the pool administration changes and are not used later by the agent. + +When using personal access tokens (PAT) authentication type, specify anything for the user name and specify the PAT as the password. + +If passing the parameter from PowerShell, be sure to escape the semicolon or encapsulate the entire argument in quotes. For example: '/Login:user,password;AuthType=PAT'. Otherwise the semicolon will be interpreted by PowerShell to indicate the end of one statement and the beginning of another. + +*/NoPrompt* +Indicates not to prompt and to accept the default for any values not provided on the command-line. + +*/WindowsServiceLogonAccount:WindowsServiceLogonAccount* +Used for configuration commands to specify the identity to use for the Windows service. To specify a domain account, use the form Domain\SAMAccountName or the user principal name (for example user@fabrikam.com). Alternatively a built-in account can be provided, for example /WindowsServiceLogonAccount:"NT AUTHORITY\NETWORK SERVICE". + +*/WindowsServiceLogonPassword:WindowsServiceLogonPassword* +Required if the /WindowsServiceLogonAccount parameter is provided. + +--- + +### /Configure + +Configure supports the /NoPrompt switch for automated installation scenarios and will return a non-zero exit code on failure. + +For troubleshooting configuration errors, detailed logs can be found in the \_diag folder under the agent installation directory. + +*/ServerUrl:ServerUrl* +The server URL should not contain the collection name. For example, `http://example:8080/tfs` or `https://example.visualstudio.com` + +*/Name:AgentName* +The friendly name to identify the agent on the server. + +*/PoolName:PoolName* +The pool that will contain the agent, for example: */PoolName:Default* + +*/WorkFolder:WorkFolder* +The default work folder location is a *_work* folder directly under the agent installation directory. You can change the location to be outside of the agent installation directory, for example: */WorkFolder:C:\_work*. One reason you may want to do this is to avoid "path too long" issues on the file system. + +*/Force* +Replaces the server registration if a conflicting agent exists on the server. A conflict could be encountered based on the name. Or a conflict could be encountered if based on the ID a previously configured agent is being reconfigured in-place without unconfiguring first. + +*/NoStart* +Used when configuring an interactive agent to indicate the agent should not be started after the configuration completes. + +*/RunningAsService* +Used to indicate the agent should be configured to run as a Windows service. + +*/StartMode:(Automatic|Manual|Disabled)* + +--- + +### /ChangeWindowsServiceAccount + +Change Windows service account supports the /NoPrompt switch for automated installation scenarios and will return a non-zero exit code on failure. + +For troubleshooting errors, detailed logs can be found in the \_diag folder under the agent installation directory. + +--- + +### /Unconfigure + +--- + +### /Version + +Prints the version number. + +--- + +

    /?

    + +Prints usage information. + +--- + +[!INCLUDE [include](_shared/capabilities.md)] + +## Q&A + + + +[!INCLUDE [temp](_shared/qa-windows-agent-powershell-version.md)] + +[!INCLUDE [temp](_shared/qa-no-agent-with-capabilities.md)] + +### What version of the agent runs with my version of TFS? + +| TFS version | Agent version +|-|- +| 2015 RTM | 1.83.2 +| 2015 Update 1 | 1.89.0 +| 2015 Update 2 | 1.95.1 +| 2015 Update 3 | 1.95.3 + +#### Can I still configure and use XAML build controllers and agents? + +Yes. If you are an existing customer with custom build processes you are not yet ready to migrate, you can continue to use XAML builds, controllers, and agents. + +![Configure XAML build controllers and agents](_img/v1-windows/tfs-on-premises-xaml-build-system-configure-start.png) + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/actions/agents/v2-linux.md b/docs/build-release/actions/agents/v2-linux.md new file mode 100644 index 00000000000..3a42b32a5e1 --- /dev/null +++ b/docs/build-release/actions/agents/v2-linux.md @@ -0,0 +1,235 @@ +--- +title: Deploy an agent on Linux +description: Deploy an agent on Linux (Red Hat or Ubuntu) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 834FFB19-DCC5-40EB-A3AD-18B7EDCA976E +ms.manager: douge +ms.author: alewis +ms.date: 08/26/2016 +--- +# Deploy an agent on Linux + +**VSTS | TFS 2017 | TFS 2015** + +To build or deploy you'll need at least one agent. A Linux agent can build and deploy different kinds of apps, including Java and Android apps. We support Ubuntu, Red Hat, and CentOS. + +[!INCLUDE [include](_shared/concepts.md)] + +## Check prerequisites + +Make sure your machine is prepared with our prerequisites for either + +* [Ubuntu systems](https://aka.ms/vstsagentubuntusystem) + +* [Red Hat/CentOS systems](https://aka.ms/vstsagentredhatsystem) + +If you're building from a Subversion repo, you must install the Subversion client on the machine. + +

    Prepare permissions

    + +[!INCLUDE [include](_shared/v2/prepare-permissions.md)] + + +## Download and configure the agent + +### VSTS and TFS 2017 + +
      +
    1. Log on to the machine using the account for which you've prepared permissions as explained above.
    2. +
    3. In your web browser, sign on to VSTS or TFS, and navigate to the **Agent pools** tab: +[!INCLUDE [include](../../concepts/agents/_shared/agent-pools-tab.md)] +
    4. + +
    5. Click **Download agent**.
    6. + +
    7. On the **Get agent** dialog box, click **Linux**.
    8. + +
    9. Click the **Download** button. + +
    10. Follow the instructions on the page.
    11. +
    + +### TFS 2015 + +0. Browse to the [latest release on GitHub](https://github.com/Microsoft/vsts-agent/releases/latest). + +0. Follow the instructions on that page to download the agent. + +0. Configure the agent. + ``` +./config.sh + ``` + +### Server URL + +* VSTS: `https://{your-account}.visualstudio.com` + +* TFS 2017: `https://{your_server}/tfs` + +* TFS 2015: `http://{your_server}:8080/tfs` + +### Authentication type + +[!INCLUDE [include](_shared/v2/unix-authentication-types.md)] + +## Run interactively + +For guidance on whether to run the agent in interactive mode or as a service, see [Agents: Interactive vs. service](../../concepts/agents/agents.md#account). + +To run the agent interactively: + +0. If you have been running the agent as a service, [uninstall the service](#service_uninstall). + +0. Run the agent. + ```bash +./run.sh + ``` + +## Run as a systemd service + +If your agent is running on these operating systems you can run the agent as a systemd service: + +* Ubuntu 16 LTS or newer +* Red Hat 7.1 or newer + +We provide the `./svc.sh` script for you to run and manage your agent as a systemd service. + +> [!NOTE] +> If you have a different distribution, or if you prefer other approaches, you can use whatever kind of service mechanism you prefer. See [Service files](#service-files). + +### Commands + +#### Change to the agent directory + +For example, if you installed in the `myagent` subfolder of your home directory: + +```bash +cd ~/myagent$ +``` + +#### Install + +Command: + +```bash +sudo ./svc.sh install +``` + +This command creates a service file that points to `./runsvc.sh`. This script sets up the environment (more details below) and starts the agents host. + +#### Start + +```bash +sudo ./svc.sh start +``` + +#### Status + +```bash +sudo ./svc.sh status +``` + +#### Stop + +```bash +sudo ./svc.sh stop +``` + +

    Uninstall

    + +> You should stop before you uninstall. + +```bash +sudo ./svc.sh uninstall +``` + +

    Update environment variables

    + +When you start the service, it takes a snapshot of your PATH other useful environment variables such as PATH, LANG, JAVA_HOME, ANT_HOME, and MYSQL_PATH. If you need to update the variables (for example, after installing some new software): + +> [!div class="vscom-steps-container" ] +> 0.   +> ```bash +> ./env.sh +> ``` +> +> 0.   +> ```bash +> sudo ./svc.sh stop +> ``` +> +> 0.   +> ```bash +> sudo ./svc.sh start +> ``` + +### Run instructions before the service starts + +You can also run your own instructions and commands to run when the service starts. For example, you could set up the environment or call scripts. + +0. Edit `runsvc.sh`. + +0. Replace the following line with your instructions: + + ```bash +# insert anything to setup env when running as a service + ``` + +

    Service files

    + +When you install the service, some service files are put in place. + +#### systemd service file + +A systemd service file is created: + +`/etc/systemd/system/vsts.agent.{tfs-name}.{agent-name}.service` + +For example, you have configured an agent (see above) with the name `our-linux-agent`. The service file will be either: + +* VSTS: the name of your account. For example if you connect to `https://fabrikam.visualstudio.com` , then the service name would be `/etc/systemd/system/vsts.agent.fabrikam.our-linux-agent.service` + +* TFS: the name of your on-premises TFS AT server. For example if you connect to `http://our-server:8080/tfs`, then the service name would be `/etc/systemd/system/vsts.agent.our-server.our-linux-agent.service` + +`sudo ./svc.sh install` generates this file from this template: `./bin/vsts.agent.service.template` + +#### .service file + +`sudo ./svc.sh start` finds the service by reading the `.service` file, which contains the name of systemd service file described above. + +### Alternative service mechanisms + +We provide the `./svc.sh` script as a convenient way for you to run and manage your agent as a systemd service. But you can use whatever kind of service mechanism you prefer (for example: initd or upstart). + +You can use the template described above as to facilitate generating other kinds of service files. + +[!INCLUDE [include](_shared/v2/replace-agent.md)] + +[!INCLUDE [include](_shared/v2/remove-and-reconfigure-unix.md)] + +[!INCLUDE [include](_shared/v2/configure-help-unix.md)] + +[!INCLUDE [include](_shared/capabilities.md)] + +## Q&A + + + +### Why is sudo needed to run the service commands? + +`./svc.sh` uses `systemctl`, which requires `sudo`. + +Source code: [systemd.svc.sh.template on GitHub](https://github.com/Microsoft/vsts-agent/blob/master/src/Misc/layoutbin/systemd.svc.sh.template) + +[!INCLUDE [include](_shared/v2/qa-firewall.md)] + +[!INCLUDE [include](_shared/v2/qa-proxy-unix.md)] + +[!INCLUDE [include](_shared/v2/web-proxy-bypass.md)] + +[!INCLUDE [include](_shared/v2/qa-urls.md)] + +[!INCLUDE [include](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/actions/agents/v2-osx.md b/docs/build-release/actions/agents/v2-osx.md new file mode 100644 index 00000000000..0b751732c77 --- /dev/null +++ b/docs/build-release/actions/agents/v2-osx.md @@ -0,0 +1,296 @@ +--- +title: Deploy an agent on OSX +description: Deploy an OSX agent to build and deploy your iOS application. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 3D487E4E-D940-4DA9-BDE1-1F60E74DD6F1 +ms.manager: douge +ms.author: alewis +ms.date: 08/26/2016 +--- +# Deploy an agent on OSX + +**VSTS | TFS 2017 | TFS 2015** + +To build and deploy Xcode apps or Xamarin.iOS projects, you'll need at least one OSX agent. This agent can also build and deploy Java and Android apps. + +[!INCLUDE [include](_shared/concepts.md)] + +## Check prerequisites + +Make sure your machine is prepared with our [OSX system prerequisites](https://aka.ms/vstsagentosxsystem). + +

    Prepare permissions

    + +If you're building from a Subversion repo, you must install the Subversion client on the machine. + +[!INCLUDE [permissions](_shared/v2/prepare-permissions.md)] + + +## Download and configure the agent + +### VSTS and TFS 2017 + +
      +
    1. Log on to the machine using the account for which you've prepared permissions as explained above.
    2. +
    3. In your web browser, sign on to VSTS or TFS, and navigate to the **Agent pools** tab: +[!INCLUDE [include](../../concepts/agents/_shared/agent-pools-tab.md)] +
    4. + +
    5. Click **Download agent**.
    6. + +
    7. On the **Get agent** dialog box, click **OS X**.
    8. + +
    9. Click the **Download** button. + +
    10. Follow the instructions on the page.
    11. +
    + +### TFS 2015 + +0. Browse to the [latest release on GitHub](https://github.com/Microsoft/vsts-agent/releases/latest). + +0. Follow the instructions on that page to download the agent. + +0. Configure the agent. + ``` +./config.sh + ``` + +### Server URL + +* VSTS: `https://{your-account}.visualstudio.com` + +* TFS 2017: `https://{your_server}/tfs` + +* TFS 2015: `http://{your_server}:8080/tfs` + +### Authentication type + +[!INCLUDE [include](_shared/v2/unix-authentication-types.md)] + +## Run interactively + +For guidance on whether to run the agent in interactive mode or as a service, see [Agents: Interactive vs. service](../../concepts/agents/agents.md#account). + +To run the agent interactively: + +0. If you have been running the agent as a service, [uninstall the service](#service_uninstall). + +0. Run the agent. + ```bash +./run.sh + ``` + +## Run as a launchd service + +We provide the `./svc.sh` script for you to run and manage your agent as a launchd LaunchAgent service. The service has access to the UI to run your UI tests. + +> [!NOTE] +> If you prefer other approaches, you can use whatever kind of service mechanism you prefer. See [Service files](#service_files). + +### Tokens + +In the section below, these tokens are replaced: + +* `{agent-name}` + +* `{tfs-name}` + +For example, you have configured an agent (see above) with the name `our-osx-agent`. In the following examples, `{tfs-name}` will be either: + +* VSTS: the name of your account. For example if you connect to `https://fabrikam.visualstudio.com` , then the service name would be `vsts.agent.fabrikam.our-osx-agent` + +* TFS: the name of your on-premises TFS AT server. For example if you connect to `http://our-server:8080/tfs`, then the service name would be ` +vsts.agent.our-server.our-osx-agent` + +### Commands + +#### Change to the agent directory + +For example, if you installed in the `myagent` subfolder of your home directory: + +```bash +cd ~/myagent$ +``` + + +#### Install + +Command: + +```bash +./svc.sh install +``` + +This command creates a launchd plist that points to `./runsvc.sh`. This script sets up the environment (more details below) and starts the agent's host. + + +#### Start + +Command: + +```bash +./svc.sh start +``` + +Output: + +```bash +starting vsts.agent.{tfs-name}.{agent-name} +status vsts.agent.{tfs-name}.{agent-name}: + +/Users/{your-name}/Library/LaunchAgents/vsts.agent.{tfs-name}.{agent-name}.plist + +Started: +13472 0 vsts.agent.{tfs-name}.{agent-name} +``` + +The left number is the pid if the service is running. If second number is not zero, then a problem occurred. + +#### Status + +Command: +```bash +./svc.sh status +``` + +Output: + +```bash +status vsts.agent.{tfs-name}.{agent-name}: + +/Users/{your-name}/Library/LaunchAgents/vsts.{tfs-name}.{agent-name}.testsvc.plist + +Started: +13472 0 vsts.agent.{tfs-name}.{agent-name} +``` + +The left number is the pid if the service is running. If second number is not zero, then a problem occurred. + +#### Stop + +Command: + +```bash +./svc.sh stop +``` + +Output: + +```bash +stopping vsts.agent.{tfs-name}.{agent-name} +status vsts.agent.{tfs-name}.{agent-name}: + +/Users/{your-name}/Library/LaunchAgents/vsts.{tfs-name}.{agent-name}.testsvc.plist + +Stopped +``` + +

    Uninstall

    + +> You should stop before you uninstall. + +Command: + +```bash +./svc.sh uninstall +``` + +#### Automatic log on and lock + +The service runs when the user logs in. If you want the agent service start when the machine restarts, you can configure the machine it to automatically log on and lock on startup. See [Auto Logon and Lock](http://www.tuaw.com/2011/03/07/terminally-geeky-use-automatic-login-more-securely/). + +

    Update environment variables

    + +When you start the service, it takes a snapshot of your PATH other useful environment variables such as PATH, LANG, JAVA_HOME, ANT_HOME, and MYSQL_PATH. If you need to update the variables (for example, after installing some new software): + +> [!div class="vscom-steps-container" ] +> 0.   +> ```bash +> ./env.sh +> ``` +> +> 0.   +> ```bash +> ./svc.sh stop +> ``` +> +> 0.   +> ```bash +> ./svc.sh start +> ``` + +### Run instructions before the service starts + +You can also run your own instructions and commands to run when the service starts. For example, you could set up the environment or call scripts. + +0. Edit `runsvc.sh`. + +0. Replace the following line with your instructions: + +``` + +# insert anything to setup env when running as a service + +``` + +

    Service Files

    + +When you install the service, some service files are put in place. + +#### .plist service file + +A .plist service file is created: + +` +~/Library/LaunchAgents/vsts.agent.{tfs-name}.{agent-name}.plist +` + +For example: + +` +~/Library/LaunchAgents/vsts.agent.fabrikam.our-osx-agent.plist +` + +`sudo ./svc.sh install` generates this file from this template: `./bin/vsts.agent.plist.template` + +#### .service file + +`./svc.sh start` finds the service by reading the `.service` file, which contains the path to the plist service file described above. + +### Alternative service mechanisms + +We provide the `./svc.sh` script as a convenient way for you to run and manage your agent as a launchd LaunchAgent service. But you can use whatever kind of service mechanism you prefer. + +You can use the template described above as to facilitate generating other kinds of service files. For example, you modify the template to generate a service that runs as a launch daemon if you don't need UI tests and don't want to configure automatic log on and lock. See [Mac Developer Library: Creating Launch Daemons and Agents](https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html). + +[!INCLUDE [include](_shared/v2/replace-agent.md)] + +[!INCLUDE [include](_shared/v2/remove-and-reconfigure-unix.md)] + +[!INCLUDE [include](_shared/v2/configure-help-unix.md)] + +[!INCLUDE [include](_shared/capabilities.md)] + +## Q&A + + + +### Where can I learn more about how the launchd service works? + +[Mac Developer Library: Creating Launch Daemons and Agents](https://developer.apple.com/library/mac/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html) + +[launchd.plist manpage](https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man5/launchd.plist.5.html) + +[!INCLUDE [include](_shared/v2/qa-firewall.md)] + +[!INCLUDE [include](_shared/v2/qa-proxy-unix.md)] + +[!INCLUDE [include](_shared/v2/web-proxy-bypass.md)] + +[!INCLUDE [include](_shared/v2/qa-urls.md)] + +[!INCLUDE [include](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/actions/agents/v2-windows.md b/docs/build-release/actions/agents/v2-windows.md new file mode 100644 index 00000000000..30dd36c1052 --- /dev/null +++ b/docs/build-release/actions/agents/v2-windows.md @@ -0,0 +1,159 @@ +--- +title: Deploy an agent on Windows +description: Use Windows Build and Release agents to build and deploy your Windows and Azure code. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 20409B8F-A3A9-49A0-A418-1840BD7ADA8E +ms.manager: douge +ms.author: alewis +ms.date: 08/26/2016 +--- + +# Deploy an agent on Windows + +**VSTS | TFS 2017 | [TFS 2015](v1-windows.md) | [Previous versions (XAML builds)](https://msdn.microsoft.com/en-us/library/ms252495%28v=vs.120%29.aspx)** + +To build and deploy Windows, Azure, and other Visual Studio solutions you'll need at least one Windows agent. Windows agents can also build Java and Android apps. + +> Before you begin: +> * If your code is in [Visual Studio Team Services](https://www.visualstudio.com/products/visual-studio-team-services-vs) and the [hosted agent](../../concepts/agents/hosted.md) meets your needs, you can skip setting up a private Windows agent. +> * If your code is in an on-premises Team Foundation Server (TFS) 2015 server, see [Deploy an agent on Windows for on-premises TFS 2015](v1-windows.md). +> * Otherwise, you've come to the right place to set up an agent on Windows. Continue to the next section. + +[!INCLUDE [include](_shared/concepts.md)] + +## Check prerequisites + +Make sure your machine is prepared with our [Windows system prerequisites](https://aka.ms/vstsagentwinsystem). + +If you're building from a Subversion repo, you must install the Subversion client on the machine. + +

    Prepare permissions

    + +[!INCLUDE [permissions](_shared/v2/prepare-permissions.md)] + + +## Download and configure the agent + +
      +
    1. Log on to the machine using the account for which you've prepared permissions as explained above.
    2. +
    3. In your web browser, sign on to VSTS or TFS, and navigate to the **Agent pools** tab: +[!INCLUDE [include](../../concepts/agents/_shared/agent-pools-tab.md)] +
    4. + +
    5. Click **Download agent**.
    6. + +
    7. On the **Get agent** dialog box, click **Windows**.
    8. + +
    9. Click the **Download** button. + +
    10. Follow the instructions on the page.
    11. +
    + +### Server URL + +* VSTS: `https://{your-account}.visualstudio.com` + +* TFS 2017: `https://{your_server}/tfs` + +* TFS 2015: `http://{your-server}:8080/tfs` + +### Authentication type + +#### VSTS + +Choose **PAT**, and then paste the [PAT token you created](#permissions) into the command prompt window. + +#### TFS + +> [!IMPORTANT] +> +> Make sure your server is [configured to support the authentication method](configure-tfs-authentication.md) you want to use. + +When you configure your agent to connect to TFS, you've got the following options: + +* **Alternate** Connect to TFS using Basic authentication. After you select Alternate you'll be prompted for your credentials. + +* **Negotiate** Connect to TFS as a user other than the signed-in user via a Windows authentication scheme such as NTLM or Kerberos. After you select Negotiate you'll be prompted for credentials. + +* **Integrated** (Default) Connect a Windows agent to TFS using the credentials of the signed-in user via a Windows authentication scheme such as NTLM or Kerberos. You won't be prompted for credentials after you choose this method. + +* **PAT** Supported only on VSTS and TFS 2017 or newer. After you choose PAT, paste the [PAT token you created](#permissions) into the command prompt window. + +> [!NOTE] +> When using PAT as the authentication method, the PAT token is used only for the initial configuration of the agent. Learn more at [Communication with VSTS or TFS](../../concepts/agents/agents.md#communication). + +## Choose interactive or service mode + +For guidance on whether to run the agent in interactive mode or as a service, see [Agents: Interactive vs. service](../../concepts/agents/agents.md#account). + + If you configured the agent to run interactively, to run it: + + ```ps + .\run.cmd + ``` + +If you configured the agent to run as a service, it starts automatically. You can view and control the agent running status from the services snap-in. Run `services.msc` and look for "VSTS Agent (*name of your agent*)". + +If you need to change the logon account, don't do it from the services snap-in. Instead, see the information below to re-configure the agent. + +[!INCLUDE [include](_shared/v2/replace-agent.md)] + +## Remove and re-configure an agent + +To remove the agent: + +```ps +.\config remove +``` + +After you've removed the agent, you can [configure it again](#download-configure). + +## Help on other options + +To learn about other options: + +```ps +.\config --help +``` + +The help provides information on authentication alternatives and unattended configuration. + +[!INCLUDE [include](_shared/capabilities.md)] + +## Q&A + + + +[!INCLUDE [include](_shared/v2/qa-firewall.md)] + +### How do I configure the agent to work through a web proxy and connect to VSTS? + +In the agent root directory, create a .proxy file with your proxy server URL. + + ```ps +echo http://name-of-your-proxy-server:8888 | Out-File .proxy + ``` + +If your proxy doesn't require authentication, then you're ready to configure and run the agent as explained above. + +> [!NOTE] +> For backwards compatibility, if the proxy is not specified as described above, the agent also checks for a proxy URL from the VSTS_HTTP_PROXY environment variable. + +If your proxy requires authentication, the simplest way to handle it is to grant permissions to the user under which the agent runs. Otherwise, you can provide credentials through environment variables. When you provide credentials through environment variables, the agent keeps the credentials secret by masking them in job and diagnostic logs. To grant credentials through environment variables, set the following variables: + + ```ps +$env:VSTS_HTTP_PROXY_USERNAME = "proxyuser" +$env:VSTS_HTTP_PROXY_PASSWORD = "proxypassword" + ``` + +> [!NOTE] +> This procedure enables the agent infrastructure to operate behind a web proxy. Your build definition and scripts must still handle proxy configuration for each task and tool you run in your build. For example, if you are using a task that makes a REST API call, you must configure the proxy for that task. + +[!INCLUDE [include](_shared/v2/web-proxy-bypass.md)] + +[!INCLUDE [include](_shared/v2/qa-urls.md)] + +[!INCLUDE [include](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/actions/azure-rm-endpoint.md b/docs/build-release/actions/azure-rm-endpoint.md new file mode 100644 index 00000000000..44660289055 --- /dev/null +++ b/docs/build-release/actions/azure-rm-endpoint.md @@ -0,0 +1,131 @@ +--- +title: How to troubleshoot Azure Resource Manager service endpoints in VSTS and TFS +description: Troubleshoot Azure Resource Manager service endpoints in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: B43E78DE-5D73-4303-981F-FB86D46F0CAE +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- +# How to: Troubleshoot Azure Resource Manager service endpoints + +**VSTS | TFS 2017 | TFS 2015** + +This topic will help you resolve issues you may encounter when creating +a connection to Microsoft Azure using an **Azure Resource Manager** service endpoint. + + +## What happens when you create a Resource Manager service endpoint? + +You open the **Add Azure Resource Manager Service Endpoint** dialog, +provide a connection name, and select a subscription from drop-down +list of your subscriptions. + +![The Add Azure Resource Manager Service Endpoint dialog](_img/azure-rm-endpoint/azure-rm-endpoint-01.png) + +When you choose **OK**, the system: + +1. Connects to the Azure Active Directory (AAD) tenant for to the selected subscription +1. Creates an application in AAD on behalf of the user +1. After the application has been successfully created, assigns the application as a contributor to the selected subscription +1. Creates an Azure Resource Manager service endpoint using this application's details + + +## How to troubleshoot errors that may occur + +Errors that may occur when the system attempts to create the service endpoint include: + +* [Insufficient privileges to complete the operation](#privileges) +* [Failed to obtain an access token](#sessionexpired) +* [A valid refresh token was not found](#sessionexpired) +* [Failed to assign contributor role](#contributorrole) + + +### Insufficient privileges to complete the operation + +This typically occurs when the system attempts to create an +application in AAD on your behalf. + +![Insufficient privileges to complete the operation error](_img/azure-rm-endpoint/azure-rm-endpoint-02.png) + +This is a permission issue that may be due to the following causes: + +* [The user has only guest permission in the directory](#guestonly) +* [The user is not authorized to add applications in the directory](#notauthtoadd) + + +#### The user has only guest permission in the directory + +You must be a member of the **Global Admin** role in the directory in order +to create an Azure Resource Manager service endpoint. +The directory administrator has permission to change a user's role, as follows: + +1. Sign into to Azure Classic portal at [https://manage.windowsazure.com](https://manage.windowsazure.com) using an Administrator account. + +1. Choose **Active Directory** in the left navigation bar, select the directory + corresponding to the user subscription, and open the **USERS** tab. + + ![Opening the USERS tab in Azure Active Directory](_img/azure-rm-endpoint/azure-rm-endpoint-03.png) + +1. Select the user from the list and, in the **role** section change the + **ORGANIZATION ROLE** to **Global Admin**. + + ![Changing the ORGANIZATION ROLE to Global Admin](_img/azure-rm-endpoint/azure-rm-endpoint-04.png) + +1. Save the change. + + ![Saving the change](_img/azure-rm-endpoint/azure-rm-endpoint-05.png) + +It typically takes 15 to 20 minutes to apply the changes globally. +After this period has elapsed, the user can retry creating the service endpoint. + + +#### The user is not authorized to add applications in the directory + +You must have permission to add integrated applications in the directory. +The directory administrator has permission to change this setting, as follows: + +1. Sign into to Azure Classic portal at [https://manage.windowsazure.com](https://manage.windowsazure.com) using an Administrator account. + +1. Choose **Active Directory** in the left navigation bar, select the directory + corresponding to the user subscription, and open the **CONFIGURE** tab. + + ![Opening the CONFIGURE tab in Azure Active Directory](_img/azure-rm-endpoint/azure-rm-endpoint-06.png) + +1. Ensure the value of **USERS MAY ADD INTEGRATED APPLICATIONS** is set to + **YES**. If not, change it to **YES** and save the change. + + ![Ensure the value of the USERS MAY ADD INTEGRATED APPLICATIONS is set to YES](_img/azure-rm-endpoint/azure-rm-endpoint-07.png) + + +### Failed to obtain an access token or A valid refresh token was not found + +These errors typically occur when your session has expired. + +![Errors when the users session has expired](_img/azure-rm-endpoint/azure-rm-endpoint-08.png) + +To resolve these issues: + +* Sign out of VSTS or TFS. +* Open an InPrivate or incognito browser window and navigate to [https://www.visualstudio.com/team-services/](https://www.visualstudio.com/team-services/). +* If you are prompted to sign out, do so. +* Sign in using the appropriate credentials. +* Choose the account you want to use from the list. +* Select the project you want to add the service endpoint to. +* Create the service endpoint you need by opening the **Settings** page, selecting the **Services** tab, + choosing **New service endpoint**, and selecting **Azure Resource Manager**. + + +### Failed to assign Contributor role + +This error typically occurs when you do not have **Write** permission +for the selected Azure subscription when the system attempts to assign +the **Contributor** role. + +![Failed to assign Contributor role error](_img/azure-rm-endpoint/azure-rm-endpoint-09.png) + +To resolve this issue, ask the subscription administrator +to configure an **Admin Access** role for your identity. + +[!INCLUDE [rm-help-support-shared](../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/actions/ci-build-git.md b/docs/build-release/actions/ci-build-git.md new file mode 100644 index 00000000000..f93cfef8f2d --- /dev/null +++ b/docs/build-release/actions/ci-build-git.md @@ -0,0 +1,130 @@ +--- +title: Define a CI build process for your Git repo | VSTS Tutorial +description: Define a continuous integration (CI) build for your Git repo using Visual Studio Team Services +services: vsts +documentationcenter: '' +author: mlearned +manager: douge +editor: '' + +ms.assetid: E9684A1D-8D2B-4D5E-808A-D3677D314DB6 +ms.devlang: dotnetcore +ms.topic: get-started-article +ms.tgt_pltfrm: '' +ms.workload: '' +ms.date: 08/07/2017 +ms.custom: mvc +--- + +# Define a continuous integration (CI) build process for your Git repo + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a full-featured Git server for hosting your team's source code. To keep code quality high, add continuous integration (CI) builds to your team's process. CI builds automatically build and test code every time a team member pushes a commit to the server. You can take it a step further with pull request builds. + +In this tutorial, you learn how to: + +> [!div class="checklist"] +> * Set up CI for feature branches +> * Execute CI for a topic branch +> * Exclude or include tasks for builds based on the branch being built +> * Keep code quality high by building your pull requests +> * Use retention policies to clean up your completed builds + +## Prerequisites +* A working build definition for a Git repository in VSTS + +## Set up CI for a topic branch + +A common workflow with Git is to create temporary branches from your master branch. These branches are called topic or feature branches and help you isolate your work. In this workflow, you create a branch for a particular feature or bug fix. Eventually, you merge the code back to the master branch and delete the topic branch. Follow the steps below to create a branch from master and setup Continuous Integration (CI) to ensure your branch remains at high quality during the development cycle. + +1. Navigate to the **Code** hub in the VSTS portal. +2. Select a **repository** that currently has your CI build configured for the master branch. +3. Click **Branches**, then click **New Branch**. +4. Enter **features/feature-123** for the **Name** of your branch. Ensure you leave "Based on" set to **master** and click **Create branch**. +5. Click **Build & Release** menu and click **Builds**. +6. Locate the **Build Definition** that services your master branch. Click the **ellipsis** to the right of your definition. Click **Edit**. +7. Click the **Triggers** menu for your build. Ensure you have **Continuous Integration** enabled. +8. Click the **+ Add** icon under **Branch Filters**. +9. Type **features/*** in the **Branch specification** dropdown. The trigger supports CI for feature branches that match the wildcard and the master branch. + ![Code hub in VSTS portal](_img/ci-build-git/triggerwildcard.png) +11. Click the **Save & queue** menu and then click **Save**. + +## Execute CI for a topic branch + +Your topic branch is now ready for CI. Every code change for the branch will use an automated build process to ensure the quality of your code remains high. Practicing CI for your topic branches is a good practice and helps to minimize risk when merging back to master. + +1. Navigate to the **Code** hub in VSTS. +2. Choose your **repository** and click **Branches**. Choose your **topic branch**. +3. Click the **Files** menu. Make a quick code change by selecting a file and clicking **Edit**. Add some text and click **Commit**. The code is committed directly to your topic branch repository. + ![Edit code in browser](_img/ci-build-git/editcode.png) +4. Navigate to the **Build & Release** menu in VSTS and click **Builds**. +5. Click **Queued** under **Build Definitions** to view the queued builds. You should now see your new build definition executing for the topic branch. Wait for the build to finish. + +Your typical development process typically includes developing code locally and periodically pushing to your remote topic branch. Each push you make will result in a build process executing in the background. The build process helps you catch errors earlier and helps you to maintain a quality topic branch that can be safely merged to master. + +## Exclude or include tasks for builds based on the branch being built + +The master branch typically produces deployable artifacts such as binaries. You do not need to spend time creating and storing those artifacts for short-lived feature branches. You implement custom conditions in VSTS so that certain tasks only execute on your master branch during a build run. You can use a single build with multiple branches and skip or perform certain tasks based on conditions. + +1. Click **Build & Release** menu and click **Builds**. +2. Locate the **Build Definition** that services your master branch. Click the **ellipsis** to the right of your definition. Click **Edit**. +3. Choose the **Publish Artifact** task in your build definition. +4. Click **Control Options** on the bottom right hand part of your screen. +5. Click the dropdown for **Run this task** and choose **Custom conditions**. + ![Custom condition](_img/ci-build-git/customconditions.png) +6. Enter the following snippet: +``` +and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) +``` +7. Click the **Save & queue** menu and then click **Save & queue**. +8. Choose your **topic branch** from the dialogue. Click **Queue**. We are not building the master branch, and the task for **Publish artifacts** will not execute. +9. Click the build to monitor the progress. Once the build completes, confirm the build skipped the **Publish artifacts** task step. + + +## Keep code quality high by building your pull requests + +Use policies to protect your branches by requiring successful builds before merging pull requests. You have options to always require a new successful build before merging changes to important branches such as the master branch. There are other branch policy settings to build less frequently. You can also require a certain number of code reviewers to help ensure your pull requests are high quality and don’t result in broken builds for your branches. + +1. Navigate to the **Code** hub in VSTS. +2. Choose your **repository** and click **Branches**. Choose the **master branch**. 3. You will implement a branch policy to protect the master branch. Click the **ellipsis** to the right of your branch name and click **Branch policies**. +4. Choose the checkbox for **Protect this branch**. There are several options for protecting the branch. +5. Under the **Build validation** menu choose **Add build policy**. +6. On the dialogue box, choose the appropriate **build definition**. +7. Ensure **Trigger** is set to automatic and the **Policy requirement** is set to required. +8. Enter a descriptive **Display name** to describe the policy. +9. Click **Save** to create and enable the policy. Click **Save changes** at the top left of your screen. +10. To test the policy navigate to the **Pull Request** menu in VSTS. +11. Click **New pull request**. Ensure your topic branch is set to merge into your master branch. Click **create**. +12. Your screen displays the **policy** being executed. +13. Click the **policy name** to examine the build. If the build succeeds your code will be merged to master. If the build fails the merge is blocked. + +Once the work is completed in the topic branch and merged to master, you can delete your topic branch. You can then create additional feature or bug fix branches as necessary. + +## Use retention policies to clean up your completed builds + +For shorter-lived branches like topic branches, you may want to retain less history to reduce clutter and storage costs. If you create CI builds on multiple related branches, it will become less important to keep builds for all of your branches. Retention policies allow you to control and automate the cleanup of your various builds. + +1. Navigate to the **Build and Release** menu in VSTS. +2. Click the **Build** that you setup for your topic branch. +3. Click **Edit** at the top right of your screen. +4. Under the build definition name, click the **Retention** tab. Click **Add** to add a new retention policy. + ![Retention menu](_img/ci-build-git/retentionpolicy.png) +5. Type **features/*** in the **Branch specification** dropdown. This ensures any feature branches matching the wildcard will use the policy. +6. Set **Days to keep** to 1 and **Minimum to keep** to 1. +7. Click the **Save & queue** menu and then click **Save**. + +Policies are evaluated in order, applying the first matching policy to each build. The default rule at the bottom matches all builds. The retention policy will clean up build resources each day. You retain at least one build at all times. You can also choose to keep any particular build for an indefinite amount of time. + +## Next steps + +In this tutorial, you learned how to setup and manage CI with Git and VSTS. + +You learned how to: + +> [!div class="checklist"] +> * Set up and execute CI for a feature branch +> * Exclude or include tasks for builds based on the branch being built +> * Keep code quality high by building your pull requests +> * Use retention policies to clean up your completed build + +> [!div class="nextstepaction"] +> [Work with release definitions](./work-with-release-definitions.md) \ No newline at end of file diff --git a/docs/build-release/actions/ci-build-github.md b/docs/build-release/actions/ci-build-github.md new file mode 100644 index 00000000000..312eb004be3 --- /dev/null +++ b/docs/build-release/actions/ci-build-github.md @@ -0,0 +1,31 @@ +--- +title: Define a CI build process for your GitHub repo | VSTS Tutorial +description: Define a continuous integration (CI) build for your Git repo using Visual Studio Team Services +services: vsts +documentationcenter: '' +author: alewis +manager: douge +editor: '' + +ms.assetid: B61506B0-766C-49D1-B991-85BBFCBCD3E6 +ms.devlang: dotnetcore +ms.topic: get-started-article +ms.tgt_pltfrm: '' +ms.workload: '' +ms.date: 08/07/2017 +ms.custom: mvc +--- + +# Define a continuous integration (CI) build process for your GitHub repo + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) are open systems that you can use to set up CI/CD for your code, even if you manage it outside our system, for example in GitHub. + +In this tutorial, you learn how to: + +> [!div class="checklist"] +> * Configure CI for a GitHub repo +> * View build status in GitHub +> * Navigate to build logs from GitHub +> * View GitHub commits in a build + +[!INCLUDE [include](_shared/build-prerequisites.md)] \ No newline at end of file diff --git a/docs/build-release/actions/ci-cd-part-1.md b/docs/build-release/actions/ci-cd-part-1.md new file mode 100644 index 00000000000..0f87dc86e15 --- /dev/null +++ b/docs/build-release/actions/ci-cd-part-1.md @@ -0,0 +1,433 @@ +--- +title: Create your first build and release | VSTS +description: CI/CD novice? Create an automated build and release pipeline in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.topic: get-started-article +ms.assetid: 038A5329-1B8F-46D9-A0C3-DA3FCFA43996 +ms.manager: douge +ms.author: alewis +ms.date: 04/03/2017 +--- + +# CI/CD Hello world + +**VSTS** + +What is continuous integration (CI)? What is continuous deployment (CD)? Why should I care? How do I get started using Team Build and Release Management? + +Are any of these questions on your mind? If so, then you've come to the right place. We'll show you how to create a CI build that prints "Hello world" and then automatically creates a CD release that does the same. By the time you finish here, you'll see an end-to-end process run every time you push new code into your team project. + +## A quick introduction to CI/CD + +![A typical release pipeline for web applications](./_img/ci-cd/part-1/ReleasePipeline.png) + +CI means starting an automated build (and possibly running tests) whenever new code is committed to or checked into the team project's source control repository. This gives you immediate feedback that the code builds and can potentially be deployed. + +CD means starting an automated deployment process whenever a new successful build is available. + +Together, CI and CD mean that any code changes you commit to your repository are quickly validated and deployed to a test server, a live web site, or wherever you need it. + +Wanna try it? + +## Get set up with VSTS + +> Do you already have access to a VSTS account and to a team project that has a Git repo? And do you already have [permissions to create builds](../concepts/policies/permissions.md)? If so, then you can [skip to the next section](#add-script). If you're not sure, it takes just a moment to create a new account and there's no charge. + +1. [Create a new account in VSTS](http://go.microsoft.com/fwlink/?LinkId=307137). + +1. If you're prompted, then sign in using your personal Microsoft account or your work or school account. (Need help signing up? See [Sign up for Visual Studio Team Services](../../accounts/create-account-msa-or-work-student.md).) + +1. Create a Visual Studio Team Service account. Keep the option to use **Git** selected. + + + +1. Select the option to **Initialize the repository with a README or gitignore**. + +1. You see the home page for your first team project with a simple README.md file. + +

    Add a script to your repository

    + +Create a PowerShell script that prints `Hello world`. + +1. Go to the **Code** hub. + + ![Project home page with code hub highlighted](_img/ci-cd/part-1/project-home-page-click-code-hub.png) + +1. Add a file. + + ![On the the Files tab, from the repo node, select the 'Add file' option](_img/ci-cd/part-1/add-a-file.png) + +1. In the dialog box name your new file. + ``` +HelloWorld.ps1 +``` + +1. Copy and paste this script. + ```ps +Write-Host "Hello world" + ``` + +1. **Commit** (save) the file. + +> In this tutorial, our focus is on CI/CD, so we're keeping the code part simple. We're working in a VSTS Git repository directly in your web browser. +> +> When you're ready to begin building and deploying a real app, you can use a wide range of version control clients and services with VSTS CI builds. [Learn more](#version-control). + +## Create a build definition + +Create a build definition that prints "Hello world." + +1. Select the **Build & Release** hub in your VSTS project, and then the **Builds** tab. + + ![navigate to builds tab](_img/ci-cd/part-1/navigate-to-builds-tab.png) + +1. Create a new definition. + + ![builds-tab-mine-new-button](_img/ci-cd/part-1/builds-tab-mine-new-button.png) + +1. Start with an **empty process**. + +1. Click **Process** and specify whatever **Name** you want to use. For the **Default agent queue**, select **Hosted VS2017**. + +1. Make sure that **Get sources** is set with the **Repository** and **Branch** in which you created the script. + +1. On the left side click **Add Task**, and then on the right side click the **Utility** category, click the select the **PowerShell** task, and then click **Add**. + +1. On the left side click your new **PowerShell** script task. + +1. For the **Script Path** argument, click the ... button to browse your repository and select the script you created. + + ![PowerShell task](_img/ci-cd/part-1/powershell-task-1.png) + +1. Click **Save & queue**, and then click **Save**. + +> A build definition is the entity through which you define your automated build process. In the build definition, you compose a set of tasks, each of which perform a step in your build. The task catalog provides a rich set of tasks for you to get started. You can also add PowerShell or shell scripts to your build definition. + +## Publish an artifact from your build + +A typical build produces an artifact that can then be deployed to various environments in a release. Here to demonstrate the capability in a simple way, we'll simply publish the script as the artifact. + +1. On the **Tasks** tab, click **Add Task**. + +1. Click the **Utility** category, click the **Publish Build Artifacts** task, and then click **Add**. + + ![publish artifact task](_img/ci-cd/part-1/publish-artifact-task.png) + + **Path to Publish**: Click the ... button to browse and select the script you created. + + **Artifact Name** + + ``` +drop +``` + + **Artifact Type**: **Server**. + +> Artifacts are the files that you want your build to produce. Artifacts can be nearly anything your team needs to test or deploy your app. For example, you've got a .DLL and .EXE executable files and .PDB symbols file of a C# or C++ .NET Windows app. +> +> To enable you to produce artifacts, we provide tools such as copying with pattern matching, and a staging directory in which you can gather your artifacts before publishing them. See [Artifacts in Team Build](../concepts/definitions/build/artifacts.md). + +## Enable continuous integration (CI) + +1. Click the **Triggers** tab. + +1. Enable **Continuous integration**. + +> A continuous integration trigger on a build definition indicates that the system should automatically queue a new build whenever a code change is committed. You can make the trigger more general or more specific, and also schedule your build (for example, on a nightly basis). See [Build triggers](../concepts/definitions/build/triggers.md). + +## Save and queue the build + +Save and queue a build manually and test your build definition. + +1. Click **Save & queue**, and then click **Save & queue**. + +1. On the dialog box click the **Queue** button. + + This queues a new build on the hosted agent. Once the agent is allocated, you'll start seeing the live logs of the build. Notice that the PowerShell script is run as part of the build, and that "Hello world" is printed to the console. + + ![build console](_img/ci-cd/part-1/build-console.png) + +1. Go to the build summary. + + ![build console link to build summary](_img/ci-cd/part-1/build-console-link-to-build-summary.png) + +1. On the **Artifacts** tab of the build notice that the script is published as an artifact. + + ![artifacts explorer](_img/ci-cd/part-1/artifacts-explorer.png) + +> You can view a summary of all the builds or drill into the logs for each build at any time by navigating to the **Builds** tab in the **Build & Release** hub. For each build, you can also view a list of commits that were built and the work items associated with each commit. You can also run tests in each build and analyze the test failures. + +## Add some variables and commit a change to your script + +We'll pass some build variables to the script to make our process a bit more interesting. Then we'll commit a change to a script and watch the CI process run automatically to validate the change. + +1. Edit your build definition. + +1. On the **Tasks** tab, click the PowerShell script task. + +1. Add these arguments. + + ![PowerShell task](_img/ci-cd/part-1/powershell-task-2.png) + + **Arguments** + + ``` +-greeter "$(Build.RequestedFor)" -trigger "$(Build.Reason)" +``` + +1. Save the build definition. + +1. Go to the **Code** hub, **Files** tab. + +1. Select the **HelloWorld.ps1** file, and then **Edit** the file. + +1. Change the script as follows: + + ```ps +Param( + [string]$greeter, + [string]$trigger +) +Write-Host "Hello world" from $greeter +Write-Host Trigger: $trigger +``` + +1. **Commit** (save) the script. + +1. Go to the **Build & Release** hub, and notice that a build is automatically triggered by the change that you committed. + +1. Select the new build that was created and view its log. + +1. Notice that the person who changed the code has their name printed in the greeting message. You also see printed that this was a CI build. + + ![build summary powershell script log](_img/ci-cd/part-1/build-summary-powershell-script-log.png) + +> We just introduced the concept of build variables in these steps. We printed the value of a variable that is automatically predefined and initialized by the system. You can also define custom variables and use them either in arguments to your tasks, or as environment variables within your scripts. To learn more about variables, see [Build variables](../concepts/definitions/build/variables.md). + +## Create a release definition + +Define the process for running the script in two environments. + +1. Go to the **Build & Release** hub, and then to the **Releases** tab. + +1. Select the action to create a **New definition**. + +1. On the dialog box, select the **Empty** template and click **Next**. + +1. Make sure that your **Hello world** build definition that you created above is selected. Select **Continuous deployment**, and then click **Create**. + +1. Click **Add tasks** in the environment. + +1. On the **Task catalog** dialog box, click **Utility**, locate the **PowerShell** task, and then click its **Add** button. Click the **Close** button. + +1. For the **Script Path** argument, click the ... button to browse your artifacts and select the script you created. + +1. Add these **Arguments**: + + ``` +-greeter "$(Release.RequestedFor)" -trigger "$(Build.DefinitionName)" +``` + +1. Rename the environment **QA**. + + ![rename release environment](_img/ci-cd/part-1/rename-release-environment.png) + +1. **Clone** the **QA** environment. + + ![clone-release-environment](_img/ci-cd/part-1/clone-release-environment.png) + + Leave **Automatically approve** and **Deploy automatically...** selected, and click **Create**. + +1. Rename the new environment **Production**. + +1. Rename the release definition **Hello world**. + + ![rename release definition](_img/ci-cd/part-1/rename-release-definition.png) + +1. Save the release definition. + +> A release definition is a collection of environments to which the application build artifacts are deployed. It also defines the actual deployment process for each environment, as well as how the artifacts are promoted from one environment to another. +> +> Also, notice that we used some variables in our script arguments. In this case, we used [release variables](../concepts/definitions/release/variables.md) instead of the build variables we used for the build definition. + +## Deploy a release + +Run the script in each environment. + +1. Create a new release. + + ![create release](_img/ci-cd/part-1/create-release.png) + +1. Open the release that you just created. + + ![release created](_img/ci-cd/part-1/release-created.png) + +3. View the logs to get real-time data about the release. + + ![release logs](_img/ci-cd/part-1/release-logs.png) + + +> You can track the progress of each release to see if it has been deployed to all the environments. You can track the commits that are part of each release, the associated work items, and the results of any test runs that you've added to the release process. + +## Change your code and watch it automatically deploy to production + +We'll make one more change to the script. This time it will automatically build and then get deployed all the way to the production environment. + +1. Go to the **Code** hub, **Files** tab, edit the **HelloWorld.ps1** file, and change it as follows: + + ```ps +Param( + [string]$greeter, + [string]$trigger +) +Write-Host "Hello world" from $greeter +Write-Host Trigger: $trigger +Write-Host "Now that you've got CI/CD, you can automatically deploy your app every time your team checks in code." +``` + +1. Save the script. + +1. Click the **Builds** tab to see the build queued and run. + +1. After the build is completed, click the **Releases** tab, open the new release, and then go to the **Logs**. + + Your new code automatically is deployed in the **QA** environment, and then in the **Production** environment. + +![release script step final log](_img/ci-cd/part-1/release-script-step-final-log.png) + +> In many cases, you probably would want to edit the release process so that the production deployment happens only after some testing and approvals are in place. See [Environments in Release Management](../concepts/definitions/release/environments.md). + +## Put CI/CD to work for you + +We hope this tutorial gave you an understanding of the basic concepts of Team Build and Release Management. To get started building and deploying an app, we suggest you proceed next to one of these topics: + +* [ASP.NET](../apps/aspnet/build-aspnet-4.md) + +* [ASP.NET core](../apps/aspnet/build-aspnet-core.md) + +* [Node.js](../apps/nodejs/build-gulp.md) + +* [Build and deploy your app](../apps/index.md) + +## Q&A + +### Where can I read articles about DevOps and CI/CD? + + +[What is Continuous Integration?](https://www.visualstudio.com/learn/what-is-continuous-integration/) + +[What is Continuous Delivery?](https://www.visualstudio.com/learn/what-is-continuous-delivery/) + +[What is DevOps?](https://www.visualstudio.com/learn/what-is-devops/) + +

    What kinds of version control can I use

    + +We've used a Git repository in VSTS to keep things focused on CI/CD for this tutorial. + +When you're ready to get going with CI/CD for your app, you can use the version control system of your choice: + +* Clients + + * [Visual Studio Code for Windows, macOS, and Linux](https://code.visualstudio.com) + + * [Visual Studio with Git for Windows](../../git/share-your-code-in-git-vs.md) or [Visual Studio for Mac](https://www.visualstudio.com/vs/visual-studio-mac/) + + * [Visual Studio with TFVC](../../tfvc/share-your-code-in-tfvc-vs.md) + + * [Eclipse](../../git/share-your-code-in-git-eclipse.md) + + * [Xcode](../../git/share-your-code-in-git-xcode.md) + + * [IntelliJ](http://java.visualstudio.com/docs/tools/intellij) + + * [Command line](../../git/share-your-code-in-git-cmdline.md) + +* Services + + * [VSTS](https://www.visualstudio.com/team-services/) + + * Git service providers such as GitHub and Bitbucket + + * Subversion + +### How do I replicate a definition? + +If your definition has a pattern that you want to replicate in other definitions, clone it, export it, or save it as a template. + +![all-definitions-build-action-menu-replicate-actions](_img/ci-cd/part-1/all-definitions-build-action-menu-replicate-actions.png) + +After you clone a definition, you can make changes and then save it. + +After you export a definition, you can import it from the **All Definitions** tab. + +After you create a template, your team members can use it to follow the pattern in new definitions. + +> [!TIP] +> +> If you're using the **New Build Editor**, then your custom templates are shown at the bottom of the list. + +### How do I work with drafts? + +If you're editing a build definition and you want to test some changes that are not yet ready for production, you can save it as a draft. + +![save-as-draft](_img/ci-cd/part-1/save-as-draft.png) + +You can edit and test your draft as needed. + +![edit draft](_img/ci-cd/part-1/edit-draft.png) + +When you're ready you can publish the draft to merge the changes into your build definition. + +![publish draft](_img/ci-cd/part-1/publish-draft.png) + +Or, if you decide to discard the draft, you can delete it from the **All Definition** tab shown above. + +

    What else can I do when I queue a build?

    + +You can queue builds [automatically](../concepts/definitions/build/triggers.md) or manually. + +When you manually queue a build, you can, for a single run of the build: + +* Specify the [queue](../concepts/agents/pools-queues.md) into which the build goes. + +* Add and modify some [variables](../concepts/definitions/build/variables.md). + +* Add [demands](../concepts/definitions/build/options.md#demands). + +* In a Git repository + + - Build a [branch](../../git/tutorial/branches.md) or a [tag](http://git-scm.com/book/en/v2/Git-Basics-Tagging). + + - Build a [commit](../../git/tutorial/commits.md). + +* In a TFVC repository + + - Specify the source version as a [label](https://msdn.microsoft.com/en-us/library/ms181439.aspx) or [changeset](https://msdn.microsoft.com/en-us/library/ms181408.aspx). + + - Run a private build of a [shelveset](https://msdn.microsoft.com/en-us/library/ms181403.aspx). (You can use this option on either a [hosted agent](../concepts/agents/hosted.md) or a [private windows agent](../actions/agents/v2-windows.md). You cannot use it with a cross-platform agent.) + +### Where can I learn more about build definition settings? + +To learn more about build definition settings, see: + +* [Getting sources](../concepts/definitions/build/repository.md) + +* [Tasks](../tasks/index.md) + +* [Variables](../concepts/definitions/build/variables.md) + +* [Triggers](../concepts/definitions/build/triggers.md) + +* [Options](../concepts/definitions/build/options.md) + +* [Retention](../concepts/policies/retention.md) + +* [History](../concepts/definitions/build/history.md) + +### How do I programmatically create a build definition? + +[REST API Reference: Create a build definition](../../integrate/index.md) + + + diff --git a/docs/build-release/actions/create-deploy-releases.md b/docs/build-release/actions/create-deploy-releases.md new file mode 100644 index 00000000000..b88bef05b76 --- /dev/null +++ b/docs/build-release/actions/create-deploy-releases.md @@ -0,0 +1,135 @@ +--- +title: Create and deploy a release with Release Management +description: Create and deploy a release with Release Management in Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: DCAD8C16-242E-4672-A5C6-5894C25CAF11 +ms.manager: douge +ms.author: ahomer +ms.date: 02/16/2017 +--- + +# How to: Create and deploy a release + +[!INCLUDE [version-rm-dev14](../_shared/version-rm-dev14.md)] + +You can create a [release](../concepts/releases/index.md) from the +[Releases](#create-from-release) tab, the [Builds](#create-from-build) tab, and as part of a +[continuous deployment](../concepts/definitions/release/triggers.md) scenario. +You can also create a [draft](#create-draft) release. After you create a release, +you may need to [deploy](#deploy-command) (and redeploy) it manually. + +[What's the difference between a release definition and a release?](../concepts/releases/index.md) + +

    Create a release from the Releases tab

    + +1. In the list of releases for a definition, choose **Create Release** + from the **Release** drop-down list. Or select the release definition in the left + column list of release definitions, open the shortcut menu, and choose **Release**. + + ![Creating a new release manually](_img/create-deploy-releases/create-release-manually-01.png) + + Alternatively, open the definition for editing. Then choose **Create Release** + from the **Release** drop-down list. + + ![Creating a new release manually](_img/create-deploy-releases/create-release-manually-02.png) + +1. In the **Create new release** dialog, optionally enter a description + for this release. Then select the version of the linked build artifacts + you want to include in this release. If the version you want to use is not + shown in the list, type the version number. + + ![Specifying details of a release](_img/create-deploy-releases/create-release-manually-03.png) + + For artifact sources of type Build, you must enter the **BuildId** value, + not the **BuildNumber**. See [Artifact variables](../concepts/definitions/release/variables.md#artifact-variables). + +>Specifying manual deployment for an environment is one way to prevent a deployment +happening until you are sure it is ready to go. However, you can also use +approvals at intermediate stages to pause a release and allow +it to be cancelled before it reaches the target or final environment. +For more details, see [Approvals](../concepts/definitions/release/environments.md#approvals). + +

    Create a release from the Builds tab

    + +If you have not set the [continuous deployment trigger](../concepts/definitions/release/triggers.md), +or you have not defined a fully orchestrated pipeline for deploying the artifacts +specified in your releases, you will need to manually initiate the deployment +for some environments. + +1. Open the **Builds** tab of the **Build & Release** hub and select a build result + (not the build definition name). + + ![Selecting a build in the Builds tab](_img/create-deploy-releases/build-release-01.png) + +1. In the build summary page, choose **Release**. + + ![Creating a release from the Builds tab](_img/create-deploy-releases/build-release-02.png) + + Alternatively, if the build has not yet been deployed, + choose the **Create release** link in the **Deployments** section. + + ![Creating a release from the Builds tab build status view](_img/create-deploy-releases/build-release-03.png) + +

    Create a draft release

    + +If you're editing a release definition and you want to test some +changes that are not yet ready for production, you can create a +draft release. + +![Creating a draft release](_img/create-deploy-releases/create-draft-release.png) + +Make the changes you need (they don't affect the original +definition), save the draft definition, and start it. + +![Starting a draft release](_img/create-deploy-releases/start-draft-release.png) + +

    Deploy a release

    + +When you create a from a release definition, you can see the current +status of that release in the **Summary** view. In most cases, deployment +of the release to all environments may occur automatically through +[environment deployment triggers](../concepts/definitions/release/triggers.md#env-triggers). +However, where this is not the case (as described in [Releases](../concepts/releases/index.md)), +you must initiate deployment to environments manually. + +Start the deployment to any environments that have not been deployed +by opening the shortcut menu from the ellipses (**...**) in the **Actions** +column and choosing **Deploy**. + +![Starting a deployment in a release](_img/create-deploy-releases/deploy-manually-01.png) + +Alternatively, choose the environment you want to deploy to from the **Deploy** +drop-down list in the toolbar. + +![Starting a deployment using the Deploy drop-down list](_img/create-deploy-releases/deploy-manually-02.png) + +>By selecting an environment that is not the final one, you can test the initial steps +and tasks in a release safe in the knowledge that it will stop before, for example, +deployment to a live production environment. You can also insert an _agentless phase_ +into a release definition, and use it to enable manual intervention in a release pipeline. +For more details, see [Task phases](../concepts/process/phases.md). + +## See also + +* [Releases](../concepts/releases/index.md) + +* [Work with release definitions](work-with-release-definitions.md) + +* [View and manage releases](view-manage-releases.md) + +* [Monitor releases and debug deployment issues](debug-deployment-issues.md) + +## Q&A + + + +### How do I programmatically create a release definition? + +[Release Management REST API](../../integrate/index.md) + +[!INCLUDE [qa-versions](../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/actions/debug-deployment-issues.md b/docs/build-release/actions/debug-deployment-issues.md new file mode 100644 index 00000000000..8743f100b5e --- /dev/null +++ b/docs/build-release/actions/debug-deployment-issues.md @@ -0,0 +1,109 @@ +--- +title: Monitor releases and debug deployment issues +description: Monitor releases and debug deployment issues with Release Management in Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 37894F28-12AA-44DE-9371-AB1F0CDDDC71 +ms.manager: douge +ms.author: ahomer +ms.date: 02/16/2017 +--- + +# How To: Monitor releases and debug deployment issues + +[!INCLUDE [version-rm-dev14](../_shared/version-rm-dev14.md)] + +Release Management creates comprehensive log files as it +executes a release and deploys artifacts. Use these log files +to monitor and debug your releases, and add additional +information to them when required by running a release in +[debug mode](#debug-mode). + +## View release log files + +Select the release you are interested in and open it. + +![Opening the details of a release](_img/debug-deployment-issues/overview-03c.png) + +In the release **Summary** page, choose the **Logs** tab link. +The **Logs** page shows the status for each step or task of the release, for each +of the environments in the release definition. If the release is still running, +you see the live display of the log file as it is generated by the agent. + +![Viewing the release log page for an in-progress release](_img/debug-deployment-issues/logs-in-progress-02a.png) + +After a release has completed, +irrespective of whether it succeeded, failed, or was abandoned, this page shows the +log file, the details, and the history for each step or task. You can download +the log file for each task, or download all of the log files as a zip file. + +![The Logs page showing a list of activities for the release](_img/debug-deployment-issues/logs-released-02.png) + +>You can run your deployments in [debug mode](#debug-mode) +to show additional information that can help you resolve issues and failures. + +If you don't want to see the live log output, hide it using the **Details pane** +drop-down list at the top right of the page. When the details pane is hidden, you +can sort the list in ascending or descending order based on the values in the +columns by clicking the column headings (the +![sort by column values](_img/debug-deployment-issues/column-sort-icon.png) +icon shows the current sorting column). + +![Hiding the live log file and sorting the results](_img/debug-deployment-issues/summary-details-off-01.png) + +As the list of environments and tasks grows, including the history for earlier releases, +it may be more difficult to find individual items. Filter the list to show just +approvals or just tasks using the **View** drop-down list at the top right of the page. + +![Viewing just approvals or just tasks in the Logs page](_img/debug-deployment-issues/summary-approvals-only-01.png) + +

    Run a release in debug mode

    + +Show additional information as a release executes and in the log files +by running the entire release, or just the tasks in an individual +release environment, in debug mode. This can help you resolve issues and failures. + +* To initiate debug mode for an entire release, add a variable + named `System.Debug` with the value `true` to the **Variables** + tab of a release definition. + +* To initiate debug mode for a single environment, open the + **Configure environment** dialog from the shortcut menu + of the environment and add a variable named `System.Debug` + with the value `true` to the **Variables** tab. + +* Alternatively, create a [variable group](../concepts/library/variable-groups.md) + containing a variable named `System.Debug` with the value `true` + and link this variable group to a release definition. + +For more information about configuring environment variables, +see [this topic](../concepts/definitions/release/variables.md). + +If you get an error related to an Azure RM service endpoint, +see [How to: Troubleshoot Azure Resource Manager service endpoints](../actions/azure-rm-endpoint.md). + +## See also + +* [Releases](../concepts/releases/index.md) + +* [Work with release definitions](work-with-release-definitions.md) + +* [Create and deploy a release from a release definition](create-deploy-releases.md) + +* [View and manage releases](view-manage-releases.md) + +## Q&A + + + +### Where can I learn step-by-step how to build and release my app? + +[Examples](../apps/index.md) + +[!INCLUDE [qa-agents](../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/actions/define-multistage-release-process.md b/docs/build-release/actions/define-multistage-release-process.md new file mode 100644 index 00000000000..1ed01662b68 --- /dev/null +++ b/docs/build-release/actions/define-multistage-release-process.md @@ -0,0 +1,258 @@ +--- +title: Define a multi-stage CD release process | VSTS Tutorial +description: Define a multi-stage continuous deployment (CD) process for your ASP.NET Core app using Visual Studio Team Services +services: vsts +documentationcenter: '' +author: ahomer +manager: douge +editor: '' + +ms.assetid: 12F57ADB-49B9-4E21-A346-5EDB1D1EC2F7 +ms.devlang: dotnetcore +ms.topic: get-started-article +ms.tgt_pltfrm: '' +ms.workload: '' +ms.date: 07/31/2017 +ms.custom: mvc +--- + +# Define your multi-stage continuous deployment (CD) process + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly +configurable and manageable pipeline for releases to multiple environments +such as development, staging, QA, and production environments; including +requiring approvals at specific stages. + +In this tutorial, you learn about: + +> [!div class="checklist"] +> * Configuring triggers within the release pipeline +> * Extending a release definition by adding environments +> * Configuring the environments as a multi-stage release pipeline +> * Adding approvals to your release pipeline +> * Creating a release and monitoring the deployment to each environment + +## Prerequisites + +You'll need: + +* A release definition that contains at least one environment. If you don't already have one, + you can create it by working through any of the following quickstarts and tutorials: + + - [Deploy to an Azure Web App](../apps/cd/deploy-webdeploy-webapps.md) + - [Build and Deploy to an Azure Web App](../apps/cd/azure/aspnet-core-to-azure-webapp.md) + - [Deploy to IIS web server on Windows](../apps/cd/deploy-webdeploy-iis-deploygroups.md) + + or see [How to: Work with release definitions](work-with-release-definitions.md). + +* Two separate targets where you will deploy the app. These could be virtual machines, + web servers, on-premises physical deployment groups, or other types of deployment target. + In this example, we are using Azure App Services website instances. + If you decide to do the same, you will have to choose names that are unique, but it's a good idea to include + "QA" in the name of one, and "Production" in the name of the other so that you + can easily identify them. If you need help, follow the steps in + [this example](../apps/cd/azure/aspnet-core-to-azure-webapp.md#create-webapp-portal). + +## Configure the triggers in your release definition + +In this section, you will check that the triggers you need for continuous deployment are configured in your release definition. + +1. In the **Build & Release** hub, open the **Releases** tab. Select your release definition and, in + the right pane, choose **Edit**. + + ![Opening the release definition for editing](_img/define-multistage-release-process/open-for-edit.png) + +1. Choose the **Continuous deployment trigger** icon in the **Artifacts** section to open the trigger panel. + Make sure this is enabled so that a new release is created after every new successful build is completed. + + ![Viewing the continuous integration trigger setting](_img/define-multistage-release-process/ci-trigger.png) + + For more information, see [Release triggers](../concepts/definitions/release/triggers.md?toc=/vsts/deploy-azure/toc.json) + in the Release Management documentation. + +1. Choose the **Pre-deployment conditions** icon in the **Environments** section to open the conditions panel. + Make sure that the trigger for deployment to this environment is set to **Release**. + This means that a deployment will be initiated automatically when a new release is created from this release definition. + + ![Viewing the environment trigger setting](_img/define-multistage-release-process/environment-trigger.png) + + Notice that you can also define artifact filters that determine a condition for the release to proceed, + and set up a schedule for deployments. You can use can features to, for example, specify a branch from + which the build artifacts must have been created, or a specific time of day when you know the app will not be heavily used. + For more information, see [Environment triggers](../concepts/definitions/release/triggers.md?toc=/vsts/deploy-azure/toc.json) + in the Release Management documentation. + +## Extend a release definition by adding environments + +In this section, you will add a new environment to the release definition. The two environments will deploy your app to the +"QA" and the "Production" targets (in our example, two Azure App Services websites). This is a typical scenario where you deploy initially to a test or staging server, and then to a +live or production server. Each [environment](../concepts/definitions/release/environments.md?toc=/vsts/deploy-azure/toc.json) +represents one deployment target, though that target could be a physical or virtual server, +a groups of servers, or any other legitimate physical or virtual deployment target. + +1. In the **Pipeline** tab of your release definition, select the existing environment and rename it to **Production**. + + ![Renaming the existing environment](_img/define-multistage-release-process/rename-environment-prod.png) + +1. Open the **+ Add** drop-down list and choose **Clone environment** (the clone option is available only + when an existing environment is selected). + + ![Cloning the existing environment](_img/define-multistage-release-process/clone-environment.png) + + Typically, you want to use the same deployment methods with a test and a production environment + so that you can be sure the deployed apps will behave in exactly the same way. Therefore, cloning an existing + environment is a good way to ensure you have the same settings for both. Then you just need to change the deployment + targets (the websites where each copy of the app will be deployed). + +1. The clone of the environment appears after the existing environment in the pipeline, and has the name **Copy of Production**. + Select this environment and, in the **Environment** panel, change the name to **QA**. + + ![Renaming the clone environment](_img/define-multistage-release-process/rename-copy-environment.png) + +1. To reorganize the environments in the pipeline, choose the **Pre-deployment conditions** icon for the **QA** environment and + set the trigger to **After release**. The pipeline diagram changes to show that the deployment to the two environments will + now execute in parallel. + + ![Changing the QA environment trigger](_img/define-multistage-release-process/change-trigger-qa.png) + +1. Choose the **Pre-deployment conditions** icon for the **Production** environment and + set the trigger to **After environment**, then select **QA** in the **Environments** drop-down list. + The pipeline diagram changes to show that the deployment to the two environments will + now execute in the required order. + + ![Changing the Production environment trigger](_img/define-multistage-release-process/change-trigger-prod.png) + + Notice that you can specify deployment to start when a deployment to the previous environment is _partially_ successful. + Usually, this means the deployment tasks were set to continue the deployment even if a specific non-critical task failed + (the default is that all tasks must succeed). You're most likely to set this option if you create a pipeline containing + [fork and join deployments](../../build-release/concepts/definitions/release/triggers.md?toc=/vsts/deploy-azure/toc.json) + that deploy to different environments in parallel. + +1. Open the **Tasks** drop-down list and choose the **QA** environment. + + ![Open the tasks pane for the QA environment](_img/define-multistage-release-process/open-qa-tasks.png) + +1. Recall that this environment is a clone of the original **Production** environment in the release definition. + Therefore, currently, it will deploy the app to the same target as the **Production** environment. Depending on the + tasks that you are using, change the settings so that this environment deploys to your "QA" target. In our example, + using Azure App Services websites, we just need to select the **Deploy Azure App Service** task and select the "QA" + website instead of the "Production" website. + + ![Change the deployment target the QA environment](_img/define-multistage-release-process/change-target-environment.png) + + If you are using a different type of task to deploy your app, the way you change the target for the deployment + may differ. For example, if you are using deployment groups, you may be able to select a different deployment group, + or a different set of tags within the same deployment group. + +## Add approvals within a release definition + +The release definition you have modified deploys to test and then to production. If the deployment to test fails, the trigger +on the production environment does not fire, and so it is not deployed to production. However, it is typically the case that +you want the deployment to pause after _successful_ deployment to the test website so that you can verify the app is working correctly before +you deploy to production. In this section, you will add an approval step to the release definition to achieve this. + +1. Back in the **Pipeline** tab of the release definition, choose the **Pre-deployment conditions** icon in the **Environments** section + to open the conditions panel. Scroll down to the **Pre-deployment approvers** section and expand it using the "down arrow" icon. + You can see that the approval type is set to **Automatic**, which means that deployment to this environment, when initiated by any + of the environment triggers, will be approved without user intervention - and deployment will commence immediately. + + ![Viewing the pre-deployment approvers settings](_img/define-multistage-release-process/open-approvers.png) + +1. Change the approval type to **Specific users** and choose your account from the list. You + can type part of a name to search for matches. + + ![Selecting the pre-deployment approvers](_img/define-multistage-release-process/select-approvers.png) + + You can add as many approvers as you need, both individual accounts and account groups. + It's also possible to set up post-deployment approvals by choosing the icon at the right side of the environment item in the pipeline diagram. + For more information, see [Environments in Release Management](../../build-release/concepts/definitions/release/environments.md?toc=/vsts/deploy-azure/toc.json). + +1. Save the modified release definition. + + ![Save the release definition](_img/define-multistage-release-process/save-definition.png) + +## Create a release + +Now that you have completed the modifications to the release definition, it's time to start the deployment. To do this, you +create a release from the release definition. A release may be created automatically; for example, the continuous deployment +trigger is set in the release definition. This means that modifying +the source code will start a new build and, from that, a new release. However, in this section you will create a new release manually. + +1. Open the **Release** drop-down list and choose **Create release**. + + ![Creating a new release](_img/define-multistage-release-process/create-release.png) + +1. Enter a description for the release, check that the correct artifacts are selected, and then choose **Queue**. + + ![Queuing the new release](_img/define-multistage-release-process/queue-release.png) + +1. After a few moments, a banner appears indicating that the new release was created. + Choose the link (the name of the release). + + ![The link to the newly created release](_img/define-multistage-release-process/release-link.png) + +1. The release summary page opens showing details of the release. In the **Environments** section, + you will see the deployment status for the "QA" environment change from "IN PROGRESS" to "SUCCEEDED" and, at that point, + a banner appears indicating that the release is now waiting for approval. + When a deployment to an environment is pending or has failed, a blue (i) information icon is shown. + Point to this to see a pop-up containing the reason. + + ![Release summary showing link for approval](_img/define-multistage-release-process/approval-waiting.png) + + Other views, such as the list of releases, also display an icon that indicates approval is pending. + The icon shows a pop-up containing the environment name and more details when you point to it. + This makes it easy for an administrator to see which releases are awaiting approval, as well as the overall progress of all releases. + + ![Release list showing link for approval](_img/define-multistage-release-process/list-approval-waiting.png) + +1. Choose the **Approve or Reject** link to open the approval dialog. Enter a brief note about the + approval, and choose **Approve**. + + ![Approving the release](_img/define-multistage-release-process/approve-dialog.png) + + Notice that you can defer a deployment to a specific day and time; for example, a time when you expect the app to be only lightly loaded. + You can also reassign the approval to another user. Release administrators can open _any_ approval + and over-ride it to accept or reject that deployment. + +## Monitor and track deployments + +In this section, you will see how you can monitor and track deployments - in this example to two Azure App Services websites - +from the release you created in the previous section. + +1. In the release summary page, choose the **Logs** link. While the deployment is taking place, + this page shows the live log from the agent and, in the left pane, an indication of the status + of each operation in the deployment process for each environment. + + ![Viewing the live deployment log](_img/define-multistage-release-process/live-logs-deployment.png) + +1. After the deployment is complete, the entire log file is displayed in the right pane. + Select any of the process steps in the left pane to show just the log file contents for that step. + This makes it easier to trace and debug individual parts of the overall deployment. Alternatively, download + the individual log files, or a zip of all the log files, from the icons and links in the page. + + ![Viewing and downloading individual log files](_img/define-multistage-release-process/download-logs.png) + +1. Open the **Summary** tab to see the overall detail of the release. It shows details of the build and + the environments it was deployed to - along with the deployment status and other information about + the release. + + ![Viewing the summary page](_img/define-multistage-release-process/final-summary.png) + +1. Select each of the environment links to see more details about + existing and pending deployments to that specific environment. + You can use these pages to verify that the same build was deployed to both environments. + + ![Viewing details from one environment](_img/define-multistage-release-process/environment-result-details.png) + +1. Open the deployed production app in your browse. For example, for an Azure App Services website, from the URL `http://[your-app-name].azurewebsites.net` + + ![Viewing the deployed app in the production environment](_img/define-multistage-release-process/finished-app.png) + +If you are having problems with a deployment, you can get more information from the log files by +running the release in debug mode. For more information, see +[How To: Monitor releases and debug deployment issues](../../build-release/actions/debug-deployment-issues.md?toc=/vsts/deploy-azure/toc.json). + +## Next step + +> [!div class="nextstepaction"] +> [Deploy to IIS web servers on Windows](../apps/cd/deploy-webdeploy-iis-deploygroups.md) diff --git a/docs/build-release/actions/migrate-from-xaml-builds.md b/docs/build-release/actions/migrate-from-xaml-builds.md new file mode 100644 index 00000000000..9cffc33a552 --- /dev/null +++ b/docs/build-release/actions/migrate-from-xaml-builds.md @@ -0,0 +1,341 @@ +--- +title: Migrate from XAML builds +description: Migrate from XAML builds to new builds in your Team Foundation Server (TFS) or Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 77D7057E-FE9B-4DF8-89CC-244E2A38CA35 +ms.manager: douge +ms.author: alewis +ms.date: 05/19/2017 +--- + +# Migrate from XAML builds to new builds + +**VSTS | TFS 2017 RTM | XAML builds** + +We introduced XAML build automation capabilities based on the Windows Workflow Foundation in Team Foundation Server (TFS) 2010. We released another version of [XAML builds](http://msdn.microsoft.com/library/ms181709%28v=vs.120%29.aspx) in TFS 2013. + +After that we sought to expand beyond .NET and Windows and add support for other kinds of apps that are based on operating systems such as macOS and Linux. It became clear that we needed to switch to a more open, flexible, web-based foundation for our build automation engine. In early 2015 in VSTS, and then in TFS 2015, we introduced a simpler task- and script-driven cross-platform build system. + +Because the systems are so different, there's no automated or general way to migrate a XAML build definition into a new build definition. The migration process is to manually create the new build definitions that replicate what your XAML builds do. + +If you're building standard .NET applications, you probably used our default templates as provided out-of-the-box. In this case the process should be reasonably easy. + +If you have customized your XAML templates or added custom tasks, then you'll need to also take other steps including writing scripts, installing extensions, or creating custom tasks. + +## Overview of the migration effort + +Here are the steps to migrate from XAML builds to newer builds: + +1. If you're using a private TFS server, [set up agents](agents/v2-windows.md) to run your builds. + +1. To get familiar with the new build system, create a ["Hello world" build definition](ci-cd-part-1.md). + +1. Create a new build definition intended to replace one of your XAML build definitions. + + 1. Create a new build definition. + + 1. Port your XAML settings. + +1. On the [General tab](#general-tab), disable the XAML build definition. + +1. Repeat the previous two steps for each of your XAML build definitions. + +1. Take advantage of new build features and learn more about the kinds of apps you can build. + +1. Learn how to customize, and if necessary extend your system. + +1. When you no longer need the history and artifacts from your XAML builds, delete the XAML builds, and then the XAML build definitions. + + > [!WARNING] + > After you delete the XAML builds and definitions, you cannot get them back. + +## Create new build definitions + +If you're building a standard .NET app, you're probably using one of the out-of-the-box build templates such as TfvcTemplate.12.xaml or GitTemplate.12.xaml. In this case, it will probably just take you a few clicks to create build definitions in the new build system. + +
      + [!INCLUDE [include](../_shared/begin-create-build-definition.md)] + +
    1. Select a template to add the commonly used tasks to your build definition: +
        +
      • TFS 2017 RTM: Visual Studio template
      • +
      • VSTS: .NET Desktop template
      • +
      +
    2. + +
    3. Make any necessary changes to your build definition to replicate your XAML build definition. The tasks added by the template should simply work in many cases. But if you changed process parameters or other settings in your XAML build definitions, below are some pointers to get you started replicating those changes.
    4. +
    + +## Port your XAML settings + +In each of the following sections we show the XAML user interface, and then provide a pointer to the place where you can port the setting into your new build definition. + +### General tab + +![xaml build general tab](_img/migrate-from-xaml-builds/xaml-build-general-tab.png) + +| XAML setting | TFS 2017 RTM equivalent | VSTS equivalent | +|-|-|-| +| Build definition name | You can change it whenever you save the definition. |

    When editing the definition: On the **Tasks** tab, in left pane click **Process**, and the **Name** field appears in right pane.

    In the **Builds** hub (**Mine** or **All Definitions** tab), open the action menu and choose **Rename**.

    | +| Description (optional) | Not supported. | Not supported. | +| Queue processing | Not yet supported. As a partial alternative, disable the triggers. | Not yet supported. As an alternative, disable the triggers. | + +### Source Settings tab + +#### TFVC + +![xaml build source settings tfvc](_img/migrate-from-xaml-builds/xaml-build-source-settings-tfvc.png) + +| XAML setting | TFS 2017 RTM equivalent| VSTS equivalent | +|-|-|-| +| Source Settings tab | On the **Repository** tab specify your mappings with Active paths as **Map** and Cloaked paths as **Cloak**. | On the **Tasks** tab, in left pane click **Get sources**. Specify your workspace mappings with Active paths as **Map** and Cloaked paths as **Cloak**. | + +The new build definition offers you some new options. The specific extra options you'll see depend on the version you're using of TFS or VSTS. If you're using VSTS, first make sure to display **Advanced settings**. See [Build definition respository: TFVC](../concepts/definitions/build/repository.md#tfvc). + +#### Git + +![xaml build source settings git tfs](_img/migrate-from-xaml-builds/xaml-build-source-settings-git-tfs.png) + +| XAML setting | TFS 2017 RTM equivalent| VSTS equivalent | +|-|-|-| +| Source Settings tab | On the **Repository** tab specify the repository and default branch. | On the **Tasks** tab, in left pane click **Get sources**. Specify the repository and default branch. | + +The new build definition offers you some new options. The specific extra options you'll see depend on the version you're using of TFS or VSTS. If you're using VSTS, first make sure to display **Advanced settings**. See [Build definition repository: Git](../concepts/definitions/build/repository.md#git). + +### Trigger tab + +![xaml build trigger tab](_img/migrate-from-xaml-builds/xaml-build-trigger-tab.png) + +| XAML setting | TFS 2017 RTM and VSTS equivalent | +|-|-| +|Trigger tab | On the **Triggers** tab, select the trigger you want to use: CI, scheduled, or gated. | + +The new build definition offers you some new options. For example: + +* You can potentially create fewer build definitions to replace a larger number of XAML build definitions. This is because you can use a single new build definition with multiple triggers. And if you're using VSTS, then you can add multiple scheduled times. + +* The **Rolling builds** option is replaced by the **Batch changes** option. You can't specify minimum time between builds. But if you're using VSTS, you can specify the maximum number of concurrent builds per branch. + +* If your code is in TFVC, you can add folder path filters to include or exclude certain sets of files from triggering a CI build. + +* If your code is in TFVC and you're using the gated check-in trigger, you've got the option to also run CI builds or not. You can also use the same workspace mappings as your repository settings, or specify different mappings. + +* If your code is in Git, then you specify the branch filters directly on the **Triggers** tab. And you can add folder path filters to include or exclude certain sets of files from triggering a CI build. + +The specific extra options you'll see depend on the version you're using of TFS or VSTS. See [Build definition triggers](../concepts/definitions/build/triggers.md) + +We don't yet support the **Build even if nothing has changed since the previous build** option. + +### Build Defaults tab + +![xaml build build defaults tab](_img/migrate-from-xaml-builds/xaml-build-build-defaults-tab.png) + +| XAML process parameter | TFS 2017 RTM equivalent| VSTS equivalent | +|-|-|-| +| Build controller | On the **General** tab, select the default agent queue. | On the **Options** tab, select the default agent queue. | +| Staging location | On the **Tasks** tab, specify arguments to the Copy Files and Publish Build Artifacts tasks. See [Build artifacts](../concepts/definitions/build/artifacts.md). | On the **Tasks** tab, specify arguments to the Copy Files and Publish Build Artifacts tasks. See [Build artifacts](../concepts/definitions/build/artifacts.md). | + +The new build definition offers you some new options. For example: + +* You don't need a controller, and the new agents are easier to set up and maintain. See [Build and release agents](../concepts/agents/agents.md). + +* You can exactly specify which sets of files you want to publish as build artifacts. See [Build artifacts](../concepts/definitions/build/artifacts.md). + +### Process tab + +#### TF Version Control + +![xaml source settings git tfs](_img/migrate-from-xaml-builds/xaml-build-template-12-tf-version-control.png) + +| XAML process parameter | TFS 2017 RTM equivalent| VSTS equivalent | +|-|-|-| +| Clean workspace | On the **Repository** tab, open the **Clean** menu, and then select **true**. | On the **Tasks** tab, in left pane click **Get sources**. Display **Advanced settings**, and then select **Clean**. (We plan to change move this option out of advanced settings.) | +| Get version | You can't specify a changeset in the build definition, but you can specify one when you manually queue a build. | You can't specify a changeset in the build definition, but you can specify one when you manually queue a build. | +| Label Sources | On the **Repository** tab, select an option from the **Label sources** menu. | **Tasks** tab, in left pane click **Get sources**. Select one of the **Tag sources** options. (We plan to change the name of this to **Label sources**.) | + +The new build definition offers you some new options. See [Build definition repository](../concepts/definitions/build/repository.md#tfvc). + +#### Git + +![xaml source settings git tfs](_img/migrate-from-xaml-builds/git-template-12-xaml-git.png) + +| XAML process parameter | TFS 2017 RTM equivalent| VSTS equivalent | +|-|-|-| +| Clean repository | **Repository** tab, open **Clean** menu, select **true**. | On the **Tasks** tab, in left pane click **Get sources**. Show **Advanced settings**, and then select **Clean**. (We plan to change move this option out of advanced settings.) | +| Checkout override | You can't specify a commit in the build definition, but you can specify one when you manually queue a build. | You can't specify a commit in the build definition, but you can specify one when you manually queue a build. | + +The new build definition offers you some new options. See [Build definition repository](../concepts/definitions/build/repository.md#git). + +#### Build + +![xaml source settings git tfs](_img/migrate-from-xaml-builds/xaml-build-template-12-build.png) + +On the **Build** tab (TFS 2017) or the **Tasks** tab (VSTS), after you select the Visual Studio Build task, you'll see the arguments that are equivalent to the XAML build parameters. + +| XAML process parameter | TFS 2017 RTM, VSTS equivalent argument | +|-|-| +| Projects | Solution | +| Configurations | Platform, Configuration. See [Visual Studio Build: How do I build multiple configurations for multiple platforms?](../tasks/build/visual-studio-build.md#how-do-i-build-multiple-configurations-for-multiple-platforms) | +| Clean build | Clean | +| Output location | The Visual Studio Build task builds and outputs files in the same way you do it on your dev machine, in the local workspace. We give you full control of publishing artifacts out of the local workspace on the agent. See [Artifacts in Team Build](../concepts/definitions/build/artifacts.md). | +| Advanced, MSBuild arguments | MSBuild Arguments | +| Advanced, MSBuild platform | Advanced, MSBuild Architecture | +| Advanced, Perform code analysis | Use an MSBuild argument such as`/p:RunCodeAnalysis=true` | +| Advanced, post- and pre-build scripts | You can run one or more scripts at any point in your build process by adding one or more instances of the PowerShell, Batch, and Command tasks. For example, see [Use a PowerShell script to customize your build process](scripts/powershell.md). | + +> [!IMPORTANT] +> +> In the Visual Studio Build arguments, on the **Visual Studio Version** menu, make sure to select version of Visual Studio that you're using. + +The new build definition offers you some new options. See [Visual Studio Build](../tasks/build/visual-studio-build.md). + +Learn more: [Visual Studio Build task](../tasks/build/visual-studio-build.md) (for building solutions), [MSBuild task](../tasks/build/msbuild.md) (for building individual projects). + +#### Test + +![xaml source settings git tfs](_img/migrate-from-xaml-builds/xaml-build-template-12-test.png) + +See [Get started with continuous testing](../test/getting-started-with-continuous-testing.md) and [Visual Studio Test task](../tasks/test/visual-studio-test.md). + +#### Publish Symbols + +![xaml source settings git tfs](_img/migrate-from-xaml-builds/xaml-build-template-12-publish-symbols.png) + +| XAML process parameter | TFS 2017 RTM, VSTS equivalent | +|-|-| +| Path to publish symbols | Click the Publish Symbols task and then copy the path into the **Path to publish symbols** argument. | + +#### Advanced + +![xaml source settings git tfs](_img/migrate-from-xaml-builds/xaml-build-template-12-advanced.png) + +| XAML process parameter | TFS 2017 RTM equivalent| VSTS equivalent | +|-|-|-| +| Maximum agent execution time | None | On the **Options** tab you can specify **Build job timeout in minutes**. | +| Maximum agent reservation wait time | None | None | +| Name filter, Tag comparison operator, Tags filter | A build process asserts demands that are matched with agent capabilities. See [Agent capabilities](../concepts/agents/agents.md#capabilities). | A build process asserts demands that are matched with agent capabilities. See [Agent capabilities](../concepts/agents/agents.md#capabilities). | +| Build number format | On the **General** tab, copy your build number format into the **Build number format** field. | On the **General** tab, copy your build number format into the **Build number format** field. | +| Create work item on failure | On the **Options** tab, select this check box. | On the **Options** tab, enable this option. | +| Update work items with build number | None | On the **Options** tab you can enable **Automatically link new work in this build**. | + +The new build definition offers you some new options. See: + +* [Agent capabilities](../concepts/agents/agents.md#capabilities) + +* [Build number format](../concepts/definitions/build/options.md#build-number-format) + +### Retention Policy tab + +![xaml build retention policy tab](_img/migrate-from-xaml-builds/xaml-build-retention-policy-tab.png) + +| XAML process parameter | TFS 2017 RTM, VSTS equivalent | +|-|-| +| Retention Policy tab | On the **Retention** tab specify the policies you want to implement. | + +The new build definition offers you some new options. See [Build and release retention policies](../concepts/policies/retention.md). + +## Build and release different kinds of apps + +In XAML builds you had to create your own custom templates to build different types of apps. In the new build system you can pick from a set of pre-defined templates. The largest and most current set of templates are available on VSTS and in our newest version of TFS. + +### Build + +Here are a few examples of the kinds of apps you can build: + +* [Build your ASP.NET 4 app](../apps/aspnet/build-aspnet-4.md). + +* [Build your ASP.NET Core app](../apps/aspnet/build-aspnet-core.md) + +* [Build your Universal Windows Platform app](../apps/windows/universal.md) + +* [Build your Xamarin app](../apps/mobile/xamarin.md) + +* [C++ apps for Windows](../apps/windows/cpp.md) + +### Release + +The new Team Build is tightly integrated with Release Management. So it's easier then ever to automatically kick off a deployment after a successful build. Learn more: + +* [CI/CD Hello world](ci-cd-part-1.md) + +* [Release definitions](../concepts/definitions/release/index.md) + +* [How to: Work with release definitions](../actions/work-with-release-definitions.md) + +A few examples include: + +* [Continuous deployment of your app to an Azure web site](../apps/cd/deploy-webdeploy-webapps.md) + +* [IIS using deployment groups](../apps/cd/deploy-webdeploy-iis-deploygroups.md) + +### Other apps and tasks + +For more examples of apps you can build and deploy, see [Build and deploy your app](../apps/index.md). + +For a complete list of our build, test, and deployment tasks, see [Build and release tasks](../tasks/index.md). + +## Customize your tasks + +In XAML builds you created custom XAML tasks. In the new builds, you've got a range of options that begin with easier and lighter-weight approaches. + +### Get tasks from the Marketplace + +[Visual Studio Marketplace](https://marketplace.visualstudio.com/VSTS) +offers hundreds of extensions that you can install to add tasks that extend your build and deployment capabilities. + +### Write a script + +A major feature of the new build system is its emphasis on using scripts to customize your build process. You can check your scripts into version control and customize your build using any of these methods: + +* [PowerShell scripts](../tasks/utility/powershell.md) (Windows) +* [Batch scripts](../tasks/utility/batch-script.md) (Windows) +* [Command prompt](../tasks/utility/command-line.md) +* [Shell scripts](../tasks/utility/shell-script.md) (macOS and Linux) + +> [!TIP] +> +> If you're using TFS 2017 or newer, you can write a short PowerShell script directly inside your build definition. + +![inline powershell script](_img/migrate-from-xaml-builds/inline-powershell-script.png) +_TFS 2017 RTM inline PowerShell script_ + +For all these tasks we offer a set of built-in variables, and if necessary, you can define your own variables. See [Build variables](../concepts/definitions/build/variables.md). + +### Write a custom task + +If necessary, you can write your own [custom extensions](../../integrate/index.md) to [custom tasks](../../extend/develop/add-build-task.md) for your builds and releases. + +## Reuse patterns + +In XAML builds you created custom XAML templates. In the new builds, it's easier to create reusable patterns. + +### Create a template + +If you don't see a template for the kind of app you can start from an empty definition and [add the tasks you need](../tasks/index.md). After you've got a pattern that you like, you can clone it or save it as a template directly in your web browser. See [CI/CD Hello world](ci-cd-part-1.md). + +### Task groups (TFS 2017 or newer) + +In XAML builds, if you change the template, then you also change the behavior of all definitions based on it. In the new build system, templates don't work this way. Instead, a template behaves as a traditional template. After you create the build definition, subsequent changes to the template have no effect on build definitions. + +If you want to create a reusable and automatically updated piece of logic, then [create a task group](../concepts/library/task-groups.md). You can then later modify the task group in one place and cause all the definitions that use it to automatically be changed. + +## Q&A + + + +### How do I add conditional logic to my build process? + +Although the new build definitions are essentially linear, we do give you control of the conditions under which a task runs. + +On TFS 2015 and TFS 2017: You can select Enabled, Continue on error, or Always run. + +On VSTS you can specify one of four built-in choices to control when a task is run. If you need more control, you can specify custom conditions. For example: + +``` +and(failed(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'), startsWith(variables['Build.SourceBranch'], 'refs/heads/features/')) +``` + +See [Specify conditions for running a task](../concepts/process/conditions.md). + + diff --git a/docs/build-release/actions/scripts/_img/BldScriptPSAdd.png b/docs/build-release/actions/scripts/_img/BldScriptPSAdd.png new file mode 100644 index 00000000000..30f4b068d3f Binary files /dev/null and b/docs/build-release/actions/scripts/_img/BldScriptPSAdd.png differ diff --git a/docs/build-release/actions/scripts/_img/BldScriptPSExmpVerAssembliesBuildNumFormat.png b/docs/build-release/actions/scripts/_img/BldScriptPSExmpVerAssembliesBuildNumFormat.png new file mode 100644 index 00000000000..cb99af109b9 Binary files /dev/null and b/docs/build-release/actions/scripts/_img/BldScriptPSExmpVerAssembliesBuildNumFormat.png differ diff --git a/docs/build-release/actions/scripts/_img/BldScriptPSExmpVerAssembliesBuildStep.png b/docs/build-release/actions/scripts/_img/BldScriptPSExmpVerAssembliesBuildStep.png new file mode 100644 index 00000000000..09f11f1ab90 Binary files /dev/null and b/docs/build-release/actions/scripts/_img/BldScriptPSExmpVerAssembliesBuildStep.png differ diff --git a/docs/build-release/actions/scripts/_img/BldStepAddBegin.png b/docs/build-release/actions/scripts/_img/BldStepAddBegin.png new file mode 100644 index 00000000000..a4a02176cf7 Binary files /dev/null and b/docs/build-release/actions/scripts/_img/BldStepAddBegin.png differ diff --git a/docs/build-release/actions/scripts/_img/control-panel-team-project-version-control-tab.png b/docs/build-release/actions/scripts/_img/control-panel-team-project-version-control-tab.png new file mode 100644 index 00000000000..acae5ffc0a8 Binary files /dev/null and b/docs/build-release/actions/scripts/_img/control-panel-team-project-version-control-tab.png differ diff --git a/docs/build-release/actions/scripts/_img/control-panel-top-to-team-project.png b/docs/build-release/actions/scripts/_img/control-panel-top-to-team-project.png new file mode 100644 index 00000000000..ec2ff3589de Binary files /dev/null and b/docs/build-release/actions/scripts/_img/control-panel-top-to-team-project.png differ diff --git a/docs/build-release/actions/scripts/_img/control-panel-version-control-project-collection-build-service.png b/docs/build-release/actions/scripts/_img/control-panel-version-control-project-collection-build-service.png new file mode 100644 index 00000000000..557adb69a80 Binary files /dev/null and b/docs/build-release/actions/scripts/_img/control-panel-version-control-project-collection-build-service.png differ diff --git a/docs/build-release/actions/scripts/_img/manage-project.png b/docs/build-release/actions/scripts/_img/manage-project.png new file mode 100644 index 00000000000..9bdef5ac244 Binary files /dev/null and b/docs/build-release/actions/scripts/_img/manage-project.png differ diff --git a/docs/build-release/actions/scripts/git-commands.md b/docs/build-release/actions/scripts/git-commands.md new file mode 100644 index 00000000000..851fcdacd67 --- /dev/null +++ b/docs/build-release/actions/scripts/git-commands.md @@ -0,0 +1,168 @@ +--- +title: Run Git commands in a script +description: Run a Git command in a build script on Team Foundation Server or Visual Studio Team Services. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: B5481254-F39C-4F1C-BE98-44DC0A95F2AD +ms.manager: douge +ms.author: alewis +ms.date: 08/12/2016 +--- + +# Run Git commands in a script + +[!INCLUDE [temp](../../_shared/version.md)] + +For some workflows you need your build process to run Git commands. For example, after a CI build on a feature branch is done, the team might want to merge the branch to master. + +Git.exe is available on [hosted agents](../../concepts/agents/hosted.md) and on [on-premises agents](../../concepts/agents/agents.md). + + + +## Enable scripts to run Git commands + +### Grant version control permissions to the build service + +Go to the Version Control control panel tab ▼ + +
    + +
      +
    • VSTS: https://{your-account}.visualstudio.com/DefaultCollection/{your-team-project}/_admin/_versioncontrol
    • + +
    • On-premises: https://{your-server}:8080/tfs/DefaultCollection/{your-team-project}/_admin/_versioncontrol
    • +
    + +

    ![manage project](_img/manage-project.png)

    + +

    If you see this page, select the repo, and then click the link:

    + +

    ![control panel top to team project](_img/control-panel-top-to-team-project.png)

    + +

    ![control panel team project version control tab](_img/control-panel-team-project-version-control-tab.png)

    + +
    + +On the **Version Control** tab, select the repository in which you want to run Git commands, and then select **Project Collection Build Service**. + +![permissions](_img/control-panel-version-control-project-collection-build-service.png) + +Grant permissions needed for the Git commands you want to run. Typically you'll want to grant: + +* **Branch creation:** Allow +* **Contribute:** Allow +* **Read:** Inherited allow +* **Tag creation:** Inherited allow + +When you're done granting the permissions, make sure to click **Save changes**. + + +### Enable your build definition to run Git.exe + +On the [variables tab](../../concepts/definitions/build/variables.md) set this variable: + +| Name | Value | +|---|---| +| ```system.prefergit``` | ```true``` | + +On the [options tab](../../concepts/definitions/build/options.md) select **Allow scripts to access OAuth token**. + +## Make sure to clean up the local repo + +Certain kinds of changes to the local repository are not automatically cleaned up by the build process. So make sure to: + +* Delete local branches you create. +* Undo git config changes. + +If you run into problems using an on-premises agent, to make sure the repo is clean: + +* On the [repository tab](../../concepts/definitions/build/repository.md) set **Clean** to true. + +* On the [variables tab](../../concepts/definitions/build/variables.md) create or modify the ```Build.Clean``` variable and set it to ```source``` + +## Examples + + +### List the files in your repo + +Make sure to follow the above steps to [enable Git.exe](#enable). + +On the [build tab](../../tasks/index.md) add this step: + +| Task | Arguments | +| ---- | --------- | +| ![](../../tasks/utility/_img/command-line.png)
    [Utility: Command Line](../../tasks/utility/command-line.md)
    List the files in the Git repo. | **Tool**: `git`

    **Arguments**: `ls-files` | + +### Merge a feature branch to master + +You want a CI build to merge to master if the build succeeds. + +Make sure to follow the above steps to [enable Git.exe](#enable). + +On the [Triggers tab](../../concepts/definitions/build/triggers.md) select **Continuous integration (CI)** and include the branches you want to build. + +Create ```merge.bat``` at the root of your repo: + +```bat +@echo off +ECHO SOURCE BRANCH IS %BUILD_SOURCEBRANCH% +IF %BUILD_SOURCEBRANCH% == refs/heads/master ( + ECHO Building master branch so no merge is needed. + EXIT +) +SET sourceBranch=origin/%BUILD_SOURCEBRANCH:refs/heads/=% +ECHO GIT CHECKOUT MASTER +git checkout master +ECHO GIT STATUS +git status +ECHO GIT MERGE +git merge %sourceBranch% -m "Merge to master" +ECHO GIT STATUS +git status +ECHO GIT PUSH +git push origin +ECHO GIT STATUS +git status +``` + +On the [build tab](../../tasks/index.md) add this as the last step: + +| Task | Arguments | +| ---- | --------- | +| ![](../../tasks/utility/_img/batch-script.png)
    [Utility: Batch Script](../../tasks/utility/batch-script.md)
    Run merge.bat. | **Path**: `merge.bat` | + +## Q&A + + + + +### Can I run Git commands if my remote repo is in GitHub or an external Git service such as Bitbucket? + +Yes + + +### Which steps can I use to run Git commands? + +[Batch Script](../../tasks/utility/batch-script.md) + +[Command Line](../../tasks/utility/command-line.md) + +[PowerShell](../../tasks/utility/powershell.md) + +[Shell Script](../../tasks/utility/shell-script.md) + + +### How do I avoid triggering a CI build when the script pushes? + +Add ```***NO_CI***``` to your commit message. For example, ```git merge origin/features/hello-world -m "Merge to master ***NO_CI***"``` + + +### How does enabling scripts to run Git commands affect how the build process gets build sources? + +When you set ```system.prefergit``` to ```true```, the build process uses Git.exe instead of LibGit2Sharp to clone or fetch the source files. + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/actions/scripts/powershell.md b/docs/build-release/actions/scripts/powershell.md new file mode 100644 index 00000000000..04ded05abe4 --- /dev/null +++ b/docs/build-release/actions/scripts/powershell.md @@ -0,0 +1,179 @@ +--- +title: Use a PowerShell script to customize your build process +description: Use a script to customize your build process in Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 7D184F55-18BC-40E5-8BE7-283A0DB8E823 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Use a PowerShell script to customize your build process + +**VSTS | TFS 2017 | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/library/dn376353%28v=vs.120%29.aspx)** + +When you are ready to move beyond the basics of compiling and testing your code, use a PowerShell script to add your team's business logic to your build process. + +You can run a PowerShell Script on a [Windows build agent](../agents/v2-windows.md). + +0. Push your script into your repo. + +0. Add a PowerShell build step. + + ![Add step](_img/BldStepAddBegin.png) + + ![Add PowerShell step](_img/BldScriptPSAdd.png) + +0. Drag the build step where you want it to run. + +0. Specify the name of the script. + +## Example: Version your assemblies + +For example, to version to your assemblies, copy and upload this script to your team project: + +```ps +##----------------------------------------------------------------------- +## (c) Microsoft Corporation. This source is subject to the Microsoft Permissive License. See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. All other rights reserved. +##----------------------------------------------------------------------- +# Look for a 0.0.0.0 pattern in the build number. +# If found use it to version the assemblies. +# +# For example, if the 'Build number format' build process parameter +# $(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r) +# then your build numbers come out like this: +# "Build HelloWorld_2013.07.19.1" +# This script would then apply version 2013.07.19.1 to your assemblies. + +# Enable -Verbose option +[CmdletBinding()] + +# Regular expression pattern to find the version in the build number +# and then apply it to the assemblies +$VersionRegex = "\d+\.\d+\.\d+\.\d+" + +# If this script is not running on a build server, remind user to +# set environment variables so that this script can be debugged +if(-not ($Env:BUILD_SOURCESDIRECTORY -and $Env:BUILD_BUILDNUMBER)) +{ + Write-Error "You must set the following environment variables" + Write-Error "to test this script interactively." + Write-Host '$Env:BUILD_SOURCESDIRECTORY - For example, enter something like:' + Write-Host '$Env:BUILD_SOURCESDIRECTORY = "C:\code\FabrikamTFVC\HelloWorld"' + Write-Host '$Env:BUILD_BUILDNUMBER - For example, enter something like:' + Write-Host '$Env:BUILD_BUILDNUMBER = "Build HelloWorld_0000.00.00.0"' + exit 1 +} + +# Make sure path to source code directory is available +if (-not $Env:BUILD_SOURCESDIRECTORY) +{ + Write-Error ("BUILD_SOURCESDIRECTORY environment variable is missing.") + exit 1 +} +elseif (-not (Test-Path $Env:BUILD_SOURCESDIRECTORY)) +{ + Write-Error "BUILD_SOURCESDIRECTORY does not exist: $Env:BUILD_SOURCESDIRECTORY" + exit 1 +} +Write-Verbose "BUILD_SOURCESDIRECTORY: $Env:BUILD_SOURCESDIRECTORY" + +# Make sure there is a build number +if (-not $Env:BUILD_BUILDNUMBER) +{ + Write-Error ("BUILD_BUILDNUMBER environment variable is missing.") + exit 1 +} +Write-Verbose "BUILD_BUILDNUMBER: $Env:BUILD_BUILDNUMBER" + +# Get and validate the version data +$VersionData = [regex]::matches($Env:BUILD_BUILDNUMBER,$VersionRegex) +switch($VersionData.Count) +{ + 0 + { + Write-Error "Could not find version number data in BUILD_BUILDNUMBER." + exit 1 + } + 1 {} + default + { + Write-Warning "Found more than instance of version data in BUILD_BUILDNUMBER." + Write-Warning "Will assume first instance is version." + } +} +$NewVersion = $VersionData[0] +Write-Verbose "Version: $NewVersion" + +# Apply the version to the assembly property files +$files = gci $Env:BUILD_SOURCESDIRECTORY -recurse -include "*Properties*","My Project" | + ?{ $_.PSIsContainer } | + foreach { gci -Path $_.FullName -Recurse -include AssemblyInfo.* } +if($files) +{ + Write-Verbose "Will apply $NewVersion to $($files.count) files." + + foreach ($file in $files) { + $filecontent = Get-Content($file) + attrib $file -r + $filecontent -replace $VersionRegex, $NewVersion | Out-File $file + Write-Verbose "$file.FullName - version applied" + } +} +else +{ + Write-Warning "Found no files." +} +``` + +Add the build step to your build definition. + +![Apply version to assemblies build step](_img/BldScriptPSExmpVerAssembliesBuildStep.png) + +Specify your build number with something like this: + +![Build number format](_img/BldScriptPSExmpVerAssembliesBuildNumFormat.png) + +``` +$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r) +``` + + +## Use the OAuth token to access the REST API + +To enable your script to use the build process OAuth token, go to the **Options** tab of the build definition and select **Allow Scripts to Access OAuth Token**. + +After you've done that, your script can use to SYSTEM_ACCESSTOKEN environment variable to access the [VSTS REST API](https://www.visualstudio.com/en-us/integrate/api/overview). For example: + +```ps +$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build-release/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=2.0" +Write-Host "URL: $url" +$definition = Invoke-RestMethod -Uri $url -Headers @{ + Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" +} +Write-Host "Definition = $($definition | ConvertTo-Json -Depth 1000)" +``` + + +## Q&A + + + +### What variables are available for me to use in my scripts? + +[Use variables](../../concepts/definitions/build/variables.md) + +[!INCLUDE [include](../../concepts/definitions/_shared/variable-set-in-script-qa.md)] + +### Which branch of the script does the build run? + +The build runs the script same branch of the code you are building. + +### What kinds of parameters can I use? + +You can use named parameters. Other kinds of parameters, such as switch parameters, are not yet supported and will cause errors. + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/actions/troubleshooting.md b/docs/build-release/actions/troubleshooting.md new file mode 100644 index 00000000000..c655b7a7d3d --- /dev/null +++ b/docs/build-release/actions/troubleshooting.md @@ -0,0 +1,242 @@ +--- +title: Troubleshooting build +description: Troubleshooting Team Foundation Build (TFBuild) in Team Foundation Server and VSTS. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: BFCB144F-9E9B-4FCB-9CD1-260D6873BC2E +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Troubleshooting build + +[!INCLUDE [temp](../_shared/version.md)] + +## Run commands locally at the command prompt +It is helpful to narrow whether a build failure is the result of a TFS/VSTS product issue (agent or tasks). Build failures may also result from external commands. + +Check the build log for the exact command-line executed by the failing step. Attempting to run the command locally from the command line, may reproduce the issue. It can be helpful to run the command locally from your own machine, and/or log-in to the build machine and run the command as the service account. + +For example, is the problem happening during the MSBuild part of your build process (for example, are you using either the [MSBuild](../tasks/build/msbuild.md) or [Visual Studio Build](../tasks/build/visual-studio-build.md) step)? If so, then try running the same [MSBuild command](https://msdn.microsoft.com/en-us/library/ms164311.aspx) on a local machine using the same arguments. If you can reproduce the problem on a local machine, then your next steps are to investigate the [MSBuild](https://msdn.microsoft.com/en-us/library/dd393574.aspx) problem. + +### Differences between local command prompt and agent +Keep in mind, some differences are in effect when executing a command from the local command, and when a build is running on an agent. If the agent is configured to run as a service on Windows/Linux, then it is not running within an interactive logged-on session. Without an interactive logged-on session, UI interaction and other limitations exist. + + +## Get logs to diagnose problems + + +### Build logs + +Start by looking at the logs in your completed build. If they don't provide enough detail, you can make them more verbose: + +0. On the **Variables** tab, add ```system.debug``` and set it to ```true```. Select to allow at queue time. + +0. Queue the build. + +0. In the explorer tab, view your completed build and click the build step to view its output. + +0. If you need a copy of all the logs, click **Download all logs as zip**. + + +### Diagnostic logs + +0. Log on to the agent machine. + +0. Go to the `_diag` subfolder in the directory where the build agent is installed. For example: `c:\agent\_diag` + +#### Worker diagnostic logs + +You can get the diagnostic log of the completed build that was generated by the worker process on the build agent. Look for the `worker` log file that has the date and time stamp of your completed build. For example, `worker_20160623-192022-utc_6172.log`. + +#### Agent diagnostic logs + +Agent diagnostic logs provide a record of how the agent was configured and what happened when it ran. Look for the `agent` log files. For example, `agent_20160624-144630-utc.log`. There are two kinds of agent log files: + +* The log file generated when you ran `config.cmd`. This log: + + - Includes this line near the top: `Adding Command: configure` + + - Shows the configuration choices made. + +* The log file generated when you ran `run.cmd`. This log: + + - Cannot be opened until the process is terminated. + + - Attempts to connect to your Team Foundation Server or VSTS account. + + - Shows when each job was run, and how it completed + +Both logs show how the agent capabilities were detected and set. + +### HTTP trace logs + +> **Important:** HTTP traces and trace files can contain passwords and other secrets. Do **not** post them on a public sites. + +#### Use built-in HTTP tracing + +If your agent is version 2.114.0 or newer, you can trace the HTTP traffic headers and write them into the diagnostic log. Set the `VSTS_AGENT_HTTPTRACE` environment variable before you launch the agent.listener. + +```bash +Windows: + set VSTS_AGENT_HTTPTRACE=true + +OSX/Linux: + export VSTS_AGENT_HTTPTRACE=true +``` + +#### Use full HTTP tracing + +##### Windows + +0. Start [Fiddler](http://www.telerik.com/fiddler). + +0. We recommend you listen only to agent traffic. File > Capture Traffic off (F12) + +0. Enable decrypting HTTPS traffic. Tools > Fiddler Options > HTTPS tab. Decrypt HTTPS traffic + +0. Let the agent know to use the proxy: + + ```cmd +set VSTS_HTTP_PROXY=http://127.0.0.1:8888 + ``` + +0. Run the agent interactively. If you're running as a service, you can set as the environment variable in control panel for the account the service is running as. + +0. Restart the agent. + + +##### OSX and Linux + +Use Charles Proxy (similar to Fiddler on Windows) to capture the HTTP trace of the agent. + +0. Start Charles Proxy. + +0. Charles: Proxy > Proxy Settings > SSL Tab. Enable. Add URL. + +0. Charles: Proxy > Mac OSX Proxy. Recommend disabling to only see agent traffic. + + ```bash +export VSTS_HTTP_PROXY=http://127.0.0.1:8888 + ``` + +0. Run the agent interactively. If it's running as a service, you can set in the .env file. See [nix service](https://github.com/Microsoft/vsts-agent/blob/master/docs/start/nixsvc.md) + +0. Restart the agent. + +## File- and folder-in-use errors +File or folder in use errors are often indicated by error messages such as: +> Access to the path [...] is denied. +> The process cannot access the file [...] because it is being used by another process. +> Access is denied. +> Can't move [...] to [...] + +### Detect files and folders in use +On Windows, tools like [Process Monitor](https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx) can be to capture a trace of file events under a specific directory. Or, for a snapshot in time, tools like [Process Explorer](https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx) or [Handle](https://technet.microsoft.com/en-us/sysinternals/handle.aspx) can be used. + +### Anti-virus exclusion +Anti-virus software scanning your files can cause file or folder in use errors during a build. Adding an anti-virus exclusion for your agent directory and configured "work folder" may help to identify anti-virus software as the interfering process. + +### MSBuild and /nodeReuse:false +If you invoke MSBuild during your build, make sure to pass the argument `/nodeReuse:false` (short form `/nr:false`). Otherwise MSBuild process(es) will remain running after the build completes. The process(es) remain for some time in anticipation of a potential subsequent build. + +This feature of MSBuild can interfere with attempts to delete or move a directory - due to a conflict with the working directory of the MSBuild process(es). + +The MSBuild and Visual Studio Build tasks already add `/nr:false` to the arguments passed to MSBuild. However, if you invoke MSBuild from your own script, then you would need to specify the argument. + + +### MSBuild and /maxcpucount:[n] + +By default the build steps such as [MSBuild](../tasks/build/msbuild.md) and [Visual Studio Build](../tasks/build/visual-studio-build.md) run MSBuild with the `/m` switch. In some cases this can cause problems such as multiple process file access issues. + +Try adding the `/m:1` argument to your build steps to force MSBuild to run only one process at a time. + +File-in-use issues may result when leveraging the concurrent-process feature of MSBuild. Not specifying the argument `/maxcpucount:[n]` (short form `/m:[n]`) instructs MSBuild to use a single process only. If you are using the MSBuild or Visual Studio Build tasks, you may need to specify "/m:1" to override the "/m" argument that is added by default. + +## Intermittent or inconsistent MSBuild failures + +If you are experiencing intermittent or inconsistent MSBuild failures, try instructing MSBuild to use a single-process only. Intermittent or inconsistent errors may indicate that your target configuration is incompatible with the concurrent-process feature of MSBuild. See [MSBuild and /maxcpucount:[n]](#msbuild-and-maxcpucountn) + +## Process hang + +### Waiting for Input +A process hang may indicate that a process is waiting for input. + +Running the agent from the command line of an interactive logged on session may help to identify whether a process is prompting with a dialog for input. + +Running the agent as a service may help to eliminate programs from prompting for input. For example in .Net, programs may rely on the System.Environment.UserInteractive Boolean to determine whether to prompt. When running as a Windows service, the value is false. + +### Process dump +Analyzing a dump of the process can help to identify what a deadlocked process is waiting on. + +### WiX project +Building a WiX project when custom MSBuild loggers are enabled, can cause WiX to deadlock waiting on the output stream. Adding the additional MSBuild argument `/p:RunWixToolsOutofProc=true` will workaround the issue. + +## Agent connection issues + +### Config fails while testing agent connection (on-premises TFS only) + +``` +Testing agent connection. +VS30063: You are not authorized to access http://:8080/tfs +``` + +If the above error is received while configuring the agent, log on to your TFS machine. Start the Internet Information Services (IIS) manager. Make sure **Anonymous Authentication** is enabled. + +![iis tfs anonymous authentication enabled](_img/troubleshooting/iis-tfs-anonymous-authentication-enabled.png) + + +

    Agent lost communication

    + +This issue is characterized by the error message: +``` +The job has been abandoned because agent did not renew the lock. Ensure agent is running, not sleeping, and has not lost communication with the service. +``` + +This error may indicate the agent lost communication with the server for a span of several minutes. Check the following to rule out network or other interruptions on the agent machine: + +* Verify automatic updates are turned off. A machine reboot from an update will cause a build to fail with the above error. Apply updates in a controlled fashion to avoid this type of interruption. Before rebooting the agent machine, the agent should first be marked disabled in the pool administration page and let any running build finish. +* Verify the sleep settings are turned off. +* If the agent is running on a virtual machine, avoid any live migration or other VM maintenance operation that may severly impact the health of the machine for multiple minutes. +* If the agent is running on a virtual machine, the same operating-system-update recommendations and sleep-setting recommendations apply to the host machine. And also any other maintenance operations that several impact the host machine. +* Performance monitor logging or other health metric logging can help to correlate this type of error to constrained resource availability on the agent machine (disk, memory, page file, processor, network). +* Another way to correlate the error with network problems is to ping a server indefinitely and dump the output to a file, along with timestamps. Use a healthy interval, for example 20 or 30 seconds. If you are using VSTS, then you would want to ping an internet domain, for example bing.com. If you are using an on-premises TFS server, then you would want to ping a server on the same network. +* Verify the network throughput of the machine is adequate. You can perform an online speed test to check the throughput. +* If you use a proxy, verify the agent is configured to use your proxy. Refer to the agent deployment topic. + +### Builds not starting + +#### TFS Job Agent not started +This may be characterized by a message in the web console "Waiting for an agent to be requested". Verify the TFSJobAgent (display name: *Visual Studio Team Foundation Background Job Agent*) Windows service is started. + +#### Misconfigured notifcation URL (1.x agent version) +This may be characterized by a message in the web console "Waiting for console output from an agent", and the build eventually times out. + +A mismatching notification URL may cause the worker to process to fail to connect to the server. See *Team Foundation Administration Console*, *Application Tier*. The 1.x agent listens to the message queue using the URL that it was configured with. However, when a job message is pulled from the queue, the worker process uses the notification URL to communicate back to the server. + +## Git + +### Get sources fails with SSL certificate problem (on-premises TFS and Windows agent only) +We ship git.exe as part of windows agent, we use this git.exe for all Git related operation. +When you have a self-signed SSL certificate for your on-premises TFS server, make sure to configure the git.exe we shipped to allow that self-signed SSL certificate. +The most reliable way might be to set the following git config in global level by the agent's run as user. +```bash +git config --global http."https://tfs.com/".sslCAInfo certificate.pem +``` +Setting system level git config is not reliable on Windows, since the system level .gitconfig file is stored at the copy of git.exe we packaged which will get replaced whenever the agent is upgraded to a new version. + +## Team Foundation Version Control (TFVC) + +### Get sources not downloading some files +This may be characterized by a message in the build log "All files up to date" from the *tf get* command. Verify the built-in build service identity has permission to download the sources. Either the identity *Project Collection Build Service* or *Project Build Service* will need permission to download the sources, depending on the selected authorization scope on General tab of the build definition. In the version control web UI, you can browse the project files at any level of the folder hierarchy and check the security settings. + +## I need more help. I found a bug. I've got a suggestion. Where do I go? + +[Get subscription, billing, and technical support](https://www.visualstudio.com/support-overview-vs) + +Report any problems on [Developer Community](https://developercommunity.visualstudio.com/). + +We welcome your suggestions: + +* Propose and vote on ideas on [UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services). diff --git a/docs/build-release/actions/view-manage-releases.md b/docs/build-release/actions/view-manage-releases.md new file mode 100644 index 00000000000..5674f515168 --- /dev/null +++ b/docs/build-release/actions/view-manage-releases.md @@ -0,0 +1,501 @@ +--- +title: View and manage releases with Release Management +description: View and manage releases with Release Management in Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 5C348EA7-3DC3-42E4-A66D-9A602441CDF3 +ms.manager: douge +ms.author: ahomer +ms.date: 02/16/2017 +--- + +# How to: View and manage releases + +[!INCLUDE [version-rm-dev14](../_shared/version-rm-dev14.md)] + +Release Management shows comprehensive information about the +releases you have initiated, and the results of deployments. +This includes a [list](#release-list) and an [overview](#release-overview) of +all releases, a [summary](#release-summary) of the details +for each release, [test results](#test-results), +and [release logs](debug-deployment-issues.md). + +From the Release Management UI you can also +[restore deleted releases](#restore-release), +respond to [approval requests](#approve-release), +[redeploy](#redeploy-release) a release, get [release notifications](#notifications), +send [email notifications](#send-email), +and view [release history](#release-history). +You might also want to add a [releases widget](#add-widget) +to your team dashboard. + +

    List of releases

    + +The default **Releases** page shows a list of +releases. As well as the current status, title, release definition name, and other +details, the list contains information about the source of the release, when the release was started +the user who initiated it, the description, and more (not all columns are visible +in this screenshot). + +Select a release definition in the left column to filter the list to just that +release definition. Sort the list in ascending or descending order based on the +values in each column by clicking the column headings (the +![sort by column values](_img/view-manage-releases/column-sort-icon.png) +icon shows the current sorting column). +Use the links in the rows to open the release definition in edit mode, or to +see the build results linked to that release. + +![List of releases showing status and other details](_img/view-manage-releases/overview-01a.png) + +The first column in the list indicates if the release is locked, and the second column +shows the _reason_ for each release. The +![Continuous integration icon](_img/view-manage-releases/ci-icon.png) +icon indicates that this release was automatically initiated when a new build +of the source artifacts was completed - based on the +[continuous deployment](../concepts/definitions/release/triggers.md) +setting in the release definition. + +In this view, each environment is shown as a horizontal bar - red for failed, +green for succeeded, orange for partially succeeded, blue for in progress, +and gray for paused or not deployed. Notice the +![Waiting for you to approve icon](_img/view-manage-releases/approve-icon.png) +icon in the first release in the list. This indicates that +you were specified as an approver and the release is paused +waiting for you to approve it. When a release is paused waiting +for a different user to grant approval, the list displays the +![Waiting for other approver icon](_img/view-manage-releases/approve-other-icon.png) icon. +See [Approvals](../concepts/definitions/release/environments.md#approvals) +and [Approve a release](#approve-release) for more information. + +Use the commands on the toolbar of the **Releases** pane to: + +* Refresh the list of releases +* [Create and deploy a release](create-deploy-releases.md) from this definition. + +Use the commands on the shortcut menu for a release to: + +* Open the details view of a release in the same or in a new browser tab +* Start a canceled or a failed release +* Retain the details and history of a release indefinitely (see [Retention policies](../concepts/policies/retention.md)) +* Abandon a canceled or a failed release +* Delete the details of a release + +![Canceling, restarting, deleting, or abandoning a release](_img/view-manage-releases/overview-03a.png) + +>Depending on the current state of a release, not all of the commands will be available. + + +### Find release definitions and releases + +Search for a release definition in the left column of the **Releases** pane. + +![Searching for a release definition](_img/view-manage-releases/overview-03.png) + +Use the **State** drop-down list at the top right of the **Releases** pane to filter the +list of releases by their current state. + +![Filtering release definitions by state](_img/view-manage-releases/overview-03b.png) + +Or use the **Branch** drop-down list to filter the +list of releases by the branch from which the artifacts were generated. + +![Filtering release definitions by branch](_img/view-manage-releases/overview-branch-01.png) + +

    Overview of releases

    + +The **Overview** page also shows a list of release definitions, but as a +series of environments with the name of the release and the date or time it was +started. The color of the heading and the icon in each environment indicate the +current status of the release (using the same color scheme as the **Releases** +page). Select a release definition in the left column to filter the list to just +releases for that definition. + +![The Overview page showing release definitions and environments](_img/view-manage-releases/overview-02.png) + +In the **Overview** page, you can: + +* Choose the name of the release definition (above the environments) to + open that definition in edit mode + +* Choose the name of the release displayed within any of the environments to open + the [Summary](#release-summary) page for the _most recent_ release for this definition. + +* Choose the ellipses (**...**) next to the release definition name + to open a shortcut menu where you can create a new release or a draft release for that + release definition, edit or delete the release definition, add a widget for this release + to a dashboard on your Home page, or manage the security settings + for the release definition. + + ![Shortcut commands for a release definition in the Overview page](_img/view-manage-releases/overview-menu-01.png) + +

    Restore deleted releases

    + +When you delete a release, or it is automatically deleted by a retention policy, +the release is removed from the overview and details lists. +However, it is retained with the release definition for a period (typically +14 days) before it is permanently deleted. During this period, it is shown in +the **Deleted** tab of the overview and details lists. You can restore any of +these releases by opening the shortcut menu and choosing **Undelete**. + +![Restoring a deleted release in the Deleted page](_img/view-manage-releases/overview-restore-01.png) + +

    Add release information to the dashboard

    + +To make it easy to monitor the releases and deployments for a release definition, add +widgets to a dashboard or the overview page of your project. The **Release Definition Overview** +widget shows a summary of the releases for a selected release definition. Links in the +widget let you quickly go directly to the list of releases for this release definition, +or open the details view of a specific release. + +![The release definition widget on the Home page dashboard](_img/view-manage-releases/add-to-dashboard-02.png) + +The **Deployment Status** widget shows a summary of releases from a selected build to +all of the environments in which it has been deployed. It displays the status of each +deployment, with an overlay that shows additional information such as the test pass rate. +You can specify a range of options for the widget such as the size of the cells, the +data source for the overlay, the release definition, the environments to include, as +well as the build and branch from with the data is taken. +Links in the widget let you open a deployment summary for the environment, and the build +definition. Hover over a cell to see a pop-up containing a more detailed summary. + +![The deployment status widget on the Home page dashboard](_img/view-manage-releases/deploy-status-widget.png) + +Add widgets to a dashboard as shown in [Add widgets and charts to a dashboard](../../report/add-widget-to-dashboard.md). +You can also add the **Release Definition Overview** directly from the list of release +definitions in the **Release** hub. On the left of the **Overview** or **Releases** page, +or in the details page for a release, open the shortcut menu for any release +definition and choose **Add to Dashboard**. + +![Adding a release definition to the Home page dashboard](_img/view-manage-releases/add-to-dashboard-01.png) + +

    Summary view of a release

    + +As a release progresses, you can view the status. You can also view comprehensive +details of all previous releases for all release definitions. In the **Releases** list, +open the shortcut menu for a release and choose **Open** or **Open in new tab**. + +![Opening the summary view for a release](_img/view-manage-releases/overview-03c.png) + +>Alternatively, when using a mouse, double-click the release in the list +to open it. The commands shown on the shortcut menu will vary depending on +the current state of the release. + +If you have a release in progress, or recently started, a message bar at the top +of the page contains a link that opens the **Summary** page for that release. + +![The message bar for a release in progress](_img/view-manage-releases/overview-03d.png) + +The default **Summary** tab shows details of the release as it is in progress. +The page shows all of the environments for the release, and the current progress and +status for each one. It also contains information about the +release definition and the release itself. This includes details of the artifacts +to deploy, any test results, and the work items related to this release (if any). + +![Viewing the release summary page for an in-progress release](_img/view-manage-releases/summary-in-progress-01a.png) + +> Hover your mouse pointer over any "not deployed" status items to see a pop-up tip +that indicates the reason, and suggests how or when the deployment will start. + +After a release has finished, the page shows full details of the status. +For example, deployments to each environment are shown as as partially +or fully successful, pending, failed, or not deployed. The summary of +test pass rates are also shown for each environment. Choose one of these +links to open details of the tests (also see how to [view test results](#test-results)). + +![Release summary page after a release](_img/view-manage-releases/release-summary-01.png) + +To select the columns you want to see in the list of results for each environment, +use the ![column selector](_img/view-manage-releases/column-selector-icon.png) icon to open the column selector. + +![Selecting the columns to display for the environment results](_img/view-manage-releases/manually-05b.png) + +To cancel a pending or in-progress release, use the ellipses (**...**) for the +environment to open the shortcut menu and choose **Cancel**. + +![Cancelling a release in the Summary page](_img/view-manage-releases/cancel-04.png) + +To deploy a release that has not yet been deployed, such as releases where the +environment deployment options only permit a manual release, use the ellipses (**...**) for the +environment to open the shortcut menu and choose **Deploy**. + +![Deploy a release in the Summary page](_img/view-manage-releases/deploy-03.png) + +>For more details about environment deployment options, see +[Triggers](../concepts/definitions/release/triggers.md) and +[Queuing policies](../concepts/definitions/release/environments.md#queuing-policies). For more +details about starting deployment of a release, see +[How to: Create and deploy a release from a release definition](create-deploy-releases.md). + +Choose the **Logs** tab at the top of the page to view the log files +and the current deployment status. For more details, see [How To: Monitor releases and debug deployment issues](debug-deployment-issues.md). + +Use the other tab links to see more information about an in-progress or a completed +release. + +![Links for more information about an in-progress release](_img/view-manage-releases/summary-links-01.png) + +* Use the **Environments** tab to see details of the release definition used to + create this release. The view is read-only, but is useful to examine the configuration + and parameters used for this release. For more details, see + [Environments](../concepts/definitions/release/environments.md). + +* Use the **Artifacts** tab to see a list of the artifacts deployed as part of this release. + You can also open the **Artifacts** page using the **Show all artifacts** link in the + **Summary** page. For more details, see + [Artifacts](../concepts/definitions/release/artifacts.md). + +* Use the **Variables** tab to see a list of the configuration variables used for + this release. For more details, see + [Variables](../concepts/definitions/release/variables.md) + and [Variable groups](../concepts/library/variable-groups.md). + +* Use the **General** tab to see the option settings for this release definition, such as + the format for release names and the retention period for release information. + For more details, see + [Release names](../concepts/definitions/release/index.md#numbering) + and [Retention policies](../concepts/policies/retention.md). + +* Use the **Commits** tab to see a list of all the source code repository commits + associated with this release. + +* Use the **Work Items** tab to see a list of all the source code repository work items + associated with this release. + +* Use the **Tests** tab to see a summary of the test results for this release. + For more details, see [View test results](#test-results). + +* Use the **History** tab to see details of the changes to and deployments from + the release definitions associated with this release. + For more details, see [Release definition history](#release-history). + +

    Test results

    + +Choose the **Tests** tab to see the results of tests that +ran as part of the build and release process. + +![Viewing test results from a build and release](_img/view-manage-releases/view-test-results-01.png) + +For more details about the **Tests** page, see +[Review continuous test results after a build](../test/review-continuous-test-results-after-build.md) + +

    Approve a release

    + +During a release, the deployment pipeline will stop at any stage that requires approval, and +will display an alert or indicator to the user. In the **Releases**, **Summary**, and **Logs** pages +and lists, it displays the ![Waiting for approver icon](_img/view-manage-releases/approve-icon.png) +icon when the release is waiting for approval by the current user, or the +![Waiting for different user icon](_img/view-manage-releases/approve-other-icon.png) + when the release is waiting for approval by a different user. + +![A release in the Releases page paused waiting for approval](_img/view-manage-releases/approve-01.png) + +Release Management may also send an email message to the approver(s) defined for +this approval step (this is configurable, see [Approvals](../concepts/definitions/release/environments.md#approvals)). +The link in the email message sent to approvers opens the **Summary** page for the release. +The page has a reminder containing an **Approve or Reject** link. This link +displays the approval dialog. + +![Approving a task step for a release in the Summary page](_img/view-manage-releases/approve-01c.png) + +If there is more than one approval waiting for the same user, the reminder will +contain two links, **All** and **Selected environments**. This saves the user +from needing to interact with each approval request individually. + +Use the approvers pop-up dialog to: + +* Enter a comment +* Approve or reject the release +* Reassign the approval to somebody else +* Defer the deployment to a specified date and time + +![Defering a deployment to a specified date and time](_img/view-manage-releases/approve-03.png) + +An administrator can approve a deployment step even +if the approval was originally defined for a different user. +In this case, the approvers pop-up dialog contains an +**Override** link that enables the administrator, after +choosing this link, to enter comments, approve, +reject, reassign, or defer the deployment. + +![Over-riding an approval as an administrator](_img/view-manage-releases/approve-04.png) + +For details of how to set up approvals and specify the approval policy, +see [Approvals](../concepts/definitions/release/environments.md#approvals). + +>You can also approve and reject pending releases by accessing the +[Release Management REST API](../../integrate/index.md). + +

    Redeploy a release

    + +If a release fails or is canceled, you can redeploy it. Or if you +discover issues after deployment that require a previous release +to be reinstated, you can redeploy a previously successful release. +Typical scenarios are: + +* An approver canceled the release because an environment was temporary offline, + and you now want to redeploy that release because the environment is + available again. + +* A deployment failed for a release, perhaps there was + a connectivity failure or a server was temporary offline, + and you have now fixed the problem that caused the failure. + +* The release was successfully deployed, but is not working + correctly and you are unable to quickly locate the problem + so you want to redeploy a previous release that was successful. + +To redeploy a failed release, open the **Summary** page, use the ellipses (**...**) +to open the shortcut menu for the environment you want to redeploy to, and +choose **Redeploy**. + +![Redeploy an app from the Summary page](_img/view-manage-releases/redeploy-05.png) + +You can also use the **Deploy** list in the **Summary** page to start +a new deployment for a release... + +![Deploying an app from the Summary page](_img/view-manage-releases/redeploy-01.png) + +...or the **Deploy** list in the **Logs** page. + +![Deploying an app from the Logs page](_img/view-manage-releases/redeploy-02.png) + +If you instead choose to deploy a previous (older) successful release, simply open +that release from the list of releases ... + +![Opening an older release](_img/view-manage-releases/overview-03c.png) + +... and follow the same procedure as above to start the deployment. + +However, it's likely that the source for the app has changed since +the older release was created, and so redeploying this older release +will incur some rollback of commits and work items. + +When you start the deployment of a previous release, the **Deploy** +dialog warns you that you are rolling back changes. It shows any +work items and commits that are affected. + +![Re-deploying an older release](_img/view-manage-releases/redeploy-07.png) + +>**Note**: You must ensure that the tasks and automation scripts +used for the deployment can correctly manage the rollback process. +Release Management does not handle this. + +If you need to change the release definition before you redeploy, you must +[create a new release](create-deploy-releases.md) from the updated release definition. + +

    Release notifications

    + +Release Management automatically defines a set of built-in notifications that +are integrated with the VSTS and TFS notifications system. You can view, opt out, +disable, and manage these notifications in the **Notifications** tab of the **Services** hub. + +![Managing release notificatoins](_img/view-manage-releases/notifications-settings.png) + +For more information about notifications, see [Manage notifications for a team](../../collaborate/manage-team-notifications.md). + +

    Send email notifications

    + +Release Management can send a range of notifications by email to users and +administrators. In addition, it can send detailed emails that show the status +of a release. During a release or after a release has finished (irrespective +of whether it was successful), choose the **Send Email** link on the toolbar of +the **Logs** page + +![Sending an email in the Logs page](_img/view-manage-releases/send-email-01.png) + +In the **Send release summary mail** dialog: + +* Select the recipients for the email. +* Edit the default subject if required, and add any notes. +* Review the list of summary sections that you want to include + in the email. All the sections are included by default. Clear + the checkboxes for the section you don't want to include. +* Choose **Send**. + +![Entering details for an email in the Logs page](_img/view-manage-releases/send-email-02.png) + +The email contains links that enable the recipients to go directly to +the release definition and the list of releases. + +![The email sent from the Logs page](_img/view-manage-releases/send-email-03.png) + +

    Release history

    + +Choose **History** on the main toolbar when a release is selected to show +the list of actions taken on this specific release; such as when it was +created, deployed, and any approvals or rejections. The list shows the +name of the user who initiated the action, the date and time, the type of +action, and the details. There is also a **Comments** column, not visible in this +screenshot, which shows information such as the comments from approvers. + +![Opening the History page](_img/view-manage-releases/release-history-01.png) + +>Notice that some changes may be shown as initiated by a security group, such as +Project Collection Administrators. This occurs when, for example, an +administrator over-rides an action such as a pending approval. + +By default, the list of actions is sorted in descending date and time +order (the ![down-arrow](_img/view-manage-releases/column-sort-down-icon.png) icon +indicates the current sort order). Choose any of the column headings +to sort the list in the order of that column's values, and choose the +same heading again to reverse the sort order. + +![Sorting the History page](_img/view-manage-releases/release-history-02.png) + +You can easily copy the history information to another application: + +* Select some or all of the rows in the history list. Do this using your + mouse by clicking while holding the **Shift** or **Ctrl** key, or press + **Ctrl-A** when the list has the focus. +* Press **Ctrl-C** to copy the rows to the clipboard. +* Switch to the target application and press **Ctrl-V**, or + choose **Paste** from the shortcut menu. + +The information is tab delimited, and so it is automatically +imported into separate columns when you paste into a spreadsheet +or a similar type of app. + +![Copied rows from the History page](_img/view-manage-releases/release-history-05.png) + +If there are actions that updated the snapshot of the release definition +used to create this release, the **Change Type** column in the **History** list +contains a **View details** link where you can compare the original and the +updated snapshot versions. + +![Opening the comparison of historical actions](_img/view-manage-releases/release-history-03.png) + +The comparison page highlights the changes with a red and green +background in the usual way. Here, you can see that the change was the +removal of Christie Church as an approver. + +![Comparison of historical actions](_img/view-manage-releases/release-history-04.png) + +## See also + +* [Releases](../concepts/releases/index.md) + +* [Work with release definitions](work-with-release-definitions.md) + +* [Create and deploy a release](create-deploy-releases.md) + +* [Monitor releases and debug deployment issues](debug-deployment-issues.md) + +## Q&A + + + +### Where can I learn step-by-step how to build and release my app? + +[Examples](../apps/index.md) + +### How do I programmatically create a release definition? + +[Release Management REST API](../../integrate/index.md) + +[!INCLUDE [qa-agents](../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/actions/work-with-release-definitions.md b/docs/build-release/actions/work-with-release-definitions.md new file mode 100644 index 00000000000..125177f0243 --- /dev/null +++ b/docs/build-release/actions/work-with-release-definitions.md @@ -0,0 +1,265 @@ +--- +title: Work with release definitions with Release Management +description: Work with release definitions in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: A38FB217-B259-4DD1-B5BF-D945278493C2 +ms.manager: douge +ms.author: ahomer +ms.date: 02/16/2017 +--- + +# How to: Work with release definitions + +[!INCLUDE [version-rm-dev14](../_shared/version-rm-dev14.md)] + +This topic shows you how to: + +* **[Create a new release definition](#create-release-def)** + - [from a template](#create-template) + - [as an empty definition](#create-empty) + - [add artifacts and triggers](#create-addartifacts) + - [replicate a definition](#replicate-def)

    +* **[Create and use environment templates](#use-template)** + - [add more environments](#add-envir) + - [clone environments](#clone-environment)

    +* **[Define processes in an environment](#define-processes)** + - [add tasks to an environment](#add-tasks) + - [use task groups](#task-groups) + +

    Create a new release definition

    + +1. Open the **Build & Release** hub and choose **Releases**. + +1. Choose the **+** icon and select **Create release definition**. + + ![Creating a new release definition](_img/work-with-release-definitions/create-new.png) + + +1. Select a template or start with an empty definition: + + * If a template is relevant to your scenario, select it to + automatically add some tasks and apply typical settings. + For example, if you select the **Azure App Service Deployment** + template, you automatically get a task to deploy your app + to Azure App Services. + + * If there's no template for your scenario, select **Empty process** and then [add the tasks you need](#add-tasks). + + ![Selecting a template or empty process](_img/work-with-release-definitions/choose-template.png) + + +1. Specify the [artifacts](../concepts/definitions/release/artifacts.md#sources) + you want to deploy. Choose the type of source and specify + the details such as the project and build definition. + + ![Selecting the artifacts to deploy](_img/work-with-release-definitions/add-artifacts.png) + +1. Open the **Continuous deployment trigger** panel and set the [trigger](../concepts/definitions/release/triggers.md) + if you want a new release to be created when a new version of the source artifacts are available. + + ![Setting the continuous deployment trigger](_img/work-with-release-definitions/cd-trigger.png) + + [What's the difference between a release definition and a release?](../concepts/releases/index.md) + +1. Check that the [environment deployment trigger](../concepts/definitions/release/triggers.md#env-triggers) + is set to automatically start a deployment when the release is created. + You can also specify other pre-deployment conditions here if required. + + ![Setting the pre-deployment options](_img/work-with-release-definitions/set-conditions.png) + +1. Open the **Tasks** tab and select the default **Run on agent** item. In the properties + panel, under **Agent selection**, check that **Hosted** is selected to use the default + queue and agent available in VSTS. If you want to use a different agent that you have + [previously installed](../concepts/agents/pools-queues.md), such as an on-premises agent in TFS, select the agents queue. + + ![Setting the deployment queue](_img/work-with-release-definitions/check-queue.png) + +1. If required, or if you selected the empty process template, you can now + [add more tasks](#add-tasks) and [additional environments](#add-envir). + + +### Replicate a definition or environment + +If your definition has a pattern that you want to replicate in other +definitions, clone it or export it. + +![Cloning an existing release definition](_img/work-with-release-definitions/clone-definition.png) + +When you clone a definition, the copy appears in your list of releases. +You can save it with a new name. + +When you export a definition, you can import it afterwards. Then, if required, modify it and save it with a new name. + +![Importing an existing release definition](_img/work-with-release-definitions/import.png) + + +### Create and use a template + +Create a template for a definition from an environment within the definition by using the old definition editor. + +![Switching to the previoius release definition editor](_img/work-with-release-definitions/old-editor.png) + +![Creating a template from an existing release definition](_img/work-with-release-definitions/save-template.png) + +After you create a template, it appears in the **Custom** tab of the +**Create release definition** wizard. Your team members can use it to +follow the pattern in new definitions. +For more details, see [Environment templates in Release Management](../concepts/definitions/release/env-templates.md). + +### Use the REST API + +Create release definitions using the [Release Management REST API](../../integrate/index.md). + + +### Add more environments + +A release definition, by default, contains a single [environment](../concepts/definitions/release/environments.md). +Configure additional environments in a release definition to represent the +target server(s) or locations where you will deploy your app. + +1. Open the **+ Add** list and choose **New environment**. + + ![Adding a new environment to a release definition](_img/work-with-release-definitions/new-environment.png) + +1. The template selector panel opens. Follow [these steps](#create-template) + to configure the new environment. + +1. After you have created and configured your environments, [add tasks to them](#add-tasks). + +>You can add environments using the [Release Management REST API](../../integrate/index.md). + +

    Clone an existing environment

    + +A release definition often contains several environments such as +development, testing, QA, and production. Typically, all of these +environments are fundamentally similar - and the techniques used to set up +and deploy to each one are the same with the exception of minor +differences in configuration for each environment and task (such as +target URLs, service paths, and server names). + +After you have added an environment to a release definition and configured +it by adding tasks and setting the properties for each one, clone +it to create another environment within the same definition. + +You can clone individual environments directly within a definition in the **Pipeline** tab. + +![Cloning an existing environment directly](_img/work-with-release-definitions/clone-environment-03.png) + +Alternatively, select the environment you want to clone, open the **+ Add** list, +and choose **Clone environment**. + +![Cloning a selected environment](_img/work-with-release-definitions/clone-environment-04.png) + +The cloned environment has the same tasks, task properties, and +configuration settings as the original. + +Select the cloned environment to open the properties panel, and update the +[pre-deployment approval](../concepts/definitions/release/environments.md#approvals), +[trigger](../concepts/definitions/release/triggers.md#env-triggers), and +[queue](../concepts/agents/pools-queues.md) settings for the cloned environment as required. + +

    Define processes in an environment

    + +The deployment steps in an [environment](../concepts/definitions/release/environments.md) +are described using [task phases](../concepts/process/phases.md) and [tasks](../concepts/process/tasks.md). + +

    Add tasks

    + +The **Tasks** tab of the release definition editor shows a list of the task phases and +tasks defined for each environment. Open the tasks list for an environment by +choosing the "phases and tasks" link in the environment, or by selecting the environment +name in the **Tasks** drop-down list. + +![Opening the tasks tab](_img/work-with-release-definitions/goto-tasks.png) + +By default, unless you chose the **Empty process** template when you created your release definition, +the definition will contain a **Run on agent** phase. Add tasks to a phase by choosing the **+** +icon in the phase item to open the **Add tasks** panel. Select the type of task you need (or choose +**All**), or search for a task by name. When you find the task, choose the **Add** button +that appears when you select the task. + +![Adding tasks to a phase](_img/work-with-release-definitions/add-tasks.png) + +> A link at the top of the list takes you to +[Visual Studio Marketplace](https://marketplace.visualstudio.com/VSTS) +where you can download and install additional tasks. + +You can add tasks specifically for execution on the deployment agent, +on a deployment group, or on the server without using an agent by +adding the appropriate type of [task phase](../concepts/process/phases.md). + +![Adding a new task phase](_img/work-with-release-definitions/add-phase.png) + +For more details, see [Environments](../concepts/definitions/release/environments.md) +and [Phases in Build and Release Management](../concepts/process/phases.md). + +>You can add tasks to an environment using the +[Release Management REST API](../../integrate/index.md). + +

    Use task groups

    + +A *task group* lets you to encapsulate a sequence of tasks already defined +in a build or a release definition into a single reusable task that can be +added to a build or release definition just like any other task. You can +choose to extract the parameters from the encapsulated tasks as configuration +variables, and abstract the rest of the task information. + +![Creating task group context action](_img/work-with-release-definitions/create-task-group.png) + +For more details, see [Task groups](../concepts/library/task-groups.md). + +## Next + +* [Releases](../concepts/releases/index.md) + +* [Create and deploy a release from a release definition](create-deploy-releases.md) + +* [View and manage releases](view-manage-releases.md) + +* [Monitor releases and debug deployment issues](debug-deployment-issues.md) + +* [Configure your release pipelines for safe deployments](https://blogs.msdn.microsoft.com/visualstudioalm/2017/04/24/configuring-your-release-pipelines-for-safe-deployments/) + +

    Release definition concepts

    + +A [release definition](../concepts/definitions/release/index.md) +contains all the tasks and settings used to create a release and +deployment to your target machines. To learn more about release +definition settings, see: + +* [General settings](../concepts/definitions/release/index.md) + +* [Phases](../concepts/process/phases.md) + +* [Tasks](../concepts/process/tasks.md) + +* [Triggers](../concepts/definitions/release/triggers.md) + +* [Approvals](../concepts/definitions/release/environments.md#approvals) + +* [Variables](../concepts/definitions/release/variables.md) + +* [Retention](../concepts/policies/retention.md) + +* [Releases](../concepts/releases/index.md) + +## Q&A + + + +### Where can I learn step-by-step how to build and release my app? + +[Examples](../apps/index.md) + +### How do I programmatically create a release definition? + +[Release Management REST API](../../integrate/index.md) + +[!INCLUDE [qa-agents](../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/_shared/_img/add-app-service-task.png b/docs/build-release/apps/_shared/_img/add-app-service-task.png new file mode 100644 index 00000000000..c8be637d000 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/add-app-service-task.png differ diff --git a/docs/build-release/apps/_shared/_img/aspnet-core-to-windows-vm/cicd-get-started-dotnetcore-sample.png b/docs/build-release/apps/_shared/_img/aspnet-core-to-windows-vm/cicd-get-started-dotnetcore-sample.png new file mode 100644 index 00000000000..63f1c8597f7 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/aspnet-core-to-windows-vm/cicd-get-started-dotnetcore-sample.png differ diff --git a/docs/build-release/apps/_shared/_img/aspnet-core-to-windows-vm/iis-deployment-group-in-release-definition.png b/docs/build-release/apps/_shared/_img/aspnet-core-to-windows-vm/iis-deployment-group-in-release-definition.png new file mode 100644 index 00000000000..4a2d0d7cc59 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/aspnet-core-to-windows-vm/iis-deployment-group-in-release-definition.png differ diff --git a/docs/build-release/apps/_shared/_img/aspnet-core-to-windows-vm/select-iis-website-deployment-release-template.png b/docs/build-release/apps/_shared/_img/aspnet-core-to-windows-vm/select-iis-website-deployment-release-template.png new file mode 100644 index 00000000000..7c521314cbf Binary files /dev/null and b/docs/build-release/apps/_shared/_img/aspnet-core-to-windows-vm/select-iis-website-deployment-release-template.png differ diff --git a/docs/build-release/apps/_shared/_img/authorize-azure-subscription-cropped.png b/docs/build-release/apps/_shared/_img/authorize-azure-subscription-cropped.png new file mode 100644 index 00000000000..8805507965d Binary files /dev/null and b/docs/build-release/apps/_shared/_img/authorize-azure-subscription-cropped.png differ diff --git a/docs/build-release/apps/_shared/_img/authorize-azure-subscription-in-new-release-definition.png b/docs/build-release/apps/_shared/_img/authorize-azure-subscription-in-new-release-definition.png new file mode 100644 index 00000000000..479ead9604f Binary files /dev/null and b/docs/build-release/apps/_shared/_img/authorize-azure-subscription-in-new-release-definition.png differ diff --git a/docs/build-release/apps/_shared/_img/azure-web-app-deployment-step-azure-subscription-manage.png b/docs/build-release/apps/_shared/_img/azure-web-app-deployment-step-azure-subscription-manage.png new file mode 100644 index 00000000000..035130e619f Binary files /dev/null and b/docs/build-release/apps/_shared/_img/azure-web-app-deployment-step-azure-subscription-manage.png differ diff --git a/docs/build-release/apps/_shared/_img/configure-app-service-deploy-task.png b/docs/build-release/apps/_shared/_img/configure-app-service-deploy-task.png new file mode 100644 index 00000000000..64c32eef90f Binary files /dev/null and b/docs/build-release/apps/_shared/_img/configure-app-service-deploy-task.png differ diff --git a/docs/build-release/apps/_shared/_img/configure-docker-app-service-deploy-task.png b/docs/build-release/apps/_shared/_img/configure-docker-app-service-deploy-task.png new file mode 100644 index 00000000000..52fcecedda7 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/configure-docker-app-service-deploy-task.png differ diff --git a/docs/build-release/apps/_shared/_img/confirm-or-add-artifact.png b/docs/build-release/apps/_shared/_img/confirm-or-add-artifact.png new file mode 100644 index 00000000000..b8251e764b3 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/confirm-or-add-artifact.png differ diff --git a/docs/build-release/apps/_shared/_img/confirm-or-set-cd-trigger.png b/docs/build-release/apps/_shared/_img/confirm-or-set-cd-trigger.png new file mode 100644 index 00000000000..7b680254e1e Binary files /dev/null and b/docs/build-release/apps/_shared/_img/confirm-or-set-cd-trigger.png differ diff --git a/docs/build-release/apps/_shared/_img/create-docker-container-webapp.png b/docs/build-release/apps/_shared/_img/create-docker-container-webapp.png new file mode 100644 index 00000000000..496f17d31a0 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/create-docker-container-webapp.png differ diff --git a/docs/build-release/apps/_shared/_img/createacr.png b/docs/build-release/apps/_shared/_img/createacr.png new file mode 100644 index 00000000000..8f9ecfe63cb Binary files /dev/null and b/docs/build-release/apps/_shared/_img/createacr.png differ diff --git a/docs/build-release/apps/_shared/_img/import-repository-menu-item.png b/docs/build-release/apps/_shared/_img/import-repository-menu-item.png new file mode 100644 index 00000000000..a24c75174b6 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/import-repository-menu-item.png differ diff --git a/docs/build-release/apps/_shared/_img/navigate-to-build-summary.png b/docs/build-release/apps/_shared/_img/navigate-to-build-summary.png new file mode 100644 index 00000000000..34f630c21ef Binary files /dev/null and b/docs/build-release/apps/_shared/_img/navigate-to-build-summary.png differ diff --git a/docs/build-release/apps/_shared/_img/open-build-summary.png b/docs/build-release/apps/_shared/_img/open-build-summary.png new file mode 100644 index 00000000000..e6a861995c6 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/open-build-summary.png differ diff --git a/docs/build-release/apps/_shared/_img/release-from-build-summary.png b/docs/build-release/apps/_shared/_img/release-from-build-summary.png new file mode 100644 index 00000000000..64344b14609 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/release-from-build-summary.png differ diff --git a/docs/build-release/apps/_shared/_img/release-from-release-page.png b/docs/build-release/apps/_shared/_img/release-from-release-page.png new file mode 100644 index 00000000000..7b6350d1500 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/release-from-release-page.png differ diff --git a/docs/build-release/apps/_shared/_img/set-up-first-build-from-code-hub.png b/docs/build-release/apps/_shared/_img/set-up-first-build-from-code-hub.png new file mode 100644 index 00000000000..f5c9f21ea0f Binary files /dev/null and b/docs/build-release/apps/_shared/_img/set-up-first-build-from-code-hub.png differ diff --git a/docs/build-release/apps/_shared/_img/windows-deployment-group-setup.png b/docs/build-release/apps/_shared/_img/windows-deployment-group-setup.png new file mode 100644 index 00000000000..0b369c9799c Binary files /dev/null and b/docs/build-release/apps/_shared/_img/windows-deployment-group-setup.png differ diff --git a/docs/build-release/apps/_shared/_img/windows-deployment-group.png b/docs/build-release/apps/_shared/_img/windows-deployment-group.png new file mode 100644 index 00000000000..8efba1b3a81 Binary files /dev/null and b/docs/build-release/apps/_shared/_img/windows-deployment-group.png differ diff --git a/docs/build-release/apps/_shared/add-service-endpoint-azure.md b/docs/build-release/apps/_shared/add-service-endpoint-azure.md new file mode 100644 index 00000000000..1043d2cadb8 --- /dev/null +++ b/docs/build-release/apps/_shared/add-service-endpoint-azure.md @@ -0,0 +1,29 @@ +

    +If a subscription is not available, then add a service endpoint: +

    + +
      + +
    1. ![Manage](_img/azure-web-app-deployment-step-azure-subscription-manage.png)
    2. + +
    3. Click New Service Endpoint, and then click Azure.
    4. + +
    5. On the Add Azure Subscription dialog box:

      1. Select Certificate.
      2. Click the link to download your publishsettings xml file and then open the file.
      3. Copy the ID and certificate values from the file and paste them into the Add Azure Subscription dialog box.
    6. + +
    + +
    diff --git a/docs/build-release/apps/_shared/aspnet-core-build-tasks.md b/docs/build-release/apps/_shared/aspnet-core-build-tasks.md new file mode 100644 index 00000000000..8f74860f379 --- /dev/null +++ b/docs/build-release/apps/_shared/aspnet-core-build-tasks.md @@ -0,0 +1,3 @@ +After you select the **ASP.NET Core (PREVIEW)** template, instances of the .NET Core task are added to your build definition to [restore](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/dotnet-restore), [build](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/dotnet-build), [test](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/dotnet-test), and [publish](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/dotnet-publish) the app. + + A publish build artifacts task is also added. This task publishes your web deploy package as an artifact. Your CD release process uses this package to deploy your app. \ No newline at end of file diff --git a/docs/build-release/apps/_shared/azure-web-app-setup.md b/docs/build-release/apps/_shared/azure-web-app-setup.md new file mode 100644 index 00000000000..0f87da5d889 --- /dev/null +++ b/docs/build-release/apps/_shared/azure-web-app-setup.md @@ -0,0 +1,35 @@ +### Create the Azure app service + +An [Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-value-prop-what-is/) is where you'll deploy your application. Technically speaking, an app service is a resource with a specific pricing tier in Azure that can then host multiple, distinct applications. In this example we'll use a [Web App](https://azure.microsoft.com/en-us/documentation/articles/app-service-web-overview/). +If you're creating a new App Service for this example, you can use the [Free pricing tier](https://azure.microsoft.com/pricing/details/app-service/). + +To create a new Web App, simply go to the App Services blade on the Azure portal, click **+Add**, select the **Web App** template, click **Create**, and enter a name and other details. The web app URL will then be `{name}.azurewebsites.net.` + +

    Can I use an existing Azure account? ▼

    +
    +If you have an existing Azure account, you can certainly use a new or existing App Service in that account for this walkthrough. +

    +
    + +

    How do I create a new Azure account with free credits? ▼

    +
    +If you don't yet have an Azure account, you can get started with free credits at [https://azure.microsoft.com/en-us/free/](https://azure.microsoft.com/en-us/free/). + +Alternately, consider signing up for [Visual Studio Dev Essentials](https://azure.microsoft.com/en-us/pricing/member-offers/vs-dev-essentials/) which gives you $25/month in Azure credit each month for a full year. +

    +
    + +

    Can I just use a temporary App Service instead? ▼

    +
    + Yes, just visit [Create your Azure App Service App](https://tryappservice.azure.com/) to set up a Web App for temporary use (1 hour). On that page, do the following: + +
      +
    1. Select Web App and choose Next.
    2. +
    3. Select Empty Site and choose Create (we use an empty site because you already have the necessary application code in your Visual Studio project).
    4. +
    5. Enter your Microsoft account credentials when requested.
    6. +
    +In a few moments the site will then give you a URL such as `https://df8381c9-0ee0-4-aaa-aaaa.azurewebsites.net/`. This is the URL of your live site to which we'll deploy the application. +

    +
    + +Learn more at the [Web Apps Overview](https://azure.microsoft.com/documentation/articles/app-service-web-overview/). \ No newline at end of file diff --git a/docs/build-release/apps/_shared/ci-web-app-next-steps.md b/docs/build-release/apps/_shared/ci-web-app-next-steps.md new file mode 100644 index 00000000000..a9902121de6 --- /dev/null +++ b/docs/build-release/apps/_shared/ci-web-app-next-steps.md @@ -0,0 +1,9 @@ +You've just put your own CI process in place to automatically build and validate whatever code is checked in by your team. You can also automatically deploy your app. To learn more, see one of these topics: + +* [Deploy to Azure Web App](../cd/deploy-webdeploy-webapps.md) + +* [Deploy to a Windows VM](../cd/deploy-webdeploy-iis-deploygroups.md) + +You can also modify this build definition to meet the needs of your team. To learn more see one of these topics: + +* [CI builds for Git in VSTS](../../actions/ci-build-git.md) diff --git a/docs/build-release/apps/_shared/create-aspnet-core-build-team-services.md b/docs/build-release/apps/_shared/create-aspnet-core-build-team-services.md new file mode 100644 index 00000000000..1382c4fc82d --- /dev/null +++ b/docs/build-release/apps/_shared/create-aspnet-core-build-team-services.md @@ -0,0 +1,13 @@ +1. On the **Files** tab of the **Code** hub, click **Set up build**. + + ![Screenshot showing button to set up build for a repository](_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub in VSTS and asked to **Choose a template**. + +1. In the right panel, click **ASP.NET Core**, and then click **Apply**. + + ![Screenshot showing dotnet core template](../aspnet/_shared/_img/apply-aspnet-core-build-template.png) + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**, select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. diff --git a/docs/build-release/apps/_shared/create-azure-container-registry.md b/docs/build-release/apps/_shared/create-azure-container-registry.md new file mode 100644 index 00000000000..eb5483b9136 --- /dev/null +++ b/docs/build-release/apps/_shared/create-azure-container-registry.md @@ -0,0 +1,15 @@ +## Create an Azure Container Registry + +You use [Azure Container Registry](https://docs.microsoft.com/en-us/azure/container-registry/) to host the Docker image that is published by the CI process. Follow the steps below to create and configure a registry. In later steps, you use VSTS to deploy the image to an Azure Web App for Containers. + +1. Sign into your Azure Account at [https://portal.azure.com](https://portal.azure.com). + +1. In the Azure Portal, choose **New**, **Containers**, then choose **Azure Container Registry**. + +1. Enter a **Registry name**, **Resource Group**, and select a **Location**. + + ![Container Registry settings](_img/createacr.png) + +1. For **Admin user**, choose **Enable** and then choose **Create**. + +1. Wait for the Azure Container Registry deployment to finish. diff --git a/docs/build-release/apps/_shared/create-azure-linux-vm.md b/docs/build-release/apps/_shared/create-azure-linux-vm.md new file mode 100644 index 00000000000..7e8455799b6 --- /dev/null +++ b/docs/build-release/apps/_shared/create-azure-linux-vm.md @@ -0,0 +1,4 @@ +## Create an Azure Linux VM using Powershell + +To provide a platform to run your app, you need a Linux virtual machine that runs NGINX. +If you don't already have one, see [Create a Linux virtual machine with the Azure CLI](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/quick-create-cli). diff --git a/docs/build-release/apps/_shared/create-azure-webapp-to-host-container.md b/docs/build-release/apps/_shared/create-azure-webapp-to-host-container.md new file mode 100644 index 00000000000..6124e13796f --- /dev/null +++ b/docs/build-release/apps/_shared/create-azure-webapp-to-host-container.md @@ -0,0 +1,18 @@ +## Create an Azure web app to host a container + +1. Sign into your Azure Account at [https://portal.azure.com](https://portal.azure.com). + +1. In the Azure Portal, choose **New**, **Web + Mobile**, then choose **Web App for Containers**. + +1. Enter a name for your new web app, and select or create a new Resource Group. + Then choose **Configure container** and select **Azure Container Registry**. + Use the drop-down lists to select the registry you created earlier, and the + Docker image and tag that was generated by the build definition. + + ![Creating the Web App for Containers](_img/create-docker-container-webapp.png) + + The **Docker** tasks you used in the build definition when you created the + build artifacts push the Docker image back into your Azure Container Registry. + The web app you created here will host an instance of that image and expose it as a website. + +1. Wait until the new web app has been created. diff --git a/docs/build-release/apps/_shared/create-azure-windows-vm.md b/docs/build-release/apps/_shared/create-azure-windows-vm.md new file mode 100644 index 00000000000..cfb68edd50c --- /dev/null +++ b/docs/build-release/apps/_shared/create-azure-windows-vm.md @@ -0,0 +1,3 @@ +## Create an Azure Windows VM using Powershell + +To provide a platform to run your app, you need a Windows virtual machine that runs IIS. If you don't already have one, see [Create a Windows virtual machine with the Azure CLI](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/quick-create-cli). \ No newline at end of file diff --git a/docs/build-release/apps/_shared/create-deployment-group.md b/docs/build-release/apps/_shared/create-deployment-group.md new file mode 100644 index 00000000000..acd1f9c64d5 --- /dev/null +++ b/docs/build-release/apps/_shared/create-deployment-group.md @@ -0,0 +1,27 @@ +## Create a deployment group + +Deployment groups in VSTS make it easier to organize the servers that you want to use to host your app. A deployment group is a collection of machines with a VSTS agent on each of them. Each machine interacts with VSTS to coordinate deployment of your app. + +1. Open the VSTS web portal (`https://{your-account}.visualstudio.com`), navigate to the **Build & Release** hub, and then click **Deployment groups**. + +1. Click **Add Deployment group** (or **New** if there are already deployment groups in place. + +1. Enter a name for the group, such as *myIIS*, and then click **Create**. + +1. In the **Register machine** section, make sure that **Windows** is selected, and that **Use a personal access token in the script for authentication** is also selected. Click **Copy script to clipboard**. + + ![Screenshot showing update to code](./_img/windows-deployment-group-setup.png) + + The script that you've copied to your clipboard will download and configure an agent on the VM so that it can receive new web deployment packages and apply them to IIS. + +1. On your VM, in an **Administrator PowerShell** console, paste and run the script. + +1. When you're prompted to configure tags for the agent, press Enter (you don't need any tags). + +1. When you're prompted for the user account, press Enter to accept the defaults. + +1. When the script is done, it displays the message *Service vstsagent.account.computername started successfully*. + +1. On the **Deployment groups** page of the **Build & Release** hub in VSTS, open the *myIIS* deployment group. On the **Machines** tab, verify that your VM is listed. + + ![Screenshot showing update to code](./_img/windows-deployment-group.png) diff --git a/docs/build-release/apps/_shared/create-release-azure-webapp-container.md b/docs/build-release/apps/_shared/create-release-azure-webapp-container.md new file mode 100644 index 00000000000..06007219d67 --- /dev/null +++ b/docs/build-release/apps/_shared/create-release-azure-webapp-container.md @@ -0,0 +1,55 @@ +## Create a release definition + +1. In the **Build & Release** hub, open the build summary for your build. + + ![Opening the build summary](_img/open-build-summary.png) + +1. In the build summary page, choose the **Release** icon to start a new release definition. + + ![Starting a new release definition from a build summary](_img/release-from-build-summary.png) + + If you have previously created a release definition that uses these build artifacts, you will + be prompted to create a new release instead. In that case, go to the **Releases** tab page and + start a new release definition from there by choosing the **+** icon. + +1. Select the **Azure App Service Deployment** task and choose **Apply**. + + ![Adding the App Service Deployment task](_img/add-app-service-task.png) + +1. Open the **Tasks** tab and select the **Azure App Service Deployment** task. + Configure the properties as follows: + + - **Azure Subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions connection to your Azure subscription. + If you are using VSTS and if you see an **Authorize** button next to the input, click on it to authorize VSTS to connect to your Azure subscription. If you are using TFS or if you do not see + the desired Azure subscription in the list of subscriptions, see [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm) to manually set up the connection. + + ![Authorizing an Azure subscription](_img/authorize-azure-subscription-in-new-release-definition.png) + + - **App Service Name**: Select the name of the web app from your subscription. + + When you select the Docker-enabled app service, the task recognizes that it is a + containerized app, and changes the property settings to show the following: + + - **Registry or Namespace**: Enter the path to your Azure Container Registry. Typically this is _your-registry-name_**.azurecr.io** + + - **Repository**: Enter the name of your repository, which is typically the name of the app you started with. + + - **Tag**: Enter `$(Build.BuildId)`. The tag that was created automatically is the build identifier. + + ![Configuring the App Service Deployment task](_img/configure-docker-app-service-deploy-task.png) + +1. Save the release definition. + +## Create a release to deploy your app + +You're now ready to create a release, which means to start the process of running the release definition with the artifacts produced by a specific build. This will result in deploying the build: + +1. Choose **+ Release** and select **Create Release**. + +1. In the **Create new release** dialog, check that the artifact version you want to use is selected and choose **Queue**. + +1. Choose the release link in the information bar message. For example: "Release **Release-1** has been created". + +1. Open the **Logs** tab to watch the release console output. + +1. After the release is complete, navigate to your site running in Azure using the Web App URL `http://{web_app_name}.azurewebsites.net`, and verify its contents. diff --git a/docs/build-release/apps/_shared/create-release.md b/docs/build-release/apps/_shared/create-release.md new file mode 100644 index 00000000000..026f9f7b58a --- /dev/null +++ b/docs/build-release/apps/_shared/create-release.md @@ -0,0 +1,61 @@ +

    Define your CD release process

    + +Your CD release process picks up the artifacts published by your CI build and then deploys them to your Azure web site. + +1. Do one of the following to start creating a release definition: + + * If you've just completed a CI build (see above), choose the link (for example, _Build 20170815.1_) + to open the build summary. Then choose **Release** to start a new release definition that's automatically linked to the build definition. + + ![Creating a new release definition from the build summary](_img/release-from-build-summary.png) + + * Open the **Releases** tab of the **Build & Release** hub, open the **+** drop-down + in the list of release definitions, and choose **Create release definition**. + + ![Creating a new release definition in the Releases page](_img/release-from-release-page.png) + +1. The easiest way to create a release definition is to use a template. If you are deploying a Node app, select the **Deploy Node.js App to Azure App Service** template. + Otherwise, select the **Azure App Service Deployment** template. Then choose **Apply**. + + > The only difference between these templates is that Node template configures the task to generate a **web.config** file containing a parameter that starts the **iisnode** service. + +1. If you created your new release definition from a build summary, check that the build definition and artifact + is shown in the **Artifacts** section on the **Pipeline** tab. If you created a new release definition from + the **Releases** tab, choose the **+ Add** link and select your build artifact. + + ![Checking or selecting the build definition and artifact](_img/confirm-or-add-artifact.png) + +1. Choose the **Continuous deployment** icon in the **Artifacts** section, check that the + continuous deployment trigger is enabled, and the **master** branch is selected. If not, set these options now. + + ![Checking or setting the Continuous deployment trigger](_img/confirm-or-set-cd-trigger.png) + + > Continuous deployment is not enabled by default when you create a new release definition from the **Releases** tab. + +1. Open the **Task** tab, select the **Deploy Azure App Service** task, and configure it as follows: + + ![Deploy: Azure App Service Deploy](../../tasks/deploy/_img/azure-web-app-deployment-icon.png) [Deploy: Azure App Service Deploy](../../tasks/deploy/azure-app-service-deploy.md) task - deploy the app to Azure App Services. + + - **Azure Subscription:** Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions connection to your Azure subscription. + If you are using VSTS and if you see an **Authorize** button next to the input, click on it to authorize VSTS to connect to your Azure subscription. If you are using TFS or if you do not see + the desired Azure subscription in the list of subscriptions, see [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm) to manually set up the connection. + + ![Authorizing an Azure subscription](_img/authorize-azure-subscription-in-new-release-definition.png) + + - **App Service Name**: Select the name of the web app from your subscription. + +1. Save the release definition. + +

    Create a release to deploy your app

    + +You're now ready to create a release, which means to start the process of running the release definition with the artifacts produced by a specific build. This will result in deploying the build: + +1. Choose **+ Release** and select **Create Release**. + +1. In the **Create new release** dialog, check that the artifact version you want to use is selected and choose **Queue**. + +1. Choose the release link in the information bar message. For example: "Release **Release-1** has been created". + +1. Open the **Logs** tab to watch the release console output. + +1. After the release is complete, navigate to your site running in Azure using the Web App URL `http://{web_app_name}.azurewebsites.net`, and verify its contents. diff --git a/docs/build-release/apps/_shared/get-sample-code-github.md b/docs/build-release/apps/_shared/get-sample-code-github.md new file mode 100644 index 00000000000..4ca267bf6e7 --- /dev/null +++ b/docs/build-release/apps/_shared/get-sample-code-github.md @@ -0,0 +1,5 @@ +To fork the sample app into your own GitHub repository: + + 1. Navigate to the above GitHub repository URL in your browser. + + 1. Select **Fork** to create your own copy of the repository. \ No newline at end of file diff --git a/docs/build-release/apps/_shared/get-sample-code-intro.md b/docs/build-release/apps/_shared/get-sample-code-intro.md new file mode 100644 index 00000000000..376793db699 --- /dev/null +++ b/docs/build-release/apps/_shared/get-sample-code-intro.md @@ -0,0 +1,4 @@ +To configure a CI build process for your app, the source code needs to be in a version control system. VSTS and TFS integrate with various version control systems such as Git in VSTS or TFS, Team Foundation Version Control (TFVC), GitHub, and Subversion. + +For a simple way to follow this quickstart, get the following sample app code and put it into your own version control repository: + diff --git a/docs/build-release/apps/_shared/get-sample-code-vsts-tfs-2017-update-2.md b/docs/build-release/apps/_shared/get-sample-code-vsts-tfs-2017-update-2.md new file mode 100644 index 00000000000..435c93e8fa3 --- /dev/null +++ b/docs/build-release/apps/_shared/get-sample-code-vsts-tfs-2017-update-2.md @@ -0,0 +1,7 @@ +To import the sample app into a Git repo in VSTS or TFS: + + 1. On the **Code** hub for your team project in VSTS/TFS, select the option to **Import repository**. + + 1. In the **Import a Git repository** dialog box, paste the above URL into the **Clone URL** text box. + + 1. Click **Import** to copy the sample code into your Git repo. \ No newline at end of file diff --git a/docs/build-release/apps/_shared/import-code-aspnet-core-docker.md b/docs/build-release/apps/_shared/import-code-aspnet-core-docker.md new file mode 100644 index 00000000000..1fdbee7994c --- /dev/null +++ b/docs/build-release/apps/_shared/import-code-aspnet-core-docker.md @@ -0,0 +1,20 @@ +## Import code for sample app into VSTS + +VSTS is a full-featured Git server for hosting your team's source code. You'll import code for a sample ASP.NET Core app into VSTS Git repository. This is the app that you will configure CI/CD for. + + + +1. In VSTS, on the **Code** hub for your VSTS project, select the option to **Import repository**. + + ![import repository menu item](_img/import-repository-menu-item.png) + +1. In the **Import a Git repository** dialog box, paste the following URL into the **Clone URL** textbox. + + ``` + https://github.com/adventworks/dotnetcore-docker-sample + ``` + +1. Click **Import** to copy the sample code into your Git repo. diff --git a/docs/build-release/apps/_shared/import-code-quickstart-intro.md b/docs/build-release/apps/_shared/import-code-quickstart-intro.md new file mode 100644 index 00000000000..d5e800f8227 --- /dev/null +++ b/docs/build-release/apps/_shared/import-code-quickstart-intro.md @@ -0,0 +1 @@ +VSTS is a full-featured Git server for hosting your team's source code. You'll import code for a sample app into VSTS Git repository. This is the app that you'll configure CI/CD for. \ No newline at end of file diff --git a/docs/build-release/apps/_shared/prepare-aspnet-windows-vm.md b/docs/build-release/apps/_shared/prepare-aspnet-windows-vm.md new file mode 100644 index 00000000000..42e321d9607 --- /dev/null +++ b/docs/build-release/apps/_shared/prepare-aspnet-windows-vm.md @@ -0,0 +1,6 @@ +On your VM, open an **Administrator: Windows PowerShell** console. Install IIS: + +```PowerShell +# Install IIS +Install-WindowsFeature Web-Server,Web-Asp-Net45,NET-Framework-Features +``` diff --git a/docs/build-release/apps/_shared/prepare-aspnetcore-windows-vm.md b/docs/build-release/apps/_shared/prepare-aspnetcore-windows-vm.md new file mode 100644 index 00000000000..7344bf94a46 --- /dev/null +++ b/docs/build-release/apps/_shared/prepare-aspnetcore-windows-vm.md @@ -0,0 +1,22 @@ +Running an ASP.NET Core app on Windows requires some dependencies. + +On your VM, open an **Administrator: Windows PowerShell** console. Install IIS and the required .NET features: + +```PowerShell +# Install IIS +Install-WindowsFeature Web-Server,Web-Asp-Net45,NET-Framework-Features + +# Install the .NET Core SDK +Invoke-WebRequest https://go.microsoft.com/fwlink/?linkid=848827 -outfile $env:temp\dotnet-dev-win-x64.1.0.4.exe +Start-Process $env:temp\dotnet-dev-win-x64.1.0.4.exe -ArgumentList '/quiet' -Wait + +# Install the .NET Core Windows Server Hosting bundle +Invoke-WebRequest https://go.microsoft.com/fwlink/?LinkId=817246 -outfile $env:temp\DotNetCore.WindowsHosting.exe +Start-Process $env:temp\DotNetCore.WindowsHosting.exe -ArgumentList '/quiet' -Wait + +# Restart the web server so that system PATH updates take effect +net stop was /y +net start w3svc +``` + +When `net start w3svc` appears, press **Enter** to run it. diff --git a/docs/build-release/apps/_shared/quickstart-next-steps.md b/docs/build-release/apps/_shared/quickstart-next-steps.md new file mode 100644 index 00000000000..807bd60e261 --- /dev/null +++ b/docs/build-release/apps/_shared/quickstart-next-steps.md @@ -0,0 +1,5 @@ +You can modify these build and release definitions to meet the needs of your team. To learn more see one of these tutorials: + +[//]: # (TODO: change these links to new azure specific tutorials) + +* [Define your multi-stage continuous deployment (CD) process](../../actions/define-multistage-release-process.md) diff --git a/docs/build-release/apps/_shared/uwp-ci-vsbuild-arguments.md b/docs/build-release/apps/_shared/uwp-ci-vsbuild-arguments.md new file mode 100644 index 00000000000..615de6facdc --- /dev/null +++ b/docs/build-release/apps/_shared/uwp-ci-vsbuild-arguments.md @@ -0,0 +1,19 @@ +
  • MSBuild Arguments: Leave it set to the default:

    +
    /p:AppxBundlePlatforms="$(BuildPlatform)" /p:AppxPackageDir="$(Build.BinariesDirectory)\AppxPackages\\" /p:AppxBundle=Always
    +
    +

    Q: Why do I need these arguments? A:

    +
      +
    • ```/p:AppxBundlePlatforms="$(BuildPlatform)"``` The template is setup with BuildPlatform="x86|x64|ARM" so the bundle will include all three platforms. +
    • +
    • ```/p:AppxPackageDir="$(Build.BinariesDirectory)\AppxPackages\\"``` Location where the bundle directories are created. +
    • +
    • ```/p:AppxBundle=Always``` Always produce a bundle. +
    • +
    +
  • +
  • Platform: Leave it blank. (The bundle platforms are specified in the above MSBuild Arguments.) +
  • +
  • Configuration: Leave it set to ```$(BuildConfiguration)```

    +

    Note: By default BuildConfiguration is set to ```release``` on the Variables tab. With the Universal Windows Platform, there is now a new native compiler that will improve the runtime performance of your app. With this change, it is highly recommended that you test your app in this compilation environment. By default, the Release build configuration enables the .NET native toolchain, so it is important to test your app with this Release configuration and check that your app behaves as expected. +

    +
  • diff --git a/docs/build-release/apps/_shared/view-build-summary.md b/docs/build-release/apps/_shared/view-build-summary.md new file mode 100644 index 00000000000..631c8cc8272 --- /dev/null +++ b/docs/build-release/apps/_shared/view-build-summary.md @@ -0,0 +1,6 @@ +1. Once the build completes, select the build number to view a summary of the build. + + ![Navigate to build summary](_img/navigate-to-build-summary.png) + +1. Notice the various sections in the build summary - the source version of the commit in build details section, list of all associated changes, links to work items associated with commits, and test results. +When the build is automatically triggered by a push to your Git repository, these sections are populated with all the relevant information. diff --git a/docs/build-release/apps/aspnet/_shared/_img/ReleasePipeline.png b/docs/build-release/apps/aspnet/_shared/_img/ReleasePipeline.png new file mode 100644 index 00000000000..c0f286deac7 Binary files /dev/null and b/docs/build-release/apps/aspnet/_shared/_img/ReleasePipeline.png differ diff --git a/docs/build-release/apps/aspnet/_shared/_img/apply-aspnet-core-build-template.png b/docs/build-release/apps/aspnet/_shared/_img/apply-aspnet-core-build-template.png new file mode 100644 index 00000000000..ce797fa794d Binary files /dev/null and b/docs/build-release/apps/aspnet/_shared/_img/apply-aspnet-core-build-template.png differ diff --git a/docs/build-release/apps/aspnet/_shared/_img/cd-release-running.png b/docs/build-release/apps/aspnet/_shared/_img/cd-release-running.png new file mode 100644 index 00000000000..7de3a341d40 Binary files /dev/null and b/docs/build-release/apps/aspnet/_shared/_img/cd-release-running.png differ diff --git a/docs/build-release/apps/aspnet/_shared/_img/ci-build-running.png b/docs/build-release/apps/aspnet/_shared/_img/ci-build-running.png new file mode 100644 index 00000000000..8b58f116002 Binary files /dev/null and b/docs/build-release/apps/aspnet/_shared/_img/ci-build-running.png differ diff --git a/docs/build-release/apps/aspnet/_shared/_img/commit-change-in-vs.png b/docs/build-release/apps/aspnet/_shared/_img/commit-change-in-vs.png new file mode 100644 index 00000000000..d92678d43c3 Binary files /dev/null and b/docs/build-release/apps/aspnet/_shared/_img/commit-change-in-vs.png differ diff --git a/docs/build-release/apps/aspnet/_shared/ci-cd-description.md b/docs/build-release/apps/aspnet/_shared/ci-cd-description.md new file mode 100644 index 00000000000..c04601c520a --- /dev/null +++ b/docs/build-release/apps/aspnet/_shared/ci-cd-description.md @@ -0,0 +1,3 @@ +![A typical release pipeline for web applications](./_img/ReleasePipeline.png) + +Continuous integration means starting an automated build (and possibly running tests) whenever new code is committed to or checked into the team project's source control repository. This gives you immediate feedback that the code builds and can potentially be deployed. Continuous delivery (or deployment) means starting an automated deployment process whenever a new successful build is available. Together, CI and CD mean that any code changes you commit to your repository are quickly validated and deployed to a live web site without any manual intervention. \ No newline at end of file diff --git a/docs/build-release/apps/aspnet/_shared/commit-build-release.md b/docs/build-release/apps/aspnet/_shared/commit-build-release.md new file mode 100644 index 00000000000..43df4daf926 --- /dev/null +++ b/docs/build-release/apps/aspnet/_shared/commit-build-release.md @@ -0,0 +1,29 @@ +

    Commit a change and see it automatically go live

    + +Now you get to see the magic of a release pipeline at work! You'll make a change in Visual Studio, commit it or check it in to the source repository, and then let the build and release definitions take care of the rest. + +1. On your deployed web site, click **About** at the top, and examine the page. We'll change the "Use this area..." text to something different. + +1. In Visual Studio, switch to Solution Explorer, expand **src > {project name} > Views > Home** and open _About.cshtml_. + +1. Change the text within the <p> tag, for example, to _Hello continuous integration and continuous deployment!_ + +1. Save the file, push/check-in the changes to the Team Project: + * If you're using Git in Visual Studio, click the changes icon on the status bar: + + ![Location of the changes button on the Visual Studio status bar](./_img/commit-change-in-vs.png) + + Then enter a commit message, click **Commit All**, click the **Sync** link, then click **Outgoing Commits > Push**. This will push the changes to respiratory on VSTS. + + * If you're using Team Foundation version control (TFVC), switch to the Team Explorer pane, then to Pending Changes where you should see About.cshtml listed. Enter a comment and click **Check In**. + +1. Once the push/check-in is complete, switch to VSTS in your browser. +1. Navigate to **Builds** and click on your build definition. You should see a build in progress: + + ![A continuous integration build running in VSTS](./_img/ci-build-running.png) + +1. When the build has completed, navigate to **Releases** and you should see that a release has started for that build: + + ![A continuous deployment release running in VSTS](./_img/cd-release-running.png) + +1. When the release has completed, browse to your web site, refresh the page, and see that the change has been deployed. diff --git a/docs/build-release/apps/aspnet/_shared/create-aspnet-core-build-tfs-2017-rtm.md b/docs/build-release/apps/aspnet/_shared/create-aspnet-core-build-tfs-2017-rtm.md new file mode 100644 index 00000000000..5a63a6ed243 --- /dev/null +++ b/docs/build-release/apps/aspnet/_shared/create-aspnet-core-build-tfs-2017-rtm.md @@ -0,0 +1,13 @@ +1. On the **Files** tab of the **Code** hub, click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub in VSTS and asked to **Choose a template**. + +1. In the right panel, click **ASP.NET Core**, and then click **Apply**. + + ![Screenshot showing dotnet core template](_img/apply-aspnet-core-build-template.png) + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**, select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. diff --git a/docs/build-release/apps/aspnet/_shared/define-ci-build.md b/docs/build-release/apps/aspnet/_shared/define-ci-build.md new file mode 100644 index 00000000000..bcadddef7a4 --- /dev/null +++ b/docs/build-release/apps/aspnet/_shared/define-ci-build.md @@ -0,0 +1,3 @@ +

    Define and test your CI build process

    + +Continuous integration means starting an automated build whenever new code is committed to or checked into the team project's source control repository. This gives you immediate feedback that the code builds and can potentially be deployed. You can also run automated tests. Finally, this CI build will produce a web deploy package artifact and publish it so that it can be consumed by your CD process. \ No newline at end of file diff --git a/docs/build-release/apps/aspnet/_shared/import-code-aspnet-core-vsts.md b/docs/build-release/apps/aspnet/_shared/import-code-aspnet-core-vsts.md new file mode 100644 index 00000000000..5c9a6c0229a --- /dev/null +++ b/docs/build-release/apps/aspnet/_shared/import-code-aspnet-core-vsts.md @@ -0,0 +1,16 @@ +VSTS is a full-featured Git server for hosting your team's source code. You'll import code for a sample ASP.NET Core app into VSTS Git repository. This is the app that you'll configure CI/CD for. + +[//]: # (> [!NOTE]) +[//]: # (> If you already have an ASP.NET Core application checked into your VSTS Git repository, you can use that for this quickstart, so long as your app does not depend on a database.) + +1. In VSTS, on the **Code** hub for your VSTS project, select the option to **Import repository**. + + ![import repository menu item](../../_shared/_img/import-repository-menu-item.png) + +1. In the **Import a Git repository** dialog box, paste the following URL into the **Clone URL** text box. + + ``` + https://github.com/adventworks/dotnetcore-sample + ``` + +1. Click **Import** to copy the sample code into your Git repo. diff --git a/docs/build-release/apps/aspnet/_shared/import-code-aspnet-core.md b/docs/build-release/apps/aspnet/_shared/import-code-aspnet-core.md new file mode 100644 index 00000000000..8ca5dbc903c --- /dev/null +++ b/docs/build-release/apps/aspnet/_shared/import-code-aspnet-core.md @@ -0,0 +1,25 @@ +To configure a CI build process for your app, the source code needs to be in a version control system. VSTS and TFS integrate with various version control systems such as Git in VSTS or TFS, Team Foundation Version Control (TFVC), GitHub, and Subversion. + +For a simple way to follow this quickstart, get the following sample app code and put it into your own version control repository: + +``` +https://github.com/adventworks/dotnetcore-sample +``` + +You've got a few version control options. Some common ones are: + +* To import the sample app into a Git repo in VSTS or TFS: + + 1. On the **Code** hub for your team project in VSTS/TFS, select the option to **Import repository**. + + 1. In the **Import a Git repository** dialog box, paste the above URL into the **Clone URL** text box. + + 1. Click **Import** to copy the sample code into your Git repo. + +* To fork the sample app into your own GitHub repository: + + 1. Navigate to the above GitHub repository URL in your browser. + + 1. Select **Fork** to create your own copy of the repository. + +This quickstart works for apps targeting the .Net Core 1.1 or 2.0 frameworks. The sample app is a Visual Studio solution that has two projects: an ASP.NET Core Web Application project and a Unit Test project (both targeting .Net Core 1.1 framework). diff --git a/docs/build-release/apps/aspnet/_shared/setup.md b/docs/build-release/apps/aspnet/_shared/setup.md new file mode 100644 index 00000000000..4f586cb5ee9 --- /dev/null +++ b/docs/build-release/apps/aspnet/_shared/setup.md @@ -0,0 +1,11 @@ +## Get set up + +### VSTS account + +You'll need an account on Visual Studio Team Services. To create one, visit [Sign up for VSTS](https://www.visualstudio.com/vsts/). + +You can also use Team Foundation Server (TFS) if your organization requires the use of on-premises servers instead of VSTS, and we'll show some of those details. Also see [Get Started with TFS](../../../../tfs-server/install/get-started.md) for general information. + +### Set up local version control and a team project + +Creating a release pipeline relies on having your application code in version control. To set up a local repository and connect it to a remote repository in a team project, follow the instructions in either [Share your code with Git and Visual Studio](../../../../git/share-your-code-in-git-vs.md) or [Share your code with TFVC and Visual Studio](../../../../tfvc/share-your-code-in-tfvc-vs.md). diff --git a/docs/build-release/apps/aspnet/build-aspnet-4.md b/docs/build-release/apps/aspnet/build-aspnet-4.md new file mode 100644 index 00000000000..4270089b552 --- /dev/null +++ b/docs/build-release/apps/aspnet/build-aspnet-4.md @@ -0,0 +1,104 @@ +--- +title: Build your ASP.NET 4 app +description: Define a continuous integration (CI) build for your ASP.NET 4 app in VSTS or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 840F4B48-D9F1-4B5F-98D9-00945501FA98 +ms.manager: douge +ms.author: alewis +ms.date: 02/10/2017 +ms.topic: get-started-article +--- + +# Build your ASP.NET 4 app + +**VSTS | TFS 2017 Update 2** + +ASP.NET is a mature web platform that provides all the services that you require to build enterprise-class server-based web applications using .NET on Windows. Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly customizable continuous integration (CI) process to automatically build your ASP.NET app whenever your team pushes or checks in code. In this quickstart you learn how to define your CI process. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +* While the simplest way to try this quickstart is to use a VSTS account, you can also use a TFS server instead of a VSTS account. Make sure that you have [configured a build agent](../../actions/agents/v2-windows.md) for your team project, and that you have a version of Visual Studio matching your development machine installed on the agent machine. + +## Get the sample code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +``` +https://github.com/adventworks/aspnet4-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +This quickstart works for apps targeting the .NET Framework 4 or newer. The sample app is a Visual Studio solution that has two projects: An ASP.NET Web Application project that targets .NET Framework 4.5, and a Unit Test project. + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, click **ASP.NET**, and then click **Apply**. + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**: + + * **VSTS:** Select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. + + * **TFS:** Select a queue that includes a [Windows build agent](../../actions/agents/v2-windows.md). + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + +## View build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next steps + +[!INCLUDE [include](../_shared/ci-web-app-next-steps.md)] diff --git a/docs/build-release/apps/aspnet/build-aspnet-cloudservice.md b/docs/build-release/apps/aspnet/build-aspnet-cloudservice.md new file mode 100644 index 00000000000..8cde2ddc1df --- /dev/null +++ b/docs/build-release/apps/aspnet/build-aspnet-cloudservice.md @@ -0,0 +1,74 @@ +--- +ms.assetid: EEA8E5DA-50B6-427B-B67E-32E926DC4A02 +title: Build your Azure cloud service +description: Define a continuous integration (CI) build for your Azure cloud service in VSTS or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: alewis +ms.date: 01/02/2017 +--- + +# Build your Azure cloud service + +[!INCLUDE [temp](../../_shared/version.md)] + +Here we'll show you how to define your continuous integration (CI) process for your Azure cloud service project. + +## Get set up + +For the instructions in this topic, you need an Azure cloud service project in Visual Studio. + +> [!TIP] +> If you don't yet have an app but want to try this out, then see the [Q&A below](#new_solution). + +## Define your CI build process + +### Create the build definition + +
      + [!INCLUDE [include](../../_shared/begin-create-build-definition.md)] + +
    1. Select the **Azure Cloud Service** template.
    2. + + +
    3. As the repository source, select the team project, repository, and branch.
    4. + +
    5. Remove the **Azure Cloud Service Deployment task** from the build definition, since you will be deploying the cloud service later through a release definition.
    6. +
    + +### Enable continuous integration (CI) + +On the Triggers tab, enable **continuous integration** (CI). This tells the system to queue a build whenever someone on your team commits or checks in new code. + +## Queue and test the build + +Save the build definition and queue a new build by selecting the **Queue new build** command. Once the build is done, click **Artifacts** and then **Explore** to see the cloud service package (.cspkg file) produced by the build. This is the package that your release definition will consume to deploy your app. + +## Deploy your app + +After you've run the build, you're ready to create a release definition to deploy your app to: + +* An Azure cloud service + +## Q&A + + + +

    How do I create an Azure cloud service solution?

    + +0. In Visual Studio, [connect to your team project](../../../connect/connect-team-projects.md#visual-studio). + +0. On the Team Explorer home page (Keyboard: Ctrl + 0, H), under **Solutions**, click **New**. + +0. Select the **Cloud** templates section, and then choose the **Azure Cloud Service** template. + +0. When prompted for the roles in the cloud service, choose the **ASP.NET Web role** to the project. + +0. When prompted for the type of ASP.NET project for the Web role, choose the **MVC** project. + +0. [Commit and push (Git)](../../../git/share-your-code-in-git-vs.md) or [check in (TFVC)](../../../tfvc/share-your-code-in-tfvc-vs.md) your code. + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/apps/aspnet/build-aspnet-core-docker.md b/docs/build-release/apps/aspnet/build-aspnet-core-docker.md new file mode 100644 index 00000000000..135c91fb5f7 --- /dev/null +++ b/docs/build-release/apps/aspnet/build-aspnet-core-docker.md @@ -0,0 +1,120 @@ +--- +title: CI build for a Docker-enabled ASP.NET Core app +description: Define a continuous integration (CI) build process for your a Docker-enabled ASP.NET Core app in VSTS or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 86091275-B110-4800-9CEE-05D9963CC4CD +ms.manager: douge +ms.author: alewis +ms.date: 05/23/2017 +--- + +# Build your ASP.NET Core Container app + +**VSTS** + +In this quickstart you learn how to define CI process for your Docker-enabled ASP.NET Core application using VSTS. The CI process will publish a new container image to Azure Container Registry every time a change is pushed to the application code. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +* An Azure subscription. If you don't have one, you can [create one for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F). + +[!INCLUDE [create-azure-container-registry](../_shared/create-azure-container-registry.md)] + +## Get the sample app code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +```URL +https://github.com/adventworks/dotnetcore-docker-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +The sample app in this repository is a simple ASP.NET Core application with a Dockerfile that defines a [multi-stage build](https://docs.docker.com/engine/userguide/eng-image/multistage-build/). The first stage defines how to build the application and the second stage packages the application as a container image that can be published to a container registry. ASP.NET Core 2.0 is used for this application, although these instructions work for ASP.NET Core 1.1 as well. + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, click **Start with an Empty Process**. + +1. For the **Default agent queue**, select _Hosted Linux_. This is how you can use our pool of agents that have the software you need to build your app. + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Select **+ Add Task** to add another task to the build definition. From the displayed task catalog, select **Docker** task. Change the parameters for this task as follows: + + * **Azure subscription:** Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions connection to your Azure subscription. If you are using VSTS and if you see an **Authorize** button next to the input, click on it to authorize VSTS to connect to your Azure subscription. If you are using TFS or if you do not see + the desired Azure subscription in the list of subscriptions, see [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm) to manually set up the connection. + + ![Authorizing an Azure subscription](../_shared/_img/authorize-azure-subscription-cropped.png) + + * **Azure Container Registry:** Select the Azure container registry that you created above. + + * **Action:** Build an image. + +1. Select **+ Add Task** to add another **Docker** task to the build definition. + Make sure that the task is inserted _after_ the previous **Docker** task. Change the parameters for this task as follows: + + * **Azure subscription:** Same as in previous task. + + * **Azure Container Registry:** Same as in previous task. + + * **Action:** Push an image. + +1. Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + +## View the build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next step + +> [!div class="nextstepaction"] +> [Deploy to Azure Web App for Containers](../cd/deploy-docker-webapp.md) diff --git a/docs/build-release/apps/aspnet/build-aspnet-core.md b/docs/build-release/apps/aspnet/build-aspnet-core.md new file mode 100644 index 00000000000..961a52ed17c --- /dev/null +++ b/docs/build-release/apps/aspnet/build-aspnet-core.md @@ -0,0 +1,110 @@ +--- +title: CI build for an ASP.NET Core app +description: Define a continuous integration (CI) build process for your an ASP.NET Core app in VSTS or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 95ACB249-0598-4E82-B155-26881A5AA0AA +ms.manager: douge +ms.author: alewis +ms.date: 05/23/2017 +ms.topic: get-started-article +--- + +# Build your ASP.NET Core app + +**VSTS | TFS 2017 Update 2** + +[ASP.NET Core](http://www.asp.net/core) is a lean and composable framework for building web and cloud applications. Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly customizable continuous integration (CI) process to automatically build your ASP.NET Core app whenever your team pushes or checks in code. In this tutorial you learn how to define your CI process. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-tfs.md)] + +## Get the sample code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +``` +https://github.com/adventworks/dotnetcore-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +The sample app is a Visual Studio solution that has two projects: An ASP.NET Core Web Application project and a Unit Test project (both targeting .Net Core 1.1 framework). This quickstart works for any apps targeting the .Net Core 1.1 or 2.0 frameworks. + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +[//]: # (TODO: [!INCLUDE [include](_shared/create-aspnet-core-build-team-services.md) + +[//]: # (TODO: [!INCLUDE [include](_shared/aspnet-core-build-tasks.md) + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, click **ASP.NET Core**, and then click **Apply**. + + ![Screenshot showing dotnet core template](_shared/_img/apply-aspnet-core-build-template.png) + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**: + + * **VSTS:** Select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. + + * **TFS:** Select a queue that includes a [Windows build agent](../../actions/agents/v2-windows.md). + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + +## View the build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next steps + +[!INCLUDE [include](../_shared/ci-web-app-next-steps.md)] diff --git a/docs/build-release/apps/aspnet/build-aspnet-dacpac.md b/docs/build-release/apps/aspnet/build-aspnet-dacpac.md new file mode 100644 index 00000000000..f9a0b5ef261 --- /dev/null +++ b/docs/build-release/apps/aspnet/build-aspnet-dacpac.md @@ -0,0 +1,71 @@ +--- +ms.assetid: 7F0B861F-D88B-45A8-8510-19041543C49E +title: Build your SQL server database +description: Define a continuous integration (CI) build for your SQL server database in VSTS or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: alewis +ms.date: 01/02/2017 +--- + +# Build your SQL server database + + +[!INCLUDE [temp](../../_shared/version.md)] + +Here we'll show you how to define your continuous integration (CI) process for your SQL server database project. + +## Get set up + +For the instructions in this topic, you need a SQL server database project in Visual Studio. + +> [!TIP] +> If you don't yet have an app but want to try this out, then see the [Q&A below](#new_solution). + +## Define your CI build process + +### Create the build definition + +
      + [!INCLUDE [include](../../_shared/begin-create-build-definition.md)] + +
    1. Select the **Visual Studio** template.
    2. + + +
    3. As the repository source, select the team project, repository, and branch.
    4. +
    + +### Enable continuous integration (CI) + +On the Triggers tab, enable **continuous integration** (CI). This tells the system to queue a build whenever someone on your team commits or checks in new code. + +## Queue and test the build + +Save the build definition and queue a new build by selecting the **Queue new build** command. Once the build is done, click **Artifacts** and then **Explore** to see the DACPAC (.dacpac file) produced by the build. This is the package that your release definition will consume to deploy your database. + +## Deploy your database + +After you've run the build, you're ready to create a release definition to deploy your database to: + +* Azure SQL Server + +* SQL Server + +## Q&A + + + +

    How do I create an SQL server database solution?

    + +0. In Visual Studio, [connect to your team project](../../../connect/connect-team-projects.md#visual-studio). + +0. On the Team Explorer home page (Keyboard: Ctrl + 0, H), under **Solutions**, click **New**. + +0. Select the **SQL Server** templates section, and then choose the **SQL Server Database Project** template. + +0. [Commit and push (Git)](../../../git/share-your-code-in-git-vs.md) or [check in (TFVC)](../../../tfvc/share-your-code-in-tfvc-vs.md) your code. + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/apps/cd/_img/deployment-slots-webapps-03.png b/docs/build-release/apps/cd/_img/deployment-slots-webapps-03.png new file mode 100644 index 00000000000..fbb8b6599f7 Binary files /dev/null and b/docs/build-release/apps/cd/_img/deployment-slots-webapps-03.png differ diff --git a/docs/build-release/apps/cd/_img/deployment-slots-webapps-04.png b/docs/build-release/apps/cd/_img/deployment-slots-webapps-04.png new file mode 100644 index 00000000000..dea0e0027a8 Binary files /dev/null and b/docs/build-release/apps/cd/_img/deployment-slots-webapps-04.png differ diff --git a/docs/build-release/apps/cd/_img/howto-webdeploy-iis-deploygroups/safe-rolling-deployment.png b/docs/build-release/apps/cd/_img/howto-webdeploy-iis-deploygroups/safe-rolling-deployment.png new file mode 100644 index 00000000000..3fdb1be0489 Binary files /dev/null and b/docs/build-release/apps/cd/_img/howto-webdeploy-iis-deploygroups/safe-rolling-deployment.png differ diff --git a/docs/build-release/apps/cd/_img/vmware/vmware-icon.png b/docs/build-release/apps/cd/_img/vmware/vmware-icon.png new file mode 100644 index 00000000000..009baa7fa65 Binary files /dev/null and b/docs/build-release/apps/cd/_img/vmware/vmware-icon.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/cicddockerflow.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/cicddockerflow.png new file mode 100644 index 00000000000..452e0815827 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/cicddockerflow.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/clone.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/clone.png new file mode 100644 index 00000000000..747baf73ad1 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/clone.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/cloneinvs.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/cloneinvs.png new file mode 100644 index 00000000000..22141ff510e Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/cloneinvs.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/createacr.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/createacr.png new file mode 100644 index 00000000000..8f9ecfe63cb Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/createacr.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/enabledocker.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/enabledocker.png new file mode 100644 index 00000000000..322f5c93da8 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/enabledocker.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/opensolution1.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/opensolution1.png new file mode 100644 index 00000000000..39b694bdf78 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/opensolution1.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/publishvsts.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/publishvsts.png new file mode 100644 index 00000000000..a424f888544 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/publishvsts.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/teamexplorer.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/teamexplorer.png new file mode 100644 index 00000000000..00835da7c17 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/teamexplorer.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vscode-git-ci-cd-to-azure-container.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vscode-git-ci-cd-to-azure-container.png new file mode 100644 index 00000000000..fd22408f107 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vscode-git-ci-cd-to-azure-container.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vsconfigcdicon.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vsconfigcdicon.png new file mode 100644 index 00000000000..ed1c2c425c9 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vsconfigcdicon.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vsconfigurecd.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vsconfigurecd.png new file mode 100644 index 00000000000..73429a754ec Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vsconfigurecd.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vsoutputs.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vsoutputs.png new file mode 100644 index 00000000000..35aa197cdf0 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-acr/vsoutputs.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/add-code.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/add-code.png new file mode 100644 index 00000000000..c775839df41 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/add-code.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/app-deployed.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/app-deployed.png new file mode 100644 index 00000000000..4660107f1ea Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/app-deployed.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/build-in-progress.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/build-in-progress.png new file mode 100644 index 00000000000..d117426762a Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/build-in-progress.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/commit-code.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/commit-code.png new file mode 100644 index 00000000000..1007b4c5f2e Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/commit-code.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-apptype.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-apptype.png new file mode 100644 index 00000000000..ec6ababd508 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-apptype.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-appurl.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-appurl.png new file mode 100644 index 00000000000..fce665f2cc6 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-appurl.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-complete.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-complete.png new file mode 100644 index 00000000000..1ae1877f78a Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-complete.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-intro.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-intro.png new file mode 100644 index 00000000000..d2ad26c2b9e Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-intro.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-log.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-log.png new file mode 100644 index 00000000000..4186abc554e Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-log.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-log2.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-log2.png new file mode 100644 index 00000000000..1cfaee8eb7d Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-log2.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-repository.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-repository.png new file mode 100644 index 00000000000..c5a7f4128b0 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/continuous-delivery-repository.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/edit-in-vsts.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/edit-in-vsts.png new file mode 100644 index 00000000000..b191fc0db8e Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/edit-in-vsts.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/overview-openapp.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/overview-openapp.png new file mode 100644 index 00000000000..c4275ab07e2 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/overview-openapp.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/review-links-release.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/review-links-release.png new file mode 100644 index 00000000000..401e5f7a471 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/review-links-release.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/start-app.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/start-app.png new file mode 100644 index 00000000000..29de1fc38ed Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/start-app.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/stop-app.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/stop-app.png new file mode 100644 index 00000000000..f90338f4d8c Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/stop-app.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/updated-app.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/updated-app.png new file mode 100644 index 00000000000..f98b64a4456 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/updated-app.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/wait-for-release.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/wait-for-release.png new file mode 100644 index 00000000000..6737ca9229d Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-azure-webapp/wait-for-release.png differ diff --git a/docs/build-release/apps/cd/azure/_img/aspnet-core-to-windows-vm/cicd-get-started-dotnetcore-sample.png b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-windows-vm/cicd-get-started-dotnetcore-sample.png new file mode 100644 index 00000000000..63f1c8597f7 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/aspnet-core-to-windows-vm/cicd-get-started-dotnetcore-sample.png differ diff --git a/docs/build-release/apps/cd/azure/_img/customize-cd-process/ci-trigger.png b/docs/build-release/apps/cd/azure/_img/customize-cd-process/ci-trigger.png new file mode 100644 index 00000000000..09f8fc30e85 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/customize-cd-process/ci-trigger.png differ diff --git a/docs/build-release/apps/cd/azure/_img/customize-cd-process/default-pipeline.png b/docs/build-release/apps/cd/azure/_img/customize-cd-process/default-pipeline.png new file mode 100644 index 00000000000..2534b7c82de Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/customize-cd-process/default-pipeline.png differ diff --git a/docs/build-release/apps/cd/azure/_img/customize-cd-process/default-task-phase.png b/docs/build-release/apps/cd/azure/_img/customize-cd-process/default-task-phase.png new file mode 100644 index 00000000000..75d13d5c3f2 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/customize-cd-process/default-task-phase.png differ diff --git a/docs/build-release/apps/cd/azure/_img/customize-cd-process/deploy-task-settings.png b/docs/build-release/apps/cd/azure/_img/customize-cd-process/deploy-task-settings.png new file mode 100644 index 00000000000..7260af98f24 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/customize-cd-process/deploy-task-settings.png differ diff --git a/docs/build-release/apps/cd/azure/_img/customize-cd-process/environment-trigger.png b/docs/build-release/apps/cd/azure/_img/customize-cd-process/environment-trigger.png new file mode 100644 index 00000000000..dcef9cd1097 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/customize-cd-process/environment-trigger.png differ diff --git a/docs/build-release/apps/cd/azure/_img/customize-cd-process/open-release-definition.png b/docs/build-release/apps/cd/azure/_img/customize-cd-process/open-release-definition.png new file mode 100644 index 00000000000..97f45ff0a04 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/customize-cd-process/open-release-definition.png differ diff --git a/docs/build-release/apps/cd/azure/_img/devtestlabs-icon.png b/docs/build-release/apps/cd/azure/_img/devtestlabs-icon.png new file mode 100644 index 00000000000..d1cd2c8db0f Binary files /dev/null and b/docs/build-release/apps/cd/azure/_img/devtestlabs-icon.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/aspnet-core-code-change.png b/docs/build-release/apps/cd/azure/_shared/_img/aspnet-core-code-change.png new file mode 100644 index 00000000000..c9c375eddcb Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/aspnet-core-code-change.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/aspnet-core-code-edit-action.png b/docs/build-release/apps/cd/azure/_shared/_img/aspnet-core-code-edit-action.png new file mode 100644 index 00000000000..4c62812949f Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/aspnet-core-code-edit-action.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/cicd-get-started-dotnetcore-release.png b/docs/build-release/apps/cd/azure/_shared/_img/cicd-get-started-dotnetcore-release.png new file mode 100644 index 00000000000..fee09a94225 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/cicd-get-started-dotnetcore-release.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/create-release.png b/docs/build-release/apps/cd/azure/_shared/_img/create-release.png new file mode 100644 index 00000000000..844543f7aa0 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/create-release.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-01.png b/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-01.png new file mode 100644 index 00000000000..afda22094ae Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-01.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-02.png b/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-02.png new file mode 100644 index 00000000000..5deb741de86 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-02.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-03.png b/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-03.png new file mode 100644 index 00000000000..5a2d654aba1 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-03.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-04.png b/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-04.png new file mode 100644 index 00000000000..6afa0f892c1 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/create-webapp-04.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/new-release-created-message.png b/docs/build-release/apps/cd/azure/_shared/_img/new-release-created-message.png new file mode 100644 index 00000000000..ececcd29323 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/new-release-created-message.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/_img/vscode-git-ci-cd-to-azure.png b/docs/build-release/apps/cd/azure/_shared/_img/vscode-git-ci-cd-to-azure.png new file mode 100644 index 00000000000..84da18cac42 Binary files /dev/null and b/docs/build-release/apps/cd/azure/_shared/_img/vscode-git-ci-cd-to-azure.png differ diff --git a/docs/build-release/apps/cd/azure/_shared/change-aspnet-core-code.md b/docs/build-release/apps/cd/azure/_shared/change-aspnet-core-code.md new file mode 100644 index 00000000000..9aa80f7445a --- /dev/null +++ b/docs/build-release/apps/cd/azure/_shared/change-aspnet-core-code.md @@ -0,0 +1,29 @@ +## Edit the code and see it deployed + +Now that you have a completely automated CI/CD pipeline, any changes that you make to the app are automatically built and deployed by VSTS. To try this, make a change to the app and commit that change to the Git repository. + +1. Both VSTS and GitHub feature a full code editor within the web browser. Using the browser, navigate to **Views/Homes/Index.cshtml** file in your repository. + + # [VSTS or TFS repo](#tab/vsts) + + In the VSTS **Code** hub, edit the **Views/Home/Index.cshtml** file. + + ![edit action in asp.net core view](_img/aspnet-core-code-edit-action.png) + + # [GitHub repo](#tab/github) + + Open your GitHub repository in the browser and edit **Views/Home/Index.cshtml** file. + + --- + +1. Make a simple change above the slide carousel `div` tag: + + ```html +

    Demo of CI/CD!!

    +``` + +1. **Commit** your changes to trigger a CI build. When the build completes, it triggers an automatic deployment. + + diff --git a/docs/build-release/apps/cd/azure/_shared/create-azure-web-app-portal.md b/docs/build-release/apps/cd/azure/_shared/create-azure-web-app-portal.md new file mode 100644 index 00000000000..a9f2d0a700b --- /dev/null +++ b/docs/build-release/apps/cd/azure/_shared/create-azure-web-app-portal.md @@ -0,0 +1,30 @@ +## Create an Azure web app using the portal + +> [!NOTE] +> If you already have a web app that you want to use, you can skip this and move to the next section. + +1. Sign into the [Microsoft Azure portal](https://portal.azure.com). + +1. Choose the **+** icon in the left navigation bar, then choose **Web App**. + + ![Selecting the Web App type to create](_img/create-webapp-01.png) + + >If you don't see **Web App** in the list, use the search box to find it. + +1. At the bottom of the introduction page, choose **Create**. + + ![Starting to create the web app](_img/create-webapp-02.png) + +1. Enter a name for the new web app. You'll see a green checkmark when the name is unique. + Then choose **Create**. + + ![Entering the details for the web app](_img/create-webapp-03.png) + +1. Choose the **App Services** icon in the left navigation bar. + After a few minutes, you'll see the new web app appear in the list. + Ensure that it is running. + + ![Checking the new web app is running](_img/create-webapp-04.png) + +You're now ready to start using your new web app. + diff --git a/docs/build-release/apps/cd/azure/aspnet-core-to-acr.md b/docs/build-release/apps/cd/azure/aspnet-core-to-acr.md new file mode 100644 index 00000000000..cc7eddaa50e --- /dev/null +++ b/docs/build-release/apps/cd/azure/aspnet-core-to-acr.md @@ -0,0 +1,82 @@ +--- +title: CI/CD to Linux, Docker, and Azure Container Registry (ACR) +description: Set up a CI build for your ASP.NET Core app to Linux App Service using VSTS +services: vsts +documentationcenter: '' +author: mlearned +manager: douge +editor: '' + +ms.assetid: E13DEB83-A128-4704-A051-8465AD39B5AE +ms.devlang: dotnetcore +ms.topic: get-started-article +ms.tgt_pltfrm: acs +ms.workload: '' +ms.date: 08/04/2016 +ms.custom: mvc +--- + +# Deploy your ASP.NET Core app as a container + +Visual Studio Team Services (VSTS) provides a highly customizable continuous integration (CI) and continuous deployment (CD) pipeline for your ASP.NET Core apps. This quickstart shows how to set up CI and CD to deploy an ASP.NET Core application to Linux App Service using Docker and [Azure Container Registry](https://docs.microsoft.com/en-us/azure/container-registry/). + +![A typical release pipeline for web applications](_img/aspnet-core-to-acr/cicddockerflow.png) + +With your CI/CD processes in place, you'll push a change into your team's git repo and the results will automatically show up on your site. + +![Screenshot showing ASP.NET Core web app](_img/aspnet-core-to-windows-vm/cicd-get-started-dotnetcore-sample.png) + +## Prerequisites + +[!INCLUDE [include](../../../_shared/ci-cd-prerequisites-vsts.md)] +* [Visual Studio 2017](https://www.visualstudio.com/downloads/) +* [Continuous Delivery Tools for Visual Studio](https://marketplace.visualstudio.com/items?itemName=VSIDEDevOpsMSFT.ContinuousDeliveryToolsforVisualStudio) + +[!INCLUDE [create-azure-container-registry](../../../apps/_shared/create-azure-container-registry.md)] + +[!INCLUDE [import-code-aspnet-core](../../../apps/_shared/import-code-aspnet-core-docker.md)] + +## Clone the solution +Use the following steps to clone the sample solution and open it in Visual Studio 2017. This allows you to work with the solution in a local development environment. In upcoming steps, you use Visual Studio 2017 to configure continuous integration and continuous delivery for the web app. + +1. Ensure the import of the code completes successfully. In the top right-hand corner of your browser click **clone**. Click **Clone in Visual Studio**. + + ![Clone from browser](_img/aspnet-core-to-acr/clone.png) + ![Clone in Visual Studio](_img/aspnet-core-to-acr/cloneinvs.png) +2. Visual Studio 2017 will launch and prompt for credentials. +3. After authenticating, choose a directory and click **clone** to finish cloning the code to your local environment. + +## Install Continuous Delivery (CD) Tools for Visual Studio 2017 +Continuous Delivery (CD) Tools for Visual Studio 2017 helps automate the creation of VSTS to Azure release pipelines. Optionally, you can extend the generated pipeline to further enhance your CI/CD workflows. + +1. In Visual Studio 2017 click **Tools then click Extensions and Updates**. +2. In the dialogue, click **Online** and search for **Continuous Delivery Tools for Visual Studio**. +3. Click **Download**, and once it finishes **close** Visual Studio to finish the install process. +4. **Restart** Visual Studio and **open** your solution. +5. In solution explorer **Right Click** your solution and verify you see a **Configure Continuous Delivery** icon. + + ![Connfigure CD icon](_img/aspnet-core-to-acr/vsconfigcdicon.png) + +## Configure and execute Continuous Delivery (CD) for your app +Visual Studio 2017 can automate the creation of a CI/CD pipeline. The CD tooling quickly creates various services in Azure and VSTS. This automation allows you to enable CI/CD to Azure for your apps by creating full build and release pipelines in VSTS. + +1. In Visual Studio, **right click** your solution and click **Configure Continuous Delivery**. + + ![Connfigure CD from Visual Studio](_img/aspnet-core-to-acr/vsconfigurecd.png) +2. Choose App Service (Linux) as your **Host Type**. +3. Choose the **Container Registry** you created earlier. +4. Accept the default App Service name or click **edit** to choose a new name. +5. Click **ok**, and monitor the output window for results. +6. **Azure resources** including the App Service will be created. **VSTS resources** such as a build definition, and a release definition will be created in the same team project that contains your source code. You can monitor the configuration progress in the **Output** window in Visual Studio. + + ![Visual Studio output window](_img/aspnet-core-to-acr/vsoutputs.png) +7. A **build** and **release** will then execute. **Navigate** to the VSTS account and monitor the build and release processes until they complete. This process may take several minutes. +8. When the deployment finishes, verify that your changes are live in your web browser: **http://**_your-app-name_**.azurewebsites.net**. +9. Make changes to the web app code and push them to VSTS. A new build and release will execute and deploy the changes. + +You're now ready to collaborate with a team on an ASP.NET Core app with a CI/CD process that automatically deploys your latest work to your Azure App Service. + +## Next Steps +You've just put your own CI/CD processes in place. You can modify these build and release definitions to meet the needs of your team. To learn more see this tutorial: + +* [Customize CD process](../../../actions/define-multistage-release-process.md) diff --git a/docs/build-release/apps/cd/azure/aspnet-core-to-azure-webapp.md b/docs/build-release/apps/cd/azure/aspnet-core-to-azure-webapp.md new file mode 100644 index 00000000000..72b9b739f1b --- /dev/null +++ b/docs/build-release/apps/cd/azure/aspnet-core-to-azure-webapp.md @@ -0,0 +1,100 @@ +--- +title: Deploy your app to an Azure web app | VSTS Quickstart +description: Set up a CI build for your ASP.NET Core application, and then a CD release to Azure web apps +services: vsts +documentationcenter: '' +author: alewis +manager: douge +editor: '' + +ms.assetid: +ms.workload: web +ms.tgt_pltfrm: na +ms.devlang: na +ms.topic: get-started-article +ms.date: 06/24/2017 +ms.author: alewis +ms.custom: mvc +--- + +# Build and deploy to an Azure Web App + +Visual Studio Team Services (VSTS) provides a highly customizable continuous integration (CI) and continuous deployment (CD) pipeline to automatically deploy your ASP.NET Core web app to Azure App Services. In this quickstart you will use the Azure portal to configure an entire CI/CD pipeline, and then see it build and deploy your app. + +![A typical release pipeline for web applications](_shared/_img/vscode-git-ci-cd-to-azure.png) + +With your CI/CD processes in place, you'll push a change into your team's Git repo and the results will automatically show up on your site. + + + +## Prerequisites + +[!INCLUDE [include](../../../_shared/ci-cd-prerequisites-vsts.md)] +* An Azure subscription. If you don't have an Azure subscription, you can [create one for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F). + +## Get the sample code + +To configure a CI build process for your app, the source code needs to be in a version control system. You can use VSTS as your version control system, since VSTS provides a full-featured Git server. Alternatively, you can use GitHub. + +For a simple way to follow this quickstart, get the following sample app code and put it into your own version control repository: + +``` +https://github.com/adventworks/dotnetcore-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../../_shared/get-sample-code-github.md)] + +--- + + + +[!INCLUDE [create-azure-web-app-portal](_shared/create-azure-web-app-portal.md)] + +## Configure continuous delivery + +1. In the Azure portal, open your web app's blade. Choose **Continuous Delivery** and then choose **Configure**. + + ![Starting Continuous Delivery configuration](_img/aspnet-core-to-azure-webapp/continuous-delivery-intro.png) + +1. Select **Choose repository** and select **Visual Studio Team Services** for the code repository. Select the project, repository, and branch into which your imported the sample code. When you're done, choose **OK**. + + ![Configuring the source code repository](_img/aspnet-core-to-azure-webapp/continuous-delivery-repository.png) + +1. Select **Configure Continuous Delivery** and choose **ASP.NET Core**. When you're done, choose **OK**. + + ![Configuring the app type](_img/aspnet-core-to-azure-webapp/continuous-delivery-apptype.png) + +1. Skip the other two steps - **Test** and **Deploy** - and choose **OK** to complete the configuration of continuous delivery. You'll see how to use the test and deployment options in other tutorials. + + ![Completing the configuration](_img/aspnet-core-to-azure-webapp/continuous-delivery-complete.png) + +1. When you choose **OK**, Azure Continuous Delivery configures and kicks off a build and deployment in VSTS. + When the build completes, the deployment is automatically initiated. + After a while, the deployment is completed. Choose **Refresh Logs** to see this in the **Activity Log**. + + ![Viewing the log when deployment is complete](_img/aspnet-core-to-azure-webapp/continuous-delivery-log2.png) + +1. Open a new browser window and navigate to your new web at **http://**_your-app-name_**.azurewebsites.net**. + +[!INCLUDE [change-aspnet-core-code](_shared/change-aspnet-core-code.md)] + +It takes several minutes for the build and deployment to execute. +Wait until the deployment is done, then verify that your changes are live in your web browser: **http://**_your-app-name_**.azurewebsites.net**. + +You're now ready to collaborate with a team on an ASP.NET Core app with a CI/CD process that automatically deploys your latest work to your web site. + +## Next steps + +When you configured your CI/CD process in this quickstart, a build and release definition were automatically created in your VSTS project. You can modify these build and release definitions to meet the needs of your team. To learn more see one of these tutorials: + +* [Customize CD process](../../../actions/define-multistage-release-process.md) + +[//]: # (TODO MAYBE [!INCLUDE [include](_shared/quickstart-next-steps.md) diff --git a/docs/build-release/apps/cd/azure/aspnet-core-to-windows-vm.md b/docs/build-release/apps/cd/azure/aspnet-core-to-windows-vm.md new file mode 100644 index 00000000000..b126f0e4e72 --- /dev/null +++ b/docs/build-release/apps/cd/azure/aspnet-core-to-windows-vm.md @@ -0,0 +1,126 @@ +--- +title: Deploy your ASP.NET Core app to a Windows VM | VSTS Quickstart +description: Set up a CI build for your ASP.NET Core app, and then a CD release an to Azure Windows VM +services: vsts +documentationcenter: '' +author: alewis +manager: douge +editor: '' + +ms.assetid: E13DEB83-A128-4704-A051-8465AD39B5AE +ms.devlang: dotnetcore +ms.topic: get-started-article +ms.tgt_pltfrm: vm-windows +ms.workload: '' +ms.date: 08/04/2016 +ms.custom: mvc +--- + +# Deploy your ASP.NET Core app to a Windows virtual machine + +Visual Studio Team Services (VSTS) provides a highly customizable continuous integration (CI) and continuous deployment (CD) pipeline to automatically deploy your ASP.NET Core web app to a Windows virtual machine (VM) in Azure. + +You'll use the VSTS portal to set up CI/CD. Your CI process runs the .NET Core commands to restore packages, build and test the app, and finally publish artifacts. Your CD process automatically picks up these artifacts and deploys them to your environment. Finally, you'll test it all out by pushing a small code change into your team's git repo. Your CI/CD processes will automatically deploy the change. + +![A typical release pipeline for web applications](_shared/_img/vscode-git-ci-cd-to-azure.png) + +Your code changes automatically appear on your site: + +![Screenshot showing ASP.NET Core web app](_img/aspnet-core-to-windows-vm/cicd-get-started-dotnetcore-sample.png) + +## Prerequisites + +[!INCLUDE [include](../../../_shared/ci-cd-prerequisites-vsts.md)] +* Have a Windows virtual machine that has a default web site running in IIS. See [Create a Windows virtual machine with the Azure CLI](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/quick-create-cli) for instructions to create a virtual machine in Azure, to install IIS, and to obtain its `publicIpAddress`. + +## Prepare the Windows VM + +[!INCLUDE [prepare-aspnetcore-windows-vm](../../../apps/_shared/prepare-aspnetcore-windows-vm.md)] + +[!INCLUDE [create-deployment-group](../../../apps/_shared/create-deployment-group.md)] + +## Import code for sample app into VSTS + +[!INCLUDE [import-code-aspnet-core-vsts](../../../apps/aspnet/_shared/import-code-aspnet-core-vsts.md)] + +[//]: # (TODO: we want factoring of include like above so we can reuse stock fragments that appear in many many places) + +## Set up continuous integration + +[!INCLUDE [ci-quickstart-intro](../../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +[//]: # (TODO: [!INCLUDE [create-aspnet-core-build-team-services](../../../apps/_shared/create-aspnet-core-build-team-services.md]) + +1. On the **Files** tab of the **Code** hub, click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../../../apps/_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub in VSTS and asked to **Choose a template**. + +1. In the right panel, click **ASP.NET Core**, and then click **Apply**. + + ![Screenshot showing dotnet core template](../../../apps/aspnet/_shared/_img/apply-aspnet-core-build-template.png) + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**, select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. + +1. Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. Wait for the build to complete and succeed before proceeding to the next section. + +[//]: # (TODO) + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + + +## Set up continuous deployment + +Continuous deployment (CD) is a lean practice that your team can use to keep production fresh. Here you'll set up a short automatic path from the availability of new code in version control to deployment. Specifically, you'll define a CD release management process that picks up the artifacts from your CI build and deploys you app to the IIS web server hosted in your Windows VM. + +1. Once the build succeeds, click the **Release** action on the build summary page. + + ![Screenshot showing release action on build summary](_shared/_img/cicd-get-started-dotnetcore-release.png) + +1. In the **Create release definition** wizard, select **IIS Website Deployment** template, and then click **Apply**. + + ![Screenshot showing IIS website deployment template](../../../apps/_shared/_img/aspnet-core-to-windows-vm/select-iis-website-deployment-release-template.png) + +1. Click the **Tasks** tab, and then click the **IIS Deployment** phase. For the **Deployment Group**, click the deployment group you created earlier, such as *myIIS*. + + ![iis deployment group in release definition](../../../apps/_shared/_img/aspnet-core-to-windows-vm/iis-deployment-group-in-release-definition.png) + +1. Click **Save**. On the Save dialog box, click **OK**. + +1. To test the release definition, click **Release** and then **Create Release**. + + ![create release](_shared/_img/create-release.png) + +1. On the Create new release dialog box, click **Queue**. + + Notice that a new release was created. Click the link to navigate to the release. + + ![new release created message](_shared/_img/new-release-created-message.png) + +1. Click the **Logs** tab to watch the live logs from the deployment as it happens. Wait for the release to be deployed to the Azure web app. + +1. Once deployment has completed, open your web browser and test your web app: `http://` + +[!INCLUDE [include](_shared/change-aspnet-core-code.md)] + +When the deployment is done, verify that your changes are live in your web browser: ` +http://` + +You're ready to collaborate with a team on an ASP.NET Core app with a CI/CD process that automatically deploys your latest work to your web site. + +## Next steps + +You've just put your own CI/CD processes in place. You can modify these build and release definitions to meet the needs of your team. To learn more see one of these tutorials: + +* [Customize CD process](../../../actions/define-multistage-release-process.md) + +[//]: # (TODO MAYBE [!INCLUDE [include](_shared/quickstart-next-steps.md) diff --git a/docs/build-release/apps/cd/azure/build-azure-vm-template.md b/docs/build-release/apps/cd/azure/build-azure-vm-template.md new file mode 100644 index 00000000000..89db194ada4 --- /dev/null +++ b/docs/build-release/apps/cd/azure/build-azure-vm-template.md @@ -0,0 +1,91 @@ +--- +ms.assetid: 10C708EC-0D2A-4EF8-9381-4CF8B1EBA755 +title: Build an Azure Virtual Machine using Azure RM templates +description: Build an Azure Virtual Machine using ARM templates in Release Management in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Build an Azure virtual machine using an Azure RM template + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +In just a few steps, you can provision Azure virtual machines (VMs) +using [Resource Manager (RM) templates](https://azure.microsoft.com/documentation/articles/resource-group-template-deploy/). +Managing the definitions for virtual machines in this +way is considered **Infrastructure as code** and is +a good DevOps practice. + +For this example, the template for creating the Azure +VMs must be checked into a version control repository +along with the rest of the application code, and it +must be published as part of the build output. + +## Get set up + +Before you can build the solution, you must create an +Azure RM template. + +### Create the template + +Follow these steps to create and check-in a new Resource Manager template. + +1. In Visual Studio, choose **File | Add | New project** and add a + new **Azure Resource Group** project to your solution. + +1. When prompted for an Azure template, select **Windows Virtual Machine**. + + >The **Windows Virtual Machine** template is a simple example of + provisioning a single virtual machine in Azure. + For provisioning other types of resources, you can either edit the + **WindowsVirtualMachine.json** file, select other + templates in the project creation wizard, or download one + of the many templates available at + [https://github.com/Azure/azure-quickstart-templates](https://github.com/Azure/azure-quickstart-templates). + +1. Add a project for your app to the solution. This could be + a project for an existing app, or a new project created from the + Visual Studio **File | Add | New project** menu. + +1. Save the entire solution (not just the project) and + commit the changes into a Team Foundation Server or + VSTS Git repository. + +### Create the build definition + +Carry out the following steps to publish an artifact with the Resource Manager template files. + +1. Make sure that the template files from the **HelloWorldARM** + project are included in the artifacts published by Build. + +1. Queue a new build and verify that the artifact contains + the **Templates** folder containing the template files + **WindowsVirtualMachine.json** and **WindowsVirtualMachine.parameters.json**. + +### Enable continuous integration (CI) + +On the Triggers tab, enable **continuous integration** (CI). This tells the system to queue a build whenever someone on your team commits or checks in new code. + +## Queue and test the build + +Save the build definition and queue a new build by selecting the **Queue new build** command. Once the build is done, click **Artifacts** and then **Explore** to see the template files produced by the build. This is the template that your release definition will consume to provision an Azure virtual machine. + +## Provision your virtual machine + +After you've run the build, you're ready to create a release definition to provision your virtual machine: + +![icon](../../../tasks/deploy/_img/azure-resource-group-deployment-icon.png) [Provision an Azure virtual machine using an Azure RM template](deploy-provision-azure-vm.md) + +## Q&A + + + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] + diff --git a/docs/build-release/apps/cd/azure/deploy-azure-scaleset.md b/docs/build-release/apps/cd/azure/deploy-azure-scaleset.md new file mode 100644 index 00000000000..b974f5c98a6 --- /dev/null +++ b/docs/build-release/apps/cd/azure/deploy-azure-scaleset.md @@ -0,0 +1,126 @@ +--- +ms.assetid: C08EC3FB-6787-4956-86D3-B4085B69FCBA +title: Implement deployment of your app to Azure Virtual Machine Scale Set +description: Implement deployment of your app to an Azure Virtual Machine Scale Set +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Implement continuous deployment of your app to an Azure Virtual Machine Scale Set + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +The **Build Machine Image** task makes it easy for users who are new to immutable +VHD-based deployments to use **Packer** without learning concepts such as provisioners +and builders. If you are deploying to virtual machines by using deployment scripts, +you can use this task for either creating new virtual machine instances or for +creating and updating virtual machine scale sets. + +The auto-generate mode of the task generates the **Packer** configuration with: + +* Builder for Azure +* Provisioners that depend on the type of base operating system selected. + For Linux, this is shell script. For Windows, this is PowerShell script. + The deployment script provided is used by the provisioner. + +A custom **Packer** configuration JSON file can also be used. + +## Get set up + +### Begin with a CI build + +Before you begin, you need a CI build that creates your app. To set up CI, see: + +* [Build and deploy your app](../../index.md) + +## Create the release definition + +1. Open the **Releases** tab of the **Build & Release** hub and choose the + "**+**" icon to create a new release definition. + +1. In the **Create release definition** dialog, select the **Empty** template and choose **Next**. + +1. In the next page, select the build definition you created + earlier and choose **Create**. This creates a new release definition + with one default environment. + +1. In the new release definition, select **+ Add tasks** and add these task steps: + + * **Build Machine Image** + * **Azure PowerShell**

    + + The **Build Machine Image** uses **Packer** to create a VHD. The entire process is: + + * Create a new virtual machine with the selected base operating system + * Install all the prerequisites and the application on the VM by using a deployment script + * Create a VHD and store it in the Azure storage account + * Delete the new virtual machine that was created

    + +1. Configure the **Build Machine Image** task as follows: + + ![Build Machine Image](../../../tasks/deploy/_img/build-machine-image.png) [Deploy: Build Machine Image](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/15/deploying-applications-to-azure-vm-scale-sets/) - Build machine image using Packer. + + - **Packer template**: You can use your own packer configuration JSON file or use the auto-generate feature where the task generates a packer template for you. This example uses the auto-generated packer configuration. + + - **Azure subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions + connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Storage location**: The location of storage account where the VHD will be stored. This should be the same location where the virtual machine scale set is located, or where it will be created. + + - **Base Image Source**: You can choose from either a curated gallery of OS images, or provide the URL of your custom image. For example, `Ubuntu 16.04 LTS` + + - **Deployment Package**: Specify the path of the deployment package directory relative to **$(System.DefaultWorkingDirectory)**. For example, `$(System.DefaultWorkingDirectory)/Packer-NodeJs/drop` + + - **Deployment Script**: Specify the relative path to the PowerShell script (for Windows) or shell script (for Linux) that deploys the package. This script should be within the deployment package path selected above. For example, `Deploy/ubuntu/deployNodejsApp.sh`. The script may need to install Curl, Node.js, NGINX, and PM2; copy the application; and then configure NGINX and PM2 to run the application. + + - **Output - Image URL**: Provide a name for the output variable that will hold the URL of the generated machine image. For example, `bakedImageUrl`

    + + ![Azure PowerShell](../../../tasks/deploy/_img/azure-powershell-icon.png) [Deploy: Azure PowerShell](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzurePowerShell) - Run a PowerShell script to update the Virtual Machine Scale Set with the new VHD. + + - **Azure Connection Type**: Select `Azure Resource Manager` + + - **Azure RM Subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions + connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Script type**: Select `Inline Script` + + - **Inline Script**: Enter the script shown below to update the virtual machine scale set.

    + + Use the following script for the **Inline Script** parameter of the **Azure PowerShell** task: + + ```powershell + # get the VMSS model + + $vmss = Get-AzureRmVmss -ResourceGroupName resource_group_name -VMScaleSetName VM_scale_set_name + + # set the new version in the model data + + $vmss.virtualMachineProfile.storageProfile.osDisk.image.uri="$(bakedImageUrl)" + + # update the virtual machine scale set model + + Update-AzureRmVmss -ResourceGroupName resource_group_name -Name resource_group_name -VirtualMachineScaleSet $vmss + ``` + + You can use variables to pass values such as the resource group and virtual machine scale set names to the script if you wish. + +1. In the **Deployment conditions** dialog for the environment, ensure that the **Trigger** section is set to **After release creation**. + +1. Enter a name for the release definition and save it. + +1. Create a new release, select the latest build, and + ensure that the application has been deployed correctly and has generated the VHD. + +## Q&A + + + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] + diff --git a/docs/build-release/apps/cd/azure/deploy-container-kubernetes.md b/docs/build-release/apps/cd/azure/deploy-container-kubernetes.md new file mode 100644 index 00000000000..6ac7f1c28af --- /dev/null +++ b/docs/build-release/apps/cd/azure/deploy-container-kubernetes.md @@ -0,0 +1,186 @@ +--- +ms.assetid: A6E63753-7D33-4F57-8971-D93059624756 +title: CD Kubernetes to Azure Container Service +description: Set up CD using Kubernetes to Azure Container Service from Release Management in VSTS or TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +--- + +# Implement continuous deployment of your app using Kubernetes to Azure Container Service + +Continuous deployment (CD) means starting an automated deployment process whenever a new successful build is available. +Here. we'll show you how to set up continuous delivery of a Docker based app by using Visual Studio Team Services +to a Kubernetes cluster running in Azure Container Service. + +[Azure Container Service (ACS)](https://azure.microsoft.com/services/container-service/) allows to deploy and +manage containers using Kubernetes, Docker Swarm, Mesosphere DC/OS orchestrators. You can deploy these three orchestrators +on Azure by using the portal, an Azure Resource Manager template, or the Azure CLI. + +The [Azure Container Registry (ACR)](https://azure.microsoft.com/services/container-registry/) is an implementation of the +open source Docker Registry. ACR is now available as an Azure Service and is fully compatible with all three orchestrators. +ACR is used as a private registry to store Docker images for enterprise applications, instead of needing to use the public Docker Hub. + +## Get set up + +### Begin with a CI build + +Before you begin, you'll need a CI build that publishes your app. To set up CI for your specific type of app, see: + +* [Build and deploy your app](../../index.md) + +### Modify your build to create a Docker container + +Next, you'll need to modify your build definition to create a Docker container +for deployment using ACS. + +1. Add two instances of the **Docker** task to the end of your build definition. + +1. Add one instance of the **Publish Build Artifacts** task to the end of your build definition. + +1. Configure the tasks as follows: + + ![Build: Docker](../../../tasks/deploy/_img/docker-icon.png)
    [Build: Docker](../../../tasks/deploy/deploy-to-kubernetes.md) Build the container image from the Docker file. + + - **Container Registry type**: `Azure Container Registry` + + - **Azure Subscription:** Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Azure Container Registry**: Select the target Azure container registry. + + - **Action**: `Build an image` + + - **Image name**: Enter the name for your Docker image. + + - **Qualify Image Name**: Checked + + - **Additional Image Tags**: `$(Build.BuildId)`

    + + ![Build: Docker](../../../tasks/deploy/_img/docker-icon.png)
    [Build: Docker](../../../tasks/deploy/deploy-to-kubernetes.md) Push the container image to a container registry. + + - **Container Registry type**: `Azure Container Registry` + + - **Azure Subscription:** Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Azure Container Registry**: Select the target Azure container registry. + + - **Action**: `Push an image` + + - **Image name**: Enter the name of your Docker image. + + - **Qualify Image Name**: Checked + + - **Additional Image Tags**: `$(Build.BuildId)`

    + + ![Build: Publish Build Artifacts](../../../tasks/build/_img/publish-build-artifacts.png) [Build: Publish Build Artifacts](../../../tasks/deploy/deploy-to-kubernetes.md) - Publish the Kubernetes configuration files used for creating the [deployment](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) and [service](https://kubernetes.io/docs/concepts/services-networking/service/) in the cluster. These files are added to the [repository](https://github.com/azooinmyluggage/k8s-docker-core/tree/master/k8config). + + - **Path to Publish**: `k8config` + + - **Artifact name:** `yaml` + + - **Artifact Type**: `Server`

    + +1. Save your build definition. + +

    Define and test your CD release process

    + +Continuous deployment (CD) means starting an automated release process whenever a new successful build is available. +Your CD release process picks up the artifacts published by your CI build and then deploys them. + +1. Open the **Releases** tab of the **Build & Release** hub, open the **+** drop-down + in the list of release definitions, and choose **Create release definition** + +1. Select the **Deploy to Kubernetes cluster** template and choose **Next**. + +1. In the **Artifacts** section, make sure your CI build definition for the Docker package is selected as the artifact source. + +1. Select the **Continuous deployment** check box, and then choose **Create**. + +1. Add two more instances of the **Deploy to Kubernetes** task to your release definition. + This task uses the `kubectl` command to execute operations on a Kubernetes cluster. + +1. Configure the tasks as follows: + + ![Deploy: Deploy to Kubernetes](../../../tasks/deploy/_img/kubernetes-icon.png) [Deploy: Deploy to Kubernetes](../../../tasks/deploy/deploy-to-kubernetes.md) - Create the deployment and secret. + + - **Container Registry type**: `Azure Container registry` + + - **Azure Subscription:** Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Azure Container registry**: Select the Azure container registry to which you pushed your container images. + + - **Secret name**: Name of the Docker registry secret. You can use this secret name in the Kubernetes YAML configuration file. + + - **Command**: `apply` (you can run any kubectl command) + + - **Use Configuration file**: Checked + + - **Configuration file**: Select the **deployment.yaml** file that was published as an artifact from the build. Example: `$(System.DefaultWorkingDirectory)/Kubernetes-ACS-CI/yaml/deployment.yaml`

    + + ![Deploy: Deploy to Kubernetes](../../../tasks/deploy/_img/kubernetes-icon.png) [Deploy: Deploy to Kubernetes](../../../tasks/deploy/deploy-to-kubernetes.md) - Create the service using the yaml file. + + - **Container Registry type**: `Azure Container registry` + + - **Azure Subscription:** Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Azure Container registry**: Select the Azure container registry to which you pushed your container images. + + - **Secret name**: Name of the Docker registry secret. You can use this secret name in the Kubernetes YAML configuration file. + + - **Command**: `apply` + + - **Use Configuration file**: Checked + + - **Configuration file**: Select the **service.yaml** file that was published as an artifact from the build. Example: `$(System.DefaultWorkingDirectory)/Kubernetes-ACS-CI/yaml/service.yaml`

    + + ![Deploy: Deploy to Kubernetes](../../../tasks/deploy/_img/kubernetes-icon.png) [Deploy: Deploy to Kubernetes](../../../tasks/deploy/deploy-to-kubernetes.md)
    Update with the latest image. + + - **Container Registry type**: `Azure Container registry` + + - **Azure Subscription:** Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Azure Container registry**: Select the Azure container registry to which you pushed your container images. + + - **Secret name**: Name of the Docker registry secret. You can use this secret name in the Kubernetes YAML configuration file. + + - **Command**: `set` + + - **Arguments**: Arguments to pass to teh command. For example, `image deployment/coreserverdeployment core-server=image:tag` where you are using a private registry (so the image name must be prefixed with the container registry name). We also use the Build Id to tag our images here, so the `image:tag` value will be `{your-acr-name}.azurecr.io/docker-dotnetcore:$(Build.BuildId)`. `docker-dotnetcore` is the image name used in the build.

    + +1. Edit the name of the release definition, choose **Save**, and choose **OK**. + Note that the default environment is named Environment1, which you can edit by clicking directly on the name. + +You're now ready to create a release, which means to start the process of running the release definition with the artifacts produced by a specific build. This will result in deploying the build to Azure: + +1. Choose **+ Release** and select **Create Release**. + +1. Select the build you just completed in the highlighted drop-down list and choose **Create**. + +1. Choose the release link in the popup message. For example: "Release **Release-1** has been created". + +1. Open the **Logs** tab to watch the release console output. + +## Q&A + + + +### Why use the Build ID as the tag when deploying? + +In this example, we used the kubectl `set image` command with the Build ID as the tag. +Using the Build ID as the tag has an added advantage of traceability. Avoid using the +latest tag with the container image. An alternate approach is to modify the YAML +file with the Build ID used to tag the image. + +### How do I define separate environments for my release? + +The [Kubernetes namespace](https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/) +allows complete separation of resources and management within the same cluster. So namespace can be used +to create multiple environments such as *Dev*, *QA*, and *Production* in the same ACS Kubernetes cluster. + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/cd/azure/deploy-provision-azure-vm.md b/docs/build-release/apps/cd/azure/deploy-provision-azure-vm.md new file mode 100644 index 00000000000..d3f77f3599d --- /dev/null +++ b/docs/build-release/apps/cd/azure/deploy-provision-azure-vm.md @@ -0,0 +1,80 @@ +--- +ms.assetid: 10C708EC-0D2A-4EF8-9381-4CF8B1EBA755 +title: CD of an Azure VM using a Resource Manager template +description: Provision a VM using ARM templates in Microsoft Release Management in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# CD of an Azure virtual machine using a Resource Manager template + +In just a few steps, you can provision Azure virtual machines (VMs) +using [Resource Manager (RM) templates](https://azure.microsoft.com/documentation/articles/resource-group-template-deploy/). +Managing the definitions for virtual machines in this +way is considered **Infrastructure as code** and is +a good DevOps practice. + +## Prerequisites + +Before you begin, you need a CI build that creates your Azure RM template. To set up CI, see: + +* [Build an Azure virtual machine using an Azure RM template](build-azure-vm-template.md) + +## Define and test your CD release process + +Carry out the following steps to deploy the Azure Resource Group. + +1. Open the **Releases** tab of the **Build & Release** hub and choose the + "**+**" icon to create a new release definition. + +1. In the **Create release definition** dialog, select the **Empty** template and choose **Next**. + +1. In the next page, select the build definition you created + earlier and choose **Create**. This creates a new release definition + with one default environment. + +1. In the new release definition, select **+ Add tasks** and add an **Azure Resource Group Deployment** task. + Optionally edit the name to help identify the task, such as **Provision Windows 2012 R2 VM**. + +1. Configure the **Azure Resource Group Deployment** task as follows: + + ![Azure Resource Group Deployment](../../../tasks/deploy/_img/azure-resource-group-deployment-icon.png) [Deploy: Azure Resource Group Deployment](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureResourceGroupDeployment) - Deploy files to an Azure Resource Group. + + - **Azure Subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions + connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Action**: `Create or Update Resource Group` + + - **Resource Group**: The name for a new resource group, or an existing resource group name. + + - **Template location**: The path of the Resource Manager template; for example:
    `$(System.DefaultWorkingDirectory)\ASPNet4.CI\drop\HelloWorldARM\Templates\WindowsVirtualMachine.json` + + - **Template Parameters**: The path of the Resource Manager template parameters file; for example:
    `$(System.DefaultWorkingDirectory)\ASPNet4.CI\drop\HelloWorldARM\Templates\WindowsVirtualMachine.parameters.json` + + - **Override Template Parameters**: A list of values for the parameters in the template; for example:
    `-adminUsername $(vmuser) -adminPassword (ConvertTo-SecureString -String $(vmpassword) -AsPlainText -Force) -dnsNameForPublicIP $(dns)'`
    Use the **...** button to open the parameters editor dialog. + + - **Enable Deployment Prerequisites**: Checked. + + - **Output - Resource Group**: The name of the Resource Group output from the task as a value that can be used as an input to further deployment tasks.

    + + >Checking the **Enable Deployment Prerequisites** checkbox + configures WinRM on the virtual machine and enables + execution of remote PowerShell scripts, which may be + required to deploy an application. Also notice the use of + **ConvertTo-SecureString** to specify the value for **adminPassword**. + You must do this because **adminPassword** is defined as a **SecureString** + type in the Resource Manager template file. + +1. If you used [variables](../../../concepts/definitions/release/variables.md) + in the parameters of the **Azure Resource Group Deployment** task, + such as **vmuser**, **vmpassword**, and **dns**, set the values for them in the + environment configuration variables. Encrypt the value + of **vmpassword** by selecting the "padlock" icon. + +1. Enter a name for the release definition and save it. + +1. Create a new release, select the latest build, and + deploy it to the single environment. diff --git a/docs/build-release/apps/cd/azure/deploy-provision-devtest-lab.md b/docs/build-release/apps/cd/azure/deploy-provision-devtest-lab.md new file mode 100644 index 00000000000..35a89906f76 --- /dev/null +++ b/docs/build-release/apps/cd/azure/deploy-provision-devtest-lab.md @@ -0,0 +1,247 @@ +--- +ms.assetid: 4FC75F92-EC04-4458-8069-53EEBF855D2F +title: Manage a virtual machine in Azure DevTest Labs +description: Create, manage, and delete VMs in Azure DevTest Labs using Microsoft Release Management in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Manage a virtual machine in Azure DevTest Labs + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +The [Azure DevTest Labs](https://azure.microsoft.com/en-us/services/devtest-lab/) +service lets you quickly provision development and test environments using reusable +templates. You can use pre-created images, minimize waste with quotas and policies, +and minimize costs by using automated shutdown. + +By using an extension installed in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) you +can easily integrate your build and release pipeline with Azure DevTest Labs. +The extension installs three tasks to create a VM, create a custom image from +a VM, and delete a VM. This makes it easy to, for example, quickly deploy a +"golden image" for specific test task, then delete it when the test is finished. + +This example shows how to create and deploy a VM, create a custom image, then +delete the VM. It does so as one complete pipeline, though it reality you +would use the tasks individually in your own custom build-test-deploy pipeline. + +## Get set up + +Start by installing the +[Azure DevTest Labs Tasks](https://marketplace.visualstudio.com/items?itemName=ms-azuredevtestlabs.tasks) +extension from Visual Studio Marketplace: + +* For VSTS, choose **Install** +* For TFS, choose **Download** and install the extension on your server. + +## Create an Azure RM template + +Carry out these tasks to create the Azure Resource Manager (ARM) template that you can +use to create an Azure Virtual Machine on demand. + +1. Follow the steps in [these documents](https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-overview) + on the Azure website to create an ARM template in your subscription. + +1. Follow the steps in [these documents](https://docs.microsoft.com/en-us/azure/devtest-lab/devtest-lab-overview) + on the Azure website to save the ARM template as a file + on your computer. Name the file **CreateVMTemplate.json**. + +1. Edit the **CreateVMTemplate.json** file as described in + [this post](http://www.visualstudiogeeks.com/blog/DevOps/Configure-winrm-with-ARM-template-in-AzureDevTestLab-VM-deployment-using-PowerShell-artifact) + on Tarun Arora's blog to configure it for Windows Remote + Management (WinRM). + + >WinRM access is required to use deploy tasks such as + **Azure File Copy** and **PowerShell on Target Machines**. + +1. Check the template into your source control system. + +1. Open a text editor and copy the following script into it. + + ```powershell + Param( [string] $labVmId) + + $labVmComputeId = (Get-AzureRmResource -Id $labVmId).Properties.ComputeId + + # Get lab VM resource group name + $labVmRgName = (Get-AzureRmResource -Id $labVmComputeId).ResourceGroupName + + # Get the lab VM Name + $labVmName = (Get-AzureRmResource -Id $labVmId).Name + + # Get lab VM public IP address + $labVMIpAddress = (Get-AzureRmPublicIpAddress -ResourceGroupName $labVmRgName + -Name $labVmName).IpAddress + + # Get lab VM FQDN + $labVMFqdn = (Get-AzureRmPublicIpAddress -ResourceGroupName $labVmRgName + -Name $labVmName).DnsSettings.Fqdn + + # Set a variable labVmRgName to store the lab VM resource group name + Write-Host "##vso[task.setvariable variable=labVmRgName;]$labVmRgName" + + # Set a variable labVMIpAddress to store the lab VM Ip address + Write-Host "##vso[task.setvariable variable=labVMIpAddress;]$labVMIpAddress" + + # Set a variable labVMFqdn to store the lab VM FQDN name + Write-Host "##vso[task.setvariable variable=labVMFqdn;]$labVMFqdn" + +1. Check the script into your source control system. Name + it something like **GetLabVMParams.ps1**. + + >This script, when run on the agent as part of the release definition, + collects values that you'll need to deploy your app to the VM + if you use task steps such as **Azure File Copy** or + **PowerShell on Target Machines**. These are the tasks you + typically use to deploy apps to an Azure VM, and they require values + such as the VM Resource Group name, IP address, and + fully-qualified domain name (FDQN). + +## Deploy + +Carry out the following steps to create the +release definition in Release Management. + +1. Open the **Releases** tab of the **Build & Release** hub and choose the + "**+**" icon to create a new release definition. + +1. In the **Create release definition** dialog, + select the **Empty** template and choose **Next**. + +1. In the next page, select **Choose Later** and then choose **Create**. + This creates a new release definition with one + default environment and no linked artifacts. + +1. In the new release definition, choose the ellipses (**...**) next + to the environment name to open the shortcut menu + and select **Configure variables**. + +1. In the **Configure - environment** dialog, enter the following values + for the variables you will use in the release definition tasks: + - **vmName**: Enter the name you assigned to the VM when + you created the ARM template in the Azure portal. + - **userName**: Enter the username you assigned to the VM when + you created the ARM template in the Azure portal. + - **password**: Enter the password you assigned to the VM when + you created the ARM template in the Azure portal. + Use the "padlock" icon to hide and secure the password.

    + +1. The first stage in this deployment is to create the VM + you will use as the "golden image" for subsequent deployments. + You create this within your Azure DevTestsLab instance using the + task specially developed for this purpose. + In the release definition, select **+ Add tasks** + and add an **Azure DevTest Labs Create VM** task + from the **Deploy** tab. + +1. Configure the **Azure DevTest Labs Create VM** task as follows: + + ![Azure DevTest Labs Tasks](_img/devtestlabs-icon.png) [Azure DevTest Labs Tasks](https://marketplace.visualstudio.com/items?itemName=ms-azuredevtestlabs.tasks) - Create the VM to use for subsequent deployments. + + - **Azure RM Subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions + connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Lab Name**: Select the name of the instance you created earlier. + + - **Template Name**: Enter the full path and name of the template file you saved into your source code repository. You can use the built-in properties of Release Management to simplify the path, for example: `$(System.DefaultWorkingDirectory/Contoso/ARMTemplates/CreateVMTemplate.json`. + + - **Template Parameters**: Enter the parameters for the variables defined in the template. Use the names of the variables you defined in the environment, for example: `-newVMName '$(vmName)' -userName '$(userName)' -password (ConvertTo-SecureString -String '$(password)' -AsPlainText -Force)`. + + - **Output Variables - Lab VM ID**: You will need the ID of the newly created VM in subsequent steps. The default name of the environment variable that will automatically be populated with this ID is set in the **Output Variables** section. You can edit this if required, but remember to use the correct name in subsequent tasks. The Lab VM ID is in the form: `/subscriptions/{subId}/resourceGroups/{rgName}/providers/Microsoft.DevTestLab/labs/{labName}/virtualMachines/{vmName}`.

    + +1. The next stage is to execute the script you created earlier + to collect the details of the DevTest Labs VM. + In the release definition, select **+ Add tasks** + and add an **Azure PowerShell** task from the **Deploy** tab. + Configure the task as follows: + + ![Azure PowerShell](../../../tasks/deploy/_img/azure-powershell-icon.png) [Deploy: Azure PowerShell](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzurePowerShell) - Execute the script to collect the details of the DevTest Labs VM. + + - **Azure Connection Type**: `Azure Resource Manager`. + + - **Azure RM Subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions + connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Script Type**: `Script File`. + + - **Script Path**: Enter the full path and name of the script you saved into your source code repository. You can use the built-in properties of Release Management to simplify the path, for example: `$(System.DefaultWorkingDirectory/Contoso/Scripts/GetLabVMParams.ps1`. + + - **Script Arguments**: Enter as the script argument the name of the environment variable that was automatically populated with the ID of the lab VM by the previous task, for example: `-labVmId '$(labVMId)'`. | + + >The script collects the values you will require and stores them in + environment variables within the release definition so that you can + easily refer to them in subsequent task steps. + +1. Now you can deploy your app to the new DevTest Labs VM. + The tasks you will typically use for this are + **Azure File Copy** and **PowerShell on Target Machines**. + - The information about the VM you'll need for the parameters of these + tasks is stored in three configuration variables + named **labVmRgName**, **labVMIpAddress**, and **labVMFqdn** within the release definition. + - If you just want to experiment with creating a DevTest Labs + VM and a custom image, without deploying an app to it, just + skip this step.

    + +1. The next stage is to create an image of the newly deployed + VM in your Azure DevTest Labs instance. You can then use + this image to create copies of the VM on demand, whenever + you want to execute a dev task or run some tests. + In the release definition, select **+ Add tasks** + and add an **Azure DevTest Labs Create Custom Image** task + from the **Deploy** tab. Configure it as follows: + + ![Azure DevTest Labs Tasks](_img/devtestlabs-icon.png) [Azure DevTest Labs Tasks](https://marketplace.visualstudio.com/items?itemName=ms-azuredevtestlabs.tasks) - Create an image of the VM. + + - **Azure RM Subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions + connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Lab Name**: Select the name of the instance you created earlier. + + - **Custom Image Name**: Enter a name for the custom image you will create. + + - **Description**: Optionally enter a description to make it easy to select the correct image later. + + - **Source Lab VM - Source Lab VM ID**: If you changed the default name of the environment variable that was automatically populated with the ID of the lab VM by an earlier task, edit it here. The default is `$(labVMId)`. + + - **Output Variables - Lab VM ID**: You will need the ID of the newly created image when you want to manage or delete it. The default name of the environment variable that will automatically be populated with this ID is set in the **Output Variables** section. You can edit this if required.

    + +1. The final stage in this example is to delete the VM you deployed + in your Azure DevTest Labs instance. In reality you will, of course, + do this _after_ you execute the dev tasks or run the tests you need + on the deployed VM. In the release definition, select + **+ Add tasks** and add an **Azure DevTest Labs Delete VM** task + from the **Deploy** tab. Configure it as follows: + + ![Azure DevTest Labs Tasks](_img/devtestlabs-icon.png) [Azure DevTest Labs Tasks](https://marketplace.visualstudio.com/items?itemName=ms-azuredevtestlabs.tasks) - Delete the VM. + + - **Azure RM Subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions + connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Lab VM ID**: If you changed the default name of the environment variable that was automatically populated with the ID of the lab VM by an earlier task, edit it here. The default is `$(labVMId)`.

    + +1. Enter a name for the release definition and save it. + +1. Create a new release, select the latest build, + and deploy it to the single environment in the definition. + +1. At each stage, refresh the view of your DevTest Labs instance + in the Azure portal to see the VM and image being created, and the + VM being deleted again. You can now use the custom image to create + VMs when required. + + >For more information, or if you have any suggestions for + improvements to the extension, visit the + [DevTest Labs feedback forum](https://feedback.azure.com/forums/320373-azure-devtest-labs). + +## Q&A + + + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/cd/deploy-cloudservice-cloudservice.md b/docs/build-release/apps/cd/deploy-cloudservice-cloudservice.md new file mode 100644 index 00000000000..741bef1e42d --- /dev/null +++ b/docs/build-release/apps/cd/deploy-cloudservice-cloudservice.md @@ -0,0 +1,111 @@ +--- +ms.assetid: 2FFE372F-0F5A-4B8C-9AEE-5D8E4F61F6F5 +title: Deploy your ASP.NET app to an Azure cloud service +description: Example of deploying an Azure cloud services package from Release Management in VSTS or Microsoft Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +--- + +# Deploy your ASP.NET app to an Azure cloud service + +[!INCLUDE [temp](../../_shared/version-rm-dev14.md)] + +Continuous deployment means starting an automated deployment process whenever a new successful build is available. +Here we'll show you how to set up continuous deployment of your ASP.NET app to an Azure cloud service using Release Management. + +You can also use these steps to deploy your app to an Azure Government Cloud +by creating a suitable service endpoint for your Azure Government Cloud subscription. +For more details, see the [Azure Government Cloud deployments](../../concepts/library/government-cloud.md). + +## Get set up + +### Begin with a CI build + +Before you begin, you'll need a CI build that publishes your Cloud Service package. To set up CI, see: + +* [Build your Azure cloud service](../aspnet/build-aspnet-cloudservice.md) + +### Azure storage + +An Azure blob storage container is required for deploying to Azure cloud services. +Carry out the following steps in the Azure portal to create one. + +1. Sign into the Azure management portal and choose the + **+New** icon in the left panel, then choose + **Data + Storage**. Select **Storage Account** from the list. + +1. At the bottom of the **Storage Account** blade, in the + **Select a deployment model** list, choose + **Classic** and then choose **Create**. + +1. In the **Create Storage Account** blade: + - Enter a name for the new storage account. + - Select an existing Resource Group, or create a new one. + - Select a location for the new storage account. + - Leave all the other settings at their default values, and choose **Create**.

    + +1. After the storage account has been created, open its + blade and choose the **Blobs** tile. In the + **Blob service** blade, choose the **Containers** tile and, + in the **Container** blade, choose the **+Container** icon at the top to create a new container. + +1. In the **New Container** blade, type a name for the container. + Select **Container** in the **Access type** list, and choose **Create**. + +

    Define and test your CD release process

    + +Continuous deployment (CD) means starting an automated release process whenever a new successful build is available. Your CD release process picks up the artifacts published by your CI build and then deploys them to your Azure cloud service. + +1. Do one of the following: + + * If you've just completed a CI build (see above) then, in the build's + **Summary** tab under **Deployments**, choose **Create release** followed by **Yes**. + This starts a new release definition that's automatically linked to the build definition. + + * Open the **Releases** tab of the **Build & Release** hub, open the **+** drop-down + in the list of release definitions, and choose **Create release definition**. + +1. Select the **Azure Cloud Service Deployment** template and click **Next**. + +1. In the **Artifacts** section, make sure your CI build definition that creates the cloud services artifacts is selected. + +1. Select the **Continuous deployment** check box, and then choose **Create**. + +1. Select the **Azure Cloud Service Deployment** task and configure it as follows: + + ![icon](../../tasks/deploy/_img/azure-cloud-service-deployment-icon.png) [Deploy: Azure Cloud Service Deployment](../../tasks/deploy/azure-cloud-service-deployment.md) - Deploy the app to an Azure cloud service. + + - **Azure Subscription (Classic)**: Select an Azure Classic service endpoint. If you have not created one already, create one now by choosing **Add**. Then return to your release definition, refresh the **Azure Subscription** list, and select the connection you just created. + + - **Storage account**: Select the storage account you created earlier. + + - **Service name**: Select the name of an existing cloud service, or enter the name of a new cloud service.

    + + > If your Azure subscription is defined in an Azure Government Cloud, ensure your deployment process meets the relevant compliance requirements. For more details, see [Azure Government Cloud deployments](../../concepts/library/government-cloud.md). + +1. Edit the name of the release definition, click **Save**, and click **OK**. Note that the default environment is named Environment1, which you can edit by clicking directly on the name. + +You're now ready to create a release, which means to start the process of running the release definition with the artifacts produced by a specific build. This will result in deploying the build to Azure: + +1. Choose **+ Release** and select **Create Release**. + +1. Select the build you just completed in the highlighted drop-down list and choose **Create**. + +1. Choose the release link in the popup message. For example: "Release **Release-1** has been created". + +1. Open the **Logs** tab to watch the release console output. + +1. After the release is complete, navigate to your site running in Azure cloud services and verify its contents. + +## Q&A + + + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/cd/deploy-dacpac-sqlpackage.md b/docs/build-release/apps/cd/deploy-dacpac-sqlpackage.md new file mode 100644 index 00000000000..46683c04fa9 --- /dev/null +++ b/docs/build-release/apps/cd/deploy-dacpac-sqlpackage.md @@ -0,0 +1,114 @@ +--- +ms.assetid: BB1FC018-77A7-42E7-A270-4BC7CB3AD1C4 +title: Deploy your database to Azure SQL Database using DACPACs +description: Deploy a SQL DACPAC to an Azure SQL Database from Release Management in VSTS or TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2016 +--- + +# Deploy your database to Azure SQL Database using DACPACs + +[!INCLUDE [temp](../../_shared/version-rm-dev14.md)] + +Continuous deployment means starting an automated deployment process whenever a new successful build is available. +Here we'll show you how to set up continuous deployment of your database packaged as a DACPAC to an Azure SQL Database using Release Management. + +## Get set up + +### Begin with a CI build + +Before you begin, you need a CI build that publishes your SQL server package. To set up CI, see: + +* [Continuous integration for SQL Server databases](../aspnet/build-aspnet-dacpac.md) + +### Azure SQL Database + +Carry out the following steps to set up an Azure SQL Database server to which the +DACPAC of the database will be deployed. + +1. Sign into the Azure management portal and choose + the **+New** icon in the left panel, then choose + **Data + Storage**. Select **SQL Database** from the + list. + +1. In the **SQL Database** blade, enter a name for + Azure SQL Database and then + choose **Server** to configure the required settings + for the server. + +1. In the **Server** blade, choose **Create a new server**. + +1. In the **New server** blade, enter a name for the + server and enter the admin + login and password for the new server. + Leave all other settings as they are and choose **OK**. + +1. Back in the **SQL Database** blade, leave all the + other settings at their default values and choose + **Create**. + +1. After the Azure SQL Database server and database + have been created, open its blade and make a note + of the **Server name**. + +## Define and test your CD release process + +Continuous deployment (CD) means starting an automated release process whenever a new successful build is available. Your CD release process picks up the artifacts published by your CI build and then deploys them to your database. + +1. Do one of the following: + + * If you've just completed a CI build (see above) then, in the build's **Summary** tab under **Deployments**, choose **Create release** followed by **Yes**. This starts a new release definition that's automatically linked to the build definition. + + * Open the **Releases** tab of the **Build & Release** hub, open the **+** drop-down + in the list of release definitions, and choose **Create release definition**. + +1. Select the **Empty** template and choose **Next**. + +1. In the **Artifacts** section, make sure your CI build definition that publishes the DACPAC is selected as the artifact source. + +1. Select the **Continuous deployment** check box, and then choose **Create**. + +1. Add a **SQL Database** task to the default environment and configure it as follows: + + ![icon](../../tasks/deploy/_img/azure-sql-database-deployment-icon.png) [Deploy: Azure SQL Database Deployment](../../tasks/deploy/azure-sql-database-deployment.md) - Deploy the database to Azure SQL Database. + + - **Azure Connection Type**: `Azure Resource Manager`. + + - **Azure Subscription:** Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Azure SQL Server Name**: Enter the name of the SQL Database server you created earlier. + + - **Database Name**: Enter the name of database. + + - **Server Admin Login**: Enter the admin user name for your SQL Database. + + - **Password**: Enter the admin password for your SQL Database. To hide the password, create a variable for it in the environment. + + - **Firewall - Specify Firewall Rules Using**: `AutoDetect`

    + +1. Edit the name of the release definition, choose **Save**, and choose **OK**. + Note that the default environment is named Environment1, which you can edit by clicking directly on the name. + +You're now ready to create a release, which means to start the process of running the release definition with the artifacts produced by a specific build. +This will result in deploying the database DACPAC to Azure SQL Database: + +1. Choose **+ Release** and select **Create Release**. + +1. Select the build you just completed in the highlighted drop-down list and choose **Create**. + +1. Choose the release link in the popup message. For example: "Release **Release-1** has been created". + +1. Open the **Logs** tab to watch the release console output. + +## Q&A + + + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/cd/deploy-database-sqlscripts.md b/docs/build-release/apps/cd/deploy-database-sqlscripts.md new file mode 100644 index 00000000000..e1957a70bb6 --- /dev/null +++ b/docs/build-release/apps/cd/deploy-database-sqlscripts.md @@ -0,0 +1,180 @@ +--- +ms.assetid: C857DC15-E1E5-4E55-9B00-744F04F886DA +title: Deploy your database to Azure SQL Database using SQL scripts +description: Deploy to Azure SQL Database using a SQL script from Release Management in VSTS or TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +--- + +# Deploy your database to Azure SQL database using SQL scripts + +[!INCLUDE [temp](../../_shared/version-rm-dev14.md)] + +Continuous deployment means starting an automated deployment process whenever a new successful build is available. +Here we'll show you how to run SQL scripts against an Azure SQL Database as part of continuous deployment using Release Management. + +## Get set up + +### Azure SQL Database + +Carry out the following steps to set up an Azure SQL Database server against which the +the database script will be executed. + +1. Sign into the Azure management portal and choose + the **+New** icon in the left panel, then choose + **Data + Storage**. Select **SQL Database** from the + list. + +1. In the **SQL Database** blade, enter a name for + Azure SQL Database and then + choose **Server** to configure the required settings + for the server. + +1. In the **Server** blade, choose **Create a new server**. + +1. In the **New server** blade, enter a name for the + server and enter the admin + login and password for the new server. + Leave all other settings as they are and choose **OK**. + +1. Back in the **SQL Database** blade, leave all the + other settings at their default values and choose + **Create**. + +1. After the Azure SQL Database server and database + have been created, open its blade and make a note + of the **Server name**. + +### Azure SQL scripts + +You will need a **SQL script** that is published as an artifact by Team Build or a similar continuous integration service. Alternatively, you can also store the script in a version control repository. If you do not have a script, follow these steps to get started with a simple script. + +* Check the following script into a version control repository such as VSTS or TFS as `DatabaseExample.sql`. + + ```sql + USE [master] + GO + IF NOT EXISTS (SELECT name FROM master.sys.databases WHERE name = N'DatabaseExample') + CREATE DATABASE [DatabaseExample] + GO + ``` + +In addition, you will need Azure Powershell scripts to create and remove firewall rules in Azure. Without the firewall rules, the agent cannot communicate with the Azure SQL Database. + +* Check the following PowerShell script into the same location that has your SQL script as `SetAzureFirewallRule.ps1`. + + ```powershell + [CmdletBinding(DefaultParameterSetName = 'None')] + param + ( + [String] [Parameter(Mandatory = $true)] $ServerName, + [String] $AzureFirewallName = "AzureWebAppFirewall" + ) + + $ErrorActionPreference = 'Stop' + + function New-AzureSQLServerFirewallRule { + $agentIP = (New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]" + New-AzureSqlDatabaseServerFirewallRule -StartIPAddress $agentIp -EndIPAddress $agentIp -RuleName $AzureFirewallName -ServerName $ServerName + } + function Update-AzureSQLServerFirewallRule{ + $agentIP= (New-Object net.webclient).downloadstring("http://checkip.dyndns.com") -replace "[^\d\.]" + Set-AzureSqlDatabaseServerFirewallRule -StartIPAddress $agentIp -EndIPAddress $agentIp -RuleName $AzureFirewallName -ServerName $ServerName + } + + If ((Get-AzureSqlDatabaseServerFirewallRule -ServerName $ServerName -RuleName $AzureFirewallName -ErrorAction SilentlyContinue) -eq $null) + { + New-AzureSQLServerFirewallRule + } + else + { + Update-AzureSQLServerFirewallRule + } + ``` + +* Check the following PowerShell script into the same location that has your SQL script as `RemoveAzureFirewallRule.ps1`. + + ```powershell + [CmdletBinding(DefaultParameterSetName = 'None')] + param + ( + [String] [Parameter(Mandatory = $true)] $ServerName, + [String] $AzureFirewallName = "AzureWebAppFirewall" + ) + + $ErrorActionPreference = 'Stop' + + If ((Get-AzureSqlDatabaseServerFirewallRule -ServerName $ServerName -RuleName $AzureFirewallName -ErrorAction SilentlyContinue)) + { + Remove-AzureSqlDatabaseServerFirewallRule -RuleName $AzureFirewallName -ServerName $ServerName + } + ``` + +## Define and test your CD release process + +1. Open the **Releases** tab of the **Build & Release** hub, open the **+** drop-down + in the list of release definitions, and choose **Create release definition**. + +1. Select the **Empty** template. + +1. Select the build definition or repository that contains the SQL scripts as the artifact source. + +1. Select the **Continuous deployment** check box, and then choose **Create**. + +1. Add the following tasks to the definition: + + ![Azure Powershell](../../tasks/deploy/_img/azure-powershell-icon.png) [Deploy: Azure Powershell](../../tasks/deploy/azure-powershell.md) - Add a firewall rule in Azure to allow it to connect to Azure SQL Database. + + - **Azure Connection Type**: `Azure Classic`. The scripts provided as samples here work with only an Azure Classic connection. + + - **Azure Subscription**: Select an Azure subscription. If you have not created an Azure classic endpoint, create one now by choosing **Add**. + + - **Script Type**: `Script File Path`. + + - **Script Path**: Select the location of `SetAzureFirewallRule.ps1`. + + - **Script Arguments**: Name of the SQL server you created earlier.

    + + ![Command Line](../../tasks/utility/_img/command-line.png) [Utility: Command Line](../../tasks/utility/command-line.md) - Run the SQL script. + + - **Tool**: `SQLCMD`. + + - **Arguments**: `-S {database-server-name}.database.windows.net -U {username}@{database-server-name} -P {password} -d {database-name} -i {SQL file}`. For example, when the SQL script is coming from an artifact source, **{SQL file}** will be of the form: `$(System.DefaultWorkingDirectory)/contoso-repo/DatabaseExample.sql`.

    + + ![Azure Powershell](../../tasks/deploy/_img/azure-powershell-icon.png) [Deploy: Azure Powershell](../../tasks/deploy/azure-powershell.md) - Remove the firewall rule in Azure. + + - **Azure Connection Type**: `Azure Classic`. The scripts provided as samples here work with only an Azure Classic connection. + + - **Azure Subscription**: Select an Azure subscription. If you have not created an Azure classic endpoint, create one now by choosing **Add**. + + - **Script Type**: `Script File Path`. + + - **Script Path**: Select the location of `RemoveAzureFirewallRule.ps1`. + + - **Script Arguments**: Name of the SQL server you created earlier.

    + +1. Edit the name of the release definition, choose **Save**, and choose **OK**. + Note that the default environment is named Environment1, which you can edit by clicking directly on the name. + +You're now ready to create a release, which means to start the process of running the release definition. + +1. Choose **+ Release** and select **Create Release**. + +1. Select the build we just completed in the highlighted drop-down list and choose **Create**. + +1. Choose the release link in the popup message. For example: "Release **Release-1** has been created". + +1. Open the **Logs** tab to watch the release console output. + +## Q&A + + + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/cd/deploy-docker-webapp.md b/docs/build-release/apps/cd/deploy-docker-webapp.md new file mode 100644 index 00000000000..5e52f39e1dd --- /dev/null +++ b/docs/build-release/apps/cd/deploy-docker-webapp.md @@ -0,0 +1,36 @@ +--- +ms.assetid: 78815F3C-4347-4C8B-AB4B-F36FC0D41531 +title: Deploy a Docker container app to an Azure web app +description: Set up continuous deployment (CD) of a Docker-enabled app to an Azure web app from Release Management in Visual Studio Team Services (VSTS) or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +--- + +# Deploy to an Azure Web App for Containers + +**VSTS** + +We'll show you how to set up continuous deployment of your Docker-enabled app to an Azure web app using +Visual Studio Team Services (VSTS). +Your build or continuous integration process must publish a Docker container image +in order to use the steps in this quickstart. + +## Prerequisites + +Before you begin, you'll need a CI build that publishes a Docker image. +To set up CI for your specific type of app, see: + +* [Build your ASP.NET Core Container app](../aspnet/build-aspnet-core-docker.md) + +You'll need an Azure subscription. If you don't have one, you can [create one for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F). + +[!INCLUDE [create-azure-webapp-to-host-container](../_shared/create-azure-webapp-to-host-container.md)] + +[!INCLUDE [create-release-azure-webapp-container](../_shared/create-release-azure-webapp-container.md)] + +## Next steps + +* [Set up multi-stage release](../../actions/define-multistage-release-process.md) diff --git a/docs/build-release/apps/cd/deploy-docker-windowsvm.md b/docs/build-release/apps/cd/deploy-docker-windowsvm.md new file mode 100644 index 00000000000..e470ad4f534 --- /dev/null +++ b/docs/build-release/apps/cd/deploy-docker-windowsvm.md @@ -0,0 +1,33 @@ +--- +ms.assetid: 73E26BEF-B983-4314-8171-5BE1DB2C0111 +title: Deploy a Docker container app to a Windows VM +description: Set up continuous deployment (CD) of a Docker-enabled app to a Microsoft Azure Virtual Machine from Release Management in Visual Studio Team Services (VSTS) or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +--- + +# Deploy a Docker-enabled app to a Windows VM + +**VSTS | TFS 2017 Update 2** + +We'll show you how to set up continuous deployment of your Docker-enabled app to an Azure VM using +Visual Studio Team Services (VSTS) or Microsoft Team Foundation Server (TFS). You can use the steps in this quickstart +as long as your continuous integration process publishes a Docker-enabled package. + +## Prerequisites + +Before you begin, you'll need a CI build that publishes your Docker-enabled package. +To set up CI for your specific type of app, see: + +* [Build your ASP.NET Core app as a container](../aspnet/build-aspnet-core-docker.md) + +You'll also need an Azure VM where you will deploy the app. + +[!INCLUDE [create-azure-windows-vm](../_shared/create-azure-windows-vm.md)] + +## Create a release + +## Next steps diff --git a/docs/build-release/apps/cd/deploy-java-linuxvm.md b/docs/build-release/apps/cd/deploy-java-linuxvm.md new file mode 100644 index 00000000000..c51fa6c2fc7 --- /dev/null +++ b/docs/build-release/apps/cd/deploy-java-linuxvm.md @@ -0,0 +1,35 @@ +--- +ms.assetid: 9EBB0342-7FD2-473C-9809-9BCA2250CBC3 +title: Deploy a Java app to a Linux VM +description: Set up continuous deployment (CD) of a Java app to a Linux Virtual Machine from Release Management in Visual Studio Team Services (VSTS) or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +--- + +# Deploy a Java app to a Linux VM + +**VSTS | TFS 2017 Update 2** + +We'll show you how to set up continuous deployment of your Java app to Tomcat server running on an Azure Linux VM using +Visual Studio Team Services (VSTS) or Microsoft Team Foundation Server (TFS). You can use the steps in this quickstart +as long as your continuous integration process publishes a Java package. + +## Prerequisites + +Before you begin, you'll need a CI build that publishes your Java package. +To set up CI for your specific type of app, see: + +* [Build your Java app with Maven](../java/build-maven.md) + +You'll also need an Azure Linux VM with Tomcat installed where you will deploy the app. +If you don't have one already, create one now. If you need help, follow the +steps in [this example](https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/setup-tomcat). + +## Create a release + +{Use a bash script like the one in [https://gist.github.com/geowa4/1428257](https://gist.github.com/geowa4/1428257)} + +## Next steps diff --git a/docs/build-release/apps/cd/deploy-webdeploy-iis-deploygroups.md b/docs/build-release/apps/cd/deploy-webdeploy-iis-deploygroups.md new file mode 100644 index 00000000000..d6f2c118182 --- /dev/null +++ b/docs/build-release/apps/cd/deploy-webdeploy-iis-deploygroups.md @@ -0,0 +1,91 @@ +--- +ms.assetid: 979E4504-C88A-4D0A-A912-6E5998D87445 +title: Deploy to an IIS web server on Windows +description: Deploy an ASP.NET or Node Web Deploy package to IIS servers using Deployment Groups +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +ms.topic: get-started-article +--- + +# Deploy to IIS web server on Windows + +**VSTS** + +We'll show you how to set up continuous deployment of your ASP.NET or Node app to an IIS web server running on Windows using +Visual Studio Team Services (VSTS). You can use the steps in this quickstart as long as your continuous integration process publishes a Web Deploy package. + +## Prerequisites + +Before you begin, you'll need a CI build that publishes your Web Deploy package. To set up CI for your specific type of app, see: + +* [Build your ASP.NET 4 app](../aspnet/build-aspnet-4.md) + +* [Build your ASP.NET Core app](../aspnet/build-aspnet-core.md) + +* [Build your Node app with Gulp](../nodejs/build-gulp.md) + +### IIS configuration + +The configuration varies depending on the type of app you are deploying. + +#### ASP.NET app + +[!INCLUDE [prepare-aspnet-windows-vm](../_shared/prepare-aspnet-windows-vm.md)] + +#### ASP.NET Core app + +[!INCLUDE [prepare-aspnetcore-windows-vm](../_shared/prepare-aspnetcore-windows-vm.md)] + +#### Node app + +Follow the instructions in [this topic](https://github.com/tjanczuk/iisnode) to install and configure IISnode on IIS servers. + +[!INCLUDE [temp](../_shared/create-deployment-group.md)] + +## Define your CD release process + +Your CD release process picks up the artifacts published by your CI build and then deploys them to your IIS servers. + +1. Do one of the following: + + * If you've just completed a CI build (see above) then, in the build's **Summary** tab under **Deployments**, + choose **Create release** followed by **Yes**. This starts a new release definition that's automatically linked to the build definition. + + ![Creating a new release definition from the build summary](../_shared/_img/release-from-build-summary.png) + + * Open the **Releases** tab of the **Build & Release** hub, open the **+** drop-down + in the list of release definitions, and choose **Create release definition**. + + ![Creating a new release definition in the Releases page](../_shared/_img/release-from-release-page.png) + +1. In the **Create release definition** wizard, select **IIS Website Deployment** template, and then click **Apply**. + + ![Screenshot showing IIS website deployment template](../_shared/_img/aspnet-core-to-windows-vm/select-iis-website-deployment-release-template.png) + +1. Click the **Tasks** tab, and then click the **IIS Deployment** phase. For the **Deployment Group**, click the deployment group you created earlier, such as *myIIS*. + + ![iis deployment group in release definition](../_shared/_img/aspnet-core-to-windows-vm/iis-deployment-group-in-release-definition.png) + +1. Save the release definition. + +## Create a release to deploy your app + +You're now ready to create a release, which means to start the process of running the release definition with the artifacts produced by a specific build. This will result in deploying the build: + +1. To test the release definition, click **Release** and then **Create Release**. + +1. On the Create new release dialog box, click **Queue**. Notice that a new release was created. Click the link to navigate to the release. + +1. Click the **Logs** tab to watch the live logs from the deployment as it happens. Wait for the release to be deployed to the Azure web app. + +1. Once deployment has completed, open your web browser and test your web app: `http://`, where `` is the IP address of your web site on your IIS web server. + +## Next steps + +* [Dynamically create and remove a deployment group](howto-webdeploy-iis-deploygroups.md#depgroup) +* [Apply environment-specific configurations](howto-webdeploy-iis-deploygroups.md#envirconfig) +* [Perform a safe rolling deployment](howto-webdeploy-iis-deploygroups.md#rolling) +* [Deploy a database with your app](howto-webdeploy-iis-deploygroups.md#database) diff --git a/docs/build-release/apps/cd/deploy-webdeploy-iis-winrm.md b/docs/build-release/apps/cd/deploy-webdeploy-iis-winrm.md new file mode 100644 index 00000000000..f7d5705a298 --- /dev/null +++ b/docs/build-release/apps/cd/deploy-webdeploy-iis-winrm.md @@ -0,0 +1,195 @@ +--- +ms.assetid: 0D65C5BE-DF92-42F6-B6A4-217F0509D425 +title: Deploy your Web Deploy package to IIS servers using WinRM +description: Deploy a ASP.NET or Node Web Deploy package to IIS servers from VSTS or TFS using WinRM +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 02/01/2017 +--- + +# Deploy your Web Deploy package to IIS servers using WinRM + +[!INCLUDE [temp](../../_shared/version-rm-dev14.md)] + +> A simpler way to deploy web applications to IIS servers is by using [deployment groups](deploy-webdeploy-iis-deploygroups.md) +instead of WinRM. Deployment groups are currently in preview for some accounts in VSTS. They are not yet available in TFS. + +Continuous deployment means starting an automated deployment process whenever a new successful build is available. +Here we'll show you how to set up continuous deployment of your ASP.NET or Node app to one or more IIS servers using Release Management. +A task running on the [Build and Release agent](../../concepts/agents/agents.md) opens a WinRM connection to each IIS server to run Powershell scripts remotely in order to deploy the Web Deploy package. + +## Get set up + +### Begin with a CI build + +Before you begin, you'll need a CI build that publishes your Web Deploy package. To set up CI for your specific type of app, see: + +* [Build your ASP.NET 4 app](../aspnet/build-aspnet-4.md) + +* [Build your ASP.NET Core app](../aspnet/build-aspnet-core.md) + +* [Build your Node app with Gulp](../nodejs/build-gulp.md) + +### WinRM configuration + +Windows Remote Management (WinRM) requires target servers to be: + +* Domain-joined or workgroup-joined +* Able to communicate using the HTTP or HTTPS protocol +* Addressed by using a fully-qualified domain name (FQDN) or an IP address + +This table shows the supported scenarios for WinRM. + +| Joined to a | Protocol | Addressing mode | +| --------- | -------- | --------------- | +| Workgroup | HTTPS | FQDN | +| Workgroup | HTTPS | IP address | +| Domain | HTTPS | IP address | +| Domain | HTTPS | FQDN | +| Domain | HTTP | FQDN | + +Ensure that your IIS servers are set up in one of these configurations. +For example, do not use WinRM over HTTP to communicate with a Workgroup machine. +Similarly, do not use an IP address to access the target server(s) when you use HTTP. +Instead, in both scenarios, use HTTPS. + +Follow these steps to configure each target server. + +1. Enable File and Printer Sharing. You can do this by executing the + following command in a Command window with Administrative permissions: + + `netsh advfirewall firewall set rule group="File and Printer Sharing" new enable=yes` + +1. Check your PowerShell version. You need PowerShell version + 4.0 or above installed on every target machine. To display the current + PowerShell version, execute the following command in the PowerShell console: + + `$PSVersionTable.PSVersion` + +1. Check your .NET Framework version. You need version 4.5 + or higher installed on every target machine. See + [How to: Determine Which .NET Framework Versions Are Installed](https://msdn.microsoft.com/en-in/library/hh925568(v=vs.110).aspx). + +1. Download the two scripts from [this GitHub repository](https://github.com/Microsoft/vsts-rm-documentation/tree/master/WinRM/WinRM-Http-Https-Without-Makecert) + and copy them to every target machine. You will use them to configure WinRM in the following steps. + +1. Decide if you want to use HTTP or HTTPS to communicate + with the target machine(s). + + - If you choose HTTP, execute the following in a Command + window with Administrative permissions: + + `ConfigureWinRM.ps1 {FQDN} http` + + >This command creates an HTTP WinRM listener and + opens port 5985 inbound for WinRM over HTTP. + + - If you choose HTTPS, you can use either a FQDN or an IP + address to access the target machine(s). To use a FQDN to access the target machine(s), + execute the following in the PowerShell console with Administrative permissions: + + `ConfigureWinRM.ps1 {FQDN} https` + + To use an IP address to access the target machine(s), + execute the following in the PowerShell console with Administrative permissions: + + `ConfigureWinRM.ps1 {ipaddress} https` + + >These commands create a test certificate by using + **MakeCert.exe**, use the certificate to create + an HTTPS WinRM listener, and open port + 5986 inbound for WinRM over HTTPS. The script also + increases the WinRM **MaxEnvelopeSizekb** setting. + By default on Windows Server this is 500 KB, + which can result in a "Request size exceeded the + configured MaxEnvelopeSize quota" error. + +### IIS configuration + +If you are deploying an ASP.NET app, make sure that you have ASP.NET 4.5 or ASP.NET 4.6 installed on each of your IIS target servers. For more information, see [this topic](https://www.asp.net/web-forms/overview/deployment/visual-studio-web-deployment/deploying-to-iis). + +If you are deploying an ASP.NET Core application to IIS target servers, follow the additional instructions in [this topic](https://docs.microsoft.com/en-us/aspnet/core/publishing/iis) to install .NET Core Windows Server Hosting Bundle. + +If you are deploying a Node application to IIS target servers, follow the instructions in [this topic](https://github.com/tjanczuk/iisnode) to install and configure IISnode on IIS servers. + +In this example, we will deploy to the Default Web Site on each of the servers. If you need to deploy to another website, make sure you configure this as well. + +### IIS WinRM extension + +Install the [IIS Web App Deployment Using WinRM](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.iiswebapp) +extension from Visual Studio Marketplace to your VSTS account or TFS. + +## Define and test your CD release process + +Continuous deployment (CD) means starting an automated release process whenever a new successful build is available. Your CD release process picks up the artifacts published by your CI build and then deploys them to your IIS servers. + +1. Do one of the following: + + * If you've just completed a CI build (see above) then, in the build's + **Summary** tab under **Deployments**, choose **Create release** followed by **Yes**. + This starts a new release definition that's automatically linked to the build definition. + + * Open the **Releases** tab of the **Build & Release** hub, open the **+** drop-down + in the list of release definitions, and choose **Create release definition**. + +1. Select the **Empty** template and click **Next**. + +1. In the **Artifacts** section, make sure your CI build definition that publishes the Web Deploy package is selected as the artifact source. + +1. Select the **Continuous deployment** check box, and then click **Create**. + +1. On the **Variables** tab of the environment in release definition, configure a variable named **WebServers** with the list of IIS servers as its value; for example `machine1,machine2,machine3`. + +1. Configure the following tasks in the environment: + + ![Windows Machine File Copy](../../tasks/deploy/_img/windows-machine-file-copy-icon.png) [Deploy: Windows Machine File Copy](../../tasks/deploy/windows-machine-file-copy.md) - Copy the Web Deploy package to the IIS servers. + + - **Source**: Select the Web deploy package (zip file) from the artifact source. + + - **Machines**: `$(WebServers)` + + - **Admin Login**: Enter the administrator credentials for the target servers. For workgroup-joined computers, use the format `.\username`. For domain-joined computers, use the format `domain\username`. + + - **Password**: Enter the administrator password for the target servers. + + - **Destination Folder**: Specify a folder on the target server where the files should be copied to.

    + + ![WinRM - IIS Web App Deployment](../../tasks/deploy/_img/iis-web-application-deployment-icon.png) [Deploy: WinRM - IIS Web App Deployment](https://github.com/Microsoft/vsts-rm-extensions/blob/master/Extensions/IISWebAppDeploy/Src/Tasks/IISWebAppDeploy/README_IISAppDeploy.md) - Deploy the package. + + - **Machines**: `$(WebServers)` + + - **Admin Login**: Enter the administrator credentials for target servers. For workgroup-joined computers, use the format `.\username`. For domain-joined computers, use the format `domain\username`. + + - **Password**: Enter the administrator password for target servers. + + - **Protocol**: Select `HTTP` or `HTTPS` (depending on how you configured the target machine earlier). Note that if the target machine is workgroup-joined, you must choose `HTTPS`. You can use HTTP only if the target machine is domain-joined and configured to use a FDQN. + + - **Web Deploy Package**: Fully qualified path of the zip file you copied to the target server in the previous task step. + + - **Website Name**: `Default Web Site` (or the name of the website if you configured a different one earlier).

    + +1. Edit the name of the release definition, click **Save**, and click **OK**. Note that the default environment is named Environment1, which you can edit by clicking directly on the name. + +You're now ready to create a release, which means to start the process of running the release definition with the artifacts produced by a specific build. This will result in deploying the build to IIS servers: + +1. Choose **+ Release** and select **Create Release**. + +1. Select the build you just completed in the highlighted drop-down list and choose **Create**. + +1. Choose the release link in the popup message. For example: "Release **Release-1** has been created". + +1. Open the **Logs** tab to watch the release console output. + +1. After the release is complete, navigate to your site running on the IIS servers, and verify its contents. + +## Q&A + + + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/cd/deploy-webdeploy-webapps.md b/docs/build-release/apps/cd/deploy-webdeploy-webapps.md new file mode 100644 index 00000000000..9369efafd0b --- /dev/null +++ b/docs/build-release/apps/cd/deploy-webdeploy-webapps.md @@ -0,0 +1,42 @@ +--- +ms.assetid: 449254BF-EAC1-466E-B10C-85C2DE086F30 +title: Deploy to Azure web app +description: Set up CD of an ASP.NET or Node.js web deploy package to Azure App Services from Release Management +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +ms.topic: get-started-article +--- + +# Deploy to Azure web app + +**VSTS | TFS 2017 Update 2** + +We'll show you how to set up continuous deployment of your ASP.NET or Node app to an Azure web app using +Visual Studio Team Services (VSTS) or Microsoft Team Foundation Server (TFS). You can use the steps in this quickstart +as long as your continuous integration process publishes a Web Deploy package. + +## Prerequisites + +Before you begin, you'll need a CI build that publishes your Web Deploy package. To set up CI for your specific type of app, see: + +* [Build your ASP.NET 4 app](../aspnet/build-aspnet-4.md) + +* [Build your ASP.NET Core app](../aspnet/build-aspnet-core.md) + +* [Build your Node app with Gulp](../nodejs/build-gulp.md) + +You'll also need an Azure web app where you will deploy the app. +If you don't have one already, create one now. If you need help, follow the +steps in [this example](../../apps/cd/azure/aspnet-core-to-azure-webapp.md#create-webapp-portal). + +[!INCLUDE [create-release](../_shared/create-release.md)] + +## Next steps + +* [Deploy to a staging slot and then swap to production](howto-webdeploy-webapps.md#swapslots) +* [Deploy multiple apps in the same release](howto-webdeploy-webapps.md#multipleapps) +* [Apply environment-specific configurations](howto-webdeploy-webapps.md#configenvir) +* [Deploy to a Government cloud instead of a public cloud](howto-webdeploy-webapps.md#govtcloud) diff --git a/docs/build-release/apps/cd/howto-webdeploy-iis-deploygroups.md b/docs/build-release/apps/cd/howto-webdeploy-iis-deploygroups.md new file mode 100644 index 00000000000..5e1aa31877a --- /dev/null +++ b/docs/build-release/apps/cd/howto-webdeploy-iis-deploygroups.md @@ -0,0 +1,87 @@ +--- +ms.assetid: 9FC7A7FC-0386-478A-BE1D-0A0B8104ED42 +title: How To Next Steps to an IIS Deployment Group +description: Next steps for deploying an app to IIS servers using Deployment Groups +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +--- + +# How To: Extend your deployments to IIS Deployment Groups + +You can quickly and easily deploy your ASP.NET or Node app to an IIS Deployment Group using +Visual Studio Team Services (VSTS) or Microsoft Team Foundation Server (TFS), +as demonstrated in [this example](deploy-webdeploy-iis-deploygroups.md). +In addition, you can extend your deployment in a range of ways +depending on your scenario and requirements. This topic shows you how to: + +* [Dynamically create and remove a deployment group](#depgroup) +* [Apply environment-specific configurations](#envirconfig) +* [Perform a safe rolling deployment](#rolling) +* [Deploy a database with your app](#database) + +## Prerequisites + +You should have worked through the example [CD to an IIS Deployment Group](deploy-webdeploy-iis-deploygroups.md) before you attempt any of these steps. +This ensures that you have the release definition, build artifacts, and websites required. + + +## Dynamically create and remove a deployment group + +You can create and remove deployment groups dynamically if you prefer by using +the [Azure Resource Group Deployment task](https://aka.ms/argtaskreadme) +to install the agent on the machines in a deployment group using ARM templates. +See [Provision deployment group agents](../../concepts/definitions/release/deployment-groups/howto-provision-deployment-group-agents.md). + + +## Apply environment-specific configurations + +If you deploy releases to multiple environments, you can substitute configuration settings in **Web.config** and other configuration files of your website using these steps: + +1. Define environment-specific configuration settings in the **Variables** tab of an environment in a release definition; for example, + ` = `. + +1. In the **IIS Web App Deploy** task, select the checkbox for **XML variable substitution** under **File Transforms and Variable Substitution Options**. + + > If you prefer to manage environment configuration settings in + your own database or Azure keyvault, add a task to the environment to read and emit those values using + `##vso[task.setvariable variable=connectionString;issecret=true]`. + + > At present, you cannot apply a different configuration to individual IIS servers. + + +## Perform a safe rolling deployment + +If your deployment group consists of many IIS target servers, you can deploy to a subset of servers at a time. +This ensures that your application is available to your customers at all times. +Simply select the **Deployment group phase** and use the slider to configure the **Maximum number of targets in parallel**. + +![Configuring safe rolling deployment for the proportion of environments to update in parallel](_img/howto-webdeploy-iis-deploygroups/safe-rolling-deployment.png) + + +## Deploy a database with your app + +To deploy a database with your app: + +1. Add both the IIS target servers and database servers to your deployment group. + Tag all the IIS servers as `web` and all database servers as `database`. + +1. Add two machine group phases to environments in the release definition, and a task in each phase as follows: + + **First [Run on deployment group phase](../../concepts/process/phases.md)** for configuration of web servers. + + - **Deployment group**: Select the deployment group you created in the [previous example](deploy-webdeploy-iis-deploygroups.md). + + - **Machine tags**: `web`

    + + Then add an **IIS Web App Deploy** task to this phase. + + **Second [Run on deployment group phase](../../concepts/process/phases.md)** for configuration of database servers. + + - **Deployment group**: Select the deployment group you created in the [previous example](deploy-webdeploy-iis-deploygroups.md). + + - **Machine tags**: `database`

    + + Then add a **SQL Server Database Deploy** task to this phase. diff --git a/docs/build-release/apps/cd/howto-webdeploy-webapps.md b/docs/build-release/apps/cd/howto-webdeploy-webapps.md new file mode 100644 index 00000000000..a99149ddb47 --- /dev/null +++ b/docs/build-release/apps/cd/howto-webdeploy-webapps.md @@ -0,0 +1,107 @@ +--- +ms.assetid: CB3939AB-87D4-4BDB-8531-06096FF230C6 +title: How To Next Steps to Azure App Services +description: Next steps for deploying an app to a Azure App Services from Release Management in VSTS or TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +--- + +# How To: Extend your deployments to Azure App Services + +You can quickly and easily deploy your ASP.NET or Node app to an Azure App Services website using +Visual Studio Team Services (VSTS) or Microsoft Team Foundation Server (TFS) 2017 Update 2, +as demonstrated in [this example](deploy-webdeploy-webapps.md). In addition, you can extend your deployment in a range of ways +depending on your scenario and requirements. This topic shows you how to: + +* [Deploy to a staging slot and then swap to production](#swapslots) +* [Deploy multiple apps in the same release](#multipleapps) +* [Apply environment-specific configurations](#configenvir) +* [Deploy to a Government cloud instead of a public cloud](#govtcloud) + +## Prerequisites + +You should have worked through the example [CD to Azure App Services](deploy-webdeploy-webapps.md) before you attempt any of these steps. +This ensures that you have the release definition, build artifacts, and website required. + + +## Deploy to a staging slot and then swap to production + +If you want to deploy to a staging slot in an Azure App Services website, and then swap the staging and production slots, perform these steps. + +1. Ensure that your Azure App Services plan is a standard or + premium level. This is required to configure deployment slots. + + ![Specifying the service plan for an Azure App Services website](_img/deployment-slots-webapps-03.png) + +1. Configure a **Staging** slot in the Azure App Services website. + + ![Configuring a staging slot in an Azure App Services website](_img/deployment-slots-webapps-04.png) + + You do not need to configure a **Production** slot because it is implicitly present in all Azure App Services websites. + + >For more information on configuring deployment slots, see + [Set up staging environments for web apps in Azure App Service](https://azure.microsoft.com/documentation/articles/web-sites-staged-publishing) + on the Azure website. + +1. Configure the tasks in the environment of the release definition as follows: + + ![Azure App Service Deploy](../../tasks/deploy/_img/azure-web-app-deployment-icon.png) [Deploy: Azure App Service Deploy](../../tasks/deploy/azure-app-service-deploy.md) - Deploy the app to Azure App Services. + + - **Azure Subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions + connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **App Service name**: Select your App Service. + + - **Deploy to slot**: `Checked`. + + - **Slot**: `Staging`

    + + ![Azure App Service Manage](../../tasks/deploy/_img/azure-app-service-manage.png) [Deploy: Azure App Service Manage](../../tasks/deploy/azure-app-service-manage.md) - Swap slots. + + - **Azure Subscription**: Select a connection from the list under **Available Azure Service Connections** or create a more restricted permissions + connection to your Azure subscription. For more details, see [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm). + + - **Action**: `Swap slots` + + - **App Service name**: Select your App Service. + + - **Resource group**: Select the resource group to which your App Service belongs. + + - **Source slot**: `Staging`

    + +You might also consider [Configuring Auto Swap](https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-staged-publishing#Auto-Swap) +for your Azure App Services web app to automatically swap the app into production after successful deployment. + + +## Deploy multiple apps in the same release + +If your CI build process builds multiple apps, you can deploy them in the same release. +To do this, configure a separate instance of the **Azure App Service Deploy** task for each app. In each instance of the task: + +* Specify a unique value for **App Service Name** + +* Specify the **Web Deploy Package** with a reference to a specific app. For example, replace the default value with a more specific value such as `$(build.stagingDirectory)\**\WebApplication1.zip` + + +## Apply environment-specific configurations + +If you deploy releases to multiple environments, you can substitute configuration settings in **Web.config** and other configuration files of your website using these steps: + +1. Define environment-specific configuration settings in the **Variables** tab of an environment in a release definition; for example, + `connectionString = `. + +1. In the **Azure App Service Deploy** task, select the check box for **XML variable substitution** under **File Transforms and Variable Substitution Options**. + This option is present only in version **3.\*** and above of the task. It is not yet available in TFS. + +> If you prefer to manage environment configuration settings in your own database or Azure keyvault, add a task to the environment to read and emit those values using `##vso[task.setvariable variable=connectionString;issecret=true]` + +For more details, see [Managing Configuration & App Settings for Multiple Environments in Your CD Pipeline](https://blogs.msdn.microsoft.com/visualstudioalm/2017/04/05/managing-configuration-app-settings-for-multiple-environments-in-your-cd-pipeline/). + + +## Deploy to a Government cloud instead of a public cloud + +Do this by creating a suitable service endpoint for your Azure Government Cloud subscription. +See [Azure Government Cloud deployments](../../concepts/library/government-cloud.md) for details. diff --git a/docs/build-release/apps/cd/provision-vm-in-vmware.md b/docs/build-release/apps/cd/provision-vm-in-vmware.md new file mode 100644 index 00000000000..3da4d2c048b --- /dev/null +++ b/docs/build-release/apps/cd/provision-vm-in-vmware.md @@ -0,0 +1,202 @@ +--- +ms.assetid: 1A6903E4-B0B3-426E-9E07-67492ADB1F42 +title: Provision and manage virtual machines in VMware vCenter Server +description: Provision and manage VMs in VMware vCenter Server from Release Management in VSTS or TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Provision and manage virtual machines in VMware + +[!INCLUDE [version-rm-dev14](../../_shared/version-rm-dev14.md)] + +This example shows how you can integrate **VMware +vCenter Server** with Release Management in Visual +Studio Team Services (VSTS) or Team Foundation Server (TFS). +You can provision and manage virtual machines in vCenter +and then deploy your apps to them. + +## Prepare + +You will need a minimum of two machines - a **target server** +or virtual machine to deploy to, and an **agent machine** that +drives the deployment. You may have multiple target +servers depending on how many nodes you want to +deploy to. However, you only need one agent +machine to drive the deployment. + +1. The extension uses the VMware vSphere Management +SDK to call VMware API functions that access vSphere +web services. To install and configure the SDK on +the agent machine: + +* Download and install the latest + version of the Java Runtime Environment from + [this location](http://aka.ms/downloadjre). + +* Go to [this location](http://aka.ms/vspheresdk) + and sign in with your existing credentials or register + with the website. Then download the **vSphere 6.0 + Management SDK**. + +* Create a directory for the vSphere Management SDK + such as **C:\vSphereSDK**. Do not include spaces in + the directory names to avoid issues with some of the + batch and script files included in the SDK. + +* Unpack the vSphere Management SDK into the + new folder you just created. + +* Add the full path and name of the precompiled + VMware Java SDK file **vim25.jar** to the machine's + CLASSPATH environment variable. If you used the path and name + **C:\vSphereSDK** for the SDK files, as shown above, the full + path will be: + `C:\vSphereSDK\SDK\vsphere-ws\java\JAXWS\lib\vim25.jar`

    + +1. Install an agent on the **agent machine**: + + * [Deploy an agent on Windows](../../actions/agents/v2-windows.md) + * [Deploy an agent on OSX](../../actions/agents/v2-osx.md) + * [Deploy an agent on Linux](../../actions/agents/v2-linux.md)

    + +1. Install the VMware extension + from Visual Studio Marketplace into your server or account. + + * If you are using **Visual Studio Team Services**, + install the extension from [this location](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.vmwareapp) + in Visual Studio Marketplace. + * If you are using **Team Foundation Server**, download + the extension from [this location](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.vmwareapp) + in Visual Studio Marketplace, upload it to your + Team Foundation Server, and install it.

    + +1. Follow these steps to create a vCenter Server Service + endpoint in your team project: + + * Open your VSTS or TFS team project in + your web browser. Choose the **Settings** icon in the menu bar and select **Services**. + + * In the **Services** tab, choose **New Service Endpoint**, and select **VMware vCenter Server**. + + * In the **Add new VMware vCenter Server Connection** + dialog, enter the values required to connect to the + vCenter Server: + + - **Connection Name**: Enter a user-friendly name + for the service endpoint such as **Fabrikam vCenter**. + - **vCenter Server URL**: Enter the URL of the + vCenter server, in the form `https://machine.domain.com/`. + Note that only **HTTPS** connections are supported. + - **Username** and **Password**: Enter the credentials + required to connect to the vCenter Server. + Username formats such as **username**, **domain\\username**, + **machine-name\\username**, and **.\\username** are supported. + UPN formats such as **username@domain.com** and built-in system + accounts such as **NT Authority\\System** are not supported.

    + +1. Choose **OK** to save the settings and create the connection. + +## Deploy + +1. Open the **Releases** tab of the **Build & Release** hub and choose the + "**+**" icon to create a new release definition. + +1. In the **Create release definition** dialog, + select the **Empty** template and choose **Next**. + +1. In the next page, select **Choose Later** and then choose **Create**. + This creates a new release definition with one + default environment and no linked artifacts. + +1. Choose **+ Add tasks** and add a **VMware Resource + Deployment** task from the **Deploy** section of the + **Task catalog** dialog to the environment. + +1. To configure the **VMware Resource Deployment** task + to take snapshot of virtual machines, or to revert + or delete them, use these settings: + + ![VMWare Resource Deployment](_img/vmware/vmware-icon.png) [VMWare Resource Deployment](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.vmwareapp) - Connect to a VMware vCenter Server, easily provision VMs, and perform actions on them. + + - **VMware Service Connection**: Select the VMware vCenter Server connection you created earlier. + + - **Action**: Select one of the actions: **Take Snapshot of Virtual Machines**, **Revert Snapshot of Virtual Machines**, or **Delete Snapshot of Virtual Machines**. + + - **Virtual Machine Names**: Enter the names of one or more virtual machines. Separate multiple names with a comma; for example, `VM1,VM2,VM3` + + - **Datacenter**: Enter the name of the datacenter where the virtual machines will be created. + + - **Snapshot Name**: Enter the name of the snapshot. This snapshot must exist if you use the revert or delete action. + + - **Host Name**: Depending on the option you selected for the compute resource type, enter the name of the host, cluster, or resource pool. + + - **Datastore**: Enter the name of the datastore that will hold the virtual machines' configuration and disk files. + + - **Description**: Optional. Enter a description for the **Take Snapshot of Virtual Machines** action, such as `$(Build.DefinitionName).$(Build.BuildNumber)`. This can be used to track the execution of the build or release that created the snapshot. + + - **Skip Certificate Authority Check**: If the vCenter Server's certificate is self-signed, select this option to skip the validation of the certificate by a trusted certificate authority.

    + + >To verify if a self-signed certificate is installed + on the vCenter Server, open the VMware vSphere Web + Client in your browser and check for a certificate + error page. The vSphere Web Client URL will be + of the form `https://machine.domain/vsphere-client/`. + Good practice guidance for vCenter Server certificates + can be found in the [VMWare Knowledge Base](http://aka.ms/vcentercertificate) + (article 2057223). + +1. To configure the **VMware Resource Deployment** task + to provision a new virtual machine from a template, use these settings: + + ![VMWare Resource Deployment](_img/vmware/vmware-icon.png) [VMWare Resource Deployment](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.vmwareapp) - Connect to a VMware vCenter Server, easily provision VMs, and perform actions on them. + + - **VMware Service Connection**: Select the VMware vCenter Server connection you created earlier. + + - **Action**: `Deploy Virtual Machines using Template` + + - **Template**: The name of the template that will be used to create the virtual machines. The template must exist in the location you enter for the **Datacenter** parameter. + + - **Virtual Machine Names**: Enter the names of one or more virtual machines. Separate multiple names with a comma; for example, `VM1,VM2,VM3` + + - **Datacenter**: Enter the name of the datacenter where the virtual machines will be created. + + - **Compute Resource Type**: Select the type of hosting for the virtual machines: `VMware ESXi Host`, `Cluster`, or `Resource Pool` + + - **Host Name**: Depending on the option you selected for the compute resource type, enter the name of the host, cluster, or resource pool. + + - **Datastore**: Enter the name of the datastore that will hold the virtual machines' configuration and disk files. + + - **Description**: Optional. Enter a description to identify the deployment. + + - **Skip Certificate Authority Check**: If the vCenter Server's certificate is self-signed, select this option to skip the validation of the certificate by a trusted certificate authority. See the note for the previous step to check for the presence of a self-signed certificate.

    + +1. You can now add other tasks to the environment, + such as **PowerShell on Target Machines**, and then + deploy to the newly provisioned machines. + + > In the future we plan for the **VMware Resource + Deployment** task to provide an output variable that you + set in the task and then use as input to subsequent + tasks. Until then, if you want to run additional tasks, + you'll need to specify the fully-qualified domain + names of the virtual machines that are provisioned + in VMware. + +1. Type a name for the new release definition and save it. + +1. Create a new release from the release definition + and deploy it to the environment. + +## Q&A + + + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-create-checkpoint.png b/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-create-checkpoint.png new file mode 100644 index 00000000000..387d9d4b49b Binary files /dev/null and b/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-create-checkpoint.png differ diff --git a/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-create-vm-using-template.png b/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-create-vm-using-template.png new file mode 100644 index 00000000000..b8715a23116 Binary files /dev/null and b/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-create-vm-using-template.png differ diff --git a/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-icon.png b/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-icon.png new file mode 100644 index 00000000000..9e62a59b93f Binary files /dev/null and b/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-icon.png differ diff --git a/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-start-vm.png b/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-start-vm.png new file mode 100644 index 00000000000..9c705f6d516 Binary files /dev/null and b/docs/build-release/apps/cd/scvmm/_img/scvmm/scvmm-start-vm.png differ diff --git a/docs/build-release/apps/cd/scvmm/configure-scvmm.md b/docs/build-release/apps/cd/scvmm/configure-scvmm.md new file mode 100644 index 00000000000..22e705b3df0 --- /dev/null +++ b/docs/build-release/apps/cd/scvmm/configure-scvmm.md @@ -0,0 +1,112 @@ +--- +ms.assetid: 1ACB0A12-84D5-4859-989C-723986F8FEF2 +title: Configure and deploy with System Center Virtual Machine Manager (SCVMM) +description: Configure and deploy with SCVMM using Microsoft Release Management in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Configure and manage VMs with System Center Virtual Machine Manager (SCVMM) + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +This example shows how you can integrate **System +Center Virtual Machine Manager** (SCVMM) with Release Management in +VSTS or Team Foundation Server. + +## Prepare + +You need SCVMM. + +1. Install the **Virtual Machine Manager** (VMM) console by + following [these instructions](https://technet.microsoft.com/library/gg610627.aspx). + Supported version: [System Center 2012 R2 Virtual Machine Manager](https://technet.microsoft.com/library/hh546785.aspx). + +1. Install an agent on the **agent machine**: + + * [Deploy an agent on Windows](../../../actions/agents/v2-windows.md) + * [Deploy an agent on OSX](../../../actions/agents/v2-osx.md) + * [Deploy an agent on Linux](../../../actions/agents/v2-linux.md)

    + +1. Install the **System Center Virtual Machine Manager (SCVMM)** extension + from Visual Studio Marketplace into your server or account: + + * If you are using **Visual Studio Team Services**, + install the extension from [this location](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.scvmmapp) + in Visual Studio Marketplace. + * If you are using **Team Foundation Server**, download + the extension from [this location](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.scvmmapp) + in Visual Studio Marketplace, upload it to your + Team Foundation Server, and install it.

    + +1. Create an SCVMM service endpoint in your team project: + + * Open your VSTS or TFS team project in + your web browser. Choose the **Settings** icon in the menu bar and select **Services**. + + * In the **Services** tab, choose **New Service Endpoint**, and select **SCVMM**. + + * In the **Add new SCVMM Connection** + dialog, enter the values required to connect to the + SCVMM Server: + + - **Connection Name**: Enter a user-friendly name + for the service endpoint such as **MySCVMMServer**. + - **SCVMM Server Name**: Enter the fully qualified domain + name and port number of the SCVMM server, in the form **machine.domain.com:port**. + - **Username** and **Password**: Enter the credentials + required to connect to the vCenter Server. Username formats such as **username**, **domain\username**, + **machine-name\\username**, and **.\\username** are supported. + UPN formats such as **username@domain.com** and built-in system + accounts such as **NT Authority\\System** are not supported.

    + +1. Choose **OK** to save the settings and create the connection. + +## Deploy + +1. Open the **Releases** tab of the **Build & Release** hub and choose the + "**+**" icon to create a new release definition. + +1. In the **Create release definition** dialog, + select the **Empty** template and choose **Next**. + +1. In the next page, select **Choose Later** and then choose **Create**. + This creates a new release definition with one + default environment and no linked artifacts. + +1. Choose **+ Add tasks** and add an **SCVMM** task + from the **Deploy** section of the **Task catalog** + dialog to the environment. + +1. You can select the action from the list of actions available in the task. + See [SCVMM task actions](manage-vms-using-scvmm.md) for details. + +1. You can now add other tasks to the environment, + such as **PowerShell on Target Machines** and then + deploy to the newly provisioned machines. + + > In the future, we plan for the **SCVMM** task + to provide an output variable that you + set in the task and then use as input to subsequent + tasks. Until then, if you want to run additional tasks, + you must specify the fully-qualified domain + names of the virtual machines that are provisioned + in SCVMM. + +1. Type a name for the new release definition and save it. + +1. Create a new release from the release definition + and deploy it to the environment. + +## Q&A + + + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/cd/scvmm/manage-vms-using-scvmm.md b/docs/build-release/apps/cd/scvmm/manage-vms-using-scvmm.md new file mode 100644 index 00000000000..62fc3fdc143 --- /dev/null +++ b/docs/build-release/apps/cd/scvmm/manage-vms-using-scvmm.md @@ -0,0 +1,121 @@ +--- +ms.assetid: A14C4E98-EF76-400C-A728-292E1D75ECFD +title: Provision and manage virtual machines in SCVMM +description: Provision and manage VMs in System Center Virtual Machine Manager (SCVMM) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Task actions for managing VMs using System Center Virtual Machine Manager (SCVMM) + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +You can manage your virtual machines using the System Center Virtual +Machine Manager (**SCVMM**) task by performing actions such as creating, restoring, and +deleting checkpoints; starting and stopping virtual machines; creating +new virtual machines using templates; and running custom PowerShell scripts for SCVMM. + +You must install the **System Center Virtual Machine Manager (SCVMM)** +extension from Visual Studio Marketplace into your server or account. +For more information, see [Configure and deploy with SCVMM](configure-scvmm.md). + +## SCVMM task actions + +The **SCVMM** task can be used to perform the a range of actions: + +* **Create, restore, and delete checkpoints**. Use the following task parameters: + + - **SCVMM Service Connection**: Select a SCVMM service connection you already defined, or create a new one. + + - **Action**: Select one of the checkpoint actions **Create Checkpoint**, **Restore Checkpoint**, or **Delete Checkpoint**. + + - **Virtual Machines Name**: Enter the name of the virtual machine, or a comma-separated list of the virtual machine names. Example `FabrikamDevVM,FabrikamTestVM` + + - **Checkpoint Name**: For the **Create CheckPoint** action, enter the name of the checkpoint that will be applied to the virtual machines. For the **Delete Checkpoint** or **Restore Checkpoint** action, enter the name of an existing checkpoint. + + - **Description for Checkpoint**: Enter a description for the new checkpoint when creating it. + + - **Select VMs From**: Choose either **Cloud** or **Host** to select the set of virtual machines to which the action will be applied. + + - **Host Name** or **Cloud Name**: Depending on the previous selection, enter either a cloud name or a host machine name.

    + + ![Task configuration for create, restore, and delete checkpoint](_img/scvmm/scvmm-create-checkpoint.png) + +* **Create new virtual machines using a template**. Use the following task parameters: + + - **SCVMM Service Connection**: Select a SCVMM service connection you already defined, or create a new one. + + - **Action**: Select **New Virtual Machine using Template**. + + - **Virtual Machines Name**: Enter the name of the virtual machine, or a comma-separated list of the virtual machine names. Example `FabrikamDevVM,FabrikamTestVM` + + - **Virtual Machine Template Name**: To create virtual machines using a template, enter the template name. + + - **Deploy the VMs to**: Choose either **Cloud** or **Host** to select the set of virtual machines to which the action will be applied. + + - **Host Name** or **Cloud Name**: Depending on the previous selection, enter either a cloud name or a host machine name. + + - **Placement path for VM**: If you selected **Host** as the deployment target, enter the path to be used during virtual machine placement. Example `C:\ProgramData\Microsoft\Windows\Hyper-V` + + - **Additional Arguments**: Enter any arguments to pass to the virtual machine creation template. Example `-StartVM -StartAction NeverAutoTurnOnVM -StopAction SaveVM` + + - **Wait Time**: The time to wait for the virtual machine to reach ready state. + + - **Set Computer name as defined in VM template**: Set (tick) this option to set the computer name to that defined in the template (if provided). If not set, the computer name will be that specified for the **Virtual Machine Names** parameter.

    + + ![Task configuration for create new virtual machines using a template](_img/scvmm/scvmm-create-vm-using-template.png) + +* **Start and stop virtual machines**. Use the following task parameters: + + - **SCVMM Service Connection**: Select a SCVMM service connection you already defined, or create a new one. + + - **Action**: Select **Start Virtual Machine** or **Stop Virtual Machine**. + + - **Virtual Machines Name**: Enter the name of the virtual machine, or a comma-separated list of the virtual machine names. Example `FabrikamDevVM,FabrikamTestVM` + + - **Select VMs From**: Choose either **Cloud** or **Host** to select the set of virtual machines to which the action will be applied. + + - **Host Name** or **Cloud Name**: Depending on the previous selection, enter either a cloud name or a host machine name. + + - **Wait Time**: The time to wait for the virtual machine to reach ready state.

    + + ![Task configuration for start and stop virtual machines](_img/scvmm/scvmm-start-vm.png) + +* **Run custom PowerShell scripts for SCVMM**. Use the following task parameters: + + - **SCVMM Service Connection**: Select a SCVMM service connection you already defined, or create a new one. + + - **Action**: Select **Run PowerShell Script for SCVMM**. + + - **Script Path**: Enter the path of the PowerShell script to execute. It must be a fully-qualified path, or a path relative to the default working directory. + + - **Script Arguments**: Enter any arguments to be passed to the PowerShell script. You can use either ordinal parameters or named parameters. + + - **Working folder**: Specify the current working directory for the script when it runs. The default if not provided is the folder containing the script. + +## Next + +You can now add other tasks to the environment, such as **PowerShell on Target Machines**, +and then deploy to the newly provisioned machines. +For more information, see [Configure and deploy with SCVMM](configure-scvmm.md). + + > In the future, we plan for the **SCVMM** task + to provide an output variable that you + set in the task and then use as input to subsequent + tasks. Until then, if you want to run additional tasks, + you must specify the fully-qualified domain + names of the virtual machines that are provisioned + in SCVMM. + +## Q&A + + + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/apps/index.md b/docs/build-release/apps/index.md new file mode 100644 index 00000000000..720672a4f9b --- /dev/null +++ b/docs/build-release/apps/index.md @@ -0,0 +1,118 @@ +--- +title: Build and deploy your app - examples | VSTS & TFS +description: Build and deploy your app examples with VSTS and Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 955133FD-76B4-4D63-AB46-9043D96F8A9D +ms.manager: douge +ms.author: alewis +ms.date: 08/22/2016 +--- + +# Build and deploy your app + +[!INCLUDE [temp](../_shared/version.md)] + +This is a selection of the growing range of examples we are creating +to demonstrate the many ways you can build and deploy +a range of application types, code languages, development +environments, and target platforms as part of a +continuous integration (CI) and continuous deployment (CD) process. + +

    +

    Build your app

    +
      +
    • [ASP.NET 4 apps](aspnet/build-aspnet-4.md)
    • +
    • [ASP.NET Core apps](aspnet/build-aspnet-core.md)
    • +
    • [Java apps with Maven](../apps/java/build-maven.md)
    • +
    • [Node apps](nodejs/build-gulp.md)
    • +
    • [Cloud Services apps](aspnet/build-aspnet-cloudservice.md)
    • +
    • [SQL database DACPAC](aspnet/build-aspnet-dacpac.md)
    • +
    • [C++ apps for Windows](windows/cpp.md)
    • +
    • [Universal Windows Platform apps](windows/universal.md)
    • +
    +
    + +
    +

    Build mobile apps

    +
      +
    • [Xamarin mobile apps](mobile/xamarin.md)
    • +
    • [Xcode mobile projects](mobile/xcode-ios.md)
    • +
    • [Simple, secure CI app signing](mobile/secure-certs.md)
    • +
    +
    + +
    + +
    +

    Deploy your app

    +
      +
    • [Azure web apps](cd/deploy-webdeploy-webapps.md)
    • +
    • [Azure cloud services](cd/deploy-cloudservice-cloudservice.md)
    • +
    • [Azure SQL database](cd/deploy-dacpac-sqlpackage.md)
    • +
    • [Azure SQL database scripted](cd/deploy-database-sqlscripts.md)
    • +
    • [Azure Container Service (Kubernetes)](cd/azure/deploy-container-kubernetes.md)
    • +
    • [IIS using deployment groups](cd/deploy-webdeploy-iis-deploygroups.md)
    • +
    • [IIS using Win RM](cd/deploy-webdeploy-iis-winrm.md)
    • +
    +
    + +
    +

    Provision and manage virtual machines

    +
      +
    • [Azure VM](cd/azure/deploy-provision-azure-vm.md)
    • +
    • [VM using RM template](cd/azure/build-azure-vm-template.md)
    • +
    • [DevTest Labs](cd/azure/deploy-provision-devtest-lab.md)
    • +
    • [SCVMM](cd/scvmm/configure-scvmm.md)
    • +
    • [VMWare](cd/provision-vm-in-vmware.md)
    • +
    +
    + +
    + +
    +

    Azure Continuous Delivery preview

    +
      +
    +
    + +
    +

    Azure Government Clouds

    +
      +
    • [Deploy to Azure Government Cloud](../concepts/library/government-cloud.md)
    • +
    +
    + +
    + +
    +

    More examples

    +
      +
    • [Continuous integration, test, and deployment](../test/example-continuous-testing.md)
    • +
    • [Continuous integration for a Service Fabric app using VSTS](https://azure.microsoft.com/en-us/documentation/articles/service-fabric-set-up-continuous-integration/)
    • +
    +
    + +
    + +## Related blog posts + +* [Visual Studio devops Blog: Deploying an Azure Red Hat Linux VM Running Apache Tomcat](https://blogs.msdn.microsoft.com/visualstudioalm/2016/08/18/deploying-an-azure-red-hat-linux-vm-running-apache-tomcat-for-use-with-visual-studio-team-services-and-team-foundation-server) + +* [Visual Studio devops Blog: Deploying an Azure Ubuntu Linux VM Running Apache Tomcat ](https://blogs.msdn.microsoft.com/visualstudioalm/2016/08/18/deploying-an-azure-ubuntu-linux-vm-running-apache-tomcat-for-use-with-visual-studio-team-services-and-team-foundation-server) + +## Related topics + +* [Azure App Service Deployment Overview](https://azure.microsoft.com/documentation/articles/app-service-deployment-readme/) + +* [Using the Azure Portal to deploy and manage your Azure resources](https://azure.microsoft.com/en-gb/documentation/articles/resource-group-portal/) + +## Q&A + + + +[!INCLUDE [temp](../_shared/qa-agents.md)] + +[!INCLUDE [temp](../_shared/qa-versions.md)] + + diff --git a/docs/build-release/apps/java/build-maven.md b/docs/build-release/apps/java/build-maven.md new file mode 100644 index 00000000000..ca8da171ad3 --- /dev/null +++ b/docs/build-release/apps/java/build-maven.md @@ -0,0 +1,104 @@ +--- +title: CI build for a Java app with Maven +description: Define a continuous integration (CI) build process for your Java app with Maven in VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.topic: get-started-article +ms.assetid: C339FAF9-A960-4A3A-9A8A-ADCD39C2703D +ms.manager: douge +ms.author: alewis +ms.date: 08/28/2017 +--- + +# Build your Java app with Maven + +**VSTS | TFS 2017 Update 2** + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly customizable continuous integration (CI) process to automatically build your Java web app whenever your team pushes or checks in code. In this quickstart you learn how to define your CI process. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +* While the simplest way to try this quickstart is to use a VSTS account, you can also use a TFS server instead of a VSTS account. Make sure that you have [configured a build agent](../../actions/agents/v2-windows.md) for your team project with java, maven, and other necessary software installed. + +## Get sample app code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +``` +https://github.com/Adventworks/java-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +The sample app in this repository is a Java servlet. Tests for the applications are written using Junit framework. A Maven POM file is used to build, test, and package the application into a web archive (war) file. + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, search for `java`, select **Maven**, and then click **Apply**. + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**: + + * **VSTS:** Select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. + + * **TFS:** Select a queue that includes a [Windows build agent](../../actions/agents/v2-windows.md). + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + +## View the build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next steps + +[!INCLUDE [include](../_shared/ci-web-app-next-steps.md)] diff --git a/docs/build-release/apps/jenkins/build-deploy-jenkins.md b/docs/build-release/apps/jenkins/build-deploy-jenkins.md new file mode 100644 index 00000000000..f4b11a8e5ad --- /dev/null +++ b/docs/build-release/apps/jenkins/build-deploy-jenkins.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/en-us/azure/virtual-machines/linux/tutorial-build-deploy-jenkins +--- diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-1.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-1.png new file mode 100644 index 00000000000..05258984c34 Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-1.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-10.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-10.png new file mode 100644 index 00000000000..c4165a7b6f2 Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-10.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-11.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-11.png new file mode 100644 index 00000000000..be44e38bfad Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-11.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-2.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-2.png new file mode 100644 index 00000000000..05b3cfdf202 Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-2.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-3.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-3.png new file mode 100644 index 00000000000..0816b2068ea Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-3.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-4.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-4.png new file mode 100644 index 00000000000..319332b2531 Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-4.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-5.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-5.png new file mode 100644 index 00000000000..565a364211c Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-5.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-6.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-6.png new file mode 100644 index 00000000000..98fd7550e84 Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-6.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-7.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-7.png new file mode 100644 index 00000000000..b68d10f1e1a Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-7.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-8.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-8.png new file mode 100644 index 00000000000..75d37460e9f Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-8.png differ diff --git a/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-9.png b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-9.png new file mode 100644 index 00000000000..a313a56a856 Binary files /dev/null and b/docs/build-release/apps/mobile/_img/secure-certs/secure-certs-9.png differ diff --git a/docs/build-release/apps/mobile/_img/xcode-ios/xcode-1.png b/docs/build-release/apps/mobile/_img/xcode-ios/xcode-1.png new file mode 100644 index 00000000000..9b5c4f31453 Binary files /dev/null and b/docs/build-release/apps/mobile/_img/xcode-ios/xcode-1.png differ diff --git a/docs/build-release/apps/mobile/_img/xcode-ios/xcode-2.png b/docs/build-release/apps/mobile/_img/xcode-ios/xcode-2.png new file mode 100644 index 00000000000..b41e7d2dc08 Binary files /dev/null and b/docs/build-release/apps/mobile/_img/xcode-ios/xcode-2.png differ diff --git a/docs/build-release/apps/mobile/_img/xcode-ios/xcode-3.png b/docs/build-release/apps/mobile/_img/xcode-ios/xcode-3.png new file mode 100644 index 00000000000..a85f66330a5 Binary files /dev/null and b/docs/build-release/apps/mobile/_img/xcode-ios/xcode-3.png differ diff --git a/docs/build-release/apps/mobile/_shared/xamarin-license-credential-arguments.md b/docs/build-release/apps/mobile/_shared/xamarin-license-credential-arguments.md new file mode 100644 index 00000000000..23fce1c27cb --- /dev/null +++ b/docs/build-release/apps/mobile/_shared/xamarin-license-credential-arguments.md @@ -0,0 +1,2 @@ +
  • Email: `$(xamarin.email)`
  • +
  • Password: `$(xamarin.password)`
  • diff --git a/docs/build-release/apps/mobile/secure-certs.md b/docs/build-release/apps/mobile/secure-certs.md new file mode 100644 index 00000000000..772ac5e0f37 --- /dev/null +++ b/docs/build-release/apps/mobile/secure-certs.md @@ -0,0 +1,229 @@ +--- +title: Simple, Secure CI App Signing +description: Simple, Secure CI App Signing Using VSTS or Team Foundation Services 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: ed39a1b4-bce0-416e-b3a2-253b21722b02 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Sign your Xcode app + +**VSTS | TFS 2017 Update 2** + +> **Notice**: Apple's WWDR certificate expired on Feb 14th and as a result you may experience signing failures if you have not updated the cert and **removed the old one**. Follow the steps outlined by Apple under [What should I do if Xcode doesn’t recognize my distribution certificate?](https://developer.apple.com/support/certificates/expiration/) to resolve the problem. Note that this also affects development certs despite the title. + +When developing an app for iOS or Android either natively or using a cross-platform solution like Cordova you will eventually need to tackle the problem of managing signing certificates and (in the case of iOS) [Mobile Provisioning Profiles](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/Introduction/Introduction.html#//apple_ref/doc/uid/TP40013839). This article will highlight some features to help you manage and secure them for your app. + +> **Troubleshooting Tip**: When building on a Mac (Xcode native, Cordova iOS, Xamarin iOS) you should either setup the cross-platform agent as a launch agent (./svc.sh install agent) or run it as an interactive process (node agent/vsoagent.js). + +This article currently covers: + +- [Using a certificate and mobile provisioning file in your iOS or Xcode build](#iosfile) +- [Using installed signing identities and mobile provisioning profiles in your iOS or Xcode build](#iosinstall) +- [Building Android native and Cordova Android projects](#android) + + +## Using a Certificate and Mobile Provisioning File in Your iOS or Xcode Build + +1. After creating your development and/or distribution signing certificate, export it to a .p12 file using either Keychain Access or Xcode + 1. To export using Xcode, first go to Xcode > Preferences... > Accounts and select your Apple Developer account + 2. Click "View Details..." and then right click on the Signing Identity you wish to export, and click "Export..." + 3. Enter a filename and password. Take note of the password as we will need this later. + + ![Xcode Export Cert](_img/secure-certs/secure-certs-1.png) + Alternatively you can follow a similar process using the "Keychain Access" app on OSX or even generate a signing certificate on Windows. Use the procedure [described in this article](http://docs.build.phonegap.com/en_US/signing_signing-ios.md.html#_windows_users) if you would prefer to head this direction instead. + +2. Next, get a copy of the provisioning profile you want to use. + + 1. You can simply go to the Apple Developer portal and download your mobile provisioning profile from there but you can also use Xcode to access one installed on your machine. + 2. First go to the same screen you used to get the .p12 file above + 3. Next, right click the provisioning profile you want and select "Show in Finder" + 4. Copy the file highlighted to another location and it a descriptive filename + ![Xcode Show in Finder](_img/secure-certs/secure-certs-2.png) + +3. At this point you can opt to add these two files directly to source control or add an extra layer of security by encrypting them first. **See the next section for details on this step.** + +4. Next, go to VSO / TFS and open up your Xcode or Cordova build definition and go to the **Variables** tab. Here we will enter password for the .p12 file: + - **P12_PWD**: Password to the unencrypted .p12 file. *Be sure to click the "lock" icon.* This will secure your password and obscure it in all logs. + ![Xcode Build settings](_img/secure-certs/secure-certs-10.png) + +5. Finally, we'll update our Xcode Build or Cordova Build step with references to these two files. The build step will automatically determine the correct "signing identity" based on the contents of the .p12, create a temporary keychain with the .p12 in it and use that exclusively for this build, install the mobile provisioning profile, determine the correct UUID based on the contents of the .mobileprovision profile, and then clean everything up afterwards. + + Enter the following values under the **Signing & Provisioning** category for the Xcode Build task or the **iOS** category in the Cordova Build task: + + - **Override Using**: File Contents + - **P12 Certificate File**: Path to the .p12 file in the repository + - **P12 Password**: $(P12_PWD) + - **Provisioning Profile File**: Path to the .mobileprovision file in the repository + - **Remove Profile After Build**: Checked if you want the mobileprovision profile to be removed from the system after the build. Only check this if you will have one agent on the system running this build as it is installed in a global location. + + ![Xcode Build settings](_img/secure-certs/secure-certs-11.png) + +You are now all set! Any build agent that is running will now be able to build your app without any cert management on the build machine itself!! Simply repeat the process of adding different certificates and provisioning profiles to your source repo to enable separate dev, beta (ad hoc), and distribution build. + +In the next section we'll cover how to add another layer of security by encrypting these files. + +### Optional: Using an Encrypted .p12 and .mobileprovision File +You can add an extra layer of security by to your project by encrypting your .p12 and .mobileprovision files so that only those that have been given the appropriate credentials have permissions to use them. The "Decrypt File" task makes this easy to setup in your build task. + +1. First, encrypt your files. + 0. Open the Terminal app on your Mac + 0. Change to the folder containing your .p12 file and .mobileprovision file. + 0. Type the following: + ``` + openssl des3 -in iphonedeveloper.p12 -out iphonedeveloper.p12.enc + ``` + substituting des3 for any encryption cypher you'd like to use and the appropriate input and output file names. + 0. Enter a passphrase to encrypt the certificate when prompted and note this down as we will use it later. + +2. Next, add these two files to source control (the encrypted .p12 and .mobileprovision files). This is secure particularly if you are using a private repository since a malicious user would need access to the repository, the encryption passphrase, and the P12 passphrase to be able to use your information without permission. Remove any unencrypted copies if present. + +3. Now we'll set up our build definition to decrypt the files at build time. + + 1. Open up your Xcode or Cordova build definition and go to the **Variables** tab and enter the following: + - **P12**: Path to your encrypted .p12 file in source control. + - **P12_PWD**: Password to the unencrypted .p12 file. *Be sure to click the "lock" icon.* This will secure your password and obscure it in all logs. + - **MOB_PROV**: Path to your encrypted mobile provisioning profile. + - **ENC_PWD**: The passphrase you used to encrypt the .p12 and .mobileprovision files. If you used two different passphrase you'll need two variables. Again, *be sure to click the "lock" icon.* + ![Variables](_img/secure-certs/secure-certs-3.png) + + 2. Under the **Build** tab in your build definition, add two **Decrypt File (OpenSSL)** steps from the **Utility** category and move these to the top of your build definition. + + 3. Now, enter the proper information using the variables we created above to decrypt the two files to a static filename. + - **Cypher**: The cypher you specified while encrypting. (Ex: des3) + - **Encrypted File**: $(P12) for one step and $(MOB_PROV) for the other + - **Passphrase**: $(ENC_PWD) + - **Decrypted File Path**: _build.p12 for one step and _build.mobileprovision for the other + ![Decrypt File settings](_img/secure-certs/secure-certs-4.png) + +4. Finally, we'll just update the Xcode Build step we setup before to reference the decrypted files. + + - **Override Using**: File Contents + - **P12 Certificate File**: _build.p12 + - **P12 Password**: $(P12_PWD) + - **Provisioning Profile File**: _build.mobileprovision + - **Remove Profile After Build**: Checked if you want the mobileprovision profile to be removed from the system after the build. Only check this if you will have one agent on the system running this build as it is installed in a global location. + ![Xcode Build settings](_img/secure-certs/secure-certs-5.png) + + You are now all set! Any build agent that is running will now be able to securely build your app without any cert management on the build machine itself!! Simply repeat the process of adding different certificates and provisioning profiles to your source repo to enable separate dev, beta (ad hoc), and distribution build. + + +## Using Installed Signing Identities and Mobile Provisioning Profiles in Your iOS or Xcode Build +If you would prefer to simply use a signing identitry and provisioning profile you have installed on your Mac, you may do this as well and there are some features that can help deal with common pitfalls. + +While you can just allow the build to attempt to auto-match or use identities and profiles in your Xcode project, you can follow these steps to override the project get very specific about the exact identity you want to use. + +Follow these steps: + +0. Determine the full name of the identity and the UUID of the Mobile Provisioning Profile you wish to use. + 1. Find the full name of your signing identity by opening the Terminal app and type the following: + ``` + security find-identity -v -p codesigning + ``` + and you will see a list of signing identities in the form "iPhone Developer/Distribution: Developer Name (ID)". If the identity is invalid you will see something like (CSSMERR_TP_CERT_REVOKED) after the identity. + + 2. Take note of the identity you want to use including the ID as this string is truely unique. + + 3. Next, find the UUID for the Mobile Provisioning Profile you want to use by following these steps. + + 1. Open Xcode and go to Xcode > Preferences... > Accounts and select your Apple Developer account + + 2. Click "View Details..." and right click the provisioning profile you want and select "Show in Finder" + ![Xcode Show in Finder](_img/secure-certs/secure-certs-2.png) + + 4. The name of the file that is highlighted is the UUID of your provisioning profile. + +0. Now we'll update our Xcode Build or Cordova Build step with references to these two identifiers. Enter the following values under the **Signing & Provisioning** category for the Xcode Build task or the **iOS** category in the Cordova Build task: + + - **Override Using**: Identifiers + - **Signing Identntiy**: Full signing identity you found using the security command above + - **Provisioning Profile UUID**: UUID of the provisioning profile from the filename above + + +0. Next, if you are running the cross-platform agent as a launch agent, you will need to set up the build to unlock the default keychain. + + 1. Go to the **Variables** tab and enter the following: + + - **KEYCHAIN_PWD**: Password to your default keychain. This is normally the password for the user that is starting the cross-platform agent. *Be sure to click the "lock" icon.* + + + 2. Update the Xcode Build step to unlock the keychain entering the following values under the **Signing & Provisioning** category for the Xcode Build task or the **iOS** category in the Cordova Build task: + + - **Unlock Default Keychain**: Checked + - **Default Keychain Password**: $(KEYCHAIN_PWD) + + +## Building Android Native and Cordova Android Projects +Managing Android signing is relatively simple. For native builds using Ant or Gradle, the [Android documentation](http://developer.android.com/tools/publishing/app-signing.html) on the topic largely covers what you need to know to generate and use a keystore file containing your signing cert. + +However, here are a few additional tips that can help you get your app up and running quickly while still keeping your signing key secure. + +Follow these steps: + +0. **Windows only**: You may need to install openssl.exe. If you have the [Git command line tools](http://www.git-scm.com/downloads) installed, openssl may already be in your path (Ex: C:\Program Files (x86)\Git\bin). If not, install the command line tools or download a binary distribution of OpenSSL for Windows from [one of the community mirrors](http://go.microsoft.com/fwlink/?LinkID=627128) and it to your path. This will also need to be done on any Windows machines running a build agent. + +0. Now we'll encrypt the keystore for your app. + 0. Open the Terminal app on Mac or a command prompt on Windows and go to where your keystore is located. + 0. Type the following: + ``` + openssl des3 -in release.keystore -out release.keystore.enc + ``` substituting des3 for any encryption cypher you'd like to use and the appropriate input and output file names. + 0. Enter a passphrase to encrypt the certificate when prompted and note this down as we will use it later. + + +0. Next, add the encrypted keystore to source control. This is secure particularly if you are using a private repository since a malicious user would need access to the repository, the encryption passphrase, the keystore password, and the alias password to be able to use your information without permission. + +0. Finally we'll update your build definition to decrypt and use the keystore. + + 0. Open up your Android or Cordova build definition and go to the **Variables** tab. Here we will enter the following: + - **KEYSTORE**: Path to your encrypted keystore file in source control. + - **KEYSTORE_PWD**: Password to the unencrypted keystore file. *Be sure to click the "lock" icon.* This will secure your password and obscure it in all logs. + - **KEY**: The key alias for the signing certificate you generated. + - **KEY_PWD**: The password for the key associated with the specified alias. *Again, Be sure to click the "lock" icon.* + - **ENC_PWD**: The passphrase you used to encrypt the keystore file. *Be sure to click the "lock" icon.* + + ![Android build vars](_img/secure-certs/secure-certs-8.png) + + 0. Under the **Build** tab in your build definition, add a **Decrypt File (OpenSSL)** steps from the **Utility** category and move this to the top of your build definition. + +0. Now, enter the proper information using the variables we created above to decrypt the two files to a static filename. + + - **Cypher**: The cypher you specified while encrypting. (Ex: des3) + - **Encrypted File**: $(KEYSTORE) + - **Passphrase**: $(ENC_PWD) + - **Decrypted File Path**: _build.keystore + + ![Decrypt keystore settings](_img/secure-certs/secure-certs-9.png) + +0. Finally, updating the actual build step to use these values you entered is simple regardless of your build system. + + 1. If you are using the **Gradle, Ant, or Maven** build tasks, you can add the following under **Options**: + + ``` + -Pkey.store=_build.keystore -Pkey.store.password=$(KEYSTORE_PWD) -Pkey.alias=$(KEY) -Pkey.alias.password=$(KEY_PWD) + ``` + ![Gradle Build settings](_img/secure-certs/secure-certs-6.png) + + 2. If you are using the **Cordova Build** or **Android Signing** tasks, you can add the following under **Android** or **Jarsign Options** respectively: + + - **Keystore File**: _build.keystore + - **Keystore Password**: $(KEYSTORE_PWD) + - **Key Alias**: $(KEY) + - **KEY Password**:$(KEY_PWD) + + ![Cordova Android Build settings](_img/secure-certs/secure-certs-7.png) + +You are now all set! Any build agent that is running will now be able to securely build your app without any cert management on the build machine itself!! + +## Q&A + + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/apps/mobile/xamarin.md b/docs/build-release/apps/mobile/xamarin.md new file mode 100644 index 00000000000..1dd4c2bb145 --- /dev/null +++ b/docs/build-release/apps/mobile/xamarin.md @@ -0,0 +1,174 @@ +--- +title: Build your Xamarin app +description: Define a CI process that builds your Xamarin solution on Team Foundation Server and Visual Team Services. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 933A828E-CBB7-44C2-BAC0-1E1E9D78BFA0 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Build your Xamarin app + +**VSTS | TFS 2017 Update 2** + +Xamarin enables you to develop a single solution and deploy it to Android, iOS, and Windows devices. Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly customizable continuous integration (CI) process to automatically build and package your Xamarin app whenever your team pushes or checks in code. In this quickstart you learn how to define your CI process. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +* While the simplest way to try this quickstart is to use a VSTS account, you can also use a TFS server instead of a VSTS account. + +* You will build the sample app on Android and iOS using two build definitions in this quickstart. If you use VSTS, you can use hosted agent for Xamarin.Android, but if you use TFS or to build Xamarin.iOS, you also need a private agent. Set up a private agent and [Install Xamarin](https://www.xamarin.com/download) on the agent machine. The Xamarin version on your dev machine and build agent machine must be at least 4.0.3 for Windows and 5.10.3 for Mac. + + |Build | [Hosted agents](../../concepts/agents/hosted.md) | [On-premises Windows agent](../../actions/agents/v2-windows.md) | On-premises [OSX](../../actions/agents/v2-osx.md) or [Linux](../../actions/agents/v2-linux.md) agent | + |:---:|:---:|:---:|:---:| + | Xamarin.Android | Yes | Yes (with Xamarin installed) | Yes (with Xamarin installed) | + | Xamarin.iOS | No | No | Yes (with Xamarin installed) | + | UWP | Yes | Yes (Windows 10) | No | + +## Get the sample code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +``` +https://github.com/adventworks/xamarin-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +You need to create two build definitions - one for Xamarin.Android and one for Xamarin.iOS. + +### Define your Xamarin.Android build + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, click **Xamarin.Android**, and then click **Apply**. + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**: + + * **VSTS:** Select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. + + * **TFS:** Select a queue that includes a [Windows build agent](../../actions/agents/v2-windows.md). + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Select **Build Xamarin.Android Project** task. In the properties for this task, select `JDK 8` as the **JDK Version**, and `x64` as the **JDK Architecture**. + +1. Select **Build solution **/test*.csproj** task. In the properties for this task, uncheck **Enabled** under **Control Options**. There are no tests in the sample repository. + +1. Select **Xamarin Test Cloud** task. Remove this task from the definition. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + +### Define your Xamarin.iOS build + +Repeat the same steps as above to create another build definition, but this time select the **Xamarin.iOS** template. + +1. For the **Default agent queue**, select the queue that includes your MAC agent. + +1. Remove **Xamanrin Test Cloud** task. + +1. Click the **Variables** tab and modify these variables: + + * `BuildConfiguration` = `iOS Release` + +## View the build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next steps + +To be able to configure your own app for iOS release, you need to make the following changes in the solution in your development environment, since the Xamarin.iOS build requires a solution configuration that builds only the Xamarin.iOS project and its dependencies. + +0. In Visual Studio, open **Solution Explorer** (Keyboard: Ctrl + Alt + L). + +0. Right-click your solution and then click **Configuration Manager**. + +0. On the configuration manager dialog box open the active solution configuration drop-down menu and click **New**. + +0. On the new solution configuration dialog box: + + * For Name, enter `iOS Release` + + * Open **Copy settings from** drop-down menu and select **Release**. + + * Clear the **Create new project configurations** dialog box. + +0. Open the **Active solution platform** drop-down menu: + + 0. Select **iPhoneSimulator** and clear the check boxes on all rows except your Xamarin.iOS project and any projects (for example, portable class libraries) it depends on. + + 0. Repeat this step for **iPhone**. + +0. File -> Save All (Keyboard: Ctrl + Shift + S). + +0. Check in your changes. + +There's also a known issue that might cause a problem with building your Xamarin.iOS project. For example, in the build log for a Xamarin.iOS build step you might see an errors such as *error : Project reference '../App1/App1.csproj' has invalid or missing guid for metadata 'Project'*. + +To fix this issue: + +0. In Visual Studio, open **Solution Explorer** (Keyboard: Ctrl + Alt + L). + +0. Expand your .iOS project node, and then the **References** node. + +0. Right-click each reference to a portable class library and then click **Remove**. + +0. Right-click the **References** node and then click **Add Reference**. + +0. On the **Reference Manager** dialog box, expand **Projects**, and then click **Solution**. + +0. Select the portable class library projects you removed and click **OK**. + +0. File -> Save All (Keyboard: Ctrl + Shift + S). + +0. Check in your changes. diff --git a/docs/build-release/apps/mobile/xcode-ios.md b/docs/build-release/apps/mobile/xcode-ios.md new file mode 100644 index 00000000000..8e4c05c62b0 --- /dev/null +++ b/docs/build-release/apps/mobile/xcode-ios.md @@ -0,0 +1,136 @@ +--- +title: Build your Xcode app +description: Build and test Xcode projects with VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: e1b5bda1-9cab-4083-a593-36ae52e82b4a +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Build your Xcode app + +**VSTS | TFS 2017 Update 2** + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly customizable continuous integration (CI) process to automatically build and package your Xcode app whenever your team pushes or checks in code. In this quickstart you learn how to define your CI process. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +* While the simplest way to try this quickstart is to use a VSTS account, you can also use a TFS server instead of a VSTS account. + +* You need a build agent configured on a Mac machine. Simply open the OSX Terminal app on your Mac and follow these [setup instructions](../../actions/agents/v2-osx.md). The agent will automatically register itself with VSTS / TFS when you start up the agent for the first time. + +* Your Mac also needs to have Node.js, Xcode, and [xcpretty](https://github.com/supermarin/xcpretty) (for testing) installed. + +## Get the sample code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +``` +https://github.com/adventworks/xcode-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +The sample provided here is an iOS app, but the concepts described here essentially translate to other Xcode builds. Results from running tests are published to VSTS using **[xcpretty](https://github.com/supermarin/xcpretty)**. That is why you will need to have xcpretty installed on the OSX machine as this is not part of Xcode itself. + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, click **Xcode**, and then click **Apply**. + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**, select a queue that includes the Mac agent you set up. + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Set the following parameters for the **Xcode test** task: + + * **Scheme**: Name of the scheme shared. + * **Advanced > Create App Package**: Unchecked. + * **Advanced > Use xcpretty**: Checked. + * **Advanced > Xcode Developer Path**: allows you to specify the path of a different version of Xcode than is installed by default. Ex: /Applications/Xcode6.4.app/Contents/Developer. + + > **Troubleshooting Tip**: The "Release" configuration is not testable by default. You'll either need to use "Debug" or enable testability in for the configuration in Xcode. Also, be sure to pay attention to capitalization as "Debug" will work but "debug" may not. + +1. Set the following parameters for the **Xcode build** task: + + * Scheme: Name of the scheme shared. + +1. On the **Variables** tab in the build definition, add the following variables: + + * **Configuration**: Debug or Release + * **SDK**: iphoneos + * **TestSDK**: iphonesimulator + +1. Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + + > **Troubleshooting Tip**: If you encounter a "User interaction not allowed" error when running the agent as a launch agent, you will either need check the "Unlock default keychain" option or switch to referencing signing certificates using a file. See **[Simple, Secure CI App Signing](secure-certs.md)** for details. + + > **Troubleshooting Tip**: If you run into issues with your tests hanging and/or not being able to start the iOS Simulator at times you can opt to add a Command Line task for the "killall" tool with "iOS\ Simulator" as an argument (killall iOS\ Simulator). This will force shut down the simulator in the event it is hung. Exercise care when running the command if you have multiple agents running for the same user and that you do not accidently kill other processes. + + +## View the build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next steps + +If you plan to use your own Xcode project for this quickstart, there is really only one additional step required for configuring the project for a CI environment that is not done by default when you create the Xcode project. Xcode has the concept of schemes and you'll need to set one of these as "Shared" and add it to source control so it can be used during your CI builds. Follow these steps: + +1. In Xcode, open your project and go to **Product Scheme Manage Schemes...** + +2. Check **Shared** next to the Scheme you want to use during CI. Remember the name of the scheme you shared as we will reference it later. + +3. Now add the new files and folders in your .xcodeproj folder (specifically the xcsharedata folder to source control). + + ![Shared Scheme](_img/xcode-ios/xcode-1.png) + +To sign your application with a certificate as part of CI, see [How to: Secure Xcode App](secure-certs.md). diff --git a/docs/build-release/apps/nodejs/_img/apply-nodejs-gulp-template.png b/docs/build-release/apps/nodejs/_img/apply-nodejs-gulp-template.png new file mode 100644 index 00000000000..5d9ac4f0717 Binary files /dev/null and b/docs/build-release/apps/nodejs/_img/apply-nodejs-gulp-template.png differ diff --git a/docs/build-release/apps/nodejs/build-gulp.md b/docs/build-release/apps/nodejs/build-gulp.md new file mode 100644 index 00000000000..5c8f34dcc13 --- /dev/null +++ b/docs/build-release/apps/nodejs/build-gulp.md @@ -0,0 +1,108 @@ +--- +title: CI build for a Node.js app with Gulp +description: Define a continuous integration (CI) build process for your Node.js app with Gulp in VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.topic: get-started-article +ms.assetid: F0829366-2AC1-4344-9494-98CACEC38806 +ms.manager: douge +ms.author: alewis +ms.date: 08/28/2017 +--- + +# Build your Node.js app with Gulp + +**VSTS | TFS 2017 Update 2** + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly customizable continuous integration (CI) process to automatically build your Node.js web app whenever your team pushes or checks in code. In this quickstart you learn how to define your CI process. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +* While the simplest way to try this quickstart is to use a VSTS account, you can also use a TFS server instead of a VSTS account. Make sure that you have [configured a build agent](../../actions/agents/v2-windows.md) for your team project with npm, node, gulp, and other necessary software installed. + +## Get sample app code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +``` +https://github.com/adventworks/nodejs-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +The sample app in this repository is a simple server that echoes "Hello world". Tests for the applications are written using mocha framework. A gulp file is used to run the tests and to convert the published results into junit format as that is a supported rendering format by VSTS and TFS. + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, search for `node`, select **NodeJS with Gulp**, and then click **Apply**. + + ![apply node.js gulp template](_img/apply-nodejs-gulp-template.png) + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**: + + * **VSTS:** Select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. + + * **TFS:** Select a queue that includes a [Windows build agent](../../actions/agents/v2-windows.md). + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Select the **Run gulp** task from the tasks. On the right side, you see the parameters for the task. Under the section JUnit Test Results, select the option to Publish to TFS/Team Services. + +1. Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + +## View the build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next steps + +[!INCLUDE [include](../_shared/ci-web-app-next-steps.md)] diff --git a/docs/build-release/apps/windows/cpp.md b/docs/build-release/apps/windows/cpp.md new file mode 100644 index 00000000000..dace59c04f5 --- /dev/null +++ b/docs/build-release/apps/windows/cpp.md @@ -0,0 +1,120 @@ +--- +title: Build your C++ app +description: Build your C++ app in Team Foundation Server and Visual Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 49886DF3-3689-48B3-8F1C-CA99DAFD1E49 +ms.manager: douge +ms.author: alewis +ms.date: 12/15/2016 +ms.topic: get-started-article +--- + +# Build your C++ app for Windows + +**VSTS | TFS 2017 Update 2** + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly customizable continuous integration (CI) process to automatically build your C++ application whenever your team pushes or checks in code. In this quickstart you learn how to define your CI process for a C++ application developed using Visual Studio IDE. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +* While the simplest way to try this quickstart is to use a VSTS account, you can also use a TFS server instead of a VSTS account. Make sure that you have [configured a build agent](../../actions/agents/v2-windows.md) for your team project, and that you have a version of Visual Studio matching your development machine installed on the agent machine. + +## Get sample app code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +``` +https://github.com/adventworks/cpp-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, select **.NET Desktop**, and then click **Apply**. This template is useful in building most of the Visual Studio solutions including those that contain classic C++ projects. + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**: + + * **VSTS:** Select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. + + * **TFS:** Select a queue that includes a [Windows build agent](../../actions/agents/v2-windows.md). + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Click the **Copy Files** task. Specify the following arguments: + + * **Contents:** `**\$(BuildConfiguration)\**\?(*.exe|*.dll|*.pdb)` + +1. Click the **Variables** tab and modify these variables: + + * `BuildConfiguration` = `debug, release` + + * `BuildPlatform` = `x86, x64` + +1. Click the **Triggers** tab and enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click the **Options** tab and then: + + * Select **Multi-configuration**. + + * Specify **Multipliers:** `BuildConfiguration, BuildPlatform` + +1. Select **Parallel** if you have multiple build agents and want to build your configuration/platform pairings in parallel. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + +## View the build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next steps + +[!INCLUDE [include](../_shared/ci-web-app-next-steps.md)] diff --git a/docs/build-release/apps/windows/dot-net.md b/docs/build-release/apps/windows/dot-net.md new file mode 100644 index 00000000000..bddbbea2737 --- /dev/null +++ b/docs/build-release/apps/windows/dot-net.md @@ -0,0 +1,105 @@ +--- +title: Build your .NET desktop app for Windows +shorttitle: Visual Studio solution +description: Define a CI process that builds your .NET app on Team Foundation Server and Visual Studio Team Services. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.topic: get-started-article +ms.assetid: 2BFC43A2-4F6C-4A5C-86EE-6DDA8733829D +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Build your .NET desktop app for Windows + +**VSTS | TFS 2017 Update 2** + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly customizable continuous integration (CI) process to automatically build your .NET desktop app whenever your team pushes or checks in code. In this quickstart you learn how to define your CI process. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +* While the simplest way to try this quickstart is to use a VSTS account, you can also use a TFS server instead of a VSTS account. Make sure that you have [configured a build agent](../../actions/agents/v2-windows.md) for your team project, and that you have a version of Visual Studio matching your development machine installed on the agent machine. + +## Get sample app code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +``` +https://github.com/adventworks/net-sample +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +This quickstart works for apps targeting the .NET Framework 4 or newer. The sample app is a Visual Studio solution that has two projects: A .NET Class Library project targeting .NET Framework 4.5 and a Unit Test project. + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, select **.NET Desktop**, and then click **Apply**. + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**: + + * **VSTS:** Select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. + + * **TFS:** Select a queue that includes a [Windows build agent](../../actions/agents/v2-windows.md). + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + +## View the build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next steps + +[!INCLUDE [include](../_shared/ci-web-app-next-steps.md)] diff --git a/docs/build-release/apps/windows/universal.md b/docs/build-release/apps/windows/universal.md new file mode 100644 index 00000000000..fadc944618f --- /dev/null +++ b/docs/build-release/apps/windows/universal.md @@ -0,0 +1,106 @@ +--- +title: Build your Universal Windows Platform app +description: Define a CI process that builds your Universal Windows Platform (UWP) solution on Team Foundation Server and Visual Team Services. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: E3E15C22-3211-4FCC-A10C-5717EA8B116E +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Build your Universal Windows Platform app + +**VSTS | TFS 2017 Update 2** + +Universal Windows Platform (UWP) is a common app platform available on every device that runs Windows 10. Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide a highly customizable continuous integration (CI) process to automatically build and package your UWP app whenever your team pushes or checks in code. In this quickstart you learn how to define your CI process. + +## Prerequisites + +[!INCLUDE [include](../../_shared/ci-cd-prerequisites-vsts.md)] + +* While the simplest way to try this quickstart is to use a VSTS account, you can also use a TFS server instead of a VSTS account. Make sure that you have [configured a build agent](../../actions/agents/v2-windows.md) for your team project, and that you have a version of Visual Studio matching your development machine installed on the agent machine. + +## Get sample app code + +[!INCLUDE [include](../_shared/get-sample-code-intro.md)] + +``` +https://github.com/Microsoft/UWPQuickStart +``` + +# [VSTS or TFS repo](#tab/vsts) + +[!INCLUDE [include](../_shared/get-sample-code-vsts-tfs-2017-update-2.md)] + +# [GitHub repo](#tab/github) + +[!INCLUDE [include](../_shared/get-sample-code-github.md)] + +--- + +## Set up continuous integration + +[!INCLUDE [include](../../_shared/ci-quickstart-intro.md)] + +[//]: # (TODO: Restore use of includes when we get support for using them in a list.) + +1. Create a new build definition. + + # [VSTS or TFS repo](#tab/vsts) + + Navigate to the **Files** tab of the **Code** hub, and then click **Set up build**. + + ![Screenshot showing button to set up build for a repository](../_shared/_img/set-up-first-build-from-code-hub.png) + + You are taken to the **Build & Release** hub and asked to **Select a template** for the new build definition. + + # [GitHub repo](#tab/github) + + Navigate to the **Builds** tab of the **Build and Release** hub in VSTS or TFS, and then click **+ New**. You are asked to **Select a template** for the new build definition. + + --- + +1. In the right panel, click **Universal Windows Platform**, and then click **Apply**. + + You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +1. For the **Default agent queue**: + + * **VSTS:** Select _Hosted VS2017_. This is how you can use our pool of agents that have the software you need to build your app. + + * **TFS:** Select a queue that includes a [Windows build agent](../../actions/agents/v2-windows.md). + +1. Click **Get sources** and then: + + # [VSTS or TFS repo](#tab/vsts) + + Observe that the new build definition is automatically linked to your repository. + + # [GitHub repo](#tab/github) + + Select your version control repository. You'll need to authorize access to your repo. + + [//]: # (TODO:> [!TIP]) + [//]: # (TODO:> To learn more about GitHub CI builds, see [Define CI build process for your Git repo](#) + + --- + +1. Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +1. Click **Save and queue** to kick off your first build. On the **Queue build** dialog box, click **Queue**. + +1. A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. + + +## View the build summary + +[!INCLUDE [include](../_shared/view-build-summary.md)] + +## Next steps + +You can now update the build definition to generate production builds. + + * [Signing UWP package](https://docs.microsoft.com/en-us/windows/uwp/packaging/create-certificate-package-signing) + * [Associate package with the store](https://msdn.microsoft.com/en-us/library/windows/apps/hh454036.aspx) diff --git a/docs/build-release/archive/apps/_shared/_img/apply-azure-app-service-deployment-template.png b/docs/build-release/archive/apps/_shared/_img/apply-azure-app-service-deployment-template.png new file mode 100644 index 00000000000..00a95873603 Binary files /dev/null and b/docs/build-release/archive/apps/_shared/_img/apply-azure-app-service-deployment-template.png differ diff --git a/docs/build-release/archive/apps/_shared/_img/build-artifact-trigger-in-release-definition.png b/docs/build-release/archive/apps/_shared/_img/build-artifact-trigger-in-release-definition.png new file mode 100644 index 00000000000..58a43a178a6 Binary files /dev/null and b/docs/build-release/archive/apps/_shared/_img/build-artifact-trigger-in-release-definition.png differ diff --git a/docs/build-release/archive/apps/_shared/_img/new-release-definition-editor-preview-on.png b/docs/build-release/archive/apps/_shared/_img/new-release-definition-editor-preview-on.png new file mode 100644 index 00000000000..fb56ca27796 Binary files /dev/null and b/docs/build-release/archive/apps/_shared/_img/new-release-definition-editor-preview-on.png differ diff --git a/docs/build-release/archive/apps/_shared/_img/preview-features-action-in-profile-menu.png b/docs/build-release/archive/apps/_shared/_img/preview-features-action-in-profile-menu.png new file mode 100644 index 00000000000..6f161c0cc5c Binary files /dev/null and b/docs/build-release/archive/apps/_shared/_img/preview-features-action-in-profile-menu.png differ diff --git a/docs/build-release/archive/apps/_shared/browse-to-web-app.md b/docs/build-release/archive/apps/_shared/browse-to-web-app.md new file mode 100644 index 00000000000..c1bf5dcadb5 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/browse-to-web-app.md @@ -0,0 +1,9 @@ +## Browse to the app + +Once deployment has completed, open the browser and test your web app. + +```bash +http://.azurewebsites.net +``` + +**Congratulations!** You've deployed changes to your application using CI/CD. diff --git a/docs/build-release/archive/apps/_shared/clean-up-resources.md b/docs/build-release/archive/apps/_shared/clean-up-resources.md new file mode 100644 index 00000000000..5382227e029 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/clean-up-resources.md @@ -0,0 +1,7 @@ +## Clean up resources + +When no longer needed, you can use the az group delete command to remove the resource group and all related resources. + +```bash +az group delete --name myResourceGroup +``` diff --git a/docs/build-release/archive/apps/_shared/create-azure-web-app.md b/docs/build-release/archive/apps/_shared/create-azure-web-app.md new file mode 100644 index 00000000000..f469201ddf0 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/create-azure-web-app.md @@ -0,0 +1,30 @@ +## Create an Azure web app using the CLI + +> [!NOTE] +> If you already have a web app that you want to use, you can skip this and move to the next section. + +The Azure Cloud Shell is a free Bash shell that you can run directly within the Azure portal. It has the Azure CLI preinstalled and configured to use with your Azure account. Click the **Cloud Shell** button on the menu in the upper-right of the [Azure portal](https://portal.azure.com). + +[![Cloud Shell](https://docs.microsoft.com/en-us/azure/includes/media/cloud-shell-try-it/cloud-shell-menu.png)](https://portal.azure.com) + +The button launches an interactive shell that you can use to run all of the following steps: + +[![Screenshot showing the Cloud Shell window in the portal](https://docs.microsoft.com/en-us/azure/includes/media/cloud-shell-try-it/cloud-shell-safari.png)](https://portal.azure.com) + +Create a resource group with the [az group create](https://docs.microsoft.com/cli/azure/group#create) command. The following example creates a resource group named *myResourceGroup* in the *eastus* location. + +```azurecli-interactive +az group create --name myResourceGroup --location eastus +``` + +Create an App Service plan with the [az appservice plan create](https://docs.microsoft.com/cli/azure/appservice/plan#create) command. The following example creates an App Service plan named `myAppServicePlan` in the **Free** pricing tier: + +```azurecli-interactive +az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE +``` + +Create a [web app](https://docs.microsoft.com/en-us/azure/app-service-web/app-service-web-overview) in the `myAppServicePlan` App Service plan with the [az webapp create](https://docs.microsoft.com/cli/azure/webapp#create) command. In the following command, replace `` with a unique name (valid characters are `a-z`, `0-9`, and `-`). If `` is not unique, you get the error message "Website with given name already exists." The default URL of the web app is `https://.azurewebsites.net`. + +```azurecli-interactive +az webapp create --name --resource-group myResourceGroup --plan myAppServicePlan +``` diff --git a/docs/build-release/archive/apps/_shared/create-azure-windows-vm.md b/docs/build-release/archive/apps/_shared/create-azure-windows-vm.md new file mode 100644 index 00000000000..cfb68edd50c --- /dev/null +++ b/docs/build-release/archive/apps/_shared/create-azure-windows-vm.md @@ -0,0 +1,3 @@ +## Create an Azure Windows VM using Powershell + +To provide a platform to run your app, you need a Windows virtual machine that runs IIS. If you don't already have one, see [Create a Windows virtual machine with the Azure CLI](https://docs.microsoft.com/en-us/azure/virtual-machines/windows/quick-create-cli). \ No newline at end of file diff --git a/docs/build-release/archive/apps/_shared/create-deployment-group.md b/docs/build-release/archive/apps/_shared/create-deployment-group.md new file mode 100644 index 00000000000..753359c93a6 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/create-deployment-group.md @@ -0,0 +1,27 @@ +## Create a deployment group + +Deployment groups in VSTS make it easier to organize the servers that you want to use to host your app. A deployment group is a collection of machines with a VSTS agent on each of them. Each machine interacts with VSTS to coordinate deployment of your app. + +1. Open the VSTS web portal (`https://{your-account}.visualstudio.com`), navigate to the **Build & Release** hub, and then click **Deployment groups**. + +1. Click **Add Deployment group** (or **New** if there are already deployment groups in place. + +1. Enter a name for the group, such as *myIIS*, and then click **Create**. + +1. In the **Register machine** section, make sure that **Windows** is selected, and that **Use a personal access token in the script for authentication** is also selected. Click **Copy script to clipboard**. + + ![Screenshot showing update to code](../../../apps/_shared/_img/windows-deployment-group-setup.png) + + The script that you've copied to your clipboard will download and configure an agent on the VM so that it can receive new web deployment packages and apply them to IIS. + +1. On your VM, in an **Administrator PowerShell** console, paste and run the script. + +1. When you're prompted to configure tags for the agent, press Enter (you don't need any tags). + +1. When you're prompted for the user account, press Enter to accept the defaults. + +1. When the script is done, it displays the message *Service vstsagent.account.computername started successfully*. + +1. On the **Deployment groups** page of the **Build & Release** hub in VSTS, open the *myIIS* deployment group. On the **Machines** tab, verify that your VM is listed. + + ![Screenshot showing update to code](../../../apps/_shared/_img/windows-deployment-group.png) diff --git a/docs/build-release/archive/apps/_shared/definition-finish-and-test.md b/docs/build-release/archive/apps/_shared/definition-finish-and-test.md new file mode 100644 index 00000000000..835cd72bfb3 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/definition-finish-and-test.md @@ -0,0 +1,19 @@ +## Finish and test the definition + +[//]: # (Todo: Convert this to a shared blurb and use in all three scenarios after reviews are done and branches are merged.) + +[//]: # (Todo: add TFVC and Git icons) + +0. On the Repository tab: + + * Git: Make sure the repository and branch containing your application are selected. (By default the repository with the same name as the team project is selected.) + + * TFVC: Make sure the folder that contains your app is mapped. + +0. On the Triggers tab select continuous integration (CI). If your code is in Git, specify the branches you want to build. + +0. Save your definition and queue the build. + +[//]: # (Issue: what should I say about the Filters field for TFVC on the Triggers tab? In my test, I saw it set by default to "undefined". Note this is a broader issue and reminder to self to implement outcome in other topics.) + +[//]: # (todo: On General tab check Default queue, Build number format $ date:yyyyMMdd $ rev:.r) diff --git a/docs/build-release/archive/apps/_shared/import-code-1.md b/docs/build-release/archive/apps/_shared/import-code-1.md new file mode 100644 index 00000000000..5c054b701f7 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/import-code-1.md @@ -0,0 +1,7 @@ +## Import sample code into your VSTS Git repo + +In the VSTS portal, navigate to the **Code** hub for your new VSTS project. Click the default repository and then click **Import repository**. + +![Screenshot showing menu item to import a repository](../../../apps/_shared/_img/import-repository-menu-item.png) + +On the **Import a Git repository** dialog box, paste the following for **Clone URL**. diff --git a/docs/build-release/archive/apps/_shared/import-code-2.md b/docs/build-release/archive/apps/_shared/import-code-2.md new file mode 100644 index 00000000000..5ec0080df6e --- /dev/null +++ b/docs/build-release/archive/apps/_shared/import-code-2.md @@ -0,0 +1 @@ +Click **Import** to copy the sample app code into your VSTS Git repository. diff --git a/docs/build-release/archive/apps/_shared/set-up-cd-1.md b/docs/build-release/archive/apps/_shared/set-up-cd-1.md new file mode 100644 index 00000000000..f97af4ca2d0 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/set-up-cd-1.md @@ -0,0 +1,3 @@ +## Set up continuous deployment + +Once the build succeeds, click the **Release** action on the build summary page. \ No newline at end of file diff --git a/docs/build-release/archive/apps/_shared/set-up-cd-2.md b/docs/build-release/archive/apps/_shared/set-up-cd-2.md new file mode 100644 index 00000000000..827bd2cc115 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/set-up-cd-2.md @@ -0,0 +1,16 @@ +On the **Create release definition** dialog box, click **Yes**. + +In the **Select a Template** panel, click the **Azure App Service Deployment** template, and then click **Apply**. + +![apply azure app service deployment template](_img/apply-azure-app-service-deployment-template.png) + +Click **Tasks**, and then the **Deploy Azure App Service** task. + +Configure the inputs for the **Deploy Azure App Service** task in the release definition. First, select the name of the **Azure subscription** to which you would like to deploy the application. If there is an **Authorize** button next to the input, click on it to authorize VSTS to connect to your Azure subscription. + +![authorize azure subscription in new release definition](../../../apps/_shared/_img/authorize-azure-subscription-in-new-release-definition.png) + +> [!NOTE] +> If you don't see the Azure subscription in the menu, make sure you are a co-administrator of the Azure subscription you want to use. You can [create your own Azure subscription for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F). + +Next, select the name of the Azure web app you created for the **App service name**. \ No newline at end of file diff --git a/docs/build-release/archive/apps/_shared/set-up-cd-3.md b/docs/build-release/archive/apps/_shared/set-up-cd-3.md new file mode 100644 index 00000000000..e5b00f25604 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/set-up-cd-3.md @@ -0,0 +1,17 @@ +Select the artifact trigger and make sure the **Continuous deployment trigger** is enabled. + +![build artifact trigger in release definition](_img/build-artifact-trigger-in-release-definition.png) + +Click **Save**. In the Save dialog box, click **OK**. + +To test the release definition, click **Release** and then **Create Release**. + +![create release](../../../apps/cd/azure/_shared/_img/create-release.png) + +On the Create new release dialog box, click **Queue**. + +You will notice a new release being created. Select the link to navigate to the release. + +![new release created message](../../../apps/cd/azure/_shared/_img/new-release-created-message.png) + +You can watch the live logs for the deployment as it happens. Wait for the release to be deployed to the Azure web app. \ No newline at end of file diff --git a/docs/build-release/archive/apps/_shared/set-up-ci-1.md b/docs/build-release/archive/apps/_shared/set-up-ci-1.md new file mode 100644 index 00000000000..6d007779a09 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/set-up-ci-1.md @@ -0,0 +1,7 @@ +## Set up continuous integration + +On the **Files** tab of the **Code** hub, click **Set up build**. + +![Screenshot showing button to set up build for a repository](../../../apps/_shared/_img/set-up-first-build-from-code-hub.png) + +You are taken to the **Build & Release** hub in VSTS and asked to **Choose a template**. \ No newline at end of file diff --git a/docs/build-release/archive/apps/_shared/set-up-ci-2.md b/docs/build-release/archive/apps/_shared/set-up-ci-2.md new file mode 100644 index 00000000000..8cafdbcf861 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/set-up-ci-2.md @@ -0,0 +1,3 @@ +You now see all the tasks that were automatically added to the build definition by the template. These are the steps that will automatically run every time you check in code. + +For the **Default agent queue**, select _Hosted VS2017_. diff --git a/docs/build-release/archive/apps/_shared/set-up-ci-3.md b/docs/build-release/archive/apps/_shared/set-up-ci-3.md new file mode 100644 index 00000000000..4e9602b4612 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/set-up-ci-3.md @@ -0,0 +1,5 @@ +Click the **Triggers** tab in the build definition. Enable the **Continuous Integration** trigger. This will ensure that the build process is automatically triggered every time you commit a change to your repository. + +Select **Save and queue** to kick off your first build. On the **Queue build** dialog, select **Queue**. + +A new build is started. You'll see a link to the new build on the top of the page. Click the link to watch the new build as it happens. Wait for the build to complete and succeed before proceeding to the next section. diff --git a/docs/build-release/archive/apps/_shared/vsts-and-azure-setup.md b/docs/build-release/archive/apps/_shared/vsts-and-azure-setup.md new file mode 100644 index 00000000000..89f43e05a30 --- /dev/null +++ b/docs/build-release/archive/apps/_shared/vsts-and-azure-setup.md @@ -0,0 +1,13 @@ +## Get ready to go + +Before you begin, make sure that you are: + +* A co-administrator of the Azure subscription. If you don't have an Azure subscription, you can [create one for free](https://azure.microsoft.com/free/?WT.mc_id=A261C142F). + +* An administrator of the VSTS account. If you don't yet have a VSTS account, you can [create one for free](https://go.microsoft.com/fwlink/?LinkId=307137). + +* Using the **New Release Definition Editor** that is currently in preview. + + ![preview features action in profile menu](_img/preview-features-action-in-profile-menu.png) + + ![new release definition editor preview on](_img/new-release-definition-editor-preview-on.png) diff --git a/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-apply-template.png b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-apply-template.png new file mode 100644 index 00000000000..1d99596ed8c Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-apply-template.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-build-summary.png b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-build-summary.png new file mode 100644 index 00000000000..ecea0e131af Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-build-summary.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-sample.png b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-sample.png new file mode 100644 index 00000000000..f190b1736e9 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-sample.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-update-code.png b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-update-code.png new file mode 100644 index 00000000000..5ffff1eb64c Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-update-code.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-release-definition.png b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-release-definition.png new file mode 100644 index 00000000000..18f88d7da51 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-release-definition.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/select-iis-website-and-sql-database-deployment-release-template.png b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/select-iis-website-and-sql-database-deployment-release-template.png new file mode 100644 index 00000000000..6b2b802b65a Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/aspnet-from-vsts-to-windows-vm/select-iis-website-and-sql-database-deployment-release-template.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/01.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/01.png new file mode 100644 index 00000000000..29cf18c5a3a Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/01.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/02.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/02.png new file mode 100644 index 00000000000..1d60d112f4b Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/02.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/03.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/03.png new file mode 100644 index 00000000000..829ccb41e71 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/03.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/04.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/04.png new file mode 100644 index 00000000000..bc58b65a768 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/04.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/05.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/05.png new file mode 100644 index 00000000000..98da5f41985 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/05.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/06.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/06.png new file mode 100644 index 00000000000..107047674aa Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/06.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/07.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/07.png new file mode 100644 index 00000000000..711e4e45027 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/07.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/08.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/08.png new file mode 100644 index 00000000000..704dd0ed005 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/08.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/09.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/09.png new file mode 100644 index 00000000000..b7103d8fb67 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/09.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/10.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/10.png new file mode 100644 index 00000000000..edd228ab7b7 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/10.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/11.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/11.png new file mode 100644 index 00000000000..ab8ba1e6693 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/11.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/12.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/12.png new file mode 100644 index 00000000000..50009bf1df6 Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/12.png differ diff --git a/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/new-web-app.png b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/new-web-app.png new file mode 100644 index 00000000000..7ca149c68ec Binary files /dev/null and b/docs/build-release/archive/apps/aspnet/_img/continuous-app-service/new-web-app.png differ diff --git a/docs/build-release/archive/apps/aspnet/aspnet-4-ci-cd-azure-automatic.md b/docs/build-release/archive/apps/aspnet/aspnet-4-ci-cd-azure-automatic.md new file mode 100644 index 00000000000..d41c0a4cb62 --- /dev/null +++ b/docs/build-release/archive/apps/aspnet/aspnet-4-ci-cd-azure-automatic.md @@ -0,0 +1,255 @@ +--- +ms.assetid: 6DD68CF7-072E-42F4-99FF-06C93D997947 +title: Automatically generate a CI/CD pipeline to deploy an ASP.NET app +description: Automatically generate a CI/CD pipeline to deploy an ASP.NET app from VSTS or TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/02/2017 +--- + +# Use Azure to automatically generate a CI/CD pipeline to deploy an ASP.NET app + +This tutorial shows how to configure a continuous delivery (CD) workflow for +[Azure App Service](https://azure.microsoft.com/en-us/documentation/articles/app-service-changes-existing-services/) +by using Visual Studio Team Services. CD is a great option for projects that require multiple and frequent +contributions to be integrated. + +CD in VSTS simplifies setting up a robust +deployment pipeline for your app to publish the most recent updates +to Azure App Service. The pipeline can be configured to build, +runs tests, and deploy to a staging slot and then to production. + +## Code + +You must store your app's source code in a +[VSTS Git](../../../../git/gitquickstart.md), +[GitHub](https://help.github.com/articles/create-a-repo), +or any other Git repository to use Azure Continuous Delivery. +Team Foundation Version Control (TFVC) repositories are not supported at present. + +Carry out the following steps to create a simple +.NET MVC app to deploy. + +1. Create a new **ASP.NET Web Application** project in + Visual Studio, targeting .NET Framework 4.5. + +1. Choose the **MVC** project type and leave the other + settings at their defaults. + +1. Wait until the sample application has been created, then save the solution. + +1. Commit the solution to your chosen repository. + +>For more information about publishing your project, see +[Get Started with Git and VSTS](../../../../git/gitquickstart.md) +or [Create a repo (GitHub)](https://help.github.com/articles/create-a-repo). + +## Configure + +1. In the [Azure portal](https://portal.azure.com/), select your + web app. If you haven't yet created a web app, do this now by choosing + the "**+**" icon, selecting **Web App** from the **Web + Mobile** category, + and providing a name and a resource group. + + ![Creating a new Azure web app](_img/continuous-app-service/new-web-app.png) + +1. In your app's menu blade, choose **Continuous Delivery (Preview)** and then choose **Configure**. + + ![Opening Azure Continuous Delivery configuration](_img/continuous-app-service/01.png) + +1. Select **Choose repository** and select the type of repository where you stored your app's source code. + You have a choice of **Visual Studio Team Services**, **GitHub** or **External Git** + (a Git type repository not hosted in VSTS or GitHub). + + ![Specifying the type of source code repository](_img/continuous-app-service/02.png) + +1. Select the project, repository, and branch to deploy from. When you're done, choose **OK**. + + ![Specifying details of the source repository and branch](_img/continuous-app-service/03.png) + + If you chose to use GitHub, complete the authorization steps. + If you chose to use an external Git repository, enter the repository name, branch, and (if required) your credentials. + + >If you encounter a service endpoint error while configuring Continuous Delivery, see + [Troubleshoot Azure Resource Manager service endpoints](../../../actions/azure-rm-endpoint.md). + +1. Select **Configure Continuous Delivery** and choose the web application framework + you used to develop your app. This choice influences the way that Azure Continuous Delivery builds + and packages the app for deployment. At present, ASP.NET, ASP.NET Core, PHP, Python, and Node.js + are supported. When you're done, choose **OK**. + + ![Specifying the app framework type](_img/continuous-app-service/04.png) + +1. Select **Set up load test** and decide if you want to run a load test on your app + before deploying the latest changes to production. The default is **NO**. + If you want to set up a load test (25 virtual users concurrently accessing + the app for 60 seconds), choose **YES** then specify whether to use an existing + Azure App Service instance, or create a new one in a new App Service plan. + When you're done, choose **OK**. + + ![Specifying whether and how to run a load test before deployment](_img/continuous-app-service/05.png) + + >The new Azure App Service instance is created at the lowest + pricing tier possible. For example, if your current App Service + is in the S2 Standard pricing tier, the new App Service + Plan for the load test will use the S1 Standard pricing tier. + [Pricing details](https://azure.microsoft.com/documentation/articles/azure-web-sites-web-hosting-plans-in-depth-overview/). + +1. Select **Configure deployment** and decide if you want to deploy your latest changes + first to staging, and then promote to production. The default is **NO**. + If you want to set this up, choose **YES** then specify whether you want to + use an existing Azure App Service slot, or create a new one. When you're done, choose **OK**. + + ![Specifying whether and how to configure production deployment](_img/continuous-app-service/06.png) + + See [this topic](https://azure.microsoft.com/documentation/articles/web-sites-staged-publishing/) + for information about Azure App Service staging environments. + +## Build and deploy + +1. Choose **OK** to create and execute the Continuous Delivery workflow. + + ![Completing the Continuous Delivery configuration](_img/continuous-app-service/07.png) + + The following sequence of events occurs: + + - Azure Continuous Delivery creates a build and a release definition in the VSTS account + you specified, together with a service endpoint to connect to Azure. + + - If you chose to create a new Azure App Service instance for load tests, and/or a new slot for + staging, these are created in your Azure subscription. + + - After setup has completed successfully, a build is triggered that builds and packages the + application for deployment. + + - After the build has completed successfully, a new release is created and the deployment triggered. + + - If you chose to include a load test, the latest changes are first deployed to the Azure App Service + you selected, and then the load test is executed after the deployment succeeds. + + - If you chose to use a staging slot, the latest changes are deployed to the staging slot and then a + slot swap is performed to complete the continuous delivery workflow.

    + +1. After all these actions have completed, the Azure portal shows the results in the **Activity Log**. + + ![Viewing the Continuous Delivery log](_img/continuous-app-service/08.png) + +1. In the "Successfully set up Continuous Delivery..." item, choose the **Build Definition** + link to open the project containing your app in VSTS, and see the summary for the build definition. + Choose **Edit** to see the tasks that have been added and configured. + + ![Viewing the newly created build definition](_img/continuous-app-service/09.png) + + Different tasks are added to the build definition depending on the app framework you selected. + For example, a **Visual Studio Build** task is added for ASP.NET apps, while a + **.NET Core** task is used for ASP.NET Core apps. + +1. In the "Successfully set up Continuous Delivery..." item, choose the **Release Definition** + link to open the project containing your app in VSTS, and see the list of releases for this definition. + Choose **Edit** to see the tasks that have been added and configured. + + ![Viewing the Test environment in the newly created release definition](_img/continuous-app-service/10.png) + + The release definition that is created depends on whether you chose to include a load test + and/or a staging deployment. If you chose either or both, your release definition will have + two environments named **Test** and **Production**. As shown above, the **Test** environment + has two tasks: **Azure App Service Deploy** deploys the app to the Azure App Service you + selected for load testing, and **Cloud-based Web Performance** task execute the load test. + + The **Production** environment, shown below, has an **Azure App Service Deploy** task. + If you chose to use a staging deployment, the latest changes are deployed to the staging + slot and then an **Azure App Service Manage** task performs a slot swap between staging + and production slots. + + ![Viewing the Production environment in the newly created release definition](_img/continuous-app-service/11.png) + + If you opted out of both load test and a staging deployment, your release definition + will have a single environment with just one **Azure App Service Deploy** task + to deploy the latest changes to your Azure App Service. + + There are also links in other items in the **Activity Log** that open commits, + builds, build reports, releases, deployment slots, and the deployed app itself, + in relevant windows or apps. + +1. Verify that continuous deployment is occurring from the repository containing your + app by pushing a change to the repository. Your app should update to reflect the + changes shortly after the push to the repository completes. + + You can stop a deployment to your Azure App Service by choosing **Disconnect** at the top of + the **Continuous Deployment** blade. This deletes the Azure Continuous Delivery + configuration in the Azure portal and turns off the build triggers in your VSTS + account for this configuration. + + ![Stopping a deployment](_img/continuous-app-service/12.png) + + >To ensure the build and release history is preserved, the build and release definitions + are not deleted from VSTS when you disconnect. + +## Next steps + +You can easily add another Azure App Service to the pipeline to validate +your changes before they reach production. This validation can be by +running load or functional tests at each step. Further customization +can be through provisioning additional Azure resources, running custom +scripts, or upgrading a database. In addition, you can extend this +deployment automation to handle any other operations your app needs +to execute during deployment. You can even choose to deploy automatically, +or set up manual approval for any deployment to production. + + +## Notes + +The Azure Continuous Delivery feature is a preview version. You +may encounter the following known issues: + +* If you do not have relevant permission to create build and release definitions + in the VSTS account, the Continuous Delivery configuration will fail + with an appropriate error message. See + [Manage users and access in Visual Studio Team Services](../../../../accounts/add-account-users-assign-access-levels.md). + +* Continuous Delivery supports only applications developed by using + [ASP.NET](https://www.asp.net/) and [ASP.NET Core](https://www.microsoft.com/net/core#windows). + +* If you encounter the error "Failed to create an Azure service connection" + while deploying to Azure App Service, see + [Troubleshoot Azure Resource Manager service endpoints](../../../actions/azure-rm-endpoint.md). + +* There is a known issue where users are able to see their Visual Studio Team + Services account information within the [Azure classic portal](https://manage.windowsazure.com/), + but not in the [Azure dashboard](https://portal.azure.com/). You may see a + "No accounts found" message in this situation. To resolve this, you can + configure your VSTS account to be backed by an + Azure Active Directory (AAD) instance. For information on how to do this, see + [VSTS - Access with Azure Active Directory](../../../../accounts/access-with-azure-ad.md). + +## Q&A + + + +

    How do I create an ASP.NET 4 web app?

    + +1. In Visual Studio, [connect to your team project](../../../../connect/connect-team-projects.md#visual-studio). + +1. On the Team Explorer home page (Keyboard: Ctrl + 0, H), under **Solutions**, click **New**. + +1. Select the **Web** category under **Visual C#**. + +1. Select **ASP.NET Web Application** and click **OK**. + +1. Select **MVC** from the template list. + +1. Click **Change Authentication**, select **No Authentication**, and click **OK**. + +1. Optionally, set **Add unit tests** to create a unit test project for the application. Unit tests can be run automatically with every build as part of a release pipeline. + +1. Clear **Host in the cloud** and click **OK**. + +1. [Commit and push (Git)](../../../../git/share-your-code-in-git-vs.md) or [check in (TFVC)](../../../../tfvc/share-your-code-in-tfvc-vs.md) your code. + +[!INCLUDE [qa-versions](../../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/archive/apps/aspnet/aspnet-4-ci-cd-vs-automatic.md b/docs/build-release/archive/apps/aspnet/aspnet-4-ci-cd-vs-automatic.md new file mode 100644 index 00000000000..00aa0d0e8a9 --- /dev/null +++ b/docs/build-release/archive/apps/aspnet/aspnet-4-ci-cd-vs-automatic.md @@ -0,0 +1,69 @@ +--- +title: Deploy a CI/CD pipeline ASP.NET web app to Azure +description: Use Visual Studio to automatically generate a CI/CD pipeline to deploy your ASP.NET web app to Azure in VSTS or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 498BF7D8-2932-46FB-BD38-E8EBD1C5CABA +ms.manager: douge +ms.author: alewis +ms.date: 02/10/2017 +--- + +# Use Visual Studio to automatically generate a CI/CD pipeline to deploy your ASP.NET web app to Azure + +[!INCLUDE [include](../../../_shared/version.md)] + +In this walkthrough we'll show how to use Visual Studio to automatically define a continuous integration (CI) and continuous deployment (CD) process to deploy an ASP.NET web application project to [Azure](https://azure.microsoft.com/). + +[!INCLUDE [include](../../../apps/aspnet/_shared/ci-cd-description.md)] + +> [!TIP] +> If you don't yet have an app but want to try this out, then see the [Q&A below](#new_solution). + +[!INCLUDE [include](../../../apps/aspnet/_shared/setup.md)] + +## Install the Continuous Delivery Tools extension + +The quickest way to create a continuous delivery process is with the Continuous Delivery Tools for Visual Studio (2017 RC.3 and newer), which automate the creation of build and release definitions. The tools assume that you have an existing VSTS account, and that your project has been added to source control in a Team Project. + +To install the extension within Visual Studio, select **Tools > Extensions and Updates...** and search for **Continuous Delivery Tools for Visual Studio**. Alternatively, you can download the installer from the [Visual Studio Gallery](http://aka.ms/CD4VS). + +## Create the build and release definitions automatically + +To create both the build (CI) and release (CD) definitions for a project, in Visual Studio, right-click the project in Solution Explorer and select **Configure Continuous Delivery....** In the dialog that appears, choose the appropriate repository branch, Azure subscription, and target App Service, and click OK. You'll see details in the Output pane during the process. + +[!INCLUDE [include](../../../apps/aspnet/_shared/commit-build-release.md)] + +## Q&A + + + +

    How do I create an ASP.NET 4 web app?

    + +1. In Visual Studio, [connect to your team project](../../../../connect/connect-team-projects.md#visual-studio). + +1. On the Team Explorer home page (Keyboard: Ctrl + 0, H), under **Solutions**, click **New**. + +1. Select the **Web** category under **Visual C#**. + +1. Select **ASP.NET Web Application** and click **OK**. + +1. Select **MVC** from the template list. + +1. Click **Change Authentication**, select **No Authentication**, and click **OK**. + +1. Optionally, set **Add unit tests** to create a unit test project for the application. Unit tests can be run automatically with every build as part of a release pipeline. + +1. Clear **Host in the cloud** and click **OK**. + +1. [Commit and push (Git)](../../../../git/share-your-code-in-git-vs.md) or [check in (TFVC)](../../../../tfvc/share-your-code-in-tfvc-vs.md) your code. + +### I got a file not found error message. How do I fix it? + +All solution files must be checked into the server to run a build. One known cause of missing files is in cases where you populate an empty repo by creating a new project in Visual Studio 2015 Update 3. We recommend that you update your [.gitignore file](../../../../git/tutorial/ignore-files.md) with the latest copy from [GitHub: VisualStudio.gitignore](https://github.com/github/gitignore/blob/master/VisualStudio.gitignore). + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/archive/apps/aspnet/aspnet-core-from-vsts-to-azure-web-app.md b/docs/build-release/archive/apps/aspnet/aspnet-core-from-vsts-to-azure-web-app.md new file mode 100644 index 00000000000..0a2afac9d2d --- /dev/null +++ b/docs/build-release/archive/apps/aspnet/aspnet-core-from-vsts-to-azure-web-app.md @@ -0,0 +1,74 @@ +--- +title: Quick Start - Build and Deploy a ASP.NET Core app | VSTS +description: Set up a continuous integration (CI) build for your ASP.NET Core app, and then a continuous deployment (CD) release to Azure using Visual Studio Team Services +services: vsts +documentationcenter: '' +author: alewis +manager: douge +editor: '' + +ms.assetid: 4162F547-3E73-4B1E-970F-A26DFCA206E1 +ms.workload: web +ms.tgt_pltfrm: na +ms.devlang: dotnetcore +ms.date: 06/24/2017 +ms.author: alewis +ms.custom: mvc +--- +# Implement a CI/CD process to build and deploy your ASP.NET Core app to Azure + +VSTS provides a highly customizable continuous integration (CI) and deployment (CD) automation system for your +ASP.NET Core apps. +This quickstart shows how to set up CI and CD to deploy +an ASP.NET Core app +to an Azure web app. +You create the web app using the Azure CLI, then set up CI/CD in VSTS. + +![Screenshot showing ASP.NET Core web app](../../../apps/cd/azure/_img/aspnet-core-to-windows-vm/cicd-get-started-dotnetcore-sample.png) + +[!INCLUDE [temp](../_shared/vsts-and-azure-setup.md)] + +[!INCLUDE [temp](../_shared/create-azure-web-app.md)] + +[!INCLUDE [temp](../_shared/import-code-1.md)] + +```bash +https://github.com/adventworks/dotnetcore-sample +``` + +[!INCLUDE [temp](../_shared/import-code-2.md)] + +[!INCLUDE [temp](../_shared/set-up-ci-1.md)] + +In the right panel, select **ASP.NET Core**, and then click **Apply**. + +![Screenshot showing dotnet core template](../../../apps/aspnet/_shared/_img/apply-aspnet-core-build-template.png) + +[!INCLUDE [temp](../_shared/set-up-ci-2.md)] + +[!INCLUDE [temp](../_shared/set-up-ci-3.md)] + +[!INCLUDE [temp](../_shared/set-up-cd-1.md)] + +![Screenshot showing release action on build summary](../../../apps/cd/azure/_shared/_img/cicd-get-started-dotnetcore-release.png) + +[!INCLUDE [temp](../_shared/set-up-cd-2.md)] + +[!INCLUDE [temp](../_shared/set-up-cd-3.md)] + +## Update to redeploy the code + +Navigate to the **Code** hub in the VSTS portal. Navigate to **Views/Home/Index.cshtml** file. Make the following simple change to that file by selecting the edit action. + +![Screenshot showing update to code](../../../apps/cd/azure/_shared/_img/aspnet-core-code-change.png) + +Add the following line of text above the carousel display in the page: +``` +

    Demo of ASP.NET Core CI/CD!!

    +``` + +Commit your changes in Git. This change triggers a CI build, and when the build completes, it triggers an automatic deployment to Azure web app. + +[!INCLUDE [temp](../_shared/browse-to-web-app.md)] + +[!INCLUDE [temp](../_shared/clean-up-resources.md)] diff --git a/docs/build-release/archive/apps/aspnet/aspnet-from-vsts-to-windows-vm.md b/docs/build-release/archive/apps/aspnet/aspnet-from-vsts-to-windows-vm.md new file mode 100644 index 00000000000..47198951c1b --- /dev/null +++ b/docs/build-release/archive/apps/aspnet/aspnet-from-vsts-to-windows-vm.md @@ -0,0 +1,101 @@ +--- +title: Quick Start - Build and Deploy a ASP.NET app | VSTS +description: Set up a continuous integration (CI) build for your ASP.NET app, and then a continuous deployment (CD) release to Azure using Visual Studio Team Services +services: vsts +documentationcenter: '' +author: alewis +manager: douge +editor: '' + +ms.assetid: 6728CA49-5D44-4603-96E1-3BC3CF8D9793 +ms.workload: web +ms.tgt_pltfrm: na +ms.devlang: aspnet +ms.author: alewis +ms.date: 06/27/2017 +ms.custom: mvc +--- + +# Implement a CI/CD process to build and deploy your ASP.NET app to Azure + +VSTS provides a highly customizable continuous integration (CI) and deployment (CD) automation system for your +ASP.NET apps. +This quickstart shows how to set up CI and CD to deploy +an ASP.NET app +to a Windows virtual machine in Azure. +You create the virtual machine using Azure Powershell, and then you set up CI/CD in VSTS. In the CI process, you build the app using MSBuild and run tests using VSTest. + +![Screenshot showing ASP.NET web app](_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-sample.png) + +[!INCLUDE [temp](../_shared/vsts-and-azure-setup.md)] + +On your dev machine, you need Azure PowerShell module version 4.0 or newer. See [Install and configure Azure PowerShell](https://docs.microsoft.com/en-us/powershell/azure/install-azurerm-ps?view=azurermps-4.2.0). + +[!INCLUDE [temp](../_shared/create-azure-windows-vm.md)] + +[!INCLUDE [temp](../_shared/create-deployment-group.md)] + +[!INCLUDE [temp](../_shared/import-code-1.md)] + +```bash +https://github.com/adventworks/aspnet4-sample +``` + +[!INCLUDE [temp](../_shared/import-code-2.md)] + +[!INCLUDE [temp](../_shared/set-up-ci-1.md)] + +In the right panel, select **ASP.NET**, and then click **Apply**. + +![Screenshot showing ASP.NET template](./_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-apply-template.png) + +[!INCLUDE [temp](../_shared/set-up-ci-2.md)] + +[!INCLUDE [temp](../_shared/set-up-ci-3.md)] + +[!INCLUDE [temp](../_shared/set-up-cd-1.md)] + +![Screenshot showing build summary](_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-build-summary.png) + +In the dialog that prompts to **Create release definition**, select **Yes**. + +In the **Create release definition** wizard, select the **IIS Website and SQL Database deployment** template, and click **Apply**. + +![Screenshot showing IIS template](_img/aspnet-from-vsts-to-windows-vm/select-iis-website-and-sql-database-deployment-release-template.png) + +Click **Tasks**, and then select the **SQL Deployment** phase. Click 'X' to delete this phase. We won't be deploying a database in this quickstart. + +Select **IIS Deployment** phase. For the **Deployment Group**, select the deployment group you created earlier, such as *myIIS*. In the **Machine tags** box, select **Add** and choose the *Web* tag. + +Select the **IIS Web App Manage** task; click 'X' to delete this task. We will not create a new website for this quickstart. Instead, we will deploy to the **default web site**. + +Select the **IIS Web App Deploy** task to configure your IIS instance settings as follows. For **Website Name**, enter *default web site*. Leave all the other default settings. + +![Screenshot showing release definition](_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-release-definition.png) + +[!INCLUDE [temp](../_shared//set-up-cd-3.md)] + +## Update to redeploy the code + +Navigate to the **Code** hub in the VSTS portal. Navigate to **Views/Home/Index.cshtml** file. Make the following simple change to that file by selecting the edit action. + +![Screenshot showing update to code](./_img/aspnet-from-vsts-to-windows-vm/cicd-get-started-aspnet-update-code.png) + +Add the following line of text as indicated in the image above: +``` +

    Demo of CI/CD!!

    +``` + +Commit your changes in Git. This change triggers a CI build, and when the build completes, it triggers an automatic deployment to Azure web app. + +## Browse to the app + +Once deployment has completed, open the browser and test your web app. + +```bash +http:// +``` + +**Congratulations!** You've deployed changes to your application using CI/CD. + +[!INCLUDE [temp](../_shared/clean-up-resources.md)] diff --git a/docs/build-release/archive/apps/aspnet/aspnetcore-docker-to-azure.md b/docs/build-release/archive/apps/aspnet/aspnetcore-docker-to-azure.md new file mode 100644 index 00000000000..74d6eeeeea3 --- /dev/null +++ b/docs/build-release/archive/apps/aspnet/aspnetcore-docker-to-azure.md @@ -0,0 +1,89 @@ +--- +title: Deploy an ASP.NET Core app with Docker to Azure +description: Automatically generate a CI/CD pipeline to deploy an ASP.NET Core web app with Docker using Visual Studio +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 88920723-19B7-4A49-96E1-9618C384F730 +ms.manager: douge +ms.author: alewis +ms.date: 11/10/2016 +--- + +# Use Visual Studio to automatically generate a CI/CD pipeline to deploy an ASP.NET Core web app with Docker to Azure + +[!INCLUDE [temp](../../../_shared/version.md)] + +[ASP.NET Core](http://www.asp.net/core) is a lean and composable framework for building web and cloud applications, which can be deployed to [Docker containers](https://www.docker.com/what-docker) running on an [Azure Container Service](https://azure.microsoft.com/documentation/articles/container-service-intro/). Visual Studio 2017 RC.3 and newer with the [Continuous Delivery Tools for Visual Studio extension](http://aka.ms/CD4VS) provide an easy way to set up a full continuous integration (CI) and continuous deployment (CD) pipeline for such applications. + +[!INCLUDE [temp](../../../apps/aspnet/_shared/ci-cd-description.md)] + +## Creating the release pipeline from Visual Studio + +1. Make sure you have a Docker-enabled ASP.NET Core solution. See the [Q&A below](#new_solution) if you don't have one yet. +1. If you haven't already done so, add the project to a source control repository in your VSTS account by clicking first on **Add to Source Control** in the Visual Studio status bar (creating a local repository), then following the instructions in the Team Explorer pane to publish to a remote repository in VSTS. +1. Select the **Tools > Extensions and Updates...** command, then search for and install the "Continuous Delivery Tools for Visual Studio" extension that matches your version of Visual Studio. (Or install from the [Visual Studio Gallery](http://aka.ms/CD4VS).) +1. In Visual Studio Solution Explorer, right-click the project and select **Configure Continuous Delivery...**. +1. In the Configure Continuous Delivery dialog, select an Azure account that has Azure Container Service running. See the [Q&A below](#create_acs) for information on creating the service. +1. Click Create and watch the output window for completion of the process, which will include direct links to the team project, build definition, and release definition. A build will also have been started automatically, so you can monitor the progress of the build and deployment in the VSTS portal. + +> [!Note] +> +> For a detailed walkthrough of manually creating a release pipeline, including the necessary Azure Container Service, see the following article in the Azure documentation: [Continuous Integration and Deployment of Multi-Container Docker Applications to Azure Container Service](https://azure.microsoft.com/en-us/documentation/articles/container-service-setup-ci-cd/). + +## Explore the release pipeline + +1. Navigate to your team project using the link in the Visual Studio output window after **Configure Continuous Delivery...** command. +1. Click on the **Build & Release** tab. +1. Click **Builds**, select the build definition shown there, and click **Edit**. + 1. The sequence of tasks that appear are what builds the application when code is committed to the repository, and includes tasks to run unit tests. + 1. At the end you'll see tasks that publish the build artifacts to a staging directory. This is the location that the release definition monitors, such that when new artifacts appear, the release definition will begin a new deployment. + 1. You can examine the artifacts yourself by clicking **Artifacts** and then **Explore**. + 1. You can always customize the build definition as desired. + +1. Click on **Releases**, select the release definition shown there, and click **Edit**. + 1. A release definition takes build artifacts as input and produces one or more deployments as output. + 1. On the left side of the editor you'll see three environments named Dev, Test, and Production. This is a typical arrangement for continuous deployment within which you can add additional tests in each environment as well as manual approvals. + +1. In the process of setting up the release pipeline, VSTS will have already queued a build that, when successful, triggered a release. You can examine the results through both the **Builds** and **Releases** tab. If the deployment was successful, you can visit the web site and see it running. + +[!INCLUDE [include](../../../apps/aspnet/_shared/commit-build-release.md)] + +## Q&A + +

    How do I create a Docker-enabled ASP.NET Core solution?

    + +> [!NOTE] +> +> Docker-enabled ASP.NET Core projects are supported only in Visual Studio 2017 RC.3 and higher. + +1. In Visual Studio, [connect first to a Team Project](../../../../connect/connect-team-projects.md#visual-studio). + +1. On the Team Explorer home page under **Solutions**, click **New**. (By connecting to a Team Project first and using the command in Team Explorer, the new project is automatically added to source control in the Team Project.) + +1. In the **New Project** dialog box, search on "ASP.NET Core". + +1. Select **ASP.NET Core Web Application (.NET Core)**from the list and click **OK**. + +1. Select **Web Application** from the template list. + +1. Check that **Authentication** is set to **No Authentication**. If not, click **Change Authentication** to set it. + +1. Set **Enable Docker Support** + +1. Click the **Docker for Windows** link to install Docker. + +1. Click **OK** to complete creating the project. + +

    How do I create an Azure Container Service?

    + +Follow the instructions on [Deploy an Azure Container Service cluster](https://azure.microsoft.com/documentation/articles/container-service-deployment/). Alternately, see [Continuous Integration and Deployment of Multi-Container Docker Applications to Azure Container Service](https://azure.microsoft.com/en-us/documentation/articles/container-service-setup-ci-cd/). Note that you'll always be asked to create a new resource group for the container service because the service is composed of many separate resources that you'll certainly want to manage as a group. + +A key piece of information you need for the service is the public SSH key. Creating this is described in [How to use SSH keys with Windows on Azure](https://azure.microsoft.com/documentation/articles/virtual-machines-linux-ssh-from-windows/#which-key-files-do-you-need-to-create). In this topic, be sure to read both the "Create a private key" and "Create a private key for PuTTY" because the latter describes how to obtain the public SSH key that you need in the Azure portal. + +We also recommend that for testing purposes you minimize costs by selecting a small **Agent virtual machine size** in step 3 of the configuration ("Azure Container service settings"). Deploying an Azure Container Service will create a virtual machine in the selected price tier (see [pricing](https://azure.microsoft.com/pricing/details/container-service/)). Because this incurs hourly costs, you'll also want to stop the service after you've completed your evaluation and restart it when you're ready for ongoing use. + +### I created an Azure Container Service but it doesn't appear in Visual Studio's Configure Continuous Delivery dialog? + +Try reselecting your User account to refresh the dialog, or close it and reopen it. A newly-created Azure Container Service should then appear. + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] diff --git a/docs/build-release/archive/apps/java/_img/maven-to-azure/azure-java-deployment-variables.png b/docs/build-release/archive/apps/java/_img/maven-to-azure/azure-java-deployment-variables.png new file mode 100644 index 00000000000..e10478771e6 Binary files /dev/null and b/docs/build-release/archive/apps/java/_img/maven-to-azure/azure-java-deployment-variables.png differ diff --git a/docs/build-release/archive/apps/java/_img/quick-to-azure/cicd-get-started-update-code.png b/docs/build-release/archive/apps/java/_img/quick-to-azure/cicd-get-started-update-code.png new file mode 100644 index 00000000000..97d75169b4d Binary files /dev/null and b/docs/build-release/archive/apps/java/_img/quick-to-azure/cicd-get-started-update-code.png differ diff --git a/docs/build-release/archive/apps/java/_img/quick-to-azure/java-web-app.png b/docs/build-release/archive/apps/java/_img/quick-to-azure/java-web-app.png new file mode 100644 index 00000000000..29913c53ba5 Binary files /dev/null and b/docs/build-release/archive/apps/java/_img/quick-to-azure/java-web-app.png differ diff --git a/docs/build-release/archive/apps/java/_shared/_img/deployment-credentials.png b/docs/build-release/archive/apps/java/_shared/_img/deployment-credentials.png new file mode 100644 index 00000000000..6cb4fd2fd31 Binary files /dev/null and b/docs/build-release/archive/apps/java/_shared/_img/deployment-credentials.png differ diff --git a/docs/build-release/archive/apps/java/_shared/java-web-app-sample-link.md b/docs/build-release/archive/apps/java/_shared/java-web-app-sample-link.md new file mode 100644 index 00000000000..2112f75fb07 --- /dev/null +++ b/docs/build-release/archive/apps/java/_shared/java-web-app-sample-link.md @@ -0,0 +1,4 @@ +If you don't have any code, you can [download our Hello world Java web app](http://download.microsoft.com/download/9/F/D/9FDE173C-5213-4C6F-AED8-BD64A4658B08/java-maven-hello-world-app.zip). + +What code is in the sample app? + diff --git a/docs/build-release/archive/apps/java/_shared/java-web-app-sample-qa.md b/docs/build-release/archive/apps/java/_shared/java-web-app-sample-qa.md new file mode 100644 index 00000000000..e1953ba8519 --- /dev/null +++ b/docs/build-release/archive/apps/java/_shared/java-web-app-sample-qa.md @@ -0,0 +1,21 @@ + +### What code is in the sample app? + +We used Eclipse to create our [Hello World Java sample web app](http://download.microsoft.com/download/9/F/D/9FDE173C-5213-4C6F-AED8-BD64A4658B08/java-maven-hello-world-app.zip). We adapted a project created from the [maven webapp archetype](http://maven.apache.org/archetypes/maven-archetype-webapp/). + +``` +|-- .gitignore +`-- helloworld + |-- .classpath + |-- .project + |-- pom.xml + `-- src + `-- main + `-- webapp + |-- WEB-INF + | `-- web.xml + `-- index.jsp + +``` + +The pom.xml file enables you to build with Maven. The .gitignore file keeps build artifacts on your dev machine from getting into your Git repo. diff --git a/docs/build-release/archive/apps/java/maven-to-azure.md b/docs/build-release/archive/apps/java/maven-to-azure.md new file mode 100644 index 00000000000..c5fe9d83a5f --- /dev/null +++ b/docs/build-release/archive/apps/java/maven-to-azure.md @@ -0,0 +1,135 @@ +--- +title: Build and Deploy your Java application to an Azure web app +description: Build and Deploy your Java application to an Azure web app +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: E6A051F3-8B84-4724-9110-F84DB1F3DCD5 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Build and Deploy your Java app to an Azure web app + +**[VSTS](quick-to-azure.md) | TFS 2017 RTM** + +In just a few steps you can build and deploy your Java app to Azure. This works from both the VSTS service and your on-premises Team Foundation Server. + +## Upload your code + +Upload your code to VSTS or your on-premises Team Foundation Server. Either push your code to Git or check in your code to TFVC. + +[!INCLUDE [temp](_shared/java-web-app-sample-link.md)] + +## Enable Java, Apache Tomcat, and FTP for your Azure web app + +0. Sign in to the [Azure portal](https://portal.azure.com/). + +0. Edit or [create a Java web app](https://azure.microsoft.com/en-us/documentation/articles/web-sites-java-apps/get-started/) and enable Apache Tomcat. + +0. Click the deployment credentials part (outlined in red below). Create a user name and password. Click Save. If you previously enabled publishing for a web app, you don't need to do this step. + + ![Create FTP deployment credentials](_shared/_img/deployment-credentials.png) + +## Create the definition + +
      +[!INCLUDE [include](../../../_shared/begin-create-build-definition.md)] + +
    1. Click Empty to start with an empty definition.
    2. +
    + +### Define variables to store Azure FTP authentication data + +On the Variables tab, store the data needed to copy files to Azure via FTP. Copy this data from the [Azure portal](https://portal.azure.com/). There is nothing special about the variable names we suggest below, so you can make them whatever you prefer. + +| Name | Notes | +|---|---|---| +| azure.ftp.userName | Take this value from your Azure web app essentials. For example if the name of your Azure web app is FabrikamJava, then the value would be : ```FabrikamJava\YourUserName``` | +| azure.ftp.password | Take this value from your Azure subscription deployment settings. In your build definition variables, make sure to click secret to avoid exposing this password value. [I don't want to use my Azure subscription FTP credentials. Can I use credentials scoped to my Azure web app?](#azure_site_ftp) | + +![Java deployment build variables](_img/maven-to-azure/azure-java-deployment-variables.png) + +### Add build steps + +On the Build tab, add these steps: + + + + + + + + + + + + + + + + +
    ![Build: Maven](../../../tasks/build/_img/maven.png) **Build: Maven** +

    Build the app.

    +
      +
    • Maven POM file: Browse and select your pom.xml file. For example, ```helloworld/pom.xml```.
    • +
    +
    ![Utility: cURL Upload Files](../../../tasks/utility/_img/curl-upload-files.png) **Utility: cURL Upload Files** +

    Copy the .war file to Azure.

    +
      +
    • Files: ```helloworld/target/hello.war```
    • +
    • Username: ```$(azure.ftp.userName)```
    • +
    • Password: ```$(azure.ftp.password)```
    • +
    • URL: Take this value from your Azure web app essentials page on the [Azure portal](https://portal.azure.com/). For example, ```ftp://waws-prod-sn1-011.ftp.azurewebsites.windows.net```
    • +
    • Optional Arguments: ```-Q "+CWD site/wwwroot/webapps"```
    • +
    +
    ![Utility: Copy and Publish Build Artifacts](../../../tasks/utility/_img/publish-build-artifacts.png) **Build: Publish Build Artifacts** +

    (Optional) Drop some of the build outputs, such as the .war file as we do in the example below.

    +
      +
    • Copy Root: ```helloworld/target```
    • +
    • Contents: ```hello.war```
    • +
    • Artifact name: ```drop```
    • +
    • Artifact Type: ```Server```
    • +
    +
    + +[!INCLUDE [temp](../_shared/definition-finish-and-test.md)] + +After a successful build, check your site: ```http://{web_app_name}.azurewebsites.net/{war_file_name}``` + +## Q&A + + + +[!INCLUDE [temp](_shared/java-web-app-sample-qa.md)] + + + +### I don't want to use my Azure subscription FTP credentials. Can I use credentials scoped to my Azure web app? + +A: Yes. + +0. Sign in to the [Azure portal](https://portal.azure.com/). + +0. Open your web app and download the publish profile. + +0. Open your .PublishSettings file and copy some of the data from the ```publishMethod="FTP"``` section into your build variables. + +| Name | Value from .PublishSettings file attribute| Notes | +|---|---|---| +| azure.ftp.userName | userName | For example, ```YourAppName\$YourAppName``` | +| azure.ftp.password | userPWD| In your build definition variables, make sure to click secret to avoid exposing this password value. | + + +### How do I continually deliver my app and manage my releases? + +[Learn about Release Management](../../../concepts/definitions/release/index.md) + + +[!INCLUDE [temp](../../../_shared/qa-definition-common-all-platforms.md)] + +[!INCLUDE [temp](../../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/archive/apps/java/quick-to-azure.md b/docs/build-release/archive/apps/java/quick-to-azure.md new file mode 100644 index 00000000000..dd4423f7757 --- /dev/null +++ b/docs/build-release/archive/apps/java/quick-to-azure.md @@ -0,0 +1,74 @@ +--- +title: Quick Start - Build and Deploy a Java app | VSTS +description: Set up a continuous integration (CI) build for your Java app, and then a continuous deployment (CD) release to Azure using Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: E67B2B25-5928-4784-A6CD-E998F4FDE620 +ms.manager: douge +ms.author: alewis +ms.date: 06/27/2017 +--- + +# Implement a CI/CD process to build and deploy your Java app to Azure + +VSTS provides a highly customizable continuous integration (CI) and deployment (CD) automation system for your +Java apps. +This quickstart shows how to set up CI and CD to deploy +a Java app. +to an Azure web app. +You create the web app using the Azure CLI, then set up CI/CD in VSTS. +In the CI process, you build the Java app and run JUnit tests using Maven. In the CD process, you deploy the build to an Azure web app. + +![java web app](_img/quick-to-azure/java-web-app.png) + +[!INCLUDE [temp](../_shared/vsts-and-azure-setup.md)] + +[!INCLUDE [temp](../_shared/create-azure-web-app.md)] + +Set up the Java runtime configuration that your app needs with the `az appservice web config update` command. The following command configures the web app to run on a recent Java 8 JDK and Apache Tomcat 8.0 + +```azurecli-interactive +az webapp config set --name --resource-group myResourceGroup --java-version 1.8 --java-container Tomcat --java-container-version 8.0 +``` + +[!INCLUDE [temp](../_shared/import-code-1.md)] + +```bash +https://github.com/Adventworks/java-sample +``` + +[!INCLUDE [temp](../_shared/import-code-2.md)] + +[!INCLUDE [temp](../_shared/set-up-ci-1.md)] + +In the right panel, search for `java`, select **Maven**, and then click **Apply**. + +[!INCLUDE [temp](../_shared/set-up-ci-2.md)] + +[!INCLUDE [temp](../_shared/set-up-cd-1.md)] + +[!INCLUDE [temp](../_shared/set-up-cd-2.md)] + +[!INCLUDE [temp](../_shared/set-up-cd-3.md)] + +## Update to redeploy the code + +Navigate to the **Code** hub in the VSTS portal. Navigate to **src/main/webapp/index.jsp** file. Make the following simple change to that file by selecting the edit action. + +![Screenshot showing update to code](_img/quick-to-azure/cicd-get-started-update-code.png) + +Change the following line of text: +``` +

    Hello World!

    +``` + +to the following: +``` +

    Demo of CI/CD!!

    +``` + +Commit your changes in Git. This change triggers a CI build, and when the build completes, it triggers an automatic deployment to Azure web app. + +[!INCLUDE [temp](../_shared/browse-to-web-app.md)] + +[!INCLUDE [temp](../_shared/clean-up-resources.md)] diff --git a/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-2.png b/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-2.png new file mode 100644 index 00000000000..694c0d0c582 Binary files /dev/null and b/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-2.png differ diff --git a/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-3.png b/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-3.png new file mode 100644 index 00000000000..66ac7bda3bc Binary files /dev/null and b/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-3.png differ diff --git a/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-5.png b/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-5.png new file mode 100644 index 00000000000..4c9502f6c12 Binary files /dev/null and b/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-5.png differ diff --git a/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-9.png b/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-9.png new file mode 100644 index 00000000000..de51e82f742 Binary files /dev/null and b/docs/build-release/archive/apps/mobile/_img/cordova-build/tfs2015-9.png differ diff --git a/docs/build-release/archive/apps/mobile/_img/cordova-command/cordova-command-1.png b/docs/build-release/archive/apps/mobile/_img/cordova-command/cordova-command-1.png new file mode 100644 index 00000000000..67a079330b8 Binary files /dev/null and b/docs/build-release/archive/apps/mobile/_img/cordova-command/cordova-command-1.png differ diff --git a/docs/build-release/archive/apps/mobile/_img/cordova-command/cordova-command-2.png b/docs/build-release/archive/apps/mobile/_img/cordova-command/cordova-command-2.png new file mode 100644 index 00000000000..9ea485207d6 Binary files /dev/null and b/docs/build-release/archive/apps/mobile/_img/cordova-command/cordova-command-2.png differ diff --git a/docs/build-release/archive/apps/mobile/cordova-build.md b/docs/build-release/archive/apps/mobile/cordova-build.md new file mode 100644 index 00000000000..a004c8fa341 --- /dev/null +++ b/docs/build-release/archive/apps/mobile/cordova-build.md @@ -0,0 +1,292 @@ +--- +title: Build and Test Cordova Projects +description: Build and Test Cordova Projects with VSTS or Team Foundation Server 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 22fc4e22-ef0a-4c55-8cce-20ad2fa14342 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Build Apache Cordova apps + +[!INCLUDE [temp](../../../_shared/version.md)] + +> **Notice**: Apple's WWDR certificate expired on Feb 14th and as a result you may experience signing failures if you have not updated the cert and **removed the old one**. Follow the steps outlined by Apple under [What should I do if Xcode doesn’t recognize my distribution certificate?](https://developer.apple.com/support/certificates/expiration/) to resolve the problem. Note that this also affects development certs despite the title. + +Visual Studio Team Services (formerly Visual Studio Online) and Team Foundation Services (TFS) 2015 can be used for building and testing Cordova apps in a Continuous Integration (CI) environment thanks to a new [cross-platform agent](http://go.microsoft.com/fwlink/?LinkID=533789) that supports OSX. The end result is you can use VSTS or TFS to build projects created using [Tools for Apache Cordova](http://go.microsoft.com/fwlink/?LinkID=536496) or *any Cordova compliant CLI like the Ionic, PhoneGap, or TACO CLI*. + +To streamline CI for Cordova-based projects, we have created a series of build tasks (or steps) that you can use: **Cordova Build**, **[Cordova Command](./cordova-command.md)**, **[Ionic Command](./cordova-command.md)**, and **[PhoneGap Command](./cordova-command.md)**. These tasks will automatically handle fetching the correct version of the appropriate CLI and even setup the correct version of Node.js for you if not present! + +**Article sections:** +* [Installing the VSTS Extension for Cordova](#install) +* [Building Android, Windows, or Windows Phone 8.0 on Windows](#win) +* [Building iOS on OSX](#osx) +* [Optional: Using Gulp for script compilation and running tests](#gulp) +* [In Depth: Custom Build Agent Setup](#agentsetup) + + +## Installing the Cordova Build task +To setup a Cordova build in VSTS or TFS 2015, you will need to install the Cordova Build task in your collection. + +* **VSTS / Visual Studio Online**: Simply install the [VSTS Extension for Cordova](http://go.microsoft.com/fwlink/?LinkID=691835). +* **TFS 2015 Update 1 and Earlier**: TFS 2015 Update 1 and below does not support installing VSTS Extensions. Follow the instructions in the [cordova-tasks](http://go.microsoft.com/fwlink/?LinkID=691187) repository to install. + +## Project setup and build definitions +We'll assume for the purposes of this tutorial that you want to build a Cordova app for Android, iOS, and Windows and you want to build everything on Windows except iOS. We will accomplish this by using the concept of a "demand" in two separate build definitions to route the work to the correct OS. + +### Create the definition +0. Open your team project in your web browser. + + * On-premises ```http://{your_server}:8080/tfs/DefaultCollection/{your_team_project}``` + * VSTS ```https://{your_account}.visualstudio.com/DefaultCollection/{your_team_project}``` + +0. Create a build definition. + + ![New build definition](../../../_shared/_img/create-new-build-definition.png) + +0. Click Empty to start with an empty definition. + + +### Building Android, Windows, or Windows Phone 8.0 on Windows +Detailed instructions on creating build definitions in TFS 2015 can be found in [its documentation](http://go.microsoft.com/fwlink/?LinkID=533772), but here are the specific settings you will need to use to configure a build to run on a Windows agent. We'll start with Android but the steps here generally apply to the Windows and WP8 platforms as well. + +1. First we need to ensure that this particular build runs on Windows rather than OSX. Under the **General** tab, add a demand that **cmd** exists. + + ![Windows Build Definition - Demand](_img/cordova-build/tfs2015-3.png) + +2. Next we will add some build steps. + + + + + + + + + + +
    ![Build: Cordova Build](https://github.com/Microsoft/vso-cordova-tasks/blob/master/Tasks/CordovaBuild/icon.png?raw=true)
    **Build: Cordova Build**
    +

    Settings:

    +
      +
    • **Platform**: android
    • +
    • **Configuration**: debug or release. You can also use a variable from the Variables tab to allow you to select at build time.
    • +
    • **Cordova Version**: Version of the Cordova CLI you want to use to build. If you're using Tools for Apache Cordova you can leave this blank and the correct version will be used based on the contents of taco.json. Otherwise, if not specified, it uses the version specified by the CORDOVA_DEFAULT_VERSION environment variable (like in VSTS) and falls back to the latest version if no environment variable is set.
    • +
    • **Android**: You may use these values to specify signing information for this build. See **[securing your signing keys](../../../apps/mobile/secure-certs.md)** for details.
    • +
    • **Advanced > Working Directory**: Location of the Cordova project itself inside your repository.
    • +
    +
    ![Utility: Copy and Publish Build Artifacts](../../../tasks/utility/_img/copy-and-publish-build-artifacts.png)
    **Utility: Copy and Publish Build Artifacts**
    +

    Settings:

    +
      +
    • **Copy Root**: Location specified in Advanced > Output Directory in the Cordova Build step. Defaults to "bin."
    • +
    • **Contents**: \*
    • +
    • **Artifact Name**: bin
    • +
    • **Artifact Type**: Server
    • +
    +
    + +3. Finally, save and click "Queue Build..." to test it out! + +That's it for Windows! You're now able to build Android. To build Windows or Windows Phone 8.0, follow these same steps and replace the "platform" value with "windows" or "wp8" respectively. + +#### Optional: Multi-Configuration setup for Android, Windows, Windows Phone 8.0 +If you intend to build more than just one platform on Windows you can use something called a "Multi-Configuration" setup to build for multiple platforms from a single build definition. + +1. Go to the **Variables** tab and enter a variable called **Platform** with a comma separated list of platforms you want to build. Ex: android, windows, wp8 + +2. Go to the **Options** tab, check **MultiConfiguration**, and set **Multipliers** to **Platform** + +3. Update the **Platform** value for the **Cordova Build** step to be **$(Platform)** and update any platform specific options as appropriate. + +Next time you build, it will queue up and build all three platforms and store separate artifacts for each using the platform name. + + +### Building iOS on OSX +Now let's create a version of this same build definition to target iOS that will run on a configured cross-platform agent on OSX. + +> **Troubleshooting Tip**: You should either setup the cross-platform agent as a launch agent (./svc.sh install agent) or run it as an interactive process (node agent/vsoagent.js) when building an Cordova project targeting iOS due to issues with code signing certificate storage when using a launch daemon. + +1. Right click on the Windows build definition and select "Clone." Once you save you should give this definition a name that indicates it's the iOS build. + +2. Change the **Platform** value for the **Cordova Build** step to **ios** + +3. Update the **iOS** category for the **Cordova Build** step. See **[securing your signing keys](../../../apps/mobile/secure-certs.md)** for details on the appropriate options to set for your situation. Be sure to check out the "P12 Certificate File" and "Provisioning Profile File" options that can really streamline setup! The Xcode Developer Path option also allows you to specify the path of a different version of Xcode than you have installed locally. (Ex: /Applicaitons/Xcode6.4.app/Contents/Developer will use Xcode 6.4 in MacinCloud.) + + ![Windows Build Definition - npm](_img/cordova-build/tfs2015-2.png) + +4. Finally, we need to add a demand that will route builds to OSX machines rather than Windows. Under the **General** tab, remove the "cmd" demand and add a demand that **xcode** exists. + + ![OSX Build Definition - Demand](_img/cordova-build/tfs2015-5.png) + +> **Troubleshooting Tip:** If you encounter a **spawn EACCES error** when building on a Mac or Linux, be sure all files in the hooks folder to have an "execute bit" set as this a requirement for Cordova. To resolve, add an execute bit to the files in source control or add the following using the Command Line task for each file in the folder: chmod +x <file name goes here> + +You are now all set! You can configure either of these build definitions further as you see fit including having them automatically fire off on check-in or adding other validations. + +>**Troubleshooting Tip**: See [Troubleshooting Tips for Building on OSX in the general Tools for Apache Cordova CI tutorial](http://go.microsoft.com/fwlink/?LinkID=691194) for tips on resolving common build errors that can occur when building Cordova projects on that operating system. + + +## Optional: Using Gulp for script compilation and running tests +Using Gulp in a CI environment can allow you to easily compile / transpile scripts (TypeScript, LESS, SASS) and even run tests thanks to the "Gulp" and "npm install" build steps. + + +###TypeScript example +To add TypeScript compilation into your build definition using Gulp, follow these steps: + +1. Take the sample files (gulpfile.js, package.json, karma.config.js) from the "samples/gulp" folder [in this GitHub repo](http://go.microsoft.com/fwlink/?LinkID=691189) and place them in the root of your project Cordova project + +2. Add these files to source control with your project. From here you can modify gulpfile.js and add other Gulp plugins as you see fit. + +3. Next we will add some Gulp related build steps **before** the other steps in the definition. + + + + + + + + + + +
    ![Package: npm](../../../tasks/package/_img/npm.png)
    **Package: npm** (or the older npm install)
    +

    Settings:

    +
      +
    • **Command:** install
    • +
    • **Advanced > Arguments:** --no-optional
    • +
    • **Advanced > Working Directory**: Location of the Cordova project itself inside your solution (not the solution root).
    • +
    +

    If you encounter EPERM errors you may also need to specify the --force option.

    +
    ![Build: Gulp](../../../tasks/build/_img/gulp.png)
    **Build: Gulp**
    +

    Settings:

    +
      +
    • **Gulp File Path**: Location gulpfile.js in your Cordova project.
    • +
    • **Gulp Task(s)**: The Gulp task you want to run. In this case, we'll run **scripts**
    • +
    • **Advanced > Working Directory**: Location of the Cordova project itself inside your repository.
    • +
    +
    + + +### Using Gulp to run tests +You can also use the exact same Gulp build step above to run your tests! The scripts [from the GitHub repo](http://go.microsoft.com/fwlink/?LinkID=691189) mentioned above are ready for use with [Jasmine](http://jasmine.github.io/), [Karma](http://karma-runner.github.io/), and [PhantomJS](http://phantomjs.org/). See the [Cordova test tutorials](http://go.microsoft.com/fwlink/?LinkID=691195) for details on setting up Gulp to run your tests. + +Next, we will configure the definition to publish your test results to VSTS or TFS. + + + + + + + + + + +
    ![Build: Gulp](../../../tasks/build/_img/gulp.png)
    **Build: Gulp**
    +

    Update the **Gulp Task(s)** option in the Gulp step above to reference your "test" task. A value of "scripts test" will first compile TypeScript (or anything else you have configured) and then run tests.

    +
    ![Test: Publish Test Results](https://github.com/Microsoft/vso-agent-tasks/blob/master/Tasks/PublishTestResults/icon.png?raw=true)
    **Test: Publish Test Results**
    +

    Settings:

    +
      +
    • **Test Result Format**: The Karma config in the sample is set up to output JUnit formatted results
    • +
    • **Test Results Files:** The Karma config in the sample is set up to drop results in a _results folder
    • +
    • **Control Options > Always Run:** Be sure to check this option so your test results are published when the tests fail.
    • +
    +
    + +![Windows Build Definition - npm](_img/cordova-build/tfs2015-9.png) + +That's it! + + +##In Depth: Private build agent setup +As of this writing, you can build Cordova apps targeting Android, Windows, and Windows Phone using the Hosted Agent Pool in Visual Studio Team Services. This allows you to build without setting up a Windows build agent on premise. MacinCloud provides a [special plan](http://go.microsoft.com/fwlink/?LinkID=691834) and streamlined setup experience for VSTS agents targeted at buillding iOS in the cloud. All Cordova prerequisites should already be installed and configured when using the Hosted Agent Pool in VSTS or MacinCloud's special VSTS plan. + +If you are not using the VSTS Hosted Agent Pool or MacinCloud's streamlined [VSTS plan](http://go.microsoft.com/fwlink/?LinkID=691834), you can use your own hardware instead. Because of its design, you can easily install the Windows agent on Windows or the [cross-platform agent](http://go.microsoft.com/fwlink/?LinkID=533789) on a Mac and integrate with either TFS or Visual Studio Team Services. The build machine simply needs to have HTTP access to the server with your TFS collection or Visual Studio Team Services. + +### Custom Agent Setup +Since the build process we will describe here is not directly dependent on MSBuild or Visual Studio for Android, you have two options for installing prerequisites on Windows: + +1. You can install Visual Studio 2015 and select the Tools for Apache Cordova option and let it install the prerequisites for you. + +2. Otherwise you can manually install only the prerequisites needed for the specific platforms you intend to build. For example, you do not need to install Visual Studio at all if you only intend to target Android. See "Installing Dependencies" in the [general Tools for Apache Cordova CI tutorial](http://go.microsoft.com/fwlink/?LinkID=691196) for additional details. + +Next you will need to install the Windows build agent to build Android, Windows, or Windows Phone, and the [cross-platform build agent](http://go.microsoft.com/fwlink/?LinkID=533789) on a Mac if you intend to build iOS (and Android if you so desire). See [the new build system documentation](http://go.microsoft.com/fwlink/?LinkID=533772) for information on getting started with setting up an agent. It is important to note that you should setup the cross-platform agent as a **launch agent** (./svc.sh install agent) or run it as an **interactive process** (node agent/vsoagent.js) when building an Cordova project targeting iOS due to issues with code signing certificate storage when using a launch daemon. + +>**Troubleshooting Tip:** See [Internet Access & Proxy Setup" in the general Tools for Apache Cordova CI tutorial](http://go.microsoft.com/fwlink/?LinkID=691832) if your build servers have limited Internet connectivity or require routing traffic through a proxy. + +###Environment variables +You should set the following environment variables if they have not already been configured on each server you have configured a build agent. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariableRequired ForPurposeDefault Location (Visual Studio 2015)
    ANDROID_HOMEAndroidLocation of the Android SDKC:\Program Files (x86)\Android\android-sdk
    JAVA_HOMEAndroidLocation of JavaC:\Program Files (x86)\Java\jdk1.7.0\_55
    ANT_HOMEAndroid when building using Ant (not Gradle)Location of AntC:\Program Files (x86)\Microsoft Visual Studio 14.0\Apps\apache-ant-1.9.3
    GRADLE_USER_HOMEOptionalOverrides the default location Gradle build system dependencies should be installed when building Android using Cordova 5.0.0+If not specified, uses %USERPROFILE%\.gradle on Windows or ~/.gradle on OSX or Linux
    CORDOVA_CACHEOptionalOverrides the default location used by the Cordova Build Task to cache installs of multiple versions of Cordova.If not specified, uses %APPDATA%\cordova-cache on Windows and ~/.cordova-cache on OSX or Linux
    + +#### Setting your path + +The following will also need to be in your path: + +* **Node.js** should already be in your path on OSX/Linux simply by the fact that you've setup the cross-platform build agent. However, on Windows you should ensure **both** Node.js and the global modules folder (aka "prefix" location) is in your path as there a circumstances where one or the other may be missing. The default location of Node.js on Windows is **%PROGRAMFILES(x86)%\\nodejs** while the default location where global node modules are installed is **%APPDATA%\\npm**. + +* **Gulp** should also be installed globally if you intend to use the Gulp task. Once Node.js is installed, simply type **npm install -g gulp** from the command line. + +* **%ANT_HOME%\\bin** (or $ANT_HOME\bin on OSX/Linux) should be added to your path if you are using a version of Cordova < 5.0.0 or have checked the "Force Ant" build option. + +## More information +* [Learn about the Cordova and Ionic Command tasks](./cordova-command.md) +* [Learn about securing your signing keys](../../../apps/mobile/secure-certs.md) +* [Check out the source code](http://go.microsoft.com/fwlink/?LinkID=691187) +* [Learn about Tools for Apache Cordova](http://go.microsoft.com/fwlink/?LinkID=618473) +* [Read tutorials and learn about tips, tricks, and known issues for Cordova](http://go.microsoft.com/fwlink/?LinkID=618471) +* [Download samples from our Cordova Samples repository](http://github.com/Microsoft/cordova-samples) +* [Follow us on Twitter](https://twitter.com/VSCordovaTools) +* [Visit our site http://aka.ms/cordova](http://aka.ms/cordova) +* [Ask for help on StackOverflow](http://stackoverflow.com/questions/tagged/visual-studio-cordova) + +## Q&A + + + +[!INCLUDE [temp](../../../_shared/qa-definition-common-all-platforms.md)] + +[!INCLUDE [temp](../../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/archive/apps/mobile/cordova-command.md b/docs/build-release/archive/apps/mobile/cordova-command.md new file mode 100644 index 00000000000..f9d391a415c --- /dev/null +++ b/docs/build-release/archive/apps/mobile/cordova-command.md @@ -0,0 +1,84 @@ +--- +title: The Cordova/Ionic/PhoneGap Command Tasks +description: The Cordova/Ionic Command Tasks for VSTS and Team Foundation Services 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: be45c6df-5da8-4b1c-b5b8-3e579ab39096 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# The Cordova/Ionic/PhoneGap Command Tasks + +[!INCLUDE [temp](../../../_shared/version.md)] + +> **Notice**: Apple's WWDR certificate expired on Feb 14th and as a result you may experience signing failures if you have not updated the cert and **removed the old one**. Follow the steps outlined by Apple under [What should I do if Xcode doesn’t recognize my distribution certificate?](https://developer.apple.com/support/certificates/expiration/) to resolve the problem. Note that this also affects development certs despite the title. + +Visual Studio Team Services (formerly Visual Studio Online) and Team Foundation Services (TFS) 2015 can be used for building and testing Cordova apps in a Continuous Integration (CI) environment thanks to a new [cross-platform agent](http://go.microsoft.com/fwlink/?LinkID=533789) that supports OSX. The end result is you can use VSTS or TFS to build projects created using [Tools for Apache Cordova](http://go.microsoft.com/fwlink/?LinkID=536496) or *any Cordova compliant CLI like the Ionic, PhoneGap, or TACO CLI*. + +To streamline CI for Cordova-based projects, we have created a series of build tasks (or steps) that you can use: **[Cordova Build](./cordova-build.md)**, **Cordova Command**, **Ionic Command**, and **PhoneGap Command**. These tasks will automatically handle fetching the correct version of the appropriate CLI and even setup the correct version of Node.js for you if not present! + +Generally you should only need to use the **[Cordova Build](./cordova-build.md)** task even when building something like an Ionic project (and it has some useful features in this specific area). However, if you want to run a non-build CLI related command, use the Cordova and Ionic Command tasks. You can also use the PhoneGap Command task to execute non-build related commands or use [PhoneGap Build](https://build.phonegap.com/). See [PhoneGap CLI](http://docs.phonegap.com/references/phonegap-cli/remote-usage/) documentaiton for details. This article will specifically focus the Command tasks. See the [Cordova Build](./cordova-build.md) tutorial for details on building and testing along with information on setting up your own build agent. + +## Installing the Command tasks +To setup a Cordova build in VSTS or TFS 2015, you will need to install the Cordova Build task in your collection. + +- **VSTS / Visual Studio Online**: Simply install the [VSTS Extension for Cordova](http://go.microsoft.com/fwlink/?LinkID=691835). +- **TFS 2015 Update 1 and Earlier**: TFS 2015 Update 1 and below does not support installing VSTS Extensions. Follow the instructions in the [cordova-tasks](http://go.microsoft.com/fwlink/?LinkID=691187) repository to install. + +## The Cordova Command task +Add the Cordova Command task to your build definition by going to the "Build" tab, adding a new build step, and selecting **Cordova Command** from the **Build** category + +Available Settings: + - **Command**: The CLI command. For example "plugin". + - **Arguments**: Additional arguments for the command. Ex: "add cordova-plugin-camera" + - **Cordova Version**: Version of the Cordova CLI you want to use to run the command. If you're using Tools for Apache Cordova you can leave this blank and the correct version will be used based on the contents of taco.json. Otherwise, if not specified, it uses the version specified by the CORDOVA_DEFAULT_VERSION environment variable (like in VSTS) and falls back to the latest version if no environment variable is set. + - **Advanced > Working Directory**: Location of the Cordova project itself inside your solution (not the solution root). + +Next, given the task is cross-platform, if you want to be sure this build definition only runs on Windows or OSX, you will need to add a demand that "cmd" exists for Windows... + +![Windows Build Definition - Demand](_img/cordova-command/cordova-command-1.png) + +... or "xcode" exists for OSX... + +![OSX Build Definition - Demand](_img/cordova-command/cordova-command-2.png) + +## The Ionic Command task +The Ionic Command task is similar to the Cordova one. Add the Ionic Command task to your build definition by going to the "Build" tab, adding a new build step, and selecting **Ionic Command** from the **Build** category + +Available Settings: +* **Command**: The CLI command. For example "state". +* **Arguments**: Additional arguments for the command. Ex: "restore" +* **Ionic Version**: If not specified, uses the Ionic CLI version specified by the IONIC_DEFAULT_VERSION environment variable (like in VSTS) or the latest if no environment variable is set. +* **Cordova Version**: Version of Ionic you want to use to run the command. If left blank it uses the version specified by the CORDOVA_DEFAULT_VERSION environment variable (like in VSTS) and falls back to the latest version if no environment variable is set. +* **Advanced > Working Directory**: Location of the Cordova project itself inside your repository. + +> **Troubleshooting Tip:** If you encounter a **spawn EACCES error** when building on a Mac or Linux, be sure all files in the hooks folder to have an "execute bit" set as this a requirement for Cordova. To resolve, add an execute bit to the files in source control or add the following using the Command Line task: chmod +x hooks/after_prepare/010_add_platform_class.js + +## The PhoneGap Command task +The PhoneGap Command task is similar to the Cordova one. Add the PhoneGap Command task to your build definition by going to the "Build" tab, adding a new build step, and selecting **PhoneGap Command** from the **Build** category + +Available Settings: +* **Command**: The CLI command. For example "remote login". +* **Arguments**: Additional arguments for the command. +* **PhoneGap Version**: If not specified, uses the PhoneGap CLI version specified by the PHONEGAP_DEFAULT_VERSION environment variable (like in VSTS) or the latest if no environment variable is set. +* **Advanced > Working Directory**: Location of the Cordova project itself inside your repository. + +## More information +* [Learn about the Cordova Build task and setting up your own agent](./cordova-build.md) +* [Check out the source code](http://go.microsoft.com/fwlink/?LinkID=691187) +* [Learn about Tools for Apache Cordova](http://go.microsoft.com/fwlink/?LinkID=618473) +* [Read tutorials and learn about tips, tricks, and known issues for Cordova](http://go.microsoft.com/fwlink/?LinkID=618471) +* [Download samples from our Cordova Samples repository](http://github.com/Microsoft/cordova-samples) +* [Follow us on Twitter](https://twitter.com/VSCordovaTools) +* [Visit our site http://aka.ms/cordova](http://aka.ms/cordova) +* [Ask for help on StackOverflow](http://stackoverflow.com/questions/tagged/visual-studio-cordova) + +## Q&A + + + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/archive/apps/nodejs/_img/cicd-get-started-nodejs-build-summary.png b/docs/build-release/archive/apps/nodejs/_img/cicd-get-started-nodejs-build-summary.png new file mode 100644 index 00000000000..417dff07148 Binary files /dev/null and b/docs/build-release/archive/apps/nodejs/_img/cicd-get-started-nodejs-build-summary.png differ diff --git a/docs/build-release/archive/apps/nodejs/_img/cicd-get-started-nodejs-update-code.png b/docs/build-release/archive/apps/nodejs/_img/cicd-get-started-nodejs-update-code.png new file mode 100644 index 00000000000..c3dfb62e1f5 Binary files /dev/null and b/docs/build-release/archive/apps/nodejs/_img/cicd-get-started-nodejs-update-code.png differ diff --git a/docs/build-release/archive/apps/nodejs/_img/nodejs-web-app.png b/docs/build-release/archive/apps/nodejs/_img/nodejs-web-app.png new file mode 100644 index 00000000000..52be94949e9 Binary files /dev/null and b/docs/build-release/archive/apps/nodejs/_img/nodejs-web-app.png differ diff --git a/docs/build-release/archive/apps/nodejs/nodejs-to-azure.md b/docs/build-release/archive/apps/nodejs/nodejs-to-azure.md new file mode 100644 index 00000000000..d9df73fbcaf --- /dev/null +++ b/docs/build-release/archive/apps/nodejs/nodejs-to-azure.md @@ -0,0 +1,137 @@ +--- +title: CI build Node.js app +description: Set up a continuous integration (CI) build for your Node.js app in VSTS or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Define a continuous integration build for your Node.js app + +**[VSTS](quick-to-azure.md) | TFS 2017 RTM** + +Here we'll show you how to define a continuous integration (CI) build process for your Node.js app. If you want to also continuously deploy (CD) your app to Azure, you'll be set up to make that happen after you're done creating this CI build process. + +## Upload your code + +0. [Download our Node.js Hello World sample app](http://download.microsoft.com/download/5/C/4/5C4CB575-D022-4BB8-9E95-5A2958C83CD2/nodejs-express-hello-world-app.zip). + +0. Do you have your own code? + + * No: Upload the sample app to Visual Studio Team Services (VSTS) or your on-premises Team Foundation Server. Either push your code to Git or check in your code to TFVC. + + * Yes: + + 0. Copy the **gulpfile.js** and **web.config** files from the sample app to the root folder of your app. + + 0. Upload your code to VSTS or your on-premises Team Foundation Server: either push your code to Git or check in your code to TFVC. + +[What code is in the sample app?](#code) + +## Define your CI build + +
      +[!INCLUDE [include](../../../_shared/begin-create-build-definition.md)] + +
    1. Click Empty to start with an empty definition.
    2. +
    + +### Add the build steps + +On the **Tasks** or **Build** tab, add these steps. + + + + + + + + + + + + + + + + + + + + +
    ![Package: npm install](../../../tasks/package/_img/npm.png)
    **Package: npm install**
    +

    Install your npm package dependencies.

    +
      +
    • Command: ```install```
    • +
    +
    ![Build: Gulp](../../../tasks/build/_img/gulp.png)
    **Build: Gulp**
    +

    Pack your files into a .zip file.

    +
      +
    • Gulp File Path: ```gulpfile.js```

      +
    • +
    • +

      Advanced, Arguments: ```--packageName=$(Build.BuildId).zip --packagePath=$(Build.ArtifactStagingDirectory)``` +

      +
    • +
    +

    Make sure you've got a copy of **gulpfile.js** from our [sample app](#code) in the root folder of your app.

    + +
    ![Package: npm test](../../../tasks/package/_img/npm.png)
    **Package: npm test**
    +

    (Optional) Test your application.

    +
      +
    • Command: ```test```
    • +
    • Set the working folder to the folder where your application code is committed in the repository.
    • +
    +
    ![Build: Publish Build Artifacts](../../../tasks/build/_img/publish-build-artifacts.png)
    **Build: Publish Build Artifacts**
    +

    (Optional) Drop some of the build outputs, such as the .zip file as we do in the example below.

    +
      +
    • Copy Root: ```$(Build.ArtifactStagingDirectory)```
    • +
    • Contents: ```$(Build.BuildId).zip```
    • +
    • Artifact name: ```drop```
    • +
    • Artifact Type: ```Server```
    • +
    +
    + +### Enable continuous integration (CI) + +On the **Triggers** tab, enable **Continuous integration** (CI). This tells the system to queue a build whenever someone on your team commits or checks in new code. + +### Save, queue, and test the build + +Save and queue the build. Once the build is done, click the link to the completed build (for example, _Build 1634_), click **Artifacts**, and then click **Explore** to see the .zip file produced by the build. This is the web deploy package that your release definition will consume to deploy your app. + +## Continuously deploy (CD) your app + +After you've run the CI build, you're ready to create a continuous deployment (CD) release definition so that you can deploy your app to: + +* [![Azure Web App Deploy](../../../tasks/deploy/_img/azure-web-app-deployment-icon.png) An Azure web site ](../../../apps/cd/deploy-webdeploy-webapps.md) + +* [![IIS Web App Deploy](../../../tasks/deploy/_img/iis-web-application-deployment-icon.png) An IIS server](../../../apps/cd/deploy-webdeploy-iis-deploygroups.md) + +* [![Build Machine Image](../../../tasks/deploy/_img/build-machine-image.png) An Azure Scale Set](../../../apps/cd/azure/deploy-azure-scaleset.md) + +## Q&A + + +

    What code is in the sample app?

    + +[Our Node.js Hello World sample app](http://download.microsoft.com/download/5/C/4/5C4CB575-D022-4BB8-9E95-5A2958C83CD2/nodejs-express-hello-world-app.zip) contains: + +``` +|-- .gitignore +`-- helloworld + |-- gulpfile.js + |-- package.json + |-- server.js + |-- web.config + `-- typings +``` + +The gulpfile.js script zips up the app so it can be deployed to Azure. The web.config file enables running the app on Azure. The .gitignore file keeps build artifacts on your dev machine from getting into your Git repo. + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/archive/apps/nodejs/quick-to-azure.md b/docs/build-release/archive/apps/nodejs/quick-to-azure.md new file mode 100644 index 00000000000..d59d6b27489 --- /dev/null +++ b/docs/build-release/archive/apps/nodejs/quick-to-azure.md @@ -0,0 +1,76 @@ +--- +title: Quick Start - Build and Deploy a Node.js app | VSTS +description: Set up a continuous integration (CI) build for your Node.js app, and then a continuous deployment (CD) release to Azure using Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 37846FD6-85D3-4CB1-97CD-11F30ADD0AFA +ms.manager: douge +ms.author: alewis +ms.date: 06/27/2017 +--- + +# Implement a CI/CD process to build and deploy your Node.js app to Azure + +VSTS provides a highly customizable continuous integration (CI) and deployment (CD) automation system for your +Node.js apps. +This quickstart shows how to set up CI and CD to deploy +a Node.js app +to an Azure web app. +You create the web app using the Azure CLI, then set up CI/CD in VSTS. +In the CI process, you use Gulp to run Mocha tests. + +![node.js web app](_img/nodejs-web-app.png) + +[!INCLUDE [temp](../_shared/vsts-and-azure-setup.md)] + +[!INCLUDE [temp](../_shared/create-azure-web-app.md)] + +[!INCLUDE [temp](../_shared/import-code-1.md)] + +```bash +https://github.com/adventworks/nodejs-sample +``` + +[!INCLUDE [temp](../_shared/import-code-2.md)] + +[!INCLUDE [temp](../_shared/set-up-ci-1.md)] + +In the right panel, search for `node`, select **NodeJS with Gulp**, and then click **Apply**. + + ![apply node.js gulp template](../../../apps/nodejs/_img/apply-nodejs-gulp-template.png) + +[!INCLUDE [temp](../_shared/set-up-ci-2.md)] + +Select the **Run gulp task** from the tasks. On the right side, you see the parameters for the task. Under the section **JUnit Test Results**, select the option to **Publish to TFS/VSTS**. + +[!INCLUDE [temp](../_shared/set-up-ci-3.md)] + +[!INCLUDE [temp](../_shared/set-up-cd-1.md)] + +![Screenshot showing update to code](./_img/cicd-get-started-nodejs-build-summary.png) + +[!INCLUDE [temp](../_shared/set-up-cd-2.md)] + +[!INCLUDE [temp](../_shared/set-up-cd-3.md)] + +## Update to redeploy the code + +Navigate to the **Code** hub in the VSTS portal. Navigate to **server.js** file. Make the following simple change to that file by selecting the edit action. + +![Screenshot showing update to code](./_img/cicd-get-started-nodejs-update-code.png) + +Change the following line of text: +``` +res.send('Hello World!'); +``` + +to the following: +``` +res.send('Demo of CI/CD!!'); +``` + +Commit your changes in Git. This change triggers a CI build, and when the build completes, it triggers an automatic deployment to Azure web app. + +[!INCLUDE [temp](../_shared/browse-to-web-app.md)] + +[!INCLUDE [temp](../_shared/clean-up-resources.md)] diff --git a/docs/build-release/archive/news/2015-01.md b/docs/build-release/archive/news/2015-01.md new file mode 100644 index 00000000000..3cd4190ea57 --- /dev/null +++ b/docs/build-release/archive/news/2015-01.md @@ -0,0 +1,37 @@ +--- +toc: show +parent: ../index.md +title: January 2015 Team Services Update +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 30053D42-F6AB-4952-8397-EF0ED5AB6581 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +#January 2015 + +## Variable Secrets + +Build definitions variables can be locked so not viewable in the web and masked in logs + + + +## Build Issues with Source Links + +Errors and Warnings show up in build summary with links to source code. Available to all tasks as api. + + + +## Friendly Names and Navigation + +Build steps get useful friendly names with overrides. Improvements in navigation from build summary. + + + +## Queue Time Demands + +At queue time, control which agent will get this queued build without editing definition. + + \ No newline at end of file diff --git a/docs/build-release/archive/news/2015-02.md b/docs/build-release/archive/news/2015-02.md new file mode 100644 index 00000000000..180bc9c4476 --- /dev/null +++ b/docs/build-release/archive/news/2015-02.md @@ -0,0 +1,33 @@ +--- +toc: show +parent: ../index.md +title: February 2015 VSTS Update +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 1FB57A61-DB4C-4EF3-9B81-0355E9DA6C15 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# February 2015 + +## Azure Website Deployment + + + +## Azure Powershell Deployment + + + +## Retention Policies + + + +## Designer Improvements + + + +## Cancel Build + + \ No newline at end of file diff --git a/docs/build-release/archive/news/2015.md b/docs/build-release/archive/news/2015.md new file mode 100644 index 00000000000..6b29e4268ee --- /dev/null +++ b/docs/build-release/archive/news/2015.md @@ -0,0 +1,154 @@ +--- +title: 2015 Team Foundation Build release notes +description: 2015 Team Foundation Build release notes +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 6E56929B-1B77-4A01-A4AE-6D53248C2A49 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# 2015 Team Foundation Build release notes + +**VSTS | TFS 2017 | TFS 2015** + +> [!NOTE] +> This topic is archived. For the latest news on Build & Release, see the [News about Visual Studio Team Services](https://www.visualstudio.com/team-services/updates/). + +## December 19 + +#### New documentation + +Added: + +* [Build: Grunt](../../tasks/build/grunt.md) + +Updated: + +* [Build your Visual Studio solution](../../apps/windows/dot-net.md) + +* [Build your Java project](../apps/java/quick-to-azure.md) + +Moved to this site from Visual Studio Team Services: + +* [Hosted agents](../../concepts/agents/hosted.md) + +* Hosted build controller for XAML builds + +## December 15 + +#### Build Universal apps + +You can [build Universal apps](../../apps/windows/universal.md). + +#### Why hasn't my build started? What are my build agents doing? + +You can see information about what's delaying your build from starting. + +![build waiting for an agent](_img/2015/12/build-waiting-for-an-agent.png) + +![build agent pools tab with status information](_img/2015/12/build-agent-pools-tab-with-status-information.png) + +#### More efficient repo cleaning + +On the **Repository** tab of the build definition, when you set **Clean** to true, the cleaning is now done this way: + + * Git: git clean -fdx, git reset -hard HEAD + + * TFVC: undo pending changes and scorch. + +If you want this switch to work differently, then on the Variables tab, set the ```Build.Clean``` variable to: + +* ```all``` if you want to delete Agent.BuildDirectory, which is the entire working folder that contains the sources folder, binaries folder, artifact folder, and so on. + +* ```source``` if you want to delete Build.SourcesDirectory. + +* ```binary``` If you want to delete Build.BinariesDirectory. + +#### Access the OAuth token from your script + +Scripts can now use the build process OAuth token to access the VSTS REST API. See [Use a script to customize your build process](../../actions/scripts/powershell.md). + +#### New documentation + +New [home page](../../overview.md) and 3-column layout. + +[Build your Windows Universal Platform app](../../apps/windows/universal.md) + +Added and updated build steps: + +* Build + + - [Ant](../../tasks/build/ant.md) + + - [Gulp](../../tasks/build/gulp.md) + + - [Gradle](../../tasks/build/gradle.md) + +* Utility + + - [Batch script](../../tasks/utility/batch-script.md) + + - [Command line](../../tasks/utility/command-line.md) + + - [PowerShell](../../tasks/utility/powershell.md) + +Updated: + +* [Build and Deploy your Node.js Application to an Azure web app](../apps/nodejs/nodejs-to-azure.md) (added missing argument) + +* [Work with variables](../../concepts/definitions/build/variables.md) + + +## November 25 + +#### New things you can do + +* You can [contribute build steps as extensions](https://marketplace.visualstudio.com/vss/Build and release). + +* See the build status for your repository in the code view. + + ![build status in code tab](_img/2015/11/build-status-in-code-tab.png) + +* You can see what agents are currently running and have run on the agent pools tab. + +* Added change account option for build agent. + +* Added Node.js handler to windows agent to enable many build tasks to have a single implementation. + +* Enabled Pull Requests build policy on cross-platform agent. + +* Enabled cross-platform agent to publish markdown files to build summary via the ```##vso[build.uploadsummary]```local file path command. + +#### New documentation + +Added: + +* [Build Apache Cordova apps with VSTS or Team Foundation Services 2015](../apps/mobile/cordova-build.md) + +* [The Cordova/Ionic Command Tasks for VSTS and Team Foundation Services 2015](../apps/mobile/cordova-command.md) + +* [Build and Test Xcode Projects with VSTS or Team Foundation Server 2015](../../apps/mobile/xcode-ios.md) + +* [Simple, Secure CI App Signing Using VSTS or Team Foundation Server 2015](../../apps/mobile/secure-certs.md) + +* Build steps + + - [MSBuild](../../tasks/build/msbuild.md) + + - [Visual Studio Build](../../tasks/build/visual-studio-build.md) + + - [Index Sources & Publish Symbols](../../tasks/build/index-sources-publish-symbols.md) + +Updated: + +* [Deploy a Windows build agent](../../actions/agents/v1-windows.md) + +## Q&A + + + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/archive/news/2016.md b/docs/build-release/archive/news/2016.md new file mode 100644 index 00000000000..527db9b8542 --- /dev/null +++ b/docs/build-release/archive/news/2016.md @@ -0,0 +1,611 @@ +--- +title: 2016 Team Foundation Build release notes +description: 2016 Team Foundation Build release notes for Team Foundation Server and Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 75737877-BC5D-42A8-8B8C-96F78FBF0501 +ms.manager: douge +ms.author: alewis +ms.date: 08/19/2016 +--- + +# 2016 Team Foundation Build release notes + +**VSTS | TFS 2017 | TFS 2015** + +> [!NOTE] +> This topic is archived. For the latest news on Build & Release, see the [News about Visual Studio Team Services](https://www.visualstudio.com/team-services/updates/). + +## December 9 + +We've updated the hosted pool. We've changed permissions to enable you to build .NET 3.5 ASP.NET Web Forms projects. Also, we've updated and added new software: + +* .NET Core 1.1 +* Android SDK v25 +* Azure CLI 0.10.7 +* Azure PS 3.1.0 +* Azure SDK 2.9.6 +* CMake 3.7.1 +* Git for Windows 2.10.2 +* Git LFS 1.5.2 +* Node 6.9.1 +* Service Fabric SDK 2.3.311 +* Service Fabric 5.3.311 +* Typescript 2.0.6 for Visual Studio 2015 + +[Hosted agents](../../concepts/agents/hosted.md) + +## November 29 + +### Build and deploy Docker apps to Azure more easily + +We're doing a few things to make continuous integration and deployment (CI/CD) of Docker apps simpler. Last week we released Visual Studio 2017 RC to enable you to quickly and automatically create a CI/CD process for ASP.NET Core projects with Docker [see below for details](#november-16). + +This week we've updated the [Docker extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker) with support for Azure Container Service and Azure Container Registry. We've also begun offering the hosted Linux pool. + +### Preview: Hosted Linux pool + +We're offering a preview of our new hosted Linux pool to enable you to build and release on Linux machines without having to configure a private agent. + +The agents in the hosted Linux pool run on an Ubuntu Linux host inside the [vsts-agent-docker container](https://github.com/Microsoft/vsts-agent-docker). This container includes all the standard Java, Node, Docker and .NET Core tooling. When we start the container we map in the Docker socket from the host VM and the working folder from /opt/vsts/work. This enables you to create or spawn other Docker containers as part of your build or release process using either a script or the [Docker extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker) in the Visual Studio Marketplace. + +To use the Hosted Linux pool in your build definition, go to the **General** tab, open the **Default agent queue** menu, and then select **Hosted Linux**. + +If you don't see the option yet, just give it a little time. We're rolling this option out to accounts over the next few weeks. + +### Definitions can be pinned to a specific task version + +By popular request, we're giving you control over the major version of a task that you run in your build or release. We expect this change to result in fewer unpredictable errors that were caused by automatic updates to the agent and task version. You now specify the major version of the task on the **Build** tab of your definition. + +When a minor version is released (for example, 1.2 to 1.3), you get that change automatically in your build. But if a new major version is released (for example 2.0), then your build stays locked to version 1.3 until you edit the definition and manually change to the new major version. A flag in the build definition alerts you to new major versions. + +If you select a version named something such as **1.* (preview)**, keep in mind that this version is still under development and might have known problems. + +> **Tip:** In a build definition you've got a few options to test a new major version of a task: + * If you change the version and have problems, you can revert the change from the history tab. + * Clone the build definition and test the cloned definition with the new major task version. + +### Roll back changes to a build definition + +You can now select a version in the build definition [history](../../concepts/definitions/build/history.md) and **Rollback** to that version. + +## November 16 + +### Build and deploy ASP.NET apps to Azure + +Today we're [announcing the Visual Studio 2017 release candidate](https://blogs.msdn.microsoft.com/visualstudio/2016/11/16/visual-studio-2017-rc/). You can use this version of Visual Studio to automatically set up a CI/CD pipeline to deploy your ASP.NET Core Web App with Docker to Azure. + +![visual-studio-configure-continuous-delivery-dialog-box](_img/2016/11/visual-studio-configure-continuous-delivery-command.png) + +![visual-studio-configure-continuous-delivery-dialog-box](_img/2016/11/visual-studio-configure-continuous-delivery-dialog-box.png) + +[Deploy ASP.NET Core Web App with Docker to Azure](../apps/aspnet/aspnetcore-docker-to-azure.md) so that you're set up to run an automated build and deployment to Azure Container Service with every Git push. + +Also, we've updated these topics with more-end-to-end details: + +* [Deploy ASP.NET 4 to Azure](../../apps/aspnet/build-aspnet-4.md) + +* [Deploy ASP.NET Core to Azure](../../apps/aspnet/build-aspnet-core.md) + +### Pricing changes on Team Services + +Later this month, on Team Services we're moving to a pricing model based on concurrent pipelines. (Previously you paid for agents.) + +**No charge for private agents:** [Private agents](../../../build-release/concepts/agents/agents.md) are now free. In Team Services, you used to have to license each private agent after the first. Now you can run deployments concurrently for no additional charge. + +**Concurrent pipelines:** For each build that you want to run concurrently on Team Services, you need a concurrent pipeline. Some concurrent pipelines are included. If you need more, you can add more in a few ways. + +> **On TFS** you don't need concurrent pipelines to run builds. You can run as many builds as you want at the same time for no additional charge. + +[Concurrent pipelines for your builds and releases in Visual Studio Team Services](../../../build-release/concepts/licensing/concurrent-pipelines-ts.md) + +## November 10 + +### Don't sync sources + +To bypass synchronizing source files, select one of the Git options as your [repository type](../../concepts/definitions/build/repository.md), and then select **Don't sync sources.** This can be useful if you want to handle Git version control operations yourself, or if you just want to run automation without version control dependencies. + +## October 12 + +### Git LFS and shallow fetch + +**Checkout files from LFS:** Download files from large file storage (LFS). + +**Shallow fetch:** If your repository is large, this option might make your build process more efficient. + +> Your agent must be version 2.107.* or newer for this feature to work. + +[Specify the repository](../../concepts/definitions/build/repository.md) + +### New places to search + +You can now search for builds in the **Mine** and **Queued** tabs. + +### Visual Studio 15 Preview 5 + +Build apps developed in Visual Studio 15 Preview 5: + +* [Build: Visual Studio Build task](../../tasks/build/visual-studio-build.md): For **Visual Studio Version** select _Visual Studio "15" (preview)_. + +* [Build: MSBuild task](../../tasks/build/msbuild.md): For **MSBuild Version** select _MSBuild 15.0 (preview)_. + +> At the moment you must [deploy your own Windows agent](../../actions/agents/v2-windows.md) to build these apps. Visual Studio 15 Preview is not yet available on the hosted pool. + +### New mobile app options, updated docs + +[Build your Xamarin app](../../apps/mobile/xamarin.md) + +[Build and Test Xcode Projects](../../apps/mobile/xcode-ios.md) + +[Build: Xcode Build](../../tasks/build/xcode-build.md) Added Xcode 8 automatic signing. Added options to support creating app packages. + +### Updated hosted build pool + +[Hosted agent software list](../../concepts/agents/hosted.md#software) added: + +* Azure SDK 2.9.1 +* WIX 3.10 +* SQL lite for Windows Phone 8.1 +* Xamarin Stable Cycle 8 SR 0 +* Windows 10 SDK 14393 +* .NET 4.6.2 +* Git 2.10.1 + +## September 21 + +### Xcode Build task xcpretty formatting + +We've added an option that enables you to use [xcpretty](https://github.com/supermarin/xcpretty/blob/master/README.md) to format your xcodebuild output and publish JUnit test results. See [Xcode Build](../../tasks/build/xcode-build.md). + +### Publish Jenkins test and code coverage results + +You can now use the **Jenkins Queue Job** build and release task to retrieve test and code coverage results from a Jenkins job or pipeline. See [Jenkins Queue Job](../../tasks/build/jenkins-queue-job.md). + +### Build summary for Maven and Gradle tasks + +When you enable the **Run SonarQube Analysis** option in the [Maven](../../tasks/build/maven.md) or [Gradle](../../tasks/build/gradle.md) build tasks, you get a link on the SonarQube project. You can request a full analysis to see the quality gates details, and choose to break the build if they are not met. + +![maven and gradle](_img/2016/09/9_21_06.png) + +### FindBugs and CheckStyle in Maven build + +You can now request FindBugs and CheckStyle standalone static analysis in the [Maven](../../tasks/build/maven.md) build task (in addition to the PMD analysis). The results of the static analysis appear in the build summary, and resulting files are available from the Artifact tab of the build result. + +### New and updated content + +[Administer permissions](../../concepts/policies/permissions.md) Added walkthrough with examples to grant permissions. + +[Triggers](../../concepts/definitions/build/triggers.md#ci) Added some tips on filtering the file path for your CI trigger. + +## September 2 + +### Queued tab redesigned + +We've implemented a new design to more cleanly show a longer list of queued and running builds. + +![Queued tab](_img/2016/09/definitions-queued.png) + +### Hosted pool agents are migrating to the v2 agent + +We're switching from the [Windows v1 agent](../../actions/agents/v1-windows.md) to the [Windows v2 agent](../../actions/agents/v2-windows.md). + +We expect this migration to be a non-event for the vast majority of users. However, we have seen a few cases where custom build tasks are not compatible due to reflection across internal APIs or reliance to specific agent folder layout. If you run into any issues [please let us know](../../../provide-feedback.md). + +### Xamarin builds simplified + +You no longer need a Xamarin license to [build your Xamarin app](../../apps/mobile/xamarin.md). We're deprecating the [Utility: Xamarin license](../../tasks/utility/xamarin-license.md) task. We recommend that you remove this task from your build to avoid disruption when we remove the task from the product. + +## August 19 + +We've had lots of exciting news this week. We're capping it off with a brand new user experience. + +### New definitions experience + +Welcome to the new definitions UX! The experience focuses on the builds you own and care about. We hope you enjoy the richer and more personalized views into the status and quality of your code. + +### These builds are mine + +Here you'll find the builds you care about most. The **Mine** tab features your favorites, team favorites, and builds of code that you've checked in. + +![Definitions, Mine](_img/2016/08/definitions-mine.png) + +The 7-day pass rate shows the percentage of builds that succeeded or partially succeeded out of all the builds completed during the past week. The arrow tells you if today's builds are doing better or worse than the 7-day rate. + +### What's happening right now? + +When you want to see what's happening right now and in recent history, check out the **Queued** tab. + +![Definitions, Queued](_img/2016/08/definitions-queued.png) + +### Folders! + +Does your team have a lot of build definitions. You can now use folders to keep them organized in the **All Definitions** tab. + +![Definitions, All](_img/2016/08/definitions-all.png) + +![Manage folders](_img/2016/08/manage-folders.png) + +> **Tip:** Have a batch of definitions that need the same permissions? Put them in a folder and then you can give permissions to the folder. + ![Manage folders](_img/2016/08/folder-permissions.png) + +### Lots more data about the build + +When you click down to focus on a specific build, we now give you a lot more information about what's happening and overall code quality. + +![Definition summary](_img/2016/08/definition-summary.png) + +![Definition history](_img/2016/08/definition-history.png) + +### XAML + +Still have some XAML builds? Visual Studio is still your primary tool for editing and managing XAML builds. The **XAML** tab provides a companion experience so you can view and queue those builds in your web browser. + +## August 18 + +### Run your agents behind a web proxy + +Added info on using a web proxy. Also changed these topics to clarify permissions for deploying the agent. + +* [Windows agent](../../actions/agents/v2-windows.md) + +* [OSX agent](../../actions/agents/v2-osx.md) + +* [Linux agent](../../actions/agents/v2-linux.md) + +## August 17 + +### New build steps + +[Utility: FTP Upload](../../tasks/utility/ftp-upload.md) + +[Deploy: Copy Files Over SSH](../../tasks/deploy/copy-files-over-ssh.md) + +### Updated build steps + +[Build: Jenkins Queue Job](../../tasks/build/jenkins-queue-job.md) Added arguments. + +### Updated content + +[Build](../../tasks/index.md) Added version qualifiers. + +[Deploy ASP.NET Core to Azure](../../apps/aspnet/build-aspnet-core.md) Removed unnecessary step. + +[Variables](../../concepts/definitions/build/variables.md) Added Build.RequestedForEmail, small corrections. + +## August 1 + +### New build agents and admin content + +Administer your build and deployment system + +* [Windows agent](../../actions/agents/v2-windows.md) + +* [OSX agent](../../actions/agents/v2-osx.md) + +* [Linux agent](../../actions/agents/v2-linux.md) + +* [Hosted agents](../../concepts/agents/hosted.md) + + + + - [Windows agent](../../actions/agents/v1-windows.md) + + +### New build steps + +[Utility: Update Service Fabric App Versions](../../tasks/utility/service-fabric-versioning.md) + +[Deploy: Service Fabric App Deployment](../../tasks/deploy/service-fabric-deploy.md) + +[Deploy: SSH](../../tasks/deploy/ssh.md) + + +### Updated content + +[Deploy ASP.NET Core to Azure](../../apps/aspnet/build-aspnet-core.md) + +## July 14 + +[Hosted agent software list](../../concepts/agents/hosted.md#software) added: + +* Visual Studio 2015 Update 3 +* .NET Core 1.0 with Preview 2 Tooling +* Azure Service Fabric SDK 2.1 +* Android support repository version 30 +* Google Repository version 29 +* Let's Encrypt root certs for JDK certificate store +* SQL Server Data Tools Visual Studio 2015 + + +## July 7 + + +### New build steps + +[Build: Jenkins Queue Job](../../tasks/build/jenkins-queue-job.md) + +[Utility: Archive files](../../tasks/utility/archive-files.md) + + +### Updated documentation + +[Scale out and administer your build and deployment system](../../concepts/agents/pools-queues.md) agent queues tab moved to team project + + +### Other news + +[Team Services July 7 release notes](https://www.visualstudio.com/news/2016-jul-7-vso) see the **Continuous integration** section. + +## June 14 + + +### Extract files build step + +[Utility: Extract Files](../../tasks/utility/extract-files.md) + + +### Git CI triggers with file path filters + +![ci trigger git branches](../../concepts/definitions/build/_img/triggers/ci-trigger-git-branches.png) + +[Set build triggers](../../concepts/definitions/build/triggers.md) + + +### Hosted pool update + +[Hosted agent software list](../../concepts/agents/hosted.md#software) added: + +* .NET Core RC2 Tooling +* Service Fabric runtime, SDK, and tools for Visual Studio 2015 + + +### New documentation + +[Build and deploy your ASP.NET Core RC2 app to Azure](../../apps/aspnet/build-aspnet-core.md) + +[Deploy: SQL Server Database Deployment](../../tasks/deploy/sql-server-database-deployment.md) + +### Updated documentation + +[Use build variables](../../concepts/definitions/build/variables.md) completely overhauled with new structure and a lot more details. + +[Deploy build steps](../../tasks/index.md#deploy) + +[Test build steps](../../tasks/index.md#test) + + +## June 1 + +### Role-based agent queues + +[Administration of agent queues](../../concepts/agents/pools-queues.md) is now role-based. You can now grant permissions to project-level groups. Updated administration content in this and other topics. + + +### New cross-platform agent + +[New cross-platform agent](https://github.com/Microsoft/vsts-agent/blob/master/README.md) + + +### Updated documentation + +[Hosted agents](../../concepts/agents/hosted.md) New software. Hosted build controller is deprecated. + +[NuGet packager](../../tasks/package/nuget-packager.md) Added examples of multiple patterns and negation pattern. + + +## April 22 + + +### New documentation + +[Utility: Shell script](../../tasks/utility/shell-script.md) + +[Package: npm](../../tasks/package/npm-install.md) + +[Utility: cURL Upload Files](../../tasks/utility/curl-upload-files.md) + + +### Updated documentation + +[Home page](../../overview.md) - broadened coverage and implemented responsive design + +[Hosted agent software list](../../concepts/agents/hosted.md#software) + + +## April 18 + +[Retention policies](../../concepts/policies/retention.md) can delete + +* Artifacts that you've published to a UNC file share using the [Publish Build Artifacts](../../tasks/utility/publish-build-artifacts.md) build step. + +* Symbols that you've published using the [Index Sources & Publish Symbols](../../tasks/build/index-sources-publish-symbols.md) build step. + + +## April 15 + + +### New documentation + +[Build: Xcode Build](../../tasks/build/xcode-build.md) + +[Build: Xcode Package iOS](../../tasks/build/xcode-package-ios.md) + +[Package: CocoaPods](../../tasks/package/cocoapods.md) + + +## April 13 + +### From build error to source + +Have you ever wished you could just jump from a build error to the line of code that caused it? Now you can. + +![build error with link to source file](_img/2016/build-error-with-link-to-source-file.png) + +Click the error link to open the source file causing the build error. + +![source file of build error](_img/2016/source-file-of-build-error.png) + +### Copy from console to clipboard + +When you are viewing a build in progress, on the console there's now a button you can click to copy the output to your clipboard. + +![button to copy console to clipboard](_img/2016/button-to-copy-console-to-clipboard.png) + +### View longer logs + +When you are viewing the output from a build step in your web browser, you can now view much longer logs (up to 150,000 lines). + +### Java build templates + +We've made it even easier for Java developers to get started by adding templates for Ant, Maven and Gradle. + +![java templates](_img/2016/java-templates.png) + +### New documentation + +[Build: CMake](../../tasks/build/cmake.md) + + +### Updated documentation + +[Build: Gulp](../../tasks/build/gulp.md) + + +## March 29 + + +### New capabilities and documentation + +[Build your Xamarin app](../../apps/mobile/xamarin.md) now with enhanced templates. + +[Build: Xamarin.Android](../../tasks/build/xamarin-android.md) now supports Mac and Linux. + +[Build: Xamarin.iOS](../../tasks/build/xamarin-ios.md) now supports signing and packaging. + +[Test: Xamarin Test Cloud](../../tasks/test/xamarin-test-cloud.md) results can now be displayed on the build summary page. + +[Package: Xamarin Component Restore](../../tasks/package/xamarin-component-restore.md) + +[Utility: Xamarin License](../../tasks/utility/xamarin-license.md) + + + +## March 23 + +### New documentation + +[Deploy: Azure File Copy](../../tasks/deploy/azure-file-copy.md) + +[Test: Cloud-based Load Test](../../tasks/test/cloud-based-load-test.md) + +[Test: Cloud-based Web Performance Test](../../tasks/test/cloud-based-web-performance-test.md) + +[Test: Run Functional Tests](../../tasks/test/run-functional-tests.md) + +[Test: Visual Studio Test](../../tasks/test/visual-studio-test.md) + +[Test: Visual Studio Test Agent Deployment](../../tasks/test/visual-studio-test-agent-deployment.md) + +### Updated documentation + +[Build: Ant](../../tasks/build/ant.md) + +[Deploy a Windows build agent](../../actions/agents/v1-windows.md) + +Scale out and administer your build and deployment system + +[Use variables](../../concepts/definitions/build/variables.md) + + +## March 3 + +You can [run Git commands in your build scripts](../../actions/scripts/git-commands.md). + + +## February 19 + + +### TFVC Gated Check-in + +Use gated check-in to protect your TFVC codebase from build breaks. + +![Gated check-in prompt](../../concepts/definitions/build/_img/triggers/tfvc-gated-check-in-prompt.png) + +See [Triggers: Gated check-in](../../concepts/definitions/build/triggers.md#gated). + +### Private shelveset builds + +Manually queue a private build of a shelveset. See [Create a build definition](../../actions/ci-cd-part-1.md). + +### New documentation + +[Build: Android build](../../tasks/build/android-build.md) + +[Build: Android signing](../../tasks/build/android-signing.md) + +[Package: NuGet Installer](../../tasks/package/nuget-installer.md) + +[Package: NuGet Packager](../../tasks/package/nuget-packager.md) + +[Package: NuGet Publisher](../../tasks/package/nuget-publisher.md) + +[Specify the repository](../../concepts/definitions/build/repository.md) (Q&A: What kinds of submodules can I check out?) + + +## January 25 + +### Retention policy minimums + +You can now specify a minimum number of successful or partially successful builds to keep. See [Specify build retention policies](../../concepts/policies/retention.md). + +### Delete Files build step + +![](../../tasks/utility/_img/delete-files.png) [Delete Files](../../tasks/utility/delete-files.md) + +### Deleted builds tab + +You can view builds deleted by you or your retention policies. Deleted builds are destroyed after 30 days. + +![deleted completed builds in build explorer](_img/2016/deleted-completed-builds-in-build-explorer.png) + +### New permission to register XAML build controllers + +Project Collection Build Administrators can now register XAML build controllers on a VSTS account. Previously you had to be a member of the Project Collection Administrators group. + +### More news + +[Visual Studio Team System Release Notes - January 25](https://www.visualstudio.com/news/2016-jan-25-vso) Improved views of your completed builds, release orchestration improvements, and more. + +### New documentation: Define your process + +Create a build definition (replaced in April 2017 with [CI/CD for newbies](../../actions/ci-cd-part-1.md)) + +[Specify build options](../../concepts/definitions/build/options.md) + +[Specify the repository](../../concepts/definitions/build/repository.md) + +[Set build triggers](../../concepts/definitions/build/triggers.md) + +[Specify general build definition settings](../../concepts/definitions/build/options.md) + +[Specify build retention policies](../../concepts/policies/retention.md) + +[View the change history of your build definition](../../concepts/definitions/build/history.md) + + +### New documentation: Build steps + +[Utility: Copy Files](../../tasks/utility/copy-files.md) + +[Utility: Publish Build Artifacts](../../tasks/utility/publish-build-artifacts.md) + +[Utility: Copy and Publish Build Artifacts](../../tasks/utility/copy-and-publish-build-artifacts.md) + + +## Q&A + + + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/archive/news/2017.md b/docs/build-release/archive/news/2017.md new file mode 100644 index 00000000000..88590460c17 --- /dev/null +++ b/docs/build-release/archive/news/2017.md @@ -0,0 +1,880 @@ +--- +title: Team Foundation Build & Release release notes +description: New things you can do with Team Foundation Build (TFBuild) and VSTS Release Management. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 51D98A7C-0FE6-43CE-BA56-9B779EEE1E64 +ms.manager: douge +ms.author: alewis +ms.date: 01/23/2017 +--- + +# Team Build & Release release notes + +**VSTS | TFS 2017 | TFS 2015** + +> [!NOTE] +> This topic is archived. For the latest news on Build & Release, see the [News about Visual Studio Team Services](https://www.visualstudio.com/team-services/updates/). + +## June 23 + +### Export and import build definitions + +Build definitions are implemented internally as .json files, and so you can see details on changes in history. And you can already clone and make templates from your build definitions. But many folks have wanted to take a copy of their CI build logic and reuse it in another team project. In fact it's been a [top-ten request on user voice](https://visualstudio.uservoice.com/forums/330519-team-services/category/145254-ci-build). + +So we're pleased to announce that now you can do it! + +![export build definition](_img/2017/06/export-build-definition.png) + +![import build definition](_img/2017/06/import-build-definition.png) + +### Visual Studio latest and hosted agent pools + +We're changing the model for how you deal with hosted agents and different versions of Visual Studio. Due to architectural, storage, and performance limitations, we're no longer going to offer multiple versions of Visual Studio on a single hosted agent pool. For details on the history and rationale for these changes, see https://github.com/Microsoft/vsts-tasks/blob/master/docs/vshostedpools.md. + +In this release you'll see the following changes: + +* You must now explicitly select a queue when you create a build definition (no default). + +* To make it easier, we're moving the default queue to the **Tasks** tab, in the **Process** section. + + ![default build queue on tasks tab](_img/2017/06/default-build-queue-on-tasks-tab-required.png) + +* The [Visual Studio Build](../../tasks/build/visual-studio-build.md) and [MSBuild](../../tasks/build/msbuild.md) tasks now default to the **Latest** setting for the version argument. + +Coming soon you'll see more changes. For example, the following hosted pools (and corresponding queues) will be something like: + +* Hosted VS2017 + +* Hosted VS2015 + +* Hosted Deprecated (previously called "Hosted Pool" and "Hosted") + +* Hosted Linux Preview + +### Reminder: The hosted XAML controller is going away + +> [!IMPORTANT] +> We're going to shut down the deprecated hosted XAML build controller on July 1st, 2017. After this shutdown you'll no longer be able to use hosted agents to run your XAML builds. + +We recommend that you migrate to our new task-based build system, which includes access to hosted agents to run your builds. See our recently published guide to [migrate from XAML builds to new builds](../../actions/migrate-from-xaml-builds.md). + +However, if you still need to run XAML builds during the migration, then you should set up a private XAML build controller now. To use private XAML controllers and agents, you need to have sufficient private pipelines in your account. For details, see [I'm looking for the hosted XAML build controller. Where did it go?](../../concepts/agents/hosted.md#im-looking-for-the-hosted-xaml-build-controller-where-did-it-go) + +### Build definition menu on build summary page + +From the build summary page you can now navigate to the build summary for other definitions. + +![pick a build definition from the build summary](_img/2017/06/pick-a-build-definition-from-the-build-summary.png) + +This control is also available on the history page. + +### Version 1 agent deprecation on Team Services + +We've been allowing [version 1 agents](../../actions/agents/v1-windows.md) to connect to Team Services. These agents are supported only for Team Foundation Server 2015. On August 1 we'll block these agents from connecting to Team Services. If you've been using a version 1 agent, please take action now and set up a version 2 agent: + +* [Windows](../../actions/agents/v2-windows.md) + +* [OSX](../../actions/agents/v2-osx.md) + +* [Linux](../../actions/agents/v2-linux.md) + + +### Continuous deployment for changes pushed to a Git repository + +Release Management has always provided the capability to configure continuous +deployment when a build completes. However, now you can also configure continuous +deployment on Git Push. This means that you can link GitHub and Team Foundation Git +repositories as artifact sources to a release definition and trigger releases automatically +for applications such as Node.JS and PHP that are not generated from a build, and so do not +expose a build action for continuous deployment. + +### Enhancements to server-side tasks + +We have made two enhancements to server-side tasks (tasks that run within a server phase). + +We have added a new task that can be used to invoke any generic HTTP REST API as part +of the automated pipeline. For example, it can be used to invoke specific processing +with an Azure function, and wait for it to be completed. + +![Generic HTTP REST API task](_img/2017/07/generic-http-task.png) + +We have also added a **Control options** section to all server-side tasks. Task +behavior now includes the capability to set the **Enabled**, **Continue on error**, **Always run**, +and **Timeout** options. + +### Consume Secrets from an Azure Key Vault as variables + +We have added first class support for integrating with Azure Key Vault in Team Services +by linking variable groups to Key Vault secrets. This means you can consume secret +variables in Team Services and manage secret values completely within Azure Key Vault, +without changing anything on the Team Services side (for example, password rotation). + +To enable this feature in the Variable Groups page, use the toggle button **Link +secrets from an Azure key vault as variables**. After configuring the vault details, +choose **+ Add** and select the specific secrets from your vault that are to be mapped +to this variable group. + +![Azure Key Vault integration](_img/2017/07/azure-key-vault.png) + +After you have created a variable group mapped to Azure Key Vault, you can link it +to your release definitions, as documented [here](../../concepts/library/variable-groups.md). + +Note that it's just the secret names that are mapped to the variable group variables, +*not* the values. The actual values (the latest version) of each secret will be fetched +and consumed during the release. + +### Other updates + +[Xamarin](../../apps/mobile/xamarin.md) Removed variables that are no longer needed. + +[Hosted agents](../../concepts/agents/hosted.md) Added Cloud Foundry CLI 6.25.0. + +## June 2 + +### Visual Studio Enterprise benefit for pipelines in Team Services + +Until now, you were able to get a free private pipeline for every Visual Studio Enterprise subscription added to your on-premises TFS server. The same benefit was not available in Team Services. + +Sometime in the next few weeks, we'll add the Visual Studio Enterprise subscriptions pipeline benefit to your Team Services account. The more Enterprise users you have in your account, the more concurrent builds and releases you can run on your private agents without having to pay anything extra. + +![visual studio enterprise subscriber pipelines](_img/2017/06/visual-studio-enterprise-subscriber-pipelines.png) + +### Work with secure files such as Apple certificates + +We've added a general-purpose [secure files library](../../concepts/library/secure-files.md). + +![secure-files-library](_img/2017/06/secure-files-library.png) + +Use the secure files library to store files such as signing certificates, Apple Provisioning Profiles, Android Keystore files, and SSH keys on the server without having to commit them to your source repository. + +The contents of secure files are encrypted and can only be used during build or release processes by referencing them from a task. Secure files are available across multiple build and release definitions in the team project based on security settings. Secure files follow the Library security model. + +We've also added some Apple tasks that leverage this new feature: + +* [Utility: Install Apple Certificate](../../tasks/utility/install-apple-certificate.md) + +* [Utility: Install Apple Provisioning Profile](../../tasks/utility/install-apple-provisioning-profile.md) + +### Extensions with build templates + +Build templates enable your team to quickly get started defining a build process with predefined process parameters, tasks, and settings. Although we offer several templates to enable building some of the most common types of apps, now you can deliver custom build templates using extensions. For example: + +```json +{ "id": "Template1", + "type": "ms.vss-build.template", + "targets": [ "ms.vss-build.templates" ], + "properties": { "name": "Template1" } } +``` + +For the full example, see https://github.com/Microsoft/vsts-extension-samples/tree/master/fabrikam-build-extension. + +> [!TIP] +> You can use this capability to offer and share the same custom template across all your team projects. + +### Release Triggers for Git repositories as an artifact source + +Release Management now supports configuring a continuous deployment +trigger for Git repositories linked to a release definition in any +of the team projects in the same account. This enables you to +automatically trigger a release when a new commit is made to the +repository. You can also specify a branch in the Git repository for +which commits will trigger a release + +![Specifying a Git continuous deployment trigger](_img/2017/06/git-trigger.png) + +### Control releases to an environment based on the source branch + +A release definition can be configured to trigger a deployment +automatically when a new release is created, typically after a build +of the source succeeds. However, you may want to deploy only builds +from specific branches of the source, rather than when any build +succeeds. + +For example, you may want all builds to be deployed to _Dev_ and _Test_ environments, +but only specific builds deployed to _Production_. Previously you were +required to maintain two release pipelines for this purpose, one for +the _Dev_ and _Test_ environments and another for the _Production_ +environment. + +Release Management now supports the use of artifact filters for each +environment. This means you can specify the releases that will be +deployed to each environment when the deployment trigger conditions +(such as a build succeeding and creating a new release) are met. +In the **Trigger** section of the environment **Deployment conditions** dialog, +select the artifact conditions such as the source branch and tags for +builds that will trigger a new deployment to that environment. + +![Specifying an environment deployment trigger for an artifact branch](_img/2017/06/deploy-branch-filter.png) + +In addition, the release summary page now contains a pop-up tip that +indicates the reason for all "not started" deployments to be in that +state, and suggests how or when the deployment will start. + +![Deployment not started information pop-up](_img/2017/06/deploy-not-started.png) + +### Manual Intervention task variable support for instructions + +The **Manual Intervention** task now supports the use of variables +within the instruction text shown to users when the task runs, at the +point where the user can resume execution of the release process or +reject it. Any variables defined and available in the release can be +included, and the values will be used in the notifications as well as +in the email sent to users. + +![Defining variables in instructions parameter](_img/2017/06/maninter-use-variables.png) + +![Result of using variables in instructions parameter](_img/2017/06/maninter-instructions.png) + +### Deprecate a task in an extension + +You can now deprecate a task in your extension. To make it work you must add the following variable to the latest version of your task: + +```json +"deprecated": true +``` + +When the user searches for deprecated tasks, we push these tasks to the end and group them under a collapsible section that's collapsed by default. If a definition is already using a deprecated task, we show a deprecated task badge to encourage users to switch to the replacement. + +![deprecated task](_img/2017/06/deprecated-task.png) + +You can help your users learn about the replacement task by mentioning it in the task description. The description will then point folks using the task in the right direction from both the task catalog and the existing build/release definitions. + +![deprecated task description](_img/2017/06/deprecated-task-description.png) + +### Task group references + +Task groups let you define a set of tasks that you can add to your build or release definitions. This is handy if you need to use the same grouping of tasks in multiple builds or releases. To help you track the consumers of a task group, you now have a view into the build definitions, release definitions, and task groups that reference your task group. + +![task-group-references](_img/2017/06/task-group-references.png) + +When you try to delete a task group that's still referenced, we warn you and give you a link to this page. + +### New content + +* [Migrate from XAML builds to new builds](../../actions/migrate-from-xaml-builds.md) Because the systems are so different, there's no automated or general way to migrate a XAML build definition into a new build definition. We hope you find this new guide to be helpful. + +### Updated Build content + +* [Build and deploy your ASP.NET Core app to Azure](../../apps/aspnet/build-aspnet-core.md), [Build your ASP.NET Core app](../../apps/aspnet/build-aspnet-core.md) Added ASP.NET Core (PREVIEW) template. + +* [Build variables](../../concepts/definitions/build/variables.md) Added AGENT_JOBSTATUS variable + +### Updated Release Management content + +* [Phases in Build and Release Management](../../concepts/process/phases.md) Details of Deployment Group Phases. + +* [Deployment groups](../../concepts/definitions/release/deployment-groups/index.md) Additional information. + +* [How to: Work with release definitions](../../actions/work-with-release-definitions.md) Reorganized sections. + +* [Service endpoints for Build and Release](../../concepts/library/service-endpoints.md) Additional endpoints. + +## May 12 + +One of our goals is to keep +lowering the barrier to entry for automating your application deployment. +The ease with which teams can deploy and validate their application is a +huge part of how quickly they are able to ship. While our CI/CD system is +completely open, we can make setting up deployments extremely simple +through deep integration with Azure. It also unlocks many opportunities for richer +workflows that span both development and operations. To that end, we are +continuing to strive to make Team Services with Azure the best end-to-end DevOps experience. + +This release adds several new capabilities that help to realize that goal. + +* We have significantly expanded the breadth of app type we support. + +* We now support using the automation agent on the VMs to which you deploy to drive your + application deployment. This has easily been our most requested feature for + Release Management. + +* We continue to increase our focus on containers. In this release we + introduce native support for Kubernetes and Service Fabric, the latter + being a great option for Windows containers. + +* We've expanded Azure Web Apps deployment with our native task to include + Node, PHP, and Linux Web Apps with containers. We've also expanded the entry + point for setting up CI/CD with more options in the Azure portal configuration + UI, and introduced the ability to set up CI/CD for Azure Web Apps by using the Azure CLI. + +### Deployment Groups in Release Management + +Release Management now supports robust, out-of-the-box, multi-machine deployment. +You can now orchestrate deployments across multiple machines and perform rolling updates, +while ensuring high availability of the application throughout. + +Agent-based deployment capability relies on the same build and deployment agents. +However, unlike the current approach where you install the build and deployment agents +on a set of proxy servers in an agent pool and drive deployments to remote target servers, +with deploymewnt groups you install the agent on each of your target servers directly +and drive rolling deployment to those servers. You can use the full task catalog on your target machines. + +A deployment group is a logical group of targets (machines) with agents installed on each of them. +Deployment groups represent your physical environments, such as single-box Dev, multi-machine QA, +and a farm of machines for UAT/Prod. They also specify the security context for your physical environments. + +![Deployment groups](_img/2017/05/05_10_22.png) + +You can use this against any VM that you register our agent with. +We've also made it very easy to register with Azure with support for +an Azure VM extension that auto-installs the agent when the VM spins +up. We will automatically inherit the tags on the Azure VM when it's +registered in Team Services. + +Once you have a deployment group, you simply configure what you want +to execute on that group. You can control what runs on each +machine using tags, and control how fast or slow the rollout happens. + +![Configure deployment groups](_img/2017/05/05_10_23.png) + +When the deployment runs, the logs show the progression across the entire +group of machines you are targeting. + +![Deployment groups progress](_img/2017/05/05_10_24.png) + +This feature is now an integrated part of Release Management. There are no additional licenses required to use it. +See [Deployment groups](../../concepts/definitions/release/deployment-groups/index.md). + +### Azure virtual machine scale set deployment + +Another common pattern used for deployment is to create a full machine +image for each version of the application and then deploy that. To make +this easier, we have a new **Build immutable machine image** task that uses +**Packer** to generate a machine image after deploying applications and +all the required prerequisites. The task uses either a deployment script +or a Packer configuration template to create the machine image, and stores +it in an Azure storage account. This image can than be used for Azure +Virtual Machine Scale Set deployments that work well for this type of +immutable image deployment. See [Deploying Applications to Azure Virtual Machine Scale Sets](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/15/deploying-applications-to-azure-vm-scale-sets/). + +### Retiring the old editor + +Over the next few weeks we'll be retiring the old build definition editor. We've designed the new editor to provide a more intuitive experience, fix some pain points, and add new capabilities. We hope that you'll find it easier to use templates, add tasks, and change settings. And now you can use process parameters to make it easier to specify the most important bits of data without having to go deep into your tasks. [Learn more](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/10/announcing-general-availability-of-the-new-build-editor) + +### Heads up: The hosted XAML controller is going away + +We will shut down the deprecated hosted XAML build controller on July 1st, 2017. After this shutdown you'll no longer be able to use hosted agents to run your XAML builds. + +We recommend that you migrate to our new task-based build system, which includes access to hosted agents to run your builds. + +However, if you still need to run XAML builds during the migration, then you should set up a private XAML build controller now. To use private XAML controllers and agents, you need to have sufficient private pipelines in your account. For details, see [I'm looking for the hosted XAML build controller. Where did it go?](../../concepts/agents/hosted.md#im-looking-for-the-hosted-xaml-build-controller-where-did-it-go) + +### Tasks fail if Visual Studio 2017 is specified but not present on agent + +The [Visual Studio Build](../../tasks/build/visual-studio-build.md) and [MSBuild](../../tasks/build/msbuild.md) tasks enable you to select a specific version of Visual Studio. Until now, if the **Visual Studio 2017** version was not available, these tasks would automatically pick the next available version. + +We're changing this behavior. Now the build will fail if you select **Visual Studio 2017** but it is not present on the agent. + +We made this change for the following reasons: + +* Newer app types such as .NET core do not compile with older build tools. They explicitly require Visual Studio 2017 or newer. + +* You get more consistent and predictable results when you use the same exact version of Visual Studio. + +* Whenever the tasks falls back, you might get compilation errors that are difficult to understand. + +> [!TIP] +> +> If you're using hosted agents on Team Services, make sure to select the **Hosted VS2017** queue. If you're using private agents, make sure to use a queue connected with a pool that has agents with Visual Studio 2017, and no agents that have only earlier versions of Visual Studio. + +### NuGet Restore, Command, and Tool Installer build tasks + +We've made major updates to the __NuGet Installer__ (now called __NuGet Restore__) task, and added two new NuGet tasks: __NuGet Command__ and __NuGet Tool Installer__. Most notably, the __NuGet Command__ and __NuGet Restore__ tasks now use nuget.exe 4.0.0 by default. + +The __NuGet Tool Installer__ puts you in control of the version of NuGet used by both the __NuGet Restore__ and __NuGet Command__ tasks. By default, the tasks will use a well-known, tested version. If you want to override that, simply add a __NuGet Tool Installer__ step before your other NuGet build steps. + +__NuGet Restore__ is now optimized for the most common scenario of restoring packages before a Visual Studio Build step. It also has better support for small projects that share a single NuGet feed: you can now pick a Team Services feed and have it added to an auto-generated NuGet.Config. + +### Install an SSH key during a build or release + +A new preview task, **Install SSH Key** (Preview), installs an SSH key +prior to a build or release, and removes it from the agent when the +build or release completes. The installed key can be used for fetching +code from a Git repository or submodules, running deployment scripts, +or other activities that require SSH authentication. +It will be improved in the future to support passphrases and other capabilities. + +### Azure Web App deployment updates + +Enhancements for Azure Web Applications include: + +* Azure App Service deployment task supports Node.js, Python applications to be deployed. +* Azure App Service deployment task supports deploying to Azure Web App for Linux using containers. +* Azure portal Continuous Delivery is expanded now support Node applications. + +We have also introduced CI/CD support into the latest version of the Azure CLI for configuring CI/CD. Here is an example: + +``` +az appservice web source-control config --name mywebapp --resource-group mywebapp_rg --repo-url https://myaccount.visualstudio.com/myproject/_git/myrepo --cd-provider vsts --cd-app-type AspNetCore +``` + +### Built-in tasks for building and deploying container based applications + +With this release we have pulled most of the tasks in our Docker +extension into the product by default, improved them, and introduced +a set of new tasks and templates for making a set of container scenarios easier. + +* **Docker**: Build, push, or run Docker images, or run a Docker command. This task can be used with Docker or Azure Container registry. You can now use our built-in service principal authentication with ACR to make it even easier to use. +* **Docker-Compose**: Build, push, or run multi-container Docker applications. This task can be used with Docker or Azure Container registry. +* **Kubernetes**: Deploy, configure, or update your Kubernetes cluster in Azure Container Service by running kubectl commands. +* **Service Fabric**: Deploy containers to a Service Fabric Cluster. Service Fabric is the best choice today for running Windows Containers in the cloud. In fact, this is where more and more of VSTS itself is running each sprint. + +### New content + +[Deploy: IIS Web App Deploy](../../tasks/deploy/iis-deploy.md) + +[Deploy: IIS Web App Manage](../../tasks/deploy/iis-manage.md) + +[Test: Publish Code Coverage Results](../../tasks/test/publish-code-coverage-results.md) + +[Test: Publish Test Results](../../tasks/test/publish-test-results.md) + +### Updated content + +[Build variables](../../concepts/definitions/build/variables.md) Added section on setting variables from scripts. + +[Concurrent build and release pipelines in Visual Studio Team Services](../../concepts/licensing/concurrent-pipelines-ts.md) + +[Deploy your Web Deploy package to IIS servers](../../apps/cd/deploy-webdeploy-iis-deploygroups.md) + +[File matching patterns reference](../../tasks/file-matching-patterns.md) Added exclude pattern examples + +[Hosted agents](../../concepts/agents/hosted.md) Updated hosted Visual Studio 2017 queue and software. + +[How to: Work with release definitions](../../actions/work-with-release-definitions.md) + +[Phases in Build and Release Management](../../concepts/process/phases.md) More details about using Run on Deployment Group phase. + +[Task Groups](../../concepts/library/task-groups.md) + +[Test: Cloud-based Web Performance Test](../../tasks/test/cloud-based-web-performance-test.md) + +[Troubleshooting build](../../actions/troubleshooting.md) + +[Deployment groups](../../concepts/definitions/release/deployment-groups/index.md) More details about creating and using Deployment Groups. + +[Variable groups](../../concepts/library/variable-groups.md) + +[Variables in Release Management](../../concepts/definitions/release/variables.md) Added section on setting variables from scripts. + +## April 19 + +### Build tool installers + +> **Preview feature** +> +> To use this capability you must enable the **Task tool installers** [preview feature](../../../collaborate/preview-features.md) for your account. + +Have you been wishing you could install a tool or runtime on the fly (even on a hosted agent) just in time for your CI build? Do you need to validate your app or library against multiple versions of a dependency such as Node.js? Today we're announcing tool installers that enable you to install one or more versions of tools sets on the fly. + +For example, you could set up your build process to run and validate your app for multiple versions of Node.js. First specify a comma-delimited list of versions in a variable that you can modify at queue time. + +![NodeVersionSpec process variable](_img/2017/04/NodeVersionSpec-process-variable.png) + +Next enable multi-configuration. If you've got enough agents and concurrent pipelines, you can even run the builds in parallel. + +![build definition options tab](_img/2017/04/build-definition-options-tab.png) + +![build definition options tab multi configuration enabled](_img/2017/04/build-definition-options-tab-multi-configuration-enabled.png) + +And last, add the Node.js tool installer task. + +![build definition tasks tab](_img/2017/04/build-definition-tasks-tab.png) + +Save and queue the build, to see your app validated with multiple versions of Node.js. + +![multiple builds of node js running in parallel](_img/2017/04/multiple-builds-of-node-js-running-in-parallel.png) + +At the moment we've got the Node Tool Installer task. We don't yet have runtime environments like Java, or tools like NuGet or cURL. + +Want to try it? See [Tool installers](../../concepts/process/tasks.md#tool-installers). + +### SSH deployment improvements +The __Copy Files Over SSH__ build/release task now supports tildes(~) in the destination path to simplify copying files to a remote user's home directory. Also, a new option allows causing the build/release to fail when no files are found to copy. + +The SSH build/release task now supports running scripts with Windows line endings on remote Linux or macOS machines. + +### Deploy to Azure Government Cloud +Customers with Azure subscriptions in Government clouds can now configure [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm) to target national clouds. + +With this, you can now use Release Management to deploy any application to Azure resources hosted in government clouds, using the same deployment tasks. + +### Timeout enhancements for the Manual Intervention task +The __Manual Intervention__ task can now be automatically rejected or resumed after it is pending for the specified timeout or 60 days, whichever is earlier. The timeout value can be specified in the control options section of the task. + +### Release Logs Page Improvements +In this deployment, we have improved the release logs page experience: +* You can directly click the URLs in the log viewer. +* You can search for keywords in the logs. +* You can view large log files without downloading them. + +### Azure App Service task enhancements and templates for Python and PHP applications +New __Azure App Service__ release definition templates have been added for deploying Python (Bottle, Django, Flask) and PHP applications. The new template contains the updated __App Service Deploy__ task. + +When the Python release definition template is used, the __App Service Deploy__ task gets prepopulated with an inline deployment script which makes pip (dependency manager) install the applications dependencies. The correct web.config gets generated based on the Python framework used. + +When the PHP release definition template is used, the __App Service Deploy__ task gets pre-populated with a deployment script which makes Composer (dependency manager) install the application's dependencies. + +### Deploy Java to Azure Web Apps +The __Azure App Service Deploy__ build/release task now supports deployment of Java WAR files to an Azure Web App. When creating a new build definition, you can choose to begin with a new build template: __Java Deploy to Azure Web App.__ This simplifies getting started by building your project with Ant, Gradle, or Maven, and deploying the results to Azure. An Azure Web App slot can be specified to allow uploading to a staging slot before swapping that deployment with a production slot. + +### New content + +By popular request, we've published these new build topics: + +* [CI/CD for newbies](../../actions/ci-cd-part-1.md) What is continuous integration (CI)? What is continuous deployment (CD)? Why should I care? How do I get started? + +* [Build artifacts](../../concepts/definitions/build/artifacts.md) Examples and tips on publishing and using build artifacts. + +New Release Management topic: + +* [Azure Government Cloud](../../concepts/library/government-cloud.md) Team Services is not available in Azure Government Clouds, so there are some special considerations when you +want to deploy apps to Government Clouds. + + +### Updated build content + +How do I configure the agent to bypass a web proxy and connect to Team Services on a [Windows](../../actions/agents/v2-windows.md), [OSX](../../actions/agents/v2-osx.md), or [Linux](../../actions/agents/v2-linux.md) agent? + +[Troubleshooting build](../../actions/troubleshooting.md) + +### Updated release content + +[Service endpoints](../../concepts/library/service-endpoints.md) + +[Environments](../../concepts/definitions/release/environments.md) + +[Generated by Azure](../apps/aspnet/aspnet-4-ci-cd-azure-automatic.md) + +### New build editor + +Our thanks to those of you who tried the early previews of our new build editor and gave us feedback. We're getting ready to retire the old build editor. So if you haven't yet gotten familiar with the new build editor, we encourage you to do so now. [Learn more](https://aka.ms/newci-optin). + +## March 29 + +### Conditional build tasks + +Have you been looking for more control over your build tasks? For example, do you want to clean things up, send a message, or do some other kind of housekeeping when something goes wrong? We're now offering four built-in choices to control when a task is run: + +![run this task menu](_img/2017/03/run-this-task-menu.png) + +> This feature is available only in the new build editor. + +But what if you need fine-grained control over when a task runs? For example, you want to run a task only when the build was triggered by a CI build. And it needs to run even if the build is failing. But only on feature branches. + +Now we're giving you this kind of control. On your task, select **custom conditions**, and then enter: + +``` +and(failed(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI'), startsWith(variables['Build.SourceBranch'], 'refs/heads/features/')) +``` + +See [Specify conditions for running a task](../../concepts/process/conditions.md). + +### Build.Reason variable + +In support of conditional tasks, we're offering a new build variable: `Build.Reason`. You can use this variable to check for CI, scheduled, and other triggers. See [variables](../../concepts/definitions/build/variables.md). + +### New build editor will soon be the default + +[Earlier this year](#january-25) we announced a preview of the new build editor. Thank you to all who have been trying it and giving us feedback! If you haven't done so already, please try the [new editor](../preview/2017-user-experience.md) and let us know what you think. Soon we'll be switching your account to make it the default editor. + +### Override template parameters in Azure resource group deployments + +Currently in Azure resource group deployment tasks, users select the template.json and the parameters.json and provide the override parameter values in a text box, following a specific syntax. This experience is now enhanced so the template parameters are rendered in a grid which allows them to be edited and overridden. Users can access this feature by clicking the __...__ next to the override parameters field, which opens a dialog with the template parameters along with their default values and allowed values (if defined in the template and parameter .json files). This feature requires that CORS rules are enabled at the source. If template and parameter json files are in Azure storage blob, refer to [this documentation](https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Cross-Origin-Resource-Sharing--CORS--Support-for-the-Azure-Storage-Services?redirectedfrom=MSDN#understanding-cors-requests) to enable CORS. + +![Azure RD parameters](_img/2017/03/03_29_10.png) + +### Continuous Delivery in the Azure portal supports any Git repo + +You can now configure a continuous delivery (CD) workflow for the __Azure App Service__ no matter which Git repository you use to manage your code. Until now, you could select an App Service in the Azure Portal and setup continuous delivery for that service in just a few clicks, but only if you managed your code either in a VSTS Git repository or in GitHub. You can now get the same simple experience for any public or private Git repository, provided that repository is accessible from the Internet. With a few clicks in the Azure portal, you can set up a build and release definition in Team Services that will periodically check your Git repository for any changes, sync those changes, run an automated build and test, followed by a deployment to Azure App Service. As your needs evolve, you can customize these definitions to support multiple environments, more complex testing, or deployment upon manual approval. + +### Separation of duties for deployment requester and approvers + +Previously, environment owners could restrict release creators from approving deployments of the release to an environment. Users could, however, manually start deployment of a release created by another user, and approve it themselves. + +We have now filled this gap by considering the deployment creator as a separate user role for deployments. Either the release creator or deployment creator can be restricted from approving the deployments. + +### Set maximum number of parallel deployments + +This feature gives you control on how multiple pending releases are deployed into a given environment. For example, if your release pipeline performs validation of builds in a QA environment and the rate of generation of builds is faster than the rate of completion of the deployments, you may configure multiple agents and as many builds to get validated in parallel. That means each of the builds generated gets validated, and the wait time is dependent in the number of available agents. + +With this feature, we let you optimize validations by enabling you to perform validation on the _n_ most recent builds in parallel and cancel the older deployment requests. + +![parallel deployments](_img/2017/03/03_29_11.png) + +### Unified Build & Release docs + +CI and CD development and release cycle + +You might have noticed that the build and release docs have been coming closer together over the past couple of months. Today it's official. Just as Build & Release is joined in Team Services, and they're now also [joined in our docs](../../overview.md). + +
    + +### New topic on TFS authentication + +[Configure TFS authentication](../../actions/agents/configure-tfs-authentication.md) to enable your agents to use different authentication methods. + +### Other notable content updates + +[Android signing](../../tasks/build/android-signing.md) + +[Xamarin.iOS](../../tasks/build/xamarin-ios.md) + +[Xcode Build](../../tasks/build/xcode-build.md) + +## March 17 + +### Visual Studio 2017 and Hosted Linux Preview hosted agents + +[Hosted agents](../../concepts/agents/hosted.md) You can now use our hosted agents to build your Visual Studio 2017 apps. We've also added information about the Hosted Linux Preview queue. + +[Build and deploy your ASP.NET Core app to Azure](../../apps/aspnet/build-aspnet-core.md) includes the ability to use hosted agents to build ASP.NET Core apps. + +### Keep track of your free hosted agent minutes + +You can now see how many free hosted agent minutes you've used. + +![hosted agent minute usage](_img/2017/03/hosted-agent-minute-usage.png) + +## March 7 + +### See when agents in your pool are upgrading + +When an agent is being upgraded, it now indicates the status of the upgrade in the queue and on the agent pools tab. + +### Agent content (new and updated) + +We've made several updates aimed at clarifying how to configure your private agents. + +New: [Configure TFS authentication for your private build and release agents](../../actions/agents/configure-tfs-authentication.md) + +Updated: [Build and release agents](../../concepts/agents/agents.md), [Windows](../../actions/agents/v2-windows.md), [Windows (TFS 2015)](../../actions/agents/v1-windows.md), [OSX](../../actions/agents/v2-osx.md), and [Linux](../../actions/agents/v2-linux.md) + +### Guidance on file matching patterns + +We're now advising you to use [File matching patterns](../../tasks/file-matching-patterns.md) from these tasks: [Copy Files](../../tasks/utility/copy-files.md), +[Extract Files](../../tasks/utility/extract-files.md), and [FTP Upload](../../tasks/utility/ftp-upload.md). + +### Other updated content + +[Node.js](../apps/nodejs/nodejs-to-azure.md) Moved deployment step out of CI build and into Release Management. Gave web deployment artifact a useful file name. + +[Pipelines in Team Services](../../concepts/licensing/concurrent-pipelines-ts.md) Added clarification to Q&A about control of pipeline allocation. + +## February 14 + +### GitHub pull request builds + +For a while we've provided CI builds from your GitHub repo. Now we're adding a new trigger so you can automatically build your GitHub pull requests. After the build is done, we report back with a comment in your GitHub pull request. + +For security, we build only pull requests when both the source and target are within the same repo. We don't build pull requests from a forked repo. + +To enable this capability, on the build editor **Trigger** tab, select **Pull request**. + +### Selection of private agents on machines not in use + +The system now uses machine name as a factor when allocating a build or a release to a private agent. As a result, the system will prefer an agent on an idle machine over an agent on a busy machine when it allocates the job. + +### Run tests using Agent Phases + +Using the __Visual Studio Test task__, you can now run automated tests using agent phases. + +We now have a unified automation agent across build, release and test. This brings in the following benefits: + +1. You can leverage an agent pool for your testing needs. + +2. Run tests in different modes using the same __Visual Studio Test task__, based on your needs—single agent–based run, multi-agent–based distributed test run or a multi-configuration run to run tests on, say, different browsers. + +![agent phases](_img/2017/02/02_15_18.png) + +For more information, see [this post](https://aka.ms/testingwithphases). + +### Private agent automatic workspace cleanup + +You can now configure an agent pool to periodically clean up stale working directories and repositories. For example, the pool will delete workspaces left behind by deleted build and release definitions. + +![agent maintenance](_img/2017/02/02_15_03.png) + +Using this option should reduce the potential for your private build and release agents to run out of disk space. The maintenance is done per agent (not per machine), so if you have multiple agents on a single machine you could still run into disk space issues. + +### Multiple versions of extension tasks + +Extension authors can now create extensions with multiple versions of a given task which enables them to ship patches for each major version they have in production. + +See [Reference for creating custom build tasks within extensions](../../../extend/develop/build-task-schema.md) + +### Changes to concurrent pipelines + +[Concurrent pipelines in Team Services](../../concepts/licensing/concurrent-pipelines-ts.md) We've begun charging for concurrent pipelines. + +[Concurrent pipelines in TFS](../../concepts/licensing/concurrent-pipelines-tfs.md) Manual intervention does not consume a pipeline in TFS 2017 Update 1 and newer. + +The __Pipelines queue__ feature provides users with more visibility into where their builds or releases are. + +![resource limits](_img/2017/02/02_15_06.png) + +On launching the __Pipelines queue__, you can see the following information: + +1. Builds and releases waiting for a pipeline to execute and their position in the waiting queue. + +2. Builds and releases currently running using available pipelines. + +![release in progress](_img/2017/02/02_15_07.png) + +While your build/release is waiting for a pipeline, you can also directly launch this view from inside the build/release logs page and find its current position in the pipeline queue and other details. + +### Machine groups deprecated + +We've deprecated **Machine Groups**. Instead of creating a machine group, +use a comma-delimited list of machine names or a variable in the +following tasks: + +* [Run Functional Tests task](../../../build-release/tasks/test/run-functional-tests.md) +* [Visual Studio Test Agent Deployment task](../../../build-release/tasks/test/visual-studio-test-agent-deployment.md) +* [PowerShell on Target Machines task](../../../build-release/tasks/deploy/powershell-on-target-machines.md) + +For more details, see [Set up environments to run continuous test tasks with your build tasks](../../test/set-up-continuous-test-environments-builds.md). + +### Merging and updating build & release content + +As build & release are more integrated as a product, we've begun to also integrate the content. We've created, updated, and reorganized a lot of topics. Look for the content to continue merging in the coming weeks. + +#### Updated get started CI/CD to Azure + +[CI/CD ASP.NET 4 generated by Azure](../apps/aspnet/aspnet-4-ci-cd-azure-automatic.md) + +[CI/CD ASP.NET 4 Generated by Visual Studio](../apps/aspnet/aspnet-4-ci-cd-vs-automatic.md) + +[CI/CD ASP.NET 4 do it yourself](../../apps/aspnet/build-aspnet-4.md) + +[CI/CD ASP.NET Core with Docker, generated by Visual Studio](../apps/aspnet/aspnetcore-docker-to-azure.md) + +[CI/CD ASP.NET Core do it yourself](../../apps/aspnet/build-aspnet-core.md) + +#### Updated ASP.NET build (CI) + +[ASP.NET 4](../../apps/aspnet/build-aspnet-4.md) + +[ASP.NET Core](../../apps/aspnet/build-aspnet-core.md) + +[Azure Cloud Service](../../apps/aspnet/build-aspnet-cloudservice.md) + +[SQL Server Database](../../apps/aspnet/build-aspnet-dacpac.md) + +#### Updated ASP.NET deploy (CD) + +[Azure web sites](../../apps/cd/deploy-webdeploy-webapps.md) + +[Azure cloud service](../../apps/cd/deploy-cloudservice-cloudservice.md) + +[Azure SQL Database (DACPAC)](../../apps/cd/deploy-dacpac-sqlpackage.md) + +[Azure SQL Database (SQL scripts)](../../apps/cd/deploy-database-sqlscripts.md) + +[IIS Servers](../../apps/cd/deploy-webdeploy-iis-deploygroups.md) + +[IIS Servers (WinRM)](../../apps/cd/deploy-webdeploy-iis-winrm.md) + +#### Updated agent content + +[Deploy a Windows v2 agent](../../actions/agents/v2-windows.md) + +[Deploy a Windows v1 agent (TFS 2015)](../../actions/agents/v1-windows.md) + +[Deploy an OSX agent](../../actions/agents/v2-osx.md) + +[Deploy a Linux agent](../../actions/agents/v2-linux.md) + +[Hosted agents](../../concepts/agents/hosted.md) + +#### New concepts section with new and updated topics + +[Build and release agents](../../concepts/agents/agents.md) and related topics + +[Build options](../../concepts/definitions/build/options.md) and related topics + +[Release definitions](../../concepts/definitions/release/index.md) and related topics + +[Retention policies](../../concepts/policies/retention.md) + +[Permissions](../../concepts/policies/permissions.md) + +## January 25 + +### Build editor preview + +[Last year we introduced a more personalized user experience](2016.md#august-19) to help you easily monitor and manage the builds you own and care about. + +This month we're offering a preview of a new design aimed at making it easier for your to create and edit build definitions. Click the switch to give it a try. + +![new build editor switch](_img/2017/01/new-build-editor-switch.png) + +If you change your mind, you can toggle it off. However, eventually after we feel it's ready for prime time, the preview editor will replace the current editor. So please give it a try and [give us feedback](https://visualstudio.uservoice.com/forums/330519-team-services). + +The new editor has all the capabilities of the old editor along with several new capabilities and enhancements to existing features. + +#### Search for a template + +Search for the template you want and then apply it, or start with an empty process. + +![new build definition](_img/2017/01/new-build-definition.png) + +#### Quickly find and add a task right where you want it + +Search for the task you want to use, and then after you've found it, you can add it after the currently selected task on the left side, or drag and drop it where you want it to go. + +![add task](_img/2017/01/add-task.png) + +You can also drag and drop a task to move it, or drag and drop while holding the Ctrl key to copy the task. + +#### Use process parameters to pass key arguments to your tasks + +You can now use process parameters to make it easier for users of your build definition or template to specify the most important bits of data without having to go deep into your tasks. + +![process parameters](_img/2017/01/process-parameters.png) + +If you create a new build from some of the built-in templates (for example **Visual Studio** and **Maven**) you can see examples of how these work. + +#### Learn more + +The new editor includes a few other enhancements, such as giving you quicker access to your sources settings. For more details, see [Preview of our new build editor](../preview/2017-user-experience.md). + +### Release action in the build summary + +We've added a Release action to the build summary to make it easy for you to create a release for your build. + +![release action in build summary](_img/2017/01/release-action-in-build-summary.png) + +### Role-based security for variable groups + +You now manage security for variable groups using roles. + +![assign security roles for library](_img/2017/01/assign-security-roles-for-library.png) + +You can modify roles for a specific variable group, or for all of them at once. + +### Web app deployment history in Azure portal + +Release Management now updates the deployment logs of Azure App Service when a deployment is done by using the App Service deployment task. Users can view deployment history in the Azure portal by clicking on the Continuous delivery option in the App Service blade. + +### New content + +[Build your C++ app for Windows](../../apps/windows/cpp.md) + +### Updated content + +[Pipelines in TFS](../../concepts/licensing/concurrent-pipelines-tfs.md) + +[Pipelines in Team Services](../../concepts/licensing/concurrent-pipelines-ts.md) + +[Release Management queuing policies](../../concepts/definitions/release/environments.md#queuing-policies) + +[How to deploy? Tasks in Microsoft Release Management](../../concepts/process/tasks.md) + +### Hosted pool internal changes + +We recently changed our [hosted agents](../../concepts/agents/hosted.md) to sync sources on the D drive instead of the C drive. This might cause issues if you've defined a build that depends on hard coded paths to the sources directory. + +> [!NOTE] +> We recommend that you avoid using hard coded paths to resources on the hosted agent. Instead, you should always use [variables](../../concepts/definitions/build/variables.md) to construct any references that you need to make to resources used by your build. diff --git a/docs/build-release/archive/news/_img/2015/11/build-status-in-code-tab.png b/docs/build-release/archive/news/_img/2015/11/build-status-in-code-tab.png new file mode 100644 index 00000000000..6ddea72c6a3 Binary files /dev/null and b/docs/build-release/archive/news/_img/2015/11/build-status-in-code-tab.png differ diff --git a/docs/build-release/archive/news/_img/2015/12/build-agent-pools-tab-with-status-information.png b/docs/build-release/archive/news/_img/2015/12/build-agent-pools-tab-with-status-information.png new file mode 100644 index 00000000000..41720a52fc1 Binary files /dev/null and b/docs/build-release/archive/news/_img/2015/12/build-agent-pools-tab-with-status-information.png differ diff --git a/docs/build-release/archive/news/_img/2015/12/build-waiting-for-an-agent.png b/docs/build-release/archive/news/_img/2015/12/build-waiting-for-an-agent.png new file mode 100644 index 00000000000..8d60f5f4094 Binary files /dev/null and b/docs/build-release/archive/news/_img/2015/12/build-waiting-for-an-agent.png differ diff --git a/docs/build-release/archive/news/_img/2016/08/definition-history.png b/docs/build-release/archive/news/_img/2016/08/definition-history.png new file mode 100644 index 00000000000..744242ba8f3 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/08/definition-history.png differ diff --git a/docs/build-release/archive/news/_img/2016/08/definition-summary.png b/docs/build-release/archive/news/_img/2016/08/definition-summary.png new file mode 100644 index 00000000000..8d3702cd319 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/08/definition-summary.png differ diff --git a/docs/build-release/archive/news/_img/2016/08/definitions-all.png b/docs/build-release/archive/news/_img/2016/08/definitions-all.png new file mode 100644 index 00000000000..46220270f98 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/08/definitions-all.png differ diff --git a/docs/build-release/archive/news/_img/2016/08/definitions-mine.png b/docs/build-release/archive/news/_img/2016/08/definitions-mine.png new file mode 100644 index 00000000000..050e196e543 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/08/definitions-mine.png differ diff --git a/docs/build-release/archive/news/_img/2016/08/definitions-queued.png b/docs/build-release/archive/news/_img/2016/08/definitions-queued.png new file mode 100644 index 00000000000..e12e63eaa5c Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/08/definitions-queued.png differ diff --git a/docs/build-release/archive/news/_img/2016/08/folder-permissions.png b/docs/build-release/archive/news/_img/2016/08/folder-permissions.png new file mode 100644 index 00000000000..9a52b30bc96 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/08/folder-permissions.png differ diff --git a/docs/build-release/archive/news/_img/2016/08/manage-folders.png b/docs/build-release/archive/news/_img/2016/08/manage-folders.png new file mode 100644 index 00000000000..b9e09b9443c Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/08/manage-folders.png differ diff --git a/docs/build-release/archive/news/_img/2016/09/9_21_06.png b/docs/build-release/archive/news/_img/2016/09/9_21_06.png new file mode 100644 index 00000000000..1bc95537a7f Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/09/9_21_06.png differ diff --git a/docs/build-release/archive/news/_img/2016/09/definitions-queued.png b/docs/build-release/archive/news/_img/2016/09/definitions-queued.png new file mode 100644 index 00000000000..14465148fe4 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/09/definitions-queued.png differ diff --git a/docs/build-release/archive/news/_img/2016/11/visual-studio-configure-continuous-delivery-command.png b/docs/build-release/archive/news/_img/2016/11/visual-studio-configure-continuous-delivery-command.png new file mode 100644 index 00000000000..f452cd9c83f Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/11/visual-studio-configure-continuous-delivery-command.png differ diff --git a/docs/build-release/archive/news/_img/2016/11/visual-studio-configure-continuous-delivery-dialog-box.png b/docs/build-release/archive/news/_img/2016/11/visual-studio-configure-continuous-delivery-dialog-box.png new file mode 100644 index 00000000000..f16e3c66180 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/11/visual-studio-configure-continuous-delivery-dialog-box.png differ diff --git a/docs/build-release/archive/news/_img/2016/build-error-with-link-to-source-file.png b/docs/build-release/archive/news/_img/2016/build-error-with-link-to-source-file.png new file mode 100644 index 00000000000..78d098724c9 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/build-error-with-link-to-source-file.png differ diff --git a/docs/build-release/archive/news/_img/2016/button-to-copy-console-to-clipboard.png b/docs/build-release/archive/news/_img/2016/button-to-copy-console-to-clipboard.png new file mode 100644 index 00000000000..c4b0cf57c74 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/button-to-copy-console-to-clipboard.png differ diff --git a/docs/build-release/archive/news/_img/2016/deleted-completed-builds-in-build-explorer.png b/docs/build-release/archive/news/_img/2016/deleted-completed-builds-in-build-explorer.png new file mode 100644 index 00000000000..f7e3eccd188 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/deleted-completed-builds-in-build-explorer.png differ diff --git a/docs/build-release/archive/news/_img/2016/java-templates.png b/docs/build-release/archive/news/_img/2016/java-templates.png new file mode 100644 index 00000000000..91b79048e84 Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/java-templates.png differ diff --git a/docs/build-release/archive/news/_img/2016/source-file-of-build-error.png b/docs/build-release/archive/news/_img/2016/source-file-of-build-error.png new file mode 100644 index 00000000000..48fd9f99bfb Binary files /dev/null and b/docs/build-release/archive/news/_img/2016/source-file-of-build-error.png differ diff --git a/docs/build-release/archive/news/_img/2017/01/add-task.png b/docs/build-release/archive/news/_img/2017/01/add-task.png new file mode 100644 index 00000000000..3f3236468df Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/01/add-task.png differ diff --git a/docs/build-release/archive/news/_img/2017/01/assign-security-roles-for-library.png b/docs/build-release/archive/news/_img/2017/01/assign-security-roles-for-library.png new file mode 100644 index 00000000000..26912e6472d Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/01/assign-security-roles-for-library.png differ diff --git a/docs/build-release/archive/news/_img/2017/01/new-build-definition.png b/docs/build-release/archive/news/_img/2017/01/new-build-definition.png new file mode 100644 index 00000000000..69a3a5fa00c Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/01/new-build-definition.png differ diff --git a/docs/build-release/archive/news/_img/2017/01/new-build-editor-switch.png b/docs/build-release/archive/news/_img/2017/01/new-build-editor-switch.png new file mode 100644 index 00000000000..0b5c5cb8de7 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/01/new-build-editor-switch.png differ diff --git a/docs/build-release/archive/news/_img/2017/01/process-parameters.png b/docs/build-release/archive/news/_img/2017/01/process-parameters.png new file mode 100644 index 00000000000..096730c1ff6 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/01/process-parameters.png differ diff --git a/docs/build-release/archive/news/_img/2017/01/release-action-in-build-summary.png b/docs/build-release/archive/news/_img/2017/01/release-action-in-build-summary.png new file mode 100644 index 00000000000..21097ee006c Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/01/release-action-in-build-summary.png differ diff --git a/docs/build-release/archive/news/_img/2017/02/02_15_03.png b/docs/build-release/archive/news/_img/2017/02/02_15_03.png new file mode 100644 index 00000000000..6d9bc9bdb25 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/02/02_15_03.png differ diff --git a/docs/build-release/archive/news/_img/2017/02/02_15_06.png b/docs/build-release/archive/news/_img/2017/02/02_15_06.png new file mode 100644 index 00000000000..a2e2515f188 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/02/02_15_06.png differ diff --git a/docs/build-release/archive/news/_img/2017/02/02_15_07.png b/docs/build-release/archive/news/_img/2017/02/02_15_07.png new file mode 100644 index 00000000000..9f6e5d03f3c Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/02/02_15_07.png differ diff --git a/docs/build-release/archive/news/_img/2017/02/02_15_18.png b/docs/build-release/archive/news/_img/2017/02/02_15_18.png new file mode 100644 index 00000000000..52a26776253 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/02/02_15_18.png differ diff --git a/docs/build-release/archive/news/_img/2017/03/03_29_10.png b/docs/build-release/archive/news/_img/2017/03/03_29_10.png new file mode 100644 index 00000000000..6558ade4986 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/03/03_29_10.png differ diff --git a/docs/build-release/archive/news/_img/2017/03/03_29_11.png b/docs/build-release/archive/news/_img/2017/03/03_29_11.png new file mode 100644 index 00000000000..02cc055a705 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/03/03_29_11.png differ diff --git a/docs/build-release/archive/news/_img/2017/03/ci-01.png b/docs/build-release/archive/news/_img/2017/03/ci-01.png new file mode 100644 index 00000000000..eb36eeb3785 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/03/ci-01.png differ diff --git a/docs/build-release/archive/news/_img/2017/03/hosted-agent-minute-usage.png b/docs/build-release/archive/news/_img/2017/03/hosted-agent-minute-usage.png new file mode 100644 index 00000000000..a2b206638a3 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/03/hosted-agent-minute-usage.png differ diff --git a/docs/build-release/archive/news/_img/2017/03/run-this-task-menu.png b/docs/build-release/archive/news/_img/2017/03/run-this-task-menu.png new file mode 100644 index 00000000000..c233d3dc4ed Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/03/run-this-task-menu.png differ diff --git a/docs/build-release/archive/news/_img/2017/04/NodeVersionSpec-process-variable.png b/docs/build-release/archive/news/_img/2017/04/NodeVersionSpec-process-variable.png new file mode 100644 index 00000000000..8974e62dcbe Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/04/NodeVersionSpec-process-variable.png differ diff --git a/docs/build-release/archive/news/_img/2017/04/build-definition-options-tab-multi-configuration-enabled.png b/docs/build-release/archive/news/_img/2017/04/build-definition-options-tab-multi-configuration-enabled.png new file mode 100644 index 00000000000..46d4e884ca8 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/04/build-definition-options-tab-multi-configuration-enabled.png differ diff --git a/docs/build-release/archive/news/_img/2017/04/build-definition-options-tab.png b/docs/build-release/archive/news/_img/2017/04/build-definition-options-tab.png new file mode 100644 index 00000000000..ef4658748b1 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/04/build-definition-options-tab.png differ diff --git a/docs/build-release/archive/news/_img/2017/04/build-definition-tasks-tab.png b/docs/build-release/archive/news/_img/2017/04/build-definition-tasks-tab.png new file mode 100644 index 00000000000..db7cd9e5dd0 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/04/build-definition-tasks-tab.png differ diff --git a/docs/build-release/archive/news/_img/2017/04/multiple-builds-of-node-js-running-in-parallel.png b/docs/build-release/archive/news/_img/2017/04/multiple-builds-of-node-js-running-in-parallel.png new file mode 100644 index 00000000000..e8e01c29c5e Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/04/multiple-builds-of-node-js-running-in-parallel.png differ diff --git a/docs/build-release/archive/news/_img/2017/05/05_10_22.png b/docs/build-release/archive/news/_img/2017/05/05_10_22.png new file mode 100644 index 00000000000..28114a6a881 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/05/05_10_22.png differ diff --git a/docs/build-release/archive/news/_img/2017/05/05_10_23.png b/docs/build-release/archive/news/_img/2017/05/05_10_23.png new file mode 100644 index 00000000000..97fb9c2138d Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/05/05_10_23.png differ diff --git a/docs/build-release/archive/news/_img/2017/05/05_10_24.png b/docs/build-release/archive/news/_img/2017/05/05_10_24.png new file mode 100644 index 00000000000..079e9d837dd Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/05/05_10_24.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/default-build-queue-on-tasks-tab-required.png b/docs/build-release/archive/news/_img/2017/06/default-build-queue-on-tasks-tab-required.png new file mode 100644 index 00000000000..15295977a9f Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/default-build-queue-on-tasks-tab-required.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/deploy-branch-filter.png b/docs/build-release/archive/news/_img/2017/06/deploy-branch-filter.png new file mode 100644 index 00000000000..31641fba97d Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/deploy-branch-filter.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/deploy-not-started.png b/docs/build-release/archive/news/_img/2017/06/deploy-not-started.png new file mode 100644 index 00000000000..48bf6eeeaa1 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/deploy-not-started.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/deprecated-task-description.png b/docs/build-release/archive/news/_img/2017/06/deprecated-task-description.png new file mode 100644 index 00000000000..4bf931a0ef8 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/deprecated-task-description.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/deprecated-task.png b/docs/build-release/archive/news/_img/2017/06/deprecated-task.png new file mode 100644 index 00000000000..2f697f19515 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/deprecated-task.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/export-build-definition.png b/docs/build-release/archive/news/_img/2017/06/export-build-definition.png new file mode 100644 index 00000000000..220b5609509 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/export-build-definition.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/git-trigger.png b/docs/build-release/archive/news/_img/2017/06/git-trigger.png new file mode 100644 index 00000000000..e85156e40e8 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/git-trigger.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/import-build-definition.png b/docs/build-release/archive/news/_img/2017/06/import-build-definition.png new file mode 100644 index 00000000000..098f67f9e39 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/import-build-definition.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/maninter-instructions.png b/docs/build-release/archive/news/_img/2017/06/maninter-instructions.png new file mode 100644 index 00000000000..05ff02f1c89 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/maninter-instructions.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/maninter-use-variables.png b/docs/build-release/archive/news/_img/2017/06/maninter-use-variables.png new file mode 100644 index 00000000000..a44d6040361 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/maninter-use-variables.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/pick-a-build-definition-from-the-build-summary.png b/docs/build-release/archive/news/_img/2017/06/pick-a-build-definition-from-the-build-summary.png new file mode 100644 index 00000000000..d1c4682efe6 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/pick-a-build-definition-from-the-build-summary.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/secure-files-library.png b/docs/build-release/archive/news/_img/2017/06/secure-files-library.png new file mode 100644 index 00000000000..c7c4146bf20 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/secure-files-library.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/task-group-references.png b/docs/build-release/archive/news/_img/2017/06/task-group-references.png new file mode 100644 index 00000000000..87c64e74f78 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/task-group-references.png differ diff --git a/docs/build-release/archive/news/_img/2017/06/visual-studio-enterprise-subscriber-pipelines.png b/docs/build-release/archive/news/_img/2017/06/visual-studio-enterprise-subscriber-pipelines.png new file mode 100644 index 00000000000..942baec1718 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/06/visual-studio-enterprise-subscriber-pipelines.png differ diff --git a/docs/build-release/archive/news/_img/2017/07/azure-key-vault.png b/docs/build-release/archive/news/_img/2017/07/azure-key-vault.png new file mode 100644 index 00000000000..a7ee312aec3 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/07/azure-key-vault.png differ diff --git a/docs/build-release/archive/news/_img/2017/07/generic-http-task.png b/docs/build-release/archive/news/_img/2017/07/generic-http-task.png new file mode 100644 index 00000000000..225ddcff226 Binary files /dev/null and b/docs/build-release/archive/news/_img/2017/07/generic-http-task.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/rel103-01.png b/docs/build-release/archive/news/_img/rm-archived/rel103-01.png new file mode 100644 index 00000000000..3dfab7cf066 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/rel103-01.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/rel103-02.png b/docs/build-release/archive/news/_img/rm-archived/rel103-02.png new file mode 100644 index 00000000000..87ffb00ea9d Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/rel103-02.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-01.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-01.png new file mode 100644 index 00000000000..2825a83ebee Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-01.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-02.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-02.png new file mode 100644 index 00000000000..11c92d2d0d6 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-02.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-03.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-03.png new file mode 100644 index 00000000000..6d9e504183f Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-03.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-04.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-04.png new file mode 100644 index 00000000000..be4ed8d13bf Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-04.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-05.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-05.png new file mode 100644 index 00000000000..827f3eb9af5 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-05.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-06.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-06.png new file mode 100644 index 00000000000..18a4f21f0b3 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-06.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-07.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-07.png new file mode 100644 index 00000000000..036e6dbd962 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-07.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-08.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-08.png new file mode 100644 index 00000000000..89cef387d53 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-08.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-09.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-09.png new file mode 100644 index 00000000000..18e11e5a790 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-09.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-10.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-10.png new file mode 100644 index 00000000000..438d19f2532 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-10.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-11.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-11.png new file mode 100644 index 00000000000..8a3dcb1852c Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-11.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-12.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-12.png new file mode 100644 index 00000000000..31545f6d3b2 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-12.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-13.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-13.png new file mode 100644 index 00000000000..a3fecce3048 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-13.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-14.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-14.png new file mode 100644 index 00000000000..470bcc54924 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-14.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-15.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-15.png new file mode 100644 index 00000000000..23d7ae64020 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-15.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-16.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-16.png new file mode 100644 index 00000000000..8155e897e9f Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-16.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-17.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-17.png new file mode 100644 index 00000000000..5f39f5d594c Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-17.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-18.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-18.png new file mode 100644 index 00000000000..df37bbee173 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-18.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-19.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-19.png new file mode 100644 index 00000000000..e54ed44b915 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-19.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-20a.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-20a.png new file mode 100644 index 00000000000..ee70f11d86c Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-20a.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-20b.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-20b.png new file mode 100644 index 00000000000..ed13aa9923d Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-20b.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-21.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-21.png new file mode 100644 index 00000000000..4eccf9795b0 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-21.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-22.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-22.png new file mode 100644 index 00000000000..3652e9bf5ec Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-22.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-23.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-23.png new file mode 100644 index 00000000000..02b18fa7370 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-23.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-24.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-24.png new file mode 100644 index 00000000000..e3a3399d9c1 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-24.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-25.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-25.png new file mode 100644 index 00000000000..ebc99f48bc5 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-25.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-27.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-27.png new file mode 100644 index 00000000000..3afad08a0cc Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-27.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-28.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-28.png new file mode 100644 index 00000000000..ae289b04801 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-28.png differ diff --git a/docs/build-release/archive/news/_img/rm-archived/release-notes-29.png b/docs/build-release/archive/news/_img/rm-archived/release-notes-29.png new file mode 100644 index 00000000000..9d2b8b50094 Binary files /dev/null and b/docs/build-release/archive/news/_img/rm-archived/release-notes-29.png differ diff --git a/docs/build-release/archive/news/rm-archived.md b/docs/build-release/archive/news/rm-archived.md new file mode 100644 index 00000000000..e37d187492d --- /dev/null +++ b/docs/build-release/archive/news/rm-archived.md @@ -0,0 +1,1221 @@ +--- +title: Archived release notes for Microsoft Release Management +description: Archived release for VSTS and TFS +ms.assetid: 1872D1B0-0514-4FD2-9BFB-DF9538BF93DF +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Archived release notes for Microsoft Release Management + +[!INCLUDE [version-rm-dev14](../../_shared/version-rm-dev14.md)] + +**NOTE**: Release Management has now been combined with the Build features +of Team Services and Team Foundation Server (TFS) in the new +**Build & Release** hub. For details of new features and changes, see +[Team Foundation Build & Release release notes](2017.md). + + +## What's new? + +The following changes, categorized by release date, were added to Release Management: + +* **Team Foundation Server** + - [November 16, 2016 Update](#update-nov16) + - [Mar 3, 2016 Update](#update-mar3-16) + - [Feb 12, 2016 Update](#update-feb12-16) +* **Visual Studio Team Services** + - [November 23, 2016 Update](#update-nov23-16) + - [November 16, 2016 Update](#update-nov16) + - [October 12, 2016 Update](#update-oct12-16) + - [September 21, 2016 Update](#update-sep21-16) + - [September 2, 2016 Update](#update-sep2-16) + - [July 28, 2016 Update](#update-jul28-16) + - [June 24, 2016 Update](#update-jun24-16) + - [May 23, 2016 Update](#update-may23-16) + - [April 26, 2016 Update](#update-apr26-16) + - [April 8, 2016 Update](#update-apr8-16) + - [March 15, 2016 Update](#update-mar15-16) + - [February 24, 2016 Update](#update-feb24-16) + - [February 11, 2016 Update](#update-feb11-16) + - [December 1, 2015 Update ](#update-dec1-15) + - [November 18, 2015 Update](#update-nov18-15) + - [November 03, 2015 Update](#update-nov3-15) + - [October 19, 2015 Update ](#update-oct19-15) + - [September 21, 2015 Update ](#update-sep21-15) + - [September 4, 2015 Update](#update-sep4-15) + + +### November 23, 2016 Update (Team Services) + +This update has the following new features: + +* [New licensing model for Build and Release Management](#nov2316-license) +* [Build and deploy Docker apps to Azure more easily](#nov2316-dockerapps) +* [Hosted Linux pool preview](#nov2316-hostedlinux) +* [Task versioning for Build and Release definitions](#nov2316-taskversion) +* [Inline service connections in Build and Release](#nov2316-inlineservices) +* [Link build artifacts from another team project](#nov2316-linkartifacts) + + +**New licensing model for Build and Release Management** + +Build and Release Management has moved from the current agent-based +licensing model to a concurrent pipeline based licensing model. +Each pipeline lets you run one build or deploy one release at a time. +The maximum number of concurrent builds you can run and releases +you can deploy at the same time is limited only by the number +of pipelines you have. + +Your Team Services account includes these free amounts: + +* One free Hosted Pipeline: With this free hosted pipeline, you get + four hours (240 minutes) per month and a maximum duration of 30 + minutes per build or deployment. If you just need more build time + for once concurrent build or release, buy another hosted pipeline + without the four hour limit to increase your maximum duration per + build or deployment up to six hours. For more concurrent builds + or releases, buy more hosted pipelines. +* One free Private Pipeline: With this free private pipeline, run + unlimited concurrent builds or deploy one release at a time in + Team Foundation Server 2017, or run one build or deploy one release + at a time in Team Services on agent software from Microsoft. + Private agents are now free and unlimited. In TFS, each Visual + Studio Enterprise subscriber also contributes a private pipeline + that you can use. You can also buy more private pipelines. + +For more information, see +[Concurrent build and release pipelines in Team Services](../../concepts/licensing/concurrent-pipelines-ts.md) +and [Concurrent release pipelines in TFS](../../concepts/licensing/concurrent-pipelines-tfs.md). + +If you previously bought private agents in the Azure portal, they'll +automatically roll into private pipelines. Similarly, any hosted agents +that you purchased become Hosted pipelines. With the new licensing model, +you can register any number of private agents with your account. +In effect, the new model gives you more than the previous model, for the same price. + + +**Build and deploy Docker apps to Azure more easily** + +To make continuous integration and deployment (CI/CD) of Docker apps a lot simpler, we have: + +* Updated the [Docker extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker) + with support for Azure Container Service and Azure Container Registry. +* Begun a preview of the [Hosted Linux pool](#nov2316-hostedlinux) so that you don't have to set up your own Docker hosts. +* Released [Visual Studio 2017 RC](https://www.visualstudio.com/vs/visual-studio-2017-rc/) + and included [new continuous delivery tools](../apps/aspnet/aspnetcore-docker-to-azure.md) + for ASP.NET Core Preview apps. You can use these tools to configure a + CI/CD process quickly in Team Services. Any ASP.NET Core project with + Docker support enabled can be set up to run an automated build and + deployment to Azure Container Service with every Git push. + + +**Hosted Linux pool preview** + +We're offering a preview of our new hosted Linux pool to enable you +to build and release on Linux machines without having to configure a private agent. + +The agents in the hosted Linux pool run on an Ubuntu Linux host inside the +[vsts-agent-docker container](https://github.com/Microsoft/vsts-agent-docker). +This container includes all the standard Java, Node, Docker and .NET Core tooling. +When we start the container we map in the Docker socket from the host VM and the +working folder from /opt/vsts/work. This enables you to create or spawn other +Docker containers as part of your build or release process using either a script or the +[Docker extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker) +in the Visual Studio Marketplace. + +To use the Hosted Linux pool: + +* In your build definition, go to the **General** tab, open the **Default agent queue** menu, and then select **Hosted Linux**. +* In your release definition, go to the **Environments** tab, select your **Run on agent** task, + open the **Deployment queue** menu, and then select **Hosted Linux**. + +If you don't see the option yet, just give it a little time. We're rolling this option out to accounts over the next few weeks. + + +**Task versioning for Build and Release definitions** + +By popular request, we're giving you control over the major version of a task +that you run in your build or release. We expect this change to result in +fewer unpredictable errors that were caused by automatic updates to the agent +and task version. You now specify the major version of the task on the **Build** +tab of your definition, or on the **Environments** tab of your release definition. + +When a minor version is released (for example, 1.2 to 1.3), you get that change +automatically in your build. But if a new major version is released (for example 2.0), +your build stays locked to version 1.3 until you edit the definition and manually +change to the new major version. A flag in the build definition alerts you to new major versions. + +If you select a version named something such as **1.\* (preview)**, keep in mind +that this version is still under development and might have known problems. + +>**Tip**: In a build definition, you have a few options to test a new major version of a task. +If you change the version and have problems, you can revert the change from the **History** tab. +Clone the build definition and test the cloned definition with the new major task version. + + +**Inline service connections in Build and Release** + +With this feature, you can create service connections right in the build or release +definition without having to navigate to the **Services** tab. This will be auto-enabled +for all extensions which are defined declaratively, such as Docker, Jenkins, VMWare, and SCVMM. + + +**Link build artifacts from another team project** + +Until now, release definitions could only link artifact sources from the +current project. Now, you can now link build artifacts from another project +as well. While linking an artifact, the project drop down will list all +the projects in the account. + +![Build artifacts dialog](_img\rm-archived\release-notes-29.png) + + +### November 16, 2016 Update (Team Services, TFS 2017) + +Today we're announcing TFS 2017, which includes all the Release Management features that you currently get on Team Services. We're introducing a pricing model based on concurrent pipelines for Release Management in TFS 2017. + +We're also announcing general availability of Release Management in Team Services. Also, later this month, we're moving to a pricing model based on concurrent pipelines for both Team Foundation (TFBuild) and Release Management in Team Services. (Previously you paid for agents.) + +**Release Management users are free:** Your team members no longer need subscriptions to author definitions. Team Services users (with [basic access](https://www.visualstudio.com/products/visual-studio-team-services-feature-matrix-vs)) and users with a TFS Client Access License (CAL) can author releases for no additional charge. All types of users (including stakeholders) can approve releases for free. + +**No charge for private agents:** [Private agents](../../concepts/agents/agents.md) are now free. In Team Services, you used to have to license each private agent after the first. Now you can run deployments concurrently for no additional charge. + +**Concurrent pipelines:** For each release process that you want to run concurrently, you need a concurrent pipeline. Some concurrent pipelines are included. If you need more, you can add more in a few ways. + +[Concurrent pipelines for your releases in Team Foundation Server](../../concepts/licensing/concurrent-pipelines-tfs.md) + +[Concurrent pipelines for your builds and releases in Visual Studio Team Services](../../concepts/licensing/concurrent-pipelines-ts.md) + + +### October 12, 2016 Update (Team Services) + +This update has the following new features: + +* [Multiple schedules in releases](#oct12-sched) +* [Azure Resource Group improvements](#oct12-argimp) +* [Azure CLI task](#oct12-clitask) +* [Simplified Azure endpoint creation](#oct12-azureep) + + +**Multiple schedules in releases** + +Want to schedule your releases to be created more +than one time in a day? You can now configure +multiple scheduled triggers in a release definition. + + +**Azure Resource Group improvements** + +Currently, when using the Azure Resource Group task, +there is no way to validate if the ARM template is +syntactically correct and would be accepted by the +Azure Resource Manager without actually deploying +the resources. This enhancement allows a new deployment +mode called **Validation Only** where users can find +problems with the template authoring before creating +actual Azure resources. + +Another enhancement to the Azure Resource Group task +is to allow either incremental or complete deployments. +Currently, the task deploys the ARM templates using the +**Incremental** mode. This mode handles deployments +as incremental updates to the resource group. It does not +modify resources that exist in the resource group but are +not specified in the template. **Complete** mode deletes +resources that are not in your template. By default, +**Incremental** mode is used. + +![Azure Resource Group improvements](_img/rm-archived/release-notes-27.png) + +See [Azure Resource Group Deployment Task](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureResourceGroupDeployment). + + +**Azure CLI task** + +The new Azure CLI task supports running Azure CLI +commands on cross-platform agents such as Windows, Linux +and Mac. The task supports both Classic and ARM subscriptions. +It also supports two modes of providing the script: +as a linked artifact or as an inline script. + +![Azure CLI task](_img/rm-archived/release-notes-28.png) + +See [Deploy: Azure CLI](../../tasks/deploy/azure-cli.md). + + +**Simplified Azure endpoint creation** + +In an earlier sprint, we made it easier to create a new +Azure Resource Manager service endpoint from Team Services. +That experience only worked in accounts that are backed by +Azure Active Directory. In this deployment, we are bringing +the same simplified experience for all the other accounts +not backed by an AAD. So, if you have a Microsoft account +and an Azure subscription that you would like to deploy to +from Team Services, you can create an Azure Resource Manager +endpoint without needing to run tedious PowerShell scripts +or follow the steps in a blog. + +See [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm). + + +### September 21, 2016 Update (Team Services) + +**Deployment Status widget** + +A build can be deployed and tested in different release +environments across multiple release definitions. In such +a scenario, the Deployment Status widget shows you a +consolidated status of the deployment and test pass rate +across multiple environments for a recent set of builds +from a build definition. + + +### September 2, 2016 Update (Team Services) + +This update has the following new features: + +* [Jenkins with untrusted SSL certificates](#sep2-jenkins) +* [Deployment manual intervention](#sep2-manualinter) +* [Service endpoint improvements](#sep2-servendpoint) +* [SQL database deployment task scripts](#sep2-sqldeploy) + + +**Jenkins with untrusted SSL certificates** + +Jenkins connections can now be configured to accept +untrusted SSL certificates of Jenkins servers. This is +useful when Team Services service hooks, or build and +release processes, integrate with Jenkins. For example, +if a Jenkins server is configured to use SSL with a +self-signed certificate or a certificate that cannot be +verified by a Certificate Authority (CA), this setting +lets administrators deliberately trust the certificate. + +![Specifying an untrusted certificate for a Jenkins connection](_img/rm-archived/release-notes-24.png) + +For more information about Jenkins integration +capabilities, see +[Team Services Integration with Jenkins Jobs, Pipelines, and Artifacts](https://blogs.msdn.microsoft.com/visualstudioalm/2016/08/18/tfs-integration-jenkins-jobs-pipelines-artifacts/). + + +**Deployment manual intervention** + +You can now pause execution during deployment to an environment. +Including a **Manual Intervention** task in an environment enables you to temporarily halt a deployment, +perform manual steps, and then resume further automated steps. +You can also reject the deployment and prevent further steps from +executing after a manual intervention. + +For more details, see [Manual intervention](../../concepts/process/phases.md#the-manual-intervention-task). + + +**Service endpoint improvements** + +An option to validate the connection has been added to all +service endpoint dialogs so that users can test that the parameters +they entered are correct. The link uses a REST call to the +external service using the information entered, and returns +success when the REST call passes. + +Service endpoints have also been enhanced by the introduction of icons. +Service endpoint authors can specify the icon to be displayed for +each endpoint they create. + + +**SQL database deployment task scripts** + +The **Azure SQL Database Deployment** task has been +enhanced to run SQL scripts against an Azure SQL Database. +The scripts can be provided as a file, or inline within the task. + +![Using a script with an Azure SQL Database Deployment task](_img/rm-archived/release-notes-25.png) + + +### July 28, 2016 Update (Team Services) + +This update has the following new features: + +* [Task groups](#jul28-metatask) +* [Create agent queues](#jul28-createqueue) +* [Easier Azure deployment](#jul28-azuredeploy) +* [Soft delete of releases](#jul28-softdelete) +* [Retain releases and builds for each environment](#jul28-retainspecific) +* [Filter releases by source code branch](#jul28-filterbuild) +* [Linked artifact improvements](#jul28-linkedartifact) +* [Rollback and redeploy earlier releases](#jul28-rollback) + + +**Task groups** + +A *task group* lets you to encapsulate a sequence of tasks already defined +in a build or a release definition into a single reusable task that can be +added to a build or release definition just like any other task. You can +choose to extract the parameters from the encapsulated tasks as configuration +variables, and abstract the rest of the task information. The new task group +is automatically added to the task catalogue, ready to add to other release +and build definitions. + +![Task groups to encapsulate multiple tasks](_img/rm-archived/release-notes-23.png) + +For more details, see [Task groups](../../concepts/library/task-groups.md). + + +**Create agent queues** + +You can now create agent queues from within a team project by selecting a +pool that is not referenced by any other queue in the team project, +or create a queue with a new pool. + +For more details, see [Configure agent pools and queues](../../concepts/agents/pools-queues.md). + + +**Easier Azure deployment** + +Two new features make it easier to deploy applications to Azure: + +* **Simplified Service Principal Authentication configuration**. + If the Team Services or TFS instance you are using is backed by Azure Active + Directory authentication, a simplified version of the service endpoint dialog + allows you to select an existing Azure subscription. This automatically + creates a new Azure service principal that is assigned the **Contributor** role + and so has access to all resources within the subscription. For more details, see + [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm). + + ![Configuring a Service Principal Authentication based Azure service endpoint](_img/rm-archived/rel103-01.png) + +* **Deployment to national Azure clouds**. Use the new **Environment** setting in an + Azure Classic service endpoint to target a specific Azure cloud, including pre-defined + national clouds such as Azure China cloud, Azure US Government cloud, and Azure German cloud. + For more details, see + [Azure Classic service endpoint](../../concepts/library/service-endpoints.md#sep-azure-classic). + + ![Configuring an Azure Classic service endpoint to target a specific Azure cloud](_img/rm-archived/rel103-02.png) + + +**Soft delete of releases** + +When you delete a release, or it is automatically deleted by a retention policy, +the release is removed from the overview and details lists. +However, it is retained with the release definition for a period (typically +14 days) before it is permanently deleted. During this period, it is shown in +the **Deleted** tab of the overview and details lists. You can restore any of +these releases by opening the shortcut menu and choosing **Undelete**. + + +**Retain releases and builds for each environment** + +The release retention policy for a release definition determines how long a release +and the build linked to it are retained. By default, a release +is retained for 60 days - releases that have not been +deployed or modified during that time will automatically be +deleted. However, you may want to retain more releases that have been deployed +to specific environments, such as your production environment, +or retain them longer than those that were just deployed to other environments +such as test, staging, and QA. You can also retain the build linked to a release +for the same period as the release to ensure that the +artifacts are available if you need to redeploy that release. + + +**Filter releases by source code branch** + +Use the new **Branch** drop-down list to filter the +list of releases by the branch from which the artifacts were generated. + + +**Linked artifact improvements** + +Two new features make it easier to work with artifacts and artifact sources: + +* You can link multiple artifact sources to a release definition. + Each of the artifacts is downloaded into a folder on the agent called the _source alias_. + You can now edit the source alias of a linked artifact. For example, when you change the + name of the build definition, you can edit the source alias to reflect the name of the + build definition. + + For more details, see [Artifact source alias](../../concepts/definitions/release/artifacts.md#source-alias). + +* A number of variables of the format Build.\* (such as Build.BuildId and Build.BuildNumber) + are exposed for use in task parameters. When multiple sources are associated with a release, + these variables are now populated with values from the artifact source you specify as the + primary source. For more details, see + [Artifact variables](../../concepts/definitions/release/variables.md#artifact-variables). + + +**Rollback and redeploy earlier releases** + +If a deployment to an environment fails, you may want to redeploy an older +release that already succeeded in that environment. Now, when you start to deploy an older +release, you see a list of commits and work items that will be rolled back. You just need +to make sure that the automation scripts for the deployment can handle the rollback scenario. + + +### June 24, 2016 Update (Team Services) + +This update has the following new features: + +* [Clone, export, and import release definitions](#jun24-clone) +* [Test results displayed in the release summary](#jun24-testresults) +* [Pass OAuth tokens to scripts](#jun24-tokens) +* [Task-level timeouts](#jun24-timeouts) +* [Trigger on partially successful deployments](#jun24-partsuccess) +* [Consume artifacts stored in GitHub directly](#jun24-github) +* [Jenkins plug-in for Release Management](#jun24-jenkins) +* [Add attachments to release summaries](#jun24-attachments) +* [Deploy SQL DACPACs](#jun24-dacpac) +* [Web app deployment using ARM](#jun24-webappdeploy) + + +**Clone, export, and import release definitions** + +By popular demand, we have incorporated the ability to +clone, export, and import release definitions within the Release hub +in Team Services, without requiring installation of an extension. +If you are using Team Foundation Server 2015 Update 2 or higher, you +can download and install **[this extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.rm-import-export)** +from Visual Studio Marketplace to get the same functionality. + +![Clone and export commands on release summary page](_img/rm-archived/release-notes-16.png) + + +**Test results displayed in the release summary** + +In the release summary page, we have enabled a contribution point for an +external service to show environment-specific information. In Team Services, +this functionality is used to display a summary of test results when tests +are run as part of a release environment. + +![Test results - if any - displayed in a release summary](_img/rm-archived/release-notes-17.png) + + +**Pass OAuth tokens to scripts** + +If you need to run a custom PowerShell script that invokes the REST APIs +on Team Services, perhaps to create a work item or query a build for information, +you need to pass the OAuth token in the script. A new option when you configure +an environment allows scripts run as tasks in the environment to access the +current OAuth token. + +![Setting the option to allow access to the OAuth token](_img/rm-archived/release-notes-18.png) + +For more details, see [Agent phase properties](../../concepts/process/phases.md) + +This is a simple example showing how to get a build definition: + +```powershell +$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build-release/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=2.0" +Write-Host "URL: $url" +$definition = Invoke-RestMethod -Uri $url -Headers @{ + Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" +} +Write-Host "Definition = $($definition | ConvertTo-Json -Depth 1000)" +``` + + +**Task-level timeouts** + +In addition to specifying the timeout for an entire deployment, you +can now specify the timeout for every task individually; in both +release and build definitions. This allows you to exert more +fine-grained control over the release and deployment process. The +value is specified in the **Control Options** parameters for each +task as a number of minutes. The default is zero (infinite timeout). + +![Setting the timeout for a task in a release definition](_img/rm-archived/release-notes-19.png) + +For more details, see [Out-of-the-box tasks](../../concepts/process/tasks.md#task-control-options) + + +**Trigger on partially successful deployments** + +Build and release tasks have an option to **Continue on error** in +the **Control Options** parameters for each task. In a build +definition, this results in a **Build partially succeeded** result +if a task with this option set should fail. The +same behavior is now available in release definitions. If a task fails, +the overall release result will show as "Release partially succeeded". + +![Release summary shows partially successful releases in orange color](_img/rm-archived/release-notes-20a.png) + +By default, a partially successful release will not automatically trigger +a release to a subsequent environment, even if this behavior is specified +in the environment deployment options. However, a new option can be set in +each release environment that instructs Release Management to trigger a +release to a subsequent environment when the previous release is partially +successful. + +![Setting the option to trigger from a partially successful release](_img/rm-archived/release-notes-20b.png) + +For more details, see [Environment deployment triggers](../../concepts/definitions/release/triggers.md#env-triggers) + + +**Consume artifacts stored in GitHub directly** + +Sometimes you may want to consume artifacts stored in a version control system +directly, without passing them through a build process, as described in +**[this topic](../../concepts/definitions/release/artifacts.md#tfvcsource)**. +You can now do the same if your code in stored in a GitHub repository. + +![Linking code in a GutHub repository to a release definition](_img/rm-archived/release-notes-21.png) + +For more details, see [TFVC, Git, and GitHub sources](../../concepts/definitions/release/artifacts.md#tfvcsource) + + +**Jenkins plug-in for Release Management** + +Users of Jenkins CI can now create releases more easily by using the +**[VS Team Services Continuous Deployment Plugin](https://wiki.jenkins-ci.org/display/JENKINS/VS+Team+Services+Continuous+Deployment+Plugin)**, +available from the Jenkins website. This plugin triggers a release in +TFS or Team Services when a build completes successfully. Use it to +add post-build steps right into Jenkins CI projects to create a new release. +This, along with the ability for Release Management to understand and download +Jenkins artifacts, provides great end-to-end integration between these two tools. + +For more details, see [Jenkins sources](../../concepts/definitions/release/artifacts.md#jenkinssource) + + +**Add attachments to release summaries** + +You can upload additional files, images, logs, or other diagnostics aids +when running tasks in a release. The files are uploaded during the +deployment and are then included in the release summary and "Download all log files" +actions. To upload a new file, use the following agent command in your script: + +`Write-host "##vso[task.uploadfile]"` + + +**Deploy SQL DACPACs** + +The **[IIS Web App deployment using WinRM](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.iiswebapp)** +extension available from Visual Studio Marketplace now supports +deployment of database DACPACs. Use this capability to deploy +IIS web apps and databases from Team Services and TFS. + + +**Web app deployment using ARM** + +A new version of the **Azure Web App Deployment** task is available, called +**[AzureRM Web App Deployment](https://github.com/Microsoft/vsts-tasks/blob/master/Tasks/AzureRmWebAppDeployment/README.md)**. +It uses MSDeploy and an Azure Resource Manager service endpoint connection. +Use this task to deploy Azure Web Jobs and Azure API apps, in addition to +ASP.NET 4, Node, and Python based web apps. The task also supports common +publishing options such as the ability to retain app data, take an app off-line, +and remove additional files at the destination. More features, such as +configuration transformations, may appear in forthcoming versions. + +![Using the AzureRM Web App Deployment task in a release definition](_img/rm-archived/release-notes-22.png) + + +### May 23, 2016 Update (Team Services) + +This update has the following new features: + +* [Docker integration](#may23-docker) +* [Service hooks integration](#may23-hooks) +* [TeamCity integration](#may23-teamcity) +* [Release Management client SDK](#may23-clientsdk) + + +**Docker integration** + +Take advantage of the Team Services cloud based build +capabilities to build your Docker images, and upload +them to Docker Hub as part of your continuous integration flow. +Then deploy those images to a number of Docker hosts as +part of Release Management. The [Docker extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker) +in VisualStudio Marketplace adds all the service endpoint +types and tasks necessary for you to work with Docker +from Team Services. + + +**TeamCity integration** + +If you are a TeamCity user, you can now consume TeamCity +builds as artifacts in Release Management. Install the +[TeamCity artifacts](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vss-services-teamcity) +extension from VisualStudio Marketplace to setup a TeamCity +service endpoint. Then configure your release definitions +to deploy artifacts produced by TeamCity builds. +See [TeamCity artifact sources](../../concepts/definitions/release/artifacts.md#teamcitysource). + + +**Service hooks integration** + +Send release notifications when new releases are created, +deployments are started or completed, or when approvals +are pending or completed. Integrate with third party tools +such as Slack to receive such notifications. + + +**Release Management client SDK** + +In the last update, we published the +[Release Management REST APIs](https://www.visualstudio.com/integrate/api/rm/overview). +In this update, we are publishing a C# client SDK +to help you easily integrate your applications with +Release Management. The SDK is available as a +[NuGet package](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Release.Client/). +Example usage for this SDK can be found +[here](http://blogs.msdn.com/b/chandananjani/archive/2016/04/28/using-releasehttpclient-for-interacting-with-releasemanagement-service.aspx). + + +### Apr 26, 2016 Update (Team Services) + +This update provides several major improvements to Release Management: + +* [Simplified release definition wizard](#apr26-wizard) +* [View the history of a release](#apr26-history) +* [TFVC and TF Git as artifact sources](#apr26-tfsonprem) +* [Promote releases at a specific time](#apr26-timedrelease) +* [REST APIs for Release Management](#apr26-restapi) +* [Import, export, and clone release definitions](#apr26-import) +* [Additional variables for job execution](#apr26-newvars) + + +**Simplified wizard to create a release definition** + +Try the simplified wizard for creating a release definition. You can +enter most of the inputs in this wizard to set up a definition with a +single environment. We have also simplified the process of adding more +environments to a definition, and cloning an environment. + +![Simplified wizard to create a release definition](_img/rm-archived/release-notes-13.png) + + +**View the history of a release** + +View all the activity on a release in one place; including deployments, +approvals, configuration edits, and more. + +_**NOTE**: This feature is being rolled out over time to all regions; +therefore, it may not yet be available in your region._ + + +**TFVC and TF Git as artifact sources** + +Do you develop apps (such as PHP) that can deployed directly, +without having to be built first? Do you manage your config +files in source control repositories, and would like to consume +them directly in Release Management without needing to publish +build artifacts with the same files? + +Release Management supports +linking Team Foundation Version Control (TFVC) and Team Foundation +Git repositories as artifact sources in a release definition. +At present there is no support for auto-triggering new releases when a +commit is made into these repositories. + +![TFVC and TF Git as artifact sources](_img/rm-archived/release-notes-15.png) + + +**Promote releases to an environment at a specific time** + +Want all of your production deployments to happen at midnight? You can +configure a condition on an environment that selects a successful +deployment (or just the latest one) from another environment, and deploys +it at the specified time. + +![View the history of a release](_img/rm-archived/release-notes-14.png) + + +**REST APIs for Release Management** + +You can use the REST APIs for the Release Management service to +create release definitions and releases, and manage many aspects of +deploying a release. Most of these APIs also work with the +on-premises releases of Release Management in TFS 2015 Update 2 +(the differences between TFS and Team Services versions are indicated +in the documentation). You'll find some basic examples that use the APIs in +[this blog post](http://blogs.msdn.com/b/chandananjani/archive/2016/04/15/using-releasemanagement-rest-api-s.aspx). + + +**Import, export, and clone release definitions** + +Looking for a way to clone release definitions? Or copy release +definitions from one team project to another? These features will be +available out-of-the-box soon, but until then you can use an +[extension available from Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.rm-clone-rd). + + +**Additional variables available during job execution** + +When there are multiple artifact sources linked to a release definition, +you can access information about all the artifact sources when +executing deployment jobs. The information is available from +variables of the format: + +`RELEASE_ARTIFACTS_[alias]_[variable-name]` + +When used in a script, replace the underscore with a period: + +`RELEASE.ARTIFACTS.[alias].[variable-name]` + +Replace `[alias]` with the name of the alias for the artifact source +included in the release definition. You can find the alias name in the +**Artifacts** tab of a release definition. + +Replace `[variable-name]` with one of the following: + +* DEFINITIONID +* BUILDNUMBER +* BUILDID +* REPOSITORY\_NAME +* SOURCEBRANCH +* SOURCEBRANCHNAME +* SOURCEVERSION +* BUILDURI +* REQUESTEDFORID +* REPOSITORY\_PROVIDER +* REQUESTEDFOR +* TYPE + + +### Apr 8, 2016 Update (Team Services) + +**Consume TFS build artifacts in Team Services Release Management** + +A new extension makes it easy to deploy on-premises +TFS builds with Team Services Release Management, +even if the TFS machine is not reachable directly +from Team Services. The extension adds a TFS +service endpoint connection, and you use a new type of +artifact named **Team Build (external)** through +which you deploy builds from the TFS machine. + +You must install a non-hosted agent on a machine +that is able to connect to your TFS machine and +configure this agent in Team Services. The extension +does not yet work for deploying XAML builds. + +For more information, see [this blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/04/05/deploy-artifacts-from-onprem-tfs-server-with-release-management-service/). + +**Email release summary** + +Send the details of a release, including all the +sections (such as deployment status, work items, +commits, and build details) to email recipients. + +**Release definition summary - dashboard widget** + +Pin a release definition to the dashboard - an +easy way to make a summary of releases for that +definition visible to all your team. + +**Deploy based on conditions in multiple environments** + +Until now, you could do parallel deployments (_fork +deployments_), but you could not start a deployment +to an environment based on the status of multiple +environments (_join deployments_). Now you can, as +this video demonstrates. + +For more details, see [Parallel forked and joined deployments](../../concepts/definitions/release/triggers.md#parallel-forked-and-joined-deployments) + + +### Mar 15, 2016 Update (Team Services) + +**Inline scripting with the PowerShell task** + +You can now author an inline PowerShell script +within a release definition by using the +**PowerShell** task. This is ideal for those simple +scenarios where you do not want to check in and +publish the script as part of a build artifact. + +![Inline Powershell script](_img/rm-archived/release-notes-10.png) + +**Release management utilities extension** + +Token replacement in configuration files and +support for rolling back a deployment and leaving +an environment in a clean state are two of the +most requested features in Release Management. +It will take us some time to get these features +into the product in a more integrated manner, but +in the meantime we have provided a +[convenient extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.utilitytasks) +you can install from Visual Studio Marketplace +to satisfy these requirements. The extension adds +a number of tasks to your task catalog: + +* The **Tokenization** task helps in replacing +special tokens in any configuration file with the +required environment-specific values at release time. + + ![Inline Powershell script](_img/rm-archived/release-notes-12.png) + +* The **Rollback** task that checks whether any of + the previous tasks in the environment have failed, + and provides that information to your custom + PowerShell script. Based on information about + which task has failed, your custom script can run + appropriate cleanup logic. + + +### Mar 3, 2016 Update (Team Foundation Server) + +All the features of Release Management described +in this guidance are now available within Team +Foundation Server 2015 Update 2 Release Candidate 2. + + +### Feb 24, 2016 Update (Team Services) + +This update provides several major improvements to Release Management: + +* [Test results in releases](#feb24testtab) +* [Integration with VMWare](#feb24vmware) +* [Integration with System Center Virtual Machine Manager (SCVMM)](#feb24scvmm) +* [Deployment to Tomcat server](#feb24tomcat) +* [Deployments shown in build summary](#feb24buildsummary) +* [Specify the target environments to deploy to when creating a release](#feb24targetenv) +* [Scheduled trigger for creating new releases](#feb24schedtrigger) +* [Retention policies for releases](#feb24retention) + + +**Test results in releases** + +The new **Tests** tab in a release gives you a +complete picture of the tests that were run in +each environment of the release, and helps you +analyze their trends. + +![Tests tab in releases](_img/rm-archived/release-notes-11.png) + + +**Integration with VMware** + +With the new [VMware extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.vmwareapp) +published to Visual Studio Marketplace, you can +connect to a VMware vCenter server from Team Services +or Team Foundation Server and create, delete, or +apply snapshots to virtual machines managed in +vCenter. + +This allows you to create build and release definitions +in which you deploy to virtual machines managed in +VMware after dynamically provisioning them, or after +restoring them from a clean snapshot. + + +**Integration with System Center Virtual Machine Manager (SCVMM)** + +With the new [SCVMM extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.scvmmapp) +published to Visual Studio Marketplace, you can +connect to the SCVMM servers managed in the SCVMM +administration console. You can then use the extension +to create virtual machines from a template; +create, delete, and apply checkpoints; +or run PowerShell scripts with SCVMM cmdlets. + +This allows you to replicate one of the key features +from Team Foundation Server Lab Management. You can +now create build and release definitions in which +you deploy to virtual machines managed in SCVMM +after restoring them to a clean checkpoint. +Additional actions to create and delete virtual +machines may be available in future revisions of +this extension. + + +**Deployment to Tomcat server** + +You can deploy your Java web applications to a +Tomcat server using the new +[Apache Tomcat extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.apachetomcat) +available from Visual Studio Marketplace. + + +**Deployments shown in build summary** + +Continuing our theme of great integration between +Build and Release Management, you can now see a new +section in your build summary that shows a list of +environments into which that build has been deployed +through Release Management. You can also create a +new release from this section. + + +**Specify the target environments to deploy to when creating a release** + +After you create a new release, it may be deployed +automatically to the configured environments based +on the deployment conditions you defined for each +of the environments. However, there are situations +where you might not want to deploy a release +automatically to certain environments, and instead +want to override these conditions. + +The **Automated deployments** section of the **Create +new release** dialog now provides the capability to +"turn off" automatic deployment to environments +when creating a new release. + +![Specifying the rule for an automated deployment](_img/rm-archived/release-notes-09.png) + +A note on security: this feature does not offer full +flexibility for editing the deployment flow graph +across environments to all those with permission to +create a new release. That flexibility is still only +available to release definition authors. + + +**Scheduled trigger for creating new releases** + +Until now, you could only specify a continuous +deployment trigger that automatically created a new +release immediately. With this update, you can also +specify a schedule for the creation of new releases. +The latest version of successfully built artifacts +are used when creating the release at the scheduled +time. + +After the release is created, the way that it +is automatically deployed to environments is +determined by the deployment conditions configured +on those environments. You configure a scheduled +trigger for creating new releases on the **Triggers** +tab of a release definition. + +![Scheduled trigger](_img/rm-archived/release-notes-08.png) + + +**Retention policies for releases** + +You can now control how long releases are retained +by setting a retention policy for each release +definition. The default retention policy for all +release definitions is 60 days and so +releases that have not been deployed or modified +during that time will automatically be deleted. + +This policy comes into effect only for new releases +that you create after this version update has been +deployed. Releases created prior to this change will +be retained for 365 days. + +![Configuring retention policies](_img/rm-archived/release-notes-07.png) + +At present retention policies for Release Management +are independent of the retention policies for builds. + + +### Feb 12, 2016 Update (Team Foundation Server) + +All the features of Release Management described in this guidance +are now available within Team Foundation Server 2015 Update 2 Release Candidate 1. + + +### Feb 11, 2016 Update (Team Services) + +This update provides several major improvements to +Release Management: + +* [More control over the order of deployments to environments in a release](#feb11-1) +* [More control over queuing of deployments into the same environment](#feb11-2) +* [Know before you deploy](#feb11-3) +* [More control over time of deployment into an environment](#feb11-4) +* [More control over approvals](#feb11-5) +* [Add your own release summary sections](#feb11-7) + + +**More control over the order of deployments to environments in a release** + +You now have the flexibility to implement triggered deployment +orchestration on each environment in a release definition. +No longer are you constrained to a linear deployment pipeline. +For example, these scenarios can be easily implemented: + +* After a build is completed, you can deploy and run +automated tests in parallel on multiple environments or configurations. +* After a release is successfully deployed to a development +environment, you can deploy and test it on multiple +QA environments in parallel. +* You can specify that a deployment to production must +always be triggered manually. +* You can skip environments and manually promote the release to a selected environment. + +![Configuring environment conditions](_img/rm-archived/release-notes-03.png) + +For more details, see [Environment deployment triggers](../../concepts/definitions/release/triggers.md#env-triggers) + + +**More control over queuing of deployments into the same environment** + +To give you better control over how multiple pending +releases are deployed into a given environment, we have +introduced _queuing policies_ for environments. Your +CI pipeline may produce builds faster than they can be +deployed to environments in a release management +process, or multiple releases may be queued up on a +production environment awaiting approval after they +have passed QA. Queuing policies allow you to deploy in +parallel, deploy in sequence, or just deploy the latest one. +See [Queuing policies](../../concepts/definitions/release/environments.md#queuing-policies) + +![Configuring queuing policies](_img/rm-archived/release-notes-04.png) + + +**Know before you deploy** + +Every time you start to manually deploy a release to an +environment, you see a summary of what is being deployed +into that environment. This is based on computing the +difference between the current release and the last +release that was deployed into that environment. + + +**More control over time of deployment into an environment** + +You may want to approve a release now, but have it +deployed to the target environment at a specific time +in the future. We have added the capability to schedule +a deployment; for example, deployment to a production +environment at a specified time such as midnight. + +![Specifying a deferred deployment](_img/rm-archived/release-notes-05.png) + + +**More control over approvals** + +We added approval options that enable you to configure +multiple approvers for an environment, and control +whether these approvers can approve in parallel or in +a specified order. +See [Approvals and approvers](../../concepts/definitions/release/environments.md#approvals). + +![Configuring approval policies](_img/rm-archived/release-notes-06.png) + + +**Add your own release summary sections** + +You can now publish new sections into the release +summary by using a specific syntax. For example, +having the following line in your task will produce a +new section called **Attachments** containing the +contents of the file you specify: + +`Write-Verbose ##vso[Task.UploadSummary] Attachments.md` + + +### December 1, 2015 Update (Team Services) + +* **More tasks**. Until now, only a subset of tasks that were available in Build were available in Release Management. +With this update, the set of tasks that you can use in Build and Release Management are exactly the same. + +* **Simplified file copy and remote PowerShell tasks**. Copy files to Windows machines or run remote PowerShell scripts easily by directly +specifying a list of machines as inputs. + +* **Provision Azure virtual machines and run remote scripts on them**. Use the **Azure Resource Group Deployment** task to +dynamically provision virtual machines, and run remote PowerShell scripts using the **PowerShell on Target Machines** task. +Tie the output of the first task to the input list of machines in the second task. + + +### November 18, 2015 Update (Team Services) + +* **Public preview**. Release management service is open to everyone as part of the public preview program. + + +### November 03, 2015 Update (Team Services) + +* **Work items and commits in a release**. You can now see the new work items and + commits that went into a release when compared with the previous release. This + will help you understand the contents of a release. There is more work needed + in this space, but this is a start. + +* **Release definition history**. You can now see what's changed in a release + definition. Track the changes in a release definition using the **History** tab. + +* **Configurable email settings**. Choose whether the environment owner should be + notified of all deployments, or only failed deployments. + + +### October 19, 2015 Update (Team Services) + +* **Hosted agents support**. You can now use hosted agent pool for running + deployment tasks in your releases. To start using the hosted agent, select + each environment in a release definition in turn, open the shortcut menu + from the ellipses (...), and select **Agent options**. In the CONFIGURE + dialog for each environment, select **Hosted** as the default queue. + + ![Selecting the Hosted queue when configuring an environment](_img/rm-archived/release-notes-01.png) + +* **Branch information in releases**. View information about the code branch + in the **Releases** status list. This gives a better understanding of what + your releases contain. + + ![Branch information is shown in release status](_img/rm-archived/release-notes-02.png) + + +### September 21, 2015 Update (Team Services) + +* **Live logs**. Live view in your browser of deployment logs streamed from the automation agent. + +* **Release name configuration**. Specify the name and sequential numbering format for releases by + entering a format mask. + +* **Deploy from Build hub**. Create a release and deploy it right from + the Build hub. Simply right click on a completed build, and select the + **Release** menu. + +* **Integration with TFS on-premises builds**. Now you can start using + Release Management service in Team Services, even when you have been using + an on-premises TFS server for your builds. See + [On-premises TFS sources](../../concepts/definitions/release/artifacts.md#onpremtfssource) + for more details. + +* **IIS and SQL Database deployment tasks**. Deploy IIS web applications + and DACPACs with ease using these tasks. + + +### September 4, 2015 Update (Team Services) + + * **Consume Build artifacts more easily**. You can now easily consume multiple + artifacts published within a Team Build from RM. Linking a build + definition to a release definition has also been simplified. + + However, this change is a breaking change that requires you to edit + and save your release definitions again. In particular, the paths to + which artifacts are downloaded by the agent have changed. With this + update, all artifacts provided by a source (build definition) are + downloaded to the **$(System.DefaultWorkingDirectory)\\{**_build definition name_**}** + folder by the agent. Use the artifact file picker whenever possible + to specify the paths to files as you set the parameters of tasks. + + If you already have release definitions created prior to this update, + open each release definition in turn and: + + - Remove the artifacts that were added to the definition + - Re-link the artifact sources (add them back) to the definition + - Re-establish the trigger to that artifact source + - Edit the properties of the tasks to ensure that the input paths are correctly specified + - Save the release definition + + + * **Select artifacts more easily**. A file picker has been introduced + for selecting files from the artifact folder structure when setting the parameters for tasks. This is one of the features most requested + by early users. + + * **Agent queues**. The Release Management agent pools now use queues. + Build and Release Management use the same pools and queues with this update. + + * **Compare and view configuration variables**. Users can now view all + of the configuration variables across environments in a release + definition or in a release using the **Variables** page. + + * **Re-assign approvals**. Instead of approving or rejecting an approval + request, approvers can now re-assign the approval to another user or + group. + + * **Notification emails**. Release Management now sends email messages + to approvers when an approval is pending, and to environment owners + when the deployment to an environment has completed. + + * **Azure Service Principals**. When adding an Azure service endpoint, + you can now specify a service principal based authentication. This + will be required if you use 2-Factor Authentication with Azure Active Directory. + diff --git a/docs/build-release/archive/preview/2017-user-experience.md b/docs/build-release/archive/preview/2017-user-experience.md new file mode 100644 index 00000000000..71ff71599ac --- /dev/null +++ b/docs/build-release/archive/preview/2017-user-experience.md @@ -0,0 +1,78 @@ +--- +title: New Build Editor +description: A preview of a new user experience for Team Foundation Build (TFBuild) on Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 27AD0094-FDF1-4B36-A82E-B845980984AF +ms.manager: douge +ms.author: alewis +ms.date: 01/03/2017 +--- + +# New Build Editor + +> [!IMPORTANT] +> +> Our thanks to those of you who tried the early previews of our new build editor and gave us feedback. We're getting ready to retire the old build editor. So if you haven't yet gotten familiar with the new build editor, we encourage you to do so now. + +We have launched a preview version of a new experience for creating and editing build definitions in your VSTS account. +You can explore this experience by creating a new build definition, or by opening your existing build definitions in the new editor after turning it on +from the Build Definitions page. + + ![Schematic showing tasks](_img/2017-user-experience/Opt-in.png) + +You can also enable this editor for your entire account from the [preview features](../../../collaborate/preview-features.md) menu. + +##What’s in the new build editor +* **Quickly get started by searching for templates.** You can search for one of the out-of-the-box or customized templates and choose +‘Apply’, or simply choose ‘empty template’ to get started. + + ![Schematic showing template selection](_img/2017-user-experience/Apply template.png) + + +* **Working with tasks is now a breeze.** You can now search for tasks and add them to a specified location (indicated by the blue line) by using the 'Add' button or you can +directly drag and drop them to your desired location. You can also reorder tasks in the build definition by using drag and drop or clone them using Ctrl + drag and drop. + + ![Schematic showing tasks](_img/2017-user-experience/Tasks.png) + +* **Getting started made easy with ‘Process parameters’.** When you start with one of the out-of-the-box templates, +the most important fields across all tasks in the template are displayed in a single view called “Process”. You can also link additional fields across all tasks to new or existing +process parameters to bubble them to the Process view. [More details](#parameters) + + ![Schematic showing tasks](_img/2017-user-experience/Process parameters view.png) + +* **Configuring sources is now in-context.** +You can configure the sources to build along with tasks. If you’re pulling sources from GitHub, external +Git, or subversion repos, you can configure connections to those endpoints in-line - without going to Services tab in Admin hub. + + ![Schematic showing tasks](_img/2017-user-experience/Configuring sources.png) + + + +##What are process parameters? + +You can link all important fields for tasks used across the build definition as process parameters, which are then shown at one place - the Process view. +This means you can quickly edit these fields without needing to click through all the tasks, making getting started simple. +* Out-of-the-box templates come with a set of pre-defined process parameters. + +![Schematic showing tasks](_img/2017-user-experience/Process parameters view 1.png) + +* You can also link additional fields across all tasks to new or existing process parameters. + + ![Schematic showing tasks](_img/2017-user-experience/Tasks linking.png) + + ![Schematic showing tasks](_img/2017-user-experience/Process parameters view 2.png) + +* Similarly, you can also unlink fields from process parameters. + + ![Schematic showing tasks](_img/2017-user-experience/Tasks unlinking.png) + +##How are process parameters different from variables? +Process parameters differ from variables in the kind of input supported by them. Variables only take in string inputs while process parameters in addition to string inputs support +additional data types like checkboxes and picklists. + +Process parameters can be only be created and edited using the new build editor. They are not available in the existing build editor. + +**Please Note:** Currently support for adding dependent tasks fields as process parameters is not available. This support will get added in the coming sprints. + + diff --git a/docs/build-release/archive/preview/_img/2017-user-experience/Apply template.png b/docs/build-release/archive/preview/_img/2017-user-experience/Apply template.png new file mode 100644 index 00000000000..ff6686ecabe Binary files /dev/null and b/docs/build-release/archive/preview/_img/2017-user-experience/Apply template.png differ diff --git a/docs/build-release/archive/preview/_img/2017-user-experience/Configuring sources.png b/docs/build-release/archive/preview/_img/2017-user-experience/Configuring sources.png new file mode 100644 index 00000000000..6e037247c38 Binary files /dev/null and b/docs/build-release/archive/preview/_img/2017-user-experience/Configuring sources.png differ diff --git a/docs/build-release/archive/preview/_img/2017-user-experience/Opt-in.png b/docs/build-release/archive/preview/_img/2017-user-experience/Opt-in.png new file mode 100644 index 00000000000..c88e92e26e7 Binary files /dev/null and b/docs/build-release/archive/preview/_img/2017-user-experience/Opt-in.png differ diff --git a/docs/build-release/archive/preview/_img/2017-user-experience/Process parameters view 1.png b/docs/build-release/archive/preview/_img/2017-user-experience/Process parameters view 1.png new file mode 100644 index 00000000000..0b474f60a71 Binary files /dev/null and b/docs/build-release/archive/preview/_img/2017-user-experience/Process parameters view 1.png differ diff --git a/docs/build-release/archive/preview/_img/2017-user-experience/Process parameters view 2.png b/docs/build-release/archive/preview/_img/2017-user-experience/Process parameters view 2.png new file mode 100644 index 00000000000..aa113b90bef Binary files /dev/null and b/docs/build-release/archive/preview/_img/2017-user-experience/Process parameters view 2.png differ diff --git a/docs/build-release/archive/preview/_img/2017-user-experience/Process parameters view.png b/docs/build-release/archive/preview/_img/2017-user-experience/Process parameters view.png new file mode 100644 index 00000000000..5eb804afb0f Binary files /dev/null and b/docs/build-release/archive/preview/_img/2017-user-experience/Process parameters view.png differ diff --git a/docs/build-release/archive/preview/_img/2017-user-experience/Tasks linking.png b/docs/build-release/archive/preview/_img/2017-user-experience/Tasks linking.png new file mode 100644 index 00000000000..7cbd1c7abf9 Binary files /dev/null and b/docs/build-release/archive/preview/_img/2017-user-experience/Tasks linking.png differ diff --git a/docs/build-release/archive/preview/_img/2017-user-experience/Tasks unlinking.png b/docs/build-release/archive/preview/_img/2017-user-experience/Tasks unlinking.png new file mode 100644 index 00000000000..9c0bfadda4b Binary files /dev/null and b/docs/build-release/archive/preview/_img/2017-user-experience/Tasks unlinking.png differ diff --git a/docs/build-release/archive/preview/_img/2017-user-experience/Tasks.png b/docs/build-release/archive/preview/_img/2017-user-experience/Tasks.png new file mode 100644 index 00000000000..e4711c515c8 Binary files /dev/null and b/docs/build-release/archive/preview/_img/2017-user-experience/Tasks.png differ diff --git a/docs/build-release/archive/preview/_img/release-definition-editor/open-editor.png b/docs/build-release/archive/preview/_img/release-definition-editor/open-editor.png new file mode 100644 index 00000000000..297914495da Binary files /dev/null and b/docs/build-release/archive/preview/_img/release-definition-editor/open-editor.png differ diff --git a/docs/build-release/archive/preview/release-definition-editor.md b/docs/build-release/archive/preview/release-definition-editor.md new file mode 100644 index 00000000000..f73b49c07f4 --- /dev/null +++ b/docs/build-release/archive/preview/release-definition-editor.md @@ -0,0 +1,59 @@ +--- +title: Release Definition Preview Editor +description: Use the release definition editor in Release Management for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 00624D7C-1FF0-49B8-9117-A1F6276D777F +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 05/05/2017 +--- + +# Release Definition Editor Preview + +VSTS contains a new release definition editor that makes creating release definitions much easier and more intuitive. +While it is in preview, you can turn the new editor on and off at any time. See +[Enable preview features](../../../collaborate/preview-features.md) +for more details. + +![Turning the new editor on and off](_img/release-definition-editor/open-editor.png) + +For details of how to use the new editor, see [Work with release definitions](../../actions/work-with-release-definitions.md). + +## Q: Can I edit release definitions with both the existing and the new editors interchangeably? + +**A**: Yes, you can use the new editor to manage tasks and triggers, +and fall back to the existing editor for configuring options that are +not yet available in the new editor. Simply select **Releases** in the +**Build & Release** menu, select the release definition, and choose **Edit**. + +## Q: Is there any specific feedback you are looking for? + +**A**: Yes, we're keen to hear your feedback about: + +* Setting deployment triggers and approvals. +* Navigation from the Pipeline tab to the Tasks tab. +* The visual representation of the deployment workflow. + +Please send your feedback to [RM_Customer_Queries@microsoft.com](mailto:RM_Customer_Queries@microsoft.com) + +## Related topics + +* [Artifacts](../../concepts/definitions/release/artifacts.md) +* [Environments](../../concepts/definitions/release/environments.md) +* [Triggers](../../concepts/definitions/release/triggers.md) +* [Variables](../../concepts/definitions/release/variables.md) +* [Release retention](../../concepts/policies/retention.md) +* [Release security](../../concepts/policies/permissions.md#release-permissions) + +## See also + +* [Work with release definitions](../../actions/work-with-release-definitions.md) + +* [View and manage releases](../../actions/view-manage-releases.md) + +* [Monitor releases and debug deployment issues](../../actions/debug-deployment-issues.md) + +* [Configure your release pipelines for safe deployments](https://blogs.msdn.microsoft.com/visualstudioalm/2017/04/24/configuring-your-release-pipelines-for-safe-deployments/) + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/agents/_img/agent-connections.png b/docs/build-release/concepts/agents/_img/agent-connections.png new file mode 100644 index 00000000000..b3fa9c13f98 Binary files /dev/null and b/docs/build-release/concepts/agents/_img/agent-connections.png differ diff --git a/docs/build-release/concepts/agents/_img/agent-topologies.png b/docs/build-release/concepts/agents/_img/agent-topologies.png new file mode 100644 index 00000000000..5b405b7e41d Binary files /dev/null and b/docs/build-release/concepts/agents/_img/agent-topologies.png differ diff --git a/docs/build-release/concepts/agents/_img/build-system-architecture-tfs-2015.png b/docs/build-release/concepts/agents/_img/build-system-architecture-tfs-2015.png new file mode 100644 index 00000000000..2e028e81d19 Binary files /dev/null and b/docs/build-release/concepts/agents/_img/build-system-architecture-tfs-2015.png differ diff --git a/docs/build-release/concepts/agents/_img/build-system-architecture.png b/docs/build-release/concepts/agents/_img/build-system-architecture.png new file mode 100644 index 00000000000..2184f986ca4 Binary files /dev/null and b/docs/build-release/concepts/agents/_img/build-system-architecture.png differ diff --git a/docs/build-release/concepts/agents/_shared/agent-pools-tab.md b/docs/build-release/concepts/agents/_shared/agent-pools-tab.md new file mode 100644 index 00000000000..4170b9c1940 --- /dev/null +++ b/docs/build-release/concepts/agents/_shared/agent-pools-tab.md @@ -0,0 +1,11 @@ +
      +
    • VSTS: https://{your_account}.visualstudio.com/_admin/_AgentPool
    • + +
    • TFS 2017: https://{your_server}/tfs/DefaultCollection/_admin/_AgentPool
    • + +
    • TFS 2015: http://{your_server}:8080/tfs/_admin/_AgentPool
    • +
    + +

    [The TFS URL doesn't work for me. How can I get the correct URL?](../../../../security/websitesettings.md)

    + + diff --git a/docs/build-release/concepts/agents/_shared/agent-queues-tab.md b/docs/build-release/concepts/agents/_shared/agent-queues-tab.md new file mode 100644 index 00000000000..ba828748423 --- /dev/null +++ b/docs/build-release/concepts/agents/_shared/agent-queues-tab.md @@ -0,0 +1,9 @@ +* VSTS: `https://{your_account}.visualstudio.com/{project-name}/_admin/_AgentQueue` + +* TFS 2017: `https://{your_server}/tfs/{collection-name}/{project-name}/_admin/_AgentQueue` + +* TFS 2015 RTM: `http://{your_server}:8080/tfs/_admin/_buildQueue` + +* TFS 2015 Update 3: `http://{your_server}:8080/tfs/{collection-name}/_admin/_AgentQueue` + +[The TFS URL doesn't work for me. How can I get the correct URL?](../../../../security/websitesettings.md) diff --git a/docs/build-release/concepts/agents/_shared/hosted-software.md b/docs/build-release/concepts/agents/_shared/hosted-software.md new file mode 100644 index 00000000000..1190799dab4 --- /dev/null +++ b/docs/build-release/concepts/agents/_shared/hosted-software.md @@ -0,0 +1,130 @@ +### Hosted + +* Windows Server 2012 R2, 64-bit environment, with Windows PowerShell +* Team Foundation Build (Team Foundation Server 2013) +* Visual Studio 2015 Update 3 +* Visual Studio SDK 2015 RTM +* Visual Studio 2013 Update 5 +* Visual Studio SDK 2013 RTM +* Visual Studio 2012 Ultimate Update 4 +* Visual Studio SDK 2012 RTM +* Visual Studio 2010 SP1 + +* The .NET Framework + - .NET 4.6.2 + - .NET 4.5.2 + - .NET 4.5.1 + - .NET 4.5 + - .NET 3.5 SP1 + - .NET Core 1.0 + - .NET Core 1.1 + +* Microsoft Azure + - SDK 2.9.6 + - SDK 2.8 + - SDK 2.7 + - SDK 2.6 + - SDK 2.5 + - SDK 2.4 + - SDK 2.3 + - SDK 2.2 + - Azure CLI 0.10.7 + - Azure PowerShell 3.6.0 + - AzureRM PowerShell 3.6.0 + +* Other components + - Android Native Development Kit r13b + - Android Software Development Kit 25.2.5 + - Android support repository version 30 + - Apache ANT 1.10.1 + - Apache Maven 3.2.2 + - ASP.NET 3.5 + - ASP.NET MVC 2 + - ASP.NET MVC 3 + - ASP.NET Web Tools for Visual Studio 2015 (Beta 8) + - ASP.NET Web Tools for Visual Studio Express 14 for Web (Beta 8) + - Bing Maps SDK + - Cloud Foundry CLI 6.25.0 + - CMake 3.7.1 + - Cordova 6.1.0 + - Git 2.14.1 + - Git for Windows 2.10.2 + - Git LFS 2.1.1 + - Google Repository version 29 + - GTK# 2.12.30 + - Java Standard Edition Development Kit 1.8.0_131 + - Let's Encrypt root certs for JDK certificate store + - Maven 3.5 + - Microsoft Office Developer Tools for Visual Studio 2012 + - Microsoft Office Developer Tools for Visual Studio 2013 (March 2014 Update) + - Multilingual Application Toolkit 4 + - Node.js 6.11.0 + - Node.js Tools 1.0 Beta for Visual Studio 2013 + - Node.js Tools 1.0 for Visual Studio 2015 + - Python 3.6.1 + - Python Tools for Visual Studio 2012 and Visual Studio 2013 + - Service Fabric 5.4.164.9494 + - Service Fabric SDK 2.4.164 + - SharePoint 2010 and SharePoint 2013 + - SharePoint Online Shell + - SQL Lite for WinRT 8.0, WinRT 8.1, and Windows Phone 8.0, 8.1 + - SQL Server DAC Framework for x86 and x64 17.1 + - SQL Server Data Tools 17.1 + - SQL Server Data Tools BI for Visual Studio 2012 and Visual Studio 2013 + - TFS Build Extensions + - TypeScript 1.4 for Visual Studio 2013 + - TypeScript 1.6 for Visual Studio 2013 and Visual Studio 2015 + - TypeScript 1.7.5 for Visual Studio 2013 + - TypeScript 1.7.6 for Visual Studio 2015 + - TypeScript 1.8.6 for Visual Studio 2013 and Visual Studio 2015 + - TypeScript 2.0.6 for Visual Studio 2015 + - WIX Toolset 3.10 + - Web Deploy 3.0 + - Windows 10 SDK 14393 + - Windows 8 Shared SDK Tools + - Windows Phone SDK 8.0 + - Xamarin for Visual Studio 4.2.2.11 + - Xamarin Studio 6.1.4.1 + - Xamarin Stable Cycle 9 + +### Hosted VS2017 + +* Visual Studio 2017 (15.3 Update) +* .NET Core 2.0.0 +* Android SDK, including support for repositories +* Android SDK Build Tools - 19.0.1 to 25.0.2 +* ANT 1.9.7 w/ Cobertura +* Azure CLI 2.02 (Python) +* Azure PowerShell 3.8.0 (Installed) +* AzureRM PowerShell 3.8.0 (Installed) +* Azure PowerShell 4.2.1 (Saved) +* AzureRM PowerShell 4.2.1 (Saved) +* Bower +* CMake 3.8 +* Docker 17.03.2-ee-5 +* Docker Compose 1.14.0 +* Git 2.14.1 +* GIT LFS 2.0.2 +* Grunt +* Gulp +* JDK 1.6.0_45 +* JDK 1.7.0_75 +* JDK 1.8.0_102 +* Let's Encrypt certificates for JDK 1.8.0_102 +* Maven 3.2.2 +* Multilingual App Toolkit 4.0 +* Node 6.10.0 +* NPM Packages +* Python 2.7.13 +* Python 3.6.1 +* Service Fabric 5.4.164.9494 +* Service Fabric SDK 2.4.164 +* SQL Lite for UWP apps +* SQL Server Data Tools "Extras" 17.1 with Analysis Services and Reporting Services +* SQL Server Data-Tier Application Framework (DacFx) 17.1 +* WIX Toolset 3.10 + +### Hosted Linux Preview + +For the Docker and Docker Compose versions, see https://github.com/Microsoft/vsts-agent-docker/blob/master/ubuntu/16.04/docker/17.06.0-ce/standard/Dockerfile +For the other software, see https://github.com/Microsoft/vsts-agent-docker/blob/master/ubuntu/16.04/standard/Dockerfile diff --git a/docs/build-release/concepts/agents/_shared/v2/qa-agent-version.md b/docs/build-release/concepts/agents/_shared/v2/qa-agent-version.md new file mode 100644 index 00000000000..abbd0fd2dde --- /dev/null +++ b/docs/build-release/concepts/agents/_shared/v2/qa-agent-version.md @@ -0,0 +1,17 @@ +### How do I make sure I have the latest v2 agent version? + +0. Go to the _Agent pools_ control panel tab: +[!INCLUDE [agent-pools-tab](../../_shared/agent-pools-tab.md)] + +0. Click the pool that contains the agent. + +0. Make sure the agent is enabled. + +0. Click **Agents**. + +0. Click **Capabilities**. + +0. Look for the `Agent.Version` capability. + > You can check this value against the latest published agent version. See [VSTS Build and Release Agent](https://github.com/Microsoft/vsts-agent/releases) and check the page for the highest version number listed. + +0. Each agent automatically updates itself when it runs a task that requires a newer version of the agent. But if you want to manually update some agents, right-click the pool, and then click **Update all agents**. diff --git a/docs/build-release/concepts/agents/agents.md b/docs/build-release/concepts/agents/agents.md new file mode 100644 index 00000000000..f01bea57f99 --- /dev/null +++ b/docs/build-release/concepts/agents/agents.md @@ -0,0 +1,210 @@ +--- +ms.prod: vs-devops-alm +title: Build and Release Agents +description: Build and Release Agents in VSTS and Team Foundation Server +ms.technology: vs-devops-build +ms.assetid: 5C14A166-CA77-4484-8074-9E0AA060DE58 +ms.manager: douge +ms.author: alewis +ms.date: 08/26/2016 +--- +# Build and Release Agents + +**VSTS | TFS 2017 | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/library/bb399135%28v=vs.120%29.aspx)** + +To build your code or deploy your software you need at least one agent. As you add more code and people, you'll eventually need more. + +When your build or deployment runs, the system begins one or more jobs. An agent is installable software that runs one build or deployment job at a time. + +## Hosted agents + +If you're using VSTS, you've got the option to build and deploy using a **hosted agent**. When you use a hosted agent, we take care of the maintenance and upgrades. So for many teams this is the simplest way to build and deploy. You can try it first and see if it works for your build or deployment. If not, you can set up a private agent. + +> [!NOTE] +> Hosted agents are available only in VSTS, not in Team Foundation Server (TFS). + +We provide hosted agents to you in the hosted pool. If you need to run more than one job at a time, you'll need to get more [concurrent pipelines](../licensing/concurrent-pipelines-ts.md). + + [Learn more about hosted agents](hosted.md). + +

    Private agents

    + +An agent that you set up and manage on your own to run build and deployment jobs is a **private agent**. You can use private agents in VSTS or Team Foundation Server (TFS). Private agents give you more control to install dependent software needed for your builds and deployments. + +You can install the agent on Windows, Linux, or OSX machines. You can also install an agent on a Linux Docker container. + +After you've installed the agent on a machine, you can install any other software on that machine as required by your build or deployment jobs. + +### Install and connect to VSTS and TFS 2017 + +> [!TIP] +> Is your code in VSTS? If so, before you install an agent you might want to see if the hosted pool will work for you. In many cases this is the simplest way to get going. [Give it a try](hosted.md). + +* [Windows agent v2](../../actions/agents/v2-windows.md) +* [OSX agent](../../actions/agents/v2-osx.md) +* [Ubuntu 14.04 agent](../../actions/agents/v2-linux.md) +* [Ubuntu 16.04 agent](../../actions/agents/v2-linux.md) +* [RedHat agent](../../actions/agents/v2-linux.md) + +### Install and connect to TFS 2015 + +* [Windows agent v1](../../actions/agents/v1-windows.md) +* [OSX agent](../../actions/agents/v2-osx.md) +* [Ubuntu 14.04 agent](../../actions/agents/v2-linux.md) +* [Ubuntu 16.04 agent](../../actions/agents/v2-linux.md) +* [RedHat agent](../../actions/agents/v2-linux.md) + +### Concurrent pipelines for private agents + +You might need more concurrent pipelines to use multiple agents at the same time: + +* [Concurrent pipelines in VSTS](../licensing/concurrent-pipelines-ts.md) +* [Concurrent pipelines in TFS](../licensing/concurrent-pipelines-tfs.md) + +

    Capabilities

    + +Every agent has a set of capabilities that indicate what it can do. Capabilities are name-value pairs that are either automatically discovered by the agent software, in which case they are called **system capabilities**, or those that you define, in which case they are called **user capabilities**. + +The agent software automatically determines various system capabilities such as the name of the machine, type of operating system, and versions of certain software installed on the machine. Also, environment variables defined in the machine automatically appear in the list of system capabilities. + +When you author a build or release definition, or when you queue a build or deployment, you specify certain **demands** of the agent. The system sends the job only to agents that have capabilities matching the demands [specified in the definition](../../concepts/definitions/build/options.md). As a result, agent capabilities allow you to direct builds and deployments to specific agents. + +You can view the system capabilities of an agent, and manage its user capabilities by navigating to the **Agent pools** hub and selecting the **Capabilities** tab for the desired agent. + +[!INCLUDE [agent-pools-tab](_shared/agent-pools-tab.md)] + +> [!TIP] +> +> After you install new software on a agent, you must restart the agent for the new capability to show up. + +

    Communication

    + +### Communication with VSTS or TFS + +#### VSTS or TFS 2017 + +The agent communicates with VSTS or TFS to determine which job it needs to run, and to report the logs and job status. This communication is always initiated by the agent. All the messages from the agent to VSTS or TFS happen over HTTP or HTTPS, depending on how you configure the agent. This pull model allows the agent to be configured in different topologies as shown below. + +![Agent topologies](_img/agent-topologies.png) + +Here is a common communication pattern between the agent and VSTS or TFS. + +1. The user registers an agent with VSTS or TFS by adding it to an [agent pool](pools-queues.md). You need to be an [agent pool administrator](pools-queues.md#security) to register an agent in that agent pool. The identity of agent pool administrator is needed only at the time of registration and is not persisted on the agent, nor is used in any further communication between the agent and VSTS or TFS. Once the registration is complete, the agent downloads a _listener OAuth token_ and uses it to listen to the job queue. + +2. Periodically, the agent checks to see if a new job request has been posted for it in the job queue in TFS/VSTS. When a job is available, agent downloads the job as well as a _job-specific OAuth token_. This token is generated by TFS/VSTS for the scoped identity [specified in the definition](../../concepts/definitions/build/options.md). That token is short lived and is used by agent to access (e.g., source code) or modify resources (e.g., upload test results) on VSTS or TFS within that job. + +3. Once the job is completed, agent discards the job-specific OAuth token and goes back to checking if there is a new job request using the listener OAuth token. + +The payload of the messages exchanged between the agent and TFS/VSTS are secured using asymmetric encryption. Each agent has a public-private key pair, and the public key is exchanged with the server during registration. Server uses the public key to encrypt the payload of the job before sending it to the agent. The agent decrypts the job content using its private key. This is how secrets stored in build definitions, release definitions, or variable groups are secured as they are exchanged with the agent. + +#### TFS 2015 + +In TFS 2015: + +* An agent pool administrator joins the agent to an agent pool, and the credentials of the service account (for Windows) or the saved user name and password (for OSX and Linux) are used to initiate communication with TFS. The agent uses these credentials to listening to the job queue. + +* The agent does not use asymmetric key encryption while communicating with the server. However, you can [use HTTPS to secure the communication](../../../security/websitesettings.md) between the agent and TFS. + +### Communication to deploy to target servers + +When you use the agent to deploy artifacts to a set of servers, it must have "line of sight" +connectivity to those servers. The hosted pool, by default, has +connectivity to Windows Azure websites and Windows servers running in Azure. + +If your on-premises environments do not have connectivity to the hosted pool +(which is typically the case due to intermediate firewalls), you'll need to +manually configure a private agent on on-premises computer(s). The agents must have connectivity to the target +on-premises environments, and access to the Internet to connect to VSTS or Team Foundation Server, +as shown in the following schematic. + +![Agent connectivity for on-premises environments](_img/agent-connections.png) + +## Authentication + +To register an agent, you need to be a member of the [administrator role](pools-queues.md#security) in the agent pool. Your agent can authenticate to VSTS or TFS using one of the following methods: + +* **Personal Access Token (PAT):** [Generate](../../../accounts/use-personal-access-tokens-to-authenticate.md) and use a PAT to connect an agent with VSTS or TFS 2017. PAT is the only scheme that works with VSTS. + +* **Integrated:** Connect a Windows agent to TFS using the credentials of the signed-in user via a Windows authentication scheme such as NTLM or Kerberos. + +* **Negotiate:** Connect to TFS as a user other than the signed-in user via a Windows authentication scheme such as NTLM or Kerberos. + +* **Alternate:** Connect to TFS using Basic authentication. To use this method you'll first need to [configure HTTPS on TFS](../../../security/websitesettings.md). + +

    Interactive vs. service

    + +You can run your agent as either a service or an interactive process. +Whether you run an agent as a service or interactively, you can choose +which account you use to run the agent. Note that this is different +from the credentials that you use when you register the agent with +VSTS or TFS. The choice of agent account depends solely on the needs +of the tasks running in your build and deployment jobs. + +For example, to run tasks that use Windows authentication to access an external +service, you must run the agent using an account that has access +to that service. However, if you are running UI tests such as Selenium or Coded UI tests that +require a browser, the browser is launched in the context of the agent account. + +After you've configured the agent, we recommend you first try it +in interactive mode to make sure it works. Then, for production use, +we recommend you run the agent in one of the following modes so +that it reliably remains in a running state. These modes also +ensure that the agent starts automatically if the machine is restarted. + +1. **As a service**. You can leverage the service manager of the + operating system to manage the lifecycle of the agent. In addition, the + experience for auto-upgrading the agent is better when it is run + as a service. + +1. **As an interactive process with auto-logon enabled**. In some cases, + you might need to run the agent interactively for production use - + such as to run UI tests. When the agent is configured to run in this + mode, the screen saver is also disabled. Some domain policies may + prevent you from enabling auto-logon or disabling the screen saver. In + such cases, you may need to seek an exemption from the domain policy, + or run the agent on a workgroup computer where the domain policies + do not apply. + + **Note:** There are security risks when you enable automatic logon + or disable the screen saver because you enable other users to walk + up to the computer and use the account that automatically logs on. If you configure the agent to run + in this way, you must ensure the computer is physically protected; + for example, located in a secure facility. If you use + Remote Desktop to access the computer on which an agent is running + with auto-logon, simply closing the Remote Desktop causes the + computer to be locked and any UI tests that run on this agent may + fail. To avoid this, use the [tscon](https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/tscon) + command to disconnect from Remote Desktop. For example: + + `%windir%\System32\tscon.exe 1 /dest:console` + +## Agent version and upgrades + +We update the agent software every few weeks in VSTS, and with every update in TFS. We indicate the agent version in the format `{major}.{minor}`. For instance, if the agent version is `2.1`, then the major version is 2 and the minor version is 1. When a newer version of the agent is only different in minor version, it is automatically upgraded by VSTS or TFS. This upgrade happens when one of the tasks requires a newer version of the agent. + +If you run the agent interactively, or if there is a newer major version of the agent available, then you have to manually upgrade the agents. You can do this easily from the agent pools tab under your team project collection or account. + +You can view the version of an agent by navigating to the **Agent pools** hub and selecting the **Capabilities** tab for the desired agent. + +[!INCLUDE [agent-pools-tab](_shared/agent-pools-tab.md)] + +## Q&A + +

    Do private agents have any performance advantages over hosted agents?

    + +In many cases, yes. Specifically: + +* If you use a private agent you can run incremental builds. For example, you define a CI build process that does not clean the repo and does not perform a clean build, your builds will typically run faster. When you use a hosted agent, you don't get these benefits because the agent is destroyed after the build or release process is completed. + +* A hosted agent can take longer to start your build. While it often takes just a few seconds for your job to be assigned to a hosted agent, it can sometimes take several minutes for an agent to be allocated depending on the load on our system. + + +### Can I install multiple private agents on the same machine? + +Yes. This approach can work well for agents that run jobs that don't consume a lot of shared resources. For example, you could try it for agents that run releases that mostly orchestrate deployments and don't do a lot of work on the agent itself. + +You might find that in other cases you don't gain much efficiency by running multiple agents on the same machine. For example, it might not be worthwhile for agents that run builds that consume a lot of disk and I/O resources. + +You might also run into problems if concurrent build processes are using the same singleton tool deployment, such as NPM packages. For example, one build might update a dependency while another build is in the middle of using it, which could cause unreliable results and errors. + +[!INCLUDE [agent-latest-version](_shared/v2/qa-agent-version.md)] diff --git a/docs/build-release/concepts/agents/hosted.md b/docs/build-release/concepts/agents/hosted.md new file mode 100644 index 00000000000..c1e109c1ef9 --- /dev/null +++ b/docs/build-release/concepts/agents/hosted.md @@ -0,0 +1,85 @@ +--- +title: Hosted agents for Visual Studio Team Services +description: Use the hosted agents in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: D17E9C01-8026-41E8-B44A-AB17EDE4AFBD +ms.manager: douge +ms.author: alewis +ms.date: 11/28/2016 +--- + +# Hosted agents + +**VSTS** + +If you use Visual Studio Team Services, to build or deploy your app, then it's more convenient to use our hosted agents, but some limitations apply. + +> [!TIP] +> +> You can try a hosted agent for no charge. If it doesn't work, the issues will be reported in the build or release logs. + +## Use a hosted agent + +To use a hosted agent, while [editing your build definition](../../actions/ci-cd-part-1.md), on the **Options** or **General** tab, for the **Default agent queue**, and then select either: + +* **Hosted** if your team uses Visual Studio 2013 or Visual Studio 2015 + +* **Hosted VS2017** if your team uses Visual Studio 2017 + +* **Hosted Linux** if your team uses development tools on Ubuntu + +## Capabilities and limitations + +Hosted agents: + +* Run as a service. + +* Have [this software](#software). You can also add software using our [tool installers](../process/tasks.md#tool-installers). + +* Provide 10GB of storage. + +Hosted agents do not offer: + +* Interactive mode. + +* Administrator privileges. + +* The ability to log on. + +* The ability to [drop artifacts to a UNC file share](../../concepts/definitions/build/artifacts.md#unc-file-share). + +* The ability to run [XAML builds](https://msdn.microsoft.com/en-us/library/ms181709%28v=vs.120%29.aspx). + +* Potential performance advantages that you might get by using private agents which might start and process builds faster. [Learn more](agents.md#private-agent-performance-advantages) + +If our hosted agents don't meet your needs, then you can [deploy your own private agents](agents.md#install). + +## Avoid hard coded references + +When you use a hosted agent, you should always use [variables](../../concepts/definitions/build/variables.md) to construct any references to resources used by your build. We recommend you avoid making hard-coded presumptions about resources provided by the hosted agent (for example, the drive letter of folder that contains the repo). + +

    Software

    + +[!INCLUDE [temp](_shared/hosted-software.md)] + +## Q & A + + +### I can't select the hosted queue and I can't queue my build or deployment. How do I fix this? + +By default, all project contributors in an account have access to the hosted queue. But, your account administrator may have limited the access of hosted queue to select users or projects. Ask the owner of your VSTS account to grant you permission to use the queue. See [agent queue security](pools-queues.md#security). + +### I need more agents. What can I do? + +A: The hosted pool provides all VSTS accounts with a single agent and a limited number of free minutes each month. If you need more minutes, or need to run more than one build or release concurrently, then you can buy [concurrent pipelines](../../concepts/licensing/concurrent-pipelines-ts.md). + +### I'm looking for the hosted XAML build controller. Where did it go? + +The hosted XAML build controller is no longer supported. If you have an account in which you still need to run [XAML builds](https://msdn.microsoft.com/en-us/library/ms181709%28v=vs.120%29.aspx), you should set up a [private build server](https://msdn.microsoft.com/en-us/library/ms252495%28v=vs.120%29.aspx) and a [private build controller](https://msdn.microsoft.com/en-us/library/ee330987%28v=vs.120%29.aspx). + +> [!TIP] +> +> We recommend that you [migrate your XAML builds](../../actions/migrate-from-xaml-builds.md). + + diff --git a/docs/build-release/concepts/agents/pools-queues.md b/docs/build-release/concepts/agents/pools-queues.md new file mode 100644 index 00000000000..dc189278084 --- /dev/null +++ b/docs/build-release/concepts/agents/pools-queues.md @@ -0,0 +1,119 @@ +--- +ms.prod: vs-devops-alm +title: Agents, pools, and queues +description: Agent pools and queues for build and release management in VSTS and Team Foundation Server +ms.technology: vs-devops-build +ms.assetid: BD5478A8-48CF-4859-A0CB-6E1948CE2C89 +ms.manager: douge +ms.author: alewis +ms.date: 08/26/2016 +--- +# Agent pools and queues + +**VSTS | TFS 2017 | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/library/dd793166%28v=vs.120%29.aspx)** + +Instead of managing each [agent](agents.md) individually, you organize agents into **agent pools**. An agent pool defines the sharing boundary for all agents in that pool. In TFS, pools are scoped across all of your Team Foundation Server (TFS); so you can share an agent pool across team project collections and team projects. In VSTS, agent pools are scoped to the VSTS account; so you can share an agent pool across team projects. + +An **agent queue** provides access to an agent pool. When you create a build or release definition, you specify which queue it uses. Queues are scoped to your team project in TFS 2017 and in VSTS, so you can only use them across build and release definitions within a team project. + +To share an agent pool with multiple team projects, you create an agent queue pointing to that pool in each of those team projects. While multiple queues across team projects can use the same agent pool, multiple queues within a team project cannot use the same pool. Also, each queue can use only one agent pool. + +#### VSTS and TFS 2017 + +![TFS 2017 build system architecture](_img/build-system-architecture.png) + +#### TFS 2015 + +In TFS 2015 agent queues are scoped to team project collections. + +![TFS 2015 build system architecture](_img/build-system-architecture-tfs-2015.png) + +You create and manage pools from the Agent pools tab. + +[!INCLUDE [agent-pools](_shared/agent-pools-tab.md)] + +You create and manage your queues from the Agent queues tab. + +[!INCLUDE [agent-pools](_shared/agent-queues-tab.md)] + +## Default agent pools + +We provide the following agent pools by default: + +* **Default** pool: Use it to register [private agents](agents.md) that you've set up. + +* **Hosted** pool (VSTS only): Contains at least one free hosted agent, and also any [hosted agents you've purchased](../licensing/concurrent-pipelines-tfs.md). The **Hosted** pool is the built-in pool that is a collection of hosted agents. Machines in this pool have Visual Studio 2010, Visual Studio 2012, Visual Studio 2013, and Visual Studio 2015 installed on Windows Server 2012 R2 operating system. For a complete list of software installed on hosted agents, see [Hosted agents](hosted.md). + +* **Hosted VS2017** pool (VSTS only): The **Hosted VS2017** pool is another built-in pool in VSTS. Machines in this pool have Visual Studio 2017 installed on Windows Server 2016 operating system. For a complete list of software installed on these machines, see [Hosted agents](hosted.md). + +* **Hosted Linux** pool (VSTS only): Enables you to build and release on + Linux machines without having to configure a private agent. The agents + in this pool run on an Ubuntu Linux host inside the + [**vsts-agent-docker** container](https://github.com/Microsoft/vsts-agent-docker). + +Each of the three hosted pools is exposed to each team project through a corresponding hosted queue. By default, all contributors in a team project are members of the **User** role on each hosted queue. This allows every contributor in a team project to author and run build and release definitions using hosted queues. + +If you've got a lot of agents intended for different teams or purposes, you might want to create additional pools as explained below. + +## Creating agent pools and queues + +Here are some typical situations when you might want to create agent pools and queues: + +* You're a member of a team project and you want to use a set of machines owned by your team for running build and deployment jobs. First make sure you're a member of a group in **All Queues** with the **Administrator** role. Next create a **New queue** in your team project and select the option to **Create a new pool**. As a result, both a queue and a pool will be created. Finally [install](agents.md#install) and configure agents to be part of that agent pool. + +* You're a member of the infrastructure team and would like to set up a pool of agents for use in all team projects. First make sure you're a member of a group in **All Pools** with the **Administrator** role. Next create a **New pool** and select the option to **Auto-provision queues in all projects** while creating the pool. This setting ensures all team projects have a queue to access the pool. The system creates a queue for existing projects, and in the future it will do so whenever a new project is created. Finally [install](agents.md#install) and configure agents to be part of that agent pool. + +* You want to share a set of agent machines with multiple team projects, but not all of them. First create an agent queue in one of the projects and select the option to **Create a new pool** while creating that queue. Next, go to each of the other team projects, and create a queue in each of them while selecting the option to **Use an existing pool**. Finally, [install](agents.md#install) and configure agents to be part of the shared agent pool. + +

    Security of agent pools and queues

    + +Understanding how security works for agent pools and queues helps you control sharing and use of agents. + +### VSTS and TFS 2017 + +In VSTS and TFS 2017, **roles** are defined on each agent pool, and **membership** in these roles governs what operations you can perform on an agent pool. + +| Role on an agent pool | Purpose | +|------|---------| +| Reader | Members of this role can view the pool as well as agents. You typically use this to add operators that are responsible for monitoring the agents and their health. | +| Service Account | Members of this role can use the pool to create an agent queue in a team project. If you follow the guidelines above for creating new pools and queues, you typically do not have to add any members here. | +| Administrator | In addition to all the above permissions, members of this role can register or unregister agents from the pool. They can also use the agent pool when creating an agent queue in a team project. Finally, they can also manage membership for all roles of the pool. The user that created the pool is automatically added to the Administrator role for that pool. | + +The **All Pools** node in the Agent Pools tab is used to control the security of _all_ agent pools. Role memberships for individual agent pools are automatically inherited from those of the 'All Pools' node. By default, TFS administrators are also administrators of the 'All Pools' node. + +Roles are also defined on each agent queue, and memberships in these roles govern what operations you can perform on an agent queue. + +| Role on an agent queue | Purpose | +|------|---------| +| Reader | Members of this role can view the queue. You typically use this to add operators that are responsible for monitoring the build and deployment jobs in that queue. | +| User | Members of this role can use the queue when authoring build or release definitions. | +| Administrator | In addition to all the above operations, members of this role can manage membership for all roles of the queue. User that created the queue is automatically added to the Administrator role for that queue. + +The **All Queues** node in the Agent Queues tab is used to control the security of _all_ agent queues in a team project. Role memberships for individual agent queues are automatically inherited from those of the 'All Queues' node. By default, the following groups are added to the Administrator role of 'All Queues': Build Administrators, Release Administrators, Project Administrators. + +

    TFS 2015

    + +In TFS 2015, special **groups** are defined on agent pools, and membership in these groups governs what operations you can perform. + +Members of **Agent Pool Administrators** can register new agents in the pool and add additional users as administrators or service accounts. + +Add people to the account-level Agent Pool Administrators group to grant them permission manage all the agent pools. This enables people to create new pools and modify all existing pools. Members of Team Foundation Administrators group can also perform all these operations. + +Users in the **Agent Pool Service Accounts** group have permission to listen to the message queue for the specific pool to receive work. In most cases you should not have to manage members of this group. The agent registration process takes care of it for you. The service account you specify for the agent (commonly Network Service) is automatically added when you register the agent. + +## Q&A + +### I'm trying to create a queue that uses an existing pool, but the controls are grayed out. Why? + +On the Create Queue dialog box, you can't use an existing pool if it is already referenced by another queue. Each pool can be referenced by only one queue within a given team project collection. + +### I can't select the Hosted queue and I can't queue my build. How do I fix this? + +Ask the owner of your VSTS account to grant you permission to use the queue. See [Security of agent pools and queues](#security). + +### I need more hosted build resources. What can I do? + +A: The hosted pool provides all VSTS accounts with a single hosted build agent and a limited number of free build minutes each month. If you need more hosted build resources, or need to run more than one build concurrently, then you can either: + +* [Deploy your own on-premises build agents](agents.md). +* [Buy additional hosted pipelines](../../../billing/buy-more-build-vs.md#buy-build-release). diff --git a/docs/build-release/concepts/definitions/_shared/set-variables-in-scripts.md b/docs/build-release/concepts/definitions/_shared/set-variables-in-scripts.md new file mode 100644 index 00000000000..50c1a2fc65c --- /dev/null +++ b/docs/build-release/concepts/definitions/_shared/set-variables-in-scripts.md @@ -0,0 +1,113 @@ +

    Define and modify your variables in a script

    + +To define or modify a variable from a script, use the `task.setvariable` logging command. + +> [!TIP] +> +> You can run a script on a: +> +> * [Windows agent](../../../actions/agents/v2-windows.md) using either a [Batch script task](../../../tasks/utility/batch-script.md) or [PowerShell script task](../../../tasks/utility/powershell.md). +> * [macOS](../../../actions/agents/v2-osx.md) or [Linux](../../../actions/agents/v2-linux.md) agent using a [Shell script task](../../../tasks/utility/shell-script.md). + + + +# [Batch](#tab/batch) + +**Batch script** + +![icon](../../../tasks/utility/_img/batch-script.png) Set the `sauce` and `secretSauce` variables + +```bat +@echo ##vso[task.setvariable variable=sauce]crushed tomatoes +@echo ##vso[task.setvariable variable=secretSauce;issecret=true]crushed tomatoes with garlic +``` + +![icon](../../../tasks/utility/_img/batch-script.png) Read the variables + +Arguments + +```arguments +"$(sauce)" "$(secretSauce)" +``` + +Script + + ```bat +@echo off +set sauceArgument=%~1 +set secretSauceArgument=%~2 +@echo No problem reading %sauceArgument% or %SAUCE% +@echo But I cannot read %SECRETSAUCE% +@echo But I can read %secretSauceArgument% (but the log is redacted so I do not spoil + the secret) +``` + +# [PowerShell](#tab/powershell) + +**PowerShell script** + +![icon](../../../tasks/utility/_img/powershell.png) Set the `sauce` and `secretSauce` variables + +```powershell +Write-Host "##vso[task.setvariable variable=sauce]crushed tomatoes" +Write-Host "##vso[task.setvariable variable=secretSauce;issecret=true]crushed tomatoes with + garlic" +``` + +![icon](../../../tasks/utility/_img/powershell.png) Read the variables + +Arguments + +``` +-sauceArgument "$(sauce)" -secretSauceArgument "$(secretSauce)" +``` + +Script + +```powershell +Param( + [string]$sauceArgument, + [string]$secretSauceArgument +) +Write-Host No problem reading $env:sauce or $sauceArgument +Write-Host But I cannot read $env:secretSauce +Write-Host But I can read $secretSauceArgument "(but the log is redacted so I do not + spoil the secret)" +``` + +# [Shell](#tab/shell) + +![icon](../../../tasks/utility/_img/shell-script.png) Set the `sauce` and `secretSauce` variables + +```bash +#!/bin/bash +echo "##vso[task.setvariable variable=sauce]crushed tomatoes" +echo "##vso[task.setvariable variable=secretSauce;issecret=true]crushed tomatoes with garlic" +``` + +![icon](../../../tasks/utility/_img/shell-script.png) Read the variables + +Arguments + +``` +"$(sauce)" "$(secretSauce)" +``` + +Script + +```bash +#!/bin/bash +echo "No problem reading $1 or $SAUCE" +echo "But I cannot read $SECRETSAUCE" +echo "But I can read $2 (but the log is redacted so I do not spoil the secret)" +``` + +--- + +Console output from reading the variables: + +```output +No problem reading crushed tomatoes or crushed tomatoes +But I cannot read +But I can read ******** (but the log is redacted so I do not spoil the secret) +``` diff --git a/docs/build-release/concepts/definitions/_shared/variable-set-in-script-qa.md b/docs/build-release/concepts/definitions/_shared/variable-set-in-script-qa.md new file mode 100644 index 00000000000..472320eb9cd --- /dev/null +++ b/docs/build-release/concepts/definitions/_shared/variable-set-in-script-qa.md @@ -0,0 +1,6 @@ +### How do I set a variable so that it can be read by subsequent scripts and tasks? + +[Define and modify your build variables in a script](../../../concepts/definitions/build/variables.md#set-in-script) + +[Define and modify your release variables in a script](../../../concepts/definitions/release/variables.md#set-in-script) + diff --git a/docs/build-release/concepts/definitions/build/_img/artifacts/build-artifact-tab.png b/docs/build-release/concepts/definitions/build/_img/artifacts/build-artifact-tab.png new file mode 100644 index 00000000000..63e8da0b276 Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/artifacts/build-artifact-tab.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/artifacts/build-with-two-artifacts.png b/docs/build-release/concepts/definitions/build/_img/artifacts/build-with-two-artifacts.png new file mode 100644 index 00000000000..0dba3e6eebf Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/artifacts/build-with-two-artifacts.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/triggers/ci-trigger-git-branches-neweditor.png b/docs/build-release/concepts/definitions/build/_img/triggers/ci-trigger-git-branches-neweditor.png new file mode 100644 index 00000000000..dff47a2fdbd Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/triggers/ci-trigger-git-branches-neweditor.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/triggers/ci-trigger-git-branches.png b/docs/build-release/concepts/definitions/build/_img/triggers/ci-trigger-git-branches.png new file mode 100644 index 00000000000..10c0b7ff1b8 Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/triggers/ci-trigger-git-branches.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-different-frequencies-neweditor.png b/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-different-frequencies-neweditor.png new file mode 100644 index 00000000000..d05df261763 Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-different-frequencies-neweditor.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-different-frequencies.png b/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-different-frequencies.png new file mode 100644 index 00000000000..06b39c272a2 Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-different-frequencies.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-multiple-time-zones-neweditor.png b/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-multiple-time-zones-neweditor.png new file mode 100644 index 00000000000..20d4d171532 Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-multiple-time-zones-neweditor.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-multiple-time-zones.png b/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-multiple-time-zones.png new file mode 100644 index 00000000000..0b6f4f457a0 Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/triggers/scheduled-trigger-git-multiple-time-zones.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/triggers/tfvc-gated-check-in-prompt.png b/docs/build-release/concepts/definitions/build/_img/triggers/tfvc-gated-check-in-prompt.png new file mode 100644 index 00000000000..f2e8b0565f2 Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/triggers/tfvc-gated-check-in-prompt.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/variables/keep-password-secret-neweditor.png b/docs/build-release/concepts/definitions/build/_img/variables/keep-password-secret-neweditor.png new file mode 100644 index 00000000000..674f8765c2d Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/variables/keep-password-secret-neweditor.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/variables/keep-password-secret.png b/docs/build-release/concepts/definitions/build/_img/variables/keep-password-secret.png new file mode 100644 index 00000000000..27c99e12e06 Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/variables/keep-password-secret.png differ diff --git a/docs/build-release/concepts/definitions/build/_img/variables/secret-variable-icon.png b/docs/build-release/concepts/definitions/build/_img/variables/secret-variable-icon.png new file mode 100644 index 00000000000..fa8345c3a18 Binary files /dev/null and b/docs/build-release/concepts/definitions/build/_img/variables/secret-variable-icon.png differ diff --git a/docs/build-release/concepts/definitions/build/_shared/build-clean-variable.md b/docs/build-release/concepts/definitions/build/_shared/build-clean-variable.md new file mode 100644 index 00000000000..21c655b5953 --- /dev/null +++ b/docs/build-release/concepts/definitions/build/_shared/build-clean-variable.md @@ -0,0 +1,10 @@ + +### How can I clean the repository in a different way? + +If you want the Clean switch described above to work differently, then on the **Variables** tab, set the ```Build.Clean``` variable to: + +* ```all``` if you want to delete Agent.BuildDirectory, which is the entire working folder that contains the sources folder, binaries folder, artifact folder, and so on. + +* ```source``` if you want to delete Build.SourcesDirectory. + +* ```binary``` If you want to delete Build.BinariesDirectory. diff --git a/docs/build-release/concepts/definitions/build/_shared/git-clean-option.md b/docs/build-release/concepts/definitions/build/_shared/git-clean-option.md new file mode 100644 index 00000000000..e48de5a9cf1 --- /dev/null +++ b/docs/build-release/concepts/definitions/build/_shared/git-clean-option.md @@ -0,0 +1,11 @@ +**Clean:** + +* If you set it to true, this command is run: git clean -fdx, git reset -hard HEAD + + [How can I clean the repo a different way?](#build_clean_variable) + +* Set this to false if you want to define an incremental build to improve performance. + + Tip: In this case, if you are building Visual Studio projects, on the Build tab, you can also uncheck the Clean check box of the Visual Studio Build or MSBuild step. + +* This setting has no effect if you are using a [hosted agent](../../../../concepts/agents/hosted.md). diff --git a/docs/build-release/concepts/definitions/build/_shared/git-options.md b/docs/build-release/concepts/definitions/build/_shared/git-options.md new file mode 100644 index 00000000000..28df72dedb3 --- /dev/null +++ b/docs/build-release/concepts/definitions/build/_shared/git-options.md @@ -0,0 +1,25 @@ +**Checkout submodules:** Select if you want to download files from [submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules). + +**Checkout files from LFS:** Select if you want to download files from [large file storage (LFS)](../../../../../git/manage-large-files.md#use-git-large-file-storage-lfs). + +* **VSTS:** Select the check box to enable this option. + +* **TFS 2017 and TFS 2015 (OSX and Linux only):** On the **Variables** tab, set _Agent.Source.Git.Lfs_ to _true_. + +**Don't sync sources:** Select the check box if you want to skip fetching new commits. This option can be useful in cases such as when you want to: + +* Git init, config, and fetch using your own custom options. + +* Use a build process to just run automation (for example some scripts) that do not depend on code in version control. + +**Shallow fetch:** Select if you want to limit how far back in history to download. Effectively this results in `git fetch --depth=n`. If your repository is large, this option might make your build process more efficient. Your repository might be large if it has been in use for a long time. It also might be large if you added and later deleted large files. + +In these cases this option can help you conserve network and storage resources. It might also save time. The reason it doesn't always save time is because in some situations the server might need to spend time calculating the commits to download. + +* **VSTS:** After you select the check box to enable this option, in the **Depth** box specify the number of commits. + +* **TFS 2017 and TFS 2015 (OSX and Linux only):** On the **Variables** tab, set _Agent.Source.Git.ShallowFetchDepth_ to the number of commits in history you want to download. Specify 0 to set no limit. + +> [!TIP] +> +> If you're using VSTS, the above variables also work and override the check box controls. So for example, you can override the setting when you queue the build. diff --git a/docs/build-release/concepts/definitions/build/_shared/label-sources.md b/docs/build-release/concepts/definitions/build/_shared/label-sources.md new file mode 100644 index 00000000000..718ebfbcb64 --- /dev/null +++ b/docs/build-release/concepts/definitions/build/_shared/label-sources.md @@ -0,0 +1,9 @@ +**Label sources:** Select either **On successful build** or **On every build** if you want to label your source code files to enable your team to easily identify which version of each file is included in the completed build. + +In the **Label format** you can use user-defined and predefined variables that have a scope of "All." For example: + +``` +$(Build.DefinitionName)_$(Build.DefinitionVersion)_$(Build.BuildId)_$(Build.BuildNumber)_$(My.Variable) +``` + +The first three variables are predefined. `My.Variable` is defined by you on the [variables tab](../variables.md). \ No newline at end of file diff --git a/docs/build-release/concepts/definitions/build/_shared/variables-build-artifacts-directory.md b/docs/build-release/concepts/definitions/build/_shared/variables-build-artifacts-directory.md new file mode 100644 index 00000000000..0d464a2eeb3 --- /dev/null +++ b/docs/build-release/concepts/definitions/build/_shared/variables-build-artifacts-directory.md @@ -0,0 +1 @@ +The local path on the agent where any artifacts are copied to before being pushed to their destination. For example: `c:\agent\_work\1\a`

    A typical way to use this folder is to publish your build artifacts with the [Copy files](../../../../tasks/utility/copy-files.md) and [Publish build artifacts](../../../../tasks/utility/publish-build-artifacts.md) steps.

    **Note:** This directory is purged before each new build, so you don't have to clean it up yourself.

    Build.ArtifactStagingDirectory and Build.StagingDirectory are interchangeable.

    See [Artifacts in Team Build](../artifacts.md) diff --git a/docs/build-release/concepts/definitions/build/_shared/variables-build-sources-directory.md b/docs/build-release/concepts/definitions/build/_shared/variables-build-sources-directory.md new file mode 100644 index 00000000000..38ce4bf54dc --- /dev/null +++ b/docs/build-release/concepts/definitions/build/_shared/variables-build-sources-directory.md @@ -0,0 +1 @@ +The local path on the agent where your source code files are downloaded. For example: `c:\agent\_work\1\s`

    By default, new build definitions update only the changed files. You can modify how files are downloaded on the [Repository tab](../repository.md). diff --git a/docs/build-release/concepts/definitions/build/_shared/variables-invalid-label-characters.md b/docs/build-release/concepts/definitions/build/_shared/variables-invalid-label-characters.md new file mode 100644 index 00000000000..9f113439514 --- /dev/null +++ b/docs/build-release/concepts/definitions/build/_shared/variables-invalid-label-characters.md @@ -0,0 +1 @@ +Note: This value can contain whitespace or other invalid label characters. In these cases, the [label format](../repository.md) will fail. diff --git a/docs/build-release/concepts/definitions/build/artifacts.md b/docs/build-release/concepts/definitions/build/artifacts.md new file mode 100644 index 00000000000..1eed9e4c66d --- /dev/null +++ b/docs/build-release/concepts/definitions/build/artifacts.md @@ -0,0 +1,177 @@ +--- +title: Artifacts in Team Build +description: Understand build artifacts in Team Build for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 34874DFA-2364-4C1D-A092-B8F67C499AB0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: alewis +ms.date: 3/13/2017 +--- + +# Artifacts in Team Build + +**VSTS | TFS 2015 Update 3 and newer | TFS 2015 RTM ([see Q&A](#tfs-2015))** + +Artifacts are the files that you want your build to produce. Artifacts can be nearly anything your team needs to test or deploy your app. For example, you've got a .DLL and .EXE executable files and .PDB symbols file of a C# or C++ .NET Windows app. + +Release Management can pick up and use your build artifacts as part of of a continuous integration (CI)/ continuous deployment (CD) process. In this scenario, you're automatically building a web app with each commit using your CI build. Your CD release process picks up the .ZIP (ASP.NET or Node.js) or .WAR (Java) web deployment file. Your changes are automatically deployed to a test environment in Azure. + +## Examples + +Here are some examples of how to publish artifacts from the **Tasks** tab of your build definition. + +### Publish a README.md file + +> [!TIP] +> If you want to try this and you don't already have a Git repo with a README.md file at the root, you can quickly [create one](../../../../git/create-new-repo.md). + +![icon](../../../tasks/utility/_img/publish-build-artifacts.png) **Utility: Publish Build Artifacts** + +* Path to publish + + ``` +$(Build.SourcesDirectory)/README.md +``` +* Artifact name + + ``` +drop +``` + +* Artifact type: Server + +### Two sets of artifacts + +You can create multiple artifact items. For example: + +![icon](../../../tasks/utility/_img/publish-build-artifacts.png) **Utility: Publish Build Artifacts** + +* Path to publish + + ``` +$(Build.SourcesDirectory)/README.md +``` +* Artifact name + + ``` +drop1 +``` + +* Artifact type: Server + +![icon](../../../tasks/utility/_img/publish-build-artifacts.png) **Utility: Publish Build Artifacts** + +* Path to publish + + ``` +$(Build.SourcesDirectory)/README.md +``` + +* Artifact name + + ``` +drop2 +``` +* Artifact type: Server + +The completed build delivers two sets of artifacts. + +![Artifacts tab of a build with two artifacts](_img/artifacts/build-with-two-artifacts.png) + +> You would probably never need to drop two copies of the same files. The point of this example is to show how you can drop multiple sets of artifacts that can be independently organized, explored, downloaded, and used by your deployment process. + +### C++ app + +![icon](../../../tasks/utility/_img/copy-files.png) **Utility: Copy Files** + +* Source folder + + ``` +$(Build.ArtifactStagingDirectory) +``` + +* Contents + + ``` +**/$(BuildConfiguration)/**/?(*.exe|*.dll|*.pdb) +``` + +* Target folder + + ``` +$(Build.ArtifactStagingDirectory) +``` + +![icon](../../../tasks/utility/_img/publish-build-artifacts.png) **Utility: Publish Build Artifacts** + +* Path to publish + + ``` +$(Build.ArtifactStagingDirectory) +``` + +* Artifact name + + ``` +drop +``` + +* Artifact type: Server + +## Tips + +* **Artifact type** argument: **Server** is the best and simplest choice in most cases. This choice causes the artifacts to be stored in VSTS or TFS. But if you're using a private Windows agent, you've got the option [drop to a UNC file share](#unc-file-share). + +* **Artifact name** argument: Just enter a name that's meaningful to you. + +* Use forward slashes in file path arguments so that they work for all agents. Backslashes don't work for macOS and Linux agents. + +* On VSTS and some versions of TFS there are two different [variables](variables.md) that point to the staging directory: `Build.ArtifactStagingDirectory` and `Build.StagingDirectory`. These are interchangeable. + +* The directory referenced by `Build.ArtifactStagingDirectory` is cleaned up after each build. + +* You can [get build artifacts from the REST API](../../../../integrate/index.md). + +

    Publish from TFS to UNC file share

    + +If you're using a private Windows agent, you can set the **artifact type** option to publish your files to a UNC **file share**. + +> [!NOTE] +> +> Use a Windows build agent. This option doesn't work for macOS and Linux agents. + +Choose file share to copy the artifact to a file share. Some common reasons to do this: + +* The size of your drop is large and consumes too much time and bandwidth to copy. + +* You need to run some custom scripts or other tools against the artifact. + +If you use a file share, specify the UNC file path to the folder. You can control how the folder is created for each build using [variables](variables.md). For example ```\\my\share\$(Build.DefinitionName)\$(Build.BuildNumber)```. + +## Task reference + +Use these tasks to publish artifacts: + +* ![icon](../../../tasks/utility/_img/copy-files.png) [Utility: Copy Files](../../../tasks/utility/copy-files.md) By copying files to `$(Build.ArtifactStagingDirectory)` you can publish multiple files of different types from different places specified by your [matching patterns](../../../tasks/file-matching-patterns.md). +* ![icon](../../../tasks/utility/_img/delete-files.png) [Utility: Delete Files ](../../../tasks/utility/delete-files.md) Handy to prune unnecessary files that you copied to the staging directory. +* ![icon](../../../tasks/utility/_img/publish-build-artifacts.png) [Utility: Publish Build Artifacts](../../../tasks/utility/publish-build-artifacts.md) + +## Explore, download, and deploy your artifacts + +When the build is done, if you watched it run, click the name of the completed build and then click the artifacts tab to see your artifact. + +![Artifacts tab of a build with one artifact](_img/artifacts/build-artifact-tab.png) + +From here you can explore or download the artifacts. + +You can also use Release Management to deploy your app using the artifacts that you've published. See [Artifacts in Release Management](../release/artifacts.md). + +## Q&A + + +

    How do I publish artifacts from TFS 2015?

    + +If you're using TFS 2015 RTM, then the steps in the above examples are not available. Instead, you copy and publish your artifacts using a single task: [Build: Publish Build Artifacts](../../../tasks/utility/publish-build-artifacts.md). + + diff --git a/docs/build-release/concepts/definitions/build/history.md b/docs/build-release/concepts/definitions/build/history.md new file mode 100644 index 00000000000..178c7ca544f --- /dev/null +++ b/docs/build-release/concepts/definitions/build/history.md @@ -0,0 +1,43 @@ +--- +title: Build definition history +description: You can learn what changed, when it happened, and who did it on VSTS and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: AB81E23E-DD84-4BDB-ACD9-AE03D783A303 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Build definition history + +[!INCLUDE [temp](../../../_shared/version.md)] + + + +From the **History** tab you can see a list of changes that includes who made the change and when the change occurred. + +**VSTS:** To work with a change, select it, click ..., and then click **Compare Difference** or **Revert Definition**. + +**Team Foundation Server (TFS) 2017 Update 1 and older:** After you've viewed the history, if you want details about a change, select it and then choose **Diff**. If you want to roll back to an earlier version, select it, and then click **Rollback**. + +## Q&A + + + +### Can I edit the JSON source directly? + +No + +[!INCLUDE [temp](../../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/concepts/definitions/build/options.md b/docs/build-release/concepts/definitions/build/options.md new file mode 100644 index 00000000000..76130b30ed5 --- /dev/null +++ b/docs/build-release/concepts/definitions/build/options.md @@ -0,0 +1,236 @@ +--- +title: Build definition options +description: Build options on VSTS and Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 7C469647-117D-4867-B094-8BC811C0003E +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Build definition options + +[!INCLUDE [temp](../../../_shared/version.md)] + + + +Here we explain settings you can change on the build definition **Options** tab. + +## Description + +> **Team Foundation Server (TFS) 2017 Update 1 and older** +> +> This section is available under General tab. + +If you specify a description here, it is shown near the name of the build definition when you select it in the Build area of your team project. + +

    Build number format

    + +If you leave it blank, your completed build is given a unique integer as its name. But you can give completed builds much more useful names that are meaningful to your team. You can use a combination of tokens, variables, and underscore characters. + +### Example + +At the time the build is queued: + +* Team project name: Fabrikam + +* Build definition name: CIBuild + +* Branch: master + +* Build ID: 752 + +* Date: August 5, 2009. + +* Time: 9:07:03 PM. + +* The build ran once earlier today. + +If you specify this build number format: + + $(TeamProject)_$(BuildDefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r) + +Then the second completed build on this day would be named: **Fabrikam\_CIBuild_master\_20090805.2** + +### Tokens + +The following table shows how each token is resolved based on the previous example. + +| Token | Example replacement value | +| ----- | ------------------------- | +| `$(BuildDefinitionName)` | CIBuild

    Note: The build definition name must not contain invalid or whitespace characters.| +| `$(BuildID)` | 752

    $(BuildID) is an internal immutable ID.| +| `$(DayOfMonth)` | 5 | +| `$(DayOfYear)` | 217 | +| `$(Hours)` | 21 | +| `$(Minutes)` | 7 | +| `$(Month)` | 8 | +| `$(Rev:.r)` | 2 (The third build on this day will be 3, and so on.)

    Use **$(Rev:.rr)** to ensure that every completed build has a unique name. When a build is completed, if nothing else in the build number has changed, the Rev integer value is incremented by one.

    If you want to show prefix zeros in the number, you can add additional **'r'** characters. For example, specify **$(rev:.rr)** if you want the Rev number to begin with 01, 02, and so on. | +| `(Date:yyyyMMdd)` | 20090824

    You can specify other date formats such as **$(Date:MMddyy)** | +| `$(Seconds)` | 3 | +| `$(SourceBranchName)` | master | +| `$(TeamProject)` | Fabrikam | +| `$(Year:yy)` | 09 | +| `$(Year:yyyy)` | 2009 | + +### Variables + +You can also use user-defined and predefined variables that have a scope of "All" in your build number format. For example, if you've defined `My.Variable`, you could specify the following build number format: + +``` +$(Build.DefinitionName)_$(Build.DefinitionVersion)_$(Build.RequestedFor)_$(Build.BuildId)_$(My.Variable) +``` + +The first four variables are predefined. `My.Variable` is defined by you on the [variables tab](variables.md). + +## Badge enabled +> **TFS 2017 Update 1 and older** +> +> This section is available under General tab. + +Select if you want to show the latest outcome of this build on external web sites. + +0. Select the **Badge enabled** check box. + +0. Save the definition. + +0. When the **Show url** link appears, click it and copy the URL to your clipboard. + +0. Use the URL as the source of an image in the HTML of the page of the external web site. For example: ```Build job cancel timeout in minutes + +> **VSTS only** + +Specify the maximum time a build job is allowed to respond after the a user cancels the build. You can specify a value from 1 to 60 minutes. + +Set this value to allow sufficient time for tasks to complete in cases where you've specified to **Run this task** as **Even if a previous task has failed, even if the build was cancelled** or as **Custom conditions** that allow a task to [always run](../../../concepts/process/conditions.md#always) after cancellation. + +Whatever value you set here, the **Build job timeout in minutes** limit still applies. For example: + +* Build job timeout in minutes = 30 + +* Build job cancel timeout in minutes = 15 + +* A user clicks **Cancel** after the build has run for 25 minutes. + +* The build will be given 5 minutes to cancel instead of the 15 you specified. + +> [!NOTE] +> +> The system typically consumes about 10 seconds of this time allotment for messaging before your tasks run. + +## Demands +> **TFS 2017 Update 1 and older** +> +> This section is available under General tab. + +Use demands to make sure that the capabilities your build needs are present on the build agents that run it. Demands are asserted automatically by build steps or manually by you. + +### Build step demands + +Some build steps won't run unless one or more demands are met by the build agent. For example, the [Visual Studio Build](../../../tasks/build/visual-studio-build.md) step demands that ```msbuild``` and ```visualstudio``` are installed on the build agent. If your build [includes steps](../../../tasks/index.md) that have demands, they are listed first. + +### Manually entered demands + +You might need to use on-premises build agents with special capabilities. For example, your build process requires SpecialSoftware. + +Add the demand to your build definition. + +| Name | Type | +|---|---| +| SpecialSoftware | exists | + +Register each build agent that has the capability. + +0. Go to the Agent pools tab at the root of the control panel: +[!INCLUDE [agent-pools-tab](../../../concepts/agents/_shared/agent-pools-tab.md)] + +0. Click the agent, and then click **Capabilities** + +0. Add something like the following entry. + +| First box | Second box | +|---|---| +| SpecialSoftware | C:\Program Files (x86)\SpecialSoftware | + +> **Tip:** When you manually queue a build you can change the demands for that run. + +## Multi-configuration + +Select this option to build multiple configurations. For example, you could build a C++ app for both debug and release configurations on both x86 and x64 platforms. To learn about this example, see [Build your C++ app for Windows](../../../apps/windows/cpp.md). + +## Q&A + + + +### In what time zone are the build number time values expressed? + +If you are using VSTS, then the time zone is UTC. + +If you are using an on-premises Team Foundation Server, then the time zone is the same as the time zone of the operating system of the machine where you are running your application tier server. + +[!INCLUDE [temp](../../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/concepts/definitions/build/repository.md b/docs/build-release/concepts/definitions/build/repository.md new file mode 100644 index 00000000000..fb1d9db21b8 --- /dev/null +++ b/docs/build-release/concepts/definitions/build/repository.md @@ -0,0 +1,224 @@ +--- +title: Build definition sources +description: Specify the sources and repository that contains the code you want to build on VSTS and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 6DFCFEB4-05EC-4A73-9382-A20D161A53D4 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Build definition sources + +**VSTS | TFS 2017 | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/library/hh190721%28v=vs.120%29.aspx)** + +At the beginning of the build process, the build agent downloads the files from your remote repository into a local sources directory. After you select the repository, you can specify options for how the files are downloaded. + +## Git + +> * **VSTS, TFS 2017 Update 2, and newer:** Click the **Tasks** tab, click **Get sources**, click **This project**, and then select the name of the Git repo. +> +> * **TFS 2017 RTM and older:** Click the **Repository** tab, and then for **Repository type** select **Git**. + +**Repository:** Select a repository in your team project. + +**Branch** (default): Select the branch that you want to be the default when you manually queue this build. + +> **VSTS, TFS 2017 Update 2 or newer:** Click **Advanced settings** to see the following options. + +[!INCLUDE [temp](_shared/git-clean-option.md)] + +[!INCLUDE [include](_shared/label-sources.md)] + +The build process labels your sources with a [Git tag](https://git-scm.com/book/en/v2/Git-Basics-Tagging). + +Note: Some build variables might yield a value that is not a valid label. For example variables such as `$(Build.RequestedFor)` and `Build.DefinitionName` can contain white space. If the value contains white space, the tag is not created. + +[!INCLUDE [temp](_shared/git-options.md)] + + +## Team Foundation Version Control + +> * **VSTS, TFS 2017 Update 2, and newer:** Click the **Tasks** tab, click **Get sources**, click **This project**, and then select the TFVC repo (for example, `$TeamProject`). +> +> * **TFS 2017 RTM and older:** Click the **Repository** tab, and then for **Repository type** the TFVC repo (for example, `$TeamProject`). + +**Repository** Ignore this option. + +**Mappings** (workspace): Include with a type value of **Map** only the folders that your build process requires. If a subfolder of a mapped folder contains files that the build process does not require, map it with a type value of **Cloak**. [When would I need to change TFVC mappings. How should I do it?](#tfvc_mappings) + +> **VSTS, TFS 2017 Update 2 or newer:** Click **Advanced settings** to see the following options. + +[!INCLUDE [include](_shared/label-sources.md)] + +The build process labels your sources with a [TFVC label](../../../../tfvc/use-labels-take-snapshot-your-files.md). + +**Clean:** + +* If you set it to true, the build agent cleans the repo this way: + + - undo pending changes + + - scorch + + [How can I clean the repo a different way?](#build_clean_variable) + +* Set this to false if you want to define an incremental build to improve performance. + + > [!TIP] + > + > In this case, if you are building Visual Studio projects, on the Build tab, you can also uncheck the Clean check box of the Visual Studio Build or MSBuild step. + +* This setting has no effect if you are using a [hosted agent](../../../concepts/agents/hosted.md). + +## GitHub + +> * **VSTS, TFS 2017 Update 2, and newer:** Click the **Tasks** tab, click **Get sources**, and then click **GitHub**. +> +> * **TFS 2017 RTM and older:** This option is not available, but you can instead use the [External git](#external-git) option. + +### Connect using your GitHub user account + +> [!NOTE] +> If you're using a pop-up blocker, you'll need to allow your VSTS account to display pop-up windows. + +This is the easier way to authorize your account. This approach grants your VSTS account access to GitHub via OAuth. + +0. On the **Repository** tab, next to the Connection drop-down, click the **Manage** link. The **Services** tab opens as a new tab in your browser. + + 0. Click **New Service Endpoint** and choose **GitHub**. + + 0. In the **Add New GitHub Service Connection** dialog box, select **Grant authorization**, and then click **Authorize**. + + 0. In the new browser window, sign in to GitHub and follow the instructions to authorize VSTS to access your GitHub account. + +0. On the **Repository** tab, select the **Connection** you created. + +0. Select the **Repository** that contains the code you want to build. + +### Connect using a personal access token + +0. Sign in to GitHub and make sure you have permission to read the repository. + +0. In GitHub, [create an access token](https://help.github.com/articles/creating-an-access-token-for-command-line-use/). + + 0. Select the **repo**, **user**, and **admin:repo_hook** scopes. + + 0. Copy the token to your clipboard. + +0. Sign on to VSTS and create a build definition. + +0. On the **Repository** tab, next to the Connection drop-down, click the **Manage** link. The **Services** tab opens as a new tab in your browser. + + 0. Click **New Service Endpoint** and choose **GitHub**. + + 0. In the **Add New GitHub Service Connection** dialog box, select **Personal access token**. + + 0. Paste the token and give the connection a name. + +0. On the **Repository** tab, select the **Connection** you created. + +0. Select the **Repository** that contains the code you want to build. + +### Other options + +**Default branch:** Select the branch that you want to be the default when you manually queue this build. + +> **VSTS, TFS 2017 Update 2 or newer:** Click **Advanced settings** to see the following options. + +[!INCLUDE [temp](_shared/git-clean-option.md)] + +[!INCLUDE [temp](_shared/git-options.md)] + + +## External Git (remote repository) + +0. Sign in to the external Git service (for example, BitBucket) and make sure you have permission to read the repository. + +0. Sign on to the VSTS or Team Foundation Server web portal and create a build definition. + +0. On the **Repository** tab, next to the Connection drop-down, click the **Manage** link. The **Services** tab opens as a new tab in your browser. + + 0. Click **New Service Endpoint** and choose **External Git**. + + 0. Fill in the **Add New External Git Repository Connection** dialog box. + +0. On the **Repository** tab, select the **Connection** you created. + +0. Select the **Repository** that contains the code you want to build. + +**Branch** (default): Select the branch that you want to be the default when you manually queue this build. + +> **VSTS, TFS 2017 Update 2 or newer:** Click **Advanced settings** to see the following options. + +[!INCLUDE [temp](_shared/git-clean-option.md)] + +[!INCLUDE [temp](_shared/git-options.md)] + +## Subversion + +You can build code you manage in Subversion. You must install the Subversion client on your [build agents](../../../concepts/agents/agents.md#install). + +## Q&A + + + +[!INCLUDE [temp](_shared/build-clean-variable.md)] + +### How do I reference the sources directory on the build agent? + +Use the [Build.SourcesDirectory variable](variables.md). + + +### What kinds of submodules can I check out? + +If you select **Checkout submodules**, the build process will check out your Git submodules so long as they are: + +* **Children (immediate submodules)** of the Git repo you've selected for this build process. In effect, the build process runs ```git submodule update --init``` (not ```git submodule update -init --recursive```). + +* **Unauthenticated:** A public unauthenticated repo with no credentials required to clone or fetch. + +* **Authenticated:** + + - Contained in the same team project, GitHub organization, or Bitbucket account as the Git repo specified above. + + - Added by using a relative url from main repository. For example this one would be checked out: ```git submodule add /../../submodule.git mymodule``` This one would not be checked out: ```git submodule add https://fabrikamfiber.visualstudio.com/DefaultCollection/_git/ConsoleApp mymodule``` + + +### Which GitHub repositories can I build? + +You can build repositories you are authorized to push to. + +### What protocols can the build agent use with Git? + +We support HTTPS. + +We do not yet support SSH. See [User Voice: Allow build to use ssh authentication while checking out git sub modules](https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/15109674-allow-build-to-use-ssh-authentication-while-checki) + + +### When would I need to change TFVC mappings. How should I do it? + +Make sure that you **Map** all folders that contain files that your build process requires. For example, if you add another project, you might have to add another mapping to the workspace. + +**Cloak** folders you don't need. By default the root folder of team project is mapped in the workspace. This configuration results in the build agent downloading all the files in the version control folder of your team project. If this folder contains lots of data, your build could waste build system resources and slow down your build process by downloading large amounts of data that it does not require. + +When you remove projects, look for mappings that you can remove from the workspace. + +If this is a CI build, in most cases you should make sure that these mappings match the match the filter settings of your CI trigger on the [Triggers tab](triggers.md). + +For more information on how to optimize a TFVC workspace, see [Optimize your workspace](../../../../tfvc/optimize-your-workspace.md). + +### Is it possible to disable downloading files? + +If you want to disable downloading sources: + +* **VSTS, TFS 2017 Update 2, and newer:** Click **Advanced settings**, and then select **Don't sync sources**. + +* **TFS 2017 RTM and older:** Define `Build.SyncSources` on the [variables tab](variables.md) and set it to false. + +[!INCLUDE [temp](../../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/concepts/definitions/build/triggers.md b/docs/build-release/concepts/definitions/build/triggers.md new file mode 100644 index 00000000000..6961639e628 --- /dev/null +++ b/docs/build-release/concepts/definitions/build/triggers.md @@ -0,0 +1,155 @@ +--- +title: Build definition triggers +description: Specify CI, scheduled, gated, and other triggers for your build on VSTS and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 250D4E5B-B2E5-4370-A801-E601C4871EE1 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# Build definition triggers + +**VSTS | TFS 2017 | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/library/hh190718%28v=vs.120%29.aspx)** + +On the **Triggers** tab you specify the events that will trigger the build. You can use the same build definition for both CI and scheduled builds. + + +## Continuous integration (CI) + +Select this trigger if you want the build to run whenever someone checks in code. + +### Batch changes + +Select this check box if you have a lot of team members uploading changes often and you want to reduce the number of builds you are running. If you select this option, when a build is running, the system waits until the build is completed and then queues another build of all changes that have not yet been built. + +If you are using batched changes, you can also specify a maximum number of concurrent builds per branch. + +> You can batch changes when your code is in Git in the team project or on GitHub. This option is not available if your code is in a remote Git repo or in Subversion. + +### Git filters + +If your repository is Git then you can specify the branches where you want to trigger builds. You can use wildcard characters. + +#### Path filters in VSTS and Team Foundation Services (TFS) + +If your Git repo is in VSTS or TFS, you can also specify path filters to reduce the set of files that you want to trigger a build. + + > **Tips:** + * If you don't set path filters, then the root folder of the repo is implicitly included by default. + * When you add an explicit path filter, the implicit include of the root folder is removed. So make sure to explicitly include all folders that your build needs. + * If you exclude a path, you cannot also include it unless you qualify it to a deeper folder. For example if you exclude _/tools_ then you could include _/tools/trigger-runs-on-these_ + * The order of path filters doesn't matter. + +#### Example + +For example, you want your build to be triggered by changes in master and most, but not all, of your feature branches. You also don't want builds to be triggered by changes to files in the tools folder. + +**VSTS** + +![ci trigger git branches](_img/triggers/ci-trigger-git-branches-neweditor.png) + +**TFS 2017 Update 1 and older versions** + +![ci trigger git branches](_img/triggers/ci-trigger-git-branches.png) + +### TFVC Include + +Select the version control paths you want to include and exclude. In most cases, you should make sure that these filters are consistent with your TFVC mappings on the [Repository tab](repository.md). + + +### CI trigger for a remote Git repo or Subversion + +You can also select the CI trigger if your code is in a remote Git repo or Subversion. In this case we poll for changes at a regular interval. For this to work, VSTS or your Team Foundation Server must be able to resolve the network address of the service or server where your code is stored. For example if there's a firewall blocking the connection, then the CI trigger won't work. + + +## Scheduled + +Select the days and times when you want to run the build. + +If your repository is Git, GitHub, or External Git, then you can also specify branches to include and exclude. You can use wildcards. + + +### Example: Nightly build of Git repo in multiple time zones + +**VSTS** + +![scheduled trigger multiple time zones](_img/triggers/scheduled-trigger-git-multiple-time-zones-neweditor.png) + +**TFS 2017 Update 1 and older versions** + +![scheduled trigger multiple time zones](_img/triggers/scheduled-trigger-git-multiple-time-zones.png) + + +### Example: Nightly build with different frequencies + +**VSTS** + +![scheduled trigger different frequencies](_img/triggers/scheduled-trigger-git-different-frequencies-neweditor.png) + +**TFS 2017 Update 1 and older versions** + +![scheduled trigger different frequencies](_img/triggers/scheduled-trigger-git-different-frequencies.png) + +

    TFVC gated check-in

    + +If your code is in a [Team Foundation version control (TFVC)](../../../../tfvc/overview.md) repo, use gated check-in to protect against breaking changes. + +By default **Use workspace mappings for filters** is selected. Builds are triggered whenever a change is checked in under a path specified in your mappings on the [repository tab](repository.md#tfvc). + +Otherwise, you can clear this check box and specify the paths in the trigger. + +### How it affects your developers + +When a developers try to check-in, they are prompted to build their changes. + +![Gated check-in prompt](_img/triggers/tfvc-gated-check-in-prompt.png) + +The system then creates a shelveset and builds it. + +For details on the gated check-in experience, see [Check in to a folder that is controlled by a gated check-in build process](../../../../tfvc/check-folder-controlled-by-gated-check-build-process.md). + + +### Option to run CI builds + +By default, CI builds are not run after the gated check-in process is complete and the changes are checked in. + +However, if you **do** want CI builds to run after a gated check-in, select the **Run CI triggers for committed changes** check box. When you do this, the build process does not add *****NO_CI***** to the changeset description. As a result, CI builds that are affected by the check-in are run. + + +### A few other things to know + +* Make sure the folders you include in your trigger are also included in your mappings on the [Repository tab](repository.md). + +* You can run gated builds on either a [hosted agent](../../../concepts/agents/hosted.md) or a [windows agent](../../../actions/agents/v2-windows.md). You cannot run them on the cross-platform agent. + + +## Q&A + + + + +### How do I protect my Git codebase from build breaks? + +If your code is in a Git repo on VSTS or Team Foundation Server, you can create a branch policy that runs your build. See [Improve code quality with branch policies](../../../../git/branch-policies.md). This option is not available for GitHub repos. + +### My build didn't run. What happened? + +If your build is in VSTS, then at least one of your users must sign in regularly for CI and scheduled builds to run. Your VSTS account goes dormant five minutes after the last user signed out. After that, each of your build definitions will run one more time. + +For example, while your account is dormant: + + * A nightly build of code in your VSTS account will run only one night until someone signs in again. + + * CI builds of an external Git repo will stop running until someone signs in again. + +### Can I chain builds so that one build triggers another? + +Not yet. See [User Voice: Provide build configuration dependencies in TFS Build](https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/2165043-provide-build-configuration-dependencies-in-tfs-bu). + +[!INCLUDE [temp](../../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/concepts/definitions/build/variables.md b/docs/build-release/concepts/definitions/build/variables.md new file mode 100644 index 00000000000..796a5f3936c --- /dev/null +++ b/docs/build-release/concepts/definitions/build/variables.md @@ -0,0 +1,895 @@ +--- +title: Build variables +description: Build variables are name-value pairs defined by you or provided by Build or Release Management. You can use variables as inputs and in your scripts. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 3A1C529F-DF6B-470A-9047-2758644C3D95 +ms.manager: douge +ms.author: alewis +ms.date: 08/18/2016 +--- + +# Build variables + +**VSTS | TFS 2017 | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/library/hh850448%28v=vs.120%29.aspx)** + +Variables give you a convenient way to get key bits of data into various parts of your build process. + +| Use | User-defined | Predefined, all scopes | Predefined, agent scope | Format | Examples and more information | +|---|---|---|---|---|---| +| As arguments to build steps | Yes | Yes | Yes | `$(Build.DefinitionName)` | [Command line](../../../tasks/utility/command-line.md), [Copy files](../../../tasks/utility/copy-files.md) | +| Apply a version control label during the build process | Yes | Yes | No | `$(Build.DefinitionName)` | [Repository tab](repository.md) (Git and Team Foundation version control **Label format**) | +| Customize the build number | Yes | Yes | No | `$(Build.DefinitionName)` | [Build number format options](options.md) | +| Environment variable in Windows batch scripts| Yes | Yes | Yes | `%BUILD_DEFINITIONNAME%` | [Batch script ](../../../tasks/utility/batch-script.md#example) | +| Environment variable in PowerShell scripts | Yes | Yes | Yes | `$env:BUILD_DEFINITIONNAME` | [PowerShell script](../../../actions/scripts/powershell.md) | +| Environment variable in Shell scripts | Yes | Yes | Yes | `$BUILD_DEFINITIONNAME` | [Shell script](../../../tasks/utility/shell-script.md#example) | + + +## User-defined variables + +Variables are a great way to store and share key bits of data in your build definition. Some build templates automatically define some variables for you. + +For example, when you [create a new .NET app build](../../../apps/windows/dot-net.md), `BuildConfiguration` and `BuildPlatform` are automatically defined for you. + +User-defined variables are formatted differently in different contexts. See above table. + +### Secret Variables + +We recommend that you make the variable ![Secret](_img/variables/secret-variable-icon.png) +**Secret** if it contains a password, keys, or some other kind of data that you need to avoid exposing. + +**VSTS** + +![Keep password secret](_img/variables/keep-password-secret-neweditor.png) + +**Team Foundation Server (TFS) 2017 Update 1 and older** + +![Keep password secret](_img/variables/keep-password-secret.png) + +Secret variables are: + +* Encrypted at rest with a 2048-bit RSA key. + +* Not returned back to the client. They are automatically masked out of any log output from the build or release. + +* Not decrypted into environment variables. So scripts and programs run by your build steps are not given access by default. + +* Decrypted for access by your build steps. So you can use them in password arguments and also pass them explicitly into a script or a program from your build step (for example as `$(password)`). + + +### Allow at queue time + +Select this check box if you want to enable your team to modify the value when they manually queue a build. + +[!INCLUDE [include](../../../concepts/definitions/_shared/set-variables-in-scripts.md)] + +## Control variables + +| Variable Name | Description | +| ------------- | ----------- | +| Build.Clean | Modifies how the build agent cleans things up. See [Repository tab](repository.md). | +| System.Debug | If you need more detailed logs to debug build problems, define and set it to `true`. | + +## Environment variables + +You can pass environment variables of the build machine into build steps. For example, on the [Build tab](../../../tasks/index.md) of a build definition, add this step: + +| Task | Arguments | +| ---- | --------- | +| ![](../../../tasks/utility/_img/command-line.png) **Utility: Command Line** | Tool: `echo`
    Arguments: `$(PATH)` | + +> [!NOTE] +> If you have defined the a variable of the same name (for example `PATH`) on the [variables tab](variables.md), then your value overrides the environment variable when you use it as shown above. + +## Predefined variables + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Variable Name
    + Environment Variable Name
    ScopeNotes
    +

    + Agent.BuildDirectory +

    +

    + AGENT_BUILDDIRECTORY +

    +
    Agent +

    The local path on the agent where all folders for a given build definition are created. For example: `c:\agent\_work\1` +

    +
    +

    + Agent.HomeDirectory +

    +

    + AGENT_HOMEDIRECTORY +

    +
    Agent +

    + The directory the agent is installed into. This contains the agent software. For example: `c:\agent\`. +

    +

    If you are using an on-premises agent, this directory is specified by you. See [Agents](../../../concepts/agents/agents.md).

    +
    +

    + Agent.Id +

    +

    + AGENT_ID +

    +
    Agent +

    + The ID of the agent. +

    +
    +

    + Agent.JobStatus +

    +

    + AGENT_JOBSTATUS +

    +
    Agent +

    + The status of the build. +

    +
      +
    • `Canceled`
    • +
    • `Failed`
    • +
    • `Succeeded`
    • +
    • `SucceededWithIssues` (partially successful)
    • +
    +
    +

    + Agent.MachineName +

    +

    + AGENT_MACHINENAME +

    +
    Agent +

    + The name of the machine on which the agent is installed. +

    +
    +

    + Agent.Name +

    +

    + AGENT_NAME +

    +
    Agent +

    + The name of the agent that is registered with the pool. +

    +

    If you are using an on-premises agent, this directory is specified by you. See agents(../concepts/agents/agents.md).

    +
    +

    + Agent.WorkFolder +

    +

    + AGENT_WORKFOLDER +

    +
    Agent +

    + The working directory for this agent. For example: `c:\agent\_work`. +

    +
    +

    + Build.ArtifactStagingDirectory +

    +

    + BUILD_ARTIFACTSTAGINGDIRECTORY +

    +
    Agent + [!INCLUDE [include](_shared/variables-build-artifacts-directory.md)] +
    +

    + Build.BuildId +

    +

    + BUILD_BUILDID +

    +
    All +

    + The ID of the record for the completed build. +

    +
    +

    + Build.BuildNumber +

    +

    + BUILD_BUILDNUMBER +

    +
    Agent,
    label
    format
    (see
    Notes)
    +

    + The name of the completed build. You can specify the build number format that generates this value in the [definition options](options.md). +

    +

    A typical use of this variable is to make it part of the label format, which you specify on the [repository tab](repository.md).

    +

    + [!INCLUDE [include](_shared/variables-invalid-label-characters.md)] +

    +
    +

    + Build.BuildUri +

    +

    + BUILD_BUILDURI +

    +
    Agent +

    + The URI for the build. For example: `vstfs:///Build/Build/1430`. +

    +
    +

    + Build.BinariesDirectory +

    +

    + BUILD_BINARIESDIRECTORY +

    +
    Agent +

    The local path on the agent you can use as an output folder for compiled binaries. For example: `c:\agent\_work\1\b`. +

    +

    By default, new build definitions are not set up to clean this directory. You can define your build to clean it up on the [Repository tab](repository.md). +

    +
    +

    + Build.DefinitionName +

    +

    + BUILD_DEFINITIONNAME +

    +
    All (see Notes) +

    + The name of the build definition. +

    +

    + [!INCLUDE [include](_shared/variables-invalid-label-characters.md)] +

    +
    +

    + Build.DefinitionVersion +

    +

    + BUILD_DEFINITIONVERSION +

    +
    All +

    + The version of the build definition. +

    +
    +

    + Build.QueuedBy +

    +

    + BUILD_QUEUEDBY +

    +
    All (see Notes) +

    + [How are the identity variables set?](#identity_values)

    +

    + [!INCLUDE [include](_shared/variables-invalid-label-characters.md)] +

    +
    +

    + Build.QueuedById +

    +

    + BUILD_QUEUEDBYID +

    +
    All +

    + [How are the identity variables set?](#identity_values) +

    +
    +

    + Build.Reason +

    +

    + BUILD_REASON +

    +
    All +
    + **VSTS Only** +
    +

    The event that caused the build to run. +

    +
      +
    • `Manual`: A user manually queued the build.
    • +
    • `IndividualCI`: **Continuous integration (CI)** triggered by a Git push or a TFVC check-in.
    • +
    • `BatchedCI`: **Continuous integration (CI)** triggered by a Git push or a TFVC check-in, and the **Batch changes** was selected.
    • +
    • `Schedule`: **Scheduled** trigger.
    • +
    • `ValidateShelveset`: **Gated check-in** trigger.
    • +
    • `CheckInShelveset`: A user manually queued the build of a specific TFVC shelveset.
    • +
    • `PullRequest`: The build was triggered by a Git branch policy that requires a build.
    • +
    +

    See [Build definition triggers](triggers.md), [Improve code quality with branch policies](../../../../git/branch-policies.md).

    +
    +

    + Build.Repository.Clean +

    +

    + BUILD_REPOSITORY_CLEAN +

    +
    Agent +

    The value you've selected for **Clean** on the [repository tab](repository.md).

    +
    +

    + Build.Repository.LocalPath +

    +

    + BUILD_REPOSITORY_LOCALPATH +

    +
    Agent + [!INCLUDE [include](_shared/variables-build-sources-directory.md)] +
    +

    + Build.Repository.Name +

    +

    + BUILD_REPOSITORY_NAME +

    +
    Agent +

    + The name of the [repository](repository.md). +

    +
    +

    + Build.Repository.Provider +

    +

    + BUILD_REPOSITORY_PROVIDER +

    +
    Agent +

    + The type of [repository you selected](repository.md). +

    +
      +
    • `TfsGit`: [TFS Git repository](../../../../git/overview.md)
    • +
    • `TfsVersionControl`: [Team Foundation Version Control](../../../../tfvc/overview.md)
    • +
    • `Git`: Git repository hosted on an external server
    • +
    • `GitHub`
    • +
    • `Svn`: Subversion
    • +
    +
    +

    + Build.Repository.Tfvc.Workspace +

    +

    + BUILD_REPOSITORY_TFVC_WORKSPACE +

    +
    Agent +

    + Defined if your [repository](repository.md) is Team Foundation Version Control. The name of the [TFVC workspace](../../../../tfvc/create-work-workspaces.md) used by the build agent. +

    +

    + For example, if the Agent.BuildDirectory is `c:\agent\_work\12` and the Agent.Id is `8`, the workspace name could be: `ws_12_8` +

    +
    +

    + Build.Repository.Uri +

    +

    + BUILD_REPOSITORY_URI +

    +
    Agent +

    + The URL for the repository. For example: +

    +
      +
    • Git: `https://fabrikamfiber.visualstudio.com/_git/Scripts`
    • +
    • TFVC: `https://fabrikamfiber.visualstudio.com/`
    • +
    +
    +

    + Build.RequestedFor +

    +

    + BUILD_REQUESTEDFOR +

    +
    All (see Notes) +

    + [How are the identity variables set?](#identity_values) +

    +

    + [!INCLUDE [include](_shared/variables-invalid-label-characters.md)] +

    +
    +

    + Build.RequestedForEmail +

    +

    + BUILD_REQUESTEDFOREMAIL +

    +
    All +

    + [How are the identity variables set?](#identity_values) +

    +
    +

    + Build.RequestedForId +

    +

    + BUILD_REQUESTEDFORID +

    +
    All +

    + [How are the identity variables set?](#identity_values) +

    +
    +

    + Build.SourceBranch +

    +

    + BUILD_SOURCEBRANCH +

    +
    All (see Notes) +

    + The branch the build was queued for. Some examples: +

    +
      +
    • Git repo branch: `refs/heads/master`
    • +
    • Git repo pull request: `refs/pull/1/merge`
    • +
    • TFVC repo branch: `$/teamproject/main`
    • +
    • TFVC repo gated check-in: `Gated_2016-06-06_05.20.51.4369;username@live.com`
    • +
    • TFVC repo shelveset build: `myshelveset;username@live.com`
    • +
    +

    When you use this variable in your build number format, the forward slash characters (`/`) are replaced with underscore characters _).

    +

    Note: In TFVC, if you are running a gated check-in build or manually building a shelveset, you cannot use this variable in your build number format.

    +
    +

    + Build.SourceBranchName +

    +

    + BUILD_SOURCEBRANCHNAME +

    +
    All (see Notes) +

    + The name of the branch the build was queued for. +

    +
      +
    • Git repo branch or pull request: The last path segment in the ref. For example, in `refs/heads/master` this value is `master`.
    • +
    • TFVC repo branch: The last path segment in the root server path for the workspace. For example in `$/teamproject/main` this value is `main`.
    • +
    • TFVC repo gated check-in or shelveset build is the name of the shelveset. For example, `Gated_2016-06-06_05.20.51.4369;username@live.com` or `myshelveset;username@live.com`.
    • +
    +

    Note: In TFVC, if you are running a gated check-in build or manually building a shelveset, you cannot use this variable in your build number format.

    +
    +

    + Build.SourcesDirectory +

    +

    + BUILD_SOURCESDIRECTORY +

    +
    Agent + [!INCLUDE [include](_shared/variables-build-sources-directory.md)] +
    +

    + Build.SourceVersion +

    +

    + BUILD_SOURCEVERSION +

    +
    Agent +

    + The latest version control change that is included in this build. +

    +
      +
    • Git: The [commit](../../../../git/tutorial/commits.md) ID.
    • +
    • TFVC: the [changeset](../../../../tfvc/find-view-changesets.md).
    • +
    +
    +

    + Build.StagingDirectory +

    +

    + BUILD_STAGINGDIRECTORY +

    +
    Agent + [!INCLUDE [include](_shared/variables-build-artifacts-directory.md)] +
    +

    + Build.Repository.Git.SubmoduleCheckout +

    +

    + BUILD_REPOSITORY_GIT_SUBMODULECHECKOUT +

    +
    Agent +

    The value you've selected for **Checkout submodules** on the [repository tab](repository.md).

    +
    +

    + Build.SourceTfvcShelveset +

    +

    + BUILD_SOURCETFVCSHELVESET +

    +
    All (see Notes) +

    + Defined if your [repository](repository.md) is Team Foundation Version Control. +

    +

    + If you are running a [gated build](triggers.md#gated) or a [shelveset build](../../../actions/ci-cd-part-1.md#queueabuild), this is set to the name of the [shelveset](../../../../tfvc/suspend-your-work-manage-your-shelvesets.md) you are building. +

    +

    Note: This variable yields a value that is invalid for build use in a build number format

    +
    +

    + Common.TestResultsDirectory +

    +

    + COMMON_TESTRESULTSDIRECTORY +

    +
    Agent +

    The local path on the agent where the test results are created. For example: `c:\agent\_work\1\TestResults` +

    +
    +

    + System.AccessToken +

    +

    + SYSTEM_ACCESSTOKEN +

    +
    Agent +

    + [Use the OAuth token to access the REST API](../../../actions/scripts/powershell.md#oauth). +

    +
    +

    + System.CollectionId +

    +

    + SYSTEM_COLLECTIONID +

    +
    All +

    + The GUID of the team foundation collection. +

    +
    +

    + System.DefaultWorkingDirectory +

    +

    + SYSTEM_DEFAULTWORKINGDIRECTORY +

    +
    Agent + [!INCLUDE [include](_shared/variables-build-sources-directory.md)] +
    +

    + System.DefinitionId +

    +

    + SYSTEM_DEFINITIONID +

    +
    All +

    + The ID of the build definition. +

    +
    +

    + System.PullRequest.PullRequestId +

    +

    + SYSTEM_PULLREQUEST_PULLREQUESTID +

    +
    All +

    + The ID of the pull request that caused this build. For example: `17`. (This variable is initialized only if the build ran because of a [Git PR affected by a branch policy](../../../../git/branch-policies.md#require-the-pull-request-to-build).) +

    +
    +

    + System.PullRequest.SourceBranch +

    +

    + SYSTEM_PULLREQUEST_SOURCEBRANCH +

    +
    All +

    + The branch that is being revewiewed in a pull request. For example: `refs/heads/users/raisa/new-feature`. (This variable is initialized only if the build ran because of a [Git PR affected by a branch policy](../../../../git/branch-policies.md#require-the-pull-request-to-build).) +

    +
    +

    + System.PullRequest.TargetBranch +

    +

    + SYSTEM_PULLREQUEST_TARGETBRANCH +

    +
    All +

    + The branch that is the target of a pull request. For example: `refs/heads/master`. (This variable is initialized only if the build ran because of a [Git PR affected by a branch policy](../../../../git/branch-policies.md#require-the-pull-request-to-build).) +

    +
    +

    + System.TeamFoundationCollectionUri +

    +

    + SYSTEM_TEAMFOUNDATIONCOLLECTIONURI +

    +
    Agent +

    + The URI of the team foundation collection. For example: `https://fabrikamfiber.visualstudio.com/`. +

    +
    +

    + System.TeamProject +

    +

    + SYSTEM_TEAMPROJECT +

    +
    All +

    + The name of the team project that contains this build. +

    +
    +

    + System.TeamProjectId +

    +

    + SYSTEM_TEAMPROJECTID +

    +
    All +

    + The ID of the team project that this build belongs to. +

    +
    +

    + TF_BUILD +

    +
    Agent +

    + Set to `True` if the script is being run by a build step. +

    +
    + +## Q&A + + + +### What are the predefined Release Management variables? + +[Default release management variables](../../../concepts/definitions/release/variables.md#default-variables) + + + +### How are the identity variables set? + +The value depends on what caused the build. + +| If the build is triggered... | Then the Build.QueuedBy and Build.QueuedById values are based on... | Then the Build.RequestedFor and Build.RequestedForId values are based on... | +| --- | --- | ---| +| In Git or TFVC by the [Continuous integration (CI) triggers](triggers.md) | The system identity, for example: `[DefaultCollection]\Project Collection Service Accounts` | The person who pushed or checked in the changes. | +| In Git or by a [branch policy build](../../../../git/branch-policies.md#require-the-pull-request-to-build). | The system identity, for example: `[DefaultCollection]\Project Collection Service Accounts` | The person who checked in the changes. | +| In TFVC by a [gated check-in trigger](triggers.md) | The person who checked in the changes. | The person who checked in the changes. | +| In Git or TFVC by the [Scheduled triggers](triggers.md) | The system identity, for example: `[DefaultCollection]\Project Collection Service Accounts` | The system identity, for example: `[DefaultCollection]\Project Collection Service Accounts` | +| Because you clicked the **Queue build** button | You | You | + +[!INCLUDE [temp](../../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/concepts/definitions/release/_img/artifacts-01.png b/docs/build-release/concepts/definitions/release/_img/artifacts-01.png new file mode 100644 index 00000000000..436cb4e3c85 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/artifacts-01.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/artifacts-02.png b/docs/build-release/concepts/definitions/release/_img/artifacts-02.png new file mode 100644 index 00000000000..403ddd08740 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/artifacts-02.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/definition-01.png b/docs/build-release/concepts/definitions/release/_img/definition-01.png new file mode 100644 index 00000000000..2726e07b5d7 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/definition-01.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/definition-02.png b/docs/build-release/concepts/definitions/release/_img/definition-02.png new file mode 100644 index 00000000000..16dcd09fd61 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/definition-02.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/environments-01.png b/docs/build-release/concepts/definitions/release/_img/environments-01.png new file mode 100644 index 00000000000..c72ebec828e Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/environments-01.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/environments-01a.png b/docs/build-release/concepts/definitions/release/_img/environments-01a.png new file mode 100644 index 00000000000..5c8b244ad58 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/environments-01a.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/environments-02.png b/docs/build-release/concepts/definitions/release/_img/environments-02.png new file mode 100644 index 00000000000..b659273ba5d Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/environments-02.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/environments-03.png b/docs/build-release/concepts/definitions/release/_img/environments-03.png new file mode 100644 index 00000000000..c6b7146d8ee Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/environments-03.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/padlock-icon.png b/docs/build-release/concepts/definitions/release/_img/padlock-icon.png new file mode 100644 index 00000000000..86aa0da3f1f Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/padlock-icon.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/trigger-01.png b/docs/build-release/concepts/definitions/release/_img/trigger-01.png new file mode 100644 index 00000000000..75c8f8b0375 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/trigger-01.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/trigger-02.png b/docs/build-release/concepts/definitions/release/_img/trigger-02.png new file mode 100644 index 00000000000..75856b0aaec Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/trigger-02.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/trigger-02a.png b/docs/build-release/concepts/definitions/release/_img/trigger-02a.png new file mode 100644 index 00000000000..ee2473409bc Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/trigger-02a.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/trigger-02b.png b/docs/build-release/concepts/definitions/release/_img/trigger-02b.png new file mode 100644 index 00000000000..42f9ad56d47 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/trigger-02b.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/trigger-03.png b/docs/build-release/concepts/definitions/release/_img/trigger-03.png new file mode 100644 index 00000000000..6f72e97cda9 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/trigger-03.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/variables-01.png b/docs/build-release/concepts/definitions/release/_img/variables-01.png new file mode 100644 index 00000000000..8ea65207d6f Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/variables-01.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/variables-02.png b/docs/build-release/concepts/definitions/release/_img/variables-02.png new file mode 100644 index 00000000000..01588079b1e Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/variables-02.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/what-is-release-management/understand-rm-01.1.png b/docs/build-release/concepts/definitions/release/_img/what-is-release-management/understand-rm-01.1.png new file mode 100644 index 00000000000..599f51f3be5 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/what-is-release-management/understand-rm-01.1.png differ diff --git a/docs/build-release/concepts/definitions/release/_img/what-is-release-management/understand-rm-05.png b/docs/build-release/concepts/definitions/release/_img/what-is-release-management/understand-rm-05.png new file mode 100644 index 00000000000..10e548af4fe Binary files /dev/null and b/docs/build-release/concepts/definitions/release/_img/what-is-release-management/understand-rm-05.png differ diff --git a/docs/build-release/concepts/definitions/release/artifacts.md b/docs/build-release/concepts/definitions/release/artifacts.md new file mode 100644 index 00000000000..e0e5159dc26 --- /dev/null +++ b/docs/build-release/concepts/definitions/release/artifacts.md @@ -0,0 +1,417 @@ +--- +title: Artifacts in Release Management +description: Understand build artifacts in Release Management for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 6820FA1F-4B20-4845-89E0-E6AB4BD5888D +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Artifacts in Release Management + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +A release is a collection of artifacts. An **artifact** is a deployable +component of your application. Release Management can +deploy artifacts that are produced by a +[wide range of artifact sources](#sources), +and stored in different types of artifact repositories. + +When **authoring a release definition**, you link the +appropriate **artifact sources** to your release definition. +For example, you might link a Team Build build definition or +a Jenkins project to your release definition. + +When **creating a release**, you specify the exact +version of these artifact sources; for example, the number of a +build coming from Team Build, or the version of a +build coming from a Jenkins project. + +After a release is created, you cannot change these versions. A release is +fundamentally defined by the versioned artifacts that make up the release. +As you deploy the release to various environments, you will be deploying +and validating the same artifacts in all environments. + +A single release definition can be linked to +**multiple artifact sources**. +In this case, when you create a release, you specify individual versions for each of +these sources. + +![Artifacts in a definition and release](_img/artifacts-01.png) + +Artifacts are central to a number of features in +Release Management. Some of the features that depend +on the linking of artifacts to a release definition are: + +* **Auto-trigger releases**. You can configure new + releases to be automatically created whenever a new + version of an artifact is produced. For more details, see + [Continuous deployment triggers](triggers.md#release-triggers). + Note that the ability to automatically create releases + is available for only some artifact sources. + + + + +* **Artifact variables**. Every artifact that is part + of a release has metadata associated with it. This + metadata includes the version number of the artifact, + the branch of code from which the artifact was produced + (in the case of build or source code artifacts), the + definition that produced the artifact (in the case of + build artifacts), and more. This information is accessible + in the deployment tasks. For more details, see + [Artifact variables](variables.md#artifact-variables). + +* **Work items and commits**. The work items or commits + that are part of a release are computed from the + versions of artifacts. For example, each build in + Team Build is associated with a set of work items and + commits. The work items or commits in a release are + computed as the union of all work items and commits of + all builds between the current release and the + previous release. + Note that Release Management is currently + able to compute work items and commits for only + certain artifact sources. + +* **Artifact download**. Whenever a release is + deployed to an environment, Release Management + automatically downloads all the artifacts in that + release to the [agent](../../agents/agents.md) where the deployment job runs. + The procedure to download artifacts depends on the + type of artifact. For example, Team Build artifacts + are downloaded using an algorithm that downloads + multiple files in parallel. Git artifacts are + downloaded using Git library functionality. For more details, see + [Artifact download](#download). + +

    Artifact sources

    + +There are several types of tools you might use in your +application lifecycle process to produce or store +artifacts. For example, you might use continuous +integration systems such as Team Build, Jenkins, or +TeamCity to produce artifacts. You might also use version control systems such as Git or +TFVC to store your artifacts. +You can configure Release Management to deploy +artifacts from all these sources. + + + +By default, a release created from the release definition will use the +latest version of the artifacts. At the time of linking an artifact source to a release definition, +you can change this behavior by selecting one of the options to use the latest build from a specific +branch by specifying the tags, a specific version, or allow the user to specify the version when the +release is created from the definition. +If you link more than one set of artifacts, you can specify which is the primary +(default). + +![Selecting a default version option](_img/artifacts-02.png) + + +The following sections describe how to work with the different types of artifact +sources. + +### Team Build + +You can link a release definition to any of +the build definitions in your Visual Studio Team Services (VSTS) account +or Team Foundation Server project collection. + +> [!NOTE] +> you must include a **Publish Artifacts** task step in your build +definition. For XAML build definitions, an artifact with the name **drop** +is published implicitly. + +Some of the differences in capabilities between different versions of TFS and VSTS are: + +* **TFS 2015**: You can link build definitions only from the same team project of your collection. + You can link multiple definitions, but you cannot specify default versions. You can set up a continuous deployment trigger on only one of the definitions. + When multiple build definitions are linked, the latest builds of all the other definitions are used, along with the build that triggered the release creation. + +* **TFS 2017** and **VSTS**: You can link build definitions from any of the team projects in your collection or account. + You can link multiple build definitions and specify default values for each of them. You can set up continuous deployment triggers on + multiple build sources. When any of the builds completes, it will trigger the creation of a release. + +The following features are available when using Team Build sources: + +| Feature | Behavior with Team Build sources | +|---------|----------------------------------| +| Auto-trigger releases | New releases can be created automatically when new builds (including XAML builds) are produced. See [Continuous Deployment](triggers.md) for details. You do not need to configure anything within the build definition. See the notes above for differences between version of TFS.| +| Artifact variables | A number of [artifact variables](variables.md#artifact-variables) are supported for builds from Team Build. | +| Work items and commits | Team Build integrates with work items in TFS and VSTS. These work items are also shown in the details of releases. Team Build integrates with a number of version control systems such as TFVC and Git, GitHub, Subversion, and external Git repositories. Release Management shows the commits only when the build is produced from source code in TFVC or Git.| +| Artifact download | By default, build artifacts are downloaded to the agent. You can configure an option in the environment to [skip the download](../../process/phases.md#agent-phase) of artifacts. | +| Deployment section in build | The build summary includes a **Deployment** section, which lists all the environments to which the build was deployed. | + +

    Jenkins

    + +To consume Jenkins artifacts, you must create a +service endpoint with credentials to connect to +your Jenkins server. For more details, see +[service endpoints](../../library/service-endpoints.md) +and [Jenkins service endpoint](../../library/service-endpoints.md#sep-jenkins). +You can then link a Jenkins project to a release +definition. The Jenkins project must be configured +with a post build action to publish the artifacts. + +The following features are available when using Jenkins sources: + +| Feature | Behavior with Jenkins sources | +|---------|-------------------------------| +| Auto-trigger releases | You cannot configure a continuous deployment trigger for Jenkins sources in a release definition. However, you can use the [VSTS Continuous Deployment Plugin](https://wiki.jenkins-ci.org/display/JENKINS/VS+Team+Services+Continuous+Deployment+Plugin), available from the Jenkins website, to add post-build steps to Jenkins CI projects that trigger a release in TFS or VSTS when a build completes successfully. | +| Artifact variables | A number of [artifact variables](variables.md#artifact-variables) are supported for builds from Jenkins. | +| Work items and commits | Release Management cannot show work items or commits for Jenkins builds. | +| Artifact download | By default, Jenkins builds are downloaded to the agent. You can configure an option in the environment to [skip the download](../../process/phases.md#agent-phase) of artifacts. | +

    + +> [!NOTE] +> Release Management in VSTS may +not be able to contact your Jenkins server if, +for example, it is within your enterprise network. +In this case you can integrate +Release Management with Jenkins by setting up an +on-premises agent that can access the Jenkins server. +You will not be able to see the name of your Jenkins +projects when linking to a build, but you can type +this into the link dialog field. + +For more information about Jenkins integration capabilities, see +[VSTS Integration with Jenkins Jobs, Pipelines, and Artifacts](https://blogs.msdn.microsoft.com/visualstudioalm/2016/08/18/tfs-integration-jenkins-jobs-pipelines-artifacts/). + +

    TFVC, Git, and GitHub

    + +There are scenarios in which you may want to +consume artifacts stored in a version control system +directly, without passing them through a build process. +For example: + +* You are developing a PHP or a JavaScript application + that does not require an explicit build process. + +* You manage configurations for various environments + in different version control repositories, and you want + to consume these configuration files directly from version control as part of the deployment process. + +* You manage your infrastructure and configuration as + code (such as Azure Resource Manager templates) and + you want to manage these files in a version control + repository. + +Because you can configure multiple artifact sources +in a single release definition, you can link both a build +definition that produces the binaries of the +application as well as a version control repository +that stores the configuration files into the same +definition, and use the two sets of artifacts together +while deploying. + +Release Management integrates with Team Foundation +Version Control (TFVC) repositories, Git repositories, and GitHub repositories. + +You can link a release definition to any of the Git or TFVC +repositories in any of the team projects in your +collection (you will need read access to these +repositories). No additional setup is required when +deploying version control artifacts within the same collection. + +When you link a **Git repository** and select a branch, +you can specify the commit that will to be deployed +when creating a release. When you link a **TFVC branch**, +you can specify the changeset to be deployed +when creating a release. + +The following features are available when using TFVC, Git, and GitHub sources: + +| Feature | Behavior with TFVC, Git, and GitHub sources | +|---------|----------------------------------------| +| Auto-trigger releases | You can configure a continuous deployment trigger for pushes into the repository in a release definition. This can automatically trigger a release when a new commit is made to a repository. See [Triggers](triggers.md). | +| Artifact variables | A number of [artifact variables](variables.md) are supported for version control sources. | +| Work items and commits | Release Management cannot show work items or commits associated with releases when using version control artifacts.| +| Artifact download | By default, version control artifacts are downloaded to the agent. You can configure an option in the environment to [skip the download](../../process/phases.md#agent-phase) of artifacts. | + +

    TeamCity

    + +To integrate with TeamCity, you must first install the +[TeamCity artifacts for Release Management](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vss-services-teamcity) +extension from Visual Studio Marketplace. + +To consume TeamCity artifacts, start by creating a +service endpoint with credentials to connect to your +TeamCity server (see [service endpoints](../../library/service-endpoints.md) +for details). + +You can then link a TeamCity build configuration to a +release definition. The TeamCity build configuration +must be configured with an action to publish the artifacts. + +The following features are available when using TeamCity sources: + +| Feature | Behavior with TeamCity sources | +|---------|--------------------------------| +| Auto-trigger releases | You cannot configure a continuous deployment trigger for TeamCity sources in a release definition. To create a new release automatically when a build is complete, add a script to your TeamCity project that invokes the Release Management REST APIs to create a new release. | +| Artifact variables | A number of [artifact variables](variables.md) are supported for builds from TeamCity. | +| Work items and commits | Release Management cannot show work items or commits for TeamCity builds. | +| Artifact download | By default, TeamCity builds are downloaded to the agent. You can configure an option in the environment to [skip the download](../../process/phases.md#agent-phase) of artifacts. | +

    + +> [!NOTE] +> Release Management in VSTS may +> not be able to contact your TeamCity server if, +> for example, it is within your +> enterprise network. In this case you can integrate +> Release Management with TeamCity by setting up an +> on-premises agent that can access the TeamCity server. +> You will not be able to see the name of your TeamCity +> projects when linking to a build, but you can type +> this into the link dialog field. + +

    External TFS

    + +You can use the Release Management service in VSTS to deploy artifacts +published by an on-premises TFS server. You don't need to make the TFS +server visible on the Internet; you just set up an on-premises +automation agent. Builds from an on-premises TFS server are downloaded directly into the +on-premises agent, and then deployed to the specified target servers. They +will not leave your enterprise network. This allows you to leverage all of +your investments in your on-premises TFS server, and take advantage of the +Release Management capabilities in VSTS. + +>Using this mechanism, you can also deploy artifacts published in one +VSTS account from another VSTS account, or deploy artifacts +published in one Team Foundation Server from another Team Foundation Server. + +To enable these scenarios, you must install the +[TFS artifacts for Release Management](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.vss-services-externaltfs) +extension from Visual Studio Marketplace. Then create a +service endpoint with credentials to connect to your +TFS server (see [service endpoints](../../library/service-endpoints.md) +for details). + +You can then link a TFS build definition to your release definition. Choose +**External TFS Build** in the **Type** list. + +The following features are available when using external TFS sources: + +| Feature | Behavior with external TFS sources | +|---------|------------------------------------| +| Auto-trigger releases | You cannot configure a continuous deployment trigger for external TFS sources in a release definition. To automatically create a new release when a build is complete, you would need to add a script to your build definition in the external TFS server to invoke REST APIs of Release Management and to create a new release.| +| Artifact variables | A number of [artifact variables](variables.md) are supported for external TFS sources. | +| Work items and commits | Release Management cannot show work items or commits for external TFS sources.| +| Artifact download | By default, External TFS artifacts are downloaded to the agent. You can configure an option in the environment to [skip the download](../../process/phases.md#agent-phase) of artifacts. | +

    + +> [!NOTE] +> Release Management in VSTS may +> not be able to contact an on-premises TFS server if, +> for example, it is within your +> enterprise network. In this case you can integrate +> Release Management with TFS by setting up an +> on-premises agent that can access the TFS server. +> You will not be able to see the name of your TFS +> projects or build definitions when linking to a build, but you can type +> these into the link dialog fields. In addition, when you +> create a release, VSTS may not be able to +> query the TFS server for the build numbers. Instead, +> type the **Build ID** (not the build number) of the +> desired build into the appropriate field, or select +> the **Latest** build. + +### Other sources + +Your artifacts may be created and exposed by other +types of sources such as a NuGet repository. While we +continue to expand the types of artifact sources +supported in Release Management, you can start using +it without waiting for support for a specific source +type. Simply skip the linking of artifact sources in +a release definition, and add custom tasks to your +environments that download the artifacts directly +from your source. + +

    Artifact download

    + +When you deploy a release to an environment, the versioned artifacts from +each of the sources are, by default, downloaded to the automation agent +so that tasks running within that environment can deploy these artifacts. +The artifacts downloaded to the agent are not deleted when a release is +completed. However, when you initiate the next release, the downloaded artifacts are +deleted and replaced with the new set of artifacts. + +A new unique folder in the agent is created for every release definition when you +initiate a release, and the artifacts are downloaded into that folder. +The `$(System.DefaultWorkingDirectory)` variable maps to this folder. + +Note that, at present, Release Management does not perform any optimization +to avoid downloading the unchanged artifacts if the same release is +deployed again. In addition, because the previously downloaded contents are +always deleted when you initiate a new release, Release Management cannot +perform incremental downloads to the agent. + +You can, however, instruct Release Management to [skip the automatic download](../../process/phases.md#agent-phase) +of artifacts to the agent for a specific phase and environment of the deployment if you +wish. Typically, you will do this when the tasks in that phase do not +require any artifacts, or if you implement custom code in a task to +download the artifacts you require. + +

    Artifact source alias

    + +To ensure the uniqueness of every artifact download, each artifact source +linked to a release definition is automatically provided with a specific +download location known as the _source alias_. This location +can be accessed through the variable: + +`$(System.DefaultWorkingDirectory)\[source alias]` + +This uniqueness also ensures that, if you later rename a linked +artifact source in its original location (for example, +rename a build definition in Team Build or a project +in Jenkins), you don't need to edit the task +properties because the download location defined in +the agent does not change. + +The source alias is, by default, the name of the source +selected when you linked the artifact source; depending on the +type of the artifact source this will be the name of the +build definition, job, project, or repository. You can edit +the source alias from the artifacts tab of a release definition; for example, when you change +the name of the build definition and you want to use a +source alias that reflects the name of the build definition. + +> The source alias can contain only alphanumeric characters +and underscores, and must start with a letter or an underscore + +

    Primary source

    + +When you link multiple artifact sources to a release definition, one of them +is designated as the primary artifact source. The primary artifact source is used +to set a number of pre-defined [variables](variables.md#artifact-variables). It can also +be used in [naming releases](index.md#numbering). + +## Artifact variables + +Release Management exposes a set of pre-defined variables that you +can access and use in tasks and scripts; for example, when +executing PowerShell scripts in deployment jobs. When there are multiple +artifact sources linked to a release definition, you can access +information about each of these. For a list of all pre-defined artifact variables, see [variables](variables.md#artifact-variables). + +## Contributed links and additional information + +* [Code repo sources in Release Management](https://www.youtube.com/watch?v=-JDlE_MHl1s) +* [TeamCity extension for Release Management](https://www.youtube.com/watch?v=zDZRvc_6UiU) +* [Jenkins artifacts in Release Management](https://www.youtube.com/watch?v=ZC4hWYqdP_o) +* [External TFS artifacts for Release Management](https://www.youtube.com/watch?v=cR8NzcEmstw) + +## Related topics + +* [Release definitions](index.md) +* [Environments](environments.md) + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-01.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-01.png new file mode 100644 index 00000000000..e08fac94918 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-01.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-02.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-02.png new file mode 100644 index 00000000000..da54935640a Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-02.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-03.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-03.png new file mode 100644 index 00000000000..3d0bd88de27 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-03.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-04.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-04.png new file mode 100644 index 00000000000..4cb7c7d3ef3 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-04.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-05.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-05.png new file mode 100644 index 00000000000..0fff995945e Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-05.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-create.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-create.png new file mode 100644 index 00000000000..f624a02269a Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroup-create.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroups-ui-01.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroups-ui-01.png new file mode 100644 index 00000000000..90f7f783252 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroups-ui-01.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroups-ui-02.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroups-ui-02.png new file mode 100644 index 00000000000..4bb3c38295d Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-deployment-groups/depgroups-ui-02.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-provision-azure-vm-agents/azure-vm-create.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-provision-azure-vm-agents/azure-vm-create.png new file mode 100644 index 00000000000..755ab958555 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-provision-azure-vm-agents/azure-vm-create.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-provision-azure-vm-agents/deploy-arg-task.png b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-provision-azure-vm-agents/deploy-arg-task.png new file mode 100644 index 00000000000..a9b790c8dc8 Binary files /dev/null and b/docs/build-release/concepts/definitions/release/deployment-groups/_img/howto-provision-azure-vm-agents/deploy-arg-task.png differ diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/howto-deployment-groups.md b/docs/build-release/concepts/definitions/release/deployment-groups/howto-deployment-groups.md new file mode 100644 index 00000000000..09b3bbeddf8 --- /dev/null +++ b/docs/build-release/concepts/definitions/release/deployment-groups/howto-deployment-groups.md @@ -0,0 +1,52 @@ +--- +title: How to use deployment groups in Release Management +description: Using deployment groups with Release Management on Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 6A1A1429-47B7-4039-AAB6-1F325ADD4696 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 05/12/2017 +--- + +# How to: Use deployment groups + +>**VSTS:** Deployment groups are not yet available to all VSTS accounts. +>**TFS:** At present, deployment groups are not available in Team Foundation Server. + +## View and manage deployment groups + +You can view and manage groups on the **Deployment Groups** tab of the **Build & Release** hub. + +![Overview of all deployment groups](_img/howto-deployment-groups/depgroups-ui-01.png) + + +## Create a deployment group + +When you create a new deployment group, you specify the name and description. +The **Details** page generates a script that you must execute on each of your target servers +to install and prepare the agent. + +![Creating a deployment group](_img/howto-deployment-groups/depgroup-create.png) + +## Manage machines in a deployment group + +After you prepare your target servers, select and open the deployment group. +The servers appear in the **Summary** tab, along with a list of tags and the agent version installed. +The **Deployments** and **Capabilities** tabs provide more information about individual servers in the list. + +![Overview of a deployment group](_img/howto-deployment-groups/depgroups-ui-02.png) + + +Manage the security for a deployment group by assigning security roles. + +![Security for a deployment group](_img/howto-deployment-groups/depgroup-04.png) + +## Related topics + +* [Run on machine group phase](../../../process/phases.md#deployment-group-phase) +* [View and manage releases](../../../../actions/view-manage-releases.md) +* [Monitor releases and debug deployment issues](../../../../actions/debug-deployment-issues.md) + +[!INCLUDE [rm-help-support-shared](../../../../_shared/rm-help-support-shared.md)] + diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/howto-provision-deployment-group-agents.md b/docs/build-release/concepts/definitions/release/deployment-groups/howto-provision-deployment-group-agents.md new file mode 100644 index 00000000000..121c857fd58 --- /dev/null +++ b/docs/build-release/concepts/definitions/release/deployment-groups/howto-provision-deployment-group-agents.md @@ -0,0 +1,176 @@ +--- +title: How to provision agents for deployment groups +description: How to provision agents for deployment groups using Release Management in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: DF79C2A3-DE70-4184-B7A3-F01A8E86C87C +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 05/12/2017 +--- + +# How To: Provision agents for deployment groups + +[Deployment groups](index.md) make it easy to define logical groups of target machines for deployment, +and install the required agent on each machine. This topic explains how to create a deployment group, +and install and provision the agent on each virtual or physical machine in your deployment group. + +You can install the agent in any one of these ways: + +* [Run the script](#runscript) that is generated automatically when you create a deployment group. + +* [Install the **VSTS Agent** Azure VM extension](#azureext) on each of the VMs. + +* [Use the **Azure Resource Group Deployment** task](#deploytask) in your release definition. + + +## Run the installation script on the target servers + +1. In the **Deployment groups** tab of the **Build & Release** hub, choose **+New** to create a new group. + +1. Enter a name for the group, and optionally a description, then choose **Create**. + +1. In the **Register machines using command line** section of the next page, select the target machine operating system. + +1. Choose **Use a personal access token in the script for authentication**. [Learn more](https://go.microsoft.com/fwlink/?linkid=844181). + +1. Choose **Copy the script to clipboard**. + +1. Log onto each target machine in turn using the account with the [appropriate permissions](../../../../actions/agents/v2-windows.md#permissions) and: + + - Open an Administrator PowerShell command prompt, paste in the script you copied, then execute it to register the machine with this group. + + - When prompted to configure tags for the agent, press `Y` and enter any tags you will use to identify subsets of the machines in the group for partial deployments. + + > Tags you assign allow you to limit deployment to specific servers when + the deployment group is used in a [**Run on machine group** phase](../../../process/phases.md#deployment-group-phase). + + - When prompted for the user account, press *Return* to accept the defaults. + + - Wait for the script to finish with the message `Service vstsagent.{account-name}.{computer-name} started successfully`.

    + +1. In the **Deployment groups** page of the **Build & Release** hub, open the **Machines** tab and verify that the agents are running. If the tags you configured are not visible, refresh the page. + + +## Install the VSTS Agent Azure VM extension + +1. In the **Deployment groups** tab of the **Build & Release** hub, choose **+New** to create a new group. + +1. Enter a name for the group, and optionally a description, then choose **Create**. + +1. In the Azure portal, for each VM that will be included in the deployment group + open the **Extension** blade, choose **+ Add** to open the **New resource** list, and select **VSTS Agent**. + + ![Installing the VSTS Agent extension](_img/howto-provision-azure-vm-agents/azure-vm-create.png) + +1. In the **Install extension** blade, specify the name of the VSTS account to use. For example, if the account URL is `https://contoso.visualstudio.com`, just specify **contoso**. + +1. Specify the Team Project name and the deployment group name. + +1. Optionally, specify a name for the agent. If not specified, it uses the VM name appended with `-DG`. + +1. Enter the [Personal Access Token (PAT)](https://go.microsoft.com/fwlink/?linkid=844181) to use for authentication against the VSTS account. + +1. Optionally, specify a comma-separated list of tags that will be configured on the agent. + Tags are not case-sensitive, and each must no more than 256 characters. + +1. Choose **OK** to begin installation of the agent on this VM. + +1. Add the extension to any other VMs you want to include in this deployment group. + + +## Use the Azure Resource Group Deployment task + +You can use the [Azure Resource Group Deployment task](https://aka.ms/argtaskreadme) +to deploy an Azure Resource Manager (ARM) template that installs the VSTS Agent +Azure VM extension as you create a virtual machine, or to update the resource group +to apply the extension after the virtual machine has been created. +Alternatively, you can use the advanced deployment options of the +Azure Resource Group Deployment task to deploy the agent to deployment groups. + +### Install the "VSTS Agent" Azure VM extension using an ARM template + +An ARM template is a JSON file that declaratively defines a set of Azure resources. +The template can be automatically read and the resources provisioned by Azure. +In a single template, you can deploy multiple services along with their dependencies. + +For a Windows VM, create an ARM template and add a resources element under the +`Microsoft.Compute/virtualMachine` resource as shown here: + +```ARMTemplate +{ + "publisher": "Microsoft.VisualStudio.Services", + "type": "TeamServicesAgent", + "typeHandlerVersion": "1.0", + "autoUpgradeMinorVersion": true, + "settings": { + "VSTSAccountName": "[Required. The VSTS account to use. Example: If your account URL is `https://contoso.visualstudio.com`, just specify "contoso"]", + "TeamProject": "[Required. The Team Project that has the deployment group defined within it]", + "DeploymentGroup": "[Required. The deployment group against which deployment agent will be registered]", + "AgentName": "[Optional. If not specified, the VM name with -DG appended will be used]", + "Tags": "[Optional. A comma-separated list of tags that will be set on the agent. Tags are not case sensitive and each must be no more than 256 characters]" + }, + "protectedSettings": { + "PATToken": "[Required. The Personal Access Token that will be used to authenticate against the VSTS account to download and configure the agent]" + } +} +``` + +>**Note**: If you are deploying to a Linux VM, ensure that the `type` parameter in the code is `TeamServicesAgentLinux`. + +To use the template: + +1. In the **Deployment groups** tab of the **Build & Release** hub, choose **+New** to create a new group. + +1. Enter a name for the group, and optionally a description, then choose **Create**. + +1. In the **Releases** tab of the **Build & Release** hub, create a release definition with an environment that contains the **Azure Resource Group Deployment** task. + +1. Provide the parameters required for the task such as the Azure subscription, resource group name, + location, and template information, then save the release definition. + +1. Create a release from the release definition to install the agents. + +### Install agents using the advanced deployment options + +1. In the **Deployment groups** tab of the **Build & Release** hub, choose **+New** to create a new group. + +1. Enter a name for the group, and optionally a description, then choose **Create**. + +1. In the **Releases** tab of the **Build & Release** hub, create a release definition with an environment that contains the **Azure Resource Group Deployment** task. + +1. Select the task and expand the **Advanced deployment options for virtual machines** section. + Configure the parameters in this section as follows: + + * **Enable Prerequisites**: select **Configure with Deployment Group Agent**. + + * **TFS/VSTS endpoint**: Select an existing Team Foundation Server/TFS service endpoint that points + to your target account. Agent registration for deployment groups requires access to your Visual + Studio project. If you do not have an existing service endpoint, choose **Add** and create one now. + Configure it to use a [Personal Access Token (PAT)](https://go.microsoft.com/fwlink/?linkid=844181) + with scope restricted to **Deployment Group**. + + * **Team project**: Specify the Team Project containing the deployment group. + + * **Deployment Group**: Specify the name of the deployment group against which the agents will be registered. + + * **Copy Azure VM tags to agents**: When set (ticked), any tags already configured on the Azure VM will + be copied to the corresponding deployment group agent. By default, all + [Azure tags](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-using-tags) + are copied using the format `Key: Value`. For example, `Role: Web`. + + ![Configuring the Azure Resource Group Deployment task](_img/howto-provision-azure-vm-agents/deploy-arg-task.png) + +1. Provide the other parameters required for the task such as the Azure subscription, resource group name, + and location, then save the release definition. + +1. Create a release from the release definition to install the agents. + +## Related topics + +* [Run on machine group phase](../../../process/phases.md#deployment-group-phase) +* [Deploy an agent on Windows](../../../../actions/agents/v2-windows.md) +* [Deploy an agent on OSX](../../../../actions/agents/v2-osx.md) +* [Deploy an agent on Linux](../../../../actions/agents/v2-linux.md) + +[!INCLUDE [rm-help-support-shared](../../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/definitions/release/deployment-groups/index.md b/docs/build-release/concepts/definitions/release/deployment-groups/index.md new file mode 100644 index 00000000000..971f72a0e25 --- /dev/null +++ b/docs/build-release/concepts/definitions/release/deployment-groups/index.md @@ -0,0 +1,87 @@ +--- +title: Deployment groups in Release Management +description: Deployment Groups for Microsoft Release Management on Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 21416B0A-F60F-436F-AB46-D6C2A54D5707 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 05/12/2017 +--- + +# Deployment groups + +>**TFS:** At present, deployment groups are not available in Team Foundation Server. + +A deployment group is a logical set of deployment target machines +that have agents installed on each one. Deployment groups represent the physical environments; +for example, "Dev", "Test", "UAT", and "Production". In effect, a +deployment group is just another grouping of agents, much like an +[agent pool](../../../agents/pools-queues.md). + +When authoring a VSTS or TFS Release definition, you +can specify the deployment targets for a [phase](../../../process/phases.md) +using a deployment group. This makes it easy to define +[parallel execution](../../../process/phases.md#parallelexec) +of deployment tasks. + +Deployment groups: + +* Specify the security context and runtime + targets for the agents. As you create a deployment group, you + add users and give them appropriate permissions to administer, + manage, view, and use the group. + +* Let you view live logs for each server as a + deployment takes place, and download logs for all servers to + track your deployments down to individual machines. + +* Enable you to use machine tags to limit deployment to specific + sets of target servers. + +## Create a deployment group + +You define groups on the **Deployment Groups** tab of the **Build & Release** +hub, and install the agent on each server in the group. After you prepare your +target servers, they appear in the **Deployment Groups** tab. The list indicates if a +server is available, the tags you assigned to each server, and the latest +deployment to each server. + +The tags you assign allow you to limit deployment to specific servers when +the deployment group is used in a [Deployment group phase](../../../process/phases.md#deployment-group-phase). +You manage the security for a deployment group by +[assigning security roles](../../../agents/pools-queues.md#security). + +## Deploy agents to a deployment group + +Every target machine in the deployment group requires the build and release agent +to be installed. You an do this using the script that is generated in the +**Deployment Groups** tab of the **Build & Release** hub. You can choose the +type of agent to suit the target operating system and platform; such as Windows +and Linux. + +If the target machines are Azure VMs, you can quickly and easily prepare them by +by installing the **VSTS Agent** Azure VM extension on each of the VMs, +or by using the **Azure Resource Group Deployment** task in your release definition +to create a deployment group dynamically. + +For more information, see [Provision agents for deployment groups](howto-provision-deployment-group-agents.md). + +## Monitor releases for deployment groups + +When release is executing, you see an entry in the +[live logs page](../../../../actions/debug-deployment-issues.md) +for each server in the deployment group. After a release has completed, +you can download the log files for every server to examine the deployments +and resolve issues. To navigate quickly to a release definition or a release, +use the links in the **Releases** tab. + +## Related topics + +* [Run on machine group phase](../../../process/phases.md#deployment-group-phase) +* [Deploy an agent on Windows](../../../../actions/agents/v2-windows.md) +* [Deploy an agent on OSX](../../../../actions/agents/v2-osx.md) +* [Deploy an agent on Linux](../../../../actions/agents/v2-linux.md) + +[!INCLUDE [rm-help-support-shared](../../../../_shared/rm-help-support-shared.md)] + diff --git a/docs/build-release/concepts/definitions/release/env-templates.md b/docs/build-release/concepts/definitions/release/env-templates.md new file mode 100644 index 00000000000..f22fc866535 --- /dev/null +++ b/docs/build-release/concepts/definitions/release/env-templates.md @@ -0,0 +1,57 @@ +--- +title: Environment templates in Release Management +description: Understand environment templates in Release Management for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: BE9E2883-5CEB-4A91-A038-CB45B728A0C4 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Environment templates in Release Management + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +When you start a new release definition, or when you add an environment to +an existing release definition, you can choose from a list of templates for +each environment. These templates pre-populate the environment with the +appropriate tasks and settings, which can considerably reduce the time and +effort required to create a release definition. + +A set of pre-defined environment templates are available in +VSTS and in each version of TFS. You can use these templates +when you create a new release definition or add a new +environment to a definition. You can also create your own custom +environment templates from an environment you have populated and +configured. + +>Templates do not have any additional security capability. +There is no way to restrict the use of a template to specific +users. All templates, pre-defined and custom, are available for +use by all users who have permission to create release definitions. + +When an environment is created from a template, the tasks in the template are copied over to the environment. +Any further updates to the template have no impact on existing environments. +If you want a way to easily insert a number of environments into release definitions +(perhaps to keep the definitions consistent) and to enable these environments to all be updated +in one operation, use [task groups](../../library/task-groups.md) instead of environment templates. + +## Q&A + +### Can I export templates or share them with other accounts or projects? + +Custom templates that you create are scoped to the team project that you created them in. +Templates cannot be exported or shared with another team project, collection, server, or account. +You can, however, export a release definition and import it into another project, collection, server, or account. +Then you can re-create the template for use in that location. + +### Can I publish or consume new templates through extensions in VS Marketplace? + +No. + +### How do I update a custom environment template? + +To update an environment template, save the environment in a release definition as a template with the same name. This overwrites the original template. + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/definitions/release/environments.md b/docs/build-release/concepts/definitions/release/environments.md new file mode 100644 index 00000000000..878d7727922 --- /dev/null +++ b/docs/build-release/concepts/definitions/release/environments.md @@ -0,0 +1,285 @@ +--- +title: Environments in Release Management +description: Understand environments in Release Management for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: F3AB8DE0-CBB6-4B52-B483-435E0000E594 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Environments in Release Management + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + + +An **environment** is a _logical_ and _independent_ entity that +represents where you want to deploy a release generated from a release +definition. We'll examine these two characteristics in more detail +to help you understand how to divide your release process into +environments. + +First, an environment in a release definition is a **logical** entity. +It can represent any physical or real environment that you need. +For example, the deployment in an environment may be to a collection of servers, +a cloud, or multiple clouds. In fact, you can even use an environment to represent +shipping the software to an app store, or the manufacturing process of a boxed product. + +Second, you must be able to deploy to an environment **independently** of other environments in the definition. +For example, your definition might consist of two environments A and B, and Release Management could deploy Release 2 +to A and Release 1 to B. If you make any assumptions in B about the existence of a certain release in A, the +two environments are not independent. + +Here are some suggestions and examples for environments: + +* **Dev, QA, Prod** - As new builds are produced, they can be deployed to Dev. They can then be promoted to QA, and finally to Prod. + At any time, each of these environments may have a different release (set of build artifacts) deployed to them. + This is a good example of the use of environments in a release definition. + +* **Customer adoption rings** (for example, early adopter ring, frequent adopter ring, late adopter ring) - + You typically want to deploy new or beta releases to your early adopters more often than to other users. + Therefore, you are likely to have different releases in each of these rings. This is a good example of the use of environments in a definition. + +* **Database and web tiers of an application** - These should be modeled as a single environment + because you want the two to be in sync. If you model these as separate environments, you risk + deploying one build to the database environment and a different build to the web tier environment. + +* **Staging and production slots of a web site** - There is clearly an interdependence between these two slots. + You do not want the production slot to be deployed independently of the build version currently deployed to the + staging slot. Therefore, you must model the deployment to both the staging and production slots as a single environment. + +* **Multiple geographic sites with the same application** - In this example, you want to deploy your website to many geographically distributed sites around the globe + and you want all of them to be the same version. You want to deploy the new version of your application to a staging slot in all the sites, test it, + and - if all of them pass - swap all the staging slots to production slots. + In this case, given the interdependence between the sites, you cannot model each site as a different environment. + Instead, you must model this as a single environment with parallel deployment to multiple sites + (typically by using [phases](../../process/phases.md)). + +* **Multiple test environments to test the same application** - Having one or more release definitions, + each with multiple environments intended to run test automation for a build, is a common practice. + This is fine if each of the environments deploys the build independently, and then runs tests. + However, if you set up the first environment to deploy the build, and subsequent environments to test + the same shared deployment, you risk overriding the shared environment with a newer build while testing + of the previous builds is still in progress. + +The deployment process of a release to an environment is defined in terms of [phases](../../process/phases.md) and [tasks](../../process/tasks.md). +The physical deployment of a release to an environment is controlled through three features: +[approvals](#approvals), [deployment conditions](triggers.md#env-triggers), +and [queuing policies](#queuing-policies). + +![Environment](_img/definition-02.png) + +

    Approvals

    + +You can define approvers for each environment in a release definition. +When a release is created from a release definition that contains +approvers, the deployment stops at each point where approval is required +until the specified approver grants approval or rejects the release (or +re-assigns the approval to another user). + +You can define pre-deployment approvers, post-deployment approvers, or both for an environment. + +![Pre-deployment approvals settings](_img/environments-01.png) + +![Post-deployment approvals settings](_img/environments-01a.png) + +The **Automatic** option allows you to approve a deployment automatically. +When you select the **Specific Users** option, you can select +one or more approvers for an approval step. You can add multiple approvers for both pre-deployment +and post-deployment settings. + +When you add multiple approvers, you can control how they can approve the +deployment. The options are: + +* **All users in any order**: + Choose this option if you want sign-off from a set of users, + all of them must approve, and it does + not matter in what order they approve. + +* **All users in sequential order**: + Choose this option if you want sign-off from a + set of users, all of them must approve, and you want + them to approve in the specified order. For example, + the second user can approve only after the first user + approves, and so on. + +* **Any one user**: Choose this option + if you want sign-off from only one of a set of users. + When any one of the users approves, the release + moves forward. + +You can also specify account (user) groups as approvers. +When a group is specified as an approver, only one of +the users in that group needs to approve in order for the release +to move forward. + +* If you are using **Visual Studio Team Services** (VSTS), you + can use local groups managed in VSTS or + Azure Active Directory (AAD) groups if they have been + added into VSTS. + +* If you are using **Team Foundation Server** (TFS), + you can use local groups managed in TFS or Active + Directory (AD) groups if they have been added into TFS. + +The creator of a deployment is considered to be a separate user +role for deployments. Either the release creator or the deployment +creator can be restricted from approving deployments. For more details, +see [Release permissions](../../policies/permissions.md#release-permissions). + +

    Deployment conditions

    + +You control when a release should be deployed to an environment +using deployment conditions. For more information about deployment conditions, +see [triggers](triggers.md#env-triggers). + +## Queuing policies + +In some cases, you may be generating builds more quickly than +they can be deployed. Alternatively, you may configure multiple +[agents](../../agents/agents.md) and, for example, be creating releases from the same release definition +for deployment of different artifacts. In such cases, it's useful to +be able to control how multiple releases are queued into an +environment. **Queuing policies** give you that control. + +![Defining queuing policies](_img/environments-02.png) + +The options you can choose for a queuing policy are: + +* **Maximum number of deployments that can proceed at one time**: + Use this option if you dynamically provision new resources + in your environment and it is physically capable of handling + the deployment of multiple releases in parallel, but you want + to limit the number of parallel deployments. + +* If you specify a maximum number of deployments, two more options appear: + + - **Deploy all of them in order of request**: + Use this option if you want to deploy all the releases + sequentially into the same shared physical resources. + By deploying them in turn, one after the other, you + ensure that two deployment jobs do not target the same + physical resources concurrently, even if there are + multiple build and release agents available. You + also ensure that pre-deployment approval requests for the + environment are sent out in sequence. + + - **Deploy only the latest request and cancel the older ones**: + Use this option if you are producing releases faster + than builds, and you only want to deploy the latest build. + +To understand how these options work, consider a scenario +where releases **R1**, **R2**, **...**, **R5** of a +single release definition are created in quick succession +due to new builds being produced rapidly. Assume that +the first environment in this definition is named **QA** +and has both pre-deployment and post-deployment approvers +defined. + +* If you do not specify a limit for the number of parallel deployments, + all five approval requests will be sent out as soon as + the releases are created. If the approvers grant approval for all of the + releases, they will all be deployed to the **QA** environment in parallel. + (if the **QA** environment did not have any pre-deployment + approvers defined, all the five releases will automatically + be deployed in parallel to this environment). + +* If you specify a limit and **Deploy all of them in order of request**, + and the limit has already been reached, the pre-deployment approval for + release **R1** will be sent out first. After this + approval is completed, the deployment of release **R1** to the + **QA** environment begins. Next, a request for + post-deployment approval is sent out for release **R1**. It is + only after this post-deployment approval is completed that + execution of release **R2** begins and its pre-deployment + approval is sent out. The process continues like this for + all of the releases in turn. + +* If you specify a limit and **Deploy only the latest request and cancel the older ones**, + and the limit has already been reached, releases **R2**, **R3**, and **R4** will be + skipped, and the pre-deployment approval for **R5** in + the **QA** environment will be sent out immediately + after the post-deployment approval for release **R1** is completed. + +

    Environment general options

    + +While the most important part of defining an environment is the +automation tasks, you can also configure several properties and options +for an environment in a release definition. + +* **Environment name:** You can edit the name of the environment here if required. + +* **Environment owner:** You can designate a single user or a single + group to be the environment owner. Environment owners are + notified whenever a deployment of a release is completed to that + environment. Environment owners are not automatically assigned + any addition permissions. + +* **Send email notifications:** The environment owner and the creator of a release can + receive email notifications when deployments occur to this environment. + This can be for every deployment, or just for failed deployments. + +* Prevent the user who created a release or started the deployment from approving + his or her own release. This is often useful to ensure + compliance with corporate audit requirements. + +* Force the identity of the user to be re-evaluated + before the approval is processed and accepted. + +* Delete the environment from the pipeline. + +* Save a copy of the environment as a template. + +* Manage the security settings for the environment. + +![Defining options and policies](_img/environments-03.png) + +## Q&A + +### Why do we call these _environments_ instead of _stages_? + +Primarily, to communicate the intent that they must be independent in a release definition. +We felt that this term implies that you can have two different +releases (sets of build artifacts) deployed to two environments +within a definition at the same time. Release Management also allows +you to deploy to multiple environments in parallel, and to directly +deploy to any environment within the definition provided you have +appropriate permission. It also helps you answer the question "Which release +is currently deployed to a specific environment?". + +"Stage" would be a more appropriate term if we implemented a model +where a release, once created, must start in the first stage and +complete all the stages before the next release can be created. +Stages usually imply more dependencies. In other words, what you +do in the second stage could be dependent on what you did in the +first stage. + +### Isn't environment more of a physical entity than a logical entity? + +Unfortunately, the term environment is often also used to represent +the real set of resources that are being deployed to, and this does +cause some confusion with our choice of the term. We are exploring ways +of clarifying this, or other alternatives to the term "environment". + +### I need to deploy two Azure resource groups in order to deploy my application. Is that one environment or two? + +An environment is a logical entity that represents an independent +unit of deployment for your application, so you can deploy both the +resource groups using a single environment. For more guidance on +environments see the [introductory section](#introduction) above. + +### At the end of my pipeline, I update the binaries in an app store. I really do not have any environment in this case. How do I model this in a release definition? + +An environment is a logical entity that can be used to perform any +automation. It doesn't need to map to any physical resources. +Therefore, you can add an environment to your release definition +and add tasks to it to upload your binaries to the app store. + +## Related topics + +* [Environment triggers](triggers.md#env-triggers) +* [Tasks](../../process/tasks.md) +* [Environment security](../../policies/permissions.md#release-permissions) + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/definitions/release/index.md b/docs/build-release/concepts/definitions/release/index.md new file mode 100644 index 00000000000..2885727aa9a --- /dev/null +++ b/docs/build-release/concepts/definitions/release/index.md @@ -0,0 +1,96 @@ +--- +title: Release Definitions for Release Management in VSTS and TFS +description: Understand release definitions in Release Management for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 604AFC89-57CD-44F9-B440-5F07F88F0BD4 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Release definitions in Release Management + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +A **release definition** is one of the fundamental concepts in Release Management for VSTS and TFS. +It defines the end-to-end release process for an application to be deployed across various environments. + +You start using Release Management by authoring a release definition for your application. To author a release definition, you must specify the [artifacts](artifacts.md) that make up the application and the **release process**. + +An **artifact** is a deployable component of your application. It is typically produced through a Continuous Integration or a build process. Release Management can deploy artifacts that are produced by a [wide range of artifact sources](artifacts.md#sources) such as Team Build, Jenkins, or Team City. + +You define the **release process** using [environments](environments.md), and restrict deployments into or out of an environment using [approvals](environments.md#approvals). You define the automation in each environment using [phases](../../process/phases.md) and [tasks](../../process/tasks.md). You use [variables](variables.md) to generalize your automation and [triggers](triggers.md) to control when the deployments should be kicked off automatically. + +An example of a release process that can be modeled through a release definition in shown below: + +![Artifacts in a definition and release](_img/definition-01.png) + +[What's the difference between a release definition and a release?](../../releases/index.md) + +In this example, a release of a website is created by collecting specific versions of two builds (artifacts), each from a different build definition. The release is first deployed to a Dev environment and then forked in parallel to two QA environments in parallel. If the deployment succeeds in both the QA environments, the release is deployed to Prod ring 1 and then to Prod ring 2. Each production ring represents multiple instances of the same website deployed at various locations around the globe. + +An example of how deployment automation can be modeled within an environment is shown below: + +![Artifacts in a definition and release](_img/definition-02.png) + +In this example, a [phase](../../process/phases.md) is used to deploy the web and database tiers to websites across the globe in parallel within production ring 1. Once all of those deployments are successful, a second phase is used to switch traffic from the previous version to the newer version. + +> **TFS 2015**: Phases, and fork and join deployments, are not available in TFS 2015. + +Besides the release process, release definitions have a few options that can be customized: +[release names](#numbering) and [retention policies](../../policies/retention.md). + +

    Release names

    + +The names of releases for a release definition are, by default, sequentially numbered. +The first release is named **Release-1**, the next release is +**Release-2**, and so on. You can change this naming scheme by editing the +release name format mask. In the **Options** tab of a release definition, +edit the **Release name format** property. + +When specifying the format mask, you can use the following pre-defined variables. + +| Variable | Description | +|----------|-------------| +| **Rev:rr** | An auto-incremented number with at least the specified number of digits. | +| **Date / Date:MMddyy** | The current date, with the default format **MMddyy**. Any combinations of M/MM/MMM/MMMM, d/dd/ddd/dddd, y/yy/yyyy/yyyy, h/hh/H/HH, m/mm, s/ss are supported. | +| **System.TeamProject** | The name of the team project to which this build belongs. | +| **Release.ReleaseId** | The ID of the release, which is unique across all releases in the project. | +| **Release.DefinitionName** | The name of the release definition to which the current release belongs. | +| **Build.BuildNumber** | The number of the build contained in the release. If a release has multiple builds, this is the number of the [primary build](artifacts.md#primary-source). | +| **Build.DefinitionName** | The definition name of the build contained in the release. If a release has multiple builds, this is the definition name of the [primary build](artifacts.md#primary-source). | +| **Artifact.ArtifactType** | The type of the artifact source linked with the release. For example, this can be **Team Build** or **Jenkins**. | +| **Build.SourceBranch** | The branch of the [primary artifact source](artifacts.md#primary-source). For Git, this is of the form **master** if the branch is **refs/heads/master**. For Team Foundation Version Control, this is of the form **branch** if the root server path for the workspace is **$/teamproject/branch**. This variable is not set for Jenkins or other artifact sources. | +| *Custom variable* | The value of a global configuration property defined in the release definition. | + +For example, the release name format `Release $(Rev:rrr) for build $(Build.BuildNumber) $(Build.DefinitionName)` will create releases with names such as **Release 002 for build 20170213.2 MySampleAppBuild**. + +## Release retention + +You can customize how long releases of this definition must be retained. For more information, see [release retention](../../policies/retention.md). + +## Release history + +Every time you save a release definition, Release Management keeps a copy of the changes. This allows you to compare the changes at a later point, especially when you are debugging a deployment failure. + +## Related topics + +* [Artifacts](artifacts.md) +* [Environments](environments.md) +* [Triggers](triggers.md) +* [Variables](variables.md) +* [Release retention](../../policies/retention.md) +* [Release security](../../policies/permissions.md#release-permissions) + +## See also + +* [Work with release definitions](../../../actions/work-with-release-definitions.md) + +* [View and manage releases](../../../actions/view-manage-releases.md) + +* [Monitor releases and debug deployment issues](../../../actions/debug-deployment-issues.md) + +* [Configure your release pipelines for safe deployments](https://blogs.msdn.microsoft.com/visualstudioalm/2017/04/24/configuring-your-release-pipelines-for-safe-deployments/) + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/definitions/release/triggers.md b/docs/build-release/concepts/definitions/release/triggers.md new file mode 100644 index 00000000000..251730e9ca6 --- /dev/null +++ b/docs/build-release/concepts/definitions/release/triggers.md @@ -0,0 +1,127 @@ +--- +title: Triggers in Release Management +description: Understand triggers in Microsoft Release Management for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: FDB5DA41-1ADA-485E-86BD-8BF147788568 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Triggers in Release Management + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +You can configure when releases should be created, and when those releases should be deployed to environments. +The former is configured through [release triggers](#release-triggers), +and the latter through [environment triggers](#env-triggers) - both in a release definition. + +

    Release (continuous deployment) triggers

    + +If you specify [certain types](artifacts.md#sources) of +artifacts in a release definition, you can enable continuous deployment. +This instructs Release Management to create +new releases automatically when it detects new artifacts +are available. At present this option is available only for Team Foundation Build artifacts +and Git-based sources such as Team Foundation Git, GitHub, and other Git repositories. + +![Selecting a trigger for a release](_img/trigger-01.png) + +If you have linked multiple Team Foundation Build artifacts to a release definition, +you can configure continuous deployment for each of them. +In other words, you can choose to have a release created automatically when a new build +of any of those artifacts is produced. You can further choose to create the release only +when the build is produced by compiling code from certain branches +(only applicable when the code is in a VSTS or a TFS Git repository) +or when the build has certain tags. + +Note that, even though a release is automatically created, it +might not be deployed automatically to any environments. The +[environment triggers](#env-triggers) govern when and if a release should be deployed to an environment. + +

    Environment triggers

    + +You can choose to have the deployment to each environment triggered automatically +when a release is created by a continuous deployment trigger, based on: + +* **A predefined schedule**. When you select this option, + you can select the days of the week and the time of day that + Release Management will automatically create a new release. You can configure multiple schedules as required. + Note that, with scheduled triggers, a new release is created even if a newer version of artifact is not available since the last release. + + ![The scheduled trigger conditions settings](_img/trigger-02.png) + +* **Filters based on the artifacts**. You can add one or more filters for each artifact linked to the release definition. + Deployment will be triggered to this environment only if all the artifact conditions are successfully met. + + ![The artifact filter trigger conditions settings](_img/trigger-02b.png) + +* **The result of deploying to a previous environment in the pipeline**. + Use this setting if you want the release to be first deployed and validated in + another environment(s) before it is deployed to this environment. + Triggers are configured for each environment, + but the combination of these allows you to orchestrate + the overall deployment - such as the sequence in which automated + deployments occur across all the environments in a release + definition. For example, you can set up a linear pipeline where + a release is deployed first to the **Test** and **QA** environments. + Then, if these two deployments succeed, it will be deployed to a **Staging** + environment. In addition, you can configure the trigger to fire + for partially succeeded (but not failed) deployments. + + ![The environment trigger conditions settings](_img/trigger-02a.png) + +* **Manually by a user**. Releases are + not automatically deployed to the environment. To + deploy a release to this environment, you must manually + start a release and deployment from the release definition + or from a build summary. + +You can combine the automated settings to have releases created +automatically either when a new build is available or according to +a schedule. + +> **TFS 2015**: The following features are not available in TFS 2015 - +continuous deployment triggers for multiple artifact sources, +multiple scheduled triggers, combining scheduled and continuous deployment triggers in the same definition, +continuous deployment based on the branch or tag of a build. + +### Parallel forked and joined deployments + +The **Triggering environment** list lets you select +more than one environment. This allows you to +configure parallel (_forked_ and _joined_) deployment +pipelines where the deployment to an environment occurs +only when deployment to **all** the selected +environments succeeds. + +For example, the following schematic shows a pipeline +where deployment occurs in parallel to the **QA** and +**Pre-prod** environments after deployment to the **Dev** +environment succeeds. However, deployment to the +**Production** environment occurs only after successful +deployment to both the **QA** and **Pre-prod** environments. + +![Configuring a parallel (forked and joined) deployment pipeline](_img/trigger-03.png) + +In combination with the ability to define +[pre- and post-deployment approvals](environments.md#approvals), +this capability enables the configuration of complex +and fully managed deployment pipelines to suit +almost any release scenario. + +Note that you can always deploy a release directly to any of the +environments in your release definition by selecting the +**Deploy** action when you create a new release. In this case, the +environment triggers you configure, such as a trigger +on successful deployment to another environment, do not +apply. The deployment occurs irrespective of these settings. +This gives you the ability to override the release +process. Performing such direct deployments requires +the **Manage deployments** permission, which should +only be given to selected and approved users. + +> **TFS 2015**: Parallel fork and joined deployments are not available in TFS 2015 + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/definitions/release/variables.md b/docs/build-release/concepts/definitions/release/variables.md new file mode 100644 index 00000000000..d6a123edafb --- /dev/null +++ b/docs/build-release/concepts/definitions/release/variables.md @@ -0,0 +1,233 @@ +--- +title: Variables in Release Management +description: Understand variables in Microsoft Release Management for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 864FEB87-FE29-446D-804E-AD6ABDEA82C3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Variables in Release Management + +[!INCLUDE [version-rm-dev14](../../../_shared/version-rm-dev14.md)] + +As you compose the tasks for deploying your application into each environment, variables will help you to: + +* Define a more generic deployment process once, and then +customize it easily for each environment. For example, a variable +can be used to represent the connection string for web deployment, +and the value of this variable can be changed from one environment +to another. These are **custom variables**. + +* Use information about the context of the particular release, +[environment](environments.md), [artifacts](artifacts.md), or +[agent](../../agents/agents.md) in which the deployment process is +being run. For example, your script may need access to the location +of the build to download it, or to the working directory on the +agent to create temporary files. These are **default variables**. + +## Custom variables + +Custom variables can be defined at various scopes. + +* Share values across all of the definitions + in a project by using [variable groups](../../library/variable-groups.md). Choose a variable + group when you need to use the same values across all + the definitions, environments, + and tasks in a project, and you want to be able to change + the values in a single place. You define and manage variable groups in the **Library** tab. + +* Share values across all of the environments by using + **release definition variables**. Choose a release definition + variable when you need to use the same value across all + the environments and tasks in the release definition, and you + want to be able to change the value in a single place. You define and manage these variables in the **Variables** tab in a release definition. + +* Share values across all of the tasks within one specific environment by using + **environment variables**. + Use an environment-level variable for values that vary + from environment to environment (and are the same for + all the tasks in an environment). You define and manage these variables in the **Variables** tab of an environment in a release definition. + +Using custom variables at project, release definition, and environment scope helps you to: + +* Avoid duplication of values, making it easier to update + all occurrences as one operation. + +* Store sensitive values in a way that they cannot be seen + or changed by users of the release definitions. Designate a configuration property to be a secure (secret) variable by selecting the ![padlock](_img/padlock-icon.png) (padlock) icon next to the variable. + + >The values of hidden (secret) variables are stored securely on + the server and cannot be viewed by users after they are saved. + During a deployment, the Release Management service + decrypts these values when referenced by the tasks and passes them + to the agent over a secure HTTPS channel. + +To use custom variables in your build and release tasks, simply enclose the +variable name in parentheses and precede it with a **$** character. For example, +if you have a variable named **adminUserName**, you can insert the current +value of that variable into a parameter of a task as `$(adminUserName)`. + +[!INCLUDE [set-variables-in-scripts](../_shared/set-variables-in-scripts.md)] + +## Default variables + +Information about the execution context is made available to running tasks through default variables. Your tasks and scripts can use these variables to find information about the system, release, environment, or agent they are running in. +With the exception of **System.Debug**, these variables are read-only and their values are automatically set by the system. + +### System variables + +> [!div class="mx-tdBreakAll"] +> | Variable name | Description | Example | Not available in | +> |---------------|-------------|---------|--------------| +> | System.TeamFoundationServerUri | The URL of the Release Management service endpoint in the TFS or VSTS account. Use this from your scripts or tasks to call REST APIs on the Release Management service. | https://fabrikam.vsrm.visualstudio.com/ | | +> | System.TeamFoundationCollectionUri | The URL of the Team Foundation collection or VSTS account. Use this from your scripts or tasks to call REST APIs on other services such as Build and Version control. | https://fabrikam.visualstudio.com/ | | +> | System.CollectionId | The ID of the collection to which this build or release belongs. | 6c6f3423-1c84-4625-995a-f7f143a1e43d | TFS 2015 | +> | System.TeamProject | The name of the team project to which this build or release belongs. | Fabrikam | | +> | System.TeamProjectId | The ID of the team project to which this build or release belongs. | 79f5c12e-3337-4151-be41-a268d2c73344 | TFS 2015 | +> | System.ArtifactsDirectory | The directory to which artifacts are downloaded during deployment of a release. The directory is cleared before every deployment if it requires artifacts to be downloaded to the agent. Same as Agent.ReleaseDirectory and System.DefaultWorkingDirectory. | C:\agent\_work\r1\a | | +> | System.DefaultWorkingDirectory | The directory to which artifacts are downloaded during deployment of a release. The directory is cleared before every deployment if it requires artifacts to be downloaded to the agent. Same as Agent.ReleaseDirectory and System.ArtifactsDirectory. | C:\agent\_work\r1\a | | +> | System.WorkFolder | The working directory for this agent, where subfolders are created for every build or release. Same as Agent.RootDirectory and Agent.WorkFolder. | C:\agent\_work | | +> | System.Debug | This is the only system variable that can be _set_ by the users. Set this to true to run the deployment in debug mode to assist in fault-finding. | true |   | + + + +### Release variables + +> [!div class="mx-tdBreakAll"] +> | Variable name | Description | Example | Not available in | +> |---------------|-------------|---------|------------------| +> | Release.DefinitionName | The name of the release definition to which the current release belongs. | fabrikam-cd | | +> | Release.DefinitionId | The ID of the release definition to which the current release belongs. | 1 | TFS 2015 | +> | Release.ReleaseName | The name of the current release. | Release-47 | | +> | Release.ReleaseId | The identifier of the current release record. | 118 | | +> | Release.ReleaseUri | The URI of current release. | vstfs:///ReleaseManagement/Release/118 | | +> | Release.ReleaseDescription | The text description provided at the time of the release. | Critical security patch | | +> | Release.RequestedFor | The display name of identity that triggered the release. | Mateo Escobedo | | +> | Release.RequestedForId | The ID of identity that triggered the release. | 2f435d07-769f-4e46-849d-10d1ab9ba6ab | | +> | Release.EnvironmentName | The name of environment to which deployment is currently in progress. | Dev | | +> | Release.EnvironmentId | The ID of the environment instance in a release to which the deployment is currently in progress. | 276 | | +> | Release.EnvironmentUri | The URI of environment instance in a release to which deployment is currently in progress. | vstfs:///ReleaseManagement/Environment/276 | | +> | Release.DefinitionEnvironmentId | The ID of the environment in the corresponding release definition. | 1 | TFS 2015 | +> | Release.AttemptNumber | The number of times this release is deployed in this environment. | 1 | TFS 2015 | +> | Release.Deployment.RequestedFor | The display name of the identity that triggered (started) the deployment currently in progress. | Mateo Escobedo | TFS 2015 | +> | Release.Deployment.RequestedForId | The ID of the identity that triggered (started) the deployment currently in progress. | 2f435d07-769f-4e46-849d-10d1ab9ba6ab | TFS 2015 | + + + +### Release environment variables + +> [!div class="mx-tdBreakAll"] +> | Variable name | Description | Example | Not available in | +> |---------------|-------------|---------|------------------| +> | Release.Environments.{Environment name}.Status | The status of deployment of this release within a specified environment. | NotStarted | TFS 2015 | + +### Agent variables + +> [!div class="mx-tdBreakAll"] +> | Variable name | Description | Example | Not available in | +> | ------------- | ----------- |---------|------------------| +> | Agent.Name | The name of the agent as registered with the [agent pool](../../agents/pools-queues.md). This is likely to be different from the computer name. | fabrikam-agent | | +> | Agent.MachineName | The name of the computer on which the agent is configured. | fabrikam-agent | | +> | Agent.Version | The version of the agent software. | 2.109.1 | | +> | Agent.JobName | The name of the job that is running, such as Release or Build. | Release | | +> | Agent.HomeDirectory | The folder where the agent is installed. This folder contains the code and resources for the agent. | C:\agent | | +> | Agent.ReleaseDirectory | The directory to which artifacts are downloaded during deployment of a release. The directory is cleared before every deployment if it requires artifacts to be downloaded to the agent. Same as System.ArtifactsDirectory and System.DefaultWorkingDirectory. | C:\agent\_work\r1\a | | +> | Agent.RootDirectory | The working directory for this agent, where subfolders are created for every build or release. Same as Agent.WorkFolder and System.WorkFolder. | C:\agent\_work | | +> | Agent.WorkFolder | The working directory for this agent, where subfolders are created for every build or release. Same as Agent.RootDirectory and System.WorkFolder. | C:\agent\_work |   | + + + +

    Artifact variables

    + +For each artifact that is referenced in a release, you can use the following artifact variables. Not all variables are meaningful for each artifact type. The table below lists the default artifact variables and provides examples of the values that they have depending on the artifact type. If an example is empty, it implies that the variable is not populated for that artifact type. + +> [!div class="mx-tdBreakAll"] +> | Variable name | Description | Team Build example | Jenkins/ TeamCity example | TFVC/Git example | GitHub example| +> |---------------|-------------|--------------------|---------------------------|------------------|---------------| +> | Release.Artifacts.{Artifact alias}.DefinitionId | The identifier of the build definition or repository. | 1 | | | fabrikam/asp | +> | Release.Artifacts.{Artifact alias}.DefinitionName | The name of the build definition or repository. | fabrikam-ci | | TFVC: $/fabrikam, Git: fabrikam | fabrikam/asp (master) | +> | Release.Artifacts.{Artifact alias}.BuildNumber | The build number or the commit identifier. | 20170112.1 | 20170112.1 | TFVC: Changeset 3, Git: 38629c964 | 38629c964 | +> | Release.Artifacts.{Artifact alias}.BuildId | The build identifier. | 130 | 130 | | 38629c964d21fe405ef830b7d0220966b82c9e11 | +> | Release.Artifacts.{Artifact alias}.BuildURI | The URL for the build. | vstfs:///build-release /Build/130 | | | | https://github.com/fabrikam/asp | +> | Release.Artifacts.{Artifact alias}.SourceBranch | The path of the branch from which the source was built. | refs/heads/master | | | | +> | Release.Artifacts.{Artifact alias}.SourceBranchName | The name of the branch from which the source was built. | master | | | | +> | Release.Artifacts.{Artifact alias}.SourceVersion | The commit that was built. | bc0044458ba1d9298 cdc649cb5dcf013180706f7 | | | | +> | Release.Artifacts.{Artifact alias}.Repository.Provider | The type of repository from which the source was built | Git | | | | +> | Release.Artifacts.{Artifact alias}.RequestedForID | The identifier of the account that triggered the build. | 2f435d07-769f-4e46 -849d-10d1ab9ba6ab | | | | +> | Release.Artifacts.{Artifact alias}.RequestedFor | The name of the account that requested the build. | Mateo Escobedo | | | | +> | Release.Artifacts.{Artifact alias}.Type | The type of artifact source, such as Build. | Build | Jenkins: Jenkins, TeamCity:TeamCity | TFVC: TFVC, Git: Git | GitHub | + +### Primary artifact variables + +You designate one of the artifacts as a primary artifact in a release definition. For the designated primary artifact, Release Management populates the following variables. + +> [!div class="mx-tdBreakAll"] +> | Variable name | Same as | +> |---------------|---------| +> | Build.DefinitionId | Release.Artifacts.{Primary artifact alias}.DefinitionId | +> | Build.DefinitionName | Release.Artifacts.{Primary artifact alias}.DefinitionName | +> | Build.BuildNumber | Release.Artifacts.{Primary artifact alias}.BuildNumber | +> | Build.BuildID | Release.Artifacts.{Primary artifact alias}.BuildId | +> | Build.BuildURI | Release.Artifacts.{Primary artifact alias}.BuildURI | +> | Build.SourceBranch | Release.Artifacts.{Primary artifact alias}.SourceBranch | +> | Build.SourceBranchName | Release.Artifacts.{Primary artifact alias}.SourceBranchName | +> | Build.SourceVersion | Release.Artifacts.{Primary artifact alias}.SourceVersion | +> | Build.Repository.Provider | Release.Artifacts.{Primary artifact alias}.Repository.Provider | +> | Build.RequestedForID | Release.Artifacts.{Primary artifact alias}.RequestedForID | +> | Build.RequestedFor | Release.Artifacts.{Primary artifact alias}.RequestedFor | +> | Build.Type | Release.Artifacts.{Primary artifact alias}.Type | + + +### Using default variables + +You can use the default variables in two ways - as parameters to tasks in a release definition or in your scripts. + +You can directly use a default variable as an input to a task. +For example, to pass `Release.Artifacts.{Artifact alias}.DefinitionName` for the artifact source whose alias is **ASPNET4.CI** to a task, +you would use `$(Release.Artifacts.ASPNET4.CI.DefinitionName)`. + +![Using artifact variables in arguments to a PowerShell Script task](_img/variables-01.png) + +To use a default variable in your script, you must first replace the `.` in the default variable names with `_`. +For example, to print the value of artifact variable `Release.Artifacts.{Artifact alias}.DefinitionName` for the artifact source whose alias is **ASPNET4.CI** in a Powershell script, +you would use `$env:RELEASE_ARTIFACTS_ASPNET4_CI_DEFINITIONNAME`. + +![Using artifact variables in an inline PowerShell script](_img/variables-02.png) + +Note that the original name of the artifact source alias, `ASPNET4.CI`, is replaced by `ASPNET4_CI`. + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/definitions/release/what-is-release-management.md b/docs/build-release/concepts/definitions/release/what-is-release-management.md new file mode 100644 index 00000000000..90ae298c7e0 --- /dev/null +++ b/docs/build-release/concepts/definitions/release/what-is-release-management.md @@ -0,0 +1,145 @@ +--- +title: What is Microsoft Release Management +description: What is Microsoft Release Management in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 126C3E1C-9DB3-4E46-918D-FF5600BF8FC9 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# What is Release Management? + +**VSTS | TFS 2017 | TFS 2015** + +**Release Management** is a service in Visual Studio Team Services (VSTS) +and Team Foundation Server (TFS, Update 2 and later) and an essential +element of DevOps that helps your team **continuously deliver** software +to your customers at a faster pace and with lower risk. +You can **fully automate** the testing and delivery of your software +in multiple environments all the way to production, or set up +semi-automated processes with **approvals** and **on-demand deployments**. + +![A release definition defines the environments for deploment](_img/what-is-release-management/understand-rm-01.1.png) + +1. **[Watch this video](https://www.youtube.com/embed/zSPuRXTeZW8)** - see Release Management in action. + +

    + +1. **[Decide if it suits your scenarios](#isitforyou)** - use the simple checklist. + +1. **[See how it works](#howrmworks)** - get a basic understanding of the process. + +1. **[Get started now](#getstartednow)** - follow the steps to deploy your apps. + + +## Is Release Management for you? + +Consider using Release Management if: + +* **You develop applications and need to deploy them regularly to any platform,** + public or private cloud services, or App stores. Release Management + has many out-of-the-box tasks to deploy a variety of applications. If + you cannot find an out-of-the-box task to deploy your application + using Release Management, consider this: if you can script the + deployment of your application using Shell scripts or PowerShell scripts, + utilities such as Ant or Maven, batch files or EXE utilities, then + you can deploy it using Release Management. Release + Management also integrates with third party deployment systems + such as Chef and Docker. + +* **You use a continuous integration (CI) system** + and are looking for a fully-fledged continuous delivery or release + management system. Whether you use Team Build from VSTS or TFS, or + Jenkins as your CI system, you can set up Release Management to + automatically deploy new builds to multiple environments. Even if + we do not yet support integration with your favorite CI system or artifact + repository, you can still write custom tasks to download and + deploy artifacts from it. + +* **You need to track the progress of releases.** + If you use several environments for your tests, Release Management + helps you monitor whether a release has been deployed and tested on each + of these environments. Release Management also tracks whether an issue fixed + by a developer, or a product backlog item completed by your team, has + been deployed to a specific environment. + +* **You need control of the deployments.** + Release Management lets you specify which users can change the + configuration of an environment, or approve the release to be + deployed into a particular environment. If there is a problem with + your deployment, Release Management helps you roll back to a previous + deployment, and provide all the logs in one place to help you debug the + problem. + +* **You need audit history for all releases and their deployments.** + Release Management provides a history of all changes to the definitions, + configurations, and deployments. It also provides a history of all the + activity performed during each deployment. Each release is accompanied + by a listing of new features and developer commits that went into that + release. + + +## How does Release Management work? + +The Release Management service stores the data about your release definitions, +environments, tasks, releases, and deployments in VSTS or TFS. + +![Release management components](_img/what-is-release-management/understand-rm-05.png) + +Release Management runs the following steps as part of every deployment: + +1. **Pre-deployment approval:** When a new deployment request is triggered, + Release Management checks whether a pre-deployment approval is required + before deploying a release to an environment. If it is required, it sends + out email notifications to the appropriate approvers. + +1. **Queue deployment job:** Release Management schedules the deployment job on + an available [automation agent](../../../concepts/agents/agents.md). An agent is a piece + of software that is capable of running tasks in the deployment. + +1. **Agent selection**: An automation agent picks up the job. + The agents for Release Management are exactly the same as those that run your + Builds in VSTS and TFS. A release definition can + contain settings to select an appropriate agent at runtime. + +1. **Download artifacts**: The agent downloads all the artifacts specified + in that release (provided you have not opted to skip the download). The + agent currently understands two types of artifacts: Team Build artifacts + and Jenkins artifacts. + +1. **Run the deployment tasks**: The agent then runs all the tasks in the + deployment job to deploy the app to the target servers for an environment. + +1. **Generate progress logs**: The agent creates detailed logs for each + step while running the deployment, and pushes these logs back to VSTS + or TFS. + +1. **Post-deployment approval:** When deployment to an environment is complete, + Release Management checks if there is a post-deployment approval required + for that environment. If no approval is required, or upon completion of + a required approval, Release Management proceeds to trigger deployment to + the next environment. + + +## Get started now! + +Simply follow these steps: + +1. **[Create a release definition](../../../actions/work-with-release-definitions.md)** that defines the deployment processes and targets. + +1. **[Create and deploy releases](../../../actions/create-deploy-releases.md)** based on your release definition. + +1. **[View and manage your releases](../../../actions/view-manage-releases.md)** using the comprehensive UI and tools. + +1. **[Monitor and debug your releases](../../../actions/debug-deployment-issues.md)** during and after the deployments. + +## Related topics + +* [Download Team Foundation Server](https://www.visualstudio.com/products/tfs-overview-vs) +* [Install and configure Team Foundation Server](../../../../tfs-server/install/get-started.md) +* [Sign up for Visual Studio Team Services](https://www.visualstudio.com/products/visual-studio-team-services-vs) + +[!INCLUDE [rm-help-support-shared](../../../_shared/rm-help-support-shared.md)] + diff --git a/docs/build-release/concepts/library/_img/create-task-group.png b/docs/build-release/concepts/library/_img/create-task-group.png new file mode 100644 index 00000000000..18207daad09 Binary files /dev/null and b/docs/build-release/concepts/library/_img/create-task-group.png differ diff --git a/docs/build-release/concepts/library/_img/import-export-task-group.png b/docs/build-release/concepts/library/_img/import-export-task-group.png new file mode 100644 index 00000000000..1649bd177f8 Binary files /dev/null and b/docs/build-release/concepts/library/_img/import-export-task-group.png differ diff --git a/docs/build-release/concepts/library/_img/link-azure-key-vault-variable-group.png b/docs/build-release/concepts/library/_img/link-azure-key-vault-variable-group.png new file mode 100644 index 00000000000..5f3777888af Binary files /dev/null and b/docs/build-release/concepts/library/_img/link-azure-key-vault-variable-group.png differ diff --git a/docs/build-release/concepts/library/_img/link-variable-group.png b/docs/build-release/concepts/library/_img/link-variable-group.png new file mode 100644 index 00000000000..6647672b9b7 Binary files /dev/null and b/docs/build-release/concepts/library/_img/link-variable-group.png differ diff --git a/docs/build-release/concepts/library/_img/manage-task-group.png b/docs/build-release/concepts/library/_img/manage-task-group.png new file mode 100644 index 00000000000..88f8314704c Binary files /dev/null and b/docs/build-release/concepts/library/_img/manage-task-group.png differ diff --git a/docs/build-release/concepts/library/_img/rm-endpoint-link.png b/docs/build-release/concepts/library/_img/rm-endpoint-link.png new file mode 100644 index 00000000000..5a6bb013a6c Binary files /dev/null and b/docs/build-release/concepts/library/_img/rm-endpoint-link.png differ diff --git a/docs/build-release/concepts/library/_img/task-group-references.png b/docs/build-release/concepts/library/_img/task-group-references.png new file mode 100644 index 00000000000..8a45a23436f Binary files /dev/null and b/docs/build-release/concepts/library/_img/task-group-references.png differ diff --git a/docs/build-release/concepts/library/government-cloud.md b/docs/build-release/concepts/library/government-cloud.md new file mode 100644 index 00000000000..ea6248cbaab --- /dev/null +++ b/docs/build-release/concepts/library/government-cloud.md @@ -0,0 +1,96 @@ +--- +title: Azure Government Cloud deployment +description: Understand Azure Government Cloud deployment in Microsoft Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 857AB27D-FA16-44DB-B1C4-CBE946A0A1AD +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Deployments to Azure Government Cloud + +[Azure Government Clouds](https://azure.microsoft.com/en-us/overview/clouds/government/) +provide private and semi-isolated locations for specific Government or other services, separate from the normal +Azure services. Highest levels of privacy have been adopted for these clouds, including restricted data access policies. + +Visual Studio Team Services (VSTS) is not available in Azure Government Clouds, so there are some special considerations when you +want to deploy apps to Government Clouds because artifact storage, build, +and deployment orchestration must execute outside the Government Cloud. + +>At present, Team Foundation Server cannot be used to deploy to +an Azure Government Cloud. This capability will be added in the future. + +To enable connection to an Azure Government Cloud, you specify +it as the **Environment** parameter when you create a [service endpoint](service-endpoints.md) +connection using either the [Azure Classic service endpoint](#gsep-azure-classic) or the +[Azure Resource Manager service endpoint](#gsep-azure-rm). + +**Before you configure a service endpoint, you must ensure you meet all relevant compliance requirements for your application.** + +

    Azure Classic service endpoint

    + +Defines and secures a connection to a Microsoft Azure subscription +using Azure credentials or an Azure management certificate. + +| Parameter | Description | +| --------- | ----------- | +| \[authentication type\] | Required. Select **Credentials** or **Certificate based**. | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your Azure account or subscription. | +| Environment | Required. Select the Azure Government Cloud where your target Azure subscription is defined. | +| Subscription ID | Required. The GUID-like identifier for your Azure subscription (not the subscription name). You can copy this from the Azure portal. | +| Subscription Name | Required. The name of your Microsoft Azure subscription (account). | +| User name | Required for Credentials authentication. User name of a work or school account (for example @fabrikam.com). Microsoft accounts (for example @live or @hotmail) are not supported. | +| Password | Required for Credentials authentication. Password for the user specified above. | +| Management Certificate | Required for Certificate based authentication. Copy the value of the management certificate key from your [publish settings XML file](https://go.microsoft.com/fwlink/?LinkID=312990) or the Azure portal. | + +

    Azure Resource Manager service endpoint

    + +Defines and secures a connection to a Microsoft Azure subscription +using Service Principal Authentication (SPA). You must use the full +version of the dialog when connecting to an Azure Government Cloud. +Choose the link near the bottom of the dialog. + +![Opening the full version of the service endpoint dialog](_img/rm-endpoint-link.png) + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your Azure account or subscription. | +| Environment | Required. Select the Azure Government Cloud where your target Azure subscription is defined. | +| Subscription ID | Required only if you want to use an existing service principal. The GUID-like identifier for your Azure subscription (not the subscription name). | +| Subscription Name | Required only if you want to use an existing service principal. The name of your Microsoft Azure subscription (account). | +| Service Principal ID | Required only if you want to use an existing service principal. The Azure Active Directory client ID of the account. | +| Service Principal Key | Required only if you want to use an existing service principal. The Azure Active Directory client key of the account. | +| Tenant ID | Required only if you want to use an existing service principal. The ID of the client tenant in Azure Active Directory. | +

    + +Follow these steps to configure the service endpoint parameters: + +1. Download and run [this PowerShell script](https://github.com/Microsoft/vsts-rm-documentation/blob/master/Azure/SPNCreation.ps1) in an Azure PowerShell window. + When prompted, enter your subscription name, password, role (optional), and the Azure Government Cloud name. +1. Switch from the simplified version of the dialog to the full version using the link in the dialog. +1. Enter a user-friendly name to use when referring to this service endpoint connection. +1. Select the Environment name (such as Azure Cloud or an Azure Government Cloud). +1. Copy these fields from the output of the PowerShell script into the Azure subscription dialog textboxes: + - Subscription ID + - Subscription Name + - Service Principal ID + - Service Principal Key + - Tenant ID

    + +See +[this blog post](http://blogs.msdn.com/b/visualstudioalm/archive/2015/10/04/automating-azure-resource-group-deployment-using-a-service-principal-in-visual-studio-online-build-release-management.aspx) +for details about using service principal authentication. + +See also [Troubleshoot Azure Resource Manager service endpoints](../../actions/azure-rm-endpoint.md). + +### Next + +* [Deploy an Azure web app](../../apps/cd/deploy-webdeploy-webapps.md) + +* [Deploy an Azure cloud service](../../apps/cd/deploy-cloudservice-cloudservice.md) + +* [Examples index](../../apps/index.md) + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/library/index.md b/docs/build-release/concepts/library/index.md new file mode 100644 index 00000000000..274f6f09cec --- /dev/null +++ b/docs/build-release/concepts/library/index.md @@ -0,0 +1,41 @@ +--- +title: Library for VSTS and Team Foundation Server +description: Understand the library in Microsoft Release Management for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: 45C5042C-9E31-41F8-B63B-6D5C241EEC21 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Library + +**TFS 2017 | VSTS** + +*Library* is a collection of _shared_ build and release assets for a team project. +Assets defined in a library can be used in multiple build and release definitions of the team project. +The **Library** tab can be accessed directly in the **Build & Release** hub in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS). + +At present, the library contains two types of assets: [variable groups](variable-groups.md) and [secure files](secure-files.md). + +> Variable groups are available to only release definitions in VSTS and TFS 2017 at present. +Task groups and service endpoints are available to build and release definitions in TFS 2015, TFS 2017, and VSTS. + +

    Library Security

    + +All assets defined in the **Library** tab share a common security model. You can control who can define new items in a library, +and who can use an existing item. **Roles** are defined for library items, and **membership** of these roles governs the +operations you can perform on those items. + +| Role on a library item | Purpose | +|-------------------------|---------| +| Reader | Members of this role can view the item. | +| User | Members of this role can use the item when authoring build or release definitions. For example, you must be a 'User' for a variable group to be able to use it in a release definition. | +| Administrator | In addition to all the above operations, members of this role can manage membership of all other roles for the item. The user that created an item is automatically added to the Administrator role for that item. + +The security settings for the **Library** tab control access for _all_ items in the library. Role memberships for individual items are automatically inherited from those of the **Library** node. +In addition to the three roles listed above, the **Creator** role on the library defines who can create new items in the library, but cannot be used to manage permissions for other users. +By default, the following groups are added to the **Administrator** role of the library: **Build Administrators**, **Release Administrators**, and **Project Administrators**. + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/library/secure-files.md b/docs/build-release/concepts/library/secure-files.md new file mode 100644 index 00000000000..20f238f080f --- /dev/null +++ b/docs/build-release/concepts/library/secure-files.md @@ -0,0 +1,39 @@ +--- +title: Secure files for VSTS and Team Foundation Server +description: Understand secure files for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.assetid: A8AA9882-D3FD-4A8A-B22A-3A137CEDB3D7 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: dastahel +ms.author: madhurig +ms.date: 04/26/2017 +--- + +# Secure files + +**VSTS** + +Use the **Secure Files** library to store files such as signing certificates, Apple Provisioning Profiles, Android Keystore files, and SSH keys on the server without having to commit them to your source repository. Secure files are defined and managed in the **Library** tab of the **Build & Release** hub. + +The contents of the secure files are encrypted and can only be used during the build or release process by referencing them from a task. The secure files are be available across multiple build and release definitions in the team project based on the security settings. Secure files follow the [library security model](index.md#security). + +There's a size limit of 10 MB for each secure file. + +## Q&A + + + +### How can I create a custom task using secure files? + +You can build your own tasks that use secure files by using inputs with type `secureFile` in the `task.json`. +[Learn how to build a custom task](../../../extend/develop/add-build-task.md). + +The Install Apple Provisioning Profile task is a simple example of a task using a secure file. See the [reference documentation](../../tasks/utility/install-apple-provisioning-profile.md) and [source code](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/InstallAppleProvisioningProfile). + +To handle secure files during build or release, you can refer to the common module available [here](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/Common/securefiles-common). + +### My task can't access the secure files. What do I do? + +Make sure your agent is running version of 2.116.0 or higher. See [Agent version and upgrades](../agents/agents.md#agent-version-and-upgrades). + + diff --git a/docs/build-release/concepts/library/service-endpoints.md b/docs/build-release/concepts/library/service-endpoints.md new file mode 100644 index 00000000000..42fa4b2a0ef --- /dev/null +++ b/docs/build-release/concepts/library/service-endpoints.md @@ -0,0 +1,468 @@ +--- +title: Service endpoints in VSTS and Team Foundation Server +description: Understand Service endpoints in Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.assetid: A40435C0-2053-4D99-9A75-CCB97FBB15D2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Service endpoints for Build and Release + +**TFS 2015 | TFS 2017 | VSTS** + +You will typically need to connect to external and remote services to execute tasks +for a build or deployment. For example, you may need to connect to your Microsoft Azure +subscription, to a different build server or file server, to an online continuous +integration environment, or to services you install on remote computers. + +Watch this video on Channel 9 to learn about service endpoints. + +

    + +You can define endpoints in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) that are available for use in all +your tasks. For example, you can create an endpoint for your Azure subscription +and use this endpoint name in an Azure Web Site Deployment task in a release definition. + +You define and manage service endpoints from the Admin settings of your team project. +* VSTS: `https://{account}.visualstudio.com/{teamproject}/_admin/_services` +* TFS: `https://{tfsserver}/{collection}/{teamproject}/_admin/_services` + +Service endpoints are created at project scope. An endpoint created in one project is not visible in another team project. + +## Common endpoint types + +VSTS and TFS support a variety of endpoint types by default. Some of these are described below: + +* [Azure Classic service endpoint](#sep-azure-classic) +* [Azure Resource Manager service endpoint](#sep-azure-rm) +* [Azure Service Bus service endpoint](#sep-servbus) +* [Azure Service Fabric service endpoint](#sep-servfabric) +* [Bitbucket service endpoint](#sep-bbucket) +* [Chef service endpoint](#sep-chef) +* [Docker Host service endpoint](#sep-dochost) +* [Docker Registry service endpoint](#sep-docreg) +* [External Git service endpoint](#sep-extgit) +* [Generic service endpoint](#sep-generic) +* [GitHub service endpoint](#sep-github) +* [Jenkins service endpoint](#sep-jenkins) +* [Kubernetes service endpoint](#sep-kuber) +* [npm service endpoint](#sep-npm) +* [NuGet service endpoint](#sep-nuget) +* [Service Fabric service endpoint](#sep-fabric) +* [SSH service endpoint](#sep-ssh) +* [Subversion service endpoint](#sep-subversion) +* [Team Foundation Server / VSTS service endpoint](#sep-tfsts) +* [Visual Studio Mobile Center service endpoint](#sep-vsmobile) + +After you enter the parameters when creating a service endpoint, validate the +connection. The validation link uses a REST call to the external service with +the information you entered, and indicates if the call succeeded. + +

    Azure Classic service endpoint

    + +Defines and secures a connection to a Microsoft Azure subscription +using Azure credentials or an Azure management certificate. + +| Parameter | Description | +| --------- | ----------- | +| \[authentication type\] | Required. Select **Credentials** or **Certificate based**. | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your Azure account or subscription. | +| Environment | Required. Select **Azure Cloud** or one of the pre-defined [Azure Government Clouds](government-cloud.md) where your subscription is defined. | +| Subscription ID | Required. The GUID-like identifier for your Azure subscription (not the subscription name). You can copy this from the Azure portal. | +| Subscription Name | Required. The name of your Microsoft Azure subscription (account). | +| User name | Required for Credentials authentication. User name of a work or school account (for example @fabrikam.com). Microsoft accounts (for example @live or @hotmail) are not supported. | +| Password | Required for Credentials authentication. Password for the user specified above. | +| Management Certificate | Required for Certificate based authentication. Copy the value of the management certificate key from your [publish settings XML file](https://go.microsoft.com/fwlink/?LinkID=312990) or the Azure portal. | + +> If your subscription is defined in an [Azure Government Cloud](government-cloud.md), ensure your application meets the relevant compliance requirements before you configure a service endpoint. + +

    Azure Resource Manager service endpoint

    + +Defines and secures a connection to a Microsoft Azure subscription +using Service Principal Authentication (SPA). The dialog offers two modes: + +**Automated subscription detection**. + +You cannot use this version of the dialog to connect to an [Azure Government Cloud](government-cloud.md). + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your Azure account or subscription. | +| Subscription | Select an existing Azure subscription. [More information](#sep-azure-rm-conditions). | +

    + +**Manual subscription definition** + +You must use this version of the dialog when connecting to an [Azure Government Cloud](government-cloud.md). + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your Azure account or subscription. | +| Environment | Required. Select **Azure Cloud** or one of the pre-defined [Azure Government Clouds](government-cloud.md) where your subscription is defined. | +| Subscription ID | Required only if you want to use an existing service principal. The GUID-like identifier for your Azure subscription (not the subscription name). [More information](#sep-azure-rm-existingsp). | +| Subscription Name | Required only if you want to use an existing service principal. The name of your Microsoft Azure subscription (account). [More information](#sep-azure-rm-existingsp). | +| Service Principal ID | Required only if you want to use an existing service principal. The Azure Active Directory client ID of the account. [More information](#sep-azure-rm-existingsp). | +| Service Principal Key | Required only if you want to use an existing service principal. The Azure Active Directory client key of the account. [More information](#sep-azure-rm-existingsp). | +| Tenant ID | Required only if you want to use an existing service principal. The ID of the client tenant in Azure Active Directory. [More information](#sep-azure-rm-existingsp). | +

    + +**Restricting access rights** + +By default, the service endpoint will give users read/write permissions as a **Contributor** +to all the resources within the specified subscription. If you prefer to restrict the access +rights of users of the service endpoint, you must use the manual approach to creating the +endpoint with a service principal. You can give a service principal permissions at the +subscription level, resource group level, or resource level. For details of how to restrict +a service principal's access rights by using Role-Based Access Control +([RBAC](https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-built-in-roles)) roles, see +[Use portal to create an Azure Active Directory application and service principal that can access resources](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal). + +>If your subscription is defined in an [Azure Government Cloud](government-cloud.md), ensure your application meets the relevant compliance requirements before you configure a service endpoint. + + +When you start to create the endpoint, the code interrogates Azure +for subscriptions that are valid for the credentials you are currently +signed into VSTS or TFS with. This applies to both Microsoft +accounts and School or Work accounts. It displays a list of these for +you to select the one you want to use. + +If no subscriptions are shown, or subscriptions other than the one you +want to use, you must sign out of VSTS or TFS and sign in again +using the appropriate account credentials. See also +[Troubleshoot Azure Resource Manager service endpoints](../../actions/azure-rm-endpoint.md). + + +Selecting an existing subscription automatically creates a new Azure +service principal that is assigned the **Contributor** role and so has +access to all resources within the subscription. +You can edit this service principal in the Azure portal, +**Subscriptions | Users | Roles** section. For more details, see +[Azure Active Directory for developers](https://docs.microsoft.com/en-gb/azure/active-directory/develop/active-directory-developers-guide). + +If you want to use an existing service principal instead of creating +a new one: + +1. Download and run [this PowerShell script](https://github.com/Microsoft/vsts-rm-documentation/blob/master/Azure/SPNCreation.ps1) in an Azure PowerShell window. + When prompted, enter your subscription name, password, role (optional), and the type of cloud such as Azure Cloud (the default) or an Azure Government Cloud. +1. Switch from the simplified version of the dialog to the full version using the link in the dialog. + + ![Opening the full version of the service endpoint dialog](_img/rm-endpoint-link.png) + +1. Enter a user-friendly name to use when referring to this service endpoint connection. +1. Select the Environment name (such as Azure Cloud or an Azure Government Cloud). +1. Copy these fields from the output of the PowerShell script into the Azure subscription dialog textboxes: + - Subscription ID + - Subscription Name + - Service Principal ID + - Service Principal Key + - Tenant ID

    + +See +[this blog post](http://blogs.msdn.com/b/visualstudioalm/archive/2015/10/04/automating-azure-resource-group-deployment-using-a-service-principal-in-visual-studio-online-build-release-management.aspx) +for details about using service principal authentication. + +

    Azure Service Bus service endpoint

    + +Defines and secures a connection to a Microsoft Azure Service Bus queue. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your Azure account or subscription. | +| Service Bus ConnectionString | The URL of your Azure Service Bus instance. [More information](https://docs.microsoft.com/en-us/azure/service-bus-messaging/service-bus-fundamentals-hybrid-solutions). | +| Service Bus Queue Name | The name of an existing Azure Service Bus queue. | +

    + +

    Azure Service Fabric service endpoint

    + +Defines and secures a connection to a Microsoft Azure Service Fabric cluster. + +| Parameter | Description | +| --------- | ----------- | +| \[authentication type\] | Required. Select **No authentication**, **Azure Active Directory credentials**, or **Certificate based**. | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. | +| Cluster endpoint | Required. The client endpoint of the remote cluster to connect to. Prefix with **tcp://**. | +| Username | Required for Azure Active Directory authentication. The username to use when connecting to the remote cluster. | +| Password | Required for Azure Active Directory authentication. The password for the specified username. | +| Client certificate | Required for certificate based authentication. The Base64-encoded contents of the client certificate. | +| Password | The password for the certificate when using certificate based authentication. | +

    + +You can use the following PowerShell script to obtain a Base64-encoded representation of a certificate: + +```powershell +[System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("path-to-certificate-file\certificate.pfx")) +``` + +

    Bitbucket service endpoint

    + +Defines a connection to a Bitbucket server. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| User name | Required. The username to connect to the service. | +| Password | Required. The password for the specified username. | + +

    Chef service endpoint

    + +Defines and secures a connection to a [Chef](https://docs.chef.io/chef_overview.html) automation server. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Server URL | Required. The URL of the Chef automation server. | +| Node Name (Username) | Required. The name of the node to connect to. Typically this is your username. | +| Client Key | Required. The key specified in the Chef .pem file. | + +

    Docker Host service endpoint

    + +Defines and secures a connection to a Docker host. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Server URL | Required. The URL of the Docker host. | +| CA Certificate | Required. A trusted certificate authority certificate to use to authenticate with the host. | +| Certificate | Required. A client certificate to use to authenticate with the host. | +| Key | Required. The key specified in the Docker key.pem file. | + +Ensure you protect your connection to the Docker host. [Learn more](https://docs.docker.com/engine/security/https/). + +

    Docker Registry service endpoint

    + +Defines and secures a connection to a Docker registry. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Docker Registry | Required. The URL of the Docker registry. A default value is provided. | +| Docker ID | Required. The identifier of the Docker account user. | +| Password | Required. The password for the account user identified above. | +| Email | Optional. An email address to receive notifications. | + +

    External Git service endpoint

    + +Defines and secures a connection to a Git repository server. +Note that there is a specific endpoint for [GitHub](#sep-github). + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Server URL | Required. The URL of the Git repository server. | +| User name | Required. The username to connect to the Git repository server. | +| Password/Token Key | Required. The password or access token for the specified username. | + +Also see [Artifact sources](../definitions/release/artifacts.md#sources). + +

    Generic service endpoint

    + +Defines and secures a connection to any other type of service or application. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Server URL | Required. The URL of the service. | +| User name | Required. The username to connect to the service. | +| Password/Token Key | Required. The password or access token for the specified username. | + +

    GitHub service endpoint

    + +Defines a connection to a GitHub repository. +Note that there is a specific endpoint for [other Git servers](#sep-extgit). + +| Parameter | Description | +| --------- | ----------- | +| Choose authorization | Required. Either **Grant authorization** or **Personal access token**. See notes below. | +| Token | Required for Personal access token authorization. See notes below. | +| Connection name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your GitHub account or subscription. | +

    + +> [!NOTE] +> If you select **Grant authorization** for the **Choose authorization** option, +the dialog shows an **Authorize** button that opens the GitHub login page. +If you select **Personal access token** you must obtain a suitable token +and paste it into the **Token** textbox. The dialog shows the recommended scopes +for the token: **repo, user, admin:repo_hook**. See +[this page](https://help.github.com/articles/creating-an-access-token-for-command-line-use/) +on GitHub for information about obtaining an access token. Then register your +GitHub account in your profile: + +* Open your profile from your account name at the right of the VSTS page heading. +* At the top of the left column, under **DETAILS**, choose **Security**. +* In the **Security** tab, in the right column, choose **Personal access tokens**. +* Choose the **Add** link and enter the information required to create the token. + +Also see [Artifact sources](../definitions/release/artifacts.md#tfvcsource). + +

    Jenkins service endpoint

    + +Defines a connection to the Jenkins service. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Server URL | Required. The URL of the service. | +| Accept untrusted SSL certificates | Set this option to allow Jenkins clients to accept a self-signed certificate instead of installing the certificate in the TFS service role or the computers hosting the [agent](../agents/agents.md). | +| User name | Required. The username to connect to the service. | +| Password | Required. The password for the specified username. | + +Also see [VSTS Integration with Jenkins](https://blogs.msdn.microsoft.com/visualstudioalm/2017/04/25/vsts-visual-studio-team-services-integration-with-jenkins/) +and [Artifact sources](../definitions/release/artifacts.md#jenkinssource). + +

    Kubernetes service endpoint

    + +Defines and secures a connection to a [Kubernetes](https://kubernetes.io/docs/home/) automation account. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Server URL | Required. The URL of the Kubernetes automation service. | +| Kubeconfig | The contents of the kubectl configuration file. | + +

    npm service endpoint

    + +Defines and secures a connection to an npm server. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Registry URL | Required. The URL of the npm server. | +| Username | Required when connection type is **Basic authentication**. The username for authentication. | +| Password | Required when connection type is **Basic authentication**. The password for the username. | +| Personal Access Token | Required when connection type is **External VSTS**. The token to use to authenticate with the service. [Learn more](../../../accounts/use-personal-access-tokens-to-authenticate.md). | + +

    NuGet service endpoint

    + +Defines and secures a connection to a NuGet server. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Feed URL | Required. The URL of the NuGet server. | +| ApiKey | Required when connection type is **ApiKey**. The authentication key. | +| Personal Access Token | Required when connection type is **External VSTS**. The token to use to authenticate with the service. [Learn more](../../../accounts/use-personal-access-tokens-to-authenticate.md). | +| Username | Required when connection type is **Basic authentication**. The username for authentication. | +| Password | Required when connection type is **Basic authentication**. The password for the username. | + +

    Service Fabric service endpoint

    + +Defines and secures a connection to a Service Fabric cluster. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Cluster Endpoint | Required. The TCP endpoint of the cluster. | +| Server Certificate Thumbprint | Required when connection type is **Certificate based** or **Azure Active Directory**. | +| Client Certificate | Required when connection type is **Certificate based**. | +| Password | Required when connection type is **Certificate based**. The certificate password. | +| Username | Required when connection type is **Azure Active Directory**. The username for authentication. | +| Password | Required when connection type is **Azure Active Directory**. The password for the username. | +| Use Windows security | Required when connection type is **Others**. | +| Cluster SPN | Required when connection type is **Others** and usiong Windows security. | + +

    SSH service endpoint

    + +Defines and secures a connection to a remote host using Secure Shell (SSH). + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. | +| Host name | Required. The name of the remote host machine or the IP address. | +| Port number | Required. The port number of the remote host machine to which you want to connect. The default is port 22. | +| User name | Required. The username to use when connecting to the remote host machine. | +| Password or passphrase | The password or passphrase for the specified username if using a keypair as credentials. | +| Private key | The entire contents of the private key file if using this type of authentication. | + +Also see [SSH task](../../tasks/deploy/ssh.md) +and [Copy Files Over SSH](../../tasks/deploy/copy-files-over-ssh.md). + +

    Subversion service endpoint

    + +Defines and secures a connection to the Subversion repository. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Server repository URL | Required. The URL of the repository. | +| Accept untrusted SSL certificates | Set this option to allow the client to accept self-signed certificates installed on the agent computer(s). | +| Realm name | Optional. If you use multiple credentials in a build or release definition, use this parameter to specify the realm containing the credentials specified for this endpoint. | +| User name | Required. The username to connect to the service. | +| Password | Required. The password for the specified username. | + +

    Team Foundation Server / VSTS service endpoint

    + +Defines and secures a connection to another TFS or VSTS account. + +| Parameter | Description | +| --------- | ----------- | +| (authentication) | Select **Basic** or **Token Based** authentication. | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| Connection URL | Required. The URL of the TFS or VSTS instance. | +| User name | Required for Basic authentication. The username to connect to the service. | +| Password | Required for Basic authentication. The password for the specified username. | +| Personal Access Token | Required for Token Based authentication (TFS 2017 and VSTS only). The token to use to authenticate with the service. [Learn more](../../../accounts/use-personal-access-tokens-to-authenticate.md). | + +Use the **Verify connection** link to validate your connection information. + +See also [Authenticate access with personal access tokens for VSTS and TFS](../../../accounts/use-personal-access-tokens-to-authenticate.md). + +

    Visual Studio Mobile Center service endpoint

    + +Defines and secures a connection to Visual Studio Mobile Center. + +| Parameter | Description | +| --------- | ----------- | +| Connection Name | Required. The name you will use to refer to this endpoint in task properties. This is not the name of your account or subscription with the service. | +| API Token | Required. The token to use to authenticate with the service. [Learn more](https://docs.microsoft.com/en-us/mobile-center/api-docs/). | + +## Extensions for other endpoints + +Other service endpoint types and tasks can be installed in VSTS +and Team Foundation Server as extensions. Some examples of service endpoints currently +available through extensions are: + +* [TFS artifacts for Release Management](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.vss-services-externaltfs). + Deploy on-premises TFS builds with VSTS + Release Management through a TFS service endpoint + connection and the **Team Build (external)** artifact, + even when the TFS machine is not reachable directly + from VSTS. For more information, see + [External TFS](../definitions/release/artifacts.md#onpremtfssource) and + [this blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/04/05/deploy-artifacts-from-onprem-tfs-server-with-release-management-service/). + +* [TeamCity artifacts for Release Management](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vss-services-teamcity). + This extension provides integration with TeamCity through a TeamCity service endpoint, + enabling artifacts produced in TeamCity to be deployed + by using Release Management. See + [TeamCity](../definitions/release/artifacts.md#teamcitysource) + for more details. + +* [SCVMM Integration](https://marketplace.visualstudio.com/items?itemname=ms-vscs-rm.scvmmapp). + Connect to a System Center Virtual Machine Manager (SCVMM) server to easily + provision virtual machines and perform actions on + them such as managing checkpoints, starting and + stopping VMs, and running PowerShell scripts. + +* [VMware Resource Deployment](https://marketplace.visualstudio.com/items?itemname=ms-vscs-rm.vmwareapp). + Connect to a VMware vCenter Server from Visual Studio Team + Services or Team Foundation Server to provision, + start, stop, or snapshot VMware virtual machines. + +For information about creating your own custom extensions, see +[Overview of extensions for Visual Studio Team Services](../../../integrate/index.md). + +

    Endpoint security

    + +You can control who can define new service endpoints in a library, and who can use an existing service endpoint. **Roles** are defined for service endpoints, and **membership** in these roles governs the operations you can perform on those endpoints. + +| Role on a library service endpoint | Purpose | +|------------------------------------|---------| +| User | Members of this role can use the endpoint when authoring build or release definitions. | +| Administrator | In addition to using the endpoint, members of this role can manage membership of all other roles for the service endpoint. The user that created the service endpoint is automatically added to the Administrator role for that service endpoint. + +A special group called **Endpoint administrators** is added to every team project. Members of this group can create new endpoints. By default, project administrators are added as members of this group. This group is also added as an administrator to every endpoint created. + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/library/task-groups.md b/docs/build-release/concepts/library/task-groups.md new file mode 100644 index 00000000000..f30c8f06013 --- /dev/null +++ b/docs/build-release/concepts/library/task-groups.md @@ -0,0 +1,94 @@ +--- +title: Task Groups in VSTS and Team Foundation Server +description: Understand Task Groups in Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.assetid: 0FEAE814-2AF8-441B-A099-E77B1008D2F0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Task Groups + +**TFS 2017 | VSTS** + +A *task group* lets you to encapsulate a sequence of tasks already defined +in a build or a release definition into a single reusable task that can be +added to a build or release definition, just like any other task. You can +choose to extract the parameters from the encapsulated tasks as configuration +variables, and abstract the rest of the task information. + +The new task group is automatically added to the task catalogue, ready to add +to other release and build definitions. Task groups are stored at project level, +and are not accessible outside the project scope. + +Task groups are a way to standardize and centrally manage deployment steps for all your applications. +When you include a task group in your definitions, and then make a change centrally to the task group, +the change is automatically reflected in all the definitions that use the task group. There is no need +to change each one individually. + +To create a task group, selecting a sequence of tasks in a build or release definition +(when using a mouse, click on the checkmarks of each one). Then open the shortcut menu +and choose **Create task group**. Specify a name and description, and the category (tab) +you want to add it to in the Add tasks dialog. + +![Creating a task group from a release definition list of tasks](_img/create-task-group.png) + +However, before you do that, consider the following +pointers to help you achieve the desired behavior: + +* Ensure that all of the tasks you want to include in a task group have + their parameters defined as variables, + such as **$(MyVariable)**, where you want to be able to configure these parameters + when you use the task group. Variables used in the tasks are automatically extracted and converted into parameters for the task group. + Values of these configuration variables will be converted into default values for the task group. + +* If you specify a value (instead of a variable) for a parameter, that + value becomes a fixed parameter value and cannot be exposed as a parameter to the task group. + +* Parameters of the encapsulated tasks for which + you specified a value (instead of a variable), or you didn't provide + a value for, are not configurable in the task group when added to a build + or release definition. + +* When you save the task group, you can provide a name and a description for the + new task group, and select a category where you want it to appear in the + **Task catalog** dialog. You can also change the default values for each of the parameters. + +* When you queue a build or a deployment, the encapsulated tasks + are extracted and the values you entered for the task group parameters are applied to the tasks. + +* Changes you make to a task group are reflected in every instance of the task group. + +All the task groups you create in the current project are listed in +the **Task groups** tab of the **Build & Release** hub. + +![Managing a task group](_img/manage-task-group.png) + +* In the **Properties** page you can edit details of the task group, and change + the default values and descriptions for the parameters. + +* In the **Tasks** page you can edit the tasks that make up the task group. + For each encapsulated task you can change the parameter values for the + non-variable parameters, edit the existing parameter variables, + or convert parameter values to and from variables. + +* In the **History** tab you can see the history of changes to the group. + +* In the **References** tab you can expand lists of all the release definitions, + build definitions, and other task groups that use (reference) this task group. + This is useful to ensure changes do not have unexpected effects on other processes. + + ![References to a task group](_img/task-group-references.png) + +You can import and export a task group as a JSON file. + +![Import or export a task group](_img/import-export-task-group.png) + +## Related topics + +* [Tasks](../process/tasks.md) +* [Task phases](../process/phases.md) + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/library/variable-groups.md b/docs/build-release/concepts/library/variable-groups.md new file mode 100644 index 00000000000..161a0a0e8a2 --- /dev/null +++ b/docs/build-release/concepts/library/variable-groups.md @@ -0,0 +1,75 @@ +--- +title: Variable groups for VSTS and Team Foundation Server +description: Understand variable groups in Microsoft Release Management for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: A8AA9882-D3FD-4A8A-B22A-3A137CEDB3D7 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Variable groups + +**TFS 2017 | VSTS** + +Use a variable group to store values that you want to make available across +multiple release definitions. Variable groups are defined and managed in the **Library** tab of the +**Build & Release** hub. + +## Use a variable group + +To use a variable group in a release definition, open the definition, select the **Variables** +tab, select **Variable groups**, and then choose **Link variable group**. When a variable group is linked to a release definition, +all the variables in the group are available for use in all environments of that definition. + +![Linking a variable group](_img/link-variable-group.png) + +> You cannot link a variable group to a specific environment in a release definition at present. + +Any changes made centrally to a variable group, such as a change in the value of a variable or the addition of new variables, +will automatically be made available to all the release definitions in which the variable group is used. + +Variable groups follow the [library security model](index.md#security). + +## Link secrets from an Azure Key vault as variables + +Link an existing Azure key Vault to a variable group and map selective vault secrets to the variable group. + +1. Choose **Link secrets from an Azure key vault as variables**, and specify your Azure subscription end point + and the name of the vault containing your secrets. + + ![Variable group with Azure key vault integration](_img/link-azure-key-vault-variable-group.png) + +1. Ensure the Azure endpoint has at least **Get** and **List** management permissions on the vault for secrets. + You can enable VSTS to set these permissions by choosing **Authorize** next to the vault name. + + Alternatively, you can set the permissions manually in the [Azure portal](https://portal.azure.com): + + - Open the **Settings** blade for the vault, choose **Access policies**, then **Add new**. + + - In the **Add access policy** blade, choose **Select principal** and select the service principal for your client account. + + - In the **Add access policy** blade, choose **Secret permissions** and ensure that **Get** and **List** are checked (ticked). + + - Choose **OK** to save the changes.

    + +1. In the **Variable groups** page, choose **+ Add** to select specific secrets from your vault that will be mapped to this variable group. + +**Notes**: + +* Only the secret *names* are mapped to the variable group, not the secret values. The latest version of the value of each secret + is fetched from the vault and used in the release definition linked to the variable group during the release. + +* Any changes made to *existing* secrets in the key vault, such as a change in the value of a secret, will be made available + automatically to all the release definitions in which the variable group is used. + +* When *new* secrets are added to the vault, they are **not** made available automatically to all the release definitions. + New secrets must be explicitly added to the variable group in order to make them available to release definitions + in which the variable group is used. + +* Azure Key Vault supports storing and managing cryptographic keys and secrets in Azure. + Currently, VSTS variable group integration supports mapping only secrets from the Azure key vault. + Cryptographic keys and certificates are not yet supported + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/concurrent-pipelines-in-an-organization-example.png b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/concurrent-pipelines-in-an-organization-example.png new file mode 100644 index 00000000000..5d30b7c0487 Binary files /dev/null and b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/concurrent-pipelines-in-an-organization-example.png differ diff --git a/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/concurrent-pipelines-simple-example.png b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/concurrent-pipelines-simple-example.png new file mode 100644 index 00000000000..954ca6714f6 Binary files /dev/null and b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/concurrent-pipelines-simple-example.png differ diff --git a/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/concurrent-pipelines-with-additional-agents-example.png b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/concurrent-pipelines-with-additional-agents-example.png new file mode 100644 index 00000000000..9ae9103d410 Binary files /dev/null and b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/concurrent-pipelines-with-additional-agents-example.png differ diff --git a/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/control-panel-account-build-and-release-resource-limits.png b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/control-panel-account-build-and-release-resource-limits.png new file mode 100644 index 00000000000..6522b364dd8 Binary files /dev/null and b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/control-panel-account-build-and-release-resource-limits.png differ diff --git a/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/control-panel-server-vs-enterprise-access-levels.png b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/control-panel-server-vs-enterprise-access-levels.png new file mode 100644 index 00000000000..cc28f290052 Binary files /dev/null and b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-tfs/control-panel-server-vs-enterprise-access-levels.png differ diff --git a/docs/build-release/concepts/licensing/_img/concurrent-pipelines-vsts/concurrent-pipelines-simple-example.png b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-vsts/concurrent-pipelines-simple-example.png new file mode 100644 index 00000000000..74a55e7d2bd Binary files /dev/null and b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-vsts/concurrent-pipelines-simple-example.png differ diff --git a/docs/build-release/concepts/licensing/_img/concurrent-pipelines-vsts/concurrent-pipelines-with-additional-agents-example.png b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-vsts/concurrent-pipelines-with-additional-agents-example.png new file mode 100644 index 00000000000..6a506e46d4b Binary files /dev/null and b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-vsts/concurrent-pipelines-with-additional-agents-example.png differ diff --git a/docs/build-release/concepts/licensing/_img/concurrent-pipelines-vsts/control-panel-account-build-and-release-resource-limits.png b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-vsts/control-panel-account-build-and-release-resource-limits.png new file mode 100644 index 00000000000..e919a51f508 Binary files /dev/null and b/docs/build-release/concepts/licensing/_img/concurrent-pipelines-vsts/control-panel-account-build-and-release-resource-limits.png differ diff --git a/docs/build-release/concepts/licensing/concurrent-pipelines-tfs.md b/docs/build-release/concepts/licensing/concurrent-pipelines-tfs.md new file mode 100644 index 00000000000..6fcb78f5978 --- /dev/null +++ b/docs/build-release/concepts/licensing/concurrent-pipelines-tfs.md @@ -0,0 +1,122 @@ +--- +title: Concurrent pipelines in Team Foundation Server +description: Release Management concurrent pipelines pricing and availability in Microsoft Team Foundation Server (TFS) +ms.assetid: 8C578915-5C23-4563-957E-7AD1C6FB80FF +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: alewis +ms.date: 10/20/2016 +--- +# Concurrent release pipelines in Team Foundation Server + +**TFS 2017 | [VSTS](concurrent-pipelines-ts.md)** + +This article describes the licensing model for Release Management in Team Foundation Server 2017 (TFS 2017). We don't charge you for Team Foundation Build (TFBuild) so long as you have a TFS Client Access License (CAL). + +A TFS _concurrent pipeline_ gives you the ability to run a single release at a time in a team project collection. You can keep hundreds or even thousands of release definitions in your collection. But, to run more than one release at a time, you need additional concurrent pipelines. + +One free concurrent pipeline is included with every collection in a Team Foundation server. Every Visual Studio Enterprise subscriber in a Team Foundation server contributes one additional concurrent pipeline. You can buy additional private pipelines from the Visual Studio Marketplace. + +> Do I need concurrent pipelines in TFS 2015 or TFS 2013? Short answer: no. [More details](#tfs_before_2017) + +## How a concurrent pipeline is consumed + +For example, a collection in a Team Foundation server has one concurrent pipeline. This allows users in that collection to run only one release at a time. When additional releases are triggered, they are queued and will wait for the previous one to complete. + +A release requires a concurrent pipeline only when it is being actively deployed to an environment. Waiting for an approval does not consume a concurrent pipeline. However, waiting for a manual intervention in the middle of a deployment does consume a concurrent pipeline. + +![Concurrent pipelines simple example](_img/concurrent-pipelines-tfs/concurrent-pipelines-simple-example.png) + +0. FabrikamFiber Release 10 is first to be deployed. +0. Deployment of FabrikamFiber Release 11 starts after Release 10's deployment is complete. +0. Release 12 is queued until Release 11's deployment is active. +0. Release 11 waits for an approval. Release 12's deployment starts because a release waiting for approvals does not consume a concurrent pipeline. +0. Even though Release 11 is approved, it resumes only after Release 12's deployment is completed. +0. Release 11 is waiting for manual intervention. Release 13 cannot start because the manual intervention state consumes a concurrent pipeline. + +> Manual intervention does not consume a pipeline in TFS 2017 Update 1 and newer. + +## Concurrent processing within a single release + +Concurrent processing within a single release does not require additional concurrent pipelines. So long as you have enough agents, you can deploy to multiple environments in a release at the same time. + +For example, suppose your collection has three concurrent pipelines. You can have more than three agents running at the same time to perform parallel operations within releases. For instance, notice below that four or five agents are actively running jobs from three concurrent pipelines. + +![Concurrent pipelines with additional agents example](_img/concurrent-pipelines-tfs/concurrent-pipelines-with-additional-agents-example.png) + +## Concurrent pipelines in an organization + +For example, here's an organization that has multiple Team Foundation Servers. Two of their users have Visual Studio Enterprise subscriptions that they can use at the same time across all their on-premises servers and in each collection so long as the customer adds them as users to both the servers as explained below. + +![Concurrent pipelines in an organization example](_img/concurrent-pipelines-tfs/concurrent-pipelines-in-an-organization-example.png) + +## Determine how many concurrent pipelines you need + +You can begin by seeing if your teams can get by with the concurrent pipelines you've got by default. As the number of queued releases exceeds the number of concurrent pipelines you have, your release queues will grow longer. When you find the queue delays are too long, you can purchase additional concurrent pipelines as needed. + +### Simple estimate + +A simple rule of thumb: Estimate that you'll need one concurrent pipeline for every 10 users in your server. + +### Detailed estimate + +In the following scenarios you might need multiple concurrent pipelines: + +* If you have multiple teams, if each of them require a CI build, and if each of the CI builds is configured to trigger a release, then you'll likely need a concurrent pipeline for each team. + +* If you develop multiple applications in one collection, then you'll likely need additional concurrent pipelines: one to deploy each application at the same time. + +## Use your Visual Studio Enterprise subscription benefit + +Users who have Visual Studio Enterprise subscriptions are assigned to **VS Enterprise** access level in the Users hub of TFS instance. Each of these users contributes one additional concurrent pipeline to each collection. You can use this benefit on all Team Foundation Servers in your organization. + +0. Browse to **Server settings**, **Access levels**. + + ![control-panel-server-vs-enterprise-access-levels](_img/concurrent-pipelines-tfs/control-panel-server-vs-enterprise-access-levels.png) + + URL example: `http://{your_server}:8080/tfs/_admin/_licenses` + +0. On the left side of the page, click **VS Enterprise**. + +0. Add your users who have Visual Studio Enterprise subscriptions. + +After you've added these users, additional licenses will appear on the resource limits page described below. + +## Purchase additional concurrent pipelines + +If you need to run more concurrent releases, you can [buy additional private pipelines from the Visual Studio marketplace](https://marketplace.visualstudio.com/items?itemName=ms.build-release-private-pipelines). Since there is no way to directly purchase concurrent pipelines from Marketplace for a TFS instance at present, you must first buy concurrent pipelines for a VSTS account. After you buy the private pipelines for a VSTS account, you enter the number of purchased concurrent pipelines manually on the resource limits page described below. + +## View and manage concurrent pipelines + +0. Browse to **Collection settings**, **Build and Release**, **Resource limits**. + + ![control-panel-account-build-and-release-resource-limits](_img/concurrent-pipelines-tfs/control-panel-account-build-and-release-resource-limits.png) + + URL example: `http://{your_server}:8080/tfs/DefaultCollection/_admin/_buildQueue?_a=resourceLimits` + +0. View or edit the number of purchased concurrent pipelines. + +## Q&A + +### Who can use the system? + +TFS users with a [TFS CAL](https://www.visualstudio.com/team-services/tfs-pricing) can author as many releases as they want. + +To approve releases, a TFS CAL is not necessary; any user with [stakeholder access](../../../quickstart/get-started-stakeholder.md) can approve or reject releases. + +### Do I need concurrent pipelines to run builds on TFS? + +No, on TFS you don't need concurrent pipelines to run builds. You can run as many builds as you want at the same time for no additional charge. + +

    Do I need concurrent pipelines to use release management in versions before TFS 2017?

    + +No. + +In TFS 2015, so long as your users have a TFS CAL, they can use release management for no additional charge in trial mode. We called it "trial mode" to indicate that we would eventually charge for release management. Despite this label, we fully support release management in TFS 2015. + +In TFS 2013 there is no change in the licensing of release management features. + +### How is release management licensed in VSTS? + +See [concurrent pipelines in VSTS](concurrent-pipelines-ts.md). diff --git a/docs/build-release/concepts/licensing/concurrent-pipelines-ts.md b/docs/build-release/concepts/licensing/concurrent-pipelines-ts.md new file mode 100644 index 00000000000..162d511a872 --- /dev/null +++ b/docs/build-release/concepts/licensing/concurrent-pipelines-ts.md @@ -0,0 +1,118 @@ +--- +title: Concurrent pipelines in Visual Studio Team Services +description: Build and Release Management concurrent pipelines pricing and availability in Visual Studio Team Services (VSTS) +ms.assetid: FAFB2DE4-F462-4E9E-8312-4F343F2A35B8 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: alewis +ms.date: 10/20/2016 +--- +# Concurrent build and release pipelines in Visual Studio Team Services + +**[TFS 2017](concurrent-pipelines-tfs.md) | VSTS** + +> [!NOTE] +> August 2017 update: Were temporarily providing unlimited private pipelines while we work on fixing an issue. We estimate that we'll fix the issue and return to providing only the private pipelines you have sometime in September 2017. + +A VSTS _concurrent pipeline_ gives you the ability to run a single build or a single release at a time in your account. There are two types of concurrent pipelines in Visual Studio Team Services. + +## Private pipelines + +If you want to run builds and releases on your own machines ([private agents](../agents/agents.md)), then you need _private pipelines_. We provide one free private pipeline in each VSTS account. In addition, every active Visual Studio Enterprise subscriber in your account contributes a free private pipeline. You can buy [additional private pipelines](https://marketplace.visualstudio.com/items?itemName=ms.build-release-private-pipelines) from the Visual Studio Marketplace. After you've done this, you can deploy your own [private agents](../../concepts/agents/agents.md) and use them with these private pipelines. You can register any number of private agents with your account for no additional charge. + +## Hosted pipelines + +If you want to run builds and releases on machines managed by Microsoft ([hosted agents](../../concepts/agents/hosted.md)), then you need hosted pipelines. We provide 240 minutes of free total compute time per month from a [hosted agent](../../concepts/agents/hosted.md) to run a build or a release. Each build or release job within this free allocation cannot run for more than 30 minutes. To run more builds or releases concurrently, you can buy [additional hosted pipelines](https://marketplace.visualstudio.com/items?itemName=ms.build-release-hosted-pipelines) from the Visual Studio Marketplace. With the first purchase of a hosted pipeline, the 240 minute limit on total build and release time as well as the 30 minute limit on a single job are waived. Each additional purchase of a hosted pipeline adds another hosted agent for running your builds and releases. + +## How a concurrent pipeline is consumed + +For example, consider a VSTS account that has only one concurrent pipeline. This allows users in that account to run only one build or release at a time. When additional builds and releases are triggered, they are queued and will wait for the previous one to complete. + +A release requires a concurrent pipeline only when it is being actively deployed to an environment. Waiting for an approval or a manual intervention does not consume a concurrent pipeline. + +![Concurrent pipelines simple example](_img/concurrent-pipelines-vsts/concurrent-pipelines-simple-example.png) + +0. FabrikamFiber CI Build 102 (master branch) is first to be started. +0. Deployment of FabrikamFiber Release 11 is triggered by completion of FabrikamFiber CI Build 102. +0. FabrikamFiber CI Build 101 (feature branch) is triggered. The build can't start yet because Release 11's deployment is active. So the build stays queued. +0. Release 11 waits for approvals. Fabrikam CI Build 101 starts because a release waiting for approvals does not consume a concurrent pipeline. +0. Release 11 is approved. It resumes only after Fabrikam CI Build 101 is completed. + +## Concurrent processing within a single build or release + +Concurrent processing within a single build or release does not require additional concurrent pipelines. So long as you have enough agents, you can + +* In a build process, run multiple build configurations at the same time. + +* In a release process, deploy to multiple environments at the same time. + +For example, suppose your VSTS account has three concurrent pipelines. You can have more than three agents running at the same time to perform parallel operations within builds and releases. For instance, notice below at 9 a.m. that five agents are actively running jobs from three concurrent pipelines. + +![Concurrent pipelines with additional agents example](_img/concurrent-pipelines-vsts/concurrent-pipelines-with-additional-agents-example.png) + +## Determine how many concurrent pipelines you need + +You can begin by seeing if your teams can get by with the concurrent pipelines you've got by default. As the number of queued builds and releases exceeds the number of concurrent pipelines you have, your build and release queues will grow longer. When you find the queue delays are too long, you can purchase additional concurrent pipelines as needed from Visual Studio Marketplace. + +### Simple estimate + +A simple rule of thumb: Estimate that you'll need one concurrent pipeline for every 10 users in your account. + +### Detailed estimate + +In the following scenarios you might need multiple concurrent pipelines: + +* If you have multiple teams, and if each of them require a CI build, then you'll likely need a concurrent pipeline for each team. + +* If your CI build trigger applies to multiple branches, then you'll likely need a concurrent pipeline for each branch. + +* If you develop multiple applications using one account or server, then you'll likely need additional concurrent pipelines: one to deploy each application at the same time. + +## View available pipelines + +0. Browse to **Account settings**, **Build and Release**, **Resource limits**. + + ![control-panel-account-build-and-release-resource-limits](_img/concurrent-pipelines-vsts/control-panel-account-build-and-release-resource-limits.png) + + URL example: `https://{your_account}/_admin/_buildQueue?_a=resourceLimits` + +0. View the maximum number of concurrent pipelines that are available in your account. + +0. Select **Pipelines queue...** to display all the builds and releases that are actively consuming an available pipeline or that are queued waiting for a pipeline to be available. + +## Sharing of pipelines across projects in a collection + +Pipelines are purchased at the account level, and they are shared amongst all projects in an account. We don't yet offer a way to partition or dedicate certain pipelines to a specific project or agent pool. For example: + +0. You purchase two pipelines in your account. + +0. You queue two builds in the first project, and both the pipelines are consumed. + +0. You queue a build in the second project. That build will not start until one of the builds in your first project is completed. + +In the future, we plan to support finer control on allocation of pipelines. + +## Q&A + +### Who can use the Build and Release Management features? + +VSTS users with [basic access](https://www.visualstudio.com/products/visual-studio-team-services-feature-matrix-vs) can author as many builds and releases as they want. + +To approve releases, basic access is not necessary. Any user with [stakeholder access](../../../quickstart/get-started-stakeholder.md) can approve or reject releases. + +### Are there any limits on the number of builds and release definitions that I can create? + +No. You can create hundreds or even thousands of definitions for no charge. You can register any number of private agents for no charge. + +### I use XAML build controllers with my account. How am I charged for those? + +You can register one XAML build controller for each private pipeline in your account. Your account gets at least one free private pipeline, so you can register one XAML build controller for no additional charge. For each additional XAML build controller, you'll need an additional private pipeline. + +### As a Visual Studio Enterprise subscriber, do I get additional pipelines for TFS and VSTS? + +Yes. Visual Studio Enterprise subscribers get [one concurrent private pipeline in Team Foundation Server 2017](concurrent-pipelines-tfs.md) and one concurrent private pipeline in each VSTS account of which they are a member. + +### I'm using the Hosted Linux Preview queue and I'm getting only one agent at a time even though I purchased multiple hosted pipelines. Why? + +We're offering the **Hosted Linux Preview** queues as a preview. So we provide only one of these agents at a time. Eventually we'll offer multiple hosted agents with these capabilities. diff --git a/docs/build-release/concepts/policies/_img/define-git-retention-policies.png b/docs/build-release/concepts/policies/_img/define-git-retention-policies.png new file mode 100644 index 00000000000..ff22e671f6c Binary files /dev/null and b/docs/build-release/concepts/policies/_img/define-git-retention-policies.png differ diff --git a/docs/build-release/concepts/policies/_img/define-git-retention-policy-max-shown-in-definition.png b/docs/build-release/concepts/policies/_img/define-git-retention-policy-max-shown-in-definition.png new file mode 100644 index 00000000000..14dc6db32f3 Binary files /dev/null and b/docs/build-release/concepts/policies/_img/define-git-retention-policy-max-shown-in-definition.png differ diff --git a/docs/build-release/concepts/policies/_img/drop-down-list-icon.png b/docs/build-release/concepts/policies/_img/drop-down-list-icon.png new file mode 100644 index 00000000000..50361a10937 Binary files /dev/null and b/docs/build-release/concepts/policies/_img/drop-down-list-icon.png differ diff --git a/docs/build-release/concepts/policies/_img/retention-policy-01.png b/docs/build-release/concepts/policies/_img/retention-policy-01.png new file mode 100644 index 00000000000..48be1081748 Binary files /dev/null and b/docs/build-release/concepts/policies/_img/retention-policy-01.png differ diff --git a/docs/build-release/concepts/policies/_img/retention-policy-for-pull-request-builds.png b/docs/build-release/concepts/policies/_img/retention-policy-for-pull-request-builds.png new file mode 100644 index 00000000000..33dacd9342f Binary files /dev/null and b/docs/build-release/concepts/policies/_img/retention-policy-for-pull-request-builds.png differ diff --git a/docs/build-release/concepts/policies/permissions.md b/docs/build-release/concepts/policies/permissions.md new file mode 100644 index 00000000000..0f06edb7159 --- /dev/null +++ b/docs/build-release/concepts/policies/permissions.md @@ -0,0 +1,146 @@ +--- +ms.prod: vs-devops-alm +title: Build and release permissions +description: Build and release permissions in Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.technology: vs-devops-build +ms.assetid: A7C38A15-C9FE-4353-8680-21BAC0F6C873 +ms.manager: douge +ms.author: alewis +ms.date: 08/26/2016 +--- + +# Build and release permissions + +**VSTS | TFS 2017 | TFS 2015** + +Team Build and Release Management offer several features to help you +enforce the security requirements of your team and your +organization. This security is based on the standard model in Team +Foundation Server and Visual Studio Team Services. + +**Permissions** define the authorizations that can be granted or +denied to users and groups. These permissions can usually be granted or +denied in a hierarchical model. Within this hierarchy, +permissions can be inherited from the parent or overridden. In +certain cases, a set of permissions are grouped into a **role** +to simplify administration. Membership of these roles governs +access. There are also a few pre-defined **groups** that +provide convenient starting points for managing users. + +Permissions can be set both on specific users and on Team +Foundation user groups. If you are using Build and Release +Management in TFS, you can also use Active Directory groups to +manage permissions. If you are using VSTS, and your Team +Services account is integrated with Azure Active Directory (AAD), +you can also use AAD groups. For more details, see +[Permissions and groups in VSTS and TFS](../../../security/permissions.md). + +## Security of agents and library entities + +You use pre-defined roles and manage membership in those roles to +configure [security on agent pools and queues](../agents/pools-queues.md#security). +You can configure this in a hierarchical manner either for all +pools and queues, or for an individual pool or queue. + +Roles are also defined to help you configure security on shared +[library entities](../library/index.md) such as [variable groups](../library/index.md#security) +and [service endpoints](../library/service-endpoints.md#security). +Membership of these roles can be configured hierarchically, as well +as at either team project level or individual entity level. + +## Build permissions + +Permissions in Build follow a hierarchical model. Defaults for all the permissions can be set at the team project level and can be overridden on an individual build definition. + +To set the permissions at project level for all build definitions in a project, choose **Security** from the action bar on the main page of Builds hub. + +To set or override the permissions for a specific build definition, choose **Security** from the context menu of the build definition. + +The following permissions are defined in Build. All of these can be set at both the levels. + +| Permission | Description | +|------------|-------------| +| **Administer build permissions** | Can change any of the other permissions listed here. | +| **Queue builds** | Can queue new builds. | +| **Delete build definition** | Can delete build definition(s). | +| **Delete builds** | Can delete builds for a definition. Builds that are deleted are [retained](retention.md) in the **Deleted** tab for a period of time before they are destroyed. | +| **Destroy builds** | Can delete builds from the **Deleted** tab. | +| **Edit build definition** | Can save any changes to a build definition, including configuration variables, triggers, repositories, and retention policy. | +| **Edit build quality** | Can add tags to a build. | +| **Override check-in validation by build** | Applies to [TFVC gated check-in builds](../../../build-release/concepts/definitions/build/triggers.md#gated). This does not apply to PR builds. | +| **Retain indefinitely** | Can toggle the retain indefinitely flag on a build. | +| **Stop builds** | Can stop builds queued by other team members or by the system. | +| **View build definition** | Can view build definition(s). | +| **View builds** | Can view builds belonging to build definition(s). | +| **Update build information** | It is recommended to leave this alone. It's intended to enable service accounts, not team members. | +| **Manage build qualities** | _Only applies to XAML builds_ | +| **Manage build queue** | _Only applies to XAML builds_ | +

    +Default values for all of these permissions are set for team +project collections and team project groups. For example, +**Project Collection Administrators**, **Project Administrators**, and +**Release Administrators** are given all of the above permissions by +default. **Contributors** are given all permissions except +**Administer release permissions**. **Readers**, by default, +are denied all permissions except **View release definition** and +**View releases**. + +When it comes to security, there are different best practices and levels of permissiveness. While there's no one right way to handle permissions, we hope these examples help you empower your team to work securely with builds. + +* By default, contributors in a team project cannot create or edit build definitions. To grant permissions to work on build definitions, select _Contributors_ and set the **Edit build definition** permission to _Allow_. + +* In many cases you probably also want to set **Delete build definition** to _Allow_. Otherwise these team members can't delete even their own build definitions. + +* Without **Delete builds** permission, users cannot delete even their own completed builds. However, keep in mind that they can automatically delete old unneeded builds using [retention policies](retention.md). + +* We recommend that you do not grant these permissions directly to a person. A better practice is to add the person to the build administrator group or another group, and manage permissions on that group. + +## Release permissions + +Permissions in Release Management follow a hierarchical model. +Defaults for all the permissions can be set at the team project +level and can be overridden on an individual release definition. +Some of the permissions can also be overridden on a specific +environment within a definition. The hierarchical model helps +you define default permissions for all definitions at one extreme, +and to lock down the production environment for an application at +the other extreme. + +To set permissions at project level for all release +definitions in a project, open the shortcut menu from the ![drop-down list](_img/drop-down-list-icon.png) +icon next to **All release definitions** and choose **Security**. + +To set or override the permissions for a specific release +definition, open the shortcut menu from the ![drop-down list](_img/drop-down-list-icon.png) +icon next to that definition name. Then choose **Security** to open the +**Permissions** dialog. + +To specify security settings for individual environments in a release definition, open +the **Permissions** dialog by choosing **Security** on the shortcut menu that opens +from the ellipses (**...**) on an environment in the release definition editor. + +The following permissions are defined in Release Management. The scope column explains whether the permission can be set at the team project, release definition, or environment level. + +| Permission | Description | Scopes | +|------------|-------------|--------| +| **Administer release permissions** | Can change any of the other permissions listed here. | Project, Release definition, Environment | +| **Create releases** | Can create new releases. | Project, Release definition | +| **Delete release definition** | Can delete release definition(s). | Project, Release definition | +| **Delete release environment** | Can delete environment(s) in release definition(s). | Project, Release definition, Environment | +| **Delete releases** | Can delete releases for a definition. | Project, Release definition | +| **Edit release definition** | Can save any changes to a release definition, including configuration variables, triggers, artifacts, and retention policy as well as configuration within an environment of the release definition. To make changes to a specific environment in a release definition, the user also needs **Edit release environment** permission. | Project, Release definition | +| **Edit release environment** | Can edit environment(s) in release definition(s). To save the changes to the release definition, the user also needs **Edit release definition** permission. This permission also controls whether a user can edit the configuration inside the environment of a specific release instance. The user also needs **Manage releases** permission to save the modified release. | Project, Release definition, Environment | +| **Manage deployments** | Can initiate a direct deployment of a release to an environment. This permission is only for direct deployments that are manually initiated by selecting the **Deploy** action in a release. If the condition on an environment is set to any type of automatic deployment, the system automatically initiates deployment without checking the permission of the user that created the release. | Project, Release definition, Environment | +| **Manage release approvers** | Can add or edit approvers for environment(s) in release definition(s). This permissions also controls whether a user can edit the approvers inside the environment of a specific release instance. | Project, Release definition, Environment | +| **Manage releases** | Can edit the configuration in releases. To edit the configuration of a specific environment in a release instance, the user also needs **Edit release environment** permission. | Project, Release definition | +| **View release definition** | Can view release definition(s). | Project, Release definition | +| **View releases** | Can view releases belonging to release definition(s). | Project, Release definition | +

    +Default values for all of these permissions are set for team +project collections and team project groups. For example, +**Project Collection Administrators**, **Project Administrators**, and +**Release Administrators** are given all of the above permissions by +default. **Contributors** are given all permissions except +**Administer release permissions**. **Readers**, by default, +are denied all permissions except **View release definition** and +**View releases**. diff --git a/docs/build-release/concepts/policies/retention.md b/docs/build-release/concepts/policies/retention.md new file mode 100644 index 00000000000..754ad4704e0 --- /dev/null +++ b/docs/build-release/concepts/policies/retention.md @@ -0,0 +1,239 @@ +--- +ms.prod: vs-devops-alm +title: Build and release retention policies +description: Build and release retention policies in Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.technology: vs-devops-build +ms.assetid: A9AC68EB-E013-4F86-8604-E69BB330817B +ms.manager: douge +ms.author: alewis +ms.date: 08/26/2016 +--- + +# Build and release retention policies + +**VSTS | TFS 2017 | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/library/ms181716%28v=vs.120%29.aspx)** + +Retention policies are used to configure how long builds and +releases are to be retained by the system. The primary reasons to +delete older builds and releases are to conserve storage and to +reduce clutter. The main reasons to keep builds and releases are +for audit and tracking. + +## Build retention + +In most cases you don't need to retain completed builds longer than +a certain number of days. Using build retention policies, you can +control **how many days** you want to keep each build before +deleting it and the **minimum number of builds** that should be +retained for each definition. + +As an author of a build definition, you can customize retention +policies for builds of your definition on the **Retention** tab. +You can also customize these policies on a branch-by-branch basis +if you are building from [Git repositories](#git-repositories). + +### Global build retention policy + +If you are using an on-premises Team Foundation Server, you can specify build retention policy defaults and maximums for a team project collection. You can also specify when builds are permanently destroyed (removed from the **Deleted** tab in the build explorer). + +If you are using VSTS, you can view but not change these settings for your account. + +Global build retention policy settings can be managed from the **Build and Release** settings of your account or team project collection: + +* VSTS: `https://{your_account}.visualstudio.com/_admin/_buildQueue` + +* TFS 2017: `https://{your_server}/tfs/DefaultCollection/_admin/_buildQueue` + +* TFS 2015 Update 3: `http://{your_server}:8080/tfs/DefaultCollection/_admin/_buildQueue` + +* TFS 2015 RTM: `http://{your_server}:8080/tfs/DefaultCollection/_admin/_buildQueue#_a=settings` + +The **maximum retention policy** sets the upper limit for how longs +builds can be retained for all build definitions. +Authors of build definitions cannot configure settings for their +definitions beyond the values specified here. + +The **default retention policy** sets the default retention values for all the build definitions. Authors of build definitions can override these values. + +The **build destruction policy** helps you keep the builds for a certain period of time after they are deleted. This policy cannot be overridden in individual build definitions. + +### Git repositories + +If your [repository type](../../concepts/definitions/build/repository.md) is one of the following, you can define multiple retention policies with branch filters: + +* Git in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +* GitHub +* External Git + +For example, your team may want to keep: + +* User branch builds for five days, with a minimum of a single successful or partially successful build for each branch. +* Master and feature branch builds for 10 days, with a minimum of three successful or partially successful builds for each of these branches. You exclude a special feature branch that you want to keep for a longer period of time. +* Builds from the special feature branch and all other branches for 15 days, with a minimum of a single successful or partially successful build for each branch. + +The following example retention policy for a build definition +meets the above requirements: + +![define git retention policies](_img/define-git-retention-policies.png) + +When specifying custom policies for each definition, you cannot exceed the maximum limits set by administrator. + +

    Clean up pull request builds

    + +If you [protect your Git branches with pull request builds](../../../git/branch-policies.md#require-the-pull-request-to-build), then you can use retention policies to automatically delete the completed builds. To do it, add a policy that keeps a minimum of `0` builds with the following branch filter: + +``` +refs/pull/* +``` + +![retention-policy-for-pull-request-builds](_img/retention-policy-for-pull-request-builds.png) + +### TFVC and Subversion repositories + +For TFVC and Subversion [repository types](../../concepts/definitions/build/repository.md) you can modify a single policy with the same options shown above. + +### Policy order + +When the system is purging old builds, it evaluates each build against the policies in the order you have specified. You can drag and drop a policy lower or higher in the list to change this order. + +The "All" branches policy is automatically added as the last policy in the evaluation order to enforce the maximum limits for all other branches. + +![define git retention policy max shown in definition](_img/define-git-retention-policy-max-shown-in-definition.png) + +### What parts of the build get deleted + +When the retention policies mark a build for deletion, you can control which information related to the build is deleted: + +* Build record: You can choose to delete the entire build record or keep basic information about the build even after the build is deleted. +* Source label: If you label sources as part of the build, then you can choose to delete the tag (for Git) or the label (for TFVC) created by a build. +* Automated test results: You can choose to delete the automated test results associated with the build (for example, results published by the Publish Test Results build step). + +The following information is deleted when a build is deleted: + +* Logs +* [Published artifacts](../../tasks/utility/publish-build-artifacts.md) +* [Published symbols](../../tasks/build/index-sources-publish-symbols.md) + +### When are builds deleted + +#### VSTS + +Your retention policies are processed once per day. The timing of this process varies because we spread the work throughout the day for load balancing purposes. There is no option to change this process. + +#### TFS + +Your retention policies run every day at 3:00 A.M. UTC. There is no option to change this process. + +

    Release retention

    + +The release retention policies for a release definition determine how long a release +and the build linked to it are retained. Using these policies, you can control **how many days** you want to keep each release after it has been last modified or deployed and the **minimum number of releases** that should be retained for each definition. The retention timer on a release is reset every time a release is modified or deployed to an environment. The minimum number or releases to retain setting takes precedence over the number of days. For example, if you specify to retain a minimum of three releases, the most +recent three will be retained indefinitely - irrespective of the number of +days specified. However, you can manually delete these releases when you no longer require them. + +As an author of a release definition, you can customize retention policies for releases of your definition on the **Retention** tab. +You can also customize these policies on an [environment-by-environment basis](#environment-specific-retention). + +### Global release retention policy + +If you are using an on-premises Team Foundation Server, you can specify release retention policy defaults and maximums for a team project. You can also specify when releases are permanently destroyed (removed from the **Deleted** tab in the build explorer). + +If you are using VSTS, you can view but not change these settings for your team project. + +Global release retention policy settings can be managed from the **Release** settings of your team project: + +* VSTS: `https://{your_account}.visualstudio.com/{team_project}/_admin/_apps/hub/ms.vss-releaseManagement-web.release-project-admin-hub` +* On-premises: `https://{your_server}/tfs/{collection_name}/{team_project}/_admin/_apps/hub/ms.vss-releaseManagement-web.release-project-admin-hub` + +The **maximum retention policy** sets the upper limit for how long releases can be retained +for all release definitions. Authors of release definitions cannot +configure settings for their definitions beyond the values specified here. + +The **default retention policy** sets the default retention values for all the release definitions. Authors of build definitions can override these values. + +The **destruction policy** helps you keep the releases for a certain period of time after they are deleted. This policy cannot be overridden in individual release definitions. + +> In TFS, release retention management is restricted to specifying the number of days, and this is available only in Update 3 and later. + +### Environment-specific retention + +You may want to retain more releases that have been deployed to specific environments. +For example, your team may want to keep: + +* Releases deployed to Production environment for 60 days, with a minimum of three last deployed releases. +* Releases deployed to Pre-production environment for 15 days, with a minimum of one last deployed release. +* Releases deployed to QA environment for 30 days, with a minimum of two last deployed releases. +* Releases deployed to Dev environment for 10 days, with a minimum of one last deployed release. + +The following example retention policy for a release definition meets the above requirements: + +![Configuring the release retention setting for a release definition](_img/retention-policy-01.png) + +In this example, if a release that is deployed to Dev is not +promoted to QA for 10 days, it is a potential candidate for +deletion. However, if that same release is deployed to QA eight +days after being deployed to Dev, its retention timer is reset, +and it is retained in the system for another 30 days. + +When specifying custom policies per definition, you cannot exceed the maximum limits set by administrator. + +### Interaction between build and release retention + +The build linked to a release has its own retention policy, +which may be shorter than that of the release. If you want to retain +the build for the same period as the release, set the +**Retain build** checkbox for the appropriate environments. This +overrides the retention policy for the build, and ensures that the +artifacts are available if you need to redeploy that release. + +When you delete a release definition, delete a release, or when the +retention policy deletes a release automatically, the retention policy +for the associated build will determine when that build is deleted. + +> In TFS, interaction between build and release retention is available starting from TFS 2017. + +## Q&A + + + +### Are manual test results deleted? + +No + +### If I mark a build or a release to be retained indefinitely, does the retention policy still apply? + +No. Neither the definition's retention policy nor the maximum +limits set by the administrator are applied when you mark an +individual build or release to be retained indefinitely. +It will remain until you stop retaining it indefinitely. + +### How do I specify that builds deployed to production will be retained longer? + +Customize the retention policy on the release definition. Specify +the number of days that releases deployed to production must be +retained. In addition, indicate that builds associated with that +release are to be retained. This will override the build retention +policy. + +### I did not mark builds to be retained indefinitely. However, I see a large number of builds being retained. How can I prevent this? + +Builds that are deployed as part of releases are also governed by +the release retention policy. Customize the release retention +policy as explained above. + +### Are automated test results that are published as part of a release retained until the release is deleted? + +Test results published within an environment of a release are +associated with both the relese and the build. These test results +are retained as specified by the retention policy configured for +the build and for the test results. If you are not deploying Team +Foundation Build through Release Management, and are still +publishing test results, the retention of these results is +governed by the policy on test results, and is not linked to +retention of releases. + + + + + + diff --git a/docs/build-release/concepts/process/_img/add-phase.png b/docs/build-release/concepts/process/_img/add-phase.png new file mode 100644 index 00000000000..46871124422 Binary files /dev/null and b/docs/build-release/concepts/process/_img/add-phase.png differ diff --git a/docs/build-release/concepts/process/_img/conditional-phase.png b/docs/build-release/concepts/process/_img/conditional-phase.png new file mode 100644 index 00000000000..108897a4c69 Binary files /dev/null and b/docs/build-release/concepts/process/_img/conditional-phase.png differ diff --git a/docs/build-release/concepts/process/_img/depgroup-properties.png b/docs/build-release/concepts/process/_img/depgroup-properties.png new file mode 100644 index 00000000000..05440b3f8d5 Binary files /dev/null and b/docs/build-release/concepts/process/_img/depgroup-properties.png differ diff --git a/docs/build-release/concepts/process/_img/invoke-rest-api-task.png b/docs/build-release/concepts/process/_img/invoke-rest-api-task.png new file mode 100644 index 00000000000..967d6ff40d3 Binary files /dev/null and b/docs/build-release/concepts/process/_img/invoke-rest-api-task.png differ diff --git a/docs/build-release/concepts/process/_img/maninter-use-variables.png b/docs/build-release/concepts/process/_img/maninter-use-variables.png new file mode 100644 index 00000000000..7fb72e5b6c5 Binary files /dev/null and b/docs/build-release/concepts/process/_img/maninter-use-variables.png differ diff --git a/docs/build-release/concepts/process/_img/phases-01.png b/docs/build-release/concepts/process/_img/phases-01.png new file mode 100644 index 00000000000..ec2737e8c00 Binary files /dev/null and b/docs/build-release/concepts/process/_img/phases-01.png differ diff --git a/docs/build-release/concepts/process/_img/phases-02.png b/docs/build-release/concepts/process/_img/phases-02.png new file mode 100644 index 00000000000..90b53e36787 Binary files /dev/null and b/docs/build-release/concepts/process/_img/phases-02.png differ diff --git a/docs/build-release/concepts/process/_img/phases-03.png b/docs/build-release/concepts/process/_img/phases-03.png new file mode 100644 index 00000000000..50fe71450d1 Binary files /dev/null and b/docs/build-release/concepts/process/_img/phases-03.png differ diff --git a/docs/build-release/concepts/process/_img/phases-04.png b/docs/build-release/concepts/process/_img/phases-04.png new file mode 100644 index 00000000000..dcc561843da Binary files /dev/null and b/docs/build-release/concepts/process/_img/phases-04.png differ diff --git a/docs/build-release/concepts/process/_img/phases-05.png b/docs/build-release/concepts/process/_img/phases-05.png new file mode 100644 index 00000000000..8a36670a58c Binary files /dev/null and b/docs/build-release/concepts/process/_img/phases-05.png differ diff --git a/docs/build-release/concepts/process/_shared/task-run-built-in-conditions.md b/docs/build-release/concepts/process/_shared/task-run-built-in-conditions.md new file mode 100644 index 00000000000..96db2b8692d --- /dev/null +++ b/docs/build-release/concepts/process/_shared/task-run-built-in-conditions.md @@ -0,0 +1,7 @@ +* Only when all previous tasks have succeeded + +* Even if a previous task has failed, unless the build or release was canceled + +* Even if a previous task has failed, even if the build was canceled + +* Only when a previous task has failed diff --git a/docs/build-release/concepts/process/conditions.md b/docs/build-release/concepts/process/conditions.md new file mode 100644 index 00000000000..b0794fd5e8d --- /dev/null +++ b/docs/build-release/concepts/process/conditions.md @@ -0,0 +1,323 @@ +--- +title: Conditional task expressions +description: Write custom conditions for running your task in VSTS or Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: C79149CC-6E0D-4A39-B8D1-EB36C8D3AB89 +ms.manager: douge +ms.author: alewis +ms.date: 03/22/2017 +--- + +# Specify conditions for running a task + +**VSTS** + +Inside the **Control Options** of each task, and in the **Additional options** for a phase in a release definition, +you can specify the conditions under which the task or phase will run: + +[!INCLUDE [include](_shared/task-run-built-in-conditions.md)] +* Custom conditions + +## Enable a custom condition + +If the built-in conditions don't meet your needs, then you can specify **custom conditions**. + +Express the condition as a nested set of functions. The agent evaluates the innermost function and works its way out. The final result is a boolean value that determines if the task is run or not. Details on syntax are described below. + +Do any of your conditions make it possible for the task to run even after the build is canceled by a user? If so, then specify a reasonable value for **Build job cancel timeout in minutes** [in the options](../../concepts/definitions/build/options.md) so that these kinds of tasks have enough time to complete after the user clicks **Cancel**. + +## Examples + +### Run for the master branch, if succeeding + +``` +and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master')) +``` + +### Run if the branch is not master, if succeeding + +``` +and(succeeded(), ne(variables['Build.SourceBranch'], 'refs/heads/master')) +``` + +### Run for user topic branches, if succeeding + +``` +and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/heads/users/')) +``` + +### Run for continuous integration (CI) builds if succeeding + +``` +and(succeeded(), in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI')) +``` + +### Run if the build is run by a branch policy for a pull request, if failing + +``` +and(failed(), eq(variables['Build.Reason'], 'PullRequest')) +``` + +### Run if the build is scheduled, even if failing, even if canceled + +``` +and(always(), eq(variables['Build.Reason'], 'Schedule')) +``` + +> **Release.Artifacts.{artifact-alias}.SourceBranch** is equivalent to **Build.SourceBranch**. + +## Types + +### Boolean +`true` or `false` (ordinal case insensitive) + +### Null +Null is a special type that is returned from a dictionary miss only, e.g. (`variables['noSuch']`). There is no keyword for null, but you can test for it by using the implicit type casting described below. + +### Number +Starts with `-` `.` or `0-9`. Cannot contain `,`. + +### String +Must be single-quoted. For example: `'this is a string'`. + +To express a literal single-quote, escape it with a single quote. For example: `'It''s OK if they''re using contractions.'`. + +### Version +A version number with up to four segments. Must start with a number and contain two or three period (`.`) characters. For example: `1.2.3.4`. + +## Type Casting + +### Conversion chart +Detailed conversion rules are listed further below. + +| | | To | | | | | +| -------- | ----------- | ----------- | ----------- | ----------- | ----------- | ----------- | +| | | **Boolean** | **Null** | **Number** | **String** | **Version** | +| **From** | **Boolean** | - | - | Yes | Yes | - | +| | **Null** | Yes | - | Yes | Yes | - | +| | **Number** | Yes | - | - | Yes | Partial | +| | **String** | Yes | Partial | Partial | - | Partial | +| | **Version** | Yes | - | - | Yes | - | + +### Boolean to Number + +False =\> 0 + +True =\> 1 + +### Boolean to String + +False =\> 'False' + +True =\> 'True' + +### Null to Boolean + +=\> False + +### Null to Number + +=\> 0 + +### Null to String + +=\> Empty string + +### Number to Boolean + +0 =\> False + +Otherwise =\> True + +### Number to Version + +Must be greater than zero and must contain a non-zero decimal. Must be less than [Int32.MaxValue](https://msdn.microsoft.com/en-us/library/system.int32.maxvalue%28v=vs.110%29.aspx) (decimal component also). + +#### Number to String + +Converts the number to a string with no thousands separator and no decimal separator. + +### String to Boolean + +Empty string =\> False + +Otherwise =\> True + +### String to Null + +Empty string =\> Null + +Otherwise not convertible + +### String to Number + +Empty string =\> 0 + +Otherwise try-parse using [InvariantCulture](https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture%28v=vs.110%29.aspx) and the following rules: AllowDecimalPoint | AllowLeadingSign | AllowLeadingWhite | AllowThousands | AllowTrailingWhite. If try-parse fails, then not convertible. + +### String to Version + +Try-parse. Must contain Major and Minor component at minimum. If try-parse fails, then not convertible. + +### Version to Boolean + +=\> True + +### Version to String + +Major.Minor or Major.Minor.Build or Major.Minor.Build.Revision. + +## Variables + +Alias to reference a build variable. For example: + +* Index syntax: `variables['Build.SourceBranch']` + +* Property dereference syntax: `variables.Build.SourceBranch`. In order to use this syntax, the property name must: + + - Start with `a-Z` or `_` + + - Be followed by `a-Z` `0-9` or `_` + +Some of the more useful predefined variables include: + +* `Build.Reason` which you an use to check whether the build was the result of a [build trigger](../../concepts/definitions/build/triggers.md), a [Git PR affected by a branch policy](../../../git/branch-policies.md), or a [TFVC gated check-in](../../../tfvc/check-folder-controlled-by-gated-check-build-process.md). + +* `Build.SourceBranch` + +* `Release.Artifacts.{artifact-alias}.SourceBranch` + +For details on these and other variables, including predefined variables and their possible values, see [Build variables](../../concepts/definitions/build/variables.md) and [Release variables](../../concepts/definitions/release/variables.md). + +## Job status functions + +

    always

    +* Always evaluates True (even when canceled). Note: A critical failure may still prevent a task from running. For example, if getting sources failed. +* Min parameters: 0. Max parameters: 0 + +### canceled +* Evaluates True when `eq(variables['Agent.JobStatus'], 'Canceled')`. +* Min parameters: 0. Max parameters: 0 + +### failed +* Evaluates True when `eq(variables['Agent.JobStatus'], 'Failed')`. +* Min parameters: 0. Max parameters: 0 + +### succeeded +* Evaluates True when `in(variables['Agent.JobStatus'], 'Succeeded', 'PartiallySucceeded')` +* Min parameters: 0. Max parameters: 0 + +### succeededOrFailed +* Evaluates True when `in(variables['Agent.JobStatus'], 'Succeeded', 'PartiallySucceeded', 'Failed')` +* Min parameters: 0. Max parameters: 0 + +## General functions + +### and +* Evaluates True if all parameters are True +* Min parameters: 2. Max parameters: N +* Casts parameters to Boolean for evaluation +* Short-circuits after first False + +### contains +* Evaluates True if left parameter String contains right parameter +* Min parameters: 2. Max parameters: 2 +* Casts parameters to String for evaluation +* Performs ordinal ignore-case comparison + +### endsWith +* Evaluates True if left parameter String ends with right parameter +* Min parameters: 2. Max parameters: 2 +* Casts parameters to String for evaluation +* Performs ordinal ignore-case comparison + +### eq +* Evaluates True if parameters are equal +* Min parameters: 2. Max parameters: 2 +* Converts right parameter to match type of left parameter. Returns False if conversion fails. +* Ordinal ignore-case comparison for Strings + +### ge +* Evaluates True if left parameter is greater than or equal to the right parameter +* Min parameters: 2. Max parameters: 2 +* Converts right parameter to match type of left parameter. Errors if conversion fails. +* Ordinal ignore-case comparison for Strings + +### gt +* Evaluates True if left parameter is greater than the right parameter +* Min parameters: 2. Max parameters: 2 +* Converts right parameter to match type of left parameter. Errors if conversion fails. +* Ordinal ignore-case comparison for Strings + +### in +* Evaluates True if left parameter is equal to any right parameter +* Min parameters: 1. Max parameters: N +* Converts right parameters to match type of left parameter. Equality comparison evaluates False if conversion fails. +* Ordinal ignore-case comparison for Strings +* Short-circuits after first match + +### le +* Evaluates True if left parameter is less than or equal to the right parameter +* Min parameters: 2. Max parameters: 2 +* Converts right parameter to match type of left parameter. Errors if conversion fails. +* Ordinal ignore-case comparison for Strings + +### lt +* Evaluates True if left parameter is less than the right parameter +* Min parameters: 2. Max parameters: 2 +* Converts right parameter to match type of left parameter. Errors if conversion fails. +* Ordinal ignore-case comparison for Strings + +### ne +* Evaluates True if parameters are not equal +* Min parameters: 2. Max parameters: 2 +* Converts right parameter to match type of left parameter. Returns True if conversion fails. +* Ordinal ignore-case comparison for Strings + +### not +* Evaluates True if parameter is False +* Min parameters: 1. Max parameters: 1 +* Converts value to Boolean for evaluation + +### notIn +* Evaluates True if left parameter is not equal to any right parameter +* Min parameters: 1. Max parameters: N +* Converts right parameters to match type of left parameter. Equality comparison evaluates False if conversion fails. +* Ordinal ignore-case comparison for Strings +* Short-circuits after first match + +### or +* Evaluates True if any parameter is true +* Min parameters: 2. Max parameters: N +* Casts parameters to Boolean for evaluation +* Short-circuits after first True + +### startsWith +* Evaluates true if left parameter string starts with right parameter +* Min parameters: 2. Max parameters: 2 +* Casts parameters to String for evaluation +* Performs ordinal ignore-case comparison + +### xor +* Evaluates True if exactly one parameter is True +* Min parameters: 2. Max parameters: 2 +* Casts parameters to Boolean for evaluation + +## Q&A + + + +### What about string parsing and other operations? + +We might add these later. [Vote on user voice](https://visualstudio.uservoice.com/forums/330519-team-services) + +### I've got a condition that runs even when build was cancelled. Does this affect a build that I cancelled in the queue? + +No. If you cancel a build while it's in the queue, then the entire build is canceled, including tasks like this. + +### I've got a task condition that runs even when the deployment was canceled. How do I specify this? + +This scenario is not yet supported for release definitions. + + diff --git a/docs/build-release/concepts/process/phases.md b/docs/build-release/concepts/process/phases.md new file mode 100644 index 00000000000..3f5c8a2b3af --- /dev/null +++ b/docs/build-release/concepts/process/phases.md @@ -0,0 +1,320 @@ +--- +title: Build and Release Automation Phases in VSTS and TFS +description: Understand Build and Release Phases in Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.assetid: B05BCE88-73BA-463E-B35E-B54787631B3F +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Phases in Build and Release Management + +**TFS 2017 | VSTS** + +Tasks can run in different **phases**, which effectively represent different execution locations. + +By using different task phases in a build or release definition, you can: + +* Specify sets of tasks that will run on a specific agent or on the server, + and use different agent queues and agents for the tasks in separate phases. + +* Introduce a manual intervention task where deployment pauses while an + operator carries out manual processes or validates the state of the system + before continuing the deployment. + +* Switch off downloading of artifacts for sets of tasks that include + their own logic for accessing source artifacts, or that do not require access + to artifacts. This can reduce execution time and improve deployment efficiency. + +* Permit access to OAuth tokens for only the tasks that need to interact + with Visual Studio Team Services (VSTS) or Team Foundation Server (TFS). + +* Specify different execution timeouts for different sets of tasks to + maximize deployment performance and control. + +* Specify the conditions under which the tasks in the phase will execute; + for example, when a prevous phase has failed or when a [custom condition](conditions.md) + defined by an expression is true. + + ![Task phases schematic diagram](_img/phases-01.png) + +The task phases you can use are: + +* **[Agent phase](#agent-phase)**. In this phase, tasks are executed on the computer(s) that host the build and release agent. + +* **[Agentless phase](#server-phase)**. In this phase, tasks are orchestrated by and executed on VSTS + or TFS. An agentless phase does not require an agent + or any target computers. + +* **[Deployment group phase](#deployment-group-phase)**. In this phase, tasks are executed on the computer(s) defined in a + [deployment group](../definitions/release/deployment-groups/index.md), + each of which hosts the build and release agent. + +![Add a phase to a release definition](_img/add-phase.png) + +By default, tasks you add to a build definition or release definition run in a single default agent phase. +To add tasks to a specific phase when you have more than one phase in the definition, select the target phase +and then choose **+**. + +> **TFS 2015**: Features explained in this article are not available in TFS 2015. + + +## Agent phase + +An **agent phase** is a way of defining a sequence of tasks that will run on one or more agents. +At run time, one or more jobs are created to be run on agents that match the demands specified in the phase properties. + +![Specifying agent phase properties](_img/phases-03.png) + +You can configure the following properties for an agent phase: + +* **Display name:** The name displayed in the agent phase item in the task list. + +* **Queue:** Use this option to specify the agent queue + in which the jobs will run. In the case where multiple jobs are created, all the jobs run on agents within the same agent queue. + +* **Demands:** Use these settings to specify how an agent for + executing the tasks will be selected. In the case where multiple jobs are created, all the agents must have capabilities that satisfy the demands. + For more details, see [Capabilities](../agents/agents.md#capabilities). + +* **Skip download of artifacts:** When used in a release definition, you may choose to skip the + [download of artifacts](../definitions/release/artifacts.md#download) + during the job execution. Use this option if you want to implement + your own custom logic for downloading artifacts by using tasks, or if the tasks in a particular phase do not rely on the artifacts. + +* **Allow scripts to access OAuth token:** Use this option if you + want to allow tasks running in this phase access to the + current VSTS or TFS OAuth security token. + This is useful in many scenarios, such as when you need to + run a custom PowerShell script that invokes the REST APIs + on VSTS - perhaps to create a work item or query a build for information. + +* **Run this phase:** Use this option to run the tasks + in the phase only when specific [conditions](conditions.md) are met. Select a predefined + condition, or select "custom" and enter an [expression](conditions.md) that evaluates + to **true** or **false**. Nested expressions can be used, and the + expressions can access variables available in the release definition. + + ![Conditional phase execution option](_img/conditional-phase.png) + + +### Parallel and multiple execution using agent phases + +You can use multiple agents to run parallel jobs if you configure an agent phase +to be **Multiple executions** or **Execute on multiple agents**. +Here are some examples where multiple execution is appropriate: + +* **Multiple execution builds:** An agent phase can be used in a + build definition to build multiple configurations in parallel. For + example, you could build a C++ app for both debug and release + configurations on both x86 and x64 platforms. To run multiple jobs, + you identify a variable named a **multiplier**, and specify a list + of values for that multiplier. A separate job is run for each value + in the list. For example, you can run two parallel jobs if you + define a variable named **BuildConfiguration** with the value + `Debug,Release` and specify that variable to be used as a + multiplier in the build definition. When you identify two variables + to act as a multiplier, each with two values, you effectively + create four jobs, one for each combination of values of the two + variables. For more details and an example of multi-configuration + build, see [Visual Studio Build](../../tasks/build/visual-studio-build.md). + +* **Multiple execution deployments:** An agent phase can be used + in an environment of a release definition to run multiple deployment + jobs in parallel. For example, to configure your application to be + load balanced across a site in US and a site in Europe, you can + define a variable named **Location** with the value `US,Europe`, + and specify that variable to be used as a multiplier in the agent + phase of the environment. If two agents are available, both the + jobs will be run simultaneously - one with **Location = US**, and + another with **Location = Europe**. If only one agent is available, + the first job is run, followed by the second job. When a multiplier + results in many jobs being created in parallel, you can also specify + the maximum number of agents that can be used for parallelism. For + example, if **Location** has ten values, you can restrict to five + sites being deployed in parallel by specifying **5** for the + maximum number of agents. + + > Multiple execution deployments are not possible with Release Management in TFS 2015. + +* **Multiple execution testing:** An agent phase can be used in an + environment of a release definition to run a set of tests in + parallel - once for each test configuration. For example, to run a + suite of web tests, once for each browser, you can define a variable + named **Browser** with the value `IE,Chrome,Edge,Firefox` and + specify that variable to be used as a multiplier. + As the [agent demands](../agents/agents.md#capabilities) are specified only once for an agent phase, all agents + should be pre-installed with all the browsers. As with multiple executions + deployment, you can specify the maximum number of agents that can + be used at the same time for multi-configuration testing. + + > Multi-configuration testing is only possible with Release definitions in TFS 2017 and VSTS. It is not possible with Build definitions. + +To use multi-configuration or parallel deployment, set the options in the agent phase properties panel: + +* **Parallelism:** If you have installed + multiple agents, you can specify how the tasks will run in parallel + on these agents. Select **Multiple executions** or **Execute on multiple agents** + and specify the number of agents to use. If you select **Multiple executions**, specify + details of the [multipliers](#multipliers) to use. + +* **Timeout:** Use this option if you + want to specify the timeout in minutes for jobs in this phase. A zero + value for this option means that the timeout is effectively + infinite and so, by default, jobs run until they complete or fail. + You can also set the timeout for each task individually - + see [task control options](tasks.md#controloptions). + +![Configuring multiple executions parallelism](_img/phases-04.png) + + +To use **Multipliers** for deployment, you must: + +* Define one or more [variables](../definitions/release/variables.md) + on the **Variables** tab of the definition or in a [variable group](../library/variable-groups.md). + Each variable, known in this context as a _multiplier_ variable, + must be defined as a comma-delimited list of the values you want + to pass individualy to the agents. + +* Enter the name of the multiplier variable, without the **$** and parentheses, as the + value of the **Multipliers** parameter. + +* If you want to execute the phase for more than one multiplier variable, enter + the variable names as a comma-delimited list - omitting the **$** and parentheses + for each one. + +* If you want to limit the number of agents used during the deployment to a + number less than you have configured for your account, enter that value as the + **Maximum number of agents** parameter. + +For example, you might define two variables named **Location** and **Browser** as follows:: + +* **Location** = `US,Europe` +* **Browser** = `IE,Chrome,Edge,Firefox` + +The following configuration will execute the deployment eight times using +a maximum of four agents at any one time: + +* **Multipliers** = `Location,Browser` +* **Maximum number of agents** = `4` + + +## Agentless phase + +Use an agentless phase in a release definition to run tasks that do +not require an agent, and execute entirely on the VSTS or TFS. +Only a few tasks, such as the [Manual Intervention](#maninterv) and [Invoke REST API](#invokeapi) tasks, +are supported in an agentless phase at present. The properties of +an agentless phase are similar to those of the [agent phase](#agent-props). + +![Agentless phase properties](_img/phases-05.png) + +> Agentless phases and manual intervention tasks only work in release definitions in VSTS and TFS 2017. + + +### The Manual Intervention task + +The **Manual Intervention** task does not perform deployment actions directly. +Instead, it allows you to pause an active deployment within an environment, typically to perform some +manual steps or actions, and then continue the automated deployment steps. + +The **Manual Intervention** task configuration includes an **Instructions** parameter that +can be used to provide related information, or to specify the manual steps +the user should execute during the Agentless phase. You can configure the task to +send email notifications to users and user groups when it is awaiting intervention, +and specify the automatic response (reject or resume the deployment) after a configurable +timeout occurs. + +![Configuring a Manual Intervention task](_img/maninter-use-variables.png) + +> You can use built-in and custom variables to generate portions of your instructions. + +When the Manual Intervention task is activated during a deployment, it sets +the deployment state to **IN PROGRESS** and displays +a message bar containing a link that opens the +Manual Intervention dialog containing the instructions. +After carrying out the manual steps, the administrator +or user can choose to resume the deployment, or reject it. Users with **Manage deployment** permission on the environment can resume or reject the manual intervention. + + +### The Invoke REST API task + +The **Invoke REST API task** task does not perform deployment actions directly. +Instead, it allows you to invoke any generic HTTP REST API as part of the automated +pipeline and, optionally, wait for it to be completed. For example, +it can be used to invoke specific processing with an Azure function. + +![Configuring an Invoke REST API task](_img/invoke-rest-api-task.png) + +## Deployment group phase + +Deployment groups make it easy to define groups of target servers for deployment, +and install the required agent on each one. Tasks that you define in a +deployment group phase run on some or all of the target servers, depending on +the arguments you specify for the tasks and the phase itself. + +You can select specific sets of servers from a deployment group to receive +the deployment by specifying the machine tags that you have defined for each +server in the deployment group. For more details, see [Deployment groups](../definitions/release/deployment-groups/index.md). +You can also use the slider control to specify the proportion of the target servers that the process should +deploy to at the same time. This ensures that the app running on these servers is +capable of handling requests while the deployment is taking place. + +![Dependency group properties](_img/depgroup-properties.png) + +The timeout and additional options of a deployment group phase are the same as those of the [agent phase](#agent-props). + +## Multiple phases + +You can add multiple phases to a release definition, and then add +tasks to each one by selecting the target phase for the new tasks. + +> Multiple phases can only be used in Release Management in VSTS and TFS 2017. + +For example, the definition shown below divides the overall release +execution into separate execution phases by using two agent phases +and an agentless phase. + +![Configuring a manual intervention step](_img/phases-02.png) + +In the example above: + +1. The tasks in the first phase of the release run on an agent + and, after this phase is complete, the agent is released. + +1. The agentless phase contains a Manual Intervention task + that runs on the VSTS or TFS. + It does not execute on, or require, an agent or any target servers. + The Manual Intervention task displays its message and waits for a + "resume" or "reject" response from the user. In this example, if + the configured timeout is reached, the task will + automatically reject the deployment (set the timeout in the control options section to zero if + you do not want an automated response to be generated). + +1. If the release is resumed, tasks in the third phase run - + possibly on a different agent. If the release is rejected, + this phase does not run and the release is marked as failed. + +It's important to understand some of the consequences of +phased execution: + +* The artifacts are downloaded to the agent at the start of + every agent phase because these phases may use different + agents. You should not assume that the state from an earlier + phase is available during subsequent phases. + +* The **Continue on Error** and **Always run** options for + tasks in each phase do not have any effect on tasks in + subsequent phases of the release. For example, setting + **Always run** on a task at the end of the first phase will + not guarantee that tasks in subsequent phases will run. + +## Related topics + +* [Tasks](tasks.md) +* [Task groups](../library/task-groups.md) +* [Specify conditions for running a task](conditions.md) + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/process/tasks.md b/docs/build-release/concepts/process/tasks.md new file mode 100644 index 00000000000..4e305edfdbc --- /dev/null +++ b/docs/build-release/concepts/process/tasks.md @@ -0,0 +1,186 @@ +--- +title: Build and Release Tasks in VSTS and TFS +description: Understand Build and Release tasks in Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.assetid: 3293E200-6B8C-479D-9EA0-B3E82CE1450F +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: alewis +ms.date: 4/19/2017 +--- + +# Tasks for Build and Release + +**TFS 2015 | TFS 2017 | VSTS** + +A **task** is the building block for defining automation in a +build definition, or in an environment of a release definition. +A task is simply a packaged script or procedure that has been +abstracted with a set of inputs. We provide some [built-in tasks](../../tasks/index.md) +to enable fundamental build and deployment scenarios. + +In addition, [Visual Studio Marketplace](https://marketplace.visualstudio.com/VSTS) +offers a number of extensions; each of which, when installed to your +account or collection, extends the task catalog with one or more tasks. +Furthermore, you can write your own [custom extensions](../../../integrate/index.md) +to add tasks to your account in VSTS or your collection in TFS. + +When you add a task to your build or release definition, it may also add a set of **demands** to the definition. The demands define the prerequisites that must be installed on the [agent](../agents/agents.md) for the task to run. When you run the build or deployment, an agent that meets these demands will be chosen. + +When you queue a build or a deployment, all the tasks are run in sequence, one after the other, on an agent. To run the same set of tasks in parallel on multiple agents, or to run some tasks without using an agent, see [phases](phases.md). + + +## Task versions + +Each task has a **Version** selector that enables you to specify the major version of the task used in your +build or deployment. This can help to prevent issues when new versions of a task are released. +Tasks are typically backwards compatible, but in some scenarios you may +encounter unpredictable errors when a task is automatically updated. + +When a new minor version is released (for example, 1.2 to 1.3), your build or release +will automatically use the new version. However, if a new major version is released +(for example 2.0), your build or release will continue to use the major version you specified +until you edit the definition and manually change to the new major version. +The build or release log will include an alert that a new major version is available. + +**Notes:** + +* If you select a preview version (such as **1.\* Preview**), be aware that this + version is still under development and might have known issues. + +* If you change the version and have problems with your builds, you can revert the definition change from the **History** tab. + The ability to restore to an older version of a release definition is not currently available. You must manually revert the changes to the release definition, then save the definition. + +* Consider cloning the definition and testing the cloned definition with the new major task version. + + +## Task control options + +Each task offers you some **Control Options**. + +### Enabled + +Clear this check box to disable a task. This is useful +when you want to temporarily take task out of the process for testing or for specific deployments. + +> [!TIP] +> You can also right-click the task to toggle this setting. + +### Timeout + +The timeout for this task in minutes. The default is zero (infinite timeout). +Setting a value other than zero overrides the setting for the parent task phase. + +### VSTS options + +#### Continue on error (partially successful) + +Select this option if you want subsequent tasks in the same phase to possibly run even if this task fails. The build or deployment will be no better than partially successful. Whether subsequent tasks run depends on the **Run this task** setting. + +#### Run this task + +Select the condition for running this task: + +[!INCLUDE [include](_shared/task-run-built-in-conditions.md)] +* [Custom conditions](conditions.md) + +> [!NOTE] +> If you're running tasks in cases when the build is canceled, then make sure you specify sufficient time for these tasks to run the [definition options](../../concepts/definitions/build/options.md#job-cancel-timeout). + +### TFS 2015 and TFS 2017 options + +#### Continue on error (partially successful) + +Select this option if you want subsequent tasks in the same phase to run even if this task fails. The build or deployment will be no better than partially successful. + +#### Always run + +Select this check box if you want the task to run even if the build or deployment is failing. + +

    Build tool installers (VSTS)

    + +> **VSTS preview feature** +> +> To use this capability you must be working on VSTS and enable the **Task tool installers** [preview feature](../../../collaborate/preview-features.md) for your account. + +Tool installers enable your build process to install and control your dependencies. Specifically, you can: + +* Install a tool or runtime on the fly (even on [hosted agents](../agents/hosted.md)) just in time for your CI build. + +* Validate your app or library against multiple versions of a dependency such as Node.js. + +For example, you can set up your build process to run and validate your app for multiple versions of Node.js. + +### Example: Test and validate your app on multiple versions of Node.js + +> [!TIP] +> Want a visual walkthrough? See [our April 19 news release](../../archive/news/2017.md#april-19). + +[Create a new build definition](../../actions/ci-cd-part-1.md) (start with an empty process) to try this out. + +#### Tasks tab + +Add these tasks: + +![icon](../../tasks/tool/_img/node.png) Tool: Node Installer + +* Version Spec: + + ``` +$(NodeVersionSpec) +``` + +![icon](../../tasks/utility/_img/command-line.png) Utility: Command Line + +* Tool (if you're running on a Windows agent) + ``` +where +``` + +* Tool (if you're running on an OSX or Linux agent) + ``` +which +``` + +* Arguments + ``` +node +``` + +#### Variables tab + +On the [Variables tab](../../concepts/definitions/build/variables.md) define this variable: + +|Name|Value|Settable at queue time| +|-|-|-| +|```NodeVersionSpec```|```6.x, 7.x```|Selected| + +#### Options tab + +On the [Options tab](../../concepts/definitions/build/options.md): + +0. Enable **Multi-configuration**. + +0. Specify **Multipliers**: + + ``` +NodeVersionSpec +``` + +0. (Optional) Select **Parallel** if you have multiple build agents and want to run your builds in parallel. + +#### Save & queue + +Click **Save & queue**. Observe how two builds are run. The [Node Tool Installer](../../tasks/tool/node-js.md) downloads each of the Node.js versions if they are not already on the agent. The [Command Line](../../tasks/utility/command-line.md) task logs the location of the Node.js version on disk. + +### Tool installer tasks + +For a list of our tool installer tasks, see [Tool installer tasks](../../tasks/index.md#tool). + +## Related topics + +* [Task phases](phases.md) +* [Task groups](../library/task-groups.md) +* [Built-in task catalog](../../tasks/index.md) + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/concepts/releases/_img/release-deploy.png b/docs/build-release/concepts/releases/_img/release-deploy.png new file mode 100644 index 00000000000..afd82154da7 Binary files /dev/null and b/docs/build-release/concepts/releases/_img/release-deploy.png differ diff --git a/docs/build-release/concepts/releases/index.md b/docs/build-release/concepts/releases/index.md new file mode 100644 index 00000000000..27199d431ba --- /dev/null +++ b/docs/build-release/concepts/releases/index.md @@ -0,0 +1,83 @@ +--- +title: Releases in VSTS and Team Foundation Server +description: Understand releases in Release Management for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 2FF35C3B-FBF9-407F-8467-2D336973E63C +ms.manager: douge +ms.author: ahomer +ms.date: 02/16/2017 +--- + +# Releases in Release Management + +[!INCLUDE [version-rm-dev14](../../_shared/version-rm-dev14.md)] + +A **release** is the package or container that holds a versioned set of artifacts +specified in a [release definition](../definitions/release/index.md). +It includes a snapshot of all the information required to carry out all the tasks +and actions in the release definition, such as the +[environments](../definitions/release/environments.md), +the task steps for each one, the values of task parameters +and variables, and the release policies such as triggers, approvers, and release +queuing options. There can be multiple releases from one released definition, and information +about each one is stored and displayed in Release Management for the specified +[retention period](../policies/retention.md#release). + +A **deployment** is the action of running the [tasks](../process/tasks.md) +for one environment, which results in the application +[artifacts](../definitions/release/artifacts.md) +being deployed, tests being run, and whatever other +actions are specified for that environment. Initiating a release +starts each deployment based on the settings and policies defined in the original +release definition. There can be multiple deployments of each release even for one environment. +When a deployment of a release fails for an environment, you can redeploy the same release +to that environment. + +The following schematic shows the relationship between release definitions, releases, and deployments. + +![Relationship between release definitions, releases, and deployments](_img/release-deploy.png) + +Releases (and, in some cases, draft releases) can be created from a release definition in several ways: + +* By a [continuous deployment trigger](../definitions/release/triggers.md) + that creates a release when a new version of the source build artifacts is available. + +* By using the **Release** command in the UI to create a release manually from the + the [**Releases**](../../actions/create-deploy-releases.md#create-from-release) tab or the [**Builds**](../../actions/create-deploy-releases.md#create-from-build) tab. + +* By sending a command over the network to the [REST interface](../../../integrate/index.md). + +**However**, the action of creating a release **_does not_** mean it will automatically +or immediately start a deployment. For example: + +* There may be [deployment triggers](../definitions/release/triggers.md) + defined for an environment, which force the deployment to wait; this could be for a manual + deployment, until a scheduled day + and time, or for successful deployment to another environment. + +* A deployment started manually from the **[Deploy](../../actions/create-deploy-releases.md#deploy-command)** command in the UI, + or from a network command sent to the [REST interface](../../../integrate/index.md), may + specify a final target environment other than the last environment in a release pipeline. + For example, it may specify that the release is deployed only as far as the QA environment + and not to the production environment. + +* There may be [queuing policies](../definitions/release/environments.md#queuing-policies) + defined for an environment, which specify which of multiple deployments will occur, + or the order in which releases are deployed. + +* There may be [pre-deployment approvers](../definitions/release/environments.md#approvals) + defined for an environment, and the deployment will not occur until all + necessary approvals have been granted. + +* Approvers may defer the release to an environment until a specified date and time using a + [scheduled trigger](../definitions/release/triggers.md#env-triggers). + +## See also + +* [Create and deploy a release](../../actions/create-deploy-releases.md) +* [View and manage releases](../../actions/view-manage-releases.md) +* [Monitor releases and debug deployment issues](../../actions/debug-deployment-issues.md) +* [Work with release definitions](../../actions/work-with-release-definitions.md) + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/index.md b/docs/build-release/index.md new file mode 100644 index 00000000000..04aa1d77bc8 --- /dev/null +++ b/docs/build-release/index.md @@ -0,0 +1,53 @@ +--- +title: CI/CD index to content | VSTS & TFS +description: Learn how to configure CI/CD for the app and platform of your choice. Tutorials, references, and other documentation. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 00f4ed452-fbb8-45f9-8f0a-343702aac5b8 +ms.manager: douge +ms.author: kaelli +ms.date: 07/20/2017 +layout: LandingPage +--- + +# Build and Release + +VSTS and Team Foundation Server help you implement a highly customizable continuous integration (CI) and deployment (CD) pipeline for your .NET, Java, Node, PHP, or Python apps. Tutorials, references, and other documentation show you how to configure and manage CI/CD for the app and platform of your choice. + +## 5-Minute Quickstarts + +Learn how to build your app. + + + + +Learn how to deploy your app. + + + +Learn how to test your app. + + + +## Step-by-Step Tutorials + +* [CI builds for Git in VSTS](actions/ci-build-git.md) +* [Set up multi-stage release](actions/define-multistage-release-process.md) + +## Concepts + +- [Release definitions](concepts/definitions/release/index.md) +- [Build and release agents](concepts/agents/agents.md) +- [Build and release tasks](concepts/process/tasks.md) +- [Licensing and build and release pipelines](concepts/licensing/concurrent-pipelines-ts.md) + +## Videos + +[![Zero to DevOps](../build-release/_img/index/zero-to-devops-video.png)](https://channel9.msdn.com/events/Visual-Studio/Visual-Studio-2017-Launch/190) + +## Resources + +- [What is Continuous Integration?](https://www.visualstudio.com/learn/what-is-continuous-integration/) +- [What is Continuous Delivery?](https://www.visualstudio.com/learn/what-is-continuous-delivery/) +- [What is DevOps?](https://www.visualstudio.com/learn/what-is-devops/) +- [Build and release Marketplace extensions](https://marketplace.visualstudio.com/search?target=VSTS&category=Build%20and%20release&sortBy=Downloads) diff --git a/docs/build-release/overview-azure.md b/docs/build-release/overview-azure.md new file mode 100644 index 00000000000..73e08e8d0d9 --- /dev/null +++ b/docs/build-release/overview-azure.md @@ -0,0 +1,39 @@ +--- +title: Deploy to Azure index to content | Microsoft Docs +description: Learn how to deploy to Azure using VSTS. Tutorials, references, and other documentation. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 00f4ed452-fbb8-45f9-8f0a-343702aac5b8 +ms.manager: douge +ms.author: kaelli +ms.date: 07/20/2017 +--- + +# Deploy to Azure + +Visual Studio Team Services (VSTS) is Microsoft's DevOps solution for Azure. The Build and Release services provide streamlined experiences to deploy your apps to one of Azure's many services. These services provide a continuous delivery solution if your code is managed in GitHub, VSTS Git or Team Foundation Version Control, or in one of the other Git servers. + +## Web apps + +Azure web apps enable you to build and host web applications in the programming language of your choice without managing infrastructure. They offer auto-scaling and high availability and support both Windows and Linux. You can start directly from the Azure portal and set up an entire pipeline for your web app. You can then customize the build and release definitions in VSTS to meet the needs of your application. + +> [!div class="nextstepaction"] +> [Build and Deploy to Web Apps](apps/cd/azure/aspnet-core-to-azure-webapp.md) + +## Virtual machines + +Azure virtual machines provide on-demand, high-scale, secure, virtualized infrastructure using Windows, Red Hat, Ubuntu, or another Linux distribution of your choice. If you develop an application that runs on virtual machines, then VSTS has the tools to automate deployment of your app. You group the virtual machines in Azure into a deployment group in VSTS, and then set up a release definition to deploy to that group of virtual machines. You can also configure rolling deployment to ensure zero downtime for your customers. + +> [!div class="nextstepaction"] +> [Deploy to Windows VMs](apps/cd/deploy-webdeploy-iis-deploygroups.md) + +## Web apps for containers + +Azure web apps for containers offer the fastest and simplest way for you run a container instance in Azure. VSTS offers the simplest way for you to set up and track the continuous delivery of your container application. You configure your build process in VSTS to automatically publish a container image, and then your release process to automatically deploy your container image to an Azure web app. Furthermore, if you develop a ASP.NET Core application in Visual Studio, you can set up the entire VSTS build and release pipeline from Visual Studio IDE. + +> [!div class="nextstepaction"] +> [CI/CD to Containers](apps/cd/deploy-docker-webapp.md) + +## And more + +The Build and Release services in VSTS provide a number of tasks to provision your Azure infrastructure and to deploy your app to services such as Service Fabric or Kubernetes. Explore these possibilities using the various How-to topics in this documentation. diff --git a/docs/build-release/overview.md b/docs/build-release/overview.md new file mode 100644 index 00000000000..9664a5be53d --- /dev/null +++ b/docs/build-release/overview.md @@ -0,0 +1,37 @@ +--- +title: Overview of Build and Release | VSTS & TFS +description: Build and deploy your app using Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: B1233296-C583-4F2E-981C-82D6A39CFEE4 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Build and Release in VSTS and TFS + +Visual Studio Team Services (VSTS) is a collection of hosted DevOps services for application developers. Team Foundation Server (TFS) is the on-premises version of VSTS that you can install and manage on your own servers. Build and Release are two of the DevOps services in VSTS and TFS that help you manage continuous integration and delivery of your applications. + +Continuous Integration (CI) is the practice used by development teams to automate the merging and testing of code. Implementing CI helps to catch bugs early in the development cycle, which makes them less expensive to fix. Automated tests execute as part of the CI process to ensure quality. Artifacts are produced from CI systems and fed to release pipelines to drive frequent deployments. The Build service in VSTS and TFS helps you set up and manage CI for your applications. + +Continuous Delivery (CD) is a process by which code is built, tested, and deployed to one or more test and production environments. Deploying and testing in multiple environments drives quality. CI systems produce the deployable artifacts including infrastructure and apps. Automated release pipelines consume these artifacts to release new versions and fixes to existing systems. Monitoring and alerting systems run continually to drive visibility into the entire CD process. The Release service in VSTS and TFS helps you set up and manage CD for your applications. + +## Version control systems + +The starting point for configuring CI and CD for your applications is to have your source code in a version control system. VSTS and TFS support two forms of version control - Git and Team Foundation Version Control. The Build service integrates with both of these version control systems. Once you have configured CI, any changes you push to your version control repository will be automatically built and validated. You can also manage your source code in Subversion, Bitbucket, GitHub, or any other Git repository. The Build service integrates with all of these version control systems. + +## Application types + +To configure CI, you create a build definition. A build definition is a representation of the automation process that you want to run to build and test your application. The automation process is defined as a collection of tasks. VSTS and TFS have a number of tasks to build and test your application. For example, tasks exist to build .Net, Java, Node, Android, Xcode, and C++ applications. Similarly, there are tasks to run tests using a number of testing frameworks and services. You can also run command line, PowerShell, or Shell scripts in your automation. + +## Deployment targets + +Once you have continuous integration in place, the next step is to create a release definition to automate the deployment of your application to one or more environments. This automation process is again defined as a collection of tasks. VSTS and TFS support deploying your application to virtual machines, containers, on-premises and cloud platforms, or PaaS services. You can also publish your mobile application to a store. + +## Package formats + +If your goal is to produce packages that can be consumed by others, VSTS has a built-in package management repository. You can package and publish your application bits as NuGet, NPM, or Maven packages into the built-in repository or into any other package management repository of your choice. + +In the various topics covered in this documentation, you will explore how to configure CI for the version control repository and development language of your choice, configure CD to the deployment target of your choice, and how to publish packages in the packaging format of your choice. diff --git a/docs/build-release/packages/_img/assembly_info.png b/docs/build-release/packages/_img/assembly_info.png new file mode 100644 index 00000000000..f57f7d00b37 Binary files /dev/null and b/docs/build-release/packages/_img/assembly_info.png differ diff --git a/docs/build-release/packages/_img/create-packages-in-team-build.png b/docs/build-release/packages/_img/create-packages-in-team-build.png new file mode 100644 index 00000000000..d2b0ff87222 Binary files /dev/null and b/docs/build-release/packages/_img/create-packages-in-team-build.png differ diff --git a/docs/build-release/packages/_img/create-packages-in-team-build.snag b/docs/build-release/packages/_img/create-packages-in-team-build.snag new file mode 100644 index 00000000000..6073429fdc1 Binary files /dev/null and b/docs/build-release/packages/_img/create-packages-in-team-build.snag differ diff --git a/docs/build-release/packages/_img/jenkins_addcreds.png b/docs/build-release/packages/_img/jenkins_addcreds.png new file mode 100644 index 00000000000..87bab8a3fd0 Binary files /dev/null and b/docs/build-release/packages/_img/jenkins_addcreds.png differ diff --git a/docs/build-release/packages/_img/jenkins_build_environment.png b/docs/build-release/packages/_img/jenkins_build_environment.png new file mode 100644 index 00000000000..3dc03a36f11 Binary files /dev/null and b/docs/build-release/packages/_img/jenkins_build_environment.png differ diff --git a/docs/build-release/packages/_img/jenkins_build_steps.png b/docs/build-release/packages/_img/jenkins_build_steps.png new file mode 100644 index 00000000000..785b76f5f96 Binary files /dev/null and b/docs/build-release/packages/_img/jenkins_build_steps.png differ diff --git a/docs/build-release/packages/_img/jenkins_new.png b/docs/build-release/packages/_img/jenkins_new.png new file mode 100644 index 00000000000..056c6f53e91 Binary files /dev/null and b/docs/build-release/packages/_img/jenkins_new.png differ diff --git a/docs/build-release/packages/_img/jenkins_push.png b/docs/build-release/packages/_img/jenkins_push.png new file mode 100644 index 00000000000..4fecd972ca5 Binary files /dev/null and b/docs/build-release/packages/_img/jenkins_push.png differ diff --git a/docs/build-release/packages/_img/mavenauthtoken.png b/docs/build-release/packages/_img/mavenauthtoken.png new file mode 100644 index 00000000000..fff61b79d04 Binary files /dev/null and b/docs/build-release/packages/_img/mavenauthtoken.png differ diff --git a/docs/build-release/packages/_img/nugetconfig.png b/docs/build-release/packages/_img/nugetconfig.png new file mode 100644 index 00000000000..448c19fdc02 Binary files /dev/null and b/docs/build-release/packages/_img/nugetconfig.png differ diff --git a/docs/build-release/packages/_img/publish-packages-from-team-build.png b/docs/build-release/packages/_img/publish-packages-from-team-build.png new file mode 100644 index 00000000000..4a03cee4b83 Binary files /dev/null and b/docs/build-release/packages/_img/publish-packages-from-team-build.png differ diff --git a/docs/build-release/packages/_img/publish-packages-from-team-build.snag b/docs/build-release/packages/_img/publish-packages-from-team-build.snag new file mode 100644 index 00000000000..7dca93e774a Binary files /dev/null and b/docs/build-release/packages/_img/publish-packages-from-team-build.snag differ diff --git a/docs/build-release/packages/_img/restore-pkgs-on-build.png b/docs/build-release/packages/_img/restore-pkgs-on-build.png new file mode 100644 index 00000000000..e20562a8881 Binary files /dev/null and b/docs/build-release/packages/_img/restore-pkgs-on-build.png differ diff --git a/docs/build-release/packages/_img/restore-pkgs-on-build.snag b/docs/build-release/packages/_img/restore-pkgs-on-build.snag new file mode 100644 index 00000000000..a5dee075b4b Binary files /dev/null and b/docs/build-release/packages/_img/restore-pkgs-on-build.snag differ diff --git a/docs/build-release/packages/_img/team-build-npm-install.png b/docs/build-release/packages/_img/team-build-npm-install.png new file mode 100644 index 00000000000..a57a09b1098 Binary files /dev/null and b/docs/build-release/packages/_img/team-build-npm-install.png differ diff --git a/docs/build-release/packages/_img/team-build-npm-publish.png b/docs/build-release/packages/_img/team-build-npm-publish.png new file mode 100644 index 00000000000..ab73e9e967e Binary files /dev/null and b/docs/build-release/packages/_img/team-build-npm-publish.png differ diff --git a/docs/build-release/packages/jenkins.md b/docs/build-release/packages/jenkins.md new file mode 100644 index 00000000000..5931fd8648f --- /dev/null +++ b/docs/build-release/packages/jenkins.md @@ -0,0 +1,110 @@ +--- +title: Use Jenkins with VSTS to publish packages of binary components +description: Working with feeds in Jenkins-CI +ms.assetid: FC3EC349-1F9B-42A7-B523-495F21BC73F6 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: amullans +ms.date: 08/10/2016 +--- + +# Use Jenkins to restore and publish packages + +**Team Services | TFS 2017** + +Visual Studio Team Services's package management works with the continuous integration tools your team already uses. +In this [Jenkins](http://jenkins-ci.org/) walkthrough, you'll create a NuGet package and publish it to a VSTS feed. +If you need help on Jenkins setup, you can learn more on [the Jenkins wiki](https://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins). + + +## Setup + +This walkthrough uses Jenkins 1.635 running on Windows 10. +The walkthrough is simple, so any recent Jenkins and Windows versions should work. + +Ensure the following Jenkins plugins are enabled: +* [MSBuild 1.24](http://wiki.jenkins-ci.org/display/JENKINS/MSBuild+Plugin) +* [Git 2.4.0](http://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin) +* [Git Client 1.19.0](http://wiki.jenkins-ci.org/display/JENKINS/Git+Client+Plugin) +* [Credentials Binding plugin 1.6](http://wiki.jenkins-ci.org/display/JENKINS/Credentials+Binding+Plugin) + +Some of these plugins are enabled by default. +Others you will need to install by using Jenkins's "Manage Plugins" feature. + +### The example project + +The sample project is a simple shared library written in C#. +* To follow along with this walkthrough, create a new C# Class Library solution in Visual Studio 2015. +* Name the solution "FabrikamLibrary" and uncheck the **Create directory for solution** checkbox. +* On the FabrikamLibrary project's context menu, choose **Properties**, then choose **Assembly Information**. +* Edit the description and company fields. Now generating a NuGet package is easier. + +![Update assembly info to supply a description and company](_img/assembly_info.png) +* Check the new solution into a Git repo where your Jenkins server can access it later. + + +## Add the Team Services NuGet tools to your repo + +The easiest way to use the Team Services NuGet service is by adding the [Microsoft.VisualStudio.Services.NuGet.Bootstrap package](/vsts/package/nuget/bootstrap-nuget) to your project. + +## Create a package from your project + +*Whenever you work from a command line, run `init.cmd` first. This sets up your environment to allow you to work with nuget.exe and the Team Services NuGet service.* + +* Change into the directory containing FabrikamLibrary.csproj. +* Run the command `nuget spec` to create the file FabrikamLibrary.nuspec, which defines how your NuGet package builds. +* Edit FabrikamLibrary.nuspec to remove the boilerplate tags ``, ``, and ``. Change the tags from `Tag1 Tag2` to `fabrikam`. +* Ensure that you can build the package using the command `nuget pack FabrikamLibrary.csproj`. Note, you should target the .csproj (project) file, not the NuSpec file. +* A file called FabrikamLibrary.1.0.0.0.nupkg will be produced. + + +## Set up a feed in Team Services and add it to your project +* [Create a feed](/vsts/package/feeds/create-feed) in your Team Services account called *MyGreatFeed*. Since you're the owner of the feed, you will automatically be able to push packages to it. +* Add the URL for the feed you just generated to the nuget.config in the root of your repo. + * Find the `` section of nuget.config. + * Just before ``, add a line using this template: ``. Change `{feed_url}` to the URL of your feed. + * Commit this change to your repo. + +![Add your feed URL to nuget.config](_img/nugetconfig.png) +* [Generate a PAT (personal access token)](https://www.visualstudio.com/en-us/news/2015/2015-jul-7-vso) for your user account. This PAT will allow the Jenkins build process to authenticate to VSTS as you, so be sure to protect your PAT like a password. +* Save your feed URL and PAT to a text file for use later in the walkthrough. + + +## Create a build definition in Jenkins + +* Ensure you have the [correct plugins installed in Jenkins](#setup). +* This will be a Freestyle project. Call it "Fabrikam.Walkthrough". + +![New Jenkins build definition](_img/jenkins_new.png) +* Under Source Code Management, set the build to use **Git** and select your Git repo. +* Under Build Environment, select the **Use secret text(s) or file(s)** option. + * Add a new **Username and password (separated)** binding. + * Set the **Username Variable** to "FEEDUSER" and the **Password Variable** to "FEEDPASS". These are the environment variables Jenkins will fill in with your credentials when the build runs. + * Choose the **Add** button to create a new username and password credential in Jenkins. + * Set the **username** to "token" and the **password** to the PAT you generated earlier. Choose **Add** to save these credentials. + +![New credentials in Jenkins](_img/jenkins_addcreds.png) + +![Jenkins build environment](_img/jenkins_build_environment.png) +* Under Build (see screenshot below), follow these steps: + * Choose **Execute Windows batch command**. In the **Command** box, type `init.cmd`. + * Choose **Build a Visual Studio project or solution using MSBuild**. This step should point to msbuild.exe and FabrikamLibrary.sln. + * Choose **Execute Windows batch command** again, but this time, use this command: `.tools\VSS.NuGet\nuget pack FabrikamLibrary\FabrikamLibrary.csproj`. + +![Jenkins build steps](_img/jenkins_build_steps.png) +* Save this build definition and queue a build. +* The build's Workspace will now contain a .nupkg just like the one you built locally earlier. + + +## Publish a package using Jenkins + +These are the last walkthrough steps to publish the package to a feed: +* Edit the build definition in Jenkins. +* After the last build step (which runs `nuget pack`), add a new **Execute a Windows batch command** build step. +* In the new **Command** box, add these two lines: + * The first line puts credentials where NuGet can find them: `.tools\VSS.NuGet\nuget sources update -Name "MyGreatFeed" -UserName "%FEEDUSER%" -Password "%FEEDPASS%"` + * The second line pushes your package using the credentials saved above: `.tools\VSS.NuGet\nuget push *.nupkg -Name "MyGreatFeed" -ApiKey VSS` + +![Push package](_img/jenkins_push.png) +* Queue another build. This time, the build machine will authenticate to Team Services and push the package to the feed you selected. \ No newline at end of file diff --git a/docs/build-release/packages/maven.md b/docs/build-release/packages/maven.md new file mode 100644 index 00000000000..5616bf09caa --- /dev/null +++ b/docs/build-release/packages/maven.md @@ -0,0 +1,55 @@ +--- +title: Use Team Build with Maven Package Mangement feeds | Visual Studio Team Services +description: Use Maven packages with Team Build in VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: fc81d7ee-fa9a-4c04-ac8c-6269d91987d3 +ms.manager: douge +ms.author: elbatk +ms.date: 05/16/2017 +--- + +# Set up Team Build and Maven + +This guide covers the basics of using Team Build to work with Maven packages in Package Management feeds. The Maven build task will be doing most of the legwork here, but we'll have to take some extra steps to ensure that the build can authenticate to VSTS feeds. + +This walkthrough assumes that you've already Added the correct build service identity to your feed. + +1. In the repository where you store your Maven source code, add a `settings.xml` to the root of your repository, replacing *${mavenAuthToken}* with the authentication token: +```xml + + + + calvinpackageplayground-visualstudio.com-calvinmavenfeed + + + + Authorization + ${mavenAuthToken} + + + + + + +``` +
    + +2. Create a new build definition and select the **Maven** template. +
    +3. Fill in the path to your `POM.xml`, configure the Maven goal you'd like for your build, then add +
    +`-s settings.xml -DmavenAuthToken=$(mavenAuthToken)` +
    +under *Options*. This is telling Maven to use your customized `settings.xml` and enables us to pass in the password using a build variable. +

    +4. We'll need to pass the auth token to the Build. Navigate to the **Maven** tab of **Connect to Feed**, click *Generate Maven credentials*, paste the result into your favorite text editor, and copy everything inside the `` tag. +

    +5. In the "Variables" tab of the Build editor, create a new variable, name it **mavenAuthToken**, and paste the auth token inside quotes into the **value** field (see screenshot below). Then click the **lock** button to make it a secure build variable. + +![mavenAuthToken setting](_img/mavenauthtoken.png) + +>[!NOTE] +>Note that this authentication model is not fully secure. Anyone with access to your build can output your +>token in plain text. We are working on improving this experience. + diff --git a/docs/build-release/packages/npm.md b/docs/build-release/packages/npm.md new file mode 100644 index 00000000000..8d4b1a2f7a5 --- /dev/null +++ b/docs/build-release/packages/npm.md @@ -0,0 +1,56 @@ +--- +title: Use Team Build to install and publish npm packages +description: Working with npm packages and feeds in Team Build +ms.assetid: F4C61B91-2C5B-4848-A4BF-B658F549673A +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: amullans +ms.date: 11/07/2016 +--- + +# Use Team Build to restore and publish npm packages + +**Team Services** + +This guide covers the basics of using Team Build to work with npm packages in Package Management feeds. + +This walkthrough assumes that you've already: + +- [Set up your npmrc files](/vsts/package/npm/npmrc) to point to a Package Management feed +- Created a build +- [Added the correct build service identity](/vsts/package/feeds/common-identities) to your feed + +## Install packages at the start of your build + +To build a solution that relies on npm packages from Package Management feeds, add the **npm** task. + +First, click **Add build step...**, select the **Package** category, and add the +**npm** task. Then drag to order the task above any build tasks that require +your packages. + +Next, configure these options: + +- **working folder:** Select the folder that contains your `.npmrc`; leave blank if your `.npmrc` is at the root of the repo +- **npm command:** `install` + +![Team Build npm install step configuration](_img/team-build-npm-install.png) + +Finally, save your build. + +## Publish a package + +To publisn an npm package to a Package Management feed, add the **npm** task. + +First, click **Add build step...**, select the **Package** category, and add the +**npm** task. Then drag to order the task above any build tasks that require +your packages. + +Next, configure these options: + +- **working folder:** Select the folder that contains your `.npmrc` and `package.json`; leave blank if those files are at the root of the repo +- **npm command:** `publish` + +![Team Build npm publish step configuration](_img/team-build-npm-publish.png) + +Finally, save your build. \ No newline at end of file diff --git a/docs/build-release/packages/nuget-pack-publish.md b/docs/build-release/packages/nuget-pack-publish.md new file mode 100644 index 00000000000..19630f70ddd --- /dev/null +++ b/docs/build-release/packages/nuget-pack-publish.md @@ -0,0 +1,78 @@ +--- +title: Publish NuGet packages from Team Build to Package Management +description: Working with feeds in Team Build +ms.assetid: 29101A33-7C17-437C-B61D-DF7AA4CB9EA2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.topic: get-started-article +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Publish NuGet packages from Team Build to Package Management + +**Team Services | TFS 2017** + +This walkthrough will cover packing and publishing .NET Framework NuGet packages from Package Management feeds. It assumes that you've already: + +- [Created a build](/vsts/build-release/) for a .NET Framework solution that produces a set of DLLs and/or other content you wish to package and publish +- [Added the correct build service identity](/vsts/package/feeds/common-identities) to your feed + +## Creating a NuGet package + +There are a variety of ways to create NuGet packages during a build. If you're already using +MSBuild or some other step to create your packages, skip this section and +[publish those packages](#publish-packages-created-by-your-build). Otherwise, add a **NuGet** task. + +First, click **Add build step...**, select the **Package** category, and add the +**NuGet** task. Then drag to order the task below your Visual Studio Build (or similar) task and above any build tasks that require the packages you build. + +Next, configure these options: + +- **Command:** pack +- **Path to csproj or nuspec file(s) to pack:** The path to the files that describe the package you want to create. If you don't have these, see the [NuGet documentation](/nuget/create-packages/creating-a-package) to get started. +- **Configuration to package:** Leave this as $(BuildConfiguration) unless you wish to always build either Debug or Release packages, or unless you have a custom build configuration. +- **Package folder:** Leave this as $(Build.ArtifactStagingDirectory). If you change this, make a note of the location so you can use it in the [publish step](#publish-packages-created-by-your-build). +- **Pack options > Use Build number to version package:** See the +[next section](#use-the-build-number-to-version-your-packages) + +![A screenshot of the NuGet step configured as outlined above](_img/create-packages-in-team-build.png) + +Finally, save your build. + + +### Use the build number to version package + +Checking the **Use Build number to version package** box requires a change to your build's +versioning scheme. Work is planned to improve this scenario; right now, it's best to version +packages via other mechanisms (like using the `AssemblyVersionAttribute` from the `csproj`, as +outlined in the [NuGet docs](http://docs.nuget.org/Create/Creating-and-Publishing-a-Package)). + +If you choose to use the build number to version your package, you'll need to increment +the package version for continuous integration builds. This is because specific versions +of packages in feeds are [immutable](/vsts/package/feeds/immutability) and so cannot be updated or replaced. + +To use the build number, check the **Use build number to version package** box and follow the line's instructions (hover over the blue `i` icon) to set the build version format string. You must set the build version format string to have at least three parts separated by periods to avoid an error in NuGet packaging. The default build version format string is `$(date:yyyyMMdd)$(rev:.r)`, so a simple change is to add a zero at the end and a period between the date and build counter: `$(date:yyyyMMdd).$(rev:.r).0`. + +Don't forget to save your build. + + +## Publish packages created by your build + +To publish NuGet packages created by your build to Package Management feeds, add the **NuGet** task. This section assumes that a previous task (for example, a **NuGet** task set to the **pack** command) in your build is already producing NuGet packages. + +First, click **Add build step...**, select the **Package** category, and add the +**NuGet** task. Then drag to order the task below the build task producing +your NuGet packages. + +Next, configure these options: + +- **Command:** push +- **Path to NuGet package(s) to publish:** Leave this as $(Build.ArtifactStagingDirectory) unless you elected earlier to pack your packages in another location in the last step. +- **Target feed location:** This account/collection +- **Target feed:** Select the feed you want to publish to + +![Publish packages from team build](_img/publish-packages-from-team-build.png) + +Finally, save your build. \ No newline at end of file diff --git a/docs/build-release/packages/nuget-restore.md b/docs/build-release/packages/nuget-restore.md new file mode 100644 index 00000000000..d14483e81db --- /dev/null +++ b/docs/build-release/packages/nuget-restore.md @@ -0,0 +1,61 @@ +--- +title: Restore Package Management NuGet packages in Team Build +description: Working with feeds in Team Build +ms.assetid: C3D7008E-7C23-49A4-9642-E5906DAE3BAD +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.topic: get-started-article +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Restore Package Management NuGet packages in Team Build + +**Team Services | TFS 2017** + +This walkthrough will cover setting up an existing build to restore NuGet packages from Package Management feeds. It assumes that you've already: + +- [Set up your solution](/vsts/package/nuget/consume) to consume packages from a Package Management feed +- [Created a build](/vsts/build-release/) for that solution +- [Added the correct build service identity](/vsts/package/feeds/common-identities) to your feed + +To build a solution that relies on NuGet packages from Package Management feeds, add the **NuGet** task (if one is not already present). + +First, click **Add build step...**, select the **Package** category, and add the **NuGet** task. Then drag to order the task above any build tasks that require your packages. + +Next, configure these options: + +- **Command:** restore +- **Path to solution, packages.config, or project.json:** The path to the file that specifies the packagse you want to restore + +Then, select feeds to use: + +- If you've checked in a [NuGet.config](http://docs.nuget.org/Consume/NuGet-Config-File), select **Feeds in my NuGet.config** and select the file from your repo. +- If you're using a single VSTS/TFS feed, select the **Feed(s) I select here** option and select your feed from the dropdown. + +![A screenshot of the NuGet step configured as outlined above](_img/restore-pkgs-on-build.png) + +Finally, save your build. + +## Specifying sources in NuGet.config + +The NuGet.config you check in should list all the package sources you want to consume. +The example below demonstrates how that might look. + +```xml + + + + + + + + + + + + + + +``` diff --git a/docs/build-release/tasks/_img/json-setting.png b/docs/build-release/tasks/_img/json-setting.png new file mode 100644 index 00000000000..a23dfab3dd1 Binary files /dev/null and b/docs/build-release/tasks/_img/json-setting.png differ diff --git a/docs/build-release/tasks/_img/json-variables.png b/docs/build-release/tasks/_img/json-variables.png new file mode 100644 index 00000000000..95b51d9b995 Binary files /dev/null and b/docs/build-release/tasks/_img/json-variables.png differ diff --git a/docs/build-release/tasks/_img/release-definition.png b/docs/build-release/tasks/_img/release-definition.png new file mode 100644 index 00000000000..7990c87d467 Binary files /dev/null and b/docs/build-release/tasks/_img/release-definition.png differ diff --git a/docs/build-release/tasks/_img/release-definition2.png b/docs/build-release/tasks/_img/release-definition2.png new file mode 100644 index 00000000000..9fa8e14f0e7 Binary files /dev/null and b/docs/build-release/tasks/_img/release-definition2.png differ diff --git a/docs/build-release/tasks/_img/variables.png b/docs/build-release/tasks/_img/variables.png new file mode 100644 index 00000000000..152643b52d7 Binary files /dev/null and b/docs/build-release/tasks/_img/variables.png differ diff --git a/docs/build-release/tasks/_shared/_img/endpoint-manage.png b/docs/build-release/tasks/_shared/_img/endpoint-manage.png new file mode 100644 index 00000000000..ed444714ad3 Binary files /dev/null and b/docs/build-release/tasks/_shared/_img/endpoint-manage.png differ diff --git a/docs/build-release/tasks/_shared/build-step-common-qa.md b/docs/build-release/tasks/_shared/build-step-common-qa.md new file mode 100644 index 00000000000..af736fb3ee7 --- /dev/null +++ b/docs/build-release/tasks/_shared/build-step-common-qa.md @@ -0,0 +1,13 @@ +#### Q: I'm having problems. How can I troubleshoot them? + +A: Try this: + + 0. On the variables tab, add ```system.debug``` and set it to ```true```. Select to allow at queue time. + + 0. In the explorer tab, view your completed build and click the build step to view its output. + +The control options arguments described above can also be useful when you're trying to isolate a problem. + +#### Q: How do variables work? What variables are available for me to use in the arguments? + +A: ```$(Build.SourcesDirectory)``` and ```$(Agent.BuildDirectory)``` are just a few of the variables you can use. See [Variables](../../concepts/definitions/build/variables.md). diff --git a/docs/build-release/tasks/_shared/control-options-arguments-md.md b/docs/build-release/tasks/_shared/control-options-arguments-md.md new file mode 100644 index 00000000000..2452c83fe94 --- /dev/null +++ b/docs/build-release/tasks/_shared/control-options-arguments-md.md @@ -0,0 +1 @@ +[Control options](../../concepts/process/tasks.md#controloptions) diff --git a/docs/build-release/tasks/_shared/control-options-arguments.md b/docs/build-release/tasks/_shared/control-options-arguments.md new file mode 100644 index 00000000000..4955479942f --- /dev/null +++ b/docs/build-release/tasks/_shared/control-options-arguments.md @@ -0,0 +1,3 @@ + +[Control options](../../concepts/process/tasks.md#controloptions) + \ No newline at end of file diff --git a/docs/build-release/tasks/_shared/deploy-winrm-setup.md b/docs/build-release/tasks/_shared/deploy-winrm-setup.md new file mode 100644 index 00000000000..a4e899781a6 --- /dev/null +++ b/docs/build-release/tasks/_shared/deploy-winrm-setup.md @@ -0,0 +1,40 @@ + + +This task uses [Windows Remote Management](https://msdn.microsoft.com/en-us/library/aa384426.aspx) +(WinRM) to access +on-premises physical computers or virtual computers that are +domain-joined or workgroup-joined. + +**To set up WinRM for on-premises physical computers or virtual machines** + +Follow the steps described in [domain-joined](../../apps/cd/deploy-webdeploy-iis-winrm.md) + +**To set up WinRM for Microsoft Azure Virtual Machines** + +Azure Virtual Machines require WinRM to use the HTTPS protocol. +You can use a self-signed Test Certificate. In this case, the +automation agent will not validate the authenticity of the +certificate as being issued by a trusted certification authority. + +* **Azure Classic Virtual Machines**. When you create a +[classic virtual machine](https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-windows-tutorial-classic-portal/) +from the Azure portal, the virtual machine is already set up for +WinRM over HTTPS, with the default port 5986 already opened in the firewall +and a self-signed certificate installed on the machine. These virtual +machines can be accessed with no further configuration required. +Existing Classic virtual machines can be also selected by using the +[Azure Resource Group Deployment](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureResourceGroupDeployment) +task. + +* **Azure Resource Group**. If you have an +[Azure Resource Group](https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-windows-hero-tutorial/) +already defined in the Azure portal, you must configure it to use the WinRM HTTPS +protocol. You need to open port 5986 in the firewall, and install a +self-signed certificate. + +To dynamically deploy Azure Resource Groups that contain virtual machines, use the +[Azure Resource Group Deployment](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureResourceGroupDeployment) +task. This task has a checkbox named **Enable Deployment Pre-requisites**. Select +this to automatically set up the WinRM HTTPS protocol on the virtual machines, +open port 5986 in the firewall, and install a test certificate. The virtual machines +are then ready for use in the deployment task. diff --git a/docs/build-release/tasks/_shared/msbuild_architecture_arg.md b/docs/build-release/tasks/_shared/msbuild_architecture_arg.md new file mode 100644 index 00000000000..f6957dd8c36 --- /dev/null +++ b/docs/build-release/tasks/_shared/msbuild_architecture_arg.md @@ -0,0 +1,6 @@ + +MSBuild Architecture +

    Select either MSBuild x86 or MSBuild x64.

    +

    Tip: Because Visual Studio runs as a 32-bit application, you could experience problems when your build is processed by a build agent that is running the 64-bit version of Team Foundation Build Service. By selecting MSBuild x86, you might resolve these kinds of problems.

    + + diff --git a/docs/build-release/tasks/_shared/msbuild_args.md b/docs/build-release/tasks/_shared/msbuild_args.md new file mode 100644 index 00000000000..e69d627ae8e --- /dev/null +++ b/docs/build-release/tasks/_shared/msbuild_args.md @@ -0,0 +1,33 @@ + +MSBuild Arguments +You can pass additional arguments to MSBuild. For syntax, see [MSBuild Command-Line Reference](https://msdn.microsoft.com/en-us/library/ms164311.aspx). + + +Platform +

    Specify the platform you want to build such as ```Win32```, ```x86```, ```x64``` or ```any cpu```.

    +

    Tips:

    +
      +
    • If you are targeting an MSBuild project (.*proj) file instead of a solution, specify ```AnyCPU``` (no whitespace).
    • +
    • Declare a build variable such as ```BuildPlatform``` on the Variables tab (selecting Allow at Queue Time) and reference it here as ```$(BuildPlatform)```. This way you can modify the platform when you queue the build and enable building multiple configurations.
    • +
    + + + +Configuration +

    Specify the configuration you want to build such as ```debug``` or ```release```.

    +

    Tip: Declare a build variable such as ```BuildConfiguration``` on the Variables tab (selecting Allow at Queue Time) and reference it here as ```$(BuildConfiguration)```. This way you can modify the platform when you queue the build and enable building multiple configurations.

    + + + +Clean + +

    Set to False if you want to make this an incremental build. This setting might reduce your build time, especially if your codebase is large. This option has no practical effect unless you also set Clean repository to False.

    +

    Set to True if you want to rebuild all the code in the code projects. This is equivalent to the MSBuild ```/target:clean argument```.

    + + + +Restore NuGet Packages +**(Important)** This option is deprecated. Make sure to clear this checkbox and instead use the [NuGet Installer](../package/nuget-installer.md) build step. + + + diff --git a/docs/build-release/tasks/_shared/msbuild_qa.md b/docs/build-release/tasks/_shared/msbuild_qa.md new file mode 100644 index 00000000000..a5fd0c2c459 --- /dev/null +++ b/docs/build-release/tasks/_shared/msbuild_qa.md @@ -0,0 +1,75 @@ +### Should I use the Visual Studio Build step or the MSBuild step? + +If you are building a solution, in most cases you should use the [Visual Studio Build step](../build/visual-studio-build.md). This step automatically: + +* Sets the ```/p:VisualStudioVersion``` property for you. This forces MSBuild to use a particular set of targets that increase the likelihood of a successful build. + +* Specifies the MSBuild version argument. + +In some cases you might need to use the [MSBuild step](../build/msbuild.md). For example, you should use it if you are building code projects apart from a solution. + +### Where can I learn more about MSBuild? + +[MSBuild step](../build/msbuild.md) + +[MSBuild reference](https://msdn.microsoft.com/en-us/library/dd393574.aspx) + +[MSBuild command-line reference](https://msdn.microsoft.com/en-us/library/ms164311.aspx) + + +### How do I build multiple configurations for multiple platforms? + +
      +
    1. +On the Variables tab, make sure you've got variables defined for your configurations and platforms. To specify multiple values, separate them with commas. +

      +

      For example, for a .NET app you could specify:

      + + + + + + + + + + + + + + + +
      NameValue
      BuildConfigurationdebug, release
      BuildPlatformany cpu
      + +

      For example, for a C++ app you could specify:

      + + + + + + + + + + + + + + + +
      NameValue
      BuildConfigurationdebug, release
      BuildPlatformx86, x64
      +
    2. +
    3. On the Options tab select MultiConfiguration and specify the Multipliers, separated by commas. For example: ```BuildConfiguration, BuildPlatform```

      +

      Select Parallel if you want to distribute the jobs (one for each combination of values) to multiple agents in parallel if they are available.

      +
    4. +
    5. On the Build tab, select this step and specify the Platform and Configuration arguments. For example:

      +
        +
      • Platform: ```$(BuildPlatform)```
      • +
      • Configuration: ```$(BuildConfiguration)```
      • +
      +
    6. +
    + +### Can I build TFSBuild.proj files? + +You cannot build TFSBuild.proj files. These kinds of files are generated by TFS 2005 and 2008. These files contain tasks and targets are supported only using [XAML builds](http://msdn.microsoft.com/en-us/library/ms181709%28v=vs.120%29.aspx). \ No newline at end of file diff --git a/docs/build-release/tasks/_shared/msbuild_record_project_details_arg.md b/docs/build-release/tasks/_shared/msbuild_record_project_details_arg.md new file mode 100644 index 00000000000..34de5b6c0f2 --- /dev/null +++ b/docs/build-release/tasks/_shared/msbuild_record_project_details_arg.md @@ -0,0 +1,6 @@ + +Record Project Details + +Select this checkbox if you want details about how much time was needed to build each project. You can see these details when you select this build step in a completed build. + + diff --git a/docs/build-release/tasks/_shared/nuget-create-step-examples.md b/docs/build-release/tasks/_shared/nuget-create-step-examples.md new file mode 100644 index 00000000000..0c33d574f29 --- /dev/null +++ b/docs/build-release/tasks/_shared/nuget-create-step-examples.md @@ -0,0 +1,154 @@ +You want to package and publish some projects in a C# class library to your VSTS feed. + +``` +`-- Message + |-- Message.sln + `-- ShortGreeting + |-- ShortGreeting.csproj + |-- Class1.cs + `-- Properties + |-- AssemblyInfo.cs + `-- LongGreeting + |-- LongGreeting.csproj + |-- Class1.cs + `-- Properties + |-- AssemblyInfo.cs +``` + + + +### Prepare + + +#### AssemblyInfo.cs + +Make sure your AssemblyInfo.cs files contain the information you want shown in your packages. For example, ```AssemblyCompanyAttribute``` will be shown as the author, and ```AssemblyDescriptionAttribute``` will be shown as the description. + + +#### [Variables](../../concepts/definitions/build/variables.md) tab + +| Name | Value | +|---|---| +|```$(BuildConfiguration)``` | ```release```| +|```$(BuildPlatform)``` | ```any cpu```| + + +#### [Options](../../concepts/definitions/build/options.md) + +| Setting | Value | +|---|---| +| Build number format | ```$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)```| + + +### Publish to Visual Studio Team Services + +Make sure you've prepared the build as described [above](#prepare). + + +#### Create the feed + +See [Create a feed](../../../package/feeds/create-feed.md). + + +#### [Build](../../index.md) steps + + + + + + + + + + + + + + +
    ![Build: Visual Studio Build](../build/_img/visual-studio-build.png)
    **Build: Visual Studio Build**
    +

    Build your solution.

    +
      +
    • Solution: ```**\*.sln```
    • +
    • Platform: ```$(BuildPlatform)```
    • +
    • Configuration: ```$(BuildConfiguration)```
    • + +
    +
    ![Package: NuGet Packager](../package/_img/nuget-packager.png)
    **Package: NuGet Packager**
    +

    Package your projects.

    +
      +
    • Path/Pattern to nuspec files: ```**\*.csproj```
    • +
    • Use Build number to version package: Selected
    • +
    • Advanced, Configuration to Package: ```Release```
    • +
    +
    ![Package: NuGet Publisher](../package/_img/nuget-publisher.png)
    **Package: NuGet Publisher**
    +

    Publish your packages to VSTS.

    +
      +
    • Path/Pattern to nupkg: ```**\*.nupkg```
    • +
    • Feed type: Internal NuGet Feed
    • +
    • Internal feed URL: See [Find your NuGet package source URL](../../../package/nuget/consume.md#get-nuget-pkg-url). +
    • +
    +
    + +### Publish to NuGet.org + +Make sure you've prepared the build as described [above](#prepare). + +#### Register with NuGet.org + +If you haven't already, [register with NuGet.org](https://www.nuget.org/). + + +#### [Build](../../tasks/index.md) steps + + + + + + + + + + + + + + + +
    ![Build: Visual Studio Build](../build/_img/visual-studio-build.png)
    **Build: Visual Studio Build**
    +

    Build your solution.

    +
      +
    • Solution: ```**\*.sln```
    • +
    • Platform: ```$(BuildPlatform)```
    • +
    • Configuration: ```$(BuildConfiguration)```
    • + +
    +
    ![Package: NuGet Packager](../package/_img/nuget-packager.png)
    **Package: NuGet Packager**
    +

    Package your projects.

    +
      +
    • Path/Pattern to nuspec files: ```**\*.csproj```
    • +
    • Use Build number to version package: Selected
    • +
    • Advanced, Configuration to Package: ```Release```
    • +
    +
    ![Package: NuGet Publisher](../package/_img/nuget-publisher.png)
    **Package: NuGet Publisher**
    +

    Publish your packages to NuGet.org.

    +
      +
    • Path/Pattern to nupkg: ```**\*.nupkg```
    • +
    • Feed type: External NuGet Feed
    • +
    • +

      NuGet Server Endpoint: ![endpoint manage](_img/endpoint-manage.png)

      +
        +
      1. Click New Service Endpoint, and then click Generic.
      2. +
      3. On the Add New Generic Connection dialog box:

        +
          +
        • Connection Name: ```NuGet```
        • +
        • Server URL: ```https://nuget.org/```
        • +
        • User name: ```{your-name}```
        • +
        • Password/Token Key: Paste API Key from your [NuGet account](https://www.nuget.org/account).
        • +
        +
      4. +
      +
    • +
    + +
    diff --git a/docs/build-release/tasks/_shared/nuget-step-arguments.md b/docs/build-release/tasks/_shared/nuget-step-arguments.md new file mode 100644 index 00000000000..9477143edd8 --- /dev/null +++ b/docs/build-release/tasks/_shared/nuget-step-arguments.md @@ -0,0 +1,4 @@ + +Path to NuGet.exe +(Optional) Path to your own instance of NuGet.exe. If you specify this argument, you must have your [own strategy to handle authentication](../../../package/nuget/nuget-exe.md). + \ No newline at end of file diff --git a/docs/build-release/tasks/_shared/nuget-step-qa.md b/docs/build-release/tasks/_shared/nuget-step-qa.md new file mode 100644 index 00000000000..310c1fae7de --- /dev/null +++ b/docs/build-release/tasks/_shared/nuget-step-qa.md @@ -0,0 +1,18 @@ +### Why should I check in a NuGet.Config? + +Checking a NuGet.Config into source control ensures that a key piece of information needed to build your project—the location of its packages—is available to every developer that checks out your code. + +However, for situations where a team of developers works on a large range of projects, it's also possible to add a VSTS feed to the global NuGet.Config on each developer's machine. In these situations, using the "Feeds I select here" option in the NuGet task replicates this configuration. + +### Where can I learn about VSTS package management? + +[Package Management in VSTS and TFS](../../../package/overview.md) + +### Where can I learn more about NuGet? + +[NuGet Docs](https://docs.nuget.org/) Overview + +[NuGet Create](https://docs.nuget.org/create) Packaging and publishing + +[NuGet Consume](https://docs.nuget.org/consume) Seting up a solution to get dependencies + diff --git a/docs/build-release/tasks/_shared/qa-minimatch.md b/docs/build-release/tasks/_shared/qa-minimatch.md new file mode 100644 index 00000000000..bcd17b0b487 --- /dev/null +++ b/docs/build-release/tasks/_shared/qa-minimatch.md @@ -0,0 +1,3 @@ +### Where can I learn more about file matching patterns? + +[File matching patterns reference](../file-matching-patterns.md) diff --git a/docs/build-release/tasks/_shared/qa-test-azurerg-machine-group.md b/docs/build-release/tasks/_shared/qa-test-azurerg-machine-group.md new file mode 100644 index 00000000000..0355ddd2824 --- /dev/null +++ b/docs/build-release/tasks/_shared/qa-test-azurerg-machine-group.md @@ -0,0 +1,5 @@ + +#### How do I create an Azure Resource Group for testing? + +See [Using the Azure Portal to manage your Azure resources](https://azure.microsoft.com/en-us/documentation/articles/resource-group-portal/) +and [Azure Resource Manager - Creating a Resource Group and a VNET](http://blogs.msdn.com/b/scicoria/archive/2015/02/09/azure-resource-manager-creating-a-resource-group-and-a-vnet.aspx). diff --git a/docs/build-release/tasks/_shared/qa-test-customize-code-coverage.md b/docs/build-release/tasks/_shared/qa-test-customize-code-coverage.md new file mode 100644 index 00000000000..19395f4d403 --- /dev/null +++ b/docs/build-release/tasks/_shared/qa-test-customize-code-coverage.md @@ -0,0 +1,3 @@ +#### How can I customize code coverage analysis and manage inclusions and exclusions + +See [Customizing Code Coverage Analysis](https://msdn.microsoft.com/library/jj159530.aspx) diff --git a/docs/build-release/tasks/_shared/qa-test-run-settings-file.md b/docs/build-release/tasks/_shared/qa-test-run-settings-file.md new file mode 100644 index 00000000000..f8ad445d83d --- /dev/null +++ b/docs/build-release/tasks/_shared/qa-test-run-settings-file.md @@ -0,0 +1,7 @@ +#### Where can I get more information about the Run Settings file? + +See [Configure unit tests by using a .runsettings file](https://msdn.microsoft.com/library/jj635153.aspx) + +#### Where can I get more information about overriding settings in the Run Settings file? + +See [Supplying Run Time Parameters to Tests](http://blogs.msdn.com/b/visualstudioalm/archive/2015/09/04/supplying-run-time-parameters-to-tests.aspx) diff --git a/docs/build-release/tasks/_shared/qa-test-submit-feedback.md b/docs/build-release/tasks/_shared/qa-test-submit-feedback.md new file mode 100644 index 00000000000..6f717f17f91 --- /dev/null +++ b/docs/build-release/tasks/_shared/qa-test-submit-feedback.md @@ -0,0 +1,3 @@ +#### How can I submit feedback on this task? + +Visit our [UserVoice forum](http://visualstudio.uservoice.com/forums/330519-team-services/) diff --git a/docs/build-release/tasks/build/_img/android-build.png b/docs/build-release/tasks/build/_img/android-build.png new file mode 100644 index 00000000000..f37ee8513ed Binary files /dev/null and b/docs/build-release/tasks/build/_img/android-build.png differ diff --git a/docs/build-release/tasks/build/_img/android-signing.png b/docs/build-release/tasks/build/_img/android-signing.png new file mode 100644 index 00000000000..502c38f46dd Binary files /dev/null and b/docs/build-release/tasks/build/_img/android-signing.png differ diff --git a/docs/build-release/tasks/build/_img/ant.png b/docs/build-release/tasks/build/_img/ant.png new file mode 100644 index 00000000000..b9b2b3db07b Binary files /dev/null and b/docs/build-release/tasks/build/_img/ant.png differ diff --git a/docs/build-release/tasks/build/_img/cmake.png b/docs/build-release/tasks/build/_img/cmake.png new file mode 100644 index 00000000000..3063d0a413f Binary files /dev/null and b/docs/build-release/tasks/build/_img/cmake.png differ diff --git a/docs/build-release/tasks/build/_img/dotnet-core.png b/docs/build-release/tasks/build/_img/dotnet-core.png new file mode 100644 index 00000000000..3e954ccf8d2 Binary files /dev/null and b/docs/build-release/tasks/build/_img/dotnet-core.png differ diff --git a/docs/build-release/tasks/build/_img/gradle.png b/docs/build-release/tasks/build/_img/gradle.png new file mode 100644 index 00000000000..71731f5f1d2 Binary files /dev/null and b/docs/build-release/tasks/build/_img/gradle.png differ diff --git a/docs/build-release/tasks/build/_img/grunt.png b/docs/build-release/tasks/build/_img/grunt.png new file mode 100644 index 00000000000..d13a1000856 Binary files /dev/null and b/docs/build-release/tasks/build/_img/grunt.png differ diff --git a/docs/build-release/tasks/build/_img/gulp.png b/docs/build-release/tasks/build/_img/gulp.png new file mode 100644 index 00000000000..10372dbd605 Binary files /dev/null and b/docs/build-release/tasks/build/_img/gulp.png differ diff --git a/docs/build-release/tasks/build/_img/index-sources-publish-symbols.png b/docs/build-release/tasks/build/_img/index-sources-publish-symbols.png new file mode 100644 index 00000000000..034dd266f9c Binary files /dev/null and b/docs/build-release/tasks/build/_img/index-sources-publish-symbols.png differ diff --git a/docs/build-release/tasks/build/_img/jenkins-queue-job.png b/docs/build-release/tasks/build/_img/jenkins-queue-job.png new file mode 100644 index 00000000000..98e8dd36934 Binary files /dev/null and b/docs/build-release/tasks/build/_img/jenkins-queue-job.png differ diff --git a/docs/build-release/tasks/build/_img/maven.png b/docs/build-release/tasks/build/_img/maven.png new file mode 100644 index 00000000000..3ed5672612c Binary files /dev/null and b/docs/build-release/tasks/build/_img/maven.png differ diff --git a/docs/build-release/tasks/build/_img/msbuild.png b/docs/build-release/tasks/build/_img/msbuild.png new file mode 100644 index 00000000000..b3ea2b5e7a3 Binary files /dev/null and b/docs/build-release/tasks/build/_img/msbuild.png differ diff --git a/docs/build-release/tasks/build/_img/publish-build-artifacts.png b/docs/build-release/tasks/build/_img/publish-build-artifacts.png new file mode 100644 index 00000000000..183e816aebb Binary files /dev/null and b/docs/build-release/tasks/build/_img/publish-build-artifacts.png differ diff --git a/docs/build-release/tasks/build/_img/visual-studio-build.png b/docs/build-release/tasks/build/_img/visual-studio-build.png new file mode 100644 index 00000000000..bdb8f9838ce Binary files /dev/null and b/docs/build-release/tasks/build/_img/visual-studio-build.png differ diff --git a/docs/build-release/tasks/build/_img/xamarin-android.png b/docs/build-release/tasks/build/_img/xamarin-android.png new file mode 100644 index 00000000000..d9584515439 Binary files /dev/null and b/docs/build-release/tasks/build/_img/xamarin-android.png differ diff --git a/docs/build-release/tasks/build/_img/xamarin-ios.png b/docs/build-release/tasks/build/_img/xamarin-ios.png new file mode 100644 index 00000000000..734b7a40fec Binary files /dev/null and b/docs/build-release/tasks/build/_img/xamarin-ios.png differ diff --git a/docs/build-release/tasks/build/_img/xcode-build.png b/docs/build-release/tasks/build/_img/xcode-build.png new file mode 100644 index 00000000000..5dda42229aa Binary files /dev/null and b/docs/build-release/tasks/build/_img/xcode-build.png differ diff --git a/docs/build-release/tasks/build/_img/xcode-package-ios.png b/docs/build-release/tasks/build/_img/xcode-package-ios.png new file mode 100644 index 00000000000..5dda42229aa Binary files /dev/null and b/docs/build-release/tasks/build/_img/xcode-package-ios.png differ diff --git a/docs/build-release/tasks/build/android-build.md b/docs/build-release/tasks/build/android-build.md new file mode 100644 index 00000000000..ea278f089c0 --- /dev/null +++ b/docs/build-release/tasks/build/android-build.md @@ -0,0 +1,139 @@ +--- +title: Android build build and release task +description: Android Build build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 21C3DC47-7D67-4427-8386-ACE3A6279995 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Android build (deprecated; use Gradle) + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/android-build.png) Build an Android app using Gradle and optionally start the emulator for unit tests + +## Deprecated +**The Android Build task has been deprecated. Use the [Gradle](gradle.md) task instead.** + +## Demands + +The build agent must have the following capabilities: + + * Android SDK (with the version number you will build against) + * Android Support Repository (if referenced by Gradle file) + + + ## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Location of Gradle Wrapper +

    The location in the repository of the gradlew wrapper used for the build. Note that on Windows build agents (including the hosted pool), you must use the `gradlew.bat` wrapper. Xplat build agents use the `gradlew` shell script.

    +

    See [The Gradle Wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html).

    +
    Project DirectoryRelative path from the repo root to the root directory of the application (likely where your build.gradle file is).
    Gradle Arguments +

    Provide any options to pass to the Gradle command line. The default value is ```build```

    +

    See [Gradle command line](https://docs.gradle.org/current/userguide/gradle_command_line.html).

    +
    Android Virtual Device (AVD) Options
    Name + +Name of the AVD to be started or created. +
    Note: You must deploy your own [agent](../../concepts/agents/agents.md) to use this option. You cannot use the hosted pool if you want to create an AVD. +
    +
    Create AVD

    Select this check box if you would like the AVD to be created if it does not exist.

    +
    AVD Target SDKAndroid SDK version the AVD should target. The default value is ```android-19```
    AVD Device(Optional) Device definition to use. Can be a device index or id. The default value is ```Nexus 5```
    AVD ABI +

    The Application Binary Interface to use for the AVD. The default value is ```default/armeabi-v7a```

    +

    See [ABI Management](http://developer.android.com/ndk/guides/abis.html).

    +
    Overwrite Existing AVDSelect this check box if an existing AVD with the same name should be overwritten.
    Create AVD Optional Arguments +

    Provide any options to pass to the ```android create avd``` command.

    +

    See [Android Command Line](http://developer.android.com/tools/help/android.html).

    +
    Emulator Options
    Start and Stop Android Emulator +

    Check if you want the emulator to be started and stopped when Android Build task finishes.

    +
    Note: You must deploy your own [agent](../../concepts/agents/agents.md) to use this option. You cannot use the hosted pool if you want to use an emulator. +
    +
    Timeout in Seconds +How long should the build wait for the emulator to start. The default value is ```300``` seconds. +
    Headless Display +Check if you want to start the emulator with no GUI (headless mode). +
    Emulator Optional Arguments +(Optional) Provide any options to pass to the ```emulator``` command. The default value is ```-no-snapshot-load -no-snapshot-save``` +
    Delete AVD +Check if you want the AVD to be deleted upon completion. +
    + +## Related steps + +[Android Signing](android-signing.md) diff --git a/docs/build-release/tasks/build/android-signing.md b/docs/build-release/tasks/build/android-signing.md new file mode 100644 index 00000000000..fe3c701e5e9 --- /dev/null +++ b/docs/build-release/tasks/build/android-signing.md @@ -0,0 +1,108 @@ +--- +title: Android signing build and release task +description: Android signing build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 16CF200D-EC24-4485-BCF5-C9195FE278F1 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Android signing + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/android-signing.png) Sign and align Android APK files + +## Demands + +The build agent must have the following capabilities: + + * Java JDK + + + ## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    APK Files +

    Relative path from the repo root to the APK(s) you want to sign. You can use wildcards to specify multiple files. For example:

    +
      +
    • ```outputs\apk\*.apk``` to sign all .APK files in the outputs\apk\ subfolder
    • +
    • ```**\\bin\\*.apk``` to sign all .APK files in all bin subfolders
    • +
    +
    Signing Options
    Sign the APK +Select this option to sign the APK with a provided keystore file. Unsigned APKs can only run in an emulator. APKs must be signed to run on a device. +
    Keystore File +Enter the file path to the keystore file that should be used to sign the APK. It can either be checked into source control or placed on the build machine directly by an administrator. It is recommended to encrypt the keystore file in source control and use the **Decrypt File** task to decrypt the file during the build. +
    Keystore Password +

    Enter the password for the provided keystore file.

    +
    Important: We recommend that you put this value in a [secret variable](../../concepts/definitions/build/variables.md). +
    +
    Alias +Enter the alias that identifies the public/private key pair to be used in the keystore file. +
    Key Password +Enter the key password for the alias and keystore file. +
    Important: We recommend that you put this value in a [secret variable](../../concepts/definitions/build/variables.md). +
    +
    Jarsigner Arguments +

    Provide any options to pass to the jarsigner command line. Default is ```-verbose -sigalg MD5withRSA -digestalg SHA1```

    +

    See [jarsigner documentation](http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jarsigner.html).

    +
    Zipalign Options
    Zipalign +

    Select if you want to zipalign your package. This reduces the amount of RAM consumed by an app.

    +
    Zipalign Location +

    (Optional) The location of the zipalign executable used during signing. Defaults to the zipalign found in the Android SDK version folder your application builds against.

    +
    + +## Related steps + +[Android Build](android-build.md) diff --git a/docs/build-release/tasks/build/ant.md b/docs/build-release/tasks/build/ant.md new file mode 100644 index 00000000000..7288f05d266 --- /dev/null +++ b/docs/build-release/tasks/build/ant.md @@ -0,0 +1,115 @@ +--- +title: Ant build and release task +description: Build with Apache Ant for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: EDC23F42-D73B-479C-9626-4C9D6E09B57B +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Ant + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/ant.png) Build with Apache Ant + +## Demands + +The build agent must have the following capability: + + * Apache Ant + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Ant Build File

    Relative path from the repository root to the Ant build file.

    +

    For more information about build files, see [Using Apache Ant](http://ant.apache.org/manual/using.html#buildfile).

    Options

    Options that you want to pass to the Ant command line.

    +

    You can provide your own properties (for example, ```-DmyProperty=myPropertyValue```) and also use built-in variables (for example, ```-DcollectionId=$(system.collectionId)```). Alternatively, the built-in variables are already set as environment variables during the build and can be passed directly (for example, ```-DcollectionIdAsEnvVar=%SYSTEM_COLLECTIONID%```).

    +

    See [Running Apache Ant](http://ant.apache.org/manual/running.html#options).

    Target(s)

    Target(s) for Ant to execute for this build.

    +

    See [Using Apache Ant Targets](http://ant.apache.org/manual/targets.html#targets).

    JUnit Test Results
    Publish to Visual Studio Team Services/TFS Select this option to publish JUnit test results produced by the Ant build to VSTS or your on-premises Team Foundation Server. Each test result file that matches Test Results Files is published as a test run.
    Test Results FilesTest results files path. Wildcards can be used. For example, ```**/TEST-*.xml``` for all xml files whose name starts with TEST-."
    Test Run TitleAssign a title for the JUnit test case results for this build.
    Code Coverage
    Code Coverage Tool

    Select the code coverage tool you want to use.

    +

    If you are using the [hosted agents](../../concepts/agents/hosted.md), then the tools are set up for you. If you are using on-premises [Windows agent](../../actions/agents/v2-windows.md), then if you select:

    +
      +
    • JaCoCo, make sure jacocoant.jar is available in lib folder of Ant installation. See [JaCoCo](http://www.eclemma.org/jacoco/trunk/doc/ant.html).
    • +
    • Cobertura, set up an environment variable COBERTURA_HOME pointing to the Cobertura .jar files location. See [Cobertura](https://github.com/cobertura/cobertura/wiki/Ant-Task-Reference).
    • +
    +

    After you select one of these tools, the following arguments appear.

    +
    Class Files Directories

    Specify a comma-separated list of relative paths from the Ant build file to the directories that contain your .class files, archive files (such as .jar and .war). Code coverage is reported for class files present in the directories. Directories and archives are searched recursively for class files. For example: target/classes,target/testClasses.

    Class Inclusion/Exclusion Filters

    Specify a comma-separated list of filters to include or exclude classes from collecting code coverage. For example: ```+:com.,+:org.,-:my.app.```

    Source Files Directories

    Specify a comma-separated list of relative paths from the Ant build file to your source directories. Code coverage reports will use these paths to highlight source code. For example: src/java,src/Test.

    Advanced
    Set ANT_HOME PathIf set, overrides any existing ANT_HOME environment variable with the given path.
    Set JAVA_HOME by JDK VersionChoose which JDK level will be used to run Ant. Will attempt to find JDK version and assign JAVA_HOME before running Ant.
    Set JAVA_HOME by PathDirectory on build agent where the JDK is located.
    JDK ArchitectureOptionally supply the architecture (x86, x64) of the JDK.
    + + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/cmake.md b/docs/build-release/tasks/build/cmake.md new file mode 100644 index 00000000000..d870b0696cc --- /dev/null +++ b/docs/build-release/tasks/build/cmake.md @@ -0,0 +1,102 @@ +--- +title: CMake build and release task +description: CMake build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: A0C6CAF5-E953-4705-80C5-896267A910AF +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: CMake + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/cmake.png) Build with the CMake cross-platform build system + +## Demands + +cmake + +## Arguments + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Working Directory +

    Working directory when CMake is run. The default value is `build`.

    +

    If you specify a relative path, then it is relative to your repo. For example, if you specify `build`, the result is the same as if you specified `$(Build.SourcesDirectory)\build`.

    +

    You can also specify a full path outside the repo, and you can use [variables](../../concepts/definitions/build/variables.md). For example: `$(Build.ArtifactStagingDirectory)\build`

    +

    If the path you specify does not exist, CMAke creates it.

    +
    Arguments +Arguments that you want to pass to CMake. +
    + + +## Q&A + + +### How do I enable CMake for the hosted pool? + +The [hosted agents](../../concepts/agents/hosted.md) have CMake installed, but you must manually add the [capability](../../concepts/agents/agents.md#capabilities) to use the CMake build step. + +
      +
    1. Open the Agent pools control panel tab: +[!INCLUDE [agent-pools-tab](../../concepts/agents/_shared/agent-pools-tab.md)] +

    2. + +
    3. In the left column, click **Hosted**. In the right column click **Capabilities**.
    4. + +
    5. Click **Add capability** and set the fields to `cmake` and `yes`.
    6. + +
    7. Click **Save changes**
    8. +
    + +### How do I enable CMake for my on-premises agent? + +
      +
    1. [Deploy an agent](../../concepts/agents/agents.md#install).
    2. + +
    3. [Install CMake](https://cmake.org/install/) and make sure to add it to the PATH of your agent machine.
    4. + + +
    5. In your web browser, navigate to the **Agent pools** control panel tab:

      + +[!INCLUDE [agent-pools](../../concepts/agents/_shared/agent-pools-tab.md)] + +
    6. + +
    7. In the left column, click **Hosted**. In the right column click **Capabilities**.
    8. + +
    9. Click **Add capability** and set the fields to `cmake` and `yes`.
    10. + +
    11. Click **Save changes**
    12. +
    + + +### How does CMake work? What arguments can I use? + +[About CMake](https://cmake.org/overview/) + +[CMake Documentation](https://cmake.org/documentation/) + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/dotnet-core.md b/docs/build-release/tasks/build/dotnet-core.md new file mode 100644 index 00000000000..3d7b18965d4 --- /dev/null +++ b/docs/build-release/tasks/build/dotnet-core.md @@ -0,0 +1,245 @@ +--- +title: .NET Core build and release task +description: How to use npm packages build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 1CFB5762-5ABB-4107-BDF0-5079555101DC +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Build: .NET Core + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![](_img/dotnet-core.png) Build, test, and release .NET Core and .NET Standard projects and create .NET Core and .NET Standard NuGet packages using the `dotnet` command-line tool. + +If your .NET Core or .NET Standard build depends on NuGet packages, make sure to add two copies of this step: one with the `restore` command and one with the `build` command. + +## Restore NuGet packages + +### Demands + +None + +### Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Path to project(s) + Copy the **Project(s)** argument in your `build` command step and paste it + here, or create a link using the Link button in the information panel. +
    Feeds and authentication
    Feeds to use + **Feed(s) I select here:** +
      +
    • Select this option to use NuGet.org and/or one Package Management feed in the same account/collection as the build.
    • +
    + **Feeds in my NuGet.config:** +
      +
    • Select this option to use feeds specified in a [NuGet.config](http://docs.nuget.org/Consume/NuGet-Config-File) + file you've checked into source control.
    • +
    • Credentials for feeds outside this account/collection can be used to inject credentials you've provided as a [NuGet service endpoint](../../concepts/library/service-endpoints.md#sep-nuget) into your NuGet.config as the build runs.
    • +
    +
    Advanced
    Disable local cache + Prevents NuGet from using packages from local machine caches. +
    Destination directory + Specifies the folder in which packages are installed. If no folder is specified, packages are restored into a packages/ folder alongside the selected solution, packages.config, or project.json. +
    Verbosity + Specifies the amount of detail displayed in the output. +
    + +## Pack NuGet packages +### Demands + +None + +### Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Path to csproj or nuspec file(s) to pack + Specify .csproj files (for example, ```**\*.csproj```) for simple projects. In this case: +
      +
    • The packager compiles the .csproj files for packaging.
    • +
    • You must specify Configuration to Package (see below).
    • +
    • You do not have to check in a .nuspec file. If you do check one in, the packager honors + its settings and replaces tokens such as *$id$* and *$description$*.
    • +
    + Specify .nuspec files (for example, ```**\*.nuspec```) for more complex projects, such as multi-platform scenarios in which you need to compile and package in separate steps. In this case: +
      +
    • The packager does not compile the .csproj files for packaging.
    • +
    • Each project is packaged only if it has a .nuspec file checked in.
    • +
    • The packager does not replace tokens in the .nuspec file (except the <version/> element, + see Use build number to version package, below). You must supply values for elements + such as <id/> and <description/>. The most common way to do this + is to hardcode the values in the .nuspec file. +
    • +
    + To package a single file, click the ... button and select the file. To package multiple files, use [file matching patterns](../file-matching-patterns.md). Note that these patterns were updated in version 2 of the NuGet task; if you have a pattern that contains `-:`, use `!` instead. +
    Configuration to package + If you are packaging a .csproj file, you must specify a configuration that you are building and that you want to package. + For example: ```Release``` or ```$(BuildConfiguration)``` +
    Package folder + (Optional) Specify the folder where you want to put the packages. You can use a [variable](../../concepts/definitions/build/variables.md) such as ```$(Build.ArtifactStagingDirectory)``` If you leave it empty, the package will be created in the root of your source tree. +
    Pack options
    Automatic package versioning + [This blog post](https://blogs.msdn.microsoft.com/devops/2016/05/03/versioning-nuget-packages-cd-1/) provides an overview of the automatic package versioning available here. +
    Advanced
    Additional build properties + Semicolon delimited list of properties used to build the package. For example, you could replace ``` + $description$``` in the .nuspec file this way: ```Description="This is a + great package"``` Using this argument is equivalent to supplying properties from [nuget pack](https://docs.nuget.org/consume/command-line-reference#pack) + with the ```-Properties``` option. +
    Verbosity + Specifies the amount of detail displayed in the output. +
    + +## Push NuGet packages + +### Demands + +None + +### Arguments + + + + + + + + + + + + + + + + + + + + + + + + [!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Path to NuGet package(s) to publish + Specify the packages you want to publish. +
      +
    • Default value: ```$(Build.ArtifactStagingDirectory)/*.nupkg```
    • +
    • To publish a single package, click the ... button and select the file.
    • +
    • Use single-folder wildcards (```*```) and recursive wildcards (```**```) to publish multiple packages.
    • +
    • Use [variables](../../concepts/definitions/build/variables.md) to specify directories. For example, if you specified ```$(Build.ArtifactStagingDirectory)\``` as the **package folder** in the pack step above, you could specify ```$(Build.ArtifactStagingDirectory)\**\*.nupkg``` here.
    • +
    +
    Target feed location +
      +
    • **This account/collection** publishes to a Package Management feed in the same account/collection as the build. After you select this option, select the target feed from the dropdown. +
      • "Allow duplicates to be skipped" allows you to continually publish a set of packages and only change the version number of the subset of packages that changed. It allows the task to report success even if some of your packages are rejected with 409 Conflict errors.
        This option is currently only available on Visual Studio Team Services. +
      +
    • +
    • **External NuGet server (including other accounts/collections)** publishes to an external server such as [NuGet](https://www.nuget.org/), [MyGet](http://www.myget.org/), or a Package Management feed in another VSTS account or TFS collection. After you select this option, you create and select a [NuGet service endpoint](../../concepts/library/service-endpoints.md#sep-nuget). +
    • +
    +
    Advanced
    Verbosity + Specifies the amount of detail displayed in the output. +
    + +## Custom NuGet command + +### Arguments + + + + + + + + + + + +
    ArgumentDescription
    Command and arguments + NuGet command and arguments you want to pass as your custom command. +
    + +## Q & A + + + +[!INCLUDE [temp](../_shared/nuget-step-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-definition-common-all-platforms.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/gradle.md b/docs/build-release/tasks/build/gradle.md new file mode 100644 index 00000000000..f68dc0986aa --- /dev/null +++ b/docs/build-release/tasks/build/gradle.md @@ -0,0 +1,150 @@ +--- +title: Gradle build and release task +description: Gradle build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: B34A3A3D-C239-4036-AB3C-663FDDCD63C4 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Gradle + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/gradle.png) Build using a Gradle wrapper script + + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Gradle Wrapper

    The location in the repository of the gradlew wrapper used for the build. Note that on Windows build agents (including the hosted pool), you must use the `gradlew.bat` wrapper. Xplat build agents use the `gradlew` shell script.

    +

    See [The Gradle Wrapper](https://docs.gradle.org/current/userguide/gradle_wrapper.html).

    Options

    Specify any command line options you want to pass to the Gradle wrapper.

    +

    See [Gradle Command Line](https://docs.gradle.org/current/userguide/gradle_command_line.html).

    Tasks

    The task(s) for Gradle to execute. A list of tasks can be taken from `gradlew tasks` issued from a command prompt.

    +

    See [Gradle Build Script Basics](https://docs.gradle.org/current/userguide/tutorial_using_tasks.html).

    JUnit Test Results
    Publish to Visual Studio Team Services/TFS Select this option to publish JUnit Test results produced by the Gradle build to Visual Studio Team Services/TFS.
    Test Results FilesTest results files path. Wildcards can be used. For example, ```**/TEST-*.xml``` for all xml files whose name starts with TEST-."
    Test Run TitleAssign a title for the JUnit test case results for this build.
    Code Coverage
    Code Coverage ToolChoose a code coverage tool to determine the code that is covered by the test cases for the build.
    Advanced
    Working DirectoryDirectory on the build agent where the Gradle wrapper will be invoked from. Defaults to the repository root.
    Set JAVA_HOME by JDK VersionChoose which JDK level to run Gradle with. Will attempt to find JDK version and assign JAVA_HOME before running Gradle.
    Set JAVA_HOME by PathDirectory on build agent where JDK is located.
    JDK ArchitectureOptionally supply the architecture (x86, x64) of JDK.
    Code Analysis
    Run SonarQube AnalysisSelect if you want to run a SonarQube analysis. +See [The Gradle build task now supports SonarQube analysis](https://blogs.msdn.microsoft.com/visualstudioalm/2016/06/15/the-gradle-build-task-now-supports-sonarqube-analysis/). +
    Run PMD AnalysisSelect if you want to perform a [PMD static analysis](https://pmd.github.io/). +A build result page for each project is shown on the **Artifacts** tab of the completed build. +See [Gradle build task now also supports PMD analysis](https://blogs.msdn.microsoft.com/visualstudioalm/2016/07/29/gradle-build-task-now-also-supports-pmd-analysis/). +
    Run Checkstyle AnalysisSelect if you want to perform a [Checkstyle static analysis](http://checkstyle.sourceforge.net) +The build summary reports the number of issues found by Checkstyle. Detailed issue logs are available under the build Artifact tab of the build summary. +If the Checkstyle analysis is customized, the task only attempts to find the reports and produce a summary. +
    + +## Q&A + + +### How do I generate a wrapper from my Gradle project? + +The Gradle wrapper allows the build agent to download and configure the exact Gradle environment that is + checked into the repoistory without having any software configuration on the build agent itself other than the + JVM. + +0. Create the Gradle wrapper by issuing the following command from the root project directory where your +build.gradle resides: + + `jamal@fabrikam> gradle wrapper` + +0. Upload your Gradle wrapper to your remote repository. + + There is a binary artifact that is generated by the gradle wrapper ( located at `gradle/wrapper/gradle-wrapper.jar` ). + This binary file is small and doesn't require updating. If you need to change the Gradle + configuration run on the build agent, you update the `gradle-wrapper.properties`. + + The repository should look something like this: + +``` +|-- gradle/ + `-- wrapper/ + `-- gradle-wrapper.jar + `-- gradle-wrapper.properties +|-- src/ +|-- .gitignore +|-- build.gradle +|-- gradlew +|-- gradlew.bat +``` +### How do I build an Android project? + +[Android Build](android-build.md) + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/grunt.md b/docs/build-release/tasks/build/grunt.md new file mode 100644 index 00000000000..117cf51340a --- /dev/null +++ b/docs/build-release/tasks/build/grunt.md @@ -0,0 +1,69 @@ +--- +title: Grunt build and release task +description: Grunt build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: FB181C61-BAC3-4568-B340-48ACE15C2519 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Grunt + +[!INCLUDE [temp](../../_shared/version-tfs-2015-update.md)] + +![](_img/grunt.png) The JavaScript Task Runner + +## Demands + +The build agent must have the following capability: + + * Grunt + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Grunt File PathRelative path from the repo root to the grunt script that you want to run. The default value is ```gruntfile.js``` +
    Grunt task(s)(Optional) Space delimited list of tasks to run. If you leave it blank, the default task will run.
    Advanced
    Arguments +

    Additional arguments passed to grunt. See [Using the CLI](http://gruntjs.com/using-the-cli).

    Tip: ```--gruntfile``` is not needed. This argument is handled by the Grunt file path argument shown above.

    +
    Working directoryCurrent working directory when the script is run. If you leave it blank, the working directory is the folder where the script is located.
    + +## Example + +See [Sample Gruntfile](http://gruntjs.com/sample-gruntfile). + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/gulp.md b/docs/build-release/tasks/build/gulp.md new file mode 100644 index 00000000000..bb509494865 --- /dev/null +++ b/docs/build-release/tasks/build/gulp.md @@ -0,0 +1,100 @@ +--- +title: Gulp build and release task +description: Gulp build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: EC168F1F-4B27-4688-87CE-E4D12E885CC5 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Gulp + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/gulp.png) Node.js streaming task based build system + +## Demands + +gulp + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Gulp file pathRelative path from the repo root to the gulp script that you want to run. The default value is ```gulpfile.js``` +
    Gulp task(s)(Optional) Space delimited list of tasks to run. If you leave it blank, the default task will run.
    Advanced
    Arguments

    Additional arguments passed to gulp.

    +

    Tip: ```--gulpfile``` is not needed. This argument is handled by the Gulp file path argument shown above.

    +
    Working directoryCurrent working directory when the script is run. If you leave it blank, the working directory is the folder where the script is located.
    gulp.js locationgulp.js to run. The default value is `node_modules/gulp/bin/gulp.js`
    + +## Example + +### Run gulp.js + +On the [Build](../../index.md) tab: + + + + + + + + + + +
    ![Package: npm](../package/_img/npm.png)
    [Package: npm](../package/npm-install.md)
    +

    Install npm.

    +
      +
    • Command: `install`
    • +
    +
    ![Build: Gulp](_img/gulp.png)
    [Build: Gulp](gulp.md)
    +

    Run your script.

    +
      +
    • Gulp file path: `gulpfile.js`
    • +
    • Advanced, gulp.js location: `node_modules/gulp/bin/gulp.js`
    • +
    +
    + + +### Build a Node.js app + +[Build your Node.js app with Gulp](../../apps/nodejs/build-gulp.md) + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/index-sources-publish-symbols.md b/docs/build-release/tasks/build/index-sources-publish-symbols.md new file mode 100644 index 00000000000..3834bc5a863 --- /dev/null +++ b/docs/build-release/tasks/build/index-sources-publish-symbols.md @@ -0,0 +1,174 @@ +--- +title: Index Sources & Publish Symbols build and release task +description: Index Sources & Publish Symbols build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: BD27A4F7-F870-4D90-AD3F-C74E2A94538B +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Index Sources & Publish Symbols + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/index-sources-publish-symbols.png) Index your source code and optionally publish symbols to a SymStore file share. + +Indexing enables you to use your .pdb symbol files to debug an app on a machine other than the one you used to build the app. For example, you can debug an app built by a build agent from a dev machine that does not have the source code. + +> [!NOTE] +> This build step works only: +> +> * For code in Git or TFVC stored in Team Foundation Server (TFS) or Visual Studio Team Services. It does not work for any other type of repository. +> +> * Using a [private agent](../../concepts/agents/agents.md#install). It does not work on a hosted agent. + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Path to publish symbols

    If you want to publish your symbols, specify the path to the SymStore file share. +

    +

    To prepare your SymStore symbol store:

    +
      +
    1. Set up a folder on a file-sharing server to store the symbols. For example, set up \\fabrikam-share\symbols.
    2. +
    3. Grant full control permission to the [build agent service account](../../concepts/agents/agents.md#account).
    4. +
    +

    If you leave this argument blank, your symbols will be source indexed but not published. (You can also store your symbols with your drops. See [Publish Build Artifacts](../utility/publish-build-artifacts.md)). +

    +
    Search pattern +

    Specify search criterea to find the .pdb files in the folder that you specify in **Path to symbols folder** argument. You can use a single-folder wildcard (```*```) and recursive wildcards (```**```).

    +

    For example, ```**\bin\**\*.pdb``` searches for all *.pdb* files in all subdirectories named *bin*.

    +
    Path to symbols folder The path to the folder you want to search for symbol files. If you leave it blank, the path used is [Build.SourcesDirectory](../../concepts/definitions/build/variables.md).
    Advanced
    Warn if not indexed

    Enable this option if you want the build summary to show a warning when sources are not indexed for a PDB file. A common cause of sources to not be indexed are when your solution depends on binaries that it doesn't build.

    +

    Even if you don't select this option, the messages are written in log. +

    Max wait time (min) If you want to set a time limit for this step, specify the number of minutes here. The build fails when the limit is reached. If you leave it blank, limit is 2 hours.
    ProductIf you are publishing your symbols, you can specify the product parameter that is passed to symstore.exe. If blank, [$(Build.DefinitionName)](../../concepts/definitions/build/variables.md) is passed.
    VersionIf you are publishing your symbols, you can specify the version parameter that is passed to symstore.exe. If blank, [$(Build.BuildNumber)](../../concepts/definitions/build/variables.md) is passed.
    Artifact nameSpecify the pattern used for the name of the link from the artifact tab in the build summary to the file share where you are publishing your symbols. For example, if you specify ```Symbols_$(BuildConfiguration)```, then the name of the link to your published release symbols would be *Symbols_release*
    + +## Use indexed symbols to debug your app + +You can use your indexed symbols to debug an app on a different machine from where the sources were built. + +### Enable your dev machine + +In Visual Studio you may need to enable the following two options: + +* Debug -> Options -> Debugging -> General + * -> Enable source server support + * -> Allow source server for partial trust assemblies (Managed only) + +### Overriding at debug time + +The mapping information injected into the PDB files contains variables that can be overridden at debugging time. Overriding the variables may be required if the collection URL has changed. When overriding the mapping information, the goals are to construct: + +* A command (SRCSRVCMD) that the debugger can use to retrieve the source file from the server. + +* A location (SRCSRVTRG) where the debugger can find the retrieved source file. + + The mapping information may look something like the following: + +``` +SRCSRV: variables ------------------------------------------ +TFS_EXTRACT_TARGET=%targ%\%var5%\%fnvar%(%var6%)%fnbksl%(%var7%) +TFS_EXTRACT_CMD=tf.exe git view /collection:%fnvar%(%var2%) /teamproject:"%fnvar%(%var3%)" /repository:"%fnvar%(%var4%)" /commitId:%fnvar%(%var5%) /path:"%var7%" /output:%SRCSRVTRG% %fnvar%(%var8%) +TFS_COLLECTION=http://SERVER:8080/tfs/DefaultCollection +TFS_TEAM_PROJECT=93fc2e4d-0f0f-4e40-9825-01326191395d +TFS_REPO=647ed0e6-43d2-4e3d-b8bf-2885476e9c44 +TFS_COMMIT=3a9910862e22f442cd56ff280b43dd544d1ee8c9 +TFS_SHORT_COMMIT=3a991086 +TFS_APPLY_FILTERS=/applyfilters +SRCSRVVERCTRL=git +SRCSRVERRDESC=access +SRCSRVERRVAR=var2 +SRCSRVTRG=%TFS_EXTRACT_TARGET% +SRCSRVCMD=%TFS_EXTRACT_CMD% +SRCSRV: source files --------------------------------------- +C:\BuildAgent\_work\1\src\MyApp\Program.cs*TFS_COLLECTION*TFS_TEAM_PROJECT*TFS_REPO*TFS_COMMIT*TFS_SHORT_COMMIT*/MyApp/Program.cs*TFS_APPLY_FILTERS +C:\BuildAgent\_work\1\src\MyApp\SomeHelper.cs*TFS_COLLECTION*TFS_TEAM_PROJECT*TFS_REPO*TFS_COMMIT*TFS_SHORT_COMMIT*/MyApp/SomeHelper.cs*TFS_APPLY_FILTERS +``` + + The above example contains two sections: 1) the variables section and 2) the source files section. The information in the variables section is what can be overridden. The variables can leverage other variables, and can leverage information from the source files section. + + To override one or more of the variables while debugging with Visual Studio, create an ini file ```%LOCALAPPDATA%\SourceServer\srcsrv.ini```. Set the content of the INI file to override the variables. For example: + +``` +[variables] +TFS_COLLECTION=http://DIFFERENT_SERVER:8080/tfs/DifferentCollection +``` + +## Q&A + + + +### How does indexing work? + +By choosing to index the sources, an extra section will be injected into the PDB files. PDB files normally contain references to the local source file paths only. For example, ```C:\BuildAgent\_work\1\src\MyApp\Program.cs```. The extra section injected into the PDB file contains mapping instructions for debuggers. The mapping information indicates how to retrieve the server item corresponding to each local path. + + The Visual Studio debugger will use the mapping information to retrieve the source file from the server. An actual command to retrieve the source file is included in the mapping information. You may be prompted by Visual Studio whether to run the command. For example +``` +tf.exe git view /collection:http://SERVER:8080/tfs/DefaultCollection /teamproject:"93fc2e4d-0f0f-4e40-9825-01326191395d" /repository:"647ed0e6-43d2-4e3d-b8bf-2885476e9c44" /commitId:3a9910862e22f442cd56ff280b43dd544d1ee8c9 /path:"/MyApp/Program.cs" /output:"C:\Users\username\AppData\Local\SOURCE~1\TFS_COMMIT\3a991086\MyApp\Program.cs" /applyfilters +``` + +### Where can I learn more about symbol stores and debugging? + +[Symbol Server and Symbol Stores](https://msdn.microsoft.com/en-us/library/ms680693%28VS.85%29.aspx) + +[SymStore](https://msdn.microsoft.com/en-us/library/ff558848%28VS.85%29.aspx) + +[Use the Microsoft Symbol Server to obtain debug symbol files](https://msdn.microsoft.com/en-us/library/windows/desktop/ee416588%28v=vs.85%29.aspx) + +[The Srcsrv.ini File](https://msdn.microsoft.com/en-us/library/windows/hardware/ff558876%28v=vs.85%29.aspx) + +[Source Server](https://msdn.microsoft.com/en-us/library/windows/desktop/ms680641%28v=vs.85%29.aspx) + +[Source Indexing and Symbol Servers: A Guide to Easier Debugging](http://www.codeproject.com/Articles/115125/Source-Indexing-and-Symbol-Servers-A-Guide-to-Easi) + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/jenkins-queue-job.md b/docs/build-release/tasks/build/jenkins-queue-job.md new file mode 100644 index 00000000000..b1ad4724048 --- /dev/null +++ b/docs/build-release/tasks/build/jenkins-queue-job.md @@ -0,0 +1,109 @@ +--- +title: Jenkins Queue Job build and release task +description: Queue a job on a Jenkins server build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: B0C3028E-B5DF-436D-B888-A4A8FA2627A0 +ms.manager: douge +ms.author: alewis +ms.date: 08/30/2016 +--- + +# Build: Jenkins Queue Job + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![](_img/jenkins-queue-job.png) Queue a job on a Jenkins server + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ArgumentDescription
    Jenkins service endpoint +

    Select the service endpoint for your Jenkins instance. To create one, click **Manage** and create a new Jenkins Service Endpoint.

    +
    Job name +

    The name of the Jenkins job to queue. This must exactly match the job name on the Jenkins server.

    +
    Capture console output and wait for completion +

    If selected, this step will capture the Jenkins build console output, wait for the Jenkins build to complete, and succeed/fail based on the Jenkins build result. Otherwise, once the Jenkins job is successfully queued, this step will successfully complete without waiting for the Jenkins build to run.

    +
    Capture pipeline output and wait for pipeline completion +

    This option is similar to capture console output except it will capture the output for the entire Jenkins pipeline, wait for completion for the entire pipeline, and succeed/fail based on the pipeline result.

    +
    Parameterized job +

    Select this option if the Jekins job requires parameters.

    +
    Job parameters +

    This option is available for parameterized jobs. Specify job parameters, one per line, in the form parameterName=parameterValue

    To set a parameter to an empty value (useful for overriding a default value) leave off the paramter value, e.g. specify parameterName=

    Variables are supported, e.g. to define the commitId paramter to be the git commit ID for the build, use: commitId=$(Build.SourceVersion).

    Supported Jenkins parameter types are:

    • Boolean
    • String
    • Choice
    • Password

    +
    Trust server certificate +

    Selecting this option results in the Jenkins server's SSL certificate being trusted even if it is self-signed or cannot be validated by a Certificate Authority (CA). +

    + +## Team Foundation Server Plug-in + +You can use Team Foundation Server Plug-in (version 5.2.0 or newer) to automatically collect files from the Jenkins workspace and download them into the build. + +To set it up: + +
      +
    1. Install the [Team Foundation Server Plug-in](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin) on the Jenkins server. +
    2. +
    3. On the Jenkins server, for each job you would like to collect results from, add the Collect results for TFS/VSTS post-build action and then configure it with one or more pairs of result type and include file pattern. +
    4. +
    5. On the Jenkins Queue Job build task enable the Capture console output and wait for completion to collect results from the root level job, or the Capture pipeline output and wait for pipeline completion to collect results from all pipeline jobs. +
    + +Results will be downloaded to the $(Build.StagingDirectory)/jenkinsResults/<Job Name>/team-results.zip and extracted to this location. Each set of result types collected by the plug-in, will be under the team-results directory, $(Build.StagingDirectory)/jenkinsResults/<Job Name>/team-results/<ResultType>/. This is the directory where build results can be published by downstream tasks (e.g. Publish Test Results, and Publish Code Coverage Results). + + +## Q&A + + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/maven.md b/docs/build-release/tasks/build/maven.md new file mode 100644 index 00000000000..c2c25dce5a5 --- /dev/null +++ b/docs/build-release/tasks/build/maven.md @@ -0,0 +1,100 @@ +--- +title: Maven build and release task +description: Maven build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: A5B82F26-1053-47E4-B264-6E01B37C215F +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Maven + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![Build: Maven](_img/maven.png) to build your Java code. + +## Demands + +The build agent must have the following capability: + + * Maven + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Maven POM file

    Relative path from the repo root to the Maven POM .xml file.

    +

    See [Introduction to the POM](http://maven.apache.org/guides/introduction/introduction-to-the-pom.html).

    OptionsSpecify any Maven options you want to use.
    Goal(s)

    In most cases, set this to ```package``` to compile your code and package it into a .war file. If you leave this argument blank, the build will fail.

    +

    See [Introduction to the Maven build lifecycle](http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html).

    JUnit Test Results
    Publish to Visual Studio Team Services/TFS Select this option to publish JUnit Test results produced by the Maven build to Visual Studio Team Services/TFS.
    Test Results FilesTest results files path. Wildcards can be used. For example, ```**/TEST-*.xml``` for all xml files whose name starts with TEST-."
    Advanced
    JDK VersionWill attempt to discover the path to the selected JDK version and set JAVA_HOME accordingly.
    JDK ArchitectureOptionally supply the architecture (x86, x64) of JDK.
    Code Analysis
    Run SonarQube AnalysisSelect if you want to run a SonarQube analysis. +See [The Maven build task now simplifies SonarQube analysis](https://blogs.msdn.microsoft.com/visualstudioalm/2015/10/08/the-maven-build-task-now-simplifies-sonarqube-analysis/). +
    Run PMD AnalysisSelect if you want to perform a [PMD static analysis](https://pmd.github.io/). +A build result page for each .pom file is shown on the **Artifacts** tab of the completed build. +See [The Maven build task now supports PMD analysis out of the box](https://blogs.msdn.microsoft.com/visualstudioalm/2016/06/15/the-maven-build-task-now-supports-pmd-analysis-out-of-the-box/). +
    + +## Example + +[Build and Deploy your Java application to an Azure web app](../../apps/java/build-maven.md) + + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/msbuild.md b/docs/build-release/tasks/build/msbuild.md new file mode 100644 index 00000000000..813c078d567 --- /dev/null +++ b/docs/build-release/tasks/build/msbuild.md @@ -0,0 +1,77 @@ +--- +title: MSBuild build and release task +description: MSBuild build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: A104BE40-2BFD-4E80-828B-F50944C12107 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: MSBuild + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/msbuild.png) Build with MSBuild + +## Demands + +msbuild + +> **VSTS and Team Foundation Server 2017:** If your team uses Visual Studio 2017 and you want to use our hosted agents, make sure you select as your default queue the **Hosted VS2017**. See [Hosted agents](../../concepts/agents/hosted.md). + +## Arguments + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/msbuild_args.md)] + + + + + +[!INCLUDE [temp](../_shared/msbuild_record_project_details_arg.md)] + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Project +

    If you want to build a single project, click the ... button and select the project.

    +

    If you want to build multiple projects, specify search criteria. You can use a single-folder wildcard (```*```) and recursive wildcards (```**```). For example, ```**\*.*proj``` searches for all MSBuild project (.*proj) files in all subdirectories.

    +

    Make the sure the projects you specify are downloaded by this build definition. On the Repository tab:

    +
      +
    • +If you use TFVC, make sure that the project is a child of one of the mappings on the Repository tab. +
    • +
    • If you use Git, make sure that the project or project is in your Git repo, in a branch that you're building.
    • +
    +

    Tip: If you are building a solution, we recommend you use the [Visual Studio build step](visual-studio-build.md) instead of the MSBuild step.

    +
    Advanced
    MSBuild +

    In some cases you might need more control over the version of MSBuild that you are running.

    + +
    + +## Q&A + + +[!INCLUDE [temp](../_shared/msbuild_qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/visual-studio-build.md b/docs/build-release/tasks/build/visual-studio-build.md new file mode 100644 index 00000000000..9118a8c2e46 --- /dev/null +++ b/docs/build-release/tasks/build/visual-studio-build.md @@ -0,0 +1,86 @@ +--- +title: Visual Studio Build build and release task +description: Visual Studio Build build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 11E76804-BA67-4086-9CF1-8CB2887169BA +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Visual Studio Build + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/visual-studio-build.png) Build with MSBuild and set the Visual Studio version property + +## Demands + +msbuild, visualstudio + +> **VSTS and Team Foundation Server 2017:** If your team uses Visual Studio 2017 and you want to use our hosted agents, make sure you select as your default queue the **Hosted VS2017**. See [Hosted agents](../../concepts/agents/hosted.md). + +## Arguments + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/msbuild_args.md)] + + + + + + + + + +[!INCLUDE [temp](../_shared/msbuild_architecture_arg.md)] + +[!INCLUDE [temp](../_shared/msbuild_record_project_details_arg.md)] + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Solution +

    If you want to build a single solution, click the ... button and select the solution.

    +

    If you want to build multiple solutions, specify search criteria. You can use a single-folder wildcard (```*```) and recursive wildcards (```**```). For example, ```**\*.sln``` searches for all *.sln* files in all subdirectories.

    +

    Make the sure the solutions you specify are downloaded by this build definition. On the Repository tab:

    +
      +
    • +If you use TFVC, make sure that the solution is a child of one of the mappings on the Repository tab. +
    • +
    • If you use Git, make sure that the project or solution is in your Git repo, in a branch that you're building.
    • +
    +

    Tips:

    +
      +
    • You can also build MSBuild project (.*proj) files.
    • +
    • If you are building a customized MSBuild project file, we recommend you use the [MSBuild step](msbuild.md) instead of the Visual Studio Build step.
    • +
    +
    Visual Studio Version

    For some kinds of solutions, to avoid problems, you must make sure this value matches the version of Visual Studio used to create your solution.

    +

    The value you select here adds ```/p:VisualStudioVersion={numeric_visual_studio_version}``` argument to the MSBuild command run by the build. For example, if you select Visual Studio 2015, ```/p:VisualStudioVersion=14.0``` is added to the MSBuild command. +

    +
    +

    VSTS and Team Foundation Server 2017: If you select **Visual Studio 2017** or **Latest** and you want to use our hosted agents, make sure you select as your default queue the **Hosted VS2017**. See [Hosted agents](../../concepts/agents/hosted.md).

    +
    +
    Advanced
    + +## Q&A + + +[!INCLUDE [temp](../_shared/msbuild_qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/xamarin-android.md b/docs/build-release/tasks/build/xamarin-android.md new file mode 100644 index 00000000000..d4be3b12264 --- /dev/null +++ b/docs/build-release/tasks/build/xamarin-android.md @@ -0,0 +1,109 @@ +--- +title: Xamarin.Android build and release task +description: Xamarin.Android build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: F9D118B6-BA56-406C-8223-6934F6BCBEA1 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Xamarin.Android + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/xamarin-android.png) Build an Android app with Xamarin + + +## Demands + +AndroidSDK, MSBuild, Xamarin.Android + + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Project +

    If you want to build a single Xamarin.Android project, click the ... button and select the project.

    +

    If you want to build multiple projects, specify search criteria. You can use a single-folder wildcard (```*```) and recursive wildcards (```**```). For example, ```**/*.Android.csproj``` searches for all Android.csproj files in all subdirectories in your repo.

    +

    Note: The projects must have a PackageForAndroid target.

    +
    Target +(Optional) Specify the project targets you want to build. Use a semicolon to separate multiple targets. +
    Output Directory +Use a [variable](../../concepts/definitions/build/variables.md) to specify the folder where you want the output files to go. For example: ```$(build.binariesdirectory)/$(BuildConfiguration)``` +
    Configuration

    Specify the configuration you want to build such as ```debug``` or ```release```.

    +

    Tip: Declare a build variable such as ```BuildConfiguration``` on the Variables tab (selecting Allow at Queue Time) and reference it here as ```$(BuildConfiguration)```. This way you can modify the platform when you queue the build and enable building multiple configurations.

    +
    MSBuild Options
    MSBuild Location +(Optional) Path to MSBuild (on Windows) or xbuild (on Mac). Default behavior is to search for the latest version. +
    Additional Arguments +You can pass additional arguments to MSBuild (on Windows) or xbuild (on Mac). For syntax, see [MSBuild Command-Line Reference](https://msdn.microsoft.com/en-us/library/ms164311.aspx). +
    JDK Options
    Select JDK to use for the build +Pick the JDK to be used during the build by selecting a JDK version that will be discovered during builds or by manually entering a JDK path. +
      +
    • JDK Version: Select the JDK version you want to use.
    • +
    • JDK Path: Specify the path to the JDK you want to use.
    • +
    +
    JDK Architecture +Select x86 or x64. +
    + + +## Example + +[Build your Xamarin app](../../apps/mobile/xamarin.md) + + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/xamarin-ios.md b/docs/build-release/tasks/build/xamarin-ios.md new file mode 100644 index 00000000000..1c850ebc5bd --- /dev/null +++ b/docs/build-release/tasks/build/xamarin-ios.md @@ -0,0 +1,132 @@ +--- +title: Xamarin.iOS build and release task +description: Xamarin.iOS build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 00000000-0000-0000-0000-000000000000 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Xamarin.iOS + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/xamarin-ios.png) Build an iOS app with Xamarin on Mac OS + + +## Demands + +Xamarin.iOS + + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Solution +Click the ... button and select your solution. +
    Configuration +Specify a configuration such as `Ad-Hoc`, `AppStore`, `Debug`, or `Release` +
    Create App Package +Select if you want to create an .IPA app package file. +
    Build for iOS Simulator +Select if you want to build for the iOS Simulator instead of for physical iOS devices. +
    (Optional) Signing & Provisioning
    Override Using (Optional) +

    If the build should use a signing or provisioning method that is different than the default, choose that method here.

    +

    Choose **File Contents** to use a P12 certificate and provisioning profile. +Choose **Identifiers** to retrieve signing settings from the default Keychain and pre-installed profiles.

    +

    Leave the corresponding fields blank if you do not wish to override default build settings.

    +
    P12 Certificate File +Relative path to a PKCS12-formatted .p12 certificate file that contains a signing certificate to be used for this build. +
    P12 Password +Password to the .p12 file. +
    Important: Use a [secret variable](../../concepts/definitions/build/variables.md) to avoid exposing this value.
    +
    Provisioning Profile File +Relative path to .mobileprovision file that contains the provisioning profile override to be used for this build. +
    Remove Profile After Build +Select if you want the contents of the provisioning profile file to be removed from the build agent after the build is complete. +
    Important: Select only if you are running one agent per user.
    +
    Advanced
    Arguments +(Optional) Specify additional command-line arguments for this build. +
    Working Directory +Working directory for the build. If you leave it blank, it is the root of the repo. +
    Xbuild Path +(Optional) Specify the path to [xbuild](http://www.mono-project.com/docs/tools+libraries/tools/xbuild/). If you leave it blank, the default xbuild path is used. +
    + + +## Example + +[Build your Xamarin app](../../apps/mobile/xamarin.md) + + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/xcode-build.md b/docs/build-release/tasks/build/xcode-build.md new file mode 100644 index 00000000000..aa30e5283d8 --- /dev/null +++ b/docs/build-release/tasks/build/xcode-build.md @@ -0,0 +1,229 @@ +--- +title: Xcode Build build and release task +description: Xcode Build build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 37B7092E-9205-4050-BBC8-E35C3A4B0A8A +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Xcode Build + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/xcode-build.png) Build an Xcode workspace on Mac OS + +## Demands + +xcode + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Actions +Space-delimited list of actions. Valid options are `build`, `clean`, `test`, `analyze`, and `archive`. For example: `clean build` would run a clean build. See [xcodebuild man page](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html). +
    Configuration +The default value is `$(Configuration)`. Make sure to specify a value (for example, `Release`) on the [variables tab](../../concepts/definitions/build/variables.md). +
    SDK +The default value is `$(SDK)`. Make sure to specify a value (for example, `iphonesimulator`) on the [variables tab](../../concepts/definitions/build/variables.md). +
    Workspace Path +(Optional) Relative path from repo root to where the xcworkspace folder exists. If you specify a value, you must also specify the Scheme. Do not specify a value if you are specifying the **-target** flag in Advanced, Arguments (described below). +
    Scheme +(Optional, unless you specify the Workspace Path, described above.) Scheme name in Xcode. Must be a shared scheme (with shared check box under managed schemes in Xcode selected). +
    Create App Package +Select if you want to create an .IPA app package file. +
    (Optional) Signing & Provisioning
    Xcode 8 Automatic Signing +Select this if you have an Xcode 8 project setup for Automatic Signing. +
    Team ID +(Optional) Specify the 10 digit developer Team ID. This is required if you are a member of multiple development teams. +
    Override Using (Optional) +

    If the build should use a signing or provisioning method that is different than the default, choose that method here.

    +

    Choose **File Contents** to use a P12 certificate and provisioning profile. +Choose **Identifiers** to retrieve signing settings from the default Keychain and pre-installed profiles.

    +

    Leave the corresponding fields blank if you do not wish to override default build settings.

    +
    P12 Certificate File +Relative path to a PKCS12-formatted .p12 certificate file that contains a signing certificate to be used for this build. +
    P12 Password +Password to the .p12 file. +
    Important: Use a [secret variable](../../concepts/definitions/build/variables.md) to avoid exposing this value.
    +
    Provisioning Profile File +Relative path to .mobileprovision file that contains the provisioning profile override to be used for this build. +
    Remove Profile After Build +Select if you want the contents of the provisioning profile file to be removed from the build agent after the build is complete. +
    Important: Select only if you are running one agent per user.
    +
    Package Options
    Archive Path +Optionally specify a directory where created archives should be placed. +
    Export Path +Optionally specify the destination for the product exported from the archive. +
    Export Options +Pick a way to pass in Export Options when exporting the archive. The task automatically detects the export method from the archive when the default `Auto` is selected. +You can specify the export method and Team ID in the task by selecting `Specify` or provide the export options via a plist file by choosing `Plist`. +
    Export Method +Method for how Xcode should export the archvie. E.g. app-store, package, ad-hoc, enterprise, development. +
    Team ID +The 10 digit Team ID from the Apple Developer Portal to use for this export. +
    Export Options Plist +Path to a plist file that configures archive exporting. +
    Advanced
    Arguments +(Optional) Specify additional command-line arguments for this build. See [xcodebuild man page](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html). +
    Working Directory +Working directory for the build. If you leave it blank, it is the root of the repo. +
    Output Directory +Relative path where build output (binaries) will be placed. The default value includes build variables. Make sure to specify values on the [variables tab](../../concepts/definitions/build/variables.md). +
    Xcode Developer Path +(Optional) Path to Xcode Developer folder if you are not using the system default. Specify this argument when you've got multiple versions of Xcode installed your build agent. For example: `/Applications/Xcode 7.app/Contents/Developer` +
    Use xcpretty +Use [xcpretty](https://github.com/supermarin/xcpretty/blob/master/README.md) to format xcodebuild output and generate JUnit test results report. You must have xcpretty installed on the agent. +
    If you select this option, make sure that Use xctool is cleared.
    +
    Publish to VSTS/TFS +If you have selected Use xcpretty (described above), select this option if you want to publish JUnit Test results to VSTS/TFS. +
    xctool (deprecated)
    Use xctool +Select if you want to run [xctool](https://github.com/facebook/xctool/blob/master/README.md) instead of [xcodebuild](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/xcodebuild.1.html). You must have xctool installed on the agent. +
    If you select this option, make sure that Use xcpretty is cleared.
    +
    xctool Test Reporter Format +You can specify this argument if you have selected Use xctool and included `test` in Actions (arguments described above). Specify `junit:output-file-path-here.xml` to generate a file that you can publish using the [Publish Test Results](https://github.com/Microsoft/vso-agent-tasks/tree/master/Tasks/PublishTestResults) step. When specified, `plain` is automatically added as well. +
    + + +## Example + +[Build and test Xcode projects](../../apps/mobile/xcode-ios.md) + + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/build/xcode-package-ios.md b/docs/build-release/tasks/build/xcode-package-ios.md new file mode 100644 index 00000000000..c4a303807ae --- /dev/null +++ b/docs/build-release/tasks/build/xcode-package-ios.md @@ -0,0 +1,87 @@ +--- +title: Xcode Package iOS build and release task +description: Xcode Package iOS build and release task for Microsoft Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: FF3E5771-481B-4D72-B3D5-ED9B3379E298 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Build: Xcode Package iOS + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/xcode-package-ios.png) Generate an .ipa file from Xcode build output + +This step is relevant if you are using Xcode 6.4. + +## Demands + +xcode + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Name of .app +Name of the .app file, which is sometimes different from the .ipa file. +
    Name of .ipa +Name of the .ipa file, which is sometimes different from the .app file. +
    Provisioning Profile Name +Name of the provisioning profile to use when signing. +
    SDK +The SDK you want to use. Run **xcodebuild -showsdks** to see a list of valid SDK values. +
    Advanced
    Path to .app +Relative path to the built .app file. +The default value is `$(SDK)/$(Configuration)/build.sym/$(Configuration)-$(SDK)`. +Make sure to specify the variable values on the [variables tab](../../concepts/definitions/build/variables.md). +
    Path to place .ipa +Relative path where the .ipa will be placed. The directory will be created if it doesn't exist. +The default value is `$(SDK)/$(Configuration)/build.sym/$(Configuration)-$(SDK)/output`. +Make sure to specify the variable values on the [variables tab](../../concepts/definitions/build/variables.md). +
    + + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/deploy/_img/azure-app-service-manage.png b/docs/build-release/tasks/deploy/_img/azure-app-service-manage.png new file mode 100644 index 00000000000..1ea9f20bae4 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-app-service-manage.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-cli-icon.png b/docs/build-release/tasks/deploy/_img/azure-cli-icon.png new file mode 100644 index 00000000000..84ee091dba3 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-cli-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-cloud-service-deployment-icon.png b/docs/build-release/tasks/deploy/_img/azure-cloud-service-deployment-icon.png new file mode 100644 index 00000000000..84ee091dba3 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-cloud-service-deployment-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-file-copy-icon.png b/docs/build-release/tasks/deploy/_img/azure-file-copy-icon.png new file mode 100644 index 00000000000..afb4b47d044 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-file-copy-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-key-vault-icon.png b/docs/build-release/tasks/deploy/_img/azure-key-vault-icon.png new file mode 100644 index 00000000000..9b94d2dbf1c Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-key-vault-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-powershell-icon.png b/docs/build-release/tasks/deploy/_img/azure-powershell-icon.png new file mode 100644 index 00000000000..84ee091dba3 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-powershell-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-resource-group-deployment-icon.png b/docs/build-release/tasks/deploy/_img/azure-resource-group-deployment-icon.png new file mode 100644 index 00000000000..cdf62f210d4 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-resource-group-deployment-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-service-fabric.png b/docs/build-release/tasks/deploy/_img/azure-service-fabric.png new file mode 100644 index 00000000000..815183e2ac8 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-service-fabric.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-sql-database-deployment-icon.png b/docs/build-release/tasks/deploy/_img/azure-sql-database-deployment-icon.png new file mode 100644 index 00000000000..2f05804c227 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-sql-database-deployment-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-web-app-deployment-icon.png b/docs/build-release/tasks/deploy/_img/azure-web-app-deployment-icon.png new file mode 100644 index 00000000000..0de2dc35d9f Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-web-app-deployment-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/azure-web-app-deployment-step.png b/docs/build-release/tasks/deploy/_img/azure-web-app-deployment-step.png new file mode 100644 index 00000000000..0de2dc35d9f Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/azure-web-app-deployment-step.png differ diff --git a/docs/build-release/tasks/deploy/_img/build-machine-image.png b/docs/build-release/tasks/deploy/_img/build-machine-image.png new file mode 100644 index 00000000000..9812355eab4 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/build-machine-image.png differ diff --git a/docs/build-release/tasks/deploy/_img/chef-icon.png b/docs/build-release/tasks/deploy/_img/chef-icon.png new file mode 100644 index 00000000000..2c22ae06998 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/chef-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/chef-knife-icon.png b/docs/build-release/tasks/deploy/_img/chef-knife-icon.png new file mode 100644 index 00000000000..2c22ae06998 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/chef-knife-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/copy-files-over-ssh.png b/docs/build-release/tasks/deploy/_img/copy-files-over-ssh.png new file mode 100644 index 00000000000..667721310ba Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/copy-files-over-ssh.png differ diff --git a/docs/build-release/tasks/deploy/_img/docker-icon.png b/docs/build-release/tasks/deploy/_img/docker-icon.png new file mode 100644 index 00000000000..b5619bb2bad Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/docker-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/iis-deploy-icon.png b/docs/build-release/tasks/deploy/_img/iis-deploy-icon.png new file mode 100644 index 00000000000..90ae2485180 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/iis-deploy-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/iis-manage-icon.png b/docs/build-release/tasks/deploy/_img/iis-manage-icon.png new file mode 100644 index 00000000000..90ae2485180 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/iis-manage-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/iis-web-application-deployment-icon.png b/docs/build-release/tasks/deploy/_img/iis-web-application-deployment-icon.png new file mode 100644 index 00000000000..90ae2485180 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/iis-web-application-deployment-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/kubernetes-icon.png b/docs/build-release/tasks/deploy/_img/kubernetes-icon.png new file mode 100644 index 00000000000..575dd107446 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/kubernetes-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/manual-intervention-icon.png b/docs/build-release/tasks/deploy/_img/manual-intervention-icon.png new file mode 100644 index 00000000000..68be8943599 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/manual-intervention-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/mobile-center-upload-icon.png b/docs/build-release/tasks/deploy/_img/mobile-center-upload-icon.png new file mode 100644 index 00000000000..700c4c9d99b Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/mobile-center-upload-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/powershell-on-target-machines-icon.png b/docs/build-release/tasks/deploy/_img/powershell-on-target-machines-icon.png new file mode 100644 index 00000000000..65f6f6bdb83 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/powershell-on-target-machines-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/release-annotation-icon.png b/docs/build-release/tasks/deploy/_img/release-annotation-icon.png new file mode 100644 index 00000000000..fb087e15c75 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/release-annotation-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/scvmm-icon.png b/docs/build-release/tasks/deploy/_img/scvmm-icon.png new file mode 100644 index 00000000000..69231492c05 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/scvmm-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/sql-server-database-deployment-icon.png b/docs/build-release/tasks/deploy/_img/sql-server-database-deployment-icon.png new file mode 100644 index 00000000000..7e893f47a24 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/sql-server-database-deployment-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/ssh.png b/docs/build-release/tasks/deploy/_img/ssh.png new file mode 100644 index 00000000000..7e9b36a2a91 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/ssh.png differ diff --git a/docs/build-release/tasks/deploy/_img/vmware-resource-deployment-icon.png b/docs/build-release/tasks/deploy/_img/vmware-resource-deployment-icon.png new file mode 100644 index 00000000000..86e6cceb138 Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/vmware-resource-deployment-icon.png differ diff --git a/docs/build-release/tasks/deploy/_img/windows-machine-file-copy-icon.png b/docs/build-release/tasks/deploy/_img/windows-machine-file-copy-icon.png new file mode 100644 index 00000000000..497f6a6e25d Binary files /dev/null and b/docs/build-release/tasks/deploy/_img/windows-machine-file-copy-icon.png differ diff --git a/docs/build-release/tasks/deploy/azure-app-service-deploy.md b/docs/build-release/tasks/deploy/azure-app-service-deploy.md new file mode 100644 index 00000000000..9f3138140ab --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-app-service-deploy.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureRmWebAppDeployment +--- diff --git a/docs/build-release/tasks/deploy/azure-app-service-manage.md b/docs/build-release/tasks/deploy/azure-app-service-manage.md new file mode 100644 index 00000000000..986c9011be0 --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-app-service-manage.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureAppServiceManage +--- diff --git a/docs/build-release/tasks/deploy/azure-cli.md b/docs/build-release/tasks/deploy/azure-cli.md new file mode 100644 index 00000000000..3eb509d4c37 --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-cli.md @@ -0,0 +1,80 @@ +--- +title: Team Services and Team Foundation Server Build and Deploy - Azure CLI +description: Team Services and Team Foundation Server build task step to run a shell or batch script containing Microsoft Azure CLI commands +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: C6F8437B-FF52-4EA1-BCB0-F34924303CA8 +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Deploy: Azure CLI + +**VSTS** + +![icon](_img/azure-cli-icon.png) Run a shell or batch +script containing Azure CLI commands against an Azure subscription. + +This task is used to run Azure CLI commands on +cross-platform agents running on Windows, Linux or Mac operating systems. + +The task is under development. If you encounter problems, or wish to +share feedback about the task and features you would like to see, +please [contact us](mailto:RM_Customer_Queries@microsoft.com). + +### What's new in Version 1.0 + +- Supports the new [AZ CLI 2.0](https://docs.microsoft.com/en-us/cli/azure/overview), which is Python based +- Works with Xplat agents (Windows, Linux or OSX) +- To work with [Azure CLI 1.0](https://docs.microsoft.com/en-us/azure/cli-install-nodejs), which is node based, switch to task version 0.0 +- Both versions of Azure-CLI can coexist in the same system, but task V1.0 logs into the Python based AZ CLI using the user's subscription, whereas task V0.0 logs into the node based Azure CLI. Therefore, scripts should include only the appropriate corresponding commands. +- Limitations: + - No support for Classic subscriptions. AZ CLI 2.0 supports only Azure Resource Manager (ARM) subscriptions + - Currently, Hosted agents do not have AZ CLI installed. You can either install using `npm install -g azure-cli` or use private agents with AZ CLI pre-installed + +## Demands + +None + +## Prerequisites + +* A Microsoft Azure subscription +* A service endpoint connection to your Azure account. You can use either: + - [Azure Classic service endpoint](../../concepts/library/service-endpoints.md#sep-azure-classic) + - [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm) +* Azure CLI installed on the computer(s) that run the build and release agent. + See [Install the Azure CLI](https://azure.microsoft.com/en-us/documentation/articles/xplat-cli-install/). + If an agent is already running on the machine on which the Azure CLI is installed, restart the agent to ensure all the relevent environment variables are updated. + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Azure Connection Type** | Required. Select the type of service endpoint used to define the connection to Azure. Choose **Azure Classic** or **Azure Resource Manager**. This parameter is shown only when the selected task version is 0.* as Azure CLI task v1.0 supports only Azure Resource Manager (ARM) subscriptions. +| **Azure Classic Subscription** | Required if you select **Azure Classic** for the **Azure Connection Type** parameter. The name of an [Azure Classic service endpoint](../../concepts/library/service-endpoints.md#sep-azure-classic) configured for the subscription where the target Azure service, virtual machine, or storage account is located. | +| **Azure RM Subscription** | Required if you select **Azure Resource Manager** for the **Azure Connection Type** parameter. The name of an [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm) configured for the subscription where the target Azure service, virtual machine, or storage account is located. See [Azure Resource Manager overview](https://azure.microsoft.com/en-in/documentation/articles/resource-group-overview/) for more details. | +| **Script Location** | Required. The way that the script is provided. Choose **Inline Script** or **Script Path** (the default). | +| **Inline Script** | Required if you select **Inline Script** for the **Script Location** parameter. Type or copy the script code to execute here. You can include [default variables](../../concepts/definitions/release/variables.md#default-variables), global variables, and environment variables. | +| **Script Path** | Required if you select **Script Path** for the **Script Location** parameter. The path to a linked artifact that is the **.bat**, **.cmd**, or **.sh** script you want to run. It can be a fully-qualified path, or a valid path relative to the default working directory. | +| **Arguments** | Optional. Any arguments you want to pass to the script. | +| **Advanced - Working Directory** | Optional. The working directory in which the script will execute. If not specified, this will be the folder containing the script file. | +| **Advanced - Fail on Standard Error** | Set this option if you want the build to fail if errors are written to the **StandardError** stream. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## Related tasks + +* [Azure Resource Group Deployment](azure-resource-group-deployment.md) +* [Azure Cloud Service Deployment](azure-cloud-service-deployment.md) +* [Azure Web App Deployment](azure-web-app-deployment.md) + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/deploy/azure-cloud-service-deployment.md b/docs/build-release/tasks/deploy/azure-cloud-service-deployment.md new file mode 100644 index 00000000000..72eb8762060 --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-cloud-service-deployment.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureCloudPowerShellDeployment +--- diff --git a/docs/build-release/tasks/deploy/azure-file-copy.md b/docs/build-release/tasks/deploy/azure-file-copy.md new file mode 100644 index 00000000000..c4d4e0c058a --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-file-copy.md @@ -0,0 +1,178 @@ +--- +title: Team Services and Team Foundation Server Build and Deploy - Azure File Copy +description: Team Services and Team Foundation Server build task step to copy files to Microsoft Azure storage blobs or virtual machines (VMs) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 22879225-BB1B-436A-ADF3-6E0B6E5E6EF4 +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Deploy: Azure File Copy + +[!INCLUDE [temp](../../_shared/version-tfs-2015-update.md)] + +![icon](_img/azure-file-copy-icon.png) Copy files to +Microsoft Azure storage blobs or virtual machines (VMs). + +The task is used to copy application files and other +artifacts that are required in order to install the +app; such as PowerShell scripts, PowerShell-DSC modules, +and more. + +When the target is Azure VMs, the files are first copied +to an automatically generated Azure blob container +and then downloaded into the VMs. The container is deleted +after the files have been successfully copied to the VMs. + +The task uses **AzCopy**, the command-line utility +built for fast copying of data from and into Azure storage accounts. + +To dynamically deploy Azure Resource Groups that +contain virtual machines, use the +[Azure Resource Group Deployment](azure-resource-group-deployment.md) task. This task +has a sample template that can perform the required +operations to set up the WinRM HTTPS +protocol on the virtual machines, open the 5986 port +in the firewall, and install the test certificate. + +## Demands + +
      +
    • none
    • +
    + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Source** | Required. The source of the files to copy. Pre-defined system variables such as ``` $(Build.Repository.LocalPath)``` can be used. Names containing wildcards such as ```*.zip``` are not supported. | +| **Azure Connection Type** | Required. Select the type of service endpoint used to define the connection to Azure. Choose **Azure Classic** or **Azure Resource Manager**. | +| **Azure Classic Subscription** | Required if you select **Azure Classic** for the **Azure Connection Type** parameter. The name of an [Azure Classic service endpoint](../../concepts/library/service-endpoints.md#sep-azure-classic) configured for the subscription where the target Azure service, virtual machine, or storage account is located. | +| **Azure RM Subscription** | Required if you select **Azure Resource Manager** for the **Azure Connection Type** parameter. The name of an [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm) configured for the subscription where the target Azure service, virtual machine, or storage account is located. See [Azure Resource Manager overview](https://azure.microsoft.com/en-in/documentation/articles/resource-group-overview/) for more details. | +| **Destination Type** | Required. The type of target destination for the files. Choose **Azure Blob** or **Azure VMs**. | +| **Classic Storage Account** | Required if you select **Azure Classic** for the **Azure Connection Type** parameter. The name of an existing storage account within the Azure subscription. | +| **RM Storage Account** | Required if you select **Azure Resource Manager** for the **Azure Connection Type** parameter. The name of an existing storage account within the Azure subscription. | +| **Container Name** | Required if you select **Azure Blob** for the **Destination Type** parameter. The name of the container to which the files will be copied. If a container with this name does not exist, a new one will be created. | +| **Blob Prefix** | Optional if you select **Azure Blob** for the **Destination Type** parameter. A prefix for the blob names, which can be used to filter the blobs. For example, using the build number enables easy filtering when downloading all blobs with the same build number. | +| **Cloud Service** | Required if you select **Azure Classic** for the **Azure Connection Type** parameter and **Azure VMs** for the **Destination Type** parameter. The name of the Azure cloud service in which the virtual machines run. | +| **Resource Group** | Required if you select **Azure Resource Manager** for the **Azure Connection Type** parameter and **Azure VMs** for the **Destination Type** parameter. The name of the Azure Resource Group in which the virtual machines run. | +| **Select Machines By** | Depending on how you want to specify the machines in the group when using the **Filter Criteria** parameter, choose **Machine Names** or **Tags**. | +| **Filter Criteria** | Optional. A list of machine names or tag names that identifies the machines that the task will target. The filter criteria can be:
    - The name of an Azure Resource Group.
    - An output variable from a previous task.
    - A comma-delimited list of tag names or machine names.
    Format when using machine names is a comma-separated list of the machine FDQNs or IP addresses.
    Specify tag names for a filter as {TagName}**:**{Value} Example: `Role:DB;OS:Win8.1` | +| **Admin Login** | Required if you select **Azure VMs** for the **Destination Type** parameter. The user name of an account that has administrative permissions for all the target VMs.
    - Formats such as **username**, **domain\username**, **machine-name\username**, and **.\username** are supported.
    - UPN formats such as **username@domain.com** and built-in system accounts such as **NT Authority\System** are not supported. | +| **Password** | Required if you select **Azure VMs** for the **Destination Type** parameter. The password for the account specified as the **Admin Login** parameter. Use the padlock icon for a variable defined in the **Variables** tab to protect the value, and insert the variable name here. | +| **Destination Folder** | Required if you select **Azure VMs** for the **Destination Type** parameter. The folder in the Azure VMs to which the files will be copied. Environment variables such as `$env:windir` and `$env:systemroot` are supported. Examples: ` $env:windir\FabrikamFiber\Web` and `c:\FabrikamFiber` | +| **Additional Arguments** | Optional. Any arguments you want to pass to the **AzCopy.exe** program for use when uploading to the blob and downloading to the VMs. See [Transfer data with the AzCopy Command-Line Utility](https://azure.microsoft.com/en-us/documentation/articles/storage-use-azcopy/) for more details. If you are using a Premium storage account, which supports only Azure page blobs, the pass `/BlobType:Page` as an additional argument. | +| **Enable Copy Prerequisites** | Available if you select **Azure Resource Manager** for the **Azure Connection Type** parameter and **Azure VMs** for the **Destination Type** parameter. Setting this option configures the Windows Remote Management (WinRM) listener over HTTPS protocol on port 5986, using a self-signed certificate. This configuration is required for performing copy operation on Azure virtual machines.
    - If the target virtual machines are accessed through a load balancer, ensure an inbound NAT rule is configured to allow access on port 5986.
    - If the target virtual machines are associated with a Network Security Group (NSG), configure an inbound security rule to allow access on port 5986. | +| **Copy in Parallel** | Available if you select **Azure VMs** for the **Destination Type** parameter. Setting this option causes the process to execute in parallel for the copied files. This can considerably reduce the overall time taken. | +| **Clean Target** | Available if you select **Azure VMs** for the **Destination Type** parameter. Setting this option causes all of the files in the destination folder to be deleted before the copy process starts. | +| **Test Certificate** | Available if you select **Azure VMs** for the **Destination Type** parameter. WinRM requires a certificate for the HTTPS transfer when copying files from the intermediate storage blob into the Azure VMs. If you set use a self-signed certificate, set this option to prevent the process from validating the certificate with a trusted certificate authority (CA). | +| **Output - Storage Container URI** | Optional. The name of a variable that will be updated with the URI of the storage container into which the files were copied. Use this variable as an input to subsequent task steps. | +| **Output - Storage Container SAS Token** | Optional. The name of a variable that will be updated with the Storage Access Security (SAS) token of the storage container into which the files were copied. Use this variable as an input to subsequent task steps. By default, the SAS token expires after 4 hours. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## Related tasks + +* [Azure Resource Group Deployment](azure-resource-group-deployment.md) +* [Azure Cloud Service Deployment](azure-cloud-service-deployment.md) +* [Azure Web App Deployment](azure-web-app-deployment.md) + + +## Q&A + + +#### What are the Azure PowerShell prerequisites for using this task? + +The task requires Azure PowerShell to be installed +on the machine running the automation agent. The +recommended version is 1.0.2, but the task will work +with version 0.9.8 and higher. You can use the +[Azure PowerShell Installer v1.0.2](https://github.com/Azure/azure-powershell/releases/tag/v1.0.2-December2015) +to obtain this. + +#### What are the WinRM prerequisites for this task? + +The task uses Windows Remote Management (WinRM) HTTPS protocol to +copy the files from the storage blob container to the Azure VMs. +This requires the WinRM HTTPS service to be configured on the VMs, +and a suitable certificate installed. + +If the VMs have been created without opening the +WinRM HTTPS ports, follow these steps: + +1. Configure an inbound access rule to allow HTTPS on port 5986 of each VM. +1. Disable [UAC remote restrictions](https://support.microsoft.com/en-us/kb/951016). +1. Specify the credentials for the task to access the VMs using an administrator-level login in the simple form **username** without any domain part. +1. Install a certificate on the machine that runs the automation agent. +1. Set the **Test Certificate** parameter of the task if you are using a self-signed certificate. + +For more details, see [this blog post](http://blogs.msdn.com/b/muthus_blog/archive/2015/11/04/pre-requisites-for-using-azure-vms-in-winrm-based-tasks-in-build-and-rm-workflows.aspx). + +#### What type of service endpoint should I choose? + +The following table lists the storage accounts and +the service endpoint connections that work with them. +To identify whether a storage account is based on +the classic APIs or the Resource Manager APIs, log +into the [Azure portal](https://portal.azure.com/) +and browse for **Storage accounts (Classic)** or +**Storage accounts**. + +| Storage account type | Azure Service Connections in TFS/TS | +| --- | --- | +| Resource Manager | Azure Resource Manager service endpoint | +| Classic | Azure service endpoint with certificate-based or credentials-based authentication using a school or work account | + + +* For Azure classic resources, use an **Azure** service endpoint + type with certificate or credentials-based authentication. + If you are using credentials-based authentication, + ensure that the credentials are for a + [school or work account](https://azure.microsoft.com/en-in/pricing/member-offers/msdn-benefits-details/work-accounts-faq/). + Microsoft accounts such as **joe@live.com** and + **joe@hotmail.com** are not supported. + +* For Azure Resource Manager VMs, use an **Azure Resource Manager** service + endpoint type. More details at [Automating Azure Resource Group deployment using a Service Principal](https://blogs.msdn.microsoft.com/visualstudioalm/2015/10/04/automating-azure-resource-group-deployment-using-a-service-principal-in-visual-studio-online-buildrelease-management/). + +* If you are using an **Azure Resource Manager** + service endpoint type, or an **Azure** service endpoint + type with certificate-based authentication, the task + automatically filters appropriate classic storage + accounts, the newer Azure Resource Manager storage + accounts, and other fields. For example, the Resource + Group or cloud service, and the virtual machines. + +* **Note**: Currently an **Azure** service endpoint type with + credentials-based authentication does not filter + the storage, Resource Group or cloud service, and + virtual machine fields. + +#### What happens if my Resource Group contains both Classic and Resource Manager VMs? + +If the specified Resource Group contains both +Azure Resource Manager and Classic VMs, the set of VMs that +will be targeted depends on the connection type. +For certificate-based connections and credentials-based +connections, the copy operation will be performed +only on Classic VMs. For Service Principal Name +based connections, the copy operation will be +performed on only Resource Manager VMs. + +#### How do I create a school or work account for use with this task? + +A suitable account can be easily created for use in a service endpoint: + +1. Use the Azure portal to create a new user account in Azure Active Directory. +1. Add the Azure Active Directory user account to the co-administrators group in your Azure subscription. +1. Sign into the Azure portal with this user account and change the password. +1. Use the username and password of this account in the service endpoint connection. Deployments will be processed using this account. + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/deploy/azure-key-vault.md b/docs/build-release/tasks/deploy/azure-key-vault.md new file mode 100644 index 00000000000..96804c084a4 --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-key-vault.md @@ -0,0 +1,110 @@ +--- +title: Build and Deploy - Azure Key Vault task +description: VSTS ands TFS build task step to download secrets from an Azure key vault +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 591A3606-F693-4DDD-9E9D-9F11BDD48C51 +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Deploy: Azure Key Vault + +### Overview + +![icon](_img/azure-key-vault-icon.png) This task is used to download secrets such as authentication keys, storage account keys, data encryption keys, .PFX files, and passwords +from an [Azure Key Vault](https://docs.microsoft.com/en-us/rest/api/keyvault/about-keys--secrets-and-certificates?redirectedfrom=MSDN#key-vault-secrets-1) instance. +The task can be used to fetch the latest values of all or a subset of secrets from the vault, and set them as variables that can be used in subsequent tasks of a definition. +The task is Node-based, and works with Xplat agents (Windows, Linux, or OSX). + +## Pre-requisites for the task + +The task has the following pre-requisites: + +* An Azure subscription linked to Team Foundation Server or VSTS using the [Azure Resource Manager service endpoint](../../concepts/library/service-endpoints.md#sep-azure-rm). + +* An [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/) containing the secrets. + +You can create a key vault: + +* In the [Azure portal](https://ms.portal.azure.com/#create/Microsoft.KeyVault) + +* By using [Azure PowerShell](https://docs.microsoft.com/en-us/azure/key-vault/key-vault-get-started#a-idvaultacreate-a-key-vault) + +* By using the [Azure CLI](https://docs.microsoft.com/en-us/azure/key-vault/key-vault-manage-with-cli2#create-a-key-vault) + +Add secrets to a key vault: + +* By using the PowerShell cmdlet [Set-AzureKeyVaultSecret](https://docs.microsoft.com/en-us/powershell/module/azurerm.keyvault/set-azurekeyvaultsecret?view=azurermps-4.0.0). + If the secret does not exist, this cmdlet creates it. If the secret already exists, this cmdlet creates a new version of that secret. + +* By using the Azure CLI. To add a secret to a key vault, for example a secret named **SQLPassword** with the value **Pa$$w0rd**, type: + + `az keyvault secret set --vault-name 'ContosoKeyVault' --name 'SQLPassword' --value 'Pa$$w0rd'` + +When you want to access secrets: + +* Ensure the Azure endpoint has at least **Get** and **List** permissions + on the vault. You can set these permissions in the [Azure portal](https://portal.azure.com): + + - Open the **Settings** blade for the vault, choose **Access policies**, then **Add new**. + + - In the **Add access policy** blade, choose **Select principal** and select the service principal for your client account. + + - In the **Add access policy** blade, choose **Secret permissions** and ensure that **Get** and **List** are checked (ticked). + + - Choose **OK** to save the changes.

    + +### Parameters of the task: + +| Parameter | Description | +| --------- | ----------- | +| **Azure Subscription** | Required. Select the service connection for the Azure subscription containing the Azure Key Vault instance, or create a new connection. [Learn more](../../concepts/library/service-endpoints.md#sep-azure-rm) | +| **Key Vault** | Required. Select the name of the Azure Key Vault from which the secrets will be downloaded. | +| **Secrets filter** | Required. A comma-separated list of secret names to be downloaded. Use the default value `*` to download all the secrets from the vault. | + +> [!NOTE] +> Values are retrieved as strings. For example, if there is a secret named **connectionString**, +> a task variable `connectionString` is created with the latest value of the respective secret +> fetched from Azure key vault. This variable is then available in subsequent tasks. + +If the value fetched from the vault is a certificate (for example, a PFX file), the task variable +will contain the contents of the PFX in string format. You can use the following PowerShell code +to retrieve the PFX file from the task variable: + +```powershell +$kvSecretBytes = [System.Convert]::FromBase64String($(PfxSecret)) +$certCollection = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2Collection +$certCollection.Import($kvSecretBytes,$null,[System.Security.Cryptography.X509Certificates.X509KeyStorageFlags]::Exportable) +``` + +If the certificate file will be stored locally on the machine, it is good practice +to encrypt it with a password: + +```powershell + #Get the file created +$password = 'your password' +$protectedCertificateBytes = $certCollection.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Pkcs12, $password) +$pfxPath = [Environment]::GetFolderPath("Desktop") + "\MyCert.pfx" +[System.IO.File]::WriteAllBytes($pfxPath, $protectedCertificateBytes) +``` + +For more details, see [Get started with Azure Key Vault certificates](https://blogs.technet.microsoft.com/kv/2016/09/26/get-started-with-azure-key-vault-certificates). + +## Contact Information + +Contact [RM\_Customer\_Queries@microsoft.com](mailto:RM_Customer_Queries@microsoft.com) if you discover issues using the task, to share feedback about the task, +or to suggest new features that you would like to see. + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] + diff --git a/docs/build-release/tasks/deploy/azure-powershell.md b/docs/build-release/tasks/deploy/azure-powershell.md new file mode 100644 index 00000000000..bff4628c1eb --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-powershell.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzurePowerShell +--- diff --git a/docs/build-release/tasks/deploy/azure-resource-group-deployment.md b/docs/build-release/tasks/deploy/azure-resource-group-deployment.md new file mode 100644 index 00000000000..cdabfd4f1bd --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-resource-group-deployment.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureResourceGroupDeployment +--- diff --git a/docs/build-release/tasks/deploy/azure-sql-database-deployment.md b/docs/build-release/tasks/deploy/azure-sql-database-deployment.md new file mode 100644 index 00000000000..f01f3c7e40d --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-sql-database-deployment.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/SqlAzureDacpacDeployment +--- diff --git a/docs/build-release/tasks/deploy/azure-web-app-deployment.md b/docs/build-release/tasks/deploy/azure-web-app-deployment.md new file mode 100644 index 00000000000..9f3138140ab --- /dev/null +++ b/docs/build-release/tasks/deploy/azure-web-app-deployment.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureRmWebAppDeployment +--- diff --git a/docs/build-release/tasks/deploy/copy-files-over-ssh.md b/docs/build-release/tasks/deploy/copy-files-over-ssh.md new file mode 100644 index 00000000000..adafc1be865 --- /dev/null +++ b/docs/build-release/tasks/deploy/copy-files-over-ssh.md @@ -0,0 +1,56 @@ +--- +title: Copy Files Over SSH task +description: Copy Files Over SSH build and release task for Microsoft VSTS and Microsoft Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 7ff495cf-2d1f-4baa-a052-d176bd507ef4 +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Deploy: Copy Files Over SSH + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![icon](_img/copy-files-over-ssh.png) Copy files from source folder to target folder on a remote machine over SSH. + +This task allows you to connect to a remote machine using SSH and copy files matching a set of minimatch patterns from specified source folder to target folder on the remote machine. +Supported protocols for file transfer are SFTP and SCP via SFTP. + +## Prerequisites + +* The task supports use of an SSH key pair to connect to the remote machine(s). +* The public key must be pre-installed or copied to the remote machine(s). + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **SSH endpoint** | The name of an SSH service endpoint containing connection details for the remote machine.
    - The hostname or IP address of the remote machine, the port number, and the user name are required to create an SSH endpoint.
    - The private key and the passphrase must be specified for authentication.
    - A password can be used to authenticate to remote Linux machines, but this is not supported for Mac or OSX systems. | +| **Source folder** | The source folder for the files to copy to the remote machine. If omitted, the root of the repository is used. Names containing wildcards such as `*.zip` are not supported. Use [variables](../../concepts/definitions/build/variables.md) if files are not in the repository. Example: `$(Agent.BuildDirectory)` | +| **Contents** | File paths to include as part of the copy. Supports multiple lines of [minimatch patterns](../file-matching-patterns.md). Default is `**` which includes all files (including sub folders) under the source folder.
    - Example: `**/*.jar \n **/*.war` includes all jar and war files (including sub folders) under the source folder.
    - Example: `** \n !**/*.xml` includes all files (including sub folders) under the source folder but excludes xml files. | +| **Target folder** | Target folder on the remote machine to where files will be copied. Example: `/home/user/MySite`. Preface with a tilde (**~**) to specify the user's home directory. | +| **Advanced - Clean target folder** | If this option is selected, all existing files in the target folder will be deleted before copying. | +| **Advanced - Overwrite** | If this option is selected (the default), existing files in the target folder will be replaced. | +| **Advanced - Flatten folders** | If this option is selected, the folder structure is not preserved and all the files will be copied into the specified target folder on the remote machine. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## See also + +* [Install SSH Key task](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/InstallSSHKey) + +* [SSH task](ssh.md) + +* Blog post [SSH build task](https://blogs.msdn.microsoft.com/visualstudioalm/2016/07/30/ssh-build-task/) + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/deploy/deploy-to-kubernetes.md b/docs/build-release/tasks/deploy/deploy-to-kubernetes.md new file mode 100644 index 00000000000..63f8563ebbb --- /dev/null +++ b/docs/build-release/tasks/deploy/deploy-to-kubernetes.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/Kubernetes +--- diff --git a/docs/build-release/tasks/deploy/docker-deploy.md b/docs/build-release/tasks/deploy/docker-deploy.md new file mode 100644 index 00000000000..0913017eacd --- /dev/null +++ b/docs/build-release/tasks/deploy/docker-deploy.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/Docker +--- diff --git a/docs/build-release/tasks/deploy/iis-deploy.md b/docs/build-release/tasks/deploy/iis-deploy.md new file mode 100644 index 00000000000..24802ac07c7 --- /dev/null +++ b/docs/build-release/tasks/deploy/iis-deploy.md @@ -0,0 +1,86 @@ +--- +title: VSTS and TFS Build and Deploy - IIS Web App Deploy task +description: Team Services and Team Foundation Server build and release task for Microsoft VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 69A09C16-9113-45AC-A058-BC5E12412C62 +ms.manager: douge +ms.author: ahomer +ms.date: 05/03/2017 +--- + +# Deploy: IIS Web App Deploy + +[!INCLUDE [version-team-services](../../_shared/version-team-services.md)] + +![icon](_img/iis-deploy-icon.png) Deploy a Website or Web Application. + +Use this task to deploy IIS Websites and Virtual Applications using WebDeploy. +Supports file transforms and variable substitution, removing additional files at destination, +excluding files from App_Data, and taking the app offline. + +>To use this task, you must first install the +[IIS Web App Deployment Using WinRM extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.iiswebapp) +from Visual Studio Marketplace. + +## Basic arguments + +| Argument | Description | +| -------- | ----------- | +| **Website name** | The display name of the existing IIS Website or IIS Web Application to deploy to. | +| **Virtual Application** | The name of existing virtual application. You can use the [IIS Web App Manage task](iis-manage.md) to create an IIS Website or an IIS Web Application. | +| **Package or Folder** | The folder or file path to the web app package to deploy. Build and Release variables and wild cards are supported. Example: `$(System.DefautlWorkingDirectory\**\*.zip)` | + +## File Transforms and Variable Substitution options + +| Argument | Description | +| -------- | ----------- | +| **XML transformation** | Set this option to specify that [configuration transforms](../transforms-variable-substitution.md) will run for `*.Release.config` and `*..config` on the `*.config file`. Configuration transforms will run prior to the XML variable substitution. XML transforms are supported for only Windows platforms. | +| **XML variable substitution** | Set this option to specify that variables defined in the Build or Release definition will be matched against the **key** or **name** entries in the `appSettings`, `applicationSettings`, and `connectionStrings` sections of any configuration file and **parameters.xml**. [Variable substitution](../transforms-variable-substitution.md) runs after Configuration transforms. **Note**: If same variables are defined in the Release definition and in the Environment, the Environment variables supersede the Release definition variables. | +| **JSON variable substitution** | Enter a newline-separated list of JSON files to [substitute the variable values](../transforms-variable-substitution.md). Build and Release system definition variables are excluded from substitution. Files names must be relative to the root folder. Variable substitution runs after Configuration transforms.| + +To substitute JSON variables that are nested or hierarchical, specify them using JSONPath expressions. For example, to replace the value of `ConnectionString` in the sample below, you must define a variable as `Data.DefaultConnection.ConnectionString` in the build or release definition (or the release definition's environment): + +```json +{ + "Data": + { + "DefaultConnection": + { + "ConnectionString": "Server=(localdb)\SQLEXPRESS;Database=MyDB;Trusted_Connection=True" + } + } +} +``` + +## Advanced Deployment options + +| Argument | Description | +| -------- | ----------- | +| **SetParameters File** | Optional. Location of the **SetParameters.xml** file to use. | +| **Remove Additional Files at Destination** | Set this option to delete files in the Website or Web Application that have no matching files in the Web App zip package. | +| **Exclude Files from the App_Data Folder** | Set this option to prevent files in the **App_Data** folder from being deployed. | +| **Take App Offline** | Set this option to take the website or app offline by placing an **app_offline.htm** file in the root directory before the deployment begins. The file will be removed after the synchronization operation completes successfully. | +| **Additional Arguments** | Additional Web Deploy arguments that will be applied when deploying the website or app. Examples: `-disableLink:AppPoolExtension` and `-disableLink:ContentExtension` | + +## Control options + +| Argument | Description | +| -------- | ----------- | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +This task is contained in the +[IIS Web App Deployment Using WinRM extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.iiswebapp) +available from Visual Studio Marketplace. For an example of it's use, see: + +* [Deploy your Web Deploy package to IIS servers](../../apps/cd/deploy-webdeploy-iis-deploygroups.md) +* [Deploy your Web Deploy package to IIS servers using WinRM](../../apps/cd/deploy-webdeploy-iis-winrm.md) + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/deploy/iis-manage.md b/docs/build-release/tasks/deploy/iis-manage.md new file mode 100644 index 00000000000..f3de22c6881 --- /dev/null +++ b/docs/build-release/tasks/deploy/iis-manage.md @@ -0,0 +1,141 @@ +--- +title: Build and Deploy - IIS Web App Manage task +description: VSTS and TFS build task step to create or update, start or stop IIS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 96E96D35-71D9-4A15-AA34-B9355D05AD98 +ms.manager: douge +ms.author: ahomer +ms.date: 05/03/2017 +--- + +# Deploy: IIS Web App Manage + +[!INCLUDE [version-team-services](../../_shared/version-team-services.md)] + +![icon](_img/iis-manage-icon.png) Manage an IIS Website. + +Use this task to create or update, start or stop, and recycle IIS Websites, IIS Web Applications, +Virtual Directories, and IIS Application Pools. Supports adding application pools, and +configuring bindings and authentication. + +>To use this task, you must first install the +[IIS Web App Deployment Using WinRM extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.iiswebapp) +from Visual Studio Marketplace. + +## Basic options + +| Argument | Description | +| -------- | ----------- | +| **Configuration type** | Choose whether you want to manage an [IIS Website](#website-args), an [IIS Web Application](#webapp-args), an [IIS Virtual Directory](#virtdir-args), or an [IIS Application Pool](#app-pool-args). An IIS Virtual Directory or an IIS Web Application is created as a child of an existing IIS Website. | +| **Action** | Available when **Configuration type** is `IIS Website` or `IIS Application Pool`. Select the action to be performed. `Create or Update`, `Start`, `Stop`, and `Recycle` actions are supported based on the **Configuration type** selected. | + + +## Parameters for IIS Website configuration + +| Argument | Description | +| -------- | ----------- | +| **Website name** | The display name of the IIS Website to create or reconfigure. | +| **Physical path** | The physical path where the content of the website will be stored. The content can reside on the local computer, in a remote directory, or on a network share. Examples: `C:\Fabrikam` and `\ContentShare\Fabrikam` | +| **Physical path authentication** | Select the authentication mechanism that will be used to access the physical path of the website. Options are `Application User (Pass-through)` and `Windows Authentication` (which requires a username and password). | +| **Username** | The Windows or domain account that will be used to access the physical path. Example: `YOURDOMAIN\YourAccount` | +| **Password** | The password for the account. Good practice is to create a variable in the build or release definition, mark it as 'Secret' to secure it, and use it here. Example: `$(userCredentials)`. Note: special characters in passwords are interpreted as described in [Parsing C Command-Line Arguments](https://docs.microsoft.com/en-us/cpp/c-language/parsing-c-command-line-arguments). | +| **Add binding** | Set this option to add a port binding for the website. See [Binding arguments](#binding-args)| +| **Create or update app pool** | Set this option to create or update the application pool. If checked, the website will be created in the specified application pool. See [IIS Application pool arguments](#app-pool-args). | +| **Configure authentication** | Set this option to configure authentication for the website. See [Authentication options](#auth-options). | + +Also see [Advanced options](#advanced-opts) and [Control options](../../concepts/process/tasks.md#controloptions) + + +## Parameters for IIS Application configuration + +| Argument | Description | +| -------- | ----------- | +| **Parent website name** | The display name of the parent IIS Website under which the application will be created or updated. | +| **Virtual path** | Enter the virtual path in IIS relative to the parent website. The parent website must already exist. Example: to create an application named **Site/Application** enter `/Application`. | +| **Physical path** | The physical path where the content of the web application will be stored. The content can reside on the local computer, in a remote directory, or on a network share. Examples: `C:\Fabrikam` and `\ContentShare\Fabrikam` | +| **Physical path authentication** | Select the authentication mechanism that will be used to access the physical path of the web application. Options are `Application User (Pass-through)` and `Windows Authentication` (which requires a username and password). | +| **Username** | The Windows or domain account that will be used to access the physical path. Example: `YOURDOMAIN\YourAccount` | +| **Password** | The password for the account. Good practice is to create a variable in the build or release definition, mark it as 'Secret' to secure it, and use it here. Example: `$(userCredentials)`. Note: special characters in passwords are interpreted as described in [Parsing C Command-Line Arguments](https://docs.microsoft.com/en-us/cpp/c-language/parsing-c-command-line-arguments). | +| **Add binding** | Set this option to add a port binding for the application. See [Binding arguments](#binding-args)| +| **Create or update app pool** | Set this option to create or update the application pool. If checked, the application will be created in the specified application pool. See [IIS Application pool arguments](#app-pool-args). | + +Also see [Advanced options](#advanced-opts) and [Control options](../../concepts/process/tasks.md#controloptions) + + +## Parameters for IIS Virtual Directory configuration + +| Argument | Description | +| -------- | ----------- | +| **Parent website name** | The display name of the parent IIS Website under which the virtual directory will be created or updated. | +| **Virtual path** | Enter the virtual path in IIS relative to the parent website. The parent website and application must already exist. Example: to create a virtual directory named **Site/Application/VDir** enter `/Application/Vdir`. | +| **Physical path** | The physical path where the content of the virtual directory will be stored. The content can reside on the local computer, in a remote directory, or on a network share. Examples: `C:\Fabrikam` and `\ContentShare\Fabrikam` | +| **Physical path authentication** | Select the authentication mechanism that will be used to access the physical path of the virtual directory. Options are `Application User (Pass-through)` and `Windows Authentication` (which requires a username and password). | +| **Username** | The Windows or domain account that will be used to access the physical path. Example: `YOURDOMAIN\YourAccount` | +| **Password** | The password for the account. Good practice is to create a variable in the build or release definition, mark it as 'Secret' to secure it, and use it here. Example: `$(userCredentials)`. Note: special characters in passwords are interpreted as described in [Parsing C Command-Line Arguments](https://docs.microsoft.com/en-us/cpp/c-language/parsing-c-command-line-arguments). | + +Also see [Advanced options](#advanced-opts) and [Control options](../../concepts/process/tasks.md#controloptions) + + +## IIS Application Pool arguments for all configurations + +| Argument | Description | +| -------- | ----------- | +| **Name** | The display name of the application pool to create or update. | +| **.NET version** | The version of the .NET common language runtime that is loaded by the application pool. Choose `v2.0` for applications built against .NET 2.0, 3.0 or 3.5. Choose `v4.0` for .NET 4.0 or 4.5. If the applications assigned to this application pool do not contain managed code, select `No Managed Code`. | +| **Managed pipeline mode** | Select the mode that specifies how IIS processes requests for managed content. Use `Classic` mode only when the applications in the application pool cannot run in the `Integrated` mode. | +| **Identity** | Configure the built-in account under which an application pool's worker process runs. Select one of the predefined security accounts or configure a custom account. | +| **Username** | The Windows or domain account that the application pool will run under. Ensure that this account has permission to run as an application pool. Example: `YOURDOMAIN\YourAccount`. | +| **Password** | The password for the account. Good practice is to create a variable in the build or release definition, mark it as 'Secret' to secure it, and use it here. Example: `$(userCredentials)`. Note: special characters in passwords are interpreted as described in [Parsing C Command-Line Arguments](https://docs.microsoft.com/en-us/cpp/c-language/parsing-c-command-line-arguments). | + +Also see [Advanced options](#advanced-opts) and [Control options](../../concepts/process/tasks.md#controloptions) + + +## Binding arguments for all configurations + +| Argument | Description | +| -------- | ----------- | +| **Protocol** | Select `HTTP` or `HTTPS` | +| **IP address** | Enter an IP address that can be used to access this website or application. If `All Unassigned` is selected, the website or application will respond to requests for all IP addresses on the port and for the host name, unless another website on the server has a binding on the same port but with a specific IP address. | +| **Port** | Specify the port where the Hypertext Transfer Protocol Stack (HTTP.sys) will listen for requests. | +| **Server Name Indication required** | Set this option to specify Server Name Indication (SNI) for the website or application. SNI extends the SSL and TLS protocols to indicate the host name that the clients are attempting to connect to. It allows multiple secure websites with different certificates to use the same IP address. | +| **Host name** | Enter a host name (or domain name) for the website or application. Leave empty to use any host header. If a host name is specified, clients can use the host name instead of the IP address to access the website. Example: `www.contoso.com`. | +| **SSL certificate thumbprint** | The thumbprint of the certificate that the website or application will use for the HTTPS communication, as a 40-character hexadecimal string. The certificate must already be installed on the computer in the **Local Computer - Personal** store. | + + +## Authentication options for all configurations + +| Argument | Description | +| -------- | ----------- | +| **Anonymous authentication** | Set this option to enable anonymous authentication for the website. | +| **Basic authentication** | Set this option to enable basic authentication for the website. | +| **Windows authentication** | Set this option to enable Windows authentication for the website. | + + +## Advanced options + +| Argument | Description | +| -------- | ----------- | +| **Additional appcmd.exe commands** | Enter any additional AppCmd.exe commands. For more than one command, place each on a new line. Examples: `list apppools`, `list sites`, `recycle apppool /apppool.name:ExampleAppPoolName` | + +## Control options + +| Argument | Description | +| -------- | ----------- | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +This task is contained in the +[IIS Web App Deployment Using WinRM extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.iiswebapp) +available from Visual Studio Marketplace. For an example of it's use, see: + +* [Deploy your Web Deploy package to IIS servers](../../apps/cd/deploy-webdeploy-iis-deploygroups.md) +* [Deploy your Web Deploy package to IIS servers using WinRM](../../apps/cd/deploy-webdeploy-iis-winrm.md) + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/deploy/mobile-center-upload.md b/docs/build-release/tasks/deploy/mobile-center-upload.md new file mode 100644 index 00000000000..fc6f81a05cb --- /dev/null +++ b/docs/build-release/tasks/deploy/mobile-center-upload.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/MobileCenterDistribute +--- diff --git a/docs/build-release/tasks/deploy/powershell-on-target-machines.md b/docs/build-release/tasks/deploy/powershell-on-target-machines.md new file mode 100644 index 00000000000..c11842942d0 --- /dev/null +++ b/docs/build-release/tasks/deploy/powershell-on-target-machines.md @@ -0,0 +1,56 @@ +--- +description: PowerShell on Target Machines build task +title: PowerShell on Target Machines build and release task for Microsoft VSTS and Microsoft Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 7E6E54ED-4605-471A-B1E6-9D00C10CA66E +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Deploy: PowerShell on Target Machines + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/powershell-on-target-machines-icon.png) Execute PowerShell scripts on remote machine(s). + +This task can run both PowerShell scripts and PowerShell-DSC scripts. + +* For PowerShell scripts, the computers must have PowerShell 2.0 or higher installed. +* For PowerShell-DSC scripts, the computers must have + [Windows Management Framework 4.0](https://www.microsoft.com/en-in/download/details.aspx?id=40855&40ddd5bd-f9e7-49a6-3526-f86656931a02=True) + installed. This is installed by default on Windows 8.1, Windows Server 2012 R2, and later. + +## Prerequisites + +[!INCLUDE[deploy-winrm-setup](../_shared/deploy-winrm-setup.md)] + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Machines** | A comma-separated list of machine FQDNs or IP addresses, optionally including the port number. Can be:
    - The name of an Azure Resource Group.
    - A comma-delimited list of machine names. Example: `dbserver.fabrikam.com,dbserver_int.fabrikam.com:5986,192.168.34:5986`
    - An output variable from a previous task.
    If you do not specify a port, the default WinRM port is used. This depends on the protocol you have configured: for WinRM 2.0, the default HTTP port is 5985 and the default HTTPS port is 5986. | +| **Admin Login** | The username of either a domain or a local administrative account on the target host(s).
    - Formats such as **username**, **domain\username**, **machine-name\username**, and **.\username** are supported.
    - UPN formats such as **username@domain.com** and built-in system accounts such as **NT Authority\System** are not supported. | +| **Password** | The password for the administrative account specified above. Consider using a secret variable global to the build or release definition to hide the password. Example: `$(passwordVariable)` | +| **Protocol** | The protocol that will be used to connect to the target host, either **HTTP** or **HTTPS**. | +| **Test Certificate** | If you choose the **HTTPS** option, set this checkbox to skip validating the authenticity of the machine's certificate by a trusted certification authority. | +| **Deployment - PowerShell Script** | The location of the PowerShell script on the target machine. Can include environment variables such as `$env:windir` and `$env:systemroot` Example: `C:\FabrikamFibre\Web\deploy.ps1` | +| **Deployment - Script Arguments** | The arguments required by the script, if any. Example: `-applicationPath $(applicationPath) -username $(vmusername) -password $(vmpassword)` | +| **Deployment - Initialization Script** | The location on the target machine(s) of the data script used by PowerShell-DSC. It is recommended to use arguments instead of an initialization script. | +| **Deployment - Session Variables** | Used to set up the session variables for the PowerShell scripts. A comma-separated list such as `$varx=valuex, $vary=valuey` Most commonly used for backward compatibility with earlier versions of Release Management. It is recommended to use arguments instead of session variables. | +| **Advanced - Run PowerShell in Parallel** | Set this option to execute the PowerShell scripts in parallel on all the target machines | +| **Advanced - Select Machines By** | Depending on how you want to specify the machines in the group when using the **Filter Criteria** parameter, choose **Machine Names** or **Tags**. | +| **Advanced - Filter Criteria** | Optional. A list of machine names or tag names that identifies the machines that the task will target. The filter criteria can be:
    - The name of an Azure Resource Group.
    - An output variable from a previous task.
    - A comma-delimited list of tag names or machine names.
    Format when using machine names is a comma-separated list of the machine FDQNs or IP addresses.
    Specify tag names for a filter as {TagName}:{Value} Example: `Role:DB;OS:Win8.1` | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/deploy/service-fabric-compose-deploy.md b/docs/build-release/tasks/deploy/service-fabric-compose-deploy.md new file mode 100644 index 00000000000..9b3a77f108f --- /dev/null +++ b/docs/build-release/tasks/deploy/service-fabric-compose-deploy.md @@ -0,0 +1,53 @@ +--- +description: Service Fabric Compose Deploy Deployment task +title: Service Fabric Compose Deploy build and release task for Microsoft VSTS and Microsoft Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 891A8845-6EC1-4A70-B187-BBF9416AB41F +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Deploy: Service Fabric Compose Deploy + +![icon](_img/azure-service-fabric.png) Deploy a Docker-compose application to a Service Fabric cluster. + +This task deploys an Azure Service Fabric application to a cluster according to the settings defined in the compose file. + +## Prerequisites + +NOTE: This task is currently in preview and requires a preview version of Service Fabric that supports compose deploy. +See [https://docs.microsoft.com/azure/service-fabric/service-fabric-docker-compose](https://docs.microsoft.com/azure/service-fabric/service-fabric-docker-compose). + +### Service Fabric + +* This task uses a Service Fabric installation to connect and deploy to a Service Fabric cluster. + +* [Azure Service Fabric Core SDK](http://www.microsoft.com/web/handlers/webpi.ashx?command=getinstallerredirect&appid=MicrosoftAzure-ServiceFabric-CoreSDK) on the build agent. + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Cluster Connection** | The Azure Service Fabric service endpoint to use to connect and authenticate to the cluster. | +| **Compose File Path** | Path to the compose file that is to be deployed. Can include wildcards and variables. Example: `$(System.DefaultWorkingDirectory)/**/drop/projectartifacts/**/docker-compose.yml`. **Note**: combining compose files is not supported as part of this task. | +| **Application Name** | The Service Fabric Application Name of the application being deployed. Use `fabric:/` as a prefix. Application Names within a Service Fabric cluster must be unique. | +| **Registry Credentials Source** | Specifies how credentials for the Docker container registry will be provided to the deployment task:
    **Azure Resource Manager Endpoint**: An Azure Resource Manager service endpoint and Azure subscription to be used to obtain a service principal ID and key for an Azure Container Registry.
    **Container Registry Endpoint**: A Docker registry connection endpoint. If a certificate matching the Server Certificate Thumbprint in the Cluster Connection is installed on the build agent, it will be used to encrypt the password; otherwise the password will not be encrypted and sent in clear text.
    **Username and Password**: Username and password to be used. We recommend you encrypt your password using `Invoke-ServiceFabricEncryptText` (Check **Password Encrypted**). If you do not, and a certificate matching the Server Certificate Thumbprint in the Cluster Connection is installed on the build agent, it will be used to encrypt the password; otherwise the password will not be encrypted and sent in clear text.
    **None**: No registry credentials are provided (used for accessing public container registries). | +| **Deploy Timeout (s)** | Timeout in seconds for deploying the application. | +| **Remove Timeout (s)** | Timeout in seconds for removing an existing application. | +| **Get Status Timeout (s)** | Timeout in seconds for getting the status of an existing application. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +Also see: [Service Fabric PowerShell Utility ](../utility/service-fabric-powershell.md) + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/deploy/service-fabric-deploy.md b/docs/build-release/tasks/deploy/service-fabric-deploy.md new file mode 100644 index 00000000000..f25dc9358ac --- /dev/null +++ b/docs/build-release/tasks/deploy/service-fabric-deploy.md @@ -0,0 +1,48 @@ +--- +description: Service Fabric Application Deployment task +title: Service Fabric Application Deployment build and release task for Microsoft VSTS and Microsoft Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 82493BC9-241C-491F-9B42-075FD0E33b52 +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Deploy: Service Fabric Application Deployment + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![icon](_img/azure-service-fabric.png) Deploy a Service Fabric application to a cluster. + +This task deploys an Azure Service Fabric application to a cluster +according to the settings defined in the publish profile. + +## Prerequisites + +### Service Fabric +This task uses a Service Fabric installation to connect and +deploy to a Service Fabric cluster. +[Download and install Service Fabric](https://aka.ms/servicefabric) on the build agent. + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Publish Profile** | The location of the publish profile that specifies the settings to use for deployment, including the location of the target Service Fabric cluster. Can include wildcards and variables. Example:
    `$(system.defaultworkingdirectory)/**/drop/projectartifacts/**/PublishProfiles/Cloud.xml` | +| **Application Package** | The location of the Service Fabric application package to be deployed to the cluster. Can include wildcards and variables. Example: `$(system.defaultworkingdirectory)/**/drop/applicationpackage` | +| **Cluster Connection** | The name of the Azure Service Fabric service endpoint defined in the TS/TFS project that describes the connection to the cluster. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +Also see: [Update Service Fabric App Versions task](../utility/service-fabric-versioning.md) + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/deploy/sql-server-database-deployment.md b/docs/build-release/tasks/deploy/sql-server-database-deployment.md new file mode 100644 index 00000000000..4a39a421f0f --- /dev/null +++ b/docs/build-release/tasks/deploy/sql-server-database-deployment.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/SqlDacpacDeploymentOnMachineGroup +--- diff --git a/docs/build-release/tasks/deploy/ssh.md b/docs/build-release/tasks/deploy/ssh.md new file mode 100644 index 00000000000..912ea5a2522 --- /dev/null +++ b/docs/build-release/tasks/deploy/ssh.md @@ -0,0 +1,54 @@ +--- +title: SSH task +description: SSH build and release task for Microsoft VSTS and Microsoft Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: dcd2ed8f-5bc6-4fc5-8787-4d9f6fe63f65 +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Deploy: SSH + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![icon](_img/ssh.png) Run shell commands or a script on a remote machine using SSH. + +This task enables you to connect to a remote machine using SSH and run commands or a script. + +## Prerequisites + +* The task supports use of an SSH key pair to connect to the remote machine(s). +* The public key must be pre-installed or copied to the remote machine(s). + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **SSH endpoint** | The name of an SSH service endpoint containing connection details for the remote machine. The hostname or IP address of the remote machine, the port number, and the user name are required to create an SSH endpoint.
    - The private key and the passphrase must be specified for authentication.
    - A password can be used to authenticate to remote Linux machines, but this is not supported for Mac or OSX systems. | +| **Run** | Choose to run either shell commands or a shell script on the remote machine. | +| **Commands** | The shell commands to run on the remote machine. This parameter is available only when **Commands** is selected for the **Run** option. Enter each command together with its arguments on a new line of the multi-line textbox. To run multiple commands together, enter them on the same line separated by semicolons. Example: `cd /home/user/myFolder;build` | +| **Shell script path** | Path to the shell script file to run on the remote machine. This parameter is available only when **Shell script** is selected for the **Run** option. | +| **Arguments** | The arguments to pass to the shell script. This parameter is available only when **Shell script** is selected for the **Run** option. | +| **Advanced - Fail on STDERR** | If this option is selected (the default), the build will fail if the remote commands or script write to **STDERR**. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +##See also + +* [Install SSH Key task](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/InstallSSHKey) + +* [Copy Files Over SSH](copy-files-over-ssh.md) + +* Blog post [SSH build task](https://blogs.msdn.microsoft.com/visualstudioalm/2016/07/30/ssh-build-task/) + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/deploy/windows-machine-file-copy.md b/docs/build-release/tasks/deploy/windows-machine-file-copy.md new file mode 100644 index 00000000000..800aaae7a02 --- /dev/null +++ b/docs/build-release/tasks/deploy/windows-machine-file-copy.md @@ -0,0 +1,48 @@ +--- +description: Windows Machine File Copy build task +title: Windows Machine File Copy build and release task for Microsoft VSTS and Microsoft Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 1451866C-180E-4D8A-88ED-3B76BC30C09F +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Deploy: Windows Machine File Copy + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/windows-machine-file-copy-icon.png) Copy files to remote machines. + +Use this task to copy application files and other artifacts such as +PowerShell scripts and PowerShell-DSC modules that are required to +install the application on Windows Machines. It uses RoboCopy, the +command-line utility built for fast copying of data. + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Source** | The path to the files to copy. Can be a local physical path such as `c:\files` or a UNC path such as `\\myserver\fileshare\files`. You can use pre-defined system variables such as `$(Build.Repository.LocalPath)` (the working folder on the agent computer), which makes it easy to specify the location of the build artifacts on the computer that hosts the automation agent. | +| **Machines** | A comma-separated list of machine FQDNs or IP addresses, optionally including the port number. Can be:
    - The name of an Azure Resource Group.
    - A comma-delimited list of machine names. Example: `dbserver.fabrikam.com, dbserver_int.fabrikam.com:5986,192.168.34:5986`
    - An output variable from a previous task. | +| **Admin Login** | The username of either a domain or a local administrative account on the target host(s).
    - Formats such as **domain\username**, **username**, and **machine-name\username** are supported.
    - UPN formats such as **username@domain.com** and built-in system accounts such as **NT Authority\System** are not supported. | +| **Password** | The password for the administrative account specified above. Consider using a secret variable global to the build or release definition to hide the password. Example: `$(passwordVariable)` | +| **Destination Folder** | The folder on the Windows machine(s) to which the files will be copied. Example: `C:\FabrikamFibre\Web` | +| **Advanced - Clean Target** | Set this option to delete all the files in the destination folder before copying the new files to it. | +| **Advanced - Copy Files in Parallel** | Set this option to copy files to all the target machines in parallel, which can speed up the copying process. | +| **Advanced - Additional Arguments** | Arguments to pass to the RoboCopy process. Example: `/min:33553332 /l` | +| **Select Machines By** | Depending on how you want to specify the machines in the group when using the **Filter Criteria** parameter, choose **Machine Names** or **Tags**. | +| **Filter Criteria** | Optional. A list of machine names or tag names that identifies the machines that the task will target. The filter criteria can be:
    - The name of an Azure Resource Group.
    - An output variable from a previous task.
    - A comma-delimited list of tag names or machine names.
    Format when using machine names is a comma-separated list of the machine FDQNs or IP addresses.
    Specify tag names for a filter as {TagName}:{Value} Example: `Role:DB;OS:Win8.1` | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/file-matching-patterns.md b/docs/build-release/tasks/file-matching-patterns.md new file mode 100644 index 00000000000..e08610ded9c --- /dev/null +++ b/docs/build-release/tasks/file-matching-patterns.md @@ -0,0 +1,182 @@ +--- +title: File matching patterns +description: File matching patterns for VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 8A92C09C-3EE2-48EF-A2C0-3B2005AACFD7 +ms.manager: douge +ms.author: alewis +ms.date: 08/04/2016 +--- + +# File matching patterns reference + +## Pattern syntax + +### Basic patterns + +#### Asterisk +`*` matches zero or more characters within a file or directory name. See examples. + +#### Question mark +`?` matches any single character within a file or directory name. See examples. + +#### Character sets +`[]` matches a set or range of characters within a file or directory name. See examples. + +### Double-asterisk +`**` recursive wildcard. For example, `/hello/**/*` matches all descendants of `/hello`. + +### Extended globbing +* `?(hello|world)` - matches `hello` or `world` zero or one times +* `*(hello|world)` - zero or more occurrences +* `+(hello|world)` - one or more occurrences +* `@(hello|world)` - exactly once +* `!(hello|world)` - not `hello` or `world` + +Note, extended globs cannot span directory separators. For example, `+(hello/world|other)` is not valid. + +### Comments +Patterns that begin with `#` are treated as comments. + +### Exclude patterns +Leading `!` changes the meaning of an include pattern to exclude. Interleaved exclude patterns are supported. + +Note, multiple leading `!` flips the meaning. + +### Escaping +Wrapping special characters in `[]` can be used to escape literal glob characters in a file name. For example the literal file name `hello[a-z]` can be escaped as `hello[[]a-z]`. + +## Examples + +### Basic pattern examples + +

    Asterisk examples

    + +**Example 1:** Given the pattern `*Website.sln` and files: +``` +ConsoleHost.sln +ContosoWebsite.sln +FabrikamWebsite.sln +Website.sln +``` +The pattern would match: +``` +ContosoWebsite.sln +FabrikamWebsite.sln +Website.sln +``` + +**Example 2:** Given the pattern `*Website/*.proj` and paths: +``` +ContosoWebsite/index.html +ContosoWebsite/ContosoWebsite.proj +FabrikamWebsite/index.html +FabrikamWebsite/FabrikamWebsite.proj +``` +The pattern would match: +``` +ContosoWebsite/ContosoWebsite.proj +FabrikamWebsite/FabrikamWebsite.proj +``` + +

    Question mark examples

    + +**Example 1:** Given the pattern `log?.log` and files: +``` +log1.log +log2.log +log3.log +script.sh +``` +The pattern would match: +``` +log1.log +log2.log +log3.log +``` + +**Example 2:** Given the pattern `image.???` and files: +``` +image.tiff +image.png +image.ico +``` +The pattern would match: +``` +image.png +image.ico +``` + +

    Character set examples

    + +**Example 1:** Given the pattern `Sample[AC].dat` and files: +``` +SampleA.dat +SampleB.dat +SampleC.dat +SampleD.dat +``` +The pattern would match: +``` +SampleA.dat +SampleC.dat +``` + +**Example 2:** Given the pattern `Sample[A-C].dat` and files: +``` +SampleA.dat +SampleB.dat +SampleC.dat +SampleD.dat +``` +The pattern would match: +``` +SampleA.dat +SampleB.dat +SampleC.dat +``` + +**Example 3:** Given the pattern `Sample[A-CEG].dat` and files: +``` +SampleA.dat +SampleB.dat +SampleC.dat +SampleD.dat +SampleE.dat +SampleF.dat +SampleG.dat +SampleH.dat +``` +The pattern would match: +``` +SampleA.dat +SampleB.dat +SampleC.dat +SampleE.dat +SampleG.dat +``` + +### Exclude pattern examples + +**Example** Given the pattern: +``` +* +!*.xml +``` +and files: +``` +ConsoleHost.exe +ConsoleHost.pdb +ConsoleHost.xml +Fabrikam.dll +Fabrikam.pdb +Fabrikam.xml +``` +The pattern would match: +``` +ConsoleHost.exe +ConsoleHost.pdb +Fabrikam.dll +Fabrikam.pdb +``` diff --git a/docs/build-release/tasks/index.md b/docs/build-release/tasks/index.md new file mode 100644 index 00000000000..999010c934f --- /dev/null +++ b/docs/build-release/tasks/index.md @@ -0,0 +1,136 @@ +--- +title: Catalog of the built-in tasks for build-release and VSTS & TFS +description: Catalog of the built-in tasks on Visual Studio VSTS and Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: D2DE8A26-AF89-4B08-9FCD-30CD58635B0A +ms.manager: douge +ms.author: alewis +ms.date: 08/18/2016 +--- + +# Build and release tasks + +**VSTS | TFS 2017 | TFS 2015 | [Previous versions (XAML builds)](https://msdn.microsoft.com/library/ms400688%28v=vs.120%29.aspx)** + +## Build + +| Task | Versions | +| ---- | -------- | +| ![icon](build/_img/android-build.png) Android Build - deprecated. Use [Gradle](build/gradle.md) | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/android-signing.png) [Android Signing](build/android-signing.md). Sign and align Android APK files | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/ant.png) [Ant](build/ant.md). Build with Apache Ant | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/cmake.png) [CMake](build/cmake.md). Build with the CMake cross-platform build system | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/gradle.png) [Gradle](build/gradle.md). Build using a Gradle wrapper script | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/grunt.png) [Grunt](build/grunt.md). The JavaScript Task Runner | VSTS, TFS 2015 Update 3 and newer | +| ![icon](build/_img/gulp.png) [Gulp](build/gulp.md). Node.js streaming task based build system | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/index-sources-publish-symbols.png) [Index Sources & Publish Symbols](build/index-sources-publish-symbols.md). Index your source code and publish symbols to a file share | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/jenkins-queue-job.png) [Jenkins Queue Job](build/jenkins-queue-job.md). Queue a job on a Jenkins server | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/maven.png) [Maven](build/maven.md). Build with Apache Maven | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/msbuild.png) [MSBuild](build/msbuild.md). Build with MSBuild | VSTS, TFS 2015 RTM and newer | +| ![icon](utility/_img/publish-build-artifacts.png) [Publish Build Artifacts](utility/copy-and-publish-build-artifacts.md). Publish Build artifacts to the server or a file share | TFS 2015 RTM. Deprecated on VSTS and newer versions of TFS. | +| [SonarQube for MSBuild - Begin Analysis](http://go.microsoft.com/fwlink/?LinkId=620063). Fetch the Quality Profile from SonarQube to configure the analysis | VSTS, TFS 2015 Update 3 and newer | +| [SonarQube for MSBuild - End Analysis](http://go.microsoft.com/fwlink/?LinkId=620063). Finish the analysis and upload the results to SonarQube | VSTS, TFS 2015 Update 3 and newer | +| ![icon](build/_img/visual-studio-build.png) [Visual Studio Build](build/visual-studio-build.md). Build with MSBuild and set the Visual Studio version property | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/xamarin-android.png) [Xamarin.Android](build/xamarin-android.md). Build an Android app with Xamarin | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/xamarin-ios.png) [Xamarin.iOS](build/xamarin-ios.md). Build an iOS app with Xamarin on Mac OS | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/xcode-build.png) [Xcode Build](build/xcode-build.md). Build an Xcode workspace on Mac OS | VSTS, TFS 2015 RTM and newer | +| ![icon](build/_img/xcode-package-ios.png) [Xcode Package iOS](build/xcode-package-ios.md). Generate an .ipa file from Xcode build output | VSTS, TFS 2015 RTM and newer | + +## Utility + +| Task | Versions | +| ---- | -------- | +| ![icon](utility/_img/archive-files.png) [Archive Files](utility/archive-files.md). Archive files using a variety of compression formats such as .7z, .rar, .tar.gz, and .zip. | VSTS, TFS 2017 | +| ![icon](utility/_img/batch-script.png) [Batch Script](utility/batch-script.md). Run a windows cmd or bat script and optionally allow it to change the environment | VSTS, TFS 2015 RTM and newer | +| ![icon](utility/_img/command-line.png) [Command Line](utility/command-line.md). Run a command line with arguments | VSTS, TFS 2015 RTM and newer | +| ![icon](utility/_img/copy-and-publish-build-artifacts.png) [Copy and Publish Build Artifacts](utility/copy-and-publish-build-artifacts.md). Copy Build artifacts to staging folder then publish Build artifacts to the server or a file share | TFS 2015 RTM. Deprecated on VSTS and newer versions of TFS. | +| ![icon](utility/_img/copy-files.png) [Copy Files](utility/copy-files.md). Copy files from source folder to target folder using minimatch patterns (The minimatch patterns will only match file paths, not folder paths). | VSTS, TFS 2015 Update 3 and newer | +| ![icon](utility/_img/curl-upload-files.png) [cURL Upload Files](utility/curl-upload-files.md). Use cURL to upload files with supported protocols. (FTP, FTPS, SFTP, HTTP, and more) | VSTS, TFS 2015 RTM and newer | +| ![icon](utility/_img/delete-files.png) [Delete Files](utility/delete-files.md). Delete files or folders. | VSTS, TFS 2015 Update 3 and newer | +| ![icon](utility/_img/extract-files.png) [Extract Files](utility/extract-files.md). Extract files from archives (.zip, .jar, .war, .ear, .tar, .7z., and others) to a target folder. | VSTS, TFS 2017 | +| ![icon](utility/_img/ftp-upload.png) [FTP Upload](utility/ftp-upload.md). Upload files to a remote machine using the File Transfer Protocol (FTP), or securely with FTPS. | VSTS, TFS 2017 | +| ![icon](build/_img/xcode-build.png) [Install Apple Certificate](utility/install-apple-certificate.md). Install an Apple certificate required to build on a macOS agent. | VSTS | +| ![icon](build/_img/xcode-build.png) [Install Apple Provisioning Profile](utility/install-apple-provisioning-profile.md). Install an Apple provisioning profile required to build on a macOS agent. | VSTS | +| ![icon](utility/_img/powershell.png) [PowerShell](utility/powershell.md). Run a PowerShell script | VSTS, TFS 2015 RTM and newer | +| ![icon](utility/_img/publish-build-artifacts.png) [Publish Build Artifacts](utility/publish-build-artifacts.md). Publish Build artifacts to the server or a file share | VSTS, TFS Update 3 and newer | +| ![icon](utility/_img/azure-service-fabric.png) [Service Fabric PowerShell](utility/service-fabric-powershell.md). Runs any PowerShell command or script in a PowerShell session that has a Service Fabric cluster connection initialized. | VSTS | +| ![icon](utility/_img/shell-script.png) [Shell Script](utility/shell-script.md). Run a shell script using bash | VSTS, TFS 2015 RTM and newer | +| ![icon](utility/_img/azure-service-fabric.png) [Update Service Fabric App Versions](utility/service-fabric-versioning.md). Automatically updates the versions of a packaged Service Fabric application | VSTS, TFS 2017 | +| ![icon](utility/_img/xamarin-license.png) [Xamarin License](utility/xamarin-license.md). Activate or deactivate Xamarin licenses | VSTS, TFS 2015 RTM and newer | + +## Test + +| Task | Versions | +| ---- | -------- | +| ![icon](test/_img/apache-jmeter-load-test.png) [Cloud-based Apache JMeter Load Test](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/RunJMeterLoadTest). Runs the Apache JMeter load test in cloud | VSTS, TFS 2015 RTM and newer | +| ![icon](test/_img/cloud-based-load-test-icon.png) [Cloud-based Load Test](test/cloud-based-load-test.md). Runs the load test in cloud, with Visual Studio VSTS | VSTS, TFS 2015 RTM and newer | +| ![icon](test/_img/web-based-perf-icon.png) [Cloud-based Web Performance Test](test/cloud-based-web-performance-test.md). Runs the quick web performance test in cloud, with Visual Studio VSTS | VSTS, TFS 2015 RTM and newer | +| ![icon](test/_img/mobile-center-test-icon.png) [Mobile Center Test](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/VSMobileCenterTest). Test mobile app packages with Visual Studio Mobile Center | VSTS, TFS 2015 Update 3 and newer | +| ![icon](test/_img/publish-code-coverage-results-icon.png) [Publish Code Coverage Results](test/publish-code-coverage-results.md). Publish code coverage results to VSTS/TFS | VSTS, TFS 2015 Update 3 and newer | +| ![icon](test/_img/publish-test-results-icon.png) [Publish Test Results](test/publish-test-results.md). Publish Test Results to Visual Studio VSTS/TFS | VSTS, TFS 2015 RTM and newer | +| ![icon](test/_img/run-functional-tests-icon.png) [Run Functional Tests](test/run-functional-tests.md). Run Coded UI/Selenium/Functional tests on a set of machines (using Test Agent) | VSTS, TFS 2015 Update 3 and newer | +| ![icon](test/_img/visual-studio-test-icon.png) [Visual Studio Test version 1](https://github.com/Microsoft/vsts-tasks/blob/master/Tasks/VsTest/README.md). [Visual Studio Test version 2](https://github.com/Microsoft/vsts-tasks/blob/releases/m109/Tasks/VsTest/README.md)
    Run tests with Visual Studio test runner | VSTS, TFS 2015 RTM and newer | +| ![icon](test/_img/visual-studio-test-agent-deployment-icon.png) [Visual Studio Test Agent Deployment](test/visual-studio-test-agent-deployment.md). Deploy and configure Test Agent to run tests on a lab machine group | VSTS, TFS 2015 RTM and newer | +| ![icon](test/_img/xamarin-test-cloud-icon.png) [Xamarin Test Cloud](test/xamarin-test-cloud.md). Test mobile apps with Xamarin Test Cloud using Xamarin.UITest | VSTS, TFS 2015 RTM and newer | + +## Package + +| Task | Versions | +| ---- | -------- | +| ![icon](package/_img/cocoapods.png) [CocoaPods](package/cocoapods.md). CocoaPods is the dependency manager for Swift and Objective-C Cocoa projects. Runs pod install | VSTS, TFS 2015 RTM and newer | +| ![icon](package/_img/npm.png) [npm](package/npm-install.md). Install npm packages | VSTS, TFS 2015 RTM and newer | +| ![icon](package/_img/nuget-installer.png) [NuGet Installer](package/nuget-installer.md). Installs and updates missing NuGet packages | VSTS, TFS 2015 RTM and newer | +| ![icon](package/_img/nuget-packager.png) [NuGet Packager](package/nuget-packager.md)Creates nupkg outputs from csproj or nuspec files | VSTS, TFS 2015 Update 3 and newer | +| ![icon](package/_img/nuget-publisher.png) [NuGet Publisher](package/nuget-publisher.md). Uploads nupkg files to a nuget server | VSTS, TFS 2015 Update 3 and newer | +| ![icon](package/_img/xamarin-component-restore.png) [Xamarin component restore](package/xamarin-component-restore.md). Restores Xamarin components for the specified solution | VSTS, TFS 2017 | + +## Deploy + +| Task | Versions | +| ---- | -------- | +| ![icon](deploy/_img/azure-web-app-deployment-icon.png) [Azure App Service Deploy](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureRmWebAppDeployment). Update Azure App Service using Web Deploy / Kudu REST APIs | VSTS, TFS 2017 | +| ![icon](deploy/_img/azure-app-service-manage.png) [Azure App Service Manage](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureAppServiceManage). Start, Stop, Restart or Slot swap for an Azure App Service | VSTS, TFS 2017 | +| ![icon](deploy/_img/azure-cli-icon.png) [Azure CLI](deploy/azure-cli.md). Run a shell or batch script containing Azure CLI commands against an Azure subscription | VSTS, TFS 2017 | +| ![icon](deploy/_img/azure-cloud-service-deployment-icon.png) [Azure Cloud Service Deployment](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureCloudPowerShellDeployment). Deploy an Azure Cloud Service | VSTS, TFS 2015 RTM and newer | +| ![icon](deploy/_img/azure-file-copy-icon.png) [Azure File Copy](deploy/azure-file-copy.md). Copy files to Azure blob or VM(s) | VSTS, TFS 2015 Update 3 and newer | +| ![icon](deploy/_img/azure-key-vault-icon.png) [Azure Key Vault](deploy/azure-key-vault.md). Incorporate secrets from an Azure Key Vault into a release definition | VSTS | +| ![icon](deploy/_img/azure-powershell-icon.png) [Azure PowerShell](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzurePowerShell). Run a PowerShell script within an Azure environment | VSTS, TFS 2015 RTM and newer | +| ![icon](deploy/_img/azure-resource-group-deployment-icon.png) [Azure Resource Group Deployment](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureResourceGroupDeployment). Deploy, start, stop, delete Azure Resource Groups | VSTS, TFS 2015 Update 3 and newer | +| ![icon](deploy/_img/azure-sql-database-deployment-icon.png) [Azure SQL Database Deployment](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/SqlAzureDacpacDeployment). Deploy Azure SQL DB using DACPAC | VSTS, TFS 2015 Update 3 and newer | +| ![icon](deploy/_img/ssh.png) [Copy Files Over SSH](deploy/copy-files-over-ssh.md). Copy files from source folder to target folder on a remote machine over SSH | VSTS, TFS 2017 | +| ![icon](deploy/_img/iis-deploy-icon.png) [IIS Web App Deploy](deploy/iis-deploy.md). Deploy IIS Websites and Virtual Applications using WebDeploy | VSTS | +| ![icon](deploy/_img/iis-manage-icon.png) [IIS Web App Manage](deploy/iis-manage.md). Create or update, start or stop, and recycle IIS Websites, IIS Web Applications, Virtual Directories, and IIS Application Pools | VSTS | +| ![icon](deploy/_img/manual-intervention-icon.png) [Manual Intervention](../concepts/process/phases.md#the-manual-intervention-task). Pause deployment and wait for intervention | VSTS, TFS 2017 | +| ![icon](deploy/_img/mobile-center-upload-icon.png) [Mobile Center Upload](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/MobileCenterDistribute). Upload mobile app packages to Visual Studio Mobile Center | VSTS, TFS 2015 RTM and newer | +| ![icon](deploy/_img/powershell-on-target-machines-icon.png) [PowerShell on Target Machines](deploy/powershell-on-target-machines.md). Execute PowerShell scripts on remote machine(s) | VSTS, TFS 2015 RTM and newer | +| ![icon](deploy/_img/azure-service-fabric.png) [Service Fabric Application Deployment](deploy/service-fabric-deploy.md). Deploy a Service Fabric application to a cluster | VSTS, TFS 2017 | +| ![icon](deploy/_img/azure-service-fabric.png) [Service Fabric Compose Deploy](deploy/service-fabric-compose-deploy.md). Deploy a Service Fabric application to a cluster using a compose file | VSTS | +| ![icon](deploy/_img/ssh.png) [SSH](deploy/ssh.md). Run shell commands or a script on a remote machine using SSH | VSTS, TFS 2017 | +| ![icon](deploy/_img/windows-machine-file-copy-icon.png) [Windows Machine File Copy](deploy/windows-machine-file-copy.md). Copy files to remote machine(s) | VSTS, TFS 2015 RTM and newer | + +

    Tool

    + +| Task | Versions | +|------|----------| +| ![icon](tool/_img/node.png) [Node Tool Installer](tool/node-js.md). Finds or downloads and caches the specified version of [Node.js](https://nodejs.org/) and adds it to the PATH | VSTS | + +To learn more about tool installer tasks, see [Tool installers](../concepts/process/tasks.md#tool-installers). + +## Q&A + + + +### Where can I learn step-by-step how to build my app? + +[Build your app](../apps/index.md) + +### Can I add my own build tasks? + +Yes: [Add a build task](../../extend/develop/add-build-task.md) + +[!INCLUDE [temp](../_shared/qa-agents.md)] + +[!INCLUDE [temp](../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/package/_img/cocoapods.png b/docs/build-release/tasks/package/_img/cocoapods.png new file mode 100644 index 00000000000..aeca63568df Binary files /dev/null and b/docs/build-release/tasks/package/_img/cocoapods.png differ diff --git a/docs/build-release/tasks/package/_img/npm.png b/docs/build-release/tasks/package/_img/npm.png new file mode 100644 index 00000000000..53c12a8be89 Binary files /dev/null and b/docs/build-release/tasks/package/_img/npm.png differ diff --git a/docs/build-release/tasks/package/_img/nuget-installer.png b/docs/build-release/tasks/package/_img/nuget-installer.png new file mode 100644 index 00000000000..4140f9bd969 Binary files /dev/null and b/docs/build-release/tasks/package/_img/nuget-installer.png differ diff --git a/docs/build-release/tasks/package/_img/nuget-packager.png b/docs/build-release/tasks/package/_img/nuget-packager.png new file mode 100644 index 00000000000..e429a04eea9 Binary files /dev/null and b/docs/build-release/tasks/package/_img/nuget-packager.png differ diff --git a/docs/build-release/tasks/package/_img/nuget-publisher.png b/docs/build-release/tasks/package/_img/nuget-publisher.png new file mode 100644 index 00000000000..d922e5e0eb2 Binary files /dev/null and b/docs/build-release/tasks/package/_img/nuget-publisher.png differ diff --git a/docs/build-release/tasks/package/_img/nuget.png b/docs/build-release/tasks/package/_img/nuget.png new file mode 100644 index 00000000000..4140f9bd969 Binary files /dev/null and b/docs/build-release/tasks/package/_img/nuget.png differ diff --git a/docs/build-release/tasks/package/_img/xamarin-component-restore.png b/docs/build-release/tasks/package/_img/xamarin-component-restore.png new file mode 100644 index 00000000000..cd321692264 Binary files /dev/null and b/docs/build-release/tasks/package/_img/xamarin-component-restore.png differ diff --git a/docs/build-release/tasks/package/cocoapods.md b/docs/build-release/tasks/package/cocoapods.md new file mode 100644 index 00000000000..1a95e098405 --- /dev/null +++ b/docs/build-release/tasks/package/cocoapods.md @@ -0,0 +1,53 @@ +--- +title: CocoaPods +description: How to use CocoaPods packages when building code in Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: D690542B-9A13-4836-8C1E-D715AE6CB7D6 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Package: CocoaPods + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/cocoapods.png) Runs CocoaPods [pod install](https://guides.cocoapods.org/using/pod-install-vs-update.html) + +[CocoaPods](https://cocoapods.org/) is the dependency manager for Swift and Objective-C Cocoa projects. + +## Demands + +None + +## Arguments + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Working Directory +Working directory. If you leave it blank, the working directory is the root of your repo. +
    + + +## Q & A + + + +[!INCLUDE [temp](../../_shared/qa-definition-common-all-platforms.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + \ No newline at end of file diff --git a/docs/build-release/tasks/package/npm-install.md b/docs/build-release/tasks/package/npm-install.md new file mode 100644 index 00000000000..8a1a6222e0d --- /dev/null +++ b/docs/build-release/tasks/package/npm-install.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/tasks/package/npm +--- \ No newline at end of file diff --git a/docs/build-release/tasks/package/npm.md b/docs/build-release/tasks/package/npm.md new file mode 100644 index 00000000000..6a81e6c898d --- /dev/null +++ b/docs/build-release/tasks/package/npm.md @@ -0,0 +1,199 @@ +--- +title: npm +description: How to use npm packages when building code in Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: BE298C30-3B6D-4E06-B747-62A8AF6E10A6 +ms.manager: douge +ms.author: alewis +ms.date: 07/05/2017 +--- + +# Package: npm + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/npm.png) Install and publish npm packages + +## Install npm packages + +### Demands +[npm](https://nodejs.org/en/download/) + +### Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Command + npm command to run. Select `install` here. +
    Working folder with package.json + Path to the folder containing the target package.json and .npmrc files. Select the folder, not the file e.g. "/packages/mypackage". +
    Custom registries and authentication
    Registries to use + *Leave this section blank to use packages from npmjs directly.* Otherwise, select one of these options: +
    + **Registries in my .npmrc:** +
      +
    • Select this option to use feeds specified in a [.npmrc](https://docs.npmjs.com/files/npmrc) file you've checked into source control.
    • +
      • Credentials for registries outside this account/collection can be used to inject credentials you've provided as an [npm service endpoint](../../concepts/library/service-endpoints.md#sep-npm) into your .npmrc as the build runs.
      +
    + **Use packages from this VSTS/TFS registry:** +
      +
    • Select this option to use one Package Management feed in the same account/collection as the build.
    • +
    +
    Advanced
    Verbose logging + Enables verbose logging. +
    + + + +## Publish npm packages + +### Demands +[npm](https://nodejs.org/en/download/) + +### Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Command + npm command to run. Select `publish` here. +
    Working folder with package.json + Path to the folder containing the target package.json and .npmrc files. Select the folder, not the file e.g. "/packages/mypackage". +
    Destination registry and authentication
    Registry location +
      +
    • **Registry I select here** publishes to a Package Management registry in the same account/collection as the build. After you select this option, select the target registry from the dropdown. +
    • +
    • **External npm registry (including other accounts/collections)** publishes to an external server such as [npm](https://www.npmjs.com/), [MyGet](http://www.myget.org/), or a Package Management feed in another VSTS account or TFS collection. After you select this option, create and select an [npm service endpoint](../../concepts/library/service-endpoints.md#sep-npm). +
    • +
    +
    Advanced
    Verbose logging + Enables verbose logging. +
    + +## Custom npm command + +### Demands + +[npm](https://nodejs.org/en/download/) + +### Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + [!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Command + npm command to run. Select `custom` here. +
    Working folder with package.json + Path to the folder containing the target package.json and .npmrc files. Select the folder, not the file e.g. "/packages/mypackage". +
    Command and arguments + The custom command and arguments you wish to be executed. +
    Custom registries and authentication
    Registries to use + *Leave this section blank to use packages from npmjs directly.* Otherwise, select one of these options: +
    + **Registries in my .npmrc:** +
      +
    • Select this option to use feeds specified in a [.npmrc](https://docs.npmjs.com/files/npmrc) file you've checked into source control.
    • +
    • Credentials for registries outside this account/collection can be used to inject credentials you've provided as an [npm service endpoint](../../concepts/library/service-endpoints.md#sep-npm) into your .npmrc as the build runs.
    • +
    + **Use packages from this VSTS/TFS registry:** +
      +
    • Select this option to use one Package Management feed in the same account/collection as the build.
    • +
    +
    + +## Examples + +[Build: Gulp](../build/gulp.md) + +[Build your Node.js app with Gulp](../../apps/nodejs/build-gulp.md) + +## Q&A + +### Where can I learn npm commands and arguments? + +[npm docs](https://docs.npmjs.com/) + + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/package/nuget-installer.md b/docs/build-release/tasks/package/nuget-installer.md new file mode 100644 index 00000000000..fcb98e9486d --- /dev/null +++ b/docs/build-release/tasks/package/nuget-installer.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/tasks/package/nuget +--- \ No newline at end of file diff --git a/docs/build-release/tasks/package/nuget-packager.md b/docs/build-release/tasks/package/nuget-packager.md new file mode 100644 index 00000000000..fcb98e9486d --- /dev/null +++ b/docs/build-release/tasks/package/nuget-packager.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/tasks/package/nuget +--- \ No newline at end of file diff --git a/docs/build-release/tasks/package/nuget-publisher.md b/docs/build-release/tasks/package/nuget-publisher.md new file mode 100644 index 00000000000..fcb98e9486d --- /dev/null +++ b/docs/build-release/tasks/package/nuget-publisher.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/tasks/package/nuget +--- \ No newline at end of file diff --git a/docs/build-release/tasks/package/nuget.md b/docs/build-release/tasks/package/nuget.md new file mode 100644 index 00000000000..c8107a480ef --- /dev/null +++ b/docs/build-release/tasks/package/nuget.md @@ -0,0 +1,408 @@ +--- +title: NuGet restore, pack, and publish +description: How to use NuGet packages when building code in Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 7e2793cd-7ce1-4268-9f51-ecb41842f13e +ms.manager: douge +ms.author: elbatk +ms.date: 07/05/2017 +--- + +# Package: NuGet + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/nuget.png) Install and update NuGet package dependencies, or package and publish NuGet packages. + +If your code depends on NuGet packages, make sure to add this step before your [Visual Studio Build step](../build/visual-studio-build.md). Also make sure to clear the deprecated **Restore NuGet Packages** checkbox in that step. + +> [!TIP] +> Looking for help to get started? See the how-to's for [restoring](../../../package/nuget/consume.md) and [publishing](../../../package/nuget/publish.md) packages. + +> [!NOTE] +> Using or creating .NET Core or .NET Standard packages? Use the [.NET Core](../build/dotnet-core.md) task, which has full support for all package scenarios currently supported by dotnet, including restore, pack, and nuget push. + +## Restore NuGet packages + +### Demands + +None + +### Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Path to solution, packages.config, or project.json + Copy the **Solution** argument in your [Visual Studio Build step](../../tasks/build/visual-studio-build.md) and paste it + here, or create a link using the Link button in the information panel. +
    Feeds and authentication
    Feeds to use + **Feed(s) I select here:** +
      +
    • Select this option to use NuGet.org and/or one Package Management feed in the same account/collection as the build.
    • +
    + **Feeds in my NuGet.config:** +
      +
    • Select this option to use feeds specified in a [NuGet.config](http://docs.nuget.org/Consume/NuGet-Config-File) + file you've checked into source control.
    • +
    • Credentials for feeds outside this account/collection can be used to inject credentials you've provided as a [NuGet service endpoint](../../concepts/library/service-endpoints.md#sep-nuget) into your NuGet.config as the build runs.
    • +
    +
    Advanced
    Disable local cache + Prevents NuGet from using packages from local machine caches. +
    Destination directory + Specifies the folder in which packages are installed. If no folder is specified, packages are restored into a packages/ folder alongside the selected solution, packages.config, or project.json. +
    Verbosity + Specifies the amount of detail displayed in the output. +
    + +### Examples + +#### Install NuGet dependencies + +You're building a Visual Studio solution that depends on a NuGet feed. + +``` +`-- ConsoleApplication1 + |-- ConsoleApplication1.sln + |-- NuGet.config + `-- ConsoleApplication1 + |-- ConsoleApplication1.csproj +``` + + +##### [Build](../../index.md) steps + + + + + + + + + + +
    ![Package: NuGet](_img/nuget.png)
    **Package: NuGet**
    + Install your NuGet package dependencies. +
      +
    • Path to solution, packages.config, or project.json: ```**/*.sln```
    • +
    • Feeds to use: Feeds in my NuGet.config
    • +
    • Path to NuGet.config: ```ConsoleApplication1/NuGet.config```
    • +
    +
    ![Build: Visual Studio Build](../build/_img/visual-studio-build.png)
    **Build: Visual Studio Build**
    + Build your solution. +
      +
    • Solution: ```**\*.sln```
    • +
    • Restore NuGet Packages: **(Important)** Make sure this option is cleared.
    • +
    +
    + +## Pack NuGet packages +### Demands + +None + +### Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Path to csproj or nuspec file(s) to pack + Specify .csproj files (for example, ```**\*.csproj```) for simple projects. In this case: +
      +
    • The packager compiles the .csproj files for packaging.
    • +
    • You must specify Configuration to Package (see below).
    • +
    • You do not have to check in a .nuspec file. If you do check one in, the packager honors + its settings and replaces tokens such as *$id$* and *$description$*.
    • +
    + Specify .nuspec files (for example, ```**\*.nuspec```) for more complex projects, such as multi-platform scenarios in which you need to compile and package in separate steps. In this case: +
      +
    • The packager does not compile the .csproj files for packaging.
    • +
    • Each project is packaged only if it has a .nuspec file checked in.
    • +
    • The packager does not replace tokens in the .nuspec file (except the <version/> element, + see Use build number to version package, below). You must supply values for elements + such as <id/> and <description/>. The most common way to do this + is to hardcode the values in the .nuspec file. +
    • +
    + To package a single file, click the ... button and select the file. To package multiple files, use [file matching patterns](../file-matching-patterns.md). Note that these patterns were updated in version 2 of the NuGet task; if you have a pattern that contains `-:`, use `!` instead. +
    Configuration to package + If you are packaging a .csproj file, you must specify a configuration that you are building and that you want to package. + For example: ```Release``` or ```$(BuildConfiguration)``` +
    Package folder + (Optional) Specify the folder where you want to put the packages. You can use a [variable](../../concepts/definitions/build/variables.md) such as ```$(Build.ArtifactStagingDirectory)``` If you leave it empty, the package will be created in the root of your source tree. +
    Pack options
    Automatic package versioning + [This blog post](https://blogs.msdn.microsoft.com/devops/2016/05/03/versioning-nuget-packages-cd-1/) provides an overview of the automatic package versioning available here. +
    Advanced
    Additional build properties + Semicolon delimited list of properties used to build the package. For example, you could replace ``` + $description$``` in the .nuspec file this way: ```Description="This is a + great package"``` Using this argument is equivalent to supplying properties from [nuget pack](https://docs.nuget.org/consume/command-line-reference#pack) + with the ```-Properties``` option. +
    Verbosity + Specifies the amount of detail displayed in the output. +
    + +## Push NuGet packages + +### Demands + +None + +### Arguments + + + + + + + + + + + + + + + + + + + + + + + + [!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Path to NuGet package(s) to publish + Specify the packages you want to publish. +
      +
    • Default value: ```$(Build.ArtifactStagingDirectory)/*.nupkg```
    • +
    • To publish a single package, click the ... button and select the file.
    • +
    • Use single-folder wildcards (```*```) and recursive wildcards (```**```) to publish multiple packages.
    • +
    • Use [variables](../../concepts/definitions/build/variables.md) to specify directories. For example, if you specified ```$(Build.ArtifactStagingDirectory)\``` as the **package folder** in the pack step above, you could specify ```$(Build.ArtifactStagingDirectory)\**\*.nupkg``` here.
    • +
    +
    Target feed location +
      +
    • **This account/collection** publishes to a Package Management feed in the same account/collection as the build. After you select this option, select the target feed from the dropdown. +
      • "Allow duplicates to be skipped" allows you to continually publish a set of packages and only change the version number of the subset of packages that changed. It allows the task to report success even if some of your packages are rejected with 409 Conflict errors.
        This option is currently only available on Visual Studio Team Services. +
      +
    • +
    • **External NuGet server (including other accounts/collections)** publishes to an external server such as [NuGet](https://www.nuget.org/), [MyGet](http://www.myget.org/), or a Package Management feed in another VSTS account or TFS collection. After you select this option, you create and select a [NuGet service endpoint](../../concepts/library/service-endpoints.md#sep-nuget). +
    • +
    +
    Advanced
    Verbosity + Specifies the amount of detail displayed in the output. +
    + +## Custom NuGet command + +### Arguments + + + + + + + + + + + +
    ArgumentDescription
    Command and arguments + NuGet command and arguments you want to pass as your custom command. +
    + +## End-to-end example +You want to package and publish some projects in a C# class library to your VSTS feed. + +``` +`-- Message + |-- Message.sln + `-- ShortGreeting + |-- ShortGreeting.csproj + |-- Class1.cs + `-- Properties + |-- AssemblyInfo.cs + `-- LongGreeting + |-- LongGreeting.csproj + |-- Class1.cs + `-- Properties + |-- AssemblyInfo.cs +``` + + + +### Prepare + +#### AssemblyInfo.cs +Make sure your AssemblyInfo.cs files contain the information you want shown in your packages. For example, ```AssemblyCompanyAttribute``` will be shown as the author, and ```AssemblyDescriptionAttribute``` will be shown as the description. + + +#### [Variables](../../concepts/definitions/build/variables.md) tab +| Name | Value | +|---|---| +|```$(BuildConfiguration)``` | ```release```| +|```$(BuildPlatform)``` | ```any cpu```| + +#### [Options](../../concepts/definitions/build/options.md) +| Setting | Value | +|---|---| +| Build number format | ```$(BuildDefinitionName)_$(Year:yyyy).$(Month).$(DayOfMonth)$(Rev:.r)```| + + +### Option 1: publish to Visual Studio Team Services +1. Make sure you've prepared the build as described [above](#prepare). +2. If you haven't already, [create a feed](../../../package/feeds/create-feed.md). +3. Add the following build steps: + + + + + + + + + + + + + + + + + + +
    ![Package: NuGet](_img/nuget.png)
    **Package: NuGet**
    + Install your NuGet package dependencies. +
      +
    • Path to solution, packages.config, or project.json: ```**/*.sln```
    • +
    • Feeds to use: Feeds I select here
    • +
    • Use packages from NuGet.org: Checked
    • +
    +
    ![Build: Visual Studio Build](../build/_img/visual-studio-build.png)
    **Build: Visual Studio Build**
    +

    Build your solution.

    +
      +
    • Solution: ```**\*.sln```
    • +
    • Platform: ```$(BuildPlatform)```
    • +
    • Configuration: ```$(BuildConfiguration)```
    • +
    +
    ![Package: NuGet](../package/_img/nuget.png)
    **Package: NuGet**
    +

    Package your projects.

    +
      +
    • Command: pack
    • +
    • Path to csproj or nuspec file(s) to pack: ```**/*.csproj```
    • +
    • Configuration to Package: ```Release```
    • +
    • Package Folder: ```$(Build.ArtifactStagingDirectory)```
    • +
    • Pack options > Automatic package versioning: Use the build number
    • +
    +
    ![Package: NuGet](../package/_img/nuget.png)
    **Package: NuGet**
    +

    Publish your packages to VSTS.

    +
      +
    • Command: push
    • +
    • Path to NuGet package(s) to publish: ```$(Build.ArtifactStagingDirectory)```
    • +
    • Target feed location: This account/collection
    • +
    • Target feed: Select your feed
    • +
    +
    + +### Option 2: publish to NuGet.org +1. Make sure you've prepared the build as described [above](#prepare). +2. If you haven't already, [register with NuGet.org](https://www.nuget.org/). +3. Use the steps in the previous section, but substitute the final step for the step shown here. + + + + + + +
    ![Package: NuGet](../package/_img/nuget.png)
    **Package: NuGet**
    +

    Publish your packages to NuGet.org.

    +
      +
    • Command: push
    • +
    • Path to NuGet package(s) to publish: ```$(Build.ArtifactStagingDirectory)```
    • +
    • Target feed location: External NuGet server
    • +
    • NuGet server: Create a new [NuGet service endpoint](../../concepts/library/service-endpoints.md#sep-nuget) with your + NuGet.org ApiKey and select it here
    • +
    +
    + +## Q & A + + + +### Why should I check in a NuGet.Config? + +[!INCLUDE [temp](../_shared/nuget-step-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-definition-common-all-platforms.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/package/xamarin-component-restore.md b/docs/build-release/tasks/package/xamarin-component-restore.md new file mode 100644 index 00000000000..3756f514dbf --- /dev/null +++ b/docs/build-release/tasks/package/xamarin-component-restore.md @@ -0,0 +1,62 @@ +--- +title: Xamarin component restore in Team Services +description: How to restore Xamarin components for a Team Services solution +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: D50172C9-5AEE-4055-9795-342D5B2ABEF4 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Package: Xamarin component restore + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![icon](_img/xamarin-component-restore.png) Restores [Xamarin components](https://components.xamarin.com/) for the specified solution + + +## Demands + +None + + +## Arguments + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Path to Solution +Click the ... button and select your solution. +
    Email +Xamarin account email address.
    Password +

    Xamarin account password.

    +
    Important: Use a [secret variable](../../concepts/definitions/build/variables.md) to avoid exposing this value.
    +
    + + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + \ No newline at end of file diff --git a/docs/build-release/tasks/test/_img/apache-jmeter-load-test.png b/docs/build-release/tasks/test/_img/apache-jmeter-load-test.png new file mode 100644 index 00000000000..2ffdd30bd7a Binary files /dev/null and b/docs/build-release/tasks/test/_img/apache-jmeter-load-test.png differ diff --git a/docs/build-release/tasks/test/_img/cloud-based-load-test-icon.png b/docs/build-release/tasks/test/_img/cloud-based-load-test-icon.png new file mode 100644 index 00000000000..43cdf15c1e1 Binary files /dev/null and b/docs/build-release/tasks/test/_img/cloud-based-load-test-icon.png differ diff --git a/docs/build-release/tasks/test/_img/mobile-center-test-icon.png b/docs/build-release/tasks/test/_img/mobile-center-test-icon.png new file mode 100644 index 00000000000..700c4c9d99b Binary files /dev/null and b/docs/build-release/tasks/test/_img/mobile-center-test-icon.png differ diff --git a/docs/build-release/tasks/test/_img/publish-code-coverage-results-icon.png b/docs/build-release/tasks/test/_img/publish-code-coverage-results-icon.png new file mode 100644 index 00000000000..baee6173715 Binary files /dev/null and b/docs/build-release/tasks/test/_img/publish-code-coverage-results-icon.png differ diff --git a/docs/build-release/tasks/test/_img/publish-test-results-icon.png b/docs/build-release/tasks/test/_img/publish-test-results-icon.png new file mode 100644 index 00000000000..daf9bc57963 Binary files /dev/null and b/docs/build-release/tasks/test/_img/publish-test-results-icon.png differ diff --git a/docs/build-release/tasks/test/_img/run-functional-tests-icon.png b/docs/build-release/tasks/test/_img/run-functional-tests-icon.png new file mode 100644 index 00000000000..c7efbd29e69 Binary files /dev/null and b/docs/build-release/tasks/test/_img/run-functional-tests-icon.png differ diff --git a/docs/build-release/tasks/test/_img/soasta-cloud-test-icon.png b/docs/build-release/tasks/test/_img/soasta-cloud-test-icon.png new file mode 100644 index 00000000000..8abe97f8335 Binary files /dev/null and b/docs/build-release/tasks/test/_img/soasta-cloud-test-icon.png differ diff --git a/docs/build-release/tasks/test/_img/visual-studio-test-agent-deployment-icon.png b/docs/build-release/tasks/test/_img/visual-studio-test-agent-deployment-icon.png new file mode 100644 index 00000000000..5aff5cc83ed Binary files /dev/null and b/docs/build-release/tasks/test/_img/visual-studio-test-agent-deployment-icon.png differ diff --git a/docs/build-release/tasks/test/_img/visual-studio-test-icon.png b/docs/build-release/tasks/test/_img/visual-studio-test-icon.png new file mode 100644 index 00000000000..6865419ec88 Binary files /dev/null and b/docs/build-release/tasks/test/_img/visual-studio-test-icon.png differ diff --git a/docs/build-release/tasks/test/_img/web-based-perf-icon.png b/docs/build-release/tasks/test/_img/web-based-perf-icon.png new file mode 100644 index 00000000000..a4b325a5412 Binary files /dev/null and b/docs/build-release/tasks/test/_img/web-based-perf-icon.png differ diff --git a/docs/build-release/tasks/test/_img/xamarin-test-cloud-icon.png b/docs/build-release/tasks/test/_img/xamarin-test-cloud-icon.png new file mode 100644 index 00000000000..9d2d2b86a5e Binary files /dev/null and b/docs/build-release/tasks/test/_img/xamarin-test-cloud-icon.png differ diff --git a/docs/build-release/tasks/test/cloud-based-apache-jmeter-load-test.md b/docs/build-release/tasks/test/cloud-based-apache-jmeter-load-test.md new file mode 100644 index 00000000000..ef9b1215a86 --- /dev/null +++ b/docs/build-release/tasks/test/cloud-based-apache-jmeter-load-test.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/RunJMeterLoadTest +--- diff --git a/docs/build-release/tasks/test/cloud-based-load-test.md b/docs/build-release/tasks/test/cloud-based-load-test.md new file mode 100644 index 00000000000..1e61ccc9c35 --- /dev/null +++ b/docs/build-release/tasks/test/cloud-based-load-test.md @@ -0,0 +1,84 @@ +--- +title: VSTS and TFS Build and Test - Cloud-based Load Test step +ms.assetid: 4D10E9D5-2269-4A95-8670-2901DFE4CBB1 +description: Runs the load test in cloud with VSTS to integrate cloud-based load tests into your build and release pipelines +ms.prod: vs-devops-test-continuous +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Test: Cloud-based Load Test + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/cloud-based-load-test-icon.png) +Runs a load test in the cloud with Visual Studio Team Services. + +Use this task to understand, test, and validate your app's +performance. The task can be used in a build or release +definition to trigger a load test by using the +VSTS Cloud-based Load Test Service. +The Cloud-based Load Test Service is based in +Microsoft Azure and can be used to test your app's +performance by generating load on it. + +## Demands + +The build agent must have the following capabilities: + +* MSBuild +* Azure PowerShell + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **VSTS connection** | The name of a Generic Service Endpoint that references the VSTS account you will be running the load test from and publishing the results to.
    - Required for builds and releases on TFS and must specify a connection to the VSTS account where the load test will run.
    - Optional for builds and releases on VSTS. In this case, if not provided, the current VSTS connection is used.
    - See [Generic service endpoint](../../concepts/library/service-endpoints.md). | +| **Test settings file** | Required. The path relative to the repository root of the test settings file that specifies the files and data required for the load test such as the test settings, any deployment items, and setup/clean-up scripts. The task will search this path and any subfolders. | +| **Load test files folder** | Required. The path of the load test project. The task looks here for the files required for the load test, such as the load test file, any deployment items, and setup/clean-up scripts. The task will search this path and any subfolders. | +| **Load test file** | Required. The name of the load test file (such as **myfile.loadtest**) to be executed as part of this task. This allows you to have more than one load test file and choose the one to execute based on the deployment environment or other factors. | +| **Number of permissible threshold violations** | Optional. The number of critical violations that must occur for the load test to be deemed unsuccessful, aborted, and marked as failed. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## Examples + +* [Load test your app in the cloud](../../../load-test/index.md) +* [Scheduling Load Test Execution](http://blogs.msdn.com/b/visualstudioalm/archive/2015/11/23/scheduling-load-test-execution.aspx) + +## More Information + +* [Cloud-based Load Testing](https://www.visualstudio.com/features/vso-cloud-load-testing-vs) +* [Source code for this task](https://github.com/Microsoft/vso-agent-tasks/blob/master/Tasks/RunLoadTest) +* [Build your Visual Studio solution](../../apps/windows/dot-net.md) +* [Cloud-based Load Testing Knowledge Base](https://blogs.msdn.microsoft.com/devops/?s=clt) + +## Related tasks + +* [Cloud-based Web Performance Test](cloud-based-web-performance-test.md) + +## Q&A + + +#### How do I use a Test Settings file? + +The **Test settings file** references any setup and cleanup +scripts required to execute the load test. For more details see: +[Using Setup and Cleanup Script in Cloud Load Test](https://blogs.msdn.microsoft.com/visualstudioalm/2015/01/12/using-setup-and-cleanup-script-in-cloud-load-test/) + +#### When should I specify the number of permissible threshold violations? + +Use the **Number of permissible threshold violations** +setting if your load test is not already configured +with information about how many violations will cause +a failure to be reported. For more details, see: +[How to: Analyze Threshold Violations Using the Counters Panel in Load Test Analyzer](https://msdn.microsoft.com/en-us/library/ff426917.aspx). + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [test-help-support-shared](../../_shared/test-help-support-shared.md)] diff --git a/docs/build-release/tasks/test/cloud-based-web-performance-test.md b/docs/build-release/tasks/test/cloud-based-web-performance-test.md new file mode 100644 index 00000000000..14524efb64b --- /dev/null +++ b/docs/build-release/tasks/test/cloud-based-web-performance-test.md @@ -0,0 +1,65 @@ +--- +title: VSTS and TFS Build and Test - Cloud-based Web Performance Test +ms.assetid: 8030BD4C-F119-4A0F-9ED5-B021C4E760CD +description: Runs the Quick Web Performance Test with VSTS to easily verify your web application exists and is responsive +ms.prod: vs-devops-test-continuous +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Test: Cloud-based Web Performance Test + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/web-based-perf-icon.png) +Runs the Quick Web Performance Test with Visual Studio Team Services. + +The task can be used in a build or release +definition to generate load against an application URL +using the VSTS Cloud-based Load Test Service. +The Cloud-based Load Test Service is based in +Microsoft Azure and can be used to test your app's +performance by generating load on it, and verify it +exists and is responsive. + +## Demands + +The build agent must have the following capabilities: + +* MSBuild +* Azure PowerShell + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **VSTS connection** | The name of a Generic Service Endpoint that references the VSTS account you will be running the load test from and publishing the results to.
    - Required for builds and releases on TFS and must specify a connection to the VSTS account where the load test will run.
    - Optional for builds and releases on VSTS. In this case, if not provided, the current VSTS connection is used.
    - See [Generic service endpoint](../../concepts/library/service-endpoints.md). | +| **Website Url** | Required. The URL of the app to test. | +| **Test Name** | Required. A name for this load test, used to identify it for reporting and for comparison with other test runs. | +| **User Load** | Required. The number of concurrent users to simulate in this test. Select a value from the drop-down list. | +| **Run Duration (sec)** | Required. The duration of this test in seconds. Select a value from the drop-down list. | +| **Load Location** | The location from which the load will be generated. Select a global Azure location, or **Default** to generate the load from the location associated with your VSTS account. | +| **Run load test using** | Select **Automatically provisioned agents** if you want the cloud-based load testing service to automatically provision agents for running the load tests. The application URL must be accessible from the Internet.
    Select **Self-provisioned agents** if you want to test apps behind the firewall. You must provision agents and register them against your VSTS account when using this option. See [Testing private/intranet applications using Cloud-based load testing](https://blogs.msdn.microsoft.com/visualstudioalm/2016/08/23/testing-privateintranet-applications-using-cloud-based-load-testing/). | +| **Fail test if Avg. Response Time (ms) exceeds** | Specify a threshold for the average response time in milliseconds. If the observed response time during the load test exceeds this threshold, the task will fail. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## More Information + +* [Cloud-based Load Testing](https://www.visualstudio.com/features/vso-cloud-load-testing-vs) +* [Performance testing video and Q&A](../../../load-test/reference-qa.md) + +## Related tasks + +* [Cloud-based Load Test](cloud-based-load-test.md) +* [Cloud-based Apache JMeter Load Test](cloud-based-apache-jmeter-load-test.md) + +## Q&A + + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [test-help-support-shared](../../_shared/test-help-support-shared.md)] diff --git a/docs/build-release/tasks/test/mobile-center-test.md b/docs/build-release/tasks/test/mobile-center-test.md new file mode 100644 index 00000000000..303e4dcbbab --- /dev/null +++ b/docs/build-release/tasks/test/mobile-center-test.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/VSMobileCenterTest +--- diff --git a/docs/build-release/tasks/test/publish-code-coverage-results.md b/docs/build-release/tasks/test/publish-code-coverage-results.md new file mode 100644 index 00000000000..7ca1d6d8498 --- /dev/null +++ b/docs/build-release/tasks/test/publish-code-coverage-results.md @@ -0,0 +1,55 @@ +--- +title: VSTS and TFS Build and Test - Publish Code Coverage Results step +ms.assetid: 18F19A70-E9FF-4697-A3E9-CA3B34FCB15D +description: Publish Code Coverage Results with the Visual Studio to integrate cloud-based load tests into your build and release pipelines +ms.prod: vs-devops-test-continuous +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Test: Publish Code Coverage Results + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/publish-code-coverage-results-icon.png) +Publishes the code coverage results of a build. + +## Demands + +The build agent must have the following capabilities: + +* MSBuild +* Azure PowerShell + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Code Coverage Tool** | Required. The tool with which code coverage results are generated. Currently supported schemas are [Cobertura](http://cobertura.sourceforge.net/xml/coverage-04.dtd) and [Jacoco](http://www.eclemma.org/jacoco/trunk/coverage/report.dtd). | +| **Summary File** | Required. The path of the summary file containing code coverage statistics such as line, method, and class coverage. The value may contain [minimatch patterns](../file-matching-patterns.md). Example: `$(System.DefaultWorkingDirectory)/MyApp/**/site/cobertura/coverage.xml` | +| **Report Directory** | The path of the code coverage HTML report directory. The report directory is published for subsequent viewing as an artifact of the build. The value may contain [minimatch patterns](../file-matching-patterns.md). Example: `$(System.DefaultWorkingDirectory)/MyApp/**/site/cobertura` | +| **Additional Files** | The file path pattern specifying any additional code coverage files to be published as artifacts of the build. The value may contain [minimatch patterns](../file-matching-patterns.md). Example: `$(System.DefaultWorkingDirectory)/**/*.exec` | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## More Information + +* [Continuous testing scenarios and capabilities](../../test/index.md) + +## Related tasks + +* [Visual Studio Test](visual-studio-test.md) +* [Visual Studio Test Agent Deployment](visual-studio-test-agent-deployment.md) +* [Publish Test Results](publish-test-results.md) +* [Run Functional Tests](run-functional-tests.md) + +## Q&A + + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [test-help-support-shared](../../_shared/test-help-support-shared.md)] + diff --git a/docs/build-release/tasks/test/publish-test-results.md b/docs/build-release/tasks/test/publish-test-results.md new file mode 100644 index 00000000000..8ebd6715286 --- /dev/null +++ b/docs/build-release/tasks/test/publish-test-results.md @@ -0,0 +1,69 @@ +--- +title: VSTS and TFS Build and Test - Publish Test Results step +ms.assetid: 6D7152C7-2CC7-4CB3-8002-2498650A2509 +description: Publish Test Results with the Visual Studio to integrate cloud-based load tests into your build and release pipelines +ms.prod: vs-devops-test-continuous +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Test: Publish Test Results + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/publish-test-results-icon.png) +Publishes the test results to TFS or VSTS when tests are run +using a runner of your choice. + +The task supports popular test result formats +including [JUnit](https://github.com/windyroad/JUnit-Schema/blob/master/JUnit.xsd), +[NUnit 2](http://nunit.org/documentation/), [NUnit 3](https://github.com/nunit/docs/wiki/Test-Result-XML-Format), +Visual Studio Test (TRX), and +[xUnit 2](https://xunit.github.io/docs/format-xml-v2.html). +If you use the built-in tasks such as +[Visual Studio Test](visual-studio-test.md) or [Run Functional Tests](run-functional-tests.md) to run tests, results are +automatically published and you do not need a separate publish test results task. + +## Demands + +The build agent must have the following capabilities: + +* MSBuild +* Azure PowerShell + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Test result format** | Specify the format of the results files you want to publish. The following formats are supported.
    - Version 1 of the task: [JUnit](https://github.com/windyroad/JUnit-Schema/blob/master/JUnit.xsd), [xUnit 2](https://xunit.github.io/docs/format-xml-v2.html), [NUnit 2](http://nunit.org/documentation/), Visual Studio Test Results (TRX)
    - Version 2 of the task: [JUnit](https://github.com/windyroad/JUnit-Schema/blob/master/JUnit.xsd), [xUnit 2](https://xunit.github.io/docs/format-xml-v2.html), [NUnit 2](http://nunit.org/documentation/), [NUnit 3](https://github.com/nunit/docs/wiki/Test-Result-XML-Format), Visual Studio Test Results (TRX) | +| **Test results files** | Use this to specify one or more test results files.
    - Version 1 of the task: You can use a single-folder wildcard (`*`) and recursive wildcards (`**`). For example, `**/TEST-*.xml` searches for all the XML files whose names start with `TEST-` in all subdirectories. Multiple paths can be specified, separated by a semicolon.
    - Version 2 of the task: Uses the [minimatch patterns](../file-matching-patterns.md). For example, `**/TEST-*.xml` searches for all the XML files whose names start with `TEST-` in all subdirectories. | +| **Search folder** | Available only in version 2 of the task. Folder to search for the test result files. Default is `$(System.DefaultWorkingDirectory)` | +| **Merge test results** | When this option is selected, test results from all the files will be reported against a single test run. If this option is not selected, a separate test run will be created for each test result file. | +| **Test run title** | Use this option to provide a name for the test run against which the results will be reported. Variable names declared in the build or release process can be used. | +| **Advanced - Platform** | Build platform against which the test run should be reported. For example, `x64` or `x86`. If you have defined a variable for the platform in your build task, use that here. | +| **Advanced - Configuration** | Build configuration against which the Test Run should be reported. For example, Debug or Release. If you have defined a variable for configuration in your build task, use that here. | +| **Advanced - Upload test results files** | When selected, the task will upload all the test result files as attachments to the test run. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + + +## More Information + +* [Continuous testing scenarios and capabilities](../../test/index.md) + +## Related tasks + +* [Visual Studio Test](visual-studio-test.md) +* [Visual Studio Test Agent Deployment](visual-studio-test-agent-deployment.md) +* [Run Functional Tests](run-functional-tests.md) +* [Publish Code Coverage Results](publish-code-coverage-results.md) + +## Q&A + + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [test-help-support-shared](../../_shared/test-help-support-shared.md)] diff --git a/docs/build-release/tasks/test/run-functional-tests.md b/docs/build-release/tasks/test/run-functional-tests.md new file mode 100644 index 00000000000..79af0e63384 --- /dev/null +++ b/docs/build-release/tasks/test/run-functional-tests.md @@ -0,0 +1,140 @@ +--- +title: VSTS and TFS Build and Test - Run Functional Tests step +ms.assetid: DAA55EF5-A6A2-4962-80A0-7D25E64D1DE2 +description: Run Coded UI/Selenium/Functional tests on a set of machines using the Test Agent to integrate cloud-based load tests into your build and release pipelines +ms.prod: vs-devops-test-continuous +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Test: Run Functional Tests + +[!INCLUDE [temp](../../_shared/version-tfs-2015-update.md)] + +![icon](_img/run-functional-tests-icon.png) +Run Coded UI tests, Selenium tests, and functional tests on a set of machines using the test agent. +Use this task when you want to run tests on remote machines, and you cannot run +tests on the build machine. + +## Demands and prerequisites + +This task must be preceded by a **Visual Studio Test Agent Deployment** task. + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Machines** | A comma-separated list of machine FQDNs or IP addresses, optionally including the port number. Can be:
    - The name of an Azure Resource Group.
    - A comma-delimited list of machine names. Example: `dbserver.fabrikam.com,dbserver_int.fabrikam.com:5986,192.168.34:5986`
    - An output variable from a previous task. | +| **Test Drop Location** | Required. The location on the test machine(s) where the test binaries have been copied by a Windows Machine File Copy or Azure File Copy task. System environment variables from the test agent machines can be used to specify the drop location. Examples: `c:\tests` and `%systemdrive%\Tests` | +| **Test Selection** | Required. Whether the tests are to be selected from test assemblies or from a test plan. | +| **Test Assembly** | Required when **Test Selection** is set to **Test Assembly**. The test assemblies from which the tests should be executed. Paths are relative to the sources directory.
    - Separate multiple paths with a semicolon.
    - Default is `**\*test*.dll`
    - For JavaScript tests, enter the path and name of the **.js** files containing the tests.
    - Wildcards can be used. Example: `**\commontests\*test*.dll; **\frontendtests\*test*.dll` | +| **Test Filter criteria** | Optional when **Test Selection** is set to **Test Assembly**. A filter to specify the tests to execute within the test assembly files. Works the same way as the `/TestCaseFilter` option of vstest.console.exe. Example: **Priority=1 \| Name=MyTestMethod** | +| **Test Plan** | Required if **Test Suite** is not specified when **Test Selection** is set to **Test Plan**. Select a test plan already configured for this account. | +| **Test Suite** | Required if **Test Plan** is not specified when **Test Selection** is set to **Test Plan**. Select a test suite from the selected test plan. | +| **Test Configuration** | Optional when **Test Selection** is set to **Test Plan**. Select a test configuration from the selected test plan. | +| **Run Settings File** | Optional. The path to a `.runsettings` or `.testsettings` file on the build machine. Can be the path to a file in the repository or a file on disk. Use `$(Build.SourcesDirectory)` to specify the project root folder. | +| **Override Test Run Parameters** | Optional. A string containing parameter overrides for parameters defined in the `TestRunParameters` section of the `.runsettings` file. Example: `Platform=$(platform);Port=8080` | +| **Code Coverage Enabled** | When set, the task will collect code coverage information during the run and upload the results to the server. Supported for .NET and C++ projects only. | +| **Distribute tests by number of machines** | When checked, distributes tests based on the number of machines, instead of distributing tests at the assembly level, irrespective of the container assemblies passed to the task. | +| **Test Run Title** | Optional. A name for this test run, used to identify it for reporting and in comparison with other test runs. | +| **Platform** | Optional. The build platform against which the test run should be reported. Used only for reporting.
    - If you are using the **Build - Visual Studio** template, this is automatically defined, such as `x64` or `x86`
    - If you have defined a variable for platform in your build task, use that here. | +| **Configuration** | Optional. The build configuration against which the test run should be reported. Used only for reporting.
    - If you are using the **Build - Visual Studio** template, this is automatically defined, such as `Debug` or `Release`
    - If you have defined a variable for configuration in your build task, use that here. | +| **Test Configurations** | Optional. A string that contains the filter(s) to report the configuration on which the test case was run. Used only for reporting with Microsoft Test Manager (MTM).
    - Syntax: {expression for test method name(s)} **:** {configuration ID from MTM}
    - Example: `FullyQualifiedName~Chrome:12` to report all test methods that have **Chrome** in the **Fully Qualified Name** and map them to configuration ID **12** defined in MTM.
    - Use ```DefaultTestConfiguration:{Id}``` as a catch-all. | +| **Application Under Test Machines** | A list of the machines on which the Application Under Test (AUT) is deployed, or on which a specific process such as W3WP.exe is running. Used to collect code coverage data from these machines. Use this in conjunction with the **Code Coverage Enabled** setting. The list can be a comma-delimited list of machine names or an output variable from an earlier task. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## Scenarios + +Typical scenarios include: + +* Tests that require additional installations on the test machines, such as different browsers for Selenium tests +* Coded UI tests +* Tests that require a specific operating system configuration +* To execute a large number of unit tests more quickly by using multiple test machines + +Use this task to: + +* Run automated tests against on-premises standard environments +* Run automated tests against existing Azure environments +* Run automated tests against newly provisioned azure environments + +You can run unit tests, integration tests, functional tests - +in fact any test that you can execute using the Visual Studio +test runner ([vstest](https://msdn.microsoft.com/en-us/library/jj155800.aspx)). + +Using multiple machines in a Machine Group enables +the task to run parallel distributed execution of tests. +Parallelism is at the test assembly level, not at individual +test level. + +These scenarios are supported for: + +* **TFS on-premises and VSTS** + +* **Build agents** + - [Hosted](../../concepts/agents/hosted.md) and [on-premises](../../concepts/agents/agents.md) agents. + - Using the XPlat agent is not supported for any Behavior Driver Test (BDT) tasks. + - The build agent must be able to communicate with all test machines. If the test machines + are on-premises, the hosted build agent cannot be used. + - The build agent must have access to the Internet to download test agents. If this + is not the case, the test agent must be manually downloaded and deployed to a network + location that is accessible by the build agent, and a **Visual Studio Test Agent Deployment** + task used with an appropriate path for the **Test Agent Location** parameter. + Automatic checking for new test agent versions is not supported in this topology. + +* **CI/CD workflow** + - The BDT tasks are supported in both build and release management definitions. + +* **Machine group configuration** + - Only Windows machines are supported when using BDT tasks inside a Machine Group. Using + Linux, iOS, or other platforms inside a Machine Group with BDT tasks is not supported. + - Installing any version or release of Visual Studio on any of the test machines is not supported. + - Installing an older version of the test agent on any of the test machines is not supported. + +* **Test machine topologies** + - Azure-based test machines are fully supported, both existing test machines and newly provisioned machines. + - Domain-joined test machines are supported. + - Workgroup-joined test machines must have HTTPS authentication enabled and configured during creation of the Machine Group. + - Test agent machines must have network access to the Team Foundation Server instance. Test machines isolated on the network are not supported. + +* **Usage Error Conditions** + - Running tests across different Machine Groups, and running builds + (with any BDT tasks) in parallel against these Machine Groups is not supported. + - Cancelling an in-progress build or release with BDT tasks is not + supported. If you do so, subsequent builds may not behave as expected. + - Cancelling an in-progress test run queued through BDT tasks is not supported. + - Configuring a test agent and running tests under a non-administrative + account or under a service account is not supported. + +## More information + +* [Using the Visual Studio Agent Deployment task on machines not connected to the internet](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/05/using-visual-studio-agent-deployment-task-on-machines-not-connected-to-the-internet/) +* [Set up environments to run continuous test tasks with your builds](../../test/set-up-continuous-test-environments-builds.md) +* [Testing in Continuous Integration and Continuous Deployment Workflows](https://blogs.msdn.microsoft.com/visualstudioalm/2015/05/29/testing-in-continuous-integration-and-continuous-deployment-workflows/) + +## Related tasks + +* [Deploy Azure Resource Group](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureResourceGroupDeployment) +* [Azure File Copy](https://github.com/Microsoft/vso-agent-tasks/tree/master/Tasks/AzureFileCopy) +* [Windows Machine File Copy](../deploy/windows-machine-file-copy.md) +* [PowerShell on Target Machines](../deploy/powershell-on-target-machines.md) +* [Visual Studio Test Agent Deployment](visual-studio-test-agent-deployment.md) + +## Q&A + + +[!INCLUDE [qa-test-azurerg-machine-group](../_shared/qa-test-azurerg-machine-group.md)] + +[!INCLUDE [qa-test-run-settings-file](../_shared/qa-test-run-settings-file.md)] + +[!INCLUDE [qa-test-customize-code-coverage](../_shared/qa-test-customize-code-coverage.md)] + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [test-help-support-shared](../../_shared/test-help-support-shared.md)] diff --git a/docs/build-release/tasks/test/visual-studio-test-agent-deployment.md b/docs/build-release/tasks/test/visual-studio-test-agent-deployment.md new file mode 100644 index 00000000000..7901e9c2c43 --- /dev/null +++ b/docs/build-release/tasks/test/visual-studio-test-agent-deployment.md @@ -0,0 +1,149 @@ +--- +title: Build and Test - Visual Studio Test Agent Deployment step +ms.assetid: 9A2D83B7-305A-4A67-ABA9-2B028A573EA0 +description: Deploy and configure the Test Agent to run tests on a set of machines to integrate cloud-based load tests into your build and release pipelines +ms.prod: vs-devops-test-continuous +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Test: Visual Studio Test Agent Deployment + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/visual-studio-test-agent-deployment-icon.png) +Deploy and configure the test agent to run tests on a set of machines. + +The test agent deployed by this task can collect data +or run distributed tests using the [Visual Studio Test](visual-studio-test.md) +task. + +## Demands and prerequisites + +This task requires the target computer to have: + +* Windows 7 Service Pack 1 or Windows 2008 R2 Service Pack 2 or higher +* .NET 4.5 or higher +* PSRemoting enabled by running the [Enable-PSRemoting](https://technet.microsoft.com/en-us/library/hh849694.aspx) PowerShell script + +### Windows Remote Management (WinRM) + +[!INCLUDE[deploy-winrm-setup](../_shared/deploy-winrm-setup.md)] + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Machines** | A comma-separated list of machine FQDNs or IP addresses, optionally including the port number. Can be:
    - The name of an Azure Resource Group.
    - A comma-delimited list of machine names. Example: `dbserver.fabrikam.com,dbserver_int.fabrikam.com:5986,192.168.34:5986`
    - An output variable from a previous task. | +| **Admin Login** | The username of either a domain or a local administrative account on the target host(s). This parameter is required when used with a list of machines. It is optional when specifying a machine group and, if specified, overrides the credential settings defined for the machine group.
    - Formats such as **username**, **domain\username**, **machine-name\username**, and **.\username** are supported.
    - UPN formats such as **username@domain.com** and built-in system accounts such as **NT Authority\System** are not supported. | +| **Password** | The password for the administrative account specified above. This parameter is required when used with a list of machines. It is optional when specifying a machine group and, if specified, overrides the credential settings defined for the machine group. Consider using a secret variable global to the build or release definition to hide the password. Example: `$(passwordVariable)` | +| **Protocol** | The protocol that will be used to connect to the target host, either **HTTP** or **HTTPS**. | +| **Agent Configuration - Username** | Required. The username that the test agent will use. Must be an account on the test machines that has administrative permissions.
    - Formats such as **username**, **domain\username**, **machine-name\username**, and **.\username** are supported.
    - UPN formats such as **username@domain.com** and built-in system accounts such as **NT Authority\System** are not supported. | +| **Agent Configuration - Password** | Required. The password for the **Username** for the test agent. To protect the password, create a [variable](../../concepts/definitions/build/variables.md) and use the "padlock" icon to hide it. | +| **Agent Configuration - Run UI tests** | When set, the test agent will run as an interactive process. This is required when interacting with UI elements or starting applications during the tests. For example, Coded UI or Selenium tests that are running on full fidelity browsers will require this option to be set. | +| **Agent Configuration - Enable data collection only** | When set, the test agent will return previously collected data and not re-run the tests. At present this is only available for Code Coverage. Also see Q&A section below. | +| **Advanced - Test agent version** | The version of the test agent to use. | +| **Advanced - Test agent location** | Optional. The path to the test agent (vstf_testagent.exe) if different from the default path.
    - If you use a copy of the test agent located on your local computer or network, specify the path to that instance.
    - The location must be accessible by either the build agent (using the identity it is running under) or the test agent (using the identity configured above).
    - For Azure test machines, the web location can be used. | +| **Advanced - Update test agent** | If set, and the test agent is already installed on the test machines, the task will check if a new version of the test agent is available. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +## Supported scenarios + +Use this task for: + +* Running automated tests against on-premises standard environments +* Running automated tests against existing Azure environments +* Running automated tests against newly provisioned Azure environments + +The supported options for these scenarios are: + +* **TFS** + - On-premises and VSTS

    +* **Build and release agents** + - Hosted and on-premises agents are supported. + - The XPlat agent is not supported for any build/deploy/test tasks + - The agent must be able to communicate with all test machines. + If the test machines are on-premises, the Hosted agent pool in + VSTS cannot be used. + - The agent must have Internet access to download test agents. + If this is not the case, the test agent must be manually + downloaded, uploaded to a network location accessible to + the agent, and the **Test Agent Location** parameter used + to specify the location. The user must manually check for + new versions of the agent and update the test machines.

    +* **Continuous integration/continuous deployment workflows** + - Build/deploy/test tasks are supported in both Build and + Release Management workflows.

    +* **Machine group configuration** + - Only Windows-based machines are supported inside a + machine group for build/deploy/test tasks. Linux, iOS, or + other platforms are not supported inside a machines group. + - Installing any version of Visual Studio on any of the + test machines is not supported. + - Installing any older version of the test agent on any of the + test machines is not supported.

    +* **Test machine topologies** + - Azure-based test machines are fully supported, both + existing test machines and newly provisioned test machines. + - Machines with the test agent installed must have network access + to the TFS instance in use. Network-isolated test machines + are not supported. + - Domain-joined test machines are supported. + - Workgroup-joined test machines must use HTTPS authentication + configured during machine group creation.

    +* **Usage Error Conditions** + - Using the same test machines across different machine groups, + and running builds (with any build/deploy/test tasks) in + parallel against those machine groups is not supported. + - Cancelling an in-progress build or release that contains + any build/deploy/test tasks is not supported. If you do + cancel, behavior of subsequent builds may be unpredictable. + - Cancelling an ongoing test run queued through build/deploy/test + tasks is not supported. + - Configuring the test agent and running tests as a + non-administrator, or by using a service account, is not supported. + - Running tests for Universal Windows Platform apps is not + supported. Use the [Visual Studio Test task](visual-studio-test.md) + to run these tests. + +## Example + +* [Testing in Continuous Integration and Continuous Deployment Workflows](http://blogs.msdn.com/b/visualstudioalm/archive/2015/06/28/10618066.aspx) + +## More information + +* [Using the Visual Studio Agent Deployment task on machines not connected to the internet](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/05/using-visual-studio-agent-deployment-task-on-machines-not-connected-to-the-internet/) +* [Set up automated testing for your builds](https://msdn.microsoft.com/Library/vs/alm/Test/automated-tests/set-up-automated-testing-builds) +* [Source code for this task](https://github.com/Microsoft/vso-agent-tasks/blob/master/Tasks/DeployVisualStudioTestAgent/README.md) + +## Related tasks + +* [Visual Studio Test](visual-studio-test.md) +* [Azure File Copy](../deploy/azure-file-copy.md) +* [Windows Machine File Copy](../deploy/windows-machine-file-copy.md) +* [PowerShell on Target Machines](../deploy/powershell-on-target-machines.md) + +## Q&A + + +#### When would I use the Enable Data Collection Only option? + +An example would be in a client-server application +model, where you deploy the test agent on the servers +and use another task to deploy the test agent +to test machines. This enables you to collect data +from both server and client machines without +triggering the execution of tests on the server +machines. + +[!INCLUDE [qa-test-azurerg-machine-group](../_shared/qa-test-azurerg-machine-group.md)] + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [test-help-support-shared](../../_shared/test-help-support-shared.md)] diff --git a/docs/build-release/tasks/test/visual-studio-test.md b/docs/build-release/tasks/test/visual-studio-test.md new file mode 100644 index 00000000000..77e47855822 --- /dev/null +++ b/docs/build-release/tasks/test/visual-studio-test.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://github.com/Microsoft/vsts-tasks/blob/releases/m109/Tasks/VsTest/README.md +--- diff --git a/docs/build-release/tasks/test/xamarin-test-cloud.md b/docs/build-release/tasks/test/xamarin-test-cloud.md new file mode 100644 index 00000000000..3e0d6179ce4 --- /dev/null +++ b/docs/build-release/tasks/test/xamarin-test-cloud.md @@ -0,0 +1,63 @@ +--- +title: Team Services and Team Foundation Server Build and Test - Xamarin Test Cloud +description: How to use Xamarin Test Cloud when building code in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 8e5b1533-631e-4095-9c58-9f62411b6e64 +ms.manager: douge +ms.author: alewis +ms.date: 08/16/2016 +--- + +# Test: Xamarin Test Cloud + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/xamarin-test-cloud-icon.png) Test mobile apps with Xamarin Test Cloud using Xamarin.UITest + + +## Demands + +None + + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **App File** | - If you want to test a single app, choose **...** and select the .apk file.
    - If you want to test multiple apps, specify a match pattern filter. You can use a single-folder wildcard (`*`) and recursive wildcards (`**`). For example, `**/*.apk` searches for all .apk files in all subdirectories. | +| **dSYM File** | To make crash logs easier to read, upload a .dSYM file that is associated with your app. Specify a path relative to the .ipa file. You can use a match pattern filter. For example: `*.dSYM`
    **Note:** This argument applies only to iOS apps. | +| **Team API Key** | Your Xamarin Test Cloud Team API key. To get it, go to your [Xamarin Test Cloud account](https://testcloud.xamarin.com/account), and then to **Teams & Apps**.
    **Important:** Use a [secret variable](../../concepts/definitions/build/variables.md) to avoid exposing this value. | +| **User Email** | Email address of your [Xamarin Test Cloud account](https://testcloud.xamarin.com/account). | +| **Devices** | The devices string generated by Xamarin Test Cloud. To get this string:
    - Go to your [Xamarin Test Cloud account](https://testcloud.xamarin.com/account).
    - Choose **New Test Run**.
    - Step through the wizard.
    - When you reach the final page, copy the ID that follows the **--devices** option. | +| **Series** | Series name for the test run. For example, `master`, `production`, or `beta`. See [Xamarin: Creating A Test Run for a Team](https://developer.xamarin.com/guides/testcloud/organizations-and-teams/creating-a-test-run/). | +| **Test Assembly Directory** | Relative path to the folder that contains the test assemblies. For example: `SolutionName/TestsProjectName/bin/Release`. | +| **Advanced - Parallelization** | Select None, By test fixture, or By test method. | +| **Advanced - System Language** | Select your language. If it isn't displayed, select Other and then enter its locale below. For example: `en_AU`. | +| **Advanced - test-cloud.exe Location** | Location of test-cloud.exe. In most cases leave this set to the default value. | +| **Advanced - Optional Arguments** | (Optional) Arguments passed to test-cloud.exe. See [Submitting UITests at the Command Line](https://developer.xamarin.com/guides/testcloud/uitest/working-with/submitting-tests-at-command-line/). | +| **Advanced - Publish results to VSO/TFS** | Select if you want to pass the **--nunit-xml** option to test-cloud.exe so that results from the NUnit xml file are be published to TFS or VSTS. | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + + +## Example + +[Build your Xamarin app](../../apps/mobile/xamarin.md) + + +## Q&A + + + +### How do I add a Xamarin UITest to my solution? + +[Adding Xamarin.UITest to a Solution](https://developer.xamarin.com/guides/testcloud/uitest/adding-uitest/) + + +[!INCLUDE [temp](../_shared/qa-minimatch.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/tool/_img/node.png b/docs/build-release/tasks/tool/_img/node.png new file mode 100644 index 00000000000..ccbddf54c6c Binary files /dev/null and b/docs/build-release/tasks/tool/_img/node.png differ diff --git a/docs/build-release/tasks/tool/_img/nuget.png b/docs/build-release/tasks/tool/_img/nuget.png new file mode 100644 index 00000000000..4140f9bd969 Binary files /dev/null and b/docs/build-release/tasks/tool/_img/nuget.png differ diff --git a/docs/build-release/tasks/tool/node-js.md b/docs/build-release/tasks/tool/node-js.md new file mode 100644 index 00000000000..e069442b62f --- /dev/null +++ b/docs/build-release/tasks/tool/node-js.md @@ -0,0 +1,44 @@ +--- +title: Node Tool Installer +description: Node Tool Installer for VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 740DA69C-E173-46AD-BA6F-0F138285AC39 +ms.manager: douge +ms.author: alewis +ms.date: 4/17/2017 +--- + +# Tool: Node Tool Installer + +**VSTS** + +**Build** + +![icon](_img/node.png) Finds or downloads and caches the specified version of [Node.js](https://nodejs.org/) and adds it to the PATH + +## Demands + +None + +## Arguments + +| Argument | Description | +|----------|-------------| +| Version Spec | Specify which [Node.js version](https://nodejs.org/en/download/releases/) you want to use. Examples: `7.x`, `6.x`, `6.10.0`, `>=6.10.0` | +| Check for Latest Version | Select if you want the agent to check for the latest available version that satisfies the version spec. For example, you select this option because you run this build on your [private agent](../../concepts/agents/agents.md#install) and you want to always use the latest `6.x` version.

    TIP

    If you're using [our hosted agents](../../concepts/agents/hosted.md), you should leave this check box cleared. We update the hosted agents on a regular basis, but they're often slightly behind the latest version. So selecting this box will result in your build spending a lot of time updating to a newer minor version.

    | +| Control options | See [Control options](../../concepts/process/tasks.md#controloptions). | + + +## Q&A + + +### Where can I learn more about tool installers? + +For an explanation of tool installers and examples, see [Tool installers](../../concepts/process/tasks.md#tool-installers). + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/tool/nuget.md b/docs/build-release/tasks/tool/nuget.md new file mode 100644 index 00000000000..279f3cbb09f --- /dev/null +++ b/docs/build-release/tasks/tool/nuget.md @@ -0,0 +1,44 @@ +--- +title: NuGet Tool Installer +description: NuGet Tool Installer +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 740DA69C-E173-46AD-BA6F-0F138285AC39 +ms.manager: douge +ms.author: amullans +ms.date: 7/05/2017 +--- + +# Tool: NuGet Tool Installer + +**VSTS** + +**Build** + +![icon](_img/nuget.png) Finds or downloads and caches the specified version of [NuGet](https://nuget.org/) and adds it to the PATH + +## Demands + +None + +## Arguments + +| Argument | Description | +|----------|-------------| +| Version Spec | Specify which [NuGet version](https://dist.nuget.org/en/download/releases/) you want to use. Examples: `4.1.0`, `3.x`, `>2.x`, `>=3.5` | +| Check for Latest Version | Select if you want the agent to check for the latest available version that satisfies the version spec. For example, you select this option because you run this build on your [private agent](../../concepts/agents/agents.md#install) and you want to always use the latest `3.x` version.
    TIP

    If you're using [our hosted agents](../../concepts/agents/hosted.md), you should leave this check box cleared. We update the hosted agents on a regular basis, but they're often slightly behind the latest version. So selecting this box will result in your build spending a lot of time updating to a newer minor version.

    | +| Control options | See [Control options](../../concepts/process/tasks.md#controloptions). | + + +## Q&A + + +### Where can I learn more about tool installers? + +For an explanation of tool installers and examples, see [Tool installers](../../concepts/process/tasks.md#tool-installers). + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/transforms-variable-substitution.md b/docs/build-release/tasks/transforms-variable-substitution.md new file mode 100644 index 00000000000..6668d9b94ef --- /dev/null +++ b/docs/build-release/tasks/transforms-variable-substitution.md @@ -0,0 +1,392 @@ +--- +title: File transforms and variable substitution +description: File transforms and variable substitution for tasks in Viosual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: C287712A-8979-444C-8B1F-A7B3016801D6 +ms.manager: douge +ms.author: ahomer +ms.date: 06/07/2017 +--- + +# File transforms and variable substitution reference + +Some tasks, such as the [Azure App Service Deploy](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/AzureRmWebAppDeployment) task +version 3 and later and the [IIS Web App Deploy](deploy/iis-deploy.md) task, allow users to configure the package based on the environment specified. + +This configuration is specified in the **File Transform and Variable Substitution Options** +section of the settings for the tasks. The transformation and substitution options are: + +* [XML transformation](#xmltransform) +* [XML variable substitution](#xmlvarsubs) +* [JSON variable substitution](#jsonvarsubs) + + +## XML Transformation + +XML transformation supports transforming the configuration files (`*.config` files) +by following [Web.config Transformation Syntax](https://msdn.microsoft.com/en-us/library/dd465326.aspx) +and is based on the environment to which the web package will be deployed. +This option is useful when you want to add, remove or modify configurations for different environments. +Transformation will be applied for other configuration files including Console or Windows service application +configuration files (for example, **FabrikamService.exe.config**). + +### Configuration transform file naming conventions + +XML transformation will be run on the `*.config` file for +transformation configuration files named `*.Release.config` or `*..config` +and will be executed in the following order: + +1. `*.Release.config` (for example, **fabrikam.Release.config**) +1. `*..config` (for example, **fabrikam.Production.config**) + +For example, if your package contains the following files: + +* Web.config +* Web.Debug.config +* Web.Release.config +* Web.Production.config + +and your environment name is **Production**, the transformation is applied +for `Web.config` with `Web.Release.config` followed by `Web.Production.config`. + +### XML transformation example + +1. Create a Web Application package with the necessary configuration and transform files. + For example, use the following configuration files: + + **Configuration file** + + ```xml + + + + + + + + + + + + + + + ``` +

    + + **Transform file** + + ```xml + + + + + + + + + + + + + ``` +

    + + This example transform configuration file does three things: + + * It adds a new database connection string inside the `ConnectionStrings` element. + * It modifies value of `Webpages:Enabled` inside the `appSettings` element. + * It removes the `debug` attribute from the `compilation` element inside the `System.Web` element. + + >For more information, see [Web.config Transformation Syntax for Web Project Deployment Using Visual Studio](https://msdn.microsoft.com/en-us/library/dd465326.aspx) + +1. Create a release definition with an environment named **Release**. + +1. Add an **Azure App Service Deploy** task and set (tick) the **XML transformation** option. + + ![Release definition for XML transformation](_img/release-definition2.png) + +1. Save the release definition and start a new release. + +1. Open the `Web.config` file to see the transformations from `Web.Release.config`. + + ```xml + + + + + + + + + + + + + + + + ``` + +**Note**: + +* You can use this technique to create a default package and deploy it to multiple environments. + +* XML transformation takes effect only when the configuration file and transform file + are in the same folder within the specified package. + +* Set the **Copy to Output Directory** property for the configuration transform files to **Copy If Newer**. + +* By default, MSBuild applies the transformation as it generates the web package if the `` element + is already present in the transform file in the `*.csproj` file. In such cases, the **Azure App Service Deploy** + task will fail because there is no further transformation applied on the `Web.config` file. Therefore, it is + recommended that the `` element is removed from all the transform files to disable any build-time + configuration when using XML transformation. + + ```xml + ... + + Web.config + + + Web.config + + ... + ``` + + +## XML variable substitution + +This feature enables you to modify configuration settings in configuration files inside web packages. +In this way, the same package can be configured based on the environment to which it will be deployed. + +Variable substitution takes effect only on the `applicationSettings`, `appSettings`, `connectionStrings`, +and `configSections` elements of configuration files. + +### XML variable substitution example + +As an example, consider the task of changing the following values in `Web.config`: + +```xml + + + +

    + + + + + + + + + + + + + + + + + + + + + + + +``` +

    + +1. Create a release definition with an environment named **Release**. + +1. Add an **Azure App Service Deploy** task and set (tick) the **XML variable substitution** option. + + ![Release definition for XML variable substitution](_img/release-definition.png) + +1. Define the required values in release definition variables: + + | Name | Value | Secure | Scope | + | ---- | ----- | ------ | ----- | + | DefaultConnection | Data Source=(ProdDB)\\MSSQLProdDB;AttachFileName=Local.mdf | No | Release | + | AdminUserName | ProdAdminName | No | Release | + | AdminPassword | [your-password] | Yes | Release | + | invariantName | System.Data.SqlClientExtension | No | Release | + +1. Save the release definition and start a new release. + +1. Open the `Web.config` file to see the variable substitutions. + + ```xml + + + +

    + + + + + + + + + + + + + + + + + + + + ``` + +**Note**: + +* By default, ASP.NET applications have a default parameterized connection attribute. + These values are overridden only in the `parameters.xml` file inside the web package. + +* Because substitution occurs before deployment, the user can override the + values in `Web.config` using `parameters.xml` (inside the web package) or + a `setparameters` file. + + +## JSON variable substitution + +This feature substitutes values in the JSON configuration files. +It overrides the values in the specified JSON configuration files +(for example, `appsettings.json`) with the values matching names of release definition +and environment variables. + +To substitute variables in specific JSON files, provide newline-separated +list of JSON files. File names must be specified relative to the root folder. +For example, if your package has this structure: + +```Folders +/WebPackage(.zip) + /---- content + /----- website + /---- appsetttings.json + /---- web.config + /---- [other folders] + /--- archive.xml + /--- systeminfo.xml +``` + +and you want to substitute values in **appsettings.json**, enter the relative +path from the root folder; for example `content/website/appsettings.json`. +Alternatively, use wildcard patterns to search for specific JSON files. +For example, `**/appsettings.json` returns the relative path and name of files +named **appsettings.json**. + +### JSON variable substitution example + +As an example, consider the task of overriding values in this JSON file: + +```json +{ + "Data": { + "DefaultConnection": { + "ConnectionString": "Data Source=(LocalDb)\MSDB;AttachDbFilename=aspcore-local.mdf;" + }, + "DebugMode": "enabled", + "DBAccess": { + "Admininstrators": ["Admin-1", "Admin-2"], + "Users": ["Vendor-1", "vendor-3"] + }, + "FeatureFlags": { + "Preview": [ + { + "newUI": "AllAccounts" + }, + { + "NewWelcomeMessage": "Newusers" + } + ] + } + } +} + +``` +

    + +The task is to override the values of **ConnectionString**, **DebugMode**, +the first of the **Users** values, and **NewWelcomeMessage** at the respective places within the JSON file hierarchy. + +1. Create a release definition with an environment named **Release**. + +1. Add an **Azure App Service Deploy** task and enter a newline-separated + list of JSON files to substitute the variable values in the **JSON variable substitution** textbox. + Files names must be relative to the root folder. + You can use wildcards to search for JSON files. For example: + `**/*.json` means substitute values in all the JSON files within the package. + + ![Release definition for JSON variable substitution](_img/json-setting.png) + +1. Define the required substitution values in release definition or environment variables. + + | Name | Value | Secure | Scope | + | ---- | ----- | ------ | ----- | + | DebugMode | disabled | No | Release | + | Data.DefaultConnection.ConnectionString | Data Source=(prodDB)\\MSDB;AttachDbFilename=prod.mdf; | No | Release | + | DBAccess.Users.0 | Admin-3 | Yes | Release | + | FeatureFlags.Preview.1.NewWelcomeMessage | AllAccounts | No | Release | + +1. Save the release definition and start a new release. + +1. After the transformation, the JSON will contain the following: + + ```json + { + "Data": { + "DefaultConnection": { + "ConnectionString": "Data Source=(prodDB)\MSDB;AttachDbFilename=prod.mdf;" + }, + "DebugMode": "disabled", + "DBAccess": { + "Admininstrators": ["Admin-1", "Admin-2"], + "Users": ["Admin-3", "vendor-3"] + }, + "FeatureFlags": { + "Preview": [ + { + "newUI": "AllAccounts" + }, + { + "NewWelcomeMessage": "AllAccounts" + } + ] + } + } + } +''' + +**Note**: + +* To substitute values in nested levels of the file, concatenate the names with + a period (`.`) in hierarchical order. + +* A JSON object may contain an array whose values can be referenced by their index. + For example, to substitute the first value in the **Users** array shown above, + use the variable name `DBAccess.Users.0`. To update the value in **NewWelcomeMessage**, + use the variable name `FeatureFlags.Preview.1.NewWelcomeMessage`. + +* Only **String** substitution is supported for JSON variable substitution. + +* Substitution is supported for only UTF-8 and UTF-16 LE encoded files. + +* If the file specification you enter does not match any file, the task will fail. + +* Variable name matching is case-sensitive. + diff --git a/docs/build-release/tasks/utility/_img/archive-files.png b/docs/build-release/tasks/utility/_img/archive-files.png new file mode 100644 index 00000000000..942dc8ed754 Binary files /dev/null and b/docs/build-release/tasks/utility/_img/archive-files.png differ diff --git a/docs/build-release/tasks/utility/_img/azure-service-fabric.png b/docs/build-release/tasks/utility/_img/azure-service-fabric.png new file mode 100644 index 00000000000..815183e2ac8 Binary files /dev/null and b/docs/build-release/tasks/utility/_img/azure-service-fabric.png differ diff --git a/docs/build-release/tasks/utility/_img/batch-script.png b/docs/build-release/tasks/utility/_img/batch-script.png new file mode 100644 index 00000000000..3325f8b024b Binary files /dev/null and b/docs/build-release/tasks/utility/_img/batch-script.png differ diff --git a/docs/build-release/tasks/utility/_img/command-line.png b/docs/build-release/tasks/utility/_img/command-line.png new file mode 100644 index 00000000000..ef769481571 Binary files /dev/null and b/docs/build-release/tasks/utility/_img/command-line.png differ diff --git a/docs/build-release/tasks/utility/_img/copy-and-publish-build-artifacts.png b/docs/build-release/tasks/utility/_img/copy-and-publish-build-artifacts.png new file mode 100644 index 00000000000..183e816aebb Binary files /dev/null and b/docs/build-release/tasks/utility/_img/copy-and-publish-build-artifacts.png differ diff --git a/docs/build-release/tasks/utility/_img/copy-files.png b/docs/build-release/tasks/utility/_img/copy-files.png new file mode 100644 index 00000000000..d1e0774bb1e Binary files /dev/null and b/docs/build-release/tasks/utility/_img/copy-files.png differ diff --git a/docs/build-release/tasks/utility/_img/curl-upload-files.png b/docs/build-release/tasks/utility/_img/curl-upload-files.png new file mode 100644 index 00000000000..3b85e2c8359 Binary files /dev/null and b/docs/build-release/tasks/utility/_img/curl-upload-files.png differ diff --git a/docs/build-release/tasks/utility/_img/delete-files.png b/docs/build-release/tasks/utility/_img/delete-files.png new file mode 100644 index 00000000000..98bd662d9e2 Binary files /dev/null and b/docs/build-release/tasks/utility/_img/delete-files.png differ diff --git a/docs/build-release/tasks/utility/_img/extract-files.png b/docs/build-release/tasks/utility/_img/extract-files.png new file mode 100644 index 00000000000..942dc8ed754 Binary files /dev/null and b/docs/build-release/tasks/utility/_img/extract-files.png differ diff --git a/docs/build-release/tasks/utility/_img/ftp-upload.png b/docs/build-release/tasks/utility/_img/ftp-upload.png new file mode 100644 index 00000000000..490abba147c Binary files /dev/null and b/docs/build-release/tasks/utility/_img/ftp-upload.png differ diff --git a/docs/build-release/tasks/utility/_img/powershell.png b/docs/build-release/tasks/utility/_img/powershell.png new file mode 100644 index 00000000000..25ae5efcd5e Binary files /dev/null and b/docs/build-release/tasks/utility/_img/powershell.png differ diff --git a/docs/build-release/tasks/utility/_img/publish-build-artifacts.png b/docs/build-release/tasks/utility/_img/publish-build-artifacts.png new file mode 100644 index 00000000000..183e816aebb Binary files /dev/null and b/docs/build-release/tasks/utility/_img/publish-build-artifacts.png differ diff --git a/docs/build-release/tasks/utility/_img/shell-script.png b/docs/build-release/tasks/utility/_img/shell-script.png new file mode 100644 index 00000000000..b89cda612f6 Binary files /dev/null and b/docs/build-release/tasks/utility/_img/shell-script.png differ diff --git a/docs/build-release/tasks/utility/_img/xamarin-license.png b/docs/build-release/tasks/utility/_img/xamarin-license.png new file mode 100644 index 00000000000..cd321692264 Binary files /dev/null and b/docs/build-release/tasks/utility/_img/xamarin-license.png differ diff --git a/docs/build-release/tasks/utility/_shared/artifact-arguments.md b/docs/build-release/tasks/utility/_shared/artifact-arguments.md new file mode 100644 index 00000000000..bd0d890b587 --- /dev/null +++ b/docs/build-release/tasks/utility/_shared/artifact-arguments.md @@ -0,0 +1,10 @@ + +Artifact Name +Specify the name of the artifact. For example: ```drop``` + + +Artifact Type + +

    Choose **server** to store the artifact on your Team Foundation Server. This is the best and simplest option in most cases. See [Artifacts in Team Build](../../../concepts/definitions/build/artifacts.md).

    + + diff --git a/docs/build-release/tasks/utility/_shared/artifact-name-argument-md.md b/docs/build-release/tasks/utility/_shared/artifact-name-argument-md.md new file mode 100644 index 00000000000..a6781705919 --- /dev/null +++ b/docs/build-release/tasks/utility/_shared/artifact-name-argument-md.md @@ -0,0 +1 @@ +Specify the name of the artifact. For example: `drop` diff --git a/docs/build-release/tasks/utility/_shared/artifact-type-argument-md.md b/docs/build-release/tasks/utility/_shared/artifact-type-argument-md.md new file mode 100644 index 00000000000..074f625cbea --- /dev/null +++ b/docs/build-release/tasks/utility/_shared/artifact-type-argument-md.md @@ -0,0 +1 @@ +Choose **server** to store the artifact on your Team Foundation Server. This is the best and simplest option in most cases. See [Artifacts in Team Build](../../../concepts/definitions/build/artifacts.md). diff --git a/docs/build-release/tasks/utility/archive-files.md b/docs/build-release/tasks/utility/archive-files.md new file mode 100644 index 00000000000..24133361c1c --- /dev/null +++ b/docs/build-release/tasks/utility/archive-files.md @@ -0,0 +1,107 @@ +--- +title: Archive Files +description: Create an archive file from a source folder in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 9D2AE683-E116-4CEA-B673-CD7BEFB8F415 +ms.manager: douge +ms.author: alewis +ms.date: 08/30/2016 +--- + +# Utility: Archive Files + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![](_img/archive-files.png) Create an archive file from a source folder. A variety of standard archive formats are supported including: .zip, .jar, .war, .ear, .tar, .7z., and others. + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Root folder (or file) to archive +

    The folder (or file) you wish to archive. The default file path is relative from the root folder of the repo (same as if you had specified ```$(Build.SourcesDirectory)```).

    +

    If the specified path is a folder, recursively, all nested files and folders will be included in the archive.

    +

    If the specified path is a file, only the single file will be included in the archive.

    +
    Prefix root folder name to archive pathsIf selected, the root folder name will be prefixed to file paths within the archive. Otherwise, all file paths will start one level lower. +

    For example, suppose the selected root folder is: `/home/user/output/classes/`, and contains: `com/acme/Main.class`. +

      +
    • If selected, the resulting archive would contain: `classes/com/acme/Main.class`. +
    • +
    • Otherwise, the resulting archive would contain: `com/acme/Main.class`.. +
    • +
    +
    Archive typeSpecify the compression scheme used. To create `foo.jar`, for example, choose `zip` for the compression, and specify `foo.jar` as the archive file to create. For all tar files (including compressed ones), choose `tar`. +

    +

      +
    • `zip` - default, zip format, choose this for all zip compatible types, (.zip, .jar, .war, .ear)
    • +
    • `7z` - 7-Zip format, (.7z)
    • +
    • `tar` - tar format, choose this for compressed tars, (.tar.gz, .tar.bz2, .tar.xz)
    • +
    • `wim` - wim format, (.wim)
    • +
    +
    Tar compressionOnly applicable if the `tar` archive type is selected. +

    Optionally choose a compression scheme, or choose `None` to create an uncompressed tar file. +

      +
    • `gz` - default, gzip compression (.tar.gz, .tar.tgz, .taz)
    • +
    • `bz2` - bzip2 compression (.tar.bz2, .tz2, .tbz2)
    • +
    • `xz` - xz compression (.tar.xz, .txz)
    • +
    • `None` - no compression, choose this to create a uncompressed tar file (.tar)
    • +
    +
    Archive file to createSpecify the name of the archive file to create. The file extension should match the selected archive type. For example to create `foo.tgz`, select the `tar` archive type, `gz` for tar compression. +
    Replace existing archiveIf an existing archive exists, specify whether to overwrite it. Otherwise, files will be added to it as long as it is not a comprssed tar. +

    If adding to an existing archive, these types are supported:

    +
      +
    • `zip`
    • +
    • `7z`
    • +
    • `tar` - uncompressed only
    • +
    • `wim`
    • +
    +
    + +## Q & A + + + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/batch-script.md b/docs/build-release/tasks/utility/batch-script.md new file mode 100644 index 00000000000..a9bd3ac6595 --- /dev/null +++ b/docs/build-release/tasks/utility/batch-script.md @@ -0,0 +1,109 @@ +--- +title: Batch script +description: How execute .bat or .cmd scripts when building code in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: E60FC8AE-EDA7-4C1D-BDA5-CDC741FAD3E4 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: Batch script + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/batch-script.png) Run a Windows .bat or .cmd script and optionally allow it to change the environment. + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Path

    Specify the path to the .bat or .cmd script you want to run. The path must be a fully qualified path or a valid path relative to the default working directory.

    +

    +In Team Foundation Build, this directory is [$(Build.SourcesDirectory)](../../concepts/definitions/build/variables.md).

    +
    ArgumentsSpecify arguments to pass to the script.
    Modify environmentSelect this check box if you want environment variable modifications in the script to affect subsequent tasks.
    Advanced
    Working folderSpecify the working directory in which you want to run the script. If you leave it empty, the working directory is the folder where the script is located. +
    Fail on standard errorSelect this check box if you want the build to fail if errors are written to the StandardError stream.
    + +## Example + +Create ```test.bat``` at the root of your repo: + +```bat +@echo off +echo Hello World from %AGENT_NAME%. +echo My ID is %AGENT_ID%. +echo AGENT_WORKFOLDER contents: +@dir %AGENT_WORKFOLDER% +echo AGENT_BUILDDIRECTORY contents: +@dir %AGENT_BUILDDIRECTORY% +echo BUILD_SOURCESDIRECTORY contents: +@dir %BUILD_SOURCESDIRECTORY% +echo Over and out. +``` + +On the Build tab of a build definition, add this step: + + + + + + + +
    ![](_img/batch-script.png)
    **Utility: Batch Script**
    +

    Run test.bat.

    +
      +
    • Path: ```test.bat```
    • +
    +
    + +## Q&A + + + +### Where can I learn about batch files? + +[Using batch files](http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/batch.mspx?mfr=true) + +### Where can I learn Windows commands? + +[An A-Z Index of the Windows CMD command line](http://ss64.com/nt/) + +[!INCLUDE [include](../../concepts/definitions/_shared/variable-set-in-script-qa.md)] + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/command-line.md b/docs/build-release/tasks/utility/command-line.md new file mode 100644 index 00000000000..7d8d6341f88 --- /dev/null +++ b/docs/build-release/tasks/utility/command-line.md @@ -0,0 +1,129 @@ +--- +title: Command line +description: How to execute tools from a command prompt when building code in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 72C7D4F4-E626-42FF-BCA8-24D58D9A960F +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: Command line + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +[//]: # (What happens on cross-platform agent?) + +![](_img/command-line.png) Run a program from the command prompt. + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Tool

    Specify the tool you want to run.

    +

    If you are using an on-premises agent, in most cases you should configure the machine so that the tool is on the PATH enviornment variable. But if you know the location of the tool, you can specify a fully qualified path.

    + + + +
    ArgumentsSpecify arguments to pass to the tool.
    Advanced
    Working folderSpecify the working directory in which you want to run the command. If you leave it empty, the working directory is [$(Build.SourcesDirectory)](../../concepts/definitions/build/variables.md).
    Fail on standard errorSelect this check box if you want the build to fail if errors are written to the StandardError stream.
    + +## Example + +On the Build tab of a build definition, add these steps: + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ![](_img/command-line.png)
    **Utility: Command Line** +
    +

    Get the date.

    +
      +
    • Tool: ```date```
    • +
    • Arguments: ```/t```
    • +
    +
    ![](_img/command-line.png)
    **Utility: Command Line**
    +

    Display the operating system version.

    +
      +
    • Tool: ```ver```
    • +
    +
    ![](_img/command-line.png)
    **Utility: Command Line**
    +

    Display the environment variables.

    +
      +
    • Tool: ```set```
    • +
    +
    ![](_img/command-line.png)
    **Utility: Command Line**
    +

    Display all files in all the folders created by the build definition.

    +
      +
    • Tool: ```dir```
    • +
    • Arguments: ```/s```
    • +
    • Advanced, Working folder: ```$(Agent.BuildDirectory)```
    • +
    +
    + +## Q&A + + + +### Where can I learn Windows commands? + +[An A-Z Index of the Windows CMD command line](http://ss64.com/nt/) + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/copy-and-publish-build-artifacts.md b/docs/build-release/tasks/utility/copy-and-publish-build-artifacts.md new file mode 100644 index 00000000000..910042690c2 --- /dev/null +++ b/docs/build-release/tasks/utility/copy-and-publish-build-artifacts.md @@ -0,0 +1,82 @@ +--- +title: Copy and publish build artifacts +description: How to copy build artifacts to a staging folder and publish them with VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 67C942BB-6DC7-4016-9364-50E3A3FEACDD +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: Copy and Publish Build Artifacts + +**[VSTS](publish-build-artifacts.md) | [TFS 2017](publish-build-artifacts.md) | [TFS 2015 Update 3](publish-build-artifacts.md) | TFS 2015 RTM | [Previous versions (XAML builds)](http://msdn.microsoft.com/library/ms181709%28v=vs.120%29.aspx)** + +![](_img/copy-and-publish-build-artifacts.png) Copy build artifacts to a staging folder and then publish them to the server or a file share. + +> [!IMPORTANT] +> +> Are you using VSTS, Team Foundation Server (TFS) 2015 Update 3, or newer? If so, then we recommend that you do not use this task; it's deprecated. Instead, you should use the **Copy Files** and **Publish Build Artifacts** tasks. See [Artifacts in Team Build](../../concepts/definitions/build/artifacts.md). +> +> You should use this task only if you're using Team Foundation Server (TFS) 2015 RTM. In that version of TFS this task is listed under the **Build** category and it's called **Publish Build Artifacts**. +> + +Files are copied to the `$(Build.ArtifactStagingDirectory)` staging folder and then published. + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + +[!INCLUDE [temp](_shared/artifact-arguments.md)] +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Copy Root +

    Folder that contains the files you want to copy. If you leave it empty, the copying is done from the root folder of the repo (same as if you had specified ```$(Build.SourcesDirectory)```).

    +

    If your build produces artifacts outside of the sources directory, specify ```$(Agent.BuildDirectory)``` to copy files from the build agent working directory.

    +
    Contents

    Specify pattern filters (one on each line) that you want to apply to the list of files to be copied. For example: +

    +
      +
    • ```**``` copies all files in the root folder.
    • +
    • ```**\*``` copies all files in the root folder and all files in all sub-folders.
    • +
    • ```**\bin``` copies files in any sub-folder named bin.
    • +
    +
    + + +## Q & A + + + +### Q: This step didn't produce the outcome I was expecting. How can I fix it? + +This step has a couple of known issues: + +* Some minimatch patterns don't work. + +* It eliminates the most common root path for all paths matched. + +You can avoid these issues by instead using the [Copy Files step](copy-files.md) and the [Publish Build Artifacts step](publish-build-artifacts.md). + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + + diff --git a/docs/build-release/tasks/utility/copy-files.md b/docs/build-release/tasks/utility/copy-files.md new file mode 100644 index 00000000000..4c4505d9176 --- /dev/null +++ b/docs/build-release/tasks/utility/copy-files.md @@ -0,0 +1,149 @@ +--- +title: Copy Files +description: How to copy files between folders with match patterns when building code in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: BB8401FB-652A-406B-8920-4BD8977BFE68 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: Copy Files + +[!INCLUDE [temp](../../_shared/version-tfs-2015-update.md)] + +![](_img/copy-files.png) Copy files from a source folder to a target folder using match patterns. + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Source Folder +

    Folder that contains the files you want to copy. If you leave it empty, the copying is done from the root folder of the repo (same as if you had specified ```$(Build.SourcesDirectory)```).

    +

    If your build produces artifacts outside of the sources directory, specify ```$(Agent.BuildDirectory)``` to copy files from the directory created for the definition.

    +
    Contents

    Specify match pattern filters (one on each line) that you want to apply to the list of files to be copied. For example: +

    +
      +
    • ```*``` copies all files in the root folder.
    • +
    • ```**\*``` copies all files in the root folder and all files in all sub-folders.
    • +
    • ```**\bin\**``` copies all files recursively from any ```bin``` folder.
    • +
    +

    The pattern is used to match only file paths, not folder paths. So you should specify patterns such as ```**\bin\**``` instead of of ```**\bin```.

    +

    More examples are shown below.

    +
    Target FolderFolder where the files will be copied. In most cases you specify this folder using a variable. For example, specify ```$(Build.ArtifactStagingDirectory)``` if you intend to [publish the files as build artifacts](../../concepts/definitions/build/artifacts.md).
    Advanced
    Clean Target FolderSelect this check box to delete all existing files in the target folder before beginning to copy.
    Over WriteSelect this check box to replace existing files in the target folder.
    + +## Examples + +### Copy executables and a readme file + +#### Goal + +You want to copy just the readme and the files needed to run this C# console app: + +``` +`-- ConsoleApplication1 + |-- ConsoleApplication1.sln + |-- readme.txt + `-- ClassLibrary1 + |-- ClassLibrary1.csproj + `-- ClassLibrary2 + |-- ClassLibrary2.csproj + `-- ConsoleApplication1 + |-- ConsoleApplication1.csproj +``` + +On the Variables tab, ```$(BuildConfiguration)``` is set to ```release```. + +#### Arguments + +* Source Folder: ```$(Build.SourcesDirectory)``` + +* Contents (example of multiple match patterns): + + ``` + ConsoleApplication1\ConsoleApplication1\bin\**\*.exe + ConsoleApplication1\ConsoleApplication1\bin\**\*.dll + ConsoleApplication1\readme.txt + ``` + +* Contents (example of OR condition): + + ``` + ConsoleApplication1\ConsoleApplication1\bin\**\?(*.exe|*.dll) + ConsoleApplication1\readme.txt + ``` + +* Contents (example of NOT condition): + + ``` + ConsoleApplication1\**\bin\**\!(*.pdb|*.config) + !ConsoleApplication1\**\ClassLibrary*\** + ConsoleApplication1\readme.txt + ``` + +* Target Folder: ```$(Build.ArtifactStagingDirectory)``` + +#### Results + +These files are copied to the staging directory: + +``` +`-- ConsoleApplication1 + |-- readme.txt + `-- ConsoleApplication1 + `-- bin + `-- Release + | -- ClassLibrary1.dll + | -- ClassLibrary2.dll + | -- ConsoleApplication1.exe +``` + +## Q & A + + + +[!INCLUDE [include](../_shared/qa-minimatch.md)] + +### How do I use this task to publish artifacts? + +See [Artifacts in Team Build](../../concepts/definitions/build/artifacts.md). + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/curl-upload-files.md b/docs/build-release/tasks/utility/curl-upload-files.md new file mode 100644 index 00000000000..e98ec4515d9 --- /dev/null +++ b/docs/build-release/tasks/utility/curl-upload-files.md @@ -0,0 +1,90 @@ +--- +title: cURL Upload Files +description: cURL Upload Files in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: E231D775-2BCE-4DFA-8C20-C17F83ECD700 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: cURL Upload Files + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/curl-upload-files.png) Use [cURL](http://curl.haxx.se/) to upload files with supported protocols. (FTP, FTPS, SFTP, HTTP, and more) + +## Demands + +curl + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Files +

    If you want to upload a single file, click the ... button and select the file.

    +

    If you want to upload multiple files, specify a minimatch pattern filter. For example, specify `**\*.zip` to upload all ZIP files in all sub-folders.

    +
    Username +Specify the username for server authentication. +
    Password +

    Specify the password for server authentication.

    +
    Important: Use a [secret variable](../../concepts/definitions/build/variables.md) to avoid exposing this value.
    +
    URL +

    URL to the location where you want to upload the files. If you are uploading to a folder, make sure to end the argument with a trailing slash.

    +

    Acceptable URL protocols include `DICT://`, `FILE://`, `FTP://`, `FTPS://`, `GOPHER://`, `HTTP://`, `HTTPS://`, `IMAP://`, `IMAPS://`, `LDAP://`, `LDAPS://`, `POP3://`, `POP3S://`, `RTMP://`, `RTSP://`, `SCP://`, `SFTP://`, `SMTP://`, `SMTPS://`, `TELNET://`, and `TFTP://`.

    +
    Optional Arguments +Arguments to pass to cURL. +
    Advanced
    Redirect Standard Error to Standard Out +

    In most cases you should leave this selected.

    +

    Select if you want to add **--stderr -** as an argument to cURL. Otherwise, if you clear this check box, cURL will write its progress bar to stderr, which is interpreted by the build process as error output, which could cause the build to fail.

    +
    + +## Q&A + + +[!INCLUDE [include](../_shared/qa-minimatch.md)] + +### Where can I learn FTP commands? + +[List of raw FTP commands](http://www.nsftools.com/tips/RawFTP.htm) + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/delete-files.md b/docs/build-release/tasks/utility/delete-files.md new file mode 100644 index 00000000000..26d39954a87 --- /dev/null +++ b/docs/build-release/tasks/utility/delete-files.md @@ -0,0 +1,77 @@ +--- +title: Delete files +description: How to delete files from a build agent working directory when building code in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: C71CD55E-3028-4526-A9C3-779ECE31CCD1 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: Delete files + +[!INCLUDE [temp](../../_shared/version-tfs-2015-update.md)] + +![](_img/delete-files.png) Delete files or folders. + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Source Folder +

    Folder that contains the files you want to delete. If you leave it empty, the deletions are done from the root folder of the repo (same as if you had specified ```$(Build.SourcesDirectory)```).

    +

    If your build produces artifacts outside of the sources directory, specify ```$(Agent.BuildDirectory)``` to delete files from the build agent working directory.

    +
    Contents +

    Specify minimatch pattern filters (one on each line) that you want to apply to the list of files to be deleted. For example: +

    +
      +
    • ```**``` deletes all files and folders in the root folder.
    • +
    • ```temp``` deletes the temp folder in the root folder.
    • +
    • ```temp*``` deletes any file or folder in the root folder with a name that begins with temp.
    • +
    • ```**\temp\**``` deletes all files in any sub-folder named temp.
    • +
    • ```**\temp*``` deletes any file or folder with a name that begins with temp.
    • +
    • ```**\temp*\**``` deletes files in any sub-folder that begins with the name temp.
    • +
    +
    + +## Q & A + + + +### Q: What's a minimatch pattern? How does it work? + +A: See: + +* https://github.com/isaacs/minimatch + +* https://realguess.net/tags/minimatch/ + + + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + + diff --git a/docs/build-release/tasks/utility/extract-files.md b/docs/build-release/tasks/utility/extract-files.md new file mode 100644 index 00000000000..3247f4ce151 --- /dev/null +++ b/docs/build-release/tasks/utility/extract-files.md @@ -0,0 +1,71 @@ +--- +title: Extract Files +description: Extract files from archives to a target folder using minimatch patterns on VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: fe025768-2cb4-4939-b22f-8f69155bf310 +ms.manager: douge +ms.author: alewis +ms.date: 08/15/2016 +--- + +# Utility: Extract Files + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![](_img/extract-files.png) Extract files from archives to a target folder using match patterns. A variety of standard archive formats are supported including: .zip, .jar, .war, .ear, .tar, .7z., and others. + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Archive file patterns +

    The archives you want to extract. The default file path is relative from the root folder of the repo (same as if you had specified ```$(Build.SourcesDirectory)```).

    +

    Specify match pattern filters (one on each line) that you want to apply to identify the list of archives to extract. For example: +

    +
      +
    • ``` test.zip``` extracts the test.zip file to the root folder.
    • +
    • ```test\*.zip``` extracts all .zip files in the test folder.
    • +
    • ```**\*.tar``` extracts all .tar files in the root folder and sub-folders.
    • +
    • ```**\bin\*.7z``` extracts all ''.7z'' files in any sub-folder named bin.
    • +
    +

    The pattern is used to match only archive file paths, not folder paths, and not archive contents to be extracted. So you should specify patterns such as ```**\bin\**``` instead of of ```**\bin```.

    +
    Destination folderFolder where the archives will be extracted. The default file path is relative to the root folder of the repo (same as if you had specified ```$(Build.SourcesDirectory)```).
    Clean destination folder before extractingSelect this check box to delete all existing files in the destination folder before beginning to extract archives.
    + +## Q & A + + + +[!INCLUDE [include](../_shared/qa-minimatch.md)] + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/ftp-upload.md b/docs/build-release/tasks/utility/ftp-upload.md new file mode 100644 index 00000000000..2deca82dad7 --- /dev/null +++ b/docs/build-release/tasks/utility/ftp-upload.md @@ -0,0 +1,76 @@ +--- +title: FTP Upload +description: Upload files to a remote machine using the File Transfer Protocol (FTP), or securely with FTPS on VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 83301736-4DC7-4581-9AFD-4678BA0D3659 +ms.manager: douge +ms.author: alewis +ms.date: 08/18/2016 +--- + +# Utility: FTP Upload + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![](_img/ftp-upload.png) Upload files to a remote machine using the File Transfer Protocol (FTP), or securely with FTPS. + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    FTP Service Endpoint +

    Select the service endpoint for your FTP server. To create one, click the Manage link and create a new Generic Service Endpoint, enter the FTP server URL for the server URL, e.g. `ftp://server.example.com`, and required credentials.

    Secure connections will always be made regardless of the specified protocol (`ftp://` or `ftps://`) if the target server supports FTPS. To allow only secure connections, use the `ftps://` protocol, e.g. `ftps://server.example.com`. Connections to servers not supporting FTPS will fail if `ftps://` is specified.

    +
    Source folderThe source folder to upload files from. The default file path is relative from the root folder of the repo (same as if you had specified ```$(Build.SourcesDirectory)```).
    File patternsFile paths or patterns of the files to upload. Supports multiple lines of match patterns. To upload the entire folder content recursively, specify `**`.
    Remote directoryUpload files to this directory on the remote FTP server.
    Clean remote directoryRecursively delete all contents of the remote directory before uploading.
    OverwriteOverwrite existing files in the remote directory.
    Trust server certificateSelecting this option results in the FTP server's SSL certificate being trusted with ftps://, even if it is self-signed or cannot be validated by a Certificate Authority (CA).
    + +## Q & A + + + +[!INCLUDE [include](../_shared/qa-minimatch.md)] + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/install-apple-certificate.md b/docs/build-release/tasks/utility/install-apple-certificate.md new file mode 100644 index 00000000000..357d2791ada --- /dev/null +++ b/docs/build-release/tasks/utility/install-apple-certificate.md @@ -0,0 +1,38 @@ +--- +title: Install Apple Certificate +description: Install an Apple certificate required to build on a macOS agent on VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: d2eff759-736d-4b7b-8554-7ba0960d49d6 +ms.manager: dastahel +ms.author: madhurig +ms.date: 05/22/2017 +--- + +# Utility: Install Apple Certificate + +**VSTS** + +![](../build/_img/xcode-build.png) Install an Apple certificate required to build on a macOS agent + +This task allows installing an Apple certificate that is stored as a [secure file](../../concepts/library/secure-files.md) on the server. + +## Demands + +xcode + +## Agent version + +2.116.0 or higher is required + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| Certificate (P12) | Select the certificate (.p12) that was uploaded to **Secure Files** to install on the macOS agent. | +| Certificate (P12) Password | Password to the Apple certificate (.p12). Use a new build variable with its lock enabled on the **Variables** tab to encrypt this value. | +| Advanced - Keychain | Select the keychain in which to install the Apple certificate. You can choose to install the certificate in a temporary keychain (default), the default keychain or a custom keychain. A temporary keychain will always be deleted after the build or release is complete. | +| Advanced - Keychain Password | Password to unlock the keychain. Use a new build variable with its lock enabled on the **Variables** tab to encrypt this value. A password is generated for the temporary keychain if not specified. | +| Advanced - Delete Certificate from Keychain | Select to delete the certificate from the keychain after the build or release is complete. This option is visible when custom keychain or default keychain are selected. | +| Advanced - Custom Keychain Path | Full path to a custom keychain file. The keychain will be created if it does not exist. This option is visible when a custom keychain is selected. | +| Advanced - Delete Custom Keychain | Select to delete the custom keychain from the agent after the build or release is complete. This option is visible when a custom keychain is selected. | diff --git a/docs/build-release/tasks/utility/install-apple-provisioning-profile.md b/docs/build-release/tasks/utility/install-apple-provisioning-profile.md new file mode 100644 index 00000000000..b4271bb5bf7 --- /dev/null +++ b/docs/build-release/tasks/utility/install-apple-provisioning-profile.md @@ -0,0 +1,33 @@ +--- +title: Install Apple Provisioning Profile +description: Install an Apple provisioning profile required to build on a macOS agent in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 0f9f66ca-250e-40fd-9678-309bcd439d5e +ms.manager: dastahel +ms.author: madhurig +ms.date: 05/22/2017 +--- + +# Utility: Install Apple Provisioning Profile + +**VSTS** + +![](../build/_img/xcode-build.png) Install an Apple provisioning profile required to build on a macOS agent + +This task allows installing an Apple provisioning profile that is stored as a [secure file](../../concepts/library/secure-files.md) on the server. You can use this task to install additional provisioning profiles needed to build Apple WatchKit Apps and Extensions. + +## Demands + +xcode + +## Agent version + +2.116.0 or higher is required + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| Provisioning Profile | Select the provisioning profile that was uploaded to **Secure Files** to install on the macOS agent. | +| Remove Profile After Build | Select to specify that the provisioning profile should be removed from the agent after the build or release is complete. | diff --git a/docs/build-release/tasks/utility/powershell.md b/docs/build-release/tasks/utility/powershell.md new file mode 100644 index 00000000000..e7a74db1866 --- /dev/null +++ b/docs/build-release/tasks/utility/powershell.md @@ -0,0 +1,161 @@ +--- +title: PowerShell +description: How to execute powershell scripts when building code in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 0D682DFA-9BC7-47A7-B0D3-C59DE1D431B5 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: PowerShell + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/powershell.png) Run a PowerShell script + +## Demands + +DotNetFramework + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| Script filename | Specify the path to the script to you want to run. The path must be a fully qualified path or a valid path relative to the default working directory. In Team Foundation Build, this directory is [$(Build.SourcesDirectory)](../../concepts/definitions/build/variables.md). | +| Arguments | Specify arguments to pass to the script. You can use ordinal or named parameters. | +| Advanced - Working folder | Specify the working directory in which you want to run the script. If you leave it empty, the working directory is the folder where the script is located. | +| [!INCLUDE [control-options-arguments-md](../_shared/control-options-arguments-md.md)] | | + +## Examples + +### Hello World + +Create ```test.ps1``` at the root of your repo: + +```ps +Write-Host "Hello World from $Env:AGENT_NAME." +Write-Host "My ID is $Env:AGENT_ID." +Write-Host "AGENT_WORKFOLDER contents:" +gci $Env:AGENT_WORKFOLDER +Write-Host "AGENT_BUILDDIRECTORY contents:" +gci $Env:AGENT_BUILDDIRECTORY +Write-Host "BUILD_SOURCESDIRECTORY contents:" +gci $Env:BUILD_SOURCESDIRECTORY +Write-Host "Over and out." +``` + +On the Build tab of a build definition, add this step: + +| Task | Arguments | +| ---- | --------- | +| ![](_img/powershell.png)
    **Utility: PowerShell** | Run test.ps1.

    **Script filename**: `test.ps1` | + +### Write a warning + +![icon](_img/powershell.png) Set warning message + +* Arguments + + ``` +"You've been warned by" +``` + +* Script + + ```ps +Write-Host "$("##vso[task.setvariable variable=WarningMessage]") $($args[0])" +``` + +![icon](_img/powershell.png) Write warning using task.LogIssue + +* Script + + ```ps +# Writes a warning to build summary and to log in yellow text +Write-Host "$("##vso[task.logissue type=warning;]") $($env:WarningMessage) $("the task.LogIssue Team Build logging command.")" +``` + +![icon](_img/powershell.png) Write warning using PowerShell command + +* Script + + ```ps +# Writes a warning to log preceded by "WARNING: " +Write-Warning "$($env:WarningMessage) $("the Write-Warning PowerShell command.")" +``` + +### Write an error + +![icon](_img/powershell.png) Set error message + +* Arguments + + ``` +"something went wrong." +``` + +* Script + + ```ps +Write-Host "$("##vso[task.setvariable variable=ErrorMessage]") $($args[0])" +``` + +![icon](_img/powershell.png) Write error using task.LogIssue + +* Script + + ```ps +# Writes an error to the build summary and to the log in red text +Write-Host "$("##vso[task.logissue type=error;]") $("the task.LogIssue Team Build logging command reported that") $($env:ErrorMessage)" +``` + +> [!TIP] +> +> If you want this error to fail the build, then add this line: + ```ps +exit 1 +``` + +![icon](_img/powershell.png) Write error using PowerShell command + +* Script + + ```ps +# Writes an error to the build summary and the log with details about the error +Write-Error "$("the Write-Error PowerShell command reported that") $($env:ErrorMessage)" +``` + +> [!TIP] +> +> If you don't want this error to fail the build, then clear the **Advanced: Fail on Standard Error** check box. + + +### ApplyVersionToAssemblies.ps1 + +[Use a script to customize your build process](../../actions/scripts/powershell.md) + +## Q&A + + + +### Where can I learn about PowerShell scripts? + +[Scripting with Windows PowerShell](https://technet.microsoft.com/en-us/library/bb978526.aspx) + +[Microsoft Script Center (the Scripting Guys)](https://technet.microsoft.com/en-us/scriptcenter/bb410849.aspx) + +[Windows PowerShell Tutorial](http://www.computerperformance.co.uk/powershell/index.htm) + +[PowerShell.org](http://powershell.org/) + +[!INCLUDE [include](../../concepts/definitions/_shared/variable-set-in-script-qa.md)] + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/publish-build-artifacts.md b/docs/build-release/tasks/utility/publish-build-artifacts.md new file mode 100644 index 00000000000..ca8d02114f1 --- /dev/null +++ b/docs/build-release/tasks/utility/publish-build-artifacts.md @@ -0,0 +1,40 @@ +--- +title: Publish Build Artifacts +description: How to publish build artifacts to a server or file share when building code in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 01533845-5D63-4DAC-97DF-D55F1E4DCF53 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: Publish Build Artifacts + +**VSTS | TFS 2017 | TFS 2015 Update 3 | [TFS 2015 RTM](copy-and-publish-build-artifacts.md) | [Previous versions (XAML builds)](http://msdn.microsoft.com/library/bb778394%28v=vs.120%29.aspx)** + +![](_img/publish-build-artifacts.png) Publish Build artifacts to the server or a file share. + +> [!TIP] +> Looking to get started working with build artifacts? See [Artifacts in Team Build](../../concepts/definitions/build/artifacts.md). + +## Demands + +None + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| Path to Publish | Path to the folder or file you want to publish. The path must be a fully qualified path or a valid path relative to the root directory of your repo. Typically you'll specify `$(Build.ArtifactStagingDirectory)`. See [Artifacts in Team Build](../../concepts/definitions/build/artifacts.md). | +| Advanced - Artifact Name | [!INCLUDE [artifact-name-argument-md](_shared/artifact-name-argument-md.md)] | +| Advanced - Artifact Type | [!INCLUDE [artifact-type-argument-md](_shared/artifact-type-argument-md.md)] | +| [!INCLUDE [control-options-arguments-md](../_shared/control-options-arguments-md.md)] | | + +## Q & A + + + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + + diff --git a/docs/build-release/tasks/utility/service-fabric-powershell.md b/docs/build-release/tasks/utility/service-fabric-powershell.md new file mode 100644 index 00000000000..a1410d4c048 --- /dev/null +++ b/docs/build-release/tasks/utility/service-fabric-powershell.md @@ -0,0 +1,49 @@ +--- +description: Service Fabric PowerShell Utility task +title: Service Fabric PowerShell build task VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: EE9455CD-5E1A-42C8-AC6D-8CF44878F090 +ms.manager: douge +ms.author: ahomer +ms.date: 01/17/2017 +--- + +# Utility: Service Fabric PowerShell + +![icon](_img/azure-service-fabric.png) Run a PowerShell script within the context of an Azure Service Fabric cluster connection. + +Runs any PowerShell command or script in a PowerShell session that has a Service Fabric cluster connection initialized. + +## Prerequisites + +### Service Fabric + +* This task uses a Service Fabric installation to connect and +deploy to a Service Fabric cluster. + +* [Azure Service Fabric Core SDK](http://www.microsoft.com/web/handlers/webpi.ashx?command=getinstallerredirect&appid=MicrosoftAzure-ServiceFabric-CoreSDK) on the build agent. + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| **Cluster Connection** | The Azure Service Fabric service endpoint to use to connect and authenticate to the cluster. | +| **Script Type** | Specify whether the script is provided as a file or inline in the task. | +| **Script Path** | Path to the PowerShell script to run. Can include wildcards and variables. Example: `$(system.defaultworkingdirectory)/**/drop/projectartifacts/**/docker-compose.yml`. **Note**: combining compose files is not supported as part of this task. | +| **Script Arguments** | Additional parameters to pass to the PowerShell script. Can be either ordinal or named parameters. | +| **Inline Script** | The PowerShell commands to run on the build agent. [More information](../utility/powershell.md) | +| **Control options** | See [Control options](../../concepts/process/tasks.md#controloptions) | + +Also see: [Service Fabric Compose Deploy task](../deploy/service-fabric-compose-deploy.md) + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + + +[!INCLUDE [rm-help-support-shared](../../_shared/rm-help-support-shared.md)] diff --git a/docs/build-release/tasks/utility/service-fabric-versioning.md b/docs/build-release/tasks/utility/service-fabric-versioning.md new file mode 100644 index 00000000000..5bb88c8ddd2 --- /dev/null +++ b/docs/build-release/tasks/utility/service-fabric-versioning.md @@ -0,0 +1,113 @@ +--- +description: Update Service Fabric App Versions task +title: Update Service Fabric App Versions build task VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 3034CEF8-215C-408E-AD0F-C41D3D9C2F72 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: Update Service Fabric App Versions + +[!INCLUDE [temp](../../_shared/version-tfs-2017-rtm.md)] + +![](_img/azure-service-fabric.png) Automatically updates +the versions of a packaged Service Fabric application. + +This task appends a version suffix to all service and application versions, +specified in the manifest files, in an Azure Service Fabric application package. + +## Demands + +None + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [control-options-arguments](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Application Package +

    The location of the Service Fabric application package to be deployed to the cluster.

    +
      +
    • Example: `$(system.defaultworkingdirectory)/**/drop/applicationpackage`
    • +
    • Can include wildcards and variables.
    • +
    +
    Version Value +

    The value appended to the versions in the manifest files. Default is `.$(Build.BuildNumber)`.

    +

    **Tip:** You can modify the [build number format](https://go.microsoft.com/fwlink/?LinkId=761520) directly or use a [logging command](https://go.microsoft.com/fwlink/?LinkId=821347) to dynamically set a variable in any format. For example, you can use `$(VersionSuffix)` defined in a PowerShell task:

    +

    `$versionSuffix = ".$([DateTimeOffset]::UtcNow.ToString('yyyyMMdd.HHmmss'))"`

    +

    `Write-Host "##vso[task.setvariable variable=VersionSuffix;]$versionSuffix"`

    + +
    Version Behavior +

    Specify whether to append the version value to existing values in the manifest files, or replace them.

    +
    Update only if changed +

    Select this check box if you want to append the new version suffix to only the packages that have changed from a previous build. If no changes are found, the version suffix from the previous build will be appended.

    +

    **Note:** By default, the compiler will create different outputs even if you made no changes. Use the [deterministic compiler flag](https://go.microsoft.com/fwlink/?LinkId=808668) to ensure builds with the same inputs produce the same outputs.

    +
    Package Artifact Name +

    The name of the artifact containing the application package from the previous build.

    +
    Log all changes +

    Select this check box to compare all files in every package and log if the file was added, removed, or if its content changed. Otherwise, compare files in a package only until the first change is found for potentially faster performance.

    +
    Compare against +

    Specify whether to compare against the last completed, successful build or against a specific build.

    +
    Build Number +

    If comparing against a specific build, the build number to use.

    +
    + +Also see: [Service Fabric Application Deployment task](../deploy/service-fabric-deploy.md) + +## Q&A + + +[!INCLUDE [qa-agents](../../_shared/qa-agents.md)] + +[!INCLUDE [qa-versions](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/shell-script.md b/docs/build-release/tasks/utility/shell-script.md new file mode 100644 index 00000000000..7ce97730c50 --- /dev/null +++ b/docs/build-release/tasks/utility/shell-script.md @@ -0,0 +1,113 @@ +--- +title: Shell script +description: How to execute a bash script when building code in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 8D152C13-0934-4665-8D08-30E2A7841351 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: Shell script + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![icon](_img/shell-script.png) Run a shell script using bash + +## Demands + +sh + +## Arguments + + + + + + + + + + + + + + + + + + + + + + + + + + + +[!INCLUDE [temp](../_shared/control-options-arguments.md)] +
    ArgumentDescription
    Script Path +Relative path from the repo root to the shell script file that you want to run. +
    Arguments +Arguments that you want to pass to the script. +
    Advanced
    Working Directory +Working directory in which you want to run the script. If you leave it empty it is folder where the script is located. +
    Fail on Standard Error +Select if you want this step to fail if any errors are written to the StandardError stream. +
    + +## Example + +Create ```test.sh``` at the root of your repo: + +```sh +#!/bin/bash +echo "Hello World" +echo "AGENT_WORKFOLDER is $AGENT_WORKFOLDER" +echo "AGENT_WORKFOLDER contents:" +ls -1 $AGENT_WORKFOLDER +echo "AGENT_BUILDDIRECTORY is $AGENT_BUILDDIRECTORY" +echo "AGENT_BUILDDIRECTORY contents:" +ls -1 $AGENT_BUILDDIRECTORY +echo "BUILD_SOURCESDIRECTORY is $BUILD_SOURCESDIRECTORY" +echo "BUILD_SOURCESDIRECTORY contents:" +ls -1 $BUILD_SOURCESDIRECTORY +echo "Over and out." +``` + +On the [Build tab](../../index.md) of a build definition, add this step: + + + + + + +
    ![](_img/shell-script.png)
    **Utility: Shell Script**
    +

    Run test.bat.

    +
      +
    • Script Path: ```test.sh```
    • +
    +
    + + +## Q&A + + + +### Where can I learn about Bash scripts? + +[Beginners/BashScripting](https://help.ubuntu.com/community/Beginners/BashScripting) to get started. + +[Awesome Bash](https://github.com/alebcay/awesome-shell#awesome-bash) to go deeper. + +[!INCLUDE [include](../../concepts/definitions/_shared/variable-set-in-script-qa.md)] + +[!INCLUDE [temp](../_shared/build-step-common-qa.md)] + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/tasks/utility/xamarin-license.md b/docs/build-release/tasks/utility/xamarin-license.md new file mode 100644 index 00000000000..603d8093eb9 --- /dev/null +++ b/docs/build-release/tasks/utility/xamarin-license.md @@ -0,0 +1,49 @@ +--- +title: Xamarin license +description: How to activate or deactivate a Xamarin license when building code in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 07F571D7-DB66-4B8E-8CB1-F37B6D56EBD7 +ms.manager: douge +ms.author: alewis +ms.date: 08/10/2016 +--- + +# Utility: Xamarin license + +[!INCLUDE [temp](../../_shared/version-tfs-2015-rtm.md)] + +![](_img/xamarin-license.png) Activate or deactivate Xamarin licenses + +## Deprecated + +> We're deprecating this task because you no longer need a Xamarin license to [build your Xamarin app](../../apps/mobile/xamarin.md). We recommend that you remove this task from your build to avoid disruption when we remove the task from the product. + +## Demands + +None + +## Arguments + +| Argument | Description | +| -------- | ----------- | +| Action | Select:

    **Activate** for the first instance of this build step, which should come before any instances of the Xamarin.Android step or the Xamarin.iOS steps.

    **Deactivate** for the second instance of this build step, which should come after all instances of the Xamarin.Android and Xamarin.iOS steps. You should also select **Always run** under **Control options** for the last instance of the Xamarin license step. | +| Email | Xamarin account email address. | +| Password | Xamarin account password.

    Use a [secret variable](../../concepts/definitions/build/variables.md) to avoid exposing this value. | +| Xamarin Product | Select the build step that you're running in this build definition, such as **Xamarin.Android** or **Xamarin.iOS**. | +| Advanced - Timeout in Seconds | Specify how long you want to allow the build step to wait for the activation or deactivation. | +| [!INCLUDE [control-options-arguments-md](../_shared/control-options-arguments-md.md)] | + +## Example + +[Build your Xamarin app](../../apps/mobile/xamarin.md) + + +## Q&A + + +[!INCLUDE [temp](../../_shared/qa-agents.md)] + +[!INCLUDE [temp](../../_shared/qa-versions.md)] + + diff --git a/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-configuration.png b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-configuration.png new file mode 100644 index 00000000000..6c0da302813 Binary files /dev/null and b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-configuration.png differ diff --git a/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-dashboard.png b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-dashboard.png new file mode 100644 index 00000000000..b41dbd78f86 Binary files /dev/null and b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-dashboard.png differ diff --git a/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-groupby.png b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-groupby.png new file mode 100644 index 00000000000..17da145ca44 Binary files /dev/null and b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-groupby.png differ diff --git a/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-results.png b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-results.png new file mode 100644 index 00000000000..463e44b0476 Binary files /dev/null and b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests-results.png differ diff --git a/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests.png b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests.png new file mode 100644 index 00000000000..3275a55a024 Binary files /dev/null and b/docs/build-release/test/_img/associate-automated-results-with-requirements/associate-tests.png differ diff --git a/docs/build-release/test/_img/associate-automated-test-with-test-case/test-explorer-associate.png b/docs/build-release/test/_img/associate-automated-test-with-test-case/test-explorer-associate.png new file mode 100644 index 00000000000..b9a2a9d7987 Binary files /dev/null and b/docs/build-release/test/_img/associate-automated-test-with-test-case/test-explorer-associate.png differ diff --git a/docs/build-release/test/_img/associate-automated-test-with-test-case/work-item-compatibility.png b/docs/build-release/test/_img/associate-automated-test-with-test-case/work-item-compatibility.png new file mode 100644 index 00000000000..b97724560e0 Binary files /dev/null and b/docs/build-release/test/_img/associate-automated-test-with-test-case/work-item-compatibility.png differ diff --git a/docs/build-release/test/_img/continuous-test-java/continuous-test-java-01.png b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-01.png new file mode 100644 index 00000000000..b238fbf82b8 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-01.png differ diff --git a/docs/build-release/test/_img/continuous-test-java/continuous-test-java-02.png b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-02.png new file mode 100644 index 00000000000..fa3ee38e9ed Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-02.png differ diff --git a/docs/build-release/test/_img/continuous-test-java/continuous-test-java-03.png b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-03.png new file mode 100644 index 00000000000..cc3756edfb2 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-03.png differ diff --git a/docs/build-release/test/_img/continuous-test-java/continuous-test-java-04.png b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-04.png new file mode 100644 index 00000000000..9f83bb69798 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-04.png differ diff --git a/docs/build-release/test/_img/continuous-test-java/continuous-test-java-05.png b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-05.png new file mode 100644 index 00000000000..1a28aa8f328 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-05.png differ diff --git a/docs/build-release/test/_img/continuous-test-java/continuous-test-java-06.png b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-06.png new file mode 100644 index 00000000000..893df6168fc Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-06.png differ diff --git a/docs/build-release/test/_img/continuous-test-java/continuous-test-java-07.png b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-07.png new file mode 100644 index 00000000000..34377e67643 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-java/continuous-test-java-07.png differ diff --git a/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-02.png b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-02.png new file mode 100644 index 00000000000..59db0d49319 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-02.png differ diff --git a/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-03.png b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-03.png new file mode 100644 index 00000000000..9c53da47bd0 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-03.png differ diff --git a/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-04.png b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-04.png new file mode 100644 index 00000000000..7ba05216e7d Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-04.png differ diff --git a/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-05.png b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-05.png new file mode 100644 index 00000000000..71710e88aa0 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-05.png differ diff --git a/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-06.png b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-06.png new file mode 100644 index 00000000000..fb7fd652409 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-06.png differ diff --git a/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-09.png b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-09.png new file mode 100644 index 00000000000..bb4079aca9d Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-09.png differ diff --git a/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-10.png b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-10.png new file mode 100644 index 00000000000..f0ae4ae65c8 Binary files /dev/null and b/docs/build-release/test/_img/continuous-test-selenium/continuous-test-selenium-10.png differ diff --git a/docs/build-release/test/_img/continuous-testing/BuildSummary.png b/docs/build-release/test/_img/continuous-testing/BuildSummary.png new file mode 100644 index 00000000000..75fa14078f9 Binary files /dev/null and b/docs/build-release/test/_img/continuous-testing/BuildSummary.png differ diff --git a/docs/build-release/test/_img/continuous-testing/test-types.png b/docs/build-release/test/_img/continuous-testing/test-types.png new file mode 100644 index 00000000000..5d4e400d6f3 Binary files /dev/null and b/docs/build-release/test/_img/continuous-testing/test-types.png differ diff --git a/docs/build-release/test/_img/continuoustest-icon.png b/docs/build-release/test/_img/continuoustest-icon.png new file mode 100644 index 00000000000..45fdd4e641e Binary files /dev/null and b/docs/build-release/test/_img/continuoustest-icon.png differ diff --git a/docs/build-release/test/_img/edit-build-definition.png b/docs/build-release/test/_img/edit-build-definition.png new file mode 100644 index 00000000000..1e1c102c9ba Binary files /dev/null and b/docs/build-release/test/_img/edit-build-definition.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-10.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-10.png new file mode 100644 index 00000000000..4bda71c6d0a Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-10.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-11.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-11.png new file mode 100644 index 00000000000..4f8656029c6 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-11.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-12.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-12.png new file mode 100644 index 00000000000..4df8ac1e868 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-12.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-20.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-20.png new file mode 100644 index 00000000000..914627b389f Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-20.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-21.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-21.png new file mode 100644 index 00000000000..87f14d194ac Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-21.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-21a.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-21a.png new file mode 100644 index 00000000000..ab0a0961dbf Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-21a.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-22.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-22.png new file mode 100644 index 00000000000..b76817a3118 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-22.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-28.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-28.png new file mode 100644 index 00000000000..9d4fbced2c4 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-28.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-28a.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-28a.png new file mode 100644 index 00000000000..1655315a5b0 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-28a.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-29.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-29.png new file mode 100644 index 00000000000..e2520052bdc Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-29.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-30.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-30.png new file mode 100644 index 00000000000..355a494301b Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-30.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-31.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-31.png new file mode 100644 index 00000000000..3f06e0751e4 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-31.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-40.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-40.png new file mode 100644 index 00000000000..6ace43f2a0d Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-40.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-43.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-43.png new file mode 100644 index 00000000000..7ca1bd6d644 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-43.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-44.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-44.png new file mode 100644 index 00000000000..b23e749d374 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-44.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-44a.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-44a.png new file mode 100644 index 00000000000..04432698165 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-44a.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-45.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-45.png new file mode 100644 index 00000000000..bc34250aff5 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-45.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-46.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-46.png new file mode 100644 index 00000000000..27005a0298c Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-46.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-47.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-47.png new file mode 100644 index 00000000000..82c23d41d2b Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-47.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-48.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-48.png new file mode 100644 index 00000000000..08f9c78a67b Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-48.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-49.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-49.png new file mode 100644 index 00000000000..dfb9a5247aa Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-49.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-50.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-50.png new file mode 100644 index 00000000000..5834828a738 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-50.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-51.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-51.png new file mode 100644 index 00000000000..e8dee08caed Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-51.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-52.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-52.png new file mode 100644 index 00000000000..1883a46adb1 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-52.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-53.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-53.png new file mode 100644 index 00000000000..c63ec992018 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-53.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-54.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-54.png new file mode 100644 index 00000000000..0850dc6b5c5 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-54.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-60.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-60.png new file mode 100644 index 00000000000..1ca6c1bb6d6 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-60.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-61.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-61.png new file mode 100644 index 00000000000..a6c204f7649 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-61.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-62.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-62.png new file mode 100644 index 00000000000..3c6b0e491de Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-62.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-63.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-63.png new file mode 100644 index 00000000000..cf15056a347 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-63.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-70.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-70.png new file mode 100644 index 00000000000..8c57029dc39 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-70.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-71.png b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-71.png new file mode 100644 index 00000000000..75650b233b1 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/example-continuous-testing-71.png differ diff --git a/docs/build-release/test/_img/example-continuous-testing/settings-icon.png b/docs/build-release/test/_img/example-continuous-testing/settings-icon.png new file mode 100644 index 00000000000..870aaf96dc3 Binary files /dev/null and b/docs/build-release/test/_img/example-continuous-testing/settings-icon.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/IC816555.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/IC816555.png new file mode 100644 index 00000000000..65019b2da5a Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/IC816555.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/IC816776.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/IC816776.png new file mode 100644 index 00000000000..cd8f084f0b8 Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/IC816776.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/IC816778.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/IC816778.png new file mode 100644 index 00000000000..942e9633abf Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/IC816778.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/add-test-task.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/add-test-task.png new file mode 100644 index 00000000000..1f57e804187 Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/add-test-task.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/build-error-message.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/build-error-message.png new file mode 100644 index 00000000000..c5823adda1c Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/build-error-message.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/build-summary-test-result-metrics.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/build-summary-test-result-metrics.png new file mode 100644 index 00000000000..a23721858b0 Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/build-summary-test-result-metrics.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/edit-unit-test-task.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/edit-unit-test-task.png new file mode 100644 index 00000000000..1ff21304703 Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/edit-unit-test-task.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/open-summary.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/open-summary.png new file mode 100644 index 00000000000..067a7cdad6d Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/open-summary.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/save-build-def.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/save-build-def.png new file mode 100644 index 00000000000..c1ac04aea10 Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/save-build-def.png differ diff --git a/docs/build-release/test/_img/getting-started-with-continuous-testing/start-build.png b/docs/build-release/test/_img/getting-started-with-continuous-testing/start-build.png new file mode 100644 index 00000000000..6ba0166dc33 Binary files /dev/null and b/docs/build-release/test/_img/getting-started-with-continuous-testing/start-build.png differ diff --git a/docs/build-release/test/_img/organize-test-results.png b/docs/build-release/test/_img/organize-test-results.png new file mode 100644 index 00000000000..3423f4db3a7 Binary files /dev/null and b/docs/build-release/test/_img/organize-test-results.png differ diff --git a/docs/build-release/test/_img/queue-build.png b/docs/build-release/test/_img/queue-build.png new file mode 100644 index 00000000000..f7006f5be50 Binary files /dev/null and b/docs/build-release/test/_img/queue-build.png differ diff --git a/docs/build-release/test/_img/review-continuous-test-results-after-build/build-error-message.png b/docs/build-release/test/_img/review-continuous-test-results-after-build/build-error-message.png new file mode 100644 index 00000000000..7b9ec2c4737 Binary files /dev/null and b/docs/build-release/test/_img/review-continuous-test-results-after-build/build-error-message.png differ diff --git a/docs/build-release/test/_img/review-continuous-test-results-after-build/open-summary.png b/docs/build-release/test/_img/review-continuous-test-results-after-build/open-summary.png new file mode 100644 index 00000000000..2014aa357c7 Binary files /dev/null and b/docs/build-release/test/_img/review-continuous-test-results-after-build/open-summary.png differ diff --git a/docs/build-release/test/_img/review-continuous-test-results-after-build/release-test-results-01.png b/docs/build-release/test/_img/review-continuous-test-results-after-build/release-test-results-01.png new file mode 100644 index 00000000000..c24429f598b Binary files /dev/null and b/docs/build-release/test/_img/review-continuous-test-results-after-build/release-test-results-01.png differ diff --git a/docs/build-release/test/_img/review-continuous-test-results-after-build/test-history-01.png b/docs/build-release/test/_img/review-continuous-test-results-after-build/test-history-01.png new file mode 100644 index 00000000000..02a96fa2007 Binary files /dev/null and b/docs/build-release/test/_img/review-continuous-test-results-after-build/test-history-01.png differ diff --git a/docs/build-release/test/_img/review-continuous-test-results-after-build/test-history-02.png b/docs/build-release/test/_img/review-continuous-test-results-after-build/test-history-02.png new file mode 100644 index 00000000000..6bcfcb9a506 Binary files /dev/null and b/docs/build-release/test/_img/review-continuous-test-results-after-build/test-history-02.png differ diff --git a/docs/build-release/test/_img/reviewresults-icon.png b/docs/build-release/test/_img/reviewresults-icon.png new file mode 100644 index 00000000000..8cb0049ba1e Binary files /dev/null and b/docs/build-release/test/_img/reviewresults-icon.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-02.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-02.png new file mode 100644 index 00000000000..939b4eeabba Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-02.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-03.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-03.png new file mode 100644 index 00000000000..3e3cf404f29 Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-03.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-04.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-04.png new file mode 100644 index 00000000000..c1f78005111 Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-04.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-06.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-06.png new file mode 100644 index 00000000000..719c4a01fc3 Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-06.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-08.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-08.png new file mode 100644 index 00000000000..c2aab715333 Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-08.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-09a.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-09a.png new file mode 100644 index 00000000000..f6907a0e792 Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-09a.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-101.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-101.png new file mode 100644 index 00000000000..38e795448af Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-101.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-102.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-102.png new file mode 100644 index 00000000000..254b2d4d43d Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-102.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-102a.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-102a.png new file mode 100644 index 00000000000..00be49e167e Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-102a.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-106.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-106.png new file mode 100644 index 00000000000..1ee8eca2324 Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-106.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-107.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-107.png new file mode 100644 index 00000000000..f5f9e256d8b Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-107.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-108.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-108.png new file mode 100644 index 00000000000..d21b2b30298 Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-108.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-109.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-109.png new file mode 100644 index 00000000000..3fba3bc9bc0 Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-109.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-110.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-110.png new file mode 100644 index 00000000000..c86f098d35e Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-110.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-111.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-111.png new file mode 100644 index 00000000000..3b162242652 Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-111.png differ diff --git a/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-112.png b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-112.png new file mode 100644 index 00000000000..9780bb848ad Binary files /dev/null and b/docs/build-release/test/_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-112.png differ diff --git a/docs/build-release/test/_img/selenium-icon.png b/docs/build-release/test/_img/selenium-icon.png new file mode 100644 index 00000000000..46b9ee344a7 Binary files /dev/null and b/docs/build-release/test/_img/selenium-icon.png differ diff --git a/docs/build-release/test/_img/set-up-continuous-testing-builds/add-build-step.png b/docs/build-release/test/_img/set-up-continuous-testing-builds/add-build-step.png new file mode 100644 index 00000000000..96287614bbf Binary files /dev/null and b/docs/build-release/test/_img/set-up-continuous-testing-builds/add-build-step.png differ diff --git a/docs/build-release/test/_img/set-up-continuous-testing-builds/add-file-copy-powershell-steps.png b/docs/build-release/test/_img/set-up-continuous-testing-builds/add-file-copy-powershell-steps.png new file mode 100644 index 00000000000..3eb5efd31fb Binary files /dev/null and b/docs/build-release/test/_img/set-up-continuous-testing-builds/add-file-copy-powershell-steps.png differ diff --git a/docs/build-release/test/_img/set-up-continuous-testing-builds/copy-app-test-environment.png b/docs/build-release/test/_img/set-up-continuous-testing-builds/copy-app-test-environment.png new file mode 100644 index 00000000000..39150fb14c4 Binary files /dev/null and b/docs/build-release/test/_img/set-up-continuous-testing-builds/copy-app-test-environment.png differ diff --git a/docs/build-release/test/_img/set-up-continuous-testing-builds/copy-tests.png b/docs/build-release/test/_img/set-up-continuous-testing-builds/copy-tests.png new file mode 100644 index 00000000000..05e689c918f Binary files /dev/null and b/docs/build-release/test/_img/set-up-continuous-testing-builds/copy-tests.png differ diff --git a/docs/build-release/test/_img/set-up-continuous-testing-builds/deploy-test-agent.png b/docs/build-release/test/_img/set-up-continuous-testing-builds/deploy-test-agent.png new file mode 100644 index 00000000000..ae194e8af70 Binary files /dev/null and b/docs/build-release/test/_img/set-up-continuous-testing-builds/deploy-test-agent.png differ diff --git a/docs/build-release/test/_img/set-up-continuous-testing-builds/run-powershell-details.png b/docs/build-release/test/_img/set-up-continuous-testing-builds/run-powershell-details.png new file mode 100644 index 00000000000..3af5868b03f Binary files /dev/null and b/docs/build-release/test/_img/set-up-continuous-testing-builds/run-powershell-details.png differ diff --git a/docs/build-release/test/_img/set-up-continuous-testing-builds/run-tests-with-test-agent.png b/docs/build-release/test/_img/set-up-continuous-testing-builds/run-tests-with-test-agent.png new file mode 100644 index 00000000000..b5a622fd6a9 Binary files /dev/null and b/docs/build-release/test/_img/set-up-continuous-testing-builds/run-tests-with-test-agent.png differ diff --git a/docs/build-release/test/_img/set-up-continuous-testing-builds/save-build-definition.png b/docs/build-release/test/_img/set-up-continuous-testing-builds/save-build-definition.png new file mode 100644 index 00000000000..073c6501179 Binary files /dev/null and b/docs/build-release/test/_img/set-up-continuous-testing-builds/save-build-definition.png differ diff --git a/docs/build-release/test/_img/test-results-summary.png b/docs/build-release/test/_img/test-results-summary.png new file mode 100644 index 00000000000..889d2df63a2 Binary files /dev/null and b/docs/build-release/test/_img/test-results-summary.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/agent-phase-settings.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/agent-phase-settings.png new file mode 100644 index 00000000000..98017ed9ab5 Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/agent-phase-settings.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/distributed-tests.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/distributed-tests.png new file mode 100644 index 00000000000..ea2266e0678 Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/distributed-tests.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/multi-agent-test-run.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multi-agent-test-run.png new file mode 100644 index 00000000000..131b443c15f Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multi-agent-test-run.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/multi-agent.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multi-agent.png new file mode 100644 index 00000000000..6a4c4eeb266 Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multi-agent.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/multiconfig-logs.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multiconfig-logs.png new file mode 100644 index 00000000000..f4f85bda08b Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multiconfig-logs.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/multiconfig-task-settings.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multiconfig-task-settings.png new file mode 100644 index 00000000000..0539b70f148 Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multiconfig-task-settings.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/multiconfig.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multiconfig.png new file mode 100644 index 00000000000..7d151b05e59 Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multiconfig.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/multipliers1.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multipliers1.png new file mode 100644 index 00000000000..0eca8bcaab7 Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multipliers1.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/multipliers2.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multipliers2.png new file mode 100644 index 00000000000..b0c8456230c Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/multipliers2.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/single-phase-env.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/single-phase-env.png new file mode 100644 index 00000000000..1a6f8da8a6e Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/single-phase-env.png differ diff --git a/docs/build-release/test/_img/test-with-unified-agent-and-phases/v2task.png b/docs/build-release/test/_img/test-with-unified-agent-and-phases/v2task.png new file mode 100644 index 00000000000..c98f90a7e14 Binary files /dev/null and b/docs/build-release/test/_img/test-with-unified-agent-and-phases/v2task.png differ diff --git a/docs/build-release/test/_shared/help-and-support-footer.md b/docs/build-release/test/_shared/help-and-support-footer.md new file mode 100644 index 00000000000..7c54e125b62 --- /dev/null +++ b/docs/build-release/test/_shared/help-and-support-footer.md @@ -0,0 +1,6 @@ +## Help and support + +Report any problems on [Developer Community](https://developercommunity.visualstudio.com/), +make suggestions on [UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services), +get advice on [Stack Overflow](https://stackoverflow.com/questions/tagged/vs-team-services), +and get support via our [Support](https://www.visualstudio.com/team-services/support/) page. diff --git a/docs/build-release/test/_shared/version-header-ts-tfs.md b/docs/build-release/test/_shared/version-header-ts-tfs.md new file mode 100644 index 00000000000..3939e9d0869 --- /dev/null +++ b/docs/build-release/test/_shared/version-header-ts-tfs.md @@ -0,0 +1 @@ +**VSTS | TFS 2017 | TFS 2015** diff --git a/docs/build-release/test/_shared/version-header-vs-vsts-tfs.md b/docs/build-release/test/_shared/version-header-vs-vsts-tfs.md new file mode 100644 index 00000000000..d42713c030d --- /dev/null +++ b/docs/build-release/test/_shared/version-header-vs-vsts-tfs.md @@ -0,0 +1 @@ +**Visual Studio 2017 | Visual Studio 2015 | VSTS | TFS 2017 | TFS 2015** diff --git a/docs/build-release/test/associate-automated-results-with-requirements.md b/docs/build-release/test/associate-automated-results-with-requirements.md new file mode 100644 index 00000000000..c4ed089e090 --- /dev/null +++ b/docs/build-release/test/associate-automated-results-with-requirements.md @@ -0,0 +1,56 @@ +--- +title: Associate automated test results with requirements +description: Manual and exploratory testing Associate automated test results with requirements using Microsoft Test Manager (MTM) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 30F9B666-02D7-4A94-9EA1-EC8B8E5F1D8F +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Associate automated test results with requirements + +[!INCLUDE [version-header-ts-tfs](_shared/version-header-ts-tfs.md)] + +If your test suites include **requirements**, link these to your test results +and view the results on your team's dashboard. This enables end-to-end +traceability of requirements for agile teams. For example, when teams do not use +[planned testing](associate-automated-test-with-test-case.md) (by creating test plans or test case work items), +and instead choose to simply write automated tests that run in the CD/CI +pipeline, associating test results with requirements provides an easy way to +monitor test results and ensure requirements are met. + +To associate automated test results with requirements: + +1. On the test results page, select the tests you want to link to requirements +and choose the **Associate tests to work item** (link) icon. + + ![Select the tests you want to link to requirements](_img/associate-automated-results-with-requirements/associate-tests-results.png) + +1. Select the requirements from the list of suggested work items and choose **Associate**. + + ![Select the requirements from the list](_img/associate-automated-results-with-requirements/associate-tests.png) + +1. To see the related test results, select **Requirements** in the **Group by** list. + + ![Select **Requirements** in the **Group by** list](_img/associate-automated-results-with-requirements/associate-tests-groupby.png) + +1. On your team's dashboard, add the **Requirements quality** widget and configure + it for the appropriate build definition and work item query. + + ![Add the **Requirements quality** widget](_img/associate-automated-results-with-requirements/associate-tests-configuration.png) + +1. This shows the pass rate for each of your requirements. + Use the links to view the results in more detail, and the **Expand** link to see more. + + ![Links to view the results in more detail, and the **Expand** link](_img/associate-automated-results-with-requirements/associate-tests-dashboard.png) + +## See Also + +* [Associate automated tests with test cases](associate-automated-test-with-test-case.md) +* [Run automated tests from test plans in the Test hub](run-automated-tests-from-test-hub.md) +* [Test with unified agents and phases](test-with-unified-agent-and-phases.md) +* [Continuous testing scenarios and capabilities](index.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/build-release/test/associate-automated-test-with-test-case.md b/docs/build-release/test/associate-automated-test-with-test-case.md new file mode 100644 index 00000000000..49abc0fd81c --- /dev/null +++ b/docs/build-release/test/associate-automated-test-with-test-case.md @@ -0,0 +1,249 @@ +--- +title: Associate an automated test with a test case +description: Manual and exploratory testing. Associate an automated test with a test case using Microsoft Test Manager (MTM) and VSTS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 606679F2-1604-40EA-A720-63CDDA93DD76 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Associate automated tests with test cases + +**Visual Studio 2017 | [Previous version](https://msdn.microsoft.com/en-us/library/dd380741%28v=vs.110%29.aspx)** + +Consider using Visual Studio to associate automated tests with a test case when: + +* You created a manual test case that you later decide is a good test + to automate, but you still want to be able to run that test as part of a test plan. + Tests can be run in the CI/CD pipeline by choosing the test plan or test suite. + Automated tests can also be run on demand from Microsoft Test Manager. + We plan to enable test to be run from the Test hub in the future. + +* You want to enable end-to-end traceability of requirements. + If your test cases are linked to requirements or user stories, + the results of the test execution can be used to establish the quality of those requirements. + +The process to associate an automated test with a test case is: + +1. Create a test project containing your automated test. + [What types of tests are supported?](reference-qa.md#test-types) + +1. Check your test project into a VSTS or Team + Foundation Server (TFS) repository. + +1. Create a build definition for your project, ensuring that it + contains the automated test. + [What are the differences if I am still using a XAML build?](reference-qa.md#xaml-build) + +1. Use Visual Studio Enterprise, Visual Studio Professional, + or Visual Studio Test Professional to associate the automated + test with a test case as shown [below](#add-test). The test case must have + been added to a test plan that uses the build you just defined. + +If you are using Team Foundation Build and Release Management in +VSTS or TFS (not a [XAML build](reference-qa.md#xaml-build)), you can run associated tests in the +Build & Release pipeline by using the +[Visual Studio Test Agent Deployment](../../build-release/tasks/test/visual-studio-test-agent-deployment.md) and +[Run Functional Tests](../../build-release/tasks/test/run-functional-tests.md) tasks. +You must configure the [Run Functional Tests](../../build-release/tasks/test/run-functional-tests.md) task to use the +**Test Plan** option. You _cannot_ run tests on-demand using +Microsoft Test Manager (MTM) unless you are using a [XAML build](reference-qa.md#xaml-build). + +>See [Test with unified agents and phases](test-with-unified-agent-and-phases.md) +for details of how you can avoid using the Visual Studio Test Agent Deployment task. + +The parameters in a test case are not used by any automated test that +you associate with a test case. Iterations of a test case that use these +parameters are for manual tests only. + +>For more information about checking in your test project and team build, see +[Add files to the server](../../tfvc/add-files-server.md) +and [Continuous integration on any platform](../../build-release/overview.md). +For more information about action recordings and coded UI tests, see +[Recording and Playing Back Manual Tests](../../manual-test/getting-started/record-play-back-manual-tests.md) +and [Use UI Automation To Test Your Code](https://docs.microsoft.com/visualstudio/test/use-ui-automation-to-test-your-code). + + +## Associate your test + +1. Open your solution in Visual Studio. + +1. If you know the identifier of the work item for the test case: + + - If the **Test Explorer** window is not displayed, open it from the **Test | Windows** menu. + + - If your tests are not displayed in **Test Explorer**, build the solution. + + - In **Test Explorer**, select the test method you want to associate and choose **Associate to Test Case**. + + - In the dialog that opens, type the test case identifier and choose **Add Association**, then choose **Save**. + + ![Associate Automation With Test Case](_img/associate-automated-test-with-test-case/test-explorer-associate.png) + + >The dialog shows a list of test cases currently associated with the selected test method. + You cannot associate more than one test method with a test case, but you can associate a + test method with more than one test case. + +1. If you **do not** know the identifier of the work item for the test case: + + - Ensure you have configured Visual Studio to display test work items + inside the Visual Studio editor rather than in your web browser. + See [Can I configure work items to open in Visual Studio?](reference-qa.md#open-in-vs) + + - In **Team Explorer** open the **Work Items** tab. If the **Team Explorer** + window is not displayed, open it from the **View** menu. + + - Expand the list of **Queries** in the **Work Items** tab to find one that displays your test cases, + for example the default **My Test Cases** query. For more information + about how to use queries in Team Explorer, see + [Use the query editor to list and manage queries](../../work/track/using-queries.md) + + - Execute the query by choosing **View Results** on the shortcut menu + (or double-click the query name). + + - Open the test case you want to associate by choosing **Open** + on the shortcut menu (or double-click the test case name). + + - In the work item, open the **ASSOCIATED AUTOMATION** tab. + All the tests in the solution are shown in the list together + with their associated test projects. + + - Choose the ellipsis (**...**) and, in the **Choose Test** dialog, + select the test and then choose **OK**. The value in + **Automation Status** is automatically changed to **Automated**. + + - Choose **Save Work Item** to save the changes to the test case. + + >If a test case already has an automated test associated with it, you + must first remove this association before you can add a different automated test. + Choose **Remove association** to remove the existing automation. + + +## Set up your test plan to use your build + +To set up your test plan to run the automated test that you have created, +you must select the correct build definition used to build your automated +test or a build definition that has the correct build drop location for your +existing automated test assemblies. You must do this so that the automated +test can be found in the share location for your build definition and then +it can be run from Microsoft Test Manager. + +>If you have multiple build configurations, the test assemblies to run the +automated tests are searched for recursively from the root directory of the +build drop folder. If it is important which assemblies are selected when you +run your automated tests, you should use **Run with options** to specify the build +configuration. + +To set up your test plan to use your team build: + +1. Open Microsoft Test Manager. + +1. To select a test plan, choose the down-arrow on the center group switcher and then choose **Testing Center**. + +1. On the center group menu bar, choose **Plan**. + +1. To set up your test plan to run the automated tests, choose **Properties** + and then choose the drop-down arrow to the right of **Filter for builds**. + The dialog box that shows build definition and quality is displayed. + +1. To select the build definition that is used to build your automated tests, choose **Build definition**. + +1. Each build can be given a specific value to reflect the quality of the build. + To select the quality of the builds you want to be able to view, choose **Build quality**. + + >For more information about build definitions and build quality, see + [Continuous integration on any platform](../../build-release/overview.md). + +1. To save your changes, choose **Set build filter**. + +1. To select the most recent build to use with this test plan that includes + the latest changes to the automated test, you must first choose **Save** + to save the plan and then choose **Modify**. + The **Assign Build** activity is displayed. You can compare your current build + with a build you plan to take. The associated items list shows the changes to + work items between the builds. You can then assign the latest build to take and use + for testing with this plan. + +1. To close the **Assign Build** activity and return to the test plan properties, choose the **Close** icon. + +1. To save these changes for this test plan, choose **Save** in the toolbar. + + +## Create your test settings and environment to run your tests + +To run your automated tests, you must use a standard or an SCVMM environment. You cannot run automated tests using Microsoft Test Manager without a lab environment. + +You must create an environment that contains the roles in your test +settings and then use this environment in your test plan. For more +information about how to create your environment and roles and test settings, see +[Use a lab environment for your devops](https://docs.microsoft.com/visualstudio/test/lab-management/using-a-lab-environment-for-your-application-lifecycle). + + +## Run the automated test using Microsoft Test Manager + +To run the automated test using Microsoft Test Manager: + +1. Open Microsoft Test Manager. + +1. To run the automated test, choose the down-arrow on the center group switcher and then choose **Testing Center**. + +1. On the center group menu bar, choose **Test**. + +1. (Optional) To override the build, the test settings or the environment to use for + running the automated tests that you select in this test plan, right-click the test + and then choose **Run with options**. For example, if you want to run on a staging + environment instead of your standard testing environment then you might select a + different environment. From the Run options dialog box, you can change these settings, + and then choose **Run** to run the selected test. + + >If you select a different environment, it must contain the same roles that you selected in the test settings that you use. + +1. To run the automated test without changing any options, right-click the test and then choose **Run**. + The **Analyze Test Runs** activity is displayed. It shows the progress of the test run that contains this test. + + >You can run multiple automated tests by selecting multiple tests, + or you can select to run a whole suite of tests. To run a suite, right-click + the test suite and then choose **Run**. + + +## View and update the test results + +To view and update the test results: + +1. Open Microsoft Test Manager. + +1. To view the test results, choose the down-arrow on the center group switcher and then choose **Testing Center**. + +1. On the center group menu bar, choose **Test** and then choose **Analyze Test Runs**. + The Analyze Test Runs activity is displayed. It shows any test runs for this test plan. + +1. Double-click a test run to open it and view the details. + The test run details are displayed. + +1. (Optional) To update the title of your test run to be more meaningful, type the new name in **Title**. + +1. (Optional) If your test failed, you can update the reason for the failure. + Choose **Resolution** and select the reason for the failure from the list. + +1. (Optional) To add comments to the test result, choose the Comments icon. + Type your comments and then choose **Save comments**. + +1. (Optional) To view the details of an individual test, double-click the test. + The test result is displayed. It shows the details from the test run, the attachments + for data collected for this test result, and the test results history for that test. + You can close this view to return to the test run. + + >If, from your analysis, you determine that there is a bug, you can create a bug from this view. + +1. To save these changes for this test run, choose **Save** in the toolbar. + +## See Also + +* [Associate automated test results with requirements](associate-automated-results-with-requirements.md) +* [Run automated tests from test plans in the Test hub](run-automated-tests-from-test-hub.md) +* [Test with unified agents and phases](test-with-unified-agent-and-phases.md) +* [Continuous testing scenarios and capabilities](index.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/build-release/test/breadcrumb/toc.yml b/docs/build-release/test/breadcrumb/toc.yml new file mode 100644 index 00000000000..1c686ad1c86 --- /dev/null +++ b/docs/build-release/test/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Testing + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=testing + items: + - name: "Continuous Testing" + tocHref: /vsts/ + topicHref: /vsts/build-release/test/index diff --git a/docs/build-release/test/continuous-test-java.md b/docs/build-release/test/continuous-test-java.md new file mode 100644 index 00000000000..455c81e31af --- /dev/null +++ b/docs/build-release/test/continuous-test-java.md @@ -0,0 +1,110 @@ +--- +title: Continuous testing Java applications - Visual Studio Team Services +description: Continuous testing with Java in a continuous integration pipeline with Visual Studio Team Services (VSTS) and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 3A1A725F-4E7B-4652-BFD1-FC7C9A248B7B +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Testing Java applications with VSTS + +[!INCLUDE [version-header-vs-vsts-tfs](_shared/version-header-vs-vsts-tfs.md)] + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) include build tasks to +make it easy to integrate your build and testing +efforts into your release pipelines with rich +reporting highlighting build-on-build changes, +easy-to-create actionable bugs for regressions and +the ability to create and display code coverage +with a simple checkbox. + +In this topic: + +* [Build integration](#build-integration) +* [Build-on-build summary results](#summary-results) +* [Test details view](#test-details) +* [Easily create actionable bugs](#actionable) +* [Code coverage results](#code-coverage) + +[See this topic on Channel9 video](https://channel9.msdn.com/Series/Test-Tools-in-Visual-Studio/Testing-Java-Applications-with-Visual-Studio-Team-Services) + + +## Build integration + +VSTS build tasks make it +easy to build to build Java applications. These +same tasks also make it easy to test your Java +applications. The example below uses Maven to build +a Java application, runs JUnit tests, and uses Maven and +to test the application. + +![VSTS build and test integration](_img/continuous-test-java/continuous-test-java-01.png) + +The output of these tests and other testing +frameworks is made available in the standard +test reports by using the **Publish Test Results** +task. Note that, in the image below the task defaults to +importing the test results from JUnit. + +![Importing the test results from JUnit](_img/continuous-test-java/continuous-test-java-02.png) + + +## Build-on-build summary results + +VSTS automatically adds +build-on-build changes in the summary view to give +a clear indication if your quality is improving. +In the example below you can see 16 new tests were +added, but 6 of these tests are now failing and the +build time is now much longer. + +![Tests now failing and the build time is much longer](_img/continuous-test-java/continuous-test-java-03.png) + + +## Test details view + +While Summary View gives build-on-build changes, +Details View lets you identify the problems +and easily action them. In this view, all the +failed test information is displayed. +Selecting a failed test displays all the data +you need to take action for this issue, such as +the error message, duration, failing agent, and +stack trace. + +![Viewing the data for a failed test](_img/continuous-test-java/continuous-test-java-04.png) + + +## Easily create actionable bugs + +After an issue has been identified, Test Details +view makes it easy to create actionable bugs that +include all the data from Details +View, as well as automatically linking the build, +test run, and a generated title. + +![Creating actionable bugs that include all the data from from Details View](_img/continuous-test-java/continuous-test-java-05.png) + + +## Code coverage results + +By checking an option in the test build task, code +coverage is automatically collected during the +tests. Summary View shows a roll-up of the data and +a detailed coverage results report that enables you +to drill into your application and identify +coverage in different areas. + +![Code coverage results in the build summary](_img/continuous-test-java/continuous-test-java-06.png) + +![Code coverage results in the browser](_img/continuous-test-java/continuous-test-java-07.png) + +## See also + +[VSTS Java website](http://java.visualstudio.com/) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] + diff --git a/docs/build-release/test/continuous-test-selenium.md b/docs/build-release/test/continuous-test-selenium.md new file mode 100644 index 00000000000..6f333f3e06a --- /dev/null +++ b/docs/build-release/test/continuous-test-selenium.md @@ -0,0 +1,261 @@ +--- +title: Selenium testing in Visual Studio Team Services +description: UI Testing with Selenium in a continuous integration pipeline in Visual Studio Team Services (VSTS) and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 1B90D2DF-4AB0-4B65-8039-2B14A25FB547 +ms.topic: get-started-article +ms.manager: douge +ms.author: ahomer +ms.date: 06/15/2017 +--- + +# Get started with Selenium testing in a CI pipeline + +[!INCLUDE [version-header-vs-vsts-tfs](_shared/version-header-vs-vsts-tfs.md)] + +Performing user interface testing as part of the +build process is a great way of detecting +unexpected changes and need not be difficult. This +topic describes using Selenium to test your website +in a continuous integration build. + +For more information about Selenium browser automation, see: + +* [Selenium HQ](http://docs.seleniumhq.org/) +* [Selenium documentation](http://www.seleniumhq.org/docs/01_introducing_selenium.jsp) + + +## Create the test project + +As there is no template for Selenium testing, the +easiest way to get started is to use the Unit Test +template. This automatically adds the test framework +references and enables you run and view the results +from Visual Studio Test Explorer. + +1. In Visual Studio, open the **File** menu and choose **New Project**, + then choose **Test** and select **Unit Test Project**. Alternatively, + open the shortcut menu for the solution and choose + **Add** then **New Project** and then + **Unit Test Project**.  + + For more details, see: [Get started with unit testing](https://docs.microsoft.com/visualstudio/test/getting-started-with-unit-testing). + +1. After the project is created, you must add the Selenium and + browser driver references used by the browser to + execute the tests. Open the shortcut menu for the + Unit Test project and choose **Manage NuGet + Packages**. Add the following packages to your project: + + * Selenium.WebDriver + * Selenium.WebDriver.ChromeDriver + * Selenium.WebDriver.IEDriver + * Selenium.Firefox.WebDriver + * Selenium.WebDriver.PhantomJS.Xplatform

    + + ![Adding the browser driver packages to your solution](_img/continuous-test-selenium/continuous-test-selenium-02.png) + +1. The Unit Test project creates a default class + named **UnitTest1.cs**. To author a Selenium Test, + replace the contents of the file with the following + code. + + ```csharp + namespace Partsunlimited.UITests + { + using Microsoft.VisualStudio.TestTools.UnitTesting; + using OpenQA.Selenium; + using OpenQA.Selenium.Chrome; + using OpenQA.Selenium.Firefox; + using OpenQA.Selenium.IE; + using OpenQA.Selenium.Remote; + using OpenQA.Selenium.PhantomJS; + using System; + + [TestClass] + public class ChucksClass1 + { + private string baseURL = "http://your-website.azurewebsites.net/"; + private RemoteWebDriver driver; + private string browser; + public TestContext TestContext { get; set; } + + [TestMethod] + [TestCategory("Selenium")] + [Priority(1)] + [Owner("FireFox")] + + public void TireSearch_Any() + { + driver = new FirefoxDriver(); + driver.Manage().Window.Maximize(); + driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30)); + driver.Navigate().GoToUrl(this.baseURL); + driver.FindElementById("search - box").Clear(); + driver.FindElementById("search - box").SendKeys("tire"); + //do other Selenium things here! + } + + [TestCleanup()] + public void MyTestCleanup() + { + driver.Quit(); + } + + [TestInitialize()] + public void MyTestInitialize() + { + } + } + } + ``` + + ![Replacing the code in UnitTest1.cs](_img/continuous-test-selenium/continuous-test-selenium-03.png) + +1. Run the Selenium test locally using Test Explorer. + + ![Running the tests in Visual Studio Test Explorer](_img/continuous-test-selenium/continuous-test-selenium-04.png) + + +## Include the test in a CI build + +To include the Selenium test as part of a build, +the source code must be in version control. + +![Checking the code into VSTS](_img/continuous-test-selenium/continuous-test-selenium-05.png) + +1. In your Visual Studio Team Services (VSTS) account where + you checked in the test code, open the **Build & Release** hub and select the **Builds** tab. + +1. Create a new build definition using the **.NET Desktop** + build template. + +1. In the new build definition, select the **Default** agent queue in which you have installed an agent. + If you have not installed an agent in the **Default** queue, choose the + **manage queues** link and do that now. For information, see + [Deploy a Windows build agent](../actions/agents/v2-windows.md). + You might decide to [create an Azure VM](https://docs.microsoft.com/azure/virtual-machines/windows/quick-create-portal) + to install your agent, or use a [deployment group](../concepts/definitions/release/deployment-groups/index.md) + and [install an agent there](../concepts/definitions/release/deployment-groups/howto-provision-deployment-group-agents.md). + + >Selenium tests will generally be run interactively, + which would fail on the **Hosted** build controller. + +1. In the **Get sources** step, ensure that the repository and branch where you checked in your + code is selected. + +1. Select the **Triggers** tab and turn on the **Continuous integration...** trigger so that + your solution builds after each check-in using continuous integration. + +1. Delete the **Test Assemblies** (Visual Studio Test) task step from the build definition, then + add a **Visual Studio Test Agent Deployment**, **Windows Machine File Copy**, and **Run Functional Tests** + task from the **Test** and **Deploy** tabs of the task catalog. Drag and drop then in + that order immediately after the **Publish symbols path** task step. + + ![Tasks in the build definition](_img/continuous-test-selenium/continuous-test-selenium-06.png) + +1. Configure the tasks as shown here: + + ![Nuget Installer](../tasks/package/_img/nuget-installer.png) [Package: Nuget Installer](../tasks/package/nuget-installer.md) - Install and update NuGet package dependencies. + + - **Path to solution or packages.config**: Select your app solution (.sln) file. + + - **Installation type**: `Restore`

    + + ![Visual Studio Build](../tasks/build/_img/visual-studio-build.png) [Build: Visual Studio Build](../tasks/build/visual-studio-build.md) - Build with MSBuild and set the Visual Studio version property. + + - **Solution**: Select your app solution (.sln) file. + + - **Platform**: `$(BuildPlatform)` + + - **Configuration**: `$(BuildConfiguration)` + + - **Visual Studio Version**: Select the version used to create your app.

    + + ![Index Sources & Publish Symbols](../tasks/build/_img/index-sources-publish-symbols.png) [Test: Index Sources & Publish Symbols](../tasks/build/index-sources-publish-symbols.md) - Index the source code and optionally publish symbols to a SymStore file share. + + - **Search pattern**: `**\bin\**\*.pdb`

    + + ![Visual Studio Test Agent Deployment](../tasks/test/_img/visual-studio-test-agent-deployment-icon.png) [Test: Visual Studio Test Agent Deployment](../tasks/test/visual-studio-test-agent-deployment.md) - Deploy and configure the test agent to run tests on a set of machines. + + - **Machines**: Comma-delimited list of machine names, or a variable containing the list. + + - **Admin Login**: Username for target server or a variable containing it. + + - **Admin Password**: Password for target server or a variable containing it. + + - **Protocol**: `HTTP` + + - **Select Machines By**: `Machine Names` + + - **Agent Configuration - Username**: Agent username or a variable containing it. + + - **Agent Configuration - Password**: Agent password or a variable containing it. + + - **Agent Configuration - Interactive Process**: Checked

    + + ![Windows Machine File Copy](../tasks/deploy/_img/windows-machine-file-copy-icon.png) [Deploy: Windows Machine File Copy](../tasks/deploy/windows-machine-file-copy.md) - Copy files to remote machines. + + - **Source**: `$(Build.Repository.LocalPath)` + + - **Machines**: Comma-delimited list of machine names, or a variable containing the list. + + - **Admin Login**: Username for target server or a variable containing it. + + - **Password**: Password for target server or a variable containing it. + + - **Destination Folder**: `C:\Deploy` or another folder on the target server.

    + + ![Run Functional Tests](../tasks/test/_img/run-functional-tests-icon.png) [Test: Run Functional Tests](../tasks/test/run-functional-tests.md) - Run Coded UI tests, Selenium tests, and functional tests on a set of machines using the test agent. + + - **Machines**: Comma-delimited list of machine names, or a variable containing the list. + + - **Test Drop Location**: `C:\Deploy` or the folder where you copied the files if different. + + - **Execution Options - Test Selection**: `Test Assembly` + + - **Execution Options - Test Assembly**: `**\*Test*.dll`

    + + ![Copy Files](../tasks/utility/_img/copy-files.png) [Test: Copy Files](../tasks/utility/copy-files.md) - Copy files from a source folder to a target folder using match patterns. + + - **Source Folder**: `$(build.sourcesdirectory)` + + - **Contents**: `**\bin\$(BuildConfiguration)\**` + + - **Target Folder**: `$(build.artifactstagingdirectory)`

    + + ![Publish Build Artifacts](../tasks/utility/_img/publish-build-artifacts.png) [Test: Publish Build Artifacts](../tasks/utility/publish-build-artifacts.md) - Publish Build artifacts to the server or a file share. + + - **Path to Publish**: Select your Azure subscription. + + - **Artifact Name**: `drop` + + - **Artifact Type**: `Server`

    + + >It's generally advisable to use custom variables for parameter values, especially + where the same value is used in the parameters of more than one task. You can also + secure and hide values by using custom variables. See [Build Variables](../concepts/definitions/build/variables.md). + +1. Save the build definition and queue a new build. + + +## View the test results + +1. To view the test results from a build, open + the build summary from the **Builds** tab. + + ![Selecting a build result](_img/continuous-test-selenium/continuous-test-selenium-09.png) + + The build summary includes a snapshot of the test + results. There is also a **Tests** results page that + highlights the build-on-build changes, including + errors, stack traces, and the ability to easily + create a bug that contains this information. + + ![The build summary and test results](_img/continuous-test-selenium/continuous-test-selenium-10.png) + +## Next steps + +> [!div class="nextstepaction"] +> [Review your test results](review-continuous-test-results-after-build.md) diff --git a/docs/build-release/test/example-continuous-testing.md b/docs/build-release/test/example-continuous-testing.md new file mode 100644 index 00000000000..108ee13b5bf --- /dev/null +++ b/docs/build-release/test/example-continuous-testing.md @@ -0,0 +1,312 @@ +--- +title: Continuous integration, test, and deployment tutorial +description: Continuous integration, test, and deployment example in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 447F1F56-993A-4AB0-B521-ED72514BDEE3 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Continuous integration, test, and deployment tutorial + +[!INCLUDE [version-header-vs-vsts-tfs](_shared/version-header-vs-vsts-tfs.md)] + +This tutorial demonstrates how you can use the continuous integration and +continuous deployment features of Visual Studio Team Services (VSTS) and +Microsoft Team Foundation Server (TFS) to build, test, and deploy +applications quickly and efficiently to Azure App Services; and +run a simple load test after deploying every update. + +In this tutorial, you will learn how to: + +> [!div class="checklist"] +> * [Create the Azure app service instance for your sample app](#create-service). +> * [Create and check in a sample ASP.NET MVC web app containing unit tests](#create-app). +> * [Configure continuous integration (CI) to build the app and run the unit tests](#configure-ci). +> * [Configure continuous deployment (CD) to deploy the app and run a quick performance test](#configure-cd). +> * [Modify the sample app to explore behavior when a test fails](#test-failure). +> * [Fix the test failure and view the complete CI/CD process](#view-process). + +It will take around 45 minutes to complete all of the steps. + +> For information about deploying to targets other than Azure App Service, see +[Build and deploy your app](../../build-release/apps/index.md). + + +[!INCLUDE [create-azure-web-app-portal](../apps/cd/azure/_shared/create-azure-web-app-portal.md)] + + +## Create the sample web app + +In this section, you will create a simple ASP.NET MVC web app containing +unit tests that you can execute as part of the build process. + +1. In Visual Studio, create a new **ASP.NET Web Application** project from + the **Web** section of the list of installed templates. + + ![Creating the new project](_img/example-continuous-testing/example-continuous-testing-10.png) + +1. When prompted, select **MVC** template and make sure to set (tick) the **Add unit tests** checkbox. + + ![Including unit tests in your project](_img/example-continuous-testing/example-continuous-testing-11.png) + +1. Save and close the new project, then check it into your VSTS or TFS repository. + + ![Checking the sample app into the repository](_img/example-continuous-testing/example-continuous-testing-12.png) + +>For more details about creating apps in Visual Studio, see +[Solutions and Projects in Visual Studio](https://docs.microsoft.com/visualstudio/ide/solutions-and-projects-in-visual-studio). +For more details about using VSTS code repositories, see +[Share your code with Visual Studio and VSTS Git](../../git/share-your-code-in-git-vs.md). + + +## Configure continuous integration + +In this section, you will create a build definition that is configured to +run automatically when you check in any changes to the sample app, and it +will automatically execute the unit tests it contains. + +1. Sign into your VSTS account (**https://**_your-acccount_**.visualstudio.com**) + and open the project where you checked in the sample app. + +1. Open the **Build & Release** hub and, in the **Builds** tab, choose + **+ New definition**. + + ![Starting a new build definition](_img/example-continuous-testing/example-continuous-testing-20.png) + +1. Choose the **ASP.NET** template for the new build definition. + + ![Choosing the build type](_img/example-continuous-testing/example-continuous-testing-21.png) + +1. In the new build definition, select the **Process** item and then select the **Hosted** agent queue. + + ![Choosing the default agent queue](_img/example-continuous-testing/example-continuous-testing-21a.png) + +1. Open the **Triggers** tab and turn on the **Continuous integration** trigger. Make sure the repository containing your app is selected. + + ![Specifying continuous integration](_img/example-continuous-testing/example-continuous-testing-22.png) + +1. Save the new build definition and queue a new build. + + ![Starting a test build](_img/example-continuous-testing/example-continuous-testing-28.png) + +1. Choose the link to the build in the message bar that appears. + + ![Choosing the build link](_img/example-continuous-testing/example-continuous-testing-28a.png) + +1. After the build has finished, you see the summary for each task and the results in the live log file. + Choose the **Tests** link. + + ![Viewing the build results](_img/example-continuous-testing/example-continuous-testing-29.png) + +1. The **Tests** tab provides comprehensive results of executing the unit tests defined in the + solution. Use the **Outcome** list to show the tests that passed. + + ![Viewing the test results](_img/example-continuous-testing/example-continuous-testing-30.png) + + [What are the typical types of tests I can use to validate my app?](reference-qa.md#qa-more-tests) + +1. Choose the test summary item at the top of the list of tests to open the **Test** hub + in a new browser window, showing a summary and charts for this test run. + + ![Viewing the test results](_img/example-continuous-testing/example-continuous-testing-31.png) + +>For more details about build definitions in VSTS, see +[Continuous integration on any platform](../../build-release/overview.md). For more details about unit tests and the results, see +[Get started with unit testing](https://docs.microsoft.com/visualstudio/test/getting-started-with-unit-testing). + + +## Configure continuous deployment + +In this section, you will create a release definition that is configured to +start a release that deploys the app automatically when a successful build +occurs. After successful deployment, the release will automatically execute +a simple load test to validate the deployment. + +1. Close the **Test** hub browser window and, in the build summary page in + the **Builds** hub, choose the **Release** icon. + + ![Starting a new release definition ](_img/example-continuous-testing/example-continuous-testing-40.png) + +1. Select the **Azure App Service Deployment with Performance Test** template. + +1. In the new release definition, choose the "pencil" edit icon next to the default + name and enter some meaningful name. Press _RETURN_ to save it. + + ![Editing the definition name](_img/example-continuous-testing/example-continuous-testing-43.png) + +1. In the new release definition, open the **Tasks** tab and select the **Deploy Azure App Service** task. + In the parameters pane, select your Azure subscription from the drop-down list. + Then select your App Service name from the drop-down list. + + ![Configuring the Deploy Azure App Service task](_img/example-continuous-testing/example-continuous-testing-44.png) + + If you don't see any subscriptions listed, choose the ![Settings](_img/example-continuous-testing/settings-icon.png) icon and, in the + **Services** page, create a new **Azure Resource Manager** service endpoint. If you + have problems creating the connection, see + [Troubleshoot Azure Resource Manager service endpoints](../../build-release/actions/azure-rm-endpoint.md). + + ![Creating an Azure service connection ](_img/example-continuous-testing/example-continuous-testing-44a.png) + + [Can I deploy to a staging slot first, and then to production?](reference-qa.md#qa-stagingslot) + +1. Select the **Quick Web Performance Test** task and, in the parameters pane, + enter the full URL of your Azure App Service instance. + + ![Configuring the Quick Web Performance Test task](_img/example-continuous-testing/example-continuous-testing-46.png) + + You can get the full URL from the **Overview** page for your App Service instance + in the Azure portal. The URL will be in the form **http://**_your-app-service-name_.**azurewebsites.net**. + + ![Finding the app service instance URL](_img/example-continuous-testing/example-continuous-testing-45.png) + + [What other tests can I run to validate my deployment?](reference-qa.md#qa-more-tests) + +1. Save the new release definition. + + ![Saving the release definition](_img/example-continuous-testing/example-continuous-testing-47.png) + +1. Create a release from your definition using the **Release** icon in the toolbar. + + ![Creating a new release](_img/example-continuous-testing/example-continuous-testing-48.png) + +1. After the release starts, choose the **Release-**_x_ link just below the toolbar. + + ![Selecting the link to the new release](_img/example-continuous-testing/example-continuous-testing-49.png) + +1. This shows a summary of the release, with the Deployment status as **IN PROGRESS**. Choose + the **Logs** link above the toolbar. + + ![Selecting the Logs link in the release summary page](_img/example-continuous-testing/example-continuous-testing-50.png) + +1. The **Logs** page shows the status of each step in the release, and a live log. + When the release has successfully completed, choose the **Summary** link above the toolbar. + + ![Selecting the Summary link in the logs page](_img/example-continuous-testing/example-continuous-testing-51.png) + +1. The **Summary** page shows the final release summary, and the load test results + ("No thresholds violated"). + + ![Viewing the final release summary](_img/example-continuous-testing/example-continuous-testing-52.png) + +1. Open the **Load test** tab of the **Test** hub. This shows a summary of all + the load test runs you have executed. Open the **LoadTest.loadtest** run that + was just completed, + + ![Viewing all the load test runs](_img/example-continuous-testing/example-continuous-testing-53.png) + +1. As well as the **Summary** page for the load test run, you can open the + **Charts**, **Diagnostics**, and **Logs** tabs to see more information about the test run. + + ![Viewing details of the load test run](_img/example-continuous-testing/example-continuous-testing-54.png) + + >For more details about release definitions, see + [Release Management in VSTS](../../build-release/concepts/definitions/release/index.md). + For more details about load tests and the results, see + [Run URL-based load tests with VSTS](../../load-test/get-started-simple-cloud-load-test.md). + + +## Explore behavior when a test fails + +In this section, you will modify the sample app so that one of the unit tests +will fail, and see how the CI/CD process is halted when the test fails during +the build process. + +1. In Visual Studio, open the source solution for your app and open the + **HomeController.cs** file from the **Controllers** folder of your main + app project (in this example, it's SampleWebAppWithTests\Controllers\HomeController.cs). + +1. Change the line in the **About** method to show a different message, such as: + + ```csharp + public ActionResult About() + { + ViewBag.Message = "My super new web app."; + return View(); + } + ``` + +1. Save the change and check in the change to your VSTS repository. + +1. Open the **Builds** tab of the **Build & Release** hub. You'll see + a build of your build definition in "_in progress_". Choose the build number link + next to this to open the build summary. + + ![Viewing the CI build in progress](_img/example-continuous-testing/example-continuous-testing-60.png) + +1. In the build summary, you can see the message that one of the unit tests failed, + and that there was no deployment from this build. Because the test failed, Team + Services did not automatically create a CD release. + + ![Viewing the result of the failed CI build](_img/example-continuous-testing/example-continuous-testing-61.png) + +1. Choose the **Test** link to open the test details tab. You can see a summary + of the test run, and - by default - a list of the failed tests. Choose the one + failed test to see details. The error message shows that the description for the + **About** method (which you edited) does not match the expected value. + + ![Viewing the detailed test results](_img/example-continuous-testing/example-continuous-testing-62.png) + +1. Verify that the new build did not start a CD release by opening the + **Releases** tab of the **Build & Release** hub. You can see that there is + only the first release you created manually earlier in this example. + + ![Checking if any release is in progress](_img/example-continuous-testing/example-continuous-testing-63.png) + + +## View the complete CI/CD process + +In this section, you will fix the failing test, check in the updates, and +see the complete CI/CD process execute; finishing with the results of the +post-deployment load test. + +1. Go back to your source solution in Visual Studio and open the + **HomeControllerTest.cs** file from the **Controllers** folder of the + **Tests** project (in this example, it's SampleWebAppWithTests.Tests\Controllers\HomeControllerTest.cs). + +1. Change the line in the **About** test method so that it matches the + message you specified when you edited the main project earlier. In this example: + + ```csharp + [TestMethod] + public void About() + { + // Arrange + HomeController controller = new HomeController(); + + // Act + ViewResult result = controller.About() as ViewResult; + + // Assert + Assert.AreEqual("My super new web app.", result.ViewBag.Message); + } + + ``` + +1. Save the change and check in the change to your VSTS repository. + +1. Open the **Builds** tab of the **Build & Release** hub. You'll see + a build of your build definition in "_in progress_". Choose the build number link + next to this to open the build summary and check that it succeeds. + +1. Choose the **Test** link to open the test details tab. You'll see + that all the tests passed. + +1. Verify that the new build did start a CD release by opening the + **Releases** tab of the **Build & Release** hub. This time you + see a new release in progress. + + ![Checking that a release is in progress](_img/example-continuous-testing/example-continuous-testing-70.png) + +1. In your web browser, open your new ASP.NET website. The URL will be in + the form **http://**_your-app-service-name_.**azurewebsites.net**. + + ![Viewing the final result website](_img/example-continuous-testing/example-continuous-testing-71.png) + +## Next step + +> [!div class="nextstepaction"] +> [CI/CD in depth](../../build-release/overview.md) diff --git a/docs/build-release/test/getting-started-with-continuous-testing.md b/docs/build-release/test/getting-started-with-continuous-testing.md new file mode 100644 index 00000000000..697505f6285 --- /dev/null +++ b/docs/build-release/test/getting-started-with-continuous-testing.md @@ -0,0 +1,100 @@ +--- +title: Continuous testing with VS Test +description: Get started with continuous testing. Run tests with your builds for continuous integration in VSTS and Team Foundation Server TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: a4a33a7d-fb75-46e0-b74d-91623ae5187e +ms.topic: get-started-article +ms.manager: douge +ms.author: ahomer +ms.date: 07/03/2017 +--- + +# Run tests with your builds + +[!INCLUDE [version-header-vs-vsts-tfs](_shared/version-header-vs-vsts-tfs.md)] + +Make sure that your app still works after every +check-in and build using Visual Studio Team Services (VSTS) or Team Foundation Server (TFS). +Find problems earlier by running tests +automatically with each build. When your build is +done, review your test results to start resolving +the problems that you find. + + +## Before you start + +This overview shows how to run unit tests with your build +for .NET and ASP.NET apps. It uses the [Visual Studio Test](https://github.com/Microsoft/vsts-tasks/blob/releases/m109/Tasks/VsTest/README.md) task. + +1. [Check in your solution](../../tfvc/overview.md) + to VSTS. Include your test projects. + +1. [Create a build definition](../overview.md) + that builds your solution after each check-in, + using continuous integration. + +When you're ready to +[run other continuous tests](#runothertests), such as +system tests, under more realistic conditions, +create environments from physical or virtual +machines that you've already set up. Then set up +your build to run your app and tests in the +environments that you created. + + +## Create a build definition + +Your build definition must include a test task that runs unit tests. +For example, if you're building a Visual Studio solution in VSTS, +your build definition should include a **Visual Studio Test** task. After your +build starts, this task automatically runs all the unit tests in your +solution - on the same build machine. + +1. If your build definition does not contain a test task, add one to it. + + ![Add a VS Test task](_img/getting-started-with-continuous-testing/add-test-task.png) + +1. Edit the Visual Studio Test task. You can add filter criteria to run specific tests, enable code coverage, + run tests from [other unit test frameworks](reference-qa.md), and so on. + For information about the option settings of the Visual Studio Test task, see + [Run Tests using Visual Studio task](https://github.com/Microsoft/vsts-tasks/blob/master/Tasks/VsTest/README.md). + + ![Build definition: customize unit test run](_img/getting-started-with-continuous-testing/edit-unit-test-task.png) + + > The Visual Studio Test task version 2 supports Test Impact Analysis (TIA). See [these blog posts](https://blogs.msdn.microsoft.com/devops/?s=test+impact). + +1. When you're done, save your build definition. + + ![Build definition: save](_img/getting-started-with-continuous-testing/save-build-def.png) + + +## Start the build + +1. Start the build by adding it to the build queue. + + ![Build definition: queue build](_img/getting-started-with-continuous-testing/start-build.png) + +1. After the build finishes, you can review the test results to resolve any problems that happened. Go to the build to open the build summary. + + ![Go to Build hub, build definition, build summary](_img/getting-started-with-continuous-testing/open-summary.png) + + +## Review the results + +1. Open the test run results summary and compare your test results + between this build and the last build. Here you'll find changes in new, failed, and passed tests, + how long these tests took to run, how long these tests have been failing, and more. + Organize your test results and open bugs directly for failed tests. + + ![Compare test result summaries between builds](_img/getting-started-with-continuous-testing/build-summary-test-result-metrics.png) + +1. To start debugging a failed test, open the test and review the resulting error and stack trace. + + ![Error and stack trace for a failed test](_img/getting-started-with-continuous-testing/build-error-message.png) + + +## Next step + +> [!div class="nextstepaction"] +> [Review your test results](review-continuous-test-results-after-build.md) diff --git a/docs/build-release/test/index.md b/docs/build-release/test/index.md new file mode 100644 index 00000000000..7f59a54bf29 --- /dev/null +++ b/docs/build-release/test/index.md @@ -0,0 +1,58 @@ +--- +title: Continuous Testing +description: Continuous testing in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 55B050E3-64A2-4EEA-A1DD-43700B8EC2A8 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Continuous Testing + +**VSTS | TFS 2017 | TFS 2015 | [Previous version](https://msdn.microsoft.com/library/ee702477%28v=vs.120%29.aspx)** + +Whether your app is on-premises or in the cloud, you can automate build-deploy-test workflows and +choose the technologies and frameworks, then test your changes continuously in a fast, scalable, and efficient manner. + +## 5-Minute Quickstarts + +| | | | +| --- | --- | --- | +| ![icon](_img/continuoustest-icon.png)
    [Test with builds](getting-started-with-continuous-testing.md) | ![icon](_img/selenium-icon.png)
    [Selenium testing](continuous-test-selenium.md) | ![icon](_img/reviewresults-icon.png)
    [Review test results](review-continuous-test-results-after-build.md) | +| | | | + +## Videos + +| | | +| --- | --- | +| | | +| | | +| | | + +## Step-by-Step Tutorials + +* [Run unit tests and load tests as you build and deploy your app](example-continuous-testing.md) + +## How-to Guides + +* [Set up continuous testing](set-up-continuous-testing-builds.md) +* [Run tests from the Test hub](run-automated-tests-from-test-hub.md) +* [Associate tests with test cases](associate-automated-test-with-test-case.md) +* [Associate results with requirements](associate-automated-results-with-requirements.md) + +## Reference + +* [Unified agents and phases](test-with-unified-agent-and-phases.md) +* [Test Java applications](continuous-test-java.md) +* [Set up environments](set-up-continuous-test-environments-builds.md) +* [FAQs](reference-qa.md) + +## Resources + +| | | | +| --- | --- | --- | +| [DevOps Rangers](https://vsartestreleaseguide.codeplex.com/) | [Plug-ins for Visual Studio](http://go.microsoft.com/fwlink/?LinkID=246630) | | +| [Manual and exploratory testing](../../manual-test/index.md) | [Load and performance testing](../../load-test/index.md) | [Unit testing](https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios) | +| | | | diff --git a/docs/build-release/test/overview.md b/docs/build-release/test/overview.md new file mode 100644 index 00000000000..848e6542a4d --- /dev/null +++ b/docs/build-release/test/overview.md @@ -0,0 +1,83 @@ +--- +title: Continuous testing with VSTS and Team Foundation Server +description: Use continuous testing in VSTS and Team Foundation Server to ensures your app still works after every check-in and build, enabling you to find problems earlier. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 574CD62B-38DA-4015-9E15-36673C489D36 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Continuous testing scenarios and capabilities + +**VSTS | TFS 2017 | TFS 2015 | [Previous version](https://msdn.microsoft.com/library/ee702477%28v=vs.120%29.aspx)** + +Whether your app is on-premises or in the cloud, +you can automate build-deploy-test workflows and +choose the technologies and frameworks, then test +your changes continuously in a fast, scalable, and +efficient manner. + +![Test with Visual Studio VSTS and Team Foundation Server](_img/continuous-testing/test-types.png) + + +## Maintain quality and find problems as you develop + +Continuous testing with Visual Studio Team Services (VSTS) +or Team Foundation Server (TFS) ensures your app still +works after every check-in and build, enabling you +to find problems earlier by running tests +automatically with each build. + +

    + +* [Get started with continuous testing](getting-started-with-continuous-testing.md) +* [Testing in Continuous Integration and Continuous Deployment Workflows](https://blogs.msdn.microsoft.com/visualstudioalm/2015/05/29/testing-in-continuous-integration-and-continuous-deployment-workflows/) +* [Learn more about test task steps](../tasks/index.md#test) +* [An end-to-end example of continuous testing](example-continuous-testing.md) +* [Run automated tests from test plans in the Test hub](run-automated-tests-from-test-hub.md) + + +## Any test type and any test framework + +Choose the test technologies and frameworks you +prefer to use. + +

    + +* [Get started with Java testing](continuous-test-java.md). +* [Get started with Selenium testing](continuous-test-selenium.md). +* [Use Maven to build your Java app](../tasks/build/maven.md) +* [Unit testing framework plug-ins for Visual Studio](http://go.microsoft.com/fwlink/?LinkID=246630) + + +## Rich analytics and reporting + +When your build is done, review your test results +to start resolving the problems you find. +Rich and actionable build-on-build reports +let you instantly see if your builds are getting +healthier. But it's not just about speed - detailed and +customizable test results measure the quality of +your app. + +![Build results showing rich test results](_img/continuous-testing/BuildSummary.png) + +* [Review continuous test results after a build](review-continuous-test-results-after-build.md). +* [Get started with continuous testing](getting-started-with-continuous-testing.md) + + +## Advanced DevOps practices + +If you are already using advanced continuous +testing practices in DevOps workflows, or just +using continuous testing and looking for advanced +content, check out +[Test automation, planning, and management concepts](https://vsartestreleaseguide.codeplex.com/) +from the DevOps Rangers. + +> See also [Manual and exploratory testing](../../manual-test/index.md), [Load and performance testing](../../load-test/index.md), [Unit testing](https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios). + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/build-release/test/reference-qa.md b/docs/build-release/test/reference-qa.md new file mode 100644 index 00000000000..48000e356da --- /dev/null +++ b/docs/build-release/test/reference-qa.md @@ -0,0 +1,307 @@ +--- +title: FAQs for continuous testing +description: FAQs for continuous testing topics for Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: F9F85914-C81A-4D9E-80CA-36EC4E8A5677 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# FAQs for continuous testing + +[!INCLUDE [version-header-vs-vsts-tfs](_shared/version-header-vs-vsts-tfs.md)] + + +## General topics + +### Q: How do I run tests from different unit test frameworks with my build? + +**A**: First, set up your test frameworks in your development tool. For example, in Visual Studio: + +1. [Set up the plug-in for your test framework](https://docs.microsoft.com/visualstudio/test/getting-started-with-unit-testing#frameworks), if you haven't already. + +1. Create a folder that has the custom binaries for your plug-in. (The plug-in package for your framework is a .vsix file. Change the extension to .zip so that you can unzip it.) + +1. Add these assemblies to version control and [let the build controller know where to get them](../../build-release/overview.md). + +1. In your build definition, provide the path to the test framework in the *Path to Custom Test Adapters** parameter: + + ![Build def, VSTest task, custom test framework](_img/getting-started-with-continuous-testing/IC816555.png) + +### Q: I'm having problems using xUnit with .NET Core apps. Where can I get more information? + +**A**: See the blog post [Unit Tests with .NET Core and VSTS](http://blogs.perficient.com/microsoft/2016/08/unit-test-with-net-core-and-vsts/). + + +### Q: What are the typical types of tests I can run to validate my app and deployment? + +**A**: Testing in a continuous integration and continuous deployment (CI/CD) scenario typically consists of: + +1. Run **unit tests** in the CI pipeline, as demonstrated in the example above. The **Visual Studio Test** task + automatically runs tests included in the app assemblies, but there is a wide range of configuration options + you can specify, such as running only specific tests. See [Run Tests using Visual Studio task](https://github.com/Microsoft/vsts-tasks/blob/releases/m109/Tasks/VsTest/README.md). + +1. Run **functional tests** in the early stages of the CD pipeline. These are typically + [Selenium](continuous-test-selenium.md) (for web apps) and [Coded UI](https://msdn.microsoft.com/en-us/library/dd286726.aspx) tests. + To do this, add the **[Deploy Test Agent](https://github.com/Microsoft/vsts-tasks/blob/releases/m109/Tasks/DeployVisualStudioTestAgent/README.md)** + and **[Run Functional Tests](https://github.com/Microsoft/vsts-tasks/blob/master/Tasks/RunDistributedTests/README.md)** + tasks to your release definition. See [Testing in Continuous Integration and Continuous Deployment Workflows](https://blogs.msdn.microsoft.com/visualstudioalm/2015/05/29/testing-in-continuous-integration-and-continuous-deployment-workflows/). + +1. Run **load tests** after the app is deployed to staging and production, after it passes all functional tests. + The example shown above is just a simple test that accesses a single page in the web app to validate that + deployment succeeded and the app is running successfully. You can perform must more comprehensive load testing + to validate the entire app by running [cloud-based load tests](../../build-release/tasks/test/cloud-based-load-test.md) + and [Apache JMeter load tests](https://github.com/Microsoft/vsts-tasks/tree/master/Tasks/RunJMeterLoadTest). + +### Q: Can I find a specific test run? + +**A**: Yes, type the Run ID into the search box in the left column: + +![Find test run](_img/getting-started-with-continuous-testing/IC816778.png) + +### Q: Can I find specific results from a test run? + +**A**: Yes, after you find your test run, create a query in the **Filter** tab to find the test results you want: + +![Find specific test results](_img/getting-started-with-continuous-testing/IC816776.png) + + +### Q: Can I deploy to a staging slot first, and then to production? + +**A**: Yes, you can create additional deployment slots in Azure Web Apps, +and specify which slot to deploy your app to. If you do not specify a slot, +the default **Production** slot is used. After you deploy, you can swap an +app to a different slot using the **Azure App Service Manage** task. See +[Swap deployment slots](../../build-release/apps/cd/howto-webdeploy-webapps.md#swapslots). + +You can use [task phases](../../build-release/concepts/process/phases.md) +and the [**Manual Intervention**](../../build-release/concepts/process/phases.md#the-manual-intervention-task) task +in your release definition to pause a deployment; for example, to examine test results +after the load tests have run and before the app is swapped from staging to production. + +### Q: Where can I find details about configuring test agents? + +**A**: See [Install and configure test agents](https://docs.microsoft.com/visualstudio/test/lab-management/install-configure-test-agents) + +### Q: What if I want to run debug builds of native (.cpp) unit tests on the machine with the test agent? + +**A**: Make sure that you have debug versions of the Universal C Runtime (UCRT) on the machine with the test agent, +specifically these libraries: ucrtbased.dll and vcruntime140d.dll. You can include these items with your deployment. +If you're running release builds of .cpp unit tests, make sure that you have Windows Update KB2999226 on your test agent machine. + +### Q: Where can I learn more about integrating tests with my build? + +**A**: Try these blog posts and videos: + +* [Configuring Continuous Integration and Continuous Testing with Visual Studio](http://blogs.msdn.com/b/visualstudioalm/archive/2015/07/17/video-configuring-continuous-integration-and-continuous-testing-with-visual-studio-2015.aspx) +* [Testing in Continuous Integration and Continuous Deployment Workflows](http://blogs.msdn.com/b/visualstudioalm/archive/2015/05/29/testing-in-continuous-integration-and-continuous-deployment-workflows.aspx) +* [Integrating Testing Efforts into the DevOps Process with Build vNext and Visual Studio Release Management](https://channel9.msdn.com/Series/ConnectOn-Demand/234) + +--------------------- + + +## Associating tests with test cases + + +### Q: What are the differences if I am still using a XAML build? + +**A**: If you are using a XAML build in VSTS or TFS, you can run tests +that you have associated in a Build-Deploy-Test workflow using a +[Lab environment](https://docs.microsoft.com/visualstudio/test/lab-management/using-a-lab-environment-for-your-application-lifecycle). +You can also run tests using Microsoft Test Manager (MTM) and a +[Lab environment](https://docs.microsoft.com/visualstudio/test/lab-management/using-a-lab-environment-for-your-application-lifecycle). + + +### Q: What types of tests are supported? + +**A**: These are the limitations for each type of test: + +* Coded UI test, Selenium tests, and unit tests written using + the MSTest framework **can** be associated with a test case. +* Unit tests that use the.NET Core framework **cannot** be + associated with a test case. +* Tests that use other test frameworks such as xUnit, nUnit, + Chutzpah, and others **cannot** be associated with a test case. +* Associating ordered tests and generic tests **may** work, but running these tests is not supported. + + +### Q: Can I configure work items to open in Visual Studio? + +**A**: Yes, if you want test work items to open inside Visual Studio +instead of the default VSTS or TFS UI in your web browser, +change the **Work Items | General** setting from the **Tools | Options** menu in Visual Studio. + +![Change work item display mode](_img/associate-automated-test-with-test-case/work-item-compatibility.png) + +---------------------------- + + +## Running automated tests from the Test hub + +### Q: Can I override the build or environment set at the test plan level for a specific instance of test run? + +**A:** Yes, you can do this using the **Run with options** command. +Open the shortcut menu for the test suite in the left column and choose +**Run with options**. + +![Configuring the Run with options dialog](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-08.png) + +Enter the following values in the Run with options dialog and then choose **OK**: + +* **Test type and runner**: Select **Automated tests using Release environment**. + +* **Build**: Select the build that has the test binaries. The test results will be associated this build. + +* **Release Definition**: Select a definition from the list of release definitions that can consume the selected build artifact. + +* **Release Environment**: Select the name of the environment configured in your release definition.

    + +![Configuring the Run with options dialog](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-09a.png) + +### Q: Why use release environments to run tests? + +**A:** Release Management offers a compelling orchestration workflow +to obtain test binaries as artifacts and run tests. This workflow shares +the same concepts used in the scheduled testing workflow, meaning users +running tests in scheduled workflow will find it easy to adapt; for +example, by cloning an existing scheduled testing release definition. + +Another major benefit is the availability of a rich set of tasks in +the task catalog that enable a range of activates to be performed before +and after running tests. Examples include preparing and cleaning test data, +creating and cleaning configuration files, and more. + + +### Q: How does selecting "Test run" in the Visual Studio Test task version 2 work? + +**A:** The Test management sub-system uses the test run object to +pass the list of tests selected for execution. The test task looks +up the test run identifier, extracts the test execution information +such as the container and test method names, runs the tests, updates +the test run results, and sets the test points associated with the +test results in the test run. From an auditing perspective, the +Visual Studio task provides a trace from the historical releases +and the test run identifiers to the tests that were submitted for +on-demand test execution. + + +### Q: Should the agent run in interactive mode or as a service? + +**A:** If you are running UI tests such as +[coded UI](https://docs.microsoft.com/en-us/visualstudio/test/use-ui-automation-to-test-your-code) +or [Selenium](continuous-test-selenium.md) tests, +the agent on the test machines must be running in interactive mode, +not as a service, to allow the agent to launch a web browser. +If you are using a headless browser such as [PhantomJS](http://phantomjs.org/), +the agent can be run as a service or in interactive mode. See +[Build and Release Agents](../../build-release/concepts/agents/agents.md), +[Deploy an agent on Windows](../../build-release/actions/agents/v2-windows.md), +and [Agent pools and queues](../../build-release/concepts/agents/pools-queues.md). + +### Q: Where can I find detailed documentation on how to run Selenium tests? + +**A:** See [Get started with Selenium testing](continuous-test-selenium.md). + +### Q: What happens if I select multiple configurations for the same test? + +**A:** Currently, the on-demand workflow is not configuration-aware. +In future releases, we plan to pass configuration context to the test +method and report the appropriate results. + +### Q: What if I need to download product binaries and test binaries from different builds? Or if I need to obtain artifacts from a source such as Jenkins? + +**A:** The current capability is optimized for a single team build +to be tested on-demand using a Release Management workflow. +We will evaluate support for multi-artifact releases, including +non-Team Build artifacts such as Jenkins, based on user feedback. + +### Q: I already have a scheduled testing release definition. Can I reuse the same definition to run test on-demand, or should I create a new definition as shown above? + +**A:** We recommend you use a separate release definition and environment for on-demand automated testing from the **Test** hub because: + +* You may not want to deploy the app every time you want to run a few on-demand tests. +Scheduled testing environments are typically set up to deploy the product and then run tests. + +* New releases are triggered for every on-demand run. If you have many +testers executing a few on-demand test runs every day, your scheduled +testing release definition could be overloaded with releases for these +runs, making it difficult to find releases that were triggered for the +pipeline that contains scheduled testing and deployment to production. + +* You may want to configure the Visual Studio Test task with a Test run +identifier as an input so that you can trace what triggered the release. +See [How does selecting "Test run (for on-demand runs)" in the Visual Studio Test task work?](#faq-ondemandruns). + +### Q: Can I trigger these runs and view the results in Microsoft Test Manager? + +**A:** No. MTM will not support running automated tests against Team Foundation +builds. It only works in the web-based interface for VSTS and TFS. +All new manual and automated testing product development investments will be +in the web-based interface. No further development is planned for MTM. See +[Guidance on Microsoft Test Manager usage](../../manual-test/mtm/guidance-mtm-usage.md). + +### Q: I have multiple testers in my team. Can they run tests from different test suites or test plans in parallel using the same release definition? + +**A:** They can use the same release definition to trigger multiple +test runs in parallel if: + +* The agent pool associated with the environment has sufficient agents +to cater for parallel requests. If sufficient agents are not available, +runs can still be triggered but releases will be queued for processing +until agents are available. + +* You have sufficient concurrent pipelines to enable concurrent releases. +See [Concurrent pipelines in VSTS](../../build-release/concepts/licensing/concurrent-pipelines-ts.md) +or [Concurrent pipelines in TFS](../../build-release/concepts/licensing/concurrent-pipelines-tfs.md) for more information. + +* Testers do not run the same tests in parallel. Doing so may cause +results to be overwritten depending on the order of execution. + +To enable multiple different test runs to execute in parallel, set the Release Management +environment trigger option for +[behavior when multiple releases are waiting to be deployed](../../build-release/concepts/definitions/release/triggers.md#env-triggers) +as follows: + +* If your application supports tests running in parallel from different +sources, set this option to +**Allow multiple releases to be deployed at the same time**. + +* If your application does not support tests running in parallel +from different sources, set this option to +**Allow only one active deployment at a time**. + + +### Q: What are the typical error scenarios or issues I should look out for if my tests don't run? + +**A:** Check and resolve issues as follows: + +* The release definition and environment in which I want to run tests + are not shown after I select the build. + - Make sure the build definition that is generating the build is linked + as the primary artifact in the **Artifacts** tab of the release definition.

    + +* I get an error that I don't have sufficient permission to trigger a release. + - Configure **Create releases** and **Manage deployments** permissions for + the user in the **Security** menu of the release definition. + See [Release permissions](../../build-release/concepts/policies/permissions.md#release-permissions).

    + +* I get an error that no automated tests were found. + - Check the automation status of the selected tests. Do this in the work item + for the test case, or use the **Column options** link in the **Test Plans** + page of the **Test** hub to add the **Automation status** column to the list + of tests. See the [pre-requisites section](run-automated-tests-from-test-hub.md#prerequisites) for information + about automating manual tests.

    + +* My tests didn't execute, and I suspect the release definition is incorrect. + - Use the link in the **Run summary** page to access the release instance + used to run the tests, and view the release logs.

    + +* My tests go into the error state, or remain "in-progress" even after release to the environment is triggered. + - Check if the release environment that you selected has the correct task + and version selected. You must use version 2 or higher of the **Visual Studio + Test** task. Version 1 of the task, and the **Run Functional Tests** task, + are not supported.

    + + diff --git a/docs/build-release/test/review-continuous-test-results-after-build.md b/docs/build-release/test/review-continuous-test-results-after-build.md new file mode 100644 index 00000000000..db81e33bdf7 --- /dev/null +++ b/docs/build-release/test/review-continuous-test-results-after-build.md @@ -0,0 +1,72 @@ +--- +title: Review continuous test results after a build VSTS and TFS +description: Review continuous test results after a build +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 9A38578C-3310-4DE3-949F-C302AB545C10 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Review continuous test results after a build + +[!INCLUDE [version-header-vs-vsts-tfs](_shared/version-header-vs-vsts-tfs.md)] + +After your build finishes running continuous tests using Visual Studio Team Services (VSTS) or Team Foundation Server (TFS), +review your test results to start analyzing any problems that you found. + + +## Review your test results + +1. In VSTS or TFS, go to your team project. + +1. Find your build and open the build summary. + + ![Go to Build hub, build definition, build summary](_img/review-continuous-test-results-after-build/open-summary.png) + +1. Review the summary for your test run results. + Here you'll find changes in new, failed, and passed tests, + how long these tests took to run, how long these tests have been failing, and more. + + ![View test run results summary](_img/test-results-summary.png) + + +## Organize your test results + +* Organize your test results using the group and outcome lists. + + ![Organize your test results](_img/organize-test-results.png) + + +## Debug failed tests + +1. To start debugging a failed test, review the resulting error and stack trace. + + ![Error and stack trace for a failed test](_img/review-continuous-test-results-after-build/build-error-message.png) + +1. To trace the results of a test across builds, view the test history. + + ![Open the test history page](_img/review-continuous-test-results-after-build/test-history-01.png) + +1. In the history page, review when a test started to pass or fail. + + ![Viewing the test history across builds](_img/review-continuous-test-results-after-build/test-history-02.png) + + Group the list of results using the drop-down list. + Mouse over a bar in the chart to see a pop-up summary, or select + a bar to view the detailed test results for that build. + + +## View tests in the Release hub + +* Test results are also summarized in the release summaries in the **Release** hub. + Choose any of the percentage values to see the full summary in the **Test** hub. + + ![Test result summary in Release hub](_img/review-continuous-test-results-after-build/release-test-results-01.png) + +## Next step + +> [!div class="nextstepaction"] +> [Run automated tests from test plans in the Test hub](run-automated-tests-from-test-hub.md) diff --git a/docs/build-release/test/run-automated-tests-from-test-hub.md b/docs/build-release/test/run-automated-tests-from-test-hub.md new file mode 100644 index 00000000000..1f459e618a6 --- /dev/null +++ b/docs/build-release/test/run-automated-tests-from-test-hub.md @@ -0,0 +1,194 @@ +--- +title: Run automated tests from test plans in the Test hub VSTS and TFS +description: Run automated tests on-demand against Team Foundation builds from test plans in the Test hub +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 2886C58B-0F4B-4C0C-A248-3980CA629FD8 +ms.manager: douge +ms.author: ahomer +ms.date: 21/03/2017 +--- + +# Run automated tests from test plans in the Test hub + +**VSTS | TFS 2017 Update 2** + +Automate test cases in your test plans and run them directly from the **Test** hub: + +* Provides a user-friendly process for testers who may not be well + versed with running tests in Build or Release workflows. + +* Gives you the flexibility to run selected tests on demand, + rather than scheduled testing in Build or Release workflows + where all tests meeting the filter criteria are run. + +* Useful when you want to rerun a few tests that failed due + to test infrastructure issues, or you have a new build that + includes fixes for failed tests. + + +You will need: + +* A [test plan](../../manual-test/getting-started/create-a-test-plan.md) + containing your automated tests, which you have associated with automated test methods using + [Visual Studio 2017](associate-automated-test-with-test-case.md), + or [Visual Studio 2015 or earlier](https://msdn.microsoft.com/en-us/library/dd380741%28v=vs.120%29.aspx). + +* A [Team Build definition](../../build-release/apps/windows/dot-net.md) + that generates builds containing the test binaries. + +* The app to test. You can deploy the app as part of the + [scheduled test workflow](example-continuous-testing.md) and also use it for on-demand testing. + For information about setting up scheduled testing that also deploys the app, see + [this blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2017/03/26/vstest-task-dons-a-new-avatar-testing-with-unified-agents-and-phases/). + +## Set up your environment + +1. In the **Test plans** tab of the **Test** hub, choose your test plan, + open the shortcut menu, and choose **Test plan settings**. + + ![Choosing Test plan settings](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-101.png) + +1. In the Test plan settings dialog, select the build definition that generates builds which + contain the test binaries. You can then select a specific build number to test, or let the + system automatically use the latest build when tests are run. + + ![Selecting the build and build number](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-102.png) + +1. You will need a release definition that was created from the + **Run automated tests from Test Manager** template to run tests from test plans + in the **Test** hub. If you have an existing release definition that was created + using this template, select it and then select the existing environment in the + release definition where the tests will be executed. + Otherwise, choose the **Create new** link in the + dialog to create a new release definition containing a single environment + with the **Visual Studio Test** task already added. + + ![Selecting a release definition or creating a new one](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-102a.png) + +1. To configure the **Visual Studio Test** task and the release definition, + start by assigning meaningful names to the release definition and environment. + Then select the **Visual Studio Test** task and configure it as follows: + + * Verify that version 2 of the Visual Studio Test task is selected. + The version number is shown in the drop-down list at the top left + of the task settings panel. + + ![Checking the task version number setting](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-03.png) + + * Verify that **Select tests using** is set to **Test run**. + [What does this setting mean?](reference-qa.md#faq-ondemandruns) + + ![Checking the test selection method setting](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-02.png) + + * If you have UI tests that run on real browsers or thick clients, + set (tick) the **Test mix contains UI tests** checkbox. This is not + required if you are running UI tests on a headless browser. + + * Select how is the test platform is provisioned, and the version of + Visual Studio or the location of the test platform that is installed + on the test machines + + * If your tests need input parameters such as app URLs or database + connection strings, select the relevant settings file from the + build artifacts. You can use the **Publish build artifacts** tasks + in you build definition to publish the settings file in a drop + location if this file is not included in the artifacts. + In the example shown below, the application URL is exposed in the + run settings file, and is overridden to set it to a staging URL + using the **Override test run parameters** setting. + + ![Specifying the properties for the Visual Studio Test task](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-06.png) + +1. Choose the **Agent phase** item and verify that the deployment queue + is set to the one containing the machines where you want to run the + tests. If your tests require special machines from the agent pool, + you can add demands that will select these at runtime. + + ![Specifying the properties for the Agent phase](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-04.png) + + You may be able to minimize test times by distributing tests across multiple + agents by setting **Parallelism** to **Multiple executions** and specifying the number of agents. + [More details](test-with-unified-agent-and-phases.md). + + > **Note**: If you are running UI tests such as CodeUI or Selenium + on physical browsers such as IE, Firefox, or Chrome, the agent + on the machines must be running in interactive mode and not + as a service. [More details](reference-qa.md#faq-agentmode). + +1. In the **Pipeline** tab of the release definition, verify + that the build definition containing the test binaries is linked + to this release definition as an artifact source. + + ![Verifying the linked build artifacts](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-106.png) + +1. Save the release definition. + +1. If you chose **Create new** in the Test plan settings dialog in step 2 + of this example, return to the browser tab containing your test plan + settings. In the Test plan settings dialog, select the release definition + and environment you just saved. + + ![Selecting the release definition and environment](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-107.png) + +## Run the automated tests + +1. In the **Test** hub, open the test plan and select a test suite that contains the + automated tests. + +1. Select the test(s) you want to run, open the **Run** menu, + and choose **Run test**. + + ![Selecting Run test](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-108.png) + + The test binaries for these tests must be available + in the build artifacts generated by your build definition. + +1. Choose **OK** to start the testing process. The system checks that only + automated tests are selected (any manual tests are ignored), + validates the environment to ensure the Visual Studio Test + task is present and has valid settings, checks the user's + permission to create a release for the selected release + definition, creates a test run, and then triggers the creation + of a release to the selected environment. + + ![Starting the test execution](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-109.png) + +1. Choose **View test run** to view the test progress and analyze + the failed tests. Test results have the relevant information + for debugging failed tests such as the error message, stack trace, + console logs, and attachments. + +1. After test execution is complete, the **Runs** tab of the + **Test** hub shows the test results. The **Run summary** page + shows an overview of the run. + + ![Viewing the test run summary](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-110.png) + + There is a link to the **Release** used to run the tests, which + makes it easy to find the release that ran the tests if you need + to come back later and analyze the results. Also use this link if you + want to open the release to view the release logs. + + [What are the typical error scenarios or issues I should look out for if my tests don't run?](reference-qa.md#faq-errors) + +1. The **Test results** page lists the results for each test in the + test run. Select a test to see debugging information for failed + tests such as the error message, stack trace, console logs, and attachments. + + ![Viewing the test results details](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-111.png) + +1. Open the **Test Plans** page and select the test plan to see the status + of your tests if tests are updated after test execution is complete. + Select a test to see the recent test results. + + ![Viewing the test plan](_img/run-automated-tests-from-test-hub/run-auto-tests-from-hub-112.png) + +## See Also + +* [Associate automated tests with test cases](associate-automated-test-with-test-case.md) +* [Associate automated test results with requirements](associate-automated-results-with-requirements.md) +* [Test with unified agents and phases](test-with-unified-agent-and-phases.md) +* [Continuous testing scenarios and capabilities](index.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/build-release/test/set-up-continuous-test-environments-builds.md b/docs/build-release/test/set-up-continuous-test-environments-builds.md new file mode 100644 index 00000000000..bf28085b835 --- /dev/null +++ b/docs/build-release/test/set-up-continuous-test-environments-builds.md @@ -0,0 +1,87 @@ +--- +title: Set up environments to run continuous tests with your builds +description: Set up environments to run continuous test tasks with your build tasks VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: FFD51F1E-C3B7-4FAC-B25D-95ADD6C1A1A0 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Set up environments to run continuous test tasks with your build tasks + +[!INCLUDE [version-header-ts-tfs](_shared/version-header-ts-tfs.md)] + +To test your app using different platforms and configurations, +set up separate environments to run your app and tests with your +builds in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS). + +## Set up machines to run your app and tests + +You'll need to set up physical or virtual machines to run your app and tests, for example: + +* Windows Server 2012 R2 with IIS to run your app + +* Machines with the necessary browsers to run your tests + +With VSTS, you can define environments that have physical and virtual machines, such as Azure VMs and Azure resource groups. With TFS, you can define environments using only physical machines. + +If you want to use a PowerShell script to deploy your app, make sure to: + +* Include that script in your solution or project. + +* Enable PowerShell Remote on all your machines. + +You'll need to install the agent that runs your tests on the machines. For more details, see +[Deploy a Windows build agent](../../build-release/actions/agents/v2-windows.md). +You might decide to [create Azure VMs](https://docs.microsoft.com/azure/virtual-machines/windows/quick-create-portal) +to install your agents. + +## Define a list of machines to run your app and tests + +Previous versions of VSTS and TFS included the capability to define +**Machine Groups**. However, this feature has been deprecated and it is no longer +possible to use it to create machine groups. + +As an alternative, you can use: + +* A **comma-delimited list** of machine IP addresses or + fully-qualified domain names (FQDNs), together with any port information, + in all your build or release definitions. For example: + + `dbserver.fabrikam.com,dbserver_int.fabrikam.com:5986,192.168.12.34:5986` + +* A variable that contains the list of machines. For example, a + [build or release definition variable](../../build-release/concepts/definitions/release/variables.md) + or a variable defined within a project-wide + [variable group](../../build-release/concepts/library/variable-groups.md). For example, you could define the variable + named **MyMachines** with the value shown above, then include it in + your tasks using: + + `$(MyMachines)` + + Using a variable means that you can change the list of machines in one place + and have the change apply to all the tasks that use the variable. + +>If you don't specify a port number, the default (based on the selected protocol) +will be used. If you are using HTTPS, the IP address or name of the machine should +match the CN entry in the certificate. Note that you can set the **Test +Certificate** option in some build, test, and deploy tasks to omit certificate checks. + +You will typically use a list of machine names in the following tasks: + +* [Run Functional Tests task](../../build-release/tasks/test/run-functional-tests.md) +* [Visual Studio Test Agent Deployment task](../../build-release/tasks/test/visual-studio-test-agent-deployment.md) +* [PowerShell on Target Machines task](../../build-release/tasks/deploy/powershell-on-target-machines.md) + +## Next + +* [Set up continuous tests for your builds](set-up-continuous-testing-builds.md). + +## See also + +* [Run tests with your builds](getting-started-with-continuous-testing.md) +* [Review continuous test results after a build](review-continuous-test-results-after-build.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/build-release/test/set-up-continuous-testing-builds.md b/docs/build-release/test/set-up-continuous-testing-builds.md new file mode 100644 index 00000000000..02f761eb8d8 --- /dev/null +++ b/docs/build-release/test/set-up-continuous-testing-builds.md @@ -0,0 +1,121 @@ +--- +title: Set up continuous testing for your builds +description: Set up continuous testing for your builds in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 7849EF41-BE1A-4342-B1DA-583DB6DD1831 +ms.manager: douge +ms.author: ahomer +ms.date: 06/15/2017 +--- + +# Set up continuous testing for your builds + +[!INCLUDE [version-header-ts-tfs](_shared/version-header-ts-tfs.md)] + +Find problems early after changes are checked in and built by running continuous tests using Visual Studio Team Services (VSTS) or Team Foundation Server (TFS). + +Before you start: + +* [Create a build definition](../../build-release/overview.md) that builds your solution after each check-in, using continuous integration. + +* [Set up environments](set-up-continuous-test-environments-builds.md) to run your app and tests remotely in a distributed environment after each build. + +## Step 1: Set up app deployment for your build + +1. In VSTS or TFS, go to your team project. + +1. Go to your build definition. Add steps to deploy your app for testing. For example, if you're testing a Visual Studio solution: + + ![Edit build definition](_img/edit-build-definition.png) + + ![Add a step to your build definition](_img/set-up-continuous-testing-builds/add-build-step.png) + + ![Add File Copy and PowerShell steps](_img/set-up-continuous-testing-builds/add-file-copy-powershell-steps.png) + +1. Add the details to copy your app from its drop location to its test environment: + + * Source folder for your app + + * List of machines where you want to deploy your app + + * Credentials to connect to the target machines + + * Target folder where to put your app + + ![Build definition, copy app details](_img/set-up-continuous-testing-builds/copy-app-test-environment.png) + + > If you use the list of machines in more than one task, consider defining + a variable that contains the list of machines. For example, a + [build or release definition variable](../../build-release/concepts/definitions/release/variables.md) + or a variable defined within a project-wide + [variable group](../../build-release/concepts/library/variable-groups.md). + Using a variable means that you can change the list of machines in one place + and have the change apply to all the tasks that use the variable. + +1. Add the details to deploy your app using PowerShell: + + * List of machines where you want to deploy your app + + * Credentials to connect to the target machines + + * Path to the PowerShell script used to deploy your app + + ![Add step to deploy app with PowerShell](_img/set-up-continuous-testing-builds/run-powershell-details.png) + +1. Save your build definition. + + ![Build definition: save](_img/set-up-continuous-testing-builds/save-build-definition.png) + +## Step 2: Set up test deployment for your build + +1. In your build definition, add a step with these details to deploy your tests: + + * Source folder for your tests + + * List of machines where you want to run your tests + + * Credentials to connect to the target machines + + * Target folder where to put your tests + + ![Build definition, copy tests](_img/set-up-continuous-testing-builds/copy-tests.png) + +1. Add a step with these details to deploy the test agent for running your tests: + + * List of machines where you want to deploy the test agent + + * Credentials to connect to the target machines + + * Credentials for the deployment agents, so the test agent can run in your test environment + + ![Build definition: deploy test agent details](_img/set-up-continuous-testing-builds/deploy-test-agent.png) + +1. Save your build definition. + + ![Build definition: save](_img/set-up-continuous-testing-builds/save-build-definition.png) + +## Step 3: Set up your tests to run with your build + +1. In your build definition, add a step with these details to run your tests with the test agent: + + * List of machines where you want to run your tests + + * Folder where you put your tests + + ![Build definition: Run tests with test agent](_img/set-up-continuous-testing-builds/run-tests-with-test-agent.png) + +1. Save your build definition and queue a build to check your test run. + + ![Build definition: queue build](_img/queue-build.png) + +1. After your build is done, [review your test results](review-continuous-test-results-after-build.md). + +## See also + +* [Set up environments for continuous testing with your builds](set-up-continuous-test-environments-builds.md) +* [Review continuous test results after a build](review-continuous-test-results-after-build.md) +* [Run tests with your builds](getting-started-with-continuous-testing.md) +* [End-to-end example of continuous testing](example-continuous-testing.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/build-release/test/test-build.md b/docs/build-release/test/test-build.md new file mode 100644 index 00000000000..4f4f2b96217 --- /dev/null +++ b/docs/build-release/test/test-build.md @@ -0,0 +1,15 @@ +--- +title: Run tests with your builds | VSTS and Team Foundation Server +description: Run tests with your builds for continuous integration +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: AC41DC40-0843-47A1-B82E-5C3EACB2C434 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Run tests with your builds for continuous integration + +See the [new version of this topic](getting-started-with-continuous-testing.md). + diff --git a/docs/build-release/test/test-with-unified-agent-and-phases.md b/docs/build-release/test/test-with-unified-agent-and-phases.md new file mode 100644 index 00000000000..48a3c57330e --- /dev/null +++ b/docs/build-release/test/test-with-unified-agent-and-phases.md @@ -0,0 +1,233 @@ +--- +title: Test with unified agents and phases +description: Manual and exploratory testing. Test with unified agents and phases in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: CAA3900B-1939-41B8-871B-FF0E99DC3E5A +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Testing with unified agents and phases + +[!INCLUDE [version-header-ts-tfs](_shared/version-header-ts-tfs.md)] + +Version 2 of the **Visual Studio Test** task uses the unified Build and Release +agent, instead of a different custom agent as was the case with version 1. +The new version of the task also integrates intelligently with +[task phases](../../build-release/concepts/process/phases.md). +This topic explores how you can use this task, and explains how +it works in a range of scenarios. + +You select the [specific version](../../build-release/concepts/process/tasks.md#task-versions) +of a task you want to use in the **Version** list at the top +of the task properties pane. Use the **i** icon to show more information about the task or +a selected property setting. + +![Selecting a specific version of a task](_img/test-with-unified-agent-and-phases/v2task.png) + +## Advantages of using the unified agent + +* You no longer need to use dedicated machines for testing (as was required by the **Run Functional Tests** task). + With the unified agent, you can leverage the common agent pool. + Administrators can set up a reusable pool of machines, making management much easier. + +* You can use the unified agent for single machine as well multi-machine distributed execution. + +* You no longer need the **Visual Studio Test Agent Deployment** task step. + This task is based on WinRM, which imposes several limitations. + +* You no longer need any "copy files" task steps because all execution is now local to the + automation agent, and task phases download the artifacts to the target machines automatically. + There is no requirement to copy test assemblies and their dependencies when running tests remotely + using the **Run Functional Tests** task. + +## How test tasks run in phases + +You can add [different types of phases](../../build-release/concepts/process/phases.md) +to a release definition. The properties of these phases include settings for +**Parallelism**. + +![Selecting a mode to run tasks on multiple agents in parallel](_img/test-with-unified-agent-and-phases/agent-phase-settings.png) + +The following sections describe how this setting affects the operation +of the **Visual Studio Test** and **Run Functional Tests** tasks. +For a full description of the operation for all tasks, see +[Parallel execution using agent phases](../../build-release/concepts/process/phases.md#parallelexec). + +### No parallelism + +A single agent from the specified queue will be allocated to this phase. +This is the default, and all tasks in the phase will run on that agent. +The **Visual Studio Test** task runs in exactly the same way as version +1 with single agent test execution. + +For example, you could deploy an Azure web app and run a small number +of quick tests on it (for which a single agent is sufficient), along +with some pre- and post-test setup and cleanup activities, using an +environment configured as follows: + +![Configuring tasks for no parallelism to deploy and test an Azure web app](_img/test-with-unified-agent-and-phases/single-phase-env.png) + +### Multiple executions + +This mode is driven by 'multipliers', in much the same way as a multi-configuration Build or Release. +You define the multipliers as variables. Based on the values for these variables, the various configurations +are run. + +In the case of Build, you typically use **BuildPlatform** and **BuildConfiguration** as multipliers. +The same logic applies to testing. For example, you could deploy a web app to Azure and run +cross-browser tests on IE and Firefox by configuring an environment to use two phases - one +for the deploy phase and one for the test phase: + +![Configuring the release definition with two phases for multiple executions testing](_img/test-with-unified-agent-and-phases/multiconfig.png) + +The test phase is set up as a multiple executions process using a variable named **Browser**, which +has the values `IE` and `Firefox`. The phase will run twice using these two configurations - one +agent is assigned the value `IE` for its **Browser** variable, and one with the value `Firefox`. + +![Specifying the multipliers for multiple executions testing](_img/test-with-unified-agent-and-phases/multipliers1.png) + +![Defining the multiplier variable for multiple executions testing](_img/test-with-unified-agent-and-phases/multipliers2.png) + +In the tasks for the environment, the **Browser** value could be used to instantiate the appropriate +browser for the tests. For example, you might pass the values as **Test Run Parameters** and access them +using **TestContext** in the test code. You could also use the values to provide appropriate titles +for your test runs so that, if a test fails in a particular configuration, you can easily tell which run it came from. + +![Configuring the test task parameters for multiple executions testing](_img/test-with-unified-agent-and-phases/multiconfig-task-settings.png) + +The execution results might look like this: + +![Results in release for multiple executions testing](_img/test-with-unified-agent-and-phases/multiconfig-logs.png) + +### Multiple agents + +Multiple agents will be allocated to the phase. You specify the number of agents to be allocated +from the pool, and the set of tasks in that phase will be distributed across all these agents. + +![Configuring the number of agents for multiple agents parallelism](_img/test-with-unified-agent-and-phases/multi-agent.png) + +In this mode, the Visual Studio Test task runs in a special way. It recognizes that its a multiple agents +phase, and runs tests in a distributed manner across all the allocated agents. Because other tasks run +across all agents, any pre- and post-test steps also run equally on all the agents. Therefore, all the +agents are prepared and cleaned up in a consistent manner. +In addition, test execution does not require all agents to be available at the same time. If some agents +are busy with another release or build, the phase can still start with the available number of agents +that match the demand, and test execution starts. As additional agents become available, they can pick +up any remaining tests that have not yet run. + +For example, the log from a multiple agents test run, where some tests have failed, might look like this: + +![Results in release when running three agents in parallel](_img/test-with-unified-agent-and-phases/multi-agent-test-run.png) + +Artifacts are automatically downloaded when the phase starts, so the test assemblies and other files +are already located on the agent, and no "copy files" task is required. So, to publish an Azure web app +and run a large number of tests with fast test execution, you could model the environment as two phases - +one being the deploy phase (which runs on a single agent because you don't want multiple agents to deploy +the same app concurrently), and the other a test phase that uses multiple agents mode to achieve test distribution. + +This also means that you can use different agent queues for the two phases, allowing you to manage agents +for different purposes separately if required. + +![Configuring the release definition with two phases for distributed tests](_img/test-with-unified-agent-and-phases/distributed-tests.png) + +## FAQs + + +### Q: How do I do this with Build? + +**A**: The phases capability is currently available only in Release Management. It will become available in Build soon. + + +### Q: Does the Visual Studio Test version 1 task behave the same way as the version 2 task? + +**A**: No, the version 1 task cannot be used for test distribution. On the single agent (the default, +no parallelism) setting, the task will run in the same way as on the previous test agent. In the +multiple executions and multiple agents modes, it is replicated on the agents, in the same way as all other tasks. + + +### Q: What is required to run UI tests? + +**A**: To run UI tests, you must run the agent in [interactive mode](../../build-release/concepts/agents/agents.md#account). +Agents set to run as a service cannot run UI tests. +However, at present, interactive agents will be stopped if the machine reboots for any reason. +Enhancements to the agent to survive reboots in interactive mode will be implemented in the future. + +Also disable any screensaver and unlock the machine so that UI actions in the test are not blocked. +Automatic configuration of agents to do this will be implemented in the future. + + +### Q: Can I run UI tests on the hosted agents? + +**A**: No, running UI tests on the [hosted agents](../../build-release/concepts/agents/agents.md#hosted-agents) is not possible at present. + + +### Q: What does the 'Test mix contains UI tests' checkbox do? + +**A**: Currently, it is there only as a reminder to run agents interactively +if you are running UI tests. If you are using an agent pool with a mix of +interactive and 'running as service' agents, you may also want to add an +'Interactive' capability to your agents demand that in your test phase +to ensure the appropriate set of agents that can run UI tests are used. +See [Build and Release agent capabilities](../../build-release/concepts/agents/agents.md#capabilities). + + +### Q: In multiple executions mode, do I get distribution of tests as well? + +**A**: No, multiple executions mode assigns only one agent per configuration. + + +### Q: How do I map the configuration in multiple executions mode to my Test Configurations using tcm.exe? + +**A**: Currently this is not possible. + + +### Q: How else can I use multiple executions mode? + +**A**: This mode can be used whenever you need multiple agents to execute jobs in parallel. +For more examples, see [Parallel execution using agent phases](../../build-release/concepts/process/phases.md#parallelexec). + + +### Q: Has the Run Functional Tests task also changed? + +**A**: No, the Run Functional Tests (RFT) task has not changed. If you are using this task +you _do_ need the **Deploy Test Agent** task step. Note that, because tasks are replicated +in the multiple agents and multiple executions mode, using the Run Functional Tests task in this +mode will lead to undesirable effects. + + +### Q: Do I need to install Visual Studio on all the machines to use the Visual Studio Test version 2 task? + +**A**: Currently, yes. An alternate means for running tests without requiring Visual Studio +on the agent machine is under consideration, which will allow you to create a separate pool +of agents for testing purposes. + + +### Q: I am using my own test runner (not the Visual Studio Test task) in the pipeline. What happens to it? + +**A**: In the multiple agents and multiple executions mode, the task will be replicated on each +of the agents. You can use the multiple executions mode to partition your tests on different +configuration using the configuration variable. For example, if you have a configuration variable +named **Platform** that has values `x86` and `x64`, you can run the two sets of tests on two +agents in parallel by referring to your test assemblies using `**\$(Platform)\*test*.dll` + + +### Q: How does the Visual Studio Test version 2 task run on deployment groups? + +**A**: Yes, the task can be used to run on [deployment groups](../../build-release/concepts/definitions/release/deployment-groups/index.md). + +If you have scenarios that necessitate running tests on machines in the deployment group +where the app is deployed, you can use the Visual Studio Test version 2 task. +If multiple machines are selected (using, for example, tags) in a **Run on Deployment Group** +phase, the tests will be replicated to each of the machines. + +## See Also + +* [Associate automated tests with test cases](associate-automated-test-with-test-case.md) +* [Associate automated test results with requirements](associate-automated-results-with-requirements.md) +* [Run automated tests from test plans in the Test hub](run-automated-tests-from-test-hub.md) +* [Continuous testing scenarios and capabilities](index.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/build-release/test/toc.yml b/docs/build-release/test/toc.yml new file mode 100644 index 00000000000..ee345767230 --- /dev/null +++ b/docs/build-release/test/toc.yml @@ -0,0 +1,52 @@ +- name: Continuous Testing + href: index.md +- name: Overview + items: + - name: About continuous testing + href: overview.md + - name: About CI/CD + href: ../overview.md +- name: Quickstarts + items: + - name: Test with builds + href: getting-started-with-continuous-testing.md + - name: Selenium testing + href: continuous-test-selenium.md + - name: Review test results + href: review-continuous-test-results-after-build.md +- name: Tutorials + items: + - name: Test your app + href: example-continuous-testing.md +- name: How-to Guides + items: + - name: Set up continuous testing + href: set-up-continuous-testing-builds.md + - name: Run tests from the Test hub + href: run-automated-tests-from-test-hub.md + - name: Associate tests with test cases + href: associate-automated-test-with-test-case.md + - name: Associate results with requirements + href: associate-automated-results-with-requirements.md +- name: Reference + items: + - name: Unified agents and phases + href: test-with-unified-agent-and-phases.md + - name: Test Java applications + href: continuous-test-java.md + - name: Set up environments + href: set-up-continuous-test-environments-builds.md + - name: FAQs + href: reference-qa.md +- name: Resources + items: + - name: DevOps Rangers + href: https://vsartestreleaseguide.codeplex.com/ + - name: Plug-ins for Visual Studio + href: http://go.microsoft.com/fwlink/?LinkID=246630 + - name: Manual and exploratory testing + href: ../../manual-test/index.md + - name: Load and performance testing + href: ../../load-test/index.md + - name: Unit testing + href: https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios diff --git a/docs/build-release/toc.yml b/docs/build-release/toc.yml new file mode 100644 index 00000000000..bd41031d691 --- /dev/null +++ b/docs/build-release/toc.yml @@ -0,0 +1,372 @@ +- name: Build and Release + href: index.md +- name: Overview + items: + - name: About Build and Release + href: overview.md + - name: About Deploying to Azure + href: overview-azure.md +- name: Quickstarts + items: + - name: Build your app + items: + - name: ASP.NET Core + href: apps/aspnet/build-aspnet-core.md + - name: ASP.NET Core Container + href: apps/aspnet/build-aspnet-core-docker.md + - name: ASP.NET + href: apps/aspnet/build-aspnet-4.md + - name: .NET for Windows + href: apps/windows/dot-net.md + - name: Node.js + href: apps/nodejs/build-gulp.md + - name: Java + href: apps/java/build-maven.md + - name: C++ + href: apps/windows/cpp.md + - name: Xcode + href: apps/mobile/xcode-ios.md + - name: Xamarin + href: apps/mobile/xamarin.md + - name: Universal Windows Platform + href: apps/windows/universal.md + - name: Deploy your app + items: + - name: Azure Web App + href: apps/cd/azure/aspnet-core-to-azure-webapp.md + - name: Windows VM + href: apps/cd/deploy-webdeploy-iis-deploygroups.md + - name: Web App for Containers + href: apps/cd/deploy-docker-webapp.md + - name: Test your app + items: + - name: VS Test + href: test/getting-started-with-continuous-testing.md?toc=/vsts/build-release/toc.json +- name: Tutorials + items: + - name: CI builds for Git in VSTS + href: actions/ci-build-git.md + - name: Set up multi-stage release + href: actions/define-multistage-release-process.md +- name: Concepts + items: + - name: Agents + items: + - name: Build and release agents + href: concepts/agents/agents.md + - name: Agent pools and queues + href: concepts/agents/pools-queues.md + - name: Hosted agents + href: concepts/agents/hosted.md + - name: Deployment groups + href: concepts/definitions/release/deployment-groups/index.md + - name: Definitions + items: + - name: Build + items: + - name: Artifacts + href: concepts/definitions/build/artifacts.md + - name: History + href: concepts/definitions/build/history.md + - name: Options + href: concepts/definitions/build/options.md + - name: Repository + href: concepts/definitions/build/repository.md + - name: Triggers + href: concepts/definitions/build/triggers.md + - name: Variables + href: concepts/definitions/build/variables.md + - name: Release + items: + - name: Release definitions + href: concepts/definitions/release/index.md + - name: Environments + href: concepts/definitions/release/environments.md + - name: Artifacts + href: concepts/definitions/release/artifacts.md + - name: Triggers + href: concepts/definitions/release/triggers.md + - name: Variables + href: concepts/definitions/release/variables.md + - name: Templates + href: concepts/definitions/release/env-templates.md + - name: Process + items: + - name: Tasks + href: concepts/process/tasks.md + - name: Phases + href: concepts/process/phases.md + - name: Conditions + href: concepts/process/conditions.md + - name: Releases + items: + - name: Releases and deployments + href: concepts/releases/index.md + - name: Work with release definitions + href: actions/work-with-release-definitions.md + - name: Create and deploy releases + href: actions/create-deploy-releases.md + - name: View and manage releases + href: actions/view-manage-releases.md + - name: Licensing + items: + - name: Pipelines in TFS + href: concepts/licensing/concurrent-pipelines-tfs.md + - name: Pipelines in VSTS + href: concepts/licensing/concurrent-pipelines-ts.md + - name: Library + href: concepts/library/index.md + items: + - name: Variable groups + href: concepts/library/variable-groups.md + - name: Task groups + href: concepts/library/task-groups.md + - name: Service endpoints + href: concepts/library/service-endpoints.md + - name: Secure files + href: concepts/library/secure-files.md + - name: Policies + items: + - name: Retention policies + href: concepts/policies/retention.md + - name: Permissions + href: concepts/policies/permissions.md +- name: How to + items: + - name: Deploy an agent + items: + - name: Windows + href: actions/agents/v2-windows.md + - name: Windows (TFS 2015) + href: actions/agents/v1-windows.md + - name: OSX + href: actions/agents/v2-osx.md + - name: Linux + href: actions/agents/v2-linux.md + - name: Configure TFS authentication + href: actions/agents/configure-tfs-authentication.md + - name: Build more app types + items: + - name: Azure Cloud Service + href: apps/aspnet/build-aspnet-cloudservice.md + - name: SQL Server Database + href: apps/aspnet/build-aspnet-dacpac.md + - name: Run a PowerShell script + href: actions/scripts/powershell.md + - name: Run Git commands + href: actions/scripts/git-commands.md + - name: Sign your Xcode app + href: apps/mobile/secure-certs.md + - name: Deploy to more targets + items: + - name: Azure web app + href: apps/cd/deploy-webdeploy-webapps.md + - name: Extend App Services deployments + href: apps/cd/howto-webdeploy-webapps.md + - name: Extend IIS Server deployments + href: apps/cd/howto-webdeploy-iis-deploygroups.md + - name: Azure cloud service + href: apps/cd/deploy-cloudservice-cloudservice.md + - name: Azure Government Cloud + href: concepts/library/government-cloud.md + - name: Azure Container Service (Kubernetes) + href: apps/cd/azure/deploy-container-kubernetes.md + - name: IIS servers (WinRM) + href: apps/cd/deploy-webdeploy-iis-winrm.md + - name: Azure SQL database (DACPAC) + href: apps/cd/deploy-dacpac-sqlpackage.md + - name: Azure SQL database (SQL scripts) + href: apps/cd/deploy-database-sqlscripts.md + - name: SCVMM + href: apps/cd/scvmm/configure-scvmm.md + - name: Run SCVMM scripts for managing VMs + href: apps/cd/scvmm/manage-vms-using-scvmm.md + - name: VMware + href: apps/cd/provision-vm-in-vmware.md + - name: Test your apps + items: + - name: Test as you build + href: test/index.md + - name: Use packages in CI/CD + items: + - name: NuGet + items: + - name: Restore from Package Management + href: packages/nuget-restore.md + - name: Publish to Package Management + href: packages/nuget-pack-publish.md + - name: Set up Jenkins + NuGet + href: packages/jenkins.md + - name: npm + items: + - name: Use Package Management + href: packages/npm.md + - name: Maven + items: + - name: Use Package Management + href: packages/maven.md + - name: Troubleshoot issues + items: + - name: Troubleshooting build + href: actions/troubleshooting.md + - name: Debug deployment issues + href: actions/debug-deployment-issues.md + - name: Troubleshoot Azure connections + href: actions/azure-rm-endpoint.md + - name: Migrate + items: + - name: Migrate from XAML builds + href: actions/migrate-from-xaml-builds.md +- name: Reference + href: tasks/index.md + items: + - name: Build tasks + items: + - name: .NET Core + href: tasks/build/dotnet-core.md + - name: Android build + href: tasks/build/android-build.md + - name: Android signing + href: tasks/build/android-signing.md + - name: Ant + href: tasks/build/ant.md + - name: CMake + href: tasks/build/cmake.md + - name: Gradle + href: tasks/build/gradle.md + - name: Grunt + href: tasks/build/grunt.md + - name: Gulp + href: tasks/build/gulp.md + - name: Index Sources & Publish Symbols + href: tasks/build/index-sources-publish-symbols.md + - name: Jenkins Queue Job + href: tasks/build/jenkins-queue-job.md + - name: Maven + href: tasks/build/maven.md + - name: MSBuild + href: tasks/build/msbuild.md + - name: Visual Studio Build + href: tasks/build/visual-studio-build.md + - name: Xamarin.Android + href: tasks/build/xamarin-android.md + - name: Xamarin.iOS + href: tasks/build/xamarin-ios.md + - name: Xcode Build + href: tasks/build/xcode-build.md + - name: Xcode Package iOS + href: tasks/build/xcode-package-ios.md + - name: Utility tasks + items: + - name: Archive files + href: tasks/utility/archive-files.md + - name: Batch script + href: tasks/utility/batch-script.md + - name: Command line + href: tasks/utility/command-line.md + - name: Copy and Publish Build Artifacts + href: tasks/utility/copy-and-publish-build-artifacts.md + - name: Copy Files + href: tasks/utility/copy-files.md + - name: cURL Upload Files + href: tasks/utility/curl-upload-files.md + - name: Delete Files + href: tasks/utility/delete-files.md + - name: Extract Files + href: tasks/utility/extract-files.md + - name: FTP Upload + href: tasks/utility/ftp-upload.md + - name: Install Apple Certificate + href: tasks/utility/install-apple-certificate.md + - name: Install Apple Provisioning Profile + href: tasks/utility/install-apple-provisioning-profile.md + - name: PowerShell + href: tasks/utility/powershell.md + - name: Publish Build Artifacts + href: tasks/utility/publish-build-artifacts.md + - name: Service Fabric PowerShell + href: tasks/utility/service-fabric-powershell.md + - name: Shell script + href: tasks/utility/shell-script.md + - name: Update Service Fabric App Versions + href: tasks/utility/service-fabric-versioning.md + - name: Xamarin license + href: tasks/utility/xamarin-license.md + - name: Test tasks + items: + - name: Cloud-based Apache JMeter Load Test + href: tasks/test/cloud-based-apache-jmeter-load-test.md + - name: Cloud-based Load Test + href: tasks/test/cloud-based-load-test.md + - name: Cloud-based Web Performance Test + href: tasks/test/cloud-based-web-performance-test.md + - name: Mobile Center Test + href: tasks/test/mobile-center-test.md + - name: Publish Code Coverage Results + href: tasks/test/publish-code-coverage-results.md + - name: Publish Test Results + href: tasks/test/publish-test-results.md + - name: Run Functional Tests + href: tasks/test/run-functional-tests.md + - name: Visual Studio Test + href: tasks/test/visual-studio-test.md + - name: Visual Studio Test Agent Deployment + href: tasks/test/visual-studio-test-agent-deployment.md + - name: Xamarin Test Cloud + href: tasks/test/xamarin-test-cloud.md + - name: Package tasks + items: + - name: CocoaPods + href: tasks/package/cocoapods.md + - name: npm + href: tasks/package/npm.md + - name: NuGet + href: tasks/package/nuget.md + - name: Xamarin Component Restore + href: tasks/package/xamarin-component-restore.md + - name: Deploy tasks + items: + - name: Azure App Service Deploy + href: tasks/deploy/azure-app-service-deploy.md + - name: Azure App Service Manage + href: tasks/deploy/azure-app-service-manage.md + - name: Azure CLI + href: tasks/deploy/azure-cli.md + - name: Azure Cloud Service Deployment + href: tasks/deploy/azure-cloud-service-deployment.md + - name: Azure File Copy + href: tasks/deploy/azure-file-copy.md + - name: Azure Key Vault + href: tasks/deploy/azure-key-vault.md + - name: Azure PowerShell + href: tasks/deploy/azure-powershell.md + - name: Azure Resource Group Deployment + href: tasks/deploy/azure-resource-group-deployment.md + - name: Azure SQL Database Deployment + href: tasks/deploy/azure-sql-database-deployment.md + - name: Copy Files Over SSH + href: tasks/deploy/copy-files-over-ssh.md + - name: IIS Web App Deploy + href: tasks/deploy/iis-deploy.md + - name: IIS Web App Manage + href: tasks/deploy/iis-manage.md + - name: Mobile Center Upload + href: tasks/deploy/mobile-center-upload.md + - name: PowerShell on Target Machines + href: tasks/deploy/powershell-on-target-machines.md + - name: Service Fabric App Deployment + href: tasks/deploy/service-fabric-deploy.md + - name: Service Fabric Compose Deploy + href: tasks/deploy/service-fabric-compose-deploy.md + - name: SSH + href: tasks/deploy/ssh.md + - name: Windows Machine File Copy + href: tasks/deploy/windows-machine-file-copy.md + - name: Tool tasks + items: + - name: Node Tool Installer + href: tasks/tool/node-js.md + - name: File matching patterns + href: tasks/file-matching-patterns.md + - name: File and variable transform + href: tasks/transforms-variable-substitution.md diff --git a/docs/center.json b/docs/center.json new file mode 100644 index 00000000000..38d6b8a6f8f --- /dev/null +++ b/docs/center.json @@ -0,0 +1,5 @@ +{ + "Template": "API", + "TocFilePath": "/Library/vs/alm/toc.csv", + "TocTitlesFilePath": "/Library/vs/alm/containerNodeTitles.csv" +} \ No newline at end of file diff --git a/docs/collaborate/_img/ALM_CT_AddEvents.png b/docs/collaborate/_img/ALM_CT_AddEvents.png new file mode 100644 index 00000000000..5e1638fcaa3 Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_AddEvents.png differ diff --git a/docs/collaborate/_img/ALM_CT_AddMembers.png b/docs/collaborate/_img/ALM_CT_AddMembers.png new file mode 100644 index 00000000000..22118f8068a Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_AddMembers.png differ diff --git a/docs/collaborate/_img/ALM_CT_AudioIcon.png b/docs/collaborate/_img/ALM_CT_AudioIcon.png new file mode 100644 index 00000000000..f43212510a5 Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_AudioIcon.png differ diff --git a/docs/collaborate/_img/ALM_CT_ConfigureEvents.png b/docs/collaborate/_img/ALM_CT_ConfigureEvents.png new file mode 100644 index 00000000000..417c2a368d7 Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_ConfigureEvents.png differ diff --git a/docs/collaborate/_img/ALM_CT_ManageMembers.png b/docs/collaborate/_img/ALM_CT_ManageMembers.png new file mode 100644 index 00000000000..386528084bb Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_ManageMembers.png differ diff --git a/docs/collaborate/_img/ALM_CT_NewRoom.png b/docs/collaborate/_img/ALM_CT_NewRoom.png new file mode 100644 index 00000000000..c0f6406565f Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_NewRoom.png differ diff --git a/docs/collaborate/_img/ALM_CT_RoomsList.png b/docs/collaborate/_img/ALM_CT_RoomsList.png new file mode 100644 index 00000000000..079fbbf03f7 Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_RoomsList.png differ diff --git a/docs/collaborate/_img/ALM_CT_SelectDate.png b/docs/collaborate/_img/ALM_CT_SelectDate.png new file mode 100644 index 00000000000..dec29b6a167 Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_SelectDate.png differ diff --git a/docs/collaborate/_img/ALM_CT_SmileIcon.png b/docs/collaborate/_img/ALM_CT_SmileIcon.png new file mode 100644 index 00000000000..ee68f399a07 Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_SmileIcon.png differ diff --git a/docs/collaborate/_img/ALM_CT_Teamroom.png b/docs/collaborate/_img/ALM_CT_Teamroom.png new file mode 100644 index 00000000000..f4a3cce504b Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_Teamroom.png differ diff --git a/docs/collaborate/_img/ALM_CT_TeamroomTile.png b/docs/collaborate/_img/ALM_CT_TeamroomTile.png new file mode 100644 index 00000000000..8f1e4cb21b7 Binary files /dev/null and b/docs/collaborate/_img/ALM_CT_TeamroomTile.png differ diff --git a/docs/collaborate/_img/campfire/campfire-my-info.png b/docs/collaborate/_img/campfire/campfire-my-info.png new file mode 100644 index 00000000000..2e8c5805b30 Binary files /dev/null and b/docs/collaborate/_img/campfire/campfire-my-info.png differ diff --git a/docs/collaborate/_img/campfire/campfire-service.png b/docs/collaborate/_img/campfire/campfire-service.png new file mode 100644 index 00000000000..1a9945dabf6 Binary files /dev/null and b/docs/collaborate/_img/campfire/campfire-service.png differ diff --git a/docs/collaborate/_img/campfire/configure-action.png b/docs/collaborate/_img/campfire/configure-action.png new file mode 100644 index 00000000000..b46aa1a6acd Binary files /dev/null and b/docs/collaborate/_img/campfire/configure-action.png differ diff --git a/docs/collaborate/_img/campfire/configure-event.png b/docs/collaborate/_img/campfire/configure-event.png new file mode 100644 index 00000000000..4c2f98cb303 Binary files /dev/null and b/docs/collaborate/_img/campfire/configure-event.png differ diff --git a/docs/collaborate/_img/campfire/results.png b/docs/collaborate/_img/campfire/results.png new file mode 100644 index 00000000000..5d76f3a7a61 Binary files /dev/null and b/docs/collaborate/_img/campfire/results.png differ diff --git a/docs/collaborate/_img/campfire/test.png b/docs/collaborate/_img/campfire/test.png new file mode 100644 index 00000000000..d7a9f6023b4 Binary files /dev/null and b/docs/collaborate/_img/campfire/test.png differ diff --git a/docs/collaborate/_img/desktop.ini b/docs/collaborate/_img/desktop.ini new file mode 100644 index 00000000000..594bae8d4bc --- /dev/null +++ b/docs/collaborate/_img/desktop.ini @@ -0,0 +1,2 @@ +[LocalizedFileNames] +follows-followed-work-items.png=@follows-followed-work-items.png,0 diff --git a/docs/collaborate/_img/flowdock/add-flow.png b/docs/collaborate/_img/flowdock/add-flow.png new file mode 100644 index 00000000000..89df3a4baff Binary files /dev/null and b/docs/collaborate/_img/flowdock/add-flow.png differ diff --git a/docs/collaborate/_img/flowdock/add-service-hook.png b/docs/collaborate/_img/flowdock/add-service-hook.png new file mode 100644 index 00000000000..d3cad855bea Binary files /dev/null and b/docs/collaborate/_img/flowdock/add-service-hook.png differ diff --git a/docs/collaborate/_img/flowdock/chat-messages.png b/docs/collaborate/_img/flowdock/chat-messages.png new file mode 100644 index 00000000000..fc9a69812e4 Binary files /dev/null and b/docs/collaborate/_img/flowdock/chat-messages.png differ diff --git a/docs/collaborate/_img/flowdock/configure-action.png b/docs/collaborate/_img/flowdock/configure-action.png new file mode 100644 index 00000000000..62718eb719c Binary files /dev/null and b/docs/collaborate/_img/flowdock/configure-action.png differ diff --git a/docs/collaborate/_img/flowdock/configure-event.png b/docs/collaborate/_img/flowdock/configure-event.png new file mode 100644 index 00000000000..f0adb24503b Binary files /dev/null and b/docs/collaborate/_img/flowdock/configure-event.png differ diff --git a/docs/collaborate/_img/flowdock/configure-flow.png b/docs/collaborate/_img/flowdock/configure-flow.png new file mode 100644 index 00000000000..7578cf4b31e Binary files /dev/null and b/docs/collaborate/_img/flowdock/configure-flow.png differ diff --git a/docs/collaborate/_img/flowdock/create-flow.png b/docs/collaborate/_img/flowdock/create-flow.png new file mode 100644 index 00000000000..2542989c078 Binary files /dev/null and b/docs/collaborate/_img/flowdock/create-flow.png differ diff --git a/docs/collaborate/_img/flowdock/flowdock-service.png b/docs/collaborate/_img/flowdock/flowdock-service.png new file mode 100644 index 00000000000..c20611f591a Binary files /dev/null and b/docs/collaborate/_img/flowdock/flowdock-service.png differ diff --git a/docs/collaborate/_img/flowdock/inbox-admin.png b/docs/collaborate/_img/flowdock/inbox-admin.png new file mode 100644 index 00000000000..2113af2325f Binary files /dev/null and b/docs/collaborate/_img/flowdock/inbox-admin.png differ diff --git a/docs/collaborate/_img/flowdock/manage-inbox-sources.png b/docs/collaborate/_img/flowdock/manage-inbox-sources.png new file mode 100644 index 00000000000..870a29ec0ec Binary files /dev/null and b/docs/collaborate/_img/flowdock/manage-inbox-sources.png differ diff --git a/docs/collaborate/_img/flowdock/test.png b/docs/collaborate/_img/flowdock/test.png new file mode 100644 index 00000000000..ae8a1528024 Binary files /dev/null and b/docs/collaborate/_img/flowdock/test.png differ diff --git a/docs/collaborate/_img/follow-pull-request.png b/docs/collaborate/_img/follow-pull-request.png new file mode 100644 index 00000000000..cd875b4e7a4 Binary files /dev/null and b/docs/collaborate/_img/follow-pull-request.png differ diff --git a/docs/collaborate/_img/follow-work-item.png b/docs/collaborate/_img/follow-work-item.png new file mode 100644 index 00000000000..cd8e1cdb619 Binary files /dev/null and b/docs/collaborate/_img/follow-work-item.png differ diff --git a/docs/collaborate/_img/follows-followed-work-items.png b/docs/collaborate/_img/follows-followed-work-items.png new file mode 100644 index 00000000000..eaecc88e7d2 Binary files /dev/null and b/docs/collaborate/_img/follows-followed-work-items.png differ diff --git a/docs/collaborate/_img/hipchat/configure-action.png b/docs/collaborate/_img/hipchat/configure-action.png new file mode 100644 index 00000000000..9542e70c204 Binary files /dev/null and b/docs/collaborate/_img/hipchat/configure-action.png differ diff --git a/docs/collaborate/_img/hipchat/configure-event.png b/docs/collaborate/_img/hipchat/configure-event.png new file mode 100644 index 00000000000..9410045c01f Binary files /dev/null and b/docs/collaborate/_img/hipchat/configure-event.png differ diff --git a/docs/collaborate/_img/hipchat/create-hipchat-token.png b/docs/collaborate/_img/hipchat/create-hipchat-token.png new file mode 100644 index 00000000000..018438c1255 Binary files /dev/null and b/docs/collaborate/_img/hipchat/create-hipchat-token.png differ diff --git a/docs/collaborate/_img/hipchat/create-service-hook.png b/docs/collaborate/_img/hipchat/create-service-hook.png new file mode 100644 index 00000000000..0d9fe616159 Binary files /dev/null and b/docs/collaborate/_img/hipchat/create-service-hook.png differ diff --git a/docs/collaborate/_img/hipchat/hipchat-account-settings.png b/docs/collaborate/_img/hipchat/hipchat-account-settings.png new file mode 100644 index 00000000000..ac051ee1c0d Binary files /dev/null and b/docs/collaborate/_img/hipchat/hipchat-account-settings.png differ diff --git a/docs/collaborate/_img/hipchat/hipchat-api-access.png b/docs/collaborate/_img/hipchat/hipchat-api-access.png new file mode 100644 index 00000000000..74bfb6d970f Binary files /dev/null and b/docs/collaborate/_img/hipchat/hipchat-api-access.png differ diff --git a/docs/collaborate/_img/hipchat/hipchat-password.png b/docs/collaborate/_img/hipchat/hipchat-password.png new file mode 100644 index 00000000000..940507649af Binary files /dev/null and b/docs/collaborate/_img/hipchat/hipchat-password.png differ diff --git a/docs/collaborate/_img/hipchat/hipchat-room.png b/docs/collaborate/_img/hipchat/hipchat-room.png new file mode 100644 index 00000000000..d512ac6557f Binary files /dev/null and b/docs/collaborate/_img/hipchat/hipchat-room.png differ diff --git a/docs/collaborate/_img/hipchat/hipchat-service.png b/docs/collaborate/_img/hipchat/hipchat-service.png new file mode 100644 index 00000000000..ad87a162c28 Binary files /dev/null and b/docs/collaborate/_img/hipchat/hipchat-service.png differ diff --git a/docs/collaborate/_img/hipchat/hipchat-token.png b/docs/collaborate/_img/hipchat/hipchat-token.png new file mode 100644 index 00000000000..8ee7306318a Binary files /dev/null and b/docs/collaborate/_img/hipchat/hipchat-token.png differ diff --git a/docs/collaborate/_img/hipchat/test.png b/docs/collaborate/_img/hipchat/test.png new file mode 100644 index 00000000000..5e1539155a8 Binary files /dev/null and b/docs/collaborate/_img/hipchat/test.png differ diff --git a/docs/collaborate/_img/markdown-multiple-pages-explorer-view.png b/docs/collaborate/_img/markdown-multiple-pages-explorer-view.png new file mode 100644 index 00000000000..0389ab4d577 Binary files /dev/null and b/docs/collaborate/_img/markdown-multiple-pages-explorer-view.png differ diff --git a/docs/collaborate/_img/markdown-welcome-page-edit.png b/docs/collaborate/_img/markdown-welcome-page-edit.png new file mode 100644 index 00000000000..c2802119dcb Binary files /dev/null and b/docs/collaborate/_img/markdown-welcome-page-edit.png differ diff --git a/docs/collaborate/_img/markdown-welcome-page.png b/docs/collaborate/_img/markdown-welcome-page.png new file mode 100644 index 00000000000..6a2ee54b0d3 Binary files /dev/null and b/docs/collaborate/_img/markdown-welcome-page.png differ diff --git a/docs/collaborate/_img/mobile-work-account-work-items-pages.png b/docs/collaborate/_img/mobile-work-account-work-items-pages.png new file mode 100644 index 00000000000..99a3cb0936c Binary files /dev/null and b/docs/collaborate/_img/mobile-work-account-work-items-pages.png differ diff --git a/docs/collaborate/_img/mobile-work-add-tags.png b/docs/collaborate/_img/mobile-work-add-tags.png new file mode 100644 index 00000000000..05b4cf11cb1 Binary files /dev/null and b/docs/collaborate/_img/mobile-work-add-tags.png differ diff --git a/docs/collaborate/_img/mobile-work-change-state.png b/docs/collaborate/_img/mobile-work-change-state.png new file mode 100644 index 00000000000..c399b4c7d26 Binary files /dev/null and b/docs/collaborate/_img/mobile-work-change-state.png differ diff --git a/docs/collaborate/_img/mobile-work-click-list.png b/docs/collaborate/_img/mobile-work-click-list.png new file mode 100644 index 00000000000..ba174615bdb Binary files /dev/null and b/docs/collaborate/_img/mobile-work-click-list.png differ diff --git a/docs/collaborate/_img/mobile-work-click-work-items.png b/docs/collaborate/_img/mobile-work-click-work-items.png new file mode 100644 index 00000000000..6683153b681 Binary files /dev/null and b/docs/collaborate/_img/mobile-work-click-work-items.png differ diff --git a/docs/collaborate/_img/mobile-work-email-notice.png b/docs/collaborate/_img/mobile-work-email-notice.png new file mode 100644 index 00000000000..b2c8414fa77 Binary files /dev/null and b/docs/collaborate/_img/mobile-work-email-notice.png differ diff --git a/docs/collaborate/_img/mobile-work-intro-1.png b/docs/collaborate/_img/mobile-work-intro-1.png new file mode 100644 index 00000000000..2562d59a021 Binary files /dev/null and b/docs/collaborate/_img/mobile-work-intro-1.png differ diff --git a/docs/collaborate/_img/mobile-work-return.png b/docs/collaborate/_img/mobile-work-return.png new file mode 100644 index 00000000000..15351bc4202 Binary files /dev/null and b/docs/collaborate/_img/mobile-work-return.png differ diff --git a/docs/collaborate/_img/mobile-work-send-feedback.png b/docs/collaborate/_img/mobile-work-send-feedback.png new file mode 100644 index 00000000000..81d6cae04bd Binary files /dev/null and b/docs/collaborate/_img/mobile-work-send-feedback.png differ diff --git a/docs/collaborate/_img/mobile-work-view-history.png b/docs/collaborate/_img/mobile-work-view-history.png new file mode 100644 index 00000000000..fbb05451f0d Binary files /dev/null and b/docs/collaborate/_img/mobile-work-view-history.png differ diff --git a/docs/collaborate/_img/new-sub-description-and-delivery.png b/docs/collaborate/_img/new-sub-description-and-delivery.png new file mode 100644 index 00000000000..956b737681b Binary files /dev/null and b/docs/collaborate/_img/new-sub-description-and-delivery.png differ diff --git a/docs/collaborate/_img/new-sub-description.png b/docs/collaborate/_img/new-sub-description.png new file mode 100644 index 00000000000..0ce74fd23cd Binary files /dev/null and b/docs/collaborate/_img/new-sub-description.png differ diff --git a/docs/collaborate/_img/new-sub-filter-conditions.png b/docs/collaborate/_img/new-sub-filter-conditions.png new file mode 100644 index 00000000000..2491e486749 Binary files /dev/null and b/docs/collaborate/_img/new-sub-filter-conditions.png differ diff --git a/docs/collaborate/_img/new-sub-page1.png b/docs/collaborate/_img/new-sub-page1.png new file mode 100644 index 00000000000..e98859cfd1b Binary files /dev/null and b/docs/collaborate/_img/new-sub-page1.png differ diff --git a/docs/collaborate/_img/new-sub-scope.png b/docs/collaborate/_img/new-sub-scope.png new file mode 100644 index 00000000000..01173ff73ae Binary files /dev/null and b/docs/collaborate/_img/new-sub-scope.png differ diff --git a/docs/collaborate/_img/new-sub-team-delivery-by-role.png b/docs/collaborate/_img/new-sub-team-delivery-by-role.png new file mode 100644 index 00000000000..c076e8af0cb Binary files /dev/null and b/docs/collaborate/_img/new-sub-team-delivery-by-role.png differ diff --git a/docs/collaborate/_img/personal-notifications.png b/docs/collaborate/_img/personal-notifications.png new file mode 100644 index 00000000000..cc871493aee Binary files /dev/null and b/docs/collaborate/_img/personal-notifications.png differ diff --git a/docs/collaborate/_img/personal-profile-menu.png b/docs/collaborate/_img/personal-profile-menu.png new file mode 100644 index 00000000000..526297af0e4 Binary files /dev/null and b/docs/collaborate/_img/personal-profile-menu.png differ diff --git a/docs/collaborate/_img/preview-features-admin-s117-2.png b/docs/collaborate/_img/preview-features-admin-s117-2.png new file mode 100644 index 00000000000..fa0a86185cb Binary files /dev/null and b/docs/collaborate/_img/preview-features-admin-s117-2.png differ diff --git a/docs/collaborate/_img/preview-features-admin-s117.png b/docs/collaborate/_img/preview-features-admin-s117.png new file mode 100644 index 00000000000..78f924375a2 Binary files /dev/null and b/docs/collaborate/_img/preview-features-admin-s117.png differ diff --git a/docs/collaborate/_img/preview-features-user-level.png b/docs/collaborate/_img/preview-features-user-level.png new file mode 100644 index 00000000000..dc04b4c5d2c Binary files /dev/null and b/docs/collaborate/_img/preview-features-user-level.png differ diff --git a/docs/collaborate/_img/preview-features-wiki.png b/docs/collaborate/_img/preview-features-wiki.png new file mode 100644 index 00000000000..82f078f9867 Binary files /dev/null and b/docs/collaborate/_img/preview-features-wiki.png differ diff --git a/docs/collaborate/_img/project-home-page-1.png b/docs/collaborate/_img/project-home-page-1.png new file mode 100644 index 00000000000..f27cbccc57b Binary files /dev/null and b/docs/collaborate/_img/project-home-page-1.png differ diff --git a/docs/collaborate/_img/project-home-page-activity.png b/docs/collaborate/_img/project-home-page-activity.png new file mode 100644 index 00000000000..9dfd473fe60 Binary files /dev/null and b/docs/collaborate/_img/project-home-page-activity.png differ diff --git a/docs/collaborate/_img/project-home-page-add-team-members.png b/docs/collaborate/_img/project-home-page-add-team-members.png new file mode 100644 index 00000000000..bda3065a842 Binary files /dev/null and b/docs/collaborate/_img/project-home-page-add-team-members.png differ diff --git a/docs/collaborate/_img/project-home-page-get-started-info.png b/docs/collaborate/_img/project-home-page-get-started-info.png new file mode 100644 index 00000000000..9d881fbf1e2 Binary files /dev/null and b/docs/collaborate/_img/project-home-page-get-started-info.png differ diff --git a/docs/collaborate/_img/project-home-page-sample-vs-code-readme.png b/docs/collaborate/_img/project-home-page-sample-vs-code-readme.png new file mode 100644 index 00000000000..148b1d8fd15 Binary files /dev/null and b/docs/collaborate/_img/project-home-page-sample-vs-code-readme.png differ diff --git a/docs/collaborate/_img/project-vision-status-project-home-page.png b/docs/collaborate/_img/project-vision-status-project-home-page.png new file mode 100644 index 00000000000..9fac96c12ff Binary files /dev/null and b/docs/collaborate/_img/project-vision-status-project-home-page.png differ diff --git a/docs/collaborate/_img/set-favorites-build-definitions.png b/docs/collaborate/_img/set-favorites-build-definitions.png new file mode 100644 index 00000000000..7740c0a8fdb Binary files /dev/null and b/docs/collaborate/_img/set-favorites-build-definitions.png differ diff --git a/docs/collaborate/_img/set-favorites-click-icon.png b/docs/collaborate/_img/set-favorites-click-icon.png new file mode 100644 index 00000000000..75d2afe06ff Binary files /dev/null and b/docs/collaborate/_img/set-favorites-click-icon.png differ diff --git a/docs/collaborate/_img/set-favorites-repository.png b/docs/collaborate/_img/set-favorites-repository.png new file mode 100644 index 00000000000..71b154fe31c Binary files /dev/null and b/docs/collaborate/_img/set-favorites-repository.png differ diff --git a/docs/collaborate/_img/set-favorites-shared-query.png b/docs/collaborate/_img/set-favorites-shared-query.png new file mode 100644 index 00000000000..05b6c237133 Binary files /dev/null and b/docs/collaborate/_img/set-favorites-shared-query.png differ diff --git a/docs/collaborate/_img/shared-sub-opt-out.png b/docs/collaborate/_img/shared-sub-opt-out.png new file mode 100644 index 00000000000..88ca37021ca Binary files /dev/null and b/docs/collaborate/_img/shared-sub-opt-out.png differ diff --git a/docs/collaborate/_img/shared-sub.png b/docs/collaborate/_img/shared-sub.png new file mode 100644 index 00000000000..af5b7fc3c87 Binary files /dev/null and b/docs/collaborate/_img/shared-sub.png differ diff --git a/docs/collaborate/_img/slack/action.png b/docs/collaborate/_img/slack/action.png new file mode 100644 index 00000000000..ac9a2e1a917 Binary files /dev/null and b/docs/collaborate/_img/slack/action.png differ diff --git a/docs/collaborate/_img/slack/build-trigger.png b/docs/collaborate/_img/slack/build-trigger.png new file mode 100644 index 00000000000..859bf7df995 Binary files /dev/null and b/docs/collaborate/_img/slack/build-trigger.png differ diff --git a/docs/collaborate/_img/slack/completed-build-in-slack.png b/docs/collaborate/_img/slack/completed-build-in-slack.png new file mode 100644 index 00000000000..89e8b45e5f1 Binary files /dev/null and b/docs/collaborate/_img/slack/completed-build-in-slack.png differ diff --git a/docs/collaborate/_img/slack/completed-builds-integration.png b/docs/collaborate/_img/slack/completed-builds-integration.png new file mode 100644 index 00000000000..ffc768d4c33 Binary files /dev/null and b/docs/collaborate/_img/slack/completed-builds-integration.png differ diff --git a/docs/collaborate/_img/slack/create-subscription.png b/docs/collaborate/_img/slack/create-subscription.png new file mode 100644 index 00000000000..634843f39c4 Binary files /dev/null and b/docs/collaborate/_img/slack/create-subscription.png differ diff --git a/docs/collaborate/_img/slack/slack-install.png b/docs/collaborate/_img/slack/slack-install.png new file mode 100644 index 00000000000..3c091db2b9e Binary files /dev/null and b/docs/collaborate/_img/slack/slack-install.png differ diff --git a/docs/collaborate/_img/slack/slack-integrations.png b/docs/collaborate/_img/slack/slack-integrations.png new file mode 100644 index 00000000000..f2a1b88be09 Binary files /dev/null and b/docs/collaborate/_img/slack/slack-integrations.png differ diff --git a/docs/collaborate/_img/slack/slack-service-hook-enabled.png b/docs/collaborate/_img/slack/slack-service-hook-enabled.png new file mode 100644 index 00000000000..cadb3ab1948 Binary files /dev/null and b/docs/collaborate/_img/slack/slack-service-hook-enabled.png differ diff --git a/docs/collaborate/_img/slack/slack-service.png b/docs/collaborate/_img/slack/slack-service.png new file mode 100644 index 00000000000..d726ba34094 Binary files /dev/null and b/docs/collaborate/_img/slack/slack-service.png differ diff --git a/docs/collaborate/_img/slack/team-project-administration.png b/docs/collaborate/_img/slack/team-project-administration.png new file mode 100644 index 00000000000..3199a3b14c3 Binary files /dev/null and b/docs/collaborate/_img/slack/team-project-administration.png differ diff --git a/docs/collaborate/_img/slack/test-succeeded.png b/docs/collaborate/_img/slack/test-succeeded.png new file mode 100644 index 00000000000..a93a94697b4 Binary files /dev/null and b/docs/collaborate/_img/slack/test-succeeded.png differ diff --git a/docs/collaborate/_img/slack/vso-team-project.png b/docs/collaborate/_img/slack/vso-team-project.png new file mode 100644 index 00000000000..96935804ea1 Binary files /dev/null and b/docs/collaborate/_img/slack/vso-team-project.png differ diff --git a/docs/collaborate/_img/slack/vso.png b/docs/collaborate/_img/slack/vso.png new file mode 100644 index 00000000000..416737acd76 Binary files /dev/null and b/docs/collaborate/_img/slack/vso.png differ diff --git a/docs/collaborate/_img/slack/vsts-service-hooks.png b/docs/collaborate/_img/slack/vsts-service-hooks.png new file mode 100644 index 00000000000..ec31541c553 Binary files /dev/null and b/docs/collaborate/_img/slack/vsts-service-hooks.png differ diff --git a/docs/collaborate/_img/slack/webhook-url.png b/docs/collaborate/_img/slack/webhook-url.png new file mode 100644 index 00000000000..89c3df20183 Binary files /dev/null and b/docs/collaborate/_img/slack/webhook-url.png differ diff --git a/docs/collaborate/_img/team-notifications-settings-menu.png b/docs/collaborate/_img/team-notifications-settings-menu.png new file mode 100644 index 00000000000..ad8b6d236c3 Binary files /dev/null and b/docs/collaborate/_img/team-notifications-settings-menu.png differ diff --git a/docs/collaborate/_img/wiki/add-new-page.png b/docs/collaborate/_img/wiki/add-new-page.png new file mode 100644 index 00000000000..1000522a8fa Binary files /dev/null and b/docs/collaborate/_img/wiki/add-new-page.png differ diff --git a/docs/collaborate/_img/wiki/click-revision.png b/docs/collaborate/_img/wiki/click-revision.png new file mode 100644 index 00000000000..213f992069b Binary files /dev/null and b/docs/collaborate/_img/wiki/click-revision.png differ diff --git a/docs/collaborate/_img/wiki/clone-wiki-dialog.png b/docs/collaborate/_img/wiki/clone-wiki-dialog.png new file mode 100644 index 00000000000..861dc93d4b2 Binary files /dev/null and b/docs/collaborate/_img/wiki/clone-wiki-dialog.png differ diff --git a/docs/collaborate/_img/wiki/clone-wiki.png b/docs/collaborate/_img/wiki/clone-wiki.png new file mode 100644 index 00000000000..5064a8b25cd Binary files /dev/null and b/docs/collaborate/_img/wiki/clone-wiki.png differ diff --git a/docs/collaborate/_img/wiki/filter-box.png b/docs/collaborate/_img/wiki/filter-box.png new file mode 100644 index 00000000000..a009a7a175d Binary files /dev/null and b/docs/collaborate/_img/wiki/filter-box.png differ diff --git a/docs/collaborate/_img/wiki/home-link.png b/docs/collaborate/_img/wiki/home-link.png new file mode 100644 index 00000000000..1d5cba88bc3 Binary files /dev/null and b/docs/collaborate/_img/wiki/home-link.png differ diff --git a/docs/collaborate/_img/wiki/make-home-page.png b/docs/collaborate/_img/wiki/make-home-page.png new file mode 100644 index 00000000000..ba91e21cfd6 Binary files /dev/null and b/docs/collaborate/_img/wiki/make-home-page.png differ diff --git a/docs/collaborate/_img/wiki/migrate-wiki-manage-wikis.png b/docs/collaborate/_img/wiki/migrate-wiki-manage-wikis.png new file mode 100644 index 00000000000..fbb690aaed4 Binary files /dev/null and b/docs/collaborate/_img/wiki/migrate-wiki-manage-wikis.png differ diff --git a/docs/collaborate/_img/wiki/new-page-added.png b/docs/collaborate/_img/wiki/new-page-added.png new file mode 100644 index 00000000000..754a1ef53ff Binary files /dev/null and b/docs/collaborate/_img/wiki/new-page-added.png differ diff --git a/docs/collaborate/_img/wiki/open-web-portal-wiki.png b/docs/collaborate/_img/wiki/open-web-portal-wiki.png new file mode 100644 index 00000000000..25777e94a60 Binary files /dev/null and b/docs/collaborate/_img/wiki/open-web-portal-wiki.png differ diff --git a/docs/collaborate/_img/wiki/revision-history.png b/docs/collaborate/_img/wiki/revision-history.png new file mode 100644 index 00000000000..19d7bf40c35 Binary files /dev/null and b/docs/collaborate/_img/wiki/revision-history.png differ diff --git a/docs/collaborate/_img/wiki/security-dialog.png b/docs/collaborate/_img/wiki/security-dialog.png new file mode 100644 index 00000000000..14221d8b3e3 Binary files /dev/null and b/docs/collaborate/_img/wiki/security-dialog.png differ diff --git a/docs/collaborate/_img/wiki/wiki-commit-history.png b/docs/collaborate/_img/wiki/wiki-commit-history.png new file mode 100644 index 00000000000..ed2e1e06f6f Binary files /dev/null and b/docs/collaborate/_img/wiki/wiki-commit-history.png differ diff --git a/docs/collaborate/_img/wiki/wiki-create.png b/docs/collaborate/_img/wiki/wiki-create.png new file mode 100644 index 00000000000..ffaf80484b7 Binary files /dev/null and b/docs/collaborate/_img/wiki/wiki-create.png differ diff --git a/docs/collaborate/_img/wiki/wiki-open-security.png b/docs/collaborate/_img/wiki/wiki-open-security.png new file mode 100644 index 00000000000..e650ba403ca Binary files /dev/null and b/docs/collaborate/_img/wiki/wiki-open-security.png differ diff --git a/docs/collaborate/_shared/follow-pr.md b/docs/collaborate/_shared/follow-pr.md new file mode 100644 index 00000000000..5f2fc324bfa --- /dev/null +++ b/docs/collaborate/_shared/follow-pr.md @@ -0,0 +1,14 @@ + + +To track the progress of a single pull request, click the ![Follow icon](../../work/_img/icons/follow-icon.png) option from the context menu. This signals the system to notify you when changes are made to the PR. + +Pull Request, context menu, Follow icon option + +>[!IMPORTANT] +>For on-premises TFS, [you must configure an SMTP sever](../../tfs-server/admin/setup-customize-alerts.md) in order for team members to receive notifications. + +You'll only receive notifications when other members of your team modifies the PR, such as adding to the discussion or adding an attachment. + +Notifications are sent to your preferred email address, which you can change from your [account preferences](../../accounts/account-preferences.md). + +To stop following changes, open the PR context menu and click the ![Following icon](../../work/_img/icons/following-icon.png) icon. diff --git a/docs/collaborate/_shared/follow.md b/docs/collaborate/_shared/follow.md new file mode 100644 index 00000000000..e69de29bb2d diff --git a/docs/collaborate/about-readme-wiki.md b/docs/collaborate/about-readme-wiki.md new file mode 100644 index 00000000000..a7abd1c1546 --- /dev/null +++ b/docs/collaborate/about-readme-wiki.md @@ -0,0 +1,46 @@ +--- +title: About READMEs and Wiki | VSTS & TFS +description: Share information using a project or repo README or Wiki +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 07/05/2017 +ms.topic: get-started-article +--- + + +# About READMEs and Wiki + +**VSTS | TFS 2018 | TFS 2017** + + +## READMEs + +To share information with your team, you can create README files for a repository, or create and add pages to a team project Wiki. Wiki files are managed in a wiki repository. You can edit these files using Markdown format. + +You can define a README file, or multiple files, for each repo or team project. + +Write your readme in [Markdown](../reference/markdown-guidance.md) instead of plain text. Markdown makes it easy to format text, include images, and link as needed to additional documentation from your readme. + +Here are some great readmes that use this format and speak to all three audiences, for reference and inspiration: + +- [ASP.NET Core](https://github.com/aspnet/Home) +- [Visual Studio Code](https://github.com/Microsoft/vscode) +- [Chakra Core](https://github.com/Microsoft/ChakraCore) + + +## Wiki + +Use your team project wiki to share information with other team members. Each wiki corresponds to its own git repository and supports collaborative editing of its content and structure. website that allows collaborative editing of its content and structure. + +To learn more, see [Add and edit a wiki](add-edit-wiki.md). + +>[!NOTE] +>Feature availability: The built-in wiki is in Preview and available for VSTS at this time. You enable this feature for a team project from the [Preview features option from your profile menu](preview-features.md#account-level). + +## Related notes +- [Add and edit a wiki](add-edit-wiki.md) +- [Manage README and Wiki permissions](manage-readme-wiki-permissions.md) +- [Markdown guidance](vsts/reference/markdown-guidance \ No newline at end of file diff --git a/docs/collaborate/add-edit-wiki.md b/docs/collaborate/add-edit-wiki.md new file mode 100644 index 00000000000..3719366b4e5 --- /dev/null +++ b/docs/collaborate/add-edit-wiki.md @@ -0,0 +1,201 @@ +--- +title: Add and edit pages for your built-in VSTS wiki +description: Share information with your team and increase collaboration using a built-in team project wiki provided by Visual Studio Team Services (VSTS) +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: BD03B9EE-D4DC-4EDC-B0BF-5C11B34E14C9 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +ms.topic: get-started-article +--- + + +# Add and edit pages in your team project wiki + +**VSTS | TFS 2018** + +>[!NOTE] +>Feature availability: The built-in wiki is in Preview and available for VSTS at this time. You enable this feature for a team project from the [Preview features option from your profile menu](preview-features.md#account-level). +> +>If you were using the Wiki Marketplace extension, you can [migrate your existing pages to the new team project wiki](migrate-extension-wiki-pages.md). + +Each team project has a wiki associated with it. Use it to share information with your team members and stakeholders to understand, use, and contribute to your project. + +Learn how to: + + + +![checkmark](../work/_img/icons/checkmark.png) Create your first wiki page +![checkmark](../work/_img/icons/checkmark.png) Add, edit, delete, and reorder pages +![checkmark](../work/_img/icons/checkmark.png) Recover deleted pages +![checkmark](../work/_img/icons/checkmark.png) Change the page referenced as the wiki home page +![checkmark](../work/_img/icons/checkmark.png) Review a wiki page revision history +![checkmark](../work/_img/icons/checkmark.png) Filter wiki pages +![checkmark](../work/_img/icons/checkmark.png) Edit wiki pages offline + + +## Create your wiki and first wiki page + +1. Enable the Wiki by clicking your profile menu and choosing **Preview Features**. Select the team project and then turn on the Wiki feature. + + Preview features options for a team project + +2. To create your first wiki, open your web portal and click **Wiki** in the top row (click ... if it doesn't show). You need to be a member of the Contributors group to add and edit the wiki. + + Create wiki and first page + +3. Click **Create Wiki** to provision a new git repository that will store all your wiki pages and related artifacts. The repository is automatically labeled *TeamProjectName.wiki*. + + Create wiki and first page + + >[!NOTE] + >The *TeamProjectName.wiki* doesn't appear in the dropdown menu of repositories in the **Code** hub, nor in the list provided in the team project administration context, **Version Control** page. + > + > However, you can navigate to it from the URL `https://.visualstudio.com/DefaultCollection/_git/.wiki`. + +4. A new page opens in which you can specify a title and add content. You author pages using [markdown format](../reference/markdown-guidance.md). Also, you can use the format pane for rich-text formatting and to insert images, attachments, and links as well as add rich formatted text. + + Add a wiki page + +5. To validate your changes, click **Preview**. When you're finished with your edits, click ![Save icon](../_img/icons/save-icon.png) **Save**. + + +## Add, edit, delete, and reorder wiki pages + +To add another page, click **New page**, or you can add a subpage by opening the context menu of an existing page and clicking **Add sub-page**. + +You must specify a unique title of 235 characters or less. Page titles are case sensitive. For other title restrictions, see [Page title naming restrictions](#page-title-names). + +> [!NOTE] +> Each new page you add is added to the root of your current hierarchy context. Each sub-page you add is added within the folder labeled the same as the parent topic. + +Create wiki and first page + + + +### Edit and delete wiki pages + +To edit an existing Wiki page, open the page and click **Edit page**, or open it's context menu and click **Edit**. + +To delete a page, open it's context menu from the tree view of pages and click **Delete**. Confirm the delete in the dialog box that opens. + +### Reorder a wiki page +You can reorder pages within the wiki tree view to have pages appear in the order and hierarchy you want. You can drag-and-drop a page title in the tree view to perform these operations: +- Change the parent-child relationship of a page +- Change the order of the page within the hierarchy + +> [!NOTE] +> Moving a page in the hierarchy may break links to it from other pages. You can always fix the links manually after you move. Reordering a page within a hierarchy has no impact on page links. + + + + + +### Make a page the wiki home page +By default, the first page you added when you created the wiki is set as the wiki home page. You can change this if a new page becomes more relevant. The home page opens whenever someone clicks **Wiki** within the web portal or clicks the ![home link](./_img/wiki/home-link.png) home icon. + +To reset the home page, open the context menu of the page and click **Set as wiki homepage**. + +Make a page the home page + + +### View wiki page revision history + +To view the revision history of a page, click the **Revisions** link provided on each page. + +Open revision history + +Revisions catalog who made the change along with the revision message, date, and version or commit ID. To view details of a revision, click the message or version (commit) link. + +Open revision history + +Similar to any git file revision, the revision details page provides a **side-by-side diff view** or the **inline diff view**. You can also click **Preview** to view the content of the page as of the specific revision. + +To return to the wiki, click **Wiki** from the top row of your web portal. + + +### Recover a deleted wiki page +To recover a deleted page, [revert the commit](../git/tutorial/undo.md#revert-changes-in-shared-commits) associated with the deleted file. To find the commit, open the **Code>History** page for the *TeamProjectName.wiki* repository. + +Recover a deleted wiki page by reverting a commit + + +## Filter wiki pages + +The filter feature allows you to quickly find a wiki page after the number of pages has grown to the hundreds or thousands. + +To find a page, enter a title or keyword into the **Filter pages** box. + +Make a page the home page + + +## Related notes + +- [Syntax guidance for Markdown files, widgets, wikis, and pull request comments](../reference/markdown-guidance.md) +- [Get Started with Git](../git/gitquickstart.md) +- [Git repository permissions](../security/permissions.md#git-repository) + + + +### Wiki page title naming restrictions + +Each wiki page corresponds to a file within the wiki git repo. Names you assign to a wiki page title must conform to the following restrictions. + + +|Restriction type| Restriction| +|---------------|-----------| +| File name | The fully qualified page path should not exceed 235 characters. | +| Uniqueness | Page titles are case sensitive and must be unique within the wiki hierarchy.| +|Special characters|

    1. Must not contain any Unicode control characters or surrogate characters
    2. Must not contain the following printable characters: / : < > \ * ? \ | - #
    3. Must not start or end with a period (.)
    4. Titles of pages added offline titles must not contain a blank space.
    | +| File size | Must not exceed the maximum of 15 MB | +| Attachment file size | Must not exceed the maximum of 10 MB | + + +### Clone your wiki repo and edit wiki pages offline + +To update your wiki pages offline, clone your wiki repository and add or edit pages much the same way you develop code in a git repo. You can then push your changes to your working branch and merge them with the master branch of the wiki repository. +- The wiki repo corresponds to *ProjectName.wiki* +- The master branch corresponds to *WikiMaster*. + +The wiki repository contains the following files and folders: +- A file for each page entered at the root level +- A folder for each page that contains subpages +- A root *.order* file which specifies the sequence of pages defined at the root level +- A *.order* file within each folder; this file maintains the order of subpages added to the parent page + +Each *.order* file defines the sequence of folders and pages contained within the folder. + +When you add pages offline, you must update the .order file with the titles of the added pages. + +1. To get the URL to clone your wiki, open the **More** menu and click **Clone Wiki**. + + Clone wiki + +2. From the **Clone repo** dialog, click **Copy clone url to clipboard**. + + Copy the wiki url + +3. Add or edit files, keeping in mind these guidelines or requirements: + - Add the file name to the .order file for any pages you add to the root folder or subfolder. + - To create a page hierarchy with parent and child pages, create a folder with the same name as the pareent page. For example, add a folder labeled "Home-Page" to support the parent page labeled "Home-Page.md", and then add all child pages within that folder. + - Add an entry in the root .order file to support any child pages within the hierarchy. + +4. When done, [push the files to the git repository](../git/tutorial/pushing.md). + + + + diff --git a/docs/collaborate/breadcrumb/toc.yml b/docs/collaborate/breadcrumb/toc.yml new file mode 100644 index 00000000000..927250d1298 --- /dev/null +++ b/docs/collaborate/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Collaboration + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=collaboration + items: + - name: "README & Wikis" + tocHref: /vsts/ + topicHref: /vsts/collaborate/index \ No newline at end of file diff --git a/docs/collaborate/collaborate-in-a-team-room.md b/docs/collaborate/collaborate-in-a-team-room.md new file mode 100644 index 00000000000..dc7db89ba87 --- /dev/null +++ b/docs/collaborate/collaborate-in-a-team-room.md @@ -0,0 +1,155 @@ +--- +title: Chat using team rooms +titleSuffix: TFS +description: Increase team productivity and collaboration, discuss progress, share status, and clarify issues in the team room for Visual Studio Team Services (VSTS) and TFS +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: 5f3d7c83-15bd-4176-b594-3e2ddc1afd6b +ms.manager: douge +ms.author: kaelli +ms.date: 07/21/2017 +--- + +# Collaborate in a team room + +TFS 2017 | TFS 2015 | TFS 2013 + +> [!NOTE] +> **Feature availability:** The Team Room feature is in the process of being deprecated. Several good solutions are available that integrate well with TFS that support notifications and chat, such as [Microsoft Teams](https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-teams) and [Slack](../service-hooks/services/slack.md). As a result, the Team Room feature will be deprecated from both Visual Studio Team Services (VSTS) and Team Foundation Server (TFS). +> +> To learn more about this change and the timeline for deprecation, see this blog post: [Deprecation of the Team Rooms in VSTS and TFS](https://blogs.msdn.microsoft.com/visualstudioalm/2017/01/04/deprecation-of-the-team-rooms-in-team-services-and-tfs/). + +Team rooms, like chat rooms, provide teams with a space to discuss work in progress, ask questions, share status, and clarify issues that arise. By fostering and capturing communication among team members, both near and far, team rooms can help increase your team's productivity. + +![Team room with messages and links to events](_img/ALM_CT_Teamroom.png) + +By using the team room instead of email threads, you automatically receive an audit trail of conversations and decisions. By reviewing the archive, you can quickly catch up with the team when you've been away or in a different time zone. + +A team room is created for [each team that gets created](../work/scale/multiple-teams.md). Team administrators can create additional rooms and manage their team rooms. + +Members of the Project Administrators groups can create and administer team rooms that they have created. And, members of the Project Collection Administrators groups can create and administer all team rooms. + +## Join the conversation +1. From your team's home page, open the room. + + ![Team room tile on team project home page](_img/ALM_CT_TeamroomTile.png) + + If you don't see the room tile, [(VSTS) ask your account administrator to grant you a Basic license](../accounts/add-account-users-assign-access-levels.md) or [(on-premises TFS) request Basic access from your TFS administrator](../security/change-access-levels.md). + + If you can't enter the room, get added as a member: [(VSTS) Add team members](../accounts/add-team-members-vs.md) or [(on-premises TFS) Add team members](../work/scale/multiple-teams.md#add-team-members). + +2. To switch to another team room, open it from the **Rooms** list. + + ![List of team rooms on Rooms page](_img/ALM_CT_RoomsList.png) + + You'll see all rooms that you have permission to enter. + + +## Ways you can interact in the room +* Target a message to a team member: type `@`*UserName*. + +* Include a hyperlink to a work item: type `#`*Id*. For example: `@Jamal, can you take a look at bugs #564, #588, and #592?` + +* Open a linked object, such as a work item, changeset, build definition, and more. + +* Add an emoticon: choose: ![Emoticon image selection](_img/ALM_CT_SmileIcon.png). + +* Review a previous day's message: select the day from the calendar. + + ![Date link to review team room archives](_img/ALM_CT_SelectDate.png) + + +## Add members +You can invite others who have access to the account or team project to participate in your team room. + +1. If you're not a team administrator, [get added as one](../work/scale/add-team-administrator.md). + +2. Open **Manage Members**. + + ![Click manage users to add accounts to a team room](_img/ALM_CT_ManageMembers.png) + + Only team administrators can see the links for manage users and manage events. + +3. Add a user account or group. + + ![Add menu on the Manage Members dialog](_img/ALM_CT_AddMembers.png) + + +## Add events +Adding events lets your team know when builds finish, source code is checked in, work items are updated, and requests for code reviews occur. + +1. Open **Configure Events**. + + ![Manage events link on the team room page](_img/ALM_CT_ConfigureEvents.png) + + If you don't see the **Manage events** link, [get added as a team administrator](../work/scale/add-team-administrator.md). + +2. Add events. + + ![Code changes tab on the Configure Events dialog box](_img/ALM_CT_AddEvents.png) + + Any change in status or assignment triggers an event to appear in the room. + + You can enable the following events and choose if the event triggers only when initiated by a team room member or by anyone. + +| Event category | Event | +| ---- | ------ | +| Build completions | Anytime a build completes for a specified build definition | +| Code changes | Anytime code is pushed or checked in from a specified repo or branch | +| Work item updates | Anytime a work item is added or modified in or under a specified area path | +| Code reviews| Anytime a code review is created in or under a specified area area path | +| Pull requests | Anytime a pull request is created for a specified repo or branch | + + + + +## Add another room +Adding other rooms provides areas for ad hoc discussions, cross-team interactions, virtual teams, or social discussions. + +1. Add a room. If the **New** link is not active, [get added as a team administrator](../work/scale/add-team-administrator.md). + + ![New link on the Rooms page, New Room dialog box](_img/ALM_CT_NewRoom.png) + +2. Add members to the room as described earlier in this topic. + +##Related notes +A team room is automatically created when you [add a team](../work/scale/multiple-teams.md) and is populated with your team members. To learn more about other Agile tools available to teams, see [Manage team assets](../work/scale/manage-team-assets.md). + +- To completely exit a team room, close all browser instances where you've logged into the team room +- To mute the sound, click the ![Audio icon on the Rooms page](_img/ALM_CT_AudioIcon.png) audio icon to turn the sound off or on +- For other uses of the `@mention`, see [Use @mentions to further discussion](../notifications/at-mentions.md) +- To change your profile image, see [Account preferences](../accounts/account-preferences.md). + + + +### Administer team room permissions + +You can grant permissions to users to administer a team room. + +1. From the context menu, open permissions for the team room. + + ![Open team room permissions](../work/scale/_img/open-security-team-room.png) + +2. Add an account, set the permissions for Administer to **Allow**, and save the changes. + + ![Add menu on Permissions page for a team room](../work/scale/_img/add-team-admin-dialog.png) + + + +### Permissions to open team room events + +Permissions on team room events are managed by their associated operational area. It is possible for a team member to have permissions to collaborate within a team room, yet not be allowed to view work items, build definitions, or source code that have alerts enabled in the team room. + + +### Ways other teams use team rooms +Many teams use team rooms to support these scenarios: + +* *Daily standup*: Capture the review of what happened the previous day and discuss any issues or blocking items based on real history. + +* *Remote team members*: Geographically-dispersed team members can keep up with members in different time zones. This can be especially useful when there are different levels of language proficiency among team members. + +* *Memory stream*: Configuring all events gives you an archive where you can review changesets, work item updates, and build progress all in one place. + +### Additional collaboration tools + +Check out the [Marketplace extensions tagged for collaboration](https://marketplace.visualstudio.com/vsts/Collaborate?sortBy=Downloads). diff --git a/docs/collaborate/follow-work-items.md b/docs/collaborate/follow-work-items.md new file mode 100644 index 00000000000..fe4d089a8cc --- /dev/null +++ b/docs/collaborate/follow-work-items.md @@ -0,0 +1,93 @@ +--- +title: Follow work or pull requests in VSTS or TFS +description: Quickly track the progress made to a work item by following it when using Visual Studio Team Services (VSTS) +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: 77CAEE8E-BF1A-47DA-9818-A0C52BAC813C +ms.manager: douge +ms.author: kaelli +ms.date: 08/21/2017 +ms.topic: get-started-article +--- + +# Follow a work item or pull request + +[!INCLUDE [temp](../work/_shared/dev15-and-ts-version-header.md)] + + + +>[!NOTE] +>Feature availability: The Follow a work item feature is available from VSTS and TFS 2017. The Follow a pull request feature is available from VSTS and TFS 2017 Update 1. For on-premises TFS, [you must configure an SMTP sever](../tfs-server/admin/setup-customize-alerts.md) for the follow features to work. + +To get notified of changes made to a work item or a pull request, you can elect to follow them. + +This topic shows you how to:   + +> [!div class="checklist"]    +> * Follow a work item +> * Follow a pull request        +> * Manage work items that you're following    + + +## Follow a work item + +When you want to track the progress of a single work item, click the ![Follow icon](../work/_img/icons/follow-icon.png) icon. This signals the system to notify you when changes are made to the work item. + +VSTS Work item form, Follow icon control + +>[!IMPORTANT] +>For on-premises TFS, [you must configure an SMTP server](../tfs-server/admin/setup-customize-alerts.md) in order for team members to receive notifications. + +You'll only receive notifications when other members of your team modifies the work item, such as adding to the discussion, changing a field value, or adding an attachment. + +Notifications are sent to your preferred email address, which you can change from your [account preferences](../accounts/account-preferences.md). + +To stop following changes, click the ![Following icon](../work/_img/icons/following-icon.png) icon. + + +## Follow a pull request + +To track the progress of a single pull request, click the ![Follow icon](../work/_img/icons/follow-icon.png) option from the context menu. This signals the system to notify you when changes are made to the PR. + +Pull Request, context menu, Follow icon option + +>[!IMPORTANT] +>For on-premises TFS, [you must configure an SMTP server](../tfs-server/admin/setup-customize-alerts.md) in order for team members to receive notifications. + +You'll only receive notifications when other members of your team modifies the PR, such as adding to the discussion or adding an attachment. + +Notifications are sent to your preferred email address, which you can change from your [account preferences](../accounts/account-preferences.md). + +To stop following changes, open the PR context menu and click the ![Following icon](../work/_img/icons/following-icon.png) icon. + + +## Manage work items that you're following + +You can review and manage all the work items you've selected to follow from the Followed work items page. You access this page from the **Work>Queries** page. + +Followed work items, Follow icon control + +From this view, you can view all items you're following across all team projects within the account. Also, you can perform similar actions supported with a query results view, such as: +- Refresh the view +- Add or remove visible columns +- Sort the order of specific columns +- Filter results by text or tags +- Set work item pane +- Enter full screen mode. + +However, this view isn't based on a query so you can't modify the parameters of the view. + +You can also view and manage work that you're following from the Account home pages. To learn more, see [Work effectively from your account hub](../connect/account-home-pages.md#follow-work). + +Account home, Work, Followed page + +## Related notes + +- [Manage personal notifications](../notifications/manage-personal-notifications.md) +- [Set team notifications](manage-team-notifications.md) +- [Set personal or team alerts](../work/track/alerts-and-notifications.md) +- [View and update work items via the mobile work item form](mobile-work.md) + +To update your on-premises TFS, visit the [Visual Studio downloads page for Team Foundation Server](https://www.visualstudio.com/downloads/#team-foundation-server-2017). + + \ No newline at end of file diff --git a/docs/collaborate/index.md b/docs/collaborate/index.md new file mode 100644 index 00000000000..989d5d656f0 --- /dev/null +++ b/docs/collaborate/index.md @@ -0,0 +1,38 @@ +--- +title: READMes and Wiki index to content for VSTS & TFS +description: Index to topics for sharing information via a README or the Wiki in VSTS or TFS +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/03/2017 +--- + +# READMEs & Wikis + +Repository README files and team project Wikis are great ways to share information with your team and stakeholders. + + + + + +## 5-Minute Quickstarts +- [Share your project vision](project-vision-status.md) + + + +## Step-by-Step Tutorials + +- [Add & edit a wiki](add-edit-wiki.md) + +## Concepts +- [Create a readme for your repo](/vsts/git/create-a-readme?toc=/vsts/collaborate/toc.json) +- [Share work plans](/vsts/work/track/share-plans?toc=/vsts/collaborate/toc.json) + +## Resources + + - [Dashboards](../report/dashboards.md) \ No newline at end of file diff --git a/docs/collaborate/manage-readme-wiki-permissions.md b/docs/collaborate/manage-readme-wiki-permissions.md new file mode 100644 index 00000000000..e8ec6935cbd --- /dev/null +++ b/docs/collaborate/manage-readme-wiki-permissions.md @@ -0,0 +1,45 @@ +--- +title: Add and edit wiki pages +description: Share informationwith your team and increase collaboration using a built-in team project wiki +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + + + + +# Manage README and Wiki permissions + +**VSTS | TFS 2018 | TFS 2017** + +By default, all members of the Contributors group can edit READMEs and Wiki pages. + + + + + + +## Manage README permissions + +You manage the permissions for README files by [setting permissions on the repository](../security/set-git-tfvc-repository-permissions.md). + + + +## Manage wiki permissions +By default, all project contributors have read and edit access of the wiki repository. You can grant or restrict access to who can read and edit wiki pages by managing the wiki repository permissions. + +To open the Security dialog, click **More>Security** on the wiki home page. + +Wiki, open security + +For definitions of each repository permission, see [Git repository permissions](../security/permissions.md#git-repository). + +Wiki security dialog + +>[!NOTE] +>Users with [Stakeholder access](../quickstart/get-started-stakeholder.md) have read-only permissions to wiki pages. These permissions can't be changed. + diff --git a/docs/collaborate/manage-team-notifications.md b/docs/collaborate/manage-team-notifications.md new file mode 100644 index 00000000000..bfee45e9768 --- /dev/null +++ b/docs/collaborate/manage-team-notifications.md @@ -0,0 +1,64 @@ +--- +title: Manage notifications for a team +description: Get notified when changes occur to source code, git, work items, and builds when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: 6edc44d0-2729-46f5-8108-c8a5160a6a7a +ms.manager: douge +ms.author: wismythe +ms.date: 09/01/2017 +--- + + +# Manage notifications for a team + +VSTS | TFS 2018 | TFS 2017.1 | [Previous versions](../work/track/alerts-and-notifications.md) + +>[!NOTE] +>This topic applies to VSTS and to TFS 2017.1 and later versions. If you work from an on-premises TFS 2017 or ealier versions, see [Set alerts, get notified when changes occur](../work/track/alerts-and-notifications.md). For on-premises TFS, [you must configure an SMTP sever](../tfs-server/admin/setup-customize-alerts.md) in order for team members to see the Notifications option from their account menu and to receive notifications. + +As changes occur to work items, code reviews, pull requests, source control files, and builds, your team can be notified via email. For example, when a high priority work item is assigned to your team's area path, an email can be sent to the team. + +## Create a custom email subscription + +A subscription lets you control what your team should be notified about and how the team will receive those notifications. + +1. Open the Notifications hub under team settings. + + ![Notifications under settings menu](_img/team-notifications-settings-menu.png) + +2. Click **New**. If you're not a team administrator, [get added as one](../work/scale/add-team-administrator.md). You need to be a team, project, or project collection administrator to create team alerts. + +3. Select the type of activity you want your team to be notified about. + + ![Select event category and template](_img/new-sub-page1.png) + +4. Provide a description to help you identify the subscription later. + + ![Select event category and template](_img/new-sub-description.png) + +5. Choose which team members should receive a notification: + + ![Select role](_img/new-sub-team-delivery-by-role.png) + + You can choose one of three delivery options: + * **Specific team members**: only certain team members associated with the event are notified. For example, for work item changes, you might only want the current assignee of the work item to receive a notification. + * **Team email address**: send an email to a specified email address. + * **All team members**: send an individual email to each member of the team. + + For certain activities and when **Specific team members** is selected, you can choose to have the user that initiated the activity receive a notification. This is controlled by the **Skip initiator** checkbox. By default, this box is checked meaning the user that initiates the change will not be notified about it. + +6. Choose whether you want to receive notifications about activity in all projects or only a specific project. + + ![Select scope](_img/new-sub-scope.png) + +7. Optionally configure additional filter criteria. + + ![Select scope](_img/new-sub-filter-conditions.png) + +7. Click **Finish** to save the new subscription. + +## Related topics + +- [Manage personal notification settings](../notifications/manage-personal-notifications.md) + diff --git a/docs/collaborate/migrate-extension-wiki-pages.md b/docs/collaborate/migrate-extension-wiki-pages.md new file mode 100644 index 00000000000..e53784a5a95 --- /dev/null +++ b/docs/collaborate/migrate-extension-wiki-pages.md @@ -0,0 +1,94 @@ +--- +title: Migrate wiki extension pages in VSTS +description: Migrate wiki pages created using the Marketplace extension to the Visual Studio Team Services (VSTS) wiki +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: 535245F2-6227-410C-B91D-559FA509D81B +ms.manager: douge +ms.author: kaelli +ms.date: 09/05/2017 +--- + +# Migrate pages from Wiki extension to a team project wiki + +**VSTS** + +>[!NOTE] +>Feature availability: Use this topic to migrate pages made using the [Wiki Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.wiki) to the VSTS Wiki. The **Wiki*** hub is in Preview and available for VSTS and TFS 2018 and later versions. To learn more, see [Add and edit your team project Wiki](add-edit-wiki.md). + +With the release of the built-in wiki, any wiki pages that you created using the Wiki Marketplace extension have been saved to a git repo in your team project. + +You can migrate the markdown pages and other artifacts that were added to that repo to your team project wiki with these steps: +1. Clone [vsts-wikiTools](https://github.com/Microsoft/vsts-wikiTools) repository and compile the **MigrateToVSTSWiki** tool +2. Create and then clone your VSTS wiki +3. Move and commit all markdown pages to your VSTS wiki +4. Run the wiki migration tool, **MigrateToVSTSWiki.exe** +5. Once you are done, push the changes to the default master branch, *wikiMaster*, of the VSTS wiki repository. + +To perform these changes, you must be a member of the Contributors group of your team project. + +## Detailed steps +Here are the detailed steps for Wiki migration: + +1. Clone [vsts-wikiTools](https://github.com/Microsoft/vsts-wikiTools) repository and compile the **MigrateToVSTSWiki** tool + +2. Compile the project under the path **Tools/MigrateToVSTSWiki** to generate the migration tool EXE. + +3. From a web browser, open your VSTS team project and [create your first wiki page](add-edit-wiki.md#create-wiki). + +4. Get the URL to clone your wiki. See [Clone your wiki and edit wiki pages offline](add-edit-wiki.md#edit-wiki-offline). + + Let the clone location be identified as "LocationA" for the purposes of these procedures. + +5. Clone your Wiki repo using your IDE or **git clone** command. + + Manage wikis menu option + +6. Clone the Wiki extension repo. The Wiki will be mapped to a folder given to you during the wiki creation. You can check that by going to "manage wiki" option in the existing wiki as shown below. + + You'll find your existing wiki pages are saved under the folder labeles "Root". + + For example, say you have cloned the above mentioned "sampleWiki" in the location "C:\wiki\sampleWiki". The wiki pages are saved in the path "C:\wiki\sampleWiki\ _extensionWiki" + + Let this location be identified as "LocationB" for the purposes of these procedures. + +7. Create an empty folder in any path of your choosing in your local machine and let that be "LocationC" for the purposes of these procedures. +  + **In summary:** + - Location A = VSTS Wiki repo + - Location B = Wiki extension repo + - Location C = Empty folder where we will run our migration tool + +8. Open a command prompt as an administrator and run **MigrateToVSTSWiki.exe**. This tool will copy the files from your existing wiki to the destination directory you provide. During copying, the tool converts the pages to be compliant with the VSTS wiki. + + `MigrateToVSTSWiki.exe /source:LocationB /destination:LocationC` + + For example: + - "E:\wiki\sampleWiki\_extensionWiki" is the folder in which the existing wiki files are present + - "E:\Temp\Wiki\New" is the empty folder into which the migrated files are to be copied. + +9. Next, remove all files from "LocationA" (if any) apart from the git related files such as .gitignore etc. + +10. Copy all files from "LocationC" and paste them into "LocationA". + +11. Run **git add .** to stage all the newly added files in "LocationA" for the commit. + +12. Run **git commit -m ** to commit the files that you have staged locally. + +13. Run **git push origin wikiMaster -f** . to push the changes to the default branch of the VSTS Wiki. + +>[!NOTE] +>Once you have migrated your Wiki extension files to the VSTS Wiki, you are ready to uninstall the Wiki extension. + +## Related notes + +- [Wiki page title naming conventions](add-edit-wiki.md#page-title-names) +- [Edit wiki pages offline](add-edit-wiki.md#edit-wiki-offline) +- [Source code for the wiki tools](https://github.com/Microsoft/vsts-wikiTools) +- [Git quickstart](../git/gitquickstart.md) + + +### Contributions +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + + diff --git a/docs/collaborate/mobile-work.md b/docs/collaborate/mobile-work.md new file mode 100644 index 00000000000..37bda0dcc82 --- /dev/null +++ b/docs/collaborate/mobile-work.md @@ -0,0 +1,118 @@ +--- +title: View and update work items via the mobile browser +description: View and update work items from your mobile client when using Visual Studio Team Services (VSTS) +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: 1B91BB7F-1205-4E51-B33C-1349D3117408 +ms.manager: douge +ms.author: kaelli +ms.date: 09/07/2017 +--- + +# View and update work items via the mobile browser + +**VSTS** + + + +>[!NOTE] +>Feature availability: The mobile browser is only available for VSTS at this time. To sign up for VSTS, go to [Visual Studio Team Services](https://www.visualstudio.com/team-services/). The mobile browser is not an app, but a mobile view into select features of VSTS. There is nothing to download. You access the mobile browser by clicking a link from a work item you receive in your mobile email application. + +With the mobile browser and work item form, you gain on-the-go features to stay on top of the latest updates made to work tracking. When you click any work item link on your mobile device, it will open a mobile-friendly version of the work item. From there, you can update the work item or access all work items assigned to you or that you're following. + +Mobile work item form + + +## Open the mobile work item form + +The mobile work item form will open when you click **View work item** from an email you receive from your mobile device. You'll receive this type of email under these circumstances: + +- Changes were made to a work item you're following +- You were **@mentioned** in a discussion +- A notification is sent based on the work item alerts you've set using [Manage personal notifications](../notifications/manage-personal-notifications.md). + +Email received in your mobile client + + +## Update a work item +Within the mobile form, you can do almost everything you can do from the [web portal form](../work/backlogs/add-work-items.md). Here are the actions you can take in the order they appear in the mobile form: + + * Add and remove tags + * View and add to the discussion, click on the comment to add to the discussion + * View and update any field within the form (Assign to, State, Area, Iteration, Description, and more) + * View and open a link within the Development section + * View History + * View and open a link from the Links tab + * Open and add an attachment from the Attachments tab + +Actions not available to you: + * You can't initiate a development operation + * You can't add a link + + +### Interact with mobile form controls + +Mobile form controls operate as follows: + +- Click any field to edit it and the form changes to a full-screen experience. For example, some of the most common actions such as changing the state of an item, moving to a different area path, adding an attachment, and creating/removing tags are all supported. +- When done, click the ![return icon](_img/mobile-work-return.png) return option. +- Remember to click the ![save icon](../work/_img/icons/icon-save-wi.png) save icon to save your changes! + +### Update status (change State) + +To update the state, click the state you want. + +Mobile work item form, Change State action + +### Add or remove tags + +To add a tag, type the text you want. + +Mobile work item form, Add or remove tags + +### View history + +Click the History tab to view history. + +Mobile work item form, View history + +## View and open work items in your activity lists + +From within the mobile work item form, you can access your account Work items hub. The mobile hub allows you to view and open work items which fall into these categories: +- **Assigned to me**: lists all work items assigned to you +- **Following**: lists all work items that you have elected to follow +- **My activity**: lists all work items that you have recently viewed or updated. + +The lists available from each page span all team projects that you work in. + +To access a list, first click the list control from the work item form you've opened. + +![Click the list icon](_img/mobile-work-click-list.png) + +Then, click **Work items**. + +![Click Work items](_img/mobile-work-click-work-items.png) + +The hub opens to the Assigned to me page. From there, you can click Following or My activity to access the other pages. To learn more about the account hub, see [Work effectively from your account hub](../connect/account-home-pages.md). + +Mobile work item form, Change State action + + +## Related notes + +Additional experiences are in the works to improve and expand on the mobile experience. For more information, see the blog post: [The mobile work item form (preview)](https://blogs.msdn.microsoft.com/visualstudioalm/2017/01/24/the-mobile-work-item-form/). + +- [Set personal notifications](../notifications/manage-personal-notifications.md) +- [Set team notifications](manage-team-notifications.md) +- [Follow a work item](follow-work-items.md) + + +### Provide feedback for the mobile experience + +Help us improve the mobile experience. + +To provide feedback, click the list control from the work item form and then click **Send Feedback**. To complete the feedback, select either the smile or frown and optionally enter a comment. + +Mobile work item form, Send feedback + + \ No newline at end of file diff --git a/docs/collaborate/preview-features.md b/docs/collaborate/preview-features.md new file mode 100644 index 00000000000..3d196e58693 --- /dev/null +++ b/docs/collaborate/preview-features.md @@ -0,0 +1,116 @@ +--- +title: Turn preview features on or off in VSTS & TFS +description: Enable/disable or activate/deactivate features in preview at the user, team project, or account level +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: FB4E044D-B916-4901-A322-C87C3581A90A +ms.manager: douge +ms.author: kaelli +ms.date: 06/01/2017 +--- + + +# Enable preview features + + VSTS | TFS 2018 | TFS 2017.1 + +>[!NOTE] +>Feature availability: The preview features you can enable or disable will differ depending on whether you work from Team Services or an on-premises TFS. Preview features become available first on VSTS and then subsequently are made available with an update to TFS. + +As new features are introduced, we're providing support for you to turn some of them on or off. That way, you can try them out, provide feedback, and work with those features that meet your requirements. + +Some features provide a new user interface and functionality, which can be managed per user or team member. Others support a default experience for the account and are managed by an account administrator. + +>[!NOTE] +>**Feature availability**: You can turn on or off the following features for VSTS (cloud service), or from the web portal of the listed on-premises TFS version or a later version. Visit the [Visual Studio Downloads page](https://www.visualstudio.com/downloads/download-visual-studio-vs) to get the latest TFS update. Additional resources may be required as annotated. To determine your platform or TFS version, see [Provide product and content feedback](../provide-feedback.md#platform-version). + + +> [!div class="mx-tdBreakAll"]   +> |[Preview features per user](#user-level) |[Preview features per account](#account-level) |  +> |-------------|----------| +> |- [New Account Landing page](../connect/account-home-pages.md)
    - [New Release Definition Editor](../build-release/archive/preview/release-definition-editor.md) (Team Services)
    - [Streamlined User Management](../accounts/add-account-users-assign-access-levels.md) (VSTS)|- [Combine email recipients](manage-team-notifications.md) (TFS 2017.1)
    - [Preview features per account](#account-level)
    - [New Account Landing page](../connect/account-home-pages.md)
    - [Preview features per account](#account-level)
    - [New Release Definition Editor](../build-release/archive/preview/release-definition-editor.md) (VSTS)
    - [Preview features per account](#account-level)[Streamlined User Management](../accounts/add-account-users-assign-access-levels.md) (VSTS)
    - [Preview features per account](#account-level)
    - [Team expansion for notifications](#team-expansion-notifications) (TFS 2017.1)
    - [Preview features per account](#account-level)[Wiki](#wiki) (VSTS) | + + +## Enable features for my use + +From time to time, a new feature is introduced in Preview mode, which allows you to turn it on or off. + +To enable or disable a feature in preview, access the Preview features option from your user account menu. + +Open Preview Features + +### New Account Landing Page + +>[!NOTE] +>For VSTS, each user can enable or disable the account hub. +> +>For TFS 2017.1, the account hub is automatically enabled for all users and cannot be disabled. + +Here, we enable the New Account Landing page. This hub is associated with the account collection and not any one team project or team. To learn more about this feature, see [Work effectively from your account hub](../connect/account-home-pages.md). When you enable the New Account Landing page, you also enable the project page where you can [share your project vision with your team](project-vision-status.md). + +Account Landing Page has been enabled + +If you have administrative privileges, you'll see a menu from which to choose whether the feature is for you, or for all users who work within the account. + +Preview features options, for me, logged-in user + + + + + +## Enable features at the account level (for all users) + +When you enable a feature at the account level, you essentially turn it on for all users of your account. Each user can then disable the feature if they so choose. + +>[!TIP] +>If you don't see the user/account menu option, then you aren't an account administrator. To get added as one, see [Add administrators to VSTS and TFS](../tfs-server/add-administrator-tfs.md). + +Preview features options for the account Preview features options for the account + + + + +### Team expansion for notifications + +>[!NOTE] +>**Feature availability**: You can enable/disable Team expansion for notifications from VSTS and TFS 2017.1 and later versions. + +Enable this feature for your account when you want notifications to be sent by default for all team-associated events. Such events include when pull requests are created or updated. Team admins can choose to opt-out of these notifications. See [Manage team notifications](manage-team-notifications.md). + + +### Wiki + +>[!NOTE] +>Feature availability: The built-in wiki is in Preview and available for VSTS at this time. If you were using the Wiki Marketplace extension, you can [migrate your existing pages to the new team project wiki](migrate-extension-wiki-pages.md). +> +You can enable a built-in Wiki for your team project or for an account. This feature is in preview and when enabled adds a **Wiki*** hub from which you can [view and edit wiki pages](add-edit-wiki.md). + diff --git a/docs/collaborate/project-vision-status.md b/docs/collaborate/project-vision-status.md new file mode 100644 index 00000000000..7dc06d384ca --- /dev/null +++ b/docs/collaborate/project-vision-status.md @@ -0,0 +1,166 @@ +--- +title: Share your project vision +description: View or update your project home page to share project vision, objectives, and activity for Visual Studio Team Services (VSTS) +ms.topic: get-started-article +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: A9ED2BF5-BD0B-4114-A7BD-693C5D747E16 +ms.manager: douge +ms.author: kaelli +ms.date: 08/29/2017 +--- + +# Share your project vision, view project activity + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015** + +> [!NOTE] +> **Feature availability**: The project page described in this topic is available for VSTS and TFS 2017.1 and later versions. It replaces the [Welcome page](#welcome-pages) used in TFS 2017 and earlier versions. + +You can quickly get started with a team project from the project page. You can share your project vision with your team, add team members, and check the latest activity. Use this page to leverage all the built-in DevOps functionality of VSTS and to perform the following activities: + + +> [!NOTE] +> The features and functions available from your project page depend on the source control—Git or Team Foundation Version Control (TFVC)—that you selected when you [created your team project](../accounts/create-team-project.md). + + +> [!div class="mx-tdBreakAll"]   +> |Git repository |TFVC repository  |K +> |-------------|----------|  +> |- Clone your project to your client computer
    - Push an existing repository from the command line
    - Import a repository
    - Initialize a README or gitignore
    - Setup a build from an external repository
    - [Add team members](#cross-project-activity)
    - [View code, build, and work activity](#cross-project-activity)|- Setup a build
    - Add a README for your project
    - [Add team members](#cross-project-activity)
    - [View code, build, and work activity](#cross-project-activity) + + +## Open the project home page +From your web browser, open the team project drop down menu and select the home page. If you don't have a team project yet, create one in [VSTS](../accounts/set-up-vs.md). + +Open the Project Home Page  + + + +## Get started with a new team project + +Upon [adding another team project](../accounts/create-team-project.md) to your account or collection, you'll see the get started page. This page guides you to get started quickly by adding code to your repository when you choose one of the options to clone, push, import, or simply initialize a repo. You can easily get started by adding members, setting up builds, or adding work from this page. + + +**Git repository** + +Git new project + + +**TFVC repository** + +TFVC new project + + +##Share your project vision + +You can share your project vision and objective, as well as ways for team members to contribute to the project through a Project readme. + +To edit the project README.md file, click the Edit button. You'll need to be a member of the [Project Administrators group](../security/set-project-collection-level-permissions.md) or have your Edit project-level information permission set to allow. + +You can use Markdown language to format the README file and add images. To learn more about adding a README file, see [Create a README for your repo](../git/create-a-readme.md) and [Markdown guidance](../reference/markdown-guidance.md). + +Example project home page + +Use these pages to orient contributors to working within your project. Consider adding guidance about: +- The project focus +- Prerequisites +- Setting up the environment +- Tips for getting things done within the project +- Purpose or use of specific files +- Project-specific terms and acronyms +- Workflow guidance about committing or uploading changes and adding branches +- Project sponsors or contacts + + + +## View cross project activity + +In addition to sharing information, the project home page pulls data from the various functional hubs to give visitors a bird's-eye view of your project activity. + +Project Home Page, Activity + + +To add team members or manage membership in the team project, click ![Add team members button](_img/project-home-page-add-team-members.png) Add button. + + + + +## Repository welcome pages + +> [!NOTE] +> **Feature availability**: The Welcome pages are available from the web portal of TFS 2017 and earlier versions. + +Here's an example of a Welcome page: + +![Sample Welcome Markdown page](_img/markdown-welcome-page.png) + +Use these pages to orient contributors to working within a Git repository or Team Foundation version (TFVC) control project folder. Consider adding guidance about: +- The project focus +- Prerequisites +- Setting up the environment +- Tips for getting things done within the project +- Purpose or use of specific files +- Project-specific terms and acronyms +- Workflow guidance about committing or uploading changes and adding branches +- Project sponsors or contacts + + +### Edit or create additional pages + +> [!NOTE] +> If you set policies on the Git repository, changes to the welcome page must be done as a pull request. + +1. You can start editing directly from the Welcome page. + + Web portal, Project page, Edit Welcome Markdown page + + To edit a page, you must be a contributor to the repository or branch or have the Contribute permissions set to allow. + +2. To add another page, simply enter a link to a new Markdown file that doesn't yet exist, for example: + + `[page-1](./page-1.md)` + +3. After you save the file, click the link. Respond to the prompt to edit the file and commit it to your repository. + + + +### Location of the Welcome pages +The Welcome page corresponds to the README.md file defined in the Git repository or TFVC project folder (i.e. $/TeamProject/ReadMe.md). Additional pages you create show up in the same location. + +Web portal, Code hub, Markdown pages in the repository + +You can edit and manage these files in the same way you manage all other files under source control. + +####Git repositories +For Git projects, the README.md file needs to be at the root of each repository in the default branch. For Git based projects the left pane supports navigation to other repositories. A separate Welcome page/README.md file can be created for each repository. + +####TFVC projects +For TFVC projects the README.md file needs to be at the root of your team project folder (i.e. $/TeamProject/README.md). + +Any additional Markdown files you have (ones with a *.md extension) in the root of the project folder will also show up in the left pane for easy navigation between them so you can provide additional information. + + +## Try this next + +> [!div class="nextstepaction"] +> [Work effectively from your account hub](../connect/account-home-pages.md) + + +## Related notes + +- [Markdown guidance](../reference/markdown-guidance.md) + + + +### Required permissions + +To edit information on the team project page or manage team membership, you must be a member of the [Project Administrators group](../security/set-project-collection-level-permissions.md) or have your **Edit project-level information** permission set to allow. + +To view the team project page, you must be a valid member of the team project. For more information, see [Permissions and groups, Valid user groups](../security/about-permissions.md#validusers). + + + + + \ No newline at end of file diff --git a/docs/collaborate/set-favorites.md b/docs/collaborate/set-favorites.md new file mode 100644 index 00000000000..c3bfd5b6105 --- /dev/null +++ b/docs/collaborate/set-favorites.md @@ -0,0 +1,121 @@ +--- +title: Set personal or team favorites in VSTS or TFS +description: Quickly access objects by favoriting them either for your use or the team's use +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: 473E452D-59F7-4F6F-97C6-657ECD99ADCB +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 09/01/2017 +--- + +# Set personal or team favorites + +**VSTS | TFS 2017.1** + + + +As your code base, work tracking efforts, developer operations, and organization grows, you'll want to be able to quickly navigate to those object of interest to you and your team. Setting favorites allows you to do just that. + +This topic shows you how to:   + +> [!div class="checklist"]    +> * Favorite a repository, build definition, shared query, delivery plan, or test plan +> * Favorite a team or team project +> * View your personal favorites        +> * Unfavorite an object    + + +> [!NOTE] +> Changes based on preview features. + +You can set favorites for yourself or your team. You can set them for these objects, from the hub or page listed: + +- Code repository -> **Code>Branches** (personal favorite only) +- Build definition -> **Build & Release>Queries** +- Queries -> **Work>Queries** +- Delivery plans -> **Work>Plans** (personal favorite only) +- Test Plans -> **Test>Test Plans** (personal favorite only) +- Team project or team -> **Account>Projects** (personal favorite only) + + +Delivery Plans requires installation of the [Delivery Plans extension](../work/scale/review-team-plans.md). + +## Favorite a code repository + +From your web browser, open the **Code** hub, open the repository menu and click the ![favorites](../connect/_img/icon-favorite-star.png) star icon next to the repository you want to favorite. + +Web portal, Code, Favorite a repo + +## Favorite a build definition + +From your web browser, open the **Build-Release** hub, **Builds>All Definitions** page. Next, open the context menu of the build definition you want to favorite, and then select **Add to my favorites** or **Add to team favorites**. + +Web portal, Build & Release, Builds, Add to my favorites + +## Favorite a shared query + +From your web browser, open the **Work** hub, Queries page. Next, open the context menu of the shared query you want to favorite, and then select **Add to my favorites** or **Add to team favorites**. + +Web portal, Work, Queries, Add to my favorites + +## Favorite a Delivery Plan + +To mark a Delivery Plan as a favorite, open the **Work>Plans** page and click the ![favorites](../connect/_img/icon-favorite-star.png) star icon next to the Delivery Plan. + +## Favorite a test plan + +To mark a test plan as a favorite, open the **Test>Test Plans** page and click the ![favorites](../connect/_img/icon-favorite-star.png) star icon next to a test plan from the menu that shows All test plans. + + +## Favorite a team or team project + +0. Open your account page by clicking the ![project icon](../_img/icons/project-icon.png) project icon as shown from anywhere in the web portal. + + Open the Account home, Projects page + +0. You'll see something similar to the following welcome page. + + Account home, Projects page + +0. From the **Projects** page, click the ![favorites](../connect/_img/icon-favorite-star.png) star icon next to the team or team project you want to favorite. + + + +## View personal favorites through your account hub + +From your account hub, open the **Favorites** page to quickly access any object or item that you've marked as a favorite. + +Account home, Favorites page + + +## Unfavorite an object + +You can unfavorite an object from your account hub by going to your account hub **Favorites** page and clicking the ![favorited icon](../_img/icons/icon-favorited.png) star icon of a currently favorited object. + +Similarly, you can unfavorite an object from the same page where you favorited it. + + + + + +## Try this next + +> [!div class="nextstepaction"] +> [Work effectively from the account home page](../connect/account-home-pages.md) +> or +> [Manage personal notifications](../notifications/manage-personal-notifications.md) diff --git a/docs/collaborate/toc.yml b/docs/collaborate/toc.yml new file mode 100644 index 00000000000..cda45bf6c0e --- /dev/null +++ b/docs/collaborate/toc.yml @@ -0,0 +1,34 @@ +- name: "READMEs & Wikis" + href: index.md +- name: Overview + items: + - name: "About READMEs & Wikis" + href: about-readme-wiki.md +- name: Quickstarts + items: + - name: Share your project vision + href: project-vision-status.md +- name: Tutorials + items: + - name: "Add & edit a wiki" + href: add-edit-wiki.md +- name: Concepts + items: + - name: Create a readme for your repo + href: /vsts/git/create-a-readme?toc=/vsts/collaborate/toc.json&bc=/vsts/collaborate/breadcrumb/toc.json + - name: Share work plans + href: /vsts/work/track/share-plans?toc=/vsts/collaborate/toc.json&bc=/vsts/collaborate/breadcrumb/toc.json +- name: How-to guides + items: + - name: "Manage README & Wiki permissions" + href: manage-readme-wiki-permissions.md +- name: Reference + items: + - name: Markdown guidance + href: /vsts/reference/markdown-guidance?toc=/vsts/collaborate/toc.json&bc=/vsts/collaborate/breadcrumb/toc.json + - name: Navigate in the web portal + href: /vsts/connect/work-web-portal?toc=/vsts/collaborate/toc.json&bc=/vsts/collaborate/breadcrumb/toc.json +- name: Resources + items: + - name: Dashboards + href: /vsts/report/dashboards?toc=/vsts/report/toc.json diff --git a/docs/concepts.md b/docs/concepts.md new file mode 100644 index 00000000000..0cedc9824f7 --- /dev/null +++ b/docs/concepts.md @@ -0,0 +1,140 @@ +--- +title: Key concepts for working with both VSTS & TFS +description: Understand the key concepts that support the hosted cloud offering of Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 76ED7BD4-BD95-450F-BA33-649B80C23BE5 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Key concepts for working with VSTS and TFS + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015** + +The set of platforms, services, and tools you have access to through Visual Studio Team Services (VSTS) can be overwhelming. Before you start using our products, you'll want to become familiar with how they fit together. You'll gain that understanding here as well as pointers to additional topics and tutorials to gain confidence in using our products to develop your software. + + + +##Collaborative, integrated software development + +VSTS, our hosted cloud offering, and Team Foundation Server (TFS), our on-premises platform, provide small teams as well as enterprises the services and tools to support developing and continuously deploying software. Even sole developers can use our platforms to manage their software and deploy their apps. + +The three main areas that support software development include: + +- Source control to manage versioning of software files +- Tracking tools to support planning and tracking work, code defects, issues and more +- DevOps tools to support building, testing, and continuous release of software apps. + +### Source control + +Source or version control systems allow developers to collaborate on code and track changes made to the code base. Source control is an essential tool for multi-developer projects. + +Our systems support two types of source control: Git (distributed) or Team Foundation Version Control (TFVC), a centralized, client-server system. Both systems enable you to check-in files and organize files within folders, branches, and repositories. + +With Git, each developer has a copy on their dev machine of the source repository including all branch and history information. Each developer works directly with his or her own local repository, and changes are shared between repositories as a separate step. + +Developers can commit each set of changes and perform version control operations such as history and compare without a network connection. Branches are lightweight. When devs need to switch contexts, they create a private local branch. Devs can quickly switch from one branch to another to pivot among different variations of the codebase. Later, they can merge, publish, or dispose of the branch. + +>[!NOTE] +>Git in VSTS and TFS is standard Git. You can use Visual Studio with third-party Git services, and you can also use third-party Git clients with TFS. + +With TFVC, devs have only one version of each file on their dev machines. Historical data is maintained only on the server. Branches are path-based and created on the server. + + +### Work tracking and Agile tools +Software development projects require ways to easily share information and track the status of work, tasks, issues, or code defects. In the past, you might have planned and track work using one or more tools such as Microsoft Excel, Microsoft Project, a bug tracking system, or a combination of tools. Now, many teams have adopted Agile methods and practices to support planning and development. + +Our systems provide several types of work items which you use to track features, requirements, user stories, tasks, bugs, and issues. Each work item is associated with a work item type and a set of fields that team members update as information becomes available and progress is made. + +For planning purposes, you have access to several types of backlogs and boards to support the main Agile methods—Scrum, Kanban, or Scrumban. + +- Product backlog, used to create and prioritize stories or requirements +- Kanban, used to visualize and manage the flow of work as it moves from inception to in progress to done +- Sprint backlogs, used to plan work to complete during a sprint cycle, a regular 2 to 4 week cadence teams use when implementing Scrum +- Task board, used during daily Scrum meetings to review work completed, remaining, or blocked + +Project managers and developers share information by tracking work items on the backlogs and boards. Useful charts and dashboards round out the picture helping teams monitor progress and trends. + + +### DevOps and continuous integration + +Rapid and reliable release of software comes from automating as many processes as possible. Our systems support build, test, and release automation. + +- You can define builds to automatically run whenever a team member checks in code changes +- Your build definitions can include instructions to run tests after the build runs +- Release definitions support managing deployment of your software builds to staging or production environments + +![Multiple platform continuous integration](_img/multi-platform.png) + +## Scaling + +Both VSTS and TFS are enterprise-ready, supporting teams of any size, from tens to thousands. VSTS provides a scalable, reliable, and globally available hosted service. It is backed by a 99.9% SLA, monitored by our 24×7 operations team, and available in local data centers around the world. + +You can scale the system in the following ways: +- Within a team project, you can add teams +- Within a project collection, you can add team projects +- Within source control, you can add repositories and branches +- To manage a large number of users, you can manage access through Azure Active Directory (cloud) or Active Directory (on-premises) + +### Software projects versus team projects + +To build and deploy a software application, you begin by defining a software project. Software projects differ from team projects. + +A team project defines a process and data storage in which you manage your software projects from planning to deployment. When you connect to VSTS or an on-premises TFS, you connect to an account or team project collection. Within that collection, one or more team projects may be defined. At a minimum, at least one team project must be created in order to use the system. + +When you create your team project, a team of the same name is automatically created. For small teams, this is sufficient. However, for enterprise-level organizations, it may be necessary to scale up, to create additional teams and/or team projects. These can be created within the single account or collection. + + + + + + + + + +
    +**Single team project, team defined within an account/collection** +![Single collection-project-team conceptual image](connect/_img/web-portal-account-project-team-concept.png) + +**Multiple team projects and teams defined within an account/collection** +![Scaled collection-project-team conceptual image](connect/_img/web-portal-account-project-team-scale-concept.png) +
    + +The collection-project-team structure provides teams a high-level of autonomy to configure their tools in ways that work for them. It also supports administrative tasks to occur at the appropriate level. + +###Scaling Agile across the enterprise +To learn how Microsoft transitioned from waterfall to Agile, review the stories and short videos available here: [Scaling Agile Across the Enterprise](https://stories.visualstudio.com/scaling-agile-across-the-enterprise/). + + +## Customization + +You can configure and customize most elements to support your business needs or the way your team works. + +- Source control: You can apply branch policies, define branch permissions, and set up continuous integration +- Work tracking: You can customize work item types, add custom fields, and set permissions to control who can modify what +- Build & Release: You can fully customize your build and release definitions, defining build steps, release environments, and deployment +- Test: You can define and configure your test plans, test suites, and test cases as well as configure test environments; additionally you can add test steps within your build definitions +- Dashboard: Each team can configure their set of dashboards to share information and monitor their progress + +##Extensibility + +In addition to all the pre-built functionality available to you, you can add to it in the following ways: + +- [Visual Studio Marketplace](https://marketplace.visualstudio.com) : Provides extensions that you can install either on your account, server, or Visual Studio client +- [Service hooks](./service-hooks/index.md): Enable you to perform tasks on other services when events happen within your team project hosted on VSTS or TFS +- [REST APIs](https://visualstudio.com/integrate/api/overview.md): Provide the ability to create custom extensions that plug into VSTS or TFS +- [Visual Studio SDK](https://msdn.microsoft.com/library/bb166441.aspx): Helps you extend Visual Studio features or integrate new features into Visual Studio. You can distribute your extensions to other users, as well as to the Visual Studio Marketplace. + + +##Related notes +- [Essential services](services.md) +- [Client-server tools](tools.md) +- [Software development roles](roles.md) +- [Pricing](https://www.visualstudio.com/team-services/pricing/) + + diff --git a/docs/connect/_img/account-home-favorites.png b/docs/connect/_img/account-home-favorites.png new file mode 100644 index 00000000000..759760691c2 Binary files /dev/null and b/docs/connect/_img/account-home-favorites.png differ diff --git a/docs/connect/_img/account-home-projects-hover-links.png b/docs/connect/_img/account-home-projects-hover-links.png new file mode 100644 index 00000000000..3975dc6b3a9 Binary files /dev/null and b/docs/connect/_img/account-home-projects-hover-links.png differ diff --git a/docs/connect/_img/account-home-projects-new-project.png b/docs/connect/_img/account-home-projects-new-project.png new file mode 100644 index 00000000000..624c9544ccf Binary files /dev/null and b/docs/connect/_img/account-home-projects-new-project.png differ diff --git a/docs/connect/_img/account-home-projects.png b/docs/connect/_img/account-home-projects.png new file mode 100644 index 00000000000..c5b13e28d51 Binary files /dev/null and b/docs/connect/_img/account-home-projects.png differ diff --git a/docs/connect/_img/account-home-pull-requests.png b/docs/connect/_img/account-home-pull-requests.png new file mode 100644 index 00000000000..a201f61b1d0 Binary files /dev/null and b/docs/connect/_img/account-home-pull-requests.png differ diff --git a/docs/connect/_img/account-home-remove-from-favorites.png b/docs/connect/_img/account-home-remove-from-favorites.png new file mode 100644 index 00000000000..8986058b0a2 Binary files /dev/null and b/docs/connect/_img/account-home-remove-from-favorites.png differ diff --git a/docs/connect/_img/account-home-rooms.png b/docs/connect/_img/account-home-rooms.png new file mode 100644 index 00000000000..1e2fa97adbb Binary files /dev/null and b/docs/connect/_img/account-home-rooms.png differ diff --git a/docs/connect/_img/account-home-search-projects-design.png b/docs/connect/_img/account-home-search-projects-design.png new file mode 100644 index 00000000000..7faa1f5dec6 Binary files /dev/null and b/docs/connect/_img/account-home-search-projects-design.png differ diff --git a/docs/connect/_img/account-home-welcome.png b/docs/connect/_img/account-home-welcome.png new file mode 100644 index 00000000000..6af0108ea96 Binary files /dev/null and b/docs/connect/_img/account-home-welcome.png differ diff --git a/docs/connect/_img/account-home-work-assigned-to-me.png b/docs/connect/_img/account-home-work-assigned-to-me.png new file mode 100644 index 00000000000..6e08e72d905 Binary files /dev/null and b/docs/connect/_img/account-home-work-assigned-to-me.png differ diff --git a/docs/connect/_img/account-home-work-followed.png b/docs/connect/_img/account-home-work-followed.png new file mode 100644 index 00000000000..bfcadea2568 Binary files /dev/null and b/docs/connect/_img/account-home-work-followed.png differ diff --git a/docs/connect/_img/account-work-my-activity.png b/docs/connect/_img/account-work-my-activity.png new file mode 100644 index 00000000000..36ec29bd08a Binary files /dev/null and b/docs/connect/_img/account-work-my-activity.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/IC657077.png b/docs/connect/_img/connect-team-projects-tfs/IC657077.png new file mode 100644 index 00000000000..fc7b483d68d Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/IC657077.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/IC658167.png b/docs/connect/_img/connect-team-projects-tfs/IC658167.png new file mode 100644 index 00000000000..81223ef0e14 Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/IC658167.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/IC671574.png b/docs/connect/_img/connect-team-projects-tfs/IC671574.png new file mode 100644 index 00000000000..077063e9ee1 Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/IC671574.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/IC719958.png b/docs/connect/_img/connect-team-projects-tfs/IC719958.png new file mode 100644 index 00000000000..cdc3be9fb79 Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/IC719958.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/IC719959.png b/docs/connect/_img/connect-team-projects-tfs/IC719959.png new file mode 100644 index 00000000000..428d9176ccf Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/IC719959.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/IC719960.png b/docs/connect/_img/connect-team-projects-tfs/IC719960.png new file mode 100644 index 00000000000..d69ee7a7085 Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/IC719960.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/IC719961.png b/docs/connect/_img/connect-team-projects-tfs/IC719961.png new file mode 100644 index 00000000000..9124b151a75 Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/IC719961.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/choose-different-user-vs2017.png b/docs/connect/_img/connect-team-projects-tfs/choose-different-user-vs2017.png new file mode 100644 index 00000000000..517d3164e61 Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/choose-different-user-vs2017.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/vs2017_add_tfs_server.png b/docs/connect/_img/connect-team-projects-tfs/vs2017_add_tfs_server.png new file mode 100644 index 00000000000..6b9b4d0cdf9 Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/vs2017_add_tfs_server.png differ diff --git a/docs/connect/_img/connect-team-projects-tfs/vs2017_connect_dialog.png b/docs/connect/_img/connect-team-projects-tfs/vs2017_connect_dialog.png new file mode 100644 index 00000000000..c7aed05b453 Binary files /dev/null and b/docs/connect/_img/connect-team-projects-tfs/vs2017_connect_dialog.png differ diff --git a/docs/connect/_img/connect-tp-browse.png b/docs/connect/_img/connect-tp-browse.png new file mode 100644 index 00000000000..204d77127f0 Binary files /dev/null and b/docs/connect/_img/connect-tp-browse.png differ diff --git a/docs/connect/_img/connect-tp-open-profile.png b/docs/connect/_img/connect-tp-open-profile.png new file mode 100644 index 00000000000..622b714eee1 Binary files /dev/null and b/docs/connect/_img/connect-tp-open-profile.png differ diff --git a/docs/connect/_img/connect-tp-open-web-portal.png b/docs/connect/_img/connect-tp-open-web-portal.png new file mode 100644 index 00000000000..2a3b695a62e Binary files /dev/null and b/docs/connect/_img/connect-tp-open-web-portal.png differ diff --git a/docs/connect/_img/connect-tp-switch-context.png b/docs/connect/_img/connect-tp-switch-context.png new file mode 100644 index 00000000000..bfdd88ff94a Binary files /dev/null and b/docs/connect/_img/connect-tp-switch-context.png differ diff --git a/docs/connect/_img/connect-tp-tfs-web-portal.png b/docs/connect/_img/connect-tp-tfs-web-portal.png new file mode 100644 index 00000000000..f821eeadeba Binary files /dev/null and b/docs/connect/_img/connect-tp-tfs-web-portal.png differ diff --git a/docs/connect/_img/icon-favorite-star.png b/docs/connect/_img/icon-favorite-star.png new file mode 100644 index 00000000000..af0fee33365 Binary files /dev/null and b/docs/connect/_img/icon-favorite-star.png differ diff --git a/docs/connect/_img/icon-favorited.png b/docs/connect/_img/icon-favorited.png new file mode 100644 index 00000000000..3ae00263960 Binary files /dev/null and b/docs/connect/_img/icon-favorited.png differ diff --git a/docs/connect/_img/icon-followed.png b/docs/connect/_img/icon-followed.png new file mode 100644 index 00000000000..eabdea31069 Binary files /dev/null and b/docs/connect/_img/icon-followed.png differ diff --git a/docs/connect/_img/icons/checkmark.png b/docs/connect/_img/icons/checkmark.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/connect/_img/icons/checkmark.png differ diff --git a/docs/connect/_img/te-connect-local-git-repos.png b/docs/connect/_img/te-connect-local-git-repos.png new file mode 100644 index 00000000000..3854f6004a5 Binary files /dev/null and b/docs/connect/_img/te-connect-local-git-repos.png differ diff --git a/docs/connect/_img/te-connect-manage.png b/docs/connect/_img/te-connect-manage.png new file mode 100644 index 00000000000..f2dbe31910c Binary files /dev/null and b/docs/connect/_img/te-connect-manage.png differ diff --git a/docs/connect/_img/te-connect-page-connect-to-team-project.png b/docs/connect/_img/te-connect-page-connect-to-team-project.png new file mode 100644 index 00000000000..b9952c0fb7e Binary files /dev/null and b/docs/connect/_img/te-connect-page-connect-to-team-project.png differ diff --git a/docs/connect/_img/te-home-page-git-repo.png b/docs/connect/_img/te-home-page-git-repo.png new file mode 100644 index 00000000000..c6e3c300d19 Binary files /dev/null and b/docs/connect/_img/te-home-page-git-repo.png differ diff --git a/docs/connect/_img/te-home-page-tfvc-repo.png b/docs/connect/_img/te-home-page-tfvc-repo.png new file mode 100644 index 00000000000..c3df7ec4099 Binary files /dev/null and b/docs/connect/_img/te-home-page-tfvc-repo.png differ diff --git a/docs/connect/_img/te-tfvc-configure-workspace.png b/docs/connect/_img/te-tfvc-configure-workspace.png new file mode 100644 index 00000000000..ec136b09301 Binary files /dev/null and b/docs/connect/_img/te-tfvc-configure-workspace.png differ diff --git a/docs/connect/_img/user-cf-build-mine.png b/docs/connect/_img/user-cf-build-mine.png new file mode 100644 index 00000000000..eaf45dd71a2 Binary files /dev/null and b/docs/connect/_img/user-cf-build-mine.png differ diff --git a/docs/connect/_img/user-cf-filter-by-name-kanban-board.png b/docs/connect/_img/user-cf-filter-by-name-kanban-board.png new file mode 100644 index 00000000000..d3abe6394ef Binary files /dev/null and b/docs/connect/_img/user-cf-filter-by-name-kanban-board.png differ diff --git a/docs/connect/_img/user-cf-pull-request-widget.png b/docs/connect/_img/user-cf-pull-request-widget.png new file mode 100644 index 00000000000..1a774e73f7f Binary files /dev/null and b/docs/connect/_img/user-cf-pull-request-widget.png differ diff --git a/docs/connect/_img/user-cf-pull-requests-mine.png b/docs/connect/_img/user-cf-pull-requests-mine.png new file mode 100644 index 00000000000..17ef84861ad Binary files /dev/null and b/docs/connect/_img/user-cf-pull-requests-mine.png differ diff --git a/docs/connect/_img/user-cf-queries.png b/docs/connect/_img/user-cf-queries.png new file mode 100644 index 00000000000..ab289974c8c Binary files /dev/null and b/docs/connect/_img/user-cf-queries.png differ diff --git a/docs/connect/_img/web-portal-account-project-team-concept.png b/docs/connect/_img/web-portal-account-project-team-concept.png new file mode 100644 index 00000000000..f549a67cf75 Binary files /dev/null and b/docs/connect/_img/web-portal-account-project-team-concept.png differ diff --git a/docs/connect/_img/web-portal-account-project-team-scale-concept.png b/docs/connect/_img/web-portal-account-project-team-scale-concept.png new file mode 100644 index 00000000000..7069892d620 Binary files /dev/null and b/docs/connect/_img/web-portal-account-project-team-scale-concept.png differ diff --git a/docs/connect/_img/web-portal-admin-account-settings-new-nav.png b/docs/connect/_img/web-portal-admin-account-settings-new-nav.png new file mode 100644 index 00000000000..9a4acf31b84 Binary files /dev/null and b/docs/connect/_img/web-portal-admin-account-settings-new-nav.png differ diff --git a/docs/connect/_img/web-portal-admin-project-settings-new-nav.png b/docs/connect/_img/web-portal-admin-project-settings-new-nav.png new file mode 100644 index 00000000000..2d8f4af6dbe Binary files /dev/null and b/docs/connect/_img/web-portal-admin-project-settings-new-nav.png differ diff --git a/docs/connect/_img/web-portal-admin-team-settings-new-nav.png b/docs/connect/_img/web-portal-admin-team-settings-new-nav.png new file mode 100644 index 00000000000..8d5b4be563b Binary files /dev/null and b/docs/connect/_img/web-portal-admin-team-settings-new-nav.png differ diff --git a/docs/connect/_img/web-portal-admin-team-tfs.png b/docs/connect/_img/web-portal-admin-team-tfs.png new file mode 100644 index 00000000000..34aebb5fd8c Binary files /dev/null and b/docs/connect/_img/web-portal-admin-team-tfs.png differ diff --git a/docs/connect/_img/web-portal-assigned-to-me-widget.png b/docs/connect/_img/web-portal-assigned-to-me-widget.png new file mode 100644 index 00000000000..532a6a061fc Binary files /dev/null and b/docs/connect/_img/web-portal-assigned-to-me-widget.png differ diff --git a/docs/connect/_img/web-portal-intro.png b/docs/connect/_img/web-portal-intro.png new file mode 100644 index 00000000000..b4561f7f311 Binary files /dev/null and b/docs/connect/_img/web-portal-intro.png differ diff --git a/docs/connect/_img/web-portal-open-account-settings-new-nav.png b/docs/connect/_img/web-portal-open-account-settings-new-nav.png new file mode 100644 index 00000000000..ce151027568 Binary files /dev/null and b/docs/connect/_img/web-portal-open-account-settings-new-nav.png differ diff --git a/docs/connect/_img/web-portal-open-project-settings-new-nav.png b/docs/connect/_img/web-portal-open-project-settings-new-nav.png new file mode 100644 index 00000000000..4b602191a21 Binary files /dev/null and b/docs/connect/_img/web-portal-open-project-settings-new-nav.png differ diff --git a/docs/connect/_img/web-portal-open-team-settings-new-nav.png b/docs/connect/_img/web-portal-open-team-settings-new-nav.png new file mode 100644 index 00000000000..8acfd4f32f6 Binary files /dev/null and b/docs/connect/_img/web-portal-open-team-settings-new-nav.png differ diff --git a/docs/connect/_img/web-portal-project-admin-tfs.png b/docs/connect/_img/web-portal-project-admin-tfs.png new file mode 100644 index 00000000000..bc28606dbef Binary files /dev/null and b/docs/connect/_img/web-portal-project-admin-tfs.png differ diff --git a/docs/connect/_img/web-portal-user-context-tfs-2017.png b/docs/connect/_img/web-portal-user-context-tfs-2017.png new file mode 100644 index 00000000000..d599d1be838 Binary files /dev/null and b/docs/connect/_img/web-portal-user-context-tfs-2017.png differ diff --git a/docs/connect/_img/web-portal-user-context.png b/docs/connect/_img/web-portal-user-context.png new file mode 100644 index 00000000000..08a0e313526 Binary files /dev/null and b/docs/connect/_img/web-portal-user-context.png differ diff --git a/docs/connect/_img/work-team-explorer/IC547418.png b/docs/connect/_img/work-team-explorer/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/connect/_img/work-team-explorer/IC547418.png differ diff --git a/docs/connect/_img/work-team-explorer/IC774825.png b/docs/connect/_img/work-team-explorer/IC774825.png new file mode 100644 index 00000000000..4d8bd5fafdc Binary files /dev/null and b/docs/connect/_img/work-team-explorer/IC774825.png differ diff --git a/docs/connect/_img/work-team-explorer/IC774826.png b/docs/connect/_img/work-team-explorer/IC774826.png new file mode 100644 index 00000000000..6976e825057 Binary files /dev/null and b/docs/connect/_img/work-team-explorer/IC774826.png differ diff --git a/docs/connect/_img/work-tfs-web-portal/IC623347.png b/docs/connect/_img/work-tfs-web-portal/IC623347.png new file mode 100644 index 00000000000..9780a8d9a1d Binary files /dev/null and b/docs/connect/_img/work-tfs-web-portal/IC623347.png differ diff --git a/docs/connect/_img/work-web-portal_admin-context-project-level-team-services.png b/docs/connect/_img/work-web-portal_admin-context-project-level-team-services.png new file mode 100644 index 00000000000..ce9e5f7eee5 Binary files /dev/null and b/docs/connect/_img/work-web-portal_admin-context-project-level-team-services.png differ diff --git a/docs/connect/_img/work-web-portal_admin-context-project-level-tfs-2017-1.png b/docs/connect/_img/work-web-portal_admin-context-project-level-tfs-2017-1.png new file mode 100644 index 00000000000..e7c13528f3b Binary files /dev/null and b/docs/connect/_img/work-web-portal_admin-context-project-level-tfs-2017-1.png differ diff --git a/docs/connect/_img/wwp-user-context-team-services.png b/docs/connect/_img/wwp-user-context-team-services.png new file mode 100644 index 00000000000..ab3dcd110f2 Binary files /dev/null and b/docs/connect/_img/wwp-user-context-team-services.png differ diff --git a/docs/connect/_img/wwp-user-context-tfs-2017-1.png b/docs/connect/_img/wwp-user-context-tfs-2017-1.png new file mode 100644 index 00000000000..c8e70ae9192 Binary files /dev/null and b/docs/connect/_img/wwp-user-context-tfs-2017-1.png differ diff --git a/docs/connect/_shared/when-to-refresh-client.md b/docs/connect/_shared/when-to-refresh-client.md new file mode 100644 index 00000000000..b37d6ce4e6b --- /dev/null +++ b/docs/connect/_shared/when-to-refresh-client.md @@ -0,0 +1,9 @@ +To avoid potential errors, you should refresh your client application under the following circumstances: + +- Process changes are made +- Work item type definitions are added, removed, renamed or updated +- Area or iteration paths are added, removed, renamed or updated +- Users are added to or removed from security groups or permissions are updated +- A team member adds a new shared query or changes the name of a shared query +- A build definition is added or deleted +- A team or team project is added or deleted. \ No newline at end of file diff --git a/docs/connect/account-home-pages.md b/docs/connect/account-home-pages.md new file mode 100644 index 00000000000..319cd4ab58e --- /dev/null +++ b/docs/connect/account-home-pages.md @@ -0,0 +1,160 @@ +--- +title: Navigate using the account hub pages in VSTS & TFS +description: Quickly link to work items, pull requests, team projects, and more using your account home page of the web portal for VSTS and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: B4406575-4D4D-42E3-88FD-93830546B67F +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# Work effectively from your account hub + +**VSTS | TFS 2018 | TFS 2017.1** + +> [!NOTE] +> **Feature availability**: The features described in this topic are available from Visual Studio Team Services (VSTS) and TFS 2017.1 and later versions. To upgrade to TFS 2017.1, go to the [Visual Studio downloads page](https://www.visualstudio.com/downloads/download-visual-studio-vs). + +From your account, you gain access to a number of page views that are particularly helpful if you work in several team projects. These pages provide quick access and filter functions to support your work within a single team project or work you're doing across several projects. + +For example, you can quickly access and navigate to work of interest from the following Account hubs: + +- **Projects**: Team projects and teams within the projects that you work in +- **Favorites**: Items—such as build definitions, repositories, shared queries, and more —that you've favorited +- **Work items**: Work items assigned to you, that you're following, or that you've recently viewed or updated +- **Pull requests**: Pull requests you've initiated or that are relevant to you across all team projects you work in +- **Rooms**: Team rooms you use to collaborate with other team members. + +To access these pages, open your web browser and click the + +https://AccountName.visualstudio.com/_projects + + +You'll see something similar to the following welcome page. + +Account home, Projects page + + +## Projects: Navigate to a team project +From the **Projects** page you can quickly navigate to a team project or a team that you've accessed or worked in previously. Projects are listed in the order you've last accessed, with the most recent five projects accessed appearing first. All projects you've accessed are listed within the **All** section. + +Account home, Projects page + +As you hover over the project, you can click one of the links to go to the Home (dashboards), Code, Work, Build & Release, or Test hub of the team project. Click the ![favorites](_img/icon-favorite-star.png) star icon to mark the team project as a favorite. + +Account home, Projects page, hover over a team project + +### Filter projects and teams +If a project isn't listed, you can find it by searching for it using the *Filter projects and teams* search box. Simply type a keyword contained within the name of a team project or team. Here we type **Design** to find the Contoso project Design team. + +Account home, Projects page, filter on Design + +### Add a team project +If you're an account administrator or are a member of the Project Collection Administrators group, the New Project button is shown. Click New Project to [add a team project](../accounts/create-team-project.md). + +Account home, Projects page, New team project + + +## Favorites: Open items you've marked as Favorites + +Open the **Favorites** page to quickly access any object or item that you've marked as a favorite. + +Account home, Favorites page + +Favorited objects include: + +- Team projects +- Repositories +- Work item queries +- Plans (requires installation of the [Delivery Plans extension](../work/scale/review-team-plans.md)) +- Build definitions +- Test plans + +### Mark an object as a favorite + +- To mark a team project or team as a favorite, go to the **Projects** page and click the ![favorites](_img/icon-favorite-star.png) star icon next to the team or team project. + +- To mark a query as a favorite, open the **Work>Queries** page and drag the query into the My Favorites area. +- To mark a plan as a favorite, open the **Work>Plans** page and click the ![favorites](_img/icon-favorite-star.png) star icon next to a plan. +- To mark a build definition as a favorite, open the **Build&Release>All Definitions** page and click the ![favorites](_img/icon-favorite-star.png) star icon next to the build definition. +- To mark a test plan as a favorite, open the **Test>Test Plans** page and click the ![favorites](_img/icon-favorite-star.png) star icon next to a test plan from the menu that shows All test plans. + +### Remove an item from your favorites list +To remove an item from your favorites list, click the ![favorited icon](_img/icon-favorited.png) favorited icon. + +Account home, Favorites page + +### Filter the list of favorites + +To filter the list, type a keyword in the *Filter favorites* box. The list will filter based on keyword matches to the title or team project name associated with the favorited item. + + +## Work: View and open work items +Open the **Work items** hub to access the set of work items assigned to you or followed by you. The lists available from each page span all team projects that you work in. + +> [!NOTE] +> Feature availability: For VSTS, you can access the Work items hub [from a mobile device](../collaborate/mobile-work.md). + +###Your assigned work items +The **Assigned to me** page lists all work items assigned to you in the order they were last updated. To open or update a work item, click its title. + +Account home, Work, Assigned to me page + + +### Work you're following + +Click **Following** to open the page that lists all the work items [you've marked to follow](../collaborate/follow-work-items.md). + +Account home, Work, Followed page + +To stop following an item and remove it from your list, click the ![followed icon](_img/icon-followed.png) following icon. + + + +### My activity +Click **My activity** to open the page that lists all work items that you have recently viewed or updated. + +Account home, Work items, My Activity page + +### Filter the list of work items + +Similar to the Favorites page, you can filter the work pages by typing a keyword in the *Filter your work items...* box. The list will filter based on keyword matches to the work item ID, title, state, or team project name. + + + +##Pull requests: View and open pull requests + +Open the **Pull requests** page to access any pull request that's relevant to you across all team projects you work in. Click **Active** or **Completed** to pivot between the active or completed set of pull requests. To initiate a pull request, click New pull request. + +Account home, Pull Requests, Active + +From each page, you're one click away from navigating to the branch or repository for a pull request. This mirrors capabilities on the team-project level **Code>Pull Requests** page. + +### Filter the list of pull requests + +Similar to the Favorites page, you can filter the list by typing a keyword in the *Filter pull requests* box. + + +##Rooms: Navigate to a team room + +To open a team room, click **Rooms**. You'll see all the team rooms defined for the account. Click the name of a team room which you have access. + +> [!NOTE] +> You only have access to those team rooms of which you are a team member. + +Account home, Rooms, selected team room + +To learn more about team rooms, see [Collaborate in a team room](../collaborate/collaborate-in-a-team-room.md). + + + +## Related notes + +- [Enable preview features](../collaborate/preview-features.md) +- [Work in the web portal](work-web-portal.md) +- [Connect to team projects](connect-team-projects.md) + diff --git a/docs/connect/connect-team-projects.md b/docs/connect/connect-team-projects.md new file mode 100644 index 00000000000..b7ae7f5170f --- /dev/null +++ b/docs/connect/connect-team-projects.md @@ -0,0 +1,327 @@ +--- +title: Connect to team projects in VSTS or TFS +description: Connect a client to the cloud service VSTS or on-premises Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 1372e56c-b34f-42c2-b72c-94b57620c75c +ms.manager: douge +ms.author: kaelli +ms.date: 09/07/2017 +--- + +# Connect to team projects + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +To share code, build apps, track work, and collaborate with team members, you connect to a team project from one of the following clients: +- [Web portal](#web-portal) +- [Visual Studio or Team Explorer](#visual-studio) +- [Eclipse/Team Explorer Everywhere](../git/share-your-code-in-git-eclipse.md) +- [Android Studio with the VSTS Plugin for Android Studio](http://java.visualstudio.com/Docs/tools/androidstudio) +- [IntelliJ with the VSTS Plugin for IntelliJ](http://java.visualstudio.com/Docs/tools/intellij) +- [Visual Studio Code](http://java.visualstudio.com/Docs/tools/vscode) + +>[!NOTE] +>A team project defines a process and data storage in which you manage your software projects from planning to deployment. You or a team member create a team project either on VSTS or an on-premises TFS. When you connect to a team project, you connect to an account or team project collection. Within that collection, one or more team projects may be defined. At a minimum, at least one team project must be created in order to use the system. + +If you don't have a team project yet, create one in [VSTS](../accounts/set-up-vs.md) or set one up in an [on-premises TFS](../accounts/create-team-project.md). If you need to add a team, see [Multiple teams](../work/scale/multiple-teams.md). If you don't have access to the team project, [get invited to the team](../work/scale/multiple-teams.md#add-team-members). + +From each of these clients, you can quickly switch context to a different team project and connect under a different account name. If you work remotely, you can configure your client to [connect to a TFS Proxy server](#proxy). + +To get started with a code base, [set up Git](../git/gitquickstart.md) or [set up TFVC](../tfvc/overview.md). + + +## Connect from the web portal + +1. If you're not a member of a VSTS or TFS security group, ask your account or project admin to add you. + +2. Open a browser window and type a URL that uses the following form: + + **VSTS:** +
    https://AccountName.visualstudio.com/ProjectName 
    + + **TFS (on-premises):** +
    http://ServerName:8080/tfs/DefaultCollection/ProjectName
    + + For example, to connect to the server named **FabrikamPrime**, type: **http://FabrikamPrime:8080/tfs/**. + + The default Port is 8080. Specify the port number and directory for your server if defaults aren't used. + +3. When you access the server for the first time, a Windows Identity dialog box will appear. Fill in your credentials and choose the **OK** button. + + >[!TIP] + >If you select the **Remember me** check box you won't have to enter your credentials the next time you connect. + +4. Choose your team project or team from the set of available links, or choose Browse to access all team projects and teams. + + Web portal, TFS, Oerview page + +To learn more about each hub and the tasks you can perform, see [Work in the web portal](work-web-portal.md). + + + +### To log on with different credentials + +1. Open Windows Security from the context menu associated with your name. + + ![Sign in As link on Account context menu](_img/connect-tp-open-profile.png) + +2. Enter your credentials. + + ![Enter user name and password to access TFS](_img/connect-team-projects-tfs/IC657077.png) + +### To open the web portal from Team Explorer + +- Open the web portal from the home page. + + ![Connect to Team Web Access](_img/connect-tp-open-web-portal.png) + + +## Connect from Visual Studio or Team Explorer + +1. If you haven't already, [download and install a version of Visual Studio](https://www.visualstudio.com/downloads/download-visual-studio-vs). + +2. If you're not a member of a TFS security group, [get added as one](../accounts/add-users.md). + +3. Check with a team member to determine the names of the server, team project collection, and team project that you will connect to. + +
    + + + + +### Visual Studio 2017 +Select the connect icon in Team Explorer to open up the **Connect** page. Choose the **Connect to Team Project** link to select a team project to connect to. + +![connect to team projects](_img/te-connect-page-connect-to-team-project.png) + +The **Connect to a Project** dialog will appear and show the team projects you can connect to, along with the repos in those projects. + +![Connect to a Project dialog box](_img/connect-team-projects-tfs/vs2017_connect_dialog.png) + +Select the **Add Server** link to connect to a team project in Team Foundation Server. Enter the URL to your TFS server and select **Add**. + +![ALM\_EXL\_AddServer](_img/connect-team-projects-tfs/vs2017_add_tfs_server.png) + +Select a team project from the list and select **Connect**. + +--- + +Team Explorer will display the Home page for that project. The pages that appear differ based on the resources enabled and the source control system selected for your team project. + +> [!div class="mx-tdBreakAll"] +> |Home page with Git |Home page with TFVC | +> |-------------|----------| +> |Team Explorer Home page with Git as source control|Team Explorer Home page w/ TFVC as source control| + +To learn more about each page and the tasks you can perform, see [Work in Team Explorer](work-team-explorer.md). + +Your client remembers the set of connections you've configured. You can quickly switch from one team project to another from the Connect page. + +### To change accounts when connecting to VSTS + + + + + +### Visual Studio 2015 + +1. From the Connect page, choose the **Connect to Team Project** link to log on with different credentials. + + ![connect to team projects](_img/te-connect-page-connect-to-team-project.png) + + The **Switch User** link appears only when you are actively connected to a team project hosted on VSTS. + + ![Connect to Team Foundation Server dialog box](_img/connect-team-projects-tfs/IC719958.png) + +2. Sign on using a valid Microsoft account—an account that is associated with a VSTS team project. + + +### Visual Studio 2017 + +1. From the Connect page, choose the **Connect to Team Project** link to log on with different credentials. + + ![connect to team projects](_img/te-connect-page-connect-to-team-project.png) + + Select a different user from the drop-down or select **Add an account...** to access a team project using a different account. + + ![Connect with VS 2017 TFS or VSTS using a different account](_img/connect-team-projects-tfs/choose-different-user-vs2017.png) + +2. Sign on using a valid Microsoft account—an account that is associated with a VSTS team project. + +### To change accounts + +To run Visual Studio under an account that is different from your logged on Windows account, open the context menu for **devenv.exe** to access your run as options. + +![Context menu for Visual Studio devenv.exe](_img/connect-team-projects-tfs/IC719959.png) + +You can locate the executable in the following folder: *Drive*:\\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\. + + + +## Connect from Microsoft Excel or Project + +To add or modify work items by using Excel or Project, you connect your worksheet or project plan to a team project. Establishing this connection binds the document to the hosted account or selected TFS, team project collection, and team project to exchange information. + + +> [!NOTE] +> You can't use Office Project 365 to connect to VSTS or TFS. + +### Connect from a worksheet or project plan + +To follow these procedures, you must be a member of the **Readers** group or have your **View work items in this node** permission set to **Allow**. See [Permission reference](../security/permissions.md) for details. + +1. If you don't have Office Excel 2007 or a more recent version, [install it](https://products.office.com/excel). For VSTS or TFS 2017, you'll need Project 2010 or a more recent version. For client compatibility, see [Requirements](../accounts/requirements.md) + +2. If you haven't installed a version of [Visual Studio (2010 or later)](https://www.visualstudio.com/downloads/download-visual-studio-vs) or [Team Foundation Server Standalone Office Integration 2015 (free)](https://www.visualstudio.com/downloads/#team-foundation-server-office-integration-2015-update-3-1), you'll need to install one of these versions to connect to a team project hosted on VSTS or an on-premises TFS. + + > [!NOTE] + > **Feature availability:** The only way to get the Team Foundation add-in to Excel is by installing one of the latest editions of Visual Studio or TFS Standalone Office Integration.    + +3. Start with a blank worksheet or project plan. If you don't see the **Team** ribbon (or the **Team** menu if you use Excel 2007 or Project 2007), see step 2. + + ![Create a list connection between Excel and the data store](../work/office/_img/bulk-modify-excel-blank-list.png) + + > [!TIP] + > If the **Team** ribbon no longer appears, you might need to [re-enable it](https://msdn.microsoft.com/library/vstudio/ms268871.aspx). + +4. Connect to VSTS account or a TFS instance and the team project. If you can't connect, [get added as a team member](../accounts/add-users.md). + + ![Connect to server](../work/office/_img/IC680074.png) + + If it is your first time connecting from Excel or Project, you might have to add the VSTS account or TFS server to the list of recognized servers. + + ![Add account or server](../work/office/_img/IC658167.png) + +5. Your worksheet or project plan is now bound to your team project. What this means is that you can add work items to the team project from the Office document or add work items to the Office document from the team project. + + To learn more, see [Bulk add work items with Excel](../work/office/bulk-add-modify-work-items-excel.md) or [Create your backlog and tasks using Project](../work/office/create-your-backlog-tasks-using-project.md). + +>[!NOTE] +>If the team project is moved to a different team project collection in the same instance of TFS, your documents will automatically be reconnected. However, if the team project is moved to a different instance of TFS, you must manually reconnect your documents to the new server. + +### Work offline + +An advantage to using Excel or Project is that you can work offline to add or modify work items. Complete the following procedures to disconnect an Excel worksheet or Project plan and later reconnect to synchronize your updates with the work item database. + +### To disconnect the document from a team project + +1. Open the document that you want to change while you are offline. + +2. Follow one of the following steps: + + - If you are using Excel, on the **Team** ribbon, in the **Work Items** group, choose **Refresh**. + + - If you are using Project, on the **Team** menu, choose **Refresh**. + + This step refreshes the work item list to retrieve the latest information from the work item database. + +3. If you are using Excel, add to the work item list the columns for all fields that you want to modify. + + You cannot add columns when the work item list is not connected to TFS. + +4. Save your Excel or Project file. You can now modify the information even if you are offline, disconnected from the team project or network. + +5. Change the work item list as needed. + + >[!NOTE] + >You cannot create most types of links between work items when the work item document is not connected to the team project. The exceptions are parent-child links in an Excel tree list and both parent-child and predecessor-successor links in a Project plan. + +#### To reconnect the document to the team project + +1. Make sure your computer is online. + +2. If you changed the document while you were offline, follow one of these steps: + + - If you are using Excel, on the **Team** ribbon, in the **Work Items** group, choose **Publish**. + + - If you are using Project, on the **Team** menu, choose **Publish Changes**. + +3. If you did not change the document while you were offline, follow one of these steps: + + - If you are using Excel, on the **Team** ribbon, in the **Work Items** group, choose **Refresh**. + + - If you are using Project, on the **Team** menu, choose **Refresh**. + +4. Resolve any data validation errors or conflicts that occur. + +## Related notes + +Additional resources you may find of interest: + +- [Work in web portal](work-web-portal.md) +- [Work in Team Explorer](work-web-portal.md) +- [Troubleshoot connection](troubleshoot-connection.md) + +If all you need is a code repository and bug tracking solution, then start with the [Git get started guide](../git/gitquickstart.md) and [Manage bugs](../work/backlogs/manage-bugs.md). + +To start planning and tracking work, see [Get started with Agile tools to plan and track work](../work/overview.md). + +### User accounts and licensing + +To connect to a team project, you need your user account added to the team project. This is typically done by the [account owner (VSTS)](../accounts/add-account-users-assign-access-levels.md) or a [project administrator](../security/set-project-collection-level-permissions.md). + +VSTS provides access to the first 5 account users free. After that, you need to [pay for more users (VSTS)](../billing/buy-basic-access-add-users.md). For on-premises TFS, each user account must have a TFS client access license (CAL). All Visual Studio subscriptions and paid VSTS users include a TFS CAL. Find out more about licensing from the [Team Foundation Server pricing page](https://www.visualstudio.com/team-services/tfs-pricing). + +In addition, you can provide access to stakeholders in your organization who will have limited access to select features as described in [Work as a Stakeholder](../quickstart/get-started-stakeholder.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json). + + +## Configure Visual Studio to connect to TFS Proxy + +If your remote team uses a [TFS Proxy server](../tfs-server/install/install-proxy-setup-remote.md) to cache files, you can configure Visual Studio to connect through that proxy server and download files under Team Foundation version control. + +1. First, make sure that you have connected to TFS as described [in the previous section](#visual-studio). + +2. From the Visual Studio **Tools** menu, open the Options dialog and expand the Source Control folder. On the Plug-in Selection page, confirm that Visual Studio Team Foundation Server is selected. + + ![Plug-in Selection page, Options dialog box](_img/connect-team-projects-tfs/IC719960.png) + +3. On the Visual Studio Team Foundation Server page, enter the name and port number for the TFS Proxy server. Select the **Use SSL encryption (https) to connect** checkbox. + + ![VS TFVC proxy configuration page, Options dialog](_img/connect-team-projects-tfs/IC719961.png) + + Make sure you specify the port number that your administrator assigned to TFS Proxy. + +To **Configure User Tools** to associate a file type with a compare or merge tool, see [Associate a file type with a file-comparison tool](../tfvc/associate-file-type-file-comparison-tool.md) or [Associate a file type with a merge tool](../tfvc/associate-file-type-merge-tool.md). + + + +###What other clients support connection to TFS? + +In addition to connecting through a web browser, Visual Studio, Eclipse, Excel, and Project you can connect to a team project from these clients: + +- [Visual Studio Code](https://code.visualstudio.com/Docs) +- [Visual Studio Community](https://www.visualstudio.com/products/visual-studio-community-vs.aspx) +- [Eclipse: Team Explorer Everywhere](http://java.visualstudio.com/Docs/tools/eclipse) +- [PowerPoint Storyboarding](../work/office/storyboard-your-ideas-using-powerpoint.md) +- [Microsoft Test Manager](https://msdn.microsoft.com/library/jj635157.aspx) +- [Microsoft Feedback Client](../work/connect/give-feedback.md) + +### Requirements and client compatibility + +Some tasks or features aren't available when you connect to a later version of TFS than which your client supports. For more information, see [Requirements and compatibility](../accounts/requirements.md). + +### Determine your platform or TFS version + +See [Feedback and support](../provide-feedback.md#platform-version) + + + diff --git a/docs/connect/troubleshoot-connection.md b/docs/connect/troubleshoot-connection.md new file mode 100644 index 00000000000..20b23daea5c --- /dev/null +++ b/docs/connect/troubleshoot-connection.md @@ -0,0 +1,55 @@ +--- +title: Troubleshoot connecting to a team project in VSTS or TFS +description: Steps to resolve connection issues with Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 07/14/2017 +--- + +# Troubleshoot connecting to a team project in VSTS or TFS +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Here's a list of the most frequently encountered connection problems and what to do about them. Start at the top and follow it in the order indicated. + +1. Verify that you have required permissions. + + If the errors that you receive indicate read-only or blocked actions, you might not have permission to act on the data. + +2. Verify that your computer is connected to the network and can access network resources. + +3. Verify that TFS hasn't been taken offline. Talk with your TFS administrator. + +4. Verify whether your team project has been moved to another team project collection in Team Foundation Server. If it has been moved, you must create a connection to the new server name. + +For additional troubleshooting tips, see [TF31002: Unable to connect to this Team Foundation Server](../work/reference/error/tf31002-unable-connect-tfs.md). + + +## Connect to a TFS with Secure Sockets Layer (SSL) configured + +If you connect to a TFS instance that has SSL configured, then you'll need to install a certificate and clear the client cache. For details, see [Set up HTTPS with Secure Sockets Layer (SSL) for TFS, Configuring Client Computers](../tfs-server/admin/setup-secure-sockets-layer.md#config-client-computers). + + +## Clear the cache on client computers + +When the on-premises TFS configuration changes, such as when moving or splitting a project collection, you might have to clear the cache. + +1. Log on to your client computer for Team Foundation by using the credentials of the user whose cache you want to clear. + +2. Close any open instances of Visual Studio. + +3. Open a browser, and browse to one of the following folders, depending on the operating system that is running on the client computer: + + - **Windows 10** + *Drive*:\\Users\UserName\AppData\Local\Microsoft\Team Foundation\6.0\Cache + + - **Windows 8** + *Drive*:\\Users\UserName\AppData\Local\Microsoft\Team Foundation\4.0\Cache + + - **Windows Vista or Windows 7** + *Drive*:\\Users\UserName\AppData\Local\Microsoft\Team Foundation\2.0\Cache + +4. Delete the contents of the Cache directory, including all subfolders. + diff --git a/docs/connect/work-team-explorer.md b/docs/connect/work-team-explorer.md new file mode 100644 index 00000000000..6735fe2ba9a --- /dev/null +++ b/docs/connect/work-team-explorer.md @@ -0,0 +1,184 @@ +--- +title: Navigate within the Visual Studio Team Explorer pane +description: Download TFS clients, navigate in Team Explorer for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +keywords: Download TFS clients +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: fd7a5cf7-7916-4fa0-b5e6-5a83cf377a02 +ms.manager: douge +ms.author: kaelli +ms.date: 09/07/2017 +--- + +# Navigate in Team Explorer + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You use Team Explorer to manage work that is assigned to you, your team, or your team projects, and to coordinate your efforts with other team members to develop a project. Team Explorer is a plug-in that installs with Visual Studio or Eclipse. Working from different platforms, developers and stakeholders can effectively collaborate using Team Explorer connected to team projects hosted on Visual Studio Online or on-premises Team Foundation Server (TFS). + + +>[!TIP] +>You can access the latest version of Visual Studio clients from the [Visual Studio Downloads page](https://www.visualstudio.com/downloads/). Additional options for connecting to VSTS or TFS include: +> - [Team Explorer Everywhere](http://java.visualstudio.com/Docs/tools/eclipse) +> - [VSTS Plugin for Android Studio](http://java.visualstudio.com/Docs/tools/androidstudio) +> - [VSTS Plugin for IntelliJ](http://java.visualstudio.com/Docs/tools/intellij) +> - [Visual Studio Code](http://java.visualstudio.com/Docs/tools/vscode) +>For information about compatibility among client and server versions, see [Requirements and compatibility](../accounts/requirements.md). + +The operations available to you depend on which source control option—Team Foundation version control (TFVC) or Git—was selected to manage source code when the team project was created. + +**Team Explorer plug-in for Visual Studio** + +Team Explorer connects Visual Studio to team projects. You can manage source code, work items, and builds. Or, create a team project. + +>[!TIP] +>If you open Visual Studio and the Team Explorer pane doesn't appear, click the **View/Team Explorer** menu option. + + +> [!div class="mx-tdBreakAll"] +> |Home page with Git |Home page with TFVC | +> |-------------|----------| +> |Team Explorer Home page with Git as source control|Team Explorer Home page w/ TFVC as source control| + + +>[!NOTE] +>Some pages, such as **Reports** and **Documents**, only appear when an on-premises TFS is configured with the required resources, such as SQL Server Reporting Services and SharePoint. + +If you don't need Visual Studio, but do want to connect to VSTS or TFS or get one or more Team Foundation add-ins, you can install the free [Visual Studio Community](https://www.visualstudio.com/downloads/download-visual-studio-vs). + +**Team Explorer plug-in for Eclipse** + +If you work in Eclipse or on a non-Windows platform, you can [install the Team Explorer plug-in for Eclipse](http://java.visualstudio.com/Docs/tools/eclipse#_install-the-tee-plugin-for-eclipse). Once installed, you can share your Eclipse projects by adding them to VSTS or TFS using [Git](../git/share-your-code-in-git-eclipse.md) or [TFVC](../tfvc/share-your-code-in-tfvc-eclipse.md). + + + +> [!div class="mx-tdBreakAll"] +> |Home page with Git (Eclipse) |Home page with TFVC (Eclipse) | +> |-------------|----------| +> |Home page w/ Git as source control - Eclipse |Home page w/ TFVC as source control - Eclipse | + + +> [!NOTE] +> Some pages, such as **Reports** and **Documents**, only appear when TFS is configured with the required resources, such as SQL Server Reporting Services and SharePoint. + + +## Choose the page to access the task you want + +Based on the page you select and the options configured for your team project. + +### Connect page + +From the **Connect** page, you can select the team projects you want to connect to and quickly switch context between team projects. + +![Team Explorer, Connect](_img/te-connect-manage.png) + +> [!div class="mx-tdBreakAll"] +> |Git: Local Git repo |TFVC: Map workspace | +> |-------------|----------| +> |If you connect to a Git repo, you also can [create, add, or clone repositories](../git/tutorial/creatingrepo.md).
    ![Team Explorer, Connect, local Git repo options](_img/te-connect-local-git-repos.png) |If you connect to a TFVC repo, you'll be prompted to [Configure your workspace (TFVC)](../build-release/concepts/definitions/build/options.md) on first connect.
    ![Team Explorer, Connect, configure TFVC workspace](_img/te-tfvc-configure-workspace.png)| + + + +> [!IMPORTANT] +> From the Visual Studio plug-in, you can [Create a team project](../accounts/create-team-project.md). The ability to create team projects is not supported from the Eclipse plug-in. You can, however, create team projects from the web portal account/collection administration context. + + + +### Home, Work, and Build pages + + +> [!div class="mx-tdBreakAll"] +> |Home|Work Items |Build | +> |-------------|----------|----------| +> |-[Configure workspace](../tfvc/share-your-code-in-tfvc-vs.md#configure-your-workspace)
    - Open [Web portal](work-web-portal.md#user-context)
    - Open [Task Board](../work/scrum/task-board.md)
    - Open [Team Room](../collaborate/collaborate-in-a-team-room.md) |- [Add work items](../work/backlogs/add-work-items.md)
    - [Use the query editor to list and manage queries](../work/track/using-queries.md)
    - [Organize query folders and set query permissions](../work/track/set-query-permissions.md)
    - [Open query in Excel](../work/office/bulk-add-modify-work-items-excel.md)
    - [Open query in Project](../work/office/create-your-backlog-tasks-using-project.md)
    - [Email query results list using Outlook](../work/track/share-plans.md)
    - [Create reports from query in Excel](../report/excel/create-status-and-trend-excel-reports.md) (TFS only) |- [Create build definitions](../build-release/tasks/index.md)
    - [View and manage builds](../build-release/overview.md)
    - [Manage the build queue](../build-release/concepts/agents/pools-queues.md) | + +> [!NOTE] +> If inline images aren't displaying correctly, see [Resolve images that don't display in Team Explorer](#images-missing-te). + +### Git and TFVC pages + +The Git and TFVC repos support different pages and functions. You'll see one or the other pages depending on the team project and repro you connect to. For a comparison of the two repos, see [Choosing the right version control for your project](../tfvc/comparison-git-tfvc.md). + + +> [!div class="mx-tdBreakAll"] +> |Git | TFVC | +> |-------------|----------| +> |- **Changes**: [Save work with commits](../git/tutorial/commits.md)
    - **Branches**: [Create work in branches](../git/tutorial/branches.md)
    - **Pull Requests**: [Review code with pull requests](../git/tutorial/pullrequest.md)
    - **Sync**: [Update code with fetch and pull](../git/tutorial/pulling.md)) |- **My Work**: [Suspend/resume work](../tfvc/suspend-your-work-manage-your-shelvesets.md) | [Code review](../tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md)
    - **Pending Changes**: [Manage pending changes](../tfvc/develop-code-manage-pending-changes.md) | [Find shelvesets](../tfvc/suspend-your-work-manage-your-shelvesets.md) | [Resolve conflicts](../tfvc/resolve-team-foundation-version-control-conflicts.md)
    - **Source Control Explorer**: [Add/view files and folders](../tfvc/add-files-server.md) | + +### Report and Document pages (TFS only) + +The **Report** page opens the [Reporting Services report site](../report/sql-reports/reporting-services-reports.md). This page appears only when your team project has been configured with SQL Server Analysis Services and Reporting Services. Also, the option to **Create Report in Microsoft Excel** appears only when reporting has been configured for the team project. + +From the **Document** page, you can [open project portal](../report/sharepoint-dashboards/share-information-using-the-project-portal.md) and [manage documents and document libraries](../report/sharepoint-dashboards/manage-documents-and-document-libraries.md). This page appears only if your team project has been configured with a SharePoint Products portal. + +If your team project is missing one or more pages, you may be able to [add functionality to your on premises TFS deployment](../tfs-server/admin/config-tfs-resources.md). + +### Settings page + +From the **Settings** page, you can configure administrative features for either a team project or team project collection. Configuring features in these areas requires you to be a member of a VSTS or TFS administrator group. + +Most of the links open to a web portal administration page. Not all settings are available from the Team Explorer plug-in for Eclipse. + + +> [!div class="mx-tdBreakAll"] +> |Team project settings | Collection settings (TFS) | +> |-------------|----------| +> |Required membership: [Project Administrators](../security/set-project-collection-level-permissions.md?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json)

    - [Security (manage project-level permissions)](../security/set-project-collection-level-permissions.md?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json)
    - [Group membership: manage group permissions](../security/set-project-collection-level-permissions.md?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json)
    - Source Control: Configure the [check-in and check-out policies](../tfvc/add-check-policies.md) (TFVC)
    - [Work Item Areas (project-wide)](../work/customize/set-area-paths.md)
    - [Work Item Areas (project-wide)](../work/customize/set-iteration-paths-sprints.md)
    - [Portal Settings (Enable portal or process guidance)](../report/sharepoint-dashboards/configure-or-add-a-project-portal.md)
    -[Project Alerts](../work/track/alerts-and-notifications.md) |Required membership: [Project Collection Administrators](../accounts/add-administrator-project-collection.md)

    - [Security (manage project-level permissions)](../security/permissions.md#collection-level)
    - [Group membership: manage group permissions](../security/permissions.md)
    - Source Control: Configure the [default workspace type for the collection](../tfvc/decide-between-using-local-server-workspace.md#manage-team-project-collection-workspace-settings-for-your-team) (TFVC)
    - [Process Template Manager: download or upload a process template](../work/guidance/manage-process-templates.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) | + +To learn more about administration features, see [Work in the web portal, administration context](work-web-portal.md#admin-context). + + +## Related notes +You've now got a basic understanding of how to work in the Team Explorer add-in for Visual Studio and Eclipse. + +- [Troubleshoot connection](troubleshoot-connection.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) + + +### Clients that connect to VSTS or TFS + +In addition to connecting through Team Explorer, you can connect to a team project from these clients: + +- [Web portal](work-web-portal.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Visual Studio Code](https://code.visualstudio.com/docs) +- [Visual Studio Community](https://www.visualstudio.com/products/visual-studio-community-vs.aspx) +- [Eclipse: Team Explorer Everywhere](http://java.visualstudio.com/docs/tools/eclipse) +- [Office Excel](../work/office/bulk-add-modify-work-items-excel.md?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +- [Office Project](../work/office/create-your-backlog-tasks-using-project.md?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +- [PowerPoint Storyboarding](../work/office/storyboard-your-ideas-using-powerpoint.md?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +- [Microsoft Test Manager](https://msdn.microsoft.com/library/jj635157.aspx) +- [Microsoft Feedback Client](../work/connect/give-feedback.md?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json) + + +### Refresh Team Explorer + +If data doesn't appear as expected, the first thing to try is to refresh your client. Refreshing your client updates the local cache with changes that were made in another client or in TFS. To refresh Team Explorer, do one of the following actions: + +- To refresh a page that you are currently viewing, choose ![Refresh icon](../work/_img/icons/te-refresh-query-icon.png) **Refresh** icon in the menu bar (or choose the F5 key). + +- To refresh the team project you currently have selected, choose ![](_img/work-team-explorer/IC547418.png) **Home**, and then choose ![Refresh icon](../work/_img/icons/te-refresh-query-icon.png) **Refresh** icon (or choose the F5 key). + +- To refresh the set of teams defined for the team project that you currently have selected, choose the Connect icon, and then choose ![Refresh icon](../work/_img/icons/te-refresh-query-icon.png) **Refresh** icon (or choose the F5 key). + + +[!INCLUDE [temp](_shared/when-to-refresh-client.md)] + +[!INCLUDE [temp](../_shared/images-not-appearing-vs.md)] + + +### Additional tools provided with TFS Power Tools (Visual Studio 2015 & TFS 2015) + +By installing [TFS Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power), you gain access to these additional tools through the Team Explorer plug-in for Visual Studio: + +- Process Template Editor +- Additional check-in policies for Team Foundation Version Control +- Team Explorer enhancements including Team Members +- Team Foundation Power Tool Command Line +- Test Attachment Cleaner +- Work Item Templates + +Additional requirements may apply. + +> [!NOTE] +> For TFS 2017 and later versions, you can [install the TFS Process Template editor from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KarthikBalasubramanianMSFT.TFSProcessTemplateEditor). You can use this version of the Process Editor to modify the old-style work item forms. You can't use it to edit forms associated with the [new web forms](../work/process/new-work-item-experience.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json ). + + diff --git a/docs/connect/work-web-portal.md b/docs/connect/work-web-portal.md new file mode 100644 index 00000000000..6ec2b6d46a2 --- /dev/null +++ b/docs/connect/work-web-portal.md @@ -0,0 +1,429 @@ +--- +title: Navigate in the VSTS or TFS web portal +description: Guide to navigating within the web portal for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 493362ae-5318-4719-9e0f-48c74ff8f0ba +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# Navigating in the web portal + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +The web portal provides support for teams to collaborate through the planning, development, and release cycles. You use the web portal to perform both software development and administrative tasks. + +You can manage source code, plan and track work, define builds, run tests, and manage releases. The web portal connects you to the team project defined for an account in Visual Studio Team Services (VSTS) or within an on-premise Team Foundation Server (TFS). + +If you don't have a team project yet, create one in [VSTS](../accounts/create-account-msa-or-work-student.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) or set one up in an [on-premises TFS](../accounts/create-team-project.md). If you don't have access to the team project, [get invited to the team](../work/scale/multiple-teams.md#add-team-members). + +>[!NOTE] +>The images you see from your web portal may differ from the images you see in this topic. These differences result from updates made to VSTS or your on-premises TFS and [options that you or your admin have enabled](../collaborate/preview-features.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json). However, the basic functionality available to you remains the same unless explicitly mentioned. + +Code, Pull Request, Active example + + +>[!NOTE] +>**Feature availability**: The features available to you depend on the platform (VSTS or on-premises TFS), TFS version, features enabled for your team project or collection, and your access level. New features are deployed regularly to VSTS. Many of these features are then made available to [on-premises TFS through regular updates](/vsts/release-notes/index). + +To get started, from a [supported web browser](../accounts/requirements.md#browsers) enter the following URL: + +**VSTS:** +
    https://AccountName.visualstudio.com/DefaultCollection/ProjectName 
    + +**TFS (on-premises):** +
    http://ServerName:8080/tfs/DefaultCollection/ProjectName
    + + +>[!NOTE] +>For TFS, the TFS administrator can configure the following elements: protocol (*https* vs *http*), port (*8080*), virtual directory (*tfs*), and collection name (*DefaultCollection*) (See [Web site settings and security](../security/websitesettings.md).) For example, a deployment configured on port 443 with no vdir, an FQDN, and a custom collection name might look like: *https://tfs.contoso.com/CustomCollection/ProjectName*. If the above pattern doesn't work for you, check with your TFS administrator. + +The web portal is one of several clients that can connect to a team project. Different clients support different features and functions. For a list of all clients that connect to VSTS or TFS, see [Tools and clients that connect to VSTS and TFS](../tools.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json). + + +## Navigational concepts + +There are three main navigational concepts to understand. The first is the collection-project-team structure, the second is the user/administrative context, and the third corresponds to user-focused and team-scoped features that provide quick access to tasks targeted for the logged-in user or for the selected team. + + +### Collection-project-team structure +When you connect to VSTS or an on-premises TFS, you connect to an account or team project collection. Within that collection, one or more team projects may be defined. At a minimum, at least one team project must be created in order to use the system. + +When you create your team project, a team of the same name is automatically created. For small teams, this is sufficient. + +However, for enterprise-level organizations, it may be necessary to scale up, to create additional teams and/or team projects. These can be created within the single account or collection. + + + + + + + + + +
    +**Single team project, team defined within an account/collection** +![Single collection-project-team conceptual image](_img/web-portal-account-project-team-concept.png) + +**Multiple team projects and teams defined within an account/collection** +![Scaled collection-project-team conceptual image](_img/web-portal-account-project-team-scale-concept.png) + +
    + +The collection-project-team structure provides teams a high-level of autonomy to configure their tools in ways that work for them. It also supports administrative tasks to occur at the appropriate level. + +To learn more about adding teams and the features that support team autonomy, see [Multiple teams](../work/scale/multiple-teams.md) and [Manage team assets](../work/scale/manage-team-assets.md). + + + + +### User/administrative context +The user context is used to get work done—manage code, plan and track work, define and manage builds, create and run tests, and so on. Administrators use the admin context to configure shared resources and permissions. Tasks performed in this context can impact the team project and team functions. + +**User context** +You and other team members use the user context to collaborate, plan, and build working software. + + + + +**VSTS, TFS 2017.2** +Click any hub to open that hub. Hover your mouse over a hub to access a drop-down menu of pages and other options for that hub. To access administrative options, click the ![gear icon](_img/work-tfs-web-portal/IC623347.png) gear Settings icon or choose the admin level you want from the drop-down menu. + +VSTS, User context hubs + +**TFS 2017, TFS 2017.1** + + +Click any hub to open that hub. Hover your mouse over a hub to access a drop-down menu of pages and other options for that hub. To access administrative options, click the ![gear icon](_img/work-tfs-web-portal/IC623347.png) gear Settings icon or choose the admin level you want from the drop-down menu. + +TFS 2017, User context hubs + + + + +**TFS 2015, TFS 2013** + +Click any hub to open that hub. Then, click a page within the hub to open that page. + +TFS 2015 or TFS 2013, User context hubs + + + + +**Administrative context** +You use the administrative context to set team, team project, and account or collection settings. The hubs and pages available change based on what level of administrative context you're in. + +To learn more about each administrative context level, see the [Administrative context and team, team project, and account/collection settings](#administrative-context) later in this topic. + + + + +### User-focused features + +Several features display information based on the logged-in user account or the selected team context. First off, users can [set their preferences](../accounts/account-preferences.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) through their profile or account menu: + +VSTS, My Profile link on Account menu + +In addition, they have access to special queries—Assigned to me query, Followed work items, and more— dashboard widget such as the Assigned to me widget, and the ability to save favorites under a **My favorites** folder. Here's an example of the Assigned to me widget that you can add to a dashboard. + +VSTS, web portal, user profile/account menu + + +>[!NOTE] +>If you work in VSTS, you can also use your account hub to view and quickly navigate to teams, team projects, branches, work items, pull requests and other objects that are relevant to you. For details, see [Work effectively from your account hub](account-home-pages.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json).   + + + +### Team-scoped features + +Teams access their set of team-scoped features by choosing their team context. Each team gets access to a suite of Agile tools and team assets. These tools provide teams the ability to work autonomously and collaborate with other teams across the enterprise. + +![Agile tool team assets](../work/scale/_img/agile-tools-team-assets.png) + +Also, teams can set their query and build favorites within **Team favorites** folders. For more information, see [Manage team assets](../work/scale/manage-team-assets.md). + + + +## User context: hubs and tabs + +You perform the bulk of your tasks by accessing a page within one of the these hubs—**Home**, **Code**, **Work**, **Build** and **Test** —and their corresponding tabs—such as **Overview**, **Backlogs**, **Queries**. For an overview of each hub, see [Essential services](../services.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json). + + +The next sections liste what you can do, based on the hub and page you select. + + + +### Welcome page, dashboards, and plan and track work + +The **Home** hub supports a configurable Welcome page and dashboards. From the **Work** hub, you gain access to a highly configurable suite of Agile tools to plan and track your work. + + +> [!div class="mx-tdBreakAll"]   +> |[Home](../report/overview.md) |[Work](../work/work-items/index.md)| +> |-------------|----------| +> |- [Account hub](account-home-pages.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json)
    - [Project vision and status page](../collaborate/project-vision-status.md)
    - [Project welcome page](../reference/markdown-guidance.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json)
    - [Overview (view/edit default dashboard)](../report/dashboards.md)
    - >[Add/modify dashboards](../report/dashboards.md) |- Backlogs: [Create your backlog](../work/backlogs/create-your-backlog.md) | [Organize backlogs](../work/backlogs/organize-backlog.md) | [Plan sprints](../work/scrum/sprint-planning.md)
    - Boards: [Kanban board](../work/kanban/kanban-basics.md) | [Features and epics](../work/kanban/kanban-epics-features-stories.md) | [Cumulative flow chart](../report/guidance/cumulative-flow.md)
    - Boards: [Add task checklists](../work/kanban/add-task-checklists.md) | [Task board](../work/scrum/task-board.md)
    - Queries: [Run/define queries](../report/guidance/cumulative-flow.md) | [Add work items](../work/backlogs/add-work-items.md) | [Manage bugs](../work/backlogs/manage-bugs.md?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) | + + +### Source code control: Git and TFVC repositories + +The **Code** hub supports management of your source control repositories. You can choose between two types of repos: Git (distributed) or Team Foundation version control (centralized). For a comparison of the two repos, see [Choosing the right version control for your project](../tfvc/comparison-git-tfvc.md). + + +> [!div class="mx-tdBreakAll"]   +> |[Code: Git](../git/index.md) |[Code: TFVC](../tfvc/index.md)| +> |-------------|----------| +> |- [Add/manage repositories](../git/create-new-repo.md) | [Rename a repo](../git/repo-rename.md) | [Delete a repo](../git/delete-existing-repo.md)
    - Explorer
    - [History: review](../git/manage-your-branches.md#review-updates)
    - [Branches: Manage branches](../git/manage-your-branches.md)
    - [Pull Requests: View and create pull requests](../git/pull-requests.md) |- [Add/manage repositories](../git/create-new-repo.md) | [Rename a repo](../git/repo-rename.md) | [Delete a repo](../git/delete-existing-repo.md)
    - [Explorer: View, download, and compare version-controlled files](../tfvc/download-get-files-from-server.md)
    - [Changesets: find/view](../tfvc/find-view-changesets.md)
    - [Shelvesets](../tfvc/suspend-your-work-manage-your-shelvesets.md) | + +###Build, test, and release + +The **Build & Release** hub supports defining and managing builds and releases to deploy your software to different staging and production environments. From the **Test** hub, you can create test plans, test cases, and run tests. + +> [!div class="mx-tdBreakAll"]   +> |[Build](../build-release/index.md)|[Release](../build-release/concepts/definitions/release/index.md)| [Test](../manual-test/index.md) | +> |-------------|----------|----------| +> |- [Definitions: Define a build](../build-release/tasks/index.md)
    - [Options: Define multiple configurations](../build-release/concepts/definitions/build/options.md)
    - [Repository: Specify repository for build](../build-release/concepts/definitions/build/repository.md)
    - [Variables: Use build variables](../build-release/concepts/definitions/build/variables.md)
    - [Triggers: Set build triggers](../build-release/concepts/definitions/build/triggers.md)
    - [Retention: Set retention policies](../build-release/concepts/policies/retention.md)
    - [History: View change history](../build-release/concepts/definitions/build/history.md) |- [Release definition](../build-release/concepts/definitions/release/index.md)
    - [Triggers: continuous integration](../build-release/concepts/definitions/release/triggers.md#release-triggers)
    - [Deploy release](../build-release/actions/create-deploy-releases.md#deploy-command)
    - [Approve a release](../build-release/concepts/definitions/release/environments.md#approvals)
    - [Tests: view test results ](../build-release/actions/view-manage-releases.md#test-results)
    - [Logs: view release logs](../build-release/actions/debug-deployment-issues.md)
    - [Run unit tests with a build](../build-release/test/getting-started-with-continuous-testing.md) |- [Test plans](../manual-test/getting-started/create-a-test-plan.md)
    - [Parameters](../manual-test/repeat-test-with-different-data.md)
    - [Configurations](../manual-test/test-different-configurations.md)
    - [Runs](../manual-test/getting-started/run-manual-tests.md)
    - [Machines](../build-release/test/set-up-continuous-test-environments-builds.md)
    - [Load test](../load-test/getting-started-with-performance-testing.md) | + + +## Administrative context and team, team project, and account/collection settings + +From a user context, open the admin context by clicking the ![gear icon](_img/work-tfs-web-portal/IC623347.png) gear Settings icon. The tabs and pages available differ depending on which admin context you access. + +Below we show the admin context for the team project level. + + + + +**VSTS, TFS 2017.2** + +Open any admin page by clicking it's name. Click or hover over the gear icon to access other administrative options. Note that you can click any of the user-context hubs of **Home**, **Code**, **Work**, and so on to return to the user context. + +VSTS, Admin context, team project level + + + + +**TFS 2017.1** + +Open any admin page by clicking it's name. Hover your mouse over a hub to access a drop-down menu of pages and other options for that hub. Click or hover over the gear icon to access other administrative options. Note that you can click any of the user-context hubs of **Home**, **Code**, **Work**, and so on to return to the user context. + +TFS 2017.1, Web portal, Admin context, team project level + + + +**TFS 2017** + +Open any admin page by clicking it's corresponding hub. Hover your mouse over a hub to access a drop-down menu of pages and other options for that hub. Click or hover over the gear icon to access other administrative options. Note that you can click any of the user-context hubs of **Home**, **Code**, **Work**, and so on to return to the user context. + +TFS 2017, Web portal, admin context + + + + + +**TFS 2015, TFS 2013** +Open any admin page by clicking it's corresponding hub. + +TFS 2015, Web portal, admin context + +From within the admin context, click one of the breadcrumb links to access the settings available at the account/collection, team project, or team level. + +![Web portal admin settings links](_img/web-portal-admin-team-tfs.png) + + +You must be a member of the listed administrator group or role to perform the tasks listed. + + +> [!div class="mx-tdBreakAll"]   +> |Team settings|Team project settings| +> |-------------|----------| +> |Required membership: [Team administrator role](../work/scale/add-team-administrator.md)

    - [Overview: Add team members](../work/scale/multiple-teams.md) | [Add team admins](../work/scale/add-team-administrator.md)
    - [Select backlog levels](../work/customize/select-backlog-navigation-levels.md) | [Set working days](../work/scale/capacity-planning.md) | [Working with bugs](../work/customize/show-bugs-on-backlog.md)
    - [Work/Iterations & Areas (team defaults)](../work/scale/set-team-defaults.md)
    - [Work/Templates](../work/backlogs/work-item-template.md)
    - [Security (manage team-level permissions)](../work/scale/team-administrator-permissions.md)
    - [Notifications](../collaborate/manage-team-notifications.md)

    For a complete overview of all team assets that you
    can configure, see [Manage team assets](../work/scale/manage-team-assets.md) |Required membership: [Project Administrators](../accounts/add-administrator-team-project.md)

    - [Overview: Add teams](../work/scale/multiple-teams.md)
    - [Work/Iterations & Areas (project-wide)](../work/customize/set-area-paths.md)
    - [Security (manage project-level permissions)](../security/permissions.md#team-project-level-permissions)
    - [Notifications](../collaborate/manage-team-notifications.md)
    - [Version Control (manage repository permissions)](../security/permissions.md#git-repository)
    - [Agent queues](../build-release/concepts/agents/pools-queues.md)
    - [Service hooks](../service-hooks/services/webhooks.md)
    - [Services](../build-release/concepts/library/service-endpoints.md)
    - [Test (manage test retention policies](../manual-test/getting-started/how-long-to-keep-test-results.md) + +> [!div class="mx-tdBreakAll"]   +> |Account settings (VSTS)|Collection settings (TFS)| +> |-------------|----------| +> |Required membership: [Project Collection Administrators](../security/set-project-collection-level-permissions.md?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json)

    - [Overview: Create team projects](../accounts/create-team-project.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) | [Rename team project](../accounts/rename-team-project.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json)
    [Delete team project](../accounts/delete-team-project.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) | [Change process](../work/process/manage-process.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json)
    - [Settings: Set account preferences](../accounts/account-preferences.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) | [Change application access policies](../accounts/change-application-access-policies-vs.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json)
    [Change account owner](../accounts/change-account-ownership-vs.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) | [Delete your account](../accounts/delete-your-vsts-account.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) | [Recover your account](../accounts/recover-your-vsts-account.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json)
    - [Security (manage collection-level permissions)](../security/set-project-collection-level-permissions.md?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json)
    - [Process (customize work tracking)](../work/process/manage-process.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json)
    - [Build (manage build policies)](../build-release/concepts/policies/retention.md)
    - [Agent pools (manage build agents)](../build-release/concepts/agents/pools-queues.md) (VSTS)
    - [Extensions (install/manage extensions)](../marketplace/install-vsts-extension.md) | Required membership: [Project Collection Administrators](../accounts/add-administrator-project-collection.md)

    - [Overview: Create team projects](../accounts/create-team-project.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) | [Rename team project](../accounts/rename-team-project.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) | [Delete team project](../accounts/delete-team-project.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json)
    - [Security (manage collection-level permissions)](..//security/set-project-collection-level-permissions.md?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json)
    - [Build (manage build policies)](../build-release/concepts/policies/retention.md)
    - >[Agent queues](../build-release/concepts/agents/pools-queues.md)
    - [Extensions (install/manage extensions)](../marketplace/install-vsts-extension.md?toc=/vsts/marketplace/toc.json&bc=/vsts/marketplace/breadcrumb/toc.json) | + +**Server-level settings (TFS only)** + +Required membership: [Team Foundation Administrators](../tfs-server/add-administrator-tfs.md#server) + +- [Overview: Choose team project/team](../work/scale/multiple-teams.md) +- [Access levels (Stakeholder, Basic, Advanced)](../security/change-access-levels.md) +- [Extensions (manage)](../marketplace/install-vsts-extension.md) +- [Agent pools (manage build agents)](../build-release/concepts/agents/pools-queues.md) + + + + + + +## Related notes + +Now that you have an understanding of how the user interface is structure, it's time to get started using it. As you can see, there are a lot of features and functionality. + +If all you need is a code repository and bug tracking solution, then start with the [Git get started guide](../git/gitquickstart.md) and [Manage bugs](../work/backlogs/manage-bugs.md?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json). + +To start planning and tracking work, see [Get started with Agile tools to plan and track work](../work/overview.md?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json). + +Additional resources you may find of interest: + +- [Work effectively from your account home page](account-home-pages.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Connect to team projects](connect-team-projects.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Work in Team Explorer](work-team-explorer.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Troubleshoot connection](troubleshoot-connection.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) + + + + +### User accounts and licensing + +To connect to the web portal, you need your user account added to the team project. This is typically done by the [account owner (VSTS)](../accounts/add-account-users-assign-access-levels.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json)) or a [project administrator (TFS)](../accounts/add-users.md?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json)). + +For VSTS, five account users are free as are Visual Studio subscribers and stakeholders. After that, you need to [pay for more users (VSTS)](../billing/buy-basic-access-add-users.md). + +For TFS, limited access is available to an unlimited number of stakeholders for free; most regular contributors must have a TFS client access license (CAL). For details, see [Work as a Stakeholder](../quickstart/get-started-stakeholder.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json). + +All Visual Studio subscriptions and paid VSTS users include a TFS CAL. Find out more about licensing from the following pricing pages: +- [VSTS pricing](https://www.visualstudio.com/team-services/pricing/) +- [TFS pricing](https://www.visualstudio.com/team-services/tfs-pricing). + + + +
    +### Refresh the web portal + +If data doesn't appear as expected, the first thing to try is to refresh your web browser. Refreshing your client updates the local cache with changes that were made in another client or in TFS. To refresh the page or object you're currently viewing, refresh the page or choose the ![Refresh icon](../work/_img/icons/icon-refresh-wi.png) **Refresh** icon if available. + +[!INCLUDE [temp](_shared/when-to-refresh-client.md)] + + +### Clients that connect to VSTS or TFS + +In addition to connecting through a web browser, you can connect to a team project from these clients: + +- [Visual Studio (Professional, Enterprise, Test Professional)](https://www.visualstudio.com/products/compare-visual-studio-2015-products-vs) +- [Visual Studio Code](https://code.visualstudio.com/Docs) +- [Visual Studio Community](https://www.visualstudio.com/products/visual-studio-community-vs.aspx) +- [Eclipse: Team Explorer Everywhere](http://java.visualstudio.com/Docs/tools/eclipse) +- [Office Excel](../work/office/bulk-add-modify-work-items-excel.md) +- [Office Project](../work/office/create-your-backlog-tasks-using-project.md) +- [PowerPoint Storyboarding](../work/office/storyboard-your-ideas-using-powerpoint.md) +- [Microsoft Test Manager](https://msdn.microsoft.com/library/jj635157.aspx) +- [Microsoft Feedback Client](../work/connect/give-feedback.md) + +### Differences between the web portal and Visual Studio + +Although you can access source code, work items, and builds from both clients, some task-specific tools are only supported in the web browser or an IDE, but not in both. + + + + + + + + + + + + + + +

    Web portal

    Visual Studio

      +
    • [Product backlog](../work/backlogs/create-your-backlog.md), [Portfolio backlogs](../work/kanban/kanban-epics-features-stories.md), [Sprint backlogs](../work/scrum/sprint-planning.md), [Task boards](../work/scrum/task-board.md), [Capacity planning](../work/scale/capacity-planning.md)

    • +
    • [Kanban board](../work/kanban/kanban-basics.md)

    • +
    • [Dashboards](../report/dashboards.md), [Widgets](../report/widget-catalog.md), and [Charts](../report/charts.md)

    • +
    • [Team rooms](../collaborate/collaborate-in-a-team-room.md)

    • +
    • [Request feedback](../work/connect/get-feedback.md)

    • +
    • Web-based Test Management

    • +
    • Administration pages to administer accounts, team projects, and teams

    • +
      +
    • Task specific interfaces that integrate with Git and TFVC, such as: +

      +
        +
      • Git: [Changes](../git/tutorial/commits.md#stage-your-changes-and-commit) | [Branches](../git/tutorial/branches.md) | [Pull Requests](../git/tutorial/pullrequest.md) | [Sync](../git/tutorial/pulling.md) | [Work Items](../work/backlogs/add-work-items.md) | [Builds](https://msdn.microsoft.com/library/ms181721.aspx)

      • +
      • TFVC: [My Work](../tfvc/develop-code-manage-pending-changes.md#use-the-my-work-page-to-manage-your-work) | [Pending Changes](../tfvc/develop-code-manage-pending-changes.md#use-the-pending-changes-page-to-manage-your-work) | [Source Control Explorer](../tfvc/develop-code-manage-pending-changes.md#use-solution-explorer-or-source-control-explorer-to-view-what-you-changed) | [Work Items](../work/backlogs/add-work-items.md) | [Builds](https://msdn.microsoft.com/library/ms181721.aspx)

      • +
      +
    • +
    • Greater integration with work items and Office-integration clients. You can open a work item or query result in an office supported client.

    • +
    • Additional text formatting options for rich-text fields in work item forms.

    • +
    + +### Can I open a query in Excel or Project from the web portal? + +To open Excel from the web portal, install the [VSTS Open in Excel](https://marketplace.visualstudio.com/items?itemName=blueprint.vsts-open-work-items-in-excel) Marketplace extension. Otherwise, you can open [Excel](../work/office/bulk-add-modify-work-items-excel.md) or [Project](../work/office/create-your-backlog-tasks-using-project.md) and then open a query that you've created in the web portal. + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] + + + diff --git a/docs/deploy-azure/index.md b/docs/deploy-azure/index.md new file mode 100644 index 00000000000..38df4fbb960 --- /dev/null +++ b/docs/deploy-azure/index.md @@ -0,0 +1,38 @@ +--- +title: Deploy to Azure index to content | Microsoft Docs +description: Learn how to deploy to Azure using VSTS. Tutorials, references, and other documentation. +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 00f4ed452-fbb8-45f9-8f0a-343702aac5b8 +ms.manager: douge +ms.author: kaelli +ms.date: 07/20/2017 +layout: LandingPage +--- + +# Deploy to Azure + +Visual Studio Team Services (VSTS) is Microsoft's DevOps solution for Azure. Whether you are developing a .NET, Java, Node, PHP, or a Python app, or whether you are targeting app services, virtual machines, or containers in Azure, VSTS helps you set up a highly customizable continuous integration (CI) and continuous delivery (CD) pipeline. Tutorials, references, and other documentation show you how to configure and manage CI/CD for the app of your choice to Azure services. + +## 5-Minute Quickstarts + +Learn how to build your app and deploy it to your choice of Azure service. + + + + +## Step-by-Step Tutorials + +* [Set up multi-stage release](../build-release/actions/define-multistage-release-process.md?toc=/vsts/deploy-azure/toc.json&bc=/vsts/deploy-azure/breadcrumb/toc.json) +* [CI builds for Git in VSTS](../build-release/actions/ci-build-git.md?toc=/vsts/deploy-azure/toc.json&bc=/vsts/deploy-azure/breadcrumb/toc.json) + +## Videos + +[![Zero to DevOps](../build-release/_img/index/zero-to-devops-video.png)](https://channel9.msdn.com/events/Visual-Studio/Visual-Studio-2017-Launch/190) + +## Resources + +- [What is Continuous Integration?](https://www.visualstudio.com/learn/what-is-continuous-integration/) +- [What is Continuous Delivery?](https://www.visualstudio.com/learn/what-is-continuous-delivery/) +- [What is DevOps?](https://www.visualstudio.com/learn/what-is-devops/) +- [Build and release in VSTS](../build-release/index.md) diff --git a/docs/deploy-azure/toc.yml b/docs/deploy-azure/toc.yml new file mode 100644 index 00000000000..ab4fc910979 --- /dev/null +++ b/docs/deploy-azure/toc.yml @@ -0,0 +1,24 @@ +- name: Deploy to Azure + href: index.md +- name: Overview + items: + - name: About Deploying to Azure + href: /vsts/build-release/overview-azure?toc=/vsts/deploy-azure/toc.json&bc=/vsts/deploy-azure/breadcrumb/toc.json +- name: Quickstarts + items: + - name: "Azure Web App" + href: /vsts/build-release/apps/cd/azure/aspnet-core-to-azure-webapp?toc=/vsts/deploy-azure/toc.json&bc=/vsts/deploy-azure/breadcrumb/toc.json + - name: "Windows VM" + href: /vsts/build-release/apps/cd/deploy-webdeploy-iis-deploygroups?toc=/vsts/deploy-azure/toc.json&bc=/vsts/deploy-azure/breadcrumb/toc.json + - name: "Web App for Containers" + href: /vsts/build-release/apps/cd/deploy-docker-webapp?toc=/vsts/deploy-azure/toc.json&bc=/vsts/deploy-azure/breadcrumb/toc.json +- name: Tutorials + items: + - name: Set up multi-stage release + href: /vsts/build-release/actions/define-multistage-release-process?toc=/vsts/deploy-azure/toc.json&bc=/vsts/deploy-azure/breadcrumb/toc.json + - name: CI builds for Git in VSTS + href: /vsts/build-release/actions/ci-build-git?toc=/vsts/deploy-azure/toc.json&bc=/vsts/deploy-azure/breadcrumb/toc.json +- name: Resources + items: + - name: Build and Release + href: /vsts/build-release diff --git a/docs/design/index.md b/docs/design/index.md new file mode 100644 index 00000000000..7fc640cca40 --- /dev/null +++ b/docs/design/index.md @@ -0,0 +1,14 @@ +--- +title: Design +description: Design +ms.assetid: 08977074-E5C2-4568-9987-D98E4C592A23 +ms.prod: visual-studio-dev15 +ms.technology: vs-devops-wit +ms.manager: douge +ms.author: douge +ms.date: 01/06/2017 +--- + +# Architecture design topics have moved + +See [Analyze and model your architecture](https://docs.microsoft.com/visualstudio/modeling/analyze-and-model-your-architecture) diff --git a/docs/design/overview.md b/docs/design/overview.md new file mode 100644 index 00000000000..4abfedd5950 --- /dev/null +++ b/docs/design/overview.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/design/index +--- diff --git a/docs/design/toc.yml b/docs/design/toc.yml new file mode 100644 index 00000000000..0464d6f536a --- /dev/null +++ b/docs/design/toc.yml @@ -0,0 +1,2 @@ +- name: Design + href: https://docs.microsoft.com/visualstudio/modeling/analyze-and-model-your-architecture diff --git a/docs/devops-alm-overview.md b/docs/devops-alm-overview.md new file mode 100644 index 00000000000..ddbaa60e054 --- /dev/null +++ b/docs/devops-alm-overview.md @@ -0,0 +1,505 @@ +--- +title: DevOps overview for Team Services and TFS +description: Guide to getting started using DevOps and Agile tools provided by Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.assetid: 0C0261DC-57B7-4520-82A4-2C2AB7AB0F4A +ms.manager: douge +ms.author: kaelli +ms.date: 06/22/2017 +--- + +# DevOps overview for Team Services and TFS + +Team Services | TFS 2017 | TFS 2015 | TFS 2013 + +Use our integrated tool set to speed the development and delivery of your software applications. Build better apps for any platform, including iOS, Android, Java, Linux or Windows. + +![Continuous planning and delivery](_img/alm-devops-continuous-planning-delivery-code-test-analytics.png) + +VSTS and Azure cloud services help remove barriers between teams, encourage collaboration, and improve the flow of value to your customers. Or, use our on-premises server, Team Foundation Server (TFS), when you want to maintain your data within your network. + +Both options are enterprise-ready, supporting teams of any size, from tens to thousands. Team Services provides a scalable, reliable, and globally available hosted service. It is backed by a 99.9% SLA, monitored by our 24—7 operations team, and available in local data centers around the world. + +Also, you can quickly expand the power of these tools through integration with other services and tools using service hooks and extensions. + +For the key differences between TFS and Team Services, see [About VSTS and Team Foundation Server](about-vsts-tfs.md). + +## Get started in the cloud or on-premises +Whether you work in the cloud, on-premises, or a hybrid of each, you have a comprehensive set of DevOps and Agile tools to support team collaboration throughout the cycles of planning, development and test, and continuous delivery. + + +### Work in the cloud +Choose Team Services when you want quick setup, maintenance-free operations, easy collaboration across domains, elastic scale, and rock solid security. You'll also have access to cloud load testing, cloud build servers, and application insights. [Small teams can start for free!](https://www.visualstudio.com/products/visual-studio-team-services-vs.aspx) + + +[![Sign up for Team Services](_img/overview/vsts-setup-1.png)](accounts/create-account-msa-or-work-student.md)[![Add team members](_img/overview/vsts-setup-3.png)](accounts/add-team-members-vs.md)[![Add code to repository](_img/overview/vsts-setup-4.png)](#add-code) + +### Work on-premises +Choose on-premises TFS when you need your data to stay within your network or you want access to SharePoint sites and SQL Server reporting services that integrate with TFS data and tools. + +[![Install TFS](_img/overview/tfs-setup-1.png)](tfs-server/install/single-server.md)[![Create a team project](_img/overview/tfs-setup-2.png)](accounts/create-team-project.md)[![Add team members](_img/overview/tfs-setup-3.png)](accounts/add-users.md)[![Configure a backup schedule](_img/overview/tfs-setup-4.png)](tfs-server/admin/backup/back-up-restore-tfs.md) + + +## Develop code using your IDE of choice + +Team Services supports two types of version control Git and Team Foundation Version Control (TFVC). Use Git, Team Foundation version control (TFVC) or both to store code for your app and give you access to different versions of your code. + +Depending on whether you use Git or TFVC as a repo, you can develop your code in Android Studio, Eclipse, IntelliJ, Visual Studio, Visual Studio Code, or Xcode. + +### Git + +Git is a distributed version control system. Each developer has a copy of the source repository on their dev machine. Developers can commit each set of changes on their dev machine and perform version control operations such as history and compare without a network connection. Branches are lightweight. + +[![Android Studio](_img/overview/code-git-android-studio-1.png)](http://java.visualstudio.com/docs/tools/androidstudio)      [![Eclipse](_img/overview/code-git-eclipse-2.png)](./git/share-your-code-in-git-eclipse.md)      [![IntelliJ](_img/overview/code-git-intellij-3.png)](http://java.visualstudio.com/docs/tools/intellij) + +
    +[![Visual Studio](_img/overview/code-git-visual-studio.png)](./git/share-your-code-in-git-vs.md)      [![Visual Studio Code](_img/overview/code-git-visual-studio-code.png)](https://code.visualstudio.com/docs/editor/versioncontrol)      [![Xcode](_img/overview/code-git-xcode.png)](./git/share-your-code-in-git-xcode.md) + +### TFVC + +TFVC is a centralized version control system that lets you apply granular permissions and restrict access down to a file level. Typically, team members have only one version of each file on their dev machines. Historical data is maintained only on the server. Branches are path-based and created on the server. + +You can use TFVC to scale from small to large projects, and by using server workspaces, you can scale up to very large codebases with millions of files per branch and large binary files. And with compare and annotate you can identify the exact changes that they made. + +[![Eclipse](_img/overview/code-tfvc-eclipse.png)](./tfvc/share-your-code-in-tfvc-eclipse.md)      [![Visual Studio](_img/overview/code-tfvc-visualstudio.png)](./tfvc/share-your-code-in-tfvc-vs.md#workspace)      [![Xcode](_img/overview/code-tfvc-xcode.png)](./tfvc/share-your-code-in-tfvc-xcode.md) + + +###Package management and code search + +Software development teams often rely on re-using libraries or providing libraries for others to re-use. Package management supports code sharing as binary components across organizations and within teams. With it, you can build projects to produce packages and update projects that consume updated packages. Our package management service enables plugging in existing package management services you already use, such as local NuGet servers for IP protection, NuGet, MyGet, or Artifactory. + + + +
    +

    Package Management

    +
      +
    • [Package Management overview](package/overview.md)
    • +
    • [What is Package Management?](package/index.md)
    • + +
    +
    + +
    +

    Code Search

    +
      +
    • [Search across all your code](search/overview.md)
    • +
    • [Code Search extension](https://marketplace.visualstudio.com/items/ms.vss-code-search)
    • + +
    +
    + +
    +

    Also of interest

    +
      +
    • [CodePlex Project Hosting for Open Source Software](http://www.codeplex.com/)
    • +
    • [Find code changes and other history with CodeLens](https://msdn.microsoft.com/library/dn269218.aspx)
    • +
    +
    + +
    +
    + +Code Search provides a comprehensive solution to all your code exploration and troubleshooting needs. From discovering examples of an API's implementation to searching for error text, Code Search offers a fast and powerful way to find code. Search across one or more projects, with semantic ranking and rich search results to ensure you find what you need and can focus in to understand your code. Code Search lets you filter your results based on code types such as definitions, comments, and references; filter by path, file extension, or repository; and use logical operators such as AND, OR, NOT to refine your query and get the results you need. + +Code Search also makes team collaboration easier and helps maximize developer efficiency. View history and annotations to see who last changed a line of code, and what they changed. Search locally within code files, and find references or definitions of Code Search matches, when debugging or exploring your code. Add your comments and then communicate the results to team members easily by sharing the query URL. + +## Plan and track work with Agile tools + + Use Agile tools to plan and track work using Scrum and Kanban processes or a mix of both. Scrum tools support defining and managing work within sprints, setting capacity, and tracking tasks. Kanban tools allow you to manage a continuous flow of work via an interactive sign board. In addition, configurable charts, dashboards, and reports help teams monitor and share progress. + +[![Define stories](_img/overview/ov-agile-plan-1.png)](work/backlogs/create-your-backlog.md)[![Plan sprints](_img/overview/ov-agile-plan-2.png)](./work/scrum/sprint-planning.md)      [![Kanban workflow](_img/overview/ov-agile-plan-3.png)](work/kanban/kanban-basics.md)       [![Dashboards](_img/overview/ov-agile-plan-dashboards-4.png)](report/dashboards.md) + + +You also gain access to a [rich set of customization capabilities](work/customize/customize-work.md). + + + +## DevOps: Build - Test - Release + +Help your team continuously deliver software at a faster pace and with lower risk, while improving efficiency and collaboration between all teams that participate in release processes. Set up continuous integration builds for your app that run with every check in. Multi-platform build agents support Android, iOS, Java, .NET, and other applications. Easily load test your apps and provision test environments. Track when the quality is sufficient to release to the customer. + +[![Build your software](_img/overview/ov-devops-build.png)](build-release/tasks/index.md)[![Set up continuous testing](_img/overview/ov-devops-test.png)](build-release/test/set-up-continuous-testing-builds.md)[![Create a release](_img/overview/ov-devops-release.png)](build-release/actions/create-deploy-releases.md) + + + +In addition to continuous integration testing, you can create [test plans](manual-test/getting-started/create-a-test-plan.md), [perform manual testing](manual-test/index.md), and [run unit tests](https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios). + +Release Management helps you automate the deployment and testing of your software in multiple environments. With it, you can either fully automate the delivery of your software all the way to production, or set up semi-automated processes with approvals and on-demand deployments. + + + + + + +## Scale up + +As your team grows, your tools will grow with you. You can easily add teams which can focus on their set of backlog stories. Each team you create gets access to their set of dashboards, Agile planning tools, and other collaborative tools. + +[![Add teams](_img/overview/ov-scale-1.png)](./work/scale/multiple-teams.md)[![Set team defaults](_img/overview/ov-scale-2.png)](./work/scale/set-team-defaults.md)[![Manage team assets](_img/overview/ov-scale-3.png)](./work/scale/manage-team-assets.md) + + +## Related notes + +Once you've signed up for Team Services or installed TFS, you'll want to get familiar with the [web portal and working in the user and admin contexts](connect/work-web-portal.md). + +Other topics of interest: + +- [About VSTS and Team Foundation Server](about-vsts-tfs.md) - [Key concepts](concepts.md) +- [Essential services](services.md) +- [Client-server tools](tools.md) +- [Software development roles](roles.md) + + +### TFS updates + +- [Migrate data from TFS to Team Services](migrate-to-vsts-from-tfs.md) + +### Pricing, costs, and licenses +[Team Services Pricing](https://www.visualstudio.com/team-services/pricing/) provides per user costs. Small teams (5 users or fewer) can start for free. Unlimited Visual Studio subscribers are free. + +On-premises TFS provides three access levels: [Stakeholder, Basic, and Advanced](security/change-access-levels.md). You don't need to buy additional licenses for Visual Studio subscribers. Use the [Team Foundation Server pricing page](https://www.visualstudio.com/team-services/tfs-pricing) to plan your licensing requirements. + + +### Extensibility: Create first-class integration experiences + +Our extensibility framework enables you to build integrations directly within Team Services or TFS to create first-class, seamless connections between different tools and services. + +With Marketplace extensions (currently in private preview), you can create first-class integration experiences, such as a simple context menu or toolbar action. Or, you can create a complex, powerful full UI experience that seamlessly lights up within the VSTS web portal. + +
    +

    Marketplace

    +
      +
    • [Find marketplace extensions](marketplace/index.md)
    • +
    • [Buy subscriptions](billing/vs-subscriptions/buy-vs-subscriptions.md)
    • +
    • [Get extensions](marketplace/install-vsts-extension.md)
    • +
    +
    + +
    +

    Service hooks

    +
      +
    • [Using service hooks](service-hooks/index.md)
    • +
    • [Authorize](service-hooks/authorize.md)
    • +
    • [Create subscriptions](service-hooks/create-subscription.md)
    • +
    • [Service hook consumers](service-hooks/consumers.md)
    • +
    • [Service hook events](service-hooks/events.md)
    • +
    +
    + +
    +

    REST APIs

    +
      +
    • [Get started with REST APIs](integrate/get-started/rest/basics.md)
    • +
    • [Choosing the right authentication mechanism](integrate/get-started/authentication/authentication-guidance.md)
    • +
    • [.NET client libraries](integrate/get-started/client-libraries/dotnet.md)
    • +
    • [C# client library samples](integrate/get-started/client-libraries/samples.md)
    • +
    • [REST API Reference](https://visualstudio.com/integrate/api/overview.md)
    • +
    +
    + + + + + +
    +

    Also of interest

    +
      +
    • [Self-help integration options](http://www.visualstudio.com/integrate/support/support-overview-vsi)
    • +
    • [Visual Studio Partner program](https://vsipprogram.com/About)
    • +
    • [Products and extensions for Visual Studio](https://visualstudiogallery.msdn.microsoft.com)
    • +
    • [Extension examples](https://github.com/Microsoft/vso-extension-samples)
    • +
    • [Client-object model SDK](tfs-server/architecture/extend-vs-for-alm.md) (TFS)
    • +
    +
    +
    +
    + + +Service hooks enable integration scenarios between other applications and VSTS or your on-premises TFS by subscribing to events instead of constantly polling for them. Service hooks provide a more efficient way to drive activities when events happen in your team projects. For example, you can send a push notification to your team's mobile devices when a build fails, or create a card in Trello when a work item is created. Some of the services you can easily integrate with are UserVoice, Zendesk, Trello, Slack, and HipChat. + +Industry-standard RESTful APIs extend the power of VSTS and TFS from your apps and services. With them, you can integrate from virtually any device, platform, or technology stack, including Windows, Android, iOS, Node.js, and more. + + +### Analytics: Monitor your apps to gain insight + +Monitor your web and device apps to gain actionable insight to improve performance, determine usage patterns, and plan for the next version of your software. + + +[Use Application Insights](http://azure.microsoft.com/documentation/services/application-insights/) to understand how your app is being used and to make sure it is performing well. Detect issues, diagnose crashes and track usage of your mobile apps, and web apps hosted from Azure, or your own IIS or J2EE servers. + +[Use HockeyApp](http://hockeyapp.net/features/) to distribute beta versions of your apps on iOS, Android, Mac OS X, and Windows, collect live crash reports, get feedback from users, recruit new testers, and analyze test coverage. + +
    +

    Application Insights

    +
      +
    • [What is Application Insights?](https://docs.microsoft.com/azure/application-insights/app-insights-overview)
    • +
    • [Monitor ASP.NET websites](https://docs.microsoft.com/azure/application-insights/app-insights-asp-net)
    • +
    • [Monitor Java web projects](https://docs.microsoft.com/azure/application-insights/app-insights-java-get-started)
    • +
    • [Monitor HockeyApp data](https://docs.microsoft.com/azure/application-insights/app-insights-hockeyapp-bridge-app)
    • + +
    +
    + +
    +

    HockeyApp

    +
  • [Manage mobile apps with HockeyApp](https://support.hockeyapp.net/kb/app-management-2/how-to-create-a-new-app)
  • +
  • [Get HockeyApp plans](billing/get-hockeyapp.md)
  • +
  • [Get HockeyApp extension](https://marketplace.visualstudio.com/items?itemname=ms.hockeyapp)
  • + +
    + +
    +

    Also of interest

    +
      +
    • [Application insight videos](https://azure.microsoft.com/documentation/services/application-insights/)
    • +
    • [Get started tutorial](https://azure.microsoft.com/documentation/articles/app-insights-get-started/)
    • +
    +
    + +
    +
    + + + diff --git a/docs/docfx.json b/docs/docfx.json index cb68737f1b6..ba16398bcb8 100644 --- a/docs/docfx.json +++ b/docs/docfx.json @@ -3,7 +3,7 @@ "content": [ { "files": [ - "**/*.md" + "**/*.md", "**/*.yml" ], "exclude": [ "**/obj/**", @@ -19,7 +19,10 @@ { "files": [ "**/*.png", - "**/*.jpg" + "**/*.jpg", + "**/*.gif", + "**/*.mp4", + "**/*.svg" ], "exclude": [ "**/obj/**", @@ -29,9 +32,20 @@ ], "overwrite": [], "externalReference": [], - "globalMetadata": {}, + "globalMetadata": { + "uhfHeaderId": "MSDocsHeader-TeamServices", + "ms.topic": "conceptual", + "breadcrumb_path": "~/breadcrumb/toc.yml", + "author": "douge", + "ms.author": "douge", + "ms.date": "07/13/2017", + "ms.prod": "vs-devops-alm", + "ms.version": "ALM", + "MSHAttr.msprod": "ms.prod:ALM", + "ms.prodfamily": "ALM" + }, "fileMetadata": {}, "template": [], "dest": "team-services" } -} \ No newline at end of file +} diff --git a/docs/ecosystem/sharepoint/_img/deprecation/tfs-server-config-wizard-1.png b/docs/ecosystem/sharepoint/_img/deprecation/tfs-server-config-wizard-1.png new file mode 100644 index 00000000000..a320fda4901 Binary files /dev/null and b/docs/ecosystem/sharepoint/_img/deprecation/tfs-server-config-wizard-1.png differ diff --git a/docs/ecosystem/sharepoint/_shared/about-sharepoint-deprecation.md b/docs/ecosystem/sharepoint/_shared/about-sharepoint-deprecation.md new file mode 100644 index 00000000000..39047456643 --- /dev/null +++ b/docs/ecosystem/sharepoint/_shared/about-sharepoint-deprecation.md @@ -0,0 +1,4 @@ + + +> [!NOTE] +> TFS 2018 and later versions no longer support native integration with SharePoint products. If you're planning to upgrade to TFS 2018, read [About SharePoint integration](/vsts/ecosystem/sharepoint/about-sharepoint-integration) to learn about the options available to you. \ No newline at end of file diff --git a/docs/ecosystem/sharepoint/about-sharepoint-integration.md b/docs/ecosystem/sharepoint/about-sharepoint-integration.md new file mode 100644 index 00000000000..7421898a02c --- /dev/null +++ b/docs/ecosystem/sharepoint/about-sharepoint-integration.md @@ -0,0 +1,65 @@ +--- +title: About SharePoint Integration +description: TFS/SharePoint integration - About SharePoint Integration +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: +ms.manager: abjork +ms.author: greggboe +ms.date: 09/08/07 +ms.topic: get-started-article +--- + +# About SharePoint integration + +[!INCLUDE [temp](../../_shared/version-vsts-tfs-all-versions.md)] + +SharePoint products are a valuable resource to users of Visual Studio Team Services (VSTS) and Team Foundation Server (TFS). With a SharePoint site, teams can easily store and share Office documents. SharePoint sites can be configured to show all kinds of information. We expect and encourage VSTS and TFS teams to use SharePoint and will continue to look for ways to make the integration of VSTS and TFS and SharePoint Server and SharePoint online, be better together. + +## TFS 2017 and earlier versions + +Since its inception in 2005, TFS has integrated with SharePoint. That integration included SharePoint site templates and automatic site provisioning as well as support for browsing document libraries from inside Visual Studio Team Explorer. This integration works for SharePoint Server 2010 and 2013. It does not integrate with SharePoint Online nor support integration with VSTS. + +With TFS 2013, TFS-SharePoint integration required you to install the TFS Extension for SharePoint on the SharePoint server and configure both servers to recognize each other. This integration provided the following features: +* Automatically create a SharePoint site when creating a team project +* Provision dashboard pages on that SharePoint site +* Install SharePoint web parts that display TFS information such as work item query results and latest build results. +* Support for browsing your SharePoint document libraries directly from Visual Studio Team Explorer. + +However, you should consider the following before moving forward with this integration: +* You can create your SharePoint site using SharePoint itself. Microsoft Teams also creates a team SharePoint site for sharing information +* TFS 2017 Update 2 and later versions support [Dashboards](../../report/dashboards.md). Dashboards provide a very practical replacement for the TFS-SharePoint dashboards. +* TFS dashboards offer an extensive [catalog of widgets](../../report/widget-catalog.md) which replace all of the SharePoint web parts offered by this integration. Additionally, you can find widgets developed by our partners from the [VSTS Marketplace](https://marketplace.visualstudio.com/search?term=widgets&target=VSTS&category=All%20categories&sortBy=Relevance). +* Starting with TFS 2018, we are deprecating the tightly-coupled TFS-SharePoint integration in favor of integration using public APIs and extensibility frameworks. + +You may want to ask yourself whether the integration benefits outweigh the costs of configuration. + +If you are running TFS 2017 or earlier and want to configure your integration with SharePoint 2010 or 2013, read [Configure SharePoint Integration - TFS 2017 and Earlier](./configure-sharepoint-tfs-2017-earlier.md) + +**If you are running TFS 2017, configured to integrate with SharePoint 2013, and want to upgrade to SharePoint 2016**, you will need to disable SharePoint integration during the upgrade, or your upgrade will fail. For more information, read [Upgrade from SharePoint 2013 with TFS integration to SharePoint 2016](./deprecation/upgrade-from-sharepoint2013-to-sharepoint-2106.md). + + +## TFS 2018 and later versions +Starting with TFS 2018, we will no longer offer the TFS Extension for SharePoint. Additionally, we won't support TFS 2017 integration with SharePoint 2016 (the TFS Extension for SharePoint only supports Sharepoint 2013 and earlier versions). TFS 2017 and earlier versions will continue to work with their supported versions of SharePoint. For more information, read [Discontinue TFS 2017 (and earlier versions) SharePoint integration](./deprecation/discontinue-pre-tfs-2017-sharepoint-integration.md). + +**If you are upgrading to TFS 2018 from a previous version configured to integrate with SharePoint**, you will need to disable the SharePoint integration after upgrade, or your TFS SharePoint sites will fail to load. For more information, read [Disable SharePoint integration after TFS 2018 upgrade](./deprecation/disable-tfs-sharepoint-integration-after-tfs-2018-upgrade.md). + +## Future plans for TFS and VSTS SharePoint integration + +Currently, our TFS and VSTS dashboards will meet most of your reporting requirements, replacing the previous dependency on TFS-SharePoint dashboards. + +In the future, we plan to provide a way to embed a TFS or VSTS dashboard on a SharePoint site. From SharePoint, you will simply select a TFS or VSTS Dashboard to display, and it will be embedded on the SharePoint site. +This will occur without laborious configurations. It will just work. It will also support both TFS and VSTS and SharePoint Server and SharePoint online. + +If you need more than the built-in dashboards can offer, Power BI reports and Excel charts can be embedded on a SharePoint site. This functionality is available today. + +We will update this topic as we provide additional SharePoint integrations. + +## Referenced topics + +- [Add and manage dashboards](../../report/dashboards.md) +- [Widget catalog](../../report/widget-catalog.md) +- [Configure SharePoint Integration: TFS 2017 and earlier versions](./configure-sharepoint-tfs-2017-earlier.md) +- [Discontinue SharePoint integration: TFS 2017 and earlier versions](./deprecation/discontinue-pre-tfs-2017-sharepoint-integration.md) +- [Upgrade from SharePoint 2013 with TFS integration to SharePoint 2016](./deprecation/upgrade-from-sharepoint2013-to-sharepoint-2106.md) +- [VSTS Marketplace](https://marketplace.visualstudio.com/search?term=widgets&target=VSTS&category=All%20categories&sortBy=Relevance) diff --git a/docs/ecosystem/sharepoint/breadcrumb/toc.yml b/docs/ecosystem/sharepoint/breadcrumb/toc.yml new file mode 100644 index 00000000000..b1f9a595359 --- /dev/null +++ b/docs/ecosystem/sharepoint/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Extend + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=integration + items: + - name: SharePoint Integration + tocHref: /vsts/ + topicHref: /vsts/ecosystem/sharepoint/index \ No newline at end of file diff --git a/docs/ecosystem/sharepoint/configure-sharepoint-tfs-2017-earlier.md b/docs/ecosystem/sharepoint/configure-sharepoint-tfs-2017-earlier.md new file mode 100644 index 00000000000..349880e0021 --- /dev/null +++ b/docs/ecosystem/sharepoint/configure-sharepoint-tfs-2017-earlier.md @@ -0,0 +1,51 @@ +--- +title: Configure SharePoint Integration - TFS 2017 and Earlier +description: TFS/SharePoint Integration - Configure SharePoint Integration - TFS 2017 and Earlier +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: +ms.manager: abjork +ms.author: greggboe +ms.date: 09/07/07 +ms.topic: +--- + + + +# Configure TFS-SharePoint integration + +[!INCLUDE [temp](./_shared/about-sharepoint-deprecation.md)] + +By adding one or more servers running SharePoint Products to your Team Foundation Server (TFS) deployment, you can add Web publishing and project collaboration features to Team Foundation. These features can improve communication and increase sharing ideas among users who are assigned tasks in team projects. + +The project portal for your team project provides a central location for storing documents, posting announcements, listing build information, and reporting on your team project status. To utilize the integration between Visual Studio Team Foundation Server and SharePoint Products, you must add users to one or more groups and roles in SharePoint Products, depending on the functionality required to do their jobs. + +In addition, you can customize SharePoint Web applications in a number of ways to better meet the needs of your organization, including organizing Web sites in a predictable hierarchy or sharing process guidance across your organization. + +To get started... + +The TFS/SharePoint integration for TFS 2017 and earlier versions requires you to do the following: +* [Install the TFS Extension for SharePoint on the SharePoint server](/vsts/tfs-server/install/sharepoint/install-sharepoint?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json). +* From the TFS Management Console on TFS, [configure your TFS server to grant access to the SharePoint server](../../tfs-server/install/sharepoint/config-enterprise-app-def.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json). +* From the TFS Management Console on SharePoint, [configure your SharePoint server to grant access to your TFS Server](/vsts/tfs-server/admin/config-ent-sharepoint0710-dashboards?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json). +* If you plan to take advantage of Excel Charts on your SharePoint sites: + * On SharePoint 2010, you need to [configure Office SharePoint Server](https://msdn.microsoft.com/en-us/library/ee462863(v=vs.100).aspx). + * On SharePoint 2013, you need to [configure Excel Services](../../tfs-server/install/sharepoint/install-sharepoint.md). + + +The following topics should be sufficient to help you through the general process of integrating SharePoint Products with TFS, but other resources might help you understand the specific steps that your deployment might require. For the most recent information, see the following forum post on the Microsoft Web site: [SharePoint Integration with Team Foundation Server - Important Information](http://go.microsoft.com/fwlink/?LinkId=185224). + +- [Interactions Between SharePoint Products and Team Foundation Server](https://msdn.microsoft.com/library/ms253177.aspx): Describes how Team Foundation Server and SharePoint Products interact at a technical and conceptual level, and provides links to more information. +- [Connecting to a Server That Is Running SharePoint Products](https://msdn.microsoft.com/library/ms253085.aspx): Describes the various sites configured by Team Foundation Server on SharePoint Products as well as the default sites within SharePoint Products. +- [Roles in SharePoint Products](https://msdn.microsoft.com/library/ms252445.aspx): Describes the various default roles available in SharePoint Products. +- [Managing SharePoint Sites](https://msdn.microsoft.com/library/ms252503.aspx): Describes various administrative tasks for SharePoint Products, including how to create a SharePoint Web application and site collection for use with Team Foundation Server. +- [Extensions for SharePoint Products](https://msdn.microsoft.com/library/bb552177.aspx): Describes the templates that must be installed for SharePoint Products if it is not installed on the same server that is running the application-tier services for Team Foundation. +- [Upgrading SharePoint Products for Team Foundation Server](https://msdn.microsoft.com/library/bb909691.aspx)Describes the options for upgrading the version of SharePoint Products that supports your deployment of Team Foundation Server. +- [Add Integration with SharePoint Products to a Deployment of Team Foundation Server](https://msdn.microsoft.com/en-us/library/ee462861.aspx): Describes how to add SharePoint Products to a deployment of Team Foundation Server in an environment with full trust and little to no restrictions on permissions granted between the two programs. +- [Integrate Team Foundation Server with SharePoint Products Without Administrative Permissions](https://msdn.microsoft.com/en-us/library/ee462864.aspx): Describes how to add SharePoint Products to a deployment of Team Foundation Server in an environment that has restricted access or other security requirements and restrictions on what permissions can be granted between the two programs. +- [Configure Settings for Dashboard Compatibility](https://msdn.microsoft.com/library/ee462863.aspx): Describes how to configure a deployment of Microsoft Office SharePoint Server 2007 to support reports and dashboards in Team Foundation Server. + + + diff --git a/docs/ecosystem/sharepoint/deprecation/_img/discontinued-features-process-guidance-settings.png b/docs/ecosystem/sharepoint/deprecation/_img/discontinued-features-process-guidance-settings.png new file mode 100644 index 00000000000..921d1859fee Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/discontinued-features-process-guidance-settings.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/discontinued-features-project-portal-settings.png b/docs/ecosystem/sharepoint/deprecation/_img/discontinued-features-project-portal-settings.png new file mode 100644 index 00000000000..5b8fc046e81 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/discontinued-features-project-portal-settings.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/discontinued-features-sharepoint-web-parts.png b/docs/ecosystem/sharepoint/deprecation/_img/discontinued-features-sharepoint-web-parts.png new file mode 100644 index 00000000000..9ec3d639eff Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/discontinued-features-sharepoint-web-parts.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/documentspane.png b/docs/ecosystem/sharepoint/deprecation/_img/documentspane.png new file mode 100644 index 00000000000..63cd545f702 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/documentspane.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/excelcharts.png b/docs/ecosystem/sharepoint/deprecation/_img/excelcharts.png new file mode 100644 index 00000000000..71eac1104a0 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/excelcharts.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-after-upgrade-site-example.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-after-upgrade-site-example.png new file mode 100644 index 00000000000..bb42f30c2aa Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-after-upgrade-site-example.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-before-upgrade-diagram.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-before-upgrade-diagram.png new file mode 100644 index 00000000000..a08cb0b4add Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-before-upgrade-diagram.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-before-upgrade-site-example.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-before-upgrade-site-example.png new file mode 100644 index 00000000000..9ec3d639eff Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-before-upgrade-site-example.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-export-2013-content-database.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-export-2013-content-database.png new file mode 100644 index 00000000000..789327b3c36 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-export-2013-content-database.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-import-2013-content-database.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-import-2013-content-database.png new file mode 100644 index 00000000000..f3ec7b74af6 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-import-2013-content-database.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-import-errors.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-import-errors.png new file mode 100644 index 00000000000..f6834109da0 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-import-errors.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-install-tfs-disconnector.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-install-tfs-disconnector.png new file mode 100644 index 00000000000..e87ec7c7e2c Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-install-tfs-disconnector.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-setup-sharepoint-2016-diagram.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-setup-sharepoint-2016-diagram.png new file mode 100644 index 00000000000..6abd4efdd74 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepoint-2016-upgrade-setup-sharepoint-2016-diagram.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepointwebparts-query-lists.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepointwebparts-query-lists.png new file mode 100644 index 00000000000..00d7290525a Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepointwebparts-query-lists.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/sharepointwebparts.png b/docs/ecosystem/sharepoint/deprecation/_img/sharepointwebparts.png new file mode 100644 index 00000000000..0bcb7db73d8 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/sharepointwebparts.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/tfs-2018-upgrade-after-upgrade-site-example.png b/docs/ecosystem/sharepoint/deprecation/_img/tfs-2018-upgrade-after-upgrade-site-example.png new file mode 100644 index 00000000000..bb42f30c2aa Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/tfs-2018-upgrade-after-upgrade-site-example.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/tfs-2018-upgrade-install-tfs-disconnector.png b/docs/ecosystem/sharepoint/deprecation/_img/tfs-2018-upgrade-install-tfs-disconnector.png new file mode 100644 index 00000000000..b040cbae370 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/tfs-2018-upgrade-install-tfs-disconnector.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/tfs-2018-upgrade-uninstall-tfs-errors.png b/docs/ecosystem/sharepoint/deprecation/_img/tfs-2018-upgrade-uninstall-tfs-errors.png new file mode 100644 index 00000000000..1ea26361f3f Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/tfs-2018-upgrade-uninstall-tfs-errors.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/tfsdashboard.jpg b/docs/ecosystem/sharepoint/deprecation/_img/tfsdashboard.jpg new file mode 100644 index 00000000000..d754474d29d Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/tfsdashboard.jpg differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-1-click-title.png b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-1-click-title.png new file mode 100644 index 00000000000..6099896612c Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-1-click-title.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-1.png b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-1.png new file mode 100644 index 00000000000..783ad25aa75 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-1.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-2.png b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-2.png new file mode 100644 index 00000000000..832c9afc87a Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-2.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-3.png b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-3.png new file mode 100644 index 00000000000..675bda62f7e Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-3.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-4.png b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-4.png new file mode 100644 index 00000000000..bdba6c81aaa Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/update-excel-chart-step-4.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/_img/update-ssrs-report.png b/docs/ecosystem/sharepoint/deprecation/_img/update-ssrs-report.png new file mode 100644 index 00000000000..fe226664fe4 Binary files /dev/null and b/docs/ecosystem/sharepoint/deprecation/_img/update-ssrs-report.png differ diff --git a/docs/ecosystem/sharepoint/deprecation/disable-tfs-sharepoint-integration-after-tfs-2018-upgrade.md b/docs/ecosystem/sharepoint/deprecation/disable-tfs-sharepoint-integration-after-tfs-2018-upgrade.md new file mode 100644 index 00000000000..d0d6a3c1c8a --- /dev/null +++ b/docs/ecosystem/sharepoint/deprecation/disable-tfs-sharepoint-integration-after-tfs-2018-upgrade.md @@ -0,0 +1,61 @@ +--- +title: Disable SharePoint integration after TFS 2018 upgrade +description: TFS SharePoint integration - Disable SharePoint integration after TFS 2018 upgrade +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-integrate +ms.manager: abjork +ms.author: greggboe +ms.date: 09/07/07 +ms.topic: +--- + +# Disable SharePoint integration after TFS 2018 upgrade + +[!INCLUDE [temp](../_shared/about-sharepoint-deprecation.md)] + +With TFS 2018, we no longer offer the TFS Extension for SharePoint. For more information, read [Discontinuing the pre-TFS 2018 SharePoint integration](./discontinue-pre-tfs-2017-sharepoint-integration.md). + +> [!IMPORTANT] +> **If you are upgrading from a previous version configured to integrate with SharePoint, you will need to disable the SharePoint integration after upgrade, or your TFS SharePoint sites will fail to load.** + +This topic provides instructions on how to disable integration on a SharePoint 2013 server. If you wish to upgrade to SharePoint 2016, please see [Upgrade from SharePoint 2013 with TFS integration to SharePoint 2016](./upgrade-from-sharepoint2013-to-sharepoint-2106.md) + +## Installation and configuration +During installation, if SharePoint and TFS are on the same server, the installer will display the following warning message: + +> TFS 2018 and later versions no longer support integration with SharePoint. If you have configured TFS integration with SharePoint, then you will need to disconnect to the TFS Integration on each SharePoint server, or your TFS SharePoint sites will not work. For more information, carefully review the information at: https://go.microsoft.com/fwlink?LinkId=852977 before continuing. + +The installer only displays this message if it detects SharePoint is installed on the same machine as TFS. It checks for SharePoint 2010 and 2013. If an earlier version exists, the installer will not display the above warning. + +During configuration, if TFS-SharePoint integration was configured, the same message will be displayed as a critical warning. You are required to confirm you have read the warning before you can continue with the upgrade. + +## Uninstall TFS from the SharePoint Server +After upgrading the TFS server, you must uninstall the prior version of the TFS from the SharePoint server. + +> [!NOTE] +> If your TFS server and SharePoint server were on the same machine, then the prior version of TFS was uninstalled as a part of the TFS 2018 installation. +> +> If you have a SharePoint farm, you must uninstall TFS from each front-end machine. + +After uninstalling the TFS, the TFS SharePoint sites will fail to load. This is because they reference TFS artifacts that no longer exist. + +![TFS 2018 Upgrade - Disable SharePoint Integration - Uninstall TFS errors](./_img/tfs-2018-upgrade-uninstall-tfs-errors.png) + +The solution is to install the **TFS Disconnector for SharePoint** on the SharePoint 2013 server. + +![TFS 2018 Upgrade - Disable SharePoint Integration - Install TFS Disconnector for SharePoint](./_img/tfs-2018-upgrade-install-tfs-disconnector.png) + +The **TFS Disconnector for SharePoint** installs all the required references for TFS sites to display properly, while disabling TFS-SharePoint integration. + +To install the TFS Disconnector for SharePoint, follow these steps: + +1. Download the [TFS Disconnector for SharePoint](https://go.microsoft.com/fwlink/?linkid=854633) to the SharePoint 2013 server. Unzip the files. You will be running **uninstall.ps1** and **script.ps1** later. **Currently, the TFS Disconnector for SharePoint supports only English. It will be updated shortly with support for other languages.** + +1. Run "SharePoint 2013 Management Shell" as an administrator. +1. From the shell, run **uninstall.ps1** and complete all sections of the script. +1. From the shell, run **script.ps1** and complete all sections of the script. +1. Open **Central Administration>Monitoring>Check Job Status>Running** section and verify that the uninstall jobs finished prior to proceeding + +After the upgrade, your TFS SharePoint sites will display, but all integration functionality is disabled. The following image shows what the site will look like after you upgrade and disable SharePoint integration. + +![TFS 2018 Upgrade - Disable SharePoint Integration - Install TFS Disconnector for SharePoint](./_img/tfs-2018-upgrade-after-upgrade-site-example.png) diff --git a/docs/ecosystem/sharepoint/deprecation/discontinue-pre-tfs-2017-sharepoint-integration.md b/docs/ecosystem/sharepoint/deprecation/discontinue-pre-tfs-2017-sharepoint-integration.md new file mode 100644 index 00000000000..4b5705a20b7 --- /dev/null +++ b/docs/ecosystem/sharepoint/deprecation/discontinue-pre-tfs-2017-sharepoint-integration.md @@ -0,0 +1,67 @@ +--- +title: Discontinue TFS 2017 (and earlier) SharePoint integration +description: Discontinue TFS 2017 and earlier versions SharePoint integration +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-integrate +ms.manager: abjork +ms.author: greggboe +ms.date: 09/07/07 +ms.topic: +--- + +# Discontinue SharePoint integration: TFS 2017 and earlier versions + +**TFS 2017 | TFS 2015 | TFS 2013** + +Starting with TFS 2018, we will no longer offer the TFS Extension for SharePoint. Additionally, we have no plans to go back to TFS 2017 and add support for installing the TFS Extension for SharePoint on SharePoint 2016. Older versions of TFS (TFS 2017 and before) will continue to work with their supported versions of SharePoint. + +## Why are we doing this? + +The older TFS/SharePoint integration required the TFS Extension for SharePoint to be installed and running on the SharePoint server. It only worked when both TFS and SharePoint where installed on-prem. Both TFS and SharePoint have evolved to provide rich cloud experiences: Visual Studio Team Services (VSTS) and SharePoint Online. We need an integration solution that works both on-premises and in the cloud. + +We are moving away from the tightly coupled integration solution, to a loosely coupled model using public APIs and extensibility frameworks. The existing integration simply could not be brought into the future. + +As we reposition to the future, our integration story will support both TFS and VSTS working with SharePoint Server and SharePoint Online. + +## What features are impacted? + +Discontinuing support for the TFS Extension for SharePoint removes support for the following three features: +* Creation of a team project will no longer support creation of a SharePoint portal +* The TFS Web Parts on Classic SharePoint sites +* The Documents pane within Team Explorer + +For a detailed description and suggested replacements, read [Features removed when disabling SharePoint integration](./features-removed-when-disabling-sharepoint-integration.md) + +# Support Matrix +| TFS version | SharePoint 2010 | SharePoint 2013 | SharePoint 2016 | +| --- | --- | --- | --- | +| TFS 2010 | Supported | Supported | Not Supported | +| TFS 2012 | Supported | Supported | Not Supported | +| TFS 2013 | Supported | Supported | Not Supported | +| TFS 2015 | Supported | Supported | Not Supported | +| TFS 2017 | Supported | Supported | See **Upgrade to SharePoint 2016** below| +| TFS 2018 | Not Supported | See **Upgrade to TFS 2018** below | See **Upgrade to SharePoint 2016** below | + +## Upgrade to SharePoint 2016 +TFS 2017 does not support installing the TFS Extension for SharePoint on SharePoint 2016. If you have a TFS 2017 server configured to integrate with SharePoint 2013, upgrading to SharePoint 2016 will encounter errors (e.g.: MissingSiteDefinition, MissingFeature, MissingWebPart) + +We have created a solution that enables you to upgrade your SharePoint 2013 to SharePoint 2016. It ensures your TFS SharePoint sites display properly, while disabling the existing integration. + +For more information, read [Upgrade from SharePoint 2013 with TFS integration to SharePoint 2016](./upgrade-from-sharepoint2013-to-sharepoint-2106.md). + +## Upgrade to TFS 2018 +TFS 2018 does not include the TFS Extension for SharePoint. If you are upgrading from a previous version configured to integrate with SharePoint, you will need to disable the SharePoint integration after upgrade, or your TFS SharePoint sites will fail to load. + +We have created a solution that disables SharePoint integration on a SharePoint 2013 server. It ensures your TFS SharePoint sites display properly. + +For more information, read [Disable SharePoint integration after TFS 2018 upgrade](disable-tfs-sharepoint-integration-after-tfs-2018-upgrade.md). + + + + + + + + + + diff --git a/docs/ecosystem/sharepoint/deprecation/features-removed-when-disabling-sharepoint-integration.md b/docs/ecosystem/sharepoint/deprecation/features-removed-when-disabling-sharepoint-integration.md new file mode 100644 index 00000000000..501479470fb --- /dev/null +++ b/docs/ecosystem/sharepoint/deprecation/features-removed-when-disabling-sharepoint-integration.md @@ -0,0 +1,122 @@ +--- +title: Features removed when disabling SharePoint integration +description: TFS SharePoint integration - Features removed when disabling SharePoint integration +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-integrate +ms.manager: abjork +ms.author: greggboe +ms.date: 09/07/07 +ms.topic: +--- + +# Features removed when disabling SharePoint integration + +[!INCLUDE [temp](../_shared/about-sharepoint-deprecation.md)] + + +With TFS 2018, we no longer offer the TFS Extension for SharePoint. For more information, read the [Discontinuing the pre-TFS 2018 SharePoint integration model](./discontinue-pre-tfs-2017-sharepoint-integration.md) + +Beginning with TFS 2018, the features that the TFS Extension for SharePoint provided will no longer be available. This topic describes each feature being deprecated and proposed replacements. + +## Creation of a SharePoint site when creating a team project + +With TFS 2017 and earlier versions, when you created a team project, you could choose to create an associated SharePoint site. Going forward, this option will no longer be supported. + +Customers can create a SharePoint site using SharePoint's own interface. SharePoint administrators can [enable site creation for end-users](https://support.office.com/en-us/article/Manage-site-creation-in-SharePoint-Online-e72844a3-0171-47c9-befb-e98b23e2dcf9). + +Additionally, Microsoft has introduced [Microsoft Teams](https://products.office.com/microsoft-teams) which allows teams to collaborate on a set of shared resources. Every Team gets a shared SharePoint site, OneNote, and Documents library. + +We already offer [integration with Microsoft Teams](https://blogs.msdn.microsoft.com/visualstudioalm/2016/11/02/microsoft-teams-integration-with-team-services/) for both TFS and VSTS. As we look to the future, we are looking for more opportunities to integrate with both Microsoft Teams and SharePoint. + +## TFS web parts on Classic SharePoint sites +SharePoint web parts display TFS data such as work item summary, recent builds, recent check-ins, and work item queries. These web parts display on classic SharePoint sites but will not display on the latest versions of SharePoint sites offered in SharePoint 2016 or SharePoint Online. Going forward, we will no longer support these SharePoint web parts. + +**TFS web parts - summary lists** + +![TFS SharePoint Web Parts](./_img/sharepointwebparts.png) + +**TFS web parts - query-based lists** + +![TFS SharePoint Web Parts - Query lists](./_img/sharepointwebparts-query-lists.png) + +After upgrading to TFS 2018 or to SharePoint 2016, your TFS SharePoint sites will look something like this: + +![Discontinued Features as part of disabling SharePoint integration - SharePoint Site After upgrade](./_img/sharepoint-2016-upgrade-after-upgrade-site-example.png) + +VSTS and TFS offer [built-in dashboards](../../../report/dashboards.md). Each VSTS and TFS team can create any number of dashboards to meet their needs. Here is an example: + +![TFS/VSTS Dashboards](./_img/tfsdashboard.jpg) + +We will continue to invest in our built-in dashboards solution. We continue to develop widgets to provide instant insights into your data. Additionally, you can find widgets developed by our partners in the [VSTS Marketplace](https://marketplace.visualstudio.com/search?term=widgets&target=VSTS&category=All%20categories&sortBy=Relevance). + +In the future, we will provide ways of displaying our built-in dashboards on SharePoint pages. + + +## Display of Excel Reports on a SharePoint site +**Excel Charts continue to display on SharePoint sites, even after disabling SharePoint integration**. You will still be able to create Excel-based charts and host them on SharePoint sites. These charts can still connect to the existing TFS cube to get data. Any existing Excel-based charts hosted on SharePoint sites will continue to work. + +Displaying Excel Charts on a SharePoint site is based on Excel, Office Online Server, and SQL Server Reporting and Analysis technologies. It doesn’t require the TFS Extension for SharePoint to operate. + +> [!NOTE] +> If you are upgrading to SharePoint 2016, then Excel Services has been replaced by Office Online Server. To learn more, see [Upgrade from SharePoint 2013 with TFS integration to SharePoint 2016](./upgrade-from-sharepoint2013-to-sharepoint-2106.md). + +The TFS Extension for SharePoint did install a SharePoint timer job. When executed, this timer job would detect if: + +* The TFS Warehouse or Cube location or name had changed +* The TFS collection name had changed +* The name of the team project associated with a SharePoint site had changed + +If any of these changes were made, then it would update the Excel workbook’s filters and Data Connection string so the Excel Chart would continue to work. After disabling SharePoint integration, you'll need to update the Excel workbooks manually to reflect the changes. See [How to update an Excel chart on a SharePoint site](./update-excel-chart.md) + +## Display of SSRS Reports on a SharePoint site +**SSRS Reports continue to display on SharePoint sites, even after disabling SharePoint integration**. You can still create SSRS reports and host them on SharePoint sites. + +Displaying SSRS Reports in SharePoint is based on SharePoint and SQL Server Reporting Services technologies. It doesn’t require the TFS Extension for SharePoint to operate. The TFS site used the standard [SharePoint Page Viewer web part](https://support.office.com/en-us/article/Display-a-Web-page-on-a-SharePoint-page-by-adding-the-Page-Viewer-Web-Part-7F61FEEC-9B3D-4805-A960-07636BA59527) with a URL to the SSRS Report. + +The TFS Extension for SharePoint provides a URL re-director labeled **tfsredirect.aspx**. The URL provided to the Page Viewer web part is formatted as follows: + +``` +PATHTOCURRENTSITE/_layouts/TfsRedirect.aspx?tf:Type=Report&tf:ReportName=REPORTNAME&tf:ShowToolbar=0&Width=381pt&Height=180pt +``` + +The **tfsRedirect.aspx** looks up the location of the SQL Services Reporting Server and redirects the URL to display the report. After disabling TFS-SharePoint integration, this redirect functionality will continue to work until you do one of the following: + +* Move the location of your SQL Services Reporting Server +* Rename your team project +* Rename your collection + +If any of these changes are made, then you can replace the URL in the [Page Viewer web part](https://support.office.com/en-us/article/Display-a-Web-page-on-a-SharePoint-page-by-adding-the-Page-Viewer-Web-Part-7F61FEEC-9B3D-4805-A960-07636BA59527) with the full URL to the SSRS Report. See [Update SSRS Report after SharePoint is disabled](./update-ssrs-report.md) + +## Quick links on a SharePoint site +Quick links are listed on the left side navigation pane of a TFS SharePoint site. Quick links were supported by **tfsRedirect.aspx**. TFS SharePoint sites were created with the following Quick Links: + +* Team Web Access – Links to the TFS web access URL +* Reports – Links to the SQL Server Reporting Services (SSRS) Reports location +* Process Guidance – Links to process guidance topic, based on the project’s current process. + +These links will no longer work after you disable the SharePoint integration. You will need to either edit the links to point to the correct location, or delete them. + +## Manage a Documents library using the Team Explorer Documents pane +If you have [configured a SharePoint site for a team project](../../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json), Team Explorer displays a Documents pane to allow you to manage the Documents libraries on that SharePoint site. + +Going forward, the Documents pane within Team Explorer will no longer be supported. + +![Team Explorer Documents Pane](./_img/documentspane.png) + +We encourage customers to use [the OneDrive for Business sync client](https://support.office.com/en-us/article/Get-started-with-the-new-OneDrive-sync-client-in-Windows-615391c4-2bd3-4aae-a42a-858262e42a49), which works for both [SharePoint 2016](https://technet.microsoft.com/library/dn232145(v=office.16).aspx) and SharePoint Online. The OneDrive for Business sync client lets you select any SharePoint document library and sync the files to your local computer. The user can edit the files using Windows File Explorer, and changes are synced back to SharePoint. + +OneDrive for Business works for both Windows and [Mac](https://support.office.com/en-us/article/Get-started-with-the-new-OneDrive-sync-client-on-Mac-OS-X-d11b9f29-00bb-4172-be39-997da46f913f), and provides [mobile apps](https://onedrive.live.com/about/en-us/download/) for iOS, Android, and Windows Phone. + +Additionally, if you are using [Microsoft Teams](https://products.office.com/en-US/microsoft-teams), it provides easy access to the team’s Documents. + +## Project portal settings +Project portal settings that you configure from the Team Explorer pane allow you to configure the Project Portal link. It could point to a SharePoint site or any Web site. After disabling SharePoint integration, you will not be able to specify a SharePoint site. The Project Portal link only appeared on the Documents Pane. + +![Discontinued Features as part of disabling SharePoint integration - Project Portal Settings](./_img/discontinued-features-project-portal-settings.png) + +## Process guidance settings +Additionally, you could define the location of Process Guidance as a SharePoint site or any Web site. After disabling SharePoint integration, you will not be able to specify a SharePoint site. The Process Guidance link was used by Quick Links on the TFS SharePoint site. You may want to remove those links from your SharePoint sites or replace them with a hyperlink to your process guidance. + +![Discontinued Features as part of disabling SharePoint integration - Process Guidance Settings](./_img/discontinued-features-process-guidance-settings.png) + + diff --git a/docs/ecosystem/sharepoint/deprecation/update-excel-chart.md b/docs/ecosystem/sharepoint/deprecation/update-excel-chart.md new file mode 100644 index 00000000000..e89d6f487d4 --- /dev/null +++ b/docs/ecosystem/sharepoint/deprecation/update-excel-chart.md @@ -0,0 +1,50 @@ +--- +title: Update Excel Chart +description: TFS SharePoint integration - Update an Excel chart on a SharePoint site +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-integrate +ms.manager: abjork +ms.author: greggboe +ms.date: 09/07/07 +ms.topic: +--- + +# Update Excel Chart after SharePoint integration is disabled + +[!INCLUDE [temp](../_shared/about-sharepoint-deprecation.md)] + +Excel charts continue to work, even after disabling SharePoint integration. Displaying Excel Charts on SharePoint is based on Excel, Office Online Server, and SQL Server Reporting and Analysis technologies. It doesn’t require the TFS Extension for SharePoint to operate. + +The TFS Extension for SharePoint did install a SharePoint timer job. When executed, this timer job would detect if: +* The TFS Warehouse or Cube location or name had change +* The TFS collection name had changed +* The name of the team project associated with a SharePoint site had changed + +If any of these changes were made, then it will update the Excel workbook’s filters and Data Connection string so that the Excel charts will continue to work. + +With SharePoint integration disabled, the timer job no longer exists. Therefore, if any of the above changes are made, you'll need to update the filters and Data Connection string manually. + +Follow these steps to update the Data Connection string: + +1. Click the Chart Title to open the Excel workbook. + + ![TFS/SharePoint Integration - Update Excel Chart - Step 1](./_img/update-excel-chart-step-1-click-title.png) + +2. Edit the workbook using Excel + + ![TFS/SharePoint Integration - Update Excel Chart - Step 1](./_img/update-excel-chart-step-2.png) + +3. If the team project name has changed, update the “Team Project Hierarchy” filter: + + ![TFS/SharePoint Integration - Update Excel Chart - Step 1](./_img/update-excel-chart-step-3.png) + +4. If the location or name of the TFS cube has changed, update the Data Connection string: + + ![TFS/SharePoint Integration - Update Excel Chart - Step 1](./_img/update-excel-chart-step-4.png) + + Update the connection string to match the new server location and/or name of your TFS cube: + +``` +Provider=MSOLAP.7;Integrated Security=SSPI;Persist Security Info=True;User ID="";Initial Catalog=Tfs_Analysis;Data Source=<**DATABASENAME**>;Location=<**SERVERNAME**>;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Update Isolation Level=2 +``` + diff --git a/docs/ecosystem/sharepoint/deprecation/update-ssrs-report.md b/docs/ecosystem/sharepoint/deprecation/update-ssrs-report.md new file mode 100644 index 00000000000..b0a420ee349 --- /dev/null +++ b/docs/ecosystem/sharepoint/deprecation/update-ssrs-report.md @@ -0,0 +1,49 @@ +--- +title: Update SSRS Report +description: TFS SharePoint integration - Update an SSRS Report on a SharePoint site +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-integrate +ms.manager: abjork +ms.author: greggboe +ms.date: 09/07/07 +ms.topic: +--- + +# Update SSRS Report after SharePoint is disabled + +[!INCLUDE [temp](../_shared/about-sharepoint-deprecation.md)] + +Displaying SSRS Reports on a SharePoint will continue to work, even after disabling SharePoint integration. Displaying SSRS Reports in SharePoint is based on SharePoint and SQL Server Reporting Services technologies. It doesn’t require the TFS Extension for SharePoint to operate. + +TFS/SharePoint Integration - Update SSRS Report  + +The TFS site used the standard [SharePoint Page Viewer web part](https://support.office.com/en-us/article/Display-a-Web-page-on-a-SharePoint-page-by-adding-the-Page-Viewer-Web-Part-7F61FEEC-9B3D-4805-A960-07636BA59527) with a URL to the SSRS Report. + +The TFS Extension for SharePoint provided a URL re-director called *tfsRedirect.aspx* which would look up the location of the SQL Services Reporting Server and redirect to the URL to display the report. If you edited the properites of the Page Viewer web part hosting the SSRS report, you would see a URL that looks something like this: + +``` +PATHTOCURRENTSITE/_layouts/TfsRedirect.aspx?tf:Type=Report&tf:ReportName=REPORTNAME&tf:ShowToolbar=0&Width=381pt&Height=180pt +``` + +Installing TFS Disconnector for SharePoint replaces *tfsRedirect.aspx* with a version that will continue to work until you do one of the following: +* Move the location of your SQL Services Reporting Server +* Rename your team project +* Rename your collection + +If any of these changes are made, then you must replace the URL in the Page Viewer web part with the **full URL to the SSRS Report**. + +Follow these steps to replace the URL: + +1. Step 1 +1. Step 2 +1. Step 3 + + + +# Referenced topics +* [SSRS Report URL Access Parameter Reference](https://docs.microsoft.com/en-us/sql/reporting-services/url-access-parameter-reference) \ No newline at end of file diff --git a/docs/ecosystem/sharepoint/deprecation/upgrade-from-sharepoint2013-to-sharepoint-2106.md b/docs/ecosystem/sharepoint/deprecation/upgrade-from-sharepoint2013-to-sharepoint-2106.md new file mode 100644 index 00000000000..6660a733b94 --- /dev/null +++ b/docs/ecosystem/sharepoint/deprecation/upgrade-from-sharepoint2013-to-sharepoint-2106.md @@ -0,0 +1,132 @@ +--- +title: Upgrade from SharePoint 2013 with TFS integration to SharePoint 2016 +description: TFS SharePoint integration - Upgrade from SharePoint 2013 with TFS integration to SharePoint 2016 +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-integrate +ms.manager: abjork +ms.author: greggboe +ms.date: 09/07/07 +ms.topic: +--- + +# Upgrade from SharePoint 2013 with TFS integration to SharePoint 2016 +With TFS 2017, the TFS Extension for SharePoint supports SharePoint 2010 and 2013, but does not support SharePoint 2016. For more information, read [Discontinue the TFS 2017 (and earlier) SharePoint integration](./discontinue-pre-tfs-2017-sharepoint-integration.md). + +Customers that have TFS 2017 with integration configured for SharePoint 2013 need an upgrade path to SharePoint 2016. This upgrade path needs to provide a way to upgrade “away” from the old-style integration. + +If you are upgrading from TFS 2017, or prior version, to TFS 2018, please see [Disable SharePoint integration after TFS 2018 upgrade](./disable-tfs-sharepoint-integration-after-tfs-2018-upgrade.md) + +**Please refer to the SharePoint topic: [Upgrade to SharePoint Server 2016](https://technet.microsoft.com/en-us/library/cc303420(v=office.16).aspx), for full instructions on upgrading your SharePoint server.** The instructions below provide additional guidance to ensure the TFS SharePoint sites are functional after upgrading to SharePoint 2016. + +## Overview of problem +To configure TFS 2017 with SharePoint integration, you must have installed the TFS Extension for SharePoint on the SharePoint 2013 server. You may or may not have had Excel Services configured. Excel Services enabled Excel Charts to be displayed on a SharePoint site. On your SharePoint 2013 server, you may have several TFS SharePoint sites which use web parts, display Excel charts, and refer to TFS site templates. + +![TFS/SharePoint Integration - Upgrading to SharePoint 2016 - TFS 2017 configured to integration with SharePoint 2013](./_img/sharepoint-2016-upgrade-before-upgrade-diagram.png) + +In this configuration, with Excel Services configured, your TFS sites on SharePoint 2013 would look something like this: + +![TFS/SharePoint Integration - Upgrading to SharePoint 2016 - TFS SharePoint 2013 Site - Before Upgrade](./_img/sharepoint-2016-upgrade-before-upgrade-site-example.png) + +To upgrade to SharePoint 2016, you must first set up a SharePoint 2016 Server. [Excel Services was deprecated in SharePoint 2016](https://technet.microsoft.com/en-us/library/mt346112(v=office.16).aspx) and replaced with Office Online Server. If you had Excel Services configured in SharePoint 2013, then you will need to [configure Office Online Server](https://technet.microsoft.com/EN-US/library/ff431687(v=office.16).aspx) to ensure Excel Charts continue to display on the TFS SharePoint sites. See “References for configuring Office Online Server for SharePoint 2016” at the bottom of this topic for more information. + +The first step is to set up a SharePoint 2016 server +![TFS/SharePoint Integration - Upgrading to SharePoint 2016 - Setup SharePoint 2016 Server](./_img/sharepoint-2016-upgrade-setup-sharepoint-2016-diagram.png) + +The next step is to export the SharePoint content database from SharePoint 2013 +![TFS/SharePoint Integration - Upgrading to SharePoint 2016 - Export SharePoint 2013 Content database](./_img/sharepoint-2016-upgrade-export-2013-content-database.png) + +The next step would normally be to import the SharePoint content database into SharePoint 2016 +![TFS/SharePoint Integration - Upgrading to SharePoint 2016 - Import Errors](./_img/sharepoint-2016-upgrade-import-errors.png) + +The import validation step fails, because it the TFS SharePoint sites are referencing TFS artifacts that don’t exist on the SharePoint 2016 server, such as site templates, web parts, and features. + +The types of errors displayed on import are: + +``` +========================================================================================================================= +Category : MissingSiteDefinition +Error : True +UpgradeBlocking : False +Message : 2 Sites in database [WSS_Content] have reference(s) to a missing site definition, Id = [12001], Lcid + = [1033], compatibility level = [15]. +Remedy : The site definition with Id 12001 is referenced in the database [WSS_Content], but is not installed + on the current farm for sites with compatibility level 15. The missing site definition may cause + upgrade to fail. Please install any solution which contains the site definition and restart upgrade + if necessary. +  +========================================================================================================================= +Category : MissingFeature +Error : True +UpgradeBlocking : False +Message : Database [WSS_Content] has reference(s) to a missing feature: Id = + [a654fec6-ae10-43f4-8730-076ea76a36e9], Name = [Team Foundation Server Agile Reports], Description = + [], Install Location = [TfsDashboardAgileReports]. +Remedy : The feature with Id a654fec6-ae10-43f4-8730-076ea76a36e9 is referenced in the database + [WSS_Content], but is not installed on the current farm. The missing feature may cause upgrade to + fail. Please install any solution which contains the feature and restart upgrade if necessary. +========================================================================================================================= +Category : MissingSetupFile +Error : True +UpgradeBlocking : False +Message : File [Features\TswaWebParts\WebParts\WorkItemSummary.webpart] is referenced [1] times in the + database [WSS_Content], but is not installed on the current farm. Please install any + feature/solution which contains this file. +Remedy : One or more setup files are referenced in the database [WSS_Content], but are not installed on the + current farm. Please install any feature or solution which contains these files. +========================================================================================================================= +Category : MissingWebPart +Error : True +UpgradeBlocking : False +Message : WebPart class [bda9196d-87dc-18f4-469b-1c42dd26bfa7] (class + [Microsoft.TeamFoundation.WebAccess.WebParts.WorkItemSummaryWebPart] from assembly + [Microsoft.TeamFoundation.WebAccess.WebParts, Version=15.0.0.0, Culture=neutral, + PublicKeyToken=b03f5f7f11d50a3a]) is referenced [12] times in the database [WSS_Content], but is not + installed on the current farm. Please install any feature/solution which contains this web part. +Remedy : One or more web parts are referenced in the database [WSS_Content], but are not installed on the + current farm. Please install any feature or solution which contains these web parts. +========================================================================================================================= +``` + +## Steps for solution +The solution is to install the TFS Disconnector for SharePoint on the SharePoint 2016 server first. To do this, follow these steps: + +1. Execute the guidelines described in [Upgrade to SharePoint Server 2016](https://technet.microsoft.com/en-us/library/cc303420(v=office.16).aspx), until you get to the “[Verify custom components](https://technet.microsoft.com/en-us/library/cc263299(v=office.16).aspx)” step. +1. Download the [TFS Disconnector for SharePoint](https://go.microsoft.com/fwlink/?linkid=854633) to the SharePoint 2016 server. Unzip the files. You will be running script.ps1 later. **Currently, the TFS Disconnector for SharePoint supports only English. It will be updated shortly with support for other languages.** +1. Run “SharePoint 2016 Management Shell” as administrator. +1. From the shell, run script.ps1 and answer all the prompts. +1. Open Central Administration -> Monitoring -> Check Job Status -> Running section and verify that the uninstall jobs finished prior to proceeding +1. Proceed with “[Verify custom components](https://technet.microsoft.com/en-us/library/cc263299(v=office.16).aspx)” step + +This installs all the required references for TFS Sites to display properly, while disabling TFS/SharePoint integration. + +![TFS/SharePoint Integration - Upgrading to SharePoint 2016 - Install TFS Disconnector for SharePoint](./_img/sharepoint-2016-upgrade-install-tfs-disconnector.png) + +After the TFS Disconnector for SharePoint is installed, you can then successfully import the SharePoint 2013 content database + +![TFS/SharePoint Integration - Upgrading to SharePoint 2016 - Import SharePoint 2013 content database](./_img/sharepoint-2016-upgrade-import-2013-content-database.png) + +After the upgrade, your TFS SharePoint sites will display, but all integration functionality is disabled. This is what the site would look like after the upgrade: + +![TFS/SharePoint Integration - Upgrading to SharePoint 2016 - TFS SharePoint 2013 Site - After Upgrade](./_img/sharepoint-2016-upgrade-after-upgrade-site-example.png) + +## References for configuring Office Online Server for SharePoint 2016 +Deploying Office Online Server requires a considerable amount of configuration. We recommend you familiarize yourself with the topics below to ensure a successful deployment. + +* [Deploy Office Online Server](https://technet.microsoft.com/en-us/library/jj219455(v=office.16).aspx) + +* [Configure Office Online Server for SharePoint Server 2016](https://technet.microsoft.com/EN-US/library/ff431687(v=office.16).aspx) + +* [Configure server-to-server authentication between Office Online Server and SharePoint Server 2016](https://technet.microsoft.com/en-us/library/mt346470(v=office.16).aspx) + +* [Configure an Analysis Services (data model) server for Excel Online](https://technet.microsoft.com/en-us/library/jj219698(v=office.16).aspx#SSAS) + +* [Configure Analysis Services and Kerberos Constrained Delegation (KCD)](https://docs.microsoft.com/en-us/sql/analysis-services/instances/install-windows/configure-analysis-services-and-kerberos-constrained-delegation-kcd) + +* [ExcelWarnOnDataRefresh](https://technet.microsoft.com/en-us/library/jj219442.aspx) + + + + + + + diff --git a/docs/ecosystem/sharepoint/index.md b/docs/ecosystem/sharepoint/index.md new file mode 100644 index 00000000000..12bb99bf9fb --- /dev/null +++ b/docs/ecosystem/sharepoint/index.md @@ -0,0 +1,37 @@ +--- +title: SharePoint Integration | TFS +description: Index to topics for integrating or removing integration with SharePoint and Team Foundation Server (TFS) +ms.technology: vs-devops-reporting +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 09/05/2017 +--- + +# SharePoint Integration + + + +## Overview +- [About SharePoint integration](about-sharepoint-integration.md) +- [Discontinue SharePoint integration: TFS 2017 and earlier versions](deprecation/discontinue-pre-tfs-2017-sharepoint-integration.md) + +## 5-Minute Quickstarts +- [Share information using the SharePoint portal](../../report/sharepoint-dashboards/share-information-using-the-project-portal.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json) +- [Manage documents and document libraries](../../report/sharepoint-dashboards/manage-documents-and-document-libraries.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json) + +## Step-by-Step Tutorials + +- [Configure or add a project portal](../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json) +- [Configure or redirect process guidance](../../report/sharepoint-dashboards/configure-or-redirect-process-guidance.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json) + + +## Concepts +- [Features removed when disabling SharePoint integration](./deprecation/features-removed-when-disabling-sharepoint-integration.md) + + + +## Reference +- [Project portal dashboards](../../report/sharepoint-dashboards/project-portal-dashboards.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json) +- [Excel reports](../../report/excel/excel-reports.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json) \ No newline at end of file diff --git a/docs/ecosystem/sharepoint/toc.yml b/docs/ecosystem/sharepoint/toc.yml new file mode 100644 index 00000000000..3a3b0909065 --- /dev/null +++ b/docs/ecosystem/sharepoint/toc.yml @@ -0,0 +1,148 @@ +- name: SharePoint Integration + href: index.md +- name: Overview + items: + - name: About SharePoint integration + href: about-sharepoint-integration.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Discontinue the TFS 2017 (and earlier) SharePoint integration + href: ./deprecation/discontinue-pre-tfs-2017-sharepoint-integration.md +- name: Quickstarts + items: + - name: Share information using the SharePoint portal + href: ../../report/sharepoint-dashboards/share-information-using-the-project-portal.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Manage documents and document libraries + href: ../../report/sharepoint-dashboards/manage-documents-and-document-libraries.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json +- name: Tutorials + items: + - name: Configure or add a project portal + href: ../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Configure or redirect process guidance + href: ../../report/sharepoint-dashboards/configure-or-redirect-process-guidance.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json +- name: Concepts + items: + - name: Features removed when disabling SharePoint integration + href: ./deprecation/features-removed-when-disabling-sharepoint-integration.md + - name: Upload and refresh Excel reports + href: ../../report/sharepoint-dashboards/upload-refresh-excel-reports.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json +- name: How-to guides + items: + - name: "TFS 2018 & later versions" + items: + - name: Disable SharePoint integration after TFS 2018 upgrade + href: ./deprecation/disable-tfs-sharepoint-integration-after-tfs-2018-upgrade.md + - name: Update an Excel worksheet on a SharePoint site + href: ./deprecation/update-excel-chart.md + - name: "TFS 2017 & earlier versions" + items: + - name: Configure SharePoint integration + href: ./configure-sharepoint-tfs-2017-earlier.md + items: + - name: Install on same server + href: ../../tfs-server/install/sharepoint/install-sharepoint.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Install on different server + href: ../../tfs-server/install/sharepoint/setup-remote-sharepoint.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Configure enterprise app definition + href: ../../tfs-server/install/sharepoint/config-enterprise-app-def.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Verify SharePoint + href: ../../tfs-server/install/sharepoint/verify-sharepoint.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Move SharePoint to new hardware + href: ../../tfs-server/install/sharepoint/move-sharepoint-new-hardware.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Manage SharePoint integration + items: + - name: Add SharePoint products to TFS + href: /vsts/tfs-server/admin/add-sharepoint-to-tfs?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Modify or remove access between SharePoint web app and TFS + href: /vsts/tfs-server/admin/modify-remove-access-shareport-tfs?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Configure SharePoint Server 2010 or 2007 for dashboards + href: /vsts/tfs-server/admin/config-ent-sharepoint0710-dashboards?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Upgrade from SharePoint 2013 with TFS integration to SharePoint 2016 + href: ./deprecation/upgrade-from-sharepoint2013-to-sharepoint-2106.md +- name: Troubleshooting + items: + - name: "Resolve conflicts & errors" + href: ../../work/office/resolve-problems-excel-workbooks-sharepoint.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json +- name: Reference + items: + - name: SharePoint dashboards + items: + - name: Project portal dashboards + href: ../../report/sharepoint-dashboards/project-portal-dashboards.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: My Dashboard (Agile and CMMI) + href: ../../report/sharepoint-dashboards/my-dashboard-agile-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Project dashboard (Agile and CMMI) + href: ../../report/sharepoint-dashboards/project-dashboard-agile-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Bugs dashboard (Agile and CMMI) + href: ../../report/sharepoint-dashboards/bugs-dashboard-agile-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Build dashboard (Agile and CMMI) + href: ../../report/sharepoint-dashboards/build-dashboard-agile-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Progress dashboard (Agile and CMMI) + href: ../../report/sharepoint-dashboards/progress-dashboard-agile-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Quality dashboard (Agile and CMMI) + href: ../../report/sharepoint-dashboards/quality-dashboard-agile-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Test dashboard (Agile and CMMI) + href: ../../report/sharepoint-dashboards/test-dashboard-agile-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Release (Scrum) + href: ../../report/sharepoint-dashboards/release-scrum.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Excel reports displayed on SharePoint dashboards + items: + - name: Excel reports + href: ../../report/excel/excel-reports.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Bug Progress + href: ../../report/excel/bug-progress-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Bugs by Assignment + href: ../../report/excel/bugs-by-assignment-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Bugs by Priority + href: ../../report/excel/bugs-by-priority-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Bug Reactivations + href: ../../report/excel/bug-reactivations-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Bug Trends + href: ../../report/excel/bug-trends-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Build Quality + href: ../../report/excel/build-quality-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Build Status + href: ../../report/excel/build-status-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Burndown + href: ../../report/excel/burndown-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Code Churn + href: ../../report/excel/code-churn-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Code Coverage + href: ../../report/excel/code-coverage-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Failure Analysis + href: ../../report/excel/failure-analysis-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Issue Trends + href: ../../report/excel/issue-trends-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Task Progress + href: ../../report/excel/task-progress-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Test Activity + href: ../../report/excel/test-activity-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Test Case Readiness + href: ../../report/excel/test-case-readiness-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Test Plan Progress + href: ../../report/excel/test-plan-progress-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Test management reports + href: ../../report/excel/test-management-reports.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + items: + - name: Testing Gaps (Agile) + href: ../../report/excel/testing-gaps-excel-report-agile.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Test Team Progress + href: ../../report/excel/test-team-progress-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Test Team Productivity + href: ../../report/excel/test-team-productivity-excel-report.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: User Story Progress (Agile) + href: ../../report/excel/user-story-progress-excel-report-agile.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: User Story Test Status (Agile) + href: ../../report/excel/user-story-test-status-excel-report-agile.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Requirement Test Status (CMMI) + href: ../../report/excel/requirement-test-status-excel-report-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Requirements Progress (CMMI) + href: ../../report/excel/requirements-progress-excel-report-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Testing Gaps (CMMI) + href: ../../report/excel/testing-gaps-excel-report-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json + - name: Excel reports (CMMI) + href: ../../report/excel/excel-reports-cmmi.md?toc=/vsts/ecosystem/sharepoint/toc.json&bc=/vsts/ecosystem/sharepoint/breadcrumb/toc.json +- name: Resources + items: + - name: Microsoft Teams + href: https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-teams + - name: OneDrive for Business sync client + href: https://support.office.com/en-us/article/Get-started-with-the-new-OneDrive-sync-client-in-Windows-615391c4-2bd3-4aae-a42a-858262e42a49 \ No newline at end of file diff --git a/docs/extend/_data/draft.md b/docs/extend/_data/draft.md new file mode 100644 index 00000000000..5d9bb89287f --- /dev/null +++ b/docs/extend/_data/draft.md @@ -0,0 +1,3 @@ +
    + This page is under development. Have feedback or questions? Contact the [team](http://go.microsoft.com/fwlink/?LinkId=615292). +
    diff --git a/docs/extend/_data/extension-build-tasks.json b/docs/extend/_data/extension-build-tasks.json new file mode 100644 index 00000000000..b4f518eebee --- /dev/null +++ b/docs/extend/_data/extension-build-tasks.json @@ -0,0 +1,36 @@ +{ + "manifestVersion": 1, + "id": "build-task", + "name": "Fabrikam Build Tools", + "version": "0.0.1", + "publisher": "fabrikam", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "description": "Tools for building with Fabrikam. Includes one build task.", + "categories": [ + "Build and release" + ], + "icons": { + "default": "images/extension-icon.png" + }, + "files": [ + { + "path": "buildtask" + } + ], + "contributions": [ + { + "id": "custom-build-task", + "type": "ms.vss-distributed-task.task", + "targets": [ + "ms.vss-distributed-task.tasks" + ], + "properties": { + "name": "buildtask" + } + } + ] +} \ No newline at end of file diff --git a/docs/extend/_data/extension-core.json b/docs/extend/_data/extension-core.json new file mode 100644 index 00000000000..2bfa0df76c8 --- /dev/null +++ b/docs/extend/_data/extension-core.json @@ -0,0 +1,12 @@ +{ + "manifestVersion": 1, + "id": "tools", + "version": "0.1.0", + "name": "Fabrikam Tools", + "publisher": "fabrikam", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ] +} \ No newline at end of file diff --git a/docs/extend/_data/extension-discovery.json b/docs/extend/_data/extension-discovery.json new file mode 100644 index 00000000000..9be758ae033 --- /dev/null +++ b/docs/extend/_data/extension-discovery.json @@ -0,0 +1,70 @@ +{ + "description": "Awesome tools to help you and your team do great things everyday.", + "icons": { + "default": "images/fabrikam-logo.png" + }, + "categories": [ + "Plan and track" + ], + "tags": [ + "working", + "people person", + "search" + ], + "content": { + "details": { + "path": "overview.md" + }, + "license": { + "path": "license-terms.md" + } + }, + "links": { + "home": { + "uri": "https://www.fabrikam-fiber-inc.com" + }, + "getstarted": { + "uri": "https://www.fabrikam-fiber-inc.com/help/getstarted" + }, + "learn": { + "uri": "https://www.fabrikam-fiber-inc.com/features" + }, + "support": { + "uri": "https://www.fabrikam-fiber-inc.com/support" + }, + "repository": { + "uri": "https://github.com/fabrikam-fiber-inc/tools" + }, + "issues": { + "uri": "https://github.com/fabrikam-fiber-inc/tools/issues" + } + }, + "repository": { + "type": "git", + "uri": "https://github.com/fabrikam-fiber-inc/tools" + }, + "badges": [ + { + "href": "https://travis.ci/fabrikam-fiber-inc/myextension", + "uri": "https://travis.ci/fabrikam-fiber-inc/myextension.svg?branch=master", + "description": "TravisCI build for the project" + }, + { + "href": "https://ci.appveyor.com/projects/fabrikam-fiber-inc/myextension", + "uri": "https://ci.appveyor.com/api/projects/status/vlg2sgs2y7tsdxpj4c?svg=true", + "description": "AppVeyor build for the project" + } + ], + "branding": { + "color": "rgb(34, 34, 34)", + "theme": "dark" + }, + "screenshots": [ + { + "path": "screenshots/screen1.png" + }, + { + "path": "screenshots/screen2.png" + } + ] +} \ No newline at end of file diff --git a/docs/extend/_data/extension-runtime.json b/docs/extend/_data/extension-runtime.json new file mode 100644 index 00000000000..5c549bf7f61 --- /dev/null +++ b/docs/extend/_data/extension-runtime.json @@ -0,0 +1,24 @@ +{ + "scopes": [ + "vso.work", + "vso.code_write", + "vso.build_execute" + ], + "demands": [ + "api-version/3.0" + ], + "contributions": [ + { + "id": "showCommits", + "type": "ms.vss-web.action", + "description": "Adds a menu action from builds grid to show associated items.", + "targets": [ + "ms.vss-build-web.completed-build-menu" + ], + "properties": { + "title": "View associated items", + "uri": "launch.html" + } + } + ] +} \ No newline at end of file diff --git a/docs/extend/_data/extension-typical.json b/docs/extend/_data/extension-typical.json new file mode 100644 index 00000000000..bcc4482373e --- /dev/null +++ b/docs/extend/_data/extension-typical.json @@ -0,0 +1,73 @@ +{ + "manifestVersion": 1, + "id": "tools", + "version": "0.1.0", + "name": "Fabrikam Tools", + "publisher": "fabrikam", + "description": "Awesome tools to help you and your team do great things everyday.", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "icons": { + "default": "images/fabrikam-logo.png" + }, + "scopes": [ + "vso.work", + "vso.code_write", + "vso.build_execute" + ], + "categories": [ + "Plan and track" + ], + "branding": { + "color": "rgb(34, 34, 34)", + "theme": "dark" + }, + "content": { + "details": { + "path": "readme.md" + }, + "license": { + "path": "eula.md" + } + }, + "links": { + "getstarted": { + "uri": "https://www.fabrikam-fiber-inc.com/help/getstarted" + }, + "support": { + "uri": "https://www.fabrikam-fiber-inc.com/support" + } + }, + "repository": { + "type": "git", + "uri": "https://github.com/fabrikam-fiber-inc/myextension" + }, + "contributions": [ + { + "id": "showCommits", + "type": "ms.vss-web.action", + "description": "Adds a menu action from builds grid to show associated items.", + "targets": [ + "ms.vss-build-web.completed-build-menu" + ], + "properties": { + "title": "View associated items", + "uri": "launch.html" + } + } + ], + "files": [ + { + "path": "launch.html", + "addressable": true + }, + { + "path": "node_modules/vss-web-extension-sdk/lib", + "addressable": true, + "packagePath": "lib" + } + ] +} \ No newline at end of file diff --git a/docs/extend/_data/extension.json b/docs/extend/_data/extension.json new file mode 100644 index 00000000000..863fc554bc0 --- /dev/null +++ b/docs/extend/_data/extension.json @@ -0,0 +1,101 @@ +{ + "manifestVersion": 1, + "id": "tools", + "version": "0.1.0", + "name": "Fabrikam Tools", + "publisher": "fabrikam", + "description": "Awesome tools to help you and your team do great things everyday.", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "demands": [ + "api-version/3.0" + ], + "icons": { + "default": "images/fabrikam-logo.png" + }, + "scopes": [ + "vso.work", + "vso.code_write" + ], + "categories": [ + "Plan and track" + ], + "tags": [ + "working", + "people person", + "search" + ], + "branding": { + "color": "rgb(34, 34, 34)", + "theme": "dark" + }, + "screenshots": [ + { + "path": "screenshots/screen1.png" + }, + { + "path": "screenshots/screen2.png" + } + ], + "content": { + "details": { + "path": "overview.md" + }, + "license": { + "path": "eula.md" + } + }, + "links": { + "home": { + "uri": "https://www.fabrikam-fiber-inc.com" + }, + "getstarted": { + "uri": "https://www.fabrikam-fiber-inc.com/help/getstarted" + }, + "learn": { + "uri": "https://www.fabrikam-fiber-inc.com/features" + }, + "support": { + "uri": "https://www.fabrikam-fiber-inc.com/support" + }, + "repository": { + "uri": "https://github.com/fabrikam-fiber-inc/tools" + }, + "issues": { + "uri": "https://github.com/fabrikam-fiber-inc/tools/issues" + } + }, + "repository": { + "type": "git", + "uri": "https://github.com/fabrikam-fiber-inc/myextension" + }, + "badges": [ + { + "href": "https://travis.ci/fabrikam-fiber-inc/myextension", + "uri": "https://travis.ci/fabrikam-fiber-inc/myextension.svg?branch=master", + "description": "TravisCI build for the project" + }, + { + "href": "https://ci.appveyor.com/projects/fabrikam-fiber-inc/myextension", + "uri": "https://ci.appveyor.com/api/projects/status/vlg2sgs2y7tsdxpj4c?svg=true", + "description": "AppVeyor build for the project" + } + ], + "contributions": [ + { + "id": "showCommits", + "type": "ms.vss-web.action", + "description": "Adds a menu action from builds grid to show associated items.", + "targets": [ + "ms.vss-build-web.completed-build-menu" + ], + "properties": { + "title": "View associated items", + "uri": "launch.html" + } + } + ] +} \ No newline at end of file diff --git a/docs/extend/_data/integration.json b/docs/extend/_data/integration.json new file mode 100644 index 00000000000..1bb75f27fde --- /dev/null +++ b/docs/extend/_data/integration.json @@ -0,0 +1,55 @@ +{ + "manifestVersion": 1, + "id": "myservice", + "version": "1.0.0", + "name": "My Service", + "publisher": "mycompany", + "description": "Awesome tools to help you and your team do great things everyday.", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services.Integration" + } + ], + "icons": { + "default": "images/service-logo.png" + }, + "categories": [ + "Plan and track" + ], + "tags": [ + "working", + "people person", + "search" + ], + "screenshots": [ + { + "path": "images/screen1.png" + }, + { + "path": "images/screen2.png" + } + ], + "content": { + "details": { + "path": "overview.md" + }, + "license": { + "path": "fabrikam-license-terms.md" + } + }, + "links": { + "getstarted": { + "uri": "https://www.mycompany.com/help/getstarted" + }, + "learn": { + "uri": "https://www.mycompany.com/features" + }, + "support": { + "uri": "https://www.mycompany.com/support" + } + }, + "branding": { + "color": "rgb(34, 34, 34)", + "theme": "dark" + } +} \ No newline at end of file diff --git a/docs/extend/_data/private-preview.md b/docs/extend/_data/private-preview.md new file mode 100644 index 00000000000..02b950cba03 --- /dev/null +++ b/docs/extend/_data/private-preview.md @@ -0,0 +1,5 @@ +
    + **Need help?** [Contact the engineering team](http://go.microsoft.com/fwlink/?LinkId=615292) directly. +
    + + \ No newline at end of file diff --git a/docs/extend/_img/Screen5.png b/docs/extend/_img/Screen5.png new file mode 100644 index 00000000000..ab475e197ef Binary files /dev/null and b/docs/extend/_img/Screen5.png differ diff --git a/docs/extend/_img/Screen6.png b/docs/extend/_img/Screen6.png new file mode 100644 index 00000000000..a961aa1fc66 Binary files /dev/null and b/docs/extend/_img/Screen6.png differ diff --git a/docs/extend/_img/addpublisherid.png b/docs/extend/_img/addpublisherid.png new file mode 100644 index 00000000000..5dd748da3ae Binary files /dev/null and b/docs/extend/_img/addpublisherid.png differ diff --git a/docs/extend/_img/build-task.png b/docs/extend/_img/build-task.png new file mode 100644 index 00000000000..f6fee1b0874 Binary files /dev/null and b/docs/extend/_img/build-task.png differ diff --git a/docs/extend/_img/connect-to-vs-team-services-auth.png b/docs/extend/_img/connect-to-vs-team-services-auth.png new file mode 100644 index 00000000000..581081c0cc6 Binary files /dev/null and b/docs/extend/_img/connect-to-vs-team-services-auth.png differ diff --git a/docs/extend/_img/content-pack-details.png b/docs/extend/_img/content-pack-details.png new file mode 100644 index 00000000000..cd0d67d911c Binary files /dev/null and b/docs/extend/_img/content-pack-details.png differ diff --git a/docs/extend/_img/custom-action.png b/docs/extend/_img/custom-action.png new file mode 100644 index 00000000000..9fb25f5386e Binary files /dev/null and b/docs/extend/_img/custom-action.png differ diff --git a/docs/extend/_img/extension-components.png b/docs/extend/_img/extension-components.png new file mode 100644 index 00000000000..a276ad275ec Binary files /dev/null and b/docs/extend/_img/extension-components.png differ diff --git a/docs/extend/_img/extension-image.png b/docs/extend/_img/extension-image.png new file mode 100644 index 00000000000..a80e1111df4 Binary files /dev/null and b/docs/extend/_img/extension-image.png differ diff --git a/docs/extend/_img/extensions-tab.png b/docs/extend/_img/extensions-tab.png new file mode 100644 index 00000000000..91110e6b24e Binary files /dev/null and b/docs/extend/_img/extensions-tab.png differ diff --git a/docs/extend/_img/get-data-final.png b/docs/extend/_img/get-data-final.png new file mode 100644 index 00000000000..da66cf62f68 Binary files /dev/null and b/docs/extend/_img/get-data-final.png differ diff --git a/docs/extend/_img/hubs-home.png b/docs/extend/_img/hubs-home.png new file mode 100644 index 00000000000..8683c88300f Binary files /dev/null and b/docs/extend/_img/hubs-home.png differ diff --git a/docs/extend/_img/manage-published.png b/docs/extend/_img/manage-published.png new file mode 100644 index 00000000000..9b69febcbcc Binary files /dev/null and b/docs/extend/_img/manage-published.png differ diff --git a/docs/extend/_img/menu-groups.png b/docs/extend/_img/menu-groups.png new file mode 100644 index 00000000000..57de7edff29 Binary files /dev/null and b/docs/extend/_img/menu-groups.png differ diff --git a/docs/extend/_img/point-visual.png b/docs/extend/_img/point-visual.png new file mode 100644 index 00000000000..c74b2fb9042 Binary files /dev/null and b/docs/extend/_img/point-visual.png differ diff --git a/docs/extend/_img/point-visual2.png b/docs/extend/_img/point-visual2.png new file mode 100644 index 00000000000..ba1248e507e Binary files /dev/null and b/docs/extend/_img/point-visual2.png differ diff --git a/docs/extend/_img/search.PNG b/docs/extend/_img/search.PNG new file mode 100644 index 00000000000..4ddc3208d91 Binary files /dev/null and b/docs/extend/_img/search.PNG differ diff --git a/docs/extend/_img/share-extension.png b/docs/extend/_img/share-extension.png new file mode 100644 index 00000000000..366e156c6ba Binary files /dev/null and b/docs/extend/_img/share-extension.png differ diff --git a/docs/extend/_img/with-apps-services.png b/docs/extend/_img/with-apps-services.png new file mode 100644 index 00000000000..56f2a6e7a30 Binary files /dev/null and b/docs/extend/_img/with-apps-services.png differ diff --git a/docs/extend/_img/with-contributions.png b/docs/extend/_img/with-contributions.png new file mode 100644 index 00000000000..e7324fcffc8 Binary files /dev/null and b/docs/extend/_img/with-contributions.png differ diff --git a/docs/extend/_img/work-item-page.png b/docs/extend/_img/work-item-page.png new file mode 100644 index 00000000000..9b0bacaaa38 Binary files /dev/null and b/docs/extend/_img/work-item-page.png differ diff --git a/docs/extend/_shared/add-workitem-extension-sharedevents.md b/docs/extend/_shared/add-workitem-extension-sharedevents.md new file mode 100644 index 00000000000..6c28bd714da --- /dev/null +++ b/docs/extend/_shared/add-workitem-extension-sharedevents.md @@ -0,0 +1,13 @@ +

    + +### Events + +| Event | Event description | Argument | Argument description | +|-------------------|-------------------|----------|----------------------| +| onFieldChanged | Fired after a field has changed. If the field change ran rules which updated other fields, all these changes are part of a single event. | id | The ID of the work item. | +| changedFields | Array with the reference name of all changed fields. | | | +| onLoaded | Fired after when the data is loaded in the work item form when the user opens a work item, or when the user navigates to another work item in the triage view. | id | The ID of the work item. | +| onReset | Fired after the user undoes the changes to the work item. | id | The ID of the work item. | +| onRefreshed | Fired after the user refreshed the work item manually. | id | The ID of the work item. | +| onSaved | Fired after a work item is saved. | id | The ID of the work item. | +| onUnloaded | Fired before the user closes the dialog, or before the user moves to another work item in the triage view. | id | The ID of the work item. | diff --git a/docs/extend/_shared/extensions-tab.md b/docs/extend/_shared/extensions-tab.md new file mode 100644 index 00000000000..3d8b864cc60 --- /dev/null +++ b/docs/extend/_shared/extensions-tab.md @@ -0,0 +1,8 @@ +If you can't see the Extensions tab, make sure you're in the control panel +(the project collection level administration page - ```https://{account}.visualstudio.com/_admin/```) +and not the administration page for a team project. + +If you're on the control panel, and you don't see the **Extensions** tab, +extensions may not be enabled for your account. +You can get early access to the extensions feature by [joining the Visual Studio Partner Program](https://vsipprogram.com/join). + diff --git a/docs/extend/_shared/future-alert.md b/docs/extend/_shared/future-alert.md new file mode 100644 index 00000000000..18c3d5aad03 --- /dev/null +++ b/docs/extend/_shared/future-alert.md @@ -0,0 +1,3 @@ +
    + This feature is under development. +
    \ No newline at end of file diff --git a/docs/extend/_shared/manifest-core.md b/docs/extend/_shared/manifest-core.md new file mode 100644 index 00000000000..79bdfd91f54 --- /dev/null +++ b/docs/extend/_shared/manifest-core.md @@ -0,0 +1,10 @@ +These properties are required: + +| Property | Description | Notes | +|---------------------|-------------|-------| +| **manifestVersion** | *A number corresponding to the version of the manifest format.* | This should be `1`. | +| **id** | *The extension's identifier.* | This is a string that must be unique among extensions from the same publisher. It must start with an alphabetic or numeric character and contain 'A' through 'Z', 'a' through 'z', '0' through '9', and '-' (hyphen). Example: `sample-extension`. | +| **version** | *A string specifying the version of an extension.* | Should be in the format `major.minor.patch`, for example `0.1.2` or `1.0.0`. | +| **name** | *A short, human-readable name of the extension. Limited to 200 characters.* | Example: `"Fabrikam Agile Board Extension"`. | +| **publisher** | *The identifier of the publisher.* | This identifier must match the identifier the extension is published under. See [Create and manage a publisher](../publish/overview.md). | +| **targets** | *The products and services supported by your integration or extension.* See [installation targets](../develop/manifest.md#installation-targets) for more details. | This is an array of objects, where each object has an `id` field indicating one of the following: `Microsoft.VisualStudio.Services` (extensions that works with Team Services or TFS), `Microsoft.TeamFoundation.Server` (extension that works with TFS), `Microsoft.VisualStudio.Services.Integration` (integrations that works with Team Services or TFS), `Microsoft.TeamFoundation.Server.Integration` (integrations that work with TFS) | \ No newline at end of file diff --git a/docs/extend/_shared/manifest-discovery.md b/docs/extend/_shared/manifest-discovery.md new file mode 100644 index 00000000000..4b0647d6bcc --- /dev/null +++ b/docs/extend/_shared/manifest-discovery.md @@ -0,0 +1,14 @@ +These optional properties help users discover and learn about your extension: + +| Property | Description | Notes | +| --- | --- | --- | +| **description** | *A few sentences describing the extensions. Limited to 200 characters.* | The description should be your extension's "elevator pitch" - a couple of lines to describe your extension in the marketplace and make people want to install it. See the example below | +| **icons** | *Dictionary of icons representing the extension.* | Valid keys: `default` (128x128 pixels) of type BMP, GIF, EXIF, JPG, PNG and TIFF). Other keys such as `large` (512x512 pixels) may be supported in the future. The value of each key is the path to the icon file in the extension | +| **categories** | *Array of strings representing the categories your extension belongs to. Limited to 3\. First is considered the default.* | Valid values: `Build and release`, `Collaborate`, `Code`, `Developer samples`, `Plan and track`, `Integrate`, and `Test` | +| **tags** | *Array of string tags to help users find your extension.* | Examples: `agile`, `project management`, `task timer`, etc. | +| **screenshots** | *Array of images that could not be included in your **content**. | Screenshots are more valuable when featured in your **content**, and should be used there to help make a quality market details page for your extension. Use **screenshots** for less important images not featured in your **content**. Each image should be 1366x768 pixels. The `path` of each item is the path to the file in the extension. | +| **content** | *Dictionary of content files that describe your extension to users.* | *Every* extension should include solid content—it's how you'll show users what your extension can do; make it rich, consumable, and include screenshots where necessary. Include an `overview.md` file as your base content piece. Each file is assumed to be in [GitHub Flavored Markdown](https://help.github.com/articles/github-flavored-markdown/) format. The `path` of each item is the path to the markdown file in the extension. Valid keys: `details`. Other keys will be supported in the future. | +| **links** | *Dictionary of links that help users learn more about your extension, get support, and move.* | Valid keys: `getstarted` - first steps, how to setup or use. `learn` - deeper content to help users better understand your extension or service. `license` - end user license agreement. `privacypolicy` - privacy policy for an extension. `support` - get help and support for an extension. The value of each key is an object with a `uri` field, which is the absolute URL of the link | +| **repository** | Dictionary of properties describing the source code repository for the extension | Valid Keys: `type` - Type of repository. Example: *git*. `uri` - Absolute URL of the repository. | +| **badges** | Array of links to external metadata badges like TravisCI, Appveyor etc from the [approved badges sites](../develop/manifest.md#approvedbadges) | Valid keys: `href` - Link the user will navigate to when clicking the badge. `uri` - The absolute URL of the badge image to be displayed. `description` - Description of the badge, to be displayed on hover. | +| **branding** | *Dictionary of brand-related properties.* | Valid keys: `color` - primary color of the extension or publisher; can be a hex (#ff00ff), RGB (rgb(100,200,50)), or supported HTML color names (blue). `theme` - complements the color; use *dark* for dark branding colors, or *light* for lighter branding colors. | \ No newline at end of file diff --git a/docs/extend/_shared/manifest-extension-runtime.md b/docs/extend/_shared/manifest-extension-runtime.md new file mode 100644 index 00000000000..67709d04374 --- /dev/null +++ b/docs/extend/_shared/manifest-extension-runtime.md @@ -0,0 +1,10 @@ + +| Property | Description | Notes | +| --- | --- | --- | +| **scopes** | *An array of authorization scopes (strings) listing permissions required by your extension.* | For example, `vso.work` and `vs.code_write` indicates your extension needs read-only access to work items and read/write access to source code (and related resource). Scopes are presented to the user when installing your extension. | +| **demands** | *An array of demands (strings) listing the capabilities required by your extension.* | For example, `api-version/3.0` indicates your extension uses version 3.0 APIs and therefore cannot run in older products that do not support this version. | +| **baseUri** | *(Optional) base URL for all relative URLs specified by the extension's contributions.* | For example: ```https://myapp.com/{{account.name}}/```. This property should be left empty if your extension's contents are packaged with your extension. | +| **contributions** | *An array of contributions to the system.* | | +| **contributionTypes** | *An array of contribution types defined by the extension* | | + + diff --git a/docs/extend/_shared/procedures/_img/add-dashboard-widget/sample.png b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sample.png new file mode 100644 index 00000000000..f43ac7fc180 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sample.png differ diff --git a/docs/extend/_shared/procedures/_img/add-dashboard-widget/sample2.png b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sample2.png new file mode 100644 index 00000000000..4ad5423ec05 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sample2.png differ diff --git a/docs/extend/_shared/procedures/_img/add-dashboard-widget/sampleConfiguration.PNG b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sampleConfiguration.PNG new file mode 100644 index 00000000000..8525fa657db Binary files /dev/null and b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sampleConfiguration.PNG differ diff --git a/docs/extend/_shared/procedures/_img/add-dashboard-widget/sampleConfigureNameAndSize.PNG b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sampleConfigureNameAndSize.PNG new file mode 100644 index 00000000000..96e6a84a272 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sampleConfigureNameAndSize.PNG differ diff --git a/docs/extend/_shared/procedures/_img/add-dashboard-widget/sampleWidgetWithNoSettings.PNG b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sampleWidgetWithNoSettings.PNG new file mode 100644 index 00000000000..e9edc858bac Binary files /dev/null and b/docs/extend/_shared/procedures/_img/add-dashboard-widget/sampleWidgetWithNoSettings.PNG differ diff --git a/docs/extend/_shared/procedures/_img/add-dashboard-widget/widget-error-popup.PNG b/docs/extend/_shared/procedures/_img/add-dashboard-widget/widget-error-popup.PNG new file mode 100644 index 00000000000..7ebc43153d7 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/add-dashboard-widget/widget-error-popup.PNG differ diff --git a/docs/extend/_shared/procedures/_img/add-dashboard-widget/widget-error.PNG b/docs/extend/_shared/procedures/_img/add-dashboard-widget/widget-error.PNG new file mode 100644 index 00000000000..9851d844abb Binary files /dev/null and b/docs/extend/_shared/procedures/_img/add-dashboard-widget/widget-error.PNG differ diff --git a/docs/extend/_shared/procedures/_img/backlog-pane/backlogPaneContributionPointBreakdown.png b/docs/extend/_shared/procedures/_img/backlog-pane/backlogPaneContributionPointBreakdown.png new file mode 100644 index 00000000000..10d0ab6bed8 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/backlog-pane/backlogPaneContributionPointBreakdown.png differ diff --git a/docs/extend/_shared/procedures/_img/backlog-pane/iteration-backlog-pane.png b/docs/extend/_shared/procedures/_img/backlog-pane/iteration-backlog-pane.png new file mode 100644 index 00000000000..6338ae9d0aa Binary files /dev/null and b/docs/extend/_shared/procedures/_img/backlog-pane/iteration-backlog-pane.png differ diff --git a/docs/extend/_shared/procedures/_img/backlog-pane/portfolio-backlog-pane.png b/docs/extend/_shared/procedures/_img/backlog-pane/portfolio-backlog-pane.png new file mode 100644 index 00000000000..a1b383dc88f Binary files /dev/null and b/docs/extend/_shared/procedures/_img/backlog-pane/portfolio-backlog-pane.png differ diff --git a/docs/extend/_shared/procedures/_img/backlog-pane/product-backlog-pane.png b/docs/extend/_shared/procedures/_img/backlog-pane/product-backlog-pane.png new file mode 100644 index 00000000000..20761bbc153 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/backlog-pane/product-backlog-pane.png differ diff --git a/docs/extend/_shared/procedures/_img/backlog-tab/iteration-backlog-tab.png b/docs/extend/_shared/procedures/_img/backlog-tab/iteration-backlog-tab.png new file mode 100644 index 00000000000..9ab785b62e6 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/backlog-tab/iteration-backlog-tab.png differ diff --git a/docs/extend/_shared/procedures/_img/backlog-tab/product-backlog-tab.png b/docs/extend/_shared/procedures/_img/backlog-tab/product-backlog-tab.png new file mode 100644 index 00000000000..667a2cdadb9 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/backlog-tab/product-backlog-tab.png differ diff --git a/docs/extend/_shared/procedures/_img/call-rest-api/query-results.png b/docs/extend/_shared/procedures/_img/call-rest-api/query-results.png new file mode 100644 index 00000000000..c360ffd6ed4 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/call-rest-api/query-results.png differ diff --git a/docs/extend/_shared/procedures/_img/create-action/action.png b/docs/extend/_shared/procedures/_img/create-action/action.png new file mode 100644 index 00000000000..083227ef296 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-action/action.png differ diff --git a/docs/extend/_shared/procedures/_img/create-action/my-work-items.png b/docs/extend/_shared/procedures/_img/create-action/my-work-items.png new file mode 100644 index 00000000000..23f548d0f5b Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-action/my-work-items.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp4/add-new-html.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/add-new-html.png new file mode 100644 index 00000000000..b45f2ed0fb4 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/add-new-html.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp4/asp4-app.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/asp4-app.png new file mode 100644 index 00000000000..3aa2e3b772d Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/asp4-app.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp4/empty-web-site.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/empty-web-site.png new file mode 100644 index 00000000000..f338b26bdaf Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/empty-web-site.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp4/enable-ssl.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/enable-ssl.png new file mode 100644 index 00000000000..28999891f30 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/enable-ssl.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp4/hello-world-html.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/hello-world-html.png new file mode 100644 index 00000000000..b4fd0a437bd Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/hello-world-html.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp4/new-file.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/new-file.png new file mode 100644 index 00000000000..82beb18ad70 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/new-file.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp4/new-web-site.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/new-web-site.png new file mode 100644 index 00000000000..769164f5f70 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp4/new-web-site.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp5/all-pages.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/all-pages.png new file mode 100644 index 00000000000..ec5f2d41143 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/all-pages.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp5/create-web-app.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/create-web-app.png new file mode 100644 index 00000000000..c5350d07a76 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/create-web-app.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp5/empty-template.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/empty-template.png new file mode 100644 index 00000000000..3a933a37e0a Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/empty-template.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp5/enable-ssl.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/enable-ssl.png new file mode 100644 index 00000000000..49955ca1ee2 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/enable-ssl.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-app-asp5/hello-world-page.png b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/hello-world-page.png new file mode 100644 index 00000000000..71a5790e99e Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-app-asp5/hello-world-page.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-group/hub-group.png b/docs/extend/_shared/procedures/_img/create-hub-group/hub-group.png new file mode 100644 index 00000000000..bc880a44c13 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-group/hub-group.png differ diff --git a/docs/extend/_shared/procedures/_img/create-hub-group/uninstall.png b/docs/extend/_shared/procedures/_img/create-hub-group/uninstall.png new file mode 100644 index 00000000000..4b424ddaaee Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-hub-group/uninstall.png differ diff --git a/docs/extend/_shared/procedures/_img/create-pat/add-personal-access-token.png b/docs/extend/_shared/procedures/_img/create-pat/add-personal-access-token.png new file mode 100644 index 00000000000..9cee1ee8490 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-pat/add-personal-access-token.png differ diff --git a/docs/extend/_shared/procedures/_img/create-pat/copy-pat.png b/docs/extend/_shared/procedures/_img/create-pat/copy-pat.png new file mode 100644 index 00000000000..a1e260919f0 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-pat/copy-pat.png differ diff --git a/docs/extend/_shared/procedures/_img/create-pat/marketplace-scope.png b/docs/extend/_shared/procedures/_img/create-pat/marketplace-scope.png new file mode 100644 index 00000000000..7ecad74b708 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-pat/marketplace-scope.png differ diff --git a/docs/extend/_shared/procedures/_img/create-pat/my-profile.png b/docs/extend/_shared/procedures/_img/create-pat/my-profile.png new file mode 100644 index 00000000000..766122b6f66 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/create-pat/my-profile.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/bgextcontainer.png b/docs/extend/_shared/procedures/_img/debug-in-browser/bgextcontainer.png new file mode 100644 index 00000000000..a5e7ae3bb1d Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/bgextcontainer.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/breakpoints.png b/docs/extend/_shared/procedures/_img/debug-in-browser/breakpoints.png new file mode 100644 index 00000000000..ff64b575100 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/breakpoints.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/chromeelemselector.png b/docs/extend/_shared/procedures/_img/debug-in-browser/chromeelemselector.png new file mode 100644 index 00000000000..c314bd38164 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/chromeelemselector.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/contextobject.png b/docs/extend/_shared/procedures/_img/debug-in-browser/contextobject.png new file mode 100644 index 00000000000..4d6363db063 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/contextobject.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/debuggerfiles.png b/docs/extend/_shared/procedures/_img/debug-in-browser/debuggerfiles.png new file mode 100644 index 00000000000..90e4c40bcac Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/debuggerfiles.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/framelocation.png b/docs/extend/_shared/procedures/_img/debug-in-browser/framelocation.png new file mode 100644 index 00000000000..6408d8d5046 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/framelocation.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/ie11targetframe.png b/docs/extend/_shared/procedures/_img/debug-in-browser/ie11targetframe.png new file mode 100644 index 00000000000..d4340a67faf Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/ie11targetframe.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/ieelemselector.png b/docs/extend/_shared/procedures/_img/debug-in-browser/ieelemselector.png new file mode 100644 index 00000000000..04524c5c60b Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/ieelemselector.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/ief12tools.png b/docs/extend/_shared/procedures/_img/debug-in-browser/ief12tools.png new file mode 100644 index 00000000000..308e3fdc0fe Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/ief12tools.png differ diff --git a/docs/extend/_shared/procedures/_img/debug-in-browser/initbreakpoint.png b/docs/extend/_shared/procedures/_img/debug-in-browser/initbreakpoint.png new file mode 100644 index 00000000000..f8de44622d1 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/debug-in-browser/initbreakpoint.png differ diff --git a/docs/extend/_shared/procedures/_img/extension-tab.png b/docs/extend/_shared/procedures/_img/extension-tab.png new file mode 100644 index 00000000000..0ca1926bbd1 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/extension-tab.png differ diff --git a/docs/extend/_shared/procedures/_img/fabrikam-logo.png b/docs/extend/_shared/procedures/_img/fabrikam-logo.png new file mode 100644 index 00000000000..f9bece74721 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/fabrikam-logo.png differ diff --git a/docs/extend/_shared/procedures/_img/hub-location.png b/docs/extend/_shared/procedures/_img/hub-location.png new file mode 100644 index 00000000000..afcecf73904 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/hub-location.png differ diff --git a/docs/extend/_shared/procedures/_img/install-extension.png b/docs/extend/_shared/procedures/_img/install-extension.png new file mode 100644 index 00000000000..c667ab9ac55 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/install-extension.png differ diff --git a/docs/extend/_shared/procedures/_img/install/collection-page.png b/docs/extend/_shared/procedures/_img/install/collection-page.png new file mode 100644 index 00000000000..b19d98f9f8d Binary files /dev/null and b/docs/extend/_shared/procedures/_img/install/collection-page.png differ diff --git a/docs/extend/_shared/procedures/_img/install/install.png b/docs/extend/_shared/procedures/_img/install/install.png new file mode 100644 index 00000000000..547f63958b9 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/install/install.png differ diff --git a/docs/extend/_shared/procedures/_img/installed.png b/docs/extend/_shared/procedures/_img/installed.png new file mode 100644 index 00000000000..0a978ba79fb Binary files /dev/null and b/docs/extend/_shared/procedures/_img/installed.png differ diff --git a/docs/extend/_shared/procedures/_img/iteration-backlog-tab.png b/docs/extend/_shared/procedures/_img/iteration-backlog-tab.png new file mode 100644 index 00000000000..9ab785b62e6 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/iteration-backlog-tab.png differ diff --git a/docs/extend/_shared/procedures/_img/product-backlog-tab.png b/docs/extend/_shared/procedures/_img/product-backlog-tab.png new file mode 100644 index 00000000000..667a2cdadb9 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/product-backlog-tab.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/publish-connection.png b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/publish-connection.png new file mode 100644 index 00000000000..3c43207f985 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/publish-connection.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/publish-profile.png b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/publish-profile.png new file mode 100644 index 00000000000..79a5bf4f3af Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/publish-profile.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/publish-web-app.png b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/publish-web-app.png new file mode 100644 index 00000000000..10535f551c5 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/publish-web-app.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/ssl-bindings.png b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/ssl-bindings.png new file mode 100644 index 00000000000..9546b17fbac Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/ssl-bindings.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/ssl-settings.png b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/ssl-settings.png new file mode 100644 index 00000000000..71ed7d6f568 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-app-iis/ssl-settings.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/publish-connection.png b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-connection.png new file mode 100644 index 00000000000..3c43207f985 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-connection.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/publish-profile.png b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-profile.png new file mode 100644 index 00000000000..79a5bf4f3af Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-profile.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/publish-web-app.png b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-web-app.png new file mode 100644 index 00000000000..10535f551c5 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/publish-web-app.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/ssl-bindings.png b/docs/extend/_shared/procedures/_img/publish-app-iis/ssl-bindings.png new file mode 100644 index 00000000000..9546b17fbac Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/ssl-bindings.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-app-iis/ssl-settings.png b/docs/extend/_shared/procedures/_img/publish-app-iis/ssl-settings.png new file mode 100644 index 00000000000..71ed7d6f568 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-app-iis/ssl-settings.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-azure/add-account.png b/docs/extend/_shared/procedures/_img/publish-azure/add-account.png new file mode 100644 index 00000000000..4af84929004 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-azure/add-account.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-azure/add-subscription.png b/docs/extend/_shared/procedures/_img/publish-azure/add-subscription.png new file mode 100644 index 00000000000..f105e9b69f9 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-azure/add-subscription.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-azure/create-web-app.png b/docs/extend/_shared/procedures/_img/publish-azure/create-web-app.png new file mode 100644 index 00000000000..6dbc75fe901 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-azure/create-web-app.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-azure/manage-subscriptions.png b/docs/extend/_shared/procedures/_img/publish-azure/manage-subscriptions.png new file mode 100644 index 00000000000..eba484a7fc1 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-azure/manage-subscriptions.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-azure/publish-web-site.png b/docs/extend/_shared/procedures/_img/publish-azure/publish-web-site.png new file mode 100644 index 00000000000..81d30931494 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-azure/publish-web-site.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-azure/publish-web.png b/docs/extend/_shared/procedures/_img/publish-azure/publish-web.png new file mode 100644 index 00000000000..75b88092a1b Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-azure/publish-web.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-azure/publish.png b/docs/extend/_shared/procedures/_img/publish-azure/publish.png new file mode 100644 index 00000000000..c1811613307 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-azure/publish.png differ diff --git a/docs/extend/_shared/procedures/_img/publish-azure/select-website.png b/docs/extend/_shared/procedures/_img/publish-azure/select-website.png new file mode 100644 index 00000000000..5ae80e4581b Binary files /dev/null and b/docs/extend/_shared/procedures/_img/publish-azure/select-website.png differ diff --git a/docs/extend/_shared/procedures/_img/sample-extension-card.png b/docs/extend/_shared/procedures/_img/sample-extension-card.png new file mode 100644 index 00000000000..f386aa413e4 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/sample-extension-card.png differ diff --git a/docs/extend/_shared/procedures/_img/sample-extension-icon.png b/docs/extend/_shared/procedures/_img/sample-extension-icon.png new file mode 100644 index 00000000000..8f0be77d7f8 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/sample-extension-icon.png differ diff --git a/docs/extend/_shared/procedures/_img/sample-extension.png b/docs/extend/_shared/procedures/_img/sample-extension.png new file mode 100644 index 00000000000..3a3f1e175bd Binary files /dev/null and b/docs/extend/_shared/procedures/_img/sample-extension.png differ diff --git a/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/counter.PNG b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/counter.PNG new file mode 100644 index 00000000000..9d986ee64cb Binary files /dev/null and b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/counter.PNG differ diff --git a/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/link-with-icon-text.PNG b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/link-with-icon-text.PNG new file mode 100644 index 00000000000..dc052216238 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/link-with-icon-text.PNG differ diff --git a/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/title-description.PNG b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/title-description.PNG new file mode 100644 index 00000000000..f3fe7a736b6 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/title-description.PNG differ diff --git a/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/title-subtitle.PNG b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/title-subtitle.PNG new file mode 100644 index 00000000000..900a652d4b9 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/title-subtitle.PNG differ diff --git a/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/widget-configuration-error.png b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/widget-configuration-error.png new file mode 100644 index 00000000000..70bb4b60048 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/widget-configuration-error.png differ diff --git a/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/widget-configuration.png b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/widget-configuration.png new file mode 100644 index 00000000000..bed37843891 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/styles-from-widget-sdk/widget-configuration.png differ diff --git a/docs/extend/_shared/procedures/_img/use-a-control/grid.png b/docs/extend/_shared/procedures/_img/use-a-control/grid.png new file mode 100644 index 00000000000..5c153b952c4 Binary files /dev/null and b/docs/extend/_shared/procedures/_img/use-a-control/grid.png differ diff --git a/docs/extend/_shared/procedures/acquire-pat.md b/docs/extend/_shared/procedures/acquire-pat.md new file mode 100644 index 00000000000..f173940dac4 --- /dev/null +++ b/docs/extend/_shared/procedures/acquire-pat.md @@ -0,0 +1,34 @@ +0. Sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```). + +0. From your home page, open your profile. +Go to your security details. + + Go to Team Services home, open your profile, go to Security + +0. Under **Security**, go to **Personal access tokens**, +then choose **Add**. + + Add personal access token + +0. Add a description for your token, +then select an expiration timeframe for your token. + +0. In the **Accounts** list, +select **All accessible accounts**. +This is required because the Visual Studio Marketplace +publishing APIs work outside the context of an account. + +0. Select the **Marketplace (publish)** scope. +This will limit the token to only being able +to publish extensions to the Visual Studio Marketplace. + + Marketplace scope + +0. Finish creating your token. + +0. Copy your generated personal access token. +Make sure to keep it secret. + + Copy personal access token + \ No newline at end of file diff --git a/docs/extend/_shared/procedures/acquire-tfx-cli.md b/docs/extend/_shared/procedures/acquire-tfx-cli.md new file mode 100644 index 00000000000..208407e8113 --- /dev/null +++ b/docs/extend/_shared/procedures/acquire-tfx-cli.md @@ -0,0 +1,5 @@ +1. If you don't have it, download and install [NodeJS](http://nodejs.org). During Setup, ensure that you leave **Add to PATH** chosen. + +2. Open a Command Prompt and type `npm i -g tfx-cli`. + +If you already have the TFX CLI installed, you can update to the latest release by running `npm up -g tfx-cli`. \ No newline at end of file diff --git a/docs/extend/_shared/procedures/call-rest-api-js.md b/docs/extend/_shared/procedures/call-rest-api-js.md new file mode 100644 index 00000000000..635378961b0 --- /dev/null +++ b/docs/extend/_shared/procedures/call-rest-api-js.md @@ -0,0 +1,18 @@ +1. Get the REST client. In this case, we're getting the work item tracking client. + + ``` javascript + VSS.require(["VSS/Service", "TFS/WorkItemTracking/RestClient"], function (VSS_Service, TFS_Wit_WebApi) { + // Get the REST client + var witClient = VSS_Service.getCollectionClient(TFS_Wit_WebApi.WorkItemTrackingHttpClient); + // ... + }); + ``` + +1. Call the API (```getWorkItems```) using the client service (```witClient```), with a callback that handles results. + + ``` javascript + witClient.getWorkItems(/* some work item IDs */ [1,2,3,4], ["System.Title"]).then( + function(workItems) { + console.log(JSON.stringify(workItems)); + }); + ``` diff --git a/docs/extend/_shared/procedures/call-rest-api-ts.md b/docs/extend/_shared/procedures/call-rest-api-ts.md new file mode 100644 index 00000000000..56c2c96afa3 --- /dev/null +++ b/docs/extend/_shared/procedures/call-rest-api-ts.md @@ -0,0 +1,3 @@ +TBD + + diff --git a/docs/extend/_shared/procedures/command-line-create-publisher.md b/docs/extend/_shared/procedures/command-line-create-publisher.md new file mode 100644 index 00000000000..61e100515b5 --- /dev/null +++ b/docs/extend/_shared/procedures/command-line-create-publisher.md @@ -0,0 +1,18 @@ +To create a publisher using the TFS Cross Platform Command Line Interface, simply run the following command, replacing each argument with the necessary value. + +
    tfx extension publisher create
    + +**Note**: The `Publisher name` must match the publisher property in your extension manifest. + +#### Example + +
    C:\tfs-cli>tfx extension publisher create 
    +Copyright Microsoft Corporation
    +> Publisher name: Fabrikam
    +> Display name: Fabrikam, Inc.
    +> Description: Fabrikam's main publisher
    +
    +=== Completed operation: create publisher ===
    + - Name: Fabrikam
    + - Display Name: Fabrikam, Inc.
    + - Description: Fabrikam's main publisher
    \ No newline at end of file diff --git a/docs/extend/_shared/procedures/create-action-js.md b/docs/extend/_shared/procedures/create-action-js.md new file mode 100644 index 00000000000..c6bcb629d08 --- /dev/null +++ b/docs/extend/_shared/procedures/create-action-js.md @@ -0,0 +1,77 @@ +1. Add your action to the contributions section of your extension manifest. + + ```json + "contributions": [ + { + "id": "myAction", + "type": "ms.vss-web.action", + "description": "Run in Hello hub action", + "targets": [ + "ms.vss-work-web.work-item-query-menu" + ], + "properties": { + "text": "Run in Hello hub", + "title": "Run in Hello hub", + "icon": "images/icon.png", + "groupId": "actions", + "uri": "action.html" + } + } + ] + ``` +| Property | Description | +| --- | --- | +| text | Text that will appear on the menu item. | +| title | Tooltip text that will appear on the menu item. | +| icon | URL to an icon that will appear on the menu item. Relative URLs are resolved using baseUri. | +| groupId | Determines where this menu item will appear in relation to the others. [How to discover menu group identifiers](../../test/discover-menu-group-ids.md) | +| uri | URI to a page that registers the menu action handler (see below). | +| registeredObjectId | (Optional) Name of the registered menu action handler. Defaults to the contribution id. | + +1. Add an HTML page called ```action.html``` to your web app to handle your action. + + ```html + + + + + Action Sample + + +
    + The end user doesn't see the content on this page. + It is only in the background to handle the contributed menu item being clicked. +
    + + + ``` + +1. Register a handler object to handle your action. For now, just raise an alert. + + ```html + + + ``` + +1. Install your extension and try it out. +The action has been added to the context menu for queries and folders in the queries hub (work hub group). + + ![action in the context menu of a query](./_img/create-action/action.png) diff --git a/docs/extend/_shared/procedures/create-action-ts.md b/docs/extend/_shared/procedures/create-action-ts.md new file mode 100644 index 00000000000..28846557c07 --- /dev/null +++ b/docs/extend/_shared/procedures/create-action-ts.md @@ -0,0 +1,80 @@ +*to be converted to typescript* + +1. Create an object with a function that will handle the action. +In this case, we'll open the Hello hub. + + ``` + scripts/action.js + ``` + + ```javascript + window.action = (function () { + "use strict"; + return { + myAction: function (actionContext) { + + // Get the Web Context to create the uri + var vstsContext = VSS.getWebContext(); + + // Navigate to the new View Assoicated Work Items hub. + // Fabrikam is the extension's namespace and Fabrikam.HelloWorld is the hub's id. + window.parent.location.href = vstsContext.host.uri + + vstsContext.project.name + "/_apps/hub/Fabrikam/Fabrikam.HelloWorld"; + } + }; + }()); + ``` + +1. Add an HTML page to your web app to handle your action. + + ``` + action.html + ``` + + Add a reference to the SDK and your script that handles the action, and call ```VSS.init()```. + + ```html + + + + + Action Sample + + +
    The end user doesn't see the content on this page.
    + + + + + + + ``` + +1. Add your action to the contributions in the extension manifest (```extensions.json```). + + ```json + "contributions": { + "vss.work.web#queryActions": [ + { + "id": "myAction", + "title": "My Action", + "text": "Do my action", + "icon": "images/icon.png", + "handler": "action.myAction", + "groupId": "actions", + "handlerUri": "action.html", + "dynamicProperties": false + } + ], + ... + ``` + +1. [Install](../../develop/install.md) your extension again. + +The action has been added to the context menu for queries and folders in the queries hub (work hub group). + +![action in the context menu of a query](./_img/create-action/action.png) + +Follow it and you'll go to the Hello hub. \ No newline at end of file diff --git a/docs/extend/_shared/procedures/create-base-manifest.md b/docs/extend/_shared/procedures/create-base-manifest.md new file mode 100644 index 00000000000..65e49fab96b --- /dev/null +++ b/docs/extend/_shared/procedures/create-base-manifest.md @@ -0,0 +1,28 @@ +0. Create a json file (`vss-extension.json`, for example) in the home directory of your web app to describe your extension. + + ```json +{ + "manifestVersion": 1, + "id": "sample-extension", + "version": "0.1.0", + "name": "My first sample extension", + "description": "A sample Visual Studio Services extension.", + "publisher": "fabrikam", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ] +} + ``` +0. Specify the path to your extension's icon in your manifest. +If you want to skip this step for now, that's fine. The extension will function without the icon. + + ```json + { + ... + "icons": { + "default": "images/logo.png" + } + } + ``` diff --git a/docs/extend/_shared/procedures/create-hub-app-asp4.md b/docs/extend/_shared/procedures/create-hub-app-asp4.md new file mode 100644 index 00000000000..2ccb60edd08 --- /dev/null +++ b/docs/extend/_shared/procedures/create-hub-app-asp4.md @@ -0,0 +1,13 @@ +1. In Visual Studio, create a new web site. + + ![File menu, new web site](./_img/create-hub-app-asp4/new-web-site.png) + +1. Use the ASP.NET Empty Web Site template. + + ![New project dialog with ASP.NET Web Application selected](./_img/create-hub-app-asp4/empty-web-site.png) + +[!INCLUDE [Webapp](create-web-page.md)] + +1. Enable SSL. + + ![Enable SSL](./_img/create-hub-app-asp4/enable-ssl.png) \ No newline at end of file diff --git a/docs/extend/_shared/procedures/create-hub-app-asp5.md b/docs/extend/_shared/procedures/create-hub-app-asp5.md new file mode 100644 index 00000000000..e963d1bbcc3 --- /dev/null +++ b/docs/extend/_shared/procedures/create-hub-app-asp5.md @@ -0,0 +1,32 @@ +1. Create an ASP.NET application. + + ![New project dialog with ASP.NET Web Application selected](./_img/create-hub-app-asp5/create-web-app.png) + +2. Use the empty template. + + ![New ASP.NET dialog with the ASP.NET 5 Preview Empty template selected](./_img/create-hub-app-asp5/empty-template.png) + +3. Add the web page that you want to display as a hub. We're doing a simple Hello World page here. + + ![Hello world page in the code window and solution explorer](./_img/create-hub-app-asp5/hello-world-page.png) + +4. Add a 58x58 pixel image to your web app that identifies your extension. + + ![fabrikam logo](./_img/fabrikam-logo.png) + + If you have the image published on another site, you don't need to add it to your extension. You'll be able to reference it from that site. + +5. Add three more pages - one the describes your extension, one that provides support infomormation, and one that describes your terms of service. + + ``` + info.html + support.html + terms-of-service.html + ``` + + Like the image, if you have any of these pages on another site, you can use them instead of adding them to your extension. + +6. Enable https for your web app. + + ![Properties dialog with SSL enabled](./_img/create-hub-app-asp5/enable-ssl.png) + diff --git a/docs/extend/_shared/procedures/create-hub-app-cmd.md b/docs/extend/_shared/procedures/create-hub-app-cmd.md new file mode 100644 index 00000000000..9ce3724b885 --- /dev/null +++ b/docs/extend/_shared/procedures/create-hub-app-cmd.md @@ -0,0 +1,17 @@ +1. Create a web app that has the page (```hello-world.html```) that you want to display. + + ```html + + + + + Hello world + + +

    Hello world

    + + + ``` + +1. [Get the Client SDK](https://github.com/Microsoft/vss-sdk) VSS.SDK.js file and add it to your web app. Place it in the ```sdk/scripts``` folder. + diff --git a/docs/extend/_shared/procedures/create-hub-group.md b/docs/extend/_shared/procedures/create-hub-group.md new file mode 100644 index 00000000000..6e3620b18dc --- /dev/null +++ b/docs/extend/_shared/procedures/create-hub-group.md @@ -0,0 +1,44 @@ +1. Add a hub group to your app's manifest file in contributions, like this. + + ``` + "contributions": [ + { + "id": "sample-hub-group", + "type": "ms.vss-web.hub-group", + "description": "Adds a 'Samples' hub group at the project/team-level", + "targets": [ + "ms.vss-web.project-hub-groups-collection" + ], + "properties": { + "name": "Samples", + "order": 100 + } + }, + ] + ``` + + Look at the contribution targets reference to see the [available hub groups that can be contributed to](../../reference/targets/overview.md#targets). + +2. Change the hub contribution so that it's in the samples hub group that you just created. Just update the targets to the relative contribution ID of the hub group you just added. + + ``` + { + "id": "Fabrikam.HelloWorld", + "type": "ms.vss-web.hub", + "description": "Adds a 'Hello' hub to the Work hub group.", + "targets": [ + ".sample-hub-group" + ], + "properties": { + "name": "Hello", + "order": 99, + "uri": "hello-world.html" + } + } + ``` + +4. [Install](../../develop/install.md) your extension. + + Now your hub appears under your Samples hub group. + + ![Hello hub in the Samples hub group](./_img/create-hub-group/hub-group.png) diff --git a/docs/extend/_shared/procedures/create-hub-manifest.md b/docs/extend/_shared/procedures/create-hub-manifest.md new file mode 100644 index 00000000000..c249ea9363a --- /dev/null +++ b/docs/extend/_shared/procedures/create-hub-manifest.md @@ -0,0 +1,64 @@ +0. Add your contribution - the Hello hub - to your extension manifest. + + > Include the [scopes](../../develop/manifest.md#scopes) that your extension requires. + > In this case, we need vso.work to access work items. + + ```json + { + ... + "contributions": [ + { + "id": "Fabrikam.HelloWorld", + "type": "ms.vss-web.hub", + "description": "Adds a 'Hello' hub to the Work hub group.", + "targets": [ + "ms.vss-work-web.work-hub-group" + ], + "properties": { + "name": "Hello", + "order": 99, + "uri": "hello-world.html" + } + } + ], + "scopes": [ + "vso.work" + ] + } + ``` + + For each contribution in your extension, the manifest defines + + - the type of contribution (hub in this case), + - the contribution target (the work hub group), + - and the properties that are specific to each type of contribution. For a hub, we have + +| Property | Description | +| --- | --- | +| name | Name of the hub. | +| order | Placement of the hub in the hub group. | +| uri | Path (relative to the extension's baseUri) of the page to surface as the hub. | + +0. Add the files that you want to include in your package - your HTML page, your scripts, the SDK script and your logo. + + ```json + { + ... + "files": [ + { + "path": "hello-world.html", "addressable": true + }, + { + "path": "scripts", "addressable": true + }, + { + "path": "sdk/scripts", "addressable": true + }, + { + "path": "images/logo.png", "addressable": true + } + ] + } + ``` + + Set `addressable` to `true` unless you include other files that don't need to be URL-addressable. diff --git a/docs/extend/_shared/procedures/create-web-page.md b/docs/extend/_shared/procedures/create-web-page.md new file mode 100644 index 00000000000..14128f16cf7 --- /dev/null +++ b/docs/extend/_shared/procedures/create-web-page.md @@ -0,0 +1,22 @@ +1. Get the Client SDK `VSS.SDK.js` file and add it to your web app. Place it in the `home/sdk/scripts` folder. + 1. Use the 'npm install' command to retrieve the SDK: `npm install vss-web-extension-sdk`. + 2. To learn more about the SDK, visit the [Client SDK Github Page](https://github.com/Microsoft/vss-sdk). + +1. Add the web page that you want to display as a hub. We're doing a simple `hello-world.html` page here, added to the `home` directory. + +1. In your HTML page, add a reference to the SDK, and call `init()` and `notifyLoadSucceeded()`. + + ``` + + + + Hello World + + + + +

    Hello World

    + + + + ``` diff --git a/docs/extend/_shared/procedures/create-widget-manifest.md b/docs/extend/_shared/procedures/create-widget-manifest.md new file mode 100644 index 00000000000..df4e6586459 --- /dev/null +++ b/docs/extend/_shared/procedures/create-widget-manifest.md @@ -0,0 +1,120 @@ +> To take advantage of any new features that will be added to the widget sdk after TFS 2015 Update 3, +please make sure to include the `ms.vss-dashboards-web.widget-sdk-version-2` demand in your manifest. +```json + { + ... + "demands": [ + "contribution/ms.vss-dashboards-web.widget-sdk-version-2" + ], + ... + } +``` + +The [extension manifest](../../develop/manifest.md) is a JSON file that defines basic information about the extension and the contributions in it. +First let's add some information about our extension. +Open the `vss-extension.json` file that you created in Step 1 and add the [core properties](../../develop/manifest.md#core-properties) which are mandatory for an extension to work. + +```json + { + "manifestVersion": 1, + "id": "vsts-extensions-myExtensions", + "version": "1.0.0", + "name": "My First Set of Widgets", + "description": "Samples containing different widgets extending dashboards", + "publisher": "fabrikam", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + } +``` + +If you haven't created a publisher yet, follow the steps [here](../../publish/overview.md#create-a-publisher) to create one. +Update the `publisher` property above to include your publisher ID instead of `fabrikam`. +Update the ID, name, and description for the extension as you see fit. +If you have an icon for the extension from the previous step, then specify the relative path to the icon in the manifest as below. +The name, description, and icon you provide will show up in the marketplace for users with whom you share the extension. + +```json + { + ... + "icons": { + "default": "img/logo.png" + }, + ... + } +``` + + +Now lets add some information for the contributions in this extension. In our case, this will be the Hello World widget we created. +Add a `contributions` property to the JSON file. The value for this property will be an array of contributions. In our case, we have a single entry to add. + + +```json + { + ... + "contributions": [ + { + "id": "HelloWorldWidget", + "type": "ms.vss-dashboards-web.widget", + "targets": [ + "ms.vss-dashboards-web.widget-catalog" + ], + "properties": { + "name": "Hello World Widget", + "description": "My first widget", + "catalogIconUrl:": "img/CatalogIcon.png", + "previewImageUrl": "img/preview.png", + "uri": "hello-world.html", + "supportedSizes": [ + { + "rowSpan": 1, + "columnSpan": 2 + } + ], + "supportedScopes": ["project_team"] + } + } + ], + ... + } +``` + +Each contribution entry defines [certain properties](../../develop/manifest.md#contributions). + +- The **id** to identify your contribution. This should be unique within an extension. This ID should match with the name you used in Step 3 to register your widget. +- The **type** of contribution. For all widgets, this should be `ms.vss-dashboards-web.widget`. +- The array of **targets** to which the contribution is contributing. For all widgets, this should be `[ms.vss-dashboards-web.widget-catalog]`. +- The **properties** is an object that includes properties for the contribution type. For widgets, the below properties are mandatory. + +| Property | Description | +| --- | --- | +| name | Name of the widget to display in the widget catalog. | +| description | Description of the widget to display in the widget catalog. | +| catalogIconUrl | Relative path of the catalog icon that you added in Step 4 to display in the widget catalog. The image should be 98px x 98px. If you have used a different folder structure or a different file name, then this is the place to specifiy the appropriate relative path. | +| previewImageUrl | Relative path of the preview image that you added in Step 4 to display in the widget catalog for TFS 2015 Update 3 only. The image should be 330px x 160px. If you have used a different folder structure or a different file name, then this is the place to specifiy the appropriate relative path. | +| uri | Relative path of the HTML file that you added in Step 1. If you have used a different folder structure or a different file name, then this is the place to specifiy the appropriate relative path. | +| supportedSizes | Array of sizes supported by your widget. When a widget supports multiple sizes, the first size in the array is the default size of the widget. The widget size is specified in terms of the rows and columns occupied by the widget in the dashboard grid. One row/column corresponds to 160px. Any dimension above 1x1 will get an additional 10px that represent the gutter between widgets. For example, a 3x2 widget will be `160*3+10*2` wide and `160*2+10*1` tall. The maximum supported size is `4x4`. | +| supportedScopes | At the moment we support only team dashboards. Therefore, the value here has to be `project_team`. In the future when we support other dashboard scopes, there will be more options to choose from here. | + +The last thing to add in the manifest is an array of files/folders you want to include in your package. If you have used a different folder structure or file name in Step 1, then use the appropriate relative path here. +For more on hosting HTML, CSS, and Javascript files, refer to the [static content hosting documentation](../../develop/static-content.md). + +```json + { + ... + "files": [ + { + "path": "hello-world.html", "addressable": true + }, + { + "path": "sdk/scripts", "addressable": true + }, + { + "path": "img", "addressable": true + } + ] + } +``` + diff --git a/docs/extend/_shared/procedures/install.md b/docs/extend/_shared/procedures/install.md new file mode 100644 index 00000000000..4341d0c7c8f --- /dev/null +++ b/docs/extend/_shared/procedures/install.md @@ -0,0 +1,10 @@ +1. From your account control panel (```https://{account}.visualstudio.com/_admin/_ext```), go to the project collection administraton page. + + ![Control panel, view the collection administration page link](./_img/install/collection-page.png) + +2. In the Extensions tab, find your extension in the "Extensions Shared With Me" group and install it. + + ![Control panel, Extensions tab, Install button](./_img/install/install.png) + + + diff --git a/docs/extend/_shared/procedures/publish-app-iis.md b/docs/extend/_shared/procedures/publish-app-iis.md new file mode 100644 index 00000000000..b815e9af991 --- /dev/null +++ b/docs/extend/_shared/procedures/publish-app-iis.md @@ -0,0 +1,25 @@ +1. If you haven't already, install IIS. + +2. Run Visual Studio as administator. + +3. Publish your web app from the solution explorer. + + ![Solution explorer, web app context menu, publish web site](_img\publish-app-iis\publish-web-app.png) + +4. Use the custom target. + + ![Custom publish target in the profile page of the publish web wizard](_img\publish-app-iis\publish-profile.png) + +4. Set the connection info. + + ![Connection page of the publish web wizard](_img\publish-app-iis\publish-connection.png) + + Verify that and then step through the rest of the publish wizard. + +5. In the IIS Manager, select your web site and add an HTTPs binding if you don't already have one. + + ![IIS with the Default Web Site selected in the connections pane, .NET Aithorization in the main page, and Bindings in the actions pane](_img\publish-app-iis\ssl-bindings.png) + +6. Open SSL Settings to require SSL for your web site. + + ![IIS Manager with SSL Settings selected, Open Feature](_img\publish-app-iis\ssl-settings.png) diff --git a/docs/extend/_shared/procedures/publish-azure.md b/docs/extend/_shared/procedures/publish-azure.md new file mode 100644 index 00000000000..74c7bf0d954 --- /dev/null +++ b/docs/extend/_shared/procedures/publish-azure.md @@ -0,0 +1,32 @@ +1. If you don't have an Azure subscription, create one. +You can use the [free trial](http://azure.microsoft.com/en-us/pricing/free-trial/). + +1. Create a web app in Microsoft Azure to host your extension. + + ![Microsoft Azure portal, create a web app](./_img/publish-azure/create-web-app.png) + +1. Publish your web site from the solution explorer. + + ![Solution explorer, project context meny, publish web site](./_img/publish-azure/publish-web-site.png) + +1. Publish to Azure. + + ![Publish web dialog box](./_img/publish-azure/publish-web.png) + +1. Pick the web app that you set up to host your extension. + + ![Select existing web site dialog box with the web site selected](./_img/publish-azure/select-website.png) + + If your web site doesn't show up, use the **Manage subscriptions** dialog to connect your Visual Studio account to your Microsoft Azure subscription. + +1. Publish your extension. + + ![Publish button on the Publish web dialog box](./_img/publish-azure/publish.png) + +1. Change your extension manifest to use your Microsoft Azure web app instead of localhost. + + ``` + "baseUri": "https://fabrikam-vso-extensions.azurewebsites.net/", + ``` + +1. [Install](../../get-started/visual-studio.md#install) your extension again and try it out. \ No newline at end of file diff --git a/docs/extend/_shared/procedures/publish.md b/docs/extend/_shared/procedures/publish.md new file mode 100644 index 00000000000..de5c7e9a23c --- /dev/null +++ b/docs/extend/_shared/procedures/publish.md @@ -0,0 +1,11 @@ +Once your extension has been packaged, you can upload it to the Marketplace under a publisher. The `publisher` identifer specified in your [extension's manifest file](../../develop/manifest.md) must match the identifier of the publisher the extension is uploaded under. + +To upload an extension to the Marketplace: + +1. Navigate to the [Visual Studio Marketplace Publishing Portal](http://aka.ms/vsmarketplace-manage) +2. Find the Upload new extension button, navigate to your packaged .vsix file, and select upload. +3. After a quick validation, your extension will appear in the extensions list: + ![first](../../publish/_img/manage-first.png) + +At this point, your extension is not visible to any accounts and cannot be installed until you share it. + diff --git a/docs/extend/_shared/procedures/share.md b/docs/extend/_shared/procedures/share.md new file mode 100644 index 00000000000..4f607f0d15b --- /dev/null +++ b/docs/extend/_shared/procedures/share.md @@ -0,0 +1,8 @@ +Before an extension can be installed into a VSTS account, it must be shared with that account. Sharing is a requirement during development and testing of an extension, as it is the only way to run an extension. + +To share an extension so it can be installed: + +1. Click an extension from the list of displayed items +2. Click the **Share** button +3. Specify the name of the VSTS account to make this extension visible to. + For example, to make an extension visible to the fabrikam-fiber-inc.visualstudio.com account, specify `fabrikam-fiber-inc`. \ No newline at end of file diff --git a/docs/extend/_shared/procedures/test.md b/docs/extend/_shared/procedures/test.md new file mode 100644 index 00000000000..ea016bccc0c --- /dev/null +++ b/docs/extend/_shared/procedures/test.md @@ -0,0 +1,5 @@ +1. Go to your Visual Studio Account, add ```?localdevmode=https://localhost:port``` to the URL, and refresh. + +2. Navigate to your app (the hub you just added to the Home group, for example). + + \ No newline at end of file diff --git a/docs/extend/_shared/procedures/update.md b/docs/extend/_shared/procedures/update.md new file mode 100644 index 00000000000..2eda03c421b --- /dev/null +++ b/docs/extend/_shared/procedures/update.md @@ -0,0 +1,9 @@ +To change an extension that has already been published, update it. + +> Updating is recommended over removing and re-uploading. + +1. Click an extension from the list of displayed items +2. Right-click and select **Update**. +3. Browse to the .vsix for your extension and upload it. + +The updated version of your extension is automatically installed to accounts that have it already installed. New accounts where the extension is installed in the future also receive the latest version. diff --git a/docs/extend/_shared/procedures/upload.md b/docs/extend/_shared/procedures/upload.md new file mode 100644 index 00000000000..2d02dc52768 --- /dev/null +++ b/docs/extend/_shared/procedures/upload.md @@ -0,0 +1,4 @@ +Go to the VSTS Marketplace (https://marketplace.visualstudio.com) +and add your extension. + +![Plus sign on the Manage Extensions page of the VSTS Marketplace](../../get-started/_img/add-extension.png) diff --git a/docs/extend/_shared/procedures/use-a-control-js.md b/docs/extend/_shared/procedures/use-a-control-js.md new file mode 100644 index 00000000000..3a592737e72 --- /dev/null +++ b/docs/extend/_shared/procedures/use-a-control-js.md @@ -0,0 +1,50 @@ +1. Add a div element in the body of the page to contain the grid. + + ```html +
    + ``` + +1. In the script element, before calling ```VSS.notifyLoadSucceeded()```, initialize the VSS SDK. + + ```javascript + // Sets up the initial handshake with the host frame + VSS.init({ + // Our extension will explicitly notify the host when we're done loading + explicitNotifyLoaded: true, + + // We are using some Team Services APIs, so we will need the module loader to load them in + usePlatformScripts: true, + usePlatformStyles: true + }); + ``` + +1. Create a grid and load it with data. (Replace your current call to ```VSS.notifyLoadSucceeded()``` with the following snippet) + + ```javascript + // Load Team Services controls + VSS.require(["VSS/Controls", "VSS/Controls/Grids"], + function (Controls, Grids) { + + // Initialize the grid control with two colums, "key" and "value" + var dataSource = []; + dataSource.push({key: "key", value: "value"}); + + Controls.create(Grids.Grid, $("#grid-container"), { + height: "1000px", // Explicit height is required for a Grid control + columns: [ + // text is the column header text. + // index is the key into the source object to find the data for this column + // width is the width of the column, in pixels + { text: "Property key", index: "key", width: 150 }, + { text: "Property value", index: "value", width: 600 } + ], + // This data source is rendered into the Grid columns defined above + source: dataSource + }); + VSS.notifyLoadSucceeded(); + }); + ``` + +1. Refresh the page to see the grid. + + ![Grid control on the hello world page](./_img/use-a-control/grid.png) \ No newline at end of file diff --git a/docs/extend/_shared/procedures/use-a-control-ts.md b/docs/extend/_shared/procedures/use-a-control-ts.md new file mode 100644 index 00000000000..a8ae541680b --- /dev/null +++ b/docs/extend/_shared/procedures/use-a-control-ts.md @@ -0,0 +1,43 @@ +*to be converted to typescript* + +1. In the body of the page, initialize the helper functions. + + ``` + + ``` + +1. Creates a grid and loads it with data, and then notify that the page is loaded. + + ```javascript + ... + VSS.require(["VSS/Controls", "VSS/Controls/Grids"], function (Controls, Grids) { + + var dataSource = []; + dataSource.push({key: "key", value: "value"}); + + Controls.create(Grids.Grid, $("#grid-container"), { + height: "1000px", + columns: [ + { text: "Property key", index: "key", width: 150 }, + { text: "Property value", index: "value", width: 600 } + ], + source: dataSource + }); + + ``` + +1. Notify that the page is loaded. + + ``` + ... + + VSS.notifyLoadSucceeded(); + + ``` + + diff --git a/docs/extend/breadcrumb/toc.yml b/docs/extend/breadcrumb/toc.yml new file mode 100644 index 00000000000..898773ac18b --- /dev/null +++ b/docs/extend/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Extend + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=extend + items: + - name: Extend + tocHref: /vsts/ + topicHref: /vsts/extend/index \ No newline at end of file diff --git a/docs/extend/center.json b/docs/extend/center.json new file mode 100644 index 00000000000..95f9556a033 --- /dev/null +++ b/docs/extend/center.json @@ -0,0 +1,5 @@ +{ + "Template": "GetStarted", + "TocFilePath": "/integrate/extensions/toc.csv", + "TocTitlesFilePath": "/integrate/extensions/containerNodeTitles.csv" +} \ No newline at end of file diff --git a/docs/extend/containerNodeTitles.csv b/docs/extend/containerNodeTitles.csv new file mode 100644 index 00000000000..fdb4f94beaa --- /dev/null +++ b/docs/extend/containerNodeTitles.csv @@ -0,0 +1,9 @@ +extensions,Extensions +get-started,"Get started" +develop,Develop +develop-how-to,"How to" +reference,APIs +test,"Test and debug" +publish,Publish +samples,Samples +howto,How to \ No newline at end of file diff --git a/docs/extend/develop/_img/add-panel-intro-show-mapping-hello-world.png b/docs/extend/develop/_img/add-panel-intro-show-mapping-hello-world.png new file mode 100644 index 00000000000..be18c0ffbdc Binary files /dev/null and b/docs/extend/develop/_img/add-panel-intro-show-mapping-hello-world.png differ diff --git a/docs/extend/develop/_img/add-panel-show-custom-panel.png b/docs/extend/develop/_img/add-panel-show-custom-panel.png new file mode 100644 index 00000000000..8b7378f0e04 Binary files /dev/null and b/docs/extend/develop/_img/add-panel-show-custom-panel.png differ diff --git a/docs/extend/develop/_img/add-panel-show-three-types.png b/docs/extend/develop/_img/add-panel-show-three-types.png new file mode 100644 index 00000000000..4f56631ff79 Binary files /dev/null and b/docs/extend/develop/_img/add-panel-show-three-types.png differ diff --git a/docs/extend/develop/_img/add-workitem-extension-group.png b/docs/extend/develop/_img/add-workitem-extension-group.png new file mode 100644 index 00000000000..c074348d985 Binary files /dev/null and b/docs/extend/develop/_img/add-workitem-extension-group.png differ diff --git a/docs/extend/develop/_img/add-workitem-extension-page.png b/docs/extend/develop/_img/add-workitem-extension-page.png new file mode 100644 index 00000000000..9ac0989c63e Binary files /dev/null and b/docs/extend/develop/_img/add-workitem-extension-page.png differ diff --git a/docs/extend/develop/_img/add-workitem-extension-toolbar.png b/docs/extend/develop/_img/add-workitem-extension-toolbar.png new file mode 100644 index 00000000000..2a3cd051e74 Binary files /dev/null and b/docs/extend/develop/_img/add-workitem-extension-toolbar.png differ diff --git a/docs/extend/develop/_img/auth-new-scopes-dialog.png b/docs/extend/develop/_img/auth-new-scopes-dialog.png new file mode 100644 index 00000000000..f08accdba1e Binary files /dev/null and b/docs/extend/develop/_img/auth-new-scopes-dialog.png differ diff --git a/docs/extend/develop/_img/auth-new-scopes.png b/docs/extend/develop/_img/auth-new-scopes.png new file mode 100644 index 00000000000..a7d133d816f Binary files /dev/null and b/docs/extend/develop/_img/auth-new-scopes.png differ diff --git a/docs/extend/develop/_img/build-task-ext-add-build-step.png b/docs/extend/develop/_img/build-task-ext-add-build-step.png new file mode 100644 index 00000000000..424b1fa7afa Binary files /dev/null and b/docs/extend/develop/_img/build-task-ext-add-build-step.png differ diff --git a/docs/extend/develop/_img/build-task-ext-choose-task.png b/docs/extend/develop/_img/build-task-ext-choose-task.png new file mode 100644 index 00000000000..d10ef469863 Binary files /dev/null and b/docs/extend/develop/_img/build-task-ext-choose-task.png differ diff --git a/docs/extend/develop/_img/build-task-ext-file-structure.png b/docs/extend/develop/_img/build-task-ext-file-structure.png new file mode 100644 index 00000000000..706e912b372 Binary files /dev/null and b/docs/extend/develop/_img/build-task-ext-file-structure.png differ diff --git a/docs/extend/develop/_img/build-task-ext-package.png b/docs/extend/develop/_img/build-task-ext-package.png new file mode 100644 index 00000000000..ba7d9de16be Binary files /dev/null and b/docs/extend/develop/_img/build-task-ext-package.png differ diff --git a/docs/extend/develop/_img/build-task-ext-task-in-build.png b/docs/extend/develop/_img/build-task-ext-task-in-build.png new file mode 100644 index 00000000000..80553dc96b5 Binary files /dev/null and b/docs/extend/develop/_img/build-task-ext-task-in-build.png differ diff --git a/docs/extend/develop/_img/build-task-ext-tasks-uploading.png b/docs/extend/develop/_img/build-task-ext-tasks-uploading.png new file mode 100644 index 00000000000..a65c5308c12 Binary files /dev/null and b/docs/extend/develop/_img/build-task-ext-tasks-uploading.png differ diff --git a/docs/extend/develop/_img/consumer-service.png b/docs/extend/develop/_img/consumer-service.png new file mode 100644 index 00000000000..94ff4360d35 Binary files /dev/null and b/docs/extend/develop/_img/consumer-service.png differ diff --git a/docs/extend/develop/_img/customcontrol.png b/docs/extend/develop/_img/customcontrol.png new file mode 100644 index 00000000000..722945a6e2d Binary files /dev/null and b/docs/extend/develop/_img/customcontrol.png differ diff --git a/docs/extend/develop/_img/extension-card-with-legend.png b/docs/extend/develop/_img/extension-card-with-legend.png new file mode 100644 index 00000000000..9b186f8f450 Binary files /dev/null and b/docs/extend/develop/_img/extension-card-with-legend.png differ diff --git a/docs/extend/develop/_img/extension-card.png b/docs/extend/develop/_img/extension-card.png new file mode 100644 index 00000000000..7cea06a75a9 Binary files /dev/null and b/docs/extend/develop/_img/extension-card.png differ diff --git a/docs/extend/develop/_img/extension-details-page.png b/docs/extend/develop/_img/extension-details-page.png new file mode 100644 index 00000000000..55e1db6bfce Binary files /dev/null and b/docs/extend/develop/_img/extension-details-page.png differ diff --git a/docs/extend/develop/_img/get-extension-key.png b/docs/extend/develop/_img/get-extension-key.png new file mode 100644 index 00000000000..69a203b5580 Binary files /dev/null and b/docs/extend/develop/_img/get-extension-key.png differ diff --git a/docs/extend/develop/_img/hash-browser.png b/docs/extend/develop/_img/hash-browser.png new file mode 100644 index 00000000000..34551b3b54f Binary files /dev/null and b/docs/extend/develop/_img/hash-browser.png differ diff --git a/docs/extend/develop/_img/service-endpoint-build-task-selector.png b/docs/extend/develop/_img/service-endpoint-build-task-selector.png new file mode 100644 index 00000000000..cc1aef08cc7 Binary files /dev/null and b/docs/extend/develop/_img/service-endpoint-build-task-selector.png differ diff --git a/docs/extend/develop/_img/service-endpoint-build-task-setup.png b/docs/extend/develop/_img/service-endpoint-build-task-setup.png new file mode 100644 index 00000000000..92711aafd34 Binary files /dev/null and b/docs/extend/develop/_img/service-endpoint-build-task-setup.png differ diff --git a/docs/extend/develop/_img/service-endpoint-endpoint-picker.png b/docs/extend/develop/_img/service-endpoint-endpoint-picker.png new file mode 100644 index 00000000000..135d44a46bd Binary files /dev/null and b/docs/extend/develop/_img/service-endpoint-endpoint-picker.png differ diff --git a/docs/extend/develop/_img/service-endpoint-setup.png b/docs/extend/develop/_img/service-endpoint-setup.png new file mode 100644 index 00000000000..692d3f44b26 Binary files /dev/null and b/docs/extend/develop/_img/service-endpoint-setup.png differ diff --git a/docs/extend/develop/_img/service-hooks.png b/docs/extend/develop/_img/service-hooks.png new file mode 100644 index 00000000000..3a38c135fc4 Binary files /dev/null and b/docs/extend/develop/_img/service-hooks.png differ diff --git a/docs/extend/develop/_shared/build-task-schema.json b/docs/extend/develop/_shared/build-task-schema.json new file mode 100644 index 00000000000..f097bb3e83d --- /dev/null +++ b/docs/extend/develop/_shared/build-task-schema.json @@ -0,0 +1,335 @@ +{ + "$schema": "https://raw.githubusercontent.com/AArnott/vso-agent-tasks/9b41d803a/tasks.schema.json", + "title": "VSTS Tasks schema", + "type": "object", + "additionalProperties": false, + "properties": { + "id": { + "type": "string", + "description": "A unique guid for this task", + "pattern": "^[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}$" + }, + "name": { + "type": "string", + "description": "Name with no spaces", + "pattern": "^[A-Za-z0-9\\-]+$" + }, + "friendlyName": { + "type": "string", + "description": "Descriptive name (spaces allowed)" + }, + "description": { + "type": "string", + "description": "Detailed description of what your task does" + }, + "helpMarkDown": { + "type": "string" + }, + "author": { + "type": "string" + }, + "visibility": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Build", + "Release", + "Preview" + ] + } + }, + "runsOn": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Agent", + "MachineGroup", + "Server" + ] + } + }, + "category": { + "type": "string", + "description": "Where the task appears in VSTS", + "enum": [ + "Build", + "Utility", + "Test", + "Package", + "Deploy" + ] + }, + "groups": { + "type": "array", + "description": "Describes groups that task properties may be logically grouped by in the UI.", + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "name", + "displayName" + ], + "properties": { + "name": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "isExpanded": { + "type": "boolean" + }, + "tags": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Preview" + ] + } + } + } + } + }, + "demands": { + "type": "array", + "description": "Allows you to define a list of demands that a build agent requires to run this build task.", + "items": { + "type": "string" + } + }, + "minimumAgentVersion": { + "type": "string", + "pattern": "^\\d+\\.\\d+(\\.\\d+)?$" + }, + "version": { + "type": "object", + "additionalProperties": false, + "description": "Always update this when you release your task, so that the agents utilise the latest code.", + "required": [ + "Major", + "Minor", + "Patch" + ], + "properties": { + "Major": { + "type": "number" + }, + "Minor": { + "type": "number" + }, + "Patch": { + "type": "number" + } + } + }, + "instanceNameFormat": { + "type": "string", + "description": "This is how the task will be displayed within the build step list - you can use variable values by using $(variablename)" + }, + "inputs": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "name", + "label", + "type" + ], + "properties": { + "name": { + "type": "string", + "description": "The variable name to use to store the user-supplied value", + "pattern": "^[A-Za-z][A-Za-z0-9]*$" + }, + "label": { + "type": "string", + "description": "The text displayed to the user for the input label" + }, + "type": { + "type": "string", + "description": "The type that dictates the control rendered to the user.", + "enum": [ + "boolean", + "connectedService:ServiceType", + "connectedService:AzureRM", + "connectedService:Azure", + "connectedService:Azure:Certificate,UsernamePassword", + "connectedService:Chef", + "connectedService:ssh", + "connectedService:Generic", + "connectedService:Jenkins", + "connectedService:servicefabric", + "filePath", + "multiLine", + "pickList", + "radio", + "string" + ] + }, + "defaultValue": { + "type": [ + "string", + "boolean" + ], + "description": "The default value to apply to this input." + }, + "required": { + "type": "boolean", + "description": "Whether the input is a required field (default is false).", + "default": false + }, + "helpMarkDown": { + "type": "string", + "description": "Help to be displayed when hovering over the help icon for the input. To display URLs use the format [Text To Display](http://Url)" + }, + "groupName": { + "type": "string", + "description": "Setting this to the name of a group defined in 'groups' will place the input into that group." + }, + "visibleRule": { + "type": "string", + "description": "Allow's you to define a rule which dictates when the input will be visible to a user, for example \"variableName = value\"" + }, + "properties": { + "type": "object", + "properties": { + "EditableOptions": { + "type": "string", + "enum": [ + "True", + "False" + ] + } + } + }, + "options": { + "type": "object", + "additionalProperties": true + } + } + } + }, + "dataSourceBindings": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "target": { + "type": "string" + }, + "endpointId": { + "type": "string" + }, + "dataSourceName": { + "type": "string" + }, + "parameters": { + "type": "object" + }, + "resultTemplate": { + "type": "string" + } + } + } + }, + "sourceDefinitions": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "target": { + "type": "string" + }, + "endpoint": { + "type": "string" + }, + "selector": { + "type": "string" + }, + "keySelector": { + "type": "string" + }, + "authKey": { + "type": "string" + } + } + } + }, + "execution": { + "type": "object", + "additionalProperties": false, + "description": "Execution options for this task", + "properties": { + "Node": { + "$ref": "#/definitions/executionObject" + }, + "Bash": { + "$ref": "#/definitions/executionObject" + }, + "AzurePowerShell": { + "$ref": "#/definitions/executionObject" + }, + "PowerShell": { + "$ref": "#/definitions/executionObject" + }, + "PowerShell3": { + "$ref": "#/definitions/executionObject" + }, + "PowerShellExe": { + "$ref": "#/definitions/executionObject" + }, + "Process": { + "$ref": "#/definitions/executionObject" + }, + "RM:ManualIntervention": { + "$ref": "#/definitions/executionObject" + } + } + }, + "messages": { + "type": "object" + }, + "$schema": { + "type": "string" + } + }, + "definitions": { + "executionObject": { + "type": "object", + "additionalProperties": true, + "properties": { + "target": { + "type": "string", + "description": "The target file to be executed. You can use variables here in brackets e.g. $(currentDirectory)\filename.ps1" + }, + "argumentFormat": { + "type": "string" + }, + "workingDirectory": { + "type": "string", + "description": "The directory to execute the task from e.g. $(currentDirectory)" + }, + "modifyEnvironment": { + "type": [ + "boolean", + "string" + ] + }, + "platforms": { + "type": "array", + "items": { + "enum": [ + "windows" + ] + } + } + } + } + } +} \ No newline at end of file diff --git a/docs/extend/develop/add-action.md b/docs/extend/develop/add-action.md new file mode 100644 index 00000000000..1a2ae1c8d03 --- /dev/null +++ b/docs/extend/develop/add-action.md @@ -0,0 +1,121 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Add an Action | Extensions for Visual Studio Team Services +description: Add an action for your extension that extends Visual Studio Team Services. +ms.assetid: 7b117bbf-f188-41ce-8ff6-3723ebccea81 +ms.manager: douge +ms.author: elbatk +ms.date: 08/22/2016 +--- + +# Add a menu action +In this example, we'll add an action to the query context menu in the work item queries hub. + +## Prerequisites for this article +- You'll need to create a web app for your action, which can be found in the [hub example](./add-hub.md). +- If you haven't, take a look at the [write your first extension tutorial](../get-started/node.md) to learn about things such as: + - **The client SDK: [VSS.sdk.js](../get-started/node.md#client-sdk)** + - **The [extension manifest](../get-started/node.md#extension-manifest)** + - **General extension file structure** + +## Update extension manifest file + +Below is the code snippet that adds your action to the contributions section of your [extension manifest](../develop/manifest.md). +```json +... + "contributions": [ + { + "id": "myAction", + "type": "ms.vss-web.action", + "description": "Run in Hello hub action", + "targets": [ + "ms.vss-work-web.work-item-query-menu" + ], + "properties": { + "text": "Run in Hello hub", + "title": "Run in Hello hub", + "icon": "images/icon.png", + "groupId": "actions", + "uri": "action.html" + } + } + ] +... +``` + +### Properties +| Property | Description +|--------------------|-----------------------------------------------------------------------------------------------------------------| +| text | Text that will appear on the menu item. | +| title | Tooltip text that will appear on the menu item. | +| icon | URL to an icon that will appear on the menu item. Relative URLs are resolved using baseUri. | +| groupId | Determines where this menu item will appear in relation to the others. [How to discover menu group identifiers] (../test/discover-menu-group-ids.md). | +| uri | URI to a page that registers the menu action handler (see below). | +| registeredObjectId | (Optional) Name of the registered menu action handler. Defaults to the contributor id. | + +Learn about all of the places where you can add actions in the [contributions reference](../reference/targets/overview.md). + +## Your HTML page + +Your menu action will be represented by a JavaScript script embedded in an HTML file. Save the following contents in a file and location that matches the reference to it +in your extension's manifest file. + +```html + + + + + Action Sample + + +
    + The end user doesn't see the content on this page. + It is only in the background to handle the contributed menu item being clicked. +
    + + +``` + +## Your JavaScript +The script below registers the handler object to handle the action, place it in the `head` section of the HTML page above. +```html + + +``` + +## Next Steps: + +Now that you've written your extension, the next steps are to Package, Publish, and Install your extension. You can also check out the +documentation for Testing and Debugging your extension. + + diff --git a/docs/extend/develop/add-backlog-panel.md b/docs/extend/develop/add-backlog-panel.md new file mode 100644 index 00000000000..5c91687632b --- /dev/null +++ b/docs/extend/develop/add-backlog-panel.md @@ -0,0 +1,115 @@ +--- +title: Add panels on backlog pages | Extensions for Visual Studio Team Services +description: Extend VSTS with panels on backlogs. +ms.assetid: 34f01da42-5a98-4bc5-981e-3f8d1ffdf163 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/22/2016 +--- + +# Add panels on backlog pages + +In this example, we'll add a simple Hello World extension as a panel on the Portfolio backlog, Product backlog, and Iteration backlog. + + + +![Open panel extension on the VSTS Stories backlog page](_img/add-panel-intro-show-mapping-hello-world.png) + +The custom panel opens in the same space that the mapping panel opens if it were selected. + +![panel extension on the VSTS Portfolio backlog page](_img/add-panel-show-custom-panel.png) + + +There are three types of backlogs that can be targets for panel extensions: Portfolio backlogs, Product backlogs, and Iteration backlogs. For the Agile template, this breakdown is as below. This is representitive of Scrum and CMMI as well. For custom templates, please consult your process to see which backlogs are requirement or portfolio category. + + + +![backlog panel contribution point breakdown](_img/add-panel-show-three-types.png) + +See the [Team Services Extension Samples](https://github.com/Microsoft/vsts-extension-samples/tree/master/backlogs-panel) on GitHub for the full source of an example extension. + +## Update your extension manifest + +Update your [extension manifest](../develop/manifest.md) file with the following code: + +```json +... + "contributions": [ + { + "id": "Fabrikam.HelloWorld.Backlogs.Panel", + "type": "ms.vss-work-web.backlog-panel", + "description": "Adds a 'Hello' panel to Product and Iteration backlog pages.", + "targets": [ + "ms.vss-work-web.requirement-backlog-toolpane", + "ms.vss-work-web.portfolio-backlog-toolpane", + "ms.vss-work-web.iteration-backlog-toolpane" + ], + "properties": { + "title": "Hello Panel Pane", + "name": "Hello Panel", + "uri": "index.html", + "registeredObjectId": "backlogPanelObject" + } + } + ], + "scopes": [ + "vso.work" + ] +... +``` + +### Contribution +For each contribution in your extension, the manifest defines +* the type of contribution (backlog pannel in this case), +* the contribution target (the requirements, portfolio, and iteration backlogs in this case), +* and the properties that are specific to each type of contribution. For panels, we have + + +| Property | Description +|--------------------|----------------------------------------------------------------------------------------| +| title | Tooltip text that will appear on the menu item. | +| name | What appears in the dropdown for panel selection. | +| uri | Path (relative to the extenion's base URI) of the page to the surface as the panel | +| registeredObjectId | Id of the object registered for the panel. | + + +Learn about all of the places where you can add an extension in the [contributions reference](../reference/targets/overview.md). + +### Scopes +Include the[scopes](manifest.md#scopes) that your extension requires. +In this case, we need `vso.work` to access work items. + + + +## Get selection events +To get selection events (information about what work items are selected) implement this interface on your registered object. + +```javascript +... + IContributedPanel { + workItemSelectionChanged: (selectedWorkItems) => void; + } +... +``` + + +## Next Steps + + diff --git a/docs/extend/develop/add-backlog-tabs.md b/docs/extend/develop/add-backlog-tabs.md new file mode 100644 index 00000000000..74306500b93 --- /dev/null +++ b/docs/extend/develop/add-backlog-tabs.md @@ -0,0 +1,126 @@ +--- +title: Add tabs on backlog pages | Extensions for Visual Studio Team Services +description: Extend VSTS with your own hub. +ms.assetid: 3D0B51DA-66AA-45C7-B9F1-08973CFF7E5E +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/22/2016 +--- + +# Add tabs on backlog pages + +If you have a web page that can be hosted in an iframe, it can be hosted in VSTS as a tab on the backlog pages. +In this example, we'll add a simple Hello World tab on the Product Backlog and the Iteration Backlog. + +![Tab location on the VSTS Product backlog page](../_shared/procedures/_img/backlog-tab/product-backlog-tab.png) + +![Tab location on the VSTS Product backlog page](../_shared/procedures/_img/backlog-tab/iteration-backlog-tab.png) + +## Create your web page + +[!INCLUDE [Web_page](../_shared/procedures/create-web-page.md)] + +## Update your extension manifest +Update your [extension manifest](../develop/manifest.md) file with the following code: + +```json +... + + "contributions": [ + { + "id": "Fabrikam.HelloWorld.Backlog.Tabs", + "type": "ms.vss-web.tab", + "description": "Adds a 'Hello' tab to the Product and Iteration backlog tabs.", + "targets": [ + "ms.vss-work-web.product-backlog-tabs", + "ms.vss-work-web.iteration-backlog-tabs", + ], + "properties": { + "name": "Hello", + "uri": "hello-world.html", + "registeredObjectId": "backlogTabObject" + } + } + ], + "scopes": [ + "vso.work" + ], + "files": [ + { + "path": "hello-world.html", "addressable": true + }, + { + "path": "scripts", "addressable": true + }, + { + "path": "sdk/scripts", "addressable": true + }, + { + "path": "images/logo.png", "addressable": true + } + ] +... +``` + +### Contributions +The **contributions** stanza contains information about your tasks. + + +For each contribution in your extension, the manifest defines + +* the type of contribution (tab in this case), +* the contribution target (the product or iteration backlog tabs in this case), +* and the properties that are specific to each type of contribution. For a tab, we have + +| Property | Description +|--------------------|----------------------------------------------------------------------------------------| +| name | Name of the hub. | +| uri | Path (relative to the extenion's base URI) of the page to the surface as the tab | +| registeredObjectId | Id of the object registered for the tab. Include code like the example below in the html file indicated in the "uri" property of the contribution shown above. | + +### Scopes +It includes the [scopes](./manifest.md#scopes) that your extension requires. +In this case, we need `vso.work` to access work items. + +### Files +Include all of the files your extension will access.
    +For your files, set `addressable` to `true` unless you include other files that don't need to be URL-addressable. + +## Example registeredObjectId +```javascript +VSS.register("backlogTabObject", { + pageTitle: function(state) { + return "Hello Tab"; + }, + updateContext: function(tabContext) { + }, + isInvisible: function(state) { + return false; + }, + isDisabled: function(state) { + return false; + } +}); +``` + +Learn about all of the places where you can add a hub in the [contributions reference](../reference/targets/overview.md). + +## Next Steps: + +Now that you've written your extension, the next steps are to Package, Publish, and Install your extension. You can also check out the +documentation for Testing and Debugging your extension. + + diff --git a/docs/extend/develop/add-build-task.md b/docs/extend/develop/add-build-task.md new file mode 100644 index 00000000000..304a5b35c99 --- /dev/null +++ b/docs/extend/develop/add-build-task.md @@ -0,0 +1,251 @@ +--- +title: Add a Build Task | Extensions for Visual Studio Team Services +description: Add a custom build task. +ms.assetid: 98821825-da46-498e-9b01-64d3a8c78ea0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/22/2016 +--- + +# Add a build task + +Custom build tasks can be contributed by extensions that can be discovered and installed by users into a VSTS account. +These tasks will appear next to Microsoft-provided tasks in the Add Step wizard: +Integrations link on the account home page + +To learn more about the new cross-platform build system, see [Team Foundation Build](../..//build-release/overview.md). + +## Preparation and required setup for this tutorial +In order to create extensions for Team Services, there are some prerequisite software and tools you'll need: + +- A **VSTS account**, more information can be found [here](https://www.visualstudio.com/en-us/products/visual-studio-team-services-vs.aspx) +- **A text editor**. For many of the tutorials we used `Visual Studio Code`, which can be downloaded [here](https://code.visualstudio.com/) +- The latest version of **node**, which can be downloaded [here](https://nodejs.org/en/download/) + +- **TFS Cross Platform Command Line Interface (tfx-cli)** to package your extensions. + - **tfx-cli** can be installed using `npm`, a component of Node.js by running `npm i -g tfx-cli` +- A `home` directory for your project. + - The `home` directory of a build task extension should look like the following: + +```no-highlight +├── README.md +├── sdk + ├── node_modules + └── scripts + └── VSS.SDK.js +├── images + └── extension-icon.png +├── buildtask + └── task.json +├── scripts // where your build task scripts should be placed +└── vss-extension.json // extension's manifest +``` + + +## Steps +There are four steps to creating a build task extension and putting it on the Marketplace: +* [Step 1: Create the task metadata file](#createmetadata) +* [Step 2: Create the extension maniest file](#extensionmanifest) +* [Step 3: Package your extension](#packageext) +* [Step 4: Publish your extension](#publishext) +* [Optional: Install and test your extension](#installandtest) + + +## Step 1: Create the task metadata file + +In your task folder (buildtask), create a `task.json` file. +This file will describe the build task and is what the build system uses to render configuration options to the user and to know which scripts to execute at build time. +Below is a template that you can use to begin developing your build task extension: + +### task.json template +```javascript +{ + "id": "{{taskguid}}", + "name": "{{taskname}}", + "friendlyName": "{{taskfriendlyname}}", + "description": "{{taskdescription}}", + "helpMarkDown": "", + "category": "Utility", + "author": "{{taskauthor}}", + "version": { + "Major": 0, + "Minor": 1, + "Patch": 0 + }, + "instanceNameFormat": "Echo $(samplestring)", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "samplepathinput", + "type": "filePath", + "label": "Sample Path", + "defaultValue": "", + "required": true, + "helpMarkDown": "A sample path which is relative to root of repo if empty" + }, + { + "name": "samplestring", + "type": "string", + "label": "Sample String", + "defaultValue": "", + "required": false, + "helpMarkDown": "A sample string" + }, + { + "name": "samplebool", + "type": "boolean", + "label": "Sample Boolean", + "defaultValue": "false", + "required": false, + "helpMarkDown": "If this is true, this task will fail if any errors are written to the StandardError stream.", + "groupName": "advanced" + } + ], + "execution": { + "Node": { + "target": "index.js" + } + } +} +``` +
    + +**task.json components**
    +Here is a description of some of the components of the `task.json` file. +| Property | Description | +|--------------|------------------------| +| `id` | A unique guid for your task | +| `name` | Name with no spaces | +| `friendlyName` | Descriptive name (spaces allowed) | +| `description` | Detailed description of what your task does | +| `author` | Short string describing the entity developing the build task, e.g. "Microsoft Corporation" | +| `instanceNameFormat` | This is how the task will be displayed within the build step list - you can use variable values by using **$(variablename)** | +| `groups` | Describes groups that task properties may be logically grouped by in the UI. | +| `inputs` | Inputs to be used when your build task runs | +| `execution` | Execution options for this task, including scripts | + +>[!NOTE] +>For a more in-depth look into the task.json file, or to learn how to bundle multiple versions in your extension, check out the **[build task reference](./build-task-schema.md)** + +You can explore the **[vso-agent-tasks](https://github.com/Microsoft/vso-agent-tasks/tree/master/Tasks)** repository on GitHub for multiple examples ([Grunt](https://github.com/Microsoft/vso-agent-tasks/blob/master/Tasks/Grunt) is a good one). + +
    +## Step 2: Create the extension manifest file +The extension manifest contains all of the information about your extension. It includes links to your files, including your task folders and images. This example is an extension manifest which contains the build task. + +Copy the .json code below and save it as your `vss-extension.json` file: +[!code-javascript[JSON]](../_data/extension-build-tasks.json)] + +>[!NOTE] +>The **publisher** here will need to be changed to your publisher name. If you would like to create a publisher now, you can jump down to +[create your publisher](#createpublisher) for instructions on how to do so. + +### Contributions +| Property | Description | +|--------------|------------------------| +| `id` | Identifier of the contribution. Must be unique within the extension. Does not need to match the name of the build task, but typically the build task name is included in the ID of the contribution. | +| `type` | Type of the contribution. Should be **ms.vss-distributed-task.task**. +| `targets` | Contributions "targeted" by this contribution. Should be **ms.vss-distributed-task.tasks**. +| `properties.name` | Name of the task. This must match the folder name of the corresponding self-contained build task definition. | + +### Files +| Property | Description | +|--------------|------------------------| +| `path` | Path of the file or folder relative to the `home` directory | + +>[!NOTE] +>For more information about the **extension manifest file**, such as its properties and what they do, check out the [extension manifest reference](./manifest.md). + + +## Step 3: Package your extension + +Once you've written your extension, the next step towards getting it into the marketplace is to package all of your files together. All extensions are packaged +as VSIX 2.0 compatible .vsix files - Microsoft provides a cross-platform command line interface (CLI) to package your extension. + +Packaging your extension into a .vsix file is effortless once you have the [tfx-cli](#cli), simply navigate to your extension's home directory and run the following command. + +```no-highlight +tfx extension create --manifest-globs vss-extension.json +``` +>[!NOTE] +>An extension/integration's version must be incremented on every update.
    +>When updating an existing extension, either update the version in the manifest or pass the `--rev-version` command line switch. This will increment the *patch* version number of your extension and save the new version to your manifest. + + +After you have your packaged extension in a .vsix file, you're ready to publish your extension to the marketplace. + +
    +## Step 4: Publish your extension + +### Create your publisher + +All extensions, including those from Microsoft, are identified as being provided by a publisher. +If you aren't already a member of an existing publisher, you'll create one. + +1. Sign in to the [Visual Studio Marketplace Publishing Portal](http://aka.ms/vsmarketplace-manage) +2. If you are not already a member of an existing publisher, you'll be prompted to create a publisher. If you're not prompted to create a publisher, scroll down to the bottom of the page and select Publish Extensions underneath Related Sites. + * Specify an idenitifer for your publisher, for example: `mycompany-myteam` + * This will be used as the value for the `publisher` attribute in your extensions' manifest file. + * Specify a display name for your publisher, for example: `My Team` +3. Review the [Marketplace Publisher Agreement](http://aka.ms/vsmarketplace-agreement) and click **Create** + +Now your publisher is defined. In a future release, you'll be able to grant permissions to view and manage your publisher's extensions. +This will make it easy (and more secure) for teams and organizations to publish extensions under a common publisher, +but without the need to share a set of credentials across a set of users. + +### Upload your extension + +After creating a publisher, you can now upload your extension to the marketplace. + +1. Find the Upload new extension button, navigate to your packaged .vsix file, and select upload. + +You can also upload your extension via the command line by using the ```tfx extension publish``` command instead of ```tfx extension create``` +to package and publish your extension in one step. +You can optionally use ```--share-with``` to share your extension with one or more accounts after publishing. +You'll need a personal access token, too. + +```no-highlight +tfx extension publish --manifest-globs your-manifest.json --share-with youraccount +``` + +### Share your extension + +Now that you've uploaded your extension, it's in the Marketplace, but no one can see it. +Share it with your account so that you can install and test it. + +1. Right click your extension and select Share..., and enter your account information. You can share it with other accounts that you want to have access to your extension, too. + +>[!IMPORTANT] +>Publishers must be verified in order to share extensions publicly, to learn more visit [Package/Publish/Install](../publish/overview.md) + +Now that your extension is in the marketplace and shared, anyone who wants to use it will have to install it. + + +## Optional: Install and test your extension +Installing an extension that is shared with you is simple and can be done in a few steps: + +1. From your account control panel (`https://{account}.visualstudio.com/_admin`), go to the project collection administraton page. +2. In the Extensions tab, find your extension in the "Extensions Shared With Me" group, click on the extension link. +3. Install the extension! + +If you can't see the Extensions tab, make sure you're in the control panel (the project collection level administration page - `https://{account}.visualstudio.com/_admin`) and not the administration page for a team project. + +If you're on the control panel, and you don't see the Extensions tab, extensions may not be enabled for your account. You can get early access to the extensions feature by joining the Visual Studio Partner Program. + +## Helpful links +* [Extension Manifest Reference](./manifest.md) +* [Build Task JSON Schema](./build-task-schema.md) +* [Build Task Examples](https://github.com/Microsoft/vso-agent-tasks/tree/master/Tasks) + +>[!NOTE] +>Check out our **[Node task sample in GitHub](https://github.com/Microsoft/vsts-task-lib/blob/master/node/docs/stepbystep.md)** for a tutorial that shows +>how to create, debug, and test a cross platform task in Node using the TypeScript API. + diff --git a/docs/extend/develop/add-chart.md b/docs/extend/develop/add-chart.md new file mode 100644 index 00000000000..9da1d2c872e --- /dev/null +++ b/docs/extend/develop/add-chart.md @@ -0,0 +1,351 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Add a chart | Extensions for Visual Studio Team Services +description: Add a chart to your extension in Visual Studio Team Services. +ms.assetid: ff6b9bbf-fb57-469b-8191-922660393a21 +ms.manager: douge +ms.author: rbansal +ms.date: 10/10/2016 +--- + +# Add a chart + +This page demonstrates how you can add charts to your extensions. +Charts can be added to any VSTS extension. Currently, adding charts via extensions is only available for Visual Studio Team Services. + +These charts are easy to create, resizable, intertactive and consistent with the VSTS look and feel. +The following chart types are supported: + +0. Line +0. Bar +0. Column +0. Area +0. Stacked bar +0. Stacked column +0. Stacked area +0. Pie +0. Pivot table +0. Histogram + +> If you're in a hurry and want to get your hands on the code right away, you can download the [complete samples] (https://github.com/Microsoft/vsts-extension-samples). +Once downloaded, go to the `charts` folder, then follow [the packaging and publishing instructions](../publish/overview.md) to publish the sample extension. +The extension contains sample chart widgets. + +## How to organize your code + +For the purposes of this tutorial, we'll be creating a widget and adding a chart to it. +To do so, in the `home` folder for your project, create a `chart.html` file with the following contents: + +### HTML file +```html + + + + + + + +
    +

    Chart Widget

    +
    +
    + + +``` +> Use the **npm install** command to retrieve the SDK: `npm install vss-web-extension-sdk`. To learn more about the SDK, visit the [Client SDK Github Page](https://github.com/Microsoft/vss-sdk). + +Ensure that the `VSS.SDK.js` file is inside the `sdk/scripts` folder so that the path is `home/sdk/scripts/VSS.SDK.js`. + +### Images +Add the following images to an `img` folder in your project directory so that the path is `home/img/logo.png` and `home/img/CatalogIcon.png`: +0. [Extension logo](https://github.com/Microsoft/vsts-extension-samples/blob/master/charts/img/logo.png) +0. [Catalog icon](https://github.com/Microsoft/vsts-extension-samples/blob/master/charts/img/CatalogIcon.png) + +### Extension manifest file +In the `home` folder of your project, create your [extension manifest file](../develop/manifest.md. Create a `vss-extension.json` file with the following contents: + +```json +{ + "manifestVersion": 1, + "id": "samples-charts", + "version": "1.0.0", + "name": "Interactive Charts in VSTS", + "description": "Samples of interactive charts from the Chart SDK.", + "publisher": "Fabrikam", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "icons": { + "default": "img/logo.png" + }, + "demands": ["contribution/ms.vss-dashboards-web.widget-sdk-version-2", "contribution/ms.vss-web.charts-service"], + "contributions": [ + { + "id": "chart", + "type": "ms.vss-dashboards-web.widget", + "targets": [ + "ms.vss-dashboards-web.widget-catalog" + ], + "properties": { + "name": "Sample Chart", + "description": "A simple chart widget with no configuration and hard-coded data.", + "catalogIconUrl": "img/CatalogIcon.png", + "uri": "chart.html", + "supportedSizes": [ + { + "rowSpan": 2, + "columnSpan": 2 + } + ], + "supportedScopes": [ + "project_team" + ] + } + } + ], + "files": [ + { + "path": "chart.html", + "addressable": true + }, + { + "path": "sdk/scripts/VSS.SDK.js", + "addressable": true + }, + { + "path": "img", + "addressable": true + }, + { + "path": "scripts", + "addressable": true + } + ], + "scopes": [ + ] +} + +``` + +Before uploading this extension, you'll need to update the `publisher` to yours. + +Put the following code snippets into a `chart.js` file in a `scripts` folder, so that the path is `home/scripts/chart.js`. +Then follow [the packaging and publishing instructions](../publish/overview.md) to publish your extension. + +## Charts + +### Pie chart + +This sample renders a pie chart. The `data` and `labelValues` have been hardcoded here, and would need to be changed to the data you want to visualize. + +```JavaScript +VSS.init({ + explicitNotifyLoaded: true, + usePlatformStyles: true + }); + +VSS.require([ + "TFS/Dashboards/WidgetHelpers", + "Charts/Services" + ], + function (WidgetHelpers, Services) { + WidgetHelpers.IncludeWidgetStyles(); + VSS.register("PieChart", function () { + return { + load:function() { + return Services.ChartsService.getService().then(function(chartService){ + var $container = $('#Chart-Container'); + var chartOptions = { + "hostOptions": { + "height": "290", + "width": "300" + }, + "chartType": "pie", + "series": [{ + "data": [11, 4, 3, 1] + }], + "xAxis": { + "labelValues": ["Design", "On Deck", "Completed", "Development"] + }, + "specializedOptions": { + "showLabels": "true", + "size": 200 + } + }; + + chartService.createChart($container, chartOptions); + return WidgetHelpers.WidgetStatusHelper.Success(); + }); + } + } + }); + VSS.notifyLoadSucceeded(); +}); +``` + +Here, the chart's size is defined in `hostOptions`. The series property is an array and contains a single object with data in it. The `xAxis` object contains `labelValues` which correspond to the `data`. +For pie charts, we also have some special options that are defined by the `specializedOptions` property. Here, we're explicitly enabling data labels for the pie chart. +We also need to set the size of the pie chart by specifying its outer diameter. + +Rendering the chart requires a container to render it in, the chart options, and a call to the Chart Service to get initialize the chart and render it. + +### Stacked area chart + +This sample renders a stacked area chart.This chart type is ideal for comparing a relationship of parts to a whole and highlighting general trends across categories. It is commonly used to compare trends over time. +This sample also specifies a custom color for one of the series being rendered. + +```JavaScript +VSS.init({ + explicitNotifyLoaded: true, + usePlatformStyles: true + }); + +VSS.require([ + "TFS/Dashboards/WidgetHelpers", + "Charts/Services" + ], + function (WidgetHelpers, Services) { + WidgetHelpers.IncludeWidgetStyles(); + VSS.register("StackedAreaChart", function () { + return { + load:function() { + return Services.ChartsService.getService().then(function(chartService){ + var $container = $('#Chart-Container'); + var chartOptions = { + "hostOptions": { + "height": "290", + "width": "300" + }, + "chartType": "stackedArea", + "series": [ + { + "name": "Completed", + "data": [1,3,4,3,6,1,9,0,8,11] + }, + { + "name": "Development", + "data": [1,1,0,3,0,2,8,9,2,8] + }, + { + "name": "Design", + "data": [0,0,0,6,1,1,9,9,1,9], + "color": "#207752" + }, + { + "name": "On Deck", + "data": [1,2,4,5,4,2,1,7,0,6] + } + ], + "xAxis": { + "labelFormatMode": "dateTime_DayInMonth", + "labelValues": [ + "1/1/2016", + "1/2/2016", + "1/3/2016", + "1/4/2016", + "1/5/2016", + "1/6/2016", + "1/7/2016", + "1/8/2016", + "1/9/2016", + "1/10/2016" + ] + } + } + chartService.createChart($container, chartOptions); + return WidgetHelpers.WidgetStatusHelper.Success(); + }); + } + } + }); + VSS.notifyLoadSucceeded(); +}); +``` + +### Pivot table + +This sample renders a Pivot Table. This chart type helps arrange and summarize complex data in a tabular form. + +```JavaScript +VSS.init({ + explicitNotifyLoaded: true, + usePlatformStyles: true + }); + +VSS.require([ + "TFS/Dashboards/WidgetHelpers", + "Charts/Services" + ], + function (WidgetHelpers, Services) { + WidgetHelpers.IncludeWidgetStyles(); + VSS.register("PivotTable", function () { + return { + load:function() { + return Services.ChartsService.getService().then(function(chartService){ + var $container = $('#Chart-Container'); + var chartOptions = { + "hostOptions": { + "height": "290", + "width": "300" + }, + "chartType": "table", + "xAxis": { + "labelValues": ["Design","In Progress","Resolved","Total"] + }, + "yAxis": { + "labelValues": ["P1","P2","P3","Total"] + }, + "series": [ + { + "name": "Design", + "data": [ + [0,0,1], + [0,1,2], + [0,2,3] + ] + }, + { + "name": "In Progress", + "data": [ + [1,0,4], + [1,1,5], + [1,2,6] + ] + }, + { + "name": "Resolved", + "data": [ + [2,0,7], + [2,1,8], + [2,2,9] + ] + }, + { + "name": "Total", + "data": [ + [3,0,12], + [3,1,15], + [3,2,18], + [0,3,6], + [1,3,15], + [2,3,24], + [3,3,10] + ], + "color": "rgba(255,255,255,0)" + } + ] + } + + chartService.createChart($container, chartOptions); + return WidgetHelpers.WidgetStatusHelper.Success(); + }); + } + } + }); + VSS.notifyLoadSucceeded(); +}); + +``` \ No newline at end of file diff --git a/docs/extend/develop/add-dashboard-widget.md b/docs/extend/develop/add-dashboard-widget.md new file mode 100644 index 00000000000..da7a7efb0ef --- /dev/null +++ b/docs/extend/develop/add-dashboard-widget.md @@ -0,0 +1,1058 @@ +--- +title: Add a dashboard widget | Extensions for Visual Studio Team Services +description: Tutorial for creating a widget that you can then add to a dashboard +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.assetid: 1D393A4A-2D25-479D-972B-304F99B5B1F8 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Add a dashboard widget + +Widgets on a dashboard are implemented as [contributions](./contributions-overview.md) in the [extension framework](../index.md). +A single extension can have multiple contributions. In this guide we will show you how to create an extension with multiple widgets as contributions. + +This guide is divided into three parts, each building on the previous ones. The goal is to start with a simple widget and end with a comprehensive one. + +## Preparation and required setup for this tutorial +In order to create extensions for Team Services, there are some prerequisite software and tools you'll need: + +**Knowledge:** +Some knowledge of JavaScript, HTML, CSS is required for widget development. + +- A **VSTS account** for installing and testing your widget, more information can be found [here](https://www.visualstudio.com/en-us/products/visual-studio-team-services-vs.aspx) +- **A text editor**. For many of the tutorials we used `Visual Studio Code`, which can be downloaded [here](https://code.visualstudio.com/) +- The latest version of **node**, which can be downloaded [here](https://nodejs.org/en/download/) +- **TFS Cross Platform Command Line Interface (tfx-cli)** to package your extensions. + - **tfx-cli** can be installed using `npm`, a component of Node.js by running `npm i -g tfx-cli` +- A home directory for your project. This directory will be referred to as `home` throughout the tutorial. + +**Extension File Structure:** +```no-highlight +├── README.md +├── sdk + ├── node_modules + └── scripts + └── VSS.SDK.min.js +├── img + └── logo.png +├── scripts +├── hello-world.html // html page to be used for your widget +└── vss-extension.json // extension's manifest +``` + +## What you'll find in the tutorial +1. The first part of this guide shows you how to create a new widget which prints a simple "Hello World" message. +2. The [second part](#part-2) builds on the first one by adding a call to a VSTS REST API. +3. The [third part](#part-3) explains how to add configuration to your widget. + +> If you're in a hurry and want to get your hands on the code right away, you can download the complete samples [here](https://github.com/Microsoft/vsts-extension-samples/tree/master/widgets). +> Once downloaded, go to the `widgets` folder, then follow [Step 6](#package-publish-share) and [Step 7](#add-from-catalog) directly to publish the sample extension which has the three sample widgets of varying complexities. + +Get started with some [basic styles for widgets](./styles-from-widget-sdk.md) that we provide out of the box for you and some guidance on widget structure. + +## Part 1: Hello World +This part presents a widget that prints "Hello World" using JavaScript. + +![Overview dashboard in with a sample widget](../_shared/procedures/_img/add-dashboard-widget/sample.png) + +
    + +### Step 1: Get the client SDK - `VSS.SDK.min.js` +The core SDK script, `VSS.SDK.min.js`, enables web extensions to communicate to the host Team Services frame and to perform operations like initializing, notifying extension is loaded or getting context about the current page. +Get the Client SDK `VSS.SDK.min.js` file and add it to your web app. Place it in the `home/sdk/scripts` folder. + +Use the 'npm install' command to retrieve the SDK: + +```no-highlight +npm install vss-web-extension-sdk +``` + +>To learn more about the SDK, visit the [Client SDK Github Page](https://github.com/Microsoft/vss-sdk). + +### Step 2: Your HTML page - `hello-world.html` +This is the glue that holds your layout together and includes references to CSS and JavaScript. +You can name this file anything, just be sure to update all references to `hello-world` with the name you use. + +Your widget is HTML based and will be hosted in an [iframe](https://msdn.microsoft.com/en-us/library/windows/apps/hh465955.aspx). +Add the below HTML in `hello-world.html`. We add the mandatory reference to `VSS.SDK.min.js` file and include an `h2` element in the `body` which will be updated with the string Hello World in the upcoming step. + +```html + + + + + + +
    +

    +
    + + +``` + +> Even though we are using an HTML file, most of the HTML head elements other than script and link will be ignored by the framework. + +
    +### Step 3: Your JavaScript +We use JavaScript to render content in the widget. In this guide we wrap all of our JavaScript code inside a ` +``` + + + +`VSS.init` initializes the handshake between the iframe hosting the widget and the host frame.. +We pass `explicitNotifyLoaded: true` so that the widget can explicitly notify the host when we are done loading. This control allows us to notify load completion after ensuring that the dependent modules are loaded. +We pass `usePlatformStyles: true` so that the VSTS core styles for html elements (such as body, div etc) can be used by the Widget. If the widget prefers to not use these styles, they can pass in `usePlatformStyles: false`. + +`VSS.require` is used to load the required VSS script libraries. A call to this method automatically loads general libraries like [JQuery](https://jquery.com/) and [JQueryUI](https://jqueryui.com/). +In our case we depend on the WidgetHelpers library which is used to communicate widget status to the widget framework. +Therefore, we pass the corresponding module name `TFS/Dashboards/WidgetHelpers` and a callback to `VSS.require`. +The callback is called once the module is loaded. +This callback will have the rest of the JavaScript code needed for the widget. At the end of the callback we call `VSS.notifyLoadSucceeded` to notify load completion. + +`WidgetHelpers.IncludeWidgetStyles` will include a stylesheet with some [basic css](./styles-from-widget-sdk.md) to get you started. Make sure to wrap your content inside a HTML element with class `widget` to make use of these styles. + +`VSS.register` is used to map a function in javascript which uniquely identifies the widget among the different contributions in your extension. The name should match the `id` that identifies your contribution as described in [Step 5](#widget-extension-manifest). For widgets, the function that is passed to `VSS.register` should return an object that satisfies the `IWidget` contract, +i.e. the returned object should have a load property whose value is another function that will have the core logic to render the widget. +In our case, it is simply to update the text of the `h2` element to "Hello World". +It is this function that is called when the widget framework instantiates your widget. +We use the `WidgetStatusHelper` from WidgetHelpers to return the `WidgetStatus` as success. + +
    + Warning: If this name used to register the widget doesn't match the ID for the contribution in the manifest, then the widget will behave unexpectedly. +
    + +> The `vss-extension.json` should always be at the root of the folder (in this guide, `HelloWorld`). For all the other files, you can place them in whatever structure you want inside the folder, just make sure to update the references appropriately in the HTML files and in the `vss-extension.json` manifest. + + +### Step 4: Your extension's logo: `logo.png` +Your logo is displayed in the Marketplace, and in the widget catalog once a user installs your extension. + +You will need a 98px x 98px catalog icon. Choose an image, name it `logo.png`, and place it in the `img` folder. + +To support TFS 2015 Update 3, you will need an additional image that is 330px x 160px. This is a preview image shown in this catalog. Choose an image, name it `preview.png`, and place it in the `img` folder as before. + +You can name these images however you want as long as the extension manifest in the next step is updated with the names you use. + + +### Step 5: Your extension's manifest: `vss-extension.json` + +* ***Every*** extension must have an extension manifest file +* Please read the [extension manifest reference](./manifest.md) +* Find out more about the contribution points in the [extension points reference](../reference/targets/overview.md) + +Create a json file (`vss-extension.json`, for example) in the `home` directory with the following contents: + +```json + { + "manifestVersion": 1, + "id": "vsts-extensions-myExtensions", + "version": "1.0.0", + "name": "My First Set of Widgets", + "description": "Samples containing different widgets extending dashboards", + "publisher": "fabrikam", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "icons": { + "default": "img/logo.png" + }, + "contributions": [ + { + "id": "HelloWorldWidget", + "type": "ms.vss-dashboards-web.widget", + "targets": [ + "ms.vss-dashboards-web.widget-catalog" + ], + "properties": { + "name": "Hello World Widget", + "description": "My first widget", + "catalogIconUrl:": "img/CatalogIcon.png", + "previewImageUrl": "img/preview.png", + "uri": "hello-world.html", + "supportedSizes": [ + { + "rowSpan": 1, + "columnSpan": 2 + } + ], + "supportedScopes": ["project_team"] + } + } + ], + "files": [ + { + "path": "hello-world.html", "addressable": true + }, + { + "path": "sdk/scripts", "addressable": true + }, + { + "path": "img", "addressable": true + } + ] + } +``` + +>[!NOTE] +>The **publisher** here will need to be changed to your publisher name. To create a publisher now, visit [Package/Publish/Install](../publish/overview.md). + +#### Icons +The **icons** stanza specifies the path to your extension's icon in your manifest. + +#### Contributions +Each contribution entry defines [certain properties](./manifest.md#contributions). + +- The **id** to identify your contribution. This should be unique within an extension. This ID should match with the name you used in [Step 3](#widget-javascript) to register your widget. +- The **type** of contribution. For all widgets, this should be `ms.vss-dashboards-web.widget`. +- The array of **targets** to which the contribution is contributing. For all widgets, this should be `[ms.vss-dashboards-web.widget-catalog]`. +- The **properties** is an object that includes properties for the contribution type. For widgets, the below properties are mandatory. + +| Property | Description +|--------------------|-----------------------------------------------------------------------------------------------------------------| +| name | Name of the widget to display in the widget catalog. | +| description | Description of the widget to display in the widget catalog. | +| catalogIconUrl | Relative path of the catalog icon that you added in [Step 4](#image) to display in the widget catalog. The image should be 98px x 98px. If you have used a different folder structure or a different file name, then this is the place to specify the appropriate relative path. | +| previewImageUrl | Relative path of the preview image that you added in [Step 4](#image) to display in the widget catalog for TFS 2015 Update 3 only. The image should be 330px x 160px. If you have used a different folder structure or a different file name, then this is the place to specify the appropriate relative path. | +| uri | Relative path of the HTML file that you added in [Step 1](#step-1-files). If you have used a different folder structure or a different file name, then this is the place to specify the appropriate relative path. | +| supportedSizes | Array of sizes supported by your widget. When a widget supports multiple sizes, the first size in the array is the default size of the widget. The `widget size` is specified in terms of the rows and columns occupied by the widget in the dashboard grid. One row/column corresponds to 160px. Any dimension above 1x1 will get an additional 10px that represent the gutter between widgets. For example, a 3x2 widget will be `160*3+10*2` wide and `160*2+10*1` tall. The maximum supported size is `4x4`. | +| supportedScopes | At the moment we support only team dashboards. Therefore, the value here has to be `project_team`. In the future when we support other dashboard scopes, there will be more options to choose from here. | + + +#### Files +The **files** stanza states the files that you want to include in your package - your HTML page, your scripts, the SDK script and your logo. +Set `addressable` to `true` unless you include other files that don't need to be URL-addressable. + +>[!NOTE] +>For more information about the **extension manifest file**, such as its properties and what they do, check out the [extension manifest reference](./manifest.md). + + +### Step 6: Package, Publish and Share + +Once you've written your extension, the next step towards getting it into the marketplace is to package all of your files together. All extensions are packaged +as VSIX 2.0 compatible .vsix files - Microsoft provides a cross-platform command line interface (CLI) to package your extension. + +#### Get the packaging tool +You can install or update the TFS Cross Platform Command Line Interface (tfx-cli) using `npm`, a component of [Node.js](http://nodejs.org), from your command line. + +```no-highlight +npm i -g tfx-cli +``` + +#### Package your extension +Packaging your extension into a .vsix file is effortless once you have the tfx-cli, simply navigate to your extension's home directory and run the following command. + +```no-highlight +tfx extension create --manifest-globs vss-extension.json +``` + +>[!NOTE] +>An extension/integration's version must be incremented on every update.
    +>When updating an existing extension, either update the version in the manifest or pass the `--rev-version` command line switch. This will increment the *patch* version number of your extension and save the new version to your manifest. + +After you have your packaged extension in a .vsix file, you're ready to publish your extension to the marketplace. + +#### Create publisher for the extension +All extensions, including those from Microsoft, are identified as being provided by a publisher. +If you aren't already a member of an existing publisher, you'll create one. + +1. Sign in to the [Visual Studio Marketplace Publishing Portal](http://aka.ms/vsmarketplace-manage) +2. If you are not already a member of an existing publisher, you'll be prompted to create a publisher. If you're not prompted to create a publisher, scroll down to the bottom of the page and select Publish Extensions underneath Related Sites. + * Specify an identifier for your publisher, for example: `mycompany-myteam` + * This will be used as the value for the `publisher` attribute in your extensions' manifest file. + * Specify a display name for your publisher, for example: `My Team` +3. Review the [Marketplace Publisher Agreement](http://aka.ms/vsmarketplace-agreement) and click **Create** + +Now your publisher is defined. In a future release, you'll be able to grant permissions to view and manage your publisher's extensions. +This will make it easy (and more secure) for teams and organizations to publish extensions under a common publisher, +but without the need to share a set of credentials across a set of users. + +**You need to update the `vss-extension.json` manifest file in the samples to replace the dummy publisher ID `fabrikam` with your publisher ID.** + +#### Publish and share the extension +After creating a publisher, you can now upload your extension to the marketplace. + +1. Find the Upload new extension button, navigate to your packaged .vsix file, and select upload. + +You can also upload your extension via the command line by using the ```tfx extension publish``` command instead of ```tfx extension create``` +to package and publish your extension in one step. +You can optionally use ```--share-with``` to share your extension with one or more accounts after publishing. +You'll need a personal access token, too. + +```no-highlight +tfx extension publish --manifest-globs your-manifest.json --share-with youraccount +``` + +
    + +### Step 7: Add Widget From the Catalog +Now, go to your team dashboard at http://yourAccount.visualstudio.com/DefaultCollection/yourProject. If this page is already open, then refresh it. +Hover on the Edit button in the bottom right, and click on the Add button. This should open the widget catalog where you will find the widget you just installed. +Choose your widget and click the 'Add' button to add it to your dashboard. + + + + +## Part 2: Hello World with VSTS REST API +Widgets can call any of the [REST APIs](https://visualstudio.com/integrate/api/overview.md) in VSTS to interact with VSTS resources. +In this example, we use the REST API for WorkItemTracking to fetch information about an existing query and display some query info in the widget right +below the "Hello World" text. + +![Overview dashboard in with a sample widget](../_shared/procedures/_img/add-dashboard-widget/sample2.png) + +### Step 1: HTML +Copy the file `hello-world.html` from the previous example, and rename the copy to `hello-world2.html`. Your folder will now look like below: + +```no-highlight +├── README.md +├── sdk + ├── node_modules + └── scripts + └── VSS.SDK.min.js +├── img + └── logo.png +├── scripts +├── hello-world.html // html page to be used for your widget +├── hello-world2.html // renamed copy of hello-world.html +└── vss-extension.json // extension's manifest +``` + +
    +Add a new `div` element right below the `h2` to hold the query information. +Update the name of the widget from `HelloWorldWidget` to `HelloWorldWidget2` in the line where you call `VSS.register`. +This will allow the framework to uniquely identify the widget within the extension. + +```html + + + + + + + +
    +

    +
    +
    + + +``` + +### Step 2: Access Team Services Resources +To enable access to Team Services resources, [scopes](./manifest.md#scopes) need to be specified in the extension manifest. We will add the `vso.work` scope to our manifest. +This scope indicates the widget needs read-only access to queries and workitems. See all available scopes [here](./manifest.md#scopes). +Add the below at the end of your extension manifest. + +```json +{ + ..., + "scopes":[ + "vso.work" + ] +} +``` + +
    + Warning: Adding or changing scopes after an extension is published is currently not supported. If you have already uploaded your extension, you need remove it from the marketplace. + Go to [Visual Studio Marketplace Publishing Portal](http://aka.ms/vsmarketplace-manage), right-click on your extension and select "Remove". +
    + + +### Step 3: Make the REST API Call + +There are many client-side libraries that can be accessed via the SDK to make REST API calls in VSTS. +These are called REST clients and are JavaScript wrappers around Ajax calls for all available server side endpoints. +You can use methods provided by these clients instead of writing Ajax calls yourself. These methods map the API responses to objects that can be consumed by your code. + +In this step, we will update the `VSS.require` call to load `TFS/WorkItemTracking/RestClient` which will provide the WorkItemTracking REST client. +We can use this REST client to get information about a query called `Feedback` under the folder `Shared Queries`. + +Inside the function that we pass to `VSS.register`, we will create a variable to hold the current project ID. We need this to fetch the query. +We will also create a new method `getQueryInfo` to use the REST client. This method that is then called from the load method. + +The method `getClient` will give an instance of the REST client we need. +The method `getQuery` returns the query wrapped in a promise. +The updated `VSS.require` will look as follows: + +```JavaScript +VSS.require(["TFS/Dashboards/WidgetHelpers", "TFS/WorkItemTracking/RestClient"], + function (WidgetHelpers, TFS_Wit_WebApi) { + WidgetHelpers.IncludeWidgetStyles(); + VSS.register("HelloWorldWidget2", function () { + var projectId = VSS.getWebContext().project.id; + + var getQueryInfo = function (widgetSettings) { + // Get a WIT client to make REST calls to VSTS + return TFS_Wit_WebApi.getClient().getQuery(projectId, "Shared Queries/Feedback") + .then(function (query) { + // Do something with the query + + return WidgetHelpers.WidgetStatusHelper.Success(); + }, function (error) { + return WidgetHelpers.WidgetStatusHelper.Failure(error.message); + }); + } + + return { + load: function (widgetSettings) { + // Set your title + var $title = $('h2.title'); + $title.text('Hello World'); + + return getQueryInfo(widgetSettings); + } + } + }); + VSS.notifyLoadSucceeded(); + }); +``` +Notice the use of the Failure method from `WidgetStatusHelper`. +It allows you to indicate to the widget framework that an error has occurred and take advantage to the standard error experience provided to all widgets. + +> If you do not have the `Feedback` query under the `Shared Queries` folder, then replace `Shared Queries\Feedback` in the code with the path of a query that exists in your project. + +### Step 4: Display the Response + +The last step is to render the query information inside the widget. +The `getQuery` function returns an object of type `Contracts.QueryHierarchyItem` inside a promise. +In this example, we will display the query ID, the query name, and the name of the query creator under the "Hello World" text. +Replace the `// Do something with the query` comment with the below: + +```JavaScript + // Create a list with query details + var $list = $('
      '); + $list.append($('
    • ').text("Query Id: " + query.id)); + $list.append($('
    • ').text("Query Name: " + query.name)); + $list.append($('
    • ').text("Created By: " + ( query.createdBy? query.createdBy.displayName: "" ) ) ); + + // Append the list to the query-info-container + var $container = $('#query-info-container'); + $container.empty(); + $container.append($list); +``` + +Your final `hello-world2.html` will be as follows: + +```html + + + + + + + + +
      +

      +
      +
      + + +``` + +
      + +### Step 5: Extension Manifest Updates + +In this step we will update the extension manifest to include an entry for our second widget. +Add a new contribution to the array in the `contributions` property and add the new file `hello-world2.html` to the array in the files property. +You will need another preview image for the second widget. Name this `preview2.png` and place it in the `img` folder. + +```json + { + ..., + "contributions":[ + ..., + { + "id": "HelloWorldWidget2", + "type": "ms.vss-dashboards-web.widget", + "targets": [ + "ms.vss-dashboards-web.widget-catalog" + ], + "properties": { + "name": "Hello World Widget 2 (with API)", + "description": "My second widget", + "previewImageUrl": "img/preview2.png", + "uri": "hello-world2.html", + "supportedSizes": [ + { + "rowSpan": 1, + "columnSpan": 2 + } + ], + "supportedScopes": ["project_team"] + } + } + + ], + "files": [ + { + "path": "hello-world.html", "addressable": true + }, + { + "path": "hello-world2.html", "addressable": true + }, + { + "path": "sdk/scripts", "addressable": true + }, + { + "path": "img", "addressable": true + } + ], + "scopes":[ + "vso.work" + ] + } + ``` + +### Step 6: Package, Publish and Share + +If you have not published your extension yet, then read [this](#package-publish-share) to package, publish and share your extension. +If you have already published the extension before this point, you can repackage the extension as described [here](#package-the-extension) and directly [update it](../publish/overview.md#update) to the marketplace. + + +### Step 7: Add Widget From the Catalog +Now, go to your team dashboard at http://yourAccount.visualstudio.com/DefaultCollection/yourProject. If this page is already open, then refresh it. +Hover on the Edit button in the bottom right, and click on the Add button. This should open the widget catalog where you will find the widget you just installed. +Choose your widget and click the 'Add' button to add it to your dashboard. + + + +## Part 3: Hello World with Configuration + +In [Part 2](#part-2) of this guide, you saw how to create a widget that shows query information for a hard-coded query. +In this part, we add the ability to configure the query to be used instead of the hard-coded one. +When in configuration mode, the user will get to see a live preview of the widget based on their changes. These changes get saved to the widget on the dashboard when the user clicks the Save button. + +![Overview dashboard in with a sample widget](../_shared/procedures/_img/add-dashboard-widget/sampleConfiguration.png) + +### Step 1: HTML + +Implementations of Widgets and Widget Configurations are a lot alike. Both are implemented in the extension framework as contributions. Both use the same SDK file, `VSS.SDK.min.js`. Both are based on HTML as well as JavaScript and CSS. + +Copy the file `html-world2.html` from the previous example and rename the copy to `hello-world3.html`. Add another HTML file called `configuration.html`. +Your folder will now look like the below: + +```no-highlight +├── README.md +├── sdk + ├── node_modules + └── scripts + └── VSS.SDK.min.js +├── img + └── logo.png +├── scripts +├── configuration.html +├── hello-world.html // html page to be used for your widget +├── hello-world2.html // renamed copy of hello-world.html +├── hello-world3.html // renamed copy of hello-world2.html +└── vss-extension.json // extension's manifest +``` + +
      +Add the below HTML in `configuration.html`. We basically add the mandatory reference to the `VSS.SDK.min.js` file and a `select` element for the dropdown to select a query from a preset list. + +```html + + + + + + +
      +
      + + +
      +
      + + +``` +
      + +### Step 2: JavaScript - Configuration + +We use Javascript to render content in the widget configuration just like we did for the widget in [Step 3](#widget-javascript) of Part 1 in this guide. +Apart from the logic to render the content, this Javascript code will initialize the VSS SDK, map the code for your widget configuration to the configuration name +and pass the configuration settings to the framework. In our case, below is the code that loads the widget configuration. +Open the file `configuration.html` and the below ` +``` + +`VSS.init`, `VSS.require` and `VSS.register` play the same role as they played for the widget as described in [Part 1](#vss-methods). +The only difference is that for widget configurations, the function that is passed to `VSS.register` should return an object that satisfies the `IWidgetConfiguration` contract. + +The `load` property of the `IWidgetConfiguration` contract should have a function as its value. +This function will have the set of steps to render the widget configuration. +In our case it is simply to update the selected value of the dropdown element with existing settings if any. +It is this function that is called when the framework instantiates your `widget configuration` + +The `onSave` property of the `IWidgetConfiguration` contract should have a function as its value. +This is the function that is called by the framework when user clicks the "Save" button in the configuration pane. +If the user input is ready to save, then serialize it to a string, form the `custom settings` object +and use `WidgetConfigurationSave.Valid()` to save the user input.. + +In this guide we use JSON to serialize the user input into a string. You can choose any other way to serialize the user input to string. +It will be accessible to the widget via the customSettings property of the `WidgetSettings` object. +The widget will then have to deserialize this which is covered in [Step 4](#reload-widget). + + + +### Step 3: JavaScript - Enable Live Preview + +To enable live preview update when the user selects a query from the dropdown, we attach a change event handler to the button. This handler will notify the framework that the configuration has changed. +It will also pass the `customSettings` to be used for updating the preview. To notify the framework, the `notify` method on the `widgetConfigurationContext` needs to be called. It takes two parameters, the name of the +event, which in this case is `WidgetHelpers.WidgetEvent.ConfigurationChange`, and an `EventArgs` object for the event, created from the `customSettings` with the help of `WidgetEvent.Args` helper method. + +Add the below in the function assigned to the `load` property. + +```JavaScript + $queryDropdown.on("change", function () { + var customSettings = { + data: JSON.stringify({ + queryPath: $queryDropdown.val() + }) + }; + var eventName = WidgetHelpers.WidgetEvent.ConfigurationChange; + var eventArgs = WidgetHelpers.WidgetEvent.Args(customSettings); + widgetConfigurationContext.notify(eventName, eventArgs); + }); +``` + +> You need to notify the framework of configuration change at least once so that the "Save" button can be enabled. + +At the end, your `configuration.html` looks like this: + + +```html + + + + + + + +
      +
      + + +
      +
      + + +``` +
      + +### Step 4: JavaScript - Implement Reload in The Widget + +Till this point what we have done is set up widget configuration to store the query path selected by the user. +We now have to update the code in the widget to use this stored configuration instead of the hard-coded `Shared Queries/Feedback` from the previous example. + +Open the file `hello-world3.html` and update the name of the widget from `HelloWorldWidget2` to `HelloWorldWidget3` in the line where you call `VSS.register`. +This will allow the framework to uniquely identify the widget within the extension. + +The function mapped to `HelloWorldWidget3` via `VSS.register` currently returns an object that satisfies the `IWidget` contract. +Since our widget now needs configuration, this function needs to be updated to return an object that satisfies the `IConfigurableWidget` contract. +To do this, update the return statement to include a property called reload as below. The value for this property will be a function that calls the `getQueryInfo` method one more time. +This reload method gets called by the framework everytime the user input changes to show the live preview. This is also called when the configuration is saved. + +```JavaScript +return { + load: function (widgetSettings) { + // Set your title + var $title = $('h2.title'); + $title.text('Hello World'); + + return getQueryInfo(widgetSettings); + }, + reload: function (widgetSettings) { + return getQueryInfo(widgetSettings); + } +} +``` + +
      +The hard-coded query path in `getQueryInfo` should be replaced with the configured query path which can be extracted from the parameter `widgetSettings` that is passed to the method. +Add the below in the very beginning of the `getQueryInfo` method and replace the hard-coded querypath with `settings.queryPath`. + +```JavaScript +var settings = JSON.parse(widgetSettings.customSettings.data); +if (!settings || !settings.queryPath) { + var $container = $('#query-info-container'); + $container.empty(); + $container.text("Sorry nothing to show, please configure a query path."); + + return WidgetHelpers.WidgetStatusHelper.Success(); +} +``` +At this point, your widget is ready to render with the configured settings. + +> You will notice that both the `load` and the `reload` properties have a similar function. This would be the case for most simple widgets. +For complex widgets, there would be certain operations that you would want to run just once no matter how many times the configuration changes. +Or there might be some heavy-weight operations that need not run more than once. Such operations would be part of the function corresponding to the `load` property and not the `reload` property. + + +### Step 5: Extension Manifest Updates +Open the `vss-extension.json` file to include two new entries to the array in the `contributions` property. One for the `HelloWorldWidget3` widget and the other for its configuration. +You will need yet another preview image for the third widget. Name this `preview3.png` and place it in the `img` folder. +Update the array in the `files` property to include the two new HTML files we have added in this example. + +```json +{ + ... + "contributions": [ + ... , + { + "id": "HelloWorldWidget3", + "type": "ms.vss-dashboards-web.widget", + "targets": [ + "ms.vss-dashboards-web.widget-catalog", + "fabrikam.vsts-extensions-myExtensions.HelloWorldWidget.Configuration" + ], + "properties": { + "name": "Hello World Widget 3 (with config)", + "description": "My third widget", + "previewImageUrl": "img/preview3.png", + "uri": "hello-world3.html", + "supportedSizes": [ + { + "rowSpan": 1, + "columnSpan": 2 + } + ], + "supportedScopes": ["project_team"] + } + }, + { + "id": "HelloWorldWidget.Configuration", + "type": "ms.vss-dashboards-web.widget-configuration", + "targets": [ "ms.vss-dashboards-web.widget-configuration" ], + "properties": { + "name": "HelloWorldWidget Configuration", + "description": "Configures HelloWorldWidget", + "uri": "configuration.html" + } + } + ], + "files": [ + { + "path": "hello-world.html", "addressable": true + }, + { + "path": "hello-world2.html", "addressable": true + }, + { + "path": "hello-world3.html", "addressable": true + }, + { + "path": "configuration.html", "addressable": true + }, + { + "path": "sdk/scripts", "addressable": true + }, + { + "path": "img", "addressable": true + } + ], + ... +} +``` + +
      +Note that the contribution for widget configuration follows a slightly different model than the widget itself. +A contribution entry for widget configuration has: + +- The **id** to identify your contribution. This should be unique within an extension. +- The **type** of contribution. For all widget configurations, this should be `ms.vss-dashboards-web.widget-configuration` +- The array of **targets** to which the contribution is contributing. For all widget configurations, this will have a single entry: `ms.vss-dashboards-web.widget-configuration`. +- The **properties** that contains a set of properties which includes name, description, and the URI of the HTML file used for configuration. + +To support configuration, the widget contribution needs to be changed as well. The array of **targets** for the widget needs to be updated to include the ID for the configuration in the form +<`publisher`>.<`id for the extension`>.<`id for the configuration contribution`> which in this case will be `fabrikam.vsts-extensions-myExtensions.HelloWorldWidget.Configuration` + +
      + Warning: If the contribution entry for your configurable widget does not target the + configuration using the right publisher and extension name as described above, then configure button will not show up for the widget. +
      + +At the end of this part, the manifest file should contains three widgets and one configuration. You can get the complete manifest from the sample [here](https://github.com/Microsoft/vso-extension-samples/blob/master/widgets/vss-extension.json). + +### Step 6: Package, Publish and Share +If you have not published your extension yet, then read [this](#package-publish-share) to package, publish and share your extension. +If you have already published the extension before this point, you can repackage the extension as described [here](#package-the-extension) and directly [update it](../publish/overview.md#update) to the marketplace. + +### Step 7: Add Widget From the Catalog +Now, go to your team dashboard at http://yourAccount.visualstudio.com/DefaultCollection/yourProject. If this page is already open, refresh it. +Hover on the Edit button in the bottom right, and click on the Add button. This should open the widget catalog where you will find the widget you just installed. +Choose your widget and click the 'Add' button to add it to your dashboard. + +You would see a message asking you to configure the widget. + +![Overview dashboard in with a sample widget](../_shared/procedures/_img/add-dashboard-widget/sampleWidgetWithNoSettings.png) + +There are 2 ways to configure widgets. One is to hover on the widget, click on the ellipsis that appears on the top right corner and then click Configure. +The other is to click on the Edit button in the bottom right of the dashboard, and then click the configure button that appears on the top right corner of the widget. +Either will open the configuration experience on the right side, and a preview of your widget in the center. +Go ahead and choose a query from the dropdown. +The live preview will show the updated results. +Click on "Save" and your widget will display the updated results. + + +### Step 8: Configure More (optional) +You can add as many HTML form elements as you need in the `configuration.html` for additional configuration. +There are two configurable features that are available out of the box: widget name and widget size. + +By default, the name that you provide for your widget in the extension manifest is stored as the widget name for every instance of your widget that ever gets added to a dashboard. +You can allow users to configure this, so that they can add any name they want to their instance of your widget. +To allow such configuration, add `isNameConfigurable:true` in the properties section for your widget in the extension manifest. + +If you provide more than one entry for your widget in the `supportedSizes` array in the extension manifest, then users can configure the widget's size as well. + +The extension manifest for the third sample in this guide would look like the below if we enable the widget name and size configuration: +```json +{ + ... + "contributions": [ + ... , + { + "id": "HelloWorldWidget3", + "type": "ms.vss-dashboards-web.widget", + "targets": [ + "ms.vss-dashboards-web.widget-catalog", "fabrikam.vsts-extensions-myExtensions.HelloWorldWidget.Configuration" + ], + "properties": { + "name": "Hello World Widget 3 (with config)", + "description": "My third widget", + "previewImageUrl": "img/preview3.png", + "uri": "hello-world3.html", + "isNameConfigurable": true, + "supportedSizes": [ + { + "rowSpan": 1, + "columnSpan": 2 + }, + { + "rowSpan": 2, + "columnSpan": 2 + } + ], + "supportedScopes": ["project_team"] + } + }, + ... +} +``` + +With the above change, [repackage](#package-the-extension) and [update](../publish/overview.md#update) your extension. Refresh the dashboard that has this widget (Hello World Widget 3 (with config)). +Open the configuration mode for your widget, you should now be able to see the option to change the widget name and size. + +![Widget where name and size can be configured](../_shared/procedures/_img/add-dashboard-widget/sampleConfigureNameAndSize.png) + +Go ahead and choose a different size from the drop down. You will see the live preview get resized. Save the change and the widget on the dashboard will be resized as well. + +
      + Warning: If you remove an already supported size, then the widget will fail to load properly. We are working on a fix for a future release. +
      + +You will notice that changing the name of the widget does not result in any visible change in the widget. +This is because our sample widgets do not display the widget name anywhere. Let us modify the sample code to display the widget name instead of the hard-coded text "Hello World". + +To do this, replace the hard-coded text "Hello World" with `widgetSettings.name` in the line where we set the text of the `h2` element. +This will ensure that the widget name gets displayed every time the widget gets loaded on page refresh. +Since we want the live preview to be updated everytime the configuration changes, we should add the same code in the `reload` part of our code as well. +The final return statement in `hello-world3.html` will be as follows: + +```JavaScript +return { + load: function (widgetSettings) { + // Set your title + var $title = $('h2.title'); + $title.text(widgetSettings.name); + + return getQueryInfo(widgetSettings); + }, + reload: function (widgetSettings) { + // Set your title + var $title = $('h2.title'); + $title.text(widgetSettings.name); + + return getQueryInfo(widgetSettings); + } +} +``` + +[Repackage](#package-the-extension) and [update](../publish/overview.md#update) your extension again. Refresh the dashboard that has this widget. Any changes to the widget name in the configuration mode will update the widget title now. + diff --git a/docs/extend/develop/add-hub-group.md b/docs/extend/develop/add-hub-group.md new file mode 100644 index 00000000000..60676ef0226 --- /dev/null +++ b/docs/extend/develop/add-hub-group.md @@ -0,0 +1,56 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Add a Hub Group | Extensions for Visual Studio Team Services +description: Add a hub group in VSTS for your extension. +ms.assetid: 8186f578-27a0-4130-ace0-0279c863b1a5 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Add a hub group + +We'll create a hub group and add hub to it. +If you haven't already, [create the Hello hub](./add-hub.md) first, +then follow these steps to create the hub group. + +[!INCLUDE [Hub_group](../_shared/procedures/create-hub-group.md)] + +Here's the complete extension manifest with Hello in the samples hub group. + + ``` + { + "namespace": "Fabrikam.myextension", + "name": "My Extension", + "description": "This is my first extension", + "version": "1.0", + "provider": { + "name": "Fabrikam Fiber Inc" + }, + "baseUri": "https://localhost:port", + "icon": "images/logo.png", + "links": { + "info": "info.html", + "support": "support.html", + "termsOfService": "terms-of-service.html" + }, + "contributions": { + "vss.web#hubGroups.project": [ + { + "id": "samples", + "name": "Samples", + "order": 30 + } + ], + "vss.web#hubs": [ + { + "id": "myhub", + "name": "Hello", + "groupId": "samples", + "uri": "hello-world.html" + } + ] + } + } + ``` \ No newline at end of file diff --git a/docs/extend/develop/add-hub.md b/docs/extend/develop/add-hub.md new file mode 100644 index 00000000000..780ae9800a8 --- /dev/null +++ b/docs/extend/develop/add-hub.md @@ -0,0 +1,174 @@ +--- +title: Add a Hub | Extensions for Visual Studio Team Services +description: Extend VSTS with your own hub. +ms.assetid: 0d06c2d8-402f-4373-a2d3-2513ae278443 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/23/2016 +--- + +# Add a hub + +We'll create a new hub that displays in the Work hub group, after the Backlogs and Queries hubs. + +![Location of a new hub in Visual Studio Team Services](../_shared/procedures/_img/hub-location.png) + +## Structure of an extension +```no-highlight +├── README.md +├── sdk + ├── node_modules + └── scripts + └── VSS.SDK.js +├── images + └── icon.png +├── scripts // not used in this tutorial +├── hello-world.html // html page to be used for your hub +└── vss-extension.json // extension's manifest +``` +## Get the client SDK: `VSS.SDK.js` +The core SDK script, VSS.SDK.js, enables web extensions to communicate to the host Team Services frame and to perform operations like +initializing, notifying extension is loaded or getting context about the current page. Get the Client SDK `VSS.SDK.js` file and add it to your web app. +Place it in the `home/sdk/scripts` folder. + +Use the 'npm install' command via the command line (requires [Node](https://nodejs.org/en/download/)) to retrieve the SDK: + +```no-highlight +npm install vss-web-extension-sdk +``` + +> To learn more about the SDK, visit the [Client SDK Github Page](https://github.com/Microsoft/vss-sdk). + +## Your hub page: `hello-world.html` +* Every hub displays a web page +* Check out the targetable hub groups in the [extension points reference](../reference/targets/overview.md#hubs) + +Create a `hello-world.html` file in the `home` directory of your extension. +Reference the SDK and call *init()* and *notifyLoadSucceeded()*. + +```html + + + + Hello World + + + + +

      Hello World

      + + + +``` + +## Your extension's manifest file: `vss-extension.json` + +* ***Every*** extension must have an extension manifest file +* Please read the [extension manifest reference](../develop/manifest.md) +* Find out more about the contribution points in the [extension points reference](../reference/targets/overview.md) + +Create a json file (`vss-extension.json`, for example) in the `home` directory with the following contents: + +```json + { + "manifestVersion": 1, + "id": "sample-extension", + "version": "0.1.0", + "name": "My first sample extension", + "description": "A sample Visual Studio Services extension.", + "publisher": "fabrikamdev", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "icons": { + "default": "images/logo.png" + }, + "contributions": [ + { + "id": "Fabrikam.HelloWorld", + "type": "ms.vss-web.hub", + "description": "Adds a 'Hello' hub to the Work hub group.", + "targets": [ + "ms.vss-work-web.work-hub-group" + ], + "properties": { + "name": "Hello", + "order": 99, + "uri": "hello-world.html" + } + } + ], + "scopes": [ + "vso.work" + ], + "files": [ + { + "path": "hello-world.html", "addressable": true + }, + { + "path": "sdk/scripts", "addressable": true + }, + { + "path": "images/logo.png", "addressable": true + } + ] + } +``` + +>[!NOTE] +>The **publisher** here will need to be changed to your publisher name. To create a publisher now, visit [Package/Publish/Install](../publish/overview.md). + + +### Icons +The **icons** stanza specifies the path to your extension's icon in your manifest. + +> **You will need to add a square image titled `logo.png` as shown in the extension manifest.** + +### Contributions +The **contributions** stanza adds your contribution - the Hello hub - to your extension manifest. + +For each contribution in your extension, the manifest defines +- the type of contribution, hub, +- the contribution target, the work hub group, (check out all of the [targetable hub groups](../reference/targets/overview.md#targetable-hub-groups)) +- and the properties that are specific to each type of contribution. For a hub, we have + +| Property | Description +|--------------------|----------------------------------------------------------------------------------------| +| name | Name of the hub. | +| order | Placement of the hub in the hub group. | +| uri | Path (relative to the extension's baseUri) of the page to surface as the hub. | + +### Scopes +Include the [scopes](../develop/manifest.md#scopes) that your extension requires. +In this case, we need `vso.work` to access work items. + +### Files +The **files** stanza states the files that you want to include in your package - your HTML page, your scripts, the SDK script and your logo. +Set `addressable` to `true` unless you include other files that don't need to be URL-addressable. + +>[!NOTE] +>For more information about the **extension manifest file**, such as its properties and what they do, check out the [extension manifest reference](../develop/manifest.md). + + +## Next Steps: + +Now that you've written your extension, the next steps are to Package, Publish, and Install your extension. You can also check out the +documentation for Testing and Debugging your extension. + +
      + diff --git a/docs/extend/develop/add-service-hook.md b/docs/extend/develop/add-service-hook.md new file mode 100644 index 00000000000..f8d4bafc03e --- /dev/null +++ b/docs/extend/develop/add-service-hook.md @@ -0,0 +1,171 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Create a consumer service for service hooks | Extensions for Visual Studio Team Services +description: Tutorial for creating a custom consumer service for service hooks in Visual Studio Team Services. +ms.assetid: 294ae93b-7522-40ef-95ab-d5002f8c3ca8 +ms.manager: douge +ms.author: elbatk +ms.date: 08/22/2016 +--- + +# Service hooks in Team Services + +Service hooks enable you to perform tasks on other services when events happen in your VSTS projects. For example, create a card in Trello +when a work item is created or send a push notification to your team's mobile devices when a build fails. Service hooks can also be used in custom apps and services +as a more efficient way to drive activities when events happen in your projects. + +## How service hooks work +Service hook **publishers** define a set of *events*. **Subscriptions** listen for the *events* and define **actions** to take based on the event. +Subscriptions also target **consumers**, which are external services that can perform their own actions, when an event occurs. + +
      ![Service Hooks Diagram](./_img/service-hooks.png)
      + +## Tutorial Overview - Custom Consumer Service + +This tutorial walks through developing an extension that implements a **sample consumer service** that includes: +- Supported events that trigger actions to be taken + - Code pushed + - Pull request created + - Pull request updated +- Supported actions to take when events occur + - Perform action + +> Note: This tutorial will refer to the home directory for your project as "home". + +
      ![Sample Consumer Service](./_img/consumer-service.png)
      + +## Create the extension +### Add an icon + +Add a square image in the ```images``` folder that identifies your extension. +It will displayed in the Marketplace, and when someone installs your extension. You don't need to do this for your extension to work, +but below is a sample image you can use along with how it will look with the extension. + +>NOTE: Name the image ```logo.png```, or remove the "icons" sections from the manifest file if you wish to skip this step. + +
      + +
      +
      + +
      + +### Create the manifest file and populate it +The [manifest file](./manifest.md) defines both your extension and the consumer service. + +Create a json file (`vss-extension.json`, for example) in the `home` directory of your extension with the following contents: + +```json +{ + "manifestVersion": 1, + "id": "samples-service-hooks-consumer", + "version": "0.1.2", + "name": "Service Hooks Sample", + "description": "A simple extension that demonstrates how to contribute a consumer service into service hooks.", + "publisher": "fabrikam", + "public": false, + "icons": { + "default": "images/logo.png" + }, + "scopes": [], + "files": [ + { + "path": "images", + "addressable": true + } + ], + "content": { + "details": { + "path": "readme.md" + } + }, + "categories": [ + "Developer samples" + ], + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "contributions": [ + { + "id": "consumer", + "type": "ms.vss-servicehooks.consumer", + "targets": [ + "ms.vss-servicehooks.consumers" + ], + "properties": { + "id": "consumer", + "name": "Sample Consumer", + "description": "Sample consumer service", + "informationUrl": "https://aka.ms/vsoextensions", + "inputDescriptors": [ + { + "id": "url", + "isRequired": true, + "name": "URL", + "description": "URL to post event payload to", + "inputMode": "textbox" + } + ], + "actions": [ + { + "id": "performAction", + "name": "Perform action", + "description": "Posts a standard event payload", + "supportedEventTypes": [ + "git.push", + "git.pullrequest.created", + "git.pullrequest.updated" + ], + "publishEvent": { + "url": "{{{url}}}", + "resourceDetailsToSend": "all", + "messagesToSend": "all", + "detailedMessagesToSend": "all" + } + } + ] + } + } + ] +} +``` +> Note: You will need to update the `publisher` property. + +The `icons` stanza specifies the path to your extension's icon in your manifest. + +The `contributions` stanza adds your contribution - the consumer service - to your extension manifest. + +For each contribution in your extension, the manifest defines +- the type of contribution - consumer service (ms.vss-servicehooks.consumer) in this case, +- the contribution target - consumer services (ms.vss-servicehooks.consumers) in this case, +- and the properties that are specific to each type of contribution. For a consumer service we have: + +| Property | Description +|--------------------|------------------------------------------------------------------------------------------| +| id | Unique id for your consumer service. | +| name | Name of the consumer service. | +| description | Describes your consumer service. | +| informationUrl | Where more info can be found about your extension. | +| inputDescriptors | Inputs to be used by users that are creating subscriptions with the consumer service. | +| actions | Describes the actions to take and which events trigger them. | + +## Package, Publish, and Install + +Now that you've written your extension, the next steps are to Package, Publish, and Install your extension. You can also check out the +documentation for Testing and Debugging your extension. + + \ No newline at end of file diff --git a/docs/extend/develop/add-workitem-extension.md b/docs/extend/develop/add-workitem-extension.md new file mode 100644 index 00000000000..02ff5630540 --- /dev/null +++ b/docs/extend/develop/add-workitem-extension.md @@ -0,0 +1,288 @@ +--- +title: Extend the work item form | Extensions for Visual Studio Team Services +description: Describes how to extend work item tracking, including adding an action, an observer, a group or a page to the work item form. +ms.assetid: bffc76b7-f6ba-41f0-8460-ccb44d45d670 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/22/2016 +--- + +# Extend the work item form + +You can now customize how the work item form is presented to users via contributions made through an extension: + +* [Add a group to the main page](#addagroup) +* [Add a page (tab)](#addapage) +* [Add an action to the context menu](#addmenuaction) +* [Add a custom control](./custom-control.md) +* [Listen for events on the form](#listenforevents) +* [Configure contributions in work item form](#showcontributions) + +If you are just getting started and haven't created an extension, refer to the [Create your first extension with Visual Studio](../get-started/visual-studio.md). + +See the **UI** example in the [Team Services Extension Samples](https://github.com/Microsoft/vso-extension-samples/tree/master/ui) on GitHub for the full source. + + +## Add a group + +![toolbar item in work item form](./_img/add-workitem-extension-group.png) + +To add a group to the main page, add a contribution to your extension manifest. The type of this contribution should be `ms.vss-work-web.work-item-form-group` and it should target the `ms.vss-work-web.work-item-form` contribution. + + ```json +"contributions": [ + { + "id": "sample-work-item-form-group", + "type": "ms.vss-work-web.work-item-form-group", + "description": "Custom work item form group", + "targets": [ + "ms.vss-work-web.work-item-form" + ], + "properties": { + "name": "My Group", + "uri": "workItemGroup.html", + "height": 600 + } + } +] +``` +### Properties + +| Property | Description | +|--------------|-----------------------| +| ```name``` | Text that will appear on the group. | +| ```uri``` | URI to a page that hosts the html that shows on the work item form and its scripts. +| ```height``` | (Optional) Defines the height of the group. When omitted, it is 100%. + +### JavaScript sample + +This sample shows how to register an object that is called when various events happen on the work item form that may impact your contributed group. + +```js + VSS.require(["TFS/WorkItemTracking/Services"], function (_WorkItemServices) { + // Get the WorkItemFormService. This service allows you to get/set fields/links on the 'active' work item (the work item + // that currently is displayed in the UI). + function getWorkItemFormService() + { + return _WorkItemServices.WorkItemFormService.getService(); + } + + // Register a listener for the work item group contribution. + VSS.register(VSS.getContribution().id, function () { + return { + // Called when the active work item is modified + onFieldChanged: function(args) { + $(".events").append($("
      ").text("onFieldChanged - " + JSON.stringify(args))); + }, + + // Called when a new work item is being loaded in the UI + onLoaded: function (args) { + + getWorkItemFormService().then(function(service) { + // Get the current values for a few of the common fields + service.getFieldValues(["System.Id", "System.Title", "System.State", "System.CreatedDate"]).then( + function (value) { + $(".events").append($("
      ").text("onLoaded - " + JSON.stringify(value))); + }); + }); + }, + + // Called when the active work item is being unloaded in the UI + onUnloaded: function (args) { + $(".events").empty(); + $(".events").append($("
      ").text("onUnloaded - " + JSON.stringify(args))); + }, + + // Called after the work item has been saved + onSaved: function (args) { + $(".events").append($("
      ").text("onSaved - " + JSON.stringify(args))); + }, + + // Called when the work item is reset to its unmodified state (undo) + onReset: function (args) { + $(".events").append($("
      ").text("onReset - " + JSON.stringify(args))); + }, + + // Called when the work item has been refreshed from the server + onRefreshed: function (args) { + $(".events").append($("
      ").text("onRefreshed - " + JSON.stringify(args))); + } + } + }); + }); +``` + +[!INCLUDE [Events](../_shared/add-workitem-extension-sharedevents.md)] + + +## Add a page + +A new page is rendered as a tab on the work item form. New pages appear next to the Details tab. + +![toolbar item in work item form](./_img/add-workitem-extension-page.png) + +To add a page to the work item form, add a contribution to your extension manifest. The type of this contribution should be `ms.vss-work-web.work-item-form-page` and it should target the `ms.vss-work-web.work-item-form` contribution. + +```json +"contributions": [ + { + "id": "sample-work-item-form-page", + "type": "ms.vss-work-web.work-item-form-page", + "description": "Custom work item form page", + "targets": [ + "ms.vss-work-web.work-item-form" + ], + "properties": { + "name": "My Page", + "uri": "workItemPage.html" + } + } +] +``` + +### Properties + +| Property | Description | +|--------------|-----------------------| +| name | Text that will appear on the tab page. | +| uri | URI to a page that hosts the html that shows on the work item form and its scripts. | + +### JavaScript sample + +See the JavaScript sample in the form group section. The name of the registered object should match the `id` of the contribution. + +[!INCLUDE [Events](../_shared/add-workitem-extension-sharedevents.md)] + + +## Configure contributions in work item form +In VSTS, by default the group extensions will appear in the end of the second column of the form and page contributions will appear after all the work item form pages as a tab. Control contributions are not shown in the form by default so users will have to manually add them to the form. In TFS, to show/hide or move the control, group and page contributions in work item form, see [Configure work item form extensions in TFS](./configure-workitemform-extensions.md). + + +## Add menu action + +![toolbar item in work item form](./_img/add-workitem-extension-toolbar.png) + +To add an item to the work item toolbar, add this contribution to your extension manifest. The item will appear in the ... dropdown in the top right of the work item form. + + ```json +"contributions": [ + { + "id": "sample-work-item-menu", + "type": "ms.vss-web.action", + "description": "Sample toolbar item which updates the title of a work item", + "targets": [ + "ms.vss-work-web.work-item-context-menu" + ], + "properties": { + "text": "Try me!", + "title": "Updates the title of the work item from the extension", + "toolbarText": "Try me!", + "icon": "images/show-properties.png", + "uri": "menu-workItemToolbarButton.html" + } + } +] +``` + + +### Properties +| Property | Description | +|--------------|-----------------------| +| text | Text that will appear on the toolbar item. | +| title | Tooltip text that will appear on the menu item. | +| toolbarText | Text that will appear when the item is being hovered over. | +| uri | URI to a page that registers the toolbar action handler. | +| icon | URL to an icon that will appear on the menu item. Relative URLs are resolved using baseUri. | +| group | Determines where this menu item will appear in relation to the others. Toolbar items with the same group name will be grouped together divided by a separator from the rest of the items. +| registeredObjectId | (Optional) Name of the registered menu action handler. Defaults to the contribution id. + + +## Listen for events + +To add a observer to the work item which listens to the work item events, add this contribution to your extension manifest. There will be no visualization for observers on the work item form. + + ```json +"contributions": [ + { + "id": "sample-work-item-form-observer", + "type": "ms.vss-work-web.work-item-notifications", + "description": "Gets events about the current work item form for the 'Try Me!' toolbar button", + "targets": [ + "ms.vss-work-web.work-item-form" + ], + "properties": { + "uri": "myformobserver.html" + } + } +] +``` + +### Properties + +| Property | Description | +|--------------|-----------------------| +| uri | URI to a page that hosts the scripts listening to events | + +[!INCLUDE [Events](../_shared/add-workitem-extension-sharedevents.md)] + +### HTML/JavaScript sample + +```html + + + + + + Work item extension page sample + + + + + + + + +``` diff --git a/docs/extend/develop/auth-schemes.md b/docs/extend/develop/auth-schemes.md new file mode 100644 index 00000000000..205a940b1d1 --- /dev/null +++ b/docs/extend/develop/auth-schemes.md @@ -0,0 +1,160 @@ +--- +title: Authentication Schemas for Service Endpoints | Extensions for Visual Studio Team Services +description: Find the different ways to authenticate with external services using service endpoints in VSTS extensions. +ms.assetid: bffc76b7-f6ba-41f0-8460-ccb44d45d670 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 03/02/2016 +--- + +# Service endpoint authentication schemes +For Team Services and Team Foundation Server to be able to connect to the external service, in addition to using the credentials, there is also need to know how to +set the credentials in the HTTP request header when calling the external endpoint. Team Services supports a closed set of authentication schemes +that can be utilized by a custom service endpoint type. This set is closed so that Team Services would be able to interpret the authentication scheme used +in any custom endpoint & support connecting to the external service. + +Following are the authentication schemes that are part of the closed set: + +## Basic authentication +This scheme takes 2 inputs – Username & Password (confidential) + +Default authentication header used is: "Basic {{ #base64 endpoint.username \":\" endpoint.password }}" + +```json +{ +"id": "endpoint-auth-scheme-basic", +"description": "Basic Authentication based endpoint authentication scheme", +"type": "ms.vss-endpoint.service-endpoint-auth-scheme", +"targets": [ + "ms.vss-endpoint.endpoint-auth-schemes" +], +"properties": { + "name": "UsernamePassword", + "displayName": "i18n:Basic Authentication", + "headers": [ + { + "name": "Authorization", + "value": "Basic {{ #base64 endpoint.username \":\" endpoint.password }}" + } + ], + "inputDescriptors": [ + { + "id": "username", + "name": "i18n:Username", + "description": "i18n:Username for connecting to the endpoint", + "inputMode": "textbox", + "isConfidential": false, + "validation": { + "isRequired": true, + "dataType": "string", + "maxLength": 300 + } + }, + { + "id": "password", + "name": "i18n:Password", + "description": "i18n:Password for connecting to the endpoint", + "inputMode": "passwordbox", + "isConfidential": true, + "validation": { + "isRequired": true, + "dataType": "string", + "maxLength": 300 + } + } + ] +} +} +``` + +## Token based authentication +This scheme takes 1 input – API Token (confidential) + +Default authentication header used is: {{endpoint.apitoken}} + +```json +{ +"id": "endpoint-auth-scheme-token", +"description": "i18n:Token based endpoint authentication scheme", +"type": "ms.vss-endpoint.service-endpoint-auth-scheme", +"targets": [ + "ms.vss-endpoint.endpoint-auth-schemes" +], +"properties": { + "name": "Token", + "displayName": "i18n:Token Based Authentication", + "headers": [ + { + "name": "Authorization", + "value": "{{endpoint.apitoken}}" + } + ], + "inputDescriptors": [ + { + "id": "apitoken", + "name": "i18n:API Token", + "description": "i18n:API Token for connection to endpoint", + "inputMode": "textbox", + "isConfidential": true, + "validation": { + "isRequired": true, + "dataType": "string", + "maxLength": 300 + } + } + ] +} +} +``` +## Certificate based authentication +This scheme takes 1 input – Certificate (confidential) + +The value of certificate has to be provided in the text area. + +```json +{ +"id": "endpoint-auth-scheme-cert", +"description": "i18n:Creates a certificate-based endpoint authentication scheme", +"type": "ms.vss-endpoint.service-endpoint-auth-scheme", +"targets": [ + "ms.vss-endpoint.endpoint-auth-schemes" +], +"properties": { + "name": "Certificate", + "displayName": "i18n:Certificate Based", + "inputDescriptors": [ + { + "id": "certificate", + "name": "i18n:Certificate", + "description": "Content of the certificate", + "inputMode": "TextArea", + "isConfidential": true, + "validation": { + "isRequired": true, + "dataType": "string" + } + } + ] +} +} +``` + +## No authentication +This scheme is used when an endpoint type does not require to take any input. For e.g. external services that support anonymous access to its resources. + +```json +{ +"id": "endpoint-auth-scheme-none", +"description": "i18n:Creates an endpoint authentication scheme with no authentication.", +"type": "ms.vss-endpoint.service-endpoint-auth-scheme", +"targets": [ + "ms.vss-endpoint.endpoint-auth-schemes" +], +"properties": { + "name": "None", + "displayName": "i18n:No Authentication" +} +} +``` \ No newline at end of file diff --git a/docs/extend/develop/auth.md b/docs/extend/develop/auth.md new file mode 100644 index 00000000000..c30373e0520 --- /dev/null +++ b/docs/extend/develop/auth.md @@ -0,0 +1,99 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Auth and Security | Extensions for Visual Studio Team Services +description: Auth and secuirty for VSTS Extensions +ms.assetid: c1704b14-66d2-4950-8633-a63fc8f88508 +ms.manager: douge +ms.author: elbatk +ms.date: 08/29/2016 +--- + +# Auth and security + +## Calling REST APIs from your extension + +Most extensions have a need to call VSTS REST APIs on behalf of the current user. +* If you are using the provided `JavaScript REST clients`, authentication is automatically handled for you. These clients automatically request an access token from the core SDK and set it in the Authorization header of the request. +* If you are not using the provided clients, you need to request a token from the `Core SDK` and set it in the Authorization header of your request: + + ``` + VSS.require(["VSS/Authentication/Services"], + function (VSS_Auth_Service) { + VSS.getAccessToken().then(function(token){ + // Format the auth header + var authHeader = VSS_Auth_Service.authTokenManager.getAuthorizationHeader(token); + + // Add token as an Authorization header to your request + }); + }); + ``` + +## Authenticating requests to your service + +A common scenario is to make calls to a back-end service from an extension. To verify these calls are coming from your extension running in VSTS and to verify the authenticity of the current user (and other context information), a special type of token is made available to your extension. This token contains information about who is making the call and also a signature that you can validate to know that the request came from your extension. + +### Get your extension's key + +Your extnesion's unique key (which is generated when the extension is published) can be used to verify the authenticity of requests made from your extension. + +To get this key, right-click a [published extension](../publish/overview.md) and select **Certificate**. + +![key](./_img/get-extension-key.png) + +### Generate a token to provide to your service + +1. The Core SDK `getAppToken` method return a promise that, when resolved, contains a token signed with your extension's certificate. + + ``` + VSS.getAppToken().then(function(token){ + // Add token to your request + }); + ``` + +2. Pass this token to your service as a query parameter or request header. + +### Parse and validate the token + +Here is a sample of parsing the token. First download and store the secret for your extension. You can get this from your publisher page. This secret will need to be available to your application. +You will need add 2 references to get this sample to compile. +1. Open the nuget package manager and add a reference to System.IdentityModel.Tokens.Jwt. This sample was built with version 4.0.2.206221351 of this package. +2. Right click on the references in your project and select "Add reference". Check System.IdentityModel and then click Ok. + +``` + using System.Collections.Generic; + using System.IdentityModel.Tokens; + using System.ServiceModel.Security.Tokens; + + namespace TokenSample + { + class Program + { + static void Main(string[] args) + { + string secret = ""; // Load your extension's secret + string issuedToken = ""; // Token you are validating + + var validationParameters = new TokenValidationParameters() + { + IssuerSigningTokens = new List() + { + new BinarySecretSecurityToken (System.Text.UTF8Encoding.UTF8.GetBytes(secret)) + }, + ValidateIssuer = false, + RequireSignedTokens = true, + RequireExpirationTime = true, + ValidateLifetime = true, + ValidateAudience = false, + ValidateActor = false + }; + + SecurityToken token = null; + var tokenHandler = new JwtSecurityTokenHandler(); + var principal = tokenHandler.ValidateToken(issuedToken, validationParameters, out token); + } + } + } +``` + + diff --git a/docs/extend/develop/build-task-schema.md b/docs/extend/develop/build-task-schema.md new file mode 100644 index 00000000000..ee0c9a6dde2 --- /dev/null +++ b/docs/extend/develop/build-task-schema.md @@ -0,0 +1,66 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Custom build task reference | Extensions for Visual Studio Team Services +description: Reference for creating a custom build task with an extension in Visual Studio Team Services. +ms.assetid: 00806e48-3839-40eb-880f-12ec53bfdf73 +ms.manager: douge +ms.author: elbatk +ms.date: 11/14/2016 +--- + +# Reference for creating custom build tasks within extensions + +## Custom build task JSON schema +When creating a custom build task with an extension, your extension will include a `task.json` file for each build task. +This file describes the build task and is what the build system uses to render configuration options to the user and to know which scripts to execute at build time. + +Below is the JSON schema for the `task.json` file. + +### task.json schema + +[!code-javascript[JSON]](./_shared/build-task-schema.json)] + +## Bundle multiple versions of build tasks within one extension +You can now include multiple versions of a build task in your extension. This can be helpful if you want to roll out +future versions of your extension without interrupting service of users running older versions. The table below shows the layout for having +multiple versions in one extension. + +### Traditional extension layout + +* extensionManifest.json +* extensionIcon.png +* Task1 + * task.json + * taskIcon.png + * taskScript.ps1 + +### Multiple version layout + +* extensionManifest.json +* extensionIcon.png +* Task1 + * Task1V1 + * task.json + * taskIcon.png + * taskScript.ps1 + * Task1V2 + * task.json + * taskIcon.png + * taskScript.ps1 +* Task2 + * Task2V1 + * task.json + * taskIcon.png + * taskScript.ps1 + * Task2V2 + * task.json + * taskIcon.png + * taskScript.ps1 + + +>[!NOTE] +>The code will look for the `task.json` file inside the task folder. If one is not found, it will look just *one* level deeper. +>An error will be thrown if one is not found in either level. + + diff --git a/docs/extend/develop/call-rest-api.md b/docs/extend/develop/call-rest-api.md new file mode 100644 index 00000000000..9c0d8263574 --- /dev/null +++ b/docs/extend/develop/call-rest-api.md @@ -0,0 +1,20 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: How to Call a REST API | Extensions for Visual Studio Team Services +description: How to call a REST API in your extension for Visual Studio Team Services. +ms.assetid: 99794e1e-0127-4e65-83fb-93a71f496d93 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Call a REST API + +To call a REST API from your extension, get the client service first, and then use that to call the API. + +[!INCLUDE [REST](../_shared/procedures/call-rest-api-js.md)] + +## Try this next + +Display the results of your REST API call [in a Grid](./ui-controls/grido.md). \ No newline at end of file diff --git a/docs/extend/develop/configure-workitemform-extensions.md b/docs/extend/develop/configure-workitemform-extensions.md new file mode 100644 index 00000000000..b22e92756ba --- /dev/null +++ b/docs/extend/develop/configure-workitemform-extensions.md @@ -0,0 +1,129 @@ +--- +title: Configure work item form extensions in TFS | Extensions for Visual Studio Team Services +description: Describes how to add and configure work item form extensions in TFS. +ms.prod: vs-devops-alm +ms.contentid: DEC28077-2F52-490D-B87C-48D4785CD597 +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +--- + +
      Note: work item form customization via xml is supported only on TFS, not VSTS
         + +# Add extensions in work item form via work item type definition xml + +A work item type can be exported as XML using witadmin tool, that includes the layout of the work item form. As part of the walkthrough, you will add the page, group and control contibutions to the layout. [Read more information on WebLayout XML](/vsts/work/reference/weblayout-xml-elements). In this example, we will add the control to the Agile "User Story" work item type. + +**Step 1:** Install work item form extensions in TFS. + +**Step 2:** Open the `Developer Command Prompt`. Export the XML file to your desktop with command shown below. + +``` + witadmin exportwitd /collection:CollectionURL /p:Project /n:TypeName /f:FileName +``` + +
      +**Step 3:** This creates a file in the directory that you specified. Inside this file, navigate to the section called "WebLayout". Inside the Weblayout Section a comment blob will be present that specifies what extensions targeting work item form are installed in your collection. For each extension, all its form contributions will be listed with their ids and inputs (if it's a Control contribution). In the example below, the comment shows that the "color-control-dev" extension has been installed on the collection which has one control contribution that takes 2 inputs - + +```xml + + + + + + ``` + +
      +**Step 6:** Specifying the extensions in the xml automaticaly places both the **page** and **group** contributions defined in the extensions inside the form. You can move the contributions following the examples below: + +#### Add page contribution +```xml + + + ... +``` + + #### Add group contribution +```xml + + ... +
      + ... + + ... +``` + +> Note that a page contribution and a group contribution can not take any other layout elements inside them. + +#### Add control contribution +Unlike **page** and **group** contributions, specifying the extensions in the xml does not automatically place **control** contributions. +To add these contributions in the form, you have to add them with a contribution tag inside the form. The example below adds the "ControlContribution" to the "Planning" group. + +Note that if a control contribution has any required input defined, users must give a value for that input. For any non-required input, users can opt to either set or not set a value to the input. In the example below, the values of "FieldName" and "Colors" inputs are set: + +```xml + + ... +
      + ... + + ... + + + + + + + + +``` + + + +
      +**Step 7:** Finally, import this *.xml* file, using witadmin. +``` + witadmin importwitd /collection:CollectionURL /p:Project /f:FileName +``` \ No newline at end of file diff --git a/docs/extend/develop/contributions-overview.md b/docs/extend/develop/contributions-overview.md new file mode 100644 index 00000000000..a0f0b5bb39b --- /dev/null +++ b/docs/extend/develop/contributions-overview.md @@ -0,0 +1,120 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Contributions Model Fundamentals | Extensions for Visual Studio Team Services +description: Overview of the contribution model, including an overview of contributions, types, and targeting other contributions +ms.assetid: 96509f47-bac2-4319-9085-2621ff8f814a +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Contribution model + +Extensions add new capabilities into the system by providing contributions and by defining ways for other extensions to plug in to them. +A contribution type defines something that can be added to the system. A contribution is a specific instance of a contribution type. For +example, `hub` is a contribution type defined by a core, Microsoft-provided extension. The `Explorer` hub under the Build hub group is a +specific contribution of type `hub`. + +### Contribution types + +A **contribution type** defines a contract that all contributions to the system of that type must adhere to. `hub`, `action`, and `build-task` +are all examples of contribution types. Types define the properties set by instances of that type. Each property definition indicates the type +of the property (string, boolean, etc.), whether the property is required, and optionally specifies a default value if not specified by a +contribution. A contribution type can also extend from another contribution type. + +#### Example + +Here is an example of a contribution type declaration in an extension manifest: + +```js +{ + ... + "contributionTypes": [ + { + "id": "hub", + "name": "Web Access Hub", + "description": "A hub that will appear in the hubs menu at the top of web pages.", + "properties": { + "name": { + "description": "The text to display for the hub", + "type": "string", + "required": true + }, + "uri": { + "description": "URI of the contents of the hub page", + "type": "string", + "required": true + }, + "order": { + "description": "An optional ordering value which can indicate in which position to place the hub within the hub group", + "type": "integer" + } + ... + } + } + ] +} +``` + +### Contributions + +A **contribution** is an instance of a contribution type. For example, the `Queries` hub under the Work hub group is a contribution +of type `hub` and the `Publish Test Results` build task is a contribution of type `build-task`. + +All contributions must specify a type and specify values for any properties required by that contribution type. + +#### Example + +Here is an example of a hub contribution declaration in an extension manifest: + +```js +{ + "contributions": [ + { + "id": "build-explorer-hub", + "type": "ms.vss-web.hub", + "targets": [ + ".build-hub-group" + ], + "properties": { + "name": "Explorer", + "uri": "/_build", + "order": 22 + } + } + ] +} +``` + +### Targeting contributions + +A contribution can **target** one or more other contributions. This creates a relationship between the contribution and each of its +target(s) that enables the system to discover contributions for the target at runtime. For example, a `hub` contribution (`Explorer`) +might target a specific `hub-group` contribution (`Build`). + +```json +{ + "id": "build-explorer-hub", + "type": "ms.vss-web.hub", + "targets": [ + ".build-hub-group" + ] +} +``` + +When the hub group is being rendered, the system can query for all hub +contributions that target the hub group in order to know which hubs to render. + + +### Identifying contributions and types + +Every contribution and contribution type must have a unique ID (within the extension it is declared in). + +A *full* contribution identifier includes the publisher ID, extension ID, and contribution/type ID, separated by +a dot (.). For example: "ms.vss-web.hub" is the full identifier for the contribution with ID of `hub` in the `vss-web` extension published +by the `ms` (Microsoft) publisher. + +*Relative* contribution references may be used within an extension manifest for a contribution's reference to another contribution or contribution +type within that same extension. In this case, the publisher and extension IDs are NOT included, and the ID is simply a dot (.) followed +by the contribution id. For example, ".hub" may be used within the "vss-web" extension mentioned above as a shortcut for "ms.vss-web.hub". \ No newline at end of file diff --git a/docs/extend/develop/custom-control.md b/docs/extend/develop/custom-control.md new file mode 100644 index 00000000000..31e07c5b9f6 --- /dev/null +++ b/docs/extend/develop/custom-control.md @@ -0,0 +1,142 @@ +--- +title: Add a custom control to the work item form | Extensions for Visual Studio Team Services +description: Describes how to extend the work item form by adding a custom control. +ms.prod: vs-devops-alm +ms.contentid: 0956ACA7-B1C4-443F-A79A-A62EDD02FC15 +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +--- + +# Add a custom control to the work item form + +> This is only available on VSTS and TFS 2017 or later. + +Custom controls allow you to change how users view and interact with a field on the work item form. The screenshot below shows a sample custom work item control for the *Priority* field. The following article walks you through how this sample custom control was built. At the end of the article you will understand how to build your own custom control. + + + +## Add the custom control +To add a control to the main page, add a contribution to your [extension manifest](../develop/manifest.md). The type of this contribution should be `ms.vss-work-web.work-item-form-control` +and it should target the `ms.vss-work-web.work-item-form` contribution. + +```json +"contributions": [ + { + "id": "sample-work-item-form-control", + "type": "ms.vss-work-web.work-item-form-control", + "description": "Custom work item form control", + "targets": [ + "ms.vss-work-web.work-item-control" + ], + "properties": { + "name": "My Control", + "uri": "workItemControl.html", + "height": 600 + } + } +] +``` + +The work item form adds an iframe to host the custom control. + +### Properties + +| Property | Description | +|--------------|-----------------------| +| ```name``` | Text that will appear on the group. | +| ```uri``` | URI to a page that hosts the html that is loaded by the iframe. +| ```height``` | (Optional) Defines the height of the iframe. When omitted, it is 50 pixels. + +If you want to dynamically resize the iframe, you can use the `resize method` available in the client SDK. + +A custom control on the work item form is another type of [contribution](./contributions-overview.md) like [group & page contribution](./add-workitem-extension.md). The main difference between a control contribution and group and page contribution is that a control contribution can take a set of user inputs while group and page contributions can not. + +## Control Contribution Inputs +To define the inputs for your control contribution, use `inputs` property in the contribution object in the manifest. In the sample below you see two inputs, FieldName and Colors. `FieldName` specifies which field the control associates with. `Colors` configures which colors map to which values in the control. The values for the inputs are provided by the users when they add it to the work item form and the values would be passed to the control contribution when its loaded on the form. + +```json +"inputs": [ + { + "id": "FieldName", + "description": "The field associated with the control.", + "type": "WorkItemField", + "properties": { + "workItemFieldTypes": ["String"] + }, + "validation": { + "dataType": "String", + "isRequired": true + } + }, + { + "id": "Colors", + "description": "The colors that match the values in the control.", + "validation": { + "dataType": "String", + "isRequired": false + } + } +] +``` + +These properties define a user input that the contribution can use: + +* **id** - A unique id for the input. +* **description** - A few sentences describing the input. +* **type (optional)** - The type of input. Only supported on VSTS and TFS 15 RC2 and later. + * Valid values: + * `WorkItemField` - Indicates that the input is a Work Item field. This means that the value provided by the user for this input should be a valid work item field's reference name. +* **properties (optional)** - Custom properties for the input. Only supported on VSTS and TFS 15 RTM. + * Valid keys: + * `workItemFieldTypes` - Defines an array of field types that this input supports. Valid values are - + * `String` + * `Integer` + * `Double` + * `HTML` + * `PlainText` + * `Boolean` + * `Guid` + * `DateTime` + * `TreePath` +* **validation** - A set of properties that defines which values are considered valid for the input. + * Valid keys: + * `dataType` - Defines the data type of the input value. Valid values for this property are - + * `String` + * `Number` + * `Boolean` + * `Field` - Only supported in TFS 15 RC1 and RC2 and not in VSTS. + * `isRequired` - A boolean value which indicates if the input is required to have a value or not + + +## JavaScript sample +A control extension works like a group or page extension with one difference that it can take certain user inputs. To read the user input values, use `VSS.getConfiguration().witInputs`. This sample shows how to register an object that is called when various events happen on the work item form that may impact your contributed control. It also shows how to read input values provided by user for this control. + +```typescript +import { Control } from "control"; +import * as ExtensionContracts from "TFS/WorkItemTracking/ExtensionContracts"; + +var control: Control; + +var provider = () => { + return { + onLoaded: (workItemLoadedArgs: ExtensionContracts.IWorkItemLoadedArgs) => { + // create the control + var fieldName = VSS.getConfiguration().witInputs["FieldName"]; + var colors = VSS.getConfiguration().witInputs["Colors"]; + control = new Control(fieldName, colors); + }, + onFieldChanged: (fieldChangedArgs: ExtensionContracts.IWorkItemFieldChangedArgs) => { + var changedValue = fieldChangedArgs.changedFields[control.getFieldName()]; + if (changedValue !== undefined) { + control.updateExternal(changedValue); + } + } + } +}; + +VSS.register(VSS.getContribution().id, provider); +``` + + + diff --git a/docs/extend/develop/data-storage.md b/docs/extend/develop/data-storage.md new file mode 100644 index 00000000000..9128d4cf508 --- /dev/null +++ b/docs/extend/develop/data-storage.md @@ -0,0 +1,250 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Data and Setting Storage | Extensions for Visual Studio Team Services +description: Add an action for your extension that extends Visual Studio Team Services. +ms.assetid: 4662d1cf-ddb6-4079-8eb4-6f553861c1b4 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Data storage + +VSTS extensions have the ability to store user preferences and complex data structures directly on Microsoft-provided infrastructure. This ensures your user's data is secure and backed up just like other account and project data. It also means for simple data storage needs, you (as the extension provider) are not required to setup or manage (or pay for) third-party data storage services. + +There are two ways to interact with the data storage service: REST APIs or a Microsoft-provided client service available as part of the VSS SDK. It is highly recommended that extension developers use the provided client service APIs, which provide a convenient wrapper over the REST APIs. + +### What you can store + +The service is designed to let you store and manage two different types of data: + +1. **Settings**: simple key-value settings (like user preferences) +2. **Documents**: collections of similar complex objects (documents) + +A collection is as an indexed container for documents. A document is a JSON blob that belongs to a collection. Other than a few reserved property names, the schema of these documents is controlled and managed by you. + +### How you can scope data + +Settings and document collections can be scoped to either the: + +1. **Project Collection**: shared by all users of the project collection to which the extension is installed +2. **User**: a single user of a project collection to which the extension is installed + +## Setting storage + +The two primary functions for interacting with settings are getValue() and setValue(): + +* `getValue()` takes a string key (and other options such as scope) and returns an IPromise. The resolution of this promise will contain a value for the provided key. +* `setValue()` take a string key and a value (and other options such as scope) and returns an IPromise. The resolution this promise will contain the new value of the setting. + +Here is an example of how to set a value: + +```js``` + // Get data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + // Set value in user scope + dataService.setValue("userScopedKey", 12345, {scopeType: "User"}).then(function(value) { + console.log("User scoped key value is " + value); + }); + }); +``` + +Here is an example of how to retrieve a setting value: + +```js``` + // Get data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + // Get value in user scope + dataService.getValue("userScopedKey", {scopeType: "User"}).then(function(value) { + console.log("User scoped key value is " + value); + }); + }); +``` + +If `scopeType` is not specified, the settings are stored at the project collection level and they are accessible to all users in that project collection using the extension. +Here is an example of how to set a setting value at the project collection level: + +```js``` + // Get data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + // Set value (default is project collection scope) + dataService.setValue("someKey", "abcd-efgh").then(function(value) { + console.log("Key value is " + value); + }); + }); +``` + +## Data (collections of documents) storage + +For interacting with richer data beyond key-value pairs, you can use the concepts of documents to perform CRUD operations on their extension's data. A document is a JSON blob, augmented with two special properties: ID and `__etag`. IDs can be user-defined if they are important a extension's data model, or, if left undefined, will be generated by the system. These IDs must be unique within a particular collection. Because a collection references a particular scope and instance of an extension, this means that the same document ID can be used across different collections. + +The following document operations are available: + +* Get a document +* Create a document +* Set a document (create or update) +* Update a document +* Delete a document + +There is also a single operation that can be performed on a collection: + +* Get all documents + +### Get a document by ID + +Retrieving a document by its identifier from a collection is easy: + +```js``` + // Get data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + // Get document by id + dataService.getDocument("MyCollection", "MyDocumentId").then(function(doc) { + // Assuming document has a property named foo + console.log("Doc foo: " + doc.foo); + }); + }); +``` + +This call will attempt to retrieve a document with the ID "MyDocumentId", from the collection "MyCollection". Since no scope is provided, the collection that the service will use is scoped to the default of the entire instance of this extension. If this collection does not exist or a document with that ID does not exist, then a 404 will be returned, which should be handled by the extension. The document that is returned is a JSON object containing all of its own properties, in addition to the special ID and `__etag` properties used by the data storage service. + +### Create a document + +To create a new document, perform a call such as the following: + +```js``` + // Get data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + // Prepare document first + var newDoc = { + fullScreen: false, + screenWidth: 500 + }; + + dataService.createDocument("MyCollection", newDoc).then(function(doc) { + // Even if no ID was passed to createDocument, one will be generated + console.log("Doc id: " + doc.id); + }); + }); +``` + + +If the collection with the name and scope provided, does not yet exist, it will be created dynamically before the document itself is created. + +If the document provided contains an `id` property, that value will be used as the unique ID for the document. If that field does not exist, a GUID will be generated by the service and included on the document that is returned when the promise is resolved. + +If another document in the collection already exists with the same ID as the one provided on the document, the operation will fail. If the desired behavior is create a new document if the ID does not exist, but modify the existing document if it does, then the `setDocument()` method should be used. + +### Set a document (update or create) + +`setDocument()` performs the equivalent of an "upsert" operation - modifying an existing document if there is an ID on the document provided that exists in the collection. If the ID does not exist, or no ID was provided, then a new document will be added to the collection. + +```js``` + // Get data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + // Prepare document first + var myDoc = { + id: 1, + fullScreen: false, + screenWidth: 500 + }; + + dataService.setDocument("MyCollection", myDoc).then(function(doc) { + console.log("Doc id: " + doc.id); + }); + }); + +``` + +### Update a document + +updateDocument requires that the document which is being modified already exists in the collection. If no ID is provided or the ID provided on the document does not exist in the collection, then an exception is thrown. + +Here is an example of how update is used: + +```js``` + // Get data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + var collection = "MyCollection"; + var docId = "1234-4567-8910"; + // Get document first + dataService.getDocument(collection, docId, { scopeType: "User" }).then(function(doc) { + // Update the document + doc.name = "John Doe"; + dataService.updateDocument(collection, doc, { scopeType: "User" }).then(function(d) { + // Check the new version + console.log("Doc version: " + d.__etag); + }); + }); + }); +``` + +### Delete a document + +This function will delete the document with the provided ID from the provided collection. If the collection does not exist or the document does not exist, a 404 will be returned. + +Here is an example usage: +```js``` + // Get data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + var docId = "1234-4567-8910"; + // Delete document + dataService.deleteDocument("MyCollection", docId).then(function() { + console.log("Doc deleted"); + }); + }); +``` + +### Get all documents in a collection + +In addition to the operations on documents themselves, the data storage service provides a single operation on collections - retrieving all documents within a single collection. This call looks like the following: + +```js``` + // Get data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + // Get all document under the collection + dataService.getDocuments("MyCollection").then(function(docs) { + console.log("There are " + docs.length + " in the collection."); + }); + }); + +``` + +This call will return all documents within a scoped collection. If the collection does not exist, a 404 will be returned. + +### Advanced + +#### How settings are stored + +This call wraps the setDocument client method, passing it several pieces of information. As previously mentioned, settings are stored as documents internally, so a simple document is created on the fly, where the ID of the document, is the key that was provided in the setValue() method. There are two additional properties on the document. One is 'value', which contains value passed to the method. The other is 'revision', which is set to -1. The revision property will be discussed in more detail in the "Working with Documents" section, but in the context of settings, by passing revision: -1 in the document, we are indicating that we do not care about the versioning of this setting document. + +Because settings are stored as documents, we need to provide a collection name, indicating where to store the document. To keep things simple, when working with the setValue()/getValue() methods, the collection name will always be the special name '$settings'. The call above would issue a PUT Request at the following endpoint: + +```httprequest +GET _apis/ExtensionManagement/InstalledExtensions/{publisherName}/{extensionName}/Data/Scopes/User/Me/Collections/%24settings/Documents +``` + +The request payload would be the following: + +```json +{ + "id": "myKey", + "__etag": -1, + "value": "myValue" +} +``` +#### REST APIs + +Assuming this snippet is executed after the value has already been set, you should see an alert message containing the text "The value is myValue". The getValue method is again a wrapper around the REST APIs, issuing a GET request to the following endpoint: + +```httprequest +GET _apis/ExtensionManagement/InstalledExtensions/{publisherName}/{extensionName}/Data/Scopes/User/Me/Collections/%24settings/Documents/myKey +``` + +#### etags + +The `__etag` field is how the Data Storage Service handles document concurrency. Before an update to a document is stored by the service, a check is performed to verify that the `__etag` of the document currently stored is equal to the `__etag` of the document passed as part of the updated. If this check succeeds, the `__etag` is incremented, and the new document is returned to the caller. If this check fails, it means that the document that was attempted to be updated was out of date, and an exception will be thrown. It is up to the extension writer to gracefully handle this exception, by either getting the latest `__etag` of the document merging the changes, and re-attempting the update, or bubbling up a message to the user. + +There may be certain types of documents where this level of concurrency is not needed, and a last-in-wins model is what is actually desired. For these cases, when editing the document, pass -1 as the `__etag` value, to indicate this type of functionality. The settings service described above uses this model for saving settings and preferences. + + diff --git a/docs/extend/develop/host-navigation.md b/docs/extend/develop/host-navigation.md new file mode 100644 index 00000000000..6c28998bd7b --- /dev/null +++ b/docs/extend/develop/host-navigation.md @@ -0,0 +1,68 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Host Page Navigation | Extensions for Visual Studio Team Services +description: Use host navigation to modify host url hash or reload page +ms.assetid: 9B188838-55FD-98A6-9062-2652C06BF381 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Host page navigation + +The HostNavigationService provides APIs for interacting with the parent host frame, including refreshing it and accessing the hash of the URL: + +![example](./_img/hash-browser.png) + + +### Get the current hash value + +```js``` + // Get navigation service + VSS.getService(VSS.ServiceIds.Navigation).then(function(navigationService) { + // Get current hash value from host url + navigationService.getHash().then(function (hash) { + console.log("Host hash value: " + hash); + }); + }); +``` + +### Get notified when the hash value changes + +```js``` + // Get navigation service + VSS.getService(VSS.ServiceIds.Navigation).then(function(navigationService) { + navigationService.onHashChanged(function (hash) { + // Adding #something to the end of browser url will execute this handler with the hash value "something" + console.log("Hash changed to : " + hash); + }); + }); +``` + +### Change the hash value + +Two methods are available for changing the hash value of the host page URL: + +* `setHash` adds a new entry to the browser history +* `replaceHash` does **not** add a new entry to the browser history + +```js``` + // Get navigation service + VSS.getService(VSS.ServiceIds.Navigation).then(function(navigationService) { + // Adds a new entry to browser history + navigationService.setHash("new-hash-value"); + }); +``` + +## Refresh the host page + +Following code piece shows how host page can be reloaded. + +```js``` + // Get navigation service + VSS.getService(VSS.ServiceIds.Navigation).then(function(navigationService) { + // Reload whole page + navigationService.reload(); + }); +``` \ No newline at end of file diff --git a/docs/extend/develop/install.md b/docs/extend/develop/install.md new file mode 100644 index 00000000000..742797aabe9 --- /dev/null +++ b/docs/extend/develop/install.md @@ -0,0 +1,16 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: How to Install Your Extension | Extensions for Visual Studio Team Services +description: How to install your extension for Visual Studio Team Services. +ms.assetid: ab9c2c1f-a78d-4f97-9b7e-ae8eaef0a3ee +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Install your extension + +[!INCLUDE [Install](../_shared/procedures/install.md)] + +[!INCLUDE [ExtensionsTab](../_shared/extensions-tab.md)] diff --git a/docs/extend/develop/manifest.md b/docs/extend/develop/manifest.md new file mode 100644 index 00000000000..7831e9534cc --- /dev/null +++ b/docs/extend/develop/manifest.md @@ -0,0 +1,561 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Extension Manifest Reference| Extensions for Visual Studio Team Services +description: How to create a manifest for your extension to Visual Studio Team Services. +ms.assetid: e3150221-3cdf-47e1-b7e9-24211498cc29 +ms.manager: douge +ms.author: elbatk +ms.date: 08/26/2016 +--- + +# Extension manifest reference + +Every extension has a JSON manifest file which defines basic info about the extension and how it wants to extend and enhance the experience. + +Start by creating a file named `vss-extension.json` at the root of your extension folder. This file contains core properties, like the extension's ID and its installation targets (where it can run). It also defines the contributions being made by your extension. + +Here is an example of what a typical manifest will look like: + +[!code-json[](../_data/extension-typical.json)] + +## Core properties + +[!INCLUDE [](../_shared/manifest-core.md)] + +[!INCLUDE [](../_shared/manifest-extension-runtime.md)] + +### Examples of core properties + +[!code-json[](../_data/extension-core.json)] +[!code-json[](../_data/extension-runtime.json)] + + +## Marketplace discovery properties + +[!INCLUDE [](../_shared/manifest-discovery.md)] + +#### Public flag + +By default, all extensions on the Visual Studio Marketplace are private (only visible to the publisher and accounts the publisher has shared the extension with). If your publisher has been verified, you can make your extension public by setting the `Public` flag in your extension manifest: + +```json +{ + "galleryFlags": [ + "Public" + ] +} +``` + +Or simply: + +```json +{ + "public": true +} +``` + +See [Package/Publish/Install](../publish/overview.md) for additional details. + +#### Preview flag + +If your extension is ready for users on the Marketplace to try, but you are still working out a few bugs or adding function, you can mark it as `preview`: + +```json +{ + "galleryFlags": [ + "Preview" + ] +} +``` +####Paid flag + +If you want to sell your extension on the Marketplace, you can mark it as `paid`: + +```json +{ + "galleryFlags": [ + "Paid" + ] +} +``` +Currently, this is in limited Beta. All paid extensions are mandated to define privacy and end user licence agreement. Additional configuration steps are required to sell extension in Marketplace. + +#### Paid Preview flag + +If you intend to sell your extension on the Marketplace in the future, you have to mark it as `paid preview`: + +```json +{ + "galleryFlags": [ + "Paid", + "Preview" + ] +} +``` +Only extensions marked as `paid preview` can be converted to `paid`. + +Note: If you do want to target TFS but do not wish to surface a Download option for your extension then add __DoNotDownload tag (starts with two underscores) to the extension manifest. + +### Example of discovery properties + +[!code-json[](../_data/extension-discovery.json)] + +### Details page example + +* 1 - description +* 2 - icon +* 3 - categories +* 4 - screenshots +* 5 - content (details) +* 6 - links +* 7 - branding + +![card](./_img/extension-details-page.png) + +## Scopes + +Your extension can specify one or more scopes. Scopes control what resources can be accessed by your extension and what operations your extension is allowed to perform on those resources. The scopes you specify in your extension manifest are the scopes set on access tokens issued to your extension (see [Auth and security](auth.md) for more information). + +If no scopes are specified, extensions are only provided access to user profile and extension data. + +### Supported scopes + +[!INCLUDE [](../../integrate/_shared/scopes.md)] + +### Changing a published extension's scopes + +The scopes of an extension can be changed after publishing. Customers that previously installed your extension (and authorized the previous set of scopes) will remain on the previous version of the extension and will need to authorize the new scopes before being upgraded to the newest version. + +The **Action Required** section of the Extension settings hub shows a user which, if any, installed extensions require authorization: + +![scope-change](./_img/auth-new-scopes.png) + +An administrator can then review and authorize the new set of scopes: + +![scope-change-dialog](./_img/auth-new-scopes-dialog.png) + + +## Example manifest + +This extension contributions an action to the completed builds context menu and a hub to the Build hub group: + +[!code-json[](../_data/extension.json)] + +## Installation targets + +As the name implies, installation targets define the products and services your extension can be installed into. `Microsoft.VisualStudio.Services` is the most common installation target and indicates that the extension can be installed into Team Services and Team Foundation Server 2015 Update 2 and later (the version when extension were introduced in Team Foundation Server). + +The installation targets for an extension or integration are specified via the `targets` field in the manifest. + +Supported identifiers for **extensions**: + +* `Microsoft.VisualStudio.Services.Cloud`: installs into Team Services +* `Microsoft.TeamFoundation.Server`: installs into Team Foundation Server +* `Microsoft.VisualStudio.Services`: installs into both. Shortcut for `Microsoft.VisualStudio.Services.Cloud` and `Microsoft.TeamFoundation.Server` version `[14.2,)` + +Supported identifiers for **integrations** (tools or services that integrate with Team Services or Team Foundation Server): + +* `Microsoft.VisualStudio.Services.Cloud.Integration`: integrates with Team Services +* `Microsoft.TeamFoundation.Server.Integration`: integrates with Team Foundation Server +* `Microsoft.VisualStudio.Services.Integration`: integrates with boht. Shortcut for `Microsoft.VisualStudio.Services.Cloud.Integration` and `Microsoft.TeamFoundation.Server.Integration` + +### Examples + +#### Example 1: Extension that works with Team Services and Team Foundation Server + +``` +{ + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ] +} +``` + +#### Example 2: Extension that works only with Team Services + +``` +{ + "targets": [ + { + "id": "Microsoft.VisualStudio.Services.Cloud" + } + ] +} +``` + +Installation targets can also be used in the manifest of integrations (i.e. products, apps, or tools that work with, but do not install into, Team Services or Team Foundation Server. For example: + +#### Example 3: Integration that works with Team Services and Team Foundation Server + +``` +{ + "targets": [ + { + "id": "Microsoft.VisualStudio.Services.Integration" + } + ] +} +``` + +#### Example 4: Integration that only works with Team Foundation Server + +``` +{ + "targets": [ + { + "id": "Microsoft.TeamFoundation.Server.Integration" + } + ] +} +``` + +### Installation target versions + +Some installation target identifiers, like `Microsoft.TeamFoundation.Server` and `Microsoft.TeamFoundation.Server.Integration`, suppport an optional version range. This further clarifies the supported releases the extension or integration is supported on. + +The version or version range is specified via the `version` field on the installation target object. This value can be either: + +* A specific version, for example: `15.0` (2017 RTM only) +* A range of supported versions, for example: `[14.0)` (2015 RTM and later), `[14.3,15.1]` (2015 Update 3 through 2017 Update 1). Range values are refined using the following: + * `[`: minimum version inclusive + * `]`: maximum version inclusive + * `(`: minimum version exclusive + * `)`: maximum version exclusive + +Version numbers for Team Foundation Server: + +| Release | Releases | Version | +|--------------|-----------------|-------------------------------------| +| 2010 | All releases | 10.0 | +| 2012 | All releases | 11.0 | +| 2013 | RTM and updates | 12.0, 12.1, 12.2, 12.3, 12.4 | +| 2015 | RTM and updates | 14.0, 14.1, 14.2, 14.3 | +| 2017 | RTM and updates | 15.0, 15.1 | + +### Examples showing versions + +#### Example 5: Extension that works with Team Services and Team Foundation Server 2017 and later + +``` +{ + "targets": [ + { + "id": "Microsoft.VisualStudio.Services.Cloud" + }, + { + "id": "Microsoft.TeamFoundation.Server", + "version": "[15.0,)" + } + ] +} +``` + +#### Example 6: Integration that works with Team Foundation Server 2015 and later + +``` +{ + "targets": [ + { + "id": "Microsoft.TeamFoundation.Server.Integration", + "version": "[14.0,)" + } + ] +} +``` + +#### Example 7: Integration that works with Team Foundation Server 2013 and 2015 + +``` +{ + "targets": [ + { + "id": "Microsoft.TeamFoundation.Server.Integration", + "version": "[12.0,15.0)" + } + ] +} +``` + +### Shortcuts + +`Microsoft.VisualStudio.Services` is a shortcut for Team Services and Team Foundation Server 2015 Update 2 and later. So this: + +``` +{ + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ] +} +``` + +is equivalent to: + +``` +{ + "targets": [ + { + "id": "Microsoft.VisualStudio.Services.Cloud" + }, + { + "id": "Microsoft.TeamFoundation.Server", + "version": "[14.2,)" + } + ] +} +``` + +### Using installation targets and demands + +Installation targets and demands are used together to present users with an accurate view of the products/services your extension or integration is compatible with. For example, specifying an installation target of `Microsoft.VisualStudio.Services` with a demand of `api-verison/3.0` means the extension works with Team Services and Team Foundation Server 2017 RTM and later: + +#### Example 8: Extension that uses version 3.0 APIs + +``` +{ + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "demands": [ + "api-version/3.0" + ] +} +``` + +Resolves to the following installation targets: + +1. `Microsoft.VisualStudio.Services.Cloud` +2. `Microsoft.TeamFoundation.Server`, version: `[15.0,)` + +#### Example 9: Integration that uses version 2.0 APIs + +``` +{ + "targets": [ + { + "id": "Microsoft.VisualStudio.Services.Integration" + } + ], + "demands": [ + "api-version/2.0" + ] +} +``` + +Resolves to the following installation targets: + +1. `Microsoft.VisualStudio.Services.Cloud.Integration` +2. `Microsoft.TeamFoundation.Server.Integration`, version: `[14.0,)` + +## Demands + +Demands let you specify capabilities and other features required by your extension. These demands can then be used to limit where your extension can be published or installed. + +In the future, demands will be used by the Visual Studio Marketplace to list the products and environments your extension is generally compatible with. This will help customers understand whether your extension will work with their version of Team Foundation Server (for example). + +Demands are specified in the extension manifest. For example: + +```json +{ + "demands": [ + "api-version/3.0", + "contribution/ms.vss-dashboards-web.widget-catalog" + ] +} +``` + +In this example, the extension demands version 3.0 of the APIs, which means it can only be installed to VSTS or Team Foundation Server 2017 RTM and later. It also requires the `ms.vss-dashboards-web` extension (and its `widget-catalog` contribution) to be installed (and enabled) in the collection before your extension can be installed. + +### Supported demands + +| Type | Description | Checked at publish? | Checked at install? | +|-----------------------------| ---------------------------------------------------- |:-------------------:|:-------------------:| +| `environment/cloud` | Requires running in a cloud environment | Yes | Yes | +| `environment/onprem` | Requires running in an on-premises environment | Yes | Yes | +| `api-version/{version}` | Requires a specific API version (minimum) | No | Yes | +| `extension/{id}` | Requires a specific extension be installed/enabled | No | Yes | +| `contribution/{id}` | Requires a specific contribution be available | No | Yes | +| `contributionType/{id}` | Requires a specific contribution type be available | No | Yes | + +#### Notes + +* `environment/cloud` and `environment/onprem` should only be used when your extension has topology-related requirements that require running in that particular environment. +* `extension`, `contribution`, and `contributionType` demands are evaluated at install time, and requires that the specified extension is already installed and enabled in the account/collection. + +## Files + +The `files` section is where you reference any files you wish to include in your extension. You can add both folders and individual files: + +```json +{ + "files": [ + { + "path": "hello-world.html", "addressable": true + }, + { + "path": "scripts", "addressable": true + }, + { + "path": "images/logo.png", "addressable": true, "packagePath": "/" + } + ] +} +``` + +### Properties + +Properties for the Files section: + +- **path** - Path of resource, root directory is where your manifest file is located +- **addressable** - Set to **true** if you want your file to be URL-addressable +- **packagePath** - Places your resource from disk to the specified value when packaged + +## Contributions + +Each contribution entry has the following properties: + +* **id** - A reference ID (string) for the contribution. Each contribution's ID must be unique within an extension. See [referencing contributions and types](#contributionIds) below. +* **type** - The ID of the contributionType of this contribution. +* **description** - (Optional) A string describing what the contribution is providing. +* **targets** - An array of contribution IDs that the contribution is targeting (contributing to). See [Targeting contributions](#contributionTargets). +* **properties** - (Optional) An object that includes properties for the contribution as defined in the contribution type. + +See the [contribution model overview](contributions-overview.md) topic for an overview about contributions. + + +## Contribution types + +Each contribution entry has the following properties: + +* **id** - A reference ID (string) for the contribution type. Each contribution type's ID must be unique within an extension. See [referencing contributions and types](#contributionIds) below. +* **name** - The friendly name of the contribution type. +* **description** - (Optional) A string describing in more detail what the contribution type is for. +* **properties** - (Optional) A dictionary that maps property names to property descriptions. These properties describe the required and optional properties that can be used by contributions of this type. + +Property descriptions have the following properties: + +* **description** - (Optional) A string describing what the property is used for. +* **required** - (Optional) A boolean value which if true indicates that the property is required for all contributions of this type. +* **type** - The type of value that the property can have. This may be: string, uri, guid, boolean, integer, double, dateTime, array, or object. + +See the [contribution model overview](contributions-overview.md) topic for an overview about contributions. + + +## Referencing contributions and types + +Contributions and contribution types are referenced by their identifiers. Contributions reference types through the `type` property, and reference other +contributions through the `targets` property. + +A *full* contribution reference includes the publisher identifier, extension identifier, and contribution/type identifier, separated by +a dot (.). For example: `ms.vss-web.hub` is the full identifier for the contribution with identifier of "hub" in the "vss-web" extension published +by the "ms" (Microsoft) publisher. + +*Relative* contribution references may be used within an extension manifest for a contribution's reference to another contribution or contribution +type within that same extension. In this case, the publisher and extension identifiers are NOT included, and the identifier is simply a dot (.) followed +by the contribution identifier. For example, ".hub" may be used within the "vss-web" extension mentioned above as a shortcut for "ms.vss-web.hub". + + +## Targeting contributions + +Some contributions act as containers that can be targeted by other contributions. A Hub Group and a Menu are examples of this. Hub contributions +can target Hub Groups. When a page is rendered, the web UI will show all Hub contributions that target the selected hub group. Hub groups themselves target a +hub group collection which defines a set of hub groups that show up in a given navigational area (e.g. project-level admin pages). + +Menus can be targeted by contributions of different types: action, hyperlink-action, and action-provider. Actions and hyperlink-actions provide single menu +item entries. An action-provider can provide multiple dynamic menu items. For a given menu, items are aggregated across all contributions (of any of these +types) that target that specific menu contribution. + + +## Marketplace Q&A - CustomerQnASupport property + +All extensions on the Visual Studio Marketplace have a Q&A section to allow one-on-one public conversations between extension users and publishers. Publishers can choose between Marketplace Q&A, GitHub issues, or custom Q&A URL for the Q&A section or disable Q&A in Marketplace using the CustomerQnASupport property in the manifest. + +**Default experience** (No changes to manifest are required) +- For extension with GitHub repository, Marketplace will redirect users in the Q&A section to the associated GitHub issues. +- For extension without GitHub repository, Marketplace Q&A is enabled. + +For a different experience than one of the default options use the **CustomerQnASupport** property in the manifest. + + +```json +{ + "CustomerQnASupport": { + "enableqna":"true", + "url": "http://uservoice.visualstudio.com" + } +} +``` + +### Properties + +Properties for the CustomerQnASupport section: + +- **enableqna** - boolean field, set to true for marketplace or custom Q&A; false for disabling Q&A +- **url** - string, URL for custom Q&A + + +### Examples showing usage of Q&A support + +#### Example 10: Extension using custom Q&A + +``` +{ + "CustomerQnASupport": { + "enableqna":"true", + "url": "http://uservoice.visualstudio.com" + } +} +``` +#### Example 11: Extension with GitHub repository but using Marketplace Q&A instead of GitHub issues + +``` +{ + "CustomerQnASupport": { + "enableqna":"true" + } +} +``` +#### Example 12: Extension disabling Q&A section + +``` +{ + "CustomerQnASupport": { + "enableqna":"false" + } +} +``` + +## Approved Badges +Due to security concerns, we only allow badges from trusted services. + +We allow badges from the following URL prefixes: + +* https://api.travis-ci.org/ +* https://badge.fury.io/ +* https://badges.frapsoft.com/ +* https://badges.gitter.im/ +* https://badges.greenkeeper.io/ +* https://cdn.travis-ci.org/ +* https://ci.appveyor.com/ +* https://codeclimate.com/ +* https://codecov.io/ +* https://coveralls.io/ +* https://david-dm.org/ +* https://gemnasium.com/ +* https://img.shields.io/ +* https://isitmaintained.com/ +* https://marketplace.visualstudio.com/ +* https://snyk.io/ +* https://travis-ci.com/ +* https://travis-ci.org/ +* https://vsmarketplacebadge.apphb.com/ +* https://www.bithound.io/ + + +If you have other badges you would like to use, please send us the details at vsmarketplace@microsoft.com and we're happy to take a look. diff --git a/docs/extend/develop/samples-overview.md b/docs/extend/develop/samples-overview.md new file mode 100644 index 00000000000..37d3a05a2ae --- /dev/null +++ b/docs/extend/develop/samples-overview.md @@ -0,0 +1,43 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Samples Overview | Extensions for Visual Studio Team Services +description: Overview of the available extension samples, including a description, the link to the repo and the contributions they touch +ms.assetid: 2639a776-d2f7-4866-b54f-1da3883b1b91 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Team Services extension samples + +You can get started developing your extension by working from an sample. +The Microsoft samples listed below show the capabilities of the extension framework and how to +contribute to various areas. Each sample illustrates one or more contributions. We've limited the +number of contributions for each sample to increase understanding of the extension framework. + +| Sample | Source | Contributions | Description | +|--------|-------|---------------|-------------| +| [Color Scale Work Item Form Custom Control](./custom-control.md) | [GitHub](https://github.com/Microsoft/vsts-sample-wit-custom-control) | Work Item Form Control | Add color coding to the values in a dropdown. | +| [Countdown Widget](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.CountdownWidget) | [GitHub](https://github.com/ALM-Rangers/Countdown-Widget-Extension) | Dashboard Widget | Every team has important dates to remember. Make them visible for your team on your dashboard! | +| [File Owner](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.FileOwner) | [GitHub](https://github.com/ALM-Rangers/File-Owner-Extension) | Context menu action (source explorer) | Allows users to see who owns a file from the Source Explorer | +| [Folder Management](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.FolderManagement) | [GitHub](https://github.com/ALM-Rangers/VSO-Extension-FolderManagement) | Context menu action (code explorer tree) | Create a folder in your source repositories from the code explorer tree. No need to clone the repository or install extra tools | +| Print Cards | [GitHub](https://github.com/ALM-Rangers/VSTS-Extension-PrintCards) | Toolbar action (Kanban board) | Print cards from your Kanban board for use on a physical board | +| [Release Management Tasks](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.utilitytasks) | [GitHub](https://github.com/openalm/Extension-UtilitiesPack) | Release Management tasks | Utility tasks for Release Management: Tokenizer, Powershell++, Shell++, Zip & Unzip, Powershell to rollback | +| [Roll-up Board](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.RollUpBoard) | [GitHub](https://github.com/ALM-Rangers/Roll-Up-Board-Widget-Extension) | Dashboard Widget | This widget shows the number of cards in each column of the Kanban board | +| [Sample Data](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.SampleDataWidget) | [GitHub](https://github.com/ALM-Rangers/Sample-Data-Widget-Extension) | Dashboard Widget | Lets you create and remove sample data in your project. | +| [Show Area Path Dependencies](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.ShowAreaPathDependencies) | [GitHub](https://github.com/ALM-Rangers/Show-Area-Path-Dependencies-Extension) | Hub | Provides a lightweight way to manage dependencies on other teams. | +| [State Model Visualization](https://marketplace.visualstudio.com/items?itemName=taavi-koosaar.StateModelVisualization) | [GitHub](https://github.com/melborp/StateModelVisualization) | Toolbar action (work item), Hub | Visualize the state model for a selected work item type. | +| [Tags MRU](https://marketplace.visualstudio.com/items?itemName=cschleiden.tags-mru) | [GitHub](https://github.com/cschleiden/vsts-extension-tags-mru) | Context menu action (work item), Notification (work item) | Keeps a list of the most recently used work item tags and allows adding them with a single click. | +| [Team Calendar](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.team-calendar) | [GitHub](https://github.com/Microsoft/vsts-team-calendar) | Hub, Event sources | Track events important to your team, view and manage days off, quickly see when sprints start and end, and more. | +| [User Voice UI](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vsts-uservoice-ui) | [GitHub](https://github.com/Microsoft/vsts-uservoice-ui-extension) | Group (work item form), Hub, Extension data | Shows rich data of the linked User Voice suggestions on the work item form. It covers the following techniques: calling external APIs, add tags to work item, add links to work item, resize of container. | +| [Work Item Details](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.WorkItemDetails) | [GitHub](https://github.com/ALM-Rangers/Work-Item-Details-Widget-Extension) | Context menu action (work item), Dashboard Widget | View details of work item(s) on your dashboard | +| [WSJF](https://marketplace.visualstudio.com/items?itemName=MS-Agile-SAFe.WSJF-extension) | [GitHub](https://github.com/Microsoft/vsts-wsjf-extension) | Notification (work item), Context menu action (work item) | Calculates the Weighted Shortest Job First (WSJF), which is a formula to calculate the backlog items with highest ROI. It is a popular prioritization feature in frameworks like [SAFe](http://www.scaledagileframework.com/wsjf/). | + +## How to get started + +To get you started as quickly as possible, there is a [seed project](https://github.com/cschleiden/vsts-extension-ts-seed-simple) available +that contains the files required to build an extension using TypeScript. To automate building, packaging and publishing the extension a grunt script is +added. + +If you are interested in a sample project that contains the majority of the contributions, see the [VSTS Sample Extensions](https://github.com/Microsoft/vsts-extension-samples) repository on GitHub. \ No newline at end of file diff --git a/docs/extend/develop/service-endpoints.md b/docs/extend/develop/service-endpoints.md new file mode 100644 index 00000000000..2515776170f --- /dev/null +++ b/docs/extend/develop/service-endpoints.md @@ -0,0 +1,296 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Service Endpoints | Extensions for Visual Studio Team Services +description: Browse through the places where your extension can extend Visual Studio Online. +ms.assetid: ad0ea9de-620e-4605-8fcd-3c1443b26d8c +ms.manager: douge +ms.author: elbatk +ms.date: 08/22/2016 +--- + +# Service Endpoints in Team Services + +Service endpoints are a way for Team Services to connect to external systems or services. They are a bundle of properties securely stored by Team Services which includes but is not limited to: + +- Service Name +- Description +- Server URL +- Certificates or Tokens +- User names and passwords + +Extensions are then able to leverage the service endpoint to acquire the stored details to perform the necessary operations on that service. +Follow this guide to create a new Service Point contribution and leverage it in your extension. + +## Tutorial Overview + +This tutorial walks through developing a service endpoint by creating an example extension for Team Services that includes: +- A custom service endpoint with data sources. This enables a build task or dashboard widget to call a REST endpoint on the service/server defined by the endpoint. +- A build task which defines 2 properties: The service endpoint & a picklist which has values populated from the REST endpoint data source. + +> Note: Service endpoints created by users will be created at the project level, not the account level. + +The steps involved in completing this tutorial are: +- [Step 1: Creating the extension manifest file](#step1) +- [Step 2: The build task definition, in the task.json file](#step2) + +> [!NOTE] +> This tutorial will refer to the home directory for your project as "home". + + + +## Step 1: Create the manifest file: `vss-extension.json` +The [manifest file](./manifest.md) defines the custom endpoint and links to the task.json manifest for the build task. + +In this tutorial, the manifest file creation is separated into three parts: +- [Create the basic manifest file](#createbasic) +- [Add a custom endpoint contribution](#customendpoint) +- [Add a build task](#buildtask) + + + +### Create basic manifest file +Create a json file (`vss-extension.json`, for example) in the `home` directory of your extension. + +```json +{ +"manifestVersion": 1, + "id": "service-endpoint-tutorial", + "version": "0.1.1", + "name": "Sample extension that leverages a service endpoint", + "description": "A sample VSTS extension which shows how to create a custom endpoint and dynamic build task parameters taking value from a REST API.", + "publisher": "francistotten", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "files": [ + { + "path": "BuildTaskFolder" + } + ] +} +``` + +> [!NOTE] +> You will need to update the `publisher` property. + +> [!NOTE] +> "BuildTaskFolder" is the path where we'll eventually place our build task definition + + + +### Add the custom endpoint contribution +Add the following `contributions` array underneath the `targets` array of the basic manifest content. + +```json + "contributions": [ + { + "id": "service-endpoint", + "description": "Service Endpoint type for Fabrikam connections", + "type": "ms.vss-endpoint.service-endpoint-type", + "targets": [ "ms.vss-endpoint.endpoint-types" ], + "properties": { + "name": "fabrikam", + "displayName": "Fabrikam server connection", + "url": { + "displayName": "Server Url", + "helpText": "Url for the Fabrikam server to connect to." + }, + "dataSources": [ + { + "name": "Fabrikam Projects", + "endpointUrl": "{{endpoint.url}}api/projects/index", + "resultSelector": "jsonpath:$[*].nm" + } + + ], + "authenticationSchemes": [ + { + "type": "ms.vss-endpoint.endpoint-auth-scheme-token" + }, + { + "type": "ms.vss-endpoint.endpoint-auth-scheme-basic", + "inputDescriptors": [ + { + "id": "username", + "name": "Username", + "description": "Username", + "inputMode": "textbox", + "validation": { + "isRequired": false, + "dataType": "string" + } + }, + { + "id": "password", + "name": "Password", + "description": "Password", + "inputMode": "passwordbox", + "isConfidential": true, + "validation": { + "isRequired": false, + "dataType": "string" + } + } + ] + } + + ], + "helpMarkDown": "Learn More" + } + }, + ], +``` + +If you have successfully added the service contribution correctly, you will see the Fabrikam endpoint when trying to add a new Service Endpoint to your Team Services account. + + +Go ahead and create a service endpoint using the Fabrikam endpoint. + + + + +### Add the build task contribution +Inside the `contributions` array from the previous step, add the following object to the end. + +```json +{ + "id": "build-task", + "description": "Task with a dynamic property getting data from an endpoint REST data source", + "type": "ms.vss-distributed-task.task", + "targets": [ "ms.vss-distributed-task.tasks" ], + "properties": { + "name": "BuildTaskFolder" + } + } +``` + +Note that the datasource endpointUrl is usually computed from the url of the endpoint (or a fixed url), and some additional values. +For this tutorial this REST call will return nothing and is meant to be replaced by any REST calls you wish to make to your service. + +It’s possible to use other parameters than the endpoint url for the REST URL, for instance some endpoint properties. +For instance, assuming that we had a property in the endpoint named subscriptionId, the REST URL could use it with the following syntax: $(endpoint.subscription) + + + +## Step 2: Create the build task: `task.json` +The `task.json` file describes your build task. + +> [!NOTE] +> Take a look at the [build task reference](./build-task-schema.md) to find the schema for the build task json file. + +Create a `task.json` file in your `BuildTaskFolder` directory, if you have not created this folder yet, do so now. + +```json +{ + "id": "6557a6d2-4caf-4247-99ea-5131286a8753", + "name": "build-task", + "friendlyName": "Build Task that uses the service endpoint", + "description": "Task with a dynamic property getting data from an endpoint REST data source", + "author": "francistotten", + "helpMarkDown": "Replace with markdown to show in help", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "demands": [], + "version": { + "Major": "0", + "Minor": "1", + "Patch": "1" + }, + "minimumAgentVersion": "1.95.0", + "instanceNameFormat": "Service Endpoint Build Task $(project)", + "inputs": [ + { + "name": "FabrikamService", + "type": "connectedService:Fabrikam", + "label": "Fabrikam service/server end point", + "defaultValue": "", + "required": true, + "helpMarkDown": "Select the Fabrikam end point to use. If needed, click on 'manage', and add a new Service Endpoint of type 'Fabrikam server connection'" + }, + { + "name": "project", + "type": "pickList", + "label": "Fabrikam Project", + "required": true, + "helpMarkDown": "Select the name of the Fabrikam Project to analyze.", + "properties": { + "EditableOptions": "True" + } + } + ], + "dataSourceBindings": [ + { + "target": "project", + "endpointId": "$(FabrikamService)", + "dataSourceName": "Fabfrikam Projects" + } + ], + "execution": { + "Node": { + "target": "sample.js", + "argumentFormat": "" + }, + "PowerShell3": { + "target": "sample.ps1" + } + } +} +``` + +### task.json components + +**The `FabrikamService` input object** +
      +This is the first field, of type connectedService:Fabrikam. connectedService expresses the fact that this is an endpoint type, +and Fabrikam is simply the name of the object. + +**The `project` input object** +
      +This is the second field. It’s a picklist +- This field is populated by a REST call. +- The values from the field “project” are taken from the “Projects” REST data source of the custom endpoint. +- This is expressed in the `dataSourceBindings` array + - The target is the name of the build task field to be populated (“project”) + - The endpointId is the name of the build task field containing the custom endpoint type + - The REST call is chosen by the dataSourceName + +If you've added the Build Task successfully, you should now see the Build Task when adding tasks to a Build Definition + + +Once you've added the Build Task to your definition, confirm that it can see the Fabrikam endpoint you created. +The projects dropdown in this tutorial will be blank since we are not using a real service. +Once you replace Fabrikam with your service, replace the Projects call with your own REST api call to leverage dynamic data inside your build task + + +## Authentication Documentation +The authentication scheme in a service endpoint determines the credentials that would be used to connect to the external service. Check out the +[authentication schemes documentation](./auth-schemes.md) for more information and to see the following authentication schemes: +- Basic authentication +- Token based authentication +- Certificate based authentication +- No authentication + + +## Next Steps: + +Now that you've written your extension, the next steps are to Package, Publish, and Install your extension. You can also check out the +documentation for Testing and Debugging your extension. + +
      diff --git a/docs/extend/develop/static-content.md b/docs/extend/develop/static-content.md new file mode 100644 index 00000000000..b2e9dd415af --- /dev/null +++ b/docs/extend/develop/static-content.md @@ -0,0 +1,80 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Static Content Hosting for Extension Content | Extensions for Visual Studio Team Services +description: Options for hosting static content required by your extension. +ms.assetid: 0bf474c9-1511-4889-9d91-fc954abdcd6a +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Static content hosting + +You have the option of hosting static content for your extension (like HTML, CSS, and JavaScript files) on your own service, a third-party hosting service (like Azure or Heroku), or on VSTS directly. + +## Host on Visual Studio Team Services + +In this model, static content is packaged with your extension's .vsix file and is served from a public endpoint at `https://publisher.gallery.vsassets.io`. + +Having VSTS host your extension's static content is useful when you are simply enhancing or decorating data from Visual Studio Team Services. It does not require you (the extension publisher) to setup, manage, or pay for hosting services for your extension + +### Steps + +1. In your extension manifest file, specify the files you want to include via the `files` property: + ```json + { + "files": [ + { + "path": "scripts", "addressable": true + }, + { + "path": "images/extra/icon1.png", "addressable": true + } + ] + } + ``` +2. Remove the `baseUri` property (if set) from your extension manifest. +3. Package your extension ([steps](../publish/command-line.md)) +4. Publish (or re-publish) your extension ([steps](../publish/overview.md)) + +
      + **Important:** Make sure to increment the version of your extension when you make changes to static content files included in your .vsix. +
      + +Keep in mind: + +* The value specified by the `path` attribute can be a folder or individual file. If a folder, the entire folder (and any sub-folders) are included. +* The `addressable` attribute is important and is what tells Visual Studio Online to make the file(s) URL addressable. +* All `addressable` asset requests are case sensitive. If the request for an asset has a different case than the actual uploaded asset, it will +result in a HTTP 404 (Not found) error. +* Not specifying a baseUri (or setting an empty value) tells Visual Studio Online at runtime to calculate the base URI as if your static content is hosted by Visual Studio Team Services. + +## Host on your own service (or a third-party service) + +In this model, static content is served from your own service and not included in your extension's .vsix file. + +### Steps + +1. Set the `baseUri` property in your extension manifest For example, assuming a value of `https://myservice.net/extension` and this hub contribution: + +``` + "baseUri": "https://myservice.net/extension", + "contributions": [ + { + "id": "Fabrikam.HelloWorld", + "type": "ms.vss-web.hub", + "targets": [ + "ms.vss-work-web.work-hub-group" + ], + "properties": { + "name": "Hello", + "uri": "hello-world.html" + } + } + ] +``` + +VSTS will load the contents of this hub when it is rendered at `https://myservice.net/extension/hello-world.html`. + + diff --git a/docs/extend/develop/styles-from-widget-sdk.md b/docs/extend/develop/styles-from-widget-sdk.md new file mode 100644 index 00000000000..a413632a8f9 --- /dev/null +++ b/docs/extend/develop/styles-from-widget-sdk.md @@ -0,0 +1,269 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Basic styles for widgets | Extensions for Visual Studio Team Services +description: Styles from Widget SDK to be used in widgets on dashboards in Visual Studio Team Services. +ms.assetid: E5CB346F-E3EA-4A47-B10C-FFC300766585 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Basic styles for your widgets + +We recommend you use the basic styles provided via the Widget SDK. Using these styles will help you quickly and easily create a widget that's consistent with the rest of the widgets on the dashboard. +To use these styles, add the below line inside the `VSS.require` block in the javascript code for your widget. + +```javascript + WidgetHelpers.IncludeWidgetStyles(); +``` + +This will pull a stylesheet by the name sdk-widget.css and include it in the iframe for your widget. It includes styles for font-family, font-size, margin and paddings for your widget. +It also includes styles for headings (h1, h2, h3 etc.), links, and more. + +Similarly, to use common styles in the widget configuration, include the line below inside the `VSS.require` block in the javascript code for your widget configuration. + +```javascript + WidgetHelpers.IncludeWidgetConfigurationStyles(); +``` +This will pull a stylesheet by the name sdk-widget-configuration.css and include it in the iframe for your widget configuration. +It includes styles for font-family, font-size and styles for common form elements like input, textarea, and select. + +> [!NOTE] +> For these styles to apply to your widget, you need to add a "widget" class on the HTML element that contains your widget. All styles from the sdk-widgets.css are scoped to this class. +Similarly, add a "widget-configuration" class on the HTML element that contains your widget configuration. All styles from the sdk-widget-configuration.css are scoped to this class. + +Download the [samples](https://github.com/Microsoft/vsts-extension-samples/tree/master/widgets) to get started or use the code snippets provided below. + +### Widget body, title and description + +By adding the class "widget" on the HTML element that contains your widget, you automatically get padding, font, and color for widget contents. + +You should always have a title for your widget. This helps the user identify your widget and its functionality at a glance. +Use `

      ` with class "title". This also helps people using screen readers to quickly identify the different widgets on the dashboard. + +![Widget with title and description](../_shared/procedures/_img/styles-from-widget-sdk/title-description.png) + +> **Design principle:** Widgets should have a title. Use the `

      ` tag with the "title" class. + +Sometimes you might want to provide a small description about your widget or how to use it. +In such cases, use the class "description" on the HTML element you wish to use for widget description. + +> **Design principle:** Use the "description" class for the widget description. Descriptions should make sense even when read out of the widget context. + +```html +
      +

      Widget title

      +
      The widget description is used to describe the widget. It makes sense even when read outside of the widget context.
      +

      Place widget content here.

      +
      +``` + +### Widget titles and subtitles + +Subtitles are text that supplement the title. They may not always make sense when read out of context without reading the title. + +![Widget with title and subtitle](../_shared/procedures/_img/styles-from-widget-sdk/title-subtitle.png) + +> **Design principle:** Use the "subtitle" class to provide more information about the widget. It may not make sense out of the widget context. + +Use the below structure and classes "title", "inner-title" and "subtitle" to get the right font, color and margins for a title and subtitle combination. The title will get a greater font-size than the subtitle. The subtitle will have a subdued color relative to the title or rest of the widget. + +```html +
      +

      +
      Widget title
      +
      Widget subtitle
      +

      +
      + Place widget content here. +
      +
      +``` +You can use any html element for the title and subtitle combination. Here are some tips: +* When you need the subtitle to appear in the same line as the title, use an inline element like `` +* When you need the subtitle to appear in the next line from the title, use a block element like `
      ` + +### Display hyperlinks, icons, text, and subtext in a widget + +Some widgets have links which have an icon, text and subtext per link. + +![Widget that has link with icon and text](../_shared/procedures/_img/styles-from-widget-sdk/link-with-icon-text.png) + +> **Design principle:** Use links with an icon and subtext to make the purpose of the link obvious to the user. Ensure that the icon symbolizes the link's target. + +To get the same look and feel, use the below HTML structure and classes. + +```html +
      +

      Widget title

      +
      +

      Place your content here.

      + + +
      + Primary link text +
      Link subtext
      +
      +
      +
      +
      +``` + +### Display counters in a widget + +The primary purpose of some widgets is to display the count of some data. The Query Tile and the Code Tile widgets are examples in this category of widgets. +To use the same styles as these widgets, add the "big-count" class on the HTML element holding the number to get the big font that is used by the Query Tile and the Code Tile widgets. + +![Counter Widget](../_shared/procedures/_img/styles-from-widget-sdk/counter.png) + +> **Design principle:** Use the "big-count" class to present the user with numbers in large font. It should not be used with non-numeric characters. + +```html +
      +

      Counter widget

      +
      223
      +
      Additional text
      +
      +``` + +### Make a widget a hyperlink + +Clicking anywhere on some widgets will redirect the user to another page. To have your widget do the same, you can: + +* Add an anchor tag as a child to the HTML element that acts as your widget container. +* Put all your widget content inside the anchor tag. +* Since your widget will be hosted in an iframe, add the attribute "target" with value "_blank" to the anchor tag so that the link opens in a new tab/window instead of inside the same iframe. +* In addition to the "widget" class, add the "clickable" class to the widget container. + +Your widget content will get the correct colors even though they are inside an anchor tag. Without the "clickable" class, the default blue color is forced on all text inside the widget. +The widget will also get a custom visual cue on focus to help users who use the keyboard to navigate the dashboard. + +> **Design principle:** Use the "clickable" class and the `` tag to make the entire widget clickable. This is ideal when your widget is a summary of data available on another page. + + +```html + +``` + +### Styles for common form elements in widget configuration + +To use basic styles from the widget sdk for common form elements in widget configuration, follow these guidelines: + +| Form element | Wrapping element | Guidelines | +|---------------------|------------------|------------| +| Simple text box | `div` with class "single-line-text-input". | Use a `label` element to add text next to the text box. Use the `input` element to create a text box. Use the `placeholder` attribute to provide placeholder text. | +| Checkbox | `fieldset` with class "checkbox" | Use a `label` element to add text next to each checkbox. Use a `legend` element to caption the group of checkboxes. Use the `for` attribute on each `label` element to help screen readers understand the form element. | +| Radio button | `fieldset` with class "radio" | Use a `label` element to add text next to each radio button. Use a `legend` element to caption the group of radio buttons. Use the `for` attribute on each `label` element to help screen readers understand the form element. | +| Dropdown | `div` with class "dropdown" | Use a `label` element to add text next to the dropdown. If you want a dropdown occupying half the width, add class "half" to the wrapping `div` element. If you want to use the standard arrow icon from the sdk instead of the one provided by the browser, wrap the `select` element with another `div` with class "wrapper". | +| Multi-line text box | `div` with class "multi-line-text-input". | Use `label` element to label the `textarea` element used as multi-line text box. | + + + +The example below uses each of the form elements listed in the table. + +![Example for Widget Configuration](../_shared/procedures/_img/styles-from-widget-sdk/widget-configuration.png) + +```html +
      + +
      + + +
      + + +
      +``` + +### Display validation errors below a form element + +We recommend providing validation errors below the relevant form elements. +In order to display these messages in a manner consistent with 1st party widgets, add the following code snippet under each form element for which you want to show the error message. + +```html + + + + +``` + +The above will have the visibility hidden by default. Whenever you want to display an error message, find the corresponding "validation-error-text", add text to it and set `visibility:visible` on its parent. + +Example: +There is a simple text box where the user needs to type in a string. You need to show an error message if the text box is empty. + +![Example for Widget Configuration Error](../_shared/procedures/_img/styles-from-widget-sdk/widget-configuration-error.png) + + +The html for this would be: + +```html +
      +
      + + Type Here + + + + + +
      +
      +``` + +And the javascript code behind this would be: + +```javascript +var $singleLineInput = $(".single-line-text-input input"); +var $errorSingleLineInput = $(".single-line-text-input input .validation-error-text"); + +$singleLineInput.on("input", function(){ + if ($singleLineInput.val() == ""){ + $errorSingleLineInput.text("Please enter your name."); + $errorSingleLineInput.parent().css("visibility", "visible"); + return; + } + $errorSingleLineInput.parent().css("visibility", "hidden"); + }); + +``` + diff --git a/docs/extend/develop/ui-controls/_img/action_menubar.gif b/docs/extend/develop/ui-controls/_img/action_menubar.gif new file mode 100644 index 00000000000..8da356b2f38 Binary files /dev/null and b/docs/extend/develop/ui-controls/_img/action_menubar.gif differ diff --git a/docs/extend/develop/ui-controls/_img/basic_menubar.gif b/docs/extend/develop/ui-controls/_img/basic_menubar.gif new file mode 100644 index 00000000000..a3fc024564b Binary files /dev/null and b/docs/extend/develop/ui-controls/_img/basic_menubar.gif differ diff --git a/docs/extend/develop/ui-controls/_img/datetime_combo.gif b/docs/extend/develop/ui-controls/_img/datetime_combo.gif new file mode 100644 index 00000000000..02768bfd1b8 Binary files /dev/null and b/docs/extend/develop/ui-controls/_img/datetime_combo.gif differ diff --git a/docs/extend/develop/ui-controls/_img/hide_menubar.gif b/docs/extend/develop/ui-controls/_img/hide_menubar.gif new file mode 100644 index 00000000000..85530685765 Binary files /dev/null and b/docs/extend/develop/ui-controls/_img/hide_menubar.gif differ diff --git a/docs/extend/develop/ui-controls/_img/list_combo.gif b/docs/extend/develop/ui-controls/_img/list_combo.gif new file mode 100644 index 00000000000..4dfae39bb8c Binary files /dev/null and b/docs/extend/develop/ui-controls/_img/list_combo.gif differ diff --git a/docs/extend/develop/ui-controls/_img/multivalue_combo.gif b/docs/extend/develop/ui-controls/_img/multivalue_combo.gif new file mode 100644 index 00000000000..9081d8c4994 Binary files /dev/null and b/docs/extend/develop/ui-controls/_img/multivalue_combo.gif differ diff --git a/docs/extend/develop/ui-controls/_img/toggle_menubar.gif b/docs/extend/develop/ui-controls/_img/toggle_menubar.gif new file mode 100644 index 00000000000..175708b9629 Binary files /dev/null and b/docs/extend/develop/ui-controls/_img/toggle_menubar.gif differ diff --git a/docs/extend/develop/ui-controls/_img/tree_combo.gif b/docs/extend/develop/ui-controls/_img/tree_combo.gif new file mode 100644 index 00000000000..8a1a8c327b5 Binary files /dev/null and b/docs/extend/develop/ui-controls/_img/tree_combo.gif differ diff --git a/docs/extend/develop/ui-controls/comboo.md b/docs/extend/develop/ui-controls/comboo.md new file mode 100644 index 00000000000..4d32be09748 --- /dev/null +++ b/docs/extend/develop/ui-controls/comboo.md @@ -0,0 +1,368 @@ +--- +title: Use the Combo Control | Extensions for Visual Studio Team Services +description: Use the combo control to have an editable control with the drop down support like list, tree, date-time and multi-value. +ms.assetid: 03575E92-8FA7-7DC6-5699-2E5811A332CA +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use the combo control + +This page shows different samples about the combo control. There are TypeScript and JavaScript examples. + +For more details, [see the Combo Control API reference.](../../reference/client/controls/combo.md) + +## How to organize your code + +In the `home` folder for your project, create a `main.html` file with the following contents: + +``` html + + + + + + + + + + + +
      + + + +``` + +Ensure that the `VSS.SDK.js` file is inside the `sdk/scripts` folder so that the path is `home/sdk/scripts/VSS.SDK.js`. + +Put the following code snippets into a `main.js` file in a `scripts` folder, so that the path is `home/scripts/main.js`. + +## Combos + + +### Plain list combo +This sample shows combo of type `list`. It also shows how `change` delegate is used to populate another combo. +If the second combo does not have any source, its mode is changed to text to hide the unnecessary drop icon. + + + + +
      +
      +
      
      +import Controls = require("VSS/Controls");
      +import Combos = require("VSS/Controls/Combos");
      +
      +var container = $(".sample-container");
      +
      +var makeOptions = <Combos.IComboOptions>{
      +  width: "400px",
      +  source:
      +  ["Aston Martin", "Audi (3)", "Bentley", "BMW (2)", "Bugatti",
      +    "Ferrari", "Ford", "Honda", "Hyundai", "Kia", "Lamborghini",
      +    "Land Rover", "Lotus", "Maserati", "Mazda", "Mercedes",
      +    "Mitsubishi", "Nissan", "Porsche", "Toyota", "Volkswagen", "Volvo"],
      +  change: function () {
      +    var selected = this.getText();
      +    if (selected.indexOf("Audi") === 0) {
      +      modelCombo.setSource(["A3", "A4", "Q7"]);
      +      modelCombo.setMode("drop");
      +    }
      +    else if (selected.indexOf("BMW") === 0) {
      +      modelCombo.setSource(["325", "X5"]);
      +      modelCombo.setMode("drop");
      +    }
      +    else {
      +      modelCombo.setMode("text");
      +    }
      +    modelCombo.setText("");
      +  }
      +};
      +
      +var modelOptions = <Combos.IComboOptions>{
      +  width: "400px",
      +  mode: "text"
      +};
      +
      +// Make combo
      +$("<label />").text("Make:").appendTo(container);
      +Controls.create(Combos.Combo, container, makeOptions);
      +
      +// Model combo
      +$("<label />").text("Model:").appendTo(container);
      +var modelCombo = Controls.create(Combos.Combo, container, modelOptions);
      +
      +
      +
      +
      
      +VSS.require(["VSS/Controls", "VSS/Controls/Combos"], function(Controls, Combos) {
      +  var container = $(".sample-container");
      +  var makeOptions = {
      +    width: "400px",
      +    source:
      +    ["Aston Martin", "Audi (3)", "Bentley", "BMW (2)", "Bugatti",
      +    "Ferrari", "Ford", "Honda", "Hyundai", "Kia", "Lamborghini",
      +    "Land Rover", "Lotus", "Maserati", "Mazda", "Mercedes",
      +    "Mitsubishi", "Nissan", "Porsche", "Toyota", "Volkswagen", "Volvo"],
      +    change: function () {
      +      var selected = this.getText();
      +      if (selected.indexOf("Audi") === 0) {
      +        modelCombo.setSource(["A3", "A4", "Q7"]);
      +        modelCombo.setMode("drop");
      +      }
      +      else if (selected.indexOf("BMW") === 0) {
      +        modelCombo.setSource(["325", "X5"]);
      +        modelCombo.setMode("drop");
      +      }
      +      else {
      +        modelCombo.setMode("text");
      +      }
      +      modelCombo.setText("");
      +    }
      +  };
      +  var modelOptions = {
      +    width: "400px",
      +    mode: "text"
      +  };
      +  
      + // Create the combo in a container element
      + $("<label />").text("Make:").appendTo(container);
      + var makeCombo = Controls.create(Combos.Combo, container, makeOptions);
      +  
      + // Create the combo in a container element
      + $("<label />").text("Model:").appendTo(container);
      + var modelCombo = Controls.create(Combos.Combo, container, modelOptions);
      + 
      +
      +
      + +
      + +
      + + +### Tree combo +This sample shows combo of type `tree` which displays its source hierarchically by supporting expand/collapse. It also supports search by node. + + + +
      +
      +
      
      +import Controls = require("VSS/Controls");
      +import Combos = require("VSS/Controls/Combos");
      +import TreeView = require("VSS/Controls/TreeView");
      +
      +var container = $(".sample-container");
      +
      +var treeOptions: Combos.IComboOptions = {
      +  type: TreeView.SearchComboTreeBehaviorName,
      +  width: "400px",
      +  sepChar: ">",
      +  source: [
      +    {
      +      text: "wit",
      +      children: [{ text: "platform", children: [{ text: "client" }, { text: "server" }] }, { text: "te" }]
      +    }, {
      +      text: "vc"
      +    }, {
      +      text: "webaccess", children: [{ text: "platform" }, { text: "agile" }, { text: "requirements" }]
      +    }, {
      +      text: "etm"
      +    }, {
      +      text: "build"
      +    }
      +  ],
      +  change: function () {
      +    commandArea.prepend($("<div />").text(this.getText()));
      +  }
      +};
      +
      +$("<label />").text("Area Path:").appendTo(container);
      +Controls.create(Combos.Combo, container, treeOptions);
      +var commandArea = $("<div style='margin:10px' />").appendTo(container);
      +
      +
      +
      +
      
      +VSS.require(["VSS/Controls", "VSS/Controls/Combos", "VSS/Controls/TreeView"], function(Controls, Combos, TreeView) {
      +  var container = $(".sample-container");
      +  var treeOptions = {
      +  type: TreeView.SearchComboTreeBehaviorName,
      +  width: "400px",
      +  sepChar: ">",
      +  source: [
      +    {
      +      text: "wit",
      +      children: [{ text: "platform", children: [{ text: "client" }, { text: "server" }] }, { text: "te" }]
      +    }, {
      +      text: "vc"
      +    }, {
      +      text: "webaccess", children: [{ text: "platform" }, { text: "agile" }, { text: "requirements" }]
      +    }, {
      +      text: "etm"
      +    }, {
      +      text: "build"
      +    }
      +  ],
      +  change: function () {
      +    commandArea.prepend($("<div />").text(this.getText()));
      +  }
      +};
      +
      +$("<label />").text("Area Path:").appendTo(container);
      +var makeCombo = Controls.create(Combos.Combo, container, treeOptions);
      +var commandArea = $("<div style='margin:10px' />").appendTo(container);
      +
      +
      +
      + +
      + +
      + + +### Datetime picker +This sample shows the usage of combo by type `date-time`. Please note that selecting different day from the picker will preseverse the hour value. + + + +
      +
      +
      
      +import Controls = require("VSS/Controls");
      +import Combos = require("VSS/Controls/Combos");
      +
      +var container = $(".sample-container");
      +
      +var dateTimeOptions:Combos.IDateTimeComboOptions = {
      +  value: "Tuesday, September 29, 1982 8:30:00 AM",
      +  type: "date-time",
      +   dateTimeFormat: "F",
      +  width: 300,
      +  change: function () {
      +    commandArea.prepend($("<div />").text(dateTimeCombo.getValue().toString()));
      +  }
      +};
      +
      +$("<label />").text("Select your birthday:").appendTo(container);
      +
      +var dateTimeCombo = Controls.create(Combos.Combo, container, dateTimeOptions);
      +var commandArea = $("<div style='margin:10px' />").appendTo(container);
      +
      +
      +
      +
      
      +VSS.require(["VSS/Controls", "VSS/Controls/Combos"], function(Controls, Combos) {
      +  var container = $(".sample-container");
      +
      +
      +var dateTimeOptions = {
      +  value: "Tuesday, September 29, 1982 8:30:00 AM",
      +  type: "date-time",
      +  dateTimeFormat: "F",
      +  width: 300,
      +  change: function () {
      +    commandArea.prepend($("<div />").text(dateTimeCombo.getValue().toString()));
      +  }
      +};
      +
      +$("<label />").text("Select your birthday:").appendTo(container);
      +
      +var dateTimeCombo = Controls.create(Combos.Combo, container, dateTimeOptions);
      +var commandArea = $("<div style='margin:10px' />").appendTo(container);
      +});
      +
      +
      +
      + +
      + +
      + + + +### Multivalue combo +This sample shows the usage of combo by type `multi-value`. + + + +
      +
      +
      
      +import Controls = require("VSS/Controls");
      +import Combos = require("VSS/Controls/Combos");
      +
      +var container = $(".sample-container");
      +
      +var multiValueOptions: Combos.IComboOptions = {
      +  type: "multi-value",
      +  width: 500,
      +  source: [
      +    "English", "Chinese", "German", "Turkish", "Spanish",
      +    "Japanese", "Korean", "Russian", "Portuguese", "French",
      +    "Italian", "Arabic"],
      +  change: function () {
      +    // Displaying the selected value
      +    commandArea.prepend($("<div />").text(this.getText()));
      +  }
      +};
      +
      +$("<label />").text("Select the supported languages:").appendTo(container);
      +
      +var multiValueCombo = Controls.create(Combos.Combo, container, multiValueOptions);
      +var commandArea = $("<div style='margin:10px' />").appendTo(container);
      +
      +
      +
      +
      
      +VSS.require(["VSS/Controls", "VSS/Controls/Combos"], function(Controls, Combos) {
      +  var container = $("#combo-container");
      +
      +  var multiValueOptions = {
      +    type: "multi-value",
      +    width: 500,
      +    source: [
      +      "English", "Chinese", "German", "Turkish", "Spanish",
      +      "Japanese", "Korean", "Russian", "Portuguese", "French",
      +      "Italian", "Arabic"],
      +    change: function () {
      +      // Displaying the selected value
      +      commandArea.prepend($("<div />").text(this.getText()));
      +    }
      +};
      +
      +$("<label />").text("Select the supported languages:").appendTo(container);
      +
      +var multiValueCombo = Controls.create(Combos.Combo, container, multiValueOptions);
      +var commandArea = $("<div style='margin:10px' />").appendTo(container);
      +});
      +
      +
      +
      + +
      + +
      \ No newline at end of file diff --git a/docs/extend/develop/ui-controls/configure.md b/docs/extend/develop/ui-controls/configure.md new file mode 100644 index 00000000000..a87de3496bb --- /dev/null +++ b/docs/extend/develop/ui-controls/configure.md @@ -0,0 +1,41 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Configure UI Controls | Extensions for Visual Studio Team Services +description: How to configure UI controls in your extension for Visual Studio Team Services. +ms.assetid: D013BBD0-CC9E-538F-39BD-9433AFCC7A6D +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Configure UI Controls + +This example shows the steps before you can add a control to the hub that we created in [Add a hub](../add-hub.md). + +1. [Get the Client SDK](https://github.com/Microsoft/vss-sdk) and add it to your project. + + ``` + sdk/scripts/VSS.SDK.js + ``` + +2. Reference the SDK from your HTML page. + + ```html + + Sample app + + + ``` + +[!INCLUDE [Control](../../_shared/procedures/use-a-control-js.md)] + +## Try these next +* [Use the grid control](./grido.md) +* [Use the menu control](./menubaro.md) +* [Use the treeview control](./treeviewo.md) +* [Use the combo control](./comboo.md) +* [Use the modal dialog control](./modaldialogo.md) +* [Use the splitter control](./splittero.md) +* [Use the wait control](./waitcontrolo.md) +* [Use the pivot filter control](./pivotfiltero.md) diff --git a/docs/extend/develop/ui-controls/grido.md b/docs/extend/develop/ui-controls/grido.md new file mode 100644 index 00000000000..982731591d6 --- /dev/null +++ b/docs/extend/develop/ui-controls/grido.md @@ -0,0 +1,694 @@ +--- +title: Use the Grid Control | Extensions for Visual Studio Team Services +description: Use the grid control to show rows and columns items that can be sorted, resized and moved in your app for Visual Studio Team Services. +ms.assetid: 9933E798-3D75-A5FD-919E-F38EA313872B +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use the grid control + +This page shows different samples about the grid control. + +**Go to [API Reference](../../reference/client/controls/grid.md) for more details.** + + +### Grid height, grid width, and columns +This sample shows the basic usage of the grid. Note that, `canSortBy` is set to false for "Column 2" which disables sorting for that column. + +``` javascript + import Controls = require("VSS/Controls"); + import Grids = require("VSS/Controls/Grids"); + + var container = $(".sample-container"); + + var gridOptions: Grids.IGridOptions = { + height: "100%", + width: "100%", + source: function () { + var result = [], i; + for (i = 0; i < 100; i++) { + result[result.length] = [i, "Column 2 text" + i, "Column 3 " + Math.random()]; + } + + return result; + } (), + columns: [ + { text: "Column 1", index: 0, width: 50 }, + { text: "Column 2", index: 1, width: 200, canSortBy: false }, + { text: "Column 3", index: 2, width: 450 }] + }; + + Controls.create(Grids.Grid, container, gridOptions); +``` + + +### Update grid source +This sample shows how the grid can be updated after it is initialized using `setDataSource`. +``` javascript + import Controls = require("VSS/Controls"); + import Grids = require("VSS/Controls/Grids"); + + var container = $(".sample-container"); + + var source = [ + { name: "Germany", population: 8e7 }, + { name: "Turkey", population: 75e6 }, + { name: "Russia", population: 15e7 }, + { name: "Spain", population: 45e6 } + ]; + + var gridOptions: Grids.IGridOptions = { + height: "300px", + width: "500px", + source: source, + columns: [ + { text: "Country", width: 200, index: "name" }, + { text: "Population", width: 200, index: "population" } + ] + }; + + var grid = Controls.create(Grids.Grid, container, gridOptions); + + // Update source 5 seconds later + window.setTimeout(() => { + source.push({ name: "Belgium", population: 1e7 }); + source.push({ name: "France", population: 64e6 }); + grid.setDataSource(source); + + }, 5000); +``` + + +### Context menu +This sample shows the usage of contextMenu for each row in the grid. The item associated with the context menu is obtained using `args.get_commandArgument().item` in `menuItemClick` function. +``` javascript + import Controls = require("VSS/Controls"); + import Grids = require("VSS/Controls/Grids"); + import Menus = require("VSS/Controls/Menus"); + + var container = $(".sample-container"); + + function menuItemClick(args) { + // Get the item associated with the context menu + var person = args.get_commandArgument().item; + switch (args.get_commandName()) { + case "open": + alert(JSON.stringify(person)); + break; + case "delete": + confirm("Are you sure you want to delete " + person[0] + "?"); + break; + } + } + + function getContextMenuItems(): Menus.IMenuItemSpec[] { + return [ + { + id: "open", + text: "Open Details" + }, + { separator: true }, + { + id: "delete", + text: "Delete", + icon: "icon-delete" + }, + ]; + } + + var gridOptions: Grids.IGridOptions = { + height: "300px", + width: "500px", + source: [ + ["Julie E. Baker", new Date(1946, 3, 24), "B+"], + ["Patrica B. Allen", new Date(1991, 1, 28), "AB+"], + ["Scott A. Reeves", new Date(1984, 1, 29), "0+"], + ["Debra D. Carter", new Date(1962, 7, 2), "A+"], + ["Shari A. Lefebvre", new Date(1951, 7, 25), "0+"] + ], + columns: [ + { text: "Name", width: 200 }, + { text: "Date of Birth", width: 100, format: "d" }, + { text: "Blood Type", width: 100 } + ], + gutter: { + contextMenu: true + }, + contextMenu: { + items: getContextMenuItems(), + executeAction: menuItemClick, + arguments: (contextInfo) => { + return { item: contextInfo.item }; + } + } + }; + + Controls.create(Grids.Grid, container, gridOptions); +``` + + +### Open row details +This sample shows how an action can be executed when a row is opened. `openRowDetail` delegate is executed when the row is double clicked or enter key is hit when a row has the focus. +``` javascript + import Controls = require("VSS/Controls"); + import Grids = require("VSS/Controls/Grids"); + + var container = $(".item-list"); + + var gridOptions: Grids.IGridOptions = { + height: "100%", + width: "100%", + source: [ + { fn: "Julie E. Baker", dob: new Date(1946, 3, 24), nationality: "US" }, + { fn: "Patrica B. Allen", dob: new Date(1991, 1, 28), nationality: "CA" }, + { fn: "Scott A. Reeves", dob: new Date(1984, 1, 29), nationality: "CA" }, + { fn: "Debra D. Carter", dob: new Date(1962, 7, 2), nationality: "CA" }, + { fn: "Shari A. Lefebvre", dob: new Date(1951, 7, 25), nationality: "US" }, + { fn: "Ahmet Yilmaz", dob: new Date(1965, 1, 2), nationality: "TR" }, + { fn: "Albert Einstein", dob: new Date(1879, 2, 14), nationality: "DE" }, + { fn: "Bastian Schweinsteiger", dob: new Date(1984, 7, 1), nationality: "DE" } + ], + columns: [ + { text: "Full Name", index: "fn", width: 200 }, + { text: "Date of Birth", index: "dob", width: 100, format: "d" } + ], + openRowDetail: (index: number) => { + // Double clicking row or hitting enter key when the row is selected + // will cause this function to be executed + var person = grid.getRowData(index); + + // Display item details + $(".item-details").text(JSON.stringify(person)); + } + }; + + var grid = Controls.create(Grids.Grid, container, gridOptions); +``` + +### Hierarchy +By default first column is indented. Setting `indent: true` for a particular column will cause that column to have indentation for hierarchy. See column options in the below sample. +Settings `collapsed: true` will get a parent item to be displayed collapsed. To update the data source, use `gridSource.update(newItems);`. +``` javascript + import Controls = require("VSS/Controls"); + import Grids = require("VSS/Controls/Grids"); + + var container = $(".sample-container"); + + var gridItems: Grids.IGridHierarchyItem[] = [ + { id: "001", name: "Baking" }, + { + id: "002", name: "Beverages", children: [ + { id: "003", name: "Coffee" }, + { + id: "004", name: "Tea", collapsed: true, children: [ + { id: "005", name: "Green Tea" }, + { id: "006", name: "Black Tea" }, + { id: "007", name: "Herbal Tea" }, + { id: "008", name: "Fruit Tea" }, + { id: "009", name: "Decaffeinated" } + ] + }, + { id: "010", name: "Water" }, + { id: "011", name: "Hot Cocoa" }, + { + id: "012", name: "Sports & Energy Drinks", children: [ + { id: "013", name: "Liquids" }, + { id: "014", name: "Energy" }, + { id: "015", name: "Specialty" }, + { id: "016", name: "Other" } + ] + }, + { id: "017", name: "Soft Drinks" } + ] + }, + { id: "018", name: "Frozen Foods" }, + { id: "019", name: "Candy" } + ]; + + var gridOptions: Grids.IGridOptions = { + height: "600px", + width: "450px", + columns: [ + { text: "Id", index: "id", width: 60 }, + { text: "Product Name", index: "name", width: 200, indent: true } + ] + }; + + var grid = Controls.create(Grids.Grid, container, gridOptions); + var gridSource = new Grids.GridHierarchySource(gridItems); + grid.setDataSource(gridSource); +``` + + +### Conditional formatting +This sample shows the customization of the grid cells. "Total" column is a calculated column and styled differently in `getCellContents` method. +``` javascript + import Controls = require("VSS/Controls"); + import Grids = require("VSS/Controls/Grids"); + import Date_Utils = require("VSS/Utils/Date"); + import Number_Utils = require("VSS/Utils/Number"); + + var container = $(".sample-container"); + + function getColumns() { + return [ + { + index: "region", + text: "Region", + width: 80 + }, + { + index: "rep", + text: "Representative", + width: 80 + }, + { + index: "orderDate", + text: "Order Date", + width: 100, + getCellContents: function ( + rowInfo, + dataIndex, + expandedState, + level, + column, + indentIndex, + columnOrder) { + + var orderDate = this.getColumnValue(dataIndex, column.index); + return $("
      ") + .width(column.width || 100) + .text(orderDate ? Date_Utils.localeFormat(orderDate, "y") : ""); + } + }, + { + index: "item", + text: "Item", + width: 80 + }, + { + index: "unit", + text: "Units", + width: 60 + }, + { + index: "cost", + text: "Cost", + width: 60, + getCellContents: function ( + rowInfo, + dataIndex, + expandedState, + level, + column, + indentIndex, + columnOrder) { + + var cost = this.getColumnValue(dataIndex, "cost") || 0; + return $("
      ") + .width(column.width || 150) + .text(Number_Utils.localeFormat(cost, "C")); + } + }, + { + index: "total", + text: "Total", + width: 150, + getCellContents: function ( + rowInfo, + dataIndex, + expandedState, + level, + column, + indentIndex, + columnOrder) { + + var unit = this.getColumnValue(dataIndex, "unit") || 0, + cost = this.getColumnValue(dataIndex, "cost") || 0, + total = unit * cost; + + return $("
      ") + .css("font-weight", "bold") + .css("font-size", "11pt") + .css("color", total >= 300 ? "red" : "green") + .width(column.width || 100) + .text(Number_Utils.localeFormat((unit * cost), "C")); + }, + comparer: function (column, order, item1, item2) { + var total1 = (item1.unit || 0) * (item1.cost || 0), + total2 = (item2.unit || 0) * (item2.cost || 0); + + return total1 - total2; + } + } + ]; + } + + function getSortOder() { + return [{ index: "orderDate", order: "asc" }]; + } + + function getDataSource() { + return [ + { orderDate: new Date(2010, 0, 6), region: 'Quebec', rep: 'Jones', item: 'Pencil', unit: 95, cost: 1.99 }, + { orderDate: new Date(2010, 0, 23), region: 'Ontario', rep: 'Kivell', item: 'Binder', unit: 50, cost: 19.99 }, + { orderDate: new Date(2010, 1, 9), region: 'Ontario', rep: 'Jardine', item: 'Pencil', unit: 36, cost: 4.99 }, + { orderDate: new Date(2010, 1, 26), region: 'Ontario', rep: 'Gill', item: 'Pen', unit: 27, cost: 19.99 }, + { orderDate: new Date(2010, 2, 15), region: 'Alberta', rep: 'Sorvino', item: 'Pencil', unit: 56, cost: 2.99 }, + { orderDate: new Date(2010, 3, 1), region: 'Quebec', rep: 'Jones', item: 'Binder', unit: 60, cost: 4.99 }, + { orderDate: new Date(2010, 3, 18), region: 'Ontario', rep: 'Andrews', item: 'Pencil', unit: 75, cost: 1.99 }, + { orderDate: new Date(2010, 4, 5), region: 'Ontario', rep: 'Jardine', item: 'Pencil', unit: 90, cost: 4.99 }, + { orderDate: new Date(2010, 4, 22), region: 'Alberta', rep: 'Thompson', item: 'Pencil', unit: 32, cost: 1.99 }, + { orderDate: new Date(2010, 5, 8), region: 'Quebec', rep: 'Jones', item: 'Binder', unit: 60, cost: 8.99 }, + { orderDate: new Date(2010, 5, 25), region: 'Ontario', rep: 'Morgan', item: 'Pencil', unit: 90, cost: 4.99 }, + { orderDate: new Date(2010, 6, 12), region: 'Quebec', rep: 'Howard', item: 'Binder', unit: 29, cost: 1.99 }, + { orderDate: new Date(2010, 6, 29), region: 'Quebec', rep: 'Parent', item: 'Binder', unit: 81, cost: 19.99 } + ]; + } + + var gridOptions: Grids.IGridOptions = { + width: "100%", + height: "100%", + columns: getColumns(), + sortOrder: getSortOder(), + source: getDataSource() + }; + + Controls.create(Grids.Grid, container, gridOptions); +``` + + +### Drag & drop within grid +This sample shows dragging grid rows and dropping them to the same grid which basically changes the ordering of grid item. + +``` css + .row-drag-helper { + background-color: orange; + padding: 5px; + cursor: move; + padding-left: 30px; + } + + .lower-drop-guide { + border-bottom-color: orange; + } + + .upper-drop-guide { + border-top-color: orange; + } +``` + +``` javascript + import Controls = require("VSS/Controls"); + import Grids = require("VSS/Controls/Grids"); + + var container = $(".sample-container"); + + interface DragStartInfo extends Offset { + dataIndex: number; + canvasWidth: number; + } + + interface DropTargetInfo { + dataIndex: number; + below: boolean; + } + + interface MoveCompleteDelegate { + (oldIndex: number, newIndex: number): void; + } + + interface Offset { + left: number; + top: number; + } + + class DragDropHandler { + private _gridCanvas: JQuery; + private _gridRowHeight: number; + private _cursorOffset: Offset; + private _dragStartInfo: DragStartInfo; + private _lastDropTarget: JQuery; + + constructor( + public grid: Grids.Grid, + public dragdropScope: string, + public dragdropTextProvider: (element: any) => string, + public moveCompleteDelegate: MoveCompleteDelegate) { + + this.grid.setupDragDrop(this._getDraggableOptions(), this._getDroppableOptions()); + this._gridCanvas = this.grid.getElement().find(".grid-canvas"); + this._gridRowHeight = this.grid._rowHeight || 1; + } + + private _resetLastDropTarget(): void { + if (this._lastDropTarget) { + this._lastDropTarget.removeClass("upper-drop-guide lower-drop-guide"); + this._lastDropTarget = null; + } + } + + private _getRowDataIndex(offset: Offset, dragStartInfo: DragStartInfo): DropTargetInfo { + var canvasScrollTop = this._gridCanvas.scrollTop(), + canvasScrollLeft = this._gridCanvas.scrollLeft(), + offset = { + top: offset.top - dragStartInfo.top + canvasScrollTop + this._cursorOffset.top, + left: offset.left - dragStartInfo.left + canvasScrollLeft + this._cursorOffset.left + }; + + // The the left or right of the canvas, invalid drop + if (offset.left <= 0 || offset.left > dragStartInfo.canvasWidth) { + return null; + } + + var itemsHeight = this.grid._count * this._gridRowHeight; + // Above or below the canvas, invalid drop + if (offset.top <= 0 || offset.top > itemsHeight) { + return null; + } + + var dataIndex = Math.floor((offset.top - 1) / this._gridRowHeight); + // Dragged item and drop target is same, invalid drop + if (dataIndex === dragStartInfo.dataIndex) { + return null; + } + + // Valid drop, return index of the drop target + return { + dataIndex: dataIndex, + below: dataIndex > dragStartInfo.dataIndex + }; + + } + + private _getDraggableOptions(): any { + this._cursorOffset = { left: 12, top: 12 }; + + return { + cursorAt: this._cursorOffset, + axis: "", + appendTo: document.body, + scroll: false, + scrollables: [".grid-canvas"], + scrollablesAxis: "y", + scope: this.dragdropScope, + distance: 10, + helper: (evt: JQueryEventObject, ui: any) => { + var rowData = this.grid.getRowData(ui.draggingRowInfo.dataIndex); + return $("
      ") + .addClass("row-drag-helper") + .text(this.dragdropTextProvider(rowData)); + }, + start: (evt: JQueryEventObject, ui: any) => { + this._dragStartInfo = { + top: ui.offset.top, + left: ui.offset.left, + dataIndex: ui.draggingRowInfo.dataIndex, + canvasWidth: this._gridCanvas.width() + }; + }, + stop: (evt: JQueryEventObject, ui: any) => { + this._dragStartInfo = null; + this._resetLastDropTarget(); + }, + drag: (evt: JQueryEventObject, ui: any) => { + if (this._dragStartInfo) { + this._resetLastDropTarget(); + var dropTargetInfo = this._getRowDataIndex(ui.offset, this._dragStartInfo); + if (dropTargetInfo) { + this._lastDropTarget = this.grid.getRowInfo(dropTargetInfo.dataIndex).row; + this._lastDropTarget.addClass(dropTargetInfo.below ? "lower-drop-guide" : "upper-drop-guide"); + } + } + } + }; + } + + private _getDroppableOptions(): any { + return { + hoverClass: "", + tolerance: "pointer", + scope: this.dragdropScope, + drop: (evt: JQueryEventObject, ui: any) => { + var oldIndex = ui.draggingRowInfo.dataIndex, + newIndex = ui.droppingRowInfo.dataIndex; + + // If different than selected index, perform move operation + if (oldIndex !== newIndex && $.isFunction(this.moveCompleteDelegate)) { + this.moveCompleteDelegate(oldIndex, newIndex); + } + } + }; + } + } + + var gridSource = function() { + var result = []; + for (var i = 0; i < 10; i++) { + result.push([i, "Text " + i, Math.random()]); + } + return result; + } (); + + var gridOptions: Grids.IGridOptions = { + header: false, + height: "300px", + width: "500px", + source: gridSource, + columns: [ + { text: "Column 1", index: 0, width: 80 }, + { text: "Column 2", index: 1, width: 100 }, + { text: "Column 3", index: 2, width: 200 }] + }; + + var grid = Controls.create(Grids.Grid, container, gridOptions); + var dragDrop = new DragDropHandler(grid, "my-scope", (item: any): string => { + return `Moving item: ${JSON.stringify(item) }`; + }, (oldIndex: number, newIndex) => { + // Remove dragged item from the list + var item = gridSource.splice(oldIndex, 1); + + // Add dragged item to the new location + gridSource.splice(newIndex, 0, item[0]); + + // Update grid + grid.setDataSource(gridSource); + + // Keep dropped item selected + grid.setSelectedDataIndex(newIndex); + }); +``` + + +### Drag & drop outside of the grid +This sample shows dragging grid rows and dropping them to an outside target. + +``` html +
      +``` + +``` css + .row-drag-helper { + background-color: orange; + padding: 5px; + cursor: move; + padding-left: 30px; + } + + .drop-target { + position: absolute; + top:20px; + right: 20px; + border: 2px dashed blue; + width: 300px; + height: 200px; + overflow: auto; + } + + + .drop-target::before { + content: "drop here"; + position:absolute; + right: 5px; + top: 0; + color: blue; + font-size: 14pt; + + } + + .drop-target.active { + background-color: lightgreen + } +``` + +``` javascript + import Controls = require("VSS/Controls"); + import Grids = require("VSS/Controls/Grids"); + + var container = $(".sample-container"); + var scope = "my-scope"; + + var gridOptions: Grids.IGridOptions = { + header: false, + height: "300px", + width: "500px", + source: function () { + var result = []; + for (var i = 0; i < 10; i++) { + result.push([i, "Text " + i, Math.random()]); + } + return result; + } (), + columns: [ + { text: "Column 1", index: 0, width: 80 }, + { text: "Column 2", index: 1, width: 100 }, + { text: "Column 3", index: 2, width: 200 }], + + draggable: { + cursorAt: { left: 12, top: 12 }, + axis: "", + containment: "", + appendTo: document.body, + revert: "invalid", + refreshPositions: true, + scroll: false, + scope: scope, + distance: 10, + helper: (evt: JQueryEventObject, ui: any) => { + var rowData = grid.getRowData(ui.draggingRowInfo.dataIndex); + var $helper = $("
      ") + .addClass("row-drag-helper") + .text(`Moving item: ${JSON.stringify(rowData[1]) }`); + + $helper.data("rowData", rowData); + return $helper; + } + } + }; + + var grid = Controls.create(Grids.Grid, container, gridOptions); + + $(".drop-target").droppable({ + scope: scope, + over: function (e, ui) { + var $dropTarget = $(e.target); + $dropTarget.addClass("active"); + }, + out: function (e, ui) { + var $dropTarget = $(e.target); + $dropTarget.removeClass("active"); + }, + drop: function (e, ui) { + var $dropTarget = $(e.target); + $dropTarget.removeClass("active"); + + var $helper = ui.helper; + var rowData = $helper.data("rowData"); + $("
      ").appendTo($dropTarget).text(JSON.stringify(rowData)); + } + }); +``` diff --git a/docs/extend/develop/ui-controls/menubaro.md b/docs/extend/develop/ui-controls/menubaro.md new file mode 100644 index 00000000000..8992fe547a1 --- /dev/null +++ b/docs/extend/develop/ui-controls/menubaro.md @@ -0,0 +1,355 @@ +--- +title: Use the Menubar Control | Extensions for Visual Studio Team Services +description: Used to display a menubar in your app for Visual Studio Team Services. +ms.assetid: 13A6E34D-BE7D-463E-570C-C27B4ACC2129 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use the menubar control + +This page shows different samples about the menubar control. + +**Go to [API Reference](../../reference/client/controls/menubar.md) for more details.** + + +### Basic menubar +This sample shows the basic usage of the toolbar. Notice how `text` is added to the separators which becomes a group text for sub menus. + + + +
      +
      +
      
      +import Controls = require("VSS/Controls");
      +import Menus = require("VSS/Controls/Menus");
      +  
      +var container = $(".sample-container");
      +
      +var menuItems: Menus.IMenuItemSpec[] = [
      +  { id: "file", text: "File", icon: "icon-pause", childItems: [
      +    { separator: true, text: "NEW" }, // Separator as group text
      +    { id: "new-tab", text: "New tab", icon: "icon-info" },
      +    { id: "new-file", text: "New file", icon: "icon-commented-file" },
      +    { separator: true, text: "SAVE" }, , // Separator as group text
      +    { id: "save-file", text: "Save file", icon: "icon-save" },
      +    { id: "save-file-close", text: "Save file & close", icon: "icon-save-close" },
      +    { separator: true}, // Default separator
      +    { id: "save-all", text: "Save all", icon: "icon-save-all" },
      +    { separator: true, text: "MISC"}, // Separator as group text
      +    { id: "recent-files", text: "Recent files", icon: "icon-play", childItems: [
      +      { id: "file1", text: "file1.txt", icon: "icon-restricted" },
      +      { id: "file2", text: "file2.txt", icon: "icon-restricted" },
      +      { id: "file3", text: "file3.txt", icon: "icon-restricted" }
      +    ]},
      +    { id: "exit", text: "Exit" }
      +  ]},
      +  { separator: true }, // Default separator
      +  { id: "settings", text: "Settings...", icon: "icon-settings" },
      +  { id: "help", text: "Help", icon: "icon-help", tag: "test" }   
      +];
      +
      +var menubarOptions = {
      +  items: menuItems
      +};
      +
      +var menubar = Controls.create(Menus.MenuBar, container, menubarOptions);
      +
      +
      +
      +
      
      +VSS.require(["VSS/Controls", "VSS/Controls/Menus"], function(Controls, Menus) {
      +  var container = $("#sample-container");
      +
      +
      +  var menuItems = [
      +    { id: "file", text: "File", icon: "icon-pause", childItems: [
      +      { separator: true, text: "NEW" }, // Separator as group text
      +      { id: "new-tab", text: "New tab", icon: "icon-info" },
      +      { id: "new-file", text: "New file", icon: "icon-commented-file" },
      +      { separator: true, text: "SAVE" }, , // Separator as group text
      +      { id: "save-file", text: "Save file", icon: "icon-save" },
      +      { id: "save-file-close", text: "Save file & close", icon: "icon-save-close" },
      +      { separator: true}, // Default separator
      +      { id: "save-all", text: "Save all", icon: "icon-save-all" },
      +      { separator: true, text: "MISC"}, // Separator as group text
      +      { id: "recent-files", text: "Recent files", icon: "icon-play", childItems: [
      +        { id: "file1", text: "file1.txt", icon: "icon-restricted" },
      +        { id: "file2", text: "file2.txt", icon: "icon-restricted" },
      +        { id: "file3", text: "file3.txt", icon: "icon-restricted" }
      +      ]},
      +      { id: "exit", text: "Exit" }
      +    ]},
      +    { separator: true }, // Default separator
      +    { id: "settings", text: "Settings...", icon: "icon-settings" },
      +    { id: "help", text: "Help", icon: "icon-help", tag: "test" }   
      +  ];
      +
      +  var menubarOptions = {
      +    items: menuItems
      +  };
      +
      +  var menubar = Controls.create(Menus.MenuBar, container, menubarOptions);
      +  
      + });
      +  
      +VSS.notifyLoadSucceeded();
      + 
      +
      +
      + +
      + +
      + + +### Actions of the menubar +This sample uses `executeAction` delegate to react menubar commands. + + + +
      +
      +
      
      +import Controls = require("VSS/Controls");
      +import Menus = require("VSS/Controls/Menus");
      +
      +var container = $(".sample-container");
      +
      +var menuItems: Menus.IMenuItemSpec[] = [
      +  { id: "new-tab", text: "New tab", icon: "icon-info" },
      +  { separator: true },
      +  { id: "save-all", text: "Save all", icon: "icon-save-all" },
      +  { separator: true },
      +  { id: "exit", text: "Exit", noIcon: true }
      +];
      +
      +var menubarOptions = {
      +  items: menuItems,
      +  executeAction: function (args) {
      +    var command = args.get_commandName();
      +    switch (command) {
      +        case "new-tab":
      +          alert("Opening new tab!");
      +          break;
      +        case "save-all":
      +          alert("Saving all!");
      +          break;
      +        case "exit":
      +          alert("Exit!");
      +          break;
      +        default:
      +          alert("Unhandled action: " + command);
      +          break;
      +    }
      +  }
      +};
      +
      +Controls.create(Menus.MenuBar, container, menubarOptions);
      +
      +
      +
      +
      
      +VSS.require(["VSS/Controls", "VSS/Controls/Menus"], function(Controls, Menus) {
      +  var container = $("#sample-container");
      +
      +
      +  var menuItems = [
      +    { id: "new-tab", text: "New tab", icon: "icon-info" },
      +    { separator: true },
      +    { id: "save-all", text: "Save all", icon: "icon-save-all" },
      +    { separator: true },
      +    { id: "exit", text: "Exit", noIcon: true }
      +  ];
      +
      +  var menubarOptions = {
      +    items: menuItems,
      +    executeAction: function (args) {
      +      var command = args.get_commandName();
      +      switch (command) {
      +          case "new-tab":
      +            alert("Opening new tab!");
      +            break;
      +          case "save-all":
      +            alert("Saving all!");
      +            break;
      +          case "exit":
      +            alert("Exit!");
      +            break;
      +          default:
      +            alert("Unhandled action: " + command);
      +            break;
      +      }
      +    }
      +  };
      +
      +  var menubar = Controls.create(Menus.MenuBar, container, menubarOptions);
      +  
      + });
      +  
      +VSS.notifyLoadSucceeded();
      + 
      +
      +
      + +
      + +
      + + +### Toggle enabled/disabled +This sample shows how the menu items can be enabled/disabled. +```html + +``` + + + +
      +
      +
      
      +import Controls = require("VSS/Controls");
      +import Menus = require("VSS/Controls/Menus");
      +
      +var container = $(".sample-container");
      +
      +var menuItems: Menus.IMenuItemSpec[] = [
      +  { id: "settings", text: "Settings...", icon: "icon-settings" },
      +  { id: "help", text: "Help", icon: "icon-help", tag: "test" } 
      +];
      +
      +var menubar = Controls.create(Menus.MenuBar, container, { items: menuItems });
      +
      +$("#btnToggle").click(function (e) {
      +  // Get the menu item first
      +  var settingsItem = menubar.getItem("settings");
      +
      +  // Update the disabled state
      +  menubar.updateCommandStates([
      +    { id: "settings", disabled: !(settingsItem.getCommandState() & Menus.MenuItemState.Disabled) },
      +  ]);
      +});
      +
      +
      +
      +
      
      +VSS.require(["VSS/Controls", "VSS/Controls/Menus"], function(Controls, Menus) {
      +  var container = $("#sample-container");
      +
      +
      +  var menuItems = [
      +    { id: "new-tab", text: "New tab", icon: "icon-info" },
      +    { separator: true },
      +    { id: "save-all", text: "Save all", icon: "icon-save-all" },
      +    { separator: true },
      +    { id: "exit", text: "Exit", noIcon: true }
      +  ];
      +
      + var menuItems = [
      +    { id: "settings", text: "Settings...", icon: "icon-settings" },
      +    { id: "help", text: "Help", icon: "icon-help", tag: "test" } 
      +  ];
      +
      +  var menubar = Controls.create(Menus.MenuBar, container, { items: menuItems });
      +
      +  $("#btnToggle").click(function (e) {
      +    // Get the menu item first
      +    var settingsItem = menubar.getItem("settings");
      +
      +    // Update the disabled state
      +    menubar.updateCommandStates([
      +      { id: "settings", disabled: !(settingsItem.getCommandState() & Menus.MenuItemState.Disabled) },
      +    ]);
      +  });
      +});
      +  
      +VSS.notifyLoadSucceeded();
      + 
      +
      +
      + +
      + +
      + + +### Toggle visible/hidden +This sample shows how the menu items can be made visible/hidden. +```html + +``` + + +
      +
      +
      
      +import Controls = require("VSS/Controls");
      +import Menus = require("VSS/Controls/Menus");
      +
      +var container = $(".sample-container");
      +
      +var menuItems: Menus.IMenuItemSpec[] = [
      +  { id: "settings", text: "Settings...", icon: "icon-settings" },
      +  { id: "help", text: "Help", icon: "icon-help", tag: "test" }
      +];
      +
      +var menubar = Controls.create(Menus.MenuBar, container, { items: menuItems });
      +
      +$("#btnToggle").click(function (e) {
      +  // Get the menu item first
      +  var helpItem = menubar.getItem("help");
      +
      +  // Update the command state
      +  menubar.updateCommandStates([
      +    { id: "help", hidden: !(helpItem.getCommandState() & Menus.MenuItemState.Hidden) }
      +  ]);
      +});
      +
      +
      +
      +
      
      +VSS.require(["VSS/Controls", "VSS/Controls/Menus"], function(Controls, Menus) {
      +  var container = $("#sample-container");
      +
      +
      + var menuItems = [
      +      { id: "settings", text: "Settings...", icon: "icon-settings" },
      +    { id: "help", text: "Help", icon: "icon-help", tag: "test" }
      +  ];
      +
      +  var menubar = Controls.create(Menus.MenuBar, container, { items: menuItems });
      +
      +  $("#btnToggle").click(function (e) {
      +    // Get the menu item first
      +    var helpItem = menubar.getItem("help");
      +
      +    // Update the command state
      +    menubar.updateCommandStates([
      +      { id: "help", hidden: !(helpItem.getCommandState() & Menus.MenuItemState.Hidden) }
      +    ]);
      +  });
      +});
      +  
      +VSS.notifyLoadSucceeded();
      + 
      +
      +
      + +
      + +
      diff --git a/docs/extend/develop/ui-controls/modaldialogo.md b/docs/extend/develop/ui-controls/modaldialogo.md new file mode 100644 index 00000000000..fe51121b417 --- /dev/null +++ b/docs/extend/develop/ui-controls/modaldialogo.md @@ -0,0 +1,142 @@ +--- +title: Use the Dialog Control | Extensions for Visual Studio Team Services +description: Use the modal dialog control to collect user input or display message in your app for Visual Studio Team Services. +ms.assetid: 84F3452D-9EB6-4908-AB52-07903644EDA8 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use the modal dialog control + +This page shows different samples about the modal dialog control. + +**Go to [API Reference](../../reference/client/controls/modaldialog.md) for more details.** + +
      +When using this modal dialog, dialog overlay will cover only the area dedicated to the extension due to iframe limitations. If you want the modal dialog cover whole window, see [Using host dialog](..\using-host-dialog.md). +
      + + +### Simple modal dialog +Below sample use the simplistic modal dialog usage where no button is displayed and `contextText` is specified. +``` javascript + import Dialogs = require("VSS/Controls/Dialogs"); + + $("#show").click(()=> { + Dialogs.show(Dialogs.ModalDialog, { + title: "My Dialog", + contentText: "This is the simplistic modal dialog.", + buttons: null + }); + }); +``` + + +### Displaying a form in a modal dialog +Below sample shows displaying a form in a modal dialog and getting the result when it is valid. + +``` html + +
        +
        + +

        + + +

        +

        + + +

        +

        + + +

        +
        +``` + +``` css + .dialog-content { + display: none; + } + + .dialog-content input { + border: 1px solid #ddd; + width: 100%; + outline: none; + padding: 2px; + } +``` + +``` javascript + import Dialogs = require("VSS/Controls/Dialogs"); + + $("#show").click(() => { + // Display the dialog + var dialog = Dialogs.show(Dialogs.ModalDialog, { + width: 300, + title: "Register", + content: $(".dialog-content").clone(), + okCallback: (result: any) => { + $("
      • ").text(result).appendTo(".person-list"); + } + }); + + var dialogElement = dialog.getElement(); + // Monitor input changes + dialogElement.on("input", "input",(e: JQueryEventObject) => { + // Set dialog result + dialog.setDialogResult(getValue(dialogElement)); + // Update enabled status of ok button + dialog.updateOkButton(!isEmpty(dialogElement)); + }); + }); + + function isEmpty(parent: JQuery): boolean { + return parent.find("input").filter((index: number, el: Element) => { + return !$(el).val(); + }).length > 0; + } + + function getValue(parent: JQuery): string { + return parent.find("input").map((index: number, el: Element) => { + return $(el).val(); + }).get().join(" - "); + } +``` + + +### Confirmation dialog +Below sample displays how to use modal dialgo as a confirmation dialog. + +``` javascript + import Dialogs = require("VSS/Controls/Dialogs"); + + var filename = "File1.txt"; + + function showConfirmationDialog(yesCallback: () => void) { + var dialog = Dialogs.show(Dialogs.ModalDialog, { + title: "Delete Confirmation", + content: $("

        ").addClass("confirmation-text").html(`Are you sure you want to delete ${filename}?`), + buttons: { + "Yes": () => { + yesCallback(); + dialog.close(); + }, + "No": () => { + dialog.close(); + } + } + }); + }; + + $("#delete").click(() => { + showConfirmationDialog(()=> { + // Do your delete job here + $("

        ").text(`${filename} deleted`).appendTo(".log"); + }); + }); +``` \ No newline at end of file diff --git a/docs/extend/develop/ui-controls/pivotfiltero.md b/docs/extend/develop/ui-controls/pivotfiltero.md new file mode 100644 index 00000000000..8e708a95cb6 --- /dev/null +++ b/docs/extend/develop/ui-controls/pivotfiltero.md @@ -0,0 +1,47 @@ +--- +title: Use the Pivot Filter Control | Extensions for Visual Studio Team Services +description: Use the pivot filter control to apply filtering on your list in your app for Visual Studio Team Services. +ms.assetid: 36F80097-4DB7-4C63-8E0E-8C031CF07FCE +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use the pivot filter control + +This page shows how to use a pivot filter control. + + +### Basic usage +This sample shows basic usage of a pivot filter. Please try to use html markup below since it picks up necessary styles from `hub-pivot` and `filters` classes. + +``` html +

        +
        +
        + +
        +``` + +``` javascript + import Controls = require("VSS/Controls"); + import Navigation = require("VSS/Controls/Navigation"); + + var container = $(".filter-container"); + + Controls.create(Navigation.PivotFilter, container, { + behavior: "dropdown", + text: "My Filter", + items: [ + { id: "v-1", text: "Value 1", value: "v1" }, + { id: "v-2", text: "Value 2", value: "v2", selected: true }, + { id: "v-3", text: "Value 3", value: "v3" } + ], + change: function(item) { + var $log = $(".log"); + $log.html(`${$log.html()}

        Filter changed to ${item.text} (${item.value})

        `); + } + }); +``` \ No newline at end of file diff --git a/docs/extend/develop/ui-controls/splittero.md b/docs/extend/develop/ui-controls/splittero.md new file mode 100644 index 00000000000..0b8c92a9e4e --- /dev/null +++ b/docs/extend/develop/ui-controls/splittero.md @@ -0,0 +1,82 @@ +--- +title: Use the Splitter Control | Extensions for Visual Studio Team Services +description: Use the splitter control to have splitted and resizable containers for other controls. +ms.assetid: 1EE1DD70-0C64-4B65-8F7F-175A9385041A +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use the splitter control + +This page shows different samples about the splitter control. + +**Go to [API Reference](../../reference/client/controls/splitter.md) for more details.** + + +### Splitter enhancement +Unlike other controls, it is more convenient to instantiate splitter control on an existing markup since splitter is a container control. Otherwise, it would be difficult to fill left and right panes programmatically. + +There is a technic called enhancement which converts an existing html to a control. It is basically similar to what `Controls.create` does but instead of creating a new DOM element and associating it with the control, enhancement uses an existing element in the DOM tree. + +Below sample shows a typical usage of splitter control. + +``` html + + + +
        +
        + Left pane content +
        +
        +
        + Right pane content +
        +
        +``` + +``` css + .my-splitter { + margin: 10px; + border: 5px solid gray; + width:600px; + height: 400px; + } +``` + +See how enhance is used below instead of `Controls.create`. +``` javascript + import Controls = require("VSS/Controls"); + import Splitter = require("VSS/Controls/Splitter"); + + var splitter = Controls.Enhancement.enhance(Splitter.Splitter, $(".my-splitter")); + + $("#expand").click(()=> { splitter.expand(); }); + $("#collapse").click(()=> { splitter.collapse(); }); +``` + +#### Splitter Toggle Button via Enhancement +In the sample above the ```#expand``` and ```#collapse``` buttons are used to expand or collapse the Splitter control. However the Splitter control can include built-in toggle to expand or collapse the splitter and provide a label for the collapsed pane. + +When using the ```Controls.create(...)``` method of Splitter creation the toggle can be included using the ```enableToggleButton``` field on the options object. However this facility is not available when using the ```Controls.Enhancement.enhance(...)``` method. To work around this you should include HTML which the ```enhance(...)``` method can attach appropriate styles and JavaScript handlers. + +```html +
        +
        + Left pane content +
        +
        +
        + Pane Title +
        +
        +
        + Right pane content +
        +
        +``` + +By including this HTML structure in your code, you will have a Splitter control with an integrated toggle button and when collapsed a label on the collapsed pane. \ No newline at end of file diff --git a/docs/extend/develop/ui-controls/treeviewo.md b/docs/extend/develop/ui-controls/treeviewo.md new file mode 100644 index 00000000000..5960698b272 --- /dev/null +++ b/docs/extend/develop/ui-controls/treeviewo.md @@ -0,0 +1,194 @@ +--- +title: Use the TreeView Control | Extensions for Visual Studio Team Services +description: Use the treeview to display hierarchical data in your app for Visual Studio Team Services. +ms.assetid: 8A32169B-3E9F-688A-B886-0A5627B863E8 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use the treeview control + +This page shows different samples about the treeview control. + +> Go to [API Reference](../../reference/client/controls/tree.md) for more details. + + +### Basic treeview +This sample shows the basic usage of the TreeView control. The items of tree source need to be `TreeView.TreeNode`. +``` javascript + import Controls = require("VSS/Controls"); + import TreeView = require("VSS/Controls/TreeView"); + + var container = $(".sample-container"); + + var source = [ + { name: "Asia", icon: "icon icon-people", children: [ + { name: "Russia" }, + { name: "Afghanistan" }, + { name: "India" }, + { name: "China" }] + }, + { name: "Africa", icon: "icon icon-people", children: [ + { name: "Algeria" }, + { name: "Botswana" }, + { name: "Cameroon" }] + }, + { name: "Europe", icon: "icon icon-people", children: [ + { name: "Germany" }, + { name: "Slovenia" }, + { name: "Belgium" }, + { name: "Luxembourg" }, + { name: "Turkey" } + ], + expanded: true + } + ]; + + // Converts the source to TreeNodes + function convertToTreeNodes(items) { + return $.map(items, function (item) { + var node = new TreeView.TreeNode(item.name); + node.icon = item.icon; + node.expanded = item.expanded; + if (item.children && item.children.length > 0) { + node.addRange(convertToTreeNodes(item.children)); + } + return node; + }); + } + + // Generate TreeView options + var treeviewOptions = { + width: 400, + height: "100%", + nodes: convertToTreeNodes(source) + }; + + // Create the TreeView inside the specified container + Controls.create(TreeView.TreeView, container, treeviewOptions); +``` + +### Attach to node selection change +Below code works based on **Basic tree** example above. Attaching `selectionchanged` event of container element to get notified when node selection changes. +```javascript``` + var container = $(".sample-container"); + + // Attach selectionchanged event using a DOM element containing treeview + container.bind("selectionchanged", function (e, args) { + var selectedNode = args.selectedNode; + if(selectedNode) { + alert(`${selectedNode.text} selected!`); + } + }); +``` + +### Add/remove nodes +Below code works based on **Basic tree** example above. This sample displays how to add nodes to TreeView as well as removing nodes from it. + +```html``` + + +``` + +```javascript``` + $("#btnAdd").click(function(e) { + // Find the node to add new children + var turkeyNode = treeview.rootNode.findNode("europe/turkey"); + + // Prepare new children + var turkeyCities = [ + new TreeView.TreeNode("Istanbul"), + new TreeView.TreeNode("Ankara"), + new TreeView.TreeNode("Izmir") + ]; + + // Add children to the node + turkeyNode.addRange(turkeyCities); + // Set node expanded + turkeyNode.expanded = true; + // Update treeview with the new node + treeview.updateNode(turkeyNode); + }); + + $("#btnRemove").click(function(e) { + // Find the node to be removed + var africaNode = treeview.rootNode.findNode("africa"); + if(africaNode) { + // Remove the node if exists + treeview.removeNode(africaNode); + } else { + alert("Node not found"); + } + }); +``` + +### Set selected node programmatically +Below code works based on **Basic tree** example above. It enables setting a node selected programmatically. + +```html``` + +``` + +```javascript``` +$("#btnSelectedNode").click(function (e) { + // Keep a reference to old selected node + var oldSelectedNode = treeview.getSelectedNode(); + // Find new node to select + var belgiumNode = treeview.rootNode.findNode("europe/belgium"); + // Set new selected node + treeview.setSelectedNode(belgiumNode); + alert(`Node selection changed from ${oldSelectedNode.text} to ${belgiumNode.text}`); +}); +``` + + +### Context menu +Below code works based on the `source` used in **Basic tree** example above. The sample shows the usage of contextMenu for each node in the treeView. The item associated with the context menu is obtained using `args.get_commandArgument().item` in `menuItemClick` function. + + +```javascript``` + function menuItemClick(args) { + // Get the item associated with the context menu + var node = args.get_commandArgument().item; + switch (args.get_commandName()) { + case "open": + alert(node.path()); + break; + case "delete": + confirm(`Are you sure you want to delete ${node.text}?`); + break; + } + } + + function getContextMenuItems() { + return [ + { + id: "open", + text: "Open Details" + }, + { separator: true }, + { + id: "delete", + text: "Delete", + icon: "icon-delete" + } + ]; + } + + // Generate TreeView options + var treeviewOptions = { + width: 400, + height: "100%", + nodes: convertToTreeNodes(source), // Nodes are defined above + contextMenu: { + items: getContextMenuItems(), + executeAction: menuItemClick, + arguments: function(contextInfo) { + return { item: contextInfo.item }; + } + } + }; +``` \ No newline at end of file diff --git a/docs/extend/develop/ui-controls/waitcontrolo.md b/docs/extend/develop/ui-controls/waitcontrolo.md new file mode 100644 index 00000000000..4afd78dfded --- /dev/null +++ b/docs/extend/develop/ui-controls/waitcontrolo.md @@ -0,0 +1,83 @@ +--- +title: Use the Wait Control | Extensions for Visual Studio Team Services +description: Use the wait control to display progress message for long running operations in your app for Visual Studio Team Services. +ms.assetid: 175EDE3B-6989-4485-8FEC-014F6380D44F +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use the wait control + +This page shows different samples about the wait control. + +**Go to [API Reference](../../reference/client/controls/waitcontrol.md) for more details.** + + +### Start and end +This sample shows basic start and end operations for the wait control. + +``` javascript + import Controls = require("VSS/Controls"); + import StatusIndicator = require("VSS/Controls/StatusIndicator"); + + var container = $(".sample-container"); + + var waitControlOptions: StatusIndicator.IWaitControlOptions = { + target: $("#target"), + cancellable: true + }; + + var waitControl = Controls.create(StatusIndicator.WaitControl, container, waitControlOptions); + + // Start operation when the start button is clicked + $("#start").click(function() { waitControl.startWait(); }); + + // End operation when the end button is clicked + $("#end").click(function() { waitControl.endWait(); }); +``` + +### Long running operation +This sample shows a cancellable long running operation which simulates 10 steps. This operation can be cancelled at any time using cancel link or ESC key. + +``` javascript + import Controls = require("VSS/Controls"); + import StatusIndicator = require("VSS/Controls/StatusIndicator"); + + var container = $(".sample-container"); + + var waitControlOptions: StatusIndicator.IWaitControlOptions = { + target: $("#target"), + cancellable: true, + cancelTextFormat: "{0} to cancel", + cancelCallback: function() { + console.log("cancelled"); + } + }; + + var opCount: number; + var currentOp: number; + function nextOp() { + currentOp += 1; + // Check the operation is cancelled + if (!waitControl.isCancelled()) { + if (currentOp <= opCount) { + var message = `Processing ${currentOp} of ${opCount}`; + waitControl.setMessage(message); + window.setTimeout(nextOp, Math.ceil(Math.random() * 5000)); + } else { + waitControl.endWait(); + } + } + } + + // Operation starts when long-op button is clicked + $("#long-op").click(function() { + opCount = 10; + currentOp = 0; + waitControl.startWait(); + nextOp(); + }); +``` \ No newline at end of file diff --git a/docs/extend/develop/use-control.md b/docs/extend/develop/use-control.md new file mode 100644 index 00000000000..22b7384f053 --- /dev/null +++ b/docs/extend/develop/use-control.md @@ -0,0 +1,24 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: How to Use a Control | Extensions for Visual Studio Team Services +description: How to use a control in your extension for Visual Studio Team Services. +ms.assetid: eadb8d03-0664-4810-a6e8-62d64e834d33 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use a control + +[!INCLUDE [disclaimer](../../integrate/api/_data/disclaimer.md)] + +* [Configure](./ui-controls/configure.md) +* [Use grid](./ui-controls/grido.md) +* [Use menubar](./ui-controls/menubaro.md) +* [Use treeview](./ui-controls/treeviewo.md) +* [Use combo](./ui-controls/comboo.md) +* [Use modal dialog](./ui-controls/modaldialogo.md) +* [Use splitter](./ui-controls/splittero.md) +* [Use wait control](./ui-controls/waitcontrolo.md) +* [Use pivot filter control](./ui-controls/pivotfiltero.md) diff --git a/docs/extend/develop/using-host-dialog.md b/docs/extend/develop/using-host-dialog.md new file mode 100644 index 00000000000..f2b8b77a935 --- /dev/null +++ b/docs/extend/develop/using-host-dialog.md @@ -0,0 +1,246 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Modal Dialog | Extensions for Visual Studio Team Services +description: Use the modal dialog provided by the host +ms.assetid: 59748E0E-2D5E-FF79-ED0E-4B76037A8010 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Modal dialog + +The HostDialogService enables you to present a modal dialog to the user and prevent interaction with all parts of web access until the dialog is dismissed. + +
        + In contrast to the standard dialog control, a modal dialog presented via the HostDialogService prevents interaction by the user on the entire page, not just within the extension. +
        + + +### Dialog contents + +To start, declare a contribution of type `ms.vss-web.control` in your extension manifest. This contribution represents the content displayed within the dialog. + +```json + { + "id": "registration-form", + "type": "ms.vss-web.control", + "description": "The content to be displayed in the dialog", + "targets": [], + "properties": { + "uri": "registration-form.html" + } + } +``` + +The `uri` property references a page that will be rendered within the content area of the dialog: + +``` + + + + + + + +

        + + +

        +

        + + +

        +

        + + +

        + + + +``` + +### Showing the dialog + +To show the dialog (for example when a user clicks an action on a toolbar or menu), call the `openDialog` function on an instance of the HostDialogService, passing the fully-qualifed identifer of the dialog content, for example `my-publisher.my-extension.registration-form` and any dialog options: + +```javascript + VSS.getService(VSS.ServiceIds.Dialog).then(function(dialogService) { + var extensionCtx = VSS.getExtensionContext(); + // Build absolute contribution ID for dialogContent + var contributionId = extensionCtx.publisherId + "." + extensionCtx.extensionId + ".registration-form"; + + // Show dialog + var dialogOptions = { + title: "My Dialog", + width: 800, + height: 600 + }; + + dialogService.openDialog(contributionId, dialogOptions); + }); +``` + +### Showing the dialog (advanced) + +A function can be called when the OK button is clicked. This function is specified by `getDialogResult` in the options you provide when showing the dialog. + +If a call to `getDialogResult` returns a non-null value, this value is then passed to the function specified by `okCallback` (also in the options) and the dialog is closed. + +In this example, the `attachFormChanged` callback gets called when inputs on the form change. Based on the whether the form is valid or not, the OK button is enabled or disabled. + +```javascript + VSS.getService(VSS.ServiceIds.Dialog).then(function(dialogService) { + var registrationForm; + var extensionCtx = VSS.getExtensionContext(); + var contributionId = extensionCtx.publisherId + "." + extensionCtx.extensionId + ".registration-form"; + + var dialogOptions = { + title: "Registration Form", + width: 800, + height: 600, + getDialogResult: function() { + // Get the result from registrationForm object + return registrationForm ? registrationForm.getFormData() : null; + }, + okCallback: function (result) { + // Log the result to the console + console.log(JSON.stringify(result)); + } + }; + + dialogService.openDialog(contributionId, dialogOptions).then(function(dialog) { + // Get registrationForm instance which is registered in registrationFormContent.html + dialog.getContributionInstance("registration-form").then(function (registrationFormInstance) { + + // Keep a reference of registration form instance (to be used above in dialog options) + registrationForm = registrationFormInstance; + + // Subscribe to form input changes and update the Ok enabled state + registrationForm.attachFormChanged(function(isValid) { + dialog.updateOkButton(isValid); + }); + + // Set the initial ok enabled state + registrationForm.isFormValid().then(function (isValid) { + dialog.updateOkButton(isValid); + }); + }); + }); + }); + +``` + +### Enabling or disabling the OK button + +Initially, the OK button is disabled. However, you can enable/disable this button by calling the `updateOkButton` method on the dialog: + +```javascript + dialogService.openDialog(contributionId, dialogOptions).then(function(dialog) { + // Set true/false to enable/disable ok button + dialog.updateOkButton(true); + }); +``` + +### Passing values to the dialog control + +It is possible pass initial values to dialog content when it is opened in the host dialog. + +```json + { + "id": "registration-form", + "type": "ms.vss-web.control", + "description": "The content displayed in the dialog", + "targets": [], + "properties": { + "uri": "registration-form.html?id={{myId}}" + } + } +``` + +When the dialog is opened, following options need to be specified to pass `myId`: + +```javascript + var dialogOptions = { + title: "My Dialog Title", + width: 800, + height: 600, + urlReplacementObject: { myId: new Date().getTime() } + }; +``` + +### Customizing the dialog buttons + +The `okText` and `cancelText` attributes can be used to specify alternate titles for the OK and Cancel buttons: + +```javascript + var dialogOptions = { + title: "My Dialog Title", + width: 800, + height: 600, + okText: "Yes", + cancelText: "No" + }; +``` + +To not show any buttons on the dialog, you can set the `buttons` attribute to `null`: + +```javascript + var dialogOptions = { + title: "My Dialog Title", + width: 800, + height: 600, + buttons: null + }; +``` + diff --git a/docs/extend/extension-report.md b/docs/extend/extension-report.md new file mode 100644 index 00000000000..8133aeadb2c --- /dev/null +++ b/docs/extend/extension-report.md @@ -0,0 +1,70 @@ +--- +title: Extension Report | Visual Studio Team Services +description: An overview of reports available for an extension. +ms.assetid: baf829df-0975-46d8-8dea-7a5c9f6968ef +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +--- + +# Extension reporting hub + +Now that your extension is available in the [Visual Studio Marketplace](https://marketplace.visualstudio.com), you can use the **Reports** feature to track and analyze how the extension is performing and take required actions. +To visit the extension hub, browse to your [publisher page](https://aka.ms/vsmarketplace-manage) and select the extension or click **Reports** link on the extension details page. + +## Acquisition +You can view acquisition related data in this tab for the selected period. +* Aggregated acquisition in the selected period with respect to overall acquisition +* Aggregated acquisition split by extension downloads, Team Services and TFS connected install for free extension +* Aggregated acquisition split by trials, Team Services and TFS connected buy for paid extension +* Daily trend of extension page views with acquisition for Team Services and TFS connected server +* Conversion percentage from page views to acquisition + +For paid extension, all transactional details for buy and trials is available with date, account name, trial end date, and quantity. You can use the **Contact** action to reach out to your users for transactional communication. See the [Contact](#contact) section provided later in this topic for more details. + +## Uninstall +You can view how many Team Services accounts have uninstalled your extension, daily trend of uninstall, detailed feedback shared during uninstall, and top uninstall reasons. +You can use search for text and dates to analyze and draw more insights from the detailed feedback. + +For paid extensions, you can use the **Contact** action to reach out to your users for transactional communication. [Contact](#contact) section provided later in this topic for more details. + +## Sales transaction +This tab is only available for paid extensions and gives the details of sales w.r.t. quantity and accounts to help understand how the extension is performing. +Selection of the users button gives the aggregated details of sales and churn i.e. number of new, upgrade, downgrade and cancelled user licenses respectively with the trend. +Selection of the accounts button gives similar aggregated details of sales and churn with respect to account and its trend. + +All transactional details for trials, new purchase, upgrade, downgrade and cancellations is available in details section. You can use search for text and dates to analyze and draw more insights. +This data can also be pivoted by account to understand the lifecycle of an account or sorted to understand the top account w.r.t. user licensees / resources purchased. **Contact** feature is also available. + +## Ratings and Review +This tab will give you the information of the average rating for the selected period with respect to overall rating, the average rating by number of reviewers, and the daily trend of average rating. The details section provides all the reviews and your responses in transactional view. + +You can **Reply** to a review or **Edit** a previous response and better manage engagement with your extension users. You can also **Appeal** to void a rating if the issue reported is due to Marketplace or the underlying platform. If the issue is valid, we shall void the rating. + +## Q&A +This tab will give you snapshot of all questions by your extension users with the non-responded queries on the top. You can take actions of replying or editing a previous response and better manage engagement with your extension users. + +## Export to Excel +All data elements available in the reports page are also available for download in XLS format to aid creating your own custom reports. + + +## Contact +For paid extension, you can use the **Contact** action to reach out to your users for transactional communication. this functionality is available only for publishers with contributor + access on the extension. + +Marketplace will broker the first communication with the user as our privacy policy doesn’t allow direct sharing of customer email addresses. Only users who have opt-ed in for communication will be sent the email. +Last contacted date for an account is as also updated after sending a communication. + +**Important** Please follow the below guidance on transactional and promotional communication. A publisher found to do promotional communication or spamming users will be *blacklisted* and won't be able to use the **Contact** feature for any of his/her extensions. + +**Transactional Communication**: Transactional emails convey critical information necessary for the continued use of the extension or service. Examples include critical security notices, transaction confirmations, product recall notices, specific feedback request and service discontinuation notices. +**Promotional Emails**: Promotional emails are used to market your extension, product, service, website, or event. Examples include invitations to events or web casts, information about new marketing or partner programs and offers to prospect to obtain value-added content. Almost all newsletters fall into the promotional bucket as they generally contain at least some promotional content. + +Refer the [Marketplace Publisher Agreement](http://aka.ms/vsmarketplace-agreement) for more guidance on communication with customers. + +# Terminology + +* **Page views** is total number of extension detail page views. Repeated views are counted. +* **VSTS install** is the total number of VSTS accounts the extension is installed. Repeated installs on the same account are counted. +* **TFS install** is the total number of TFS connected accounts the extension is installed. Repeated installs on the same account are counted. TFS disconnected server data isn't available. + diff --git a/docs/extend/extension-statistics-powerbi-contentpack.md b/docs/extend/extension-statistics-powerbi-contentpack.md new file mode 100644 index 00000000000..a1008158f84 --- /dev/null +++ b/docs/extend/extension-statistics-powerbi-contentpack.md @@ -0,0 +1,73 @@ +--- +title: Extension Statistics Power BI Content pack | Visual Studio Marketplace +description: Get started using Power BI to analyze data collected for your extension on Visual Studio Marketplace +ms.author: divais +ms.date: 06/12/2017 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.assetid: 435be0b3-ec45-41dd-a804-03b9342fa7cc +--- + +# Extension Statistics Power BI Content pack + +You can gain insight and analyze the progress of your extension by using Extension Statistics Power BI Content pack. All data elements available in the extension hub are also available in Power BI content pack. +The content pack contains a complete analytic data model (tables, relationships and measures), a set of default reports, and a default dashboard. Reports and dashboards are fully customizable but the data model is not. + +##Connect to Power BI and get the Content Pack + + +1. Open a web browser and go to [http://powerbi.com](http://powerbi.microsoft.com/). + +2. Click **Sign In** in the upper right corner to log in to Power BI. + +3. In the lower left corner, click **Get Data**. + + If you don't have a Power BI account you can create one by entering your email address and click **Use it free**. + +4. Click **Get** under **Services** on the Get Data page. + + ![get-data-final.png](_img/get-data-final.png) + +5. Search for Marketplace and select the Visual Studio Marketplace Extension Statistics and click **Get it now**. + + ![connector](_img/search.png) + ![connector](_img/content-pack-details.png) + +6. Enter the Marketplace publisher id for the publisher you want data for and click **Next**. + + ![Enter the publisher id used in Marketplace](_img/addpublisherid.png) + + **Important**: Ensure you are logged in power BI using the same credentials you use on the Marketplace and you have access to the Publisher Id. + +7. The next step specifies the authentication method. Only oAuth2 is supported. Click **Sign In** to continue. + + ![Login to VS Team Services with oAuth2](_img/connect-to-vs-team-services-auth.png) + + **Important**: You won't be able to connect if your account administrator disabled third party application access via OAuth. When enabled, it appears as follows on the Administration > Control panel > Settings page: + + ![Third-party oAuth enabled](_img/Screen5.png) + + Contact your account administrator to determine if it needs to be enabled.  + +8. Successful authorization displays the following authorization dialog which allows Power BI to retrieve data from your account. Scroll down to the bottom and click **Accept**. + + ![VS Team Services Authorization page](_img/Screen6.png) + +9. Once Power BI is authorized, data will begin to load and you'll be presented with a loading screen until the data is complete. Depending on how much data there is, it may take a few minutes to complete the data load. All extension data associated with this publisher will be downloaded. + + +##Available data and reports + +After getting connected you will see an initial dashboard with details on all of your extensions. All data available in the Marketplace extension hub is available in the content pack. Details on the extension hub are available [here](./extension-report.md). + +The power BI content pack gives data for all extensions and you can use the filters to view data for an extension or use the extension report to compare data between extensions. + +At high level, data available is: + +1. Acqusition +2. Uninstall +3. Rating and review + +Using the report and available data elements, you can create the required reports and pin them to the dashboard. + +To get started using Power BI, see the [knowledge base of articles](https://support.powerbi.com/). \ No newline at end of file diff --git a/docs/extend/get-started/_img/add-extension.png b/docs/extend/get-started/_img/add-extension.png new file mode 100644 index 00000000000..4a8bbad818c Binary files /dev/null and b/docs/extend/get-started/_img/add-extension.png differ diff --git a/docs/extend/get-started/_img/create-publisher.png b/docs/extend/get-started/_img/create-publisher.png new file mode 100644 index 00000000000..ddf5cbdc54c Binary files /dev/null and b/docs/extend/get-started/_img/create-publisher.png differ diff --git a/docs/extend/get-started/_img/first-sample-extension.png b/docs/extend/get-started/_img/first-sample-extension.png new file mode 100644 index 00000000000..d3868f071f4 Binary files /dev/null and b/docs/extend/get-started/_img/first-sample-extension.png differ diff --git a/docs/extend/get-started/_img/hello-hub.png b/docs/extend/get-started/_img/hello-hub.png new file mode 100644 index 00000000000..e897d7b738a Binary files /dev/null and b/docs/extend/get-started/_img/hello-hub.png differ diff --git a/docs/extend/get-started/_img/logo.png b/docs/extend/get-started/_img/logo.png new file mode 100644 index 00000000000..dae7700d0ab Binary files /dev/null and b/docs/extend/get-started/_img/logo.png differ diff --git a/docs/extend/get-started/_img/visual-studio-code-icon.png b/docs/extend/get-started/_img/visual-studio-code-icon.png new file mode 100644 index 00000000000..a9331a3578f Binary files /dev/null and b/docs/extend/get-started/_img/visual-studio-code-icon.png differ diff --git a/docs/extend/get-started/node.md b/docs/extend/get-started/node.md new file mode 100644 index 00000000000..4e80bc100ad --- /dev/null +++ b/docs/extend/get-started/node.md @@ -0,0 +1,300 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Write your first extension for Visual Studio Team Services +description: Tutorial for creating your first extension, a hub page, for Visual Studio Team Services +ms.assetid: ae82118c-82fa-40ec-9f29-989ce981f566 +ms.manager: douge +ms.author: elbatk +ms.date: 08/26/2016 +ms.topic: get-started-article +--- + +# Write your first extension for Visual Studio Team Services + +[!INCLUDE [preview](../_data/private-preview.md)] + +## Your first extension +This page guides you through creating your first extension for Visual Studio Team Services. It will introduce the basic extensibility concepts +and give you the knowledge needed to get started on your own unqiue extension. + +In this tutorial we'll create a custom hub that displays the results of a query. A hub is, simply put, a type of contribution that displays +a web page. You can have multiple hubs in VSTS and they live in hub groups. + +We'll create a new hub that displays in the Work hub group, after the Backlogs and Queries hubs. + +
        + +
        + +## Preparation and required setup for this tutorial +In order to create extensions for Team Services, there are some prerequisite software and tools you'll need: + +- A **VSTS account**, more information can be found [here](https://www.visualstudio.com/en-us/products/visual-studio-team-services-vs.aspx) +- **A text editor**. For many of the tutorials we used `Visual Studio Code`, which can be downloaded [here](https://code.visualstudio.com/) +- The latest version of **node**, which can be downloaded [here](https://nodejs.org/en/download/) +- **TFS Cross Platform Command Line Interface (tfx-cli)** to package your extensions. + - **tfx-cli** can be installed using `npm`, a component of Node.js by running `npm i -g tfx-cli` +- A home directory for your project. This directory will be referred to as `home` throughout the tutorial. + +## Structure of an extension +If you haven't, you'll want to create a `home` directory that contains the following contents: + +```no-highlight +├── README.md // used in the Marketplace listing of your extension +├── sdk + ├── node_modules + └── scripts + └── VSS.SDK.js // core SDK script retrieved using node later in the tutorial +├── images + └── icon.png +├── scripts // not used in this tutorial +├── hello-world.html // html page to be used for your hub +└── vss-extension.json // extension's manifest +``` + +
        + +## Get the client SDK: `VSS.SDK.js` +The core SDK script, **VSS.SDK.js**, enables web extensions to communicate to the host Team Services frame and to perform operations like +initializing, notifying that an extension is loaded, or getting context about the current page. Get the Client SDK **VSS.SDK.js** file and add it to your web app. Place it in the `home/sdk/scripts` folder. + +Use the *npm install* command via the command line (requires [Node](https://nodejs.org/en/download/)) to retrieve the SDK: + +```no-highlight +npm install vss-web-extension-sdk +``` + +> To learn more about the SDK, visit the [Client SDK Github Page](https://github.com/Microsoft/vss-sdk). + + + +## Your extension's manifest file: `vss-extension.json` + +* ***Every*** extension must have an extension manifest file +* Please read the [extension manifest reference](../develop/manifest.md) +* Find out more about the contribution points in the [extension points reference](../reference/targets/overview.md) + +Create a json file (`vss-extension.json`, for example) in the `home` directory with the following contents: + +```json + { + "manifestVersion": 1, + "id": "sample-extension", + "version": "0.1.0", + "name": "My first sample extension", + "description": "A sample Visual Studio Services extension.", + "publisher": "fabrikamdev", + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "icons": { + "default": "images/logo.png" + }, + "contributions": [ + { + "id": "Fabrikam.HelloWorld", + "type": "ms.vss-web.hub", + "description": "Adds a 'Hello' hub to the Work hub group.", + "targets": [ + "ms.vss-work-web.work-hub-group" + ], + "properties": { + "name": "Hello", + "order": 99, + "uri": "hello-world.html" + } + } + ], + "scopes": [ + "vso.work" + ], + "files": [ + { + "path": "hello-world.html", "addressable": true + }, + { + "path": "scripts", "addressable": true + }, + { + "path": "sdk/scripts", "addressable": true + }, + { + "path": "images/logo.png", "addressable": true + } + ] + } +``` + +>[!NOTE] +>The **publisher** here will need to be changed to your publisher name. To create a publisher now, visit [Package/Publish/Install](../publish/overview.md). + + +### Icons +The **icons** stanza specifies the path to your extension's icon in your manifest. + +### Contributions +The **contributions** stanza adds your contribution - the Hello hub - to your extension manifest. + +For each contribution in your extension, the manifest defines +- the type of contribution - **hub** in this tutorial. +- the contribution target - **the work hub group** (check out all of the [targetable hub groups](../reference/targets/overview.md#targetable-hub-groups)) +- and the properties that are specific to each type of contribution. For a hub, we have + +| Property | Description +|------------|--------------------------------------------------------------------------------| +| name | Name of the hub. | +| order | Placement of the hub in the hub group. | +| uri | Path (relative to the extension's baseUri) of the page to surface as the hub. | + +### Scopes +The [scopes](../develop/manifest.md#scopes) stanza is where you'll add **scopes** that your extension requires. Scopes control what resources can be accessed by your extension and what operations your extension is allowed to perform on those resources. The scopes you specify in your extension manifest are the scopes set on access tokens issued to your extension. + +In this case, we need `vso.work` to access work items. + +### Files +The **files** stanza states the files that you want to include in your package. + +For a hub, you'll add your HTML page, your scripts (not used in this tutorial, but should still be added), the SDK script, and your logo. +Set `addressable` to `true` unless you include other files that don't need to be URL-addressable. + +>[!NOTE] +>For more information about the **extension manifest file**, such as its properties and what they do, check out the [extension manifest reference](../develop/manifest.md). + +## Your hub page: `hello-world.html` +* Every hub displays a web page, which is represented by an html file +* Check out the targettable hub groups in the [extension points reference](../reference/targets/overview.md#hubs) + +Create a `hello-world.html` file in the `home` directory of your extension. + + +Copy the following contents, a simple html page that also references the SDK and calls *init()* and *notifyLoadSucceeded()*. + +```html + + + + Hello World + + + + +

        Hello World

        + + + +``` + +## Your extension's logo: `icon.png` +Add a square image in the ```images``` folder that identifies your extension. +We'll display it in the Marketplace, and when someone installs your extension. The icon image needs to be atleast 128x128 pixels in size before an extension can be made available publicly on the Marketplace. + +
        + +
        + +>[!IMPORTANT] +>Please do not use the Visual Studio "Bowtie" icon in your extension icon. + +Now that you have your `.html` file, your `manifest`, and any `images` you need, you're ready to package and publish your extension! + +## Package and publish your extension to the Marketplace + +### Package your extension + +Once you've written your extension, the next step towards getting it into the marketplace is to package all of your files together. All extensions are packaged +as VSIX 2.0 compatible .vsix files - Microsoft provides a cross-platform command line interface (CLI) to package your extension. + +#### Get the packaging tool +You can install or update the TFS Cross Platform Command Line Interface (tfx-cli) using `npm`, a component of [Node.js](http://nodejs.org), from your command line. + +```no-highlight +npm i -g tfx-cli +``` + +#### Package your extension +Packaging your extension into a .vsix file is effortless once you have the tfx-cli, simply navigate to your extension's home directory and run the following command. + +```no-highlight +tfx extension create --manifest-globs vss-extension.json +``` + +>[!NOTE] +>An extension/integration's version must be incremented on every update.
        +>When updating an existing extension, either update the version in the manifest or pass the `--rev-version` command line switch. This will increment the *patch* version number of your extension and save the new version to your manifest. + +After you have your packaged extension in a .vsix file, you're ready to publish your extension to the marketplace. + +### Publish your extension + +#### Create your publisher + +All extensions, including those from Microsoft, are identified as being provided by a publisher. +If you aren't already a member of an existing publisher, you'll create one. + +1. Sign in to the [Visual Studio Marketplace Publishing Portal](http://aka.ms/vsmarketplace-manage) +2. If you are not already a member of an existing publisher, you'll be prompted to create a publisher. If you're not prompted to create a publisher, scroll down to the bottom of the page and select Publish Extensions underneath Related Sites. + * Specify an idenitifer for your publisher, for example: `mycompany-myteam` + * This will be used as the value for the `publisher` attribute in your extensions' manifest file. + * Specify a display name for your publisher, for example: `My Team` +3. Review the [Marketplace Publisher Agreement](http://aka.ms/vsmarketplace-agreement) and click **Create** + +Now your publisher is defined. In a future release, you'll be able to grant permissions to view and manage your publisher's extensions. +This will make it easy (and more secure) for teams and organizations to publish extensions under a common publisher, +but without the need to share a set of credentials across a set of users. + +#### Upload your extension + +After creating a publisher, you can now upload your extension to the marketplace. + +1. Find the Upload new extension button, navigate to your packaged .vsix file, and select upload. + +You can also upload your extension via the command line by using the ```tfx extension publish``` command instead of ```tfx extension create``` +to package and publish your extension in one step. +You can optionally use ```--share-with``` to share your extension with one or more accounts after publishing. +You'll need a personal access token, too. + +```no-highlight +tfx extension publish --manifest-globs your-manifest.json --share-with youraccount +``` + +#### Share your extension + +Now that you've uploaded your extension, it's in the Marketplace, but no one can see it. +Share it with your account so that you can install and test it. + +1. Right click your extension and select Share..., and enter your account information. You can share it with other accounts that you want to have access to your extension, too. + +>[!IMPORTANT] +>Publishers must be verified in order to share extensions publicly, to learn more visit [Package/Publish/Install](../publish/overview.md) + +Now that your extension is in the marketplace and shared, anyone who wants to use it will have to install it. + +## (Optional) Install your extension + +Installing an extension that is shared with you is simple and can be done in a few steps: + +1. From your account control panel (`https://{account}.visualstudio.com/_admin`), go to the project collection administraton page. +2. In the Extensions tab, find your extension in the "Shared with this account" section, click on the extension link. +3. Install the extension! + +If you can't see the Extensions tab, make sure you're in the control panel (the project collection level administration page - `https://{account}.visualstudio.com/_admin`) and not the administration page for a team project. + +If you're on the control panel, and you don't see the Extensions tab, extensions may not be enabled for your account. You can get early access to the extensions feature by joining the Visual Studio Partner Program. + +## (Optional) Try out your extension + +Go to your hub in the **Work** hub group. You should see your simple `.html` page in the hub. + +
        + +
        + +## See our library of examples + +To get started with building your own extension, take a look at some of the sample extensions. + +* [Look at sample extensions](../develop/samples-overview.md) + \ No newline at end of file diff --git a/docs/extend/get-started/tutorials.md b/docs/extend/get-started/tutorials.md new file mode 100644 index 00000000000..f88727a672f --- /dev/null +++ b/docs/extend/get-started/tutorials.md @@ -0,0 +1,273 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Tutorials catalog for developing extensions in Visual Studio Team Services +description: Follow tutorials to create an extension in Visual Studio Team Services +ms.assetid: 75df3138-f16d-4127-89f7-5462ce6874bd +ms.manager: douge +ms.author: elbatk +ms.date: 08/19/2016 +--- + +# Catalog of Tutorials for developing Team Services Extensions + +Because of the diverse nature of extensions, we wanted to provide the right tutorial for you. +Below you'll find tutorials that cover different types of extensions so that you can learn the basics with a tutorial that's relevant to your goals as a developer. + +
        +
        +
        + +
        +
        +
        +
        + Build your first extension +
        +
        +
        +
        +
        +
        + This tutorial walks you through the entire extension creation process while you create a hub within Team Services. + From start to finish, you'll learn everything that you need to know about writing an extension and publishing it + to the Marketplace. +
        +
        +
        +
        +
        + +
        +
        + + +
        +
        + +
        +
        +
        +
        + Add a hub +
        +
        +
        +
        +
        +
        + Learn the basics of how to create a hub that can host a web page within a hub group within Visual Studio Team Services. +
        +
        +
        +
        +
        + +
        +
        + + +
        +
        + +
        +
        +
        +
        + Add a build task +
        +
        +
        +
        +
        +
        + Custom build tasks can be contributed by extensions; ensure that vital events are kicked off automatically when builds are started. + This tutorial walks through adding two simple build tasks. +
        +
        +
        +
        +
        + +
        +
        + + +
        +
        + +
        +
        +
        +
        + Extend the work item form +
        +
        +
        +
        +
        +
        + The work item form can be customized via contribution extensions. This tutorial shows a developer how to do things like: + add a group to the main page, add a page or tab, add an action to the context menu, or even listen for events on the form. +
        +
        +
        +
        +
        + +
        +
        + + +
        +
        + +
        +
        +
        +
        + Add a query context menu action +
        +
        +
        +
        +
        +
        + You can add custom actions to the context menu in the Queries hub with extensions. This tutorial walks through + how to add a simple query context menu action that displays an alert when clicked. +
        +
        +
        +
        +
        + +
        +
        + + +
        +
        + +
        +
        +
        +
        + Add backlog tabs +
        +
        +
        +
        +
        +
        + Similar to creating a hub, you can also create a tab in the backlog pages that can host a web page. + This tutorial walks you through the basics of creating a backlog tab. +
        +
        +
        +
        +
        + +
        +
        + + +
        +
        + +
        +
        +
        +
        + Add a new Service Endpoint +
        +
        +
        +
        +
        +
        + Service endpoints are a way for Team Services to connect to external systems or services. Extensions can acquire stored details from the service endpoint + to perform operations on that service. This tutorial walks through creating a custom service endpoint with data sources, and a build task that calls it. +
        +
        +
        +
        +
        + +
        +
        + + +
        +
        + +
        +
        +
        +
        + Add a custom consumer service (Service Hooks) +
        +
        +
        +
        +
        +
        + Service hook publishers define a set of events. Subscriptions listen for the events and define actions to take based on the event. + Subscriptions also target *consumer services*, which are external services that can perform their own actions, when an event occurs. + This tutorial walks through creating a custom *consumer service*. +
        +
        +
        +
        +
        + +
        +
        + + +
        +
        + +
        +
        +
        +
        + Add a dashboard widget +
        +
        +
        +
        +
        +
        + Widgets can be implemented into your VSTS dashboard via contribution extensions. This tutorial is split into three parts: + Creating a "Hello World" widget, Adding a call to a Team Services REST API, Adding configuration to your widget. +
        +
        +
        +
        +
        + +
        +
        + + +
        +
        + +
        +
        +
        +
        + Call a REST API +
        +
        +
        +
        +
        +
        + This short tutorial is to show a developer the correct syntax for calling a REST API within their extension. You can also choose to display the results + of your API call in a grid afterwards. +
        +
        +
        +
        +
        \ No newline at end of file diff --git a/docs/extend/get-started/visual-studio.md b/docs/extend/get-started/visual-studio.md new file mode 100644 index 00000000000..15503c1d78c --- /dev/null +++ b/docs/extend/get-started/visual-studio.md @@ -0,0 +1,285 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Create your first Extension with Visual Studio | Extensions for Visual Studio Team Services +description: Use Visual Studio with ASP.NET to create your first extension for Visual Studio Team Services. +ms.assetid: 387f13db-bb06-4f8e-baf8-3f0ea05903e5 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Create your first extension with Visual Studio + +[!INCLUDE [preview](../_data/private-preview.md)] + +Extensions enable you to create first-class integration experiences within Visual Studio Team Services. +An extension can be a simple context menu or toolbar action +or it can be a complex and powerful custom UI experience that light up within the account, collection, or project hubs. + +Get started now by creating your own hub that displays the results a query, +and an action on the queries context menu to launch your hub. + +![hub](../_shared/procedures/_img/create-action/my-work-items.png) + + +**In this page:** +- [Create a hub](#hub) + - [Create the web app](#app) + - [Create the extension manifest](#manifest) + - [Install your extension](#install) + - [Add a grid control](#control) + - [Call a REST API](#rest) +- [Add an action](#action) +- [Deploy your extension static web content to Microsoft Azure](#deploy) + + +## Create a hub + +Use a hub to surface your web app in an iframe in Visual Studio Team Services. +The one we're creating here will show up in the team project's **Work** hub group. + +![Location of a new hub in Visual Studio Team Services](../_shared/procedures/_img/hub-location.png) + + +### Create the web app + +Start by creating the web app with the page that will be your hub. + +[!INCLUDE [Webapp](../_shared/procedures/create-hub-app-asp4.md)] + +1. If you like, you can add a square image in the ```images``` folder that identifies your extension. +We'll display it when someone installs your extension. + + ![installed extension](../_shared/procedures/_img/sample-extension-card.png) + + You don't need to do this, though for your extension to work. + + +### Create the extension manifest + +The extension manifest tells VSTS about your extension. + +[!INCLUDE [Extension_manifest](../_shared/procedures/create-base-manifest.md)] + +[!INCLUDE [Contribuion_manifest](../_shared/procedures/create-hub-manifest.md)] + + +### Package and publish your extension + +[Packaging and publishing](../publish/overview.md) + + +### Install your extension + +[!INCLUDE [Install](../_shared/procedures/install.md)] + +[!INCLUDE [ExtensionsTab](../_shared/extensions-tab.md)] + +### Try out your extension + +1. Enable https for your web app. + + ![Properties dialog with SSL enabled](../_shared/procedures/_img/create-hub-app-asp4/enable-ssl.png) + +1. Start your app in Visual Studio so that VSTS can access it. + +1. Go to your hub in the **Work** hub group. + + ![Hello hub in the Home hub group](./_img/hello-hub.png) + + +### Add a grid control + +Now add a grid control to display some data in ```hello-world.html```. + +[!INCLUDE [Control](../_shared/procedures/use-a-control-js.md)] + + +### Call a REST API + +Call a REST API and display the results in the grid control. + +1. Get the `client service`. In this case, we're getting the work item tracking client. + + Change this: + ```javascript + // Load VSTS controls + VSS.require(["VSS/Controls", "VSS/Controls/Grids"], + function (Controls, Grids) { + ``` + + to this: + + ```javascript + // Load VSTS controls and REST client + VSS.require(["VSS/Controls", "VSS/Controls/Grids", + "VSS/Service", "TFS/WorkItemTracking/RestClient"], + function (Controls, Grids, VSS_Service, TFS_Wit_WebApi) { + + // Get a WIT client to make REST calls to VSTS + var witClient = VSS_Service.getCollectionClient(TFS_Wit_WebApi.WorkItemTrackingHttpClient); + ``` + +1. Call the API (```getWorkItems```) using the client service (```witClient```), +with a callback that loads the grid control with the results. + + Change this: + + ```javascript + // Initialize the grid control with two colums, "key" and "value" + var dataSource = []; + dataSource.push({key: "key", value: "value"}); + + Controls.create(Grids.Grid, $("#grid-container"), { + height: "1000px", // Explicit height is required for a Grid control + columns: [ + // text is the column header text. + // index is the key into the source object to find the data for this column + // width is the width of the column, in pixels + { text: "Property key", index: "key", width: 150 }, + { text: "Property value", index: "value", width: 600 } + ], + // This data source is rendered into the Grid columns defined above + source: dataSource + }); + ``` + + to this: + + ```javascript + // Call the "queryById" REST endpoint, giving a query ID + witClient.getWorkItems(/* some work item IDs */ [1,2,3,4], ["System.Title"]).then(function(workItems) { + + // Create a Grid control to display the Work Items + Controls.create(Grids.Grid, $("#grid-container"), { + height: "1000px", // Explicit height is required for a Grid control + columns: [ + // text is the column header text. + // index is the key into the source object to find the data for this column + // width is the width of the column, in pixels + { text: "Work Item ID", index: "id", width: 150 }, + + // getColumnValue provides a mechanism for the grid to get the data for a cell + // (at the given row number) if it is not directly keyed off the source object. + { text: "Title", width: 150, getColumnValue: function(dataIndex) { + // The Work Item's Title is at source[row].fields["System.Title"]. + // this.getRowData(n) returns the nth item from the source object, so we + // can return the "System.Title" property under fields. + return this.getRowData(dataIndex).fields["System.Title"]; + } }, + { text: "URL", index: "url", width: 600 } + ], + // This data source is rendered into the Grid columns defined above + source: workItems + }); + }); + ``` + + This code assumes you have at least four work items in your team project. If you don't create them before you try the action. + +1. Refresh the page to see the data from your REST API call displayed in the grid. + + ![API results displayed in the grid](../_shared/procedures/_img/call-rest-api/query-results.png) + + +## Add an action + +You can add actions to the VSTS user interface that call your extension. +In this case, you'll add an action to the context menu for queries and folders in the work hub +that launches the Hello hub and send it a query to run. + +See the [contributions reference](../reference/targets/overview.md) to see other places where you can contribute actions. + +[!INCLUDE [Action](../_shared/procedures/create-action-js.md)] + +1. Update the ```execute:``` block to open your Hello hub. + + ```javascript + execute: function (actionContext) { + + // Get the Web Context to create the uri + var VSTSContext = VSS.getWebContext(); + + // Navigate to the new View Assoicated Work Items hub. + // Fabrikam is the extension's namespace and Fabrikam.HelloWorld is the hub's id. + window.parent.location.href = VSTSContext.host.uri + + vstsContext.project.name + "/_apps/hub/" + + VSS.getExtensionContext().namespace + "/Fabrikam.HelloWorld"; + } + ``` + + Refresh the page and try it again. It opens the Hello hub. + +1. Update your action again to pass the selected item to your hub. + + ```javascript + window.parent.location.href = VSTSContext.host.uri + + vstsContext.project.name + "/_apps/hub/" + + VSS.getExtensionContext().namespace + "/Fabrikam.HelloWorld?queryId=" + + actionContext.queryId; + ``` + +1. Update ```hello-world.html``` to run the query from the action context instead of getting a hardcoded set of work items. + + ```javascript + // Load VSTS controls and REST client + VSS.require(["VSS/Controls", "VSS/Controls/Grids", + "VSS/Service", "TFS/WorkItemTracking/RestClient"], + function (Controls, Grids, VSS_Service, TFS_Wit_RestClient) { + + // Get a WIT client to make REST calls to VSTS + var witClient = VSS_Service.getCollectionClient(TFS_Wit_RestClient.WorkItemTrackingHttpClient); + + // Call the "queryById" REST endpoint, giving a query ID + witClient.queryById(location.search.substr("?queryId=".length)).then(function(queryResult) { + + // The query result returns a lit of shallow references to Work Items, so next we make + // a REST call to get actual Work Items. + var workItemIds = queryResult.workItems.map(function(reference) { return reference.id; }); + + // The getWorkItems method takes a list of Work Item IDs and a list of fields to fetch. + witClient.getWorkItems(workItemIds, ["System.Title"]).then(function(workItems) { + + // Create a Grid control to display the Work Items + Controls.create(Grids.Grid, $("#grid-container"), { + + // Explicit height is required for a Grid control + height: "500px", + columns: [ + // text is the column header text. + // index is the key into the source object to find the data for this column + // width is the width of the column, in pixels + { text: "Work Item ID", index: "id", width: 150 }, + + // getColumnValue provides a mechanism for the grid to get the data for a cell + // (at the given row number) if it is not directly keyed off the source object. + { text: "Title", width: 150, getColumnValue: function(rowNum) { + // The Work Item's Title is at source[row].fields["System.Title"]. + // this.getRowData(n) returns the nth item from the source object, so we + // can return the "System.Title" property under fields. + return this.getRowData(rowNum).fields["System.Title"]; + } }, + { text: "URL", index: "url", width: 600 } + ], + // This data source is rendered into the Grid columns defined above + source: workItems + }); + + // Tells the host frame that the extension is done loading, which releases the UI to the user. + VSS.notifyLoadSucceeded(); + }); + }); + }); + ``` + +1. Run the action again from a query (not a folder) to see the results of that query in the Hello hub. + + ![Query results in the hello hub](../_shared/procedures/_img/create-action/my-work-items.png) + + Now when you use your action, the results of the selected query will be displayed in your hub. + + +## Deploy your extension to Microsoft Azure + +[!INCLUDE [Action](../_shared/procedures/publish-azure.md)] diff --git a/docs/extend/index.md b/docs/extend/index.md new file mode 100644 index 00000000000..632ab0939bc --- /dev/null +++ b/docs/extend/index.md @@ -0,0 +1,59 @@ +--- +title: Build extensions content index for VSTS and TFS +description: Index of building extensions for VSTS and Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.assetid: 153aa519-6233-4292-8eac-44de15f2d3dd +ms.manager: douge +ms.author: elbatk +ms.date: 08/23/2016 +--- + +# Build Extensions + +Extensions are simple add-ons that can be used to customize and extend your DevOps experience with Visual Studio Team Services (VSTS). They are written with standard technologies - HTML, JavaScript, CSS - and can be developed using your preferred dev tools. + + + +## 5-minute Quickstarts +Check out the quick starts to get you started: +* [Write your first extension](get-started/node.md) + +## Concepts +* [Extension points](reference/targets/overview.md) +* [Contribution model](develop/contributions-overview.md) + +## Samples +* [Sample extensions](develop/samples-overview.md) + +## How-to Guides +* Develop + * [Add a build task](develop/add-build-task.md) + * [Add a dashboard widget](develop/add-dashboard-widget.md) + * [Call a REST API](develop/call-rest-api.md) +* Package and publish + * [Package and publish extensions](publish/overview.md) + * [Package and publish integrations](publish/integration.md) + +## Reference +* Development + * [Manifest reference](develop/manifest.md) + * [Build task reference](develop/build-task-schema.md) + * [Endpoint authentication schemes](develop/auth-schemes.md) + * [Content hosting](develop/static-content.md) + * [Modal dialog](develop/using-host-dialog.md) + * [Host page navigation](develop/host-navigation.md) + * [Basic styles for widgets](develop/styles-from-widget-sdk.md) + * [Auth and security](develop/auth.md) + * [Deploy web content to Azure](publish/publish-azure.md) + * UI controls + * [Combo](reference/client/controls/combo.md) + * [Grid](reference/client/controls/grid.md) + * [TreeView](reference/client/controls/tree.md) + * [MenuBar](reference/client/controls/menubar.md) + * [Modal Dialog](reference/client/controls/modaldialog.md) + * [Splitter](reference/client/controls/splitter.md) + * [WaitControl](reference/client/controls/waitcontrol.md) + + + diff --git a/docs/extend/overview.md b/docs/extend/overview.md new file mode 100644 index 00000000000..30d6584cd5e --- /dev/null +++ b/docs/extend/overview.md @@ -0,0 +1,60 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Developing extensions for Visual Studio Team Services (VSTS) and Team Foundation Server +description: Overview of creating extensions for Visual Studio Team Services (VSTS) +ms.assetid: bd7bd829-e80e-4234-849f-d4b273605a22 +ms.manager: douge +ms.author: elbatk +ms.date: 08/23/2016 +ms.topic: get-started-article +--- + +# Create a custom extension + +>[!NOTE] +> This section covers developing custom extensions and service-hooks, to find information on installing extensions from the Marketplace, or buying Visual Studio Subscriptions, visit the [Marketplace documentation](../marketplace/index.md). For information on + + +## What are extensions? + +Extensions are simple add-ons that can be used to customize and extend your DevOps experience with Team Services. +They are written with standard technologies - HTML, JavaScript, CSS - and can be developed using your preferred dev tools. +They utilize our [RESTful API Library](https://visualstudio.com/integrate/api/overview.md) in order to easily interact with Team Services and applications/services. +The [Visual Studio Marketplace](https://marketplace.visualstudio.com/VSTS) is where extensions are published, +where they can be kept privately for you and your team or shared with the millions of developers currently using Team Services. + +## What makes up an extension? +
        + +
        + +- A [JSON manifest file](./develop/manifest.md) contains basic info about the extension. +- Discovery assets - the markdown and images that make up your extension's overview and aesthetics in the marketplace. +- Static files that contain the logic of your extension, including HTML, JS, and CSS files. Static files are only applicable to contribution-based extensions. + +All of these are bundled up to make a Team Extensions Service Package (.vsix file) that is published to the marketplace. From the marketplace, +extensions can be installed directly by Team Services users. + + +## What can you do with extensions? + +There are dozens of places where you can add to the Team Services user interface, and we're adding more every sprint. Learn about all of the places where you can add a hub in the [contributions reference](./reference/targets/overview.md). + +- [Provide new build and release tasks](./develop/add-build-task.md) that teams can use in their builds. +- Use [dashboard widgets](./develop/add-dashboard-widget.md) to get custom views within Team Services. +- Extend the [work item form](./develop/add-workitem-extension.md) with new tabs, sections, and actions. +- Create [your own hub](./develop/add-hub.md) to embed new capabilities within our Agile, code, build, and test experiences. +- Develop [actions](./develop/add-action.md) that can be run on hubs, whether they're ours or ones you've created. + + +## Next Steps + +### Quickstarts + +* [Write your first extension (Add a hub)](./get-started/node.md) + +### Reference + +* [Extension manifest reference](./develop/manifest.md) + diff --git a/docs/extend/publish/_img/card.png b/docs/extend/publish/_img/card.png new file mode 100644 index 00000000000..f87b350d137 Binary files /dev/null and b/docs/extend/publish/_img/card.png differ diff --git a/docs/extend/publish/_img/create-publisher.png b/docs/extend/publish/_img/create-publisher.png new file mode 100644 index 00000000000..c8c847f8853 Binary files /dev/null and b/docs/extend/publish/_img/create-publisher.png differ diff --git a/docs/extend/publish/_img/extensions-tab-shared.png b/docs/extend/publish/_img/extensions-tab-shared.png new file mode 100644 index 00000000000..07a5949e8fe Binary files /dev/null and b/docs/extend/publish/_img/extensions-tab-shared.png differ diff --git a/docs/extend/publish/_img/extensions-tab.png b/docs/extend/publish/_img/extensions-tab.png new file mode 100644 index 00000000000..03a6a6c4926 Binary files /dev/null and b/docs/extend/publish/_img/extensions-tab.png differ diff --git a/docs/extend/publish/_img/integration-example.png b/docs/extend/publish/_img/integration-example.png new file mode 100644 index 00000000000..3ac25914dc7 Binary files /dev/null and b/docs/extend/publish/_img/integration-example.png differ diff --git a/docs/extend/publish/_img/integration-name-link.png b/docs/extend/publish/_img/integration-name-link.png new file mode 100644 index 00000000000..f5becaa02c6 Binary files /dev/null and b/docs/extend/publish/_img/integration-name-link.png differ diff --git a/docs/extend/publish/_img/manage-extensions.png b/docs/extend/publish/_img/manage-extensions.png new file mode 100644 index 00000000000..a294259aff4 Binary files /dev/null and b/docs/extend/publish/_img/manage-extensions.png differ diff --git a/docs/extend/publish/_img/manage-first.png b/docs/extend/publish/_img/manage-first.png new file mode 100644 index 00000000000..e5551a76e1f Binary files /dev/null and b/docs/extend/publish/_img/manage-first.png differ diff --git a/docs/extend/publish/_img/manage-published-empty.png b/docs/extend/publish/_img/manage-published-empty.png new file mode 100644 index 00000000000..276f8571d2a Binary files /dev/null and b/docs/extend/publish/_img/manage-published-empty.png differ diff --git a/docs/extend/publish/_img/not-verified.png b/docs/extend/publish/_img/not-verified.png new file mode 100644 index 00000000000..daa40bc021f Binary files /dev/null and b/docs/extend/publish/_img/not-verified.png differ diff --git a/docs/extend/publish/_img/public-availability.png b/docs/extend/publish/_img/public-availability.png new file mode 100644 index 00000000000..c0158d3d299 Binary files /dev/null and b/docs/extend/publish/_img/public-availability.png differ diff --git a/docs/extend/publish/_img/share.png b/docs/extend/publish/_img/share.png new file mode 100644 index 00000000000..5352867ff98 Binary files /dev/null and b/docs/extend/publish/_img/share.png differ diff --git a/docs/extend/publish/_img/upload-extension.png b/docs/extend/publish/_img/upload-extension.png new file mode 100644 index 00000000000..d8452db389a Binary files /dev/null and b/docs/extend/publish/_img/upload-extension.png differ diff --git a/docs/extend/publish/_shared/before-publishing.md b/docs/extend/publish/_shared/before-publishing.md new file mode 100644 index 00000000000..4384d857f17 --- /dev/null +++ b/docs/extend/publish/_shared/before-publishing.md @@ -0,0 +1,11 @@ +Below is a list of **requirements** that must be checked before publishing to the Marketplace. + +
          +
        • **Ensure the proper permissions are granted to use any images (icons, logos, screenshots, etc.).**
        • +
        • **Include a thorough `overview.md` file to describe your listing in the Marketplace.**
        • +
        • **Include an icon for your extension which is atleast 128x128 pixels in size.**
        • +
        • **When referring to Microsoft products, use full names in place of abbreviations.**
        • +
          • **e.g. VSTS vs. VSTS.**
          +
        • **Refrain from using brand names in your extension's name.**
        • +
        + diff --git a/docs/extend/publish/_shared/create-publisher.md b/docs/extend/publish/_shared/create-publisher.md new file mode 100644 index 00000000000..a456c928cec --- /dev/null +++ b/docs/extend/publish/_shared/create-publisher.md @@ -0,0 +1,18 @@ +Every item on the Visual Studio Marketplace, including extensions and integrations, belong to a publisher. + +A publisher has a unique identifier and a name. The name is displayed on the cards of items from that publisher on the Marketplace: + +
        +Marketplace card showing extension with publisher name +
        + +A publisher is owned by a user, typically the user that created it, and can also be shared with other users. + +1. Sign in to the [Visual Studio Marketplace Publishing Portal](http://aka.ms/vsmarketplace-manage) +2. If you are not already a member of an existing publisher, you'll be prompted to create a publisher. If you're not prompted to create a publisher, scroll down to the bottom of the page and select Publish Extensions underneath Related Sites. + * Specify an idenitifer for your publisher, for example: `mycompany-myteam` + * This will be used as the value for the `publisher` attribute in your extensions' manifest file. + * Specify a display name for your publisher, for example: `My Team` +3. Review the [Marketplace Publisher Agreement](http://aka.ms/vsmarketplace-agreement) and click **Create** + +Once the publisher has been created, you'll be directed to the manage items, which will have no items. \ No newline at end of file diff --git a/docs/extend/publish/_shared/request-verification.md b/docs/extend/publish/_shared/request-verification.md new file mode 100644 index 00000000000..9bba472b1e7 --- /dev/null +++ b/docs/extend/publish/_shared/request-verification.md @@ -0,0 +1,23 @@ +The first step is verification of your publisher. Only **verified** publishers can have public items on the Marketplace. + +> **Developing for Visual Studio Code?** If so, you do not need to request verification. Verification is only required for Team Services integrations or extensions. + +Once you are ready to publish a public Team Services listing to the Marketplace, follow these steps: + +1. Send an email to [vsmarketplace@microsoft.com](http://aka.ms/vsmarketplace-contact). + * Use the subject `Publisher verification request`. + * Include your publisher ID in the e-mail. + * Send from your organization/company e-mail address. + * Share details of your association with a business/company and other information such as: + * Link to your site + * Link to your LinkedIn account + * Link to your GitHub account + * Link to your blog + * Share details about your extension/integration. +2. Microsoft will respond within 2 business days. + +You might be asked to provide more details about yourself or your organization/company. You might also be asked to share your extension with Microsoft. + +> **Important**: Once your publisher is verified, you will not be able to change its display name without contacting Microsoft. + +> Please make sure that the publisher ID has no reference to Microsoft or any of its products. Create a publisher ID that is representative of you and/or your company. For instance, if your company name is Fabrikam Fiber, a good publisher name is "fabrikam-fiber". Microsoft reserves the rights to reject publisher IDs that do not meet its review criteria. \ No newline at end of file diff --git a/docs/extend/publish/command-line.md b/docs/extend/publish/command-line.md new file mode 100644 index 00000000000..e175ec4fe56 --- /dev/null +++ b/docs/extend/publish/command-line.md @@ -0,0 +1,70 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Publishing and Packaging an Extension from the Command Line | Extensions for Visual Studio Team Services +description: How to package and publish your VSTS Extension from the command line. +ms.assetid: 7adcb1a2-1894-4751-8bed-7c04d084b5cf +ms.manager: douge +ms.author: elbatk +ms.date: 08/24/2016 +--- + +# Publish from the command line + +You can use the TFS Cross Platform Command Line Interface (tfx-cli) to publish your extension to the Visual Studio Marketplace. + +See the overview of [publish, install, and share](./overview.md) for additional details. + +## Before you begin + +Before you begin, you need to get the TFX CLI from Node Package Manager and generate a personal access token. +Also, if you have not done so, you will need to set up a Publisher in the Gallery. + +### Acquire the TFS Cross Platform Command Line Interface + +[!INCLUDE [Control](../_shared/procedures/acquire-tfx-cli.md)] + +### Acquire a personal access token + +[!INCLUDE [Control](../_shared/procedures/acquire-pat.md)] + +### Create a publisher + +If you haven't already created a publisher, you can do so using the command line tool. + +[!INCLUDE [Control](../_shared/procedures/command-line-create-publisher.md)] + +## Publish from the command line + +Once the TFX CLI is installed and you have your personal access token, you can use the tool to package and publish your extension. + +1. Open a command prompt to the root directory of your extension. +2. Run the `tfx extension publish` command passing in any necessary parameters. +Run `tfx extension publish --help` to see all available options. + +You may receive the following error when publishing if your extension has already been published: + +``` +Failed Request: Internal Server Error(500) - Version number must increase each time an extension is published. Extension: fabrikam.my-extension Current version: 0.1.9 Updated version: 0.1.9 +``` + +You can add the `--rev-version` command line option to automatically increment the *patch* version of your extension. +Note that this will also save the new version to your manifest. + + +#### Example + +``` +C:\vso-team-calendar>tfx extension publish --share-with fabrikam --rev-version +Copyright Microsoft Corporation +> Personal access token: +Checking if this extension is already published +It is, update the extension +Waiting for server to validate extension package... +Sharing extension with fabrikam. + +=== Completed operation: publish extension === + - Packaging: C:\vso-team-calendar\fabrikam.team-calendar-0.2.6.vsix + - Publishing: success + - Sharing: shared with fabrikam +``` diff --git a/docs/extend/publish/extension-report.md b/docs/extend/publish/extension-report.md new file mode 100644 index 00000000000..3fcfc37d76d --- /dev/null +++ b/docs/extend/publish/extension-report.md @@ -0,0 +1,32 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Extension Report | Visual Studio Team Services +description: An overview of reports available for an extension. +--- + +# Extension Report + +Now that your extension is available in the [Visual Studio Marketplace](https://marketplace.visualstudio.com), you can use the **Reports** feature to now track and analyze how the extension is performing and take required actions. +To view the extension's report, visit your [publisher page](https://aka.ms/vsmarketplace-manage) and select the extension. + +## Uninstall +You can view how many accounts have uninstalled your extension, daily trend of uninstall, detailed deedback shared during uninstall and top uninstall reasons. +You can use search for text and dates to analyze and draw more insights from the detailed feedback. + +If your extension is paid you can also Contact your users for transactional communication. Marketplace will broker the first communication with the user as our privacy policy doesn’t allow direct sharing of customer email address. + +**Important** Please follow the below guidance on transactional and promotional communication. A publisher found to do promotional communication or spamming users will be blacklisted and won't be able to use the **Contact** feature for any of his extensions. + +**Transactional Communication**: Transactional emails convey critical information necessary for the continued use of the extension or service. Examples include critical security notices, transaction confirmations, product recall notices, specific feedback request and service discontinuation. notices. +**Promotional Emails**: Promotional emails are used to market your extension, product, service, website, or event.  Examples include invitations to events or Web casts, information about new marketing or partner programs, offers to prospects to obtain value-added content.  Almost all newsletters fall into the promotional bucket as they generally contain at least some promotional content. + +## Ratings and Review +This tab will give you the information of the average rating for the selected period w.r.t. to overall rating, the average rating by number of reviewers and the daily trend of average rating. The details section provides all the reviews and your responses in transactional view. +You can take actions of **Reply** or **Edit** of a previous response and better manage engagement with your extension users. You can also **Appeal** to void a rating if the issue reported is due to Marketplace or the underlying platform. If the issue is valid, we shall void the rating. + +Export to Excel +All data elements available in the reports page are also available for download in XLS format to aid creating your own custom reports. + + + diff --git a/docs/extend/publish/integration.md b/docs/extend/publish/integration.md new file mode 100644 index 00000000000..0d2f85516c6 --- /dev/null +++ b/docs/extend/publish/integration.md @@ -0,0 +1,134 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Package and Publish an Integration | Extensions for Visual Studio Team Services +description: How to package and publish your integration to the Visual Studio Marketplace +ms.assetid: 61550050-c6d7-40e1-9ea7-030b48b04e3b +ms.manager: douge +ms.author: elbatk +ms.date: 08/29/2016 +--- + +# Package and Publish an integration to the Marketplace + +Do you have a tool, service, or product that integrates with VSTS or Team Foundation Server? +If so, help users find it by publishing it on the Visual Studio Marketplace. +The Visual Studio Marketplace is a one-stop-shop for individuals and teams to find tools that extend and enhance the experience. + +[Browse the marketplace](https://marketplace.visualstudio.com) to see examples of other integrations and extensions. + +> [!NOTE] +> If you're looking for packaging and publishing information for extensions, check out [Package & Publish Extensions](./overview.md). + +## Publishing Requirements + +[!INCLUDE [](./_shared/before-publishing.md)] + +## What you will need + +1. 128x128 pixel logo (PNG or JPEG format) representing your integration, yourself, or your company/organization +2. Minimum of 1 screen shot showing your integration +3. Call to action / get started URL (where users should go to get started with your integration) + +## Steps + +Publishing to the Marketplace is an iterative process that starts with creating a manifest file that defines your integration and key discovery characteristics (like screen shots, logos, and overview content). This information is used to present your integration to users on the Marketplace, for example: + +![example](./_img/integration-example.png) + +[Jenkins for Visual Studio Team Services](https://marketplace.visualstudio.com/items?itemName=ms-vsts.services-jenkins) + +Note: you will see the term `extension` used in documentations referenced below. Extensions are another type of Marketplace item and share many similarities from a discovery standpoint as integrations. + +
        + Need help getting your integration on the Marketplace? [Contact us](http://go.microsoft.com/fwlink/?LinkId=615292). And, yes, this e-mail address is monitored by real people. +
        + +### Create a publisher + +[!INCLUDE [](./_shared/create-publisher.md)] + +### Create a folder to contain your item manifest and other assets + +Before you package your integration as an extension, you'll need to create a `home` folder to contain some required assets, within this folder: + +1. Create a folder called `images` to contain: + * Logo for your integration (128x128 pixels) + * Screen shots (1366x768 pixels) +2. Create a file called `overview.md` + * This is where you'll describe your integration. + * To learn more about markdown, see [GitHub Flavored Markdown](https://help.github.com/articles/github-flavored-markdown/) +3. Create a file called `vss-integration.json` + * This is your Marketplace listing's manifest file, it contains many properties to describe your extension in your Marketplace listing. You can browse the [extension manifest reference here](../develop/manifest.md) + +#### Extension Manifest + +1. Fill your `vss-integration.json` file with the following JSON: + + [!code-javascript[JSON]](../_data/integration.json)] + +2. Update the JSON using the following reference: + +[!INCLUDE [](../_shared/manifest-core.md)] +[!INCLUDE [](../_shared/manifest-discovery.md)] + +#### Details page + +* 1 - description +* 2 - icon +* 3 - categories +* 4 - screenshots +* 5 - content (details) +* 6 - links +* 7 - branding + +![card](../develop/_img/extension-details-page.png) + +
        + Make sure the "public" attribute is set to "false" (or not set at all) to avoid your extension or integration from becoming prematurely visible to all users on the Marketplace. +
        + +
        + +### Package your manifest and assets + +#### Get the package tool (tfx-cli) +You can install or update the TFS Cross Platform Command Line Interface (tfx-cli) using `npm`, a component of [Node.js](http://nodejs.org), from your command line. + +```no-highlight +npm i -g tfx-cli +``` + +#### Package your integration in a .vsix file + +```no-highlight +tfx extension create --manifest-globs vss-extension.json +``` + +> [!NOTE] +> An extension/integration's version must be incremented on every update.
        +> If you haven't incremented your extension/integration in the manifest, you should pass the `--rev-version` command line switch. This will increment the *patch* version number of your extension and save the new version to your manifest. + +### Publish your integration to the Marketplace + +[!INCLUDE [Publish_extension](../_shared/procedures/publish.md)] + +### Share your integration +Before an integration can be installed into a VSTS account, it must be shared with that account. Sharing is a requirement during development and testing of an integration, as it is the only way to run an integration. + +To share an integration so it can be installed: + +1. Click an integration from the list of displayed items +2. Click the **Share** button +3. Specify the name of the VSTS account to make this integration visible to. + - For example, to make an integration visible to the fabrikam-fiber-inc.visualstudio.com account, specify `fabrikam-fiber-inc`. + +#### Update an item + +[!INCLUDE [Update_extension](../_shared/procedures/update.md)] + +## Make your integration public (visible to everyone) + +For information on making your integration public, visit [Make your listing public](./publicize.md). + + diff --git a/docs/extend/publish/overview.md b/docs/extend/publish/overview.md new file mode 100644 index 00000000000..c23839fbef7 --- /dev/null +++ b/docs/extend/publish/overview.md @@ -0,0 +1,119 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Package, publish, & unpublish extensions | Visual Studio Team Services +description: An overview of packaging, publishing, unpublishing, and sharing an extension for Visual Studio Team Services. +ms.assetid: 77b385a2-069a-4704-9a17-ad9f79a36f17 +ms.manager: douge +ms.author: elbatk +ms.date: 08/29/2016 +--- + +# Package, publish, unpublish, and install Team Services extensions + +After writing a VSTS extension, the next step is to package it. +After packaging, extensions are published, or uploaded, to the [Visual Studio Marketplace](https://marketplace.visualstudio.com), where they can be installed +by users that the extensions are shared with. The Marketplace is a centralized, global repository for private and public extensions, integrations, and other offers from Microsoft. + +>[!NOTE] +>For information on the discovery properties available in your extension's manifest file that will help users discover and learn about your extension, +>visit the [Extension Manifest Reference](../develop/manifest.md#discoveryprops) + +## Publishing Requirements + +[!INCLUDE [](./_shared/before-publishing.md)] + +## Create a publisher + +[!INCLUDE [](./_shared/create-publisher.md)] + + + +## Package + +Extensions are packaged as VSIX 2.0-compatible .vsix files. +To upload your extension, you need to package it as a VSIX 2.0-compatible .vsix file. +Microsoft provides a cross-platform command line interface (CLI) to package (and also publish) your extension. + +### Get the package tool (tfx-cli) +You can install or update the TFS Cross Platform Command Line Interface (tfx-cli) using `npm`, a component of [Node.js](http://nodejs.org), from your command line. + +```no-highlight +npm i -g tfx-cli +``` + +### Package your extension in a .vsix file + +```no-highlight +tfx extension create --manifest-globs vss-extension.json +``` + +>[!NOTE] +>An extension/integration's version must be incremented on every update.
        +>If you haven't incremented your extension/integration in the manifest, you should pass the `--rev-version` command line switch. This will increment the *patch* version number of your extension and save the new version to your manifest. + +
        +## Publish + +[!INCLUDE [Package_extension](../_shared/procedures/publish.md)] + +## Share + + +Before an extension can be installed into a VSTS account, it must be shared with that account. Sharing is a requirement during development and testing of an extension, as it is the only way to run an extension. + +To share an extension so it can be installed: + +1. Click an extension from the list of displayed items +2. Click the **Share** button +3. Specify the name of the VSTS account to make this extension visible to. + - For example, to make an extension visible to the fabrikam-fiber-inc.visualstudio.com account, specify `fabrikam-fiber-inc`. + +## Install + +To install an extension that has been shared: + +1. From your Team Services account home page, select the Marketplace icon in the top right corner and choose "Manage Extensions": +
        ![Manage Extensions](_img/manage-extensions.png)
        +2. Find the extension under the **Shared with this account** category: +
        ![Shared with me](./_img/extensions-tab-shared.png)
        +3. Click the card to open the item in the Marketplace +4. From the item's details page, click the **Install** button +5. Choose the account you shared the extension with and proceed through the installation process. + +## Update + +[!INCLUDE [Update_extension](../_shared/procedures/update.md)] + +## Make your extension public (visible to everyone) + +For information on making your extension public, visit [Make your listing public](./publicize.md). + +## Unpublish +You can unpublish/delist free extensions, if you no longer want to offer them in the Marketplace or published by mistake. + +Here are some scenarios where you might want to remove your extension from the Marketplace: + * You developed another extension and no longer want to offer the current one. + * Your extension has a problem, so you want to remove your extension from the Marketplace until you have resolved the problem. + * You published your extension as public by mistake. + +To unpublish, select the extension on your [publisher page](https://aka.ms/vsmarketplace-manage) and choose **Unpublish** on the menu. +Your extension will be unpublished immediately from the Marketplace, and new users won’t be able to install it. Ratings and reviews for your extension will stay intact. + +To offer your extension again in the Marketplace, choose **Publish** on the menu. + +You can also choose to remove your extension completely from the Marketplace if your extension has zero (0) installs. To do this, choose **Remove** on the menu. This action cannot be undone. + +###Unpublish/Remove requirements +Certain criteria must be met for an extension to be unpublished or removed: + +| Action | Requirements | +|-----------|---------------------------------------------------------------| +| Unpublish | Only **free extensions** may be unpublished. | +| Remove | Your extension must have **zero (0)** installs to be removed. | + +**Important**: If you must remove your extension due to legal or security problems, contact the [Marketplace team](http://aka.ms/vsmarketplace-contact). We will review the request and manually delete the extension. + +## Contact + +Send questions about publishing items to the Visual Studio Marketplace to [vsmarketplace@microsoft.com](http://aka.ms/vsmarketplace-contact). diff --git a/docs/extend/publish/publicize.md b/docs/extend/publish/publicize.md new file mode 100644 index 00000000000..8b39057b445 --- /dev/null +++ b/docs/extend/publish/publicize.md @@ -0,0 +1,69 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Make Your Extension or Integration Public | Extensions for Visual Studio Team Services +description: Guideline for making an integration or extension publicly visible on the Visual Studio Marketplace +ms.assetid: d4dab00f-5089-4754-85f0-19bff1cb364a +ms.manager: douge +ms.author: elbatk +ms.date: 08/29/2016 +--- + +# Make your extension or integration public + +The [Visual Studio Marketplace](https://marketplace.visualstudio.com) is a single place users can go to find and purchase extensions, tools, products, and services that extend Visual Studio, Visual Studio Team Services, Visual Studio Code, or Team Foundation Server. + +This page covers the required steps to make your integration or extension listing publicly available in the Marketplace. + +* Learn more about developing an [extension for Visual Studio Team Services](../index.md) +* Learn more about [packaging and publishing an extension to the Marketplace](./overview.md) +* Learn more about [packaging and publishing an integration to the Marketplace](./integration.md) + + +> As you are developing your extension or the content for your Marketplace page (for either an extension or integration), your extension can and should remain private. + +## Qualifications + +To have a public listing on the Marketplace, your integration or extension must meet the following qualifications: + +1. Works with or extends one of the following Microsoft products or services: + * Visual Studio, or + * Visual Studio Team Services (formerly Visual Studio Online), or + * Visual Studio Code, or + * Visual Studio Team Foundation Server (2012, 2013, or 2015) +2. You (or your company) owns, develops, and is licensed to distribute and advertise the integration or extension. +3. The extension or integration is actively maintained. + +Microsoft might also request a demo and to review the content planned for your Marketplace entry. For more details, refer to the [Visual Studio Marketplace Publisher Agreement](http://aka.ms/vsmarketplace-agreement), which you agreed to when creating your publisher. + +## Process + +The process to have a public Team Services listing for an integration or extension is the same. The first step is verification of your publisher. Only **verified** publishers can have public items on the Marketplace. + +> **Developing for Visual Studio Code?** If so, you do not need to request verification. Verification is only required for Team Services integrations or extensions. + +Once you are ready to publish a public Team Services listing to the Marketplace, follow these steps: + +1. Send an email to [vsmarketplace@microsoft.com](http://aka.ms/vsmarketplace-contact). + * Use the subject `Publisher verification request`. + * Include your publisher ID in the e-mail. + * Send from your organization/company e-mail address. + * Share details of your association with a business/company and other information such as: + * Link to your site + * Link to your LinkedIn account + * Link to your GitHub account + * Link to your blog + * Share details about your extension/integration. +2. Microsoft will respond within 2 business days. + +You might be asked to provide more details about yourself or your organization/company. You might also be asked to share more details about your integration or share your extension with Microsoft. + +Once your publisher id has been verified you need to set the [public flag](../develop/manifest.md#public-flag) to true in your manifest for your extension to be available publicly. + +> **Important**: Once your publisher is verified, you will not be able to change its display name without contacting Microsoft. + +> Please make sure that the publisher ID has no reference to Microsoft or any of its products. Create a publisher ID that is representative of you and/or your company. For instance, if your company name is Fabrikam Fiber, a good publisher name is "fabrikam-fiber". Microsoft reserves the rights to reject publisher IDs that do not meet its review criteria. + +## Contact + +Send questions about publishing items to the Visual Studio Marketplace to [vsmarketplace@microsoft.com](http://aka.ms/vsmarketplace-contact). diff --git a/docs/extend/publish/publish-azure.md b/docs/extend/publish/publish-azure.md new file mode 100644 index 00000000000..7b8079b3714 --- /dev/null +++ b/docs/extend/publish/publish-azure.md @@ -0,0 +1,20 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: How to Deploy Web Content to Azure | Extensions for Visual Studio Team Services +description: How to publish your extension for VSTS to a Microsoft Azure web site. +ms.assetid: 86c9d7d9-51ea-4169-bf2e-f95138679a00 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Deploy web content to Azure + +
        + If your extension does not require any back-end logic, consider hosting your static content direcly on Visual Studio Team Services. See [content hosting](../develop/static-content.md). +
        + +After you've [created an extension](../get-started/node.md), you can publish it to Azure so that it's available in the cloud. + +[!INCLUDE [Publish](../_shared/procedures/publish-azure.md)] diff --git a/docs/extend/reference/client/context.md b/docs/extend/reference/client/context.md new file mode 100644 index 00000000000..f8aa2cb908d --- /dev/null +++ b/docs/extend/reference/client/context.md @@ -0,0 +1,74 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Web Context | Extensions for Visual Studio Team Services +description: Context data avaialble in your web extensions +ms.assetid: b926a050-1e70-4907-8963-e4f2ee9939e5 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Web context + +The `core SDK` provides an API for getting context information, for example the current project's ID (if your extension is operating at a project or team level). + + + +### Usage + + +#### Example + +``` +{ + "id": "my-extension", + ... + "baseUri": "https://{{account.name}}.myservice.com/my-extension/{{project.id}}" +} +``` + +### Full JSON example + +```json +{ + "user": { + "id": "d6245f20-2af8-44f4-9451-8107cb2767db", + "name": "Norman Paulk", + "email": "fabrikamfiber16@hotmail.com", + "uniqueName": "fabrikamfiber16@hotmail.com" + }, + "team": { + "id": "a63ff425-76b0-4dac-9b81-b265fb361da4", + "name": "Quality assurance", + "userIsMember": true, + "userIsAdmin": true + }, + "project": { + "id": "c501f0f0-9dca-40a3-ac5a-4d2d9a4a1825", + "name": "Fabrikam-Fiber-Git" + }, + "collection": { + "id": "7696cd7b-25fd-4378-b5f2-7c97228ee542", + "name": "DefaultCollection", + "uri": "https://fabrikam.visualstudio.com/DefaultCollection/", + "relativeUri": "/DefaultCollection/" + }, + "account": { + "id": "dab4b99d-4317-4b8a-98b8-f02ecaceb5b4", + "name": "fabrikam", + "uri": "https://fabrikam.visualstudio.com/", + "relativeUri": "/" + }, + "host": { + "id": "7696cd7b-25fd-4378-b5f2-7c97228ee542", + "name": "DefaultCollection", + "uri": "https://fabrikam.visualstudio.com/DefaultCollection/", + "relativeUri": "/DefaultCollection/", + "hostType": "projectCollection", + "scheme": "https", + "authority": "fabrikam.visualstudio.com" + } +} +``` + diff --git a/docs/extend/reference/client/controls/combo.md b/docs/extend/reference/client/controls/combo.md new file mode 100644 index 00000000000..9886931213d --- /dev/null +++ b/docs/extend/reference/client/controls/combo.md @@ -0,0 +1,33 @@ +--- +title: Combo Control | Extensions for Visual Studio Team Services +description: Use the combo control to have an editable control with the drop down support like list, tree, date-time and multi-value. +ms.assetid: 830B76D7-FE6F-CE63-0689-7DA663207A51 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Combo control + +See [Use combo](../../../develop/ui-controls/comboo.md) for basic usage and advanced samples. + +## Create a combo + +### TypeScript +``` javascript + import Controls = require("VSS/Controls"); + import Combos = require("VSS/Controls/Combos"); + + // Create the combo in a container element + var combo = Controls.create(Combos.Combo, container, options); +``` + +### JavaScript +``` javascript + require(["VSS/Controls", "VSS/Controls/Combos"], function(Controls, Combos) { + // Create the combo in a container element + var combo = Controls.create(Combos.Combo, container, options); + }); +``` diff --git a/docs/extend/reference/client/controls/grid.md b/docs/extend/reference/client/controls/grid.md new file mode 100644 index 00000000000..f6d22cbbc7a --- /dev/null +++ b/docs/extend/reference/client/controls/grid.md @@ -0,0 +1,47 @@ +--- +title: Grid Control | Extensions for Visual Studio Team Services +description: Use the grid control to show rows and columns items that can be sorted, resized and moved in your app for Visual Studio Team Services. +ms.assetid: d0b0cded-3e7f-4972-95bb-8b634fb13f94 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Grid control + +See [Use grid](../../../develop/ui-controls/grido.md) for basic usage and advanced samples. + +## Create a grid + +### TypeScript +``` javascript +import Controls = require("VSS/Controls"); +import Grids = require("VSS/Controls/Grids"); + +// Create the grid in a container element +var grid = Controls.create(Grids.Grid, container, options); +``` + +### JavaScript +``` javascript +require(["VSS/Controls", "VSS/Controls/Grids"], function(Controls, Grids) { + // Create the grid in a container element + var grid = Controls.create(Grids.Grid, container, options); +}); +``` + +## Q & A + + + +#### Q: How is the performance with huge data? + +A: Grid uses UI virtualization which performs great on tens of thousands of rows. + +#### Q: Can I have variable height rows? + +A: No at the moment. This is caused by UI virtualization where scrolling is managed by grid itself. However, we are thinking to improve this scenario. + + \ No newline at end of file diff --git a/docs/extend/reference/client/controls/menubar.md b/docs/extend/reference/client/controls/menubar.md new file mode 100644 index 00000000000..7a45bcb3b91 --- /dev/null +++ b/docs/extend/reference/client/controls/menubar.md @@ -0,0 +1,33 @@ +--- +title: MenuBar Control | Extensions for Visual Studio Team Services +description: Used to display a toolbar in your app for Visual Studio Team Services. +ms.assetid: 62A19D22-D6BD-4BC2-8A36-D8E894087449 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# MenuBar control + +See [Use menubar](../../../develop/ui-controls/menubaro.md) for basic usage and advanced samples. + +## Create a menubar + +### TypeScript +``` javascript +import Controls = require("VSS/Controls"); +import Menus = require("VSS/Controls/Menus"); + +// Create the menubar in a container element +var menubar = Controls.create(Menus.MenuBar, container, options); +``` + +### JavaScript +``` javascript +require(["VSS/Controls", "VSS/Controls/Menus"], function(Controls, MenuBar) { + // Create the menubar in a container element + var menubar = Controls.create(Menus.MenuBar, container, options); +}); +``` diff --git a/docs/extend/reference/client/controls/modaldialog.md b/docs/extend/reference/client/controls/modaldialog.md new file mode 100644 index 00000000000..ecc11c2803f --- /dev/null +++ b/docs/extend/reference/client/controls/modaldialog.md @@ -0,0 +1,34 @@ +--- +title: Modal Dialog Control | Extensions for Visual Studio Team Services +description: Use the modal dialog control to collect user input or display message in your app for Visual Studio Team Services. +ms.assetid: 1ABD1859-0BF4-4546-A750-1786B0227E0A +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Modal dialog control + +See [Use modal dialog](../../../develop/ui-controls/modaldialogo.md) for basic usage and advanced samples. + +## Create a modal dialog + +### TypeScript +``` javascript + import Dialogs = require("VSS/Controls/Dialogs"); + + // Create the modal dialog + var dialog = Dialogs.show(Dialogs.ModalDialog, options); +``` + +### JavaScript +``` javascript + require(["VSS/Controls/Dialogs"], function(Dialogs) { + // Create the modal dialog + var dialog = Dialogs.show(Dialogs.ModalDialog, options); + }); +``` + + diff --git a/docs/extend/reference/client/controls/splitter.md b/docs/extend/reference/client/controls/splitter.md new file mode 100644 index 00000000000..cc9dd1caeab --- /dev/null +++ b/docs/extend/reference/client/controls/splitter.md @@ -0,0 +1,35 @@ +--- +title: Splitter Control | Extensions for Visual Studio Team Services +description: Use the splitter control to have splitted and resizable containers for other controls in your app for Visual Studio Team Services. +ms.assetid: FD43DC4F-618E-4F7C-992A-F05734041A50 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Splitter control + +See [Use splitter](../../../develop/ui-controls/splittero.md) for basic usage and advanced samples. + +## Create a splitter + +### TypeScript +``` javascript + import Controls = require("VSS/Controls"); + import Splitter = require("VSS/Controls/Splitter"); + + // Create the splitter in a container element + var splitter = Controls.create(Splitter.Splitter, container, options); +``` + +### JavaScript +``` javascript + require(["VSS/Controls", "VSS/Controls/Splitter"], function(Controls, Splitter) { + // Create the splitter in a container element + var splitter = Controls.create(Splitter.Splitter, container, options); + }); +``` + + diff --git a/docs/extend/reference/client/controls/tree.md b/docs/extend/reference/client/controls/tree.md new file mode 100644 index 00000000000..afbee9f7004 --- /dev/null +++ b/docs/extend/reference/client/controls/tree.md @@ -0,0 +1,33 @@ +--- +title: TreeView Control | Extensions for Visual Studio Team Services +description: Use the treeview to display hierarchical data in your app for Visual Studio Team Services. +ms.assetid: 20DE4AA3-3B76-CAAF-0683-81F85BDE4F39 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# TreeView control + +See [Use treeview](../../../develop/ui-controls/treeviewo.md) for basic usage and advanced samples. + +## Create a treeview + +### TypeScript +``` javascript +import Controls = require("VSS/Controls"); +import TreeView = require("VSS/Controls/TreeView"); + +// Create the treeView in a container element +var treeview = Controls.create(TreeView.TreeView, container, options); +``` + +### JavaScript +``` javascript +require(["VSS/Controls", "VSS/Controls/TreeView"], function(Controls, TreeView) { + // Create the treeView in a container element + var treeview = Controls.create(TreeView.TreeView, container, options); +}); +``` diff --git a/docs/extend/reference/client/controls/waitcontrol.md b/docs/extend/reference/client/controls/waitcontrol.md new file mode 100644 index 00000000000..91d7fcfd5b7 --- /dev/null +++ b/docs/extend/reference/client/controls/waitcontrol.md @@ -0,0 +1,34 @@ +--- +title: Wait Control | Extensions for Visual Studio Team Services +description: Use the wait control to display progress message for long running operations in your app for Visual Studio Team Services. +ms.assetid: 418275E5-F2BA-42DF-B5E6-A88324B25123 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Wait control + +See [Use wait control](../../../develop/ui-controls/waitcontrolo.md) for basic usage and advanced samples. + +## Create a wait control + +### TypeScript +``` javascript + import Controls = require("VSS/Controls"); + import StatusIndicator = require("VSS/Controls/StatusIndicator"); + + // Create the wait control in a container element + var waitcontrol = Controls.create(StatusIndicator.WaitControl, container, options); +``` + +### JavaScript +``` javascript + require(["VSS/Controls", "VSS/Controls/StatusIndicator"], function(Controls, StatusIndicator) { + // Create the wait control in a container element + var waitcontrol = Controls.create(StatusIndicator.WaitControl, container, options); + }); +``` + diff --git a/docs/extend/reference/client/samples/client-services/ExtensionDataService.md b/docs/extend/reference/client/samples/client-services/ExtensionDataService.md new file mode 100644 index 00000000000..f6085c8cd53 --- /dev/null +++ b/docs/extend/reference/client/samples/client-services/ExtensionDataService.md @@ -0,0 +1,28 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: VSTS Extension Data Service Example +description: A sample that shows how to use a extension data service with a VSTS extension +ms.assetid: 4e66185f-a91d-4e2b-82b8-fd43f3db9fb6 +ms.manager: douge +ms.author: elbatk +ms.date: 08/25/2016 +--- + +VSTS extension data service sample -- getting the data service + +```js + // Get the data service + VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) { + // Set a user-scoped preference + dataService.setValue("pref1", 12345, {scopeType: "User"}).then(function(value) { + console.log("User preference value is " + value); + }); + // Get an account-scoped document in a collection + dataService.getDocument("MyCollection", "SomeDocumentId").then(function(doc) { + console.log("Document is " + JSON.stringify(doc, null, 2)); + }); + }); +``` + +See [store and manage data](../../../../develop/data-storage.md) to learn more about storing user preferences and collections of documents. diff --git a/docs/extend/reference/client/samples/client-services/HostDialogService.md b/docs/extend/reference/client/samples/client-services/HostDialogService.md new file mode 100644 index 00000000000..cf25a752ade --- /dev/null +++ b/docs/extend/reference/client/samples/client-services/HostDialogService.md @@ -0,0 +1,29 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: VSTS Host Dialog Service Example +description: A sample that shows how to use a host dialog service with a VSTS extension +ms.assetid: 6efd62af-d344-4af2-aecf-663e23aca5d3 +ms.manager: douge +ms.author: elbatk +ms.date: 08/25/2016 +--- + +```js + VSS.getService(VSS.ServiceIds.Dialog).then(function(dialogService) { + var extensionCtx = VSS.getExtensionContext(); + // Build absolute contribution ID for dialogContent + var contributionId = extensionCtx.publisherId + "." + extensionCtx.extensionId + ".dialogContent"; + + // Show dialog + var dialogOptions = { + title: "My Dialog Title", + width: 800, + height: 600 + }; + + dialogService.openDialog(contributionId, dialogOptions); + }); +``` + +See [Using host dialog](../../../../develop/using-host-dialog.md) for additional samples. \ No newline at end of file diff --git a/docs/extend/reference/client/samples/client-services/HostNavigationService.md b/docs/extend/reference/client/samples/client-services/HostNavigationService.md new file mode 100644 index 00000000000..6568dd22ccf --- /dev/null +++ b/docs/extend/reference/client/samples/client-services/HostNavigationService.md @@ -0,0 +1,21 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: VSTS Extension Host Navigation Service Example +description: A sample that shows how to use a host navigation service with a VSTS extension +ms.assetid: d23bf2e9-f5c6-4108-8af5-fab62c848ca9 +ms.manager: douge +ms.author: elbatk +ms.date: 08/17/2016 +--- + +```js + // Get navigation service + VSS.getService(VSS.ServiceIds.Navigation).then(function(navigationService) { + // Get current hash value from host url + navigationService.getHash().then(function (hash) { + console.log("Host hash value: " + hash); + }); + }); +``` +See [Host navigation](../../../../develop/host-navigation.md) for additional samples. \ No newline at end of file diff --git a/docs/extend/reference/client/ui-controls.md b/docs/extend/reference/client/ui-controls.md new file mode 100644 index 00000000000..dbf228f9f35 --- /dev/null +++ b/docs/extend/reference/client/ui-controls.md @@ -0,0 +1,21 @@ +--- +title: Web UI Controls | Extensions for Visual Studio Team Services +description: Use these controls in your extension for Visual Studio Team Services. +ms.assetid: ccb6413e-ca29-4f3d-8f1d-caf896706b10 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# UI controls + +- [Grid](./controls/grid.md) +- [TreeView](./controls/tree.md) +- [MenuBar](./controls/menubar.md) +- [Combo](./controls/combo.md) +- [ModalDialog](./controls/modaldialog.md) +- [Splitter](./controls/splitter.md) +- [WaitControl](./controls/waitcontrol.md) + diff --git a/docs/extend/reference/targets/overview.md b/docs/extend/reference/targets/overview.md new file mode 100644 index 00000000000..d6d23a1e1f8 --- /dev/null +++ b/docs/extend/reference/targets/overview.md @@ -0,0 +1,160 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Extension Points | Extensions for Visual Studio Team Services +description: Browse through the places where your extension can extend Visual Studio Online. +ms.assetid: 007954b7-9424-4ea6-916b-8cb2f215f5c4 +ms.manager: douge +ms.author: elbatk +ms.date: 08/26/2016 +--- + +# Extension points + +This reference is designed to show where extensions can contribute new capabilities into Visual Studio Team Services. +An understanding of two key concepts: contributions and contribution types, is recommended. +See [contribution model](../../develop/contributions-overview.md) for an overview. + +
        +Install the [contributions-guide extension](https://marketplace.visualstudio.com/items/ms-samples.samples-contributions-guide) to see all the places where contributions can be made. +If you want to see how it's implemented, look at the [source for the extension](https://github.com/Microsoft/vso-extension-samples/tree/master/contributions-guide). +
        + +
        +## Hubs and hub groups + +A hub (like Backlog, Queries, or Branches) lives under (i.e. targets) a hub group. A hub group (like Code or Work) lives at a certain level (like project/team) and either in the main web or admin web areas. + +Most extensions will either contribute a hub to an existing hub group, or a new hub group to a certain navigation level. + +As an example, a hub contributed to the "Code" hub group would be declared like this in the extension's manifest: + +```json +{ + ... + "contributions": [ + { + "id": "my-custom-hub", + "type": "ms.vss-web.hub", + "targets": [ + "ms.vss-code-web.code-hub-group" + ], + "properties": { + "name": "Code Hub", + "order": 30, + "uri": "/views/code/custom.html" + } + } + ] +} +``` + +In this example: + +* `ms.vss-web.hub` is the type of this contribution. This type is defined in the `vss-web` extension published under the `ms` publisher. This type declares optional/required properties required by contributions of this type (name, order, etc). +* `ms.vss-code-web.code-hub-group` is the full ID of the hub group contribution this hub is targetting. This contribution is declared in the `vss-code-web` extension published under the `ms` publisher +* `my-custom-hub` is the short ID of this contribution; `{publisherId}.{extensionId}.my-custom-hub` is the full ID + +This new hub is rendered under the Code hub group: + +![sourcesshub](./vss/code/web/_img/hubs-source.png) + +### Targetable hub groups + + +Here are the most common, Microsoft-provided hub groups that hubs can be contributed to: + +Name | ID | Level | Preview +---------|--------------------------------------------|---------------------------------|----------------------------- +Code | `ms.vss-code-web.code-hub-group` | Project/team | ![sourcesshub](./vss/code/web/_img/hubs-source.png) +Work | `ms.vss-work-web.work-hub-group` | Project/team | ![workhub](./vss/work/web/_img/hubs-workitems.png) +Build | `ms.vss-build-web.build-hub-group` | Project/team | ![build](./vss/build/web/_img/hubs-build.png) +Release | `ms.vss-releaseManagement-web.hub-group-rm` | Project/team | ![releasehub](./vss/release/web/_img/hubs-release.png) +Test | `ms.vss-test-web.test-hub-group` | Project/team | ![build](./vss/test/web/_img/hubs-testmanagement.png) +Admin | `ms.vss-web.collection-admin-hub-group` | Project Collection (admin) | ![projectadmin](./vss/web/_img/hubs-admin-collection.png) +Admin | `ms.vss-web.project-admin-hub-group` | Project (admin) | ![projectadmin](./vss/web/_img/hubs-admin-project.png) + + +## Menus and toolbars + +See [how to add an action](../../develop/add-action.md) for details on contributing an action to a menu or toolbar. + + +### Admin + +Name | Target ID | Preview +----------------------------------|-----------------------------------------------------|------------------- +Collection overview toolbar | `ms.vss-admin-web.collection-overview-toolbar-menu` | +Collection overview projects grid | `ms.vss-admin-web.projects-grid-menu` | +Project overview toolbar | `ms.vss-admin-web.project-overview-toolbar-menu` | +Project overview teams grid | `ms.vss-admin-web.teams-grid-menu` | + + +### Build + +Name | Target ID | Preview +--------------------------|---------------------------------------------|------------------- +Completed build menu | `ms.vss-build-web.completed-build-menu` | ![completedBuildActions](./vss/build/web/_img/completedBuildActions.png) +Build definitions menu | `ms.vss-build-web.build-definition-menu` | ![buildDefinitionActions](./vss/build/web/_img/buildDefinitionActions.png) + + +### Release + +Name | Target ID | Preview +-----------------------------------------|-------------------------------------------------------------------------|------------------- +Release definition explorer context menu | `ms.vss-releaseManagement-web.release-definition-explorer-context-menu` | ![definitionExplorerContextMenu](./vss/release/web/_img/definitionExplorerContextMenu.png) +Release definition explorer toolbar menu | `ms.vss-releaseManagement-web.release-definition-explorer-toolbar-menu` | ![definitionExplorerToolbarMenu](./vss/release/web/_img/definitionExplorerToolbarMenu.png) +Release summary toolbar menu | `ms.vss-releaseManagement-web.release-editor-tool-bar-menu` | ![releaseSummaryToolbarMenu](./vss/release/web/_img/releaseSummaryToolbarMenu.png) +Release summary tab | `ms.vss-releaseManagement-web.release-details-view` | ![releaseSummaryTab](./vss/release/web/_img/releaseSummaryTab.png) +Release summary section | `ms.vss-releaseManagement-web.release-details-summary-tab` | ![releaseSummarySection](./vss/release/web/_img/releaseSummarySection.png) + + +### Code + +Name | Target ID | Preview +------------------------------------|--------------------------------------------------|------------------- +Source item (grid) menu | `ms.vss-code-web.source-grid-item-menu` | ![sourceItemGridActions](./vss/code/web/_img/sourceGridItemActions.png) +Source item (tree) menu | `ms.vss-code-web.source-tree-item-menu` | ![sourceItemTreeActions](./vss/code/web/_img/sourceTreeItemActions.png) +Source item (grid and tree) menu | `ms.vss-code-web.source-item-menu` | +Change list item menu | `ms.vss-code-web.change-list-item-menu` | +Change list summary item menu | `ms.vss-code-web.change-list-summary-item-menu` | +Git branches tree menu | `ms.vss-code-web.git-branches-tree-menu` | ![gitBranchesTree](./vss/code/web/_img/gitBranchesTreeActions.png) +Git branches summary menu | `ms.vss-code-web.git-branches-summary-grid-menu` | +Git branches diff summary menu | `ms.vss-code-web.git-branches-summary-grid-diff-menu` | + + +### Test + +Name | Target ID | Preview +---------------------------|---------------------------------------------|------------------- +Test run toolbar | `ms.vss-test-web.test-run-toolbar-menu` | +Test run grid menu | `ms.vss-test-web.test-run-grid-menu` | +Test plan suites toolbar | `ms.vss-test-web.test-plans-suites-toolbar` | +Test plan suites tree menu | `ms.vss-test-web.test-plans-suites-context` | +Test plan hub pivot tab | `ms.vss-test-web.test-plan-pivot-tabs` | ![testHubPivotTab](./vss/test/web/_img/test-plan-hub-pivot-tab-preview.png) + + +### Work + +Name | Target ID | Preview +--------------------------------|---------------------------------------------------|------------------- +Work item query menu | `ms.vss-work-web.work-item-query-menu` | ![queryActions](./vss/work/web/_img/queryActions.png) +Work item query results toolbar menu | `ms.vss-work-web.work-item-query-results-toolbar-menu` | ![queryResultsToolbarMenu](./vss/work/web/_img/queryResultsToolbarMenu.png) +Work item query results menu item | `ms.vss-work-web.query-result-work-item-menu` | ![queryResultItemMenu](./vss/work/web/_img/queryResultsItemMenu.png) +Work item toolbar | `ms.vss-work-web.work-item-toolbar-menu` | ![workItemActions](./vss/work/web/_img/workItemActions.png) +Backlog item menu | `ms.vss-work-web.backlog-item-menu` | ![backlogItemActions](./vss/work/web/_img/backlogItemActions.png) +Sprint board pivot filter menu | `ms.vss-work-web.sprint-board-pivot-filter-menu` | ![sprintBoardPivotFilterActions](./vss/work/web/_img/sprintBoardPivotFilterActions.png) +Board pivot filter menu | `ms.vss-work-web.backlog-board-pivot-filter-menu` | ![backlogBoardPivotFilterActions](./vss/work/web/_img/backlogBoardPivotFilterActions.png) +Card menu | `ms.vss-work-web.backlog-board-card-item-menu` | +Product backlog tab | `ms.vss-work-web.product-backlog-tabs` | ![productBacklogTab](../../_shared/procedures/_img/backlog-tab/product-backlog-tab.png) +Iteration backlog tab | `ms.vss-work-web.iteration-backlog-tabs` | ![iterationBacklogTab](../../_shared/procedures/_img/backlog-tab/iteration-backlog-tab.png) +Portfolio backlog pane | `ms.vss-work-web.portfolio-backlog-toolpane` | ![portfolioBacklogPane](../../_shared/procedures/_img/backlog-pane/portfolio-backlog-pane.png) +Product backlog pane | `ms.vss-work-web.requirement-backlog-toolpane` | ![productBacklogPane](../../_shared/procedures/_img/backlog-pane/product-backlog-pane.png) +Iteration backlog pane | `ms.vss-work-web.iteration-backlog-toolpane` | ![iterationBacklogPane](../../_shared/procedures/_img/backlog-pane/iteration-backlog-pane.png) + + +## Service hooks +Service hook publishers define a set of events. Subscriptions listen for the events and define actions to take based on the event. +Subscriptions also target consumers, which are external services that can perform their own actions, when an event occurs. + +### Consumers diff --git a/docs/extend/reference/targets/vss/build/web/_img/buildDefinitionActions.png b/docs/extend/reference/targets/vss/build/web/_img/buildDefinitionActions.png new file mode 100644 index 00000000000..a3361c76d98 Binary files /dev/null and b/docs/extend/reference/targets/vss/build/web/_img/buildDefinitionActions.png differ diff --git a/docs/extend/reference/targets/vss/build/web/_img/buildSummaryTabExtension.png b/docs/extend/reference/targets/vss/build/web/_img/buildSummaryTabExtension.png new file mode 100644 index 00000000000..2574ed4860d Binary files /dev/null and b/docs/extend/reference/targets/vss/build/web/_img/buildSummaryTabExtension.png differ diff --git a/docs/extend/reference/targets/vss/build/web/_img/completedBuildActions.png b/docs/extend/reference/targets/vss/build/web/_img/completedBuildActions.png new file mode 100644 index 00000000000..02eeff024eb Binary files /dev/null and b/docs/extend/reference/targets/vss/build/web/_img/completedBuildActions.png differ diff --git a/docs/extend/reference/targets/vss/build/web/_img/hubs-build.png b/docs/extend/reference/targets/vss/build/web/_img/hubs-build.png new file mode 100644 index 00000000000..8c1ad094059 Binary files /dev/null and b/docs/extend/reference/targets/vss/build/web/_img/hubs-build.png differ diff --git a/docs/extend/reference/targets/vss/code/web/_img/actionsmall.png b/docs/extend/reference/targets/vss/code/web/_img/actionsmall.png new file mode 100644 index 00000000000..b61ba174dcf Binary files /dev/null and b/docs/extend/reference/targets/vss/code/web/_img/actionsmall.png differ diff --git a/docs/extend/reference/targets/vss/code/web/_img/gitBranchActions.png b/docs/extend/reference/targets/vss/code/web/_img/gitBranchActions.png new file mode 100644 index 00000000000..05dd8b84b01 Binary files /dev/null and b/docs/extend/reference/targets/vss/code/web/_img/gitBranchActions.png differ diff --git a/docs/extend/reference/targets/vss/code/web/_img/gitBranchTreeActions.png b/docs/extend/reference/targets/vss/code/web/_img/gitBranchTreeActions.png new file mode 100644 index 00000000000..9a26f731bf1 Binary files /dev/null and b/docs/extend/reference/targets/vss/code/web/_img/gitBranchTreeActions.png differ diff --git a/docs/extend/reference/targets/vss/code/web/_img/gitBranchesGridActions.png b/docs/extend/reference/targets/vss/code/web/_img/gitBranchesGridActions.png new file mode 100644 index 00000000000..dee39783bcc Binary files /dev/null and b/docs/extend/reference/targets/vss/code/web/_img/gitBranchesGridActions.png differ diff --git a/docs/extend/reference/targets/vss/code/web/_img/gitBranchesTreeActions.png b/docs/extend/reference/targets/vss/code/web/_img/gitBranchesTreeActions.png new file mode 100644 index 00000000000..05dd8b84b01 Binary files /dev/null and b/docs/extend/reference/targets/vss/code/web/_img/gitBranchesTreeActions.png differ diff --git a/docs/extend/reference/targets/vss/code/web/_img/hubs-source.png b/docs/extend/reference/targets/vss/code/web/_img/hubs-source.png new file mode 100644 index 00000000000..81ddf2cb74e Binary files /dev/null and b/docs/extend/reference/targets/vss/code/web/_img/hubs-source.png differ diff --git a/docs/extend/reference/targets/vss/code/web/_img/sourceGridItemActions.png b/docs/extend/reference/targets/vss/code/web/_img/sourceGridItemActions.png new file mode 100644 index 00000000000..eac8e62b841 Binary files /dev/null and b/docs/extend/reference/targets/vss/code/web/_img/sourceGridItemActions.png differ diff --git a/docs/extend/reference/targets/vss/code/web/_img/sourceItemActions.png b/docs/extend/reference/targets/vss/code/web/_img/sourceItemActions.png new file mode 100644 index 00000000000..eac8e62b841 Binary files /dev/null and b/docs/extend/reference/targets/vss/code/web/_img/sourceItemActions.png differ diff --git a/docs/extend/reference/targets/vss/code/web/_img/sourceTreeItemActions.png b/docs/extend/reference/targets/vss/code/web/_img/sourceTreeItemActions.png new file mode 100644 index 00000000000..01a0c6d25b2 Binary files /dev/null and b/docs/extend/reference/targets/vss/code/web/_img/sourceTreeItemActions.png differ diff --git a/docs/extend/reference/targets/vss/release/releas/web/_img/definitionExplorerContextMenu.png b/docs/extend/reference/targets/vss/release/releas/web/_img/definitionExplorerContextMenu.png new file mode 100644 index 00000000000..0cf2acd5149 Binary files /dev/null and b/docs/extend/reference/targets/vss/release/releas/web/_img/definitionExplorerContextMenu.png differ diff --git a/docs/extend/reference/targets/vss/release/releas/web/_img/definitionExplorerToolbarMenu.png b/docs/extend/reference/targets/vss/release/releas/web/_img/definitionExplorerToolbarMenu.png new file mode 100644 index 00000000000..774a6b6525b Binary files /dev/null and b/docs/extend/reference/targets/vss/release/releas/web/_img/definitionExplorerToolbarMenu.png differ diff --git a/docs/extend/reference/targets/vss/release/releas/web/_img/hubs-release.png b/docs/extend/reference/targets/vss/release/releas/web/_img/hubs-release.png new file mode 100644 index 00000000000..b1683266342 Binary files /dev/null and b/docs/extend/reference/targets/vss/release/releas/web/_img/hubs-release.png differ diff --git a/docs/extend/reference/targets/vss/release/releas/web/_img/releaseSummarySection.png b/docs/extend/reference/targets/vss/release/releas/web/_img/releaseSummarySection.png new file mode 100644 index 00000000000..b809572950c Binary files /dev/null and b/docs/extend/reference/targets/vss/release/releas/web/_img/releaseSummarySection.png differ diff --git a/docs/extend/reference/targets/vss/release/releas/web/_img/releaseSummaryTab.png b/docs/extend/reference/targets/vss/release/releas/web/_img/releaseSummaryTab.png new file mode 100644 index 00000000000..c5ddc9bb8e8 Binary files /dev/null and b/docs/extend/reference/targets/vss/release/releas/web/_img/releaseSummaryTab.png differ diff --git a/docs/extend/reference/targets/vss/release/releas/web/_img/releaseSummaryToolbarMenu.png b/docs/extend/reference/targets/vss/release/releas/web/_img/releaseSummaryToolbarMenu.png new file mode 100644 index 00000000000..7ff187a82a8 Binary files /dev/null and b/docs/extend/reference/targets/vss/release/releas/web/_img/releaseSummaryToolbarMenu.png differ diff --git a/docs/extend/reference/targets/vss/release/web/_img/definitionExplorerContextMenu.png b/docs/extend/reference/targets/vss/release/web/_img/definitionExplorerContextMenu.png new file mode 100644 index 00000000000..0cf2acd5149 Binary files /dev/null and b/docs/extend/reference/targets/vss/release/web/_img/definitionExplorerContextMenu.png differ diff --git a/docs/extend/reference/targets/vss/release/web/_img/definitionExplorerToolbarMenu.png b/docs/extend/reference/targets/vss/release/web/_img/definitionExplorerToolbarMenu.png new file mode 100644 index 00000000000..774a6b6525b Binary files /dev/null and b/docs/extend/reference/targets/vss/release/web/_img/definitionExplorerToolbarMenu.png differ diff --git a/docs/extend/reference/targets/vss/release/web/_img/hubs-release.png b/docs/extend/reference/targets/vss/release/web/_img/hubs-release.png new file mode 100644 index 00000000000..b1683266342 Binary files /dev/null and b/docs/extend/reference/targets/vss/release/web/_img/hubs-release.png differ diff --git a/docs/extend/reference/targets/vss/release/web/_img/releaseSummarySection.png b/docs/extend/reference/targets/vss/release/web/_img/releaseSummarySection.png new file mode 100644 index 00000000000..b809572950c Binary files /dev/null and b/docs/extend/reference/targets/vss/release/web/_img/releaseSummarySection.png differ diff --git a/docs/extend/reference/targets/vss/release/web/_img/releaseSummaryTab.png b/docs/extend/reference/targets/vss/release/web/_img/releaseSummaryTab.png new file mode 100644 index 00000000000..c5ddc9bb8e8 Binary files /dev/null and b/docs/extend/reference/targets/vss/release/web/_img/releaseSummaryTab.png differ diff --git a/docs/extend/reference/targets/vss/release/web/_img/releaseSummaryToolbarMenu.png b/docs/extend/reference/targets/vss/release/web/_img/releaseSummaryToolbarMenu.png new file mode 100644 index 00000000000..7ff187a82a8 Binary files /dev/null and b/docs/extend/reference/targets/vss/release/web/_img/releaseSummaryToolbarMenu.png differ diff --git a/docs/extend/reference/targets/vss/test/web/_img/hubs-testmanagement.png b/docs/extend/reference/targets/vss/test/web/_img/hubs-testmanagement.png new file mode 100644 index 00000000000..10f3a90c445 Binary files /dev/null and b/docs/extend/reference/targets/vss/test/web/_img/hubs-testmanagement.png differ diff --git a/docs/extend/reference/targets/vss/test/web/_img/test-plan-hub-pivot-tab-preview.png b/docs/extend/reference/targets/vss/test/web/_img/test-plan-hub-pivot-tab-preview.png new file mode 100644 index 00000000000..a4b63cce78d Binary files /dev/null and b/docs/extend/reference/targets/vss/test/web/_img/test-plan-hub-pivot-tab-preview.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/adminhub.png b/docs/extend/reference/targets/vss/web/_img/adminhub.png new file mode 100644 index 00000000000..75b90d2735a Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/adminhub.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/hub-application-home.png b/docs/extend/reference/targets/vss/web/_img/hub-application-home.png new file mode 100644 index 00000000000..777f50ca183 Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/hub-application-home.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/hub.png b/docs/extend/reference/targets/vss/web/_img/hub.png new file mode 100644 index 00000000000..66a825b9fd2 Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/hub.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/hubGroups-application.png b/docs/extend/reference/targets/vss/web/_img/hubGroups-application.png new file mode 100644 index 00000000000..f120489c93b Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/hubGroups-application.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/hubGroups-project.png b/docs/extend/reference/targets/vss/web/_img/hubGroups-project.png new file mode 100644 index 00000000000..ef085d8afb3 Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/hubGroups-project.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/hubs-admin-collection.png b/docs/extend/reference/targets/vss/web/_img/hubs-admin-collection.png new file mode 100644 index 00000000000..c41542ad38b Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/hubs-admin-collection.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/hubs-admin-project.png b/docs/extend/reference/targets/vss/web/_img/hubs-admin-project.png new file mode 100644 index 00000000000..2b962703f6c Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/hubs-admin-project.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/hubs-home.png b/docs/extend/reference/targets/vss/web/_img/hubs-home.png new file mode 100644 index 00000000000..05e983312a2 Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/hubs-home.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/hubs-source.png b/docs/extend/reference/targets/vss/web/_img/hubs-source.png new file mode 100644 index 00000000000..875740bf692 Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/hubs-source.png differ diff --git a/docs/extend/reference/targets/vss/web/_img/projecthubgroup.png b/docs/extend/reference/targets/vss/web/_img/projecthubgroup.png new file mode 100644 index 00000000000..a1cf9de392a Binary files /dev/null and b/docs/extend/reference/targets/vss/web/_img/projecthubgroup.png differ diff --git a/docs/extend/reference/targets/vss/work/web/_img/backlogBoardPivotFilterActions.png b/docs/extend/reference/targets/vss/work/web/_img/backlogBoardPivotFilterActions.png new file mode 100644 index 00000000000..31c4882ebe9 Binary files /dev/null and b/docs/extend/reference/targets/vss/work/web/_img/backlogBoardPivotFilterActions.png differ diff --git a/docs/extend/reference/targets/vss/work/web/_img/backlogItemActions.png b/docs/extend/reference/targets/vss/work/web/_img/backlogItemActions.png new file mode 100644 index 00000000000..da9df3bffbf Binary files /dev/null and b/docs/extend/reference/targets/vss/work/web/_img/backlogItemActions.png differ diff --git a/docs/extend/reference/targets/vss/work/web/_img/hubs-workitems.png b/docs/extend/reference/targets/vss/work/web/_img/hubs-workitems.png new file mode 100644 index 00000000000..33dddd71523 Binary files /dev/null and b/docs/extend/reference/targets/vss/work/web/_img/hubs-workitems.png differ diff --git a/docs/extend/reference/targets/vss/work/web/_img/queryActions.png b/docs/extend/reference/targets/vss/work/web/_img/queryActions.png new file mode 100644 index 00000000000..41b6fddec00 Binary files /dev/null and b/docs/extend/reference/targets/vss/work/web/_img/queryActions.png differ diff --git a/docs/extend/reference/targets/vss/work/web/_img/queryResultsItemMenu.png b/docs/extend/reference/targets/vss/work/web/_img/queryResultsItemMenu.png new file mode 100644 index 00000000000..e273be40fd3 Binary files /dev/null and b/docs/extend/reference/targets/vss/work/web/_img/queryResultsItemMenu.png differ diff --git a/docs/extend/reference/targets/vss/work/web/_img/queryResultsToolbarMenu.png b/docs/extend/reference/targets/vss/work/web/_img/queryResultsToolbarMenu.png new file mode 100644 index 00000000000..2bf837b05ba Binary files /dev/null and b/docs/extend/reference/targets/vss/work/web/_img/queryResultsToolbarMenu.png differ diff --git a/docs/extend/reference/targets/vss/work/web/_img/sprintBoardPivotFilterActions.png b/docs/extend/reference/targets/vss/work/web/_img/sprintBoardPivotFilterActions.png new file mode 100644 index 00000000000..69dca8beff4 Binary files /dev/null and b/docs/extend/reference/targets/vss/work/web/_img/sprintBoardPivotFilterActions.png differ diff --git a/docs/extend/reference/targets/vss/work/web/_img/workItemActions.png b/docs/extend/reference/targets/vss/work/web/_img/workItemActions.png new file mode 100644 index 00000000000..9dc522d0291 Binary files /dev/null and b/docs/extend/reference/targets/vss/work/web/_img/workItemActions.png differ diff --git a/docs/extend/reference/targets/vss/work/web/_img/workItemToolbarActions.png b/docs/extend/reference/targets/vss/work/web/_img/workItemToolbarActions.png new file mode 100644 index 00000000000..9dc522d0291 Binary files /dev/null and b/docs/extend/reference/targets/vss/work/web/_img/workItemToolbarActions.png differ diff --git a/docs/extend/support/help.md b/docs/extend/support/help.md new file mode 100644 index 00000000000..d66d108061c --- /dev/null +++ b/docs/extend/support/help.md @@ -0,0 +1,21 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Get Help | Developing for Visual Studio Team Services +description: Get help with your extension or custom application for Visual Studio Team Services. +ms.assetid: fdfc7d19-e17a-420a-881a-b88092624d58 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Get help + +Our goal is to help you be successful developing for **Visual Studio Team Services**. For any of the following: + +* Technical / how-to questions +* Bugs (or potential bugs) +* Feature requests +* Documentations problems or gaps + +Have a question? Check out the [Developer Community site](https://aka.ms/vsts-integration-help). diff --git a/docs/extend/support/release-notes.md b/docs/extend/support/release-notes.md new file mode 100644 index 00000000000..687b3098411 --- /dev/null +++ b/docs/extend/support/release-notes.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/integrate/extensions/overview +--- \ No newline at end of file diff --git a/docs/extend/test/debug-in-browser.md b/docs/extend/test/debug-in-browser.md new file mode 100644 index 00000000000..d58f3558b45 --- /dev/null +++ b/docs/extend/test/debug-in-browser.md @@ -0,0 +1,66 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Extension Debugging in a Browser | Extensions for Visual Studio Team Services +description: How to debug your VSTS extension using browser tools. +ms.assetid: 8dc00666-844c-404a-9699-512261e53ddf +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Debug a web extension + +Modern web browsers, like Microsoft Edge and Google Chrome, include tools for debugging the JavaScript that runs on a web page. Usually these are referred to as the "F12 Tools", "Inspector", or "Developer Tools". Since your extension is loaded onto a VSTS page in an iframe, you can use these browser tools to debug the JavaScript portion of your extension. The standard shortcut to launch the browser developer tools is F12. + +![IE11 F12 Tools](../_shared/procedures/_img/debug-in-browser/ief12tools.png) +*The Internet Explorer 11 F12 Tools* + + +## Ensure your extension is loaded +Your extension is sandboxed in the browser with an iframe. The host page (served from visualstudio.com) cannot directly access elements and scripts within the iframe, and the extension cannot directly access the host. Because extensions are loaded on-demand, your extension is not loaded in its iframe until the user performs an action that causes it to load. For example, if your extension contributes new items to a menu, the extension won't get loaded into an iframe until the relevant menu is created and displayed, such as when a context menu is invoked on right-click. + +You can check the "Target" dropdown in your Developer Tools to see if your extension is currently loaded: + +![IE11 Target Frame Dropdown](../_shared/procedures/_img/debug-in-browser/ie11targetframe.png) + +## Inspecting your extension's iframe + + By default, when you launch the Developer Tools, the *Developer Console* will be in the context if the primary page, or the *top window*. In other words, you will only be able to access the top window's DOM and state. Use the "Target" dropdown (shown above) to switch the context to your extension's frame. You are now able to access the DOM and global state of your extension's frame. + +![IE11 Extension Frame Location](../_shared/procedures/_img/debug-in-browser/framelocation.png) + +### Inspecting the DOM of your extension + +Depending on the contributions that are needed from your extension, its iframe may be loaded in the background, styled to be invisible to normal users. For example, a provider of menu items will probably only be loaded in the background. Background iframes are placed in the DOM under a root-level DIV element with the class "vs-app-hosts-container". Expanding this node will allow you to drill into the DOM of each loaded extension. + +![IE11 Background Extension DOM Placement](../_shared/procedures/_img/debug-in-browser/bgextcontainer.png) + +If your extension's iframe is placed in the foreground, you can use the regular element selector tool (IE: ![IE11 Element Selector Icon](../_shared/procedures/_img/debug-in-browser/ieelemselector.png) , Chrome: ![Chrome Element Selector Icon](../_shared/procedures/_img/debug-in-browser/chromeelemselector.png) ) to inspect within the DOM of your extension. + +## Using the debugger + +Setting a breakpoint within your extensions scripts is easy. [Once your extension is loaded](#ensure-your-extension-is-loaded), you can find it in the list of source files in the Debugger. Since there will be a lot of files in the list, use the search filter to narrow the list to find the right file. Most browser developer tools use CTRL+O to perform a search through names of source files. + +![Debugger source files](../_shared/procedures/_img/debug-in-browser/debuggerfiles.png) + +Once you select your script, you can click in the gutter to set breakpoints. If the developer tools are open, when a script hits your breakpoint, execution will pause. + +![Breakpoints](../_shared/procedures/_img/debug-in-browser/breakpoints.png) + +**Tip**: You may need to set a breakpoint in a script block that is executed when your extension is first loaded, such as during initialization. If that is the case, ensure your extension is loaded, set the breakpoint, then refresh the page. Once the page is refreshed, cause your extension to get loaded again. The breakpoint will be persisted and execution should pause when it is encountered during initialization. + +![Hitting a breakpoint during extension initialization](../_shared/procedures/_img/debug-in-browser/initbreakpoint.png) +*Paused script execution during extension initialization* + +### Viewing callback context objects + +Extension developers often need context information from VSTS to perform various actions. For example, an extension that adds a Work Item Action would probably be interested in details about the work item that is being viewed. When VSTS makes a call to a function contributed by an extension, it will pass an object containing relevant context information as an argument to the function. The most reliable way to determine the format of data in this callback is by using the Debugger to inspect this context object. + +1. Set a breakpoint on the first line of the function whose context object you want to inspect. + +2. Perform the action that causes the function to get executed. Script execution will pause at the breakpoint. + +3. Hover over the function argument to see its value. You can expand the object hierarchy as needed. Alternatively, you can type the name of the argument in the console to see its value. + +![Callback context object inspection](../_shared/procedures/_img/debug-in-browser/contextobject.png) \ No newline at end of file diff --git a/docs/extend/test/discover-menu-group-ids.md b/docs/extend/test/discover-menu-group-ids.md new file mode 100644 index 00000000000..d1c9b124ef3 --- /dev/null +++ b/docs/extend/test/discover-menu-group-ids.md @@ -0,0 +1,43 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Discover menu group identifiers | Extensions for Visual Studio Team Services +description: Discover the group IDs for existing menus in Visual Studio Team Services. +ms.assetid: ca1b49b5-d36c-4742-a85b-fe9ad83a7a9a +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Discover menu group identifiers + +Many Team Services context menus have named groups of actions. This helps ensure related actions are grouped together when the context menu is presented to the user. When you [contribute an action to a menu](../develop/add-action.md), you can optionally specify a `groupId` property, which will place the action within that group. + +To discover the possible group identifiers for a context menu: + +1. Navigate to the page with the context menu +2. Open your browser's JavaScript console (typically by pressing F12) +3. Paste in this snippet (you may have to press enter to execute it) + ``` + VSS.UI.Controls.Menus.Menu.prototype.getGroupedItems=function(){if(!$.isArray(this._itemsSource))return this._itemsSource;var r=[],e={__ungrouped__:[]};if(this._itemsSource.forEach(function(r){r.groupId&&!r.separator?e[r.groupId]?e[r.groupId].push(r):e[r.groupId]=[r]:e.__ungrouped__.push(r)}),e.__ungrouped__.length===this._itemsSource.length)return this._itemsSource;var u=null;for(e.__ungrouped__=e.__ungrouped__.reduce(function(r,e,t,o){return e.separator&&(u&&u.separator||0===r.length||t===o.length-1)||r.push(e),u=e,r},[]),$.each(e,function(e,u){return'__ungrouped__'===e?!0:(r.push({id:'group_'+e,text:'Group: '+e,title:'Group: '+e}),Array.prototype.push.apply(r,u),void r.push({separator:!0}))}),Array.prototype.push.apply(r,e.__ungrouped__),0===e.__ungrouped__.length&&r.splice(r.length-1,1);r.length>0&&r[r.length-1].separator;)r.splice(r.length-1,1);return r}; + ``` +4. Right-click to show the context menu, which will now show the group identifiers + ![Menu Groups](../_img/menu-groups.png) +5. Set the `groupId` property of your action contribution, for example: + ``` + { + "id": "my-edit-action", + "type": "ms.vss-web.action", + "targets": [ + "ms.vss-code-web.source-grid-item-menu" + ], + "properties": { + "title": "My custom edit action", + "groupId": "editing", + "uri": "action.html" + } + } + ``` + +> Not all menus have defined groups. + diff --git a/docs/extend/toc.yml b/docs/extend/toc.yml new file mode 100644 index 00000000000..da743c3816a --- /dev/null +++ b/docs/extend/toc.yml @@ -0,0 +1,144 @@ +- name: "Build Extensions" + href: index.md +- name: Overview + items: + - name: Create a custom extension + href: ./overview.md +- name: Quickstarts + items: + - name: Write your first extension + href: get-started/node.md +- name: Samples + items: + - name: Sample extensions + href: develop/samples-overview.md +- name: Concepts + items: + - name: Extension points + href: reference/targets/overview.md + - name: Contribution model + href: develop/contributions-overview.md +- name: How-to Guides + items: + - name: Add a build task + href: develop/add-build-task.md + - name: Add a dashboard widget + href: develop/add-dashboard-widget.md + - name: Add a new service endpoint + href: develop/service-endpoints.md + - name: Add a service hook + href: develop/add-service-hook.md + - name: Add a chart + href: develop/add-chart.md + - name: Store data and settings + href: develop/data-storage.md + - name: Add Work hub extensions + items: + - name: Add a hub + href: develop/add-hub.md + - name: Add a menu action + href: develop/add-action.md + - name: Add backlog tabs + href: develop/add-backlog-tabs.md + - name: Add backlog panels + href: develop/add-backlog-panel.md + - name: Extend the work item form + href: develop/add-workitem-extension.md + - name: Add a custom control to the work item form + href: develop/custom-control.md + - name: Configure work item form extensions in TFS + href: develop/configure-workitemform-extensions.md + - name: Call a REST API + href: develop/call-rest-api.md + - name: Use a platform UI control + items: + - name: Configure + href: develop/ui-controls/configure.md + - name: Use grid + href: develop/ui-controls/grido.md + - name: Use menubar + href: develop/ui-controls/menubaro.md + - name: Use treeview + href: develop/ui-controls/treeviewo.md + - name: Use combo + href: develop/ui-controls/comboo.md + - name: Use modal dialog + href: develop/ui-controls/modaldialogo.md + - name: Use splitter + href: develop/ui-controls/splittero.md + - name: Use wait control + href: develop/ui-controls/waitcontrolo.md + - name: Use pivot filter + href: develop/ui-controls/pivotfiltero.md + - name: Package and publish + items: + - name: Package and publish extensions + href: publish/overview.md + - name: Package and publish integrations + href: publish/integration.md + - name: Make your listing public + href: publish/publicize.md + - name: Publish via command line + href: publish/command-line.md + - name: Test and debug + items: + - name: Debug a web extension + href: test/debug-in-browser.md + - name: Menu group IDs + href: test/discover-menu-group-ids.md + - name: Reporting + items: + - name: Extension reporting + href: extension-report.md + - name: Extension statistics PowerBI content pack + href: extension-statistics-powerbi-contentpack.md +- name: Reference + items: + - name: Development + items: + - name: Manifest reference + href: develop/manifest.md + - name: Build task reference + href: develop/build-task-schema.md + - name: Endpoint authentication schemes + href: develop/auth-schemes.md + - name: Content hosting + href: develop/static-content.md + - name: Modal dialog + href: develop/using-host-dialog.md + - name: Host page navigation + href: develop/host-navigation.md + - name: Basic styles for widgets + href: develop/styles-from-widget-sdk.md + - name: Auth and security + href: develop/auth.md + - name: Deploy web content to Azure + href: publish/publish-azure.md + - name: UI controls + items: + - name: Combo + href: reference/client/controls/combo.md + - name: Grid + href: reference/client/controls/grid.md + - name: TreeView + href: reference/client/controls/tree.md + - name: MenuBar + href: reference/client/controls/menubar.md + - name: Modal Dialog + href: reference/client/controls/modaldialog.md + - name: Splitter + href: reference/client/controls/splitter.md + - name: WaitControl + href: reference/client/controls/waitcontrol.md + - name: How to get help + href: support/help.md +- name: Resources + items: + - name: Visual Studio Marketplace + href: https://marketplace.visualstudio.com/ + - name: Manage Extensions + href: ../marketplace/index.md + - name: Build Visual Studio extensions + href: https://visualstudio/extend/ide/overview.md + + diff --git a/docs/faqs.md b/docs/faqs.md new file mode 100644 index 00000000000..a4363b2a0aa --- /dev/null +++ b/docs/faqs.md @@ -0,0 +1,77 @@ +--- +title: Questions and answers to support getting started VSTS & TFS +description: Questions and answers to support getting started using the hosted cloud offering of Visual Studio Team Services (VSTS) or on-premises Team Foundation Server (TFS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 50CA182B-D305-41A9-8C8F-9EA80A89ED3C +ms.manager: douge +ms.author: kaelli +ms.date: 03/02/2016 +--- + +#FAQs + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013** + +### Q: How do I get started? +**A: To get started in the cloud or on-premises:** +- To get started with Visual Studio Team Services (VSTS) begin by [creating a user account](https://www.visualstudio.com/team-services/). Step-by-step instructions are provided in [Sign up for VSTS](accounts/create-account-msa-or-work-student.md). +- To get started with an on-premises TFS, download and install the [latest version of TFS](https://www.visualstudio.com/downloads/). See [Install and configure TFS](./tfs-server/install/get-started.md) for details. +- If you need to create a team project, create one in [VSTSs](accounts/set-up-vs.md) or set one up in an [on-premises TFS](accounts/create-team-project.md). +- If you don't have access to the team project, [get invited to the team](work/scale/multiple-teams.md#add-team-members). +- If it's your first time connecting to a team project, see [Connect to a team project](connect/connect-team-projects.md). + +**A: To get started with a client tool:** +Go to one of these pages to download a version of Visual Studio or client tool plug-in that will support connecting to a team project: +- [Visual Studio](https://www.visualstudio.com/downloads/) +- [Eclipse/Team Explorer Everywhere](http://java.visualstudio.com/Docs/tools/eclipse) +- [Android Studio with the VSTS Plugin for Android Studio](http://java.visualstudio.com/Docs/tools/androidstudio) +- [IntelliJ with the VSTS Plugin for IntelliJ](http://java.visualstudio.com/Docs/tools/intellij) +- [Visual Studio Code](http://java.visualstudio.com/Docs/tools/vscode) + +**A: To get started with sharing code, work item tracking, builds, or other tasks:** +See [Software development roles](roles.md). + +### Q: What compatibility issues exist between client and server versions? + **A:** See [Requirements and compatibility](accounts/requirements.md). + +### Q: Can stakeholders who don't use Visual Studio participate on our team? + **A**: Yes. You can provide access to stakeholders who have no CAL for the following activities: + +- **Stakeholder access**: This view allows anyone on your team to check project status and provide feedback. Stakeholders can [track project priorities and provide direction, feature ideas, and business alignment to a team](quickstart/get-started-stakeholder.md). + + To grant stakeholders access, add them to the [Stakeholder access group](security/change-access-levels.md). + +- **Provide feedback**: To allow your stakeholders to provide feedback, you must [grant them specific permissions](work/connect/give-permissions-feedback.md). + + +### Q: Are there other clients that connect to VSTS or TFS? Are there other tools I can use? +**A:** Yes. You can connect to a team project from one of these clients: +- [Excel](work/office/bulk-add-modify-work-items-excel.md) (Requires the Team Foundation add-in is installed) +- [Project](work/office/create-your-backlog-tasks-using-project.md) (Requires the Team Foundation add-in is installed) +- [Project Professional](work/tfs-ps-sync/synchronize-tfs-project-server.md) +- [PowerPoint Storyboarding](work/office/storyboard-your-ideas-using-powerpoint.md) (Requires the Team Foundation add-in is installed) +- [Microsoft Test Manager](https://msdn.microsoft.com/library/jj635157.aspx) +- [Test & Feedback extension (previously called the Exploratory Testing extension)](manual-test/stakeholder/provide-stakeholder-feedback.md) +- [Microsoft Feedback Client](work/connect/give-feedback.md) + +>[!NOTE] +>Native support for integrating TFS with Project Server is deprecated for TFS 2017. However, synchronization support is provided by a third part. See [Synchronize TFS with Project Server](work/office/sync-ps-tfs.md) for details. +>Test Manager is deprecated for TFS 2017. + +Also, you can find several open-source clients that have been added to [Marketplace extensions](https://marketplace.visualstudio.com). For example, you can install extensions to Visual Studio that support additional features: +- For TFS 2017 and later versions, you can [install the TFS Process Template editor from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KarthikBalasubramanianMSFT.TFSProcessTemplateEditor). You can use this version of the Process Editor to modify the old-style work item forms. You can't use it to edit forms associated with the [new web forms](work/process/new-work-item-experience.md). +- For TFS 2015 and earlier versions, you can install [TFS Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power) which provides enhancements, tools, and command-line utilities that support increased productivity. + +> [!NOTE] +> Team Foundation Server Power Tools is deprecated for TFS 2017. + + +## Related notes +- [Key concepts](concepts.md) +- [Essential services](services.md) +- [Client-server tools](tools.md) +- [Software development roles](roles.md) + + +Have more questions? Search for an answer or pose a question in one of the community forums listed in [Provide product and content feedback, Platforms and version support](provide-feedback.md). diff --git a/docs/feedback/about-feedback.md b/docs/feedback/about-feedback.md new file mode 100644 index 00000000000..ee33e686b5e --- /dev/null +++ b/docs/feedback/about-feedback.md @@ -0,0 +1,31 @@ +--- +title: Request feedback on working apps in VSTS & TFS +description: Overview of ways in which to request and provide feedback on your working apps +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/07/2017 +--- + +# About feedback + +**VSTS | TFS 2017 | TFS 2015 | TFS 2013** + + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide two main methods for collecting feedback on your work apps. You can use of these two clients to collect feedback: + +- Test & Feedback extension, a web-based client +- Microsoft Feedback client, a free download users install on their local computer. + +To request feedback, you use these methods: +- From within the work item form for a user story or product backlog item, as shown in the following image:
        ![Request feedback from the Test & Feedback extension](/vsts/manual-test/stakeholder/_img/request-stakeholder-feedback/request-stakeholder-feedback-01.png) +- From the dashboard widget that contains other links, as shown:
        ![Request feedback from the dashboard](/vsts/work/connect/_img/request-feedback-link.png) + +Both tools generate a Feedback Request work item. Each response provided by a stakeholder generates a Feedback Response work item. You can then track requests and responses easily from the **Work>Queries** page. + +To provide feedback about VSTS or TFS, see [Provide product and content feedback](/vsts/provide-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json). + + diff --git a/docs/feedback/breadcrumb/toc.yml b/docs/feedback/breadcrumb/toc.yml new file mode 100644 index 00000000000..58a76f5127e --- /dev/null +++ b/docs/feedback/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Collaboration + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=collaboration + items: + - name: Feedback + tocHref: /vsts/ + topicHref: /vsts/feedback/index \ No newline at end of file diff --git a/docs/feedback/index.md b/docs/feedback/index.md new file mode 100644 index 00000000000..dd2e9928413 --- /dev/null +++ b/docs/feedback/index.md @@ -0,0 +1,36 @@ +--- +title: Feedback index to content for VSTS & TFS +description: Index to topics for requesting and providing feedback in VSTS or TFS +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/28/2017 +--- + +# Feedback + +You can request feedback using one of two tools, through the Test & Feedback extension or through the Request feedback link you access from a dashboard. + + + +## How-to Guides +- [Request feedback (Test & Feedback extension)](/vsts/manual-test/stakeholder/request-stakeholder-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json ) +- [Get feedback (Work tracking)](/vsts/work/connect/get-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json ) +- [Provide feedback with the Test & Feedback extension](/vsts/manual-test/stakeholder/provide-stakeholder-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json ) +- [Provide feedback with the Feedback client](/vsts/work/connect/give-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json ) +- [Set feedback permissions](/vsts/work/connect/give-permissions-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json ) + + +## Resources + +- [Uservoice Integration (Marketplace extension)](https://marketplace.visualstudio.com/items?itemName=ms-vsts.services-uservoice) +- [UserVoice UI (Marketplace extension)](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vsts-uservoice-ui) \ No newline at end of file diff --git a/docs/feedback/toc.yml b/docs/feedback/toc.yml new file mode 100644 index 00000000000..bc895ebc2b0 --- /dev/null +++ b/docs/feedback/toc.yml @@ -0,0 +1,40 @@ +- name: Feedback + href: index.md +- name: Overview + items: + - name: About feedback + href: about-feedback.md +- name: How-to Guides + items: + - name: Request feedback (Test & Feedback extension) + href: /vsts/manual-test/stakeholder/request-stakeholder-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json + - name: Request feedback (Work tracking) + href: /vsts/work/connect/get-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json + - name: Provide feedback (Test & Feedback extension) + href: /vsts/manual-test/stakeholder/provide-stakeholder-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json + - name: Provide feedback (Feedback client) + href: /vsts/work/connect/give-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json + - name: Track feedback (Test & Feedback extension) + href: /vsts/manual-test/stakeholder/track-stakeholder-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json + - name: Voluntarily provide stakeholder feedback (Test & Feedback extension) + href: /vsts/manual-test/stakeholder/voluntary-stakeholder-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json + - name: Set feedback permissions + href: /vsts/work/connect/give-permissions-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json + - name: Enable remote audio capture + href: /vsts/work/reference/enable-remote-audio-capture?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json + - name: Change the audio device or annotation tool + href: /vsts/work/reference/change-audio-device-annotation-tool?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json +- name: Reference + items: + - name: Give us feedback, get support + href: /vsts/provide-feedback?toc=/vsts/feedback/toc.json&bc=/vsts/feedback/breadcrumb/toc.json +- name: Resources + items: + - name: Agile + href: /vsts/index#pivot=services&panel=agile + - name: Testing + href: /vsts/index#pivot=services&panel=testing + - name: Uservoice Integration (Marketplace extension) + href: https://marketplace.visualstudio.com/items?itemName=ms-vsts.services-uservoice + - name: UserVoice UI (Marketplace extension) + href: https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vsts-uservoice-ui \ No newline at end of file diff --git a/docs/git/_img/IC673340.png b/docs/git/_img/IC673340.png new file mode 100644 index 00000000000..89de1c79987 Binary files /dev/null and b/docs/git/_img/IC673340.png differ diff --git a/docs/git/_img/Import-Repo/ImportRepoDialog-TFVC.png b/docs/git/_img/Import-Repo/ImportRepoDialog-TFVC.png new file mode 100644 index 00000000000..d504068882f Binary files /dev/null and b/docs/git/_img/Import-Repo/ImportRepoDialog-TFVC.png differ diff --git a/docs/git/_img/Import-Repo/ImportRepoDialog.png b/docs/git/_img/Import-Repo/ImportRepoDialog.png new file mode 100644 index 00000000000..47f3cfb63ab Binary files /dev/null and b/docs/git/_img/Import-Repo/ImportRepoDialog.png differ diff --git a/docs/git/_img/Import-Repo/ImportRepofromEmptyRepo.png b/docs/git/_img/Import-Repo/ImportRepofromEmptyRepo.png new file mode 100644 index 00000000000..59831944577 Binary files /dev/null and b/docs/git/_img/Import-Repo/ImportRepofromEmptyRepo.png differ diff --git a/docs/git/_img/Import-Repo/ImportRepository.png b/docs/git/_img/Import-Repo/ImportRepository.png new file mode 100644 index 00000000000..b38d206c427 Binary files /dev/null and b/docs/git/_img/Import-Repo/ImportRepository.png differ diff --git a/docs/git/_img/VCtrlGitPullReqAlert1.png b/docs/git/_img/VCtrlGitPullReqAlert1.png new file mode 100644 index 00000000000..b6e0e181e13 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqAlert1.png differ diff --git a/docs/git/_img/VCtrlGitPullReqAlert2.png b/docs/git/_img/VCtrlGitPullReqAlert2.png new file mode 100644 index 00000000000..06c8d4880e2 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqAlert2.png differ diff --git a/docs/git/_img/VCtrlGitPullReqApprove.png b/docs/git/_img/VCtrlGitPullReqApprove.png new file mode 100644 index 00000000000..830c29f359f Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqApprove.png differ diff --git a/docs/git/_img/VCtrlGitPullReqBranchC.png b/docs/git/_img/VCtrlGitPullReqBranchC.png new file mode 100644 index 00000000000..c323824b761 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqBranchC.png differ diff --git a/docs/git/_img/VCtrlGitPullReqBranchCandD.png b/docs/git/_img/VCtrlGitPullReqBranchCandD.png new file mode 100644 index 00000000000..bc9732ce738 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqBranchCandD.png differ diff --git a/docs/git/_img/VCtrlGitPullReqBranchCandDMerge.png b/docs/git/_img/VCtrlGitPullReqBranchCandDMerge.png new file mode 100644 index 00000000000..8e10c0e064a Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqBranchCandDMerge.png differ diff --git a/docs/git/_img/VCtrlGitPullReqBranchCandDMergeConflict.png b/docs/git/_img/VCtrlGitPullReqBranchCandDMergeConflict.png new file mode 100644 index 00000000000..4e340ceeeb1 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqBranchCandDMergeConflict.png differ diff --git a/docs/git/_img/VCtrlGitPullReqBranchCandDMergeConflictResolvedPush.png b/docs/git/_img/VCtrlGitPullReqBranchCandDMergeConflictResolvedPush.png new file mode 100644 index 00000000000..dc050f0a528 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqBranchCandDMergeConflictResolvedPush.png differ diff --git a/docs/git/_img/VCtrlGitPullReqBranchCandDPull.png b/docs/git/_img/VCtrlGitPullReqBranchCandDPull.png new file mode 100644 index 00000000000..c7f908af46a Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqBranchCandDPull.png differ diff --git a/docs/git/_img/VCtrlGitPullReqBranchH.png b/docs/git/_img/VCtrlGitPullReqBranchH.png new file mode 100644 index 00000000000..08a9f2c3d90 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqBranchH.png differ diff --git a/docs/git/_img/VCtrlGitPullReqBranchHMerged.png b/docs/git/_img/VCtrlGitPullReqBranchHMerged.png new file mode 100644 index 00000000000..ac4e56874a1 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqBranchHMerged.png differ diff --git a/docs/git/_img/VCtrlGitPullReqBranchHReady.png b/docs/git/_img/VCtrlGitPullReqBranchHReady.png new file mode 100644 index 00000000000..816e047c368 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqBranchHReady.png differ diff --git a/docs/git/_img/VCtrlGitPullReqClose.png b/docs/git/_img/VCtrlGitPullReqClose.png new file mode 100644 index 00000000000..d56b8c6d264 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqClose.png differ diff --git a/docs/git/_img/VCtrlGitPullReqClosed.png b/docs/git/_img/VCtrlGitPullReqClosed.png new file mode 100644 index 00000000000..5f61b2e7e21 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqClosed.png differ diff --git a/docs/git/_img/VCtrlGitPullReqCommentAddDiscussion.png b/docs/git/_img/VCtrlGitPullReqCommentAddDiscussion.png new file mode 100644 index 00000000000..aa35341f206 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqCommentAddDiscussion.png differ diff --git a/docs/git/_img/VCtrlGitPullReqCommentAddSelection1.png b/docs/git/_img/VCtrlGitPullReqCommentAddSelection1.png new file mode 100644 index 00000000000..36d42f4f596 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqCommentAddSelection1.png differ diff --git a/docs/git/_img/VCtrlGitPullReqCommentAddSelection2.png b/docs/git/_img/VCtrlGitPullReqCommentAddSelection2.png new file mode 100644 index 00000000000..4cd13d27c92 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqCommentAddSelection2.png differ diff --git a/docs/git/_img/VCtrlGitPullReqCompare1.png b/docs/git/_img/VCtrlGitPullReqCompare1.png new file mode 100644 index 00000000000..44702e5eb6d Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqCompare1.png differ diff --git a/docs/git/_img/VCtrlGitPullReqCompare2.png b/docs/git/_img/VCtrlGitPullReqCompare2.png new file mode 100644 index 00000000000..ca70e2f169a Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqCompare2.png differ diff --git a/docs/git/_img/VCtrlGitPullReqCreateTopicBranch.png b/docs/git/_img/VCtrlGitPullReqCreateTopicBranch.png new file mode 100644 index 00000000000..ef77c6f1102 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqCreateTopicBranch.png differ diff --git a/docs/git/_img/VCtrlGitPullReqNew1.png b/docs/git/_img/VCtrlGitPullReqNew1.png new file mode 100644 index 00000000000..f0f419afd94 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqNew1.png differ diff --git a/docs/git/_img/VCtrlGitPullReqNew2.png b/docs/git/_img/VCtrlGitPullReqNew2.png new file mode 100644 index 00000000000..58d0eec8e22 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqNew2.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse2-1.png b/docs/git/_img/VCtrlGitPullReqResponse2-1.png new file mode 100644 index 00000000000..99f5c7034e6 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse2-1.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse2-2.png b/docs/git/_img/VCtrlGitPullReqResponse2-2.png new file mode 100644 index 00000000000..2e1bbde8c62 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse2-2.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse2-3.png b/docs/git/_img/VCtrlGitPullReqResponse2-3.png new file mode 100644 index 00000000000..ca47ee8cf59 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse2-3.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse2-4.png b/docs/git/_img/VCtrlGitPullReqResponse2-4.png new file mode 100644 index 00000000000..730c9778b04 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse2-4.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse2-5.png b/docs/git/_img/VCtrlGitPullReqResponse2-5.png new file mode 100644 index 00000000000..d6ae2e9f6b1 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse2-5.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse2-6.png b/docs/git/_img/VCtrlGitPullReqResponse2-6.png new file mode 100644 index 00000000000..438d40a009a Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse2-6.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse2-7.png b/docs/git/_img/VCtrlGitPullReqResponse2-7.png new file mode 100644 index 00000000000..06077c95828 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse2-7.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse2-8.png b/docs/git/_img/VCtrlGitPullReqResponse2-8.png new file mode 100644 index 00000000000..7ec2aea141f Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse2-8.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse2-9.png b/docs/git/_img/VCtrlGitPullReqResponse2-9.png new file mode 100644 index 00000000000..f2d2d4c5154 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse2-9.png differ diff --git a/docs/git/_img/VCtrlGitPullReqResponse4Code.png b/docs/git/_img/VCtrlGitPullReqResponse4Code.png new file mode 100644 index 00000000000..a0af63fbf1c Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqResponse4Code.png differ diff --git a/docs/git/_img/VCtrlGitPullReqSourceBranchChangePushedToTarget.png b/docs/git/_img/VCtrlGitPullReqSourceBranchChangePushedToTarget.png new file mode 100644 index 00000000000..6d81dbabd72 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqSourceBranchChangePushedToTarget.png differ diff --git a/docs/git/_img/VCtrlGitPullReqTargetUpdated1.png b/docs/git/_img/VCtrlGitPullReqTargetUpdated1.png new file mode 100644 index 00000000000..2d23059747e Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqTargetUpdated1.png differ diff --git a/docs/git/_img/VCtrlGitPullReqTargetUpdated2.png b/docs/git/_img/VCtrlGitPullReqTargetUpdated2.png new file mode 100644 index 00000000000..b5931b479ed Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqTargetUpdated2.png differ diff --git a/docs/git/_img/VCtrlGitPullReqTopicBranchSourceEdit1.png b/docs/git/_img/VCtrlGitPullReqTopicBranchSourceEdit1.png new file mode 100644 index 00000000000..c8c189dc4a7 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqTopicBranchSourceEdit1.png differ diff --git a/docs/git/_img/VCtrlGitPullReqTopicBranchSourcePublish.png b/docs/git/_img/VCtrlGitPullReqTopicBranchSourcePublish.png new file mode 100644 index 00000000000..9beb1ddac3d Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqTopicBranchSourcePublish.png differ diff --git a/docs/git/_img/VCtrlGitPullReqWebPortal.png b/docs/git/_img/VCtrlGitPullReqWebPortal.png new file mode 100644 index 00000000000..df12ce20c57 Binary files /dev/null and b/docs/git/_img/VCtrlGitPullReqWebPortal.png differ diff --git a/docs/git/_img/branch-policies/AddNewPath.png b/docs/git/_img/branch-policies/AddNewPath.png new file mode 100644 index 00000000000..6dce486c56b Binary files /dev/null and b/docs/git/_img/branch-policies/AddNewPath.png differ diff --git a/docs/git/_img/branch-policies/BranchPoliciesTab.png b/docs/git/_img/branch-policies/BranchPoliciesTab.png new file mode 100644 index 00000000000..fcd3105e587 Binary files /dev/null and b/docs/git/_img/branch-policies/BranchPoliciesTab.png differ diff --git a/docs/git/_img/branch-policies/BuildApproved.png b/docs/git/_img/branch-policies/BuildApproved.png new file mode 100644 index 00000000000..57e0692131b Binary files /dev/null and b/docs/git/_img/branch-policies/BuildApproved.png differ diff --git a/docs/git/_img/branch-policies/BuildInProgress.png b/docs/git/_img/branch-policies/BuildInProgress.png new file mode 100644 index 00000000000..b255e0ae483 Binary files /dev/null and b/docs/git/_img/branch-policies/BuildInProgress.png differ diff --git a/docs/git/_img/branch-policies/BuildRejected.png b/docs/git/_img/branch-policies/BuildRejected.png new file mode 100644 index 00000000000..6c5130b1e56 Binary files /dev/null and b/docs/git/_img/branch-policies/BuildRejected.png differ diff --git a/docs/git/_img/branch-policies/ErrorApprovalRequired.png b/docs/git/_img/branch-policies/ErrorApprovalRequired.png new file mode 100644 index 00000000000..5f1056e1beb Binary files /dev/null and b/docs/git/_img/branch-policies/ErrorApprovalRequired.png differ diff --git a/docs/git/_img/branch-policies/ErrorBuildRequired.png b/docs/git/_img/branch-policies/ErrorBuildRequired.png new file mode 100644 index 00000000000..e679832f92d Binary files /dev/null and b/docs/git/_img/branch-policies/ErrorBuildRequired.png differ diff --git a/docs/git/_img/branch-policies/ErrorRequiredReviewer.png b/docs/git/_img/branch-policies/ErrorRequiredReviewer.png new file mode 100644 index 00000000000..18a67beab51 Binary files /dev/null and b/docs/git/_img/branch-policies/ErrorRequiredReviewer.png differ diff --git a/docs/git/_img/branch-policies/Info.png b/docs/git/_img/branch-policies/Info.png new file mode 100644 index 00000000000..f53573044ec Binary files /dev/null and b/docs/git/_img/branch-policies/Info.png differ diff --git a/docs/git/_img/branch-policies/OpenAdmin.png b/docs/git/_img/branch-policies/OpenAdmin.png new file mode 100644 index 00000000000..775744b987b Binary files /dev/null and b/docs/git/_img/branch-policies/OpenAdmin.png differ diff --git a/docs/git/_img/branch-policies/PolicyExemptPermission.png b/docs/git/_img/branch-policies/PolicyExemptPermission.png new file mode 100644 index 00000000000..3adc817e3e1 Binary files /dev/null and b/docs/git/_img/branch-policies/PolicyExemptPermission.png differ diff --git a/docs/git/_img/branch-policies/RequireBuildSelectDrop.png b/docs/git/_img/branch-policies/RequireBuildSelectDrop.png new file mode 100644 index 00000000000..5d1ee020f61 Binary files /dev/null and b/docs/git/_img/branch-policies/RequireBuildSelectDrop.png differ diff --git a/docs/git/_img/branch-policies/RequireCodeReviews.png b/docs/git/_img/branch-policies/RequireCodeReviews.png new file mode 100644 index 00000000000..29099aebf93 Binary files /dev/null and b/docs/git/_img/branch-policies/RequireCodeReviews.png differ diff --git a/docs/git/_img/branch-policies/RequireSpecificReviewers.png b/docs/git/_img/branch-policies/RequireSpecificReviewers.png new file mode 100644 index 00000000000..c96d698fbf9 Binary files /dev/null and b/docs/git/_img/branch-policies/RequireSpecificReviewers.png differ diff --git a/docs/git/_img/branch-policies/RequiredReviewerAdded.png b/docs/git/_img/branch-policies/RequiredReviewerAdded.png new file mode 100644 index 00000000000..3b7f067ce58 Binary files /dev/null and b/docs/git/_img/branch-policies/RequiredReviewerAdded.png differ diff --git a/docs/git/_img/branch-policies/RequiredReviewerApproved.png b/docs/git/_img/branch-policies/RequiredReviewerApproved.png new file mode 100644 index 00000000000..310d9952378 Binary files /dev/null and b/docs/git/_img/branch-policies/RequiredReviewerApproved.png differ diff --git a/docs/git/_img/branch-policies/ReviewersApproved.png b/docs/git/_img/branch-policies/ReviewersApproved.png new file mode 100644 index 00000000000..15eba07b180 Binary files /dev/null and b/docs/git/_img/branch-policies/ReviewersApproved.png differ diff --git a/docs/git/_img/branch-policies/SelectBranch.png b/docs/git/_img/branch-policies/SelectBranch.png new file mode 100644 index 00000000000..a5a06110e68 Binary files /dev/null and b/docs/git/_img/branch-policies/SelectBranch.png differ diff --git a/docs/git/_img/branch-policies/VSPushFail.png b/docs/git/_img/branch-policies/VSPushFail.png new file mode 100644 index 00000000000..2e34142229e Binary files /dev/null and b/docs/git/_img/branch-policies/VSPushFail.png differ diff --git a/docs/git/_img/branch-policies/merge_requirements.png b/docs/git/_img/branch-policies/merge_requirements.png new file mode 100644 index 00000000000..9ce2e4cfdae Binary files /dev/null and b/docs/git/_img/branch-policies/merge_requirements.png differ diff --git a/docs/git/_img/branch-policies/work_item_linking.png b/docs/git/_img/branch-policies/work_item_linking.png new file mode 100644 index 00000000000..58bcb0af9be Binary files /dev/null and b/docs/git/_img/branch-policies/work_item_linking.png differ diff --git a/docs/git/_img/branches/branches_ahead_behind.png b/docs/git/_img/branches/branches_ahead_behind.png new file mode 100644 index 00000000000..8eccc118b1b Binary files /dev/null and b/docs/git/_img/branches/branches_ahead_behind.png differ diff --git a/docs/git/_img/branches/branches_context_menu.png b/docs/git/_img/branches/branches_context_menu.png new file mode 100644 index 00000000000..1630c2db9b9 Binary files /dev/null and b/docs/git/_img/branches/branches_context_menu.png differ diff --git a/docs/git/_img/branches/branches_context_menu_lock.png b/docs/git/_img/branches/branches_context_menu_lock.png new file mode 100644 index 00000000000..a76f29d9015 Binary files /dev/null and b/docs/git/_img/branches/branches_context_menu_lock.png differ diff --git a/docs/git/_img/branches/branches_context_menu_permissions.png b/docs/git/_img/branches/branches_context_menu_permissions.png new file mode 100644 index 00000000000..63b4bb9a57d Binary files /dev/null and b/docs/git/_img/branches/branches_context_menu_permissions.png differ diff --git a/docs/git/_img/branches/branches_context_menu_policy.png b/docs/git/_img/branches/branches_context_menu_policy.png new file mode 100644 index 00000000000..08ba74ceea1 Binary files /dev/null and b/docs/git/_img/branches/branches_context_menu_policy.png differ diff --git a/docs/git/_img/branches/branches_favorites.png b/docs/git/_img/branches/branches_favorites.png new file mode 100644 index 00000000000..9364c54c3cb Binary files /dev/null and b/docs/git/_img/branches/branches_favorites.png differ diff --git a/docs/git/_img/branches/branches_nav.png b/docs/git/_img/branches/branches_nav.png new file mode 100644 index 00000000000..98faf258c51 Binary files /dev/null and b/docs/git/_img/branches/branches_nav.png differ diff --git a/docs/git/_img/branches/branches_tree_view.png b/docs/git/_img/branches/branches_tree_view.png new file mode 100644 index 00000000000..680c2f13cdc Binary files /dev/null and b/docs/git/_img/branches/branches_tree_view.png differ diff --git a/docs/git/_img/branches/delete_branch.png b/docs/git/_img/branches/delete_branch.png new file mode 100644 index 00000000000..3f77af7e3e6 Binary files /dev/null and b/docs/git/_img/branches/delete_branch.png differ diff --git a/docs/git/_img/branches/newbranch_dialog.png b/docs/git/_img/branches/newbranch_dialog.png new file mode 100644 index 00000000000..8f2e47d4b83 Binary files /dev/null and b/docs/git/_img/branches/newbranch_dialog.png differ diff --git a/docs/git/_img/branches/remove_permissions.png b/docs/git/_img/branches/remove_permissions.png new file mode 100644 index 00000000000..c9e45195612 Binary files /dev/null and b/docs/git/_img/branches/remove_permissions.png differ diff --git a/docs/git/_img/branches/restore_deleted_branch.png b/docs/git/_img/branches/restore_deleted_branch.png new file mode 100644 index 00000000000..8073a1d11d0 Binary files /dev/null and b/docs/git/_img/branches/restore_deleted_branch.png differ diff --git a/docs/git/_img/branches/search_branches.png b/docs/git/_img/branches/search_branches.png new file mode 100644 index 00000000000..d259ad107ac Binary files /dev/null and b/docs/git/_img/branches/search_branches.png differ diff --git a/docs/git/_img/branches/search_deleted_branches.png b/docs/git/_img/branches/search_deleted_branches.png new file mode 100644 index 00000000000..97457ed6c36 Binary files /dev/null and b/docs/git/_img/branches/search_deleted_branches.png differ diff --git a/docs/git/_img/branches/undo_delete_branches.png b/docs/git/_img/branches/undo_delete_branches.png new file mode 100644 index 00000000000..55983e63059 Binary files /dev/null and b/docs/git/_img/branches/undo_delete_branches.png differ diff --git a/docs/git/_img/command-prompt/IC675719.png b/docs/git/_img/command-prompt/IC675719.png new file mode 100644 index 00000000000..2856ef11e14 Binary files /dev/null and b/docs/git/_img/command-prompt/IC675719.png differ diff --git a/docs/git/_img/command-prompt/IC675722.png b/docs/git/_img/command-prompt/IC675722.png new file mode 100644 index 00000000000..1658c9a3ee6 Binary files /dev/null and b/docs/git/_img/command-prompt/IC675722.png differ diff --git a/docs/git/_img/command-prompt/IC675723.png b/docs/git/_img/command-prompt/IC675723.png new file mode 100644 index 00000000000..1d3e0930098 Binary files /dev/null and b/docs/git/_img/command-prompt/IC675723.png differ diff --git a/docs/git/_img/command-prompt/IC696943.png b/docs/git/_img/command-prompt/IC696943.png new file mode 100644 index 00000000000..bbc9e3ac8f7 Binary files /dev/null and b/docs/git/_img/command-prompt/IC696943.png differ diff --git a/docs/git/_img/command-prompt/IC696943_old.png b/docs/git/_img/command-prompt/IC696943_old.png new file mode 100644 index 00000000000..a34df4041ff Binary files /dev/null and b/docs/git/_img/command-prompt/IC696943_old.png differ diff --git a/docs/git/_img/command-prompt/IC698868.png b/docs/git/_img/command-prompt/IC698868.png new file mode 100644 index 00000000000..30fd361a9f2 Binary files /dev/null and b/docs/git/_img/command-prompt/IC698868.png differ diff --git a/docs/git/_img/command-prompt/open_cmd_prompt_repo_vs.png b/docs/git/_img/command-prompt/open_cmd_prompt_repo_vs.png new file mode 100644 index 00000000000..d96fec5f6eb Binary files /dev/null and b/docs/git/_img/command-prompt/open_cmd_prompt_repo_vs.png differ diff --git a/docs/git/_img/command-prompt/settings_icon.png b/docs/git/_img/command-prompt/settings_icon.png new file mode 100644 index 00000000000..b7e437bfcba Binary files /dev/null and b/docs/git/_img/command-prompt/settings_icon.png differ diff --git a/docs/git/_img/command-prompt/te_connect_icon.png b/docs/git/_img/command-prompt/te_connect_icon.png new file mode 100644 index 00000000000..acbc6bb06ad Binary files /dev/null and b/docs/git/_img/command-prompt/te_connect_icon.png differ diff --git a/docs/git/_img/commit-details/10DifftoParent.PNG b/docs/git/_img/commit-details/10DifftoParent.PNG new file mode 100644 index 00000000000..7a1de28aa70 Binary files /dev/null and b/docs/git/_img/commit-details/10DifftoParent.PNG differ diff --git a/docs/git/_img/commit-details/11SidebySide.PNG b/docs/git/_img/commit-details/11SidebySide.PNG new file mode 100644 index 00000000000..80451abbe06 Binary files /dev/null and b/docs/git/_img/commit-details/11SidebySide.PNG differ diff --git a/docs/git/_img/commit-details/1CommitDetails.PNG b/docs/git/_img/commit-details/1CommitDetails.PNG new file mode 100644 index 00000000000..529835e3afb Binary files /dev/null and b/docs/git/_img/commit-details/1CommitDetails.PNG differ diff --git a/docs/git/_img/commit-details/2AuthorDetails.PNG b/docs/git/_img/commit-details/2AuthorDetails.PNG new file mode 100644 index 00000000000..2fd6cb9ae88 Binary files /dev/null and b/docs/git/_img/commit-details/2AuthorDetails.PNG differ diff --git a/docs/git/_img/commit-details/3AssociatedPRDetails.PNG b/docs/git/_img/commit-details/3AssociatedPRDetails.PNG new file mode 100644 index 00000000000..2fa80eafc13 Binary files /dev/null and b/docs/git/_img/commit-details/3AssociatedPRDetails.PNG differ diff --git a/docs/git/_img/commit-details/4AssociatedWorkItems.PNG b/docs/git/_img/commit-details/4AssociatedWorkItems.PNG new file mode 100644 index 00000000000..def12966be0 Binary files /dev/null and b/docs/git/_img/commit-details/4AssociatedWorkItems.PNG differ diff --git a/docs/git/_img/commit-details/4BuildStatus.PNG b/docs/git/_img/commit-details/4BuildStatus.PNG new file mode 100644 index 00000000000..f9b853fc187 Binary files /dev/null and b/docs/git/_img/commit-details/4BuildStatus.PNG differ diff --git a/docs/git/_img/commit-details/6SearchcommitsinBranchesandTags.PNG b/docs/git/_img/commit-details/6SearchcommitsinBranchesandTags.PNG new file mode 100644 index 00000000000..e2604995573 Binary files /dev/null and b/docs/git/_img/commit-details/6SearchcommitsinBranchesandTags.PNG differ diff --git a/docs/git/_img/commit-details/7CherryPick.PNG b/docs/git/_img/commit-details/7CherryPick.PNG new file mode 100644 index 00000000000..3255eba2e2c Binary files /dev/null and b/docs/git/_img/commit-details/7CherryPick.PNG differ diff --git a/docs/git/_img/commit-details/8revertCommit.PNG b/docs/git/_img/commit-details/8revertCommit.PNG new file mode 100644 index 00000000000..f7ee4672428 Binary files /dev/null and b/docs/git/_img/commit-details/8revertCommit.PNG differ diff --git a/docs/git/_img/commit-details/9CreateBranch.PNG b/docs/git/_img/commit-details/9CreateBranch.PNG new file mode 100644 index 00000000000..0d694a77a5f Binary files /dev/null and b/docs/git/_img/commit-details/9CreateBranch.PNG differ diff --git a/docs/git/_img/commit-history/1-CommitHistory.PNG b/docs/git/_img/commit-history/1-CommitHistory.PNG new file mode 100644 index 00000000000..8569c093122 Binary files /dev/null and b/docs/git/_img/commit-history/1-CommitHistory.PNG differ diff --git a/docs/git/_img/commit-history/10-Advancedfilter.PNG b/docs/git/_img/commit-history/10-Advancedfilter.PNG new file mode 100644 index 00000000000..8658d9cd55c Binary files /dev/null and b/docs/git/_img/commit-history/10-Advancedfilter.PNG differ diff --git a/docs/git/_img/commit-history/11-AuthorFilter.PNG b/docs/git/_img/commit-history/11-AuthorFilter.PNG new file mode 100644 index 00000000000..37784bc0117 Binary files /dev/null and b/docs/git/_img/commit-history/11-AuthorFilter.PNG differ diff --git a/docs/git/_img/commit-history/12-DateFilter.PNG b/docs/git/_img/commit-history/12-DateFilter.PNG new file mode 100644 index 00000000000..264c6263ce8 Binary files /dev/null and b/docs/git/_img/commit-history/12-DateFilter.PNG differ diff --git a/docs/git/_img/commit-history/13-SearchCommit.png b/docs/git/_img/commit-history/13-SearchCommit.png new file mode 100644 index 00000000000..5cb3404c52c Binary files /dev/null and b/docs/git/_img/commit-history/13-SearchCommit.png differ diff --git a/docs/git/_img/commit-history/2-AuthorDetails.PNG b/docs/git/_img/commit-history/2-AuthorDetails.PNG new file mode 100644 index 00000000000..1254c8ee3a2 Binary files /dev/null and b/docs/git/_img/commit-history/2-AuthorDetails.PNG differ diff --git a/docs/git/_img/commit-history/3-CommitMessage.PNG b/docs/git/_img/commit-history/3-CommitMessage.PNG new file mode 100644 index 00000000000..1ac9e9e399f Binary files /dev/null and b/docs/git/_img/commit-history/3-CommitMessage.PNG differ diff --git a/docs/git/_img/commit-history/4-CopyCommitSHA.PNG b/docs/git/_img/commit-history/4-CopyCommitSHA.PNG new file mode 100644 index 00000000000..dc0b5e11252 Binary files /dev/null and b/docs/git/_img/commit-history/4-CopyCommitSHA.PNG differ diff --git a/docs/git/_img/commit-history/5-BuildandPRInfo.png b/docs/git/_img/commit-history/5-BuildandPRInfo.png new file mode 100644 index 00000000000..5e678402a1c Binary files /dev/null and b/docs/git/_img/commit-history/5-BuildandPRInfo.png differ diff --git a/docs/git/_img/commit-history/6-RepoPicker.PNG b/docs/git/_img/commit-history/6-RepoPicker.PNG new file mode 100644 index 00000000000..da410782fea Binary files /dev/null and b/docs/git/_img/commit-history/6-RepoPicker.PNG differ diff --git a/docs/git/_img/commit-history/7-BranchPicker.PNG b/docs/git/_img/commit-history/7-BranchPicker.PNG new file mode 100644 index 00000000000..3f07a397942 Binary files /dev/null and b/docs/git/_img/commit-history/7-BranchPicker.PNG differ diff --git a/docs/git/_img/commit-history/8-CodeExplorer.PNG b/docs/git/_img/commit-history/8-CodeExplorer.PNG new file mode 100644 index 00000000000..046996b9004 Binary files /dev/null and b/docs/git/_img/commit-history/8-CodeExplorer.PNG differ diff --git a/docs/git/_img/commit-history/9-FindaFile.PNG b/docs/git/_img/commit-history/9-FindaFile.PNG new file mode 100644 index 00000000000..c8a2b6bf92b Binary files /dev/null and b/docs/git/_img/commit-history/9-FindaFile.PNG differ diff --git a/docs/git/_img/commit-history/RenameFiles.PNG b/docs/git/_img/commit-history/RenameFiles.PNG new file mode 100644 index 00000000000..0b35fbdc450 Binary files /dev/null and b/docs/git/_img/commit-history/RenameFiles.PNG differ diff --git a/docs/git/_img/commit-history/Showrenamefiles.PNG b/docs/git/_img/commit-history/Showrenamefiles.PNG new file mode 100644 index 00000000000..be1b907f44e Binary files /dev/null and b/docs/git/_img/commit-history/Showrenamefiles.PNG differ diff --git a/docs/git/_img/create-pr-status-server/commit-changes.png b/docs/git/_img/create-pr-status-server/commit-changes.png new file mode 100644 index 00000000000..393e1994cff Binary files /dev/null and b/docs/git/_img/create-pr-status-server/commit-changes.png differ diff --git a/docs/git/_img/create-pr-status-server/commit-to-branch.png b/docs/git/_img/create-pr-status-server/commit-to-branch.png new file mode 100644 index 00000000000..66f9f323af9 Binary files /dev/null and b/docs/git/_img/create-pr-status-server/commit-to-branch.png differ diff --git a/docs/git/_img/create-pr-status-server/create-pr.png b/docs/git/_img/create-pr-status-server/create-pr.png new file mode 100644 index 00000000000..5759710e873 Binary files /dev/null and b/docs/git/_img/create-pr-status-server/create-pr.png differ diff --git a/docs/git/_img/create-pr-status-server/edit-readme.png b/docs/git/_img/create-pr-status-server/edit-readme.png new file mode 100644 index 00000000000..07ca1795e0f Binary files /dev/null and b/docs/git/_img/create-pr-status-server/edit-readme.png differ diff --git a/docs/git/_img/create-pr-status-server/new-pr-wip.png b/docs/git/_img/create-pr-status-server/new-pr-wip.png new file mode 100644 index 00000000000..9e02d7b53c3 Binary files /dev/null and b/docs/git/_img/create-pr-status-server/new-pr-wip.png differ diff --git a/docs/git/_img/create-pr-status-server/pr-with-status.png b/docs/git/_img/create-pr-status-server/pr-with-status.png new file mode 100644 index 00000000000..d4ecd1c4171 Binary files /dev/null and b/docs/git/_img/create-pr-status-server/pr-with-status.png differ diff --git a/docs/git/_img/create-pr-status-server/service-hooks-action.png b/docs/git/_img/create-pr-status-server/service-hooks-action.png new file mode 100644 index 00000000000..340a75d1a95 Binary files /dev/null and b/docs/git/_img/create-pr-status-server/service-hooks-action.png differ diff --git a/docs/git/_img/create-pr-status-server/service-hooks-create-first-service-hook.png b/docs/git/_img/create-pr-status-server/service-hooks-create-first-service-hook.png new file mode 100644 index 00000000000..9c0cf83698a Binary files /dev/null and b/docs/git/_img/create-pr-status-server/service-hooks-create-first-service-hook.png differ diff --git a/docs/git/_img/create-pr-status-server/service-hooks-create.png b/docs/git/_img/create-pr-status-server/service-hooks-create.png new file mode 100644 index 00000000000..618a7f2aa5f Binary files /dev/null and b/docs/git/_img/create-pr-status-server/service-hooks-create.png differ diff --git a/docs/git/_img/create-pr-status-server/service-hooks-menu.png b/docs/git/_img/create-pr-status-server/service-hooks-menu.png new file mode 100644 index 00000000000..96458d2d211 Binary files /dev/null and b/docs/git/_img/create-pr-status-server/service-hooks-menu.png differ diff --git a/docs/git/_img/create-pr-status-server/service-hooks-trigger.png b/docs/git/_img/create-pr-status-server/service-hooks-trigger.png new file mode 100644 index 00000000000..fe76db1bb80 Binary files /dev/null and b/docs/git/_img/create-pr-status-server/service-hooks-trigger.png differ diff --git a/docs/git/_img/create-pr-status-server/service-hooks-web-hook.png b/docs/git/_img/create-pr-status-server/service-hooks-web-hook.png new file mode 100644 index 00000000000..da77318af82 Binary files /dev/null and b/docs/git/_img/create-pr-status-server/service-hooks-web-hook.png differ diff --git a/docs/git/_img/create-pr-status-server/test-notification.png b/docs/git/_img/create-pr-status-server/test-notification.png new file mode 100644 index 00000000000..adae57d9863 Binary files /dev/null and b/docs/git/_img/create-pr-status-server/test-notification.png differ diff --git a/docs/git/_img/create-repo-intellij/build-status-icons.png b/docs/git/_img/create-repo-intellij/build-status-icons.png new file mode 100644 index 00000000000..0b1c2b7c5da Binary files /dev/null and b/docs/git/_img/create-repo-intellij/build-status-icons.png differ diff --git a/docs/git/_img/create-repo-intellij/build-status-menu.png b/docs/git/_img/create-repo-intellij/build-status-menu.png new file mode 100644 index 00000000000..63cebcec040 Binary files /dev/null and b/docs/git/_img/create-repo-intellij/build-status-menu.png differ diff --git a/docs/git/_img/create-repo-intellij/clone-context-menu.png b/docs/git/_img/create-repo-intellij/clone-context-menu.png new file mode 100644 index 00000000000..8ff549e0fe2 Binary files /dev/null and b/docs/git/_img/create-repo-intellij/clone-context-menu.png differ diff --git a/docs/git/_img/create-repo-intellij/clone-git-repo.png b/docs/git/_img/create-repo-intellij/clone-git-repo.png new file mode 100644 index 00000000000..5c74191a4a6 Binary files /dev/null and b/docs/git/_img/create-repo-intellij/clone-git-repo.png differ diff --git a/docs/git/_img/create-repo-intellij/clone.png b/docs/git/_img/create-repo-intellij/clone.png new file mode 100644 index 00000000000..beed99ea755 Binary files /dev/null and b/docs/git/_img/create-repo-intellij/clone.png differ diff --git a/docs/git/_img/create-repo-intellij/commit-earth.png b/docs/git/_img/create-repo-intellij/commit-earth.png new file mode 100644 index 00000000000..c1e6c436417 Binary files /dev/null and b/docs/git/_img/create-repo-intellij/commit-earth.png differ diff --git a/docs/git/_img/create-repo-intellij/create-a-new-repository.png b/docs/git/_img/create-repo-intellij/create-a-new-repository.png new file mode 100644 index 00000000000..21067427dfc Binary files /dev/null and b/docs/git/_img/create-repo-intellij/create-a-new-repository.png differ diff --git a/docs/git/_img/create-repo-intellij/create-pull-request.png b/docs/git/_img/create-repo-intellij/create-pull-request.png new file mode 100644 index 00000000000..0e9043cd48f Binary files /dev/null and b/docs/git/_img/create-repo-intellij/create-pull-request.png differ diff --git a/docs/git/_img/create-repo-intellij/create-vsts-repo.png b/docs/git/_img/create-repo-intellij/create-vsts-repo.png new file mode 100644 index 00000000000..53e963a100a Binary files /dev/null and b/docs/git/_img/create-repo-intellij/create-vsts-repo.png differ diff --git a/docs/git/_img/create-repo-intellij/deep-space-files.png b/docs/git/_img/create-repo-intellij/deep-space-files.png new file mode 100644 index 00000000000..3d9ca220c4b Binary files /dev/null and b/docs/git/_img/create-repo-intellij/deep-space-files.png differ diff --git a/docs/git/_img/create-repo-intellij/deep-space-project.png b/docs/git/_img/create-repo-intellij/deep-space-project.png new file mode 100644 index 00000000000..8ae96f29063 Binary files /dev/null and b/docs/git/_img/create-repo-intellij/deep-space-project.png differ diff --git a/docs/git/_img/create-repo-intellij/earth-commented-out.png b/docs/git/_img/create-repo-intellij/earth-commented-out.png new file mode 100644 index 00000000000..098f6529306 Binary files /dev/null and b/docs/git/_img/create-repo-intellij/earth-commented-out.png differ diff --git a/docs/git/_img/create-repo-intellij/pull-request-menu.png b/docs/git/_img/create-repo-intellij/pull-request-menu.png new file mode 100644 index 00000000000..d0001a8b5ca Binary files /dev/null and b/docs/git/_img/create-repo-intellij/pull-request-menu.png differ diff --git a/docs/git/_img/create-repo-intellij/select-vsts-project.png b/docs/git/_img/create-repo-intellij/select-vsts-project.png new file mode 100644 index 00000000000..123f77b45b2 Binary files /dev/null and b/docs/git/_img/create-repo-intellij/select-vsts-project.png differ diff --git a/docs/git/_img/create-repo-intellij/vsts-sign-in.png b/docs/git/_img/create-repo-intellij/vsts-sign-in.png new file mode 100644 index 00000000000..1f194391564 Binary files /dev/null and b/docs/git/_img/create-repo-intellij/vsts-sign-in.png differ diff --git a/docs/git/_img/create-repo-intellij/work-items-menu.png b/docs/git/_img/create-repo-intellij/work-items-menu.png new file mode 100644 index 00000000000..2190a357b4b Binary files /dev/null and b/docs/git/_img/create-repo-intellij/work-items-menu.png differ diff --git a/docs/git/_img/create-run-unit-tests/create3rdpartyunittest1.png b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest1.png new file mode 100644 index 00000000000..7b3776cc967 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest1.png differ diff --git a/docs/git/_img/create-run-unit-tests/create3rdpartyunittest3.png b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest3.png new file mode 100644 index 00000000000..aaf4dab5d2c Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest3.png differ diff --git a/docs/git/_img/create-run-unit-tests/create3rdpartyunittest3a.png b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest3a.png new file mode 100644 index 00000000000..f5f8c8d80ff Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest3a.png differ diff --git a/docs/git/_img/create-run-unit-tests/create3rdpartyunittest4.png b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest4.png new file mode 100644 index 00000000000..8ace62534cb Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest4.png differ diff --git a/docs/git/_img/create-run-unit-tests/create3rdpartyunittest6.png b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest6.png new file mode 100644 index 00000000000..d0838d7013a Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest6.png differ diff --git a/docs/git/_img/create-run-unit-tests/create3rdpartyunittest7.png b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest7.png new file mode 100644 index 00000000000..10b0f6ccfd1 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/create3rdpartyunittest7.png differ diff --git a/docs/git/_img/create-run-unit-tests/createunittest1.png b/docs/git/_img/create-run-unit-tests/createunittest1.png new file mode 100644 index 00000000000..32b943d1f02 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/createunittest1.png differ diff --git a/docs/git/_img/create-run-unit-tests/createunittest2.png b/docs/git/_img/create-run-unit-tests/createunittest2.png new file mode 100644 index 00000000000..d67e964c919 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/createunittest2.png differ diff --git a/docs/git/_img/create-run-unit-tests/createunittest5.png b/docs/git/_img/create-run-unit-tests/createunittest5.png new file mode 100644 index 00000000000..9d0a5ddfc4c Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/createunittest5.png differ diff --git a/docs/git/_img/create-run-unit-tests/createunittest6.png b/docs/git/_img/create-run-unit-tests/createunittest6.png new file mode 100644 index 00000000000..304496d3853 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/createunittest6.png differ diff --git a/docs/git/_img/create-run-unit-tests/createunittest7.png b/docs/git/_img/create-run-unit-tests/createunittest7.png new file mode 100644 index 00000000000..631bbc7df48 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/createunittest7.png differ diff --git a/docs/git/_img/create-run-unit-tests/createunittest8.png b/docs/git/_img/create-run-unit-tests/createunittest8.png new file mode 100644 index 00000000000..e926d0ff481 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/createunittest8.png differ diff --git a/docs/git/_img/create-run-unit-tests/install3rdpartyunittestframeworks1.png b/docs/git/_img/create-run-unit-tests/install3rdpartyunittestframeworks1.png new file mode 100644 index 00000000000..59d4adeef68 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/install3rdpartyunittestframeworks1.png differ diff --git a/docs/git/_img/create-run-unit-tests/install3rdpartyunittestframeworks2.png b/docs/git/_img/create-run-unit-tests/install3rdpartyunittestframeworks2.png new file mode 100644 index 00000000000..c0a4d96fa55 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/install3rdpartyunittestframeworks2.png differ diff --git a/docs/git/_img/create-run-unit-tests/rununittest1.png b/docs/git/_img/create-run-unit-tests/rununittest1.png new file mode 100644 index 00000000000..2ec334eb4ea Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/rununittest1.png differ diff --git a/docs/git/_img/create-run-unit-tests/rununittest2.png b/docs/git/_img/create-run-unit-tests/rununittest2.png new file mode 100644 index 00000000000..d4bf0d10681 Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/rununittest2.png differ diff --git a/docs/git/_img/create-run-unit-tests/rununittest3.png b/docs/git/_img/create-run-unit-tests/rununittest3.png new file mode 100644 index 00000000000..b6ce439655f Binary files /dev/null and b/docs/git/_img/create-run-unit-tests/rununittest3.png differ diff --git a/docs/git/_img/create-your-app-vs/IC685701.png b/docs/git/_img/create-your-app-vs/IC685701.png new file mode 100644 index 00000000000..ef316f42790 Binary files /dev/null and b/docs/git/_img/create-your-app-vs/IC685701.png differ diff --git a/docs/git/_img/create-your-app-vs/IC687145.png b/docs/git/_img/create-your-app-vs/IC687145.png new file mode 100644 index 00000000000..a8efc88faad Binary files /dev/null and b/docs/git/_img/create-your-app-vs/IC687145.png differ diff --git a/docs/git/_img/create-your-app-vs/IC687147.png b/docs/git/_img/create-your-app-vs/IC687147.png new file mode 100644 index 00000000000..2cbbbb80288 Binary files /dev/null and b/docs/git/_img/create-your-app-vs/IC687147.png differ diff --git a/docs/git/_img/create-your-app-vs/IC687148.png b/docs/git/_img/create-your-app-vs/IC687148.png new file mode 100644 index 00000000000..d28d2e4d929 Binary files /dev/null and b/docs/git/_img/create-your-app-vs/IC687148.png differ diff --git a/docs/git/_img/debug-app/DBG_VSCOM_CallStack.png b/docs/git/_img/debug-app/DBG_VSCOM_CallStack.png new file mode 100644 index 00000000000..94654445493 Binary files /dev/null and b/docs/git/_img/debug-app/DBG_VSCOM_CallStack.png differ diff --git a/docs/git/_img/debug-app/DBG_VSCOM_DataTips.png b/docs/git/_img/debug-app/DBG_VSCOM_DataTips.png new file mode 100644 index 00000000000..26e697ca7bc Binary files /dev/null and b/docs/git/_img/debug-app/DBG_VSCOM_DataTips.png differ diff --git a/docs/git/_img/debug-app/DBG_VSCOM_FindProblem.png b/docs/git/_img/debug-app/DBG_VSCOM_FindProblem.png new file mode 100644 index 00000000000..7decbf67e87 Binary files /dev/null and b/docs/git/_img/debug-app/DBG_VSCOM_FindProblem.png differ diff --git a/docs/git/_img/debug-app/DBG_VSCOM_FixCode.png b/docs/git/_img/debug-app/DBG_VSCOM_FixCode.png new file mode 100644 index 00000000000..b1e572d82ca Binary files /dev/null and b/docs/git/_img/debug-app/DBG_VSCOM_FixCode.png differ diff --git a/docs/git/_img/debug-app/DBG_VSCOM_Locals.png b/docs/git/_img/debug-app/DBG_VSCOM_Locals.png new file mode 100644 index 00000000000..c41cd7d8750 Binary files /dev/null and b/docs/git/_img/debug-app/DBG_VSCOM_Locals.png differ diff --git a/docs/git/_img/debug-app/DBG_VSCOM_SetBreakpoint.png b/docs/git/_img/debug-app/DBG_VSCOM_SetBreakpoint.png new file mode 100644 index 00000000000..32f9915ba1e Binary files /dev/null and b/docs/git/_img/debug-app/DBG_VSCOM_SetBreakpoint.png differ diff --git a/docs/git/_img/debug-app/DBG_VSCOM_Start.png b/docs/git/_img/debug-app/DBG_VSCOM_Start.png new file mode 100644 index 00000000000..e84b9928ca9 Binary files /dev/null and b/docs/git/_img/debug-app/DBG_VSCOM_Start.png differ diff --git a/docs/git/_img/debug-app/DBG_VSCOM_StopAtException.png b/docs/git/_img/debug-app/DBG_VSCOM_StopAtException.png new file mode 100644 index 00000000000..a7fbd2db750 Binary files /dev/null and b/docs/git/_img/debug-app/DBG_VSCOM_StopAtException.png differ diff --git a/docs/git/_img/debug-app/DBG_VSCOM_StopDebugging.png b/docs/git/_img/debug-app/DBG_VSCOM_StopDebugging.png new file mode 100644 index 00000000000..d3014f59c06 Binary files /dev/null and b/docs/git/_img/debug-app/DBG_VSCOM_StopDebugging.png differ diff --git a/docs/git/_img/find-a-file/FindaFile.png b/docs/git/_img/find-a-file/FindaFile.png new file mode 100644 index 00000000000..1cfe0b24657 Binary files /dev/null and b/docs/git/_img/find-a-file/FindaFile.png differ diff --git a/docs/git/_img/find-a-file/FindaFileResults.png b/docs/git/_img/find-a-file/FindaFileResults.png new file mode 100644 index 00000000000..b12a9cd7fe0 Binary files /dev/null and b/docs/git/_img/find-a-file/FindaFileResults.png differ diff --git a/docs/git/_img/gcm_login_prompt.gif b/docs/git/_img/gcm_login_prompt.gif new file mode 100644 index 00000000000..0941a34a3e3 Binary files /dev/null and b/docs/git/_img/gcm_login_prompt.gif differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC682169.png b/docs/git/_img/get-code-reviewed-vs/IC682169.png new file mode 100644 index 00000000000..8ec5041e01d Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC682169.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC682170.png b/docs/git/_img/get-code-reviewed-vs/IC682170.png new file mode 100644 index 00000000000..b59f953117e Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC682170.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC682171.png b/docs/git/_img/get-code-reviewed-vs/IC682171.png new file mode 100644 index 00000000000..64709b30b91 Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC682171.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC682757.png b/docs/git/_img/get-code-reviewed-vs/IC682757.png new file mode 100644 index 00000000000..44c645f75d0 Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC682757.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC682758.png b/docs/git/_img/get-code-reviewed-vs/IC682758.png new file mode 100644 index 00000000000..a00f12b9b98 Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC682758.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC682760.png b/docs/git/_img/get-code-reviewed-vs/IC682760.png new file mode 100644 index 00000000000..68fda0f3a2d Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC682760.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC682763.png b/docs/git/_img/get-code-reviewed-vs/IC682763.png new file mode 100644 index 00000000000..9217f4b9984 Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC682763.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC682764.png b/docs/git/_img/get-code-reviewed-vs/IC682764.png new file mode 100644 index 00000000000..8767d935c7a Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC682764.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC683034.png b/docs/git/_img/get-code-reviewed-vs/IC683034.png new file mode 100644 index 00000000000..0fa5d82ba61 Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC683034.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC683035.png b/docs/git/_img/get-code-reviewed-vs/IC683035.png new file mode 100644 index 00000000000..a17d3d37df2 Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC683035.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC683036.png b/docs/git/_img/get-code-reviewed-vs/IC683036.png new file mode 100644 index 00000000000..fa05b51acca Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC683036.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC683037.png b/docs/git/_img/get-code-reviewed-vs/IC683037.png new file mode 100644 index 00000000000..4fd5fbb470b Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC683037.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC683038.png b/docs/git/_img/get-code-reviewed-vs/IC683038.png new file mode 100644 index 00000000000..897fd456ff3 Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC683038.png differ diff --git a/docs/git/_img/get-code-reviewed-vs/IC683039.png b/docs/git/_img/get-code-reviewed-vs/IC683039.png new file mode 100644 index 00000000000..b2510c05575 Binary files /dev/null and b/docs/git/_img/get-code-reviewed-vs/IC683039.png differ diff --git a/docs/git/_img/get-started/ConfigureSettings1.png b/docs/git/_img/get-started/ConfigureSettings1.png new file mode 100644 index 00000000000..e2f04fcbfda Binary files /dev/null and b/docs/git/_img/get-started/ConfigureSettings1.png differ diff --git a/docs/git/_img/get-started/ConfigureSettings2.png b/docs/git/_img/get-started/ConfigureSettings2.png new file mode 100644 index 00000000000..4913f616008 Binary files /dev/null and b/docs/git/_img/get-started/ConfigureSettings2.png differ diff --git a/docs/git/_img/get-started/CreateProjGitFirstRun.png b/docs/git/_img/get-started/CreateProjGitFirstRun.png new file mode 100644 index 00000000000..747e8a93539 Binary files /dev/null and b/docs/git/_img/get-started/CreateProjGitFirstRun.png differ diff --git a/docs/git/_img/get-started/CreateProjGitPCW.png b/docs/git/_img/get-started/CreateProjGitPCW.png new file mode 100644 index 00000000000..74607bf86e3 Binary files /dev/null and b/docs/git/_img/get-started/CreateProjGitPCW.png differ diff --git a/docs/git/_img/get-started/GoHomeOpenInVisualStudio.png b/docs/git/_img/get-started/GoHomeOpenInVisualStudio.png new file mode 100644 index 00000000000..5302b7c53b0 Binary files /dev/null and b/docs/git/_img/get-started/GoHomeOpenInVisualStudio.png differ diff --git a/docs/git/_img/get-started/VSBranches1.png b/docs/git/_img/get-started/VSBranches1.png new file mode 100644 index 00000000000..b1f2db763aa Binary files /dev/null and b/docs/git/_img/get-started/VSBranches1.png differ diff --git a/docs/git/_img/get-started/VSBranchesCreate.png b/docs/git/_img/get-started/VSBranchesCreate.png new file mode 100644 index 00000000000..8a36922942c Binary files /dev/null and b/docs/git/_img/get-started/VSBranchesCreate.png differ diff --git a/docs/git/_img/get-started/VSBranchesNewLocal.png b/docs/git/_img/get-started/VSBranchesNewLocal.png new file mode 100644 index 00000000000..95febd3a064 Binary files /dev/null and b/docs/git/_img/get-started/VSBranchesNewLocal.png differ diff --git a/docs/git/_img/get-started/VSChanges1.png b/docs/git/_img/get-started/VSChanges1.png new file mode 100644 index 00000000000..3cb301ffa79 Binary files /dev/null and b/docs/git/_img/get-started/VSChanges1.png differ diff --git a/docs/git/_img/get-started/VSChangesCommit.png b/docs/git/_img/get-started/VSChangesCommit.png new file mode 100644 index 00000000000..ec296eb7f6c Binary files /dev/null and b/docs/git/_img/get-started/VSChangesCommit.png differ diff --git a/docs/git/_img/get-started/VSChangesCommitPush.png b/docs/git/_img/get-started/VSChangesCommitPush.png new file mode 100644 index 00000000000..ae12c0b8137 Binary files /dev/null and b/docs/git/_img/get-started/VSChangesCommitPush.png differ diff --git a/docs/git/_img/get-started/VSClone1.png b/docs/git/_img/get-started/VSClone1.png new file mode 100644 index 00000000000..0605bfcc03f Binary files /dev/null and b/docs/git/_img/get-started/VSClone1.png differ diff --git a/docs/git/_img/get-started/VSClone2.png b/docs/git/_img/get-started/VSClone2.png new file mode 100644 index 00000000000..c3ad250b901 Binary files /dev/null and b/docs/git/_img/get-started/VSClone2.png differ diff --git a/docs/git/_img/get-started/VSCommit.png b/docs/git/_img/get-started/VSCommit.png new file mode 100644 index 00000000000..9c011279a56 Binary files /dev/null and b/docs/git/_img/get-started/VSCommit.png differ diff --git a/docs/git/_img/get-started/VSCommitSyncMessage.png b/docs/git/_img/get-started/VSCommitSyncMessage.png new file mode 100644 index 00000000000..6c84d14092a Binary files /dev/null and b/docs/git/_img/get-started/VSCommitSyncMessage.png differ diff --git a/docs/git/_img/get-started/VSHelloWorld.png b/docs/git/_img/get-started/VSHelloWorld.png new file mode 100644 index 00000000000..29eb647e79b Binary files /dev/null and b/docs/git/_img/get-started/VSHelloWorld.png differ diff --git a/docs/git/_img/get-started/VSOAppAdded.png b/docs/git/_img/get-started/VSOAppAdded.png new file mode 100644 index 00000000000..790215d4d00 Binary files /dev/null and b/docs/git/_img/get-started/VSOAppAdded.png differ diff --git a/docs/git/_img/get-started/VSProjectLocation.png b/docs/git/_img/get-started/VSProjectLocation.png new file mode 100644 index 00000000000..38f8f06310a Binary files /dev/null and b/docs/git/_img/get-started/VSProjectLocation.png differ diff --git a/docs/git/_img/get-started/VSSyncPublish.png b/docs/git/_img/get-started/VSSyncPublish.png new file mode 100644 index 00000000000..8bcd61679f6 Binary files /dev/null and b/docs/git/_img/get-started/VSSyncPublish.png differ diff --git a/docs/git/_img/get-started/WebPullRequestCreate.png b/docs/git/_img/get-started/WebPullRequestCreate.png new file mode 100644 index 00000000000..f015497d874 Binary files /dev/null and b/docs/git/_img/get-started/WebPullRequestCreate.png differ diff --git a/docs/git/_img/get-started/WebPullRequestHub.png b/docs/git/_img/get-started/WebPullRequestHub.png new file mode 100644 index 00000000000..f89c778b7b4 Binary files /dev/null and b/docs/git/_img/get-started/WebPullRequestHub.png differ diff --git a/docs/git/_img/get-started/WebPullRequestInProgress.png b/docs/git/_img/get-started/WebPullRequestInProgress.png new file mode 100644 index 00000000000..57cca1d22a9 Binary files /dev/null and b/docs/git/_img/get-started/WebPullRequestInProgress.png differ diff --git a/docs/git/_img/get-started/WebPullRequestNew.png b/docs/git/_img/get-started/WebPullRequestNew.png new file mode 100644 index 00000000000..94386017f36 Binary files /dev/null and b/docs/git/_img/get-started/WebPullRequestNew.png differ diff --git a/docs/git/_img/get-started/WebPullRequestSelectBranch.png b/docs/git/_img/get-started/WebPullRequestSelectBranch.png new file mode 100644 index 00000000000..e23693621d2 Binary files /dev/null and b/docs/git/_img/get-started/WebPullRequestSelectBranch.png differ diff --git a/docs/git/_img/get-started/new-code-project-from-toolbar.png b/docs/git/_img/get-started/new-code-project-from-toolbar.png new file mode 100644 index 00000000000..9d99d614d75 Binary files /dev/null and b/docs/git/_img/get-started/new-code-project-from-toolbar.png differ diff --git a/docs/git/_img/get-started/new-solution-link-in-team-explorer.png b/docs/git/_img/get-started/new-solution-link-in-team-explorer.png new file mode 100644 index 00000000000..95c45dfc1c2 Binary files /dev/null and b/docs/git/_img/get-started/new-solution-link-in-team-explorer.png differ diff --git a/docs/git/_img/git-logo-16-16.png b/docs/git/_img/git-logo-16-16.png new file mode 100644 index 00000000000..f33f9859799 Binary files /dev/null and b/docs/git/_img/git-logo-16-16.png differ diff --git a/docs/git/_img/index/cli.png b/docs/git/_img/index/cli.png new file mode 100644 index 00000000000..c45a9ac8a6b Binary files /dev/null and b/docs/git/_img/index/cli.png differ diff --git a/docs/git/_img/index/create-a-git-repo-video-img.png b/docs/git/_img/index/create-a-git-repo-video-img.png new file mode 100644 index 00000000000..86cf4e77842 Binary files /dev/null and b/docs/git/_img/index/create-a-git-repo-video-img.png differ diff --git a/docs/git/_img/index/eclipse.png b/docs/git/_img/index/eclipse.png new file mode 100644 index 00000000000..e0135be2097 Binary files /dev/null and b/docs/git/_img/index/eclipse.png differ diff --git a/docs/git/_img/index/git-at-scale-video-img.png b/docs/git/_img/index/git-at-scale-video-img.png new file mode 100644 index 00000000000..eb2cfc11973 Binary files /dev/null and b/docs/git/_img/index/git-at-scale-video-img.png differ diff --git a/docs/git/_img/index/vs-ide.png b/docs/git/_img/index/vs-ide.png new file mode 100644 index 00000000000..f2dd67bbd2c Binary files /dev/null and b/docs/git/_img/index/vs-ide.png differ diff --git a/docs/git/_img/index/web.png b/docs/git/_img/index/web.png new file mode 100644 index 00000000000..771fe93ac8f Binary files /dev/null and b/docs/git/_img/index/web.png differ diff --git a/docs/git/_img/index/xcode.png b/docs/git/_img/index/xcode.png new file mode 100644 index 00000000000..8e36aa72d04 Binary files /dev/null and b/docs/git/_img/index/xcode.png differ diff --git a/docs/git/_img/install-with-gcm.png b/docs/git/_img/install-with-gcm.png new file mode 100644 index 00000000000..648be029ab1 Binary files /dev/null and b/docs/git/_img/install-with-gcm.png differ diff --git a/docs/git/_img/manage-large-files/choose-remove.png b/docs/git/_img/manage-large-files/choose-remove.png new file mode 100644 index 00000000000..896a329d6ff Binary files /dev/null and b/docs/git/_img/manage-large-files/choose-remove.png differ diff --git a/docs/git/_img/manage-large-files/choose-windows-credentials.png b/docs/git/_img/manage-large-files/choose-windows-credentials.png new file mode 100644 index 00000000000..f0046064d60 Binary files /dev/null and b/docs/git/_img/manage-large-files/choose-windows-credentials.png differ diff --git a/docs/git/_img/manage-large-files/launch-credential-manager.png b/docs/git/_img/manage-large-files/launch-credential-manager.png new file mode 100644 index 00000000000..41be8a61391 Binary files /dev/null and b/docs/git/_img/manage-large-files/launch-credential-manager.png differ diff --git a/docs/git/_img/markdown_quote.png b/docs/git/_img/markdown_quote.png new file mode 100644 index 00000000000..ac2356bfb8d Binary files /dev/null and b/docs/git/_img/markdown_quote.png differ diff --git a/docs/git/_img/me-menu.png b/docs/git/_img/me-menu.png new file mode 100644 index 00000000000..6cf7d2e8916 Binary files /dev/null and b/docs/git/_img/me-menu.png differ diff --git a/docs/git/_img/overview/IC784012.png b/docs/git/_img/overview/IC784012.png new file mode 100644 index 00000000000..cf940db66c7 Binary files /dev/null and b/docs/git/_img/overview/IC784012.png differ diff --git a/docs/git/_img/overview/IC839946.png b/docs/git/_img/overview/IC839946.png new file mode 100644 index 00000000000..ef5b811d40a Binary files /dev/null and b/docs/git/_img/overview/IC839946.png differ diff --git a/docs/git/_img/overview/get-started-favorite-ide.png b/docs/git/_img/overview/get-started-favorite-ide.png new file mode 100644 index 00000000000..371fedfeca1 Binary files /dev/null and b/docs/git/_img/overview/get-started-favorite-ide.png differ diff --git a/docs/git/_img/overview/git-repos.png b/docs/git/_img/overview/git-repos.png new file mode 100644 index 00000000000..e5e2ebdc1cf Binary files /dev/null and b/docs/git/_img/overview/git-repos.png differ diff --git a/docs/git/_img/overview/git_logo.png b/docs/git/_img/overview/git_logo.png new file mode 100644 index 00000000000..81d5e7078cb Binary files /dev/null and b/docs/git/_img/overview/git_logo.png differ diff --git a/docs/git/_img/overview/vs_icon.png b/docs/git/_img/overview/vs_icon.png new file mode 100644 index 00000000000..99a9f7dcd51 Binary files /dev/null and b/docs/git/_img/overview/vs_icon.png differ diff --git a/docs/git/_img/pat_creation.gif b/docs/git/_img/pat_creation.gif new file mode 100644 index 00000000000..5a46fa9922f Binary files /dev/null and b/docs/git/_img/pat_creation.gif differ diff --git a/docs/git/_img/pr-status-policy/add-service.png b/docs/git/_img/pr-status-policy/add-service.png new file mode 100644 index 00000000000..9f52e563ed9 Binary files /dev/null and b/docs/git/_img/pr-status-policy/add-service.png differ diff --git a/docs/git/_img/pr-status-policy/branches.png b/docs/git/_img/pr-status-policy/branches.png new file mode 100644 index 00000000000..267cf938114 Binary files /dev/null and b/docs/git/_img/pr-status-policy/branches.png differ diff --git a/docs/git/_img/pr-status-policy/choose-service.png b/docs/git/_img/pr-status-policy/choose-service.png new file mode 100644 index 00000000000..095004057dd Binary files /dev/null and b/docs/git/_img/pr-status-policy/choose-service.png differ diff --git a/docs/git/_img/pr-status-policy/pr-policy-no-status.png b/docs/git/_img/pr-status-policy/pr-policy-no-status.png new file mode 100644 index 00000000000..c00bab1bf35 Binary files /dev/null and b/docs/git/_img/pr-status-policy/pr-policy-no-status.png differ diff --git a/docs/git/_img/pr-status-policy/pr-policy-not-set.png b/docs/git/_img/pr-status-policy/pr-policy-not-set.png new file mode 100644 index 00000000000..721db33f32d Binary files /dev/null and b/docs/git/_img/pr-status-policy/pr-policy-not-set.png differ diff --git a/docs/git/_img/pr-status-policy/pr-policy-status-set.png b/docs/git/_img/pr-status-policy/pr-policy-status-set.png new file mode 100644 index 00000000000..17b50e0d0e9 Binary files /dev/null and b/docs/git/_img/pr-status-policy/pr-policy-status-set.png differ diff --git a/docs/git/_img/pr-status-policy/pr-policy-succeeded.png b/docs/git/_img/pr-status-policy/pr-policy-succeeded.png new file mode 100644 index 00000000000..723676904fb Binary files /dev/null and b/docs/git/_img/pr-status-policy/pr-policy-succeeded.png differ diff --git a/docs/git/_img/pull-requests/Approval.png b/docs/git/_img/pull-requests/Approval.png new file mode 100644 index 00000000000..12450246475 Binary files /dev/null and b/docs/git/_img/pull-requests/Approval.png differ diff --git a/docs/git/_img/pull-requests/CommitToTopicBranch1.png b/docs/git/_img/pull-requests/CommitToTopicBranch1.png new file mode 100644 index 00000000000..bcdb5b683cd Binary files /dev/null and b/docs/git/_img/pull-requests/CommitToTopicBranch1.png differ diff --git a/docs/git/_img/pull-requests/CommitToTopicBranch2.png b/docs/git/_img/pull-requests/CommitToTopicBranch2.png new file mode 100644 index 00000000000..3e7b6330376 Binary files /dev/null and b/docs/git/_img/pull-requests/CommitToTopicBranch2.png differ diff --git a/docs/git/_img/pull-requests/CompletePullRequest.png b/docs/git/_img/pull-requests/CompletePullRequest.png new file mode 100644 index 00000000000..fe2ea85fec3 Binary files /dev/null and b/docs/git/_img/pull-requests/CompletePullRequest.png differ diff --git a/docs/git/_img/pull-requests/CreatePullRequest1.png b/docs/git/_img/pull-requests/CreatePullRequest1.png new file mode 100644 index 00000000000..17a32d868fd Binary files /dev/null and b/docs/git/_img/pull-requests/CreatePullRequest1.png differ diff --git a/docs/git/_img/pull-requests/CreatePullRequest2.png b/docs/git/_img/pull-requests/CreatePullRequest2.png new file mode 100644 index 00000000000..bc9d9eba315 Binary files /dev/null and b/docs/git/_img/pull-requests/CreatePullRequest2.png differ diff --git a/docs/git/_img/pull-requests/CreateTopicBranch1.png b/docs/git/_img/pull-requests/CreateTopicBranch1.png new file mode 100644 index 00000000000..6a4a56be14b Binary files /dev/null and b/docs/git/_img/pull-requests/CreateTopicBranch1.png differ diff --git a/docs/git/_img/pull-requests/CreateTopicBranch2.png b/docs/git/_img/pull-requests/CreateTopicBranch2.png new file mode 100644 index 00000000000..396fa63d66e Binary files /dev/null and b/docs/git/_img/pull-requests/CreateTopicBranch2.png differ diff --git a/docs/git/_img/pull-requests/CreateTopicBranch3.png b/docs/git/_img/pull-requests/CreateTopicBranch3.png new file mode 100644 index 00000000000..6a3e9fc221c Binary files /dev/null and b/docs/git/_img/pull-requests/CreateTopicBranch3.png differ diff --git a/docs/git/_img/pull-requests/DeleteSourceBranch.png b/docs/git/_img/pull-requests/DeleteSourceBranch.png new file mode 100644 index 00000000000..a33009c4cf7 Binary files /dev/null and b/docs/git/_img/pull-requests/DeleteSourceBranch.png differ diff --git a/docs/git/_img/pull-requests/FindPullRequest.png b/docs/git/_img/pull-requests/FindPullRequest.png new file mode 100644 index 00000000000..6bc3b507437 Binary files /dev/null and b/docs/git/_img/pull-requests/FindPullRequest.png differ diff --git a/docs/git/_img/pull-requests/LeaveComment1.png b/docs/git/_img/pull-requests/LeaveComment1.png new file mode 100644 index 00000000000..23604dd3d00 Binary files /dev/null and b/docs/git/_img/pull-requests/LeaveComment1.png differ diff --git a/docs/git/_img/pull-requests/LeaveComment2.png b/docs/git/_img/pull-requests/LeaveComment2.png new file mode 100644 index 00000000000..2de0da14e3c Binary files /dev/null and b/docs/git/_img/pull-requests/LeaveComment2.png differ diff --git a/docs/git/_img/pull-requests/LinkToWebPortal.png b/docs/git/_img/pull-requests/LinkToWebPortal.png new file mode 100644 index 00000000000..ab4b03833e2 Binary files /dev/null and b/docs/git/_img/pull-requests/LinkToWebPortal.png differ diff --git a/docs/git/_img/pull-requests/PublishFromBranchesPage.png b/docs/git/_img/pull-requests/PublishFromBranchesPage.png new file mode 100644 index 00000000000..c44486e8e28 Binary files /dev/null and b/docs/git/_img/pull-requests/PublishFromBranchesPage.png differ diff --git a/docs/git/_img/pull-requests/PublishFromSyncPage.png b/docs/git/_img/pull-requests/PublishFromSyncPage.png new file mode 100644 index 00000000000..8c91d84d54b Binary files /dev/null and b/docs/git/_img/pull-requests/PublishFromSyncPage.png differ diff --git a/docs/git/_img/pull-requests/RespondToFeedback1.png b/docs/git/_img/pull-requests/RespondToFeedback1.png new file mode 100644 index 00000000000..1c7dbff5b28 Binary files /dev/null and b/docs/git/_img/pull-requests/RespondToFeedback1.png differ diff --git a/docs/git/_img/pull-requests/RespondToFeedback2.png b/docs/git/_img/pull-requests/RespondToFeedback2.png new file mode 100644 index 00000000000..c37a13a4c02 Binary files /dev/null and b/docs/git/_img/pull-requests/RespondToFeedback2.png differ diff --git a/docs/git/_img/pull-requests/add_detail_to_pr.png b/docs/git/_img/pull-requests/add_detail_to_pr.png new file mode 100644 index 00000000000..4aae395fd40 Binary files /dev/null and b/docs/git/_img/pull-requests/add_detail_to_pr.png differ diff --git a/docs/git/_img/pull-requests/attach_files.gif b/docs/git/_img/pull-requests/attach_files.gif new file mode 100644 index 00000000000..46b42043900 Binary files /dev/null and b/docs/git/_img/pull-requests/attach_files.gif differ diff --git a/docs/git/_img/pull-requests/complete_pr_options.png b/docs/git/_img/pull-requests/complete_pr_options.png new file mode 100644 index 00000000000..f58da751f9e Binary files /dev/null and b/docs/git/_img/pull-requests/complete_pr_options.png differ diff --git a/docs/git/_img/pull-requests/create_pr_from_push.png b/docs/git/_img/pull-requests/create_pr_from_push.png new file mode 100644 index 00000000000..1f8c4bce6a3 Binary files /dev/null and b/docs/git/_img/pull-requests/create_pr_from_push.png differ diff --git a/docs/git/_img/pull-requests/create_pr_from_work_item.png b/docs/git/_img/pull-requests/create_pr_from_work_item.png new file mode 100644 index 00000000000..2fe98363ec5 Binary files /dev/null and b/docs/git/_img/pull-requests/create_pr_from_work_item.png differ diff --git a/docs/git/_img/pull-requests/edit_pr_information.png b/docs/git/_img/pull-requests/edit_pr_information.png new file mode 100644 index 00000000000..76b129113ce Binary files /dev/null and b/docs/git/_img/pull-requests/edit_pr_information.png differ diff --git a/docs/git/_img/pull-requests/emoji-markdown.png b/docs/git/_img/pull-requests/emoji-markdown.png new file mode 100644 index 00000000000..158b0c9d0ac Binary files /dev/null and b/docs/git/_img/pull-requests/emoji-markdown.png differ diff --git a/docs/git/_img/pull-requests/gear_icon_settings.png b/docs/git/_img/pull-requests/gear_icon_settings.png new file mode 100644 index 00000000000..e01ea1d4a31 Binary files /dev/null and b/docs/git/_img/pull-requests/gear_icon_settings.png differ diff --git a/docs/git/_img/pull-requests/markdown_sample_image.png b/docs/git/_img/pull-requests/markdown_sample_image.png new file mode 100644 index 00000000000..adf8b66245e Binary files /dev/null and b/docs/git/_img/pull-requests/markdown_sample_image.png differ diff --git a/docs/git/_img/pull-requests/pr_add_icon.png b/docs/git/_img/pull-requests/pr_add_icon.png new file mode 100644 index 00000000000..3d8b702bce9 Binary files /dev/null and b/docs/git/_img/pull-requests/pr_add_icon.png differ diff --git a/docs/git/_img/pull-requests/pr_banner_autocomplete.png b/docs/git/_img/pull-requests/pr_banner_autocomplete.png new file mode 100644 index 00000000000..992e3986bef Binary files /dev/null and b/docs/git/_img/pull-requests/pr_banner_autocomplete.png differ diff --git a/docs/git/_img/pull-requests/pr_branch_targets.png b/docs/git/_img/pull-requests/pr_branch_targets.png new file mode 100644 index 00000000000..b47d8112d8f Binary files /dev/null and b/docs/git/_img/pull-requests/pr_branch_targets.png differ diff --git a/docs/git/_img/pull-requests/pr_comment_icon.png b/docs/git/_img/pull-requests/pr_comment_icon.png new file mode 100644 index 00000000000..0c1cf523b39 Binary files /dev/null and b/docs/git/_img/pull-requests/pr_comment_icon.png differ diff --git a/docs/git/_img/pull-requests/pr_comments_summary.png b/docs/git/_img/pull-requests/pr_comments_summary.png new file mode 100644 index 00000000000..008c4b8fdda Binary files /dev/null and b/docs/git/_img/pull-requests/pr_comments_summary.png differ diff --git a/docs/git/_img/pull-requests/pr_complete_request.png b/docs/git/_img/pull-requests/pr_complete_request.png new file mode 100644 index 00000000000..1aaae59291d Binary files /dev/null and b/docs/git/_img/pull-requests/pr_complete_request.png differ diff --git a/docs/git/_img/pull-requests/pr_create_from_vs.png b/docs/git/_img/pull-requests/pr_create_from_vs.png new file mode 100644 index 00000000000..62d7cde9ee3 Binary files /dev/null and b/docs/git/_img/pull-requests/pr_create_from_vs.png differ diff --git a/docs/git/_img/pull-requests/pr_create_from_vs_branches.png b/docs/git/_img/pull-requests/pr_create_from_vs_branches.png new file mode 100644 index 00000000000..8214b9416eb Binary files /dev/null and b/docs/git/_img/pull-requests/pr_create_from_vs_branches.png differ diff --git a/docs/git/_img/pull-requests/pr_editing_changes.png b/docs/git/_img/pull-requests/pr_editing_changes.png new file mode 100644 index 00000000000..6400e9ef18f Binary files /dev/null and b/docs/git/_img/pull-requests/pr_editing_changes.png differ diff --git a/docs/git/_img/pull-requests/pr_file_filtering.png b/docs/git/_img/pull-requests/pr_file_filtering.png new file mode 100644 index 00000000000..933599d10ee Binary files /dev/null and b/docs/git/_img/pull-requests/pr_file_filtering.png differ diff --git a/docs/git/_img/pull-requests/pr_filter_comments.png b/docs/git/_img/pull-requests/pr_filter_comments.png new file mode 100644 index 00000000000..7b9ac27c5ea Binary files /dev/null and b/docs/git/_img/pull-requests/pr_filter_comments.png differ diff --git a/docs/git/_img/pull-requests/pr_opening_files.png b/docs/git/_img/pull-requests/pr_opening_files.png new file mode 100644 index 00000000000..ddc52012ed4 Binary files /dev/null and b/docs/git/_img/pull-requests/pr_opening_files.png differ diff --git a/docs/git/_img/pull-requests/pr_reactivate.png b/docs/git/_img/pull-requests/pr_reactivate.png new file mode 100644 index 00000000000..048a3fc1d80 Binary files /dev/null and b/docs/git/_img/pull-requests/pr_reactivate.png differ diff --git a/docs/git/_img/pull-requests/pr_remove_icon.png b/docs/git/_img/pull-requests/pr_remove_icon.png new file mode 100644 index 00000000000..97da69fad1b Binary files /dev/null and b/docs/git/_img/pull-requests/pr_remove_icon.png differ diff --git a/docs/git/_img/pull-requests/pr_status_widget.png b/docs/git/_img/pull-requests/pr_status_widget.png new file mode 100644 index 00000000000..2f3b78aa1c4 Binary files /dev/null and b/docs/git/_img/pull-requests/pr_status_widget.png differ diff --git a/docs/git/_img/pull-requests/pr_workitem_complete.png b/docs/git/_img/pull-requests/pr_workitem_complete.png new file mode 100644 index 00000000000..f1a6361da85 Binary files /dev/null and b/docs/git/_img/pull-requests/pr_workitem_complete.png differ diff --git a/docs/git/_img/pull-requests/pr_workitems.png b/docs/git/_img/pull-requests/pr_workitems.png new file mode 100644 index 00000000000..703737f20d1 Binary files /dev/null and b/docs/git/_img/pull-requests/pr_workitems.png differ diff --git a/docs/git/_img/pull-requests/pr_workitems_reviewers.png b/docs/git/_img/pull-requests/pr_workitems_reviewers.png new file mode 100644 index 00000000000..55cf883424c Binary files /dev/null and b/docs/git/_img/pull-requests/pr_workitems_reviewers.png differ diff --git a/docs/git/_img/pull-requests/pull_request_view_changes.gif b/docs/git/_img/pull-requests/pull_request_view_changes.gif new file mode 100644 index 00000000000..c1578945fb9 Binary files /dev/null and b/docs/git/_img/pull-requests/pull_request_view_changes.gif differ diff --git a/docs/git/_img/pull-requests/set_default_branch.png b/docs/git/_img/pull-requests/set_default_branch.png new file mode 100644 index 00000000000..20615711c85 Binary files /dev/null and b/docs/git/_img/pull-requests/set_default_branch.png differ diff --git a/docs/git/_img/pull-requests/vs_create_pr_from_hub.png b/docs/git/_img/pull-requests/vs_create_pr_from_hub.png new file mode 100644 index 00000000000..6e9133a885e Binary files /dev/null and b/docs/git/_img/pull-requests/vs_create_pr_from_hub.png differ diff --git a/docs/git/_img/rebase/AfterConflictFreeRebase.png b/docs/git/_img/rebase/AfterConflictFreeRebase.png new file mode 100644 index 00000000000..9f85c6f6eb9 Binary files /dev/null and b/docs/git/_img/rebase/AfterConflictFreeRebase.png differ diff --git a/docs/git/_img/rebase/AfterConflictRebase.png b/docs/git/_img/rebase/AfterConflictRebase.png new file mode 100644 index 00000000000..9385902a7b0 Binary files /dev/null and b/docs/git/_img/rebase/AfterConflictRebase.png differ diff --git a/docs/git/_img/rebase/AfterFetch1.png b/docs/git/_img/rebase/AfterFetch1.png new file mode 100644 index 00000000000..9cf7be55b54 Binary files /dev/null and b/docs/git/_img/rebase/AfterFetch1.png differ diff --git a/docs/git/_img/rebase/AfterFetch2.png b/docs/git/_img/rebase/AfterFetch2.png new file mode 100644 index 00000000000..5f016f9db7c Binary files /dev/null and b/docs/git/_img/rebase/AfterFetch2.png differ diff --git a/docs/git/_img/rebase/AfterFetchWithConflict.png b/docs/git/_img/rebase/AfterFetchWithConflict.png new file mode 100644 index 00000000000..3adc39f32e3 Binary files /dev/null and b/docs/git/_img/rebase/AfterFetchWithConflict.png differ diff --git a/docs/git/_img/rebase/CheckoutMaster.png b/docs/git/_img/rebase/CheckoutMaster.png new file mode 100644 index 00000000000..c47998bb637 Binary files /dev/null and b/docs/git/_img/rebase/CheckoutMaster.png differ diff --git a/docs/git/_img/rebase/CheckoutSourceBranch.png b/docs/git/_img/rebase/CheckoutSourceBranch.png new file mode 100644 index 00000000000..8b9a3419115 Binary files /dev/null and b/docs/git/_img/rebase/CheckoutSourceBranch.png differ diff --git a/docs/git/_img/rebase/ClickRebase.png b/docs/git/_img/rebase/ClickRebase.png new file mode 100644 index 00000000000..118130fb647 Binary files /dev/null and b/docs/git/_img/rebase/ClickRebase.png differ diff --git a/docs/git/_img/rebase/ContinueRebase.png b/docs/git/_img/rebase/ContinueRebase.png new file mode 100644 index 00000000000..f3d577fae36 Binary files /dev/null and b/docs/git/_img/rebase/ContinueRebase.png differ diff --git a/docs/git/_img/rebase/Fetch.png b/docs/git/_img/rebase/Fetch.png new file mode 100644 index 00000000000..ee0b2d71cec Binary files /dev/null and b/docs/git/_img/rebase/Fetch.png differ diff --git a/docs/git/_img/rebase/MergeTool.png b/docs/git/_img/rebase/MergeTool.png new file mode 100644 index 00000000000..0fa17432e2d Binary files /dev/null and b/docs/git/_img/rebase/MergeTool.png differ diff --git a/docs/git/_img/rebase/Pull.png b/docs/git/_img/rebase/Pull.png new file mode 100644 index 00000000000..2bf163f253c Binary files /dev/null and b/docs/git/_img/rebase/Pull.png differ diff --git a/docs/git/_img/rebase/RebaseInProgressConflict.png b/docs/git/_img/rebase/RebaseInProgressConflict.png new file mode 100644 index 00000000000..4dc1b10d3e1 Binary files /dev/null and b/docs/git/_img/rebase/RebaseInProgressConflict.png differ diff --git a/docs/git/_img/rebase/ResolveConflictsPage.png b/docs/git/_img/rebase/ResolveConflictsPage.png new file mode 100644 index 00000000000..ae9c49bb6fc Binary files /dev/null and b/docs/git/_img/rebase/ResolveConflictsPage.png differ diff --git a/docs/git/_img/rebase/StaleTopicBranch1.png b/docs/git/_img/rebase/StaleTopicBranch1.png new file mode 100644 index 00000000000..12c3c988ee9 Binary files /dev/null and b/docs/git/_img/rebase/StaleTopicBranch1.png differ diff --git a/docs/git/_img/rebase/StaleTopicBranch2.png b/docs/git/_img/rebase/StaleTopicBranch2.png new file mode 100644 index 00000000000..a3a7852a8f8 Binary files /dev/null and b/docs/git/_img/rebase/StaleTopicBranch2.png differ diff --git a/docs/git/_img/rebase/StartRebase.png b/docs/git/_img/rebase/StartRebase.png new file mode 100644 index 00000000000..073ab9a3264 Binary files /dev/null and b/docs/git/_img/rebase/StartRebase.png differ diff --git a/docs/git/_img/regular_branch_merge.png b/docs/git/_img/regular_branch_merge.png new file mode 100644 index 00000000000..7b153d5bd14 Binary files /dev/null and b/docs/git/_img/regular_branch_merge.png differ diff --git a/docs/git/_img/repo-mgmt/clone-git-repo.png b/docs/git/_img/repo-mgmt/clone-git-repo.png new file mode 100644 index 00000000000..5c74191a4a6 Binary files /dev/null and b/docs/git/_img/repo-mgmt/clone-git-repo.png differ diff --git a/docs/git/_img/repo-mgmt/commit-push.png b/docs/git/_img/repo-mgmt/commit-push.png new file mode 100644 index 00000000000..09f9e5aec57 Binary files /dev/null and b/docs/git/_img/repo-mgmt/commit-push.png differ diff --git a/docs/git/_img/repo-mgmt/create-a-new-repository.png b/docs/git/_img/repo-mgmt/create-a-new-repository.png new file mode 100644 index 00000000000..5beb8edc7fd Binary files /dev/null and b/docs/git/_img/repo-mgmt/create-a-new-repository.png differ diff --git a/docs/git/_img/repo-mgmt/create-vsts-repo.png b/docs/git/_img/repo-mgmt/create-vsts-repo.png new file mode 100644 index 00000000000..53e963a100a Binary files /dev/null and b/docs/git/_img/repo-mgmt/create-vsts-repo.png differ diff --git a/docs/git/_img/repo-mgmt/readme-changed-file.png b/docs/git/_img/repo-mgmt/readme-changed-file.png new file mode 100644 index 00000000000..84f887d6cf6 Binary files /dev/null and b/docs/git/_img/repo-mgmt/readme-changed-file.png differ diff --git a/docs/git/_img/repo-mgmt/remove-repo.png b/docs/git/_img/repo-mgmt/remove-repo.png new file mode 100644 index 00000000000..3e59e06b725 Binary files /dev/null and b/docs/git/_img/repo-mgmt/remove-repo.png differ diff --git a/docs/git/_img/repo-mgmt/rename-repo-2107.png b/docs/git/_img/repo-mgmt/rename-repo-2107.png new file mode 100644 index 00000000000..d0175dedf19 Binary files /dev/null and b/docs/git/_img/repo-mgmt/rename-repo-2107.png differ diff --git a/docs/git/_img/repo-mgmt/select-vsts-project.png b/docs/git/_img/repo-mgmt/select-vsts-project.png new file mode 100644 index 00000000000..123f77b45b2 Binary files /dev/null and b/docs/git/_img/repo-mgmt/select-vsts-project.png differ diff --git a/docs/git/_img/repo-mgmt/settings-gear-icon.png b/docs/git/_img/repo-mgmt/settings-gear-icon.png new file mode 100644 index 00000000000..48c9391934a Binary files /dev/null and b/docs/git/_img/repo-mgmt/settings-gear-icon.png differ diff --git a/docs/git/_img/repo-rename/AdminVC.png b/docs/git/_img/repo-rename/AdminVC.png new file mode 100644 index 00000000000..3d8ad8e8914 Binary files /dev/null and b/docs/git/_img/repo-rename/AdminVC.png differ diff --git a/docs/git/_img/repo-rename/CloneURL.png b/docs/git/_img/repo-rename/CloneURL.png new file mode 100644 index 00000000000..1100e207203 Binary files /dev/null and b/docs/git/_img/repo-rename/CloneURL.png differ diff --git a/docs/git/_img/repo-rename/EditRepoSettings.png b/docs/git/_img/repo-rename/EditRepoSettings.png new file mode 100644 index 00000000000..e77eda63f25 Binary files /dev/null and b/docs/git/_img/repo-rename/EditRepoSettings.png differ diff --git a/docs/git/_img/repo-rename/ProjectSettings.png b/docs/git/_img/repo-rename/ProjectSettings.png new file mode 100644 index 00000000000..e6e7eea69b1 Binary files /dev/null and b/docs/git/_img/repo-rename/ProjectSettings.png differ diff --git a/docs/git/_img/repo-rename/RefreshTeamExplorer.png b/docs/git/_img/repo-rename/RefreshTeamExplorer.png new file mode 100644 index 00000000000..c420368bc61 Binary files /dev/null and b/docs/git/_img/repo-rename/RefreshTeamExplorer.png differ diff --git a/docs/git/_img/repo-rename/RepoConnect.png b/docs/git/_img/repo-rename/RepoConnect.png new file mode 100644 index 00000000000..1590823c86a Binary files /dev/null and b/docs/git/_img/repo-rename/RepoConnect.png differ diff --git a/docs/git/_img/repo-rename/RepoSettings.png b/docs/git/_img/repo-rename/RepoSettings.png new file mode 100644 index 00000000000..6ee5a4683d8 Binary files /dev/null and b/docs/git/_img/repo-rename/RepoSettings.png differ diff --git a/docs/git/_img/repo-rename/Result.png b/docs/git/_img/repo-rename/Result.png new file mode 100644 index 00000000000..3b3376fc27a Binary files /dev/null and b/docs/git/_img/repo-rename/Result.png differ diff --git a/docs/git/_img/repo-rename/team-project-git-tabs.png b/docs/git/_img/repo-rename/team-project-git-tabs.png new file mode 100644 index 00000000000..c399a6f2dc8 Binary files /dev/null and b/docs/git/_img/repo-rename/team-project-git-tabs.png differ diff --git a/docs/git/_img/share-your-code-in-git-cmdline/clone_url.png b/docs/git/_img/share-your-code-in-git-cmdline/clone_url.png new file mode 100644 index 00000000000..b81f762d19a Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-cmdline/clone_url.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/add-to-git-index.png b/docs/git/_img/share-your-code-in-git-eclipse/add-to-git-index.png new file mode 100644 index 00000000000..7e4e2d1fdcf Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/add-to-git-index.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/add_team_explorer_to_eclipse.png b/docs/git/_img/share-your-code-in-git-eclipse/add_team_explorer_to_eclipse.png new file mode 100644 index 00000000000..3aeefc5029e Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/add_team_explorer_to_eclipse.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/add_team_services_server.png b/docs/git/_img/share-your-code-in-git-eclipse/add_team_services_server.png new file mode 100644 index 00000000000..21c44a7b977 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/add_team_services_server.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/add_team_services_url_to_tee.png b/docs/git/_img/share-your-code-in-git-eclipse/add_team_services_url_to_tee.png new file mode 100644 index 00000000000..31fc23deece Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/add_team_services_url_to_tee.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/choose_git_create_repo.png b/docs/git/_img/share-your-code-in-git-eclipse/choose_git_create_repo.png new file mode 100644 index 00000000000..a3b9c8ef64a Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/choose_git_create_repo.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/clone-git-repository.png b/docs/git/_img/share-your-code-in-git-eclipse/clone-git-repository.png new file mode 100644 index 00000000000..bb6348b3d08 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/clone-git-repository.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/clone-repo-dialog.png b/docs/git/_img/share-your-code-in-git-eclipse/clone-repo-dialog.png new file mode 100644 index 00000000000..459cbe87998 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/clone-repo-dialog.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/clone_repo_import_tee.png b/docs/git/_img/share-your-code-in-git-eclipse/clone_repo_import_tee.png new file mode 100644 index 00000000000..c435853daab Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/clone_repo_import_tee.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/cloned-repository.png b/docs/git/_img/share-your-code-in-git-eclipse/cloned-repository.png new file mode 100644 index 00000000000..aa6bc371316 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/cloned-repository.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/code-view.png b/docs/git/_img/share-your-code-in-git-eclipse/code-view.png new file mode 100644 index 00000000000..d30af71fda4 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/code-view.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/commit-and-push.jpg b/docs/git/_img/share-your-code-in-git-eclipse/commit-and-push.jpg new file mode 100644 index 00000000000..574ce43f2fc Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/commit-and-push.jpg differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/commit_files_in_eclipse.png b/docs/git/_img/share-your-code-in-git-eclipse/commit_files_in_eclipse.png new file mode 100644 index 00000000000..644b7bf37f2 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/commit_files_in_eclipse.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/configure-git-repository.png b/docs/git/_img/share-your-code-in-git-eclipse/configure-git-repository.png new file mode 100644 index 00000000000..964500eb775 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/configure-git-repository.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/connect_to_project_tee.png b/docs/git/_img/share-your-code-in-git-eclipse/connect_to_project_tee.png new file mode 100644 index 00000000000..b956eef3204 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/connect_to_project_tee.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/connect_to_vsts_from_tee.png b/docs/git/_img/share-your-code-in-git-eclipse/connect_to_vsts_from_tee.png new file mode 100644 index 00000000000..a0a9c1188e5 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/connect_to_vsts_from_tee.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/eclipse_create_repo.png b/docs/git/_img/share-your-code-in-git-eclipse/eclipse_create_repo.png new file mode 100644 index 00000000000..c489cb670e3 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/eclipse_create_repo.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/eclispe_configure_git_repo.png b/docs/git/_img/share-your-code-in-git-eclipse/eclispe_configure_git_repo.png new file mode 100644 index 00000000000..204c4b868be Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/eclispe_configure_git_repo.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/empty-repository.png b/docs/git/_img/share-your-code-in-git-eclipse/empty-repository.png new file mode 100644 index 00000000000..427d6b28f6c Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/empty-repository.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/git-views-selected.png b/docs/git/_img/share-your-code-in-git-eclipse/git-views-selected.png new file mode 100644 index 00000000000..2b76684db15 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/git-views-selected.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/local-destination.png b/docs/git/_img/share-your-code-in-git-eclipse/local-destination.png new file mode 100644 index 00000000000..b1e50a6da83 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/local-destination.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/push_commits_to_team_services.png b/docs/git/_img/share-your-code-in-git-eclipse/push_commits_to_team_services.png new file mode 100644 index 00000000000..a2d67355644 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/push_commits_to_team_services.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/set_upstream_tracking_info_git.png b/docs/git/_img/share-your-code-in-git-eclipse/set_upstream_tracking_info_git.png new file mode 100644 index 00000000000..66345b6c0f1 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/set_upstream_tracking_info_git.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/share-project-git.png b/docs/git/_img/share-your-code-in-git-eclipse/share-project-git.png new file mode 100644 index 00000000000..74f3b68c1a6 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/share-project-git.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/show-git-views.png b/docs/git/_img/share-your-code-in-git-eclipse/show-git-views.png new file mode 100644 index 00000000000..bd8b65e66fb Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/show-git-views.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/tee_copy_clone_url.png b/docs/git/_img/share-your-code-in-git-eclipse/tee_copy_clone_url.png new file mode 100644 index 00000000000..e7eacd0ffbe Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/tee_copy_clone_url.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/tee_existing_team_project.png b/docs/git/_img/share-your-code-in-git-eclipse/tee_existing_team_project.png new file mode 100644 index 00000000000..2a2b1f5a1c8 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/tee_existing_team_project.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/tee_git_repositories.png b/docs/git/_img/share-your-code-in-git-eclipse/tee_git_repositories.png new file mode 100644 index 00000000000..0f34a5114bd Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/tee_git_repositories.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/tee_import_repo.png b/docs/git/_img/share-your-code-in-git-eclipse/tee_import_repo.png new file mode 100644 index 00000000000..286d939fec3 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/tee_import_repo.png differ diff --git a/docs/git/_img/share-your-code-in-git-eclipse/tee_select_project.png b/docs/git/_img/share-your-code-in-git-eclipse/tee_select_project.png new file mode 100644 index 00000000000..24ae3aa122b Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-eclipse/tee_select_project.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC682931.png b/docs/git/_img/share-your-code-in-git-vs/IC682931.png new file mode 100644 index 00000000000..2b45daa0d07 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC682931.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC682939.png b/docs/git/_img/share-your-code-in-git-vs/IC682939.png new file mode 100644 index 00000000000..280d7aff964 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC682939.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC682940.png b/docs/git/_img/share-your-code-in-git-vs/IC682940.png new file mode 100644 index 00000000000..e9c955c0ae5 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC682940.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC682942.png b/docs/git/_img/share-your-code-in-git-vs/IC682942.png new file mode 100644 index 00000000000..538cc3b377c Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC682942.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC682943.png b/docs/git/_img/share-your-code-in-git-vs/IC682943.png new file mode 100644 index 00000000000..8e6a4d9957b Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC682943.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC682975.png b/docs/git/_img/share-your-code-in-git-vs/IC682975.png new file mode 100644 index 00000000000..c1e940507b7 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC682975.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC682976.png b/docs/git/_img/share-your-code-in-git-vs/IC682976.png new file mode 100644 index 00000000000..ac5a47be3bb Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC682976.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC682977.png b/docs/git/_img/share-your-code-in-git-vs/IC682977.png new file mode 100644 index 00000000000..60cdcfaaa6d Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC682977.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC683030.png b/docs/git/_img/share-your-code-in-git-vs/IC683030.png new file mode 100644 index 00000000000..72cb00547c8 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC683030.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC683031.png b/docs/git/_img/share-your-code-in-git-vs/IC683031.png new file mode 100644 index 00000000000..9eef4ef06ca Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC683031.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC683032.png b/docs/git/_img/share-your-code-in-git-vs/IC683032.png new file mode 100644 index 00000000000..3fa7a6e954d Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC683032.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC684063.png b/docs/git/_img/share-your-code-in-git-vs/IC684063.png new file mode 100644 index 00000000000..cd4b46d4e90 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC684063.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC685270.png b/docs/git/_img/share-your-code-in-git-vs/IC685270.png new file mode 100644 index 00000000000..e8d6ec8ff26 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC685270.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC685291.png b/docs/git/_img/share-your-code-in-git-vs/IC685291.png new file mode 100644 index 00000000000..3fc978fee2d Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC685291.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/IC685315.png b/docs/git/_img/share-your-code-in-git-vs/IC685315.png new file mode 100644 index 00000000000..003d6111627 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/IC685315.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/add_src_control_status_bar.png b/docs/git/_img/share-your-code-in-git-vs/add_src_control_status_bar.png new file mode 100644 index 00000000000..6d2fb7bdcb9 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/add_src_control_status_bar.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/addcodetosource.gif b/docs/git/_img/share-your-code-in-git-vs/addcodetosource.gif new file mode 100644 index 00000000000..246936f7db3 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/addcodetosource.gif differ diff --git a/docs/git/_img/share-your-code-in-git-vs/confirm-git-settings-from-changes-page.png b/docs/git/_img/share-your-code-in-git-vs/confirm-git-settings-from-changes-page.png new file mode 100644 index 00000000000..e2f04fcbfda Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/confirm-git-settings-from-changes-page.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/git-initial-settings-with-default-values.png b/docs/git/_img/share-your-code-in-git-vs/git-initial-settings-with-default-values.png new file mode 100644 index 00000000000..4913f616008 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/git-initial-settings-with-default-values.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/newprojectvs.png b/docs/git/_img/share-your-code-in-git-vs/newprojectvs.png new file mode 100644 index 00000000000..de7e1735b6e Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/newprojectvs.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/publish_status_bar.png b/docs/git/_img/share-your-code-in-git-vs/publish_status_bar.png new file mode 100644 index 00000000000..7111921e922 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/publish_status_bar.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/team-explorer-git-changes-add-app.png b/docs/git/_img/share-your-code-in-git-vs/team-explorer-git-changes-add-app.png new file mode 100644 index 00000000000..2dc61cd9638 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/team-explorer-git-changes-add-app.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/team-explorer-git-new-solution.png b/docs/git/_img/share-your-code-in-git-vs/team-explorer-git-new-solution.png new file mode 100644 index 00000000000..53133e1bf46 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/team-explorer-git-new-solution.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs-status-bar.png b/docs/git/_img/share-your-code-in-git-vs/vs-status-bar.png new file mode 100644 index 00000000000..069de926be3 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs-status-bar.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_branch_picker.png b/docs/git/_img/share-your-code-in-git-vs/vs_branch_picker.png new file mode 100644 index 00000000000..1014e25a3b7 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_branch_picker.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_commit_success_te.png b/docs/git/_img/share-your-code-in-git-vs/vs_commit_success_te.png new file mode 100644 index 00000000000..6ce7d27bd7d Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_commit_success_te.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_commit_te.png b/docs/git/_img/share-your-code-in-git-vs/vs_commit_te.png new file mode 100644 index 00000000000..2fbe7e2d76c Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_commit_te.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_compare_with_previous.png b/docs/git/_img/share-your-code-in-git-vs/vs_compare_with_previous.png new file mode 100644 index 00000000000..9afd8ee6901 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_compare_with_previous.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_current_repo.png b/docs/git/_img/share-your-code-in-git-vs/vs_current_repo.png new file mode 100644 index 00000000000..e7b4c966bef Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_current_repo.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_fetch_commits.png b/docs/git/_img/share-your-code-in-git-vs/vs_fetch_commits.png new file mode 100644 index 00000000000..3e382333138 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_fetch_commits.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_linked_work_items.png b/docs/git/_img/share-your-code-in-git-vs/vs_linked_work_items.png new file mode 100644 index 00000000000..8a9c6079bf5 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_linked_work_items.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_pending_changes.png b/docs/git/_img/share-your-code-in-git-vs/vs_pending_changes.png new file mode 100644 index 00000000000..97aea66ad0a Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_pending_changes.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_pull_commits.png b/docs/git/_img/share-your-code-in-git-vs/vs_pull_commits.png new file mode 100644 index 00000000000..54b5612b6c8 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_pull_commits.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_pull_complete.png b/docs/git/_img/share-your-code-in-git-vs/vs_pull_complete.png new file mode 100644 index 00000000000..c0f3aebcf31 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_pull_complete.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_sync_commits.png b/docs/git/_img/share-your-code-in-git-vs/vs_sync_commits.png new file mode 100644 index 00000000000..d7636f882bd Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_sync_commits.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vs_unpublished_changes.png b/docs/git/_img/share-your-code-in-git-vs/vs_unpublished_changes.png new file mode 100644 index 00000000000..fa7a60d543c Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vs_unpublished_changes.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vspush.png b/docs/git/_img/share-your-code-in-git-vs/vspush.png new file mode 100644 index 00000000000..a7c3ce6cefc Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vspush.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vsts_get_started_te.png b/docs/git/_img/share-your-code-in-git-vs/vsts_get_started_te.png new file mode 100644 index 00000000000..8cb3a4b860b Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vsts_get_started_te.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vsts_publish_repo.png b/docs/git/_img/share-your-code-in-git-vs/vsts_publish_repo.png new file mode 100644 index 00000000000..ebc2e167c92 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vsts_publish_repo.png differ diff --git a/docs/git/_img/share-your-code-in-git-vs/vsts_view_on_web.png b/docs/git/_img/share-your-code-in-git-vs/vsts_view_on_web.png new file mode 100644 index 00000000000..8640a6ab96e Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-vs/vsts_view_on_web.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/commit.png b/docs/git/_img/share-your-code-in-git-xcode/commit.png new file mode 100644 index 00000000000..b45b1678919 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/commit.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/move-code.png b/docs/git/_img/share-your-code-in-git-xcode/move-code.png new file mode 100644 index 00000000000..99def5b7cff Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/move-code.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/newrepo.png b/docs/git/_img/share-your-code-in-git-xcode/newrepo.png new file mode 100644 index 00000000000..d37d2e55da3 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/newrepo.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/newrepocopycloneurl.png b/docs/git/_img/share-your-code-in-git-xcode/newrepocopycloneurl.png new file mode 100644 index 00000000000..955b48fd5a8 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/newrepocopycloneurl.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/push.png b/docs/git/_img/share-your-code-in-git-xcode/push.png new file mode 100644 index 00000000000..6ee323ed97b Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/push.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/vsts_drop_down_arrow.png b/docs/git/_img/share-your-code-in-git-xcode/vsts_drop_down_arrow.png new file mode 100644 index 00000000000..d3cf7bc1c0f Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/vsts_drop_down_arrow.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/xcodeaddremote2.png b/docs/git/_img/share-your-code-in-git-xcode/xcodeaddremote2.png new file mode 100644 index 00000000000..f8ee7b061a7 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/xcodeaddremote2.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/xcodeaddremotes.png b/docs/git/_img/share-your-code-in-git-xcode/xcodeaddremotes.png new file mode 100644 index 00000000000..c8a76243b16 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/xcodeaddremotes.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/xcodeauthentication.png b/docs/git/_img/share-your-code-in-git-xcode/xcodeauthentication.png new file mode 100644 index 00000000000..c57c7ca0c7d Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/xcodeauthentication.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/xcodeconfigureproject.png b/docs/git/_img/share-your-code-in-git-xcode/xcodeconfigureproject.png new file mode 100644 index 00000000000..9fbbaaa9461 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/xcodeconfigureproject.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/xcodecreateworkingcopy.png b/docs/git/_img/share-your-code-in-git-xcode/xcodecreateworkingcopy.png new file mode 100644 index 00000000000..cbe93d4b329 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/xcodecreateworkingcopy.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/xcodenewproject.png b/docs/git/_img/share-your-code-in-git-xcode/xcodenewproject.png new file mode 100644 index 00000000000..e9a778554cf Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/xcodenewproject.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/xcodeplusicon.png b/docs/git/_img/share-your-code-in-git-xcode/xcodeplusicon.png new file mode 100644 index 00000000000..3527adac912 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/xcodeplusicon.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/xcodepushtomaster.png b/docs/git/_img/share-your-code-in-git-xcode/xcodepushtomaster.png new file mode 100644 index 00000000000..78c26dd7e15 Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/xcodepushtomaster.png differ diff --git a/docs/git/_img/share-your-code-in-git-xcode/xcodeworkingcopyselect.png b/docs/git/_img/share-your-code-in-git-xcode/xcodeworkingcopyselect.png new file mode 100644 index 00000000000..cec640ff50f Binary files /dev/null and b/docs/git/_img/share-your-code-in-git-xcode/xcodeworkingcopyselect.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-eclipse/checkin-changes-tfvc.png b/docs/git/_img/share-your-code-in-tfvc-eclipse/checkin-changes-tfvc.png new file mode 100644 index 00000000000..e8a2b41b189 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-eclipse/checkin-changes-tfvc.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-eclipse/share-project-tfvc.png b/docs/git/_img/share-your-code-in-tfvc-eclipse/share-project-tfvc.png new file mode 100644 index 00000000000..1ddcd1a4831 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-eclipse/share-project-tfvc.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/ConfigureWorkspace.png b/docs/git/_img/share-your-code-in-tfvc-vs/ConfigureWorkspace.png new file mode 100644 index 00000000000..c5ef9648d0b Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/ConfigureWorkspace.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682140.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682140.png new file mode 100644 index 00000000000..30cdc26bbef Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682140.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682155.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682155.png new file mode 100644 index 00000000000..1893144fbc5 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682155.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682157.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682157.png new file mode 100644 index 00000000000..c2308582a47 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682157.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682159.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682159.png new file mode 100644 index 00000000000..21355c5311b Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682159.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682161.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682161.png new file mode 100644 index 00000000000..b1f40ec061c Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682161.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682163.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682163.png new file mode 100644 index 00000000000..a5a7b491066 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682163.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682953.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682953.png new file mode 100644 index 00000000000..f72f35ec31b Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682953.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682954.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682954.png new file mode 100644 index 00000000000..34ac3e5ba0d Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682954.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682955.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682955.png new file mode 100644 index 00000000000..82714d98bc5 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682955.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682956.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682956.png new file mode 100644 index 00000000000..5bbcbc61a05 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682956.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC682957.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC682957.png new file mode 100644 index 00000000000..8683008ca7c Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC682957.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC685248.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC685248.png new file mode 100644 index 00000000000..15ab2064ae6 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC685248.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC685249.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC685249.png new file mode 100644 index 00000000000..6f7a6b9c2ec Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC685249.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC689415.jpg b/docs/git/_img/share-your-code-in-tfvc-vs/IC689415.jpg new file mode 100644 index 00000000000..16cf3c50498 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC689415.jpg differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/IC689416.png b/docs/git/_img/share-your-code-in-tfvc-vs/IC689416.png new file mode 100644 index 00000000000..25b6e39d77c Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/IC689416.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/MapAndGet.png b/docs/git/_img/share-your-code-in-tfvc-vs/MapAndGet.png new file mode 100644 index 00000000000..5601d6702d8 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/MapAndGet.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/MapWorkspaceSuccess.png b/docs/git/_img/share-your-code-in-tfvc-vs/MapWorkspaceSuccess.png new file mode 100644 index 00000000000..cdc1a8d326d Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/MapWorkspaceSuccess.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/OpenSCE_ManageWorkspaces.png b/docs/git/_img/share-your-code-in-tfvc-vs/OpenSCE_ManageWorkspaces.png new file mode 100644 index 00000000000..0da5df21061 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/OpenSCE_ManageWorkspaces.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/open-solution-from-team-explorer-home.png b/docs/git/_img/share-your-code-in-tfvc-vs/open-solution-from-team-explorer-home.png new file mode 100644 index 00000000000..4e586760daf Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/open-solution-from-team-explorer-home.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/open-workspace-folder-from-source-control-explorer.png b/docs/git/_img/share-your-code-in-tfvc-vs/open-workspace-folder-from-source-control-explorer.png new file mode 100644 index 00000000000..9efd4a1e48e Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/open-workspace-folder-from-source-control-explorer.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-vs/team-explorer-new-solution.png b/docs/git/_img/share-your-code-in-tfvc-vs/team-explorer-new-solution.png new file mode 100644 index 00000000000..19eb4a1020a Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-vs/team-explorer-new-solution.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-xcode/git-tf-help-checkin.png b/docs/git/_img/share-your-code-in-tfvc-xcode/git-tf-help-checkin.png new file mode 100644 index 00000000000..8d462ee0880 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-xcode/git-tf-help-checkin.png differ diff --git a/docs/git/_img/share-your-code-in-tfvc-xcode/git-tf-help.png b/docs/git/_img/share-your-code-in-tfvc-xcode/git-tf-help.png new file mode 100644 index 00000000000..088dcfaffa3 Binary files /dev/null and b/docs/git/_img/share-your-code-in-tfvc-xcode/git-tf-help.png differ diff --git a/docs/git/_img/squash_merge.png b/docs/git/_img/squash_merge.png new file mode 100644 index 00000000000..18fca909c19 Binary files /dev/null and b/docs/git/_img/squash_merge.png differ diff --git a/docs/git/_img/squash_merge_in_pr.png b/docs/git/_img/squash_merge_in_pr.png new file mode 100644 index 00000000000..752da35b08b Binary files /dev/null and b/docs/git/_img/squash_merge_in_pr.png differ diff --git a/docs/git/_img/ssh_add_public_key.gif b/docs/git/_img/ssh_add_public_key.gif new file mode 100644 index 00000000000..54e4ac66cc4 Binary files /dev/null and b/docs/git/_img/ssh_add_public_key.gif differ diff --git a/docs/git/_img/use-ssh-authentication/ssh_accessing_security_key.png b/docs/git/_img/use-ssh-authentication/ssh_accessing_security_key.png new file mode 100644 index 00000000000..6e956da3ce0 Binary files /dev/null and b/docs/git/_img/use-ssh-authentication/ssh_accessing_security_key.png differ diff --git a/docs/git/_img/use-ssh-authentication/ssh_clone_URL.png b/docs/git/_img/use-ssh-authentication/ssh_clone_URL.png new file mode 100644 index 00000000000..7caca9e32f9 Binary files /dev/null and b/docs/git/_img/use-ssh-authentication/ssh_clone_URL.png differ diff --git a/docs/git/_img/use-ssh-authentication/ssh_key_input.png b/docs/git/_img/use-ssh-authentication/ssh_key_input.png new file mode 100644 index 00000000000..051e96036ca Binary files /dev/null and b/docs/git/_img/use-ssh-authentication/ssh_key_input.png differ diff --git a/docs/git/_img/use-ssh-authentication/ssh_profile_access.png b/docs/git/_img/use-ssh-authentication/ssh_profile_access.png new file mode 100644 index 00000000000..004ce6c16a8 Binary files /dev/null and b/docs/git/_img/use-ssh-authentication/ssh_profile_access.png differ diff --git a/docs/git/_shared/_img/add-personal-access-token.png b/docs/git/_shared/_img/add-personal-access-token.png new file mode 100644 index 00000000000..92613282351 Binary files /dev/null and b/docs/git/_shared/_img/add-personal-access-token.png differ diff --git a/docs/git/_shared/_img/changesVSCommits.png b/docs/git/_shared/_img/changesVSCommits.png new file mode 100644 index 00000000000..77ec5700b5f Binary files /dev/null and b/docs/git/_shared/_img/changesVSCommits.png differ diff --git a/docs/git/_shared/_img/clone-url.png b/docs/git/_shared/_img/clone-url.png new file mode 100644 index 00000000000..a64567396ce Binary files /dev/null and b/docs/git/_shared/_img/clone-url.png differ diff --git a/docs/git/_shared/_img/cloneURL.png b/docs/git/_shared/_img/cloneURL.png new file mode 100644 index 00000000000..5c74191a4a6 Binary files /dev/null and b/docs/git/_shared/_img/cloneURL.png differ diff --git a/docs/git/_shared/_img/cloneVsRepo.png b/docs/git/_shared/_img/cloneVsRepo.png new file mode 100644 index 00000000000..d2ba4f475ba Binary files /dev/null and b/docs/git/_shared/_img/cloneVsRepo.png differ diff --git a/docs/git/_shared/_img/code-explorer.png b/docs/git/_shared/_img/code-explorer.png new file mode 100644 index 00000000000..20f283a9f1b Binary files /dev/null and b/docs/git/_shared/_img/code-explorer.png differ diff --git a/docs/git/_shared/_img/control-panel-launch-icon.png b/docs/git/_shared/_img/control-panel-launch-icon.png new file mode 100644 index 00000000000..5c83506d452 Binary files /dev/null and b/docs/git/_shared/_img/control-panel-launch-icon.png differ diff --git a/docs/git/_shared/_img/create-personal-access-token.png b/docs/git/_shared/_img/create-personal-access-token.png new file mode 100644 index 00000000000..3ef1ed5921c Binary files /dev/null and b/docs/git/_shared/_img/create-personal-access-token.png differ diff --git a/docs/git/_shared/_img/enable-alternate-credentials.png b/docs/git/_shared/_img/enable-alternate-credentials.png new file mode 100644 index 00000000000..5681d4b6e11 Binary files /dev/null and b/docs/git/_shared/_img/enable-alternate-credentials.png differ diff --git a/docs/git/_shared/_img/git-credentials.png b/docs/git/_shared/_img/git-credentials.png new file mode 100644 index 00000000000..d41af6e600a Binary files /dev/null and b/docs/git/_shared/_img/git-credentials.png differ diff --git a/docs/git/_shared/_img/manageConnections.png b/docs/git/_shared/_img/manageConnections.png new file mode 100644 index 00000000000..71766a3c797 Binary files /dev/null and b/docs/git/_shared/_img/manageConnections.png differ diff --git a/docs/git/_shared/_img/my-profile-team-services.png b/docs/git/_shared/_img/my-profile-team-services.png new file mode 100644 index 00000000000..15d56a0f4d3 Binary files /dev/null and b/docs/git/_shared/_img/my-profile-team-services.png differ diff --git a/docs/git/_shared/_img/my-profile-tfs.png b/docs/git/_shared/_img/my-profile-tfs.png new file mode 100644 index 00000000000..263c69a431f Binary files /dev/null and b/docs/git/_shared/_img/my-profile-tfs.png differ diff --git a/docs/git/_shared/_img/my-profile-updated.png b/docs/git/_shared/_img/my-profile-updated.png new file mode 100644 index 00000000000..a69c29122a2 Binary files /dev/null and b/docs/git/_shared/_img/my-profile-updated.png differ diff --git a/docs/git/_shared/_img/my-profile.png b/docs/git/_shared/_img/my-profile.png new file mode 100644 index 00000000000..01bbf48dd01 Binary files /dev/null and b/docs/git/_shared/_img/my-profile.png differ diff --git a/docs/git/_shared/_img/newVSBranch.png b/docs/git/_shared/_img/newVSBranch.png new file mode 100644 index 00000000000..7a258cfb275 Binary files /dev/null and b/docs/git/_shared/_img/newVSBranch.png differ diff --git a/docs/git/_shared/_img/newVsPull.png b/docs/git/_shared/_img/newVsPull.png new file mode 100644 index 00000000000..ce805583c9e Binary files /dev/null and b/docs/git/_shared/_img/newVsPull.png differ diff --git a/docs/git/_shared/_img/newVsPullRequest.png b/docs/git/_shared/_img/newVsPullRequest.png new file mode 100644 index 00000000000..f37bebb6c82 Binary files /dev/null and b/docs/git/_shared/_img/newVsPullRequest.png differ diff --git a/docs/git/_shared/_img/newVsPush.png b/docs/git/_shared/_img/newVsPush.png new file mode 100644 index 00000000000..158bf0cf3cc Binary files /dev/null and b/docs/git/_shared/_img/newVsPush.png differ diff --git a/docs/git/_shared/_img/revoke-personal-access-tokens.png b/docs/git/_shared/_img/revoke-personal-access-tokens.png new file mode 100644 index 00000000000..20a1ee603b4 Binary files /dev/null and b/docs/git/_shared/_img/revoke-personal-access-tokens.png differ diff --git a/docs/git/_shared/_img/select-personal-access-token-scopes.png b/docs/git/_shared/_img/select-personal-access-token-scopes.png new file mode 100644 index 00000000000..cbf4973740f Binary files /dev/null and b/docs/git/_shared/_img/select-personal-access-token-scopes.png differ diff --git a/docs/git/_shared/_img/setup-personal-access-token.png b/docs/git/_shared/_img/setup-personal-access-token.png new file mode 100644 index 00000000000..18c68056097 Binary files /dev/null and b/docs/git/_shared/_img/setup-personal-access-token.png differ diff --git a/docs/git/_shared/_img/share-project.png b/docs/git/_shared/_img/share-project.png new file mode 100644 index 00000000000..d1eeb1c649b Binary files /dev/null and b/docs/git/_shared/_img/share-project.png differ diff --git a/docs/git/_shared/_img/team-project-git-web-code-explorer-tab.png b/docs/git/_shared/_img/team-project-git-web-code-explorer-tab.png new file mode 100644 index 00000000000..bc40958d392 Binary files /dev/null and b/docs/git/_shared/_img/team-project-git-web-code-explorer-tab.png differ diff --git a/docs/git/_shared/_img/vs-rebasing.gif b/docs/git/_shared/_img/vs-rebasing.gif new file mode 100644 index 00000000000..696fc3bcb62 Binary files /dev/null and b/docs/git/_shared/_img/vs-rebasing.gif differ diff --git a/docs/git/_shared/_img/vs2017_connect_dialog.png b/docs/git/_shared/_img/vs2017_connect_dialog.png new file mode 100644 index 00000000000..170030361f3 Binary files /dev/null and b/docs/git/_shared/_img/vs2017_connect_dialog.png differ diff --git a/docs/git/_shared/_img/vs_update2_changes.png b/docs/git/_shared/_img/vs_update2_changes.png new file mode 100644 index 00000000000..568add31146 Binary files /dev/null and b/docs/git/_shared/_img/vs_update2_changes.png differ diff --git a/docs/git/_shared/_img/vstsCreatePullReq.png b/docs/git/_shared/_img/vstsCreatePullReq.png new file mode 100644 index 00000000000..9cdd281b8c6 Binary files /dev/null and b/docs/git/_shared/_img/vstsCreatePullReq.png differ diff --git a/docs/git/_shared/alternate-credentials.md b/docs/git/_shared/alternate-credentials.md new file mode 100644 index 00000000000..103b6f02715 --- /dev/null +++ b/docs/git/_shared/alternate-credentials.md @@ -0,0 +1,10 @@ +0. Sign in to your VSTS account (```http://[youraccount].visualstudio.com```). + +0. From your home page, open your profile. Go to your security details. + + ![Go to Team Services account home, open your profile, go to Security](./_img/my-profile-team-services.png) + +0. Enable alternate authentication credentials for this account. Then provide a secondary username and password. + + ![Enable alternate authentication credentials link on the user profile page](_img/enable-alternate-credentials.png) + diff --git a/docs/git/_shared/connect-eclipse-to-vso.md b/docs/git/_shared/connect-eclipse-to-vso.md new file mode 100644 index 00000000000..2301982d957 --- /dev/null +++ b/docs/git/_shared/connect-eclipse-to-vso.md @@ -0,0 +1,6 @@ + +Before you start: + +0. If you don't have a Team Services account, [create it first](../../accounts/create-account-msa-or-work-student.md). + +0. If you have not yet connected to a team project in your Team Services account, [do that now](../../connect/connect-team-projects.md). \ No newline at end of file diff --git a/docs/git/_shared/find-url.md b/docs/git/_shared/find-url.md new file mode 100644 index 00000000000..4c7230ff29e --- /dev/null +++ b/docs/git/_shared/find-url.md @@ -0,0 +1,19 @@ + +#### Q: Where can I find the URL for my Git repository? + +A: You'll find it in the code hub in your team project. + +1. Sign in to your VSTS account and browse to your team project or type the team project URL directly in your browser. + +* The URL will look like ```https://{your_account}.visualstudio.com/DefaultCollection/{your_team_project}``` + +* If you are not sure about your team project URL, [Sign in to your Visual Studio](http://go.microsoft.com/fwlink/?LinkID=309329) and select your account. + +2. Open the code hub from your you team project's home page. + + ![Team project home page, code explorer](_img/code-explorer.png) + +3. Select the the repository and click on the **clone** action to get the URL. + + ![Team project home page, code explorer, clone selected to show the URL](_img/clone-url.png) + diff --git a/docs/git/_shared/open-team-project-in-vs-qa.md b/docs/git/_shared/open-team-project-in-vs-qa.md new file mode 100644 index 00000000000..201f85cf9f6 --- /dev/null +++ b/docs/git/_shared/open-team-project-in-vs-qa.md @@ -0,0 +1,6 @@ + +#### Q: Why is my sign-in page different than when I sign in to Visual Studio? + +A: Your sign-in page depends on whether you used a Microsoft account or +work account with VSTS. So, sign in with the username and +password that you used with VSTS. diff --git a/docs/git/_shared/open-team-project-in-vs.md b/docs/git/_shared/open-team-project-in-vs.md new file mode 100644 index 00000000000..6ed714ee2cd --- /dev/null +++ b/docs/git/_shared/open-team-project-in-vs.md @@ -0,0 +1,15 @@ + +## Open your team project in Visual Studio + +0. Before you start, if you haven't already: + + * [Sign up and create your team project](../../accounts/create-account-msa-or-work-student.md). + * Install [Visual Studio 2013 or later](https://www.visualstudio.com/en-us/downloads). + +0. Go to your team project's page +(```http://{youraccount}.visualstudio.com/DefaultCollection/{yourteamproject}```) +and then open Visual Studio to connect to your team project. + + ![On your team project overview page, click Open in Visual Studio](../../_shared/_img/GoHomeOpenInVisualStudio.png) + +0. Sign in to VSTS from Visual Studio. \ No newline at end of file diff --git a/docs/git/_shared/personal-access-tokens.md b/docs/git/_shared/personal-access-tokens.md new file mode 100644 index 00000000000..4d6eca3f8b8 --- /dev/null +++ b/docs/git/_shared/personal-access-tokens.md @@ -0,0 +1,69 @@ +## Create personal access tokens to authenticate access + +0. Sign in to either your VSTS account (```https://{youraccount}.visualstudio.com```) +or your Team Foundation Server web portal (```https://{server}:8080/tfs/```). + +0. From your home page, open your profile. Go to your security details. + + **TFS 2017** + + Go to Team Services account home, open your profile, go to Security + + **Team Services** + + TFS home page, open your profile, go to Security + + +0. Create a personal access token. + + Add a personal access token + +0. Name your token. Select a lifespan for your token. + + If you're using VSTS, and you have more than one account, + you can also select the Team Services account where you want to use the token. + + Name your token, select a lifespan. If using VSTS, select an account for your token + +0. Select the [scopes](../../integrate/get-started/authentication/oauth.md#scopes) +that this token will authorize for **your specific tasks**. + + For example, to create a token to enable a [build and release agent](../../build-release/concepts/agents/agents.md) to authenticate to VSTS or TFS, + limit your token's scope to **Agent Pools (read, manage)**. + + + +0. When you're done, make sure to *copy the token*. You'll use this token as your password. + + Use token as the password for your git tools or apps + + **Note: Remember that this token is your identity and acts as you when it's used. + Keep your tokens secret and treat them like your password.** + + **Tip:** To keep your token more secure, use credential managers + so that you don't have to enter your credentials every time. + Here are some recommended credential managers: + + * Git: [Git Credential Manager for Mac OS X and Linux](https://github.com/Microsoft/Git-Credential-Manager-for-Mac-and-Linux) + or [Git Credential Manager for Windows](https://github.com/Microsoft/Git-Credential-Manager-for-Windows) + (Requires [Git for Windows](https://www.git-scm.com/download/win)) + * NuGet: [NuGet Credential Provider](/vsts/package/nuget/auth) + +## Revoke personal access tokens to remove access + +When you don't need your token anymore, just revoke it to remove access. + +0. From your home page, open your profile. Go to your security details. + + **Team Services** + + Go to Team Services account home page, open your profile, go to Security + + **TFS 2017** + + Go to TFS home page, open your profile, go to Security + + +0. Revoke access. + + Revoke a token or all tokens diff --git a/docs/git/_shared/qa-vs-launch-fail.md b/docs/git/_shared/qa-vs-launch-fail.md new file mode 100644 index 00000000000..52310afe1a5 --- /dev/null +++ b/docs/git/_shared/qa-vs-launch-fail.md @@ -0,0 +1,5 @@ + +####Q: Why doesn't Visual Studio launch when I click "Open in Visual Studio" on my team project page? + +A: This link requires [Visual Studio 2013](http://go.microsoft.com/fwlink/p/?LinkId=254509) +or later. It doesn't launch earlier versions of Visual Studio. \ No newline at end of file diff --git a/docs/git/_shared/steps-open-control-panel-team-project.md b/docs/git/_shared/steps-open-control-panel-team-project.md new file mode 100644 index 00000000000..c3fb192c279 --- /dev/null +++ b/docs/git/_shared/steps-open-control-panel-team-project.md @@ -0,0 +1,6 @@ + +0. Open a team project (on-premises ```http://{your_server}:8080/tfs/DefaultCollection/{your_project}``` or VSTS ```https://{your_account}.visualstudio.com/DefaultCollection/{your_project}```) in your web browser. + +0. Go to the control panel. + + ![Administer account](_img/control-panel-launch-icon.png) \ No newline at end of file diff --git a/docs/git/auth-overview.md b/docs/git/auth-overview.md new file mode 100644 index 00000000000..5f1bf085906 --- /dev/null +++ b/docs/git/auth-overview.md @@ -0,0 +1,72 @@ +--- +title: Authenticate with your Git repos | VSTS & TFS +description: Choose between HTTPS, SSH, personal access tokens, and alternate credentials to securely login to your VSTS/TFS Git repos. +ms.assetid: 138f12d0-e3fd-4fde-a727-1b39d45c05c4 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/26/2016 +--- + +# Authentication overview + +#### VSTS | TFS 2015 Update 3 & TFS 2017 + +Choose a method to securely login and access the code in your Team Services Git repo. +Use these credentials with Git on the command line or from any Git client that supports HTTPS or SSH authentication. +Limit the scope of access and revoke these credentials from the web when they are no longer needed. + +> Using Visual Studio? Team Explorer handles authentication with VSTS repos for you. + +## Authentication comparison + +| Authentication Type | When to use | Secure? | Ease of setup | Additional tooling required | +|---------------------|:-------------:|:------------:|:---------------------|-------------| +| Personal access tokens | When you need an easy to configure credential or need configurable access controls | Very secure (when using HTTPS) | Easy | Optional ([Git credential managers](set-up-credential-managers.md)) | +| SSH | When you already have SSH keys set up | Very secure | Intermediate | Windows users will need the SSH tools included with [Git for Windows](https://git-for-windows.github.io/) | +| Alternate credentials | When you can't use personal access tokens or SSH | Least secure | Easy | No | + +## Personal access tokens + +Personal access tokens let you create a password for use with the command line or other Git client without using your Team Services username and password directly. +An expiration date is set on these tokens when they are created and you can restrict the scope of the data they can access in VSTS. +Use personal access tokens to authenticate if you don't already have SSH keys set up on your system or if you need to restrict the permissions granted by the credential. + +![Animated GIF showing creation of PAT in VSTS](_img/pat_creation.gif) + +[Learn more about personal access tokens](../accounts/use-personal-access-tokens-to-authenticate.md) + +### Use credential managers to generate tokens + +[Git credential managers](set-up-credential-managers.md) are an optional tool that makes it easy to create personal access tokens when working with the Git and VSTS. +Normally you'd need to log into the VSTS web interface, generate a token, then use the token as your password when connecting to VSTS. + +Personal access tokens are generated on demand when you have the credential manager installed. +The credential manager creates the token in Team Services and saves it locally for use with the Git command line or other client. + +> Current versions of [Git for Windows](https://git-for-windows.github.io/) include the Git credential manager as an optional feature during installation. + +## SSH key authentication + +Key authentication with SSH works through a public and private key pair that you create on your computer. +You associate the public key with your username from the web. Team Services will encrypt the data sent to you with that key when you work with Git. +You decrypt the data on your computer with the private key, which is never shared or sent over the network. + +![Animated GIF showing adding of a SSH public key to VSTS](_img/ssh_add_public_key.gif) + +SSH is a great option if you've already got it set up on your system—just add a public key to Team Services and clone your repos using SSH. +If you don't have SSH set up on your computer, you should use personal access tokens and HTTPS instead-it's secure and easier to set up. + +Learn more about [setting up SSH with VSTS](use-ssh-keys-to-authenticate.md) + +## Alternate credentials + +> Use of alternate credentials is not recommended. + +Create an alternate user name and password to access your Git repository using alternate credentials. +Unlike personal access tokens, this login doesn't expire and can't be scoped to limit access to your Team Services data. +Use alternate credentials as a last resort when you can't use personal access tokens or SSH keys. + + + diff --git a/docs/git/branch-permissions-before-2017.md b/docs/git/branch-permissions-before-2017.md new file mode 100644 index 00000000000..61fb7306238 --- /dev/null +++ b/docs/git/branch-permissions-before-2017.md @@ -0,0 +1,55 @@ +--- +title: Branch permissions prior to TFS 2017 Update 1 +description: The previous list of Git branch permissions +ms.assetid: 7B4F74D5-953F-4A9D-8DD6-BB194E424135 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 12/1/2016 +--- + +# Git branch permissions prior to TFS 2017 Update 1 + +#### TFS 2015 & TFS 2017 RTM | [TFS 2017 RC1 and VSTS](branch-permissions.md) + +In TFS 2017 Update 1 (and VSTS), Git repository permissions have changed. +For those customers using previous versions of TFS, here are the old permissions. +Those using TFS 2017 Update 1 or VSTS should see the [latest list of permissions](branch-permissions.md). + + + + + + + + + + + + + + + + + + + + + + + + +
        PermissionDescription
        Administer + Users with this permission can set branch permissions for other users, delete the branch, and lock the branch. +
        Contribute + Users with this permission can push new commits to the branch. Users with this permission cannot rewrite the existing commits on the branch. + Users with this permission can lock the branch. +
        Exempt from policy enforcement + Users with this permission are exempt from the [branch policy](branch-policies.md) set for the branch. +
        Rewrite and destroy history (force push) + Can force push to a branch. + This permission is also required to delete a branch.

        + Users with this permission can modify the commit history of a branch. +
        + \ No newline at end of file diff --git a/docs/git/branch-permissions.md b/docs/git/branch-permissions.md new file mode 100644 index 00000000000..9ea0cf0b3ac --- /dev/null +++ b/docs/git/branch-permissions.md @@ -0,0 +1,101 @@ +--- +title: Set Git branch security and permissions | VSTS & TFS +description: Set permissions for Git branches in VSTS/TFS. +ms.assetid: 0dacda14-c251-4a89-8141-ae60a47dab52 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/23/2016 +--- + +# Set branch permissions + +###### Team Services + +## Overview + +Set up permissions to control who can read and update the code in a branch on your Git repo. +You can set permissions for individual users and groups, and inherit and override permissions as needed from your [repo permissions](../security/set-git-tfvc-repository-permissions.md#git-repository). + +## Use the branches view to configure security + +0. Open the **Branches** view while viewing your repo on the web. + + ![Access the branches view on the web](_img/branches/branches_nav.png) + +0. Locate the branch on the **Branches** view. You can search for your branch using the **Search all branches** box in the upper right. + +0. Open the context menu by selecting the **...** icon next to the branch name. Select **Branch security** from the menu. + + ![Open the branch permissions page from the branches context menu](_img/branches/branches_context_menu_permissions.png) + +## Add users or groups + +> Avoid trouble: You can only add permissions for users and groups already in your Team Project. [Add new users and groups to your Team Project](../accounts/add-users.md) before setting branch permissions. + +Add users or groups to your branch permissions by selecting **Add**, then choosing **Add user** or **Add VSTS group**. +Enter the display name or their Microsoft Account, then select **Save Changes**. + +## Remove users or groups + +Remove permissions for a user or group by selecting the user or VSTS group, then selecting **Remove**. +The user or group will still exist in your Team Project and this change will not affect other permissions for the user or group. + +![Remove branch permissions for a user in VSTS or TFS](_img/branches/remove_permissions.png) + +## Set permissions + +Control branch permission settings from the branch permission view. Users and groups with permissions set at the repo level will +[inherit those permissions](../security/about-permissions.md#inheritance) by default. + +> [!NOTE] +> These permissions have changed in TFS 2017 Update 1 and VSTS. +> If you are using an earlier version of TFS, see the [previous list of permissions](branch-permissions-before-2017.md). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        PermissionDescription
        Contribute + Users with this permission can push new commits to the branch and lock the branch. +
        Edit Policies + Can edit [branch policies](branch-policies.md). +
        Exempt from policy enforcement + Users with this permission are exempt from the [branch policy](branch-policies.md) set for the branch. +
        Force Push (Rewrite History and Delete Branches) + Can force push to a branch, which can rewrite history. + This permission is also required to delete a branch. +
        Manage Permissions + Can set permissions for the branch. +
        Remove Others' Locks + Can remove [locks](lock-branches.md) set on branches by other users. +
        + \ No newline at end of file diff --git a/docs/git/branch-policies.md b/docs/git/branch-policies.md new file mode 100644 index 00000000000..c55adeed29e --- /dev/null +++ b/docs/git/branch-policies.md @@ -0,0 +1,164 @@ +--- +title: Protect your Git branches with policies | VSTS & TFS +description: Branch policies provide teams with the means to protect their important branches. +ms.assetid: 5D76697E-16A0-4048-91D1-806FE24C92A3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 08/23/2017 +--- + +# Improve code quality with branch policies + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015** + +Branch policies help teams protect their important [branches](tutorial/branches.md) of development. +Policies enforce your team's code quality and change management standards. + +## Enable branch policies + +0. Open the **Branches** view on the web while viewing your repo. + + ![Open up the Branches view on the web](_img/branches/branches_nav.png) + +0. Locate your branch in the view. You can search for your branch using the **Search all branches** box in the upper right. + +0. Open the context menu for the branch by selecting the **...** icon. Select **Branch policies** from the context menu. + + ![Open the branch policies from the context menu](_img/branches/branches_context_menu_policy.png) + +After you set up a branch policy, you cannot directly push changes to the branch. Changes to the branch are only made through pull requests. + +## Require code reviews + +Code reviews are a best practice for most software development projects. +To require teams to review their changes before completing a pull request, select **Require a minimum number of approvals before completing pull request** under **Code review requirements**. + + + +### Require a minimum number of reviewers + +The basic policy requires that a certain number of reviewers approves the code with no rejections. + +![Check the Require Code Reviews box](_img/branch-policies/RequireCodeReviews.png) + +The owner cannot review and approve their own changes if **Allow users to approve their own changes** is not selected. If any reviewer rejects +the changes, the pull request cannot be completed unless the **Pull request can be completed even if some reviewers rejected changes** is selected. + +![Error, the pull request needs at least 2 approvals](_img/branch-policies/ErrorApprovalRequired.png) + +When the required number of reviewers approve the pull request, it can be completed. + +![Pull request status shows that reviewers have approved](_img/branch-policies/ReviewersApproved.png) + +> If you don't expect any problems with your changes, set the pull request to [automatically complete](pull-requests.md#complete-the-pull-request) when all policies are met. + +### Automatically add reviewers + +Designate reviewers for specific directories and files in your repo. These reviewers are automatically added to pull requests that change files along those paths. + +![Enter the path and required reviewers](_img/branch-policies/RequireSpecificReviewers.png) + +#### Require specific reviewers + +If you select **Required** next to a path entry, then the pull request cannot be completed until: + +* Every user added as a reviewer for the path approves the changes. +* At least one person in every group added to the path approves the changes. + +![Required reviewers are automatically added](_img/branch-policies/RequiredReviewerAdded.png) + +Clear the **Required** checkbox if you want to add reviewers automatically, but not require their approval to complete the pull request. + +When the required reviewers approve the code, complete the pull request. + +![Pull request status shows that reviewers have approved](_img/branch-policies/RequiredReviewerApproved.png) + + + + +## Require a successful build + +Set a policy requiring changes in a pull request to build successfully with the protected branch before the pull request can be completed. +Even if you're using [continuous integration](https://www.visualstudio.com/learn/what-is-continuous-integration) (CI) on your development branches to catch problems early, build policies reduce +build breaks and keep your tests results passing. + + 0. [Create a build definition](../build-release/apps/index.md). Check **When team members create or update a pull request...** and select the build definition from the drop-down. +When a new pull request is created or when changes are pushed to an existing pull request targeting this branch, a new build is queued. Select **Block pull request completion unless there is a valid build** to require this build to complete successfully. + + ![Select the build definition](_img/branch-policies/RequireBuildSelectDrop.png) + + 0. Set a build expiration to make sure that updates to your protected branch don't break changes in open pull requests. + * **Always require a new build**: This option sets the build policy status in a pull request to failed when the protected branch is updated. You must requeue a build to refresh the build status. This setting ensures that the changes in pull requests build successfully even as the protected branch changes. This option is best for teams that have important branches with a lower volume of changes. Teams working in busy development branches may find it disruptive to wait for a build to complete every time the protected branch is updated. + * **Require a new build if older than...hours**: This option expires the current policy status when the protected branch updates if the passing build is older than the threshold entered. This option is a compromise between always requiring a build when the protected branch updates and never requiring one. This choice is excellent for reducing the number of builds when your protected branch has frequent updates. + * **Don't require a new build**: Updates to the protected branch do not change the policy status. This reduces the number of builds for your branch, but can cause problems when closing pull requests that haven't been updated recently. + +When the owner pushes changes that build successfully, the policy status is updated. If you have a **Always require a new build** or **Require a new build if older than..hours** build policy chosen, the policy status +updates when the protected branch is updated if the most recent build is no longer valid. + +![Pull request status shows that the build has been approved](_img/branch-policies/BuildApproved.png) + +## Require linked work items + +Require associations between pull requests and a work item to ensure that changes to your branch have [work item management tracking](../work/backlogs/connect-work-items-to-git-dev-ops.md). +Linking work items provides additional context for your changes and ensures that updates go through your work item tracking process. + +![Require linked work items in your pull requests](_img/branch-policies/work_item_linking.png) + +## Merge requirements + +Maintain a consistent branch history by enforcing a merge strategy when a pull request is completed. +Select **Require a specific type of merge when pull requests are completed** and pick an option to require that pull requests merge using that strategy. + +![Set merge requirements](_img/branch-policies/merge_requirements.png) + +- **Merge changes using a no fast-forward merge** - This merges the commit history of the source branch when the pull request closes and creates a merge commit in the target branch. +- **Squash changes when merging** - Complete all pull requests with a squash merge, creating a single commit with the changes in the branch. [Learn more about squash merging](merging-with-squash.md) and how it affects your branch history. + +## Bypass branch policies + +In some cases, you need to bypass policy requirements so you can push changes to the branch directly. For these situations, grant the **Exempt from policy enforcement** permission to a user or group. You can scope this permission to an entire project, a repo, or a single branch. Manage this permission along the with other [Git permissions](../security/permissions.md#git-repository-permissions-object-level). + +![Exempt from policy enforcement permission](_img/branch-policies/PolicyExemptPermission.png) + +>[!IMPORTANT] +> Users with **Exempt from policy enforcement permission** set to allow can complete pull requests even if the branch policy is not satisfied. Use caution when granting this permission, especially +> at the repo and team project level. + +## Q & A + + + + +#### Q: When are the conditions set in branch policies checked? + +Branch policies are re-evaluated on the server as changes are pushed and reviewers vote. +If there is a build triggered by the policy, the build status is set to waiting until the build completes. + +#### Q: What type of wildcard characters are supported when configuring required code reviewers? +Single asterisks (`*`) are supported, and will match any number of characters, including both forward-slashes (`/`) and back-slashes (`\`). Question marks (`?`) will match any single character. + +Examples: + +* `*.sql` will match all files with the .sql extension +* `/ConsoleApplication/*` will match all files under the folder named ConsoleApplication +* `/.gitattributes` will match the .gitattributes file in the root of the repo +* `*/.gitignore` will match any .gitignore file in the repo + +#### Q: Are the required code reviewer paths case-sensitive? +No, branch policies are not case-sensitive at this time. + +#### Q: Can I use XAML build definitions in branch policies? +You cannot use [XAML build definitions](https://msdn.microsoft.com/library/ms181715%28v=vs.120%29.aspx) in branch policies. + +#### Q: How can I configure multiple users as required reviewers, but only require that one of them approve? +You can [add the users to a group](../accounts/add-team-members-vs.md), and then add the group as a reviewer. Any member of the group can then approve on behalf of the group to meet the policy requirement. + +#### Q: I have the exempt from policy permission set, why am I still seeing policy failures in the pull request status? +Even for users that are exempt from policy enforcement, the configured policies are still evaluated when changes are added to a pull request. For exempt users, policy status is advisory only and will not block completion of the pull request. + +#### Q: Where can I get more information on advanced policy configurations? +Check out the [REST API documentation](http://go.microsoft.com/fwlink/?LinkId=526702) for more details. + + \ No newline at end of file diff --git a/docs/git/command-prompt.md b/docs/git/command-prompt.md new file mode 100644 index 00000000000..7eba135cf64 --- /dev/null +++ b/docs/git/command-prompt.md @@ -0,0 +1,161 @@ +--- +title: Git command reference | VSTS & TFS +description: Commands reference for common Git tasks in Visual Studio or the command line +ms.assetid: FAED51BE-2CB0-46DE-8C72-E4EEF6CB8827 +toc: show +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 12/02/2016 +--- + +# Git command reference +#### VSTS | TFS 2015 & 2017 | Visual Studio 2015 Update 2 | Visual Studio 2017 + +## Overview + + + + +Visual Studio's [Team Explorer](../connect/work-team-explorer.md) lets you perform most common Git tasks you'll need for your day to day work right from Visual Studio. +Open Team Explorer through the **View** menu in Visual Studio, or with the **Ctrl+\, Ctrl+M** hotkey. + +Team Explorer and the Git command line work great together. When you make updates and perform commands through one interface, you'll see those changes reflected in the other. + +[Git Installation instructions](https://www.visualstudio.com/learn/install-and-set-up-git/) are available if you don't have Git installed on your computer. + +> [!TIP] +> Windows users: If you aren't using Visual Studio, installing [Git for Windows](https://git-scm.com/download/win) will set up the [Git credential manager for Windows](set-up-credential-managers.md). The credential manager makes it easy to authenticate with your Team Services repos. + +While in Visual Studio, open a command prompt in your repo from Team Explorer’s **Connect** view. Right-click on your local repo and select **Open Command Prompt** + +![Open a command prompt to a repo from inside Visaul Studio](_img/command-prompt/open_cmd_prompt_repo_vs.png) + +> [!IMPORTANT] +> Some commands require having [specific Git permissions](../security/set-git-tfvc-repository-permissions.md#git-repository) in VSTS to complete. + +## Repos + +| How do I ? | Git command line | Visual Studio +|------------|-------------|---------------| +| Create a repo in a new folder | git init *foldername* | Select the **Connect** button ( ![Team Explorer plug icon to open the Connect page](_img/command-prompt/te_connect_icon.png) ) in Team Explorer to open the **Connect** view, then select **New** under **Local Git repositories** +| Create a repo with code in an existing folder | git init *foldername*
        git add --all
        git commit -m "Initial commit" | Create the repo from the command line, then open Team Explorer's **Connect** view and select **Add** under **Local Git repositories** +| Create a repo from an existing Visual Studio solution | git init *foldername*
        cd *foldername*
        git add --all
        git commit -m "Initial commit" | Open the solution and select **Publish** ( ![Publish button on the status bar in Visual Studio 2015 Update 2](_img/share-your-code-in-git-vs/publish_status_bar.png) ) from the status bar in the lower right. +| Create a new repo in your Team Project | Not applicable | From the web, select **Code**, then select the drop-down next to the current repo name and choose **New Repository...** +| Clone a repo into a local folder | git clone *URL* *foldername* | Select **Clone** under **Local Git repositories** in Team Explorer's **Connect** view +| Clone a repo in your Team Project | git clone *URL* *foldername* | Open the **Connect** view in Team Explorer and right click the Git repo in your Team Project under the account name. Select **Clone...** +| Add an existing repo to Visual Studio | Not applicable | Open the solution file in Visual Studio (this will automatically add the repo to Team Explorer) or select **Add** under **Local Git repositories** in the **Connect** view +| Delete the Git repo and history, but keep the current version of the files | Delete the hidden .git folder created at the root of the repo | Delete the hidden .git folder created at the root of the repo from Windows Explorer or the command line +| Delete a local repo and all files | Delete the folder containing your repo from your computer's filesystem | Close any open solutions using files in the repo, then delete the folder containing your repo from your computer's filesystem. +| Delete a repo in your Team Project | Not applicable | Select the settings icon ( ![Gear icon on the top navigation bar in VSTS](_img/command-prompt/settings_icon.png) ) in VSTS/TFS, then select the **Version Control** tab. Find the Git repository to delete and select the **...** next to the name. Choose **Delete Repository** from the options. +| Add a remote | git remote add *name* *url* | Open the repository using the **Connect** view in Team Explorer, then open the **Settings** view in Team Explorer. Select **Repository Settings**, and select **Add** under **Remotes** +| Update a remote | git remote set-url *name* *url* | Open the repository using the **Connect** view in Team Explorer, then open the **Settings** view in Team Explorer. Select **Repository Settings**, and select **Edit** under **Remotes** + +Learn more: + +[Create a new repo | VSTS Git tutorial](tutorial/creatingrepo.md) +[Clone an existing repo | VSTS Git tutorial](tutorial/clone.md) +[Share your code in Git with the command line](share-your-code-in-git-cmdline.md) +[Share your code in Git with Visual Studio 2015](share-your-code-in-git-vs.md) +[Share your code in Git with Visual Studio 2013](share-your-code-in-git-vs-2013.md) +[Create a new repo in your Team Project](create-new-repo.md) +[Delete a repo in your Team Project](delete-existing-repo.md) + +## Branches + +| How do I ? | Git command line | Visual Studio | +|------------|-------------|---------------| +| Create a new branch | git branch *branchname* | Open the **Branches** view in Team Explorer, then right-click a branch and choose **New Local Branch From...** +| Swap to a different branch | git checkout *branchname* | Open the **Branches** view in Team Explorer, then double click a local branch. Alternatively, click the current branch name from the status bar and select a different branch. +| Create and switch to a new branch | git checkout -b *branchname* | Open the **Branches** view in Team Explorer, then right-click a branch and choose **New Local Branch From...** +| Delete a local branch | git branch -d *branchname* | Open the **Branches** view in Team Explorer, then right-click the branch and select **Delete**. You must be checked out to a different branch than the one you want to delete. +| Delete a remote branch | git push origin --delete *branchname* | Open the **Branches** view in Team Explorer, expand the remote that has the branch you want to delete. Right-click the remote and select **Delete Branch from Remote** +| Lock a branch, preventing updates to it | From the web, select the **Branches** tab while viewing your repo. Select the **...** next to the branch you want to lock and choose **Lock**. Unlock the branch with **Unlock** | Same as command line +| Set a default branch in your VSTS/TFS repo | Select the settings icon on the web ( ![Gear icon on the top navigation bar in VSTS](_img/command-prompt/settings_icon.png) ), then select the **Version Control** tab. Select your Git repository, then select the **...** next to the branch name and choose **Set as default branch** | Same as command line +| Set a compare branch for pull requests in your VSTS/TFS repo | From the web, select the **Branches** tab while viewing your repo. Select the **...** next to the branch you want to lock and choose **Compare branch** | Same as command line + +Learn more: + +[Create and manage your work in branches | VSTS Git tutorial](tutorial/branches.md) +[Managing your Git branches in VSTS/TFS](manage-your-branches.md) +[Delete a Git branch on your VSTS/TFS repo](delete-branch.md) +[Lock and unlock a VSTS/TFS branch](lock-branches.md) + +## Commits + +| How do I ? | Git command | Visual Studio | +|------------|-------------|--------------| +| Create a new commit | git commit -m "*message*" | Open the **Changes** view in Team Explorer. Stage changes by right-clicking on the modified files and selecting **Stage**. Enter a commit message and select **Commit Staged**. +| Amend the last commit with staged changes | git commit --amend -m "Updated message" | Open the **Changes** view in Team Explorer, stage your changes, then select **Amend Previous Commit** from the **Actions** drop-down. +| Stage all file changes | git add --all | Open the **Changes** view in Team Explorer. Select the **+** icon in the **Changes** list to stage all changes for the next commit. +| Stage a specific file change | git add *filename* | Open the **Changes** view in Team Explorer. Stage changes by right-clicking on the changed file and selecting **Stage**. +| Review unstaged changes | git status --untracked | Open the **Changes** view in Team Explorer. Unstaged changes are listed under **Changes** section. +| Delete a file | git rm *filename*
        git commit -m "Deleted *filename*" | Delete the file through Solution Explorer, the command line, or any other means. Right-click the deleted file in Team Explorer's **Changes** view and select **Stage** . Select **Commit Staged** to commit the deletion. +| Move a file | git mv *filename*
        git commit -m "Moved *filename*" | Move a file from one location to another in your repo through Solution Explorer, the command line, or any other means. Right-click the moved file in Team Explorer's **Changes** view and select **Stage** . Select **Commit Staged** to commit the move. +| Tag a commit | git tag -a *tagname* -m "*description*" | Open the **Changes** view in Team Explorer, then choose **View history..."** from the **Action** drop-down. Locate the commit in thie History view, then right-click and select **Create Tag** + +Learn more: + +[Save your work with commits | VSTS Git tutorial](tutorial/commits.md) + +## Compare files and versions + +| How do I ? | Git command | Visual Studio | +|------------|-------------|--------------| +| Compare the current contents of a singile file and the contents in the last commit | git diff HEAD *filename* | Right-click on the change in the **Changes** view in Team Explorer and select **Compare with unmodified**. +| Compare your current version with a branch | git diff *branchname* | Right-click on a file in Solution Explorer and select **View History...**, then select both on the latest commit on your current branch and the latest commit on the remote branch. Right-click and select **Compare** +| Compare changes between two branches | git diff *branchname1* *branchname2* | Right-click on a file in Solution Explorer and select **View History...**, then select the most recent commits for both branches. Right-click and select **Compare** + +Learn more: + +[Compare versions and review history | VSTS Git tutorial](tutorial/history.md) + +## Sync changes + +| How do I ? | Git command | Visual Studio | +|------------|-------------|--------------| +| Download new branches and commits from a remote repo, but do not merge them into your local branches | git fetch | Open the **Sync** view from Team Explorer and select **Fetch**. +| Merge updates from a remote repo into your local repo | git pull *remote* *branchname* | While working on the branch in your local repo, open the **Sync** view in Team Explorer, then select **Pull**. +| Publish a local branch to a remote repo | git push -u *remote* *branchname* | Open the **Sync** view in Team Explorer and select **Publish** under **Outgoing Commits**. +| Synchronize your local branch with a remote branch, pushing your local changes and pulling remote ones | git pull *remote* *branchname*
        git push -u *remote* *branchname* | Open the **Sync** view in Team Explorer. Select **Sync**. +| Force push a branch, rewriting the remote branch history with the history of your current branch | git push --force -u origin *remote_branchname* | Use command line + +Learn more: + +[Share code with push | VSTS Git tutorial](tutorial/pushing.md) +[Update your code with fetch and pull | VSTS Git tutorial](tutorial/pulling.md) +[Resolve merge conflicts | VSTS Git tutorial](tutorial/merging.md) + +## Merge and rebase + +| How do I ? | Git command | Visual Studio | +|------------|-------------|--------------| +| Merge a branch into the current branch | git merge *branchname* | In the Team Explorer **Branches** view, right-click the branch you want to merge and select **Merge From..**. Verify the options set and select **Merge**. +| Merge a remote branch into the current branch | git pull origin *branchname* | In the Team Explorer **Branches** view, right-click the remote branch you want to merge and select **Merge From..**. Verify the options set and select **Merge**. +| Rebase your current branch onto the history of another branch | git rebase *branchname* | In the Team Explorer **Branches** view, right-click the branch you want to rebase your current branch changes onto and select **Rebase Onto.."** +| Do an interactive rebase of the last *n* commits | git rebase -i HEAD~*n* (Linux and macOS)
        git rebase -i "HEAD^*n*" (Windows) | Use command line +| Cherry-pick a commit into the current branch | git cherry-pick *commitID* | Open the **Changes** view in Team Explorer, then choose **View history..."** from the **Action** drop-down. Locate the commit in thie History view, then right-click and select **Cherry-pick** + +Learn more: + +[Resolve merge conflicts | VSTS Git tutorial](tutorial/merging.md) +[Catch up and replay changes with rebase | VSTS Git tutorial](tutorial/rebase.md) +[Copy changes with cherry-pick | VSTS Git tutorial](tutorial/cherry-pick.md) + +## Undo + +> [!WARNING] +> If you are not an experienced Git user, exercise caution when using the `reset` command. [Learn more](tutorial/undo.md) + +| How do I ? | Git command | Visual Studio | +|------------|-------------|--------------| +| Revert all changes and roll back to the most recent commit | git reset --hard HEAD | Open the **Changes** view in Team Explorer. Select **Actions and choose **View History** from the drop-down. Right-click the commit where the branch is currently located and select **Reset and Delete changes....** +| Revert staging of files, but keep file changes | git reset --mixed HEAD | Open the **Changes** view in Team Explorer. Select **Actions and choose **View History** from the drop-down. Right-click the commit where the branch is currently located and select **Reset and Keep changes....** +| Delete untracked files | git clean -f | In the **Changes** view in Team Explorer, right-click the files to remve under **Changes** marked with **[add]** and select **Delete**. +| Reset your local branch to the most recent commit on a remote branch | git reset --hard *remote*/*branchname*
        (for example, git reset --hard origin/master) | Right-click the branch from Team Explorer's **Branches** view and select **Reset and Delete changes....** +| Revert a commit pushed to a remote repository | git revert *commitID* | Open the **Changes** view in Team Explorer. Select **Actions and choose **View History** from the drop-down. Right-click the commit to revert and select **Revert**. + +Learn more: + +[Undo changes and commits | VSTS Git tutorial](tutorial/undo.md) \ No newline at end of file diff --git a/docs/git/commit-details.md b/docs/git/commit-details.md new file mode 100644 index 00000000000..a9ad4c9d474 --- /dev/null +++ b/docs/git/commit-details.md @@ -0,0 +1,83 @@ +--- +title: View commit details | VSTS & TFS +description: View Git commit details in Visual Studio +ms.assetid: 82aa7c10-c304-400a-84c9-d5ed87d66180 +toc: show +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sancha +ms.date: 03/14/2017 +--- + +# Commit details + +#### VSTS | TFS 2017 Update 1 + +## Commit details view + +The commit details view provides information regarding all the changes made as part of a commit. You can view additional metadata associated with the commit and also perform certain actions to revert or cherry pick the commit. + +![Commit details page](_img/commit-details/1Commitdetails.png) + + +## What information do you see on the commit details page? + +* Commit ID and commit message - You can view the commit Id and commit message of the commit. You also have the option to copy the commit Id or commit message by clicking on the **Copy** buttons. + +* Author details - You can also view the author, committer, and pusher details in the author drop-down. Click on the **Pushed on** link to access the associated push details + + ![Author page](_img/commit-details/2AuthorDetails.png) + +* Associated pull requests - Once you navigate from the [commit history](commit-history.md) to the commit details, the context of the branch from the commit history page is retained. In the following example you can see that commit #33 brought this commit to the master branch. You can also view all the associated pull requests for this commit, which are all the pull requests that brought this commit to one branch or another. + + ![Associated pull requests](_img/commit-details/3AssociatedPRDetails.png) + +* Associated work items - You can also view all the work items associated with this commit in the work items dropdown. + + ![Associated work items](_img/commit-details/4AssociatedWorkItems.png) + +* Build status - You can also review the build status associated with the commit. + + ![Build status](_img/commit-details/4BuildStatus.png) + + +## What actions can you perform? + +You can perform the following actions on the commit details page. + +* Search in branches and tags - Click the **Search in branches** button to search a commit in a particular branch or tags. You can view whether a particular branch or a tag includes this commit or not. + + ![Search in branches and tags](_img/commit-details/6SearchcommitsinBranchesandTags.png) + +* Cherry pick - Click on **Cherry-pick** to cherry pick a commit and port the changes to another branch. + + ![Cherry pick](_img/commit-details/7CherryPick.png) + +* Revert - Click on **Revert** to revert the changes of a commit . A topic branch is created with the reverted changes and then you will be prompted to create a pull request to the target branch. + + ![Revert](_img/commit-details/8Revertcommit.png) + +* New branch - Click on **New branch** to create a new branch from a commit. + + ![Create branch](_img/commit-details/9CreateBranch.png) + + +## What are the changes included in the commit? + +The source explorer allows you to select a file or a folder to view changes associated with a commit. + +* Diff to parent - Click on **Diff on parent1** in the **Source Explorer** pane to view the difference between the current commit and its parent commit. + + ![Diff to parent](_img/commit-details/10DifftoParent.png) + +* The file explorer view provides all the capabilities that we get in the file explorer view i.e. you can + * browse files in a side by side or inline diff view + * use the navigation keys to browse the next set of changes + * preview the files + * compare file diff for previous commits + + ![Diff view](_img/commit-details/11SidebySide.png) + + + diff --git a/docs/git/commit-history.md b/docs/git/commit-history.md new file mode 100644 index 00000000000..aabf5ff1b35 --- /dev/null +++ b/docs/git/commit-history.md @@ -0,0 +1,91 @@ +--- +title: View commit history | VSTS & TFS +description: View Git commit history in Visual Studio +ms.assetid: f1ceefae-192f-49ee-af52-b9a29852bf85 +toc: show +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sancha +ms.date: 03/14/2017 +--- + +# Commit history + +#### VSTS | TFS 2017 Update 1 + +## Commit history view + +The commit history view shows you the history of all the commits for a particular branch in a repository. By default, all results are shown in reverse chronological order. + +![Commit history page](_img/commit-history/1-CommitHistory.png) + +For each commit, you can view the following key elements: + +* Author details - You can view the author and committer of each commit along with the associated time. + + ![Author details for a commit](_img/commit-history/2-AuthorDetails.png) + +* Complete commit message - If the commit message is too long, you can click on the down-arrow to expand the commit message to view the entire commit message. + + ![Expanded commit message](_img/commit-history/3-CommitMessage.png) + +* Copy commit SHA - You can copy the 40 character commit SHA by clicking on the **Copy full SHA to clipboard** button. You can click on a commit ID or commit message to open the commit details page. + + ![Copy 40 character commit ID](_img/commit-history/4-CopyCommitSHA.png) + +* Build and PR information - You can view the pull request that brought this commit to the branch selected on the page, and view the build status of the current commit. + + ![Build and PR details on commit history](_img/commit-history/5-BuildandPRInfo.png) + +* You can select a repository from the repository picker to view the history of a particular repository. + + ![repository picker](_img/commit-history/6-RepoPicker.png) + +* You can select a particular branch or tag from the branch picker to view associated history. + + ![Branch picker](_img/commit-history/7-BranchPicker.png) + +* You can further filter the results by selecting a particular file from the code explorer. + + ![Code explorer](_img/commit-history/8-CodeExplorer.png) + +* You can also find a file or folder to view its history. In the following example, when you type "get", you see results of all files and folders in the repository that contain the word **src**. + + ![Find a file](_img/commit-history/9-FindaFile.png) + + +## History result filtering + +You can filter the results using the following advanced filtering modes: **simple history**, **first parent**, **full history**, and **full history with simplified merges**. For more information, see [advanced git history options](https://git-scm.com/book/en/v2/Git-Basics-Viewing-the-Commit-History). + +![Advanced filters for git log](_img/commit-history/10-AdvancedFilter.png) + +You can also filter commits by authors. You will see authors of most recent commits in the author filter drop down. In case you are not able to find an author in the drop down, then you can type the author name or email address and search for all commits by that author. + +![Author filter](_img/commit-history/11-AuthorFilter.png) + +In case you want to view commits that were authored between any two dates, you can use the **From date** and **To date** filter to scope down the list of commits. + +![Date filter](_img/commit-history/12-DateFilter.png) + +## Commit search + +You can also search for a commit using its Commit ID. You can search for all commits starting with a commit ID. If you enter the 40 character Commit ID then you will be redirected directly to the commit details page. + +![Commit search page](_img/commit-history/13-SearchCommit.png) + +## Commit for file renames + +In case a file or folder is renamed, you will see all commits until the file or folder got renamed. You will also see a link suggesting **Show rename history**. + +![Show rename files or folder history](_img/commit-history/renamefiles.png) + +When you click on **Show rename history** you can view all the commits of the file or folder before the rename. + +![Showing commits before file or folder rename](_img/commit-history/Showrenamefiles.png) + + + + + diff --git a/docs/git/concepts/_img/branching-guidance/featurebranching.png b/docs/git/concepts/_img/branching-guidance/featurebranching.png new file mode 100644 index 00000000000..69ccdcf2d0d Binary files /dev/null and b/docs/git/concepts/_img/branching-guidance/featurebranching.png differ diff --git a/docs/git/concepts/_img/branching-guidance/releasebranching_master.png b/docs/git/concepts/_img/branching-guidance/releasebranching_master.png new file mode 100644 index 00000000000..9075e6839cf Binary files /dev/null and b/docs/git/concepts/_img/branching-guidance/releasebranching_master.png differ diff --git a/docs/git/concepts/_img/branching-guidance/releasebranching_release.png b/docs/git/concepts/_img/branching-guidance/releasebranching_release.png new file mode 100644 index 00000000000..8cbff2c870f Binary files /dev/null and b/docs/git/concepts/_img/branching-guidance/releasebranching_release.png differ diff --git a/docs/git/concepts/_img/forks/create-new-fork.png b/docs/git/concepts/_img/forks/create-new-fork.png new file mode 100644 index 00000000000..314d9503d16 Binary files /dev/null and b/docs/git/concepts/_img/forks/create-new-fork.png differ diff --git a/docs/git/concepts/_img/forks/cross-repo-pr.png b/docs/git/concepts/_img/forks/cross-repo-pr.png new file mode 100644 index 00000000000..39dc91548c9 Binary files /dev/null and b/docs/git/concepts/_img/forks/cross-repo-pr.png differ diff --git a/docs/git/concepts/_img/forks/fork-dialog.png b/docs/git/concepts/_img/forks/fork-dialog.png new file mode 100644 index 00000000000..818576efd3c Binary files /dev/null and b/docs/git/concepts/_img/forks/fork-dialog.png differ diff --git a/docs/git/concepts/_img/forks/vs-te-home-settings.png b/docs/git/concepts/_img/forks/vs-te-home-settings.png new file mode 100644 index 00000000000..c6134be501b Binary files /dev/null and b/docs/git/concepts/_img/forks/vs-te-home-settings.png differ diff --git a/docs/git/concepts/_img/forks/vs-te-master-checked-out.png b/docs/git/concepts/_img/forks/vs-te-master-checked-out.png new file mode 100644 index 00000000000..82d124fe4e2 Binary files /dev/null and b/docs/git/concepts/_img/forks/vs-te-master-checked-out.png differ diff --git a/docs/git/concepts/_img/forks/vs-te-new-remote.png b/docs/git/concepts/_img/forks/vs-te-new-remote.png new file mode 100644 index 00000000000..c09c2a2d930 Binary files /dev/null and b/docs/git/concepts/_img/forks/vs-te-new-remote.png differ diff --git a/docs/git/concepts/_img/forks/vs-te-rebase.png b/docs/git/concepts/_img/forks/vs-te-rebase.png new file mode 100644 index 00000000000..a53531b8077 Binary files /dev/null and b/docs/git/concepts/_img/forks/vs-te-rebase.png differ diff --git a/docs/git/concepts/_img/forks/vs-te-reposettings.png b/docs/git/concepts/_img/forks/vs-te-reposettings.png new file mode 100644 index 00000000000..38e90ffd80c Binary files /dev/null and b/docs/git/concepts/_img/forks/vs-te-reposettings.png differ diff --git a/docs/git/concepts/_img/forks/vs-te-settings.png b/docs/git/concepts/_img/forks/vs-te-settings.png new file mode 100644 index 00000000000..7554c02d311 Binary files /dev/null and b/docs/git/concepts/_img/forks/vs-te-settings.png differ diff --git a/docs/git/concepts/_img/forks/vs-te-sync.png b/docs/git/concepts/_img/forks/vs-te-sync.png new file mode 100644 index 00000000000..823b7ba1ac5 Binary files /dev/null and b/docs/git/concepts/_img/forks/vs-te-sync.png differ diff --git a/docs/git/concepts/_img/git-log-history-simplification/filters.png b/docs/git/concepts/_img/git-log-history-simplification/filters.png new file mode 100644 index 00000000000..2b2c18d4db1 Binary files /dev/null and b/docs/git/concepts/_img/git-log-history-simplification/filters.png differ diff --git a/docs/git/concepts/_img/git-log-history-simplification/history-simplification-branches.png b/docs/git/concepts/_img/git-log-history-simplification/history-simplification-branches.png new file mode 100644 index 00000000000..a776fd019a8 Binary files /dev/null and b/docs/git/concepts/_img/git-log-history-simplification/history-simplification-branches.png differ diff --git a/docs/git/concepts/_img/history/gitlogconsole.png b/docs/git/concepts/_img/history/gitlogconsole.png new file mode 100644 index 00000000000..6f257938506 Binary files /dev/null and b/docs/git/concepts/_img/history/gitlogconsole.png differ diff --git a/docs/git/concepts/_img/history/history-abc.png b/docs/git/concepts/_img/history/history-abc.png new file mode 100644 index 00000000000..72a06cd22a3 Binary files /dev/null and b/docs/git/concepts/_img/history/history-abc.png differ diff --git a/docs/git/concepts/_img/history/history-abcd-cool-new-feature-e-f-merge.png b/docs/git/concepts/_img/history/history-abcd-cool-new-feature-e-f-merge.png new file mode 100644 index 00000000000..0f9358e60f2 Binary files /dev/null and b/docs/git/concepts/_img/history/history-abcd-cool-new-feature-e-f-merge.png differ diff --git a/docs/git/concepts/_img/history/history-abcd-cool-new-feature-e-f.png b/docs/git/concepts/_img/history/history-abcd-cool-new-feature-e-f.png new file mode 100644 index 00000000000..c018e09fb78 Binary files /dev/null and b/docs/git/concepts/_img/history/history-abcd-cool-new-feature-e-f.png differ diff --git a/docs/git/concepts/_img/history/history-abcd-cool-new-feature.png b/docs/git/concepts/_img/history/history-abcd-cool-new-feature.png new file mode 100644 index 00000000000..f756ed80f1c Binary files /dev/null and b/docs/git/concepts/_img/history/history-abcd-cool-new-feature.png differ diff --git a/docs/git/concepts/_img/history/history-abcd.png b/docs/git/concepts/_img/history/history-abcd.png new file mode 100644 index 00000000000..7b971694bf7 Binary files /dev/null and b/docs/git/concepts/_img/history/history-abcd.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-clone.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-clone.png new file mode 100644 index 00000000000..d039ccd757d Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-clone.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-commit.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-commit.png new file mode 100644 index 00000000000..3c417f73fd4 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-commit.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-createbranch.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-createbranch.png new file mode 100644 index 00000000000..9ff42ad21e1 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-createbranch.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-createtopicbranch2.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-createtopicbranch2.png new file mode 100644 index 00000000000..8bd81aba0d5 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-createtopicbranch2.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-history-ide.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-history-ide.png new file mode 100644 index 00000000000..6fdcd8390f4 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-history-ide.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-history-web.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-history-web.png new file mode 100644 index 00000000000..3f712829075 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-history-web.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-history2.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-history2.png new file mode 100644 index 00000000000..ecf44050dba Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-history2.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-newrepo.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-newrepo.png new file mode 100644 index 00000000000..4d473942da3 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-newrepo.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-newrepoinfo.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-newrepoinfo.png new file mode 100644 index 00000000000..03e5a35d95d Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-newrepoinfo.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-publishbranch.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-publishbranch.png new file mode 100644 index 00000000000..184ed5893d4 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-publishbranch.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-readme.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-readme.png new file mode 100644 index 00000000000..96e83464e8f Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-readme.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-status-vs2.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-status-vs2.png new file mode 100644 index 00000000000..a014b0c46c3 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-status-vs2.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-status2.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-status2.png new file mode 100644 index 00000000000..2e0226a909f Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-status2.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-sync.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-sync.png new file mode 100644 index 00000000000..1e8fe372996 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-sync.png differ diff --git a/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-untracked.png b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-untracked.png new file mode 100644 index 00000000000..c1307addfc7 Binary files /dev/null and b/docs/git/concepts/_img/mapping-my-tfvc-actions-to-git/actionmap-untracked.png differ diff --git a/docs/git/concepts/forks.md b/docs/git/concepts/forks.md new file mode 100644 index 00000000000..78069ab3c30 --- /dev/null +++ b/docs/git/concepts/forks.md @@ -0,0 +1,150 @@ +--- +title: Fork your repository in VSTS or TFS +description: Learn to isolate code using forks in VSTS & TFS +ms.assetid: d212c1ec-19b9-4d5a-bb7f-2a909f151180 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: macoope +ms.date: 08/23/2017 +--- + +# Forks + +A fork is a complete copy of a repository, including all files, commits, and (optionally) branches. +Forks are a great way to isolate experimental, risky, or confidential changes from the original codebase. +Once you're ready to share those changes, it's easy to use [pull requests](pull-requests.md) to push the changes back to the original repository. + +## What's in a fork + +A fork starts with all the contents of its upstream (original) repository. +When you create a fork, you can choose whether to include all branches or limit to only the default branch. +None of the permissions, policies, or build definitions are applied. +The new fork acts as if someone cloned the original repository, then pushed to a new, empty repository. +After a fork has been created, new files, folders, and branches are not shared between the repositories unless a PR carries them along. + +### Sharing code between forks + +You can create PRs in either direction: from fork to upstream, or upstream to fork. +The most common direction will be from fork to upstream. +The destination repository's permissions, policies, builds, and work items will apply to the PR. + +## Choosing between branches and forks + +For a very small team (2-5 developers), we recommend working in a single repo. +Everyone should work in topic branches, and master should be protected with [branch policies](../branch-policies.md). +As your team grows larger, you may find yourself outgrowing this arrangement and prefer to switch to a forking workflow. + +If your repository has a large number of casual or infrequent committers (similar to an open source project), we recommend the forking workflow. +Typically only core contributors to your project have direct commit rights into your repository. +You should ask collaborators from outside this core set of people to work from a fork of the repository. +This will isolate their changes from yours until you've had a chance to vet the work. + +## The forking workflow + +1. [Create a fork](#create-fork) +2. [Clone it locally](#clone-locally) +3. [Make your changes locally and push them to a branch](#push-changes) +4. [Create and complete a PR to upstream](#create-pr) +5. [Sync your fork to the latest from upstream](#sync-fork) + + +### Create the fork + +Choose the Fork button (1), then choose the project where you want the fork to be created (2). +Give your fork a name and choose the Fork button (3). +> You must have the Create Repository permission in your chosen project to create a fork. +> We recommend you create a dedicated project for forks where all contributors have the Create Repository permission. + +![Create new fork](_img/forks/create-new-fork.png) + +If the repository contains a lot of topic branches, we recommend you fork only the default branch. +On the other hand, for a newer repository which will primarily be used with forking, we recommend choosing all branches. + + +### Clone your fork locally + +Once your fork is ready, clone it using the [command line](../tutorial/clone.md?tabs=command-line) or an IDE like [Visual Studio](../tutorial/clone.md). +The fork will be your `origin` remote. + +For convenience, you'll want to add the upstream repository (where you forked from) as a remote named `upstream`. +On the command line, you can type: + +```git remote add upstream {upstream_url}``` + +Or, in Visual Studio, follow these steps: + +1. Open the **Settings** page. + + ![Team Explorer home](_img/forks/vs-te-home-settings.png) + +2. Choose **Repository Settings**. + + ![Team Explorer settings](_img/forks/vs-te-settings.png) + +3. Under **Remotes**, choose **Add**. + + ![Repository settings](_img/forks/vs-te-reposettings.png) + +4. Add a new remote called `upstream`, using the Git clone URL of the repo you forked from. + + ![Dialog: add new remote](_img/forks/vs-te-new-remote.png) + + +### Make and push changes + +It's possible to work directly in `master` - after all, this fork is your personal copy of the repo. +We recommend you still work in a topic branch, though. +This allows you to maintain multiple, independent workstreams simultaneously. +Also, it reduces confusion later when you want to sync changes into your fork. + +Make and commit your changes as you normally would. +When you're done with the changes, push them to `origin` (your fork). + + +### Create and complete a PR + +Open a pull request from your fork to the upstream. +All the policies, required reviewers, and builds will be applied in the upstream repo. +Once all policies are satisfied, the PR can be completed and the changes become a permanent part of the upstream repo. + +![Pull request](_img/forks/cross-repo-pr.png) + +> Important note: Anyone with the Read permission can open a PR to upstream. +> If a PR build definition is configured, the build will run against the code introduced in the fork. + + +### Sync your fork to latest + +When you've gotten your PR accepted into upstream, you'll want to make sure your fork reflects the latest state of the repo. +We recommend rebasing on `upstream`'s `master` branch (assuming `master` is the main development branch). +On the command line, run: + +``` +git fetch upstream master +git rebase upstream/master +git push origin +``` + +Or, using Visual Studio, you can use the **Synchronization** page to fetch and rebase. + +1. Open the **Synchronization** page in Team Explorer. + +2. Fetch from `upstream`. + + ![Team Explorer sync](_img/forks/vs-te-sync.png) + +3. Open the **Branches** page in Team Explorer. Make sure `master` is checked out. + + ![Check out master branch](_img/forks/vs-te-master-checked-out.png) + +4. Rebase `master` onto `upstream/master`. + + ![Rebase](_img/forks/vs-te-rebase.png) + +Now you're all set to start your next feature on a new topic branch. + +
        + +The forking workflow lets you isolate changes from the main repository until you're ready to integrate them. +When you're ready, integrating code is as easy as completing a pull request. diff --git a/docs/git/concepts/git-branching-guidance.md b/docs/git/concepts/git-branching-guidance.md new file mode 100644 index 00000000000..29cf2320705 --- /dev/null +++ b/docs/git/concepts/git-branching-guidance.md @@ -0,0 +1,156 @@ +--- +title: Git branching guidance | VSTS & TFS +description: Git branching guidance +ms.assetid: 9445be16-3bf4-46ff-bef8-52b72da03d0a +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 06/16/2017 +--- + +# Adopt a Git branching strategy + +Distributed version control systems like Git give individuals wide flexibility in how they use version control to share and manage code. +Your team should find a balance between this flexibility and the need to collaborate and share code in a consistent manner. + +Team members publish, share, review, and iterate on code changes through Git branches shared with others. +Adopt a branching strategy for your team so that you collaborate better and spend less time managing version control and more time developing code. + +## Keep your branch strategy simple + +Keep your branch strategy simple by building your strategy from these three concepts: + +--- +0. Use feature branches for all new features and bug fixes. +0. Merge feature branches into the master branch using pull requests. +0. Keep a high quality, up-to-date master branch. + +--- + +A strategy that extends these concepts and avoids contradictions will result in a version control workflow for your team that is consistent and easy to follow. + +### Use feature branches for your work + +Develop your features and fix bugs in feature branches (also known as topic branches) based off your master branch. +Feature branches isolate work in progress from the completed work in the master branch. +Git branches are inexpensive to create and maintain, so even small fixes and changes should have their own feature branch. + +![image of basic branching workflow](_img/branching-guidance/featurebranching.png) + +Creating feature branches for all your changes makes reviewing history very simple. Look at the commits made in the branch and look at the pull request that merged the branch. + +#### Name your feature branches by convention + +Use a consistent naming convention for your feature branches to identify the work done in the branch. +You can also include other information in the branch name, such as who created the branch. + +Some suggestions for naming your feature branches: + +*`username/description`* +*`username/workitem`* +*`bugfix/description`* +*`features/feature-name`* +*`hotfix/description`* + +#### Use feature flags to manage long-running branches + +Long-lived feature branches present problems when you need to build code on top of the branch before the work in the branch is finished. +Merge unfinished features into the master branch so others can build off their work, but keep them hidden from your users and testers behind feature flags. +Enable the flag in development to use the feature without the changes affecting anyone else. +Once the feature is finished, you can remove the flags or use them to roll out the feature to select users and testers. + +[Learn more](http://martinfowler.com/articles/feature-toggles.html) about using feature flags in your code. + +### Review and merge code with pull requests + +The review that takes place in a pull request is critical for improving code quality. +Only merge branches through pull requests that pass your review process. Avoid merging branches to the master branch without a pull request. + +Reviews in pull requests take time to complete, so your team should agree on what's expected from pull request creators and reviewers. +Distribute reviewer responsibilities to share ideas across your team and spread out knowledge of your codebase. + +Some suggestions for successful pull requests: + +--- +- Two reviewers is an optimal number [based on research](https://www.microsoft.com/en-us/research/publication/convergent-software-peer-review-practices/). +- If your team already has a code review process, bring pull requests into what you're already doing. +- Take care assigning the same reviewer(s) to a large number of pull requests. Pull requests work better when reviewer responsibilities are shared across the team. +- Provide enough detail in the description to quickly bring reviewers up to speed with your changes. +- Include a build or linked version of your changes running in a staged environment with your pull request so others can easily test the changes. + +--- + +### Keep a high quality, up-to-date master branch + +The code in your master branch should pass tests, build cleanly, and always be up to date. +Your master branch needs these qualities so that feature branches created by your team start from a known good version of code. + +Set up a [branch policy](../branch-policies.md) for your master branch that: + +--- +0. Requires a pull request to merge code. This prevents direct pushes to the master branch and ensures discussion of proposed changes. +0. Automatically adds reviewers when a pull request is created. The added team members review the code and comment on the changes in the pull request. +0. Requires a successful build to complete a pull request. Code merged into the master branch should build cleanly. + +--- + +> The build definition for your pull requests should be quick to complete, so it doesn't interfere with the review process. + +## Manage releases + +Use release branches to coordinate and stabilize changes in a release of your code. +This branch is long-lived and isn't merged back into the master branch in a pull request, unlike the feature branches. +Create as many release branches as you need, but keep in mind that each active release branch represents another version of the code you'll need to support. +Lock release branches when you're ready to stop supporting a particular release. + +### Use release branches + +Create a release branch from the master branch as you get close to your release or other milestone, such as the end of a sprint. +Give this branch a clear name associating it with the release, for example `release/20`. + +Create branches to fix bugs from the release branch and merge them back into the release branch in a pull request. + +![image of release branch workflows](_img/branching-guidance/releasebranching_release.png) + +### Port changes back to the master branch + +Bring over changes made in your release branch into your master branch to prevent regression in your code. +Port your changes from your release branch into a new feature branch to bring them back into the master branch. +Use cherry-picking instead of merging so that you have exact control over which commits are ported back to the master branch. +Merging the feature branch into the master branch can bring over release-specific changes you don't want in the master branch. + +Update the master branch with a change made in the release branch with these steps: + +--- +0. Create a new feature branch off the master branch to port the changes. +0. Cherry-pick the changes from the release branch to your new feature branch. +0. Merge the feature branch back into the master branch in a second pull request. + +--- + +![image of release branch workflows](_img/branching-guidance/releasebranching_master.png) + +This release branch workflow keeps the pillars of the basic workflow intact: feature branches, pull requests, and a strong master branch that always has the latest version of the code. + +### Why not use tags for releases? + +Other branching workflows use Git [tags](https://git-scm.com/book/en/v2/Git-Basics-Tagging) to mark a specific commits as a release. +Tags are useful for marking points in your history as important, but tags introduce extra steps in your workflow that aren't necessary if you are using branches for your releases. + +Tags are maintained and pushed separately from your commits. +Team members can easily miss tagging a commit and then have to go back through the history afterwards to fix the tag. +You can also forget the extra step to push the tag, leaving the next developer working from an older version of the code when supporting the release. + +The release branch strategy extends the basic feature branch workflow to handle releases. +Your team doesn't have to adopt any new version control process other than the cherry-pick to port changes. + +## Manage deployments + +You can handle multiple deployments of your code in the same way you handle multiple releases. +Create a clear naming convention (such as `deploy/performance-test`) and treat the environment branches like release branches. +Your team should agree on a process to update deployment branches with the code from your master branch. +Cherry-pick bugfixes in the deployment branch back to the master branch using the same steps as porting changes from a release branch. + +An exception to this recommendation is if you are using a form of continuous deployment. +Use [release management](../../release/index.md) tools when working with continuous deployment to promote builds from your master branch to your deployment targets. diff --git a/docs/git/concepts/git-dates.md b/docs/git/concepts/git-dates.md new file mode 100644 index 00000000000..620e18a2f2a --- /dev/null +++ b/docs/git/concepts/git-dates.md @@ -0,0 +1,76 @@ +--- +title: Dates in Git | VSTS & TFS +description: How dates work in Git +ms.assetid: c5e233e2-cc84-4ca6-8ca3-8eb6d686533a +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: robrodbe +ms.date: 06/16/2017 +--- + +# How dates work in Git + +Git tracks two dates in commits: author date and commit date. +In addition, VSTS and TFS track when a commit was first pushed to the server. + +* **Author date**: when a commit was originally authored. Typically, when someone first ran `git commit`. +* **Commit date**: when a commit was applied to the branch. In many cases it is the same as the author date. Sometimes it differs: if a commit was amended, rebased, or applied by someone other than the author as part of a patch. In those cases, the date will be when the rebase happened or the patch was applied. +* **Push date**: when a commit was pushed to the remote repository in question. This date is specific to the remote version control system you are using, and won't be available in your local repository. + +When you run `git log`, by default you will see the *author date*. +If you want to see commit date, you can use one of the many command line options, such as `--pretty=fuller`. + +Let's look at a brief example to see these concepts in practice. First we will create a normal commit: + + git init + echo test > file.txt + git add * + git commit -m "A normal commit message" + +Now let's ammend our commit with a different message: + + echo again > file.txt + git add * + git commit --amend -m "An ammended commit" + +If we look at our regular log history we would see something like the following: + + git log + + commit 17232459f0ae25adeff21c9e21742ba22b7f3499 + Author: Ross Brodbeck + Date: Thu Feb 25 19:38:54 2016 -0500 + + An amended commit + +Now let's view the same commit with the author date: + + git log --pretty=fuller + + commit 17232459f0ae25adeff21c9e21742ba22b7f3499 + Author: Ross Brodbeck + AuthorDate: Thu Feb 25 19:38:54 2016 -0500 + Commit: Ross Brodbeck + CommitDate: Thu Feb 25 19:39:36 2016 -0500 + + An amended commit + +Note the (slight) difference between the author date and commit date above. +The commit date is my original, unedited, commit time. The author date is the time at which I ran the `--amend` command. + +In fact, there are a lot of `git log` options to help you understand dates better. +For example, passing the `--date` flag will allow you to determine how dates are displayed. +This can be useful for normalizing time zones (git displays dates in their original time zone, by default) or changing the date display string. + +To learn more about the various formatting options, see the [git log man page](https://git-scm.com/docs/git-log). + +## Changing Git Dates + +When you're getting ready to commit your code, note that you have the ability to set both the author and commit dates. This isn't something you should do often. + +You can change the author date of a given commit by passing the `--date` flag to `git commit`. +There are various articles regarding the formatting of this flag, but the gist is that it isn't well-documented. [This StackOverflow question](http://stackoverflow.com/questions/19742345/what-is-the-format-for-date-parameter-of-git-commit) does a great job of explaining the acceptable date formats. + +You can also use the environment variables `GIT_COMMITTER_DATE` and `GIT_AUTHOR_DATE` to set the corresponding dates, as documented in the [man page](https://git-scm.com/docs/git-commit). +If you need to go this route, use [this Stack Overflow question](http://stackoverflow.com/questions/454734/how-can-one-change-the-timestamp-of-an-old-commit-in-git) as a starting point. diff --git a/docs/git/concepts/git-names.md b/docs/git/concepts/git-names.md new file mode 100644 index 00000000000..35f00542679 --- /dev/null +++ b/docs/git/concepts/git-names.md @@ -0,0 +1,69 @@ +--- +title: Author names in Git | VSTS & TFS +description: How Git stores author names +ms.assetid: 09e60acb-fa48-4843-9f5d-5dfed981f467 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 06/16/2017 +--- + +# How names work in Git + +When you commit to your local repo, Git includes your name and email address as part of the commit. +This can sometimes lead to confusion. +The name and email on your commits may not match the identity you log in with on a Git host like Visual Studio VSTS. +Further, you may have commits under several different names and email addresses even though you were the author for each of them. + +## Why are there multiple names for me in my repo? + +Have you searched your name in the [History](../commit-history.md) page and been surprised to see multiple, slightly different entries for yourself? +You were probably left wondering how this happened and what you can do about it. +The answer is simple: in different commits, your name was recorded differently. +Maybe you have two different computers, one configured with your full name (e.g. Frances) and the other with the nickname you go by (e.g. Frank). +Or maybe you have a home computer connected to your Microsoft Account (e.g. frances@outlook.com) and a work computer connected to your employer's Azure Active Directory (e.g. frances_t@fabrikam.com). +It's even possible you changed your settings over time, so older commits have one name and newer commits have another. + +## Where does Git get your name and email? + +Git stores your name and email address in its [config file](https://git-scm.com/docs/git-config). +This file can be at the system level, global to your account on your computer, or local to a repository. +If a name and email aren't found in any of these places, Git will do its best to get this information from your operating system. +Your details are included in the commit, marking you as the author of that commit. + +When you set up Git for the first time on a new machine, you may create a commit using Git's "best effort" information. +Git will prompt you to set an explicit name and email address, and the new settings will be used for subsequent commits. +This is a frequent source of one author having multiple names. + +## Where does VSTS get your name and email? + +Your details in VSTS come from your [profile](https://app.vssps.visualstudio.com/profile/view). +Your profile was originally populated from details in your Microsoft Account or Azure Active Directory account, but you may change these details yourself. +When you edit a file in the web or complete a PR, VSTS supplies your profile details as the author of the commit. +This is another opportunity for your name or email address to be specified differently. + +## How do I change my information in Git and VSTS? + +In Git, you can run two commands to change your name and email address: + +``` +git config --global user.name "Frances Totten" +git config --global user.email "frances_t@fabrikam.com" +``` + +In VSTS, you can update your profile by clicking your picture in the upper right corner and choosing *My profile*. + +![My profile menu](../_img/me-menu.png) + +## How do I change the author displayed for past commits? + +If you've made a single change locally and it has the wrong author, you can amend that commit with new author information. Be sure to format it like this: `Name `. + +``` +git commit --amend --author="Frances L. Totten " +``` + +In most other cases, it's best to keep the existing author information. +To change an author name or email, you must create a new commit. +When you change a commit, all subsequent commits descended from that commit also must change. diff --git a/docs/git/concepts/history-simplification.md b/docs/git/concepts/history-simplification.md new file mode 100644 index 00000000000..97c585b1f02 --- /dev/null +++ b/docs/git/concepts/history-simplification.md @@ -0,0 +1,191 @@ +--- +title: Git history simplification | VSTS & TFS +description: How git log history simplification works, and why it can lead to confusion. +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.assetid: 962a1ba7-6fa3-44ae-a9c9-d61804b76ebc +ms.manager: douge +ms.date: 06/01/2016 +ms.author: robrodbe +--- + +# How Git log history simplification works + +Git history simplification can be a confusing beast. +99% of the time you won't even know it exists, but every once in a while it will jump out of the dark corners of Git and bite you. +In this article we'll explore what history simplification is and how it can cause confusion when looking at file history. + +Let's start with a common scenario: + + 1. You push a change to a file and then merge the change into master. + 2. Some of your colleagues also merge their branches to master. + 3. You come back some time later and notice your changes are missing. + 4. Looking for the culprit, you go look at the file history and notice... your changes aren't even listed!? + +What is happening here is that Git commit history is a tree, and sometimes the chronological history is not the same as the actual file tree history. +This is particularly true in cases where a merge commit reverts a file back to its original state. +In that case, the default history view *won't actually show you all changes*, because technically the file didn't change. + +In the above scenario, Git realizes it can simplify the history and the "changes" you are most likely looking for are removed from the log. + +Unless you have run into it before, the result is often a lot of hair pulling and wondering *Where the heck did my changes go?* + +## History Simplification: On by Default + +By default, running the log command on a file: `git log file.txt` will automatically simplify history, possibly hiding some commits from its output. +You can read more details over at the [git log man page](http://git-scm.com/docs/git-log#_history_simplification). + +What makes this a tad more confusing is that history simplification does *not* occur if you just run `git log` (because you are looking at all changes there is nothing to simplify). + +In order to turn off history simplification, we need to use the command line switch `--full-history`. + +### An Example of History Simplification + +This is all nice and theoretical, but let's create our own example of history simplification so we can see how it works + First, let's look at a diagram of the history we are going to create: + +![Git Branches](./_img/git-log-history-simplification/history-simplification-branches.png) + +As you can see, we are going to: + +1. Create a file. +2. Add a line to that file in a branch (animals). +3. Add a different line to that file in another branch (fruit). +4. Merge branch *animals* back into master. +5. Merge branch *fruit* back into master, and choose the entire copy of the file from the fruit branch. +6. Check the history of the file. + +As you will see, Git is going to simplify the history for us. +The key here is step 5 -- we ignored all changes from the *animal* branch. +Git will notice that our file essentially *did not change* between step 1 and step 5, and so it will only show us *two history entries*. + +First we create the file and add it to our repo: +
        +    > cd sample
        +    > git init
        +    > echo "some content" > test.txt
        +    > git add test.txt
        +    > git commit -m "Initial commit"
        +
        + +Now we decide to append the text "donkeys" to the file in an animal branch: +
        +    > git checkout -b animals
        +    > echo "donkeys" >> test.txt
        +    > git commit -am "We have added an animal"
        +
        + +While we are experimenting, we decide maybe we want to go with fruit in our file instead, so we create a different branch and append the text "bananas" at the end of the file instead: +
        +    > git checkout master -b fruit
        +    > echo "bananas" >> test.txt
        +    > git commit -am "We have added a fruit"
        +
        + +Feeling satisfied with our changes, we decide to merge our animal branch back into master: +
        +    > git checkout master
        +    > git merge animals
        +
        + +Now let's look at the log for our `test.txt` file: +
        +    > git log test.txt
        +    
        +    commit 6b33d99b996c430a60c9552b79245d1aa8320339
        +    Author: hross <robrodbe@microsoft.com>
        +    Date:   Mon Feb 15 10:45:33 2016 -0500
        +
        +        We have added an animal
        +
        +    commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
        +    Author: hross <robrodbe@microsoft.com>
        +    Date:   Mon Feb 15 10:44:18 2016 -0500
        +
        +        Initial commit
        +
        + +So far so good, right? Nothing looks out of the ordinary in our log output. Now let's say we changed our minds and decided to merge our fruit branch: +
        +    > git merge fruit
        +    
        +    Auto-merging test.txt
        +    CONFLICT (content): Merge conflict in test.txt
        +    Automatic merge failed; fix conflicts and then commit the result.
        +
        + + Uh-oh, a merge conflict. + After some consideration, we decide to _use the entire `test.txt` file_ from our fruit branch. + Typically you would use some kind of text editor or merge tool, but we'll just recreate the entire file, since it's only two lines: +
        +    > echo "some content" > test.txt
        +    > echo "bananas" >> test.txt
        +    > git commit -am "Fixed merge conflict"
        +
        + +Now let's take a look at the history for our `test.txt` file: +
        +    > git log test.txt
        +    
        +    commit fdd4dfd816c4efebc5bdb240f49e934e299db581
        +    Author: hross <robrodbe@microsoft.com>
        +    Date:   Mon Feb 15 10:51:06 2016 -0500
        +
        +        We have added a fruit
        +
        +    commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
        +    Author: hross <robrodbe@microsoft.com>
        +    Date:   Mon Feb 15 10:44:18 2016 -0500
        +
        +        Initial commit
        +
        + +Sure enough, we don't see any changes from our first experiment in the log, nor do we see our merge! +Are they still there? +Did Git eliminate the changes entirely? +
        +    > git log --full-history test.txt
        +
        + +As you can see, although it simplified the log without the `full-history` flag, Git has kept all of our changes: +
        +    commit 5d0bb77a24e265dc154654fb3b5be331b53bf977
        +    Merge: 6b33d99 fdd4dfd
        +    Author: hross <robrodbe@microsoft.com>
        +    Date:   Mon Feb 15 10:59:34 2016 -0500
        +
        +        Fixed merge conflict
        +
        +    commit fdd4dfd816c4efebc5bdb240f49e934e299db581
        +    Author: hross <robrodbe@microsoft.com>
        +    Date:   Mon Feb 15 10:51:06 2016 -0500
        +
        +        We have added a fruit
        +
        +    commit 6b33d99b996c430a60c9552b79245d1aa8320339
        +    Author: hross <robrodbe@microsoft.com>
        +    Date:   Mon Feb 15 10:45:33 2016 -0500
        +
        +        We have added an animal
        +
        +    commit 206613ccd9a54b055b184c7b6c16f2ece8067e51
        +    Author: hross <robrodbe@microsoft.com>
        +    Date:   Mon Feb 15 10:44:18 2016 -0500
        +
        +        Initial commit
        +
        + +## Git History Simplification in a Nutshell + +Most of the time you will never notice history simplification. +But when a merge conflict goes wrong and you want to know what happened, you may find yourself looking at the `git log` history and wondering where your changes went. + +Now, instead of panicking, you know that: +* History simplification for files is turned on by default +* The `--full-history` flag will give you a more comprehensive file history + +**Bonus**: [VSTS has introduced a number of awesome history viewing options on the web](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/10/announcing-git-graph-and-advanced-filters-to-visualize-commit-history/). +If you don't want to go slogging through the command line, you can pull up the file you wish to view history for in our explorer. +You'll see a history filter where you can specify simple or non-simple history views: + +![Git Filters](./_img/git-log-history-simplification/filters.png) diff --git a/docs/git/concepts/history.md b/docs/git/concepts/history.md new file mode 100644 index 00000000000..57c043b1805 --- /dev/null +++ b/docs/git/concepts/history.md @@ -0,0 +1,80 @@ +--- +title: History in Git | VSTS & TFS +description: Overview of Git history +ms.assetid: 0094b6c0-d841-48e6-bb5d-82596198ef08 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 06/16/2017 +--- + +## Understand Git history + +Git stores history as a graph of snapshots — called commits — of the entire repository. +Each commit also contains a pointer to one or more previous commits. +Commits can have multiple parents, creating a history that looks like a graph instead of a straight line. +This difference in history is incredibly important and is the main reason users find Git confusing. + +## Commit history basics + +Start with a simple history example: a repo with 3 linear commits. + +![three commits in a line](_img/history/history-abc.png) + +Commit A is the parent of commit B, and commit B is the parent of commit C. +This history looks very similar to a CVCS. +The arrow pointing to commit C is a branch. +It's named `master` because that's the default name for the mainline branch in a Git repo. +Branches are pointers to specific commits, which is why branching is so lightweight and easy in Git. + +A key difference in Git compared to CVCS is that I have my own full copy of the repo. +I need to keep my local repository in sync with the remote repository by getting the latest commits from the remote repository. +To do this, I'll pull the master branch with the following command: + +`git pull origin master` + +This merges all changes from the master branch in the remote repository, which Git names `origin` by default. This pull brought one new commit, and `master` in my local repo moves to that commit. + +![a fourth commit, D, is added to the line](_img/history/history-abcd.png) + +## Understand branch history + +Now I want to make a change to my code. +It's common to have multiple active branches where you're working on different features in parallel. +This is in stark contrast to CVCS where new branches are heavy and rarely created. +The first step is to checkout to a new branch using the following command: + +`git checkout -b cool-new-feature` + +This is a shortcut combining two commands: `git branch cool-new-feature` to create the branch followed by `git checkout cool-new-feature` to begin working in the branch. + +![Branch cool-new-feature is added](_img/history/history-abcd-cool-new-feature.png) + +Two branches now point to the same commit. +I'll make a few changes on the `cool-new-feature` branch in two new commits, E and F. + +![added two new commits](_img/history/history-abcd-cool-new-feature-e-f.png) + +My commits are reachable by the `cool-new-feature` branch since I made them in that branch. +I'm done with my feature and want to merge it into `master`. +To do that I'll use the following command: + +`git merge cool-feature master` + +![after the merge](_img/history/history-abcd-cool-new-feature-e-f-merge.png) + +The graph structure of history becomes visible when there's a merge. +Git creates a new commit when I merged my branch into another branch. +This is a merge commit. +There aren't any changes included this merge commit since I didn't have conflicts. +If I had conflicts, the merge commit would include the changes needed to resolve those conflicts. + +## History in the real world + +Here is an example of Git history that more closely resembles code in active development on a team. +There are three people who merge commits from their own branches into the master branch around the same time. + +![console log of git graph](_img/history/gitlogconsole.png) + +Now that you understand how branches and merges create the shape of the graph, this shouldn’t be too scary! \ No newline at end of file diff --git a/docs/git/concepts/mapping-my-tfvc-actions-to-git.md b/docs/git/concepts/mapping-my-tfvc-actions-to-git.md new file mode 100644 index 00000000000..f7f82879fb7 --- /dev/null +++ b/docs/git/concepts/mapping-my-tfvc-actions-to-git.md @@ -0,0 +1,321 @@ +--- +title: Version Control - Map TFS version control (TFVC) actions to Git +description: Map TFS version control (TFVC) commands and workflows to Git version control. +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.assetid: 88493ec3-0687-44f6-b7e3-36d72be7aa60 +ms.manager: willys +ms.date: 09/09/2017 +ms.author: willys +author: willys +--- + +# Map TFVC actions to Git + +Do you plan to adopt Git, are familiar with [TFVC](../../tfvc/index.md) actions, and wondering how they map to [Git](../index.md)? Both are powerful and mature source control systems, but mapping common actions you have grown accustomed to in the one to the other can be a confusing experience. + +We will not delve deep into the [Git commands](http://git-scm.com/book/commands), as they are well documented in the product documentation, but show examples to help you make the right decisions, while moving through a typical create -> clone -> branch -> change -> commit -> push [workflow](http://www.git-scm.com/book/en/v2/Git-Branching-Branching-Workflows). + +## Start at the beginning by creating a new repo + +Each Team project can host [TFVC and Git repositories in the same team project](http://blogs.msdn.com/b/visualstudioalm/archive/2015/12/03/tfvc-and-git-repositories-in-the-same-team-project.aspx), creating one TFVC, and one or more Git repositories. + +![Create a new Team Services Git Repository](./_img/mapping-my-tfvc-actions-to-git/ActionMap-NewRepo.png) + +Once the repo is created, you are presented with step-by-step instructions to quickly get started. + +![Get Started with a new Team Services Git Repository](./_img/mapping-my-tfvc-actions-to-git/actionmap-newrepoinfo.png) + +Click on the `Create a ReadMe file' at the end of the instruction page, to give the repo context and to create some history. + +![Create a README to initialize a new Team Services Git repo](./_img/mapping-my-tfvc-actions-to-git/actionmap-readme.png) + +## Create a workspace and get latest + +When connecting to a TFVC repo for the first time, you typically create a workspace and get the latest code. so, how do you get started in Git? + +Similar to a workspace in TFVC you `clone` the Git repository to a folder on your machine. Cloning will download all of the contents and history of the repository, to your local machine. Once you have the cloned repo nearly all operations are performed locally, allowing you to work disconnected from the server, giving you a speed and performance advantage, and a full backup of the centralized repository. + +# [Command Line](#tab/command-line) + +``` +git clone https://demo-fabrikam.visualstudio.com/DefaultCollection/Fabrikam/_git/Mapping-TFVC-actions-to-Git +``` + +# [Visual Studio](#tab/visual-studio) + +![Connect to a Team Services Git repo in Visual Studio](./_img/mapping-my-tfvc-actions-to-git/actionmap-clone.png) + +--- + +You only need to clone once per repo, but like TFVC workspaces, you can have multiple clones to isolate in-progress work. However, branching is typically a better way to isolate changes. + +## Create a branch + +With Git you are always working in a branch and by default in the "master" branch. You are recommended to create multiple local branches, a process that takes seconds and allows you to seamlessly context switch between branches and work in isolation. Unlike TFVC branches, which are paths scoped, Git branches are repository scoped. They are lightweight, can be local only, or shared with others when you are ready to share your changes. + +Consider branching if you need to work in isolation, need to suspend your work, focus on new features, or if you are planning to conduct a Git [pull request](pull-requests.md). + +As a TFVC user, repeat a few times: + +- Branching is recommended! +- Git branching is **inexpensive**, **fast**, and **powerful**! +- Git encourages you to use **local** branches. +- Publish local branches to your centralized repository as needed. +- Always verify your branch context before making changes. +- Name the branch using a common convention such as users/alias/branchname for example: users/doris/newfeature + +Create and switch to a local topic branch, named *francis/demo-feature*. It is good practice to run a `git status` first, to verify that you are on the right branch to start with. + +# [Command Line](#tab/command-line) + +``` +git checkout -b francis/demo-feature +``` + +![Creating a new Git branch from the Windows command line](./_img/mapping-my-tfvc-actions-to-git/actionmap-createtopicbranch2.png) + + +# [Visual Studio](#tab/visual-studio) + +In Visual Studio, choose **Team Explorer > Branches > right click on branch > New Local Branch From...** + +![Creating a new branch from Visual Studio Team Explorer](./_img/mapping-my-tfvc-actions-to-git/actionmap-createbranch.png) + +--- + +## Make a change by adding files + +Similar to the TFVC experience, new files in the working folder are not automatically part of the repository. You stage your new files with the `git add` command, which is synonymous to performing an `add Items to Folder` operation in TFVC. + +Here's a [sample](http://vsarguidance.codeplex.com/downloads/get/739947) project to try adding files to your repo. + +# [Command Line](#tab/command-line) + +``` +git add +``` + +or + +``` +git add --all +``` + + +# [Visual Studio](#tab/visual-studio) + +In Visual Studio, choose **Team Explorer > Changes > Untracked Files > add individual files or add all** + +![Viewing Tracked and Untracked Changes in Team Explorer](./_img/mapping-my-tfvc-actions-to-git/actionmap-untracked.png) + +--- + + +Using the pre-baked sample, you will have thirteen new files that have been included and staged in the local repository. + +## View pending changes + +Wondering what changes are now sitting in your working environment? As before, the Git `status` command or the `Changes` view in the Visual Studio IDE will show changes in your working tree. + +# [Command Line](#tab/command-line) + +``` +git status +``` + +![Using Git Status to show staged changes](./_img/mapping-my-tfvc-actions-to-git/actionmap-status2.png) + +# [Visual Studio](#tab/visual-studio) + +In Visual Studio, choose **Team Explorer > Changes > Included Changes** + +![Using Visual Studio Team Explorer to show staged changes](./_img/mapping-my-tfvc-actions-to-git/actionmap-status-vs2.png) + +--- + +## Checkin changes and commit locally + +In TFVC you share your changes with a Check In, which sends your pending changes to the server. In Git, the process is a bit different. First, you commit to the local repository, creating a commit object (like a changeset), then you push to send those changes with the server. + +You commit the changes to your local repository using `git commit`, which feels like doing a `Checkin Pending Changes` in TFVC. A key difference is that the `git commit` commits your changes to the **local**, not the **remote** repository. + +# [Command Line](#tab/command-line) + +``` +git commit +``` + + +# [Visual Studio](#tab/visual-studio) + +In Visual Studio, choose **Team Explorer > Changes > Commit** + +![Creating a Git commit in Team Explorer](./_img/mapping-my-tfvc-actions-to-git/actionmap-commit.png) + +--- + +## Checkin changes with the server/remote repo + +First you need to publish your local francis/demo-feature branch to the remote server, which includes all committed changes. + +# [Command Line](#tab/command-line) + +``` +git push --set-upstream origin francis/demo-feature +``` + + +# [Visual Studio](#tab/visual-studio) + +In Visual Studio, choose **Team Explorer > Branches > right click on local branch > Publish Branch** + +![Pushing a branch to remote with Team Explorer](./_img/mapping-my-tfvc-actions-to-git/actionmap-publishbranch.png) + +--- + +To synchronize further updates in your local with the remote repository, you need to push your changes using `git push`. The recommended practise using the git command or the Visual Studio IDE is to: + +- `fetch` to download content and preview incoming changes from others. +- `pull` to download and then merge changes from others. +- `push` to share your local changes. + +## View history + +To see the commit you just created you can review the local history. + +# [Command Line](#tab/command-line) + +For a compact history, use: + +``` +git log --oneline +``` + +For a detailed, view, use: + +``` +git log +``` + +![Using Git log to review branch history](./_img/mapping-my-tfvc-actions-to-git/actionmap-history2.png) + +As shown above, `git log` lists the author, email, date written and the commit SHA-1 checksum. As a TFVC user you may want to use the `--stat` option to include more information, such as file name and change statistics. + +# [Visual Studio](#tab/visual-studio) + +You can retrieve a history view of the **local** repository in the Visual Studio IDE. + +In Visual Studio, choose **Team Explorer > Branches | Changes | Sync > Actions > View History** + +![Viewing History in Team Explorer](./_img/mapping-my-tfvc-actions-to-git/actionmap-history-ide.png) + + +--- + + +You can also view the history of the **centralized** repository using the VSTS web portal. + +In the VSTS web portal, choose **CODE > History** or **CODE > Explorer > History** + +![Viewing Branch history in VSTS](./_img/mapping-my-tfvc-actions-to-git/ActionMap-History-Web.png) + + + +At this point you have successfully explored the create -> clone -> branch -> change -> commit -> push [workflow](http://www.git-scm.com/book/en/v2/Git-Branching-Branching-Workflows), based on common TVFC actions. + +You also have the option of issuing a [pull request](pull-requests.md), to publish and stage your changes on the server/remote repo at this point. + +## Other actions + +### Switch branches + +When working with Git you do not change branches by switching to separate folders and locations on your machine. You simply change the context by doing a `checkout`, making the entire working directory match the selected branch or commit. **Fast** and **simple**! + +### Command line + +``` +git checkout +``` + + +If you forgot what branches you have in your local repository, use `git branch` to list the default and known branches. + +Keep in mind which branch you are working on! When you work with multiple branches in Git, you switch branches in place in the same working directory. Switching between branches is a very fast operation, and making sure you are on the right branch at all times is just good practice. + +### Get latest version + +There are lots of reasons to want to get updates. For example, when coming back from a well deserved vacation, or needing to switch context to another project, you need to refresh your development machine with the latest version of the codebase. + +### Command line + +``` +git pull +``` + +or + +``` +git fetch +``` + +followed by + +``` +git merge FETCH_HEAD +``` + + +Always get the latest version and resolve merge conflicts locally. + +### Undo local changes + +There may be a valid reason to revert all revisions you made in your local repository and reset your working environment to the latest version from the remote repository. + +### Command line + +``` +git reset --hard HEAD +``` + +followed by +``` +git pull origin +``` + +followed by +``` +git clean -xdf +``` + + +The scenario is anonymous to doing a `Get > Latest Version` with the `Overwrite writeable files that are not checked out` and `Overwrite all files if the local version matches the specified version` options in TFVC. + +Alternatively you can manually delete your local repo – after making a validated copy off course – and then `clone` the repository again. + +This is by no means the end of actions and options available to Git users. Here are some useful reference sites for further reading: + +- Git commands covered herein, refer to [git documentation](http://git-scm.com/documentation) +- [Think like (a) Git](http://think-like-a-git.net), a Guide for the Perplexed. +- [How to undo (almost) anything with Git](https://github.com/blog/2019-how-to-undo-almost-anything-with-git), by Joshua Wehner + +## Q&A + +### What about sync? + +"*Does the Visual Studio IDE `Commit and Sync` not magically do all this?*", you may be asking yourself. + +![Commit and sync in Team Explorer](./_img/mapping-my-tfvc-actions-to-git/actionmap-sync.png) + +With magic comes responsibility! Many users dislike the `sync` as it can sometimes mess up your local history and add a merge commit on top of your current commit. Once you are in a bad state, you have to revert to the command line as there is currently no reset support in the IDE. + +Authors: Jesse Houwing, Martin Hinshelwood, Mike Fourie, and Willy Schaub + +*(c) 2015 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* \ No newline at end of file diff --git a/docs/git/concepts/pull-requests.md b/docs/git/concepts/pull-requests.md new file mode 100644 index 00000000000..42481aa1cc7 --- /dev/null +++ b/docs/git/concepts/pull-requests.md @@ -0,0 +1,61 @@ +--- +title: Pull requests | VSTS & TFS +description: Pull requests +ms.assetid: 6ba68828-c05d-4afa-b29f-9ca39be5a0ce +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 06/16/2017 +--- + +# Get feedback with pull requests + +Pull requests combine the review and merge of your code into a single collaborative process. +Once you're done fixing a bug or new feature in a branch, create a new pull request. +Add the members of the team to the pull request so they can review and vote on your changes. + +VSTS has a [rich pull request experience](../pull-requests.md) that's easy to use and scales to your needs. +Use pull requests to review works in progress and get early feedback on changes. +There's no commitment to merge the changes as the owner can abandon the pull request at any time. + +## Get your code reviewed + +The code review done in a pull request isn't just to find obvious bugs. +That's what your tests are for. +A good code review catches less obvious problems that could lead to costly issues later. +Code reviews help protect your team from bad merges and broken builds that sap your team's productivity. +The review catches these problems before the merge, protecting your important branches from unwanted changes. + +Cross-pollinate expertise and spread problem solving strategies by using a wide range of reviewers in your code reviews. +Diffusing skills and knowledge makes your team stronger and more resilient. + +## Give great feedback + +High quality reviews start with high quality feedback. +The keys to great feedback in a pull request are: + +* Have the right people review the pull request +* Make sure that reviewers know what the code does +* Give actionable, constructive feedback +* Reply to comments in a timely manner + +When assigning reviewers to your pull request, make sure you select the right set of reviewers. +You want reviewers that will know how your code works, but try to also include developers working in other areas so they can share their ideas. +Provide a clear description of your changes and provide a build of your code that has your fix or feature running in it. + +Reviewers should make an effort to provide feedback on changes they don't agree with. +Identify the the issue and give a specific suggestions on what you would do differently. +This feedback has clear intent and is easy for the owner of the pull request to understand. +The pull request owner should reply to the comments, accepting the suggestion or explaining why the suggested change isn't ideal. +Sometimes a suggestion is good, but the changes are outside the scope of the pull request. +Take these suggestions and create new work items and feature branches separate from the pull request to make those changes. + +## Protect branches with policies + +There are a few critical branches in your repo that the team relies on always being in good shape, such as your `master` branch. +[Require pull requests](../branch-policies.md) to make any changes on these branches. +Developers pushing changes directly to the protected branches will have their pushes rejected. + +Add additional conditions to your pull requests to enforce a higher level of code quality in your key branches. +A clean build of the merged code and approval from multiple reviewers are some extra requirements you can set to protect your key branches. diff --git a/docs/git/create-a-readme.md b/docs/git/create-a-readme.md new file mode 100644 index 00000000000..2600bdab09e --- /dev/null +++ b/docs/git/create-a-readme.md @@ -0,0 +1,63 @@ +--- +title: Create a readme for your Git repo | VSTS & TFS +description: Tips, advice, and suggestions on how to create a great readne file for your Git repo. +ms.assetid: fcd84ee1-909c-4837-9c39-bf036afe6232 +toc: show +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 10/18/2016 +--- + +# Create a README for your repo + +Your Git repo should have a readme file so that viewers know what your code does and how they can get started using it. +Your readme should speak to the following audiences: + +- Users that just want to run your code +- Developers that want to build and test your code. Developers are also users. +- Contributors that want to submit changes to your code. Contributors are both developers and users. + +Write your readme in [Markdown](../reference/markdown-guidance.md) instead of plain text. Markdown makes it easy to format text, include images, and link as needed to additional documentation from your readme. + +Here are some great readmes that use this format and speak to all three audiences, for reference and inspiration: + +- [ASP.NET Core](https://github.com/aspnet/Home) +- [Visual Studio Code](https://github.com/Microsoft/vscode) +- [Chakra Core](https://github.com/Microsoft/ChakraCore) + +## Create an intro + +Start your readme off with a short explanation describing your project. Add a screenshot or animated GIF in your intro if your project has a user interface. +If your code relies on or another application or library, make sure to state those dependencies in the intro or right below it. +Apps and tools that run only on specific platforms should have the supported operating system versions noted in this section of the readme. + +## Help your users get started + +Guide users through getting your code up and running on their own system in the next section of your readme. +Stay focused on the essential steps to get started with your code. +Link to the required versions of any prerequisite software so users can get to them easily. +If you have complex setup steps, document those outside your readme and link to them. + +Point out where to get the latest release of your code. A binary installer or instructions on using your code through packaging tools is best. +If your project is a library or an interface to an API, put a code snippet showing basic usage and show sample output for the code in that snippet. + +## Provide build steps for developers + +Use the next section of your readme to show developers how to build your code from a fresh clone of the repo and run any included tests. +Give details about the tools needed to build the code and document the steps to configure them to get a clean build. +Break out dense or complex build instructions into a separate page in your documentation and link to it if needed. + +Provide the commands to run any test cases provided with the source code after the build is successful. +Developers lean on these test cases to ensure that they don't break your code as they make changes. +Good test cases also serve as samples developers can use to build their own test cases when adding new functionality. + +## Help users contribute + +The last section of your readme helps users and developers get involved to report problems and suggest ideas to make your code better. +Users should be linked to channels where they can open up bugs, request features, or get help using your code. + +Developers need to know what rules they need to follow to contribute changes, such as coding/testing guidelines and pull request requirements. +If you require a contributor agreement to accept pull requests or enforce a community code of conduct, this process should be linked to or documented in this section. +State what license the code is released under and link to the full text of the license. \ No newline at end of file diff --git a/docs/git/create-branch.md b/docs/git/create-branch.md new file mode 100644 index 00000000000..566eb4abbc8 --- /dev/null +++ b/docs/git/create-branch.md @@ -0,0 +1,37 @@ +--- +title: Create a new Git branch from the web | VSTS & TFS +description: Use the branches page to create a new Git branch in VSTS or TFS +ms.assetid: 13783230-7762-4fd0-b392-5187c7f9fe1e +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/23/2016 +--- + +# Create a new Git branch +#### VSTS | TFS 2017 + +>[!TIP] +> Need help creating a new Git branch in your local repo from Visual Studio or the command line? Visit the [Git tutorial](tutorial/branches.md). + +>[!IMPORTANT] +> Users of previous TFS releases will not have the **Branches** tab in the **Code** view. Create a new branch in TFS from the **Code** view by selecting the drop-down next to the branch name and then selecting **New branch**. + + +## Create a new branch from the web + +0. From your Team Project, select the **Code** view. Make sure you're working with the right repo, then select **Branches**. + + ![Branches nav view in the web interface](_img/branches/branches_nav.png) + +0. Select the **New branch** button in the upper right corner of the page. + +0. In the **Create a branch** dialog, enter a name for your new branch, select a branch to base the work off of, and associate any work items. + + ![Create a branch with the new branch dialog](_img/branches/newbranch_dialog.png) + +0. Select **Create branch**. + +>[!TIP] +> You will need to [fetch](tutorial/pulling.md) the branch before you can see it and swap to it in your local repo. \ No newline at end of file diff --git a/docs/git/create-new-repo-client.md b/docs/git/create-new-repo-client.md new file mode 100644 index 00000000000..268c4788a01 --- /dev/null +++ b/docs/git/create-new-repo-client.md @@ -0,0 +1,12 @@ +--- +title: Creating a new repo from your IDE | VSTS & TFS +description: Using an IDE to create a new repo +ms.assetid: fd952db7-5d9b-4b01-b103-a94b4dcc40f1 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 06/16/2017 +--- + +PLACEHOLDER diff --git a/docs/git/create-new-repo.md b/docs/git/create-new-repo.md new file mode 100644 index 00000000000..52942181a3e --- /dev/null +++ b/docs/git/create-new-repo.md @@ -0,0 +1,106 @@ +--- +title: Create a new Git repo in your project | VSTS & TFS +description: Create a new Git repo in a VSTS or Team Foundation Server Project +ms.assetid: 9c6fabfa-ae17-4e65-93a2-9e476f9f88ba +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 09/08/2017 +--- + +# Create a new Git repo in your project + +#### VSTS | TFS 2015 & TFS 2017 + +VSTS and TFS projects contain Git repositories, work items, builds, and releases. You can use Git repos in your projects to manage your source code as your project grows. This guide shows you how to create a Git repo using the web portal for either Visual Studio Team Services (VSTS - hosted on Azure) or Team Foundation Server (TFS - on-premises). + +## Prerequisites + +* A VSTS account. If you don’t have one, you can [sign up](../accounts/create-account-msa-or-work-student.md) for one for free. Each account includes free, unlimited private Git repositories. +* Git command line tools: + * [Install Git for Windows](https://git-scm.com/download/win), which includes [Git Credential Manager - Windows](set-up-credential-managers.md#windows) + * [Install Git for macOS and Linux](https://git-scm.com/downloads). For information on Git credential managers for these platforms, see [Install the Git Credential Manager - macOS and Linux](set-up-credential-managers.md#macos-and-linux) + +## Create a repo using the web portal + +0. Navigate to your project by browsing to `https://.visualstudio.com` and selecting the name of your project. You can select it from the **All** projects list, or from the **Recent** projects list if you have accessed it recently. + + ![Select project](_img/repo-mgmt/select-vsts-project.png) + +0. In the **Project** area in the web portal, select **Code**, then select the drop-down next to the current repo name and choose **New Repository**. + + ![Choose new repository from the web interface](_img/repo-mgmt/create-vsts-repo.png) + +0. In the **Create a new repository** dialog, verify that Git is the repo type and enter a name for your new repo. You can also choose to add a README and create a .gitignore for the type of code you plan to manage in the repo. A [README](create-a-readme.md) contains information about the code in your repo, and a [.gitignore](./tutorial/ignore-files.md) file tells Git which types of files to ignore, such as temporary build files from your development environment. + + ![Set options for your new repo in the Create a Git repo dialog](_img/repo-mgmt/create-a-new-repository.png) + +0. When you're happy with the repo name and choices, select **Create**. + + A new empty Git repo is now created in your project. + + - If you created an empty repo (no README or .gitignore), you'll see instructions on how to [clone](tutorial/clone.md) the repo to your computer or [push](tutorial/pushing.md) code in an existing repo into the newly created one. + - In this example you created a README and a .gitignore, so you'll see an overview of the files in your repo, and you can [clone](tutorial/clone.md) the repo using the **Clone** link on the upper right of the page to get working with a local copy of the repo immediately. + +## Clone the repo to your computer + +To work with a Git repo, you clone it to your computer. Cloning a repo creates a complete local copy of the repo for you to work with, and downloads all [commits](./tutorial/commits.md) and [branches](./tutorial/branches.md) in the repo and sets up a named relationship with the repo on the server. Use this relationship to interact with the existing repo, pushing and pulling changes to share code with your team. + +0. Select **Clone** in the upper-right corner of the **Code** window and copy the **Clone URL**. + + ![Retrieve the clone URL](_img/repo-mgmt/clone-git-repo.png) + +0. Open the Git command window (Git Bash on Git for Windows), navigate to the folder where you want the code from the repo stored on your computer, and run `git clone` followed by the path copied from the **Clone URL** in the previous step, as shown in the following example. + + ``` + git clone https://contoso-ltd.visualstudio.com/MyFirstProject/_git/contoso-demo + ``` + After running the previous command, Git downloads a copy of the code, including all [commits](./tutorial/commits.md) and [branches](./tutorial/branches.md) from the repo, into a new folder for you to work with. + + Keep this command window open, as you'll use it in the following steps. + +## Work with the code + +In this step, we'll make a change to the files on your computer, commit the changes locally, push the commit up to the repo that is stored on the server, and view the changes there. + +0. Browse to the folder on your computer where you cloned the repo and open the `README.md` file in your editor of choice. + +0. Make some changes, for example add `This is my first edit.` to the file, and save and close the file. + +0. In the Git command window, navigate to the `contoso-demo` directory by entering the following command: + + ``` + cd contoso-demo + ``` + +0. Commit your changes by entering the following command in the Git command window: + + ``` + git commit -a -m "My first commit" + ``` + + When using `git commit`, `-a` means to commit all changed files, and `-m` specifies a commit message. + +0. Push your changes up to the Git repo on the server by entering the following command into the Git command window: + + ``` + git push + ``` + +0. Switch back to the web portal and select **History** from the **Code** view to view your new commit. The new repo has two commits: the first commit where the README and .gitignore were added when the repo was created, and the commit you just made. + + ![View commit history](_img/repo-mgmt/commit-push.png) + +0. Switch to the **Files** tab and click on the README file to view your changes. + + ![View changed file](_img/repo-mgmt/readme-changed-file.png) + +## Next steps + +> [!div class="nextstepaction"] +> [New to Git repos? Learn more](https://www.visualstudio.com/learn/set-up-a-git-repository/) + +> [!div class="nextstepaction"] +> [Learn more about using Git in the Git tutorial](tutorial/gitworkflow.md) \ No newline at end of file diff --git a/docs/git/create-repo-intellij.md b/docs/git/create-repo-intellij.md new file mode 100644 index 00000000000..e10c3d51a1b --- /dev/null +++ b/docs/git/create-repo-intellij.md @@ -0,0 +1,199 @@ +--- +title: VSTS Plugin for IntelliJ IDEA and Android Studio | VSTS & TFS +description: Intro to the IntelliJ plugin available for Visual Studio Team Services. +ms.assetid: +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 09/08/2017 +--- + +# VSTS Plugin for IntelliJ IDEA and Android Studio + +#### VSTS | TFS 2015 & TFS 2017 + +IntelliJ IDEA is an IDE produced by JetBrains. You can find out more about it at [https://www.jetbrains.com/idea/](https://www.jetbrains.com/idea/). +The VSTS Plugin for IntelliJ allows you to connect to your Git repositories on VSTS and Team Foundation Server (TFS) in a seamless and intuitive way. +You can also use this plugin to import projects into VSTS or create pull requests in your VSTS/TFS Git repository. + +In this guide, we show you how to create a VSTS Git repo using the VSTS web portal, add some sample code, and then clone the repo and create pull requests all from within IntelliJ IDEA. + +## Prerequisites +To complete the steps in this guide you need: + +* A VSTS account. If you don’t have a VSTS account, you can [sign up](../accounts/create-account-msa-or-work-student.md) for one for free. Each account includes free, unlimited private Git repositories. +* IntelliJ IDEA installed on your machine. If you don't have it, [get IntelliJ IDEA](https://www.jetbrains.com/idea). +* The VSTS plugin for IntelliJ. See [IntelliJ Plugin download page](https://java.visualstudio.com/Downloads/IntelliJPlugin/Index) for installation instructions. This plugin is compatible with IntelliJ IDEA Ultimate and Community editions, Android Studio, RubyMine, WebStorm, PhpStorm, PyCharm, AppCode, MPS, 0xDBE, and CLion. +* Git command line tools. + * To install Git for Windows, including Git Credential Manager, see [Install the Git Credential Manager - Windows](set-up-credential-managers.md#windows). + * To install Git for macOS and Linux, see [Install the Git Credential Manager - macOS and Linix](set-up-credential-managers.md#macos-and-linux). + +## Create a repo +0. Navigate to your VSTS project by browsing to `https://.visualstudio.com` and selecting the name of your project. You can select it from the **All** projects list, or from the **Recent** projects list if you have accessed it recently. + + ![Select project](_img/create-repo-intellij/select-vsts-project.png) + +0. In the **Project** area in the web portal, select **Code**, then select the drop-down next to the current repo name and choose **New Repository**. + + ![Choose new repository from the web interface](_img/create-repo-intellij/create-vsts-repo.png) + +0. In the **Create a new repository** dialog, verify that Git is the repo type, enter **DeepSpace** for your new repo name, and click **Create**. + + ![Set options for your new repo in the Create a Git repo dialog](_img/create-repo-intellij/create-a-new-repository.png) + +## Add sample code to your repo + +0. Select **Clone** in the upper-right corner of the **Code** window and copy the **Clone URL**. + + ![Retrieve the clone URL](_img/create-repo-intellij/clone-git-repo.png) + +0. Open the Git command window (Git Bash on Git for Windows), navigate to the folder where you want the code from the repo stored on your computer, and run `git clone` followed by the path copied from the **Clone URL** in the previous step, as shown in the following example. + + ``` + git clone https://contoso-ltd.visualstudio.com/MyFirstProject/_git/DeepSpace + ``` + +0. Switch to the DeepSpace folder by running the following command. + + ``` + cd DeepSpace + ``` + + Keep this window open as you'll use it for subsequent steps. + +0. Download the [DeepSpace sample code](https://deepspace.blob.core.windows.net/downloads/DeepSpace.zip) and extract it to the local directory on your computer where you cloned the DeepSpace repo. + +0. Switch back to your Git command window and run the following command, which commits the sample code files to your local repo. + + ``` + git add --all + ``` + + You may see some warnings stating the line feeds will be replaced with carriage return line feeds (i.e. Warning: LF will be replaced by CRLF). These warnings can be ignored. + +0. Commit the files to the local repo by running the following command. + + ``` + git commit -m "Committing DeepSpace sample files" + ``` + +0. Run the following command to push the commit of DeepSpace sample files up to your VSTS DeepSpace repo. + + ``` + git push + ``` + +0. Switch back to the VSTS web portal and refresh, and you can see the files that were added. + + ![DeepSpace files](_img/create-repo-intellij/deep-space-files.png) + + + +## Clone your repo in IntelliJ +Now that we've got a VSTS repo with some sample code, let's take a look at how we can work with the code from IntelliJ IDEA. To clone your VSTS repo in IntelliJ is extremely simple. You don't even need to know the URL for the repo. + + +0. Open IntelliJ IDEA and select **Check out from Version Control** and then choose **Team Services Git**. + + ![Clone repo](_img/create-repo-intellij/clone-context-menu.png) + +0. Next just sign in to VSTS... + + ![VSTS Sign-in](_img/create-repo-intellij/vsts-sign-in.png) + +0. When you click **Sign in**, you will be presented with the standard VSTS sign in UI. +Once signed in, you should see the list of all repositories you have access to on VSTS. +Choose the correct repo, **DeepSpace**, and click the **Clone** button. +(You may also want to choose where on your hard drive the repo is cloned to by changing the Parent Directory.) + + ![Clone](_img/create-repo-intellij/clone.png) + +0. After the clone finishes, IntelliJ will ask you if you want to open the project. +Click **Yes** and you should end up with the **DeepSpace** project opened in IntelliJ IDEA. + + ![DeepSpace project](_img/create-repo-intellij/deep-space-project.png) + + + +## Make some changes in IntelliJ +0. Start by making sure the project builds using **Build** > **Make project**. If you are prompted to add an SDK for the project, +simply add the latest Java JDK installed on your machine. + + If you want to run the project now to see what it does, +you can do the following: + 0. From the DeepSpace root folder in your git repo, run the command `mvn jetty:run` (this requires maven to be installed) + 0. From a browser, go to http://localhost:3030/ + + You should see stars and planets flying by! If you look closely, you may notice that Earth does not fly by. + +0. In our **DeepSpace** example, there are some code sections that have been commented out. +If you open the `src/main/java/com.microsoft.tfs.demo/ImageService.java` file in IntelliJ, you can see one of the sections. + + ![Earth commented out](_img/create-repo-intellij/earth-commented-out.png) + + Let's fix this section of code locally. Typically, when working in a Git repo, you should create a branch for your work and commit to that branch. Create a branch through IntelliJ using the built-in **VCS** > **Git** > **Branches** window. When prompted, use the branch name **fixBugs**. Once we have a branch to make our changes in, we can uncomment the code and rebuild the project. If you follow the instructions above to run the program again, you should see the Earth fly by. + +0. Now that our changes are built and tested, we can commit them locally using the **VCS** > **Commit Changes** menu. In the commit dialog, you will see a VSTS button above the commit message text box. Click on that button to view your list of work items +assigned to you. Select the **Add Missing Earth** work item and click **OK**. You will see the commit message text box populate with the work item's type, number, and title. This will associate the work item to this commit for traceability in the future. + + ![Commit Earth](_img/create-repo-intellij/commit-earth.png) + + Note that this change is only done locally; it hasn't been changed in our VSTS repo yet. + +## Create a pull request +You can push your local branch to the server and create a pull request for your team to review. +Our plugin helps you create the pull request based on your current context within IntelliJ. +This saves you several steps and eliminates the need for you to switch to your browser to create the pull request. + +To accomplish this, simply select **VCS** > **Git** > **Create Pull Request**. This opens up the **Create Pull Request** dialog. +This dialog provides a lot of information including the files that have changed and the commits that will be pushed. +You can give the pull request a title and a description. + +![Create pull request](_img/create-repo-intellij/create-pull-request.png) + +After you click **Create Pull Request**, you should receive a notification that the pull request was created. +It also contains a link to the pull request in case you want to add specific reviewers or comments. +Once the code reviews are done, you can merge the pull request into master. + +## Check build status +After you have merged your changes into master, you can check if your CI build has succeeded from within IntelliJ. In the bottom right corner, +there is an icon that displays your build status to you. If you see a green checkmark, that means your build has succeeded. If you see a red X, +then your build failed. If you see a gray question mark, your build was not found or your credentials may have expired. + +![Build status icons](_img/create-repo-intellij/build-status-icons.png) + + +You can click on the icon for more options such as viewing build details, queuing a new build, and updating the status manually. + +![Build status menu](_img/create-repo-intellij/build-status-menu.png) + + + +## View Pull Requests and Work Items +Under the **Version Control** menu, a **Pull Request** tab and **Work Items** tab exist to allow you to easily view the information you need without leaving +the IDE. The **Pull Request** tab shows you the current pull requests created by you and assigned to you along with their status. The tab also +gives you the ability to create and/or abandon pull requests. + +![Pull request menu](_img/create-repo-intellij/build-status-menu.png) + + + +Under the **Work Items** tab, you can view the work items based on queries that you have created or use the default query to see work items +that are assigned to you. You can also create a branch based off of a work item so that you can associate a work item with branch for +future traceability purposes. + +![Work items menu](_img/create-repo-intellij/work-items-menu.png) + + + + +## Next Steps + +> [!div class="nextstepaction"] +> [Check out the entire DeepSpace IntelliJ tutorial](https://java.visualstudio.com/Docs/gettingstarted/intro) + +> [!div class="nextstepaction"] +> [View the IntelliJ plugin FAQ](https://java.visualstudio.com/Docs/tools/intelliJ#_frequently-asked-questions-faq) + diff --git a/docs/git/delete-branch.md b/docs/git/delete-branch.md new file mode 100644 index 00000000000..7458dbcde69 --- /dev/null +++ b/docs/git/delete-branch.md @@ -0,0 +1,26 @@ +--- +title: Delete a branch in your Git repo | Team Services & TFS +description: Use the branches page to delete a Git branch in Team Services or Team Foundation Server +ms.assetid: c033e522-5729-49b6-a27c-f13c9f0e57ba +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: sdanie +ms.author: routlaw +ms.date: 09/07/2017 +--- + +# Delete a Git branch from the web interface + +#### Team Services | TFS 2017 + +>[!IMPORTANT] +> This topic covers deleting a Git branch via the web in Team Services and TFS 2017. If you need to delete a Git branch in your own repo from Visual Studio or the command line, +> follow [these steps](tutorial/branches.md#delete-a-branch) in the [Team Services Git tutorial](tutorial/gitworkflow.md). + +0. Open your repo on the web and select the **Branches** view. + +0. Locate your branch on the branches page. If you don't see it, select **All** to view all branches and filter the branches using the **Search all branches** box in the upper right. + +0. Select the trashcan icon next to the branch you want to delete. + + ![Delete your branch in the Team Services/TFS web interface](_img/branches/delete_branch.png) \ No newline at end of file diff --git a/docs/git/delete-existing-repo.md b/docs/git/delete-existing-repo.md new file mode 100644 index 00000000000..5c6221e0f72 --- /dev/null +++ b/docs/git/delete-existing-repo.md @@ -0,0 +1,38 @@ +--- +title: Delete a Git repo from your team project | VSTS & TFS +description: Remove an existing Git repo in VSTS or Team Foundation Server team project +ms.assetid: 271f8473-e77d-4a95-80d9-0bd347de7533 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 12/15/2016 +--- + +# Delete a Git repo from your team project +#### VSTS | TFS 2015 & TFS 2017 + +Remove unused Git repos from your team project when they are no longer needed. + +>[!TIP] +> Consider [renaming](repo-rename.md) the repo and [locking](lock-branches.md) its default branch instead of removing it. The [commit history](tutorial/history.md) of the repo will be lost when it is deleted. + +>[!IMPORTANT] +> You cannot remove a repo if it is the only Git repo in the Team Project. If you need to delete the only Git repo in a Team Project, [create a new Git repo](create-new-repo.md) first, then delete the repo. +> +> You must have [Delete Repository permissions](../security/set-git-tfvc-repository-permissions.md#git-repository) to delete a repo from a team project. + +## Delete a Git repo from the web + +0. Select the settings icon in the web to bring up the team project administration page. + + ![open up the administrative area of the team services web portal for your team project](_img/pull-requests/gear_icon_settings.png) + +0. Select **Version Control**. + +0. Select the Git repository to remove from the list shown and select the **...** next to the name. Choose **Delete Repository** + + ![remove the team services repo using the ellipses link next to the repo name](_img/repo-mgmt/remove-repo.png) + +0. Confirm the deletion of the repository by typing the repo's name and selecting **Delete**. + diff --git a/docs/git/find-a-file.md b/docs/git/find-a-file.md new file mode 100644 index 00000000000..48e58a10e59 --- /dev/null +++ b/docs/git/find-a-file.md @@ -0,0 +1,27 @@ +--- +title: Find a file in your Git repo | VSTS & TFS +description: Search your Git repo in VSTS or TFS for a specific file or folder +ms.assetid: 228495b9-f3cb-484a-a798-d026d650fa26 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 01/09/2017 +--- + +# Find a file or folder in your Git repository +#### VSTS | TFS 2017 + +Quickly find and navigate to a file or folder in your Git repository using the path control in the **Code** hub. + +![Path Control in Code Hub](_img/find-a-File/FindaFile.png) + +## Usage + +While browsing your Git repository, start typing in the path control box to search for the file or folder you are looking for. The interface lists the results starting from your current folder followed by matching items from across the repo. + +![SearchResultsExperience](_img/find-a-File/FindaFileResults.png) + +### Hotkey navigation + +Launch the Find a File experience from the keyboard with the `t` shortcut from the **Files** or **History** tabs in the **Code** hub. Use the up and down arrows to cycle through the results, and click or press Enter to open a result. Press `Esc` to close the Find a File experience. diff --git a/docs/git/gcm-ssh-passphrase.md b/docs/git/gcm-ssh-passphrase.md new file mode 100644 index 00000000000..a048c6075a4 --- /dev/null +++ b/docs/git/gcm-ssh-passphrase.md @@ -0,0 +1,21 @@ +--- +title: Understand SSH passphrases +description: Understand what a SSH passphrase is and why the Git Credential Manager for Windows needs it. +ms.assetid: 266f5d0e-78b9-4911-9bdf-ab509f17ff23 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/11/2016 +--- + +# SSH passphrases + +SSH uses private / public key pairs to protect your communication with the server. +SSH passphrases protect your private key from being used by someone who does not know the passphrase. +Without a passphrase, anyone who gains access to your computer has the potential to copy your private key. This includes family members, cowokers, system administrators, as well as hostile actors. +A secure passphrase helps keep your private key from being copied and used even if your computer is compromised. + +The downside to passphrases is that you need to enter it every time you create a connection using SSH. +You can [temporarily cache your passphrase using ssh-agent](use-ssh-keys-to-authenticate.md#questions-and-troubleshooting) so you don't have to enter it every time you connect. + diff --git a/docs/git/get-started-vs2013.md b/docs/git/get-started-vs2013.md new file mode 100644 index 00000000000..3d077cc25fb --- /dev/null +++ b/docs/git/get-started-vs2013.md @@ -0,0 +1,224 @@ +--- +title: Get started with Git and Visual Studio 2013 | VSTS & TFS +description: Get started using Git in Visual Studio +toc: show +ms.assetid: BFDE8FAF-63B8-4BC9-9A24-32EE2CA73C13 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 08/28/2017 +--- + +# Get started using Git in Visual Studio + +> [!div class="op_single_selector"] +> - [Visual Studio 2017](gitquickstart.md) +> - [Visual Studio 2015 Update 2](gitquickstart-vs2015.md) +> - [Visual Studio 2013 and Visual Studio 2015 RTM/Update 1](get-started-vs2013.md) + +#### VSTS | TFS 2015 + +Whether your software project is large, small, or brand new, in most cases you'll be better off if you use version control as early as possible. +Here, we'll show you how to get started with Git, a distributed version control system. +If you want to work in a centralized version control system, you can instead use [Team Foundation Version Control](../tfvc/overview.md) (TFVC). + +## Create a team project for your repositories +Team projects hold your repositories, backlogs, and builds. When you create a team project, a new repository will be automatically created for you. + +If you don't already have a team project [create a new team project](#create_team_project) + +## Install Git client tools +To use Git, you'll need to have the client tools installed on your computer. + +[//]: # (Fix the 2015 link) +* Install [Visual Studio 2013](http://go.microsoft.com/fwlink/?LinkId=309297) or [Visual Studio 2015](https://www.visualstudio.com/en-us/downloads/visual-studio-2015-downloads-vs) +* Or, if you're not using Visual Studio, [install the latest command line tools](http://git-scm.com/downloads) + +[//]: # (The walkthrough below shows the steps for getting started with Git using Visual Studio. If you're not using Visual Studio, check out one of these topics:) + +[//]: # (Get started using command line) +[//]: # (Using Git with Eclipse) + +[//]: # (Update when new onboarding is in place) +## Clone +To get started, you'll first need to clone your repo to your local machine. Once you have a local clone, you can start adding code to your repo. + +0. Go to your team's project page (`https://{youraccount}.visualstudio.com/DefaultCollection/{yourteamproject}`) and then open Visual Studio to connect to your team project. Click **Allow** if prompted to open Visual Studio. + + ![Click Home, then Open in Visual Studio](_img/get-started/GoHomeOpenInVisualStudio.png) + +0. Sign in to VSTS from Visual Studio. + +0. Clone the repository to your computer. + + ![Click the Clone Repository link](_img/get-started/VSClone1.png) + +0. The clone URL is automatically populated and a default local path is provided. Change the local path to the location where you want to store your repo. Click **Clone** to start copying the repo locally. + + ![Click the Clone button](_img/get-started/VSClone2.png) + +## Add code to your repo +Let's add a new app to the repo so we can make some changes. + +0. Create a new project in Visual Studio from the team explorer. + + ![New solution link in team explorer](_img/get-started/new-solution-link-in-team-explorer.png) + +0. Create a new Console Application. Notice that the location is set to the location on disk where the empty repo was cloned and the Add to source control option is checked. + + ![Notice the location is the path to the local repo](_img/get-started/VSProjectLocation.png) + +0. In Team Explorer, navigate to the Changes page. Notice that your new solution is showing up on the Home page under Solutions. + + ![Navigate to the Changes page](_img/get-started/VSChanges1.png) + +0. The new app appears under the Included Changes section. Enter a commit message and click the **Commit and Push** button to commit the changes to your local repo then push your changes to Visual Studio VSTS. +If you haven't previously used Git on this computer, you may have to [configure your username and email address](#configure_username_email). + + ![Enter a message and click Commit](_img/get-started/VSChangesCommitPush.png) + +0. In your browser, view the changes pushed to the server by clicking on **CODE**. + + ![See the recently pushed changes under CODE](_img/get-started/VSOAppAdded.png) + +## Create a topic branch +In Git, branches are very lightweight and enable a lot of useful functionality. A common best practice is to perform all development in a branch (even minor changes and bug fixes). +These types of branches are often called "topic branches" as they are created for a single task or topic of work. + +Let's make a change in a topic branch to explore some additional features. + +0. In Team Explorer, navigate to the Branches page. + + ![Click the Branches tile](_img/get-started/VSBranches1.png) + +0. On the Branches page, right-click on the **master** branch and choose **New Local Branch From...** to create a new topic branch. + + ![Right-click and choose New Local Branch From](_img/get-started/VSBranchesNewLocal.png) + +0. Enter a name for your branch and click **Create Branch**. When naming your branches, use slashes to organize your branches. + + ![Enter a branch name and click Create Branch](_img/get-started/VSBranchesCreate.png) + +## Make a change to your app +Now that you have a new topic branch, you're ready to start making changes to your app. + +0. Add a "hello, world" message to the console app. + + ![Add a "Hello, world" message](_img/get-started/VSHelloWorld.png) + +## Commit +0. Right-click on the file in Solution Explorer and choose **Commit**. + + ![Right-click and choose Commit](_img/get-started/VSCommit.png) + +0. On the Changes page, enter a commit message and click **Commit** to commit the changes to your topic branch. + + ![Enter a comment and click Commit](_img/get-started/VSChangesCommit.png) + +## Publish +To share the changes in your topic branch, you'll need to publish it to the server. + +0. Click on the **Sync** link in the successful commit notification to open the Synchronization page. + + ![Click Sync to open the Sync page](_img/get-started/VSCommitSyncMessage.png) + +0. On the Sync page, click on the **Publish** link to push the changes on your topic branch to the server. + + ![Click Publish to push your changes](_img/get-started/VSSyncPublish.png) + +## Conduct a pull request +Pull Requests are a common workflow for reviewing code created in a topic branch and merging changes. Let's create a pull request to see how it works. + +0. In your browser, open the **CODE** hub and click **Pull Requests** to view the Pull Requests hub. + + ![Click CODE, then Pull Requests](_img/get-started/WebPullRequestHub.png) + +0. Click on **New Pull Request** to create a new pull request. + + ![Click New Pull Request](_img/get-started/WebPullRequestNew.png) + +0. Select your topic branch from the first drop-down. The default branch (master) is the default target branch. + + ![Select your topic branch](_img/get-started/WebPullRequestSelectBranch.png) + +0. Verify that the preview contains the changes you want to review and click **Create Pull Request**. + + ![Click Create Pull Request](_img/get-started/WebPullRequestCreate.png) + +Now you can add reviewers to get their feedback on your changes before you merge your changes into master. + +[//]: # (TODO: link to the pull request topic) + +![Pull Request with feedback](_img/get-started/WebPullRequestInProgress.png) + +[//]: # (TODO: Tweak from your web browser) + +[//]: # (TODO: Merge the pull request) + +[//]: # (TODO: View history) + +## Q&A + + + +
        +#### Q: How do I create a team project on Visual Studio Team Services? +* [Sign up and create your team project](../accounts/create-account-msa-or-work-student.md). Be sure to select **Git** from the version control options: + + ![Select Git from the Version Control menu](_img/get-started/CreateProjGitFirstRun.png) + + +#### Q: How do I create a team project on an on-premises Team Foundation Server? +* [Set up TFS on a server](../tfs-server/install/get-started.md). +* [Create a team project](../accounts/create-team-project.md). Be sure to select **Git** from the version control options: + + ![Select Git from the Version Control menu](_img/get-started/CreateProjGitPCW.png) + +[//]: # (Update with a real screenshot) + +#### Q: How do I get started using Command line tools? +First you'll need to: +* [Make sure you're set up to use the command prompt](command-prompt.md#set_up) + + ![Prompt to install Git command prompt tools](_img/command-prompt/IC675719.png) + +* Get the clone URL from the CODE hub in Visual Studio VSTS. + +For the Fabrikam project on VSTS, the command to clone would look like this: + +`git clone https://fabrikam.visualstudio.com/DefaultCollection/_git/Fabrikam` + +Once you have the repo cloned, create a new topic branch: + +`git checkout -b users/jamal/new_branch` + +When you have changes to add to the repo, stage the files using: + +`git add .` + +Then commit to the local repo: + +`git commit -a -m "Initial commit"` + +When you're ready to publish your topic branch to the repo on VSTS, push the changes: + +`git push origin users/jamal/new_branch` + +Now you can return to the web portal to complete the pull request experience. + + +#### Q: How do I configure my Git username and email address? +Before you can commit in Visual Studio, you must configure the username and email address that Git will use to identify commits that you create. + +On the Changes page, you will be prompted if you haven't configured your username or email address. You can also access the Git Settings page from the Settings page in Team Explorer, under the Git section, Global Settings. + +![Click configure to enter your settings](_img/get-started/ConfigureSettings1.png) + +Enter your preferred username and email address on the Git Settings page. + +![Enter your username and email](_img/get-started/ConfigureSettings2.png) + + + + \ No newline at end of file diff --git a/docs/git/get-started.md b/docs/git/get-started.md new file mode 100644 index 00000000000..c55e3cf5b46 --- /dev/null +++ b/docs/git/get-started.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/git/gitquickstart +--- diff --git a/docs/git/git-index-lock.md b/docs/git/git-index-lock.md new file mode 100644 index 00000000000..cb8542d0888 --- /dev/null +++ b/docs/git/git-index-lock.md @@ -0,0 +1,28 @@ +--- +title: Git index.lock file | VSTS & TFS +description: Learn more about the Git index.lock file in Visual Studio +ms.assetid: d7f960e7-7132-4ee3-ba27-5bb5fd60e625 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 06/22/2017 +--- + +# Git index.lock file +#### VSTS | TFS 2015 & 2017 | Visual Studio 2015 & 2017 + +## What is a Git index.lock file? + +When you perform a Git command that edits the index, Git creates a new index.lock file, writes the changes, and then renames the file. The index.lock file indicates to other Git processes that the repository is locked for editing. + +## Orphaned index.lock file + +Generally, if you have an index.lock file, it's because a Git process is running or waiting on a prompt for user input. However, if the editing process is terminated or becomes unresponsive, the index.lock file can be left behind and remain present even if no Git process is running. This orphaned index.lock file will prevent other Git processes from editing the repository. If you have an orphaned index.lock file, you may receive an error similar to the following when attempting to perform a Git operation in Visual Studio: + +`The index is locked. This might be due to a concurrent or crashed process.` + +## Removing an orphaned index.lock file + +If you suspect that you might have an orphaned index.lock file, first verify that you don't have any Git processes running. To check for long running Git operations, open Task Manager (CTRL+ALT+DELETE), sort by name, and look for git.exe or other Git related processes. If you see any Git related processes, you can wait a few moments for them to complete and try your Git operation again. If you don’t have any Git operations running, you can delete the index.lock file and try your Git operation again. The index.lock file is located in the `.git` folder of your repo, as shown in the following example: `\myrepo\.git\index.lock`. Note that the `.git` folder may be hidden, and to access it, you may have to enable `View hidden files and folders` in Windows Explorer. + diff --git a/docs/git/gitquickstart-vs2015.md b/docs/git/gitquickstart-vs2015.md new file mode 100644 index 00000000000..02debd2c245 --- /dev/null +++ b/docs/git/gitquickstart-vs2015.md @@ -0,0 +1,180 @@ +--- +title: Get started with Git and Visual Studio | VSTS & TFS +description: Quick Start with Git and Visual Studio Team Services +ms.assetid: aa9c2f22-6912-4834-8ed3-ed16771760c2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 04/03/2017 +--- + +# Get Started with Git and VSTS + +> [!div class="op_single_selector"] +> - [Visual Studio 2017](gitquickstart.md) +> - [Visual Studio 2015 Update 2](gitquickstart-vs2015.md) +> - [Visual Studio 2013 and Visual Studio 2015 RTM/Update 1](get-started-vs2013.md) + +###### VSTS | TFS 2015 & TFS 2017 + +This guide covers the basics so you can get up and running using Git with code already in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS). +Explore our [full tutorial](tutorial/gitworkflow.md) for more information on how to use Git from Visual Studio or the command line. + +If you don't have your code in a VSTS or TFS Git repo, visit our [Visual Studio](share-your-code-in-git-vs.md) or [command line](share-your-code-in-git-cmdline.md) getting started articles to learn how to create a local repo for your code and push it to VSTS. + + + +## Get your code + +To get a copy of the source code, you will [clone](tutorial/clone.md) a VSTS Git repository. Cloning creates both a copy +of the source code for you to work with and all the version control information so Git can manage the source code. + +If you don't have a Git repository yet, you can create one [using your own code](tutorial/creatingrepo.md) and continue with the steps to commit and share your work. + +# [Visual Studio](#tab/visual-studio) + + 0. In Team Explorer, open up the Connect page by choosing **Projects and My Teams** then **Manage Connections** + + ![Cloning VSTS Git repositories in Visual Studio](_shared/_img/manageConnections.png) + +0. Choose **Connect**, select your Team Services account, choose the projects you want to work on, then +click **Connect**. + +0. Right click on the project and click **Clone...**. Then enter a local folder on your drive to store the downloaded code. + + ![Cloning a Git Repository from a Connected VSTS Account](_shared/_img/cloneVsRepo.png) + +# [Command Line](#tab/command-line) + +0. [Download and install Git](http://git-scm.com/download) and the [Git Credential Manager](set-up-credential-managers.md) for your platform. +0. Open the Team Services web portal in your browser and find your Git repository. +Copy the command line instructions from the **Clone** pop-up. + + ![Finding the Clone URL for your Git Repository in Visual Studio Team Services](_shared/_img/cloneURL.png) + +0. Navigate to the folder where you want the code stored on your local computer using the command line. +0. From the command line, paste the command you copied from the command line instructions. It will look like this +on the command prompt: + +
        +    > git clone https://fabrikam.visualstudio.com/DefaultCollection/Fabrikam/_git/FabrikamFiber  
        +    
        + +Git will download and create your own copy of the code in a new folder for you to work with. + +--- + + + +## Commit your work + +Git [branches](tutorial/branches.md) isolate your changes from other work being done in the project. The recommended [Git workflow](tutorial/gitworkflow.md) +uses a new branch for every feature or fix you work on. You make [commits](tutorial/commits.md) in your local Git repository to save your changes on that branch. + +# [Visual Studio](#tab/visual-studio) + +0. In Team Explorer, click the drop down and choose **Branches**. Right click the master branch and choose **New Local Branch From...** + + ![Creating a Local Branch off the Master branch in Visual Studio](_shared/_img/newVSBranch.png) + + Choose a descriptive branch name for your work to remind you and others what kind of work is in the branch. + +0. Make changes to your files in the cloned repo. From the Team Explorer **Home** view, you can open up Visual Studio solutions in the repo or browse the repo contents using the **Show Folder View** link. Git keeps track of changes made to your code both inside and outside of Visual Studio. + +0. When you are satisfied with the changes, save them in Git using a commit. Open up the +**Changes** view from Team Explorer. Stage the changes to add to your next commit by right-clicking the files and selecting **Stage**, add a message describing the commit, then select **Commit Staged**. + + ![Committing changes to a Git branch in Visual Studio](_shared/_img/vs_update2_changes.png) + +# [Command Line](#tab/command-line) + +0. Create a branch where you will work with the code and make your changes. + +
        +    > git checkout -b my-feature
        +    
        + + Choose a descriptive branch name for your work to remind you and others what kind of work is in the branch. You can also use this command to start working on a branch that other team members are already working in. + +0. Make changes using your favorite tools on the code. +0. When you're satisfied with the changes-even if you aren't ready to share the work-save them in Git using a commit. + +
        +    > git commit -A -m "descriptive message"
        +    
        + + This will save your changes locally to a new [commit](tutorial/commits.md) in Git. Make sure to give the commit a short message describing your changes after the -m flag. + +--- + + + +## Share your changes +When you are ready to share your changes with the team, you [push](tutorial/pushing.md) those changes so that others can reach them. You can only +push changes after you add commits to a branch. + +Once you push the changes, you can create a [pull request](tutorial/pullrequest.md) to let others know you'd like to have the changes reviewed and added to the master +branch of the code. + +# [Visual Studio](#tab/visual-studio) + +0. Open up the **Synchronization** view in Team Explorer. You can see the outgoing commits and share them by clicking **Push** if you are working with a branch that is already shared, or **Publish** if you are working with a newly created local branch. + + ![Sharing Code in Git using Push in Visual Studio](_shared/_img/newVsPush.png) + +0. Create a pull request so that others can review your changes. Open **Pull Requests** in Team Explorer, and click **New Pull Request**. Verify the remote branch to merge the changes into, such as `my-feature`. + + ![Create a Pull Request in Visual Studio](_shared/_img/newVsPullRequest.png) + +0. You can review comments made in your [pull request](tutorial/pullrequest.md) in a web browser on the VSTS project page. Once all changes are approved by the +team, you complete the pull request through the web browser. + +# [Command Line](#tab/command-line) + +0. Push your branch so that others can see the changes you've saved. + +
        +    > git push -u origin dev
        + +0. Open up the Team Services project in the web portal and browse to your repository under the "Code" tab. Click the **Create Pull Request** button to create a pull request for the branch that you pushed. + + ![Creating a new Pull Request in Visual Studio Team Services](_shared/_img/vstsCreatePullReq.png) + +0. Create the pull request, adding in team members to review and approve the code changes. + +0. Once the changes are approved, complete the pull request in Visual Studio Team Services. +This will pull your changes from the branch into the master branch of the code. + +--- + + + +## Sync with others + +To get changes from others and keep your code up to date, you [pull](tutorial/pulling.md) commits made by others and merge them into your branch. Git is very good +about merging multiple changes even in the same file, but sometimes you might have to [resolve a merge conflict](tutorial/merging.md). It's a good idea to +pull your branches regularly to keep them up to date with the changes from others. This makes sure that your feature branches from your main branch are using the latest version of the code. + +# [Visual Studio](#tab/visual-studio) + +0. Open up the **Sync** view in Team Explorer. You can download the latest changes to the branch you are on using the "Pull" link. + + ![Using Pull to download changes in Git in Visual Studio](_shared/_img/newVsPull.png) + +# [Command Line](#tab/command-line) + +0. Switch to the branch where you want to download the changes others have made + +
        +    > git checkout dev
        + +0. Pull in the changes made by others to your local branch. + +
        +    > git pull
        +    
        + +Git will download the changes and merge them with your own changes into your local branch. + +--- \ No newline at end of file diff --git a/docs/git/gitquickstart.md b/docs/git/gitquickstart.md new file mode 100644 index 00000000000..cee1e2e7d6b --- /dev/null +++ b/docs/git/gitquickstart.md @@ -0,0 +1,190 @@ +--- +title: Get started with Git and Visual Studio 2017 | VSTS & TFS +description: Quick Start with Git and VSTS and Visual Studio 2017 +ms.assetid: d7dcb364-056f-421b-8896-0304cddf12fe +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/28/2017 +--- + +# Get Started with Git and VSTS + +> [!div class="op_single_selector"] +> - [Visual Studio 2017](gitquickstart.md) +> - [Visual Studio 2015 Update 2](gitquickstart-vs2015.md) +> - [Visual Studio 2013 and Visual Studio 2015 RTM/Update 1](get-started-vs2013.md) + +#### VSTS | TFS 2015 & TFS 2017 + +This guide covers the basics so you can get up and running using Git with code already in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS). +Explore our [full tutorial](tutorial/gitworkflow.md) for more information on how to use Git from Visual Studio or the command line. + +If you don't have your code in a VSTS or TFS Git repo, visit our [Visual Studio](share-your-code-in-git-vs.md) or [command line](share-your-code-in-git-cmdline.md) getting started articles to learn how to create a local repo for your code and push it to VSTS. + + + +## Get your code + +To get a copy of the source code, you will [clone](tutorial/clone.md) a VSTS Git repository. Cloning creates both a copy +of the source code for you to work with and all the version control information so Git can manage the source code. + +If you don't have a Git repository yet, you can create one [using your own code](tutorial/creatingrepo.md) and continue with the steps to commit and share your work. + +# [Visual Studio](#tab/visual-studio) + +0. In Team Explorer, open up the Connect page by choosing **Projects and My Teams** then **Manage Connections** + + ![Cloning VSTS Git repositories in Visual Studio](_shared/_img/manageConnections.png) + +0. Select **Manage Connections**, then select **Connect to Project**. + +0. The **Connect to a Project** dialog appears. Select the repo you want to clone from the list and select **Clone**. If you don't see your repo listed, you can filter the list +to find it or add a Team Foundation Server where the repo is hosted by selecting the **Add Server** link. + + ![Cloning a Git Repository from a Connected VSTS Account](_shared/_img/vs2017_connect_dialog.png) + +0. Verify the location of the cloned repo on your PC and select **Clone**. + + +# [Command Line](#tab/command-line) + +0. [Download and install Git](http://git-scm.com/download) and the [Git Credential Manager](set-up-credential-managers.md) for your platform. +0. Open the VSTS web portal in your browser and find your Git repository. +Copy the command line instructions from the **Clone** pop-up. + + ![Finding the Clone URL for your Git Repository in Visual Studio Team Services](_shared/_img/cloneURL.png) + +0. Navigate to the folder where you want the code stored on your local computer using the command line. +0. From the command line, paste the command you copied from the command line instructions. It will look like this +on the command prompt: + +
        +    > git clone https://fabrikam.visualstudio.com/DefaultCollection/Fabrikam/_git/FabrikamFiber  
        +    
        + +Git will download and create your own copy of the code in a new folder for you to work with. + +--- + + + + + +## Commit your work + +Git [branches](tutorial/branches.md) isolate your changes from other work being done in the project. The recommended [Git workflow](tutorial/gitworkflow.md) +uses a new branch for every feature or fix you work on. You make [commits](tutorial/commits.md) in your local Git repository to save your changes on that branch. + +# [Visual Studio](#tab/visual-studio) + +0. In Team Explorer, click the drop down and choose **Branches**. Right click the master branch and choose **New Local Branch From...** + + ![Creating a Local Branch off the Master branch in Visual Studio](_shared/_img/newVSBranch.png) + + Choose a descriptive branch name for your work to remind you and others what kind of work is in the branch. + +0. Make changes to your files in the cloned repo. From the Team Explorer **Home** view, you can open up Visual Studio solutions in the repo or browse the repo contents using the **Show Folder View** link. Git keeps track of changes made to your code both inside and outside of Visual Studio. + +0. When you are satisfied with the changes, save them in Git using a commit. Open up the +**Changes** view from Team Explorer. Stage the changes to add to your next commit by right-clicking the files and selecting **Stage**, add a message describing the commit, then select **Commit Staged**. + + ![Committing changes to a Git branch in Visual Studio](_shared/_img/vs_update2_changes.png) + +# [Command Line](#tab/command-line) + +0. Create a branch where you will work with the code and make your changes. + +
        +    > git checkout -b my-feature
        +    
        + + Choose a descriptive branch name for your work to remind you and others what kind of work is in the branch. You can also use this command to start working on a branch that other team members are already working in. + +0. Make changes using your favorite tools on the code. +0. When you're satisfied with the changes-even if you aren't ready to share the work-save them in Git using a commit. + +
        +    > git commit -A -m "descriptive message"
        +    
        + + This will save your changes locally to a new [commit](tutorial/commits.md) in Git. Make sure to give the commit a short message describing your changes after the -m flag. + +--- + + + + +## Share your changes +When you are ready to share your changes with the team, you [push](tutorial/pushing.md) those changes so that others can reach them. You can only +push changes after you add commits to a branch. + +Once you push the changes, you can create a [pull request](tutorial/pullrequest.md) to let others know you'd like to have the changes reviewed and added to the master +branch of the code. + +# [Visual Studio](#tab/visual-studio) + +0. Open up the **Synchronization** view in Team Explorer. You can see the outgoing commits and share them by clicking **Push** if you are working with a branch that is already shared, or **Publish** if you are working with a newly created local branch. + + ![Sharing Code in Git using Push in Visual Studio](_shared/_img/newVsPush.png) + +0. Create a pull request so that others can review your changes. Open **Pull Requests** in Team Explorer, and click **New Pull Request**. Verify the remote branch to merge the changes into, such as `my-feature`. + + ![Create a Pull Request in Visual Studio](_shared/_img/newVsPullRequest.png) + +0. You can review comments made in your [pull request](tutorial/pullrequest.md) in a web browser on the VSTS project page. Once all changes are approved by the +team, you complete the pull request through the web browser. + +# [Command Line](#tab/command-line) + +0. Push your branch so that others can see the changes you've saved. + +
        +    > git push -u origin dev
        + +0. Open up the VSTS project in the web portal and browse to your repository under the "Code" tab. Click the **Create Pull Request** button to create a pull request for the branch that you pushed. + + ![Creating a new Pull Request in Visual Studio Team Services](_shared/_img/vstsCreatePullReq.png) + +0. Create the pull request, adding in team members to review and approve the code changes. + +0. Once the changes are approved, complete the pull request in Visual Studio Team Services. +This will pull your changes from the branch into the master branch of the code. + +--- + + + + + +## Sync with others + +To get changes from others and keep your code up to date, you [pull](tutorial/pulling.md) commits made by others and merge them into your branch. Git is very good +about merging multiple changes even in the same file, but sometimes you might have to [resolve a merge conflict](tutorial/merging.md). It's a good idea to +pull your branches regularly to keep them up to date with the changes from others. This makes sure that your feature branches from your main branch are using the latest version of the code. + +# [Visual Studio](#tab/visual-studio) + +0. Open up the **Sync** view in Team Explorer. You can download the latest changes to the branch you are on using the "Pull" link. + + ![Using Pull to download changes in Git in Visual Studio](_shared/_img/newVsPull.png) + +# [Command Line](#tab/command-line) + +0. Switch to the branch where you want to download the changes others have made + +
        +    > git checkout dev
        + +0. Pull in the changes made by others to your local branch. + +
        +    > git pull
        +    
        + +Git will download the changes and merge them with your own changes into your local branch. + +--- + diff --git a/docs/git/how-to/create-pr-status-server.md b/docs/git/how-to/create-pr-status-server.md new file mode 100644 index 00000000000..ea0c2efdb39 --- /dev/null +++ b/docs/git/how-to/create-pr-status-server.md @@ -0,0 +1,334 @@ +--- +title: Create a pull request status server with Node.js +description: Create a web server to listen to pull request events and post status on the pull request status API. +ms.assetid: 2653589c-d15e-4dab-b8b0-4f8236c4a67b +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: mmitrik +ms.date: 09/05/2017 +--- + +# Create a pull request status server with Node.js + +#### VSTS | TFS 2018 RC1 + +The pull request (PR) workflow provides developers with an opportunity to get feedback on their code from peers as well as from automated tools. 3rd party tools and services can participate in the PR workflow by using the PR [Status API](https://go.microsoft.com/fwlink/?linkid=854107). This article guides you through the process of creating a status server to validate PRs in a VSTS Git repository. + +## Prerequisites +* A VSTS account with a Git repo. If you don't have a VSTS account, [sign up](../../accounts/create-account-msa-or-work-student.md) to upload and share code in free unlimited private Git repositories. +* Install [VS Code](http://code.visualstudio.com/Docs/setup) or other code editor of your choice. The instructions in this guide use VS Code but the steps in other code editors are similar. + +## Install Node.js +To install Node.js, [download](https://nodejs.org/en/download/) the LTS release appropriate for your platform. The download contains an installer, which you can run to install the Node.js runtime on your local machine. When installing Node.js, be sure to keep the [npm package manager](https://www.npmjs.com/) portion of the install, which is selected by default. + +## Create a basic web server using Express +The steps in this section use [Express](https://expressjs.com/), which is a lightweight web framework for Node.js that provides a number of HTTP utility methods that simplify creating a web server. This framework provides you with the basic functions needed to listen to PR events. + +1. From the command line, create a new project folder for your web server. + + ``` + mkdir pr-server + cd pr-server + ``` + +2. Use the `npm init` command to create a new `package.json` file for the project. + + ``` + npm init + ```` + + Press Enter to accept the defaults for all of the options except the entry point. Change it to `app.js` + + ``` + entry point: (index.js) app.js + ``` + +3. Install Express in the pr-server directory using the following command. This installs Express and saves it to the dependencies list. + + ``` + npm install express + ``` + +4. Create a simple Express app to build upon for the PR status server. The following steps are based on the Express [Hello world example](https://expressjs.com/en/starter/hello-world.html). Open the project folder in VS Code by running the following command from the `pr-server` folder. + + ``` + code . + ``` + +5. Create a new file `(Ctrl + N)` and paste in the following sample code. + + ``` javascript + const express = require('express') + const app = express() + + app.get('/', function (req, res) { + res.send('Hello World!') + }) + + app.listen(3000, function () { + console.log('Example app listening on port 3000!') + }) + ``` + +6. Save the file as `app.js`. + +7. Run the basic web server using the following command: + + ``` + node app.js + ``` + + Verify the server is running by browsing to `http://localhost:3000/`. + +## Listen for HTTP POST requests +The web server is going to receive `POST` requests from VSTS, so you need to handle those requests in your server. + +1. At the end of the `app.js` file, add the following code, and save the file. + + ``` javascript + app.post('/', function (req, res) { + res.send('Received the POST') + }) + ``` + +2. Re-run your web server using the following command: + + ``` + node app.js + ``` + +## Configure a service hook for PR events +Service hooks are a Team Services feature that can alert external services when certain events occur. For this sample, you'll want to set up a service hook for PR events, so the status server can be notified. + +In order to receive the service hook notifications, you'll need to expose a port to the public internet. The [ngrok](https://ngrok.com/) utility is very useful for doing this in a development environment. + +1. [Download](https://ngrok.com/download) and unzip the appropriate ngrok release for your platform. + +2. Use ngrok to start listening on the same port as your sample server - port 3000. Run the following command in a new command window. + + ``` + ngrok http 3000 + ``` + + Ngrok will create a public URL that forwards to `localhost:3000`. Note that URL as you will need it in the next step. It will look something like this: + + ``` + http://c3c1bffa.ngrok.io + ``` + +3. Browse to your VSTS project, e.g. `https://.visualstudio.com/` + +4. From the navigation menu, hover over the **gear** and select **Service Hooks**. + + ![Choose Service hooks from the admin menu](../_img/create-pr-status-server/service-hooks-menu.png) + +5. If this is your first service hook, select **+ Create subscription**. + + ![Select Create a new subscription from the toolbar](../_img/create-pr-status-server/service-hooks-create-first-service-hook.png) + + If you already have other service hooks configured, select the green plus `(+)` to create a new service hook subscription. + + ![Select Create a new subscription from the toolbar](../_img/create-pr-status-server/service-hooks-create.png) + +6. On the New Service Hooks Subscription dialog, select **Web Hooks** from the list of services, then select **Next**. + + ![Select web hooks from the list of services](../_img/create-pr-status-server/service-hooks-web-hook.png) + +7. Select **Pull request created** from the list of event triggers, then select **Next**. + + ![Select pull request created from the list of event triggers](../_img/create-pr-status-server/service-hooks-trigger.png) + +8. In the Action page, enter the URL from ngrok in the **URL** box. Select **Test** to send a test event to your server. + + ![Enter the URL and select Test to test the service hook](../_img/create-pr-status-server/service-hooks-action.png) + + In the ngrok console window, you'll see an incoming `POST` that returned a `200 OK`, indicating your server received the service hook event. + + ``` + HTTP Requests + ------------- + + POST / 200 OK + ``` + + In the Test Notification window, select the Response tab to see the details of the response from your server. You should see a content length of 17 that matches the length of the string from your POST handler (i.e. "Received the POST"). + + ![Select the response tab to see the results of the test](../_img/create-pr-status-server/test-notification.png) + +9. Close the Test Notification window, and select **Finish** to create the service hook. + +## Post status to PRs +Now that your server can receive service hook events when new PRs are created,update it to post back status to the PR. + +1. Service hook requests include a JSON payload describing the event. To help parse the JSON returned by the service hook, install the [body-parser](https://www.npmjs.com/package/body-parser) package. + + ``` + npm install body-parser + ``` + +2. Update `app.js` to use body-parser for parsing `application/json`. + + ``` + var bodyParser = require('body-parser') + + app.use(bodyParser.json()); + ``` + +3. To simplify making REST API call to VSTS, install the [vso-node-api](https://www.npmjs.com/package/vso-node-api) package. + + ``` + npm install vso-node-api + ``` + +4. Update `app.js` to use the vso-node-api package, set up the details for a connection to your account, and get an instance of the Git API. + + ``` javascript + const vsts = require("vso-node-api"); + + const collectionURL = process.env.COLLECTIONURL; + const token = process.env.TOKEN; + + var authHandler = vsts.getPersonalAccessTokenHandler(token); + var connection = new vsts.WebApi(collectionURL, authHandler); + + var vstsGit = connection.getGitApi(); + ``` + +5. Create an environment variable for your collection URL, replacing `` with the name of your VSTS account. + + ``` + setx COLLECTIONURL "https://.visualstudio.com/DefaultCollection" + ``` + +6. Create a personal auth token (PAT) for your app to use, following these instructions: +[Authenticating with personal access tokens](../../integrate/get-started/authentication/pats.md). You should create a new PAT for every service that you use to access your account, naming it appropriately. + +7. Create an environment variable for your PAT. + + ``` + setx TOKEN "yourtokengoeshere" + ``` + +8. Update the `post()` function to read the PR details from the service hook payload. You'll need these values in order to post back status. + + ``` javascript + var repoId = req.body.resource.repository.id; + var pullRequestId = req.body.resource.pullRequestId; + var title = req.body.resource.title; + ``` + +9. Build the status object to post on the PR. + + `State` is an enum of type [GitStatusState](https://www.visualstudio.com/docs/integrate/api/git/pull-requests/pullrequeststatuses#GitStatusState). Use `succeeded` to indicate that the PR has passed the status check and is ready to merge. + + The `description` is a string value that will be displayed to the user in the Status section and activity feed in the PR details view. + + The `targetUrl` is a URL that will be used to create a link for the description text in the Status section and activity feed. This is the place where users can go to get more information about the status, for example, a build report or test run. If no URL is specified, the description will appear as text with no link. + + The context `name` and `genre` are used to categorize the status and distinguish it from other services posting status. + + ``` javascript + var prStatus = { + "state": "succeeded", + "description": "Ready for review", + "targetUrl": "http://www.visualstudio.com", + "context": { + "name": "wip-checker", + "genre": "continuous-integration" + } + } + ``` + +10. Instead of just blindly posting the `succeeded` status, inspect the PR title to see if the user has indicated if the PR is a work in progress by adding "WIP" to the title. If so, change the status posted back to the PR. + + ``` javascript + if (title.includes("WIP")) { + prStatus.state = "pending"; + prStatus.description = "Work in progress" + } + ``` + +11. Finally, post the status using the `createPullRequestStatus()` method. It requires the status object, the repo ID, and the pull request ID. Output the response to the node console so you can see the result of the post. + + ``` javascript + vstsGit.createPullRequestStatus(prStatus, repoId, pullRequestId).then( result => { + console.log(result); + }); + ``` + +12. The resulting method should look something like this: + + ``` javascript + app.post("/", function (req, res) { + + // Get the details about the PR from the service hook payload + var repoId = req.body.resource.repository.id; + var pullRequestId = req.body.resource.pullRequestId; + var title = req.body.resource.title; + + // Build the status object that we want to post. + // Assume that the PR is ready for review... + var prStatus = { + "state": "succeeded", + "description": "Ready for review", + "targetUrl": "http://www.visualstudio.com", + "context": { + "name": "wip-checker", + "genre": "continuous-integration" + } + } + + // Check the title to see if there is "WIP" in the title. + if (title.includes("WIP")) { + + // If so, change the status to pending and change the description. + prStatus.state = "pending"; + prStatus.description = "Work in progress" + } + + // Post the status to the PR + vstsGit.createPullRequestStatus(prStatus, repoId, pullRequestId).then( result => { + console.log(result); + }); + + res.send("Received the POST"); + }) + ``` + +13. Save `app.js` and restart your node app. + + ``` + node app.js + ``` + +## Create a new PR to test the status server +Now that your server is running and listening for service hook notifications, create a pull request to test it out. + +1. Start in the files view. Edit the readme.md file in your repo (or any other file if you don't have a readme.md). + + ![Select Edit from the context menu](../_img/create-pr-status-server/edit-readme.png) + +2. Make an edit and commit the changes to the repo. + + ![Edit the file and select Commit from the toolbar](../_img/create-pr-status-server/commit-changes.png) + +3. Be sure to commit the changes to a new branch so you can create a PR in the next step. + + ![Enter a new branch name and select Commit](../_img/create-pr-status-server/commit-to-branch.png) + +4. Select the **Create a pull request** link. + + ![Select Create a pull request from the suggestion bar](../_img/create-pr-status-server/create-pr.png) + +5. Add "WIP" in the title to test the functionality of the app. Select **Create** to create the PR. + + ![Add "WIP" to the default PR title](../_img/create-pr-status-server/new-pr-wip.png) + +6. Once the PR has been created, you will see the status section, with the "Work in progress" entry and a message in the activity feed, both of which link to the URL specfied in the payload. + + ![Add "WIP" to the default PR title](../_img/create-pr-status-server/pr-with-status.png) + +## Next Steps +* In this article, you learned the basics of how to create a service that listens for PR events via service hooks and can post status messages using the status API. For more information about the pull request status API see the [REST API documentation](https://go.microsoft.com/fwlink/?linkid=854107). +* [Configure a branch policy for an external service](https://go.microsoft.com/fwlink/?linkid=854109). \ No newline at end of file diff --git a/docs/git/how-to/pr-status-policy.md b/docs/git/how-to/pr-status-policy.md new file mode 100644 index 00000000000..7f01b89e654 --- /dev/null +++ b/docs/git/how-to/pr-status-policy.md @@ -0,0 +1,60 @@ +--- +title: Configure a branch policy for an external service +description: Configure a branch policy to require status from a 3rd party pull request status server +ms.assetid: 11f567b2-e45f-434c-88eb-d5f43398b451 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: mmitrik +ms.date: 09/05/2017 +--- + +# Configure a branch policy for an external service + +#### VSTS | TFS 2018 RC1 + +Branch policies are a powerful feature to ensure high quality code in your repo by establishing requirements for all pull requests. External services can use the PR [Status API](https://go.microsoft.com/fwlink/?linkid=854107) to post detailed status to your PRs. The branch policy for external services brings the ability for those 3rd party services to participate in the PR workflow and establish policy requirements. This article guides you through the process of configuring a branch policy for a service that is posting PR status. For more information about PR status, see [Create a pull request status server](https://go.microsoft.com/fwlink/?linkid=854108). + +## Prerequisites + +* A VSTS account with a Git repo. If you don't have a VSTS account, [sign up](../../accounts/create-account-msa-or-work-student.md) to upload and share code in free unlimited private Git repositories. +* A service that posts status to PRs. See [Create a pull request status server](https://go.microsoft.com/fwlink/?linkid=854108). + +## Configure the branch policy + +1. Navigate to Code > Branches and find the branch that you want to configure the policy on (typically `master` or `develop`). From the context menu, select the **Branch policies** option. + + ![Select Branch policies from the context menu](../_img/pr-status-policy/branches.png) + +2. Select **Protect this branch** then find the policy to **Require approval from external services**. Select **Add service**. + + ![Select the Add service button](../_img/pr-status-policy/add-service.png) + +3. Select the service you want to create a policy for from the list. + + ![Select the policy from the list](../_img/pr-status-policy/choose-service.png) + + **Authorized account** is used to enforce that status from only the specified account will be counted towards the policy fulfillment. + + **Policy requirement** determines whether or not this policy is optional or required to complete pull requests into the branch. + + **Status expiration** is used to determine when a posted status is no longer valid. If the status posted is specific to the latest code (i.e. a build), use the option to expire when the source branch changes. + +## Create a new pull request + +1. Create a new pull request into the branch where the policy is defined. For more information, see [Create a pull request](https://review.docs.microsoft.com/en-us/vsts/git/tutorial/pullrequest). + +2. After creating the PR, the new policy will appear in the Policies section of the PR details view. Initially, the policy will appear as not set until the external service has posted status. + + ![Policy status is visible in the Policies section](../_img/pr-status-policy/pr-policy-no-status.png) + + When the service has posted status, the policy will update accordingly. Completion will be blocked until the policy approves the PR. + + ![Policy status updates](../_img/pr-status-policy/pr-policy-status-set.png) + + When the policy criteria are met, and the service posts a `succeeded` status, the PR will be approved and completion will be unblocked. + + ![Policy status approved and completion unblocked](../_img/pr-status-policy/pr-policy-succeeded.png) + +## Summary +In this article, you learned how to configure a branch policy for an external service. \ No newline at end of file diff --git a/docs/git/import-from-TFVC.md b/docs/git/import-from-TFVC.md new file mode 100644 index 00000000000..0e4feab78fd --- /dev/null +++ b/docs/git/import-from-TFVC.md @@ -0,0 +1,53 @@ +--- +title: Import repositories from TFVC to Git | VSTS & TFS +description: Search your Git repo in VSTS or TFS for a specific file or folderImport your repositories from TFVC to Git repositories within the same account. +ms.assetid: cf1a4dc8-7143-4b0e-8a43-1680533fb3cb +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: atinb +ms.date: 04/04/2017 +--- + +# Import repositories from TFVC to Git +#### VSTS | TFS 2017 Update 2 + +You can migrate code from an existing TFVC repository to a new Git repository within the same account. While migrating to Git has many benefits, it is an involved process for large TFVC repositories and teams. Centralized version control systems, like TFVC, behave different than Git in fundamental ways. The switch involves a lot more than learning new commands. It is a disruptive change +that requires careful planning. You need to think about: +* Revising tools and processes +* Removing binaries and executables +* Training your team + +We strongly recommend reading our whitepapers - [Centralized version control to Git](https://www.visualstudio.com/learn/centralized-to-git/) and [TFVC to Git](https://www.visualstudio.com/learn/migrate-from-tfvc-to-git/) before starting the migration. + +The import experience is great for small simple TFVC repositories. It's also good for repositories that have already been "cleaned up" as outlined in the previous whitepapers. Those whitepapers also recommend other tools for more advanced TFVC repository configurations. + +## Importing the repository +From the repo drop-down, select **Import repository**. + +![Import Repository Option](_img/Import-Repo/ImportRepository.png) + +1. Select TFVC from the **Source type** dropdown + +2. Type the path to the repository / branch / folder that you want to import to the Git repository. For example, `$/Fabrikam/FabrikamWebsite` + +3. If you want to migrate history from the TFVC repository, click **Migrate history** and select the number of days. You can migrate up to 180 days of history starting from the most recent changeset. +A link to the TFVC repository is added in the commit message of the 1st changeset that is migrated to Git. This makes it easy to find older history when needed. + +4. Give a name to the new Git repository and click **Import**. Depending on the size of the import, your Git repository would be ready in a few minutes. + +![Import Repository Dialog](_img/Import-Repo/ImportRepoDialog-TFVC.png) + +> [!IMPORTANT] +> Due to the differences in how TFVC and Git store version control history, we [recommend](https://www.visualstudio.com/learn/migrate-from-tfvc-to-git/) that you don't migrate your history. This is the approach that Microsoft took when it migrated Windows and other products from centralized version control to Git. + +### Troubleshooting + +This experience is optimized for small, simple TFVC repositories or repositories that have been prepared for a migration. This means it has a few limitations. + +1. It only migrates the contents of root or a branch. For example, if you have a TFVC project at `$/Fabrikam` which has 1 branch and 1 folder under it, a path to import `$/Fabrikam` would import the folder +while `$/Fabrikam/` would only import the branch. +2. The imported repository and associated history (if imported) cannot exceed 1GB in size. +3. You can import up to 180 days of history. + +If any of the above is a blocker for your import, we recommend you try external tools like [Git-TFS](https://github.com/git-tfs/git-tfs) for importing and reading our whitepapers - [Centralized version control to Git](https://www.visualstudio.com/learn/centralized-to-git/) and [TFVC to Git](https://www.visualstudio.com/learn/migrate-from-tfvc-to-git/) diff --git a/docs/git/import-git-repository.md b/docs/git/import-git-repository.md new file mode 100644 index 00000000000..a6dfdbf3eca --- /dev/null +++ b/docs/git/import-git-repository.md @@ -0,0 +1,79 @@ +--- +title: Import a Git repo into your team project | VSTS & TFS +description: Import a repo from Github, Gitlab, or BitBucket into your VSTS/TFS Team Project +ms.assetid: 5439629e-23fd-44f1-a345-f00a435f1430 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/30/2017 +--- + +# Import a Git repo +#### VSTS | TFS 2017 Update 1 + +This guide shows you how to import an existing Git repo from GitHub, Bitbucket, GitLab, or other location into a new or empty existing repo in your Team Project. + +## Prerequisites + +* A VSTS account. If you don’t have one, you can [sign up](../accounts/create-account-msa-or-work-student.md) for one for free. Each account includes free, unlimited private Git repositories. + * If you are using TFS, you must have TFS 2017 Update 1 or higher. + +## Import into a new repo + +From the repo drop-down, select **Import repository**. + +![Import Repository Option](_img/Import-Repo/ImportRepository.png) + +If the source repo is publicly available, just [enter the clone URL](tutorial/clone.md#clone_url) of the source repository and a name for your new Git repository. + +If the source repository is private but can be accessed using basic authentication (username-password, personal access token, etc.), select **Requires authorization** and enter the your credentials. + +![Import Repository Dialog](_img/Import-Repo/ImportRepoDialog.png) + +## Import into an existing empty repo + +On the **Files** page of the empty Git repository, select **Import repository** and [enter the clone URL](tutorial/clone.md#clone_url). You will need to provide credentials if the source repository requires authentication. + +![Import Repository into an existing repository](_img/Import-Repo/ImportRepofromEmptyRepo.png) + +## Frequently asked questions + +Although most of the time the import is successful, the following conditions can cause problems. + +* [What if my Source repository is behind two-factor authentication?](#what-if-my-source-repository-is-behind-two-factor-authentication) +* [What if my source repository does not support multi_ack?](#what-if-my-source-repository-does-not-support-multiack) +* [Can I import from previous versions of Team Foundation Server?](#can-i-import-from-previous-versions-of-team-foundation-server) +* [Can I use MSA based credentials?](#can-i-use-msa-based-credentials) + +### What if my source repository is behind two-factor authentication? + +The import service uses REST APIs to validate and trigger import and cannot work directly with repositories that require two-factor authentication. +Most Git hosting providers like [GitHub](https://help.github.com/articles/creating-an-access-token-for-command-line-use/) and [VSTS](../accounts/use-personal-access-tokens-to-authenticate.md) support personal tokens which can be supplied to the import service. + +### What if my source repository does not support multi_ack? + +The import service uses the [multi_ack](https://git-scm.com/book/en/v2/Git-Internals-Transfer-Protocols) capability of the Git protocol during the import. +If the source repository does not provide this capability, the import service can fail to import from the given source. +This failure can happen when creating import request or while import is in progress. + +### Can I import from previous versions of Team Foundation Server? +If the source Git repository is in a TFS version earlier than TFS 2017 RTM, then import will fail. +This happens because of a contract mismatch between latest VSTS/TFS and pre-2017 RTM versions of TFS. + +### Can I use MSA based credentials? +Unfortunately, MSA (Microsoft Account, formerly Live ID) based credentials will not work. Import service relies on basic authentication to communicate with the source repository. If the username / password you are using are not basic auth then authentication will fail and import will fail. +One way to check if the username / password you are using are basic auth or not is to try using Git to clone your repository using the below format + +``` +git clone https://<>:<>@<> +``` + +## Next steps + +> [!div class="nextstepaction"] +> [New to Git repos? Learn more](https://www.visualstudio.com/learn/set-up-a-git-repository/) + +> [!div class="nextstepaction"] +> [Learn more about using Git in the Git tutorial](tutorial/gitworkflow.md) \ No newline at end of file diff --git a/docs/git/index.md b/docs/git/index.md new file mode 100644 index 00000000000..5d87cebaccb --- /dev/null +++ b/docs/git/index.md @@ -0,0 +1,54 @@ +--- +title: Git index to content for VSTS & TFS +description: Guide to getting started with Git documentation +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.assetid: 36A4986E-BFB8-422B-BFC9-8A0CB75D0603 +ms.manager: douge +ms.author: sdanie +ms.date: 09/08/2017 +layout: LandingPage +--- + +# Git + +Use Git repos to host and collaborate on your code using Visual Studio Team Services (VSTS) or Team Foundation Server (TFS). + +## 5-Minute Quickstarts + +Get started by creating a repo, uploading your code, and inviting developers to work in the repo. You can use any one of these clients or IDEs: + + + + + +Or, you can [import an existing repo](import-git-repository.md) from GitHub, BitBucket, GitLab, or other location to a new, empty repo. + +## Step-by-Step Tutorials + +Learn the basics of working in Git with these tutorials which show tasks performed using Visual Studio or the command line. + +- [Create a new repo](tutorial/creatingrepo.md) +- [Clone an existing repo](tutorial/clone.md) +- [Save work with commits](tutorial/commits.md) +- [Create work in branches](tutorial/branches.md) +- [Share code with push](tutorial/pushing.md) +- [Update code with fetch and pull](tutorial/pulling.md) +- [Review code with pull requests](tutorial/pullrequest.md) +- [Apply changes with rebase](tutorial/rebase.md) +- [Copy changes with cherry-pick](tutorial/cherry-pick.md) +- [Resolve merge conflicts](tutorial/merging.md) +- [Undo changes](tutorial/undo.md) +- [Ignore files](tutorial/ignore-files.md) +- [Review history](tutorial/history.md) + + + +## Resources + +- [What is Git?](https://www.visualstudio.com/learn/what-is-git/) +- [What is version control?](https://www.visualstudio.com/learn/what-is-version-control/) +- [Plan your migration to Git](https://www.visualstudio.com/learn/centralized-to-git/) +- [Migrate from TFVC to Git](https://www.visualstudio.com/learn/migrate-from-tfvc-to-git/) +- [Git at Scale](https://www.visualstudio.com/learn/git-at-scale/) +- [Marketplace extensions](https://marketplace.visualstudio.com/search?target=VSTS&category=Code&sortBy=Downloads) \ No newline at end of file diff --git a/docs/git/lock-branches.md b/docs/git/lock-branches.md new file mode 100644 index 00000000000..ef9d6d26646 --- /dev/null +++ b/docs/git/lock-branches.md @@ -0,0 +1,41 @@ +--- +title: Lock a branch in your Git repo | VSTS & TFS +description: Use the branches page to lock a branch in VSTS or TFS, preventing pushes to the branch. +ms.assetid: 9eecbacc-e3f2-44cb-887e-6c886001d2b6 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/23/2016 +--- + +# Lock a branch +###### Team Services + +Prevent updates to a Git [branch](tutorial/branches.md) by locking the branch. +Locking a branch prevents other users from changing the existing commit history. +Locking also blocks any new commits from being added to the branch by others. + +## Locking limitations + +Locking is ideal for preventing new changes that might conflict with an important merge or to place a branch into a read-only state. +Use [branch policies](branch-policies.md) and [pull requests](pull-requests.md) instead of locking if you just want to ensure that changes in a branch are reviewed before they are merged. + +Locking does not prevent cloning of a repo or fetching updates made in the branch into your local repo. +Share with your team the reason for the locking of the branch and make sure your team knows what to do to work with the branch after it is unlocked. + +> Only the user who locked the branch or a user with [Remove Others' Locks permissions](../security/set-git-tfvc-repository-permissions.md#git-repository) for the branch can remove the lock. + +## Lock a branch using the Branches view + +0. Open the **Branches** view while viewing your repo on the web. + + ![Access the branches view on the web](_img/branches/branches_nav.png) + +0. Locate your branch on the **Branches** view. You can search for your branch using the **Search all branches** box in the upper right. + +0. Lock the branch by selecting the **...** icon next to the branch name and then selecting **Lock** from the menu. A lock icon will appear next to the branch name. +Unlock a locked branch by selecting **Unlock** from the same menu. + + ![Lock a branch from the branches context menu](_img/branches/branches_context_menu_lock.png) + diff --git a/docs/git/manage-large-files.md b/docs/git/manage-large-files.md new file mode 100644 index 00000000000..ec5ccd53369 --- /dev/null +++ b/docs/git/manage-large-files.md @@ -0,0 +1,127 @@ +--- +title: Work with large files in your Git repo | VSTS & TFS +description: Recommendations on how to manage large binary files in Git, Visual Studio, and Team Foundation Server. +ms.assetid: 57ad13a3-9178-4f31-b776-79f32b1afa58 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/04/2016 +--- + +# Manage and store large files in Git + +Git is great at keeping the footprint of your source code small because the differences between versions are easily picked out and code is easily compressed. +Large files that don't compress well and change entirely between versions (such as binaries) present problems when stored in your Git repos. +Git's fast performance comes from its ability to address and switch to all versions of a file from its local storage. + +If you have large, undiffable files in your repo such as binaries, you will keep a full copy of that file in your repo every time you commit a change to the file. +If many versions of these files exist in your repo, they will dramatically increase the time to checkout, branch, fetch, and clone your code. + +## What kind of files should you store in Git? + +### Source code-not dependencies + +As your team works with editors and tools to create and update files, you should put these files into Git so your team can enjoy the benefits of Git's workflow. +Don't commit other types of files, such as DLLs, library files, and other dependencies that aren't created by your team but your code depends on into your repo. Deliver these files +through [package management](../package/overview.md) to your systems. + +Package management bundles your dependencies and installs the files on your system when you deploy the package. +Packages are versioned to ensure that code tested in one environment runs the same in another environment as long as they have the same installed packages. + +### Don't commit outputs + +Don't commit the binaries, logs, tracing output or diagnostic data from your builds and tests. These are outputs from your code, not the source code itself. Share logs and trace information +with your team through [work item tracking](../work/backlogs/add-work-items.md) tools or through team file sharing. + +### Store small, infrequently updated binary sources in Git + +Binary source files that are infrequently updated will have relatively few versions committed, and will not take up very much space provided that their file size is small. +Images for the web, icons, and other smaller art assets can fall into this category. It's better to store these files in Git with the rest of your source so your team can use +consistent workflow. + +> [!IMPORTANT] +> Even small binaries can cause problems if updated often. One hundred changes to a 100KB binary file uses up as much storage as 10 changes to a 1MB binary, and due to the frequency of updates to the smaller binary will take slow down branching performance more often than the large binary. + +### Don't commit large, frequently updated binary assets + +Git will manage one main version of a file and then store only the differences from that version in a process known as deltification. +Deltification and file compression allow Git to store your entire code history in your local repo. +Large binaries usually change entirely between versions and are often already compressed, making these files difficult for Git to manage since the difference between versions is very large. +Git must store the entire contents of each version of the file and has difficulty saving space through deltification and compression. +Storing the full file versions of these files causes repo size to increase over time, reducing branching performance, increasing the clone times, and expanding storage requirements. + +## Strategies for working with large binary source files + +- Don't commit compressed archives of data. It's better to uncompress the files and commit the diffable sources, letting Git handle compressing the data in your repo. +- Avoid committing compiled code and other binary dependencies. Commit the source and build the dependencies, or use a package management solution to version and supply these files +to your system. +- Store configuration and other structured data in diffable plain text formats, such as JSON. + +## Use Git Large File Storage (LFS) + +When you have source files with large differences between versions and frequent updates, you can use [Git LFS](https://git-lfs.github.com/) to manage these file types. +Git LFS is an extension to Git which commits data describing the large files in a commit to your repo, and stores the binary file contents into separate remote storage. +When you clone and switch branches in your repo, Git LFS downloads the correct version from that remote storage. +Your local development tools will transparently work with the files as if they were commited directly to your repo. + +### Benefits + +The benefit of Git LFS is that your team can use the familiar end to end Git workflow no matter what files your team creates. +LFS files can be as big as you need them to be. +Additionally, as of version 2.0, Git LFS supports [file locking](https://github.com/git-lfs/git-lfs/wiki/File-Locking) to help your team work on large, undiffable assets like videos, sounds, and game maps. + +Git LFS is [is fully supported and free in VSTS](https://blogs.msdn.microsoft.com/visualstudioalm/2015/10/01/announcing-git-lfs-on-all-vso-git-repos/). +To use LFS with Visual Studio, you need at least [Visual Studio 2015 Update 2](https://www.visualstudio.com/en-us/news/vs2015-update2-vs.aspx). +Just follow the [instructions to install the client](https://git-lfs.github.com/), set up LFS tracking for files on your local repo, and then push your changes to VSTS. + +### Limitations + +Git LFS has some drawbacks that you should consider before adopting: + +0. Every Git client used by your team must install the Git LFS client and understand its [tracking configuration](https://github.com/github/git-lfs/tree/master/docs). +0. If the Git LFS client is not installed and configured correctly, you will not see the binary files committed through Git LFS when you clone your repo. +Git will download the data describing the large file (which is what Git LFS commits to the repo) and not the actual binary file itself. +Committing large binaries without the Git LFS client installed will push the binary to your repo. +0. Git cannot merge the changes from two different versions of a binary file even if both versions have a common parent. +If two people are working on the same file at the same time, they must work together to reconcile their changes to avoid overwriting the other's work. +Git LFS provides [file locking](https://github.com/git-lfs/git-lfs/wiki/File-Locking) to help. +Users must still take care to always pull the latest copy of a binary asset before beginning work. +0. Team Services currently does not support using SSH in repos with Git LFS tracked files. + +### File format + +The file written into your repo for a Git LFS tracked file will have a few lines with a key and value pair on each line: + +``` +version https://git-lfs.github.com/spec/v1 +oid a747cfbbef63fc0a3f5ffca332ae486ee7bf77c1d1b9b2de02e261ef97d085fe +size 4923023 +``` + +> [!NOTE] +> The GitHub URL included for the version value only defines the LFS pointer file type, and is not a link to your binary file. + +### Known issues + +#### Kerberos authentication +If you use TFS, Git may be using the Kerberos protocol to authenticate. +(This does not apply to VSTS, which uses a different form of authentication.) +LFS does not support Kerberos, so you will get errors which say "Your user name must be of the form DOMAIN\user". +To get out of this state, you will need to remove the Kerberos credential and let Git pick up a new NTLM credential instead. + +0. Open the Windows Credential Manager. On Windows 10, you can press Start and then type "Credential Manager". + + ![Open Credential Manager](_img/manage-large-files/launch-credential-manager.png) + +0. Choose *Windows Credentials*. + + ![Choose Windows Credentials](_img/manage-large-files/choose-windows-credentials.png) + +0. Find your TFS URL in the credential list. +0. Choose *Remove*. + + ![Choose Remove](_img/manage-large-files/choose-remove.png) + +0. Return to your Git client (Visual Studio or the command line) and push your changes. +When prompted for credentials, be sure to enter them in the form *DOMAIN\username*. diff --git a/docs/git/manage-your-branches.md b/docs/git/manage-your-branches.md new file mode 100644 index 00000000000..85f960db2e8 --- /dev/null +++ b/docs/git/manage-your-branches.md @@ -0,0 +1,92 @@ +--- +title: Manage branches in your Git repo | VSTS & TFS +description: Find your work and search for branches using the branches page in VSTS/TFS +ms.assetid: 17722c33-e156-49f1-acad-5fcf4bc3c4fc +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/23/2016 +--- + +# Manage branches + +###### VSTS | TFS 2017 + +Manage the work in your team's Team Services Git repo from the **Branches** view on the web. +Customize the view to track the branches you care most about so you can stay on top of changes made by your team. + +Access the view by selecting **Branches** while viewing your repo on the web. + +![Access the branches view from your Git repo in Team Explorer](_img/branches/branches_nav.png) + +## Organize your branches + +The default **Mine** tab on the branches page shows branches you've created, pushed changes to, or set as a favorite. The default branch for the repo, such as `master`, is listed at the top. +Select the **All** tab to view all branches in the repo. +Filter the shown branches for a specific name or pattern in either view by entering text in the **Search all branches** box in the upper right. + +![Search and filter branches viewed using the search all branches field](_img/branches/search_branches.png) + +Your repo's default branch (for example, `master`) will always sit at top of the list. If your team uses a forward slash separator in your branch names, you'll see a collapsible tree view for those branches. + +>[!TIP] +> Using a naming convention for your branches is highly recommended. For suggestions on how to name your branches, see [Adopt a Git branching strategy](concepts/git-branching-guidance.md). + + + +### Add favorite branches + +Add branches from the **All** view to the **Mine** view by selecting the star icon to favorite the branch. +Mark multiple branches as favorites by selecting the star icon on the tree view next to a folder on the tree. +Remove favorites by toggling the star off or by selecting the **...** to the right of the star to open the branch context menu, then selecting **Remove from my favorites**. + +![Set favorites in your branches to show them in the Mine view](_img/branches/branches_favorites.png) + + + +## Review updates to your branches + +Each branch name has the name of the last contributor to the branch and a link to the latest commit on the branch. Select the date or time of the last commit to review the updates to the branch. +The branch view also shows the number of commits the branch is ahead of and behind the branch labeled **Compare**. Use this information to quickly check how far a branch has diverged from another. + +If the branch has a pull request open, you can see its current status based on the voting in the pull request. Select the pull request to open it up so you can review the details. + +![See how far a branch is ahead of and behind the compare branch](_img/branches/branches_ahead_behind.png) + +### Change the compare branch + +The ahead and behind numbers listed for each branch are in comparison with the branch currently labeled **Compare** on the Branches page. Update your compare branch to see how far ahead or behind +your branches shown on the page are to another branch in your repo: + +0. Select the **...** next to the branch you want to set as the baseline for comparison. +0. Select **Set as compare branch**. + +The **Compare** label will move to this branch and the branch will move to top of the list on the Branches page. The other branches on the page will have the number of commits ahead/behind updated to reflect +the new comparison. + +## View branch history + +Review the files in a branch or history by selecting the **...** icon next to the branch name and choosing **View files** or **View history**. **View files** opens up the **Files** view on the web so you can +browse the files based on the most recent commit on the branch. **View history** shows each commit in the branch history. Select a commit from this history to see the file changes made in that commit. + +![Access the view files and review history from the branches context menu](_img/branches/branches_context_menu.png) + +## Change your default branch + +Change the default branch used to merge code into when your team creates new pull requests. +This is useful when you want to use a branch other than `master` for the main line of development in your repo. + +0. Select the settings icon while you have your team project open to bring up the project administration page. + + ![open up the administrative area of the team services web portal for your team project](_img/pull-requests/gear_icon_settings.png) + +0. Select **Version Control**. + +0. Select your Git repository. Your branches are displayed under your repo. + +0. Select the **...** next to the branch you want to set as default, then select **Set as default branch**. + + ![Set a default branch for a Git repo in VSTS or TFS](_img/pull-requests/set_default_branch.png) + + diff --git a/docs/git/merging-with-squash.md b/docs/git/merging-with-squash.md new file mode 100644 index 00000000000..1a02b16901d --- /dev/null +++ b/docs/git/merging-with-squash.md @@ -0,0 +1,55 @@ +--- +title: Squash merge your pull requests | VSTS & TFS +description: Squash merge your pull requests to keep a linear Git history +ms.assetid: 2ec21de7-92fc-4d60-a5e1-7e179627b2bb +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 04/17/2017 +--- + +# Squash merge pull requests +#### VSTS | TFS 2017 + +## Pull requests and Git history + +When you complete a [pull request](pull-requests.md) in VSTS, you merge the topic branch into your default branch, usually `master`. +This merge adds the commits of the topic branch to your main branch and creates a merge commit to reconcile any conflicts between the default and topic branch. +The comments and discussion in the pull request give additional context for the changes made in the topic branch. + +![Example of a regular merge from a pull request in VSTS](_img/regular_branch_merge.png) + +The [commit](tutorial/commits.md) history on your `master` branch (or other default branch) does not follow a straight line because of the related topic branch history. +As the project grows larger, the number of topic branches worked on at the same time increases, making the default branch history increasingly more difficult to follow. + +This default branch is an accurate representation of the history of each topic branch, but it is difficult to use to answer broader questions about your project's development. + +## What is a squash merge? + +Squash merging is a merge option that allows you to condense the Git history of topic branches when you complete a pull request. Instead of each commit on the topic branch +being added to the history of the default branch, a squash merge takes all the file changes and adds them to a single new commit on the default branch. + +![Squash Merging in pull requests in VSTS](_img/squash_merge.png) + +A simple way to think about this is that squash merge gives you just the file changes, and a regular merge gives you the file changes and the commit history. + + +## How is a squash merge helpful? + +Squash merging keeps your default branch histories clean and easy to follow without demanding any workflow changes on your team. Contributors to the topic branch work how they want in +the topic branch, and the default branches keep a linear history through the use of squash merges. The commit history of a `master` branch updated with squash merges will have one commit +for each merged branch. You can step through this history commit by commit to find out exactly when work was done. + +## Considerations when squash merging + +Squash merging condenses the history of changes in your default branch, so it is important to work with your team to decide when you should squash merge and when you want to +keep the full commit history of a topic branch. When squash merging, it's a good practice to delete the source branch. This prevents confusion as the topic branch itself does not have a commit merging it into the default branch. + +## Completing pull requests with squash merge + +You can choose to squash merge when completing a pull request in VSTS. +Choose **Squash changes when merging** on the **Complete pull request** dialog to squash merge the topic branch. + + +![Closing a PR with a squash merge in VSTS](_img/squash_merge_in_pr.png) \ No newline at end of file diff --git a/docs/git/overview-2013.md b/docs/git/overview-2013.md new file mode 100644 index 00000000000..bc1c95ed304 --- /dev/null +++ b/docs/git/overview-2013.md @@ -0,0 +1,38 @@ +--- +title: Use Visual Studio and Team Foundation Server with Git +description: Use Visual Studio and Team Foundation Server with Git +ms.assetid: 0017E2D7-ECD9-44B9-9AF0-8279136E6B9B +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/04/2016 +--- + +# Use Visual Studio and Team Foundation Server with Git +#### VSTS | TFS 2015 | Visual Studio 2013 + + + + + + +
        +![Changes page in Team Explorer](_img/IC673340.png) + +

        You can begin using [Git](http://www.git-scm.com/) distributed version control before you write your first line of code with virtually no cost or risk. You get many benefits, including being able to revert to a known good state whenever you get in trouble. When you need to switch contexts, you can quickly create a private local branch. Later, you can either publish the branch or dispose of it.

        + +

        All this is done on your local dev machine, with no server required. When you're ready, you can quickly share your code and begin collaborating in TFS or on a third-party Git service.

        + +

        You can use Visual Studio and Git to collaborate with your team using Team Foundation Server (on-premises or on [Visual Studio VSTS](http://tfs.visualstudio.com/)), on [CodePlex](http://www.codeplex.com/), or on a third-party service such as GitHub or Bitbucket.

        + +
          +
        • [Get started using Git](gitquickstart.md)
        • +
        • [Conduct a Git pull request](pull-requests.md)
        • +
        • [Improve code quality with branch policies](branch-policies.md)
        • +
        • [Rebase a topic branch in Visual Studio](tutorial/rebase.md)
        • +
        • [Work from the Git command prompt](command-prompt.md)
        • +
        • [Rename a Git repository](repo-rename.md)
        • +
        • [Learn about Git permissions](http://msdn.microsoft.com/en-us/library/ms252587.aspx#git)
        • +
        +
        diff --git a/docs/git/overview.md b/docs/git/overview.md new file mode 100644 index 00000000000..24c6044dea2 --- /dev/null +++ b/docs/git/overview.md @@ -0,0 +1,184 @@ +--- +title: Git documentation home | VSTS & TFS +description: Overview of Git version control in VSTS and Team Foundation Server +ms.assetid: 9e1079da-49a2-4035-addb-238a8023c9b1 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 04/17/2017 +--- + +# Git and Team Services +#### VSTS | TFS 2015 & 2017 | Visual Studio 2015 & 2017 | [Previous version](overview-2013.md) + +Host and manage your code in Git version control with Team Services and Team Foundation Server. + +New to Git? [Learn more](https://www.visualstudio.com/learn-git) about how Git and Team Services can help your team ship great code. + +
        +
        + Get started +
          +
        • [Team Services Git quick start](gitquickstart.md)
        • +
        • [Visual Studio](share-your-code-in-git-vs.md)
        • +
        • [Command line](share-your-code-in-git-cmdline.md)
        • +
        • [Xcode](share-your-code-in-git-xcode.md)
        • +
        • [Eclipse](share-your-code-in-git-eclipse.md)
        • +
        +
        +
        + Git tutorial +
          +
        • [Git workflow](tutorial/gitworkflow.md)
        • +
        • [Create a new repo](tutorial/creatingrepo.md)
        • +
        • [Clone an existing repo](tutorial/clone.md)
        • +
        • [Commit your work](tutorial/commits.md)
        • +
        • [Push your changes](tutorial/pushing.md)
        • +
        • [Sync with others](tutorial/pulling.md)
        • +
        • [Undo changes](tutorial/undo.md)
        • +
        +
        +
        + Authenticate +
          +
        • [Authentication overview](auth-overview.md)
        • +
        • [Git credential managers](set-up-credential-managers.md)
        • +
        • [SSH](use-ssh-keys-to-authenticate.md)
        • +
        +
        +
        +
        +
        + Repos +
          +
        • [Create a repo](create-new-repo.md)
        • +
        • [Delete a repo](delete-existing-repo.md)
        • +
        • [Import a repo](import-git-repository.md)
        • +
        • [Git and TFVC repos](team-projects.md)
        • +
        • [Set repo permissions](../security/set-git-tfvc-repository-permissions.md#git-repository)
        • +
        • [Work with large files](manage-large-files.md)
        • +
        +
        +
        + Branches +
          +
        • [Manage your branches](manage-your-branches.md)
        • +
        • [Create a branch strategy](concepts/git-branching-guidance.md)
        • +
        • [Set branch permissions](branch-permissions.md)
        • +
        • [Lock branches](lock-branches.md)
        • +
        • [Delete a branch](delete-branch.md)
        • +
        +
        +
        + Pull requests +
          +
        • [Review code with pull requests](pull-requests.md)
        • +
        • [Squash merge pull requests (TFS 2017 only)](merging-with-squash.md)
        • +
        • [Comment with markdown (TFS 2017 only)](../reference/markdown-guidance.md)
        • +
        • [Set up branch policies](branch-policies.md)
        • +
        +
        +
        + + +## Get started + +
        +
        +![Use your favorite IDE with Team Services and Git](_img/overview/get-started-favorite-ide.png) +
        +
        + +

        Connect your favorite development environment to VSTS to access your repos and manage your work. +Team Services IDE integrations are available for [Visual Studio](../accounts/set-up-vs.md), +[Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-vsts.team), [Eclipse](http://java.visualstudio.com/Docs/tools/eclipse), +and [IntelliJ](https://java.visualstudio.com/Docs/tools/intelliJ).

        + +

        New to Git? Learn how to share code with Git and Team Services with getting started guides for [Visual Studio](share-your-code-in-git-vs.md) , +[Eclipse](share-your-code-in-git-eclipse.md) , [Xcode](share-your-code-in-git-xcode.md), and the [command line](share-your-code-in-git-cmdline.md).

        +
        +
        + +## Git tutorial + +
        +
        +

        Get up and running with Git and Team Services in just a few minutes with the [Team Services Git quick start](gitquickstart.md).

        + +

        The [Team Services Git tutorial](tutorial/gitworkflow.md) walks you through Git tasks like [creating repos](tutorial/creatingrepo.md), [working in branches](tutorial/branches.md), [saving your work](tutorial/commits.md) , and [sharing your changes](tutorial/pushing.md). +Every task is presented step-by-step in Visual Studio or from the command line.

        +
        +
        +![Team services Git tutorial workflow](tutorial/_img/gitworkflow.png) + +
        +
        + +## Authenticate with your repos + +
        +
        + +![Connect to Team Services from anywhere](_img/overview/IC839946.png) + +
        + +
        + +

        You can authenticate with your Team Services Git repo from any platform using [cross-platform credential managers](set-up-credential-managers.md) or [SSH public key authentication](use-ssh-keys-to-authenticate.md).

        + +

        If you have code ready to share in VSTS, our getting started guides take you through the steps to connect your development environment to a Team Services Git repo and share your code with your team.

        + +
          +
        • [Get Started with Visual Studio](share-your-code-in-git-vs.md)
        • +
        • [Get Started with Xcode](share-your-code-in-git-xcode.md)
        • +
        • [Get Started with Eclipse](share-your-code-in-git-eclipse.md)
        • +
        + +
        +
        + +## Manage your repos + +
        +
        +

        Manage your repos and customize your team's workflow. Set up permissions to control access to your code and set up branch policies and continuous integration to prevent build breaks and catch bugs sooner.

        + +
          +
        • [Create](create-new-repo.md), [delete](delete-existing-repo.md), and [rename](repo-rename.md) repos.
        • +
        • Set [repo permissions](../security/permissions.md) and [branch permissions](branch-permissions.md)
        • +
        • [Set up branch policies](branch-policies.md) to protect key branches
        • +
        • [Set up continuous integration](../build-release/concepts/definitions/build/triggers.md#continuous-integration-ci) to catch bugs sooner.
        • +
        + +
        +
        + +![Manage your code and repos from the web](_img/overview/git-repos.png) + +
        +
        + +## Review code + +
        +
        + +![Review code with pull requests in VSTS and TFS](_img/overview/IC784012.png) + +
        +
        + +

        Review code with your team and make sure that changes build and pass tests before it's merged.

        + +
          +
        • [Create a pull request](pull-requests.md)
        • +
        • [Link work items to pull requests](pull-requests.md#link-work-items)
        • +
        • [Set up branch policies](branch-policies.md#require-the-pull-request-to-build)
        • +
        • [Squash merge pull requests](merging-with-squash.md)
        • +
        • [Git branch and pull request workflows](concepts/git-branching-guidance.md)
        • +
        + +
        +
        \ No newline at end of file diff --git a/docs/git/pull-requests.md b/docs/git/pull-requests.md new file mode 100644 index 00000000000..536f3387b86 --- /dev/null +++ b/docs/git/pull-requests.md @@ -0,0 +1,278 @@ +--- +title: Review and merge code with pull requests | VSTS & TFS +description: Conduct a code review in a Git with Visual Studio VSTS or TFS, create a pull request. +ms.assetid: 4C9DFD24-E894-454A-A080-DA511C90CA74 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/17/2016 +--- + +# Review code with pull requests + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +Create pull requests to review and merge code in a [Git team project](../accounts/create-team-project.md). +Pull requests let your team give feedback on changes in feature branches before merging the code into the master branch. +Reviewers can step through the proposed changes, leave comments, and vote to approve or reject the code. + +New to pull requests? [Learn more](https://www.visualstudio.com/learn/git-pull-requests/) about how to get feedback with Git pull requests. + +## Create a new pull request + +Create a new pull request from: + +--- +- Pushed feature branches to your Git repo +- The **Development** section in a linked work item +- The **Pull Requests** tab in the **Code** view on the web +- Team Explorer in Visual Studio + +--- + +### After pushing a branch + +When you publish or update a feature branch in your Team Services Git repo, you will get a prompt asking if would like to create a pull request in the **Code** view on the web. + +![Creating Pull Request through pushed branch in VSTS](_img/pull-requests/create_pr_from_push.png) + +Select the **New pull request** link to go to a page where you will [enter your pull request details](pull-requests.md#finish) and create the pull request. + +### From a linked work item + +Create a pull request directly from a work item linked to the branch. + +0. From the **Backlogs** or **Queries** tab in the **Work** view , open the work item with the linked branch. +0. In the **Development** area of the work item, you will see a link to create a pull request under the branch name. + +![Creating Pull Requests from the Development area of a Work Item with a Linked Branch](_img/pull-requests/create_pr_from_work_item.png) + +Select the link to go to a page where you will [enter your pull request details](pull-requests.md#finish) and create the pull request. + +### From the Code view on the web + +Create pull requests from any branch from the **Pull Request** tab in the **Code** view on the web. + +Select **New pull request** in the upper right to go to a page where you will [enter your pull request details](pull-requests.md#finish) and create the pull request. +Pick the branch you wish to have reviewed and the branch you want to merge the changes into, such as the master branch. + +![Choosing source and target branches for a pull request in VSTS](_img/pull-requests/pr_branch_targets.png) + +### From Visual Studio + +Create pull requests directly from Visual Studio. + +0. [Connect to your Team Project from Visual Studio](../connect/connect-team-projects.md) +0. Open Team Explorer (select **View**, then **Team Explorer** or use the Ctrl+\, Ctrl+M hotkey) +0. Select **Pull Requests** from the navigation drop-down menu or select the **Pull Requests** button. + + ![Create a Pull Request from Visual Studio](_img/pull-requests/pr_create_from_vs.png) + +0. Select the **New Pull Request** link to open up a browser window to create a new pull request on the web. + +Create pull requests from the **Branches** view in Team Explorer by right-clicking the branch name and selecting **Create pull request** while connected to your Team Project. + + + +## Add detail to your pull request + +Link work items and describe the changes in the branch to make it easier for others to see what problem you are trying to solve. +Change the pull request title, add a detailed description, link work items, and make comments to explain your changes. + +![Adding details to a new pull request](_img/pull-requests/add_detail_to_pr.png) + +### Add and remove reviewers + +Add reviewers to your pull request. + +0. Select the **Overview** tab in the pull request. + +0. Select the add icon ![Add icon in pull requests](_img/pull-requests/pr_add_icon.png) in the **Reviewers** area. + +0. Enter the name of the user or group to add to the reviewer list for the pull request. If the user isn't a member of your Team Project, you'll need to [add them](../accounts/add-team-members-vs.md). + +0. As you enter a name or email address, a list of matching users or groups will appear. Select the user or group from the list to add them as a reviewer. + +Remove a reviewer from a pull request by selecting the ![remove icon](_img/pull-requests/pr_remove_icon.png) that appears to the right of their name when you hover over them. + + + + +### Link work items + +> Pull requests automatically link to work items when the source branch or any of its commits are linked to a work item. + +Link work items to your pull request: + +0. Select the **Overview** tab in the pull request. + +0. Select the add icon ![Add icon in pull requests](_img/pull-requests/pr_add_icon.png) in the **Work Items** area. + +0. Enter the ID of the work item or search for work items with titles that match your text. Select the work item from the list that appears. + +Remove work item links by selecting the ![remove icon](_img/pull-requests/pr_remove_icon.png) that appears when you hover over the work item. +This only removes the link between a work item to a pull request—links created in the branch or from commits stay in the work item. + +![Linking work items and adding reviewers to a pull request](_img/pull-requests/pr_workitems.png) + +### Edit pull request title and description + +Edit the pull request title description by selecting the **Edit** link that appears when you mouse over the existing description. +Update the title of a pull request by clicking the current title and updating the text. +Keep these fields up to date so reviewers know what the changes in the pull request are trying to accomplish. + +![Editing details in an existing Team Services pull request](_img/pull-requests/edit_pr_information.png) + + + +## Manage your pull requests + +Manage your pull requests you own or are assigned to with the **Pull Requests** tab in the Code view on the web. +Select **Active** to show all active pull requests for the current repo. Select **Completed** or **Abandoned** to bring up a history of closed pull requests. + +![Viewing completed and abandoned pull requests in VSTS](_img/pull-requests/pr_status_widget.png) + +## Review a pull request + +The **Overview** tab shows the current state of the pull request at a glance. +Review the title, description, and discussion to get an understanding of the proposed changes and see issues brought up by other reviewers. + +### Browse code changes + +Select the **Files** tab to view the differences between the most changes between the source and target branch of the pull request. + +Review previous versions of the code pushed to the source branch of the pull request from the **All changes** drop-down. +A new version is added to the list in the drop-down and on the **Updates** tab every time the branch is updated in VSTS. + +The diff view updates as you select different changes, showing the differences between the files in the currently selected and previous version in the pull request. +Catch up with a pull request after being away from it for awhile by stepping through changes made since your last review. + +![Show different iterations of changes in a pull request](./_img/pull-requests/pull_request_view_changes.gif) + +Browse a list of changes by push from the author using the **Updates** tab. You can select and view changes made in commits on the branch in the **Commits** tab. + +### Leave comments + +Add comments to the pull request to make suggestions, reply to previous comments, and point out problems with the proposed changes. +Comment inline in the **Files** tab in your pull request by selecting the comment icon (![Comment icon in a pull request](./_img/pull-requests/pr_comment_icon.png)). +Leave feedback not tied to a specific code change by commenting in the **Overview** tab. +Reply directly to the author or other reviewers by using @_username_ and reference work items using #_workitem_ in your comments. + +![Reviewing comments in Team Services pull requests](./_img/pull-requests/pr_comments_summary.png) + +Update comment status to let reviewers know what you are doing to address the concerns brought up in their review. New comments start in **Active** status and can be updated using the +drop-down in the comment to: + +--- +- **Active**: Comment is still under review. +- **Resolved**: The issue brought up in this comment has been fixed. +- **Pending** : The issue in this comment will be addressed, but isn't fixed yet. +- **Won't Fix**: Note the suggestion in the comment, but don't make changes in this pull request to address it. +- **Closed**: Discussion for this comment is closed. + +--- + +
        + +### Vote on the changes + +Vote on the changes in a pull request by choosing an option from the button on the upper right. The default option is **Approve**, but you can select other options from the drop-down: + +--- +- **Approve with suggestions** : Agree with the pull request, but provide optional suggestions to improve the code. +- **Waiting for the author** : Do not approve the changes, and ask the author to review your comments. The author should let you know when you should re-review the code after they have addressed your concerns. +- **Rejected** : The changes aren't acceptable. If you are voting this way, you should leave a comment in the pull request detailing why the changes were rejected. + +--- + +The number of required approvals in a pull request is set from the [branch policy](branch-policies.md) for the branch. Pull requests can be completed if the number of required approvals is met, even if other reviewers have rejected the changes. +Votes in a pull request do not reset when new code is pushed to the branch-make sure you have [notifications](#notifications) enabled if you want to review your vote as the code changes. + +![List of Pull Request voters in Team Services ](./_img/pull-requests/Approval.png) + +> Best practice: At least two reviewers should review and approve the changes in a significant pull request. + +## Update code in response to feedback + +Update your code in response to comments by creating a new [commit](tutorial/commits.md) with the changes and [pushing](tutorial/pushing.md) the updates to the branch in your Team Services repo. +You can make quick updates to your branch from the **Files** tab in the **Code** view on the web. + +![Updating code directly during a pull request in VSTS](./_img/pull-requests/pr_editing_changes.png) + +## Complete the pull request + +Complete your pull request after the reviewers approve of the changes by selecting **Complete** in the upper right of the pull request view, then choose **Complete** from the drop-down. +If you have branch policies, choose **Complete now** instead of **Auto-complete** to close the pull request if all branch policies are met. + +![Complete button on the pull request view with its drop-down options](./_img/pull-requests/complete_pr_options.png) + +Enter the message used for the [merge commit](tutorial/merging.md) and update the pull request description as needed in the dialog that follows. +You can choose to [squash merge](merging-with-squash.md) your pull request and delete the source branch once the merge is complete. + +Linked work items will also updated showing the pull request completion. + +![Linked Work Items showing completed pull requests](./_img/pull-requests/pr_workitem_complete.png) + +### Complete automatically + +Select **Auto-complete** from the **Complete** button drop-down to complete the pull request and merge the changes as soon as all [branch policies](branch-policies.md) are met. +Auto-completion lets you skip having to come back to the pull request to complete it after the build finishes successfully and the reviewers approve the changes. +If there's a problem completing the pull request, you'll get an email notifying you what the problem is so you can fix it. + +Once auto-complete has been set, the pull request will display a banner confirming that the changes will be merged as soon as the policies are satisfied. +Select **Cancel auto-complete** to turn off auto-complete and return the pull request to an active state. + +![A banner displays when your pull request is in auto-complete state](./_img/pull-requests/pr_banner_autocomplete.png) + +### Abandon your changes + +Abandon pull requests when you decide the work in the feature branch should not be merged by selecting **Abandon** from the drop-down on the **Complete** button. +The abandoned pull request will still be viewable on the web and stays linked to work items. + +Reactivate an abandoned pull request at any time by selecting the pull request from the **Abandoned** tab in the **Pull Request** view, then selecting **Reactivate**. + + +#### Receiving notification of pull request updates + +Subscribe to email alerts to get notified when changes are made to your pull requests. + +![](_img/VCtrlGitPullReqAlert2.png) + +## Revert a pull request + +Undo the changes made in a pull request by opening the completed pull request and selecting **Revert**. When you revert a pull request in this way, you create a new branch with changes that will +undo the pull request for an existing target branch in your repo. + +In the dialog that appears, pick the branch where you want to undo the pull request changes in the **Target branch** selector and the name of a new branch where the reverted changes will be created in the **Topic branch name** field, then select **Revert**. +Select **Create pull request** to merge the newly created branch in a second pull request to complete the revert. + +> Note: The branch created during this revert has a single commit that reverts the file changes in the pull request. The branch does not contain a reverted commit for each of the commits merged in the original pull request. + +## Cherry-pick a pull request + +Copy changes made in a pull request to another branch in your repo by selecting **Cherry-pick** while viewing the completed pull request or selecting **Cherry-pick** from the **...** menu while viewing an active pull request. +Cherry-picking a pull request in this way creates a new branch with the copied changes that you then merge into a target branch in a second pull request. + +In the dialog that appears, enter the branch you want to merge the copied changes into in the **Target branch** field and a new branch that will contain the copied changes in the **Topic branch name** field, then select **Cherry-pick**. +If there are no conflicts between the target branch and the newly created topic branch, you can then select **Create pull request** to merge the topic branch into the target branch to complete the cherry-pick. + +## Set a new default branch + +> This step requires [Edit Policies permissions](../security/set-git-tfvc-repository-permissions.md#git-repository) on your Git repo. + +Configure your Git repo to use a different default branch to merge code into when your team creates new pull requests. +This is useful when you want to use a branch other than `master` for new changes or need to change your main line of development in your repo. + +0. Select the settings icon while you have your team project open to bring up the project administration page. + + ![open up the administrative area of the team services web portal for your team project](_img/pull-requests/gear_icon_settings.png) + +0. Select **Version Control**. + +0. Select your Git repository. Your branches are displayed under your repo. + +0. Select the **...** next to the branch you want to set as default, then select **Set as default branch**. + + ![Set a default branch for a Git repo in VSTS or TFS](_img/pull-requests/set_default_branch.png) + diff --git a/docs/git/rebase.md b/docs/git/rebase.md new file mode 100644 index 00000000000..0285a493b1c --- /dev/null +++ b/docs/git/rebase.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/git/tutorial/rebase +--- \ No newline at end of file diff --git a/docs/git/repo-rename-tfs2015.md b/docs/git/repo-rename-tfs2015.md new file mode 100644 index 00000000000..5d831fe0ef9 --- /dev/null +++ b/docs/git/repo-rename-tfs2015.md @@ -0,0 +1,93 @@ +--- +title: Rename a Git repo in TFS 2015 | VSTS & TFS +description: You can rename a Git repository in a few steps, but be aware that your team will have to take a few more steps to adapt to the change. +ms.assetid: 05971618-4ea9-4997-bb51-2d74211352ef +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/04/2016 +--- + +# Rename a Git repository in TFS 2015 +#### TFS 2015 | Visual Studio 2015 & 2017 | [TFS 2017 & VSTS](repo-rename.md) + +You can rename a Git repository in a team project from your web browser. After you rename the repo, each member of your team will have to take a few steps to re-enable their dev machines to connect to the repo on the server. + +## Rename the repo on the server + +[!INCLUDE [temp](_shared/steps-open-control-panel-team-project.md)] + +0. Rename the repo from the Version Control tab. + + ![Rename a repository](_img/repo-rename/AdminVC.png) + +## Update the Git remotes on your dev machines + +Git uses remote references to fetch and push changes between your local copy of a repository and the remote version stored on the server. After a Git repository or team project has been renamed, your remote references need to updated. This is due to the fact that the remote repository URL contains the team project and the repository name. + +Each member of your team must update their local Git repos to continue connecting from their dev machines to the repo in the team project. The instructions below show how to update the remotes for the **Fabrikam Mobile** repo that was renamed to **Fabrikam**. + + +### Get the new URL for the repo + +Copy the repository URL to your clipboard. + +![Remote URL for the repository](_img/share-your-code-in-git-xcode/newrepocopycloneurl.png) + +### Update your remote in Visual Studio 2015 or 2017 + +1. Connect to the repo. + + ![Connect to the repository](_img/repo-rename/RepoConnect.png) + +2. Open the project settings. + + ![Project settings](_img/repo-rename/ProjectSettings.png) + +3. Open the repo settings. + + ![Repository settings](_img/repo-rename/RepoSettings.png) + +4. Edit the fetch and push remote references and paste the URL that you [copied from the remote repo](#copy_remote_repo_url). + + ![Edit remote](_img/repo-rename/EditRepoSettings.png) + +### Update your remote in older versions of Visual Studio from the command prompt + +If you use an older version of Visual Studio or work with Git from the command prompt: + +1. Open the Git command prompt. + +2. Go to the local repository and update the remote to the URL you [copied from the remote repo](#copy_remote_repo_url). + + ```git remote set-url origin {URL_you_copied_from_the_remote_repo}``` + +### Refresh Team Explorer + +1. Refresh Team Explorer. + + ![Refresh Team Explorer](_img/repo-rename/RefreshTeamExplorer.png) + +2. Team Explorer now shows the updated repo name. + + ![Team Explorer Updated](_img/repo-rename/Result.png) + +## Q&A + + + +#### Q: Can I rename my repo again? Can I re-use an old repo name? + +A: Yes + +#### Q: What if I named my remote something other than the default origin? + +A: If you are using: + + * Visual Studio 2015 or 2017, then edit the remote with the name you used. + + * An older version of Visual Studio or the command prompt, then run this command: ```git remote set-url {remote_name} {URL_you_copied_from_the_remote_repo}``` + + + \ No newline at end of file diff --git a/docs/git/repo-rename.md b/docs/git/repo-rename.md new file mode 100644 index 00000000000..cd7f28ab61d --- /dev/null +++ b/docs/git/repo-rename.md @@ -0,0 +1,101 @@ +--- +title: Rename a Git repo in your team project | VSTS & TFS +description: You can rename a Git repository in a few steps, but be aware that your team will have to take a few more steps to adapt to the change. +ms.assetid: 05971618-4ea9-4997-bb51-2d74211352ef +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 12/15/2016 +--- + +# Rename a Git repository in your team project +#### VSTS | TFS 2017 | Visual Studio 2015 | [Previous version](repo-rename-tfs2015.md) + +You can rename a Git repository in a team project from your web browser. After you rename the repo, each member of your team will have to take a few steps to re-enable their dev machines to connect to the repo on the server. + +## Rename the repo in VSTS or TFS + +0. Open the team project administration page while working in your team project on the web. + + ![Use the gear icon to open your team project administration page](_img/repo-mgmt/settings-gear-icon.png) + +0. Select **Version Control**. + +0. Hover over the repo you want to rename under **Git repositories** on the left and select **...**. Select **Rename repository...** from the menu. + + ![Rename a repository](_img/repo-mgmt/rename-repo-2107.png) + +0. Enter a new repo name in the **Repository name** field in the dialog, then select **Rename** + +> This step requires [Rename Repository permissions](../security/set-git-tfvc-repository-permissions.md#git-repository) on your Git repo. + +## Update the Git remotes on your dev machines + +Git uses remote references to fetch and push changes between your local copy of a repository and the remote version stored on the server. After a Git repository or team project has been renamed, your remote references need to updated. This is due to the fact that the remote repository URL contains the team project and the repository name. + +Each member of your team must update their local Git repos to continue connecting from their dev machines to the repo in the team project. The instructions below show how to update the remotes for the **Fabrikam Mobile** repo that was renamed to **Fabrikam**. + + +### Get the new URL for the repo + +Copy the repository clone URL to your clipboard. + +![Remote URL for the repository from the Clone button in TFS and VSTS](/tutorial/_img/get_clone_url.gif) + +### Update your remote in Visual Studio 2015 or 2017 + +1. Connect to the repo. + + ![Connect to the repository](_img/repo-rename/RepoConnect.png) + +2. Open the project settings. + + ![Project settings](_img/repo-rename/ProjectSettings.png) + +3. Open the repo settings. + + ![Repository settings](_img/repo-rename/RepoSettings.png) + +4. Edit the fetch and push remote references and paste the URL that you [copied from the remote repo](#copy_remote_repo_url). + + ![Edit remote](_img/repo-rename/EditRepoSettings.png) + +### Update your remote in older versions of Visual Studio from the command prompt + +If you use an older version of Visual Studio or work with Git from the command prompt: + +1. Open the Git command prompt. + +2. Go to the local repository and update the remote to the URL you [copied from the remote repo](#copy_remote_repo_url). + + ```git remote set-url origin {URL_you_copied_from_the_remote_repo}``` + +### Refresh Team Explorer + +1. Refresh Team Explorer. + + ![Refresh Team Explorer](_img/repo-rename/RefreshTeamExplorer.png) + +2. Team Explorer now shows the updated repo name. + + ![Team Explorer Updated](_img/repo-rename/Result.png) + +## Q&A + + + +#### Q: Can I rename my repo again? Can I re-use an old repo name? + +A: Yes + +#### Q: What if I named my remote something other than the default origin? + +A: If you are using: + + * Visual Studio 2015, then edit the remote with the name you used. + + * An older version of Visual Studio or the command prompt, then run this command: ```git remote set-url {remote_name} {URL_you_copied_from_the_remote_repo}``` + + + \ No newline at end of file diff --git a/docs/git/restore-deleted-branch.md b/docs/git/restore-deleted-branch.md new file mode 100644 index 00000000000..1d5716a4434 --- /dev/null +++ b/docs/git/restore-deleted-branch.md @@ -0,0 +1,32 @@ +--- +title: Restore a deleted branch in your Git repo | Team Services & TFS +description: Use the branches page to restore a deleted Git branch in Team Services or Team Foundation Server +ms.assetid: +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: jepling +ms.author: kangan +ms.date: 08/11/2017 +--- + +# Restore a deleted Git branch from the web interface + +#### Team Services | TFS 2018 + +>[!IMPORTANT] +> This topic covers restoring a deleted Git branch via the web in Team Services and TFS 2018. If you need to restore a Git branch in your own repo from Visual Studio or the command line, +[push](tutorial/pushing.md) your branch from your local repo to Team Services to restore it. + +0. Open your repo on the web and select the **Branches** view. + +0. Search for the exact branch name using the **Search all branches** box in the upper right. + +0. Click the link to **Search for exact match in deleted branches**. If there is a deleted branch that matches your search, you will be able to see which commit it pointed to when it was deleted, +who deleted it, and when it was deleted. + + ![Search for exact match in deleted branches in the Team Services/TFS web interface](_img/branches/search_deleted_branches.png) + +0. To restore the branch, select the **...** icon next to the branch name and then select **Restore branch** from the menu. The branch will be recreated at the last commit to which it pointed. +Note that branch policies and permissions will **not** be restored. + + ![Restore your deleted branch in the Team Services/TFS web interface](_img/branches/restore_deleted_branch.png) \ No newline at end of file diff --git a/docs/git/set-up-credential-managers.md b/docs/git/set-up-credential-managers.md new file mode 100644 index 00000000000..9f373aa76a2 --- /dev/null +++ b/docs/git/set-up-credential-managers.md @@ -0,0 +1,54 @@ +--- +title: Connect to your Git repos using credential managers | VSTS & TFS +description: Authenticate to Visual Studio VSTS and TFS Git repos using credential managers +ms.assetid: 7779af87-460c-4078-bc2b-ceb4b758c24e +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 01/09/2017 +--- + +# Use Git Credential Managers to Authenticate to Visual Studio Team Services +#### VSTS | TFS 2015 & 2017| Visual Studio 2015 & 2017 + +Git Credential Managers simplify authentication with your VSTS/TFS Git repos. Credential Managers let you use the same credentials that you use for the VSTS/TFS web interface and support multi-factor authentication through Microsoft Account (MSA) or Azure Active Directory (AAD). In addition to supporting multi-factor authentication with VSTS, the credential managers also provide support two-factor authentication with [GitHub repositories](https://help.github.com/articles/about-two-factor-authentication/). + +Team Services provides IDE support for MSA and AAD authentication through [Team Explorer in Visual Studio](../connect/connect-team-projects.md), [IntelliJ and Android Studio with the Team Services Plugin for IntelliJ](http://java.visualstudio.com/Docs/tools/intelliJ), and [Eclipse (with the Team Explorer Everywhere plug-in)] (https://github.com/Microsoft/team-explorer-everywhere). If your environment doesn't have an integration available, configure your IDE with a [Personal Access Token](../accounts/use-personal-access-tokens-to-authenticate.md) or [SSH](use-ssh-keys-to-authenticate.md) to connect with your to your repos. + +## Install the Git Credential Manager + +### Windows +Download and run the latest [Git for Windows installer](https://git-scm.com/download/win), which includes the Git Credential Manager for Windows. Make sure to leave the Git Credntial Manager installation option enabled when prompted. + + ![Select Enable Git Credential Manager during Git for Windows install](_img/install-with-gcm.png) + +### macOS and Linux + +> Review the [system and software requirements](https://github.com/Microsoft/Git-Credential-Manager-for-Mac-and-Linux/blob/master/Install.md#system-requirements) before installing the credential manager. + +On Mac OS X and Linux, there are [several install options](https://github.com/Microsoft/Git-Credential-Manager-for-Mac-and-Linux/blob/master/Install.md) that use native package managers to install the credential manager. After installing the package for your platform, run the following command to configure Git to use the credential manager : + +
        +> git-credential-manager install
        + +## Using the Git Credential Manager + +When you connect to a Team Services Git repository from your Git client for the first time, the credential manager will prompt for your Microsoft Account or Azure Active Directory credentials. If your account has multi-factor authentication enabled, you will go through that experience as well. + +![Git Credential Manager prompting during Git pull](_img/gcm_login_prompt.gif) + +Once authenticated, the credential manager will create and cache a [personal access token](../accounts/use-personal-access-tokens-to-authenticate.md) for future connections to the repo. Git commands that connect to this account will not prompt for user credentials until the token expires or is revoked through VSTS/TFS. + +### Getting help + +You can open up and report issues with the Git Credential Manager for Windows on the [project GitHub](https://github.com/Microsoft/Git-Credential-Manager-for-Windows/issues). +Frequently Asked Questions for the Git Credential Manager for Windows are available in [the online readme](https://github.com/Microsoft/Git-Credential-Manager-for-Windows/blob/master/Docs/Faq.md). + +Manual installation steps for the [Windows Git Credential Manager](https://github.com/Microsoft/Git-Credential-Manager-for-Windows/blob/master/README.md#manual-installation) and the [Mac OS X and Linux Git Credential Manager](https://github.com/Microsoft/Git-Credential-Manager-for-Mac-and-Linux/blob/master/Install.md#installing-on-mac-or-linux-without-a-package-manager) are available. Use these steps to install the credential manager if the recommended steps above are not suitable for your environment. + +### Learn more + +In addition to providing full source code, we've also documented how the credential manager integrates with Git. Refer to the MSDN blog posts on the [Mac OS X and Linux Git Credential Manager](http://blogs.msdn.com/b/visualstudioalm/archive/2015/11/18/visual-studio-team-services-git-credential-manager-for-mac-and-linux.aspx) and the +[Windows Credential Manager](http://blogs.msdn.com/b/visualstudioalm/archive/2015/12/08/announcing-the-git-credential-manager-for-windows-1-0.aspx). There is also +[an article on the project GitHub](https://github.com/Microsoft/Git-Credential-Manager-for-Windows/wiki/How-the-Git-Credential-Managers-works) with information on the low-level internals of the Git Credential Manager for Windows. \ No newline at end of file diff --git a/docs/git/share-your-code-in-git-cmdline.md b/docs/git/share-your-code-in-git-cmdline.md new file mode 100644 index 00000000000..04a4dc70164 --- /dev/null +++ b/docs/git/share-your-code-in-git-cmdline.md @@ -0,0 +1,104 @@ +--- +title: Share your code with Git from the command line | VSTS & TFS +description: Share code in Git using the command line +ms.assetid: 4b299dbf-3ca9-47af-bd6d-8c40bafac447 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 09/08/2017 +--- + +# Get started with Git from the command line + +#### VSTS | TFS 2015 & TFS 2017 + +This guide show you how to share your code in a VSTS Git repo using the command line. + +The instructions below use the default bash shell used on Linux and Mac OS X, but the Git commands will work in any shell, including Git Bash from Git for Windows. + +## Prerequisites + +* A VSTS account. If you don’t have one, you can [sign up](../accounts/create-account-msa-or-work-student.md) for one for free. Each account includes free, unlimited private Git repositories. + +## Download and install Git + +* [Windows](#windows) +* [macOS](#macos) +* [Linux and Unix](#linux-and-unix) + +### Windows + +Download and install [Git for Windows](https://git-scm.com/download/win) , which includes the [Git Credential Manager](set-up-credential-managers.md) to +easily connect to VSTS. + +### macOS + +Use [Homebrew](http://brew.sh/) to install and set up Git. + +``` +brew install git +``` + +### Linux and Unix + +Use your distribution's package management system to download and install Git. For example, on Ubuntu: + +``` +sudo apt-get install git +``` + +Refer to the [list of install commands](https://git-scm.com/download/linux) for the most up to date instructions for your Linux distribution. + +## Create your local repo + +Create a local Git repo for your code. If your code is already in a local Git repo, you can skip this step. + +0. Navigate to the folder where your code is on the command line: + + ``` + cd /home/fabrikam/fiber + ``` + +0. Create a Git repo on your machine to store your code. You will connect this repo to VSTS in the next step. + + ``` + git init . + ``` + +0. Commit your code into the local Git repo. + + ``` + git add --all + git commit -m "first commit of my code" + ``` + +## Create your VSTS repo + +0. [Create a new VSTS Git repo](create-new-repo.md) for your code. Copy the clone URL once you are done creating your repo. + + ![Get the clone URL after creating the VSTS repo](_img/share-your-code-in-git-cmdline/clone_url.png) + +0. Connect your local repo to the VSTS repo using the copied clone URL in the `git remote` command: + + ``` + git remote add origin https://fabrikops2.visualstudio.com/DefaultCollection/Fabrikam/_git/FabrikamApp + ``` + + +## Push your code + +Before pushing your code, set up authentication with [credential managers](set-up-credential-managers.md) or [SSH](use-ssh-keys-to-authenticate.md) before continuing. + +``` +git push origin master +``` + +## Next steps + +> [!div class="nextstepaction"] +> [New to Git repos? Learn more](https://www.visualstudio.com/learn/set-up-a-git-repository/) + +> [!div class="nextstepaction"] +> [Learn more about using Git in the Git tutorial](tutorial/gitworkflow.md) diff --git a/docs/git/share-your-code-in-git-eclipse.md b/docs/git/share-your-code-in-git-eclipse.md new file mode 100644 index 00000000000..b311db7606a --- /dev/null +++ b/docs/git/share-your-code-in-git-eclipse.md @@ -0,0 +1,96 @@ +--- +title: Share your Eclipse project with Git | VSTS & TFS +description: Share code in Git using Eclipse +ms.assetid: a00b91da-9f74-44f2-8c48-04bfd50a74c3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/30/2017 +--- + +# Share your code in Git using Eclipse +#### VSTS | TFS 2015 & 2017 + +Share your Eclipse project with your team in a VSTS/TFS Git repo. If you don’t have a VSTS account, you can [sign up](../accounts/create-account-msa-or-work-student.md) for one for free. Each account includes free, unlimited private Git repositories. + +## Prerequisites + +* A VSTS account. If you don’t have one, you can [sign up](../accounts/create-account-msa-or-work-student.md) for one for free. Each account includes free, unlimited private Git repositories. + + + +## Use Team Explorer Everywhere + +[Team Explorer Everywhere](https://www.visualstudio.com/en-us/products/team-explorer-everywhere-vs.aspx) is an [open-source](https://github.com/Microsoft/team-explorer-everywhere) Eclipse plug-in to connect Eclipse to Team Services or Team Foundation Server. If you're working with VSTS/TFS and Eclipse, use this plugin to connect to your repos, builds, and work items. + +0. [Install the Team Explorer Everywhere plug-in](http://java.visualstudio.com/docs/tools/eclipse#_install-the-tee-plugin-for-eclipse). + +0. Add the Team Explorer Everywhere view in Eclipse. Go to **Window, Show View** and select **Other...** Search for **Team Explorer**, select the **Team Explorer** view, and select **OK**. + + ![Add the Team Explorer view to Eclipse](_img/share-your-code-in-git-eclipse/add_team_explorer_to_eclipse.png) + +## Connect to VSTS + +0. In the Team Explorer Everywhere view, select **Connect to Team Services or a Team Foundation Server** . + + ![Select Connect to Team Foundation Server to connect your TFS or Team Services account](_img/share-your-code-in-git-eclipse/connect_to_vsts_from_tee.png) + + +0. If you know your VSTS or Team Foundation Server account URL, select the **Servers...** button under **Connect to a Team Foundation Server or Team Services account** to add your TFS server or account to the drop-down list. +If you don't know your account information for VSTS, select **Browse Visual Studio Services** and select **Next**. + + ![Add Existing Team Project Dialog](_img/share-your-code-in-git-eclipse/tee_existing_team_project.png) + + Either choice will prompt for your credentials before continuing further. + +0. Select the team project where you will share your code from the **Team Project Selection** dialog and select **Finish**. + +## Create a local Git repo for your Eclipse project + +Before you can push your project to VSTS, you need to add it to a local Git repo. + +> [!NOTE] +> If your code is already in a local Git repo, you can skip this step. + +0. Right-click your project name in Project Explorer and select **Team, Share Project...** Select **Git** and select **Next**. + +0. Select **Create...** from the **Configure Git Repository** window and choose a folder for your local Git repo. Select **Finish**. + + ![Create a local Git repo in Eclipse](_img/share-your-code-in-git-eclipse/eclipse_create_repo.png) + +0. Right-click your project in Project Explorer and select **Team, Commit...**. Stage your changes by dragging your files to the **Staged Changes** field, enter a commit message, then select **Commit**. + + ![Commit your code with Git in Eclipse](_img/share-your-code-in-git-eclipse/commit_files_in_eclipse.png) + +## Push your project to your VSTS/TFS repo + +0. In Team Explorer Everywhere, select **Git Repositories**, then right-click the empty repo you want to push your Eclipse project to and select **Copy Clone URL**. If you don't have an empty Git repo created in VSTS/TFS yet, you can create one using [these instructions](create-new-repo.md). + + ![Copy the Git repo clone URL in Team Explorer Everywhere with a right-click](_img/share-your-code-in-git-eclipse/tee_copy_clone_url.png) + +0. In Package Explorer, right-click your project and Select **Team, Push Branch ...** . Paste the clone URL from the clipboard into the **URI** field and select **Next**. Make sure **Configure upstream for push and pull** is selected in the next window and select **Next**. + + ![Push your code to Team Services using the Clone URL from the web](_img/share-your-code-in-git-eclipse/push_commits_to_team_services.png) + +0. Review the changes and select **Finish** in the **Push Branch** window. + +Your project code is now your Team Services Git repo. + +## Troubleshooting + +### What if the Git views for commit and push don't show up? + +You can [download EGit](http://www.eclipse.org/egit/) to use Git with Eclipse. + +## Next steps + +> [!div class="nextstepaction"] +> [Learn more about using Git in the Git tutorial](tutorial/gitworkflow.md) + + + + + + diff --git a/docs/git/share-your-code-in-git-vs-2013.md b/docs/git/share-your-code-in-git-vs-2013.md new file mode 100644 index 00000000000..4fc1b920901 --- /dev/null +++ b/docs/git/share-your-code-in-git-vs-2013.md @@ -0,0 +1,156 @@ +--- +title: Share your code with Git using Visual Studio 2013 | VSTS & TFS +description: Share code in Git using Visual Studio 2013 +ms.assetid: d4d85217-1967-412d-b253-b6c6289dc459 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +toc: show +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Share your code with Visual Studio 2013 and Team Services Git + +> [!div class="op_single_selector"] +> - [Visual Studio 2017](share-your-code-in-git-vs-2017.md) +> - [Visual Studio 2015 Update 2](share-your-code-in-git-vs.md) +> - [Visual Studio 2013](share-your-code-in-git-vs-2013.md) + +#### VSTS | TFS 2015 & TFS 2017 + +Whether your software project is large, small, or brand new, +in most cases you'll be better off if you use version control +as early as possible. Here, we'll show you how to get started with +Git, a distributed system. If you want to work in a centralized system, +you can instead use [TFVC with Visual Studio VSTS](../tfvc/share-your-code-in-tfvc-vs.md). + +[!INCLUDE [temp](_shared/open-team-project-in-vs.md)] + +## Clone your repository + +0. Clone the repository onto your dev machine. + + ![Choose Clone Repository](_img/share-your-code-in-git-vs/IC684063.png) + +0. Store the repository locally. + + ![Choose Clone to store the repository locally](_img/share-your-code-in-git-vs/IC682931.png) + +## Create a new app +If you don't already have an app in the repo, create one. + +0. Create a new project. + + ![New solution from team explorer](_img/share-your-code-in-git-vs/team-explorer-git-new-solution.png) + +0. Choose a template and add the new code project to version control. + + ![Choose a template](_img/create-your-app-vs/IC687148.png) + +## Confirm your settings and add the app + +0. On the changes page (Keyboard: Ctrl + 0, G), if you haven't already done it, +confirm your user name and email address. + + ![Configure settings from the changes page](_img/share-your-code-in-git-vs/confirm-git-settings-from-changes-page.png) + + ![Confirm the default settings](_img/share-your-code-in-git-vs/git-initial-settings-with-default-values.png) + +0. Add a comment and commit your app to version control. + + ![Add app to version control on Changes page](_img/share-your-code-in-git-vs/team-explorer-git-changes-add-app.png) + + +## Snapshot (commit) your code + +With your code project stored in a local Git repository on your dev machine, +you can commit as early and as often as you like. + +0. As you write your code, your changes are automatically tracked by Visual Studio. +You can commit one or more specific changes to your local repository from Solution Explorer +(Keyboard: Ctrl + Alt + L). + + ![When your changes are ready, select Commit](_img/share-your-code-in-git-vs/IC683030.png) + +0. On the Changes page, add a comment and then commit your changes. + + ![Add a comment and choose Commit](_img/share-your-code-in-git-vs/IC683031.png) + + These changes are now committed. + + ![Your changes are now committed](_img/share-your-code-in-git-vs/IC683032.png) + +## Pull changes from your team + +Pull changes on a regular basis to ensure your code integrates well with the latest code from the team. + +0. From the commits page (Keyboard: Ctrl + 0, O), fetch the commits to see any changes that your team has made. + + ![Choose Fetch to see any changes that your team has made](_img/share-your-code-in-git-vs/IC682939.png) + +0. When you're ready, pull these commits into your local repository. + + ![Choose Pull to get these commits locally](_img/share-your-code-in-git-vs/IC682942.png) + +0. The changes from your team are now integrated in your local repository. + + ![The changes are now integrated](_img/share-your-code-in-git-vs/IC682943.png) + +## Push your local commits to the server + +When the code you've written on your dev machine is ready, you can push your changes from your local Git repository to the team project. + +0. From the changes page (Keyboard: Ctrl + 0, G), make sure you've committed your changes. + + ![Commiting from the Changes page](_img/share-your-code-in-git-vs/IC682975.png) + +0. Go to the commits page (Keyboard: Ctrl + 0, C). + + ![Push changes](_img/share-your-code-in-git-vs/IC682976.png) + +0. Push your changes. + + ![Push changes](_img/share-your-code-in-git-vs/IC682977.png) + + +## Q&A + + + +[!INCLUDE [temp](_shared/open-team-project-in-vs-qa.md)] + +[!INCLUDE [temp](_shared/qa-vs-launch-fail.md)] + + +#### Q: How can I see what I've changed? + +A: To see what you've changed, compare your changes with the last commit. + + ![Choose Compare with Unmodified from the context menu](_img/share-your-code-in-git-vs/IC685270.png) + +#### Q: How can I get more information about the commits from my team before I pull them? + +A: Sometimes you need to see the details about incoming commits from your team. That way you can understand how a change will integrate with your work. + + ![Choose View Commit Details](_img/share-your-code-in-git-vs/IC682940.png) + + You can get details on the changes to each file. + + ![Choose Compare with Previous from the context menu](_img/share-your-code-in-git-vs/IC685291.png) + +#### Q: How do I associate my changes with related work items? + +A: From the changes page you can run a query, and then drag a work item into the list of related work items. + + ![Associating a work item on the Changes page](_img/share-your-code-in-git-vs/IC685315.png) + +#### Q: Can I use Git command-prompt tools? + +A: Yes. See [Use Git from the command prompt](command-prompt.md). + +#### Q: Where can I learn more? + +A: [Use Visual Studio and Team Foundation Server with Git](overview.md) + + \ No newline at end of file diff --git a/docs/git/share-your-code-in-git-vs-2017.md b/docs/git/share-your-code-in-git-vs-2017.md new file mode 100644 index 00000000000..4db61192cd7 --- /dev/null +++ b/docs/git/share-your-code-in-git-vs-2017.md @@ -0,0 +1,149 @@ +--- +title: Share your code with Git using Visual Studio 2017 | VSTS & TFS +description: Share code in Git using Visual Studio 2017 +ms.assetid: d34e594b-49c8-456f-87b4-fac75ef0d5c2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +toc: show +ms.manager: douge +ms.author: sdanie +ms.date: 09/07/2017 +--- + +# Share your code with Visual Studio 2017 and Team Services Git + +> [!div class="op_single_selector"] +> - [Visual Studio 2017](share-your-code-in-git-vs-2017.md) +> - [Visual Studio 2015 Update 2](share-your-code-in-git-vs.md) +> - [Visual Studio 2013](share-your-code-in-git-vs-2013.md) + +#### VSTS | TFS 2015 & TFS 2017 + +Share your Visual Studio solution in a new Team Services or Team Foundation Server Git repo. + +This article walks you through the steps to get a Visual Studio solution on your PC into a Git repo you can share with others, even if you don't have a Team Services account. + +If you want to work with a Visual Studio solution hosted in an existing repo, see the [Git tutorial](gitquickstart.md). + +## Prerequisites + +* A VSTS account. If you don’t have one, you can [sign up](../accounts/create-account-msa-or-work-student.md) for one for free. Each account includes free, unlimited private Git repositories. + +## Create a local Git repo for your project + +Create a new local Git repo for your project by selecting ![Add to Source Control](_img/share-your-code-in-git-vs/add_src_control_status_bar.png) on the status bar in the lower right hand corner of Visual Studio. +This will create a new repo in the folder the solution is in and commit your code into that repo. + +Once you have a local repo, select items in the status bar to quickly navigate between Git tasks in Team Explorer. + +![Visual Studio Git status bar](_img/share-your-code-in-git-vs/vs-status-bar.png) + +---- +- ![Visual Studio Unpublished Changes Status Bar icon](_img/share-your-code-in-git-vs/vs_unpublished_changes.png) shows the number of unpublished commits in your local branch. Selecting this will open the **Sync** view in Team Explorer. +- ![Visual Studio Pending Changes Status Bar icon](_img/share-your-code-in-git-vs/vs_pending_changes.png) shows the number of uncommitted file changes. Selecting this will open the **Changes** view in Team Explorer. +- ![Visual Studio Repo Status Bar icon](_img/share-your-code-in-git-vs/vs_current_repo.png) shows the current Git repo. Selecting this will open the **Connect** view in Team Explorer. +- ![Visual Studio branch status bar icon](_img/share-your-code-in-git-vs/vs_branch_picker.png) shows your current Git branch. Selecting this displays a branch picker to quickly switch between Git branches or create new branches. + +---- + +## Publish your code to Team Services + +0. In the **Push** view in Team Explorer, select the **Publish Git Repo** button under **Push to Visual Studio Team Services**. + + ![Publish your code from VS directly into VSTS](_img/share-your-code-in-git-vs/vsts_get_started_te.png) + +0. Verify your email and select your account in the **Team Services Domain** drop down. + +0. Enter your repository name and select **Publish Repository**. + + ![Publish your VS project to a new Team Services Git repo](_img/share-your-code-in-git-vs/vsts_publish_repo.png) + + This creates a new Team Project in your account with the same name as the repository. To create the repo in an existing Team Project, click **Advanced** next to **Repository name** and select a team project. + +Your code is now in a Team Services repo. You can view your code on the web by selecting **See it on the web** . + +![View your VSTS Git repo on the Web](_img/share-your-code-in-git-vs/vsts_view_on_web.png) + +## Commit and push updates + +0. As you write your code, your changes are automatically tracked by Visual Studio. +You can [commit](tutorial/commits.md) changes to your local Git repository by selecting the pending changes icon ![Visual Studio Pending Changes Status Bar icon](_img/share-your-code-in-git-vs/vs_pending_changes.png) from the status bar. + +0. On the **Changes** view in Team Explorer, add a message describing your update and commit your changes. + + ![Add a comment and choose Commit](_img/share-your-code-in-git-vs/vs_commit_te.png) + +0. Select the unpublished changes status bar icon ![Visual Studio Unpublished Changes Status Bar icon](_img/share-your-code-in-git-vs/vs_unpublished_changes.png) or the **Sync** view in Team Explorer. Select **Push** to +update your code in VSTS/TFS. + + ![Push your changes](_img/share-your-code-in-git-vs/vspush.png) + +## Get changes from others + +Sync your local repo with changes from your team as they make updates. + +0. From the **Sync** view in Team Explorer, fetch the [commits](tutorial/commits.md) that your team has made. +Double-click a commit to view its file changes. + + ![Choose Fetch to see any changes that your team has made](_img/share-your-code-in-git-vs/vs_fetch_commits.png) + +0. Select **Sync** to merge the fetched commits into your local repo and then [push](tutorial/pushing.md) any unpublished changes to VSTS. + + ![Choose Pull to get these commits locally](_img/share-your-code-in-git-vs/vs_sync_commits.png) + +0. The changes from your team are now in your local repo and visible in Visual Studio. + + ![The changes are now in your local repo](_img/share-your-code-in-git-vs/vs_pull_complete.png) + +## Frequently asked questions + +* [I don't see the **Add to Source Control** button in the status bar.](#i-dont-see-the-add-to-source-control-button-in-the-status-bar) +* [How can I see what changes are in a commit before I pull it into my local branch?](#how-can-i-see-what-changes-are-in-a-commit-before-i-pull-it-into-my-local-branch) +* [How do I associate my commits with work items?](#how-do-i-associate-my-commits-with-work-items) +* [Can I use the Git command prompt with Visual Studio?](#can-i-use-the-git-command-prompt-with-visual-studio) + + +### I don't see the **Add to Source Control** button in the status bar. + +The **Add to Source Control** button in the status bar ![Add to Source Control](_img/share-your-code-in-git-vs/add_src_control_status_bar.png) was added in Visual Studio 2017 (it was **Publish** in Visual Studio 2015 Update 2 and later) and will only appear when you have Git as your source control provider. If your code is already in a Git repo, you won't see the **Add to Source Control** button in the status bar, but the status of the current branch in your local repo instead. + +If you are in a previous version of Visual Studio, create a local Git repo for your project by selecting the **Create new Git repository** option in the **New Project** window when you create a new project. + +You can create a local Git repo for an existing solution by right-clicking your project in the Solution Explorer and selecting **Add Solution to Source Control**. + +### How can I see what changes are in a commit before I pull it into my local branch? + +To see what's changed in a commit, go to the **Syncrhonization** page in Team Explorer and right-click on the commit. Select **View Commit Details**. +You can then right-click on any file modified by the commit and select **Compare with Previous...** to view the changes compared to the previous +version of the file. + + ![Choose Compare with Previous from the context menu](_img/share-your-code-in-git-vs/vs_compare_with_previous.png) + +### How do I associate my commits with work items? + +You can include work items in your commits through **Related Work Items** in the **Changes** page in Team Explorer. + +![Adding work items to changes](_img/share-your-code-in-git-vs/vs_linked_work_items.png) + +Work items can be included in commits by adding #_ID_ into the commit message. For example, "Fixing bug #23 in the reporting tools" would link work item 23 +to the commit. The work item is linked when the commit is pushed to VSTS. + +### Can I use the Git command prompt with Visual Studio? + +Visual Studio's Team Explorer and the Git command line work great together. Changes to your repos made in either tool will be reflected in the other. +Make sure to install the latest release of [Git for Windows](https://git-scm.com/download/win), which has tools to help you connect to your VSTS/TFS repos. + +See [the Team Services Git tutorial](tutorial/gitworkflow.md) and the [command reference](command-prompt.md) for additional help using Git from the command line. + + +## Next steps + +> [!div class="nextstepaction"] +> [New to Git repos? Learn more](https://www.visualstudio.com/learn/set-up-a-git-repository/) + +> [!div class="nextstepaction"] +> [Checkout more steps in the Git workflow](gitquickstart.md) + + + diff --git a/docs/git/share-your-code-in-git-vs.md b/docs/git/share-your-code-in-git-vs.md new file mode 100644 index 00000000000..d7111422c93 --- /dev/null +++ b/docs/git/share-your-code-in-git-vs.md @@ -0,0 +1,135 @@ +--- +title: Share your code with Git using Visual Studio 2015 | VSTS & TFS +description: Share code in Git using Visual Studio +ms.assetid: 0c1dc48e-6f52-499d-a03e-6361c9a838dd +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +toc: show +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Share your code with Visual Studio 2015 and Team Services Git + +> [!div class="op_single_selector"] +> - [Visual Studio 2017](share-your-code-in-git-vs-2017.md) +> - [Visual Studio 2015 Update 2](share-your-code-in-git-vs.md) +> - [Visual Studio 2013](share-your-code-in-git-vs-2013.md) + +#### VSTS | TFS 2015 & TFS 2017 + +Share your Visual Studio solution in a new Team Services or Team Foundation Server Git repo. + +> This article walks you through the steps to get a Visual Studio solution on your PC into a Git repo you can share with others, even if you don't have a Team Services account. +> If you need to work with a Visual Studio solution hosted in an existing repo, use the [Git quick start](gitquickstart.md) instead. + +## Create a local Git repo for your project + +Create a new local Git repo for your project by selecting ![Publish to Git from the Visual Studio Status bar](_img/share-your-code-in-git-vs/publish_status_bar.png) on the status bar in the lower right hand corner of Visual Studio. +This will create a new repo in the folder the solution is in and commit your code into that repo. + +Once you have a local repo, select items in the status bar to quickly navigate between Git tasks in Team Explorer. + +![Visual Studio Git status bar](_img/share-your-code-in-git-vs/vs-status-bar.png) + +---- +- ![Visual Studio Unpublished Changes Status Bar icon](_img/share-your-code-in-git-vs/vs_unpublished_changes.png) shows the number of unpublished commits in your local branch. Selecting this will open the **Sync** view in Team Explorer. +- ![Visual Studio Pending Changes Status Bar icon](_img/share-your-code-in-git-vs/vs_pending_changes.png) shows the number of uncommitted file changes. Selecting this will open the **Changes** view in Team Explorer. +- ![Visual Studio Repo Status Bar icon](_img/share-your-code-in-git-vs/vs_current_repo.png) shows the current Git repo. Selecting this will open the **Connect** view in Team Explorer. +- ![Visual Studio branch status bar icon](_img/share-your-code-in-git-vs/vs_branch_picker.png) shows your current Git branch. Selecting this displays a branch picker to quickly switch between Git branches or create new branches. + +---- + +## Publish your code to Team Services + +0. In the **Sync** view in Team Explorer, select the **Publish Git Repo** button under **Publish to Visual Studio Team Services**. + + ![Publish your code from VS directly into VSTS](_img/share-your-code-in-git-vs/vsts_get_started_te.png) + +0. Verify your email and select your account in the **Account Url** drop down. + +0. Enter your repository name and select **Publish Repository**. + + ![Publish your VS project to a new Team Services Git repo](_img/share-your-code-in-git-vs/vsts_publish_repo.png) + + > This creates a new Team Project in your account with the same name as the repository. To create the repo in an existing Team Project, click **Advanced** +next to **Repository name** and select a team project. + +Your code is now in a Team Services repo. You can view your code on the web by selecting **See it on the web** . + + ![View your VSTS Git repo on the Web](_img/share-your-code-in-git-vs/vsts_view_on_web.png) + +## Commit and push updates + +0. As you write your code, your changes are automatically tracked by Visual Studio. +You can [commit](tutorial/commits.md) changes to your local Git repository by selecting the pending changes icon ( ![Visual Studio Pending Changes Status Bar icon](_img/share-your-code-in-git-vs/vs_pending_changes.png) ) from the status bar. + +0. On the **Changes** view in Team Explorer, add a message describing your update and commit your changes. + + ![Add a comment and choose Commit](_img/share-your-code-in-git-vs/vs_commit_te.png) + +0. Select the unpublished changes status bar icon ( ![Visual Studio Unpublished Changes Status Bar icon](_img/share-your-code-in-git-vs/vs_unpublished_changes.png) ) or the **Sync** view in Team Explorer. Select **Push** to +update your code in VSTS/TFS. + + ![Push your changes](tutorial/_img/vspush.gif) + +## Get changes from others + +Sync your local repo with changes from your team as they make updates. + +0. From the **Sync** view in Team Explorer, fetch the [commits](tutorial/commits.md) that your team has made. +Double-click a commit to view its file changes. + + ![Choose Fetch to see any changes that your team has made](_img/share-your-code-in-git-vs/vs_fetch_commits.png) + +0. Select **Sync** to merge the fetched commits into your local repo and then [push](tutorial/pushing.md) any unpublished changes to VSTS. + + ![Choose Pull to get these commits locally](_img/share-your-code-in-git-vs/vs_sync_commits.png) + +0. The changes from your team are now in your local repo and visible in Visual Studio. + + ![The changes are now in your local repo](_img/share-your-code-in-git-vs/vs_pull_complete.png) + +## Try this next + +[Set up a build](../build-release/overview.md) for your code and learn more about using Git in the [Team Services Git tutorial](tutorial/gitworkflow.md). + +## Troubleshooting + + + +### I don't see the **Publish** button in the status bar. + +A: The **Publish** link in the status bar ( ![Publish to Git from the Visual Studio Status bar](_img/share-your-code-in-git-vs/publish_status_bar.png) ) was added in Visual Studio 2015 Update 2 and will only appear when you have Git as your source control provider. If your code is +already in a Git repo, you won't see the **Publish** button in the status bar, but the information from your local repo instead. + +If you are in a previous version of Visual Studio, create a local Git repo for your project by selecting the **Create new Git repository** option in the **New Project** window when you create a new project. + +You can create a local Git repo for an existing solution by right-clicking your project in the Solution Explorer and selecting **Add Solution to Source Control**. + +### How can I see what changes are in a commit before I pull it into my local branch? + +A: To see what's changed in a commit, go to the **Syncrhonization** page in Team Explorer and right-click on the commit. Select **View Commit Details**. +You can then right-click on any file modified by the commit and select **Compare with Previous...** to view the changes compared to the previous +version of the file. + + ![Choose Compare with Previous from the context menu](_img/share-your-code-in-git-vs/vs_compare_with_previous.png) + +### How do I associate my commits with work items? + +A: You can include work items in your commits through **Related Work Items** in the **Changes** page in Team Explorer. + +![Adding work items to changes](_img/share-your-code-in-git-vs/vs_linked_work_items.png) + +Work items can be included in commits by adding #_ID_ into the commit message. For example, "Fixing bug #23 in the reporting tools" would link work item 23 +to the commit. The work item is linked when the commit is pushed to VSTS. + +### Can I use the Git command prompt with Visual Studio? + +A: Visual Studio's Team Explorer and the Git command line work great together. Changes to your repos made in either tool will be reflected in the other. +Make sure to install the latest release of [Git for Windows](https://git-scm.com/download/win), which has tools to help you connect to your VSTS/TFS repos. + +See [the Team Services Git tutorial](tutorial/gitworkflow.md) and the [command reference](command-prompt.md) for additional help using Git from the command line. + + \ No newline at end of file diff --git a/docs/git/share-your-code-in-git-xcode.md b/docs/git/share-your-code-in-git-xcode.md new file mode 100644 index 00000000000..41d33174dc6 --- /dev/null +++ b/docs/git/share-your-code-in-git-xcode.md @@ -0,0 +1,87 @@ +--- +title: Share your Xcode project with Git | VSTS & TFS +description: "Share code in Git using Xcode" +ms.assetid: "f1fedd72-d9b9-45cf-99aa-2e624c899c45" +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/30/2017 +--- + +# Share your code in Git using Xcode +#### VSTS | TFS 2015 & 2017 + +This guide shows you how to share your Xcode projects in a VSTS Git repo. + +## Prerequisites + +* A VSTS account. If you don’t have one, you can [sign up](../accounts/create-account-msa-or-work-student.md) for one for free. Each account includes free, unlimited private Git repositories. + +## Create a local Git repo for your Xcode project + +Create a local Git repo for your code to manage your project in version control. + +* [New projects](#new-projects) +* [Existing projects](#existing-projects) + +If your project is already in a local Git repo, you can skip ahead to [Create a new VSTS repo](#create-a-new-vsts-repo). + +### New projects + +Create a local Git repo when you create a new project. Choose **Create Git repository on My Mac** when creating a new project. + +![Create a Git repo at the time of Xcode project creation](_img/share-your-code-in-git-xcode/xcodenewproject.png) + +### Existing projects + +Create a local Git repo for your existing projects not in version control by going to **Source Control, Create Working Copy...** . Select the projects to add to the local Git repo and select **Create**. Xcode creates a Git repo for your code and adds a [commit](tutorial/commits.md) with your project files. + +![Add a local Git repo to an existing Xcode project](_img/share-your-code-in-git-xcode/xcodecreateworkingcopy.png) + +## Create a new VSTS repo + +Create a new Git repo in VSTS for your Xcode project. + +If you have already created a repo for your Xcode project in VSTS, you can skip ahead to [Push your project](#push-your-project). + +0. Browse to your Team Project in your Team Services account and select the drop-down ![Team Services drop-down picker](_img/share-your-code-in-git-xcode/vsts_drop_down_arrow.png) next to the name of the current Git repo. Select **New Repository..** + ![Create a new Git repo in VSTS](_img/share-your-code-in-git-xcode/newrepo.png) + +0. Enter a name for your new Git repo and select **Create**. Your browser will navigate to your new empty Git repo for your Xcode project. Copy the clone URL to the clipboard so that you can use it in Xcode to connect to VSTS. + + ![Copy the clone URL for your new Git repo](_img/share-your-code-in-git-xcode/newrepocopycloneurl.png) + + > [!NOTE] + > If you want to use SSH to connect to your VSTS Git repo, [Set up SSH credentials](use-ssh-keys-to-authenticate.md) and use the SSH clone URL when adding the remote for your local Git repo. + +## Push your project + +0. Go to **Source Control** in Xcode and select **_Projectname_ -- master**, then **Configure...** + + ![Configure your Xcode Git project settings](_img/share-your-code-in-git-xcode/xcodeconfigureproject.png) + +0. Select **Remotes**, then select the ![plus](_img/share-your-code-in-git-xcode/xcodeplusicon.png) icon and choose **Add Remote...** + +0. In the **Address** field, paste the Git clone URL for your VSTS repo copied in the previous step. Select **Add Remote**, then select **Done** to finish creating the `origin` remote for your local Git repo. + + ![Add a remote to the local Git repo for your Xcode project to connect to VSTS](_img/share-your-code-in-git-xcode/xcodeaddremote2.png) + +0. Go to **Source Control, Push...**, enter the branchname on `origin` to push to, and select **Push**. + + ![Push your Xcode project to VSTS](_img/share-your-code-in-git-xcode/xcodepushtomaster.png) + +0. If prompted, enter your VSTS credentials. For **Username**, enter your VSTS username. For **Password**, enter a [Personal Access Token](../accounts/use-personal-access-tokens-to-authenticate.md) created for your user in VSTS. Select **OK**. + + ![Authenticate using personal access tokens to VSTS](_img/share-your-code-in-git-xcode/xcodeauthentication.png) + +Xcode will [push](tutorial/pushing.md) your project to your VSTS Git repo so you can share it with your team. + +## Next steps + +> [!div class="nextstepaction"] +> [Learn more about using Git in the Git tutorial](tutorial/gitworkflow.md) + + + diff --git a/docs/git/team-projects.md b/docs/git/team-projects.md new file mode 100644 index 00000000000..f05ce4b1488 --- /dev/null +++ b/docs/git/team-projects.md @@ -0,0 +1,58 @@ +--- +title: Use TFVC and Git repos in the same team project | VSTS & TFS +description: Using Version Control in Your Team Services team project +ms.assetid: F1DE1F34-50BD-49A6-BF67-D27F884944F4 +toc: show +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/04/2016 +--- + +# Use Git and TFVC repos in the same team project +#### VSTS | TFS 2015 + +In Team Foundation Server 2015 Update 1, a project administrator can add a Git repo to a team project created with Team Foundation Version Control (TFVC). You can also add a TFVC repo to a team project created with Git. This allows you to adopt a new version control system while preserving all the data in your team project. + +## Enable access to the new repo type + +Because permissions are applied at project creation time by a process template, there will be a small amount of work to correct permissions for a new repo type. + +### Add Git repos to a Team Foundation Version Control team project + +If your TFVC team project was created prior to TFS 2015 Update 1, a project administrator will need to apply some project-level permissions once the first Git repo is created. Go to the Version Control administration page and select the "Git repositories" node in the tree. To set up the same group permissions as any of our default process templates (Agile, Scrum, CMMI), add the following TFS groups and permissions: + +1. [_ProjectName_]\Readers + - Allow: Read + - Not set: All others +2. [_ProjectName_]\Contributors + - Allow: Branch creation, Contribute, Note management, Read, Tag creation + - Not set: All others +3. [_ProjectName_]\Build Administrators + - Allow: Branch creation, Contribute, Note management, Read, Tag creation + - Not set: All others + +If your TFVC project was created **after** TFS 2015 Update 1, these permissions have already been applied for you, and no action is necessary except creating the repository. + +### Add a Team Foundation Version Control repo to a Git team project + +The project administrator will need to apply some project folder-level permissions when the team project folder is created. Go to the Version Control administration page and select the "$/_ProjectName_" node in the tree. To set up the same groups as any of our default process templates (Agile, Scrum, CMMI), add the following TFS groups and permissions: + +1. [_ProjectName_]\Readers + - Allow: Read + - Not set: All others +2. [_ProjectName_]\Contributors + - Allow: Check in, Check out, Label, Lock, Merge, Read + - Not set: All others +3. [_ProjectName_]\Build Administrators + - Allow: Check in, Check out, Label, Lock, Merge, Read + - Not set: All others + +## Team Projects with multiple repo types in Visual Studio + +To see both types of repos in Visual Studio, you need Visual Studio 2015 Update 1. Older versions of Visual Studio, including 2015 RTM, will only see the type of repo created with the team project. For example, if the team project was created with Git you will only see Git repos when you connect from Visual Studio 2015 RTM or earlier. + +## Team Projects with multiple repo types in Team Explorer Everywhere + +To see both types of repos in Eclipse, you need the Team Explorer Everywhere Plugin for Eclipse 14.0.2. Older versions of the plugin will only see the type of repo created with the team project. For example, if the team project was created with Git you will only see Git repos when you connect with Team Explorer Everywhere 14.0.1 or earlier. \ No newline at end of file diff --git a/docs/git/toc.yml b/docs/git/toc.yml new file mode 100644 index 00000000000..f8152eefb3b --- /dev/null +++ b/docs/git/toc.yml @@ -0,0 +1,161 @@ +- name: Git + href: index.md +- name: Overview + items: + - name: Learn about Git + href: tutorial/gitworkflow.md +- name: Quickstarts + items: + - name: Create repo - Web + href: create-new-repo.md + - name: Create repo - CLI + href: share-your-code-in-git-cmdline.md + - name: Create repo - Visual Studio + href: share-your-code-in-git-vs-2017.md + - name: Create repo - IntelliJ + href: create-repo-intellij.md + - name: Create repo - Xcode + href: share-your-code-in-git-xcode.md + - name: Create repo - Eclipse + href: share-your-code-in-git-eclipse.md + - name: Import repo - Web + href: import-git-repository.md +- name: Tutorials + href: gitquickstart.md + items: + - name: Create a new repo + href: tutorial/creatingrepo.md + - name: Clone an existing repo + href: tutorial/clone.md + - name: Save work with commits + href: tutorial/commits.md + - name: Create work in branches + href: tutorial/branches.md + - name: Share code with push + href: tutorial/pushing.md + - name: Update code with fetch and pull + href: tutorial/pulling.md + - name: Review code with pull requests + href: tutorial/pullrequest.md + - name: Apply changes with rebase + href: tutorial/rebase.md + - name: Copy changes with cherry-pick + href: tutorial/cherry-pick.md + - name: Resolve merge conflicts + href: tutorial/merging.md + - name: Undo changes + href: tutorial/undo.md + - name: Ignore files + href: tutorial/ignore-files.md + - name: Review history + href: tutorial/history.md +- name: Samples + items: + - name: VSTS Samples for .NET + href: https://github.com/Microsoft/vsts-dotnet-samples +- name: Concepts + items: + - name: History in Git + href: concepts/history.md + - name: History simplification + href: concepts/history-simplification.md + - name: Branch organization + href: concepts/git-branching-guidance.md + - name: Pull requests + href: concepts/pull-requests.md + name: Forks + href: concepts/forks.md + - name: Authentication + href: auth-overview.md + - name: Understand dates in Git + href: concepts/git-dates.md + - name: Understand names in Git + href: concepts/git-names.md + - name: IDE integration and extension + items: + - name: Visual Studio + href: ../accounts/set-up-vs.md + - name: Visual Studio Code + href: https://marketplace.visualstudio.com/items?itemName=ms-vsts.team + - name: Eclipse + href: http://java.visualstudio.com/Docs/tools/eclipse + - name: IntelliJ IDEA + href: https://java.visualstudio.com/Docs/tools/intelliJ + - name: Scale + items: + - name: Large teams + href: https://visualstudio.com/git-at-scale + - name: Manage large files + href: manage-large-files.md + - name: Map TFVC actions to Git + href: concepts/mapping-my-tfvc-actions-to-git.md +- name: How-to Guides + items: + - name: Authenticate with SSH + href: use-ssh-keys-to-authenticate.md + - name: Authenticate with the Git Credential Manager + href: set-up-credential-managers.md + - name: Import a repo from TFVC + href: import-from-TFVC.md + - name: Create a pull request status server + href: how-to/create-pr-status-server.md + - name: Configure branch policy for an external service + href: how-to/pr-status-policy.md + - name: Manage repos + items: + - name: Delete a repo + href: delete-existing-repo.md + - name: Rename a repo + href: repo-rename.md + - name: Find a file + href: find-a-file.md + - name: Create a readme + href: create-a-readme.md + - name: Git and TFVC repos + href: team-projects.md + - name: Manage branches + items: + - name: Manage your branches + href: manage-your-branches.md + - name: Create a new branch + href: create-branch.md + - name: Delete a branch + href: delete-branch.md + - name: Restore a deleted branch + href: restore-deleted-branch.md + - name: Lock a branch + href: lock-branches.md + - name: Branch policies + href: branch-policies.md + - name: Branch permissions + href: branch-permissions.md + - name: Set up continuous integration + href: ../build-release/concepts/definitions/build/triggers.md +- name: Reference + items: + - name: Command reference + href: command-prompt.md + - name: Frequently asked questions + href: tutorial/howto.md + - name: History + items: + - name: Commit history + href: commit-history.md + - name: Commit details + href: commit-details.md + - name: Pull requests + items: + - name: Review code with pull requests + href: pull-requests.md + - name: Format comments with markdown + href: ../reference/markdown-guidance.md + - name: Squash merge pull requests + href: merging-with-squash.md + - name: Git REST APIs + href: https://visualstudio.com/docs/integrate/api/git/overview +- name: Resources + items: + - name: Pro Git + href: https://www.git-scm.com/book/en/v2 + name: Learn Git + href: https://www.visualstudio.com/learn-git/ diff --git a/docs/git/tutorial/_img/CreateNewRepoVS.png b/docs/git/tutorial/_img/CreateNewRepoVS.png new file mode 100644 index 00000000000..e2ab7c460f0 Binary files /dev/null and b/docs/git/tutorial/_img/CreateNewRepoVS.png differ diff --git a/docs/git/tutorial/_img/addRepoFromExisting.png b/docs/git/tutorial/_img/addRepoFromExisting.png new file mode 100644 index 00000000000..acd9265fbbc Binary files /dev/null and b/docs/git/tutorial/_img/addRepoFromExisting.png differ diff --git a/docs/git/tutorial/_img/add_remote_vs.png b/docs/git/tutorial/_img/add_remote_vs.png new file mode 100644 index 00000000000..973d69e0d97 Binary files /dev/null and b/docs/git/tutorial/_img/add_remote_vs.png differ diff --git a/docs/git/tutorial/_img/afterrebase.png b/docs/git/tutorial/_img/afterrebase.png new file mode 100644 index 00000000000..13c73bfdc02 Binary files /dev/null and b/docs/git/tutorial/_img/afterrebase.png differ diff --git a/docs/git/tutorial/_img/beforerebase.png b/docs/git/tutorial/_img/beforerebase.png new file mode 100644 index 00000000000..23a306c5041 Binary files /dev/null and b/docs/git/tutorial/_img/beforerebase.png differ diff --git a/docs/git/tutorial/_img/branch.png b/docs/git/tutorial/_img/branch.png new file mode 100644 index 00000000000..613828977d4 Binary files /dev/null and b/docs/git/tutorial/_img/branch.png differ diff --git a/docs/git/tutorial/_img/branchGraph.png b/docs/git/tutorial/_img/branchGraph.png new file mode 100644 index 00000000000..f6ec7d20426 Binary files /dev/null and b/docs/git/tutorial/_img/branchGraph.png differ diff --git a/docs/git/tutorial/_img/branches_view_team_services.png b/docs/git/tutorial/_img/branches_view_team_services.png new file mode 100644 index 00000000000..a4b47786c51 Binary files /dev/null and b/docs/git/tutorial/_img/branches_view_team_services.png differ diff --git a/docs/git/tutorial/_img/clone_other_providers.png b/docs/git/tutorial/_img/clone_other_providers.png new file mode 100644 index 00000000000..82e83daac83 Binary files /dev/null and b/docs/git/tutorial/_img/clone_other_providers.png differ diff --git a/docs/git/tutorial/_img/commitGraph.png b/docs/git/tutorial/_img/commitGraph.png new file mode 100644 index 00000000000..c97203f31a7 Binary files /dev/null and b/docs/git/tutorial/_img/commitGraph.png differ diff --git a/docs/git/tutorial/_img/commits.png b/docs/git/tutorial/_img/commits.png new file mode 100644 index 00000000000..c2608ffd2c5 Binary files /dev/null and b/docs/git/tutorial/_img/commits.png differ diff --git a/docs/git/tutorial/_img/completepull.gif b/docs/git/tutorial/_img/completepull.gif new file mode 100644 index 00000000000..85dea29ae8b Binary files /dev/null and b/docs/git/tutorial/_img/completepull.gif differ diff --git a/docs/git/tutorial/_img/conflict.png b/docs/git/tutorial/_img/conflict.png new file mode 100644 index 00000000000..0217b16467f Binary files /dev/null and b/docs/git/tutorial/_img/conflict.png differ diff --git a/docs/git/tutorial/_img/conflictGraph.png b/docs/git/tutorial/_img/conflictGraph.png new file mode 100644 index 00000000000..30386be71f1 Binary files /dev/null and b/docs/git/tutorial/_img/conflictGraph.png differ diff --git a/docs/git/tutorial/_img/connect_to_vsts_from_vs2015.png b/docs/git/tutorial/_img/connect_to_vsts_from_vs2015.png new file mode 100644 index 00000000000..b1a0800b2a2 Binary files /dev/null and b/docs/git/tutorial/_img/connect_to_vsts_from_vs2015.png differ diff --git a/docs/git/tutorial/_img/createpullrequest.gif b/docs/git/tutorial/_img/createpullrequest.gif new file mode 100644 index 00000000000..d366672865c Binary files /dev/null and b/docs/git/tutorial/_img/createpullrequest.gif differ diff --git a/docs/git/tutorial/_img/get_clone_url.gif b/docs/git/tutorial/_img/get_clone_url.gif new file mode 100644 index 00000000000..25d2853d5f2 Binary files /dev/null and b/docs/git/tutorial/_img/get_clone_url.gif differ diff --git a/docs/git/tutorial/_img/git_file_status_lifecycle.png b/docs/git/tutorial/_img/git_file_status_lifecycle.png new file mode 100644 index 00000000000..6d59b4139b3 Binary files /dev/null and b/docs/git/tutorial/_img/git_file_status_lifecycle.png differ diff --git a/docs/git/tutorial/_img/gitpush.png b/docs/git/tutorial/_img/gitpush.png new file mode 100644 index 00000000000..1860ec0e00d Binary files /dev/null and b/docs/git/tutorial/_img/gitpush.png differ diff --git a/docs/git/tutorial/_img/gitworkflow.png b/docs/git/tutorial/_img/gitworkflow.png new file mode 100644 index 00000000000..8eb8f6f98f4 Binary files /dev/null and b/docs/git/tutorial/_img/gitworkflow.png differ diff --git a/docs/git/tutorial/_img/merge-conflict-resolved.png b/docs/git/tutorial/_img/merge-conflict-resolved.png new file mode 100644 index 00000000000..5bd9a5939f9 Binary files /dev/null and b/docs/git/tutorial/_img/merge-conflict-resolved.png differ diff --git a/docs/git/tutorial/_img/merge-conflict.png b/docs/git/tutorial/_img/merge-conflict.png new file mode 100644 index 00000000000..7b220cf92e5 Binary files /dev/null and b/docs/git/tutorial/_img/merge-conflict.png differ diff --git a/docs/git/tutorial/_img/merge.png b/docs/git/tutorial/_img/merge.png new file mode 100644 index 00000000000..ebda8b3d92d Binary files /dev/null and b/docs/git/tutorial/_img/merge.png differ diff --git a/docs/git/tutorial/_img/mergeGraph.png b/docs/git/tutorial/_img/mergeGraph.png new file mode 100644 index 00000000000..0ba49686ed9 Binary files /dev/null and b/docs/git/tutorial/_img/mergeGraph.png differ diff --git a/docs/git/tutorial/_img/merge_prompt_vs.png b/docs/git/tutorial/_img/merge_prompt_vs.png new file mode 100644 index 00000000000..9e1bcb01587 Binary files /dev/null and b/docs/git/tutorial/_img/merge_prompt_vs.png differ diff --git a/docs/git/tutorial/_img/pull-request-detail.png b/docs/git/tutorial/_img/pull-request-detail.png new file mode 100644 index 00000000000..f330b2d1403 Binary files /dev/null and b/docs/git/tutorial/_img/pull-request-detail.png differ diff --git a/docs/git/tutorial/_img/pull_request_comment.png b/docs/git/tutorial/_img/pull_request_comment.png new file mode 100644 index 00000000000..5c39a23124c Binary files /dev/null and b/docs/git/tutorial/_img/pull_request_comment.png differ diff --git a/docs/git/tutorial/_img/push.png b/docs/git/tutorial/_img/push.png new file mode 100644 index 00000000000..49d85d66537 Binary files /dev/null and b/docs/git/tutorial/_img/push.png differ diff --git a/docs/git/tutorial/_img/rebase_branch.png b/docs/git/tutorial/_img/rebase_branch.png new file mode 100644 index 00000000000..0a2e822ff75 Binary files /dev/null and b/docs/git/tutorial/_img/rebase_branch.png differ diff --git a/docs/git/tutorial/_img/rebase_complete.png b/docs/git/tutorial/_img/rebase_complete.png new file mode 100644 index 00000000000..b74b76d6c77 Binary files /dev/null and b/docs/git/tutorial/_img/rebase_complete.png differ diff --git a/docs/git/tutorial/_img/team_services_branch_options.png b/docs/git/tutorial/_img/team_services_branch_options.png new file mode 100644 index 00000000000..3ddb0c43d57 Binary files /dev/null and b/docs/git/tutorial/_img/team_services_branch_options.png differ diff --git a/docs/git/tutorial/_img/vs-stage-files.gif b/docs/git/tutorial/_img/vs-stage-files.gif new file mode 100644 index 00000000000..55b0700f3ad Binary files /dev/null and b/docs/git/tutorial/_img/vs-stage-files.gif differ diff --git a/docs/git/tutorial/_img/vs_amend_commit.png b/docs/git/tutorial/_img/vs_amend_commit.png new file mode 100644 index 00000000000..81a482d8c0f Binary files /dev/null and b/docs/git/tutorial/_img/vs_amend_commit.png differ diff --git a/docs/git/tutorial/_img/vs_diff_changes.png b/docs/git/tutorial/_img/vs_diff_changes.png new file mode 100644 index 00000000000..5506d7646d9 Binary files /dev/null and b/docs/git/tutorial/_img/vs_diff_changes.png differ diff --git a/docs/git/tutorial/_img/vs_history_view.png b/docs/git/tutorial/_img/vs_history_view.png new file mode 100644 index 00000000000..2448a317303 Binary files /dev/null and b/docs/git/tutorial/_img/vs_history_view.png differ diff --git a/docs/git/tutorial/_img/vs_ignore.png b/docs/git/tutorial/_img/vs_ignore.png new file mode 100644 index 00000000000..1a0fe23ee94 Binary files /dev/null and b/docs/git/tutorial/_img/vs_ignore.png differ diff --git a/docs/git/tutorial/_img/vs_open_solution.gif b/docs/git/tutorial/_img/vs_open_solution.gif new file mode 100644 index 00000000000..12fbfd5fb91 Binary files /dev/null and b/docs/git/tutorial/_img/vs_open_solution.gif differ diff --git a/docs/git/tutorial/_img/vs_pull_requests.png b/docs/git/tutorial/_img/vs_pull_requests.png new file mode 100644 index 00000000000..146c215517c Binary files /dev/null and b/docs/git/tutorial/_img/vs_pull_requests.png differ diff --git a/docs/git/tutorial/_img/vs_reset_branch.png b/docs/git/tutorial/_img/vs_reset_branch.png new file mode 100644 index 00000000000..9e6b42174c7 Binary files /dev/null and b/docs/git/tutorial/_img/vs_reset_branch.png differ diff --git a/docs/git/tutorial/_img/vs_reset_single_file.gif b/docs/git/tutorial/_img/vs_reset_single_file.gif new file mode 100644 index 00000000000..9924eae75c5 Binary files /dev/null and b/docs/git/tutorial/_img/vs_reset_single_file.gif differ diff --git a/docs/git/tutorial/_img/vs_revert_changes.png b/docs/git/tutorial/_img/vs_revert_changes.png new file mode 100644 index 00000000000..87c874b20fc Binary files /dev/null and b/docs/git/tutorial/_img/vs_revert_changes.png differ diff --git a/docs/git/tutorial/_img/vs_select_team_project.png b/docs/git/tutorial/_img/vs_select_team_project.png new file mode 100644 index 00000000000..27a3f01944c Binary files /dev/null and b/docs/git/tutorial/_img/vs_select_team_project.png differ diff --git a/docs/git/tutorial/_img/vs_view_commit_details.png b/docs/git/tutorial/_img/vs_view_commit_details.png new file mode 100644 index 00000000000..1ef84f19d3c Binary files /dev/null and b/docs/git/tutorial/_img/vs_view_commit_details.png differ diff --git a/docs/git/tutorial/_img/vs_view_file_commit_details.png b/docs/git/tutorial/_img/vs_view_file_commit_details.png new file mode 100644 index 00000000000..4a319d397af Binary files /dev/null and b/docs/git/tutorial/_img/vs_view_file_commit_details.png differ diff --git a/docs/git/tutorial/_img/vsbranch.gif b/docs/git/tutorial/_img/vsbranch.gif new file mode 100644 index 00000000000..e59b5e6404e Binary files /dev/null and b/docs/git/tutorial/_img/vsbranch.gif differ diff --git a/docs/git/tutorial/_img/vsbranchdelete.gif b/docs/git/tutorial/_img/vsbranchdelete.gif new file mode 100644 index 00000000000..5411f32e615 Binary files /dev/null and b/docs/git/tutorial/_img/vsbranchdelete.gif differ diff --git a/docs/git/tutorial/_img/vscherrypick.gif b/docs/git/tutorial/_img/vscherrypick.gif new file mode 100644 index 00000000000..17db368d202 Binary files /dev/null and b/docs/git/tutorial/_img/vscherrypick.gif differ diff --git a/docs/git/tutorial/_img/vscommit.gif b/docs/git/tutorial/_img/vscommit.gif new file mode 100644 index 00000000000..9ae97b6e7fd Binary files /dev/null and b/docs/git/tutorial/_img/vscommit.gif differ diff --git a/docs/git/tutorial/_img/vscommitall.gif b/docs/git/tutorial/_img/vscommitall.gif new file mode 100644 index 00000000000..de113ed05f8 Binary files /dev/null and b/docs/git/tutorial/_img/vscommitall.gif differ diff --git a/docs/git/tutorial/_img/vscreategitrepo.png b/docs/git/tutorial/_img/vscreategitrepo.png new file mode 100644 index 00000000000..36f53c91006 Binary files /dev/null and b/docs/git/tutorial/_img/vscreategitrepo.png differ diff --git a/docs/git/tutorial/_img/vsfetch.gif b/docs/git/tutorial/_img/vsfetch.gif new file mode 100644 index 00000000000..88a07474b18 Binary files /dev/null and b/docs/git/tutorial/_img/vsfetch.gif differ diff --git a/docs/git/tutorial/_img/vsmerge.gif b/docs/git/tutorial/_img/vsmerge.gif new file mode 100644 index 00000000000..67e9f8d0786 Binary files /dev/null and b/docs/git/tutorial/_img/vsmerge.gif differ diff --git a/docs/git/tutorial/_img/vsmergechoices.png b/docs/git/tutorial/_img/vsmergechoices.png new file mode 100644 index 00000000000..f91212e59e1 Binary files /dev/null and b/docs/git/tutorial/_img/vsmergechoices.png differ diff --git a/docs/git/tutorial/_img/vsmergeoptions.png b/docs/git/tutorial/_img/vsmergeoptions.png new file mode 100644 index 00000000000..fd939752f06 Binary files /dev/null and b/docs/git/tutorial/_img/vsmergeoptions.png differ diff --git a/docs/git/tutorial/_img/vspublish.gif b/docs/git/tutorial/_img/vspublish.gif new file mode 100644 index 00000000000..61dbc9c00e5 Binary files /dev/null and b/docs/git/tutorial/_img/vspublish.gif differ diff --git a/docs/git/tutorial/_img/vspull.gif b/docs/git/tutorial/_img/vspull.gif new file mode 100644 index 00000000000..6a701d7def1 Binary files /dev/null and b/docs/git/tutorial/_img/vspull.gif differ diff --git a/docs/git/tutorial/_img/vspush.gif b/docs/git/tutorial/_img/vspush.gif new file mode 100644 index 00000000000..3ef65fe3f46 Binary files /dev/null and b/docs/git/tutorial/_img/vspush.gif differ diff --git a/docs/git/tutorial/branches.md b/docs/git/tutorial/branches.md new file mode 100644 index 00000000000..de9103bf1b3 --- /dev/null +++ b/docs/git/tutorial/branches.md @@ -0,0 +1,132 @@ +--- +title: Create and delete a branch in your Git repo | VSTS & TFS +description: Create, use, and delete Git Branches in Visual Studio and from the command line +ms.assetid: 4b18a164-d1cb-4f87-89cb-8dc227e64af1 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Create work in branches + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +Git branches aren't much more than a small reference that keeps an exact history of commits, so they are very cheap to create. +[Committing](commits.md) changes to a branch will not affect other branches, and you can share branches with others without having to merge the changes into the main project. +Create new branches to isolate changes for a feature or a bug fix from your master branch and other work. + +Since the branches are lightweight, switching between branches is quick and easy. +Git does not create multiple copies of your source when working with branches—it uses the history information stored in commits to recreate the files on a branch when you start working on it. +Your [Git workflow](gitworkflow.md) should create and use branches for managing features and bugfixes. +The rest of the Git workflow, such as [sharing code](pushing.md) and [reviewing code with pull requests](pullrequest.md) all work through branches. +Isolating work in branches makes it very simple to change what you are working on by simply changing your current branch. + +In this tutorial you learn: + +> [!div class="checklist"] +> * How are Git branches created? +> * How to to create a branch +> * How to delete a branch +> * How to use branches + +## Video Overview + + + +## How are Git branches created? + +Create branches using the `branch` command. `Branch` creates a reference in Git for the new branch and a pointer back to the parent commit so Git can keep a history of changes as you add commits to the branch. +When you are working with a branch that someone else shared, Git keeps an upstream tracking relationship to associate the branch on the local repo with the corresponding branch on the remote repo. +This makes it very simple to sync changes with others using [push](pushing.md) and [pull](pulling.md). + +![Visual of a branch off master in Git](_img/branch.png) + +In this image, a new branch is created from the main branch. Work continues on both branches and commits are added to both branches. + +Git always adds new commits to the current local branch. Check what branch you are working on before you commit so that you don't commit changes to the wrong branch. +Swap between local branches using the `checkout` command. Git will change the files on you computer to match the latest commit on the checked out branch. +When your work in the branch is ready to share with the rest of the team, you [push](pushing.md) the changes to update the remote branch. + +A common mistake is to make some changes and `commit` them, realize you are on an incorrect branch, then `checkout` to the correct branch. +Your most recent changes will no longer be on the filesystem since each branch has its own version of code. +Git will bring the state of the files back to the last commit on the branch you swapped into, not the previous branch where you made your changes. +You'll need to either [cherry-pick](cherry-pick.md) the commits from the branch or [merge](pulling.md#update-branches-with-merge) the changes into the correct branch. + +## Create a branch + +# [Visual Studio](#tab/visual-studio) + +Visual Studio 2015 & 2017 + +0. Open up Team Explorer and go to the **Branches** view. +0. Right-click the parent branch (usually `master`) to base your changes and choose **New Local Branch From...**. +0. Supply a branch name in the required field and click **Create Branch**. Visual Studio automatically performans a `checkout` to the newly created branch. + + ![Creating Git Branches in Visual Studio](_img/vsbranch.gif) + +# [Command Line](#tab/command-line) + +Use the `branch` command to create the branch and `checkout` to swap to that branch. + +``` +git branch feature1 +git feature1 +``` + +--- + + + +## Delete a branch + +> [!NOTE] +> Deleting a branch in your local repo doesn't remove the branch on the remote. + +# [Visual Studio](#tab/visual-studio) + +Visual Studio 2015 & 2017 + +0. Open up Team Explorer and go to the **Branches** view. +0. Locate the branch you want to delete. Make sure that you aren't checked out to that branch, as you can't delete the branch you are currently working in. +0. Right-click the branch name and select **Delete**. If you have unpublished changes, Visual Studio will ask and make sure you want to delete the branch so you don't possibly lose work. + + ![Deleting a branch in Visual Studio](_img/vsbranchdelete.gif) + +You can delete a remote branch using the same method - locate the tree for the remote in Team Explorer's **Branches** view (such as `remotes/origin`), right-click and select **Delete**. + +# [Command Line](#tab/command-line) + +Delete a local branch using `git branch -d` while checked out to a different branch. + +``` +git branch -d +``` + +Deleting a remote branch requires use of the `git push` command using the `--delete` option. + +``` +git push origin --delete +``` + +--- + + + + + +## Use branches to manage development + +Git keeps track of which branch you are working on and makes sure that when you `checkout` a branch your files match the most recent commit on the branch. +Branches let you work with multiple versions of the source code in the same local Git repository at the same time. +Tell Git which branch you want to work on with `checkout`, and Git takes care of setting the right file versions for that branch. + +You shouldn't need more than one repo on your system when you use branches to isolate your work. +Set up your development environment one time after you [clone](clone.md), and then use Git branches to swap between feature work and bug fixing. + +## Next steps + +> [!div class="nextstepaction"] +> [Share code with push](pushing.md) \ No newline at end of file diff --git a/docs/git/tutorial/cherry-pick.md b/docs/git/tutorial/cherry-pick.md new file mode 100644 index 00000000000..310a0b83cf9 --- /dev/null +++ b/docs/git/tutorial/cherry-pick.md @@ -0,0 +1,84 @@ +--- +title: Copy changes to a branch with cherry-pick | VSTS & TFS +description: Copy and port changes from one branch to another in Git with cherry-pick, +ms.assetid: 5bf5a8d2-9ff2-4d89-b59f-484a3c14021a +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 09/08/2017 +--- + +# Copy changes with cherry-pick + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 (Update 2) & 2017 + +Copy commits from one branch to another using cherry-pick. Unlike a merge or rebase, cherry-pick only brings the changes from the commits you select, instead of all the changes in a branch. + +Cherry-pick is a great way to tackle these common problems: + +- Accidentally committing on the wrong branch. Cherry-pick the change(s) over to the correct branch and then reset the original branch to the previous commit. +- Pulling out a set of commits made in a feature branch so you merge them back to your `master` branch sooner. +- Porting in specific commits from the `master` branch without rebasing your branch. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Cherry-pick a commit + +## Cherry-pick a commit + +# [Visual Studio](#tab/visual-studio) + +0. Open up Team Explorer and checkout to the branch you want to cherry-pick changes into using the **Branches** view. +0. Right-click the branch containing the changes you want and select **View History...**. +0. Right-click the commit you want to cherry-pick and select **Cherry-pick**. + + Visual Studio copies the changes made in that commit into a new one on your current branch. + ![Cherry pick from inside Visual Studio](_img/vscherrypick.gif) + +Repeat this process for each commit you need to bring over to your current branch. + +# [Command Line](#tab/command-line) + +Use `git log` to find the commit ID of the commit whose changes you want to copy. + +
        +> git log app.ts
        +commit d34bcef232f6cf033e1252b7300465d3e561b2ee
        +Author: Francis Totten < frank@fabrikam.com >
        +Date:   Wed May 18 21:10:39 2016 +0000
        +
        +add complex query parsing logic
        +
        + +Once you have the commit ID, you pass it to `git cherry-pick` to copy the changed into your current branch. + +
        +> git cherry-pick d34bcef232f6c   
        +
        +[featurebranch a343e2c] add complex query parsing logic
        + Date: Thu May 19 19:07:26 2016 -0400
        + 1 file changed, 67 insertions(+), 6 deletions(-)
        +
        + +If you need to cherry-pick a range of commits, you can use two commit IDs separated by `...` to specify a range in your history. + +
        +> git cherry-pick d34bcef...86d2aec   
        +
        +[featurebranch a343e2c] add complex query parsing logic
        + Date: Thu May 19 19:07:26 2016 -0400
        + 1 file changed, 67 insertions(+), 6 deletions(-)
        + [featurebranch 3065fc7] fix regression in error handling
        + Date: Mon May 23 09:23:45 2016 -0400
        + 1 file changed, 32 insertions(+), 15 deletions(-)
        +
        + +--- + +## Next steps + +> [!div class="nextstepaction"] +> [Resolve merge conflicts](merging.md) diff --git a/docs/git/tutorial/clone.md b/docs/git/tutorial/clone.md new file mode 100644 index 00000000000..bc01c54e483 --- /dev/null +++ b/docs/git/tutorial/clone.md @@ -0,0 +1,122 @@ +--- +title: Clone an existing Git repo | VSTS & TFS +description: Create a local copy of an existing repo using Visual Studio or command line clone +ms.assetid: b6240e2f-2d3d-4874-9953-7e554d5e3b97 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Clone an existing Git repo + +##### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +Create a complete local copy of an existing Git repo using by cloning it. +Cloning a repo downloads all [commits](commits.md) and [branches](branches.md) in the repo and sets up a named relationship with the existing repo you cloned. +Use this relationship to interact with the existing repo, [pushing](pushing.md) and [pulling](pulling.md) changes to share code with your team. + +>[!NOTE] +> By default, Git will assign the `origin` to the remote repo you clone from. Most users don't need more than one remote, so the tutorial uses `origin` in its steps. +> [Learn more](creatingrepo.md#remotes) about setting up remotes to your Git repo. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Get the clone URL to your repo +> * Clone a repo + +## Video tutorial + + + +>[!TIP] +> Working from the command line? You can view our video overview using command line steps on [Channel9](https://channel9.msdn.com/series/Team-Services-Git-Tutorial/Git-Tutorial-Create-a-repo-from-the-command-line). + + +## Get the clone URL to your repo + +Before you can clone an existing repo, you'll need a URL that points to the existing repo. This URL represents the source of the repo you're going to copy during the clone. + +If you're using Team Services or Team Foundation Server 2017, you can find this clone URL in the web interface. +When viewing your repo from the **Code** tab in the interface, select **Clone** in the upper right. + +![Get a clone a URL from VSTS](./_img/get_clone_url.gif) + +If you need to clone a GitHub repo, you'll need to get the clone URL from the **Clone or download** button while viewing the repo on the web in GitHub. + +Other Git providers have similar buttons in their user interface to get the clone URL. + +Copy this URL into the clipboard or store it in a place where you can find it easily. You can't clone a repo without a clone URL. + +## Clone a repo + +# [Visual Studio](#tab/visual-studio) + +* [Clone from VSTS / Team Foundation Server](#clone-from-visual-studio-team-services--team-foundation-server) +* [Clone from another Git provider](#clone-from-another-git-provider) +* [Open a solution in Visual Studio from a cloned repo](#open-a-solution-in-visual-studio-from-a-cloned-repo) + +### Clone from VSTS / Team Foundation Server + +0. Open Team Explorer (go to **View** and select **Team Explorer** or use the Ctrl+\, Ctrl+M hotkey sequence) and open the **Connect** view. Go to **Projects**, then **Manage Connections** if you don't see the Connect view. +0. Select **Connect...** under **Hosted Service Providers**. + + ![Connecting to Visual Studio VSTS](_img/connect_to_vsts_from_vs2015.png) + +0. Choose your team's account from the drop-down in the dialog that appears and select which Team Projects to connect to Team Explorer. Select **Connect**. + +0. Clone the repository in one of the Team Projects by right-clicking the project and selecting **Clone...**. +0. Enter the folder where Git will store the local repository in the **Local Git Repositories** section. +0. Select **Clone** to clone your repo. + + ![Cloning a VSTS Repository in Visual Studio](../_shared/_img/cloneVsRepo.png) + +### Clone from another Git provider + +If you are not using VSTS, you can still clone your repo in Team Explorer and work with your code in Visual Studio. + +0. In Team Explorer, open the **Connect** view. +0. Select **Clone** under **Local Git Repositories** and enter the URL for your Git repo—this will be provided by your team or Git hosting +provider. +0. Select a folder where you want your cloned repo to be kept. +0. Select **Clone** to clone the repo. + + ![Clone your repo from other providers using Visual Studio](_img/clone_other_providers.png) + +### Open a solution in Visual Studio from a cloned repo + +Open a solution in a cloned repo in Visual Studio by right-clicking on the repository in the Team Explorer **Connect** view and selecting **Open**. +You'll be taken to the **Home** view in Team Explorer. Double-click your project solution file in the **Solutions** area to open the solution in Solution Explorer. + +![Open a solution from a cloned repo in Team Explorer](_img/vs_open_solution.gif) + +# [Command Line](#tab/command-line) + +### Prerequisites + +* Ensure you have installed the [Git command line package](http://git-scm.com/download) for your platform as well as the +right [Git Credential Manager](../set-up-credential-managers.md) before continuing. + +You'll need a clone URL to tell Git what repository you want to clone to your computer. Use the URL you copied earlier during the [previous step](#clone_url) in this article. + +Pass this clone URL to `git clone` to make a local copy of the repo: + +``` +git clone https://fabrikam.visualstudio.com/DefaultCollection/_git/Fabrikam +``` + +`git clone` clones the repository from the URL in a folder under the current one. You can pass in a folder name after the URL to create the repo in a specific location, for example: + +``` +git clone https://fabrikam.visualstudio.com/DefaultCollection/_git/Fabrikam C:\Repos\FabrikamFiber +``` + +--- + +## Next steps + +> [!div class="nextstepaction"] +> [Save work with commits](commits.md) diff --git a/docs/git/tutorial/commits.md b/docs/git/tutorial/commits.md new file mode 100644 index 00000000000..66e7bfc0ae5 --- /dev/null +++ b/docs/git/tutorial/commits.md @@ -0,0 +1,170 @@ +--- +title: Save your changes with Git commits | VSTS & TFS +description: Use Git commit to save your work into Git version control with Visual Studio or the command line. +ms.assetid: 223c0064-06ec-433e-8ec2-d73a5435cf23 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Save work with commits + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 (Update 2) & 2017 + +Git does not automatically snapshot your code as you make edits to files in your repo. You must tell Git exactly which changes you want to add to the next snapshot by staging those changes. +After staging your changes, create a commit to save the snapshot to your repo. + +In this tutorial you learn: + +> [!div class="checklist"] +> * How Git tracks changes +> * What's in a commit +> * How to stage your changes +> * How to create a commit +> * How to update your last commit + +## How Git tracks changes + +Git tracks file changes in your repo as you work, and separates the files in your repo into three categories: + +- Unmodified files – These files haven’t changed since your last commit. +- Modified files – These files have changes since your last commit, but you haven't yet staged for the next commit. +- Staged files – These files have changes that will be added to the next commit. + +![Lifecyle of files in your repo between the three states](_img/git_file_status_lifecycle.png) + +When you create a commit, only the staged changes and unchanged files are used for the snapshot. +Changes to unstaged but modified files are kept, but the commit uses the unmodified version from the previous commit in its snapshot. + +Commits are created in your local Git repository, so you don't have to worry about your changes being perfect. +Continue to create commits as you work, [pushing](pushing.md) your changes to then team when they are ready to share. + +### Video overview + + + +## What's in a commit + +Commits include the following information: + +- A snapshot of the files saved in the commit. Git snapshots the contents of all files in your repo at the time of the commit—this makes switching versions very fast and helps Git [merge](merging.md) changes. +- A reference to the parent commit(s). Commits with multiple parents occur when [branches](branches.md) are merged together. +- A short and to the point message describing the changes in the commit. You enter this message when you create the commit. + +Git uses the references between commits along with the file snapshots to maintain a complete record of development in your repo. + +[Learn more about Git history](https://www.visualstudio.com/learn/understand-git-history/) and how to [review history](history.md) to investigate changes made to your code. + + + +## Stage your changes + +Git does not automatically add changed files to the snapshot when you create a commit. +You must first stage your changes to let Git know which updates you want to add to the next commit. +Staging lets you to selectively add files to a commit while excluding changes made in other files. + +[Ignore](ignore-files.md) temp files, logs, and other files that might change on your local machine but you don't want to add to version control. + +# [Visual Studio](#tab/visual-studio) + +#### Visual Studio 2015 (Update 2) and 2017 + +Visual Studio keeps track of file changes to your project as you do your work. When you are ready to stage changes, open up the **Changes** view in Team Explorer. + +Stage individual file changes by right-clicking a file in the **Change** view and selecting **Stage**. +Staging a change creates a **Staged Changes** section in Team Explorer. Only changes in the **Staged Changes** section are added to the next commit. + +![Stage files for your next commit using Team Explorer](_img/vs-stage-files.gif) + +> [!NOTE] +> The Team Explorer **Changes** view had **Included Files** and **Excluded Files** sections before Visual Studio 2015 Update 2. The **Changes** view was updated in Visual Studio 2015 Update 2 for better +compatibility with other Git tools. + +Stage multiple files or folders by selecting them then right-clicking and choosing **Stage** or by dragging and dropping files from the **Changes** list into the **Staged Changes** list. + +Ignore files by right-clicking and selecting **Ignore this local item** or **Ignore this extension**. This adds an entry to the the file to the .gitignore file in your local repo. If the ignored file was added +to your repo in an earlier commit, ignoring the file will not remove it from the **Changes** list. See [excluding and ignoring files section](ignore-files.md) for more information on how to ignore files already tracked by Git. + +# [Command Line](#tab/command-line) + +Stage all pending changes in your repo with the following command: + +``` +git add --all +git status +``` + +The `--all` flag stages all changes made in the repo since the last commit. Note that adding all changes might include files you don't want to commit to version control +such as IDE project files, build outputs, and editor autosaves. Tell Git to [ignore](ignore-files.md) these files by setting up a `.gitignore` for your repository. +You can find a large, up-to-date set of gitignore configurations for a variety of tools in the [GitHub gitignore repository](https://github.com/github/gitignore). + +If you need to selectively stage file changes, you can use the Git `add`, `rm`, and `mv` commands to add changes and updates, remove files, and move/rename files respectively. +See the [tutorial command reference](../command-prompt.md#commits) and the [Git command line reference](https://git-scm.com/docs) for more information on using these commands. + +Run the `status` command after you stage files to review your changes before making a commit. Checking `status` before committing is a great way to avoid trouble. + +--- + +## Create a commit + +# [Visual Studio](#tab/visual-studio) + +Open the **Changes** view in Team Explorer. + +Enter a commit message describing your changes and select **Commit Staged** to create a new commit that includes the changes listed in the **Staged Changes** section. + +![Create a commit from staged items in Visual Studio](_img/vscommit.gif) + +Skip staging files if you just want to commit all changes listed by entering a commit message and selecting **Commit All** when you have no staged changes. + +![Commit all changes without staging them first in Visual Studio](_img/vscommitall.gif) + +When you commit in Visual Studio you can [push](pushing.md) the commit and [sync](pulling.md) the branch with a remote repository. +These options are available in the drop-down on the **Commit** button. + +# [Command Line](#tab/command-line) + +Run the `status` command before `commit` to review your staged and unstaged changes. Checking `status` before creating a commit helps avoid trouble. + +``` +git status +git commit -m +``` + +The `commit` command runs with the `-m` flag, which allows you to pass a message through the command line. If you don't provide this, Git will open up an editor in the +terminal so you can enter a commit message. + +--- + +## Update your last commit + +Amend your last commit to correct small errors without making a new commit. + +> [!WARNING] +> Do not amend [pushed](pushing.md) commits. If you need to update pushed code, [undo the changes with revert](undo.md) or create and push another commit. + +# [Visual Studio](#tab/visual-studio) + +0. Open the **Changes** view in Team Explorer and stage your updated changes. You can amend just the commit message by leaving the staged changes empty. +0. Enter the updated commit message and select **Amend Previous Commit** from the **Actions** drop-down. + + ![Amend a commit in Visual Studio](_img/vs_amend_commit.png) + +# [Command Line](#tab/command-line) + +0. Stage your changes using `git add` just as you would if you were creating a new commit. +0. Use the `--amend` option to the `commit` command to update the most recent commit with the staged changes and updated description. + + ``` + git commit -m --amend "short descriptive message" + ``` + +--- + +## Next steps + +> [!div class="nextstepaction"] +> [Create work in branches](branches.md). diff --git a/docs/git/tutorial/creatingrepo.md b/docs/git/tutorial/creatingrepo.md new file mode 100644 index 00000000000..23e560e9031 --- /dev/null +++ b/docs/git/tutorial/creatingrepo.md @@ -0,0 +1,114 @@ +--- +title: Create a new Git repo | VSTS & TFS +description: Create new Git repos using Visual Studio or command line init +ms.assetid: 83c20dac-85c6-4fa0-93b5-912d5477246a +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 09/08/2017 +--- + +# Create a new Git repo + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 (Update 2) & 2017 + +A Git repository, or repo, is a folder that you’ve told Git to help you track file changes in. +You can have any number of repos on your computer, each stored in their own folder. +Each Git repo on your system is independent, so changes saved in one Git repo don’t affect the contents of another. + +A Git repo contains every version of every file saved in the repo. Git saves these files very efficiently, so having a large number of versions doesn’t mean that it uses a lot of disk space. +Storing each version of your files helps Git merge code better and makes working with multiple versions of your code quick and easy. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Create a new Git repo + +## Video tutorial + +The following video explains what Git repos are, and shows you how to create them on your computer using Visual Studio 2015 Update 2. + + + +>[!TIP] +> Working from the command line? You can view our video overview using command line steps on [Channel9](https://channel9.msdn.com/series/Team-Services-Git-Tutorial/Git-Tutorial-Create-a-repo-from-the-command-line). + +## Create a new repo + +Manage any folder with source code or Visual Studio solution in Git by creating a repo for them. +Later you can connect this Git repo to a remote Git repo to share your work with others. + +# [Visual Studio](#tab/visual-studio) + +### Create a repo + +* [Create a repo from a new solution](#from-a-new-solution) +* [Create a repo from an existing solution](#from-an-existing-solution) +* [Create a repo in an empty folder](#in-an-empty-folder) +* [Connect a local repo to a remote](#connect-a-local-repo-to-a-remote) + +### From a new solution + +Create a new Git repo for your new Visual Studio solution by selecting **Create new Git repository** when creating the solution: + +![Select Create new Git reposistory when creating a new solution](_img/vscreategitrepo.png) + +### From an existing solution + +To create a repo from an existing solution not in version control, select the **Publish** button in the bottom-right of the lower status bar ![Visual Studio publish button](../_img/share-your-code-in-git-vs/publish_status_bar.png). +This creates a new Git repo in the same directory as your solution and opens up the **Publish** view in Team Explorer so you can [push](pushing.md) your code to VSTS or +another remote Git repository. + +![Publishing a solution to a new remote Git repository in Visual Studio Team Explorer](_img/vspublish.gif) + +### In an empty folder + +0. Open the **Connect** view in Team Explorer by choosing **Projects** then **Manage Connections** from the context menu. +0. Under **Local Git Repositories**, select **New** and enter a folder where the repo will be created. This directory must be empty. +0. Select **Create** to create the repo. + + ![Creating a new local Git repository in Visual Studio Team Explorer](_img/CreateNewRepoVS.png) + + +### Connect a local repo to a remote + +To connect a local repository to a hosted remote Git repository to share your work, go the **Settings** page in Team Explorer. Select **Repository Settings**. +Under **Remotes**, select **Add**. + +![Add a remote for a repo in Visual Studio Team Explorer](_img/add_remote_vs.png) + +Enter `origin` in the **Name** field and enter the [clone URL](clone.md#clone_url) for your repo in the **Fetch** field. +Make sure that **Push matches fetch** is checked and select **Save**. + +# [Command Line](#tab/command-line) + +Open up a command prompt and navigate to the top-level folder containing your project's code, or a new folder if you are starting from scratch. +Create the Git repository using the `init` command as shown in the following example. After the repo is created, you'll see a confirmation like `Initialized empty Git repository in current directory`. + +``` +git init . +``` + +Work in [branches](branches.md) to keep track of your work and create [commits](commits.md) to snapshot your changes into Git. + +Once you are ready to share your code, [get the clone URL](clone.md#clone_url) for the repository you want to connect to and then set up a remote relationship (in this case, `origin`) so your repo +can [push](pushing.md) changes to a shared repo. + +``` +git remote add origin https://fabrikam.visualstudio.com/Fabrikam/_git/FabrikamFiber +``` + +[Push](pushing.md) your changes to the `origin` repository to share with others: + +``` +git push origin users/frank/feature +``` + +--- + +## Next steps + +> [!div class="nextstepaction"] +> [Save work with commits](commits.md) \ No newline at end of file diff --git a/docs/git/tutorial/gitworkflow.md b/docs/git/tutorial/gitworkflow.md new file mode 100644 index 00000000000..a1ef16dc64c --- /dev/null +++ b/docs/git/tutorial/gitworkflow.md @@ -0,0 +1,57 @@ +--- +title: Visual Studio Git tutorial | VSTS & TFS +description: Learn Git with the VSTS/TFS Git tutorial. +ms.assetid: 0270b0fa-461b-4079-9703-cdcf53bdf39f +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 09/08/2017 +--- + +# Learn about version control and Git + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +Use version control to save your work and coordinate code changes across your team. Even if you're just a single developer, version control helps you stay organized as you fix bugs and develop new features. Version control keeps a history of your development so that you can review and even rollback to any version of your code with ease. + +## Version control workflow + +Version control has a general workflow that most developers use when writing code and sharing it with the team. + +These steps are: + +---- +0. Get a local copy of code if they don't have one yet. +0. Make changes to code to fix bugs or add new features. +0. Once the code is ready, make it available for review by your team. +0. Once the code is reviewed, merge it into the team's shared codebase. + +--- + +![The Git feature branch workflow](_img/gitworkflow.png) + +Git has a version of this workflow using terminology and commands unique to Git. Throughout this tutorial you'll learn about repositories, branches, commits, and pull requests. +These terms might sound familiar if you've used a version control system like Team Foundation Version Control or Subversion, but they behave differently in Git. + +## Git workflow + +--- +0. [Create a branch](branches.md) for the changes you plan to make and give it a name, such as fix-bug-3214 or cool-feature-x. +0. [Commit changes](commits.md) to your branch. People often have multiple commits for a bug fix or feature. +0. [Push your branch](pushing.md) to the remote repository. +0. [Create a pull request](pullrequest.md) so other people can review your changes. To incorporate feedback, you might need to make more commits and push more changes. +0. [Complete your pull request](pullrequest.md) and resolve any merge conflicts from changes other people made after you created your branch. + +--- + +Use this workflow if you're new to Git. As your team gets more experienced and confident with Git, extend it to suit your team's needs. + +## Next steps + +> [!div class="nextstepaction"] +> [Create a new Git repository](creatingrepo.md) + +> [!div class="nextstepaction"] +> [Clone an existing Git repository](clone.md) \ No newline at end of file diff --git a/docs/git/tutorial/history.md b/docs/git/tutorial/history.md new file mode 100644 index 00000000000..fdc1f7ba5ee --- /dev/null +++ b/docs/git/tutorial/history.md @@ -0,0 +1,207 @@ +--- +title: Review your repo history | VSTS & TFS +description: Git history tools with Visual Studio and git command line tools to help you determine the changes in your files. +ms.assetid: aed4bd97-378a-45f6-8b13-59143fccfe3b +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Review history + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +Git uses the parent reference information stored in each [commit](commits.md) to manage a full history of your development. +Review this commit history to find out when file changes were made and determine differences between versions of your code. + +Git's use of feature [branches](branches.md) and merges through [pull requests](pullrequest.md) mean that the commit history of your development doesn't form a straight, chronological line. +When you use history to compare versions, think in terms of file changes between two commits instead of file changes between two points in time. +A recent change to a file in the `master` branch may have come from a commit created two weeks ago in a feature branch but was only merged yesterday. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Compare files +> * Retrieve files +> * Compare branches + +## Compare files + +Compare the changes between two versions of a file in your Git repo. + +# [Visual Studio](#tab/visual-studio) + +VSTS | TFS 2015 & 2017 | Visual Studio 2015 & 2017 + +0. Right-click the file in Solution Explorer and choose **View History...**. The history window will appear showing the commit ID, author, date, and description of all changes to the file in your local repo across all branches. + + ![View history in your repo for a file](_img/vs_history_view.png) + +0. Find the latest commit for a branch by looking for its name on an arrow to the right of a commit. +0. View changes from the previous version of the file by right-clicking and choosing **Compare with previous...**. View the changes between any two versions by selecting both commits, then right-clicking and select **Compare...** +0. The diff view shows lines removed from the older commit and added in the new one. + + ![View diff changes in Visual Studio](_img/vs_diff_changes.png) + +# [Command Line](#tab/command-line) + +Use the `git log` command to view the commits that changed a file in your repo for your current branch. + +
        +> git log index.html   
        +
        +commit bbc3b679197b659544a6f8070c79fb535b496613
        +Author: Francis Totten <ftottendev@outlook.com>
        +Date:   Thu Jun 30 13:42:50 2016 -0400
        +
        +    update landing page
        +
        +commit e5402fe710c25eca1b96a4e238eee9c01ed41c6a
        +Author: Francis Totten <ftottendev@outlook.com>
        +Date:   Thu Jun 30 13:42:23 2016 -0400
        +
        +    initial commit
        +
        +
        + +Filter the `git log` output based on author, description or date information by using the corresponding options. +Leave out the filename if you want to see the commits matching all files in your repo. + +
        +> git log --author=frank@fabrikam.com index.html
        +> git log --since="2016-1-1"
        +> git log --before="2 weeks ago"
        +> git log --grep="css change"
        +
        + +View changes between two commits using `git diff`: + +
        +> git diff bbc3b67 e5402fe71 index.html
        +
        +-    <link rel="stylesheet" href="app.cs"/>   
        ++    <link rel="stylesheet" href="fabrikam.cs"/>
        +
        + +--- + +## Retrieve files + +Retrieve a specific version of a file from your history, even if the file was deleted or renamed in the latest version of your code. +Retrieving a older version of the file doesn't make any changes to your current branch. Create a new commit to bring the older version of the file into +your branch. + +# [Visual Studio](#tab/visual-studio) + +# [Command Line](#tab/command-line) + +Use `git log` to find the version to restore and `git checkout` or `git show` to restore the file from your history. + +Find the commit with the version of the file you need to restore using `git log` using the steps from [comparing versions](history.md#compare-files) above. +Restore the version in its current location using `git checkout`: + +
        +> git checkout 85435fac src/app.ts
        +
        + + Using `git checkout` this way will rewrite the current verison of the file at that path location. + +Restore a file to any location by using `git show`. This command prints the file contents to the terminal-you'll want to redirect the output to your desired location. + +
        +> git show 85435fac:src/app.ts > /home/frank/oldapp.ts
        +
        + +--- + +
        + + +
        +
        +
        VSTS | TFS 2015 & 2017 | Visual Studio 2015 & 2017
        +

        Right-click the file in Solution Explorer and select **View History**. The Visual Studio **History** view will appear, showing the commits in your repo that updated the file. +You can filter the commits to find the exact commit with the file version you want to restore. Double click on the version to open it in Visual Studio. + +

        ![View file versions in Visual Studio](_img/vs_view_file_commit_details.png) +

        Retrieve deleted files in your repo by opening the **Changes** view in Team Explorer. Select **View History** from the **Actions** drop-down. Right-click the commit +containing the version of the file you want to restore and select **View Commit Details**. +

        ![View deleted files in your Git repo with Visual Studio](_img/vs_view_commit_details.png) +

        Right click the file to restore in the **Commit Details** in Team Explorer and select **Open**. +

        Save the version to your project by selecting **Save As...** from the **File** menu. If you save the file in your current project, either as a new file or overwriting +an existing one, you'll need to commit your changes to add the previous version to your local branch. + +

        + + + +## Compare branches + +Review potential changes from a [merge](merging.md) or [rebase](rebase.md) by comparing branches directly. +You can compare both local and remote branches, which is useful when checking for potential merge conflicts or to see how the +changes others have made will affect your work. + +# [Visual Studio](#tab/visual-studio) + +VSTS | TFS 2015 & 2017 | Visual Studio 2015 & 2017 + +Browse to your repo in VSTS or TFS. Select **Branches** from the menu under **Code**: + +![Open the branches view in VSTS/TFS](_img/branches_view_team_services.png) + +Locate your branch and select the **...** icon to view the branch options. Select **Compare branches**. + +![Select the ellipses icon to open branch options, then select VSTS](_img/team_services_branch_options.png) + +Select the branch to compare to from the drop-downs at the top. The view will display all changes between the branches. + + +# [Command Line](#tab/command-line) + +
        + +Use `git diff` to compare the contents of two branches. You can compare any combination of local and remote branches. +The output shows the deletions and additions between the two versions of the code. + +
        +> git diff users/frank/feature origin/master
        +
        + +
        +index 36843b8..03afc4b 100644
        +--- a/tsapp/index.html
        ++++ b/tsapp/index.html
        +@@ -4,7 +4,7 @@
        + <head>
        +     <meta charset="utf-8" />
        +     <title>TypeScript HTML App</title>
        +-    <link rel="stylesheet" href="fabrikam-test.css" type="text/css" />
        + <link rel="stylesheet" href="fabrikam.css" type="text/css" /> + <script src="app.js"></script> + </head> + ... +--- a/tsapp/app.ts ++++ b/tsapp/app.ts + constructor(element: HTMLElement) { + this.element = element; +- this.element.innerHTML += "The time is: ";
        + this.element.innerHTML += "The time is now: "; + this.span = document.createElement('span'); + this.element.appendChild(this.span); + this.span.innerText = new Date().toUTCString(); +
        + +This will output the diff for every change between the branches. +You can narrow down specific file changes by specifying a file after the branch names: + +
        +> git diff users/frank/feature origin/master index.html
        +
        + +--- + diff --git a/docs/git/tutorial/howto.md b/docs/git/tutorial/howto.md new file mode 100644 index 00000000000..193a03e62d7 --- /dev/null +++ b/docs/git/tutorial/howto.md @@ -0,0 +1,130 @@ +--- +title: Git frequently asked questions | VSTS & TFS +description: Tips, Tricks, and HOWTO to complete some less-common Git tasks. +ms.assetid: b1262306-214c-4422-8eda-d03d05825241 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/29/2016 +--- + +# Frequently Asked Git Questions + +###### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +### Is there an easy way to get a remote branch downloaded into my local repository? + +As long as you have an `origin` repository configured (which happens automatically via [`git clone`](clone.md)), when you checkout a + branch that doesn't exist locally Git will see if there is a remote branch with the same name. +If there is, Git will create a local branch with a reference to the remote branch of that name. +Then you can `git pull` to download the commits and have Git catch up on the branch history locally. + +### How can I find out which branch I am working in? + +`git branch` with no arguments shows the local branches and highlights the one you are checked out on. In Visual Studio, the status bar also displays the current branch +when you are working with a project stored in a local Git repository. + +### When should you make Git commits? +This is up to you and your team. An accepted practice is to make separate commits for logically separate changes. Think of commits as entries in a logbook-whenever you've made a change that's worth noting, record it in a commit. +A popular option is to allow everyone to commit locally as much as they want, but before they push the local commits, they squash them first through [rebasing](rebase.md). +This gives users a lot of personal flexibility to make frequent commits while keeping the commit history streamlined. + +### If every branch retains its full commit history even when merged into master, doesn't that make the commit history of master hard to follow over time? + +Large projects with many commits and a range of contributors can result in commit histories for the `master` branch that represent +the development history of the topic branches merged into `master` more than the development history of the overall project. +Git provides a facility for condensing commits on branches through [squashing commits and rebasing](rebase.md). +Squashing commits makes the commit history on a branch less verbose and makes for a simpler commit history on the master branch once merged. + +### How can I find out who made a specific change to a file in my Git repository? + +The `git blame` command can quickly track down who made a particular change to a file. From your local repository, you can run `git blame` with the `-L` +parameter specifying which lines of interest. `Blame` produces formatted output showing the commit that last updated the line as well as the name of the person +who made the commit. + +
        +> git blame foo.js -L 20,+40  # show the blame output for the next forty lines starting at line 20
        +
        +215d1108 (Francis Totten 2015-11-21 09:54:23 -0800 20) line 20 of the code
        +215d1108 (Francis Totten 2015-11-21 09:54:23 -0800 21) line 21 of the code
        +215d1108 (Francis Totten 2015-11-21 09:54:23 -0800 22) line 22 of the code
        +
        + +`Blame` does the searching through the commit history for you. You can also go back through the a file's history in Team Services as well for a different approach to determining +who made a change and when. Go into the Code Explorer for your repository and branch in VSTS, then click on the file of interest. Team Services will show a complete +commit history for that file on the current branch. + +### I've made changes to some files and now I can't checkout to a different branch or rebase my work. +Checking out to a different branch in Git will affect the state of files on your filesystem as Git uses the commit history to make sure you are working with the files +that represent the state of your branch. If you attempt to change branches while you have uncommitted changes, those changes would be overwritten during the checkout. Git doesn't +want you to accidentally lose your changes, so it prevents the checkout from happening. You can resolve this by: + +---- +- Abandoning the changes and return to the most recent commit. See [undoing changes in Git](undo.md) for instructions on how to roll back to the most recent commit. +- Committing the changes. See [saving your work in Git with commits](commits.md). +- [Stashing](howto.md#stash) your current work, saving the changes for later and cleaning up the workspace to the last commit. + +--- + + +### I've done some work but need to swap to something else. How can I save my work for later without committing the changes? + +The problem with these options is that sometimes you want to keep the changes, but not commit them because they are not at a point where you are comfortable doing so. Git +provides a compact way of doing this using `stash`. Stash takes the current staged and unstaged changes in your branch and saves the work, then returns your branch back to the state of +the last commit. You can change to the other branch, do your work, then when you return to this branch run `stash apply` to restore the changes. + +
        +> git stash
        +Saved working directory and index state WIP on feature1: be26067 updated endpoint docs
        +HEAD is now at be26067
        +
        + +Once you run `git stash apply` the most recently stashed changes will be applied to your current branch. If there is a conflict applying the stashed changes, +`stash` will restore the changes for the files that do not conflict and create conflict markers in the files that do conflict for you to resolve. You should +[merge](merging.md) the changes manually in this case. + +Once you are done with the stash, delete it with `git stash drop`. This will remove the last set of stashed changes. + +A final note about stash is that you can have mulitple stashes, but doing so requires more manual manipulation as you have to explicitly apply and drop stashes. You can read more about +this from in the [Git Stash documentation](http://git-scm.com/book/en/v1/Git-Tools-Stashing). + + +### How can I change the default editor that is used when working with Git command line tools? + +By default, command line Git will use a command-line editor when asking for commit messages, performing rebases, and other work that requires additional information to +complete. The default editor is configured using `git config`: + +
        +> git config core.editor _path_to_editor_ _options_to_editor_
        +
        + +Note that Git For Windows makes it very easy to set notepad as the editor: + +
        +> git config core.editor notepad
        +
        + +Which will configure Windows' Notepad to edit Git information as needed and properly pass through the text from Git to Notepad. You can also specify + +
        +> git config format.commitMessageColumns 72 
        +
        + +To keep the text columns in the commit messages to the preferred 72 and line wrap after hitting that character limit on a line. + +### How can I change the username and email displayed in my commits? + +Git puts a user name and email address information inside each commit, and Team Services uses this information when viewing commits and when working with pull requests. +If you are working on the command line, you can update the name and email information displayed using the `git config` command: + +
        +> git config --global user.email "frank@fabrikam.com"
        +> git config --global user.name "Francis Totten"
        +
        + +Note that the `--global` option will set the email and name included in commits for all Git repositories on this system. If you want to change the settings for a single +repository, you must change to the directory where the Git repository is located and run the above commands without the `--global` flag. + +You can also change the name and email settings from Visual Studio. In Team Explorer, choose **Settings** and under **Git**, click the **Global Settings** or **Repository Settings** link. + diff --git a/docs/git/tutorial/ignore-files.md b/docs/git/tutorial/ignore-files.md new file mode 100644 index 00000000000..17ee6bd026f --- /dev/null +++ b/docs/git/tutorial/ignore-files.md @@ -0,0 +1,153 @@ +--- +title: Ignore files in your Git repo | VSTS & TFS +description: Using .gitignore, git update-index, and repo management to ignore and exclude files from Git version control +ms.assetid: 60982d10-67f1-416f-94ec-eba8d655f601 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/30/2017 +--- + +# Ignore file changes with Git + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +Not every file created or updated in your code should be committed to Git. Temporary files from your development environment, test outputs and logs are all examples +of files that you create but are not part of your codebase. Customize which files Git tracks through the gitignore feature. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Use gitignore to prevent tracking or files +> * Ignore files only on your system +> * Ignore files across all repos on your system +> * Ignore changes to committed files + +## Use gitignore to prevent tracking of files + +Create a .gitignore file in your Git repo to prevent Git from staging unwanted files. +Share the .gitignore in the default branch in your repo, so you and your team can update it to change which files to ignore. + +### Create a .gitignore + +# [Visual Studio](#tab/visual-studio) + +Visual Studio automatically creates a .gitignore file in your repo when you [create new repo for your project](creatingrepo.md). + +# [Command Line](#tab/command-line) + +You should download a [template](https://github.com/github/gitignore) .gitignore file for your project type and customize it to meet your needs. If your project doesn't fit a template, +you can create a empty .gitignore from the command line by navigating to your Git repo and running one of the following commands: + +### Windows + +
        +> fsutil file createnew C:\Users\frank\\myrepo\\.gitignore 0
        +
        + +### Linux and Mac + +
        +> touch /home/frank/myrepo/.gitignore
        +
        + +--- + +Git applies a .gitignore to the folder and any child folders where it's located. We strongly recommended to place your .gitignore in the root folder of your repo to prevent confusion. + +### Customize your .gitignore + +Modify your .gitignore to include files types, paths, and file patterns in your repo. Git starts ignoring these files as soon as the .gitignore is updated, but be sure to +commit the changes if others on your team need the same set of ignored files. + +# [Visual Studio](#tab/visual-studio) + +You can edit your .gitignore file for your repo by going to the **Settings** view in Team Explorer, then selecting **Repository Settings**. Select the **Edit** link under next to your .gitignore. + +![Find and open your .gitignore file for your repo in Visual Studio](_img/vs_ignore.png) + +# [Command Line](#tab/command-line) + +
        +> vim /home/frank/myrepo/.gitignore
        +
        + +--- + +Each line in the .gitignore excludes a file or set of files matching a pattern. The [full gitignore syntax](https://git-scm.com/docs/gitignore) is very flexible. Here are some examples of +the most common entries: + +```bash +# ignore a single file +mycode.class + +# ignore an entire directory +/mydebugdir/ + +# ignore a file type +*.json + +# add an exception (using !) to the preceding rule to track a specific file +!package.json +``` + +> [!NOTE] +> Windows users: All file paths in the .gitignore file use a forward slash separator and not a backslash. + +## Ignore files only on your system + +Your .gitignore is shared across team members as a file committed and pushed to the Git repo. To exclude +files only on your system without pushing the changes to the rest of your team, edit the `.git/info/exclude` file in your local repo. +Changes to this file will not be shared with others and only apply to the files in that repo. The [syntax](https://git-scm.com/docs/gitignore) for this file is the +same as the one used in .gitignore. + +## Ignore files across all repos on your system + +Set up a global .gitignore for use across all repos on your system using the command line `git config` tool: + +
        +> git config core.excludesfile C:\Users\frank\.gitignore_global
        +
        + +This is particularly useful for ignoring entire file types you don't want to ever commit, such as compiled binaries. + +## Ignore changes to committed files + +#### Temporarily ignore changes + +During development it's convenient to stop tracking file changes to a file committed into your git repo. This is very convenient when +customizing settings or configuration files that are part of your project source for your own work environment. + +
        +> git update-index --assume-unchanged <file>
        +
        + +Resume tracking files with: + +
        +> git update-index --no-assume-unchanged <file>
        +
        + +#### Permanently ignore changes to a file + +If a file is already tracked by Git, adding that file to your .gitignore is not enough to ignore changes to the file. You also need to +remove the information about the file from Git's index: + +> These steps will not delete the file from your system. They just tell Git to ignore future updates to the file. + +0. Add the file in your .gitignore. + +0. Run the following: +
        +> git rm --cached <file>
        +
        + +0. Commit the removal of the file and the updated .gitignore to your repo. + +## Next steps + +> [!div class="nextstepaction"] +> [Review history](history.md) + diff --git a/docs/git/tutorial/merging.md b/docs/git/tutorial/merging.md new file mode 100644 index 00000000000..4fb8e246327 --- /dev/null +++ b/docs/git/tutorial/merging.md @@ -0,0 +1,134 @@ +--- +title: Resolve Git merge conflicts | VSTS & TFS +description: Resolving Merge Conflicts in Git from Visual Studio or the command line. +ms.assetid: 2a51a33a-134b-4357-bcfc-540b3195682f +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/30/2017 +--- + +# Resolve merge conflicts + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2013, 2015 & 2017 + +When you [merge](pulling.md) one branch into another, file changes from commits in one branch can conflict with the changes the other. +Git attempts to resolve these changes by using the [history](history.md) in your repo to determine what the merged files should look like. +When it isn't clear how to merge changes, Git halts the merge and tells you which files conflict. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Understand merge conflicts +> * Resolve merge conflicts + +## Understand merge conflicts + +The following image shows a very basic example of how changes conflict in Git. Both the master and bugfix branch make updates to the same lines of source code. + +![Master and bugfix branch have changes that conflict](_img/merge-conflict.png) + +If you try to merge the bugfix branch into master, Git can't determine which changes to use in the merged version. You may want to keep the changes +in the master branch, the bugfix branch, or some combination of the two. Resolve this conflict with a merge commit on the master branch +that reconciles the conflicting changes between the two branches. + +![Create a merge commit to resolve the conflict between the two branches](_img/merge-conflict-resolved.png) + +The most common merge conflict situation is when you pull updates from a remote branch to your local branch, for example from `origin/bugfix` into your local `bugfix` branch. +Resolve these conflicts is the same way-create a merge commit on your local branch reconciling the changes and complete the merge. + +### What does Git do to prevent merge conflicts? + +Git keeps an entire history of all changes made in your repo. Git uses this history as well as the relationships between commits to see if it can order the changes and resolve the merge automatically. + Conflicts only occur when it's not clear from your history how changes to the same lines in the same files should merge. + +### Preventing merge conflicts + +Git is very good at automatically merging file changes in most circumstances, provided that the file contents don't change dramatically between commits. +Consider [rebasing](rebase.md) branches before you open up a [pull request](pullrequest.md) if your branch is far behind your main branch. +Rebased branches will merge into your main branch without conflicts. + +## Resolve merge conflicts + +# [Visual Studio](#tab/visual-studio) + +0. You'll be informed of the merge conflict(s) when you pull changes or attempt to merge two branches. +0. The conflict notification appears. Click the **Conflicts** link to start resolve file conflicts. + + ![Prompt when there is a merge conflict when you pull a change](_img/merge_prompt_vs.png) + +0. This will bring up a list of files with conflicts. Selecting a file lets you accept the changes in the source branch you are merging from with the **Take Source** button or accept the changes in the branch you are merging into using **Keep Target**. +You can manually merge changes by selecting **Merge**, then entering the changes directly into the +0. Use the checkboxes next to the lines modified to select between remote and local changes entirely, or edit the results directly in the **Result** editor under the **Source** and **Target** editor in the diff view. +0. When done making changes, click **Accept Merge** . Repeat this for all conflicting files. +0. Open the **Changes** view in Team Explorer and commit the changes to create the merge commit and resolve the conflict. + + ![Resolving Merge Conflicts in Visual Studio](_img/vsmerge.gif) + + Compare the conflicting commits as well as the differences between the common history with the options in Visual Studio's merge tool. + + ![VSMergeTool comparison options](_img/vsmergeoptions.png) + +# [Command Line](#tab/command-line) + +Resolve merge conflicts on the command line: + +0. (Optional) Before performing any `pull` or `merge`, make sure that your repo is clean with `git status`. + +
        +    > git status
        +    On branch myfeature
        +    nothing to commit, working directory clean
        +    
        + +0. Perform your `pull` or `merge`. Use `git status` to see exactly which files did not merge properly. + +
        +    > git pull origin myfeature    
        +    
        +    Auto-merging serverboot.js
        +    CONFLICT (content): Merge conflict in serverboot.js
        +    Automatic merge failed; fix conflicts and then commit the result
        +    
        + +0. (Optional) Check the commit logs to find the commits that conflict with your own using `git log --merge`. + +
        +    > git log --merge
        +    commit fac422e78f105ccb44b50a00fc82d6ea89b15513
        +    Merge: 9b28b1e 1dd2603
        +    Author: Francis Totten frank@fabrikam.com
        +    
        +        merging new api endpoint
        +    
        + +0. Update the conflicted files listed in `git status`. Git adds markers to files that have conflicts. These markers look like: + +
        +    <<<<<<< HEAD
        +    console.log("Writing changes to dev console");
        +    =======
        +    debug("Writing changes to debug module);
        +    >>>>>>> dev-updates
        +    
        + + The `<<<<<<<` section are the changes from one commit, the `=======` separates the changes, and `>>>>>>>` for the other conflicting commit. + +0. Edit the files so that they look exactly how they should, removing the markers. Use `git add` to stage the resolved changes. +0. Resolve file deleting conflicts with `git add` (keep the file) or `git rm` (remove the file). +0. If performing a merge (such as in a `pull`), commit the changes. If performing a rebase, use `git rebase --continue` to proceed. + +
        +    > git add serverboot.js
        +    > git commit -m "Resolved both new api endpoints"
        +    
        + +--- + +## Next steps + +> [!div class="nextstepaction"] +> [Undo changes](undo.md) + diff --git a/docs/git/tutorial/pulling.md b/docs/git/tutorial/pulling.md new file mode 100644 index 00000000000..6d8f820a032 --- /dev/null +++ b/docs/git/tutorial/pulling.md @@ -0,0 +1,146 @@ +--- +title: Pull changes to your local Git repo | VSTS & TFS +description: Using Git Pull, fetch, and to get code from others. +ms.assetid: b06b9f18-b76f-418c-93d0-f12d1f48f3c0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Update code with fetch and pull + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +Update the code in your local repo with the changes from other members of your team using the following commands: + +- `fetch` , which downloads the changes from your remote repo but does not apply them to your code. +- `merge` , which applies changes taken from `fetch` to a branch on your local repo. +- `pull` , which is a combined command that does a `fetch` and then a `merge`. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Download changes with fetch +> * Update branches with merge +> * Fetch and merge with pull + +## Video Overview + + + +If there is a merge conflict between a commit you haven't [pushed](pushing.md) yet and a commit you are merging or pulling, you'll need to [resolve those conflicts](merging.md) before you finish updating your code. + +## Download changes with fetch + +You download changes to your local branch from the remote through `fetch`. `Fetch` asks the remote repo for all commits +and new branches that others have pushed but you don't have and downloads them into your repo, creating local branches as needed. + +`Fetch` does not merge any changes into your local branches, it only downloads the new commits for your review. + +# [Visual Studio](#tab/visual-studio) + +Visual Studio uses the **Sync** view in Team Explorer to `fetch` changes. +Changes downloaded by `fetch` are not applied until you **Pull** or **Sync** the changes. + +![Fetching changes in Visual Studio's Team Explorer Synchronization View](_img/vsfetch.gif) + +# [Command Line](#tab/command-line) + +Run the `git fetch` command from the command line to download changes to your local branch. + +``` +git fetch +``` + +After running `git fetch you'll see results similar to the following example: + +``` +remote: Found 3 objects to send. (9 ms) +Unpacking objects: 100% (3/3), done. + e2ccee6..55b26a5 feature1 -> origin/feature1 +``` + +--- + + + +## Update branches with merge + +Apply changes downloaded through `fetch` using the `merge` command. `Merge` takes the commits retrieved from `fetch` and tries to add them to your local branch. The merge will keep the +commit history of your local changes so that when you share your branch with [push](pushing.md) Git will know how others should merge your changes. + +The challenge with merge is when a commit taken from `fetch` conflicts with an existing unpushed commit on your branch. +Git is generally very smart about resolving merge conflicts automatically, but sometimes you must [resolve merge conflicts manually](merging.md) and complete the merge with a new merge commit. + +# [Visual Studio](#tab/visual-studio) + +Team Explorer merges when you do a **Pull** or a **Sync** from the **Changes** view. **Sync** is a combined operation of pulling remote changes and then pushing local ones, +synchronizing the commits on the local and remote branch. + +# [Command Line](#tab/command-line) + +Running `merge` without any flags or parameters adds the commits downloaded from `fetch` into the local branch. +Git adds a merge commit if you have any conflicts. This merge commit has two parent commits (one for each branch) and contains the changes committed to resolve the conflicts between branches. + +``` +git merge +``` +
        +Updating e2ccee6..55b26a5
        + 1 file changed, 1 insertion(+)
        +
        + +You can merge without committing using `--no-commit` to attempt to perform the merge but not commit the final changes, which gives you a chance to inspect the changed files before finalizing +the merge with a commit. + +--- + + + + + +## Fetch and merge with pull + +`Pull` does a `fetch` and then a `merge` to download the commits and update your local branch in one command instead of two. +Use `pull` to quickly bring your branch up to date with the remote when you aren't worried about reviewing the changes before merging them into your own branch. + +# [Visual Studio](#tab/visual-studio) + +Open the Team Explorer and open the Sync view. Then click the **Pull** link under **Incoming Commits** to `pull` remote changes and merge them into your local branch. Pulling +updates files in your open project, so make sure to [commit your changes](commits.md) before pulling. + +![Pulling Changes with Visual Studio](_img/vspull.gif) + +# [Command Line](#tab/command-line) + +`git pull` without any options will do a `fetch` of the changes you don't have from `origin` and will `merge` the changes for your current branch. + +
        +> git pull
        +Updating 55b26a5..e7926cd
        + 1 file changed, 2 insertions(+), 1 deletion(-)
        +
        + +Pull a remote branch into a local one by passing remote branch information into `pull`: + +
        +> git pull origin users/frank/bugfix
        +
        + +This is a useful way to directly merge the work from remote branch into your local branch. + +--- + + + + +## Next steps + +> [!div class="nextstepaction"] +> [Share code with push](pushing.md) + +> [!div class="nextstepaction"] +> [Resolve merge conflicts](merging.md) \ No newline at end of file diff --git a/docs/git/tutorial/pullrequest.md b/docs/git/tutorial/pullrequest.md new file mode 100644 index 00000000000..9a5e4e9b501 --- /dev/null +++ b/docs/git/tutorial/pullrequest.md @@ -0,0 +1,86 @@ +--- +title: Create a pull request | VSTS & TFS +description: Reviewing and Publishing Code using Git Pull Requests +ms.assetid: 731eeda5-133f-46d5-ab60-b27a5280210d +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Create a pull request + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +[Git's workflow](gitworkflow.md) uses [branches](branches.md) to isolate work until you're ready to merge the changes into your default branch, such as `master`. +The pull request is the collaborative process that lets the rest of the team discuss changes in a branch and agree to merge them once everyone approves. +Use pull requests to get early feedback from others on work in progress, even if you're not ready to merge the changes into another branch. + +![Merging a Git branch into its parent via a pull request](_img/merge.png) + +In this image, the purple branch is merged into the blue branch through a pull request. The changes are discussed by reviewers in the pull request before the code is merged. +When you complete the pull request, there is a merge commit (seen here as the filled blue commit) where the changes in the purple branch are now [merged](merging.md) in the blue branch. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Create a pull request +> * Complete a pull request + +## Create a pull request + +To create a pull request in VSTS: + +0. [Push](pushing.md) your local branch. +0. Create a pull request for the branch in VSTS. + + ![Creating a pull request in VSTS](_img/createpullrequest.gif) + +0. You can also create a pull request from Visual Studio. Select the **Pull Requests** view when [connected to your Team Project](../../connect/connect-team-projects.md) and select **New Pull Request** to open a pull request for your current branch: + + ![Add a Pull Request from Visual Studio](_img/vs_pull_requests.png) + +0. Create the pull request. You should give a clear title for the pull request that describes the changes in the branch. In the description field give a clear explanation of how the changes are implemented along with any resources that might help reviewers understand the changes. You can include Team Services work items and hyperlinks to allow others to have as much context as possible when reviewing your changes. + +0. Add any team member who you would like to review the changes. + + ![Adding detail to a pull request](_img/pull-request-detail.png) + +### Who reviews the pull request? + +When you create the pull request, you can add others who need to review your changes. You can add users and groups to the pull request after it is created if the scope of the +review needs to expand. You can also associate the pull request with a task in VSTS to let others working with the task know changes are ready for review. + +### How does the code review work? + +Pull request reviewers will see the proposed updates to the branch in the form of file differences between the two branches. Reviewers can add comments on any of the changes and +include notifications for other team members to answer a question or give other feedback. You can make changes and push commits to resolve issues brought up in the feedback and these +changes are immediately reflected in the pull request. + +![Adding comments to a Team Services Pull request](_img/pull_request_comment.png) + +If the changes need much more development to complete, you can abandon the pull request. You can later open up a new pull request to +revisit the changes and link to the conversations that took place in the abandoned pull request. + +You can also open up a pull request on a very early version of your code to ask for feedback from others, even if the code isn't ready to merge yet. +Once you get the team's feedback, you can keep the pull request open to continue the conversation or abandon the pull request until your code is ready to be shared again. + +## Complete a pull request + +![Completing a pull request in VSTS](_img/completepull.gif) + +Once all reviewers have approved the changes, you can now complete the pull request. You'll be prompted for a descriptive message about the changes proposed by the pull +request. You can choose to delete the pull request branch when the pull request is complete. Git retains the commit history in the `master` branch after the pull request is complete, +so unless you plan on doing more work in the branch, it is safe to remove. + +### What happens when a pull request is merged? +You must resolve any [merge conflicts](merging.md) between the pull request branch the target branch. Git adds +a new commit (the *merge commit*) to the end of the master branch. This merge commit links the earlier history of both the master branch and the commits for the branch +that was merged as part of the pull request. + +## Next steps + +> [!div class="nextstepaction"] +> [Resolve merge conflicts](merging.md) \ No newline at end of file diff --git a/docs/git/tutorial/pushing.md b/docs/git/tutorial/pushing.md new file mode 100644 index 00000000000..303a1ed2182 --- /dev/null +++ b/docs/git/tutorial/pushing.md @@ -0,0 +1,88 @@ +--- +title: Sync your changes to a remote Git repo | VSTS & TFS +description: Using Git Push to share code with Git. +ms.assetid: 6c388abd-1b63-4957-9814-9ec5f104fa5b +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Share code with push + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +Share changes made in [commits](commits.md) and [branches](branches.md) using the `push` command. +Push your branches to the remote repository, where Git takes the commits and adds them to an existing branch on the remote or creates a new branch with the same commits as your local branch. + +Git makes sure that pushed changes are consistent with the remote branch so others can [pull](pulling.md) your commits and merge them into their own local copy of the branch. +Pushed branches that have finished work are reviewed and merged into the main branch of the your repo through a [pull request](pullrequest.md). + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Share your code with push + +## Video overview + + + + + +## Share your code with push + +# [Visual Studio](#tab/visual-studio) + +In **Team Explorer**, open the **Sync** view. The view lists outgoing commits and will present you with one of two links to push them to your remote repo: + +- **Publish** when there is not a branch on the remote repo associated with the current local branch. This will create a branch with the same name on the remote repo +and push the commits to it. Later you will **Push**, not publish changes when using this branch since the relationship between the branch on the local branch and the remote repo exists. + +- **Push** when there is a relationship between the local branch and the remote repo. Clicking this will `push` the commits to the remote branch. + + ![Pushing Changes with Git in Visual Studio](_img/vspush.gif) + +# [Command Line](#tab/command-line) + +The `push` command updates the remote branch on `origin` with the commits from your local branch. + +``` +git push +``` + +When running `git push` you'll see output similar to the following example: + +``` +Counting objects: 3, done. +Delta compression using up to 8 threads. +Compressing objects: 100% (2/2), done. +Writing objects: 100% (3/3), 861 bytes | 0 bytes/s, done. +Total 3 (delta 1), reused 0 (delta 0) +remote: Analyzing objects... (3/3) (114 ms) +remote: Storing packfile... done (62 ms) +remote: Storing index... done (53 ms) +``` + +If the remote branch doesn't exist, run the following to create a remote branch on `origin`. + +``` +git push -u origin users/frank/bugfix +``` + +Your commits on your local branch are added to the branch on `origin`, and a upstream tracking relationship will be set up in +Git so that next time you `push` (or `pull`) from this local branch, you won't have to specify the remote branch name. + +--- + +### Resolve merge conflicts before pushing + +If there are [conflicts](merging.md) between your local commits on the commits on the remote branch, you must first resolve these conflicts before you can push your changes. +You should [pull](pulling.md) the changes from others first, resolve the conflicts and commit the changes, then re-attempt the `push`. + +## Next steps + +> [!div class="nextstepaction"] +> [Review code with pull requests](pullrequest.md) or [update code with fetch and pull](pulling.md) + diff --git a/docs/git/tutorial/rebase.md b/docs/git/tutorial/rebase.md new file mode 100644 index 00000000000..d7f233261ee --- /dev/null +++ b/docs/git/tutorial/rebase.md @@ -0,0 +1,131 @@ +--- +title: Update your branch history with rebase | VSTS & TFS +description: Rewriting History using Git rebase +ms.assetid: 7f6312b8-6c98-4f44-9b6e-eecbeafbbaea +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 09/08/2017 +--- + +# Apply changes with rebase + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +One of the tradeoffs from the [Git feature branch workflow](gitworkflow.md) is that you do not actively manage your version control history. +Git creates this history as you save your code in your [commits](commits.md) and merges changes back into the master branch with [pull requests](pullrequest.md). +This generated history can get complicated when you need to update a feature branch with changes from the main branch to catch up on work committed by others. +Your commit history will diverge from the master branch at multiple points, making it hard to follow. + +Use`rebase` to address the problem of updating your branch with the latest changes from the main branch. +`Rebase` takes the changes made in the commits in your current branch and replays them on the history of another branch. +The commit history of your current branch will be rewritten so that it starts from the most recent commit in the target branch of the rebase. +Rebasing your changes in your feature branch off the latest changes in the main branch lets you test your changes on the most recent version in the main branch while keeping +a clean Git history. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Force push to update your remote branch +> * Squash local commits + +### Video overview + + + +### Use caution + +Rebasing is a powerful tool for catching up changes a main branch but you must be careful about its use. Some things to keep in mind before you rebase: + +0. Never rebase commits that have been [pushed](pushing.md) and shared with others. The only exception to this rule is when you are certain no one on your team is using the commits or the branch you pushed. +0. Use rebase to catch up with the commits on the another branch as you work with a local feature branch. This is especially useful when working in long-running feature braches to check how your changes work with the latest updates on the master branch. +0. You can't update a published branch with a `push` after you've rebased the local branch. You'll need to force push the branch to rewrite the history of the remote branch to match the local history. Never force push branches in use by others. + +During a rebase, Git attempts to reconcile the changes recorded in the commits on your branch and the changes in the commits in the target branch. +Resolve any conflicts between the commits in the same way that you resolve [merge conflicts](merging.md). + +### When to rebase vs. merge + +Using `rebase` instead of merging branches results in an easier to follow but less exact history of commits. +Your team should agree under what circumstances you should `rebase` a branch. You should still always merge branches into the main branch through a [pull request](pullrequest.md). +A suggested approach is to allow rebasing local changes that you have made but haven't shared with others, but to merge once you are sharing changes +with others. This avoids trouble with rewriting history while still letting you easily catch up with changes as you develop your code locally. + +# [Visual Studio](#tab/visual-studio) + +In Team Explorer, go to the **Branches** view. Click **Rebase**. You'll see a prompt to rebase the changes from your current branch, and then a drop-down to specify which branch +the changes in the current branch should be replayed on top of. If there is a conflict, resolve it just like you resolve [merge conflicts](merging.md) in Visual Studio. + +![Rebasing with Git in Visual Studio](../_shared/_img/vs-rebasing.gif) + +# [Command Line](#tab/command-line) + +### Rebase with the command line + +The `rebase` command takes a target branch to replay the current branch's commits onto. After the rebase finishes, your current branch will have the commit history from + the target branch. + +
        +> git checkout feature1
        +> git rebase master
        +First, rewinding head to replay your work on top of it... +Applying: Updated feature +Applying: updated feature again +Applying: final feature update +
        + +If you hit a conflict, resolve the conflicting files, do a `git add` to stage the merged changes, then continue the rebase with `git rebase --continue`. + +--- + + + + +## Force push to update your remote branch + +> [!WARNING] +> Never force push a branch that others are working on. Only force push branches that you alone work with. + +After a successful rebase, your local branch will have a different history than your remote branch. You must force push your local branch to update your remote branch. + +
        +> git push -f users/frank/myfixes
        +
        + +## Squash local commits + +> Interactive rebase is not currently supported in Visual Studio, but you can use the following command line steps to consolidate your commits. + +A special use of `rebase` is available to condense the changes made in a set of commits down to one single commit. This is useful to clean up commit histories +before they are [pushed](pushing.md) to a remote branch. The benefits to the readability are significant, and since you never rebase shared code, you can summarize the +changes easily. + +To consolidate commits, first decide about how many commits you'd like to squash into one. You don't have be exact as you'll get to pick out exactly which commits to squash when you run the +command. If you had five commits to squash, then you'd make sure there are no unstaged changes and run: + +
        +> git rebase -i HEAD~5
        +
        + +This will open up an editor where you will see something like: + +
        +pick 7b43f3f Updated router.js  
        +pick 00859d9 Updated README.md 
        +pick 9d247f7 initial commits            
        +pick 7068b09 Updated README.md with build instructions
        +
        + +You'll keep the first of the changes (leave it `pick`), and then change `pick` to `squash` for the rest of the changes. Save and close the editor. +Git will now attempt to condense the commits into a single commit. After the rebase completes, you will have a new editor +window open up where Git asks you to give a commit message for the commit with the combined changes. You'll want to condense +this down to one line of text (just like you would have for a normal commit) and save and quit the editor. + +> VSTS and TFS users can [squash merge](../merging-with-squash.md) their pull requests to consolidate commits added to the master branch. + +## Next steps + +> [!div class="nextstepaction"] +> [Copy changes with cherry-pick](cherry-pick.md) diff --git a/docs/git/tutorial/undo.md b/docs/git/tutorial/undo.md new file mode 100644 index 00000000000..1ed067635c7 --- /dev/null +++ b/docs/git/tutorial/undo.md @@ -0,0 +1,137 @@ +--- +title: Undo changes in your Git repo | VSTS & TFS +description: Undoing Changes with Git in VSTS using reset and revert. +ms.assetid: 02cdccb4-373d-4bd0-8053-6432f859e495 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Undo changes + +#### VSTS | TFS 2015 & TFS 2017 | Visual Studio 2015 & 2017 + +When undoing changes in Git, first decide what type of changes you are looking to undo. These changes fall into three categories: + +- Discard uncommitted changes to a file, bringing the file back to the version in the last commit. +- Reset your local branch to a previous commit. +- Revert changes pushed to a remote branch and shared with others. + +If you just need to make small updates such as to fix a typo or small problem introduced in your last commit, consider [amending your previous commit](commits.md) or fixing the change +in a new commit instead of any of these other steps. + +In this tutorial you learn how to: + +> [!div class="checklist"] +> * Discard uncommitted changes to a single file +> * Revert changes in shared commits +> * Reset a branch to a previous state + + +## Discard uncommitted changes to a single file + +Restore file contents back to a known good version, removing unwanted changes. + +> [!WARNING] +> These commands will overwrite your existing file changes. If you think you might want these changes later, consider [stashing](howto.md#stash) them instead. + +# [Visual Studio](#tab/visual-studio) + +Visual Studio 2015 & 2017 + +0. Open up the **Changes** view in Team Explorer. +0. Under the **Changes** section, find the file that you want to restore to the previous version. If your change is staged, remove it from the **Staged Changes** section by right-clicking and selecting **Unstage**. +0. Right-click that file and select **Undo Changes**. + + ![Reset a single file with Git in Visual Studio](_img/vs_reset_single_file.gif) + +# [Command Line](#tab/command-line) + +You can use the `checkout` command and give it the filename(s) to change. Use wildcards for undoing changes to multiple files. + +
        +> git checkout approuter.js
        +
        + +You can revert the file to the version in a specific commit by providing the commit ID: + +
        +> git checkout 38035acd2 approuter.js
        +
        + +This differs from the earlier use of the `checkout` command used to swap to a different [branch](branches.md). +Git will tell you if it is changing a file or swapping between branches in the output, and complain if it's not clear which one you are trying to do. + +--- + + + + +## Revert changes in shared commits + +Use `revert` to undo the changes made in your commits pushed to shared branches. The `revert` command creates a new commit that undoes the changes on a previous commit. No history is rewritten +in a `revert`, making it safe to use when working with others. + +# [Visual Studio](#tab/visual-studio) + +Open up the **Changes** view in Team Explorer. Select **Actions** and choose **View History** from the drop-down. In the history window that appears, right-click the commit to undo and +select **Revert** from the context menu. + +![Reset a branch from Visual Studio](_img/vs_revert_changes.png) + +# [Command Line](#tab/command-line) + +
        +> git revert 8437fbaf
        +> git commit
        +
        + +These commands will undo the changes made in commit 8437fbaf and create a new commit on the branch. The original commit at `commit_id` is still in the Git history. +`Revert` is flexible but it requires a branch history and commit identifiers to use. Review your [history](history.md) to find the commits you want to revert. + +--- + +## Reset a branch to a previous state + +Use `reset` to bring a branch in your local repository back to the contents of a previous commit. The most common use of the `reset` command is +to simply discard all changed files since the last commit and return the files to the state they were in at the most recent commit. + +> [!WARNING] +> Don't use `reset` on branches shared with others. Use [revert](undo.md#revert) instead. + +# [Visual Studio](#tab/visual-studio) + +0. Open up the **Changes** view in Team Explorer. +0. Select **Actions** and choose **View History** from the drop-down. +0. In the history window that appears, right-click the commit to reset the repo to and select **Reset** from the context menu. +0. Choose **Reset and delete changes...**. + + ![Reset a branch from Visual Studio](_img/vs_reset_branch.png) + +# [Command Line](#tab/command-line) + +
        +> git reset --hard HEAD 
        +
        + +The `--hard` part of the command tells Git to reset the files to the state of the previous commit and discard any staged changes. +The `HEAD` argument tells Git to reset the local repository to the most recent commit. If you want to reset the repo to a different commit, provide the ID instead of HEAD. + +--- + + + +A `reset` affects all files in the current branch on the repository, not just those in your current directory. `Reset` only discards changes that haven't +been committed yet. + + + + +## Next steps + +> [!div class="nextstepaction"] +> [Ignore files](ignore-files.md) + diff --git a/docs/git/use-ssh-keys-to-authenticate.md b/docs/git/use-ssh-keys-to-authenticate.md new file mode 100644 index 00000000000..2525423995f --- /dev/null +++ b/docs/git/use-ssh-keys-to-authenticate.md @@ -0,0 +1,201 @@ +--- +title: Connect to your Git repos with SSH | VSTS & TFS +description: Authenticate to VSTS Git Repositories with SSH Keys +ms.assetid: 2f89b7e9-3d10-4293-a277-30e26cae54c5 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: routlaw +ms.date: 08/04/2016 +--- + +# Use SSH key authentication +#### VSTS | TFS 2015 Update 3 | TFS 2017 + +Connect to your Git repos through SSH when you can't use the recommended [Git Credential Managers](set-up-credential-managers.md) or +[Personal Access Tokens](../accounts/use-personal-access-tokens-to-authenticate.md) to securely connect using HTTPS authentication. + +>[!IMPORTANT] +> SSH URLs are on September 12, 2017. Old SSH URLs will continue to work through November 17, 2017. If you have already set up SSH, you will need to update your remote URLs: +> - Visit your repository on the web and select the **Clone** button in the upper right. +> - Select **SSH** and copy the new SSH URL. +> - In your Git client, run: ```git remote set-url ```. Alternatively, in Visual Studio, go to **Repository Settings**, and edit your remotes. + +>[!NOTE] +> As of Visual Studio 2017, SSH can be used to connect to Git repos. + +## How SSH key authentication works +SSH public key authentication works with a pair of generated encryption keys. The _public_ key is shared and used to encrypt +messages. The _private_ key is kept safe and secure on your system and is used to read messages encrypted with the public key. + +## Set up SSH key authentication + +The following steps cover configuration of SSH key authentication on the following platforms: + +--- +- Linux +- Mac OS X running at least Leopard (10.5) +- Windows systems running [Git for Windows](http://www.git-scm.com/download/win) + +--- + +Configure SSH using the command line. `bash` is the common shell on Linux and Mac OS X and the Git for Windows installation adds a shortcut to Git Bash in the Start Menu. +Other shell environments will work, but are not covered in this article. + +### Step 1: Create your SSH keys + +> If you have already created SSH keys on your system, skip this step and go to [configuring SSH keys](use-ssh-keys-to-authenticate.md#configuration). + +The commands here will let you create new default SSH keys, overwriting existing default keys. Before continuing, check your +`~/.ssh` folder (for example, /home/frank/.ssh or C:\Users\frank\\.ssh) and look for the following files: + +- _id_rsa_ +- _id_rsa.pub_ + +If these files exist, then you have already created SSH keys. You can overwrite the keys with the following commands, or skip this step and go to [configuring SSH keys](use-ssh-keys-to-authenticate.md#configuration) to reuse these keys. + +Create your SSH keys with the `ssh-keygen` command from the `bash` prompt. This will create a 2048-bit RSA key for use with SSH. You can give a passphrase +for your private key when prompted—this provides another layer of security for your private key. +If you give a passphrase be sure to [configure the SSH agent](use-ssh-keys-to-authenticate.md#rememberpassphrase) to cache your passphrase so you don't have to enter it every time you connect. + +
        +>  ssh-keygen -C "frank@fabrikam.com"
        +Generating public/private rsa key pair.
        +Enter file in which to save the key (/home/frank/.ssh/id_rsa): /home/frank/.ssh/id_rsa
        +Enter passphrase (empty for no passphrase): passphrase
        +Enter same passphrase again: passphrase
        +Your identification has been saved in /home/frank/.ssh/id_rsa.
        +Your public key has been saved in /home/frank/.ssh/id_rsa.pub.
        +
        + +This produces the two keys needed for SSH authentication: your private key ( _id_rsa_ ) and the public key ( _id_rsa.pub_ ). It is important to never share the contents of your private key. If the private key is +compromised, attackers can use it to trick servers into thinking the connection is coming from you. + + + +### Step 2: Add the public key to VSTS/TFS + +Associate the public key generated in the previous step with your user ID. + +0. Open your security settings by browsing to the web interface and selecting your name in the upper right of the +user interface. Select **My security** in the menu that appears. + + ![Accessing User Profile in Visual Studio VSTS](_img/use-ssh-authentication/ssh_profile_access.png) + +0. Select **SSH Public Keys** , then select **Add**. + + ![Accessing Security Configuration in Visual Studio VSTS](_img/use-ssh-authentication/ssh_accessing_security_key.png) + +0. Copy the contents of the public key (for example, id_rsa.pub) that you generated into the **Key Data** field. Avoid adding whitespace or new lines into the **Key Data** field-they can cause VSTS to use an invalid public key. + + ![Configuring Public Key in Visual Studio VSTS](_img/use-ssh-authentication/ssh_key_input.png) + +0. Give the key a useful description (this will be displayed on the **SSH public keys** page for your profile) so that you can remember it later. Select **Save** to store the public key. Once saved, you cannot change the key. You can delete the key or create a new entry for another key. There are no restrictions on how many keys you can add to your user profile. + +### Step 3: Clone the Git repository with SSH + +> To connect with SSH from an existing cloned repo, see [updating your remotes to SSH](use-ssh-keys-to-authenticate.md#migrate). + +0. Copy the SSH clone URL from the web interface: + + ![VSTS SSH Clone URL](_img/use-ssh-authentication/ssh_clone_URL.png) + +0. Run `git clone` from the command prompt. + + ``` + git clone ssh://fabrikops2@vs-ssh.visualstudio.com:22/DefaultCollection/_git/fabrikamtools + ``` + +SSH will ask you to verify that the SSH fingerprint for the server you are connecting to. You should verify that the shown fingerprint matches the fingerprint on the **SSH public keys** page. +SSH displays this fingerprint when it connects to an unknown host to protect you from [man-in-the-middle attacks](https://technet.microsoft.com/en-us/library/cc959354.aspx). +Once you accept the host's fingerprint, SSH will not prompt you again unless the fingerprint changes. + +``` +git clone ssh://fabrikops2@vs-ssh.visualstudio.com:22/DefaultCollection/_git/fabrikamtools +``` + +When you are asked if you want to continue connecting, type `yes`. Git will clone the repo and set up the `origin` remote to connect with SSH for future Git commands. + +> Avoid trouble: Windows users will need to [run a command](use-ssh-keys-to-authenticate.md#rememberpassphrase) to have Git reuse their SSH key passphrase. + +## Questions and Troubleshooting + + + +### How can I have Git remember the passphrase for my key on Windows? +Run the following command included in Git for Windows to start up the `ssh-agent` process in Powershell or the Windows Command Prompt. `ssh-agent` will cache +your passphrase so you don't have to provide it every time you connect to your repo. + +``` +start-ssh-agent.cmd +``` + +If you are using the Bash shell (including Git Bash), start ssh-agent with: + +``` +eval `ssh-agent` +``` + +### I use [PuTTY](http://www.putty.org/) as my SSH client and generated my keys with PuTTYgen. Can I use these keys with VSTS? + +Yes. Load the private key with PuTTYgen, go to **Conversions** menu and select **Export OpenSSH key**. +Save the private key file and then follow the steps to [set up non-default keys](use-ssh-keys-to-authenticate.md#newkeys). +Copy you public key directly from the PuTTYgen window and paste into the **Key Data** field in your security settings. + +### How can I verify that the public key I uploaded is the same key as I have locally? + + You can verify the fingerprint of the public key uploaded with the one displayed in your profile through the following `ssh-keygen` command run against your public key using + the `bash` command line. You will need to change the path and the public key filename if you are not using the defaults. + +``` +ssh-keygen -l -E md5 -f ~/.ssh/id_rsa.pub +``` + +You can then compare the MD5 signature to the one in your profile. This is useful if you have connection problems or have concerns about incorrectly +pasting in the public key into the **Key Data** field when adding the key to VSTS. + + + +### How can I start using SSH in a repository where I am currently using HTTPS? + +You'll need to update the `origin` remote in Git to change over from a HTTPS to SSH URL. Once you have the SSH clone URL, run the following command: + +``` +git remote set-url origin ssh://fabrikops2@vs-ssh.visualstudio.com:22/DefaultCollection/_git/fabrikamtools +``` + +You can now run any Git command that connects to `origin`. + + + +### I'm using Git LFS with VSTS and I get errors when pulling files tracked by Git LFS. + +VSTS currently doesn't support LFS over SSH. Use HTTPS to connect to repos with Git LFS tracked files. + +### How can I use a non default key location, i.e. not ~/.ssh/id_rsa and ~/.ssh/id_rsa.pub ? + +To use keys created with `ssh-keygen` in a different place than the default, you do two things: + +0. The keys must be in a folder that only you can read or edit. If the folder has wider permissions, SSH will not use the keys. +0. You must let SSH know the location of the keys. You make SSH aware of keys through the `ssh-add` command, providing the full path to the private key. + +``` +ssh-add /home/frank/.ssh/id_frank.rsa +``` + +On Windows, before running `ssh-add`, you will need to run the following command from included in Git for Windows: + +``` +start-ssh-agent.cmd +``` + +This command runs in both Powershell and the Command Prompt. If you are using Git Bash, the command you need to use is: + +``` +eval `ssh-agent` +``` + +You can find `ssh-add` as part of the Git for Windows distribution and also run it in any shell environment on Windows. + +On Mac OS X and Linux you also must have `ssh-agent` running before running `ssh-add`, but the command environment on these platforms usually +takes care of starting `ssh-agent` for you. \ No newline at end of file diff --git a/docs/git/vc-devops.md b/docs/git/vc-devops.md new file mode 100644 index 00000000000..17b9b6c4943 --- /dev/null +++ b/docs/git/vc-devops.md @@ -0,0 +1,12 @@ +--- +title: Git and DevOps | VSTS & TFS +description: How Git fits into your devops workflow +ms.assetid: de779eff-42a8-4e81-a248-d37f23dd5638 +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.manager: douge +ms.author: sdanie +ms.date: 06/16/2017 +--- + +PLACEHOLDER diff --git a/docs/icons/checkmark.png b/docs/icons/checkmark.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/icons/checkmark.png differ diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000000..f9c2488a65c --- /dev/null +++ b/docs/index.md @@ -0,0 +1,1142 @@ +--- +title: VSTS and TFS Documentation | VSTS & TFS +description: Docs for DevOps and Agile tools provided by Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +layout: HubPage +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.assetid: B13C10AF-4FBC-493A-869F-79BABD6D453A +ms.manager: douge +ms.author: kaelli +ms.date: 07/26/2017 +--- + +
        + +
        + +
        +
        \ No newline at end of file diff --git a/docs/integrate/_shared/scopes.md b/docs/integrate/_shared/scopes.md new file mode 100644 index 00000000000..9e93f0f663c --- /dev/null +++ b/docs/integrate/_shared/scopes.md @@ -0,0 +1,43 @@ +| Scope | Name | Description | Included by | +|:----- | ----------- | ------------------ | ----------- | +| vso.agentpools_manage | Agent Pools (read, manage) | Grants the ability to manage pools, queues, and agents | | +| vso.agentpools | Agent Pools (read) | Grants the ability to view tasks, pools, queues, agents, and currently running or recently completed jobs for agents | vso.agentpools_manage | +| vso.build | Build (read) | Grants the ability to access build artifacts, including build results, definitions, and requests, and the ability to receive notifications about build events via service hooks. | vso.build_execute | +| vso.build_execute | Build (read and execute) | Grants the ability to access build artifacts, including build results, definitions, and requests, and the ability to queue a build, update build properties, and the ability to receive notifications about build events via service hooks. | | +| vso.chat_write | Team rooms (read and write) | Grants the ability to access rooms and view, post, and update messages. Also grants the ability to receive notifications about new messages via service hooks. | vso.chat_manage | +| vso.chat_manage | Team rooms (read, write, and manage) | Grants the ability to access rooms and view, post, and update messages. Also grants the ability to manage rooms and users and to receive notifications about new messages via service hooks. | | +| vso.code | Code (read) | Grants the ability to read source code and metadata about commits, changesets, branches, and other version control artifacts. Also grants the ability to get notified about version control events via service hooks. | vso.code_write
        vso.code_manage | +| vso.code_write | Code (read and write) | Grants the ability to read, update, and delete source code, access metadata about commits, changesets, branches, and other version control artifacts. Also grants the ability to create and manage pull requests and code reviews and to receive notifications about version control events via service hooks. | vso.code_manage | +| vso.code_status | Code (status) | Grants the ability to read and write commit and pull request status. | | +| vso.code_manage | Code (read, write, and manage) | Grants the ability to read, update, and delete source code, access metadata about commits, changesets, branches, and other version control artifacts. Also grants the ability to create and manage code repositories, create and manage pull requests and code reviews, and to receive notifications about version control events via service hooks. | | +| vso.dashboards_manage | Team dashboards (manage) | Grants the ability to manage team dashboard information | | +| vso.dashboards | Team dashboards (read) | Grants the ability to read team dashboard information | | +| vso.entitlements | Entitlements (Read) | Provides read only access to VSTS licensing entitlements endpoint to get account entitlements. | | +| vso.extension | Extensions (read) | Grants the ability to read installed extensions. | vso.extension_manage | +| vso.extension_manage | Extensions (read and manage) | Grants the ability to install, uninstall, and perform other administrative actions on installed extensions. | | +| vso.extension.data | Extension data (read) | Grants the ability to read data (settings and documents) stored by installed extensions. | vso.extension.data_write | +| vso.extension.data_write | Extension data (read and write) | Grants the ability to read and write data (settings and documents) stored by installed extensions. | | +| vso.gallery | Marketplace | Grants read access to public and private items and publishers. | vso.gallery_publish
        vso.gallery_manage
        vso.gallery_acquire | +| vso.gallery_acquire | Marketplace (acquire) | Grants read access and the ability to acquire items. | | +| vso.gallery_publish | Marketplace (publish) | Grants read access and the ability to upload, update, and share items. | vso.gallery_manage | +| vso.gallery_manage | Marketplace (manage) | Grants read access, the ability to publish and manage items and publishers. | | +| vso.identity | Identity (read) | Grants the ability to read identities and groups. | | +| vso.notification | Notifications (read) | Provides read access to subscriptions and event metadata, including filterable field values. | vso.notification_write
        vso.notification_manage | +| vso.notification_write | Notifications (write) | Provides read/write access to subscriptions and read access to event metadata, including filterable field values. | vso.notification_manage | +| vso.notification_manage | Notifications (manage) | Provides read, write, and management access to subscriptions and read access to event metadata, including filterable field values. | | +| vso.packaging | Packaging (read) | Grants the ability to read feeds and packages. | vso.packaging_write
        vso.packaging_manage | +| vso.packaging_write | Packaging (read and write) | Grants the ability to create and read feeds and packages. | vso.packaging_manage | +| vso.packaging_manage | Packaging (read, write, and manage) | Grants the ability to create, read, update, and delete feeds and packages. | | +| vso.profile | User profile (read) | Grants the ability to read your profile, accounts, collections, projects, teams, and other top-level organizational artifacts. | vso.extension
        vso.extension_manage
        vso.extension.data
        vso.extension.data_write
        vso.gallery
        vso.gallery_acquire
        vso.gallery_publish
        vso.gallery_manage
        vso.notification
        vso.notification_write
        vso.notification_manage
        vso.packaging
        vso.packaging_write
        vso.packaging_manage
        vso.profile_write
        vso.release
        vso.release_execute
        vso.release_manage
        vso.test
        vso.test_write | +| vso.profile_write | User profile (write) | Grants the ability to write to your profile. | | +| vso.project | Project and team (read) | Grants the ability to read projects and teams. | vso.project_write
        vso.project_manage | +| vso.project_write | Project and team (read and write) | Grants the ability to read and update projects and teams. | vso.project_manage | +| vso.project_manage | Project and team (read, write, and manage) | Grants the ability to create, read, update, and delete projects and teams. | | +| vso.release | Release (read) | Grants the ability to read release artifacts, including releases, release definitions and release environment. | vso.release_execute
        vso.release_manage | +| vso.release_execute | Release (read, write and execute) | Grants the ability to read and update release artifacts, including releases, release definitions and release envrionment, and the ability to queue a new release. | vso.release_manage | +| vso.release_manage | Release (read, write, execute and manage) | Grants the ability to read, update and delete release artifacts, including releases, release definitions and release envrionment, and the ability to queue and approve a new release. | | +| vso.test | Test management (read) | Grants the ability to read test plans, cases, results and other test management related artifacts. | vso.test_write | +| vso.test_write | Test management (read and write) | Grants the ability to read, create, and update test plans, cases, results and other test management related artifacts. | | +| vso.work | Work items (read) | Grants the ability to read work items, queries, boards, area and iterations paths, and other work item tracking related metadata. Also grants the ability to execute queries and to receive notifications about work item events via service hooks. | vso.work_write | +| vso.work_write | Work items (read and write) | Grants the ability to read, create, and update work items and queries, update board metadata, read area and iterations paths other work item tracking related metadata, execute queries, and to receive notifications about work item events via service hooks. | | + diff --git a/docs/integrate/api/_data/Core/properties/GET__projects__project__properties.json b/docs/integrate/api/_data/Core/properties/GET__projects__project__properties.json new file mode 100644 index 00000000000..072d2bb488c --- /dev/null +++ b/docs/integrate/api/_data/Core/properties/GET__projects__project__properties.json @@ -0,0 +1,64 @@ +{ + "method": "GET", + "resourceFormat": "/projects/{project}/properties", + "requestUrl": "https://fabrikam-fiber-inc.visualstudio.com/_apis/projects/94e82dfb-8ce4-430c-aa97-07ee10c83d5f/properties?api-version=4.0-preview", + "requestHeaders": { + "Accept": "application/json" + }, + "statusCode": 200, + "responseHeaders": { + "cache-control": "no-cache", + "pragma": "no-cache", + "content-type": "application/json; charset=utf-8; api-version=4.0-preview.1", + "expires": "-1", + "server": "Microsoft-IIS/10.0", + "x-tfs-processid": "f67c08c6-2eaa-4b0f-929b-933392600520", + "activityid": "d97bceca-14f8-4086-8541-e971a2f1573d", + "x-tfs-session": "d97bceca-14f8-4086-8541-e971a2f1573d", + "x-vss-e2eid": "d97bceca-14f8-4086-8541-e971a2f1573d", + "x-frame-options": "SAMEORIGIN", + "x-aspnet-version": "4.0.30319", + "x-powered-by": "ASP.NET", + "p3p": "CP=\"CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT\"", + "x-content-type-options": "nosniff", + "date": "Wed, 14 Jun 2017 13:51:50 GMT", + "content-length": "629" + }, + "responseBody": { + "count": 8, + "value": [ + { + "name": "System.CurrentProcessTemplateId", + "value": "2dc3221a-2d39-4138-a4e1-fc4d20d8912d" + }, + { + "name": "System.OriginalProcessTemplateId", + "value": "2dc3221a-2d39-4138-a4e1-fc4d20d8912d" + }, + { + "name": "System.ProcessTemplateType", + "value": "adcc42ab-9882-485e-a3ed-7678f01f66bc" + }, + { + "name": "System.Process Template", + "value": "Agile" + }, + { + "name": "System.Microsoft.TeamFoundation.Team.Default", + "value": "9b7ae5b9-826f-4353-99d6-daaa5cd94ec6" + }, + { + "name": "System.SourceControlCapabilityFlags", + "value": "2" + }, + { + "name": "System.SourceControlGitEnabled", + "value": "True" + }, + { + "name": "System.SourceControlGitPermissionsInitialized", + "value": "True" + } + ] + } +} \ No newline at end of file diff --git a/docs/integrate/api/_data/Core/properties/GET__projects__project__properties_keys-_propertyName_,_wildcard_.json b/docs/integrate/api/_data/Core/properties/GET__projects__project__properties_keys-_propertyName_,_wildcard_.json new file mode 100644 index 00000000000..5cc2fe59779 --- /dev/null +++ b/docs/integrate/api/_data/Core/properties/GET__projects__project__properties_keys-_propertyName_,_wildcard_.json @@ -0,0 +1,48 @@ +{ + "method": "GET", + "resourceFormat": "/projects/{project}/properties?keys={propertyName},{wildcard}", + "requestUrl": "https://fabrikam-fiber-inc.visualstudio.com/_apis/projects/94e82dfb-8ce4-430c-aa97-07ee10c83d5f/properties?keys=System.CurrentProcessTemplateId,*SourceControl*&api-version=4.0-preview", + "requestHeaders": { + "Accept": "application/json" + }, + "statusCode": 200, + "responseHeaders": { + "cache-control": "no-cache", + "pragma": "no-cache", + "content-type": "application/json; charset=utf-8; api-version=4.0-preview.1", + "expires": "-1", + "server": "Microsoft-IIS/10.0", + "x-tfs-processid": "f67c08c6-2eaa-4b0f-929b-933392600520", + "activityid": "d97bcec9-14f8-4086-8541-e971a2f1573d", + "x-tfs-session": "d97bcec9-14f8-4086-8541-e971a2f1573d", + "x-vss-e2eid": "d97bcec9-14f8-4086-8541-e971a2f1573d", + "x-frame-options": "SAMEORIGIN", + "x-aspnet-version": "4.0.30319", + "x-powered-by": "ASP.NET", + "p3p": "CP=\"CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT\"", + "x-content-type-options": "nosniff", + "date": "Wed, 14 Jun 2017 13:51:50 GMT", + "content-length": "299" + }, + "responseBody": { + "count": 4, + "value": [ + { + "name": "System.CurrentProcessTemplateId", + "value": "2dc3221a-2d39-4138-a4e1-fc4d20d8912d" + }, + { + "name": "System.SourceControlCapabilityFlags", + "value": "2" + }, + { + "name": "System.SourceControlGitEnabled", + "value": "True" + }, + { + "name": "System.SourceControlGitPermissionsInitialized", + "value": "True" + } + ] + } +} \ No newline at end of file diff --git a/docs/integrate/api/_data/Core/properties/PATCH__projects__project__properties.json b/docs/integrate/api/_data/Core/properties/PATCH__projects__project__properties.json new file mode 100644 index 00000000000..fbd79894ac4 --- /dev/null +++ b/docs/integrate/api/_data/Core/properties/PATCH__projects__project__properties.json @@ -0,0 +1,34 @@ +{ + "method": "PATCH", + "resourceFormat": "/projects/{project}/properties", + "requestUrl": "https://fabrikam-fiber-inc.visualstudio.com/_apis/projects/94e82dfb-8ce4-430c-aa97-07ee10c83d5f/properties?api-version=4.0-preview", + "requestHeaders": { + "Accept": "application/json", + "Content-Type": "application/json-patch+json", + "Content-Length": 50 + }, + "requestBody": [ + { + "op": "add", + "path": "/Alias", + "value": "Frabrikam" + } + ], + "statusCode": 204, + "responseHeaders": { + "cache-control": "no-cache", + "pragma": "no-cache", + "expires": "-1", + "server": "Microsoft-IIS/10.0", + "x-tfs-processid": "f67c08c6-2eaa-4b0f-929b-933392600520", + "activityid": "d97bcec8-14f8-4086-8541-e971a2f1573d", + "x-tfs-session": "d97bcec8-14f8-4086-8541-e971a2f1573d", + "x-vss-e2eid": "d97bcec8-14f8-4086-8541-e971a2f1573d", + "x-frame-options": "SAMEORIGIN", + "x-aspnet-version": "4.0.30319", + "x-powered-by": "ASP.NET", + "p3p": "CP=\"CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT\"", + "x-content-type-options": "nosniff", + "date": "Wed, 14 Jun 2017 13:51:50 GMT" + } +} \ No newline at end of file diff --git a/docs/integrate/api/_data/Core/properties/PATCH__projects__project__properties2.json b/docs/integrate/api/_data/Core/properties/PATCH__projects__project__properties2.json new file mode 100644 index 00000000000..77955d6d2c3 --- /dev/null +++ b/docs/integrate/api/_data/Core/properties/PATCH__projects__project__properties2.json @@ -0,0 +1,33 @@ +{ + "method": "PATCH", + "resourceFormat": "/projects/{project}/properties", + "requestUrl": "https://fabrikam-fiber-inc.visualstudio.com/_apis/projects/94e82dfb-8ce4-430c-aa97-07ee10c83d5f/properties?api-version=4.0-preview", + "requestHeaders": { + "Accept": "application/json", + "Content-Type": "application/json-patch+json", + "Content-Length": 33 + }, + "requestBody": [ + { + "op": "remove", + "path": "/Alias" + } + ], + "statusCode": 204, + "responseHeaders": { + "cache-control": "no-cache", + "pragma": "no-cache", + "expires": "-1", + "server": "Microsoft-IIS/10.0", + "x-tfs-processid": "f67c08c6-2eaa-4b0f-929b-933392600520", + "activityid": "d97bced7-14f8-4086-8541-e971a2f1573d", + "x-tfs-session": "d97bced7-14f8-4086-8541-e971a2f1573d", + "x-vss-e2eid": "d97bced7-14f8-4086-8541-e971a2f1573d", + "x-frame-options": "SAMEORIGIN", + "x-aspnet-version": "4.0.30319", + "x-powered-by": "ASP.NET", + "p3p": "CP=\"CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT\"", + "x-content-type-options": "nosniff", + "date": "Wed, 14 Jun 2017 13:51:50 GMT" + } +} \ No newline at end of file diff --git a/docs/integrate/api/_data/disclaimer.md b/docs/integrate/api/_data/disclaimer.md new file mode 100644 index 00000000000..9ceee26cdaf --- /dev/null +++ b/docs/integrate/api/_data/disclaimer.md @@ -0,0 +1,5 @@ + + +This API in preview. [Learn more](http://www.visualstudio.com/integrate/support/support-faq-vsi#API_Q1) + + \ No newline at end of file diff --git a/docs/integrate/api/_data/get-started.md b/docs/integrate/api/_data/get-started.md new file mode 100644 index 00000000000..6bfd17c069d --- /dev/null +++ b/docs/integrate/api/_data/get-started.md @@ -0,0 +1,2 @@ +If you haven't already, look at the information on [getting started](../../get-started/rest/basics.md) with these APIs. + diff --git a/docs/integrate/api/_data/version-preview1.md b/docs/integrate/api/_data/version-preview1.md new file mode 100644 index 00000000000..e875fa71062 --- /dev/null +++ b/docs/integrate/api/_data/version-preview1.md @@ -0,0 +1 @@ +**api-version** = 1.0-preview.1 \ No newline at end of file diff --git a/docs/integrate/api/_data/version-preview2.md b/docs/integrate/api/_data/version-preview2.md new file mode 100644 index 00000000000..d8276f65f56 --- /dev/null +++ b/docs/integrate/api/_data/version-preview2.md @@ -0,0 +1 @@ +**api-version** = 1.0-preview.2 \ No newline at end of file diff --git a/docs/integrate/api/_data/version.md b/docs/integrate/api/_data/version.md new file mode 100644 index 00000000000..b77bad15dca --- /dev/null +++ b/docs/integrate/api/_data/version.md @@ -0,0 +1 @@ +**api-version** = 1.0 \ No newline at end of file diff --git a/docs/integrate/api/_data/version2-2.md b/docs/integrate/api/_data/version2-2.md new file mode 100644 index 00000000000..bcea4bbbf79 --- /dev/null +++ b/docs/integrate/api/_data/version2-2.md @@ -0,0 +1 @@ +**api-version** = 2.2 \ No newline at end of file diff --git a/docs/integrate/api/_data/version2-preview.md b/docs/integrate/api/_data/version2-preview.md new file mode 100644 index 00000000000..9cdad364608 --- /dev/null +++ b/docs/integrate/api/_data/version2-preview.md @@ -0,0 +1 @@ +**api-version** = 2.0-preview \ No newline at end of file diff --git a/docs/integrate/api/_data/version2-preview1.md b/docs/integrate/api/_data/version2-preview1.md new file mode 100644 index 00000000000..6c1b45bdae7 --- /dev/null +++ b/docs/integrate/api/_data/version2-preview1.md @@ -0,0 +1 @@ +**api-version** = 2.0-preview.1 \ No newline at end of file diff --git a/docs/integrate/api/_data/version2-preview2.md b/docs/integrate/api/_data/version2-preview2.md new file mode 100644 index 00000000000..6973d35656d --- /dev/null +++ b/docs/integrate/api/_data/version2-preview2.md @@ -0,0 +1 @@ +**api-version** = 2.0-preview.2 \ No newline at end of file diff --git a/docs/integrate/api/_data/version2.md b/docs/integrate/api/_data/version2.md new file mode 100644 index 00000000000..5970bc35425 --- /dev/null +++ b/docs/integrate/api/_data/version2.md @@ -0,0 +1 @@ +**api-version** = 2.0 \ No newline at end of file diff --git a/docs/integrate/api/_data/version3-2-preview.md b/docs/integrate/api/_data/version3-2-preview.md new file mode 100644 index 00000000000..38c55f64b71 --- /dev/null +++ b/docs/integrate/api/_data/version3-2-preview.md @@ -0,0 +1 @@ +**api-version** = 3.2-preview \ No newline at end of file diff --git a/docs/integrate/api/_data/version3-preview.md b/docs/integrate/api/_data/version3-preview.md new file mode 100644 index 00000000000..a7a4f8677ab --- /dev/null +++ b/docs/integrate/api/_data/version3-preview.md @@ -0,0 +1 @@ +**api-version** = 3.0-preview \ No newline at end of file diff --git a/docs/integrate/api/_data/version3-preview1.md b/docs/integrate/api/_data/version3-preview1.md new file mode 100644 index 00000000000..1e0d2adc2cb --- /dev/null +++ b/docs/integrate/api/_data/version3-preview1.md @@ -0,0 +1 @@ +**api-version** = 3.0-preview.1 \ No newline at end of file diff --git a/docs/integrate/api/_data/version3-preview2.md b/docs/integrate/api/_data/version3-preview2.md new file mode 100644 index 00000000000..7fd335eeeb8 --- /dev/null +++ b/docs/integrate/api/_data/version3-preview2.md @@ -0,0 +1 @@ +**api-version** = 3.0-preview.2 \ No newline at end of file diff --git a/docs/integrate/api/_data/version4-0-preview2.md b/docs/integrate/api/_data/version4-0-preview2.md new file mode 100644 index 00000000000..ab23fb6aaee --- /dev/null +++ b/docs/integrate/api/_data/version4-0-preview2.md @@ -0,0 +1 @@ +**api-version** = 4.0-preview.2 \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/accounts.js b/docs/integrate/api/_scripts/1.0/accounts.js new file mode 100644 index 00000000000..abfde3132bb --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/accounts.js @@ -0,0 +1,71 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + newAccountName: 'dummyaccount1' + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + // Get the current user's profile + apiwriter.getJson('/profile/profiles/me', + function(context, result) { + context.userId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + // Get list of accounts by member + apiwriter.getJson('/Accounts?memberId={userId}', + function(context, result) { + context.accountId = result.responseBody.value[0].accountId; + context.accountName = result.responseBody.value[0].accountName; + } + ); + + // Get list of accounts by owner + apiwriter.getJson('/Accounts?ownerId={userId}'); + + // Get an account by ID + //apiwriter.getJson('/Accounts/{accountName}'); + + // Get an account by name + //apiwriter.getJson('/Accounts/{accountName}'); + + // Get account users + //apiwriter.getJson('/Account/User/{accountId}'); + + // Get account licenses + // apiwriter.getJson('/Account/{accountId}/Licenses'); + + // Create an account + /*apiwriter.postJson('/Accounts', + function(context, result) { + return { "accountName": content.newAccountName }; + }, + function(context, result) { + context.accountId = result.responseBody.AccountId; + context.accountName = result.responseBody.AccountName; + } + );*/ + + // Update an account + /*apiwriter.patchJson('/Accounts/{accountId}', + function(context, result) { + console.log(context.accountId); + return { "AccountId": context.accountId, "AccountName": "renamed account" }; + } + );*/ + + // Delete an account + /*apiwriter.postJson('/AccountDeletions/{accountId}', + function(context, result) { + return { }; + } + );*/ + +}; diff --git a/docs/integrate/api/_scripts/1.0/buildBuilds.js b/docs/integrate/api/_scripts/1.0/buildBuilds.js new file mode 100644 index 00000000000..319fecdf92b --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/buildBuilds.js @@ -0,0 +1,85 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + build1: null, + build2: null, + build3: null, + definition: null, + person: null, + after: "02-01-2014", + quality: "Rejected", + status: "Failed", + top: 1, + skip: 1 + }; +}; + +var DEFAULT_MAX = 3; + +var limitResult = function(result, max) { + try { + if (result.responseBody.value && result.responseBody.value.length > max) { + result.responseBody.value = result.responseBody.value.slice(0, max); + result.responseBody.count = max; + } + } catch (e) { } +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + apiwriter.getJson('/build/builds', + function(context, result) { + limitResult(result, DEFAULT_MAX); + + context.build1 = result.responseBody.value[0].id; + context.build2 = result.responseBody.value[1].id; + context.build3 = result.responseBody.value[2].id; + context.definition = result.responseBody.value[0].definition.name; + context.person = result.responseBody.value[0].requests[0].requestedFor.uniqueName; + }); + + apiwriter.getJson('/build/builds?definition={definition}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/builds?requestedFor={person}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/builds?minFinishTime={after}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/builds?quality={quality}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/builds?status={status}', + function (context, result) { + limitResult(result, DEFAULT_MAX); + + context.build1 = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/build/builds?$skip={skip}&$top={top}'); + + apiwriter.getJson('/build/builds/{build1}'); + + apiwriter.getJson('/build/builds/{build1}/details'); + + apiwriter.patchJson('/build/builds/{build1}', { + status: 'Stopped' + }); + + apiwriter.patchJson('/build/builds/{build2}', { + quality: 'Rejected' + }); + + apiwriter.patchJson('/build/builds/{build3}', { + retainIndefinitely: 'true' + }); + + apiwriter.deleteJson('/build/builds/{build3}', null); +} diff --git a/docs/integrate/api/_scripts/1.0/buildDefinitions.js b/docs/integrate/api/_scripts/1.0/buildDefinitions.js new file mode 100644 index 00000000000..5fe9867bab9 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/buildDefinitions.js @@ -0,0 +1,37 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + definitionId: null, + deleteComment: 'delete me' + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + apiwriter.getJson('/build/definitions', + function(context, result) { + context.definitionId = result.responseBody.value[result.responseBody.value.length - 1].id; + }); + + //apiwriter.getJson('/build/definitions?projectName={projectName}') + + apiwriter.getJson('/build/definitions/{definitionId}'); + + /* + apiwriter.postJson('/build/definitions', + {"name":"new build definition","automationDefinitionType":1,"repositories":[{"id":1,"type":"tfvc","rootFolder":"$/MyTfsProject","name":"default repo","url":"http://scdallam.me.tfsallin.net:81/DefaultCollection"}],"process":{"phases":[{"name":"Build Phase","type":2,"enabled":true,"init":[],"body":[{"name":"Build","type":3,"enabled":true,"tasks":[{"name":"pullFromGit","description":"Pull from git: default repo","enabled":true,"inputs":{"repository":"1"},"taskId":"acbafed4-0b18-4f58-968d-86655b4d2c10","demands":{},"type":4,"versionSpec":"*"},{"name":"MSBuildSolution","description":"Build solution **\\*.sln","enabled":true,"inputs":{"solution":"**\\*.sln","clean":"false"},"taskId":"bea74f14-67d3-4463-8ac2-9252b49c3602","demands":{},"type":4,"versionSpec":"*"}],"matrices":[]}],"cleanup":[]}]},"variables":{},"authoredBy":{"displayName":""},"projectId":"000f2357-0abc-4711-bfcf-d69148d4972f"}, + function(context, result) { + context.definitionId = result.responseBody.id; + }); + + apiwriter.putJson('/build/definitions/{definitionId}/draft', + { "name": "draft definition", "repositories": [{ "id": 1, "type": "tfvc", "rootFolder": "$/MyTfsProject", "name": "default repo", "url": "http://scdallam.me.tfsallin.net:81/DefaultCollection" }], "process": { "phases": [{ "name": "Build Phase", "type": 2, "enabled": true, "init": [], "body": [{ "name": "Build", "type": 3, "enabled": true, "tasks": [{ "name": "pullFromGit", "description": "Pull from git: default repo", "enabled": true, "inputs": { "repository": "1" }, "taskId": "acbafed4-0b18-4f58-968d-86655b4d2c10", "demands": {}, "type": 4, "versionSpec": "*" }, { "name": "MSBuildSolution", "description": "Build solution **\\*.sln", "enabled": true, "inputs": { "solution": "**\\*.sln", "clean": "false" }, "taskId": "bea74f14-67d3-4463-8ac2-9252b49c3602", "demands": {}, "type": 4, "versionSpec": "*" }], "matrices": [] }], "cleanup": [] }] }, "variables": {}, "authoredBy": { "displayName": "" }, "projectId": "000f2357-0abc-4711-bfcf-d69148d4972f" }, + function (context, result) { + context.definitionId = result.responseBody.id; + }); + + apiwriter.deleteJson('/build/definitions/{definitionId}?comment={deleteComment}', null); + */ +} diff --git a/docs/integrate/api/_scripts/1.0/buildQualities.js b/docs/integrate/api/_scripts/1.0/buildQualities.js new file mode 100644 index 00000000000..4ea56ef86be --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/buildQualities.js @@ -0,0 +1,17 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + quality: 'To be evaluated' + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + apiwriter.getJson('/build/qualities'); + + apiwriter.putJson('/build/qualities/{quality}', {}); + + apiwriter.deleteJson('/build/qualities/{quality}', null); +} diff --git a/docs/integrate/api/_scripts/1.0/buildQueues.js b/docs/integrate/api/_scripts/1.0/buildQueues.js new file mode 100644 index 00000000000..d2d2b2c975f --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/buildQueues.js @@ -0,0 +1,18 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + queueId: null + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + apiwriter.getJson('/build/queues', + function (context, result) { + context.queueId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/build/queues/{queueId}'); +} diff --git a/docs/integrate/api/_scripts/1.0/buildRequests.js b/docs/integrate/api/_scripts/1.0/buildRequests.js new file mode 100644 index 00000000000..1830b85be07 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/buildRequests.js @@ -0,0 +1,106 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + request: null, + requestToDelete: null, + person: null, + definition: null, + controller: null, + age: 3600, // one hour + status: "completed", + top: 2, + skip: 2, + postBody: { definition: { id: null } }, + }; +}; + +var DEFAULT_MAX = 5; + +var limitResult = function(result, max) { + try { + if (result.responseBody.value && result.responseBody.value.length > max) { + result.responseBody.value = result.responseBody.value.slice(0, max); + result.responseBody.count = max; + } + } catch (e) { } +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + // We need at least one build to start with + apiwriter.getJson('/build/requests', + function (context, result) { + limitResult(result, DEFAULT_MAX); + + context.request = result.responseBody.value[0].id; + context.person = result.responseBody.value[0].requestedBy.uniqueName; + context.definition = context.postBody.definition.id = result.responseBody.value[0].definition.id; + context.queue = result.responseBody.value[0].queue.id; + context.queueTye = result.responseBody.value[0].queue.queueType; + context.status = result.responseBody.value[0].status; + }); + + nBuildsToQueue = 4; + for (i = 0; i < nBuildsToQueue; i++) { + apiwriter.postJson('/build/requests', + function (context) { + return { + 'definition': { + 'id': context.definition + }, + 'reason': 'Manual', + 'priority': 'Normal' + } + }); + + // after the first one, turn the writer off + if (i == 0) { + apiwriter.setEnableWrite(false); + } + } + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/build/requests?requestedFor={person}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?definitionId={definition}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?controllerId={queue}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?maxCompletedAge={age}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?status={status}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?$top={top}&$skip={skip}'); + + apiwriter.setEnableWrite(false); + apiwriter.getJson('/build/requests?status=Queued', + function (context, result) { + context.requestToDelete = result.responseBody.value[0].id; + /* + context.person = result.responseBody.value[0].requestedBy.uniqueName; + context.definition = context.postBody.definition.id = result.responseBody.value[0].definition.id; + context.queue = result.responseBody.value[0].queue.id; + context.queueTye = result.responseBody.value[0].queue.queueType; + context.status = result.responseBody.value[0].status; + */ + }); + apiwriter.setEnableWrite(true); + apiwriter.patchJson('/build/requests/{request}', { + status: 'Stopped' + }); + + apiwriter.deleteJson('/build/requests/{requestToDelete}', null); +} diff --git a/docs/integrate/api/_scripts/1.0/chatMessages.js b/docs/integrate/api/_scripts/1.0/chatMessages.js new file mode 100644 index 00000000000..6b39ed63e86 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/chatMessages.js @@ -0,0 +1,51 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + roomId: null, + messageId: null, + filter: 'PostedTime ge 10/25/2014 and PostedTime lt 10/28/2014' + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + //get the first room + apiwriter.getJson('/chat/rooms', + function(context, result) { + context.roomId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + //get the list of messages + apiwriter.getJson('/chat/rooms/{roomId}/messages'); + + //get a filtered list of messages + apiwriter.getJson('/chat/rooms/{roomId}/messages?$filter={filter}'); + + // post a new message + apiwriter.postJson('/chat/rooms/{roomId}/messages', + function(context, result) { + return { "content": "Here's a new message" } + }, + function(context, result) { + context.messageId = result.responseBody.id; + } + ); + + // Update the message + apiwriter.patchJson('/chat/rooms/{roomId}/messages/{messageId}', + function(context, result) { + return {"content": "Updated message"} + } + ); + + // get the details of the first message + apiwriter.getJson('/chat/rooms/{roomId}/messages/{messageId}'); + + // Delete the message + apiwriter.deleteJson('/chat/rooms/{roomId}/messages/{messageId}', null); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/chatRooms.js b/docs/integrate/api/_scripts/1.0/chatRooms.js new file mode 100644 index 00000000000..7e292d53e20 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/chatRooms.js @@ -0,0 +1,37 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + roomId: null, + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // Enumerate all existing rooms + apiwriter.getJson('/chat/rooms'); + + // Create a new team room + apiwriter.postJson('/chat/rooms', + function(context, result) { + return { "name": "newCreatedRoom", "description": "used for API doc generation" } + }, + function(context, result) { + context.roomId = result.responseBody.id; + } + ); + + // Update the name and description of the room + apiwriter.patchJson('/chat/rooms/{roomId}', + function(context, result) { + return {"name": "renamedRoom", "description":"updated room description"} + } + ); + + apiwriter.getJson('/chat/rooms/{roomId}'); + + // Delete the created room + apiwriter.deleteJson('/chat/rooms/{roomId}', null); +}; diff --git a/docs/integrate/api/_scripts/1.0/chatUsers.js b/docs/integrate/api/_scripts/1.0/chatUsers.js new file mode 100644 index 00000000000..b53e3fe9f81 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/chatUsers.js @@ -0,0 +1,45 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + roomId: null + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + // Get the current user's profile + apiwriter.getJson('/connectionData', + function(context, result) { + context.userId = result.responseBody.authenticatedUser.id; + } + ); + + // go find the roomId without writing + apiwriter.setEnableWrite(false); + apiwriter.getJson('/chat/rooms', + function(context, result) { + context.roomId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + // Retrieve the list of room users + apiwriter.getJson('/chat/rooms/{roomId}/users'); + + // Get user status + apiwriter.getJson('/chat/rooms/{roomId}/users/{userId}'); + /*, + function(context, result) { + context.userId = result.responseBody.value[0].userId; + });*/ + + // Join and leave the room + apiwriter.putJson('/chat/rooms/{roomId}/users/{userId}', + function(context, result) { + return { 'userId': context.userId } + }); + apiwriter.deleteJson('/chat/rooms/{roomId}/users/{userId}', null); +}; diff --git a/docs/integrate/api/_scripts/1.0/gitBlobs.js b/docs/integrate/api/_scripts/1.0/gitBlobs.js new file mode 100644 index 00000000000..db97822f591 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitBlobs.js @@ -0,0 +1,46 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + objectId: null, + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + //find a tree under the root and get its sha1 + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath=/MyWebSite/MyWebSite/Views/Home/_Home.cshtml', + function(context, result) { + //get items from request + var items = result.responseBody.value; + //pick the first non-root tree + for (var i = 0 ; i < items.length ; i++) + { + if (items[i].gitObjectType == "blob" && items[i].path != "/") + { + context.objectId = items[i].objectId; + break; + } + } + }); + + apiwriter.setEnableWrite(true); + + // Get blob (JSON metadata) + apiwriter.getJson('/git/repositories/{repositoryId}/blobs/{objectId}'); + + // Get blob (stream) + //apiwriter.getJson('/git/repositories/{repositoryId}/blobs/{objectId}?$format=OctetStream'); + + // Get blob (zip) + //apiwriter.getJson('/git/repositories/{repositoryId}/blobs/{objectId}?$format=zip'); + +} diff --git a/docs/integrate/api/_scripts/1.0/gitBranchStats.js b/docs/integrate/api/_scripts/1.0/gitBranchStats.js new file mode 100644 index 00000000000..41dcce904d3 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitBranchStats.js @@ -0,0 +1,31 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + name: null, + baseVersionType: "Commit", + baseVersion: "67cae2b029dff7eb3dc062b49403aaedca5bad8d" + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/git/repositories/{repositoryId}/stats/branches', + function(context, result) { + context.name = result.responseBody.value[0].name; + }); + + apiwriter.getJson('/git/repositories/{repositoryId}/stats/branches/{name}'); + + apiwriter.getJson('/git/repositories/{repositoryId}/stats/branches/{name}?baseVersionType={baseVersionType}&baseVersion={baseVersion}'); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/gitCommitDiffs.js b/docs/integrate/api/_scripts/1.0/gitCommitDiffs.js new file mode 100644 index 00000000000..63c556c09e1 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitCommitDiffs.js @@ -0,0 +1,72 @@ +var apiwriter = require('apiwriter'); +var _ = require('underscore'); + +var preferredRepositoryName = 'Fabrikam-Fiber-Git'; + +exports.getContext = function() { + return { + projectName: null, + repositoryId: null, + repositoryName: null, + baseVersion: null, + baseVersionType: null, + targetVersion: null, + targetVersionType: null, + top: 2, + skip: 2 + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + // For purposes of documenting, look for the preferred repo (fabrikam-fiber-inc) + var repo = _.findWhere(result.responseBody.value, { "name": preferredRepositoryName }); + // If not found, default to first repo returned + if (_.isUndefined(repo)) { + repo = result.responseBody.value[0]; + } + + context.repositoryId = repo.id; + context.repositoryName = repo.name; + context.projectName = repo.project.name; + }); + + apiwriter.getJson('/git/repositories/{repositoryId}/refs/heads', + function(context, result) { + context.baseVersion = result.responseBody.value[0].name.substring(11); + context.targetVersion = result.responseBody.value[1].name.substring(11); + }); + + apiwriter.setEnableWrite(true); + + // by repo ID + apiwriter.getJson('/git/repositories/{repositoryId}/diffs/commits?targetVersion={targetVersion}&baseVersion={baseVersion}'); + + // by repo name + //apiwriter.getJson('/git/{projectName}/repositories/{repositoryName}/diffs/commits?targetVersion={targetVersion}&baseVersion={baseVersion}'); + + // In pages + apiwriter.getJson('/git/repositories/{repositoryId}/diffs/commits?targetVersion={targetVersion}&baseVersion={baseVersion}' + + '&$top={top}&$skip={skip}'); + + apiwriter.setEnableWrite(false); + + // For commit diffs + apiwriter.getJson('/git/repositories/{repositoryId}/commits', + function(context, result) { + // hard-coded for now. + context.baseVersion = 'c093714168cdd190c1e171a803e996d685454352'; + context.baseVersionType = 'commit'; + context.targetVersion = '2f271272a1548da5a6507b4a29f3af943094c6b4'; + context.targetVersionType = 'commit'; + }); + + apiwriter.setEnableWrite(true); + + //apiwriter.getJson('/git/repositories/{repositoryId}/diffs/commits?baseVersionType=commit&baseVersion=c093714168cdd190c1e171a803e996d685454352&targetVersionType=commit&targetVersion=2f271272a1548da5a6507b4a29f3af943094c6b4'); + apiwriter.getJson('/git/repositories/{repositoryId}/diffs/commits?baseVersionType={baseVersionType}&baseVersion={baseVersion}&targetVersionType={targetVersionType}&targetVersion={targetVersion}'); +} diff --git a/docs/integrate/api/_scripts/1.0/gitCommits.js b/docs/integrate/api/_scripts/1.0/gitCommits.js new file mode 100644 index 00000000000..67ed4702f4b --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitCommits.js @@ -0,0 +1,112 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + commitId: null, + repositoryId: null, + committer: null, + author: null, + fromDate: null, + toDate: null, + itemPath: "/MyWebSite/MyWebSite/Views/Home/_Home.cshtml", + repositoryName: null, + projectName: null, + pushId: null, + branch: "develop", + toBranch: "master", + skip: 1, + top: 2, + includeChanges: 5 + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + //get the first repository + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + context.repositoryName = result.responseBody.value[0].name; + context.projectName = result.responseBody.value[0].project.name; + }); + + apiwriter.setEnableWrite(true); + + //get the list of commits + apiwriter.getJson('/git/repositories/{repositoryId}/commits', + function(context, result) { + var firstCommit = result.responseBody.value.length - 1; + context.commitId = result.responseBody.value[firstCommit].commitId; + context.committer = result.responseBody.value[firstCommit].committer.name; + context.author = result.responseBody.value[firstCommit].author.name; + context.fromDate = result.responseBody.value[firstCommit].committer.date; + context.toDate = result.responseBody.value[firstCommit].committer.date; + }); + + //get a list of commits project repository Name + //apiwriter.getJson('/git/{projectName}/repositories/{repositoryName}/commits'); + + //get a filtered list of commits + apiwriter.getJson('/git/repositories/{repositoryId}/commits?user={committer}'); + apiwriter.getJson('/git/repositories/{repositoryId}/commits?committer={committer}'); + apiwriter.getJson('/git/repositories/{repositoryId}/commits?author={author}'); + apiwriter.getJson('/git/repositories/{repositoryId}/commits?fromDate={fromDate}&toDate={toDate}'); + + //paging example + apiwriter.getJson('/git/repositories/{repositoryId}/commits?$skip={skip}&$top={top}'); + + //get the details of the first commit + apiwriter.getJson('/git/repositories/{repositoryId}/commits/{commitId}?changeCount=10', + function(context, result) { + context.skip = result.responseBody.changes.length; + context.pushId = result.responseBody.push.pushId; + }); + + //get some more changes from the first commit + apiwriter.getJson('/git/repositories/{repositoryId}/commits/{commitId}/changes?top={top}&skip={skip}'); + + //single commit with path filter + apiwriter.getJson('/git/repositories/{repositoryId}/commits?itemPath={itemPath}'); + +/* TODO: Fix this when proper project-scoped routes are live (M73) + //single commit with friendly repository name + apiwriter.getJson('/git/{projectName}/repositories/{repositoryName}/commits/{commitId}'); */ + + //single commit + apiwriter.getJson('/git/repositories/{repositoryId}/commits/{commitId}'); + + //commits from a push + apiwriter.getJson('/git/repositories/{repositoryId}/pushes/{pushId}/commits'); + + //commits in a version + apiwriter.postJson('/git/repositories/{repositoryId}/commitsBatch', + function (context, result) { + return { + 'itemPath': context.itempath, + 'itemVersion': { + 'versionType': 'branch', + 'version': context.branch + } + } + } + ); + + //commits in a version + apiwriter.postJson('/git/repositories/{repositoryId}/commitsBatch', + function (context, result) { + return { + 'itemPath': context.itempath, + 'itemVersion': { + 'versionType': 'branch', + 'version': context.branch + }, + 'compareVersion': { + 'versionType': 'branch', + 'version': context.toBranch + } + } + } + ); +}; diff --git a/docs/integrate/api/_scripts/1.0/gitItems.js b/docs/integrate/api/_scripts/1.0/gitItems.js new file mode 100644 index 00000000000..036933ec88a --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitItems.js @@ -0,0 +1,109 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + itempath: null, + item_descriptors: null, + folderPath: "/MyWebSite/MyWebSite/Views", + filePath: "/MyWebSite/MyWebSite/Views/Home/_Home.cshtml" + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + //get the top level item and its immediate children including lastestProcessedChange + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={folderPath}&recursionLevel=OneLevel&latestProcessedChange=true', + function(context, result) { + //get path for more detailed GET request + context.itempath = result.responseBody.value[1].path; + //get descriptors for POST + context.item_descriptors = result.responseBody.value.map( + function(item) + { //construct descriptor array to use for post + return { + 'path': item.path, + 'version': item.commitId, + 'versionType': 'commit', + 'versionOptions': 'none', + 'recursionLevel': 'none' + } + }); + //add recursion to one of the tree items + var found = false; + for (var i = 0 ; i < context.item_descriptors.length ; i++) + { + if (result.responseBody.value[i].gitObjectType == "tree" && result.responseBody.value[i].path != "/") + { + context.item_descriptors[i].recursionLevel = 'OneLevel'; + break; + } + } + }); + + //items get, with specific path and metadata + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={itempath}&includeContentMetadata=true' + + '&version=master&versionType=branch'); + + apiwriter.setEnableWrite(true); + + //batch get, different items, recursion on one + apiwriter.postJson('/git/repositories/{repositoryId}/itemsBatch', + function(context, result) { + return {'itemDescriptors': context.item_descriptors, 'includeContentMetadata': 'true'} + } + ); + + //specific item (folder) + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={folderPath}'); + + //specific file + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={filePath}'); + + //downloadable file + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={filePath}&download=true'); + + //one level + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={folderPath}&recursionLevel=OneLevel'); + + //full + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={folderPath}&recursionLevel=Full&includeContentMetadata=true'); + + /* + //batch get, same item, different versions + apiwriter.postJson('/git/repositories/{repositoryId}/itemsBatch', + function(context, result) { + return { + 'itemDescriptors': [ + { + 'path': context.itempath, + 'version': 'master', + 'versionType': 'branch', + 'versionOptions': 'none', + }, + { + 'path': context.itempath, + 'version': 'master', + 'versionType': 'branch', + 'versionOptions': 'previousChange', + }, + { + 'path': context.itempath, + 'version': 'master', + 'versionType': 'branch', + 'versionOptions': 'firstParent', + } + + ] + } + } + ); + */ +} diff --git a/docs/integrate/api/_scripts/1.0/gitPullRequests.js b/docs/integrate/api/_scripts/1.0/gitPullRequests.js new file mode 100644 index 00000000000..5037b5b3ad9 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitPullRequests.js @@ -0,0 +1,104 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + pullRequestId: null, + repositoryId: null, + devBranchName: 'refs/heads/npaulk/feature', + masterBranchName: 'refs/heads/master', + initialReviewerId: '3b5f0c34-4aec-4bf4-8708-1d36f0dbc468', /* christie church on fabrikam-fiber-inc */ + initialReviewerUserName: 'fabrikamfiber1@hotmail.com', + initialReviewerPassword: process.env.cfgPassword, + additionalReviewerId: '19d9411e-9a34-45bb-b985-d24d9d87c0c9', /* johnny mcleaod */ + createdBy: null, + lastMergeSourceCommit: null, + top: null, + skip: null + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + //get the first repository + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + context.friendlyName = result.responseBody.value[0].name; + context.projectName = result.responseBody.value[0].project.name; + }); + + apiwriter.setEnableWrite(true); + + //create a pull request + apiwriter.postJson('/git/repositories/{repositoryId}/pullRequests', + function(context, result) { + return {"sourceRefName": context.devBranchName, "targetRefName": context.masterBranchName, "title": "New fix for hello world class", + "description": "Example pull request showing review and integration of a simple change.", + "reviewers": [ { "id": context.initialReviewerId } ] }; + }, + function(context, result) { + context.pullRequestId = result.responseBody.pullRequestId; + context.creatorId = result.responseBody.createdBy.Id; + context.lastMergeSourceCommit = result.responseBody.lastMergeSourceCommit; + } + ); + + //get the list of pull requests + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests'); + + //get the list of pull requests by target branch + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests?targetRefName=refs/heads/master'); + + //get a detailed pull request + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}'); + + //get reviewers + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers'); + + // add a reviewer + apiwriter.putJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{additionalReviewerId}', + function(context, result) { + return { "vote": 0 } + }, + function(context, result) { + } + ); + + //get a reviewers + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{additionalReviewerId}'); + + // delete a reviewer + apiwriter.deleteJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{additionalReviewerId}', null); + + // update a vote + apiwriter.putJsonEx('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{initialReviewerId}', + function(context, result) { + return { "vote": 10 }; + }, + function(context, options) { + //options.headers["Authentication"] = "Basic " + new Buffer(context.initialReviewerUserName + ":" + process.env.cfgPassword).toString('base64'); + options.auth.username = context.initialReviewerUserName; + }, + function(context, result) { + } + ); + + // approve/complete + apiwriter.patchJsonEx('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}', + function(context, result) { + return {"status":"completed", "lastMergeSourceCommit": context.lastMergeSourceCommit } + }, + function(context, options) { + //options.headers["Authentication"] = "Basic " + new Buffer(context.initialReviewerUserName + ":" + process.env.cfgPassword).toString('base64'); + options.auth.username = process.env.cfgUserName; + }, + function(context, result) { + } + ); + + //get the list of pull requests by status + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests?status=completed'); +}; + diff --git a/docs/integrate/api/_scripts/1.0/gitPushes.js b/docs/integrate/api/_scripts/1.0/gitPushes.js new file mode 100644 index 00000000000..9b365f91e62 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitPushes.js @@ -0,0 +1,63 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + pushId: null, + repositoryId: null, + repositoryName: null, + projectName: null, + fromDate: "2014-01-15", + toDate: "2014-02-01T14:00", + pusherId: null, + refName: 'refs/heads/develop', + skip: 2, + top: 2 + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + //get the first repository + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + context.repositoryName = result.responseBody.value[0].name; + context.projectName = result.responseBody.value[0].project.name; + }); + + apiwriter.setEnableWrite(true); + + //get the list of pushes + apiwriter.getJson('/git/repositories/{repositoryId}/pushes', + function(context, result) { + context.pushId = result.responseBody.value[0].pushId; + context.pusherId = result.responseBody.value[0].pushedBy.id; + }); + + //get the list of pushes using the repository name + //apiwriter.getJson('/git/{projectName}/repositories/{repositoryName}/pushes'); + + //get the details of the first push + apiwriter.getJson('/git/repositories/{repositoryId}/pushes/{pushId}'); + + // in a date range + apiwriter.getJson('/git/repositories/{repositoryId}/pushes?fromDate={fromDate}&toDate={toDate}'); + + // in a page + apiwriter.getJson('/git/repositories/{repositoryId}/pushes?$skip={skip}&$top={top}'); + + // by pusher + apiwriter.getJson('/git/repositories/{repositoryId}/pushes?pusherId={pusherId}'); + + // for a particular ref name + apiwriter.getJson('/git/repositories/{repositoryId}/pushes?refName={refName}&includeRefUpdates=true'); + + //get the first push using the repository name + //apiwriter.getJson('/git/repositories/{repositoryId}/pushes/{pushId}'); + + //get the refs that were updated for the first push + apiwriter.getJson('/git/repositories/{repositoryId}/pushes/{pushId}?includeRefUpdates=true'); + +}; diff --git a/docs/integrate/api/_scripts/1.0/gitRefs.js b/docs/integrate/api/_scripts/1.0/gitRefs.js new file mode 100644 index 00000000000..836e5f01a17 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitRefs.js @@ -0,0 +1,54 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + filter: null, + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + // Get all refs + apiwriter.getJson('/git/repositories/{repositoryId}/refs', + function(context, result) { + context.filter = result.responseBody.value[0].name.substring(5); + }); + + // Get all branches + apiwriter.getJson('/git/repositories/{repositoryId}/refs/heads'); + + // Get all tags + apiwriter.getJson('/git/repositories/{repositoryId}/refs/tags'); + + // Modify some refs + apiwriter.postJson('/git/repositories/{repositoryId}/refs', + function(context, result){ + return [ + { + "name": "refs/heads/live", + "oldObjectId": "0000000000000000000000000000000000000000", + "newObjectId": "4b223e9c93ec3b6aaa6499f06e3ebb7c702e6106" + }, + { + "name": "refs/heads/master", + "oldObjectId": "4b223e9c93ec3b6aaa6499f06e3ebb7c702e6106", + "newObjectId": "7b019e53c7980d7fafcbd84aa71946793d10a881" + }, + { + "name": "refs/heads/fabrikamfiber16", + "oldObjectId": "4b223e9c93ec3b6aaa6499f06e3ebb7c702e6106", + "newObjectId": "0000000000000000000000000000000000000000" + } + ]; + }); +} diff --git a/docs/integrate/api/_scripts/1.0/gitRepositories.js b/docs/integrate/api/_scripts/1.0/gitRepositories.js new file mode 100644 index 00000000000..60817a43140 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitRepositories.js @@ -0,0 +1,53 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + repositoryName: null, + projectId: this.getConfig().getProjectId() + }; +}; + +var _getProj = function (context) { + return { + "id": context.projectId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + // Create a repository + apiwriter.postJson('/git/repositories', + function(context, result) { + return { "name": "AnotherRepository", "project": _getProj(context) } + }, + function(context, result) { + context.repositoryId = result.responseBody.id; + context.repositoryName = result.responseBody.name; + } + ); + + // Get details about the new repository + apiwriter.getJson('/git/repositories/{repositoryId}'); + +// apiwriter.getJson('/git/{projectId}/repositories/{repositoryName}'); + + // Get a list of repositories + apiwriter.getJson('/git/repositories'); + + /*apiwriter.getJson('/git/{projectId}/repositories', + function (context, result) { + context.projName = result.responseBody.value[0].project.name; + });*/ + + // Update a repository + apiwriter.patchJson('/git/repositories/{repositoryId}', + function(context, result) { + return {"name": "RenamedRepository"} + } + ); + + // Delete a repository + apiwriter.deleteJson('/git/repositories/{repositoryId}', null); +} diff --git a/docs/integrate/api/_scripts/1.0/gitTrees.js b/docs/integrate/api/_scripts/1.0/gitTrees.js new file mode 100644 index 00000000000..d9ccc367694 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/gitTrees.js @@ -0,0 +1,40 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + objectId: null, + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + //find a tree under the root and get its sha1 + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath=/MyWebSite/MyWebSite/Views', + function(context, result) { + //get items from request + var items = result.responseBody.value; + //pick the first non-root tree + for (var i = 0 ; i < items.length ; i++) + { + if (items[i].gitObjectType == "tree" && items[i].path != "/") + { + context.objectId = items[i].objectId; + break; + } + } + }); + + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/git/repositories/{repositoryId}/trees/{objectId}'); + + apiwriter.getJson('/git/repositories/{repositoryId}/trees/{objectId}?recursive=true'); +} diff --git a/docs/integrate/api/_scripts/1.0/hooks.js b/docs/integrate/api/_scripts/1.0/hooks.js new file mode 100644 index 00000000000..27027dc9b1a --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/hooks.js @@ -0,0 +1,126 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + consumerId: null, + publisherId: null, + eventTypeId: null, + consumerActionId: null, + newSubscriptionId: null, + newSubscription: null + }; +}; + +exports.submitRequests = function() +{ + + apiwriter.getJson('/hooks/consumers', + function(context, result) { + context.consumerId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/consumers/{consumerId}'); + + apiwriter.getJson('/hooks/consumers/{consumerId}/actions', + function(context, result) { + context.consumerActionId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/consumers/{consumerId}/actions/{consumerActionId}'); + + apiwriter.getJson('/hooks/publishers', + function(context, result) { + context.publisherId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/publishers/{publisherId}/eventTypes', + function(context, result) { + context.eventTypeId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/publishers/{publisherId}/eventTypes/{eventTypeId}'); + + + apiwriter.getJson('/hooks/subscriptions/', + function(context, result) { + context.subscriptionId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/subscriptions/{subscriptionId}'); + + // Create dummy web hook subscription + apiwriter.postJson('/hooks/subscriptions', + function(context, result) { + return { + "publisherId": "tfs", + "eventType": "build.complete", + "resourceVersion": "1.0-preview.1", + "consumerId": "webHooks", + "consumerActionId": "httpRequest", + "publisherInputs": { + "buildStatus": "Failed", + "definitionName": "MyWebSite CI", + "projectId": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + }, + "consumerInputs": { + "url": "https://myservice/myhookeventreceiver" + } + } + }, + function(context, result) { + context.newSubscriptionId = result.responseBody.id; + context.newSubscription = result.responseBody; + } + ); + + // update the dummy subscription + apiwriter.putJson('/hooks/subscriptions/{newSubscriptionId}', + function(context, result) { + context.newSubscription.consumerInputs.url = "https://myservice/newreceiver" + return context.newSubscription; + } + ); + + // delete the dummy subscription + apiwriter.deleteJson('/hooks/subscriptions/{newSubscriptionId}', null); + + + + /*apiwriter.postJson('/git/repositories', + function(context, result) { + return { "name": "newCreatedRepo1", "project": _getProj(context) } + }, + function(context, result) { + context.repoId = result.responseBody.id; + } + ); + + apiwriter.getJson('/git/repositories/{repoId}'); + + apiwriter.postJson('/git/repositories', + function(context, result) { + return { "name": "newCreatedRepo2", "project": _getProj(context) } + }, + function(context, result) { + context.created2Id = result.responseBody.id; + } + ); + + apiwriter.patchJson('/git/repositories/{repoId}', + function(context, result) { + return {"name": "renamedRepo"} + } + ); + + apiwriter.getJson('/git/repositories'); + apiwriter.getJson('/git/{projId}/repositories', + function(context, result) { + context.projName = result.responseBody.value[0].project.name; + }); + + apiwriter.deleteJson('/git/repositories/{repoId}', null); + + apiwriter.setEnableWrite(false); + apiwriter.deleteJson('/git/repositories/{created2Id}', null); + apiwriter.setEnableWrite(true);*/ +} diff --git a/docs/integrate/api/_scripts/1.0/identityMru.js b/docs/integrate/api/_scripts/1.0/identityMru.js new file mode 100644 index 00000000000..fef78c6cdb3 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/identityMru.js @@ -0,0 +1,59 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + projectId: null, + userId: null + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(false); + + // get the project ID + apiwriter.getJson('/projects', + function (context, result) { + context.projectId = result.responseBody.value[0].id; + } + ); + + // Get the current user ID + apiwriter.getJson('/connectionData', + function (context, result) { + context.userId = result.responseBody.authenticatedUser.id; + } + ); + + apiwriter.setEnableWrite(true); + + // get the initial list of identities in the MRU + apiwriter.getJson('/core/identityMru/{projectId}'); + + // Add current user to MRU + apiwriter.postJson('/core/identityMru/{projectId}', + function(context,result) { + return { + "identityIds": [ + context.userId + ] + } + } + ); + + // get the updated list of identities in the MRU + apiwriter.getJson('/core/identityMru/{projectId}'); + + // Remove current user from MRU + apiwriter.deleteJson('/core/identityMru/{projectId}', + function (context, result) { + return { + "identityIds": [ + context.userId + ] + } + } + ); + + // get the updated list of identities in the MRU + apiwriter.getJson('/core/identityMru/{projectId}'); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/operations.js b/docs/integrate/api/_scripts/1.0/operations.js new file mode 100644 index 00000000000..4040846d2a9 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/operations.js @@ -0,0 +1,35 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + skip: 1, + top: 1, + state: "All" + }; +}; + +exports.submitRequests = function () { + + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/projects', + function(context, result) { + context.projectId = result.responseBody.value[0].id; + context.projectName = result.responseBody.value[0].name; + } + ); + + apiwriter.patchJson('/projects/{projectId}', + function(context, result) { + return {"description": ""} + }, + function(context, result) { + context.operationId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/operations/{operationId}'); + +} diff --git a/docs/integrate/api/_scripts/1.0/policyConfigurations.js b/docs/integrate/api/_scripts/1.0/policyConfigurations.js new file mode 100644 index 00000000000..6649c136b45 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/policyConfigurations.js @@ -0,0 +1,172 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + "requiredReviewerPolicyId": "fd2167ab-b0be-447a-8ec8-39368250530e", + "approvalCountPolicyId": "fa4e907d-c16b-4a4c-9dfa-4906e5d171dd", + "buildPolicyId": "0609b952-1397-4640-95ec-e00a01b2c241", + + + "identity1": process.env.identity1, + "identity2": process.env.identity2, + "identity3": process.env.identity3, + + "top": 1, + "skip": 1 + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + apiwriter.getJson('/git/repositories', + function(context, result) + { + context.repositoryId = result.responseBody.value[0].id; + } + ); + + apiwriter.postJson('/build/definitions?api-version=2.0-preview.2', + { + // this is a rather incomplete build defininition, but we only need a valid ID, not a valid definition + "name":"PolicyAPIDocsExample", + "documentQuality":"definition" + }, + function(context, result) + { + context.buildDefinitionId = result.responseBody.id + } + ); + + apiwriter.setEnableWrite(true); + apiwriter.postJson('/policy/configurations', + function(context, options) { + return { + isEnabled: true, + isBlocking: true, + type: { id: context.requiredReviewerPolicyId }, + settings: { + requiredReviewerIds: [context.identity1], + optionalReviewerIds: [context.identity2], + filenamePatterns: ['*/API*.cs'], + addedFilesOnly: false, + scope: [ + { + repositoryId: null, + refName: 'refs/heads/master', + matchKind: 'exact' + }, + { + repositoryId: null, + refName: 'refs/heads/releases/', + matchKind: 'prefix' + } + ] + } + } + }, + function(context, result) + { + context.configurationId = result.responseBody.id; + context.configurationRevision = result.responseBody.revision + } + ); + + apiwriter.putJson('/policy/configurations/{configurationId}', + function(context, options) { + return { + isEnabled: true, + isBlocking: true, + type: { id: context.requiredReviewerPolicyId }, + settings: { + requiredReviewerIds: [context.identity1, context.identity2], + optionalReviewerIds: [context.identity3], + filenamePatterns: ['*/API*.cs', 'sql/tables/*'], + addedFilesOnly: false, + scope: [ + { + repositoryId: null, + refName: 'refs/heads/master', + matchKind: 'exact' + }, + { + repositoryId: null, + refName: 'refs/heads/releases/', + matchKind: 'prefix' + }, + { + repositoryId: context.repositoryId, + refName: 'refs/heads/adventureworks', + matchKind: 'exact' + } + ] + } + } + } + ); + + apiwriter.postJson('/policy/configurations', + function(context, options) { + return { + isEnabled: true, + isBlocking: false, + type: { id: context.approvalCountPolicyId }, + settings: { + minimumApproverCount: 1, + creatorVoteCounts: false, + scope: [ + { + repositoryId: null, + refName: 'refs/heads/master', + matchKind: 'exact' + } + ] + } + } + }, + function(context, result) + { + context.countConfigurationId = result.responseBody.id; + } + ); + + apiwriter.postJson('/policy/configurations', + function(context, options) { + return { + isEnabled: true, + isBlocking: false, + type: { id: context.buildPolicyId }, + settings: { + buildDefinitionId: context.buildDefinitionId, + scope: [ + { + repositoryId: null, + refName: 'refs/heads/features/', + matchKind: 'prefix' + } + ] + } + } + }, + function(context, result) + { + context.buildConfigurationId = result.responseBody.id; + } + ); + + apiwriter.getJson('/policy/configurations/{configurationId}'); + apiwriter.getJson('/policy/configurations/{configurationId}/revisions'); + apiwriter.getJson('/policy/configurations'); + apiwriter.getJson('/policy/configurations?$top={top}&$skip={skip}'); + apiwriter.getJson('/policy/configurations/{configurationId}/revisions?$top={top}&$skip={skip}'); + apiwriter.getJson('/policy/configurations/{configurationId}/revisions/{configurationRevision}'); + + apiwriter.deleteJson('/policy/configurations/{configurationId}', null) + + apiwriter.setEnableWrite(false); + + // clean up + apiwriter.deleteJson('/policy/configurations/{buildConfigurationId}', null); + apiwriter.deleteJson('/policy/configurations/{countConfigurationId}', null); + apiwriter.deleteJson('/build/definitions/{buildDefinitionId}?api-version=2.0-preview.2', null); +} diff --git a/docs/integrate/api/_scripts/1.0/policyEvaluations.js b/docs/integrate/api/_scripts/1.0/policyEvaluations.js new file mode 100644 index 00000000000..431749edc38 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/policyEvaluations.js @@ -0,0 +1,97 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + "requiredReviewerPolicyId": "fd2167ab-b0be-447a-8ec8-39368250530e", + "approverCountPolicyId": "FA4E907D-C16B-4A4C-9DFA-4906E5D171DD", + + "identity1": process.env.identity1, + "identity2": process.env.identity2, + "identity3": process.env.identity3, + + // should probably detect these + "top": 1, + "skip": 1 + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) + { + context.repositoryId = result.responseBody.value[0].id; + context.projectId = result.responseBody.value[0].project.id; + } + ); + + apiwriter.getJson('/git/repositories/{repositoryId}/refs/heads', + function(context, result) + { + result.responseBody.value.forEach(function(item) + { + if(item.name !== "refs/heads/master") + { + context.sourceRefName = item.name; + } + }); + } + ); + + apiwriter.postJson('/policy/configurations', + function(context, options) { + return { + type: {id: context.approverCountPolicyId}, + isEnabled: true, + isBlocking: true, + settings: { + minimumApproverCount: 1, + scope: [{ + repositoryId: context.repositoryId, + refName: "refs/heads/master", + matchKind: "exact" + }] + } + } + }, + function(context, result) + { + context.policyId = result.responseBody.id; + context.policyRevision = result.responseBody.revision; + } + ); + + apiwriter.postJson('/git/repositories/{repositoryId}/pullrequests', + function(context, options) + { + return { + sourceRefName: context.sourceRefName, + targetRefName: "refs/heads/master", + title: "demo pull request", + description: "demo pull request", + reviewers: [] + } + }, + function(context, result) + { + context.pullRequestId = result.responseBody.pullRequestId; + context.artifactId = 'vstfs:///CodeReview/CodeReviewId/' + context.projectId + '%2f' + context.pullRequestId; + } + ); + + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/policy/configurations/{policyId}/evaluations'); + apiwriter.getJson('/policy/configurations/{policyId}/evaluations?$top={top}&$skip={skip}'); + + apiwriter.getJson('/policy/configurations/{policyId}/revisions/{policyRevision}/evaluations'); + apiwriter.getJson('/policy/configurations/{policyId}/revisions/{policyRevision}/evaluations?$top={top}&$skip={skip}'); + + apiwriter.getJson('/policy/evaluations?artifactId={artifactId}'); + + apiwriter.setEnableWrite(false); + apiwriter.patchJson('/git/repositories/{repositoryId}/pullrequests/{pullRequestId}', {status: "Abandoned"}); + apiwriter.deleteJson('/policy/configurations/{policyId}', null); +} diff --git a/docs/integrate/api/_scripts/1.0/policyTypes.js b/docs/integrate/api/_scripts/1.0/policyTypes.js new file mode 100644 index 00000000000..688ca2906f3 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/policyTypes.js @@ -0,0 +1,19 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + apiwriter.getJson('/policy/types', + function(context, result) + { + context.policyId = result.responseBody.value[0].id; + } + ); + + apiwriter.getJson('/policy/types/{policyId}'); +} diff --git a/docs/integrate/api/_scripts/1.0/processes.js b/docs/integrate/api/_scripts/1.0/processes.js new file mode 100644 index 00000000000..167ade1694f --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/processes.js @@ -0,0 +1,19 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/processes', + function(context, result) { + context.processId = result.responseBody.value[0].id; + } + ); + + // By ID + apiwriter.getJson('/processes/{processId}'); +} diff --git a/docs/integrate/api/_scripts/1.0/profiles.js b/docs/integrate/api/_scripts/1.0/profiles.js new file mode 100644 index 00000000000..2767f305a69 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/profiles.js @@ -0,0 +1,18 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // Get profile + apiwriter.getJson('/profile/profiles/me'); + + // Get profile avatar + apiwriter.getJson('/profile/profiles/me/avatar'); + + +}; diff --git a/docs/integrate/api/_scripts/1.0/projectCollections.js b/docs/integrate/api/_scripts/1.0/projectCollections.js new file mode 100644 index 00000000000..7d6f4512a94 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/projectCollections.js @@ -0,0 +1,25 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + skip: 1, + top: 2 + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/projectCollections', + function(context, result) { + context.collectionId = result.responseBody.value[0].id; + } + ); + + // specific collection + apiwriter.getJson('/projectCollections/{collectionId}'); + + // pages + apiwriter.getJson('/projectCollections/{collectionId}?$top={top}&$skip={skip}'); + +} diff --git a/docs/integrate/api/_scripts/1.0/projects.js b/docs/integrate/api/_scripts/1.0/projects.js new file mode 100644 index 00000000000..8501742e205 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/projects.js @@ -0,0 +1,71 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + skip: 1, + top: 1, + state: "All" + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/projects', + function(context, result) { + context.projectId = result.responseBody.value[0].id; + context.projectName = result.responseBody.value[0].name; + } + ); + + // By name + apiwriter.getJson('/projects/{projectName}'); + + // pages + apiwriter.getJson('/projects?$top={top}&$skip={skip}'); + + // state filter + apiwriter.getJson('/projects?stateFilter={state}'); + + // Without capabilities + apiwriter.getJson('/projects/{projectName}?includeCapabilities=true'); + + + apiwriter.patchJson('/projects/{projectId}', + function(context, result) { + return {"description": "Team Foundation Version Control projects."} + } + ); + + //update description + apiwriter.patchJson('/projects/{projectId}', + function(context, result) { + return {"description": "Team Foundation Version Control projects."} + } + ); + + //update name + apiwriter.patchJson('/projects/{projectId}', + function(context, result) { + return {"name": "Fabrikam-Fiber"} + } + ); + + // Create a project + apiwriter.postJson('/projects', + function(context, result) { + return { + "name": "FabrikamTravel", + "description": "Frabrikam travel app for Windows Phone", + "capabilities": { + "versioncontrol": { + "sourceControlType": "Git" + }, + "processTemplate": { + "templateTypeId": "6b724908-ef14-45cf-84f8-768b5384da45" + } + } + } + } + ); +} diff --git a/docs/integrate/api/_scripts/1.0/reporting.js b/docs/integrate/api/_scripts/1.0/reporting.js new file mode 100644 index 00000000000..342a0133554 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/reporting.js @@ -0,0 +1,179 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + projectName: null, + scope: "WorkitemTracking.Queries", + myQueriesGuid: null, + queryId: null, + snapshotConfig: null, + pivotConfig: null, + trendConfig: null, + snapshotChartId: null, + trendChartId: null, + pivotChartId: null + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(false); + + // Get the current project + apiwriter.getJson('/projects', + function (context, result) { + context.projectName = result.responseBody.value[10].name; //Should be project 0 + } + ); + + apiwriter.getJson('/wit/{projectName}/queries', + function (context, result) { + context.myQueriesGuid = result.responseBody.value[0].id; + } + ); + + // Create a query + apiwriter.postJson('/wit/{projectName}/queries', + function (context, result) { + return { + "name": "Active tasks", + "parentId": context.myQueriesGuid, + "wiql": "Select [System.Id], [System.Title], [System.State], [System.AssignedTo], [Microsoft.VSTS.Scheduling.RemainingWork] From WorkItems Where [System.WorkItemType] = 'Task' AND ([System.State] = 'Active' OR [System.State] = 'In Progress') order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" + } + }, + function (context, result) { + context.queryId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/Reporting/DataServiceCapabilities/{scope}') + + // Create a snapshot bar chart + apiwriter.postJson('/Reporting/ChartConfiguration', + function (context, result) { + return { + "scope": context.scope, + "groupKey": context.queryId, + "title": "Bar by state", + "chartType": "BarChart", + "transformOptions": { + "filter": context.queryId, + "groupBy": "System.State", + "orderBy": { + "direction": "ascending", + "propertyName": "value" + }, + "measure": { + "aggregation": "count", + "propertyName": "" + }, + }, + "userColors": null + } + }, + function (context, result) { + context.snapshotConfig = result.responseBody.chartConfiguration; + context.snapshotChartId = result.responseBody.chartConfiguration.chartId; + } + ); + + // Create a snapshot pivot table + apiwriter.postJson('/Reporting/ChartConfiguration', + function (context, result) { + return { + "scope": context.scope, + "groupKey": context.queryId, + "title": "Pivot by state and assigned to", + "chartType": "PivotTable", + "transformOptions": { + "filter": context.queryId, + "groupBy": "System.State", + "series": "System.AssignedTo", + "orderBy": { + "direction": "ascending", + "propertyName": "value" + }, + "measure": { + "aggregation": "count", + "propertyName": "" + }, + }, + "userColors": null + } + }, + function (context, result) { + context.pivotConfig = result.responseBody.chartConfiguration; + context.pivotChartId = result.responseBody.chartConfiguration.chartId; + } + ); + + // Create a trend stack area chart + apiwriter.postJson('/Reporting/ChartConfiguration', + function (context, result) { + return { + "scope": context.scope, + "groupKey": context.queryId, + "title": "Remaining work over time", + "chartType": "StackAreaChart", + "transformOptions": { + "filter": context.queryId, + "groupBy": "System.State", + "historyRange": "last7Days", + "orderBy": { + "direction": "descending", + "propertyName": "value" + }, + "measure": { + "aggregation": "sum", + "propertyName": "Microsoft.VSTS.Scheduling.RemainingWork" + }, + }, + "userColors": null + } + }, + function (context, result) { + context.trendConfig = result.responseBody.chartConfiguration; + context.trendChartId = result.responseBody.chartConfiguration.chartId; + } + ); + + apiwriter.getJson('/Reporting/ChartConfiguration/{snapshotChartId}'); + + apiwriter.putJson('/Reporting/ChartConfiguration/{snapshotChartId}', + function (context, result) { + context.snapshotConfig.userColors = [{ "value": "In Progress", "backgroundColor": "#005F31" }]; + return context.snapshotConfig; + } + ); + + // Enumerate all existing ChartConfigurations + apiwriter.getJson('/Reporting/ChartConfiguration?scope={scope}&groupkey={queryId}'); + + apiwriter.postJson('/Reporting/TransformQuery', + function (context, result) { + context.snapshotConfig.transformOptions.filterContext = { project: context.projectName }; + return [context.snapshotConfig.transformOptions]; + } + ); + + apiwriter.postJson('/Reporting/TransformQuery', + function (context, result) { + context.trendConfig.transformOptions.filterContext = { project: context.projectName }; + return [context.trendConfig.transformOptions]; + } + ); + + apiwriter.postJson('/Reporting/TransformQuery', + function (context, result) { + context.pivotConfig.transformOptions.filterContext = { project: context.projectName }; + return [context.pivotConfig.transformOptions]; + } + ); + + // Cleanup + apiwriter.deleteJson('/Reporting/ChartConfiguration/{pivotChartId}', null); + apiwriter.deleteJson('/Reporting/ChartConfiguration/{snapshotChartId}', null); + apiwriter.deleteJson('/Reporting/ChartConfiguration/{trendChartId}', null); + apiwriter.deleteJson('/wit/{projectName}/queries/{queryId}', null); +}; diff --git a/docs/integrate/api/_scripts/1.0/securityaces.js b/docs/integrate/api/_scripts/1.0/securityaces.js new file mode 100644 index 00000000000..9c8da21489d --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/securityaces.js @@ -0,0 +1,89 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + securityNamespaceId : null, + token : "newToken", + descriptor1 : "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-1", + descriptor2 : "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-2" + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + // Get the first security namespace + apiwriter.getJson('/securitynamespaces/00000000-0000-0000-0000-000000000000/', + function(context, result) { + context.securityNamespaceId = result.responseBody.value[0].namespaceId; + } + ); + + // Add an ACL + apiwriter.postJson('/accesscontrollists/{securityNamespaceId}/', + function(context, result) { + return { + "value": [ + { + "inheritPermissions" : false, + "token" : context.token, + "acesDictionary" : { + "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-1" : { + "descriptor": context.descriptor1, + "allow": 5, + "deny": 0 + }, + "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-2" : { + "descriptor" : context.descriptor2, + "allow" : 5, + "deny" : 0 + } + } + } + ] + } + } + ); + + apiwriter.setEnableWrite(true); + + // Update an existing ace with merge + apiwriter.postJson('/accesscontrolentries/{securityNamespaceId}/', + function(context, result) { + return { + "token" : context.token, + "merge" : false, + "accessControlEntries" : [ + { + "descriptor" : context.descriptor1, + "allow" : 8, + "deny" : 0, + "extendedinfo" : {} + } + ] + } + } + ); + + // Update an existing ace without merge + apiwriter.postJson('/accesscontrolentries/{securityNamespaceId}/', + function(context, result) { + return { + "token" : context.token, + "merge" : true, + "accessControlEntries" : [ + { + "descriptor" : context.descriptor2, + "allow" : 8, + "deny" : 0, + "extendedinfo" : {} + } + ] + } + } + ); + + // Remove descriptor2 ace + apiwriter.deleteJson('/accesscontrolentries/{securityNamespaceId}/?token={token}&descriptors={descriptor1},{descriptor2}', null); +}; diff --git a/docs/integrate/api/_scripts/1.0/securityacls.js b/docs/integrate/api/_scripts/1.0/securityacls.js new file mode 100644 index 00000000000..adc69559783 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/securityacls.js @@ -0,0 +1,89 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + securityNamespaceId : null, + newToken1 : "token1", + newToken2 : "token2", + descriptor1 : "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-1", + descriptor2 : "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-2", + existingToken : "1ba198c0-7a12-46ed-a96b-f4e77554c6d4", + }; +}; + +var getDescriptors = function(acesDictionary) { + var descriptors = new Array(); + for (var ace in acesDictionary) { + descriptors.push(ace); + } + return descriptors.join(); +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + // Get the first security namespace + apiwriter.getJson('/securitynamespaces/00000000-0000-0000-0000-000000000000/', + function(context, result) { + context.securityNamespaceId = result.responseBody.value[0].namespaceId; + } + ); + + apiwriter.setEnableWrite(true); + + // Add ACLs + apiwriter.postJson('/accesscontrollists/{securityNamespaceId}/', + function(context, result) { + return { + "value": [ + { + "inheritPermissions" : false, + "token" : context.newToken1, + "acesDictionary" : { + "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-1" : { + "descriptor" : context.descriptor1, + "allow" : 31, + "deny" : 0 + } + } + }, + { + "inheritPermissions" : false, + "token" : context.newToken2, + "acesDictionary" : { + "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-1" : { + "descriptor": context.descriptor1, + "allow": 1, + "deny": 0 + }, + "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-2" : { + "descriptor" : context.descriptor2, + "allow" : 8, + "deny" : 0 + } + } + } + ] + } + } + ); + + // Get all acls + apiwriter.getJson('/accesscontrollists/{securityNamespaceId}/'); + + // Filter by token + apiwriter.getJson('/accesscontrollists/{securityNamespaceId}/?token={existingToken}'); + + // Filter by identity descriptors + apiwriter.getJson('/accesscontrollists/{securityNamespaceId}/?descriptors={descriptor1}'); + + // Include extendedinfo + apiwriter.getJson('/accesscontrollists/{securityNamespaceId}/?token={existingToken}&includeExtendedInfo=True'); + + // Include child acls + apiwriter.getJson('/accesscontrollists/{securityNamespaceId}/?token={existingToken}&includeExtendedInfo=False&recurse=True'); + + // Remove acls + apiwriter.deleteJson('/accesscontrollists/{securityNamespaceId}/?tokens={newToken1},{newToken2}&recurse=False', null); +}; diff --git a/docs/integrate/api/_scripts/1.0/securitynamespaces.js b/docs/integrate/api/_scripts/1.0/securitynamespaces.js new file mode 100644 index 00000000000..9272d8bbd1f --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/securitynamespaces.js @@ -0,0 +1,71 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + securityNamespaceId : null, + token : null, + orginalInheritValue : null + }; +}; + +var DEFAULT_MAX = 10; + +var limitResult = function(result, max) { + try { + if (result.responseBody.value && result.responseBody.value.length > max) { + result.responseBody.value = result.responseBody.value.slice(0, max); + result.responseBody.count = max; + } + } catch (e) { } +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // Get the first security namespace + apiwriter.getJson('/securitynamespaces/00000000-0000-0000-0000-000000000000/', + function(context, result) { + limitResult(result, DEFAULT_MAX); + + context.securityNamespaceId = result.responseBody.value[0].namespaceId; + } + ); + + apiwriter.setEnableWrite(false); + + // Get the first acl token in the securitynamespace above + apiwriter.getJson('/accesscontrollists/{securityNamespaceId}/', + function(context, result) { + context.token = result.responseBody.value[0].token; + context.orginalInheritValue = result.responseBody.value[0].inheritPermissions; + } + ); + + apiwriter.setEnableWrite(true); + + // Get securitynamespace by namespaceId + apiwriter.getJson('/securitynamespaces/{securityNamespaceId}/'); + + // Set inherit flag + apiwriter.postJson('/securitynamespaces/{securityNamespaceId}/', + function(context, result) { + return { + "token": context.token, + "inherit" : false + } + } + ); + + // Reset to original state + apiwriter.setEnableWrite(false); + + apiwriter.postJson('/securitynamespaces/{securityNamespaceId}/', + function(context, result) { + return { + "token": context.token, + "inherit" : context.orginalInheritValue + } + } + ); +}; diff --git a/docs/integrate/api/_scripts/1.0/securitypermissions.js b/docs/integrate/api/_scripts/1.0/securitypermissions.js new file mode 100644 index 00000000000..94f88ea9372 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/securitypermissions.js @@ -0,0 +1,108 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + securityNamespaceId : null, + token1 : "token1", + token2 : "token2", + token3 : "token3", + descriptor : "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-1", + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + // Get the first security namespace + apiwriter.getJson('/securitynamespaces/00000000-0000-0000-0000-000000000000/', + function(context, result) { + context.securityNamespaceId = result.responseBody.value[0].namespaceId; + } + ); + + // Add an ACL + apiwriter.postJson('/accesscontrollists/{securityNamespaceId}/', + function(context, result) { + return { + "value": [ + { + "inheritPermissions" : false, + "token" : context.token1, + "acesDictionary" : { + "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-1" : { + "descriptor": context.descriptor, + "allow": 5, + "deny": 0 + } + } + }, + { + "inheritPermissions" : false, + "token" : context.token2, + "acesDictionary" : { + "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-1" : { + "descriptor": context.descriptor, + "allow": 1, + "deny": 0 + } + } + }, + { + "inheritPermissions" : false, + "token" : context.token3, + "acesDictionary" : { + "Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-1" : { + "descriptor": context.descriptor, + "allow": 15, + "deny": 0 + } + } + } + ] + } + } + ); + + apiwriter.setEnableWrite(true); + + // singular permission check + apiwriter.getJson('/permissions/{securityNamespaceId}/8/?token={token1}&alwaysAllowAdministrators=False'); + + apiwriter.getJson('/permissions/{securityNamespaceId}/8/?token={token1}&alwaysAllowAdministrators=True'); + + // plural permission checks + apiwriter.getJson('/permissions/{securityNamespaceId}/8/?api-version=2.2&tokens={token1},{token2},{token3}&alwaysAllowAdministrators=False'); + + // batch permission checks + apiwriter.postJson('/security/permissionevaluationbatch/?api-version=3.0-preview', + function(context, result) { + return { + "alwaysallowadministrators" : false, + "evaluations" : [ + { + "securitynamespaceid" : context.securityNamespaceId, + "token" : context.token1, + "permissions" : 8 + }, + { + "securitynamespaceid" : context.securityNamespaceId, + "token" : context.token2, + "permissions" : 8 + }, + { + "securitynamespaceid" : context.securityNamespaceId, + "token" : context.token3, + "permissions" : 8 + } + ] + } + } + ); + + apiwriter.deleteJson('/permissions/{securityNamespaceId}/4/?token={token1}&descriptor={descriptor}', null); + + apiwriter.setEnableWrite(false); + + apiwriter.deleteJson('/accesscontrollists/{securityNamespaceId}/?tokens={token1},{token2},{token3}&recurse=False', null); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/taggingTags.js b/docs/integrate/api/_scripts/1.0/taggingTags.js new file mode 100644 index 00000000000..badd975f33f --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/taggingTags.js @@ -0,0 +1,52 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + scopeId: this.getConfig().getProjectId(), + tagId: null, + name: null + }; +}; + +exports.submitRequests = function() { + + /*apiwriter.setEnableWrite(false); + + //get the project name + apiwriter.getJson('/projects', + function(context, result) { + context.scopeId = result.responseBody.value[1].id; //Should be project 0 + } + ); + + apiwriter.setEnableWrite(true);*/ + + // Create a new tag + apiwriter.postJson('/tagging/scopes/{scopeId}/tags', + { name: "My Tag" }, + function (context, result) { + context.tagId = result.responseBody.id; + context.name = result.responseBody.name; + } + ); + + // Get the created tag by ID + apiwriter.getJson('/tagging/scopes/{scopeId}/tags/{tagId}'); + + // Get the created tag by name + apiwriter.getJson('/tagging/scopes/{scopeId}/tags/{name}'); + + // Patch the tag + apiwriter.patchJson('/tagging/scopes/{scopeId}/tags/{tagId}', + { name: "My Tag Renamed", active: false } + ); + + // Get full list of tags + apiwriter.getJson('/tagging/scopes/{scopeId}/tags'); + + // Get the list of tags in the scope + apiwriter.getJson('/tagging/scopes/{scopeId}/tags?includeInactive=true'); + + // Delete the tag + apiwriter.deleteJson('/tagging/scopes/{scopeId}/tags/{tagId}', null); +}; diff --git a/docs/integrate/api/_scripts/1.0/teamMembers.js b/docs/integrate/api/_scripts/1.0/teamMembers.js new file mode 100644 index 00000000000..50aa7b47b26 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/teamMembers.js @@ -0,0 +1,27 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return {}; +}; + +exports.submitRequests = function () { + + apiwriter.getJson('/projects/', + function(context, result) { + context.projectId = result.responseBody.value[0].id; + } + ); + + // all teams + apiwriter.getJson('/projects/{projectId}/teams', + function(context, result) { + context.teamId = result.responseBody.value[0].id; + } + ); + + apiwriter.setEnableWrite(true); + + // specific team members + apiwriter.getJson('/projects/{projectId}/teams/{teamId}/members'); + +} diff --git a/docs/integrate/api/_scripts/1.0/teams.js b/docs/integrate/api/_scripts/1.0/teams.js new file mode 100644 index 00000000000..dd4ff1f854e --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/teams.js @@ -0,0 +1,42 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + top: 1, + skip: 1 + }; +}; + +exports.submitRequests = function () { + + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/projects/', + function(context, result) { + context.projectId = result.responseBody.value[0].id; + } + ); + + + apiwriter.setEnableWrite(true); + + // all teams + apiwriter.getJson('/projects/{projectId}/teams', + function(context, result) { + context.teamId = result.responseBody.value[0].id; + } + ); + + // all teams in pages + apiwriter.getJson('/projects/{projectId}/teams?$top={top}&$skip={skip}'); + + // specific team + apiwriter.getJson('/projects/{projectId}/teams/{teamId}'); + + // team members + apiwriter.getJson('/projects/{projectId}/teams/{teamId}/members/'); + + // team members in pages + apiwriter.getJson('/projects/{projectId}/teams/{teamId}/members/?$top={top}&$skip={skip}'); + +} diff --git a/docs/integrate/api/_scripts/1.0/testPlans.js b/docs/integrate/api/_scripts/1.0/testPlans.js new file mode 100644 index 00000000000..aabf66408a8 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/testPlans.js @@ -0,0 +1,104 @@ +var apiwriter = require('apiwriter'); + +/* + * Notes for this script + * + * Because these APIs are project-scoped, the value for cfgApisUrl should be project-scoped, for example: + * + * set cfgApisUrl=https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/Fabrikam-Fiber-TFVC/_apis + * +*/ + +exports.getContext = function() { + return { + planId: null + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //get all test plans + apiwriter.getJson('/test/plans', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + + //get all test plans (with details) + apiwriter.getJson('/test/plans?includePlanDetails=true', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + + //get just active plans + apiwriter.getJson('/test/plans?filterActivePlans=true', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + + //get top 3 + apiwriter.getJson('/test/plans?$top=3', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + + //get a specific test plan + apiwriter.getJson('/test/plans/{planId}'); + + //create a test plan + apiwriter.postJson('/test/plans', + function(context, result) { + return { "name": "New Test Plan" } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //create a test plan (with description) + apiwriter.postJson('/test/plans', + function(context, result) { + return { "name": "New Test Plan 2", "description": "Here is a description for my new test plan." } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //create a test plan (with start and end dates) + apiwriter.postJson('/test/plans', + function(context, result) { + return { "name": "New Test Plan 3", "description": "Here is a description for my new test plan.", "startDate": "2014-10-25","endDate": "2014-11-14" } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //create a test plan (in an area and iteration) + apiwriter.postJson('/test/plans', + function(context, result) { + return { "name": "New Test Plan 4", "area": { + "name": "Fabrikam-Fiber-TFVC\\Quality assurance" + }, + "iteration": "Fabrikam-Fiber-TFVC\\Release 1" } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //update a test plan (name) + apiwriter.patchJson('/test/plans/{planId}', + function(context, result) { + return { "name": "Renamed New Test Plan 4" } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //delete a test plan + apiwriter.deleteJson('/test/plans/{planId}', null); +} diff --git a/docs/integrate/api/_scripts/1.0/testPoints.js b/docs/integrate/api/_scripts/1.0/testPoints.js new file mode 100644 index 00000000000..309e0f48abe --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/testPoints.js @@ -0,0 +1,87 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + planId: "1", + suiteId: "1", + projectName:"fabrikam-fiber-tfvc", + testerName:"Jamal Hartnett", + pointId: null, + created2Id: null, + projId: this.getConfig().getProjectId(), + fields: "System.Title,System.Reason", + configuration: "Windows 8", + testcaseId: "39", + testpointIds: "1,2", + top: "1", + skip: "1" + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //get all test points + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points', + function (context, result) { + context.pointId = result.responseBody.value[0].id; + }); + + // with work item fields + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?witFields={fields}'); + + // by configuration + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?configuration={configuration}'); + + // by test case + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?testcaseid={testcaseId}'); + + // specific points + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?testPointIds={testpointIds}'); + + // with details + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?includePointDetails=true'); + + // a page at a time + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?$skip={skip}&$top={top}'); + + //get a particular test point + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}'); + + // with fields + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}?witFields={fields}'); + + // reset test points to active + apiwriter.patchJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}', + function (context, result) { + return { + "resetToActive": "true" + } + }); + + //update test points outcome + apiwriter.patchJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}', + function(context, result) { + return { + "outcome":"Passed" + } + }); + + //update test points -set tester + apiwriter.patchJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}', + function(context, result) { + return { + "tester": { + "displayName" : context.testerName + } + } + }); +} diff --git a/docs/integrate/api/_scripts/1.0/testResults.js b/docs/integrate/api/_scripts/1.0/testResults.js new file mode 100644 index 00000000000..bf684ea78f7 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/testResults.js @@ -0,0 +1,48 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + projectName: "fabrikam-fiber-tfvc", + runId: "4", + planId: null, + created2Id: null, + projId: this.getConfig().getProjectId() + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + /* + apiwriter.setEnableWrite(false); + + //get a runId + apiwriter.getJson('/test/{projectName}/runs?includeRunDetails=true', + function(context, result) { + context.runId = result.responseBody.value[0].id; + }); + */ + + apiwriter.setEnableWrite(true); + + //get all test results + apiwriter.getJson('/test/runs/{runId}/results'); + + //get a test case result + apiwriter.getJson('/test/runs/{runId}/results/100000'); + + //get a list of iteration results + apiwriter.getJson('/test/runs/{runId}/results/100000/iterations'); + + //get a list of action results + apiwriter.getJson('/test/runs/{runId}/results/100000/iterations/1/actionresults'); + + //get a list of parameter results + apiwriter.getJson('/test/runs/{runId}/results/100000/iterations/1/parameterresults'); +} diff --git a/docs/integrate/api/_scripts/1.0/testRuns.js b/docs/integrate/api/_scripts/1.0/testRuns.js new file mode 100644 index 00000000000..58e1813e1ed --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/testRuns.js @@ -0,0 +1,73 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + projectName:"fabrikam-fiber-tfvc", + planId: "1", + runId: null, + created2Id: null, + pointIds: new Array(), + projId: this.getConfig().getProjectId() + }; +}; + + +exports.populateArray = function (context) { + context.pointIds.push(1); + return{ + pointIds : context.pointIds + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + + apiwriter.setEnableWrite(true); + + //get all test runs + apiwriter.getJson('/test/runs?includeRunDetails=true', + function(context, result) { + context.runId = result.responseBody.value[0].id; + }); + + //get a test run + apiwriter.getJson('/test/runs/{runId}'); + + //get test run statistics + apiwriter.getJson('/test/runs/{runId}/statistics'); + + //create a new test run + apiwriter.postJson('/test/runs', + function(context, result) { + return { + "name": "NewTestRun", + "plan": { + "id": context.planId + }, + 'pointIds': exports.populateArray(context).pointIds + } + }, + function(context, result) { + context.newRunId = result.responseBody.id; + } + ); + + //update test run + apiwriter.patchJson('/test/runs/{runId}', + function(context, result) { + return { + "name": "NewTestRun2", + "comment": "This test run is doomed" + } + }); + + //delete test run + apiwriter.deleteJson('/test/runs/{newRunId}', null); +} diff --git a/docs/integrate/api/_scripts/1.0/testSessions.js b/docs/integrate/api/_scripts/1.0/testSessions.js new file mode 100644 index 00000000000..4bc65a2f648 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/testSessions.js @@ -0,0 +1,57 @@ +var apiwriter = require('apiwriter'); + +/* + * Notes for this script + * + * Because these APIs are team-scoped, the value for cfgApisUrl should be team-scoped, for example: + * + * set cfgApisUrl=https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/Fabrikam-Fiber-TFVC/Fabrikam-Fiber-TFVC Team/_apis + * +*/ + +exports.getContext = function() { + return { + sessionId: null + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //get all test sessions + apiwriter.getJson('/test/session', + function(context, result) { + + }); + + + + //create a test session + apiwriter.postJson('/test/session', + function(context, result) { + return { + "Title": "Sample TestSession", + "Area": {"Name": "Agile"}, } + }, + function(context, result) { + context.sessionId = result.responseBody.Id; + }); + + //update a test session (state) + apiwriter.patchJson('/test/session', + function(context, result) { + return { + "Title": "Sample TestSession", + "Area": {"Name": "Agile"}, + "id":4, + "Comment":"Test session comment", + "State":4, + + "Revision":1} + }, + function(context, result) { + context.sessionId = result.responseBody.Id; + } + ); +} diff --git a/docs/integrate/api/_scripts/1.0/testSuiteEntries.js b/docs/integrate/api/_scripts/1.0/testSuiteEntries.js new file mode 100644 index 00000000000..72b0b505eb2 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/testSuiteEntries.js @@ -0,0 +1,28 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + suiteId: 339 + } +} + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + // get suite entries + apiwriter.getJson('/test/suiteentry/{suiteId}', + function (context, result) { + }); + + // reorder suite entries + apiwriter.patchJson('/test/suiteentry/{suiteId}', + function (context, result) { + return [ + { "sequenceNumber": 2, "testCaseId": 401, "childSuiteId": 0 }, + { "sequenceNumber": 0, "testCaseId": 402, "childSuiteId": 0 }, + { "sequenceNumber": 1, "testCaseId": 341, "childSuiteId": 0 } + ]; + }, + function (context, result) { + }); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/testSuites.js b/docs/integrate/api/_scripts/1.0/testSuites.js new file mode 100644 index 00000000000..4bb7e135653 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/testSuites.js @@ -0,0 +1,150 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + projectName: "fabrikam-fiber-tfvc", + planId: "1", + suiteId: "1", + staticSuiteId: "8", + testcaseId: "39", + created2Id: null, + projId: this.getConfig().getProjectId(), + requirementIds : new Array() + }; +}; + + +exports.populateArray = function (context) { + context.requirementIds.push(41); + return { + requirementIds : context.requirementIds + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ +/* +// go find the projName without writing + apiwriter.setEnableWrite(false); + + //get the project name + apiwriter.getJson('/projects', + function(context, result) { + context.projectName = result.responseBody.value[0].name; + } + ); + */ + //get all test plans + /*apiwriter.getJson('/test/{projectName}/plans', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + */ + //apiwriter.setEnableWrite(true); + + /* + //get all test suites + apiwriter.getJson('/test/plans/{planId}/suites', + function(context, result) { + context.suiteId = result.responseBody.value[0].id; + }); + + //get a test suite + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}'); + + //adding test cases to suite + apiwriter.postJson('/test/plans/{planId}/suites/{suiteId}/testcases/39,40', + function(context,result) { + return { + + } + }); + + + //get all test cases of a suite + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/testcases', + function(context, result) { + context.testcaseId = result.responseBody.value[0].id; + }); + + //get a test case within a suite + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/testcases/{testcaseId}'); + + //create a static test suite + apiwriter.postJson('/test/plans/{planId}/suites/{suiteId}', + function(context, result) { + return { + "suiteType": "StaticTestSuite", + "name": "NewTestSuite" + } + }, + function(context, result) { + context.staticSuiteId = result.responseBody.id; + } + ); + + //renaming a test suite + apiwriter.patchJson('/test/plans/{planId}/suites/{staticSuiteId}', + function(context, result) { + return { + "name": "RenamedTestSuite" + } + }); + + //create a dynamic test suite + apiwriter.postJson('/test/plans/{planId}/suites/{suiteId}', + function(context, result) { + return { + "suiteType": "DynamicTestSuite", + "name": "AllTestCases", + "queryString": "SELECT [System.Id],[System.WorkItemType],[System.Title],[Microsoft.VSTS.Common.Priority],[System.AssignedTo],[System.AreaPath] FROM WorkItems WHERE [System.WorkItemType] IN GROUP 'Microsoft.TestCaseCategory'" + }, + function(context, result) { + context.suiteId = result.responseBody.id; + } + + + }); + */ + + /* + //creating requirement based suite + apiwriter.postJson('/test/{projectName}/plans/{planId}/suites/{suiteId}', + function(context, result) { + return { + "suiteType": "RequirementTestSuite", + "requirementIds": exports.populateArray(context).requirementIds + } + } + ); */ + + /* + //moving a test suite + apiwriter.patchJson('/test/plans/{planId}/suites/{suiteId}', + function(context, result) { + return { + "parent": { + 'id': context.staticSuiteId + } + } + }); + + //deleting a test suite + apiwriter.deleteJson('/test/plans/{planId}/suites/{staticSuiteId}', null); + + //removing test cases from suite + apiwriter.deleteJson('/test/plans/1/suites/{suiteId}/testcases/39', null); + */ + + apiwriter.setEnableWrite(true); + + //deleting test case + apiwriter.deleteJson('/test/testcase/5', null); +} diff --git a/docs/integrate/api/_scripts/1.0/tfvcBranches.js b/docs/integrate/api/_scripts/1.0/tfvcBranches.js new file mode 100644 index 00000000000..e8357988511 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/tfvcBranches.js @@ -0,0 +1,47 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + path: "$/Fabrikam-Fiber-TFVC/AuthSample-Dev", + special: "$/Fabrikam-Fiber-TFVC/AuthSample+Special", + deleted: "$/Fabrikam-Fiber-TFVC/MyBranch" + }; +}; + + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + // specific branch + apiwriter.getJson('/tfvc/branches/{path}'); + + // specific branch and children + apiwriter.getJson('/tfvc/branches/{path}?includeChildren=true'); + + // specific branch and parent + apiwriter.getJson('/tfvc/branches/{path}?includeParent=true'); + + // specific deleted branch + apiwriter.getJson('/tfvc/branches/{deleted}?includeDeleted=true'); + + // branch with special characters + // apiwriter.getJson('/tfvc/branches?path={special}'); + + // all "root" branches + apiwriter.getJson('/tfvc/branches'); + + // all branches + apiwriter.getJson('/tfvc/branches' + '?includeChildren=true'); + + // get root branches, including deleted + apiwriter.getJson('/tfvc/branches' + '?includeDeleted=true'); + + /* + // --- by path --- + // specific folder + apiwriter.getJson('/tfvc/branches' + '?scopePath=' + '$/Project Number Two/'); + + // all below root, including deleted + apiwriter.getJson('/tfvc/branches' + '?scopePath=$/&includeDeleted=true'); + */ +} diff --git a/docs/integrate/api/_scripts/1.0/tfvcChangesets.js b/docs/integrate/api/_scripts/1.0/tfvcChangesets.js new file mode 100644 index 00000000000..2b2fc45808e --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/tfvcChangesets.js @@ -0,0 +1,71 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + id: null, + top: 2, + skip: 2, + from: 2, + to: 5, + fromDate: '01-01-2014', + toDate: '03-18-2014-2:00PM', + author: "fabrikamfiber3@hotmail.com", + path: "$/Fabrikam-Fiber-TFVC/AuthSample/AuthSample/Program.cs", + order: "id asc", + commentLength: 10, + id_array : new Array() + }; +}; + +exports.populateArray = function (context) { + context.id_array.push(1); + context.id_array.push(3); + context.id_array.push(6); + return{ + id_array : context.id_array + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/tfvc/changesets?$top={top}&$skip={skip}', + function (context, result) { + context.id = result.responseBody.value[0].changesetId; + }); + + apiwriter.getJson('/tfvc/changesets'); + + apiwriter.getJson('/tfvc/changesets?maxCommentLength={commentLength}'); + + apiwriter.getJson('/tfvc/changesets?$orderBy={order}'); + + apiwriter.getJson('/tfvc/changesets?searchCriteria.itemPath={path}'); + +// apiwriter.getJson('/tfvc/changesets?searchCriteria.includeSourceRenames=false'); + + apiwriter.getJson('/tfvc/changesets?fromDate={fromDate}&toDate={toDate}'); + + apiwriter.getJson('/tfvc/changesets?fromId={from}&toId={to}'); + + apiwriter.getJson('/tfvc/changesets?searchcriteria.author={author}'); + + apiwriter.getJson('/tfvc/changesets/{id}'); + + apiwriter.getJson('/tfvc/changesets/{id}?includeDetails=true'); + + apiwriter.getJson('/tfvc/changesets/{id}?includeWorkItems=true'); + + apiwriter.getJson('/tfvc/changesets/{id}?maxChangeCount=All'); + +// apiwriter.getJson('/tfvc/changesets/{id}?includeSourceRename=false'); + + apiwriter.getJson('/tfvc/changesets/{id}/changes'); + + apiwriter.getJson('/tfvc/changesets/{id}/workitems'); + + apiwriter.postJson('/tfvc/changesetsBatch', function (context, result) { + return { 'changesetIds': exports.populateArray(context).id_array, 'commentLength': 90 } + } + ); +} diff --git a/docs/integrate/api/_scripts/1.0/tfvcItems.js b/docs/integrate/api/_scripts/1.0/tfvcItems.js new file mode 100644 index 00000000000..35823efddad --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/tfvcItems.js @@ -0,0 +1,47 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + itempath: null, + itemDescriptors: [ + { + path: "$/Fabrikam-Fiber-TFVC/AuthSample/AuthSample/Program.cs", + version: 5, + versionType: "changeset" + }, + { + path: "$/Fabrikam-Fiber-TFVC/AuthSample", + recursionLevel: "Full" + } + ], + version: null, + folder: "$/Fabrikam-Fiber-TFVC/AuthSample", + recursionLevel: "OneLevel" + }; +}; + + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/tfvc/items?scopePath={folder}&recursionLevel={recursionLevel}', + function (context, result) { + context.itempath = result.responseBody.value[1].path; + context.version = result.responseBody.value[1].version; + context.item_array = result.responseBody.value.map( + function (item) { + return { + 'path': item.path + } + }); + }); + + apiwriter.getJson('/tfvc/items?scopePath={folder}'); + + apiwriter.getJson('/tfvc/items/{itempath}?versionType=Changeset' + '&version={version}'); + + apiwriter.postJson('/tfvc/itemBatch', function (context, result) { + return { 'itemDescriptors': context.itemDescriptors } + }); + +} diff --git a/docs/integrate/api/_scripts/1.0/tfvcLabels.js b/docs/integrate/api/_scripts/1.0/tfvcLabels.js new file mode 100644 index 00000000000..6423ae53f95 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/tfvcLabels.js @@ -0,0 +1,38 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + labelId: null, + name: "Th*Label", + person: "fabrikamfiber3@hotmail.com", + item: "$/Fabrikam-Fiber-TFVC/AuthSample-Dev/Code/AuthSample.cs", + skip: 2, + top: 2 + }; +}; + +exports.submitRequests = function () +{ + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/tfvc/labels', + function (context, result) { + context.labelId = result.responseBody.value[1].id; + }); + + apiwriter.getJson('/tfvc/labels?name={name}'); + + apiwriter.getJson('/tfvc/labels?owner={person}'); + + apiwriter.getJson('/tfvc/labels?itemLabelFilter={item}'); + + apiwriter.getJson('/tfvc/labels?$skip={skip}&$top={top}'); + + apiwriter.getJson('/tfvc/labels/{labelId}'); + + apiwriter.getJson('/tfvc/labels/{labelId}?maxItemCount=100'); + + apiwriter.getJson('/tfvc/labels/{labelId}/items'); + + apiwriter.getJson('/tfvc/labels/{labelId}/items?$top={top}&$skip={skip}'); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/tfvcShelvesets.js b/docs/integrate/api/_scripts/1.0/tfvcShelvesets.js new file mode 100644 index 00000000000..a5d301c1a83 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/tfvcShelvesets.js @@ -0,0 +1,43 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + owner: "Normal Paulk", + shelvesetId: null, + maxCommentLength: 6, + top: 2, + skip: 2 + }; +}; + +exports.submitRequests = function () +{ + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/tfvc/shelvesets', + function(context, result) { + context.shelvesetId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/tfvc/shelvesets?owner={owner}'); + + apiwriter.getJson('/tfvc/shelvesets?maxCommentLength={maxCommentLength}'); + + apiwriter.getJson('/tfvc/shelvesets?$top={top}&$skip={skip}'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}?includeDetails=true'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}?includeWorkItems=true'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}?maxChangeCount=100'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}?maxCommentLength={maxCommentLength}'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}/changes'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}/changes?$top={top}&$skip={skip}'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}/workitems'); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/tfvcWorkspaces.js b/docs/integrate/api/_scripts/1.0/tfvcWorkspaces.js new file mode 100644 index 00000000000..f242d61ecd7 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/tfvcWorkspaces.js @@ -0,0 +1,64 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + ownerName: null, + computerName: null, + permissionsFilter: null, + id: null, + item_array: null + }; +}; + + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + // ex 1 query all workspaces + apiwriter.getJson('/tfvc/workspaces', + function (context, result) { + context.id = result.responseBody.value[0].id; + }); + + // ex1 get workspace + apiwriter.getJson('/tfvc/workspaces/{id}', + function (context, result) + { + context.computerName = result.responseBody.computerName; + context.permissionsFilter = "Use"; + context.item_array = result.responseBody.folderMappings.map + ( + function (folderMapping) + { + return { + 'path': folderMapping.localItem, //.replace("\\", "\\") + 'recursionLevel': 'OneLevel' + } + } + ); + } + ); + + + + //ex 2 workspaces on computer can use + apiwriter.getJson('/tfvc/workspaces?computerName={computerName}&permissionsFilter={permissionsFilter}'); + + //ex 1 get pending changes + apiwriter.getJson('/tfvc/workspaces/{id}/pendingChanges'); + + //ex 1 get pending changes batch + apiwriter.postJson('/tfvc/workspaces/{id}/pendingChangesBatch', + function (context, result) + { + return { 'itemSpecifiers': [ { "path": "$/SomeProject/ConsoleApplicationOne-deletedBranch-subBranch/" } ] } + } + ); + + //ex 1 get local versions + apiwriter.postJson('/tfvc/workspaces/{id}/localVersions', function (context, result) { + return { 'itemSpecifiers': context.item_array } + } + ); + +} diff --git a/docs/integrate/api/_scripts/1.0/witAttachments.js b/docs/integrate/api/_scripts/1.0/witAttachments.js new file mode 100644 index 00000000000..594029144a9 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/witAttachments.js @@ -0,0 +1,85 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + textFile: "textAsFileAttachment.txt", + binaryFile: "imageAsFileAttachment.png" + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(false); + + base64ToBytes = function (input) { + var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var bytes = (input.length / 4) * 3; + var arrayBuffer = new ArrayBuffer(bytes); + + //get last chars to see if are valid + var lkey1 = keyStr.indexOf(input.charAt(input.length - 1)); + var lkey2 = keyStr.indexOf(input.charAt(input.length - 2)); + + var bytes = (input.length / 4) * 3; + if (lkey1 == 64) bytes--; //padding chars, so skip + if (lkey2 == 64) bytes--; //padding chars, so skip + + var uarray; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + var j = 0; + + if (arrayBuffer) + uarray = new Uint8Array(arrayBuffer); + else + uarray = new Uint8Array(bytes); + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + for (i = 0; i < bytes; i += 3) { + //get the 3 octects in 4 ascii chars + enc1 = keyStr.indexOf(input.charAt(j++)); + enc2 = keyStr.indexOf(input.charAt(j++)); + enc3 = keyStr.indexOf(input.charAt(j++)); + enc4 = keyStr.indexOf(input.charAt(j++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + uarray[i] = chr1; + if (enc3 != 64) uarray[i + 1] = chr2; + if (enc4 != 64) uarray[i + 2] = chr3; + } + + return uarray; + }; + + var imgBase64 = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP7cxBCsAgDERR739pG/CnGJI0FopQ8O2cjNP6R85QbeNQU7wT1dkijaQ3vkZoWElaoTeJojW01cYh0jwfgiFBV/lEjOZtacijN/nLkOBHhIaVDgn+Wdycp6FXzlCl9wt0Y0cAzHo/zgAAAABJRU5ErkJggg=="; + var imgBinary = base64ToBytes(imgBase64); + + apiwriter.setEnableWrite(true); + + // Upload text as a text file attachment + apiwriter.postJsonEx('/wit/attachments?fileName={textFile}', + "User text content to upload", + collectionScopeUrl, + null, + true + ); + + // Upload image as a file attachment + apiwriter.postJsonEx('/wit/attachments?fileName={binaryFile}', + imgBinary, + collectionScopeUrl, + null, + true + ); +}; + +collectionScopeUrl = function (context, options) { + options.url = url.resolve(options.url + "/", '../../_apis'); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/witBatch.js b/docs/integrate/api/_scripts/1.0/witBatch.js new file mode 100644 index 00000000000..bfb9cf99a5b --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/witBatch.js @@ -0,0 +1,125 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +//PreReq: There must be a project called "Fabrikam-Fiber-Git" + +parseBodyForId = function (body) { + //Body of form "{\"id\":269,\"rev\":1,\"fields\":{\"System.AreaPath\":\"Fabrikam-Fiber-Git\"...... + var parsedBody = JSON.parse(body); + return parsedBody.id; +} + +exports.getContext = function() { + return { + projectName: "Fabrikam-Fiber-Git", + apiVersion: "1.0", + PBIId: null, + taskId: null + }; +}; + +exports.submitRequests = function() { + apiwriter.setEnableWrite(true); + + // Create two work items and link them together + apiwriter.postJsonEx('/wit/$batch', + function (context, result) { + return [ + { + "method": "PATCH", + "uri": "/" + context.projectName + "/_apis/wit/workItems/$Product Backlog Item?api-version=" + context.apiVersion, + "headers": { + "Content-Type": "application/json-patch+json" + }, + "body": [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Customer can sign in using their Microsoft Account" + }, + { + "op": "add", + "path": "/id", + "value": "-1" + } + ] + }, + { + "method": "PATCH", + "uri": "/" + context.projectName + "/_apis/wit/workItems/$Task?api-version=" + context.apiVersion, + "headers": { + "Content-Type": "application/json-patch+json" + }, + "body": [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "JavaScript implementation for Microsoft Account" + }, + { + "op": "add", + "path": "/id", + "value": "-2" + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Hierarchy-Reverse", + "url": options.url + "/wit/workItems/-1" + } + } + ] + } + ] + }, + collectionScopeUrl, + function (context, result) { + context.PBIId = parseBodyForId(result.responseBody.value[0].body); + context.taskId = parseBodyForId(result.responseBody.value[1].body); + } + ); + + // Bulk edit the states of two work items == Cleanup + apiwriter.postJsonEx('/wit/$batch', + function (context, result) { + return [ + { + "method": "PATCH", + "uri": "/_apis/wit/workItems/" + context.taskId + "?api-version=" + context.apiVersion, + "headers": { + "Content-Type": "application/json-patch+json" + }, + "body": [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + }, + { + "method": "PATCH", + "uri": "/_apis/wit/workItems/" + context.PBIId + "?api-version=" + context.apiVersion, + "headers": { + "Content-Type": "application/json-patch+json" + }, + "body": [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + } + ] + }, + collectionScopeUrl + ); +}; + +collectionScopeUrl = function (context, options) { + options.url = url.resolve(options.url + "/", '../../_apis'); +}; diff --git a/docs/integrate/api/_scripts/1.0/witChangeProjectAndType.js b/docs/integrate/api/_scripts/1.0/witChangeProjectAndType.js new file mode 100644 index 00000000000..fd3d864bb71 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/witChangeProjectAndType.js @@ -0,0 +1,234 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +//PreReq: There must be a project called "Fabrikam-Scrum" + +exports.getContext = function () { + return { + apiVersion: "1.0", + targetProjectName: "Fabrikam-Scrum", + targetAreaPath: "Fabrikam-Scrum", + targetIterationPath: "Fabrikam-Scrum", + targetWorkItemTypeName: "Task", + targetWorkItemInitialState: "To Do" + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + apiwriter.getJson('/wit/workitems/$Task'); + + // Create bug 1 + apiwriter.patchJsonEx('/wit/workitems/$Bug', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "First bug" + } + ] + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.bug1Id = result.responseBody.id; + } + ); + + // Create bug 2 + apiwriter.patchJsonEx('/wit/workitems/$Bug', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Second bug" + } + ] + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.bug2Id = result.responseBody.id; + } + ); + + // Create bug 3 + apiwriter.patchJsonEx('/wit/workitems/$Bug', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Third bug" + } + ] + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.bug3Id = result.responseBody.id; + } + ); + + // Change project name (move) + apiwriter.patchJsonEx('/wit/workitems/{bug1Id}', + function(context, result) { + return [ + { + "op": "add", + "path": "/fields/System.TeamProject", + "value": context.targetProjectName + }, + { + "op": "add", + "path": "/fields/System.AreaPath", + "value": context.targetAreaPath + }, + { + "op": "add", + "path": "/fields/System.IterationPath", + "value": context.targetIterationPath + } + ] + }, + collectionScopePatchUrl + ); + + // Change work item type + apiwriter.patchJsonEx('/wit/workitems/{bug1Id}', + function(context, result) { + return [ + { + "op": "add", + "path": "/fields/System.WorkItemType", + "value": context.targetWorkItemTypeName + }, + { + "op": "add", + "path": "/fields/System.State", + "value": context.targetWorkItemInitialState + } + ] + }, + collectionScopePatchUrl + ); + + // Change project name of two work items to Fabrikam-Scrum + apiwriter.postJsonEx('/wit/$batch', + function (context, result) { + return [ + { + "method": "PATCH", + "uri": "/_apis/wit/workItems/" + context.bug2Id + "?api-version=" + context.apiVersion, + "headers": { + "Content-Type": "application/json-patch+json" + }, + "body": [ + { + "op": "add", + "path": "/fields/System.TeamProject", + "value": context.targetProjectName + }, + { + "op": "add", + "path": "/fields/System.AreaPath", + "value": context.targetAreaPath + }, + { + "op": "add", + "path": "/fields/System.IterationPath", + "value": context.targetIterationPath + } + ] + }, + { + "method": "PATCH", + "uri": "/_apis/wit/workItems/" + context.bug3Id + "?api-version=" + context.apiVersion, + "headers": { + "Content-Type": "application/json-patch+json" + }, + "body": [ + { + "op": "add", + "path": "/fields/System.TeamProject", + "value": context.targetProjectName + }, + { + "op": "add", + "path": "/fields/System.AreaPath", + "value": context.targetAreaPath + }, + { + "op": "add", + "path": "/fields/System.IterationPath", + "value": context.targetIterationPath + } + ] + } + ] + }, + collectionScopeUrl + ); + + // Change work item type of two work items to Task + apiwriter.postJsonEx('/wit/$batch', + function (context, result) { + return [ + { + "method": "PATCH", + "uri": "/_apis/wit/workItems/" + context.bug2Id + "?api-version=" + context.apiVersion, + "headers": { + "Content-Type": "application/json-patch+json" + }, + "body": [ + { + "op": "add", + "path": "/fields/System.WorkItemType", + "value": context.targetWorkItemTypeName + }, + { + "op": "add", + "path": "/fields/System.State", + "value": context.targetWorkItemInitialState + } + ] + }, + { + "method": "PATCH", + "uri": "/_apis/wit/workItems/" + context.bug3Id + "?api-version=" + context.apiVersion, + "headers": { + "Content-Type": "application/json-patch+json" + }, + "body": [ + { + "op": "add", + "path": "/fields/System.WorkItemType", + "value": context.targetWorkItemTypeName + }, + { + "op": "add", + "path": "/fields/System.State", + "value": context.targetWorkItemInitialState + } + ] + } + ] + }, + collectionScopeUrl + ); +} + +collectionScopeUrl = function (context, options) { + options.url = url.resolve(options.url + "/", '../../_apis'); +}; + +collectionScopePatchUrl = function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json"; + collectionScopeUrl(context, options); +} + diff --git a/docs/integrate/api/_scripts/1.0/witMetadata.js b/docs/integrate/api/_scripts/1.0/witMetadata.js new file mode 100644 index 00000000000..da089494ea6 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/witMetadata.js @@ -0,0 +1,185 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + projectName: "Fabrikam-Fiber-Git", + fieldName: "System.IterationPath", + rootIterationId: null, + rootAreaId: null, + iterationPath: "Final Iteration", + iterationPathNew: "Ultimate iteration", + iterationParent: "Parent Iteration", + iterationId: null, + areaPath: "Web", + areaPathNew: "Website team", + areaParent: "Parent Area", + areaId: null, + relationName: "System.LinkTypes.Related", + categoryName: "Microsoft.RequirementCategory", + }; +}; + +exports.submitRequests = function () { + + // Get all wit fields + apiwriter.getJsonEx('/wit/fields', collectionScopeUrl); + + // Get a specfic wit field + apiwriter.getJsonEx('/wit/fields/{fieldName}', collectionScopeUrl); + + // Get all work item types + apiwriter.getJson('/wit/workItemTypes'); + + // Get a specific work item type + apiwriter.getJson('/wit/workItemTypes/Bug'); + + // Get all work item type categories + apiwriter.getJson('/wit/workItemTypeCategories'); + + // Get a specific work item type category + apiwriter.getJson('/wit/workItemTypeCategories/{categoryName}'); + + // Get the areas + apiwriter.getJson('/wit/classificationNodes/areas', + function (context, result) { + context.rootAreaId = result.responseBody.id; + } + ); + + // Get the areas with children + apiwriter.getJson('/wit/classificationNodes/areas?$depth=2'); + + // Get the iterations + apiwriter.getJson('/wit/classificationNodes/iterations', + function (context, result) { + context.rootIterationId = result.responseBody.id; + } + ); + + // Get the iterations with children + apiwriter.getJson('/wit/classificationNodes/iterations?$depth=2'); + + // Create areas/iterations to move under + apiwriter.setEnableWrite(false); + + apiwriter.postJson('/wit/classificationNodes/areas', + function (context, result) { + return { + "name": context.areaParent + } + } + ) + + apiwriter.postJson('/wit/classificationNodes/iterations', + function (context, result) { + return { + "name": context.iterationParent + } + } + ) + + apiwriter.setEnableWrite(true); + + // Create new area + apiwriter.postJson('/wit/classificationNodes/areas', + function (context, result) { + return { + "name": context.areaPath + } + }, + function (context, result) { + context.areaId = result.responseBody.id; + } + ); + + // Get a specific area + apiwriter.getJson('/wit/classificationNodes/areas/{areaPath}'); + + // Rename area path + apiwriter.patchJson('/wit/classificationNodes/areas/{areaPath}', + function (context, result) { + return { + "name": context.areaPathNew + } + } + ); + + // Move area + apiwriter.postJson('/wit/classificationNodes/areas/{areaParent}', + function (context, result) { + return { + "id": context.areaId + } + } + ); + + // Create new iteration with dates + apiwriter.postJson('/wit/classificationNodes/iterations', + function (context, result) { + return { + "name": context.iterationPath, + "attributes": { + "startDate": "2014-10-27T00:00:00Z", + "finishDate": "2014-10-31T00:00:00Z" + } + } + }, + function (context, result) { + context.iterationId = result.responseBody.id; + } + ); + + // Get a specific iteration + apiwriter.getJson('/wit/classificationNodes/iterations/{iterationPath}'); + + // Rename iteration path + apiwriter.patchJson('/wit/classificationNodes/iterations/{iterationPath}', + function (context, result) { + return { + "name": context.iterationPathNew + } + } + ); + + // Update dates on iteration + apiwriter.patchJson('/wit/classificationNodes/iterations/{iterationPathNew}', + function (context, result) { + return { + "attributes": { + "startDate": "2015-01-26T00:00:00Z", + "finishDate": "2015-01-30T00:00:00Z" + } + } + } + ); + + // Move iteration + apiwriter.postJson('/wit/classificationNodes/iterations/{iterationParent}', + function (context, result) { + return { + "id": context.iterationId + } + } + ); + + // Delete areas + //apiwriter.deleteJson('/wit/classificationNodes/areas/{areaPathNew}?$reclassifyId={rootAreaId}', null); + apiwriter.deleteJson('/wit/classificationNodes/areas/{areaParent}?$reclassifyId={rootAreaId}', null); + + // Delete iterations + //apiwriter.deleteJson('/wit/classificationNodes/iterations/{iterationPathNew}?$reclassifyId={rootIterationId}', null); + apiwriter.deleteJson('/wit/classificationNodes/iterations/{iterationParent}?$reclassifyId={rootIterationId}', null); + + // Get the link types + apiwriter.getJsonEx('/wit/workitemrelationtypes', collectionScopeUrl); + + // Get a specific link types + apiwriter.getJsonEx('/wit/workitemrelationtypes/{relationName}', collectionScopeUrl); +}; + +collectionScopeUrl = function (context, options) { + options.url = url.resolve(options.url + "/", '../../_apis'); +}; diff --git a/docs/integrate/api/_scripts/1.0/witQueries.js b/docs/integrate/api/_scripts/1.0/witQueries.js new file mode 100644 index 00000000000..0f0903e0219 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/witQueries.js @@ -0,0 +1,154 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + folderName: "Website team", + folderNameNew: "Website", + queryName: "All Bugs", + queryName2: "Active stories with tasks", + queryNameNew: "Active Bugs", + queryId: null, + hierarchicalQueryId: null, + folderId: null + }; +}; + +exports.submitRequests = function () { + + // Get the tree of queries by ID + apiwriter.getJson('/wit/queries'); + apiwriter.getJson('/wit/queries?$depth=1'); + apiwriter.getJson('/wit/queries?$depth=1&$expand=all'); + + // Get the tree of queries by Name + apiwriter.getJson('/wit/queries/Shared Queries/Current Sprint'); + apiwriter.getJson('/wit/queries/Shared Queries/Current Sprint?$depth=1'); + + // Create a folder + apiwriter.postJson('/wit/queries/Shared Queries', + function (context, result) { + return { + "name": context.folderName, + "isFolder": true + } + }, + function (context, result) { + context.folderId = result.responseBody.id; + } + ); + + // Create a flat query + apiwriter.postJson('/wit/queries/Shared Queries/{folderName}', + function (context, result) { + return { + "name": context.queryName, + "wiql": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Bug' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" + } + }, + function (context, result) { + context.queryId = result.responseBody.id; + } + ); + + // Create a hierarchical query + apiwriter.postJson('/wit/queries/Shared Queries/{folderName}', + function (context, result) { + return { + "name": context.queryName2, + "wiql": "SELECT [System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags] FROM WorkItemLinks WHERE ([Source].[System.TeamProject] = @project AND [Source].[System.WorkItemType] = 'Product Backlog Item' AND [Source].[System.State] <> 'Removed') AND ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') AND ([Target].[System.WorkItemType] = 'Task') mode(Recursive)" + } + }, + function (context, result) { + context.hierarchicalQueryId = result.responseBody.id; + } + ); + + //get a specific folder by ID + apiwriter.getJson('/wit/queries/{folderId}'); + + //get a specific folder by Name + apiwriter.getJson('/wit/queries/Shared Queries/{folderName}'); + + //get a specific query by ID + apiwriter.getJson('/wit/queries/{queryId}'); + + //get a specific query by Name + apiwriter.getJson('/wit/queries/Shared Queries/{folderName}/{queryName}'); + + // get a specific query by ID with clauses + apiwriter.getJson('/wit/queries/{queryId}?$expand=clauses'); + apiwriter.getJson('/wit/queries/{hierarchicalQueryId}?$expand=clauses'); + + // rename a query + apiwriter.patchJson('/wit/queries/{queryId}', + function (context, result) { + return { + "name": context.queryNameNew + } + } + ); + + // update the WIQL of a query + apiwriter.patchJson('/wit/queries/Shared Queries/{folderName}/{queryNameNew}', + function (context, result) { + return { + "wiql": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Bug' AND [System.State] = 'Active' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" + } + } + ); + + // rename a folder + apiwriter.patchJson('/wit/queries/Shared Queries/{folderName}', + function (context, result) { + return { + "name": context.folderNameNew + } + } + ); + + // move a folder + apiwriter.postJson('/wit/queries/My Queries', + function (context, result) { + return { + "id": context.folderId + } + } + ); + + //delete query + apiwriter.deleteJson('/wit/queries/{queryId}', null); + apiwriter.deleteJson('/wit/queries/{hierarchicalQueryId}', null); + + // Get all queries included deleted + apiwriter.getJson('/wit/queries?$depth=2&$includeDeleted=true'); + + // Get deleted query + apiwriter.getJson('/wit/queries/{queryId}?$includeDeleted=true'); + + // Undelete a query + apiwriter.patchJson('/wit/queries/{queryId}', + function (context, result) { + return { + "isDeleted": false + } + } + ); + + //delete folder + apiwriter.deleteJson('/wit/queries/My Queries/{folderNameNew}', null); + + // Undelete a folder and children + apiwriter.patchJson('/wit/queries/{folderId}?$undeleteDescendants=true', + function (context, result) { + return { + "isDeleted": false + } + } + ); + + // Keep it clean! + apiwriter.deleteJson('/wit/queries/{folderId}', null); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/1.0/witWorkItems.js b/docs/integrate/api/_scripts/1.0/witWorkItems.js new file mode 100644 index 00000000000..0f6c0d0c952 --- /dev/null +++ b/docs/integrate/api/_scripts/1.0/witWorkItems.js @@ -0,0 +1,656 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +//PreReq: There must be a project called "Fabrikam-Fiber-Git" +//PreReq: There must be a user called Johnnie McCloud (if not change line 270) + +Array.prototype.unique = function () { + var u = {}, a = []; + for (var i = 0, l = this.length; i < l; ++i) { + if (u.hasOwnProperty(this[i])) { + continue; + } + a.push(this[i]); + u[this[i]] = 1; + } + return a; +}; + +parseColumns = function (columns) { + var columnNames = new Array(); + for (var i = 0; i < columns.length; i++) { + columnNames.push(columns[i].referenceName); + } + return columnNames.join(); +} + +parseIds = function (workItemRelations) { + var ids = new Array(); + for (var i = 0; i < workItemRelations.length; i++) { + ids.push(workItemRelations[i].target.id); + } + return ids.unique().join(); +} + +exports.getContext = function() { + return { + projectName: "Fabrikam-Fiber-Git", + attachmentUrl: null, + PBIId: null, + PBIUrl: null, + taskId: null, + taskUrl: null, + task2Id: null, + task2Url: null, + task3Id: null, + queryId: null, + rootAreaId: null, + ids: null, + columns: "System.Id,System.Title,System.WorkItemType,Microsoft.VSTS.Scheduling.RemainingWork", + asof: null, + }; +}; + +exports.submitRequests = function() { + apiwriter.setEnableWrite(false); + + // Get the areas + apiwriter.getJson('/wit/classificationNodes/areas', + function (context, result) { + context.rootAreaId = result.responseBody.id; + } + ); + + // Create new area + apiwriter.postJson('/wit/classificationNodes/areas', + function (context, result) { + return { + "name": "Web" + } + } + ); + + // Create the first work item + apiwriter.patchJsonEx('/wit/workitems/$Product Backlog Item', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Customer can sign in using their Microsoft Account" + }, + { + "op": "add", + "path": "/fields/Microsoft.VSTS.Scheduling.Effort", + "value": 8 + }, + { + "op": "add", + "path": "/fields/System.Description", + "value": "Our authorization logic needs to allow for users with Microsoft accounts (formerly Live Ids) - http://msdn.microsoft.com/en-us/library/live/hh826547.aspx" + } + ]; + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function (context, result) { + context.PBIId = result.responseBody.id; + context.PBIUrl = result.responseBody.url; + } + ); + + // Upload an attachment + apiwriter.postJsonEx('/wit/attachments?fileName=Spec.txt', + "User text content to upload", + collectionScopeUrl, + function (context, result) { + context.attachmentUrl = result.responseBody.url + }, + true + ); + + apiwriter.setEnableWrite(true); + + // Get a specfic work item + apiwriter.getJsonEx('/wit/workitems/{PBIId}', collectionScopeUrl); + + // Get a specfic work item expanded + apiwriter.getJsonEx('/wit/workitems/{PBIId}?$expand=all', collectionScopeUrl); + + // Get a specific work item type stub + apiwriter.getJson('/wit/workitems/$Task'); + + // Create a super simple work item with required fields only + apiwriter.patchJsonEx('/wit/workitems/$Task', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "JavaScript implementation for Microsoft Account" + } + ] + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.task3Id = result.responseBody.id; + } + ); + + // Create a work item with links + apiwriter.patchJsonEx('/wit/workitems/$Task', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "JavaScript implementation for Microsoft Account" + }, + { + "op": "add", + "path": "/fields/Microsoft.VSTS.Scheduling.RemainingWork", + "value": 4 + }, + { + "op": "add", + "path": "/fields/System.Description", + "value": "Follow the code samples from MSDN" + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Jim has the most context around this." + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Hierarchy-Reverse", //"work-item/hierarchy-reverse", + "url": context.PBIUrl, + "attributes": { + "comment": "decomposition of work" + } + } + } + ] + }, + function(context, options) + { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.taskId = result.responseBody.id; + context.taskUrl = result.responseBody.url; + } + ); + + apiwriter.setEnableWrite(false); + + //Create a new task to add + apiwriter.patchJsonEx('/wit/workitems/$Task', + function(context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Unit Testing for MSA login" + }, + { + "op": "add", + "path": "/fields/System.Description", + "value": "We need to ensure we have coverage to prevent regressions" + }, + { + "op": "add", + "path": "/fields/Microsoft.VSTS.Scheduling.RemainingWork", + "value": 3 + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Hierarchy-Reverse", + "url": context.PBIUrl, + "title": "decomposition of work" + } + } + ] + }, + function(context, options) + { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.task2Id = result.responseBody.id; + context.task2Url = result.responseBody.url; + context.ids = context.PBIId + ',' + context.taskId + ',' + context.task2Id; + context.asof = result.responseBody.fields["System.CreatedDate"]; + } + ); + + // Create a query + apiwriter.postJson('/wit/queries/My Queries', + function (context, result) { + return { + "name": "All Work", + "wiql": "Select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State] From WorkItemLinks WHERE (Source.[System.TeamProject] = @project and Source.[System.State] <> 'Removed') and ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') and (Target.[System.WorkItemType] <> '') mode(Recursive)" + } + }, + function (context, result) { + context.queryId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + // Update a field of the task + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function(context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 1 + }, + { + "op": "add", + "path": "/fields/System.AreaPath", + "value": context.projectName + "\\Web" + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Moving to the right area path" + } + ] + }, + collectionScopePatchUrl + ); + + // Update a field and add a link to the task + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function(context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 2 + }, + { + "op": "add", + "path": "/fields/System.AssignedTo", + "value": "Johnnie McLeod" + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Johnnie is going to take this work over." + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Related", + "url": context.task2Url, + "attributes": { + "comment": "adding another task" + } + } + } + ] + }, + collectionScopePatchUrl + ); + + // Add a link + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Dependency-forward", + "url": context.task2Url, + "attributes": { + "comment": "Making a new link for the dependency" + } + } + } + ] + }, + collectionScopePatchUrl + ); + + // Update a link + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "replace", + "path": "/relations/2/attributes/comment", + "value": "Adding traceability to dependencies" + } + ] + }, + collectionScopePatchUrl + ); + + // Remove a link + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "remove", + "path": "/relations/2" + } + ] + }, + collectionScopePatchUrl + ); + + // Add an attachment + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Adding the necessary spec" + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "AttachedFile", + "url": context.attachmentUrl, + "attributes": { + "comment":"Spec for the work" + } + } + } + ] + }, + collectionScopePatchUrl + ); + + // Remove an attachment + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 4 + }, + { + "op": "remove", + "path": "/relations/2" + } + ] + }, + collectionScopePatchUrl + ); + + // Add a hyperlink + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 5 + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Linking to a blog article for context" + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "Hyperlink", + "url": "http://blogs.msdn.com/b/bharry/archive/2014/05/12/a-new-api-for-visual-studio-online.aspx" + } + } + ] + }, + collectionScopePatchUrl + ); + + // Tag a workitem + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 6 + }, + { + "op": "add", + "path": "/fields/System.Tags", + "value": "Tag1; Tag2" + } + ] + }, + collectionScopePatchUrl + ); + + // Change work item bypassing rules + apiwriter.patchJsonEx('/wit/workitems/{taskId}?bypassRules=true', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.AssignedTo", + "value": "Invalid Value" + } + ] + }, + collectionScopePatchUrl + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/workitems?ids={ids}', collectionScopeUrl); + apiwriter.getJsonEx('/wit/workitems?ids={ids}&fields={columns}', collectionScopeUrl); + apiwriter.getJsonEx('/wit/workitems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + apiwriter.getJsonEx('/wit/workitems?ids={ids}&$expand=all', collectionScopeUrl); + + // get the update collection for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates', collectionScopeUrl); + + // get a page of updates for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates?$skip=1&$top=2', collectionScopeUrl); + + // get the second update + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates/2', collectionScopeUrl); + + // get the last update of links + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates/4', collectionScopeUrl); + + // get all revisions of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions', collectionScopeUrl); + + // get a page of revisions for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions?$skip=1&$top=2', collectionScopeUrl); + + // get a revision of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions/2', collectionScopeUrl); + + // get an expanded revision of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions/2?$expand=all', collectionScopeUrl); + + // get all discussion history of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/history', collectionScopeUrl); + + // get a page of discussion history entries for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/history?$skip=1&$top=2', collectionScopeUrl); + + // get a discussion history entry of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/history/2', collectionScopeUrl); + + // Get all work items returned by a (stored) query + apiwriter.getJson('/wit/wiql/{queryId}'); + + // Get all work items filtered by WIQL + apiwriter.postJson('/wit/wiql', + function (context, result) { + return { + "query": "Select [System.WorkItemType],[System.Title],[System.State],[Microsoft.VSTS.Scheduling.Effort],[System.IterationPath] FROM WorkItemLinks WHERE Source.[System.WorkItemType] IN GROUP 'Microsoft.RequirementCategory' AND Target.[System.WorkItemType] IN GROUP 'Microsoft.RequirementCategory' AND Target.[System.State] IN ('New','Approved','Committed') AND [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward' ORDER BY [Microsoft.VSTS.Common.BacklogPriority] ASC,[System.Id] ASC MODE (Recursive, ReturnMatchingChildren)" + } + } + ); + + // Get results of a flat query + apiwriter.postJsonEx('/wit/wiql', + function (context, result) { + return { + "query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task' AND [State] <> 'Closed' AND [State] <> 'Removed' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" + } + }, + collectionScopeUrl, + function (context, result) { + var ids = new Array(); + for (var i = 0; i < result.responseBody.workItems.length; i++) { + ids.push(result.responseBody.workItems[i].id); + } + context.ids = ids.unique().join(); + context.columns = parseColumns(result.responseBody.columns); + context.asof = result.responseBody.asOf; + } + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/WorkItems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + + // Get results of a onehop query + apiwriter.postJson('/wit/wiql', + function (context, result) { + return { + "query": "SELECT [System.Id], [System.Links.LinkType], [System.WorkItemType], [System.Title], [System.State] FROM WorkItemLinks WHERE ([Source].[System.TeamProject] = @project AND [Source].[System.WorkItemType] IN GROUP 'Microsoft.RequirementCategory' AND [Source].[System.State] <> 'Done') AND ([System.Links.LinkType] <> '') And ([Target].[System.State] <> 'Removed' AND [Target].[System.WorkItemType] NOT IN GROUP 'Microsoft.FeatureCategory') mode(MustContain)" + } + }, + function (context, result) { + context.ids = parseIds(result.responseBody.workItemRelations); + context.columns = parseColumns(result.responseBody.columns); + context.asof = result.responseBody.asOf; + } + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/WorkItems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + + // Get results of a tree query + apiwriter.postJson('/wit/wiql', + function (context, result) { + return { + "query": "Select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State] From WorkItemLinks WHERE (Source.[System.TeamProject] = @project and Source.[System.State] <> 'Removed') and ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') and (Target.[System.WorkItemType] <> '') mode(Recursive)" + } + }, + function (context, result) { + context.ids = parseIds(result.responseBody.workItemRelations); + context.columns = parseColumns(result.responseBody.columns); + context.asof = result.responseBody.asOf; + } + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/WorkItems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + + // Close all new work items and delete new queries + apiwriter.setEnableWrite(false); + + // Update a field of the task + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + }, + collectionScopePatchUrl + ); + + apiwriter.patchJsonEx('/wit/workitems/{task2Id}', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + }, + collectionScopePatchUrl + ); + + apiwriter.patchJsonEx('/wit/workitems/{task3Id}', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + }, + collectionScopePatchUrl + ); + + apiwriter.patchJsonEx('/wit/workitems/{PBIId}', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + }, + collectionScopePatchUrl + ); + + // Keep it clean! + apiwriter.deleteJson('/wit/queries/{queryId}', null); + + apiwriter.deleteJson('/wit/classificationNodes/areas/Web?$reclassifyId={rootAreaId}', null); +}; + +collectionScopeUrl = function (context, options) { + options.url = url.resolve(options.url + "/", '../../_apis'); +}; + +collectionScopePatchUrl = function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json"; + collectionScopeUrl(context, options); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/accounts.js b/docs/integrate/api/_scripts/2.0/accounts.js new file mode 100644 index 00000000000..abfde3132bb --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/accounts.js @@ -0,0 +1,71 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + newAccountName: 'dummyaccount1' + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + // Get the current user's profile + apiwriter.getJson('/profile/profiles/me', + function(context, result) { + context.userId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + // Get list of accounts by member + apiwriter.getJson('/Accounts?memberId={userId}', + function(context, result) { + context.accountId = result.responseBody.value[0].accountId; + context.accountName = result.responseBody.value[0].accountName; + } + ); + + // Get list of accounts by owner + apiwriter.getJson('/Accounts?ownerId={userId}'); + + // Get an account by ID + //apiwriter.getJson('/Accounts/{accountName}'); + + // Get an account by name + //apiwriter.getJson('/Accounts/{accountName}'); + + // Get account users + //apiwriter.getJson('/Account/User/{accountId}'); + + // Get account licenses + // apiwriter.getJson('/Account/{accountId}/Licenses'); + + // Create an account + /*apiwriter.postJson('/Accounts', + function(context, result) { + return { "accountName": content.newAccountName }; + }, + function(context, result) { + context.accountId = result.responseBody.AccountId; + context.accountName = result.responseBody.AccountName; + } + );*/ + + // Update an account + /*apiwriter.patchJson('/Accounts/{accountId}', + function(context, result) { + console.log(context.accountId); + return { "AccountId": context.accountId, "AccountName": "renamed account" }; + } + );*/ + + // Delete an account + /*apiwriter.postJson('/AccountDeletions/{accountId}', + function(context, result) { + return { }; + } + );*/ + +}; diff --git a/docs/integrate/api/_scripts/2.0/boardSuggestedValues.js b/docs/integrate/api/_scripts/2.0/boardSuggestedValues.js new file mode 100644 index 00000000000..c133d23357a --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/boardSuggestedValues.js @@ -0,0 +1,26 @@ +var apiwriter = require('apiwriter'); + +/* When running with OnPrem, ensure that Basic Auth is set up in the virtual directory itself. + * Set these environment variables when running writer tool for boards.js + * set cfgApisUrl=http://yaliu:8080/tfs/DefaultCollection/_apis (for collection level) + * Or set cfgApisUrl=http://yaliu:8080/tfs/DefaultCollection/bfeaf5d7-8bf6-4bc8-96c0-47a1727c7815/_apis (for project level) + * set cfgApiVersion=2.0-preview.1 + * set cfgScriptPath = ../../Content.VS/integrate/api/_scripts/2.0 + * set cfgScript=boardSuggestedValues.js + */ + +exports.getContext = function () { + return { + + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + // columns + apiwriter.getJson('/work/boardColumns/'); + + // Rows + apiwriter.getJson('/work/boardRows/'); +} diff --git a/docs/integrate/api/_scripts/2.0/boards.js b/docs/integrate/api/_scripts/2.0/boards.js new file mode 100644 index 00000000000..f7196a3c8a1 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/boards.js @@ -0,0 +1,134 @@ +var apiwriter = require('apiwriter'); + +/* When running with OnPrem, ensure that Basic Auth is set up in the virtual directory itself. + * Set these environment variables when running writer tool for boards.js + * set cfgApisUrl=http://localhost:8080/tfs/DefaultCollection/fooScrum/AgileTeam/_apis + * set cfgUserName= + * set cfgPassword= + * set cfgApiVersion=1.0 + * set cfgScript=boards.js + * set cfgScriptPath = ../../VSContent/integrate/api/_scripts/2.0 + */ + +exports.getContext = function () { + return { + + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/work/boards/', + function (context, result) { + context.boardId = result.responseBody.value[0].id; + context.boardName = result.responseBody.value[0].name; + }); + + // By ID + apiwriter.getJson('/work/boards/{boardId}'); + + // By name + apiwriter.getJson('/work/boards/{boardName}'); + + // By ID + apiwriter.getJson('/work/boards/{boardId}/columns', + function (context, result) { + context.boardColumns = result.responseBody.value; + }); + + // By name + apiwriter.getJson('/work/boards/{boardName}/columns'); + + // Update column + apiwriter.putJson('/work/boards/{boardName}/columns', + function(context, result) { + return context.boardColumns; + } + ); + + // By id + apiwriter.getJson('/work/boards/{boardId}/cardsettings', + function (context, result) { + context.boardCardSettings = result.responseBody; + }); + + // By name + apiwriter.getJson('/work/boards/{boardName}/cardsettings', + function (context, result) { + context.boardCardSettings = result.responseBody; + }); + + // Update card settings + apiwriter.putJson('/work/boards/{boardName}/cardsettings', + function (context, result) { + return context.boardCardSettings; + } + ); + + // By id + apiwriter.getJson('/work/boards/{boardId}/cardrulesettings', + function (context, result) { + context.boardCardRules = result.responseBody; + }); + + // By name + apiwriter.getJson('/work/boards/{boardName}/cardrulesettings', + function (context, result) { + context.boardCardRules = result.responseBody; + }); + + // Update card rules + apiwriter.patchJson('/work/boards/{boardName}/cardrulesettings', + function (context, result) { + delete context.boardCardRules['url']; + delete context.boardCardRules['_links']; + for (var i = 0 ; i < context.boardCardRules.rules['fill'].length; i++) { + delete context.boardCardRules.rules['fill'][i]['clauses']; + } + return context.boardCardRules; + } + ); + + // By id + apiwriter.getJson('/work/boards/{boardId}/rows', + function (context, result) { + context.boardRows = result.responseBody.value; + }); + + // By name + apiwriter.getJson('/work/boards/{boardName}/rows'); + + // Update rows + apiwriter.putJson('/work/boards/{boardName}/rows', + function(context, result) { + context.boardRows[1].id=undefined; + context.boardRows[1].name="New Expedite"; + return context.boardRows; + } + ); + + // Get charts + apiwriter.getJson('/work/boards/{boardName}/charts'); + + // GetCFD + apiwriter.getJson('/work/boards/{boardName}/charts/cumulativeFlow', + function(context, result) { + context.boardCFD = result.responseBody; + } + ); + + // UpdateCFD + apiwriter.patchJson('/work/boards/{boardName}/charts/cumulativeFlow', + function(context, result) { + var d = new Date(); + d.setDate(d.getDate()-1); + context.boardCFD.settings.startDate = d.toUTCString(); + context.boardCFD.settings.hideIncomingColumn = true; + delete context.boardCFD.name; + delete context.boardCFD.url; + delete context.boardCFD._links; + return context.boardCFD; + } + ); +} diff --git a/docs/integrate/api/_scripts/2.0/buildBuilds.js b/docs/integrate/api/_scripts/2.0/buildBuilds.js new file mode 100644 index 00000000000..59c4caa5367 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/buildBuilds.js @@ -0,0 +1,121 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + build1: null, + build2: null, + definition: null, + person: null, + after: "02-01-2015", + quality: "Rejected", + status: "Succeeded", + top: 1, + skip: 1, + continuationToken: null, + // VsoBuildApi definition + definitionId: 25, + knownBuildId: 391 + }; +}; + +var DEFAULT_MAX = 3; + +var limitResult = function (result, max) { + try { + if (result.responseBody.value && result.responseBody.value.length > max) { + result.responseBody.value = result.responseBody.value.slice(0, max); + result.responseBody.count = max; + } + } catch (e) { } +}; + +var resourceVersion1 = function (context, options) { + options.headers["Accept"] = "application/json;api-version=1.0" +}; + +var collectionUrl = function (context, options) { + options.url = options.url.substring(0, options.url.lastIndexOf('/')); + options.url = options.url.substring(0, options.url.lastIndexOf('/')) + "/_apis"; +} + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + // queue a build + apiwriter.postJson('/build/builds', + function (context, result) { + return { + "definition": { + "id": context.definitionId + }, + "sourceBranch": "refs/heads/master", + "parameters": "{\"system.debug\":\"true\",\"BuildConfiguration\":\"debug\",\"BuildPlatform\":\"x64\"}" + }; + }, + function (context, result) { + context.buildId = result.responseBody.id; + }); + + // get builds + apiwriter.getJson('/build/builds?definitions={definitionId}&statusFilter=completed&$top=1', + function (context, result) { + context.continuationToken = result.responseHeaders["x-ms-continuationtoken"]; + }); + + // get builds with continuation token + apiwriter.getJson('/build/builds?definitions={definitionId}&statusFilter=completed&continuationToken={continuationToken}'); + + // get a build + apiwriter.getJson('/build/builds/{knownBuildId}'); + + // get changes associated with the build + apiwriter.getJson('/build/builds/{knownBuildId}/changes'); + + // get work items associated with the build + apiwriter.postJson('/build/builds/{knownBuildId}/workitems'); + + // get the build timeline + apiwriter.getJson('/build/builds/{knownBuildId}/timeline'); + + // get the build artifacts + apiwriter.getJson('/build/builds/{knownBuildId}/artifacts'); + + // get the build logs + apiwriter.getJson('/build/builds/{knownBuildId}/logs'); + + // tag the build + apiwriter.putJson('/build/builds/{knownBuildId}/tags/myTag'); + + // list the tags for the build + apiwriter.getJson('/build/builds/{knownBuildId}/tags'); + + // get builds with a tag + apiwriter.getJson('/build/builds?tagFilters=myTag'); + + // get all tags + apiwriter.getJson('/build/tags'); + + // delete the tag from the build + apiwriter.deleteJson('/build/builds/{knownBuildId}/tags/myTag'); + + // update the build + apiwriter.patchJson('/build/builds/{buildId}', + function (context, result) { + return { + keepForever: true + }; + }); + + apiwriter.setEnableWrite(false); + // un-set keepForever so the build can be deleted + apiwriter.patchJson('/build/builds/{buildId}', + function (context, result) { + return { + keepForever: false + }; + }); + apiwriter.setEnableWrite(true); + + // delete a build + apiwriter.deleteJson('/build/builds/{buildId}'); +} diff --git a/docs/integrate/api/_scripts/2.0/buildDefinitionTemplates.js b/docs/integrate/api/_scripts/2.0/buildDefinitionTemplates.js new file mode 100644 index 00000000000..5196491c832 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/buildDefinitionTemplates.js @@ -0,0 +1,111 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + templateId: null + }; +}; + +var resourceVersion1 = function (context, options) { + options.headers["Accept"] = "application/json;api-version=1.0" +}; + +var collectionUrl = function (context, options) { + options.url = options.url.substring(0, options.url.lastIndexOf('/')); + options.url = options.url.substring(0, options.url.lastIndexOf('/')) + "/_apis"; +} + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + // get templates + apiwriter.getJson('/build/definitions/templates', + function (context, result) { + context.templateId = result.responseBody.value[0].id; + }); + + // get a specific template + apiwriter.getJson('/build/definitions/templates/{templateId}'); + + // create a template + apiwriter.putJson('/build/definitions/templates/{templateId}', + function (context, options) { + context.templateId = "myCustomTemplate"; + + return { + name: "My Custom Template", + description: "A custom template for a custom process", + template: { + build: [ + { + "enabled": true, + "continueOnError": false, + "alwaysRun": false, + "displayName": "Build solution **\\*.sln", + "task": { + "id": "71a9a2d3-a98a-4caa-96ab-affca411ecda", + "versionSpec": "*" + }, + "inputs": { + "solution": "**\\*.sln", + "msbuildArgs": "", + "platform": "$(platform)", + "configuration": "$(config)", + "clean": "false", + "restoreNugetPackages": "true", + "vsLocationMethod": "version", + "vsVersion": "latest", + "vsLocation": "", + "msbuildLocationMethod": "version", + "msbuildVersion": "latest", + "msbuildArchitecture": "x86", + "msbuildLocation": "", + "logProjectEvents": "true" + } + }, + { + "enabled": true, + "continueOnError": false, + "alwaysRun": false, + "displayName": "Test Assemblies **\\*test*.dll;-:**\\obj\\**", + "task": { + "id": "ef087383-ee5e-42c7-9a53-ab56c98420f9", + "versionSpec": "*" + }, + "inputs": { + "testAssembly": "**\\*test*.dll;-:**\\obj\\**", + "testFiltercriteria": "", + "runSettingsFile": "", + "codeCoverageEnabled": "true", + "otherConsoleOptions": "", + "vsTestVersion": "14.0", + "pathtoCustomTestAdapters": "" + } + } + ], + buildNumberFormat: "$(date:yyyyMMdd)$(rev:.r)", + jobAuthorizationScope: "projectCollection", + triggers: [ + { + batchChanges: false, + branchFilters: "", + triggerType: "continuousIntegration" + } + ], + variables: { + "forceClean": { "value": "false", "allowOverride": true }, + "config": { "value": "debug, release", "allowOverride": true }, + "platform": { "value": "any cpu", "allowOverride": true } + }, + } + }; + }, + function (context, result) { + context.revision = result.responseBody.revision; + context.definitionId = result.responseBody.id; + }); + + // delete a template + apiwriter.deleteJson('/build/definitions/templates/{templateId}'); +} diff --git a/docs/integrate/api/_scripts/2.0/buildDefinitions.js b/docs/integrate/api/_scripts/2.0/buildDefinitions.js new file mode 100644 index 00000000000..66127ef1569 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/buildDefinitions.js @@ -0,0 +1,238 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + definitionId: null, + deleteComment: 'delete me', + revision: null + }; +}; + +var resourceVersion1 = function (context, options) { + options.headers["Accept"] = "application/json;api-version=1.0" +}; + +var collectionUrl = function (context, options) { + options.url = options.url.substring(0, options.url.lastIndexOf('/')); + options.url = options.url.substring(0, options.url.lastIndexOf('/')) + "/_apis"; +} + +exports.submitRequests = function() +{ + // get repository + apiwriter.setEnableWrite(false); + apiwriter.getJsonEx('/git/repositories', + resourceVersion1, + function (context, result) { + for (var i = 0; i < result.responseBody.value.length; i++) { + if (result.responseBody.value[i].name === "Fabrikam-Fiber-Git") { + repository = result.responseBody.value[i]; + break; + } + } + context.repository = repository; + }); + + // get queue + apiwriter.getJsonEx('/build/queues?type=agentpool', + collectionUrl, + function (context, result) { + context.queueId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + apiwriter.postJson('/build/definitions', + function (context, options) { + return { + "name": "myDefinition", + "type": 'build', + "quality": 'definition', + "queue": { + "id": context.queueId, + }, + "build": [ + { + "enabled": true, + "continueOnError": false, + "alwaysRun": false, + "displayName": "Build solution **\\*.sln", + "task": { + "id": "71a9a2d3-a98a-4caa-96ab-affca411ecda", + "versionSpec": "*" + }, + "inputs": { + "solution": "**\\*.sln", + "msbuildArgs": "", + "platform": "$(platform)", + "configuration": "$(config)", + "clean": "false", + "restoreNugetPackages": "true", + "vsLocationMethod": "version", + "vsVersion": "latest", + "vsLocation": "", + "msbuildLocationMethod": "version", + "msbuildVersion": "latest", + "msbuildArchitecture": "x86", + "msbuildLocation": "", + "logProjectEvents": "true" + } + }, + { + "enabled": true, + "continueOnError": false, + "alwaysRun": false, + "displayName": "Test Assemblies **\\*test*.dll;-:**\\obj\\**", + "task": { + "id": "ef087383-ee5e-42c7-9a53-ab56c98420f9", + "versionSpec": "*" + }, + "inputs": { + "testAssembly": "**\\*test*.dll;-:**\\obj\\**", + "testFiltercriteria": "", + "runSettingsFile": "", + "codeCoverageEnabled": "true", + "otherConsoleOptions": "", + "vsTestVersion": "14.0", + "pathtoCustomTestAdapters": "" + } + } + ], + "repository": { + "id": context.repository.id, + "type": "tfsgit", + "name": context.repository.name, + "localPath": "$(sys.sourceFolder)/MyGitProject", + "defaultBranch": "refs/heads/master", + "url": context.repository.remoteUrl, + "clean": "false" + }, + "options": [ + { + "enabled": true, + "definition": { "id": "7c555368-ca64-4199-add6-9ebaf0b0137d" }, + "inputs": { + "parallel": "false", + "multipliers": "[\"config\",\"platform\"]" + } + } + ], + "variables": { + "forceClean": { "value": "false", "allowOverride": true }, + "config": { "value": "debug, release", "allowOverride": true }, + "platform": { "value": "any cpu", "allowOverride": true } + }, + "triggers": [], + "comment": "my first definition" + }; + }, + function (context, result) { + context.revision = result.responseBody.revision; + context.definitionId = result.responseBody.id; + }); + + apiwriter.getJson('/build/definitions'); + + apiwriter.getJson('/build/definitions/{definitionId}'); + + apiwriter.getJson('/build/definitions/{definitionId}?revision={revision}'); + + apiwriter.putJson('/build/definitions/{definitionId}', + function (context, options) { + return { + "id": context.definitionId, + "revision": context.revision, + "name": "myFavoriteDefinition", + "definitionType": 'build', + "documentQuality": 'definition', + "queue": { + "id": context.queueId, + }, + "build": [ + { + "enabled": true, + "continueOnError": false, + "alwaysRun": false, + "displayName":"Build solution **\\*.sln", + "task": { + "id": "71a9a2d3-a98a-4caa-96ab-affca411ecda", + "versionSpec": "*" + }, + "inputs": { + "solution": "**\\*.sln", + "msbuildArgs": "", + "platform": "$(platform)", + "configuration": "$(config)", + "clean": "false", + "restoreNugetPackages": "true", + "vsLocationMethod": "version", + "vsVersion": "latest", + "vsLocation": "", + "msbuildLocationMethod": "version", + "msbuildVersion": "latest", + "msbuildArchitecture": "x86", + "msbuildLocation": "", + "logProjectEvents": "true" + } + }, + { + "enabled": true, + "continueOnError": false, + "alwaysRun": false, + "displayName": "Test Assemblies **\\*test*.dll;-:**\\obj\\**", + "task": { + "id": "ef087383-ee5e-42c7-9a53-ab56c98420f9", + "versionSpec": "*" + }, + "inputs": { + "testAssembly": "**\\*test*.dll;-:**\\obj\\**", + "testFiltercriteria": "", + "runSettingsFile": "", + "codeCoverageEnabled": "true", + "otherConsoleOptions": "", + "vsTestVersion": "14.0", + "pathtoCustomTestAdapters": "" + } + } + ], + "repository": { + "id": context.repository.id, + "type": "tfsgit", + "name": context.repository.name, + "localPath": "$(sys.sourceFolder)/MyGitProject", + "defaultBranch": "refs/heads/master", + "url": context.repository.remoteUrl, + "clean": "false" + }, + "options": [ + { + "enabled": true, + "definition": { "id": "7c555368-ca64-4199-add6-9ebaf0b0137d" }, + "inputs": { + "parallel": "false", + "multipliers": "[\"config\",\"platform\"]" + } + } + ], + "variables": { + "forceClean": { "value": "false", "allowOverride": true }, + "config": { "value": "debug, release", "allowOverride": true }, + "platform": { "value": "any cpu", "allowOverride": true } + }, + "triggers": [], + "comment": "renamed" + }; + }, + function (context, result) { + context.definitionId = result.responseBody.id; + context.revision = result.responseBody.revision - 1; + }); + + apiwriter.getJson('/build/definitions/{definitionId}/revisions'); + + apiwriter.deleteJson('/build/definitions/{definitionId}'); + + // build definition options + apiwriter.getJsonEx('/build/options', + collectionUrl); +} diff --git a/docs/integrate/api/_scripts/2.0/buildQualities.js b/docs/integrate/api/_scripts/2.0/buildQualities.js new file mode 100644 index 00000000000..4ea56ef86be --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/buildQualities.js @@ -0,0 +1,17 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + quality: 'To be evaluated' + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + apiwriter.getJson('/build/qualities'); + + apiwriter.putJson('/build/qualities/{quality}', {}); + + apiwriter.deleteJson('/build/qualities/{quality}', null); +} diff --git a/docs/integrate/api/_scripts/2.0/buildQueues.js b/docs/integrate/api/_scripts/2.0/buildQueues.js new file mode 100644 index 00000000000..67986c09eae --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/buildQueues.js @@ -0,0 +1,77 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + queueId: null, + poolId: null + }; +}; + +var resourceVersion2 = function (context, options) { + options.headers["Accept"] = "application/json;api-version=2.0;res-version=2" +}; + +var collectionUrl = function (context, options) { + options.url = options.url.substring(0, options.url.lastIndexOf('/')); + options.url = options.url.substring(0, options.url.lastIndexOf('/')) + "/_apis"; + resourceVersion2(context, options); +} + +var collectionUrlv1 = function (context, options) { + options.url = options.url.substring(0, options.url.lastIndexOf('/')); + options.url = options.url.substring(0, options.url.lastIndexOf('/')) + "/_apis"; + options.headers["Accept"] = "application/json;api-version=1.0" +} + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + // get a pool + apiwriter.getJsonEx('/distributedtask/pools', + collectionUrlv1, + function (context, result) { + context.poolId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + // create a queue + apiwriter.postJsonEx('/build/queues', + function (context, options) { + return { + name: 'myNewQueue', + type: 'agentPool', + pool: { + id: context.poolId + } + }; + }, + collectionUrl, + function (context, result) { + context.queueId = result.responseBody.id; + }); + + // get a queue + apiwriter.getJsonEx('/build/queues/{queueId}', + collectionUrl); + + // get queues + apiwriter.getJsonEx('/build/queues', + collectionUrl); + + apiwriter.setEnableWrite(false); + + // find a controller + apiwriter.getJsonEx('/build/queues?type=buildController', + collectionUrl, + function (context, result) { + context.controllerId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + // get a controller + apiwriter.getJsonEx('/build/controllers/{controllerId}', + collectionUrl); +} diff --git a/docs/integrate/api/_scripts/2.0/buildRequests.js b/docs/integrate/api/_scripts/2.0/buildRequests.js new file mode 100644 index 00000000000..1830b85be07 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/buildRequests.js @@ -0,0 +1,106 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + request: null, + requestToDelete: null, + person: null, + definition: null, + controller: null, + age: 3600, // one hour + status: "completed", + top: 2, + skip: 2, + postBody: { definition: { id: null } }, + }; +}; + +var DEFAULT_MAX = 5; + +var limitResult = function(result, max) { + try { + if (result.responseBody.value && result.responseBody.value.length > max) { + result.responseBody.value = result.responseBody.value.slice(0, max); + result.responseBody.count = max; + } + } catch (e) { } +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + // We need at least one build to start with + apiwriter.getJson('/build/requests', + function (context, result) { + limitResult(result, DEFAULT_MAX); + + context.request = result.responseBody.value[0].id; + context.person = result.responseBody.value[0].requestedBy.uniqueName; + context.definition = context.postBody.definition.id = result.responseBody.value[0].definition.id; + context.queue = result.responseBody.value[0].queue.id; + context.queueTye = result.responseBody.value[0].queue.queueType; + context.status = result.responseBody.value[0].status; + }); + + nBuildsToQueue = 4; + for (i = 0; i < nBuildsToQueue; i++) { + apiwriter.postJson('/build/requests', + function (context) { + return { + 'definition': { + 'id': context.definition + }, + 'reason': 'Manual', + 'priority': 'Normal' + } + }); + + // after the first one, turn the writer off + if (i == 0) { + apiwriter.setEnableWrite(false); + } + } + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/build/requests?requestedFor={person}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?definitionId={definition}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?controllerId={queue}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?maxCompletedAge={age}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?status={status}', function(context, result) { + limitResult(result, DEFAULT_MAX); + }); + + apiwriter.getJson('/build/requests?$top={top}&$skip={skip}'); + + apiwriter.setEnableWrite(false); + apiwriter.getJson('/build/requests?status=Queued', + function (context, result) { + context.requestToDelete = result.responseBody.value[0].id; + /* + context.person = result.responseBody.value[0].requestedBy.uniqueName; + context.definition = context.postBody.definition.id = result.responseBody.value[0].definition.id; + context.queue = result.responseBody.value[0].queue.id; + context.queueTye = result.responseBody.value[0].queue.queueType; + context.status = result.responseBody.value[0].status; + */ + }); + apiwriter.setEnableWrite(true); + apiwriter.patchJson('/build/requests/{request}', { + status: 'Stopped' + }); + + apiwriter.deleteJson('/build/requests/{requestToDelete}', null); +} diff --git a/docs/integrate/api/_scripts/2.0/chatMessages.js b/docs/integrate/api/_scripts/2.0/chatMessages.js new file mode 100644 index 00000000000..6b39ed63e86 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/chatMessages.js @@ -0,0 +1,51 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + roomId: null, + messageId: null, + filter: 'PostedTime ge 10/25/2014 and PostedTime lt 10/28/2014' + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + //get the first room + apiwriter.getJson('/chat/rooms', + function(context, result) { + context.roomId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + //get the list of messages + apiwriter.getJson('/chat/rooms/{roomId}/messages'); + + //get a filtered list of messages + apiwriter.getJson('/chat/rooms/{roomId}/messages?$filter={filter}'); + + // post a new message + apiwriter.postJson('/chat/rooms/{roomId}/messages', + function(context, result) { + return { "content": "Here's a new message" } + }, + function(context, result) { + context.messageId = result.responseBody.id; + } + ); + + // Update the message + apiwriter.patchJson('/chat/rooms/{roomId}/messages/{messageId}', + function(context, result) { + return {"content": "Updated message"} + } + ); + + // get the details of the first message + apiwriter.getJson('/chat/rooms/{roomId}/messages/{messageId}'); + + // Delete the message + apiwriter.deleteJson('/chat/rooms/{roomId}/messages/{messageId}', null); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/chatRooms.js b/docs/integrate/api/_scripts/2.0/chatRooms.js new file mode 100644 index 00000000000..7e292d53e20 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/chatRooms.js @@ -0,0 +1,37 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + roomId: null, + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // Enumerate all existing rooms + apiwriter.getJson('/chat/rooms'); + + // Create a new team room + apiwriter.postJson('/chat/rooms', + function(context, result) { + return { "name": "newCreatedRoom", "description": "used for API doc generation" } + }, + function(context, result) { + context.roomId = result.responseBody.id; + } + ); + + // Update the name and description of the room + apiwriter.patchJson('/chat/rooms/{roomId}', + function(context, result) { + return {"name": "renamedRoom", "description":"updated room description"} + } + ); + + apiwriter.getJson('/chat/rooms/{roomId}'); + + // Delete the created room + apiwriter.deleteJson('/chat/rooms/{roomId}', null); +}; diff --git a/docs/integrate/api/_scripts/2.0/chatUsers.js b/docs/integrate/api/_scripts/2.0/chatUsers.js new file mode 100644 index 00000000000..b53e3fe9f81 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/chatUsers.js @@ -0,0 +1,45 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + roomId: null + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + // Get the current user's profile + apiwriter.getJson('/connectionData', + function(context, result) { + context.userId = result.responseBody.authenticatedUser.id; + } + ); + + // go find the roomId without writing + apiwriter.setEnableWrite(false); + apiwriter.getJson('/chat/rooms', + function(context, result) { + context.roomId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + // Retrieve the list of room users + apiwriter.getJson('/chat/rooms/{roomId}/users'); + + // Get user status + apiwriter.getJson('/chat/rooms/{roomId}/users/{userId}'); + /*, + function(context, result) { + context.userId = result.responseBody.value[0].userId; + });*/ + + // Join and leave the room + apiwriter.putJson('/chat/rooms/{roomId}/users/{userId}', + function(context, result) { + return { 'userId': context.userId } + }); + apiwriter.deleteJson('/chat/rooms/{roomId}/users/{userId}', null); +}; diff --git a/docs/integrate/api/_scripts/2.0/endpoints.js b/docs/integrate/api/_scripts/2.0/endpoints.js new file mode 100644 index 00000000000..d8f502ee2c5 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/endpoints.js @@ -0,0 +1,94 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return {}; +}; + +exports.submitRequests = function() { + apiwriter.setEnableWrite(true); + + // get endpoint types + apiwriter.getJson('/distributedtask/serviceendpointtypes'); + + // Get list of service endpoints + apiwriter.getJson('/distributedtask/serviceendpoints', + function(context, result) { + for (var i = 0; i < result.responseBody.count; i++) { + var endpoint = result.responseBody.value[i]; + if(endpoint.type === "azure") { + context.azureId = endpoint.id; + } + if(endpoint.type === "jenkins") { + context.jenkinsId = endpoint.id; + } + } + }); + + apiwriter.postJson('/distributedtask/serviceendpoints', { + "name": "Fabrikam-Chef", + "type": "chef", + "url": "https://fabrikam-chef:9090", + "authorization": { + "scheme": "UsernamePassword", + "parameters": { + "username": "someUsername", + "password": "somePassword" + } + }, + //"data": {} + }, + function (context, result) { + context.Id = result.responseBody.id; + }); + + apiwriter.getJson('/distributedtask/serviceendpoints/{Id}'); + + apiwriter.putJson('/distributedtask/serviceendpoints/{Id}', { + "name": "Fabrikam-Chef-Updated", + "type": "chef", + "url": "https://fabrikam-chef-updated:9090", + "authorization": { + "scheme": "UsernamePassword", + "parameters": { + "username": "someUsername", + "password": "somePassword" + } + } + }); + + apiwriter.deleteJson('/distributedtask/serviceendpoints/{Id}', {}); + + // serviceendpointproxy api is getting replaced by a new api + /*apiwriter.postJson('/distributedtask/serviceendpointproxy', + function(context, options) { + return { + "dataSourceName": "AzureHostedServiceNames", + "endpointId": context.azureId + } + }); + + apiwriter.postJson('/distributedtask/serviceendpointproxy', + function(context, options) { + return { + "dataSourceName": "Jobs", + "endpointId": context.jenkinsId, + "resultTemplate": '{ "Value" : "{{name}}", "DisplayValue" : "{{{displayName}}}" }' + } + }, + function(context, result) { + console.log(result.responseBody.value[0]); + console.log(JSON.parse(result.responseBody.value[0])); + context.jenkinsJob = JSON.parse(result.responseBody.value[0]).Value; + }); + + apiwriter.postJson('/distributedtask/serviceendpointproxy', + function(context, options) { + return { + "dataSourceName": "Builds", + "endpointId": context.jenkinsId, + "parameters": { + "definition": context.jenkinsJob + } + } + });*/ +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/gallery.js b/docs/integrate/api/_scripts/2.0/gallery.js new file mode 100644 index 00000000000..415b265ba8a --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gallery.js @@ -0,0 +1,45 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + + }; +}; + + +exports.submitRequests = function() +{ + // Get available built-in extensions + apiwriter.getJson('/public/extensions/builtin', + function(context, result) { + return { "name": "AnotherRepository", "project": _getProj(context) } + }, + function(context, result) { + context.repositoryId = result.responseBody.id; + context.repositoryName = result.responseBody.name; + } + ); + + // Get details about the new repository + apiwriter.getJson('/git/repositories/{repositoryId}'); + +// apiwriter.getJson('/git/{projectId}/repositories/{repositoryName}'); + + // Get a list of repositories + apiwriter.getJson('/git/repositories'); + + /*apiwriter.getJson('/git/{projectId}/repositories', + function (context, result) { + context.projName = result.responseBody.value[0].project.name; + });*/ + + // Update a repository + apiwriter.patchJson('/git/repositories/{repositoryId}', + function(context, result) { + return {"name": "RenamedRepository"} + } + ); + + // Delete a repository + apiwriter.deleteJson('/git/repositories/{repositoryId}', null); +} diff --git a/docs/integrate/api/_scripts/2.0/genallapis.cmd b/docs/integrate/api/_scripts/2.0/genallapis.cmd new file mode 100644 index 00000000000..d9d925e9a73 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/genallapis.cmd @@ -0,0 +1,41 @@ +@echo off + +set version=1.0 + +node genapi.js --cfgScripts=accounts.js,profiles.js --cfgApisUrl=%1 --cfgApiVersion=%version% + +node genapi.js --cfgScripts=buildBuilds.js,buildDefinitions.js,buildQualities.js,buildQueues.js,buildRequests.js + +node genapi.js --cfgScripts=chatMessages.js,chatRooms.js,chatUsers.js + +node genapi.js --cfgScripts=gitBlobs.js,gitBranchStats.js,gitCommitDiffs.js,gitCommits.js,gitItems.js,gitPullRequests.js,gitPushes.js,gitRefs.js,gitRepositories.js,gitTrees.js + +node genapi.js --cfgScripts=hooks.js + +identityMru.js +taggingTags.js + +projectCollections.js +projects.js +teams.js +teamMembers.js + +reporting.js + +testPlans.js +testPoints.js +testResults.js +testRuns.js +testSuites.js + +tfvcBranches.js +tfvcChangesets.js +tfvcItems.js +tfvcLabels.js +tfvcShelvesets.js +tfvcWorkspaces.js + +witAttachments.js +witMetadata.js +witQueries.js +witWorkItems.js diff --git a/docs/integrate/api/_scripts/2.0/gitBlobs.js b/docs/integrate/api/_scripts/2.0/gitBlobs.js new file mode 100644 index 00000000000..db97822f591 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitBlobs.js @@ -0,0 +1,46 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + objectId: null, + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + //find a tree under the root and get its sha1 + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath=/MyWebSite/MyWebSite/Views/Home/_Home.cshtml', + function(context, result) { + //get items from request + var items = result.responseBody.value; + //pick the first non-root tree + for (var i = 0 ; i < items.length ; i++) + { + if (items[i].gitObjectType == "blob" && items[i].path != "/") + { + context.objectId = items[i].objectId; + break; + } + } + }); + + apiwriter.setEnableWrite(true); + + // Get blob (JSON metadata) + apiwriter.getJson('/git/repositories/{repositoryId}/blobs/{objectId}'); + + // Get blob (stream) + //apiwriter.getJson('/git/repositories/{repositoryId}/blobs/{objectId}?$format=OctetStream'); + + // Get blob (zip) + //apiwriter.getJson('/git/repositories/{repositoryId}/blobs/{objectId}?$format=zip'); + +} diff --git a/docs/integrate/api/_scripts/2.0/gitBranchStats.js b/docs/integrate/api/_scripts/2.0/gitBranchStats.js new file mode 100644 index 00000000000..41dcce904d3 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitBranchStats.js @@ -0,0 +1,31 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + name: null, + baseVersionType: "Commit", + baseVersion: "67cae2b029dff7eb3dc062b49403aaedca5bad8d" + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/git/repositories/{repositoryId}/stats/branches', + function(context, result) { + context.name = result.responseBody.value[0].name; + }); + + apiwriter.getJson('/git/repositories/{repositoryId}/stats/branches/{name}'); + + apiwriter.getJson('/git/repositories/{repositoryId}/stats/branches/{name}?baseVersionType={baseVersionType}&baseVersion={baseVersion}'); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/gitCommitDiffs.js b/docs/integrate/api/_scripts/2.0/gitCommitDiffs.js new file mode 100644 index 00000000000..63c556c09e1 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitCommitDiffs.js @@ -0,0 +1,72 @@ +var apiwriter = require('apiwriter'); +var _ = require('underscore'); + +var preferredRepositoryName = 'Fabrikam-Fiber-Git'; + +exports.getContext = function() { + return { + projectName: null, + repositoryId: null, + repositoryName: null, + baseVersion: null, + baseVersionType: null, + targetVersion: null, + targetVersionType: null, + top: 2, + skip: 2 + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + // For purposes of documenting, look for the preferred repo (fabrikam-fiber-inc) + var repo = _.findWhere(result.responseBody.value, { "name": preferredRepositoryName }); + // If not found, default to first repo returned + if (_.isUndefined(repo)) { + repo = result.responseBody.value[0]; + } + + context.repositoryId = repo.id; + context.repositoryName = repo.name; + context.projectName = repo.project.name; + }); + + apiwriter.getJson('/git/repositories/{repositoryId}/refs/heads', + function(context, result) { + context.baseVersion = result.responseBody.value[0].name.substring(11); + context.targetVersion = result.responseBody.value[1].name.substring(11); + }); + + apiwriter.setEnableWrite(true); + + // by repo ID + apiwriter.getJson('/git/repositories/{repositoryId}/diffs/commits?targetVersion={targetVersion}&baseVersion={baseVersion}'); + + // by repo name + //apiwriter.getJson('/git/{projectName}/repositories/{repositoryName}/diffs/commits?targetVersion={targetVersion}&baseVersion={baseVersion}'); + + // In pages + apiwriter.getJson('/git/repositories/{repositoryId}/diffs/commits?targetVersion={targetVersion}&baseVersion={baseVersion}' + + '&$top={top}&$skip={skip}'); + + apiwriter.setEnableWrite(false); + + // For commit diffs + apiwriter.getJson('/git/repositories/{repositoryId}/commits', + function(context, result) { + // hard-coded for now. + context.baseVersion = 'c093714168cdd190c1e171a803e996d685454352'; + context.baseVersionType = 'commit'; + context.targetVersion = '2f271272a1548da5a6507b4a29f3af943094c6b4'; + context.targetVersionType = 'commit'; + }); + + apiwriter.setEnableWrite(true); + + //apiwriter.getJson('/git/repositories/{repositoryId}/diffs/commits?baseVersionType=commit&baseVersion=c093714168cdd190c1e171a803e996d685454352&targetVersionType=commit&targetVersion=2f271272a1548da5a6507b4a29f3af943094c6b4'); + apiwriter.getJson('/git/repositories/{repositoryId}/diffs/commits?baseVersionType={baseVersionType}&baseVersion={baseVersion}&targetVersionType={targetVersionType}&targetVersion={targetVersion}'); +} diff --git a/docs/integrate/api/_scripts/2.0/gitCommits.js b/docs/integrate/api/_scripts/2.0/gitCommits.js new file mode 100644 index 00000000000..67ed4702f4b --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitCommits.js @@ -0,0 +1,112 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + commitId: null, + repositoryId: null, + committer: null, + author: null, + fromDate: null, + toDate: null, + itemPath: "/MyWebSite/MyWebSite/Views/Home/_Home.cshtml", + repositoryName: null, + projectName: null, + pushId: null, + branch: "develop", + toBranch: "master", + skip: 1, + top: 2, + includeChanges: 5 + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + //get the first repository + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + context.repositoryName = result.responseBody.value[0].name; + context.projectName = result.responseBody.value[0].project.name; + }); + + apiwriter.setEnableWrite(true); + + //get the list of commits + apiwriter.getJson('/git/repositories/{repositoryId}/commits', + function(context, result) { + var firstCommit = result.responseBody.value.length - 1; + context.commitId = result.responseBody.value[firstCommit].commitId; + context.committer = result.responseBody.value[firstCommit].committer.name; + context.author = result.responseBody.value[firstCommit].author.name; + context.fromDate = result.responseBody.value[firstCommit].committer.date; + context.toDate = result.responseBody.value[firstCommit].committer.date; + }); + + //get a list of commits project repository Name + //apiwriter.getJson('/git/{projectName}/repositories/{repositoryName}/commits'); + + //get a filtered list of commits + apiwriter.getJson('/git/repositories/{repositoryId}/commits?user={committer}'); + apiwriter.getJson('/git/repositories/{repositoryId}/commits?committer={committer}'); + apiwriter.getJson('/git/repositories/{repositoryId}/commits?author={author}'); + apiwriter.getJson('/git/repositories/{repositoryId}/commits?fromDate={fromDate}&toDate={toDate}'); + + //paging example + apiwriter.getJson('/git/repositories/{repositoryId}/commits?$skip={skip}&$top={top}'); + + //get the details of the first commit + apiwriter.getJson('/git/repositories/{repositoryId}/commits/{commitId}?changeCount=10', + function(context, result) { + context.skip = result.responseBody.changes.length; + context.pushId = result.responseBody.push.pushId; + }); + + //get some more changes from the first commit + apiwriter.getJson('/git/repositories/{repositoryId}/commits/{commitId}/changes?top={top}&skip={skip}'); + + //single commit with path filter + apiwriter.getJson('/git/repositories/{repositoryId}/commits?itemPath={itemPath}'); + +/* TODO: Fix this when proper project-scoped routes are live (M73) + //single commit with friendly repository name + apiwriter.getJson('/git/{projectName}/repositories/{repositoryName}/commits/{commitId}'); */ + + //single commit + apiwriter.getJson('/git/repositories/{repositoryId}/commits/{commitId}'); + + //commits from a push + apiwriter.getJson('/git/repositories/{repositoryId}/pushes/{pushId}/commits'); + + //commits in a version + apiwriter.postJson('/git/repositories/{repositoryId}/commitsBatch', + function (context, result) { + return { + 'itemPath': context.itempath, + 'itemVersion': { + 'versionType': 'branch', + 'version': context.branch + } + } + } + ); + + //commits in a version + apiwriter.postJson('/git/repositories/{repositoryId}/commitsBatch', + function (context, result) { + return { + 'itemPath': context.itempath, + 'itemVersion': { + 'versionType': 'branch', + 'version': context.branch + }, + 'compareVersion': { + 'versionType': 'branch', + 'version': context.toBranch + } + } + } + ); +}; diff --git a/docs/integrate/api/_scripts/2.0/gitItems.js b/docs/integrate/api/_scripts/2.0/gitItems.js new file mode 100644 index 00000000000..036933ec88a --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitItems.js @@ -0,0 +1,109 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + itempath: null, + item_descriptors: null, + folderPath: "/MyWebSite/MyWebSite/Views", + filePath: "/MyWebSite/MyWebSite/Views/Home/_Home.cshtml" + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + //get the top level item and its immediate children including lastestProcessedChange + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={folderPath}&recursionLevel=OneLevel&latestProcessedChange=true', + function(context, result) { + //get path for more detailed GET request + context.itempath = result.responseBody.value[1].path; + //get descriptors for POST + context.item_descriptors = result.responseBody.value.map( + function(item) + { //construct descriptor array to use for post + return { + 'path': item.path, + 'version': item.commitId, + 'versionType': 'commit', + 'versionOptions': 'none', + 'recursionLevel': 'none' + } + }); + //add recursion to one of the tree items + var found = false; + for (var i = 0 ; i < context.item_descriptors.length ; i++) + { + if (result.responseBody.value[i].gitObjectType == "tree" && result.responseBody.value[i].path != "/") + { + context.item_descriptors[i].recursionLevel = 'OneLevel'; + break; + } + } + }); + + //items get, with specific path and metadata + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={itempath}&includeContentMetadata=true' + + '&version=master&versionType=branch'); + + apiwriter.setEnableWrite(true); + + //batch get, different items, recursion on one + apiwriter.postJson('/git/repositories/{repositoryId}/itemsBatch', + function(context, result) { + return {'itemDescriptors': context.item_descriptors, 'includeContentMetadata': 'true'} + } + ); + + //specific item (folder) + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={folderPath}'); + + //specific file + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={filePath}'); + + //downloadable file + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={filePath}&download=true'); + + //one level + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={folderPath}&recursionLevel=OneLevel'); + + //full + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath={folderPath}&recursionLevel=Full&includeContentMetadata=true'); + + /* + //batch get, same item, different versions + apiwriter.postJson('/git/repositories/{repositoryId}/itemsBatch', + function(context, result) { + return { + 'itemDescriptors': [ + { + 'path': context.itempath, + 'version': 'master', + 'versionType': 'branch', + 'versionOptions': 'none', + }, + { + 'path': context.itempath, + 'version': 'master', + 'versionType': 'branch', + 'versionOptions': 'previousChange', + }, + { + 'path': context.itempath, + 'version': 'master', + 'versionType': 'branch', + 'versionOptions': 'firstParent', + } + + ] + } + } + ); + */ +} diff --git a/docs/integrate/api/_scripts/2.0/gitPullRequests.js b/docs/integrate/api/_scripts/2.0/gitPullRequests.js new file mode 100644 index 00000000000..830ce998bee --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitPullRequests.js @@ -0,0 +1,107 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + pullRequestId: null, + repositoryId: null, + devBranchName: 'refs/heads/npaulk/feature', + masterBranchName: 'refs/heads/master', + initialReviewerId: '3b5f0c34-4aec-4bf4-8708-1d36f0dbc468', /* christie church on fabrikam-fiber-inc */ + initialReviewerUserName: 'fabrikamfiber1@hotmail.com', + initialReviewerPassword: process.env.cfgPassword, + additionalReviewerId: '19d9411e-9a34-45bb-b985-d24d9d87c0c9', /* johnny mcleaod */ + createdBy: null, + lastMergeSourceCommit: null, + top: null, + skip: null + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + //get the first repository + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + context.friendlyName = result.responseBody.value[0].name; + context.projectName = result.responseBody.value[0].project.name; + }); + + apiwriter.setEnableWrite(true); + + //create a pull request + apiwriter.postJson('/git/repositories/{repositoryId}/pullRequests', + function(context, result) { + return {"sourceRefName": context.devBranchName, "targetRefName": context.masterBranchName, "title": "New fix for hello world class", + "description": "Example pull request showing review and integration of a simple change.", + "reviewers": [ { "id": context.initialReviewerId } ] }; + }, + function(context, result) { + context.pullRequestId = result.responseBody.pullRequestId; + context.creatorId = result.responseBody.createdBy.Id; + context.lastMergeSourceCommit = result.responseBody.lastMergeSourceCommit; + } + ); + + //get the list of pull requests + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests'); + + //get the list of pull requests by target branch + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests?targetRefName=refs/heads/master'); + + //get a detailed pull request + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}'); + + //get reviewers + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers'); + + // add a reviewer + apiwriter.putJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{additionalReviewerId}', + function(context, result) { + return { "vote": 0 } + }, + function(context, result) { + } + ); + + //get a reviewer + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{additionalReviewerId}'); + + // delete a reviewer + apiwriter.deleteJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{additionalReviewerId}', null); + + // update a vote + apiwriter.putJsonEx('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{initialReviewerId}', + function(context, result) { + return { "vote": 10 }; + }, + function(context, options) { + //options.headers["Authentication"] = "Basic " + new Buffer(context.initialReviewerUserName + ":" + process.env.cfgPassword).toString('base64'); + options.auth.username = context.initialReviewerUserName; + }, + function(context, result) { + } + ); + + // get iterations + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/iterations'); + + // approve/complete + apiwriter.patchJsonEx('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}', + function(context, result) { + return {"status":"completed", "lastMergeSourceCommit": context.lastMergeSourceCommit } + }, + function(context, options) { + //options.headers["Authentication"] = "Basic " + new Buffer(context.initialReviewerUserName + ":" + process.env.cfgPassword).toString('base64'); + options.auth.username = process.env.cfgUserName; + }, + function(context, result) { + } + ); + + //get the list of pull requests by status + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests?status=completed'); +}; + diff --git a/docs/integrate/api/_scripts/2.0/gitPushes.js b/docs/integrate/api/_scripts/2.0/gitPushes.js new file mode 100644 index 00000000000..9b365f91e62 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitPushes.js @@ -0,0 +1,63 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + pushId: null, + repositoryId: null, + repositoryName: null, + projectName: null, + fromDate: "2014-01-15", + toDate: "2014-02-01T14:00", + pusherId: null, + refName: 'refs/heads/develop', + skip: 2, + top: 2 + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + //get the first repository + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + context.repositoryName = result.responseBody.value[0].name; + context.projectName = result.responseBody.value[0].project.name; + }); + + apiwriter.setEnableWrite(true); + + //get the list of pushes + apiwriter.getJson('/git/repositories/{repositoryId}/pushes', + function(context, result) { + context.pushId = result.responseBody.value[0].pushId; + context.pusherId = result.responseBody.value[0].pushedBy.id; + }); + + //get the list of pushes using the repository name + //apiwriter.getJson('/git/{projectName}/repositories/{repositoryName}/pushes'); + + //get the details of the first push + apiwriter.getJson('/git/repositories/{repositoryId}/pushes/{pushId}'); + + // in a date range + apiwriter.getJson('/git/repositories/{repositoryId}/pushes?fromDate={fromDate}&toDate={toDate}'); + + // in a page + apiwriter.getJson('/git/repositories/{repositoryId}/pushes?$skip={skip}&$top={top}'); + + // by pusher + apiwriter.getJson('/git/repositories/{repositoryId}/pushes?pusherId={pusherId}'); + + // for a particular ref name + apiwriter.getJson('/git/repositories/{repositoryId}/pushes?refName={refName}&includeRefUpdates=true'); + + //get the first push using the repository name + //apiwriter.getJson('/git/repositories/{repositoryId}/pushes/{pushId}'); + + //get the refs that were updated for the first push + apiwriter.getJson('/git/repositories/{repositoryId}/pushes/{pushId}?includeRefUpdates=true'); + +}; diff --git a/docs/integrate/api/_scripts/2.0/gitRefs.js b/docs/integrate/api/_scripts/2.0/gitRefs.js new file mode 100644 index 00000000000..a6635ab3a05 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitRefs.js @@ -0,0 +1,33 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + filter: null, + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + // Get all refs + apiwriter.getJson('/git/repositories/{repositoryId}/refs', + function(context, result) { + context.filter = result.responseBody.value[0].name.substring(5); + }); + + // Get all branches + apiwriter.getJson('/git/repositories/{repositoryId}/refs/heads'); + + // Get all tags + apiwriter.getJson('/git/repositories/{repositoryId}/refs/tags'); + +} diff --git a/docs/integrate/api/_scripts/2.0/gitRepositories.js b/docs/integrate/api/_scripts/2.0/gitRepositories.js new file mode 100644 index 00000000000..60817a43140 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitRepositories.js @@ -0,0 +1,53 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + repositoryName: null, + projectId: this.getConfig().getProjectId() + }; +}; + +var _getProj = function (context) { + return { + "id": context.projectId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + // Create a repository + apiwriter.postJson('/git/repositories', + function(context, result) { + return { "name": "AnotherRepository", "project": _getProj(context) } + }, + function(context, result) { + context.repositoryId = result.responseBody.id; + context.repositoryName = result.responseBody.name; + } + ); + + // Get details about the new repository + apiwriter.getJson('/git/repositories/{repositoryId}'); + +// apiwriter.getJson('/git/{projectId}/repositories/{repositoryName}'); + + // Get a list of repositories + apiwriter.getJson('/git/repositories'); + + /*apiwriter.getJson('/git/{projectId}/repositories', + function (context, result) { + context.projName = result.responseBody.value[0].project.name; + });*/ + + // Update a repository + apiwriter.patchJson('/git/repositories/{repositoryId}', + function(context, result) { + return {"name": "RenamedRepository"} + } + ); + + // Delete a repository + apiwriter.deleteJson('/git/repositories/{repositoryId}', null); +} diff --git a/docs/integrate/api/_scripts/2.0/gitTrees.js b/docs/integrate/api/_scripts/2.0/gitTrees.js new file mode 100644 index 00000000000..d9ccc367694 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/gitTrees.js @@ -0,0 +1,40 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + objectId: null, + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/git/repositories', + function(context, result) { + context.repositoryId = result.responseBody.value[0].id; + }); + + //find a tree under the root and get its sha1 + apiwriter.getJson('/git/repositories/{repositoryId}/items?scopePath=/MyWebSite/MyWebSite/Views', + function(context, result) { + //get items from request + var items = result.responseBody.value; + //pick the first non-root tree + for (var i = 0 ; i < items.length ; i++) + { + if (items[i].gitObjectType == "tree" && items[i].path != "/") + { + context.objectId = items[i].objectId; + break; + } + } + }); + + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/git/repositories/{repositoryId}/trees/{objectId}'); + + apiwriter.getJson('/git/repositories/{repositoryId}/trees/{objectId}?recursive=true'); +} diff --git a/docs/integrate/api/_scripts/2.0/hooks.js b/docs/integrate/api/_scripts/2.0/hooks.js new file mode 100644 index 00000000000..27027dc9b1a --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/hooks.js @@ -0,0 +1,126 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + consumerId: null, + publisherId: null, + eventTypeId: null, + consumerActionId: null, + newSubscriptionId: null, + newSubscription: null + }; +}; + +exports.submitRequests = function() +{ + + apiwriter.getJson('/hooks/consumers', + function(context, result) { + context.consumerId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/consumers/{consumerId}'); + + apiwriter.getJson('/hooks/consumers/{consumerId}/actions', + function(context, result) { + context.consumerActionId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/consumers/{consumerId}/actions/{consumerActionId}'); + + apiwriter.getJson('/hooks/publishers', + function(context, result) { + context.publisherId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/publishers/{publisherId}/eventTypes', + function(context, result) { + context.eventTypeId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/publishers/{publisherId}/eventTypes/{eventTypeId}'); + + + apiwriter.getJson('/hooks/subscriptions/', + function(context, result) { + context.subscriptionId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/hooks/subscriptions/{subscriptionId}'); + + // Create dummy web hook subscription + apiwriter.postJson('/hooks/subscriptions', + function(context, result) { + return { + "publisherId": "tfs", + "eventType": "build.complete", + "resourceVersion": "1.0-preview.1", + "consumerId": "webHooks", + "consumerActionId": "httpRequest", + "publisherInputs": { + "buildStatus": "Failed", + "definitionName": "MyWebSite CI", + "projectId": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + }, + "consumerInputs": { + "url": "https://myservice/myhookeventreceiver" + } + } + }, + function(context, result) { + context.newSubscriptionId = result.responseBody.id; + context.newSubscription = result.responseBody; + } + ); + + // update the dummy subscription + apiwriter.putJson('/hooks/subscriptions/{newSubscriptionId}', + function(context, result) { + context.newSubscription.consumerInputs.url = "https://myservice/newreceiver" + return context.newSubscription; + } + ); + + // delete the dummy subscription + apiwriter.deleteJson('/hooks/subscriptions/{newSubscriptionId}', null); + + + + /*apiwriter.postJson('/git/repositories', + function(context, result) { + return { "name": "newCreatedRepo1", "project": _getProj(context) } + }, + function(context, result) { + context.repoId = result.responseBody.id; + } + ); + + apiwriter.getJson('/git/repositories/{repoId}'); + + apiwriter.postJson('/git/repositories', + function(context, result) { + return { "name": "newCreatedRepo2", "project": _getProj(context) } + }, + function(context, result) { + context.created2Id = result.responseBody.id; + } + ); + + apiwriter.patchJson('/git/repositories/{repoId}', + function(context, result) { + return {"name": "renamedRepo"} + } + ); + + apiwriter.getJson('/git/repositories'); + apiwriter.getJson('/git/{projId}/repositories', + function(context, result) { + context.projName = result.responseBody.value[0].project.name; + }); + + apiwriter.deleteJson('/git/repositories/{repoId}', null); + + apiwriter.setEnableWrite(false); + apiwriter.deleteJson('/git/repositories/{created2Id}', null); + apiwriter.setEnableWrite(true);*/ +} diff --git a/docs/integrate/api/_scripts/2.0/identityMru.js b/docs/integrate/api/_scripts/2.0/identityMru.js new file mode 100644 index 00000000000..fef78c6cdb3 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/identityMru.js @@ -0,0 +1,59 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + projectId: null, + userId: null + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(false); + + // get the project ID + apiwriter.getJson('/projects', + function (context, result) { + context.projectId = result.responseBody.value[0].id; + } + ); + + // Get the current user ID + apiwriter.getJson('/connectionData', + function (context, result) { + context.userId = result.responseBody.authenticatedUser.id; + } + ); + + apiwriter.setEnableWrite(true); + + // get the initial list of identities in the MRU + apiwriter.getJson('/core/identityMru/{projectId}'); + + // Add current user to MRU + apiwriter.postJson('/core/identityMru/{projectId}', + function(context,result) { + return { + "identityIds": [ + context.userId + ] + } + } + ); + + // get the updated list of identities in the MRU + apiwriter.getJson('/core/identityMru/{projectId}'); + + // Remove current user from MRU + apiwriter.deleteJson('/core/identityMru/{projectId}', + function (context, result) { + return { + "identityIds": [ + context.userId + ] + } + } + ); + + // get the updated list of identities in the MRU + apiwriter.getJson('/core/identityMru/{projectId}'); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/operations.js b/docs/integrate/api/_scripts/2.0/operations.js new file mode 100644 index 00000000000..4040846d2a9 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/operations.js @@ -0,0 +1,35 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + skip: 1, + top: 1, + state: "All" + }; +}; + +exports.submitRequests = function () { + + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/projects', + function(context, result) { + context.projectId = result.responseBody.value[0].id; + context.projectName = result.responseBody.value[0].name; + } + ); + + apiwriter.patchJson('/projects/{projectId}', + function(context, result) { + return {"description": ""} + }, + function(context, result) { + context.operationId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/operations/{operationId}'); + +} diff --git a/docs/integrate/api/_scripts/2.0/packagingFeedIndex.js b/docs/integrate/api/_scripts/2.0/packagingFeedIndex.js new file mode 100644 index 00000000000..27db53f8257 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/packagingFeedIndex.js @@ -0,0 +1,26 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + feedName: "EngineeringInternal", + packageId: "e3d6b8ad-9a15-40cf-ab6c-d08a409bba6b", + versionId: "b8a2a277-f77b-4ef2-acfd-0c0e550af5f7" + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // get all packages in a feed + apiwriter.getJson('/packaging/feeds/{feedName}/packages') + + // get a packages in a feed + apiwriter.getJson('/packaging/feeds/{feedName}/packages/{packageId}/') + + // get all versions of a package + apiwriter.getJson('/packaging/feeds/{feedName}/packages/{packageId}/versions') + + // get a single version of a package + apiwriter.getJson('/packaging/feeds/{feedName}/packages/{packageId}/versions/{versionId}') +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/packagingFeeds.js b/docs/integrate/api/_scripts/2.0/packagingFeeds.js new file mode 100644 index 00000000000..1fcdfc4222f --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/packagingFeeds.js @@ -0,0 +1,47 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + feedName: "EngineeringInternal", + feedName2: "LegacyEngineeringInternal", + description: "Contains packages internal to the engineering organization", + description2: "Contains legacy packages internal to the engineering organization" + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // post a new feed + apiwriter.postJson('/packaging/feeds?api-version=2.0-preview', + function(context, result) { + return { + "name" : context.feedName, + "description" : context.description + } + }, + function(context, result) { + context.feedId = result.responseBody.id; + } + ); + + //get the list of feeds + apiwriter.getJson('/packaging/feeds/{feedName}') + + //get the list of feeds + apiwriter.getJson('/packaging/feeds') + + // update a feed + apiwriter.patchJson('/packaging/feeds/{feedId}?api-version=2.0-preview', + function(context, result) { + return { + "name" : context.feedName2, + "description" : context.description2 + } + } + ); + + // Delete the feed + apiwriter.deleteJson('/packaging/feeds/{feedId}?api-version=2.0-preview', null); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/packagingNpmPackages.js b/docs/integrate/api/_scripts/2.0/packagingNpmPackages.js new file mode 100644 index 00000000000..668fd9beac3 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/packagingNpmPackages.js @@ -0,0 +1,70 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + feedName: "contoso", + feedView: "release", + packageName: "bootstrap", + packageVersion: "3.3.6", + scope: "@myscope" + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // get the package + apiwriter.getJson('/packaging/feeds/{feedName}/npm/{packageName}/versions/{packageVersion}/'); + + // get the scoped package + apiwriter.getJson('/packaging/feeds/{feedName}/npm/{scope}/{packageName}/versions/{packageVersion}/'); + + // download the package + apiwriter.reqEx('GET', '/packaging/feeds/{feedName}/npm/packages/{packageName}/versions/{packageVersion}/content', null, null, null, true); + + // download the scoped package + apiwriter.reqEx('GET', '/packaging/feeds/{feedName}/npm/packages/{scope}/{packageName}/versions/{packageVersion}/content', null, null, null, true); + + // release the package + apiwriter.patchJson('/packaging/feeds/{feedName}/npm/{packageName}/versions/{packageVersion}/', + function(context, result) { + return { + "views" : { "op" : "add", "path" : "/views/-", "value" : context.feedView } + } + } + ); + + // release the scoped package + apiwriter.patchJson('/packaging/feeds/{feedName}/npm/{scope}/{packageName}/versions/{packageVersion}/', + function(context, result) { + return { + "views" : { "op" : "add", "path" : "/views/-", "value" : context.feedView } + } + } + ); + + // deprecate the package + apiwriter.patchJson('/packaging/feeds/{feedName}/npm/{packageName}/versions/{packageVersion}/', + function(context, result) { + return { + "deprecateMessage" : "This package has been deprecated. Please use version 3.3.7 instead." + } + } + ); + + // deprecate the scoped package + apiwriter.patchJson('/packaging/feeds/{feedName}/npm/{scope}/{packageName}/versions/{packageVersion}/', + function(context, result) { + return { + "deprecateMessage" : "This package has been deprecated. Please use version 3.3.7 instead." + } + } + ); + + // unpublish the package + apiwriter.deleteJson('/packaging/feeds/{feedName}/npm/{packageName}/versions/{packageVersion}/', null); + + // unpublish the scoped package + apiwriter.deleteJson('/packaging/feeds/{feedName}/npm/{scope}/{packageName}/versions/{packageVersion}/', null); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/packagingNuGetPackages.js b/docs/integrate/api/_scripts/2.0/packagingNuGetPackages.js new file mode 100644 index 00000000000..8e3b9ee1db3 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/packagingNuGetPackages.js @@ -0,0 +1,48 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + feedName: "fabrikam", + feedView: "release", + packgeName: "bootstrap", + packageVersion: "3.3.6", + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // get package version details + apiwriter.getJson('/packaging/feeds/{feedName}/nuget/packages/{packgeName}/versions/{packageVersion}/'); + + // unlist the package + apiwriter.patchJson('/packaging/feeds/{feedName}/nuget/packages/{packgeName}/versions/{packageVersion}/', + function(context, result) { + return { + "listed" : "false" + } + } + ); + + // relist the package + apiwriter.patchJson('/packaging/feeds/{feedName}/nuget/packages/{packgeName}/versions/{packageVersion}/', + function(context, result) { + return { + "listed" : "true" + } + } + ); + + // promote the package + apiwriter.patchJson('/packaging/feeds/{feedName}/nuget/packages/{packgeName}/versions/{packageVersion}/', + function(context, result) { + return { + "views" : { "op" : "add", "path" : "/views/-", "value" : context.feedView } + } + } + ); + + // delete the package + apiwriter.deleteJson('/packaging/feeds/{feedName}/nuget/packages/{packgeName}/versions/{packageVersion}/', null); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/packagingPermissions.js b/docs/integrate/api/_scripts/2.0/packagingPermissions.js new file mode 100644 index 00000000000..e777f5adbb0 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/packagingPermissions.js @@ -0,0 +1,52 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + feedName: 'EngineeringInternal' + } +} + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // get feed permissions + apiwriter.getJson('/packaging/feeds/{feedName}/permissions') + + // get global feed permissions + apiwriter.getJson('/packaging/globalpermissions') + + // update feed permissions + apiwriter.patchJson('/packaging/feeds/{feedName}/permissions', function (context, options) { + return [ + { + "role":3, + "identityDescriptor":"Microsoft.TeamFoundation.Identity;S-1-9-1551374245-2520422648-1909688902-2986275227-4210569620-1-653012555-3795782475-2724694617-2471557501" + } + ] + }) + + // Everyone can create feeds + apiwriter.patchJson('/packaging/globalpermissions', function(context, options) { + return [ + { + identityDescriptor: 'Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-3', + role: 2 + }, + { + identityDescriptor: 'Microsoft.IdentityModel.Claims.ClaimsIdentity;afd9e15b-cb4a-4adb-931b-8cc520a03c36', + role: 1 + } + ] + }) + + // Remove permissions from Everyone + apiwriter.patchJson('/packaging/globalpermissions', function(context, options) { + return [ + { + identityDescriptor: 'Microsoft.TeamFoundation.Identity;S-1-9-1551374245-1204400969-2402986413-2179408616-0-0-0-0-3', + role: 1 + } + ] + }) +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/packagingViews.js b/docs/integrate/api/_scripts/2.0/packagingViews.js new file mode 100644 index 00000000000..0a75645f368 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/packagingViews.js @@ -0,0 +1,43 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + feedName: "fabrikam", + viewName: "Alpha", + viewType: "release", + newViewName: "Beta" + }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // get the list of release views + apiwriter.getJson('/packaging/feeds/{feedName}/views') + + // post a new release view + apiwriter.postJson('/packaging/feeds/{feedName}/views', + function(context, result) { + return { + "name" : context.viewName, + "type" : context.viewType + } + } + ); + + // get the release view + apiwriter.getJson('/packaging/feeds/{feedName}/views/{viewName}') + + // update a release view + apiwriter.patchJson('/packaging/feeds/{feedName}/views/{viewName}', + function(context, result) { + return { + "name" : context.newViewName + } + } + ); + + // delete the release view + apiwriter.deleteJson('/packaging/feeds/{feedName}/views/{newViewName}', null); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/profiles.js b/docs/integrate/api/_scripts/2.0/profiles.js new file mode 100644 index 00000000000..2767f305a69 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/profiles.js @@ -0,0 +1,18 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { }; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(true); + + // Get profile + apiwriter.getJson('/profile/profiles/me'); + + // Get profile avatar + apiwriter.getJson('/profile/profiles/me/avatar'); + + +}; diff --git a/docs/integrate/api/_scripts/2.0/projectCollections.js b/docs/integrate/api/_scripts/2.0/projectCollections.js new file mode 100644 index 00000000000..7d6f4512a94 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/projectCollections.js @@ -0,0 +1,25 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + skip: 1, + top: 2 + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/projectCollections', + function(context, result) { + context.collectionId = result.responseBody.value[0].id; + } + ); + + // specific collection + apiwriter.getJson('/projectCollections/{collectionId}'); + + // pages + apiwriter.getJson('/projectCollections/{collectionId}?$top={top}&$skip={skip}'); + +} diff --git a/docs/integrate/api/_scripts/2.0/projects.js b/docs/integrate/api/_scripts/2.0/projects.js new file mode 100644 index 00000000000..8501742e205 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/projects.js @@ -0,0 +1,71 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + skip: 1, + top: 1, + state: "All" + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/projects', + function(context, result) { + context.projectId = result.responseBody.value[0].id; + context.projectName = result.responseBody.value[0].name; + } + ); + + // By name + apiwriter.getJson('/projects/{projectName}'); + + // pages + apiwriter.getJson('/projects?$top={top}&$skip={skip}'); + + // state filter + apiwriter.getJson('/projects?stateFilter={state}'); + + // Without capabilities + apiwriter.getJson('/projects/{projectName}?includeCapabilities=true'); + + + apiwriter.patchJson('/projects/{projectId}', + function(context, result) { + return {"description": "Team Foundation Version Control projects."} + } + ); + + //update description + apiwriter.patchJson('/projects/{projectId}', + function(context, result) { + return {"description": "Team Foundation Version Control projects."} + } + ); + + //update name + apiwriter.patchJson('/projects/{projectId}', + function(context, result) { + return {"name": "Fabrikam-Fiber"} + } + ); + + // Create a project + apiwriter.postJson('/projects', + function(context, result) { + return { + "name": "FabrikamTravel", + "description": "Frabrikam travel app for Windows Phone", + "capabilities": { + "versioncontrol": { + "sourceControlType": "Git" + }, + "processTemplate": { + "templateTypeId": "6b724908-ef14-45cf-84f8-768b5384da45" + } + } + } + } + ); +} diff --git a/docs/integrate/api/_scripts/2.0/reporting.js b/docs/integrate/api/_scripts/2.0/reporting.js new file mode 100644 index 00000000000..342a0133554 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/reporting.js @@ -0,0 +1,179 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + projectName: null, + scope: "WorkitemTracking.Queries", + myQueriesGuid: null, + queryId: null, + snapshotConfig: null, + pivotConfig: null, + trendConfig: null, + snapshotChartId: null, + trendChartId: null, + pivotChartId: null + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(false); + + // Get the current project + apiwriter.getJson('/projects', + function (context, result) { + context.projectName = result.responseBody.value[10].name; //Should be project 0 + } + ); + + apiwriter.getJson('/wit/{projectName}/queries', + function (context, result) { + context.myQueriesGuid = result.responseBody.value[0].id; + } + ); + + // Create a query + apiwriter.postJson('/wit/{projectName}/queries', + function (context, result) { + return { + "name": "Active tasks", + "parentId": context.myQueriesGuid, + "wiql": "Select [System.Id], [System.Title], [System.State], [System.AssignedTo], [Microsoft.VSTS.Scheduling.RemainingWork] From WorkItems Where [System.WorkItemType] = 'Task' AND ([System.State] = 'Active' OR [System.State] = 'In Progress') order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" + } + }, + function (context, result) { + context.queryId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/Reporting/DataServiceCapabilities/{scope}') + + // Create a snapshot bar chart + apiwriter.postJson('/Reporting/ChartConfiguration', + function (context, result) { + return { + "scope": context.scope, + "groupKey": context.queryId, + "title": "Bar by state", + "chartType": "BarChart", + "transformOptions": { + "filter": context.queryId, + "groupBy": "System.State", + "orderBy": { + "direction": "ascending", + "propertyName": "value" + }, + "measure": { + "aggregation": "count", + "propertyName": "" + }, + }, + "userColors": null + } + }, + function (context, result) { + context.snapshotConfig = result.responseBody.chartConfiguration; + context.snapshotChartId = result.responseBody.chartConfiguration.chartId; + } + ); + + // Create a snapshot pivot table + apiwriter.postJson('/Reporting/ChartConfiguration', + function (context, result) { + return { + "scope": context.scope, + "groupKey": context.queryId, + "title": "Pivot by state and assigned to", + "chartType": "PivotTable", + "transformOptions": { + "filter": context.queryId, + "groupBy": "System.State", + "series": "System.AssignedTo", + "orderBy": { + "direction": "ascending", + "propertyName": "value" + }, + "measure": { + "aggregation": "count", + "propertyName": "" + }, + }, + "userColors": null + } + }, + function (context, result) { + context.pivotConfig = result.responseBody.chartConfiguration; + context.pivotChartId = result.responseBody.chartConfiguration.chartId; + } + ); + + // Create a trend stack area chart + apiwriter.postJson('/Reporting/ChartConfiguration', + function (context, result) { + return { + "scope": context.scope, + "groupKey": context.queryId, + "title": "Remaining work over time", + "chartType": "StackAreaChart", + "transformOptions": { + "filter": context.queryId, + "groupBy": "System.State", + "historyRange": "last7Days", + "orderBy": { + "direction": "descending", + "propertyName": "value" + }, + "measure": { + "aggregation": "sum", + "propertyName": "Microsoft.VSTS.Scheduling.RemainingWork" + }, + }, + "userColors": null + } + }, + function (context, result) { + context.trendConfig = result.responseBody.chartConfiguration; + context.trendChartId = result.responseBody.chartConfiguration.chartId; + } + ); + + apiwriter.getJson('/Reporting/ChartConfiguration/{snapshotChartId}'); + + apiwriter.putJson('/Reporting/ChartConfiguration/{snapshotChartId}', + function (context, result) { + context.snapshotConfig.userColors = [{ "value": "In Progress", "backgroundColor": "#005F31" }]; + return context.snapshotConfig; + } + ); + + // Enumerate all existing ChartConfigurations + apiwriter.getJson('/Reporting/ChartConfiguration?scope={scope}&groupkey={queryId}'); + + apiwriter.postJson('/Reporting/TransformQuery', + function (context, result) { + context.snapshotConfig.transformOptions.filterContext = { project: context.projectName }; + return [context.snapshotConfig.transformOptions]; + } + ); + + apiwriter.postJson('/Reporting/TransformQuery', + function (context, result) { + context.trendConfig.transformOptions.filterContext = { project: context.projectName }; + return [context.trendConfig.transformOptions]; + } + ); + + apiwriter.postJson('/Reporting/TransformQuery', + function (context, result) { + context.pivotConfig.transformOptions.filterContext = { project: context.projectName }; + return [context.pivotConfig.transformOptions]; + } + ); + + // Cleanup + apiwriter.deleteJson('/Reporting/ChartConfiguration/{pivotChartId}', null); + apiwriter.deleteJson('/Reporting/ChartConfiguration/{snapshotChartId}', null); + apiwriter.deleteJson('/Reporting/ChartConfiguration/{trendChartId}', null); + apiwriter.deleteJson('/wit/{projectName}/queries/{queryId}', null); +}; diff --git a/docs/integrate/api/_scripts/2.0/taggingTags.js b/docs/integrate/api/_scripts/2.0/taggingTags.js new file mode 100644 index 00000000000..badd975f33f --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/taggingTags.js @@ -0,0 +1,52 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + scopeId: this.getConfig().getProjectId(), + tagId: null, + name: null + }; +}; + +exports.submitRequests = function() { + + /*apiwriter.setEnableWrite(false); + + //get the project name + apiwriter.getJson('/projects', + function(context, result) { + context.scopeId = result.responseBody.value[1].id; //Should be project 0 + } + ); + + apiwriter.setEnableWrite(true);*/ + + // Create a new tag + apiwriter.postJson('/tagging/scopes/{scopeId}/tags', + { name: "My Tag" }, + function (context, result) { + context.tagId = result.responseBody.id; + context.name = result.responseBody.name; + } + ); + + // Get the created tag by ID + apiwriter.getJson('/tagging/scopes/{scopeId}/tags/{tagId}'); + + // Get the created tag by name + apiwriter.getJson('/tagging/scopes/{scopeId}/tags/{name}'); + + // Patch the tag + apiwriter.patchJson('/tagging/scopes/{scopeId}/tags/{tagId}', + { name: "My Tag Renamed", active: false } + ); + + // Get full list of tags + apiwriter.getJson('/tagging/scopes/{scopeId}/tags'); + + // Get the list of tags in the scope + apiwriter.getJson('/tagging/scopes/{scopeId}/tags?includeInactive=true'); + + // Delete the tag + apiwriter.deleteJson('/tagging/scopes/{scopeId}/tags/{tagId}', null); +}; diff --git a/docs/integrate/api/_scripts/2.0/teamMembers.js b/docs/integrate/api/_scripts/2.0/teamMembers.js new file mode 100644 index 00000000000..50aa7b47b26 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/teamMembers.js @@ -0,0 +1,27 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return {}; +}; + +exports.submitRequests = function () { + + apiwriter.getJson('/projects/', + function(context, result) { + context.projectId = result.responseBody.value[0].id; + } + ); + + // all teams + apiwriter.getJson('/projects/{projectId}/teams', + function(context, result) { + context.teamId = result.responseBody.value[0].id; + } + ); + + apiwriter.setEnableWrite(true); + + // specific team members + apiwriter.getJson('/projects/{projectId}/teams/{teamId}/members'); + +} diff --git a/docs/integrate/api/_scripts/2.0/teams.js b/docs/integrate/api/_scripts/2.0/teams.js new file mode 100644 index 00000000000..dd4ff1f854e --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/teams.js @@ -0,0 +1,42 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + top: 1, + skip: 1 + }; +}; + +exports.submitRequests = function () { + + apiwriter.setEnableWrite(false); + + apiwriter.getJson('/projects/', + function(context, result) { + context.projectId = result.responseBody.value[0].id; + } + ); + + + apiwriter.setEnableWrite(true); + + // all teams + apiwriter.getJson('/projects/{projectId}/teams', + function(context, result) { + context.teamId = result.responseBody.value[0].id; + } + ); + + // all teams in pages + apiwriter.getJson('/projects/{projectId}/teams?$top={top}&$skip={skip}'); + + // specific team + apiwriter.getJson('/projects/{projectId}/teams/{teamId}'); + + // team members + apiwriter.getJson('/projects/{projectId}/teams/{teamId}/members/'); + + // team members in pages + apiwriter.getJson('/projects/{projectId}/teams/{teamId}/members/?$top={top}&$skip={skip}'); + +} diff --git a/docs/integrate/api/_scripts/2.0/testAttachments.js b/docs/integrate/api/_scripts/2.0/testAttachments.js new file mode 100644 index 00000000000..72c6e0c7e23 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/testAttachments.js @@ -0,0 +1,85 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +exports.getContext = function () { + return { + projectName: "Fabrikam", + created2Id: null, + pointIds: new Array(), + projId: this.getConfig().getProjectId(), + textFile: "textAsFileAttachment.txt", + binaryFile: "imageAsFileAttachment.png" + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(false); + + apiwriter.postJson('/test/runs', + function (context, result) { + return { + "name": "Fabrikam Fiber test run ", + "isAutomated": "true" + } + } + , + function (context, result) { + context.newRunId = result.responseBody.id; + } + ); + + //Add test results + apiwriter.postJson('/test/runs/{newRunId}/results', + function (context, result) { + return [ + { + "testCaseTitle": "VerifyWebsiteTheme", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteTheme", + "testCasePriority": 1, + "outcome": "Passed" + }, + { + "testCaseTitle": "VerifyWebsiteLinks", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteLinks", + "testCasePriority": 2, + "outcome": "Failed" + } + ] + }, + function (context, result) { + context.result1 = result.responseBody.value[0].id; + context.result2 = result.responseBody.value[1].id; + } + ); + + + var imgBase64 = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP7cxBCsAgDERR739pG/CnGJI0FopQ8O2cjNP6R85QbeNQU7wT1dkijaQ3vkZoWElaoTeJojW01cYh0jwfgiFBV/lEjOZtacijN/nLkOBHhIaVDgn+Wdycp6FXzlCl9wt0Y0cAzHo/zgAAAABJRU5ErkJggg=="; + + apiwriter.setEnableWrite(true); + + // Upload binary file as test run attachment + apiwriter.postJson('/test/runs/{newRunId}/attachments', + function (context, result) { + return { + "stream": imgBase64, + "fileName": context.binaryFile, + "comment": "Test attachment upload", + "attachmentType": "GeneralAttachment" + } + } + ); + + var textBase64 = "VXNlciB0ZXh0IGNvbnRlbnQgdG8gdXBsb2FkLg=="; + + // Upload text file as test result attachment + apiwriter.postJson('/test/runs/{newRunId}/results/{result1}/attachments', + function (context, result) { + return { + "stream": textBase64, + "fileName": context.textFile, + "comment": "Test attachment upload", + "attachmentType": "GeneralAttachment" + } + } + ); +}; diff --git a/docs/integrate/api/_scripts/2.0/testCodeCoverage.js b/docs/integrate/api/_scripts/2.0/testCodeCoverage.js new file mode 100644 index 00000000000..7d34cb43c00 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/testCodeCoverage.js @@ -0,0 +1,30 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + projectName: "fabrikam-fiber-tfvc", + runId: 51, + planId: null, + created2Id: null, + projId: this.getConfig().getProjectId(), + buildIdParam: 363 + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //get build code coverage + apiwriter.getJson('/test/codeCoverage?buildId={buildIdParam}&flags=7'); + + //get test run code coverage + apiwriter.getJson('/test/runs/{runId}/codeCoverage?flags=7'); +} diff --git a/docs/integrate/api/_scripts/2.0/testPlans.js b/docs/integrate/api/_scripts/2.0/testPlans.js new file mode 100644 index 00000000000..39c05df6d43 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/testPlans.js @@ -0,0 +1,104 @@ +var apiwriter = require('apiwriter'); + +/* + * Notes for this script + * + * Because these APIs are project-scoped, the value for cfgApisUrl should be project-scoped, for example: + * + * set cfgApisUrl=https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/Fabrikam-Fiber-TFVC/_apis + * +*/ + +exports.getContext = function() { + return { + planId: null + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //get all test plans + apiwriter.getJson('/test/plans', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + + //get all test plans (with details) + apiwriter.getJson('/test/plans?includePlanDetails=true', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + + //get just active plans + apiwriter.getJson('/test/plans?filterActivePlans=true', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + + //get top 3 + apiwriter.getJson('/test/plans?$top=3', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + + //get a specific test plan + apiwriter.getJson('/test/plans/{planId}'); + + //create a test plan + apiwriter.postJson('/test/plans', + function(context, result) { + return { "name": "New Test Plan" } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //create a test plan (with description) + apiwriter.postJson('/test/plans', + function(context, result) { + return { "name": "New Test Plan 2", "description": "Here is a description for my new test plan." } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //create a test plan (with start and end dates) + apiwriter.postJson('/test/plans', + function(context, result) { + return { "name": "New Test Plan 3", "description": "Here is a description for my new test plan.", "startDate": "2014-10-25","endDate": "2014-11-14" } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //create a test plan (in an area and iteration) + apiwriter.postJson('/test/plans', + function(context, result) { + return { "name": "New Test Plan 4", "area": { + "name": "Fabrikam-Fiber-TFVC\\Quality assurance" + }, + "iteration": "Fabrikam-Fiber-TFVC\\Release 1" } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //update a test plan (name) + apiwriter.patchJson('/test/plans/{planId}', + function(context, result) { + return { "name": "Renamed New Test Plan 4" } + }, + function(context, result) { + context.planId = result.responseBody.id; + } + ); + + //delete a test plan + //apiwriter.deleteJson('/test/plans/{planId}', null); +} diff --git a/docs/integrate/api/_scripts/2.0/testPoints.js b/docs/integrate/api/_scripts/2.0/testPoints.js new file mode 100644 index 00000000000..309e0f48abe --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/testPoints.js @@ -0,0 +1,87 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + planId: "1", + suiteId: "1", + projectName:"fabrikam-fiber-tfvc", + testerName:"Jamal Hartnett", + pointId: null, + created2Id: null, + projId: this.getConfig().getProjectId(), + fields: "System.Title,System.Reason", + configuration: "Windows 8", + testcaseId: "39", + testpointIds: "1,2", + top: "1", + skip: "1" + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //get all test points + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points', + function (context, result) { + context.pointId = result.responseBody.value[0].id; + }); + + // with work item fields + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?witFields={fields}'); + + // by configuration + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?configuration={configuration}'); + + // by test case + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?testcaseid={testcaseId}'); + + // specific points + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?testPointIds={testpointIds}'); + + // with details + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?includePointDetails=true'); + + // a page at a time + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points?$skip={skip}&$top={top}'); + + //get a particular test point + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}'); + + // with fields + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}?witFields={fields}'); + + // reset test points to active + apiwriter.patchJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}', + function (context, result) { + return { + "resetToActive": "true" + } + }); + + //update test points outcome + apiwriter.patchJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}', + function(context, result) { + return { + "outcome":"Passed" + } + }); + + //update test points -set tester + apiwriter.patchJson('/test/plans/{planId}/suites/{suiteId}/points/{pointId}', + function(context, result) { + return { + "tester": { + "displayName" : context.testerName + } + } + }); +} diff --git a/docs/integrate/api/_scripts/2.0/testResultRetentionSettings.js b/docs/integrate/api/_scripts/2.0/testResultRetentionSettings.js new file mode 100644 index 00000000000..1f62bbdb0ac --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/testResultRetentionSettings.js @@ -0,0 +1,26 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + projectName: "Fabrikam" + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //Get test result retention settings + apiwriter.getJson('/test/resultretentionsettings', + function (context, result) { + }); + + //Update test result retention settings + apiwriter.patchJson('/test/resultretentionsettings', + function (context, result) { + return { + "automatedResultsRetentionDuration": 30, + "manualResultsRetentionDuration": 100 + } + }); +} diff --git a/docs/integrate/api/_scripts/2.0/testResults.js b/docs/integrate/api/_scripts/2.0/testResults.js new file mode 100644 index 00000000000..efd4edcbf6a --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/testResults.js @@ -0,0 +1,111 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + projectName: "Fabrikam", + planId: null, + created2Id: null, + projId: this.getConfig().getProjectId() + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + apiwriter.postJson('/test/runs', + function (context, result) { + return { + "name": "Fabrikam Fiber test run ", + "isAutomated": "true" + } + } + , + function (context, result) { + context.newRunId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + + //Add test results + apiwriter.postJson('/test/runs/{newRunId}/results', + function (context, result) { + return [ + { + "testCaseTitle": "VerifyWebsiteTheme", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteTheme", + "testCasePriority": 1, + "outcome": "Passed" + }, + { + "testCaseTitle": "VerifyWebsiteLinks", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteLinks", + "testCasePriority": 2, + "outcome": "Failed" + } + ] + }, + function (context, result) { + context.result1 = result.responseBody.value[0].id; + context.result2 = result.responseBody.value[1].id; + } + ); + + //Update test results + apiwriter.patchJson('/test/runs/{newRunId}/results', + function (context, result) { + return [ + { + "testResult": {"id": context.result1}, + "state": "Completed", + "comment": "Website theme is looking good" + }, + { + "testResult": { "id": context.result2}, + "state": "Completed", + "comment": "Website links are failing because of incorrect container id", + "failureType": "Known Issue" + } + ] + } + ); + + //Bulk update test results + apiwriter.patchJson('/test/runs/{newRunId}/results?resultIds={result1},{result2}', + function (context, result) { + return { + "state": "Completed", + "comment": "All test results got completed successfully" + } + } + ); + + //get results by query + apiwriter.postJson('/test/results/query?includeResultDetails=true&$top=2', + function (context, result) { + return { + "query": "Select * From TestResult Where TestRunId = " + context.newRunId + } + }); + + //get a test case result + apiwriter.getJson('/test/runs/{newRunId}/results/100000'); + + //get a list of iteration results + apiwriter.getJson('/test/runs/{newRunId}/results/100000/iterations'); + + //get a list of action results + apiwriter.getJson('/test/runs/{newRunId}/results/100000/iterations/1/actionresults'); + + //get a list of parameter results + apiwriter.getJson('/test/runs/{newRunId}/results/100000/iterations/1/parameterresults'); +} diff --git a/docs/integrate/api/_scripts/2.0/testRuns.js b/docs/integrate/api/_scripts/2.0/testRuns.js new file mode 100644 index 00000000000..855c5991c1a --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/testRuns.js @@ -0,0 +1,133 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + projectName:"Fabrikam", + created2Id: null, + pointIds: new Array(), + projId: this.getConfig().getProjectId() + }; +}; + + +exports.populateArray = function (context) { + context.pointIds.push(1); + return{ + pointIds : context.pointIds + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //create a new test run + apiwriter.postJson('/test/runs', + function(context, result) { + return { + "name": "NewTestRun", + "isAutomated": "true" + } + }, + function(context, result) { + context.newRunId = result.responseBody.id; + } + ); + + + apiwriter.setEnableWrite(false); + + //Add test results + apiwriter.postJson('/test/runs/{newRunId}/results', + function (context, result) { + return [ + { + "testCaseTitle": "VerifyWebsiteTheme", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteTheme", + "testCasePriority": 1, + "outcome": "Passed" + }, + { + "testCaseTitle": "VerifyWebsiteLinks", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteLinks", + "testCasePriority": 2, + "outcome": "Failed" + } + ] + }, + function (context, result) { + context.result1 = result.responseBody.value[0].id; + context.result2 = result.responseBody.value[1].id; + } + ); + + apiwriter.setEnableWrite(true); + + //update test run + apiwriter.patchJson('/test/runs/{newRunId}', + function(context, result) { + return { + "name": "NewTestRun2", + "comment": "This test run is doomed" + } + }); + + + //get all test runs + apiwriter.getJson('/test/runs?includeRunDetails=true', + function(context, result) { + context.runId = result.responseBody.value[0].id; + }); + + //get a test run + apiwriter.getJson('/test/runs/{newRunId}'); + + //get test run statistics + apiwriter.getJson('/test/runs/{newRunId}/statistics'); + + //get runs by query + apiwriter.postJson('/test/runs/query?$top=2', + function (context, result) { + return { + "query": "Select * From TestRun" + } + }); + + //delete test run + apiwriter.deleteJson('/test/runs/{newRunId}', null); + + apiwriter.setEnableWrite(false); + + apiwriter.postJson('/test/runs', + function (context, result) { + return { + "name": "NewTestRun with message logs", + "isAutomated": "true" + } + } + , + function (context, result) { + context.newRunIdWithMessageLogs = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + apiwriter.patchJson('/test/runs/{newRunIdWithMessageLogs}', + function (context, result) { + return { + "logEntries": [{ "entryId": 1, "dateCreated": '2015-05-17 05:00:00', "message": "Test run started" }, { "entryId": 2, "dateCreated": '2015-05-17 05:01:00', "message": "Test run completed" }], + "state": "Completed" + } + } + ); + + apiwriter.getJson('/test/runs/{newRunIdWithMessageLogs}/messageLogs'); +} diff --git a/docs/integrate/api/_scripts/2.0/testSuites.js b/docs/integrate/api/_scripts/2.0/testSuites.js new file mode 100644 index 00000000000..b9798be0cc9 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/testSuites.js @@ -0,0 +1,155 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + projectName: "Fabrikam", + planId: "60", + suiteId: "339", + staticSuiteId: "339", + testcaseId: "341", + created2Id: null, + projId: this.getConfig().getProjectId(), + requirementIds : new Array() + }; +}; + + +exports.populateArray = function (context) { + context.requirementIds.push(345); + return { + requirementIds : context.requirementIds + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ +/* +// go find the projName without writing + apiwriter.setEnableWrite(false); + + //get the project name + apiwriter.getJson('/projects', + function(context, result) { + context.projectName = result.responseBody.value[0].name; + } + ); + */ + //get all test plans + /*apiwriter.getJson('/test/{projectName}/plans', + function(context, result) { + context.planId = result.responseBody.value[0].id; + }); + */ + + apiwriter.setEnableWrite(true); + + //get all test suites in tree structure + apiwriter.getJson('/test/plans/{planId}/suites?$asTreeView=true', + function(context, result) { + context.suiteId = result.responseBody.value[0].id; + }); + + /* + //get all test suites by test case + apiwriter.getJson('/test/suites?testCaseId={testcaseId}'); + + //get all test suites + apiwriter.getJson('/test/plans/{planId}/suites', + function(context, result) { + context.suiteId = result.responseBody.value[0].id; + }); + + //get a test suite + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}'); + + //adding test cases to suite + apiwriter.postJson('/test/plans/{planId}/suites/{suiteId}/testcases/346,347', + function(context,result) { + return { + + } + }); + + + //get all test cases of a suite + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/testcases', + function(context, result) { + context.testcaseId = result.responseBody.value[0].id; + }); + + //get a test case within a suite + apiwriter.getJson('/test/plans/{planId}/suites/{suiteId}/testcases/{testcaseId}'); + + //create a static test suite + apiwriter.postJson('/test/plans/{planId}/suites/{suiteId}', + function(context, result) { + return { + "suiteType": "StaticTestSuite", + "name": "NewTestSuite" + } + }, + function(context, result) { + context.staticSuiteId = result.responseBody.id; + } + ); + + //renaming a test suite + apiwriter.patchJson('/test/plans/{planId}/suites/{staticSuiteId}', + function(context, result) { + return { + "name": "RenamedTestSuite" + } + }); + + //create a dynamic test suite + apiwriter.postJson('/test/plans/{planId}/suites/{suiteId}', + function(context, result) { + return { + "suiteType": "DynamicTestSuite", + "name": "AllTestCases", + "queryString": "SELECT [System.Id],[System.WorkItemType],[System.Title],[Microsoft.VSTS.Common.Priority],[System.AssignedTo],[System.AreaPath] FROM WorkItems WHERE [System.WorkItemType] IN GROUP 'Microsoft.TestCaseCategory'" + }, + function(context, result) { + context.suiteId = result.responseBody.id; + } + + + }); + + + //creating requirement based suite + apiwriter.postJson('/test/{projectName}/plans/{planId}/suites/{suiteId}', + function(context, result) { + return { + "suiteType": "RequirementTestSuite", + "requirementIds": exports.populateArray(context).requirementIds + } + } + ); + + + //moving a test suite + apiwriter.patchJson('/test/plans/{planId}/suites/{suiteId}', + function(context, result) { + return { + "parent": { + 'id': context.staticSuiteId + } + } + }); + + //deleting a test suite + apiwriter.deleteJson('/test/plans/{planId}/suites/{staticSuiteId}', null); + + //removing test cases from suite + apiwriter.deleteJson('/test/plans/1/suites/{suiteId}/testcases/346', null); + */ + +} diff --git a/docs/integrate/api/_scripts/2.0/tfvcBranches.js b/docs/integrate/api/_scripts/2.0/tfvcBranches.js new file mode 100644 index 00000000000..e8357988511 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/tfvcBranches.js @@ -0,0 +1,47 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + path: "$/Fabrikam-Fiber-TFVC/AuthSample-Dev", + special: "$/Fabrikam-Fiber-TFVC/AuthSample+Special", + deleted: "$/Fabrikam-Fiber-TFVC/MyBranch" + }; +}; + + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + // specific branch + apiwriter.getJson('/tfvc/branches/{path}'); + + // specific branch and children + apiwriter.getJson('/tfvc/branches/{path}?includeChildren=true'); + + // specific branch and parent + apiwriter.getJson('/tfvc/branches/{path}?includeParent=true'); + + // specific deleted branch + apiwriter.getJson('/tfvc/branches/{deleted}?includeDeleted=true'); + + // branch with special characters + // apiwriter.getJson('/tfvc/branches?path={special}'); + + // all "root" branches + apiwriter.getJson('/tfvc/branches'); + + // all branches + apiwriter.getJson('/tfvc/branches' + '?includeChildren=true'); + + // get root branches, including deleted + apiwriter.getJson('/tfvc/branches' + '?includeDeleted=true'); + + /* + // --- by path --- + // specific folder + apiwriter.getJson('/tfvc/branches' + '?scopePath=' + '$/Project Number Two/'); + + // all below root, including deleted + apiwriter.getJson('/tfvc/branches' + '?scopePath=$/&includeDeleted=true'); + */ +} diff --git a/docs/integrate/api/_scripts/2.0/tfvcChangesets.js b/docs/integrate/api/_scripts/2.0/tfvcChangesets.js new file mode 100644 index 00000000000..2b2fc45808e --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/tfvcChangesets.js @@ -0,0 +1,71 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + id: null, + top: 2, + skip: 2, + from: 2, + to: 5, + fromDate: '01-01-2014', + toDate: '03-18-2014-2:00PM', + author: "fabrikamfiber3@hotmail.com", + path: "$/Fabrikam-Fiber-TFVC/AuthSample/AuthSample/Program.cs", + order: "id asc", + commentLength: 10, + id_array : new Array() + }; +}; + +exports.populateArray = function (context) { + context.id_array.push(1); + context.id_array.push(3); + context.id_array.push(6); + return{ + id_array : context.id_array + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/tfvc/changesets?$top={top}&$skip={skip}', + function (context, result) { + context.id = result.responseBody.value[0].changesetId; + }); + + apiwriter.getJson('/tfvc/changesets'); + + apiwriter.getJson('/tfvc/changesets?maxCommentLength={commentLength}'); + + apiwriter.getJson('/tfvc/changesets?$orderBy={order}'); + + apiwriter.getJson('/tfvc/changesets?searchCriteria.itemPath={path}'); + +// apiwriter.getJson('/tfvc/changesets?searchCriteria.includeSourceRenames=false'); + + apiwriter.getJson('/tfvc/changesets?fromDate={fromDate}&toDate={toDate}'); + + apiwriter.getJson('/tfvc/changesets?fromId={from}&toId={to}'); + + apiwriter.getJson('/tfvc/changesets?searchcriteria.author={author}'); + + apiwriter.getJson('/tfvc/changesets/{id}'); + + apiwriter.getJson('/tfvc/changesets/{id}?includeDetails=true'); + + apiwriter.getJson('/tfvc/changesets/{id}?includeWorkItems=true'); + + apiwriter.getJson('/tfvc/changesets/{id}?maxChangeCount=All'); + +// apiwriter.getJson('/tfvc/changesets/{id}?includeSourceRename=false'); + + apiwriter.getJson('/tfvc/changesets/{id}/changes'); + + apiwriter.getJson('/tfvc/changesets/{id}/workitems'); + + apiwriter.postJson('/tfvc/changesetsBatch', function (context, result) { + return { 'changesetIds': exports.populateArray(context).id_array, 'commentLength': 90 } + } + ); +} diff --git a/docs/integrate/api/_scripts/2.0/tfvcItems.js b/docs/integrate/api/_scripts/2.0/tfvcItems.js new file mode 100644 index 00000000000..35823efddad --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/tfvcItems.js @@ -0,0 +1,47 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + itempath: null, + itemDescriptors: [ + { + path: "$/Fabrikam-Fiber-TFVC/AuthSample/AuthSample/Program.cs", + version: 5, + versionType: "changeset" + }, + { + path: "$/Fabrikam-Fiber-TFVC/AuthSample", + recursionLevel: "Full" + } + ], + version: null, + folder: "$/Fabrikam-Fiber-TFVC/AuthSample", + recursionLevel: "OneLevel" + }; +}; + + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/tfvc/items?scopePath={folder}&recursionLevel={recursionLevel}', + function (context, result) { + context.itempath = result.responseBody.value[1].path; + context.version = result.responseBody.value[1].version; + context.item_array = result.responseBody.value.map( + function (item) { + return { + 'path': item.path + } + }); + }); + + apiwriter.getJson('/tfvc/items?scopePath={folder}'); + + apiwriter.getJson('/tfvc/items/{itempath}?versionType=Changeset' + '&version={version}'); + + apiwriter.postJson('/tfvc/itemBatch', function (context, result) { + return { 'itemDescriptors': context.itemDescriptors } + }); + +} diff --git a/docs/integrate/api/_scripts/2.0/tfvcLabels.js b/docs/integrate/api/_scripts/2.0/tfvcLabels.js new file mode 100644 index 00000000000..6423ae53f95 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/tfvcLabels.js @@ -0,0 +1,38 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + labelId: null, + name: "Th*Label", + person: "fabrikamfiber3@hotmail.com", + item: "$/Fabrikam-Fiber-TFVC/AuthSample-Dev/Code/AuthSample.cs", + skip: 2, + top: 2 + }; +}; + +exports.submitRequests = function () +{ + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/tfvc/labels', + function (context, result) { + context.labelId = result.responseBody.value[1].id; + }); + + apiwriter.getJson('/tfvc/labels?name={name}'); + + apiwriter.getJson('/tfvc/labels?owner={person}'); + + apiwriter.getJson('/tfvc/labels?itemLabelFilter={item}'); + + apiwriter.getJson('/tfvc/labels?$skip={skip}&$top={top}'); + + apiwriter.getJson('/tfvc/labels/{labelId}'); + + apiwriter.getJson('/tfvc/labels/{labelId}?maxItemCount=100'); + + apiwriter.getJson('/tfvc/labels/{labelId}/items'); + + apiwriter.getJson('/tfvc/labels/{labelId}/items?$top={top}&$skip={skip}'); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/tfvcShelvesets.js b/docs/integrate/api/_scripts/2.0/tfvcShelvesets.js new file mode 100644 index 00000000000..a5d301c1a83 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/tfvcShelvesets.js @@ -0,0 +1,43 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + owner: "Normal Paulk", + shelvesetId: null, + maxCommentLength: 6, + top: 2, + skip: 2 + }; +}; + +exports.submitRequests = function () +{ + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/tfvc/shelvesets', + function(context, result) { + context.shelvesetId = result.responseBody.value[0].id; + }); + + apiwriter.getJson('/tfvc/shelvesets?owner={owner}'); + + apiwriter.getJson('/tfvc/shelvesets?maxCommentLength={maxCommentLength}'); + + apiwriter.getJson('/tfvc/shelvesets?$top={top}&$skip={skip}'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}?includeDetails=true'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}?includeWorkItems=true'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}?maxChangeCount=100'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}?maxCommentLength={maxCommentLength}'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}/changes'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}/changes?$top={top}&$skip={skip}'); + + apiwriter.getJson('/tfvc/shelvesets/{shelvesetId}/workitems'); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/tfvcWorkspaces.js b/docs/integrate/api/_scripts/2.0/tfvcWorkspaces.js new file mode 100644 index 00000000000..f242d61ecd7 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/tfvcWorkspaces.js @@ -0,0 +1,64 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + ownerName: null, + computerName: null, + permissionsFilter: null, + id: null, + item_array: null + }; +}; + + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + // ex 1 query all workspaces + apiwriter.getJson('/tfvc/workspaces', + function (context, result) { + context.id = result.responseBody.value[0].id; + }); + + // ex1 get workspace + apiwriter.getJson('/tfvc/workspaces/{id}', + function (context, result) + { + context.computerName = result.responseBody.computerName; + context.permissionsFilter = "Use"; + context.item_array = result.responseBody.folderMappings.map + ( + function (folderMapping) + { + return { + 'path': folderMapping.localItem, //.replace("\\", "\\") + 'recursionLevel': 'OneLevel' + } + } + ); + } + ); + + + + //ex 2 workspaces on computer can use + apiwriter.getJson('/tfvc/workspaces?computerName={computerName}&permissionsFilter={permissionsFilter}'); + + //ex 1 get pending changes + apiwriter.getJson('/tfvc/workspaces/{id}/pendingChanges'); + + //ex 1 get pending changes batch + apiwriter.postJson('/tfvc/workspaces/{id}/pendingChangesBatch', + function (context, result) + { + return { 'itemSpecifiers': [ { "path": "$/SomeProject/ConsoleApplicationOne-deletedBranch-subBranch/" } ] } + } + ); + + //ex 1 get local versions + apiwriter.postJson('/tfvc/workspaces/{id}/localVersions', function (context, result) { + return { 'itemSpecifiers': context.item_array } + } + ); + +} diff --git a/docs/integrate/api/_scripts/2.0/witAttachments.js b/docs/integrate/api/_scripts/2.0/witAttachments.js new file mode 100644 index 00000000000..594029144a9 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/witAttachments.js @@ -0,0 +1,85 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + textFile: "textAsFileAttachment.txt", + binaryFile: "imageAsFileAttachment.png" + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(false); + + base64ToBytes = function (input) { + var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var bytes = (input.length / 4) * 3; + var arrayBuffer = new ArrayBuffer(bytes); + + //get last chars to see if are valid + var lkey1 = keyStr.indexOf(input.charAt(input.length - 1)); + var lkey2 = keyStr.indexOf(input.charAt(input.length - 2)); + + var bytes = (input.length / 4) * 3; + if (lkey1 == 64) bytes--; //padding chars, so skip + if (lkey2 == 64) bytes--; //padding chars, so skip + + var uarray; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + var j = 0; + + if (arrayBuffer) + uarray = new Uint8Array(arrayBuffer); + else + uarray = new Uint8Array(bytes); + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + for (i = 0; i < bytes; i += 3) { + //get the 3 octects in 4 ascii chars + enc1 = keyStr.indexOf(input.charAt(j++)); + enc2 = keyStr.indexOf(input.charAt(j++)); + enc3 = keyStr.indexOf(input.charAt(j++)); + enc4 = keyStr.indexOf(input.charAt(j++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + uarray[i] = chr1; + if (enc3 != 64) uarray[i + 1] = chr2; + if (enc4 != 64) uarray[i + 2] = chr3; + } + + return uarray; + }; + + var imgBase64 = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP7cxBCsAgDERR739pG/CnGJI0FopQ8O2cjNP6R85QbeNQU7wT1dkijaQ3vkZoWElaoTeJojW01cYh0jwfgiFBV/lEjOZtacijN/nLkOBHhIaVDgn+Wdycp6FXzlCl9wt0Y0cAzHo/zgAAAABJRU5ErkJggg=="; + var imgBinary = base64ToBytes(imgBase64); + + apiwriter.setEnableWrite(true); + + // Upload text as a text file attachment + apiwriter.postJsonEx('/wit/attachments?fileName={textFile}', + "User text content to upload", + collectionScopeUrl, + null, + true + ); + + // Upload image as a file attachment + apiwriter.postJsonEx('/wit/attachments?fileName={binaryFile}', + imgBinary, + collectionScopeUrl, + null, + true + ); +}; + +collectionScopeUrl = function (context, options) { + options.url = url.resolve(options.url + "/", '../../_apis'); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/witMetadata.js b/docs/integrate/api/_scripts/2.0/witMetadata.js new file mode 100644 index 00000000000..da089494ea6 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/witMetadata.js @@ -0,0 +1,185 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + projectName: "Fabrikam-Fiber-Git", + fieldName: "System.IterationPath", + rootIterationId: null, + rootAreaId: null, + iterationPath: "Final Iteration", + iterationPathNew: "Ultimate iteration", + iterationParent: "Parent Iteration", + iterationId: null, + areaPath: "Web", + areaPathNew: "Website team", + areaParent: "Parent Area", + areaId: null, + relationName: "System.LinkTypes.Related", + categoryName: "Microsoft.RequirementCategory", + }; +}; + +exports.submitRequests = function () { + + // Get all wit fields + apiwriter.getJsonEx('/wit/fields', collectionScopeUrl); + + // Get a specfic wit field + apiwriter.getJsonEx('/wit/fields/{fieldName}', collectionScopeUrl); + + // Get all work item types + apiwriter.getJson('/wit/workItemTypes'); + + // Get a specific work item type + apiwriter.getJson('/wit/workItemTypes/Bug'); + + // Get all work item type categories + apiwriter.getJson('/wit/workItemTypeCategories'); + + // Get a specific work item type category + apiwriter.getJson('/wit/workItemTypeCategories/{categoryName}'); + + // Get the areas + apiwriter.getJson('/wit/classificationNodes/areas', + function (context, result) { + context.rootAreaId = result.responseBody.id; + } + ); + + // Get the areas with children + apiwriter.getJson('/wit/classificationNodes/areas?$depth=2'); + + // Get the iterations + apiwriter.getJson('/wit/classificationNodes/iterations', + function (context, result) { + context.rootIterationId = result.responseBody.id; + } + ); + + // Get the iterations with children + apiwriter.getJson('/wit/classificationNodes/iterations?$depth=2'); + + // Create areas/iterations to move under + apiwriter.setEnableWrite(false); + + apiwriter.postJson('/wit/classificationNodes/areas', + function (context, result) { + return { + "name": context.areaParent + } + } + ) + + apiwriter.postJson('/wit/classificationNodes/iterations', + function (context, result) { + return { + "name": context.iterationParent + } + } + ) + + apiwriter.setEnableWrite(true); + + // Create new area + apiwriter.postJson('/wit/classificationNodes/areas', + function (context, result) { + return { + "name": context.areaPath + } + }, + function (context, result) { + context.areaId = result.responseBody.id; + } + ); + + // Get a specific area + apiwriter.getJson('/wit/classificationNodes/areas/{areaPath}'); + + // Rename area path + apiwriter.patchJson('/wit/classificationNodes/areas/{areaPath}', + function (context, result) { + return { + "name": context.areaPathNew + } + } + ); + + // Move area + apiwriter.postJson('/wit/classificationNodes/areas/{areaParent}', + function (context, result) { + return { + "id": context.areaId + } + } + ); + + // Create new iteration with dates + apiwriter.postJson('/wit/classificationNodes/iterations', + function (context, result) { + return { + "name": context.iterationPath, + "attributes": { + "startDate": "2014-10-27T00:00:00Z", + "finishDate": "2014-10-31T00:00:00Z" + } + } + }, + function (context, result) { + context.iterationId = result.responseBody.id; + } + ); + + // Get a specific iteration + apiwriter.getJson('/wit/classificationNodes/iterations/{iterationPath}'); + + // Rename iteration path + apiwriter.patchJson('/wit/classificationNodes/iterations/{iterationPath}', + function (context, result) { + return { + "name": context.iterationPathNew + } + } + ); + + // Update dates on iteration + apiwriter.patchJson('/wit/classificationNodes/iterations/{iterationPathNew}', + function (context, result) { + return { + "attributes": { + "startDate": "2015-01-26T00:00:00Z", + "finishDate": "2015-01-30T00:00:00Z" + } + } + } + ); + + // Move iteration + apiwriter.postJson('/wit/classificationNodes/iterations/{iterationParent}', + function (context, result) { + return { + "id": context.iterationId + } + } + ); + + // Delete areas + //apiwriter.deleteJson('/wit/classificationNodes/areas/{areaPathNew}?$reclassifyId={rootAreaId}', null); + apiwriter.deleteJson('/wit/classificationNodes/areas/{areaParent}?$reclassifyId={rootAreaId}', null); + + // Delete iterations + //apiwriter.deleteJson('/wit/classificationNodes/iterations/{iterationPathNew}?$reclassifyId={rootIterationId}', null); + apiwriter.deleteJson('/wit/classificationNodes/iterations/{iterationParent}?$reclassifyId={rootIterationId}', null); + + // Get the link types + apiwriter.getJsonEx('/wit/workitemrelationtypes', collectionScopeUrl); + + // Get a specific link types + apiwriter.getJsonEx('/wit/workitemrelationtypes/{relationName}', collectionScopeUrl); +}; + +collectionScopeUrl = function (context, options) { + options.url = url.resolve(options.url + "/", '../../_apis'); +}; diff --git a/docs/integrate/api/_scripts/2.0/witQueries.js b/docs/integrate/api/_scripts/2.0/witQueries.js new file mode 100644 index 00000000000..a0bb7a42010 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/witQueries.js @@ -0,0 +1,134 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + folderName: "Website team", + folderNameNew: "Website", + queryName: "All Bugs", + queryNameNew: "Active Bugs", + queryId: null, + folderId: null, + }; +}; + +exports.submitRequests = function () { + + // Get the tree of queries by ID + apiwriter.getJson('/wit/queries'); + apiwriter.getJson('/wit/queries?$depth=1'); + apiwriter.getJson('/wit/queries?$depth=1&$expand=all'); + + // Get the tree of queries by Name + apiwriter.getJson('/wit/queries/Shared Queries/Current Sprint'); + apiwriter.getJson('/wit/queries/Shared Queries/Current Sprint?$depth=1'); + + // Create a folder + apiwriter.postJson('/wit/queries/Shared Queries', + function (context, result) { + return { + "name": context.folderName, + "isFolder": true + } + }, + function (context, result) { + context.folderId = result.responseBody.id; + } + ); + + // Create a query + apiwriter.postJson('/wit/queries/Shared Queries/{folderName}', + function (context, result) { + return { + "name": context.queryName, + "wiql": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Bug' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" + } + }, + function (context, result) { + context.queryId = result.responseBody.id; + } + ); + + //get a specific folder by ID + apiwriter.getJson('/wit/queries/{folderId}'); + + //get a specific folder by Name + apiwriter.getJson('/wit/queries/Shared Queries/{folderName}'); + + //get a specific query by ID + apiwriter.getJson('/wit/queries/{queryId}'); + + //get a specific query by Name + apiwriter.getJson('/wit/queries/Shared Queries/{folderName}/{queryName}'); + + // rename a query + apiwriter.patchJson('/wit/queries/{queryId}', + function (context, result) { + return { + "name": context.queryNameNew + } + } + ); + + // update the WIQL of a query + apiwriter.patchJson('/wit/queries/Shared Queries/{folderName}/{queryNameNew}', + function (context, result) { + return { + "wiql": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Bug' AND [System.State] = 'Active' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" + } + } + ); + + // rename a folder + apiwriter.patchJson('/wit/queries/Shared Queries/{folderName}', + function (context, result) { + return { + "name": context.folderNameNew + } + } + ); + + // move a folder + apiwriter.postJson('/wit/queries/My Queries', + function (context, result) { + return { + "id": context.folderId + } + } + ); + + //delete query + apiwriter.deleteJson('/wit/queries/{queryId}', null); + + // Get all queries included deleted + apiwriter.getJson('/wit/queries?$depth=2&$includeDeleted=true'); + + // Get deleted query + apiwriter.getJson('/wit/queries/{queryId}?$includeDeleted=true'); + + // Undelete a query + apiwriter.patchJson('/wit/queries/{queryId}', + function (context, result) { + return { + "isDeleted": false + } + } + ); + + //delete folder + apiwriter.deleteJson('/wit/queries/My Queries/{folderNameNew}', null); + + // Undelete a folder and children + apiwriter.patchJson('/wit/queries/{folderId}?$undeleteDescendants=true', + function (context, result) { + return { + "isDeleted": false + } + } + ); + + // Keep it clean! + apiwriter.deleteJson('/wit/queries/{folderId}', null); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/witReporting.js b/docs/integrate/api/_scripts/2.0/witReporting.js new file mode 100644 index 00000000000..63b4fa4ed44 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/witReporting.js @@ -0,0 +1,51 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +//PreReq: There must be a project called "Fabrikam-Fiber-Git" +//PreReq: There must be at least 13 work item revisions +//Prereq: There must be at least 1 work item link + +exports.getContext = function() { + return { + projectName: "Fabrikam-Fiber-Git", + apiVersion: "2.0", + accept: "application/json" + }; +}; + +var maxValuesLength = 3; + +truncateResponse = function(_context, output) { + if(output.hasOwnProperty('responseBody') && output.responseBody.hasOwnProperty('values') && output.responseBody.values.length > maxValuesLength) + { + var numOfItemsInExcess = output.responseBody.values.length - maxValuesLength; + output.responseBody.values.splice(maxValuesLength, numOfItemsInExcess); + } +}; + +exports.submitRequests = function() { + apiwriter.setEnableWrite(true); + + // Make a GET request to the Revisions API + apiwriter.getJson('/wit/reporting/workItemRevisions', truncateResponse); + + // Make a GET request to the Revisions API + apiwriter.getJson('/wit/reporting/workItemRevisions?includeIdentityRef=true&watermark=794', truncateResponse); + + // Make a POST request to the Revisions API + apiwriter.postJson('/wit/reporting/workItemRevisions?watermark=794', + function (context, result) { + return { + types : ["Bug", "Task", "Product Backlog Item"], + fields : ["System.WorkItemType", "System.Title", "System.AreaPath"], + includeIdentityRef : true + }; + }, + truncateResponse + ); + + // Make a GET request to the Links API + apiwriter.getJson('/wit/reporting/workItemLinks', truncateResponse); +}; \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/witWorkItems.js b/docs/integrate/api/_scripts/2.0/witWorkItems.js new file mode 100644 index 00000000000..8b1e1e4ebec --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/witWorkItems.js @@ -0,0 +1,625 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +//PreReq: There must be a project called "Fabrikam-Fiber-Git" +//PreReq: There must be an area path called Root\Website +//PreReq: There must be a user called Johnnie McCloud (if not change line 270) + +Array.prototype.unique = function () { + var u = {}, a = []; + for (var i = 0, l = this.length; i < l; ++i) { + if (u.hasOwnProperty(this[i])) { + continue; + } + a.push(this[i]); + u[this[i]] = 1; + } + return a; +}; + +parseColumns = function (columns) { + var columnNames = new Array(); + for (var i = 0; i < columns.length; i++) { + columnNames.push(columns[i].referenceName); + } + return columnNames.join(); +} + +parseIds = function (workItemRelations) { + var ids = new Array(); + for (var i = 0; i < workItemRelations.length; i++) { + ids.push(workItemRelations[i].target.id); + } + return ids.unique().join(); +} + +exports.getContext = function() { + return { + projectName: "Fabrikam-Fiber-Git", + attachmentUrl: null, + PBIId: null, + PBIUrl: null, + taskId: null, + taskUrl: null, + task2Id: null, + task2Url: null, + task3Id: null, + queryId: null, + ids: null, + columns: "System.Id,System.Title,System.WorkItemType,Microsoft.VSTS.Scheduling.RemainingWork", + asof: null, + }; +}; + +exports.submitRequests = function() { + apiwriter.setEnableWrite(false); + + // Create the first work item + apiwriter.patchJsonEx('/wit/workitems/$Product Backlog Item', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Customer can sign in using their Microsoft Account" + }, + { + "op": "add", + "path": "/fields/Microsoft.VSTS.Scheduling.Effort", + "value": 8 + }, + { + "op": "add", + "path": "/fields/System.Description", + "value": "Our authorization logic needs to allow for users with Microsoft accounts (formerly Live Ids) - http://msdn.microsoft.com/en-us/library/live/hh826547.aspx" + } + ]; + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function (context, result) { + context.PBIId = result.responseBody.id; + context.PBIUrl = result.responseBody.url; + } + ); + + // Upload an attachment + apiwriter.postJsonEx('/wit/attachments?fileName=Spec.txt', + "User text content to upload", + collectionScopeUrl, + function (context, result) { + context.attachmentUrl = result.responseBody.url + }, + true + ); + + apiwriter.setEnableWrite(true); + + // Get a specfic work item + apiwriter.getJsonEx('/wit/workitems/{PBIId}', collectionScopeUrl); + + // Get a specfic work item expanded + apiwriter.getJsonEx('/wit/workitems/{PBIId}?$expand=all', collectionScopeUrl); + + // Get a specific work item type stub + apiwriter.getJson('/wit/workitems/$Task'); + + // Create a super simple work item with required fields only + apiwriter.patchJsonEx('/wit/workitems/$Task', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "JavaScript implementation for Microsoft Account" + } + ] + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.task3Id = result.responseBody.id; + } + ); + + // Create a work item with links + apiwriter.patchJsonEx('/wit/workitems/$Task', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "JavaScript implementation for Microsoft Account" + }, + { + "op": "add", + "path": "/fields/Microsoft.VSTS.Scheduling.RemainingWork", + "value": 4 + }, + { + "op": "add", + "path": "/fields/System.Description", + "value": "Follow the code samples from MSDN" + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Jim has the most context around this." + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Hierarchy-Reverse", //"work-item/hierarchy-reverse", + "url": context.PBIUrl, + "attributes": { + "comment": "decomposition of work" + } + } + } + ] + }, + function(context, options) + { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.taskId = result.responseBody.id; + context.taskUrl = result.responseBody.url; + } + ); + + apiwriter.setEnableWrite(false); + + //Create a new task to add + apiwriter.patchJsonEx('/wit/workitems/$Task', + function(context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Unit Testing for MSA login" + }, + { + "op": "add", + "path": "/fields/System.Description", + "value": "We need to ensure we have coverage to prevent regressions" + }, + { + "op": "add", + "path": "/fields/Microsoft.VSTS.Scheduling.RemainingWork", + "value": 3 + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Hierarchy-Reverse", + "url": context.PBIUrl, + "title": "decomposition of work" + } + } + ] + }, + function(context, options) + { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.task2Id = result.responseBody.id; + context.task2Url = result.responseBody.url; + context.ids = context.PBIId + ',' + context.taskId + ',' + context.task2Id; + context.asof = result.responseBody.fields["System.CreatedDate"]; + } + ); + + // Create a query + apiwriter.postJson('/wit/queries/My Queries', + function (context, result) { + return { + "name": "All Work", + "wiql": "Select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State] From WorkItemLinks WHERE (Source.[System.TeamProject] = @project and Source.[System.State] <> 'Removed') and ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') and (Target.[System.WorkItemType] <> '') mode(Recursive)" + } + }, + function (context, result) { + context.queryId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + // Update a field of the task + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function(context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 1 + }, + { + "op": "add", + "path": "/fields/System.AreaPath", + "value": context.projectName + "\\Website" + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Moving to the right area path" + } + ] + }, + collectionScopePatchUrl + ); + + // Update a field and add a link to the task + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function(context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 2 + }, + { + "op": "add", + "path": "/fields/System.AssignedTo", + "value": "Johnnie McLeod" + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Johnnie is going to take this work over." + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Related", + "url": context.task2Url, + "attributes": { + "comment": "adding another task" + } + } + } + ] + }, + collectionScopePatchUrl + ); + + // Add a link + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Dependency-forward", + "url": context.task2Url, + "attributes": { + "comment": "Making a new link for the dependency" + } + } + } + ] + }, + collectionScopePatchUrl + ); + + // Update a link + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "replace", + "path": "/relations/2/attributes/comment", + "value": "Adding traceability to dependencies" + } + ] + }, + collectionScopePatchUrl + ); + + // Remove a link + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "remove", + "path": "/relations/2" + } + ] + }, + collectionScopePatchUrl + ); + + // Add an attachment + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Adding the necessary spec" + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "AttachedFile", + "url": context.attachmentUrl, + "attributes": { + "comment":"Spec for the work" + } + } + } + ] + }, + collectionScopePatchUrl + ); + + // Remove an attachment + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 4 + }, + { + "op": "remove", + "path": "/relations/2" + } + ] + }, + collectionScopePatchUrl + ); + + // Add a hyperlink + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 5 + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Linking to a blog article for context" + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "Hyperlink", + "url": "http://blogs.msdn.com/b/bharry/archive/2014/05/12/a-new-api-for-visual-studio-online.aspx" + } + } + ] + }, + collectionScopePatchUrl + ); + + // Tag a workitem + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 6 + }, + { + "op": "add", + "path": "/fields/System.Tags", + "value": "Tag1; Tag2" + } + ] + }, + collectionScopePatchUrl + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/workitems?ids={ids}', collectionScopeUrl); + apiwriter.getJsonEx('/wit/workitems?ids={ids}&fields={columns}', collectionScopeUrl); + apiwriter.getJsonEx('/wit/workitems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + apiwriter.getJsonEx('/wit/workitems?ids={ids}&$expand=all', collectionScopeUrl); + + // get the update collection for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates', collectionScopeUrl); + + // get a page of updates for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates?$skip=1&$top=2', collectionScopeUrl); + + // get the second update + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates/2', collectionScopeUrl); + + // get the last update of links + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates/4', collectionScopeUrl); + + // get all revisions of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions', collectionScopeUrl); + + // get a page of revisions for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions?$skip=1&$top=2', collectionScopeUrl); + + // get a revision of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions/2', collectionScopeUrl); + + // get an expanded revision of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions/2?$expand=all', collectionScopeUrl); + + // get all discussion history of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/history', collectionScopeUrl); + + // get a page of discussion history entries for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/history?$skip=1&$top=2', collectionScopeUrl); + + // get a discussion history entry of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/history/2', collectionScopeUrl); + + // Get all work items returned by a (stored) query + apiwriter.getJson('/wit/wiql/{queryId}'); + + // Get all work items filtered by WIQL + apiwriter.postJson('/wit/wiql', + function (context, result) { + return { + "query": "Select [System.WorkItemType],[System.Title],[System.State],[Microsoft.VSTS.Scheduling.Effort],[System.IterationPath] FROM WorkItemLinks WHERE Source.[System.WorkItemType] IN GROUP 'Microsoft.RequirementCategory' AND Target.[System.WorkItemType] IN GROUP 'Microsoft.RequirementCategory' AND Target.[System.State] IN ('New','Approved','Committed') AND [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward' ORDER BY [Microsoft.VSTS.Common.BacklogPriority] ASC,[System.Id] ASC MODE (Recursive, ReturnMatchingChildren)" + } + } + ); + + // Get results of a flat query + apiwriter.postJsonEx('/wit/wiql', + function (context, result) { + return { + "query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task' AND [State] <> 'Closed' AND [State] <> 'Removed' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" + } + }, + collectionScopeUrl, + function (context, result) { + var ids = new Array(); + for (var i = 0; i < result.responseBody.workItems.length; i++) { + ids.push(result.responseBody.workItems[i].id); + } + context.ids = ids.unique().join(); + context.columns = parseColumns(result.responseBody.columns); + context.asof = result.responseBody.asOf; + } + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/WorkItems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + + // Get results of a onehop query + apiwriter.postJson('/wit/wiql', + function (context, result) { + return { + "query": "SELECT [System.Id], [System.Links.LinkType], [System.WorkItemType], [System.Title], [System.State] FROM WorkItemLinks WHERE ([Source].[System.TeamProject] = @project AND [Source].[System.WorkItemType] IN GROUP 'Microsoft.RequirementCategory' AND [Source].[System.State] <> 'Done') AND ([System.Links.LinkType] <> '') And ([Target].[System.State] <> 'Removed' AND [Target].[System.WorkItemType] NOT IN GROUP 'Microsoft.FeatureCategory') mode(MustContain)" + } + }, + function (context, result) { + context.ids = parseIds(result.responseBody.workItemRelations); + context.columns = parseColumns(result.responseBody.columns); + context.asof = result.responseBody.asOf; + } + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/WorkItems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + + // Get results of a tree query + apiwriter.postJson('/wit/wiql', + function (context, result) { + return { + "query": "Select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State] From WorkItemLinks WHERE (Source.[System.TeamProject] = @project and Source.[System.State] <> 'Removed') and ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') and (Target.[System.WorkItemType] <> '') mode(Recursive)" + } + }, + function (context, result) { + context.ids = parseIds(result.responseBody.workItemRelations); + context.columns = parseColumns(result.responseBody.columns); + context.asof = result.responseBody.asOf; + } + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/WorkItems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + + // Close all new work items and delete new queries + + apiwriter.setEnableWrite(false); + + // Update a field of the task + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + }, + collectionScopePatchUrl + ); + + apiwriter.patchJsonEx('/wit/workitems/{task2Id}', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + }, + collectionScopePatchUrl + ); + + apiwriter.patchJsonEx('/wit/workitems/{task3Id}', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + }, + collectionScopePatchUrl + ); + + apiwriter.patchJsonEx('/wit/workitems/{PBIId}', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.State", + "value": "Removed" + } + ] + }, + collectionScopePatchUrl + ); + + // Keep it clean! + apiwriter.deleteJson('/wit/queries/{queryId}', null); +}; + +collectionScopeUrl = function (context, options) { + options.url = url.resolve(options.url + "/", '../../_apis'); +}; + +collectionScopePatchUrl = function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json"; + collectionScopeUrl(context, options); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/workCapacity.js b/docs/integrate/api/_scripts/2.0/workCapacity.js new file mode 100644 index 00000000000..edcacf9c972 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/workCapacity.js @@ -0,0 +1,51 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + }; +}; + +exports.submitRequests = function () { + + // Get a list of a team's iterations + apiwriter.getJson('/work/teamsettings/iterations', + function(context, result) { + context.iterationId = result.responseBody.values[0].id; + }); + + // Get a team's members' capacities + apiwriter.getJson('/work/teamsettings/iterations/{iterationId}/capacities', + function(context, result){ + context.teammemberId=result.responseBody.values[0].teamMember.id; + context.activities=result.responseBody.values[0].activities; + }); + + // Get a team member's capacity + apiwriter.getJson('/work/teamsettings/iterations/{iterationId}/capacities/{teammemberId}'); + + // Update a teammember's capacity + apiwriter.patchJson('/work/teamsettings/iterations/{iterationId}/capacities/{teammemberId}', + function (context, result) { + return { + "activities": [ + { + "name": "newActivity", + "capacityPerDay": 6 + } + ] + } + } + ); + + // Keep it clean! + apiwriter.patchJson('/work/teamsettings/iterations/{iterationId}/capacities/{teammemberId}', + function (context, result) { + return { + "activities": context.activities + } + } + ); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/workIterations.js b/docs/integrate/api/_scripts/2.0/workIterations.js new file mode 100644 index 00000000000..bd5b03b537b --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/workIterations.js @@ -0,0 +1,45 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + timeframe: "current" + }; +}; + +exports.submitRequests = function () { + + // Get a list of a team's iterations + apiwriter.getJson('/work/teamsettings/iterations', + function(context, result) { + context.iterationId = result.responseBody.values[0].id; + context.iterationPath = result.responseBody.values[0].path; + }); + + // Get a list of a team's iterations by timeframe + apiwriter.getJson('/work/teamsettings/iterations?$timeframe={timeframe}'); + + // Get team settings about an iteration with iteration ID + apiwriter.getJson('/work/teamsettings/iterations/{iterationId}', + function (context, result) { + context.iterationPath = result.responseBody.path; + }); + + // Remove an iteration from a team's iteraitons + apiwriter.deleteJson('/work/teamsettings/iterations/{iterationId}', null); + + // Keep it clean! + apiwriter.postJson('/work/teamsettings/iterations', function (context, result) { + return context.iterationId; + }); +/* + // Remove an iteration from a team's iteraitons + apiwriter.deleteJson('/work/teamsettings/iterations/{iterationId}', null); + + // Keep it clean! + apiwriter.postJson('/work/teamsettings/iterations', function (context, result) { + return {"path": context.iterationPath}; + });*/ +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/workTeamDaysOff.js b/docs/integrate/api/_scripts/2.0/workTeamDaysOff.js new file mode 100644 index 00000000000..2f2bb0537a7 --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/workTeamDaysOff.js @@ -0,0 +1,47 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + }; +}; + +exports.submitRequests = function () { + + // Get a list of a team's iterations + apiwriter.getJson('/work/teamsettings/iterations', + function(context, result) { + context.iterationId = result.responseBody.values[0].id; + }); + + // Get a team's days off + apiwriter.getJson('/work/teamsettings/iterations/{iterationId}/teamdaysoff', + function(context, result){ + context.daysOff = result.responseBody.daysOff; + }); + + // Set a team's days off + apiwriter.patchJson('/work/teamsettings/iterations/{iterationId}/teamdaysoff', + function (context, result) { + return { + "daysOff": [ + { + "start": "2015-03-14T00:00:00Z", + "end": "2015-03-15T00:00:00Z" + } + ] + } + } + ); + + // keep it clean + apiwriter.patchJson('/work/teamsettings/iterations/{iterationId}/teamdaysoff', + function (context, result) { + return { + "daysOff": context.daysOff + } + } + ); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/workTeamFieldValues.js b/docs/integrate/api/_scripts/2.0/workTeamFieldValues.js new file mode 100644 index 00000000000..6a1d1e3868a --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/workTeamFieldValues.js @@ -0,0 +1,54 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +exports.getContext = function () { + return { + }; +}; + +exports.submitRequests = function () { + + // Get a team's areas or team field values + apiwriter.getJson('/work/teamsettings/teamfieldvalues', + function(context, result){ + context.defaultValue=result.responseBody.defaultValue; + context.values=result.responseBody.values; + }); + + + // Update a teams' areas or team field values + apiwriter.patchJson('/work/teamsettings/teamfieldvalues', + function (context, result) { + + + if(context.values[0].includeChildren==false){ + context.values[0].includeChildren=true; + } + else{ + context.values[0].includeChildren=false; + } + return { + "defaultValue": context.defaultValue, + "values":context.values + } + } + ); + + // Keep it clean! + apiwriter.patchJson('/work/teamsettings/teamfieldvalues', + function (context, result) { + + if(context.values[0].includeChildren==false){ + context.values[0].includeChildren=true; + } + else{ + context.values[0].includeChildren=false; + } + return { + "defaultValue": context.defaultValue, + "values": context.values + } + }); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/2.0/workTeamSettings.js b/docs/integrate/api/_scripts/2.0/workTeamSettings.js new file mode 100644 index 00000000000..e1b94bc8e7e --- /dev/null +++ b/docs/integrate/api/_scripts/2.0/workTeamSettings.js @@ -0,0 +1,47 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis +exports.getContext = function () { + return { + }; +}; + +exports.submitRequests = function () { + + // Get a team's settings + apiwriter.getJson('/work/teamsettings'); + + // Update a teams' settings + apiwriter.patchJson('/work/teamsettings', + function (context, result) { + return { + "bugsBehavior": "AsTasks", + "workingDays":[ + "monday", + "tuesday", + "wednesday", + "thursday" + ], + "defaultIteration": "8C2457E8-8936-4CDC-B3AA-17B20F56C76C" + } + } + ); + + // Keep it clean! + apiwriter.patchJson('/work/teamsettings', + function (context, result) { + return { + "bugsBehavior": "AsRequirements", + "workingDays":[ + "monday", + "tuesday", + "wednesday", + "thursday", + "friday" + ], + "defaultIteration": "8C2457E8-8936-4CDC-B3AA-17B20F56C76C" + } + } + ); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/3.0/agentqueues.js b/docs/integrate/api/_scripts/3.0/agentqueues.js new file mode 100644 index 00000000000..eeb14f7e358 --- /dev/null +++ b/docs/integrate/api/_scripts/3.0/agentqueues.js @@ -0,0 +1,69 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + queueId: null, + poolId: null + }; +}; + +var resourceVersion3 = function (context, options) { + options.headers["Accept"] = "application/json;api-version=3.0-preview.1" +}; + +var projectUrl = function (context, options) { + options.url = options.url.substring(0, options.url.lastIndexOf('/')) + "/_apis"; + resourceVersion3(context, options); +} + +var accountUrl = function (context, options) { + options.url = options.url.substring(0, options.url.lastIndexOf('/')); + options.url = options.url.substring(0, options.url.lastIndexOf('/')); + options.url = options.url.substring(0, options.url.lastIndexOf('/')) + "/_apis"; + options.headers["Accept"] = "application/json;api-version=3.0-preview.1" +} + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + // get a pool + apiwriter.getJsonEx('/distributedtask/pools', + accountUrl, + function (context, result) { + context.poolId = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + // create a queue + apiwriter.postJsonEx('/distributedtask/queues', + function (context, options) { + return { + name: 'myNewQueue', + pool: { + id: context.poolId + } + }; + }, + projectUrl, + function (context, result) { + context.queueId = result.responseBody.id; + }); + + // get a queue + apiwriter.getJsonEx('/distributedtask/queues/{queueId}', + projectUrl); + + // get queues + apiwriter.getJsonEx('/distributedtask/queues', + projectUrl); + + apiwriter.deleteJsonEx('/distributedtask/queues/{queueId}', + function (context, options) { + return context.queueId; + }, + projectUrl); + + apiwriter.setEnableWrite(true); +} diff --git a/docs/integrate/api/_scripts/3.0/gitImportRequests.js b/docs/integrate/api/_scripts/3.0/gitImportRequests.js new file mode 100644 index 00000000000..edaa65b05af --- /dev/null +++ b/docs/integrate/api/_scripts/3.0/gitImportRequests.js @@ -0,0 +1,68 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + repositoryId: null, + importRequestId: null, + projectId: this.getConfig().getProjectId() + }; +}; + +var _getProj = function (context) { + return { + "id": context.projectId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(false); + + // Create a repository + apiwriter.postJson('/git/repositories', + function(context, result) { + return { "name": "EmptyRepo", "project": _getProj(context) } + }, + function(context, result) { + context.repositoryId = result.responseBody.id; + } + ); + + // Create an import request + apiwriter.postJson('/git/repositories/{repositoryId}/importRequests', + function(context, result) { + return { "parameters": { "gitSource": { "url": "https://github.com/Microsoft/vscode.git" } } } + }, + function(context, result) { + context.importRequestId = result.responseBody.importRequestId; + } + ); + + apiwriter.setEnableWrite(true); + + // Cancel an import request + apiwriter.patchJson('/git/repositories/{repositoryId}/importRequests/{importRequestId}', + function(context, result) { + return {"status": "abandoned"} + } + ); + + // Create an import request + apiwriter.postJson('/git/repositories/{repositoryId}/importRequests', + function(context, result) { + return { "parameters":{ "gitSource": { "url": "https://github.com/Microsoft/vsts-agent.git" } } } + }, + function(context, result) { + context.importRequestId = result.responseBody.importRequestId; + } + ); + + // Get details about the import request + apiwriter.getJson('/git/repositories/{repositoryId}/importRequests/{importRequestId}'); + + // Get a list of import requests + apiwriter.getJson('/git/repositories/{repositoryId}/importRequests'); + + apiwriter.getJson('/git/repositories/{repositoryId}/importRequests?includeAbandoned=true'); +} diff --git a/docs/integrate/api/_scripts/3.0/gitPullRequests.js b/docs/integrate/api/_scripts/3.0/gitPullRequests.js new file mode 100644 index 00000000000..c16396682c6 --- /dev/null +++ b/docs/integrate/api/_scripts/3.0/gitPullRequests.js @@ -0,0 +1,605 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + var reviewer1 = '3b5f0c34-4aec-4bf4-8708-1d36f0dbc468'; /* christie church on fabrikam-fiber-inc */ + var reviewer2 = '19d9411e-9a34-45bb-b985-d24d9d87c0c9'; /* johnny mcleaod */ + + //used when running locally, must be updated if someone else runs it or if I redeploy(tfat) + if (process.env.cfgUserName.indexOf('joscol') !== -1) { + reviewer1 = 'b335b0d4-578f-4944-b94c-a45216eb1a1a'; //JC + reviewer2 = '24281983-2530-4a9c-aeb7-88d60d57acfd'; //EJ + } + + return { + pullRequestId: null, + autoCompletePullRequestId: null, + autoCompletePRArtifactId: null, + witTask: 1, //TODO? create a work item + witRelIndex: null, + repositoryId: null, + repoFriendlyName: null, + projectId: null, + projectName: null, + autoCompleteBranchName: 'refs/heads/npaulk/known_issues', + autoCompleteBranchHead: null, + devBranchName: 'refs/heads/npaulk/my_work', + devBranchHead: null, + targetBranchName: 'refs/heads/new_feature', + targetBranchHead: null, + masterBranchName: 'refs/heads/master', + masterBranchObjectId: null, + initialReviewerId: reviewer1, + initialReviewerUserName: 'fabrikamfiber1@hotmail.com', + initialReviewerPassword: process.env.cfgPassword, + additionalReviewerId: reviewer2, + iterationId: 0, + previousIteration: 0, + threadId: 0, + commentId: 0, + top: null, + skip: null + }; +}; + +function sleep(time) { + var stop = new Date().getTime(); + while(new Date().getTime() < stop + time) { + ; + } +} + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + //get the first repository + apiwriter.getJson('/git/repositories', + function (context, result) { + var repoIndex = 0; + + //if you need to select a particular repo, put any filtering code here + //for example... + /*var searchIndex; + for (serachIndex = 0; searchIndex < result.responseBody.count; ++searchIndex) { + if (result.responseBody.value[searchIndex].project.name == "2016_10_27") { + repoIndex = searchIndex; + } + }*/ + + context.repositoryId = result.responseBody.value[repoIndex].id; + context.repoFriendlyName = result.responseBody.value[repoIndex].name; + context.projectId = result.responseBody.value[repoIndex].project.id; + context.projectName = result.responseBody.value[repoIndex].project.name; + }); + + //delete example pull requests if it already exists (main one and auto-complete) + for (var deletePRCount = 0; deletePRCount < 2; ++deletePRCount) { + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests?targetRefName={targetBranchName}&status=active', + function (context, result) { + if (result.responseBody.count > 0) { + context.pullRequestId = result.responseBody.value[0].pullRequestId; + } + else { + context.pullRequestId = null; + } + }); + + //There's no way to determine if the PR exists or not because of the way the requests are queued and processed + //so just blindly attempt to abandon it and if it fails, there's no harm + apiwriter.patchJsonEx('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}', + function (context, result) { + return { "status": 2 } + }, + function (context, result) { + } + ); + } + + //delete the example branches if they already exists + apiwriter.getJson('/git/repositories/{repositoryId}/{autoCompleteBranchName}', + function (context, result) { + if (result.responseBody.count > 0) { + context.autoCompleteBranchHead = result.responseBody.value[0].objectId; + } + }); + + //see above + apiwriter.postJson('/git/repositories/{repositoryId}/refs', + function (context, result) { + return [{ + "name": context.autoCompleteBranchName, + "newObjectId": "0000000000000000000000000000000000000000", + "oldObjectId": context.autoCompleteBranchHead + }]; + }, + function (context, result) { + }); + + apiwriter.getJson('/git/repositories/{repositoryId}/{devBranchName}', + function (context, result) { + if (result.responseBody.count > 0) { + context.devBranchHead = result.responseBody.value[0].objectId; + } + }); + + //see above + apiwriter.postJson('/git/repositories/{repositoryId}/refs', + function (context, result) { + return [{ + "name": context.devBranchName, + "newObjectId": "0000000000000000000000000000000000000000", + "oldObjectId": context.devBranchHead + }]; + }, + function (context, result) { + }); + + apiwriter.getJson('/git/repositories/{repositoryId}/{targetBranchName}', + function (context, result) { + if (result.responseBody.count > 0) { + context.targetBranchHead = result.responseBody.value[0].objectId; + } + }); + + //see above + apiwriter.postJson('/git/repositories/{repositoryId}/refs', + function (context, result) { + return [{ + "name": context.targetBranchName, + "newObjectId": "0000000000000000000000000000000000000000", + "oldObjectId": context.targetBranchHead + }]; + }, + function (context, result) { + }); + + //get head commit of master + apiwriter.getJson('/git/repositories/{repositoryId}/{masterBranchName}', + function (context, result) { + context.masterBranchObjectId = result.responseBody.value[0].objectId; + }); + + //create auto-complete source branch + apiwriter.postJson('/git/repositories/{repositoryId}/refs', + function (context, result) { + return [{ + "name": context.autoCompleteBranchName, + "newObjectId": context.masterBranchObjectId, + "oldObjectId": "0000000000000000000000000000000000000000" + }]; + }, + function (context, result) { + }); + + //create source branch + apiwriter.postJson('/git/repositories/{repositoryId}/refs', + function (context, result) { + return [{ + "name": context.devBranchName, + "newObjectId": context.masterBranchObjectId, + "oldObjectId": "0000000000000000000000000000000000000000" + }]; + }, + function (context, result) { + }); + + //create target branch + apiwriter.postJson('/git/repositories/{repositoryId}/refs', + function (context, result) { + return [{ + "name": context.targetBranchName, + "newObjectId": context.masterBranchObjectId, + "oldObjectId": "0000000000000000000000000000000000000000" + }]; + }, + function (context, result) { + }); + + //create a file on the auto-complete source branch + apiwriter.postJson('/git/repositories/{repositoryId}/pushes', + function (context, result) { + return { + "refUpdates": [{ + "name": context.autoCompleteBranchName, + "oldObjectId": context.masterBranchObjectId + }], + "commits": [{ + "comment": "Added known_issues.txt", + "changes": [{ + "changeType": "add", + "item": { + "path": "/known_issues.txt" + }, + "newContent": { + "content": "There are no known issues at this time", + "contentType": 0 + } + }] + }] + }; + }, + function (context, result) { + context.autoCompleteBranchHead = result.responseBody.refUpdates[0].newObjectId; + }); + + //create the auto-complete PR + apiwriter.postJson('/git/repositories/{repositoryId}/pullRequests', + function (context, result) { + return { + "sourceRefName": context.autoCompleteBranchName, "targetRefName": context.targetBranchName, "title": "Added known issues document", + "description": "Added known issues document", + "reviewers": [{ "id": context.initialReviewerId }] + }; + }, + function (context, result) { + context.autoCompletePullRequestId = result.responseBody.pullRequestId; + context.autoCompletePRArtifactId = result.responseBody.artifactId; + } + ); + + //create a file on the source branch + apiwriter.postJson('/git/repositories/{repositoryId}/pushes', + function (context, result) { + return { + "refUpdates": [{ + "name": context.devBranchName, + "oldObjectId": context.masterBranchObjectId + }], + "commits": [{ + "comment":"Added new_feature.h", + "changes": [{ + "changeType": "add", + "item": { + "path":"/new_feature.h" + }, + "newContent": { + "content":"int new_feature();\n", + "contentType":0 + } + }] + }] + }; + }, + function (context, result) { + context.devBranchHead = result.responseBody.refUpdates[0].newObjectId; + }); + + //create another file on the source branch + apiwriter.postJson('/git/repositories/{repositoryId}/pushes', + function (context, result) { + return { + "refUpdates": [{ + "name": context.devBranchName, + "oldObjectId": context.devBranchHead + }], + "commits": [{ + "comment": "Added new_feature.cpp", + "changes": [{ + "changeType": "add", + "item": { + "path": "/new_feature.cpp" + }, + "newContent": { + "content": "#include \"new_feature.h\"\n\nint new_feature()\n{\n return 4;\n}\n", + "contentType": 0 + } + }] + }] + }; + }, + function (context, result) { + context.devBranchHead = result.responseBody.refUpdates[0].newObjectId; + }); + + // Create a wit task + /* this is the old way and it doesn't work anymore, for now just assume that 1 is a valid workitem id + apiwriter.patchJsonEx('/wit/workitems/$Task', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Create a document listing all known issues with the product" + } + ] + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function (context, result) { + context.witTask = result.responseBody.id; + } + ); + */ + + apiwriter.setEnableWrite(true); + + //create a pull request + apiwriter.postJson('/git/repositories/{repositoryId}/pullRequests', + function(context, result) { + return {"sourceRefName": context.devBranchName, "targetRefName": context.targetBranchName, "title": "A new feature", + "description": "Adding a new feature", + "reviewers": [ { "id": context.initialReviewerId } ] }; + }, + function(context, result) { + context.pullRequestId = result.responseBody.pullRequestId; + } + ); + + //get the list of pull requests in the repo + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests'); + + //get the list of pull requests in the project + apiwriter.getJsonEx('/git/pullRequests', + function (context, options) { + options.url = options.url.replace('/_apis', '/' + context.projectName + '/_apis'); + }); + + //get the list of pull requests in the account + apiwriter.getJson('/git/pullRequests'); + + //get this PR from the account URL + apiwriter.getJson('/git/pullRequests/{pullRequestId}'); + + //get the list of pull requests by target branch + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests?targetRefName=refs/heads/master'); + + //get a detailed pull request + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}'); + + //get reviewers + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers'); + + // add a reviewer + apiwriter.putJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{additionalReviewerId}', + function(context, result) { + return { "vote": 0 } + }, + function(context, result) { + } + ); + + // update a vote + apiwriter.putJsonEx('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{initialReviewerId}', + function (context, result) { + return { "vote": 10 }; + }, + function (context, result) { + } + ); + + //get a reviewer + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{additionalReviewerId}'); + + // delete a reviewer + apiwriter.deleteJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/reviewers/{additionalReviewerId}', null); + + //edit the file to create a second iteration + apiwriter.setEnableWrite(false); + apiwriter.postJson('/git/repositories/{repositoryId}/pushes', + function (context, result) { + return { + "refUpdates": [{ + "name": context.devBranchName, + "oldObjectId": context.devBranchHead + }], + "commits": [{ + "comment": "Updated new_feature.cpp", + "changes": [{ + "changeType": "edit", + "item": { + "path": "/new_feature.cpp" + }, + "newContent": { + "content": "#include \"new_feature.h\"\n\nint new_feature()\n{\n return 5;\n}\n", + "contentType": 0 + } + }] + }] + }; + }, + function (context, result) { + context.devBranchHead = result.responseBody.refUpdates[0].newObjectId; + + //the server does not create new iterations synchronously with the push + //wait and hope it's long enough for the iteration to be created + sleep(5000); + }); + + apiwriter.setEnableWrite(true); + + // get iterations + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/iterations', + function (context, result) { + context.iterationId = result.responseBody.value[result.responseBody.count-1].id; + context.previousIteration = context.iterationId - 1; + }); + + // get an iteration + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/iterations/{iterationId}'); + + // get an iteration's commits + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/iterations/{iterationId}/commits'); + + // get an iteration's changes + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/iterations/{iterationId}/changes'); + + // get an iteration's changes compared to the previous iteration + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/iterations/{iterationId}/changes?$compareTo={previousIteration}'); + + //create a PR comment + apiwriter.postJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/threads', + function (context, result) { + return { + "comments": [{ + "parentCommentId": 0, + "content": "This new feature looks good!", + "commentType": 1 + }], + "properties": { + "Microsoft.TeamFoundation.Discussion.SupportsMarkdown": { "type": "System.Int32", "value": 1 } + }, + "status": 1, + }; + }, + function (context, result) { + }); + + + //create a PR comment at a file location + apiwriter.postJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/threads', + function (context, result) { + return { + "comments": [{ + "parentCommentId": 0, + "content": "Should we add a comment about what this value means?", + "commentType": 1 + }], + "properties": { + "Microsoft.TeamFoundation.Discussion.SupportsMarkdown": { "type": "System.Int32", "value": 1 } + }, + "status": 1, + "threadContext": { + "filePath": "/new_feature.cpp", + "leftFileEnd": null, + "leftFileStart": null, + "rightFileEnd": { "line": 5, "offset": 13 }, + "rightFileStart": { "line": 5, "offset": 1 } + }, + "pullRequestThreadContext": { + "changeTrackingId": 1, + "iterationContext": { + "firstComparingIteration": 1, + "secondComparingIteration": 2 + } + } + }; + }, + function (context, result) { + context.threadId = result.responseBody.id; + }); + + //add a comment + apiwriter.postJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/threads/{threadId}/comments', + function (context, result) { + return { + "content": "Good idea", + "parentCommentId": 1, + "commentType": 1 + }; + }, + function (context, result) { + context.commentId = result.responseBody.id; + }); + + // delete a comment + apiwriter.deleteJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/threads/{threadId}/comments/{commentId}', null); + + // get the threads + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/threads'); + + // get all the commits for the PR + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}/commits'); + + //edit the title + apiwriter.patchJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}', + function (context, result) { + return { + "title": "Updated pull request title" + }; + }); + + //edit the description + apiwriter.patchJson('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}', + function (context, result) { + return { + "description": "Updated pull request description" + }; + }); + + //link wit task to auto-complete PR + apiwriter.patchJsonEx('/wit/workItems/{witTask}', + function (context, result) { + return [{ + "op": 0, + "path": "/relations/-", + "value": { + "attributes": { + "name": "Pull Request" + }, + "rel": "ArtifactLink", + "url": context.autoCompletePRArtifactId + } + }]; + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function (context, result) { + //find the newly created wit link and record the index + for (var searchIndex = 0; searchIndex < result.responseBody.relations.length; ++searchIndex) { + if ((result.responseBody.relations[searchIndex].rel == "ArtifactLink") && + (result.responseBody.relations[searchIndex].url == context.autoCompletePRArtifactId)) { + context.witRelIndex = searchIndex; + } + } + }); + + //get linked work items + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests/{autoCompletePullRequestId}/workitems'); + + //delete work item link + apiwriter.patchJsonEx('/wit/workItems/{witTask}', + function (context, result) { + return [{ + "op": 5, + "path": "/relations/" + context.witRelIndex + "/url", + "value": context.autoCompletePRArtifactId + }, + { + "op": 1, + "path": "/relations/" + context.witRelIndex + }]; + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function (context, result) { + }); + + // set auto-complete + apiwriter.patchJsonEx('/git/repositories/{repositoryId}/pullRequests/{autoCompletePullRequestId}', + function (context, result) { + return { + "autoCompleteSetBy": { + "id": context.initialReviewerId + }, + "completionOptions": { + "deleteSourceBranch": "true", + "mergeCommitMessage": "Added known issues document", + "squashMerge": "false" + } + }; + }, + function (context, result) { + } + ); + + // approve/complete + apiwriter.patchJsonEx('/git/repositories/{repositoryId}/pullRequests/{pullRequestId}', + function(context, result) { + return { + "status": "completed", + "lastMergeSourceCommit": { + "commitId": context.devBranchHead + } + } + }, + function(context, result) { + } + ); + + //get the list of pull requests by status + apiwriter.getJson('/git/repositories/{repositoryId}/pullRequests?status=completed'); +}; + diff --git a/docs/integrate/api/_scripts/3.0/plans.js b/docs/integrate/api/_scripts/3.0/plans.js new file mode 100644 index 00000000000..0842d8084c9 --- /dev/null +++ b/docs/integrate/api/_scripts/3.0/plans.js @@ -0,0 +1,45 @@ +var apiwriter = require('apiwriter'); + +/* When running with OnPrem, ensure that Basic Auth is set up in the virtual directory itself. + * Set these environment variables when running writer tool for plans.js + * set cfgApisUrl=http://localhost:8080/tfs/DefaultCollection/agile/_apis + * set cfgUserName= + * set cfgPassword= + * set cfgApiVersion=3.0-preview.1 + * set cfgScript=plans.js + * set cfgScriptPath =../../Content.VS/vscom/integrate/api/_scripts/3.0 + */ + +exports.getContext = function () { + return { + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(true); + + apiwriter.getJson('/work/plans'); + + // Keep it clean! + apiwriter.postJson('/work/plans', function (context, result) { + return { + "id": result.id + }; + }); + + apiwriter.getJson('/work/plans/', + function (context, result) { + context.planId = result.responseBody.value[0].id; + context.planName = result.responseBody.value[0].name; + }); + + // By id + apiwriter.getJson('/work/plans/{planId}'); + + // By name + apiwriter.getJson('/work/plans/{planName}'); + + // Remove a plan from a project + apiwriter.deleteJson('/work/plans/{planId}', null); + +} diff --git a/docs/integrate/api/_scripts/3.0/testAttachments.js b/docs/integrate/api/_scripts/3.0/testAttachments.js new file mode 100644 index 00000000000..4e6e34a0e5d --- /dev/null +++ b/docs/integrate/api/_scripts/3.0/testAttachments.js @@ -0,0 +1,93 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + projectName: "Fabrikam", + textFile: "textAsFileAttachment.txt", + binaryFile: "imageAsFileAttachment.png" + }; +}; + +exports.submitRequests = function () { + apiwriter.setEnableWrite(false); + + apiwriter.postJson('/test/runs', + function (context, result) { + return { + "name": "Fabrikam Fiber test run ", + "isAutomated": "true" + } + } + , + function (context, result) { + context.newRunId = result.responseBody.id; + } + ); + + //Add test results + apiwriter.postJson('/test/runs/{newRunId}/results', + function (context, result) { + return [ + { + "testCaseTitle": "VerifyWebsiteTheme", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteTheme", + "testCasePriority": 1, + "outcome": "Passed" + }, + { + "testCaseTitle": "VerifyWebsiteLinks", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteLinks", + "testCasePriority": 2, + "outcome": "Failed" + } + ] + }, + function (context, result) { + context.result1 = result.responseBody.value[0].id; + context.result2 = result.responseBody.value[1].id; + } + ); + + + var imgBase64 = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAABlSURBVDhP7cxBCsAgDERR739pG/CnGJI0FopQ8O2cjNP6R85QbeNQU7wT1dkijaQ3vkZoWElaoTeJojW01cYh0jwfgiFBV/lEjOZtacijN/nLkOBHhIaVDgn+Wdycp6FXzlCl9wt0Y0cAzHo/zgAAAABJRU5ErkJggg=="; + + // Upload binary file as test run attachment + apiwriter.postJson('/test/runs/{newRunId}/attachments', + function (context, result) { + return { + "stream": imgBase64, + "fileName": context.binaryFile, + "comment": "Test attachment upload", + "attachmentType": "GeneralAttachment" + } + } + ); + + var textBase64 = "VXNlciB0ZXh0IGNvbnRlbnQgdG8gdXBsb2FkLg=="; + + // Upload text file as test result attachment + apiwriter.postJson('/test/runs/{newRunId}/results/{result1}/attachments', + function (context, result) { + return { + "stream": textBase64, + "fileName": context.textFile, + "comment": "Test attachment upload", + "attachmentType": "GeneralAttachment" + } + } + ); + + apiwriter.setEnableWrite(true); + + //Get attachments for a run + apiwriter.getJson('/test/runs/{newRunId}/attachments', + function (context, result) { + } + ); + + //Get attachments for a result + apiwriter.getJson('/test/runs/{newRunId}/results/{result1}/attachments', + function (context, result) { + } + ); +}; diff --git a/docs/integrate/api/_scripts/3.0/testPoints.js b/docs/integrate/api/_scripts/3.0/testPoints.js new file mode 100644 index 00000000000..a4ee3dff8f3 --- /dev/null +++ b/docs/integrate/api/_scripts/3.0/testPoints.js @@ -0,0 +1,99 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + planId: "5", + suiteId: "6", + projectName:"fabrikam-fiber-tfvc", + testerName:"Jamal Hartnett", + pointId: null, + created2Id: null, + projId: this.getConfig().getProjectId(), + fields: "System.Title,System.Reason", + configuration: "Windows 8", + testcaseId: "39", + testpointIds: "1,2", + top: "1", + skip: "1" + }; +}; + +var _getProj = function (context) { + return { + "id": context.projId, + "name": context.projName + } +} + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //get few test points + apiwriter.postJson('/test/points', + function (context, result) { + return { + PointsFilter: { + TestcaseIds: [7,8,9] + } + } + } + , + function (context, result) { + context.newRunId = result.responseBody.id; + } + ); + + // get test points with Configurations filter + apiwriter.postJson('/test/points', + function (context, result) { + return { + PointsFilter: { + TestcaseIds: [7,8,9], + ConfigurationNames: [ + "Windows 10", + ] + } + } + } + , + function (context, result) { + context.newRunId = result.responseBody.id; + } + ); + + // // get test points with tester filter + apiwriter.postJson('/test/points', + function (context, result) { + return { + PointsFilter: { + TestcaseIds: [7,8,9], + Testers: [ + {DisplayName: "VSEQA1"}, + ] + } + } + } + , + function (context, result) { + context.newRunId = result.responseBody.id; + } + ); + + + // // get test points a page at a time + apiwriter.postJson('/test/points?$skip={skip}&$top={top}', + function (context, result) { + return { + PointsFilter: { + TestcaseIds: [7,8,9] + } + } + } + , + function (context, result) { + context.newRunId = result.responseBody.id; + } + ); + +} diff --git a/docs/integrate/api/_scripts/3.0/testResults.js b/docs/integrate/api/_scripts/3.0/testResults.js new file mode 100644 index 00000000000..a534c920834 --- /dev/null +++ b/docs/integrate/api/_scripts/3.0/testResults.js @@ -0,0 +1,98 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function() { + return { + runId: "26" + }; +}; + +exports.submitRequests = function() +{ + apiwriter.setEnableWrite(true); + + //get all test results + apiwriter.getJson('/test/runs/{runId}/results'); + + //get all test results with workitems + apiwriter.getJson('/test/runs/{runId}/results?detailsToInclude=WorkItems&$top=100'); + + //get all test results with test iterations and workitems + apiwriter.getJson('/test/runs/31/results?$top=100&detailsToInclude=WorkItems,Iterations'); + + //get a test case result + apiwriter.getJson('/test/runs/{runId}/results/100000'); + + apiwriter.setEnableWrite(false); + + //create a test run + apiwriter.postJson('/test/runs', + function (context, result) { + return { + "name": "Fabrikam Fiber test run ", + "isAutomated": "true" + } + } + , + function (context, result) { + context.newRunId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + //Add test results + apiwriter.postJson('/test/runs/{newRunId}/results', + function (context, result) { + return [ + { + "testCaseTitle": "VerifyWebsiteTheme", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteTheme", + "priority": 1, + "outcome": "Passed" + }, + { + "testCaseTitle": "VerifyWebsiteLinks", + "automatedTestName": "FabrikamFiber.WebSite.TestClass.VerifyWebsiteLinks", + "priority": 2, + "outcome": "Failed", + "associatedBugs": [{ "id": 30 }] + } + ] + }, + function (context, result) { + context.result1 = result.responseBody.value[0].id; + context.result2 = result.responseBody.value[1].id; + } + ); + + //Update test results + apiwriter.patchJson('/test/runs/{newRunId}/results', + function (context, result) { + return [ + { + "id": context.result1, + "state": "Completed", + "comment": "Website theme is looking good", + "associatedBugs": [{ "id": 30 }] + }, + { + "id": context.result2, + "state": "Completed", + "comment": "Website links are failing because of incorrect container id", + "failureType": "Known Issue" + } + ] + } + ); + + //Bulk update test results + apiwriter.patchJson('/test/runs/{newRunId}/results?resultIds={result1},{result2}', + function (context, result) { + return { + "state": "Completed", + "comment": "All test results got completed successfully" + } + } + ); + +} diff --git a/docs/integrate/api/_scripts/3.0/witTemplates.js b/docs/integrate/api/_scripts/3.0/witTemplates.js new file mode 100644 index 00000000000..00e8fbdad4b --- /dev/null +++ b/docs/integrate/api/_scripts/3.0/witTemplates.js @@ -0,0 +1,104 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/Team/_apis + +//PreReq: There must be a project called "Fabrikam-Fiber-Git" +exports.getContext = function() { + return { + projectName: "Fabrikam-Fiber-Git", + teamName: "Fabrikam-Fiber-Git%20Team", + template1Id: "unassignedtemplate1Id ", + template2Id: "unassignedtemplate2Id" + }; +}; + +exports.submitRequests = function() { + apiwriter.setEnableWrite(true); + + // Create first template + apiwriter.postJsonEx('/wit/templates', + function (context, result) { + return { + "description": "Creates a new Bug", + "name": "Create a new Bug", + "id": null, + "workItemTypeName": "Bug", + "fields": { + "System.AreaPath": "Fabrikam-Fiber-Git", + "System.IterationPath": "Fabrikam-Fiber-Git", + "Microsoft.VSTS.Common.Priority": "2", + "System.Reason": "New", + "System.State": "New", + "System.Title": "", + "Microsoft.VSTS.Common.ValueArea": "Business" + } + } + }, + teamScopeUrl, + function (context, result) { + context.template1Id = result.responseBody.id; + } + ); + + // Create second template + apiwriter.postJsonEx('/wit/templates', + function (context, result) { + return { + "description": "Mark Task as Active Pri 1", + "name": "Mark Task as Active Pri 1", + "id": null, + "workItemTypeName": "Task", + "fields": { + "Microsoft.VSTS.Common.Priority": "1", + "System.Reason": "Active", + "System.State": "Active" + } + } + }, + teamScopeUrl, + function (context, result) { + context.template2Id = result.responseBody.id; + } + ); + + //Get all templates + apiwriter.getJsonEx('/wit/templates', teamScopeUrl); + + //Get all templates by type + apiwriter.getJsonEx('/wit/templates?workItemTypeName=Task', teamScopeUrl); + + // Get a specific template + apiwriter.getJsonEx('/wit/templates/{template1Id}', teamScopeUrl); + + // Update a template + apiwriter.putJson('/wit/templates/{template1Id}', + function (context, result) { + return { + "description": "Updated: Creates a new Bug", + "name": "Create a new Bug", + "id": context.template1Id, + "workItemTypeName": "Bug", + "fields": { + "System.AreaPath": "Fabrikam-Fiber-Git", + "System.IterationPath": "Fabrikam-Fiber-Git", + "Microsoft.VSTS.Common.Priority": "2", + "System.Reason": "New", + "System.State": "New", + "System.Title": "" + } + } + }, + function(context, result) { + } + ); + + //Delete template + apiwriter.deleteJson('/wit/templates/{template1Id}', null); + apiwriter.deleteJson('/wit/templates/{template2Id}', null); + +}; + +teamScopeUrl = function (context, options) { + options.headers["Content-Type"] = "application/json"; +}; diff --git a/docs/integrate/api/_scripts/3.0/witWorkItems.js b/docs/integrate/api/_scripts/3.0/witWorkItems.js new file mode 100644 index 00000000000..632b2813492 --- /dev/null +++ b/docs/integrate/api/_scripts/3.0/witWorkItems.js @@ -0,0 +1,584 @@ +var apiwriter = require('apiwriter'); +var url = require('url'); + +// set cfgApisUrl to http://SERVER/COLLECTION/PROJECT/_apis + +//PreReq: There must be a project called "Fabrikam-Fiber-Git" +//PreReq: There must be an area path called Root\Website +//PreReq: There must be a user called Johnnie McCloud (if not change line 271) + +Array.prototype.unique = function () { + var u = {}, a = []; + for (var i = 0, l = this.length; i < l; ++i) { + if (u.hasOwnProperty(this[i])) { + continue; + } + a.push(this[i]); + u[this[i]] = 1; + } + return a; +}; + +parseColumns = function (columns) { + var columnNames = new Array(); + for (var i = 0; i < columns.length; i++) { + columnNames.push(columns[i].referenceName); + } + return columnNames.join(); +} + +parseIds = function (workItemRelations) { + var ids = new Array(); + for (var i = 0; i < workItemRelations.length; i++) { + ids.push(workItemRelations[i].target.id); + } + return ids.unique().join(); +} + +exports.getContext = function() { + return { + projectName: "Fabrikam-Fiber-Git", + attachmentUrl: null, + PBIId: null, + PBIUrl: null, + taskId: null, + taskUrl: null, + task2Id: null, + task2Url: null, + task3Id: null, + queryId: null, + ids: null, + recycleId: null, + columns: "System.Id,System.Title,System.WorkItemType,Microsoft.VSTS.Scheduling.RemainingWork", + asof: null, + }; +}; + +exports.submitRequests = function() { + apiwriter.setEnableWrite(false); + + // Create the first work item + apiwriter.patchJsonEx('/wit/workitems/$Product Backlog Item', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Customer can sign in using their Microsoft Account" + }, + { + "op": "add", + "path": "/fields/Microsoft.VSTS.Scheduling.Effort", + "value": 8 + }, + { + "op": "add", + "path": "/fields/System.Description", + "value": "Our authorization logic needs to allow for users with Microsoft accounts (formerly Live Ids) - http://msdn.microsoft.com/en-us/library/live/hh826547.aspx" + } + ]; + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function (context, result) { + context.PBIId = result.responseBody.id; + context.PBIUrl = result.responseBody.url; + } + ); + + // Upload an attachment + apiwriter.postJsonEx('/wit/attachments?fileName=Spec.txt', + "User text content to upload", + collectionScopeUrl, + function (context, result) { + context.attachmentUrl = result.responseBody.url + }, + true + ); + + apiwriter.setEnableWrite(true); + + // Get a specfic work item + apiwriter.getJsonEx('/wit/workitems/{PBIId}', collectionScopeUrl); + + // Get a specfic work item expanded + apiwriter.getJsonEx('/wit/workitems/{PBIId}?$expand=all', collectionScopeUrl); + + // Get a specific work item type stub + apiwriter.getJson('/wit/workitems/$Task'); + + // Create a super simple work item with required fields only + apiwriter.patchJsonEx('/wit/workitems/$Task', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "JavaScript implementation for Microsoft Account" + } + ] + }, + function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.task3Id = result.responseBody.id; + } + ); + + // Create a work item with links + apiwriter.patchJsonEx('/wit/workitems/$Task', + function (context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "JavaScript implementation for Microsoft Account" + }, + { + "op": "add", + "path": "/fields/Microsoft.VSTS.Scheduling.RemainingWork", + "value": 4 + }, + { + "op": "add", + "path": "/fields/System.Description", + "value": "Follow the code samples from MSDN" + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Jim has the most context around this." + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Hierarchy-Reverse", //"work-item/hierarchy-reverse", + "url": context.PBIUrl, + "attributes": { + "comment": "decomposition of work" + } + } + } + ] + }, + function(context, options) + { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.taskId = result.responseBody.id; + context.taskUrl = result.responseBody.url; + } + ); + + apiwriter.setEnableWrite(false); + + //Create a new task to add + apiwriter.patchJsonEx('/wit/workitems/$Task', + function(context, result) { + return [ + { + "op": "add", + "path": "/fields/System.Title", + "value": "Unit Testing for MSA login" + }, + { + "op": "add", + "path": "/fields/System.Description", + "value": "We need to ensure we have coverage to prevent regressions" + }, + { + "op": "add", + "path": "/fields/Microsoft.VSTS.Scheduling.RemainingWork", + "value": 3 + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Hierarchy-Reverse", + "url": context.PBIUrl, + "title": "decomposition of work" + } + } + ] + }, + function(context, options) + { + options.headers["Content-Type"] = "application/json-patch+json" + }, + function(context, result) { + context.task2Id = result.responseBody.id; + context.task2Url = result.responseBody.url; + context.ids = context.PBIId + ',' + context.taskId + ',' + context.task2Id; + context.asof = result.responseBody.fields["System.CreatedDate"]; + } + ); + + // Create a query + apiwriter.postJson('/wit/queries/My Queries', + function (context, result) { + return { + "name": "All Work", + "wiql": "Select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State] From WorkItemLinks WHERE (Source.[System.TeamProject] = @project and Source.[System.State] <> 'Removed') and ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') and (Target.[System.WorkItemType] <> '') mode(Recursive)" + } + }, + function (context, result) { + context.queryId = result.responseBody.id; + } + ); + + apiwriter.setEnableWrite(true); + + // Update a field of the task + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function(context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 1 + }, + { + "op": "add", + "path": "/fields/System.AreaPath", + "value": context.projectName + "\\Website" + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Moving to the right area path" + } + ] + }, + collectionScopePatchUrl + ); + + // Update a field and add a link to the task + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function(context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 2 + }, + { + "op": "add", + "path": "/fields/System.AssignedTo", + "value": "Johnnie McLeod" + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Johnnie is going to take this work over." + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Related", + "url": context.task2Url, + "attributes": { + "comment": "adding another task" + } + } + } + ] + }, + collectionScopePatchUrl + ); + + // Add a link + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "System.LinkTypes.Dependency-forward", + "url": context.task2Url, + "attributes": { + "comment": "Making a new link for the dependency" + } + } + } + ] + }, + collectionScopePatchUrl + ); + + // Update a link + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "replace", + "path": "/relations/2/attributes/comment", + "value": "Adding traceability to dependencies" + } + ] + }, + collectionScopePatchUrl + ); + + // Remove a link + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "remove", + "path": "/relations/2" + } + ] + }, + collectionScopePatchUrl + ); + + // Add an attachment + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 3 + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Adding the necessary spec" + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "AttachedFile", + "url": context.attachmentUrl, + "attributes": { + "comment":"Spec for the work" + } + } + } + ] + }, + collectionScopePatchUrl + ); + + // Remove an attachment + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 4 + }, + { + "op": "remove", + "path": "/relations/2" + } + ] + }, + collectionScopePatchUrl + ); + + // Add a hyperlink + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 5 + }, + { + "op": "add", + "path": "/fields/System.History", + "value": "Linking to a blog article for context" + }, + { + "op": "add", + "path": "/relations/-", + "value": { + "rel": "Hyperlink", + "url": "http://blogs.msdn.com/b/bharry/archive/2014/05/12/a-new-api-for-visual-studio-online.aspx" + } + } + ] + }, + collectionScopePatchUrl + ); + + // Tag a workitem + apiwriter.patchJsonEx('/wit/workitems/{taskId}', + function (context, result) { + return [ + { + "op": "test", + "path": "/rev", + "value": 6 + }, + { + "op": "add", + "path": "/fields/System.Tags", + "value": "Tag1; Tag2" + } + ] + }, + collectionScopePatchUrl + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/workitems?ids={ids}', collectionScopeUrl); + apiwriter.getJsonEx('/wit/workitems?ids={ids}&fields={columns}', collectionScopeUrl); + apiwriter.getJsonEx('/wit/workitems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + apiwriter.getJsonEx('/wit/workitems?ids={ids}&$expand=all', collectionScopeUrl); + + // get the update collection for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates', collectionScopeUrl); + + // get a page of updates for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates?$skip=1&$top=2', collectionScopeUrl); + + // get the second update + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates/2', collectionScopeUrl); + + // get the last update of links + apiwriter.getJsonEx('/wit/workitems/{taskId}/updates/4', collectionScopeUrl); + + // get all revisions of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions', collectionScopeUrl); + + // get a page of revisions for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions?$skip=1&$top=2', collectionScopeUrl); + + // get a revision of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions/2', collectionScopeUrl); + + // get an expanded revision of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/revisions/2?$expand=all', collectionScopeUrl); + + // get all discussion history of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/history', collectionScopeUrl); + + // get a page of discussion history entries for the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/history?$skip=1&$top=2', collectionScopeUrl); + + // get a discussion history entry of the work item + apiwriter.getJsonEx('/wit/workitems/{taskId}/history/2', collectionScopeUrl); + + // Get all work items returned by a (stored) query + apiwriter.getJson('/wit/wiql/{queryId}'); + + // Get all work items filtered by WIQL + apiwriter.postJson('/wit/wiql', + function (context, result) { + return { + "query": "Select [System.WorkItemType],[System.Title],[System.State],[Microsoft.VSTS.Scheduling.Effort],[System.IterationPath] FROM WorkItemLinks WHERE Source.[System.WorkItemType] IN GROUP 'Microsoft.RequirementCategory' AND Target.[System.WorkItemType] IN GROUP 'Microsoft.RequirementCategory' AND Target.[System.State] IN ('New','Approved','Committed') AND [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward' ORDER BY [Microsoft.VSTS.Common.BacklogPriority] ASC,[System.Id] ASC MODE (Recursive, ReturnMatchingChildren)" + } + } + ); + + // Get results of a flat query + apiwriter.postJsonEx('/wit/wiql', + function (context, result) { + return { + "query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'Task' AND [State] <> 'Closed' AND [State] <> 'Removed' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc" + } + }, + collectionScopeUrl, + function (context, result) { + var ids = new Array(); + for (var i = 0; i < result.responseBody.workItems.length; i++) { + ids.push(result.responseBody.workItems[i].id); + } + context.ids = ids.unique().join(); + context.columns = parseColumns(result.responseBody.columns); + context.asof = result.responseBody.asOf; + } + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/WorkItems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + + // Get results of a onehop query + apiwriter.postJson('/wit/wiql', + function (context, result) { + return { + "query": "SELECT [System.Id], [System.Links.LinkType], [System.WorkItemType], [System.Title], [System.State] FROM WorkItemLinks WHERE ([Source].[System.TeamProject] = @project AND [Source].[System.WorkItemType] IN GROUP 'Microsoft.RequirementCategory' AND [Source].[System.State] <> 'Done') AND ([System.Links.LinkType] <> '') And ([Target].[System.State] <> 'Removed' AND [Target].[System.WorkItemType] NOT IN GROUP 'Microsoft.FeatureCategory') mode(MustContain)" + } + }, + function (context, result) { + context.ids = parseIds(result.responseBody.workItemRelations); + context.columns = parseColumns(result.responseBody.columns); + context.asof = result.responseBody.asOf; + } + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/WorkItems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + + // Get results of a tree query + apiwriter.postJson('/wit/wiql', + function (context, result) { + return { + "query": "Select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State] From WorkItemLinks WHERE (Source.[System.TeamProject] = @project and Source.[System.State] <> 'Removed') and ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward') and (Target.[System.WorkItemType] <> '') mode(Recursive)" + } + }, + function (context, result) { + context.ids = parseIds(result.responseBody.workItemRelations); + context.columns = parseColumns(result.responseBody.columns); + context.asof = result.responseBody.asOf; + } + ); + + // Get multiple work items + apiwriter.getJsonEx('/wit/WorkItems?ids={ids}&fields={columns}&asOf={asof}', collectionScopeUrl); + + // Delete all new work items + apiwriter.deleteJson('/wit/workitems?ids={taskId},{task2Id},{task3Id}'); + apiwriter.deleteJson('/wit/workitems/{PBIId}', + function (context, result) { + context.recycleId = result.responseHeader.Location; + }); + + // permanently delete + apiwriter.deleteJson('/wit/recyclebin/{PBIId}'); + + // empty recycle bin + apiwriter.deleteJson('/wit/recyclebin'); + + //TODO: Restore + + // Delete new queries + apiwriter.deleteJson('/wit/queries/{queryId}', null); +}; + +collectionScopeUrl = function (context, options) { + options.url = url.resolve(options.url + "/", '../../_apis'); +}; + +collectionScopePatchUrl = function (context, options) { + options.headers["Content-Type"] = "application/json-patch+json"; + collectionScopeUrl(context, options); +} \ No newline at end of file diff --git a/docs/integrate/api/_scripts/3.2/notification/eventTypes.js b/docs/integrate/api/_scripts/3.2/notification/eventTypes.js new file mode 100644 index 00000000000..44f1bfb00d3 --- /dev/null +++ b/docs/integrate/api/_scripts/3.2/notification/eventTypes.js @@ -0,0 +1,69 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + publisherId: "ms.vss-code.git-event-publisher", + eventTypeId: "ms.vss-build.build-completed-event" + }; +}; + +var fixSubscription = function(sub) { + +} + +var fixResult = function(context, result) { + if (result) { + var str = JSON.stringify(result, null, 2); + + str = str.replace(/vsalmopen.visualstudio.com/gi, "fabrikam-fiber-inc.visualstudio.com"); + + var newResult = JSON.parse(str); + + result.requestUrl = newResult.requestUrl; + result.responseBody = newResult.responseBody; + } +}; + +exports.submitRequests = function() { + + // Get all event types + apiwriter.getJson('/notification/eventTypes', function(context, result) { + // strip away any without a name + var newTypes = []; + var allEventTypes = result.responseBody.value; + allEventTypes.forEach(function(eventType) { + if (eventType.name) { + newTypes.push(eventType); + } + }); + + result.responseBody.count = newTypes.length; + result.responseBody.value = newTypes; + + fixResult(context, result); + }); + + // Get all event types for the "Git" event publisher + apiwriter.getJson('/notification/eventTypes?publisherId={publisherId}', fixResult); + + // Get a specific event type (build completed) + apiwriter.getJson('/notification/eventTypes/{eventTypeId}', function(context, result) { + // strip away all the field "value" + + var fields = result.responseBody.fields; + if (fields) { + var k = Object.keys(fields); + k.forEach(function(fieldId) { + var field = fields[fieldId]; + if (field.fieldType) { + if (field.fieldType.value) { + delete field.fieldType.value + } + } + }); + } + + fixResult(context, result); + }); +}; + diff --git a/docs/integrate/api/_scripts/3.2/notification/subscriptions.js b/docs/integrate/api/_scripts/3.2/notification/subscriptions.js new file mode 100644 index 00000000000..59fc0b5b71c --- /dev/null +++ b/docs/integrate/api/_scripts/3.2/notification/subscriptions.js @@ -0,0 +1,202 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + sharedSubscriptionId: "ms.vss-code.pull-request-updated-subscription", + teamId: "552e2388-e9bb-429e-ad71-c2fef2ad085f" /* fab cloud / fab */ + }; +}; + +var fixResult = function(context, result) { + if (result) { + var str = JSON.stringify(result, null, 2); + + str = str.replace(/vsalmopen.visualstudio.com/gi, "fabrikam-fiber-inc.visualstudio.com"); + str = str.replace(/will smythe/gi, "Jamal Hartnett"); + str = str.replace(/wismythe@microsoft.com/gi, "fabrikamfiber16@outlook.com"); + + var newResult = JSON.parse(str); + + result.requestUrl = newResult.requestUrl; + result.responseBody = newResult.responseBody; + } +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + // Get all projects + apiwriter.getJson('/projects', function(context, result) { + context.project1 = result.responseBody.value[0].id; + context.project2 = result.responseBody.value[1].id; + }); + + // Get all teams for project 1 + apiwriter.getJson('/projects/{project1}/teams', function(context, result) { + context.team1 = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + // Create a new personal subscriptions + apiwriter.postJson('/notification/subscriptions', + function (context, result) { + var newPersonalSubscription = + { + "description": "All changes to work items in the Fabrikam project", + "filter": { + "eventType": "ms.vss-work.workitem-changed-event", + "criteria": { + "clauses": [], + "groups": [], + "maxGroupLevel": 0 + }, + "type": "Expression" + }, + "channel": { + "type": "EmailHtml" + }, + "scope": { + "id": context.project1 + } + }; + + return newPersonalSubscription; + }, + function (context, result) { + fixResult(context, result); + + context.subscriptionId = result.responseBody.id; + } + ); + + // Get all subscriptions for me + apiwriter.getJson('/notification/subscriptions', fixResult); + + // Get a subscription + apiwriter.getJson('/notification/subscriptions/{subscriptionId}', fixResult); + + // Update a subscription (description and scope) + apiwriter.patchJson('/notification/subscriptions/{subscriptionId}', + function (context, result) { + return { + description: "All changes to work items in this account", + scope: { + id: null + } + }; + }, + fixResult + ); + + // Update a subscription (disable) + apiwriter.patchJson('/notification/subscriptions/{subscriptionId}', + function (context, result) { + return { + status: "disabled" + }; + }, + fixResult + ); + + // Delete the personal subscriptions + apiwriter.deleteJson('/notification/subscriptions/{subscriptionId}', null, fixResult); + + // Opt out of a default subscription + + // First, reset to make sure the user isn't already opted out + apiwriter.setEnableWrite(false); + apiwriter.putJson('/notification/subscriptions/{sharedSubscriptionId}/userSettings/me', + function (context, result) { + return { + optedOut: false + }; + }, + fixResult + ); + + apiwriter.setEnableWrite(true); + apiwriter.putJson('/notification/subscriptions/{sharedSubscriptionId}/userSettings/me', + function (context, result) { + return { + optedOut: true + }; + }, + fixResult + ); + + + /******************/ + + // Create a team subscription + apiwriter.postJson('/notification/subscriptions', + function (context, result) { + var newSub = + { + "description": "A new work item enters our area path", + "filter": { + "eventType": "ms.vss-work.workitem-changed-event", + "criteria": { + "clauses": [], + "groups": [], + "maxGroupLevel": 0 + }, + "type": "Expression" + }, + "subscriber": { + "id": context.teamId + }, + "channel": { + "type": "EmailHtml", + "address": "myteam@fabrikam.org", + "useCustomAddress": true + } + }; + + return newSub; + }, + function (context, result) { + fixResult(context, result); + + context.teamSubscriptionId = result.responseBody.id; + } + ); + + // Query for subscriptions for a particular team + apiwriter.postJson('/notification/subscriptionQuery', + function(context) { + return { + conditions: [ + { + subscriber: context.teamId + } + ] + } + }, + fixResult + ); + + // Cleanup newly created team subscription + apiwriter.deleteJson('/notification/subscriptions/{teamSubscriptionId}', null, fixResult); + + + // Get + /*apiwriter.postJson('/notification/subscriptionQuery', + function (context, result) { + return { + "conditions": [ + { + "subscriber":"acaa9abb-d626-43e7-ac5a-e5266a6028bd" + } + ] + }; + }, + function (context, result) { + + } + );*/ + + +}; + diff --git a/docs/integrate/api/_scripts/4.0/project/properties.js b/docs/integrate/api/_scripts/4.0/project/properties.js new file mode 100644 index 00000000000..be702632bf6 --- /dev/null +++ b/docs/integrate/api/_scripts/4.0/project/properties.js @@ -0,0 +1,74 @@ +var apiwriter = require('apiwriter'); + +exports.getContext = function () { + return { + wildcard: "*SourceControl*" + }; +}; + +var fixResult = function(context, result) { + var str = JSON.stringify(result); + + str = str.replace(/test123.me.tfsallin.net:444/gi, "fabrikam-fiber-inc.visualstudio.com"); + + var newResult = JSON.parse(str); + + result.requestUrl = newResult.requestUrl; + result.responseBody = newResult.responseBody; +}; + +exports.submitRequests = function() { + + apiwriter.setEnableWrite(false); + + // Get a project + apiwriter.getJson('/projects', function(context, result) { + context.project = result.responseBody.value[0].id; + }); + + apiwriter.setEnableWrite(true); + + // Get all project properties + apiwriter.getJson('/projects/{project}/properties', function(context, result) { + fixResult(context, result); + context.propertyName = result.responseBody.value[0].name; + }); + + // Get specific project properties + apiwriter.getJson('/projects/{project}/properties?keys={propertyName},{wildcard}', fixResult); + + // Create a project property + apiwriter.patchJsonEx('/projects/{project}/properties', + function (context, result) { + return [ + { + "op": "add", + "path": "/Alias", + "value": "Frabrikam" + } + ] + }, + function(context, options) + { + options.headers["Content-Type"] = "application/json-patch+json" + }, + fixResult + ); + + // Delete a project property + apiwriter.patchJsonEx('/projects/{project}/properties', + function (context, result) { + return [ + { + "op": "remove", + "path": "/Alias" + } + ] + }, + function(context, options) + { + options.headers["Content-Type"] = "application/json-patch+json" + }, + fixResult + ); +}; \ No newline at end of file diff --git a/docs/integrate/api/shared/_data/accounts/GET__Accounts_memberId-_userId_.json b/docs/integrate/api/shared/_data/accounts/GET__Accounts_memberId-_userId_.json new file mode 100644 index 00000000000..79172b57704 --- /dev/null +++ b/docs/integrate/api/shared/_data/accounts/GET__Accounts_memberId-_userId_.json @@ -0,0 +1,49 @@ +{ + "method": "GET", + "resourceFormat": "/Accounts?memberId={userId}", + "requestUrl": "https://app.vssps.visualstudio.com/_apis/Accounts?memberId=d6245f20-2af8-44f4-9451-8107cb2767db&api-version=3.2-preview", + "requestHeaders": { + "Authorization": "bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im9PdmN6NU1fN3AtSGpJS2xGWHo5M3VfVjBabyJ9.eyJuYW1laWQiOiJkNjI0NWYyMC0yYWY4LTQ0ZjQtOTQ1MS04MTA3Y2IyNzY3ZGIiLCJzY3AiOiJwcmV2aWV3X2FwaV9hbGwgcHJldmlld19tc2RuX2xpY2Vuc2luZyIsImlzcyI6ImFwcC52c3Nwcy52aXN1YWxzdHVkaW8uY29tIiwiYXVkIjoiYXBwLnZzc3BzLnZpc3VhbHN0dWRpby5jb20iLCJuYmYiOjE0MTM1NjA3MDcsImV4cCI6MTQxMzU2MTYwN30.qR_ft8aKkYKl0xUoukz9vzc_O-26lhjH1GPVb0YuWdZDCD7OFUk3tSu5YhMSjFemZX7f_CgqRfR105LyNwZ2TTZVyI2coi8UykmpoWZIViZ2AujaX0nnoCihxlG8GFExa9knUPgHNlG77OFNvw-OkC4n6MIbf34SGwgRja5RwF-neZkrxlfT4tPG7zDw3d0-tA_L2E6-8YL5dadF3SMFgxzxfjVvk6aM3QJj68NNb1hK7yP5Gr-Hd2mbnoYF4ZJNgCF9UdUhG3gCOgpgJqy30RS-ExUjZq0Em41PTdrC7P9ZuUUgS744KqXZ2bma4duwp8b9-mWTpNgu-6epYRYOuA", + "Accept": "application/json" + }, + "statusCode": 200, + "responseHeaders": { + "cache-control": "no-cache", + "pragma": "no-cache", + "content-type": "application/json; charset=utf-8; api-version=3.2-preview", + "expires": "-1", + "server": "Microsoft-IIS/8.5", + "x-tfs-processid": "8e4e28af-2121-4b16-89ff-dc3028620095", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-frame-options": "SAMEORIGIN", + "set-cookie": [ + "Tfs-SessionId=bcf93626-e72f-0000-fe1d-f9bd2fe7cf01; path=/; secure", + "Tfs-SessionActive=2014-10-17T15:48:04; path=/; secure" + ], + "x-vss-userdata": "d6245f20-2af8-44f4-9451-8107cb2767db:fabrikamfiber16@hotmail.com", + "activityid": "6864684e-e72f-0001-7083-c8692fe7cf01", + "x-aspnet-version": "4.0.30319", + "x-powered-by": "ASP.NET", + "p3p": "CP=\"CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT\"", + "x-content-type-options": "nosniff", + "date": "Fri, 17 Oct 2014 15:48:03 GMT", + "content-length": "1019" + }, + "responseBody": { + "count": 2, + "value": [ + { + "accountId": "6affcbef-fe5d-44c6-8a29-439b79aaa118", + "accountUri": "https://Fabrikam-Fiber-Inc.vssps.visualstudio.com:443/", + "accountName": "Fabrikam-Fiber-Inc", + "properties": {} + }, + { + "accountId": "bf83696f-383b-4980-95b5-1f1127640a8a", + "accountUri": "https://NormalPaulk.vssps.visualstudio.com:443/", + "accountName": "NormalPaulk", + "properties": {} + } + ] + } +} \ No newline at end of file diff --git a/docs/integrate/api/shared/_data/accounts/GET__Accounts_ownerId-_userId_.json b/docs/integrate/api/shared/_data/accounts/GET__Accounts_ownerId-_userId_.json new file mode 100644 index 00000000000..a007b0d1525 --- /dev/null +++ b/docs/integrate/api/shared/_data/accounts/GET__Accounts_ownerId-_userId_.json @@ -0,0 +1,43 @@ +{ + "method": "GET", + "resourceFormat": "/Accounts?ownerId={userId}", + "requestUrl": "https://app.vssps.visualstudio.com/_apis/Accounts?ownerId=d6245f20-2af8-44f4-9451-8107cb2767db&api-version=3.2-preview", + "requestHeaders": { + "Authorization": "bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im9PdmN6NU1fN3AtSGpJS2xGWHo5M3VfVjBabyJ9.eyJuYW1laWQiOiJkNjI0NWYyMC0yYWY4LTQ0ZjQtOTQ1MS04MTA3Y2IyNzY3ZGIiLCJzY3AiOiJwcmV2aWV3X2FwaV9hbGwgcHJldmlld19tc2RuX2xpY2Vuc2luZyIsImlzcyI6ImFwcC52c3Nwcy52aXN1YWxzdHVkaW8uY29tIiwiYXVkIjoiYXBwLnZzc3BzLnZpc3VhbHN0dWRpby5jb20iLCJuYmYiOjE0MTM1NjA3MDcsImV4cCI6MTQxMzU2MTYwN30.qR_ft8aKkYKl0xUoukz9vzc_O-26lhjH1GPVb0YuWdZDCD7OFUk3tSu5YhMSjFemZX7f_CgqRfR105LyNwZ2TTZVyI2coi8UykmpoWZIViZ2AujaX0nnoCihxlG8GFExa9knUPgHNlG77OFNvw-OkC4n6MIbf34SGwgRja5RwF-neZkrxlfT4tPG7zDw3d0-tA_L2E6-8YL5dadF3SMFgxzxfjVvk6aM3QJj68NNb1hK7yP5Gr-Hd2mbnoYF4ZJNgCF9UdUhG3gCOgpgJqy30RS-ExUjZq0Em41PTdrC7P9ZuUUgS744KqXZ2bma4duwp8b9-mWTpNgu-6epYRYOuA", + "Accept": "application/json" + }, + "statusCode": 200, + "responseHeaders": { + "cache-control": "no-cache", + "pragma": "no-cache", + "content-type": "application/json; charset=utf-8; api-version=3.2-preview", + "expires": "-1", + "server": "Microsoft-IIS/8.5", + "x-tfs-processid": "282311fd-65e5-498e-979e-e47e50f69c95", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-frame-options": "SAMEORIGIN", + "set-cookie": [ + "Tfs-SessionId=bcf93626-e72f-0000-fe1d-f9bd2fe7cf01; path=/; secure", + "Tfs-SessionActive=2014-10-17T15:48:04; path=/; secure" + ], + "x-vss-userdata": "d6245f20-2af8-44f4-9451-8107cb2767db:fabrikamfiber16@hotmail.com", + "activityid": "bc7b438c-e72f-0003-062e-cabc2fe7cf01", + "x-aspnet-version": "4.0.30319", + "x-powered-by": "ASP.NET", + "p3p": "CP=\"CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT\"", + "x-content-type-options": "nosniff", + "date": "Fri, 17 Oct 2014 15:48:03 GMT", + "content-length": "511" + }, + "responseBody": { + "count": 1, + "value": [ + { + "accountId": "bf83696f-383b-4980-95b5-1f1127640a8a", + "accountUri": "https://NormalPaulk.vssps.visualstudio.com:443/", + "accountName": "NormalPaulk", + "properties": {} + } + ] + } +} \ No newline at end of file diff --git a/docs/integrate/api/shared/_data/profiles/GET__profile_profiles_me.json b/docs/integrate/api/shared/_data/profiles/GET__profile_profiles_me.json new file mode 100644 index 00000000000..01628e92f97 --- /dev/null +++ b/docs/integrate/api/shared/_data/profiles/GET__profile_profiles_me.json @@ -0,0 +1,43 @@ +{ + "method": "GET", + "resourceFormat": "/profile/profiles/me", + "requestUrl": "https://app.vssps.visualstudio.com/_apis/profile/profiles/me?api-version=1.0", + "requestHeaders": { + "Authorization": "bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im9PdmN6NU1fN3AtSGpJS2xGWHo5M3VfVjBabyJ9.eyJuYW1laWQiOiJkNjI0NWYyMC0yYWY4LTQ0ZjQtOTQ1MS04MTA3Y2IyNzY3ZGIiLCJzY3AiOiJwcmV2aWV3X2FwaV9hbGwgcHJldmlld19tc2RuX2xpY2Vuc2luZyIsImlzcyI6ImFwcC52c3Nwcy52aXN1YWxzdHVkaW8uY29tIiwiYXVkIjoiYXBwLnZzc3BzLnZpc3VhbHN0dWRpby5jb20iLCJuYmYiOjE0MTM1NjUyODMsImV4cCI6MTQxMzU2NjE4M30.d6TM4ENq7j9dJBS2G2GYBUexQGdlzoZWGiEn9GrQgMAoV-VFHX80q81HsnONusyExV8a_qDWUebmbM6_IjyhEtfn9aCKMjtPqNyubZAnebiA6fzxnYK1MKbinKeH6t2CweXcG7L7OkuVAQQ_GswHUUHZn7AnGqRHquh1brSVFafv4_9aObCKIXmaGhl5ohbSNiSQrEZ0IvtN5t2AG69HIOrA3BkFFdbrHiDNtjuAXWUVN06knaijuAFZVszFaPIEDr5_veVfRV70RsX7a4Q04wbbjTDJk98sYaqGXH0cjdSELeWJjMRapmdkxlDpSie1JgnuRwu_mAnsIdXL0hqzpg", + "Accept": "application/json" + }, + "statusCode": 200, + "responseHeaders": { + "cache-control": "no-cache", + "pragma": "no-cache", + "content-type": "application/json; charset=utf-8; api-version=1.0", + "expires": "-1", + "last-modified": "Mon, 12 May 2014 22:23:07 GMT", + "etag": "\"1647\"", + "server": "Microsoft-IIS/8.5", + "x-tfs-processid": "282311fd-65e5-498e-979e-e47e50f69c95", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-frame-options": "SAMEORIGIN", + "set-cookie": [ + "Tfs-SessionId=bc7b438c-e72f-0002-114b-35bd2fe7cf01; path=/; secure", + "Tfs-SessionActive=2014-10-17T17:01:43; path=/; secure" + ], + "x-vss-userdata": "d6245f20-2af8-44f4-9451-8107cb2767db:fabrikamfiber16@hotmail.com", + "activityid": "bc7b438c-e72f-0002-114b-35bd2fe7cf01", + "x-aspnet-version": "4.0.30319", + "x-powered-by": "ASP.NET", + "p3p": "CP=\"CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT\"", + "x-content-type-options": "nosniff", + "date": "Fri, 17 Oct 2014 17:01:42 GMT", + "content-length": "252" + }, + "responseBody": { + "displayName": "Normal Paulk", + "publicAlias": "d6245f20-2af8-44f4-9451-8107cb2767db", + "emailAddress": "fabrikamfiber16@hotmail.com", + "coreRevision": 1647, + "timeStamp": "2014-05-12T22:23:07.727+00:00", + "id": "d6245f20-2af8-44f4-9451-8107cb2767db", + "revision": 1647 + } +} \ No newline at end of file diff --git a/docs/integrate/api/shared/_data/profiles/GET__profile_profiles_me_avatar.json b/docs/integrate/api/shared/_data/profiles/GET__profile_profiles_me_avatar.json new file mode 100644 index 00000000000..b559c7db04a --- /dev/null +++ b/docs/integrate/api/shared/_data/profiles/GET__profile_profiles_me_avatar.json @@ -0,0 +1,40 @@ +{ + "method": "GET", + "resourceFormat": "/profile/profiles/me/avatar", + "requestUrl": "https://app.vssps.visualstudio.com/_apis/profile/profiles/me/avatar?api-version=1.0", + "requestHeaders": { + "Authorization": "bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im9PdmN6NU1fN3AtSGpJS2xGWHo5M3VfVjBabyJ9.eyJuYW1laWQiOiJkNjI0NWYyMC0yYWY4LTQ0ZjQtOTQ1MS04MTA3Y2IyNzY3ZGIiLCJzY3AiOiJwcmV2aWV3X2FwaV9hbGwgcHJldmlld19tc2RuX2xpY2Vuc2luZyIsImlzcyI6ImFwcC52c3Nwcy52aXN1YWxzdHVkaW8uY29tIiwiYXVkIjoiYXBwLnZzc3BzLnZpc3VhbHN0dWRpby5jb20iLCJuYmYiOjE0MTM1NjUyODMsImV4cCI6MTQxMzU2NjE4M30.d6TM4ENq7j9dJBS2G2GYBUexQGdlzoZWGiEn9GrQgMAoV-VFHX80q81HsnONusyExV8a_qDWUebmbM6_IjyhEtfn9aCKMjtPqNyubZAnebiA6fzxnYK1MKbinKeH6t2CweXcG7L7OkuVAQQ_GswHUUHZn7AnGqRHquh1brSVFafv4_9aObCKIXmaGhl5ohbSNiSQrEZ0IvtN5t2AG69HIOrA3BkFFdbrHiDNtjuAXWUVN06knaijuAFZVszFaPIEDr5_veVfRV70RsX7a4Q04wbbjTDJk98sYaqGXH0cjdSELeWJjMRapmdkxlDpSie1JgnuRwu_mAnsIdXL0hqzpg", + "Accept": "application/json" + }, + "statusCode": 200, + "responseHeaders": { + "cache-control": "no-cache", + "pragma": "no-cache", + "content-type": "application/json; charset=utf-8; api-version=1.0", + "expires": "-1", + "last-modified": "Mon, 12 May 2014 22:23:07 GMT", + "etag": "\"-362841673\"", + "server": "Microsoft-IIS/8.5", + "x-tfs-processid": "62a51fc3-a1b1-425b-9bf0-660d67ac1da6", + "strict-transport-security": "max-age=31536000; includeSubDomains", + "x-frame-options": "SAMEORIGIN", + "set-cookie": [ + "Tfs-SessionId=bc7b438c-e72f-0002-114b-35bd2fe7cf01; path=/; secure", + "Tfs-SessionActive=2014-10-17T17:01:42; path=/; secure" + ], + "x-vss-userdata": "d6245f20-2af8-44f4-9451-8107cb2767db:fabrikamfiber16@hotmail.com", + "activityid": "68669df9-e72f-0001-4362-d9692fe7cf01", + "x-aspnet-version": "4.0.30319", + "x-powered-by": "ASP.NET", + "p3p": "CP=\"CAO DSP COR ADMa DEV CONo TELo CUR PSA PSD TAI IVDo OUR SAMi BUS DEM NAV STA UNI COM INT PHY ONL FIN PUR LOC CNT\"", + "x-content-type-options": "nosniff", + "date": "Fri, 17 Oct 2014 17:01:42 GMT", + "content-length": "587" + }, + "responseBody": { + "value": "iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEFSURBVFhH7dO9CoMwEMDxPliex93XEHwNB1d3cXRxy+QsCK4+wPWSVmui1hi5YsoF/lA/+1POhyhiCCkGU8dg6hhMHYOpYzB1DKaOwdT9NzhqB9CrzzaPi6qEDgbIq8+++RpjmeecyQ+Mq242ztkFS0gW50332bzHQR5gCXWv/s5E6BzBokghH3H3WEJk7D/OC5wUGdTKbI+GMziGRD3078C43Uj8bc3i2Te89y18yR+Mrd6SI1hfZz+sY5fA4j0aXZu+tnfB1vIYhamLYGw5Gidm2Lfr4OUXHwYY01AcjV4GAp6PqRUIeB6NO4HvEIOpYzB1DKaOwdQxmDoGU8dg6gIDx/AEB0N+AIvCcgcAAAAASUVORK5CYII=", + "timeStamp": "2014-05-12T22:23:07.727+00:00", + "size": "medium", + "isAutoGenerated": true + } +} \ No newline at end of file diff --git a/docs/integrate/api/shared/_img/accounts.png b/docs/integrate/api/shared/_img/accounts.png new file mode 100644 index 00000000000..ec8d66154c5 Binary files /dev/null and b/docs/integrate/api/shared/_img/accounts.png differ diff --git a/docs/integrate/api/shared/_img/profile.png b/docs/integrate/api/shared/_img/profile.png new file mode 100644 index 00000000000..97e494487d2 Binary files /dev/null and b/docs/integrate/api/shared/_img/profile.png differ diff --git a/docs/integrate/api/shared/accounts.md b/docs/integrate/api/shared/accounts.md new file mode 100644 index 00000000000..4afa10eac63 --- /dev/null +++ b/docs/integrate/api/shared/accounts.md @@ -0,0 +1,47 @@ +--- +title: Accounts REST API Reference for VSTS +description: Work with accounts programmatically using the REST APIs for Visual Studio Team Services. +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.assetid: C9470271-C11E-4BD2-82C8-D5272AADF82C +ms.manager: jivkok +ms.author: gozhang +ms.date: 02/22/2017 +--- + +# Accounts +[!INCLUDE [API_version](../_data/version3-preview2.md)] + +[!INCLUDE [GET_STARTED](../_data/get-started.md)] + +## Get a list of accounts + +```no-highlight +GET https://app.vssps.visualstudio.com/_apis/Accounts?[memberId={GUID}][&ownerId={GUID}]&api-version=3.2-preview +``` + +| Parameter | Type | Notes +|:----------|:-------|:-------------------------- +| Query +| api-version | string | [Version](../../get-started/rest/basics.md#versions) of the API to use. +| memberId | GUID | ID of the user (use [Profiles](https://www.visualstudio.com/en-us/docs/integrate/api/shared/profiles) for ID) +| ownerId | GUID | ID of the user (use [Profiles](https://www.visualstudio.com/en-us/docs/integrate/api/shared/profiles) for ID) + +### By member ID + +[!code-REST [GET__Accounts_memberId-_userId__json](./_data/accounts/GET__Accounts_memberId-_userId_.json)] + +### By owner ID + +[!code-REST [GET__Accounts_ownerId-_userId__json](./_data/accounts/GET__Accounts_ownerId-_userId_.json)] + +## Q&A + + + +#### Q: Can I use basic auth with the profiles API? + +A: No, you must use [OAuth](../../get-started/authentication/oauth.md). + + + diff --git a/docs/integrate/api/shared/overview.md b/docs/integrate/api/shared/overview.md new file mode 100644 index 00000000000..214042f7dd4 --- /dev/null +++ b/docs/integrate/api/shared/overview.md @@ -0,0 +1,32 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Account and Profile Overview | REST API Reference for Visual Studio Team Services +description: Work with accounts and profiles programmatically using the REST APIs for Visual Studio Team Services. +ms.assetid: 2CC3AFF0-D665-407A-AC69-C68C61FB3267 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Accounts and profiles + +Each person using VSTS has a [profile](./profiles.md) and access to one or more [accounts](accounts.md). + +* [Accounts](accounts.md) +* [Profiles](./profiles.md) + +## Common tasks + +### Get my profile + +Get the authenticated user's [profile](./profiles.md). + +A profile + +### Get my accounts + +Get the list of [accounts](accounts.md) that the authenticated user has access to. + +The accounts + diff --git a/docs/integrate/api/shared/profiles.md b/docs/integrate/api/shared/profiles.md new file mode 100644 index 00000000000..b236abc7f0e --- /dev/null +++ b/docs/integrate/api/shared/profiles.md @@ -0,0 +1,29 @@ +--- +title: Profiles REST API Reference for VSTS +description: Work with proifiles programmatically using the REST APIs for Visual Studio Team Services. +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.assetid: 4F9CF932-0E38-49BC-9663-21B062732173 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Profiles +[!INCLUDE [API_version](../_data/version.md)] + +[!INCLUDE [GET_STARTED](../_data/get-started.md)] + +## Get my profile + +[!code-REST [GET__profile_profiles_me_json](./_data/profiles/GET__profile_profiles_me.json)] + +## Q&A + + + +#### Q: Can I use basic auth with the profiles API? + +A: No, you must use [OAuth](../../get-started/Authentication/oauth.md). + + \ No newline at end of file diff --git a/docs/integrate/breadcrumb/toc.yml b/docs/integrate/breadcrumb/toc.yml new file mode 100644 index 00000000000..1df53d9e2d6 --- /dev/null +++ b/docs/integrate/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Integrate + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=integrate + items: + - name: Integrate + tocHref: /vsts/ + topicHref: /vsts/integrate/index \ No newline at end of file diff --git a/docs/integrate/concepts/cross-origin-resource-sharing.md b/docs/integrate/concepts/cross-origin-resource-sharing.md new file mode 100644 index 00000000000..64ebed641fc --- /dev/null +++ b/docs/integrate/concepts/cross-origin-resource-sharing.md @@ -0,0 +1,30 @@ +--- +title: Cross-origin resource sharing (CORS) with VSTS REST APIs +description: Learn about using CORS with VSTS and TFS REST APIs +ms.assetid: d7e3c119-5678-40e6-9c11-55a57c171278 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Cross-origin resource sharing (CORS) + +VSTS supports CORS. This enables JavaScript code served from a domain other than *.visualstudio.com to make Ajax requests to VSTS REST APIs. For this to work, each request must provide credentials (personal access tokens and OAuth access tokens are both supported options). Example: + +```js + $( document ).ready(function() { + $.ajax({ + url: 'https://fabrikam.visualstudio.com/defaultcollection/_apis/projects?api-version=1.0', + dataType: 'json', + headers: { + 'Authorization': 'Basic ' + btoa("" + ":" + myPatToken) + } + }).done(function( results ) { + console.log( results.value[0].id + " " + results.value[0].name ); + }); + }); +``` + +(replace `myPatToken` with a personal access token) \ No newline at end of file diff --git a/docs/integrate/concepts/dotnet-client-libraries.md b/docs/integrate/concepts/dotnet-client-libraries.md new file mode 100644 index 00000000000..793d94f00fe --- /dev/null +++ b/docs/integrate/concepts/dotnet-client-libraries.md @@ -0,0 +1,40 @@ +--- +title: .NET Client Libraries for Visual Studio Team Services (and TFS) +description: Easily integrate with VSTS and Team Foundation Server from apps and services on Windows. +ms.assetid: 474cdb4f-9a5e-49fb-84b2-9c540ebcf98b +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# .NET client libraries for Visual Studio Team Services (and TFS) + +## Overview +For .NET developers building Windows apps and services that integrate with Visual Studio Team Services (VSTS), client libraries are available for integrating with work item tracking, version control, build, and other services are now available. These packages replace the traditional TFS Client OM installer and make it easy to acquire and redistribute the libraries needed by your app or service. + +### Features +* Downloadable from nuget.org and easily importable into your Visual Studio projects +* Libraries are licensed for redistribution in your apps and services ([view the license](http://go.microsoft.com/fwlink/?LinkId=329770)) +* Access both traditional client object model APIs and [new REST APIs](https://www.visualstudio.com/en-us/docs/integrate/api/overview) + + +>Note: REST-based clients only work with VSTS and TFS 2015 (not previous versions of TFS) +>To learn more about extending and integrating with VSTS and Team Foundation Server using the client libraries, +>see [Extending Team Foundation](https://msdn.microsoft.com/en-us/library/bb130146.aspx) + +### Packages +| Package | Description | Primary usage | +|---------|-------------|---------------| +| [Microsoft.TeamFoundationServer.ExtendedClient](https://www.nuget.org/packages/Microsoft.TeamFoundationServer.ExtendedClient/) | Integrate with TFS (2012, 2013, 2015) and VSTS from desktop-based Windows applications. Work with and manage version control, work items, and build, and other resources from your client application. | Existing Windows apps leveraging an older version of the TFS Client OM. +| [Microsoft.TeamFoundationServer.Client](https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based, ASP.NET, and other Windows applications. Provides access to version control, work item tracking, build, and more via public REST APIs. | Window desktop apps and services that need to integrate with TFS 2015 and later and Visual Studio Team Services. +| [Microsoft.VisualStudio.Services.Client](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Client/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based, ASP.NET, and other Windows applications. Provides access to shared platform services such as account, profile, identity, security, and more via public REST APIs. | Windows desktop apps and services that need to interact with "shared platform" services (account, profile, identity, security, etc). +| [Microsoft.VisualStudio.Services.InteractiveClient](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.InteractiveClient/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based Windows applications that require interactive sign-in by a user. | Windows desktop applications not utilizing basic authentication or OAuth for authentication. +| [Microsoft.VisualStudio.Services.DistributedTask.Client](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.DistributedTask.Client/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based, ASP.NET, and other Windows applications. Provides access to the Distributed Task Service via public REST APIs. | Window desktop apps and services that need to integrate with TFS 2015 and later and Visual Studio Team Services. +| [Microsoft.VisualStudio.Services.Release.Client](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Release.Client/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based, ASP.NET, and other Windows applications. Provides access to the Release Service via public REST APIs. | Window desktop apps and services that need to integrate with TFS 2015 and later and Visual Studio Team Services. + + +
        +**Tip**: If you have an existing Windows app or service that uses the TFS Client Object Model, use Microsoft.TeamFoundationServer.ExtendedClient +
        \ No newline at end of file diff --git a/docs/integrate/concepts/rest-api-versioning.md b/docs/integrate/concepts/rest-api-versioning.md new file mode 100644 index 00000000000..67e05ece460 --- /dev/null +++ b/docs/integrate/concepts/rest-api-versioning.md @@ -0,0 +1,48 @@ +--- +title: REST API versioning for Visual Studio Team Services (and TFS) +description: Learn how versioning works for REST APIs for VSTS and TFS +ms.assetid: 5fc6efd4-9947-40f2-b4f6-9695a24de87c +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# REST API Versioning + +VSTS and Team Foundation Server REST APIs are versioned to ensure applications and services continue to work as APIs evolve. + +### Guidelines + +* API version **must** be specified with every request. +* API versions are in the format {major}.{minor}[-{stage}[.{resource-version}]] - For example, ```1.0```, ```1.1```, ```1.2-preview```, ```2.0```. +* While an API is in preview, you can specify a precise version of a particular revision of the API when needed (for example, ```1.0-preview.1```, ```1.0-preview.2```) +* Once an API is released (1.0, for example), its preview version (1.0-preview) is deprecated and can be deactivated after 12 weeks. +* During this time you should upgrade to the released version of the API. Once a preview API is deactivated, requests that specify a ```-preview``` version will be rejected. + +### Usage + +API version can be specified either in the header of the HTTP request or as a URL query parameter: + +HTTP request header: +```http +Accept: application/json;api-version=1.0 +``` + +Query parameter: +```no-highlight +GET https://{account}.visualstudio.com/defaultcollection/_apis/{area}/{resource}?api-version=1.0 +``` + +### Supported versions + +| Product | 1.0 | 2.0 | 3.0 | +|:----------------------------|:------:|:------:|:------:| +| VSTS | X | X | X | +| Team Foundation Server 2017 | X | X | X | +| Team Foundation Server 2015 | X | X | - | + +Major API version releases align with Team Foundation Server RTM releases. For example, the `3.0` API set was introduced with Team Foundation Server 2017. + +A small number of undocumented version 1.0 APIs existed in Team Foundation Server 2013, but are not supported. diff --git a/docs/integrate/concepts/service-hooks.md b/docs/integrate/concepts/service-hooks.md new file mode 100644 index 00000000000..a514049e94f --- /dev/null +++ b/docs/integrate/concepts/service-hooks.md @@ -0,0 +1,25 @@ +--- +title: Service hooks in VSTS REST APIs +description: Learn about service hooks and how to set up actions to take when specific events occur in Visual Studio Team Services. +ms.assetid: ec039cf9-2731-4451-b9b8-5711b229c0ff +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Service hooks in Visual Studio Team Services +Using the [Subscriptions](https://www.visualstudio.com/en-us/docs/integrate/api/hooks/subscriptions) REST APIs, you can programmatically create a subscription that performs an action on an external (consumer) service when a specific event occurs in a team project. For example, you can create a subscription to notify your service when a build fails. + +Supported events: +- build completed +- code pushed (for Git team projects) +- pull request create or updated (for Git team projects) +- code checked in (TFVC team projects) +- work item created, updated, deleted, restored or commented on +- message posted to a team room + +You can configure filters on your subscriptions to control which events trigger an action. For example, you can filter the build completed event based on the build status. For a complete set of supported events and filter options, see the [event reference](../../service-hooks/events.md). + +For a complete set of supported consumer services and actions, see the [consumer reference](../../service-hooks/consumers.md). \ No newline at end of file diff --git a/docs/integrate/get-started/auth/_img/configureBasicAuthFeature.png b/docs/integrate/get-started/auth/_img/configureBasicAuthFeature.png new file mode 100644 index 00000000000..65c12a7dd9a Binary files /dev/null and b/docs/integrate/get-started/auth/_img/configureBasicAuthFeature.png differ diff --git a/docs/integrate/get-started/auth/tfs-basic-auth.md b/docs/integrate/get-started/auth/tfs-basic-auth.md new file mode 100644 index 00000000000..4a54670828e --- /dev/null +++ b/docs/integrate/get-started/auth/tfs-basic-auth.md @@ -0,0 +1,73 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Basic Authentication for Team Foundation Server +description: Use the TFS Cross Platform (tfx) command line interface against TFS using basic authentication. +ms.assetid: 6dc7f977-4b62-4bd6-b77a-1c6cade1ffa8 +ms.manager: douge +ms.author: elbatk +ms.date: 03/10/2017 +--- + +# Use the TFS Cross Platform Command Line with TFS using basic authentication or personal access tokens (PATs) + +> [!IMPORTANT] +> Basic authentication is not recommended. Turning on IIS basic authentication causes various issues, and you should +> use [personal access tokens (PATs)](../../../accounts/use-personal-access-tokens-to-authenticate.md) instead. For example, if you turn on IIS basic authentication, GIT command line will stop working. + + +## If you know you want IIS basic authentication, then you'll need ... + +- The latest version of **node**, which can be downloaded [here](https://nodejs.org/en/download/) +- **TFS Cross Platform Command Line Interface (tfx)** + - **tfx** can be installed using `npm`, a component of Node.js by running: +```no-highlight +npm i -g tfx-cli +``` + +> To find out more about the tfx CLI, check out the [tfx documentation in GitHub](https://github.com/Microsoft/tfs-cli). + +## Configure TFS to use Basic Authentication + +> [!WARNING] +> Basic authentication sends usernames and passwords in plaintext. You should consider [configuring TFS to use SSL](../../../tfs-server/admin/setup-secure-sockets-layer.md) in order to enable secure communication when using basic auth. + + + +Follow these steps to enable basic auth for your TFS: + +1. Install the `Basic Authentication` feature for IIS in Server Manager +
        + +
        +2. Open IIS Manager and expand to the `Team Foundation Server` website, double click the `Authentication` tile in the Features view. + +3. Click on `Basic Authentication` in the list of authentication methods. Click `Enable` in the right hand column. You should now see `Basic Authentication` enabled. + +> [!NOTE] +> Leave the **domain** and **realm** settings for Basic Authentication empty. + +## tfx login with Basic Authentication + +Now you can start to use `tfx` against your TFS server. You'll want to login before issuing commands. + +1. Type the following login command: +```no-highlight +tfx login --auth-type basic +``` + +2. You will be prompted to add your service url. +3. You will be prompted for your username. Use `domain\user` (e.g. fabrikam\peter). If you are working on a workgroup machine, use `machinename\user`. +4. You will be prompted for your password. Enter the password for the username you entered. + +**You can now use any other tfx command.** + +```no-highlight +> tfx login --auth-type basic +Copyright Microsoft Corporation + +Enter service url > http://localhost:8080/tfs/defaultcollection +Enter username > fabfiber\peter +Enter password > ******* +logged in successfully +``` \ No newline at end of file diff --git a/docs/integrate/get-started/authentication/PATs.md b/docs/integrate/get-started/authentication/PATs.md new file mode 100644 index 00000000000..9ef8a01b3b8 --- /dev/null +++ b/docs/integrate/get-started/authentication/PATs.md @@ -0,0 +1,82 @@ +--- +title: Authenticating with personal access tokens | VSTS REST APIs +description: Use personal access tokens to get started with the REST APIs for Visual Studio Team Services. +ms.assetid: 255E1E2B-9CB2-4FC3-8495-12DB4149A449 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Authenticating with personal access tokens + +If you are working on a larger application or project we recommend you check out our [authentication guidance](./authentication-guidance.md) page to help you choose the correct authentication mechanism. For smaller projects that require a less robust solution, personal access tokens are a simple alternative. Please be aware that unless your users are using a credential manager (hyper link to below), they will have to enter their credentials each time. + +These APIs support [OAuth](./oauth.md) for authorization and you should plan to use that. With Oauth your users +don't have to provide their VSTS credentials to use when the APIs are called. +To get started on your app, though, you can authenticate using personal access tokens. + +[!INCLUDE [personal-access-tokens-procedure](../../../git/_shared/personal-access-tokens.md)] + +Here's a sample that gets a list of builds using curl. +
        +``` +curl -u username[:{personalaccesstoken}] https://{account}.visualstudio.com/DefaultCollection/_apis/build-release/builds +``` +
        +If you wish to provide the personal access token through an HTTP header, you must first convert it to a Base64 string (the following example shows how to convert to Base64 using C#). The resulting string can then be provided as an HTTP header in the format: +
        +``` +Authorization: Basic BASE64PATSTRING +``` +
        +Here it is in C# using the [HttpClient class](http://msdn.microsoft.com/en-us/library/system.net.http.httpclient.aspx). +
        +```cs +public static async void GetBuilds() +{ + try + { + var personalaccesstoken = "PATFROMWEB"; + + using (HttpClient client = new HttpClient()) + { + client.DefaultRequestHeaders.Accept.Add( + new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); + + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", + Convert.ToBase64String( + System.Text.ASCIIEncoding.ASCII.GetBytes( + string.Format("{0}:{1}", "", personalaccesstoken)))); + + using (HttpResponseMessage response = client.GetAsync( + "https://{account}.visualstudio.com/DefaultCollection/_apis/build-release/builds").Result) + { + response.EnsureSuccessStatusCode(); + string responseBody = await response.Content.ReadAsStringAsync(); + Console.WriteLine(responseBody); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } +} +``` +
        +When your code is working, it's a good time to switch from basic auth to [OAuth](./oauth.md). + + +## Enabling IIS Basic Authentication invalidates using PATs for TFS + +Learn more about [using IIS Basic Authentication with TFS on-premises](iis-basic-auth.md). + + +## Q&A + +#### Q: Can I use basic auth with all of the VSTS REST APIs? + +A: No. You can use basic auth with most of them, but [accounts and profiles](https://www.visualstudio.com/en-us/docs/integrate/api/shared/overview) only support [OAuth](./oauth.md). + diff --git a/docs/integrate/get-started/authentication/_img/app-settings.png b/docs/integrate/get-started/authentication/_img/app-settings.png new file mode 100644 index 00000000000..9d2bdfa4ef2 Binary files /dev/null and b/docs/integrate/get-started/authentication/_img/app-settings.png differ diff --git a/docs/integrate/get-started/authentication/_img/enable-credentials.png b/docs/integrate/get-started/authentication/_img/enable-credentials.png new file mode 100644 index 00000000000..c55e321533b Binary files /dev/null and b/docs/integrate/get-started/authentication/_img/enable-credentials.png differ diff --git a/docs/integrate/get-started/authentication/_img/grant-access.png b/docs/integrate/get-started/authentication/_img/grant-access.png new file mode 100644 index 00000000000..9d4ed681ee7 Binary files /dev/null and b/docs/integrate/get-started/authentication/_img/grant-access.png differ diff --git a/docs/integrate/get-started/authentication/_img/oauth-overview.png b/docs/integrate/get-started/authentication/_img/oauth-overview.png new file mode 100644 index 00000000000..df10fa2d3c2 Binary files /dev/null and b/docs/integrate/get-started/authentication/_img/oauth-overview.png differ diff --git a/docs/integrate/get-started/authentication/_img/profile.png b/docs/integrate/get-started/authentication/_img/profile.png new file mode 100644 index 00000000000..80851594778 Binary files /dev/null and b/docs/integrate/get-started/authentication/_img/profile.png differ diff --git a/docs/integrate/get-started/authentication/authentication-guidance.md b/docs/integrate/get-started/authentication/authentication-guidance.md new file mode 100644 index 00000000000..f2fe2d33932 --- /dev/null +++ b/docs/integrate/get-started/authentication/authentication-guidance.md @@ -0,0 +1,55 @@ +--- +title: Guidance for authentication | VSTS REST APIs +description: Guidance for authentication with with Visual Studio Team Services. +ms.assetid: 15CCEB1E-F42B-4439-8C35-B8A225F5546C +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: peakyy +ms.date: 06/30/2017 +--- + +# Choosing the right authentication mechanism + + + +When writing an application which interfaces with VSTS, you will have to authenticate to gain acess to resources like REST APIs. We understand that VSTS offers many different ways to authenticate your application. This topic provides guidance to help you choose the right authentication for your application. The following table outlines the recommended authentication mechanism for different application types. We have provided basic descriptions, examples, and code samples to get you started. + +| Type of application | Description | example |Authentication mechanism | Code samples | +|---------------------|-------------|---------|-------------------------|--------| + Interactive client-side (REST) | Client application, that allows user interaction, calling VSTS REST APIs | Console application enumerating projects in an account | [Active Directory authentication library (ADAL)](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-libraries) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/ManagedClientConsoleAppSample) | +| Interactive client-side (Client library) | Client application, that allows user interaction, calling VSTS Client libraries | Console application enumerating bugs assigned to the current user | [Client libraries](../../concepts/dotnet-client-libraries.md) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/ClientLibraryConsoleAppSample) | +| Interactive Javascript | GUI based Javascript application | AngularJS single page app displaying project information for a user | [Active Directory authentication Library for JS (ADAL JS)](https://github.com/AzureAD/azure-activedirectory-library-for-js) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/JavascriptWebAppSample) | +| Non-interactive client-side | Headless text only client side application | Console app displaying all bugs assigned to a user | [Device Profile](https://azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-deviceprofile/?v=17.23h) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/DeviceProfileSample) | +| Interactive client-side app targeting VSTS and TFS | Client application, that allows user interaction, authenticates VSTS and TFS users | Console application allowing VSTS and TFS users to see assigned bugs | [Client Library (Interactive and Windows authentication)](/vsts/integrate/get-started/client-libraries/samples#authenticating-team-foundation-server) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/DualSupportClientSample) | +| Interactive web | GUI based web application | Custom Web dashboard displaying build summaries |[OAuth](./oauth.md) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/OAuthWebSample) | +| TFS application | TFS app using the Client OM library | TFS extension displaying team bug dashboards | [Client Libraries](../../concepts/dotnet-client-libraries.md) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/ClientLibraryConsoleAppSample) | +| [VSTS Extension](../../../extend/get-started/node.md#files) | VSTS extension | [Agile Cards](https://marketplace.visualstudio.com/items?itemName=spartez.agile-cards) | [VSS Web Extension SDK](https://github.com/Microsoft/vss-web-extension-sdk) | [sample walkthrough](../../../extend/develop/add-dashboard-widget.md) | + + + +## Enabling IIS Basic Authentication invalidates using PATs for TFS + +Learn more about [using IIS Basic Authentication with TFS on-premises](iis-basic-auth.md). + + + +## Q&A + +#### Q: I am making an interactive client-side application. Should I use [VSTS Client Libraries](./../client-libraries/dotnet.md) or [VSTS REST API's](https://www.visualstudio.com/en-us/docs/integrate/api/overview)? +A: We recommend using VSTS Client Libraries over REST API's when accessing VSTS resources. They are simplier and more easily maintained when version changes to our REST endpoints occur. If there is missing functionality from the client libraries [ADAL](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-libraries) is the best authentication mechanism to use with our REST API's. + +#### Q: Can I use ADAL if I log into my VSTS account with a Microsoft account (MSA)? + +A: Yes, you can use ADAL to create client side applications for an MSA backed account using ADAL with some limitiations. Instead of configuring ADAL with a `Client ID` or `Reply URL` from Azure Protal, MSA users can use the `Client ID: "872cd9fa-d31f-45e0-9eab-6e460a02d1f"` and `Reply URL: "urn:ietf:wg:oauth:2.0:oob"` as replacement values to get a valid ADAL access token without needing an Azure Active Directory. + +>Note: This approach will only work for client side applications. For JS web apps, ADAL JS will not work without an AAD tenant. + +#### Q: Is this guidence only for VSTS or is this also relevant for on-prem TFS users? + +A: This guidence is mainly for VSTS users. [Client Libraries](./../client-libraries/dotnet.md) are a series of packages built specifically for extending TFS functionality. For on-prem users, we recommend using the [Client Libraries](./../client-libraries/dotnet.md), Windows Auth, or [Personal Access Tokens (PATs)](./PATs.md) to authenticate on behalf of a user. + +#### Q: What if I want my application to authenticate with both TFS and Team Services? + +A: The best practice is to have different authentication paths for TFS and Visual Studio Team Services. You can use the requestContext to find out which you’re hitting and then use the best mechanism for each. Alternatively, if you want a unified solution, [PATs](./PATs.md) will work for both. + diff --git a/docs/integrate/get-started/authentication/iis-basic-auth.md b/docs/integrate/get-started/authentication/iis-basic-auth.md new file mode 100644 index 00000000000..f8325b6b8ac --- /dev/null +++ b/docs/integrate/get-started/authentication/iis-basic-auth.md @@ -0,0 +1,42 @@ +--- +title: Enabling IIS Basic Authentication invalidates using Personal Access Tokens +description: Enabling IIS Basic Authentication invalidates using Personal Access Tokens +ms.assetid: 173198c4-9b65-4c4a-a8f1-931b6b6c295a +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Enabling IIS Basic Authentication invalidates using Personal Access Tokens + +**TFS** + +We recommend you keep [IIS Basic Authentication]( https://docs.microsoft.com/en-us/iis/configuration/system.webserver/security/authentication/basicauthentication) turned +off at all times when using TFS. Only if absolutely necessary should you enable IIS Basic Authentication. When IIS +Basic Authentication is enabled on your windows machine, it prevents your using personal access tokens (PATs) as an +authentication mechanism. + +For example, if you use a PAT to allow a third party app to retrieve bug information and email that info to the +assignee of the bug, and IIS Basic Authentication is enabled, then that app will fail authentication. The app +won't be able to retrieve bug info. + +**Git with IIS Basic Authentication enabled:** + +> [!WARNING] +> If you use Git with IIS Basic Authentication, Git will break because it requires PATs for user +authentication. Although we do not recommend you use IIS Basic Authentication, by adding an extra header to Git +requests, you can use Git with IIS Basic Authentication: + + The extra header must include a base 64 encoding of "user:PAT" + + **Form**: + ```` + git -c http.extraheader='Authorization: Basic [base 64 encoding of "user:PAT"]' ls-remote http://tfsserver:8080/tfs/DefaultCollection/_git/projectName + ```` + + **Example**: + ```` + git -c http.extraheader='Authorization: Basic a2FzYW50aGE6bzN3cDVndmw2YXRkajJkam83Znd4N2k3NDdhbGxjNXp4bnc3b3o0dGQycmd3d2M1eTdjYQ==' ls-remote http://tfsserver:8080/tfs/DefaultCollection/_git/projectName + ```` diff --git a/docs/integrate/get-started/authentication/oauth.md b/docs/integrate/get-started/authentication/oauth.md new file mode 100644 index 00000000000..f322c197f39 --- /dev/null +++ b/docs/integrate/get-started/authentication/oauth.md @@ -0,0 +1,271 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Authorization using OAuth 2.0 | VSTS REST APIs +description: Use OAuth 2.0 authentication to get started with the REST APIs for Visual Studio Team Services. +ms.assetid: 19285121-1805-4421-B7C4-63784C9A7CFA +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Authorize access to REST APIs with OAuth 2.0 + +Authenticate your web app's users to access the REST APIs so that your app doesn't have to keep asking for their usernames and passwords. +VSTS uses the [OAuth 2.0 protocol](http://oauth.net/2/) to authorize your app for a user and generate an access token. +Use this token when you call the REST APIs from your app. + +First, you'll register your web app and get an app ID from Visual Studio Team Services. +Using that app ID, you'll send your users to VSTS to authorize your app to access their accounts there. +Once they've done that, you'll use that authorization to get an access token for that user. +When you call VSTS APIs on behalf of that user, you'll use that user's access token. +Access tokens expire, so you'll also need to refresh the access token if it's expired. + +![Process to get authorization](./_img/oauth-overview.png) + +For a C# example of the overall flow, see [vsts-auth-samples](https://github.com/Microsoft/vsts-auth-samples/tree/master/OAuthWebSample) + +## Register your app + +Go to (https://app.vssps.visualstudio.com/app/register) to register your app. + +Make sure you select the [scopes](#scopes) that your application needs, +and then use the exact same scopes when you [authorize your app](#authorize-your-app). +If you registered your app using the preview APIs, you'll want to re-register because the scopes that you used are now deprecated. + +When VSTS presents the authorization approval page to your user, +it will use your company name, and app name and descriptions, +along with the URLs for your company's web site, your app's website, and your terms of service and privacy statements, like this. + +Visaul Studio Online authorization page with your company and app information + +When you call VSTS to ask for a user's authorization, and the user grants it, +VSTS will redirect the user's browser to your authorization callback URL with the authorization code for that authorization. +The callback URL must be a secure connection (https) to transfer the code back to the app. It must exactly match the URL registered in your app. +If it doesn't, a 400 error page is displayed instead of a page asking the user to grant authorization to your app. + +When your register your app, the application settings page is displayed. + +Application settings for your app + +You'll call the authorization URL and pass your app ID and authorized scopes +when you want to have a user authorize your app to access his/her VSTS account. +You'll call the access token URL when you want to get an access token to call a VSTS REST API. + +The settings for each app that you register are available from your profile (https://app.vssps.visualstudio.com/profile/view). + +## Authorize your app + +If your user hasn't yet authorized your app to access his/her VSTS account, +call the authorization URL. + +```no-highlight +https://app.vssps.visualstudio.com/oauth2/authorize + ?client_id={app ID} + &response_type=Assertion + &state={state} + &scope={scope} + &redirect_uri={callback URL} +``` + +Parameter | Type | Notes +--------------|--------|---------------------------- +client_id | GUID | The ID assigned to your app when it was registered +response_type | string | `Assertion` +state | string | Can be any value. Typically a generated string value that correlates the callback with its associated authorization request. +scope | string | Scopes registered with the app. Space separated. See [available scopes](#scopes). +redirect_uri | URL | Callback URL for your appp. **This must exactly match the URL registered with the app** + +VSTS will ask your user to authorize your app. +It will handle authentication and then call you back with an authorization code, if the user approves the authorization. + +Add a link or button to your site that navigates the user to the VSTS authorization endpoint: + +```no-highlight +https://app.vssps.visualstudio.com/oauth2/authorize + ?client_id=88e2dd5f-4e34-45c6-a75d-524eb2a0399e + &response_type=Assertion + &state=User1 + &scope=vso.work%20vso.code_write + &redirect_uri=https://fabrikam.azurewebsites.net/myapp/oauth-callback +``` +
        +VSTS will ask the user to authorize your app. + +Assuming the user accepts, VSTS will redirect the user's browser to your callback URL, including a short-lived authorization code and the state value provided in the authorization URL: + +```no-highlight +https://fabrikam.azurewebsites.net/myapp/oauth-callback + ?code={authorization code} + &state=User1 +``` + +## Get an access and refresh token for the user + +Now use the authorization code to request an access token (and refresh token) for the user. This requires your service making a service-to-service HTTP request to Visual Studio Team Services. + +### URL +```no-highlight +POST https://app.vssps.visualstudio.com/oauth2/token +``` + +### HTTP request headers + +| Header | Value +|-------------------|------------------------------------------------------------------ +| Content-Type | `application/x-www-form-urlencoded` +| Content-Length | Calculated string length of the request body (see below) + +```no-highlight +Content-Type: application/x-www-form-urlencoded +Content-Length: 1322 +``` + +### HTTP request body +```no-highlight +client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2} +``` +
        +Replace the placeholder values in the sample request body above: + +* **{0}**: URL encoded client secret acquired when the app was registered +* **{1}**: URL encoded "code" provided via the `code` query parameter to your callback URL +* **{2}**: callback URL registered with the app + +#### C# example to form the request body + +```no-highlight +public string GenerateRequestPostData(string appSecret, string authCode, string callbackUrl) +{ + return String.Format("client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion={1}&redirect_uri={2}", + HttpUtility.UrlEncode(appSecret), + HttpUtility.UrlEncode(authCode), + callbackUrl + ); +} +``` + +### Response +```json +{ + "access_token": { access token for the user }, + "token_type": { type of token }, + "expires_in": { time in seconds that the token remains valid }, + "refresh_token": { refresh token to use to acquire a new access token } +} +``` +
        +**Important:** securely persist the *refresh_token* so your app does not need to prompt the user authorize again. *Access tokens* expire relatively quickly and should not be persisted. + +## Use the access token + +To use an access token, include it as a bearer token in the Authorization header of your HTTP request: + +``` +Authorization: Bearer {access_token} +``` + +For example, the HTTP request to [get recent builds](https://visualstudio.com/api/build-release/builds.md#getalistofbuilds) for a project: + +```no-highlight +GET https://myaccount.visualstudio.com/myproject/_apis/build-release/builds?api-version=3.0 +Authorization: Bearer {access_token} +``` + +## Refresh an expired access token + +If a user's access token expires, you can use the refresh token acquired in the authorization flow to get a new access token. This process is similar to the original process for exchanging the authorization code for an access token and refresh token. + +### URL +```no-highlight +POST https://app.vssps.visualstudio.com/oauth2/token +``` + +### HTTP request headers + +| Header | Value +|-------------------|------------------------------------------------------------------ +| Content-Type | `application/x-www-form-urlencoded` +| Content-Length | Calculated string length of the request body (see below) + +```no-highlight +Content-Type: application/x-www-form-urlencoded +Content-Length: 1654 +``` + +### HTTP request body +```no-highlight +client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer&client_assertion={0}&grant_type=refresh_token&assertion={1}&redirect_uri={2} +``` +
        +Replace the placeholder values in the sample request body above: + +* **{0}**: URL encoded client secret acquired when the app was registered +* **{1}**: URL encoded refresh token for the user +* **{2}**: callback URL registered with the app + + +### Response +```json +{ + "access_token": { access token for this user }, + "token_type": { type of token }, + "expires_in": { time in seconds that the token remains valid }, + "refresh_token": { new refresh token to use when the token has timed out } +} +``` +
        +**Important**: a new refresh token will be issued for the user. Persist this new token and use it the next time you need to acquire a new access token for the user. + + + +## Scopes + +> IMPORTANT: Scopes only enable access to REST APIs and select Git endpoints. SOAP API access is not supported. + +[!INCLUDE [scopestable](../../_shared/scopes.md)] + +When you [register your app](#register-your-app), +you'll use scopes to indicate which permissions in VSTS your app will require. +When your users authorize your app to access their account, +they'll authorize it for those scopes. +When you call to [request that authorization](#authorize-your-app), +you'll pass the same scopes that you registered. + +## Samples + +You can find a C# sample that implements OAuth to call VSTS REST APIs in our [C# OAuth GitHub Sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/OAuthWebSample). + +## Q&A + + + +#### Q: Can I use OAuth with my phone app? + +A: No. Right now, VSTS only support the web server flow, +so there's no supported way to implement OAuth for VSTS from an app like a phone app, +since there's no way to securely store the app secret. + +#### Q: What errors or special conditions do I need to handle in my code? + +A: Make sure that you handle these conditions: + +1. If your user denies your app access, no authorization code is returned. Don't use the authorization code without checking for that. +2. If your user revokes your app's authorization, the access token is no longer valid. When your app uses the token to access data, a 401 error is returned. You'll have to request authorization again. + +#### Q: I want to debug my web app locally. Can I use localhost for the callback URL when I register my app? + +A: VSTS does not allow localhost to be the hostname in your callback URL. You can edit the hosts file on your +local computer to map a hostname to 127.0.0.1. Then use this hostname when you register your app. Or, you can deploy your +app when testing to a Microsoft Azure website to be able to debug and use HTTPS for the callback URL. + +#### Q: I get an HTTP 400 error when I try to get an access token. What might be wrong? + +A: Check that you set the content type to application/x-www-form-urlencoded in your request header. + +#### Q: Can I use OAuth with the SOAP endpoints as well as the REST APIs? + +A: No. OAuth is only supported in the REST APIs at this point. + + + diff --git a/docs/integrate/get-started/center.json b/docs/integrate/get-started/center.json new file mode 100644 index 00000000000..357496ccadd --- /dev/null +++ b/docs/integrate/get-started/center.json @@ -0,0 +1,5 @@ +{ + "Template": "GetStarted", + "TocFilePath": "/integrate/get-started/toc.csv", + "TocTitlesFilePath": "/integrate/get-started/containerNodeTitles.csv" +} \ No newline at end of file diff --git a/docs/integrate/get-started/client-libraries/dotnet.md b/docs/integrate/get-started/client-libraries/dotnet.md new file mode 100644 index 00000000000..65e0ad391e3 --- /dev/null +++ b/docs/integrate/get-started/client-libraries/dotnet.md @@ -0,0 +1,81 @@ +--- +title: .NET Client Libraries for Visual Studio Team Services (and TFS) +description: Easily integrate with VSTS and Team Foundation Server from apps and services on Windows. +ms.assetid: 474cdb4f-9a5e-49fb-84b2-9c540ebcf98b +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# .NET client libraries for Visual Studio Team Services (and TFS) + +## Overview + +For .NET developers building Windows apps and services that integrate with Visual Studio Team Services, client libraries are available for integrating with work item tracking, version control, build, and other services are now available. These packages replace the traditional TFS Client OM installer and make it easy to acquire and redistribute the libraries needed by your app or service. + +### Features + +* Downloadable from nuget.org and easily importable into your Visual Studio projects +* Libraries are licensed for redistribution in your apps and services ([view the license](http://go.microsoft.com/fwlink/?LinkId=329770)) +* Access both traditional client object model APIs and [new REST APIs](https://visualstudio.com/api/overview.md) + * Note: REST-based clients only work with VSTS and TFS 2015 (not previous versions of TFS) + +To learn more about extending and integrating with VSTS and Team Foundation Server using the client libraries, see [Extending Team Foundation](https://msdn.microsoft.com/en-us/library/bb130146.aspx) + +### Packages + +| Package | Description | Primary usage | +|---------|-------------|---------------| +| [Microsoft.TeamFoundationServer.ExtendedClient](https://www.nuget.org/packages/Microsoft.TeamFoundationServer.ExtendedClient/) | Integrate with TFS (2012, 2013, 2015) and VSTS from desktop-based Windows applications. Work with and manage version control, work items, and build, and other resources from your client application. | Existing Windows apps leveraging an older version of the TFS Client OM. +| [Microsoft.TeamFoundationServer.Client](https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based, ASP.NET, and other Windows applications. Provides access to version control, work item tracking, build, and more via public REST APIs. | Window desktop apps and services that need to integrate with TFS 2015 and later and Visual Studio Team Services. +| [Microsoft.VisualStudio.Services.Client](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Client/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based, ASP.NET, and other Windows applications. Provides access to shared platform services such as account, profile, identity, security, and more via public REST APIs. | Windows desktop apps and services that need to interact with "shared platform" services (account, profile, identity, security, etc). +| [Microsoft.VisualStudio.Services.InteractiveClient](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.InteractiveClient/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based Windows applications that require interactive sign-in by a user. | Windows desktop applications not utilizing basic authentication or OAuth for authentication. +| [Microsoft.VisualStudio.Services.DistributedTask.Client](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.DistributedTask.Client/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based, ASP.NET, and other Windows applications. Provides access to the Distributed Task Service via public REST APIs. | Window desktop apps and services that need to integrate with TFS 2015 and later and Visual Studio Team Services. +| [Microsoft.VisualStudio.Services.Release.Client](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Release.Client/) | Integrate with Team Foundation Server 2015 and VSTS from desktop-based, ASP.NET, and other Windows applications. Provides access to the Release Service via public REST APIs. | Window desktop apps and services that need to integrate with TFS 2015 and later and Visual Studio Team Services. + +Review the [contracts index](https://visualstudio.com/api/contracts-page.md) to learn more about the .Net client libraries contracts. + +
        +**Tip**: If you have an existing Windows app or service that uses the TFS Client Object Model, use Microsoft.TeamFoundationServer.ExtendedClient +
        + +### Installing + +From a NuGet package manager command prompt: +```cmd +PM> Install-Package Microsoft.TeamFoundationServer.ExtendedClient +``` + +## Pattern for use + +In general, you will first create an authenticated connection to VSTS or TFS, then get an HttpClient for the service you want to work with, and finally call methods against that service. +Example: +```csharp +using Microsoft.VisualStudio.Services.Common; +using Microsoft.VisualStudio.Services.Client; +using Microsoft.TeamFoundation.SourceControl.WebApi; +using Microsoft.VisualStudio.Services.WebApi; + +const String c_collectionUri = "https://fabrikam.visualstudio.com/DefaultCollection"; +const String c_projectName = "MyGreatProject"; +const String c_repoName = "MyRepo"; + +// Interactively ask the user for credentials, caching them so the user isn't constantly prompted +VssCredentials creds = new VssClientCredentials(); +creds.Storage = new VssClientCredentialStorage(); + +// Connect to VSTS +VssConnection connection = new VssConnection(new Uri(c_collectionUri), creds); + +// Get a GitHttpClient to talk to the Git endpoints +GitHttpClient gitClient = connection.GetClient(); + +// Get data about a specific repository +var repo = gitClient.GetRepositoryAsync(c_projectName, c_repoName).Result; +``` + +## Samples + +You can check out samples on our [.NET Samples Page](./samples.md) or directly on our [.NET GitHub Repo](https://github.com/Microsoft/vsts-dotnet-samples). \ No newline at end of file diff --git a/docs/integrate/get-started/client-libraries/samples.md b/docs/integrate/get-started/client-libraries/samples.md new file mode 100644 index 00000000000..49c8a45d1b9 --- /dev/null +++ b/docs/integrate/get-started/client-libraries/samples.md @@ -0,0 +1,363 @@ +--- +title: .NET Client Library Samples for Visual Studio Team Services +description: C# samples showing how to integrate with VSTS and Team Foundation Server from apps and services on Windows. +ms.assetid: 9ff78e9c-63f7-45b1-a70d-42aa6a9dbc57 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# C# client libary samples + +Samples showing how to extend and integrate with Team Foundation Server and VSTS using the [.NET client libraries](../../concepts/dotnet-client-libraries.md). + + +## Samples in GitHub +There are many samples with instructions on how to run them on our [.NET Sample GitHub Page](https://github.com/Microsoft/vsts-dotnet-samples). + +## Other samples +REST examples on this page require the following NuGet packages: +* [Microsoft.TeamFoundationServer.Client](https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/) +* [Microsoft.VisualStudio.Services.Client](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Client/) +* [Microsoft.VisualStudio.Services.InteractiveClient](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.InteractiveClient/) + +SOAP examples on this page require the following NuGet packages: +* [Microsoft.TeamFoundationServer.ExtendedClient](https://www.nuget.org/packages/Microsoft.TeamFoundationServer.ExtendedClient/) +* [Microsoft.TeamFoundationServer.Client](https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/) +* [Microsoft.VisualStudio.Services.Client](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Client/) +* [Microsoft.VisualStudio.Services.InteractiveClient](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.InteractiveClient/) + + +#### Example 1: Using a REST-based HTTP client + +```cs +// https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/ +using Microsoft.TeamFoundation.WorkItemTracking.WebApi; +using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models; + +// https://www.nuget.org/packages/Microsoft.VisualStudio.Services.InteractiveClient/ +using Microsoft.VisualStudio.Services.Client; + +// https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Client/ +using Microsoft.VisualStudio.Services.Common; + +/// +/// This sample creates a new work item query for New Bugs, stores it under 'MyQueries', runs the query, and then sends the results to the console. +/// +public static void SampleREST() +{ + // Create a connection object, which we will use to get httpclient objects. This is more robust + // then newing up httpclient objects directly. Be sure to send in the full collection uri. + // For example: http://myserver:8080/tfs/defaultcollection + // We are using default VssCredentials which uses NTLM against a Team Foundation Server. See additional provided + // examples for creating credentials for other types of authentication. + VssConnection connection = new VssConnection(new Uri(collectionUri), new VssCredentials()); + + // Create instance of WorkItemTrackingHttpClient using VssConnection + WorkItemTrackingHttpClient witClient = connection.GetClient(); + + // Get 2 levels of query hierarchy items + List queryHierarchyItems = witClient.GetQueriesAsync(teamProjectName, depth: 2).Result; + + // Search for 'My Queries' folder + QueryHierarchyItem myQueriesFolder = queryHierarchyItems.FirstOrDefault(qhi => qhi.Name.Equals("My Queries")); + if (myQueriesFolder != null) + { + string queryName = "REST Sample"; + + // See if our 'REST Sample' query already exists under 'My Queries' folder. + QueryHierarchyItem newBugsQuery = null; + if (myQueriesFolder.Children != null) + { + newBugsQuery = myQueriesFolder.Children.FirstOrDefault(qhi => qhi.Name.Equals(queryName)); + } + if (newBugsQuery == null) + { + // if the 'REST Sample' query does not exist, create it. + newBugsQuery = new QueryHierarchyItem() + { + Name = queryName, + Wiql = "SELECT [System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags] FROM WorkItems WHERE [System.TeamProject] = @project AND [System.WorkItemType] = 'Bug' AND [System.State] = 'New'", + IsFolder = false + }; + newBugsQuery = witClient.CreateQueryAsync(newBugsQuery, teamProjectName, myQueriesFolder.Name).Result; + } + + // run the 'REST Sample' query + WorkItemQueryResult result = witClient.QueryByIdAsync(newBugsQuery.Id).Result; + + if (result.WorkItems.Any()) + { + int skip = 0; + const int batchSize = 100; + IEnumerable workItemRefs; + do + { + workItemRefs = result.WorkItems.Skip(skip).Take(batchSize); + if (workItemRefs.Any()) + { + // get details for each work item in the batch + List workItems = witClient.GetWorkItemsAsync(workItemRefs.Select(wir => wir.Id)).Result; + foreach (WorkItem workItem in workItems) + { + // write work item to console + Console.WriteLine("{0} {1}", workItem.Id, workItem.Fields["System.Title"]); + } + } + skip += batchSize; + } + while (workItemRefs.Count() == batchSize); + } + else + { + Console.WriteLine("No work items were returned from query."); + } + } +} +``` + +#### Example 2: Using SOAP-based client + +```cs +// https://www.nuget.org/packages/Microsoft.TeamFoundationServer.ExtendedClient/ +using Microsoft.TeamFoundation.Client; +using Microsoft.TeamFoundation.WorkItemTracking.Client; + +/// +/// This sample creates a new work item query under 'MyQueries', runs the query, and then sends the results to the console. +/// +public static void SampleSOAP() +{ + // create TfsTeamProjectCollection instance using default credentials + using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(collectionUri))) + { + // get the WorkItemStore service + WorkItemStore workItemStore = tpc.GetService(); + + // get the project context for the work item store + Project workItemProject = workItemStore.Projects[teamProjectName]; + + // search for the 'My Queries' folder + QueryFolder myQueriesFolder = workItemProject.QueryHierarchy.FirstOrDefault(qh => qh is QueryFolder && qh.IsPersonal) as QueryFolder; + if (myQueriesFolder != null) + { + // search for the 'SOAP Sample' query + string queryName = "SOAP Sample"; + QueryDefinition newBugsQuery = myQueriesFolder.FirstOrDefault(qi => qi is QueryDefinition && qi.Name.Equals(queryName)) as QueryDefinition; + if (newBugsQuery == null) + { + // if the 'SOAP Sample' query does not exist, create it. + newBugsQuery = new QueryDefinition(queryName, "SELECT [System.Id],[System.WorkItemType],[System.Title],[System.AssignedTo],[System.State],[System.Tags] FROM WorkItems WHERE [System.WorkItemType] = 'Bug' AND [System.State] = 'New'"); + myQueriesFolder.Add(newBugsQuery); + workItemProject.QueryHierarchy.Save(); + } + + // run the 'SOAP Sample' query + WorkItemCollection workItems = workItemStore.Query(newBugsQuery.QueryText); + foreach (WorkItem workItem in workItems) + { + // write work item to console + Console.WriteLine("{0} {1}", workItem.Id, workItem.Fields["System.Title"].Value); + } + } + } +} +``` + +#### Example 3: Calling both REST and SOAP-based APIs using same TfsTeamProjectCollection instance +```cs +// https://www.nuget.org/packages/Microsoft.TeamFoundationServer.ExtendedClient/ +using Microsoft.TeamFoundation.Client; +using Microsoft.TeamFoundation.VersionControl.Client; + +// https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/ +using Microsoft.TeamFoundation.SourceControl.WebApi; + +/// +/// This sample shows how you can get SOAP services and Rest Http Clients from same TfsTeamProjectCollection object. +/// +public static void MixedSample() +{ + // Get TfsTeamProjectCollection using standard SOAP convention + using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(collectionUri))) + { + // Can retrieve SOAP service from TfsTeamProjectCollection instance + VersionControlServer vcServer = tpc.GetService(); + ItemSet itemSet = vcServer.GetItems("$/", RecursionType.OneLevel); + foreach (Item item in itemSet.Items) + { + Console.WriteLine(item.ServerItem); + } + + // Can retrieve REST client from same TfsTeamProjectCollection instance + TfvcHttpClient tfvcClient = tpc.GetClient(); + List tfvcItems = tfvcClient.GetItemsAsync("$/", VersionControlRecursionType.OneLevel).Result; + foreach (TfvcItem item in tfvcItems) + { + Console.WriteLine(item.Path); + } + } +} +``` + +## Authenticating (Visual Studio Team Services) + +### Creating a VssConnection instance to get HttpClients for REST services + +##### Azure Active Directory Authentication for REST services +```cs +public static void AADRestSample() +{ + // Create instance of VssConnection using AAD Credentials for AAD backed account + VssConnection connection = new VssConnection(new Uri(collectionUri), new VssAadCredential()); + + WorkItemTrackingHttpClient witClient = connection.GetClient(); + List items = witClient.GetQueriesAsync(teamProjectName).Result; +} +``` + +##### Personal Access Token authentication for REST services +```cs +public static void PersonalAccessTokenRestSample() +{ + // Create instance of VssConnection using Personal Access Token + VssConnection connection = new VssConnection(new Uri(collectionUri), new VssBasicCredential(string.Empty, pat)); + + WorkItemTrackingHttpClient witClient = connection.GetClient(); + List items = witClient.GetQueriesAsync(teamProjectName).Result; +} +``` + +##### Visual Studio sign-in prompt (Microsoft Account or Azure Active Directory backed) for REST services +```cs +public static void MicrosoftAccountRestSample() +{ + // Create instance of VssConnection using Visual Studio sign-in prompt + VssConnection connection = new VssConnection(new Uri(collectionUri), new VssClientCredentials()); + + WorkItemTrackingHttpClient witClient = connection.GetClient(); + List items = witClient.GetQueriesAsync(teamProjectName).Result; +} +``` + +##### OAuth Authentication for REST services +Follow this link to learn how to obtain and refresh an OAuth accessToken: http://vsooauthclientsample.codeplex.com/ +```cs +public static void OAuthSample() +{ + // Create instance of VssConnection using OAuth Access token + VssConnection connection = new VssConnection(new Uri(collectionUri), new VssOAuthCredential(accessToken)); + + WorkItemTrackingHttpClient witClient = connection.GetClient(); + List items = witClient.GetQueriesAsync(teamProjectName).Result; +} +``` + +### Creating a TfsTeamProjectCollection instance to use SOAP object model + +##### Azure Active Directory authentication for SOAP services +```cs +public static void AADSoapSample() +{ + // Authenticate using Azure Active Directory credential (requires a AAD-backed VSTS Account) + using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(collectionUri), new AadCredential())) + { + tpc.Authenticate(); + Console.WriteLine(tpc.InstanceId); + } +} +``` + +##### Basic authentication for SOAP services +```cs +public static void BasicAuthSoapSample() +{ + // Authenticate using Basic Authentication + NetworkCredential netCred = new NetworkCredential(basicAuthUsername, password); + BasicAuthCredential basicCred = new BasicAuthCredential(netCred); + TfsClientCredentials tfsCred = new TfsClientCredentials(basicCred); + tfsCred.AllowInteractive = false; + using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(collectionUri), tfsCred)) + { + tpc.Authenticate(); + Console.WriteLine(tpc.InstanceId); + } +} +``` + +##### Visual Studio sign-in prompt (Microsoft Account or Azure Active Directory backed) for SOAP services +```cs +public static void MicrosoftAccountSample() +{ + // authenticate using Visual Studio sign-in prompt + using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(collectionUri2), new TfsClientCredentials())) + { + tpc.Authenticate(); + Console.WriteLine(tpc.InstanceId); + } +} +``` + +## Authenticating (Team Foundation Server) + +### Creating a VssConnection instance to get HttpClients for REST services + +##### Basic Authentication for REST services +```cs +public static void BasicAuthRestSample() +{ + // Create instance of VssConnection using basic auth credentials. + // For security, ensure you are connecting to an https server, since credentials get sent in plain text. + VssConnection connection = new VssConnection(new Uri(collectionUri), new VssCredentials(new WindowsCredential(new NetworkCredential(username, password)))); + + WorkItemTrackingHttpClient witClient = connection.GetClient(); + List items = witClient.GetQueriesAsync(teamProjectName).Result; +} +``` + +##### Windows authentication for REST services +```cs +public static void WindowsAuthRestSample() +{ + // Create instance of VssConnection using Windows credentials (NTLM) + VssConnection connection = new VssConnection(new Uri(collectionUri), new VssClientCredentials()); + + // Create instance of WorkItemTrackingHttpClient using VssConnection + WorkItemTrackingHttpClient witClient = connection.GetClient(); + List items = witClient.GetQueriesAsync(teamProjectName).Result; +} +``` + +### Creating a TfsTeamProjectCollection instance to use SOAP object model + +##### Basic authentication for SOAP services +```cs +public static void BasicAuthSoapSample() +{ + // Authenticate using Basic Authentication + NetworkCredential netCred = new NetworkCredential(username, password); + WindowsCredential windowsCred = new WindowsCredential(netCred); + TfsClientCredentials tfsCred = new TfsClientCredentials(windowsCred); + tfsCred.AllowInteractive = false; + using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(collectionUri), tfsCred)) + { + tpc.Authenticate(); + Console.WriteLine(tpc.InstanceId); + } +} +``` + +##### Windows authentication for SOAP services +```cs +public static void WindowsAuthenticationSoapSample() +{ + // authenticate using windows authentication + using (TfsTeamProjectCollection tpc = new TfsTeamProjectCollection(new Uri(collectionUri), new TfsClientCredentials())) + { + tpc.Authenticate(); + Console.WriteLine(tpc.InstanceId); + } +} +``` diff --git a/docs/integrate/get-started/containerNodeTitles.csv b/docs/integrate/get-started/containerNodeTitles.csv new file mode 100644 index 00000000000..a66a12c37d4 --- /dev/null +++ b/docs/integrate/get-started/containerNodeTitles.csv @@ -0,0 +1,5 @@ +get-started, Get Started +rest, REST +authentication, Auth +client-libraries, Client libraries +service-hooks, Service hooks \ No newline at end of file diff --git a/docs/integrate/get-started/overview.md b/docs/integrate/get-started/overview.md new file mode 100644 index 00000000000..687b3098411 --- /dev/null +++ b/docs/integrate/get-started/overview.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/integrate/extensions/overview +--- \ No newline at end of file diff --git a/docs/integrate/get-started/rest/basics.md b/docs/integrate/get-started/rest/basics.md new file mode 100644 index 00000000000..b409e29f9c7 --- /dev/null +++ b/docs/integrate/get-started/rest/basics.md @@ -0,0 +1,295 @@ +--- +title: Get started with the REST APIs for VSTS and Team Foundation Server +description: Learn the basic patterns for using the REST APIs for VSTS and Team Foundation Server. +ms.assetid: bdddaf58-6849-4134-a295-2887dafeeea3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Get started with the REST APIs + +Integrate your app with VS Team Services and TFS using these REST APIs. + +These APIs follow a common pattern: + +```no-highlight +VERB https://{instance}[/{collection}[/{team-project}]/_apis[/{area}]/{resource}?api-version={version} +``` + +> Tip: To avoid having your app or service broken as APIs evolve, specify an [API version](#versions) on every request. + +## VS Team Services + +For VS Team Services, `instance` is `{account}.visualstudio.com` and `collection` is `DefaultCollection`, +so the pattern looks like this: + +```no-highlight +VERB https://{account}.VisualStudio.com/DefaultCollection/_apis[/{area}]/{resource}?api-version={version} +``` +
        +For example, here's how to get a list of team projects in a VSTS account. + +```dos +curl -u {username}[:{personalaccesstoken}] https://{account}.VisualStudio.com/DefaultCollection/_apis/projects?api-version=2.0 +``` +
        +If you wish to provide the personal access token through an HTTP header, you must first convert it to a Base64 string (the following example shows how to convert to Base64 using C#). The resulting string can then be provided as an HTTP header in the format: + +``` +Authorization: Basic BASE64PATSTRING +``` +
        +Here it is in C# using the [HttpClient class](https://msdn.microsoft.com/en-us/library/system.net.http.httpclient.aspx). + +```cs +public static async void GetProjects() +{ + try + { + var personalaccesstoken = "PAT_FROM_WEBSITE"; + + using (HttpClient client = new HttpClient()) + { + client.DefaultRequestHeaders.Accept.Add( + new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); + + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", + Convert.ToBase64String( + System.Text.ASCIIEncoding.ASCII.GetBytes( + string.Format("{0}:{1}", "", personalaccesstoken)))); + + using (HttpResponseMessage response = client.GetAsync( + "https://{account}.visualstudio.com/DefaultCollection/_apis/projects").Result) + { + response.EnsureSuccessStatusCode(); + string responseBody = await response.Content.ReadAsStringAsync(); + Console.WriteLine(responseBody); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } +} +``` +
        +If you don't have a VSTS account, +you can [set one up for free](/vsts/accounts/create-account-msa-or-work-student). + +Most samples on this site use Personal Access Tokens as they're a compact example for authenticating with the service. However, there are a variety of authentication mechanisms available for VSTS including ADAL, OAuth and Session Tokens. Refer to the [Authentication](../authentication/authentication-guidance.md) section for guidance on which one is best suited for your scenario. + +## TFS + +For TFS, `instance` is `{server:port}` and by default the port is 8080. +The default collection is `DefaultCollection`, but can be any collection. + +Here's how to get a list of team projects from TFS using the default port and collection. + +```dos +curl -u {username}[:{personalaccesstoken}] http://{server}:8080/DefaultCollection/_apis/projects?api-version=2.0 +``` + +The examples above use personal access tokens, which requires that you [create a personal access token](../Authentication/PATs.md). + + +## Responses +You should get a response like this. + +```json +{ + "value": [ + { + "id": "eb6e4656-77fc-42a1-9181-4c6d8e9da5d1", + "name": "Fabrikam-Fiber-TFVC", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/eb6e4656-77fc-42a1-9181-4c6d8e9da5d1", + "description": "TeamFoundationVersionControlprojects", + "collection": { + "id": "d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "name": "DefaultCollection", + "url": "https://fabrikam-fiber-inc.visualstudio.com/_apis/projectCollections/d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "collectionUrl":"https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection" + }, + "defaultTeam": { + "id": "66df9be7-3586-467b-9c5f-425b29afedfd", + "name": "Fabrikam-Fiber-TFVCTeam", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/eb6e4656-77fc-42a1-9181-4c6d8e9da5d1/teams/66df9be7-3586-467b-9c5f-425b29afedfd" + } + }, + { + "id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "name": "Fabrikam-Fiber-Git", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "description": "Gitprojects", + "collection": { + "id": "d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "name": "DefaultCollection", + "url": "https://fabrikam-fiber-inc.visualstudio.com/_apis/projectCollections/d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "collectionUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection" + }, + "defaultTeam": { + "id": "8bd35c5e-30bb-4834-a0c4-d576ce1b8df7", + "name": "Fabrikam-Fiber-GitTeam", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c/teams/8bd35c5e-30bb-4834-a0c4-d576ce1b8df7" + } + } + ], + "count": 2 +} +``` + +The response is [JSON](http://json.org/). +That's generally what you'll get back from the REST APIs, +although there are a few exceptions, +like [Git blobs](https://www.visualstudio.com/docs/integrate/api/git/blobs). + +Now you should be able to look around the specific +[API areas](https://www.visualstudio.com/docs/integrate/api/overview) like [work item tracking](https://www.visualstudio.com/docs/integrate/api/wit/overview) +or [Git](https://www.visualstudio.com/docs/integrate/api/git/overview) and get to the resources that you need. +Keep reading to learn more about the general patterns that are used in these APIs. + +## HTTP verbs + +Verb | Used for... +:------|:----------------------------------- +GET | Get a resource or list of resources +POST | Create a resource
        Get a list of resources using a more advanced query +PUT | Create a resource if it doesn't exist or, if it does, update it +PATCH | Update a resource +DELETE | Delete a resource + +### Request headers and request content + +When you provide request body (usually with the POST, PUT and PATCH verbs), include request headers that describe the body. For example, + +```no-highlight +POST https://fabrikam-fiber-inc.VisualStudio.com/DefaultCollection/_apis/build-release/requests +``` +```http +Content-Type: application/json +``` +```json +{ + "definition": { + "id": 3 + }, + "reason": "Manual", + "priority": "Normal" +} +``` + +### HTTP method override + +Some web proxies may only support the HTTP verbs GET and POST, but not more modern HTTP verbs like PATCH and DELETE. +If your calls may pass through one of these proxies, you can send the actual verb using a POST method, with a header to override the method. +For example, you may want to [update a work item](or [Git](../../api/git/overview.md) and get to the resources that you need. +/api/wit/work-items.md#updateworkitems) (`PATCH _apis/wit/workitems/3`), but you may have to go through a proxy that only allows GET or POST. +You can pass the proper verb (PATCH in this case) as an HTTP request header parameter and use POST as the actual HTTP method. + + +```no-highlight +POST https://fabrikam-fiber-inc.VisualStudio.com/DefaultCollection/_apis/wit/workitems/3 +``` +```http +X-HTTP-Method-Override: PATCH +``` +```json +{ + (PATCH request body) +} +``` + +## Response codes + +Response | Notes +:--------|:---------------------------------------- +200 | Success, and there is a response body. +201 | Success, when creating resources. Some APIs return 200 when successfully creating a resource. Look at the docs for the API you're using to be sure. +204 | Success, and there is no response body. For example, you'll get this when you delete a resource. +400 | The parameters in the URL or in the request body aren't valid. +401 | Authentication has failed. Often this is due to a missing or malformed Authorization header. +403 | The authenticated user doesn't have permission to perform the operation. +404 | The resource doesn't exist, or the authenticated user doesn't have permission to see that it exists. +409 | There's a conflict between the request and the state of the data on the server. For example, if you attempt to submit a pull request and there is already a pull request for the commits, the response code is 409. + +## Cross-origin resource sharing (CORS) + +VSTS supports CORS. This enables JavaScript code served from a domain other than *.visualstudio.com to make Ajax requests to VSTS REST APIs. For this to work, each request must provide credentials (personal access tokens and OAuth access tokens are both supported options). Example: + +```js + $( document ).ready(function() { + $.ajax({ + url: 'https://fabrikam.visualstudio.com/defaultcollection/_apis/projects?api-version=1.0', + dataType: 'json', + headers: { + 'Authorization': 'Basic ' + btoa("" + ":" + myPatToken) + } + }).done(function( results ) { + console.log( results.value[0].id + " " + results.value[0].name ); + }); + }); +``` + +(replace `myPatToken` with a personal access token) + + +## Versioning + +VSTS and Team Foundation Server REST APIs are versioned to ensure applications and services continue to work as APIs evolve. + +### Guidelines + +* API version **must** be specified with every request. +* API versions are in the format {major}.{minor}[-{stage}[.{resource-version}]] - For example, ```1.0```, ```1.1```, ```1.2-preview```, ```2.0```. +* While an API is in preview, you can specify a precise version of a particular revision of the API when needed (for example, ```1.0-preview.1```, ```1.0-preview.2```) +* Once an API is released (1.0, for example), its preview version (1.0-preview) is deprecated and can be deactivated after 12 weeks. +* During this time you should upgrade to the released version of the API. Once a preview API is deactivated, requests that specify a ```-preview``` version will be rejected. + +### Usage + +API version can be specified either in the header of the HTTP request or as a URL query parameter: + +HTTP request header: +```http +Accept: application/json;api-version=1.0 +``` + +Query parameter: +```no-highlight +GET https://{account}.visualstudio.com/defaultcollection/_apis/{area}/{resource}?api-version=1.0 +``` + +### Supported versions + +| Product | 1.0 | 2.0 | 3.0 | +|:----------------------------|:------:|:------:|:------:| +| Team Services | X | X | X | +| Team Foundation Server 2017 | X | X | X | +| Team Foundation Server 2015 | X | X | - | + +Major API version releases align with Team Foundation Server RTM releases. For example, the `3.0` API set was introduced with Team Foundation Server 2017. + +A small number of undocumented version 1.0 APIs existed in Team Foundation Server 2013, but are not supported. + +## Help and feedback + +Get your technical questions answered, request a feature, or report a bug by sending an e-mail to: **[vsointegration@microsoft.com](http://go.microsoft.com/fwlink/?LinkId=615292)** + +## Q&A + + + +#### Q: Is there a .NET library that I can use to access the web APIs? + +A: Yes, see the [overview of client libraries](../client-libraries/dotnet.md). + +#### Q: Where can I learn about the specific .Net client libraries contracts? + +A: Review the [contracts index](or [Git](../../api/git/overview.md) and get to the resources that you need. +/api/contracts-page.md) to learn about the specific .Net client library contracts. + + + diff --git a/docs/integrate/get-started/rest/samples.md b/docs/integrate/get-started/rest/samples.md new file mode 100644 index 00000000000..d8f2f62ff8e --- /dev/null +++ b/docs/integrate/get-started/rest/samples.md @@ -0,0 +1,131 @@ +--- +title: REST API samples for VSTS and Team Foundation Server +description: REST API samples for VSTS and Team Foundation Server. +ms.assetid: 9E17A266-051F-403F-A285-7F21D9CC52F0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/25/2016 +--- + +# Get started sample + +## Personal Access Tokens + +When using the REST APIs or .NET Libraries, you need to authenticate with Visual Studio Team Services (VSTS). Most samples on this site use Personal Access Tokens as they're a compact example for authenticating with the service. However, there are a variety of authentication mechanisms available for VSTS including ADAL, OAuth and Session Tokens. Refer to the [Authentication](../authentication/authentication-guidance.md) section for guidance on which one is best suited for your scenario. + +To get started with these samples [create a personal access token](../authentication/PATs.md). + +
        +Tip: Personal access tokens are like passwords. Keep them secret. Make sure you save them in a secure location once your personal access token is created. +
        + +If you wish to provide the personal access token through an HTTP header, you must first convert it to a Base64 string (the following example shows how to convert to Base64 using C#). The resulting string can then be provided as an HTTP header in the format: +``` +Authorization: Basic BASE64PATSTRING +``` + +## REST API + +Here is an example getting a list of projects for your account. + +````cs +using System.Net.Http; +using System.Net.Http.Headers; + +... + +//encode your personal access token +string credentials = Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", personalAccessToken))); + +ListofProjectsResponse.Projects viewModel = null; + +//use the httpclient +using (var client = new HttpClient()) +{ + client.BaseAddress = new Uri("https://{accountname}.visualstudio.com"); //url of our account + client.DefaultRequestHeaders.Accept.Clear(); + client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials); + + //connect to the REST endpoint + HttpResponseMessage response = client.GetAsync("_apis/projects?stateFilter=All&api-version=1.0").Result; + + //check to see if we have a succesfull respond + if (response.IsSuccessStatusCode) + { + //set the viewmodel from the content in the response + viewModel = response.Content.ReadAsAsync().Result; + + //var value = response.Content.ReadAsStringAsync().Result; + } +} + +```` + +## .Net Client Libraries + +In this example we are using two of the .Net Client Libraries. Make sure these are referenced within your .net project. + +[TFS Client](https://www.nuget.org/packages/Microsoft.TeamFoundationServer.Client/) + +[Microsoft Visual Studio Services Client](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Client/) + +Here is a simple example getting a list of projects for your account. + +````cs +using Microsoft.TeamFoundation.Core.WebApi; +using Microsoft.VisualStudio.Services.Common; + +... + +//create uri and VssBasicCredential variables +Uri uri = new Uri(url); +VssBasicCredential credentials = new VssBasicCredential("", personalAccessToken); + +using (ProjectHttpClient projectHttpClient = new ProjectHttpClient(uri, credentials)) +{ + IEnumerable projects = projectHttpClient.GetProjects().Result; +} + +```` + +## Work item tracking + +You can find the following samples and more in C# and .NET at the [work item tracking samples page](https://www.visualstudio.com/docs/integrate/api/wit/overview). + +- [Create a bug](https://visualstudio.com/api/wit/samples.md#create-bug) +- [Migrating work items](https://visualstudio.com/api/wit/samples.md#migrating-work-items) +- [Update a bug](https://visualstudio.com/api/wit/samples.md#update-bug) +- [Add a comment to a bug](https://visualstudio.com/api/wit/samples.md#add-comment-to-bug) +- [Change a bug to a user story](https://visualstudio.com/api/wit/samples.md#change-bug-to-a-user-story) + +## Projects and teams + +## Git + +## Build + +## Slack + +## Jenkins + +## Q&A + + + +#### Q: Where can I get the source code for the code samples? + +A: See the [https://github.com/Microsoft/vsts-restapi-samplecode](https://github.com/Microsoft/vsts-restapi-samplecode). + +#### Q: Where can I find more inforation on the .NET library? + +A: Yes, see the [overview of client libraries](../client-libraries/dotnet.md) + +#### Q: Where can I learn about the specific .Net client libraries contracts? + +A: Review the [contracts index](https://visualstudio.com/api/contracts-page.md) to learn about the specific .Net client library contracts. + + + diff --git a/docs/integrate/how-to/call-rest-api.md b/docs/integrate/how-to/call-rest-api.md new file mode 100644 index 00000000000..7892e7967e6 --- /dev/null +++ b/docs/integrate/how-to/call-rest-api.md @@ -0,0 +1,274 @@ +--- +title: Get started with the REST APIs for VSTS and Team Foundation Server +description: Learn the basic patterns for using the REST APIs for VSTS and Team Foundation Server. +ms.assetid: 14ac2881-2aaf-4291-8dfe-3f7e3f591861 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Get started with the REST APIs + +Integrate your app with Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) using these REST APIs. + +These APIs follow a common pattern: + +```no-highlight +VERB https://{instance}[/{collection}[/{team-project}]/_apis[/{area}]/{resource}?api-version={version} +``` + +> Tip: To avoid having your app or service broken as APIs evolve, specify an [API version](#versions) on every request. + +## Visual Studio Team Services + +For VSTS, `instance` is `{account}.visualstudio.com` and `collection` is `DefaultCollection`, +so the pattern looks like this: + +```no-highlight +VERB https://{account}.VisualStudio.com/DefaultCollection/_apis[/{area}]/{resource}?api-version={version} +``` +
        +For example, here's how to get a list of team projects in a VSTS account. + +```dos +curl -u {username}[:{personalaccesstoken}] https://{account}.VisualStudio.com/DefaultCollection/_apis/projects?api-version=2.0 +``` +
        +If you wish to provide the personal access token through an HTTP header, you must first convert it to a Base64 string (the following example shows how to convert to Base64 using C#). The resulting string can then be provided as an HTTP header in the format: + +``` +Authorization: Basic BASE64PATSTRING +``` +
        +Here it is in C# using the [HttpClient class](http://msdn.microsoft.com/en-us/library/system.net.http.httpclient.aspx). + +```cs +public static async void GetProjects() +{ + try + { + var personalaccesstoken = "PAT_FROM_WEBSITE"; + + using (HttpClient client = new HttpClient()) + { + client.DefaultRequestHeaders.Accept.Add( + new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); + + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", + Convert.ToBase64String( + System.Text.ASCIIEncoding.ASCII.GetBytes( + string.Format("{0}:{1}", "", personalaccesstoken)))); + + using (HttpResponseMessage response = client.GetAsync( + "https://{account}.visualstudio.com/DefaultCollection/_apis/projects").Result) + { + response.EnsureSuccessStatusCode(); + string responseBody = await response.Content.ReadAsStringAsync(); + Console.WriteLine(responseBody); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } +} +``` +
        +If you don't have a VSTS account, +you can [set one up for free](https://www.visualstudio.com/docs/setup-admin/team-services/sign-up-for-visual-studio-team-services). + +Most samples on this site use Personal Access Tokens as they're a compact example for authenticating with the service. However, there are a variety of authentication mechanisms available for VSTS including ADAL, OAuth and Session Tokens. Refer to the [Authentication](../get-started/authentication/authentication-guidance.md) section for guidance on which one is best suited for your scenario. + +## TFS + +For TFS, `instance` is `{server:port}` and by default the port is 8080. +The default collection is `DefaultCollection`, but can be any collection. + +Here's how to get a list of team projects from TFS using the default port and collection. + +```dos +curl -u {username}[:{personalaccesstoken}] https://{server}:8080/DefaultCollection/_apis/projects?api-version=2.0 +``` + +The examples above use personal access tokens, which requires that you [create a personal access token](../get-started/Authentication/PATs.md). + + +## Responses +You should get a response like this. + +```json +{ + "value": [ + { + "id": "eb6e4656-77fc-42a1-9181-4c6d8e9da5d1", + "name": "Fabrikam-Fiber-TFVC", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/eb6e4656-77fc-42a1-9181-4c6d8e9da5d1", + "description": "TeamFoundationVersionControlprojects", + "collection": { + "id": "d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "name": "DefaultCollection", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/_apis/projectCollections/d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "collectionUrl": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection" + }, + "defaultTeam": { + "id": "66df9be7-3586-467b-9c5f-425b29afedfd", + "name": "Fabrikam-Fiber-TFVCTeam", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/eb6e4656-77fc-42a1-9181-4c6d8e9da5d1/teams/66df9be7-3586-467b-9c5f-425b29afedfd" + } + }, + { + "id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "name": "Fabrikam-Fiber-Git", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "description": "Gitprojects", + "collection": { + "id": "d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "name": "DefaultCollection", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/_apis/projectCollections/d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "collectionUrl": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection" + }, + "defaultTeam": { + "id": "8bd35c5e-30bb-4834-a0c4-d576ce1b8df7", + "name": "Fabrikam-Fiber-GitTeam", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c/teams/8bd35c5e-30bb-4834-a0c4-d576ce1b8df7" + } + } + ], + "count": 2 +} +``` + +The response is [JSON](http://json.org/). +That's generally what you'll get back from the REST APIs, +although there are a few exceptions, +like [Git blobs](https://www.visualstudio.com/docs/integrate/api/git/blobs). + +Now you should be able to look around the specific +[API areas](https://www.visualstudio.com/docs/integrate/api/git/overview) like [work item tracking](https://www.visualstudio.com/docs/integrate/api/wit/overview) +or [Git](https://www.visualstudio.com/docs/integrate/api/git/overview) and get to the resources that you need. +Keep reading to learn more about the general patterns that are used in these APIs. + +## HTTP verbs + +Verb | Used for... +:------|:----------------------------------- +GET | Get a resource or list of resources +POST | Create a resource
        Get a list of resources using a more advanced query +PUT | Create a resource if it doesn't exist or, if it does, update it +PATCH | Update a resource +DELETE | Delete a resource + +### Request headers and request content + +When you provide request body (usually with the POST, PUT and PATCH verbs), include request headers that describe the body. For example, + +```no-highlight +POST https://fabrikam-fiber-inc.VisualStudio.com/DefaultCollection/_apis/build-release/requests +``` +```http +Content-Type: application/json +``` +```json +{ + "definition": { + "id": 3 + }, + "reason": "Manual", + "priority": "Normal" +} +``` + +### HTTP method override + +Some web proxies may only support the HTTP verbs GET and POST, but not more modern HTTP verbs like PATCH and DELETE. +If your calls may pass through one of these proxies, you can send the actual verb using a POST method, with a header to override the method. +For example, you may want to [update a work item](https://www.visualstudio.com/docs/integrate/api/wit/work-items#updateworkitems) (`PATCH _apis/wit/workitems/3`), but you may have to go through a proxy that only allows GET or POST. +You can pass the proper verb (PATCH in this case) as an HTTP request header parameter and use POST as the actual HTTP method. + + +```no-highlight +POST https://fabrikam-fiber-inc.VisualStudio.com/DefaultCollection/_apis/wit/workitems/3 +``` +```http +X-HTTP-Method-Override: PATCH +``` +```json +{ + (PATCH request body) +} +``` + +## Response codes + +Response | Notes +:--------|:---------------------------------------- +200 | Success, and there is a response body. +201 | Success, when creating resources. Some APIs return 200 when successfully creating a resource. Look at the docs for the API you're using to be sure. +204 | Success, and there is no response body. For example, you'll get this when you delete a resource. +400 | The parameters in the URL or in the request body aren't valid. +401 | Authentication has failed. Often this is due to a missing or malformed Authorization header. +403 | The authenticated user doesn't have permission to perform the operation. +404 | The resource doesn't exist, or the authenticated user doesn't have permission to see that it exists. +409 | There's a conflict between the request and the state of the data on the server. For example, if you attempt to submit a pull request and there is already a pull request for the commits, the response code is 409. + +## Cross-origin resource sharing (CORS) + +VSTS supports CORS. This enables JavaScript code served from a domain other than *.visualstudio.com to make Ajax requests to VSTS REST APIs. For this to work, each request must provide credentials (personal access tokens and OAuth access tokens are both supported options). Example: + +```js + $( document ).ready(function() { + $.ajax({ + url: 'https://fabrikam.visualstudio.com/defaultcollection/_apis/projects?api-version=1.0', + dataType: 'json', + headers: { + 'Authorization': 'Basic ' + btoa("" + ":" + myPatToken) + } + }).done(function( results ) { + console.log( results.value[0].id + " " + results.value[0].name ); + }); + }); +``` + +(replace `myPatToken` with a personal access token) + + +## Versioning + +VSTS and Team Foundation Server REST APIs are versioned to ensure applications and services continue to work as APIs evolve. + +### Guidelines + +* API version **must** be specified with every request. +* API versions are in the format {major}.{minor}[-{stage}[.{resource-version}]] - For example, ```1.0```, ```1.1```, ```1.2-preview```, ```2.0```. +* While an API is in preview, you can specify a precise version of a particular revision of the API when needed (for example, ```1.0-preview.1```, ```1.0-preview.2```) +* Once an API is released (1.0, for example), its preview version (1.0-preview) is deprecated and can be deactivated after 12 weeks. +* During this time you should upgrade to the released version of the API. Once a preview API is deactivated, requests that specify a ```-preview``` version will be rejected. + +### Usage + +API version can be specified either in the header of the HTTP request or as a URL query parameter: + +HTTP request header: +```http +Accept: application/json;api-version=1.0 +``` + +Query parameter: +```no-highlight +GET https://{account}.visualstudio.com/defaultcollection/_apis/{area}/{resource}?api-version=1.0 +``` + +### Supported versions + +| Product | 1.0 | 2.0 | 3.0 | +|:----------------------------|:------:|:------:|:------:| +| VSTS | X | X | X | +| Team Foundation Server 2017 | X | X | X | +| Team Foundation Server 2015 | X | X | - | + +Major API version releases align with Team Foundation Server RTM releases. For example, the `3.0` API set was introduced with Team Foundation Server 2017. + +A small number of undocumented version 1.0 APIs existed in Team Foundation Server 2013, but are not supported. \ No newline at end of file diff --git a/docs/integrate/ide/extensions/_img/button-command.png b/docs/integrate/ide/extensions/_img/button-command.png new file mode 100644 index 00000000000..e5136817035 Binary files /dev/null and b/docs/integrate/ide/extensions/_img/button-command.png differ diff --git a/docs/integrate/ide/extensions/_img/button-text.png b/docs/integrate/ide/extensions/_img/button-text.png new file mode 100644 index 00000000000..8af8b9ab73e Binary files /dev/null and b/docs/integrate/ide/extensions/_img/button-text.png differ diff --git a/docs/integrate/ide/extensions/_img/command-package.png b/docs/integrate/ide/extensions/_img/command-package.png new file mode 100644 index 00000000000..f96214dbd9e Binary files /dev/null and b/docs/integrate/ide/extensions/_img/command-package.png differ diff --git a/docs/integrate/ide/extensions/_img/custom-command.png b/docs/integrate/ide/extensions/_img/custom-command.png new file mode 100644 index 00000000000..87e4733cfdb Binary files /dev/null and b/docs/integrate/ide/extensions/_img/custom-command.png differ diff --git a/docs/integrate/ide/extensions/_img/hello-world-button-on-menu.PNG b/docs/integrate/ide/extensions/_img/hello-world-button-on-menu.PNG new file mode 100644 index 00000000000..3a93c6ec9b4 Binary files /dev/null and b/docs/integrate/ide/extensions/_img/hello-world-button-on-menu.PNG differ diff --git a/docs/integrate/ide/extensions/_img/marketplace-vs.png b/docs/integrate/ide/extensions/_img/marketplace-vs.png new file mode 100644 index 00000000000..5d0650224e0 Binary files /dev/null and b/docs/integrate/ide/extensions/_img/marketplace-vs.png differ diff --git a/docs/integrate/ide/extensions/_img/new-project.png b/docs/integrate/ide/extensions/_img/new-project.png new file mode 100644 index 00000000000..514a17e36ad Binary files /dev/null and b/docs/integrate/ide/extensions/_img/new-project.png differ diff --git a/docs/integrate/ide/extensions/_img/package.PNG b/docs/integrate/ide/extensions/_img/package.PNG new file mode 100644 index 00000000000..00c66e28230 Binary files /dev/null and b/docs/integrate/ide/extensions/_img/package.PNG differ diff --git a/docs/integrate/ide/extensions/_img/results.png b/docs/integrate/ide/extensions/_img/results.png new file mode 100644 index 00000000000..4367cfac07e Binary files /dev/null and b/docs/integrate/ide/extensions/_img/results.png differ diff --git a/docs/integrate/ide/extensions/_img/upload.PNG b/docs/integrate/ide/extensions/_img/upload.PNG new file mode 100644 index 00000000000..302fb42393e Binary files /dev/null and b/docs/integrate/ide/extensions/_img/upload.PNG differ diff --git a/docs/integrate/ide/extensions/center.json b/docs/integrate/ide/extensions/center.json new file mode 100644 index 00000000000..b8df83c0ce1 --- /dev/null +++ b/docs/integrate/ide/extensions/center.json @@ -0,0 +1,5 @@ +{ + "Template": "GetStarted", + "TocFilePath": "/integrate/ide/extensions/toc.csv", + "TocTitlesFilePath": "/integrate/ide/extensions/containerNodeTitles.csv" +} \ No newline at end of file diff --git a/docs/integrate/ide/extensions/containerNodeTitles.csv b/docs/integrate/ide/extensions/containerNodeTitles.csv new file mode 100644 index 00000000000..380c819bd8f --- /dev/null +++ b/docs/integrate/ide/extensions/containerNodeTitles.csv @@ -0,0 +1,5 @@ +extensions, Visual Studio Extensions +overview, Visual Studio Extensions +develop_extensions, Develop +publish_extensions, Publish +help, Help \ No newline at end of file diff --git a/docs/integrate/ide/extensions/develop_extensions/add_new_language.md b/docs/integrate/ide/extensions/develop_extensions/add_new_language.md new file mode 100644 index 00000000000..c425d5ed9e9 --- /dev/null +++ b/docs/integrate/ide/extensions/develop_extensions/add_new_language.md @@ -0,0 +1,34 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: I want to add a new language to Visual Studio +description: Information about adding language support to Visual Studio, with links to Java and Python repositories. +ms.assetid: 116E0CE9-F387-4614-B1C7-AB26E7060DF6 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# I want to add a new language to Visual Studio +Adding support for a new language to Visual Studio can contain: +* Syntax highlighting +* Statement completion +* Project/item templates +* Compile/run integration +* Debugger support + +As a starting point take a look at these open source examples on GitHub +* [Python Tools for Visual Studio](https://github.com/Microsoft/PTVS) +* [Node.js Tools for Visual Studio](https://github.com/Microsoft/nodejstools) +* [Java Tools for Visual Studio](https://github.com/tunnelvisionlabs/JavaForVS) + + +The Visual Studio Common Project System (CPS) is a unified, extensible, scalable, and performant project system that ships in the box with Visual Studio. It is also rehostable to other hosts such as console apps and Azure web applications. It provides a rich, managed API that offers clients the ability to query and manipulate project data, as well as an extensible framework for project type authors to customize project behavior to suit their needs. For more information, see [Visual Studio Project System Extensibility Documentation](https://github.com/Microsoft/VSProjectSystem). + +For additional information about adding a new language to Visual Studio, see [Language Service Essentials.](https://docs.microsoft.com/en-us/visualstudio/extensibility/internals/legacy-language-service-essentials) + +# See also + +* [Publish your extension](../publish_extensions/publish.md) +* [SDK reference](../sdk.md) +* [Help - FAQ](../help/help.md) \ No newline at end of file diff --git a/docs/integrate/ide/extensions/develop_extensions/add_tool_window.md b/docs/integrate/ide/extensions/develop_extensions/add_tool_window.md new file mode 100644 index 00000000000..cfad4f437ba --- /dev/null +++ b/docs/integrate/ide/extensions/develop_extensions/add_tool_window.md @@ -0,0 +1,22 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: I want to add a custom tool window +description: A walkthrough to show you how to create a custom tool window. +ms.assetid: 66F28F7A-3369-4238-BF01-E63C912827A1 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# I want to add a custom tool window + +1. Create a VSIX project named FirstWindow. +2. When the project opens, add a tool window item template named FirstWindow. + 1. In the Solution Explorer, right-click the project node and select Add / New Item. + 2. In the Add New Item dialog, go to Visual C# / Extensibility and select Custom Tool Window. + 3. In the Name field at the bottom of the window, change the tool window file name to FirstWindow.cs. +3. Build the project and start debugging. +4. In the Experimental Instance, go to View / Other Windows. +5. You should see a menu item for FirstWindow. Click it. +6. You should see a tool window with the title FirstWindow and a button saying Click Me!. diff --git a/docs/integrate/ide/extensions/develop_extensions/customize_template.md b/docs/integrate/ide/extensions/develop_extensions/customize_template.md new file mode 100644 index 00000000000..4c246f7ae84 --- /dev/null +++ b/docs/integrate/ide/extensions/develop_extensions/customize_template.md @@ -0,0 +1,49 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: I want to customize a project template +description: A walkthrough to show you how to customize a project template. +ms.assetid: DAE23D07-A529-452A-9EDC-26DEEE23108C +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# I want to customize a project template + +You can use the VSIX Project template to create an extension or to package an existing extension for deployment. + +The VSIX Project template just consists of a source.extension.vsixmanifest file, which contains information about the extension and the assets it ships. + +## Deploying a Custom Project Template using the VSIX Project Template + +The following steps show how to use the VSIX project to package a project template that you can share with other developers or upload to the Visual Studio Gallery. +1. Create a project template. + 1. Open the project from which to create a template. This project can be of any project type. + 2. On the File menu, click Export Template. Complete the steps of the wizard. A .zip file is created in %USERPROFILE%\My Documents\Visual Studio [version]\My Exported Templates\. +2. Create an empty VSIX project. +3. Add the .zip file to the project. Set its Copy to Output Directory property to Copy Always. +4. Double-click the source.extension.vsixmanifest file to open it in the VSIX Manifest Designer, and then make the following changes: + * Set the Product Name field to My Project Template. + * Set the Product ID field to MyProjectTemplate - 1. + * Set the Author field to Fabrikam. + * Set the Description field to My project template. + * In the Assets section, add a Microsoft.VisualStudio.ProjectTemplate type and set its path to the name of the .zip file. +5. Save and close the source.extension.vsixmanifest file. +6. Build the project. +7. In the output directory, double-click the .vsix file. +8. A VSIX Installer message box appears. Follow the instructions to install the extension. +9. Close Visual Studio and then re-open it. +10. Select Extensions and Updates (on the Tools menu) and select the Templates category. One of the available extensions should be My Project Template. +11. The new project template appears in the New Project dialog in the same place as the original project template. For example, if you created a template named VB Console from a Visual Basic console application, VB Console appears in the same pane as the Visual Basic Console Application template. + +## To Specify the Location of the Template in the New Project Dialog Box + +1. Template folders are located in the Visual Studio Installation Path\Common7\IDE\ProjectTemplates and Visual Studio Installation Path\Common7\IDE\ItemTemplates directories. The names of the top-level sections in the New Project dialog do not exactly match the names of the template folders. Where they differ, use the name of the template folder. +2. Change the .vsix file extension to .zip, and then open the file. +3. Create a new folder with the same name as the section of the New Project dialog the template should appear in. +4. If the template is to appear in a subsection, create a subfolder of the same name. +5. Move the template .zip file into the new folder. +6. Change the .zip extension to .vsix. +7. Open the VSIX manifest. +8. In the VSIX manifest, update the Asset path of the template so that it points to the root of the directory tree that contains the template file. For example, if the template is in \CSharp\Windows, the reference should point to \CSharp. diff --git a/docs/integrate/ide/extensions/develop_extensions/extend_editor.md b/docs/integrate/ide/extensions/develop_extensions/extend_editor.md new file mode 100644 index 00000000000..a2cecf54beb --- /dev/null +++ b/docs/integrate/ide/extensions/develop_extensions/extend_editor.md @@ -0,0 +1,31 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: I want to extend the editor +description: A walkthrough to show you how to extend the Editor. +ms.assetid: 29B13A4F-19ED-4D80-848C-D94B7B24D2F4 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# I want to extend the Editor + +The Editor provides extension points that you can extend as Managed Extensibility Framework (MEF) component parts. These are the main extension point categories: +* Content types +* Classification types and classification formats +* Margins and scrollbars +* Tags +* Adornments +* Mouse processors +* Drop handlers +* Options +* IntelliSense + +To learn more about each point category, see [Editor Extension Points](https://docs.microsoft.com/en-us/visualstudio/extensibility/language-service-and-editor-extension-points). + +# See Also + +* [Publish your extension](../publish_extensions/publish.md) +* [SDK reference](../sdk.md) +* [Help - FAQ](../help/help.md) \ No newline at end of file diff --git a/docs/integrate/ide/extensions/develop_extensions/extend_ui.md b/docs/integrate/ide/extensions/develop_extensions/extend_ui.md new file mode 100644 index 00000000000..3c31f7e35e9 --- /dev/null +++ b/docs/integrate/ide/extensions/develop_extensions/extend_ui.md @@ -0,0 +1,24 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: I want to extend the UI +description: An overview of ways you can extend the UI with pointers to resources. +ms.assetid: BD65EA00-231F-4B36-952E-B16793A97225 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# I want to extend the UI + +There are many reasons you may want to customize (or extend) the UI, either for yourself or your workgroup. You may just need to add a button here or there, or you may want to create an entirely custom interface. These links are a good starting place: +* [Extending Menus and Commands](https://docs.microsoft.com/en-us/visualstudio/extensibility/internals/legacy-language-service-essentials) +* [Adding a Button to a Toolbar](https://docs.microsoft.com/en-us/visualstudio/extensibility/adding-a-command-to-the-solution-explorer-toolbar) +* [Adding Commands to Toolbars](https://docs.microsoft.com/en-us/visualstudio/extensibility/adding-commands-to-toolbars) +* [Extending and Customizing Tool Windows](https://docs.microsoft.com/en-us/visualstudio/extensibility/extending-and-customizing-tool-windows) + +# See Also + +* [Publish your extension](../publish_extensions/publish.md) +* [SDK reference](../sdk.md) +* [Help - FAQ](../help/help.md) \ No newline at end of file diff --git a/docs/integrate/ide/extensions/develop_extensions/unlisted.md b/docs/integrate/ide/extensions/develop_extensions/unlisted.md new file mode 100644 index 00000000000..f5f07d5f5e6 --- /dev/null +++ b/docs/integrate/ide/extensions/develop_extensions/unlisted.md @@ -0,0 +1,22 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: My "how-to" is not listed +description: If there is no "how-to" listed for what you want to do, here is where you will find pointers to more or make a request for one to be written. +ms.assetid: 4C4A7916-E7DB-410E-963D-DCFA4DB041BA +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# My "how-to" is not listed + +Most content on this site is currently under development. In the meantime you can find more topics on [MSDN.](https://docs.microsoft.com/en-us/visualstudio/extensibility/starting-to-develop-visual-studio-extensions) + +For immediate help, you can also try our ExtendVS room on [Gitter.](https://gitter.im/Microsoft/extendvs) + +# See also + +* [Publish your extension](../publish_extensions/publish.md) +* [SDK reference](../sdk.md) +* [Help - FAQ](../help/help.md) \ No newline at end of file diff --git a/docs/integrate/ide/extensions/hello_world.md b/docs/integrate/ide/extensions/hello_world.md new file mode 100644 index 00000000000..db67f979b03 --- /dev/null +++ b/docs/integrate/ide/extensions/hello_world.md @@ -0,0 +1,106 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Hello World for Visual Studio extensions +description: Work through a basic Hello World exercise +ms.assetid: 22CC3F51-2787-4D84-BCDD-A1A9A9D01DAC +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Hello world + +This Hello World example walks you through creating a custom command in Visual Studio and executing that command. You should learn the basics of these skills: +* [Create a project](#project) +* [Add a Custom command](#add) +* [Modify the code](#code) +* [Run it](#run) + +For this example, you'll use Visual C# to add a custom menu button named "Say HelloWorld!" that looks like this: +![Image showing the Hello World button](./_img/hello-world-button-on-menu.png) + + +## Create a project + +NOTE: Before you start, you may be prompted to download the Extensibility tools. which include the VSIX template you'll need and sample code. + +1. From the **File** menu, click **New Project**. At the bottom of the screen, you can enter the name of your project. +2. From the **Templates** menu, click **Visual C#**, click **Extensibility**, and then click **VSIX Project**. (Your custom templates can be added to VSIX templates, but you must use a VSIX template for the final project.) + ![Image of New Project command](./_img/new-project.png) + +You should now see the Getting Started page and some sample resources. + +If you need to leave this tutorial and come back to it, you can find your new HelloWorld project on the **Start Page** in the **Recent** section. + + +## Add a Custom command + +1. If you select the manifest, you can see what options are changeable, for instance, metadata, description, and version. +2. Right-click the project (not the solution). On the context menu, click **Add**, and then click **User Control**. +3. Go back to the **Extensibility** section, and then click **Custom Command**. + ![Image of the Custom Command window](./_img/custom-command.png) +4. In the **Name** field at the bottom, give it a name, for instance Command.cs. + +Your new command will be listed in the **Solution Explorer** under the **Resources** branch. This is also where you'll find other files related to your command, such as the PNG and ICO files if you wish to modify the image. + + +## Modify the code + +At this point, the Button you're adding is pretty generic. You'll have to modify the VSCT file and CS file if you want to make changes. + * The VSCT file is where you can rename your commands, as well as define where they go in the Visual Studio command system. As you explore the VSCT file, you will notice a lot of commented code that explains what each section of code controls. + * The CS file is where you can define actions, such as the click handler. + +1. In **Solution Explorer**, find the VSCT file for your new command. In this case, it will be called CommandPackage.vsct. + ![Image of the VSCT files](./_img/command-package.png) +2. Change the **ButtonText** parameter to "Say HelloWorld!" + + ... + + ... + +3. Go back to **Solution Explorer** and find the Command.cs file. Change the string message for the command to “Hello World!” + + ... + private void MenuItemCallback(object sender, EventArgs e) + { + string message = "Hello World"; + string title = "Command1"; + + // Show a message box to prove we were here + VsShellUtilities.ShowMessageBox( + this.ServiceProvider, + message, + title, + OLEMSGICON.OLEMSGICON_INFO, + OLEMSGBUTTON.OLEMSGBUTTON_OK, + OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); + } + ... + + +## Run it + +You know how this is going to turn out, but you should run the code to see how Visual Studio 2015 now has a debug window. +1. Click **Start**. A new instance of Visual Studio opens called **Experimental Instance**. This is the debug mode. +2. On the **Tools** menu of the **Experimental Instance**, click **Say HelloWorld!** + ![Image showing the Hello World output](./_img/results.png) + +You should see the output from your new custom command, in this case the window in the center of the screen that gives you the Hello World message. With the new dual-instance feature of Visual Studio 2015, you have both this **Experimental Instance** where you see the code in action and the original instance where you can make adjustments or fixes. + +# Next steps + +This walkthrough showed you how to: +* Create a project +* Add a custom command to a menu +* Modify the VSCT file +* Modify the CS file +* Run your code + +Now that you know the basics of working with Visual Studio, you can read overview material about other options in the **Develop** section of this Beginner's Guide and learn more about the rich library of [sample code](./samples.md) available to you. \ No newline at end of file diff --git a/docs/integrate/ide/extensions/help/gitter.md b/docs/integrate/ide/extensions/help/gitter.md new file mode 100644 index 00000000000..1af53b4d6b8 --- /dev/null +++ b/docs/integrate/ide/extensions/help/gitter.md @@ -0,0 +1,16 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Ask another developer +description: Use Gitter to ask your questions to other developers. +ms.assetid: 116A9B84-9DD8-4DE8-8E80-0A2B30856D42 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Ask another developer + +The ExtendVS Gitter room is a real-time forum where you can post your questions and meet other extension developers. There are over 100 developers in our room. All you need to join the conversation is a GitHub account. + +Join the [ExtendVS Gitter room](https://gitter.im/Microsoft/extendvs). \ No newline at end of file diff --git a/docs/integrate/ide/extensions/help/help.md b/docs/integrate/ide/extensions/help/help.md new file mode 100644 index 00000000000..47f4677c75a --- /dev/null +++ b/docs/integrate/ide/extensions/help/help.md @@ -0,0 +1,41 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: FAQ for Visual Studio extensions +description: Frequently asked questions (FAQ) for building Visual Studio extensions. +ms.assetid: 58B3A4FE-7188-450F-8402-EA9DFCD878E3 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# FAQ + +If you don't find an answer to your question here, try the [ExtendVS Gitter forum](https://gitter.im/Microsoft/extendvs). + + + +## General + +#### Q: How do I add my extension the the Visual Studio Marketplace? + +A: The Visual Studio Marketplace is currently in preview. Continue managing your Visual Studio extensions through the [Gallery](https://visualstudiogallery.msdn.microsoft.com/). Once the Marketplace is ready, your extension will be automatically migrated to the Marketplace. + + + +#### Q: I have a Visual Studio 2015 Extension, how do I add Visual Studio 2013 support for it? + +A: Reference the 2013 assembly when you build instead of the 2015 assembly. Visual Studio 2015 contains a binding redirect to ensure it continues to work when you run it within Visual Studio 2015. + +##Features and bugs + +#### Q: I have a feature request, how do I report it? + +A: Submit your feature request at [Visual Studio UserVoice](https://visualstudio.uservoice.com/forums/121579-visual-studio-2015/category/115698-extensibility). + + +#### Q: I found a bug, how do I report it? + +A: Submit your bug report through the [report a problem option within Visual Studio](https://docs.microsoft.com/en-us/visualstudio/ide/how-to-report-a-problem-with-visual-studio-2017). + + diff --git a/docs/integrate/ide/extensions/help/msdn.md b/docs/integrate/ide/extensions/help/msdn.md new file mode 100644 index 00000000000..feb56be7b62 --- /dev/null +++ b/docs/integrate/ide/extensions/help/msdn.md @@ -0,0 +1,16 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: MSDN +description: Find additional help at MSDN. +ms.assetid: 31BD6BC8-A377-4F02-974E-03C480C43A54 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# MSDN + +The Microsoft Developer Network (MSDN) has an encyclopedia's worth of curated content with 20+ years worth of Microsoft expertise. And it's all free for your use. + +Start with [Starting to Develop Visual Studio Extensions](https://docs.microsoft.com/en-au/visualstudio/extensibility/starting-to-develop-visual-studio-extensions). diff --git a/docs/integrate/ide/extensions/overview.md b/docs/integrate/ide/extensions/overview.md new file mode 100644 index 00000000000..5d1ca2e7194 --- /dev/null +++ b/docs/integrate/ide/extensions/overview.md @@ -0,0 +1,34 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Building extensions for Visual Studio +description: Build extensions for Visual Studio +ms.assetid: A5549D87-6E1E-4429-BE46-8A46A7260A83 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Building extensions for Visual Studio + +## What are extensions? + +Extensions allow you to add new features to or integrate existing tools into Visual Studio. An extension can be as simple as adding grid lines to show indentation levels in the editor or as complex as a suite of tools specific to how your team works. There are thousands of extensions already out there and available through the Marketplace; however, this Beginner’s Guide to Extensions will show you how to create your own. + +> [!NOTE] +> You can also [Create Extensions for Team Services](../../../extend/index.md). + +## How do I start? + +Before launching into the sea of resources at MSDN, this site has a Beginner’s Guide to Extensions. The following are some resources to get you started: +* Install an [optional helper tool](https://visualstudiogallery.msdn.microsoft.com/ab39a092-1343-46e2-b0f1-6a3f91155aa6) that adds extra IDE support for extension authors. +* Follow the [Hello World Tutorial](./hello_world.md). +* Join the [extendvs Gitter room](https://gitter.im/microsoft/extendvs) for questions. + +You’ll also learn about what resources, code samples, and extensions are already available to you. + +## Video guides from Channel 9 + +If you’re a visual person or you want a quick overview, the team at Microsoft has been busy creating content for you. A great place to start is this Building Extensions video (below) from Tim Sneath, Principal Program Manager. For more videos on extensibility, see [Channel 9](https://channel9.msdn.com/Search?term=extensions%20and%20visual%20studio%20toolbox#lang-en=en&ch9Search&pubDate=range&date-range-from=2015-10-13&date-range-to=2015-11-05&video-15to30=true&video-31to60=true). + + \ No newline at end of file diff --git a/docs/integrate/ide/extensions/publish_extensions/other_resources.md b/docs/integrate/ide/extensions/publish_extensions/other_resources.md new file mode 100644 index 00000000000..675e010b9e8 --- /dev/null +++ b/docs/integrate/ide/extensions/publish_extensions/other_resources.md @@ -0,0 +1,18 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Visual Studio Marketplace +description: Describes the new Visual Studio Marketplace +ms.assetid: 87B662CC-6003-4B4A-9617-05ECBB6AC055 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Visual Studio Marketplace + +The Visual Studio team is working on a brand new Visual Studio Marketplace, which is a new destination and the exclusive place for purchasing Visual Studio cloud subscriptions and discovering extensions for Visual Studio, Visual Studio Team Services, and Visual Studio Code. Once it is ready, all Visual Studio extensions will be migrated there from the Visual Studio Gallery. There will be no action required from you to migrate your extension. In the meantime, continue managing your extensions in the [Visual Studio Gallery](https://visualstudiogallery.msdn.microsoft.com/). + +Take a look at the [Visual Studio Marketplace](https://marketplace.visualstudio.com/) + + ![Image of Visual Studio Marketplace](../_img/marketplace-vs.png) \ No newline at end of file diff --git a/docs/integrate/ide/extensions/publish_extensions/publish.md b/docs/integrate/ide/extensions/publish_extensions/publish.md new file mode 100644 index 00000000000..ad579ec0681 --- /dev/null +++ b/docs/integrate/ide/extensions/publish_extensions/publish.md @@ -0,0 +1,43 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Publish your extension +description: Walks you through the steps to publish an extension. +ms.assetid: CAE083A4-E719-4BE1-A4B4-813199C6C1A6 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Publish your extension +This section describes what you need to publish your extension to the Visual Studio Gallery and make it available to all developers. + +- [Package your extension](#package) +- [Publish to the Gallery](#publish) + + +##Package your extension +1. Update the extension vsixmanifest with the correct information about title, author, and version. + ![Image showing the screen to add metadata to the manifest](../_img/package.png) +2. Build your extension in release mode. + Now your extension will be packaged as a VSIX in the \bin\Release folder. +3. You can double click the VSIX to verify the installation. + + +##Publish to the Gallery + +Once your extension is ready to share, you can publish the extension to the [Visual Studio Gallery](https://visualstudiogallery.msdn.microsoft.com/). +1. Click **Upload**. + ![Image showing the Upload button](../_img/upload.png) +2. In **Step 1: Extension Type**, select the appropriate **Type**, and then click **Next**. +3. In **Step 2: Select I would like to upload my tool**. The message **Select your control box** appears. Click **Browse**, and then select the VSIX file in the \bin\Release folder of the project. Click **Next**. +4. In **Step 3: Basic Information**, fields from the source.extension.vsixmanifest file are displayed. Select an appropriate **Category** and add **Tags** to help users find your extension. You may want to add a more detailed summary and description (the description must be at least 280 characters long). Leave **Extension Type** as **Not a Microsoft Extension** and **Cost Category** as **Free**. +5. Read the **Contribution Agreement** at the bottom of the page and check **I agree**. +6. Click **Create Contribution**. This displays the page your extension will have on the Visual Studio Gallery, with a message that the page has not yet been published. +7. Click **Publish**. +8. Search the Visual Studio Gallery for your extension. The listing for the TestPublish extension should appear. + +# See also + +* [Visual Studio Marketplace](https://marketplace.visualstudio.com/) +* [Help - FAQ](../help/help.md) \ No newline at end of file diff --git a/docs/integrate/ide/extensions/samples.md b/docs/integrate/ide/extensions/samples.md new file mode 100644 index 00000000000..8e7fda0a8a1 --- /dev/null +++ b/docs/integrate/ide/extensions/samples.md @@ -0,0 +1,25 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Extensibility samples on GitHub +description: Find sample code in our Git repository or other locations. +ms.assetid: B3B400BD-006C-481A-A156-6847CAB00D4B +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Extensibility samples on GitHub + +There are many code samples available to you in our Git repository. The repo has a full list of all available samples. Start by exploring the repo and cloning it to your local machine. + +The samples demonstrate how to customize the appearance and behavior of the Visual Studio IDE and editor: +* Add commands, buttons, menus, and other UI elements to the IDE +* Add tool windows for new functionality +* Add support in Visual Studio for new programming languages +* Add refactoring or language analyzers to fix and improve code +* Add a custom project type or new project or item templates +* Enable high-DPI/high-resolution, theme-aware, and high-contrast images and icons in your UI +* Use the Image Service/Catalog + +See [Visual Studio Extensibility Samples on GitHub.](https://github.com/Microsoft/VSSDK-Extensibility-Samples) \ No newline at end of file diff --git a/docs/integrate/ide/extensions/sdk.md b/docs/integrate/ide/extensions/sdk.md new file mode 100644 index 00000000000..cfcb10543af --- /dev/null +++ b/docs/integrate/ide/extensions/sdk.md @@ -0,0 +1,16 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: SDK reference for Visual Studio extensions +description: Find the Visual Studio SDK reference on MSDN. +ms.assetid: D52D06E0-B0EE-499D-B4CF-B89F6237AE27 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# SDK reference + +As a Visual Studio extension developer you have access to a vast number of internal interfaces, the same interfaces the Visual Studio product team uses. + +For the latest documentation, see [Visual Studio SDK Reference](https://docs.microsoft.com/en-us/visualstudio/extensibility/visual-studio-sdk-reference) diff --git a/docs/integrate/ide/extensions/toc.yml b/docs/integrate/ide/extensions/toc.yml new file mode 100644 index 00000000000..8849472808e --- /dev/null +++ b/docs/integrate/ide/extensions/toc.yml @@ -0,0 +1,34 @@ +- name: Visual Studio Extensions + items: + - name: Building extensions + href: overview.md + - name: Hello World + href: hello_world.md + - name: Samples + href: samples.md + - name: SDK reference + href: sdk.md + - name: Develop + items: + - name: Language support + href: develop_extensions/add_new_language.md + - name: UI extensions + href: develop_extensions/extend_ui.md + - name: Editor extensions + href: develop_extensions/extend_editor.md + - name: How-to not listed + href: develop_extensions/unlisted.md + - name: Publish + items: + - name: Publish your extension + href: publish_extensions/publish.md + - name: Visual Studio Marketplace + href: publish_extensions/other_resources.md + - name: Help + items: + - name: FAQ + href: help/help.md + - name: Gitter + href: help/gitter.md + - name: MSDN + href: help/msdn.md diff --git a/docs/integrate/index.md b/docs/integrate/index.md new file mode 100644 index 00000000000..810c7543ea2 --- /dev/null +++ b/docs/integrate/index.md @@ -0,0 +1,45 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +title: Integrating custom apps and third party services with VSTS and Team Foundation Server +description: Overview of integrating with VSTS and Team Foundation Server +ms.assetid: c9b97ad7-ffd8-4657-8322-74f764eec5c9 +ms.manager: douge +ms.author: elbatk +ms.date: 08/23/2016 +--- + +# Integrating with VSTS and Team Foundation Server + +You can build custom applications or services that integrate with your Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) accounts by using the **REST APIs** to make direct HTTP calls, or utilize our **.NET Client Libraries**. + +Along with interacting with VSTS or TFS in your application, you can also integrate with popular third-party services such as Slack or Jenkins. + +## 5-Minute Quickstarts +Check out the quick starts to get you started: +* [Create a bug](./quickstarts/create-bug-quickstart.md) +* [Get work items using queries](./quickstarts/work-item-quickstart.md) + + +## Concepts +* [.NET client libraries](./concepts/dotnet-client-libraries.md) +* [Authentication](./get-started/authentication/authentication-guidance.md) +* [Service hooks](./concepts/service-hooks.md) +* [REST API Versioning](./concepts/rest-api-versioning.md) +* [Cross-origin resource sharing](./concepts/cross-origin-resource-sharing.md) + +## Samples +* [Custom application samples](./get-started/client-libraries/samples.md) + +## How-to Guides +* [Authenticate with PATs](./get-started/authentication/pats.md) +* [Authenticate with OAuth 2.0](./get-started/authentication/oauth.md) +* [Create service hooks subscriptions programmatically](../service-hooks/create-subscription.md?toc=/vsts/integrate/toc.json) + +## Reference +* [Service hooks consumers and action reference](../service-hooks/consumers.md?toc=/vsts/integrate/toc.json) +* [Service hooks events reference](../service-hooks/events.md?toc=/vsts/integrate/toc.json) + +## Resources +* [REST API reference](https://www.visualstudio.com/en-us/docs/integrate/api/overview) + diff --git a/docs/integrate/quickstarts/create-bug-quickstart.md b/docs/integrate/quickstarts/create-bug-quickstart.md new file mode 100644 index 00000000000..08833d08e39 --- /dev/null +++ b/docs/integrate/quickstarts/create-bug-quickstart.md @@ -0,0 +1,148 @@ +--- +title: Create a bug using .NET client libraries in Visual Studio Team Services +description: Use .NET client libraries to create a bug in Visual Studio Team Services. +ms.assetid: ea2e5303-46b5-41d0-b6f5-b3d8ce515a64 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 06/27/2017 +ms.custom: get-started-article +ms.topic: get-started-article +--- + +# Create a bug in VSTS using .NET client libraries + +Creating a new bug (or any work item) is pretty straight forward. You just need to set the field values and send a JSON-Patch object to the REST endpoint. + +## Prerequisites +To work on this Quickstart, you'll need the following prerequisites: + +* A VSTS account +* A Personal Access Token, [find out how to create one](../get-started/authentication/PATs.md) +* A C# development environment, you can use [Visual Studio](https://www.visualstudio.com/vs/) + +## Create a C# project in Visual Studio + +To learn about C# programming within Visual Studio, find the [Visual Studio C# programming documentation](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/) + +## C# code content +There are a few things happening in the code sample below: + +0. Authentication + 0. Creating credentials using your PAT + 0. Creating a VSSConnection with your VSTS URI and the credentials +0. Retrieving the client using your VSSConnection +0. Creating the bug + 0. Create an array of objects to set the field values + 0. Convert that array to a serialized json object + 0. Send that serialized json object to the REST endpoint + +## C# code snippet +```c# +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Microsoft.TeamFoundation.WorkItemTracking.WebApi; +using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models; +using Microsoft.VisualStudio.Services.Common; +using Microsoft.VisualStudio.Services.WebApi.Patch.Json; +using Microsoft.VisualStudio.Services.WebApi.Patch; +using Microsoft.VisualStudio.Services.WebApi; +using System.Net.Http.Headers; +using System.Net.Http; +using Newtonsoft.Json; + + +public class CreateBug +{ + readonly string _uri; + readonly string _personalAccessToken; + readonly string _project; + + /// + /// Constructor. Manually set values to match your account. + /// + public CreateBug() + { + _uri = "https://accountname.visualstudio.com"; + _personalAccessToken = "personal access token"; + _project = "project name"; + } + + /// + /// Create a bug using the .NET client library + /// + /// Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem + public WorkItem CreateBugUsingClientLib() + { + Uri uri = new Uri(_uri); + string personalAccessToken = _personalAccessToken; + string project = _project; + + VssBasicCredential credentials = new VssBasicCredential("", _personalAccessToken); + JsonPatchDocument patchDocument = new JsonPatchDocument(); + + //add fields and their values to your patch document + patchDocument.Add( + new JsonPatchOperation() + { + Operation = Operation.Add, + Path = "/fields/System.Title", + Value = "Authorization Errors" + } + ); + + patchDocument.Add( + new JsonPatchOperation() + { + Operation = Operation.Add, + Path = "/fields/Microsoft.VSTS.TCM.ReproSteps", + Value = "Our authorization logic needs to allow for users with Microsoft accounts (formerly Live Ids) - http:// msdn.microsoft.com/en-us/library/live/hh826547.aspx" + } + ); + + patchDocument.Add( + new JsonPatchOperation() + { + Operation = Operation.Add, + Path = "/fields/Microsoft.VSTS.Common.Priority", + Value = "1" + } + ); + + patchDocument.Add( + new JsonPatchOperation() + { + Operation = Operation.Add, + Path = "/fields/Microsoft.VSTS.Common.Severity", + Value = "2 - High" + } + ); + VssConnection connection = new VssConnection(uri, credentials); + WorkItemTrackingHttpClient workItemTrackingHttpClient = connection.GetClient(); + + try + { + WorkItem result = workItemTrackingHttpClient.CreateWorkItemAsync(patchDocument, project, "Bug").Result; + + Console.WriteLine("Bug Successfully Created: Bug #{0}", result.Id); + + return result; + } + catch (AggregateException ex) + { + Console.WriteLine("Error creating bug: {0}", ex.InnerException.Message); + return null; + } + } +} +``` + +## Next Steps + +* Check out another Quickstart: [Get a list of work items using queries](./work-item-quickstart.md) +* Explore the [integrate samples](../get-started/client-libraries/samples.md) \ No newline at end of file diff --git a/docs/integrate/quickstarts/jenkins-integrate-quickstart.md b/docs/integrate/quickstarts/jenkins-integrate-quickstart.md new file mode 100644 index 00000000000..626861be328 --- /dev/null +++ b/docs/integrate/quickstarts/jenkins-integrate-quickstart.md @@ -0,0 +1,16 @@ +--- +title: Integrate Jenkins with Visual Studio Team Services +description: Combine your Jenkins build functionality with your VSTS platform. +ms.assetid: d5206591-1b81-4ecc-a008-7658a84b6f12 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 06/27/2017 +ms.custom: get-started-article +ms.topic: get-started-article +robots: NOINDEX, NOFOLLOW +--- + +# Integrate Jenkins with Visual Studio Team Services + diff --git a/docs/integrate/quickstarts/work-item-quickstart.md b/docs/integrate/quickstarts/work-item-quickstart.md new file mode 100644 index 00000000000..171ae5e8a93 --- /dev/null +++ b/docs/integrate/quickstarts/work-item-quickstart.md @@ -0,0 +1,142 @@ +--- +title: Get work items programmatically from Visual Studio Team Services +description: Use REST APIs to get work items from VSTS with queries in your own custom apps. +ms.assetid: e48d9d34-24dd-4e3e-abe8-8f5498e08083 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 06/27/2017 +ms.topic: get-started-article +--- + +# Fetch work items with queries programatically in Visual Studio Team Services + +A common scenario in VSTS is to fetch work items using queries. This guide details how to implement that scenario programatically using our REST APIs or .NET client libraries. + +## Prerequisites +To work on this Quickstart, you'll need the following prerequisites: + +* A VSTS account +* A Personal Access Token, [find out how to create one](../get-started/authentication/PATs.md) +* A C# development environment, you can use [Visual Studio](https://www.visualstudio.com/vs/) + +## Create a C# project in Visual Studio + +To learn about C# programming within Visual Studio, find the [Visual Studio C# programming documentation](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/) + +## C# code content +There are a few things happening in the code sample below: + +1. Authenticating + 0. Create credentials using your PAT + 0. Generate the client +1. Get the work items + 0. Create the query you want to use + 0. Get the results for that query + 0. Get each of the work items by ID + +## C# code snippet +```cs +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Microsoft.TeamFoundation.WorkItemTracking.WebApi; +using Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models; +using Microsoft.VisualStudio.Services.Common; +using Microsoft.VisualStudio.Services.WebApi.Patch.Json; +using Microsoft.VisualStudio.Services.WebApi.Patch; +using Microsoft.VisualStudio.Services.WebApi; +using System.Net.Http.Headers; +using System.Net.Http; +using Newtonsoft.Json; + +public class ExecuteQuery +{ + readonly string _uri; + readonly string _personalAccessToken; + readonly string _project; + + /// + /// Constructor. Manually set values to match your account. + /// + public ExecuteQuery() + { + _uri = "https://accountname.visualstudio.com"; + _personalAccessToken = "personal access token"; + _project = "project name"; + } + + /// + /// Execute a WIQL query to return a list of bugs using the .NET client library + /// + /// List of Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItem + public List RunGetBugsQueryUsingClientLib() + { + Uri uri = new Uri(_uri); + string personalAccessToken = _personalAccessToken; + string project = _project; + + VssBasicCredential credentials = new VssBasicCredential("", _personalAccessToken); + + //create a wiql object and build our query + Wiql wiql = new Wiql() + { + Query = "Select [State], [Title] " + + "From WorkItems " + + "Where [Work Item Type] = 'Bug' " + + "And [System.TeamProject] = '" + project + "' " + + "And [System.State] <> 'Closed' " + + "Order By [State] Asc, [Changed Date] Desc" + }; + + //create instance of work item tracking http client + using (WorkItemTrackingHttpClient workItemTrackingHttpClient = new WorkItemTrackingHttpClient(uri, credentials)) + { + //execute the query to get the list of work items in the results + WorkItemQueryResult workItemQueryResult = workItemTrackingHttpClient.QueryByWiqlAsync(wiql).Result; + + //some error handling + if (workItemQueryResult.WorkItems.Count() != 0) + { + //need to get the list of our work item ids and put them into an array + List list = new List(); + foreach (var item in workItemQueryResult.WorkItems) + { + list.Add(item.Id); + } + int[] arr = list.ToArray(); + + //build a list of the fields we want to see + string[] fields = new string[3]; + fields[0] = "System.Id"; + fields[1] = "System.Title"; + fields[2] = "System.State"; + + //get work items for the ids found in query + var workItems = workItemTrackingHttpClient.GetWorkItemsAsync(arr, fields, workItemQueryResult.AsOf).Result; + + Console.WriteLine("Query Results: {0} items found", workItems.Count); + + //loop though work items and write to console + foreach (var workItem in workItems) + { + Console.WriteLine("{0} {1} {2}", workItem.Id, workItem.Fields["System.Title"], workItem.Fields["System.State"]); + } + + return workItems; + } + + return null; + } + } +} +``` + +## Next Steps + +* Check out another Quickstart: [Create a bug](./create-bug-quickstart.md) +* Explore the [integrate samples](../get-started/client-libraries/samples.md) diff --git a/docs/integrate/redirection/authorize-other-service-vs.md b/docs/integrate/redirection/authorize-other-service-vs.md new file mode 100644 index 00000000000..a3aec5103ff --- /dev/null +++ b/docs/integrate/redirection/authorize-other-service-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/authorize +--- \ No newline at end of file diff --git a/docs/integrate/redirection/get-started/authentication/authentication_guidance.md b/docs/integrate/redirection/get-started/authentication/authentication_guidance.md new file mode 100644 index 00000000000..253376ce0f4 --- /dev/null +++ b/docs/integrate/redirection/get-started/authentication/authentication_guidance.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/integrate/get-started/authentication/authentication_guidance +--- \ No newline at end of file diff --git a/docs/integrate/redirection/integrating-with-service-hooks-vs.md b/docs/integrate/redirection/integrating-with-service-hooks-vs.md new file mode 100644 index 00000000000..8dd03fbdf3f --- /dev/null +++ b/docs/integrate/redirection/integrating-with-service-hooks-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/integrate +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/appveyor-and-vso-vs.md b/docs/integrate/redirection/service-hooks/appveyor-and-vso-vs.md new file mode 100644 index 00000000000..9926a6f1a48 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/appveyor-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/appveyor +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/azure-service-bus-and-vso-vs.md b/docs/integrate/redirection/service-hooks/azure-service-bus-and-vso-vs.md new file mode 100644 index 00000000000..effdbd18e81 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/azure-service-bus-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/azure-service-bus +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/azurestorage-and-vso-vs.md b/docs/integrate/redirection/service-hooks/azurestorage-and-vso-vs.md new file mode 100644 index 00000000000..0dbde13b897 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/azurestorage-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/azure-storage +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/bamboo-and-vso-vs.md b/docs/integrate/redirection/service-hooks/bamboo-and-vso-vs.md new file mode 100644 index 00000000000..68b13c36128 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/bamboo-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/bamboo +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/campfire-and-vso-vs.md b/docs/integrate/redirection/service-hooks/campfire-and-vso-vs.md new file mode 100644 index 00000000000..5cf4e148a85 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/campfire-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/campfire +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/flowdock-and-vso-vs.md b/docs/integrate/redirection/service-hooks/flowdock-and-vso-vs.md new file mode 100644 index 00000000000..247fa9d551a --- /dev/null +++ b/docs/integrate/redirection/service-hooks/flowdock-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/flowdock +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/hipchat-and-vso-vs.md b/docs/integrate/redirection/service-hooks/hipchat-and-vso-vs.md new file mode 100644 index 00000000000..1ab16b46ac1 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/hipchat-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/hipchat +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/hubot-and-vso-vs.md b/docs/integrate/redirection/service-hooks/hubot-and-vso-vs.md new file mode 100644 index 00000000000..c212a289139 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/hubot-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/hubot +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/jenkins-and-vso-vs.md b/docs/integrate/redirection/service-hooks/jenkins-and-vso-vs.md new file mode 100644 index 00000000000..87f2d3734ab --- /dev/null +++ b/docs/integrate/redirection/service-hooks/jenkins-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/jenkins +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/myget-and-vso-vs.md b/docs/integrate/redirection/service-hooks/myget-and-vso-vs.md new file mode 100644 index 00000000000..2cbed12681e --- /dev/null +++ b/docs/integrate/redirection/service-hooks/myget-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/myget +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/slack-and-vso-vs.md b/docs/integrate/redirection/service-hooks/slack-and-vso-vs.md new file mode 100644 index 00000000000..0957495fd00 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/slack-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/slack +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/trello-and-vso-vs.md b/docs/integrate/redirection/service-hooks/trello-and-vso-vs.md new file mode 100644 index 00000000000..9d03b423895 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/trello-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/trello +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/uservoice-and-vso-vs.md b/docs/integrate/redirection/service-hooks/uservoice-and-vso-vs.md new file mode 100644 index 00000000000..733928141d3 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/uservoice-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/uservoice +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/webhooks-and-vso-vs.md b/docs/integrate/redirection/service-hooks/webhooks-and-vso-vs.md new file mode 100644 index 00000000000..eb31676c67a --- /dev/null +++ b/docs/integrate/redirection/service-hooks/webhooks-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/webhooks +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/zapier-and-vso-vs.md b/docs/integrate/redirection/service-hooks/zapier-and-vso-vs.md new file mode 100644 index 00000000000..629b317e2bb --- /dev/null +++ b/docs/integrate/redirection/service-hooks/zapier-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/zapier +--- \ No newline at end of file diff --git a/docs/integrate/redirection/service-hooks/zendesk-and-vso-vs.md b/docs/integrate/redirection/service-hooks/zendesk-and-vso-vs.md new file mode 100644 index 00000000000..053309796c8 --- /dev/null +++ b/docs/integrate/redirection/service-hooks/zendesk-and-vso-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/services/zendesk +--- \ No newline at end of file diff --git a/docs/integrate/redirection/troubleshoot-service-hooks-vs.md b/docs/integrate/redirection/troubleshoot-service-hooks-vs.md new file mode 100644 index 00000000000..83a9a1f6ed7 --- /dev/null +++ b/docs/integrate/redirection/troubleshoot-service-hooks-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/service-hooks/troubleshoot +--- \ No newline at end of file diff --git a/docs/integrate/rest-api-overview.md b/docs/integrate/rest-api-overview.md new file mode 100644 index 00000000000..305d203beb8 --- /dev/null +++ b/docs/integrate/rest-api-overview.md @@ -0,0 +1,211 @@ +--- +title: Get started with the REST APIs for VSTS and Team Foundation Server +description: Learn the basic patterns for using the REST APIs for VSTS and Team Foundation Server. +ms.assetid: bdddaf58-6849-4134-a295-2887dafeeea3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +robots: NOINDEX, NOFOLLOW +--- + +# VSTS REST API Reference + +Welcome to the VSTS REST API Reference. + +Representational State Transfer (REST) APIs are service endpoints that support sets of HTTP operations (methods), which provide create, retrieve, update, or delete access to the service's resources. This article walks you through: + +- The basic components of a REST API request/response pair. +- Overviews of creating and sending a REST request, and handling the response. + +> [!NOTE] +> Most REST APIs have a corresponding .NET Client Library that can be used to greatly simplify your client code. Find out more about them at the +> [.NET Client Libraries documentation](./concepts/dotnet-client-libraries.md) + + +## Components of a REST API request/response pair + +A REST API request/response pair can be separated into five components: + +1. The **request URI**, in the following form: `VERB https://{instance}[/{collection}[/{team-project}]/_apis[/{area}]/{resource}?api-version={version}` + * *instance*: The Team Services account or TFS server you're sending the request to. They are structured as follows, + * Team Services: `{account}.visualstudio.com` + * TFS: `server:port` (the default port is 8080) + * *collection*: The value for collection should be `DefaultCollection` for both TFS and Team Services. + * *resource path*: The collection should be followed by `_apis/{area}/{resource}`. For example `_apis/wit/workitems`. + * *api-version*: Every API request should include an api-version to avoid having your app or service break as APIs evolve. api-versions are in the following format: `{major}.{minor}[-{stage}[.{resource-version}]], for example: + * `api-version=1.0` + * `api-version=1.2-preview` + * `api-version=2.0-preview.1` + +> [!NOTE] + > *area** and *team-project* are optional, depending on the API request. + +2. HTTP **request message header** fields: + * A required [HTTP method](https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html) (also known as an operation or verb), which tells the service what type of operation you are requesting. Azure REST APIs support GET, HEAD, PUT, POST, and PATCH methods. + * Optional additional header fields, as required by the specified URI and HTTP method. For example, an Authorization header that provides a bearer token containing client authorization information for the request. +3. Optional HTTP **request message body** fields, to support the URI and HTTP operation. For example, POST operations contain MIME-encoded objects that are passed as complex parameters. + * For POST or PUT operations, the MIME-encoding type for the body should be specified in the Content-type request header as well. Some services require you to use a specific MIME type, such as `application/json`. +4. HTTP **response message header** fields: + * An [HTTP status code](https://www.w3.org/Protocols/HTTP/HTRESP.html), ranging from 2xx success codes to 4xx or 5xx error codes. Alternatively, a service-defined status code may be returned, as indicated in the API documentation. + * Optional additional header fields, as required to support the request's response, such as a `Content-type` response header. +5. Optional HTTP **response message body** fields: + * MIME-encoded response objects may be returned in the HTTP response body, such as a response from a GET method that is returning data. Typically, these objects are returned in a structured format such as JSON or XML, as indicated by the `Content-type` response header. For example, when you request an access token from Azure AD, it will be returned in the response body as the `access_token` element, one of several name/value paired objects in a data collection. In this example, a response header of `Content-Type: application/json` is also included. + + +## Create the request + +### Authenticate + +There are many ways to authenticate your application or service with Team Services or TFS. The following table is an excellent way to decide which method is the best for you: + +| Type of application | Description | example |Authentication mechanism | Code samples | +|---------------------|-------------|---------|-------------------------|--------| +| Interactive client-side | GUI based client side application | Windows app enumerating bugs for a user | [Active Directory authentication library (ADAL)](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-libraries) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/ManagedClientConsoleAppSample) | +| Interactive Javascript | GUI based Javascript application | AngularJS single page app displaying work items for a user | [ADAL](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-libraries) | sample (coming soon) | +| Non-interactive client-side | Headless text only client side application | Console app displaying all bugs assigned to a user | [Device Profile](https://azure.microsoft.com/en-us/resources/samples/active-directory-dotnet-deviceprofile/?v=17.23h) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/DeviceProfileSample) | +| Interactive web | GUI based web application | Custom Web dashboard displaying build summaries |[OAuth](./get-started/authentication/oauth.md) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/OAuthWebSample) | +| TFS application | TFS app using the Client OM library | TFS extension displaying team bug dashboards | [Client Libraries](./get-started/client-libraries/dotnet.md) | [sample](https://github.com/Microsoft/vsts-auth-samples/tree/master/ClientLibraryConsoleAppSample) | +| [VSTS Extension](../extend/get-started/node.md#files) | VSTS extension | [Agile Cards](https://marketplace.visualstudio.com/items?itemName=spartez.agile-cards) | [VSS Web Extension SDK](https://github.com/Microsoft/vss-web-extension-sdk) | [sample walkthrough](../extend/develop/add-dashboard-widget.md) | + +> [!NOTE] +> You can find more information on authentication on our [authentication guidance page](./get-started/authentication/authentication-guidance.md) + +### Assemble the request + +**Team Services** + +For Team Services, *instance* is `{account}.visualstudio.com` and *collection* is `DefaultCollection`, so the pattern looks like this: + +``` +VERB https://{account}.VisualStudio.com/DefaultCollection/_apis[/{area}]/{resource}?api-version={version} +``` + +For example, here's how to get a list of team projects in a VSTS account. + +```dos +curl -u {username}[:{personalaccesstoken}] https://{account}.VisualStudio.com/DefaultCollection/_apis/projects?api-version=2.0 +``` + +If you wish to provide the personal access token through an HTTP header, you must first convert it to a Base64 string (the following example shows how to convert to Base64 using C#). The resulting string can then be provided as an HTTP header in the format: + +``` +Authorization: Basic BASE64PATSTRING +``` + +Here it is in C# using the [HttpClient class](http://msdn.microsoft.com/en-us/library/system.net.http.httpclient.aspx). + +```cs +public static async void GetProjects() +{ + try + { + var personalaccesstoken = "PAT_FROM_WEBSITE"; + + using (HttpClient client = new HttpClient()) + { + client.DefaultRequestHeaders.Accept.Add( + new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); + + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", + Convert.ToBase64String( + System.Text.ASCIIEncoding.ASCII.GetBytes( + string.Format("{0}:{1}", "", personalaccesstoken)))); + + using (HttpResponseMessage response = client.GetAsync( + "https://{account}.visualstudio.com/DefaultCollection/_apis/projects").Result) + { + response.EnsureSuccessStatusCode(); + string responseBody = await response.Content.ReadAsStringAsync(); + Console.WriteLine(responseBody); + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } +} +``` + + +Most samples on this site use Personal Access Tokens as they're a compact example for authenticating with the service. However, there are a variety of authentication mechanisms available for VSTS including ADAL, OAuth and Session Tokens. Refer to the [Authentication](./get-started/authentication/authentication-guidance.md) section for guidance on which one is best suited for your scenario. + +**TFS** + +For TFS, `instance` is `{server:port}` and by default the port is 8080. +The default collection is `DefaultCollection`, but can be any collection. + +Here's how to get a list of team projects from TFS using the default port and collection. + +```dos +curl -u {username}[:{personalaccesstoken}] https://{server}:8080/DefaultCollection/_apis/projects?api-version=2.0 +``` + +The examples above use personal access tokens, which requires that you [create a personal access token](./get-started/authentication/PATs.md). + +## Process the response + +You should get a response like this. + +```json +{ + "value": [ + { + "id": "eb6e4656-77fc-42a1-9181-4c6d8e9da5d1", + "name": "Fabrikam-Fiber-TFVC", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/eb6e4656-77fc-42a1-9181-4c6d8e9da5d1", + "description": "TeamFoundationVersionControlprojects", + "collection": { + "id": "d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "name": "DefaultCollection", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/_apis/projectCollections/d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "collectionUrl": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection" + }, + "defaultTeam": { + "id": "66df9be7-3586-467b-9c5f-425b29afedfd", + "name": "Fabrikam-Fiber-TFVCTeam", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/eb6e4656-77fc-42a1-9181-4c6d8e9da5d1/teams/66df9be7-3586-467b-9c5f-425b29afedfd" + } + }, + { + "id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "name": "Fabrikam-Fiber-Git", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "description": "Gitprojects", + "collection": { + "id": "d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "name": "DefaultCollection", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/_apis/projectCollections/d81542e4-cdfa-4333-b082-1ae2d6c3ad16", + "collectionUrl": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection" + }, + "defaultTeam": { + "id": "8bd35c5e-30bb-4834-a0c4-d576ce1b8df7", + "name": "Fabrikam-Fiber-GitTeam", + "url": "https: //fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c/teams/8bd35c5e-30bb-4834-a0c4-d576ce1b8df7" + } + } + ], + "count": 2 +} +``` + +The response is [JSON](http://json.org/). That's generally what you'll get back from the REST APIs although there are a few exceptions, +like [Git blobs](https://visualstudio.com/api/git/blobs.md). + +Now you should be able to look around the specific +[API areas](https://visualstudio.com/api/overview.md) like [work item tracking](https://visualstudio.com/api/wit/overview.md) +or [Git](https://visualstudio.com/api/git/overview.md) and get to the resources that you need. +Keep reading to learn more about the general patterns that are used in these APIs. + + +## Related Content + +* Check out the [Integrate documentation](./index.md) for REST API samples and use cases + * [Authentication guidance](./get-started/authentication/authentication-guidance.md) + * [Samples](./get-started/rest/samples.md) +* Discover the [.NET Client Libraries](./concepts/dotnet-client-libraries.md) for these REST APIs. + * [Samples](./get-started/client-libraries/samples.md) + + diff --git a/docs/integrate/samples/csharp/rest/AccountsProgram.cs b/docs/integrate/samples/csharp/rest/AccountsProgram.cs new file mode 100644 index 00000000000..4095ac4bb94 --- /dev/null +++ b/docs/integrate/samples/csharp/rest/AccountsProgram.cs @@ -0,0 +1,50 @@ +using Newtonsoft.Json.Linq; +using System.Net.Http; +using System; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +// DO NOT change the name of Program class and the signature of RunAsync() method. +public partial class Program +{ + public static async Task RunAsync() + { + using(var client = new HttpClient()) + { + var baseUrl = "https://app.vssps.visualstudio.com/_apis/"; + + // Get the current user's ID + using(var request = new HttpRequestMessage(HttpMethod.Get, baseUrl + "profile/profiles/me") + { + request.Headers.Add("Authorization", "Bearer {token}"); + request.Headers.Add("Accept", "application/json;api-version=1.0"); + + using(var response = await client.SendAsync(request)) + { + var content = await response.Content.ReadAsStringAsync(); + var profileId = JObject.Parse(content)["id"]; + + Console.WriteLine("Current user ID is: {0}", profileId); + + using(var accountsRequest = new HttpRequestMessage(HttpMethod.Get, baseUrl + "accounts?memberId=" + profileId) + { + accountsRequest.Headers.Add("Authorization", "Bearer {token}"); + accountsRequest.Headers.Add("Accept", "application/json;api-version=1.0"); + + using(var accountsResponse = await client.SendAsync(accountsRequest)) + { + var content = await response.Content.ReadAsStringAsync(); + var accounts = JObject.Parse(content)["value"]; + + foreach(dynamic account in accounts) + { + Console.WriteLine("Account \"{0}\"", account.id); + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/docs/integrate/samples/csharp/rest/BuildsProgram.cs b/docs/integrate/samples/csharp/rest/BuildsProgram.cs new file mode 100644 index 00000000000..b61c7279fd9 --- /dev/null +++ b/docs/integrate/samples/csharp/rest/BuildsProgram.cs @@ -0,0 +1,41 @@ +using Newtonsoft.Json.Linq; +using System.Net.Http; +using System; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +// DO NOT change the name of Program class and the signature of RunAsync() method. +public partial class Program +{ + public static async Task RunAsync() + { + using(var client = new HttpClient()) + { + var project = "Fabrikam-Fiber-Git"; + var baseUrl = "https://fabrikam-fiber-inc.visualstudio.com/defaultcollection/" + project + "/_apis/build/builds"; + + // Get the current user's ID + using(var request = new HttpRequestMessage(HttpMethod.Get, baseUrl + "?$top=10") + { + request.Headers.Add("Authorization", "Bearer {token}"); + request.Headers.Add("Accept", "application/json;api-version=2.0-preview.2"); + + using(var response = await client.SendAsync(request)) + { + var content = await response.Content.ReadAsStringAsync(); + var builds = JObject.parse(content)["value"]; + + foreach(dynamic build in builds) + { + Console.WriteLine("Build \"{0}\", status: \"{1}\", definition: \"{2}\"", + build.id, + build.status, + build.definition.name + ); + } + } + } + } + } +} \ No newline at end of file diff --git a/docs/integrate/samples/csharp/rest/ProjectsProgram.cs b/docs/integrate/samples/csharp/rest/ProjectsProgram.cs new file mode 100644 index 00000000000..14683d114b3 --- /dev/null +++ b/docs/integrate/samples/csharp/rest/ProjectsProgram.cs @@ -0,0 +1,54 @@ +using Newtonsoft.Json.Linq; +using System.Net.Http; +using System; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +// DO NOT change the name of Program class and the signature of RunAsync() method. +public partial class Program +{ + public static async Task RunAsync() + { + // For more info: https://www.visualstudio.com/integrate/api/tfs/projects + using(var client = new HttpClient()) + { + var baseUrl = "https://fabrikam-fiber-inc.visualstudio.com/defaultcollection/_apis/projects"; + + // Get the current user's ID + using(var request = new HttpRequestMessage(HttpMethod.Get, baseUrl) + { + request.Headers.Add("Authorization", "Bearer {token}"); + request.Headers.Add("Accept", "application/json;api-version=1.0"); + + using(var response = await client.SendAsync(request)) + { + var content = await response.Content.ReadAsStringAsync(); + var projects = JObject.parse(content)["value"]; + + foreach(dynamic project in projects) + { + using(var projectRequest = new HttpRequestMessage(HttpMethod.Get, baseUrl + "/" + project.id) + { + projectRequest.Headers.Add("Authorization", "Bearer {token}"); + projectRequest.Headers.Add("Accept", "application/json;api-version=1.0"); + + using(var projectResponse = await client.SendAsync(projectRequest)) + { + var content = await response.Content.ReadAsStringAsync(); + dynamic projectDetails = JObject.parse(content); + + Console.WriteLine("Project ID \"{0}\", name: \"{1}\", source control type: \"{2}\"", + projectDetails.id, + projectDetails.name, + projectDetails.capabilities.versionControl.sourceControlType + ); + } + } + } + } + } + + } + } + } \ No newline at end of file diff --git a/docs/integrate/toc.yml b/docs/integrate/toc.yml new file mode 100644 index 00000000000..15fa4a709a2 --- /dev/null +++ b/docs/integrate/toc.yml @@ -0,0 +1,48 @@ +- name: "Integrate" + href: ./index.md +- name: Quickstarts + items: + - name: Create a bug + href: quickstarts/create-bug-quickstart.md + - name: Query work items + href: quickstarts/work-item-quickstart.md +- name: Samples + items: + - name: Samples + href: get-started/client-libraries/samples.md +- name: Concepts + items: + - name: .NET client libraries + href: ./concepts/dotnet-client-libraries.md + - name: Authentication + href: ./get-started/authentication/authentication-guidance.md + - name: Service hooks + href: ./concepts/service-hooks.md + - name: REST API versioning + href: ./concepts/rest-api-versioning.md + - name: Cross-origin resource sharing + href: ./concepts/cross-origin-resource-sharing.md +- name: How-to Guides + items: + - name: Authenticate with PATs + href: get-started/authentication/pats.md + - name: Authenticate with OAuth 2.0 + href: get-started/authentication/oauth.md + - name: Create service hooks subscriptions programmatically + href: ../service-hooks/create-subscription.md?toc=/vsts/integrate/toc.json&bc=/vsts/integrate/breadcrumb/toc.json +- name: Reference + items: + - name: Service hooks consumers and actions + href: ../service-hooks/consumers.md?toc=/vsts/integrate/toc.json&bc=/vsts/integrate/breadcrumb/toc.json + - name: Service hooks events + href: ../service-hooks/events.md?toc=/vsts/integrate/toc.json&bc=/vsts/integrate/breadcrumb/toc.json +- name: Troubleshooting + items: + - name: IIS Basic Authentication and PATs + href: get-started/authentication/iis-basic-auth.md +- name: REST API Reference + href: https://www.visualstudio.com/en-us/docs/integrate/api/overview +- name: How to get help + href: ../extend/support/help.md?toc=/vsts/integrate/toc.json&bc=/vsts/integrate/breadcrumb/toc.json +- name: Visual Studio extensions + href: ide/extensions/overview.md diff --git a/docs/integrate/tutorials/tutorial-one.md b/docs/integrate/tutorials/tutorial-one.md new file mode 100644 index 00000000000..a052c60e073 --- /dev/null +++ b/docs/integrate/tutorials/tutorial-one.md @@ -0,0 +1,13 @@ +--- +title: TBD in Visual Studio Team Services +description: TODO +ms.assetid: 85cf28e5-d22a-4b85-8c21-5d1525f54eae +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 06/27/2017 +ms.custom: get-started-article +--- + +# TBD \ No newline at end of file diff --git a/docs/integrate/tutorials/tutorial-two.md b/docs/integrate/tutorials/tutorial-two.md new file mode 100644 index 00000000000..898d83c793b --- /dev/null +++ b/docs/integrate/tutorials/tutorial-two.md @@ -0,0 +1,13 @@ +--- +title: TBD with Visual Studio Team Services +description: TODO +ms.assetid: 85cf28e5-d22a-4b85-8c21-5d1525f54eae +ms.prod: vs-devops-alm +ms.technology: vs-devops-integrate +ms.manager: douge +ms.author: elbatk +ms.date: 06/27/2017 +ms.custom: get-started-article +--- + +# TBD \ No newline at end of file diff --git a/docs/load-test-your-app-vs.md b/docs/load-test-your-app-vs.md new file mode 100644 index 00000000000..2599a76609f --- /dev/null +++ b/docs/load-test-your-app-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/getting-started-with-performance-testing +--- diff --git a/docs/load-test/_img/CLT_LoadTestSetLocation.png b/docs/load-test/_img/CLT_LoadTestSetLocation.png new file mode 100644 index 00000000000..d927336ba2c Binary files /dev/null and b/docs/load-test/_img/CLT_LoadTestSetLocation.png differ diff --git a/docs/load-test/_img/LoadTestAgentsCores.png b/docs/load-test/_img/LoadTestAgentsCores.png new file mode 100644 index 00000000000..02987a0bbbd Binary files /dev/null and b/docs/load-test/_img/LoadTestAgentsCores.png differ diff --git a/docs/load-test/_img/LoadTestInProgress.png b/docs/load-test/_img/LoadTestInProgress.png new file mode 100644 index 00000000000..7a50f624a36 Binary files /dev/null and b/docs/load-test/_img/LoadTestInProgress.png differ diff --git a/docs/load-test/_img/LoadTestMultipleTestSettings.png b/docs/load-test/_img/LoadTestMultipleTestSettings.png new file mode 100644 index 00000000000..aa5a76d89ac Binary files /dev/null and b/docs/load-test/_img/LoadTestMultipleTestSettings.png differ diff --git a/docs/load-test/_img/_shared/LoadTestVSO-charts.png b/docs/load-test/_img/_shared/LoadTestVSO-charts.png new file mode 100644 index 00000000000..d11369b5f9e Binary files /dev/null and b/docs/load-test/_img/_shared/LoadTestVSO-charts.png differ diff --git a/docs/load-test/_img/_shared/SimpleLoadTestVSO-sort-column.png b/docs/load-test/_img/_shared/SimpleLoadTestVSO-sort-column.png new file mode 100644 index 00000000000..5f965a163c4 Binary files /dev/null and b/docs/load-test/_img/_shared/SimpleLoadTestVSO-sort-column.png differ diff --git a/docs/load-test/_img/_shared/SimpleLoadTestVSO-summary-errors-icon.png b/docs/load-test/_img/_shared/SimpleLoadTestVSO-summary-errors-icon.png new file mode 100644 index 00000000000..86c179e49b0 Binary files /dev/null and b/docs/load-test/_img/_shared/SimpleLoadTestVSO-summary-errors-icon.png differ diff --git a/docs/load-test/_img/_shared/SimpleLoadTestVSO-summary-errors-link.png b/docs/load-test/_img/_shared/SimpleLoadTestVSO-summary-errors-link.png new file mode 100644 index 00000000000..feff1a0ec82 Binary files /dev/null and b/docs/load-test/_img/_shared/SimpleLoadTestVSO-summary-errors-link.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/azure-np-new-performance-test.png b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-new-performance-test.png new file mode 100644 index 00000000000..5cb381d2331 Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-new-performance-test.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/azure-np-no-vso-account.png b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-no-vso-account.png new file mode 100644 index 00000000000..256cdd4ef2e Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-no-vso-account.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/azure-np-perf-test-done.png b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-perf-test-done.png new file mode 100644 index 00000000000..c4499014fab Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-perf-test-done.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/azure-np-perf-test-overview.png b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-perf-test-overview.png new file mode 100644 index 00000000000..ed969bb8ae0 Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-perf-test-overview.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/azure-np-running-perf-test.png b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-running-perf-test.png new file mode 100644 index 00000000000..20602d796fa Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-running-perf-test.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/azure-np-vso-accounts-vum-summary.png b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-vso-accounts-vum-summary.png new file mode 100644 index 00000000000..9b521f0fca4 Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-vso-accounts-vum-summary.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/azure-np-vso-accounts.png b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-vso-accounts.png new file mode 100644 index 00000000000..22bdeef614e Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-vso-accounts.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/azure-np-web-app-details-tools-expanded.png b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-web-app-details-tools-expanded.png new file mode 100644 index 00000000000..81aa075b539 Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-web-app-details-tools-expanded.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/azure-np-web-apps.png b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-web-apps.png new file mode 100644 index 00000000000..81faa9eb6e5 Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/azure-np-web-apps.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/multiple-01-authoring-blade.png b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01-authoring-blade.png new file mode 100644 index 00000000000..fdc47b0e1d9 Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01-authoring-blade.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/multiple-01-authoring-blade2.png b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01-authoring-blade2.png new file mode 100644 index 00000000000..c835c8f9fb5 Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01-authoring-blade2.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/multiple-01-authoring-blade3.png b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01-authoring-blade3.png new file mode 100644 index 00000000000..15332f440ed Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01-authoring-blade3.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/multiple-01a-results.png b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01a-results.png new file mode 100644 index 00000000000..29375e5d6fb Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01a-results.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/multiple-01b-results.png b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01b-results.png new file mode 100644 index 00000000000..7cc69ae1219 Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/multiple-01b-results.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/multiple-folder-icon.png b/docs/load-test/_img/app-service-web-app-performance-test/multiple-folder-icon.png new file mode 100644 index 00000000000..30d923bb4e5 Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/multiple-folder-icon.png differ diff --git a/docs/load-test/_img/app-service-web-app-performance-test/multiple-rerun-test.png b/docs/load-test/_img/app-service-web-app-performance-test/multiple-rerun-test.png new file mode 100644 index 00000000000..a527c69b4ac Binary files /dev/null and b/docs/load-test/_img/app-service-web-app-performance-test/multiple-rerun-test.png differ diff --git a/docs/load-test/_img/azure-icon.png b/docs/load-test/_img/azure-icon.png new file mode 100644 index 00000000000..276d9554afb Binary files /dev/null and b/docs/load-test/_img/azure-icon.png differ diff --git a/docs/load-test/_img/get-performance-data-for-load-tests/LoadTestGoToAppInsights.png b/docs/load-test/_img/get-performance-data-for-load-tests/LoadTestGoToAppInsights.png new file mode 100644 index 00000000000..34d0a1d6edf Binary files /dev/null and b/docs/load-test/_img/get-performance-data-for-load-tests/LoadTestGoToAppInsights.png differ diff --git a/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-01.png b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-01.png new file mode 100644 index 00000000000..c3d31b2c8e9 Binary files /dev/null and b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-01.png differ diff --git a/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-02.png b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-02.png new file mode 100644 index 00000000000..00a7fe528e1 Binary files /dev/null and b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-02.png differ diff --git a/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-03.png b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-03.png new file mode 100644 index 00000000000..c2583c00535 Binary files /dev/null and b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-03.png differ diff --git a/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-04.png b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-04.png new file mode 100644 index 00000000000..011c52681cd Binary files /dev/null and b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-04.png differ diff --git a/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-05.png b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-05.png new file mode 100644 index 00000000000..b2f2d7024d1 Binary files /dev/null and b/docs/load-test/_img/get-performance-data-for-load-tests/get-load-test-insights-05.png differ diff --git a/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-diagnostics-tab.png b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-diagnostics-tab.png new file mode 100644 index 00000000000..dc15a3fdced Binary files /dev/null and b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-diagnostics-tab.png differ diff --git a/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-download-results.png b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-download-results.png new file mode 100644 index 00000000000..5b03fca8073 Binary files /dev/null and b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-download-results.png differ diff --git a/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-logs-tab.png b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-logs-tab.png new file mode 100644 index 00000000000..2f0a0c4ab8e Binary files /dev/null and b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-logs-tab.png differ diff --git a/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-new-menu-item.png b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-new-menu-item.png new file mode 100644 index 00000000000..5aa03afd999 Binary files /dev/null and b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-new-menu-item.png differ diff --git a/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-parameters.png b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-parameters.png new file mode 100644 index 00000000000..5f7dee376cc Binary files /dev/null and b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-parameters.png differ diff --git a/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-rerun-test.png b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-rerun-test.png new file mode 100644 index 00000000000..800fbe2e02a Binary files /dev/null and b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-rerun-test.png differ diff --git a/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-summary-tab.png b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-summary-tab.png new file mode 100644 index 00000000000..98b1cb32b5d Binary files /dev/null and b/docs/load-test/_img/get-started-jmeter-test/JMeterLoadTestVSO-summary-tab.png differ diff --git a/docs/load-test/_img/get-started-jmeter-test/JMeterTestVSO-progress.png b/docs/load-test/_img/get-started-jmeter-test/JMeterTestVSO-progress.png new file mode 100644 index 00000000000..d0fd470ffe2 Binary files /dev/null and b/docs/load-test/_img/get-started-jmeter-test/JMeterTestVSO-progress.png differ diff --git a/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-diagnostics-tab.png b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-diagnostics-tab.png new file mode 100644 index 00000000000..af26e811864 Binary files /dev/null and b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-diagnostics-tab.png differ diff --git a/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-logs-tab.png b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-logs-tab.png new file mode 100644 index 00000000000..b5fecb00916 Binary files /dev/null and b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-logs-tab.png differ diff --git a/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-new-test-menu.png b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-new-test-menu.png new file mode 100644 index 00000000000..0f66bb90ab9 Binary files /dev/null and b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-new-test-menu.png differ diff --git a/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-progress.png b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-progress.png new file mode 100644 index 00000000000..8d3738a2a93 Binary files /dev/null and b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-progress.png differ diff --git a/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-rerun-test.png b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-rerun-test.png new file mode 100644 index 00000000000..a308fd354d7 Binary files /dev/null and b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-rerun-test.png differ diff --git a/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-settings-tab.png b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-settings-tab.png new file mode 100644 index 00000000000..3fb2d130d62 Binary files /dev/null and b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-settings-tab.png differ diff --git a/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-start-test.png b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-start-test.png new file mode 100644 index 00000000000..b8455ef7646 Binary files /dev/null and b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-start-test.png differ diff --git a/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-summary-tab.png b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-summary-tab.png new file mode 100644 index 00000000000..aa85ad2dce7 Binary files /dev/null and b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-summary-tab.png differ diff --git a/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO.png b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO.png new file mode 100644 index 00000000000..9d51508c13f Binary files /dev/null and b/docs/load-test/_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/CLT_LoadTestPickLocation.png b/docs/load-test/_img/getting-started-with-performance-testing/CLT_LoadTestPickLocation.png new file mode 100644 index 00000000000..6e3cfe26a0c Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/CLT_LoadTestPickLocation.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect1.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect1.png new file mode 100644 index 00000000000..287b36bfe81 Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect1.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect2.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect2.png new file mode 100644 index 00000000000..1cc24e5a1f8 Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect2.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect3.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect3.png new file mode 100644 index 00000000000..b8c0d1e2723 Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect3.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect4.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect4.png new file mode 100644 index 00000000000..e7634002819 Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect4.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect6.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect6.png new file mode 100644 index 00000000000..2b6962a2f3d Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestConnect6.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestDetail.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestDetail.png new file mode 100644 index 00000000000..f2c8480139c Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestDetail.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestDownloadReport.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestDownloadReport.png new file mode 100644 index 00000000000..9cc9b80017b Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestDownloadReport.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestQueued.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestQueued.png new file mode 100644 index 00000000000..d9308230a51 Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestQueued.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestRun.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestRun.png new file mode 100644 index 00000000000..d0cc8c9a433 Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestRun.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTestViewReport.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestViewReport.png new file mode 100644 index 00000000000..f998b89aaff Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTestViewReport.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/LoadTest_ReplaceURL.png b/docs/load-test/_img/getting-started-with-performance-testing/LoadTest_ReplaceURL.png new file mode 100644 index 00000000000..ba59f682de8 Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/LoadTest_ReplaceURL.png differ diff --git a/docs/load-test/_img/getting-started-with-performance-testing/OpenLoadTest.png b/docs/load-test/_img/getting-started-with-performance-testing/OpenLoadTest.png new file mode 100644 index 00000000000..b2597cce14f Binary files /dev/null and b/docs/load-test/_img/getting-started-with-performance-testing/OpenLoadTest.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestCompareChartsView.png b/docs/load-test/_img/performance-reports/LoadTestCompareChartsView.png new file mode 100644 index 00000000000..c22877dd4ce Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestCompareChartsView.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestCompareSummaryView.png b/docs/load-test/_img/performance-reports/LoadTestCompareSummaryView.png new file mode 100644 index 00000000000..585b74f46b0 Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestCompareSummaryView.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestCompareTestSettings.png b/docs/load-test/_img/performance-reports/LoadTestCompareTestSettings.png new file mode 100644 index 00000000000..168ec0d1418 Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestCompareTestSettings.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestFilterView.png b/docs/load-test/_img/performance-reports/LoadTestFilterView.png new file mode 100644 index 00000000000..a3146fe5d1b Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestFilterView.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestListMenu-icon.png b/docs/load-test/_img/performance-reports/LoadTestListMenu-icon.png new file mode 100644 index 00000000000..1db384d214c Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestListMenu-icon.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestListShortcutMenu.png b/docs/load-test/_img/performance-reports/LoadTestListShortcutMenu.png new file mode 100644 index 00000000000..19627b85fb0 Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestListShortcutMenu.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestManager.png b/docs/load-test/_img/performance-reports/LoadTestManager.png new file mode 100644 index 00000000000..3ca70f421f9 Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestManager.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestManagerView.png b/docs/load-test/_img/performance-reports/LoadTestManagerView.png new file mode 100644 index 00000000000..1432dd5835a Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestManagerView.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestSelectTwoCompare.png b/docs/load-test/_img/performance-reports/LoadTestSelectTwoCompare.png new file mode 100644 index 00000000000..29b7325c7d8 Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestSelectTwoCompare.png differ diff --git a/docs/load-test/_img/performance-reports/LoadTestViewListTS.png b/docs/load-test/_img/performance-reports/LoadTestViewListTS.png new file mode 100644 index 00000000000..be6ae379925 Binary files /dev/null and b/docs/load-test/_img/performance-reports/LoadTestViewListTS.png differ diff --git a/docs/load-test/_img/performance-testing/IC778315.png b/docs/load-test/_img/performance-testing/IC778315.png new file mode 100644 index 00000000000..1781fb0d42e Binary files /dev/null and b/docs/load-test/_img/performance-testing/IC778315.png differ diff --git a/docs/load-test/_img/performance-testing/IC778317.png b/docs/load-test/_img/performance-testing/IC778317.png new file mode 100644 index 00000000000..f34180ba4f7 Binary files /dev/null and b/docs/load-test/_img/performance-testing/IC778317.png differ diff --git a/docs/load-test/_img/performance-testing/IC778489.jpg b/docs/load-test/_img/performance-testing/IC778489.jpg new file mode 100644 index 00000000000..6d18f0cda91 Binary files /dev/null and b/docs/load-test/_img/performance-testing/IC778489.jpg differ diff --git a/docs/load-test/_img/performance-testing/IC778490.png b/docs/load-test/_img/performance-testing/IC778490.png new file mode 100644 index 00000000000..7e2b8dac079 Binary files /dev/null and b/docs/load-test/_img/performance-testing/IC778490.png differ diff --git a/docs/load-test/_img/performance-testing/IC838830.png b/docs/load-test/_img/performance-testing/IC838830.png new file mode 100644 index 00000000000..a6f343b73e3 Binary files /dev/null and b/docs/load-test/_img/performance-testing/IC838830.png differ diff --git a/docs/load-test/_img/performance-testing/load-test-menu.png b/docs/load-test/_img/performance-testing/load-test-menu.png new file mode 100644 index 00000000000..cdc4000da09 Binary files /dev/null and b/docs/load-test/_img/performance-testing/load-test-menu.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/01-chrome-settings.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/01-chrome-settings.png new file mode 100644 index 00000000000..ed83ffead14 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/01-chrome-settings.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/02-save-as-har.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/02-save-as-har.png new file mode 100644 index 00000000000..5db54c01581 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/02-save-as-har.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/03-fiddler-export.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/03-fiddler-export.png new file mode 100644 index 00000000000..ebd47599204 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/03-fiddler-export.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/05-start-http-archive-import.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/05-start-http-archive-import.png new file mode 100644 index 00000000000..0d5460762ea Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/05-start-http-archive-import.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/06-select-har-file.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/06-select-har-file.png new file mode 100644 index 00000000000..07d87ad13f7 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/06-select-har-file.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/07a-har-import.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/07a-har-import.png new file mode 100644 index 00000000000..6a6960f6408 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/07a-har-import.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/07b-har-import.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/07b-har-import.png new file mode 100644 index 00000000000..05dca7ad42c Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/07b-har-import.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/07c-har-import.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/07c-har-import.png new file mode 100644 index 00000000000..895d4c77510 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/07c-har-import.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/07d-har-import.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/07d-har-import.png new file mode 100644 index 00000000000..0d53b550142 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/07d-har-import.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/07e-har-import.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/07e-har-import.png new file mode 100644 index 00000000000..580887095f3 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/07e-har-import.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/07f-har-save-test.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/07f-har-save-test.png new file mode 100644 index 00000000000..126631e2a64 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/07f-har-save-test.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/08a-diagnostics-tab.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/08a-diagnostics-tab.png new file mode 100644 index 00000000000..87fbd04d506 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/08a-diagnostics-tab.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/08b-diagnostics-tab.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/08b-diagnostics-tab.png new file mode 100644 index 00000000000..e26e08df345 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/08b-diagnostics-tab.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/11-fiddler-import.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/11-fiddler-import.png new file mode 100644 index 00000000000..3b27c9fdf28 Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/11-fiddler-import.png differ diff --git a/docs/load-test/_img/record-and-replay-cloud-load-tests/12-export-to-vs.png b/docs/load-test/_img/record-and-replay-cloud-load-tests/12-export-to-vs.png new file mode 100644 index 00000000000..6b01f8e0a0b Binary files /dev/null and b/docs/load-test/_img/record-and-replay-cloud-load-tests/12-export-to-vs.png differ diff --git a/docs/load-test/_img/resource-retain-time01.png b/docs/load-test/_img/resource-retain-time01.png new file mode 100644 index 00000000000..e68e968fc2c Binary files /dev/null and b/docs/load-test/_img/resource-retain-time01.png differ diff --git a/docs/load-test/_img/resource-retain-time02.png b/docs/load-test/_img/resource-retain-time02.png new file mode 100644 index 00000000000..f36f7515525 Binary files /dev/null and b/docs/load-test/_img/resource-retain-time02.png differ diff --git a/docs/load-test/_img/reviewresults-icon.png b/docs/load-test/_img/reviewresults-icon.png new file mode 100644 index 00000000000..8cb0049ba1e Binary files /dev/null and b/docs/load-test/_img/reviewresults-icon.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/add-test-notes.png b/docs/load-test/_img/run-performance-tests-app-before-release/add-test-notes.png new file mode 100644 index 00000000000..3a73591abb4 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/add-test-notes.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/add-tests-to-test-mix.png b/docs/load-test/_img/run-performance-tests-app-before-release/add-tests-to-test-mix.png new file mode 100644 index 00000000000..75914be0c42 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/add-tests-to-test-mix.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/change-load-pattern.png b/docs/load-test/_img/run-performance-tests-app-before-release/change-load-pattern.png new file mode 100644 index 00000000000..8c51cbd4412 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/change-load-pattern.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/choose-load-test.png b/docs/load-test/_img/run-performance-tests-app-before-release/choose-load-test.png new file mode 100644 index 00000000000..b49769d51ee Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/choose-load-test.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/choose-test-mix.png b/docs/load-test/_img/run-performance-tests-app-before-release/choose-test-mix.png new file mode 100644 index 00000000000..09ba17fed67 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/choose-test-mix.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/create-new-load-test.png b/docs/load-test/_img/run-performance-tests-app-before-release/create-new-load-test.png new file mode 100644 index 00000000000..c7bd166cbee Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/create-new-load-test.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/create-web-perf-load-test-project.png b/docs/load-test/_img/run-performance-tests-app-before-release/create-web-perf-load-test-project.png new file mode 100644 index 00000000000..a868450db6c Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/create-web-perf-load-test-project.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/create-web-perf-test.png b/docs/load-test/_img/run-performance-tests-app-before-release/create-web-perf-test.png new file mode 100644 index 00000000000..31e0648b9f3 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/create-web-perf-test.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/edit-page-response-time-goal.png b/docs/load-test/_img/run-performance-tests-app-before-release/edit-page-response-time-goal.png new file mode 100644 index 00000000000..eb56feaa10d Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/edit-page-response-time-goal.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/install-tools.png b/docs/load-test/_img/run-performance-tests-app-before-release/install-tools.png new file mode 100644 index 00000000000..5243b8ee949 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/install-tools.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/load-test-summary-details.png b/docs/load-test/_img/run-performance-tests-app-before-release/load-test-summary-details.png new file mode 100644 index 00000000000..cf0318592a4 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/load-test-summary-details.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/load-test-summary.png b/docs/load-test/_img/run-performance-tests-app-before-release/load-test-summary.png new file mode 100644 index 00000000000..bf61b9a4b3a Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/load-test-summary.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/manage-results.png b/docs/load-test/_img/run-performance-tests-app-before-release/manage-results.png new file mode 100644 index 00000000000..ca31c6efaa2 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/manage-results.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/percentage-new-users.png b/docs/load-test/_img/run-performance-tests-app-before-release/percentage-new-users.png new file mode 100644 index 00000000000..3f58973efd5 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/percentage-new-users.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/provide-site-url-for-testing.png b/docs/load-test/_img/run-performance-tests-app-before-release/provide-site-url-for-testing.png new file mode 100644 index 00000000000..8d50dbd303b Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/provide-site-url-for-testing.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/rename-web-perf-test.png b/docs/load-test/_img/run-performance-tests-app-before-release/rename-web-perf-test.png new file mode 100644 index 00000000000..3424db5bdff Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/rename-web-perf-test.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/review-page-response-time.png b/docs/load-test/_img/run-performance-tests-app-before-release/review-page-response-time.png new file mode 100644 index 00000000000..981f9a05c8b Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/review-page-response-time.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/run-load-test.png b/docs/load-test/_img/run-performance-tests-app-before-release/run-load-test.png new file mode 100644 index 00000000000..d33a1e9ffdb Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/run-load-test.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/select-load-test-location.png b/docs/load-test/_img/run-performance-tests-app-before-release/select-load-test-location.png new file mode 100644 index 00000000000..cdb3bcedbfb Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/select-load-test-location.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/select-tests-for-test-mix.png b/docs/load-test/_img/run-performance-tests-app-before-release/select-tests-for-test-mix.png new file mode 100644 index 00000000000..3ac3aa2cee6 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/select-tests-for-test-mix.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/use-app-stop-recording.png b/docs/load-test/_img/run-performance-tests-app-before-release/use-app-stop-recording.png new file mode 100644 index 00000000000..a0032978648 Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/use-app-stop-recording.png differ diff --git a/docs/load-test/_img/run-performance-tests-app-before-release/web-perf-test-in-load-test-editor.png b/docs/load-test/_img/run-performance-tests-app-before-release/web-perf-test-in-load-test-editor.png new file mode 100644 index 00000000000..7b3ba6ca82b Binary files /dev/null and b/docs/load-test/_img/run-performance-tests-app-before-release/web-perf-test-in-load-test-editor.png differ diff --git a/docs/load-test/_img/visualstudio-icon.png b/docs/load-test/_img/visualstudio-icon.png new file mode 100644 index 00000000000..3b34d5200ff Binary files /dev/null and b/docs/load-test/_img/visualstudio-icon.png differ diff --git a/docs/load-test/_img/vsts-icon.png b/docs/load-test/_img/vsts-icon.png new file mode 100644 index 00000000000..aa23a1e3bb2 Binary files /dev/null and b/docs/load-test/_img/vsts-icon.png differ diff --git a/docs/load-test/_shared/help-and-support-footer.md b/docs/load-test/_shared/help-and-support-footer.md new file mode 100644 index 00000000000..7c54e125b62 --- /dev/null +++ b/docs/load-test/_shared/help-and-support-footer.md @@ -0,0 +1,6 @@ +## Help and support + +Report any problems on [Developer Community](https://developercommunity.visualstudio.com/), +make suggestions on [UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services), +get advice on [Stack Overflow](https://stackoverflow.com/questions/tagged/vs-team-services), +and get support via our [Support](https://www.visualstudio.com/team-services/support/) page. diff --git a/docs/load-test/_shared/version-header-ts.md b/docs/load-test/_shared/version-header-ts.md new file mode 100644 index 00000000000..9d50580e6ae --- /dev/null +++ b/docs/load-test/_shared/version-header-ts.md @@ -0,0 +1 @@ +**VSTS** diff --git a/docs/load-test/_shared/version-header-vs-ts.md b/docs/load-test/_shared/version-header-vs-ts.md new file mode 100644 index 00000000000..a73ceb4d55a --- /dev/null +++ b/docs/load-test/_shared/version-header-vs-ts.md @@ -0,0 +1 @@ +**Visual Studio 2017 | Visual Studio 2015 | VSTS** diff --git a/docs/load-test/_shared/version-header-vs-vsts-ts.md b/docs/load-test/_shared/version-header-vs-vsts-ts.md new file mode 100644 index 00000000000..a73ceb4d55a --- /dev/null +++ b/docs/load-test/_shared/version-header-vs-vsts-ts.md @@ -0,0 +1 @@ +**Visual Studio 2017 | Visual Studio 2015 | VSTS** diff --git a/docs/load-test/app-service-web-app-performance-test.md b/docs/load-test/app-service-web-app-performance-test.md new file mode 100644 index 00000000000..ffe2b622bf3 --- /dev/null +++ b/docs/load-test/app-service-web-app-performance-test.md @@ -0,0 +1,139 @@ +--- +title: Test your Azure web app performance under load from the Azure portal +description: Run Azure web app performance tests to check how your app handles user load. Measure response time and find failures that might indicate problems. +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: D39BF037-ADF1-41D7-BA6D-84AADA2A16DE +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Load test with the Azure portal + +[!INCLUDE [version-header-ts](_shared/version-header-ts.md)] + +Check your web app's performance before you launch it or deploy updates to production. +That way, you can better assess whether your app is ready for release. Feel more +confident that your app can handle the traffic during peak use or at your next marketing push. + + +## Prepare your environment + +* You'll need an [Azure subscription](https://account.windowsazure.com/subscriptions), + if you don't have one already. Learn how you can + [open an Azure account for free](https://azure.microsoft.com/pricing/free-trial/?WT.mc_id=A261C142F). + +* You'll need a [Visual Studio Team Services (VSTS)](https://www.visualstudio.com/products/what-is-visual-studio-online-vs) + account to keep your performance test history. A suitable account will be created + automatically when you set up your performance test. Or you can create a new account + or use an existing account if you're the account owner. + [What else can I do with a VSTS account?](reference-qa.md#TeamServicesAccount) + +* Deploy your app for testing in a non-production environment. + Have your app use an App Service plan other than the plan used in production. + That way, you don't affect any existing customers or slow down your app in production. + + +## Set up and run your performance test + +1. Sign in to the [Azure Portal](https://portal.azure.com). + To use a VSTS account that you own, + sign in as the account owner. + +1. Go to your web app. + + ![Go to Browse All, Web Apps, your web app](_img/app-service-web-app-performance-test/azure-np-web-apps.png) + +1. Go to **Performance Test**. + + ![Go to Tools, Performance Test](_img/app-service-web-app-performance-test/azure-np-web-app-details-tools-expanded.png) + +1. Now you'll link a [Visual Studio Team Services](https://www.visualstudio.com/products/what-is-visual-studio-online-vs) + account to keep your performance test history. + + If you have a VSTS account to use, select that account. If you don't, create a new account. + + ![Select existing VSTS account, or create a new account](_img/app-service-web-app-performance-test/azure-np-no-vso-account.png) + +1. Create your performance test. Set the details and run the test. + You can watch the results in real time while the test runs. + + For example, suppose we have an app that gave out coupons at last year's holiday sale. + This event lasted 15 minutes with a peak load of 100 concurrent customers. + We want to double the number of customers this year. We also want to improve + customer satisfaction by reducing the page load time from 5 seconds to 2 seconds. + So, we'll test our updated app's performance with 250 users for 15 minutes. + + We'll simulate load on our app by generating virtual users (customers) + who visit our web site at the same time. This will show us how many + requests are failing or responding slowly. + + ![Create, set up, and run your performance test](_img/app-service-web-app-performance-test/azure-np-new-performance-test.png) + + * Your web app's default URL is added automatically. + You can change the URL to test other pages (HTTP GET requests only). + + * To simulate local conditions and reduce latency, + select a location closest to your users for generating load. + + Here's the test in progress. During the first minute, + our page loads slower than we want. + + ![Performance test in progress with real-time data](_img/app-service-web-app-performance-test/azure-np-running-perf-test.png) + + After the test is done, we learn that the page loads much faster + after the first minute. This helps identify where we might want to + start troubleshooting the problem. + + ![Completed performance test shows results, including failed requests](_img/app-service-web-app-performance-test/azure-np-perf-test-done.png) + + +## Test multiple URLs + +You can also run performance tests incorporating multiple URLs +that represent an end-to-end user scenario by uploading a Visual +Studio Web Test file. Some of the ways you can create a +Visual Studio Web Test file are: + +* [Capture traffic using Fiddler and export as a Visual Studio Web Test file](http://docs.telerik.com/fiddler/Save-And-Load-Traffic/Tasks/VSWebTest) +* [Create a load test file in Visual Studio](run-performance-tests-app-before-release.md) + +To upload and run a Visual Studio Web Test file: + +1. Follow the [steps above](#singletest) to open the **New performance test** blade. + In this blade, choose the CONFIGFURE TEST USING option to open the + **Configure test using** blade. + + ![Opening the Configure load testing blade](_img/app-service-web-app-performance-test/multiple-01-authoring-blade.png) + +1. Check that the TEST TYPE is set to **Visual Studio Web Test** and select your HTTP Archive file. + Use the ![folder](_img/app-service-web-app-performance-test/multiple-folder-icon.png) icon to open the file selector dialog. + + ![Uploading a multiple URL Visual Studio Web Test file](_img/app-service-web-app-performance-test/multiple-01-authoring-blade2.png) + + After the file has been uploaded, you see the list of URLs to be tested in the URL DETAILS section. + +1. Specify the user load and test duration, then choose **Run test**. + + ![Selecting the user load and duration](_img/app-service-web-app-performance-test/multiple-01-authoring-blade3.png) + + After the test has finished, you see the results in two panes. The left pane + shows the performnace information as a series of charts. + + ![The performance results pane](_img/app-service-web-app-performance-test/multiple-01a-results.png) + + The right pane shows a list of failed requests, with the type of error and the number + of times it occurred. + + ![The request failures pane](_img/app-service-web-app-performance-test/multiple-01b-results.png) + +1. Rerun the test by choosing the **Rerun** icon at the top of the right pane. + + ![Rerunning the test](_img/app-service-web-app-performance-test/multiple-rerun-test.png) + +## Next step + +> [!div class="nextstepaction"] +> [Add app performance data](get-performance-data-for-load-tests.md) diff --git a/docs/load-test/breadcrumb/toc.yml b/docs/load-test/breadcrumb/toc.yml new file mode 100644 index 00000000000..5ae3fc2a2f8 --- /dev/null +++ b/docs/load-test/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Testing + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=testing + items: + - name: "Load Testing" + tocHref: /vsts/ + topicHref: /vsts/load-test/index diff --git a/docs/load-test/get-performance-data-for-load-tests.md b/docs/load-test/get-performance-data-for-load-tests.md new file mode 100644 index 00000000000..5a4fdd84c96 --- /dev/null +++ b/docs/load-test/get-performance-data-for-load-tests.md @@ -0,0 +1,82 @@ +--- +title: Get Application Insights performance data with load tests +description: Get app performance data from Application Insights in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: 5658166B-CA7F-4C6B-B55D-AE745FB78D5C +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + + +# Get app performance data with your load tests + +[!INCLUDE [version-header-vs-ts](_shared/version-header-vs-ts.md)] + +When you load test your app in the cloud using Visual Studio Team Services (VSTS), +you can compare app performance with virtual user load using +[Application Insights](https://azure.microsoft.com/documentation/articles/app-insights-overview/). +Then, by doing a quick root cause analysis, you can figure out which code +is causing performance problems. + +1. Download and install + [Visual Studio Enterprise](https://www.visualstudio.com/downloads/download-visual-studio-vs), + if you haven't already done so. + +1. [Enable Azure Active Directory](../accounts/access-with-azure-ad.md) + for your VSTS account, if you haven't already done so. + +1. [Link your VSTS account with your Azure subscription](../accounts/connect-account-to-aad.md), + if you haven't already done so. + +1. Sign in to your VSTS account from your web browser to refresh the Azure Resources Manager access token. + The token is valid for 12 hours in the context of VSTS. + + - If you have already signed, you must sign out and then sign in again.

        + +1. [Set up your load test project to run in the cloud](getting-started-with-performance-testing.md#LoadTestVSIDE), + if you haven't already done so. + +1. With your load test project open in Visual Studio Enterprise, open the + **Run Settings** section and select your active run settings. Open the + shortcut menu and choose **Get Performance Data from Application Insights**. + + ![Choosing Get Performance Data from Application Insights](_img/get-performance-data-for-load-tests/get-load-test-insights-01.png) + +1. Select the apps you want to monitor and the performance counters + you want to view while your load test runs. + + ![Select the apps to monitor and performance counters](_img/get-performance-data-for-load-tests/get-load-test-insights-02.png) + + The counters you selected are shown in the load test project. + + ![Performance counters shown in the load test project](_img/get-performance-data-for-load-tests/get-load-test-insights-03.png) + +1. Queue a load test run and view the performance data from + Application Insights while your load test runs. The data might + take a few minutes to appear. + + ![To view the performance counters when your load test runs, click Application](_img/get-performance-data-for-load-tests/get-load-test-insights-04.png) + + Application counters are correlated with user load so that you can + understand which issues might cause performance problems that you find. + + >The counter samples have a sampling rate of one minute irrespective of + the sampling rate configured in your load test project. + +1. To do a more detailed analysis for any performance issue, or to do a + quick root cause analysis, go to Application Insights. + + ![To get more performance details, click Go to Application Insights](_img/get-performance-data-for-load-tests/LoadTestGoToAppInsights.png) + +## See also + +* [FAQs for load testing](reference-qa.md#qaappinsights) +* [Load test with Visual Studio](getting-started-with-performance-testing.md) +* [Load test with VSTS](get-started-simple-cloud-load-test.md) +* [Load test with Azure portal](app-service-web-app-performance-test.md) +* [Tutorial: Run load tests before release](run-performance-tests-app-before-release.md) +* [Analyze load test results using the Load Test Analyzer](https://msdn.microsoft.com/library/ee923686.aspx) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/load-test/get-started-jmeter-test.md b/docs/load-test/get-started-jmeter-test.md new file mode 100644 index 00000000000..e3d7b0f0f6b --- /dev/null +++ b/docs/load-test/get-started-jmeter-test.md @@ -0,0 +1,105 @@ +--- +title: Apache JMeter cloud-based load testing with Visual Studio Team Services +description: Using JMeter to performance test your application in the cloud with Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: 3B2A725F-4E7B-4652-BFD1-FC7C9A248B7B +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Run Apache JMeter load tests with VSTS + +[!INCLUDE [version-header-ts](_shared/version-header-ts.md)] + +Before you start: + +* [Create your Visual Studio Team Services (VSTS) account](https://www.visualstudio.com/products/visual-studio-team-services-vs), + if you don't have one already. + +**To run a JMeter load test:** + +1. Sign in to your VSTS account (```https://{youraccount}.visualstudio.com```). + +1. Go to the **Load Test** hub, open the **+ New** + menu and choose **Apache JMeter test**. + + ![Start a new load test from the New menu](_img/get-started-jmeter-test/JMeterLoadTestVSO-new-menu-item.png) + +1. Enter your load test parameters. To run your test near to where your users are located, + select a closer location for your load test. Then start your test when you're ready. + + ![Add load test information, then choose Run Test](_img/get-started-jmeter-test/JMeterLoadTestVSO-parameters.png) + + >For information about the scripts and supporting files used for JMeter + web tests, see [Build a Web Test Plan](http://jmeter.apache.org/usermanual/build-web-test-plan.html) + on the Apache JMeter website. + +1. As the test runs, you see live information about the progress + of the test. You can stop the test by using the **Abort** link on the + toolbar. + + ![Live information about the running load test](_img/get-started-jmeter-test/JMeterTestVSO-progress.png) + +1. When your test is done, look at the results to see how + well your app performed. For example, you can see an overview + of your app's performance in the **Summary** tab. + This tab shows all of the main metrics such as average response + time, user load, requests per second, failed requests, any errors + that might have occurred, and test usage. + + ![Load test Summary tab results](_img/get-started-jmeter-test/JMeterLoadTestVSO-summary-tab.png) + + The lower section of the **Summary** tab shows the settings used + for the test, and details of the five slowest requests during the test. + If there are any transaction tests, the tab will also show the five slowest of these. + Use the ![down arrow](_img/_shared/SimpleLoadTestVSO-sort-column.png) + icon above a column to sort the list based on the contents of that column. + +1. Open the **Charts** tab to see a graphical representation of + the test results over time. The charts show the average + performance, throughput, errors, and the results of each test + request. Hover your mouse pointer over a chart to + see more details. + + ![Load test Charts tab results](_img/_shared/LoadTestVSO-charts.png) + +1. Open the **Diagnostics** tab to see detailed information such as a list + of errors and status messages. + + ![Load test Diagnostics tab results](_img/get-started-jmeter-test/JMeterLoadTestVSO-diagnostics-tab.png) + + You can also use the ![arrow](_img/_shared/SimpleLoadTestVSO-summary-errors-icon.png) + icon in the **Errors** section of the **Summary** tab to go directly to the + **Diagnostics** tab. + + ![Opening the Diagnostics tab from the Summary tab](_img/_shared/SimpleLoadTestVSO-summary-errors-link.png) + +1. Open the **Logs** tab to see a list of test runs. Choose the link in + the **Attachment** column to download the detailed log as a text file. + + ![Load test Logs tab results](_img/get-started-jmeter-test/JMeterLoadTestVSO-logs-tab.png) + +1. If you have a favorite listener that you use to analyze results in + the JMeter IDE, download the test results in .CSV format and the logs + as a zip file from the **Download Results** link. + + ![Downloading the results and log files as a zip file](_img/get-started-jmeter-test/JMeterLoadTestVSO-download-results.png) + +1. To run the same test again, choose **Rerun**. + + ![Rerunning the same test](_img/get-started-jmeter-test/JMeterLoadTestVSO-rerun-test.png) + +1. Now see how you can [view and compare your load test runs](performance-reports.md). + +## See also + +* [FAQs for load testing](reference-qa.md#jmeter-tests) +* [Load test with Visual Studio](getting-started-with-performance-testing.md) +* [Load test with VSTS](get-started-simple-cloud-load-test.md) +* [Load test with Azure portal](app-service-web-app-performance-test.md) +* [Tutorial: Run load tests before release](run-performance-tests-app-before-release.md) +* [Analyze load test results using the Load Test Analyzer](https://msdn.microsoft.com/library/ee923686.aspx) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/load-test/get-started-simple-cloud-load-test.md b/docs/load-test/get-started-simple-cloud-load-test.md new file mode 100644 index 00000000000..86bcf23a728 --- /dev/null +++ b/docs/load-test/get-started-simple-cloud-load-test.md @@ -0,0 +1,118 @@ +--- +title: URL-based load testing with Visual Studio Team Services +description: Get app performance data when you load test with Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: 65E96414-756B-4BD9-92C3-4DDB4C7A6B57 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Run URL-based load tests with VSTS + +[!INCLUDE [version-header-ts](_shared/version-header-ts.md)] + +You can run a load test on your web app or site directly +using Visual Studio Team Services (VSTS). + + +## Prepare your environment + +* You will need a [Visual Studio Enterprise subscription](https://www.visualstudio.com/products/visual-studio-enterprise-vs) + (monthly, annual, or MSDN) to run URL-based load tests. + +* [Create your VSTS account](https://www.visualstudio.com/products/visual-studio-team-services-vs), + if you don't have one already. + + +## Run a URL-based load test + +1. Sign in to your VSTS account (```https://{youraccount}.visualstudio.com```). + +1. Go to the **Load test** hub, open the **+ New** + menu and choose **URL based test**. + + ![Start a new load test from the New menu](_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-new-test-menu.png) + +1. Type a name for the load test, and enter the URL you want to test + in the center column and in the details pane on the right. For a simple + load test, leave the **HTTP method** set to **GET**. + + ![Add load test information](_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO.png) + + You can add multiple URLs and select the method for each one, such as + **POST** or **PUT**. You can also add headers and querystring values + if you need to send these as part of the request. The URL Load Test + accesses each of these URLs multiple times using the parameters you + specify, and records the results. + +1. Open the **Settings** tab. Here you can change the parameters of + the test such as the duration, load pattern, number of users, and + more. To run the test near to your users, select a **Load location**. + Then choose **Save**. + + ![Specify settings, then save the test](_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-settings-tab.png) + +1. When you have set up all the URLs and parameters for your test, start it by + choosing **Run test**. + + ![Start the test](_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-start-test.png) + +1. As the test runs, you see live information about the progress + of the test. You can stop the test by using the **Abort** link on the + toolbar. + + ![Live information about the running load test](_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-progress.png) + + +## View the results of the load test + +1. When your test is done, look at the results to see how + well your app performed. For example, you can see an overview + of your app's performance in the **Summary** tab. + This tab shows all of the main metrics such as average response + time, user load, requests per second, failed requests, any errors + that might have occurred, and test usage. + + ![Load test Summary tab results](_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-summary-tab.png) + + The lower section of the **Summary** tab shows the settings used + for the test, and details of the five slowest requests during the test. + If there are any transaction tests, the tab will also show the five slowest of these. + Use the ![down arrow](_img/_shared/SimpleLoadTestVSO-sort-column.png) + icon above a column to sort the list based on the contents of that column. + +1. Open the **Charts** tab to see a graphical representation of + the test results over time. The charts show the average + performance, throughput, errors, and the results of each test + request. Hover your mouse pointer over a chart to + see more details. + + ![Load test Charts tab results](_img/_shared/LoadTestVSO-charts.png) + +1. Open the **Diagnostics** tab to see detailed information such as a list + of errors and status messages. + + ![Load test Diagnostics tab results](_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-diagnostics-tab.png) + + You can also use the ![arrow](_img/_shared/SimpleLoadTestVSO-summary-errors-icon.png) + icon in the **Errors** section of the **Summary** tab to go directly to the + **Diagnostics** tab. + + ![Opening the Diagnostics tab from the Summary tab](_img/_shared/SimpleLoadTestVSO-summary-errors-link.png) + +1. Open the **Logs** tab to see a list of test runs. Choose the link in + the **Attachment** column to download the detailed log as a text file. + + ![Load test Logs tab results](_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-logs-tab.png) + +1. To run the same test again, choose **Rerun**. + + ![Rerunning the same test](_img/get-started-simple-cloud-load-test/SimpleLoadTestVSO-rerun-test.png) + +## Next step + +> [!div class="nextstepaction"] +> [View and compare load test runs](performance-reports.md) diff --git a/docs/load-test/getting-started-with-performance-testing.md b/docs/load-test/getting-started-with-performance-testing.md new file mode 100644 index 00000000000..242b85a80af --- /dev/null +++ b/docs/load-test/getting-started-with-performance-testing.md @@ -0,0 +1,155 @@ +--- +title: Load test in the cloud with VSTS +description: Performance test your app with cloud-based load tests using Visual Studio and Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: 50d0dafd-ae7c-4028-9e4a-687f062e0179 +ms.topic: get-started-article +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + + +# Load test your app in the cloud using Visual Studio and VSTS + +[!INCLUDE [version-header-vs-ts](_shared/version-header-vs-ts.md)] + +Check your app or web site's performance before you launch it or deploy updates to production. +Find problems before your customers do. Start running +[cloud-based load tests](https://www.visualstudio.com/features/vso-cloud-load-testing-vs) +in almost no time with Visual Studio and Visual Studio Team Services (VSTS). + +> This example shows how to execute a load test using Visual +Studio. You can also run cloud-based load tests directly using your +[VSTS portal](get-started-simple-cloud-load-test.md). +If you prefer to run your tests in a local environment rather +than in the cloud, see [Use a lab environment for your devops](https://docs.microsoft.com/visualstudio/test/lab-management/using-a-lab-environment-for-your-application-lifecycle). + + +## Prepare your environment + +* [Download and install Visual Studio Enterprise](https://www.visualstudio.com/downloads/download-visual-studio-vs), + if you don't already have it. + +* [Create your VSTS account](https://www.visualstudio.com/products/visual-studio-team-services-vs), + if you don't have one already. You can have any access + level assigned do you in VSTS + when you use Visual Studio Enterprise to run load tests. + +* If you don't have a load test project, + use our sample load test project with your web site or app. + Just provide the address for the web site that you want to test. + Or, if you have a load test project, jump ahead to + [set up your load test project](#article14) to run load tests + in VSTS. + + +## Get the sample load test project + +1. [Download the sample load test project](https://code.msdn.microsoft.com/Getting-started-with-17a52e95), + unblock the zip file in its **Properties** dialog, + and unzip the files into a local folder on your computer. + +1. Open the **GettingStartedWithLoadTesting.sln** solution + in Visual Studio Enterprise. + +1. Open the **SampleWebTest.webtest** file. + Replace the URL with the URL of your app's web page. + + ![Open SampleWebTest.webtest. In Properties window, replace URL with your web page address](_img/getting-started-with-performance-testing/LoadTest_ReplaceURL.png) + + +## Connect to your VSTS account + +Before you can run load tests in the cloud, +connect Visual Studio to your VSTS account. + +1. If you haven't already, [sign up for a VSTS account](https://go.microsoft.com/fwlink/?LinkId=309297&clcid=0x409&slcid=0x409). + Learn more about + [signing up for VSTS](https://www.visualstudio.com/products/visual-studio-team-services-vs). + +1. In Team Explorer, connect to your VSTS account. + + ![Connect to your VSTS account](_img/getting-started-with-performance-testing/LoadTestConnect1.png) + +1. Connect to one of your team projects. + + ![Select Team Projects](_img/getting-started-with-performance-testing/LoadTestConnect2.png) + + - If you haven't connected to your VSTS + account before, add your account to the server list. + + ![Click Servers to add your VSTS account](_img/getting-started-with-performance-testing/LoadTestConnect3.png) + + - Enter your VSTS account name + (```{youraccount}.visualstudio.com```). + + ![Enter your account name](_img/getting-started-with-performance-testing/LoadTestConnect4.png) + + - If you're prompted to sign in to VSTS, do that. + +1. Select your VSTS account from the list, + then choose your team project. Now you can connect. + + ![Choose your team project](_img/getting-started-with-performance-testing/LoadTestConnect6.png) + + +## Run and analyze your load test + +1. In Solution Explorer, open the load test that you want to run. + + ![Solution Explorer: double-click your load test](_img/getting-started-with-performance-testing/OpenLoadTest.png) + +1. To run your test closer to where your users are, + select a location closer to your users. + + ![Edit load test to set location](_img/CLT_LoadTestSetLocation.png) + + ![Select location](_img/getting-started-with-performance-testing/CLT_LoadTestPickLocation.png) + +1. Now run your load test. This will run in the cloud + using VSTS. + + ![On the load test toolbar, click Run](_img/getting-started-with-performance-testing/LoadTestRun.png) + + Your test appears in the queue and waits for its turn to run. + When VSTS is ready to run your test, the test status + changes to "Acquiring resources". + + ![Your load test appears in the queue](_img/getting-started-with-performance-testing/LoadTestQueued.png) + + A large test run might take up to 10 minutes while + VSTS sets up virtual machines and agents for you. + +1. You can watch your app's performance while the test runs. + Look at the details to review errors, warnings, or other information + about your test. + + ![Running your load test show the performance](_img/LoadTestInProgress.png) + +1. When the test is done, download the report to view the results. + + ![Click Download to save the report](_img/getting-started-with-performance-testing/LoadTestDownloadReport.png) + + ![Click View Report to view results](_img/getting-started-with-performance-testing/LoadTestViewReport.png) + + The results include performance counter data, threshold violations, and error information. + +1. Review your test's details. Find the number of users where your + app's performance fails to meet your requirements by examining the + step load pattern for virtual users. + + ![View load test run details](_img/getting-started-with-performance-testing/LoadTestDetail.png) + +1. Fix any performance issues that you find in your app's code, + then rerun the test. + +1. To [simulate real-world loads](https://msdn.microsoft.com/library/ff406975%28v=vs.140%29.aspx) + more closely, you can refine your test by specifying web performance + test properties, load test scenario properties, and run settings properties. + +## Next step + +> [!div class="nextstepaction"] +> [Add app performance data](get-performance-data-for-load-tests.md) diff --git a/docs/load-test/index.md b/docs/load-test/index.md new file mode 100644 index 00000000000..6f1cfca88b1 --- /dev/null +++ b/docs/load-test/index.md @@ -0,0 +1,64 @@ +--- +title: Load Testing +description: Load Testing with Visual Studio and Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: C5C81ACE-0BBA-4D32-9CC9-28CF5C5865A6 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Load Testing + +**Visual Studio 2017 | Visual Studio 2015 | VSTS | [Previous version](https://msdn.microsoft.com/library/dn250793%28v=vs.120%29.aspx)** + +Load test your app with hundreds of thousands of users using Visual Studio Team Services (VSTS). + +## 5-Minute Quickstarts + +Load test from your preferred UI, and compare the results. + +| | | +| --- | --- | +| ![icon](_img/visualstudio-icon.png)
        [Load test with Visual Studio](getting-started-with-performance-testing.md) | ![icon](_img/vsts-icon.png)
        [Load test with VSTS](get-started-simple-cloud-load-test.md) | +| ![icon](_img/azure-icon.png)
        [Load test with Azure portal](app-service-web-app-performance-test.md) | ![icon](_img/reviewresults-icon.png)
        [View and compare results](performance-reports.md) | +| | | + +## Videos + +| | | +| --- | --- | +| | | +| | | +| | | + +## Step-by-Step Tutorials + +Learn how to run performance and load tests against your app. + +* [Run load tests before release](run-performance-tests-app-before-release.md) + +## How-to Guides + +* [Add app performance data](get-performance-data-for-load-tests.md) +* [Run Apache JMeter load tests](get-started-jmeter-test.md) +* [Record and replay tests](record-and-replay-cloud-load-tests.md) + +## Troubleshooting + +* [VSTS connectivity](reference-qa.md#qaconnectts) +* [Visual Studio connectivity](reference-qa.md#troubleshooting) + +## Reference + +* [FAQs](reference-qa.md) + +## Resources + +| | | | +| --- | --- | --- | +| [Fix undetectable parameters](https://msdn.microsoft.com/library/ff460245%28v=vs.140%29.aspx) | [Edit load tests](https://msdn.microsoft.com/library/ff406975%28v=vs.140%29.aspx) | [Distribute load tests](https://msdn.microsoft.com/library/dd728093%28v=vs.140%29.aspx) | +| [Create custom code & plug-ins](https://msdn.microsoft.com/library/ee923683%28v=vs.140%29.aspx) | [Analyze load test results](https://msdn.microsoft.com/library/ee923686%28v=vs.140%29.aspx) | [Posts on the ALM blog](https://social.msdn.microsoft.com/Search/en-US?query=performance%20testing&beta=0&rn=Microsoft+Application+Lifecycle+Management&rq=site:https://blogs.msdn.microsoft.com/visualstudioalm&ac=4) | +| [Manual and exploratory testing](../manual-test/index.md) | [Continuous testing](../build-release/test/index.md) | [Unit testing](https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios) | +| | | | diff --git a/docs/load-test/overview.md b/docs/load-test/overview.md new file mode 100644 index 00000000000..449789f172f --- /dev/null +++ b/docs/load-test/overview.md @@ -0,0 +1,93 @@ +--- +title: Load Testing with Visual Studio and Visual Studio Team Services +description: About Load Testing, overview of capabilities and features +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: EE700B72-6DE1-4561-BE43-50AB0842FD1F +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Load testing scenarios and capabilities + +**Visual Studio 2017 | Visual Studio 2015 | VSTS | [Previous version](https://msdn.microsoft.com/library/dn250793%28v=vs.120%29.aspx)** + +![Cloud-based Load Testing](_img/performance-testing/IC838830.png) + +Load test your app with hundreds of thousands of users using +[Visual Studio Team Services (VSTS)](http://go.microsoft.com/fwlink/?LinkId=307137&clcid=0x409&wt.mc_id=o~msft~vscom~getstarted-hero~dn906133&campaign=o~msft~vscom~getstarted-hero~dn906133&scenario=test). + +## Comprehensive testing capabilities + +* Load test web sites, apps, and APIs. + +* Author tests using [Visual Studio](run-performance-tests-app-before-release.md), + [Azure](app-service-web-app-performance-test.md), and + [Visual Studio Team Services](get-started-simple-cloud-load-test.md). + +* Quickly create load tests by specifying a [website](get-started-simple-cloud-load-test.md), referencing a + [JMeter test](get-started-jmeter-test.md) file, or + [recording and replaying your actions](record-and-replay-cloud-load-tests.md). + +* Run tests or customize them using [powerful tools in Visual Studio](run-performance-tests-app-before-release.md). + +* You can even use existing unit or functional tests to generate load. + +![Comprehensive testing capabilities](_img/performance-testing/load-test-menu.png) + +## Cloud scalable + +* Scale to hundreds of thousands of concurrent users, and generate hundreds of thousands of connections in minutes. + +* Cloud-based load testing leveraging the power of Azure is like having a whole performance lab at your fingertips. + +* Of course you can [run your load test from on-premises agents](https://docs.microsoft.com/visualstudio/test/lab-management/using-a-lab-environment-for-your-application-lifecycle) too!

        + +![Cloud scalable](_img/performance-testing/IC778490.png) + +## Generate load from multiple regions worldwide + +* Run tests from one of many global Azure datacenter locations to minimize latency + and simulate users' real-world conditions. + +![Generate load from multiple regions worldwide](_img/performance-testing/IC778317.png) + +## Deep analysis with rich diagnostics + +* Includes trace and exception logging. + +* View app performance with [real-time charts and graphs](performance-reports.md). + +* Go even further with [Application Insights](get-performance-data-for-load-tests.md), + and correlate test results with server diagnostics. + +![Deep analysis with rich diagnostics](_img/performance-testing/IC778315.png) + +## Free allocation and flexible low-cost pricing + +* Pricing is per virtual user minute (VUM) - a measure + of how long your test is and how many users the test simulates. + +* You get a generous allocation of virtual user minutes free each month. + +* See the section **Performance & Load Testing** at the bottom of the + [VSTS Pricing](https://www.visualstudio.com/team-services/pricing/) page. + +## More information + +* [Get started with load testing](getting-started-with-performance-testing.md) + +* [Run URL-based load tests with VSTS](get-started-simple-cloud-load-test.md) + +* [Run Apache JMeter load tests with VSTS](get-started-jmeter-test.md) + +* [Performance test your Azure web app under load](app-service-web-app-performance-test.md) + +If you prefer to run your tests in a local environment rather +than in the cloud, see [Use a lab environment for your devops](https://docs.microsoft.com/visualstudio/test/lab-management/using-a-lab-environment-for-your-application-lifecycle). + +> See also [Manual and exploratory testing](../manual-test/index.md), [Continuous testing](../build-release/test/index.md), [Unit testing](https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios). + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/load-test/performance-reports.md b/docs/load-test/performance-reports.md new file mode 100644 index 00000000000..1761a22b8c1 --- /dev/null +++ b/docs/load-test/performance-reports.md @@ -0,0 +1,96 @@ +--- +title: View and compare your Visual Studio load test runs +description: Get started with web performance tests - view and compare your VSTS load test runs +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: 1A1A725F-4A6A-4652-AFD1-FC7C9A248A7B +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# View and compare your load test runs + +[!INCLUDE [version-header-vs-ts](_shared/version-header-vs-ts.md)] + +You can review past load test runs or current runs started by +anyone on your team, at any time. You can also compare two +test runs to see the gain or loss in performance, and other +information. + + +## Open a load test in Visual Studio + +1. Open your load test project, open the **Load test** menu, and choose + **Load Test Manager**. + + ![Open Load Test Manager](_img/performance-reports/LoadTestManager.png) + +1. The **Load Test Manager** page shows all of the load test runs started by you + and all of your team members. + + ![View all the past and current load test runs](_img/performance-reports/LoadTestManagerView.png) + + +## Open a load test in VSTS + +* If you are running URL-based or Apache JMeter load tests, you + can see the list of all the test runs in Visual Studio Team + Services **Load test** list. + + ![List of load test runs in Visual Studio Team Services](_img/performance-reports/LoadTestViewListTS.png) + + +## Filter and select a load test + +1. Filter the list of load tests by state, date, or user who created the test run. + + ![Filter load test runs by state, date, or user](_img/performance-reports/LoadTestFilterView.png) + +1. Select a test run and open the shortcut menu (in VSTS you can + use the ![down arrow](_img/performance-reports/LoadTestListMenu-icon.png) + icon) to see details of the test run, or stop a running test. + + ![Shortcut menu commands for a test run](_img/performance-reports/LoadTestListShortcutMenu.png) + + >You can also open a test run by double-clicking it with your mouse. + + +## Compare two test runs + +1. To compare two test runs, select them in the list by + holding _CTRL_ while clicking with the mouse. Then choose + the **Compare two runs** icon on the toolbar, or open the shortcut + menu for one of the test runs and choose **Compare**. + + ![Comparing two test runs](_img/performance-reports/LoadTestSelectTwoCompare.png) + +1. In the comparison page you see the names of the two tests + and, at the top of the page, a **Summary** section that lists + the prime performance factors for each test, then the difference + from the baseline as a percentage (the color of this text + indicates a gain or loss in performance). + + ![The Summary section of the test run comparison page](_img/performance-reports/LoadTestCompareSummaryView.png) + + Use the links in the first row, the names and IDs of the test + runs, to open the detailed view of that test run. + +1. The **Charts** section of the page shows a graphical comparison + of performance for the two test runs. The default is a chart for + the response time and user load. Choose a different pair of factors + from the dropdown menu to see more performance comparisons. + + ![The Charts section of the test run comparison page](_img/performance-reports/LoadTestCompareChartsView.png) + +1. The **Test settings** section lists the primary settings + specified for the two test runs. Again, the names and IDs + of the tests are hyperlinks that open the details of that test. + + ![The Test Settings section of the test run comparison page](_img/performance-reports/LoadTestCompareTestSettings.png) + +## Next step + +> [!div class="nextstepaction"] +> [Record and replay tests](record-and-replay-cloud-load-tests.md) diff --git a/docs/load-test/record-and-replay-cloud-load-tests.md b/docs/load-test/record-and-replay-cloud-load-tests.md new file mode 100644 index 00000000000..d166bbf04cf --- /dev/null +++ b/docs/load-test/record-and-replay-cloud-load-tests.md @@ -0,0 +1,256 @@ +--- +title: Record and replay cloud-based load tests with Visual Studio Team Services +description: Get app performance data by recording and replaying cloud-based load tests when use Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: 4D07F0F0-01FE-4BC7-A338-599D54E81134 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Record and replay cloud-based load tests + +[!INCLUDE [version-header-ts](_shared/version-header-ts.md)] + +You can record and then replay cloud-based load tests on your web app or website directly +using an HTTP Archive file and Visual Studio Team Services (VSTS). + +Before you start: + + + +* This feature is currently a preview version. + During the preview period it is available to all users except + Stakeholders. You can use your monthly free 20,000 + virtual user minutes (VUM) allowance to try it. + If you want to use load testing beyond this, you can + [set up billing](../billing/set-up-billing-for-your-account-vs.md) + for your VSTS account. + +* [Create your VSTS account](https://www.visualstudio.com/products/visual-studio-team-services-vs), + if you don't have one already. + +## About HTTP Archive testing + +If you have used cloud-based load testing before, you may be +familiar with the ability to get performance information on your +app when under load by using the VSTS web +portal. It's a great way to: + +* Quickly run a URL-based load test for your app; you just need to enter the app URL. +* Easily learn about the basic load test features such as + running tests from different locations around the world, + viewing and analyzing results in the browser, analyzing + the test errors, and more. + +At the other end of the spectrum is using Visual Studio +Enterprise to create and run load tests. While you can +certainly create a URL-based load test using Visual Studio +Enterprise, the real advantage is the ability to write +tests that mimic several end-to-end user scenarios. These may +include a distributed mix of tests, the ability to use data +to drive your test, and even use of the rich extensible framework +to create plugins necessary to suit complex testing requirements. + +**HTTP Archive testing** also allows you to create load tests +that mimic end-to-end user scenarios, but with fewer +capabilties than the rich Visual Studio +Enterprise load tests. However, by using HTTP Archive files +you can represent user scenarios that: + +* Support multiple URLs +* Send requests other than just a simple GET +* Simulate a complete user scenario + +If you develop or test web apps, you may already be familiar with the +[F12 developer tools](https://developer.microsoft.com/en-us/microsoft-edge/platform/documentation/f12-devtools-guide/) +in your browser. These enable you carry out a range of tasks from +inspecting the HTML, CSS, and JavaScript, to viewing the traffic between +the browser and the server. You can use this ability to view traffic +between the browser and the server to create an HTTP Archive load test +for your scenario. + +>The example shown here uses the +[Google Chrome](https://www.google.co.uk/chrome/browser/desktop/index.html) +browser, but you can use the browser of your choice such as +Edge, Internet Explorer, or +[Firefox](https://www.mozilla.org/en-US/firefox/new/). For example, +[this video](https://msdnshared.blob.core.windows.net/media/2016/05/HARCreationVideo.mp4) +shows how to create an HTTP Archive with different browsers and with +[Fiddler](http://www.telerik.com/fiddler). + +## Create an HTTP Archive file + +Follow these steps to create an HTTP Archive (**.har**) file +using your browser. + +1. Launch the browser and press **F12** to open the developer tools. + +1. Ensure that the browser traffic is being recorded. For example, + if you are using Chrome, check that: + + - The recording button is "on" (the round button is red). + + - The **Preserve log** checkbox is set to ensure that the complete + sequence of URLs for your scenario is captured. If you do not + set this option, network activity recordings are discarded whenever + you reload the current page or load a different page - which means + that an end-to-end scenario may not be captured. + + ![Configuring Chrome to record HTTP traffic](_img/record-and-replay-cloud-load-tests/01-chrome-settings.png) + +1. Exercise your user scenario. Enter the URL in the address bar + and go through the sequence of actions a typical user would + follow. For example, in a retail store site, the user would + browse for a product, enter a product name in the search box, + choose links of interest, view the product information, and + (hopefully) place an order. + + >As you go through these steps, you will see that all the + traffic between the browser and the server is shown in the + **Network** tab of the developer tools. + +1. After you have finished recording your user scenario, save the + URLs as HTTP Archive (**.har**) file. In Chrome, do this by + opening the shortcut menu for the URL list and choosing + **Save as HAR with content**. Enter a name for the file + and save it on your computer. + + ![Saving the HTTP traffic as a .har file](_img/record-and-replay-cloud-load-tests/02-save-as-har.png) + + You can also create an HTTP Archive using tools other + than a browser. For example, [Fiddler](http://www.telerik.com/fiddler) + is a popular tool for viewing and troubleshooting traffic. + Use Fiddler to record traffic in the same way and export sessions + as an HTTP Archive. + + ![Creating a .har file in Fiddler](_img/record-and-replay-cloud-load-tests/03-fiddler-export.png) + +## Create a load test using the HTTP Archive file + +Follow these steps to create a load test in the VSTS +web portal using an HTTP Archive (**.har**) file. + +1. Sign in to your VSTS account (```https://{youraccount}.visualstudio.com```). + +1. Go to the **Load Test** hub, open the **+ New** + menu and choose **HTTP Archive based test**. + + ![Selecting a HTTP archive test](_img/record-and-replay-cloud-load-tests/05-start-http-archive-import.png) + +1. In the **Import HTTP Archive file** dialog, select the **.har** + file that you recorded in the earlier steps and choose **OK**. + + ![Selecting the HTTP archive file](_img/record-and-replay-cloud-load-tests/06-select-har-file.png) + + The HTTP Archive file is uploaded and read, the URLs are + extracted, and all the details (the HTTP method, headers, + querystring parameters, form post parameters, and more) are + displayed. You can add URLs and edit the existing URLs to provide a friendly name + for each request in the center **Add URL** pane. This will + help you easily identify each request. + + ![Uploading the HTTP archive file](_img/record-and-replay-cloud-load-tests/07a-har-import.png) + + The right-hand section of this page shows details of the selected + request URL. + + ![Details of the selected request URL](_img/record-and-replay-cloud-load-tests/07b-har-import.png) + + >Some dynamic information such as ASP.NET viewstate, + event validation, and more that varies from session + to session, and must be retained in order for a + sequence of requests to succeed. These values are automatically + identified and extracted from a request and correlated + in any subsequent requests that use them. + +1. Open the **Settings** tab to view and change any + load test settings. + + ![Editing the test settings](_img/record-and-replay-cloud-load-tests/07c-har-import.png) + +1. Enter a name for your load test, then choose **Save**. + + ![Saving the test settings](_img/record-and-replay-cloud-load-tests/07f-har-save-test.png) + +1. Choose the **Run test** link to execute your load test. + A progress bar shows the current status of the test run. + + ![Running the test](_img/record-and-replay-cloud-load-tests/07d-har-import.png) + +1. As the load test runs, you see a rich set of metrics + that indicate how your app is performing under load. + When the test is complete, you can explore the results. + + ![The test results](_img/record-and-replay-cloud-load-tests/07e-har-import.png) + + For more information about the results and reports, see + [URL-based load testing with VSTS](get-started-simple-cloud-load-test.md#viewresults). + + +## Troubleshooting + +As you run a load test, requests are sent to your application in the sequence you specified. +Ideally, you want a clean run with all requests succeeding. However, requests may fail because +of issues in your app or in your test. The load test results view offers two sections to help you +identify these errors: **Diagnostics** and **Logs**. + +The **Diagnostics** section provides insights into any test errors and important status messages +from the load test service that occurred during the load test run. For failing requests, you can +see the error type, the specific error subtype, the number of times the failure occurred, and more. + +![Viewing diagnostics information](_img/record-and-replay-cloud-load-tests/08a-diagnostics-tab.png) + +This page also lists the requests that were tested, and +the test you executed. + +![The list of request URLs dn tests](_img/record-and-replay-cloud-load-tests/08b-diagnostics-tab.png) + +The **Logs** section gives you access to logs from all of the load-generating agents. If requests +in your test are failing, these logs will help you figure out what went wrong. The test logs are +available in HTTP Archive (**.har**) format, the same format as you used to record the user scenario +and create the test. You can download these logs and view them in a HAR viewer such as +[Fiddler](http://www.telerik.com/fiddler), [HAR Analyzer](https://toolbox.googleapps.com/apps/har_analyzer/), +or any other viewer that you prefer. You can then inspect the details of each request +and its response in order to troubleshoot any failures in your test. + +This screenshot shows how you can import the log into Fiddler. + +![Importing the HTTP archive into Fiddler](_img/record-and-replay-cloud-load-tests/11-fiddler-import.png) + + +### Export the test to Visual Studio + +Sometimes, one or more requests will fail every time they are executed. If you have eliminated +the obvious causes such as correctness of the URL, the target URL not being reachable, or any +application issues, requests may be failing because the application uses dynamic parameters +(such as session ID, cookies, values set in hidden fields such as ASP.NET VIEWSTATE, and others) +in these requests. When you create a test using an HTTP Archive, the following cases are handled +automatically when the test is executed: + +* Dynamic parameter values set in cookies. +* Dynamic parameter values set in hidden fields, such as ASP.NET VIEWSTATE and EVENTVALIDATION. + +However, dynamic parameters may also appear elsewhere in requests such as query strings or form post +collections. At present, the load test mechanism does not support these types of dynamic parameters. +If you find that this is the cause of your test failures, you can export and run the test in Visual Studio. + +![Exporting the test to Visual Studio](_img/record-and-replay-cloud-load-tests/12-export-to-vs.png) + +This export mechanism downloads a Visual Studio load test project containing the required web performance +test and load test for your application. See +[how to fix dynamic parameters using Visual Studio](https://msdn.microsoft.com/library/ff460245(v=vs.140).aspx). +Sean Lumley's [blog post](https://blogs.msdn.microsoft.com/slumley/2007/04/10/how-to-debug-a-web-test/) +has a detailed example of how dynamic parameters can be identified by inspecting the test and test results. + +## See also + +* [FAQs for load testing](reference-qa.md#recordreplay) +* [Load test with Visual Studio](getting-started-with-performance-testing.md) +* [Load test with Azure portal](app-service-web-app-performance-test.md) +* [Tutorial: Run load tests before release](run-performance-tests-app-before-release.md) +* [Run Apache JMeter load tests with VSTS](get-started-jmeter-test.md) +* [Analyze load test results using the Load Test Analyzer](https://msdn.microsoft.com/library/ee923686.aspx) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/load-test/reference-qa.md b/docs/load-test/reference-qa.md new file mode 100644 index 00000000000..c4a26f5480d --- /dev/null +++ b/docs/load-test/reference-qa.md @@ -0,0 +1,738 @@ +--- +title: FAQs for load testing +description: FAQs for load testing topics for Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.assetid: 1A993338-0EEE-4C54-BA07-F9E54312BDE6 +ms.manager: douge +ms.author: ahomer +ms.date: 07/04/2017 +--- + +# FAQs for load testing + +[!INCLUDE [version-header-vs-ts](_shared/version-header-vs-ts.md)] + + +## General + +### Q: How do I learn more about Cloud-based Load Testing? + +**A**: Watch this video, or check out the +[Cloud-based Load Testing blog](https://blogs.msdn.microsoft.com/devops/?s=clt). + + + +### Q: Do I need anything to load test in the cloud with Visual Studio Ultimate 2013? + +**A**: Yes, you'll need Update 4 or Update 5 installed. [Download this version](https://www.visualstudio.com/downloads/download-visual-studio-vs). + +### Q: My Visual Studio trial period ended, but I still want to run load tests. + +**A**: To continue load testing after the trial, you'll need an active and valid +Visual Studio Enterprise 2017 or 2015 license, or a Visual Studio Ultimate 2013 license. +[Learn more about licensing](https://www.visualstudio.com/products/how-to-buy-vs). + +### Q: Can I run cloud-based load tests on any app, even behind a firewall? + +**A**: Yes, you can load test apps or sites that are only available to your company, +like internal or pre-release apps, staging or preproduction deployments. To learn more, see +[Testing private and intranet applications using cloud-based load testing](https://blogs.msdn.microsoft.com/visualstudioalm/2016/08/23/testing-privateintranet-applications-using-cloud-based-load-testing/). + +Or, you can +[run a load test locally using Visual Studio](../load-test/run-performance-tests-app-before-release.md). + +### Q: What are virtual users? + +**A**: Virtual users create load by accessing your app or web site all at the same +time during your test run. That way, you can test performance under more realistic +or projected conditions. Virtual users are simulated by test agents. + +### Q: What are test agents? How do they relate to my test run? + +**A**: Test agents are computing resources, like CPU, memory, and network, +that generate load by simulating virtual users. Test agents use agent cores +to create virtual users. Each core creates at least 1 virtual user. + +For load test runs in Visual Studio Team Services (VSTS) with the Visual Studio IDE, +you can specify the number of cores to use. For example, +if you get errors when you run your test, +you might have to increase the number of cores. + +Otherwise, your tests and the number of virtual users that +you specify determine how many cores and agents are used. + +### Q: Where do I specify the number of cores for runs in VSTS with the Visual Studio IDE? + +**A**: You can do that here: + +![Update the agent count total cores](_img/LoadTestAgentsCores.png) + +What do the values mean? + +| Cores | Agents | +| --- | --- | +| 0 | (Default) The number of cores is based on the number of virtual users that you specify for your test. | +| 1 | Your test run will use 1 agent. | +| 2 - 10 | Each agent will always use 2 cores. | +| 11 - 40 | Each agent will always use 4 cores. | +| 41 - 200 | Each agent will always use 8 cores. | + +The maximum number of cores for each test run is 200. +If your test run needs more cores, you can run up to 10 load tests at the same time. + +The minimum number of virtual users per agent core is 1. +If your load test requires more cores, contact +[vsoloadtest@microsoft.com](mailto:vsoloadtest@microsoft.com). + +The number of agents also depends on your text mix (web performance test or unit test). +If you have only web performance tests, we suggest using between 600 and 2,500 virtual users for every two cores. +If you have unit tests, the agent count depends on what your unit tests do. +This means you will have to test if you have enough agents by +running a shorter duration load test run or use +[goal-based load testing](http://blogs.msdn.com/b/visualstudioalm/archive/2015/08/03/announcing-support-for-goal-based-load-pattern-in-cloud-based-load-tests.aspx). + + +### Q: What are virtual user minutes (VUMs)? How many minutes will my load test use? + +**A**: If your test run uses 25 or more virtual users per core, +then VUMs = (max virtual user load for your test run) * (test run duration in minutes). + +If your test run uses fewer than 25 users per core, then VUMs = +(number of cores) \* (25 virtual users per core) \* (test run duration in minutes). + +The minimum values used to calculate VUMs are 25 virtual users and 1 minute. +If your test run values are smaller than the minimum values, +then those values are rounded up to meet the minimums. +For example, if your test run specifies 20 virtual users for 30 seconds, +then your test run will actually run with 25 virtual users for 1 minute = 25 VUMs, +not 15 VUMs. + +Also, test run duration is in minutes, not seconds. For example, +if your test run duration is 5 minutes and 15 seconds, +then that duration is rounded up to 6 minutes. + +A minimum of 250 virtual user minutes, including the warm-up period, is deducted from your account for: + +* Completed runs, based on the full duration of the run +* Aborted runs, based on the elapsed run duration + +For runs that end in an error state, no virtual user minutes will be deducted from your account. + +Note that there is an additional charge for [resource retention](#retain-resources). + +To check how many virtual user minutes that your VSTS account +has used or has remaining, go to your VSTS account home page +(```https://{youraccount}.visualstudio.com```). + + +### Q: Are there any limits when running the cloud-based load tests? + +**A**: Yes. Based on where you're running the test, each test run duration limit is: + +* Visual Studio IDE: 48 hours +* VSTS Load test hub: + - URL-based load tests: 48 hours + - JMeter load tests: 4 hours +* Azure portal: 1 hour + +### Q: Do other load tests run on the same virtual machines that host my agents? + +**A**: No, the virtual machines that host your agents host only one load test run. + +### Q: Are there load test features that aren't supported when you run load tests in the cloud? + +**A**: These features aren't currently supported: + +* Network mix property +* Agent to Use in test settings - use the core count property instead +* SQL Trace properties in run settings +* IP switching + + +### Q: Can I speed up my load testing cycle by retaining the resources the tests use? + +**A**: Yes, you can reduce the delay while your load test starts each time during a typical +test > fix > retest scenario by retaining the resources for an appropriate period +after each test completes, instead of having to wait for them to be acquired and +provisioned for each test run. In Visual Studio Update 3 +and later, specify the retention time in your run settings properties. + +![Specify resource retention time in Visual Studio 2017 and Visual Studio 2015 Update 3 and higher](_img/resource-retain-time01.png) + +In earlier versions of Visual Studio, add a context parameter named **ResourcesRetentionTimeInMinutes** +to your run settings. + +![Specify resource retention time in Visual Studio 2015 pre Update 3](_img/resource-retain-time02.png) + +Note: + +* The maximum resource retention period is 4 hours (240 minutes). + +* The resources will be released after the specified period if you do not start another +test during that period. When you start another test, the resource retention period you +specify in that test will be applied - effectively allowing you to extend the retention +period. You can specify a different retention period each time you start a test. + +* There a small additional charge applied when you use this feature. In addition to +the usual VUMs that your load test consumes, a surcharge of 5 VUMs per core is applied +for the duration of the run. So if you retain 20 cores for 10 minutes, an additional +1000 VUMs (5 x 20 x 10) will be charged. The status messages display this information. + +* Resource retention is not available for Apache JMeter tests at the present time. + +For more details, see [this blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/07/18/speed-up-cloud-load-test-execution-by-retaining-resources-for-quick-consecutive-runs/). + +---------- + + +## Visual Studio load testing + +### Q: How can I increase the capacity of my load tests? + +**A**: You can use the [Cloud-based Load Testing service](https://go.microsoft.com/fwlink/?LinkID=317257), so you can run your tests across multiple virtual machines in the cloud. + + +### Q: How many virtual users can I configure in my load test? + +**A**: In the full version of Visual Studio Enterprise, the number of virtual users is unlimited. In Visual Studio Enterprise trial version, the virtual user count is limited to 250. + +### Q: Can I analyze load tests that ran previously? + +**A**: Yes, to open and manage those results, click ![Manage results toolbar button](_img/run-performance-tests-app-before-release/manage-results.png) in the load test editor. You can have multiple tests open at the same time to compare runs, and [create trend analysis reports](https://msdn.microsoft.com/library/dd728091%28v=vs.140%29.aspx) to compare them. + +### Q: Is there a difference between what I can analyze during a running test versus a completed test? + +**A**: Yes, these are the differences: + +* **Performance counters** A smaller subset of the performance counter data is available while a test is running. + +* **Views** When the load test run has completed, the [Summary View](https://msdn.microsoft.com/library/ms404677%28v=vs.140%29.aspx#SummaryView) and [Details View](https://msdn.microsoft.com/library/ms404677%28v=vs.140%29.aspx#DetailsView) are available. + +### Q: Can load tests use other test types in their test mix besides web performance tests? + +**A**: Yes, you can include unit tests and [coded UI tests](https://msdn.microsoft.com/library/dd286652.aspx). + +### Q: Can virtual users simulate pausing between test steps? + +**A**: Yes, you can [specify think times](https://msdn.microsoft.com/library/dd997697.aspx) to simulate the time spent by a user on a web page. + +### Q: Why should I use Cloud-based Load Testing? + +**A**: If you don't want to set up machines for load testing, or you don't have available resources, you can use the [Cloud-based Load Testing service](https://go.microsoft.com/fwlink/?LinkID=317257). It sets up virtual machines in the cloud that will run your load test. Note that your web site must be publicly available on the internet for load testing using VSTS to access it. + +---------- + + +## Azure load testing + +### Q: Why can't I see my existing VSTS account to run load tests? + +**A**: To use a VSTS account for running load tests from the Azure +portal, one of the following criteria must be satisfied: + +* The account is backed by Azure Active Directory, + [Has an Azure subscription](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-how-subscriptions-associated-directory) + is linked to it, and the user is a member of the linked Azure subscription. + +* The account is backed by [Azure Active Directory](https://docs.microsoft.com/en-us/azure/active-directory/) + and the user is an owner of the account. + +### Q: Is there a limit on how long I can run a test? + +**A**: Yes, you can run your test up to an hour in the Azure Portal. + +### Q: How much time do I get to run performance tests? + +**A**: After public preview, you get 20,000 virtual user minutes (VUMs) +free each month with your VSTS account. +A VUM is the number of virtual users multipled by the number +of minutes in your test. If your needs exceed the free limit, +you can purchase more time and pay only for what you use. + +### Q: Where can I check how many VUMs I've used so far? + +**A**: You can check this amount in the Azure Portal. + +![Go to your VSTS account](_img/app-service-web-app-performance-test/azure-np-vso-accounts.png) + +![Check VUMs used](_img/app-service-web-app-performance-test/azure-np-vso-accounts-vum-summary.png) + +### Q: What is the default option and are my existing tests impacted? + +**A**: The default option for performance load tests is a manual test - +the same as before the multiple URL test option was added to the portal. +Your existing tests continue to use the configured URL and will work as before. + +### Q: What features not supported in the Visual Studio Web Test file? + +**A**: At present this feature does not support Web Test plug-ins, data +sources, and extraction rules. You must edit your Web Test file to remove +these. We hope to add support for these features in future updates. + +### Q: Does it support any other Web Test file formats? + +**A**: At present only Visual Studio Web Test format files are supported. +We'd be pleased to hear from you if you need support for other file formats. +Email us at [vsoloadtest@microsoft.com](mailto:vsoloadtest@microsoft.com). + + +### Q: What else can I do with a VSTS account? + +**A**: To find your new account, go to ```https://{accountname}.visualstudio.com```. +Share your code, build, test, track work, and ship software - all in the cloud +using any tool or language. Learn more about how [Visual Studio Team Services](https://www.visualstudio.com/products/what-is-visual-studio-online-vs) +features and services help your team collaborate more easily and deploy continuously. + +### Q: Can I get more detailed profiler information? + +**A**: Yes, see [Profiling live Azure web apps with Application Insights](https://docs.microsoft.com/en-us/azure/application-insights/app-insights-profiler). + +---------- + + +## Setting up tests + +### Q: Can I have other test types, besides web performance tests, in a load test mix? + +**A**: Yes, you can include unit tests and coded web tests, but not coded UI tests. + +### Q: How long do I have to wait until I can run my load test after creating a VSTS account? + +**A**: It can take between 5 seconds to 3 hours until you get permissions +to run the load test in the cloud. If you previously created your VSTS account, +you might be able to run the load test right away. + +### Q: How do I provide different values to the same test? + +**A**: Use a .csv file or an Excel spreadsheet. Using SQL Server is currently not supported. +Learn how to [supply values to your test](https://msdn.microsoft.com/library/ms243142.aspx). + +### Q: Help, I'm having problems with my agents! + +**A**: You must have at least 1 virtual user per core. If you're getting status +messages that an agent stopped working due to load, +or if the downloaded report shows high CPU use for an agent, +try increasing the number of agents that you're using. + +If you need more help, contact +[vsoloadtest@microsoft.com](mailto:vsoloadtest@microsoft.com) + +### Q: Where are the test agents used for my load test runs located? + +**A**: When you set up your load test run, you can select the test agent location from any supported Azure datacenter, starting with Visual Studio Ultimate 2013 Update 5 and Visual Studio Enterprise 2015. +After your run finishes, your results are stored in the same location as your VSTS account. + +![Edit load test to set location](_img/CLT_LoadTestSetLocation.png) + +If you're using an earlier version of Visual Studio, +the agent location is based on the location that you chose +when you created your VSTS account. + +| VSTS Account Region | Test Agent Azure Datacenter | +| :---------------------------------- | :-------------------------- | +| South Central US | East US 2 | +| West Europe | West Europe | + +### Q: Can virtual users simulate pausing between test steps? + +**A**: Yes, you can specify think times. Select a scenario in your load test and +edit the think time in the Properties view. + +### Q: Where can I get more information about simulating real-world loads? + +**A**: Learn more about how to specify +[web performance test properties, load test scenario properties, and run settings properties](https://msdn.microsoft.com/library/ff406975.aspx). + +### Q: Can I run load tests locally and in the cloud from the same project? + +**A**: Yes, your project can have multiple test settings files. Add another +test settings file to your Solution Items folder. + +![Right-click test settings file, click Active Load and Web Test Settings](_img/LoadTestMultipleTestSettings.png) + +Now you can use one settings file to run your tests locally and the +other settings file to run your load tests in the cloud. To switch between them, +open the file's shortcut menu, then select the test settings file that you want to use. + +### Q: How do I install certificates or software on agents that run my load tests in the cloud? + +**A**: In the test settings, you can use deployment options and a setup script. +In the Deployment window, add the .exe or other files that you want to deploy on the agents. +To install those files on the agents, use the setup script. + +All the items deployed on the agents are copied to a directory on the agent. +You can access the directory location by using %DeploymentDirectory% in the setup and cleanup script. +For example, if you want to install WebDeploy on the agent machine, +add WebDeploy_x64_en-US.msi to Deployment window. The setup.cmd will look like this: + +`%DeploymentDirectory%\WebDeploy_x64_en-US.msi /passive` + +---------- + + +## Apache JMeter tests + +### Q: What are the supported JMeter versions? + +**A**: The latest supported version of Apache JMeter is version 3.2. + +### Q: Which samplers are supported? + +**A**: Currently, only HTTP samplers are supported. + +### Q: I want to supply properties to JMeter. How do I do that? + +**A**: Add the properties you need to a **user.properties** +file. Upload it using the **Supporting files** parameter +when you set up the test, and it will be applied when the load test runs. + +### Q: Are custom listeners supported? + +**A**: Custom listeners are not currently supported. + +---------- + + +## Running and monitoring load tests + +### Q: Can I use mstest to run load tests with VSTS? + +**A**: Yes, you can in VSTS, and in TFS 2015 and later. +For more information, see +[this blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2015/08/24/cloud-load-test-support-in-mstest-exe-command-line-and-xaml-builds/). + +### Q: Can I debug a load test while it's running in the cloud? + +**A**: Yes, you can do this when you use Visual Studio Enterprise 2015 or later. +[Learn more](https://blogs.msdn.com/b/visualstudioalm/archive/2015/02/06/using-advanced-diagnostics-to-debug-issues-in-cloud-load-test.aspx). + +### Q: How can I check the status of the Cloud-based Load Testing service? + +**A**: You can view the service status at the top of the +[VSTS support page](https://www.visualstudio.com/support-overview-vs) +and on our [service blog](http://blogs.msdn.com/b/vsoservice/). +You can also subscribe to alerts for service status by following +[this post in our support forum](https://social.msdn.microsoft.com/Forums/vstudio/74fdaf92-e293-4d71-bd63-cfcc8a9dcd60/subscribe-to-alerts-about-team-foundation-service-and-elastic-load-service-status). + +### Q: What are the possible load test run states? + +**A**: When you run load tests with VSTS, the test run states are: + +* **In-Progress**: The test run is currently running in the cloud. +* **Completed**: The test run was completed successfully. +* **Aborted**: The test run was stopped because the user clicked the stop button. +This state can also result from issues related to your load test, +such as issues with your test scripts. +* **Error**: The test run was stopped due to an error with the service itself. +For example, there might be an infrastructure issue in the service, +and it can't continue to run your test. This is not an issue caused +by your load test or test scripts. + +### Q: Where is my load test report stored after I download it? + +**A**: Your downloaded reports are stored in a local SQL Server Express database. +You can +[change the default location](http://msdn.microsoft.com/library/ms318550.aspx), +if you want. You can also store all the reports together for everyone by changing +the location for each user to the same database. + +SQL Server Express works best for storing test results from a trial run. +For better performance as you download more reports, use SQL Server. +[Learn more](https://msdn.microsoft.com/library/ms182600.aspx) + +### Q: How should I view test logs after downloading the test results locally? + +**A**: Due to a known issue, you must currently use this workaround: + +1. Start Notepad with administrator privileges. +1. Open devenv.exe.config file. You can usually find this file at: + C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE +1. Change the value of bindingRedirect to "8.0.0.0-14.0.0.0" + + ```xml + + + + + ``` + +---------- + + +## Recording and replaying tests + +### Q: Can I simulate actions from different users and data-drive my test? + +**A**: No, this capability is planned but is not available at present. + +### Q: Does the feature automatically identify and correlate all dynamic information from all requests? + +**A**: No, this capability is currently supported only for the ASP.NET information +such as VIEWSTATE, EVENTVALIDATION, and similar values. Your request may fail if it +contains other dynamic information. In these cases, you should +[run the tests using Visual Studio](record-and-replay-cloud-load-tests.md#exportvs). + +### Q: Can I test REST APIs using the functionality provided by the VSTS portal? + +**A**: Yes, you can use the URL-based test to test REST APIs. Enter the request URL of your +API and the details required to create your test. + +### Q: I want to see what's possible in Visual Studio after I export the test. Do I need to have Visual Studio Enterprise edition? + +**A**: No, you can use the 90-day trial version of Visual Studio Enterprise edition. This +allows you to run cloud-based load tests. See +[this blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/05/09/trying-out-the-cloud-load-testing-service-using-visual-studio-enterprise-trial/). + +---------- + + +## Application Insights + +### Q: Can I get more detailed profiler information? + +**A**: Yes, see [Profiling live Azure web apps with Application Insights](https://docs.microsoft.com/en-us/azure/application-insights/app-insights-profiler). + +### Q: Can I view data from other app monitoring tools when load testing in the cloud? + +**A**: No. + +### Q: Can I increase how often data is collected? + +**A**: No, this is currently a fixed frequency of one minute. + +### Q: I don't see any counters even after waiting a few minutes. What's wrong? + +**A**: Go to Application Insights and check that you can view performance data +for your app there. If you see data collected there, report your issue to +[vsoloadtest@microsoft.com](mailto:vsoloadtest@microsoft.com). + + +### Q: Why do I get an "Unable to connect to VSTS due to network failure" error when trying to add apps using the Get Performance Data from Application Insights menu command? + +**A**: This can happen because: + +* No apps are configured to push analytics data to Application Insights. See + [Get started with Visual Studio Application Insights](https://azure.microsoft.com/en-in/documentation/articles/app-insights-get-started/). + Also check that you can see the apps in **Application Insights** in the + Azure portal, as shown here: + + ![Checking that the apps are listed in the Azure portal](_img/get-performance-data-for-load-tests/get-load-test-insights-05.png) + +* The Azure Resource Manager access token has expired. The token is valid for 12 hours + in the context of VSTS. Sign out of your VSTS account and then sign + in again to refresh the token. + +* Azure Active Directory is not enabled for your VSTS account. + See [Access VSTS with Azure Active Directory](../accounts/access-with-azure-ad.md). + +If none of the above works, contact us at [vsoloadtest@microsoft.com](mailto:vsoloadtest@microsoft.com). + +---------- + + +## Troubleshooting + +### Q: What do I do if Visual Studio stops responding when I try run a load test in the cloud? +**A**: To resolve this issue, see [Known issues with load testing](https://blogs.msdn.com/b/visualstudioalm/archive/2013/11/07/known-issues-with-load-testing-in-visual-studio-2013.aspx). + +### Q: How do I record a web performance test with Internet Explorer 11? + +**A**: If the web test recorder is not active when you try and record your +web test with Internet Explorer 11, +see [Using Internet Explorer 11 and not able to record a web performance test](https://blogs.msdn.com/b/visualstudioalm/archive/2013/09/16/using-internet-explorer-11-and-not-able-to-record-a-web-performance-test-successfully.aspx) +to resolve the issue. + +### Q: How do I view errors and warnings that happen when my load test is running in the cloud? + +**A**: Status messages and test errors are reported while your load test runs. +Status messages give you details about the load test run itself, +such as when a connection to the results database is lost. +Test errors relate to the test. View both these messages from the +Details tab on the progress graphs. + +![View status and error messages](_img/LoadTestInProgress.png) + +### Q: I get an error when I try to import downloaded test results. What do I do? + +**A**: If the error states that the connection's current state is closed, +you can set the amount of time that a connection waits before timing out. + +Set the ConnectTimeout or Connection Timeout keywords in the connection string. +Do not set a value of 0 as a timeout in a ConnectionString because the +connection will keep trying to connect indefinitely. + +### Q: Why can't I use more than 250 virtual users or plug-ins when I have Visual Studio Ultimate or Visual Studio Enterprise? + +**A**: If this happens, you must take the Visual Studio +product key from your MSDN subscription and use the "Change my Product License" +option on the Product Information page. You must do this on every machine where you want +to run load tests using VSTS. To get the product key, +[visit this site](https://msdn.microsoft.com/subscriptions/keys/). + +### Q: Why did the REST API calls that I use stop working? + +**A**: Starting on 26th November 2014, you must add the version +information to your REST API calls. If your call fails with a +**VssVersionNotSpecifiedException** exception, +you must include **?api-version=1.0-preview.1** +in your REST API calls. To do this, see +[Get started with the REST APIs](../integrate/get-started/rest/basics.md). + +### Q: I noticed that user code fails to execute if it depends on the test names. Are test names changed when run against the service? + +**A**: When the test runs using VSTS, +test names in load tests are converted to lower case. +Any string match done on a test name by user code should +ignore the case or convert test names to lower case. + +### Q: How do I enable client-side logs to help troubleshoot issues with load tests run in the cloud? + +**A**: Edit devenv.exe.config with a text editor. You can usually find file at: + +"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE" + +1. Add this line inside the <appSettings< section: + + ```xml + + ``` + + Where XXX can be any of the following: + + * **all** - logs all messages + * **off** - stops logging any messages + * **critical** - only logs critical messages + * **error** - only logs error and critical messages + * **warning** - logs error, critical and warning messages (default) + * **information** - logs error, critical, warning and info messages + * **verbose** - logs error, critical, warning, info and verbose messages + +1. Add this section to the bottom of the devenv.exe.config file, + just above the closing tag. You can specify the path for the log + file by changing the initializeData value. + + ```xml + + + + + + + + + + + + ``` + +1. Restart Visual Studio and reproduce the issue. + You can then review the log file or share it with Support. You can find the log file at `%Temp%\ELSClient\`. + +### Q: Why don't I see the individual timing values in the Load Tests Results Store? + +**A**: For Visual Studio 2013 Update 4, Visual Studio Enterprise 2015, +and later versions, the default value for the TimingDetailsStorage property +was changed from AllIndividualDetails to None. If you want to collect the individual timings, +you must specifically set TimingDetailsStorage property to be AllIndividualDetails. +See [Load Test Run Settings Properties](https://msdn.microsoft.com/library/ff406976.aspx). + +---------- + + +## Errors + +### Q: My test run failed with these errors. What do I do? + +**A**: If you get one of these errors: + +* VS1550064 +* VS1550072 +* VS1550078 +* VS1550081 +* VS1550082 +* VS1550083 + +[Contact VSTS Support](https://www.visualstudio.com/team-services/support). +You will have to give them your test run id. + +### Q: My run was aborted because the .loadtest xml file could not be parsed. What do I do? + +**A**: You might get these errors if you manually edit the .loadtest xml file: + +* VS1550084 + +Open the file and revert any changes that you added. Rerun the load test. The run should complete successfully. + +### Q: Too many applications or counters were selected to run for my load test. What do I do? + +**A**: You might get these errors if you manually edit the .loadtest xml file: + +* VS1550026 +* VS1550027 + +Open the file and revert any changes that you added. Rerun the load test. The run should complete successfully. + +### Q: No active load test settings were found in my load test. What do I do? + +**A**: You might get this error if you close the load test wizard without completing it: + +* VS1550030 + +To fix this problem, create another load test. Delete the failed test run. + +### Q: My load test got an error when it started or was aborted during the run. What do I do? + +**A**: Generally, these problems happen due to issues with the cloud-based load testing service. Just try and run your load test again. If these problems still happen, contact VSTS support. You will have to give them your test run id. + +### Q: Where can I find information about other errors? + +**A**: See [Visual Studio Cloud Load Testing error codes](https://blogs.msdn.com/b/visualstudioalm/archive/2014/10/21/visual-studio-cloud-load-testing-amp-error-codes.aspx) to find more details about other errors and their resolutions, where applicable. + +---------- + + +## Links to useful resources + +**Tutorials** + +* [All about Load Test planning](https://blogs.msdn.microsoft.com/geoffgr/archive/2014/08/22/all-about-test-planning-part-1-introduction.aspx) +* [Simulating expected load - how to model real world load in CLT](https://blogs.msdn.microsoft.com/edglas/archive/2010/04/02/simulating-peak-load-with-vs-load-tests.aspx) +* [Analyzing Load Test results](https://blogs.msdn.microsoft.com/visualstudioalm/archive/2014/06/10/analyzing-load-test-results-and-everything-you-wanted-to-know-about-load-test-reports.aspx) +* [Data driven Load Tests with VSO and SQL Azure](https://blogs.msdn.microsoft.com/visualstudioalm/archive/2014/08/26/data-driven-load-tests-using-visual-studio-online-and-sql-azure.aspx) +* [Driving Unit Tests from Cloud-based Load test](https://blogs.msdn.microsoft.com/visualstudioalm/archive/2014/08/01/driving-unit-tests-from-cloud-load-test.aspx) +* [Parameterizing tests to run in different environments](https://blogs.msdn.microsoft.com/edglas/archive/2010/02/16/parameterizing-tests-to-run-in-different-environments.aspx) +* [A Web Performance Test primer](https://blogs.msdn.microsoft.com/edglas/archive/2010/03/24/web-test-authoring-and-debugging-techniques-for-visual-studio-2010.aspx) +* [Managing Load Test results](https://blogs.msdn.microsoft.com/slumley/archive/2007/06/14/managing-load-test-results.aspx) +* [Getting 90th and 95th percentile results in a Load Test](https://blogs.msdn.microsoft.com/slumley/archive/2007/07/06/how-to-get-90th-and-95th-percentile-information-as-well-as-timing-details-for-every-page-test-and-transcation.aspx) +* [Understanding Load Test results schema](https://blogs.msdn.microsoft.com/billbar/archive/2006/02/10/what-is-the-data-in-the-vsts-load-test-results-store.aspx) +* [Load Test plug-ins](https://blogs.msdn.microsoft.com/slumley/archive/2009/04/10/load-test-plug-ins.aspx) +* [Generating Excel reports for your Load Test runs](https://blogs.msdn.microsoft.com/slumley/archive/2009/05/22/dev10-feature-load-test-excel-report-integration.aspx) +* [Generating Run Comparison report in Excel](https://blogs.msdn.microsoft.com/slumley/archive/2009/11/07/vsts-2010-feature-load-testing-run-comparison-report-in-excel.aspx) +* [Understanding Virtual User Activity visualization](https://blogs.msdn.microsoft.com/slumley/archive/2009/06/09/vsts-2010-feature-load-test-virtual-user-activity-visualization.aspx) +* [Using fiddler to create web tests](http://www.bugtrap.co.uk/2010/06/using-fiddler-with-visual-studio-team.html) +* [Creating web tests transactions from fiddler](https://blogs.msdn.microsoft.com/nexpert/archive/2009/05/04/creating-transactional-web-tests-for-visual-studio-with-fiddler-nexpert.aspx) +* [Creating custom Load profiles via plug-ins](https://blogs.msdn.microsoft.com/slumley/archive/2009/05/04/creating-a-custom-load-profile-which-will-step-user-load-up-and-then-back-down.aspx) + +**Case Studies** + +* [Load Testing Visual Studio Online itself](https://blogs.msdn.microsoft.com/edglas/archive/2013/11/27/load-testing-visual-studio-online.aspx) +* [NORAD Tracks Santa](https://blogs.msdn.microsoft.com/visualstudioalm/archive/2014/01/23/using-visual-studio-online-to-load-test-the-norad-tracks-santa-website.aspx) +* [Eovendo - Ad Rating Service](http://www.microsoft.com/casestudies/Case_Study_Detail.aspx?CaseStudyID=710000003474) + +**Blogs and other references** + +* [Quick Reference Guide for VS Performance Testing](http://vsptqrg.codeplex.com/) +* [Geoff Gray's blog](https://blogs.msdn.microsoft.com/geoffgr/) +* [Ed Glas' blog](https://blogs.msdn.microsoft.com/edglas/archive/2007/12/17/content-index-for-web-tests-and-load-tests.aspx) +* [Sean Lumley's blog](https://blogs.msdn.microsoft.com/slumley/) + +**Samples** + +* [Sample plugins](http://teamtestplugins.codeplex.com/) +* [Sample code for REST APIs (Test Execution)](https://code.msdn.microsoft.com/windowsdesktop/Cloud-Load-Testing-API-b333e778) +* [Sample code for REST APIs (Importing Results)](https://code.msdn.microsoft.com/windowsdesktop/Importing-Load-Test-Results-b577864b) + +----------------- + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/load-test/run-performance-tests-app-before-release.md b/docs/load-test/run-performance-tests-app-before-release.md new file mode 100644 index 00000000000..321198a9d84 --- /dev/null +++ b/docs/load-test/run-performance-tests-app-before-release.md @@ -0,0 +1,171 @@ +--- +title: Load test your app before release +description: Run load tests on your app before release with Visual Studio Team Services (VSTS), Cloud-based Load Testing, and Visual Studio +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-performance +ms.topic: get-started-article +ms.assetid: 2C83E7E1-93BE-44F9-A041-AC23963404D3 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Tutorial: Load test your app before release + +[!INCLUDE [version-header-vs-ts](_shared/version-header-vs-ts.md)] + +Find performance issues before you release your app by running load tests with with Visual Studio +Enterprise using [Cloud-based Load Testing](http://go.microsoft.com/fwlink/?LinkID=317257) +to provide virtual machines in the cloud that generate the load of many users accessing your web site at the same time. +All you need is a [Visual Studio Team Services (VSTS) account](http://go.microsoft.com/fwlink/?LinkId=307137). + +In this tutorial, you'll learn how to: + +> [!div class="checklist"] +> * [Create a web performance and load test project](#createtests) +> * [Record a web performance test](#recordtests) +> * [Create a load test](#createload) +> * [Run and analyze your load test](#runanalyze) +> * [Improve your load tests](#improvetests) + + +## Create a web performance and load test project + +You first create web performance tests. These tests are used in your +load tests to simulate multiple users performing +actions in your app at the same time. + +1. If you don't have Visual Studio Enterprise, get it [here](https://www.visualstudio.com/downloads/). + +1. Create a web performance and load test project. + + ![Create Web Performance and Load Test project](_img/run-performance-tests-app-before-release/create-web-perf-load-test-project.png) + + If you don't see the template for the web performance and load test project type, + ensure you have installed the required packages during Visual Studio setup. + + ![Installing packages required for web performance and load testing](_img/run-performance-tests-app-before-release/install-tools.png) + + +## Record a web performance test + +1. Create a web performance test. + + ![Create web performance test](_img/run-performance-tests-app-before-release/create-web-perf-test.png) + + Your web browser opens. + +1. Enter the URL for the website that you want to test. + + ![Enter url - web test recorder automatically starts](_img/run-performance-tests-app-before-release/provide-site-url-for-testing.png) + +1. Use your application like you expect your customers to use it. For example, search for items and add them to the shopping cart. + + The recorder will capture the HTTP requests and responses. + +1. When you're done, stop recording. + + ![Use your application as user would, stop recording](_img/run-performance-tests-app-before-release/use-app-stop-recording.png) + + Now, Visual Studio looks for dynamic parameters for the HTTP responses to each of your HTTP requests. A progress bar appears while this happens. + + If dynamic parameters are found, a table appears. You can assign constant values to each dynamic parameter. + +1. Rename your test. For example, ShoppingCart.webtest. + + ![Rename web performance test](_img/run-performance-tests-app-before-release/rename-web-perf-test.png) + +1. Edit test properties to specify performance goals. For example, you can set a page response time goal to 1 second. + + ![Edit page response time goal property to 1 second](_img/run-performance-tests-app-before-release/edit-page-response-time-goal.png) + +1. Save the test. + + +## Create a load test + +1. Create a new load test in the web performance and load test project. + + ![Create new load test](_img/run-performance-tests-app-before-release/create-new-load-test.png) + +1. When the load test wizard appears, choose the kind of load test that you'd like to run. + + ![Choose which kind of load test to run](_img/run-performance-tests-app-before-release/choose-load-test.png) + +1. Change the load pattern to step load. This gradually adds users over time. + [How many virtual users can I configure in my load test?](reference-qa.md#howmanyusers) + + ![Configure the step pattern](_img/run-performance-tests-app-before-release/change-load-pattern.png) + +1. Choose the test mix step. + + ![New Load Test Wizard - Test Mix page](_img/run-performance-tests-app-before-release/choose-test-mix.png) + +1. Add the web performance test you created. + + ![Add tests to the test mix](_img/run-performance-tests-app-before-release/add-tests-to-test-mix.png) + +1. Move the web performance test to the list of tests to run. + + ![Select which tests to include in the test mix](_img/run-performance-tests-app-before-release/select-tests-for-test-mix.png) + + When you run cloud-based load tests using your VSTS account, you can run those tests and generate load in an Azure datacenter that's closer to your users. That way, you reduce latency and simulate local conditions. + +1. Select the location where you want to run your load test. + + ![Select load test location](_img/run-performance-tests-app-before-release/select-load-test-location.png) + +1. When you finish the wizard, the web performance test is added to the load test and appears in the load test editor. + + ![Load test editor](_img/run-performance-tests-app-before-release/web-perf-test-in-load-test-editor.png) + + +## Run and analyze your load test + +You can run your load test locally, or you can run it in the cloud using VSTS. +All you need is a [VSTS account](../accounts/set-up-vs.md). +If you run the load test in the cloud, you can generate more load without setting up test controllers and test agents. +To learn how easy it is to use Cloud-based Load Testing to run your load tests, go +[here](getting-started-with-performance-testing.md). + +Follow these steps to run your load test on your local machine. + +1. Run the load test. + + ![Run a load test from toolbar](_img/run-performance-tests-app-before-release/run-load-test.png) + +1. While the test runs, you discover that the shopping cart page response time exceeds the value you set. + + ![Analyzing page response time issue](_img/run-performance-tests-app-before-release/review-page-response-time.png) + +1. Add an analysis note to track the issue. + + ![Add an analysis note during test](_img/run-performance-tests-app-before-release/add-test-notes.png) + +1. After the load test is finished, the summary is displayed. + + The results for the completed test include performance counter data, threshold violations, and error information. + + ![Load test summary](_img/run-performance-tests-app-before-release/load-test-summary.png) + +1. Choose the detail view. By analyzing the step load pattern for users, + you can identify the user count where your performance fails to meet your requirements. + + ![Detail view with step load pattern](_img/run-performance-tests-app-before-release/load-test-summary-details.png) + +1. Fix any performance issues in your application's code and rerun the test. + + +## Improve your load tests + +You can improve your test to better simulate +real-world loads by specifying various load test +[scenario properties](https://msdn.microsoft.com/library/ff406966%28v=vs.140%29.aspx) +and [run settings properties](https://msdn.microsoft.com/library/ff406976%28v=vs.140%29.aspx). For example, you can specify the number of new users that will use web cache data in your load test. + +![Percentage of new users property](_img/run-performance-tests-app-before-release/percentage-new-users.png) + +## Next step + +> [!div class="nextstepaction"] +> [Run URL-based load tests](get-started-simple-cloud-load-test.md) diff --git a/docs/load-test/toc.yml b/docs/load-test/toc.yml new file mode 100644 index 00000000000..ae4350ba4d1 --- /dev/null +++ b/docs/load-test/toc.yml @@ -0,0 +1,52 @@ +- name: Load Testing + href: index.md +- name: Overview + items: + - name: About load testing + href: overview.md +- name: Quickstarts + items: + - name: Load test with Visual Studio + href: getting-started-with-performance-testing.md + - name: Load test with VSTS + href: get-started-simple-cloud-load-test.md + - name: Load test with Azure portal + href: app-service-web-app-performance-test.md + - name: View and compare results + href: performance-reports.md +- name: Tutorials + items: + - name: Load test before release + href: run-performance-tests-app-before-release.md +- name: How-to Guides + items: + - name: Add app performance data + href: get-performance-data-for-load-tests.md + - name: Run Apache JMeter load tests + href: get-started-jmeter-test.md + - name: Record and replay tests + href: record-and-replay-cloud-load-tests.md +- name: Reference + items: + - name: FAQs + href: reference-qa.md +- name: Resources + items: + - name: Edit load tests + href: https://msdn.microsoft.com/library/ff406975%28v=vs.140%29.aspx + - name: Distribute load tests + href: https://msdn.microsoft.com/library/dd728093%28v=vs.140%29.aspx + - name: Analyze load test results + href: https://msdn.microsoft.com/library/ee923686%28v=vs.140%29.aspx + - name: Fix undetectable parameters + href: https://msdn.microsoft.com/library/ff460245%28v=vs.140%29.aspx + - name: "Create custom code & plug-ins" + href: https://msdn.microsoft.com/library/ee923683%28v=vs.140%29.aspx + - name: Posts on the ALM blog + href: https://social.msdn.microsoft.com/Search/en-US?query=performance%20testing&beta=0&rn=Microsoft+Application+Lifecycle+Management&rq=site:https://blogs.msdn.microsoft.com/visualstudioalm&ac=4 + - name: Manual and exploratory testing + href: ../manual-test/index.md + - name: Continuous testing + href: ../build-release/test/index.md + - name: Unit testing + href: https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios diff --git a/docs/manual-test/_img/_shared/collect-diagnostic-data-01.png b/docs/manual-test/_img/_shared/collect-diagnostic-data-01.png new file mode 100644 index 00000000000..6d95545b758 Binary files /dev/null and b/docs/manual-test/_img/_shared/collect-diagnostic-data-01.png differ diff --git a/docs/manual-test/_img/_shared/collect-diagnostic-data-06.png b/docs/manual-test/_img/_shared/collect-diagnostic-data-06.png new file mode 100644 index 00000000000..d9ae2e061ad Binary files /dev/null and b/docs/manual-test/_img/_shared/collect-diagnostic-data-06.png differ diff --git a/docs/manual-test/_img/_shared/collect-diagnostic-data-11.png b/docs/manual-test/_img/_shared/collect-diagnostic-data-11.png new file mode 100644 index 00000000000..a5b975888dd Binary files /dev/null and b/docs/manual-test/_img/_shared/collect-diagnostic-data-11.png differ diff --git a/docs/manual-test/_img/_shared/collect-diagnostic-data-16.png b/docs/manual-test/_img/_shared/collect-diagnostic-data-16.png new file mode 100644 index 00000000000..c013422aea2 Binary files /dev/null and b/docs/manual-test/_img/_shared/collect-diagnostic-data-16.png differ diff --git a/docs/manual-test/_img/_shared/collect-diagnostic-data-19.png b/docs/manual-test/_img/_shared/collect-diagnostic-data-19.png new file mode 100644 index 00000000000..ea4ee82c61a Binary files /dev/null and b/docs/manual-test/_img/_shared/collect-diagnostic-data-19.png differ diff --git a/docs/manual-test/_img/_shared/connectedmode-01.png b/docs/manual-test/_img/_shared/connectedmode-01.png new file mode 100644 index 00000000000..39d849f8861 Binary files /dev/null and b/docs/manual-test/_img/_shared/connectedmode-01.png differ diff --git a/docs/manual-test/_img/_shared/connectedmode-02.png b/docs/manual-test/_img/_shared/connectedmode-02.png new file mode 100644 index 00000000000..5c417c3b674 Binary files /dev/null and b/docs/manual-test/_img/_shared/connectedmode-02.png differ diff --git a/docs/manual-test/_img/_shared/exp-test-icon.png b/docs/manual-test/_img/_shared/exp-test-icon.png new file mode 100644 index 00000000000..c87442f3f93 Binary files /dev/null and b/docs/manual-test/_img/_shared/exp-test-icon.png differ diff --git a/docs/manual-test/_img/_shared/provide-stakeholder-feedback-07.png b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-07.png new file mode 100644 index 00000000000..d8ccdc2409e Binary files /dev/null and b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-07.png differ diff --git a/docs/manual-test/_img/_shared/provide-stakeholder-feedback-08.png b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-08.png new file mode 100644 index 00000000000..8f6ff829a87 Binary files /dev/null and b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-08.png differ diff --git a/docs/manual-test/_img/_shared/provide-stakeholder-feedback-09.png b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-09.png new file mode 100644 index 00000000000..8700f8b5926 Binary files /dev/null and b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-09.png differ diff --git a/docs/manual-test/_img/_shared/provide-stakeholder-feedback-10.png b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-10.png new file mode 100644 index 00000000000..7f098ec41e7 Binary files /dev/null and b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-10.png differ diff --git a/docs/manual-test/_img/_shared/provide-stakeholder-feedback-11.png b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-11.png new file mode 100644 index 00000000000..51dcacc7234 Binary files /dev/null and b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-11.png differ diff --git a/docs/manual-test/_img/_shared/provide-stakeholder-feedback-12.png b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-12.png new file mode 100644 index 00000000000..3133ec9c54b Binary files /dev/null and b/docs/manual-test/_img/_shared/provide-stakeholder-feedback-12.png differ diff --git a/docs/manual-test/_img/_shared/run-manual-tests-19.png b/docs/manual-test/_img/_shared/run-manual-tests-19.png new file mode 100644 index 00000000000..75e055c4993 Binary files /dev/null and b/docs/manual-test/_img/_shared/run-manual-tests-19.png differ diff --git a/docs/manual-test/_img/_shared/testing-configurations-schematic.png b/docs/manual-test/_img/_shared/testing-configurations-schematic.png new file mode 100644 index 00000000000..157084eb579 Binary files /dev/null and b/docs/manual-test/_img/_shared/testing-configurations-schematic.png differ diff --git a/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-01.png b/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-01.png new file mode 100644 index 00000000000..c79319607b1 Binary files /dev/null and b/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-01.png differ diff --git a/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-02.png b/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-02.png new file mode 100644 index 00000000000..ff6bbda7885 Binary files /dev/null and b/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-02.png differ diff --git a/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-03.png b/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-03.png new file mode 100644 index 00000000000..4fa99c74318 Binary files /dev/null and b/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-03.png differ diff --git a/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-04.png b/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-04.png new file mode 100644 index 00000000000..0210b34a3f7 Binary files /dev/null and b/docs/manual-test/_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-04.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-02.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-02.png new file mode 100644 index 00000000000..e514890532b Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-02.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-03.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-03.png new file mode 100644 index 00000000000..8b833d06a9a Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-03.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-04.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-04.png new file mode 100644 index 00000000000..afe425b44bd Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-04.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-05.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-05.png new file mode 100644 index 00000000000..be9b83f32c6 Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-05.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-07.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-07.png new file mode 100644 index 00000000000..5a78806320c Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-07.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-08.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-08.png new file mode 100644 index 00000000000..e4e5c01bd94 Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-08.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-08a.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-08a.png new file mode 100644 index 00000000000..8878b68cbb2 Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-08a.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-09.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-09.png new file mode 100644 index 00000000000..d33401c9e8a Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-09.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-10.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-10.png new file mode 100644 index 00000000000..d59d3fb994a Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-10.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-12.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-12.png new file mode 100644 index 00000000000..d925d2add99 Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-12.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-13.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-13.png new file mode 100644 index 00000000000..71b4472ce4a Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-13.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-14.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-14.png new file mode 100644 index 00000000000..8a02604bf32 Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-14.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-15.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-15.png new file mode 100644 index 00000000000..579edee6345 Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-15.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-17.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-17.png new file mode 100644 index 00000000000..85ccd7e1f07 Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-17.png differ diff --git a/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-18.png b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-18.png new file mode 100644 index 00000000000..14d95cf2bcd Binary files /dev/null and b/docs/manual-test/_img/collect-diagnostic-data/collect-diagnostic-data-18.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/connectedmode-03.png b/docs/manual-test/_img/connected-mode-exploratory-testing/connectedmode-03.png new file mode 100644 index 00000000000..44b49266ef6 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/connectedmode-03.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-01.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-01.png new file mode 100644 index 00000000000..09edbe73214 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-01.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-01a.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-01a.png new file mode 100644 index 00000000000..984f8ddba1c Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-01a.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-02.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-02.png new file mode 100644 index 00000000000..d40947f0df5 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-02.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-03.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-03.png new file mode 100644 index 00000000000..9c715dce401 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-03.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-04.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-04.png new file mode 100644 index 00000000000..5b0ab464bce Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-04.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-05.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-05.png new file mode 100644 index 00000000000..a98a41d0bc4 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-05.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-06.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-06.png new file mode 100644 index 00000000000..cc5271ef29e Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-06.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-07.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-07.png new file mode 100644 index 00000000000..30f266d4d37 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-07.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-08.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-08.png new file mode 100644 index 00000000000..87072672117 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-08.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-09.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-09.png new file mode 100644 index 00000000000..a9dcf1c4490 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-09.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-10.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-10.png new file mode 100644 index 00000000000..0bfd9fbbb72 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-bugs-10.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-testcase-01.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-testcase-01.png new file mode 100644 index 00000000000..fa5a8d8e835 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-testcase-01.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-testcase-02.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-testcase-02.png new file mode 100644 index 00000000000..70281381836 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-testcase-02.png differ diff --git a/docs/manual-test/_img/connected-mode-exploratory-testing/create-testcase-03.png b/docs/manual-test/_img/connected-mode-exploratory-testing/create-testcase-03.png new file mode 100644 index 00000000000..6442597f0e8 Binary files /dev/null and b/docs/manual-test/_img/connected-mode-exploratory-testing/create-testcase-03.png differ diff --git a/docs/manual-test/_img/connectedmode-icon.png b/docs/manual-test/_img/connectedmode-icon.png new file mode 100644 index 00000000000..0706f8e1442 Binary files /dev/null and b/docs/manual-test/_img/connectedmode-icon.png differ diff --git a/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-01.png b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-01.png new file mode 100644 index 00000000000..386609891a8 Binary files /dev/null and b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-01.png differ diff --git a/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-02.png b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-02.png new file mode 100644 index 00000000000..bde02afc261 Binary files /dev/null and b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-02.png differ diff --git a/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-03.png b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-03.png new file mode 100644 index 00000000000..8aca6d705b5 Binary files /dev/null and b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-03.png differ diff --git a/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-04.png b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-04.png new file mode 100644 index 00000000000..999954b378f Binary files /dev/null and b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-04.png differ diff --git a/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-05.png b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-05.png new file mode 100644 index 00000000000..c7391672d8d Binary files /dev/null and b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-05.png differ diff --git a/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-06.png b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-06.png new file mode 100644 index 00000000000..58bc8ee152a Binary files /dev/null and b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-06.png differ diff --git a/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-07.png b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-07.png new file mode 100644 index 00000000000..7b66f1d35a3 Binary files /dev/null and b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-07.png differ diff --git a/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-09.png b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-09.png new file mode 100644 index 00000000000..a665bafa2b5 Binary files /dev/null and b/docs/manual-test/_img/explore-workitems-exploratory-testing/explore-workitems-09.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-01.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-01.png new file mode 100644 index 00000000000..9e98a6f5a95 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-01.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-02.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-02.png new file mode 100644 index 00000000000..497a0bf88a9 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-02.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-03.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-03.png new file mode 100644 index 00000000000..ef935d51ac1 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-03.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-03a.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-03a.png new file mode 100644 index 00000000000..b6a57f927db Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-03a.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-03b.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-03b.png new file mode 100644 index 00000000000..7998841c618 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-03b.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-04.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-04.png new file mode 100644 index 00000000000..9b6755b712c Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-04.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-06.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-06.png new file mode 100644 index 00000000000..43aa60ec8bb Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-06.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-07.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-07.png new file mode 100644 index 00000000000..e3bd8594165 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-07.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-08.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-08.png new file mode 100644 index 00000000000..514818b5687 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-08.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-10.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-10.png new file mode 100644 index 00000000000..b7c17b11573 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-10.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-11.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-11.png new file mode 100644 index 00000000000..d1286075848 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-11.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-12.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-12.png new file mode 100644 index 00000000000..bbd832b1578 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-12.png differ diff --git a/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-13.png b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-13.png new file mode 100644 index 00000000000..122cb1253b9 Binary files /dev/null and b/docs/manual-test/_img/insights-exploratory-testing/insights-exploratory-testing-13.png differ diff --git a/docs/manual-test/_img/kanban-icon.png b/docs/manual-test/_img/kanban-icon.png new file mode 100644 index 00000000000..6b33098a97d Binary files /dev/null and b/docs/manual-test/_img/kanban-icon.png differ diff --git a/docs/manual-test/_img/manual-testing/assign-testers-01.png b/docs/manual-test/_img/manual-testing/assign-testers-01.png new file mode 100644 index 00000000000..9262d8a7174 Binary files /dev/null and b/docs/manual-test/_img/manual-testing/assign-testers-01.png differ diff --git a/docs/manual-test/_img/manual-testing/create-test-cases-01.png b/docs/manual-test/_img/manual-testing/create-test-cases-01.png new file mode 100644 index 00000000000..d1957a0d51e Binary files /dev/null and b/docs/manual-test/_img/manual-testing/create-test-cases-01.png differ diff --git a/docs/manual-test/_img/manual-testing/create-test-plans-01.png b/docs/manual-test/_img/manual-testing/create-test-plans-01.png new file mode 100644 index 00000000000..647c916c05a Binary files /dev/null and b/docs/manual-test/_img/manual-testing/create-test-plans-01.png differ diff --git a/docs/manual-test/_img/manual-testing/exploratory-testing-01.png b/docs/manual-test/_img/manual-testing/exploratory-testing-01.png new file mode 100644 index 00000000000..37f618d3f60 Binary files /dev/null and b/docs/manual-test/_img/manual-testing/exploratory-testing-01.png differ diff --git a/docs/manual-test/_img/manual-testing/kanban-board-01.png b/docs/manual-test/_img/manual-testing/kanban-board-01.png new file mode 100644 index 00000000000..f400d494958 Binary files /dev/null and b/docs/manual-test/_img/manual-testing/kanban-board-01.png differ diff --git a/docs/manual-test/_img/manual-testing/schematic-01.png b/docs/manual-test/_img/manual-testing/schematic-01.png new file mode 100644 index 00000000000..3fea4b4a8db Binary files /dev/null and b/docs/manual-test/_img/manual-testing/schematic-01.png differ diff --git a/docs/manual-test/_img/manual-testing/stakeholder-feedback-01.png b/docs/manual-test/_img/manual-testing/stakeholder-feedback-01.png new file mode 100644 index 00000000000..ee5d35aee7b Binary files /dev/null and b/docs/manual-test/_img/manual-testing/stakeholder-feedback-01.png differ diff --git a/docs/manual-test/_img/manual-testing/test-desktop-apps-01.png b/docs/manual-test/_img/manual-testing/test-desktop-apps-01.png new file mode 100644 index 00000000000..596e6c6ca74 Binary files /dev/null and b/docs/manual-test/_img/manual-testing/test-desktop-apps-01.png differ diff --git a/docs/manual-test/_img/manual-testing/test-web-app-01.png b/docs/manual-test/_img/manual-testing/test-web-app-01.png new file mode 100644 index 00000000000..f50c09443d6 Binary files /dev/null and b/docs/manual-test/_img/manual-testing/test-web-app-01.png differ diff --git a/docs/manual-test/_img/manual-testing/track-test-status-01.png b/docs/manual-test/_img/manual-testing/track-test-status-01.png new file mode 100644 index 00000000000..5c4765cf0d0 Binary files /dev/null and b/docs/manual-test/_img/manual-testing/track-test-status-01.png differ diff --git a/docs/manual-test/_img/marketplace-icon.png b/docs/manual-test/_img/marketplace-icon.png new file mode 100644 index 00000000000..754d158aba3 Binary files /dev/null and b/docs/manual-test/_img/marketplace-icon.png differ diff --git a/docs/manual-test/_img/plus-and-arrow-icon.png b/docs/manual-test/_img/plus-and-arrow-icon.png new file mode 100644 index 00000000000..b477f54f940 Binary files /dev/null and b/docs/manual-test/_img/plus-and-arrow-icon.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-01.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-01.png new file mode 100644 index 00000000000..2e4b05056b5 Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-01.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-02.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-02.png new file mode 100644 index 00000000000..de35470c5cc Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-02.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-03.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-03.png new file mode 100644 index 00000000000..4805bb6d1e1 Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-03.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-04.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-04.png new file mode 100644 index 00000000000..4c3a40618f6 Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-04.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-05.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-05.png new file mode 100644 index 00000000000..05387108205 Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-05.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-06.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-06.png new file mode 100644 index 00000000000..60a9bbd398c Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-06.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-07.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-07.png new file mode 100644 index 00000000000..1f5a5b861fb Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-07.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-08.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-08.png new file mode 100644 index 00000000000..cdc8e7da2fc Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-08.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-09.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-09.png new file mode 100644 index 00000000000..951fd869e80 Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-09.png differ diff --git a/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-10.png b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-10.png new file mode 100644 index 00000000000..1d493176234 Binary files /dev/null and b/docs/manual-test/_img/repeat-test-with-different-data/repeat-test-with-different-data-10.png differ diff --git a/docs/manual-test/_img/runtests2-icon.png b/docs/manual-test/_img/runtests2-icon.png new file mode 100644 index 00000000000..5a1f9191e5c Binary files /dev/null and b/docs/manual-test/_img/runtests2-icon.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-01.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-01.png new file mode 100644 index 00000000000..e8bf985d69f Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-01.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-02.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-02.png new file mode 100644 index 00000000000..62e465dcbaa Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-02.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-03.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-03.png new file mode 100644 index 00000000000..5d2712eda10 Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-03.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-04.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-04.png new file mode 100644 index 00000000000..521f4447150 Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-04.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-05.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-05.png new file mode 100644 index 00000000000..381cc8601fc Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-05.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-06.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-06.png new file mode 100644 index 00000000000..34d752e0003 Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-06.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-07.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-07.png new file mode 100644 index 00000000000..b841e2e343b Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-07.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-07a.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-07a.png new file mode 100644 index 00000000000..6efe2a9119b Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-07a.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-08.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-08.png new file mode 100644 index 00000000000..67f1d8fbc06 Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-08.png differ diff --git a/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-09.png b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-09.png new file mode 100644 index 00000000000..4059ea34f0b Binary files /dev/null and b/docs/manual-test/_img/standalone-mode-exploratory-testing/standalonemode-09.png differ diff --git a/docs/manual-test/_img/standalonemode-icon.png b/docs/manual-test/_img/standalonemode-icon.png new file mode 100644 index 00000000000..662924b5b2c Binary files /dev/null and b/docs/manual-test/_img/standalonemode-icon.png differ diff --git a/docs/manual-test/_img/table-no.png b/docs/manual-test/_img/table-no.png new file mode 100644 index 00000000000..6846403438c Binary files /dev/null and b/docs/manual-test/_img/table-no.png differ diff --git a/docs/manual-test/_img/table-yes.png b/docs/manual-test/_img/table-yes.png new file mode 100644 index 00000000000..9abfa61341a Binary files /dev/null and b/docs/manual-test/_img/table-yes.png differ diff --git a/docs/manual-test/_img/testcases-icon.png b/docs/manual-test/_img/testcases-icon.png new file mode 100644 index 00000000000..f8c7365ce9c Binary files /dev/null and b/docs/manual-test/_img/testcases-icon.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-01.png b/docs/manual-test/_img/testing-configurations/testing-configurations-01.png new file mode 100644 index 00000000000..e3a9da9da60 Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-01.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-01a.png b/docs/manual-test/_img/testing-configurations/testing-configurations-01a.png new file mode 100644 index 00000000000..f0f9419ac41 Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-01a.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-01b.png b/docs/manual-test/_img/testing-configurations/testing-configurations-01b.png new file mode 100644 index 00000000000..a158c556c38 Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-01b.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-01c.png b/docs/manual-test/_img/testing-configurations/testing-configurations-01c.png new file mode 100644 index 00000000000..ebdd5e6ca42 Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-01c.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-02.png b/docs/manual-test/_img/testing-configurations/testing-configurations-02.png new file mode 100644 index 00000000000..e1b684025c8 Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-02.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-03.png b/docs/manual-test/_img/testing-configurations/testing-configurations-03.png new file mode 100644 index 00000000000..f9f31a1e04a Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-03.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-04.png b/docs/manual-test/_img/testing-configurations/testing-configurations-04.png new file mode 100644 index 00000000000..7ebd1449b7a Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-04.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-05.png b/docs/manual-test/_img/testing-configurations/testing-configurations-05.png new file mode 100644 index 00000000000..76d6185ea5f Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-05.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-06.png b/docs/manual-test/_img/testing-configurations/testing-configurations-06.png new file mode 100644 index 00000000000..5daafee090e Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-06.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-07.png b/docs/manual-test/_img/testing-configurations/testing-configurations-07.png new file mode 100644 index 00000000000..92160a2cb32 Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-07.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-07a.png b/docs/manual-test/_img/testing-configurations/testing-configurations-07a.png new file mode 100644 index 00000000000..07d2a04f7da Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-07a.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-08.png b/docs/manual-test/_img/testing-configurations/testing-configurations-08.png new file mode 100644 index 00000000000..ed2e321a8ef Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-08.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-09.png b/docs/manual-test/_img/testing-configurations/testing-configurations-09.png new file mode 100644 index 00000000000..0177ce7283e Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-09.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-10.png b/docs/manual-test/_img/testing-configurations/testing-configurations-10.png new file mode 100644 index 00000000000..00425d5567c Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-10.png differ diff --git a/docs/manual-test/_img/testing-configurations/testing-configurations-11.png b/docs/manual-test/_img/testing-configurations/testing-configurations-11.png new file mode 100644 index 00000000000..1ee67130ebd Binary files /dev/null and b/docs/manual-test/_img/testing-configurations/testing-configurations-11.png differ diff --git a/docs/manual-test/_img/testplan-icon.png b/docs/manual-test/_img/testplan-icon.png new file mode 100644 index 00000000000..70b564334db Binary files /dev/null and b/docs/manual-test/_img/testplan-icon.png differ diff --git a/docs/manual-test/_shared/feedback-header-text.md b/docs/manual-test/_shared/feedback-header-text.md new file mode 100644 index 00000000000..8c2b7b9f41e --- /dev/null +++ b/docs/manual-test/_shared/feedback-header-text.md @@ -0,0 +1,19 @@ +[Stakeholders](../../quickstart/get-started-stakeholder.md) +can respond to feedback requests for user stories and +features generated in VSTS or TFS using +a lightweight end-to-end flow based on the +[Test & Feedback extension](../getting-started/perform-exploratory-tests.md). +Only users with Basic access can request feedback. Basic users +can provide feedback using the flow described in +[this topic](../stakeholder/provide-stakeholder-feedback.md#non-stakeholder-feedback). + +* [Request feedback](../stakeholder/request-stakeholder-feedback.md#request) +* [Provide feedback](../stakeholder/provide-stakeholder-feedback.md#provide) +* [Voluntary feedback](../stakeholder/voluntary-stakeholder-feedback.md#voluntary) +* [Track requests](../stakeholder/track-stakeholder-feedback.md#track) + +>**NOTE**: This lightweight end-to-end flow is applicable only for web apps +and by using VSTS or TFS 2017. To get feedback for desktop apps, or for +earlier versions of TFS, use the feedback flow described in +**[this topic](../../work/connect/get-feedback.md)** +about the Microsoft Feedback Client. diff --git a/docs/manual-test/_shared/help-and-support-footer.md b/docs/manual-test/_shared/help-and-support-footer.md new file mode 100644 index 00000000000..7c54e125b62 --- /dev/null +++ b/docs/manual-test/_shared/help-and-support-footer.md @@ -0,0 +1,6 @@ +## Help and support + +Report any problems on [Developer Community](https://developercommunity.visualstudio.com/), +make suggestions on [UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services), +get advice on [Stack Overflow](https://stackoverflow.com/questions/tagged/vs-team-services), +and get support via our [Support](https://www.visualstudio.com/team-services/support/) page. diff --git a/docs/manual-test/_shared/version-header-none.md b/docs/manual-test/_shared/version-header-none.md new file mode 100644 index 00000000000..28d70e397be --- /dev/null +++ b/docs/manual-test/_shared/version-header-none.md @@ -0,0 +1 @@ +**| No version dependency |** diff --git a/docs/manual-test/_shared/version-header-ts-tfs.md b/docs/manual-test/_shared/version-header-ts-tfs.md new file mode 100644 index 00000000000..4bdf9a8f300 --- /dev/null +++ b/docs/manual-test/_shared/version-header-ts-tfs.md @@ -0,0 +1 @@ +**VSTS | TFS 2017 | TFS 2015** diff --git a/docs/manual-test/_shared/version-header-ts-tfs15.md b/docs/manual-test/_shared/version-header-ts-tfs15.md new file mode 100644 index 00000000000..4eb11897b97 --- /dev/null +++ b/docs/manual-test/_shared/version-header-ts-tfs15.md @@ -0,0 +1 @@ +**VSTS | TFS 2017** diff --git a/docs/manual-test/_shared/version-header-ts.md b/docs/manual-test/_shared/version-header-ts.md new file mode 100644 index 00000000000..9d50580e6ae --- /dev/null +++ b/docs/manual-test/_shared/version-header-ts.md @@ -0,0 +1 @@ +**VSTS** diff --git a/docs/manual-test/_shared/version-header-vs-ts-tfs.md b/docs/manual-test/_shared/version-header-vs-ts-tfs.md new file mode 100644 index 00000000000..8578bdc88b7 --- /dev/null +++ b/docs/manual-test/_shared/version-header-vs-ts-tfs.md @@ -0,0 +1 @@ +**Visual Studio 2017 | Visual Studio 2015 | VSTS | TFS 2017 | TFS 2015** diff --git a/docs/manual-test/add-to-bugs-exploratory-testing.md b/docs/manual-test/add-to-bugs-exploratory-testing.md new file mode 100644 index 00000000000..ee7cde41065 --- /dev/null +++ b/docs/manual-test/add-to-bugs-exploratory-testing.md @@ -0,0 +1,66 @@ +--- +title: Add findings to existing bugs with exploratory testing +description: Manual and exploratory testing - add findings to existing bugs existing bugs when using the Test & Feedback extension +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 0C61F157-452E-4DE5-8998-8DDBD9D44969 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Add findings to existing bugs with exploratory testing + +[!INCLUDE [version-header-ts-tfs](_shared/version-header-ts-tfs.md)] + +To help avoid duplication, the Test & Feedback extension automatically +searches for and displays existing bugs, based on the keywords in the title, +as you file a new bug. You can choose to continue creating a new bug or add +your findings to an existing bug. + +1. As you type the title for a new bug, in the background the extension + searches for similar bugs that might be related to the issue you've found + and displays a link to the results. Choose this link to see the results that have + similar title keywords. + + ![The link to view similar bugs](_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-01.png) + + The form displays **0 Similar** if it does not find any matching bugs. + In this case, or if you don't see a "similar" link, you can create a + new bug containing your screenshots, notes, and videos + as described in [this topic](connected-mode-exploratory-testing.md). + +1. If you see a bug you want to update, instead of creating a new one: + + - Select it in the list and choose **Edit**. + + ![Editing a similar bug](_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-02.png) + + - The extension appends all your screenshots, notes, and videos to + the existing bug. + + - Save the updated bug. + + ![Saving the updated bug](_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-03.png) + +1. If, instead, you decide not to update an existing bug, ignore the "similar" link and: + + - Choose the **New bug** link to return to the bug details form. + + ![Returning to the bug details form](_img/add-to-bugs-exploratory-testing/add-to-existing-bugs-04.png) + + - Enter the details for the new bug and save it + as described in [this topic](connected-mode-exploratory-testing.md).

        + +1. Continue exploring your app, filing bugs and tasks, and creating test cases. + +## See Also + +* [Use the Test & Feedback extension in Connected mode](connected-mode-exploratory-testing.md) +* [Explore work items with exploratory testing](explore-workitems-exploratory-testing.md) +* [Get insights across your exploratory testing sessions](insights-exploratory-testing.md) +* [Use the Test & Feedback extension in Standalone mode](standalone-mode-exploratory-testing.md) +* [Exploratory testing with Microsoft Test Manager](mtm/exploratory-testing-using-microsoft-test-manager.md) +* [Overview of manual and exploratory testing](index.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/breadcrumb/toc.yml b/docs/manual-test/breadcrumb/toc.yml new file mode 100644 index 00000000000..e1b3fd41ea6 --- /dev/null +++ b/docs/manual-test/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Testing + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=testing + items: + - name: "Exploratory Testing" + tocHref: /vsts/ + topicHref: /vsts/manual-test/index diff --git a/docs/manual-test/collect-diagnostic-data.md b/docs/manual-test/collect-diagnostic-data.md new file mode 100644 index 00000000000..a8d48c054e3 --- /dev/null +++ b/docs/manual-test/collect-diagnostic-data.md @@ -0,0 +1,219 @@ +--- +title: Collect diagnostic data while testing your apps +description: Manual and exploratory testing - collect diagnostic data while testing web and desktop apps with Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: F536C364-BEFC-48A8-B977-19233941EF6A +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Collect diagnostic data while testing + +[!INCLUDE [version-header-ts-tfs15](_shared/version-header-ts-tfs15.md)] + +Collect diagnostic data while testing your apps. +This data will be included in the bugs you file +during the test. You can collect diagnostic data from +web apps and from desktop apps, and view it in Team +Services or Team Foundation Server. + +* [Collect diagnostic data from web apps](#collect-web) +* [Collect diagnostic data from desktop apps](#collect-desktop) + + +## Collect diagnostic data from web apps + +For web apps under test, you can use web-based Microsoft Test Runner +to collect the following data on demand: + +* [Screen captures](#web-screenshot) +* [Image action log](#web-log) +* [Screen recordings](#web-recording) + +>The following diagnostic data collection features currently +work only with the web-based Microsoft Test runner. See +[Exploratory test and submit feedback directly from your browser](getting-started/perform-exploratory-tests.md) + + +### Screen capture + +Capture annotated screenshots from your web app. + +1. Ensure that the tab of the app from which you want to + capture data is the active tab. + +1. Open Test Runner and choose the **Capture screenshot** icon. + + ![Capturing a screenshot from the app](_img/_shared/collect-diagnostic-data-01.png) + +1. Choose the title of the tab containing the app + you are testing. + + ![Selecting the active app tab title](_img/collect-diagnostic-data/collect-diagnostic-data-02.png) + + If the tab title you want is not shown in the list, + switch to the app and activate it by tapping on the title bar, + or on a child window if the app has opened one. + +1. Drag to select the area of the screen you want to + capture, or just capture the full screen. + + ![Selecting the area of the screen to capture](_img/collect-diagnostic-data/collect-diagnostic-data-03.png) + +1. If required, edit the title of the screenshot and add + annotations and text to it using the icons in the toolbar. + + ![Annotating the screenshot](_img/collect-diagnostic-data/collect-diagnostic-data-04.png) + +1. Save your screenshot. + + ![Saving the screenshot](_img/collect-diagnostic-data/collect-diagnostic-data-05.png) + + +### Image action log + +Capture your interactions with the web app as an image action log that provides context. + +1. Ensure that the tab of the app from which you want to + capture data is the active tab. + +1. Open or switch to the Test Runner and choose the **Capture user actions...** icon. + + ![Capturing an image action log from the app](_img/_shared/collect-diagnostic-data-06.png) + +1. Choose the title of the tab containing the app + you are testing. + + ![Selecting the active app tab title](_img/collect-diagnostic-data/collect-diagnostic-data-07.png) + + If the tab title you want is not shown in the list, + switch to the app and activate it by tapping on the title bar, + or on a child window if the app has opened one. + +1. The Test Runner will now record all the actions you take + on the app's browser tab. + + ![Recording in progress for a web app](_img/collect-diagnostic-data/collect-diagnostic-data-08.png) + + If you create a bug while recording your actions, all the + data collected up to that point will be included in the bug. + +1. Finish capturing your actions by choosing + the **Stop** button. The action log is added to the test results + as an attachment. + + ![Stopping a recording for a web app](_img/collect-diagnostic-data/collect-diagnostic-data-08a.png) + +1. Choose the **ActionLog...** link at the bottom of the window + to view the data captured in the action log. + + ![Opening the image action log](_img/collect-diagnostic-data/collect-diagnostic-data-09.png) + + The log opens in your web browser. + + ![Viewing the data captured in the image action log](_img/collect-diagnostic-data/collect-diagnostic-data-10.png) + + +### Screen recording + +Capture screen recordings from your web apps. + +1. Ensure that the tab of the app from which you want to + capture data is the active tab. + +1. Open or switch to the Test Runner and choose the **Record screen** icon. + + ![Capturing a screen recording from the app](_img/_shared/collect-diagnostic-data-11.png) + +1. Choose the entire screen, or choose an app to start recording. + + ![Choosing the screen or app to record](_img/collect-diagnostic-data/collect-diagnostic-data-12.png) + + If you create a bug while recording your screen, the + recording automatically stops and is added to the bug. + +1. Finish recording your actions by choosing + the **Stop** button. The recording is added to the test results + as an attachment. + + ![Stopping a screen recording](_img/collect-diagnostic-data/collect-diagnostic-data-13.png) + + If you do not stop the recording after ten minutes, it stops + automatically and is saved as an attachment to your test results. + Restart the recording the **Record screen** icon if required. + +1. Choose the **ScreenRecording...** link at the bottom of the window + to view the captured recording. + + ![Viewing the screen recording](_img/collect-diagnostic-data/collect-diagnostic-data-14.png) + + +### View the diagnostic data + +When you create a bug while capturing diagnostic data, all the data captured +up to that point is included in the bug that is created. You can +view it before you save the bug. + +![Viewing the diagnostic data in the bug you are creating](_img/collect-diagnostic-data/collect-diagnostic-data-15.png) + +[How do I play the video recordings I created with the extension?](reference-qa.md#recording-playback) + + +## Collect diagnostic data from desktop apps + +At present you can collect only screen recordings and system +information when testing desktop apps using the web-based +Microsoft Test Runner. Instead, use +[Microsoft Test Manager client](https://www.visualstudio.com/en-us/products/visual-studio-test-professional-with-msdn-vs.aspx) +to collect additional diagnostic from desktop apps. + +1. In the Test hub in VSTS or TFS, + select a test case, test suite, or test plan to execute. + +1. Open the **Run** menu and choose **Run with options**. + + ![Starting a test with options](_img/_shared/collect-diagnostic-data-16.png) + +1. In the **Run with options** dialog, select **Microsoft + Test Runner 2017 or later** in the first drop-down list. + + ![Selecting the test runner](_img/collect-diagnostic-data/collect-diagnostic-data-17.png) + +1. Choose the data collectors you want to enable. Options include + Event log, Action log, Screen and voice recorder, and System information. + + ![Selecting the additional diagnostic data to collect](_img/collect-diagnostic-data/collect-diagnostic-data-18.png) + + By default, the test runner client lets you to capture screenshots of your + desktop app during testing. + +1. If you wish, select a build to associate with your test run. + A link to this build will be included automatically in all the + bugs you create during the test run. + + ![Selecting the build to include a link to in the results](_img/_shared/collect-diagnostic-data-19.png) + +1. Choose **OK** to start testing. + +If you want to collect advanced diagnostic data such as code coverage, +IntelliTrace, and Test Impact data in addition to the data items listed above, +you must [configure the data collectors](https://msdn.microsoft.com/en-us/library/ee231892.aspx) +and other run settings in Microsoft Test Manager (MTM) and run your +tests using MTM. For more details, see +[Run manual tests with Microsoft Test Manager](mtm/run-manual-tests-with-microsoft-test-manager.md). +

        + +> [!NOTE] +> If you have an older version of Microsoft Test Manager, we recommend you upgrade to the latest version. +> However, if you have Microsoft Test Manager 2015 or an earlier version installed, you can choose **Microsoft Test Runner 2015 and earlier** when you launch the test runner from Test hub using **Run with options**. +> You must [configure the data collectors](https://msdn.microsoft.com/en-us/library/ee231892.aspx) and other run settings in Microsoft Test Manager (MTM) and specify these as the default settings for the test plan. +> For more details, see [Run manual tests with Microsoft Test Manager](mtm/run-manual-tests-with-microsoft-test-manager.md). + +## See also + +* [Exploratory test and submit feedback directly from your browser](getting-started/perform-exploratory-tests.md) +* [Overview of manual and exploratory testing](index.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/connected-mode-exploratory-testing.md b/docs/manual-test/connected-mode-exploratory-testing.md new file mode 100644 index 00000000000..1940bdb29a5 --- /dev/null +++ b/docs/manual-test/connected-mode-exploratory-testing.md @@ -0,0 +1,176 @@ +--- +title: Exploratory testing with the Test & Feedback extension in Connected mode +description: Exploratory testing with the Test & Feedback extension in Connected mode +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 0F52826C-218D-437A-B6FF-EB8E8292CE3C +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Exploratory testing with the Test & Feedback extension in Connected mode + +[!INCLUDE [version-header-ts-tfs](_shared/version-header-ts-tfs.md)] + +To use the Test & Feedback extension in **Connected** mode you must connect +to your VSTS account or TFS 2015 and later. +This automatically configures the extension based on your access level: + +* Users with **Basic** access can use the extension to perform exploratory + testing, as described below. + +* Users with **Stakeholder** access can use the extension to respond to + feedback requests or to provide feedback voluntarily. + [More details](stakeholder/provide-stakeholder-feedback.md#direct). + +* Users with **Basic** or **Stakeholder** access can use extension to respond to feedback requests sent + by the team by choosing the **Provide feedback** link in the email. + [More details](stakeholder/provide-stakeholder-feedback.md#email). + + +## Connect to VSTS or TFS + +1. If you want to use VSTS, and you haven't already done so, + [sign up for a VSTS account](https://www.visualstudio.com/products/visual-studio-team-services-vs) + now. Make sure you create a team project when you create your account. + +1. If you haven't already, [install the Test & Feedback extension](getting-started/perform-exploratory-tests.md). + +1. Open the extension in your web browser and select **Connected** mode. + + ![Start the extension in Connected mode](_img/_shared/connectedmode-01.png) + +1. Enter the URL of the VSTS account or TFS you want to connect to and choose **Next**. + + ![Enter the URL of your VSTS account or TFS](_img/_shared/connectedmode-02.png) + + If you are connecting for the first time, you may be prompted to sign in. + +1. After connecting to the server, the extension shows + all the collections, projects and teams in that server. Select the + project or team you want to connect to and choose **Save**. + + ![Select your project or team](_img/connected-mode-exploratory-testing/connectedmode-03.png) + + If there are many projects or teams, use the search textbox + to find the one you need. + +The extension is now ready to be used in **Connected** mode. +Depending on your access level (Basic or Stakeholder) +you will see the appropriate UI for either [exploratory testing](#create-bugs) +or [providing feedback](stakeholder/provide-stakeholder-feedback.md#provide). +The extension remembers your selection and remains connected until +the session cookies expire or you explicitly disconnect from the server. + + +## Create bugs or tasks + +After you have connected, you are ready to begin testing your app. + +1. Start your exploratory testing session. + + ![Start your exploratory testing session](_img/connected-mode-exploratory-testing/create-bugs-01.png) + +1. Open the web application you want to test, and start exploring it. + +1. When you find an area that has a bug, take a screenshot of any part of the screen, + make notes, or record your actions as a video. + + ![Take a screenshot, make notes, or record your actions as a video](_img/connected-mode-exploratory-testing/create-bugs-01a.png) + + >Some browsers may not provide all of the capture capabilities. + See [Which web browsers does the extension support?](reference-qa.md#browser-support) + +1. When you are done exploring and capturing information, create a bug or a task. + + ![Create a bug or a task from the captured information](_img/connected-mode-exploratory-testing/create-bugs-02.png) + +1. The bug or task form contains all your captured information. + It also contains an image action log describing your interactions with the page + (such as mouse clicks, keyboard typing events, touch gestures, and more) and + page load data. Uncheck these options if you do not want to include this + data in the bug or task. + + ![Decide whether to include the image action log and page load data](_img/connected-mode-exploratory-testing/create-bugs-03.png) + + >The image action log is the sequence of steps you took that led to the issue. + It can be used to reproduce the issue and understand the context. + Page load data provides preliminary information about the time it takes to load + the pages, such as the resource timings and navigation timelines. + +1. Enter a title for the bug or task and add any additional notes + you require to the description. Then save the bug or task. + + ![Save the bug or task](_img/connected-mode-exploratory-testing/create-bugs-04.png) + + > You can also [add your findings to an existing similar bug](reference-qa.md#addsimilar). + +1. View a list of all your activities in reverse chronological order + in the **Session timeline** page. It shows all the screenshots, videos, and notes + you've captured, the work items such as bugs, tasks, and test cases you've already + filed, and the work items you've explored. + + ![Review your captured information](_img/connected-mode-exploratory-testing/create-bugs-08.png) + + > You can use the extension to [explore work items](explore-workitems-exploratory-testing.md) + in VSTS or TFS. + +1. To view a bug or task in VSTS or TFS, choose the link in the session timeline. + + ![View a bug or task](_img/connected-mode-exploratory-testing/create-bugs-09.png) + + This opens the work item form in VSTS or TFS. + + ![The bug or task in TS or TFS](_img/connected-mode-exploratory-testing/create-bugs-10.png) + +[How do I play the video recordings I created with the extension?](reference-qa.md#recording-playback) + + +## Create test cases + +The extension lets you create test cases as you explore your application. + +1. When you find a scenario where you want to create a test case, + choose **Create test case**. + + ![Creating a test case](_img/connected-mode-exploratory-testing/create-testcase-01.png) + +1. The test case form contains a list of all your actions up to this point + while exploring the app (it reads them from the image action log). + + ![The actions for the new test case](_img/connected-mode-exploratory-testing/create-testcase-02.png) + +1. Enter a title for the test case and then edit it as required. For example, + uncheck the action steps you don't want to include in the test case, edit the captured + text, and add the expected result. Then save the test case. + + ![Editing new test case](_img/connected-mode-exploratory-testing/create-testcase-03.png) + +1. Continue exploring the application. Create more bugs, tasks, or test cases as required. + + +## End your testing session + +1. When you're done, stop your session. + + ![Stop the exploratory testing session](_img/connected-mode-exploratory-testing/create-bugs-05.png) + +1. If you are using VSTS, or TFS 2017 and higher, open the **Session timeline** page and choose the "view" icon to see your completed exploratory + sessions in VSTS or TFS. + + ![View the exploratory testing session](_img/connected-mode-exploratory-testing/create-bugs-06.png) + + Alternatively, open the **Recent exploratory sessions** list directly in the **Runs** tab of the Test hub. + + ![View exploratory testing sessions on the server](_img/connected-mode-exploratory-testing/create-bugs-07.png) + +1. Now see how you can [view your sessions and get insights](insights-exploratory-testing.md). + +[How do I play the video recordings I created with the extension?](reference-qa.md#recording-playback) + +## Next step + +> [!div class="nextstepaction"] +> [Get insights across your sessions](insights-exploratory-testing.md) diff --git a/docs/manual-test/explore-workitems-exploratory-testing.md b/docs/manual-test/explore-workitems-exploratory-testing.md new file mode 100644 index 00000000000..670a0d94ada --- /dev/null +++ b/docs/manual-test/explore-workitems-exploratory-testing.md @@ -0,0 +1,101 @@ +--- +title: Explore work items when using exploratory testing +description: Manual and exploratory testing - explore work items from the Kanban board or the Test & Feedback extension +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: AFD66FBF-5DEC-4457-8867-A47FFB8EF407 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Explore work items with the Test & Feedback extension + +[!INCLUDE [version-header-ts-tfs](_shared/version-header-ts-tfs.md)] + +Use the Test & Feedback extension to explore existing work items and +associate them with a new or an in-progress exploratory session. +After a work item is associated with a session, all new bugs, tasks and test cases created +in the current session are automatically linked to that work item. +This enables end-to-end traceability, and simplifies tracking +and management of issues. + +You can explore: + +* Work items belonging to a requirement category, a feature category, or an epic category +* Requirements-based test suites and test cases. + +You can explore a work item from the [Kanban board](#kanban) or from the [extension](#extension). +You can also explore [multiple work items in the same session](#multipleitems). + + +## Explore work items from the Kanban board + +1. In the Kanban board, open the shortcut menu of the work item + you want to explore, and choose **Do exploratory testing**. + + ![Opening the Do exploratory testing menu item](_img/explore-workitems-exploratory-testing/explore-workitems-01.png) + +1. A banner in the Work hub shows which work item is associated with your session. + + ![The banner shows the work item for your session](_img/explore-workitems-exploratory-testing/explore-workitems-02.png) + +1. Launch the Test & Feedback extension. + If there are acceptance criteria for the work item, these are shown. + + ![Launching the Test & Feedback extension](_img/explore-workitems-exploratory-testing/explore-workitems-03.png) + + If you have not already started a session, start one now. + The work item is automatically associated with the current or new session. + +1. All bugs, tasks, and test cases you create will automatically be + linked to the current work item. + + ![Viewing the current work item](_img/explore-workitems-exploratory-testing/explore-workitems-04.png) + + +## Explore work items from the Test & Feedback extension + +1. Open the **Explore work item** page in the extension and search for + the work item you want to explore. + + ![Searching for a workitem](_img/explore-workitems-exploratory-testing/explore-workitems-05.png) + + You can search using the work item identifier or keywords in the work item title. + +1. Select the work item in the search results and choose **Explore selected work item**. + + ![Selecting the work item in the search results](_img/explore-workitems-exploratory-testing/explore-workitems-06.png) + +1. The work item is now associated with the in-progress session. + If there are acceptance criteria, these are shown. + + ![Viewing any acceptance criteria](_img/explore-workitems-exploratory-testing/explore-workitems-07.png) + +1. All bugs, tasks, and test cases you create will automatically be + linked to the current work item. + + ![Viewing the current work item](_img/explore-workitems-exploratory-testing/explore-workitems-04.png) + + +## Explore multiple work items in the same session + +To explore another work item, you must first dissociate the current work item from the in-progress session. + +1. Open the **Explore work item** page and choose **Change**. + + ![Changing the work item you are exploring](_img/explore-workitems-exploratory-testing/explore-workitems-09.png) + +2. Associate the new work item with the in-progress session as [described above](#extension). + +## See Also + +* [FAQs for manual testing](reference-qa.md#tandfext) +* [Use the Test & Feedback extension in Connected mode](connected-mode-exploratory-testing.md) +* [Add findings to existing bugs with exploratory testing](add-to-bugs-exploratory-testing.md) +* [Get insights across your exploratory testing sessions](insights-exploratory-testing.md) +* [Use the Test & Feedback extension in Standalone mode](standalone-mode-exploratory-testing.md) +* [Exploratory testing with Microsoft Test Manager](mtm/exploratory-testing-using-microsoft-test-manager.md) +* [Overview of manual and exploratory testing](index.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan.png b/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan.png new file mode 100644 index 00000000000..5a898ffa691 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan2.png b/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan2.png new file mode 100644 index 00000000000..2e09a8dabed Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan2.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan3.png b/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan3.png new file mode 100644 index 00000000000..8ec50c7c5ed Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan3.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan4.png b/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan4.png new file mode 100644 index 00000000000..041f1e442a7 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan4.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/CreateATestPlan1a.png b/docs/manual-test/getting-started/_img/create-a-test-plan/CreateATestPlan1a.png new file mode 100644 index 00000000000..a0d98c73e28 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/CreateATestPlan1a.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/CreateATestPlan2.png b/docs/manual-test/getting-started/_img/create-a-test-plan/CreateATestPlan2.png new file mode 100644 index 00000000000..775337932e5 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/CreateATestPlan2.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/ExportTestPlanHTML.png b/docs/manual-test/getting-started/_img/create-a-test-plan/ExportTestPlanHTML.png new file mode 100644 index 00000000000..57125a3238d Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/ExportTestPlanHTML.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/OpenTestPlanMTM.png b/docs/manual-test/getting-started/_img/create-a-test-plan/OpenTestPlanMTM.png new file mode 100644 index 00000000000..b5af51fa127 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/OpenTestPlanMTM.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/SelectTeamProject.png b/docs/manual-test/getting-started/_img/create-a-test-plan/SelectTeamProject.png new file mode 100644 index 00000000000..4c6ad7e99e9 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/SelectTeamProject.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/delete-test-plan.png b/docs/manual-test/getting-started/_img/create-a-test-plan/delete-test-plan.png new file mode 100644 index 00000000000..951d403d262 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/delete-test-plan.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/filter-icon.png b/docs/manual-test/getting-started/_img/create-a-test-plan/filter-icon.png new file mode 100644 index 00000000000..df119199de6 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/filter-icon.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/rename-test-plan.png b/docs/manual-test/getting-started/_img/create-a-test-plan/rename-test-plan.png new file mode 100644 index 00000000000..1c8a0a7d092 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/rename-test-plan.png differ diff --git a/docs/manual-test/getting-started/_img/create-a-test-plan/select-test-plan.png b/docs/manual-test/getting-started/_img/create-a-test-plan/select-test-plan.png new file mode 100644 index 00000000000..7079e99188c Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-a-test-plan/select-test-plan.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/AddParameters1.png b/docs/manual-test/getting-started/_img/create-test-cases/AddParameters1.png new file mode 100644 index 00000000000..94b6b973fd9 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/AddParameters1.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/AssignMultipleTesters.png b/docs/manual-test/getting-started/_img/create-test-cases/AssignMultipleTesters.png new file mode 100644 index 00000000000..ae0ca28b008 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/AssignMultipleTesters.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/AssignMultipleTestersEmail.png b/docs/manual-test/getting-started/_img/create-test-cases/AssignMultipleTestersEmail.png new file mode 100644 index 00000000000..cf1d71ddda0 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/AssignMultipleTestersEmail.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/AssignTester.png b/docs/manual-test/getting-started/_img/create-test-cases/AssignTester.png new file mode 100644 index 00000000000..2529864376c Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/AssignTester.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/ChangeToGridView.png b/docs/manual-test/getting-started/_img/create-test-cases/ChangeToGridView.png new file mode 100644 index 00000000000..d168ea6fba5 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/ChangeToGridView.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/ConvertSharedParameters.png b/docs/manual-test/getting-started/_img/create-test-cases/ConvertSharedParameters.png new file mode 100644 index 00000000000..252cadff680 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/ConvertSharedParameters.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/CreateSharedSteps.png b/docs/manual-test/getting-started/_img/create-test-cases/CreateSharedSteps.png new file mode 100644 index 00000000000..696f91ab2e4 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/CreateSharedSteps.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/CreateTest_1.png b/docs/manual-test/getting-started/_img/create-test-cases/CreateTest_1.png new file mode 100644 index 00000000000..d587ce85f46 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/CreateTest_1.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/CreateTest_3.png b/docs/manual-test/getting-started/_img/create-test-cases/CreateTest_3.png new file mode 100644 index 00000000000..c8a342ffa6f Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/CreateTest_3.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/GridContextMenu.png b/docs/manual-test/getting-started/_img/create-test-cases/GridContextMenu.png new file mode 100644 index 00000000000..3ae50f77533 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/GridContextMenu.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/GridEditSelected.png b/docs/manual-test/getting-started/_img/create-test-cases/GridEditSelected.png new file mode 100644 index 00000000000..7327a0a5297 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/GridEditSelected.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/GridViewSwitch.png b/docs/manual-test/getting-started/_img/create-test-cases/GridViewSwitch.png new file mode 100644 index 00000000000..4554ed2ae2c Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/GridViewSwitch.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/ManageSharedParameters.png b/docs/manual-test/getting-started/_img/create-test-cases/ManageSharedParameters.png new file mode 100644 index 00000000000..7881354bba2 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/ManageSharedParameters.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/NewTestCasesUsingGrid.png b/docs/manual-test/getting-started/_img/create-test-cases/NewTestCasesUsingGrid.png new file mode 100644 index 00000000000..5a50645abe0 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/NewTestCasesUsingGrid.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/OrderTestCases.png b/docs/manual-test/getting-started/_img/create-test-cases/OrderTestCases.png new file mode 100644 index 00000000000..bf36d81f4f5 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/OrderTestCases.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/SaveTestCasesInGrid.png b/docs/manual-test/getting-started/_img/create-test-cases/SaveTestCasesInGrid.png new file mode 100644 index 00000000000..6fe04120a9d Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/SaveTestCasesInGrid.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/TestHubTags.png b/docs/manual-test/getting-started/_img/create-test-cases/TestHubTags.png new file mode 100644 index 00000000000..4e345e3d931 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/TestHubTags.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/TestSuites.png b/docs/manual-test/getting-started/_img/create-test-cases/TestSuites.png new file mode 100644 index 00000000000..be32ca3c45d Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/TestSuites.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/UseColumnOptions.png b/docs/manual-test/getting-started/_img/create-test-cases/UseColumnOptions.png new file mode 100644 index 00000000000..e2089fbedd0 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/UseColumnOptions.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/delete-test-case.png b/docs/manual-test/getting-started/_img/create-test-cases/delete-test-case.png new file mode 100644 index 00000000000..b3a1ddcda90 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/delete-test-case.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/open-test-case.png b/docs/manual-test/getting-started/_img/create-test-cases/open-test-case.png new file mode 100644 index 00000000000..6ba0c31059b Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/open-test-case.png differ diff --git a/docs/manual-test/getting-started/_img/create-test-cases/rename-test-case.png b/docs/manual-test/getting-started/_img/create-test-cases/rename-test-case.png new file mode 100644 index 00000000000..17a476303f9 Binary files /dev/null and b/docs/manual-test/getting-started/_img/create-test-cases/rename-test-case.png differ diff --git a/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/build-keep-indefinitely.png b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/build-keep-indefinitely.png new file mode 100644 index 00000000000..e2cb5b38fd9 Binary files /dev/null and b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/build-keep-indefinitely.png differ diff --git a/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/edit-build-def.png b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/edit-build-def.png new file mode 100644 index 00000000000..9ae14492835 Binary files /dev/null and b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/edit-build-def.png differ diff --git a/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/team-project-control-panel-jamal.png b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/team-project-control-panel-jamal.png new file mode 100644 index 00000000000..1483c6039e1 Binary files /dev/null and b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/team-project-control-panel-jamal.png differ diff --git a/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/team-project-test-data-retention-limits.png b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/team-project-test-data-retention-limits.png new file mode 100644 index 00000000000..b5a4661c6a3 Binary files /dev/null and b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/team-project-test-data-retention-limits.png differ diff --git a/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/vso-git-keep-test-data-builds.png b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/vso-git-keep-test-data-builds.png new file mode 100644 index 00000000000..24229b0fa5f Binary files /dev/null and b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/vso-git-keep-test-data-builds.png differ diff --git a/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/vso-keep-test-data-builds.png b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/vso-keep-test-data-builds.png new file mode 100644 index 00000000000..a8eb2fde9d7 Binary files /dev/null and b/docs/manual-test/getting-started/_img/how-long-to-keep-test-results/vso-keep-test-data-builds.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-01.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-01.png new file mode 100644 index 00000000000..8ae48398cd7 Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-01.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-02.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-02.png new file mode 100644 index 00000000000..8f98f062bdc Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-02.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-03.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-03.png new file mode 100644 index 00000000000..59e072f0d96 Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-03.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-05.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-05.png new file mode 100644 index 00000000000..bb34092fdb8 Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-05.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-06.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-06.png new file mode 100644 index 00000000000..1b84f22aa2d Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-06.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-07.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-07.png new file mode 100644 index 00000000000..9360acd72e6 Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-07.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-08.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-08.png new file mode 100644 index 00000000000..e47753ef304 Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-08.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-09.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-09.png new file mode 100644 index 00000000000..8a0eb02a387 Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-09.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-10.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-10.png new file mode 100644 index 00000000000..e87f8a179e8 Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/getstarted-10.png differ diff --git a/docs/manual-test/getting-started/_img/perform-exploratory-tests/open-extension.png b/docs/manual-test/getting-started/_img/perform-exploratory-tests/open-extension.png new file mode 100644 index 00000000000..3a3a7b6034f Binary files /dev/null and b/docs/manual-test/getting-started/_img/perform-exploratory-tests/open-extension.png differ diff --git a/docs/manual-test/getting-started/_img/record-play-manual-tests/create-recording.png b/docs/manual-test/getting-started/_img/record-play-manual-tests/create-recording.png new file mode 100644 index 00000000000..9e2ea06e0ec Binary files /dev/null and b/docs/manual-test/getting-started/_img/record-play-manual-tests/create-recording.png differ diff --git a/docs/manual-test/getting-started/_img/record-play-manual-tests/delete-actions.png b/docs/manual-test/getting-started/_img/record-play-manual-tests/delete-actions.png new file mode 100644 index 00000000000..a863066b847 Binary files /dev/null and b/docs/manual-test/getting-started/_img/record-play-manual-tests/delete-actions.png differ diff --git a/docs/manual-test/getting-started/_img/record-play-manual-tests/finish-rerecording-shared-steps.png b/docs/manual-test/getting-started/_img/record-play-manual-tests/finish-rerecording-shared-steps.png new file mode 100644 index 00000000000..8955da52f8e Binary files /dev/null and b/docs/manual-test/getting-started/_img/record-play-manual-tests/finish-rerecording-shared-steps.png differ diff --git a/docs/manual-test/getting-started/_img/record-play-manual-tests/pause-recording.png b/docs/manual-test/getting-started/_img/record-play-manual-tests/pause-recording.png new file mode 100644 index 00000000000..bdea3d2ec3d Binary files /dev/null and b/docs/manual-test/getting-started/_img/record-play-manual-tests/pause-recording.png differ diff --git a/docs/manual-test/getting-started/_img/record-play-manual-tests/play-check-result.png b/docs/manual-test/getting-started/_img/record-play-manual-tests/play-check-result.png new file mode 100644 index 00000000000..463fb2598fc Binary files /dev/null and b/docs/manual-test/getting-started/_img/record-play-manual-tests/play-check-result.png differ diff --git a/docs/manual-test/getting-started/_img/record-play-manual-tests/rerecord-shared-steps.png b/docs/manual-test/getting-started/_img/record-play-manual-tests/rerecord-shared-steps.png new file mode 100644 index 00000000000..8a699eb3f1b Binary files /dev/null and b/docs/manual-test/getting-started/_img/record-play-manual-tests/rerecord-shared-steps.png differ diff --git a/docs/manual-test/getting-started/_img/record-play-manual-tests/start-test-no-overwrite.png b/docs/manual-test/getting-started/_img/record-play-manual-tests/start-test-no-overwrite.png new file mode 100644 index 00000000000..21d29fe116e Binary files /dev/null and b/docs/manual-test/getting-started/_img/record-play-manual-tests/start-test-no-overwrite.png differ diff --git a/docs/manual-test/getting-started/_img/record-play-manual-tests/start-test.png b/docs/manual-test/getting-started/_img/record-play-manual-tests/start-test.png new file mode 100644 index 00000000000..078431d97aa Binary files /dev/null and b/docs/manual-test/getting-started/_img/record-play-manual-tests/start-test.png differ diff --git a/docs/manual-test/getting-started/_img/record-play-manual-tests/text-parameters-bound.png b/docs/manual-test/getting-started/_img/record-play-manual-tests/text-parameters-bound.png new file mode 100644 index 00000000000..9f99a281827 Binary files /dev/null and b/docs/manual-test/getting-started/_img/record-play-manual-tests/text-parameters-bound.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_2.png b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_2.png new file mode 100644 index 00000000000..4eca15e7e78 Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_2.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_3.png b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_3.png new file mode 100644 index 00000000000..cf9d02fb1e1 Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_3.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_4.png b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_4.png new file mode 100644 index 00000000000..4cbe05c9945 Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_4.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_5.png b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_5.png new file mode 100644 index 00000000000..c3d64d36cdf Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_5.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_8.png b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_8.png new file mode 100644 index 00000000000..14f803e1def Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_8.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_9.png b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_9.png new file mode 100644 index 00000000000..8efee81b002 Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/RunTest_9.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/RunTestsRunSuite.png b/docs/manual-test/getting-started/_img/run-manual-tests/RunTestsRunSuite.png new file mode 100644 index 00000000000..c3d7fd1463a Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/RunTestsRunSuite.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/RunTestsStartApp.png b/docs/manual-test/getting-started/_img/run-manual-tests/RunTestsStartApp.png new file mode 100644 index 00000000000..8e2a9900c40 Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/RunTestsStartApp.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/runtest_11.png b/docs/manual-test/getting-started/_img/run-manual-tests/runtest_11.png new file mode 100644 index 00000000000..7401514b09a Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/runtest_11.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/select-build-for-webrunner.png b/docs/manual-test/getting-started/_img/run-manual-tests/select-build-for-webrunner.png new file mode 100644 index 00000000000..1c52fa823ab Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/select-build-for-webrunner.png differ diff --git a/docs/manual-test/getting-started/_img/run-manual-tests/view-bugs.png b/docs/manual-test/getting-started/_img/run-manual-tests/view-bugs.png new file mode 100644 index 00000000000..27a28d7e42e Binary files /dev/null and b/docs/manual-test/getting-started/_img/run-manual-tests/view-bugs.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/ConfigureChart.png b/docs/manual-test/getting-started/_img/track-test-status/ConfigureChart.png new file mode 100644 index 00000000000..6bd79b72744 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/ConfigureChart.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/ConfigureChart2.png b/docs/manual-test/getting-started/_img/track-test-status/ConfigureChart2.png new file mode 100644 index 00000000000..c698aa4e78e Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/ConfigureChart2.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/DefaultChart.png b/docs/manual-test/getting-started/_img/track-test-status/DefaultChart.png new file mode 100644 index 00000000000..f7f045d1857 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/DefaultChart.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/EditDeletePinChart.png b/docs/manual-test/getting-started/_img/track-test-status/EditDeletePinChart.png new file mode 100644 index 00000000000..0b5d93dfe41 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/EditDeletePinChart.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/ExampleBurndownReadiness.png b/docs/manual-test/getting-started/_img/track-test-status/ExampleBurndownReadiness.png new file mode 100644 index 00000000000..bcbf3d55a13 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/ExampleBurndownReadiness.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/ExampleOutcome.png b/docs/manual-test/getting-started/_img/track-test-status/ExampleOutcome.png new file mode 100644 index 00000000000..37cb64c3338 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/ExampleOutcome.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/ExampleTesterTestsLeft.png b/docs/manual-test/getting-started/_img/track-test-status/ExampleTesterTestsLeft.png new file mode 100644 index 00000000000..30cce9113b3 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/ExampleTesterTestsLeft.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/ExampleUserStories.png b/docs/manual-test/getting-started/_img/track-test-status/ExampleUserStories.png new file mode 100644 index 00000000000..80aba4ecea4 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/ExampleUserStories.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/NewTestCaseChart.png b/docs/manual-test/getting-started/_img/track-test-status/NewTestCaseChart.png new file mode 100644 index 00000000000..4e423d34426 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/NewTestCaseChart.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/NewTestResultChart.png b/docs/manual-test/getting-started/_img/track-test-status/NewTestResultChart.png new file mode 100644 index 00000000000..e4eff62ef2e Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/NewTestResultChart.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/OverviewTrackResults.png b/docs/manual-test/getting-started/_img/track-test-status/OverviewTrackResults.png new file mode 100644 index 00000000000..8ea3985c616 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/OverviewTrackResults.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/ShowDetailsPane.png b/docs/manual-test/getting-started/_img/track-test-status/ShowDetailsPane.png new file mode 100644 index 00000000000..ab551553f8d Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/ShowDetailsPane.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/TestResultsPane.png b/docs/manual-test/getting-started/_img/track-test-status/TestResultsPane.png new file mode 100644 index 00000000000..c3408c1a4c5 Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/TestResultsPane.png differ diff --git a/docs/manual-test/getting-started/_img/track-test-status/configure-dashboard-widget.png b/docs/manual-test/getting-started/_img/track-test-status/configure-dashboard-widget.png new file mode 100644 index 00000000000..dd75c6a447c Binary files /dev/null and b/docs/manual-test/getting-started/_img/track-test-status/configure-dashboard-widget.png differ diff --git a/docs/manual-test/getting-started/_img/user-acceptance-testing/uat10.png b/docs/manual-test/getting-started/_img/user-acceptance-testing/uat10.png new file mode 100644 index 00000000000..65b9031edad Binary files /dev/null and b/docs/manual-test/getting-started/_img/user-acceptance-testing/uat10.png differ diff --git a/docs/manual-test/getting-started/_img/user-acceptance-testing/uat5.png b/docs/manual-test/getting-started/_img/user-acceptance-testing/uat5.png new file mode 100644 index 00000000000..cd8a1ea555b Binary files /dev/null and b/docs/manual-test/getting-started/_img/user-acceptance-testing/uat5.png differ diff --git a/docs/manual-test/getting-started/_img/user-acceptance-testing/uat8.png b/docs/manual-test/getting-started/_img/user-acceptance-testing/uat8.png new file mode 100644 index 00000000000..e817d4137b3 Binary files /dev/null and b/docs/manual-test/getting-started/_img/user-acceptance-testing/uat8.png differ diff --git a/docs/manual-test/getting-started/create-a-test-plan.md b/docs/manual-test/getting-started/create-a-test-plan.md new file mode 100644 index 00000000000..84c9bb1a846 --- /dev/null +++ b/docs/manual-test/getting-started/create-a-test-plan.md @@ -0,0 +1,93 @@ +--- +title: Create test plans in Visual Studio Team Services +description: Create test plans in VSTS to track manual tests during sprints or milestones +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.topic: get-started-article +ms.assetid: 99FD819E-A861-4F28-A486-FD452DB65D69 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Create a test plan and test suite + +[!INCLUDE [version-header-ts-tfs](../_shared/version-header-ts-tfs.md)] + +Create test plans to track manual testing +for sprints or milestones. That way, +you can see when the testing for a +specific sprint or milestone is complete. + +Test plans are used to group together test suites and individual test cases. +This includes static test suites, requirement-based suites, and +[query-based suites](../reference-qa.md#query-based-suites). You can add individual test cases to a test plan without creating +a test suite if you wish, but using a test suite provides a way to group +test cases for separate testing scenarios within a single test plan. + + +## Create a test plan + +1. If you haven't already, + [sign up for Visual Studio Team Services](https://www.visualstudio.com/products/visual-studio-team-services-vs), + [create your team project](../../accounts/account-management.md), + and [create your backlog](../../work/backlogs/create-your-backlog.md). + +1. In VSTS, select your team project. + (If you haven't been here before, use Browse.) + + ![Select team project from account overview page](_img/create-a-test-plan/SelectTeamProject.png) + +1. Go to the **Test Plans** tab of the **Test** hub. Create a test plan for your current sprint. + + ![In test plan explorer, open the New (+) list, then click Test plan](_img/create-a-test-plan/CreateATestPlan1a.png) + +1. Name the test plan. Check the area path and iteration. Then choose **Create*. + + ![Add test plan details, then click Create](_img/create-a-test-plan/CreateATestPlan2.png) + + +## Add a test suite and select backlog items to test + +1. Now add test suites for the backlog items that need manual tests. + (These backlog items could be user stories, requirements, or other + work items based on the setup of your team project.) + + ![In test plan explorer pane, New (+) list, then click Requirement-based suite](_img/create-a-test-plan/AddRequirementSuitesToTestPlan.png) + + You use requirement-based suites to group your test cases together. + That way, you can track the testing status of a backlog item. + Each test case that you add to a requirement-based test suite is + automatically linked to the backlog item. + +1. Add a clause to filter by the iteration path for the sprint. + Run the query to view the matching backlog items. + + ![Add clause to filter by iteration, then run query to view results](_img/create-a-test-plan/AddRequirementSuitesToTestPlan2.png) + +1. Select the backlog items that you want to test this sprint. + Add them as requirements to your test plan by creating test suites from them. + + ![Select backlog items, then click Create suites](_img/create-a-test-plan/AddRequirementSuitesToTestPlan3.png) + + Now you've created a requirement-based test suite for each backlog item. + + +## Find a test plan + +* The **Test Plans** page shows a single test plan. Use the + ![filter-icon](_img/create-a-test-plan/filter-icon.png) icon or the drop-down + list at the top of the left column select the test plan you want to work with. + + ![Selecting a test plan from the drop-down list](_img/create-a-test-plan/select-test-plan.png) + +Test plans, suites, and test cases are stored in VSTS and TFS as special types of work items. + +## See also + +* [FAQs for manual testing](../reference-qa.md#testplans) + +## Next step + +> [!div class="nextstepaction"] +> [Create manual test cases](create-test-cases.md#test-cases) diff --git a/docs/manual-test/getting-started/create-test-cases.md b/docs/manual-test/getting-started/create-test-cases.md new file mode 100644 index 00000000000..f7e5712a91d --- /dev/null +++ b/docs/manual-test/getting-started/create-test-cases.md @@ -0,0 +1,75 @@ +--- +title: Create manual tests - VSTS and Team Foundation Server +description: Create manual tests in VSTS and TFS to make sure your deliverables meet users' needs +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: C3C10A82-C7F2-4AB6-9CED-B43DAF722800 +ms.topic: get-started-article +ms.manager: douge +ms.author: ahomer +ms.date: 08/14/2016 +--- + +# Create manual test cases + +[!INCLUDE [version-header-ts-tfs](../_shared/version-header-ts-tfs.md)] + + +Create manual test cases to check that each of the deliverables +meet your users' needs. Organize your test cases by adding test +cases to test suites. Then choose which testers you want to run +the tests. + + +## Create test cases + +1. If you haven't already, + [create a test plan and requirement-based test suites](create-a-test-plan.md). + +1. Select a requirement-based test suite, and then create a + test case for that suite. + + ![Select the test suite for a backlog item, then choose New | New Test Case](_img/create-test-cases/CreateTest_1.png) + + The test suite that you selected was created from a backlog item. + When you add a test case to this kind of suite, the test case is + linked automatically to the backlog item. + +1. Add test steps with actions and expected results so that + any team member can run the test. You can add attachments to + a step if you want. + + ![Create steps for a new manual test case](_img/create-test-cases/CreateTest_3.png) + + Now you've created a test case that you can run. + + +## Assign testers + +1. You can reassign test cases so that another tester can + run them. Select the tests that you want to reassign. Then + open the shortcut menu (choose the "..." ellipses or right-click) + and select the tester you want to run the tests. + + ![Reassign tests to a different tester](_img/create-test-cases/AssignTester.png) + + Or, you can assign all the test cases in a test suite to multiple testers. + This is useful for acceptance testing. + + ![On the test suite shortcut menu, choose Assign testers to run all tests](_img/create-test-cases/AssignMultipleTesters.png) + +1. After you select the testers, email them so they + know the tests are ready for them to run. (You just need + [Basic access](https://www.visualstudio.com/products/visual-studio-online-Basic-vs) + to run tests from VSTS.) + + ![Assign testers to run all tests and send emails to them](_img/create-test-cases/AssignMultipleTestersEmail.png) + +## See also + +* [FAQs for manual testing](../reference-qa.md#testcases) + +## Next step + +> [!div class="nextstepaction"] +> [Run manual tests](run-manual-tests.md) diff --git a/docs/manual-test/getting-started/how-long-to-keep-test-results.md b/docs/manual-test/getting-started/how-long-to-keep-test-results.md new file mode 100644 index 00000000000..036a468bcea --- /dev/null +++ b/docs/manual-test/getting-started/how-long-to-keep-test-results.md @@ -0,0 +1,84 @@ +--- +title: Manage how long to keep test results in Visual Studio Team Services +description: Manage how long VSTS keeps you test results +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 7a9e6fbe-bdd0-4cb5-8e57-f4d8d2126218 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Control how long to keep test results in VSTS + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +Running tests, especially automated ones, generates lots of data. +To keep your test system responsive and performing well, +have a policy to clear test results that you don't need anymore. +Delete automated test results when you delete your builds. +You can keep manual test results while you're still reviewing them, +for example, up to a year. + + +## Manual test results + +To delete manual test results after a specific number of days, +set the retention limit at the team project level. +Visual Studio Team Services (VSTS) keeps manual test results related to builds, +even after you delete those builds. That way, build policies don't delete +your test results before you can analyze the data. + +1. Sign to your VSTS account (```https://{youraccount}.visualstudio.com```). + You'll need at least team project administrator permissions. + +1. Go to your team project. + +1. Go to the team project control panel. + + ![Team project control panel](_img/how-long-to-keep-test-results/team-project-control-panel-jamal.png) + +1. Select a limit for how long you want to keep manual test data. + + ![Select test data retention limits](_img/how-long-to-keep-test-results/team-project-test-data-retention-limits.png) + +## Automated test results + +### Automated test results associated with builds + +By default, VSTS keeps automated test results related to builds +only as long as you keep those builds. To keep test results after you delete your builds, +edit the build retention policy. If you use Git for version control, +you can specify how long to keep automated test results based on the branch. + +1. Sign to your VSTS account (```https://{youraccount}.visualstudio.com```). + You'll need at least build level permissions to edit build definitions. + +1. Go to your team project. Find and edit your build definition. + + ![Build definition](_img/how-long-to-keep-test-results/edit-build-def.png) + + By default, test results are deleted when the build is deleted. + + ![Test results are deleted when builds are deleted](_img/how-long-to-keep-test-results/vso-keep-test-data-builds.png) + +1. If you use Git, and you have more than one branch, + set the branch filter to delete test results and builds + in one branch. Meanwhile, you can keep test results in another branch, + even though you delete the builds in that other branch. + + ![Delete test results by branch](_img/how-long-to-keep-test-results/vso-git-keep-test-data-builds.png) + +### Automated test results not associated with builds or orphaned from deleted builds + +To clean up automated test results that are left over from deleted +builds or test results that aren't related to builds, +for example, results published from external test systems, +set the retention limits at the team project level. +[Learn more](#manual-test-results-limits) + +## See also + +* [FAQs for manual testing](../reference-qa.md#manageresults) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/getting-started/perform-exploratory-tests.md b/docs/manual-test/getting-started/perform-exploratory-tests.md new file mode 100644 index 00000000000..baae679a2b2 --- /dev/null +++ b/docs/manual-test/getting-started/perform-exploratory-tests.md @@ -0,0 +1,102 @@ +--- +title: Exploratory test your web app +description: Exploratory test your web app in VSTS from your browser with the Test & Feedback extension +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 1426e139-c7d4-4270-8db7-af7d6da80574 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Install the Test & Feedback extension + +[!INCLUDE [version-header-ts-tfs](../_shared/version-header-ts-tfs.md)] + +The **Test & Feedback extension** helps teams perform exploratory testing and provide feedback. +Everyone in the team, such as developers, product owners, managers, UX or UI engineers, +marketing teams, early adopters, and other stakeholders can use the +extension to submit bugs or provide feedback and contribute to the +quality of your product. + + +## Install the extension + +1. Check the list of [supported browsers](../reference-qa.md#browser-support) and decide which you want to use. + +1. Download and install your chosen browser, if you haven't already, then open it. + +1. Go to [Visual Studio Marketplace > Test & Feedback](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web) + and choose **Install**. + + ![Visual Studio Marketplace, Test & Feedback extension, Install](_img/perform-exploratory-tests/getstarted-01.png) + +1. Follow the instructions shown to install the Test & Feedback extension in your browser: + + - If you are using Google Chrome, choose the **Install** link to open the + Google Chrome web store and follow the instructions to install the extension. + + ![Install extension on Chrome](_img/perform-exploratory-tests/getstarted-02.png) + + ![Install extension on Chrome](_img/perform-exploratory-tests/getstarted-03.png) + + - If you are using Mozilla Firefox 50.0 and higher, choose the **Download** link + and save the file to a local folder on your computer. + + ![Install extension on Firefox](_img/perform-exploratory-tests/getstarted-07.png) + + Select and drag the downloaded file and drop it on any tab in Firefox. + + ![Install extension on Firefox](_img/perform-exploratory-tests/getstarted-08.png) + + Choose **Install**. + + ![Install extension on Firefox](_img/perform-exploratory-tests/getstarted-09.png) + + ![Install extension on Firefox](_img/perform-exploratory-tests/getstarted-10.png) + +>You need to install the extension or add-on only once. Afterwards your browser will +update it automatically. + + +## Select an exploratory testing mode + +1. Open the extension you installed in your browser by choosing the + ![Test and Feedback](../_img/_shared/exp-test-icon.png) icon. + + ![Open extension](_img/perform-exploratory-tests/open-extension.png) + +1. Decide if you want to use the extension in Connected or Standalone mode. + + ![Choose connection mode](_img/perform-exploratory-tests/getstarted-06.png) + + **[Connected mode](../connected-mode-exploratory-testing.md)** + Available to all users of VSTS and TFS 2015 or later: + + - Users with **Basic** access: Full capture and create capabilities + to submit bugs, tasks, and test cases. Includes collaboration + capabilities such as end-to-end traceability, rich insights + across completed exploratory sessions, simplified tracking + and triaging for bugs and tasks, and more. + - Users with **Stakeholder** access: Full capture and create capabilities, + except for test cases, to submit feedback and respond to feedback + requests from the team. + - Feedback experience is available only in VSTS and TFS 2017 or later.

        + + **[Standalone mode](../standalone-mode-exploratory-testing.md)** + Available to everyone. No connection to VSTS or TFS is required. Take notes and screenshots with + inline annotations to capture issues. Create bugs and export + a session report to share findings. + +>If you have problems connecting to VSTS or TFS, you may find +the topic [TF31002: Unable to connect](../../work/reference/error/tf31002-unable-connect-tfs.md) useful. + +## See also + +* [FAQs for manual testing](../reference-qa.md#tandfext) + +## Next step + +> [!div class="nextstepaction"] +> [Use the Test & Feedback extension in Connected mode](../connected-mode-exploratory-testing.md) diff --git a/docs/manual-test/getting-started/record-play-back-manual-tests.md b/docs/manual-test/getting-started/record-play-back-manual-tests.md new file mode 100644 index 00000000000..c4d26ecfff8 --- /dev/null +++ b/docs/manual-test/getting-started/record-play-back-manual-tests.md @@ -0,0 +1,128 @@ +--- +title: Record and play back manual tests | Visual Studio +description: Record and play back manual tests +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 6B6E991A-969F-4AB3-8031-9BFF260D9142 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Record and play back manual tests + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +Record keystrokes and mouse actions with Microsoft Test Manager +while you are testing an app. You can then play back your actions +quickly and accurately the next time you run the test. + +Playback is very useful for reproducing bugs. You can retrace the +exact actions that the tester performed to the point where the +problem was found. Playback also helps you run a test with +[different data](../repeat-test-with-different-data.md), +on [multiple configurations](../test-different-configurations.md), +or where you have [shared steps](../mtm/share-steps-between-test-cases.md) +that are the same in many test cases. Playback also speeds up +regression testing - that is, tests that you run from one sprint +to the next to make sure that everything still works correctly. + +You can record and play back tests in a wide range of desktop apps, +and also web apps that you access through a supported browser. +For a detailed list, see +[Supported configurations and platforms for coded UI tests and action recordings](https://msdn.microsoft.com/library/dd380742). + +## Run Microsoft Test Manager on your client machine + +To record and play back actions, you have to install +Microsoft Test Manager on the machine where you'll +run your tests. If you're testing a desktop app, +install the latest version of the app and Microsoft +Test Manager on the same machine. If you're testing +a web-based app, install the app on a test server, +and run Microsoft Test Manager on the machine where +you'll run your web browser. + +To get Microsoft Test Manager, install Visual Studio Test Professional +or Visual Studio Enterprise. + +### Run a test case + +1. [Connect Microsoft Test Manager](../mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan.md) + to your team project, and select your current test plan. + +1. [Select a test case and run it](../mtm/run-manual-tests-with-microsoft-test-manager.md). + + ![Start the test from Microsoft Test Manager.](_img/record-play-manual-tests/start-test.png) + +## Record your actions during a test run + +1. In the **Start Test** window, + select **Create action recording**. + + ![Create an action recording.](_img/record-play-manual-tests/create-recording.png) + +1. After each step, make sure to mark that step **Pass** or **Fail**. + +1. If you want to pause your test, choose **Pause**. + + ![Pause the recording](_img/record-play-manual-tests/pause-recording.png) + +1. After you finish your test run, choose **End Test**. + This makes sure the recording assigns your actions to the correct steps. + +**Caution:** All your keystrokes and gestures might be recorded, +including passwords, emails, chat messages, and other sensitive data. + +### Delete mistakes + +Open the editing panel at the bottom of the test runner. +You can delete actions there: + +![Edit the recording inline](_img/record-play-manual-tests/delete-actions.png) + +Alternatively, you can run the test again and choose **Overwrite action recording**. + +### Keep or re-record shared steps + +If you come to a sequence of shared steps, +you might have already recorded them in an earlier test case. +You can either keep the earlier recording or record them now, like this: + +![Record a shared step](_img/record-play-manual-tests/rerecord-shared-steps.png) + +You have to indicate when you finish recording the shared steps: + +![Record a shared step](_img/record-play-manual-tests/finish-rerecording-shared-steps.png) + +### Capture parameter values + +If a test step requires a parameter value that you must type as text, +that text is recognized and bound into the recording. When you play the +recording back with other parameter values, the new values are used instead. + +![Parameters are bound if you type them.](_img/record-play-manual-tests/text-parameters-bound.png) + +Parameter values aren't bound if they're not typed as text, for example, +when values are selected instead. When you play the recording back, +you'll have to manually perform that step. + +## Play back an action recording + +1. [Select your test and run it](../mtm/run-manual-tests-with-microsoft-test-manager.md). + Don't select the overwrite option in the **Start Test** dialog box. + + ![Start the test without overwriting the recording](_img/record-play-manual-tests/start-test-no-overwrite.png) + + You can play the whole test, or play individual steps. + The test runner will replay the keystrokes and mouse actions that you recorded. + +1. You have to check the result of each step. The recording doesn't check the outputs. + + ![Play each step and then check the result.](_img/record-play-manual-tests/play-check-result.png) + +## See Also + +* [FAQs for recording and playing back manual tests](../reference-qa.md#mtmqna) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/getting-started/run-manual-tests.md b/docs/manual-test/getting-started/run-manual-tests.md new file mode 100644 index 00000000000..a8517a88ddd --- /dev/null +++ b/docs/manual-test/getting-started/run-manual-tests.md @@ -0,0 +1,117 @@ +--- +title: Run manual tests in Visual Studio Team Services +description: Run manual tests and record their results with Microsoft Test Runner and Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 616919f3-7339-4813-9dcf-82ead3476b1a +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Run manual tests + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +Run your manual tests and record the test results for each test step +using Microsoft Test Runner. If you find an issue when testing, +use Test Runner to create a bug. Test steps, screenshots, and comments +are automatically included in the bug. + +> You just need [Basic access](https://www.visualstudio.com/team-services/compare-features/) +to run tests that have been assigned to you with Visual Studio Team Services (VSTS). +Learn more about the [access](https://www.visualstudio.com/pricing/visual-studio-online-pricing-vs) +that you need for more advanced testing features. + + +## Run tests for web apps + +1. If you haven't already, [create your manual tests](create-test-cases.md#test-cases). + +1. Select a test from a test suite and run it. + + ![Select and run a specific test](_img/run-manual-tests/RunTest_2.png) + + Microsoft Test Runner opens and runs in a new browser. + +1. Start the app that you want to test. Your app doesn't have to run on + the same computer as Test Runner. You just use Test Runner to record which + test steps pass or fail while you manually run a test. For example, you + might run Test Runner on a desktop computer and run your Windows 8 store + app that you are testing on a Windows 8 tablet. + + ![Use Microsoft Test Runner to record your test results](_img/run-manual-tests/RunTestsStartApp.png) + +1. Mark each test step as either passed or failed based on the expected results. + If a test step fails, you can enter a comment on why it failed. + + ![Mark test steps](_img/run-manual-tests/RunTest_3.png) + +1. Create a bug to describe what failed. + + ![Submit a bug](_img/run-manual-tests/RunTest_4.png) + + The steps and your comments are automatically added to the bug. Also, + the test case is linked to the bug. + + If Test Runner is running in a web browser window, + you can copy a screenshot from the clipboard directly into the bug. + +1. You can see any bugs that you have reported during your test session. + + ![Bugs logged](_img/run-manual-tests/RunTest_5.png) + +1. When you've run all your tests, save the results and close Test Runner. + All the test results are stored in VSTS. + [How do I resume testing, or run one or more tests again?](../reference-qa.md#qanda) + +1. View the testing status for your test suite. + You see the most recent results for each test. + + ![View test results](_img/run-manual-tests/RunTest_8.png) + +1. Open a test and choose the test case in the **Related Work** section. + Then use the **Child** links in the **Related Work** section of that + work item to view the bugs filed by the tester. + + ![View bugs filed](_img/run-manual-tests/view-bugs.png) + +[Can I run tests offline and then import the results?](../reference-qa.md#runoffline) + + +## Run tests for desktop apps + +If the only data you want to collect from your desktop app +is screen recordings, use the web-based Microsoft Test Runner +in the same way as [described above](#run-web) for web apps. + +However, if you want to collect more types of data, run your tests using +[Microsoft Test Manager client](../mtm/run-manual-tests-with-microsoft-test-manager.md). + +1. Launch the test runner + client from the **Test** hub by choosing **Run with options** + from the **Run** menu. + + ![Launching the test runner client](../_img/_shared/collect-diagnostic-data-16.png) + +1. In the **Run with options** dialog, select **Microsoft + Test Runner 2017 or later**, choose the data collectors you + want to enable, and optionally select a build to associate + with your test run. + + ![Selecting the Test Runner and options](../_img/_shared/run-manual-tests-19.png) + +1. Choose **OK** to start testing. For more information, see + [Collect diagnostic data](../collect-diagnostic-data.md#collect-desktop). + +[Can I run tests offline and then import the results?](../reference-qa.md#runoffline) + +## See also + +* [FAQs for manual testing](../reference-qa.md#runtests) + +## Next step + +> [!div class="nextstepaction"] +> [View your test progress](track-test-status.md) diff --git a/docs/manual-test/getting-started/track-test-status.md b/docs/manual-test/getting-started/track-test-status.md new file mode 100644 index 00000000000..fc5d51d1dc2 --- /dev/null +++ b/docs/manual-test/getting-started/track-test-status.md @@ -0,0 +1,204 @@ +--- +title: Track test status in Visual Studio Team Services +description: Track test status with charts and graphs using Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: cd74abc1-44c0-4390-8d5d-4d1afbd4606c +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Track test status + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +Quickly view the status of your testing using lightweight charts. +For example, find out how many test cases are ready to run, +or how many tests are passing and failing in each test suite. +You can pin these charts to your home page, then all the team +can see the progress at a glance. + +![On the Charts tab, view test plan status with charts that you created](_img/track-test-status/OverviewTrackResults.png) + +## Track testing progress + +Use test results charts to track how your testing is going. +Choose from a fixed set of pre-populated fields related to results. +By default, a pie chart is created for each test plan. +This chart is grouped by the outcome field to show the latest results +for all the tests in the test plan. + +View this default chart from the Charts tab. + +![Select test plan. Go to Charts tab to view default chart](_img/track-test-status/DefaultChart.png) + +Add your own charts for test results to visualize what's important +for your team. If you already know how to add a chart, jump to the +[examples](#TestResultsExamples) below of charts that you can create. + +1. Select the test plan or test suite for your chart in the + Test plan tab. Then create a new chart. + + ![On the Charts tab; click New. Select New Test Result Chart](_img/track-test-status/NewTestResultChart.png) + +1. Select the chart type. Based on the chart, configure the + fields that you want to use to group by, or for rows and columns. + + ![Name your chart. Select the field values. To save, click OK](_img/track-test-status/ConfigureChart.png) + + All charts roll up the information for any child test suites + of the test plan or test suite that you selected. + +1. Save the chart. Now it will be displayed in the charts tab + for the test plan or test suite that you selected. + + +### Test results examples + +**What's the test status for a specific test suite?** + +Select the test suite from the Test plan tab and add +a test results pie chart. Group by outcome. + +![On the chart tab, choose New test result chart; choose Pie chart. In Group By, select Outcome](_img/track-test-status/ExampleOutcome.png) + +**What's the test status for user stories that my team's testing this sprint?** + +If you have created requirement-based test suites in your test +plan for your user stories, you can create a chart for this. + +1. Group these requirement-based test suites together + in a static test suite. + +1. Select this static test suite in the Test plan tab. + +1. Add a test results stacked bar chart. Choose Suite + as the rows pivot and Outcome as the columns pivot. + + ![For Rows, select Suite. For Columns, select Outcome. To save, click OK](_img/track-test-status/ExampleUserStories.png) + +**How many tests has each tester left to run?** + +Select your test plan from the Test plan tab and add a test +results pivot table chart. Choose Tester as the rows pivot and +Outcome as the columns pivot. + +![For Rows, select Tester. For Columns, select Outcome. To save, click OK](_img/track-test-status/ExampleTesterTestsLeft.png) + +**How can I check quality based on the configuration?** + +Use either a stacked bar chart or a pivot table chart. +Choose Configuration as the rows pivot and Outcome as +the columns pivot. + +**How can I track why tests are failing for my team?** + +For failure analysis, use either a stacked bar chart +or a pivot table chart. Choose Tester for the rows +and Failure type for the columns. (Failure type for +test results can only be set using Microsoft Test Manager.) + +**How can I track the resolution for failing tests for my team?** + +For resolution analysis, use either a stacked bar chart +or a pivot table chart. Choose Tester for the rows and +Resolution for the columns. (Resolution type for test +results can only be set using Microsoft Test Manager.) + +## Track test case status + +Use test case charts to find out the progress of your +test case authoring. The charts for test cases give +you the flexibility to report on columns that you add +to the Tests tab. By default, test case fields are not +added to the view in the Tests tab. + +If you already know how to add a chart, jump to the +[examples](#ExamplesTestCase) below of charts that you can +create for test cases. + +1. Add any fields you want to use for your test case chart + from the Tests tab with Column options. Then the fields will + appear as choices in the drop-down lists for grouping for + your test case charts. + +1. Select the test plan or test suite for your chart in + the Test plan tab. Then add a test case chart. + + ![Test hub: select test suite; Charts tab; New test case chart](_img/track-test-status/NewTestCaseChart.png) + + All charts roll up the information for any child test suites + of the test plan or test suite that you selected. + +1. Select the chart type. Based on the chart, configure the + fields that you want to use to group by, for rows and columns, + or the range (trend charts only). + + ![Choose the chart type; choose the fields for the chart](_img/track-test-status/ConfigureChart2.png) + + You can't group by test suite for the test case charts. + +1. Save the chart. Now it will be displayed in the charts + tab for the test plan or test suite that you selected. + + +### Test case examples + +**How can I track burndown for test case creation?** + +Use a stacked area trend chart to view the burndown for +how many test cases are ready to be run. Choose State +for the stack by field and Ascending for the sort field. + +![Create a stacked area chart: For Stack By, choose State, then sort by ascending value](_img/track-test-status/ExampleBurndownReadiness.png) + +**How can I track burndown for automation status?** + +Use a stacked area trend chart to view the burndown +for how many test cases have been automated. Choose +Automation status for the stack by field and Ascending +for the sort field. + +**If multiple teams own test cases in my test plan, can I see how many each team owns and the priorities of the tests?** + +If your teams are organized by area path, then your can use a +test case pie chart. Choose Area path for the group by field. + +If you want to know the priorities of these tests, then create +a stacked bar chart. Choose Area path for rows and priority +for the columns. + +**How can I track test creation status by team members?** + +Test case owners are tracked by the Assigned to field. +Use a stacked bar chart or a pivot table chart. Choose +Assigned to for rows and status for the columns. + + + +## Share charts on your team's dashboard + +Pin a chart to your team's dashboard for all the team to view. +Use the chart's context menu. + +![Open the chart](_img/track-test-status/EditDeletePinChart.png) + +You can [configure the dashboard widget](../../report/widget-catalog.md) +to show a range of chart types. +You must be a team administrator to do this, but team members with +Stakeholder access can view the charts on the dashboard. + +Learn more about +[dashboards](../../report/dashboards.md). +Or learn more about +[team administration](../../work/scale/manage-team-assets.md). + +## See also + +* [FAQs for manual testing](../reference-qa.md#trackstatus) + +## Next step + +> [!div class="nextstepaction"] +> [Control how long to keep test results](how-long-to-keep-test-results.md) diff --git a/docs/manual-test/getting-started/user-acceptance-testing.md b/docs/manual-test/getting-started/user-acceptance-testing.md new file mode 100644 index 00000000000..ef4eac45d8d --- /dev/null +++ b/docs/manual-test/getting-started/user-acceptance-testing.md @@ -0,0 +1,89 @@ +--- +title: User acceptance testing +description: Create and run user acceptance tests in VSTS and TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: C52CDC6D-1B01-4A63-A265-B68C4E3DDE7D +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Perform user acceptance testing + +[!INCLUDE [version-header-ts-tfs](../_shared/version-header-ts-tfs.md)] + +Today's faster development pace requires tools that +enable test teams to more easily verify value based +on business requirements, and the high quality +software demanded by customers. +This type of testing is often referred to as +_user acceptance testing_ and is available as a +feature in Visual Studio Team Services (VSTS) and Team +Foundation Server (TFS). + +Typically you create a Test Suite using a formal +requirement work item type. However, today’s +agile teams often prefer to work from User Stories +or Product Backlog items as their requirements. + +## Before you start + +You must have already created work items and +a test plan. If not, follow the steps in: + +* [Create your backlog](../../work/backlogs/create-your-backlog.md) +* [Create a test plan](create-a-test-plan.md) + +## Assign and invite testers + +VSTS makes it easy to assign +testers to individual test cases. A typical +scenario for user acceptance testing is the ability +to not just assign one tester to a test case (see +[Search for and assign testers](#search-assign)) but assign +multiple testers an entire set of tests. + +This can also be accomplished by selecting the +suite and choosing **Assign testers to run all +tests**. This option also enables the sending of +emails to the testers assigned to the tests. + +![User acceptance testing email notification](_img/user-acceptance-testing/uat10.png) + +An important feature of user acceptance testing +is that the testers may in fact be the business +owners who created the original business +requirements. + + +## Search for and assign testers + +In scenarios where you have large development teams +the ability search for an individual is also +important. Choose **Assign tester** from the drop-down +menu. In the shortcut menu, choose **Assign testers +to run all tests** and select the testers you want to +include. + +![Searching for and assigning testers](_img/user-acceptance-testing/uat5.png) + +Set the **Send email** option to send all +of them a notification email. + +## Easily track results + +A key principle of good user acceptance testing practice is to minimize the effort required to determine whether a requirement has been achieved. +There are two ways this can be achieved, you can focus on individual test runs and tests in the **Test** hub to see which failed or use the charts views make it much easy and accessible to all members of VSTS makes this much easier. + +![Exploring test results in the Test hub](_img/user-acceptance-testing/uat8.png) + +> Note: The dashboard display shown here is also used +for other types of testing such as continuous testing. + +If you don't see the data or information you expect in +the dashboard charts, verify that the columns in your +data have been added to the Tests view. +For details see [this blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/03/10/visual-studio-team-services-manual-testing-tips-charts-iterations-and-runs/). + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/index.md b/docs/manual-test/index.md new file mode 100644 index 00000000000..445fad9f8b1 --- /dev/null +++ b/docs/manual-test/index.md @@ -0,0 +1,65 @@ +--- +title: Exploratory Testing +description: Manual and exploratory testing index +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: EC51D26A-F000-4C37-8498-99C96AC7B751 +ms.manager: douge +ms.author: ahomer +ms.date: 08/09/2016 +--- + +# Exploratory Testing + +[!INCLUDE [version-header-vs-ts-tfs](_shared/version-header-vs-ts-tfs.md)] + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) provide rich and powerful +tools everyone in the team can use to drive quality and collaboration throughout the development process. + +## 5-Minute Quickstarts + +Learn how to create tests plans and test cases, and run them using the VSTS or TFS web portal. +Use the Test & Feedback extension to explore and find bugs in your apps. + +| | | | +| --- | --- | --- | +| ![icon](_img/testplan-icon.png)
        [Create a test plan](getting-started/create-a-test-plan.md) | ![icon](_img/testcases-icon.png)
        [Create test cases](getting-started/create-test-cases.md) | ![icon](_img/runtests2-icon.png)
        [Run manual tests](getting-started/run-manual-tests.md) | +| ![icon](_img/marketplace-icon.png)
        [Install the extension](getting-started/perform-exploratory-tests.md) | ![icon](_img/connectedmode-icon.png)
        [Test in Connected mode](connected-mode-exploratory-testing.md) | ![icon](_img/standalonemode-icon.png)
        [Test in Standalone mode](standalone-mode-exploratory-testing.md) | +| | | | + +## Videos + +| | | +| --- | --- | +| | | +| | | +| | | + +## Step-by-Step Tutorials + +* [Test from the Kanban board](../work/kanban/add-run-update-tests.md?toc=/vsts/manual-test/toc.json&bc=/vsts/manual-test/breadcrumb/toc.json) + +## How-to Guides + +* [Explore work items](explore-workitems-exploratory-testing.md) +* [Get insights from tests](insights-exploratory-testing.md) +* [Track test status](getting-started/track-test-status.md) +* [Perform user acceptance testing](getting-started/user-acceptance-testing.md) +* [Test different configurations](test-different-configurations.md) +* [Collect diagnostic data](collect-diagnostic-data.md) +* [Manage test results](getting-started/how-long-to-keep-test-results.md) + +## Reference + +* [FAQs for manual testing](reference-qa.md) +* [REST API for test management](../integrate/index.md) +* [Unable to connect](../work/reference/error/tf31002-unable-connect-tfs.md?toc=/vsts/manual-test/toc.json&bc=/vsts/manual-test/breadcrumb/toc.json) + +## Resources + +| | | | +| --- | --- | --- | +| [Get Stakeholder feedback](../feedback/index.md) | [Blog posts for testing](https://blogs.msdn.microsoft.com/visualstudioalm/tag/testing/) | [Test & Feedback posts](https://social.msdn.microsoft.com/Search/en-US?query=test%20%26%20feedback%20extension&beta=0&rn=Microsoft+Application+Lifecycle+Management&rq=site:https://blogs.msdn.microsoft.com/visualstudioalm&ac=4) | +| [Using Microsoft Test Manager](https://msdn.microsoft.com/en-us/library/jj635157.aspx) | [Blog posts for test management](https://blogs.msdn.microsoft.com/devops/?s=test+management) | | +| [Load and performance testing](../load-test/index.md) | [Continuous testing](../build-release/test/index.md) | [Unit testing](https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios) | +| | | | diff --git a/docs/manual-test/insights-exploratory-testing.md b/docs/manual-test/insights-exploratory-testing.md new file mode 100644 index 00000000000..96a8f1c43af --- /dev/null +++ b/docs/manual-test/insights-exploratory-testing.md @@ -0,0 +1,138 @@ +--- +title: Get insights across your exploratory testing sessions +description: Manual and exploratory testing - get insights with exploratory testing across your test sessions +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 4A7DE54F-FE15-49AA-B88B-B3B848EC68F9 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Get insights across your exploratory testing sessions + +[!INCLUDE [version-header-ts-tfs15](_shared/version-header-ts-tfs15.md)] + +View completed exploratory testing sessions and derive meaningful insights +at team or individual level, and for a specific period. + +1. Open the **Recent exploratory sessions** page. You can do this: + + - From the Test & Feedback extension by choosing the "view" icon on + the **Session timeline** page. + + ![Opening the insights page from the extension](_img/insights-exploratory-testing/insights-exploratory-testing-01.png) + + - From the VSTS or TFS **Test** hub by opening the **Runs** tab and choosing **Recent exploratory sessions**. + + ![Opening the insights page from the Test hub](_img/insights-exploratory-testing/insights-exploratory-testing-02.png) + +1. Explore the **Recent exploratory sessions** page. It contains three main sections: + + **Summary view** - shows a graphical breakdown of the work items explored, work items + created, session owners, and the total time for these sessions. + + ![Summary view](_img/insights-exploratory-testing/insights-exploratory-testing-03.png) + + **Pivot view** - shows a collapsible nested and sortable list of items grouped in different ways. + + ![Pivot view](_img/insights-exploratory-testing/insights-exploratory-testing-03a.png) + + **Details view** - shows the work item selected in the Pivot + view or a summary of information about a selection of items. + + ![Details view](_img/insights-exploratory-testing/insights-exploratory-testing-03b.png) + +## Get insights from your exploratory testing sessions: + +Use the **Recent exploratory sessions** page to get insights about your +app from the information collected during your exploratory testing sessions. + +1. **Set the scope for the data**. + Summary view provides the highest level view of your test results. + Use it to get insights into the overall effort and results of the + exploratory testing sessions. + + - Use the **View** filter to scope the summary view to all sessions or just your own sessions. + - Use the **Period** filter to scope the summary view to sessions in the period from the last 7 to the last 90 days. + + ![Set the scope for the data](_img/insights-exploratory-testing/insights-exploratory-testing-04.png) + +1. **Pivot the data on the type of work item**. + Pivot view lets you to focus on all the work items you created + in your exploratory testing sessions, or just on bugs, tasks, or test cases; + and group the results in different ways. + + - Use the **Pivot** filter to group the work items as a + nested list based on those that have been explored, + those that have not been explored (requires a [query](#not-explored)), + by the session in which they were created, or by session owner. + - Use the **Show** filter to show all items; or just bugs, tasks, or test cases.

        + + ![Pivot the data on the type of work item](_img/insights-exploratory-testing/insights-exploratory-testing-06.png) + +1. **Get deep insights from Details view**. + Details view gives insights into the items selected + in Pivot view. Depending on the type of item you select, + you see the work item as an editable form, or a series of charts. + + - Select a row in Pivot view to see a summary of + all the related information in Details view. For example, if you have pivoted the + list based on sessions, select a session to see a + summary of all the information from the work items in just that session. + - Select a child row in Pivot view to display the work item + form for that individual item. For example, if you have pivoted + the list based on explored work items, expand a work + item and select a child bug, task, or test case to see + the work item form for just that item.

        + + ![Get deep insights from Details view](_img/insights-exploratory-testing/insights-exploratory-testing-07.png) + + +## Discover work items not yet explored + +Use a query to explore the work items that users have not yet explored. + +1. Create a shared query in VSTS or TFS that selects work items + that can be explored using the Test & Feedback extension, such as + work items in the epic category, feature category, requirement category, + requirement-based suites, or test cases. + + >You must use a **shared** query. If this query returns a mix of supported + and unsupported work items, only those in supported categories will be displayed. + +1. Use the **View** and **Period** filters to scope the view to + the type of session (all sessions or just your own sessions) + and the time span (from the last 7 to the last 90 days). + Then open the **Query** list and choose **Select query**. + + ![Set the View and Period filters](_img/insights-exploratory-testing/insights-exploratory-testing-08.png) + +1. In the **Query selector** dialog, choose the shared query you created earlier. + + ![Selecting the shared Query](_img/insights-exploratory-testing/insights-exploratory-testing-10.png) + +1. View all the work items returned by the query in Summary view. You see + a breakdown of explored and unexplored work items, work items filed, sessions, + and total session duration. + + ![Viewing the results in Summary view](_img/insights-exploratory-testing/insights-exploratory-testing-11.png) + +1. Open the **Pivot** list and choose **Unexplored Work Item**. + + ![Choosing the Unexplored Work Item option](_img/insights-exploratory-testing/insights-exploratory-testing-12.png) + + The view now shows only the unexplored work items. + + ![Viewing the unexplored work items](_img/insights-exploratory-testing/insights-exploratory-testing-13.png) + +## See Also + +* [Use the Test & Feedback extension in Connected mode](connected-mode-exploratory-testing.md) +* [Add findings to existing bugs with exploratory testing](add-to-bugs-exploratory-testing.md) +* [Explore work items with exploratory testing](explore-workitems-exploratory-testing.md) +* [Use the Test & Feedback extension in Standalone mode](standalone-mode-exploratory-testing.md) +* [Exploratory testing with Microsoft Test Manager](mtm/exploratory-testing-using-microsoft-test-manager.md) +* [Overview of manual and exploratory testing](index.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws91chooseenv.png b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws91chooseenv.png new file mode 100644 index 00000000000..980dbe648a3 Binary files /dev/null and b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws91chooseenv.png differ diff --git a/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws92newsettings.png b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws92newsettings.png new file mode 100644 index 00000000000..15be7393c77 Binary files /dev/null and b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws92newsettings.png differ diff --git a/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws93newsettingsname.png b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws93newsettingsname.png new file mode 100644 index 00000000000..f971f60e68c Binary files /dev/null and b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws93newsettingsname.png differ diff --git a/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws94newsettingsrole.png b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws94newsettingsrole.png new file mode 100644 index 00000000000..71282b167c0 Binary files /dev/null and b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws94newsettingsrole.png differ diff --git a/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws95newsettingsdda.png b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws95newsettingsdda.png new file mode 100644 index 00000000000..d5ac3e3892e Binary files /dev/null and b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/almt_ws95newsettingsdda.png differ diff --git a/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/mtr_danddpage.png b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/mtr_danddpage.png new file mode 100644 index 00000000000..e0b7c133bf7 Binary files /dev/null and b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/mtr_danddpage.png differ diff --git a/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/testsettingsmachineroleconceptual.png b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/testsettingsmachineroleconceptual.png new file mode 100644 index 00000000000..ad943f50092 Binary files /dev/null and b/docs/manual-test/mtm/_img/collect-more-diagnostic-data-in-manual-tests/testsettingsmachineroleconceptual.png differ diff --git a/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect1.png b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect1.png new file mode 100644 index 00000000000..abef5116f1c Binary files /dev/null and b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect1.png differ diff --git a/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect2.png b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect2.png new file mode 100644 index 00000000000..3f503571784 Binary files /dev/null and b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect2.png differ diff --git a/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect3.png b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect3.png new file mode 100644 index 00000000000..fa294b533ef Binary files /dev/null and b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect3.png differ diff --git a/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect4.png b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect4.png new file mode 100644 index 00000000000..a74762550ea Binary files /dev/null and b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect4.png differ diff --git a/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/mtm_homeicon.png b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/mtm_homeicon.png new file mode 100644 index 00000000000..07a260e2d85 Binary files /dev/null and b/docs/manual-test/mtm/_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/mtm_homeicon.png differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/almt_mtm_copy1.png b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/almt_mtm_copy1.png new file mode 100644 index 00000000000..db863c1c575 Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/almt_mtm_copy1.png differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/almt_mtm_copy2.png b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/almt_mtm_copy2.png new file mode 100644 index 00000000000..53048783e54 Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/almt_mtm_copy2.png differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/copytestsuites_anotherplan.png b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/copytestsuites_anotherplan.png new file mode 100644 index 00000000000..77059dbd26e Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/copytestsuites_anotherplan.png differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif new file mode 100644 index 00000000000..f1dc644589a Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/doesnotapply.gif b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/doesnotapply.gif new file mode 100644 index 00000000000..dc679cb65de Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/doesnotapply.gif differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtm_testplanclone.png b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtm_testplanclone.png new file mode 100644 index 00000000000..fc13415b86b Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtm_testplanclone.png differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_clone3.png b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_clone3.png new file mode 100644 index 00000000000..9564cad78dc Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_clone3.png differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_clonedestinationtestplan.png b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_clonedestinationtestplan.png new file mode 100644 index 00000000000..213d5fd436d Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_clonedestinationtestplan.png differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_clonesourcetestplan.png b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_clonesourcetestplan.png new file mode 100644 index 00000000000..a65569fa490 Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_clonesourcetestplan.png differ diff --git a/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_copy3.png b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_copy3.png new file mode 100644 index 00000000000..c11eca60f0a Binary files /dev/null and b/docs/manual-test/mtm/_img/copying-and-cloning-test-suites-and-test-cases/mtr_copy3.png differ diff --git a/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore01.png b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore01.png new file mode 100644 index 00000000000..5c4698603ed Binary files /dev/null and b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore01.png differ diff --git a/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore02a.png b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore02a.png new file mode 100644 index 00000000000..a28f2872a40 Binary files /dev/null and b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore02a.png differ diff --git a/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore110.png b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore110.png new file mode 100644 index 00000000000..baddcb5f0c9 Binary files /dev/null and b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore110.png differ diff --git a/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore112.png b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore112.png new file mode 100644 index 00000000000..0e44d60361f Binary files /dev/null and b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore112.png differ diff --git a/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore113.png b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore113.png new file mode 100644 index 00000000000..e3528ce01e2 Binary files /dev/null and b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore113.png differ diff --git a/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore114.png b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore114.png new file mode 100644 index 00000000000..c5f2addddd5 Binary files /dev/null and b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore114.png differ diff --git a/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore14.png b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore14.png new file mode 100644 index 00000000000..00186980003 Binary files /dev/null and b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore14.png differ diff --git a/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_pausebutton.png b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_pausebutton.png new file mode 100644 index 00000000000..d89cbecc737 Binary files /dev/null and b/docs/manual-test/mtm/_img/exploratory-testing-using-microsoft-test-manager/almp_t_pausebutton.png differ diff --git a/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create04.png b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create04.png new file mode 100644 index 00000000000..72688068124 Binary files /dev/null and b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create04.png differ diff --git a/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create05.png b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create05.png new file mode 100644 index 00000000000..eff09c7f280 Binary files /dev/null and b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create05.png differ diff --git a/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create06.png b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create06.png new file mode 100644 index 00000000000..d2f05188669 Binary files /dev/null and b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create06.png differ diff --git a/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_dragsuites.png b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_dragsuites.png new file mode 100644 index 00000000000..818d44c8b29 Binary files /dev/null and b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_dragsuites.png differ diff --git a/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_newsuite01.png b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_newsuite01.png new file mode 100644 index 00000000000..ef2773a6e29 Binary files /dev/null and b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_newsuite01.png differ diff --git a/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_newsuite02.png b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_newsuite02.png new file mode 100644 index 00000000000..ff97c7b72e0 Binary files /dev/null and b/docs/manual-test/mtm/_img/plan-manual-tests-with-microsoft-test-manager/almp_t_newsuite02.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/alm_p_t78play.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/alm_p_t78play.png new file mode 100644 index 00000000000..cda3dcf1d3c Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/alm_p_t78play.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t79playstep.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t79playstep.png new file mode 100644 index 00000000000..94d137701a8 Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t79playstep.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create07.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create07.png new file mode 100644 index 00000000000..c11f13b5d2d Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create07.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create08.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create08.png new file mode 100644 index 00000000000..4c62c8f04eb Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create08.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create09.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create09.png new file mode 100644 index 00000000000..5e6b88d0591 Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create09.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create10.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create10.png new file mode 100644 index 00000000000..d9e76ab1e24 Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create10.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create11.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create11.png new file mode 100644 index 00000000000..8c3f633f090 Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create11.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create12.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create12.png new file mode 100644 index 00000000000..053ea5193ef Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_create12.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_run13.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_run13.png new file mode 100644 index 00000000000..046d275c0a2 Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_run13.png differ diff --git a/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_runtestpauseicon.png b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_runtestpauseicon.png new file mode 100644 index 00000000000..4b3730aae96 Binary files /dev/null and b/docs/manual-test/mtm/_img/run-manual-tests-with-microsoft-test-manager/almp_t_runtestpauseicon.png differ diff --git a/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws31createsharedsteps.png b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws31createsharedsteps.png new file mode 100644 index 00000000000..5968a95e118 Binary files /dev/null and b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws31createsharedsteps.png differ diff --git a/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws32usesharedsteps.png b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws32usesharedsteps.png new file mode 100644 index 00000000000..e629fd245b2 Binary files /dev/null and b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws32usesharedsteps.png differ diff --git a/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws33runsharedsteps.png b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws33runsharedsteps.png new file mode 100644 index 00000000000..23ff387087a Binary files /dev/null and b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws33runsharedsteps.png differ diff --git a/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws33sharedstepquery.png b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws33sharedstepquery.png new file mode 100644 index 00000000000..ef5227ee392 Binary files /dev/null and b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws33sharedstepquery.png differ diff --git a/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws34createsharedresult.png b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws34createsharedresult.png new file mode 100644 index 00000000000..bbe70906e1c Binary files /dev/null and b/docs/manual-test/mtm/_img/share-steps-between-test-cases/almt_ws34createsharedresult.png differ diff --git a/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-01.png b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-01.png new file mode 100644 index 00000000000..000948d0726 Binary files /dev/null and b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-01.png differ diff --git a/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-02.png b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-02.png new file mode 100644 index 00000000000..216ad2f412a Binary files /dev/null and b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-02.png differ diff --git a/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-03.png b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-03.png new file mode 100644 index 00000000000..f7bce4782e8 Binary files /dev/null and b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-03.png differ diff --git a/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-04.png b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-04.png new file mode 100644 index 00000000000..75f330e30b6 Binary files /dev/null and b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-04.png differ diff --git a/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-05.png b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-05.png new file mode 100644 index 00000000000..ded6c0512b4 Binary files /dev/null and b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-05.png differ diff --git a/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-05a.png b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-05a.png new file mode 100644 index 00000000000..fa92cca3ad1 Binary files /dev/null and b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-05a.png differ diff --git a/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-06.png b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-06.png new file mode 100644 index 00000000000..3ed004115a6 Binary files /dev/null and b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-06.png differ diff --git a/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-07.png b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-07.png new file mode 100644 index 00000000000..a5f91c34f75 Binary files /dev/null and b/docs/manual-test/mtm/_img/test-configurations-specifying-test-platforms/mtmconfig-07.png differ diff --git a/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_installwindowsstyleapp.png b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_installwindowsstyleapp.png new file mode 100644 index 00000000000..39db25d88b5 Binary files /dev/null and b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_installwindowsstyleapp.png differ diff --git a/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_tailoredappinstallstepsdialog.png b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_tailoredappinstallstepsdialog.png new file mode 100644 index 00000000000..ad10cac0ae2 Binary files /dev/null and b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_tailoredappinstallstepsdialog.png differ diff --git a/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_testcertdialog.png b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_testcertdialog.png new file mode 100644 index 00000000000..59d53d4ee34 Binary files /dev/null and b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_testcertdialog.png differ diff --git a/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_whererun.png b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_whererun.png new file mode 100644 index 00000000000..b47f7bd2488 Binary files /dev/null and b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_whererun.png differ diff --git a/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_whererun2.png b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_whererun2.png new file mode 100644 index 00000000000..c1a07dcce9d Binary files /dev/null and b/docs/manual-test/mtm/_img/testing-windows-store-apps/mtr_win8_whererun2.png differ diff --git a/docs/manual-test/mtm/collect-more-diagnostic-data-in-manual-tests.md b/docs/manual-test/mtm/collect-more-diagnostic-data-in-manual-tests.md new file mode 100644 index 00000000000..fc8687230ed --- /dev/null +++ b/docs/manual-test/mtm/collect-more-diagnostic-data-in-manual-tests.md @@ -0,0 +1,85 @@ +--- +title: Collect more diagnostic data in manual tests +description: Manual and exploratory testing - Collect more diagnostic data in manual tests +ms.assetid: bb5a2cc0-84f5-4dfe-9560-ca3d313aefd2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Collect more diagnostic data in manual tests + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +While you are testing your application, Microsoft Test Manager can collect data that will help diagnose any fault that you might find. If you create a bug report while you're testing, the data is automatically attached to the bug work item. + +![Test settings machine roles and adapters](_img/collect-more-diagnostic-data-in-manual-tests/testsettingsmachineroleconceptual.png) + +You can decide what kinds of data you want to collect. + +## What diagnostic data can I collect in a test? + +The diagnostic data is collected in the test results. It will be added to a bug if you create one while performing the test. + +|Data you can collect|How| +|--------------------------|---------| +|- Link to the test case.
        - The steps you marked as passed or failed.
        - Any comments or attachments that you added.|[Run tests in the web portal.](../getting-started/run-manual-tests.md)| +|+

        - Operating system version and other system information.
        - Your keystrokes and gestures.
        - Screenshots, recorded automatically while you work.|[Run tests with Microsoft Test Manager](run-manual-tests-with-microsoft-test-manager.md).

        (Use default test settings.)

        Microsoft Test Manager has to be installed on the machine where you run the tests, or on a machine connected to a device where the test runs.| +|+

        Data collected from your client or desktop application:

        - Event logs
        - IntelliTrace
        - Video recording of the desktop
        - Test impact analysis. This allows you to choose tests based on changes since a previous build.|Use [test settings](#testSettings) when you perform the tests with Microsoft Test Manager.

        Test settings files configure diagnostic data adapters. You can choose a test settings file when you run tests, or you can set a default test settings file for your test plan.| +|+

        Data collected from your server software:

        1. Event logs.
        2. IntelliTrace
        3. Test impact
        4. Virtual machine snapshots of the servers, if you are using an SCVMM lab environment|Use [test settings](#testSettings) to define the data you want to collect.| + + +## How do I create test settings? + +You need test settings only if you want to collect more data than the default. The default setting collects basic system information from each lab machine and your keystrokes and gestures from the local machine. + +1. If the application you are testing is a website or has a server component, and you want to collect data from the servers: + + - Create a lab environment. It can be a standard environment or an SCVMM environment. + + - In the Properties of your test plan, set the test environment you want to use for manual tests. + + ![In test plan properties, choose a lab environment.](_img/collect-more-diagnostic-data-in-manual-tests/almt_ws91chooseenv.png) + +1. Choose an existing test settings file, or create a new one. + + ![Select or create test settings.](_img/collect-more-diagnostic-data-in-manual-tests/almt_ws92newsettings.png) + + This sets the default selection for performing tests in this test plan. You can override the selection when you perform individual test runs. + +1. Give the test settings file a name. + + ![Set the name of the new test settings.](_img/collect-more-diagnostic-data-in-manual-tests/almt_ws93newsettingsname.png) + +1. Choose the lab environment you want to use for your tests. If you aren't using a lab environment, choose Local. + + ![On the Roles tab, choose the lab environment.](_img/collect-more-diagnostic-data-in-manual-tests/almt_ws94newsettingsrole.png) + + Each test settings file matches one set of machine roles. + +1. For each machine role, choose the data you want to collect from that machine. + + ![Choose diagnostics for each machine role.](_img/collect-more-diagnostic-data-in-manual-tests/almt_ws95newsettingsdda.png) + + The Local role is the client machine on which you'll perform the tests. + + +## What are the diagnostic data options? + +On the Data and Diagnostics page you can add and configure diagnostic adapters to collect data for each machine role in your lab environment. In most cases the diagnostic data is included with the test results. + +![Test setting Data and Diagnostic page](_img/collect-more-diagnostic-data-in-manual-tests/mtr_danddpage.png) + +|Diagnostic data adapter|Configuration| +|-----------------------------|-------------------| +|**Action Log**: Allows you to record the actions you perform during your test, so that you can play them back rapidly on a subsequent occasion. The actions are also recorded as text descriptions in any bug report that you create.|[Record and play back manual tests](../getting-started/record-play-back-manual-tests.md).

        Not all gestures and applications are recorded.| +|**ASP.NET Client Proxy for IntelliTrace and Test Impact**|Select this adapter in a web client role. It is required if you are testing an ASP.NET application, and you want to collect **Test Impact** or **Intellisense** data on the web server role.| +|**Event log**

        Collects events that your application wrote to the event logs.|Choose **Configure** to select the types of events you want.

        Your application has to write events using **WriteEntry**. +|**IntelliTrace**: Generates an .itrace file that is linked to any bug that you create. From this IntelliTrace file, the local session can be simulated on another computer.|[Using IntelliTrace](https://msdn.microsoft.com/library/dd264915.aspx).| +|**System information**: Records information about the machine.|No additional configuration.| +|**Test impact**: Enables the **Recommended Tests** feature in Testing Center, Track. This determines which tests are affected by the changes since a previous build, based on code coverage.|If you are testing an ASP.NET application:

        1. On the role where the IIS server will run, enable **Test Impact** and then choose **Configure**, **Advanced**, **ASP.NET**.
        2. In the web client role, enable **ASP.NET Client Proxy for IntelliTrace and Test Impact**

        Restart your server application after enabling this option.| +|**Video Recorder** records the desktop in real time while you work.|To record audio, choose **Configure**.| + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan.md b/docs/manual-test/mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan.md new file mode 100644 index 00000000000..518441cf304 --- /dev/null +++ b/docs/manual-test/mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan.md @@ -0,0 +1,48 @@ +--- +title: Connect Microsoft Test Manager to your team project and test plan +description: Manual and exploratory testing - Connect Microsoft Test Manager to your team project and test plan +ms.assetid: 4a2c7eb1-c65d-4fd9-bb19-f733164752c1 +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Connect Microsoft Test Manager to your team project and test plan + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +Use Microsoft Test Manager (MTM) to help you test the application you built. MTM stores your test plans and results on Team Foundation Server (TFS). + +### Connect Microsoft Test Manager to your Team Project and Test Plan + +1. If you don't have MTM, download and install [Microsoft Visual Studio Test Professional](https://www.visualstudio.com/downloads/). + + Don't have a team project? [Set up a team project](../../accounts/create-team-project.md) + +1. Connect to TFS and choose your team project. + + ![Enter the name of a Team Foundation server.](_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect1.png) + + ![Expand the server name and choose a project.](_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect2.png) + +1. Create a new test plan, unless there's already a plan you want to use. Typically, you create a separate test plan for each sprint. + + ![Add a new test plan.](_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect4.png) + +1. Select a plan. + + ![Select an existing plan, or choose Add.](_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/almt_connect3.png) + +If you want to connect to a different team project or test plan later, choose **Home**. ![Home button in Microsoft Test Manager](_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/mtm_homeicon.png) + +Signed in with the wrong user name? Choose **Home**  ![Home button in Microsoft Test Manager](_img/connect-microsoft-test-manager-to-your-team-project-and-test-plan/mtm_homeicon.png), **Change project**, **Sign out**. + +## Try this next + +[Exploratory testing](exploratory-testing-using-microsoft-test-manager.md) + +[Plan manual tests with Microsoft Test Manager](plan-manual-tests-with-microsoft-test-manager.md) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/copying-and-cloning-test-suites-and-test-cases.md b/docs/manual-test/mtm/copying-and-cloning-test-suites-and-test-cases.md new file mode 100644 index 00000000000..3f17fbb4a06 --- /dev/null +++ b/docs/manual-test/mtm/copying-and-cloning-test-suites-and-test-cases.md @@ -0,0 +1,172 @@ +--- +title: Copying and cloning test suites and test cases +description: Manual and exploratory testing - Copying and cloning test suites and test cases +ms.assetid: 3bdbaf71-2530-4681-9bb3-cc98c75664f4 +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Copying and cloning test suites and test cases + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +There are several ways to duplicate test suites and test cases when you are [planning tests](../getting-started/create-a-test-plan.md) in Team Foundation Server (TFS). + +It's important to understand that a test suite or plan contains a set of *references* to test cases. If you delete the suite, or if you delete a test case from every suite, the test case still exists as a work item in Team Foundation, and you can find it with a query. + +## Copying and cloning in Microsoft Test Manager + +All these procedures are performed in Microsoft Test Manager. Choose **Testing Center**, **Plan**, **Contents**. (You can also [clone from the command line](#tcm).) + + +### Reference the same tests in different suites + +Copy and paste test cases in order to use the same tests in different suites and plans. For example, you could have a quick suite that uses a subset of the tests in a more exhaustive suite. + +1. Copy a test case with CTRL+C. + +1. Select a different suite or plan and paste with CTRL+V. + + (If you don't select a different suite, nothing happens when you paste, because each suite can only have one reference to any test case.) + + If you edit the test case in one suite, you'll see the changes when you look at the test case in the other suite. + + If you delete a test case from a suite, you're only deleting it from that suite. If you delete it from every suite, the test case is still in Team Foundation, and you can find it with a work item query. + + +### Clone and edit a test case + +Use this to author a new test case that is similar to an existing one. + +1. Right click a test case and choose **Create copy**. + + ![Right-click a test case and choose Create copy](_img/copying-and-cloning-test-suites-and-test-cases/almt_mtm_copy1.png) + + The new test case opens. + +1. Edit the new test. You must at least change its title. Under **Links**, you might want to delete the link to the old test case. + + ![Right-click a test case and choose Create copy](_img/copying-and-cloning-test-suites-and-test-cases/almt_mtm_copy2.png) + + The two tests can subsequently be edited independently of each other. + + +### Copy suites from another plan or suite + +When you're creating the test plan for a new sprint, you often want to repeat some of the tests from the previous sprints, to make sure that the functionality you already implemented is still working. + + ![Copying test suites](_img/copying-and-cloning-test-suites-and-test-cases/mtr_copy3.png) + +1. Create the test plan for the new sprint. + +1. Select the destination suite or plan and then get the suites you want to copy. + + ![Copy Test Suites From Another Test Plan](_img/copying-and-cloning-test-suites-and-test-cases/copytestsuites_anotherplan.png) + + The test suite and any suites it contains are copied, but they contain references to the same test cases. The source and destination test plans share the same test cases. + +After the copy, you can add or remove test cases from either plan without affecting the other; however, if you edit a shared test case, the changes will impact both test plans. + +### Clone a test plan and its test cases + +Cloning is useful if you want to branch your application into two versions: after copying, the tests for the two versions can be changed without affecting each other. + +![Cloning test suites](_img/copying-and-cloning-test-suites-and-test-cases/mtr_clone3.png) + +1. On the context menu for the old test plan, choose **Clone plan**. + +1. In the dialog, select the suites you want to copy and set the new area and iteration paths. + + ![Clone a test plan](_img/copying-and-cloning-test-suites-and-test-cases/mtm_testplanclone.png) + + Check **Clone Requirements** if you want to make new user stories or requirements that you will maintain separately. For example: + + - If you plan to merge the two branches eventually, you'll want to keep the same requirements for functionality that has already been implemented and tested. Don't check Clone Requirements. + + - If you plan to diverge into two similar but separate applications, you might want to change the user stories of one without changing the stories of the other. Check Clone Requirements to create an independent set of requirements for the new test cases. + +1. [Update any query-based suites](../getting-started/create-a-test-plan.md) that you copied to use the new area and iteration paths. + +1. Specify a build in the destination test plan if you have cloned automated test cases. + + +#### What Gets Cloned? + +When you clone a test suite, the following objects are copied from the source test plan to the destination test plan: + +|Test plan object|Copied|Notes| +|----------------------|------------|-----------| +|Test case|![Topic applies](_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif)|Each new test case retains its shared steps.

        A link is made between the source and new test cases.

        The new test cases do not have test runs, bugs, test results, and build information.| +|Shared steps referenced by cloned test cases|![Topic applies](_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif)|| +|Test suite|![Topic applies](_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif)|The following data is retained:

        - Names and hierarchical structure of the test suites
        - Order of the test cases
        - Assigned testers
        - Configurations| +|Action Recordings linked from a cloned test case|![Topic applies](_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif)|| +|Links and Attachments|![Topic applies](_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif)|| +|Test configuration|![Topic applies](_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif)|The test configuration is reapplied in the destination test plan.| +|Test settings|![Topic does not apply](_img/copying-and-cloning-test-suites-and-test-cases/doesnotapply.gif)|The test setting for the destination test plan is applied.| +|Test results|![Topic does not apply](_img/copying-and-cloning-test-suites-and-test-cases/doesnotapply.gif)|| +|Test runs and exploratory test sessions|![Topic does not apply](_img/copying-and-cloning-test-suites-and-test-cases/doesnotapply.gif)|Because test runs are applicable only to the source test plan, they are not copied.| +|Requirements-based suites|![Topic does not apply](_img/copying-and-cloning-test-suites-and-test-cases/doesnotapply.gif)

        Without `/clonerequirements`|Requirements-based test suites are converted to static test suites in the destination test plan. Cloned test cases will be referenced under this static test suite.

        Cloned test cases do not include links to their original requirements work items.| +|Requirements-based suites|![Topic applies](_img/copying-and-cloning-test-suites-and-test-cases/doesapply.gif)

        with `/clonerequirements`|Copied and linked to a new copy of the requirement work item.| +|Requirements work items (product backlog items or user stories)|with `/clonerequirements`|Requirements work items that are associated with a cloned requirements-based suite are cloned.| +|Bug work items

        with `/clonerequirements`|with `/clonerequirements`|Cloned in a team project that uses the Scrum process template, or any project in which the Bug work item type is in the Requirements work item category.

        In other projects, bugs are not cloned.| + +#### Example test suite cloned by using tcm.exe + +![Source test plan](_img/copying-and-cloning-test-suites-and-test-cases/mtr_clonesourcetestplan.png) +Source Test Plan + +![Destination test plan](_img/copying-and-cloning-test-suites-and-test-cases/mtr_clonedestinationtestplan.png) +Destination Test Plan + + +#### Clone test suites from the command line + +Tcm.exe can be used to copy test suites. Open a command prompt and change directory to **%VS110COMNTOOLS%..\IDE**. + +Open the Developer Command Prompt. Alternatively, use a standard command prompt and change directory to **%VS110COMNTOOLS%..\IDE**. Use tcm.exe: + +```MS-DOS +cd %VS110COMNTOOLS%..\IDE + +tcm suites /clone + /collection:http://Server:8080/tfs/Collection + /teamproject:"TeamProject" + [/destinationteamproject: "DestinationProject"] + /suiteid:sourceId + /destinationsuiteid:targetId + [/clonerequirements] + [/overridefield:"field name"="new value"] [/overridefield:"field 2"="value 2" ...]] +``` + +Parameters: + +- *Server, Collection, TeamProject:* The names of your team foundation server, team project collection, and team project. + +- `destinationTeamProject`: Specify this if the destination test suite is in a different team project. It must be in the same team project collection. You must specify override field values for `"Iteration Path"` and `"Area Path"`. + +- `suiteId` and `destinationSuiteId`: The ID of the suite to be copied, and the ID of the suite into which the new copy will be added. If you want to copy a whole test plan, use the ID of the suite at the root of the test plan. + + The ID of a suite is displayed in the details pane when you select it in the test plan. + + You can also get a list of suites by using `tcm suites /list`. + +- `/clonerequirements`: Clone requirements work items that are attached to requirements-based test suites. If you omit this parameter, requirements-based test suites are converted to static suites. + +- `/overridefield:"field name"="new value"`: Change the value of a field in each cloned work item. You can use multiple occurrences of this parameter to change as many fields as you want. + + Examples: + +```MS-DOS +tcm suites /clone /collection:http://tfs.fabrikam.com:8080/tfs/DefaultCollection +   /teamproject:IceCream /destinationteamproject:ToyStore + /clonerequirements +   /suiteid:234 /destinationsuiteid:567 +   /overridefield:"Iteration Path"="ToyStore\sprint3" +   /overridefield:"Area Path"="ToyStore\catalog" + +``` + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/exploratory-testing-using-microsoft-test-manager.md b/docs/manual-test/mtm/exploratory-testing-using-microsoft-test-manager.md new file mode 100644 index 00000000000..bc7fe265dd6 --- /dev/null +++ b/docs/manual-test/mtm/exploratory-testing-using-microsoft-test-manager.md @@ -0,0 +1,87 @@ +--- +title: Exploratory testing using Microsoft Test Manager +description: Manual and exploratory testing - Exploratory testing using Microsoft Test Manager +ms.assetid: bf3fc3b0-7e43-407c-b2bc-dcf773ae889f +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Exploratory testing using Microsoft Test Manager + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +While you work with your application, Microsoft Test Manager (MTM) can record your actions, comments, screenshots and other data. The recording makes it easy to reproduce bugs. And you can quickly play back your tests whenever the application is updated. + +## Explore your app + +1. Install [the latest build of your application](../../build-release/apps/index.md). If it's a desktop application, install it on a machine that has MTM. If it's a server, you can install it on any other machine, but you'll want to run the browser or client on the same machine where you have MTM. + +1. [Connect MTM to your test plan](connect-microsoft-test-manager-to-your-team-project-and-test-plan.md) if you haven't already. The test plan stores default settings and test results. + +1. Start an exploratory test session in Microsoft Test Manager. + + ![Starting exploratory testing](_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore01.png) + + Test Runner appears at the side of the screen. It will stay there while you work with your application. + +1. Get your app ready to start testing. For example, if it's a website, start the server. + +1. When you're ready, start recording. + + ![Test Runner highlighting Start button](_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore02a.png) + +1. While you work with the application, add comments and screenshots in the Test Runner window. + + ![Record your comments and actions while exploring](_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore110.png) + + Double-click a screenshot if you want to edit it. + +1. Create a bug if you find a problem. The bug will automatically include a list of your actions and comments. + + ![Bug automatically includes repro steps](_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore112.png) + +1. Create a test case. + + Why? When the application is updated, you'll want to run the test again to make sure everything is still working. With the list of your actions, it's easy for you or someone else to repeat the same test. + + ![Create a test case from your action recording](_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore113.png) + + You'll probably want to use **Change Steps** to set how many recent actions are included. + +1. Pause ![Pause recording](_img/exploratory-testing-using-microsoft-test-manager/almp_t_pausebutton.png) the recording if you need to attend to something else. You don't want your emails or passwords included in the recording. + +1. Complete your test. + + ![Pausing and completing your recording](_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore114.png) + + Give your test run a title that expresses the result, such as "Failed to open account" or "Successfully created an order." + +1. Review the exploratory tests in this plan to see how well the sprint is progressing. + + ![Summary of the exploratory test session](_img/exploratory-testing-using-microsoft-test-manager/almp_t_explore14.png) + +## Enable screen recording during testing + +1. In your test settings, open **Plan**, **Properties**, and - under **Manual runs** - choose **Test settings** = **<New>**. + +2. In the test settings wizard, give the new settings a name. + +3. On the **Data and Diagnostics** page, scroll down and select **Screen and Voice recorder**. + +4. Choose **Configure** if you want to record your voice along with the screen. + +5. Close the test settings and **Save and Close** the test plan properties. + +When you start a test, a real-time screen recording will be added. +If you want to run tests without real-time recording, go back to the test plan properties and set **Test Settings = <Default>**. + +## Try this next + +[Plan manual tests with Microsoft Test Manager](plan-manual-tests-with-microsoft-test-manager.md) + +[Collect more diagnostic data](collect-more-diagnostic-data-in-manual-tests.md) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/guidance-mtm-usage.md b/docs/manual-test/mtm/guidance-mtm-usage.md new file mode 100644 index 00000000000..8477feae560 --- /dev/null +++ b/docs/manual-test/mtm/guidance-mtm-usage.md @@ -0,0 +1,188 @@ +--- +title: Guidance on Microsoft Test Manager usage +description: Manual and exploratory testing - Guidance on Microsoft Test Manager usage +ms.assetid: 3ED737AC-6310-472D-8C54-4FF4FEFE66C9 +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Guidance on Microsoft Test Manager usage + +[!INCLUDE [version-header-ts-tfs15](../_shared/version-header-ts-tfs15.md)] + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) offer both web-based and client-based solutions for manual testing: + +* The **Test Center** in Microsoft Test Manager (MTM) client is a desktop-based manual testing solution, which has traditionally been used by testers for their Manual testing needs. +* The **Test hub** in VSTS and TFS is a web-based manual testing solution, which works across all platforms and with all browsers. We have invested in Test hub over past two years to provide you better experiences across Plan, Author, Execute and Track phases of Manual testing. + +>Because the **Test hub** is a fully featured Test management solution which works across all platforms and with all browsers, +we **recommend** you use the **Test hub** over Microsoft Test Manager for +all your test management requirements. +You can use Microsoft Test Manager to test your desktop applications by +[launching the Microsoft Test Runner (client) from the **Test hub**](../getting-started/run-manual-tests.md#run-desktop). + +This topic will help you understand why the **Test hub** is a more comprehensive +solution for manual testing compared to Microsoft Test Manager. + +## Manual Testing with the Test hub + +The **Test hub** in VSTS and TFS is a fully-featured test +management solution spanning all phases of the testing lifecycle. +The **Test hub** works on all platforms (such as Windows, MacOS, +Linux, and others) and all browsers (such as Edge, Chrome, Firefox, +and others). You can easily get started with using manual testing +features right from your Kanban board, and use the **Test hub** +for more advanced manual testing capabilities. +This topic shows new capabilities introduced in the **Test hub**. + +### Test planning + +Create and manage test plans and test suites for your teams with ease with Test hub. Export and share the test plans and test suites with your team or assign multiple testers to execute tests. See below the comparison matrix to know more about the features introduced in Test hub. + +**Comparison of +[test planning with the Test hub](../getting-started/create-a-test-plan.md) +and [test planning with MTM](plan-manual-tests-with-microsoft-test-manager.md)**: + +| Test planning capability | Web-based Test hub | Client-based MTM | +| --- | --- | --- | +| Create test plan |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Create/Manage suites |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Add/remove tests from test suite |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Assign individual testers to test plan/test suite |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Create/edit/assign configurations |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Clone test plan/test suite\* |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Add tests from other test suites\* |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| [Order manual tests within suites (RBS, QBS, Static)](/vsts/release-notes/2016/jun-01-team-services#ordering-of-tests-in-test-hub) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | +| [Export test plans and test suites](../reference-qa.md#testcases) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | +| [View test case references across test suites](../reference-qa.md#testcases) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | +| [Assign multiple testers to test plans and test suites for user acceptance testing](../getting-started/user-acceptance-testing.md#assign-and-invite-testers) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | + +\* These capabilities are included as part of the upcoming version of the [Test Case Explorer](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.TestCaseExplorer) +extension available from [Visual Studio Marketplace](https://marketplace.visualstudio.com/). + +### Test authoring + +You can easily get started creating test cases right from your Kanban board in the **Work hub**. +Easily add, view, interact with, and execute tests from your Kanban cards, +and create multiple test cases using a grid in the **Test hub**. +Create shared parameters and use them in multiple test cases for data driven testing. + +**Comparison of +[test authoring with the Test hub](../getting-started/create-test-cases.md) +and [test authoring with MTM](plan-manual-tests-with-microsoft-test-manager.md)**: + +| Test authoring capability | Web-based Test hub | Client-based MTM | +| --- | --- | --- | +| Create and edit test cases using WIT form |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Create and edit shared steps |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| [Bulk author and edit test cases](../reference-qa.md#testcases) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | +| [Inline tests on Kanban board](../../work/kanban/add-run-update-tests.md) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | +| [Create and edit shared parameters](../repeat-test-with-different-data.md) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | + +### Test execution + +Test your web apps and your desktop apps. + +#### Web apps + +The **Test hub** provides a browser based Test Runner you can use to test your web apps; for +example, by marking test steps and test outcomes as pass or fail, and collecting diagnostic +information such as system information, image action logs, screen recordings and screen captures +during your tests. + +#### Desktop apps + +You can use the browser based Test Runner for running tests on desktop +apps if you only want to mark test steps and test outcomes as pass or fail, +or collect screen recordings during your tests. +If you need other data collection capabilities when testing desktop apps, +you can use the Microsoft Test Runner client that is part of Microsoft Test Manager. +You can launch Microsoft Test Runner client directly from the **Test hub**. + +**Comparison of +[test execution with web based Test Runner](../getting-started/run-manual-tests.md) +and [test execution with Microsoft Test Runner (client)](run-manual-tests-with-microsoft-test-manager.md)**: + +| Test execution capability | Web-based Test Runner for testing web apps | Client-based Test Runner for testing desktop apps | +| --- | --- | --- | +| Bulk mark tests without opening in Test Runner |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Pass or fail tests or test steps using Test Runner |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Inline changes to tests during execution |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Pause and resume tests |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| File bugs during test execution |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Capture screenshots, image action log, and screen recording during test execution |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Update existing bugs during test execution |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Verify bugs |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Assign a Build for the test run |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Assign test settings |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Fast-forward steps using action recording\* |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Collect advanced diagnostic data during manual testing\* |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Connect to a machine in an environment |             ![no](../_img/table-no.png) |             ![yes](../_img/table-yes.png) | + +\* The web-based Test Runner currently does not support Action Recording (fast-forward test steps) +or Advanced Data collection (code coverage, IntelliTrace, and test impact) during your tests. +You can use the Microsoft Test Runner client, launched from the **Test hub**, for these requirements. + +### Test tracking + +You can easily track your manual testing results using your chosen light-weight chart +types, and pin them to your dashboard to quickly analyze the test results. +View test case result history across test suites and test plans easily by using the +right-hand pane in the **Test plans** tab of the **Test hub**. +You can also select a retention policy to specify how long you want to keep your +manual testing results. + +**Comparison of +[test result tracking with the Test hub](../getting-started/track-test-status.md) +and [test result tracking with MTM](https://msdn.microsoft.com/library/hh553099%28v=vs.110%29.aspx)**: + +| Test tracking capability | Web-based Test hub | Client-based MTM | +| --- | --- | --- | +| Test run and results analysis |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| [Create, configure, and pin light-weight test result charts](../getting-started/track-test-status.md) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | +| [Test run and results retention policy](../getting-started/how-long-to-keep-test-results.md) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | +| [View test results history across test suites and test plans](../reference-qa.md#trackstatus) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | + +## Exploratory Testing + +Use the light weight +[Test & Feedback browser extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web) +to perform exploratory testing on your web applications. +You can collect rich diagnostic data such as screen captures, +screen recording, and image action logs using this extension. +The extension also has the capability to capture page load data for your +web applications. In the **Test hub** you can view completed exploratory +testing sessions and derive meaningful insights at team or individual level, +and for a specific period. + +To explore your desktop applications, you can use the Exploratory Test Runner +client in Microsoft Test Manager by launching it from the **Test hub**. + +**Comparison of +[exploratory testing with the Test & Feedback extension](../getting-started/perform-exploratory-tests.md) +and [exploratory testing with Exploratory runner (client)](exploratory-testing-using-microsoft-test-manager.md)**: + +| Exploratory testing capability | Web-based extension for web apps | Client-based Exploratory runner for desktop apps | +| --- | --- | --- | +| Explore user stories |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| File bugs using screen capture and recording, and image action log |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Create test cases and tasks |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| Exploratory testing session insights |             ![yes](../_img/table-yes.png) |             ![yes](../_img/table-yes.png) | +| [Capture page load performance data](../connected-mode-exploratory-testing.md#create-bugs-or-tasks) |             ![yes](../_img/table-yes.png) |             ![no](../_img/table-no.png) | + + +## Why the Test hub over Microsoft Test Manager? + +As clearly shown above, the **Test hub** is a much richer, faster, and easier-to-use +solution for manual testing compared to the Test Center in MTM. The **Test hub** works on +all platforms and all browsers, and has a rich and modern web UI that improves your testing +experience across all phases of manual testing. + +All the test plans, test suites, test cases, and other test management data you create +using MTM are stored in your VSTS account or TFS, so existing +MTM users can easily get started using the **Test hub**. + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/plan-manual-tests-with-microsoft-test-manager.md b/docs/manual-test/mtm/plan-manual-tests-with-microsoft-test-manager.md new file mode 100644 index 00000000000..314e70ed642 --- /dev/null +++ b/docs/manual-test/mtm/plan-manual-tests-with-microsoft-test-manager.md @@ -0,0 +1,73 @@ +--- +title: Plan manual tests with Microsoft Test Manager +description: Manual and exploratory testing - Plan manual tests with Microsoft Test Manager +ms.assetid: 809F112E-062F-466A-A8AB-84A87431533D +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Plan manual tests with Microsoft Test Manager + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +At the start of a sprint, find out what you need to test. Discussing test cases is a great way to help the team understand the detail of what your users need. Tests planned in this way provide a clear target for the development team. + +> **TIP** +> You can also use [the web portal to plan manual tests](../getting-started/create-a-test-plan.md). It is generally more convenient for creating test cases. + +1. [Connect to a test plan](connect-microsoft-test-manager-to-your-team-project-and-test-plan.md) if you haven't already. + + The test plan links together the test cases you'll use in this sprint. + +1. Add a manual test case to your test plan. + + ![Create a test case](_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create04.png) + +1. Name the test case. + + ![Give the test case a title](_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create05.png) + +1. Add the steps to perform during the test. Don't forget to include the expected results. + + ![Define test case steps](_img/plan-manual-tests-with-microsoft-test-manager/almp_t_create06.png) + + To add multiple lines in a step, press ALT + Enter. + +Now that you've defined a manual test case, you can run it from MTM and keep the results in TFS. + +## Organize your test cases with test suites + +Test suites are folders inside a test plan that help you organize tests. When you run tests, you can choose to run all the tests in a suite, one after another. + +- Create a new test suite. + + ![Creating a new test suite](_img/plan-manual-tests-with-microsoft-test-manager/almp_t_newsuite01.png) + +- Select a suite and then create new tests in the suite. + + ![Create a test case in a suite](_img/plan-manual-tests-with-microsoft-test-manager/almp_t_newsuite02.png) + +- Drag test cases from one suite to another, or cut and paste. + + ![Drag test cases from one suite to another](_img/plan-manual-tests-with-microsoft-test-manager/almp_t_dragsuites.png) + + CTRL + drag or copy and paste to make the same test case appear in more than one suite. + + These operations don't affect the test case itself. Suites contain links to test cases, and it's the links that you're moving or copying. For the same reason, removing a test case from a suite doesn't delete the test case from TFS. + +## Try this next + +- [Run manual tests with Microsoft Test Manager](run-manual-tests-with-microsoft-test-manager.md) + +### Or, dig deeper: + +- [Share steps between test cases](share-steps-between-test-cases.md) + +- [Repeat a test with different data](../repeat-test-with-different-data.md) + +- [Test different configurations](../test-different-configurations.md) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/run-manual-tests-with-microsoft-test-manager.md b/docs/manual-test/mtm/run-manual-tests-with-microsoft-test-manager.md new file mode 100644 index 00000000000..a833b908c42 --- /dev/null +++ b/docs/manual-test/mtm/run-manual-tests-with-microsoft-test-manager.md @@ -0,0 +1,101 @@ +--- +title: Run manual tests with Microsoft Test Manager +description: Manual and exploratory testing - Run manual tests with Microsoft Test Manager +ms.assetid: e7b48fb1-6511-4a2b-9eb1-f9e4488593c4 +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Run manual tests with Microsoft Test Manager + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +Microsoft Test Runner sits at the side of the screen while you test your application. It displays the steps you planned and the results you expected, and you check them off as you work. It can record your actions along with comments, screenshots, and other data, so that if you find a bug, it's easy to reproduce. + +>**The web portal or Microsoft Test Runner?** Use the web-based test runner +in the **Test** hub when you want to test web applications, and Microsoft +Test Runner for desktop applications. You can +[launch Microsoft Test Runner](../getting-started/run-manual-tests.md#run-desktop) +from the **Test** hub instead of using Microsoft Test Manager. + +### Running test cases with Microsoft Test Runner + +1. **Get ready to test.** Here are a few things you might need to do before running your tests: + + - Install the latest version of your app. + + - [Create some test cases.](plan-manual-tests-with-microsoft-test-manager.md) Typically you create them at the start of a sprint, and aim to have them all pass by the end of the sprint. You can create them either with the web portal or Microsoft Test Manager. + + - Install Microsoft Test Manager (MTM) on the machine where you want to run your tests. To get MTM, install Visual Studio Test Professional or Visual Studio Enterprise. + + - [Connect MTM to your test plan](connect-microsoft-test-manager-to-your-team-project-and-test-plan.md) + +1. Run a test case. + + ![Run a test case](_img/run-manual-tests-with-microsoft-test-manager/almp_t_create07.png) + + > **TIP** + > If you are already looking at a test case in the web portal, you can start Test Runner directly from there by choosing **Run in Client**. + + Test Runner appears at the side of the screen. It will stay there while you work with your application. + +1. Create an action recording so that you can quickly repeat the test later. + + ![Start your application, then the test run](_img/run-manual-tests-with-microsoft-test-manager/almp_t_create08.png) + +1. Follow the steps in the test. Mark each step as either Passed or Failed. When a step fails, add a comment to describe what was wrong. You can attach screenshots, too. + + ![Add comments and snapshots to the test run log](_img/run-manual-tests-with-microsoft-test-manager/almp_t_create09.png) + + If you have to attend to something else, ![Pause icon](_img/run-manual-tests-with-microsoft-test-manager/almp_t_runtestpauseicon.png)Pause the test. You don't want your emails or password included in the recording. + +1. Create a bug if you find a problem. + + ![Report a bug from the test run](_img/run-manual-tests-with-microsoft-test-manager/almp_t_create10.png) + +1. Name the bug and describe the failure. + + ![Give the bug a title](_img/run-manual-tests-with-microsoft-test-manager/almp_t_create11.png) + + You can assign the bug if you know who'll fix it. + +1. End the test and save the results. + + ![Complete the test run](_img/run-manual-tests-with-microsoft-test-manager/almp_t_create12.png) + + Now the results are stored in TFS. + +## Replay previous tests + +If you ran a test before, you can repeat it quickly by replaying the same actions. + +(This works with most applications, though not all). + +1. Start the test. Don't overwrite the recording. + + ![Uncheck Overwrite recording. Click Start.](_img/run-manual-tests-with-microsoft-test-manager/alm_p_t78play.png) + +1. **Play** your recorded actions. You have to verify the results of each step. + + ![Click Play](_img/run-manual-tests-with-microsoft-test-manager/almp_t79playstep.png) + +## Track the progress of your tests + +Monitor the progress of your project by seeing how many tests have passed. + +Tests begin in the Active state, meaning that they are ready to run. When a bug has been fixed, you can set the state of a failed test back to Active. + +![View test results and reset a test ready to re-run](_img/run-manual-tests-with-microsoft-test-manager/almp_t_run13.png) + +## See Also + +* [Repeat a test with different data](../repeat-test-with-different-data.md) +* [Test configurations: specifying test platforms](../test-different-configurations.md) +* [Record and play back manual tests](../getting-started/record-play-back-manual-tests.md) +* [Collect more diagnostic data](collect-more-diagnostic-data-in-manual-tests.md) +* [Testing Windows Store apps](testing-windows-store-apps.md) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/share-steps-between-test-cases.md b/docs/manual-test/mtm/share-steps-between-test-cases.md new file mode 100644 index 00000000000..1ee1a6a3093 --- /dev/null +++ b/docs/manual-test/mtm/share-steps-between-test-cases.md @@ -0,0 +1,48 @@ +--- +title: Share steps between test cases +description: Manual and exploratory testing - Share steps between test cases +ms.assetid: 5b7b1bfa-d958-442d-ab90-a0339b8baf0a +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Share steps between test cases + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +When you [plan manual tests](../getting-started/create-a-test-plan.md) there are some sequences of steps, such as logging in, that occur in many test cases. To avoid having to enter these sequences again and again, create *shared steps*. + +## Create shared steps + +While you're editing a test case, select a sequence of steps that you want to share: + +![Create shared steps](_img/share-steps-between-test-cases/almt_ws31createsharedsteps.png) + +The steps you selected are replaced with a link to the new shared steps work item: + +![Resulting test case with a shared step.](_img/share-steps-between-test-cases/almt_ws34createsharedresult.png) + +## Use shared steps + +Now you can use the shared steps in another test case: + +![Use shared steps in test cases.](_img/share-steps-between-test-cases/almt_ws32usesharedsteps.png) + +A TFS query opens. Run it to find the steps you want to insert: + +![Run the query to find shared steps](_img/share-steps-between-test-cases/almt_ws33sharedstepquery.png) + +## When you run a test with shared steps + +When you [run a test](../getting-started/run-manual-tests.md), you can either mark the whole shared sequence as passed or failed, or mark each step separately: + +![Shared steps in Test Runner.](_img/share-steps-between-test-cases/almt_ws33runsharedsteps.png) + +## See also + +* [FAQs for manual testing](../reference-qa.md#sharesteps) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/test-configurations-specifying-test-platforms.md b/docs/manual-test/mtm/test-configurations-specifying-test-platforms.md new file mode 100644 index 00000000000..961172324d4 --- /dev/null +++ b/docs/manual-test/mtm/test-configurations-specifying-test-platforms.md @@ -0,0 +1,101 @@ +--- +title: Test configurations, specifying test platforms +description: Manual and exploratory testing - Test configurations, specifying test platforms +ms.assetid: 40d4a0f6-5978-404d-9627-fa81e950d718 +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Test configurations: specifying test platforms + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +Your users will probably install or run your app on a wide variety of configurations, such as different operating systems, web browsers, and other variations. You will want to run at least some of your tests in environments that have those different configurations. Use your test plan to decide which tests you want to run on which configurations. You have to make sure that when you run your tests that you have set up your environments for the configurations that you need. + +You might draw up a schematic matrix of the combinations that you want to test: + +![Test matrix of browser and operating system configurations](../_img/_shared/testing-configurations-schematic.png) + +Use Microsoft Test Manager to specify test configurations. But you can still run the tests either with the web portal or with Microsoft Test Manager. + +**Requirements** + +* Visual Studio Enterprise, Ultimate, Premium, or Test Professional + +## Planning tests with configurations + +[Connect Microsoft Test Manager](connect-microsoft-test-manager-to-your-team-project-and-test-plan.md) +to your test project and open your test plan. Open your test plan by opening **Testing Center**, **Plan**, **Contents**. + +Select one or more tests, then choose **Configurations**. + +![Assign configurations to the test points](_img/test-configurations-specifying-test-platforms/mtmconfig-01.png) + +Set the configurations you want to run the tests on. + +![Assign configurations to the test points](_img/test-configurations-specifying-test-platforms/mtmconfig-02.png) + +Don't see the configurations you want? Choose **All configurations**. If you still don't see what you need, +[learn how to define your own configurations](#create-new). + +**I have a test case that appears in several test plans and test suites. Do I have to set the configurations for each of these test points?** + +Yes. The same test case can have different configuration settings in different test suites and test plans. + +## Running tests with configurations + +When you want to [run a test](run-manual-tests-with-microsoft-test-manager.md) +that has multiple configurations, you'll see that it appears more than once in the run list. + +![Required configurations in the lists of tests](_img/test-configurations-specifying-test-platforms/mtmconfig-03.png) + +Set up a testing platform for a particular configuration, and then sort the list to show the tests to run on that configuration. + +![Sort test points by configuration](_img/test-configurations-specifying-test-platforms/mtmconfig-04.png) + +When you run a test, a reminder of the required configuration appears on the Test Runner window. + +| Web portal | Microsoft Test Manager | +| --- | --- | +| ![Team Web Access](_img/test-configurations-specifying-test-platforms/mtmconfig-05.png) | ![Team Web Access](_img/test-configurations-specifying-test-platforms/mtmconfig-05a.png) | + +Test Runner doesn't verify that you're actually running on the specified configuration. +However, if you use Microsoft Test Manager, system information is stored in the test log. + + +## Create new configurations for your team project + +A few configurations are already defined for you, but you'll probably want to add your own. + +A _test configuration_ is a combination of _configuration variable_ values. Your configuration variables could be, +for example, operating system, browser, CPU type, database. A configuration might be "Windows 8 + 32-bit CPU" or "Windows 10 + 64-bit CPU." + +Choose **Testing Center**, **Organize**, **Test Configuration Manager**. + +To add your own configuration variables and values, choose **Manage configuration variables**: + +![Define configuration variables and values](_img/test-configurations-specifying-test-platforms/mtmconfig-06.png) + +Create new configurations that your tests can use: + +![Define configurations as combinations of values](_img/test-configurations-specifying-test-platforms/mtmconfig-07.png) + +**Are different test data a good use of a test configuration variable?** + +It's better to use [parameters](../repeat-test-with-different-data.md) +when you want a test to be run with different test data, because it's easy to set different parameters for different test cases. +Test configurations are better for variations in the hardware or software platform on which the application under test is installed. + +## Improving performance when repeating tests + +Repeating tests on different configurations can be slow and error-prone. +To speed things up, [record your actions](../getting-started/record-play-back-manual-tests.md) on one configuration, +and then play them back on another. + +If you play back on a different browser, choose the **Change browser for playback** option under the play menu in test runner. +However, be aware that record/playback doesn't work for all browsers and applications. In some cases you might have to play back some steps manually. + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/mtm/testing-windows-store-apps.md b/docs/manual-test/mtm/testing-windows-store-apps.md new file mode 100644 index 00000000000..4fc80bc6b6f --- /dev/null +++ b/docs/manual-test/mtm/testing-windows-store-apps.md @@ -0,0 +1,93 @@ +--- +title: Testing Windows Store apps +description: Manual and exploratory testing - Testing Windows Store apps +ms.assetid: e10d1cad-ebea-43ed-92ac-3391e5119fe7 +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Testing Windows Store apps + +[!INCLUDE [version-header-vs-ts-tfs](../_shared/version-header-vs-ts-tfs.md)] + +You have two options if you want to test Windows Store apps on a phone, tablet, or other device: + +- Plan and perform your tests using the web portal, using a browser on the device or on another computer. When you use the web portal for testing, the test runner doesn't interact with the software that you're testing; it simply acts as a checklist of the test steps. Therefore, you don't have to run it on the device that you're testing. + + This option requires no special preparation on the device, other than installing the software. + +- Couple the device to your computer, and run the tests using Microsoft Test Manager. This option allows you to capture screenshots and [collect diagnostic data](collect-more-diagnostic-data-in-manual-tests.md) from the device. + + You can perform manual tests of Windows Store apps on any type of Windows 8 remote device. + +### Prepare the Windows 8 device for testing + +1. If possible, use the same user credentials or the same Microsoft Live ID on the Windows 8 device and on the computer that is running Microsoft Test Manager. If the user is different, the machine that you are running Microsoft Test Manager from will display a credentials dialog box when you try to connect. + +1. Install the Remote Debugger on the device that you want to test. See [Installing the Remote Debugger](https://msdn.microsoft.com/library/hh441469.aspx#BKMK_Installing_the_Remote_Tools). (This is only supported for Windows 8 client operating systems. Windows Server 2012 is not supported.) + + The Microsoft Test Tools Adapter Configuration Tool will appear on the device as a new tile. + +1. Choose the Microsoft Test Tools Adapter Configuration Tool tile in Windows 8. + +1. Choose **Start Service** in the configuration dialog box for Microsoft Test Tools Adapter to configure the Microsoft Test Tools Adapter. + +### Connect to the remote device + +1. On the machine that you are testing from, [open Microsoft Test Manager](connect-microsoft-test-manager-to-your-team-project-and-test-plan.md). + + [Create some test cases](plan-manual-tests-with-microsoft-test-manager.md) if you haven't already done so. + +1. On the **Run Tests** page, choose the **Modify** link next to **Perform tests using:** to specify the remote Windows 8 device. + + ![Select where to run your manual test](_img/testing-windows-store-apps/mtr_win8_whererun.png) + +1. Choose the **Remote device** option and enter the name of the device that you want to test. + + ![Select where to run test](_img/testing-windows-store-apps/mtr_win8_whererun2.png) + + By default, port 6905 is used by Microsoft Test Manager to communicate with remote devices. If you want to use a different port, enter the remote device as *deviceName***:***port*. For example, `mySlateDevice1:8001`. You must also change the port on the remote device by opening the service configuration file mttaservice.exe.config in the Visual Studio installation folder. + +1. Choose the **Test** link to verify that Microsoft Test Manager can communicate with the remote device. + +### Install your Windows Store app + +1. Choose **Install Windows Store App**, and then enter the path and name of the .appx file for the Windows Store app that you want to install. + + ![Install Windows Store app from MTM](_img/testing-windows-store-apps/mtr_win8_installwindowsstyleapp.png) + +1. Follow the steps in the installation wizard. + + ![Tailored Application Installation Steps](_img/testing-windows-store-apps/mtr_win8_tailoredappinstallstepsdialog.png) + + ![Test certificate dialog](_img/testing-windows-store-apps/mtr_win8_testcertdialog.png) + +### Test your Windows Store app + +1. Choose **Start Test**. + + Test Runner opens. + +1. Perform the steps in the test on the remote device. + + As you complete each step of the test, [mark it passed or failed on the host computer](run-manual-tests-with-microsoft-test-manager.md). + + The following features are supported while you test on a Windows 8 Remote device: + + |Feature|Support| + |-------------|-------------| + |System info|Yes| + |Capture screenshot|Yes| + |[Event logs](collect-more-diagnostic-data-in-manual-tests.md)|Yes.| + |Action record/playback|Windows Web apps – Yes.

        Windows desktop and store apps – No.| + |Create a bug|Yes| + |Create environment snapshot of the servers in an SCVMM lab environment.|Yes| + +## Security + +Verify that the share location where the .appx file and certificates are stored is properly secured. + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/overview.md b/docs/manual-test/overview.md new file mode 100644 index 00000000000..1cad2f92b9e --- /dev/null +++ b/docs/manual-test/overview.md @@ -0,0 +1,226 @@ +--- +title: Exploratory and manual testing of your applications +description: Drive quality and collaboration throughout the development process with manual and exploratory testing capabilities +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.topic: get-started-article +ms.assetid: E9D8D614-A09A-4327-81B6-39F880D685E6 +ms.manager: douge +ms.author: ahomer +ms.date: 08/09/2016 +--- + +# Exploratory and manual testing scenarios and capabilities + +[!INCLUDE [version-header-vs-ts-tfs](_shared/version-header-vs-ts-tfs.md)] + +Quality is a vital aspect of software systems, and manual testing +and exploratory testing continue to be an important techniques for maximizing this. +In today's software development processes, +everybody in the team owns quality - including developers, managers, +product owners, user experience advocates, and more. + +VSTS and TFS provide rich and powerful +tools everyone in the team can use to drive quality and collaboration +throughout the development process. The easy-to-use, browser-based +test management solution provides all the capabilities required for +planned manual testing, user acceptance testing, exploratory testing, +and gathering feedback from stakeholders. + +* **[Planned manual testing](#manual-testing)**. Manual testing by organizing tests into test plans and test suites by designated testers and test leads. + +* **[User acceptance testing](#user-acceptance)**. Testing carried out by designated user acceptance testers to verify the value delivered meets customer requirements, while reusing the test artifacts created by engineering teams. + +* **[Exploratory testing](#exploratory-testing)**. Testing carried out by development teams, including developers, testers, UX teams, product owners and more, by exploring the software systems without using test plans or test suites. + +* **[Stakeholder feedback](#stakeholder-feedback)**. Testing carried out by stakeholders outside the development team, such as users from marketing and sales divisions. + +![Holistic approach to manual testing, types of manual testing and personas involved](_img/manual-testing/schematic-01.png) +    **Holistic approach to manual testing, types of manual testing, and personas involved** + +>You must install the [Test Manager extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web) +to use the advanced features of the Test hub. + + + +## Planned manual testing + +Manual testing has evolved with the software development process +into a more agile-based approach. VSTS and TFS integrate manual testing into your agile processes; the team +can begin manual testing right from their Kanban boards in the Work +hub. Teams that need more advanced capabilities can use the Test +hub for all their test management needs. + +### Manual testing from the Kanban board + +Get started with manual testing easily using the Kanban board in +the Work hub. Add, view, and interact with test cases directly +from the cards on the Kanban board, and then progressively monitor +status directly from the card. Developers and testers can use these +rich capabilities to simplify maximizing quality within their teams. +In VSTS, you need just [Basic access](../billing/buy-basic-access-add-users.md) +to use these features. See more at [Add, run, and update inline tests](../work/kanban/add-run-update-tests.md?toc=/vsts/manual-test/toc.json&bc=/vsts/manual-test/breadcrumb/toc.json). + +![Managing manual tests from the Kanban board](_img/manual-testing/kanban-board-01.png) + +### Manual testing in the Test hub + +The Test hub in VSTS and TFS provides +a rich test management solution for teams that need advanced manual +testing capabilities. The Test hub includes all the capabilities +required for the testing lifecycle - including test planning, authoring, +execution, and tracking. Get started using the advanced manual +testing features with the +[Test Manager extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web). + +#### Test planning + +Create and manage test plans and test suites for your teams with ease. +Create static suites, requirement-based suites, or query-based suites. +Export and share the test plans and test suites with your team. +See more at [Create test plans](getting-started/create-a-test-plan.md) + +![Creating manual test plans](_img/manual-testing/create-test-plans-01.png) + +#### Test authoring + +Create multiple test cases in one operation, or easily add existing +test cases to a test suite. Assign single or multiple testers to +execute the tests. View test results and references to a test case +across test suites. See more at [Create test cases](getting-started/create-test-cases.md). + +![Creating manual test cases](_img/manual-testing/create-test-cases-01.png) + +#### Testing web applications + +The Test hub provides a browser-based test runner to run tests for your +web apps. Mark test steps and test outcomes as pass or fail, and collect +diagnostic data such as system information, image action logs, +screen recordings, and screen captures as you test. Bugs filed +during the tests automatically include all the captured diagnostic data +to help your developers reproduce the issues. +See more at [Run tests for web apps](getting-started/run-manual-tests.md#run-web). + +![Testing web applications](_img/manual-testing/test-web-app-01.png) + +#### Testing desktop apps + +Test your desktop apps with Microsoft Test Runner client, which is part +of Microsoft Test Manager. Use the Test Runner client to collect all the +basic diagnostic data such as system information, image action logs, +screen recordings, screen captures, and event logs as you test. +In addition, use Microsoft Test Manager to collect advanced diagnostic +data such as code coverage, IntelliTrace traces, and test impact data. +See more at [Run tests for desktop apps](getting-started/run-manual-tests.md#run-desktop). + +![Testing desktop apps](_img/manual-testing/test-desktop-apps-01.png) + +#### Test tracking + +Quickly configure lightweight charts to track your manual test results +using the chart types of your choice, and pin the charts to your dashboard to +easily analyze these results. Choose a retention policy to control how +long your manual testing results are retained. +See more at [Track test status](getting-started/track-test-status.md). + +![Test status tracking](_img/manual-testing/track-test-status-01.png) + + +## User acceptance testing + +User acceptance testing (UAT) is a key factor in software development +that ensures the value requested by customers is being delivered +by the engineering team. VSTS and TFS +include capabilities and tools to manage user acceptance testing. +Quickly create UAT plans and suites, and invite multiple testers to +execute these tests using test artifacts provided by the engineering team. +Easily monitor UAT progress and results using lightweight charts. +See more at [User acceptance testing](getting-started/user-acceptance-testing.md). + +![Assigning testers to run all tests](_img/manual-testing/assign-testers-01.png) + + +## Exploratory testing for everyone + +Maximizing quality in modern software development processes is a +shared responsibility between developers, managers, product owners, +user experience teams, and more. Collaborative testing processes and +tools are the key factors in driving quality in these scenarios. + +The [Test & Feedback extension](getting-started/perform-exploratory-tests.md) +is a simple browser-based extension you can use to test web apps +anytime and anywhere, and is simple enough for everyone in the team to use. +It helps to improve productivity by allowing you to spend more time +finding issues, and less time filing them. + +![Exploratory testing your web apps](_img/manual-testing/exploratory-testing-01.png) + +Using the extension is a simple, three step process: + +![Schematic showing process steps Capture, Create, Collaborate](getting-started/_img/perform-exploratory-tests/getstarted-05.png) + +* **Capture your findings** quickly and easily using the tools in the extension. + Capture notes, screenshots with annotations, and screen recordings + to describe your findings and highlight issues. Additionally, in + the background the extension automatically captures rich data such + as user actions as an image action log, page load data, + and system information about the browser, operating system, memory, + and more that can serve as a starting point for debugging. + +* **Create work items** such as bugs, tasks, and test cases directly from + the extension. The captured findings automatically become a part of the work item. + Users can file a bug to report an issue with the product, or create a task that + indicates a new work requirement. The extension can also be used to + create test cases for scenarios discovered during exploration. + +* **Collaborate with your team** by sharing your findings. + Export your session report in Standalone mode, or connect to VSTS or + Team Foundation Server (2015 or later) for a fully integrated experience + including exploring user stories and backlog items, simplified tracking and triaging of + bugs and tasks, and managing feedback requests in one place. + +As users perform exploratory testing, you can +[get insights from the sessions](insights-exploratory-testing.md) in the **Test** hub of +VSTS or TFS. View completed exploratory sessions and derive meaningful +insights across all the sessions. Get end-to-end traceability such as a breakdown +of the work items created, the work items explored and not explored, session owners, +and more. + + +## Stakeholder feedback + +Seeking feedback from stakeholders outside the development team, such +as marketing and sales teams, is vital to develop good quality software. +Using VSTS and TFS, developers can request +feedback on their user stories and features. Stakeholders can respond +to feedback requests using the browser-based Test & Feedback extension - +not just to rate and send comments, but also by capturing rich diagnostic +data and filing bugs and tasks directly. +See more at [Request stakeholder feedback](stakeholder/request-stakeholder-feedback.md) +and [Provide stakeholder feedback](stakeholder/provide-stakeholder-feedback.md). + +![Requesting and providing stakeholder feedback](_img/manual-testing/stakeholder-feedback-01.png) + +## Key benefits + +* **Test on any platform**. With the Test hub in VSTS and TFS, you can use your browser to access all the manual testing capabilities. The Test hub enables you to [create](getting-started/create-test-cases.md) and [run manual tests](getting-started/run-manual-tests.md) through an easy-to-use, web-based interface that can be accessed from all major browsers on any platform. + +* **Rich Diagnostic data collection**. Using the web-based Test Runner and Test Runner client you can [collect rich diagnostic data](collect-diagnostic-data.md) during your tests. This includes screenshots, an image action log, screen recordings, code coverage, IntelliTrace traces, and test impact data for your apps under test. This data is automatically included in all the bugs you create during test, making it easy for developers to reproduce the issues. + +* **End to End Traceability**. VSTS and TFS provide [end-to-end traceability of your requirements, builds, tests and bugs](../work/track/link-work-items-support-traceability.md?toc=/vsts/manual-test/toc.json&bc=/vsts/manual-test/breadcrumb/toc.json). Users can track their requirement quality from cards on the Kanban board. Bugs created while testing are automatically linked to the requirements and builds being tested, which helps you track the quality of the requirements or builds. + +* **Extensible platform**. You can combine the tools and technologies you already know with the development tools that work best for you to integrate with and [extend VSTS and TFS](../integrate/index.md). Use the REST APIs and contribution model available for the Test platform to create extensions that provide the experience you need for your test management lifecycle. + +## Additional resources + +* [Get started with manual testing](../work/kanban/add-run-update-tests.md?toc=/vsts/manual-test/toc.json&bc=/vsts/manual-test/breadcrumb/toc.json) +* [Advanced manual testing techniques](getting-started/user-acceptance-testing.md) +* [Get started with exploratory testing](getting-started/perform-exploratory-tests.md) +* [Advanced exploratory testing techniques](explore-workitems-exploratory-testing.md) +* [Manual testing with Microsoft Test Manager](mtm/exploratory-testing-using-microsoft-test-manager.md) +* [Guidance for MTM usage](mtm/guidance-mtm-usage.md) +* [Get stakeholder feedback with exploratory testing](stakeholder/request-stakeholder-feedback.md) + +> See also [Load and performance testing](../load-test/index.md), [Continuous testing](../build-release/test/index.md), [Unit testing](https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios). + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/reference-qa.md b/docs/manual-test/reference-qa.md new file mode 100644 index 00000000000..f837e461572 --- /dev/null +++ b/docs/manual-test/reference-qa.md @@ -0,0 +1,572 @@ +--- +title: FAQs for manual testing +description: FAQs for manual testing topics for Visual Studio Team Services (VSTS) and Microsoft Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: C9467223-4513-4F46-812C-44FFE2B27F28 +ms.manager: douge +ms.author: ahomer +ms.date: 07/04/2017 +--- + +# FAQs for manual testing + +[!INCLUDE [version-header-vs-ts-tfs](_shared/version-header-vs-ts-tfs.md)] + + +## Creating manual test plans + +### Q: Can I rename my test plan? + +**A:** Yes, open the test plan from the shortcut menu and rename it. + +![Rename a test plan](getting-started/_img/create-a-test-plan/rename-test-plan.png) + +### Q: Can I permanently delete my test plan? + +**A:** Yes, do this from the shortcut menu for the test plan. + +![Delete a test plan](getting-started/_img/create-a-test-plan/delete-test-plan.png) + +See also [Delete test artifacts](../work/backlogs/remove-delete-work-items.md#delete-test) + +### Q: Can I group and reorder my requirement-based test suites together? + +**A:** Yes, you can create a static test suite that can +contain any type of test suites - just like folders. +Drag test suites to group them in a static test plan. +Drag and drop tests to reorder them. + +![Use static test suites like folders](getting-started/_img/create-a-test-plan/AddRequirementSuitesToTestPlan4.png) + + +### Q: What are query-based test suites ? + +**A:** Use a query to group together test cases that have a particular characteristic, +for example, all tests that have Priority=1. The suite will automatically include +every test case that is returned by the query that you define. + +### Q: Can I edit other properties of a test plan from the test hub? + +**A:** You can only do this from Microsoft Test Manager (MTM). If you're using Visual Studio 2017, Visual Studio 2015, +Visual Studio 2013, or Visual Studio 2012 Update 3, you can open a test plan in MTM directly from the Test hub. +(The most recently installed version of MTM is launched.) + +![Open test plan using Microsoft Test Manager](getting-started/_img/create-a-test-plan/OpenTestPlanMTM.png) + +### Q: Can I copy, clone, and move test plans and test suites? + +**A:** Yes, install the [Test Case Explorer extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.TestCaseExplorer) from Marketplace. + +### Q: Can I export the test plan to share or review offline? + +**A:** Yes, you can export test plans, test suites, and test cases. Select the details +that you want in the report. Then email or print this report for review. + +![Right-click a test suite, and choose Export](getting-started/_img/create-a-test-plan/ExportTestPlanHTML.png) + +Change the test case fields in the report by adding or removing columns from +the list view of the test suite. + +### Q: When I export a test plan, can I just view the data or copy it to a Word document? + +**A:** Yes, choose Print in the Export dialog box, then choose Cancel in the Print dialog box. +This displays the data in the report. Select all the text, then copy and paste it +into a Word document, if you want. All the formatting in the report is retained. + +### Q: When I export a test plan, can I customize the report? + +**A:** You can only do this if you are using an on-premises Team Foundation Server. +You can [edit the XSLT file](https://msdn.microsoft.com/library/dd380763.aspx#XSLT). + +### Q: Can I track changes to test plans and test suites that I create with VSTS? + +**A:** Yes, you can track changes to test plans and test suites. Open the work item +for the test plan or test suite, then view the work item history. + +For test suites, other actions are tracked in the Test Suite Audit field. +For example, adding and removing test cases from a test suite are tracked in this field. + +***** + + +## Creating manual test cases + +### Q: Can I rename or permanently delete test cases? + +**A:** Yes. Open the test case from its shortcut menu. + +![Open a test case for editing](getting-started/_img/create-test-cases/open-test-case.png) + +Then rename it. + +![Rename a test case](getting-started/_img/create-test-cases/rename-test-case.png) + +Or permanently delete it. + +![Delete a test case](getting-started/_img/create-test-cases/delete-test-case.png) + +See also [Delete test artifacts](../work/backlogs/remove-delete-work-items.md#delete-test) + +### Q: Can I add an extra line to a test step? + +**A:** Yes, press Shift+Enter in the action or expected +results field to add an extra line. + +### Q: How do I insert a test step into a test case? + +**A:** Select a test step. Press Alt+P to insert a new test step +above the selected step. + +### Q: Is there a way to quickly add multiple test cases at the same time? + +**A:** Yes, use the grid view when you add test cases to +the test suite. + +![Create new test cases using the grid](getting-started/_img/create-test-cases/NewTestCasesUsingGrid.png) + +On the grid shortcut menu, you can add, delete, or clear rows. + +![Use the grid's shortcut menu to insert, delete, or clear rows](getting-started/_img/create-test-cases/GridContextMenu.png) + +Switch between Grid and List views using the View menu at the right of the window. + +![Use the View menu to switch between List and Grid views](getting-started/_img/create-test-cases/GridViewSwitch.png) + +> **Note**: Do not use the Team plugin for Excel to add or update test case work items. + Excel cannot parse the format used to store test steps, and in some cases + this may affect the formatting of the test case work items. + +### Q: Can I bulk edit multiple test cases? + +**A:** Yes, switch the view from List to Grid. The grid shows +all the test cases for the current test suite and all the +test steps for those cases. This is a helpful view if you +want to review your test cases with other team members. +When you review, you can update and add new test cases. + +![To change from list to grid view, choose List ](getting-started/_img/create-test-cases/ChangeToGridView.png) + +Or, you can filter and sort the test cases in list view. Then select +just the ones that you want to bulk edit using the grid. + +![Select test cases in listview to bulk edit in grid view](getting-started/_img/create-test-cases/GridEditSelected.png) + +To return to the test suite view, switch the view +from Grid back to List. + +### Q: Can I copy, clone, and move test plans and test suites? + +**A:** Yes, install the [Test Case Explorer extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.TestCaseExplorer) from Marketplace. + +### Q: Can I copy test cases and test steps from an existing Excel worksheet? + +**A:** Yes, copy the columns from Excel that you want to use for +the title, action, and expected results fields. No column +formatting, other than multiline, is copied from the +worksheet. Paste these columns into the grid view, +edit if necessary, and save them. (This is supported only with +Internet Explorer and Chrome browsers.) + +![Save copied test cases in grid view](getting-started/_img/create-test-cases/SaveTestCasesInGrid.png) + +### Q: Can I copy test cases from the grid to an Excel worksheet? + +**A:** Yes, copy the data from the grid and paste it into your +Excel worksheet. No test step formatting, other than multiline, +is copied into the worksheet. (This is supported only +with Internet Explorer and Chrome browsers.) + +### Q: Can I edit other fields in the grid view? + +**A:** Yes, in List view use the column options to select the fields in the test +case work item. + +![Use column options to select fields to edit](getting-started/_img/create-test-cases/UseColumnOptions.png) + +You can then view and edit these fields when you switch to +the grid view. + +### Q: Can I reorder test cases in a test suite? + +**A:** Yes, you can reorder manual test cases in static suites, +requirement-based suites, and query-based suites. Choose +**Order tests** on the tool bar, then drag and drop one or more tests. +Or open the shortcut menu for a test to move it to the top or to another +position. After reordering the tests, you can sort them by the +**Order** field and then run them in that order with the web runner. + +![Order test cases](getting-started/_img/create-test-cases/OrderTestCases.png) + +### Q: Can I tag test cases so that I can see only tests with specific tags? + +**A:** Yes, you can tag test cases in a suite with any tag that +you want. For example, tag all the tests related to login so that +you can rerun these tests if a bug is fixed for the login page. +Then you can filter on that tag from the Test hub. + +You can add and edit tags when you edit a test case, or bulk edit tags +in the grid view. You can also create suites based on queries when +you use tags. + +![In Test hub, on the Test Plan tab, choose or add tags from the test case pane](getting-started/_img/create-test-cases/TestHubTags.png) + +### Q: Can I share test steps between test cases? + +**A:** Yes, choose the steps that you want to share. Find out more about +[sharing test steps](mtm/share-steps-between-test-cases.md). + +![Create shared test steps](getting-started/_img/create-test-cases/CreateSharedSteps.png) + +### Q: Can I add parameters to a test case so it can run multiple times with different data? + +**A:** Yes, choose a test step, and then add the parameter. Find out more about +[repeating test steps with different data](repeat-test-with-different-data.md). + +![Add parameter to test step](getting-started/_img/create-test-cases/AddParameters1.png) + +### Q: Can I share parameter data between test cases? + +**A:** Yes. That way, test cases with the same parameters can run with same data, +so you get consistent results. To share parameter data, convert your existing +parameters to shared parameters. + +![In the Parameters section, choose Convert to shared parameters](getting-started/_img/create-test-cases/ConvertSharedParameters.png) + +After you create a shared parameter set, open another test case, +and add the shared parameter set to that test case. Find out more about +[sharing parameters](https://msdn.microsoft.com/library/dd997832.aspx#SharedParameters). + +Add, edit, and rename your shared parameter sets on the Parameters tab. +In the test cases pane, view the test cases that use those parameters. + +![On the Parameters tab, turn on the test cases pane to view tests cases with shared parameters](getting-started/_img/create-test-cases/ManageSharedParameters.png) + +Each shared parameter set is a work item. On the Properties tab, +you can view or make changes to this work item. For example, +you can assign owners and track changes. + +### Q: Can I import parameter values from an Excel spreadsheet to my shared parameter sets? + +**A:** Yes, copy the data from your Excel spreadsheet and paste it into your +shared parameters grid. You can also copy the data from your grid back +into Excel, if necessary. + +### Q: How can I find out if a test case was added to other test suites? + +**A:** Select a test case, then view the test suites details. The Associated +test suites pane shows you any test suite for any test plan that contains +this test case. This includes all team projects. + +Click the associated test suite to view it. To view the team project and the test +plan for that test suite, move your pointer over the test suite. + +![On Tests tab, click details pane. Select test suites in the test details pane](getting-started/_img/create-test-cases/TestSuites.png) + +### Q: What happens when I delete a test case from a requirement-based test suite? + +**A:** The test case still exists in your team project, but the +test case is removed from the test suite. Also, it's no +longer linked to the backlog item for that test suite. + + +### Q: Why do I see the wrong test suite and tests when I click 'View Tests' from the notification email about tests that are assigned to me? + +**A:** This might happen if you were prompted to enter sign-in +credentials for VSTS when you clicked this link. +Without signing out of VSTS, click 'View Tests' +again to see the correct test suite and tests. + +***** + + +## Running manual tests + + +### Q: How do I rerun a test? + +**A:** Just select any test and choose **Run**. + +### Q: Can I run all the tests in a test suite together? + +**A:** Yes, select a test suite and choose **Run**. This runs all the active +tests in the test suite. If you haven't run a test yet, its state +is active. You can reset the state of a test to active if you want to rerun it. + +![Select and run all active tests in a test suite](getting-started/_img/run-manual-tests/RunTestsRunSuite.png) + +### Q: Can I choose a build to run tests against? + +**A:** Yes, Choose **Run** and then select **Run with options**. + +![Starting a test with options](_img/_shared/collect-diagnostic-data-16.png) + +Select the build you want from the drop-down list. + +![Selecting the build to include a link to in the results](getting-started/_img/run-manual-tests/select-build-for-webrunner.png) + +Any bug filed during the run will automatically be associated +with the selected build, and the test outcome will be published +against that build. + +### Q: Can I fix my test steps while I'm running a test? + +**A:** Yes, if you have the Test Manager for VSTS. +You can insert, move, or delete steps. +Or you can edit the text itself. Use the edit icon next to the test +step number to do this. + +![Select the edit icon to edit test steps](getting-started/_img/run-manual-tests/RunTest_11.png) + +The tool to edit the test steps is shown. + +![Fix test steps when you run a test](getting-started/_img/run-manual-tests/RunTest_9.png) + +### Q: Can I add a screenshot to the test results when I am running a test? + +**A:** If you are using Google Chrome, you can use +the web runner to take screenshots of the web +app while testing. + +![Capturing a screenshot from the app](_img/_shared/collect-diagnostic-data-01.png) + +For more information, see [Collect diagnostic data](collect-diagnostic-data.md#web-screenshot). + +### Q: Can I capture my actions on the app as a log? + +**A:** If you are using Google Chrome, you can use +the web runner capture your actions on the web +app as image logs while testing. + +![Capturing an image action log from the app](_img/_shared/collect-diagnostic-data-06.png) + +For more information, see [Collect diagnostic data](collect-diagnostic-data.md#web-log). + +### Q: Can I capture screen recordings of my app? + +**A:** If you are using Google Chrome, you can use +the web runner to capture screen recordings of +your web and desktop apps while testing. + +![Capturing a screen recording from the app](_img/_shared/collect-diagnostic-data-11.png) + +For more information, see [Collect diagnostic data](collect-diagnostic-data.md#web-recording). + +### Q: How do I control how long I keep my test data? + +**A:** [Learn more here](getting-started/how-long-to-keep-test-results.md). + + +### Q: Can I run tests offline and then import the results? + +**A:** Yes, see the [Offline Test Execution extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.OfflineTestExecution). + +***** + + +## Tracking test status + +### Q: Can I view the recent test results for an individual test case? + +**A:** Yes, select the test case within a test suite and then +choose to view the test details pane. + +![From test suite, select test case. On toolbar, click test details icon to view the test details pane](getting-started/_img/track-test-status/ShowDetailsPane.png) + +View the recent test results for this test case. + +![In test details pane, open the Pane list, choose Test Results](getting-started/_img/track-test-status/TestResultsPane.png) + +### Q: How is data shown in the charts for test cases that are in multiple test suites? + +**A:** For test case charts, if a test case has been added to +multiple test suites in a plan then it's only counted once. +For test result charts, each instance of a test that is run +is counted for each of the test suites separately. + +### Q: Who can create charts? + +**A:** You need at least a Basic access to create charts. + +### Q: How can I edit or delete a chart? + +**A:** Select the option you want from the chart's context menu. + +### Q: How do I control how long I keep my test data? + +**A:** [Learn more here](getting-started/how-long-to-keep-test-results.md). + +***** + + +## Repeating a test with different data + +### Q: Are parameters the best way to specify that the test should be run on different operating system platforms? And with different browsers, databases, and so on? + +**A**: It's better to use [test configurations](test-different-configurations.md) for that. +With test case parameters, you run the different parameter values one after another, +which makes it difficult to switch from one platform to another. + +### Q: Can I use parameters in shared steps? + +**A**: Yes. You set the parameter values in the test cases where you use the shared steps. + +### Q: Can I import parameter values from an Excel spreadsheet to my shared parameter sets? + +**A**: Yes. Copy the data from your Excel spreadsheet and paste it +into your shared parameters grid. You can also copy the data from +your grid back into Excel if you need to. + +***** + + +## Managing test results + +### Q: What are the default retention limits? + +**A**: For team projects created before October 2015, +VSTS doesn't delete results from automated tests +and manual tests unless you change the retention limit. + +For new team projects created after October 2015, +VSTS deletes all test results after one year (365 days), +unless you chose to indefinitely retain a build associated with those results. + +### Q: What is the default test retention policy for XAML builds? + +**A**: By default, a XAML build definition is set up to delete builds older +than the 10 most recent builds. But related test results aren't automatically +deleted when those builds are deleted. +[Learn more](https://msdn.microsoft.com/library/ms181716%28v=vs.120%29.aspx). + +### Q: Why isn't test data deleted for XAML builds by default? + +**A**: By default, this is turned off because 10 builds can happen very quickly, +especially with continuous integration builds. +Test results are often deleted before you can analyze them. + + +### Q: How do I keep a build indefinitely? + +**A**: Like this: + +![Keep a build indefinitely](getting-started/_img/how-long-to-keep-test-results/build-keep-indefinitely.png) + +***** + + +## Sharing steps between test cases + +### Q: How do I use shared steps in Microsoft Test Manager?** + +**A:** It's almost exactly the same in Microsoft Test Manager as in the web portal. The buttons look slightly different. + +### Q: Can I find all my shared steps, and all the test cases where they are used?** + +**A:** Yes. [Open Microsoft Test Manager](mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan.md) and look under **Organize**, **Shared Steps Manager**. +Shared steps and test cases are stored as work items in Team Foundation Server. + +### Q: Can I share steps between test plans and team projects?** + +**A:** Yes. But don't forget that if you edit shared steps, the changes appear in every place you use them. + +### Q: Can I use parameters in shared steps?** + +**A:** Yes. You provide values for the [parameters](repeat-test-with-different-data.md) in the test cases where the shared steps are used. +You don't have to provide values in the shared steps definition. However, you can provide one default row of values, which is used when you create an action recording of a standalone shared step. + +***** + + +## Test & Feedback extension + + +### Q: Which web browsers does the extension support? + +**A:** The Test & Feedback extension is currently available for +[Google Chrome](https://www.google.com/chrome/) +and [Mozilla Firefox version 50.0 and higher](https://www.mozilla.org/). +Edge support is planned. + +Some browser versions do not currently support all the features of the Test & Feedback extension. + +| Feature | Chrome | Firefox | +| --- | --- | --- | +| Capture screenshots with inline annotations |   **Yes** |   **Yes** | +| Capture notes |   **Yes** |   **Yes** | +| Capture screen recordings |   **Yes** |   **No** | +| Capture page load data |   **Yes** |   **No** | +| Capture user actions log |   **Yes** |  **No** | +| Capture system information |   **Yes** |  **No** | +| Create bugs |   **Yes** |   **Yes** | +| Create tasks and test cases |   **Yes** |   **Yes** | +| Create feedback requests |   **Yes** |   **Yes** | +| Export session report for sharing |   **Yes** |   **Yes** | +| End-to-end tracability for workitems |   **Yes** |   **Yes** | +| Simplified bug and task tracking and triaging |   **Yes** |   **Yes** | +| View and get insights from sessions |   **Yes** |   **Yes** | +| View similar existing bugs |   **Yes** |   **Yes** | +| Test app on devices using cloud providers such as Perfecto |   **Yes** |   **No** | +| Manage feedback requests |   **Yes** |   **Yes** | + +

        +For more details, see +[Visual Studio Marketplace](https://marketplace.visualstudio.com/items/ms.vss-exploratorytesting-web). + + +### Q: How do I play the video recordings I created with the extension? + +**A:** The video recordings created by the Test & Feedback extension can be +viewed in [Google Chrome](https://www.google.com/chrome/) browser and in the +[VLC Video Player](http://www.videolan.org/vlc/download-windows.html). + +### Q: Does the extension support Team Foundation Server? + +**A:** The Test & Feedback extension supports Team Foundation Server 2015 and later. +All users, including stakeholders, can use the extension in Connected +mode with all the functionality except session insights and the request +and provide feedback flow, which are supported only for TFS 2017. + + +### Q: Can I edit an existing bug instead of creating a new bug when using the Test & Feedback extension? + +**A:** Yes, the extension automatically shows bugs that may be related to the one you are creating +and allows you to add your screenshots, notes, and videos to this existing bug. +For more details, see [Add findings to existing bugs with exploratory testing](add-to-bugs-exploratory-testing.md). + +***** + + +## Microsoft Test Manager + +### Q: Can I record a test in one test plan and play it back in another? + +**A:** Yes, this is a great way to do regression tests quickly and accurately. +If you want to repeat some tests you did in a previous sprint, +just add those test cases to the test plan for the current sprint. +The recording is linked to the test case, not to its appearance +in any particular test plan or suite. + +### Q: Can I record a test in one test configuration and play it back in a different configuration? The tests for different configurations show up as separate tests in the Run page. + +**A:** Yes, the recording is linked to the test case, +so you can play it back from any instance of that test case, even in different +[test configurations](test-different-configurations.md), +test suites, or test plans. + +### Q: Some or all of my actions aren't recorded, or the playback doesn’t work properly. Why? + +**A:** Action recording works best for apps in which each user +interface field has a unique ID, and for basic actions such as keystrokes, +clicks, and menu selections. It doesn't work for some apps and web browsers. +See [Supported configurations and platforms for coded UI tests and action recordings](https://msdn.microsoft.com/library/dd380742). +To learn how to develop your app so that it's easier to record tests, +see [Enable coded UI testing of your controls](https://msdn.microsoft.com/library/hh552522). + +### Q: Record and playback is great. But can I completely automate a test, including verifying the results? + +**A:** Yes, see [Automate system tests](https://msdn.microsoft.com/library/ff472576%28v=vs.140%29.aspx). + +***** + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/repeat-test-with-different-data.md b/docs/manual-test/repeat-test-with-different-data.md new file mode 100644 index 00000000000..ffc35522a1a --- /dev/null +++ b/docs/manual-test/repeat-test-with-different-data.md @@ -0,0 +1,141 @@ +--- +title: Repeat a test with different data +description: Manual and exploratory testing - repeat a test with different data in Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: C9953A56-9BD6-408B-899B-FAD816B9FC0C +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Repeat a test with different data + +[!INCLUDE [version-header-ts-tfs](_shared/version-header-ts-tfs.md)] + +When you write a [manual test](getting-started/create-test-cases.md), +you often want to specify that the test should be repeated several +times with different test data. For example, if your users can add +different quantities of a product to a shopping cart, then you want +to check that a quantity of 200 works just as well as a quantity of 1. + +To do this, you insert parameters in your test steps. Along with +the test steps, you provide a table of parameter values. You can +also share parameters and their data between test cases when you +use the web portal with TFS 2015 and later or +VSTS. That way you can run multiple test cases with the +same data. + +## Add parameters to a test case + +1. Create a parameter by typing a name preceded by "**@**" in the + actions and expected results of your test steps. + + ![Creating a parameter](_img/repeat-test-with-different-data/repeat-test-with-different-data-01.png) + +1. Underneath the list of steps, add combinations of parameter values. + You might need to scroll down to see them. + +## Share parameters between test cases + +1. Convert existing parameters to shared parameters so that you + can use them and the associated data in other test cases. + + ![Converting existing parameters to shared parameters](_img/repeat-test-with-different-data/repeat-test-with-different-data-02.png) + +1. After you've created a shared parameter set, open another + test case and add the shared parameter set to that test case. + You can search for the shared parameter set by name. + + ![Adding the shared parameter set to a test case](_img/repeat-test-with-different-data/repeat-test-with-different-data-03.png) + + The shared parameter set is displayed in the **Parameter values** + section after you add it. You can now use these parameters in + your test case steps. + +1. If the test case has different parameter names for + these shared parameters, map the shared parameters to + the local parameters to use the shared parameter data. + + ![Mapping a shared parameter to a local parameter](_img/repeat-test-with-different-data/repeat-test-with-different-data-04.png) + + When they are correctly mapped, the data associated with the + shared parameter is displayed. + +1. Add, edit and rename your shared parameter sets in the + **Parameters** tab. View the test cases that reference + them in the **Test cases** pane. + + ![Adding, editing, viewing, and renaming a shared parameter](_img/repeat-test-with-different-data/repeat-test-with-different-data-05.png) + +1. Each shared parameter set is a work item. Open the **Properties** + tab to view or make changes to this work item. For example, + you can assign owners and track changes. + +## Run a test case with parameters + +1. Select a test case with parameters and start it running. +The Test Runner shows the first row of parameter values. + + ![Test Runner showing the first row of parameter values](_img/repeat-test-with-different-data/repeat-test-with-different-data-06.png) + +1. When you've completed the steps, mark the test passed or failed. + Then go on to the next iteration of the test, which uses the next + row of parameter values. + + ![Going on to the next iteration of the test](_img/repeat-test-with-different-data/repeat-test-with-different-data-07.png) + +1. Use the drop down to navigate to other iterations. + + ![Navigating to other iterations](_img/repeat-test-with-different-data/repeat-test-with-different-data-08.png) + +1. If any of the parameter values are incorrect, fix them + without canceling the test by choosing **Edit** from step's + shortcut menu. + +## Review the test results + +If you marked any test iteration as failed, the outcome of the +entire test is shown as failed. + +1. Check the test result by opening the details pane. + + ![Checking the test result in the details pane](_img/repeat-test-with-different-data/repeat-test-with-different-data-09.png) + +1. Double-click a test result to view the test run details, + and the test results for each iteration. + + ![Viewing the test run details](_img/repeat-test-with-different-data/repeat-test-with-different-data-10.png) + +## Speed up test iterations by using record and playback + +It can be error-prone and tedious to work through a long table of +parameter combinations. To speed things up, create an action +recording when you run the test with the first set of parameter +values, and then play it back for the other sets. + +1. Use Microsoft Test Manager to [run the test](getting-started/run-manual-tests.md). + +1. Select **Create action recording** before you choose **Start**. + +1. Complete the first test iteration and then move on to the next one. + +1. Mark each step as passed or failed as you work. Enter parameter + values in the application exactly as they are displayed in the test script. + +1. Choose **Play** to run the test with the next set of parameter values. + Your actions will be played back automatically, but you must still + verify the results. + +Record and playback doesn't work with all applications. For details, see +[Supported Configurations and Platforms for Coded UI Tests and Action Recordings](https://msdn.microsoft.com/en-us/library/dd380742.aspx). + +## See also + +* [FAQs for manual testing](reference-qa.md#repeatdifferent) +* [Overview of manual and exploratory testing](index.md) +* [Testing different configurations](test-different-configurations.md) +* [Collect diagnostic data](collect-diagnostic-data.md) +* [Manage test results](getting-started/how-long-to-keep-test-results.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-04.png b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-04.png new file mode 100644 index 00000000000..020656bd79a Binary files /dev/null and b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-04.png differ diff --git a/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-05.png b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-05.png new file mode 100644 index 00000000000..08783b4397c Binary files /dev/null and b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-05.png differ diff --git a/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-06.png b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-06.png new file mode 100644 index 00000000000..dad4a9b9fe1 Binary files /dev/null and b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-06.png differ diff --git a/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-15.png b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-15.png new file mode 100644 index 00000000000..0c7c3688042 Binary files /dev/null and b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-15.png differ diff --git a/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-16.png b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-16.png new file mode 100644 index 00000000000..f94c6e22d94 Binary files /dev/null and b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-16.png differ diff --git a/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-17.png b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-17.png new file mode 100644 index 00000000000..4701bfb5133 Binary files /dev/null and b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-17.png differ diff --git a/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-18.png b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-18.png new file mode 100644 index 00000000000..d832105f571 Binary files /dev/null and b/docs/manual-test/stakeholder/_img/provide-stakeholder-feedback/provide-stakeholder-feedback-18.png differ diff --git a/docs/manual-test/stakeholder/_img/request-stakeholder-feedback/request-stakeholder-feedback-01.png b/docs/manual-test/stakeholder/_img/request-stakeholder-feedback/request-stakeholder-feedback-01.png new file mode 100644 index 00000000000..d64dbae2161 Binary files /dev/null and b/docs/manual-test/stakeholder/_img/request-stakeholder-feedback/request-stakeholder-feedback-01.png differ diff --git a/docs/manual-test/stakeholder/_img/request-stakeholder-feedback/request-stakeholder-feedback-02.png b/docs/manual-test/stakeholder/_img/request-stakeholder-feedback/request-stakeholder-feedback-02.png new file mode 100644 index 00000000000..6c20c3b348a Binary files /dev/null and b/docs/manual-test/stakeholder/_img/request-stakeholder-feedback/request-stakeholder-feedback-02.png differ diff --git a/docs/manual-test/stakeholder/_img/track-stakeholder-feedback/track-stakeholder-feedback-30.png b/docs/manual-test/stakeholder/_img/track-stakeholder-feedback/track-stakeholder-feedback-30.png new file mode 100644 index 00000000000..7c8f9ea1e8c Binary files /dev/null and b/docs/manual-test/stakeholder/_img/track-stakeholder-feedback/track-stakeholder-feedback-30.png differ diff --git a/docs/manual-test/stakeholder/_img/track-stakeholder-feedback/track-stakeholder-feedback-31.png b/docs/manual-test/stakeholder/_img/track-stakeholder-feedback/track-stakeholder-feedback-31.png new file mode 100644 index 00000000000..07c029f5518 Binary files /dev/null and b/docs/manual-test/stakeholder/_img/track-stakeholder-feedback/track-stakeholder-feedback-31.png differ diff --git a/docs/manual-test/stakeholder/_img/voluntary-stakeholder-feedback/voluntary-stakeholder-feedback-26.png b/docs/manual-test/stakeholder/_img/voluntary-stakeholder-feedback/voluntary-stakeholder-feedback-26.png new file mode 100644 index 00000000000..70c9d018fe5 Binary files /dev/null and b/docs/manual-test/stakeholder/_img/voluntary-stakeholder-feedback/voluntary-stakeholder-feedback-26.png differ diff --git a/docs/manual-test/stakeholder/_img/voluntary-stakeholder-feedback/voluntary-stakeholder-feedback-27.png b/docs/manual-test/stakeholder/_img/voluntary-stakeholder-feedback/voluntary-stakeholder-feedback-27.png new file mode 100644 index 00000000000..9d9eae900a4 Binary files /dev/null and b/docs/manual-test/stakeholder/_img/voluntary-stakeholder-feedback/voluntary-stakeholder-feedback-27.png differ diff --git a/docs/manual-test/stakeholder/provide-stakeholder-feedback.md b/docs/manual-test/stakeholder/provide-stakeholder-feedback.md new file mode 100644 index 00000000000..92f421d26c5 --- /dev/null +++ b/docs/manual-test/stakeholder/provide-stakeholder-feedback.md @@ -0,0 +1,160 @@ +--- +title: Provide feedback using the Test & Feedback extension +description: Provide feedback in VSTS or TFS using the Exploratory Testing browser extension +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 41CCD562-C071-4C33-A178-71DDAE83912E +ms.manager: douge +ms.author: ahomer +ms.date: 08/26/2016 +--- + +# Provide feedback using the Test & Feedback extension + +[!INCLUDE [version-header-ts-tfs15](../_shared/version-header-ts-tfs15.md)] + +[!INCLUDE [feedback-header-text](../_shared/feedback-header-text.md)] + + +Stakeholders and other users can respond to feedback requests using the +Test & Feedback extension in two ways: + +* [From the link in a feedback request email](#email) +* [Directly from the Test & Feedback extension](#direct) + +Before you start, ensure you have installed the +[Test & Feedback extension](../getting-started/perform-exploratory-tests.md). +This is required in order to respond to feedback requests. + +>Any user with a Stakeholder access can use the +Test & Feedback extension in **Stakeholder** mode. This +mode is designed to allow the widest possible range of users +to assist test teams by providing feedback. + + +## Provide feedback directly from a feedback request email + +1. Open the feedback request email and choose the + **Provide feedback** link. + + ![Choosing the Provide feedback link in the request email](_img/provide-stakeholder-feedback/provide-stakeholder-feedback-04.png) + +1. The VSTS or TFS landing page opens to confirm + that the extension has been automatically configured with + the feedback request. Choose the ![launch extension](../_img/_shared/exp-test-icon.png) + icon in the toolbar to launch the extension. + + ![Confirmation that the extension has been automatically configured](_img/provide-stakeholder-feedback/provide-stakeholder-feedback-05.png) + + If you are a **Stakeholder**, you see the **Feedback requests** page. + Read the instructions (if any) in the feedback form to + understand how to give the feedback and what the requestor + requires. + + ![The feedback form containing the instructions](_img/provide-stakeholder-feedback/provide-stakeholder-feedback-06.png) + + If you are a **Basic** user, you see the **Explore work item** traceability + page showing details of the user story on which feedback was requested, + and the user acceptance criteria (if any). + + ![The traceability page showing the user story and user acceptance criteria](_img/provide-stakeholder-feedback/provide-stakeholder-feedback-18.png) + +1. Read any instructions in the email and this page + to understand how to give the feedback, and on what feature. + + +1. Open the application you need to provide feedback on + and begin your feedback. For example, choose + **Capture screenshot** to take a screenshot. + + ![Capturing a screenshot](../_img/_shared/provide-stakeholder-feedback-07.png) + + You can use all the capabilities of the extension + such as capturing screenshots, notes, and screen recordings. + For more details, see [this topic](../connected-mode-exploratory-testing.md). + + >Some browsers may not provide all the capture capabilities. + See [Which web browsers does the extension support?](../reference-qa.md#browser-support) + +1. When you are done capturing feedback: + + * If you are a **Stakeholder**, choose **Provide feedback**. + You can optionally choose to create bugs and tasks when you + submit your feedback. The process is the same as described in + [this topic](../connected-mode-exploratory-testing.md#create-bugs). + + ![Submitting your feedback](../_img/_shared/provide-stakeholder-feedback-08.png) + + + * If you are a **Basic** user, create a bug or a task. + + ![Create a bug or a task from the captured information](../_img/connected-mode-exploratory-testing/create-bugs-02.png) + +1. All your feedback captured is shown in the response form, bug, or task. + Type a suitable title and, optionally, select a star rating for + the feature you've been testing. + + ![Entering a title and star rating](../_img/_shared/provide-stakeholder-feedback-09.png) + +1. Save your feedback. This create a work item in VSTS + or TFS containing all your feedback. + +1. Continue to capture more feedback if required. You can submit + multiple feedback responses, bugs, and tasks for the same feedback request. + +1. If you are a **Stakeholder**: + + * When you are done providing feedback, go to the **Feedback + requests** page and choose **Feedback requests**. + + ![Opening the pending feedback requests page](../_img/_shared/provide-stakeholder-feedback-10.png) + + * In the pending feedback requests page, mark the feedback request as **Completed**. + + ![Completing your feedback session](../_img/_shared/provide-stakeholder-feedback-11.png) + +1. Choose the **Stop** icon to end your feedback session. + + ![Ending your feedback session](../_img/_shared/provide-stakeholder-feedback-12.png) + + +## Provide feedback directly from the Test & Feedback extension + +1. Open the Test & Feedback extension in your browser using the + ![launch exploratory testing](../_img/_shared/exp-test-icon.png) + icon in the toolbar. + +1. In the **Connection settings** page, choose **Connected** mode. + + ![Choosing Connected mode](../_img/_shared/connectedmode-01.png) + +1. Connect to the server and the project or team that is requesting feedback. + + ![Entering connection details](../_img/_shared/connectedmode-02.png) + +1. Open the **Feedback requests** page to see all your feedback requests + from the project or team you connected to. + + ![Viewing the list of feedback requests](_img/provide-stakeholder-feedback/provide-stakeholder-feedback-15.png) + +1. Select the feedback request you want to respond to and choose + **View feedback**. + + ![Selecting a feedback request to view](_img/provide-stakeholder-feedback/provide-stakeholder-feedback-16.png) + +1. Read the instructions in the feedback request details page, then + choose **Provide feedback**. + + ![Starting to provide feedback for a request](_img/provide-stakeholder-feedback/provide-stakeholder-feedback-17.png) + +1. Capture and submit your feedback as [shown above](#capture-feedback). + +## See also + +* [Request stakeholder feedback using the Test & Feedback extension](request-stakeholder-feedback.md#request) +* [Voluntary stakeholder feedback using the Test & Feedback extension](voluntary-stakeholder-feedback.md#voluntary) +* [Track stakeholder feedback using the Test & Feedback extension](track-stakeholder-feedback.md#track) +* [Exploratory test and submit feedback directly from your browser](../getting-started/perform-exploratory-tests.md) +* [Overview of manual and exploratory testing](../index.md) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/stakeholder/request-stakeholder-feedback.md b/docs/manual-test/stakeholder/request-stakeholder-feedback.md new file mode 100644 index 00000000000..4498bc21f28 --- /dev/null +++ b/docs/manual-test/stakeholder/request-stakeholder-feedback.md @@ -0,0 +1,52 @@ +--- +title: Request stakeholder feedback using the Test & Feedback extension +description:Request stakeholder feedback in VSTS or TFS using the Exploratory Testing browser extension +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 6AE1D62D-43EE-4C0B-92CD-F11BC10A9CA8 +ms.manager: douge +ms.author: ahomer +ms.date: 08/26/2016 +--- + +# Request stakeholder feedback using the Test & Feedback extension + +[!INCLUDE [version-header-ts-tfs15](../_shared/version-header-ts-tfs15.md)] + +[!INCLUDE [feedback-header-text](../_shared/feedback-header-text.md)] + + +## Request feedback from stakeholders + +Request feedback from stakeholders directly from a VSTS or TFS work item. + +1. Open the work item form for the user story or feature for which + you want to request feedback. + +1. Open the shortcut menu from the ellipses (**...**) and choose **Request feedback**. + + ![Choosing the Request feedback option](_img/request-stakeholder-feedback/request-stakeholder-feedback-01.png) + +1. Type or select the names of the stakeholder(s) you want to send + the request to, and optionally add any instructions or notes that + will help them provide meaningful feedback. + + ![Selecting users and entering instructions](_img/request-stakeholder-feedback/request-stakeholder-feedback-02.png) + +1. Choose **Send** to generate emails to all the selected stakeholders. + +> [!NOTE] +> Teams can request feedback from other team members, such as users having Basic access. +> Just add their names in the feedback request form so that a **Request feedback** email is sent to them. +> Also see [Can users with Basic access respond to feedback requests?](provide-stakeholder-feedback.md#non-stakeholder-feedback). + +## See also + +* [Provide stakeholder feedback using the Test & Feedback extension](provide-stakeholder-feedback.md#provide) +* [Voluntary stakeholder feedback using the Test & Feedback extension](voluntary-stakeholder-feedback.md#voluntary) +* [Track stakeholder feedback using the Test & Feedback extension](track-stakeholder-feedback.md#track) +* [Exploratory test and submit feedback directly from your browser](../getting-started/perform-exploratory-tests.md) +* [Overview of manual and exploratory testing](../index.md) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] + diff --git a/docs/manual-test/stakeholder/track-stakeholder-feedback.md b/docs/manual-test/stakeholder/track-stakeholder-feedback.md new file mode 100644 index 00000000000..be1402ceca7 --- /dev/null +++ b/docs/manual-test/stakeholder/track-stakeholder-feedback.md @@ -0,0 +1,41 @@ +--- +title: Track stakeholder feedback using the Test & Feedback extension +description: Track stakeholder feedback in VSTS or TFS using the Exploratory Testing browser extension +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: DADC6608-1830-4FDA-9007-6539859F4866 +ms.manager: douge +ms.author: ahomer +ms.date: 08/26/2016 +--- + +# Track stakeholder feedback using the Test & Feedback extension + +[!INCLUDE [version-header-ts-tfs15](../_shared/version-header-ts-tfs15.md)] + +[!INCLUDE [feedback-header-text](../_shared/feedback-header-text.md)] + + +## Track feedback requests + +1. In VSTS or TFS, select your project and open + the **Queries** tab of the **Work** hub. + + ![Opening the Queries tab of the Work hub](_img/track-stakeholder-feedback/track-stakeholder-feedback-30.png) + +1. In the list of shared queries, select **Feedback**. + This query displays a list of all the feedback responses received. + + ![Viewing the feedback responses](_img/track-stakeholder-feedback/track-stakeholder-feedback-31.png) + +1. Open the response work item to see the details of the feedback. + +## See also + +* [Request stakeholder feedback using the Test & Feedback extension](request-stakeholder-feedback.md#request) +* [Provide stakeholder feedback using the Test & Feedback extension](provide-stakeholder-feedback.md#provide) +* [Voluntary stakeholder feedback using the Test & Feedback extension](voluntary-stakeholder-feedback.md#voluntary) +* [Exploratory test and submit feedback directly from your browser](../getting-started/perform-exploratory-tests.md) +* [Overview of manual and exploratory testing](../index.md) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/stakeholder/voluntary-stakeholder-feedback.md b/docs/manual-test/stakeholder/voluntary-stakeholder-feedback.md new file mode 100644 index 00000000000..6565a70bcb3 --- /dev/null +++ b/docs/manual-test/stakeholder/voluntary-stakeholder-feedback.md @@ -0,0 +1,85 @@ +--- +title: Voluntarily provide stakeholder feedback +description: Voluntarily provide stakeholder feedback in VSTS or TFS using the Exploratory Testing browser extension +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 4E467527-62C6-4321-BA56-FF82F0FFFD69 +ms.manager: douge +ms.author: ahomer +ms.date: 08/26/2016 +--- + +# Voluntarily provide stakeholder feedback using the Test & Feedback extension + +[!INCLUDE [version-header-ts-tfs15](../_shared/version-header-ts-tfs15.md)] + +[!INCLUDE [feedback-header-text](../_shared/feedback-header-text.md)] + + +## Provide voluntary feedback + +You can use the Test & Feedback extension to provide feedback +voluntarily, even if you haven't received a specific +[feedback request](request-stakeholder-feedback.md#request). + +1. Open the Test & Feedback extension in your browser using the + ![launch exploratory testing](../_img/_shared/exp-test-icon.png) + icon in the toolbar. + +1. In the **Connection settings** page, choose **Connected** mode. + + ![Choosing Connected mode](../_img/_shared/connectedmode-01.png) + +1. Connect to the server and the project or team that is requesting feedback. + + ![Entering connection details](../_img/_shared/connectedmode-02.png) + +1. Start the exploratory testing session. + + ![Starting the exploratory testing session](_img/voluntary-stakeholder-feedback/voluntary-stakeholder-feedback-26.png) + +1. Open the application you want to provide feedback on + and begin your feedback. For example, choose + **Capture screenshot** to take a screenshot. + + ![Capturing a screenshot](_img/voluntary-stakeholder-feedback/voluntary-stakeholder-feedback-27.png) + + You can use all the capabilities of the extension + such as capturing screenshots, notes, and screen recordings. + + >Some browsers may not provide all of the capture capabilities. + See [Which web browsers does the extension support?](../reference-qa.md#browser-support) + +1. When you are done capturing feedback, Choose **Provide feedback**. + + ![Submitting your feedback](../_img/_shared/provide-stakeholder-feedback-08.png) + + You can optionally choose to create bugs and tasks when you + submit your feedback. The process is the same as described + [here](../connected-mode-exploratory-testing.md#create-bugs). + +1. All your feedback captured is shown in the response form. + Type a suitable title and, optionally, select a star rating for + the feature you've been testing. + + ![Entering a title and star rating](../_img/_shared/provide-stakeholder-feedback-09.png) + +1. Save your feedback. This create a work item in VSTS + or TFS containing all your feedback. + +1. Continue to capture more feedback if required. You can submit + multiple feedback responses, bugs, and tasks for the same feedback request. + +1. Choose the **Stop** icon to end your feedback session. + + ![Ending your feedback session](../_img/_shared/provide-stakeholder-feedback-12.png) + +## See also + +* [Request stakeholder feedback using the Test & Feedback extension](request-stakeholder-feedback.md#request) +* [Provide stakeholder feedback using the Test & Feedback extension](provide-stakeholder-feedback.md#provide) +* [Track stakeholder feedback using the Test & Feedback extension](track-stakeholder-feedback.md#track) +* [Exploratory test and submit feedback directly from your browser](../getting-started/perform-exploratory-tests.md) +* [Overview of manual and exploratory testing](../index.md) + +[!INCLUDE [help-and-support-footer](../_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/standalone-mode-exploratory-testing.md b/docs/manual-test/standalone-mode-exploratory-testing.md new file mode 100644 index 00000000000..90d7b056419 --- /dev/null +++ b/docs/manual-test/standalone-mode-exploratory-testing.md @@ -0,0 +1,90 @@ +--- +title: Exploratory testing with the Test & Feedback extension in Standalone mode +description: Manual and exploratory testing - exploratory testing with the Test & Feedback extension in Standalone mode +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 762A75FB-0B6D-47C3-9232-371348D8D529 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +ms.topic: get-started-article +--- + +# Exploratory testing with the Test & Feedback extension in Standalone mode + +[!INCLUDE [version-header-ts-tfs](_shared/version-header-ts-tfs.md)] + +All teams can use the Test & Feedback extension in **Standalone** mode. +Users don't need a Visual Studio Team Services (VSTS) account +or Team Foundation Server connection to use this mode. + + +## Start testing in Standalone mode + +1. If you haven't already, [install the Test & Feedback extension](getting-started/perform-exploratory-tests.md). + +1. Open the extension in your web browser and select **Standalone** mode. + + ![Start the extension in Standalone mode](_img/standalone-mode-exploratory-testing/standalonemode-01.png) + +1. Open the web application you want to explore and + start the testing session. + + ![Start recording in Standalone mode](_img/standalone-mode-exploratory-testing/standalonemode-02.png) + +1. When you find an area that has a bug, take a screenshot of the entire screen or any part of it. + + ![Take a screenshot of the application issue](_img/standalone-mode-exploratory-testing/standalonemode-03.png) + +1. You can annotate the screenshot using the tools available in the inline annotation toolbar. + + ![Annotate your screenshot if required](_img/standalone-mode-exploratory-testing/standalonemode-04.png) + +1. Make notes about the issue to share with your team, and then save the note. + + ![Add notes about the issue if required](_img/standalone-mode-exploratory-testing/standalonemode-05.png) + + +## Create a bug + +1. When you have finished capturing information for an issue, choose **Create bug**. + + ![Create a bug from the captured information](_img/standalone-mode-exploratory-testing/standalonemode-06.png) + +1. The bug form contains all your captured information. + Enter a title for the bug and add any additional notes + you require to the description. Then save the bug. + + ![Enter a title and description, then save the bug](_img/standalone-mode-exploratory-testing/standalonemode-07.png) + +1. View a list of all your activities in reverse chronological + order in the **Session timeline** page. It shows all the + screenshots and notes you've captured and the bugs you've already created. + + ![Review your captured information](_img/standalone-mode-exploratory-testing/standalonemode-07a.png) + + +## End your testing session + +1. Continue exploring the application. Create more bugs as you encounter + issues with the app. + +1. When you're done, stop your session. + + ![Stop the exploratory testing session](_img/standalone-mode-exploratory-testing/standalonemode-08.png) + + The extension automatically creates a session report that contains + details of all the bugs created during the session, and any attachments. + + ![The exploratory testing report](_img/standalone-mode-exploratory-testing/standalonemode-09.png) + +1. The report is saved in the default Downloads folder of your web browser. + Share it with the rest of your team as an email attachment, or + copy it to OneNote, Word, or in any other format you prefer. + +[How do I play the video recordings I created with the extension?](reference-qa.md#recording-playback) + +## Next step + +> [!div class="nextstepaction"] +> [Use the extension in Connected mode](connected-mode-exploratory-testing.md) diff --git a/docs/manual-test/test-different-configurations.md b/docs/manual-test/test-different-configurations.md new file mode 100644 index 00000000000..3e62c9e4553 --- /dev/null +++ b/docs/manual-test/test-different-configurations.md @@ -0,0 +1,157 @@ +--- +title: Test different configurations when manual or exploratory testing +description: Manual and exploratory testing - test different configurations with Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-test-manual +ms.assetid: 750F033E-A39E-4C85-BF85-012629C33DE6 +ms.manager: douge +ms.author: ahomer +ms.date: 08/12/2016 +--- + +# Test different configurations + +[!INCLUDE [version-header-ts](_shared/version-header-ts.md)] + +Your users will probably install or run your app +on a wide variety of configurations, such as different +operating systems, web browsers, and other variations. +You will want to run at least some of your tests in +environments that have those different configurations. + +Use your test plan to decide which tests you want to run +on which configurations. You have to make sure that when +you run your tests that you have set up your environments +for the configurations that you need. + +You might draw up a schematic matrix of the combinations that you want to test: + +![Test matrix of browser and operating system configurations](_img/_shared/testing-configurations-schematic.png) + +Then you can: + +* [Create the configurations and variables](#create-configs) +* [Assign the configurations to test plans and test suites](#assign-configs) +* [Run tests with each of the configurations](#run-configs) +* [Track your test results for each configuration](#track-configs) + +> This feature is available only in Visual Studio Team Services. + + +## Create configurations and variables + +A test configuration is a combination of configuration variable +values. Your configuration variables could be, for example, +operating system, browser, CPU type, database. A configuration +might be "Windows 8 + 32-bit CPU" or "Windows 10 + 64-bit CPU." + +You must create the configuration variables first. Then combine +multiple variable values to create a configuration. + +1. Open the **Configurations** tab in the **Test** hub, choose + the ![new](_img/plus-and-arrow-icon.png) icon, and select + **New configuration variable**. + + ![Adding a new configuration variable](_img/testing-configurations/testing-configurations-01.png) + +1. Type a name for the variable, such as **Browser**, and type a value. + Add as many values as you wish to the configuration variable, and then save it. + + ![Setting the values for a new configuration variable](_img/testing-configurations/testing-configurations-01b.png) + +1. Repeat the steps to create any other configuration variables + you need. For example, create a configuration variable named **Operating system** + with the names of each operating system on which you want to test. + + ![Setting the values for an Operating Systems configuration variable](_img/testing-configurations/testing-configurations-01c.png) + +1. Choose the ![new](_img/plus-and-arrow-icon.png) icon and select + **New test configuration**. + + ![Adding a new test configuration](_img/testing-configurations/testing-configurations-01a.png) + +1. Type a name for the test configuration and add the configuration + variables you created. Choose a value for each variable for this configuration. + + ![Adding variables to the new test configuration](_img/testing-configurations/testing-configurations-02.png) + + Ensure **Assign to new test plans** is checked to make this the default + configuration for all the new test plans you create. + +1. Save your new test configuration. + + +## Assign configurations to test plans and suites + +You can assign configurations to a test plan, a test suite, +or an individual test case. Configurations assigned to a test plan +or test suite apply to all tests or suites within it. + +1. To assign a configuration to a test plan, open the shortcut + menu for the plan and choose **Assign configuration to test plan**. + + ![Assigning a configuration to a test plan](_img/testing-configurations/testing-configurations-03.png) + +1. To assign a configuration to a test suite, open the shortcut + menu for the suite and choose **Assign configuration to test suite**. + + ![Assigning a configuration to a test suite](_img/testing-configurations/testing-configurations-04.png) + + If you add multiple configurations to a test plan or suite, + the tests cases are repeated in the plan or suite with the + each of the configurations you have assigned. + + ![Multiple configuration assignment to a test suite](_img/testing-configurations/testing-configurations-05.png) + +1. If necessary, override the default configuration assigned to a test case + and assign the configuration you need. Select one or more + test cases, open the shortcut menu, and choose **Assign configurations**. + + ![Overriding the default configuration assigned to a test case](_img/testing-configurations/testing-configurations-06.png) + +1. Search for and select the configurations to assign to these test case(s). + + ![Setting the required configurations for a test case](_img/testing-configurations/testing-configurations-07.png) + + +## Run tests with each configuration + +1. Set up a testing platform for a particular configuration, such + as testing the app using Google Chrome on Windows 10. + +1. Select and run a test that has this configuration assigned. + + ![Running the test with the configuration assigned](_img/testing-configurations/testing-configurations-07a.png) + + As you run the test, a reminder of the required configuration + in shown in the status bar of the Test Runner window. + + ![The required configuration appears in the Test Runner window](_img/testing-configurations/testing-configurations-08.png) + + +## Track test results for each configuration + +1. Open the **Charts** tab for your test plan or test suite, choose + **New**, and select **New test result chart**. + + ![Creating a new test result chart](_img/testing-configurations/testing-configurations-09.png) + +1. Choose the type of chart you require, select **Configuration** + in the **Group by** list, and choose **OK**. + + ![Choosing the type of chart you require](_img/testing-configurations/testing-configurations-10.png) + + A chart is created that can help you track your tests based on configurations. + You can pin this chart to your dashboard. + + ![The configuration test result chart](_img/testing-configurations/testing-configurations-11.png) + +> If you have a test case that appears in several test plans and test suites, you can set the different configurations for each of these. +The same test case can have different configuration settings in different test suites and test plans. + +## See also + +* [Overview of manual and exploratory testing](index.md) +* [Exploratory test and submit feedback directly from your browser](getting-started/perform-exploratory-tests.md) + +[!INCLUDE [help-and-support-footer](_shared/help-and-support-footer.md)] diff --git a/docs/manual-test/toc.yml b/docs/manual-test/toc.yml new file mode 100644 index 00000000000..ea1b4d63e51 --- /dev/null +++ b/docs/manual-test/toc.yml @@ -0,0 +1,106 @@ +- name: Exploratory Testing + href: index.md +- name: Overview + items: + - name: About exploratory testing + href: overview.md +- name: Quickstarts + items: + - name: Create a test plan + href: getting-started/create-a-test-plan.md + - name: Create test cases + href: getting-started/create-test-cases.md + - name: Run manual tests + href: getting-started/run-manual-tests.md + - name: "Test & Feedback extension" + items: + - name: Install the extension + href: getting-started/perform-exploratory-tests.md + - name: Test in Connected mode + href: connected-mode-exploratory-testing.md + - name: Test in Standalone mode + href: standalone-mode-exploratory-testing.md +- name: Tutorials + items: + - name: Test from the Kanban board + href: ../work/kanban/add-run-update-tests.md?toc=/vsts/manual-test/toc.json&bc=/vsts/manual-test/breadcrumb/toc.json +- name: How-to Guides + items: + - name: Track test status + href: getting-started/track-test-status.md + - name: Delete test artifacts + href: ../work/backlogs/remove-delete-work-items.md?toc=/vsts/manual-test/toc.json&bc=/vsts/manual-test/breadcrumb/toc.json + - name: Perform user acceptance testing + href: getting-started/user-acceptance-testing.md + - name: Test different configurations + href: test-different-configurations.md + - name: Share steps between test cases + href: mtm/share-steps-between-test-cases.md + - name: Repeat a test with different data + href: repeat-test-with-different-data.md + - name: Collect diagnostic data + href: collect-diagnostic-data.md + - name: Manage test results + href: getting-started/how-long-to-keep-test-results.md + - name: "Test & Feedback extension" + items: + - name: Explore work items + href: explore-workitems-exploratory-testing.md + - name: Add to existing bugs + href: add-to-bugs-exploratory-testing.md + - name: Get insights from tests + href: insights-exploratory-testing.md + - name: Request stakeholder feedback + href: stakeholder/request-stakeholder-feedback.md + - name: Provide stakeholder feedback + href: stakeholder/provide-stakeholder-feedback.md + - name: Get voluntary stakeholder feedback + href: stakeholder/voluntary-stakeholder-feedback.md + - name: Track stakeholder feedback requests + href: stakeholder/track-stakeholder-feedback.md + - name: Microsoft Test Manager + items: + - name: Guidance for MTM usage + href: mtm/guidance-mtm-usage.md + - name: Connect to a team project + href: mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan.md + - name: Plan tests with MTM + href: mtm/plan-manual-tests-with-microsoft-test-manager.md + - name: Run tests with MTM + href: mtm/run-manual-tests-with-microsoft-test-manager.md + - name: Record and play back tests + href: getting-started/record-play-back-manual-tests.md + - name: Explore your app + href: mtm/exploratory-testing-using-microsoft-test-manager.md + - name: Copy test suites and cases + href: mtm/copying-and-cloning-test-suites-and-test-cases.md + - name: Test different configurations + href: mtm/test-configurations-specifying-test-platforms.md + - name: Test Windows Store apps + href: mtm/testing-windows-store-apps.md +- name: Reference + items: + - name: FAQs + href: reference-qa.md + - name: Unable to connect + href: ../work/reference/error/tf31002-unable-connect-tfs.md?toc=/vsts/manual-test/toc.json&bc=/vsts/manual-test/breadcrumb/toc.json +- name: Resources + items: + - name: Get Stakeholder feedback + href: ../feedback/index.md + - name: Using Microsoft Test Manager + href: https://msdn.microsoft.com/en-us/library/jj635157.aspx + - name: REST API for test management + href: ../integrate/index.md + - name: Blog posts for testing + href: https://blogs.msdn.microsoft.com/visualstudioalm/tag/testing/ + - name: Blog posts for test management + href: https://blogs.msdn.microsoft.com/devops/?s=test+management + - name: "Test & Feedback blog posts" + href: https://social.msdn.microsoft.com/Search/en-US?query=test%20%26%20feedback%20extension&beta=0&rn=Microsoft+Application+Lifecycle+Management&rq=site:https://blogs.msdn.microsoft.com/visualstudioalm&ac=4 + - name: Load and performance testing + href: ../load-test/index.md + - name: Continuous testing + href: ../build-release/test/index.md + - name: Unit testing + href: https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios diff --git a/docs/marketplace/_img/Screen5.png b/docs/marketplace/_img/Screen5.png new file mode 100644 index 00000000000..ab475e197ef Binary files /dev/null and b/docs/marketplace/_img/Screen5.png differ diff --git a/docs/marketplace/_img/Screen6.png b/docs/marketplace/_img/Screen6.png new file mode 100644 index 00000000000..a961aa1fc66 Binary files /dev/null and b/docs/marketplace/_img/Screen6.png differ diff --git a/docs/marketplace/_img/acq.png b/docs/marketplace/_img/acq.png new file mode 100644 index 00000000000..2b8ae8b1cd3 Binary files /dev/null and b/docs/marketplace/_img/acq.png differ diff --git a/docs/marketplace/_img/addpublisherid.png b/docs/marketplace/_img/addpublisherid.png new file mode 100644 index 00000000000..5dd748da3ae Binary files /dev/null and b/docs/marketplace/_img/addpublisherid.png differ diff --git a/docs/marketplace/_img/assign-extensions/assign-extension-add-one-user-tfs.png b/docs/marketplace/_img/assign-extensions/assign-extension-add-one-user-tfs.png new file mode 100644 index 00000000000..95dcefff7ba Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/assign-extension-add-one-user-tfs.png differ diff --git a/docs/marketplace/_img/assign-extensions/assign-extension-add-one-user.png b/docs/marketplace/_img/assign-extensions/assign-extension-add-one-user.png new file mode 100644 index 00000000000..c24dcad39a1 Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/assign-extension-add-one-user.png differ diff --git a/docs/marketplace/_img/assign-extensions/assign-extension-add-users-tfs.png b/docs/marketplace/_img/assign-extensions/assign-extension-add-users-tfs.png new file mode 100644 index 00000000000..d8891b8863d Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/assign-extension-add-users-tfs.png differ diff --git a/docs/marketplace/_img/assign-extensions/assign-extension-assigned-basic-tfs.png b/docs/marketplace/_img/assign-extensions/assign-extension-assigned-basic-tfs.png new file mode 100644 index 00000000000..631f361f300 Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/assign-extension-assigned-basic-tfs.png differ diff --git a/docs/marketplace/_img/assign-extensions/assign-extension-assigned-basic.png b/docs/marketplace/_img/assign-extensions/assign-extension-assigned-basic.png new file mode 100644 index 00000000000..6a4f089cfd3 Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/assign-extension-assigned-basic.png differ diff --git a/docs/marketplace/_img/assign-extensions/assign-extension-no-users-tfs.png b/docs/marketplace/_img/assign-extensions/assign-extension-no-users-tfs.png new file mode 100644 index 00000000000..76e33d6930b Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/assign-extension-no-users-tfs.png differ diff --git a/docs/marketplace/_img/assign-extensions/assign-extension-no-users.png b/docs/marketplace/_img/assign-extensions/assign-extension-no-users.png new file mode 100644 index 00000000000..a92090dca7b Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/assign-extension-no-users.png differ diff --git a/docs/marketplace/_img/assign-extensions/check-user-access.png b/docs/marketplace/_img/assign-extensions/check-user-access.png new file mode 100644 index 00000000000..4fd83bc1996 Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/check-user-access.png differ diff --git a/docs/marketplace/_img/assign-extensions/extension-add-users.png b/docs/marketplace/_img/assign-extensions/extension-add-users.png new file mode 100644 index 00000000000..db7b16ee767 Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/extension-add-users.png differ diff --git a/docs/marketplace/_img/assign-extensions/update-paid-users.png b/docs/marketplace/_img/assign-extensions/update-paid-users.png new file mode 100644 index 00000000000..13f6c1df980 Binary files /dev/null and b/docs/marketplace/_img/assign-extensions/update-paid-users.png differ diff --git a/docs/marketplace/_img/connect-to-vs-team-services-auth.png b/docs/marketplace/_img/connect-to-vs-team-services-auth.png new file mode 100644 index 00000000000..581081c0cc6 Binary files /dev/null and b/docs/marketplace/_img/connect-to-vs-team-services-auth.png differ diff --git a/docs/marketplace/_img/content-pack-details.png b/docs/marketplace/_img/content-pack-details.png new file mode 100644 index 00000000000..cd0d67d911c Binary files /dev/null and b/docs/marketplace/_img/content-pack-details.png differ diff --git a/docs/marketplace/_img/get-data-final.png b/docs/marketplace/_img/get-data-final.png new file mode 100644 index 00000000000..da66cf62f68 Binary files /dev/null and b/docs/marketplace/_img/get-data-final.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/approve-request-tfs.png b/docs/marketplace/_img/get-tfs-extensions/connected/approve-request-tfs.png new file mode 100644 index 00000000000..e44f44a53c9 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/approve-request-tfs.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/assign-extension-to-users.png b/docs/marketplace/_img/get-tfs-extensions/connected/assign-extension-to-users.png new file mode 100644 index 00000000000..e7357325801 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/assign-extension-to-users.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/buy-test-manager-extension.png b/docs/marketplace/_img/get-tfs-extensions/connected/buy-test-manager-extension.png new file mode 100644 index 00000000000..fc017fad05f Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/buy-test-manager-extension.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/marketplace-select-extension.png b/docs/marketplace/_img/get-tfs-extensions/connected/marketplace-select-extension.png new file mode 100644 index 00000000000..d519606f3a9 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/marketplace-select-extension.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/my-request-tfs.png b/docs/marketplace/_img/get-tfs-extensions/connected/my-request-tfs.png new file mode 100644 index 00000000000..dd74662339a Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/my-request-tfs.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/request-install-tfs.png b/docs/marketplace/_img/get-tfs-extensions/connected/request-install-tfs.png new file mode 100644 index 00000000000..4e5b4f55e6d Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/request-install-tfs.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/select-azure-subscription.png b/docs/marketplace/_img/get-tfs-extensions/connected/select-azure-subscription.png new file mode 100644 index 00000000000..2b85f838b0e Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/select-azure-subscription.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/select-extension-users.png b/docs/marketplace/_img/get-tfs-extensions/connected/select-extension-users.png new file mode 100644 index 00000000000..8f8a18b2cc2 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/select-extension-users.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/select-team-project-collection.png b/docs/marketplace/_img/get-tfs-extensions/connected/select-team-project-collection.png new file mode 100644 index 00000000000..aece8a98076 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/select-team-project-collection.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/view-project-collection-administration-page.png b/docs/marketplace/_img/get-tfs-extensions/connected/view-project-collection-administration-page.png new file mode 100644 index 00000000000..869d96224b8 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/view-project-collection-administration-page.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/connected/view-request-tfs.png b/docs/marketplace/_img/get-tfs-extensions/connected/view-request-tfs.png new file mode 100644 index 00000000000..74241d5ab7b Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/connected/view-request-tfs.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/browse-for-extensions.png b/docs/marketplace/_img/get-tfs-extensions/standalone/browse-for-extensions.png new file mode 100644 index 00000000000..c6d50def560 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/browse-for-extensions.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/browse-tfs-extensions-new.png b/docs/marketplace/_img/get-tfs-extensions/standalone/browse-tfs-extensions-new.png new file mode 100644 index 00000000000..e0e2bf243a3 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/browse-tfs-extensions-new.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/choose-collection.png b/docs/marketplace/_img/get-tfs-extensions/standalone/choose-collection.png new file mode 100644 index 00000000000..9a1d6c186fe Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/choose-collection.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/confirm.png b/docs/marketplace/_img/get-tfs-extensions/standalone/confirm.png new file mode 100644 index 00000000000..9e27351505a Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/confirm.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/download-extension.png b/docs/marketplace/_img/get-tfs-extensions/standalone/download-extension.png new file mode 100644 index 00000000000..794cee741ab Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/download-extension.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/install-extension.png b/docs/marketplace/_img/get-tfs-extensions/standalone/install-extension.png new file mode 100644 index 00000000000..2e7c0739476 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/install-extension.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/manage-extensions.png b/docs/marketplace/_img/get-tfs-extensions/standalone/manage-extensions.png new file mode 100644 index 00000000000..42710f646db Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/manage-extensions.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/marketplace-find-extension.png b/docs/marketplace/_img/get-tfs-extensions/standalone/marketplace-find-extension.png new file mode 100644 index 00000000000..7a73a902c5c Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/marketplace-find-extension.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/marketplace-find-extension2.png b/docs/marketplace/_img/get-tfs-extensions/standalone/marketplace-find-extension2.png new file mode 100644 index 00000000000..b46f66a2bd7 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/marketplace-find-extension2.png differ diff --git a/docs/marketplace/_img/get-tfs-extensions/standalone/upload-extension.png b/docs/marketplace/_img/get-tfs-extensions/standalone/upload-extension.png new file mode 100644 index 00000000000..841ccb122f6 Binary files /dev/null and b/docs/marketplace/_img/get-tfs-extensions/standalone/upload-extension.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/account.png b/docs/marketplace/_img/get-vsts-extensions/account.png new file mode 100644 index 00000000000..cd0905cc2e3 Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/account.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/approve-request-updated-ui.png b/docs/marketplace/_img/get-vsts-extensions/approve-request-updated-ui.png new file mode 100644 index 00000000000..dc846d8127b Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/approve-request-updated-ui.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/go-to-account.png b/docs/marketplace/_img/get-vsts-extensions/go-to-account.png new file mode 100644 index 00000000000..53066f07b0d Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/go-to-account.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/hockey-app-extension.png b/docs/marketplace/_img/get-vsts-extensions/hockey-app-extension.png new file mode 100644 index 00000000000..9793d6a450d Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/hockey-app-extension.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/marketplace.png b/docs/marketplace/_img/get-vsts-extensions/marketplace.png new file mode 100644 index 00000000000..d29257db890 Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/marketplace.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/my-request.png b/docs/marketplace/_img/get-vsts-extensions/my-request.png new file mode 100644 index 00000000000..61c46e12c9e Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/my-request.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/request-install.png b/docs/marketplace/_img/get-vsts-extensions/request-install.png new file mode 100644 index 00000000000..a0310f705bf Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/request-install.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/select-azure-sub.png b/docs/marketplace/_img/get-vsts-extensions/select-azure-sub.png new file mode 100644 index 00000000000..ea177f05394 Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/select-azure-sub.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/select-paid-users.png b/docs/marketplace/_img/get-vsts-extensions/select-paid-users.png new file mode 100644 index 00000000000..ae8c449d9c9 Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/select-paid-users.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/subscription-directory.png b/docs/marketplace/_img/get-vsts-extensions/subscription-directory.png new file mode 100644 index 00000000000..aad4281311d Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/subscription-directory.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/team-services-account-directory.png b/docs/marketplace/_img/get-vsts-extensions/team-services-account-directory.png new file mode 100644 index 00000000000..2cec6373af1 Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/team-services-account-directory.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/team-services-account-no-directory.png b/docs/marketplace/_img/get-vsts-extensions/team-services-account-no-directory.png new file mode 100644 index 00000000000..d5a380aadc6 Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/team-services-account-no-directory.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/test-manager-extension.png b/docs/marketplace/_img/get-vsts-extensions/test-manager-extension.png new file mode 100644 index 00000000000..ecff9bfbd58 Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/test-manager-extension.png differ diff --git a/docs/marketplace/_img/get-vsts-extensions/view-request.png b/docs/marketplace/_img/get-vsts-extensions/view-request.png new file mode 100644 index 00000000000..06c160233ff Binary files /dev/null and b/docs/marketplace/_img/get-vsts-extensions/view-request.png differ diff --git a/docs/marketplace/_img/overview/marketplace-vs-new.png b/docs/marketplace/_img/overview/marketplace-vs-new.png new file mode 100644 index 00000000000..a8ee4970709 Binary files /dev/null and b/docs/marketplace/_img/overview/marketplace-vs-new.png differ diff --git a/docs/marketplace/_img/qna.png b/docs/marketplace/_img/qna.png new file mode 100644 index 00000000000..8c211100edf Binary files /dev/null and b/docs/marketplace/_img/qna.png differ diff --git a/docs/marketplace/_img/rating-and-review/detail.png b/docs/marketplace/_img/rating-and-review/detail.png new file mode 100644 index 00000000000..635b2bc459e Binary files /dev/null and b/docs/marketplace/_img/rating-and-review/detail.png differ diff --git a/docs/marketplace/_img/rating-and-review/review-reply1.png b/docs/marketplace/_img/rating-and-review/review-reply1.png new file mode 100644 index 00000000000..53a64d114e6 Binary files /dev/null and b/docs/marketplace/_img/rating-and-review/review-reply1.png differ diff --git a/docs/marketplace/_img/rating-and-review/review-reply2.PNG b/docs/marketplace/_img/rating-and-review/review-reply2.PNG new file mode 100644 index 00000000000..95817a43175 Binary files /dev/null and b/docs/marketplace/_img/rating-and-review/review-reply2.PNG differ diff --git a/docs/marketplace/_img/rating-and-review/review-reply3.PNG b/docs/marketplace/_img/rating-and-review/review-reply3.PNG new file mode 100644 index 00000000000..7699928b9d7 Binary files /dev/null and b/docs/marketplace/_img/rating-and-review/review-reply3.PNG differ diff --git a/docs/marketplace/_img/rating-and-review/review.png b/docs/marketplace/_img/rating-and-review/review.png new file mode 100644 index 00000000000..044dba53fbc Binary files /dev/null and b/docs/marketplace/_img/rating-and-review/review.png differ diff --git a/docs/marketplace/_img/rnr.png b/docs/marketplace/_img/rnr.png new file mode 100644 index 00000000000..6afef25430f Binary files /dev/null and b/docs/marketplace/_img/rnr.png differ diff --git a/docs/marketplace/_img/sales.png b/docs/marketplace/_img/sales.png new file mode 100644 index 00000000000..30bed7d25e3 Binary files /dev/null and b/docs/marketplace/_img/sales.png differ diff --git a/docs/marketplace/_img/search.PNG b/docs/marketplace/_img/search.PNG new file mode 100644 index 00000000000..4ddc3208d91 Binary files /dev/null and b/docs/marketplace/_img/search.PNG differ diff --git a/docs/marketplace/_img/uninstall.png b/docs/marketplace/_img/uninstall.png new file mode 100644 index 00000000000..632b310937d Binary files /dev/null and b/docs/marketplace/_img/uninstall.png differ diff --git a/docs/marketplace/_img/vs-marketplace.png b/docs/marketplace/_img/vs-marketplace.png new file mode 100644 index 00000000000..02527de93d2 Binary files /dev/null and b/docs/marketplace/_img/vs-marketplace.png differ diff --git a/docs/marketplace/_shared/_img/browse-marketplace2-new.png b/docs/marketplace/_shared/_img/browse-marketplace2-new.png new file mode 100644 index 00000000000..a767d12d509 Binary files /dev/null and b/docs/marketplace/_shared/_img/browse-marketplace2-new.png differ diff --git a/docs/marketplace/_shared/_img/manage-extensions.png b/docs/marketplace/_shared/_img/manage-extensions.png new file mode 100644 index 00000000000..dc3093b450d Binary files /dev/null and b/docs/marketplace/_shared/_img/manage-extensions.png differ diff --git a/docs/marketplace/_shared/_img/manage-extensions2-new.png b/docs/marketplace/_shared/_img/manage-extensions2-new.png new file mode 100644 index 00000000000..6fab8083725 Binary files /dev/null and b/docs/marketplace/_shared/_img/manage-extensions2-new.png differ diff --git a/docs/marketplace/_shared/_img/remove-spending-limit.png b/docs/marketplace/_shared/_img/remove-spending-limit.png new file mode 100644 index 00000000000..5f9f2564ddf Binary files /dev/null and b/docs/marketplace/_shared/_img/remove-spending-limit.png differ diff --git a/docs/marketplace/_shared/_img/spending-limit.png b/docs/marketplace/_shared/_img/spending-limit.png new file mode 100644 index 00000000000..5c14f090944 Binary files /dev/null and b/docs/marketplace/_shared/_img/spending-limit.png differ diff --git a/docs/marketplace/_shared/_img/uninstall-disable.png b/docs/marketplace/_shared/_img/uninstall-disable.png new file mode 100644 index 00000000000..0c7387a3f3b Binary files /dev/null and b/docs/marketplace/_shared/_img/uninstall-disable.png differ diff --git a/docs/marketplace/_shared/qa-azure-billing-support.md b/docs/marketplace/_shared/qa-azure-billing-support.md new file mode 100644 index 00000000000..d0051052bb7 --- /dev/null +++ b/docs/marketplace/_shared/qa-azure-billing-support.md @@ -0,0 +1,6 @@ + +###Q: How do I get other help or support for Azure subscriptions and billing? + +A: Check these [topics about Azure billing and subscriptions](https://azure.microsoft.com/en-us/documentation/articles/?tag=billing), +the [Azure Billing and Subscription FAQ](https://azure.microsoft.com/en-us/documentation/articles/billing-subscription-faq/), +or try [Azure Support](https://azure.microsoft.com/en-us/support/options/). diff --git a/docs/marketplace/_shared/qa-azure-billing.md b/docs/marketplace/_shared/qa-azure-billing.md new file mode 100644 index 00000000000..27f8fd21730 --- /dev/null +++ b/docs/marketplace/_shared/qa-azure-billing.md @@ -0,0 +1,77 @@ +####Q: How does Azure billing work? + +A: When you buy from the Visual Studio Marketplace, +you select an Azure subscription to use for billing. +If you don't have an Azure subscription, +you can [sign up](https://account.windowsazure.com/Subscriptions) +either before or during your first purchase. +You can set up payment with a credit card, +or by invoice in some cases. Charges for your +purchases will show up on your monthly Azure bill. + +**Note:** You must keep your Azure subscription in good +standing to use your Visual Studio Marketplace purchases. +If your Azure subscription is canceled or becomes disabled, +for example, because the credit card used for payment expires, +then any purchases with this Azure subscription will be +deactivated on the 1st day of next month. +To continue using your Visual Studio Marketplace purchases, +please keep your Azure subscription active and updated. + + +####Q: Can I use an Enterprise Agreement to buy from the Visual Studio Marketplace? + +A: Yes, please buy directly from the Visual Studio Marketplace +where you can bill purchases to the Azure subscription that was created +under your [Enterprise Agreement (EA)](https://azure.microsoft.com/en-us/pricing/enterprise-agreement/). +Don't order Visual Studio Marketplace services through your reseller. + +####Q: Can I use the Azure Monetary Commitment funds from my Enterprise Agreement to buy from the Visual Studio Marketplace? + +A: Yes. You can use these prepaid funds to pay for: + +* [Team Services users](https://marketplace.visualstudio.com/items?itemName=ms.vss-vstsuser) +* [Microsoft-published extensions for Team Services and Team Foundation Server](https://marketplace.visualstudio.com/vsts) +* [Virtual user minutes for Cloud-based Load Testing](/vsts/billing/buy-more-build-vs ) +* [HockeyApp user plans](https://marketplace.visualstudio.com/subscriptions) +* [Xamarin University](https://www.xamarin.com/university) + +You can't use these funds to pay for Visual Studio cloud +subscriptions and non-Microsoft extensions for Team Services and Team Foundation Server. + +####Q: Can I use the Azure Free Trial to buy from the Visual Studio Marketplace? + +A: No, you can't use the +[Azure Free Trial](https://azure.microsoft.com/en-us/pricing/free-trial/) +to pay for Visual Studio Marketplace purchases, +which applies to Visual Studio Team Services, HockeyApp plans, Xamarin University, and so on. +Instead, set up a separate Pay-As-You-Go Azure subscription, +which you can do before or during your purchase. + +####Q: Can I use the monthly Azure credits from Visual Studio subscriptions or Visual Studio Dev Essentials to buy from the Visual Studio Marketplace? + +A: No, you can't use the monthly Azure credits from +[Visual Studio subscriptions](https://www.visualstudio.com/products/subscriber-benefits-vs) +and [Visual Studio Dev Essentials](https://www.visualstudio.com/en-us/products/visual-studio-dev-essentials-vs.aspx) +to pay for Visual Studio Marketplace purchases. +However, you can use the included Azure subscriptions to bill your purchases. +Before you make purchases, you must +[remove your spending limit](https://azure.microsoft.com/en-us/pricing/spending-limits/) +from these subscriptions. + +Spending limit + + + +**Important:** Remove your spending limit indefinitely. +This prevents disabling your Azure subscription +when your monthly charges are billed the next month. +Otherwise, all resources billed to this subscription will be suspended, +including virtual machines and all other workloads. + +Remove spending limit indefinitely + +####Q: Where can I check my bill or correct any billing information on my Azure subscription? + +A: If you're the Azure account administrator, +[visit the Azure Account portal](https://account.windowsazure.com). diff --git a/docs/marketplace/_shared/qa-extension-billing-frequency.md b/docs/marketplace/_shared/qa-extension-billing-frequency.md new file mode 100644 index 00000000000..ed5196ce411 --- /dev/null +++ b/docs/marketplace/_shared/qa-extension-billing-frequency.md @@ -0,0 +1,38 @@ +#### Q: How do you bill for extension purchases or changes? + +A: For Microsoft extensions: + +* Your charges are prorated during the 1st month of use. +After that, they renew and are billed automatically on the +1st day of the calendar month unless you cancel. + +* If you reduce users for a paid extension, +those decreases won't take effect until the +1st day of the next calendar month. +You're still charged for the users that +you've committed for the current month. + +* If you add users for a paid extension, +those increases will take effect immediately. +Charges for increases are prorated, +but only above the number of users that +you've committed for the current month. + +* If you reduce users and add users for the same paid extension +in the same month, you're not double-charged if you don't go above +the number of users that you've committed for the current month. + +* If you uninstall or disable a paid extension, +charges will continue unless you cancel the extension +by [reducing all your users to zero (0)](/vsts/marketplace/install-vsts-extension#change-extension-quantity). + +For non-Microsoft extensions: + +* Your charges start on the day that you purchase +and renew on the same day each month until you cancel. + +* Changes to your user plan will be pro-rated on your next bill based on the number of days you were on each plan. + +* If you uninstall or disable a paid extension, +charges will continue unless you cancel the extension +by [reducing all your users to zero (0)](/vsts/marketplace/install-vsts-extension#change-extension-quantity). \ No newline at end of file diff --git a/docs/marketplace/_shared/qa-extensions-difference.md b/docs/marketplace/_shared/qa-extensions-difference.md new file mode 100644 index 00000000000..3f3b28a4b35 --- /dev/null +++ b/docs/marketplace/_shared/qa-extensions-difference.md @@ -0,0 +1,13 @@ +#### Q: What's the difference between free, preview, and paid extensions? + +Extensions that are available during preview don't incur charges, +aren't fully supported, and have no financially-backed service level agreements. + +Paid extensions require that you buy and assign them to users +who need access but don't have it already, for example, +through subscription benefits. You'll use an +[Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +to pay for an extension. If you don't have an Azure subscription, +you can create a new subscription when you install your extension. +If you have multiple subscriptions, you can select the Azure subscription that you want to use. +[Where can I find more info about Azure billing?](qa-azure-billing-support.md) diff --git a/docs/marketplace/_shared/qa-marketplace-support.md b/docs/marketplace/_shared/qa-marketplace-support.md new file mode 100644 index 00000000000..45b72ab9fab --- /dev/null +++ b/docs/marketplace/_shared/qa-marketplace-support.md @@ -0,0 +1,28 @@ +### Q: How do I get support for the Visual Studio Marketplace? + +A: Depending on the support you need: + +* Billing questions -- [Azure billing support](https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade) + +* Visual Studio subscriptions -- [subscriptions support](https://www.visualstudio.com/subscriptions/support) + +* Help with Team Services -- [Team Services support](https://www.visualstudio.com/team-services/support-visual-studio-team-services) + +* Help with Team Foundation Server -- [TFS support](https://www.visualstudio.com/team-services/tfs_support) + +* General marketplace help -- [Contact the Visual Studio Marketplace team](mailto:vsmarketplace@microsoft.com) + + +### Q: Can I use an Enterprise Agreement to buy from the Visual Studio Marketplace? + +A: Yes, please buy directly from the Visual Studio Marketplace +where you can bill purchases to the Azure subscription that was created +under your [Enterprise Agreement (EA)](https://azure.microsoft.com/en-us/pricing/enterprise-agreement/). +Don't order Visual Studio Marketplace services through your reseller. + + +### Q: How can I tell whether I have the necessary privileges to buy services in the Visual Studio Marketplace through my organization's Enterprise Agreement? + +A: The easiest approach to determine if you have the right privileges is to click the **Buy** button for a service offered in the Visual Studio Marketplace. You need to select an Azure subscription (which is a billing account) from a presented list of Azure subscriptions that are currently linked to your login. Because the name of the Azure subscription defaults to the type of billing account ("Pay-As-You-Go", "Enterprise Agreement", etc.), it is often clear if the Azure subscription is part of your Enterprise Agreement. + +Another approach is to attempt to visit the [Azure Enterprise Portal](http://ea.azure.com). If you can reach it successfully, then you already have either the Enterprise Admin or the Account Owner role. Only Account Owners can set up new Azure billing accounts in an Enterprise Agreement. If you cannot access the Azure Enterprise Portal, then please inquire within your organization to find out who your Enterprise Admin is, and ask that person to add you as an Account Owner within the Azure Enterprise Portal. If you are unable to find this person, you can [submit a support ticket](http://aka.ms/AzureEntSupport) and request the contact information. You need your organization's name and your Enterprise Agreement enrollment number for the support ticket. diff --git a/docs/marketplace/_shared/qa-troubleshooting-purchases-shared-ts-tfs.md b/docs/marketplace/_shared/qa-troubleshooting-purchases-shared-ts-tfs.md new file mode 100644 index 00000000000..a5e2d2e4c13 --- /dev/null +++ b/docs/marketplace/_shared/qa-troubleshooting-purchases-shared-ts-tfs.md @@ -0,0 +1,87 @@ +####Q: Why can't I buy extensions from Microsoft partners? + +A: This might happen for these reasons: + + +* Restricted countries + + In some countries, you can't use specific Azure subscriptions + to buy extensions or resources from Microsoft partners in the Visual Studio Marketplace, + although you can use those same subscriptions + to buy extensions published by Microsoft. See + [Who can purchase applications and services sold/provisioned through the Azure Marketplace?](https://azure.microsoft.com/en-us/marketplace/faq/) + + If your country is supported in the Azure Marketplace, + but not for the extension that you want to purchase, + please contact the extension publisher. + + + + +* Credit card required + + Unless you have an [Enterprise Agreement](https://azure.microsoft.com/en-us/pricing/enterprise-agreement/), + you must have a credit card associated with your Azure subscription. + For example, you can't use a Pay-As-You-Go subscription + that's set up for invoice billing. + + If you can't use your subscription, + try using creating another Pay-As-You-Go + Azure subscription with a credit card. + + > [!NOTE] + > If you get this message: *"This Azure subscription + > doesn't have a credit card on file. + > Please select another subscription"*, + > select another subscription, + > or click **Create a new Azure subscription** + > to continue. + + + + +* [Enterprise Agreement](https://azure.microsoft.com/en-us/pricing/enterprise-agreement/) purchases + + To buy extensions or resources from Microsoft partners + in the Visual Studio Marketplace, + your Azure Enterprise Agreement administrator + must enable Azure Marketplace purchases. + Go to the Microsoft Azure Enterprise Portal (```https://ea.azure.com```) > + **Manage** > **Enrollment**, and enable **Azure Marketplace**. + + > [!NOTE] + > If you get this message: + > *"The ordering account is not eligible to + > purchase from azure store using Enterprise Agreement."*, + > have your Azure Enterprise Agreement administrator + > go to the Microsoft Azure Enterprise + > Portal (```https://ea.azure.com```) > **Manage** > **Enrollment**, + > and enable **Azure Marketplace**. + + +* Credit card problems + + Purchases from Microsoft partners are charged immediately, + not at the end of your billing cycle, like Microsoft resources. + This means that if your credit card is declined for any reason, + your purchase won't be completed. If this happens, + try your purchase again, or contact your credit card customer service. + + > [!NOTE] + > If you get this message: + > *"The payment provider declined the transaction. + > Please check your credit card information"*, + > try your purchase again later, + > or contact your credit card customer service. + + +* [Microsoft Products and Services Agreement (MPSA)](https://www.microsoft.com/en-us/licensing/mpsa/default.aspx) + + If you have an Azure subscription from an MPSA, + you can't buy resources or extensions from Microsoft partners + in the Visual Studio Marketplace. + There are no plans to support this, + so your best option is to set up an Azure subscription + that's based on a [Pay-As-You-Go](https://azure.microsoft.com/en-us/offers/ms-azr-0003p/), + [Enterprise Agreement](https://azure.microsoft.com/en-us/pricing/enterprise-agreement/), + or another Azure offer. diff --git a/docs/marketplace/approve-vsts-extensions.md b/docs/marketplace/approve-vsts-extensions.md new file mode 100644 index 00000000000..fe3b61d6b8d --- /dev/null +++ b/docs/marketplace/approve-vsts-extensions.md @@ -0,0 +1,39 @@ +--- +title: Approve extension requests for your Team Services account +description: Approve extension requests for your Team Services account +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: 376c55bd-f4e2-47d5-a7a3-400e2cd5d84e +ms.manager: douge +ms.author: elbatk +ms.date: 01/10/2017 +--- + +# Approve extension requests for your Team Services account + +**Team Services** + +If you're the Team Services project collection administrator or account owner, +you'll get email when another Team Services account user requests an extension. +When you approve the request, Team Services automatically installs the extension. + +0. Sign in to your Team Services account +(```https://{youaccount}.visualstudio.com```). + +0. From your account toolbar, go to **Extensions**. + + Extensions tab + +0. Review and approve your requested extensions. + + Extensions tab, requested extensions + +0. After you approve extension requests, +Team Services automatically installs those extensions. + +0. If you installed paid extensions, +go to the next section to [assign those extensions](./assign-paid-extensions.md), +to users who need access so they can start using those extensions. + + +[Troubleshooting](faq-extensions.md) \ No newline at end of file diff --git a/docs/marketplace/assign-paid-extensions.md b/docs/marketplace/assign-paid-extensions.md new file mode 100644 index 00000000000..3c0ea60fa10 --- /dev/null +++ b/docs/marketplace/assign-paid-extensions.md @@ -0,0 +1,64 @@ +--- +title: Assign paid extension access to users for Visual Studio Team Services +description: Assign paid extension access to users for Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: 13c4b901-70d6-488f-9ee5-00eb3121b977 +ms.manager: douge +ms.author: elbatk +ms.date: 08/01/2017 +--- + +# Assign paid extension access to users for Visual Studio Team Services + +After you install a paid extension, +you must assign that extension to users who need access, +so they can start using that extension's capabilities. +To assign extensions, you'll need Team Services +[project collection administrator or account owner permissions](./faq-extensions.md#find-owner). + +> [!TIP] +> You only have to assign extensions to users who need access. +> If you have [Visual Studio subscribers](https://marketplace.visualstudio.com/subscriptions), +> they automatically get access to specific extensions that are included +> with their subscriptions as benefits, like Test Manager. +> If you installed these extensions, you don't have to assign +> them to Visual Studio subscribers in your account. + +0. Sign in to your VSTS account +(```https://{youraccount}.visualstudio.com```). + +0. Go to **Users**. + + Go to Users + +0. Most extensions require that users have at least Basic access, +not Stakeholder. Check your users' access levels here: + + Check that users have required access + + For example, Johnnie has a Visual Studio Enterprise subscription, + which includes access to the Test Manager extension. + To find the access that your extension requires, see the extension's description + in the [Visual Studio Marketplace](https://marketplace.visualstudio.com). + +0. To assign the extension, +go to the extension pane, for example, Test Manager. + + Go to the extension + +0. Assign the extension. + + Assign extension to users + + Extension now assigned + + You can assign the extension to one user, specific users, + or to all users at the same time, up to the number allowed + for free extensions or the number that you purchased for paid extensions. + +0. Tell your team about this extension, + so they can start using its capabilities. + + +[Troubleshooting](faq-extensions.md) diff --git a/docs/marketplace/billing-overview.md b/docs/marketplace/billing-overview.md new file mode 100644 index 00000000000..3d5494e2b18 --- /dev/null +++ b/docs/marketplace/billing-overview.md @@ -0,0 +1,260 @@ +--- +title: Billing overview | Team Services & TFS +description: Understand how to buy and subscribe to services using the Visual Studio Marketplace +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: F5A6D30F-E291-444D-956E-90A9D48A69FE +ms.manager: douge +ms.author: kaelli +ms.date: 04/28/2017 +--- + +# Billing overview for VSTS and TFS + +Team Services | TFS 2017 | TFS 2015 + +Whether you choose to work in the cloud with Team Services or on-premises with TFS, you can get started for free. With both these options, you can support a small team of five for free until your needs grow. You can then add more team members and services as needed. + +Our pricing model is flexible, enabling you to customize the solution to your specific needs. + +### Team Services + +- Free for small teams: 5 users can access Basic features like Agile planning, unlimited Git repos, release management, and more +- Pay for additional users monthly. With Team Services there are no minimum tiers, so you only pay for the number of users who need access to your account +- Free to use or trial most features, from Microsoft and from partners available through the Visual Studio Marketplace +- Pay monthly for the features and services you need, such as build pipelines and cloud-based load testing +- Team Services billing is consolidated onto your Microsoft Azure bill, though there is no requirement to purchase any other Azure services in order to use Team Services + + +> [!TIP] +> Add active Visual Studio subscribers for free to your Team Services account. We’ll automatically recognize them when they sign in. They won’t count against your 5 free users or as paid users. +> +> Visual Studio subscribers can access Basic features. Some subscriptions like Visual Studio Enterprise also include features available through extensions, like Test Manager and Package Management. +> +> If you need to access multiple Team Services accounts, for example when working on projects for different customers, then buying a Visual Studio subscription can be an attractive alternative to paying for those users separately in each Team Services account. + + +###Team Foundation Server +The best way to purchase Team Foundation Server, which you install on your own Windows Server, is to rent it monthly. + +With an on-premises TFS, you can start with a free server via TFS Express and five free accounts. You, can then purchase additional access for users to the server either via a monthly subscription service or through a client access licenses (CAL). + +- Free to get started or try out a service +- Monthly subscription fee per user +- Or, one-time purchase per subscription ([One User CAL per user](https://www.microsoftstore.com/store/msusa/pdp/Visual-Studio-Team-Foundation-Server-2015-User-CAL/productID.321735100)) +- Or, one-time purchase per Device CAL, one [CAL per device](https://www.microsoftstore.com/store/msusa/pdp/Visual-Studio-Team-Foundation-Server-2015-Device-CAL/productID.321735400) that will support multiple users to access the server from a single device +- Team Foundation Server ([one-time purchase](https://www.microsoftstore.com/store/msusa/en_US/pdp/Visual-Studio-Team-Foundation-Server-2015/productID.321734700) once your team grows beyond five users) +- Service usage by minutes (such as build agents) +- Service usage by artifact, for example a build & release pipeline + +>[!NOTE] +>Stakeholders and active Visual Studio subscribers don’t count toward Basic user accounts as they can be added to your TFS account for free. To learn more about licensing, see [Visual Studio 2015 Licensing White Paper](https://www.microsoft.com/download/details.aspx?id=13350). +> +> Also, for convenience, you manage billing and monthly subscription services through Team Services and Azure. + + +## Marketplace extensions + +In addition to the [essential services provided with Team Services and TFS](../services.md), you can add Marketplace extensions to either Visual Studio, Team Services, or TFS to augment the features available to you. + +- Free extensions +- Visual Studio monthly or yearly subscriptions +- Monthly subscriptions per user, such as Test Manager and Package Management (these extensions are assigned to specific users). + +### Free Marketplace extensions +There are many free extensions available in the Marketplace, too numerous to list. However, the following extensions are listed as they quickly add a lot of value and are easily installed. + +- [Work Item Search](https://marketplace.visualstudio.com/items?itemName=ms.vss-workitem-search) +- [Campfire integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.services-campfire) +- [Hipchat integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.services-hipchat) +- [Slack integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-slack) +- [Microsoft Teams integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-teams) + +Choose from free extensions in the +[Visual Studio Marketplace](https://marketplace.visualstudio.com/search?target=VSTS&category=All%20categories&cost=free&sortBy=Downloads). + +## Start for free, add users and services as you grow +To start using Team Services for +free, go to the [Team Services signup page (```https://www.visualstudio.com/```)](https://www.visualstudio.com/). +Or learn [how to sign up for Team Services](../accounts/create-account-msa-or-work-student.md). + +To start for free with an on-premises TFS, download and install [Team Foundation Server 2017 Express](https://www.visualstudio.com/downloads/#team-foundation-server-express-2017) and then [create a team project](../accounts/create-team-project.md). TFS Express is a free, source code-control project management and team collaboration platform for individual developers and small teams of five or less. Install Visual Studio Team Foundation Server Express 2017 on your desktop or laptop. + +Here's an overview about what your team gets with a free account or with TFS Express, +the kinds of users who can join your account, +like users who have Visual Studio subscriptions, +and what to do when your team's needs grow beyond a free account. + +### What you get for free + +With either option, you receive support for: + +* 5 users who get access to these basic features: + + * Ability to collaborate on code via unlimited Git repos + or centralized version control with TFVC + * Agile tools to plan and track work + * Continuous integration and continuous deployment with Build and Release tools + * Manual test features + + For an overview of these features, see [Essential services](../services.md). + +* Unlimited users who have limited access to select Agile tools, such as backlogs, work items, and dashboards. You can get a quick comparison of [Stakeholder versus Basic features](https://www.visualstudio.com/team-services/compare-features/). + +* Unlimited Visual Studio subscribers who also get Basic features and +are automatically recognized when they sign in to Team Services or TFS. + + +### Build agents and pipelines to support Build & Release + +Create, queue, and monitor cross-platform builds and releases with task-based services. + +You can use Hosted Pipelines to run builds and deploy releases +concurrently with Microsoft-managed agents in Team Services, +or use Private Pipelines to run builds and deploy releases on machines that you manage, +running agent software from Microsoft. Each pipeline lets you run 1 build or deploy 1 release at a time. + +Your Team Services account includes these **free** amounts: +* 1 Hosted Pipeline (4 hours per month) to run builds and deploy releases in the cloud +* 1 Private Pipeline to run builds and deploy releases from your own server + +For any edition of TFS, you can manage an on-line build server at no extra charge, or you can purchase private or hosted pipelines to build your software in the cloud. + + +### Cloud performance & load testing + +Create load tests to simulate high traffic using Visual Studio Enterprise 2015 or later version, +Visual Studio Ultimate 2013 or later version. + +>[!NOTE] +>Load testing in the cloud is only supported through Team Services. + +Load tests are measured and billed in virtual user minutes: +the number of virtual users multiplied by the number of minutes that you set up for the load test run. + +Your Team Services account includes **free** 20,000 virtual user minutes per month for performance and load testing in the cloud. + + +## Add accounts and services as your team grows + +As your team grows, you may need to add more accounts and services. + +Whether you need more users, features, or capacity for builds, releases, or load testing +in your Team Services account, just pay only for what you need. +When you make your first purchase, +you'll link your Team Services account to an +[Azure subscription](https://azure.microsoft.com/pricing/purchase-options) +so you can bill your purchases. You'll then conveniently pay your monthly Azure bill +by using your credit card, or set up invoicing in some cases. + +### Add user accounts to access Basic features + +If you need to add more users to your Team Services account, +and they don't have Visual Studio subscriptions, +you can [pay monthly for these users](https://marketplace.visualstudio.com/items?itemName=ms.vss-vstsuser) +in the Visual Studio Marketplace, +and then add them to your Team Services account. +For pricing, get specific numbers with our +[Azure pricing calculator](https://azure.microsoft.com/en-us/pricing/calculator/?service=visual-studio-team-services) +or [group pricing here](https://www.visualstudio.com/team-services/pricing/), +or learn [how to pay for Team Services users](../billing/buy-basic-access-add-users.md). + + +### Increase your Build & Release capacity + +With your 1 free Hosted Pipeline, you get 4 hours (240 minutes) per month +and a maximum duration of 30 minutes per build or deployment. +If you just need more build time for 1 concurrent build or release, +you can buy another Hosted Pipeline without the 4-hour limit +to increase your maximum duration per build or deployment up to 6 hours. +For more concurrent builds or releases, you can buy more Hosted Pipelines. + +With your 1 free Private Pipeline, you can run 1 build or deploy +1 release at a time in Team Services on agent software from Microsoft. +You can also run unlimited concurrent builds or +deploy 1 release at a time in Team Foundation Server 2017. +Private agents are now free and unlimited. In TFS, +each Visual Studio Enterprise subscriber also +contributes a Private Pipeline that you can use. +You can also buy more Private Pipelines. + +You can buy [Hosted Pipelines](https://marketplace.visualstudio.com/items?itemName=ms.build-release-hosted-pipelines) +and [Private Pipelines](https://marketplace.visualstudio.com/items?itemName=ms.build-release-private-pipelines) +in the Visual Studio Marketplace. For pricing, see +[Build & Release: Hosted Pipelines and Private Pipelines](https://www.visualstudio.com/team-services/pricing/), +or our [Azure pricing calculator](https://azure.microsoft.com/en-us/pricing/calculator/?service=visual-studio-team-services). + +Learn about: + + +* [Concurrent build and release pipelines in Team Services](../build-release/concepts/licensing/concurrent-pipelines-ts.md) +* [Concurrent build and release pipelines in TFS](../build-release/concepts/licensing/concurrent-pipelines-tfs.md) +* [How to buy more pipeline capacity for builds or releases in Team Services](../billing/buy-more-build-vs.md) +* [Buy more cloud-based testing services](../billing/buy-load-testing-vs.md) + +### Get more virtual user minutes for performance & load testing + +If you need more than 20,000 virtual user minutes per month, +for pricing, see [Performance & Load Testing](https://www.visualstudio.com/team-services/pricing/), +or [our Azure pricing calculator](https://azure.microsoft.com/en-us/pricing/calculator/?service=visual-studio-team-services). +Learn [how to set up billing for your Team Services account](../billing/set-up-billing-for-your-account-vs.md), +so you can [buy more virtual user minutes through Azure](../billing/buy-load-testing-vs.md). + +### Go beyond free extensions to meet your team's needs + +You can also buy paid extensions for your Team Services +account in the [Visual Studio Marketplace](https://marketplace.visualstudio.com/vsts). +Learn [how to get paid extensions for your Team Services account](install-vsts-extension.md). + +## Related notes +- [Key concepts](../concepts.md) +- [Essential services](../services.md) +- [Client-server tools](../tools.md) +- [Software development roles](../roles.md) + +- [Get extensions for Team Services](install-vsts-extension.md) +- [Get extensions for TFS](get-tfs-extensions.md) + + \ No newline at end of file diff --git a/docs/marketplace/breadcrumb/toc.yml b/docs/marketplace/breadcrumb/toc.yml new file mode 100644 index 00000000000..5d3bf0fd7a4 --- /dev/null +++ b/docs/marketplace/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Admin + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=admin + items: + - name: Manage Extensions + tocHref: /vsts/ + topicHref: /vsts/marketplace/index \ No newline at end of file diff --git a/docs/marketplace/extension-report.md b/docs/marketplace/extension-report.md new file mode 100644 index 00000000000..05c8c9b4f0a --- /dev/null +++ b/docs/marketplace/extension-report.md @@ -0,0 +1,98 @@ +--- +title: Extension Report | Visual Studio Team Services +description: An overview of reports available for an extension. +ms.assetid: baf829df-0975-46d8-8dea-7a5c9f6968ef +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.manager: douge +ms.author: elbatk +--- + +# Extension reporting hub + +Now that your extension is available in the [Visual Studio Marketplace](https://marketplace.visualstudio.com), you can use the **Reports** feature to track and analyze how the extension is performing and take required actions. +To visit the extension hub, browse to your [publisher page](https://aka.ms/vsmarketplace-manage) and select the extension or click **Reports** link on the extension details page. + +## Acquisition +You can view all acquisition related data in this tab for the selected period. Based on the extension type, acqusition includes all events for install, buy, trial, download and get started clicks. +* Aggregated acquisition in the selected period with respect to acquisition till date +* Aggregated acquisition in the selected period with respect to overall acquisition +* Aggregated acquisition split by extension downloads, Team Services and TFS connected install for free extension +* Aggregated acquisition split by trials, Team Services and TFS connected buy for paid extension +* Aggregated acquisition split by extension download from marketplace and VS IDE for VS extension +* Daily trend of extension page views with acquisition +* Conversion percentage from page views to acquisition + +For paid extension, all transactional details for buy and trials is available with date, account name, trial end date, and quantity. You can use the **Contact** action to reach out to your users for transactional communication. Refer [here](/vsts/extend/extension-report#contact) for more details. + +![acqusition](_img/acq.png) + +## Uninstall (VSTS only) +You can view how many Team Services accounts have uninstalled your extension, daily trend of uninstall, detailed feedback shared during uninstall, and top uninstall reasons. +You can use search for text and dates to analyze and draw more insights from the detailed feedback. + +For VSTS paid extension, all transactional details for buy and trials is available with date, account name, trial end date, and quantity. You can use the **Contact** action to reach out to your users for transactional communication. Refer [here](/vsts/extend/extension-report#contact) for more details. + +![uninstall](_img/uninstall.png) + +## Sales transaction +This tab is only available for VSTS paid extensions and gives the details of sales with respect to quantity and accounts to help understand how the extension is performing. Selection of the users button gives the aggregated details of sales and churn events, i.e. number of new, upgrade, downgrade and cancelled user licenses respectively with the trend. Selection of the accounts button gives similar aggregated details of sales and churn events with respect to account and its trend. + +All transactional details for trials, new purchase, upgrade, downgrade and cancellations is available in details section. You can use search for text and dates to analyze and draw more insights. +This data can also be pivoted by account to understand the lifecycle of an account or sorted to understand the top account with respect to user licensees / resources purchased. **Contact** feature is also available. + +![sales](_img/sales.png) + +## Ratings and Review +This tab will give you the information of the average rating for the selected period with respect to overall rating, the average rating by number of reviewers, and the daily trend of average rating. The details section provides all the reviews and your responses in transactional view. + +You can **Reply** to a review or **Edit** a previous response and better manage engagement with your extension users. You can also **Appeal** to void a rating if the issue reported is due to Marketplace or the underlying platform. If the issue is valid, we shall void the rating. + +![rating](_img/rnr.png) + +## Q&A +This tab will give you snapshot of all questions by your extension users with the non-responded queries on the top. You can take actions of replying or editing a previous response and better manage engagement with your extension users. + +![qna](_img/qna.png) + +## Export to Excel +All data elements available in the reports page are also available for download in XLS format to aid creating your own custom reports. + +## Contact +For paid extension, you can use the **Contact** action to reach out to your users for transactional communication. this functionality is available only for publishers with contributor + access on the extension. + +Marketplace will broker the first communication with the user as our privacy policy doesn’t allow direct sharing of customer email addresses. Only users who have opt-ed in for communication will be sent the email. +Last contacted date for an account is as also updated after sending a communication. + +**Important** Please follow the below guidance on transactional and promotional communication. A publisher found to do promotional communication or spamming users will be *blacklisted* and won't be able to use the **Contact** feature for any of his/her extensions. + +**Transactional Communication**: Transactional emails convey critical information necessary for the continued use of the extension or service. Examples include critical security notices, transaction confirmations, product recall notices, specific feedback request and service discontinuation notices. +**Promotional Emails**: Promotional emails are used to market your extension, product, service, website, or event. Examples include invitations to events or web casts, information about new marketing or partner programs and offers to prospect to obtain value-added content. Almost all newsletters fall into the promotional bucket as they generally contain at least some promotional content. + +Refer the [Marketplace Publisher Agreement](http://aka.ms/vsmarketplace-agreement) for more guidance on communication with customers. + +# Terminology + +* **Acquisition** is the total count of all applicable acquisition events for the extension; install, buy, trial, get started clicks and downloads +* **Page views** is the total number of extension detail page views. Repeated views by users are counted. +* **VSTS Install** is the total number of VSTS accounts the extension is installed. Repeated installs on the same account are counted. +* **TFS Install** is the total number of TFS connected accounts the extension is installed. Repeated installs on the same account are counted. TFS disconnected server data isn't available. +* **VSTS Trial** is the total number of VSTS accounts that started trial. In the same period if the VSTS account makes a purchase, that would be counted too. +* **VSTS Buy** is the total number of buy events for VSTS accounts. Repeated buy on the same account are counted. +* **TFS Buy** is the total number of buy events for TFS connected accounts. Repeated buy on the same account are counted. TFS disconnected server data isn't available. +* **Download from IDE** is the total number of VS extension downloads from Visual Studio IDE to help understand extension uptake directly in VS IDE +* **Download from Marketplace** is the total number of VS extension downloads from the Marketplace +* **Conversion funnel** is the conversion ration from page views to acquisition from Marketplace. It excludes extension acquisition directly from the products. +* **Top reasons for uninstall** is uninstall reasons categorized by reason code shared by users during the process of uninstall. Note: Reason code and reason are optional fields. +* **Last contacted** is the most recent date the account admin was contacted. +* **New users** represents the count of users purchased by a new account. +* **Upgrade users** represents the count of users purchased by an existing account. +* **Downgrade users** represents the count of users reduced by an existing account. +* **Cancel users** represents the count of users cancelled when an existing account cancelled. +* **New accounts** represents the count of new accounts that purchased. +* **Upgrade accounts** represents the count of existing accounts that purchased more users. +* **Downgrade accounts** represents the count of existing accounts that reduced the quantity of users purchased. +* **Cancel accounts** represents the count of accounts which cancelled their purchase. + + + diff --git a/docs/marketplace/extension-statistics-powerbi-contentpack.md b/docs/marketplace/extension-statistics-powerbi-contentpack.md new file mode 100644 index 00000000000..4d4b3d78717 --- /dev/null +++ b/docs/marketplace/extension-statistics-powerbi-contentpack.md @@ -0,0 +1,73 @@ +--- +title: Extension Statistics Power BI Content pack | Visual Studio Marketplace +description: Get started using Power BI to analyze data collected for your extension on Visual Studio Marketplace +ms.author: divais +ms.date: 06/12/2017 +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: 435be0b3-ec45-41dd-a804-03b9342fa7cc +--- + +# Extension Statistics Power BI Content pack + +You can gain insight and analyze the progress of your extension by using Extension Statistics Power BI Content pack. All data elements available in the extension hub are also available in Power BI content pack. +The content pack contains a complete analytic data model (tables, relationships and measures), a set of default reports, and a default dashboard. Reports and dashboards are fully customizable but the data model is not. + +##Connect to Power BI and get the Content Pack + + +1. Open a web browser and go to [http://powerbi.com](http://powerbi.microsoft.com/). + +2. Click **Sign In** in the upper right corner to log in to Power BI. + +3. In the lower left corner, click **Get Data**. + + If you don't have a Power BI account you can create one by entering your email address and click **Use it free**. + +4. Click **Get** under **Services** on the Get Data page. + + ![get-data-final.png](_img/get-data-final.png) + +5. Search for Marketplace and select the Visual Studio Marketplace Extension Statistics and click **Get it now**. + + ![connector](_img/search.png) + ![connector](_img/content-pack-details.png) + +6. Enter the Marketplace publisher id for the publisher you want data for and click **Next**. + + ![Enter the publisher id used in Marketplace](_img/addpublisherid.png) + + **Important**: Ensure you are logged in power BI using the same credentials you use on the Marketplace and you have access to the Publisher Id. + +7. The next step specifies the authentication method. Only oAuth2 is supported. Click **Sign In** to continue. + + ![Login to VS Team Services with oAuth2](_img/connect-to-vs-team-services-auth.png) + + **Important**: You won't be able to connect if your account administrator disabled third party application access via OAuth. When enabled, it appears as follows on the Administration > Control panel > Settings page: + + ![Third-party oAuth enabled](_img/Screen5.png) + + Contact your account administrator to determine if it needs to be enabled.  + +8. Successful authorization displays the following authorization dialog which allows Power BI to retrieve data from your account. Scroll down to the bottom and click **Accept**. + + ![VS Team Services Authorization page](_img/Screen6.png) + +9. Once Power BI is authorized, data will begin to load and you'll be presented with a loading screen until the data is complete. Depending on how much data there is, it may take a few minutes to complete the data load. All extension data associated with this publisher will be downloaded. + + +##Available data and reports + +After getting connected you will see an initial dashboard with details on all of your extensions. All data available in the Marketplace extension hub is available in the content pack. Details on the extension hub are available [here](/vsts/extend/extension-report). + +The power BI content pack gives data for all extensions and you can use the filters to view data for an extension or use the extension report to compare data between extensions. + +At high level, data available is: + +1. Acqusition +2. Uninstall +3. Rating and review + +Using the report and available data elements, you can create the required reports and pin them to the dashboard. + +To get started using Power BI, see the [knowledge base of articles](https://support.powerbi.com/). \ No newline at end of file diff --git a/docs/marketplace/faq-extensions.md b/docs/marketplace/faq-extensions.md new file mode 100644 index 00000000000..7248076232a --- /dev/null +++ b/docs/marketplace/faq-extensions.md @@ -0,0 +1,140 @@ +--- +title: Troubleshooting getting extensions for Visual Studio Team Services +description: Troubleshooting getting and paying for extensions for Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: fecee97a-b715-4d8d-b500-7b3b559eacc7 +ms.manager: douge +ms.author: elbatk +ms.date: 08/01/2017 +--- + +# Troubleshooting getting and paying for extensions for Visual Studio Team Services + +**Team Services** + + +## General + + + +[!INCLUDE [extensions-difference](_shared/qa-extensions-difference.md)] + +[!INCLUDE [what-happened-preview-extensions](../_shared/qa-what-happened-preview-extensions.md)] + + +## Install, request, assign, and access extensions + +#### Q: Who can install extensions for Visual Studio Team Services? + +A: The Team Services account owner and +project collection administrator can install extensions. +If you don't have permissions, but you're an account member, +you can request extensions instead. + + + +[!INCLUDE [find-account-owner](../_shared/qa-find-account-owner.md)] + +[!INCLUDE [find-project-collection-administrator](../_shared/qa-find-project-collection-administrator.md)] + + + +[!INCLUDE [no-accounts](../billing/_shared/qa-no-accounts.md)] + +#### Q: Why can't I install extensions for Team Services? + +A: This might happen for these reasons: + + +* You must have Team Services +[project collection administrator or account owner permissions](#find-owner). +If you don't have permissions, but you're an account member, +you can request extensions instead. + + +* If you get an error that your extension is already installed or +requested, check with your project collection administrator +or account owner, and ask them to assign the extension to you. + + + +#### Q: When do I choose Install for paid extensions? + +A: You can just choose **Install** when: + +* You want to install a free or preview extension. +* You paid for access, uninstalled the extension, +and want to reinstall the extension. +* You just need the extension for +[Visual Studio subscribers](https://marketplace.visualstudio.com/subscriptions) +who have access for that extension included with their subscriptions. +These subscribers get specific extensions, like Test Manager, +included with their subscriptions as benefits. They can use +these extensions after they're installed without paid access +and assignment. You only have to buy and assign extensions +for users who need access. + + +#### Q: Why can't I assign extensions? + +A: This might happen for several reasons. + +* You don't have at Team Services +[project collection administrator or account owner permissions](#find-owner). + +* Your users don't have the correct access levels. +Most extensions require that users have Basic access, not Stakeholder. +For example, the Test Manager extension requires at least Basic access. + +* You assigned all the paid extensions that you bought. + + + +[!INCLUDE [no-access-extension-features](../_shared/qa-no-access-extension-features.md)] + + + + +## Purchases & billing + + +[!INCLUDE [azure-billing](_shared/qa-azure-billing.md)] + + + +[!INCLUDE [extension-billing-frequency](_shared/qa-extension-billing-frequency.md)] + + +## Troubleshooting purchases & billing + + + +[!INCLUDE [troubleshooting-purchases-shared-ts-tfs](_shared/qa-troubleshooting-purchases-shared-ts-tfs.md)] + + +#### Q: What if I already set up billing with a subscription that I can't use? + +A: If your Team Services account is linked to an Azure subscription +that wasn't created from an Enterprise Agreement or with a credit card on file, +you'll get this message: "Your account is linked to an Azure subscription +that doesn't have a credit card on file. Learn how to change your subscription." + +Follow these steps to create a new Azure subscription with a credit card, +then change the Azure subscription that's linked to your Team Services account. + +**Set up billing with a new Azure subscription** +0. Use a credit card to create a new [Pay-As-You-Go Azure subscription](https://azure.microsoft.com/en-us/offers/ms-azr-0003p/). +0. Follow these steps to [change your Azure subscription](/vsts/billing/set-up-billing-for-your-account-vs#change-azure-subscription) +for your Team Services account. + +[!INCLUDE [azure-bill-larger](../_shared/qa-azure-bill-larger.md)] + +[!INCLUDE [azure-subscription-disabled-team-services](../_shared/qa-azure-subscription-disabled.md)] + +[!INCLUDE [azure-billing-support](_shared/qa-azure-billing-support.md)] + + + +[!INCLUDE [marketplace-support](_shared/qa-marketplace-support.md)] + diff --git a/docs/marketplace/get-tfs-extensions.md b/docs/marketplace/get-tfs-extensions.md new file mode 100644 index 00000000000..626c9ca2e38 --- /dev/null +++ b/docs/marketplace/get-tfs-extensions.md @@ -0,0 +1,541 @@ +--- +title: Get extensions for Visual Studio Team Foundation Server +description: Find and install extensions for Team Foundation Server from the Visual Studio Marketplace +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: 0ff7d264-68b7-4f4a-a666-b57175b5fdb8 +ms.manager: douge +ms.author: elbatk +ms.date: 01/10/2017 +--- + +# Get extensions for Team Foundation Server (TFS) + +**TFS 2018 | TFS 2017 | TFS 2015.3** + +To add new features and capabilities to your TFS, +install extensions from the +[Visual Studio Marketplace](https://marketplace.visualstudio.com/vsts). + +* Working with TFS 2017? [Connect to TFS](#connected-tfs), +so you can install [free, preview, and paid extensions](#difference). + +* Working with TFS 2015 Update 3, or disconnected from TFS 2017? +[Download extensions, then upload them to TFS](#disconnected-tfs) to +[install free and preview extensions](#difference). + +> [!TIP] +> To learn about building your own TFS extensions, +> see [developing](http://aka.ms/vsoextensions) +> and [publishing](http://aka.ms/vsmarketplace-publish) extensions. + + +## Install extensions while connected to TFS + +### What do I need to install extensions? + +[Project collection administrators](../accounts/add-administrator-project-collection.md) +with [**Edit collection-level information** permissions](../security/permissions.md#collection) +can install extensions. If you don't have permissions, you can [request extensions](#request) instead. + +For paid extensions, you'll need an +[Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +to bill your purchase. If you don't have an Azure subscription, +you can create a new subscription when you make your first purchase. + +> [!NOTE] +> To use an existing Azure subscription for billing, +> you must have at least Co-administrator permissions for that subscription. +> If you don't have permissions, have an Azure Account Administrator +> or Service Administrator go to the Azure classic portal and +> [add you as Co-administrator](https://docs.microsoft.com/en-us/azure/billing-add-change-azure-subscription-administrator) +> to the Azure subscription that you want to use for billing. +> Co-administrator permissions are available only in the classic Azure portal. + +Your team project collection will reuse your Azure subscription +for future Visual Studio Marketplace purchases. +[Where can I find more info about Azure billing?](#billing) + +0. From your TFS home page (```https://{server}:8080/tfs/```), +go to the team project collection where you want to install the extension. + +0. From your team project collection, +go to the Visual Studio Marketplace. + + Browse Marketplace in new navigation + +0. Find and select the extension that you want to install. + + Select a TFS extension + + TFS is connected to the Marketplace, so the Marketplace automatically filters and shows on-premises extensions only. + +0. Based on the extension that you select, install or buy the extension. + + * For free or preview extensions, click **Install**. + * For extensions that you haven't paid for access yet, click **Buy**. + * For extensions that you've already [paid for access](#paid-access), + expand **Buy**, and select **Install for paid users**. + + Install or buy the extension + +0. Confirm the team project collection where you want to install this extension. + + Select team project collection + +0. If you chose a paid extension, +select the [Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +that you'll use to pay for extension access. + + For paid extensions, select an Azure subscription for billing + + Then select the number of users who will need paid access to the extension. + + Select number of users who need paid extension access + +0. Finish installing your extension. + +0. If you installed a paid extension, +make sure to [assign the extension to users who need access](#assign-extension). +Otherwise, you can go to your team project collection to use your extension. +Also, remember tell your team about this extension, +so they can start using its capabilities too. + + Extension installed + + [Need help?](#get-support) + + +## Install extensions for disconnected TFS + +While you're disconnected from TFS, you can install free and preview extensions, +but not paid extensions, by downloading them, uploading them to your TFS, +and then installing them in a team project collection. + +### Who can upload extensions? + +[Team Foundation administrators](../tfs-server/add-administrator-tfs.md#server) +with [**Edit instance-level information** permissions](../security/permissions.md#server) +can upload extensions. + +### Who can install extensions? + +[Project collection administrators](../accounts/add-administrator-project-collection.md) +with [**Edit collection-level information** permissions](../security/permissions.md#collection) +can install extensions. If you don't have permissions, you can [request extensions](#request) instead. + +### Download from Visual Studio Marketplace + +0. Sign in to [Visual Studio Marketplace > Visual Studio Team Services](https://marketplace.visualstudio.com/vsts). + +0. Find the extension that you want to install. + + View + + View + +0. Download and save your extension. + + Download and save your extension + + [Why doesn't the extension have a download button?](#no-download) + +### Upload to Team Foundation Server + +0. Go to your TFS home page (```https://{server}:8080/tfs/```). + +0. Browse for your downloaded TFS extensions (```https://{server}:8080/tfs/_gallery```). + + **TFS 2015 Update 3** + + Browse TFS extensions + + **TFS 2017** + + Browse TFS extensions + + +0. Manage your extensions. + + Manage extensions + +0. Upload the extension that you downloaded. + + Find and upload your downloaded extension + + [Why can't I upload extensions?](#no-upload) + +### Install in your team project collection + +0. Select and install the extension that you just uploaded. + + Select extension, then click Install + +0. Choose the team project collection where you want to install the extension. + + Select team project collection, click Continue + +0. Review the permissions that the extension will get when it's installed. Finish installing your extension. + + Review the permissions granted to this extension + + You can now go to your team project collection to use your extension. + Also, remember tell your team about this extension, + so they can start using its capabilities too. + + +## Grant permissions to manage extensions +To grant permissions for managing extensions to users or groups, use [TFSSecurity](../tfs-server/command-line/tfssecurity-cmd.md#permissions) command-line tool. + +0. At the server level, create a group, for example, "TFS Extension Publishers".
        + +tfssecurity /gcg "TFS Extension Publishers" "publishers who can manage extensions for the server" /server:ServerURL + +
        +0. Grant access to the "TFS Extension Publishers" group to manage extensions.
        + +tfssecurity /a+ Publisher "//" CreatePublisher n:"[TEAM FOUNDATION]\TFS Extension Publishers" allow /server:ServerURL
        +tfssecurity /a+ Publisher "//" PublishExtension n:"[TEAM FOUNDATION]\TFS Extension Publishers" allow /server:ServerURL
        +tfssecurity /a+ Publisher "//" UpdateExtension n:"[TEAM FOUNDATION]\TFS Extension Publishers" allow /server:ServerURL
        +tfssecurity /a+ Publisher "//" DeleteExtension n:"[TEAM FOUNDATION]\TFS Extension Publishers" allow /server:ServerURL +
        +
        +For Team Foundation Server "15" RC2 or earlier, use this syntax:
        + +tfssecurity /a+ Publisher "//" Create n:"[TEAM FOUNDATION]\TFS Extension Publishers" allow /server:ServerURL
        +tfssecurity /a+ Publisher "//" Publish n:"[TEAM FOUNDATION]\TFS Extension Publishers" allow /server:ServerURL
        +tfssecurity /a+ Publisher "//" Write n:"[TEAM FOUNDATION]\TFS Extension Publishers" allow /server:ServerURL +
        +0. Add existing users and groups to the "TFS Extension Publishers" group.
        + +tfssecurity /g+ "[TEAM FOUNDATION]\TFS Extension Publishers" n:User /server:ServerURL + +
        +You can add users later to "TFS Extension Publishers". This is a server-level permission, +so updating and deleting an extension will affect all the team project collections that use the extension. + + + +## Request extensions for a team project collection + +Don't have permissions to install extensions? +You can request extensions instead. + +0. While you're [disconnected](#disconnected-tfs) or [connected](#connected-tfs) to TFS, try to install the extension. + + Extension details + +0. Select the team project collection where you want to install the extension. If you don't have permissions to install the extension, you can request it now. + + Request extension + + You can review your requests after the Visual Studio Marketplace sends the request to the project collection administrator. + + Go to requests + + Your requests appear on your manage extensions page. + + View requested extensions + + Your project collection administrator can review your request after they get it. + +## Approve extensions for a team project collection + +As a project collection administrator, you'll get email when another team project member requests an extension. When you approve the request, TFS automatically installs the extension. + +To approve extensions, you must also have +[**Edit collection-level information** permissions](../security/permissions.md#collection). + +0. Go to your TFS home page, then go to your team project (```https://{server}:8080/tfs/{team-project-collection}/{team-project}```). + +0. Manage your extensions. + +

        + + + +
        +
        + + **TFS 2017** + + Manage extensions + +
        + + **TFS 2015 Update 3** + + Manage extensions + +
        + +0. Review and approve your requested extensions. + + Extensions tab, requested extensions + + After you approve extension requests, TFS automatically installs those extensions. + +0. If you installed paid extensions, go to the next section to [assign those extensions](#assign-extension), to users who need access so they can start using those extensions. + +0. Remember tell your team about installed extensions, so they can start using their capabilities. + + +## Assign paid extension access to users + +After you install a paid extension, you must assign that extension to users who need access, +so they can start using that extension's capabilities. + +> You only have to assign extensions to users who need access. +> Most extensions require that users have at least Basic access, +> not Stakeholder. If you have [Visual Studio Enterprise subscribers](https://marketplace.visualstudio.com/subscriptions), +> they automatically get access to specific extensions that are included +> with their subscriptions as benefits, like Test Manager. +> If you installed these extensions, you don't have to assign +> them to Visual Studio Enterprise subscribers in your team project. Visual Studio Test Professional subscribers +> get access to the Test Manager extension included with their subscription. To grant them access just assign Test Manager. +> To learn more, see [change access levels](/vsts/security/change-access-levels). +> To find the access that your extension requires, see the extension's description +> in the [Visual Studio Marketplace](https://marketplace.visualstudio.com). + +### Who can assign paid extensions to users? + +[Project collection administrators](../accounts/add-administrator-project-collection.md) +with [**Edit collection-level information** permissions](../security/permissions.md#collection) +can assign paid extensions to users. + +0. From your TFS home page, go to your control panel (```https://{server}:8080/tfs/_admin```). + + Go to TFS settings + +0. Go to your team project collection settings (```https://{server}:8080/tfs/{team-project-collection}/_admin```). + + Go to your team project collection administration page + +0. Go to your Users hub (```https://{server}:8080/tfs/{team-project-collection}/_admin/_userHub```). + + Go to Users hub + +0. Go to the extension pane, for example, Test Manager. + + Go to extension pane + +0. Assign your extension to users who need access. + + Assign extension to users + + Extension now assigned + + You can assign the extension to one user, specific users, + or to all users at the same time, even going above the number allowed + for your extension, if necessary. + +0. Tell your team about this extension, so they can start using its capabilities. + + [Need help?](#get-support) + + +## Change number of paid extension users + +To update the total number of extension users that you pay for, +go to your Team Foundation Server Users hub. +To cancel paid access to an extension, +reduce your users to zero (0). +[How do you bill changes in users?](#bill-period) + +### Who can change the number of paid extension users? + +[Project collection administrators](../accounts/add-administrator-project-collection.md) +with [**Edit collection-level information** permissions](../security/permissions.md#collection) +can change the number of paid extension users whose access that you pay for. + +0. From your TFS home page, go to your control panel (```https://{server}:8080/tfs/_admin```). + + Go to TFS settings + +0. Go to your team project collection settings (```https://{server}:8080/tfs/{team-project-collection}/_admin```). + + Go to your team project collection administration page + +0. Go to your Users hub (```https://{server}:8080/tfs/{team-project-collection}/_admin/_userHub```). + + Go to Users hub + +0. Go to the extension pane, for example, Test Manager. Change the number of extension users that you pay for. + + Go to extension pane, edit total paid extension users + +0. Update your total paid extension users. + + Update total paid extension users + + [Need help?](#get-support) + + +## Uninstall or disable extensions in Team Foundation Server + +When you don't need an extension anymore, +you can uninstall or disable this extension. + +> Charges will continue for a paid extension +> until you [reduce all users to zero (0) for this extension](#change-extension-quantity). + +### Who can uninstall or disable extensions? + +[Project collection administrators](../accounts/add-administrator-project-collection.md) +with [**Edit collection-level information** permissions](../security/permissions.md#collection) +can uninstall or disable extensions. + +0. From your TFS home page (```https://{server}:8080/tfs/```), +go to the team project collection where you want to uninstall or disable the extension. + +0. Manage your extensions. + + **TFS 2015 Update 3** + + Manage extensions + + + **TFS 2017** + + Manage extensions + +0. On the extensions tab, select the extension, then uninstall or disable it. + + Uninstall or disable an extension + + [Need help?](#get-support) + +## Q & A + +### General + + + + + +[!INCLUDE [extensions-difference](_shared/qa-extensions-difference.md)] + +[!INCLUDE [what-happened-preview-extensions](../_shared/qa-what-happened-preview-extensions.md)] + + + +### Install, request, assign, and access extensions + + + + +#### Q: When do I choose Install for paid extensions? + +A: You can just choose **Install** when: + +* You want to install a free or preview extension. +* You paid for access, uninstalled the extension, +and want to reinstall the extension. +* You just need the extension for +[Visual Studio subscribers](https://marketplace.visualstudio.com/subscriptions) +who have access for that extension included with their subscriptions. +These subscribers get specific extensions, like Test Manager, +included with their subscriptions as benefits. They can use +these extensions after they're installed without paid access +and assignment. You only have to buy and assign extensions +for users who need access. + + +#### Q: Why can't I install extensions for TFS? + +A: This might happen for these reasons: + +* You must be a member of the +[Project Collection Administrators group](../accounts/add-administrator-project-collection.md) +with [**Edit collection-level information** permissions](../security/permissions.md#collection) +in the team project collection where you want to install extensions. +If you don't have permissions, you can [request extensions](#request) instead. + + +* If you get an error that your extension is already installed or +requested, check with your project collection administrator +and ask them to assign the extension to you. + + + + + +#### Q: Why don't I see the team project collection I want? + +A: You must be a member of your team project collection. +Follow these steps to check your identity that you use +to sign in to the Visual Studio Marketplace. + +0. On your TFS web portal home page (```https://{server}:8080/tfs/```), +go to the top right corner of the page, and click your user name to view your profile. +0. On the left side of your profile, make sure that your email address and directory are correct. +0. Close all browser windows. +0. Open a private or incognito browsing session. +0. Sign in to your TFS home page (```https://{server}:8080/tfs/```) +with the identity that's a user in the team project collection +where you want to install the extension. + + > If you're asked to choose "work or school account" or + > "personal account", this means you used an email address + > that's the same for a Microsoft account and a "work or school account" + > that's managed by your organization in Azure Active Directory. + > Although these identities have the same email address, + > they're still separate identities with different profiles, + > security settings, and permissions. + > + > Choose the identity that's the user in your team project collection. + +0. From your team project collection, go to the Visual Studio Marketplace. + + + +[!INCLUDE [troubleshooting-purchases-shared-ts-tfs](_shared/qa-troubleshooting-purchases-shared-ts-tfs.md)] + + +#### Q: Why doesn't the extension I want show a download button? + +A: Some extensions work only with Visual Studio Team Services, not TFS, for one of these reasons: + +- The extension uses Team Services features that aren't released yet for TFS. +- The [extension manifest](../extend/develop/manifest.md) indicates that the extension +is available only for Team Services (targets = Microsoft.Visualstudio.Services.Cloud). +- The extension manifest indicates that the extension is an integration (targets = Microsoft.Visualstudio.Services.Integration). + + +#### Q: Why can't I upload extensions to TFS? + +A: You must be a member of the +[Team Foundation Administrators group](../tfs-server/add-administrator-tfs.md#server) +with [**Edit instance-level information** permissions](../security/permissions.md#server) +for the Team Foundation Server where you want to upload extensions. + + + +[!INCLUDE [no-access-extension-features](../_shared/qa-no-access-extension-features.md)] + + + + + +### Purchases & billing + +[!INCLUDE [azure-billing](_shared/qa-azure-billing.md)] + + + +[!INCLUDE [extension-billing-frequency](_shared/qa-extension-billing-frequency.md)] + +[!INCLUDE [azure-bill-larger](../_shared/qa-azure-bill-larger.md)] + +[!INCLUDE [azure-subscription-disabled-tfs](../_shared/qa-azure-subscription-disabled-tfs.md)] + +[!INCLUDE [azure-billing-support](_shared/qa-azure-billing-support.md)] + + + +[!INCLUDE [marketplace-support](_shared/qa-marketplace-support.md)] diff --git a/docs/marketplace/index.md b/docs/marketplace/index.md new file mode 100644 index 00000000000..df9aca4975a --- /dev/null +++ b/docs/marketplace/index.md @@ -0,0 +1,29 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +title: Index for installing VSTS and Team Foundation Server extensions from the Visual Studio Marketplace +description: Index of Visual Studio Marketplace information for VSTS and Team Foundation Server extensions. +ms.assetid: afd7c3b8-a09f-4a38-8207-bc84e678a39b +ms.manager: douge +ms.author: elbatk +ms.date: 08/23/2016 +--- + +# Manage Extensions + +Extensions for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) can be installed through the [Visual Studio Marketplace](https://marketplace.visualstudio.com). + +## 5-minute Quickstarts +* [Install VSTS extensions](install-vsts-extension.md) +* [Get extensions for TFS](./get-tfs-extensions.md) +* [Assign paid extensions to users](./assign-paid-extensions.md) + +## How-to Guides +* [Rate and review extensions](./rating-and-review.md) + +## Troubleshooting +* [Marketplace FAQs](./faq-extensions.md) + + + + diff --git a/docs/marketplace/install-vsts-extension.md b/docs/marketplace/install-vsts-extension.md new file mode 100644 index 00000000000..95c762efb9f --- /dev/null +++ b/docs/marketplace/install-vsts-extension.md @@ -0,0 +1,102 @@ +--- +title: Install extensions for VSTS | Visual Studio Team Services (Visual Studio Online) +description: Find and install extensions for Team Services from the Visual Studio Marketplace +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: dd117c5c-111f-4361-91c6-ed37fb476c75 +ms.manager: douge +ms.author: elbatk +ms.date: 01/10/2017 +--- + +# Install extensions for Visual Studio Team Services + +**Team Services** + +To add new features and capabilities to your VSTS account, +install extensions from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/vsts). +You can install [free, preview, or paid](./faq-extensions.md#difference) extensions, +and you can [start extension trials](/vsts/billing/try-additional-features-vs), +if they're offered. + +> [!TIP] +> To learn about building your own Team Services extensions, +> see [developing](http://aka.ms/vsoextensions) and +> [publishing](http://aka.ms/vsmarketplace-publish) extensions. + + +## Install an extension for your Team Services account + +### What do I need to install extensions? +Team Services [project collection administrators or account owners](faq-extensions.md#find-owner) can install extensions. If you don't have permissions, +you can [request extensions](request-vsts-extension.md) instead. + +Private extensions must be shared with your Team Services account to be installed. Check out the +[publishing documentation](../extend/publish/overview.md#upload) for information on how to share private extensions. + +For paid extensions, you'll need an [Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +to bill your purchase. If you don't have an Azure subscription, you can create a new subscription when you make your first purchase. + +> [!NOTE] +> To use an existing Azure subscription for billing, +> you must have at least Co-administrator permissions for that subscription. +> If you don't have permissions, have an Azure Account Administrator +> or Service Administrator go to the Azure classic portal and +> [add you as Co-administrator](https://docs.microsoft.com/en-us/azure/billing-add-change-azure-subscription-administrator) +> to the Azure subscription that you want to use for billing. +> Co-administrator permissions are available only in the classic Azure portal. + +Your Team Services account will reuse your Azure subscription +for future Visual Studio Marketplace purchases +or for team services purchased through Azure, +like Cloud-based Load Testing. +[Where can I find more info about Azure billing?](./faq-extensions.md#billing) + +0. Sign in to the [Visual Studio Marketplace > Visual Studio Team Services](https://marketplace.visualstudio.com/vsts). + + Visual Studio Marketplace + +0. Find and select the extension that you want to install. + +0. Based on the extension that you select, +install or buy the extension. + + * For free or preview extensions, click **Install**. + * For extensions that you haven't paid for access yet, click **Buy**. + * For extensions that you've already [paid for access](./faq-extensions.md#paid-access), + expand **Buy**, and select **Install for paid users**. + + **Start Trial** appears only if the extension offers a trial. + Learn [how to try extensions](/vsts/billing/try-additional-features-vs). + + Install or buy the extension + +0. Select your Team Services account to install this extension. + + Select Team Services account for this extension + + * [Why don't I see any Team Services accounts?](./faq-extensions.md#no-accounts) + + * [Why can't I install this extension?](./faq-extensions.md#no-permissions) + +0. If you chose a paid extension, +select an [Azure subscription](https://azure.microsoft.com/en-us/pricing/purchase-options/) +that you'll use to pay for extension access. + + For paid extensions, select an Azure subscription for billing + + Then select the number of users who will need paid access. + + Select number of users who need paid extension access + +0. Finish your installation. + +0. If you installed a paid extension like Test Manager, +make sure that you [assign the extension to users who need access](assign-paid-extensions.md). +Otherwise, you can now go to your Team Services account to use your extension. +Also, tell your team about this extension, so they can start using its capabilities too. + + Extension installed + +[Troubleshooting](faq-extensions.md) diff --git a/docs/marketplace/marketplace-billing-qa.md b/docs/marketplace/marketplace-billing-qa.md new file mode 100644 index 00000000000..f02925ccd6e --- /dev/null +++ b/docs/marketplace/marketplace-billing-qa.md @@ -0,0 +1,18 @@ +--- +title: Marketplace support +description: Frequently asked questions for Marketplace +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: 10db7a0a-f57b-4bef-82e2-8cc163ebaa2e +ms.manager: douge +ms.author: elbatk +ms.date: 04/28/2017 +--- + +# Marketplace support + +**VSTS** | **TFS 2017** | **TFS 2015** + + +[!INCLUDE [marketplace-support](_shared/qa-marketplace-support.md)] + diff --git a/docs/marketplace/overview.md b/docs/marketplace/overview.md new file mode 100644 index 00000000000..22062e4b9d6 --- /dev/null +++ b/docs/marketplace/overview.md @@ -0,0 +1,75 @@ +--- +title: Visual Studio Marketplace & billing overview | Team Services & TFS +description: Overview of extensions, subscriptions, and billing for the Visual Studio Marketplace +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: 50c06553-9fba-40da-8c04-357497cc1db7 +ms.manager: douge +ms.author: elbatk +ms.date: 04/28/2017 +--- + +# Visual Studio Marketplace overview + +The Visual Studio Marketplace provides support for the following: +- Discover and install extensions for Visual Studio, **Visual Studio Team Services (VSTS)**, **Team Foundation Server (TFS)**, and Visual Studio Code +- Purchase subscriptions for Visual Studio, HockeyApp, Xamarin University +- Purchase pay-for-usage extensions, such as Test Manager and Package Management (these extensions are assigned to specific users). + +Marketplace + +>[!NOTE] +> This documentation focuses on extensions, to find documentation on subscriptions, check out the [billing documentation](../billing/index.md). + +## What are extensions + +An extension is an installable unit that contributes new capabilities into Visual Studio, Visual Studio Team Services, Team Foundation Server, or Visual Studio Code. You can find extensions from within these product or from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/). + +Extending VSTS is the easiest way for users to get the most out of their +devops environment. The [Visual Studio Marketplace](https://marketplace.visualstudio.com) is home to hundreds of extensions +that can be installed to help with: +- Planning and tracking of work items, sprints, scrums, etc. +- Build and release flows +- Code testing and tracking +- Collaboration amongst team members + +Adding extensions to your Team Services account is incredibly easy: + +1. Search and find extensions for your account in the [Visual Studio Marketplace](https://marketplace.visualstudio.com). +2. Install the extension from the Marketplace and start using it in Team Services. +You can install them with a few clicks. You must have administrative permissions to upload or install extensions. + +## Get or build extensions + +| Product | Topics | +|-----------------------------|--------------------------------------------------------------------------------------------------| +| VSTS | [Get extensions for Team Services](install-vsts-extension.md)
        [Develop extensions for Team Services](https://aka.ms/vsoextensions) | +| Team Foundation Server | [Get extensions for TFS](get-tfs-extensions.md)
        [Develop extensions for Team Foundation Server](https://aka.ms/vsoextensions) | +| Visual Studio | [Get extensions for Visual Studio](https://marketplace.visualstudio.com/vs)
        [Develop extensions for Visual Studio](http://aka.ms/extendvs) | +| Visual Studio Code | [Get extensions for Visual Studio Code](https://marketplace.visualstudio.com/vscode)
        [Develop extensions for Visual Studio Code](http://go.microsoft.com/fwlink/?LinkID=703825) | + + +## Free extensions + +There are many free extensions available in the Marketplace, too numerous to list. However, the following extensions are listed as they quickly add a lot of value and are easily installed. + +- [Work Item Search](https://marketplace.visualstudio.com/items?itemName=ms.vss-workitem-search) +- [Campfire integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.services-campfire) +- [Hipchat integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.services-hipchat) +- [Slack integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-slack) +- [Microsoft Teams integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-teams) + +Browse the [Marketplace](https://marketplace.visualstudio.com/) to find additional extensions you want to install. + +## Billing for paid extensions + +Along with free extensions, there are also paid extensions in the Marketplace. + +Check out our [billing documentation](../billing/index.md) to find out how to pay for extensions. + + + + + + diff --git a/docs/marketplace/rating-and-review.md b/docs/marketplace/rating-and-review.md new file mode 100644 index 00000000000..12676a68438 --- /dev/null +++ b/docs/marketplace/rating-and-review.md @@ -0,0 +1,81 @@ +--- +title: Rate and review extensions | Visual Studio Marketplace +description: Rate and review extensions in the Visual Studio Marketplace +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: a0c03dd4-d495-456d-9f42-a6edf919c2eb +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Ratings & Reviews + +Find out what others think about an extension, or rate and review +extensions yourself in Visual Studio Marketplace. If you're a +publisher, you can respond to reviews directly on your extension +page. + +## Find reviews, rate and review extensions + +You can see an extension's average rating on its tile or on the extension +page. To leave a rating or a review + +1. Sign in to the Visual Studio Marketplace. +2. Find the extension description page. +3. Go to the rating and review section by clicking the stars in the header +or scrolling down the page. Click **Write a review** to leave your rating or review. + +You can leave only one review, but you can edit your review at any time. + +Rating in extension header
        +Review details + +## Publisher response to reviews + +As a publisher, you can respond to reviews that customers leave for your +extensions in the Visual Studio Marketplace. If you have owner, creator, or +contributor permissions as the publisher, you can find and click **Reply** +next to a review. + +To respond to a review, click Reply
        + +Your response will show up under the review. + +Reply details
        + +You can leave only one response. Please avoid using reviews as a support forum. If +you need more details, please provide a support alias for the reviewer to +contact. You can then resolve their problems externally and then update your +reply with a resolution. + +### Guidelines for publisher response to reviews + +As publishers, please help keep the Visual Studio Marketplace an open, +inviting, respectful, and helpful place for customers to find, try, install, +and review extensions. Communication plays an important role in keeping a +healthy community. To help create this environment, here are guidelines for +publishers responding to customer reviews. Please think deeply about your +customer interactions and reflect on the spirit of the customer experience +that the Marketplace is trying to create. + +* Reviews are reserved for customer comments. Use *Reply* only to respond to +a review. +* Reviews are for sharing customer opinions, so *all opinions are valid*. +Customers are entitled to their opinions, so please treat comments respectfully +as feedback without debate, criticism, or argument. +* Make sure that your responses add value and are relevant to your customers' +comments. +* Focus on precisely addressing questions or problems. If you need more details, +ask the customer to contact you over email, rather discuss in reviews. When you +resolve the problem, please update your reply with the resolution. You can edit +your reply, just like customers can edit their reviews. +* If you come across any inappropriate reviews, like spam, abusive, or offensive +content, for any extension, please flag it for our review. + +## Publisher request to void a review + +As a publisher, you can appeal to void a review if the issue reported is due to the Marketplace or the underlying platform. If the issue is valid, Marketplace admins will void the rating. +You can **Appeal** from ratings and review section on your extension hub page. + + diff --git a/docs/marketplace/request-vsts-extension.md b/docs/marketplace/request-vsts-extension.md new file mode 100644 index 00000000000..c464cdc9a2a --- /dev/null +++ b/docs/marketplace/request-vsts-extension.md @@ -0,0 +1,52 @@ +--- +title: Request permission for an extension for Visual Studio Team Services +description: Request permission for an extension for Visual Studio Team Services +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: 92a68d80-cd18-4194-8a30-f12424045efc +ms.manager: douge +ms.author: elbatk +ms.date: 08/01/2017 +--- + +# Request permission for an extension for Visual Studio Team Services + +**Team Services** + + +You need Team Services [project collection administrators or account owners](faq-extensions.md#find-owner) permissions to install extensions. + +If you don't have permissions, you can request extensions instead: + +0. Sign in to [Visual Studio Marketplace > Visual Studio Team Services](https://marketplace.visualstudio.com/vsts). + + Visual Studio Marketplace + +0. Find and select the extension that you want to request. + +0. Try to install the extension. + + Extension details + +0. Select the Team Services account where you want to install the extension. +If you don't have permissions to install the extension, +you can request it now. + + Request extension + + You can review your requests after the Visual Studio Marketplace sends the request to the account owner. + + Go to requests + + Your requests appear on your Team Services account's extensions page. + + View requested extensions + + Your Team Services account owner or project collection administrator + can review your request after they get it. + + [Need help?](faq-extensions.md#get-support) + + +[Troubleshooting](faq-extensions.md) diff --git a/docs/marketplace/toc.yml b/docs/marketplace/toc.yml new file mode 100644 index 00000000000..59d12fb711e --- /dev/null +++ b/docs/marketplace/toc.yml @@ -0,0 +1,46 @@ +- name: Manage Extensions + href: index.md +- name: Overview + items: + - name: Marketplace overview + href: overview.md +- name: Quickstarts + items: + - name: Install VSTS extensions + href: install-vsts-extension.md + - name: Get extensions for TFS + href: get-tfs-extensions.md + - name: Assign paid extensions + href: assign-paid-extensions.md +- name: How-to Guides + items: + - name: Rate and review extensions + href: rating-and-review.md +- name: Concepts + items: + - name: Extension reporting + href: extension-report.md +- name: Troubleshooting + items: + - name: Getting and paying for extensions + href: faq-extensions.md + - name: Marketplace support + href: marketplace-billing-qa.md +- name: Resources + items: + - name: Extensions for Visual Studio + href: ../integrate/ide/extensions/overview.md + - name: Extensions for VS Code + href: https://code.visualstudio.com/docs/editor/extension-gallery + - name: Recommended extensions + items: + - name: Code search extension + href: ../search/overview.md + - name: Package Management extension + href: ../package/overview.md + - name: Work item search extension + href: ../search/workitem/work-item-search.md + - name: Build extensions + href: ../extend/index.md#extensions + - name: How to buy TFS CALs + href: https://www.visualstudio.com/team-services/tfs-pricing/ diff --git a/docs/marketplace/uninstall-disable-vsts-extensions.md b/docs/marketplace/uninstall-disable-vsts-extensions.md new file mode 100644 index 00000000000..1ee3e892381 --- /dev/null +++ b/docs/marketplace/uninstall-disable-vsts-extensions.md @@ -0,0 +1,39 @@ +--- +title: Uninstall or disable extensions in your Team Services account +description: Uninstall or disable extensions in your Team Services account +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +ms.assetid: b46e7ae6-0974-4ecf-8369-687ee8f89ee5 +ms.manager: douge +ms.author: elbatk +ms.date: 01/10/2017 +--- + +# Uninstall or disable extensions in your Team Services account + +**Team Service** + + + +When you don't need an extension anymore, you can uninstall or disable this extension. +You'll need Team Services +[project collection administrator or account owner permissions](./faq-extensions.md#find-owner). + +> [!IMPORTANT] +> To cancel access completely to a paid extension, you must reduce all extension users to zero (0). +> [How do you bill changes in users?](./faq-extensions.md#bill-period) + +0. Sign in to your Team Services account +(```https://{youaccount}.visualstudio.com```). + +0. From your account toolbar, go to **Extensions**. + + Extensions tab + +0. On the extensions tab, +select the extension, then uninstall or disable it. + + Uninstall or disable an extension + + +[Troubleshooting](faq-extensions.md) diff --git a/docs/migrate-to-vsts-from-tfs.md b/docs/migrate-to-vsts-from-tfs.md new file mode 100644 index 00000000000..987709362c4 --- /dev/null +++ b/docs/migrate-to-vsts-from-tfs.md @@ -0,0 +1,102 @@ +--- +title: Migrate from TFS to VSTS | Team Services & TFS +description: Learn about migrating from Team Foundation Server (TFS) to Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.assetid: 3D20B6AC-E8A8-4A6D-B9D8-68ED2F5E0E8D +ms.manager: douge +ms.author: aaronha +ms.date: 06/22/2017 +--- + + +# Migrate data from TFS to Team Services + +When you decide to make the move from TFS to Team Services, you might start fresh with an empty account. Often, however, +you will have existing code, work items, and other assets that you want to move. There are many approaches to doing this +which vary in both the fidelity of the data transfer and the complexity of the process. + +Prior to migrating data, review the differences that exist between [TFS and Team Services](about-vsts-tfs.md). + +### Option 1: Copy the most important assets manually + +By far the easiest option for moving data into Team Services is to manually copy your most important assets and start relatively fresh. +This can be difficult when you are in the middle of a large project, but you can make it easier if you do some advance planning +and schedule your move when it makes sense for your team. + +For example, when the Visual Studio Cloud Services team chose to move from TFS to Team Services, we also decided to +move from Team Foundation Version Control (TF VC) to Git. This required a fair bit of planning, but when we actually +performed our migration, we created a new Git repo using the "tip" version of our TF VC sources, and left our history +behind in TFS. We also moved our active work items, and left behind all our old bugs, completed user stories and tasks, +and so on. + +Here's the general process: + +1. Identify the most important assets that you need to migrate - typically source code, work items, or both. Other assets in TFS – +build definitions, test plans, and so forth – are harder to manually migrate. +2. Identify a good time to make the transition. +3. Prepare your target Team Services accounts. Create the accounts and team projects that you need, provision users, and so on. +4. Migrate your data. +5. Consider making the source TFS deployments read-only. + +### Option 2: High fidelity database migration. + +The TFS/Team Services product team recently released a preview of a high fidelity TFS Database Import Service. More +information on this service can be found at [High Fidelity Migration](./articles/migration-overview.md). A downloadable migration +guide is available at [https://aka.ms/TFSImportData](https://aka.ms/TFSImportData). + + +Migration Guide + + +Because the TFS Database Import Service operates at a database level, it can provide a very high fidelity migration. +If you want to move your existing TFS data into Visual Studio Team Services, we strongly recommend using this option. + +### Option 3: Using public API-based tools for higher fidelity migration + +If for some reason you cannot use the TFS Database Import Service but still want a higher fidelity migration than +Option 1, you can choose from a variety of tools that use public APIs to move data. Generally these tools can provide +a higher fidelity migration than a manual copy of "tip" data, but they are still relatively low fidelity. For example: + +- None of them will preserve the dates of TF VC changesets. +- Many of them will not preserve the changed dates of work item revisions. +- None of them will migrate all TFS artifacts. + +In general, we only recommend this approach if the extra fidelity beyond a manual copy is critical. If you decide to +take this approach, you might consider hiring a consultant who has experience with one or more of the tools. +You should definitely consider doing a test migration before doing your final migration. + +Many organizations need a very high fidelity migration for only a subset of their work. New work could +potentially start directly in Team Services. Other work, with less stringent fidelity requirements, +could be migrated using one of the other approaches. You will have to weigh the pros and cons of the +various approaches against your motivations for moving into Team Services and decide for yourself what +is the right strategy. + +### Migration scopes + +As described in [About Team Services and TFS, Scope and scale data](about-vsts-tfs.md#scope-scale-data), the long term +direction for Team Services is to support grouping of accounts within organizations. This would lead to: +- Team Services accounts that serve as the equivalent of TFS project collections and +- Team Services organizations that serve as the equivalent of TFS deployments. + +This is why the TFS Database Import Service only supports +importing single TFS collections as single Team Services accounts. If you need to migrate individual team projects you will need to use one of the other options—manual copy or public API +based migrations. + +##Related notes +- [About VSTS and Team Foundation Server](about-vsts-tfs.md) +- [Pricing, Team Services](https://www.visualstudio.com/team-services/pricing/) +- [Pricing, TFS](https://www.visualstudio.com/team-services/tfs-pricing/) + + + + diff --git a/docs/notifications/_img/ALM_PRD_ID_PR.png b/docs/notifications/_img/ALM_PRD_ID_PR.png new file mode 100644 index 00000000000..68b5f3a905e Binary files /dev/null and b/docs/notifications/_img/ALM_PRD_ID_PR.png differ diff --git a/docs/notifications/_img/at-mention-link-to-user-contact-card.png b/docs/notifications/_img/at-mention-link-to-user-contact-card.png new file mode 100644 index 00000000000..0ef243a59c8 Binary files /dev/null and b/docs/notifications/_img/at-mention-link-to-user-contact-card.png differ diff --git a/docs/notifications/_img/at-mention-link-view-of-own-name.png b/docs/notifications/_img/at-mention-link-view-of-own-name.png new file mode 100644 index 00000000000..6dcc0e0d9f2 Binary files /dev/null and b/docs/notifications/_img/at-mention-link-view-of-own-name.png differ diff --git a/docs/notifications/_img/at-mention-pr-type-name.png b/docs/notifications/_img/at-mention-pr-type-name.png new file mode 100644 index 00000000000..5cc8c037bea Binary files /dev/null and b/docs/notifications/_img/at-mention-pr-type-name.png differ diff --git a/docs/notifications/_img/change-email-address-edit-profile.png b/docs/notifications/_img/change-email-address-edit-profile.png new file mode 100644 index 00000000000..3ec30ee7609 Binary files /dev/null and b/docs/notifications/_img/change-email-address-edit-profile.png differ diff --git a/docs/notifications/_img/change-email-address-open-profile.png b/docs/notifications/_img/change-email-address-open-profile.png new file mode 100644 index 00000000000..1481a2794f9 Binary files /dev/null and b/docs/notifications/_img/change-email-address-open-profile.png differ diff --git a/docs/notifications/_img/mail-to-at-mention-user.png b/docs/notifications/_img/mail-to-at-mention-user.png new file mode 100644 index 00000000000..8d5278fdf23 Binary files /dev/null and b/docs/notifications/_img/mail-to-at-mention-user.png differ diff --git a/docs/notifications/_img/manage-personal-notifications-complete-pull-request-subscription.png b/docs/notifications/_img/manage-personal-notifications-complete-pull-request-subscription.png new file mode 100644 index 00000000000..d6919580a8a Binary files /dev/null and b/docs/notifications/_img/manage-personal-notifications-complete-pull-request-subscription.png differ diff --git a/docs/notifications/_img/manage-personal-notifications-new-subscription-dialog.png b/docs/notifications/_img/manage-personal-notifications-new-subscription-dialog.png new file mode 100644 index 00000000000..1e73495780d Binary files /dev/null and b/docs/notifications/_img/manage-personal-notifications-new-subscription-dialog.png differ diff --git a/docs/notifications/_img/manage-personal-notifications-new-subscription.png b/docs/notifications/_img/manage-personal-notifications-new-subscription.png new file mode 100644 index 00000000000..661c835d908 Binary files /dev/null and b/docs/notifications/_img/manage-personal-notifications-new-subscription.png differ diff --git a/docs/notifications/_img/manage-personal-notifications-subscription-added.png b/docs/notifications/_img/manage-personal-notifications-subscription-added.png new file mode 100644 index 00000000000..db3c21ecca5 Binary files /dev/null and b/docs/notifications/_img/manage-personal-notifications-subscription-added.png differ diff --git a/docs/notifications/_img/oob-notification.png b/docs/notifications/_img/oob-notification.png new file mode 100644 index 00000000000..bfbc00a1e98 Binary files /dev/null and b/docs/notifications/_img/oob-notification.png differ diff --git a/docs/notifications/_img/open-profile-team-services.png b/docs/notifications/_img/open-profile-team-services.png new file mode 100644 index 00000000000..18b1a2782d3 Binary files /dev/null and b/docs/notifications/_img/open-profile-team-services.png differ diff --git a/docs/notifications/_img/unsubscribe-from-build-completes.png b/docs/notifications/_img/unsubscribe-from-build-completes.png new file mode 100644 index 00000000000..75a34eccad6 Binary files /dev/null and b/docs/notifications/_img/unsubscribe-from-build-completes.png differ diff --git a/docs/notifications/_img/unsubscribe-open-notification-settings.png b/docs/notifications/_img/unsubscribe-open-notification-settings.png new file mode 100644 index 00000000000..59e2a0059b9 Binary files /dev/null and b/docs/notifications/_img/unsubscribe-open-notification-settings.png differ diff --git a/docs/notifications/_img/unsubscribe-personal-notifications.png b/docs/notifications/_img/unsubscribe-personal-notifications.png new file mode 100644 index 00000000000..ac104d0658f Binary files /dev/null and b/docs/notifications/_img/unsubscribe-personal-notifications.png differ diff --git a/docs/notifications/about-notifications.md b/docs/notifications/about-notifications.md new file mode 100644 index 00000000000..5fd2d3909f0 --- /dev/null +++ b/docs/notifications/about-notifications.md @@ -0,0 +1,56 @@ +--- +title: Understand the basics of how notifications work in VSTS and TFS +description: Understand how notifications or alerts are managed in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: collaborate +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 09/01/2017 +--- + + +# About notifications + +**VSTS | TFS 2018 | TFS 2017** + +Notifications help you and your team stay informed about activity occuring within your Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) team projects. With notifications, you are notified when changes occur to work items, code reviews, pull requests, source control files, and builds, you can be notified via email. For example, you can get notified whenever a bug that you opened is resolved or a work item is assigned to you. + +You receive notifications based on rules or subscriptions. Subscriptions arise from these areas: +- Out of the box or default subscriptions +- Ones that an administrator creates for a team or group that you belong to +- Ones that you create for yourself + +You can manage your notifications, which you access from your account menu. Other notifications are managed by an administrator at these different levels: + +- Team notifications, managed by a team administrator +- Project notifications, manage by a member of the Project Administrators group +- Account/collection-level notifications, managed by a member of the Project collection Administartors group + +## Preferred email address + +Notifications are sent by default to the preferred email address for your account profile. This is typically the email address you signed into VSTS or TFS with, but can be managed via your account preferences profile page. + +> [!NOTE] +> Your preferred email address applies across all of your accounts and cannot be changed on a per-account basis. + + +## Integrating with other services + +If your team uses an external service to collaborate—such as Campfire, Flowdock, or Slack—you can configure notifications to be sent to these services. These services are supported out of the box: + +- [Campfire](../service-hooks/services/campfire.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Flowdock](../service-hooks/services/flowdock.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Hipchat](../service-hooks/services/hipchat.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Slack](../service-hooks/services/slack.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Microsoft Teams](https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-teams) + +You can also use a third-party service like Zapier to send notifications to hundreds of other services. Learn more about [Zapier and VSTS integration](../service-hooks/services/zapier.md). + + +## On-premises SMTP server (TFS) + +For on-premises TFS, [you must configure an SMTP sever](../tfs-server/admin/setup-customize-alerts.md) in order for team members to see the Notifications option from their account menu and to receive notifications. + diff --git a/docs/notifications/add-links-to-work-items.md b/docs/notifications/add-links-to-work-items.md new file mode 100644 index 00000000000..42aacc911fc --- /dev/null +++ b/docs/notifications/add-links-to-work-items.md @@ -0,0 +1,51 @@ +--- +title: Quickly link to work items in discussions & pull request in VSTS & TFS +description: Link to work items in discussions and pull requests +ms.prod: vs-devops-alm +ms.technology: collaborate +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 09/01/2017 +--- + + + +# Link work items using the #ID control + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015.1** + + + +>[!NOTE] +>Feature availability: The **#ID** special control is currently supported from VSTS and TFS 2015.1 and later versions. + + +## Link a pull request to a work item + +When leaving a code comment in a pull request, you can type **#** to trigger the **#ID** work item picker. The picker displays a list of 50 work items that you have recently modified or that are assigned to you. + +You can narrow the list of suggested work items by entering keywords that match the work item type, ID, or title, or you can enter the exact work item ID. + +Pull request comment area, type # to invoke work item control + +To further filter the list, continue entering keywords until you've found a match. You can enter up to five keywords. + +## Link to work items in pull requests, comments, and commits + + +>[!NOTE] +>Feature availability: The **#ID** special control has been extended to additional objects when working from VSTS and TFS 2015.2 and later versions. + +You can also use the **#ID** control in pull request discussions, commit comments, changeset comments, and shelveset comments. + + +## Related notes + +- [Link work items](../work/backlogs/add-link.md) +- [Save work with commits](../git/tutorial/commits.md) +- [Pull requests](../git/tutorial/pullrequest.md) +- [Check in your work to the team code base](../tfvc/check-your-work-team-codebase.md) + diff --git a/docs/notifications/at-mentions.md b/docs/notifications/at-mentions.md new file mode 100644 index 00000000000..9f15d687af7 --- /dev/null +++ b/docs/notifications/at-mentions.md @@ -0,0 +1,51 @@ +--- +title: "Use @mentions to further discussion in VSTS & TFS" +description: "Alert team members using the @mention control in discussions and pull requests" +ms.prod: vs-devops-alm +ms.technology: collaborate +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 09/01/2017 +--- + + +# Use @mentions to further discussion + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015.2** + +The **@mention** control allows you to quickly pull someone into a discussion. You can use this control within the Discussion section of a work item form, or a pull request. + + + +>[!NOTE] +>Feature availability: The **@mention** control is currently supported from VSTS or the web portal for TFS 2015.2 and later versions. For on-premises TFS, [you must configure an SMTP sever](../tfs-server/admin/setup-customize-alerts.md) in order for team members to receive notifications. + +When leaving a code comment in a pull request, you can type **@** to trigger the **@mention** identity picker. From the identity selector, you'll see a list of those people that you have you've recently mentioned. You can choose one of those names or type in the name of the person you are looking for to perform a directory search. + +To filter the list, enter the user name or alias until you've found a match. + +Web portal, Pull Request, Type a user name or email alias to locate a match  + +To **@mention** a user you've never selected previously, just continue typing to perform your search against the full directory. + +Names of those that you mention appear in blue text. Click the **@mention link name** to open the user's contact card, which can provide you additional context for why they were pulled into the conversation. + +Web portal, At mention user contact card accessible]  + +Upon completion of your selection and text entry, your **@mention** user will receive an email alerting them about the mention. + +Email sent to at-mention user account]  + +When viewing their own mentioned names in conversations, users will notice that their own name is are highlighted in orange text. + +Web portal, At mention of ones own name appears in orange text]  + +You can use the **@mention** control in pull request discussions, commit comments, changeset comments, and shelveset comments. You can also use the **@mention** control in the [Discussion section of work item forms](../work/concepts/work-item-form-controls.md#discussion). + +## Related notes + +- [Work item form controls](../work/concepts/work-item-form-controls.md) +- [Pull requests](../git/tutorial/pullrequest.md) \ No newline at end of file diff --git a/docs/notifications/breadcrumb/toc.yml b/docs/notifications/breadcrumb/toc.yml new file mode 100644 index 00000000000..11ca9da0203 --- /dev/null +++ b/docs/notifications/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Collaboration + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=collaboration + items: + - name: Notifications + tocHref: /vsts/ + topicHref: /vsts/notifications/index \ No newline at end of file diff --git a/docs/notifications/change-email-address.md b/docs/notifications/change-email-address.md new file mode 100644 index 00000000000..54a073c7c6e --- /dev/null +++ b/docs/notifications/change-email-address.md @@ -0,0 +1,46 @@ +--- +title: Change your email address for notifications in VSTS or TFS +description: Change the email address used to receive alerts or email notifications managed in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: collaborate +ms.assetid: +ms.topic: get-started-article +ms.manager: douge +ms.author: kaelli +ms.date: 09/01/2017 +--- + + + + +# Change your preferred email address + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015** + +Notifications are sent by default to the preferred email address for your account profile. This is typically the email address you signed into Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) with. You can change this address from your account preferences profile page. + +> [!NOTE] +> Your preferred email address applies across all of your accounts and cannot be changed on a per-account basis. + +1. To change your preferred email address, open your account menu and select **My profile**. + + ![VSTS, My Profile link on Account menu](_img/open-profile-team-services.png) + +2. From your Profile/Information page, click **Edit**. + + VSTS, Profile page  + +2. Change the address and save your changes. + + VSTS, Profile page  + + \ No newline at end of file diff --git a/docs/notifications/events-subscribers-notification-types.md b/docs/notifications/events-subscribers-notification-types.md new file mode 100644 index 00000000000..cbd336bc6eb --- /dev/null +++ b/docs/notifications/events-subscribers-notification-types.md @@ -0,0 +1,78 @@ +--- +title: Events, Subscribers, Notification types | VSTS & TFS +description: Understand how notifications or alerts are managed in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: collaborate +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 08/03/2017 +--- + + +# Events, subscriptions, notification types, and roles + +!!! WORK IN PROGRESS !!! + +## Event types + + + +## Subscriber levels + + + + +## Notification types + +I’m seeing these Notification Types in the UI – are there any other ones?: +- Out of the box (Built-in subscriptions) – users can disable these at the Personal level +- Personal - defined at the Person Notifications level +- Group – defined at the Team, Team Project, or Account level + + + +## Delivery options + + + + +## Event roles + + +## Concepts to explain/guidance to provide – not in any particular order: +- Definitions of Notifications v Subscriptions +- What are event types +- What are notification types +- What are Subscriber levels +- What delivery options are supported and when to use which + - What is the SOAP delivery option used for? and when should I select it? Does the format of the notification automatically change from HTML to SOAP when SOAP is selected as the delivery option? + - Can I customize the email format or the SOAP format? +- What notification levels can be set and guidance on usage +- What event Roles are supported, descriptions for each –– I suppose these change based on the Event type. + - Build: Last changed by, Requested by, Requested for + - Pull Request: Last changed by, Requested by, Requested for + - Git commit: Pushed by + - TVFC code check in: Committer, Owner (Skip Initiator) + - Work Assignee (Current), Assignee (Previous) + - Release: Deployment requested for, Environment Owner, Release requested by, Approved by +- When they can’t opt-out-of a subscription +- What is the difference between Opting out of a Built-in-subscription and Disabling it at the team/team-project level +- Disable a notification – guidance (such as when you go on vacation, others?) +- What notifications can/cannot be edited (appears that ALL Out-of-box notifications cannot be edited – only disabled or opted-out). +- Tips for “blocking” notifications you can’t opt out of/unsubscribe from – use an email filter +- Applying Filters to a notification (Team Project and other useful filters) – guidance on this + + + +## Visuals/art work to provide: +- Notification levels (Personal, Team, Team Project, Account/Collection) and Delivery Options +- Event types and Event Roles +- Permissions and notifications + +To comply with the new MVC content types – I recommend: +- About notifications and subscriptions (Concepts) topic which provides descriptions and guidance re the Concepts listed above. types, delivery options +- Tutorial or How-to guide for: + - Manage your personal notifications + - Manage team, team project, or account-level notifications diff --git a/docs/notifications/faq-notifications.md b/docs/notifications/faq-notifications.md new file mode 100644 index 00000000000..237fc131abe --- /dev/null +++ b/docs/notifications/faq-notifications.md @@ -0,0 +1,44 @@ +--- +title: Questions and answers for working with notifications in VSTS & TFS +description: General q and a about notifications set in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: collaborate +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 09/01/2017 +--- + + + +# FAQs on notifications + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015** + +## Can I receive emails in plain text? +No. This was supported in earlier versions of VSTS and TFS, but all emails are now HTML formatted. + +## How can I avoid receiving any notifications for activity in an account? +Because of custom subscriptions created by other users and admins, there is no way to completely avoid receiving any notifications, but you can do these two actions to minimize the number you receive: +- Unsubscribe from all default and admin-created team and group subscriptions +- Disable or remove all custom subscriptions. + +## Why do some emails have multiple recipients on the To line? + +A default or team/group subscription can have multiple recipients depending on how it is configured. Assuming each of these recipients has permission to the resource the event is related to, the recipients are grouped together in one email. + +Previously each recipient would receive their own individually-addressed email, which could result in the same user getting multiple emails because of their membership in multiple groups. + + +## Related notes + +- [About notifications](about-notifications.md) +- [Manage personal notifications](/vsts/collaborate/manage-team-notifications?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Unsubscribe from a notification](unsubscribe-default-notification.md) + + + + + + diff --git a/docs/notifications/index.md b/docs/notifications/index.md new file mode 100644 index 00000000000..4b760eabfae --- /dev/null +++ b/docs/notifications/index.md @@ -0,0 +1,58 @@ +--- +title: Notifications index to content for VSTS & TFS +description: Index to topics for getting notifications or alerts from VSTS or TFS +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 09/01/2017 +--- + + +# Notifications + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015** + +Stay up-to-date with changes as they occur by subscribing to events such as code changes, build completions, or work item assignments. + + + +## 5-Minute Quickstarts +- [Unsubscribe from a notification](unsubscribe-default-notification.md) +- [Change your preferred email address](change-email-address.md) + + +## Step-by-Step Tutorials +- [Follow work & pull requests](../collaborate/follow-work-items.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Set your personal notifications](manage-personal-notifications.md) + + + + +## How-to Guides +- [Use @mentions to further discussion](at-mentions.md) +- [Use #ID to link to work items](add-links-to-work-items.md) +- [Set team notifications](../collaborate/manage-team-notifications.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Get notified with Campfire](../service-hooks/services/campfire.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Get notified with Flowdock](../service-hooks/services/flowdock.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Get notified with Hipchat](../service-hooks/services/hipchat.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Get notified with Slack](../service-hooks/services//slack.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) + +## Reference + +- [Default and supported notifications](oob-built-in-notifications.md) +- [FAQs](faq-notifications.md) + + +## Resources +- [Microsoft Teams Integration](https://marketplace.visualstudio.com/items?itemname=ms-vsts.vss-services-teams) +- [Service Hooks](../service-hooks/index.md) +- [REST API](https://www.visualstudio.com/en-us/docs/integrate/api/notification/subscriptions) diff --git a/docs/notifications/manage-personal-notifications.md b/docs/notifications/manage-personal-notifications.md new file mode 100644 index 00000000000..b3d3da6c393 --- /dev/null +++ b/docs/notifications/manage-personal-notifications.md @@ -0,0 +1,144 @@ +--- +title: Manage your personal notification settings | VSTS & TFS +description: Get notified when changes occur to source code, git, work items, and builds when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: collaborate +ms.prod: vs-devops-alm +ms.assetid: 644687b3-e30e-46b0-8d3e-3d4a4e34d13a +ms.manager: douge +ms.author: wismythe +ms.topic: get-started-article +ms.date: 09/01/2017 +--- + + +# Manage your notifications + +VSTS | TFS 2018 | TFS 2017.1 | [Previous versions](../work/track/alerts-and-notifications.md) + +>[!NOTE] +>**Feature availability**: This topic applies to VSTS and to TFS 2017.1 and later versions. If you work from an on-premises TFS 2017 or ealier versions, see [Set alerts, get notified when changes occur](../work/track/alerts-and-notifications.md). For on-premises TFS, [you must configure an SMTP sever](../tfs-server/admin/setup-customize-alerts.md) in order for team members to see the Notifications option from their account menu and to receive notifications. + +As changes occur to your code base, builds, work items, and other operations, you can receive email notifications. For example, you can set an alert to be notified whenever a bug that you opened is resolved or a work item is assigned to you. + +Use this topic to learn how to: + +> [!div class="checklist"]    +> * View your notifications     +> * Add a custom subscription       +> * Unsubscribe or opt out of a team or project subscription    + + +## View your personal notifications + +From the web portal, click the icon with your initials or picture icon, and select **Notification settings** from the drop-down menu. + +Open personal notification settings  + +This view shows all subscriptions that you have created or that have been created by an administrator. Subscriptions let you control what you are notified about. Those notifications you're subscribed to are indicated with the the State as **On**. + +Personal notification subscriptions  + +A subscription can be just for you, or if you are a team admin, can be shared by everyone in the team. + +## Add a custom subscription + +With custom personal subscriptions, you can define precise criteria for the events you want to receive notifications for. In contrast to a default subscription which will only notify the users or groups directly associated with an event, a custom subscription can notify you about any event. + +1. From your Notifications page, click **New subscription**. + + Open the new subscription dialog  + +2. Choose the category and template you want to use. For a list of supported templates, see [Default and supported notifications](oob-built-in-notifications.md). + + Here we choose to get notified when a pull request is created within a specific team project, Fabrikam Fiber. + + New subscription dialog  + +3. Modify the description to help you identify the subscription later. Also choose an email address for notifications to be delivered to. By default, your preferred email address is used. optionally, include one or more fields to further specify the event criteria. + + Updated subscription dialog with field criteria  + + > [!NOTE] + > The fields available for filtering event criteria differ depending on the category and template you select. + +4. Click **Finish** when done. The subscription now appears in the list under the category you selected. + + New subscription added  + + +## Unsubscribe or opt out of a team or OOB subscription + +You can choose to not receive notifications for certain team subscriptions by opt'ing out of the subscription. + +To unsubscribe from any notification, even one that you've defined, slide the State **On/Off** indicator to the Off position. + +For example, here we turn off the Build completes subscription. + +Unsubscribe from Build completes subscription  + +>[!NOTE] +>Whether you are an administrator or not, toggling a shared team subscription from your notification settings only impacts you and not other team members. + + + + + +## Related notes + +- [Default and supported notifications](oob-built-in-notifications.md) +- [Follow a specific work item](../collaborate/follow-work-items.md) +- [Manage notifications for a team](../collaborate/manage-team-notifications.md) +- [Change your preferred email address](change-email-address.md) + +### Limitations + +* The user interface no longer support creating plain text email subscriptions. \ No newline at end of file diff --git a/docs/notifications/oob-built-in-notifications.md b/docs/notifications/oob-built-in-notifications.md new file mode 100644 index 00000000000..e50e2524a38 --- /dev/null +++ b/docs/notifications/oob-built-in-notifications.md @@ -0,0 +1,92 @@ +--- +title: Default and supported notifications in VSTS & TFS +description: Reference of out of the box or default notifications set in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: collaborate +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 09/01/2017 +--- + + + +# Default and supported notifications + +**VSTS | TFS 2018 | TFS 2017.1** + +Default subscriptions are configured to send notifications to certain roles or user groups with specific associations to an event. For example, "reviewer" is a role on a pull request event. "Assignee (current)" is a role that reflects the current Assigned To user of a changed work item. + +The roles that receive a notification for a particular default subscription are reflected in the description of the subscription, for example, *"Notifies you when a build you queued or that was queued for you completes"*. Role-based subscriptions contain a Roles field which you can view by opening the subscription. Only users or groups that belong to the role listed within the subscription will receive a notification for an event matched by the subscription. + +Default subscriptions only send targeted notifications. That is, recipient will always be somehow associated with the event that triggered the notification. For example, the default subscription for work item updates only sends an email notification to the person assigned to the work item. + +## Out-of-the-box (OOB) or default subscriptions + +The following events generate a notification to all subscribers by default. To unsubscribe from any one notification, see [Unsubscribe from a notification](unsubscribe-default-notification.md). + +Within the personal notifications page, OOB subscriptions appear with the following image: ![OOB notification](_img/oob-notification.png). + + +| Category | Type| Build| Description +|-----------------------|-------------------|---------------------|----------------| +| Build |Build completed |Build completes |Notifies you when a build you queued or that was queued for you completes| +| Code (Git)| Pull request | Pull request reviewers added or removed | Notifies you when you are added to a pull request or when a user is added or removed from a pull request you created| +| Code (Git)| Pull request| Pull request completion failures | Notifies you when a pull request you created fails to complete | +| Code (Git)| Pull request| Pull request changes | Notifies you when changes are made to a pull request you created or are a reviewer for | +| Code (Git)| Pull request comment| A comment is left on a pull request | Notifies you about comments made to a pull request you created or a discussion you are involved in | +| Code (TFVC)| Code review | A code review I am working on changes | Notifies you when a change is made to a code review you're assigned to| +| Extension management| Extension| Extensions have been modified. | Extensions have been modified. | +| Extension management| Extension request (batch) | Extensions are requested or requests are updated. | Extensions are requested or requests are updated. | +| Release| Deployment pending | Manual intervention pending | Notifies you when a manual intervention is pending on you | +| Release| Deployment completed | Deployment to an owned environment failed | Notifies you when a deployment to an environment you own fails to complete successfully | +| Release| Deployment completed | Deployment to an approved environment failed | Notifies you when a deployment you approved fails to complete successfully | +| Release| Deployment completed| Deployment completion failures | Notifies you when a deployment you requested fails to complete successfully | +| Release| Release approval pending| Deployment approval pending| Notifies you when an approval for a deployment is pending on you | +| Work| Work item| A work item is moved from this team project | Notifies you when the area path for a work item is moved to another team project | +| Work | Work item | A work item assigned | Notifies you when you are assigned or unassigned a work item | + + +## Supported subscriptions + +You can create subscriptions using the following templates for yourself, a team, or a group. Within the subscription dialog you can specify additional fields based on the category. To learn more, see [Manage personal notifications](manage-personal-notifications.md). + +| Category | Template | +|-----------------------|-------------------| +|Build | A build completes | +|Build | A build fails | +|Build | A build controller or agent's status changes | +|Build | A build's quality changes | +|Code (Git)| A commit authored by me is pushed | +|Code (Git)| A commit is pushed by me | +|Code (Git)| A commit is pushed | +|Code (Git)| A pull request is created or updated | +|Code (TFVC)| Code is checked in | +|Code (TFVC)| Code is checked in with a policy override | +|Code (TFVC)| A filewith a specific extension is checked in | +|Code (TFVC)| A file under a specific path is checked in | +|Code (TFVC)| A code review I am working on changes | +|Work | A work item I created is changed | +|Work | A work item assigned to me is changed | +|Work | A work item is changed | +|Work | A work item is assigned to me | +|Work | A work item is deleted | +|Work | A work item is restored | +|Extension management | An extension is modified | +|Release | An approval for a deployment is pending | +|Release | A deployment is completed | +|Release | A manual intervention for a deployment is pending | + + +## Related notes + +- [About notifications](about-notifications.md) +- [Manage personal notifications](/vsts/collaborate/manage-team-notifications?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json) +- [Unsubscribe from a notification](unsubscribe-default-notification.md) + + + + + + diff --git a/docs/notifications/toc.yml b/docs/notifications/toc.yml new file mode 100644 index 00000000000..4eb971ccf1b --- /dev/null +++ b/docs/notifications/toc.yml @@ -0,0 +1,57 @@ +- name: Notifications + href: index.md +- name: Overview + items: + - name: About notifications + href: about-notifications.md +- name: Quickstarts + items: + - name: Unsubscribe from a notification + href: unsubscribe-default-notification.md + - name: Change your preferred email address + href: change-email-address.md +- name: Tutorials + items: + - name: "Follow work & pull requests" + href: /vsts/collaborate/follow-work-items?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json + - name: Set your personal notifications + href: manage-personal-notifications.md +- name: How-to Guides + items: + - name: "Use @mentions to further discussion" + href: at-mentions.md + - name: "Use #ID to link to work items" + href: add-links-to-work-items.md + - name: Manage team notifications + href: /vsts/collaborate/manage-team-notifications?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json + - name: Get notified with Campfire + href: ../service-hooks/services/campfire.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json + - name: Get notified with Flowdock + href: ../service-hooks/services/flowdock.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json + - name: Get notified with Hipchat + href: ../service-hooks/services/hipchat.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json + - name: Get notified with Slack + href: ../service-hooks/services/slack.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json + - name: Set alerts (TFS) + href: ../work/track/alerts-and-notifications.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json + - name: Collaborate in a team room + href: ../collaborate/collaborate-in-a-team-room.md?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json +- name: Reference + items: + - name: Default notifications + href: oob-built-in-notifications.md + - name: FAQs + href: faq-notifications.md +- name: Resources + items: + - name: Git + href: ../git/index.md + - name: Work items + href: ../work/work-items/index.md + - name: Microsoft Teams Integration + href: https://marketplace.visualstudio.com/items?itemname=ms-vsts.vss-services-teams + - name: Service Hooks + href: ../service-hooks/index.md + - name: REST API + href: https://www.visualstudio.com/en-us/docs/integrate/api/notification/subscriptions + diff --git a/docs/notifications/unsubscribe-default-notification.md b/docs/notifications/unsubscribe-default-notification.md new file mode 100644 index 00000000000..c92e91b60a3 --- /dev/null +++ b/docs/notifications/unsubscribe-default-notification.md @@ -0,0 +1,42 @@ +--- +title: Unsubscribe from a default notification +description: Understand how notifications or alerts are managed in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: collaborate +ms.assetid: +ms.topic: get-started-article +ms.manager: douge +ms.author: kaelli +ms.date: 09/01/2017 +--- + + + +# Unsubscribe from a notification + +**VSTS | TFS 2018 | TFS 2017.1** + +If you want to stop receiving select email notifications, you can do so by unsubscribing from them. For a description of each default subscription, see [Default notifications](oob-built-in-notifications.md) + +You start by opening your personal notification settings. If you don't have a team project yet, create one in [VSTS](../accounts/set-up-vs.md). + +1. From the web portal, click the icon with your initials or picture icon, and select **Notification settings** from the drop-down menu. + + Open personal notification settings  + + Those notifications you're subscribed to are indicated with the the State as **On**. + + Personal notification subscriptions  + + The following image indicates a subscription is a default or Out-of-the-box (OOB) subscription: + + ![OOB notification](_img/oob-notification.png) + + You can't modify an OOB subscription, but you can view its definition from its context menu. + +2. To unsubscribe, slide the State **On/Off** indicator to the Off position. + + For example, here we turn off the Build completes subscription. + + Unsubscribe from Build completes subscription  + diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 00000000000..749ae7c33aa --- /dev/null +++ b/docs/overview.md @@ -0,0 +1,220 @@ +--- +title: Team Services & TFS documentation +layout: HubPage +description: Get started page for VSTS and Team Foundation Server (TFS) Documentation +ms.assetid: F15A468A-E869-4DB6-AED5-5EB2E39D6E3A +breadcrumb_path: "/docs/abc/toc.json" +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.manager: douge +ms.author: douge +ms.date: 08/04/2016 +--- + +
        +

        VSTS and TFS

        +
        +
        + Continuous Integration and Delivery +
        +
        +
        +
        +
        + Build & Release +
        + Implement continuous integration and continuous deployment + to reliably deliver quality apps to your customers. +
        +
        +
        +
        +
        + Deploy to Azure +
        + Release apps to Azure services and Azure virtual machines. +
        +
        +
        +
        +
        + HockeyApp +
        + Distribute test releases for your mobile apps. Monitor usage and crashes. +
        +
        +
        +
        + +
        +
        +
        + Package +
        + Publish, discover, and install shared binary code that integrates with Team Build. +
        +
        +
        +
        +
        + Test +
        + Test continuously while you code, build, and deploy before releasing to production. +
        +
        +
        +
        +
        + Application Insights +
        + Monitor performance and usage for your live web apps. +
        +
        +
        +
        +
        + +
        +
        + Code +
        +
        +
        +
        +
        + Git +
        + Develop code with distributed, flexible version control. +
        +
        +
        +
        +
        + TFVC +
        + Manage code with centralized, conventional version control. +
        +
        +
        +
        +
        + Collaborate +
        + Work across hubs and team projects, share information, and manage notifications. +
        +
        +
        +
        +
        + +
        +
        + Work +
        +
        +
        +
        +
        + Agile +
        + Plan and track user stories, requirements, bugs, and more using your chosen Agile method. +
        +
        +
        +
        +
        + Queries +
        + Find work items to bulk update and to chart progress and trends. +
        +
        +
        +
        +
        + Customization +
        + Configure Agile tools and processes to meet your team's needs. +
        +
        +
        +
        + +
        +
        +
        + Dashboards +
        + Show status, monitor progress, and share information with customizable web views. +
        +
        +
        +
        +
        + Power BI +
        + Mine data to create cross-project dashboards and reports. +
        +
        +
        +
        +
        + +
        +
        + Integrate +
        +
        +
        +
        +
        + Marketplace +
        + Find extensions and integrations to expand your devops environment. +
        +
        +
        +
        +
        + Extensions +
        + Develop, package, and publish extensions and integrations. +
        +
        +
        +
        +
        + REST APIs +
        + Develop your own tools and integrations using REST APIs. +
        +
        +
        +
        + + + +
        +
        +
        + Set up and Admin +
        +
        +
        +
        +
        + Team Services +
        + Set up your Team Services account in the cloud. Manage account access, billing, and purchases. +
        +
        +
        +
        +
        + Team Foundation Server +
        + Install, upgrade, and administer on-premises TFS. +
        +
        +
        +
        +
        diff --git a/docs/package/_img/back-to-marketplace.png b/docs/package/_img/back-to-marketplace.png new file mode 100644 index 00000000000..3b45a2b4115 Binary files /dev/null and b/docs/package/_img/back-to-marketplace.png differ diff --git a/docs/package/_img/browse-marketplace.PNG b/docs/package/_img/browse-marketplace.PNG new file mode 100644 index 00000000000..8b456dc02b1 Binary files /dev/null and b/docs/package/_img/browse-marketplace.PNG differ diff --git a/docs/package/_img/buy-license.png b/docs/package/_img/buy-license.png new file mode 100644 index 00000000000..6741b0852ad Binary files /dev/null and b/docs/package/_img/buy-license.png differ diff --git a/docs/package/_img/index/npm-and-continuous-delivery.png b/docs/package/_img/index/npm-and-continuous-delivery.png new file mode 100644 index 00000000000..f6571e43b58 Binary files /dev/null and b/docs/package/_img/index/npm-and-continuous-delivery.png differ diff --git a/docs/package/_img/index/package-management-101.png b/docs/package/_img/index/package-management-101.png new file mode 100644 index 00000000000..3e36f7777d0 Binary files /dev/null and b/docs/package/_img/index/package-management-101.png differ diff --git a/docs/package/_img/index/zen-of-package-management.png b/docs/package/_img/index/zen-of-package-management.png new file mode 100644 index 00000000000..e192ed31114 Binary files /dev/null and b/docs/package/_img/index/zen-of-package-management.png differ diff --git a/docs/package/_img/install.png b/docs/package/_img/install.png new file mode 100644 index 00000000000..c5050c879eb Binary files /dev/null and b/docs/package/_img/install.png differ diff --git a/docs/package/_img/marketplace.png b/docs/package/_img/marketplace.png new file mode 100644 index 00000000000..9b4282a57ff Binary files /dev/null and b/docs/package/_img/marketplace.png differ diff --git a/docs/package/_img/mavenauthtoken.png b/docs/package/_img/mavenauthtoken.png new file mode 100644 index 00000000000..fff61b79d04 Binary files /dev/null and b/docs/package/_img/mavenauthtoken.png differ diff --git a/docs/package/_img/package-hub.png b/docs/package/_img/package-hub.png new file mode 100644 index 00000000000..99029825446 Binary files /dev/null and b/docs/package/_img/package-hub.png differ diff --git a/docs/package/_img/select-users.png b/docs/package/_img/select-users.png new file mode 100644 index 00000000000..d679757d532 Binary files /dev/null and b/docs/package/_img/select-users.png differ diff --git a/docs/package/_img/users-hub-tfs.png b/docs/package/_img/users-hub-tfs.png new file mode 100644 index 00000000000..478881aa8e0 Binary files /dev/null and b/docs/package/_img/users-hub-tfs.png differ diff --git a/docs/package/_img/users-hub.png b/docs/package/_img/users-hub.png new file mode 100644 index 00000000000..35fb309549f Binary files /dev/null and b/docs/package/_img/users-hub.png differ diff --git a/docs/package/_shared/_img/bo-package-push.png b/docs/package/_shared/_img/bo-package-push.png new file mode 100644 index 00000000000..c62ce8d11a4 Binary files /dev/null and b/docs/package/_shared/_img/bo-package-push.png differ diff --git a/docs/package/_shared/_img/bo-package-push.svg b/docs/package/_shared/_img/bo-package-push.svg new file mode 100644 index 00000000000..8078394d009 --- /dev/null +++ b/docs/package/_shared/_img/bo-package-push.svg @@ -0,0 +1 @@ +Feed Day 0 Illustration for svg with package_wNPM \ No newline at end of file diff --git a/docs/package/_shared/_img/connect-to-feed-npm-tfs.png b/docs/package/_shared/_img/connect-to-feed-npm-tfs.png new file mode 100644 index 00000000000..7007197d414 Binary files /dev/null and b/docs/package/_shared/_img/connect-to-feed-npm-tfs.png differ diff --git a/docs/package/_shared/_img/connect-to-feed-npm.png b/docs/package/_shared/_img/connect-to-feed-npm.png new file mode 100644 index 00000000000..0abfba9d04d Binary files /dev/null and b/docs/package/_shared/_img/connect-to-feed-npm.png differ diff --git a/docs/package/_shared/_img/connect-to-feed.png b/docs/package/_shared/_img/connect-to-feed.png new file mode 100644 index 00000000000..c7917702b3d Binary files /dev/null and b/docs/package/_shared/_img/connect-to-feed.png differ diff --git a/docs/package/_shared/_img/editfeed.png b/docs/package/_shared/_img/editfeed.png new file mode 100644 index 00000000000..e70010d43c2 Binary files /dev/null and b/docs/package/_shared/_img/editfeed.png differ diff --git a/docs/package/_shared/_img/goto-feed-hub.png b/docs/package/_shared/_img/goto-feed-hub.png new file mode 100644 index 00000000000..bb8b2024f27 Binary files /dev/null and b/docs/package/_shared/_img/goto-feed-hub.png differ diff --git a/docs/package/_shared/_img/new-feed-button.png b/docs/package/_shared/_img/new-feed-button.png new file mode 100644 index 00000000000..f044683bba0 Binary files /dev/null and b/docs/package/_shared/_img/new-feed-button.png differ diff --git a/docs/package/_shared/_img/new-feed-dialog.png b/docs/package/_shared/_img/new-feed-dialog.png new file mode 100644 index 00000000000..fba0a70c3e4 Binary files /dev/null and b/docs/package/_shared/_img/new-feed-dialog.png differ diff --git a/docs/package/_shared/_img/nuget-consume-url.png b/docs/package/_shared/_img/nuget-consume-url.png new file mode 100644 index 00000000000..5d18e7d5676 Binary files /dev/null and b/docs/package/_shared/_img/nuget-consume-url.png differ diff --git a/docs/package/_shared/_img/nugeturl.png b/docs/package/_shared/_img/nugeturl.png new file mode 100644 index 00000000000..c7f6fa994eb Binary files /dev/null and b/docs/package/_shared/_img/nugeturl.png differ diff --git a/docs/package/_shared/_img/select-pkg-src.png b/docs/package/_shared/_img/select-pkg-src.png new file mode 100644 index 00000000000..36ec0e153b8 Binary files /dev/null and b/docs/package/_shared/_img/select-pkg-src.png differ diff --git a/docs/package/_shared/_img/vs-addsource.png b/docs/package/_shared/_img/vs-addsource.png new file mode 100644 index 00000000000..c351ef462c5 Binary files /dev/null and b/docs/package/_shared/_img/vs-addsource.png differ diff --git a/docs/package/_shared/_img/vs-mac-settings.png b/docs/package/_shared/_img/vs-mac-settings.png new file mode 100644 index 00000000000..a742856a119 Binary files /dev/null and b/docs/package/_shared/_img/vs-mac-settings.png differ diff --git a/docs/package/_shared/availability-maven.md b/docs/package/_shared/availability-maven.md new file mode 100644 index 00000000000..10701d77f8f --- /dev/null +++ b/docs/package/_shared/availability-maven.md @@ -0,0 +1,2 @@ +> [!NOTE] +> Support for Maven packages is available with Package Management in **Visual Studio Team Services** and **TFS 2018 and newer**. \ No newline at end of file diff --git a/docs/package/_shared/availability-npm.md b/docs/package/_shared/availability-npm.md new file mode 100644 index 00000000000..595e0f31d20 --- /dev/null +++ b/docs/package/_shared/availability-npm.md @@ -0,0 +1,2 @@ +> [!NOTE] +> Support for npm packages is available with Package Management in **Visual Studio Team Services** and **TFS 2017 Update 1 and newer**. \ No newline at end of file diff --git a/docs/package/_shared/availability-nuget.md b/docs/package/_shared/availability-nuget.md new file mode 100644 index 00000000000..325eed4a3ba --- /dev/null +++ b/docs/package/_shared/availability-nuget.md @@ -0,0 +1,2 @@ +> [!NOTE] +> Support for NuGet packages is available with Package Management in **Visual Studio Team Services** and **TFS 2017 and newer**. \ No newline at end of file diff --git a/docs/package/_shared/consume.md b/docs/package/_shared/consume.md new file mode 100644 index 00000000000..89c5420dda0 --- /dev/null +++ b/docs/package/_shared/consume.md @@ -0,0 +1,51 @@ +To consume NuGet packages from a feed, add the feed's NuGet endpoint as a package source in Visual Studio. + +[!INCLUDE [Package Management and Visual Studio 2015](../_shared/vs2015.md)] + + + +### Get your feed's NuGet package source URL + +[!INCLUDE [get a NuGet URL](../_shared/nuget-consume-endpoint.md)] + +### Windows: Add the feed to your NuGet configuration + +1. On the **Tools** menu, select **Options...**. +1. Expand **NuGet Package Manager** and select **Package Sources**. +1. Click the **green plus** in the upper right corner. +1. At the bottom of the dialog, enter the feed's name and the URL you got in the last step. +1. Select *Update* and then *OK*. + +![Add new NuGet source](_img/vs-addsource.png) + +Then [click here to continue](#consume-packages). + + +### Mac: Add the feed to your NuGet configuration + +1. Get a [Personal Access Token](../../accounts/use-personal-access-tokens-to-authenticate.md) (PAT) and make a note of it. +1. Open the Preferences dialog from the **Visual Studio** menu in the menu bar. +1. Select **NuGet** -> **Sources**. +1. Click **Add** then enter your feed's name, URL, any username, and your PAT as the password. +1. Click **OK**, then **OK** again. + +![Visual Studio for Mac preferences window with VSTS feed added](_img/vs-mac-settings.png) + + +### Consume packages + +You can now discover and use packages in this feed. To add a package reference to a project: + +1. Find your project in Solution Explorer. +1. Right-click **References**. +1. Select **Manage NuGet Packages...**. +1. In the **Package source** dropdown, select your feed. +1. Look for your package in the list. + +![Select feed source](_img/select-pkg-src.png) + +### Using Visual Studio 2015 or earlier? +You may need to [download and install](https://dist.nuget.org/) the latest NuGet Package Manager extension. + +### Using Visual Studio 2013 or earlier? +You'll need to get a [Personal Access Token](../../accounts/use-personal-access-tokens-to-authenticate.md). When you're prompted for a username and password, use any username and your PAT as the password. \ No newline at end of file diff --git a/docs/package/_shared/create-feed.md b/docs/package/_shared/create-feed.md new file mode 100644 index 00000000000..442184c404d --- /dev/null +++ b/docs/package/_shared/create-feed.md @@ -0,0 +1,23 @@ +A feed is a container for packages. +You consume and publish packages through a particular feed. + +To get started, navigate to the **Package** hub in the **Build & Release** hub group: + +![Go to Package hub](_img/goto-feed-hub.png) + +_If you don't see the Package hub, then ask your account owner to install the [Package Management extension](https://marketplace.visualstudio.com/items?itemName=ms.feed) from the [Visual Studio Marketplace](../../marketplace/install-vsts-extension.md)._ + +Click the dropdown in the top left and select **New feed**: + +![New feed button](_img/new-feed-button.png) + +In the dialog: +- Give the feed a name and a description (optional). +- Choose who can read and contribute (or update) packages in your feed. +The default selections give Team Build access so that +continuous integration builds can add and update packages. +- When you're done, choose **Create**. + +![New feed dialog](_img/new-feed-dialog.png) + +You can change these settings later by [editing the feed](../feeds/edit-feed.md). diff --git a/docs/package/_shared/edit-feed.md b/docs/package/_shared/edit-feed.md new file mode 100644 index 00000000000..c29f8ce8522 --- /dev/null +++ b/docs/package/_shared/edit-feed.md @@ -0,0 +1,3 @@ +With your feed selected, select **Edit feed** (the gear icon). + +![Edit feed button](_img/editfeed.png) \ No newline at end of file diff --git a/docs/package/_shared/generate-pat.md b/docs/package/_shared/generate-pat.md new file mode 100644 index 00000000000..abe4150c750 --- /dev/null +++ b/docs/package/_shared/generate-pat.md @@ -0,0 +1,3 @@ +Generate a Personal Access Token (PAT) using the instructions [here](../../accounts/use-personal-access-tokens-to-authenticate.md). Scope your PAT to the account(s) you want to access and to one of the following scopes: *Packaging (read)*, *Packaging (read and write)*, or *Packaging (read, write, and manage).* + +> We strongly recommend **not checking your PAT into source control**; anyone with access to your PAT can interact with Team Services as you. diff --git a/docs/package/_shared/maven/install.md b/docs/package/_shared/maven/install.md new file mode 100644 index 00000000000..61a2302b295 --- /dev/null +++ b/docs/package/_shared/maven/install.md @@ -0,0 +1,18 @@ +Install Maven packages from your feed using the Maven client. + +The most common way to install a Maven package is as a dependency of another package. + +1. Create a Maven package using the following command: +```no-highlight +mvn -B archetype:generate -DarchetypeGroupId="org.apache.maven.archetypes" -DgroupId="MyGroup" -DartifactId="mySecondApp" +``` + +2. From the **connect to feed** dialog in Team Services, copy the `` information. Paste it into your `pom.xml` twice: (See example below) + * Between the `` tags. + * Between the `` tags. +
        +3. In Team Services, go to the package you want to install, and copy the `` XML. +4. Paste the `` information inside the `` tag of your `POM.xml`. +5. Run `mvn install` from the directory containing your `POM.xml`. + +See the [Maven CLI docs](http://maven.apache.org/plugins/maven-install-plugin/usage.html) for more install options. \ No newline at end of file diff --git a/docs/package/_shared/maven/pom-and-settings.md b/docs/package/_shared/maven/pom-and-settings.md new file mode 100644 index 00000000000..665cab34ccf --- /dev/null +++ b/docs/package/_shared/maven/pom-and-settings.md @@ -0,0 +1,32 @@ +In order to talk to VSTS feeds, you'll need to put a token on your local machine that Maven can pick up and pass to VSTS. + +1. Navigate to the feed that you'd like to use and select **Connect to feed**.

        +![Connect to feed button in the upper-right of the page](../_img/connect-to-feed.png)

        +2. Open the **Maven** tab, click *Generate Maven credentials*, and copy the generated credentials. (images below)

        +3. Maven pulls credentials from your `settings.xml` file: + * The `settings.xml` file's path is `"${user.home}/.m2/settings.xml"` for Linux and `"%USERPROFILE%/.m2/settings.xml"` for Windows. If the file doesn't exist, create one now.

        +4. Beneath the `` and `` tags in the file, paste the credentials you copied in **Step 3** above. + +**Sample settings.xml:** + +```xml + +   +     +      yourAccount-visualstudio.com-yourFeedName +       +         +           +            Authorization +             +            Basic Y2Fqb… +           +         +       +     +   + +``` + +>**NOTE:** You can find more info on the `settings.xml` file in the +>[settings.xml reference](https://maven.apache.org/settings.html). \ No newline at end of file diff --git a/docs/package/_shared/maven/publish.md b/docs/package/_shared/maven/publish.md new file mode 100644 index 00000000000..7392b3a9492 --- /dev/null +++ b/docs/package/_shared/maven/publish.md @@ -0,0 +1,68 @@ +Publish Maven packages to a feed in Package Management to share them with your team and your organization. + +In order to publish a Maven package, you'll need to have a Maven package to publish on your local box. +If you don't have one, you can generate one by running the following command: + +```no-highlight +mvn -B archetype:generate -DarchetypeGroupId="org.apache.maven.archetypes" -DgroupId="MyGroup" -DartifactId="myFirstApp" +``` +
        +1. [Set up the Maven client with your feed](../../maven/pom-and-settings.md). +
        +2. Navigate to the directory containing your Maven package's `pom.xml`. If you've just created an artifact, the `pom.xml` will be in the *myFirstApp* folder. +
        +3. From the **connect to feed** dialog in Team Services, copy the `` information. Paste it into your `pom.xml` twice: (See example above) + * Between the `` tags. + * Between the `` tags. +
        +4. From the directory with your `pom.xml`, run the command mvn deploy. The Maven package should show up in your feed. + +**Sample `pom.xml`:** + +```xml + + +   4.0.0 +   MyGroup +   myFirstApp +   jar +   1.0-SNAPSHOT +   myFirstApp +   http://maven.apache.org +    +       +         junit +         junit +         3.8.1 +         test +       +    +    +       +         mseng-visualstudio.com-zcalvinmaven +         https://mseng.pkgs.visualstudio.com/_packaging/zCalvinMaven2/maven/v1 +          +            true +          +          +            true +          +       +    +    +       +         mseng-visualstudio.com-zcalvinmaven +         https://mseng.pkgs.visualstudio.com/_packaging/zCalvinMaven2/maven/v1 +          +            true +          +          +            true +          +       +    + +``` + +
        +See the [Maven CLI docs](http://maven.apache.org/plugins/maven-deploy-plugin/) for more publish options. \ No newline at end of file diff --git a/docs/package/_shared/npm/install.md b/docs/package/_shared/npm/install.md new file mode 100644 index 00000000000..d7df95721a1 --- /dev/null +++ b/docs/package/_shared/npm/install.md @@ -0,0 +1,7 @@ +Install npm packages from your feed, and also from npmjs.com if you've configured [upstream sources](../../npm/upstream-sources.md), using the npm client. + +1. [Set up the npm client with your feed](../../npm/npmrc.md). +2. Open a shell and navigate to the directory that contains your project's `package.json`. +3. Install a package by running `npm install --save `. + +See the [npm CLI docs](https://docs.npmjs.com/cli/install) for more install options. diff --git a/docs/package/_shared/npm/npmrc.md b/docs/package/_shared/npm/npmrc.md new file mode 100644 index 00000000000..ad471cd5706 --- /dev/null +++ b/docs/package/_shared/npm/npmrc.md @@ -0,0 +1,12 @@ +1. Navigate to your feed. If you haven't created a feed, [create one now](../../feeds/create-feed.md). +2. Select **Connect to feed**. +3. Select **npm**. +4. Follow the steps on the screen. + +![Connect to feed button in the upper-right of the page](../_img/connect-to-feed.png) + +### Team Services +![npm configuration in the Connect to feed dialog](../_img/connect-to-feed-npm.png) + +### Team Foundation Server +![npm configuration in the Connect to feed dialog](../_img/connect-to-feed-npm-tfs.png) diff --git a/docs/package/_shared/npm/publish.md b/docs/package/_shared/npm/publish.md new file mode 100644 index 00000000000..7395b273bcf --- /dev/null +++ b/docs/package/_shared/npm/publish.md @@ -0,0 +1,8 @@ +Publish npm packages to a feed in Package Management to share them with your team and your organization. + +1. [Set up the npm client with your feed](../../npm/npmrc.md). +2. Open a shell and navigate to the directory that contains your package's `package.json`. +If you don't have a `package.json`, run `npm init` ([see the npm CLI docs](https://docs.npmjs.com/cli/init)). +3. Push your package by running `npm publish`. + +See the [npm CLI docs](https://docs.npmjs.com/cli/publish) for more publish options. diff --git a/docs/package/_shared/nuget-3x.md b/docs/package/_shared/nuget-3x.md new file mode 100644 index 00000000000..c5e9fdfdbd2 --- /dev/null +++ b/docs/package/_shared/nuget-3x.md @@ -0,0 +1,2 @@ +> [!NOTE] +> The Package Management service recommends NuGet 3.5 or later. However, Package Management also supports legacy NuGet 2.x clients. For a complete list of the latest clients, see the [NuGet distribution page](http://dist.nuget.org/index.html). \ No newline at end of file diff --git a/docs/package/_shared/nuget-bootstrap.md b/docs/package/_shared/nuget-bootstrap.md new file mode 100644 index 00000000000..1522cfe583d --- /dev/null +++ b/docs/package/_shared/nuget-bootstrap.md @@ -0,0 +1,11 @@ +* Open a PowerShell prompt and `cd` to the root directory of your app's code. +* Get a copy of nuget.exe to use temporarily. The PowerShell command `Invoke-WebRequest https://dist.nuget.org/win-x86-commandline/latest/nuget.exe -OutFile nuget.exe` makes this easy. +* In the PowerShell window, run the command `.\nuget.exe install -OutputDirectory packages Microsoft.VisualStudio.Services.NuGet.Bootstrap` to fetch the bootstrapping tools. +* Run `.\packages\Microsoft.VisualStudio.Services.NuGet.Bootstrap.*\tools\Bootstrap.ps1` to initialize your environment. + * This will create a `nuget.config` in the root of your repo, where you can specify the feeds you want NuGet to use. + * It will also create an `init` script which developers and build agents run each time they want to work with this repo. `init` ensures you always have the latest VSTS NuGet tools and also sets up authentication to VSTS-hosted feeds. +* Delete the copy of nuget.exe you downloaded earlier: `rm .\nuget.exe` + * Going forward, this repo will rely on a copy of nuget.exe installed by the bootstrapping tools. +* Update your .gitignore/.tfignore file to exclude `.tools/` and `packages/`. +* Update `nuget.config` to list the feeds used by your app. +* Check in the changes to your repo. \ No newline at end of file diff --git a/docs/package/_shared/nuget-consume-endpoint.md b/docs/package/_shared/nuget-consume-endpoint.md new file mode 100644 index 00000000000..063bb0b9281 --- /dev/null +++ b/docs/package/_shared/nuget-consume-endpoint.md @@ -0,0 +1,8 @@ +Navigate to your feed ([or create a feed if you haven't](..\feeds\create-feed.md)). +Then, select **Connect to feed**: + +![Connect to feed button in the upper-right of the page](_img/connect-to-feed.png) + +Next, copy the NuGet package source URL: + +![NuGet Package source URL in the Connect to feed dialog](_img/nuget-consume-url.png) \ No newline at end of file diff --git a/docs/package/_shared/nuget-publish-endpoint.md b/docs/package/_shared/nuget-publish-endpoint.md new file mode 100644 index 00000000000..a830615a2a8 --- /dev/null +++ b/docs/package/_shared/nuget-publish-endpoint.md @@ -0,0 +1,8 @@ +Navigate to your feed ([or create a feed if you haven't](..\feeds\create-feed.md)). +Then, select **Connect to feed**: + +![Connect to feed button in the upper-right of the page](_img/connect-to-feed.png) + +Next, follow steps 1 and 2 to get the tools and add the feed to your local NuGet configuration. + +![NuGet publish instructions in the Connect to feed dialog](_img/nugeturl.png) \ No newline at end of file diff --git a/docs/package/_shared/publish.md b/docs/package/_shared/publish.md new file mode 100644 index 00000000000..062a533aff4 --- /dev/null +++ b/docs/package/_shared/publish.md @@ -0,0 +1,25 @@ +Publish NuGet packages to a feed in Package Management to share them with your team and your organization. + +First, get the tools and your feed URL: + +[!INCLUDE [](../_shared/nuget-publish-endpoint.md)] + +Then, use the push command in step 3 above. You can also manually construct a push command as follows: + +```no-highlight +nuget.exe push -Source {NuGet package source URL} -ApiKey key {your_package}.nupkg` +``` + +Notes: +1. The NuGet client's push command requires an API key. You can use any non-empty string you want; in this example, we used `key`. +2. If you're prompted for credentials in the command line, ensure that the credential provider downloaded is in the same folder as NuGet.exe. For more help using credential providers with NuGet, see [here](https://docs.microsoft.com/en-us/nuget/api/nuget-exe-credential-providers). + +## Get a sample package to push + +If you don't have a package but want to try this out, Microsoft provides a sample package on the public NuGet gallery. +Run these two commands: + +```no-highlight +nuget.exe install VSTS-HelloWorld -ExcludeVersion +nuget.exe push -Source {NuGet package source URL} -ApiKey key VSTS-HelloWorld\VSTS-HelloWorld.nupkg +``` diff --git a/docs/package/_shared/vs2015.md b/docs/package/_shared/vs2015.md new file mode 100644 index 00000000000..85541215c96 --- /dev/null +++ b/docs/package/_shared/vs2015.md @@ -0,0 +1,4 @@ +> [!NOTE] +> Package Management feeds work seamlessly with the [NuGet Package Manager for Visual Studio 2015](https://dist.nuget.org/visualstudio-2015-vsix/latest/NuGet.Tools.vsix) extension as of Visual Studio 2015 Update 1. +> If you haven't installed Update 1 or later, you can update to the latest version of the [NuGet Package Manager extension](https://dist.nuget.org/visualstudio-2015-vsix/latest/NuGet.Tools.vsix) directly. +> Using Visual Studio for Mac? See [this guidance](../nuget/consume.md#mac-os). \ No newline at end of file diff --git a/docs/package/collaborate-with-packages.md b/docs/package/collaborate-with-packages.md new file mode 100644 index 00000000000..3acf6ab909b --- /dev/null +++ b/docs/package/collaborate-with-packages.md @@ -0,0 +1,86 @@ +--- +title: Collaborate more and build faster with packages +description: Componentize a large codebase with source and package composition using Package Management in VSTS or Team Foundation Server +ms.assetid: EA33E340-EC9A-4F75-A201-82CE9685662B +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/29/2016 +ms.topic: get-started-article +--- + +# Collaborate more and build faster with packages + +**Team Services | TFS 2017** + +*If you're familiar with componentization and composition, you can learn more about [Package Management in Team Services and TFS](overview.md).* + +Your product is successful, your organization is growing, and it’s time to scale up your codebase to match. As you scale out past 2-3 teams working in a single codebase on a single product, you may find yourself asking questions like: +- How do my teams effectively share reusable components? +- How do I enable my feature teams to iterate rapidly without stepping on other teams’ work? +- How do I give my teams autonomy to iterate at the pace that’s right for them? + +These questions aren’t just applicable to newly growing teams. +If you’re an established team with a legacy codebase, you may be asking these same questions as you’re being asked to deliver more value, ever faster. Regardless of your situation, componentization can help you build a codebase that scales to the size of your team and the speed of today’s development. + +In this article, we'll explore how binary composition through package management can help you manage and share your external dependencies, your OSS, and your isolated shared components. + +## Components and composition + +Componentization is the act of separating and structuring of your product into a set of *components*: discrete parts of your codebase that provide a set of features. Most .NET projects already have some notion of components in the form of the projects in your solution. For example, a simple website might have a front-end component, a data access component, and a model/data storage component. + +## Source componentization + +As your product grows, the solution + project model can become inefficient. +Changes take longer to integrate and are harder to merge, the build gets slower, and in some cases Visual Studio becomes slower. +And, *components* start to grow from a single project to multiple projects. +Generally, this is the point at which teams start breaking out these sets of related projects into separate solutions. + +Once you've outgrown a single solution, how you componentize becomes an interesting question. +We started with *source composition*, where each component is referenced via a project reference in Visual Studio. +Source composition is possible as long as your source lives in a single composition boundary: a single solution within a single source repository. + +Unfortunately, these project references start to break down when multiple solutions are involved. +At this point, when solution A depends on solution B it must refer to the built binaries (i.e. DLLs) produced by solution B – this is binary composition. + +Accordingly, these binaries now need to be built and made available to A before A can build successfully. There are a few ways to do that: + +- You can check them into source control. +Depending on your source control system, binaries can quickly balloon the size of your repo, slowing check-out times and general repo performance. +If you start to work in branches, multiple teams can end up introducing the same binary at different versions, creating nasty merge conflicts at the root of the tree. +- You can put them on a file share somewhere. +File shares have a few limitations: there’s no index for quick lookups, and there’s no protection against overwriting a version later. + +## Package componentization + +Packages address many of the challenges of referencing binaries. Instead of checking them into source, you can have a solution *B* produce its binaries into NuGet packages that another solution *A* can then consume. If solution A and solution B are maintained as separate components, where simultaneous changes across A and B are rare, package composition is a great way to manage the dependency of A on B. Package composition allows B to iterate on its own cadence, while A is free to take updates to B when A’s schedule permits, and it allows multiple teams to iterate and provide updates to B without affecting A (or other solutions *C* or *D*). + +Package composition isn’t without its challenges though. Thus far, we’ve looked at a simple example. However, scaling package composition up to the size of a large codebase (something like Windows or Bing) can cause a series of challenges: + +- Understanding the impact of breaking changes in a component low in the dependency graph becomes very challenging +- *Diamond dependencies* can become a significant roadblock to agility. +In a diamond dependency, components B and C both depend on a shared component A, and D depends on B and C. +A releases a new version with breaking changes. +If B updates, but C does not, D cannot take B’s updates without introducing a dependency conflict. +In this simple example, a conversation with C may be all that’s needed to resolve the conflict. +However, in a complex graph, diamonds can quickly become unresolvable. +- If changes must be made across two components that are composed with packages, the dev inner loop is much slower. When A is updated, it must be re-built, re-packaged, and re-published. +B must then update to the newly-published version to validate A's change. +Source composition, which can build A and B simultaneously, will always provide a faster inner loop for developers. + +## What should you use + +In general, we’ve seen large teams be most successful when they use a mixture of composition strategies. +To help determine what’s right for your codebase, first draw your product’s dependency graph and start to group your components into sets of related components. +For example, you may have a set of components that make up your framework, including common controls, etc., and a set of components that make up your user-facing service. +Then, for each set of related components, ask these questions: +- Will my teams often make spanning check-ins across the sets I’ve created? +- Is a single team responsible for the entire set? +- For a single set, is there a shared release cadence? + +At a high level, we’ve found the most success when source composition is used for related projects that are worked on by a single team (or a group of related teams) and binary composition is used for OSS, externals (components from faraway or isolated teams), and isolated shared components. + +## Jump in + +If you're ready to get started with package componentization, check out the [Package Management overview](overview.md). \ No newline at end of file diff --git a/docs/package/feeds/_img/connect-to-view.png b/docs/package/feeds/_img/connect-to-view.png new file mode 100644 index 00000000000..58bf91526a3 Binary files /dev/null and b/docs/package/feeds/_img/connect-to-view.png differ diff --git a/docs/package/feeds/_img/editfeeddialog1.png b/docs/package/feeds/_img/editfeeddialog1.png new file mode 100644 index 00000000000..f90973535ba Binary files /dev/null and b/docs/package/feeds/_img/editfeeddialog1.png differ diff --git a/docs/package/feeds/_img/identity-perms.png b/docs/package/feeds/_img/identity-perms.png new file mode 100644 index 00000000000..6f8db12461d Binary files /dev/null and b/docs/package/feeds/_img/identity-perms.png differ diff --git a/docs/package/feeds/_img/release-views-flow.png b/docs/package/feeds/_img/release-views-flow.png new file mode 100644 index 00000000000..be27d7f706e Binary files /dev/null and b/docs/package/feeds/_img/release-views-flow.png differ diff --git a/docs/package/feeds/_img/release-views-promote.png b/docs/package/feeds/_img/release-views-promote.png new file mode 100644 index 00000000000..c45b055b480 Binary files /dev/null and b/docs/package/feeds/_img/release-views-promote.png differ diff --git a/docs/package/feeds/_img/release-views-quality-nature.png b/docs/package/feeds/_img/release-views-quality-nature.png new file mode 100644 index 00000000000..05aeb278596 Binary files /dev/null and b/docs/package/feeds/_img/release-views-quality-nature.png differ diff --git a/docs/package/feeds/_img/release-views-quality-tags.png b/docs/package/feeds/_img/release-views-quality-tags.png new file mode 100644 index 00000000000..41c911a2889 Binary files /dev/null and b/docs/package/feeds/_img/release-views-quality-tags.png differ diff --git a/docs/package/feeds/about-release-views.md b/docs/package/feeds/about-release-views.md new file mode 100644 index 00000000000..abf472a352c --- /dev/null +++ b/docs/package/feeds/about-release-views.md @@ -0,0 +1,49 @@ +--- +title: Learn about release views for package CI/CD +description: Release views enable continuous integration and delivery of NuGet and npm packages in Package Management for VSTS and Team Foundation Server +ms.assetid: 28527A09-8025-4615-A746-9D213CF8202C +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.topic: get-started-article +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Learn about release views for package CI/CD + +**Team Services** + +*If you're familiar with the principles behind release views, you can jump to the [docs page](views.md) to quickly start using them.* + +Release views enable you to communicate the quality of a package-version after that package-version has been tested and/or validated. + +## Package changes: communicating nature, risk, and quality + +When creating packages in continuous integration and delivery scenarios, it's important to convey 3 pieces of information: the *nature* of the change, the *risk* of the change, and the *quality* of the package. + +

        +A semantic version number: 1.2.3-beta2. The 1.2.3 represents the nature of the change; the -beta2, the risk of the change. +

        + +### Nature and risk + +Because the nature and the risk of the change both pertain to the *change* itself—i.e. what you set out to do—they're both generally known at the outset of the work. You know if you're introducing new features, making updates to existing features, or patching bugs; this is the *nature* of your change. And, you know if you're still making changes to the API surface of your application; this is one facet of the *risk* of your change. Many NuGet users use [Semantic Versioning](http://semver.org) (SemVer) notation to convey these two pieces of information; SemVer is a widely used standard and does a good job of communicating this information. + +### Quality + +However, the *quality* of the *package* generally isn't known until validation, which comes after your change is built and packaged. Because of this, it's not feasible to communicate the quality in the version number, which is specified during packaging and before validation. There are workarounds to pre-validate (e.g. by consuming the build's DLLs directly before they're packaged; or, publishing packages to a "debug" or "CI" feed, validating, and re-publishing to a "release" feed), but none that we've seen can truly guarantee that the built package meets the correct quality standard. + +

        +Release views workflow: make changes, build, package, validation, release, and repeat. +

        + +## Release views communicate quality + +Release views enable you to communicate the quality of a package after it's been validated. You create SemVer-compliant packages in CI/CD that communicate the nature and risk of your changes using the build number, then promote the package into a release view to show your consumers that it's of a certain quality (e.g. `prerelease`, `release`, etc.). So, a release view enables your consumers to see only the subset of versions of each package that are tested, validated, and ready to go. + +

        +With release views, the quality of the change is communicated by the release view, rather than as part of the version number. +

        + +Now, [get started](views.md) with release views. \ No newline at end of file diff --git a/docs/package/feeds/common-identities.md b/docs/package/feeds/common-identities.md new file mode 100644 index 00000000000..07c658f0efb --- /dev/null +++ b/docs/package/feeds/common-identities.md @@ -0,0 +1,52 @@ +--- +title: Give teams and builds access to feeds +description: Give teams and builds access to Package Management feeds in VSTS or Team Foundation Server +ms.assetid: 6b806512-b99d-45ab-85dc-cdbc1985f0f8 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Give teams and builds access to feeds + +**Team Services | TFS 2017** + +In addition to individuals, you typically give teams and service identities access to your feeds. +If you aren't familiar with permissions on feeds, read [the overview](../feeds/feed-permissions.md) first. + +The most common identities are: +* Project teams +* Anyone who can log into the account +* The build service + +## Teams + +Feeds exist at the project collection level to allow component sharing across projects. +Each project has one or more teams associated with it. +Projects have a default team with a name derived from the project. +For a project called Fabrikam, its default team is **[Fabrikam]\Fabrikam Team**. +Additional teams can be named almost anything. +Teams in the Fabrikam project begin with "[Fabrikam]\". +To find and give a team access to a feed, search for the team name. + +Project collections always have a team called **[DefaultCollection]\Project Collection Valid Users**. +This team automatically contains everyone who is allowed to login to your Team Services account. + +## Build service identities + +When Team Build runs a build job, it takes actions in the context of a build service identity. +To push to or restore packages from a feed, the build service identity must have access to the feed. +When you create a new build definition, by default it runs with Project Collection scope. +Giving the **Project Collection Build Service** access to a feed allows all build definitions at collection scope to access the feed. + +## Example permissions + +In the screenshot below, the Fabrikam Team (1) owns the feed. + +The Project Collection Build Service (2) is a contributor, so any build which runs with Project Collection scope can add packages to the feed. + +Project Collection Valid Users (3), meaning anyone who can log into the Team Services account, can restore packages from the feed. + +![Example permissions settings](_img/identity-perms.png) \ No newline at end of file diff --git a/docs/package/feeds/create-feed.md b/docs/package/feeds/create-feed.md new file mode 100644 index 00000000000..ef913cafeea --- /dev/null +++ b/docs/package/feeds/create-feed.md @@ -0,0 +1,16 @@ +--- +title: Create a feed +description: Create a feed in VSTS or Team Foundation Server +ms.assetid: e0e7e942-7c9e-4e93-8726-f2175c78e55f +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Create a feed + +**Team Services | TFS 2017** + +[!INCLUDE [](../_shared/create-feed.md)] diff --git a/docs/package/feeds/edit-feed.md b/docs/package/feeds/edit-feed.md new file mode 100644 index 00000000000..607d7f294ca --- /dev/null +++ b/docs/package/feeds/edit-feed.md @@ -0,0 +1,35 @@ +--- +title: Edit a feed +description: Edit a feed in VSTS or Team Foundation Server +ms.assetid: 83348be7-228b-43d1-8374-6046836ed0f5 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Edit a feed + +**Team Services | TFS 2017** + +Feeds have some basic settings: name, description, and permissions. + +## Editing a feed's name and description + +[!INCLUDE [edit-feed](../_shared/edit-feed.md)] + +In the edit feed dialog: +- Change the name and/or description. +- Select **Save**. + +## Editing a feed's permissions + +To edit permissions, see [Secure feeds using permissions](feed-permissions.md#edit-permissions). + +## Removing a feed + +In the edit feed dialog: +- Select **Delete feed** +- In the delete feed dialog, type the name of the feed +- Select **Delete** diff --git a/docs/package/feeds/feed-permissions.md b/docs/package/feeds/feed-permissions.md new file mode 100644 index 00000000000..27cd5a84a55 --- /dev/null +++ b/docs/package/feeds/feed-permissions.md @@ -0,0 +1,44 @@ +--- +title: Secure feeds using permissions +description: Secure feeds using permissions in Package Management in VSTS or Team Foundation Server +ms.assetid: 70313C3C-2E52-4FFC-94C2-41F1E37C9D26 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Secure feeds using permissions + +**Team Services | TFS 2017** + +## Feed permissions overview +Feeds have three levels of access: Owners, Contributors, and Readers. Owners can add any type of identity—individuals, teams, and groups—to any access level. + +| Permission | Reader | Contributor | Owner | +| ---------- | ------ | ----------- | ----- | +| List and restore/install packages | ✓ | ✓ | ✓ | +| Push packages | | ✓ | ✓ | +| Unlist/deprecate packages | | ✓ | ✓ | +| Delete/unpublish package | | | ✓ | +| Edit feed permissions | | | ✓ | +| [Rename and delete feed](edit-feed.md) | | | ✓ | + +By default, the Project Collection Build Service is a Contributor and your project team is a Reader. +Learn more about [common identities used with Package Management](common-identities.md). + + + +## Editing permissions for a feed + +[!INCLUDE [edit-feed](../_shared/edit-feed.md)] + +Select **Permissions**. + +![Editing a feed's permissions](_img/editfeeddialog1.png) + +In the edit feed dialog: +- Search for the person or team you want to make an Owner, Contributor, or Reader. +- Select them or press Enter. +- When you're done, select **Save and close**. \ No newline at end of file diff --git a/docs/package/feeds/immutability.md b/docs/package/feeds/immutability.md new file mode 100644 index 00000000000..9b3d55ac695 --- /dev/null +++ b/docs/package/feeds/immutability.md @@ -0,0 +1,33 @@ +--- +title: Understand immutability of packages +description: Immutable packages lead to predictable builds in VSTS or Team Foundation Server +ms.assetid: d8a522c4-cc96-4e41-9fdd-5e55a7ea8345 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Understand immutability of packages + +**Team Services | TFS 2017** + +Once you publish a particular version of a package to a feed, that version number is permanently reserved. +You cannot upload a newer revision package with that same version number, or delete it and upload a new package at the same version. + +In NuGet, trying to publish a `package@version` to a feed that already contains that `package@version` returns a "409 conflict" exception. + + + +## Package caching requires immutability +Many package clients, including NuGet, keep a local cache of packages on your machine. +Once a client has cached a particular `package@version`, it will return that copy on future install/restore requests. +If, on the server, you replace `package@version` (rev 1) with a new `package@version` (rev 2), the client is unable to tell the difference. +This can lead to indeterminate build results from different machines. +For example, a developer's machine and the build agent might have cached different revisions of the package, leading to unexpected build results. + +## Dealing with broken and incorrect packages + +If a package is broken, buggy, or shares unintended content (like secrets), the best response is to prepare a fix and publish it as a new version. +Then, depending on the severity of the issue and how widely depended-on the package is, you can [unlist or delete](../nuget/unlist-delete.md) the package to make it unavailable for consumption. \ No newline at end of file diff --git a/docs/package/feeds/views.md b/docs/package/feeds/views.md new file mode 100644 index 00000000000..fdfc1b83985 --- /dev/null +++ b/docs/package/feeds/views.md @@ -0,0 +1,79 @@ +--- +title: Communicate package quality with release views +description: Use release views to communicate the quality of a package to your consumers in VSTS or Team Foundation Server +ms.assetid: EB40D23E-1053-4EBF-9D1D-19CF1BBAF1C6 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 10/27/2016 +--- + +# Communicate package quality with release views + +**Team Services** + +Views filter the feed to a subset of packages that meet criteria defined by the view. + +Right now, the only [kind of view](#views-for-other-scenarios) is a *release view*. +Release views contain the subset of the feed's package-versions that have been *promoted* into that view. + +*If you've never used release views, read more about [why and how they're useful for package continuous integration and delivery](about-release-views.md) before getting started.* + +## Get started with release views + +By default, every feed has two release views: `Prerelease` and `Release`. + +### Promoting to a release view +To promote a package-version into the release view: + +1. Select the package +1. Click the Promote button +1. Select the view to promote to and select **Promote** + +![Promote button next to the package ID](_img/release-views-promote.png) + +You can also promote using REST APIs. + +However, you cannot publish packages directly to a view (e.g. `nuget.exe publish -Source ...feed@view/nuget/...`). Instead, publish packages to the feed directly then promote them into a view. + + + +### Consuming from a release view +Once a package-version is in a release view, you can connect your package client to `feed@view` to see only packages in that release view. To do so: + +1. Select **Connect to feed** +1. Copy the feed URL + + + +![Connect to view dialog with view URL](_img/connect-to-view.png) + +For more details, see [Consume NuGet packages in Visual Studio](../nuget/consume.md) or [Install npm modules](../npm/install.md). + +If you have a release process with more steps or differently-named steps, you can [customize your views](#managing-views). + +## Use release views with continous integration/delivery + +Today, you can use the **NuGet** task in Team Build to automatically version your packages, then promote packages into a release view manually in the PACKAGE hub. In this case, make sure to check the **Include pre-release** button in the Visual Studio NuGet Package Manager extension, even when you're using the `Release` view. + +You can also promote packages from a build or release using the [Promote package to Release View](https://marketplace.visualstudio.com/items?itemName=rvo.vsts-promotepackage-task) task from the Marketplace. + +### What about SemVer and `-prerelease`? + +Today, the **NuGet Publisher** build task uses the `-prerelease` part of a SemVer version number to insert build metadata and provide a monotonically increasing package version number to ensure that package [immutability constraints](immutability.md) are met. In an upcoming sprint, we expect to make improvements to this task to give you better control over the `-prerelease` field and better integration with release views. + +## Managing views + +You can create your own views and rename and delete existing views in the feed settings dialog. + +[!INCLUDE [edit-feed](../_shared/edit-feed.md)] + +In the edit feed dialog: +- Select **Release views** +- Make your changes +- Select **Save** + +## Views for other scenarios + +In time, we expect to provide views for a wider range of scenarios. For example, you might create a view to filter to packages from a certain author or with a certain OSS license. If you have a scenario you'd like to suggest, please visit the [Package Management UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services/category/145266-package-management). \ No newline at end of file diff --git a/docs/package/get-started-maven.md b/docs/package/get-started-maven.md new file mode 100644 index 00000000000..ada8451b3a9 --- /dev/null +++ b/docs/package/get-started-maven.md @@ -0,0 +1,64 @@ +--- +title: Get Started with Maven Package Management in Team Services and TFS +description: Quickly start hosting Maven packages in VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.topic: get-started-article +ms.assetid: C5112218-DA7E-4016-986D-2D0F70DAFA44 +ms.manager: jenp +ms.author: rossav +ms.date: 09/01/2017 +--- + +# Get started with Maven Package Management in Team Services and TFS + +## Before you start +This guide assumes you've already set up Package Management. You can check out how to install and license the extension in the +[Install and license Package Management guide](install.md), or go directly to the [Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.feed) +listing to install. + +[!INCLUDE [](_shared/availability-maven.md)] + +### Prerequisites + +1. Apache Maven installed. It can be downloaded from the [Apache Maven Site](https://maven.apache.org/download.cgi). +2. Have [Package Management](https://marketplace.visualstudio.com/items?itemName=ms.feed) installed in your Team Services account. +3. [Public-opt in only] - To enable Maven support for your account, ask your account admin to go to the "Preview Features" section, choose "for this account", and enable "Maven for Package Management". +([Preview Features docs](../collaborate/preview-features.md)) + + + +## Create a feed + +*Already have a feed? [Skip to the next step](#setup-your-POM-and-settings-.xml).* + +[!INCLUDE [](_shared/create-feed.md)] + + + +## Set up authentication + +[!INCLUDE [](_shared/maven/pom-and-settings.md)] + + + +## Publish a package + +[!INCLUDE [](_shared/maven/publish.md)] + + + +## Install a package from your feed + +[!INCLUDE [](_shared/maven/install.md)] + + + +## Automate the process with continuous integration + +You can use continuous integration systems like Team Build to automate the packing and publishing of your packages. +To get started with continuous integration, see the [Maven in Team Build guidance](/vsts/build-release/packages/maven). + +## What's next? + +For more advanced topics, check out the [content summary](overview.md). diff --git a/docs/package/get-started-npm.md b/docs/package/get-started-npm.md new file mode 100644 index 00000000000..f13554a9552 --- /dev/null +++ b/docs/package/get-started-npm.md @@ -0,0 +1,52 @@ +--- +title: Get Started with npm Package Management in Team Services +description: Quickly start hosting npm packages in Visual Studio Team Services +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.topic: get-started-article +ms.assetid: 5BFBA0C3-85ED-40C9-AC5F-F686923160D6 +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Get started with npm Package Management in Team Services + +## Before you start +This guide assumes you've already set up Package Management. You can check out how to install and license the extension in the +[Install and license Package Management guide](install.md), or go directly to the [Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.feed) +listing to install. + + + + +## Create a feed + +*Already have a feed? [Skip to the next step](#set-up-your-npmrc).* + +[!INCLUDE [](_shared/create-feed.md)] + + +## Set up your npmrc + +[!INCLUDE [](_shared/npm/npmrc.md)] + + +## Publish a package + +[!INCLUDE [](_shared/npm/publish.md)] + + +## Install your package + +[!INCLUDE [](_shared/npm/install.md)] + + +## Automate the process with continuous integration + +You can use continuous integration systems like Team Build to automate the packing and publishing of your packages. +To get started with continuous integration, see the [npm in Team Build guidance](/vsts/build-release/packages/npm). + +## What's next? + +For more advanced topics, check out the [content summary](overview.md). diff --git a/docs/package/get-started-nuget.md b/docs/package/get-started-nuget.md new file mode 100644 index 00000000000..e163b1565b7 --- /dev/null +++ b/docs/package/get-started-nuget.md @@ -0,0 +1,47 @@ +--- +title: Get Started with NuGet Package Management in Team Services and TFS +description: Quickly start hosting NuGet packages in VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.topic: get-started-article +ms.assetid: C5112218-DA7E-4016-986D-2D0F70DAFA44 +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Get started with NuGet Package Management in Team Services and TFS + +## Before you start +This guide assumes you've already set up Package Management. You can check out how to install and license the extension in the +[Install and license Package Management guide](install.md), or go directly to the [Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.feed) +listing to install. + +[!INCLUDE [](_shared/availability-nuget.md)] + + +## Create a feed + +*Already have a feed? [Skip to the next step](#publish-a-package).* + +[!INCLUDE [](_shared/create-feed.md)] + + +## Publish a package + +[!INCLUDE [](_shared/publish.md)] + + +## Consume your package in Visual Studio + +[!INCLUDE [](_shared/consume.md)] + + +## Automate the process with continuous integration + +You can use continuous integration systems like Team Build to automate the packing and publishing of your packages. +To get started with continuous integration, see the [NuGet in Team Build guidance](/vsts/build-release/packages/nuget-pack-publish). + +## What's next? + +For more advanced topics, check out the [content summary](overview.md). diff --git a/docs/package/gradle/_img/add-pat.png b/docs/package/gradle/_img/add-pat.png new file mode 100644 index 00000000000..aa1292c80b0 Binary files /dev/null and b/docs/package/gradle/_img/add-pat.png differ diff --git a/docs/package/gradle/_img/gradle-build-template.png b/docs/package/gradle/_img/gradle-build-template.png new file mode 100644 index 00000000000..1ec32548209 Binary files /dev/null and b/docs/package/gradle/_img/gradle-build-template.png differ diff --git a/docs/package/gradle/_img/select-gradle-template.png b/docs/package/gradle/_img/select-gradle-template.png new file mode 100644 index 00000000000..9cbd6467b83 Binary files /dev/null and b/docs/package/gradle/_img/select-gradle-template.png differ diff --git a/docs/package/gradle/_img/select-scope.png b/docs/package/gradle/_img/select-scope.png new file mode 100644 index 00000000000..b226fe77bd1 Binary files /dev/null and b/docs/package/gradle/_img/select-scope.png differ diff --git a/docs/package/gradle/publish-package-gradle.md b/docs/package/gradle/publish-package-gradle.md new file mode 100644 index 00000000000..9c891f4ecc9 --- /dev/null +++ b/docs/package/gradle/publish-package-gradle.md @@ -0,0 +1,128 @@ +--- +title: Publish a Gradle package with VSTS +description: Publish Gradle packages using Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: douge +ms.date: 8/9/2017 +--- + +# Publish your Gradle package with VSTS + +This topic covers creating and publishing a Maven package with Gradle using Visual Studio Team Services (VSTS). + +## Prerequisites + +Before you start, [install the Gradle package management software](https://gradle.org/install/). Note that Gradle itself requires a prior installation of the Java JDK or JRE (version 7+). You +can [get the Java JDK here](http://www.oracle.com/technetwork/java/javase/downloads/index.html). + +Verify that you have the Java SDK or JRE version 7 from a CLI: + +```cli +java -version +``` + +And then install Gradle. Once it completes, confirm the installation from a CLI: + +```cli +gradle -v +``` + +You're ready to start! This tutorial will guide you through the process of publishing a Gradle package. + +> [!NOTE] +> This topic assumes you have cloned your Git repo to your local machine. If you aren't sure how to clone your repo, read [Clone a repo](/vsts/git/tutorial/clone). + +## Set up authentication + +First, you need a **gradle.properties** file that contains a VSTS credential token. + +Navigate to `https://{yourAccount}.visualstudio.com/_details/security/tokens`, where `{yourAccount}` is the name of your VSTS account or project. + +Click **Add**. + +![Add a personal access token](_img/add-pat.png) + +Give your new token a name and a duration. + +Select the **Packaging (read and write)** scope. + +![Select a token scope](_img/select-scope.png) + +The token will be a long alphanumeric string, like "lzitaoxppojf6smpl2cxdoxybepfxfetjvtkmcpw3o6u2smgebfa". Copy this string and store it securely. + +Now, go to the `.gradle` folder under the gradle installation root directory. Typically, this is `%INSTALLPATH%\gradle\user\home\.gradle\`. In that folder, create a file titled +**gradle.properties**. + +Open the **gradle.properties** file with a UTF-8 text editor and add the following: +``` +vstsMavenAccessToken=YOUR_TOKEN_HERE +``` + +Where *YOUR_TOKEN_HERE* is the token string you created and saved previously. Save the file when you're done. + +## Configure build.gradle + +Create a file called **build.gradle** in the root of your cloned (local) repo. Open it with a UTF-8 text editor and add the following code: + +```text +apply plugin: 'java' +apply plugin: 'maven-publish' + + +publishing { + publications { + myPublication(MavenPublication) { + groupId '{your-group-ID-here}' + artifactId '{your-artifact-id-here}' + version '{your-version-number-here}' + artifact '{path-to-your-JAR-file-here}' + } + } + + // Repositories *to* which Gradle can publish artifacts + repositories { + maven { + url 'https://{your-VSTS-instance-hostname-here}.pkgs.visualstudio.com/_packaging/{your-project-path-here}' + credentials { + username "VSTS" + //The VSTS build system will use the "VSTS_ENV_ACCCESS_TOKEN" to authenticate to VSTS feeds + password System.getenv("VSTS_ENV_ACCESS_TOKEN") != null ? System.getenv("VSTS_ENV_ACCESS_TOKEN") : vstsMavenAccessToken + } + } + } +} + +// Repositories *from* which Gradle can fetch dependencies; it's the same as above in this example +repositories { + maven { + url 'https://{your-VSTS-instance-hostname-here}.pkgs.visualstudio.com/_packaging/{your-project-path-here}' + credentials { + username "VSTS" + //The VSTS build system will use the "VSTS_ENV_ACCCESS_TOKEN" to authenticate to VSTS feeds + password System.getenv("VSTS_ENV_ACCESS_TOKEN") != null ? System.getenv("VSTS_ENV_ACCESS_TOKEN") : vstsMavenAccessToken + } + } +} +``` +In the above example, you are publishing artifacts (packages) and fetching dependent packages from the same VSTS instance. You can configure +publishing and fetching to separate VSTS host instances, if you prefer. + +Replace the following fields with your own values: + +- `groupId`: A group ID you associate with your package. Give it a team or organization name so consumers can identify the origin easier. +- `artifactId`: An artifact ID used when publishing your package. Again, give it a meaningful name that aptly describes the intent of the APIs in the package. +- `version`: The version of the package you're pushing. Update this when you've made changes. +- `artifact`: The path from the root of the repo to the JAR file that contains the package to publish. For example, *./src/build/myJavaClasses.jar*. + + +## Publish your Gradle package + +From a CLI, run: + +```cli +gradle publish +``` + +Your new package name is `groupId:artifactId`. diff --git a/docs/package/gradle/pull-package-gradle.md b/docs/package/gradle/pull-package-gradle.md new file mode 100644 index 00000000000..10b4dd97233 --- /dev/null +++ b/docs/package/gradle/pull-package-gradle.md @@ -0,0 +1,131 @@ +--- +title: Pull and build with a Gradle package in VSTS +description: Pull and build with a Gradle package in VSTS +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: douge +ms.date: 8/9/2017 +--- + +# Pull a Maven package with Gradle and build with it using VSTS + +Gradle is a popular package manager for Android Java developers. Learn how to pull a Gradle package and build with it for your team project with Visual Studio Team Services (VSTS). + +## Prerequisites + +Before you start, [install the Gradle package management software](https://gradle.org/install/). Note that Gradle itself requires a prior installation of the Java JDK or JRE (version 7+). You +can [get the Java JDK here](http://www.oracle.com/technetwork/java/javase/downloads/index.html). + +Verify that you have the Java SDK or JRE version 7 from a CLI: + +```cli +java -version +``` + +And then install Gradle. Once it completes, confirm the installation from a CLI: + +```cli +gradle -v +``` + +You're ready to start! This tutorial will guide you through the process of pulling a Gradle package and then building your code project with it. + +> [!NOTE] +> This topic assumes you have cloned your Git repo to your local machine. If you aren't sure how to clone your repo, read [Clone a repo](/vsts/git/tutorial/clone). + +## Set up authentication + +First, you need a **gradle.properties** file that contains a VSTS credential token. + +Navigate to `https://{yourAccount}.visualstudio.com/_details/security/tokens`, where `{yourAccount}` is the name of your VSTS account or project. + +Click **Add**. + +![Add a personal access token](_img/add-pat.png) + +Give your new token a name and a duration. + +Select the **Packaging (read and write)** scope. + +![Select a token scope](_img/select-scope.png) + +The token will be a long alphanumeric string, like "lzitaoxppojf6smpl2cxdoxybepfxfetjvtkmcpw3o6u2smgebfa". Copy this string and store it securely. + +Now, go to the `.gradle` folder under the gradle installation root directory. Typically, this is `%INSTALLPATH%\gradle\user\home\.gradle\`. In that folder, create a file titled +**gradle.properties**. + +Open the **gradle.properties** file with a UTF-8 text editor and add the following: +``` +vstsMavenAccessToken=YOUR_TOKEN_HERE +``` + +Where *YOUR_TOKEN_HERE* is the token string you created and saved previously. Save the file when you're done. + + +## Pull a Gradle package into your project + + +Open your **build.gradle** file and confirm that the following text is present at the top of it: +``` +apply plugin: 'java' +``` + +Now, add this code to the end of your **build.gradle** file. Use the `groupId`, `artifactId`, and `version` you supplied in the previous step. + +``` +dependencies { + compile(group: '{your-group-ID-here}', name: '{your-artifact-ID-here}', version: '{your-version-number-here}') +} +``` +For example: `compile(group: 'siteOps', name: 'odata-wrappers', version: '1.0.0.0') + +This tells `gradle build` to include the package you created prior, which is effectively named `orgId:artifactId`, and that it should be applied to the app named in the dependencies. + +To test this, create a simple Java code file and build it with Gradle. You can use this code to test: + +```java +package + +public class HelloWorld { + public static void main(String[] args) { + System.out.println("Hello, world!"); + } +} +``` + +Build the code by running Gradle from a CLI: + +```cli +gradle build +``` + +If the build is successful, you will see `BUILD SUCCESSFUL` returned when it completes. + + +## Set up Team Build to use Gradle packages + +Open a CLI and run the following command: + +```cli +gradle wrapper +``` + +The gradle wrapper is created in the directory where you ran the above command. The wrapper's file name is **gradlew**. Do not rename this file. + +`git push` an update that contains the wrapper (gradlew) from your local (clone) repo to origin. Team Build requires this file on the remote repo for your project. + +Go to the **Build and Release** hub for your project, and then select **Builds**. + +Select the **+ New Definition** button. Scroll down and select the **Gradle** template. + +![Select the Gradle template for a new Build task](_img/select-gradle-template.png) + +Select **Apply** to start configuring the Build task agent to use your Gradle wrapper. + +Now, select the **gradlew build** process. You can use the default settings to start. + +![Configure the Gradle template](_img/gradle-build-template.png) + +Here, you can configure various Gradle tasks to run on the agent. Once you've configured the task agent, click **Save & queue** from the top menu and start building with your Gradle wrapper. You're done! + diff --git a/docs/package/index.md b/docs/package/index.md new file mode 100644 index 00000000000..e90d85eced7 --- /dev/null +++ b/docs/package/index.md @@ -0,0 +1,36 @@ +--- +title: Package Management in VSTS and TFS | Microsoft Docs +description: Use package management to host and share NuGet packages and npm modules with VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 08/10/2016 +--- + +# Package Management + +Host your NuGet, npm, and Maven packages in **Visual Studio Team Services (VSTS)** and **Team Foundation Server 2017 Update 1** using Package Management feeds. + +## 5-Minute Quickstarts + +- [Get started with NuGet](get-started-nuget.md) +- [Get started with npm](get-started-npm.md) +- [Get started with Maven](get-started-maven.md) + +## Videos + +[![Package Management 101](_img/index/package-management-101.png)](https://channel9.msdn.com/events/Build/2017/P4110) [![The Zen of Package Management](_img/index/zen-of-package-management.png)](https://channel9.msdn.com/events/Ignite/Australia-2017/NET324) [![npm and continuous delivery in Package Management](_img/index/npm-and-continuous-delivery.png)](https://channel9.msdn.com/events/Visual-Studio/Visual-Studio-2017-Launch/T112) + +## How-to Guides + +- [Publish a NuGet package](nuget/publish.md) +- [Publish an npm package](npm/publish.md) +- [Publish a Maven package](maven/publish.md) +- [Publish a Gradle package](gradle/publish-package-gradle.md) + +## Resources + +- [Build and Release with VSTS](/vsts/build-release/index) + + diff --git a/docs/package/install.md b/docs/package/install.md new file mode 100644 index 00000000000..60518a13e5a --- /dev/null +++ b/docs/package/install.md @@ -0,0 +1,107 @@ +--- +title: Install and license Package Management for Team Services and TFS +description: Quickly start hosting NuGet packages in VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.topic: get-started-article +ms.assetid: 45ECCEFD-3804-4D8C-8567-57C84F92A705 +ms.manager: douge +ms.author: amullans +ms.date: 01/03/2017 +--- + +# Install and license Package Management + +**Team Services | TFS 2017** + +Package Management is an *extension* to Team Services and TFS. This means you'll need the Package Management extension installed in your account and have Package Management assigned to you in order to view, upload, and download packages. + +## Install Package Management in Team Services + +First, go to the [Marketplace page for Package Management](https://marketplace.visualstudio.com/items?itemName=ms.feed). + +![Marketplace page for Package Management](_img/marketplace.png) + +Select **Start Trial,** then: + +1. Select your account +1. Select **Continue** +1. Select **Confirm** + +During the 30-day trial period, everyone in your account (except Stakeholders) can use Package Management for free. + +![Install dialog](_img/install.png) + +Once the install is completed, select **Proceed to the account**. Then, go to any project and select the **Packages** hub in the **Build & Release** hub group. + +![Install dialog](_img/package-hub.png) + +## Install Package Management in TFS + +Package Management is installed by default for TFS 2017 customers. You must upgrade to TFS 2017 in order to use Package Management. + +## Buying Package Management + +Once your 30-day trial of Package Management is over, you'll either need Package Management assigned to you or have a VS Enterprise subscription to view, upload, and download packages. In Team Services, you can assign 5 users Package Management for free. In TFS, all Package Mangement licenses must be purchased in the Marketplace. + +To buy additional licenses of Package Management in Team Services, start by navigating to the [Package Management page in the Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.feed). + +To buy licenses of Package Management in TFS, navigate to the marketplace using the **Browse Marketplace** link in the top right-hand corner of any page in your account: + +![Browse marketplace](_img/browse-marketplace.png) + +Then navigate to the Package Management page. + +Once you're on the Marketplace Page, select **Buy**. In the dialog that appears, select your account then select **Continue.** + +![Buy dialog](_img/buy-license.png) + +If you don't have an Azure subscription, select **Create new Azure subscription** and follow the process on the following page. When you're done, select **Back to Visual Studio Marketplace**. + +![Back to Marketplace button](_img/back-to-marketplace.png) + +Then, select the number of users and select **Continue.** + +![Select the number of users](_img/select-users.png) + +Finally, select **Confirm** and then **Assign to users.** + +For further help on the purchasing process, check out the documentation [here](/vsts/marketplace/install-vsts-extension). + +## Assign Package Management in Team Services + +To assign your 5 free licenses of Package Management and any additional licenses that you've purchased, go to your account, select the **Users** hub, and select **Package Management**. + +![Users hub](_img/users-hub.png) + +Then, select **Assign**, type the users you want to assign licenses to, then select **Ok.** If you have a VS Enterprise license, you already have access to Package Management and don't need to be assigned a licenses. + +## Assign licenses in TFS + +From any collection in TFS, hover over the settings menu and select the **Users** hub. Then select **Package Management**. + +![Users hub in TFS](_img/users-hub-tfs.png) + +Select **Assign**, type the user(s) you want to assign licenses, then select **Ok.** + +Users with Visual Studio Enterprise subscriptions get Package Management for free. [Ensure that your Visual Studio Enterprise subscribers are assigned VSE access level](../security/change-access-levels.md). + +Users using an instance of TFS disconnected from the internet (and thus unable to purchase licenses from the marketplace) can still assign licenses purchased through an enterprise agreement. + + + +#### Q: How do I know if I’ll still be able to use Package Management after my trial expires? + +A: All users who show up under the Package Management section of the Users hub will have access to Package Management after the trial expires. +You’ll need either a Package Management license or Visual Studio Enterprise subscription to show up in this list. + +#### Q: I am one of my account's 5 free Basic users. Does that mean I can use Package Management as well? + +A: Your account's 5 free Basic users are separate from your 5 free Package Management users. +The free Package Management licenses must be bought from the Marketplace and assigned in the Package Management section of the Users hub. + +#### Q: I have a Visual Studio Professional subscription. Can I use Package Management for free? + +A: Unfortunately not. Only Visual Studio Enterprise subscriptions include Package Management. + + \ No newline at end of file diff --git a/docs/package/maven/install.md b/docs/package/maven/install.md new file mode 100644 index 00000000000..cea1e951bca --- /dev/null +++ b/docs/package/maven/install.md @@ -0,0 +1,16 @@ +--- +title: Install Maven packages from your feed using the Maven client +description: Successfully install Maven packages from VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.assetid: 0f66e727-e76a-4a72-be12-3fa1775b9e2c +ms.manager: jenp +ms.author: rossav +ms.date: 09/01/2017 +--- + +# Install Maven packages in VSTS and TFS + +[!INCLUDE [](../_shared/availability-maven.md)] + +[!INCLUDE [](../_shared/maven/install.md)] \ No newline at end of file diff --git a/docs/package/maven/pom-and-settings.md b/docs/package/maven/pom-and-settings.md new file mode 100644 index 00000000000..18db1cee043 --- /dev/null +++ b/docs/package/maven/pom-and-settings.md @@ -0,0 +1,16 @@ +--- +title: Configure Maven client with VSTS or Team Foundation Server +description: Successfully configure your Maven client for use with VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.assetid: 944f45ee-baa3-45ba-8467-5e7ab2bc47cf +ms.manager: jenp +ms.author: rossav +ms.date: 09/01/2017 +--- + +# Set up Maven client in VSTS and TFS + +[!INCLUDE [](../_shared/availability-maven.md)] + +[!INCLUDE [](../_shared/maven/pom-and-settings.md)] \ No newline at end of file diff --git a/docs/package/maven/publish.md b/docs/package/maven/publish.md new file mode 100644 index 00000000000..d9607db84b3 --- /dev/null +++ b/docs/package/maven/publish.md @@ -0,0 +1,16 @@ +--- +title: Publish Maven packages to your feed using the Maven client +description: Successfully publish Maven packages to your feed hosted on VSTS or Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.assetid: 9b2c7b3d-32d0-4ce1-8e17-ec9e8c3e451f +ms.manager: jenp +ms.author: rossav +ms.date: 09/01/2017 +--- + +# Publish Maven packages in VSTS and TFS + +[!INCLUDE [](../_shared/availability-maven.md)] + +[!INCLUDE [](../_shared/maven/publish.md)] \ No newline at end of file diff --git a/docs/package/npm/_img/deprecate-and-unpublish.png b/docs/package/npm/_img/deprecate-and-unpublish.png new file mode 100644 index 00000000000..c5d570413e5 Binary files /dev/null and b/docs/package/npm/_img/deprecate-and-unpublish.png differ diff --git a/docs/package/npm/_img/node-setup.png b/docs/package/npm/_img/node-setup.png new file mode 100644 index 00000000000..c125c14ab5b Binary files /dev/null and b/docs/package/npm/_img/node-setup.png differ diff --git a/docs/package/npm/_img/upstream-create.png b/docs/package/npm/_img/upstream-create.png new file mode 100644 index 00000000000..2d8601acf3d Binary files /dev/null and b/docs/package/npm/_img/upstream-create.png differ diff --git a/docs/package/npm/_img/upstream-edit.png b/docs/package/npm/_img/upstream-edit.png new file mode 100644 index 00000000000..290224351f9 Binary files /dev/null and b/docs/package/npm/_img/upstream-edit.png differ diff --git a/docs/package/npm/_img/view-cached-packages.png b/docs/package/npm/_img/view-cached-packages.png new file mode 100644 index 00000000000..eccb5ab0340 Binary files /dev/null and b/docs/package/npm/_img/view-cached-packages.png differ diff --git a/docs/package/npm/deprecate-unpublish.md b/docs/package/npm/deprecate-unpublish.md new file mode 100644 index 00000000000..096fc9b9cff --- /dev/null +++ b/docs/package/npm/deprecate-unpublish.md @@ -0,0 +1,36 @@ +--- +title: Deprecate or unpublish an npm package +description: Deprecate or unpublish an npm package from VSTS or Team Foundation Server to discourage or prevent its usage +ms.assetid: 1d74f23f-bafc-4fed-9aad-4b2ee7633ff8 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Deprecate or unpublish an npm package + +[!INCLUDE [](../_shared/availability-npm.md)] + +There are two options available to remove a version of an npm package from a feed. + +1. **Deprecate:** deprecating a version of a package adds a deprecation message that most npm clients, and Team Services, will show whenever the package is viewed or installed. +Deprecating a version can help you discourage new usage of it by presenting a warning message when the package is installed. +2. **Unpublish:** Unpublishing a version of a package makes it permanently unavailable for install or restore. + +## Use Team Services + +You must be a **contributor** to deprecate and an **owner** to unpublish. +To deprecate or unpublish a version of a package, choose the package from the **Packages** menu, and select the appropriate option from the menu under the ellipses. + +![Deprecate and unpublish buttons](_img/deprecate-and-unpublish.png) + +## Use npm +1. [Set up the npm client with your feed](npmrc.md). +2. Deprecate a package by running `npm deprecate [@] `. +3. Unpublish a package by running `npm unpublish @`. + +At this time, it's not possible to use `npm unpublish ` to unpublish all versions. + +See the [deprecate](https://docs.npmjs.com/cli/deprecate) or [unpublish](https://docs.npmjs.com/cli/unpublish) CLI docs for more info. diff --git a/docs/package/npm/install.md b/docs/package/npm/install.md new file mode 100644 index 00000000000..a6d42583c25 --- /dev/null +++ b/docs/package/npm/install.md @@ -0,0 +1,16 @@ +--- +title: Install npm modules +description: Install npm modules from Visual Studio Team Services +ms.assetid: C586AF1C-A9D0-461F-95F9-8FEB61988C48 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Install npm modules + +[!INCLUDE [](../_shared/availability-npm.md)] + +[!INCLUDE [](../_shared/npm/install.md)] \ No newline at end of file diff --git a/docs/package/npm/npmrc.md b/docs/package/npm/npmrc.md new file mode 100644 index 00000000000..d5559fbb226 --- /dev/null +++ b/docs/package/npm/npmrc.md @@ -0,0 +1,47 @@ +--- +title: Set up your client's npmrc +description: Authenticating to feeds with npm in Visual Studio Team Services +ms.assetid: A5364E3A-3918-4318-AAE0-430EA91AD5F1 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Set up your client's npmrc + +[!INCLUDE [](../_shared/availability-npm.md)] + +All Package Management feeds require authentication, so you'll need to store credentials for the feed before you can install or publish packages. npm uses [`.npmrc` configuration files](https://docs.npmjs.com/files/npmrc) to store feed URLs and credentials. + +## Where are my `.npmrc` files? + +Team Services recommends using two `.npmrc` files: + +1. One at the root of your project that contains *configuration* that's shared with the whole team. +2. One in your user profile folder (`$home`, `~`, etc. depending on your shell) that contains *credentials* and never leaves your machine. + +This enables you to share your configuration with the whole team while keeping your credentials secure. + +## Getting credentials +- For **Windows** users on **Team Services**, the [vsts-npm-auth package](https://www.npmjs.com/package/vsts-npm-auth) can help you acquire and manage credentials. When you execute `vsts-npm-auth`, it reads your configured package source from the provided `.npmrc`, and writes credentials to your user profile `.npmrc`. +- For **Mac, Linux, and Windows Bash Shell** users on **Team Services**, and all **Team Foundation Server** users, the *Connect to feed* dialog will generate an appropriately-formatted token that you can place into your `.npmrc` file. + +[!INCLUDE [](../_shared/npm/npmrc.md)] + + +## Troubleshooting vsts-npm-auth + +If you receive an error like: + +* Command Prompt: `'vsts-npm-auth' is not recognized as an internal or external command, operable program or batch file.` +* PowerShell: `vsts-npm-auth : The term 'vsts-npm-auth' is not recognized as the name of a cmdlet, function, script file, or operable program.` + +then it's likely that the npm modules folder is not in your path. + +To fix this, re-run Node.js setup and ensure the `Add to PATH` option and its child options are selected for installation. + +![Add to PATH install option in Node.js setup](_img/node-setup.png) + +Alternatively, you can edit the PATH variable to add `%APPDATA%\npm` (Command Prompt) or `$env:APPDATA\npm` (PowerShell). \ No newline at end of file diff --git a/docs/package/npm/publish.md b/docs/package/npm/publish.md new file mode 100644 index 00000000000..a4c335a85e1 --- /dev/null +++ b/docs/package/npm/publish.md @@ -0,0 +1,16 @@ +--- +title: Publish an npm package +description: Publish npm packages to Visual Studio Team Services +ms.assetid: 85773969-1491-4242-A060-BD5D193961A0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Publish an npm package + +[!INCLUDE [](../_shared/availability-npm.md)] + +[!INCLUDE [](../_shared/npm/publish.md)] diff --git a/docs/package/npm/scopes.md b/docs/package/npm/scopes.md new file mode 100644 index 00000000000..ec8e1326f70 --- /dev/null +++ b/docs/package/npm/scopes.md @@ -0,0 +1,35 @@ +--- +title: Use npm scopes for private packages +description: Use npm scopes for private packages in Visual Studio Team Services +ms.assetid: c88868bd-8101-48f3-b76d-17c858181fda +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Use npm scopes + +[!INCLUDE [](../_shared/availability-npm.md)] + +[Scopes](https://docs.npmjs.com/misc/scope) are built into npm and are a way of grouping packages together. +In Team Services and in npmjs.com, you can publish and use both scoped and unscoped packages. + +Scopes are also the npm client's only native affordance to use multiple registries/feeds. +They allow you to separate your private packages from npmjs.com packages by prefixing your packages with a `@scope`: +e.g. `@fabrikam/fiber-core` and configuring your .npmrc file to only use a Package Management feed for that `@scope`. + +## Set up +To use a Package Management feed with a scope, follow the instructions below, but append your scope to both lines in the project .npmrc file. + +[!INCLUDE [](../_shared/npm/npmrc.md)] + + Then, replace: +- `registry=` with +- `@fabrikam:registry=` + +## Upstreams or scopes? +Scopes add an additional restriction when naming your packages: each package name must start with `@`. If you're ok with this limitation, and don't intend to ever publish your private packages to npmjs.com, scopes are an alternative to [upstream sources](upstream-sources.md). + +If you do intend to publish private packages to npmjs.com, we recommend not using scopes unless you intend to publish your packages to npmjs.com with the scope intact; if you remove the scope when transitioning the package from Package Management to npmjs.com, you'll need to update any package.json references accordingly. \ No newline at end of file diff --git a/docs/package/npm/upstream-sources.md b/docs/package/npm/upstream-sources.md new file mode 100644 index 00000000000..69bc528e540 --- /dev/null +++ b/docs/package/npm/upstream-sources.md @@ -0,0 +1,64 @@ +--- +title: Use packages from npmjs.com +description: Use packages from npmjs.com in VSTS via upstream sources or scopes +ms.assetid: E2DB1217-7113-4A75-A66D-3CADDB07AD37 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: cajone +ms.date: 09/01/2017 +--- + +# Use packages from npmjs.com + +[!INCLUDE [](../_shared/availability-npm.md)] + +The npm client is designed to work with a single primary *registry* (what Package Management calls a *feed*). It also supports secondary *scoped* registries. Scoped registries can only be used to install packages whose names begin with the scope prefix, so their usage is more restrictive. If you want to use both private packages you've created **and** public packages from npmjs.com, we recommend using upstream sources. + +## Upstream sources +Upstream sources allow you to merge the contents of npmjs.com into your feed such that the npm client can install packages from both locations. Enabling upstream sources also automatically enables caching. +**This is the recommended way to use Package Management with npm.** +Upstreams give you the most flexibility to use a combination of scoped- and non-scoped packages in your feed, as well as scoped- and non-scoped packages from npmjs.com. + +### Enable npmjs.com as an upstream +To enable npmjs.com as an upstream source on your feed, check the box in the Create Feed or Edit Feed dialog. + +![Upstream sources checkbox in New feed dialog](_img/upstream-create.png) + +![Upstream sources checkbox in Edit feed dialog](_img/upstream-edit.png) + +## Order and shadowing +When a feed with upstreams enabled receives a query (e.g. `npm install lodash`), it will first check for local packages with that package ID. +If there is at least one local version of that package ID, the upstream source will not be used. +So, for example, if you publish `lodash@1.0.0` and run `npm install lodash@2.0.0`, the request will fail, even if 2.0.0 exists on npmjs.com and upstream sources are enabled. + +> [!NOTE] +> Shadowing is permanent. So, in the example above, even if you later unpublish `lodash@1.0.0`, requests for any `lodash` version will only check the local feed. + +## Caching +When you enable npmjs.com as an upstream source, packages installed from npmjs.com will automatically be cached in your feed.These packages could be installed directly from the upstream (e.g. `npm install lodash`) or as dependencies of packages that reside in your feed. + +Caching can improve download performance and save network bandwidth, esp. for TFS servers located on internal/dedicated networks. + +### Internet requirements +When you run an `npm install` command, the feed will check to see if it has a cache of the package(s) requested by the `npm` client. If it does not, it will redirect the client to download the package from npmjs.com directly, and also cache the package in the background. The first client (where client is a developer machine or a build agent) to install a given npm package **will** need Internet access to successfully retrieve the package *or* they will have to run `npm install` twice. The first install will fail but cause the package to be cached; the second install will return the package from the cache. + +If you host your own build agents, they do not need access to the Internet for this feature. However, per the limitation above, a developer machine will need to first run `npm install` to cache the package(s) so that they're available to the build agents. + +For TFS users, the TFS server must be able to access the `https://registry.npmjs.org` domain in order to cache packages. + +### Filtering to cached packages +You can see the packages you have cached in your feed by selecting the "Source = npmjs.com cache" filter. + +![Viewing your cached packages](_img/view-cached-packages.png) + +### No guarantee of caching +> [!NOTE] +> Right now, VSTS and TFS do not provide a guarantee that every package `npm installed` via a feed with upstreams enabled will be cached. + +Packages with malformed version numbers in their packages.json cannot be ingested into the feed, and thus must still be retrieved directly from npmjs.com. If npmjs.com goes down, you are not fully protected if you depend on these packages. + +In a future sprint, we'll be updating the upstreams feature to always cache and serve packages through the feed. In the rare case where a package cannot be cached, the install will fail (without redirecting to npmjs.com) so that you have full confidence that every package you use is cached by your feed. + +## Scopes +If you prefer to use scopes, which limit your private packages to those with the `@` prefix e.g. `@fabrikam/core` but enable you to consume public packages **directly** from npmjs.com, see [Scopes](scopes.md). \ No newline at end of file diff --git a/docs/package/nuget/_img/unlist-and-delete.png b/docs/package/nuget/_img/unlist-and-delete.png new file mode 100644 index 00000000000..a538f391ae8 Binary files /dev/null and b/docs/package/nuget/_img/unlist-and-delete.png differ diff --git a/docs/package/nuget/auth-old.md b/docs/package/nuget/auth-old.md new file mode 100644 index 00000000000..ad46ca0feb7 --- /dev/null +++ b/docs/package/nuget/auth-old.md @@ -0,0 +1,24 @@ + +## NuGet Auth Helper +*Works with all versions of Visual Studio and NuGet.exe* + +The NuGet Auth Helper acquires credentials for each of the package sources in a NuGet.config file and stores the encrypted credentials +in `%AppData%\NuGet\NuGet.config`. Because the acquired credentials are Personal Access Tokens, which periodically expire, +you'll sometimes need to re-run the helper to update your credentials. + +### Usage instructions + +1. Download a bundle with the latest version of NuGet.exe and the NuGet Auth Helper: `https://{account}.pkgs.visualstudio.com/_apis/public/nuget/client/AuthHelperBundle.zip` +1. Add your feed as a NuGet package source + - To add a feed to the global NuGet.config: `nuget sources add -name {your feed name} -source {your feed URL}` + - To add a feed to your solution, create or edit a +[NuGet.config](http://docs.nuget.org/Consume/NuGet-Config-File#config-file-reference) file at the solution root +1. Run the helper on your your NuGet.config file: `VSS.NuGet.AuthHelper.exe -Config {path/to/NuGet.config}` + - The path to the global NuGet.config is `$env:APPDATA\NuGet\NuGet.config` + +### Bootstrap into your workflow +You can also add the helper to your enlistment or developer command prompt using our +[bootstrap tools](bootstrap-nuget.md). + +This is recommended if you're using the helper in a developer team that cannot update to NuGet 3.x and Visual Studio 2015 Update 1. + diff --git a/docs/package/nuget/auth.md b/docs/package/nuget/auth.md new file mode 100644 index 00000000000..4d751b382ef --- /dev/null +++ b/docs/package/nuget/auth.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/package/nuget/nuget-exe +--- \ No newline at end of file diff --git a/docs/package/nuget/bootstrap-nuget.md b/docs/package/nuget/bootstrap-nuget.md new file mode 100644 index 00000000000..01beab72c5e --- /dev/null +++ b/docs/package/nuget/bootstrap-nuget.md @@ -0,0 +1,73 @@ +--- +title: Set up a multi-developer NuGet environment +description: Set up the NuGet developer environment for Package Management in VSTS or Team Foundation Server +ms.assetid: EA79E902-C679-4AA7-BE33-E865F593EB06 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 08/10/2016 +--- + +# Set up a multi-developer NuGet environment + +[!INCLUDE [](../_shared/availability-nuget.md)] + +Using a package mangement system helps increase your team's velocity and decreases the amount of code duplication across your organization. +Multiple developers on a team need to coordinate where and how they access packages. +For example, developers will need a compatible NuGet client and credentials to authenticate to any Team Services hosted feeds before they can restore or push packages. + +Team leaders or architects can make it very simple for developers to get everything they need without having to do multiple downloads and find passwords and authentication tokens on team shares. +We've developed a set of tools and conventions for integrating Team Services NuGet into your workflow. +The tools are shipped as a NuGet package called `Microsoft.VisualStudio.Services.NuGet.Bootstrap`, available on the public [NuGet Gallery](https://www.nuget.org/packages?q=Microsoft.VisualStudio.Services.NuGet.Bootstrap). +We also have an [example repository](https://github.com/Microsoft/vsts-nuget-sample) which demonstrates these tools. + +## The bootstrapper package + +The bootstrapper package takes care of several things for you: +* Ensures that each developer has a compatible version of nuget.exe and the Team Services authentication extension in their environment +* Separates feed configuration from credential management so you don't have to share passwords among developers +* Allows build and continuous integration systems to seamlessly use the same configuration as individual developers + +The bootstrapping tools work regardless of your version control system. +Both Git and TFVC are supported. + +You aren't required to use this bootstrapping package in order to use Team Services authenticated feeds. +It's intended to help you get going without having to write a lot of code or invest in an extensive engineering system. +Customers with unique needs can copy [the package](https://www.nuget.org/packages?q=Microsoft.VisualStudio.Services.NuGet.Bootstrap) and [example repo](https://github.com/Microsoft/vsts-nuget-sample), and modify them to fit in their engineering system. + +### One-time setup + +Perform the following steps one time in a repo containing your app's code. +Anyone with the authority to make solution-wide changes can follow these steps. + +[!INCLUDE [vss-pm-bootstrap](../_shared/nuget-bootstrap.md)] + +>[!NOTE] +>By default, the bootstrapper disables the public NuGet Gallery as a package source. +>Many customers use private feeds as a way to avoid dependencies on unknown or untrusted packages. +>If you depend on restoring packages from the public NuGet Gallery, edit `nuget.config` and uncomment the line pointing to +>http://nuget.org (see [the section on conventions](#conventions) for more about `nuget.config`). + +### Developer experience when using the bootstrapper package + +The first time a developer enlists in a repo, they must run `init` in the root of the repo. +This will ensure that NuGet can connect to authenticated feeds with the developer's credentials. +For more about `init`, see [the section on conventions](#conventions). + +At least once a month and whenever their password changes, the developer should refresh their environment by running `init` again. +If your developers already run a script when they work on code (for example, to update tools or set environment variables), that script can call `init` each time it runs. + + + +## Conventions + +The bootstrapper package places `init.cmd`, `init.ps1`, and `nuget.config` in the root of your repo. +`init` is the entry point for tools which live under `scripts\` and `.tools\`. +It's placed in the root for developer convenience. + +Placing `nuget.config` in the root of the repo is a common NuGet convention. + +Developer credentials are not placed in the repo's `nuget.config`. +When `init` runs, it places credentials in the user's NuGet config under `%APPDATA%`. +When restoring or pushing packages, NuGet merges the sources list from the repo and credentials from the machine-wide config. \ No newline at end of file diff --git a/docs/package/nuget/consume.md b/docs/package/nuget/consume.md new file mode 100644 index 00000000000..2f97ccde437 --- /dev/null +++ b/docs/package/nuget/consume.md @@ -0,0 +1,16 @@ +--- +title: Consume NuGet packages in Visual Studio +description: Consume NuGet packages from VSTS or Team Foundation Server by adding a feed to Visual Studio +ms.assetid: BF919E28-65C2-40E3-8A49-5BF0DA3DE598 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 08/10/2016 +--- + +# Consume NuGet packages in Visual Studio + +[!INCLUDE [](../_shared/availability-nuget.md)] + +[!INCLUDE [](../_shared/consume.md)] diff --git a/docs/package/nuget/dotnet-exe.md b/docs/package/nuget/dotnet-exe.md new file mode 100644 index 00000000000..f4d054446b6 --- /dev/null +++ b/docs/package/nuget/dotnet-exe.md @@ -0,0 +1,32 @@ +--- +title: Use dotnet with Team Services feeds +description: Authenticating to feeds with NuGet in Visual Studio Team Services +ms.assetid: CA2DCB9D-93FB-4E2D-B953-BF78D5687B35 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Use dotnet with Team Services feeds + +[!INCLUDE [](../_shared/availability-nuget.md)] + +> [!NOTE] +> This page covers interactive scenarios. In Team Build, use the .NET Core step. + +To use `dotnet` with VSTS NuGet feeds, you'll need to specify a [Personal Access Token](../../accounts/use-personal-access-tokens-to-authenticate.md) in plain text. + +On Windows, [NuGet 4](nuget-exe.md) is functionally equivalent to dotnet, and we recommend using that instead. + +## Add a feed to dotnet +[!INCLUDE [generate-pat](../_shared/generate-pat.md)] + +Then, create or edit a [NuGet.config](http://docs.nuget.org/Consume/NuGet-Config-File#config-file-reference) at the solution root, next to the project.json file. + +Add your VSTS feed(s) to your solution by running the following command (replacing {values} where applicable): + +``` +nuget.exe sources add -name {feed name} -source {feed URL} -username {username} -password {your PAT} -StorePasswordInClearText +``` \ No newline at end of file diff --git a/docs/package/nuget/move-from-fileshares.md b/docs/package/nuget/move-from-fileshares.md new file mode 100644 index 00000000000..28765ea1ff6 --- /dev/null +++ b/docs/package/nuget/move-from-fileshares.md @@ -0,0 +1,144 @@ +--- +title: Move your packages to the cloud +description: Leave your file shares behind and bring your packages to VSTS or Team Foundation Server +ms.assetid: E45D2856-222F-444B-9E0C-A04B6FE93494 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Move your packages to the cloud + +[!INCLUDE [](../_shared/availability-nuget.md)] + +VSTS provides hosted NuGet feeds as a service. +If you're using NuGet packages as a part of your continuous delivery flow, +Team Services Package Management can eliminate your dependencies on on-premises file shares and hosted instances of NuGet.Server. +Team Services Package Management works with any CI system that supports authenticated NuGet feeds. +This walkthrough assumes that you're using Team Services Team Build (not XAML Build). + +## Before you start + +Team Services NuGet service provides a number of benefits compared to file shares. However, some of these benefits may require changes to your existing workflows. + +- **Indexing:** Team Services maintains an index of all the packages in each feed, which enables fast `nuget list` operations. +List operations on your file shares require the client to open every `nupkg` and examine the `nuspec` for metadata unless your +file share has been configured to provide an index that the NuGet client understands. +- **Immutability:** A package version (e.g. `MyPackage.1.0.0.0.nupkg`) can only be pushed to a feed once. +This ensures that any dependencies on that version are guaranteed to remain valid. +However, if you have workflows that publish packages with newer binaries without changing the version number, those workflows will break when moved to Team Services NuGet feeds. Learn more about [Immutability in Team Services](../feeds/immutability.md). +- **Well-formedness:** Team Services validates all pushed packages to ensure they're well-formed. +This prevents invalid packages from entering your development and build environments. +However, any workflow that publishes malformed packages will break when moving to Team Services NuGet feeds. + +### NuGet 3.x is recommended + +[!INCLUDE [nuget-3x](../_shared/nuget-3x.md)] + +### Authentication and authorization + +If you're using Active Directory-backed file shares, you and your on-prem build agents are likely authenticating automatically using Windows NTLM. +Moving your packages to Team Services will require a few changes: + +- **Authentication:** You need to provide the NuGet client with credentials in order to restore and push packages. + - **Visual Studio 2015 users**: Credential acquisition happens automatically, as long as you've updated the + [NuGet Package Manager](../nuget/consume.md) extension to version 3.3 or higher by going to the Tools menu and using the Extensions and Updates window. + - **nuget.exe 3.x users**: Credential acquisition happens automatically after you install the +[Team Services Credential Provider](../nuget/nuget-exe.md). +- **Authorization:** Ensure that any principal (user, service account, group, etc.) that needs access to your packages has the appropriate permissions. See the [permissions](#make-a-plan-for-permissions) section for details. + +## Move your packages + +Moving your packages to the cloud is a 4-step process: + +1. [Inventory your existing package sources](#inventory-your-existing-package-sources) +1. [Make a plan for permissions](#make-a-plan-for-permissions) +1. [Set up your feeds](#set-up-your-feeds) +1. [Use your feeds](#use-your-feeds) + + +### Inventory your existing package sources + +Before making any configuration changes, find your existing NuGet file shares by checking: +- Any nuget.config files in your codebase, likely in the same folder as your .sln file +- The global nuget.config file at + - Command Prompt: `%APPDATA%\NuGet\NuGet.Config` + - PowerShell: `$env:APPDATA\NuGet\NuGet.Config` + +Look for any lines with a UNC path (like ``) and note the path. You'll use the list of paths in the [migrate](#migrate-your-packages) section later. + + +### Make a plan for permissions + +When setting up your new feeds, you can either: + - Set up your feed permissions to match your existing file share permissions + - Align your feed permissions with existing Team Services teams and groups + +If you want to match your existing file share permissions, note the permissions on each share that contains packages. +Specifically, note the principals with: +- **Full control** +- **Modify** or **write** +- **Read & execute**, **List folder contents**, or **Read** + + +### Set up your feeds + +Now that you've inventoried your existing package sources, it's time to set up the feeds that will replace them. +For this walkthrough, we'll assume a 1:1 mapping of feeds to SMB shares. + + +#### Create your feeds + +For each SMB share, create a feed using the [instructions here](..\feeds\create-feed.md). In the create dialog: +- Use the name of the SMB share folder as the **Feed name** +- Leave the defaults for **Who can read** and **Who can contribute** + +For each feed you've created, [edit the feed and set permissions](..\feeds\feed-permissions.md). There are a set of +[common identities](..\feeds\common-identities.md) that you should consider when setting up feed permissions. + +If you've chosen to set up your new feed permissions to match your existing file share permissions, use the following table to give +your principals the appropriate group membership: + +| SMB permission | Feed group | +|--------------------------------------------|----------------| +| Full control | Owners | +| Modify, Write | Contributors | +| Read & execute, List folder contents, Read | Readers | + + +### Use your feeds + +#### Get your feed's NuGet source URL + +For each feed, click the **Connect to feed** button and copy the **Source URL** in the Connect with NuGet section. Use the Source URL in the [migrate](#migrate-your-packages) and [update](#update-your-nuget-configuration) sections. + + +#### Migrate your packages + +Once you've set up your feeds, you can do a bulk push from each SMB share to its corresponding feed. To do so: + +1. If you haven't already, open a PowerShell window in the repo where you installed the Team Services NuGet tools and run `init.ps1`. +This sets up your environment to allow you to work with nuget.exe and Team Service's NuGet feeds. +1. For each share, push all packages in the share to the new feed: +`nuget push {your package path}\*.nupkg -Source {your NuGet package source URL} -ApiKey VSTS` + +For larger teams, you should consider marking each share as read-only before doing the `nuget push` operation to ensure no one adds or updates packages during your migration. + + +#### Update your NuGet configuration + +Now, return to each of the nuget.config files you found in the [inventory](#inventory-your-existing-package-sources) section. For +each share, find the corresponding `` and replace the `value` with the new feed's source URL. + + +#### Add the Team Services NuGet tools to your repo + +The Team Services NuGet [bootstrap package](bootstrap-nuget.md) can automate the process of acquiring the right NuGet tools and credentials to use feeds. +This is especially helpful for users of Visual Studio 2013 (or earlier) or NuGet 2.x, which don't have built-in support for Team Services auth. + + +#### Integrate with your builds + +Update your builds to ensure they have the right credentials to consume and publish packages in feeds. See the how-to's for [restoring](/vsts/build-release/packages/nuget-restore) and [publishing](/vsts/build-release/packages/nuget-pack-publish) packages in Team Build. diff --git a/docs/package/nuget/nuget-exe.md b/docs/package/nuget/nuget-exe.md new file mode 100644 index 00000000000..686c6d3416f --- /dev/null +++ b/docs/package/nuget/nuget-exe.md @@ -0,0 +1,67 @@ +--- +title: Use NuGet with Team Services feeds +description: Authenticating to feeds with NuGet in Visual Studio Team Services +ms.assetid: 10665DBC-846E-4192-8CAB-D5A4C6E40C65 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Use NuGet with Team Services feeds + +[!INCLUDE [](../_shared/availability-nuget.md)] + +> [!NOTE] +> This page covers interactive scenarios. In Team Build, use the NuGet step to [restore](/vsts/build-release/packages/nuget-restore) and [publish](/vsts/build-release/packages/nuget-pack-publish) packages. + +[!INCLUDE [nuget-3x](../_shared/nuget-3x.md)] + +## Add a feed to NuGet 3 or later +NuGet 3 and later supports the Credential Provider, which automatically acquires feed credentials when needed. + +[!INCLUDE [](../_shared/nuget-publish-endpoint.md)] + +Then, run any [nuget command](https://docs.microsoft.com/en-us/nuget/tools/nuget-exe-cli-reference). + +## Add a feed to NuGet 2 +NuGet 2 uses Personal Access Tokens to access feeds. + +To use a 2.x client, first get the v3 feed URL: + +[!INCLUDE [get-endpoint-URL](../_shared/nuget-consume-endpoint.md)] + +Then, at the end of the URL, replace `/v3/index.json` with `/v2`. + +[!INCLUDE [generate-pat](../_shared/generate-pat.md)] + +Run + +```no-highlight +nuget.exe sources add -name {your feed name} -source {your feed URL} -username {anything} -password {your PAT} +``` + +Then, run any [nuget command](https://docs.microsoft.com/en-us/nuget/tools/nuget-exe-cli-reference). + +## Download the credential provider directly +You can download the credential provider directly from this link: +`https://{account}.pkgs.visualstudio.com/_apis/public/nuget/client/CredentialProviderBundle.zip` + +## Advanced credential provider scenarios +### Install the credential provider +By default, the credential provider works alongside NuGet.exe. + +For advanced scenarios, you can choose where to install the provider: + + - **Projects with a developer command prompt or enlistment:** Use the provider from an + [environment variable](http://docs.nuget.org/Consume/Credential-Providers#using-a-credential-provider-from-an-environment-variable) by copying `CredentialProvider.Vss.exe` to any folder, then run this command in PowerShell: `$env:NUGET_CREDENTIALPROVIDERS_PATH = {your folder}` + - **Projects using a non-Team Services CI server:** Use the provider from an + [environment variable](http://docs.nuget.org/Consume/Credential-Providers#using-a-credential-provider-from-an-environment-variable) + - **Work on an individual machine:** Install the provider + [globally](http://docs.nuget.org/Consume/Credential-Providers#installing-a-credential-provider-globally) by copying `CredentialProvider.Vss.exe` to `$env:LOCALAPPDATA\NuGet\CredentialProviders` + +### Bootstrap into your workflow + +You can also add the provider to your enlistment or developer command prompt using our [bootstrap tools](bootstrap-nuget.md). +This is recommended if you're using the provider in a multi-engineer development environment. \ No newline at end of file diff --git a/docs/package/nuget/publish.md b/docs/package/nuget/publish.md new file mode 100644 index 00000000000..21473078643 --- /dev/null +++ b/docs/package/nuget/publish.md @@ -0,0 +1,16 @@ +--- +title: Publish a NuGet package from the command line +description: Publish NuGet packages to VSTS or Team Foundation Server from the command line +ms.assetid: C7D75946-1F00-4BD7-87C8-225BBAE9982B +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Publish a NuGet package from the command line + +[!INCLUDE [](../_shared/availability-nuget.md)] + +[!INCLUDE [](../_shared/publish.md)] diff --git a/docs/package/nuget/remove.md b/docs/package/nuget/remove.md new file mode 100644 index 00000000000..888ca06d61d --- /dev/null +++ b/docs/package/nuget/remove.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/package/nuget/unlist-delete +--- diff --git a/docs/package/nuget/tfs.md b/docs/package/nuget/tfs.md new file mode 100644 index 00000000000..92d8fe9beae --- /dev/null +++ b/docs/package/nuget/tfs.md @@ -0,0 +1,32 @@ +--- +title: Use NuGet or dotnet with Team Foundation Server feeds +description: Authenticating to feeds with NuGet in Visual Studio Team Services +ms.assetid: 1BB88A4E-C40E-48CD-B44A-25C90B935E5B +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Use NuGet or dotnet with Team Foundation Server feeds + +[!INCLUDE [](../_shared/availability-nuget.md)] + +Authentication from command-line clients like `nuget` and `dotnet` is a little different for Team Foundation Server users. + +## Domain users on domain-joined machines + +You can use [consume packages with Visual Studio](consume.md), [publish with nuget](publish.md), and use [nuget](nuget-exe.md) and [dotnet](dotnet-exe.md). Ignore any content about the Credential Provider or Personal Access Tokens—everything will work using your domain credentials. + +## Non-domain users (e.g. service accounts, users on non-domain-joined machines) + +> This workflow is **not recommended**, because it requires that you store **your encrypted domain password** on disk. Please consider the security implications before continuing. + +[!INCLUDE [](../_shared/nuget-consume-endpoint.md)] + +Then, run the following command (replacing {values} where applicable): + +```no-highlight +nuget sources add -name {your feed name} -source {your feed URL} -username {your domain username} -password {your domain password} +``` \ No newline at end of file diff --git a/docs/package/nuget/unlist-delete.md b/docs/package/nuget/unlist-delete.md new file mode 100644 index 00000000000..b031f800977 --- /dev/null +++ b/docs/package/nuget/unlist-delete.md @@ -0,0 +1,43 @@ +--- +title: Unlist or delete a NuGet package +description: Unlist or delete a NuGet package from VSTS or Team Foundation Server to discourage or prevent its usage +ms.assetid: 173070F7-CF0B-41DE-AD8B-1881E04E1457 +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Unlist or delete a NuGet package + +[!INCLUDE [](../_shared/availability-nuget.md)] + +There are two options available to remove a version of a NuGet package from a feed. + +1. **Unlist:** unlisting a version of a package modifies how the package appears in NuGet clients (see the [NuGet docs](https://docs.microsoft.com/en-us/nuget/policies/deleting-packages) for a full description of how unlist works). +Unlisting a version can help you prevent new usage of it without breaking dependent projects and builds. +2. **Delete:** Deleting a version of a package makes it permanently unavailable for install or restore. + +Unlist and delete both respect [feed immutability](../feeds/immutability.md). Once you publish a particular version of a package to a feed, that version number is permanently reserved. +You cannot upload a newer revision package with that same version number, or delete it and upload a new package at the same version. + +## Unlisting or deleting a package in VSTS + +You must be a **contributor** to unlist and an **owner** to delete. +To unlist or delete a version of a package, choose the package from the **Packages** menu, and select the appropriate option from the menu under the ellipses. + +![Unlist and delete buttons](_img/unlist-and-delete.png) + +## Unlisting a package using NuGet.exe +First, get the tools (make sure you're using NuGet 3.5 or later) and your feed URL: + +[!INCLUDE [](../_shared/nuget-publish-endpoint.md)] + +Then, run + +```no-highlight +nuget.exe delete {your_package_id} {version} -Source {feed URL} -ApiKey key +``` + +Currently, NuGet.exe can only **unlist** packages; Team Services and TFS interpret `nuget.exe delete` as an unlist operation to be consistent with NuGet.org. To **delete** a package, you must use either the REST APIs or the web interface. \ No newline at end of file diff --git a/docs/package/overview.md b/docs/package/overview.md new file mode 100644 index 00000000000..8d8e6f5ed2c --- /dev/null +++ b/docs/package/overview.md @@ -0,0 +1,39 @@ +--- +title: Package Management in Team Services and TFS +description: Use package management to host and share NuGet packages and npm modules with VSTS or Team Foundation Server +ms.assetid: 7F863543-2AFF-4726-A86A-4CF81DE98DCE +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.topic: get-started-article +ms.manager: douge +ms.author: amullans +ms.date: 09/01/2017 +--- + +# Package Management in Team Services and TFS + +Welcome to package management + +> [!NOTE] +> Package Management is an **[extension](http://go.microsoft.com/fwlink/?LinkId=723595)** that hosts NuGet and npm packages alongside all your other VSTS assets: source code, builds, releases, etc. +> The extension must be installed from the Marketplace to create or consume packages. + +## Package Management Overview + +Package Management introduces the concept of multiple *feeds* that can be used to organize and control access to your packages. If you're familiar with using packages from [NuGet.org](https://www.nuget.org) or modules from [npmjs](https://www.npmjs.com), you can think of those places each as a single feed. You may also have heard feeds called package *repositories*. + +## Get started using Package Management +Get up and running with NuGet or npm in Team Services and TFS in just a few minutes with the [NuGet quick start](get-started-nuget.md) and [npm quick start](get-started-npm.md). + +If you haven't used packages before, see the [conceptual introduction](index.md). When you're ready to get started, [install and license Package Management](install.md). + +## Versions and compatibility +Some package management services are only compatible with specific versions of TFS. Check out the table below to see compatibility. + +| Product | Team Services | TFS | +|---------------|---------------|-----------------------------| +| **NuGet** | Yes | TFS 2017 | +| **npm** | Yes | TFS 2017 Update 1 and newer | + +## Other package types +Need to host other package types (Docker, Cocoapods, etc.)? Tell us on the [Package Management UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services/category/145266-package-management). \ No newline at end of file diff --git a/docs/package/preview/maven-docs.md b/docs/package/preview/maven-docs.md new file mode 100644 index 00000000000..86f512d1a5a --- /dev/null +++ b/docs/package/preview/maven-docs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/package/get-started-maven +--- \ No newline at end of file diff --git a/docs/package/preview/updated-experience.md b/docs/package/preview/updated-experience.md new file mode 100644 index 00000000000..f1b4cc4dc40 --- /dev/null +++ b/docs/package/preview/updated-experience.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/package/index +--- \ No newline at end of file diff --git a/docs/package/symbol/_img/connectsymbolserver.png b/docs/package/symbol/_img/connectsymbolserver.png new file mode 100644 index 00000000000..2cdfd5e3c4a Binary files /dev/null and b/docs/package/symbol/_img/connectsymbolserver.png differ diff --git a/docs/package/symbol/_img/symboltaskv2.png b/docs/package/symbol/_img/symboltaskv2.png new file mode 100644 index 00000000000..bd98f7595d4 Binary files /dev/null and b/docs/package/symbol/_img/symboltaskv2.png differ diff --git a/docs/package/symbol/_img/vsdebugger1.jpg b/docs/package/symbol/_img/vsdebugger1.jpg new file mode 100644 index 00000000000..5528245e5be Binary files /dev/null and b/docs/package/symbol/_img/vsdebugger1.jpg differ diff --git a/docs/package/symbol/_img/vsdebugger2.png b/docs/package/symbol/_img/vsdebugger2.png new file mode 100644 index 00000000000..015183572f0 Binary files /dev/null and b/docs/package/symbol/_img/vsdebugger2.png differ diff --git a/docs/package/symbol/setup.md b/docs/package/symbol/setup.md new file mode 100644 index 00000000000..3c7f1434209 --- /dev/null +++ b/docs/package/symbol/setup.md @@ -0,0 +1,68 @@ +--- +title: Use Symbol Server in Team Services +description: Use the Symbol Server feature in VSTS to make debugging easier +ms.prod: vs-devops-alm +ms.technology: vs-devops-package +ms.topic: get-started-article +ms.assetid: d14e9bc0-e333-4a46-a5dc-e081e7594316 +ms.manager: douge +ms.author: dandanhe +ms.date: 07/04/2017 +--- + +# Use Symbol Server in Team Services + +**Team Services** + +Symbol servers enable debuggers to automatically retrieve the correct symbol files without knowing product names, build numbers or package names. +The Symbol Server in Team Services stores content in Azure Storage and provides file identity access to debug artifacts (both symbol files and the binary image) used by debuggers. +The symbols are accessible to valid users in the Team Services account. This makes it easier to debug packages that are shared across multiple teams/projects. +The following sections describe how to publish symbols to Team Services and how to configure Visual Studio to access them. + +## Before you start +The Symbol Server feature in Team Services is currently in private preview. If you'd like to participate in the private preview, please email with the name of your Team Services account so the feature can be enabled for your account. + +Consuming symbols from the Team Services Symbol Server requires Visual Studio 2017 version 15.3 Preview 5 or later. + +## Publish symbols +In order to publish symbols to Team Services, include the **Index Sources and Publish Symbols** task in your build definition. Configure the task as follows: + +* For **Version**, select the 2.\* (preview). +* For **Symbol Server Type**, select **Team Services**. +* Use the **Path to symbols folder** argument to specify the root directory that contains the .pdb files to be published. +* Use the **Search pattern** argument to specify search criteria to find the .pdb files in the folder that you specify in **Path to symbols folder**. You can use a single-folder wildcard (```*```) and recursive wildcards (```**```). +For example, ```**\bin\**\*.pdb``` searches for all *.pdb* files in all subdirectories named *bin*. + +![Publish Symbols Task](_img/symboltaskv2.png) + +### Publish symbols for NuGet packages +To publish symbols for NuGet packages, include the above task in the build definition that produces the NuGet packages. Then the symbols will be available to all users in the Team Services account. + +## Consume symbols + +Visual Studio 2017 version 15.3 Preview 5 and later supports consuming symbols from a Team Services Symbol Server. +You can select and add VSTS symbol paths to your Visual Studio environment using the Tools->Options->Debugger->Symbols page. + +![Add VSTS Symbol Server in VS Debugger](_img/vsdebugger1.jpg) + +In the **Connect to VSTS Symbol Server** dialog, select the Team Services account to which the symbols have been published and the corresponding user identity that has access to this Team Services account. + +![Connect to VSTS Symbol Server](_img/connectsymbolserver.png) + +Click **Connect** in the above dialog. The Team Services Symbol Server is now remembered by Visual Studio. When a debugging session begins, Visual Studio will be able to get symbols from Team Services. + +![Add VSTS Symbol Server in VS Debugger](_img/vsdebugger2.png) + +## Q&A + + +#### Q: What's the retention policy for the symbols stored in the Team Services symbol server? + +A: Symbols will have the same retention as the build. When you delete a build, you also delete the symbols produced by that build. + +#### Q: Is this available in TFS? + +A: In TFS, you can bring your own file share and set it up as a symbol server as described in [this blog](https://edsquared.com/source-server-and-symbol-server-support-in-tfs-2010-cf35ed5527e2). + + + diff --git a/docs/package/toc.yml b/docs/package/toc.yml new file mode 100644 index 00000000000..fdfc0968e7c --- /dev/null +++ b/docs/package/toc.yml @@ -0,0 +1,102 @@ +- name: Package Management + href: index.md +- name: Overview + items: + - name: About Package Management + href: overview.md +- name: Quickstarts + items: + - name: Install and license Package Management + href: install.md + - name: Get started with NuGet + href: get-started-nuget.md + - name: Get started with npm + href: get-started-npm.md + - name: Get started with Maven + href: get-started-maven.md +- name: How-to + items: + - name: Use Package Management in Team Build + items: + - name: NuGet + items: + - name: Restore Package Management NuGet packages + href: /vsts/build-release/packages/nuget-restore?toc=/vsts/package/toc.json + - name: Publish Package Management NuGet packages + href: /vsts/build-release/packages/nuget-pack-publish?toc=/vsts/package/toc.json + - name: Set up Jenkins + NuGet + href: /vsts/build-release/packages/jenkins?toc=/vsts/package/toc.json + - name: npm + items: + - name: Use Package Management npm packages + href: /vsts/build-release/packages/npm?toc=/vsts/package/toc.json + - name: Maven + items: + - name: Use Package Management Maven packages + href: /vsts/build-release/packages/maven?toc=/vsts/package/toc.json + - name: Use feeds + items: + - name: Create a feed + href: feeds/create-feed.md + - name: Edit a feed + href: feeds/edit-feed.md + - name: Set permissions + href: feeds/feed-permissions.md + - name: Communicate quality with release views + href: feeds/views.md + - name: Grant access to teams and builds + href: feeds/common-identities.md + - name: Understand immutability + href: feeds/immutability.md + - name: Use NuGet packages + items: + - name: Publish a NuGet package + href: nuget/publish.md + - name: Consume NuGet packages + href: nuget/consume.md + - name: Unlist or delete a NuGet package + href: nuget/unlist-delete.md + - name: Use NuGet with Team Services + href: nuget/nuget-exe.md + - name: Use dotnet with Team Services + href: nuget/dotnet-exe.md + - name: Use NuGet or dotnet with TFS + href: nuget/tfs.md + - name: Set up a multi-developer environment + href: nuget/bootstrap-nuget.md + - name: Move your packages to the cloud + href: nuget/move-from-fileshares.md + - name: Use npm packages + items: + - name: Set up your client's npmrc + href: npm/npmrc.md + - name: Use packages from npmjs.com + href: npm/upstream-sources.md + - name: Publish an npm package + href: npm/publish.md + - name: Install an npm package + href: npm/install.md + - name: Deprecate or unpublish an npm package + href: npm/deprecate-unpublish.md + - name: Use npm scopes + href: npm/scopes.md + - name: Use Maven packages + items: + - name: Set up your client's pom and settings .XML + href: ./maven/pom-and-settings.md + - name: Publish a Maven project + href: ./maven/publish.md + - name: Install a Maven project + href: ./maven/install.md + - name: Use Gradle packages + items: + - name: Pull and build a Gradle package + href: ./gradle/pull-package-gradle.md + - name: Publish a Gradle package + href: ./gradle/publish-package-gradle.md +- name: Reference + items: + - name: Collaborate with packages + href: collaborate-with-packages.md + - name: About release views + href: feeds/about-release-views.md \ No newline at end of file diff --git a/docs/provide-feedback.md b/docs/provide-feedback.md new file mode 100644 index 00000000000..6478e9c7e63 --- /dev/null +++ b/docs/provide-feedback.md @@ -0,0 +1,180 @@ +--- +title: Provide product and content feedback | Team Services & TFS +description: Guide to providing product and content feedback as well as accessing other resources when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 8A725F33-19F1-4964-BD5C-E1FB92F02B6E +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + +# Provide product and content feedback + +[!INCLUDE [temp](./work/_shared/dev15-version-header.md)] + +We welcome your feedback. Tell us your ideas for improving our content or products. + +If you have product feedback—such as a feature request, complaint, or bug—you'll want to go to the right place to enter it. Or, post a question or search one of the forums to find your answer. + +Here are the quick-access links to use: + +> [!div class="mx-tdBreakAll"] +> |Content feedback |Product feedback |Service & support | Community forums | +> |-------------|----------|---------|---------| +> |- [Rate a topic](#content-feedback)
        -[Provide feedback](#content-feedback) |- [Team Services](http://visualstudio.uservoice.com/forums/330519-team-services)
        -[TFS](http://visualstudio.uservoice.com/forums/330519-team-services)
        -[Visual Studio](https://visualstudio.uservoice.com/forums/121579-visual-studio)
        -[Visual Studio Code](http://visualstudio.uservoice.com/forums/293070-visual-studio-code)
        -[Visual Studio Feedback Center](http://developercommunity.visualstudio.com/) |- [Service issue](https://support.microsoft.com/en-us/getsupport?tenant=ClassicCommercial&locale=en-us&supportregion=en-us&pesid=15339&oaspworkflow=start_1.0.0.0&ccsid=636036154608504739)
        -[Subscriber support](https://www.visualstudio.com/en-us/support/subscription-support-vs)
        -[Billing support](https://portal.azure.com/#blade/Microsoft_Azure_Support/HelpAndSupportBlade)
        -[Product downloads](https://www.visualstudio.com/downloads/download-visual-studio-vs)
        -[Team Services status](https://blogs.msdn.microsoft.com/vsoservice/)
        -[Azure status](https://azure.microsoft.com/en-us/status/)
        -[Licensing white paper](https://www.microsoft.com/EN-US/privacystatement/OnlineServices/Default.aspx)
        -[Privacy policy](https://www.microsoft.com/EN-US/privacystatement/OnlineServices/Default.aspx) | - [Visual Studio](https://social.msdn.microsoft.com/Forums/vstudio/en-US/home)
        -[Team Services & TFS](https://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=TFService)
        -[General](https://social.msdn.microsoft.com/Forums/vstudio/home?forum=tfsgeneral)
        -[Source code & version control](https://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=tfsversioncontrol)
        -[Project management & work items](https://social.msdn.microsoft.com/Forums/vstudio/home?forum=tfsworkitemtracking)
        -[Process templates](https://social.msdn.microsoft.com/Forums/vstudio/home?forum=tfsprocess)
        -[Reporting](https://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=tfsreporting)
        -[Build & release management](https://social.msdn.microsoft.com/Forums/vstudio/home?forum=tfsbuild)
        -[Eclipse & cross platform](https://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=tee)
        -[Setup & administration](https://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=tfsadmin)
        -[Stack Overflow, Team Services](http://stackoverflow.com/questions/tagged/vs-team-services)
        -[Stack Overflow, TFS](http://stackoverflow.com/questions/tagged/tfs) | + + +**Blogs & videos** +- [Visual Studio](https://blogs.msdn.microsoft.com/visualstudio/) +- [devops](https://blogs.msdn.microsoft.com/visualstudioalm/) +- [Brian Harry's](https://blogs.msdn.microsoft.com/bharry/) +- [TFS support](https://blogs.msdn.microsoft.com/tfssetup/) +- [DevOps videos](https://channel9.msdn.com/DevOps) + + + + + + + +## Content feedback + +Help us improve our content by rating it and giving us feedback. + +   *Can't find an answer you're looking for?*
        +   *Want more detailed examples?*
        +   *Want to know if a specific version is supported?* + +Use our content feedback channel to let us know (Is this page helpful?) located at the bottom-right of the page. This button appears for all topics under visualstudio.com/docs. If you're looking for an answer and you can't find it, let us know and we'll work to update the topic with an answer. Simply click Yes or /No to rate the topic and fill out the form. + + Topic feedback form + +About half of the feedback we get is product related. Customers want to know if a feature is supported, or they suggest a new feature. If that's what you want to do, we suggest you submit a request for a new feature through our [UserVoice channel](http://visualstudio.uservoice.com/forums/330519-team-services), or ask a question in one of our [forums](https://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=TFService) to learn if a feature is supported. + +### Print a topic + +You can print most topics using your browser's print function. Most of the latest browser versions for Edge and Chrome provide various options to simplify the contents prior to printing. These browsers also support saving the topic as a pdf file. + +## Product feedback, report an issue + +You can provide feedback for any Visual Studio product at the [Developer Community](https://developercommunity.visualstudio.com/). Or, from within Visual Studio, you can report a problem and review other trending issues. + +![Visual Studio, Report a problem](_img/provide-feedback-report-problem.png) + +To learn more about reporting a problem, see [Report a problem with Visual Studio](https://msdn.microsoft.com/en-us/library/mt632287.aspx) + + +## Learn about the latest updates + +Every three weeks or so we update Team Services and provide a summary of new and updated features through our [Product features timeline](https://www.visualstudio.com/news/release-archive-vso). + + +## Platforms and version support + +We add new features all the time, especially to our Team Services cloud offering. Later, most of these features make there way into our on-premises TFS product. To learn about whats new and coming, check out the [Features timeline pages](https://www.visualstudio.com/en-us/news/release-archive-vso). + +Our content supports both platforms—Team Services and TFS— and multiple versions of TFS. At the top of each topic, you'll see a platform/version heading to alert you as to which platforms and versions are supported. For example: + +Topic platform-version header + +In general, a feature is supported for all subsequent versions of TFS, unless specifically noted. Some topics include a link to previous versions which describe how the feature worked for an earlier version of TFS. + +If the platform-version heading is missing, and you're unsure of whether it's supported, click the Yes/No link and let us know through our content feedback channel. + +### What platform/version am I using? + +You can tell what platform you use from the URL you use to connect to Team Services or TFS. + +**Team Services** +A Team Services URL consists of an account name and visual studio.com, for example: ```https://{youraccount}.visualstudio.com```. + +To learn the version number, enter the following address in a web browser: +``` +https://AccountName.visualstudio.com/_home/About +``` +A page similar to the one shown will open showing the version number. + +Team Services About page, version number + + +**TFS** + +A TFS URL consists of a server name and collection, for example: ```https://ServerName:8080/tfs/CollectionName```. + +To learn the version number, enter the following address in a web browser: +``` +https://ServerName:8080/tfs/_home/About +``` +A page similar to the one shown will open showing the version number. + +TFS About page, version number + + +|  TFS release  |  Update  |  Version number  | +|-------------|--------|----------------| +|TFS 2017.1 | RTW | 15.112.26307.0 | +|TFS 2017 | RTW | 15.105.25910.0 | +|TFS 2017 | RC1 | 15.103.25603.0 | +|TFS 2015 | Update 3 | 14.102.25423.0 | +| | Update 2.1 | 14.95.25229.0 | +| | Update 2 | 14.95.25122.0 | +| | Update 2 RC 2 | 14.95.25029.0 | +| | Update 2 RC 1 | 14.95.25005.0 | +| | Update 1 | 14.0.24712.0 | +| | Update 1 RC 2 | 14.0.24626.0 | +| | Update 1 RC 1 | 14.0.24606.0 | +| | RTM | 14.0.23128.0 | +| | RC2 | 14.0.23102.0 | +| | RC | 14.0.22824.0 | +| | CTP | 14.0.22604.0 | +| TFS 2013 | Update 5 | 12.0.40629.0 | +| | Update 4 | 12.0.31101.0 | +| | Update 4 RC | 12.0.31010.0 | +| | Update 3 | 12.0.30723.0 | +| | Update 3 RC | 12.0.30626.0 | +| | Update 2 | 12.0.30324.0 | +| | RTM | 12.0.21005.1 | +| | RC | 12.0.20827.3 | +| TFS 2012 | Update 4 | 11.0.61030.0| +| | Update 3 | 11.0.60610.1 | +| | Update 2 | 11.0.60315.1 | +| | CU 1 | 11.0.60123.100 | +| | Update 1 | 11.0.51106.1| +| | RTM | 11.0.50727.1 | +| TFS 2010 | CU 2 | 10.0.40219.371 | +| | SP1 | 10.0.40219.1| +| | RTM | 10.0.30319.1| +| TFS 2008| SP1 | 9.0.30729.1 | +| | RTM | 9.0.21022.8| +| TFS 2005 | SP1 | 8.0.50727.762| +| | RTM | 8.0.50727.147| + + + + + +## Developer community - get involved +You can view code from other developers and share your own examples using these websites: + +- [Github, Microsoft repo](https://github.com/Microsoft): Open source git hub repository from Microsoft +- [Github, Microsoft Azure repo](https://github.com/Azure ): APIs, SDKs and open source projects from Microsoft Azure +- [Developer code samples](https://code.msdn.microsoft.com/): Download code samples and applications for Windows 8, Windows Phone, Microsoft Azure, Office, SharePoint, Silverlight and other products. You can also explore the Official Visual Studio C#, VB.NET, and 101 LINQ samples. +- [CodePlex](http://www.codeplex.com/): Microsoft's free open source project hosting site. You can create projects to share with the world, collaborate with others on their projects, and download open source software. + + +## Related notes +- [Visual studio - talk to us](https://msdn.microsoft.com/en-us/library/b8akas30.aspx) +- [Report a problem with Visual Studio](https://msdn.microsoft.com/en-us/library/mt632287.aspx) diff --git a/docs/quickstart/_img/stakholder-add-work-item-tfs-queries-page.png b/docs/quickstart/_img/stakholder-add-work-item-tfs-queries-page.png new file mode 100644 index 00000000000..fd22647a308 Binary files /dev/null and b/docs/quickstart/_img/stakholder-add-work-item-tfs-queries-page.png differ diff --git a/docs/quickstart/_img/work-as-a-stakeholder-add-pbi.png b/docs/quickstart/_img/work-as-a-stakeholder-add-pbi.png new file mode 100644 index 00000000000..b537d214cb3 Binary files /dev/null and b/docs/quickstart/_img/work-as-a-stakeholder-add-pbi.png differ diff --git a/docs/quickstart/_img/work-as-a-stakeholder-check-backlog.png b/docs/quickstart/_img/work-as-a-stakeholder-check-backlog.png new file mode 100644 index 00000000000..acd5ae0f7c1 Binary files /dev/null and b/docs/quickstart/_img/work-as-a-stakeholder-check-backlog.png differ diff --git a/docs/quickstart/_img/work-as-a-stakeholder-edit-query.png b/docs/quickstart/_img/work-as-a-stakeholder-edit-query.png new file mode 100644 index 00000000000..5bea3dd14c8 Binary files /dev/null and b/docs/quickstart/_img/work-as-a-stakeholder-edit-query.png differ diff --git a/docs/quickstart/_img/work-as-a-stakeholder-open-shared-query.png b/docs/quickstart/_img/work-as-a-stakeholder-open-shared-query.png new file mode 100644 index 00000000000..da7f8b23767 Binary files /dev/null and b/docs/quickstart/_img/work-as-a-stakeholder-open-shared-query.png differ diff --git a/docs/quickstart/_img/work-as-a-stakeholder-query.png b/docs/quickstart/_img/work-as-a-stakeholder-query.png new file mode 100644 index 00000000000..2bcf7667c0a Binary files /dev/null and b/docs/quickstart/_img/work-as-a-stakeholder-query.png differ diff --git a/docs/quickstart/_img/work-as-a-stakeholder-view-kanban-board.png b/docs/quickstart/_img/work-as-a-stakeholder-view-kanban-board.png new file mode 100644 index 00000000000..849e2d9b579 Binary files /dev/null and b/docs/quickstart/_img/work-as-a-stakeholder-view-kanban-board.png differ diff --git a/docs/quickstart/get-started-stakeholder.md b/docs/quickstart/get-started-stakeholder.md new file mode 100644 index 00000000000..d1eb0976f9c --- /dev/null +++ b/docs/quickstart/get-started-stakeholder.md @@ -0,0 +1,165 @@ +--- +title: Get started with Stakeholder access in VSTS or TFS +description: Quickstart guide to working with Stakeholder access to Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: D76507F1-3154-4EE5-A23A-9179C2F5A365 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/15/2017 +--- + +# Get started as a Stakeholder + +Team Services | TFS 2017 | TFS 2015 | TFS 2013 + + +With Stakeholder access, you can add and modify work items, approve releases, and view dashboards. You can check project status and provide direction, feedback, feature ideas, and business alignment to a team. + +Use this topic to learn: + +> [!div class="checklist"]    +> * How to sign-in to an account +> * How to add a work item +> * How to view the product backlog and add new work to it +> * How to view work in progress on the Kanban board +> * Find work assigned to you, or query for other work items +> * Understand the set of features you have access to + +## First time signing in + +1. If you're connecting to Team Services, click the link provided in the email invitation you should have received. + + Or, open a browser window and enter the URL for the web portal. + + **Team Services:** ```http://AccountName.visualstudio.com/DefaultCollection/ProjectName``` + + **On-premises TFS:** ```http://ServerName:8080/tfs/DefaultCollection/ProjectName``` + + For example, to connect to the server named *FabrikamPrime* and project named *Contoso*, type ```http://FabrikamPrime:8080/tfs/DefaultCollection/Contoso```. + +2. Enter your credentials. If you aren't able to sign in, ask the account owner or project administrator to add you as a member of the team project with Stakeholder access. + + + +## Add a work item + +You might see different work item types in your view based on the process selected for your team project: [Scrum](../work/guidance/scrum-process.md), [Agile](../work/guidance/agile-process.md), or [CMMI](../work/guidance/cmmi-process.md). + + +>[!NOTE] +>A caution icon on a tab indicates values that violate validation rules. You must correct information on that tab in order to save the work item.    + +#### Team Services, TFS 2017 + +From the Work hub, choose a work item, for example User Story, from the New Work Item list of options. Click the ![pin icon](../work/_img/icons/pin-icon.png) pin icon to have it show up within the Work hub drop down menu. + +Web portal, project page, Work hub, Add a work item + +Enter a title and then save the work item. Before you can change the State from its initial default, you must save it. + +Agile process, User story work item form + +#### TFS 2015 + +From the Queries page, choose a work item from the New drop down menu. + +TFS 2015, TFS 2013-Queries page, Add a work item + +Enter a title and then save the work item. Before you can change the State from its initial default, you must save it. + + +You can [add existing tags to any work item to support filter backlogs and queries](../work/track/add-tags-to-work-items.md). + +Work items you add are automatically scoped to your [team's area and iteration paths](../work/scale/set-team-defaults.md). To change the team context, see [Switch team project or team focus](../work//how-to/switch-team-context-work.md). + +>[!NOTE] +>Depending on the process chosen when the team project was created—[Scrum](../work/guidance/scrum-process.md), +[Agile](../work/guidance/agile-process.md), or [CMMI](../work/guidance/cmmi-process.md)—the types of work items you can create will differ. For example, backlog items may be called product backlog items (Scrum), user stories (Agile), or requirements (CMMI). All three are similar: they describe the customer value to deliver and the work to be performed. +> +> For an overview of all three processes, see [Choose a process](../work/guidance/choose-process.md). + + + + +## Check the backlog or add new work + +Work appears in the backlog in priority order. + +1. To view or edit a work item, select it and choose Enter. + + Backlog page with work items in priority order + +2. To add a new item, select the type and then name it. Your items are added to the bottom of the list. + + Add a backlog item from the quick add panel + +## Check work in progress + +To view the team's work status, open the Kanban board. Chick the title of an item to open or edit it. + +View Kanban board + + +## Find work assigned to you, or query for other work items + +Open the Queries page to see the list of work items assigned to you. + +Queries page, items assigned to you + +Or, open any of the queries defined in the Shared Queries folder. + +Run a shared query + +And, you can [create new queries or edit existing queries](../work/track/using-queries.md) and save them under My Queries folder. + +Query Editor + + + +## Related notes +For a comparison chart of Stakeholder vs Basic access, see this [feature matrix](https://www.visualstudio.com/team-services/compare-features/). See also these quickstart guides: + +- [Add work items](../work/backlogs/add-work-items.md) +- [Create your backlog](../work/backlogs/create-your-backlog.md) +- [Kanban quickstart](../work/kanban/kanban-quickstart.md) + + + +### Stakeholder feature access + +>[!NOTE] +>**Feature availability**: The following features are available from Team Services or from the web portal of the listed on-premises TFS version or a later version. Those not annotated are available from all platforms and versions. To determine your platform or TFS version, see [Platform and version support](../provide-feedback.md#platform-version). + +> [!div class="mx-tdBreakAll"] +> |Work |Account, Dashboards, and Notifications| +> |-------------|----------| +> |- [View, create, and modify work items](#create-work-item) 4
        - [View, add, and modify items on backlogs](#check-backlog) 5
        - [View, and modify items on sprint backlogs](../work/scrum/sprint-planning.md) 5
        - [View, and modify items on the task board](../work/scrum/task-board.md) 5, 6
        - [View, and modify items (Kanban)](../work/kanban/kanban-basics.md) 5, 6
        - [Add tasks to the checklist (Kanban)](../work/kanban/add-task-checklists.md) 5, 6 (TFS 2015.1)
        - >[Follow changes made to work items](../collaborate/follow-work-items.md) (TFS 2017)
        - [View the cumulative flow diagram](../report/guidance/cumulative-flow.md)
        - [View, create, and save queries](#query) 7
        - [Submit, view, and change feedback responses](../work/connect/give-feedback.md)
        - [Change work item type](../work/backlogs/remove-delete-work-items.md) (Team Services
        **Build & Release**
        - [View releases](../build-release/actions/view-manage-releases.md) 3 (TFS 2015.2)
        - [Approve a release](../build-release/concepts/definitions/release/environments.md#approvals) (TFS 2015.2) | [Navigate to teams, team projects, and more](../connect/account-home-pages.md) (Team Services)
        - [View project welcome pages](../collaborate/project-vision-status.md) (Team Services)
        - [View team dashboards](../report/dashboards.md) 1
        - [Manage personal notifications](../notifications/manage-personal-notifications.md) (Team Services, TFS 2017)
        - [Set personal alerts for changes to work items](../work/track/alerts-and-notifications.md) (TFS)
        - [Invite users and assign licenses](../accounts/add-account-users-assign-access-levels.md) 2 (Team Services) | + +**Notes:** +1. Stakeholders cannot view markdown README files defined for repositories. +2. In order to add users and assign licenses for Team Services, stakeholders must be added to the [Project Collection Administrators](../tfs-server/add-administrator-tfs.md) group. Also, they must use the current Users page (not the Streamlined User Management page under preview) in order to manage users. To learn more, see [Manage users and access](../accounts/add-account-users-assign-access-levels.md). +3. Stakeholders can only view and approve releases. +4. Stakeholders can assign existing tags to work items, but not create new tags. +5. Stakeholders cannot change the backlog priority order (all items are added at the end of the backlog), assign items to an iteration using drag and drop, use the mapping pane or forecasting. +6. Stakeholders cannot move cards on the board to update status, set the values of fields shown on cards, or set or view team capacity. +7. Stakeholders can save queries under My Queries but cannot save under Shared Queries. + + +Also, Stakeholders cannot add or view [Delivery Plans](../work/scale/review-team-plans.md). + +If you choose a feature that's not available to you as a stakeholder, you'll receive an error message indicating that you have insufficient permissions when you try to complete the task. + +#### Features stakeholders can't access + +If you need access to the following features—which support the daily work of product owners, team leads, developers, testers, and project administrators—you need to be have Basic access: +- Change the priority of an item within a backlog +- Delete work items or move work items to another team project +- Create shared queries, view charts, and modify the home page +- View Delivery Plans (a Marketplace extension) +- Access the full set of features of the Code, Build, Test, and Release hubs +- Participate in team rooms, which capture interactive, detailed conversations about the project. + +> [!NOTE] +> Stakeholders can view administrative pages that support managing permissions, area and iteration paths, and more; however, for the most part, they can't modify any objects on these pages. The one exception is their ability to [manage users and access](../accounts/add-account-users-assign-access-levels.md). diff --git a/docs/reference/_img/Keyboard shortcuts.pptx b/docs/reference/_img/Keyboard shortcuts.pptx new file mode 100644 index 00000000000..da238f7f2d6 Binary files /dev/null and b/docs/reference/_img/Keyboard shortcuts.pptx differ diff --git a/docs/reference/_img/attach_files.png b/docs/reference/_img/attach_files.png new file mode 100644 index 00000000000..3db027277fd Binary files /dev/null and b/docs/reference/_img/attach_files.png differ diff --git a/docs/reference/_img/markdown-add-file-to-dashboard.png b/docs/reference/_img/markdown-add-file-to-dashboard.png new file mode 100644 index 00000000000..68575392a8a Binary files /dev/null and b/docs/reference/_img/markdown-add-file-to-dashboard.png differ diff --git a/docs/reference/_img/markdown-add-file.bmp b/docs/reference/_img/markdown-add-file.bmp new file mode 100644 index 00000000000..1716ca92f2a Binary files /dev/null and b/docs/reference/_img/markdown-add-file.bmp differ diff --git a/docs/reference/_img/markdown-checklists.png b/docs/reference/_img/markdown-checklists.png new file mode 100644 index 00000000000..ca56d872ee8 Binary files /dev/null and b/docs/reference/_img/markdown-checklists.png differ diff --git a/docs/reference/_img/markdown-embedded-video.jpg b/docs/reference/_img/markdown-embedded-video.jpg new file mode 100644 index 00000000000..880792b715a Binary files /dev/null and b/docs/reference/_img/markdown-embedded-video.jpg differ diff --git a/docs/reference/_img/markdown-hybrid-tables.JPG b/docs/reference/_img/markdown-hybrid-tables.JPG new file mode 100644 index 00000000000..872a247ba68 Binary files /dev/null and b/docs/reference/_img/markdown-hybrid-tables.JPG differ diff --git a/docs/reference/_img/markdown-rich-text-formats.jpg b/docs/reference/_img/markdown-rich-text-formats.jpg new file mode 100644 index 00000000000..15190a7164c Binary files /dev/null and b/docs/reference/_img/markdown-rich-text-formats.jpg differ diff --git a/docs/reference/_img/markdown-widget-configured.png b/docs/reference/_img/markdown-widget-configured.png new file mode 100644 index 00000000000..c32cf21cfef Binary files /dev/null and b/docs/reference/_img/markdown-widget-configured.png differ diff --git a/docs/reference/_img/markdown_quote.png b/docs/reference/_img/markdown_quote.png new file mode 100644 index 00000000000..80a07ce90d5 Binary files /dev/null and b/docs/reference/_img/markdown_quote.png differ diff --git a/docs/reference/_img/markdown_quote2.jpg b/docs/reference/_img/markdown_quote2.jpg new file mode 100644 index 00000000000..eb0f8bca4f7 Binary files /dev/null and b/docs/reference/_img/markdown_quote2.jpg differ diff --git a/docs/reference/_img/mrkdown-headers.png b/docs/reference/_img/mrkdown-headers.png new file mode 100644 index 00000000000..0f6485193eb Binary files /dev/null and b/docs/reference/_img/mrkdown-headers.png differ diff --git a/docs/reference/_img/rate-limits/usage-pca.png b/docs/reference/_img/rate-limits/usage-pca.png new file mode 100644 index 00000000000..48efee04492 Binary files /dev/null and b/docs/reference/_img/rate-limits/usage-pca.png differ diff --git a/docs/reference/_img/rate-limits/usage-tstu.png b/docs/reference/_img/rate-limits/usage-tstu.png new file mode 100644 index 00000000000..a20cc555bda Binary files /dev/null and b/docs/reference/_img/rate-limits/usage-tstu.png differ diff --git a/docs/reference/_img/rate-limits/web-ui-warning-banner.png b/docs/reference/_img/rate-limits/web-ui-warning-banner.png new file mode 100644 index 00000000000..b9c957dfc05 Binary files /dev/null and b/docs/reference/_img/rate-limits/web-ui-warning-banner.png differ diff --git a/docs/reference/_img/vstswiki_mid.mp4 b/docs/reference/_img/vstswiki_mid.mp4 new file mode 100644 index 00000000000..0da6e6c43f1 Binary files /dev/null and b/docs/reference/_img/vstswiki_mid.mp4 differ diff --git a/docs/reference/integration-bestpractices.md b/docs/reference/integration-bestpractices.md new file mode 100644 index 00000000000..b7f2aa6080e --- /dev/null +++ b/docs/reference/integration-bestpractices.md @@ -0,0 +1,79 @@ +--- +title: Integration best practices +titleSuffix: VSTS +description: Best practices when integrating with the VSTS REST API's +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 9E1F3FD7-E1C1-44D9-B265-5368B3BD621E +ms.manager: douge +ms.author: DAHELLEM +ms.date: 01/25/2017 +--- + + + +#Best Practices + +**VSTS** + +Visual Studio Team Services (VSTS), like many Software-as-a-Service solutions, uses multi-tenancy to reduce costs and to enhance scalability and performance. This leaves users vulnerable to performance issues and even outages when other users of their shared resources have spikes in their consumption. To combat these problems, VSTS enforces [Rate Limits](./rate-limits.md) to limit the resources individuals can consume and the number of requests they can make to certain commands. When these limits are exceeded, subsequent requests may be either delayed or blocked. + +For many teams, VSTS is one of several tools that are used to effectively run an organization. Therefore tools and integrations between services are built to improve efficiencies. For example, you may have application that automatically creates a bug in VSTS when an error is logged. If you are not careful, automated tools can get out of control executing a high rate of requests. This will quickly cause VSTS to enforce rate limits to your account. To help reduce your risk of hitting the rate limits, follow these best practices when using the REST API's to integrate with VSTS + +##Push only actionable work items +Only push items into VSTS when it is an actionable work item that your team actually going to engage on or address in the future. Keep work items out of VSTS until absolutely necessary. + +For example, don't attempt to store telemetry data in Team Sevices. + +##Maintain your own data store +Don't add work items into VSTS for the sake of having them all in one place. VSTS is not designed as a data storage service. You should maintain your own data store. + +##Batch your changes +Doing single operations is slow and expensive. This the leading cause for performance issues and rate limiting. Batch your changes into a single call. See our [batch documentation](https://visualstudio.com/integrate/api/wit/batch.md) and [sample code](https://visualstudio.com/integrate/api/wit/samples.md#create-a-user-story-and-a-child-task) for guidance. + +##Limit your revisions +Many revisions on a single work items creates bloat and causes performance problems. We recommend the following: + +* Reduce your updates by batching your field changes. Don't update just one field at a time. +* If you have changes to multiple work items, batch those changes into a single post. +* Keep the number of revisions to a minimum to avoid revision limits + +##Optimize queries +Optimize your queries to return a modest number of results. Complex conditions and filters can lead to long running queries. Keep your queries execution time under 30 seconds to avoid threshold failures. + +####Query Performance Tips +* Place a date or range limiting clause near the top whenever possible +* Reduce the number of clauses that use the 'Ever' operator +* Reduce the number of clauses that use the 'Contains' operator, except for Tags + - Use the 'Contains Words' operator when available + - 'Contains' operator on long text fields is particularly expensive +* When possible, avoid the '<>' and not operators +* Avoid using the 'In Group' operator on large groups +* Minimize the number of Ors and ensure you still have top level scoping before the Ors +* Avoid using an OR clause between an 'In Group' operator and Area or Iteration Paths. +* When possible, reduce the number of overall clauses to achieve your objective +* When possible, avoid sorting on anything other than core fields such as ID +* If you want to sort on a custom field it performs best if you are using it in your filters +* If querying, specify a Team Project if possible. Otherwise the query gets scoped to the entire collection and could take dramatically longer than it needs to. Uncheck "Query across projects on the top right corner" of the query editor. + +####Query Across projects +* If the query does require search across projects, specify which Team Project it is looking for. +* When possible, use "Tags" instead of "Keywords" (unless searching for partial text of a string is needed) +* Don't forget about VSTS dashboard charts, as behind each charts are queries (and trending view impact performance the worst). + +##Handle failures gracefully +Updates and queries will fail when resource limits or frequency of utilization crosses the limit threshold. For example, a query that runs longer than 30 seconds will return the following error: + +```VS402335: The timeout period (30 seconds) elapsed prior to completion of the query or the server is not responding.``` + +When consuming the REST API's, make sure your code is designed to handle failures appropriately. + +##Limit your links +Limit the number of links per work item as much as possible. We recommend that you try and keep the number of links to a minimum to avoid link limits. + +> We will be enforcing work item revision and link limits in the near future. These limits will be determined by performance monitoring and customer feedback. + +## Queries for Reporting +Using queries and individual get work item calls is the number one way to get rate limits enforced on your account. Don't execute queries to return large lists of work items. Use the reporting [work item links](https://www.visualstudio.com/docs/integrate/api/wit/reporting-work-item-links) and [work item revisions](https://www.visualstudio.com/en-us/integrate/api/wit/reporting-work-item-revisions) REST API's instead. + +You can see our [C# Sample on Github](https://github.com/sferg-msft/vsts-wit-reporting-example) diff --git a/docs/reference/keyboard-shortcuts.md b/docs/reference/keyboard-shortcuts.md new file mode 100644 index 00000000000..1ef8d544c81 --- /dev/null +++ b/docs/reference/keyboard-shortcuts.md @@ -0,0 +1,373 @@ +--- +title: Keyboard shortcuts used in the web portal for VSTS, TFS, and Team Explorer +description: Keyboard shortcuts for Visual Studio Team Services, TFS web portal, and Team Explorer +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.assetid: 35ea128b-7565-4ee3-8266-b9f0d32aecf4 +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# Keyboard shortcuts + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can use the keyboard shortcuts listed in this topic when you work within Visual Studio Team Services (VSTS), the web portal for Team Foundation Server (TFS), or Team Explorer. In addition to these shortcuts, you can [assign your own shortcuts in Visual Studio](https://msdn.microsoft.com/library/5zwses53.aspx) from the **Tools/Options/Environment/Keyboard** page. + +>[!NOTE] +>Feature availability: Some keyboard shortcuts are only available from the cloud service or from an on-premises deployment. These are annotated as follows: +- **VSTS** - Visual Studio Team Services (cloud service) +- **TFS** - Team Foundation Server (on-premises) + + +## Global and hub-specific + +>[!NOTE] +>Feature availability: The following shortcuts are available from the web portal for VSTS and TFS 2015.2 and later versions. + +Type **?** to access the Global and hub-specific shortcuts. Hub-specific shortcuts only work when in the specific hub. + +For example, type **g c** to open the Code hub, and then type **c p** to create a pull request. These navigation shortcuts work as long as the focus is not on an input control. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        +

        **Global** 

        +  ?   Show shortcuts +  p   Projects and teams +  s   [Search](../work/track/using-queries.md) +f,n   Focus next section +f,p   Focus previous section +g,b   Go to [build](../build-release/overview.md) +g,c   Go to [code](../git/overview.md) +g,h   Go to [home](../report/dashboards.md) +g,k   Go to wiki +g,s   Go to [settings](../work/scale/manage-team-assets.md) +g,t   Go to [test](../manual-test/index.md) +g,w   Go to [work](../work/overview.md) +
        + +

        **Code** 

        +    b   Open branches (Git) +    c   Open changesets (TFVC) +    e   Open explorer +    h   Open history (Git) +    q   Open pull requests (Git) +  c,p   Create pull request (Git) +    r   Select repository (Git) +    v   Open shelvesets (TFVC) + +
        +

        **File Explorer** 

        +    1     Open contents +    2     Open history +  c,b     Create branch +    t     Path +    w     Select branch + +
        +

        **Work**

        +  b  Open [board](../work/kanban/kanban-basics.md) +  i  Open [current iteration](../work/scrum/sprint-planning.md) +  l  Open [backlog](../work/backlogs/create-your-backlog.md) +  q  Open [queries](../work/track/using-queries.md) +  t  Open [task board](../work/scrum/task-board.md) +  z  Toggle full screen +
        +

        **Queries**

        +  r  Refresh query +  j  Select next item +  k  Select previous item +c,q  New query + +
        + +

        **Backlogs**

        + +     j    Select next item +     k    Select previous item +Ctrl+j    Move item up +Ctrl+k    Move item down +Ctrl+Home Move item to top + +
        +   m,b    Move item to backlog +   m,i    Move item to current iteration +   m,n    Move item to to next iteration + +
        +   Ins    Create child +     f    Filter by text +     n    Open new panel +     r    Show/hide parents + +
        + + +

        **Kanban**

        + +    c     Add new child item +    e     Show/hide empty fields +    f     Filter by text +    n     Add new item +    o     Expand all swimlanes +    u     Collapse all swimlanes +   ![Up/Down arrow](../work/_img/icons/Arrow_Up.png)![ ](../work/_img/icons/Arrow_Down.png)   Move focus up/down +    F2     Rename item + +
        +Home         Select first item +Enter         Open item +Ctrl+![Up arrow](../work/_img/icons/Arrow_Up.png)       Move item up +Ctrl+![Down arrow](../work/_img/icons/Arrow_Down.png)       Move item down +Ctrl+Home     Move item to top of column +Ctrl+End      Move item to bottom of column +Ctrl+Shift+![Up arrow](../work/_img/icons/Arrow_Up.png) Move item to swimlane above +Ctrl+Shift+![Down arrow](../work/_img/icons/Arrow_Down.png) Move item to swimlane below +Shift+Pageup   Select first/next swimlane above +Shift+Pagedown Select last/next swimlane below + +
        +

        **Test**

        +  h  Open machines + +  m  Open shared parameters +  n  Open test plans +  r  Open runs + +
        +

        **Test plan**

        +     1   Open tests +     2   Open charts +     e   Execute tests +   t,b   Mark selected tests as blocked +   t,f   Fail selected tests +   t,n   Mark selected tests as NA +   t,p   Pass selected tests +   t,r   Reset tests to active +   v,g   View grid + +
        +

        **Parameters**

        +     1    View parameter set grid +     2    View parameter WIT form +   c,s    Add parameter set +   c,t    Add test case +   v,t    Toggle test cases pane +
        +

        **Test runs**

        +     1    Test runs +     2    Filter + +
        + +##Web portal + +You can use these keyboard shortcuts when working in the web portal whether connected to VSTS or TFS. + + + + + + + + +
        +

        **Navigate**

        + +Ctrl+Alt,a   Move focus to ![admin link](../work/_img/icons/gear_icon.png) admin link +Ctrl+Alt,h   Move focus to ![help link](../work/_img/icons/help.png) help link +Ctrl+Alt,s   Move focus to search box +Ctrl+Alt,![Down arrow](../work/_img/icons/Arrow_Down.png)  Move focus to next section +Ctrl+Alt,![Up arrow](../work/_img/icons/Arrow_Up.png)  Move focus to previous section + +
        + +

        **Navigate within lists**

        +Tab         Move focus +![Left/right arrow](../work/_img/icons/Arrow_Next.png) ![ ](../work/_img/icons/Arrow_Previous.png)        Move focus left/right +![Up/Down arrow](../work/_img/icons/Arrow_Up.png) ![ ](../work/_img/icons/Arrow_Down.png)        Move focus up/down +Ctrl+Home   Move focus to top of list +Ctrl+End    Move focus to bottom of list +Ctrl+![Up/Down arrow](../work/_img/icons/Arrow_Up.png) ![ ](../work/_img/icons/Arrow_Down.png)   Move item up/down within list +Shift![Up/Down arrow](../work/_img/icons/Arrow_Up.png) ![ ](../work/_img/icons/Arrow_Down.png)   Highlight consecutive items +Menu        Open context menu +Esc         Dismiss context menu +![Left/right arrow](../work/_img/icons/Arrow_Next.png) ![ ](../work/_img/icons/Arrow_Previous.png)        Move focus left/right +![Up/Down arrow](../work/_img/icons/Arrow_Up.png) ![ ](../work/_img/icons/Arrow_Down.png)        Move focus up/down +Enter       Choose selected menu item + +
        + +##Work item form + +You can use the following shortcuts to format text, cut, copy, and paste text within a work item form, and to save the work item. + +
        +

        Format text

        +
          +
        • Ctrl+b  Bold text
        • +
        • Ctrl+i  Italicize text
        • +
        • Ctrl+u  Underscore text
        • +

        • VSTS
        • +
        • Ctrl+Spacebar Clear formatting
        • +
        +
        + +
        +

        Copy and paste

        +
          +
        • Ctrl+c  Copy text
        • +
        • Ctrl+v  Paste copied text
        • +
        +
        + +
        +

        Save and close

        +
          +
        • Ctrl+s      Save changes
        • +
        • Ctrl+Enter  Save and close
        • +
        • Esc         Close work item
        • +
        +
        + + +
        +
        + +## Navigate within Team Explorer + +Use these shortcuts when working in Team Explorer. You can use query results shortcuts whenever you have a list of work items, such as the query results view or a list of linked work items within a work item form. + + + + + + + + + + + + + + + + +
        +

        **Navigate**

        +Ctrl+0,a   Open web portal +Ctrl+0,b   Open [Build](../build-release/overview.md) +Ctrl+0,c   Open [Connect](https://msdn.microsoft.com/library/ms181475.aspx) +Ctrl+0,d   Open [Documents](https://msdn.microsoft.com/library/ms242883.aspx) +Ctrl+0,e   Open [Branches (Git)](../git/gitquickstart.md) +Ctrl+0,g   Open [Changes (Git)](../git/gitquickstart.md) +Ctrl+0,h   Open Home +Ctrl+0,m   Open [My Work (TFVC)](https://msdn.microsoft.com/library/hh474795.aspx) +Ctrl+0,p   Open [Pending changes (TFVC)](https://msdn.microsoft.com/en-us/library/ms181403.aspx) +Ctrl+0,r   Open [Reports](https://msdn.microsoft.com/library/dd380714.aspx) +Ctrl+0,s   Open Settings +Ctrl+0,w   Open Work items + +
        +Ctrl+'     Move focus to search box +Alt+0      Move focus to to top of page +Alt+1…9    Move focus to visible section [1 thru 9] +Alt+![Up/Down arrow](../work/_img/icons/Arrow_Up.png)![ ](../work/_img/icons/Arrow_Down.png)    Move focus to next/previous section + + +
        +

        **Context menu**

        +![Down arrow](../work/_img/icons/Arrow_Down.png)           Open a context menu +Esc          Dismiss a context menu +![Left/right arrow](../work/_img/icons/Arrow_Next.png) ![ ](../work/_img/icons/Arrow_Previous.png)         Move focus left/right +![Up/Down arrow](../work/_img/icons/Arrow_Up.png) ![ ](../work/_img/icons/Arrow_Down.png)         Move focus up/down +Enter        Choose Context menu +
        +

        **Work item commands**

        + +Alt+m,g      Open work item +Alt+m,i      [Add a work item](../work/backlogs/add-work-items.md) +Alt+m,q      [Add a query](../work/track/using-queries.md) +Shift+Alt,c  Copy selected work item +Shift+Alt,l  Link to new work item +Enter        Open selected work item + + +
        +

        **Query editor**

        +![Left/right arrow](../work/_img/icons/Arrow_Next.png) ![ ](../work/_img/icons/Arrow_Previous.png)       Move focus left/right +![Up/Down arrow](../work/_img/icons/Arrow_Up.png) ![ ](../work/_img/icons/Arrow_Down.png)       Move focus up/down +Enter      Move focus down +Tab        Move focus right, one field at a time +Shift+![Left/right arrow](../work/_img/icons/Arrow_Next.png)![ ](../work/_img/icons/Arrow_Previous.png)  Move focus left/right one field at a time +End        Move focus to end of current clause +
        +Ctrl+c     Copy selected clause +Ctrl+s     Save changes (editor or results) +Ctrl+v     Paste copied clause +Shift+![Up/Down arrow](../work/_img/icons/Arrow_Up.png)![ ](../work/_img/icons/Arrow_Down.png)  Highlight consecutive clauses +Del        Delete contents of current field or clause + + +
        +

        **Query results**

        +F5           Refresh +Shift+![Up/Down arrow](../work/_img/icons/Arrow_Up.png)![ ](../work/_img/icons/Arrow_Down.png)    Highlight consecutive rows +Shift+Alt,n  Move focus to next item +Shift+Alt,p  Move focus to previous item +Home         Move focus to top of list +End          Move focus to bottom of list +
        ++/-          Expand/collapse current row +PgUp/PgDn    Scroll up/down +![Left/right arrow](../work/_img/icons/Arrow_Next.png) ![ ](../work/_img/icons/Arrow_Previous.png)         Scroll left/right +Enter        Open selected work item +Ctrl+s       Save changes + + +
        + + + +## Related notes + +- [Keyboard shortcuts for Microsoft Test Manager](https://msdn.microsoft.com/library/ff458183.aspx) +- [Customize Visual Studio keyboard shortcuts](https://msdn.microsoft.com/library/5zwses53.aspx) +- [Default keyboard shortcuts for Visual Studio](https://msdn.microsoft.com/library/da5kh0wa.aspx) +- [Accessibility Features of Visual Studio](https://msdn.microsoft.com/library/y4b5z3y3.aspx) +- [Work in the web portal](../connect/work-web-portal.md) + +###Install Team Explorer + +Team Explorer is a plug-in to Visual Studio. By installing the free [Visual Studio Community](https://www.visualstudio.com/products/free-developer-offers-vs.aspx) or other Visual Studio version, you gain access to Team Explorer. + +Learn more about [working in Team Explorer](../connect/work-team-explorer.md). diff --git a/docs/reference/markdown-guidance.md b/docs/reference/markdown-guidance.md new file mode 100644 index 00000000000..66f539f794f --- /dev/null +++ b/docs/reference/markdown-guidance.md @@ -0,0 +1,560 @@ +--- +title: Syntax usage for Markdown files and widgets +titleSuffix: | VSTS & TFS +description: Use markdown syntax within pull requests, project pages, readme files, dashboards, and markdown widgets to share information within and across teams +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.assetid: 43D2156E-2E20-42B8-B816-43E95CB479C5 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 09/02/2017 +--- + +# Syntax guidance for Markdown files, widgets, wikis, and pull request comments + +VSTS | TFS 2018 | TFS 2017 | TFS 2015 + +Having the right guidance at the right time is critical to success. To support your team or contributors to your project, use [markdown](https://en.wikipedia.org/wiki/Markdown) to add rich formatting, tables, and images to your project pages, readme files, dashboards, and pull request comments. + +You can provide guidance to your team in these places using markdown: + +- [Project vision page or Welcome pages](../collaborate/project-vision-status.md) +- [Team project wiki](../collaborate/add-edit-wiki.md) +- [Readme files](../git/create-a-readme.md) +- [Pull request comments](../git/pull-requests.md) +- [Markdown widget on a team dashboard](../report/widget-catalog.md#markdown-widget) + +In this topic you'll find some basic Markdown syntax guidance. You can use both common [Markdown conventions](http://daringfireball.net/projects/markdown/syntax) and [Github-flavored extensions](https://help.github.com/articles/github-flavored-markdown/). + +## Headers + +Structure your comments using headers. Headers segment longer comments, making them easier to read. + +Start a line with a hash character `#` to set a heading. Organize your remarks with subheadings by starting a line with additional hash characters, for example `####`. Up to six levels of headings are supported. + +**Example:** +``` +# This is an H1 header +## This is an H2 header +### This is an H3 header +#### This is an H4 header +##### This is an H5 header +``` + +**Result:** + +Web portal, Headers 1 through 5 + +## Paragraphs and line breaks + +Make your text easier to read by breaking it up with paragraphs or line breaks. + +In pull request comments, press Enter to insert a line break and begin text on a new line. + +In a Markdown file or widget, enter two spaces prior to the line break to begin a new paragraph, or enter two line breaks consecutively to begin a new paragraph. + +**Example - pull request comment:** + +
        +Add lines between your text with the Enter key.
        +This spaces your text better and makes it easier to read.
        +
        + +**Result:** +Add lines between your text with the return key +This spaces your text better and makes it easier to read. + + +**Example - markdown file or widget:** + +
        +Add two spaces prior to the end of the line.(space, space)     
        +This adds space in between paragraphs.
        +
        + +**Result:** +Add two spaces prior to the end of the line. + +This adds space in between paragraphs. + + +## Quotes + +Quote previous comments or text to set context for your comment or text. + +Quote single lines of text be putting a `>` before the text. Use multiple `>` characters to nest quoted text. +Quote blocks of lines of text by using the same level of `>` across multiple lines. + +**Example:** + +
        +> Single line quote
        +>> Nested quote   
        +> multiple line
        +> quote
        +
        + +**Result:** + +![quoting in markdown](_img/markdown_quote2.jpg) + + +## Horizontal rules + +Add a horizontal rule by adding a new line that's just a series of dashes `---`. There must be a blank line above the line containing the `---`. + +**Example:** + +
        +
        +above
        + 
        +----
        +below
        +
        +
        + +**Result:** + +above + +----- + +below + + +## Lists + +Organize related items with lists. You can add ordered lists with numbers, or unordered lists with just bullets. + +Ordered lists start with a number followed by a period for each list item. Unordered lists start with a `-`. Begin each list item on a new line. + +**Example:** +``` +1. First item. +2. Second item. +3. Third item. +``` + +**Result:** +1. First item. +2. Second item. +3. Third item. + +**Example:** +
        +- Item 1
        +- Item 2
        +- Item 3
        +
        + +**Result:** +- Item 1 +- Item 2 +- Item 3 + + +## Links + +In pull request comments and wiki, HTTP and HTTPS URLs are automatically formatted as links. Also, you can link to work items by typing the # key and a work item ID, and then choosing the work item from the list. + +In markdown files and widgets, you can set text hyperlinks for your URL using the standard markdown link syntax: + +``` +[Link Text](Link URL) +``` +When linking to another Markdown page in the same Git or TFVC repository, the link target can be a relative path or an absolute path in the repository. + +**Supported links for Welcome pages:** +
          +
        • Relative path: ```[text to display](./target.md)```
        • +
        • Absolute path in Git: ```[text to display](/folder/target.md)```
        • +
        • Absolute path in TFVC: ```[text to display]($/project/folder/target.md)```
        • +
        • URL: ```[text to display](http://address.com)```
        • +
        +

        **Supported links for [Markdown widget](../report/widget-catalog.md#markdown-widget):**

        +
          +
        • URL: ```[text to display](http://address.com)```
        • +
        +**Supported links for Wiki:** +
          +
        • Absolute path of Wiki pages: ```[text to display](/parent-page/child-page)```
        • +
        • URL: ```[text to display](http://address.com)```
        • +
        + + +>[!NOTE] +>Links to documents on file shares using `file://` are not supported on VSTS or TFS 2017.1 and later versions. This restriction has been implemented for security purposes. +> +>For information on how to specify relative links from a Welcome page or Markdown widget, see [Source control relative links](#relative-links). + + +**Example:** +
        +[C# language reference](https://msdn.microsoft.com/en-us/library/618ayhy6.aspx)
        +
        + +**Result:** + +[C# language reference](https://msdn.microsoft.com/en-us/library/618ayhy6.aspx) + + + + +### Source control relative links + +Links to source control files are interpreted differently depending on whether you specify them in a Welcome page or a Markdown widget. The system interprets relative links as follows: +- **Welcome page:** relative to the root of the source control repository in which the welcome page exists +- **Markdown widget:** relative to the team project collection URL base. + +For example: + +| Welcome page | Markdown widget equivalent | +|--------------------|-----------------------------------| +| /BuildTemplates/AzureContinuousDeploy.11.xaml |/DefaultCollection/Fabrikam Fiber/_versionControl#path=$/Tfvc Welcome/BuildTemplates/AzureContinuousDeploy.11.xaml| +| ./page-2.md |/DefaultCollection/Fabrikam Fiber/_versionControl#path=$/Tfvc Welcome/page-2.md | + + + +### Anchor links + +Within Markdown files, anchor IDs are assigned to all headings when rendered as HTML. The ID is the heading text, with the spaces replaced by dashes (-) and all lower case. + +**Example:** + +
        +###Link to a heading in the page
        +
        + +
        +**Result:** + +The syntax for an anchor link to a section... + +
        +[Link to a heading in the page](#link-to-a-heading-in-the-page)
        +
        +
        +The ID is all lower case, and the link is case sensitive, so be sure to use lower case, even though the heading itself uses upper case. + +You can also reference headings within another Markdown file: + +
        +[text to display](./target.md#heading id)  
        +
        + + +
        +In wiki, you can also reference heading in another page: + +
        +[text to display](/page-name#section-name)
        +
        + + +## Images + +Add images and animated GIFs to your pull request comments, markdown files, or wiki pages to highlight issues or just to liven the discussion. + +Use the following syntax to add an image:
        ![Text](URL)
        The text in the brackets describes the image being linked and the URL points to the image location. + +**Example:** + +
        +![Let's use this flow for the login experience](http://dev.fabrikam.net/images/uxflow.png)
        +
        + +
        +**Result:** + +![Sample flowchart with three items](../git/_img/pull-requests/markdown_sample_image.png) + +The path to the image file can be a relative path or the absolute path in Git or TVFC, just like the path to another Markdown file in a link. +
          +
        • Relative path:
          ```![Image alt text](./image.png)```
        • +
        • Absolute path in Git:
          ```![Image alt text](/_img/image.png)```
        • +
        • Absolute path in TFVC:
          ```![Image alt text]($/project/folder/_img/image.png)```
        • +
        • Resize image:
          ```![Image alt text]($/project/folder/_img/image.png WIDTHxHEIGHT)```
        • +
        + + +## Tables + +Organize structured data with tables. Tables are especially useful for describing function parameters, object methods, and other data that has +a clear name to description mapping. + +- Place each table row on its own line +- Separate table cells using the pipe character `|` +- The first two lines of a table set the column headers and the alignment of elements in the table +- Use colons (`:`) when dividing the header and body of tables to specify column alignment (left, center, right) +- Make sure to end each row with a CR or LF. + +**Example:** + +
        +| Heading 1 | Heading 2 | Heading 3 |  
        +|-----------|:-----------:|-----------:|  
        +| Cell A1 | Cell A2 | Cell A3 |  
        +| Cell B1 | Cell B2 | Cell B3 |  
        +
        + +
        +**Result:** + +| Heading 1 | Heading 2 | Heading 3 | +|-----------|:-----------:|-----------:| +| Cell A1 | Cell A2 | Cell A3 | +| Cell B1 | Cell B2 | Cell B3 | + + + +## Checklist or task list +Use `[ ]` or `[x]` to support checklists. You need to precede the checklist with either `-` or `1.` (any numeral). + +**Example:** + +
        +- [ ] A  
        +- [ ] B  
        +- [ ] C  
        +- [x] A  
        +- [x] B  
        +- [x] C  
        +
        +
        + +
        +**Result:** + +Checklists + + + +## Emphasis (bold, italics, underscore) + +You can emphasize text by applying bold, italics, or strikethrough to characters: +- To apply italics: surround the text with an asterisk `*` or underscore `_` +- To apply bold: surround the text with double asterisks `**`. +- To apply strick-through: surround the text with double tilde characters `~~`. + +Combine these elements to apply multiple emphasis to text. + +**Example:** + +
        +Use _emphasis_ in comments to express **strong** opinions and point out ~~corrections~~ 
        +**_Bold, italizied text_**  
        +**~~Bold, strike-through text~~**
        +
        + +
        +**Result:** +Use _emphasis_ in comments to express **strong** opinions and point out corrections +**_Bold, italizied text_** +**~~Bold, strike-through text~~** + + +## Code highlighting + +Highlight suggested code segments using code highlight blocks. +To indicate a span of code, wrap it with three backtick quotes ( ```) on a new line at both the start and end of the block. + +**Example:** + +
        ```
        +$ sudo npm install vsoagent-installer -g  
        +```
        +
        + +
        +**Result:** +``` +$ sudo npm install vsoagent-installer -g +``` +
        +Within a markdown file, text with four spaces at the beginning of the line automatically converts to a code block. + +Set a language identifier for the code block to enable syntax highlighting for any of the [supported languages](http://highlightjs.readthedocs.io/en/latest/css-classes-reference.html#language-names-and-aliases). + + +
        +```language
        +code
        +```
        +
        + + +
        +**Additional examples:** + +
        +```js
        +const count = records.length;
        +```
        +
        + + +``` +js +const count = records.length; +``` + + +
        +
        +```csharp
        +Console.WriteLine("Hello, World!");
        +```
        +
        + + + +``` +csharp +Console.WriteLine("Hello, World!"); +``` + + + + + + +## Emoji + +In pull request comments and wiki pages, you can use emojis to add character and react to comments in the request. Type in what you're feeling surrounded by `:` characters to get a matching emoji in your text. The [full set of emojis](http://www.webpagefx.com/tools/emoji-cheat-sheet/) are supported. + +**Example:** + +
        +:smile:
        +:angry:
        +
        +
        +**Result:** + +![Emojis in markdown](../git/_img/pull-requests/emoji-markdown.png) + + +## Special characters + + + + + + + + + + + + + + + + +
        SyntaxExample/notes
        +

        To insert one of the following characters, prefix with a backslash:

        + +

        ```\ backslash ```

        +

        \` `backtick`

        +

        ```_ underscore ```

        +

        ```{} curly braces ```

        +

        ```[] square brackets ```

        +

        ```() parentheses ```

        +

        ```# hash mark ```

        +

        ```+ plus sign ```

        +

        ```- minus sign (hyphen) ```

        +

        ```. dot ```

        +

        ```! exclamation mark ```

        + + +
        Some examples on inserting special characters +

        Enter ```\\``` to get \\

        +

        Enter ```\_``` to get _

        +

        Enter ```\#``` to get \#

        +

        Enter ```\(``` to get \(

        +

        Enter ```\.``` to get \.

        +

        Enter ```\!``` to get \!

        +
        + + + + +## Attachments + +In pull request comments and wiki pages, you can attach files to illustrate your point or to give more detailed reasoning behind your suggestions. To attach a file, drag and drop it into the comment field or wiki page edit experience. You can also select the paper-clip icon in the upper-right of the comment box or the format pane in wiki page. + +Web portal, Pull Request, Attach files via drag and drop i + +If you have an image in your clipboard, you can paste it from the clipboard into the comment box or wiki page and it will render directly into your comment or wiki page. + +Attachments support the following file formats: + +- Images: PNG (.png), GIF (.gif), JPEG (both .jpeg and .jpg) +- Documents: Word (.docx), Excel (.xlsx), and Powerpoint (.pptx), text files (.txt), and PDFs (.pdf) +- Compressed files: ZIP (.zip) and GZIP (.gz) +- Video files: MOV (.mov), MP4 (.mp4) + +Attaching non-image files creates a link to the file in your comment. Update the description text between the brackets to change the text displayed in the link. +Attached image files render directly into your comment or wiki pages. + +Once you save or update a comment or wiki page with an attachment, you can see the attached image(s) and can select links to download attached files. + + +## HTML Tags + +In wiki pages, you can also create rich content using HTML tags. + +**Example - Embedded video** + +```HTML + +``` + +
        +**Result:** +
        + + + +**Example - Rich text format** + +```HTML +

        This text needs to strikethrough since it is redundant!

        +

        This text is teletype text.

        +Colored text +
        This text will be center-aligned.
        +

        This text contains superscript text.

        +

        This text contains subscript text.

        +

        The project status is GREEN even though the bug count / developer may be in red. - Capability of span +

        Disclaimer: Wiki also supports showing small text

        +

        Bigger text

        +``` + +**Result:** +

        This text needs to strikethrough since it is redundant!

        +

        This text is teletype text.

        +Colored text +
        This text will be center-aligned.
        +

        This text contains superscript text.

        +

        This text contains subscript text.

        +

        The project status is GREEN even though the bug count / developer may be in red. - Capability of span +

        Disclaimer: Wiki also supports showing small text

        +

        Bigger text

        + + + +## Related notes + + +- [Project vision page or Welcome pages](../collaborate/project-vision-status.md) +- [Readme files](../git/create-a-readme.md) +- [Pull requests](../git/pull-requests.md) +- [Markdown widget](../report/add-markdown-to-dashboard.md) +- [Dashboards](../report/dashboards.md) +- [Widget catalog](../report/widget-catalog.md) +- [Wiki](../collaborate/add-edit-wiki.md) + diff --git a/docs/reference/naming-restrictions.md b/docs/reference/naming-restrictions.md new file mode 100644 index 00000000000..e5617b35e91 --- /dev/null +++ b/docs/reference/naming-restrictions.md @@ -0,0 +1,1307 @@ +--- +title: Naming restrictions and conventions used by VSTS & TFS +description: Guidelines for object labels you define for an account, group, server, or other objects which include length, special characters, and uniqueness. +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: F4ED2B52-EDE9-4F2B-B3B5-A3FB504D84B9 +ms.manager: douge +ms.author: kaelli +ms.date: 07/05/2017 +--- + +# Naming restrictions and conventions + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Most components in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) must comply with naming restrictions and conventions. Restrictions help guarantee a consistent user experience and provide compatibility with other applications. + +Common restrictions include not exceeding the character length for a name, not containing special characters, and maintaining uniqueness of names within an object set. + + +##Computers, accounts, groups, and collections + + +###Common considerations + +The length restrictions in this topic are measured by the number of Unicode characters permitted. Surrogate characters are composed of two Unicode characters and these will count as two characters against the length restriction. For details, see [About Unicode and Character Sets](http://msdn.microsoft.com/library/windows/desktop/dd317711.aspx). + +As with other operating system files, ASCII control characters (ASCII 1-31) and surrogate combinations are also not allowed. For general information about the operating system restrictions applied to file names, see [Naming Files, Paths, and Namespaces](http://msdn.microsoft.com/library/windows/desktop/aa365247.aspx). + + + + +###Computer name (on-premises TFS only) + + +When you install TFS, the computer name where you install TFS is associated with the name of the server. +Both the operating system and Active Directory impose certain restrictions on computer names as described in these articles: +* [Rename the Computer](https://msdn.microsoft.com/library/dd894434.aspx) +* [Rename a Computer that Hosts a Stand-Alone Instance of SQL Server](https://msdn.microsoft.com/library/ms143799.aspx) +* [Windows Server Active Directory](https://support.microsoft.com/en-us/kb/909264) + + +###Account name +User accounts identify users in VSTS or TFS. These accounts might correspond to an Active Directory, Azure Active Directory, Windows or other user account types. + +You add existing user accounts. You can't create a user account. To add user accounts to a team project, see: + +* VSTS: [Add team members](../accounts/add-team-members-vs.md) +* On-premises TFS: [Add users to team projects](../accounts/add-users.md) + +User accounts that you add must conform to the following restrictions. + + + + + + + + + + + + + + + + + + + + + + + + +
        +

        Restriction type

        +
        +

        Restriction

        +
        +

        Account name length

        +
        +
          +
        • +

          Must not contain more than 256 Unicode characters

          +
        • +
        +
        +

        Uniqueness

        +
        +
          +
        • +

          Must not match any other user account added to the team project collection

          +
        • +
        +
        +

        Reserved group names

        +
        +
          +
        • +

          Must not be named with a $NAMESPACE at either the project or the server level

          +
        • +
        +
        +

        Special character restrictions

        +
        +
          +
        • +

          Must not include the following printable characters: "/ \ [ ] : | < > + = ; ? *

          +
        • +
        • +

          Must not include nonprintable characters in the ASCII value range of 1-31

          +
        • +
        • +

          Must not end in a period (.)

          +
        • +
        • +

          Must not include commas (,)

          +
        • +
        • +

          Must not include the following Unicode categories: LineSeparator, ParagraphSeparator, Control, Format, OtherNotAssigned

          +
        • +
        +
        + + + + + + + +###Group name + +Groups enable you to apply certain rights or permissions to a group of users. + +On-premises TFS groups can consist of Active Directory group accounts, TFS group accounts, Windows user accounts, Windows group accounts, or any mixture of these types. See [Manage users or groups in TFS](../security/permissions.md). + +Groups that you add must conform to the following restrictions. + + + + + + + + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +Group account name length + +
          +
        • +Must not contain more than 256 Unicode characters +
        • +
        +
        +Uniqueness + +
          +
        • +Project-level group accounts must not match any other group name in the same project +
        • +
        • Collection-level group accounts must not match any other name of a group account in the team project collection +
        +
        +Reserved group names + +
          +
        • +Must not be named $NAMESPACE at either the project or the server level +
        • +
        +
        +Special character restrictions + +
          +
        • +Must not include the following printable characters: "/ \ [ ] : | < > + = ; ? * +
        • +
        • +Must not include nonprintable characters in the ASCII value range of 1-31 +
        • +
        • +Must not end in a period (.) +
        • +
        • +Must not include commas (,) +
        • +
        +
        + + + + +###Team project collections (on-premises TFS only) + +A team project collection identifies a group of team projects and the resources that are associated with those projects. It provides an organizing structure that you can use to define and control a group of team projects within an on-premises TFS. + +Also, the collection name is part of the connection string used to connect team members to team projects. The default assigned corresponds to *DefaultCollection*. +[Manage team project collections](../tfs-server/admin/manage-team-project-collections.md) provides more information. + +Names you assign to team project collections must conform to the following restrictions. + + + + + + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        Length +
          +
        • Must not contain more than 64 Unicode characters +
        • +
        +
        +Uniqueness + +
          +
        • +Must not be identical to any other collection name in your on-premises TFS deployment. +
        • +
        • +If your deployment includes SharePoint Products or SQL Server Reporting Services, must not be identical to the name and full path of an existing SharePoint site, report server, or Reporting Services Web site. +
        • +
        +
        Special characters +
          +
        • +Must not contain any Unicode control characters or surrogate characters.
        • +
        • Must not contain the following printable characters: / : \ ~ & % ; @ ' " ? < > | # $ * } { , + = [ ]
        • +
        • Must not contain an ellipsis (…) or a double period (..)
        • +
        • Must not start with an underscore (_)
        • +
        • Must not start or end with a period (.)
        • +
        +
        +Reserved names + +
          +
        • Must not be a system-reserved name such as PRN, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM10, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, NUL, CON, AUX, Web, or WEB
          +Learn more about reserved names: [File Names, Paths, and Namespaces](https://msdn.microsoft.com/library/aa365247.aspx). +
        • +
        +
        + +##Team project and work item tracking + + + +###Team projects + +A team project establishes a repository for source code and a place for teams to plan, track progress, and collaborate. The name of the team project is part of the connection string used to connect team members to team projects. + +Names you assign to team projects that you create must conform to the following restrictions. + + + + + + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        Length +
          +
        • Must not contain more than 64 Unicode characters
        • +
        +
        +Uniqueness + +
          +
        • Must not be identical to any other name in the team project collection, the SharePoint Web application that supports the collection, or the instance of SQL Server Reporting Services that supports the collection. +
        • +
        +
        Special characters +
          +
        • Must not contain any Unicode control characters or surrogate characters
        • +
        • Must not contain the following printable characters: / : \ ~ & % ; @ ' " ? < > | # $ * } { , + = [ ] +
        • +
        • Must not start with an underscore (_)
        • +
        • Must not start or end with a period (.)
        • +
        +
        +Reserved names + +
          +
        • +Must not be a system-reserved name such as PRN, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM10, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, NUL, CON, AUX, SERVER, SignalR, DefaultCollection, or Web. +
        • +
        • +Must not be one of the hidden segments used for IIS request filtering like App_Browsers, App_code, App_Data, App_GlobalResources, App_LocalResources, App_Themes, App_WebResources, bin, or web.config.
          +Learn more about reserved names: [File Names, Paths, and Namespaces](https://msdn.microsoft.com/library/aa365247.aspx). +
        • +
        +
        + + + + +###Process and process templates + +A process defines the building blocks of the work item tracking system as well as other sub-systems you access through VSTS or the web portal for an on-premises TFS. + +> [!NOTE] +> Terminology note: Both "process" and "process template" refer to an interdependent set of files used to create a team project. However, the features, rules, and behaviors associated with each differ slightly depending on whether you connect to VSTS or an on-premises TFS. +>   +[Choose a process](../Work/guidance/choose-process.md) describes the differences among the three default processes available to you. + +Processes you define or customize must conform to the following restrictions. + + + + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        Process template name length + +
          +
        • Must not contain more than 256 Unicode characters +
        • +
        +
        Process template name uniqueness + +
          +
        • Must be unique across the Team Foundation server.
        • +
        • If you upload a template with the same name as an existing template, the existing template will be overwritten.
        • +
        +
        Process template file size + +
          +
        • +Must not exceed 2 GB (gigabytes). +
        • +
        +
        + + + +###Kanban boards + +Your [Kanban board](../Work/kanban/kanban-basics.md) turns your backlog into an interactive signboard, providing a visual flow of work. As work progresses from idea to completion, you update the items on the board. Each column represents a work stage, and each card represents a user story (blue cards) or a bug (red cards) at that stage of work. + +You can customize your Kanban boards to match how your team works by adding, removing, or renaming [columns](../Work/kanban/add-columns.md) and [swimlanes](../Work/kanban/expedite-work.md). Columns support the flow of work across the board. Swimlanes allow you to manage different classes of work as horizontal lanes on the board. + +Column and swimlane names must conform to the following restrictions. + + + + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        Length +
          +
        • Must not contain more than 256 Unicode characters
        • +
        +
        Uniqueness +
          +
        • +Column names must not be the same as any other column name on the Kanban board +
        • +
        • +Swimlane names must not be the same as any other swimlane name on the Kanban board +
        • +
        +
        +Special characters + +
          +
        • +Must not contain any Unicode control characters or surrogate characters +
        • +
        +
        + + + + + +###Teams +Team names identify a group of individuals or groups that collectively work together as a team in a team project. Team members use this name to connect to the team when working in VSTS or the web portal for TFS. + +As such, team names must conform to conventions that allow it to be rendered as part of a valid URL. In addition, each team name must be unique within a single project. However, there aren't any restrictions on using the same team name in different team projects within a team project collection. [Add another team or a hierarchy of teams](../Work/scale/multiple-teams.md) provides more information about working with teams. + +Team names must conform to the following restrictions. + + + + + + + + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        Length + +
          +
        • +Must not contain more than 64 Unicode characters +
        • +
        +
        +Uniqueness + +
          +
        • +Must not be identical to any other name in the project +
        • +
        +
        +Special characters + +
          +
        • +Must not contain any Unicode control characters or surrogate characters +
        • +
        • +Must not contain the following printable characters: / : \ ~ & % ; @ ' " ? < > | # $ * } { , + = [ ] +
        • +
        • +Must not contain an ellipsis (…) or a double period (..) +
        • +
        • +Must not start with an underscore (_) +
        • +
        • +Must not start or end with a period (.) +
        • +
        +
        +Reserved names + +
          +
        • +Must not be a system-reserved name such as PRN, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM10, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, NUL, CON, or AUX
          +Learn more about reserved names: [File Names, Paths, and Namespaces](https://msdn.microsoft.com/library/aa365247.aspx). +
        • +
        +
        + + + +##Work items, work item types and customizations + +You use work items to capture information to plan and track your software development projects. With work items, you can describe the work to be done, assign work, track status, and coordinate efforts within your team. Different types of work items -- such as user stories, tasks, bugs, and issues-- track different types of information. + +All work item tracking objects are associated with one or more names. Most have friendly display names and all, except work item types and global lists, are associated with reference names. A friendly name is a unique, user-visible identifier for a field. Using friendly names ensure consistency across all team projects and work item types in a project collection. The system uses the reference name internally and you cannot change it after it is defined. + +Restrictions are placed on several elements associated with work items, including reference and friendly names, field names, and attachment size + +You can [modify or add a custom work item type (WIT)](../work/customize/add-modify-wit.md) to support your team's processes. + +###Attachments + +Files attached to work items must conform to the following restrictions. + + + + + + + + + + +
        Restriction typeRestriction
        +

        File size

        +
        +
          +
        • +Must not exceed the maximum size. +
        • +
        • +Default maximum size: 4,096 kilobytes +
        • +
        • +

          Absolute maximum size: 2 gigabytes

          +

          [Change the maximum attachment size for work items](https://msdn.microsoft.com/library/ms400780.aspx).

        • +
        +
        + + +###Area Path and Iteration Path + +Two work item fields, Area Path and Iteration Path, provide a tree structure hierarchy for grouping work. Area paths group work items by product, functional, or feature area. Iteration paths group work items into sprints, milestones, or time periods in which they'll be worked on. + +These multi-node fields use the backslash (\) characters to denote the hierarchy of nodes within the tree structure. + +The names you assign to child nodes to these fields must conform to the following restrictions. + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +

        Node length

        +
        +
          +
        • +

          Must not contain more than 255 characters

          +
        • +
        +
        +

        Special characters for nodes

        +
        +
          +
        • +

          Must not contain Unicode control characters

          +
        • +
        • +

          Must not contain any one of the following characters: \ / $ ? * : " & > < # % | +

          +
        • +
        • +Must not contain characters prohibited by the local file system. For more information about Windows character restrictions, see [Naming Files, Paths, and Namespaces](https://msdn.microsoft.com/library/windows/desktop/aa365247.aspx). +
        • +
        +
        +

        Reserved names

        +
        +
          +
        • +

          Must not consist only of a period (.) or two periods (..)

          +
        • +
        • +

          Must not be a system-reserved name such as PRN, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM10, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, NUL, CON, or AUX

          + +

          Learn more about reserved names: [File Names, Paths, and Namespaces](https://msdn.microsoft.com/library/aa365247.aspx).

          +
        • +
        +
        +

        Path length

        +
        +
          +
        • +

          Must not contain more than 4000 Unicode characters

          +
        • +
        +
        +

        Path hierarchy depth

        +
        +
          +
        • +

          Must not be more than 14 levels deep

          +
        • +
        +
        + + + + + +###WIT field names + +Each WIT definition contains one or more work item fields. These fields define the information stored for work items based on the WIT. A work item field name uniquely identifies each work item field. + +Work item field names that you add must conform to the following restrictions. + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +Length + +
          +
        • Must not contain more than 128 Unicode characters
        • +
        +
        Special characters +
          +
        • Must not contain leading or trailing spaces
        • +
        • Must not contain two or more consecutive spaces
        • +
        • Must not contain periods (.)
        • +
        • Must not contain opening or closing square brackets ([ ])
        • +
        +
        Scope +
          +
        • Work item field names are scoped to the team project collection. If you rename a field name, you change it for all work items and WITs defined within all team projects in the collection.
        • +
        +
        + +###Field, link type, and category reference names + +You must define a reference name whenever you add or create a work item field, link type, or category. Each work item field has an associated field reference name. The field reference name uniquely identifies each field and cannot be changed after it's assigned. + +All reference names can be up to 70 Unicode characters long. + +You can define a reference name by using alphanumeric characters, underscore characters, and hyphen characters. Each reference name must contain at least one period (.), but no period can appear at the start or end of a name. A reference name cannot start with a number or an underscore, and it cannot have multiple consecutive hyphens, such as (--). + +Work item field reference names that you add must conform to the following restrictions. + + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +Length + +
          +
        • +Must not contain more than 70 Unicode characters +
        • +
        +
        +Special characters + +
          +
        • +Must not contain hyphens (-) +
        • +
        • +Must contain at least one period (.) +
        • +
        • +Must not start or end with a period (.) +
        • +
        • +Must not start with a number +
        • +
        • +Must not start with an underscore (_) +
        • +
        +
        +Uniqueness + +
          +
        • +Must not be identical to any other field reference name within the team project collection +
        • +
        • +Must not be identical to any other field reference name after those names are processed by the computer to replace all periods (.) with underscores (_)
          +For example, the field reference names ```My._Field``` and ```My_.Field``` would both be processed by the computer to be the same name: ```My__Field``` +
        • +
        +
        + +####Field reference names and portability + +The work item type definition language includes the concept of a *field reference name*. Field reference names can help you to port definitions between Team Foundation project collections and also to allow third party integrations to find and refer to specific fields. These names are globally unique, just as a namespace in the .NET Framework application is globally unique. + +Field reference names cannot be renamed. If, for example, you changed the field name "Title" to "Header", the field reference name of that field remains the same. Integrations and internal representations of fields should use the field reference name instead of depending on the field name itself. + +The System namespace is used only to define all core system fields that are mandatory for Team Foundation system functions. Team Foundation Server prevents you from creating your own System.X field because it might impede Team Foundation Server functionality. + +The Microsoft namespace is used to define work item tracking fields. These fields are defined in a work item type definition of the TFS process templates. TFS does not prevent you from creating your own Microsoft.X field. However, this practice is strongly discouraged because it might impede Team Foundation Server TFS functionality or the ability for the Configure Features wizard to successfully update a team project after a TFS upgrade. + +Customers and partners can create their own field namespaces for custom work item types. + +For descriptions of system fields and fields defined in the default process templates, see [Index of work item fields](../work/guidance/work-item-field.md). + + + +####Examples of field reference names + +The following examples show valid field reference names, in various namespaces. Customers and partners can also define their own namespaces to support their custom work item types. + + + + + + + + + + + + + +
        System namespace examples Microsoft namespace examplesOther namespace examples
        +

        System.Id
        +System.Title
        +System.CreatedBy
        +System.CreatedDate
        +System.ChangedBy
        +System.ChangedDate
        +System.State
        +System.Reason

        +
        +

        Microsoft.VSTS.Build.FoundIn
        +Microsoft.VSTS.Common.Activity
        +Microsoft.VSTS.Common.Discipline
        +Microsoft.VSTS.Common.Priority
        +Microsoft.VSTS.CMMI.TaskType
        +Microsoft.VSTS.TCM.AutomationStatus
        +Microsoft.VSTS.TCM.TestSuiteType

        +
        +

        The fictitious company *Fabrikam Fiber* might define the following custom work item fields:

        +

           FabrikamFiber.Common.Severity
        +   FabrikamFiber.Common.Phase
        +   FabrikamFiber.RiskManagement.RiskType
        +   FabrikamFiber.RiskManagement.Resolution

        +

        The fictitious software company *Contoso Corporation* might define the following work item fields:

        +

           Contoso.Common.BusinessPriority
        +   Contoso.Bug.FoundInPhase
        +   Contoso.Bug.FixInPhase

        +
        + + + +###Field help text + +You can specify help text for a WIT field by using the ```HELPTEXT``` element. The system displays this text at run time to help users know what to enter into the field. Help text is scoped to a specific WIT in a specific team project. [Apply a rule to a work item field](../work/customize/set-area-paths.md) provides information on adding help text. + +Help text that you add must conform to the following restrictions. + + + + + + + + + + +
        Restriction typeRestriction
        +

        Length

        +
        +
          +
        • +

          Must not contain more than 255 Unicode characters

          +
        • +
        +
        + +###Global lists (on-premises TFS only) + +A global list is a set of list item values that you can use globally across all team project collections within an instance of an on-premises TFS. As you define WITs, you may find that some work item fields share the same set of allowed or suggested values. Global lists enable you to define these values one time and share them across multiple WITs and team projects. See [Define global lists](../work/reference/define-global-lists.md) for details. + +A global list, defined using the ```GLOBALLIST``` element contains one or more list items, specified using the ```LISTITEM``` element. + +```LISTITEM``` names must conform to the following restrictions. + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +

        Length

        +
        +
          +
        • Must not contain more than 254 Unicode characters
        • +
        • Must not be empty
        • +
        +
        Special characters +
          +
        • +

          Must not contain leading or trailing white space

          +
        • +
        • +

          Must not contain two consecutive spaces

          +
        • +
        • +

          Must not contain backslash (\) characters

          +
        • +
        +
        +

        Scope

        +
        +
          +
        • Since global lists are available among all projects, they must not contain elements defined at the project level, such as project-specific group account definitions.
        • +
        +
        + +Global lists must conform to the following restrictions. + + + + + + + + + + + + + + +
        Restriction typeRestriction
        Number of items +
          +
        • Can't be empty. The global list must contain at least one ```LISTITEM``` element.
        • +
        +
        +

        Uniqueness

        +
        +
          +
        • The global list name must not be identical to any other global list name within the team project collection. +
        • +
        +
        + + + + +##Team Foundation Build (on-premises TFS only) + +Team Foundation Build lets you manage all the aspects of the build process on a single computer. By using Team Foundation Build, you can synchronize the sources, compile the application, run associated unit tests, perform code analysis, release builds on a file server, and publish build reports. + +###Build computer ### + +Team Foundation Build is a separate installation from the TFS application tier, data tier, or Visual Studio client. You may designate a separate computer. Otherwise, you can install the build side-by-side on the client computer or on the servers. + +Your on-premises build computer must conform to the following restrictions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Restriction typeRestriction
        Disk space + +Must contain sufficient space for the build (insufficient space will lead to failed builds). +
        +

        Build directory

        +
        Must be a local path (for example, *C:\BuildDirectory*). +
        +Drop location directory +Must be a UNC path (for example, ```\\server\share```). +
        +

        Drop location permissions

        +
        Each generated build is put in a new directory in the drop folder. +
          +
        • +The Team Foundation Server Service account (for example, *Domain*\TFSSERVICE) must have Full Control permission access to the UNC drop location. +
        • +
        • The UNC drop location must be a shared folder. +
        • +
        +
        +

        Team Foundation Build Service account

        +
        +If you change the TFS Service account after the initial installation, you must make sure that the following conditions are true. +
          +
        • The account is a member of the Build Services group. +
        • +
        • The account has read/write permissions to the temporary folders and the ASP.NET temporary folder. +
        • +
        • The account has Full Control permission to the build directory and drop location. +
        • +
        +
        +

        Firewall issues

        +
        +If the build computer is firewall enabled, make sure that the program **tfsbuildservice** is in the exceptions list. +
        + +###Build types + +Build types configure the conditions under which a single solution or a set of solutions in a team project will be built. To conduct a build, you must either create a new build type or use an existing [build type](https://msdn.microsoft.com/library/ms181715.aspx). + +Build type names must conform to the following restrictions. + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +

        Uniqueness

        +
        +
          +
        • +

          Must not be the same as any other build type name in the team project

          +
        • +
        +
        +

        Special characters

        +
        +
          +
        • +

          Must not contain the following printable character: $

          +
        • +
        +
        + +### Build quality + +The build quality lets you attach a quality level or completion state to a completed build. Team Foundation Build also lets you create new values for the [build quality type](https://msdn.microsoft.com/library/ms181716.aspx). See [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx) for a list of the default build quality values. + +Build quality names must conform to the following restrictions. + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +

        Length

        +
        +

        Must not contain more than 256 Unicode characters

        +
        +

        Uniqueness

        +
        +

        Must not be the same as any other Build Quality name in the Team Foundation Build computer

        +
        + + + + +##Team Foundation version control + +###Version control names + +Team Foundation version control provides a central repository for files and the commands that are required to manage those files across a team. It also provides customizable check-in policies, branching, merging, shelving, and many other features. + +###Version control paths + +Version control paths must conform to the following restrictions. See also [Optimize your workspace](https://msdn.microsoft.com/library/ms181378.aspx). + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +

        Server source control folder path length

        +
        +
          +
        • +

          Must not contain more than 259 Unicode characters for a single folder or file name.

          +
        • +
        • +

          Must not contain more than 388 Unicode characters for a directory.

          +
        • +
        • +

          Must not contain more than 399 Unicode characters for a combined directory and file name.

          +
        • +
        +
        +

        Local folder path length

        +
        +
          +
        • +

          Must not contain more than 248 Unicode characters for a directory.

          +
        • +
        • +

          Must not contain more than 260 Unicode characters for a combined directory and file name.

          +
        • +
        +
        + + + +###Version control files + +The version control system stores many different types of files. [Set up Team Foundation version control on your dev machine](https://msdn.microsoft.com/library/ms181384.aspx) provides details on how to add existing Visual Studio projects or solutions. + +Files and folders you add to Team Foundation version control must conform to the following restrictions. + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +

        Files and folders

        +
        +
          +
        • Names must not contain the following printable characters: \ / : * ? " < > | ;
        • +
        • +Folders must not reside outside the mapped directory for the active workspace +
        • +
        +
        +File names + +
          +
        • +Must not begin with a $ +
        • +
        • Must not contain the following printable characters: \ / : * ? " < > | ;
        • +
        +
        + +###Version control labels + +In Team Foundation version control, a label is a name applied to a specific set of revisions. You can attach labels to a set of unrelated files in version control. This lets you retrieve the files or act upon them as a group. The following table describes the restrictions put on label names. + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +

        Length

        +
        +
          +
        • +

          Must not contain more than 64 Unicode characters

          +
        • +
        +
        +

        Special characters

        +
        +
          +
        • +

          Cannot end with a space ( ) or period (.)

          +
        • +
        • +

          Must not contain the following printable characters: \ / " : < > | * ? @ ;

          +
        • +
        +
        + +###Shelvesets + +Shelvesets enable you to set aside temporarily a batch of pending changes and then, as an option, remove the pending changes from your workspace. Later, you can restore the changes in a shelveset to your workspace or put them into another user's workspace. + +Shelveset names must conform to the following restrictions. + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +

        Length

        +
        +
          +
        • +

          Must not contain more than 64 Unicode characters

          +
        • +
        +
        +

        Special characters

        +
        +
          +
        • + +

          Must not contain the following printable characters: \ / " : < > | * ? ;

          +
        • +
        +
        + +###Workspaces + +A workspace is a client-side copy of the files and folders in Team Foundation version control. When you create multiple workspaces, you can have different versions of the same version control folder on a client computer. [Create and work with workspaces](https://msdn.microsoft.com/library/ms181383.aspx) provides more details. + +Workspace names must conform to the following restrictions. + + + + + + + + + + + + + + +
        Restriction typeRestriction
        +

        Length

        +
        +
          +
        • +

          Must not contain more than 64 Unicode characters

          +
        • +
        +
        +

        Special characters

        +
        +
          +
        • +

          Cannot end with a space ( )

          +
        • +
        • Must not contain the following printable characters: \ / " : < > | * ? ;

          +
        • +
        +
        + + +## Wiki page title naming conventions + +Each wiki page corresponds to a file within the wiki git repo. +Names you assign to a wiki page title must conform to the following restrictions. + +|Restriction type| Restriction| +|---------------|-----------| +| File name | The fully qualified page path should not exceed 235 characters. | +| Uniqueness | Page titles are case sensitive and must be unique within the wiki hierarchy.| +|Special characters|
        1. Must not contain any Unicode control characters or surrogate characters
        2. Must not contain the following printable characters: / : < > \ * ? \ | - #
        3. Must not start or end with a period (.)
        4. Titles of pages added offline titles must not contain a blank space.
        | +| File size | Must not exceed the maximum of 15 MB | +| Attachment file size | Must not exceed the maximum of 10 MB | + + + +## Related notes +* [Customize work tracking objects to support your team's processes](../work/customize/customize-work.md) +* [Customize a process for import into VSTS](../Work/import-process/customize-process.md) +* [Customize a process template (on-premises TFS)](../work/reference/process-templates/customize-process.md) \ No newline at end of file diff --git a/docs/reference/rate-limits.md b/docs/reference/rate-limits.md new file mode 100644 index 00000000000..202221c2808 --- /dev/null +++ b/docs/reference/rate-limits.md @@ -0,0 +1,108 @@ +--- +title: Resource limits & constraints for VSTS +titleSuffix: VSTS +description: Limits on the resources individual users can consume in Visual Studio Team Services, and the number of work item tracking requests they can make +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 6CBE3B3E-ABFF-4F66-8168-DB5D772E9DDB +ms.manager: douge +ms.author: kaelli +ms.date: 09/07/2017 +--- + +  + +#Rate limits + +**VSTS** + +Visual Studio Team Services (VSTS), like many Software-as-a-Service solutions, uses multi-tenancy to reduce costs and to enhance scalability and performance. This leaves users vulnerable to performance issues and even outages when other users of their shared resources have spikes in their consumption. To combat these problems, VSTS limits the resources individuals can consume and the number of +requests they can make to certain commands. When these limits are exceeded, subsequent requests may be either delayed or blocked. + +When an individual user's requests are delayed by a significant amount, an email is sent to that user and a warning banner appears in the Web UI. If the user does not have an email address – +for example, if the “user” is actually a build service account – the notification email is sent to the members of the project collection administrators group. See +[User Experience](#user-experience) for more detail. + +When an individual user's requests are blocked, responses with HTTP code 429 (too many requests) will be received, with a message similar to the following: + +```TF400733: The request has been canceled: Request was blocked due to exceeding usage of resource in namespace .``` + +##Current rate limits +VSTS currently has a global consumption limit, which delays requests from individual users beyond a consumption threshold when shared resources are in danger of being overwhelmed. + +###Global consumption limit +Because this limit is focused exclusively on avoiding outages when shared resources are close to being overwhelmed, individual users will typically only have their requests delayed when: + +- One of their shared resources is at risk of being overwhelmed, and +- Their personal usage exceeds 200 times the consumption of a typical user within a (sliding) five-minute window. + +The amount of the delay will depend on the user's sustained level of consumption – it may be as little as a few milliseconds per request or as much as thirty seconds. If their consumption goes to zero, or if their shared resources are no longer in danger of being overwhelmed, the delays will stop after a period of not more than five minutes. If their consumption remains high and their shared resources remain in danger of being overwhelmed, the delays may continue indefinitely. + +#### VSTS Throughput Units (TSTUs) +VSTS users consume many shared resources, and consumption depends on many factors. For example: + +- Uploading a large number of files to Team Foundation version control or Git typically creates a large amount of load on both an Azure SQL Database and an Azure Storage account. +- Running a complex work item tracking query will create load on an Azure SQL Database, with the amount of load depending on the number of work items in the VSTS account. +- Running a build on a private agent will create load on an Azure SQL Database and on one or more Azure Storage accounts, with the amount of load depending on the amount of version +control content downloaded, the amount of data logged by the build, and so forth. +- All operations consume CPU and memory on one or more VSTS application tiers or job agents. + +To accommodate all of this, VSTS resource consumption is expressed in abstract units called VSTS Throughput Units, or TSTUs. + +TSTUs will eventually incorporate a blend of: + +- [Azure SQL Database DTUs](https://azure.microsoft.com/documentation/articles/sql-database-service-tiers) as a measure of database consumption +- Application tier and job agent CPU, memory, and I/O as a measure of compute consumption +- Azure Storage bandwidth as a measure of storage consumption. + +For now, TSTUs are primarily focused on Azure SQL Database DTUs, since Azure SQL Databases are the shared resources most commonly overwhelmed by excessive consumption. + +A single TSTU per five minutes is the average load we expect a single normal user of VSTS to generate. Normal users will also generate spikes in load. These will typically +be 10 or fewer TSTUs per five minutes, but will less frequently go as high as 100 TSTUs. The global consumption limit is 200 TSTUs within a sliding five-minute window. + + + +##User experience + +When an individual user's requests are delayed by a significant amount, an email will be sent to that user and a warning banner will appear in the Web UI. + +Web UI warning banner + +If the user does not have an email address - for example, if the "user" is actually a build service account - the notification email will be sent to the members of the project collection +administrators group. The warning banner and the notification email both include links to the Usage page, which can be used to investigate the usage that exceeded our thresholds, as well +as the requests which were delayed. + +Request history on the Usage page is ordered by usage (TSTUs) descending by default, but can be sorted by the other columns as well. Usage is grouped by command into five minute time windows, +with the number of commands in the window given by the Count column, and the total TSTU usage and delay time given in the corresponding columns. + +For members of the project collection administrators group, this same page can be used to investigate the usage of other users. + +Usage page for collection administrators + +By default, visiting the Usage page will display requests for the last hour. Clicking the link from the email will open the Usage page scoped to the request history from +30 minutes before and after the first delayed request. By default, the Usage page will default to showing the past hour. After arriving on the page, review the +request history leading up to delayed requests. + +Usage page TSTU investigation + +Commands consuming a high number of TSTUs will be the ones responsible for the user exceeding the threshold. The User Agent and IP address columns can be helpful to see where these commands +are coming from. Common problems to look for are custom tools or build service accounts that might be making a large amount of calls in a short time window. To avoid these types of issues, +tools may need to be rewritten or build processes updated to reduce the type and number of calls made. For example, a tool might be pulling a large version control repository from scratch +on a regular basis, when it could pull incrementally instead. \ No newline at end of file diff --git a/docs/reference/wiql-syntax.md b/docs/reference/wiql-syntax.md new file mode 100644 index 00000000000..a5a6c668fbe --- /dev/null +++ b/docs/reference/wiql-syntax.md @@ -0,0 +1,452 @@ +--- +title: Reference syntax for WIQL support in VSTS & TFS +description: Reference syntax for the Work Item Query Language (WIQL) to support queries in Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 95DAF407-9208-473D-9F02-4B6E7F64AD0A +ms.manager: douge +ms.author: kaelli +ms.date: 05/10/2017 +--- + + +# Syntax for the Work Item Query Language (WIQL) + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can use the WIQL syntax to [construct a query that you submit from a web browser](../work/track/using-queries.md#define-query-hyperlink) or using the [Work Item Query Language (REST API)](https://www.visualstudio.com/docs/integrate/api/wit/wiql). + +A query defined using the Work Item Query Language (WIQL) consists of a `SELECT` statement that lists the fields to be returned as columns in the result set. You can further qualify the result set by using a logical expression. You can specify a sort order. Use an `ASOF` clause to state that a query is evaluated as of a previous time. + +The WIQL syntax is not case sensitive. + + +## Example queries + + + +The following typical WIQL query example uses reference names for the fields. The query selects work items (no work item type specified) with a **Priority=1**. The query returns the **ID** and **Title** of the return set as columns. The results are sorted by **ID** in ascending order. + +``` +SELECT System.ID, System.Title from workitems +where Priority=1 order by System.ID asc +``` + +The general format of a query consists of a `SELECT` statement and a qualifying `WHERE` clause. The following examples illustrate the basic syntax. + +``` +SELECT Select_List + FROM workitems + [WHERE Conditions] + [ORDER BY Column_List] + [ASOF DateTimeConditions] +``` + + +The following example statements show specific qualifying clauses. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        ClauseExample
        `AND` + +
        SELECT [System.Id], [System.Title]
        +   FROM WorkItems
        +   WHERE [System.TeamProject] = @project
        +   AND [System.AssignedTo] = 'Judy Lew'
        +
        +
        `OR` +
        SELECT [System.Id], [System.Title] 
        +   FROM WorkItems 
        +   WHERE [System.TeamProject] = @project 
        +   AND ( [System.AssignedTo] = 'Mark Steele'
        +   OR [System.AssignedTo] = 'Merav Sror' )
        +
        +
        `NOT` +
        SELECT [System.Id], [System.Title] 
        +   FROM WorkItems 
        +   WHERE [System.TeamProject] = @project 
        +   AND  [System.AssignedTo] EVER 'Anne Wallace'
        +   AND [System.AssignedTo] NOT CONTAINS 'Danny Levin'
        +
        +
        `EVER` +
        SELECT [System.Id], [System.Title] 
        +   FROM WorkItems 
        +   WHERE [System.TeamProject] = @project 
        +   AND  [System.AssignedTo] EVER 'Anne Wallace'
        +
        +
        `UNDER` +
        SELECT [System.Id], [System.Title] 
        +   FROM WorkItems 
        +   WHERE [System.TeamProject] = @project 
        +   AND [System.AssignedTo] EVER 'David Galvin'
        +   AND [System.AreaPath] UNDER 'Agile1\Area 0'
        +
        +
        Sort (`ORDER`) +
        SELECT [System.Id], [System.Title] 
        +   FROM WorkItems 
        +   WHERE [System.TeamProject] = @project 
        +   AND [System.AssignedTo] = 'Jon Ganio'
        +   ORDER BY [System.Id] [asc | desc]
        +
        +
        Time filter (`ASOF`) +
        SELECT [System.Title] 
        +   FROM workitems 
        +   WHERE [System.IterationPath] = 'MyProject\Beta' 
        +   AND [System.AssignedTo] = 'Jim Daly' 
        +   ASOF '3/16/06 12:30'
        +
        +
        + + +## Fields +When specifying fields, you can use the reference name or friendly name. The following examples are valid WIQL syntax. + + + + + + + + + + + + + + + + + + + + + + + + + +
        Supported field referencesExample
        Using reference name with spaces + +
        SELECT [System.AssignedTo] FROM ...
        +
        +
        Using a friendly name with spaces +
        SELECT [Assigned To] FROM ...
        +
        +
        Using names without spaces—no square brackets required +
        SELECT ID, Title FROM ...
        +
        +
        + +## Operators + +Queries use logical expressions to qualify result sets. These logical expressions are formed by one or more conjoined operations. + +Some simple query operations are listed below. + +``` +WHERE [System.AssignedTo] = 'joselugo' +WHERE [Adatum.CustomMethodology.Severity] >= 2 +``` + +The table below summarizes all the supported operators for different field types. For additional information on each field type, see [Field data types and attributes](../work/reference/define-modify-work-item-fields.md). + +The `=, <>, >, <, >=, and <=` operators work as expected. For instance, `System.ID > 100` queries for all work items with an **ID** greater than 100. `System.ChangedDate > '1/1/16 12:00:00'` queries for all work items changed after noon of January 1, 2016. + +Beyond these basic operators, there are some behaviors and operators specific to certain field types. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Field typeSupported operators
        Integer, Double, GUID + +```=, <>, >, <, >=, <= +``` +
        Boolean +```=``` +
        DateTime +```=, <>, >, <, >=, <=``` +
        String +```=, <>, >, <, >=, <=, Contains``` +
        PlainText +```Contains``` +
        TreePath +```Under, =, <>``` +
        + + +### DateTime + +You must quote (single or double quotes are supported) DateTime literals used in comparisons. They must be in the .NET DateTime format of the local client computer running the query. Unless a time zone is specified, DateTime literals are in the time zone of the local computer. + +``` +WHERE [Adatum.Lite.ResolvedDate] >= '1/8/06 GMT' and [Resolved Date/Time] < '1/9/06 GMT' +WHERE [Resolved Date] >= '1/8/06 14:30:01' +``` +When the time is omitted in a DateTime literal and the dayPrecision parameter equals false, the time is assumed to be zero (midnight). The default setting for the dayPrecision parameter is false. + +### String and PlainText + +You must quote string literals (single or double quotes are supported) in a comparison with a string or plain text field. String literals support all Unicode characters. + +``` +WHERE [Adatum.Lite.Blocking] = 'Not Blocking' +WHERE [Adatum.Lite.Blocking] <> 'Blocked' +``` + +You can use the contains operator to search for a substring anywhere in the field value. + +``` +WHERE [System.Description] contains 'WIQL' +``` + +### Area and Iteration (TreePath) + +You can use the under operator for the Area and Iteration Path fields. under evaluates whether a value is within the sub-tree of a specific classification node. For instance, the expression below would evaluate to true if the Area Path were 'MyProject\Server\Administration', 'MyProject\Server\Administration\Feature 1', 'MyProject\Server\Administration\Feature 2\SubFeature 5', or any other node within the sub-tree. + +``` +WHERE [System.AreaPath] under 'MyProject\Server\Administration' +``` + +### Modifiers and special operators + +You can use some modifiers and special operators in a query expression. + +Use the `in` operator to evaluate whether a field value is equal to any of a set of values. This operator is supported for the String, Integer, Double, and DateTime field types. See the following example along with its semantic equivalent. + +``` +WHERE [System.CreatedBy] in ('joselugo', 'jeffhay', 'linaabola') +WHERE [System.CreatedBy] = 'joselugo' OR [System.CreatedBy] = 'jeffhay' OR [System.CreatedBy] = 'linaabola' +``` + +The ever operator is used to evaluate whether a field value equals or has ever equaled a particular value throughout all past revisions of work items. The String, Integer, Double, and DateTime field types support this operator. There are alternate syntaxes for the ever operator. For example, the snippets below query whether all work items were ever assigned to 'joselugo'. + +``` +WHERE ever ([Assigned To] = ‘joselugo') +WHERE [Assigned To] ever ‘joselugo' +``` + + +## Logical grouping + +You can use the terms `and` and `or` in the typical Boolean sense to evaluate two clauses. You can group logical expressions and further conjoin them, as needed. Examples are shown below. + +``` +WHERE [System.State] = ‘Active' and [System.AssignedTo] = 'joselugo' and ([System.CreatedBy] = 'linaabola' + OR [Adatum.CustomMethodology.ResolvedBy] = 'jeffhay') + AND [System.State] = 'Closed' + WHERE [System.State] = 'Active' + AND [System.State] EVER 'Closed' +``` + +You can negate the `contains, under, in,` and `ever` operators by using `not`. The examples below query for all work items that are not classified within the sub-tree of 'MyProject\Feature1'. + +``` +WHERE [System.AreaPath] not under 'MyProject\Feature1' +WHERE [System.AssignedTo] not ever 'joselugo' +``` + + +## Macros + +The following table lists the macros or variables you can use within a WIQL query. + +|Macro|Usage| +|---|---| +| **@Me** |Use this variable to automatically search for the current user's alias in a field that contains user aliases. For example, you can find work items that you opened if you set the **Field** column to **Activated By**, the **Operator** column to **=**, and the **Value** column to **@Me**.| +| **@CurrentIteration** |Use this variable to automatically filter for work items assigned to the current sprint for the selected team based on the selected team context.| +| **@Project** |Use this variable to search for work items in the current team project. For example, you can find all the work items in the current team project if you set the **Field** column to **Team Project**, the **Operator** column to **=**, and the **Value** column to **@Project**.| +| **@Today** |Use this variable to search for work items that relate to the current date or to an earlier date. You can also modify the **@Today** variable by subtracting days. For example, you can find all items activated in the last week if you set the **Field** column to **Activated Date**, the **Operator** column to **>=**, and the **Value** column to **@Today - 7**.| +| **[Any]** |Use this variable to search for work items that relate to any value that is defined for a particular field.| + + +>[!NOTE] +>Both the `@me` and `@today` macros have default values. + + +### @me macro + +The `@me` macro substitutes the Windows Integrated account name of the user who runs the query. The example below shows how to use the macro and the equivalent static statement. Although the macro is intended for fields such as `Assigned To`, you can use it for any String field, although the result may not be meaningful. + +``` +[System.AssignedTo] = @Me +[System.AssignedTo] = 'joselugo' +``` + +### @today macro +You can use the `@today` macro with any DateTime field. This macro substitutes midnight of the current date on the local computer that runs the query. You can also specify `@today+x` or `@today-y` using integer offsets for x days after `@today` and y days before `@today`, respectively. Note that a query that uses the `@today` macro can return different result sets depending on the time zone in which it is run. + +The example below assumes that today is 1/3/16. + +``` +[System.CreatedDate] = @today +``` + +is the equivalent of: + +``` +[System.CreatedDate] = '1/3/16' +``` + +and + +``` +[System.CreatedDate] > @today-2 +``` + +is the equivalent of: + +``` +[System.CreatedDate] > '1/1/16' +``` + +### Custom macros + +WIQL also supports arbitrary custom macros. Any string prefixed by an '@' is treated as a custom macro and will be substituted. The substitute value for the custom macro is retrieved from the context parameter of the query method in the object model. The following method is the API used for macros: + +``` +public WorkItemCollection Query(string wiql, IDictionary context) +``` + +The context parameter contains key-value pairs for macros. For example, if the context contains a key-value pair of (project, MyProject), then '@project' will be replaced by 'MyProject' in the WIQL. This is how the work item query builder handles the @project macro in Visual Studio. + + + + +## Historical queries (ASOF) +You can use an `ASOF` clause in a query to filter for work items that satisfy the specified condition on a specific date at a specific time. + +For example, suppose a work item was classified under an iteration path of MyProject\ProjArea and assigned to 'Mark Hanson' on 3/17/16. However, the work item was recently assigned to 'Roger Harui' and moved to a new iteration path of Release. The following example query will return this work item because the query is based on the state of work items as of a past date and time. + + +>[!NOTE] +>If no time is specified, WIQL uses midnight. If no time zone is specified, WIQL uses the time zone of the local client computer. + +``` +SELECT [System.Title] + FROM workitems + WHERE ([System.IterationPath] = 'MyProject\ProjArea' and [System.AssignedTo] = 'Mark Hanson') + ASOF '3/16/16 12:30' +``` + +## Sorting results (ORDER BY) + +You can use the `ORDER BY` clause to sort the results of a query by one or more fields in ascending or descending order. + +>[!NOTE] +>The sorting preferences of the SQL server on the data tier determine the default sort order. However, you can use the `asc` or `desc` parameters to choose an explicit sort order. + +The following example sorts work items first by **Priority** in ascending order, and then by **Created Date** in descending order. + +``` +SELECT [System.Title] + FROM workitems + WHERE [System.State] = ‘Active' and [System.AssignedTo] = ‘joselugo' + ORDER BY [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc +``` + + + + +## Related notes + +- [Query fields, operators, values, and variables](../work/track/query-operators-variables.md) +- [Field data types and attributes](../work/reference/define-modify-work-item-fields.md) +- [Work item query language (REST API)](https://visualstudio.com/integrate/api/wit/wiql.md) +- [Wiql Editor, a Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ottostreifel.wiql-editor) + +### Limits on WIQL length + +For queries made against VSTS, the WIQL length must not exceed 32K characters. The system won't allow you to create or run queries that exceed that length. + \ No newline at end of file diff --git a/docs/release/_img/goback1.png b/docs/release/_img/goback1.png new file mode 100644 index 00000000000..4c3653e63be Binary files /dev/null and b/docs/release/_img/goback1.png differ diff --git a/docs/release/_img/horizontal-line.png b/docs/release/_img/horizontal-line.png new file mode 100644 index 00000000000..5b390ede452 Binary files /dev/null and b/docs/release/_img/horizontal-line.png differ diff --git a/docs/release/_img/info1.png b/docs/release/_img/info1.png new file mode 100644 index 00000000000..60585d12256 Binary files /dev/null and b/docs/release/_img/info1.png differ diff --git a/docs/release/_img/overview-05.png b/docs/release/_img/overview-05.png new file mode 100644 index 00000000000..6ee30acf65e Binary files /dev/null and b/docs/release/_img/overview-05.png differ diff --git a/docs/release/_shared/previous-version-header.md b/docs/release/_shared/previous-version-header.md new file mode 100644 index 00000000000..9c38921a8a3 --- /dev/null +++ b/docs/release/_shared/previous-version-header.md @@ -0,0 +1,22 @@ +**Visual Studio 2015 | Team Services | TFS 2015 | [Previous version](../overview-rm2013.md)** + +![horizontal-line](../_img/horizontal-line.png) + +![information](../_img/info1.png) +**A newer version of Release Management is available** + +Release Management features have been integrated into the **Build & Release** hub in +Team Foundation Server (TFS) and Visual Studio Team Services. +For more information, see [Continuous integration on any platform](../../build-release/overview.md). + +The newer web-based version is the recommended alternative +to the server and client version described in this topic. +If you do not already have Release Management installed, +we encourage you to use the web-based version in TFS 2015 +Update 2 and above or VSTS instead +of the version described here. +If you are already using an earlier server and client +version, you should be aware that no new features will +be added to these versions. + +![horizontal-line](../_img/horizontal-line.png) diff --git a/docs/release/_shared/wpfver-back-to-index-shared.md b/docs/release/_shared/wpfver-back-to-index-shared.md new file mode 100644 index 00000000000..094c03b8f9a --- /dev/null +++ b/docs/release/_shared/wpfver-back-to-index-shared.md @@ -0,0 +1,2 @@ +![Go back](../_img/goback1.png) +[Back to overview](../overview-rm2015.md) diff --git a/docs/release/_shared/wpfver-support-shared.md b/docs/release/_shared/wpfver-support-shared.md new file mode 100644 index 00000000000..d453a8d0aaa --- /dev/null +++ b/docs/release/_shared/wpfver-support-shared.md @@ -0,0 +1,4 @@ +## Help and support + +Send suggestions on [UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services/category/145269-release-management), +follow us on [Twitter](https://twitter.com/vsreleasemgmt) @vsreleasemgmt diff --git a/docs/release/author-release-definition/more-release-definition.md b/docs/release/author-release-definition/more-release-definition.md new file mode 100644 index 00000000000..378dc9cc33d --- /dev/null +++ b/docs/release/author-release-definition/more-release-definition.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/actions/work-with-release-definitions +--- diff --git a/docs/release/author-release-definition/understanding-artifacts.md b/docs/release/author-release-definition/understanding-artifacts.md new file mode 100644 index 00000000000..68a160ee4dd --- /dev/null +++ b/docs/release/author-release-definition/understanding-artifacts.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/concepts/definitions/release/artifacts +--- diff --git a/docs/release/author-release-definition/understanding-environments.md b/docs/release/author-release-definition/understanding-environments.md new file mode 100644 index 00000000000..f542efad586 --- /dev/null +++ b/docs/release/author-release-definition/understanding-environments.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/concepts/definitions/release/environments +--- diff --git a/docs/release/author-release-definition/understanding-tasks.md b/docs/release/author-release-definition/understanding-tasks.md new file mode 100644 index 00000000000..7f247e5c9cb --- /dev/null +++ b/docs/release/author-release-definition/understanding-tasks.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/concepts/process/tasks +--- diff --git a/docs/release/breadcrumb/toc.yml b/docs/release/breadcrumb/toc.yml new file mode 100644 index 00000000000..2768d0ac178 --- /dev/null +++ b/docs/release/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Release + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=delivery + items: + - name: "Release Management" + tocHref: /vsts/ + topicHref: /vsts/release/index diff --git a/docs/release/contents.md b/docs/release/contents.md new file mode 100644 index 00000000000..126109adbcc --- /dev/null +++ b/docs/release/contents.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/overview +--- diff --git a/docs/release/examples/azure-web-apps-from-build-and-release-hubs.md b/docs/release/examples/azure-web-apps-from-build-and-release-hubs.md new file mode 100644 index 00000000000..4bc914c2f75 --- /dev/null +++ b/docs/release/examples/azure-web-apps-from-build-and-release-hubs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/cd/deploy-webdeploy-webapps +--- diff --git a/docs/release/examples/azure/aspnet-core10-azure-web-apps.md b/docs/release/examples/azure/aspnet-core10-azure-web-apps.md new file mode 100644 index 00000000000..d63033bed9c --- /dev/null +++ b/docs/release/examples/azure/aspnet-core10-azure-web-apps.md @@ -0,0 +1,4 @@ +--- +redirect_url: /vsts/build-release/ +--- + diff --git a/docs/release/examples/azure/aspnet-to-azure-deployment-groups.md b/docs/release/examples/azure/aspnet-to-azure-deployment-groups.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/azure/aspnet-to-azure-deployment-groups.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/azure/azure-web-apps-and-sql-db.md b/docs/release/examples/azure/azure-web-apps-and-sql-db.md new file mode 100644 index 00000000000..d63033bed9c --- /dev/null +++ b/docs/release/examples/azure/azure-web-apps-and-sql-db.md @@ -0,0 +1,4 @@ +--- +redirect_url: /vsts/build-release/ +--- + diff --git a/docs/release/examples/azure/azure-web-apps-and-sql-scripts.md b/docs/release/examples/azure/azure-web-apps-and-sql-scripts.md new file mode 100644 index 00000000000..d63033bed9c --- /dev/null +++ b/docs/release/examples/azure/azure-web-apps-and-sql-scripts.md @@ -0,0 +1,4 @@ +--- +redirect_url: /vsts/build-release/ +--- + diff --git a/docs/release/examples/azure/azure-web-apps-from-build-and-release-hubs.md b/docs/release/examples/azure/azure-web-apps-from-build-and-release-hubs.md new file mode 100644 index 00000000000..d63033bed9c --- /dev/null +++ b/docs/release/examples/azure/azure-web-apps-from-build-and-release-hubs.md @@ -0,0 +1,4 @@ +--- +redirect_url: /vsts/build-release/ +--- + diff --git a/docs/release/examples/azure/change-config-azure-cloudservices.md b/docs/release/examples/azure/change-config-azure-cloudservices.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/azure/change-config-azure-cloudservices.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/azure/change-config-azure-webapps.md b/docs/release/examples/azure/change-config-azure-webapps.md new file mode 100644 index 00000000000..d63033bed9c --- /dev/null +++ b/docs/release/examples/azure/change-config-azure-webapps.md @@ -0,0 +1,4 @@ +--- +redirect_url: /vsts/build-release/ +--- + diff --git a/docs/release/examples/azure/continuous-to-app-service.md b/docs/release/examples/azure/continuous-to-app-service.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/azure/continuous-to-app-service.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/azure/deployment-slots-webapps.md b/docs/release/examples/azure/deployment-slots-webapps.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/azure/deployment-slots-webapps.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/azure/net-to-azure-cloud-services.md b/docs/release/examples/azure/net-to-azure-cloud-services.md new file mode 100644 index 00000000000..d63033bed9c --- /dev/null +++ b/docs/release/examples/azure/net-to-azure-cloud-services.md @@ -0,0 +1,4 @@ +--- +redirect_url: /vsts/build-release/ +--- + diff --git a/docs/release/examples/azure/net-to-azure-vm.md b/docs/release/examples/azure/net-to-azure-vm.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/azure/net-to-azure-vm.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/azure/provision-azure-vm.md b/docs/release/examples/azure/provision-azure-vm.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/azure/provision-azure-vm.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/azure/provision-devtest-lab.md b/docs/release/examples/azure/provision-devtest-lab.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/azure/provision-devtest-lab.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/change-config-azure-cloudservices.md b/docs/release/examples/change-config-azure-cloudservices.md new file mode 100644 index 00000000000..33e970bb78a --- /dev/null +++ b/docs/release/examples/change-config-azure-cloudservices.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/cd/deploy-webdeploy-webapps#configenvir +--- diff --git a/docs/release/examples/change-config-azure-webapps.md b/docs/release/examples/change-config-azure-webapps.md new file mode 100644 index 00000000000..33e970bb78a --- /dev/null +++ b/docs/release/examples/change-config-azure-webapps.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/cd/deploy-webdeploy-webapps#configenvir +--- diff --git a/docs/release/examples/deployment-slots-webapps.md b/docs/release/examples/deployment-slots-webapps.md new file mode 100644 index 00000000000..3b0eded3ab2 --- /dev/null +++ b/docs/release/examples/deployment-slots-webapps.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/cd/deploy-webdeploy-webapps#swapslots +--- diff --git a/docs/release/examples/docker/aspnet-core10-docker.md b/docs/release/examples/docker/aspnet-core10-docker.md new file mode 100644 index 00000000000..718972f2f36 --- /dev/null +++ b/docs/release/examples/docker/aspnet-core10-docker.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://blogs.msdn.microsoft.com/stevelasker/2016/06/13/building-net-core-linux-docker-images-with-visual-studio-team-services/ +--- diff --git a/docs/release/examples/examples-index.md b/docs/release/examples/examples-index.md new file mode 100644 index 00000000000..71e9198f12b --- /dev/null +++ b/docs/release/examples/examples-index.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/index +--- diff --git a/docs/release/examples/examples.md b/docs/release/examples/examples.md new file mode 100644 index 00000000000..71e9198f12b --- /dev/null +++ b/docs/release/examples/examples.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/index +--- diff --git a/docs/release/examples/net-to-azure-cloud-services.md b/docs/release/examples/net-to-azure-cloud-services.md new file mode 100644 index 00000000000..ce78f5d2b7e --- /dev/null +++ b/docs/release/examples/net-to-azure-cloud-services.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/ +--- diff --git a/docs/release/examples/net-to-azure-resource-group-using-iis-sqlserver.md b/docs/release/examples/net-to-azure-resource-group-using-iis-sqlserver.md new file mode 100644 index 00000000000..96781978343 --- /dev/null +++ b/docs/release/examples/net-to-azure-resource-group-using-iis-sqlserver.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/cd/deploy-dacpac-sqlpackage +--- diff --git a/docs/release/examples/net-to-azure-resource-group-using-powershell-dsc.md b/docs/release/examples/net-to-azure-resource-group-using-powershell-dsc.md new file mode 100644 index 00000000000..4bc914c2f75 --- /dev/null +++ b/docs/release/examples/net-to-azure-resource-group-using-powershell-dsc.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/cd/deploy-webdeploy-webapps +--- diff --git a/docs/release/examples/net-to-azure-vm.md b/docs/release/examples/net-to-azure-vm.md new file mode 100644 index 00000000000..ce78f5d2b7e --- /dev/null +++ b/docs/release/examples/net-to-azure-vm.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/apps/ +--- diff --git a/docs/release/examples/nodejs/node-to-azure-cloud-service.md b/docs/release/examples/nodejs/node-to-azure-cloud-service.md new file mode 100644 index 00000000000..029476aefb3 --- /dev/null +++ b/docs/release/examples/nodejs/node-to-azure-cloud-service.md @@ -0,0 +1,4 @@ +--- +redirect_url: https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-nodejs-develop-deploy-app +--- + diff --git a/docs/release/examples/nodejs/node-to-azure-webapps.md b/docs/release/examples/nodejs/node-to-azure-webapps.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/nodejs/node-to-azure-webapps.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/nodejs/node-to-win-server.md b/docs/release/examples/nodejs/node-to-win-server.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/nodejs/node-to-win-server.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/other-servers/net-to-vm.md b/docs/release/examples/other-servers/net-to-vm.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/other-servers/net-to-vm.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/other-servers/net-to-workgroup-vm.md b/docs/release/examples/other-servers/net-to-workgroup-vm.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/other-servers/net-to-workgroup-vm.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/scvmm/restore-vm-in-scvmm.md b/docs/release/examples/scvmm/restore-vm-in-scvmm.md new file mode 100644 index 00000000000..149df97aca5 --- /dev/null +++ b/docs/release/examples/scvmm/restore-vm-in-scvmm.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/examples/vmware/provision-vm-in-vmware.md b/docs/release/examples/vmware/provision-vm-in-vmware.md new file mode 100644 index 00000000000..13ba35b9e29 --- /dev/null +++ b/docs/release/examples/vmware/provision-vm-in-vmware.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/ +--- diff --git a/docs/release/getting-started/azure-rm-endpoint.md b/docs/release/getting-started/azure-rm-endpoint.md new file mode 100644 index 00000000000..8fe3d3eb472 --- /dev/null +++ b/docs/release/getting-started/azure-rm-endpoint.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/actions/azure-rm-endpoint +--- diff --git a/docs/release/getting-started/concurrent-pipelines-tfs.md b/docs/release/getting-started/concurrent-pipelines-tfs.md new file mode 100644 index 00000000000..29ef5445d8c --- /dev/null +++ b/docs/release/getting-started/concurrent-pipelines-tfs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/concepts/licensing/concurrent-pipelines-tfs +--- diff --git a/docs/release/getting-started/concurrent-pipelines-ts.md b/docs/release/getting-started/concurrent-pipelines-ts.md new file mode 100644 index 00000000000..07772d34a9f --- /dev/null +++ b/docs/release/getting-started/concurrent-pipelines-ts.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/concepts/licensing/concurrent-pipelines-ts +--- diff --git a/docs/release/getting-started/concurrent-pipelines-vsts.md b/docs/release/getting-started/concurrent-pipelines-vsts.md new file mode 100644 index 00000000000..07772d34a9f --- /dev/null +++ b/docs/release/getting-started/concurrent-pipelines-vsts.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/concepts/licensing/concurrent-pipelines-ts +--- diff --git a/docs/release/getting-started/configure-agents.md b/docs/release/getting-started/configure-agents.md new file mode 100644 index 00000000000..852ff7faf95 --- /dev/null +++ b/docs/release/getting-started/configure-agents.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/concepts/agents/agents +--- diff --git a/docs/release/getting-started/join-preview.md b/docs/release/getting-started/join-preview.md new file mode 100644 index 00000000000..126109adbcc --- /dev/null +++ b/docs/release/getting-started/join-preview.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/overview +--- diff --git a/docs/release/getting-started/machine-group-agents.md b/docs/release/getting-started/machine-group-agents.md new file mode 100644 index 00000000000..58892db36d7 --- /dev/null +++ b/docs/release/getting-started/machine-group-agents.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/concepts/definitions/release/deployment-groups/index +--- diff --git a/docs/release/getting-started/release-notes.md b/docs/release/getting-started/release-notes.md new file mode 100644 index 00000000000..298f5462c47 --- /dev/null +++ b/docs/release/getting-started/release-notes.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/archive/news/rm-archived +--- diff --git a/docs/release/getting-started/understand-rm.md b/docs/release/getting-started/understand-rm.md new file mode 100644 index 00000000000..f40deeb21c0 --- /dev/null +++ b/docs/release/getting-started/understand-rm.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/concepts/definitions/release/what-is-release-management +--- diff --git a/docs/release/index.md b/docs/release/index.md new file mode 100644 index 00000000000..8696430bd17 --- /dev/null +++ b/docs/release/index.md @@ -0,0 +1,37 @@ +--- +title: Version selector for Microsoft Release Management +description: Version selector for Microsoft Release Management for Visual Studio, Visual Studio Team Services, and Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.assetid: 8E6798F6-F900-461F-950F-5AC8FC457FC7 +ms.manager: douge +ms.author: ahomer +ms.date: 08/19/2016 +--- + +# Release Management for Visual Studio, Visual Studio Team Services, and Team Foundation Server + +**Team Services | TFS 2017 | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +**Release Management** helps you support a rapid release cadence and manage simultaneous releases. +You can: + +* Set up release definitions that represent your environments from development to production. +* Run automations to deploy your app to each environment. +* Add approvers to sign off that the app has been successfully deployed in an environment. +* Create your release manually or automatically from a build. +* Track your releases as they are deployed to various environments. + +... and much more. + +The **[current version](../build-release/overview.md)** of Release Management is integrated into the **Build & Release** hub in +Team Foundation Server (TFS) and Visual Studio Team Services. +For more information, see **[Continuous integration on any platform](../build-release/overview.md)**. + +The **previous versions** of Release Management are deprecated. No new features will be added to these versions: + +* **[Server and client version for Visual Studio 2015](overview-rm2015.md)** +* **[Server and client version for Visual Studio 2013](https://msdn.microsoft.com/library/dn217874%28v%3Dvs.120%29.aspx)** + +> New to DevOps? **[Learn More](https://www.visualstudio.com/devops)** about how implementing DevOps helps you continuously deliver value to your customers. + diff --git a/docs/release/managing-releases/create-release.md b/docs/release/managing-releases/create-release.md new file mode 100644 index 00000000000..0b35dfb9a66 --- /dev/null +++ b/docs/release/managing-releases/create-release.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/actions/create-deploy-releases +--- diff --git a/docs/release/managing-releases/track-release.md b/docs/release/managing-releases/track-release.md new file mode 100644 index 00000000000..88fd7a5e207 --- /dev/null +++ b/docs/release/managing-releases/track-release.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/actions/view-manage-releases +--- diff --git a/docs/release/overview-rm2013.md b/docs/release/overview-rm2013.md new file mode 100644 index 00000000000..66c906fd817 --- /dev/null +++ b/docs/release/overview-rm2013.md @@ -0,0 +1,22 @@ +--- +title: Microsoft Release Management 2013 Server and Client Version - Help Contents +description: Create managed continuous deployment pipelines using Release Management 2013 (server and client version) +ms.assetid: 15B2F7A1-E9D3-4D4D-9991-A514959D71F2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Release Management 2013 (server and client version) + +**Visual Studio 2013 | VSTS | Team Foundation Server 2013** + +Go to the **[Release Management 2013 documentation in MSDN Library](https://msdn.microsoft.com/library/dn217874%28v%3Dvs.120%29.aspx)**. + +![Manage your release in RM 2013](_img/overview-05.png) + +![information](_img/info1.png) +Go to the **[Release Management 2013 documentation in MSDN Library](https://msdn.microsoft.com/library/dn217874%28v%3Dvs.120%29.aspx)**. + diff --git a/docs/release/overview-rm2015.md b/docs/release/overview-rm2015.md new file mode 100644 index 00000000000..617bef6c642 --- /dev/null +++ b/docs/release/overview-rm2015.md @@ -0,0 +1,37 @@ +--- +title: Microsoft Release Management 2015 Server and Client Version - Help Contents +description: Create managed continuous deployment pipelines using Release Management 2015 (server and client version) +ms.assetid: 9ABB2478-BE87-4DAC-8365-3A5138225554 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 10/20/2016 +--- + +# Release Management 2015 (server and client version) + +[!INCLUDE [previous-version-header](_shared/previous-version-header.md)] + +Improve the process of managing the release of your app. +Deploy your app to a specific environment for each separate stage. +Manage the steps in the process with approvals for each step. + +* **[Overview](previous-version/release-management-overview.md)** + - [Install Release Management](previous-version/install-release-management.md) + * [System requirements for Release Management](previous-version/install-release-management/system-requirements.md) + * [Install Release Management server and client](previous-version/install-release-management/install-server-and-client.md) + * [Install deployment agents](previous-version/install-release-management/install-deployment-agent.md) + * [Connect Release Management to TFS](previous-version/install-release-management/connect-to-tfs.md) + - [Manage users, groups, and permissions](previous-version/add-users-and-groups.md) +* **[Manage your release](previous-version/manage-your-release.md)** + - [Release without deployment agents](previous-version/release-without-agents.md) + - [Release with deployment agents](previous-version/release-with-agents.md) + - [Trigger a release from a build](previous-version/trigger-a-release.md) + - [Deploy continuously to Azure](previous-version/deploy-continuously-to-azure.md) + - [Release actions to deploy an app](previous-version/release-actions.md) + * [Tools for release actions](previous-version/release-actions/release-action-tools.md) + - [Configuration variables and system variables](previous-version/config-and-system-variables.md) + +[!INCLUDE [wpfver-support-shared](_shared/wpfver-support-shared.md)] + diff --git a/docs/release/overview.md b/docs/release/overview.md new file mode 100644 index 00000000000..126109adbcc --- /dev/null +++ b/docs/release/overview.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/overview +--- diff --git a/docs/release/previous-version/_img/add-users-01.png b/docs/release/previous-version/_img/add-users-01.png new file mode 100644 index 00000000000..292dc609841 Binary files /dev/null and b/docs/release/previous-version/_img/add-users-01.png differ diff --git a/docs/release/previous-version/_img/add-users-02.png b/docs/release/previous-version/_img/add-users-02.png new file mode 100644 index 00000000000..4255d769c09 Binary files /dev/null and b/docs/release/previous-version/_img/add-users-02.png differ diff --git a/docs/release/previous-version/_img/add-users-03.png b/docs/release/previous-version/_img/add-users-03.png new file mode 100644 index 00000000000..34ae80cd2c6 Binary files /dev/null and b/docs/release/previous-version/_img/add-users-03.png differ diff --git a/docs/release/previous-version/_img/add-users-04.png b/docs/release/previous-version/_img/add-users-04.png new file mode 100644 index 00000000000..ad368095d07 Binary files /dev/null and b/docs/release/previous-version/_img/add-users-04.png differ diff --git a/docs/release/previous-version/_img/config-system-vars-01.png b/docs/release/previous-version/_img/config-system-vars-01.png new file mode 100644 index 00000000000..3b5836f2f10 Binary files /dev/null and b/docs/release/previous-version/_img/config-system-vars-01.png differ diff --git a/docs/release/previous-version/_img/config-system-vars-02.png b/docs/release/previous-version/_img/config-system-vars-02.png new file mode 100644 index 00000000000..18150298de7 Binary files /dev/null and b/docs/release/previous-version/_img/config-system-vars-02.png differ diff --git a/docs/release/previous-version/_img/config-system-vars-03.png b/docs/release/previous-version/_img/config-system-vars-03.png new file mode 100644 index 00000000000..bf1d3275d29 Binary files /dev/null and b/docs/release/previous-version/_img/config-system-vars-03.png differ diff --git a/docs/release/previous-version/_img/config-system-vars-04.png b/docs/release/previous-version/_img/config-system-vars-04.png new file mode 100644 index 00000000000..8434b7a2871 Binary files /dev/null and b/docs/release/previous-version/_img/config-system-vars-04.png differ diff --git a/docs/release/previous-version/_img/config-system-vars-05.png b/docs/release/previous-version/_img/config-system-vars-05.png new file mode 100644 index 00000000000..fe1aa11314d Binary files /dev/null and b/docs/release/previous-version/_img/config-system-vars-05.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-01.png b/docs/release/previous-version/_img/deploy-continuously-01.png new file mode 100644 index 00000000000..7c454add192 Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-01.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-02.png b/docs/release/previous-version/_img/deploy-continuously-02.png new file mode 100644 index 00000000000..60207a484f6 Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-02.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-03.png b/docs/release/previous-version/_img/deploy-continuously-03.png new file mode 100644 index 00000000000..e3cfebae9a6 Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-03.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-04.png b/docs/release/previous-version/_img/deploy-continuously-04.png new file mode 100644 index 00000000000..abf1514ab38 Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-04.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-05.png b/docs/release/previous-version/_img/deploy-continuously-05.png new file mode 100644 index 00000000000..ec420f69295 Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-05.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-06.png b/docs/release/previous-version/_img/deploy-continuously-06.png new file mode 100644 index 00000000000..cfd04aee6f5 Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-06.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-07.png b/docs/release/previous-version/_img/deploy-continuously-07.png new file mode 100644 index 00000000000..e32182793b1 Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-07.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-08.png b/docs/release/previous-version/_img/deploy-continuously-08.png new file mode 100644 index 00000000000..59916d5069e Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-08.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-09.png b/docs/release/previous-version/_img/deploy-continuously-09.png new file mode 100644 index 00000000000..ef0a20d059b Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-09.png differ diff --git a/docs/release/previous-version/_img/deploy-continuously-10.png b/docs/release/previous-version/_img/deploy-continuously-10.png new file mode 100644 index 00000000000..a3cfc2632a9 Binary files /dev/null and b/docs/release/previous-version/_img/deploy-continuously-10.png differ diff --git a/docs/release/previous-version/_img/install-rm-01.png b/docs/release/previous-version/_img/install-rm-01.png new file mode 100644 index 00000000000..749f0778356 Binary files /dev/null and b/docs/release/previous-version/_img/install-rm-01.png differ diff --git a/docs/release/previous-version/_img/install-rm-04.png b/docs/release/previous-version/_img/install-rm-04.png new file mode 100644 index 00000000000..79a004c8ae6 Binary files /dev/null and b/docs/release/previous-version/_img/install-rm-04.png differ diff --git a/docs/release/previous-version/_img/manage-release-01.png b/docs/release/previous-version/_img/manage-release-01.png new file mode 100644 index 00000000000..da874fa355b Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-01.png differ diff --git a/docs/release/previous-version/_img/manage-release-02.png b/docs/release/previous-version/_img/manage-release-02.png new file mode 100644 index 00000000000..a3cfc2632a9 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-02.png differ diff --git a/docs/release/previous-version/_img/manage-release-03.png b/docs/release/previous-version/_img/manage-release-03.png new file mode 100644 index 00000000000..701d31e196c Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-03.png differ diff --git a/docs/release/previous-version/_img/manage-release-04.png b/docs/release/previous-version/_img/manage-release-04.png new file mode 100644 index 00000000000..067c86dfcbe Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-04.png differ diff --git a/docs/release/previous-version/_img/manage-release-05.png b/docs/release/previous-version/_img/manage-release-05.png new file mode 100644 index 00000000000..442088da135 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-05.png differ diff --git a/docs/release/previous-version/_img/manage-release-06.png b/docs/release/previous-version/_img/manage-release-06.png new file mode 100644 index 00000000000..0666a11412f Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-06.png differ diff --git a/docs/release/previous-version/_img/manage-release-07.png b/docs/release/previous-version/_img/manage-release-07.png new file mode 100644 index 00000000000..38f291d5b29 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-07.png differ diff --git a/docs/release/previous-version/_img/manage-release-08.png b/docs/release/previous-version/_img/manage-release-08.png new file mode 100644 index 00000000000..d035b24a750 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-08.png differ diff --git a/docs/release/previous-version/_img/manage-release-09.png b/docs/release/previous-version/_img/manage-release-09.png new file mode 100644 index 00000000000..715c3fa56e0 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-09.png differ diff --git a/docs/release/previous-version/_img/manage-release-10.png b/docs/release/previous-version/_img/manage-release-10.png new file mode 100644 index 00000000000..4243330830d Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-10.png differ diff --git a/docs/release/previous-version/_img/manage-release-11.png b/docs/release/previous-version/_img/manage-release-11.png new file mode 100644 index 00000000000..9f691f5a054 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-11.png differ diff --git a/docs/release/previous-version/_img/manage-release-12.png b/docs/release/previous-version/_img/manage-release-12.png new file mode 100644 index 00000000000..b451d3fe6b7 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-12.png differ diff --git a/docs/release/previous-version/_img/manage-release-13.png b/docs/release/previous-version/_img/manage-release-13.png new file mode 100644 index 00000000000..fc49ecbf02d Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-13.png differ diff --git a/docs/release/previous-version/_img/manage-release-14.png b/docs/release/previous-version/_img/manage-release-14.png new file mode 100644 index 00000000000..b2419d65b5a Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-14.png differ diff --git a/docs/release/previous-version/_img/manage-release-15.png b/docs/release/previous-version/_img/manage-release-15.png new file mode 100644 index 00000000000..a18f98bd659 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-15.png differ diff --git a/docs/release/previous-version/_img/manage-release-16.png b/docs/release/previous-version/_img/manage-release-16.png new file mode 100644 index 00000000000..c9ee9573679 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-16.png differ diff --git a/docs/release/previous-version/_img/manage-release-17.png b/docs/release/previous-version/_img/manage-release-17.png new file mode 100644 index 00000000000..937771acb47 Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-17.png differ diff --git a/docs/release/previous-version/_img/manage-release-18.png b/docs/release/previous-version/_img/manage-release-18.png new file mode 100644 index 00000000000..a186d3c8a0f Binary files /dev/null and b/docs/release/previous-version/_img/manage-release-18.png differ diff --git a/docs/release/previous-version/_img/overview-01.png b/docs/release/previous-version/_img/overview-01.png new file mode 100644 index 00000000000..8a152ead87f Binary files /dev/null and b/docs/release/previous-version/_img/overview-01.png differ diff --git a/docs/release/previous-version/_img/release-actions-01.png b/docs/release/previous-version/_img/release-actions-01.png new file mode 100644 index 00000000000..6ee30acf65e Binary files /dev/null and b/docs/release/previous-version/_img/release-actions-01.png differ diff --git a/docs/release/previous-version/_img/release-actions-02.png b/docs/release/previous-version/_img/release-actions-02.png new file mode 100644 index 00000000000..cf6ddfbb706 Binary files /dev/null and b/docs/release/previous-version/_img/release-actions-02.png differ diff --git a/docs/release/previous-version/_img/release-actions-03.png b/docs/release/previous-version/_img/release-actions-03.png new file mode 100644 index 00000000000..00c4433a70a Binary files /dev/null and b/docs/release/previous-version/_img/release-actions-03.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-01.png b/docs/release/previous-version/_img/release-with-agents-01.png new file mode 100644 index 00000000000..c5f0f656851 Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-01.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-02.png b/docs/release/previous-version/_img/release-with-agents-02.png new file mode 100644 index 00000000000..c2bd6077da9 Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-02.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-03.png b/docs/release/previous-version/_img/release-with-agents-03.png new file mode 100644 index 00000000000..9077b98e83f Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-03.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-04.png b/docs/release/previous-version/_img/release-with-agents-04.png new file mode 100644 index 00000000000..2c397a9c631 Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-04.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-05.png b/docs/release/previous-version/_img/release-with-agents-05.png new file mode 100644 index 00000000000..8ab4af3b8f0 Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-05.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-06.png b/docs/release/previous-version/_img/release-with-agents-06.png new file mode 100644 index 00000000000..8c78da334a0 Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-06.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-07.png b/docs/release/previous-version/_img/release-with-agents-07.png new file mode 100644 index 00000000000..84f40eb159f Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-07.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-08.png b/docs/release/previous-version/_img/release-with-agents-08.png new file mode 100644 index 00000000000..93e4d22f5b1 Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-08.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-09.png b/docs/release/previous-version/_img/release-with-agents-09.png new file mode 100644 index 00000000000..7b73b6b1ad0 Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-09.png differ diff --git a/docs/release/previous-version/_img/release-with-agents-10.png b/docs/release/previous-version/_img/release-with-agents-10.png new file mode 100644 index 00000000000..b451d3fe6b7 Binary files /dev/null and b/docs/release/previous-version/_img/release-with-agents-10.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-01.png b/docs/release/previous-version/_img/release-without-agents-01.png new file mode 100644 index 00000000000..6556d509cc0 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-01.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-02.png b/docs/release/previous-version/_img/release-without-agents-02.png new file mode 100644 index 00000000000..17ebb8dde68 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-02.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-03.png b/docs/release/previous-version/_img/release-without-agents-03.png new file mode 100644 index 00000000000..c2997c8d4b9 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-03.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-04.png b/docs/release/previous-version/_img/release-without-agents-04.png new file mode 100644 index 00000000000..57c2f9aeb91 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-04.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-05.png b/docs/release/previous-version/_img/release-without-agents-05.png new file mode 100644 index 00000000000..77477d048cc Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-05.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-06.png b/docs/release/previous-version/_img/release-without-agents-06.png new file mode 100644 index 00000000000..0ba451affb8 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-06.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-07.png b/docs/release/previous-version/_img/release-without-agents-07.png new file mode 100644 index 00000000000..2b4dee72960 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-07.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-08.png b/docs/release/previous-version/_img/release-without-agents-08.png new file mode 100644 index 00000000000..ff183b09006 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-08.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-09.png b/docs/release/previous-version/_img/release-without-agents-09.png new file mode 100644 index 00000000000..d0796b2a809 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-09.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-10.png b/docs/release/previous-version/_img/release-without-agents-10.png new file mode 100644 index 00000000000..581780cf648 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-10.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-11.png b/docs/release/previous-version/_img/release-without-agents-11.png new file mode 100644 index 00000000000..bd1892a537d Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-11.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-12.png b/docs/release/previous-version/_img/release-without-agents-12.png new file mode 100644 index 00000000000..d0796b2a809 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-12.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-13.png b/docs/release/previous-version/_img/release-without-agents-13.png new file mode 100644 index 00000000000..af16105b518 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-13.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-14.png b/docs/release/previous-version/_img/release-without-agents-14.png new file mode 100644 index 00000000000..d70bfec197c Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-14.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-15.png b/docs/release/previous-version/_img/release-without-agents-15.png new file mode 100644 index 00000000000..54e20dfdd2e Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-15.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-16.png b/docs/release/previous-version/_img/release-without-agents-16.png new file mode 100644 index 00000000000..a1decde61c4 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-16.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-17.png b/docs/release/previous-version/_img/release-without-agents-17.png new file mode 100644 index 00000000000..1bcc9684678 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-17.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-18.png b/docs/release/previous-version/_img/release-without-agents-18.png new file mode 100644 index 00000000000..e8759f9d859 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-18.png differ diff --git a/docs/release/previous-version/_img/release-without-agents-19.png b/docs/release/previous-version/_img/release-without-agents-19.png new file mode 100644 index 00000000000..071a6943e80 Binary files /dev/null and b/docs/release/previous-version/_img/release-without-agents-19.png differ diff --git a/docs/release/previous-version/_img/trigger-release-01.png b/docs/release/previous-version/_img/trigger-release-01.png new file mode 100644 index 00000000000..505e778aba9 Binary files /dev/null and b/docs/release/previous-version/_img/trigger-release-01.png differ diff --git a/docs/release/previous-version/_img/trigger-release-02.png b/docs/release/previous-version/_img/trigger-release-02.png new file mode 100644 index 00000000000..ab26cf09549 Binary files /dev/null and b/docs/release/previous-version/_img/trigger-release-02.png differ diff --git a/docs/release/previous-version/_img/trigger-release-05.png b/docs/release/previous-version/_img/trigger-release-05.png new file mode 100644 index 00000000000..a705f61a0e3 Binary files /dev/null and b/docs/release/previous-version/_img/trigger-release-05.png differ diff --git a/docs/release/previous-version/_img/trigger-release-06.png b/docs/release/previous-version/_img/trigger-release-06.png new file mode 100644 index 00000000000..04ba5452ee1 Binary files /dev/null and b/docs/release/previous-version/_img/trigger-release-06.png differ diff --git a/docs/release/previous-version/_img/trigger-release-07.png b/docs/release/previous-version/_img/trigger-release-07.png new file mode 100644 index 00000000000..9a9c6eb95ae Binary files /dev/null and b/docs/release/previous-version/_img/trigger-release-07.png differ diff --git a/docs/release/previous-version/_img/trigger-release-08.png b/docs/release/previous-version/_img/trigger-release-08.png new file mode 100644 index 00000000000..be382983b94 Binary files /dev/null and b/docs/release/previous-version/_img/trigger-release-08.png differ diff --git a/docs/release/previous-version/_img/trigger-release-09.png b/docs/release/previous-version/_img/trigger-release-09.png new file mode 100644 index 00000000000..a4beab5ace0 Binary files /dev/null and b/docs/release/previous-version/_img/trigger-release-09.png differ diff --git a/docs/release/previous-version/add-users-and-groups.md b/docs/release/previous-version/add-users-and-groups.md new file mode 100644 index 00000000000..608cff0f751 --- /dev/null +++ b/docs/release/previous-version/add-users-and-groups.md @@ -0,0 +1,200 @@ +--- +title: Add users and groups and control access in Release Management +description: Add users and groups and control access in Release Management server/client for Visual Studio 2015 and TFS 2015 +ms.assetid: AEB78F81-1F59-47DE-AED0-F38C724024FC +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Add users and groups, and control access to Release Management + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +You must add the user account of anyone who wants to set up, start, or approve +releases to Release Management. Also, you must add the service accounts that +are used in deploying applications in your release environment. You can add +**[individual user accounts](#add_user)** or a +**[group of users](#add_group)** +defined in Team Foundation Server (TFS), Active Directory (AD), or Release +Management. Control access to release functions based on user role or group +permissions. + +All users you add, whether individually or through a group, belong to the +**Everyone** group. By default, members of the Everyone group have access to +all Release Management operations, including adding users and setting +permissions. + +If you want to restrict access, then you'll want to follow these steps: + +1. [Determine the groups you need](#control_access). + +1. [Define these groups in TFS](https://msdn.microsoft.com/library/bb558971%28v%3Dvs.140%29.aspx) + or in [Active Directory](../../tfs-server/admin/setup-ad-groups.md). + +1. [Add the groups to Release Management, set their permissions, and change the Everyone group permissions](#add_group). + + +## Add an individual user or service account + +1. If you haven't installed the Release Management client, + **[do that now](install-release-management/install-server-and-client.md#installclient)**. + +1. If you haven't been added to the **Release Manager** role, get added now + from someone with that role. This role is required to manage security. + +1. Open the New User page from the **Administration** | **Manage Users** tab. + + ![Open the New User page](_img/add-users-01.png) + +1. Choose a user account using the ellipsis (**...**) button, and set the + user role. + + Do not assign any role when you want to restrict access to functional areas. + Instead, link the user account to the group where you set permissions. + + Assign the **Release Manager** role to grant access to the following + functions: + + * Manage the connection between TFS and Release Management. + * View and edit all release paths and stages that are defined in a release path. + * For release templates, create and edit the templates, view and edit the deployment sequence and configuration variables for all stages that are defined, and add custom tools and actions. + * Manage servers, environments, actions, tools, and security. + + +## Add a group + +1. Choose the type of group you want to add from the **Administration** | + **Manage Groups** tab. + + ![Add a user group](_img/add-users-02.png) + + The **Manage Groups** tab is available only when you are connected to + Release Management Server. You cannot add groups when you are connected + to Visual Studio Team Services. + +1. On the **Security** tab, select the permissions that you want to enable + for this group. + + ![Select the permissions for a group ](_img/add-users-03.png) + +1. Under **Stages**, keep the default **All Stage Types** or add one or more + stages. + + * **Edit Values and Target Servers**: Users in this group can edit + deployment sequence and configuration variables for a release or stage. + Without this permission, stage information is read-only. + + * **Edit Approvals and Environment**: Users in this group can edit + approvals and environments for a stage. Without this permission, stage + information is read-only. + +1. If you create a Release Management group (one not associated with TFS or + AD), link existing user accounts to be members of this group. + + ![Link existing user accounts as members of group ](_img/add-users-04.png) + + Or, you can add a user account by choosing the **Create** button. + +1. Edit the **Everyone** group to remove permissions to which you want to + restrict access. + +1. Notify the users that you added. Let them know that they have to install + the Release Management client, or restart their client. This is required + for their client to register the changes in permission. + +## Q & A + +### Q: Who needs to be added as a user to Release Management? + +**A**: These users: + +* Any user who needs to create, start or approve a release. +* Any user who needs to manage the release configuration, servers, + environment, and inventory of tools and actions used in deploying + applications. +* Service accounts that are used to deploy apps or manage web services. + + +### Q: What groups should I define to control access? + +**A**: Define groups based on the restrictions you want to enforce. For +example, you can restrict access based on one or more of the following +functional user roles. You can define these groups in TFS, AD, or through the +Release Management client itself: + +* **Approvers**: These users approve or validate a step or stage during a + release cycle. They need the **Edit Approvals and Environment** permission set + for all stage types that they will be required to approve. + +* **Deployers**: These users will create release templates and initiate + releases based on the release paths created by the release architects. They + need the **Can Create Release Template** and **Edit Values and Target + Servers** permissions for all stage types. + +* **Tool and action developers**: These users will add or modify tools and + actions. Release actions define the deployment sequence for each stage of a + release. Each action uses a specific tool to run a command with a set of + arguments. Enable these permissions for these users: **Can Manage Inventory** + and **Can Use Custom Tool in Actions and Components**. To learn more, see + [Release actions to deploy an app](release-actions.md). + +* **Administrators**: These users will manage the servers and security for + all release management operations. Enable all permissions for users in this + group. If you add users individually, assign them to the Release Manager + role. + +* **Release architects**: These users will create release paths that define + the deployment stages and test the design of these paths. They will also need + to test the release paths. Enable the following permissions: + - **Can Create Release Template** + - **Can Create Release Path** + - **Can Manage Environment** + - **Can Use Custom Tool in Actions and Components** + - **Edit Approvals and Environment** + - **Edit Values and Target Servers** + +### Q: I don't see some tabs or UI elements. Why not? + +**A**: Based on your user role or the permissions assigned to your group, some +UI elements may not appear. For example, if you do not have permissions to +**Can Manage Inventory**, the **Inventory** tab does not display. + +Similarly, if you don't have permissions to edit an object, you might be able +to view it, but the **Save** button will be inactive. If you don't have one +of the permissions listed in the following table, the corresponding UI element +will either be hidden or disabled. Release Managers, however, can view and +edit all information. + +| **Permission** | **UI element** | +|----------------|----------------| +| Can Create Release Template | Configure Apps - Release Template tab (hidden) | +| Can Create Release Path | New button on the Configure Paths - Release Paths tab (hidden) | +| Can Manage Environment | Configure Paths - Environments tab (hidden) | +| Can Manage Server | Configure Paths - Server tab (hidden) | +| Can Manage Inventory | Inventory tab (which provides access to Actions and Tools) (hidden) | +| Can Use Custom Tool in Actions and Components | Command and Arguments fields cannot be edited when No Tool is selected | +| Edit Values and Target Servers | For Release Templates: If the user does not have this permission set for a stage type, the information of the Deployment Configuration and Configuration Variables tabs are read-only. For Releases: If the user does not have this permission set for a stage type, the information of the Deployment Configuration and Configuration Variables panel is read-only. | +| Edit Approvals and Environment | All stage information is read-only | +

        +### Q: What happens when I deactivate a group? + +**A**: Members that you add through an Active Directory or TFS group remain +active members, even if you deactivate or delete the group. To remove these +members, you must delete them manually from the Manage Users page. + +## Related topics + +* [Overview of Release Management](release-management-overview.md) +* [Install Release Management](install-release-management.md) +* [Manage your release](manage-your-release.md) +* [Release without deployment agents](release-without-agents.md) +* [Release with deployment agents](release-with-agents.md) +* [Trigger a release from a build](trigger-a-release.md) +* [Deploy continuously to Azure](deploy-continuously-to-azure.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/config-and-system-variables.md b/docs/release/previous-version/config-and-system-variables.md new file mode 100644 index 00000000000..c8331d3f65c --- /dev/null +++ b/docs/release/previous-version/config-and-system-variables.md @@ -0,0 +1,145 @@ +--- +title: Configuration and system variables for Release Management +description: Configuration variables and system variables for Release Management server/client for Visual Studio 2015 and TFS 2015 +ms.assetid: 50D20F24-19E6-4660-B3EC-25148BDFE2A3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Configuration variables and system variables + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +Often when you deploy your app, you need access to configuration or system +settings for your script. That way you don't have to hardcode values in +multiple locations when the values may change depending on a configuration, +build, server, or release. To avoid hardcoded values, you can use +configuration and system variables within your scripts for vNext releases. + +## Configuration variables + +Configuration variables provide reusable and customizable settings that are +available during action execution. You can set configuration variables and +default values on servers, components and globally, and then use those +values in your PowerShell scripts and configuration scripts. And, if you +don't want to use a default value during a deployment, you can override it. +An example for using configuration variables is setting the user name and +password used for deploying your app on the server. + +Configuration variables can be set at the global, server, component, and +action levels. + +* Global configuration variables: Set from **Administration**, **Settings**, + **Configuration Variables**. Available everywhere. + +* Server configuration variables: Set from **Configure Paths**, **Server**, + select a server, **Configuration Variables**. Available to actions that + deploy your app to the server. Use for server-specific variables, such + as for a UserName and a Password. + +* Component configuration variables: Set from **Configure Apps**, + **Component**, select a component, **Configuration Variables**. Available + to actions that use the component. + +* Action configuration variables: Set within the **Release Template** designer, + available to the actions. + +The order of precedence, from highest to lowest, when a configuration +variable name is used in more than one level is **Configuration Script** +file, **Action**, **Component**, **Server**, **Global**. + +To manage configuration variables, in the bottom left corner of the **Release +Templates** and **Releases** views are tabs named **Configuration Variables** +and **Resource Variables**. + +The **Configuration Variables** tab shows the configuration variables in +effect for the action, for each stage. + +![The Configuration variables tab ](_img/config-system-vars-01.png) + +The **Resource Variables** tab shows the configuration variables and values +that are set globally, for servers, and for components. (These are current +values, not a snapshot from a previous time.) Changes to resource variables +will be in effect by in-flight releases that start a new deployment. + +![The Resource variables tab ](_img/config-system-vars-02.png) + +To add a configuration variable within an action, in the **Release Templates** +designer, open an activity, click the dropdown arrow in the **Custom +configuration** section, and specify **Standard** or **Encrypted** for the +type of configuration variable. (If using **Encrypted**, ensure the HTTPS +listener is configured on the server where you deploy your app.) + +![Add a configuration variable within an action ](_img/config-system-vars-03.png) + +Type in the name of the new variable, and provide its value. + +![Type the name of the new variable and its value ](_img/config-system-vars-04.png) + +To override a value in a resource variable, click the **+** sign and then +click the dropdown arrow in the **Custom configuration** section. Select +the variable to customize and provide a value. + +![Override a value in a resource variable ](_img/config-system-vars-05.png) + +## System variables + +In addition to configuration settings, your script might also need access +to system settings. For example, if your script needs to perform special +action when you deploy your app to a Production environment, the script can +examine the Environment variable. The following system variables are +available: + +* **ApplicationPath**: Destination path, including the component name, + where the component is copied. + +* **ApplicationPathRoot**: Destination path where the component is copied. + The default is C:\\Windows\\dtlDownloads. You can over-ride this value to + specify an alternative destination path. + +* **BuildDefinition**: Build definition for the component. + +* **BuildNumber**: Build number for the component. + +* **Environment**: The environment for the release. + +* **PackageLocation**: The source path from which the component is copied. + For builds dropped to a Standard server, the path points to the + container-id. For builds dropped to Azure, the path points to the storage + blob GUID. + +* **ReleaseId**: The ID of the release; this is assigned by Release Management. + +* **ReleaseNumber**: The number of the release. + +* **Stage**: The stage of the release. + +* **Tag**: Tag used to group the server which is running the action. + +* **TeamProject**: Team project for the component. + +* **TFSUrl**: TFS URL for the component. + +When using configuration or system variables in scripts, prefix the variable +name with a dollar sign (**$**). For example: **$Stage**. + +Note a value could be unassigned. For example, if you are deploying your +app to a server that wasn't grouped by a tag, the value of the **$Tag** +variable will be unassigned. + +## Related topics + +* [Overview of Release Management](release-management-overview.md) +* [Install Release Management](install-release-management.md) +* [Manage your release](manage-your-release.md) +* [Release without deployment agents](release-without-agents.md) +* [Release with deployment agents](release-with-agents.md) +* [Trigger a release from a build](trigger-a-release.md) +* [Deploy continuously to Azure](deploy-continuously-to-azure.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/deploy-continuously-to-azure.md b/docs/release/previous-version/deploy-continuously-to-azure.md new file mode 100644 index 00000000000..a96c2695f11 --- /dev/null +++ b/docs/release/previous-version/deploy-continuously-to-azure.md @@ -0,0 +1,124 @@ +--- +title: Deploy continuously to Azure with Release Management +description: Release your app continuously to Microsoft Azure environments with Release Management server/client for Visual Studio 2015 and TFS 2015 +ms.assetid: 40DF8A8C-2D94-4127-BE79-C0B8386960C6 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Deploy continuously to Azure + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +With Visual Studio 2015 and VSTS you can easily +set up continuous deployment to Azure VMs. + +To automate your deployments, deploy the same way to multiple environments, +and run deployment and validation scripts, follow these steps. +For less complex scenarios, such as deploying to Azure websites or cloud services, +follow steps to set up continuous deployment from +**[TFVC](http://azure.microsoft.com/documentation/articles/cloud-services-continuous-delivery-use-vso/)** +or +**[Git](http://azure.microsoft.com/documentation/articles/cloud-services-continuous-delivery-use-vso-git/)** +instead. + +Before you start, you'll need: + +* **A VSTS account**. +* **A team project**. +* **Azure VMs**. If you need to create them, + **[here's how](http://azure.microsoft.com/documentation/articles/virtual-machines-windows-tutorial/)**. +* **An Azure storage account.** Create one + **[here](http://azure.microsoft.com/documentation/articles/storage-create-storage-account/)**. +* **Release Management for Visual Studio extension.** To install in Visual Studio, + go to **Tools**, **Extensions and Updates**, and search for **Release Management for Visual Studio**. +* **A deployment script.** Find out how to set up and check-in this script + **[here](http://go.microsoft.com/fwlink/?LinkId=518666)**. + +## Create a release definition + +Set up stages for each step you need in the release process of your app, +along with the environments. You can add stages and environments, too. + +1. In Visual Studio Team Explorer, right-click a build definition and + choose **Create Release Definition**. + + ![Create a release definition](_img/deploy-continuously-01.png) + +2. Set each stage and its environment. To skip a stage, do not set its environment. + Dev, QA and Prod stages are created for you automatically. + + ![Set stages and environments](_img/deploy-continuously-02.png) + +3. If you don't see any environments: + + * Add an Azure subscription. + + ![Add Azure subscription](_img/deploy-continuously-03.png) + + * Provide Azure subcription details. If you have an Azure subscription file + (.publishsettings file) on your computer, you can browse to that file. + If you do not have a local copy of this file, you can + **[download a subscription file](https://manage.windowsazure.com/publishsettings)**. + Once you select the file, the tool will detect all the Azure subscriptions + available to you and show them in the **Subscription ID** dropdown list. + For the subscription selected, you need to provide a storage account to + Release Management tool where the deployment bits can be uploaded during actual deployment. + + ![Azure subscription details](_img/deploy-continuously-04.png) + + * You can update to the latest VSIX by selecting **Tools** and then **Extensions + and Updates** and searching for **Release Management**. + + * Then set your environments. + + ![Set environments for Azure](_img/deploy-continuously-05.png) + +4. Provide the path name and file name of the deployment script that you want + to run. Same for the configuration script, if your deployment script needs it. + For each environment, provide the credentials for an account that has access + to run the script. You can use the same credentials for all environments if you want. + + ![Deployment and configuration scripts](_img/deploy-continuously-06.png) + +5. After you create the release definition, launch the Release Management client + (you'll be asked to install it if you don't have it already). + + ![Launch Release Management Client](_img/deploy-continuously-07.png) + +6. You can see your release definition in the Release Management client. If you + don't see it automatically, go to **Configure Apps**, **vNext Release Templates**. + + ![Release template created from a release definition](_img/deploy-continuously-08.png) + + Each new build will trigger a release. You can also manually trigger a new release. + +###Q: How can I view and customize the deployment actions for each stage of my release? + +**A**: In the Release Management client, go to **Configure Apps**, **vNext Release +Templates** and open your release template. +Learn more **[here](release-without-agents.md)**. + +![Release Template Designer](_img/deploy-continuously-09.png) + +###Q: How can I use a different VSTS account for my releases? + +**A**: In the Release Management client, go to **Administration**, **Settings**, and edit the URL. + +![Set VSTS URL](_img/deploy-continuously-10.png) + +## Related topics + +* [Overview of Release Management](release-management-overview.md) +* [Install Release Management](install-release-management.md) +* [Manage your release](manage-your-release.md) +* [Release without deployment agents](release-without-agents.md) +* [Release with deployment agents](release-with-agents.md) +* [Trigger a release from a build](trigger-a-release.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/install-release-management.md b/docs/release/previous-version/install-release-management.md new file mode 100644 index 00000000000..89438b87597 --- /dev/null +++ b/docs/release/previous-version/install-release-management.md @@ -0,0 +1,105 @@ +--- +title: Install RM server/client for Visual Studio +description: Install Release Management server/client for Visual Studio 2015 and TFS 2015 +ms.assetid: AEED8FFC-D902-4789-8FBA-A6DAD4F6D34B +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Install Release Management server/client for VS 2015 and TFS 2015 + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +![Install Release Management with Team Foundation Server](_img/install-rm-01.png) + +Release Management provides a continuous deployment solution that makes release +cycles repeatable, visible, and more efficient by automating deployments +through every environment from test to production. + +To get started, install Release Management Server. If you are going to use TFS, +you should already have it installed and ready to use. See +**[system requirements](install-release-management/system-requirements.md)** +for details of compatible versions. If you haven't set up TFS yet, +**[do that now](../../accounts/account-management.md)**. +You can use the same SQL Server instance for TFS and the +Release Management server (as we will in this guide) or you can use a +different SQL Server instance (or even +**[install a new instance](../../tfs-server/install/sql-server/install-sql-server.md)**). +Next, install Release Management Client. After the client and the server are set up, +you'll set up the machines to deploy your app for your releases. You can +install deployment agents on each machine. Or, you can use Windows PowerShell, +Windows PowerShell Desired State Configuration (DSC), or Chef to deploy your +app to machines without installing a deployment agent. To learn about how to +do this, go **[here](release-without-agents.md)**. Finally, if you're using +TFS, you'll connect your Release Management deployment to TFS and then you're +ready to manage releases. + + +## To install Release Management and set up an environment + +* Verify that your operating system and hardware meet the requirements for + Release Management. Release Management Server requires a SQL Server + instance but has no dependency on using the same SQL Server instance for + TFS-it's just convenient. For more information, see + [System requirements for Release Management](install-release-management/system-requirements.md) + +* If you are upgrading to the latest version of Release Management, first + uninstall the previous update of the Release Management server, client and + deployment agents. No data will be lost when you uninstall because the SQL + Server instance is not removed. When you configure the latest update for your Release + Management server, use the same SQL Server instance that you used before for + the database server. + +* Consider your Release Management topology, especially if you will use TFS. + You should install the server separately from + the application tier of the TFS server (as we will) although nothing prevents + you from installing the Release Management server together with TFS. If you + will use TFS with Release Management, you'll want to install the Release + Management client on a TFS build server with at least one build agent, so that + the build server can create releases automatically as part of its execution, + which is especially practical for continuous integration and deployment. + +* Download Release Management Server, its client, and the deployment agent from + [VisualStudio.com](https://www.visualstudio.com/downloads/download-visual-studio-vs) + and then + **[install the server and client](install-release-management/install-server-and-client.md)**. + + ***Important:*** _This is a 90-day trial version of Release Management. For information about obtaining + a non-trial version, see + [How to buy Release Management](http://www.visualstudio.com/products/how-to-buy-release-management-vs) + or + [Release Management Licensing](http://www.visualstudio.com/release-mgmt-licensing-vs). + If you are an MSDN subscriber, you can download a non-trial version from the + [MSDN Subscriber website](https://msdn.microsoft.com/subscriptions/downloads/)._ + +* On computers that will make up the environments where you will deploy + your release, + **[install the deployment agent](install-release-management/install-deployment-agent.md)**. + These computers can be test, QA, or production environments. + +* In the Release Management client, you can + **[configure the connection](install-release-management/connect-to-tfs.md)** + between Release Management and TFS, but this isn't necessary. You can run + Release Management separately from TFS. You might also want to tackle some + other optional tasks such as + **[adding team members to Release Management](add-users-and-groups.md)**, + or configuring an SMTP server for email notifications. + + ![Set security for Release Management with Team Foundation Server](_img/install-rm-04.png) + +## Related topics + +* [Overview of Release Management](release-management-overview.md) +* [System requirements for Release Management](install-release-management/system-requirements.md) +* [Install Release Management server and client](install-release-management/install-server-and-client.md) +* [Install deployment agents](install-release-management/install-deployment-agent.md) +* [Connect Release Management to TFS](install-release-management/connect-to-tfs.md) +* [Manage users, groups, and permissions](add-users-and-groups.md) +* [Manage your release](manage-your-release.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/install-release-management/_img/connect-tfs-01.png b/docs/release/previous-version/install-release-management/_img/connect-tfs-01.png new file mode 100644 index 00000000000..749f0778356 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/connect-tfs-01.png differ diff --git a/docs/release/previous-version/install-release-management/_img/connect-tfs-02.png b/docs/release/previous-version/install-release-management/_img/connect-tfs-02.png new file mode 100644 index 00000000000..ffb52ffbb90 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/connect-tfs-02.png differ diff --git a/docs/release/previous-version/install-release-management/_img/connect-tfs-03.png b/docs/release/previous-version/install-release-management/_img/connect-tfs-03.png new file mode 100644 index 00000000000..f51586d0824 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/connect-tfs-03.png differ diff --git a/docs/release/previous-version/install-release-management/_img/connect-tfs-04.png b/docs/release/previous-version/install-release-management/_img/connect-tfs-04.png new file mode 100644 index 00000000000..dfe8a3a7df9 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/connect-tfs-04.png differ diff --git a/docs/release/previous-version/install-release-management/_img/connect-tfs-05.png b/docs/release/previous-version/install-release-management/_img/connect-tfs-05.png new file mode 100644 index 00000000000..f152b473514 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/connect-tfs-05.png differ diff --git a/docs/release/previous-version/install-release-management/_img/connect-tfs-06.png b/docs/release/previous-version/install-release-management/_img/connect-tfs-06.png new file mode 100644 index 00000000000..5677ea17610 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/connect-tfs-06.png differ diff --git a/docs/release/previous-version/install-release-management/_img/connect-tfs-07.png b/docs/release/previous-version/install-release-management/_img/connect-tfs-07.png new file mode 100644 index 00000000000..41e837cffb7 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/connect-tfs-07.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-agent-01.png b/docs/release/previous-version/install-release-management/_img/install-agent-01.png new file mode 100644 index 00000000000..749f0778356 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-agent-01.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-agent-02.png b/docs/release/previous-version/install-release-management/_img/install-agent-02.png new file mode 100644 index 00000000000..05a4b6a3930 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-agent-02.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-agent-03.png b/docs/release/previous-version/install-release-management/_img/install-agent-03.png new file mode 100644 index 00000000000..81f026e432e Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-agent-03.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-agent-04.png b/docs/release/previous-version/install-release-management/_img/install-agent-04.png new file mode 100644 index 00000000000..5296c7a0c29 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-agent-04.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-server-client-01.png b/docs/release/previous-version/install-release-management/_img/install-server-client-01.png new file mode 100644 index 00000000000..749f0778356 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-server-client-01.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-server-client-02.png b/docs/release/previous-version/install-release-management/_img/install-server-client-02.png new file mode 100644 index 00000000000..db524cb7543 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-server-client-02.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-server-client-03.png b/docs/release/previous-version/install-release-management/_img/install-server-client-03.png new file mode 100644 index 00000000000..2957c677b39 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-server-client-03.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-server-client-04.png b/docs/release/previous-version/install-release-management/_img/install-server-client-04.png new file mode 100644 index 00000000000..d9f5766ea72 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-server-client-04.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-server-client-05.png b/docs/release/previous-version/install-release-management/_img/install-server-client-05.png new file mode 100644 index 00000000000..37999ec7216 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-server-client-05.png differ diff --git a/docs/release/previous-version/install-release-management/_img/install-server-client-06.png b/docs/release/previous-version/install-release-management/_img/install-server-client-06.png new file mode 100644 index 00000000000..f6814b52ec6 Binary files /dev/null and b/docs/release/previous-version/install-release-management/_img/install-server-client-06.png differ diff --git a/docs/release/previous-version/install-release-management/connect-to-tfs.md b/docs/release/previous-version/install-release-management/connect-to-tfs.md new file mode 100644 index 00000000000..cf291f403c0 --- /dev/null +++ b/docs/release/previous-version/install-release-management/connect-to-tfs.md @@ -0,0 +1,110 @@ +--- +title: Connect Microsoft Release Management server/client to TFS +description: Connect Release Management to TFS using server and client for VS 2015 and TFS 2015 +ms.assetid: CEB0875B-F42A-45F3-B743-D6C522F7E5A6 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Connect Release Management to TFS + +[!INCLUDE [previous-version-header](../../_shared/previous-version-header.md)] + +![Installing Release Management on TFS](_img/connect-tfs-01.png) + +These are the steps for connecting TFS to Release Management and adding an +SMTP server. These are optional procedures. See +**[system requirements](system-requirements.md)** +for details of compatible versions of TFS. If you want to connect TFS, you +will need a user account to act as an intermediary between TFS and Release + Management. We show an account being created for this purpose, but you can +use an account that already exists in TFS as long as it has the appropriate +permissions. + +## Connect Release Management to TFS + +1. Ensure that you are a member of the **Release Manager** role in Release + Management. In addition, to manage permissions in TFS, you must be a member + of the **Project Collection Administrators** group. To add a user account, + you must be a member of the Windows **Administrators** group (local user) + or the **Domain Administrators** group (domain account). + + > [!TIP] + > _Do you need to add team mates to the **Release Manager** role + > in Release Management? See [Add users to Release Management](../add-users-and-groups.md)._ + +1. Either designate an existing account or create a user account in TFS + to act as intermediary account for Release Management. This can be a local + or domain account. It doesn't need any special Windows or Domain permissions. + We're creating a local Windows account named RMTFS here. + + ![Selecting an intermediary account for TFS](_img/connect-tfs-02.png) + + > [!NOTE] + > _If you're planning to use an account that already exists in + > TFS, you can skip this step. If you have TFS deployed on more than one + > server, you'll want to use a domain account._ + +1. In TFS, make the account a member of the **Project Collection + Administrators** group. For more details, see + [Set administrator permissions for team project collections](https://msdn.microsoft.com/library/dd547204%28v%3Dvs.140%29.aspx), + though you can ignore the procedures for SharePoint and Reporting Services. + Release Management doesn't require access to these features. + + ![Adding the account to the Project Collection Administrators group](_img/connect-tfs-03.png) + +1. In TFS, select the account and set the **Make requests on behalf of + others** permission to **Allow**. + + ![Allowing requests on behalf of others](_img/connect-tfs-04.png) + +1. In Release Management client, choose **Administration**, **Manage TFS** + and then **New**. + + ![Opening the TFS management page in Release Management client](_img/connect-tfs-05.png) + +1. Add the URL and project collection for TFS. + + ![Setting the TFS configuration values in Release Management client](_img/connect-tfs-06.png) + +1. Enter the name and password of the account that you permissioned in step 2 + and then **Verify** the password for the account. + + ![Setting the connection identity in Release Management client](_img/connect-tfs-07.png) + +1. After you save these settings, Release Management is connected to this + TFS project collection. You're ready to manage releases with TFS and + Release Management. + +## Set up an SMTP server + +1. Ensure that you are a member of the **Release Manager** role in Release + Management. This is required to connect an SMTP server to Release Management. + + > [!TIP] + > _Do you need to add team mates to the **Release Manager** role + in Release Management? See [Add users to Release Management](../add-users-and-groups.md)._ + +1. In Release Management client, choose **Administration** and then **Settings**. + +1. In the SMTP Server Configuration box, enter the **Server Name**, **Port**, + **User Name** and **User Password** for your SMTP server. + +1. Choose **Save**. + +## Related topics + +* [Overview of Release Management](../release-management-overview.md) +* [System requirements for Release Management](system-requirements.md) +* [Install Release Management](../install-release-management.md) +* [Install Release Management server and client](install-server-and-client.md) +* [Install deployment agents](install-deployment-agent.md) +* [Manage users, groups, and permissions](../add-users-and-groups.md) +* [Manage your release](../manage-your-release.md) + +[!INCLUDE [wpfver-back-to-index-shared](../../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/install-release-management/install-deployment-agent.md b/docs/release/previous-version/install-release-management/install-deployment-agent.md new file mode 100644 index 00000000000..cd4e9542df7 --- /dev/null +++ b/docs/release/previous-version/install-release-management/install-deployment-agent.md @@ -0,0 +1,101 @@ +--- +title: Install Microsoft Release Management deployment agent for VS 2015 and TFS 2015 +description: Install deployment agent and set up machines for an environment for VS 2015 and TFS 2015 +ms.assetid: 0C70DBD0-A1A4-4E20-AFA2-F4EC7BF7FA2A +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Install deployment agents and set an environment + +[!INCLUDE [previous-version-header](../../_shared/previous-version-header.md)] + +![Installing Release Management on TFS](_img/install-agent-01.png) + +You can install deployment agents to each of the machines that are required to +deploy your app with Release Management. Or you can use Windows PowerShell, + Windows PowerShell Desired State Configuration (DSC), or Chef to deploy your +app to machines without installing a deployment agent. To learn about how to +do this, go **[here](../release-without-agents.md)**. + +If you decide to use deployment agents, make sure that the identity you use +for these has sufficient permissions to do whatever tasks are required for +the release. The service account you use for the deployment agents is +automatically added to Release Management. + +***Tip:*** _As good practice, do not install the deployment agent on the +same machine as the Release Management server. If you do install the two on +the same machine and you need to upgrade, uninstall the server before you +uninstall the deployment agent._ + +## Install and configure the Microsoft deployment agent + +1. Before you install the agent, confirm that you are a + member of the Windows **Administrators** security group on the computer + where you will install the agent. You must also be a member of the + **Release Manager** role in Release Management. + + ***Tip:*** _Do you need to add team mates to the **Release Manager** role + in Release Management? See [Add users to Release Management](../add-users-and-groups.md)._ + +1. If you have not already downloaded the deployment agent, + **[do this now](https://www.visualstudio.com/downloads/download-visual-studio-vs)**. + + _Note that this is a 90-day trial version of Release Management. For + information about obtaining a non-trial version, see + [How to buy Release Management](http://www.visualstudio.com/products/how-to-buy-release-management-vs) + or + [Release Management Licensing](http://www.visualstudio.com/release-mgmt-licensing-vs). + If you are an MSDN subscriber, you can download a non-trial version from the + [MSDN Subscriber website](https://msdn.microsoft.com/subscriptions/downloads/)._ + +1. Launch **rm_Deployment.exe**. If you want to install to a specific location + in the file system, choose the browse button (...) next to the default + install location. Then choose **Install**. + + ![Starting the installation of the agent](_img/install-agent-02.png) + +1. Restart your computer, if prompted, and then choose **Launch**. + + ***Tip:*** _If you join the Visual Studio Experience Improvement Program, + you can **[opt out](../manage-your-release.md#optout)** at any time._ + +1. Specify the account to run the Microsoft Deployment Agent Windows + service and the URL of the Release Management Server. If you use a user + account, choose **Test** to verify the password. The deployment agent uses + this identity to configure this machine for your release. Make sure the + identity you use here has enough permission to do whatever tasks are + required. For example, if you need to install your application on this + machine as part of your release, add this identity to the local Windows + **Administrators** security group. If this identity will need to access + builds on the network, make sure it has access to the network drop location. + + ***Important:*** _If you specify an alternative account as the identity for + the agent, this must be in the form **domain\user**. Do not use the format + **user@domain**._ + + ![Configuring the agent service account and server location](_img/install-agent-03.png) + +1. Choose **Apply settings**. + + ![Configuration summary page](_img/install-agent-04.png) + +1. After the success message appears, close the configuration summary. Repeat + these steps as required on every computer in the environment. + +## Related topics + +* [Overview of Release Management](../release-management-overview.md) +* [System requirements for Release Management](system-requirements.md) +* [Install Release Management](../install-release-management.md) +* [Install Release Management server and client](install-server-and-client.md) +* [Connect Release Management to TFS](connect-to-tfs.md) +* [Manage users, groups, and permissions](../add-users-and-groups.md) +* [Manage your release](../manage-your-release.md) + +[!INCLUDE [wpfver-back-to-index-shared](../../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/install-release-management/install-server-and-client.md b/docs/release/previous-version/install-release-management/install-server-and-client.md new file mode 100644 index 00000000000..4ad3e7c8866 --- /dev/null +++ b/docs/release/previous-version/install-release-management/install-server-and-client.md @@ -0,0 +1,145 @@ +--- +title: Install Release Management server and client for VS 2015 and TFS 2015 +description: Install Release Management server and client for VS 2015 and TFS 2015 +ms.assetid: 6F4596D5-848B-42AF-BFDD-7698BC815942 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Install Release Management server and client + +[!INCLUDE [previous-version-header](../../_shared/previous-version-header.md)] + +![Installing Release Management on TFS](_img/install-server-client-01.png) + +These are the instructions for installing the Release Management +**[server](#installserver)** and the **[client](#installclient)**. +Each tool has its own permission requirements. For the server, +you'll need access to a SQL Server instance to complete the install. You can +use the same SQL Server instance that you use for TFS or you can +**[download SQL Server Express](https://www.microsoft.com/download/details.aspx?id=42299)**. + +If you are upgrading to the latest version of Release Management, first +uninstall the previous update of the Release Management server and client. +No data will be lost when you uninstall because the SQL Server instance is +not removed. Then install the latest server and client. When you configure +the latest update for your Release Management server, use the same SQL Server +instance that you used before for the database server. + +***Tip:*** _If you installed TFS Express or basic, you have an instance of +SQL Server Express available to you. If you installed TFS, you already have +the necessary permissions on the SQL Server. If you don't know if you're +using SQL Express, look at the **Application Tier** node in the TFS +administration console. Scroll down to **Data Tier Summary** and look for +**SQLServerExpress** to confirm._ + + +## Install the Release Management server + +1. Before you install Release Management Server, confirm that you are a + member of the Windows **Administrators** security group on the computer + where you will install the Release Management server and a member of + **sysadmin** server role in SQL Server. + +1. If you have not already downloaded the Release Management server, + **[do this now](https://www.visualstudio.com/downloads/download-visual-studio-vs)**. + + _Note that this is a 90-day trial version of Release Management. For + information about obtaining a non-trial version, see + [How to buy Release Management](http://www.visualstudio.com/products/how-to-buy-release-management-vs) + or + [Release Management Licensing](http://www.visualstudio.com/release-mgmt-licensing-vs). + If you are an MSDN subscriber, you can download a non-trial version from the + [MSDN Subscriber website](https://msdn.microsoft.com/subscriptions/downloads/)._ + +1. Launch **rm_Server.exe**. If you want to install to a specific location + in the file system, choose the browse button (...) next to the default + install location. Then choose **Install**. + + ![Starting the installation of the server](_img/install-server-client-02.png) + +1. Restart your computer, if prompted, and then choose **Launch**. + + ***Tip:*** _If you join the Visual Studio Experience Improvement Program, + you can **[opt out](../manage-your-release.md#optout)** at any time._ + +1. Specify the SQL Server instance to host the Release Management Server + database and then choose **Test** to verify connectivity. Accept the default + values for the service account and web port (Network Service and port 1000) + or specify alternates. For more information, see + [Ports required for installation of Team Foundation Server](../../../tfs-server/architecture/required-ports.md) + and + [Accounts required for installation of Team Foundation Server](../../../accounts/requirements.md#accounts). + Release Management server uses the identity set here for its Application + Pools in IIS and the Release Management Monitor Windows service. + + ***Important:*** _If you specify an alternative account as the identity for + the service, this must be in the form **domain\user**. Do not use the format + **user@domain**._ + + ![Specifying the identity and server settings](_img/install-server-client-03.png) + +1. Choose **Apply settings**. + + ![Configuration summary page](_img/install-server-client-04.png) + +1. After the success message appears, close the configuration summary and + the server console and then install the Release Management client (as + described next). Most configuration and administration tasks take place in + the client. + + +## Install the Release Management client + +1. Before you install Release Management Server, confirm that you are a + member of the Windows **Administrators** security group on the computer + where you will install the Release Management client. + +1. If you have not already downloaded the Release Management client, + **[do this now](https://www.visualstudio.com/downloads/download-visual-studio-vs)**. + + _Note that this is a 90-day trial version of Release Management. For + information about obtaining a non-trial version, see + [How to buy Release Management](http://www.visualstudio.com/products/how-to-buy-release-management-vs) + or + [Release Management Licensing](http://www.visualstudio.com/release-mgmt-licensing-vs). + If you are an MSDN subscriber, you can download a non-trial version from the + [MSDN Subscriber website](https://msdn.microsoft.com/subscriptions/downloads/)._ + +1. Launch **rm_Client.exe**. If you want to install to a specific location + in the file system, choose the browse button (...) next to the default + install location. Then choose **Install**. + + ![Starting the installation of the client](_img/install-server-client-05.png) + +1. Restart your computer, if prompted, and then choose **Launch**. + + ***Tip:*** _If you join the Visual Studio Experience Improvement Program, + you can **[opt out](../manage-your-release.md#optout)** at any time._ + +1. Enter the name of the Release Management server. If you're installing the + client on the same computer that is running Release Management server, you + can use **localhost** to connect to the server. + + ![Connecting the client to the server](_img/install-server-client-06.png) + + ***Tip:*** _If you changed any of the default options in your Release + Management server setup, you can change the protocol or port number here so + that you can connect to the server._ + +## Related topics + +* [Overview of Release Management](../release-management-overview.md) +* [System requirements for Release Management](system-requirements.md) +* [Install Release Management](../install-release-management.md) +* [Install deployment agents](install-deployment-agent.md) +* [Connect Release Management to TFS](connect-to-tfs.md) +* [Manage users, groups, and permissions](../add-users-and-groups.md) +* [Manage your release](../manage-your-release.md) + +[!INCLUDE [wpfver-back-to-index-shared](../../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/install-release-management/system-requirements.md b/docs/release/previous-version/install-release-management/system-requirements.md new file mode 100644 index 00000000000..37f5bd3f3d3 --- /dev/null +++ b/docs/release/previous-version/install-release-management/system-requirements.md @@ -0,0 +1,151 @@ +--- +title: System requirements for Microsoft Release Management +description: System requirements for Release Management server and client for VS 2015 and TFS 2015 +ms.assetid: 5B39B13E-166B-48DF-B8CB-45725355F644 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# System requirements for Release Management server/client for VS 2015 and TFS 2015 + +[!INCLUDE [previous-version-header](../../_shared/previous-version-header.md)] + +Before you install Release Management Server, its client, or the Microsoft +Deployment Agent, make sure your system meets the operating system and +hardware requirements described in this topic. + +## Release Management server + +These are the software requirements for the Release Management server. + +**Operating systems:** + +* Windows Server 2012 R2 +* Windows Server 2012 +* Windows Server 2008 R2, Service Pack 1 + +> [!TIP] +> _You must install Release Management server on server-class +> operating system._ + +**Team Foundation Server (TFS)** + +Release Management is typically used with TFS to deploy builds produced by +TFS and to synchronize users managed in TFS. Release Management can be used +with the following versions of TFS: + +* Team Foundation Server 2017 +* Team Foundation Server 2015 +* Team Foundation Server 2013 +* Team Foundation Server 2012 +* Team Foundation Server 2010 + +> [!NOTE] +> _TFS is not a mandatory requirement. Release Management can be +> used in a standalone mode to deploy applications._ + +**SQL Server:** + +You can use the same SQL Server instance you used for TFS, +**[install a new instance](../../../tfs-server/install/sql-server/install-sql-server.md)**, +or use an instance that matches the following requirements: + +* SQL Server 2016 +* SQL Server 2014 +* SQL Server 2012 +* SQL Server 2008 R2 +* SQL Server 2008 + +These are the hardware requirements for the Release Management server. + +| **Requirement** | **Minimum** | **Recommended** | +| --------------- | ----------- | --------------- | +| CPU | 1 GHz Pentium processor or equivalent | 2 GHz Pentium processor or equivalent | +| RAM | 1 GB | 2 GB | +| Hard disk | 2.2 GB (due to the .NET Framework dependency) | 3.2 GB for the first year. Your database could grow up to 1 GB per year or it could be as low as 10 MB. It depends on usage. | +| Display | 1024 x 768 high color, 16-bit colors | 1280 x 1024 high color, 32-bit | + +## Release Management client + +These are the software requirements for the Release Management client. + +**Operating systems:** + +* Windows 10 +* Windows 8.1 +* Windows 8 +* Windows 7, Service Pack 1 +* Windows Server 2012 R2 +* Windows Server 2012 +* Windows Server 2008 R2, Service Pack 1 + +**Team Foundation Server (TFS)** + +Release Management client can connect to the following versions of TFS: + +* Team Foundation Server 2017 +* Team Foundation Server 2015 +* Team Foundation Server 2013 +* Team Foundation Server 2012 +* Team Foundation Server 2010 + +> [!NOTE] +> _TFS is not a mandatory requirement. Release Management Client +> can connect to VSTS to deploy applications._ + +These are the hardware requirements for the Release Management client. + +| **Requirement** | **Minimum** | **Recommended** | +| --------------- | ----------- | --------------- | +| CPU | 1 GHz Pentium processor or equivalent | 2 GHz Pentium processor or equivalent | +| RAM | 512 MB | 1 GB | +| Hard disk | 2.2 GB (due to the .NET Framework dependency) | Same as minimum | +| Display | 1024 x 768 high color, 16-bit colors | 1280 x 1024 high color, 32-bit | + +## Microsoft deployment agent + +These are the software requirements for all the agents in your environment. + +**Operating systems:** + +* Windows 10 +* Windows 8.1 +* Windows 8 +* Windows 7, Service Pack 1 +* Vista, Service Pack 2 and [PowerShell 2.0](https://www.microsoft.com/download/details.aspx?id=9864) +* Windows Server 2016 +* Windows Server 2012 R2 +* Windows Server 2012 +* Windows Server 2008 R2, Service Pack 1 +* Windows Server 2008, Service Pack 2 and [PowerShell 2.0](http://support.microsoft.com/kb/968930) + +**The .NET Framework:** + +* The .NET 3.5 Framework. If this is not present, we automatically install + the latest appropriate version such as 4.6 or higher. + +These are the hardware requirements for all the agents in your environment. + +| **Requirement** | **Minimum** | **Recommended** | +| --------------- | ----------- | --------------- | +| CPU | 400 MHz Pentium processor or equivalent | 1 GHz Pentium processor or equivalent | +| RAM | 256 MB | 512 MB | +| Hard disk | 2.2 GB (due to the .NET Framework dependency) | In addition to the minimum disk space required for the deployment agent, you'll also require enough disk space to deploy your application. | +| Display | 1024 x 768 high color, 16-bit colors | 1280 x 1024 high color, 32-bit | + +## Related topics + +* [Overview of Release Management](../release-management-overview.md) +* [Install Release Management](../install-release-management.md) +* [Install Release Management server and client](install-server-and-client.md) +* [Install deployment agents](install-deployment-agent.md) +* [Connect Release Management to TFS](connect-to-tfs.md) +* [Manage users, groups, and permissions](../add-users-and-groups.md) +* [Manage your release](../manage-your-release.md) + +[!INCLUDE [wpfver-back-to-index-shared](../../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/manage-your-release.md b/docs/release/previous-version/manage-your-release.md new file mode 100644 index 00000000000..49783fb2bfb --- /dev/null +++ b/docs/release/previous-version/manage-your-release.md @@ -0,0 +1,294 @@ +--- +title: Manage your release with RM for VS and TFS +description: Manage your release with Microsoft Release Management server and client for Visual Studio 2015 and TFS 2015 +ms.assetid: FF4993B5-4961-4735-B678-54110C36FA48 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Manage your release + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +Improve the process of managing the release of your app. Deploy your app to a specific +environment for each separate stage. +Manage the steps in the process with approvals for each step. + +## Before you start + +* **How many stages do you need?** You might need only test and production. + But if you need a different environment for a pre-production stage that needs testing, + consider adding a pre-production stage. + And if it's important to track who approves that the dev work is ready to test, you might + want to add a dev stage, too. +* **Who needs to approve each stage?** You can have multiple approvers for each stage. + You must add each approver as a user and assign them permissions. +* **What environments do you need for each of these stages to deploy your app?** + How many servers do you need for each environment to host your app? + Do you need multiple web servers? Do you need a database server? +* **Do you want to use PowerShell, DSC or Chef to deploy your app?** Do you already + have scripts that you can use? Do you want to use Windows Azure for your servers in your environment? + Or, do you want to use deployment agents? +* **What are the necessary steps to set up each server?** Do you need to configure + the web app each time? Do you need to stop and start services? + Do you need to run a script from the command line? Think through all of these steps. + You'll add actions that perform these steps. +* **Are a set of these actions common to servers?** If so, you can set up these actions + once for each of these servers. +* **Have you set up a build definition for your app using Team Build?** Go + **[here](../../build-release/overview.md)** to learn how. +* **Do you want to use an on-premises server or the cloud to manage your releases?** + You can maintain your own Release Management server on-premises, + or you can skip buying and maintaining a server and use Release Management as a service + on VSTS instead. + +## Set up and start a release + +![Set up stages, servers and environments; create release path and template; start release](_img/manage-release-01.png) + + +### Set up Release Management + +You have the following options for managing your releases: + +* **Using Release Management as a service on Visual Studio Team Services**: + You need a VSTS account. + You cannot use Chef and you can deploy only to vNext environments based on Azure IaaS services +* **Using an on-premises server**: You need to install Release Management Server; + do that **[here](install-release-management/install-server-and-client.md#installserver)**. + +In both options, you'll use the Release Management Client to set up and run your releases. +You can install the client +**[here](install-release-management/install-server-and-client.md#installclient)**. +If you manage your releases with an on-premises server, install the client on the machine +that runs Release Management Server, too. + +***Important:*** _This is a 90-day trial version of Release Management. For information about obtaining +a non-trial version, see +[How to buy Release Management](http://www.visualstudio.com/products/how-to-buy-release-management-vs) +or +[Release Management Licensing](http://www.visualstudio.com/release-mgmt-licensing-vs). +If you are an MSDN subscriber, you can download a non-trial version from the +[MSDN Subscriber website](https://msdn.microsoft.com/subscriptions/downloads/)._ + + +### Connect to Release Management + +Start the Release Management Client and connect to your Release Management URL, either a +VSTS URL or an on-premises server URL. +If you are not prompted automatically, go to **Administration**, **Settings**. + +![Configure service URL](_img/manage-release-02.png) + +View the guide and checklist that is provided to help you to set up your release process. +First **[add users, set up groups, and control access](add-users-and-groups.md)**. + +![Get started screen to help you with your release process steps](_img/manage-release-03.png) + +The following steps guide you through the essential parts of the release process. + + +### Set up stages + +From the **Administration** tab, add a stage type for each step you need in the release process of your app. + +![Add a stage type](_img/manage-release-04.png) + +View the stage types that you have added. + +![View of stage types](_img/manage-release-05.png) + + +### Set up servers and environments + +You need to register the servers where your app will be deployed, and then set up environments +that contain these servers. + +With Visual Studio 2015, you can use +[Windows PowerShell](https://msdn.microsoft.com/library/dd835506%28v=vs.85%29.aspx), +Windows PowerShell Desired State Configuration +([DSC](https://technet.microsoft.com/library/dn249912.aspx)), +or [Chef](http://www.getchef.com/) to deploy to a server without a deployment agent. +If you already deploy using any of these tools, +you can use the same scripts with Release Management. Or, you can use deployment agents +to deploy to a server. +So that you can tell which type of environment you create, environments of servers with +deployment agents are called agent-based environments, +and environments of servers without deployment agents are called vNext environments. +Differences in how the Release Management Client is used, +based on environment type, are called out in these instructions. + +An environment can contain multiple servers. Each environment will be assigned to a stage later. + +Use tags to make it easier to set up your servers when you deploy to a stage. Perform +deployment actions based on tags and not server names. +[Explain more](manage-your-release.md#ServerTags). + +You have the following options for setting up environments: + +* [Set up environments without deployment agents](release-without-agents.md#SetupEnv) +* [Set up environments with deployment agents](release-with-agents.md#SetupEnv) + + +### Create a release template + +You need to create a release template based on the environment and approvers of each +stage where your app will be deployed. The release template also contains the deployment +actions needed to deploy your app. + +You have the following options for creating release templates: + +* [Create a release template for environments without deployment agents](release-without-agents.md#CreateReleaseTemplate) +* [Create a release template for environments with deployment agents ](release-with-agents.md#CreateReleaseTemplate) + + +### Start a release + +Start a new release. + +![From the Releases tab, select the Releases page and choose the New button](_img/manage-release-06.png) + +Name the release and choose the release template that you want to use. + +![Start a release](_img/manage-release-07.png) + +The release process begins. + +![Release in progress](_img/manage-release-08.png) + +You can also start a release automatically from a build. Go +**[here](trigger-a-release.md)** to find out how. + + +## Approve steps in a stage + +You can find any requests that are awaiting your approval. + +When you are ready, approve the action for the stage. The release then continues to the +next step or the next stage. + +![From the Releases tab, choose My Approval Requests](_img/manage-release-09.png) + +Manual steps must be approved before automated steps in a stage can continue. + +If you're managing your releases with an on-premises Release Management server, you can also +use the Release Management web browser client to find requests and approve actions for each stage. +To access this client, use the following URL: + +`http://:1000/ReleaseManagement` + +## Q & A + +### Q: Can I deploy components of my multi-tiered app separately? + +**A**: Yes, you can create components with separate deployment information. + +![Configure Apps tab, Components](_img/manage-release-10.png) + +Add the component to the release template. Now you can add this component to any stage that needs it. + +![Configure Apps tab, Release Templates, right-click Components and choose Add](_img/manage-release-11.png) + +### Q: What release actions can I add to the deployment sequence? + +**A**: More details on actions are **[here](release-actions.md)**. + + +### Q: How do I copy a deployment sequence of one stage to another? + +**A**: Use the shortcut menu of a sequence to copy it. Select the sequence where you want to +paste it, and use its shortcut menu to **Paste Deployment Sequence**. + +![Release template with deployment sequence selected](_img/manage-release-12.png) + + +### Q: How can tags for servers help me set up my environments for each stage? + +**A**: Simply add tags for servers that require the same set of deployment actions for setup. +For example, if you have multiple web servers in your environment then you can tag them all with **WebServer**. +If only some of the web servers need a specific service configured on that machine then you can +add a tag **ServiceX** for that. + +![Enter tags as a comma-separated list in the tags field for each server in your environment](_img/manage-release-13.png) + +Next set up the actions for each tag. After you drag the tag to the deployment sequence, drag +each required action into the tag and configure the action. +When a stage is deployed, these actions are performed on any server with this tag. So you only +have to create the set of actions once for multiple servers. + +![Select tag and drag to the deployment sequence; drag actions to the sequence for this tag](_img/manage-release-14.png) + +You can create multiple sets of actions for each tag if you need to add another action for a +specific server between these sets. + +You can **[copy the actions](#CopySequence)** for a tag between stages and release templates. +When you copy a sequence for a tag, +you can remap these tag sequences to a different tag if you want. + +![Right-click the stage tab; select Copy Deployment sequence; right-click the destination stage and choose Paste Deployment Sequence](_img/manage-release-15.png) + +### Q: Can I find out which user stories were completed or bugs fixed in a specific release? + +**A**: If you are using TFVC for your version control system and a +**[vNext release path](release-without-agents.md)**, +you can use the change summary to see these work items that were completed since the previous release. +It makes it easier to know what to test and what to put in your release notes. More details are +**[here](http://blogs.msdn.com/b/visualstudioalm/archive/2014/08/05/work-items-tracking-using-release-management.aspx)**. + +![Configure Apps tab; vNext Release Templates tab; Change Summary tab](_img/manage-release-16.png) + +You can also view the change summary using the Release Management web browser client. +To access this client, use the following URL: + +`http://:1000/ReleaseManagement` + +### Q: Are there any system settings that I can change? + +**A**: Yes. You can edit settings based on your system requirements. + +![Administration System Settings page](_img/manage-release-17.png) + + +### Q: Can I opt out of the Visual Studio Experience Improvement Program for Release Management? + +**A**: Yes. To be able to opt out, you must start the Release Management Server, +Microsoft Deployment Agent or Release Management client using the Run as administrator option. + +**Using the Release Management Server or the Microsoft Deployment Agent**: +From the configuration screen, choose **About** and then uncheck **Join the Visual Studio Experience +Improvement Program**. + +**Using the Release Management Client**: From Administration, choose the **Settings** tab and from +the **Configure Services** dialog box opt out of the program. + +![Choose Edit on the Settings tab; uncheck Join the Visual Studio Experience program in the Configure Services dialog](_img/manage-release-18.png) + +### Q: Are there any limitations to using Release Management in the cloud? + +**A**: Yes. With Release Management in the cloud, you cannot use Chef and you can deploy +only to vNext environments based on Azure IaaS services. + +### Q: Are there any hands-on labs to help me get started with Release Management? + +**A**: Yes. Go **[here](http://blogs.msdn.com/b/briankel/archive/2013/08/02/visual-studio-2013-application-lifecycle-management-virtual-machine-and-hands-on-labs-demo-scripts.aspx)** +for hands-on labs to try Release Management and other devops products. + +### Q: Is there a more detailed user guide? + +**A**: Yes, you can **[download this pdf file](http://go.microsoft.com/fwlink/?LinkId=398104)**. + +## Related topics + +* [Overview of Release Management](release-management-overview.md) +* [Install Release Management](install-release-management.md) +* [Release without deployment agents](release-without-agents.md) +* [Release with deployment agents](release-with-agents.md) +* [Trigger a release from a build](trigger-a-release.md) +* [Deploy continuously to Azure](deploy-continuously-to-azure.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/release-actions.md b/docs/release/previous-version/release-actions.md new file mode 100644 index 00000000000..72f505da814 --- /dev/null +++ b/docs/release/previous-version/release-actions.md @@ -0,0 +1,299 @@ +--- +title: Release actions to deploy an app with Release Management +description: Release actions in VSTS and TFS +ms.assetid: FE87197A-610D-4426-A812-2322EAA8700C +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Release actions to deploy an app + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +You add release actions to define the deployment sequence for each stage +of your release. Each action uses a specific tool to run a command with +a set of arguments. + +If you haven't created your release path yet, go +**[here](manage-your-release.md)** to do that. + +Drag a release action from the toolbox to add it to your deployment +sequence. Use any of the predefined release actions listed in the +toolbox, or create your own **[custom release actions](#custom)**. + +![Configure Apps tab, Release Templates tab ](_img/release-actions-01.png) + +After adding a release action to the sequence, you can edit the +configuration variables as necessary. For details about predefined +release actions and their configuration variables go +**[here](#actions_variables)**. Find out about the tools used by release +actions **[here](release-actions/release-action-tools.md)**. + + +## Add a custom release action + +Add a new release action and choose the tool that you want this action +to use. Or, you can copy an existing action and use that as a basis to +create a custom release action. You can't edit an existing release action. + +1. From the Release Management client, open the **Inventory** page. + (If the page doesn't appear, then request the **Can Manage Inventory** + permission.) + +1. Copy the action you want to edit, or add a new action. + + ![Copy a release action](_img/release-actions-02.png) + +1. Select the tool that you want to use based on your requirements for + the action. Choose **New** to add your own custom tool if the + **[predefined tools](release-actions/release-action-tools.md)** + cannot do what you need for that step in your deployment sequence. + +1. In the **Execution section**, enter any required arguments with + their tokens in the necessary format. You must add the prefix and + suffix consisting of two underscores (**\_\_**) to each parameter. + Whenever you delete or add arguments with their tokens, they appear + in the **Parameters** list. For example, add the following arguments + with tokens: + + `-servername __servername__ -switch __onoff__` + + Now **servername** and **onoff** are displayed in the list of parameters. + +### To deactivate a release action + +If there are some actions that you don't want your team to use, deactivate +them. Open the action from the **Inventory** page and choose the +**Deactivate** button. + +### To reactivate a release action + +Open the **Inactive** list, open the action, and choose **Activate**. + +![Inactive list on Inventory page](_img/release-actions-03.png) + +## Q & A + +### Q: What permissions do I need to edit release actions? + +**A**:To edit or add release actions, users must have the **Can Manage +Inventory** permission. If the permission is not enabled, the **Inventory** +page does not display. + +When the **No Tool** option is selected, the **Command** and **Arguments** +fields are not editable unless you have the **Can Use Custom Tool in Actions +and Components** permission. In **Configure Apps**, **Components**, when a +user does not have the **Can Use Custom Tool in Actions and Components** +permission, the **Command** and **Arguments** fields will not be editable +when the option **No Tool** is selected. + + +## Actions and Configuration Variables for Release Actions + +* [Manage application pools and websites](#iis) +* [Create or modify .ini files](#ini) +* [Manage SQL Server databases](#sql) +* [Set up your servers](#winos) +* [Manage Windows services](#winsvc) + + +### Manage application pools and websites + +These actions use the predefined **IIS Deployer** tool to manage application +pools, websites, web applications, and virtual directories. These actions +are supported under IIS 7.0, 7.5, 8.0 and 8.5. For details about this tool, +go **[here](release-actions/release-action-tools.md)**. + +| **Action** | **Usage and deployment failure conditions** | +|------------|---------------------------------------------| +| Create Application Pool, Configure Application Pool, Recycle Application Pool, Remove Application Pool, Start Application Pool, Stop Application Pool | **Create Application Pool**: this action creates a new application pool under IIS. For IIS 7.0, 7.5, 8.0 and 8.5 If the application pool already exists, it will be reconfigured to match the defined configuration variable values (undefined configuration variables will not affect the actual configuration of the application pool). Under IIS versions prior to 7.0, if the application pool already exists, the deployment will fail. **Configure Application Pool**, **Recycle Application Pool**, **Start Application Pool**, or **Stop Application Pool**: these actions will reconfigure, recycle, start, or stop an application pool. The deployment fails if the application pool doesn't exist. | +| Create Web Site, Configure Web Site, Remove Web Site, Start Web Site, Stop Web Site | **Create Web Site**: creates a new website under IIS. For IIS 7.0, 7.5, 8.0 and 8.5. If the website already exists, it will be reconfigured to match the defined configuration variable values (undefined configuration variables will not affect the actual configuration of the website). Under IIS versions prior to 7.0, if the application pool already exists, the deployment will fail. **Configure Web Site**, **Restart Web Site**, **Start Web Site**, **Stop Web Site**: these actions will reconfigure, restart, start, or stop a website. The deployment fails if the website doesn't exist. | +| Create Web Application, Configure Web Application, Remove Web Application | **Create Web Application**: creates a new Web application under IIS. For IIS 7.0, 7.5, 8.0 and 8.5. If the Web application already exists, it will be reconfigured to match the defined configuration variable values (undefined configuration variables will not affect the actual configuration of the Web application). Under IIS versions prior to 7.0, if the application pool already exists, the deployment will fail. **Configure Web Application** will reconfigure a Web application. The deployment fails if the Web application doesn't exist. | +| Create Virtual Directory, Configure Virtual Directory, Remove Virtual Directory | **Create Virtual Directory**: creates a virtual directory under IIS. For IIS 7.0, 7.5, 8.0 and 8.5. If the virtual directory already exists, it will be reconfigured to match the defined configuration variable values (undefined configuration variables will not affect the actual configuration of the virtual directory). **Configure Virtual Directory** will reconfigure a virtual directory. The deployment fails if the virtual directory doesn't exist. | +

        + +#### Configuration variables + +| **Parameter** | **Required** | **Description** | +|---------------|--------------|-----------------| +| AppPoolName | Yes (Application pool actions), No (website actions) | Yes: the name of the application pool to configure, create, recycle, remove, start or stop (App pool action). No: the name of the application pool to use for a new or modified website (Website action) | +| DotNetVersion | No | The .NET Framework version to use for the application pool. This parameter is allowed only for IIS 7.5 8.0 and 8.5. The allowed values are: v1.0, v1.1, v2.0, or v4.0. | +| IdentityUserDomain | No | Domain of the user to use as the identity of the application pool. If not defined and the "IdentityUserName" is defined, the user will be considered as a local user (that is, .\localuser). | +| IdentityUserName | No | User name to use as the identity of the application pool. If not defined, IdentityUserDomain and IdentityUserPassword parameters are ignored and the default value of IIS is used (that is, ApplicationPoolIdentity). | +| IdentityUserPassword | No | The password of the user to use as the identity of the application pool. | +| Is32BitsAllowed | No | Flag to allow or disallow 32-bit applications to run in the application pool. Allowed values are 1 or True: allow 32-bit applications, 0 or False: do not allow 32-bit applications. | +| IsAutoStart | No | Flag that indicates if the application pool or website should start automatically when Windows starts. Allowed values are 1 or True: automatically start the application pool or website when Windows starts. 0 or False: do not automatically start the application pool or website when Windows starts. | +| IsPreloadEnabled | No | Flag that indicates if the preload functionality is enabled for a website or Web application. Allowed values are 1 or True: enable preload, 0 or False: disable preload. | +| PhysicalPath | Yes (create action), No (all other virtual directory, website, and Web application actions) | The complete physical path of the virtual directory, website, or Web application. | +| PipeLineMode | No | The managed pipeline mode to use in the application pool. Allowed values are **Classic** and **Integrated**. | +| PortNumber | Yes (create action only) | The port number to use for a new or modified website. | +| ProcessIdleTimeOut | No | The number of minutes a process can be idle in the application pool. | +| RecycleAfterMinutes | No | A fixed number of minutes after which the application pool is recycled. | +| RecycleFixedTime | No | A fixed time at which the application pool is recycled. The required format is HH:MM, for example, 23:58 or 01:23. | +| RecycleKbMemory | No | The maximum number of kilobytes of memory to use before recycling the application pool. | +| SiteName | Yes (Website action), No (Virtual directory action) | Yes: the name of the website to create, configure, remove, start, or stop (Website action). No: the name of the website under which the virtual directory resides. If not defined, the default website is used (Virtual directory action) | +| StartMode | No | The start mode to use for the application pool. Allowed values are **OnDemand** and **AlwaysRunning**. | +| VirtualDirectoryName | Yes | The name of the virtual directory to create, configure, or remove. | +| WebApplicationName | No | The name of the Web application under which the virtual directory resides. If not defined, the Root Web application of the website is used. | +| WebAppName | Yes | The name of the Web application to configure, create, or remove. | +| WebSiteName | Yes (Website action), No (Web application action) | Yes: the name of the website to configure, create, remove, start, or stop (Website action). No: The name of the website under which the Web application resides. If not defined, the default website is used (Web application action) | + + +### Create or modify .ini files + +These .ini file actions use the **INI File Manager** tool to add, modify, or +remove sections and keys from the file. For details about this tool, go +**[here](release-actions/release-action-tools.md)**. + +| **Action** | **Usage and deployment failure conditions** | +|------------|---------------------------------------------| +| Create Key | Creates a new key with a value in a specific section of an .ini file. If the specified file doesn't exist, the action creates it. If the specified section doesn't exist, the action creates it. If the key already exists in the specified section, the action replaces its value. | +| Modify Key | Modifies an existing key with a new value in a specific section of an .ini file. If the specified file doesn't exist, the action creates it. If the specified section doesn't exist, the action creates it. If the key already exists in the specified section, the action adds its. | +| Modify Value | Modifies the value of an existing key in a specific section of an .ini file. If the specified file doesn't exist, the action creates it. If the specified section doesn't exist, the action creates it. If the key doesn't exist in the specified section, the action adds its. | +| Remove Key | Removes a key and its values from a specific section of an .ini file. If the specified file doesn't exist, the action fails. If the specified section or key doesn't exist, the action still succeeds. If you specify to remove all keys from a section, the action also removes the section. | +| Modify Section | Changes the name of a section within an .ini file. If the specified file doesn't exist, the action creates it. If the specified section doesn't exist, the action still succeeds. | +| Remove Section | Removes a section and all its keys and values within an .ini file. If the specified file doesn't exist, the action fails. If the specified section doesn't exist, the action still succeeds. | +

        + +#### Configuration variables + +| **Parameter** | **Required** | **Description** | +|---------------|--------------|-----------------| +| INIFile | Yes | The name and path, as required, of the .ini file to modify. | +| KeyName | Yes | The name of the key to create, modify, or remove. | +| KeyValue | No | The new value to assign to a key. If not specified and the NewKeyName is specified, the system will use the actual value. If not specified and the NewKeyName is not specified, the value is emptied. | +| NewKeyName | No | The new name to assign to a key. If not specified, the key name will not be changed. | +| NewSectionName | No | The new name to assign to a section name. If not specified, the keys of the old section will be put under the root section (all keys that are at the beginning of the file before the first section is considered in the root). | +| SectionName | No | **Create or modify key action**: the section name where a key is to be added or modified - if not specified, the action updates the root section. **Note**: all keys that are at the beginning of the file before the first section are considered in the root. **Rename action** the section name to be renamed - if not specified, the keys of the old section are placed under the root section. **Remove action**: the section name to be removed - if not specified, the root section is removed. | + + +### Manage SQL Server databases +These actions use the **Database Deployer - Execute Script** tool to create, +delete, back up, and restore a SQL Server database. For details about this +tool, go **[here](release-actions/release-action-tools.md)**. + +| **Action** | **Usage and deployment failure conditions** | +|------------|---------------------------------------------| +| Create SQL Database | Creates a new database. If the database already exists, the action fails. | +| Drop SQL Database | Deletes a database. If the database doesn't exist, the action fails. | +| Backup SQL Database | Backs up an existing database to a specified path. | +| Restore SQL Database | Restores a database from a specified source. | +

        + +#### Configuration variables + +| **Parameter** | **Required** | **Description** | +|---------------|--------------|-----------------| +| DatabaseName | Yes | The name of the SQL Server database to create, drop, back up, or restore. | +| Path | Yes | The path and file name to use to store the database backup. For example, \\\server\\filename.bak. | +| ServerName | Yes | The name of the server where the SQL database is to be created, backed up, restored, or dropped. | +| Source | Yes | The path and file name of the database backup to use to restore the database. | + + +### Set up your servers +These actions can be used to set up your server machine if it runs any +Windows operating system. You can run commands and kill processes, as well +as manage files, folders, environment variables, and Windows registry keys +and values. The system executes these actions using several predefined +Release Management tools, including **Command Line Runner**, **Windows Process**, +and **XCOPY Deployer**. For details about these tools, go +**[here](release-actions/release-action-tools.md)**. + +| **Action** | **Usage and deployment failure conditions** | +|------------|---------------------------------------------| +| Run Command Line, Run Command Line as User, Kill Windows Process | Use **Run Command Line** to run a command using the deployment agent identity. Use **Run Command Line as User** to run a command with specific user credentials. | +| Copy File or Folder, Create Folder, Delete File(s) or Folder, Move File or Folder, Rename File or Folder, Modify File(s) or Folder Attributes, Modify File(s) or Folder Owner | These actions support creating, modifying, and deleting files, folders, and select attributes. When you create files or folders, any non-existent parent directory of the folder to create will be created as well. | +| Create Environment Variable, Modify Environment Variable, Delete Environment Variable | These actions support creating, modifying, and deleting environment variables. | +| Create Windows Registry Key, Delete Windows Registry Key, Modify Windows Registry Key, Create Windows Registry Value, Delete Windows Registry Value, Modify Windows Registry Value | These actions support creating, modifying, and deleting registry keys and values. The deployment sequence fails only when you try to modify a registry key that doesn't exist. | +

        + +#### Configuration variables to run commands and kill a process + +| **Parameter** | **Required** | **Description** | +|---------------|--------------|-----------------| +| Arguments | No | The arguments required to run the command line. | +| command | Yes | Fixed value ./WindowsProcess.ps1. | +| FilePath | No | Domain of the user to use as the identity of the application pool. If not defined and IdentityUserName is defined, the user will be considered as a local user (that is, .\localuser). | +| IsKillProcessTree | No | Indicates whether to kill the process tree. Allowed values are: **1** (kill process tree) and **0** or empty (do not kill process tree). | +| ProcessName | Yes | The name of the Windows process to kill. | +| UserDomain | No | The domain of the user to use to run the executable. When unspecified, .\\localuser is assigned. | +| UserName | Yes (run command action) or No (kill process action) | (Yes) the name of the user to use to run the executable or (No) the user account running the process. If not specified, the process will be killed for all users. | +| UserPassword | No | The password of the user to use to run the executable. | +

        + +#### Configuration variables to manage files and folders + +| **Parameter** | **Required** | **Description** | +|---------------|--------------|-----------------| +| Archive | No | Set or reset the archive attribute for file(s) or folder. **+** (set the flag), **-** (reset the flag), any other value leaves the flag as it is. | +| DestinationFileFolder | | The .NET Framework version to use for the application pool. This parameter is allowed only for IIS 7.5, 8.0 and 8.5. The allowed values are: v1.0, v1.1, v2.0, or v4.0. | +| DestinationName | Yes | The destination path where to copy or move files or folders. Or, the new name to be given to the file or folder being renamed. | +| FileFolderName | Yes | The source files or folder to be deleted, modified, moved, or renamed. For the delete action, you can use wildcards, for example, c:, temp, or \*.log. | +| FolderName | Yes | The folder name and path to be created. **+** (set the flag), **-** (reset the flag), any other value leaves the flag as it is. | +| Hidden | No | Set or reset the hidden attribute for files or folder. | +| OwnerDomain | No | The domain of the new owner of the files or folder. When unspecified, .\\localuser is assigned. | +| OwnerDomain | Yes | The name of the new owner of the files or folder. | +| ReadOnly | | Set or reset the read-only attribute for files or folder. **+** (set the flag), **-** (reset the flag), any other value leaves the flag as it is. | +| SourceFileFolder | Yes | The source files or folder to be copied. You can use wildcards, for example, c:, temp, or \*.log. | +| System | | Set or reset the system attribute for file(s) or folder. **+** (set the flag), **-** (reset the flag), any other value leaves the flag as it is. | +

        + +#### Configuration variables for environment variable actions + +| **Parameter** | **Required** | **Description** | +|---------------|--------------|-----------------| +| VariableName | Yes | The name of the variable to be created, modified, or deleted. | +| VariableValue | No | The value to give to the added or modified variable. If no value is set, the variable will be deleted. | +

        + +#### Configuration variables for Windows registry actions + +| **Parameter** | **Required** | **Description** | +|---------------|--------------|-----------------| +| NewRegistryKey | Yes | The complete name of the destination registry key, for example, HKLM, Software, or NEWKEY. | +| OperatingSystemType | No | The operating system type in which to create the registry key. Allowed values are: **32** (default) creates a 32-bit registry key or **64** creates a 64-bit registry key. | +| RegistryData | No | The data to affect to the registry value. | +| RegistryKey | Yes | The complete name of the registry key to create, modify, or delete. For example, HKLM, Software, or NEWKEY. | +| RegistryValue | Yes | The name of the registry value to be added or modified. | +| ValueType | No | The type of data of the registry value. Allowed values are: **REG\_SZ** (default): String, **REG\_QWORD\_LITTLE\_ENDIAN**: A 64-bit number in little-endian format, **REG\_QWORD**: A 64-bit number, **REG\_NONE**: No value, **REG\_MULTI\_SZ**: Multi-line string (separated by \\0), **REG\_LINK** : Symbolic link, **REG\_EXPAND\_SZ**: String with unexpanded references to environment variables, **REG\_DWORD\_BIG\_ENDIAN**: A 32-bit number in little-endian format, **REG\_DWORD\_LITTLE\_ENDIAN**: A 32-bit number in big-endian format, **REG\_DWORD**: A 32-bit number, **REG\_BINARY**: Binary data in any form. | + + +### Manage Windows services + +These actions use the predefined Windows Service Manager tool to create, +configure, delete, restart, start, and stop a Windows service. For details +about this tool, go **[here](release-actions/release-action-tools.md)**. + +| **Action** | **Usage and deployment failure conditions** | +|------------|---------------------------------------------| +| Configure Service, Configure Service Credentials, Create Service, Delete Service, Restart Service, StartService, Stop Service | Use **Create Service** to create a new service. The deployment sequence will fail if the service already exists. Use **Configure Service** to configure an existing service. The deployment sequence will fail if the service doesn't exist. Use **Configure Service Credentials** to configure an existing service with new credentials. The deployment sequence will fail if the service doesn't exist. In addition, the deployment sequence will fail if the specified ServiceName doesn't exist when you specify to start, stop, or restart a service. It will not fail if the service is already started or stopped. | +

        + +#### Configuration variables + +| **Parameter** | **Required** | **Description** | +|---------------|--------------|-----------------| +| BinPath | No | Binary path and name of the service. | +| Description | Yes | Description of the service to create or configure. | +| DisplayName | No | Name of the service to create or configure. | +| Password | No | Password of the user name specified to start the service. | +| ServiceName | Yes | The name of the service to create, configure, delete, recycle, start, or stop. | +| StartMode | No | Start mode of the service. Allowed values are **Automatic**: (default) automatically start the service next time the computer is restarted, **Disabled**: disable the service, **Manual**: start the service manually only. | +| UserName | Yes | User name that will be used for the credentials to start the service. Use the format DOMAIN\USER, for example, NT AUTHORITY\NETWORK SERVICE. If you specify the UserName, you must also specify Password. To reset the credentials to the LocalSystem, enter LocalSystem as the user and "" as the password. | + +## Related topics + +* [Overview of Release Management](release-management-overview.md) +* [Install Release Management](install-release-management.md) +* [Manage your release](manage-your-release.md) +* [Release without deployment agents](release-without-agents.md) +* [Release with deployment agents](release-with-agents.md) +* [Trigger a release from a build](trigger-a-release.md) +* [Deploy continuously to Azure](deploy-continuously-to-azure.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/release-actions/release-action-tools.md b/docs/release/previous-version/release-actions/release-action-tools.md new file mode 100644 index 00000000000..084083faa70 --- /dev/null +++ b/docs/release/previous-version/release-actions/release-action-tools.md @@ -0,0 +1,353 @@ +--- +title: Release Management deployment tools for Release Management +description: Release Management tools to deploy an app in Release Management +ms.assetid: 0FD15EFD-35AA-4F56-9603-64D3302C0941 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Release Management tools to deploy an app + +[!INCLUDE [previous-version-header](../../_shared/previous-version-header.md)] + +Each release action uses a release management tool. For example, Command Line Runner is a tool that runs a specific executable for an action. If you need to perform a task that the provided tools do not support, you can create your own custom tool and add that to a custom release action. Tools can also be used to deploy a component of your app. + +The following sections describe the tools provided with Release Management: + +* [Database Deployment Agent - Execute Script](#database_da) +* [Reporting Services Deployment Agent](#rs_da) +* [MSI Deployment Agent](#msi_da) +* [XCopy Deployment Agent](#xcopy_da) +* [Command Line Runner](#clr) +* [Windows Registry Manager](#wrm) +* [Windows Common IO](#wcio) +* [Windows Service Manager](#wsm) +* [DACPAC Database Deployment Agent](#dacpac_da) +* [IIS Deployment Agent](#iis_da) +* [Microsoft Azure VM Manager](#mavmm) +* [XBAP Deployer](#xbapd) +* [Microsoft Test Manager (MTM) Command-Line Utility](#mtm_clu) +* [INI File Manager](#ini_fm) +* [Windows Process](#wproc) + + +## Database Deployment Agent - Execute Script + +This tool executes a SQL query in a specific database. It is based on the +standard sqlcmd executable distributed with SQL Server. Refer to the +**[sqlcmd](https://msdn.microsoft.com/library/ms162773%28v%3Dsql.120%29.aspx)** +documentation for further information about this executable. The +configuration variables for this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -S | ServerName | Yes | The server name of the SQL database. | +| -i | ScriptName | Yes | The name of the script to be executed. | +| -b | N/A | No | This parameter is a switch. If present, it means that if an error occurs, the batch will be aborted. | + + +## Reporting Services Deployment Agent + +This tool deploys reporting services reports and related objects. It is based +on a custom release management executable. The configuration variables of this +tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -s | serverUrl | Yes | The complete URL of the reporting services server. | +| -l | itemLocation | Yes if multiple items | The location of the items. If specified, the folder must be provided (-f). | +| -f | folder | Yes if multiple items | The folder of the items. If specified, the item location must be provided (-l). | +| -t | | Yes | The item type to be processed. The allowed values are Report and Picture. | +| -sp | | No | List of search patterns to use to filter the items. Each search pattern must be separated by a comma or a semicolon (for example, \*.bmp;\*.jpg). If not specified, the search pattern will be as follows based on the selected item type (-t) : Report (\*.rdl) or Picture (\*.bmp,\*.gif,\*.jpg,\*.jpeg,\*.png) | +| -i | | Yes if single items | Item file. If specified, the item name must be provided (-n). This parameter is used when a single item must be deployed. If so, the item location (-l) and folder (-f) parameters must not be present. | +| -n | | Yes if single items | Item name. If specified, the item file must be provided (-i). This parameter is used when a single item must be deployed. If so, the item location (-l) and folder (-f) parameters must not be present. | +| -log | | No | A log file with this given name will be generated in the physical directory. | +| -o | N/A | No | This parameter is a switch. If present, it means that the destination will be overwritten if it already exists. | +| -ds ds1,...,dsN | | | Comma-delimited fully qualified name of all data sources to associate with the item. These are case-sensitive. This option only applies to reports. The data source can be in the format **\[name\]: reference**. Name is the name of the data source, as specified in the report where the references are to be replaced. Reference is the fully qualified reference to the data source in the target server to use for the report. | + + +## MSI Deployment Agent + +This tool deploys an MSI. It uninstalls the previous installation of the +product before it installs the new one. It is based on a custom release +management PowerShell script. The configuration variables of this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -command | N/A | Yes | Fixed value ./msiexec.ps1. | +| -MsiFileName | Installer | Yes | The complete path (if required) and name of the .msi file to install. | +| -MsiCustomArgs | MsiCustomArgs | No | The custom arguments to use to install the .msi file. These arguments will be passed directly to the msiexec executable. If no custom arguments are needed, the parameter will have to be removed from the arguments. | +| -PrevProductName | | No | Allows the user to specify the previous product name to be uninstalled prior to installing the .msi file. By default, the system will use the product name in the .msi file to install. | + + +## XCopy Deployment Agent + +This tool copies a package location to a specific destination. It is based on +a custom release management batch script. The configuration variables of this +tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -source | N/A | Yes | Fixed value indicating that all the source location must be copied | +| -destination | Installation Path | Yes | The destination of the copy. | + + +## Command Line Runner + +This tool runs a specific executable. It is based on a custom release +management PowerShell script. The configuration variables of this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -file | N/A | Yes | Fixed value ./RunCommandLine.ps1. | +| -FilePath | FilePath | Yes | The complete path (if required) and filename of the executable to be run. | +| -Arguments | Arguments | No | The arguments needed when the executable is run. | +| -UserDomain | UserDomain | No | The domain of the user to use if the executable has to be run under a specific identity. If not provided, the local user will be used (.\localuser). | +| -UserName | UserName | No | The name of the user to use if the executable has to be run under a specific identity. | +| -UserPassword | UserPassword | No | The password of the user to use if the executable has to be run under a specific identity. | + + +## Windows Registry Manager + +This tool manipulates registry information in Windows. It is based on a custom +release management PowerShell script. The configuration variables of this tool +are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -command | N/A | Yes | Fixed value ./ManageWindowsRegistry.ps1. | +| -Action | Action | Yes | The action to be performed. The allowed values are **CreateKey** (create a new registry key), **ModifyKey** (modify a registry key or its data), **DeleteKey** (delete a registry key with all its values and sub keys), **CreateValue** (create a new registry value located under a key), **ModifyValue** (modify a registry value located under a key), **DeleteValue** (delete a registry value located under a key). | +| -OperatingSystemType | | No | Indicates if the key/value is accessed in the 32-bit or 64-bit registry. If not provided, the default is 32-bit. | +| -RegistryKey | RegistryKey | Yes | Path and name of the registry key (for example, HKLM\\Software\MyKey). | +| -RegistryValue | | No\* | Registry value to which changes will be applied (for example, MyValue). Required for CreateValue, ModifyValue and DeleteValue. | +| -ValueType | | No | Type of the value being affected. The accepted values are **REG\_SZ** : String (default value if not specified), **REG\_QWORD\_LITTLE\_ENDIAN** : A 64-bit number in little-endian format, **REG\_QWORD** : A 64-bit number, **REG\_NONE** : No value, **REG\_MULTI\_SZ** : Multi-line string (separated by \\0), **REG\_LINK** : Symbolic Link, **REG\_EXPAND\_SZ** : String with unexpanded references to environment variables, **REG\_DWORD\_BIG\_ENDIAN** : A 32-bit number in big-endian format, **REG\_DWORD_LITTLE\_ENDIAN** : A 32-bit number in little-endian format, **REG\_DWORD** : A 32-bit number, **REG\_BINARY** : Binary data in any form. | +| -RegistryData | | No | The data to apply to either the value (if using CreateValue or ModifyValue) or to the default value of the key (if using CreateKey or ModifyKey). | +| -RegistryKeyDestination | | No\* | The registry key name to use when using the ModifyKey action to rename a registry key. For example, RegistryKey = HKLM\\Software\\MyKey or RegistryKeyDestination = HKLM\\Software\\MyModifiedKey. Required for ModifyKey. | + + +## Windows Common IO + +This tool performs common IO under Windows. It is based on a custom release +management PowerShell script. The configuration variables of this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -command | N/A | Yes | Fixed value ./ManageWindowsIO.ps1. | +| -Action | Action | Yes | Indicate the action to be performed: **Create** (create a new folder), **Delete** (delete files or folder), **Rename** (rename a file or folder), **Move** (move a file or folder), **Attrib** (modify the attributes, including ownership, of files or folder). | +| -FileFolderName | FileFolderName | Yes | The file or folder path and name. | +| -DestinationName | | No\* | The destination name (for rename action) or the folder path and name (for move action). Required for Rename and Move actions. | +| -ReadOnly | | No | Allow the user to set or reset the files or folder read-only attribute: **+** (set the flag), **-** (reset the flag), any other value leaves the flag as it is. | +| -Archive | | No | Allow the user to set or reset the files or folder archive attribute: **+** (set the flag), **-** (reset the flag), any other value leaves the flag as it is. | +| -System | | No | Allow the user to set or reset the files or folder system attribute: **+** (set the flag), **-** (reset the flag), any other value leaves the flag as it is. | +| -Hidden | | No | Allow the user to set or reset the files or folder hidden attribute: **+** (set the flag), **-** (reset the flag), any other value leaves the flag as it is. | +| -OwnerDomain | | No | Represent the domain of the new owner for the file or folder. | +| -OwnerName | | No | Represent the name of the new owner for the file or folder. | + + +## Windows Service Manager + +This tool manages Windows services. It is based on a custom release management +PowerShell script. The configuration variables of this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -command | N/A | Yes | Fixed value ./ManageWindowsServices.ps1. | +| -Action | Action | Yes | Indicate the action to be performed: **Create** (create a new service), **Config** (configure an existing service), **Delete** (delete an existing service), **Start** (start a service), **Stop** (stop a service), **Restart** (stop and start the service). | +| -ServiceName | ServiceName | Yes | Name of the service. | +| -ServerName | | No | The name of the server where this action will be performed. If not specified, the current server will be used. | +| -BinPath | | No\* | Binary path and name of the service. Required for Create action, optional for Config action and ignored by all others. | +| -DisplayName | | No | Display name that will be used for this service. Optional for Create and Config actions and ignored by all others. | +| -Description | | No | Description that will be given to the service. Optional for Create and Config actions and ignored by all others. | +| -UserName | | No | User name that will be used for the credentials to start the service (must be in the form DOMAIN\USER). If provided, the parameter -Password must also be provided. If not provided, the LocalSystem account will be used by default. Optional for Create and Config actions and ignored by all others. To reset the credentials to the LocalSystem, enter LocalSystem as the user and "" as the password. | + + +## DACPAC Database Deployment Agent + +This tool deploys a DACPAC package. It is based on a SQL Server command line +utility. There are a lot of possible parameters for this executable but this +is the list of parameters that are used for this tool. See +[SQL package command line utility](https://msdn.microsoft.com/library/hh550080.aspx) +for more details. The configuration variables of this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| /Action: | | Yes | Fixed value: Publish - specifies that the package will be published. | +| /SourceFile: | FileName | Yes | The complete path (if required) and file name of the DACPAC. | +| /TargetServerName: | ServerName | Yes | The name of the SQL Server to publish the package to. | +| /TargetDatabaseName: | DatabaseName | Yes | The name of the SQL Server database to publish the package to. | + + +## IIS Deployment Agent + +This tool manipulates IIS objects and settings. It is based on a custom release +management executable. The configuration variables of this tool vary depending +of the type of actions to perform. + +**For application pool actions:** + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -Action | | Yes | Indicate the action to be performed: CreateApplicationPool, ConfigureApplicationPool, DropApplicationPool, StartApplicationPool, StopApplicationPool, or RecycleApplicationPool. | +| -ap | | Yes | Application Pool name. | +| -apAllow32Bit | | No | Flag that indicates if the application pool must allow 32 bit applications. This parameter is allowed only for IIS 7.0, 7.5, 8.0, and 8.5. The allowed values are 1 or True (32 bit applications are allowed), 0 or False (32 bit applications are not allowed). | +| -apIdentUserDomain | | No | Domain of the user to use as the identity of the application pool. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. If not defined and the "IdentityUserName" is defined, the user will be considered as a local user (.\localuser). | +| -apIdentUserName | | No | User name to use as the identity of the application pool. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. If not defined, "IdentityUserDomain" and "IdentityUserPassword" will be ignored and the default value of IIS will be used (ApplicationPoolIdentity). | +| -apIdentUserPassword | | No | The password of the user to use as the identity of the application pool. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. | +| -apNetVers | | No | The .NET Framework version to use for the application pool. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. The allowed values are v1.0, v1.1, v2.0, v4.0 | +| -apPipelineMode | | No | The managed pipeline mode to use in the application pool. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. The allowed values are Classic or Integrated. | +| -apProcessIdleTimeout | | No | The number of minutes a process can be idle in the application pool. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. | +| -apRecycleKbMemory | | No | The maximum number of KB of memory that be used before the application pool is recycled. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. | +| -apRecycleMinutes | | No | A fixed number of minutes after which the application pool is recycled. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. | +| -apRecycleSpecificTime | | No | A fixed time at which the application pool is recycled. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. The required format is HH:MM (for example, 23:58 or 01:23). | +| -apStartMode | | No | The start mode to be used for the application pool. This parameter is allowed only for IIS 8.0 and 8.5. The allowed values are OnDemand or AlwaysRunning. | +| -AutoStart | | No | Flag that indicates if the application pool must be started automatically. This parameter is allowed only for IIS 7.0, 7.5, 8.0 and 8.5. The allowed values are 1 or True: The application pool will be started automatically when Windows starts, and 0 or False: The application pool will not be started automatically when Windows starts. | +

        +**For Web Site actions:** + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -Action | | Yes | Indicate the action to be performed: CreateWebSite, ConfigureWebSite, DropWebSite, StartWebSite, StopWebSite, or RestartWebSite. | +| -sn | | Yes | Web site name. | +| -port | | No\* | The port number of the website. Mandatory for create action and optional in configure. | +| -pd | | No\* | The full path routing to the location where the application was published. Mandatory for create action and optional in configure. **Note**: Ensure that there is no trailing slash in the path. | +| -ap | | No | Name of the application pool. If not defined when creating an application pool, the default application pool will be used. Optional in Create and Configure actions. | +| -EnablePreload | | No | Allowed on IIS 7.0, 7.5, 8.0 and 8.5. Flag that indicates if the web site must be preloaded. Optional in Create and Configure actions. Allowed values are 1 or True: Preload enabled and 0 or false: Preload disabled. | +| -AutoStart | | No | Allowed on IIS 7.0, 7.5, 8.0 and 8.5. Flag that indicates if the web site must be automatically started. Optional in Create and Configure actions. Allowed values are 1 or True: start automatically and 0 or False: do not start automatically. | +| -log | | No | A log file with this given name will be generated in the physical directory. | +

        +**For Web Application actions:** + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -Action | | Yes | Indicate the action to be performed: CreateWebApplication, ConfigureWebApplication, or DropWebApplication. | +| -ws | | Yes | Name of the application to create. | +| -pd | | No\* | The full path routing to the location where the application was published. Mandatory for create action and optional in configure. | +| -sn | | No | Website name. If not specified, the system will use Default web site when creating a new application. Optional in Create and Configure actions. | +| -ap | | No | Name of the application pool. If not defined when creating an application pool, the default application pool will be used. Optional in Create and Configure actions. | +| -EnablePreload | | No | Allowed on IIS 7.0, 7.5, 8.0 and 8.5. Flag that indicates if the web site must be preloaded. Optional in Create and Configure actions. Allowed values are: 1 or True: preload enabled and 0 or False: preload disabled. | +| -log | | No | A log file with this name will be generated in the physical directory. | +

        +**For virtual directory actions:** + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -Action | | Yes | Indicate the action to be performed: CreateVirtualDirectory, ConfigureVirtualDirectory, or DropVirtualDirectory. | +| -vd | | Yes | Name of the virtual directory. | +| -pd | | No\* | The full path of the virtual directory. Mandatory for create action and optional in configure. | +| -sn | | No | Website name. If not specified, the system will use Default web site when creating a new application. Optional in Create and Configure actions. | +| -ws | | No | Web application name. If not specified, the system will use the root web application when creating a new virtual directory. Optional in Create and Configure actions. | +| -log | | No | A log file with this name will be generated in the physical directory. | + + +## Microsoft Azure VM Manager + +This tool manages a VM in Microsoft Azure. It is based on a custom release +management PowerShell script. The configuration variables of this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -command | N/A | Yes | Fixed value ./ControlAzureVM.ps1. | +| -Command | | Yes | Indicate the action to be performed: **Start** (start the VM) or **Stop** (stop the VM) | +| -ServiceName | ServiceName | Yes | The name of the Microsoft Azure service in which the VM exists. | +| -Name | Name | Yes | The name of the Microsoft Azure VM. | + + +## XBAP Deployer + +This tool deploys an XBAP application. It is based on a custom release +management executable. The configuration variables of this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -pn | ProjectName | Yes | The XBAP project name to be deployed. | +| -d | Installation Path | Yes | The installation path for the XBAP application. | +| -ml | | No | The complete path to the mage utility executable. If not defined, the tool will use the one provided as a resource in the tool. | +| -pl | | No | The complete path where the XBAP project to deploy is located. If not specified, the tool will use the package location where it is executed. | + + +## Microsoft Test Manager (MTM) Command-Line Utility + +This tool creates and launches automated tests run on MTM (Microsoft Test +Manager). It is based on a custom release management PowerShell script. The +configuration variables of this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -command | N/A | Yes | Fixed value ./TcmExec.ps1. | +| -Title | TestRunTitle | Yes | The name that will be used when creating the test run. | +| -PlanId | PlanId | Yes | The identifier of the Test Plan under which the tests must run (Unique ID as defined in Test Manager). | +| -SuiteId | SuiteId | Yes | The identifier of the Suite that you want to run (Unique ID as defined in Test Manager). | +| -ConfigId | ConfigId | Yes | The identifier of the Test Configuration under which the tests must run (Unique ID as defined in Test Manager). | +| -Collection | TFSCollection | Yes | The Team Foundation Server Collection URL for which the automated tests will execute. | +| -TeamProject | TeamProject | Yes | The name of the Team Project in which the automated tests were configured. | +| -TestEnvironment | TestEnvironment | Yes | The Test Environment in which the Tests are to be executed (the test environment is associated to a corresponding test controller). | +| -BuildDirectory | BuildDirectory | No\* | The location of the automated tests. In MTM 2010, this parameter is required. In MTM 2012 and 2013 this parameter is still supported, but you should preferably use BuildDefinition and BuildNumber parameters. | +| -BuildDefinition | | No\* | Allows the user to specify the build definition in which the automated tests are included. This parameter can only be used with MTM 2012. If defined, the BuildNumber parameter must also be specified. If not specified, the field "build" visible in the details of a test run will not be affected by the test run. | +| -BuildNumber | | No\* | Allows the user to specify the build number whose drop location will contain the automated tests. This parameter can only be used under MTM 2012. If defined, the BuildDefinition parameter must also be specified. If not specified, the field "build" visible in the details of a test run, will not be affected by the test run. | +| -SettingsName | | No | Allows the user to specify the settings to use for the test run. If not specified, the default test settings will be used. | +| -TestRunWaitDelay | | No | Allows the user to specify the delay, in seconds, between each call to the test controller. This is required to allow the test run to complete before processing the test results. If not specified, it will default to 10 seconds. | +| -InconclusiveFailsTests | N/A | No | When this flag is set, the existence of inconclusive tests will fail the deployment. By default, an inconclusive test will not fail the deployment. | +| -RemoveIncludeParameter | N/A | No | When this flag is set, the /include parameter will not be appended to the test creation command. This means that any tests that have a status different than Active will not be included in the test run. | +

        +If the automated tests are included in the same build process as the +application being deployed, it is possible to use metadata as the variable +value and it will be automatically replaced at release time. The following is +the currently available metadata that can be used with configuration +variables: + +| **Variable** | **Variable Value Metadata** | +|---------------|--------------|---------------|-----------------| +| BuildDirectory | $(PackageLocation) | +| BuildNumber | $(BuildNumber) | +| BuildDefinition | $(BuildDefinition) | +| TFSCollection | $(TFSUrlWithCollection) | +| TeamProject | $(TeamProject) | + + +## INI File Manager + +This tool modifies the content of a .ini file and can create a new .ini file +if specified. It is based on a custom release management executable. The +configuration variables of this tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -Action | | Yes | Indicate the action to be performed: **ModifySection**, **RemoveSection**, **CreateKeyValue**, **ModifyKeyValue**, **RemoveKeyValue** | +| -INIFile | INIFileName | Yes | The .ini file name and path (if required) | +| -SectionName | SectionName | No | The section name to affect. If not specified, the root section will be considered (all keys that are at the beginning of the file before the first section are considered in the root). | +| -NewSectionName | | No | The new section name. If not specified, the root section will be considered (all keys that are at the beginning of the file before the first section are considered in the root). Required for ModifySection action. | +| -KeyName | | No | The key name to affect. Required for CreateKeyValue, ModifyKeyValue and RemoveKeyValue. | +| -KeyValue | | No | The value to use for the key. When using the ModifyKeyValue action and this parameter is not specified and the NewKeyName is specified, the system will use the actual value. If not specified and the NewKeyName is not specified, the value will be empty. | +| -NewKeyName | | No | The new name to give to the key. Used only in the ModifyKeyValue action. | +| -CreateFileIfNotExists | | No | Indicate to the tool that a file must be created if it does not exist. | + + +## Windows Process + +This tool can kill a Windows Process. The configuration variables of this +tool are: + +| **Parameter** | **Variable** | **Mandatory** | **Description** | +|---------------|--------------|---------------|-----------------| +| -command | N/A | Yes | Fixed value ./WindowsProcess.ps1. | +| -ProcessName | | Yes | The name of the Windows process to kill. | +| -UserName | | No | The user account running the process. If not specified, the process will be killed for all users. | +| -IsKillProcessTree | | No | Flag that indicates if the process tree must be killed. Allowed values are 1 (kill process tree) and 0 or empty (do not kill process tree). | + +## Related topics + +* [Release actions to deploy an app](../release-actions.md) +* [Overview of Release Management](../release-management-overview.md) +* [Install Release Management](../install-release-management.md) +* [Manage your release](../manage-your-release.md) +* [Release without deployment agents](../release-without-agents.md) +* [Release with deployment agents](../release-with-agents.md) +* [Trigger a release from a build](../trigger-a-release.md) +* [Deploy continuously to Azure](../deploy-continuously-to-azure.md) + +[!INCLUDE [wpfver-back-to-index-shared](../../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/release-management-overview.md b/docs/release/previous-version/release-management-overview.md new file mode 100644 index 00000000000..f5b4b92d97a --- /dev/null +++ b/docs/release/previous-version/release-management-overview.md @@ -0,0 +1,51 @@ +--- +title: Release Management server/client for VS 2015 and TFS 2015 - overview +description: Microsoft Release Management server and client for Visual Studio 2015 and TFS 2015 +ms.assetid: 1FBA8A92-BC8C-452A-A5BD-FA6A3D2E2F0B +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Automate deployments with Release Management + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +Support a rapid release cadence and manage simultaneous releases. Set up +release paths that represent your stages from development to production. +Run actions to deploy your app to an environment for that stage. Add +approvers to sign off that the app has successfully passed each stage. +Start your release process manually or automatically from a build. Then track your +releases as they move through your release path. + +![Overview of Release Management](_img/overview-01.png) + +**Set up and start a release** + +* [Set up the release management server, client, and deployment agents](install-release-management.md). +* [Set up users and groups and control access to Release Management](add-users-and-groups.md). +* [Create your release path and start a release](manage-your-release.md). + +After you have created your release path, you can +[trigger a release from a build](trigger-a-release.md). + +You can also simplify your scripts using +[configuration variables and system variables](config-and-system-variables.md). + +To read a detailed user guide, +[download this pdf file](http://go.microsoft.com/fwlink/?LinkId=398104). + + +## Related topics + +* [Install Release Management](install-release-management.md) +* [Manage your release](manage-your-release.md) +* [Release your app with deployment agents](release-with-agents.md) +* [Release your app without deployment agents](release-without-agents.md) +* [Deploy continuously to Azure](deploy-continuously-to-azure.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/release-with-agents.md b/docs/release/previous-version/release-with-agents.md new file mode 100644 index 00000000000..9651525f51e --- /dev/null +++ b/docs/release/previous-version/release-with-agents.md @@ -0,0 +1,120 @@ +--- +title: Release your app with deployment agents in Release Management +description: Release your app to environments with deployment agents in Release Management server/client for Visual Studio 2015 and TFS 2015 +ms.assetid: 34E3CA4A-A37E-4B8F-9BC2-4613851469A1 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Release your app to environments with deployment agents + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +If you want to use PowerShell, DSC or Chef to deploy your app, you must +use vNext environments; go +**[here](release-without-agents.md)** for instructions. +Otherwise if you are using deployment agents, follow these steps. + +If you haven't already done so, +**[connect to release management](manage-your-release.md#ConnectRMUrl)** +and **[add stages](manage-your-release.md#AddStages)** +for your release. + + +## Set up servers and environments + +1. **[Install and configure a deployment agent](install-release-management/install-deployment-agent.md)** + on any machine that will be part of the environment used to deploy your app. + +1. Scan for new servers that already have deployment agents installed. + If the server you want to use is not in the list, + check that the service for the deployment agent (Microsoft Deployment Agent) + is started on that machine. + + ![Scan for servers](_img/release-with-agents-01.png) + +1. Register the servers to use for your environments. You will deploy your app to + the servers in an environment as part of your release process. + + ![Register your server to use in the release process](_img/release-with-agents-02.png) + +1. Create environments for each of your stages. Link the servers to your environments. + + ![Add an environment](_img/release-with-agents-03.png) + + An environment can contain multiple servers. + + +## Create a release template + +Check the code for your app has been added to version control. +You also need a build definition that builds your app. + +1. Create a release path to represent the stages that your release must go through. + + ![Create a release path](_img/release-with-agents-04.png) + + Choose the environment and approvers to use for each stage of your release. + You can add multiple final approvers for each stage if you want to. + + ![Add the stages and approvers for your release process](_img/release-with-agents-05.png) + +1. Create a release template and use the release path that you just added. + Link your build definition to this release template to have access to the build. + + ![Add a release template](_img/release-with-agents-06.png) + + Next you define the sequence of actions that deploys your app for each stage. + + ![From the Release Templates page add the deployment sequence](_img/release-with-agents-07.png) + + The deployment agent must have sufficient permissions to perform + any of the actions in your sequence. + For example, to remove a web site the deployment agent service must + run as a local administrator on that machine. + +## Next steps + +1. [Start a new release](manage-your-release.md#StartRelease). +1. [Approve steps in a stage](manage-your-release.md#ApproveSteps). + +## Q & A + +### Q: Can I deploy components of my multi-tiered app separately? + +**A**: Yes, you can create components with separate deployment information. + +![Configure Apps tab, Components](_img/release-with-agents-08.png) + +Add the component to the release template. Now you can add this +component to any stage that needs it. + +![Configure Apps tab, Release Templates, right-click Components and choose Add](_img/release-with-agents-09.png) + +### Q: What release actions can I add to the deployment sequence? + +**A**: More details on actions are **[here](release-actions.md)**. + +### Q: How do I copy a deployment sequence of one stage to another? + +**A**: Use the shortcut menu of a sequence to copy it. +Select the sequence where you want to paste it, +and use its shortcut menu to **Paste Deployment Sequence**. + +![Release template with deployment sequence selected](_img/release-with-agents-10.png) + +## Related topics + +* [Overview of Release Management](release-management-overview.md) +* [Install Release Management](install-release-management.md) +* [Manage your release](manage-your-release.md) +* [Release without deployment agents](release-without-agents.md) +* [Trigger a release from a build](trigger-a-release.md) +* [Deploy continuously to Azure](deploy-continuously-to-azure.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/release-without-agents.md b/docs/release/previous-version/release-without-agents.md new file mode 100644 index 00000000000..b5133947252 --- /dev/null +++ b/docs/release/previous-version/release-without-agents.md @@ -0,0 +1,479 @@ +--- +title: Release without deployment agents in Release Management +description: Release your app to Microsoft Azure or on-premises without using deployment agents +ms.assetid: 3C4A0EA1-C4ED-4674-8E9F-AE54D6DA05C0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Release your app to environments without deployment agents + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +If you want to use +[Windows PowerShell](https://msdn.microsoft.com/library/dd835506%28v=vs.85%29.aspx), +Windows PowerShell Desired State Configuration +([DSC](https://technet.microsoft.com/library/dn249912.aspx)), +or [Chef](http://www.getchef.com/) to deploy your app, +follow these steps. If you are using deployment agents, +go **[here](release-with-agents.md)** +for instructions. + +**Why deploy my app this way?** + +* If you already deploy your app with PowerShell or DSC, + use the same scripts with Release Management. +* You don't have to install a deployment agent on any machine + that you use for the environment. +* Create complex scripts to deploy using all the features of + PowerShell or DSC. +* If you want to deploy your app to a server machine that is + not running a Windows operating system, you can use Chef to do that. + (In this version, Chef is supported if you manage your release with + an on-premises Release Management server, + but it is not supported if you manage your release with Visual + Studio Team Services.) + + +## Set up your environment + +Environments without deployment agents are called **vNext environments**. +You can only use these vNext environments with vNext Components, +vNext Release Templates and vNext Release Paths to deploy without +deployment agents. + +To use Windows PowerShell or DSC, you can set up a vNext on-premises +environment with physical or virtual machines (VMs), +or a vNext Azure environment with Azure VMs. For Chef, you must set +up a vNext on-premises environment. + +You need Release Management for Visual Studio 2015 to deploy without +deployment agents. See [Install Release Management](install-release-management.md). + +If you haven't already done so, +**[connect to release management](manage-your-release.md#ConnectRMUrl)** +and **[add stages](manage-your-release.md#AddStages)** +for your release. + +* [Pre-requisites for computers](#prereq) +* [Set up Microsoft Azure environments](#SetupAzure) +* [Set up on-premises (standard) environments](#SetupOnPrem) + + +### Pre-requisites for computers + +Based on the tool that you are using to deploy, check these prerequisites +for any computer you plan on using in your environment. + +**Windows PowerShell** + +* PowerShell 4.0: Install + [Windows Management Framework 4.0](https://www.microsoft.com/download/details.aspx?id=40855) + which includes PowerShell 4.0. + +**DSC** + +* Windows 8.1, Windows Server 2012 R2: DSC is already installed. +* Windows Server 2012, Windows Server 2008 R2, Windows 8 and Windows 7: Install + [Windows Management Framework 4.0](https://www.microsoft.com/download/details.aspx?id=40855) + which includes DSC. + +**Chef** + +* Target node must be bootstrapped and registered with your Chef server. +* Add an attribute to the cookbook that maps to build drop location. +* Upload cookbooks to the Chef server. +* Assign recipes to the target node. +* Set up your Release Management Server as a Chef Workstation. + Instructions are **[here](http://learn.chef.io/)**. +* Release Management uses Knife to communicate with Chef. Run + the following commands to install the Windows plugin for Knife: + - `gem install knife-windows --no-ri --no-rdoc` + - `gem install knife-reporting --no-ri --no-rdoc` + + +### Set up Microsoft Azure environments + +Microsoft Azure makes it easy to set up VMs to use as servers +in your environment. Azure adds your VMs to +**[cloud services](http://azure.microsoft.com/documentation/articles/cloud-services-what-is/)**. +You'll need a Microsoft Azure account to create your VMs. +If you don't have one yet, sign up +**[here](http://azure.microsoft.com/pricing/free-trial/)**. + +In Release Management, you'll create an Azure environment +for each release stage. +You then link your environment to a cloud service +associated with your Azure subscription. +Release Management can then access any of the VMs in this +cloud service to use in the environment. +If you have multiple VMs associated with a cloud service, +you can add any of these VMs as servers to your Azure +environment in Release Management. + +1. In the Azure portal, create the VMs that you want to use in your + release environment. By default, each VM you create is added to its + own cloud service. + If you want to use multiple VMs in an environment, they must all + be in the same cloud service. + To + [add a VM to a specific cloud service](http://azure.microsoft.com/documentation/articles/cloud-services-connect-virtual-machine/), + choose **From Gallery** when you create the VM. + + ![Windows Azure portal, Virtual Machines tab](_img/release-without-agents-01.png) + +1. For each Azure VM that runs Windows, if the prerequisites + listed above for PowerShell and DSC are not yet met, + add the Visual Studio Release Management extension to meet + the prerequisites. + **[Learn how](http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/10/how-to-install-rm-azure-extension-and-use-the-azure-vm-in-release-management.aspx)**. + +1. Add the details for your Azure subscription to Release Management. + + ![Administration tab; Manage Azure tab; click New](_img/release-without-agents-02.png) + + **[Download the settings file](https://manage.windowsazure.com/publishsettings)** + from the Azure portal and open it with a text editor, + such as Notepad, to get your subscription ID and Management Certificate key. + (After using the settings file, consider deleting or + securing it as it contains information that can be used by others to access your + Azure account.) Go + **[here](https://manage.windowsazure.com/#Workspaces/StorageExtension/storage)** + to get the name of an existing storage account + or add a new storage account using the Azure portal. + + ![Enter the details of your Azure subscription and a storage account that you want to use](_img/release-without-agents-03.png) + +1. Create a vNext Azure environment for each stage in your release path. + + ![Configure Paths tab; Environments tab; click New and then choose New vNext: Azure from the dropdown list](_img/release-without-agents-04.png) + +1. Link your Azure environment in Release Management to the Azure subscription + that you entered. + + ![Configure Paths tab; Environments tab; click Link Azure Environment](_img/release-without-agents-05.png) + + Select the Azure subscription that you want to use with this environment. + (Sometimes it takes a few minutes to load your subscription.) The Azure + cloud services for this subscription are displayed. + Select a cloud service to link the subscription to the environment. + + ![Select subscription from dropdown list; choose the VM; click Link](_img/release-without-agents-06.png) + + If there are no cloud services for your Azure subscription, you cannot link + it to the environment. Go to the Azure portal and create a VM for this subscription. + When you create a VM, a cloud service with the same name is created by default. + Refresh to select this cloud service. + +1. Link your Azure VMs in the cloud service as servers for the environment. + + ![From the Environments tab, click Link Azure Servers](_img/release-without-agents-07.png) + + Select the servers that you want to link. + + ![Select the server to use and click Link](_img/release-without-agents-08.png) + +1. For each server, you can add configuration variables that can be used by + your deployment actions. + For example, you can add username and password here. + + ![Configure Paths tab; Servers tab; Configuration Variables tab; click Add and add details for variable](_img/release-without-agents-09.png) + + If you add configuration variables with the same name for actions in your + release template, the values in any actions will override the values that you set here. + +1. View the environments that you created in the **Environments** tab. The type is shown as **Azure**. + + +### Set up on-premises (standard) environments + +Servers in your on-premises environment must have a fully qualified domain name. +They can be virtual or physical machines. +All these machines must be in the same domain, or in two-way trusted domains. +Use on-premises environments if you want to deploy using Chef. + +1. For PowerShell or DSC deployment, enable PowerShell remoting and set up the + WinRM port for HTTP communication. + Run these commands from a PowerShell session with administrator privileges on + all the server machines in your environment: + - `Enable-PSRemoting -Force` + - `winrm quickconfig -transport:http` + + More details about how to configure Windows Remote Management can be found + **[here](https://msdn.microsoft.com/library/aa384372%28v=vs.85%29.aspx)**, + including how to set up session time-outs for a machine. + For Chef, check that each server is set up as required in the prerequisites + section above. + +1. Create a vNext on-premises environment for each stage. + + ![Configure Paths tab; Environments tab; click New and select New vNext: Standard](_img/release-without-agents-10.png) + +1. Open an on-premises environment to add your servers for the environment. + You need to supply the DNS name and the WinRM port number. + If you don't know the port number, run this command: + + `winrm e winrm/config/listener` + + To deploy with Chef, add your Chef node as a server. This machine can run + any OS supported by Chef and can be a virtual or physical machine. + The server name and port must match the node name and port that's registered + with the Chef server. For Unix-based machines, use `ssh port` to find the port. + + ![Configure Paths tab; Environments tab; from the Servers section, click Add](_img/release-without-agents-11.png) + +1. For each server, you can add configuration variables that can be used by your + deployment actions. For example, you can add username and password here. + If you add configuration variables with the same name for actions in your + release template, the values in any actions will override the values that you set here. + + ![Configure Paths tab; Servers tab; from the Configuration Variables tab, click Add](_img/release-without-agents-12.png) + +1. View the environments that you created in the **Environments** tab. The type + is shown as **Standard**. + + +## Create a release template + +Check that the code for your app has been added to version control. +You also need a build definition that builds your app. + +1. Create a vNext release path to represent the stages that your release must go through. + + ![Configure Paths tab; vNext Release Paths tab; click New](_img/release-without-agents-13.png) + + Choose the environment and approvers to use for each stage of your release. + You can add multiple final approvers for each stage if you want to. + + ![vNext Release Paths tab; click Add in Stages section](_img/release-without-agents-14.png) + +1. Create a vNext component for each component of your app that you need to + deploy separately. For example, + you might have a component to deploy your web server and another component + to deploy your database. + Choose the location of the build package for each component to use when + your app is deployed. + + ![Configure Apps tab; Components tab; click New to add a component](_img/release-without-agents-15.png) + + For Chef deployments, use the **Build externally** option and supply the + path to the package. This can be a URL or an FTP path. + This path will be used as the node's attribute value by the cookbooks + to access the package for your app. + +1. Create a vNext release template and use the release path that you just added. + + ![Configure Apps tab; vNext Release Templates tab; click New](_img/release-without-agents-16.png) + + Add all the vNext components that you created to this vNext release template. + (Right-click **Components** in the toolbox to show the context menu.) + + ![Configure Apps tab; vNext Release Templates tab; right-click Components in the Toolbox and click Add in the context menu](_img/release-without-agents-17.png) + + Select the components and add them to your release template. + + ![Components dialog box; select component; click Link to add the component to the vNext Release Template](_img/release-without-agents-18.png) + + You can now see the components in the toolbox and you can use these as + parameters for your deployment actions. + +1. Add the deployment actions from the toolbox based on your environment type + and how you want to deploy your app. + You need to do this for each stage in this vNext release path. + + ![Drag the deployment action from the toolbox to the deployment sequence](_img/release-without-agents-19.png) + + **For on-premises environments:** Open the **Standard** section in the toolbox. + + * To deploy with Powershell or DSC, drag the **Deploy to Standard Environment** + action into the deployment sequence. + Parameter details for this action are + **[here](#StandardActions)**. + * To deploy with Chef, drag the **Deploy Using + Chef** action into the deployment sequence. + Parameter details for this action are + **[here](#ChefActions)**. + + **For Windows Azure environments:** Open the **Azure** section in the toolbox. + Drag the **Deploy to Azure Environment**, the **Start Environment**, or + the **Stop Environment** actions into the deployment sequence. + Parameter details for the **Deploy to Azure Environment** action are + **[here](#AzureActions)**. + + Add your PowerShell or DSC script name and relative path to the action. + A DSC script must contain a DSC configuration and a command to + create a .mof file for that DSC configuration. + You should not call `Start -DscConfiguration` here. Release + Management will do this for you. + You can use `$applicationPath` in your script - this is the + relative path you added as your component package path. + + This example shows how to use a DSC configuration script to copy + files with a command to generate a .mof file at the end. + + ```DSC + configuration FileCopy + { + Node $AllNodes.NodeName + { + File CopyDeploymentBits + { + Ensure = "Present" + Type = "Directory" + Recurse = $true + SourcePath = $applicationPath + DestinationPath = $Node.DeploymentPath + } + } + } + + FileCopy -ConfigurationData $ConfigData ��"Verbose + ``` + + The parameter values `$AllNodes` and `$Node` in this example are from + an optional configuration file - not to be confused with the DSC configuration. + Use configuration files if you want to use the same script but parameterize + the values when you deploy to a different stage. + Here's what this configuration file looks like. + + ```Configuration + $ConfigData = @{ + AllNodes = @( + @{ NodeName = $env:COMPUTERNAME; + DeploymentPath = $env:SystemDrive + "\FolderCopyTest" + } + ) + } + ``` + +## Next steps + +1. [Start a new release](manage-your-release.md#StartRelease). +1. [Approve steps in a stage](manage-your-release.md#ApproveSteps). + +## Q & A + +### Q: Are there any DSC actions that are not currently supported by Release Management? + +**A**: Yes. `Set-DscLocalConfigurationManager` is not supported. + +###Q: What other differences are there between using a vNext release template and the deployment agent-based release template? + +**A**: Apart from not needing deployment agents, these are the other differences: + +* You cannot drag components and servers into the deployment sequence editor. + These are parameters to deployment actions only. +* The vNext components are not associated with tools. +* You cannot use custom tools, or custom actions for your deployment. +* Flow control is not supported, so if an action fails all previous actions will be rolled back. + It is recommended to handle this in your scripts. + + +### Q: What are each of the parameters for the Deploy to Standard Environment action? + +**A**: Here are the details: + +* **ServerName:** On-premises machine where you want to deploy this component. + +* **UserName:** Account name to connect to the server. This user must be a domain + user and also a member of the Administrators group on the server. + +* **Password:** Password for the user account. + +* **PSScriptPath:** Path and filename of PowerShell or DSC script to deploy this component. + This path is relative to the package path for the component. + +* **PSConfigurationPath:** Path and filename of PowerShell or DSC script to configure the + server before deployment of this component. This script is optional. It will be run before + the script in the PSScriptPath parameter. + This path is relative to the package path for the component. + +* **UseCredSSP:** If set to true, the scripts use the same PowerShell session as Release + Management when it connects remotely to the server. + You must manually enable CredSSP. Run the following PowerShell command on the server with + administrator privileges. + + ```Enable-WSManCredSSP -Role Client -DelegateComputer -Force``` + + By default, this value is false. + +* **UseHTTPS:** Set to true to use a secure connection. To do this, check that WinRM is + enabled for HTTPS on the target server. The default value is false. + +* **SkipCACheck:** The Release Management Server and the deployment machine use an SSL + connection to communicate if UseHTTPS is set to true. + This parameter determines if certificate verification is required to set up this connection. + If it is true, the verification is skipped. + If it is set to false, a certificate for the deployment machine must be installed. + + +### Q: What are each of the parameters for the Deploy to Azure Environment action? + +**A**: Here are the details: + +* **ServerName:** Name of the Azure virtual machine where you want to deploy this component. + +* **UserName:** Account name to connect to the virtual machine. This user must be a domain + user and also a member of the Administrators group on the server. + +* **Password:** Password for the user account. + +* **PSScriptPath:** Path and filename of PowerShell or DSC script to deploy this component. + This path is relative to the package path for the component. + +* **PSConfigurationPath:** Path and filename of PowerShell or DSC script to configure the VM + before deployment of this component. + This script is optional. It will be run before the script in the PSScriptPath parameter. + This path is relative to the package path for the component. + +* **UseHTTPS:** This is always set to true for the connection to the Azure VM. A secure + connection is always used, so you must check that WinRM is + enabled for HTTPS on the virtual machine. + +* **SkipCACheck:** The Release Management Server and the Azure VM use an SSL connection to + communicate because UseHTTPS is always set to true. + This parameter determines if certificate verification is required to set up this connection. + If it is true, the verification is skipped. + If it is set to false, a certificate for the deployment machine must be installed. + + +### Q: What are each of the parameters for the Deploy to Chef action? + +**A**: Here are the details: + +* **NodeName:** Name of the Chef Node where you want to deploy the application. This must + match the name of the server in the on-premises environment. + +* **IsUnixNode:** Set this parameter to true if it is a UNIX based machine. + +* **UserName:** Account name to connect to the node. For UNIX based systems this should be a + user that has sudo privileges with ssh permissions. + For Windows based systems this should be a user with winRM permissions, or a local administrator. + +* **Password:** Password for the user account. + +* **ComponentName:** Name of the component to be deployed. + +* **AttributeName:** Name of the Chef node attribute which is used by the cookbooks to get the + application package. Nested attributes are supported. + The format of this name is: ['AttributeLevel1']['AttributeLevel2'][...] + +* **KnifeInstallationPath:** The absolute path to the knife.bat file on the Release Management Server. + +* **ChefRepoPath:** The absolute path to the chef repo directory on the Release Management Server. + +## Related topics + +* [Overview of Release Management](release-management-overview.md) +* [Install Release Management](install-release-management.md) +* [Manage your release](manage-your-release.md) +* [Release with deployment agents](release-with-agents.md) +* [Trigger a release from a build](trigger-a-release.md) +* [Deploy continuously to Azure](deploy-continuously-to-azure.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/previous-version/trigger-a-release.md b/docs/release/previous-version/trigger-a-release.md new file mode 100644 index 00000000000..3fe0dadef67 --- /dev/null +++ b/docs/release/previous-version/trigger-a-release.md @@ -0,0 +1,266 @@ +--- +title: Trigger a release in Release Management +description: Trigger a release from a build in Release Management server/client for Visual Studio 2015 and TFS 2015 +ms.assetid: A6079FE1-80FC-4C98-8F4A-832AB99CC5D3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-build +ms.manager: douge +ms.author: ahomer +ms.date: 08/04/2016 +--- + +# Trigger a release from a build in Release Management + +[!INCLUDE [previous-version-header](../_shared/previous-version-header.md)] + +Start a release automatically when you build your app using Team Foundation +Build (TFBuild). You can choose which stage of your release process to start +with. To trigger a release from a build, you must configure both your build +process and your release path. + +**Note**: This procedure applies only to releases that use a deployment agent +and a Build template in TFS. For information about other release scenarios, +see the **[Q & A](#blogposts)** at the end of this topic. + +If you haven't created your release path yet, go +**[here](manage-your-release.md)** to do that. + +Also, if you haven't yet set up your build system, +**[do that now](https://msdn.microsoft.com/library/ms252495.aspx)**. + +## Configure your build process + +1. If you don't have permission to edit build definitions, + **[get them now](https://msdn.microsoft.com/library/ms252587%28v%3Dvs.140%29.aspx)**. + +1. From Visual Studio, Team Explorer, + **[connect to the team project](https://msdn.microsoft.com/library/ms181475%28v%3Dvs.140%29.aspx)** + that you want to work in (Keyboard: Ctrl + 0, C). + +1. On the ![Builds icon](_img/trigger-release-09.png) **Builds** page + (Keyboard: Ctrl + 0, B), create or edit a build definition. + +1. On the **Process** tab of the build definition, choose the configuration + that you want to use for this release (for example: debug or release). Set + the **Release Build** to **True**. Choose the specific stage that you want + to trigger for the release, or leave this field blank if you want to start + with the first stage. + + ![Release build arguments](_img/trigger-release-01.png) + + If the **Release** section doesn't appear: + + * [Q: I use the default template. Which build process template should I use for Release Management and how do I add it to TFS?](#add_template) + + * [Q: I use the upgrade template. Which build process template should I use for Release Management?](#upgrade_template) + + * [Q: I use a custom build process template. How do I add the workflow logic to trigger a release?](#custom_build_template) + + If you have components with configuration files that need different values + based on the target environment, you can + **[tokenize the configuration file](#token_files)**. + +1. Specify any other settings that your build process requires and then save + your build definition. + +## Configure your release template + +1. If you haven't installed the Release Management client for Visual Studio + on the build server, + **[do that now](install-release-management/install-server-and-client.md#installclient)**. + +1. Configure the Release Management client to connect to the Release + Management server. + +1. From your release template, choose the build definition that you have set + to trigger a build and select the check box to enable the build process to + trigger a release. + + ![Properties page for a release template ](_img/trigger-release-02.png) + + If the **Build Definition** selection doesn't appear, then you need to add + your TFS connection to the Release Management client. (Add the connection + from the **Manage TFS** tab of the **Administration** section.) + + After the release is triggered, it proceeds through the steps in the stage + that was selected. If you don't set the **Acceptance Step** and the + **Deployment Step** to **Automated** for this stage, the release will not + be started. You must mark these steps as automated in the release path. + +## Q & A + + +### Q: Where can I find out about other release scenarios? + +**A**: See these blog posts: + +* [Trigger Release from build with Release Management for Visual Studio 2013 Update 3](http://blogs.msdn.com/b/visualstudioalm/archive/2014/10/10/trigger-release-from-build-with-release-management-for-visual-studio-2013-update-3.aspx) + +* [Deploy Azure Cloud Service using Release Management](http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/09/deploying-azure-cloud-service-using-release-management.aspx) + +* [Announcing DevOps style deployments using Visual Studio 2015 and Azure](http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/announcing-devops-style-deployments-using-visual-studio-2015-preview-and-azure.aspx) + +* [Using Release Management service to manage releases](http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/11/using-release-management-vso-service-to-manage-releases.aspx) + +* [How to trigger deployments to Chef managed environments from Release Management 2013 with Update 3 RC](http://blogs.msdn.com/b/visualstudioalm/archive/2014/07/08/how-to-trigger-deployments-to-chef-managed-environment-from-release-management.aspx) + + +### Q: I use the default template. Which build process template should I use for Release Management and how do I add it to TFS? + +**A**: If you are using the default template, all you need to do is replace it +with the corresponding release management process template. + +1. If you don't have permission to contribute files or to edit build definitions, + **[get them now](https://msdn.microsoft.com/library/ms252587%28v%3Dvs.140%29.aspx)**. + +1. From Visual Studio, Team Explorer, + **[connect to the team project](https://msdn.microsoft.com/library/ms181475%28v%3Dvs.140%29.aspx)** + you want to work in (Keyboard: Ctrl + 0, C). + +1. In the folder **\Program Files (x86)\ Microsoft Visual Studio 12.0\ReleaseManagement\bin** + locate the template that you need. Or download the template to this + folder from the zip file that is attached to + **[this blog post](http://blogs.msdn.com/b/visualstudioalm/archive/2013/12/09/how-to-modify-the-build-process-template-to-use-the-option-trigger-release-from-build.aspx)**. + + * TFS 2013 and 2015 + - **TFVC**: ReleaseTfvcTemplate.12.xaml. + - **Git**: ReleaseGitTemplate.12.xaml + * TFS 2012: ReleaseDefaultTemplate.11.1.xaml + * TFS 2010: ReleaseDefaultTemplate.xaml + +1. Add the template to version control. It is a good idea to put the template + in the **BuildProcessTemplates** folder of your team project. + + * **TFVC**: Add files to the server + * **Git**: Manage files on your dev machine + +1. From the ![Builds icon](_img/trigger-release-09.png) **Builds** page, + (Keyboard Ctrl + 0, B), create or edit a build definition. + +1. From the **Process** tab, choose **New** to select the template to use for + your Build process file. (You should be able to browse to select the + template that you just added.) + + +### Q: I use a custom build process template. How do I add the workflow logic to trigger a release? + +**A**: Add sections to your custom build process template to provide the +workflow logic. Download the snippets file with these sections +**[here](http://blogs.msdn.com/b/visualstudioalm/archive/2013/12/09/how-to-modify-the-build-process-template-to-use-the-option-trigger-release-from-build.aspx)**. +Use the snippets to add these arguments to your build process template: +**ConfigurationsToRelease**, **ReleaseBuild**, **ReleaseTargetStage**, +**DropBuild**. + +Save the build process template. If you use Team Foundation version control, +check it in. If you use Git, commit and push the build process template. + + +### Q: I use the upgrade template. Which build process template should I use for Release Management? + +**A**: Learn what you need to do +**[here](http://blogs.msdn.com/b/visualstudioalm/archive/2014/01/31/how-to-modify-the-upgradetemplate-xaml-to-enable-releasing-from-a-build.aspx)**. + +### Q: Can I deploy components of my application to different machines? + +**A**: Yes, create components through the Release Management client and add +them to your release template. You can then add these components to your build. + +![Add component to release template](_img/trigger-release-05.png) + +When the **Components** window is displayed, double-click the component that you +want to add. Each component that you add must be configured as +**Builds with application** or **Builds externally**. + +![Components page, Source tab](_img/trigger-release-06.png) + +A backslash (**\\**) in the **Build Drop Location** indicates that the build is located at +the root of the drop folder. + +### Q: What tools can I use to deploy a component? + +**A**: For each component you define, you can select the tool to use from the +**Deployment** tab. Replace the **Arguments** with information specific to +deploying this component. Go **[here](release-actions/release-action-tools.md)** +to learn more about each tool. + +![Component page, Deployment tab](_img/trigger-release-07.png) + +To use a custom tool, first add the tool through the **Inventory** +page, and then select it from the **Deployment** tab. Also make sure that +any files referenced by your command will be available in your +package location at the time of deployment. + +### Q: Why hasn't my release started? + +**A**: Here are some possible issues: + +* If you configure your build to trigger a release (**Release Build=True**) + and you don't select the **Can Trigger a Release from a Build?** check box + for your release template. This actually causes the build to fail and + consequently the release is not started either. + +* If you configure your release template to use a build definition that isn't + set to trigger a release **Release Build=False**) or doesn't contain the + correct release logic. + +* If a release template contains any component that is configured to build + independently. + +* If you don't set the **Acceptance Step** and the **Deployment Step** + to **Automated** for the stage that you selected to trigger from the release, + the release will not start. You must set these steps to be automated for + this release path. + +* If you haven't installed the Release Management client on the machine that + is running your Team Foundation Build server. + +* If the time it takes for a deployment to complete exceeds 10 minutes. You + can change the value assigned to the **TFS-Triggered Deployment Timeout** + from the **Administration** tab, **Settings** page. + + +### Q: How can I handle configuration files that need different values based on the target environment? + +**A**: Use tokenized configuration files. +For each configuration file in your solution that requires different values +in different environments, create a tokenized version of that file. + +For example, if your solution contains a file labeled **web.config**, make a +copy of that file and label it **web.config.token**. Your **web.config** file +does not change and is used when you run the app locally. The +**web.config.token** file contains tokens instead of actual values. + +As an example, if your **web.config** file contains this line: + +`` + +then your **web.config.token** file will contain this line, where +**SMTPHostServer** is the token: + +`` + +Keep your local files and tokenized files synchronized. + +### Q: How do I define which files should be scanned to replace tokens with variables? + +**A**: For each component you define, you can specify the file extension +filter on the **Configuration Variables** tab. + +![Component, Configuration Variables tab](_img/trigger-release-08.png) + +The deployment agent you specified for the component uses pattern matching to +scan the set of files that need tokens replaced with variables. Separate two +or more file extensions using a semi-colon (**;**). + +## Related topics + +* [Overview of Release Management](release-management-overview.md) +* [Install Release Management](install-release-management.md) +* [Manage your release](manage-your-release.md) +* [Release without deployment agents](release-without-agents.md) +* [Release with deployment agents](release-with-agents.md) +* [Deploy continuously to Azure](deploy-continuously-to-azure.md) + +[!INCLUDE [wpfver-back-to-index-shared](../_shared/wpfver-back-to-index-shared.md)] + +[!INCLUDE [wpfver-support-shared](../_shared/wpfver-support-shared.md)] diff --git a/docs/release/toc.yml b/docs/release/toc.yml new file mode 100644 index 00000000000..2735a408d11 --- /dev/null +++ b/docs/release/toc.yml @@ -0,0 +1,74 @@ +- name: Overview + href: ../build-release/overview.md +- name: Release notes + href: ../build-release/archive/news/rm-archived.md +- name: Setup and configuration + items: + - name: Configure agents + href: ../build-release/concepts/agents/agents.md + - name: Concurrent pipelines in TFS + href: ../build-release/concepts/licensing/concurrent-pipelines-tfs.md + - name: Pipelines in Team Services + href: ../build-release/concepts/licensing/concurrent-pipelines-ts.md + - name: Azure RM endpoints + href: ../build-release/actions/azure-rm-endpoint.md +- name: Author definitions + items: + - name: Release definitions + href: ../build-release/concepts/definitions/release/index.md + - name: What to deploy? Artifacts + href: ../build-release/concepts/definitions/release/artifacts.md + - name: Where to deploy? Environments + href: ../build-release/concepts/definitions/release/environments.md + - name: How to deploy? Tasks + href: ../build-release/concepts/process/tasks.md +- name: Manage releases + items: + - name: Create a release + href: ../build-release/actions/create-deploy-releases.md + - name: Track a release + href: ../build-release/actions/view-manage-releases.md +- name: Deploy apps + items: + - name: Examples index + href: ../build-release/apps/index.md +- name: Previous versions + items: + - name: Visual Studio 2015 + items: + - name: Overview + href: previous-version/release-management-overview.md + - name: Help contents + href: overview-rm2015.md + - name: Install Release Management + href: previous-version/install-release-management.md + - name: System requirements + href: previous-version/install-release-management/system-requirements.md + - name: Install server and client + href: previous-version/install-release-management/install-server-and-client.md + - name: Install deployment agent + href: previous-version/install-release-management/install-deployment-agent.md + - name: Connect to TFS + href: previous-version/install-release-management/connect-to-tfs.md + - name: Add users and groups + href: previous-version/add-users-and-groups.md + - name: Manage your release + href: previous-version/manage-your-release.md + - name: Release without agents + href: previous-version/release-without-agents.md + - name: Release with agents + href: previous-version/release-with-agents.md + - name: Trigger a release + href: previous-version/trigger-a-release.md + - name: Deploy continuously to Azure + href: previous-version/deploy-continuously-to-azure.md + - name: Release actions + href: previous-version/release-actions.md + - name: Release action tools + href: previous-version/release-actions/release-action-tools.md + - name: Configuration and system variables + href: previous-version/config-and-system-variables.md + - name: Visual Studio 2013 + items: + - name: Overview + href: overview-rm2013.md diff --git a/docs/report/_download/vsts_work_items.pbit b/docs/report/_download/vsts_work_items.pbit new file mode 100644 index 00000000000..00625b8d8e5 Binary files /dev/null and b/docs/report/_download/vsts_work_items.pbit differ diff --git a/docs/report/_download/vsts_work_items.pbit.zip b/docs/report/_download/vsts_work_items.pbit.zip new file mode 100644 index 00000000000..90274562504 Binary files /dev/null and b/docs/report/_download/vsts_work_items.pbit.zip differ diff --git a/docs/report/_img/ALM_CHRT_TestResults.png b/docs/report/_img/ALM_CHRT_TestResults.png new file mode 100644 index 00000000000..03a262ab894 Binary files /dev/null and b/docs/report/_img/ALM_CHRT_TestResults.png differ diff --git a/docs/report/_img/ALM_CHRT_TestRuns.png b/docs/report/_img/ALM_CHRT_TestRuns.png new file mode 100644 index 00000000000..a536c86892b Binary files /dev/null and b/docs/report/_img/ALM_CHRT_TestRuns.png differ diff --git a/docs/report/_img/ALM_PG_Excel_BugTrends.png b/docs/report/_img/ALM_PG_Excel_BugTrends.png new file mode 100644 index 00000000000..29efffc2698 Binary files /dev/null and b/docs/report/_img/ALM_PG_Excel_BugTrends.png differ diff --git a/docs/report/_img/ALM_PG_Excel_BuildStatus.png b/docs/report/_img/ALM_PG_Excel_BuildStatus.png new file mode 100644 index 00000000000..43ec5e762bd Binary files /dev/null and b/docs/report/_img/ALM_PG_Excel_BuildStatus.png differ diff --git a/docs/report/_img/ALM_PG_StoriesOverview.png b/docs/report/_img/ALM_PG_StoriesOverview.png new file mode 100644 index 00000000000..9d1f0cf3f4f Binary files /dev/null and b/docs/report/_img/ALM_PG_StoriesOverview.png differ diff --git a/docs/report/_img/IC588287.jpeg b/docs/report/_img/IC588287.jpeg new file mode 100644 index 00000000000..533db3de13e Binary files /dev/null and b/docs/report/_img/IC588287.jpeg differ diff --git a/docs/report/_img/add-a-chart-test-plan.png b/docs/report/_img/add-a-chart-test-plan.png new file mode 100644 index 00000000000..0b8d02cf1e5 Binary files /dev/null and b/docs/report/_img/add-a-chart-test-plan.png differ diff --git a/docs/report/_img/add-a-dashboard-build-summary.png b/docs/report/_img/add-a-dashboard-build-summary.png new file mode 100644 index 00000000000..19c88d05067 Binary files /dev/null and b/docs/report/_img/add-a-dashboard-build-summary.png differ diff --git a/docs/report/_img/add-a-dashboard-remove-tile.png b/docs/report/_img/add-a-dashboard-remove-tile.png new file mode 100644 index 00000000000..42658cf940c Binary files /dev/null and b/docs/report/_img/add-a-dashboard-remove-tile.png differ diff --git a/docs/report/_img/add-cd-release-definition-tile.png b/docs/report/_img/add-cd-release-definition-tile.png new file mode 100644 index 00000000000..de52983bb5d Binary files /dev/null and b/docs/report/_img/add-cd-release-definition-tile.png differ diff --git a/docs/report/_img/add-cd-release-definition.png b/docs/report/_img/add-cd-release-definition.png new file mode 100644 index 00000000000..797dea0a100 Binary files /dev/null and b/docs/report/_img/add-cd-release-definition.png differ diff --git a/docs/report/_img/add-chart-build-summary.png b/docs/report/_img/add-chart-build-summary.png new file mode 100644 index 00000000000..08a10473a84 Binary files /dev/null and b/docs/report/_img/add-chart-build-summary.png differ diff --git a/docs/report/_img/add-chart-test-failures.png b/docs/report/_img/add-chart-test-failures.png new file mode 100644 index 00000000000..82913bbc882 Binary files /dev/null and b/docs/report/_img/add-chart-test-failures.png differ diff --git a/docs/report/_img/add-chart-test-quality.png b/docs/report/_img/add-chart-test-quality.png new file mode 100644 index 00000000000..a73235bdc34 Binary files /dev/null and b/docs/report/_img/add-chart-test-quality.png differ diff --git a/docs/report/_img/add-to-dashboard-shared-query-chart.png b/docs/report/_img/add-to-dashboard-shared-query-chart.png new file mode 100644 index 00000000000..69e19710023 Binary files /dev/null and b/docs/report/_img/add-to-dashboard-shared-query-chart.png differ diff --git a/docs/report/_img/add-to-dashboard-shared-query.png b/docs/report/_img/add-to-dashboard-shared-query.png new file mode 100644 index 00000000000..02bc47c088a Binary files /dev/null and b/docs/report/_img/add-to-dashboard-shared-query.png differ diff --git a/docs/report/_img/add-widget-configure-initial.png b/docs/report/_img/add-widget-configure-initial.png new file mode 100644 index 00000000000..9a8592e8399 Binary files /dev/null and b/docs/report/_img/add-widget-configure-initial.png differ diff --git a/docs/report/_img/add-widget-configure.png b/docs/report/_img/add-widget-configure.png new file mode 100644 index 00000000000..2cc6bab379a Binary files /dev/null and b/docs/report/_img/add-widget-configure.png differ diff --git a/docs/report/_img/add-widget-icon.png b/docs/report/_img/add-widget-icon.png new file mode 100644 index 00000000000..eaf8af30f7d Binary files /dev/null and b/docs/report/_img/add-widget-icon.png differ diff --git a/docs/report/_img/add-widget-size.png b/docs/report/_img/add-widget-size.png new file mode 100644 index 00000000000..c186c3054ee Binary files /dev/null and b/docs/report/_img/add-widget-size.png differ diff --git a/docs/report/_img/charts-active-bugs-area-trend-2-weeks.png b/docs/report/_img/charts-active-bugs-area-trend-2-weeks.png new file mode 100644 index 00000000000..a846a324865 Binary files /dev/null and b/docs/report/_img/charts-active-bugs-area-trend-2-weeks.png differ diff --git a/docs/report/_img/charts-active-bugs.png b/docs/report/_img/charts-active-bugs.png new file mode 100644 index 00000000000..3804f82809d Binary files /dev/null and b/docs/report/_img/charts-active-bugs.png differ diff --git a/docs/report/_img/charts-add-stacked-bar.png b/docs/report/_img/charts-add-stacked-bar.png new file mode 100644 index 00000000000..4a2f1c46317 Binary files /dev/null and b/docs/report/_img/charts-add-stacked-bar.png differ diff --git a/docs/report/_img/charts-chart-wit-widget-configure-dialog.png b/docs/report/_img/charts-chart-wit-widget-configure-dialog.png new file mode 100644 index 00000000000..d7341ce8701 Binary files /dev/null and b/docs/report/_img/charts-chart-wit-widget-configure-dialog.png differ diff --git a/docs/report/_img/charts-chart-wit-widget-configured.png b/docs/report/_img/charts-chart-wit-widget-configured.png new file mode 100644 index 00000000000..f527c23c5fc Binary files /dev/null and b/docs/report/_img/charts-chart-wit-widget-configured.png differ diff --git a/docs/report/_img/charts-new-chart.png b/docs/report/_img/charts-new-chart.png new file mode 100644 index 00000000000..4e018bed472 Binary files /dev/null and b/docs/report/_img/charts-new-chart.png differ diff --git a/docs/report/_img/charts-pie-chart-active-bugs-by-priority.png b/docs/report/_img/charts-pie-chart-active-bugs-by-priority.png new file mode 100644 index 00000000000..9204bb19ad2 Binary files /dev/null and b/docs/report/_img/charts-pie-chart-active-bugs-by-priority.png differ diff --git a/docs/report/_img/create-burndown-trend-sum-chart.png b/docs/report/_img/create-burndown-trend-sum-chart.png new file mode 100644 index 00000000000..b5d7bae96ba Binary files /dev/null and b/docs/report/_img/create-burndown-trend-sum-chart.png differ diff --git a/docs/report/_img/dashboard-delete-icon.png b/docs/report/_img/dashboard-delete-icon.png new file mode 100644 index 00000000000..1b70a27437d Binary files /dev/null and b/docs/report/_img/dashboard-delete-icon.png differ diff --git a/docs/report/_img/dashboard-trash-icon.png b/docs/report/_img/dashboard-trash-icon.png new file mode 100644 index 00000000000..cc4f66eacd5 Binary files /dev/null and b/docs/report/_img/dashboard-trash-icon.png differ diff --git a/docs/report/_img/dashboard-view-with-widgets.png b/docs/report/_img/dashboard-view-with-widgets.png new file mode 100644 index 00000000000..41c0471ee70 Binary files /dev/null and b/docs/report/_img/dashboard-view-with-widgets.png differ diff --git a/docs/report/_img/dashboards-configure-ts.png b/docs/report/_img/dashboards-configure-ts.png new file mode 100644 index 00000000000..e15dfd4c294 Binary files /dev/null and b/docs/report/_img/dashboards-configure-ts.png differ diff --git a/docs/report/_img/dashboards-copy-widget.png b/docs/report/_img/dashboards-copy-widget.png new file mode 100644 index 00000000000..2d9f970f6c8 Binary files /dev/null and b/docs/report/_img/dashboards-copy-widget.png differ diff --git a/docs/report/_img/dashboards-go-to.png b/docs/report/_img/dashboards-go-to.png new file mode 100644 index 00000000000..f58cb6e232b Binary files /dev/null and b/docs/report/_img/dashboards-go-to.png differ diff --git a/docs/report/_img/dashboards-new-ts.png b/docs/report/_img/dashboards-new-ts.png new file mode 100644 index 00000000000..fa67817e352 Binary files /dev/null and b/docs/report/_img/dashboards-new-ts.png differ diff --git a/docs/report/_img/dashboards-open-manage-dashboards-tfs.png b/docs/report/_img/dashboards-open-manage-dashboards-tfs.png new file mode 100644 index 00000000000..efd0211d9dd Binary files /dev/null and b/docs/report/_img/dashboards-open-manage-dashboards-tfs.png differ diff --git a/docs/report/_img/dashboards-permissions.png b/docs/report/_img/dashboards-permissions.png new file mode 100644 index 00000000000..fe60d015b80 Binary files /dev/null and b/docs/report/_img/dashboards-permissions.png differ diff --git a/docs/report/_img/dashboards-query-tile-config-ts.png b/docs/report/_img/dashboards-query-tile-config-ts.png new file mode 100644 index 00000000000..c6aea9fc1f4 Binary files /dev/null and b/docs/report/_img/dashboards-query-tile-config-ts.png differ diff --git a/docs/report/_img/edit-dashboard-icon.png b/docs/report/_img/edit-dashboard-icon.png new file mode 100644 index 00000000000..f13d416973f Binary files /dev/null and b/docs/report/_img/edit-dashboard-icon.png differ diff --git a/docs/report/_img/embedded-web-page-widget.png b/docs/report/_img/embedded-web-page-widget.png new file mode 100644 index 00000000000..85bd459e81e Binary files /dev/null and b/docs/report/_img/embedded-web-page-widget.png differ diff --git a/docs/report/_img/exit-edit-dashboard-mode-icon.png b/docs/report/_img/exit-edit-dashboard-mode-icon.png new file mode 100644 index 00000000000..47044a8cb3f Binary files /dev/null and b/docs/report/_img/exit-edit-dashboard-mode-icon.png differ diff --git a/docs/report/_img/gs-add-dashboard.png b/docs/report/_img/gs-add-dashboard.png new file mode 100644 index 00000000000..8af543129f5 Binary files /dev/null and b/docs/report/_img/gs-add-dashboard.png differ diff --git a/docs/report/_img/gs-add-query-based-widget.png b/docs/report/_img/gs-add-query-based-widget.png new file mode 100644 index 00000000000..d2ac3e5a649 Binary files /dev/null and b/docs/report/_img/gs-add-query-based-widget.png differ diff --git a/docs/report/_img/gs-add-widget.png b/docs/report/_img/gs-add-widget.png new file mode 100644 index 00000000000..77db85e08d7 Binary files /dev/null and b/docs/report/_img/gs-add-widget.png differ diff --git a/docs/report/_img/gs-chart-add-dashboard.png b/docs/report/_img/gs-chart-add-dashboard.png new file mode 100644 index 00000000000..3038ec0861c Binary files /dev/null and b/docs/report/_img/gs-chart-add-dashboard.png differ diff --git a/docs/report/_img/gs-chart-create.png b/docs/report/_img/gs-chart-create.png new file mode 100644 index 00000000000..fd15cfe8561 Binary files /dev/null and b/docs/report/_img/gs-chart-create.png differ diff --git a/docs/report/_img/gs-chart-query.png b/docs/report/_img/gs-chart-query.png new file mode 100644 index 00000000000..a5135ff9962 Binary files /dev/null and b/docs/report/_img/gs-chart-query.png differ diff --git a/docs/report/_img/gs-chart-test-type.png b/docs/report/_img/gs-chart-test-type.png new file mode 100644 index 00000000000..4c8f98fb891 Binary files /dev/null and b/docs/report/_img/gs-chart-test-type.png differ diff --git a/docs/report/_img/gs-monitor-charts-active-bugs.png b/docs/report/_img/gs-monitor-charts-active-bugs.png new file mode 100644 index 00000000000..de0321c51e4 Binary files /dev/null and b/docs/report/_img/gs-monitor-charts-active-bugs.png differ diff --git a/docs/report/_img/gs-monitor-test-charts.png b/docs/report/_img/gs-monitor-test-charts.png new file mode 100644 index 00000000000..327cc0d54c3 Binary files /dev/null and b/docs/report/_img/gs-monitor-test-charts.png differ diff --git a/docs/report/_img/icon_collapseall.png b/docs/report/_img/icon_collapseall.png new file mode 100644 index 00000000000..67e0c80f6ce Binary files /dev/null and b/docs/report/_img/icon_collapseall.png differ diff --git a/docs/report/_img/icon_openinexcel.png b/docs/report/_img/icon_openinexcel.png new file mode 100644 index 00000000000..ec24e6eaed0 Binary files /dev/null and b/docs/report/_img/icon_openinexcel.png differ diff --git a/docs/report/_img/icons/actions-icon.png b/docs/report/_img/icons/actions-icon.png new file mode 100644 index 00000000000..4b5e7389162 Binary files /dev/null and b/docs/report/_img/icons/actions-icon.png differ diff --git a/docs/report/_img/icons/configure-icon.png b/docs/report/_img/icons/configure-icon.png new file mode 100644 index 00000000000..68b995ab356 Binary files /dev/null and b/docs/report/_img/icons/configure-icon.png differ diff --git a/docs/report/_img/icons/delete_icon.png b/docs/report/_img/icons/delete_icon.png new file mode 100644 index 00000000000..4856ac69e97 Binary files /dev/null and b/docs/report/_img/icons/delete_icon.png differ diff --git a/docs/report/_img/icons/step1.png b/docs/report/_img/icons/step1.png new file mode 100644 index 00000000000..26f7f24e98d Binary files /dev/null and b/docs/report/_img/icons/step1.png differ diff --git a/docs/report/_img/icons/step4.png b/docs/report/_img/icons/step4.png new file mode 100644 index 00000000000..97f4bd09f23 Binary files /dev/null and b/docs/report/_img/icons/step4.png differ diff --git a/docs/report/_img/icons/step5.png b/docs/report/_img/icons/step5.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/report/_img/icons/step5.png differ diff --git a/docs/report/_img/icons/step7.png b/docs/report/_img/icons/step7.png new file mode 100644 index 00000000000..3ea6b1a2433 Binary files /dev/null and b/docs/report/_img/icons/step7.png differ diff --git a/docs/report/_img/manage-dashboards-ts.png b/docs/report/_img/manage-dashboards-ts.png new file mode 100644 index 00000000000..baf24894963 Binary files /dev/null and b/docs/report/_img/manage-dashboards-ts.png differ diff --git a/docs/report/_img/manage-dashboards.png b/docs/report/_img/manage-dashboards.png new file mode 100644 index 00000000000..e18a4427e0e Binary files /dev/null and b/docs/report/_img/manage-dashboards.png differ diff --git a/docs/report/_img/on-premises-tfs-team-dashboard.png b/docs/report/_img/on-premises-tfs-team-dashboard.png new file mode 100644 index 00000000000..6dd56768281 Binary files /dev/null and b/docs/report/_img/on-premises-tfs-team-dashboard.png differ diff --git a/docs/report/_img/pin-chart-to-a-dashboard.png b/docs/report/_img/pin-chart-to-a-dashboard.png new file mode 100644 index 00000000000..df0d3fa5fc2 Binary files /dev/null and b/docs/report/_img/pin-chart-to-a-dashboard.png differ diff --git a/docs/report/_img/send-smile-2.png b/docs/report/_img/send-smile-2.png new file mode 100644 index 00000000000..8166d8e3f74 Binary files /dev/null and b/docs/report/_img/send-smile-2.png differ diff --git a/docs/report/_img/switch-team-context.png b/docs/report/_img/switch-team-context.png new file mode 100644 index 00000000000..29614d045f2 Binary files /dev/null and b/docs/report/_img/switch-team-context.png differ diff --git a/docs/report/_img/tfs-pin-to-homepage.png b/docs/report/_img/tfs-pin-to-homepage.png new file mode 100644 index 00000000000..ae2687d44be Binary files /dev/null and b/docs/report/_img/tfs-pin-to-homepage.png differ diff --git a/docs/report/_img/tfs-unpin-from-homepage.png b/docs/report/_img/tfs-unpin-from-homepage.png new file mode 100644 index 00000000000..c108a6993d0 Binary files /dev/null and b/docs/report/_img/tfs-unpin-from-homepage.png differ diff --git a/docs/report/_img/tfs-vso-remaining-category-consolidation-chart.png b/docs/report/_img/tfs-vso-remaining-category-consolidation-chart.png new file mode 100644 index 00000000000..1fd8c8b1374 Binary files /dev/null and b/docs/report/_img/tfs-vso-remaining-category-consolidation-chart.png differ diff --git a/docs/report/_img/vso-pin-query-from-context-menu.png b/docs/report/_img/vso-pin-query-from-context-menu.png new file mode 100644 index 00000000000..86ee9494fd4 Binary files /dev/null and b/docs/report/_img/vso-pin-query-from-context-menu.png differ diff --git a/docs/report/_img/widget-assigned-to-me.png b/docs/report/_img/widget-assigned-to-me.png new file mode 100644 index 00000000000..cb952edb8c1 Binary files /dev/null and b/docs/report/_img/widget-assigned-to-me.png differ diff --git a/docs/report/_img/widget-build-history-chart.png b/docs/report/_img/widget-build-history-chart.png new file mode 100644 index 00000000000..360c2b17f04 Binary files /dev/null and b/docs/report/_img/widget-build-history-chart.png differ diff --git a/docs/report/_img/widget-catalog-disabled-widget.png b/docs/report/_img/widget-catalog-disabled-widget.png new file mode 100644 index 00000000000..a27eecc1d5c Binary files /dev/null and b/docs/report/_img/widget-catalog-disabled-widget.png differ diff --git a/docs/report/_img/widget-catalog-pull-request.png b/docs/report/_img/widget-catalog-pull-request.png new file mode 100644 index 00000000000..f95a75b92d4 Binary files /dev/null and b/docs/report/_img/widget-catalog-pull-request.png differ diff --git a/docs/report/_img/widget-cfd-chart.png b/docs/report/_img/widget-cfd-chart.png new file mode 100644 index 00000000000..cf5aadf10e6 Binary files /dev/null and b/docs/report/_img/widget-cfd-chart.png differ diff --git a/docs/report/_img/widget-chart-work-query.png b/docs/report/_img/widget-chart-work-query.png new file mode 100644 index 00000000000..631393bdfba Binary files /dev/null and b/docs/report/_img/widget-chart-work-query.png differ diff --git a/docs/report/_img/widget-code-tile.png b/docs/report/_img/widget-code-tile.png new file mode 100644 index 00000000000..6898871ca95 Binary files /dev/null and b/docs/report/_img/widget-code-tile.png differ diff --git a/docs/report/_img/widget-cycle-time.png b/docs/report/_img/widget-cycle-time.png new file mode 100644 index 00000000000..de26556af08 Binary files /dev/null and b/docs/report/_img/widget-cycle-time.png differ diff --git a/docs/report/_img/widget-deployment-status.png b/docs/report/_img/widget-deployment-status.png new file mode 100644 index 00000000000..25b628a6759 Binary files /dev/null and b/docs/report/_img/widget-deployment-status.png differ diff --git a/docs/report/_img/widget-how-to-links.png b/docs/report/_img/widget-how-to-links.png new file mode 100644 index 00000000000..2866fe25a81 Binary files /dev/null and b/docs/report/_img/widget-how-to-links.png differ diff --git a/docs/report/_img/widget-how-to.png b/docs/report/_img/widget-how-to.png new file mode 100644 index 00000000000..b5f17f25143 Binary files /dev/null and b/docs/report/_img/widget-how-to.png differ diff --git a/docs/report/_img/widget-lead-time.png b/docs/report/_img/widget-lead-time.png new file mode 100644 index 00000000000..bbea3a31378 Binary files /dev/null and b/docs/report/_img/widget-lead-time.png differ diff --git a/docs/report/_img/widget-markdown-tile.png b/docs/report/_img/widget-markdown-tile.png new file mode 100644 index 00000000000..650227674f3 Binary files /dev/null and b/docs/report/_img/widget-markdown-tile.png differ diff --git a/docs/report/_img/widget-new-work-items.png b/docs/report/_img/widget-new-work-items.png new file mode 100644 index 00000000000..20e2ce76c18 Binary files /dev/null and b/docs/report/_img/widget-new-work-items.png differ diff --git a/docs/report/_img/widget-other-links-tfs.png b/docs/report/_img/widget-other-links-tfs.png new file mode 100644 index 00000000000..a2829f0cb87 Binary files /dev/null and b/docs/report/_img/widget-other-links-tfs.png differ diff --git a/docs/report/_img/widget-other-links.png b/docs/report/_img/widget-other-links.png new file mode 100644 index 00000000000..2dcf30558c7 Binary files /dev/null and b/docs/report/_img/widget-other-links.png differ diff --git a/docs/report/_img/widget-query-results.png b/docs/report/_img/widget-query-results.png new file mode 100644 index 00000000000..7522c25f08b Binary files /dev/null and b/docs/report/_img/widget-query-results.png differ diff --git a/docs/report/_img/widget-query-tile-unconfigured.png b/docs/report/_img/widget-query-tile-unconfigured.png new file mode 100644 index 00000000000..199500d3c53 Binary files /dev/null and b/docs/report/_img/widget-query-tile-unconfigured.png differ diff --git a/docs/report/_img/widget-query-tile.png b/docs/report/_img/widget-query-tile.png new file mode 100644 index 00000000000..4c4851c0071 Binary files /dev/null and b/docs/report/_img/widget-query-tile.png differ diff --git a/docs/report/_img/widget-release-definitions.png b/docs/report/_img/widget-release-definitions.png new file mode 100644 index 00000000000..6e5a58aea9b Binary files /dev/null and b/docs/report/_img/widget-release-definitions.png differ diff --git a/docs/report/_img/widget-requirements-quality.png b/docs/report/_img/widget-requirements-quality.png new file mode 100644 index 00000000000..ebedb6f7888 Binary files /dev/null and b/docs/report/_img/widget-requirements-quality.png differ diff --git a/docs/report/_img/widget-sprint-burndown.png b/docs/report/_img/widget-sprint-burndown.png new file mode 100644 index 00000000000..99799a2a865 Binary files /dev/null and b/docs/report/_img/widget-sprint-burndown.png differ diff --git a/docs/report/_img/widget-sprint-capacity.png b/docs/report/_img/widget-sprint-capacity.png new file mode 100644 index 00000000000..be818a82ffa Binary files /dev/null and b/docs/report/_img/widget-sprint-capacity.png differ diff --git a/docs/report/_img/widget-sprint-overview.png b/docs/report/_img/widget-sprint-overview.png new file mode 100644 index 00000000000..9f365e76397 Binary files /dev/null and b/docs/report/_img/widget-sprint-overview.png differ diff --git a/docs/report/_img/widget-team-members.png b/docs/report/_img/widget-team-members.png new file mode 100644 index 00000000000..b51ba54e71c Binary files /dev/null and b/docs/report/_img/widget-team-members.png differ diff --git a/docs/report/_img/widget-team-room.png b/docs/report/_img/widget-team-room.png new file mode 100644 index 00000000000..a4a1a7c0b85 Binary files /dev/null and b/docs/report/_img/widget-team-room.png differ diff --git a/docs/report/_img/widget-test-results-trend.png b/docs/report/_img/widget-test-results-trend.png new file mode 100644 index 00000000000..9b5e85d4c3f Binary files /dev/null and b/docs/report/_img/widget-test-results-trend.png differ diff --git a/docs/report/_img/widget-velocity.png b/docs/report/_img/widget-velocity.png new file mode 100644 index 00000000000..273f52595b0 Binary files /dev/null and b/docs/report/_img/widget-velocity.png differ diff --git a/docs/report/_img/widget-visual-studio.png b/docs/report/_img/widget-visual-studio.png new file mode 100644 index 00000000000..e052899580f Binary files /dev/null and b/docs/report/_img/widget-visual-studio.png differ diff --git a/docs/report/_img/widget-work-links.png b/docs/report/_img/widget-work-links.png new file mode 100644 index 00000000000..7d65ac96687 Binary files /dev/null and b/docs/report/_img/widget-work-links.png differ diff --git a/docs/report/_img/widgets-test-trend-results.png b/docs/report/_img/widgets-test-trend-results.png new file mode 100644 index 00000000000..93ae80ac127 Binary files /dev/null and b/docs/report/_img/widgets-test-trend-results.png differ diff --git a/docs/report/_shared/analytics-preview.md b/docs/report/_shared/analytics-preview.md new file mode 100644 index 00000000000..5e2bd1bec68 --- /dev/null +++ b/docs/report/_shared/analytics-preview.md @@ -0,0 +1,14 @@ + +> [!NOTE] +> **Feature availability**: The [Analytics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics) +> is available to all VSTS accounts and provides access to several useful +> widgets, such as [Cumulative Flow](../guidance/cumulative-flow.md), +> [Velocity](../guidance/team-velocity.md), and [Lead and Cycle Time](../guidance/cycle-time-and-lead-time.md). +> The Analytics OData endpoint, which provides a concise model over the +> VSTS suite for Work Item Tracking, Test, Version Control, and +> Build, is in private preview and only available to select VSTS customers +> at this time. +> +> If you are looking for information about the Azure Analysis Services, see +> [Azure Analysis Services](https://azure.microsoft.com/services/analysis-services/) or [What is Azure Analysis Services?](https://docs.microsoft.com/en-us/azure/analysis-services/analysis-services-overview). + diff --git a/docs/report/_shared/help-support-shared.md b/docs/report/_shared/help-support-shared.md new file mode 100644 index 00000000000..4a9714c63b9 --- /dev/null +++ b/docs/report/_shared/help-support-shared.md @@ -0,0 +1,7 @@ +### Provide feedback + +We welcome your feedback. + +Send suggestions on **[UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services)**, and follow us on **[Twitter](https://twitter.com/vsts) @vsts**. + +See also our [comprehensive feedback and support page](https://www.visualstudio.com/vsts/accounts/provide-feedback). \ No newline at end of file diff --git a/docs/report/_shared/image-differences.md b/docs/report/_shared/image-differences.md new file mode 100644 index 00000000000..c9bfbeef59e --- /dev/null +++ b/docs/report/_shared/image-differences.md @@ -0,0 +1,5 @@ + + + +>[!NOTE] +>The images you see from your web portal may differ from the images you see in this topic. These differences result from updates made to VSTS or your on-premises TFS, [options that you or your admin have enabled](/vsts/collaborate/preview-features), and which process was chosen when creating your team project—[Agile](/vsts/work/guidance/agile-process), [Scrum](/vsts/work/guidance/scrum-process), or [CMMI](/vsts/work/guidance/cmmi-process). However, the basic functionality available to you remains the same unless explicitly mentioned. For an overview of changes in the navigation experience and working within the user and administration contexts, see [Work in the web portal](/vsts/connect/work-web-portal#admin-context). diff --git a/docs/report/_shared/tfs-header-17-15.md b/docs/report/_shared/tfs-header-17-15.md new file mode 100644 index 00000000000..0ddcf2603a6 --- /dev/null +++ b/docs/report/_shared/tfs-header-17-15.md @@ -0,0 +1,6 @@ +**TFS 2017 | TFS 2015 | TFS 2013** + +>[!IMPORTANT] +>Excel reports, Reporting Services reports, and SharePoint dashboards are only supported for on-premises TFS. For information on what is supported for VSTS, see [Dashboards, charts, & widgets](/vsts/report/overview). +> +> TFS 2018 and later versions no longer support native integration with SharePoint products. If you're planning to upgrade to TFS 2018, read [About SharePoint integration](/vsts/ecosystem/sharepoint/about-sharepoint-integration) to learn about the options available to you. \ No newline at end of file diff --git a/docs/report/_shared/vsts-tfs-header-17-15.md b/docs/report/_shared/vsts-tfs-header-17-15.md new file mode 100644 index 00000000000..f5d91399109 --- /dev/null +++ b/docs/report/_shared/vsts-tfs-header-17-15.md @@ -0,0 +1,2 @@ + +VSTS | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013 diff --git a/docs/report/add-charts-to-dashboard.md b/docs/report/add-charts-to-dashboard.md new file mode 100644 index 00000000000..78bb67fe38d --- /dev/null +++ b/docs/report/add-charts-to-dashboard.md @@ -0,0 +1,226 @@ +--- +title: Add built-in charts to a team dashboard in VSTS or TFS +description: Add system-generated charts or query-based charts to a team dashboard +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/10/2017 +--- + +# Add charts to a dashboard + +VSTS | TFS 2018 | TFS 2017 | TFS 2015.1-2015.3 + + + +All charts listed in the following table are available from VSTS and TFS 2017.1. You can add them to a dashboard from the widget catalog or directly from the Build, Release, Test, or Work hubs. For TFS 2015. and earlier versions, some charts require you to add them to a team dashboard from the hub. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Chart TFS 2015 TFS 2015.1TFS 2015.2TFS 2017.1
        [Build history chart](#build-history) 1 ![checkmark](../work/_img/icons/checkmark.png)![checkmark](../work/_img/icons/checkmark.png)![checkmark](../work/_img/icons/checkmark.png)
        [Release summary chart](#release-summary) 1 ![checkmark](../work/_img/icons/checkmark.png)
        [Test status or result chart](#test-result) 2 ![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../work/_img/icons/checkmark.png)
        [Test quality trend chart](#test-quality) 1 ![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../work/_img/icons/checkmark.png)
        [Work item query](#work-item-query) 2![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../work/_img/icons/checkmark.png)
        [Work item query chart](#work-item-query) 2![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../Work/_img/icons/checkmark.png)![checkmark](../work/_img/icons/checkmark.png)
        + +1. These charts are configured by the system. You can't edit them. +2. These charts are user-configurable. + + + +>[!NOTE] +>**Required permissions:** You must be a team admin to add a chart to a team dashboard or homepage, or be [granted permissions to manage a dashboard](dashboards.md#manage). Or, if you're a member of the Project Administrators group, you can add charts to any team's dashboards or home page. + + + +## Add a build history chart + +>[!NOTE] +>Feature availability: This chart is supported from VSTS and TFS 2015.1 and later versions. With VSTS and later versions of TFS, you can also add it to a team dashboard from the [widget catalog](widget-catalog.md#build-history-widget). + +Each time a build is run, it logs information about the build, including the run time, errors and warnings, and whether it successfully completed or failed. + +1. Select your [team context](../work/how-to/switch-team-context-work.md) and then open the Build hub to add a build history chart to a team dashboard. + + ![Add a build summary chart to a dashboard](_img/add-chart-build-summary.png) + + If you aren't a team administrator, [get added as one](../work/scale/add-team-administrator.md). The Add to dashboard menu selection is disabled when you don't have permissions to add it to the dashboards of the selected team context. + +2. Build summary charts look like this: + + ![Add a test plan chart to a dashboard](_img/add-a-dashboard-build-summary.png) + + Hover over a bar to view build information and run time. Click a bar to go to the build summary page. + + + +## Add a release summary chart + +>[!NOTE] +>Feature availability: This chart is supported from VSTS and TFS 2017.1 and later versions. You can also add it to a team dashboard from the [widget catalog](widget-catalog.md#release-definition-widget). + +Each time a [release is deployed](../build-release/actions/view-manage-releases.md#add-widget), it logs information about the release to each of its environments. You can add a release tile to your team dashboard to monitor release progress and gain quick access to each release. + +1. Select your [team context](../work/how-to/switch-team-context-work.md) and then open the Release hub to add a release definition chart to a team dashboard. + + ![Add a Release definition chart to a dashboard](_img/add-cd-release-definition.png) + + If you aren't a team administrator, [get added as one](../work/scale/add-team-administrator.md). The Add to dashboard menu selection is disabled when you don't have permissions to add it to the dashboards of the selected team context. + +2. Release definition charts show the success (green), in progress (blue), cancellation (red), or non-deployment (grey) to an environment for the current and last four releases: + + ![Release definition tile](_img/add-cd-release-definition-tile.png) + + + +## Add a test status or result chart + +>[!NOTE] +>Feature availability: This feature is supported from VSTS and TFS 2015. + +As you create and run tests, you can track your status by defining [lightweight charts of test plans and test results](../manual-test/getting-started/track-test-status.md). + +1. Select your [team context](../work/how-to/switch-team-context-work.md), make sure you're a [team admin](../work/scale/add-team-administrator.md), and if you haven't yet created the dashboard, [do that now](dashboards.md). + +2. Open the Test hub charts page and select the dashboard to add the test chart to. + + ![Add a test plan chart to a dashboard](_img/add-a-chart-test-plan.png) + + +## Add a test quality trend chart + +>[!NOTE] +>Feature availability: This chart is supported from VSTS and TFS 2015.2 or later versions. From VSTS and TFS 2017 and later versions, you can add a [test result trend chart widget](widget-catalog.md#test-results-widget) to a team dashboard. + + +You can add trends to the dashboard of the failures and duration of those [tests that were run as part of a build](../build-release/test/getting-started-with-continuous-testing.md). + +1. Select your [team context](../work/how-to/switch-team-context-work.md), make sure you're a [team admin](../work/scale/add-team-administrator.md), and if you haven't yet created the dashboard, [do that now](dashboards.md). + +2. Open a build summary for a build definition to which you've added tests, open the Tests page, and click the bar chart for either Test failures or Test duration. + + ![Add a test plan chart to a dashboard](_img/add-chart-test-quality.png) + +3. Click the ![Actions icon](../work/_img/icons/actions-icon.png) Actions menu and choose the dashboard to add the chart to. + + ![Open Actions menu and select dashboard](_img/add-chart-test-failures.png) + + Learn more about [reviewing automated test results after a build](../build-release/test/review-continuous-test-results-after-build.md). + + + +## Add a work item query or chart + +>[!NOTE] +>Feature availability: This feature is supported from VSTS or TFS 2015. With VSTS, you can add a [work item query chart widget](widget-catalog.md#build-history-widget) to a team dashboard.   + + +You add work item queries and charts to a dashboard from the Queries page. Queries and charts must be associated with queries under the Shared queries folder. + +1. First, make sure you have selected your team context. Only those dashboards created for a team appear in the context menu for each query or chart. [Switch team context](../work/how-to/switch-team-context-work.md) as needed. + +2. If you aren't a team administrator, [get added as one](../work/scale/add-team-administrator.md). Only team and project admins can add and customize team dashboards. + +3. If you haven't yet created the dashboard, [do that now](dashboards.md). + +4. From the charts Actions menu, choose the team dashboard. + + ![Chart context menu, add to a dashboard](_img/pin-chart-to-a-dashboard.png) + + You can only add charts associated with shared queries. Charts associated with queries under My Queries folder won't display the add to dashboard option. + + + +## Add a markdown file to a dashboard + +>[!NOTE] +>**Feature availability:** Adding a Markdown file to a team dashboard is available from VSTS and the web portal for TFS 2015.3 and later versions. + +Open the Markdown file defined in your repository and make sure you are in your team context. + +Click **Add to dashboard**, and then choose the team dashboard to add the markdown file to. As you update the Markdown file, changes will automatically appear on the dashboard upon refresh. See [Dashboards](../Report/dashboards.md) for more info. + +Web portal, Code hub, README file, Add Markdown page to a dashboard + + +## Markdown widgets + +Use these widgets to support your team and stakeholders by adding information such as: +- Team goals +- Provide links to team backlogs or boards, metrics, or other items located in a network share such as a OneNote, SharePoint site or wiki pages +- Important dates or target deadlines + +Here's an example: + +Web portal, Sample Markdown widget + + +>[!NOTE] +>Links to documents on file shares using `file://` are not supported on VSTS or TFS 2017.1 and later versions. This restriction has been implemented for security purposes. +> +>For information on how to specify relative links from a Welcome page or Markdown widget, see [Source control relative links](../reference/markdown-guidance.md#relative-links). + +To edit a markdown widget, you must be a team admin or a member of the Project Administrators group. To be added as a team admin, go [here](../work/scale/add-team-administrator.md). + +## System-generated work tracking charts + +There are a number of system-generated charts that you can access from the web portal, but can't add to a dashboard. However, you may find a comparable widget listed in the [widget catalog](widget-catalog.md) that tracks the same or similar data which you can add to the dashboard. These include: + +- [Team velocity](./guidance/team-velocity.md) +- [Sprint burndown chart](../work/scrum/sprint-burndown.md) (see [Sprint burndown widget](widget-catalog.md#sprint-burndown-widget)) +- [Cumulative flow](guidance/cumulative-flow.md) (see [CFD widget](widget-catalog.md#cfd-widget)) + diff --git a/docs/report/add-markdown-to-dashboard.md b/docs/report/add-markdown-to-dashboard.md new file mode 100644 index 00000000000..cfd59cf8a9f --- /dev/null +++ b/docs/report/add-markdown-to-dashboard.md @@ -0,0 +1,35 @@ +--- +title: Add markdown content to a team dashboard in VSTS or TFS +description: Add and configure the Markdown widget you add to a team dashboard +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/10/2017 +--- + +# Add Markdown to a dashboard + +VSTS | TFS 2018 | TFS 2017 | TFS 2015.1-2015.3 + + + +Use the Markdown widget to support your team and stakeholders by adding information such as: +- Team goals +- Provide links to team backlogs or boards, metrics, or other items located in a network share such as a OneNote, SharePoint site or wiki pages +- Important dates or target deadlines + +Here's an example: + +Web portal, Sample Markdown widget + + +>[!NOTE] +>Links to documents on file shares using `file://` are not supported on VSTS or TFS 2017.1 and later versions. This restriction has been implemented for security purposes. +> +>For information on how to specify relative links from a Welcome page or Markdown widget, see [Source control relative links](../reference/markdown-guidance.md#relative-links). + +To edit a markdown widget, you must be a team admin or a member of the Project Administrators group. To be added as a team admin, go [here](../work/scale/add-team-administrator.md). + + diff --git a/docs/report/add-widget-to-dashboard.md b/docs/report/add-widget-to-dashboard.md new file mode 100644 index 00000000000..f8b0ee7a55e --- /dev/null +++ b/docs/report/add-widget-to-dashboard.md @@ -0,0 +1,114 @@ +--- +title: Add a widget to a team dashboard in VSTS or TFS +description: Choose and configure widgets that you add to a team dashboard +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 0869DB42-6983-49A2-855C-2678CFFF4967 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/22/2017 +--- + +# Add widgets to a dashboard + +VSTS | TFS 2018 | TFS 2017 + + +Widgets smartly format data to provide access to easily consumable data. You add widgets to your team dashboards to gain visibility into the status and trends occurring as you develop your software project. + +Each widget provides access to a chart, user-configurable information, or a set of links that open a feature or function. + +You can add one or more charts or widgets to your dashboard. You add several widgets at a time simply by selecting each one. See [Manage dashboards](dashboards.md#manage) to determine the permissions you need to add and remove widgets from a dashboard. + + +## Connect to the web portal for your team project + +To add a widget to a dashboard, you connect to your team project using a [supported web browser](../accounts/requirements.md#supported-browsers). If you don't have a team project yet, create one in [VSTS](../accounts/create-account-msa-or-work-student.md). + +Open a browser window and click the **Dashboards** hub. If you haven't been added as a team member, [get added now](../work/scale/multiple-teams.md#add-team-members). + +![Open the Dashboards hub](_img/dashboards-go-to.png) + +If you don't see the team or team project you want, click the ![project icon](../work/_img/icons/project-icon.png) project icon to [browse all team projects and teams](../connect/account-home-pages.md). + +>[!NOTE] +>Feature availability: You can access the [widget catalog](widget-catalog.md) from the web portal for VSTS or TFS 2015.1 or later version. The widget catalog provides widgets for all tiles supported in previous releases of TFS for the team homepage. For on-premises TFS 2015, you can add select charts to the team home page using the [Pin to home page](team-dashboard.md) feature.   +> +>To determine the platform and version you're on, see [Provide product and content feedback, Platforms and version support](../provide-feedback.md#platform-version). + +## Add a widget to a dashboard + +Click ![Edit dashboard icon](_img/edit-dashboard-icon.png) to modify a dashboard. Click ![add a widget icon](_img/add-widget-icon.png) to add a widget to the dashboard. + +The [widget catalog](widget-catalog.md) describes all the available widgets, many of which are scoped to the selected team context. + +>[!NOTE] +>Feature availability: For VSTS and TFS 2017 and later versions, you can drag and drop a widget from the catalog onto the dashboard.   +> +> Widget images may vary depending on which platform you access. This topic shows images that appear in VSTS. However, the widget title and functionality described in this topic are valid for both VSTS and TFS. For example, dashboard edit mode controls shown below are valid for VSTS and TFS 2015.2 and later version. Some functionality differs when you connect to TFS 2015.1 or earlier versions. + +## Configure a widget + +To configure a widget, add the widget to a dashboard and then click the ![configure icon](_img/icons/configure-icon.png) configure icon. + +![Work item chart unconfigured widget](_img/add-widget-configure-initial.png) + +Click the delete icon to remove the tile from the dashboard. + +Once you've configured the widget, you can edit it by opening the actions menu. + +Edit configured widget + + +## Move or delete a widget from a dashboard + +>[!NOTE] +>Just as you have to be a team or project admin to add items to a dashboard, you must have admin permissions to remove items. + +Click ![Edit dashboard icon](_img/edit-dashboard-icon.png) to modify your dashboard. You can then drag tiles to reorder their sequence on the dashboard. + +To remove a widget, click the widget's ![Trash icon](_img/dashboard-trash-icon.png) or ![Delete icon](_img/dashboard-delete-icon.png) delete icons. + +When you're finished with your changes, click ![Exit edit-dashboard-mode icon](_img/exit-edit-dashboard-mode-icon.png) to exit dashboard editing. + + +## Copy a widget + +>[!NOTE] +>**Feature availability:** This feature is only available from VSTS. + +To copy a configured widget to another team dashboard, click the ![Actions icon](../work/_img/icons/actions-icon.png) actions icon and select **Add to dashboard**. + +Copy a widget to another team dashboard + + + +## Try this next + +> [!div class="nextstepaction"] +> [Review the widget catalog](widget-catalog.md) +> or +> [Review Marketplace widgets](https://marketplace.visualstudio.com/search?term=widget&target=VSTS&category=All%20categories&sortBy=Relevance) + + +### Extensibility +In addition to the widgets described in the Widget catalog, you can create your own widgets using the [Widget REST APIs](https://www.visualstudio.com/extend/develop/add-dashboard-widget). + +### Widget size + +Some widgets are pre-sized and can't be changed. Others are configurable through their configuration dialog. + +For example, the Chart for work items widget allows you to select an area size ranging from 2 x 2 to 4 x 4 (tiles). + + +Change widget size + + +### Disabled Marketplace widget + +If your account or project collection administrator disables a marketplace widget, you'll see the following image: + +Disabled widget extension notification + +To regain access to it, request your admin to reinstate or reinstall the widget. \ No newline at end of file diff --git a/docs/report/address-inaccuracies-published-for-summary-values.md b/docs/report/address-inaccuracies-published-for-summary-values.md new file mode 100644 index 00000000000..02f63eef8ae --- /dev/null +++ b/docs/report/address-inaccuracies-published-for-summary-values.md @@ -0,0 +1,67 @@ +--- +title: Address inaccuracies published for summary values +titleSuffix: TFS +description: Corrects the reports with hours that are counted twice with this procedure - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 09e8e02d-9ecb-4012-9ee0-cebb89372096 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Address inaccuracies published for summary values + +[!INCLUDE [temp](_shared/tfs-header-17-15.md)] + +If you see that hours are counted twice in reports that contain task hours, you can correct the problem with the procedure in this topic. The Progress dashboard and the Burndown and Burn Rate and Remaining Work reports may show double-counting of work hours. + +> [!NOTE] +> When you use Office Project to create parent and child tasks, it assigns parent tasks the rollup of hours that are defined for all its child tasks. Rollup hours are not published to Team Foundation so that the hours are not double-counted in certain reports. The Microsoft Project mapping file attribute, **IfSummaryRefreshOnly**, suppresses the publication to Team Foundation of the hours that are assigned to summary tasks. You can view the rollup of hours for summary tasks in Office Project but not in Team Foundation. For more information, see [Customize the Microsoft Project field mapping file](../work/reference/map-microsoft-project-fields-to-tf-fields.md). + + When both summary tasks and their child tasks contain hours in the effort fields, you essentially have double-counting of the level of task effort. To address these inaccuracies, you must clear the **Original Estimate** (or **Baseline Work** for team projects that have been upgraded), **Remaining Work**, and **Completed Work** fields for the summary or parent tasks. + + **Required Permissions** + + To perform this procedure, you must be a member of the **Contributors** group or your **View work items in this node** and **Edit work items in this node** permissions must be set to **Allow**. For more information, see [Permission reference](../security/set-project-collection-level-permissions.md). + +### To clear the hour fields of parent or summary tasks + +1. In Team Explorer, expand the **Work Items** node for your team project, and locate the **Work Items with Summary Values** team query. + + This query is located either in the **Team Queries** folder or the **Planning and Tracking** folder under the **Team Queries** folder. + +2. Run the query. + +3. Select ![Collapse all](_img/icon_collapseall.png "Icon_CollapseAll") (Collapse All) so that only parent or summary work items appear in the query results. + +4. Press CTRL+A to highlight the parent work items that are listed. + +5. Open the context menu for one of the work items, and then choose ![Open in Microsoft Excel](_img/icon_openinexcel.png "Icon_openInExcel")**Open in Microsoft Excel**. + + > [!IMPORTANT] + > Export the query results to Office Excel with the rows collapsed. This condition exports only the parent or summary tasks. + +6. In the Excel document, for the area and iteration paths that you are managing, clear the values in the following three columns: + + - **Original Estimate** + + - **Remaining Work** + + - **Completed Work** + +7. (Optional) Save the Excel file. + + > *[!NOTE] + > The work items in this list are based on the work item IDs and not a work item query. To address inaccuracies that may occur later, you must repeat steps 1 through 6. + +8. On the **Team** tab, choose **Publish**. + +9. Wait two or more hours for the Analysis Services cube to register the changes. + + The default refresh frequency for the relational data warehouse is two minutes, and for the cube, two hours. For more information, see [Change a process control setting for the data warehouse or Analysis Services cube](admin/change-a-process-control-setting.md). + +10. Verify that the changes have been picked up by viewing the Progress dashboard or other work report. + +## Related notes + [Add or change Project-to-TFS field mapping](../work/reference/add-or-change-how-project-fields-map-to-tfs-fields.md) + [Create your backlog and tasks using Project](../work/office/create-your-backlog-tasks-using-project.md) \ No newline at end of file diff --git a/docs/report/admin/_img/IC588226.png b/docs/report/admin/_img/IC588226.png new file mode 100644 index 00000000000..da09a927414 Binary files /dev/null and b/docs/report/admin/_img/IC588226.png differ diff --git a/docs/report/admin/_img/IC658337.png b/docs/report/admin/_img/IC658337.png new file mode 100644 index 00000000000..2803638c081 Binary files /dev/null and b/docs/report/admin/_img/IC658337.png differ diff --git a/docs/report/admin/_img/IC665009.png b/docs/report/admin/_img/IC665009.png new file mode 100644 index 00000000000..2ab9aa537dc Binary files /dev/null and b/docs/report/admin/_img/IC665009.png differ diff --git a/docs/report/admin/_img/IC665011.png b/docs/report/admin/_img/IC665011.png new file mode 100644 index 00000000000..21f5d9eb544 Binary files /dev/null and b/docs/report/admin/_img/IC665011.png differ diff --git a/docs/report/admin/_img/IC665012.png b/docs/report/admin/_img/IC665012.png new file mode 100644 index 00000000000..4e5370ca0fd Binary files /dev/null and b/docs/report/admin/_img/IC665012.png differ diff --git a/docs/report/admin/_img/IC665021.png b/docs/report/admin/_img/IC665021.png new file mode 100644 index 00000000000..0cf5b3c1776 Binary files /dev/null and b/docs/report/admin/_img/IC665021.png differ diff --git a/docs/report/admin/_img/IC665028.png b/docs/report/admin/_img/IC665028.png new file mode 100644 index 00000000000..ebcdb2439a1 Binary files /dev/null and b/docs/report/admin/_img/IC665028.png differ diff --git a/docs/report/admin/_img/IC665035.png b/docs/report/admin/_img/IC665035.png new file mode 100644 index 00000000000..c437e4d8dca Binary files /dev/null and b/docs/report/admin/_img/IC665035.png differ diff --git a/docs/report/admin/_img/IC665038.png b/docs/report/admin/_img/IC665038.png new file mode 100644 index 00000000000..8bf3d54034f Binary files /dev/null and b/docs/report/admin/_img/IC665038.png differ diff --git a/docs/report/admin/_img/IC665039.png b/docs/report/admin/_img/IC665039.png new file mode 100644 index 00000000000..5e3a28e55af Binary files /dev/null and b/docs/report/admin/_img/IC665039.png differ diff --git a/docs/report/admin/_img/IC665040.png b/docs/report/admin/_img/IC665040.png new file mode 100644 index 00000000000..77ea9db1d52 Binary files /dev/null and b/docs/report/admin/_img/IC665040.png differ diff --git a/docs/report/admin/_img/IC665041.png b/docs/report/admin/_img/IC665041.png new file mode 100644 index 00000000000..246fc29029b Binary files /dev/null and b/docs/report/admin/_img/IC665041.png differ diff --git a/docs/report/admin/_img/IC665042.png b/docs/report/admin/_img/IC665042.png new file mode 100644 index 00000000000..623f4094163 Binary files /dev/null and b/docs/report/admin/_img/IC665042.png differ diff --git a/docs/report/admin/_img/IC665043.png b/docs/report/admin/_img/IC665043.png new file mode 100644 index 00000000000..5e6340495a9 Binary files /dev/null and b/docs/report/admin/_img/IC665043.png differ diff --git a/docs/report/admin/_img/IC665044.png b/docs/report/admin/_img/IC665044.png new file mode 100644 index 00000000000..ef677a2e3a0 Binary files /dev/null and b/docs/report/admin/_img/IC665044.png differ diff --git a/docs/report/admin/_img/IC665045.png b/docs/report/admin/_img/IC665045.png new file mode 100644 index 00000000000..a055ef0ab60 Binary files /dev/null and b/docs/report/admin/_img/IC665045.png differ diff --git a/docs/report/admin/_img/IC665046.png b/docs/report/admin/_img/IC665046.png new file mode 100644 index 00000000000..657baa08f91 Binary files /dev/null and b/docs/report/admin/_img/IC665046.png differ diff --git a/docs/report/admin/_img/IC714222.png b/docs/report/admin/_img/IC714222.png new file mode 100644 index 00000000000..db13a1e765e Binary files /dev/null and b/docs/report/admin/_img/IC714222.png differ diff --git a/docs/report/admin/_img/IC777266.png b/docs/report/admin/_img/IC777266.png new file mode 100644 index 00000000000..5c7ef7a7b9d Binary files /dev/null and b/docs/report/admin/_img/IC777266.png differ diff --git a/docs/report/admin/_img/alm_te_home_icon.png b/docs/report/admin/_img/alm_te_home_icon.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/report/admin/_img/alm_te_home_icon.png differ diff --git a/docs/report/admin/_img/analysis-services.png b/docs/report/admin/_img/analysis-services.png new file mode 100644 index 00000000000..787ee078c40 Binary files /dev/null and b/docs/report/admin/_img/analysis-services.png differ diff --git a/docs/report/admin/_img/change-database.png b/docs/report/admin/_img/change-database.png new file mode 100644 index 00000000000..1ffe100d84a Binary files /dev/null and b/docs/report/admin/_img/change-database.png differ diff --git a/docs/report/admin/_img/config-report-status.png b/docs/report/admin/_img/config-report-status.png new file mode 100644 index 00000000000..9773c4e46b9 Binary files /dev/null and b/docs/report/admin/_img/config-report-status.png differ diff --git a/docs/report/admin/_img/default-folder-location.png b/docs/report/admin/_img/default-folder-location.png new file mode 100644 index 00000000000..ad7b0c3daf4 Binary files /dev/null and b/docs/report/admin/_img/default-folder-location.png differ diff --git a/docs/report/admin/_img/feature-selection.png b/docs/report/admin/_img/feature-selection.png new file mode 100644 index 00000000000..b13836813c8 Binary files /dev/null and b/docs/report/admin/_img/feature-selection.png differ diff --git a/docs/report/admin/_img/icon_reportte.png b/docs/report/admin/_img/icon_reportte.png new file mode 100644 index 00000000000..da09a927414 Binary files /dev/null and b/docs/report/admin/_img/icon_reportte.png differ diff --git a/docs/report/admin/_img/installation-type.png b/docs/report/admin/_img/installation-type.png new file mode 100644 index 00000000000..c7c2fcb58f9 Binary files /dev/null and b/docs/report/admin/_img/installation-type.png differ diff --git a/docs/report/admin/_img/locate-reports-db-names.png b/docs/report/admin/_img/locate-reports-db-names.png new file mode 100644 index 00000000000..987edef2c05 Binary files /dev/null and b/docs/report/admin/_img/locate-reports-db-names.png differ diff --git a/docs/report/admin/_img/locate-reports-reporting-services.png b/docs/report/admin/_img/locate-reports-reporting-services.png new file mode 100644 index 00000000000..2d342da8c5e Binary files /dev/null and b/docs/report/admin/_img/locate-reports-reporting-services.png differ diff --git a/docs/report/admin/_img/open-reporting-services-configuration-manager.png b/docs/report/admin/_img/open-reporting-services-configuration-manager.png new file mode 100644 index 00000000000..524667d9818 Binary files /dev/null and b/docs/report/admin/_img/open-reporting-services-configuration-manager.png differ diff --git a/docs/report/admin/_img/report-database-server.png b/docs/report/admin/_img/report-database-server.png new file mode 100644 index 00000000000..4fb2a9136a8 Binary files /dev/null and b/docs/report/admin/_img/report-database-server.png differ diff --git a/docs/report/admin/_img/report-manager-url.png b/docs/report/admin/_img/report-manager-url.png new file mode 100644 index 00000000000..1bfbf70ea73 Binary files /dev/null and b/docs/report/admin/_img/report-manager-url.png differ diff --git a/docs/report/admin/_img/reporting-services-config.png b/docs/report/admin/_img/reporting-services-config.png new file mode 100644 index 00000000000..1d6a82122c3 Binary files /dev/null and b/docs/report/admin/_img/reporting-services-config.png differ diff --git a/docs/report/admin/_img/reporting-warehouse.png b/docs/report/admin/_img/reporting-warehouse.png new file mode 100644 index 00000000000..49e21f76c7e Binary files /dev/null and b/docs/report/admin/_img/reporting-warehouse.png differ diff --git a/docs/report/admin/_img/reports-server.png b/docs/report/admin/_img/reports-server.png new file mode 100644 index 00000000000..a33472d8129 Binary files /dev/null and b/docs/report/admin/_img/reports-server.png differ diff --git a/docs/report/admin/_img/service-accounts.png b/docs/report/admin/_img/service-accounts.png new file mode 100644 index 00000000000..bc0f1026b9b Binary files /dev/null and b/docs/report/admin/_img/service-accounts.png differ diff --git a/docs/report/admin/_img/sql-install-center.png b/docs/report/admin/_img/sql-install-center.png new file mode 100644 index 00000000000..2128fe90288 Binary files /dev/null and b/docs/report/admin/_img/sql-install-center.png differ diff --git a/docs/report/admin/_img/step-1-add-a-report-server.png b/docs/report/admin/_img/step-1-add-a-report-server.png new file mode 100644 index 00000000000..f4408cb8143 Binary files /dev/null and b/docs/report/admin/_img/step-1-add-a-report-server.png differ diff --git a/docs/report/admin/_img/step-2-upload-reports.png b/docs/report/admin/_img/step-2-upload-reports.png new file mode 100644 index 00000000000..ea8bf584961 Binary files /dev/null and b/docs/report/admin/_img/step-2-upload-reports.png differ diff --git a/docs/report/admin/_img/step-3-grant-permissions.png b/docs/report/admin/_img/step-3-grant-permissions.png new file mode 100644 index 00000000000..7ea5847b794 Binary files /dev/null and b/docs/report/admin/_img/step-3-grant-permissions.png differ diff --git a/docs/report/admin/_img/step-4-review-team-activities.png b/docs/report/admin/_img/step-4-review-team-activities.png new file mode 100644 index 00000000000..386d362791c Binary files /dev/null and b/docs/report/admin/_img/step-4-review-team-activities.png differ diff --git a/docs/report/admin/_img/te-go-to-reports-site.png b/docs/report/admin/_img/te-go-to-reports-site.png new file mode 100644 index 00000000000..70cca0c6d0b Binary files /dev/null and b/docs/report/admin/_img/te-go-to-reports-site.png differ diff --git a/docs/report/admin/_img/team-project-collections.png b/docs/report/admin/_img/team-project-collections.png new file mode 100644 index 00000000000..847f6c7a8a3 Binary files /dev/null and b/docs/report/admin/_img/team-project-collections.png differ diff --git a/docs/report/admin/_img/tfs-admin-console-reporting.png b/docs/report/admin/_img/tfs-admin-console-reporting.png new file mode 100644 index 00000000000..a0085524723 Binary files /dev/null and b/docs/report/admin/_img/tfs-admin-console-reporting.png differ diff --git a/docs/report/admin/_img/tfs-admin-reporting.png b/docs/report/admin/_img/tfs-admin-reporting.png new file mode 100644 index 00000000000..0cf5b3c1776 Binary files /dev/null and b/docs/report/admin/_img/tfs-admin-reporting.png differ diff --git a/docs/report/admin/_img/web-services.png b/docs/report/admin/_img/web-services.png new file mode 100644 index 00000000000..661842bb995 Binary files /dev/null and b/docs/report/admin/_img/web-services.png differ diff --git a/docs/report/admin/add-a-report-server.md b/docs/report/admin/add-a-report-server.md new file mode 100644 index 00000000000..93b3f4e8cd3 --- /dev/null +++ b/docs/report/admin/add-a-report-server.md @@ -0,0 +1,201 @@ +--- +title: Add a report server | Team Foundation Server +description: Step 1 of 4 steps to add or refresh reports added to a team project hosted on an on-premises TFS +ms.assetid: 1BB64B5F-708B-4E6E-9E88-4DCAEE58A231 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# Add a report server + +**TFS 2017 | TFS 2015 | TFS 2013** + +>[!IMPORTANT] +>**Feature availability**: You can only add a report server to an on-premises TFS. If you're using VSTS, adding a report server isn't a supported option, instead, you can use [PowerBI](../powerbi/overview.md). + +This is the first task in the four-task sequence to add reports to a team project. If you have already installed SQL Reporting Services and Analysis Server, then go to step 2 to upload reports. + +[![Add a report server](_img/step-1-add-a-report-server.png)](add-a-report-server.md) +[![Upload reports](_img/step-2-upload-reports.png)](upload-reports.md) +[![Grant permissions](_img/step-3-grant-permissions.png)](grant-permissions-to-reports.md) +[![Review team activities](_img/step-4-review-team-activities.png)](review-team-activities-for-useful-reports.md) + + +On-premises installations of TFS can include reports to help you manage your software development projects. However, you need a report server as part of your deployment in order to use them. If you don't have one, you can add SQL Server Reporting Services to your deployment. + +>[!NOTE] +>If you installed TFS on a client operating system, such as Windows 7, you can't add reporting as described here, because it isn't supported on client operating systems. + +##What do I need to know before adding a report server? + + +####Q: What kind of report server can I add? + +**A:** You'll need to add SQL Server Reporting Services to provide a report server for TFS. This can be added to the SQL Server instance that is supporting TFS, or to a different instance. + +####Q: What permissions do I need? + +**A:** You need to be a member of the local administrators group on the server, the Team Foundation Administrators group in TFS, and the sysadmin group in SQL Server, or have the equivalent permissions. If you don't have them, [get those permissions now](../../tfs-server/add-administrator-tfs.md). + +####Q: Can I add reporting if TFS is installed on a client operating system? + +**A:** No. You can't add reporting and analysis services on a client operating system. Your choices aren't easy. If you still want to add reporting, either [move the team project collection](../../tfs-server/admin/move-project-collection.md) to a deployment of TFS that supports reporting, or [restore your entire deployment to a different server](../../tfs-server/admin/backup/tut-single-svr-home.md) that is running a server operating system and a version of SQL Server that supports reporting. + +####Q: How do I find out if I already have reporting available for TFS? + +**A:** Look in the administration console for Team Foundation Server. If you see a reporting node and it shows that reporting is configured and enabled, it's already there. + +![If this node isn't present, you don't have reports](_img/tfs-admin-console-reporting.png) + +Jump to the bottom of this topic to confirm that reports are available for the team project collection, and then move on to [Upload reports to a team project](upload-reports.md). + +####Q: Do I need to back up my data first? + +**A:** You should have a recent backup available. If you don't, you can [make a backup using Scheduled Backups](../../tfs-server/admin/backup/config-backup-sched-plan.md). + + + + +## Verify your options and upgrade if necessary + +1. Find out what version and edition of SQL Server you haveby following the instructions provided in [Validate a SQL Server Installation](https://technet.microsoft.com/library/bb510455.aspx). + If the answer is SQL Server Express, keep following these steps. If it's any other edition, but you don't see any version and edition information about reporting or analysis services, jump ahead to [Add Reporting Services](#AddRSandAS). If you do see information about these services, then your SQL Server already has them installed, and you can jump ahead to [Add Reporting to TFS](#AddRStoTFS). + +2. If your deployment is using SQL Server Express, [upgrade to a different edition](https://msdn.microsoft.com/library/cc707783.aspx). For more information about the editions that support reporting in TFS, see [Requirements and compatibility, SQL Server](../../accounts/requirements.md#sql-server). + + + +##Add Reporting Services and Analysis Services to SQL Server +After you confirm that you have an edition of SQL Server that supports reporting (or you upgrade to one), add the reporting and analysis services features if they aren't already configured. + +1. Open the SQL Server Installation Center to add features to an existing installation. + + ![Add, remove, and manage SQL Server features](_img/sql-install-center.png) + + You might have to restart your computer during this process, particularly if you've just finished upgrading from SQL Server Express. + +2. Once your server has passed all the setup rules checks, pick the instance to add features to. + + **Tip:** If you upgraded from SQL Server Express, you'll have a named instance called SQLEXPRESS. + + ![Add features to an existing instance](_img/installation-type.png) + +3. In **Feature Selection**, add these features: + * Analysis Services + * Reporting Services - Native + * Management Tools – Complete (not pictured) + + ![Add features to your instance](_img/feature-selection.png) + +4. Accept the defaults for service accounts in **Server Configuration**, unless your deployment has specific service account needs. Make sure all services are set to start automatically. + + ![Make sure services are set to automatic](_img/service-accounts.png) + +5. Add your user account in **Analysis Services Configuration**. + +6. Choose **Install and Configure** for reporting services if you can; if not, choose **Install Only**. + + If you're adding features after upgrading from SQL Server Express, Install Only might be the only option available. + + ![Install and configure if option is available](_img/reporting-services-config.png) + +7. Finish the wizard, including any server restarts that might be required. + +If you had to choose **Install Only** when you added reporting, you'll need to open Reporting Services Configuration Manager and do some additional configuration. If not, jump ahead to [Add Reporting to TFS](#add_reporting_to_tfs). + +##Configure Reporting Services Manually + +1. Open Reporting Services Configuration Manager and connect to your report server. + + ![Make sure you include the instance name, if any](_img/open-reporting-services-configuration-manager.png) + +2. Once you've connected, make sure the service is started, then go to the **Web Service URL** page and apply all the defaults. + +3. Now you'll need to create a database for reporting. On the **Report Server Database** page, the **Change Database** option will open the Report Server Database Configuration Wizard assist you in creating that database. + + ![TFS needs this database for reporting](_img/change-database.png) + +4. When you specify the database server connection, include the instance name as well as the server name, separated by a slash (\). + + ![Include the instance name, if any](_img/report-database-server.png) + If you aren't using a named instance, you can just provide the server name. + +5. Accept the default values on the rest of the pages of the wizard and wait for it to finish. This can take a few minutes. + +6. Accept all the defaults on the **Report Manager URL** page. + + ![The fields are prepopulated; choose apply](_img/report-manager-url.png) + +You've now fully configured reporting on the SQL Server instance that supports TFS. It's time to add the reporting features to TFS! + + + + + +## Add Reporting to TFS + +You'll need to add reporting in two places: to TFS itself, and then to your team project collection. + +1. Open the administration console for TFS and go to the **Reporting** node to start the configuration process. + + ![Edit the information to configure reporting](_img/tfs-admin-reporting.png) + +2. Select the **Use Reporting** check box. On the **Warehouse** tab, provide the name of the report server and instance for the warehouse database. Use the default name for the database (TFS_Warehouse), and test the connection. + + ![Use the default name for the database](_img/reporting-warehouse.png) + + **Tip:** Because you're configuring reporting for the first time, the databases don't exist yet. They will be created when you finish the configuration process. + +3. Provide the same server and instance information for **Analysis Services**, but use the default name for the analysis database (TFS_Analysis). Provide an account name and password for a data sources account, a special account you've created just for this purpose as described in [Service accounts and dependencies in TFS](../../tfs-server/admin/service-accounts-dependencies-tfs.md). + + ![You'll need to add the reader account information](_img/analysis-services.png) + + **Tip:** Test the connection before continuing. + +4. For **Reports**, provide the server name and the instance name in **Server**, separated by a slash. + + Use **Populate URLs** to automatically populate the next two boxes. Add the same data sources account information you provided on the previous tab. + + ![Provide the server, instance, and account info](_img/reports-server.png) + Once you finish, databases will be created, and the warehouse will start building. + + ![Status information for configured services](_img/config-report-status.png) + +5. Now add the report server to the team project collection. Edit the information in **Reports Folder**. + + ![Edit the folder location to start configuring](_img/team-project-collections.png) + + **Tip:** If you don't see the **Reports Folder** tab, you might need to refresh or restart the administration console. + +6. Unless you have reasons otherwise, use the example provided, and make sure you include the collection name. + + ![Include the collection name in the path](_img/default-folder-location.png) + +Now that you've added reporting to the server and to the team project collection, you're ready to start adding reports to your projects. + +##Try this next + +[Upload reports to a team project](upload-reports.md) + +##Related content +You can learn more about installing and configuring SQL Server for use with on-premises TFS from these topics: + +* [Supported versions and editions](../../accounts/requirements.md#sql-server) +* [Working with named instances](../../tfs-server/install/sql-server/install-sql-server.md) +* [Using SQL Server 2012 AlwaysOn](../../tfs-server/install/sql-server/use-always-on-groups.md) +* [Understanding how TFS, SQL Server, and Reporting all work together](../../tfs-server/architecture/sql-server-databases.md) + +###Set permissions + +- [Set administrator permissions](../../tfs-server/add-administrator-tfs.md) + + +###Change the data reader account + +- [Change the service account or password for SQL Server Reporting Services](../../tfs-server/admin/change-service-account-or-password-sql-reporting.md) +- [Service accounts and dependencies in Team Foundation Server](../../tfs-server/admin/service-accounts-dependencies-tfs.md) + + diff --git a/docs/report/admin/add-reports-to-a-team-project.md b/docs/report/admin/add-reports-to-a-team-project.md new file mode 100644 index 00000000000..fe7c6c0526d --- /dev/null +++ b/docs/report/admin/add-reports-to-a-team-project.md @@ -0,0 +1,34 @@ +--- +title: Add reports to a team project | TFS +description: Add a report server and upload reports to a team project hosted on an on-premises Team Foundation Server (TFS) +ms.assetid: 17C16BE3-6F7D-466F-A3D9-402C79D53768 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# Add reports to a team project + +TFS 2017 | TFS 2015 | TFS 2013 + + +>[!IMPORTANT] +>**Feature availability**: You can only add a report server to an on-premises TFS. If you're using VSTS, adding a report server isn't a supported option, instead, you can use [PowerBI](../powerbi/overview.md). + +By adding a report server to your TFS (on-premises) deployment, you can access a wealth of data about your team's projects, such as build quality, bug trends, burndown, and test progress. SQL Server Reporting Services (SSRS) reports provide insight to help teams manage work and improve processes. + +The sequence of tasks is as follows: + +[![Add a report server](_img/step-1-add-a-report-server.png)](add-a-report-server.md) +[![Upload reports](_img/step-2-upload-reports.png)](upload-reports.md) +[![Grant permissions](_img/step-3-grant-permissions.png)](grant-permissions-to-reports.md) +[![Review team activities](_img/step-4-review-team-activities.png)](review-team-activities-for-useful-reports.md) + +If your reports don't appear as expected, review the checklists provided under [Review team activities](review-team-activities-for-useful-reports.md) for the necessary team activities to generate useful reports. Also, access information that describes healthy and unhealthy versions of each report. + +After completing the sequence of tasks, you'll be able to access the default reports provided with the process template used to create your team project. +TFS SSRS data flow and report architecture + +![TFS SSRS data flow and report architecture](_img/IC658337.png) \ No newline at end of file diff --git a/docs/report/admin/change-a-process-control-setting.md b/docs/report/admin/change-a-process-control-setting.md new file mode 100644 index 00000000000..9a503995737 --- /dev/null +++ b/docs/report/admin/change-a-process-control-setting.md @@ -0,0 +1,152 @@ +--- +title: Change a process control setting | Team Foundation Server +description: Change a process control setting for the data warehouse or analysis services cube when connecting to an on-premises Team Foundation Server (TFS) +ms.assetid: 48F5B9C9-66B4-4211-8622-5F93CDA9A19A +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +#Change a process control setting for the data warehouse or Analysis Services cube + +TFS 2017 | TFS 2015 | TFS 2013 + +You can change the refresh frequency and time-out values that control the processing of the data warehouse. You change a process control setting only if you want to tune it for your specific deployment. + +During processing, the warehouse adapters pull data from the operational store, transform it as necessary, and write it to the warehouse through the warehouse object model. During typical operations, the relational database (Tfs_Warehouse) is processed within two minutes of changes made to an operational store, and the SQL Server Analysis Services cube (Tfs_Analysis) is processed every two hours. + +You might want to decrease or increase the length of time between refreshes to reduce the processing time or reduce the resource demands on the server. You can view the current settings or change a process control setting by using the Warehouse Control Web service. + +You can determine the current settings and change a setting by using the Warehouse Control Web service. + +**Requirements** + + * SQL Server Reporting Services must be configured for the TFS deployment. If it isn't, see [Add a report server](add-a-report-server.md). + + * You must be a member of the **Team Foundation Administrators** security group, or you must have the server-level **Administer warehouse** permission set to **Allow**. See [Set administrator permissions for Team Foundation Server](../../tfs-server/add-administrator-tfs.md). + + * The TFS Application Pool must be running for the Warehouse Control Web service to be available. + +##Access the Warehouse Control Web Service +1. Log on to the application-tier server. + +2. Open a web browser, type the following string in the Address bar, and then press ENTER: + ``` + http://localhost:8080/** VirtualDirectory **/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx** + ``` + + For VirtualDirectory, type the IIS Virtual Directory that was specified when TFS was installed. By default, the virtual directory is **tfs**. + + The **WarehouseControlWebService** page opens. + +##Change a process control setting +You can change the refresh frequency of the data warehouse or other process control setting. All settings are listed under [Process control settings](#process_control_settings). + +###To change the refresh frequency of the data warehouse + +1. From the **WarehouseControlWebService** page, click **ChangeSetting**. + +2. In the **settingID** box, type: **RunIntervalSeconds**. + +3. In the **newValue** box, type the new number in seconds, and then click **Invoke**. + + A confirmation Web page appears and indicates that the **RunIntervalSeconds** setting has been changed. + +###To change the refresh frequency of the cube + +1. From the **WarehouseControlWebService** page, click **ChangeSetting**. + +2. In the **settingID** box, type: + + **IncrementalProcessIntervalSeconds** + +3. In the **newValue** box, type the new number in seconds, and then click **Invoke**. + + > [!IMPORTANT] + > If you reduce the interval to less than the default of two hours (7200 seconds), processing of the data warehouse will consume server resources more frequently. Depending on the volume of data that your deployment has to process, you may want to reduce the interval to one hour (3600 seconds) or increase it to more than two hours. + + A confirmation Web page appears and indicates that the **IncrementalProcessIntervalSeconds** setting has been changed. + +###To change another process control setting + +1. From the **WarehouseControlWebService** page, click **ChangeSetting**. + +2. On the **ChangeSetting** page, type an entry for the **settingID** and **newValue**, and then click **Invoke**. + + For a description of each setting and the default values and measures that are assigned to each setting, see the table under [Process control settings](#process_control_settings). + + A browser window will open. The service indicates that the setting has been changed to the new value. + + +##Process control settings + +All reportable data from all team projects that are defined in all team project collections for an on-premises TFS deployment is written to a single relational database (Tfs\_Warehouse). Data from that warehouse is then processed and written to the SQL Server Analysis Services cube (Tfs\_Analysis). + +You should leave most of these settings at their default assignments. However, on occasion, you may have to modify a setting to meet your specific deployment requirements. + +The following table describes each process control setting and provides the SettingID, default value, and unit of measure. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        SettingIDDefault valueDescription
        AnalysisSchemaUpdateWaitSeconds3600 (seconds)Specifies the time-out that determines how long a job will wait in a running state to perform an update to the cube. If the time-out expires before the schema change finishes, the job quits and restarts later. This time-out interval supports jobs that require exclusive access to the data warehouse resources during the schema change stage.
        AnalysisServicesProcessingTimeout86400 (seconds)Specifies the time-out, measured in seconds, that determines how long a job will wait for a processing call to Analysis Services to finish.
        DailyFullProcessingTime02:00:00.0000000-08:00Specifies the time of day when the full processing of the Analysis Services cube is started. By default, it is set to 2 AM.
        DataUpdateWaitSeconds30 (seconds)Specifies the time-out that determines how long a job will wait in a running state for another adapter that is making schema changes to finish, or for the analysis processing job that changes the cube schema to finish. This time-out is used by jobs to acquire shared access to the warehouse resources during the data change stage. If the time-out expires before the schema change process finishes, the job quits and restarts later.
        FullProcessIntervalSeconds86400 (seconds)Specifies the frequency at which the cube is fully processed. The default value corresponds to 24 hours.
        IncrementalProcessIntervalSeconds7200 (seconds)Specifies the frequency at which the cube is incrementally updated. The default value corresponds to two hours.
        MaxParallelASProcessingCommands0Indicates the maximum number of commands that can run in parallel when Team Foundation processes calls to SQL Server Analysis Services. If set to 0, the instance of SQL Server determines the optimal number based on the number of processors that are available on the computer.
        RunIntervalSeconds120 (seconds)Specifies the frequency at which the relational database is updated.
        SchemaUpdateWaitSeconds120 (seconds)Specifies the time-out that determines how long a job will wait in a running state to acquire exclusive access to the schema change method. If the time-out expires before the schema change finishes, the job quits and restarts later.
        WarehouseCommandSqlTimeout3600 (seconds)Specifies the time-out that determines how long a job will wait to acquire an exclusive access to a data warehouse resource.
        + +##Related content + +- [Manage reports data warehouse cube](manage-reports-data-warehouse-cube.md) +- [Manually process the TFS data warehouse and analysis services cube](manually-process-data-warehouse-and-cube.md) \ No newline at end of file diff --git a/docs/report/admin/grant-permissions-to-reports.md b/docs/report/admin/grant-permissions-to-reports.md new file mode 100644 index 00000000000..b31ea8da6c2 --- /dev/null +++ b/docs/report/admin/grant-permissions-to-reports.md @@ -0,0 +1,100 @@ +--- +title: Grant permissions to view or create reports | TFS +description: Grant permissions to view or create reports in TFS +ms.assetid: FBE3ECC1-51A0-43EC-9923-B7C4FC78E333 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +ms.topic: get-started-article +--- + +# Grant permissions to view or create SQL Server reports in TFS + +TFS 2017 | TFS 2015 | TFS 2013 + + +>[!IMPORTANT] +>**Feature availability**: You can only add a report server to an on-premises TFS. If you're using VSTS, adding a report server isn't a supported option, instead, you can use [PowerBI](../powerbi/overview.md). + +This is the third task in the four-task sequence to add reports to your team project. You can use the procedures in this topic to set permissions to view or author reports. + +[![Add a report server](_img/step-1-add-a-report-server.png)](add-a-report-server.md) +[![Upload reports](_img/step-2-upload-reports.png)](upload-reports.md) +[![Grant permissions](_img/step-3-grant-permissions.png)](grant-permissions-to-reports.md) +[![Review team activities](_img/step-4-review-team-activities.png)](review-team-activities-for-useful-reports.md) + + +Now that you've uploaded reports, you'll want to enable members of your team to view or manage them. Also, to create or modify reports, you'll need to grant them access to read databases. + +##Add accounts to predefined roles to view or manage reports +Add report viewers to the **Browser** role. Add TFS report authors to the **Team Foundation Content Manager** role. + +> [!TIP] +> Permissions to access Report Manager are managed separately from TFS permissions. Even if you have added team members to a TFS group, you will still have to add them to a Report Manager role. + +1. If you haven't been added to the **Content Manager** role for Reporting Services, get added by someone who has been added to this role. + +2. From the Report Manager home page, open **Folder Settings**. + + ![Add users to an SSRS Report Manager role](_img/IC665038.png) + + The URL is *http://ReportServer/Reports/Pages/Folder.aspx*, or if using a named instance, *http://ReportServer/Reports_InstanceName/Pages/Folder.aspx*. + +3. Open **New Role Assignment**. + + ![Open SSRS new role assignment](_img/IC665039.png) + + > [!TIP] + > To limit access to reports defined for a team project or team project collection, first navigate to the corresponding folder and then open New Role Assignment. + + +4. Add the account name and select their role. + ![Assign user to a role in Report Manager](_img/IC665040.png) + +##Add report authors to database roles +If members need to create or customize reports, add their accounts to the **TfsWarehouseDataReader** role. Report authors need read access to both the relational data warehouse and Analysis Services cube. Team members who create Excel reports from work item queries or by connecting to the cube need only read access to the cube. + +1. If you aren't an administrator for the TFS database, [get added as one](../../tfs-server/add-administrator-tfs.md). + +2. Connect to the **Database Engine** for TFS using **SQL Server Management Studio**. + + ![Connect to database engine](_img/IC665041.png) + +3. Open the properties page for the **TfsWarehouseDataReader** role under the **Databases/Tfs_Warehouse/Security/Roles/Database Roles** folder. + + ![Open Tfs_Warehouse data reader role properties](_img/IC665042.png) + +4. Add the account. + + ![Add member to Tfs_Analysis data reader role](_img/IC665043.png) + +5. Next, connect to the **Analysis Services** database. + + ![Connect to Analysis Services database](_img/IC665044.png) + +6. Open the properties page for the **TfsWarehouseDataReader** role under the **Databases/Tfs_Analysis/Roles** folder. + + ![Open Tfs_Analysis data reader role properties](_img/IC665045.png) + +7. Add the account. + + ![Add member to Tfs_Analysis data reader role](_img/IC665046.png) + +> [!IMPORTANT] +> Accounts that you add to the **TfsWarehouseDataReader** roles can view data for all team projects that are hosted in all team project collections in the TFS deployment. There is no way to limit access to a team project or collection.   + + +##Try this next + +- [Review team activities to support useful reports](review-team-activities-for-useful-reports.md). + + +##Related notes + +- [Create Excel reports from a work item query](../excel/create-status-and-trend-excel-reports.md) + + + + diff --git a/docs/report/admin/locate-reports-after-upgrade.md b/docs/report/admin/locate-reports-after-upgrade.md new file mode 100644 index 00000000000..d8fa17cfc5f --- /dev/null +++ b/docs/report/admin/locate-reports-after-upgrade.md @@ -0,0 +1,157 @@ +--- +title: Locate Reporting Services reports after upgrade +titleSuffix: TFS 2013 +description: Locate reports in SQL Server Reporting Services after upgrading to TFS 2010. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 09/07/2017 +--- +# Locate reports after the upgrade to TFS 2010 + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Upgrading your Team Foundation deployment to Visual Studio Team Foundation Server 2010 introduces several changes that affect the location and operations of reports that are accessed through SQL Server Reporting Services. Specifically, you will have access to both pre-existing or pre-upgrade reports, and new or post-upgrade reports that are based on the data warehouse schema for Team Foundation Server 2010. + +The following are the immediate effects that you will notice: +- If your upgraded team project was based on version 4.2 of a Microsoft Solutions Framework (MSF) process template, you have access to a set of post-upgrade reports. These reports can be accessed from the ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** node in Team Explorer or from the **Reports** link in the web portal. +- You cannot access pre-upgrade reports from the ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** node in Team Explorer or from the web portal. You can still access pre-existing reports from a Web browser. +- Data that has been added since the upgrade does not appear in pre-existing reports. All new data flows into the new data warehouse that was created during the upgrade. All pre-existing data is maintained in a data warehouse that is based on the earlier schemas. + +To view a pre-upgrade report, you may have to modify it to address changes that were introduced by SQL Server 2008. To use a pre-upgrade report to support reporting on your upgraded team project, you must modify each report to connect to the new data warehouse and address the schema changes that were introduced by Team Foundation Server 2010. + +Two sets of data warehouse resources + + +Two sets of reports and two locations  + + + +The following table lists the names that are automatically assigned to the Reporting Services data resources that are used by reports. + +| Database resource|Name assigned to resources based on earlier versions of Team Foundation Server|Name assigned to resources for Team Foundation Server 2010| +|-----------|------------------|----------------| +|Data warehouse relational database| TfsReportsDS | Tfs2010ReportsDS| +|Analysis Services cube| TfsOlapReportsDS |Tfs2010OlapReportsDS | + + + +The 2010-based names support the upgrade of a server where you have an existing set of reports that were designed to work with schemas that were designed for Visual Studio 2005 Team Foundation Server or Team System 2008 Team Foundation Server. An upgrade to Team Foundation Server 2010 creates a new warehouse and cube that use a different schema that is incompatible with the previous data warehouses. The new data sources point to the new warehouse and cube and leave the previous data sources intact. + +You can continue to view pre-upgrade reports. However, no new data will be added to the pre-upgrade data warehouse and cube. The use of new data source names allows the pre-upgrade reports (which use the old data sources) to continue to render pre-upgrade data. + + +## Team project collections and report hierarchy + +With the introduction of team project collections and report folders, reports are now organized on the server that hosts Reporting Services in a hierarchy that resembles the following: + +**TfsReports > Project Collection > Team Project > Report Folder > Report** + +The following illustration shows this structure for the project that is named Dev10Demo. + +![SQL Server Reporting Services](_img/locate-reports-reporting-services.png) + + +## View post-upgrade reports + +To view post-upgrade reports + +0. Open Internet Explorer, type the following string in the Address bar, and press ENTER: + + `http://ReportServerName/TFSReports/ProjectCollectionName/ProjectName/` + + If you have deployed a named instance on the data-tier server, type the following string instead: + + `http://ReportServerName/TFSReports_TFSInstance/ProjectCollectionName/ProjectName/` + +0. Click the folder that contains the report that you want to view. + +0. Click the report that you want to view. + +## View pre-upgrade reports + +To view pre-upgrade reports + +0. Open Internet Explorer, type the following string in the Address bar, and then press ENTER: + + `http://ReportServerName/Reports/ProjectName/` + + If you have deployed a named instance on the data-tier server, type the following string instead: + + `http://ReportServerName/Reports_TFSInstance/ProjectName/` + +0. Click the report that you want to view. + + + + + + + + + + + The ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports** page in Team Explorer provides a tree view of the reports defined for your team project. To open a report, choose it and press Enter. + +> [!NOTE] +> The ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** option appears only when the team project collection that contains your team project is provisioned with Reporting Services. For more information, see [Add a Report Server to a Team Project Collection](../admin/add-reports-to-a-team-project.md). + + The ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports** page for your team project shows the reports and organizes them under a set of folders. The default set of reports are based on the process template that was used to create the team project. You can manage these reports using Report Manager. For more information, see [Report Server Content (Native Mode)](http://go.microsoft.com/fwlink/?LinkId=263963). + + The reports that TFS provides with the default process templates provide a view of the current state of your project by aggregating and summarizing the metrics from such things as work items, version control, test results, and builds. You can use the default reports, or you can customize each report to fit your specific needs. + + Most of these reports provide filters that you can use to specify contents to include in the report. Filters include time period, iteration and area paths, work item types, and work item states. The questions that they answer relate to all types of work items such as user stories, test cases, tasks, and bugs. For more information about the purpose, layout, or use of each report, see [Reporting Services Reports](../sql-reports/reporting-services-reports.md). + + Team project reports are stored in Reporting Services, and you can access them through Team Explorer or Report Manager. As the number of reports listed on the **Reports** page increases, you may want to create subfolders for grouping or organizing the reports. + + You use Report Manager to manage reports and report folders. To access the team report site from Team Web Access, on the Home page, click ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports**. + + **Requirements** + +- To open a report from Team Explorer, your **View project-level information** permission on the team project must be set to **Allow**. You must also be a member of the SQL Server Reporting Services **Browser** role. + +- To manage reports from Report Manager, you must be a member of the SQL Server Reporting Services **Team Foundation Content Manager** role. For more information, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + + > [!NOTE] + > If you are running Windows Server 2008 or Windows Vista, you might have trouble opening Web pages or sites from Team Explorer. For example, you might not be able to open the project portal by right-clicking a team project in Team Explorer and then clicking **Show Project Portal**. For more information about access issues that may occur with Windows Server 2008 or Windows Vista, see the following page on the Microsoft Web site: [User Account Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +##
        + +#### To view a report from Team Explorer + +1. From the ![Home icon](_img/alm_te_home_icon.png "ALM_TE_Home_Icon") home page in Team Explorer, choose ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports**. + +> [!NOTE] +> If a red X icon appears next to ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports**, you might not have permissions to access the reports, or Team Explorer might have lost communication with the server that hosts Reporting Services. In these instances, check with your project administrator to make sure that you have permissions to access the reports and that the server that hosts Reporting Services is running. + + Also, a red X icon might appear next to **Reports** if both of the following conditions are true: + +- Team Explorer is running on the same computer as Reporting Services. + +- You are not logged on as an administrator, or enhanced security is enabled for Internet Explorer. + + To correct this issue, log onto your computer as an administrator, or open Internet Explorer, open Internet Options, choose the **Security** tab, and clear the **Enabled Protected Mode** check box. + +1. Choose the report and then press Enter. + + A web browser window opens and shows the report. + +2. At the top of the report, specify your filter parameters, and then choose **View Report**. + +#### To view a report from Report Manager + +1. From the ![Home icon](_img/alm_te_home_icon.png "ALM_TE_Home_Icon") home page in Team Explorer, choose ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports**, and then choose the **Go to site** link. + + Or, choose **Team, Show Report Site** from the Visual Studio toolbar. + +2. In **Report Manager**, choose the folder that contains the report you want to view. + +3. Choose the report that you want to open. + +4. At the top of the report, specify your filter parameters, and then choose **View Report**. + +## Related notes +- [Reporting Services Reports](../sql-reports/reporting-services-reports.md) +- [Create and manage Reporting Services reports](../sql-reports/create-and-manage-reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/admin/manage-reports-data-warehouse-cube.md b/docs/report/admin/manage-reports-data-warehouse-cube.md new file mode 100644 index 00000000000..86989bbfbc1 --- /dev/null +++ b/docs/report/admin/manage-reports-data-warehouse-cube.md @@ -0,0 +1,81 @@ +--- +title: Manage data warehouse and analysis services cube | TFS +description: Manage SQL Server Reporting Services reports, data warehouse, and analysis services cube when connecting to an on-premises Team Foundation Server (TFS) +ms.assetid: 3D57E047-4922-4B4B-8736-A68B2895E846 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +#Manage the data warehouse and analysis services cube + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +If you added SQL Server Reporting Services at installation, then your on-premises Team Foundation Server (TFS) deployment is configured with a data warehouse and SQL Server Analysis Services cube. If you didn't add these services previously and want to add them now, see [Add reports to a team project](add-reports-to-a-team-project.md). + +The reporting warehouse is a traditional data warehouse that consists of a relational database and an Analysis Services database. + +![Data Warehouse Architecture](_img/IC777266.png) + +All reportable data from all team projects that are defined in all project collections for a TFS deployment is written to a single relational database (Tfs_Warehouse). Data from that warehouse is then processed and written to the Analysis Services cube (Tfs_Analysis). Collecting data into a single data warehouse supports reporting across team projects and project collections. To learn more, see [Components of the TFS data warehouse](https://msdn.microsoft.com/library/ms244687.aspx). + +With SQL Server Reporting Services, you gain access to many default Excel and SQL Server Reporting Services reports. These reports aggregate metrics from work items, version control, test results, and builds. See [Dashboards and reports](../overview.md). + +Without these services, you can [create status and trend charts from work item queries](../charts.md) directly from the operational data stores. + +##View, add, update, or customize reports or report functionality +You use work item fields to track data for a work item type, to define the filter criteria for queries, and to design reports. To support reporting, you can add fields or change the attributes of existing fields. When you add or modify fields, you will want to apply systematic naming conventions to make sure that data is logically grouped into folders in the cube. To learn more, see [Add or modify work item fields to support reporting](../../work/reference/add-or-modify-work-item-fields-to-support-reporting.md). + +To bulk add or update reports for a team project, see [Upload reports to a team project](upload-reports.md). To manage Reporting Services Reports, see [Reporting Services Reports (SSRS)](https://msdn.microsoft.com/library/bb522712.aspx) . + +Depending on the process template that you use to create your team project, you may have several reports already defined. You can customize these reports additionally or create new reports. These reports may contain new data fields that you added to work item types. See [Create, customize, and manage reports for Visual Studio devops](../overview.md). + +##Manage permissions to view and create reports +To create reports that access data in the cube, you must add team members to the **TFSWarehouseDataReader** role. To view or refresh data within a report, you must add team members to one or more of the Report Server roles. See [Grant permissions to view or create reports in TFS](grant-permissions-to-reports.md). + +A user who has permission to view the data in the warehouse can view data for all team projects that are hosted in all team project collections in the TFS deployment. There is no way to limit access to a team project or collection. + + +### Refresh rate of data warehouse and cube + + The WIT data store is updated in real-time as team members create and modify work items. All reportable data from all team projects that are defined in all project collections are written to a single relational data warehouse which is incrementally updated every two minutes. Data from that warehouse is then processed and written to the OLAP cube, which is updated every two hours. To learn more about process control settings, see [Change a process control setting for the data warehouse or Analysis Services cube](change-a-process-control-setting.md). + +### Resolving schema conflicts and managing the data warehouse + +Schema conflicts occur when a set of attributes for reportable fields differs across team project collections. Schema conflicts might block processing of the data warehouse and the Analysis Services cube. You must correct conflicts to unblock processing of the warehouse and for reports to work correctly. See [Resolve schema conflicts that are occurring in the data warehouse](resolve-schema-conflicts.md). + +. + + +##Manage and troubleshoot the data warehouse and analysis services cube +You can manage the warehouse and analysis services cube to address the following scenarios: + +* **Correct errors that block processing of the data warehouse**. Schema conflicts occur when a set of attributes for reportable fields differs across team project collections. Schema conflicts block updated data from being moved into the warehouse and the cube. You must correct all schema conflicts to unblock processing and to update reports with current data. + + See [Resolve schema conflicts that are occurring in the data warehouse](resolve-schema-conflicts.md). + + +* **Update the data warehouse or cube on demand**. Resolve a problem with reports that are not up to date or contain missing data. To resolve a problem with reports that do not update or contain missing data, you may have to process the data warehouse manually. Also, you can troubleshoot errors that appear in the event viewer for an application-tier server that are related to warehouse processing jobs. + + See [Manually process the TFS data warehouse and analysis services cube](manually-process-data-warehouse-and-cube.md). + + +* **Re-create the schemas, and rebuild the data warehouse databases**. Rebuild the warehouse and cube after you move, restore, rename, or fail over the data-tier server for Team Foundation. To access high-level reports, you must rebuild the data warehouse whenever you move, restore, rename, or fail over the data-tier server. + + See [Rebuild the TFS data warehouse and cube](rebuild-data-warehouse-and-cube.md). + + +* **Modify the refresh frequency of the data warehouse or cube**. Change the refresh frequency or other process control setting for the warehouse or cube. The default properties for the warehouse are set when TFS is installed, but you can later change the default values to respond to changing requirements. Two properties that you might want to change are the frequency with which the data is updated in the data warehouse and the security settings that control user access to the data warehouse. + + See [Change a process control setting for the data warehouse or Analysis Services cube](change-a-process-control-setting.md). + +##Related content + +- [Reportable fields reference](../../work/reference/reportable-fields-reference.md) provides definitions for eacha reportable field. A default set of fields appears in the relational warehouse database or the cube. These fields have a reportable attribute value of Detail, Dimension, or Measure. +[Understanding SQL Server and SQL Server Reporting Services](../../tfs-server/architecture/sql-server-databases.md) describes the relationships and dependencies between SQL Server and TFS. + +- [Manage team project collections](../../tfs-server/admin/manage-team-project-collections.md) describes how you can enable and disable data that flows into the data warehouse by editing the reporting configuration for your team project collections. After you add a report server to your deployment, you can configure reporting resources for your team project collections and the projects in those collections. + +- [Data Warehouse extensibility](https://msdn.microsoft.com/library/bb130342.aspx) describes how you can add new data types to the data warehouse by implementing a warehouse adaptor. diff --git a/docs/report/admin/manually-process-data-warehouse-and-cube.md b/docs/report/admin/manually-process-data-warehouse-and-cube.md new file mode 100644 index 00000000000..b6e8bcd088c --- /dev/null +++ b/docs/report/admin/manually-process-data-warehouse-and-cube.md @@ -0,0 +1,135 @@ +--- +title: Manually process the data warehouse and analysis services cube | TFS +description: Manually process the TFS data warehouse and analysis services cube when connecting to an on-premises Team Foundation Server (TFS) +ms.assetid: 81EDA53E-88A5-46E2-952B-2D6E1FBA33E2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# Manually process the TFS data warehouse and analysis services cube + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +When you need the freshest data in your reports, when errors have occurred, or after you've resolved schema conflicts, you can manually process the Team Foundation Server (TFS) relational database (Tfs\_Warehouse) or SQL Server Analysis Services cube (Tfs\_Analysis). + +During typical operations, the warehouse is processed within two minutes of changes made to an operational store, and the cube is processed every two hours. By manually processing the warehouse, you help ensure that queries and reports are up-to-date with data that depends on the warehouse. + +You use the Warehouse Control Web Service to process the warehouse or cube or perform other maintenance operations. If you know that you want to perform a full rebuild of both databases, then use the [Administration console](rebuild-data-warehouse-and-cube.md) or the [TFSConfig RebuildWarehouse command](https://msdn.microsoft.com/library/ee349264.aspx). + + ![Warehouse Control Web Services page](_img/web-services.png) + +> [!NOTE] +> Do not use SQL Server Management Studio (SSMS) to manually process the cube. Processing the cube using that tool is not supported. + + +## Process the warehouse or cube + +Processing the warehouse or cube depends on how much data is involved; it can take minutes or hours. Before you process either database, determine the processing status for the synchronization job or jobs that you want to run. Make sure that the status returns **Idle** + +### To access the web services + +1. If you aren't a member of the **Administrators** security group on the application-tier server for TFS, [get added now](../../tfs-server/add-administrator-tfs.md). + + Also, make sure that your server-level **Administer warehouse** permission must be set to **Allow**. + +2. Log on to the application-tier server and open the Warehouse Control Web Service by entering the following URL in a supported web browser: + + ```http://localhost:8080/tfs/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx ``` + + If another name was used other than **tfs** for the virtual directory, then type the *IIS Virtual Directory* that was specified when Team Foundation Server was installed. + +3. The **WarehouseControlWebService** page opens. + + If the page doesn't open, verify that the TFS Application Pool is running. + +### To check the process status + +Choose **GetProcessingStatus**. + +![Get processing status](_img/IC714222.png) + +A new browser window opens. It indicates the following job's processing status: + +* **Common Structures Warehouse Sync** +* **Full Analysis Database Sync** +* **Incremental Analysis Database Sync** + +And, the status for the following jobs for each team project collection are provided: + +* **Build Warehouse Sync** +* **Common Structures Warehouse Sync** +* **Test Management Warehouse Sync** +* **Version Control Warehouse Sync** +* **Work Item Tracking Warehouse Sync** + +A value of **Idle** indicates that the synchronization job is currently not running. You should process the data warehouse or the cube only when the processing status for these jobs is **Idle**. If a different value is returned, repeat this step until **Idle** is returned for the job that you want to process. + +### To process the data warehouse + +1. Choose **ProcessWarehouse**, and optionally specify the team project collection to process. If you leave **collectionName** blank, all collections are processed. + + The service returns **True** when it successfully starts the processing of the warehouse and **False** if it is not successful. A value of **False** indicates that the warehouse is currently being processed. + +2. To determine the processing status of the warehouse choose **GetProcessingStatus** as described earlier in to [check the process status](#to-check-the-process-status). + + Warehouse processing is completed when the **GetProcessingStatus** service returns a value of **Idle**, and a value of **Succeeded** for **Common Structures Warehouse Sync** and for each warehouse for each team project collection. + +### To process the Analysis Services cube + +1. Choose **ProcessAnalysisDatabase**. + +2. For **processingType**, type either **Incremental** or **Full**. + + If you specify **Incremental**, data is processed only if it has been added since the most recent processing. + + If you specify **Full**, all data is processed as if the warehouse were being rebuilt. Full processes take longer to perform and should be performed only when required (for example, when a team project or project collection has been removed or deleted). + + The service returns **True** when it successfully starts the processing of the cube and **False** if it is not successful. A value of **False** indicates that the cube is currently being processed. + +3. To determine the processing status of the warehouse choose **GetProcessingStatus** as described earlier in [to check the process status](#to-check-the-process-status). + + Cube processing is completed when the **GetProcessingStatus** service returns a value of **Idle**, and a value of **Succeeded** for the following jobs. + + * **Full Analysis Database Sync** + * **Incremental Analysis Database Sync** + +## Process dimensions for expanded capacity + +You should run the **ProcessDimensionsForExpandedCapacity** web service when you receive the following error message: + +``` +Microsoft.TeamFoundation.Warehouse.WarehouseException: TF221122: An error occurred running job Full Analysis Database Sync for team project collection or Team Foundation server TEAM FOUNDATION. + +Microsoft.TeamFoundation.Warehouse.WarehouseException: Failed to Process Analysis Database 'Tfs_Analysis'. + +You should run the ProcessDimensionsForExpandedCapacity web service when you receive the following error message: +Microsoft.TeamFoundation.Warehouse.WarehouseException: TF221122: An error occurred running job Full Analysis Database Sync for team project collection or Team Foundation server TEAM FOUNDATION. +Microsoft.TeamFoundation.Warehouse.WarehouseException: Failed to Process Analysis Database 'Tfs_Analysis'. +Microsoft.TeamFoundation.Warehouse.WarehouseException: File system error: A string store or binary store with a compatibility level of '1050' is at the maximum file size of 4 gigabytes. To store additional strings, you can change the StringStoresCompatibilityLevel property of the associated dimension or distinct count measure to '1100' and reprocess. This option is only available on databases with a compatibility level of '1100' or higher. +Physical file: \\?\I:\OLAP\Data\Tfs_Analysis.0.db\vDimWorkItemOverlay.5.dim\7.WorkItemSK.asstore. + +``` + +This service changes the StringStoresCompatibilityLevel to 1100 for the **Version Control** File dimension and performs a full cube reprocess. + +1. From the Warehouse Control Web Service, choose **ProcessDimensionsForExpandedCapacity**. + +2. Enter the name of the dimension. From the above error message, the dimension name is ```vDimWorkItemOverlay```. + +3. The service returns **True** when it successfully resets the value to 1100. + + Wait until the cube processing has succeeded. + +## Related notes +You should process a database manually for one of the following reasons: + +* Incrementally process the cube when reports don't show the latest data and you need them up-to-date for an upcoming meeting. +* Process each team project collection within the data warehouse to verify resolution of all [schema conflicts](resolve-schema-conflicts.md). +* Process each team project collection within the data warehouse to collect information to diagnose issues appearing in the event viewer related to warehouse jobs. + +Perform a [full rebuild of the warehouse and cube](rebuild-data-warehouse-and-cube.md) when you move, restore, rename, or fail over the TFS data-tier server. + +As needed, [change the refresh processing interval or other processing parameters](change-a-process-control-setting.md). diff --git a/docs/report/admin/rebuild-data-warehouse-and-cube.md b/docs/report/admin/rebuild-data-warehouse-and-cube.md new file mode 100644 index 00000000000..9427a4e4097 --- /dev/null +++ b/docs/report/admin/rebuild-data-warehouse-and-cube.md @@ -0,0 +1,189 @@ +--- +title: Rebuild the data warehouse and cube | TFS +description: Rebuild the data warehouse and cube when connecting to an on-premises Team Foundation Server (TFS) +ms.assetid: 23CD5F6B-468D-47B5-8A03-96547B526C2D +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +# Rebuild the data warehouse and cube + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Whenever you move, restore, rename, or fail over the data-tier server for Team Foundation Server (TFS), you must rebuild the data warehouse and cube to access high-level reports. Also, if you move, attach, detach, or delete a team project collection, you must rebuild the warehouse and cube. + +The data warehouse aggregates all operational data, such as version control, work item tracking, build, and test. The warehouse corresponds to the relational database, Tfs_Warehouse, and the cube corresponds to Tfs_Analysis, the SQL Server Analysis Services database. + +You should not have to rebuild the data warehouse during normal operations. If you want to refresh the data warehouse data, you can manually process the warehouse and cube on demand. See [Manually process the TFS data warehouse and analysis services cube](manually-process-data-warehouse-and-cube.md). Depending on the amount of data in the data warehouse, the rebuild operation can take several hours to finish, during which time reports are not available. + +To rebuild the TFS data warehouse, perform this sequence of steps: + +1. [Verify that services and application pools are running and that TCP/IP is enabled for SQL Server](#verify-services) +2. [Rebuild the data warehouse](#create-datawarehouse) +3. [Verify that reports can be accessed](#verify-reports) + +**Requirements** + +You must be a member of these security groups or have the corresponding permissions: + +* **sysadmin** security group on the server or servers that are running the instance of SQL Server that hosts the databases for Team Foundation Server + +* **sysadmin** security group on the server for the Analysis Services database for Team Foundation + +* Tfs_Warehouse relational database and **TFSEXECROLE** database role + +* **Team Foundation Administrators** security group and the **Administrators** security group on the server or servers that are running the administration console for Team Foundation + +* Your server-level **Administer warehouse** permission must be set to **Allow** + +* Your **View project-level information** permission on the team project must be set to **Allow** to run and view a report. Also, you must be a member of the **Browser** role in SQL Server Reporting Services + +For more information, see [Add accounts to administer TFS](../../tfs-server/add-administrator-tfs.md). + +In addition to these permissions, you might need to address these requirements on a computer that is running Windows Server 2008 or Windows Vista: + +* To follow a command-line procedure, you might need to open an elevated Command Prompt by choosing **Start**, opening the context menu for **Command Prompt**, and choosing **Run as Administrator**. + +* To follow a procedure that requires Internet Explorer, you might need to start it as an administrator by choosing **Start**, **All Programs**, opening the context menu for **Internet Explorer**, and then choosing **Run as administrator**. + +* To access Report Manager, reports, or websites for Reporting Services, you might need to add these sites to the list of trusted sites in Internet Explorer or start Internet Explorer as an administrator. + +For more information, see [User Account Control](https://msdn.microsoft.com/library/cc772207.aspx). + +With the rebuild operation, you re-create both the relational database and the cube. TFS rebuilds the relational database from the operational data stores. It then re-creates the SQL Server Analysis Services cube and processes the cube to populate it by using data from the relational database. If you want to rebuild just the cube, you can use the **TFSConfig RebuildWarehouse** command-line tool. See [RebuildWarehouse Command](https://msdn.microsoft.com/library/ee349264.aspx). + + + +##1. Verify that services and application pools are running and that TCP/IP is enabled for SQL Server +To complete the steps in this procedure, the services that SQL Server requires must be running. You stop Reporting Services so that users do not access reports while you are rebuilding the data warehouse. Also, for a dual-server deployment, the TCP/IP protocol must be enabled for each instance of a SQL Server database. + +By default, TCP/IP is disabled when you install SQL Server. + +1. Log on to the appropriate server, open Computer Manager, and then verify that the services and application pools in the following table are running: + + + + + + + + + + + + + + + + + + +
        Log on to the server that hosts this programComponent
        SQL Server Analysis Services- SQL Server Analysis Services (MSSQLSERVER or TFSInstance)
        Team Foundation databases- SQL Server (MSSQLSERVER or TFSInstance)
        + - SQL Server Agent (MSSQLSERVER or TFSInstance) +
        Application tier- TFS Application Pool
        + + For more information, see [Stop and start services, application pools, and websites](../../tfs-server/admin/stop-start-stuff.md). + +2. Log on to the server that hosts Reporting Services, and stop the SQL Server Reporting Services (*TFSINSTANCE*) service. + +3. Make sure that TCP/IP has been enabled for SQL Server on the data-tier server. For more information, see [Enable the TCP/IP Protocol for a Database Instance](https://msdn.microsoft.com/library/bb909712.aspx). + + + + +##2. Rebuild the data warehouse and restart services + +1. [Open the Team Foundation administration console](../../tfs-server/admin/config-tfs-resources.md). + +2. Under **Application Tier>Reporting**, choose **Start Rebuild**. + + The **Take Offline** dialog box opens. + +3. Choose **OK** to take the data warehouse and Analysis Services cube offline. + + The **Rebuild the Warehouse and Analysis Services Databases** dialog box opens. + +4. Choose **OK** to initiate the rebuild process. + + When you rebuild the warehouse or cube, TFS performs this sequence of actions: + + * Takes the databases offline. + * Drops the schema for both databases. + * Re-creates the schema for both databases. + * Brings both databases back online. + * Restarts the warehouse adapter jobs. + * Processes the cube according to its regular processing interval. + + The rebuild process starts first for the warehouse and then for the cube. The time that is required to rebuild the databases is based on the amount of data that is stored in the data warehouse. When the databases have been rebuilt, the jobs for processing the databases are automatically started. + + > [!NOTE] + > While the warehouse and the cube are being rebuilt, the administration console for Team Foundation may stop responding. You might need to refresh the administration console after the warehouse and the cube have been rebuilt. + +5. (Optional) To check the status of the rebuild process, you can use the Warehouse Control Web service. For more information, see [Manually process the TFS data warehouse and analysis services cube](manually-process-data-warehouse-and-cube.md). + +6. Log on to the server that hosts Reporting Services, open Computer Manager, and then start the SQL Server Reporting Services (*TFSINSTANCE*) service. + + + +##3. Verify that reports can be accessed + +1. Log on to the server that hosts Reporting Services, open Internet Explorer, type the following string in the Address bar, and then press ENTER: + + ```http://localhost/Reports ``` + + > [!TIP] + > You may need to start Internet Explorer as an administrator by choosing **Start**, **All Programs**, open the context menu of Internet Explorer, and then choosing **Run as administrator**. + + If you have deployed a named instance on the data-tier server, type this string instead: + + ```http://localhost/Reports_***TFSInstance* ``` + +2. In Contents, choose TFSReports, choose the folder of the team project collection that stores your team project, choose the folder that corresponds to your team project, and then choose the folder that contains a report that you want to view. + +3. Choose the folder that contains a report that you want to view. + +4. Choose a report, and verify that the report appears correctly. + +5. Check the date when the report was last updated. This information appears in the lower-left corner of the report. + +##Q & A + + +####Q: How do I resolve schema conflicts? +**A:** If you encounter schema conflicts, you cannot resolve this by rebuilding the data warehouse. Instead, you must resolve the conflicts first and then rebuild the data warehouse. See [Resolve schema conflicts that are occurring in the data warehouse](resolve-schema-conflicts.md). + +####Q: How can I resolve failure errors that occur when rebuilding or processing the data warehouse? +**A:** The following actions can cause failure errors to occur. + +* You manually modified a TFS database or edited a SQL table. You should not manually modify any of the TFS databases unless you're either instructed to do so by Microsoft Support or when you're following the procedures described for manually backing up the databases ([Manually back up Team Foundation Server](../../tfs-server/admin/backup/manually-backup-tfs.md)). Any other modifications can invalidate your service agreement, block upgrades and patches, and result in data loss or corruption. + +* A detach/attach operation resulted in a misconfiguration of a team project collection. For example, a collection has become attached to two different data-tier servers, which is an unsupported scenario. Correcting the configuration and then rebuilding the data warehouse should resolve the errors. + +* You've performed an unsupported backup or restore operation as described in [Back up and restore TFS](../../tfs-server/admin/backup/back-up-restore-tfs.md). + +####Q: How do I modify the reporting configuration? +**A:** To modify the reporting configuration for team project collections, use the **Edit** function that is provided on the Reporting page of the administration console for Team Foundation. + +![Edit the information to configure reporting](_img/IC665021.png) + +####Q: What happens to data that has been purged or destroyed before a rebuild? +**A:** Data associated with builds or work items that have been permanently deleted from the database will be permanently removed from the data warehouse when you rebuild it. + +Also, data in the warehouse or cube that originates from third-party sources might also be lost. Even though most third-party tools are capable of republishing data, that capability depends on the individual vendor. Contact your vendor to determine what (if any) data might be lost. + +For details of what data doesn't get deleted from the database when you delete builds, see [this blog post](http://blogs.msdn.com/b/adamroot/archive/2009/06/12/working-with-deleted-build-data-in-team-foundation-server-2010-beta-1.aspx). + +Deleting builds doesn't remove all associated data from the database. To do that, you must destroy the builds. You use the **TFSBuild destroy** [command to destroy builds](https://msdn.microsoft.com/library/ee794689.aspx) and to save space in the data warehouse. + + + + +##Related content + +- [RebuildWarehouse Command](https://msdn.microsoft.com/library/ee349264.aspx) +- [Components of the TFS data warehouse](https://msdn.microsoft.com/library/ms244687.aspx) +- [Manage TFS reports, data warehouse, and analysis services cube](manage-reports-data-warehouse-cube.md) +- [Add reports to a team project](add-reports-to-a-team-project.md). \ No newline at end of file diff --git a/docs/report/admin/resolve-schema-conflicts.md b/docs/report/admin/resolve-schema-conflicts.md new file mode 100644 index 00000000000..610e4337fdf --- /dev/null +++ b/docs/report/admin/resolve-schema-conflicts.md @@ -0,0 +1,148 @@ +--- +title: Resolve data warehouses schema conflicts | TFS +description: Resolve schema conflicts that are occurring in the data warehouse when connecting to an on-premises Team Foundation Server (TFS) +ms.assetid: BB517672-2A9A-4A5B-8F27-E4409F199C02 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +#Resolve data warehouse schema conflicts + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Schema conflicts occur when a set of attributes for reportable fields differs across team project collections. When a schema conflict occurs, fields that are not in conflict are processed as usual but fields that are in conflict are assigned null values until you resolve the conflicts and then process as usual. In addition, the system generates a notification event for each conflict that it detects. By subscribing to the event, you can receive alerts when schema conflicts occur for any team projects that are defined for a collection. You must correct all schema conflicts to unblock the processing of the associated data for the warehouse and to enable the associated reports to display current data. + +All reportable data from all team projects that are defined in all project collections for a deployment of Visual Studio Team Foundation Server is written to a single relational data warehouse. Data from that warehouse is then processed and written to the cube. Collecting data into a single data warehouse supports reporting across team project collections. However, because fields are managed distinctly for each project collection, schema conflicts can occur when different definitions are assigned to one or more attributes of a field that is assigned the same reporting reference name. + + +##Schema conflict error messages + +When a schema conflict occurs, an error message will appear in the following locations: + +* The event log for the application-tier server. + + > [!NOTE] + > TFS logs an error message to the event log each day until the data conflict is resolved. + +* A report that is provided with the MSF process templates and that you view through the Report Manager. + +* A dashboard that is provided with the MSF process templates and that you view through the project portal. + + > [!NOTE] + > You can determine when a report or dashboard was updated most recently if you find the **Date Last Updated** time stamp, which appears in the lower-right corner of each report and dashboard. The time stamp corresponds to the most recent time that every warehouse adapter job that is scheduled for completion, for every project collection, successfully completed processing. The time stamp calculation includes custom adapter jobs and ignores adapter jobs that are blocked from running the Warehouse Control Web service. + > + > If a schema conflict is blocking data from entering the data warehouse for a report, the time stamp for the report will not be updated. + +In addition to the previous messages, you can obtain more information by using the **GetProcessingStatus** operation of the Warehouse Control Web service. For more information, see Manually Process the Data Warehouse and Analysis Services Cube for Team Foundation Server. + +##Sources of schema conflicts + +Schema conflicts occur when a project administrator performs one of the following actions: + +* Adds a reportable field to a work item type in one project collection, and the attributes that are assigned to that field do not match those in other project collections. + +* Changes an attribute that is assigned to a work item field that is used in more than one project collection, even though those changes conflict with the assignments in other collections. + + > [!NOTE] + > A project administrator can avoid the errors in the previous list only by reviewing the attribute assignments for fields that are defined across multiple project collections in a deployment. + + Errors result when a field has either the same reference name or the same reporting reference name in multiple project collections and one or more of the following attributes for that field does not match in two or more collections: + + - **name**: The friendly name of the field, which appears as an option when you create a work item query. + + - **reportingname**: The name that appears in reports. If you do not specify a value, the value that is assigned to the **name** attribute is used. + + - **reportable/reportingtype**: Whether data from the field is available for inclusion in reports, and if so, the reportable type (for example, **None**, **Detail**, **Dimension**, or **Measure**). + + > [!NOTE] + > The **FIELD** element used the **reportable** attribute, and the **witadmin changefield** command uses the **reportingtype** attribute. These attributes define the same information.   + - **type**: The type of data that the field accepts (for example, **Integer**, **HTML**, **String**, **Double**, or **DateTime**). + + +The following table provides examples of attribute assignments that will cause schema conflicts. In these examples, the reporting reference name and the reporting name are not assigned. + + + + + + + + + + + + + + + + + + + + + + + + + + +
        AttributeProject Collection 1Project Collection 2Schema conflict
        TypeStringIntegerData types do not match.
        ReportingNameActivityCommon ActivityReporting names do not match.
        ReportableDetailDimensionReporting types do not match.
        + +## Resolve schema conflicts + +You can review the event log on the application-tier server to obtain more information about the field that is causing a schema conflict. After you determine the field or fields that are causing the conflict, you must follow these steps: + +1. Review the attributes that are assigned to the field in all project collections. You can use the **witadmin listfields** command, which has the following syntax: + + ``` + witadmin listfields /collection:CollectionURL /n:RefName ``` + + For more information, see [Manage work item fields](https://msdn.microsoft.com/library/dd236909.aspx). + +2. Determine in which of the following ways you want to resolve the conflict: + + * Change the attribute for the field in one project collection to match the assignments that are made in other project collections. You should take this action when teams use the field in the same ways in similar reports or for cross-project reporting. + + * Relabel the reporting reference name of the field in conflict. You should take this action when the fields are used in different ways or you must maintain a different field. In this case, the field is not used by teams that work in different project collections for cross-project reporting. + + For more information, see [Add or modify work item fields to support reporting](../../work/reference/add-or-modify-work-item-fields-to-support-reporting.md). + + * Mark a field as non-reportable for one or more collections. You should take this action when the field is not used for reports about those project collections. + + * Remove the field from the team project collection. You should take this action if the field is not used by any team projects or reports. + + > [!NOTE] + > If you remove a field that is used in a report, the report will no longer display correctly. + +3. Change the attribute that is assigned to a field, based on the decisions that you made in the previous step. Use the **witadmin changefield** command. + + ```witadmin changefield /collection:CollectionURL /n:RefName \[/name:NewName] \[/syncnamechanges:true | false] \[/reportingname:ReportingName] \[/reportingrefname:ReportingRefName] \[/reportingtype:Type] \[/reportingformula:Formula] \[/noprompt]``` + +4. To delete a field from a project collection, you can use the witadmin deletefield command, which has the following syntax: + + ```witadmin deletefield /collection:CollectionURL /n:RefName``` + + > [!IMPORTANT] + > If you delete a field permanently, you remove the field and all data that it stores from data storage.   + +##Verify resolution of schema conflicts + +You can verify that the schema conflicts have been resolved by [manually processing the data warehouse](manually-process-data-warehouse-and-cube.md) and then checking the reports to determine whether they are updated. Or you can wait until the warehouse adapter jobs run, according to their default schedule. By default, the relational database is processed every few minutes. However, the Analysis Services cube is processed every two hours by default. + +1. Process the relational data warehouse on demand by using the **ProcessWarehouse** operation of the **WarehouseControlService**. + +2. Process the cube on demand by using the **ProcessAnalysisDatabase** operation of the **WarehouseControlService**. + +3. Open a dashboard or Report Manager, and verify that the reports are being updated. For more information, see [Project portal dashboards](../sharepoint-dashboards/project-portal-dashboards.md) or [Reports (SQL Server Reporting Services)](../sql-reports/reporting-services-reports.md). + + If error messages continue to appear, you can obtain more information about the data conflict and the affected blocked adapters by running the **GetProcessingStatus** operation of the **WarehouseControlService**. + +## Related content + +- [Manage work item fields using **witadmin**](https://msdn.microsoft.com/library/dd236909.aspx) +- [Add or modify work item fields to support reporting](../../work/reference/add-or-modify-work-item-fields-to-support-reporting.md) +- [Dashboards and reports](../overview.md) +- [Manually process the TFS data warehouse and analysis services cube](manually-process-data-warehouse-and-cube.md) \ No newline at end of file diff --git a/docs/report/admin/review-team-activities-for-useful-reports.md b/docs/report/admin/review-team-activities-for-useful-reports.md new file mode 100644 index 00000000000..9ee8046fed4 --- /dev/null +++ b/docs/report/admin/review-team-activities-for-useful-reports.md @@ -0,0 +1,169 @@ +--- +title: Review team activities to support useful reports | TFS +description: Review team activities to support useful SQL Server reports when working in Team Foundation Server (TFS) +ms.assetid: 46456FBF-EECC-4096-9A98-3A9457F97EB2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 02/21/17 +--- + +#Review team activities to support useful reports + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +>[!IMPORTANT] +>**Feature availability**: You can only add a report server to an on-premises TFS. If you're using VSTS, adding a report server isn't a supported option, instead, you can use [PowerBI](../powerbi/overview.md). + +This is the fourth task in the four-task sequence to add reports to your team project. To generate useful reports, team members must perform certain tasks. This topic summarizes those tasks. + +[![Add a report server](_img/step-1-add-a-report-server.png)](add-a-report-server.md) +[![Upload reports](_img/step-2-upload-reports.png)](upload-reports.md) +[![Grant permissions](_img/step-3-grant-permissions.png)](grant-permissions-to-reports.md) +[![Review team activities](_img/step-4-review-team-activities.png)](review-team-activities-for-useful-reports.md) + + +Now that you've uploaded reports, how do you use them to track progress, gain insight, and improve processes? + +First, make sure your team is performing the activities that create the data that these reports use. Your team is probably performing most of these activities already. + +Here's a summary of the reports that TFS provides and the team activities that are associated with them. Over time, you can use these reports to see trends and identify which practices and processes require more attention to deliver desired results. + +##Monitor code quality +Build reports track the quality of software under development. By defining tests to run automatically as part of each build definition and instrumenting tests to gather code coverage data, you can gain insight about the quality of the builds, tests, and code. + + + + + + +
        +Build and test activities +
          +
        1. [Configure a build system](../../build-release/concepts/agents/agents.md)
        2. +
        3. [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md)
        4. +
        5. [Run tests in your build process](../../build-release/test/getting-started-with-continuous-testing.md)
        6. +
        7. (Optional) [Rate completed builds](https://msdn.microsoft.com/library/ms181734.aspx) to populate the Build Quality dimension.
        8. +
        +
        +Build reports +
          +
        • [Build Quality Indicators](../sql-reports/build-quality-indicators-report.md) (Agile and CMMI only)
        • +
        • [Build Success Over Time](../sql-reports/build-success-over-time-report.md) (pictured)
        • +
        • [Build Summary](../sql-reports/build-summary-report.md)
        • +
        +
        + + +**Sample build success over time report** + +![Sample build summary report](_img/IC665009.png) + +##Monitor progress +Project management reports provide insight into how much work the team is tackling within a sprint or release, and the rate of their progress. By linking work items and updating specific fields as work is performed, you can track the progress of individual stories and be able to more accurately estimate future activities. + + + + + + +
        +Work item tracking activities +
          +
        1. [Create the backlog](../../Work/backlogs/create-your-backlog.md). +
            +
          • Create product backlog items and specify the Effort (Scrum).
          • +
          • Create user stories and specify the Story Points (Agile).
          • +
          • Create requirements and specify the Size (CMMI).
          • +
          +
        2. +
        3. [Work in sprints](../../work/scrum/sprint-planning.md). Assign backlog items to sprints, create tasks and link them to parent backlog items, and assign to a team member.
        4. +
        5. + [Update Remaining Work for tasks](../../work/scrum/task-board.md). For Agile and CMMI team projects, update Completed Work as well. +
          + Tip +
          + The only report that references Original Estimate is [Status on All Iterations](../sql-reports/status-on-all-iterations-report.md). +
        6. +
        7. Create test cases and bugs, link them to their parent backlog item, and update their State.
        8. +
        9. (Optional) Assign work items to areas to filter reports.
        10. +
        +
        + Project management (Scrum) reports +
          +
        • [Backlog Overview (Scrum)](../sql-reports/backlog-overview-scrum.md)
        • +
        • [Release Burndown](../sql-reports/release-burndown.md)
        • +
        • [Sprint Burndown (Scrum)](../sql-reports/sprint-burndown-scrum.md)
        • +
        + Project management (Agile and CMMI) reports +
          +
        • [Burndown and Burn Rate](../sql-reports/burndown-and-burn-rate-report.md)
        • +
        • [Remaining Work](../sql-reports/remaining-work-report.md)
        • +
        • [Requirements Overview (CMMI)](../sql-reports/requirements-overview-report-cmmi.md)
        • +
        • [Requirements Progress (CMMI)](../sql-reports/requirements-progress-report-cmmi.md)
        • +
        • [Status on All Iterations](../sql-reports/status-on-all-iterations-report.md)
        • +
        • [Stories Overview (Agile)](../sql-reports/stories-overview-report-agile.md)
        • +
        • [Stories Progress (Agile)](../sql-reports/stories-progress-report-agile.md)
        • +
        • [Unplanned Work](../sql-reports/unplanned-work.md)
        • +
        +
        + +**Sample stories overview report** +![Sample stories overview report](_img/IC665011.png) + + +##Monitor test plans and bug tracking +Test planning reports support monitoring the test progress and coverage of backlog items or user stories. Bug tracking reports illustrate the team's capacity to find and resolve bugs. + + + + + + +
        +Test planning and bug tracking activities +
          +
        1. Define test plans and test cases, and update their State as work progresses.
        2. +
        3. [Mark the results of each validation step in manual tests](../../manual-test/getting-started/run-manual-tests.md) as either passed or failed.
        4. +
        5. Create bugs, specify the Priority and Severity, assign to a team member, and update the State.
        6. +
        7. (Optional) Assign test cases and bugs to areas and iterations to filter reports.
        8. +
        +
        +Bug and test reports +
          +
        • [Bug Status](../sql-reports/bug-status-report.md)
        • +
        • [Bug Trends](../sql-reports/bug-trends-report.md)
        • +
        • [Reactivations](../sql-reports/reactivations-report.md)
        • +
        • [Test Case Readiness](../sql-reports/test-case-readiness-report.md)
        • +
        • [Test Plan Progress](../sql-reports/test-plan-progress-report.md)
        • +
        +
        + +**Sample test plan progress report** +![Sample test plan progress report](_img/IC665012.png) + +##Q & A + + + +###Q: Do reports handle stories and substories or tasks and subtasks? +**A:** Yes, you can subdivide stories or backlog items as well as tasks, creating a nested hierarchy of both backlog items and tasks. You can nest items several levels deep. If you subdivide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and their parent backlog item. To correct reports you believe are in error, see [Address inaccuracies published for summary values](../address-inaccuracies-published-for-summary-values.md). + +###Q: Which reports depend on linking work items? +**A:** The overview and progress reports depend on linking tasks, test cases, and bugs to backlog items. You must link these items using the parent-child link for tasks and bugs and the Tested By link for test cases. + +###Q: Are these reports the same as the charts that appear in the web portal? + **A:** While some reports do display similar information, such as sprint burndown and velocity or status on all iterations, these reports are formatted differently and support additional filters. + +###Q: Do you want to create additional product areas or release milestones? +**A:** See [Modify areas or iterations](../../work/customize/set-area-paths.md). + +###Q: Do you want to bulk edit work items to assign them to an area, iteration, team member, or priority? +**A:** See [Bulk modify work items](../../work/backlogs/bulk-modify-work-items.md). + +###Q: Do you want to add a field to track additional data? +**A:** See [Add or modify a work item field to support reporting](../../work/reference/add-or-modify-work-item-fields-to-support-reporting.md). + + diff --git a/docs/report/admin/upload-reports.md b/docs/report/admin/upload-reports.md new file mode 100644 index 00000000000..d1b13c463e1 --- /dev/null +++ b/docs/report/admin/upload-reports.md @@ -0,0 +1,170 @@ +--- +title: Upload reports to a team project | TFS +description: Manually upload reports to a team project hosted on an on-premises Team Foundation Server (TFS) +ms.assetid: 4CA8789D-9F9D-4D78-9F03-64F4E884D117 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 03/02/2017 +--- + +#Upload reports to a team project + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +>[!IMPORTANT] +>**Feature availability**: You can only add a report server to an on-premises TFS. If you're using VSTS, adding a report server isn't a supported option, instead, you can use [PowerBI](../powerbi/overview.md). + +This is the second task in the four-task sequence to add reports to your team project. You can use the procedures in this topic to upload reports for the first time, or to upload updated reports provided with the latest process templates. + +[![Add a report server](_img/step-1-add-a-report-server.png)](add-a-report-server.md) +[![Upload reports](_img/step-2-upload-reports.png)](upload-reports.md) +[![Grant permissions](_img/step-3-grant-permissions.png)](grant-permissions-to-reports.md) +[![Review team activities](_img/step-4-review-team-activities.png)](review-team-activities-for-useful-reports.md) + + +By adding a report server to your TFS (on-premises) deployment, you can access a wealth of data about your team's projects, such as build quality, bug trends, burndown, and test progress. SQL Server Reporting Services (SSRS) reports provide insight to help teams manage work and improve processes. + + +After you've added a report server, you'll want to add reports to your team project. You can upload reports when connecting to an on-premises deployment of TFS 2010, TFS 2012, TFS 2013, TFS 2015, or TFS 2017.1. + +If the Reports page in Team Explorer appears empty, then you'll want to upload reports. + +![Upload reports when Reports page is empty](_img/IC665028.png) + +If the Reports page doesn't appear at all, then you'll want to [add a report server](add-a-report-server.md). + +##Upload reports to your team project (TFS 2017.1 (RC2) and later versions) +You use the **TFSConfig addProjectReports** command line tool to upload reports. + +1. Verify that you have the following tools, configurations, and permissions. + + * If you aren't an administrator for the team project, [get added now](../../tfs-server/add-administrator-tfs.md). + * If you haven't been added to the Content Manager or Team Foundation Content Manager role for SQL Server Reporting Services, [get added now](grant-permissions-to-reports.md). + * If you haven't installed [Team Foundation Server](https://www.visualstudio.com/downloads/download-visual-studio-vs), install it now. This is the only way to obtain the latest version of the default process templates, which contains the latest version of the reports. + +2. Open a Command Prompt in administrative mode and change to the following directory: + + ``` + %programfiles%\TFS 15.0\Tools + ``` + On a 64-bit edition of Windows, replace **%programfiles%** with **%programfiles(x86)%**. + +3. Upload the reports. The process template you specify must be compatible with the one used to create the team project. And, it must have been uploaded to the team project collection that hosts your team project. + + ``` + TFSConfig addprojectreports /collection:"http://myServer:8080/tfs/DefaultCollection" /teamproject:MyProject /template:"TemplateName" + ``` + + To overwrite reports that were previously uploaded, specify the **/force** option. These are the names of the default process templates available with TFS 2017: + + * Agile + * CMMI + * Scrum + + +##Upload reports to your team project (TFS 2015 and earlier versions) +You use the **tfpt** command line tool that TFS Power Tools provides. + +1. Verify that you have the following tools, configurations, and permissions. + + * If you haven't installed TFS power tools, [install them now](http://go.microsoft.com/fwlink/?LinkId=320602). + * If you haven't installed Visual Studio, [install a version of them now](https://www.visualstudio.com/downloads/download-visual-studio-vs). You can download Visual Studio Community for free. Each version of Visual Studio installs Team Explorer, which must be present on the same machine where you run the **tfpt** command line tool. + * If you aren't an administrator for the team project, [get added now](../../tfs-server/add-administrator-tfs.md). + * If you haven't been added to the Content Manager or Team Foundation Content Manager role for SQL Server Reporting Services, [get added now](grant-permissions-to-reports.md). + * If you haven't installed [Team Foundation Server](https://www.visualstudio.com/downloads/download-visual-studio-vs), install it now. This is the only way to obtain the latest version of the default process templates, which contains the latest version of the reports. + +2. From Team Explorer, download the latest process template that is compatible with the one used to create your team project. + + ![Download process template](../../Work/guidance/_img/process-template-manager.png) + + To determine the type of process template that was used to create your team project, review the work item types that appear in the **New Work Item** menu for Team Explorer and then compare them with the work item types shown in [Process template correlation with an existing team project](../../Work/guidance/manage-process-templates.md#wit_correlation). If your work item types differ from those shown listed, then a custom process template might have been used. + + >[!NOTE] + >In general, you can use the most recent version of the process template that was used to create your team project. For example, you can upload reports from Scrum, even if your team project was created with Visual Studio Scrum 2.0.

        + To download a process template, you need to be an administrator for the team project collection, and you must connect to TFS using the same version of Visual Studio. For example, connect to TFS 2015 from Visual Studio Community 2015.

        + >To learn more about process templates and work item types, see [Choose a process](../../work/guidance/choose-process.md). + +3. Open a Command Prompt in administrative mode and change to the directory where you installed the power tools. + + ``` + cd %programfiles%\TFS 2015 Power Tools + ``` + +On a 64-bit edition of Windows, replace **%programfiles%** with **%programfiles(x86)%**. + +4. Upload the reports. The process template you specify must be compatible with the one used to create the team project. And, it must have been uploaded to the team project collection that hosts your team project. + + ``` + tfpt addprojectreports /collection:"http://MyServer:8080/tfs/DefaultCollection" /teamproject:MyProject /processtemplate:"TemplateName" + ``` + + These are the names of the process templates uploaded with TFS 2015: + + * Agile + * CMMI + * Scrum + + To overwrite reports that were previously uploaded, specify the **/force** option. + +5. Open the report site from the ![Report](_img/IC588226.png) **Reports** page in Team Explorer. You might need to ![Refresh query](../../Work/_img/icons/te-refresh-query-icon.png) refresh the page to see the newly uploaded reports. + + ![Open the team project report site](_img/te-go-to-reports-site.png) + + And, here's a view of uploaded reports for a Scrum project in Report Manager. + + ![Open a Scrum report in Report Manager](_img/IC665035.png) + + Depending upon the amount of data that has been collected for your team project, it can take several minutes to several hours for the data warehouse and cube to build. Once they do, however, you can view progress for your team project since TFS was first deployed. + +##Try this next + +[Grant permissions to view or create reports](grant-permissions-to-reports.md). + +##Related notes + +To learn about which reports are provided with which process templates, see [Review team activities to support useful reports](review-team-activities-for-useful-reports.md). + + + + +####Q: How can I determine if my report is up to date? +**A:** To see when a report was last updated, check the **Date Last Updated** time stamp, which appears in the lower-right corner of each report. + +####Q: How often are reports refreshed? +**A:** Reports access data from the relational data warehouse (Tfs_Warehouse), which is updated every two minutes, and the cube (Tfs_Analysis), which is updated every two hours. + +####Q: How do I resolve issues causing reports to be out of date? +**A:** Reports will be out of date when all or some data stops flowing into the data warehouse. To verify the data flow, run the **GetProcessStatus** of the [Warehouse Control Web service](manually-process-data-warehouse-and-cube.md). Also, fix any [schema conflicts that may be occurring](resolve-schema-conflicts.md). + +####Q: What tasks does tfpt addprojectreports perform? +**A:** The **tfpt addprojectreports** command performs the instructions contained in the [ReportTasks file of the process template](../../work/reference/process-templates/add-reports-to-the-process-template.md). This file is located in the Reports folder of the process template. The tasks include creating report folders, setting report parameters and data sources for each report, and uploading reports to the report server. + +####Q: What if I just want to upload a single report? +**A:** You can upload a single report using **Upload file** in Report Manager. You'll need to define the report's data source and possibly other parameters. + +####Q: What are the names of the data sources? +**A:** The names of the reporting services data sources are **Tfs2010ReportsDS** and **Tfs2010OlapReportsDS**. Even though you may have installed or upgraded to a later version of TFS, these names, which were assigned to the data sources for a TFS 2010 installation, are in use. + +You can always check the names by opening the context menu for any report, choose **Manage**, and then choose **Data Sources**. + +####Q: Can I upload reports from another process template? +**A:** Most reports are customized based on the work item types and workflow states used in each process template. You might need to customize the reports you copy from another process template to fit the type definitions for your team project. + +####Q: What about uploading Excel reports? +**A:** For TFS 2015 and earlier versions, you can use **tfpt addprojectportal** command to add a project portal and Excel reports once you have [added a SharePoint web application](https://msdn.microsoft.com/library/ee805928.aspx) to your team project collection. + +####Q: Can I get these same reports using VSTS? +**A:** Not at this time. Uploading reports is only supported for an on-premises TFS. You can, however, [chart the results of a flat-list query](../charts.md). + +####Q: How do I customize a report? +**A:** You can customize the reports you uploaded using [SQL Server Report Builder 2012](https://www.microsoft.com/download/details.aspx?id=29072). To learn more, see [Creating Reports for Team Foundation Server 2010](https://msdn.microsoft.com/library/ff730837.aspx) and [Customizing Reports for Team Foundation Server 2010](https://msdn.microsoft.com/library/ff730838.aspx). Even though these articles are based on TFS 2010, they are valid for TFS 2013 and later versions. + +####Q: How can I learn more about the TFS cube? +**A:** See [Perspectives and measure groups provided in the Analysis Services cube for Visual Studio](https://msdn.microsoft.com/library/ms244710.aspx). + +####Q: Where can I go if I have more questions? +**A:** Search for an answer or post a question in the [Team Foundation Server - Reporting & Warehouse forum](http://go.microsoft.com/fwlink/?LinkId=95680). + + diff --git a/docs/report/admin/view-organize-configure-reports-using-report-manager.md b/docs/report/admin/view-organize-configure-reports-using-report-manager.md new file mode 100644 index 00000000000..b74e8130624 --- /dev/null +++ b/docs/report/admin/view-organize-configure-reports-using-report-manager.md @@ -0,0 +1,53 @@ +--- +title: View, organize, and configure reports using Report Manager | TFS +description: Use the SQL Server Reporting Services' Report manager to view, organize, and configure reports. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: f382806c-9509-45bf-b175-51a2c853621a +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# View, organize, and configure reports using Report Manager + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +After you create and publish reports in SQL Server Report Designer, you can use SQL Server Reporting Services' Report Manager to view, organize, and configure those reports. By using Report Manager, you can group related reports in folders, adjust parameters and data sources, and schedule automated reports. You can also configure different methods by which your reports are saved. For example, you can save a copy of a report (sometimes referred to as a snapshot) as report history. You can also export and save reports and have reports copied automatically to a file share. + + When you open Report Manager, you start in the Contents page, which shows the items that you have permission to view. You might also have permission to add, delete, and move those items. For more information, see the following page on the Microsoft Web site: [Contents Page (Report Manager)](http://go.microsoft.com/fwlink/?LinkID=182175). + + After you click a report, you can perform one or more of the tasks that are described in this topic. + +## View a report + By using the **View** tab, you can display results for reports. You can adjust parameters, subscribe to the report, and navigate through the report. You can also refresh, export, and print the report. For more information, see the following page on the Microsoft Web site: [Viewing Reports](http://go.microsoft.com/fwlink/?LinkId=182176). + +## Configure report properties + By using the **Properties** tab, you can configure different aspects of a report. The **Properties** tab contains the following pages: + +|Page|Task|Related topic on the Microsoft Web site| +|----------|----------|---------------------------------------------| +|**General**|**Modify Report Name, Description, or Definition**.

        On the **General** page, you can specify the name and a description of the report. You can also modify the report definition, either by editing a copy of the report or by uploading an .rdl file.|[General Properties Page, Reports (Report Manager)](http://go.microsoft.com/fwlink/?LinkId=181962)| +|**Parameters**|**Modify Report Parameters**.

        On the **Parameters** page, you can view or modify the parameters that filter the data retrieved in your report. For example, you specify a date range to restrict the data that appears in the report. The **Parameters** page does not appear if no parameters were specified in the report definition before it was published.|[Parameters Properties Page (Report Manager)](http://go.microsoft.com/fwlink/?LinkId=181963)| +|**Data Sources**|**Specify Data Sources**.

        On the **Data Sources** page, you can define how a report connects to an external data source. You can override the connection information that was specified when the report was published. By using this page, you can create a single report that can be run against different data sources.|[Data Sources Properties Page (Report Manager)](http://go.microsoft.com/fwlink/?LinkId=181992)| +|**Processing Options**|**Configure Execution and Caching**.

        On the **Processing Options** page, you can control when and how often reports are processed. You can set reports to run during off-peak hours or you can cache reports to eliminate wait time if you have many users who access the same report.|[Processing Options Properties Page (Report Manager)](http://go.microsoft.com/fwlink/?LinkId=181965)| +|**Snapshot Options**|**Configure Report History**.

        On the **Snapshot Options** page, you can configure whether and how many report snapshots are stored in report history.|[Snapshot Options Properties Page (Report Manager)](http://go.microsoft.com/fwlink/?LinkId=181966)| +|**Security**|**Configure Report Security**.

        On the **Security** page, you can configure the security settings that determine access to folders, reports, models, resources, and shared data sources. This page is available only for items that you create or have permission to modify. You define access to items by assigning a group or a user to a specific role, which specifies the tasks that members of that role can perform.|[Security Properties Page, Items (Report Manager)](http://go.microsoft.com/fwlink/?LinkId=181967)| + +## View report history + By using the **History** tab, you can create, view, and delete report snapshots. Each snapshot contains the layout and data that are captured at a specific day and time. If you change the layout or if the data has changed, those changes will appear only in snapshots that were captured after the changes were made. Saved report snapshots are not affected. You can view history for a report only if you have access to that report, and you can view the history for only one report at a time. For more information, see the following page on the Microsoft Web site: [Managing Report History](http://go.microsoft.com/fwlink/?LinkId=181968). + +## View and modify subscriptions + By using the **Subscriptions** tab, you can create, view, and delete subscriptions for a specific report. A subscription is a standing request to deliver a report at a specific time or in response to an event. You can use subscriptions to schedule and automate delivery of the reports that you use often. For example, you could decide to have the results of your nightly build and test runs appear in e-mail to your team each morning. + + You can create two types of subscriptions: + +- **Standard subscription**: A standard subscription consists of static values that cannot be varied during subscription processing. For each standard subscription, you can specify one set of presentation options, delivery options, and report parameters. + +- **Data-driven subscription**: Data-driven subscriptions retrieve their presentation options, delivery options, and report parameters from a data source at run time. You might use data-driven subscriptions if you want to vary report output for each recipient. For more information, see the following page on the Microsoft Web site: [Data-Driven Subscriptions](http://go.microsoft.com/fwlink/?LinkId=181969). + + For each subscription, you can have reports automatically delivered to you by e-mail or copied to a file share. You configure the delivery details, schedule, and the parameter values. For more information, see the following page on the Microsoft Web site: [Subscription Overview](http://go.microsoft.com/fwlink/?LinkId=181970). + +## Related notes +- [Choose the source of data and authoring tool](https://msdn.microsoft.com/library/bb649557.aspx) +- [Assign permissions to view and mange reports](grant-permissions-to-reports.md) +- [Create and manage Reporting Services reports](../sql-reports/create-and-manage-reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/admin/view-upload-organize-reporting-services-reports.md b/docs/report/admin/view-upload-organize-reporting-services-reports.md new file mode 100644 index 00000000000..274b34c79a5 --- /dev/null +++ b/docs/report/admin/view-upload-organize-reporting-services-reports.md @@ -0,0 +1,78 @@ +--- +title: View, upload, and organize Reporting Services reports | TFS +description: View the reports in SQL Server Reporting Services to analyze the progress and quality of the project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 6368a79e-32d4-4451-89de-0975530e3d17 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# View, upload, and organize Reporting Services reports + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can analyze the progress and quality of your project by viewing the reports in SQL Server Reporting Services. + + The ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports** page in Team Explorer provides a tree view of the reports defined for your team project. To open a report, choose it and press Enter. + +> [!NOTE] +> The ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** option appears only when the team project collection that contains your team project is provisioned with Reporting Services. For more information, see [Add a Report Server to a Team Project Collection](../admin/add-reports-to-a-team-project.md). + + The ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports** page for your team project shows the reports and organizes them under a set of folders. The default set of reports are based on the process template that was used to create the team project. You can manage these reports using Report Manager. For more information, see [Report Server Content (Native Mode)](http://go.microsoft.com/fwlink/?LinkId=263963). + + The reports that TFS provides with the default process templates provide a view of the current state of your project by aggregating and summarizing the metrics from such things as work items, version control, test results, and builds. You can use the default reports, or you can customize each report to fit your specific needs. + + Most of these reports provide filters that you can use to specify contents to include in the report. Filters include time period, iteration and area paths, work item types, and work item states. The questions that they answer relate to all types of work items such as user stories, test cases, tasks, and bugs. For more information about the purpose, layout, or use of each report, see [Reporting Services Reports](../sql-reports/reporting-services-reports.md). + + Team project reports are stored in Reporting Services, and you can access them through Team Explorer or Report Manager. As the number of reports listed on the **Reports** page increases, you may want to create subfolders for grouping or organizing the reports. + + You use Report Manager to manage reports and report folders. To access the team report site from Team Web Access, on the Home page, click ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports**. + + **Requirements** + +- To open a report from Team Explorer, your **View project-level information** permission on the team project must be set to **Allow**. You must also be a member of the SQL Server Reporting Services **Browser** role. + +- To manage reports from Report Manager, you must be a member of the SQL Server Reporting Services **Team Foundation Content Manager** role. For more information, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + + > [!NOTE] + > If you are running Windows Server 2008 or Windows Vista, you might have trouble opening Web pages or sites from Team Explorer. For example, you might not be able to open the project portal by right-clicking a team project in Team Explorer and then clicking **Show Project Portal**. For more information about access issues that may occur with Windows Server 2008 or Windows Vista, see the following page on the Microsoft Web site: [User Account Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +## + +#### To view a report from Team Explorer + +1. From the ![Home icon](_img/alm_te_home_icon.png "ALM_TE_Home_Icon") home page in Team Explorer, choose ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports**. + +> [!NOTE] +> If a red X icon appears next to ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports**, you might not have permissions to access the reports, or Team Explorer might have lost communication with the server that hosts Reporting Services. In these instances, check with your project administrator to make sure that you have permissions to access the reports and that the server that hosts Reporting Services is running. + + Also, a red X icon might appear next to **Reports** if both of the following conditions are true: + +- Team Explorer is running on the same computer as Reporting Services. + +- You are not logged on as an administrator, or enhanced security is enabled for Internet Explorer. + + To correct this issue, log onto your computer as an administrator, or open Internet Explorer, open Internet Options, choose the **Security** tab, and clear the **Enabled Protected Mode** check box. + +1. Choose the report and then press Enter. + + A web browser window opens and shows the report. + +2. At the top of the report, specify your filter parameters, and then choose **View Report**. + +#### To view a report from Report Manager + +1. From the ![Home icon](_img/alm_te_home_icon.png "ALM_TE_Home_Icon") home page in Team Explorer, choose ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports**, and then choose the **Go to site** link. + + Or, choose **Team, Show Report Site** from the Visual Studio toolbar. + +2. In **Report Manager**, choose the folder that contains the report you want to view. + +3. Choose the report that you want to open. + +4. At the top of the report, specify your filter parameters, and then choose **View Report**. + +## Related notes +- [Reporting Services Reports](../sql-reports/reporting-services-reports.md) +- [Create and manage Reporting Services reports](../sql-reports/create-and-manage-reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/analytics/Documentation.csproj b/docs/report/analytics/Documentation.csproj new file mode 100644 index 00000000000..5dad9b03c55 --- /dev/null +++ b/docs/report/analytics/Documentation.csproj @@ -0,0 +1,179 @@ + + + + + + + Debug + AnyCPU + + + 2.0 + {7BE47807-5714-4DBD-8F71-D8AC4F7D622E} + {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + Documentation + Documentation + v4.5.2 + true + + + + + + + + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + True + True + 1129 + / + http://localhost:1129/ + False + False + + + False + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + + + \ No newline at end of file diff --git a/docs/report/analytics/Properties/AssemblyInfo.cs b/docs/report/analytics/Properties/AssemblyInfo.cs new file mode 100644 index 00000000000..183bd37445a --- /dev/null +++ b/docs/report/analytics/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Documentation")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Documentation")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7be47807-5714-4dbd-8f71-d8ac4f7d622e")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/docs/report/analytics/_img/aad-auth-power-bi.png b/docs/report/analytics/_img/aad-auth-power-bi.png new file mode 100644 index 00000000000..fc39ab11eed Binary files /dev/null and b/docs/report/analytics/_img/aad-auth-power-bi.png differ diff --git a/docs/report/analytics/_img/access-analytics-pbi-get-data.png b/docs/report/analytics/_img/access-analytics-pbi-get-data.png new file mode 100644 index 00000000000..bb206b7a825 Binary files /dev/null and b/docs/report/analytics/_img/access-analytics-pbi-get-data.png differ diff --git a/docs/report/analytics/_img/aggregated-1.png b/docs/report/analytics/_img/aggregated-1.png new file mode 100644 index 00000000000..656eab3d208 Binary files /dev/null and b/docs/report/analytics/_img/aggregated-1.png differ diff --git a/docs/report/analytics/_img/aggregated-2.png b/docs/report/analytics/_img/aggregated-2.png new file mode 100644 index 00000000000..4fa32b370e3 Binary files /dev/null and b/docs/report/analytics/_img/aggregated-2.png differ diff --git a/docs/report/analytics/_img/aggregated-3.png b/docs/report/analytics/_img/aggregated-3.png new file mode 100644 index 00000000000..e93fd35c29c Binary files /dev/null and b/docs/report/analytics/_img/aggregated-3.png differ diff --git a/docs/report/analytics/_img/aggregated-4.png b/docs/report/analytics/_img/aggregated-4.png new file mode 100644 index 00000000000..76dec781768 Binary files /dev/null and b/docs/report/analytics/_img/aggregated-4.png differ diff --git a/docs/report/analytics/_img/aggregated-5.png b/docs/report/analytics/_img/aggregated-5.png new file mode 100644 index 00000000000..4a739fb44b9 Binary files /dev/null and b/docs/report/analytics/_img/aggregated-5.png differ diff --git a/docs/report/analytics/_img/aggregated-6.png b/docs/report/analytics/_img/aggregated-6.png new file mode 100644 index 00000000000..df99692534c Binary files /dev/null and b/docs/report/analytics/_img/aggregated-6.png differ diff --git a/docs/report/analytics/_img/aggregated-7.png b/docs/report/analytics/_img/aggregated-7.png new file mode 100644 index 00000000000..adf88542f4d Binary files /dev/null and b/docs/report/analytics/_img/aggregated-7.png differ diff --git a/docs/report/analytics/_img/aggregated-8.png b/docs/report/analytics/_img/aggregated-8.png new file mode 100644 index 00000000000..415a5b41899 Binary files /dev/null and b/docs/report/analytics/_img/aggregated-8.png differ diff --git a/docs/report/analytics/_img/aggregated-9.png b/docs/report/analytics/_img/aggregated-9.png new file mode 100644 index 00000000000..7ccf3d45f2f Binary files /dev/null and b/docs/report/analytics/_img/aggregated-9.png differ diff --git a/docs/report/analytics/_img/analytics_permission.png b/docs/report/analytics/_img/analytics_permission.png new file mode 100644 index 00000000000..fe027e87aa4 Binary files /dev/null and b/docs/report/analytics/_img/analytics_permission.png differ diff --git a/docs/report/analytics/_img/authentication-4.png b/docs/report/analytics/_img/authentication-4.png new file mode 100644 index 00000000000..bcc7978053c Binary files /dev/null and b/docs/report/analytics/_img/authentication-4.png differ diff --git a/docs/report/analytics/_img/authentication-6.png b/docs/report/analytics/_img/authentication-6.png new file mode 100644 index 00000000000..bb45af2b359 Binary files /dev/null and b/docs/report/analytics/_img/authentication-6.png differ diff --git a/docs/report/analytics/_img/authentication-7.png b/docs/report/analytics/_img/authentication-7.png new file mode 100644 index 00000000000..d349724b6c2 Binary files /dev/null and b/docs/report/analytics/_img/authentication-7.png differ diff --git a/docs/report/analytics/_img/authentication-8.png b/docs/report/analytics/_img/authentication-8.png new file mode 100644 index 00000000000..78d84471366 Binary files /dev/null and b/docs/report/analytics/_img/authentication-8.png differ diff --git a/docs/report/analytics/_img/authentication-9.png b/docs/report/analytics/_img/authentication-9.png new file mode 100644 index 00000000000..f5c9d04e715 Binary files /dev/null and b/docs/report/analytics/_img/authentication-9.png differ diff --git a/docs/report/analytics/_img/client-auth-authentication-3.png b/docs/report/analytics/_img/client-auth-authentication-3.png new file mode 100644 index 00000000000..b079a26ffa9 Binary files /dev/null and b/docs/report/analytics/_img/client-auth-authentication-3.png differ diff --git a/docs/report/analytics/_img/client-auth-create-aac.png b/docs/report/analytics/_img/client-auth-create-aac.png new file mode 100644 index 00000000000..ad86dddba8e Binary files /dev/null and b/docs/report/analytics/_img/client-auth-create-aac.png differ diff --git a/docs/report/analytics/_img/client-auth-excel-open-data-source-settings.png b/docs/report/analytics/_img/client-auth-excel-open-data-source-settings.png new file mode 100644 index 00000000000..ca4eac64c10 Binary files /dev/null and b/docs/report/analytics/_img/client-auth-excel-open-data-source-settings.png differ diff --git a/docs/report/analytics/_img/client-auth-profile-security.png b/docs/report/analytics/_img/client-auth-profile-security.png new file mode 100644 index 00000000000..c58e85fefaa Binary files /dev/null and b/docs/report/analytics/_img/client-auth-profile-security.png differ diff --git a/docs/report/analytics/_img/client-auth-security-pat.png b/docs/report/analytics/_img/client-auth-security-pat.png new file mode 100644 index 00000000000..c60d90b84f0 Binary files /dev/null and b/docs/report/analytics/_img/client-auth-security-pat.png differ diff --git a/docs/report/analytics/_img/custom-queries-1.png b/docs/report/analytics/_img/custom-queries-1.png new file mode 100644 index 00000000000..792caaf5ffa Binary files /dev/null and b/docs/report/analytics/_img/custom-queries-1.png differ diff --git a/docs/report/analytics/_img/custom-queries-2.png b/docs/report/analytics/_img/custom-queries-2.png new file mode 100644 index 00000000000..7ecee830c3e Binary files /dev/null and b/docs/report/analytics/_img/custom-queries-2.png differ diff --git a/docs/report/analytics/_img/custom-queries-3.png b/docs/report/analytics/_img/custom-queries-3.png new file mode 100644 index 00000000000..9e090fa006e Binary files /dev/null and b/docs/report/analytics/_img/custom-queries-3.png differ diff --git a/docs/report/analytics/_img/custom-queries-4.png b/docs/report/analytics/_img/custom-queries-4.png new file mode 100644 index 00000000000..931a46dc13c Binary files /dev/null and b/docs/report/analytics/_img/custom-queries-4.png differ diff --git a/docs/report/analytics/_img/custom-queries-5.png b/docs/report/analytics/_img/custom-queries-5.png new file mode 100644 index 00000000000..be9e0ef1712 Binary files /dev/null and b/docs/report/analytics/_img/custom-queries-5.png differ diff --git a/docs/report/analytics/_img/datamodel.png b/docs/report/analytics/_img/datamodel.png new file mode 100644 index 00000000000..5d893073d2d Binary files /dev/null and b/docs/report/analytics/_img/datamodel.png differ diff --git a/docs/report/analytics/_img/excel1.png b/docs/report/analytics/_img/excel1.png new file mode 100644 index 00000000000..03707b31b1b Binary files /dev/null and b/docs/report/analytics/_img/excel1.png differ diff --git a/docs/report/analytics/_img/excel2.png b/docs/report/analytics/_img/excel2.png new file mode 100644 index 00000000000..ad54eb9da99 Binary files /dev/null and b/docs/report/analytics/_img/excel2.png differ diff --git a/docs/report/analytics/_img/pbi-relationships-2.png b/docs/report/analytics/_img/pbi-relationships-2.png new file mode 100644 index 00000000000..e30988f3ee8 Binary files /dev/null and b/docs/report/analytics/_img/pbi-relationships-2.png differ diff --git a/docs/report/analytics/_img/pbi-relationships-3.png b/docs/report/analytics/_img/pbi-relationships-3.png new file mode 100644 index 00000000000..6f3d25e3549 Binary files /dev/null and b/docs/report/analytics/_img/pbi-relationships-3.png differ diff --git a/docs/report/analytics/_img/pbi-relationships.png b/docs/report/analytics/_img/pbi-relationships.png new file mode 100644 index 00000000000..752f60f1c4f Binary files /dev/null and b/docs/report/analytics/_img/pbi-relationships.png differ diff --git a/docs/report/analytics/_img/pbi1.png b/docs/report/analytics/_img/pbi1.png new file mode 100644 index 00000000000..09bfd3d2c75 Binary files /dev/null and b/docs/report/analytics/_img/pbi1.png differ diff --git a/docs/report/analytics/_img/pbi10.png b/docs/report/analytics/_img/pbi10.png new file mode 100644 index 00000000000..11adfb68e21 Binary files /dev/null and b/docs/report/analytics/_img/pbi10.png differ diff --git a/docs/report/analytics/_img/pbi11.png b/docs/report/analytics/_img/pbi11.png new file mode 100644 index 00000000000..1914bb08eb1 Binary files /dev/null and b/docs/report/analytics/_img/pbi11.png differ diff --git a/docs/report/analytics/_img/pbi12.png b/docs/report/analytics/_img/pbi12.png new file mode 100644 index 00000000000..3535ab113f6 Binary files /dev/null and b/docs/report/analytics/_img/pbi12.png differ diff --git a/docs/report/analytics/_img/pbi13.png b/docs/report/analytics/_img/pbi13.png new file mode 100644 index 00000000000..d9d36619d6a Binary files /dev/null and b/docs/report/analytics/_img/pbi13.png differ diff --git a/docs/report/analytics/_img/pbi2.png b/docs/report/analytics/_img/pbi2.png new file mode 100644 index 00000000000..8d1180738e5 Binary files /dev/null and b/docs/report/analytics/_img/pbi2.png differ diff --git a/docs/report/analytics/_img/pbi3.png b/docs/report/analytics/_img/pbi3.png new file mode 100644 index 00000000000..5cdbe4c7257 Binary files /dev/null and b/docs/report/analytics/_img/pbi3.png differ diff --git a/docs/report/analytics/_img/pbi4.png b/docs/report/analytics/_img/pbi4.png new file mode 100644 index 00000000000..e689cc1f6a8 Binary files /dev/null and b/docs/report/analytics/_img/pbi4.png differ diff --git a/docs/report/analytics/_img/pbi9.png b/docs/report/analytics/_img/pbi9.png new file mode 100644 index 00000000000..98ea8a3c03a Binary files /dev/null and b/docs/report/analytics/_img/pbi9.png differ diff --git a/docs/report/analytics/_img/power-bi-organizational.png b/docs/report/analytics/_img/power-bi-organizational.png new file mode 100644 index 00000000000..de43bd93ed8 Binary files /dev/null and b/docs/report/analytics/_img/power-bi-organizational.png differ diff --git a/docs/report/analytics/_img/publish-1.png b/docs/report/analytics/_img/publish-1.png new file mode 100644 index 00000000000..dd931620f96 Binary files /dev/null and b/docs/report/analytics/_img/publish-1.png differ diff --git a/docs/report/analytics/_img/publish-2.png b/docs/report/analytics/_img/publish-2.png new file mode 100644 index 00000000000..1d16b12a802 Binary files /dev/null and b/docs/report/analytics/_img/publish-2.png differ diff --git a/docs/report/analytics/_img/publish-3.png b/docs/report/analytics/_img/publish-3.png new file mode 100644 index 00000000000..a584fd95c14 Binary files /dev/null and b/docs/report/analytics/_img/publish-3.png differ diff --git a/docs/report/analytics/_img/publish-4.png b/docs/report/analytics/_img/publish-4.png new file mode 100644 index 00000000000..4cc181e4257 Binary files /dev/null and b/docs/report/analytics/_img/publish-4.png differ diff --git a/docs/report/analytics/_img/publish-5.png b/docs/report/analytics/_img/publish-5.png new file mode 100644 index 00000000000..07e1f2f2b1c Binary files /dev/null and b/docs/report/analytics/_img/publish-5.png differ diff --git a/docs/report/analytics/_img/widget-extension-1.png b/docs/report/analytics/_img/widget-extension-1.png new file mode 100644 index 00000000000..08b41f31e1a Binary files /dev/null and b/docs/report/analytics/_img/widget-extension-1.png differ diff --git a/docs/report/analytics/_img/widget-extension-2.png b/docs/report/analytics/_img/widget-extension-2.png new file mode 100644 index 00000000000..82d9a31b6fc Binary files /dev/null and b/docs/report/analytics/_img/widget-extension-2.png differ diff --git a/docs/report/analytics/_img/widget-extension-3.png b/docs/report/analytics/_img/widget-extension-3.png new file mode 100644 index 00000000000..1a1ab702657 Binary files /dev/null and b/docs/report/analytics/_img/widget-extension-3.png differ diff --git a/docs/report/analytics/access-analytics-excel.md b/docs/report/analytics/access-analytics-excel.md new file mode 100644 index 00000000000..de55047793d --- /dev/null +++ b/docs/report/analytics/access-analytics-excel.md @@ -0,0 +1,81 @@ +--- +title: Access data through Excel | VSTS +description: How to access Analytics Service OData for Visual Studio Team Services (VSTS) from Excel +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: E661D20C-073E-44F1-A91C-B1460A93E2B2 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Access data through Excel + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +You can access data through Excel, generate reports and then publish the charts to PowerBI.com or use the Excel file +as a basis for Power BI reports. At this time you will need to have alternate credentials enabled to access data +the Analytics Service via Excel. + +1. To get started, Open Excel 2016 (this will work with earlier versions of Excel. You will need to have installed +the Power Query add-in which you can do from [Microsoft Power Query for Excel](https://www.microsoft.com/download/details.aspx?id=39379&CorrelationId=3f2bb5d7-8db9-4e8f-ad58-bfa2789c877c). + +2. Create a blank workbook + +3. Click the Data tab and then click New Query > From Other Sources > From OData Feed + + ![Excel Get Data ](_img/excel1.png) + +4. Enter the URL in the format below and click OK: + + ``` + https://AccountName.analytics.visualstudio.com/DefaultCollection/_odata + ``` + + ![Select OData Feed ](_img/pbi3.png) + + If the *AccountName* is "fabrikam" then the URL is ```https://fabrikam.analytics.visualstudio.com/DefaultCollection/_odata```. + + >[!NOTE] + >Alternatively, you can enter the URL ```https://[collection name].analytics.visualstudio.com/DefaultCollection/ProjectName/_odata``` which will trim the results by the specified team project across all entities related to that project. + +5. At this point you will be prompted to authenticate against the service. If you have not done so previously, see this topic: [Client Authentication Options](client-authentication-options.md) +6. Either select a single entity to retrieve the data for or check **Select multiple items** and choose the data to return + + ![Excel Navigator](_img/excel2.png) + + At this point, if you click **Load**, Excel will load all of the data in each entity into Power Query. However, this may be more data than you want (or than Excel can handle). + To filter the data, select the entity to filter and click Edit. This brings up the Query Editor. For each column you want to filter on, select it and set your filter. When this is complete click Close & Apply in the upper left corner. + + > [!IMPORTANT] + > Do *not* select any entity with the name **Snapshot** in it. These entities contain the state of every work item + on every day since each work item was created. For repositories of any size this will lead to tens or hundreds of millions of work items which will + not load correctly. In order to perform trend analysis, narrow the scope of data being retrieved to the specific items and time frame and pull this information in with a separate OData query. + +As an alternative to loading the data into Power Query, you can click the drop-down arrow next to Load and select Load To instead. +This allows the following options: + +* Load the data to table which is Power Query +* Create a connection without loading the data (essentially deferring the data load until later) +* To a worksheet which will just load the one entity per worksheet +* To a model (which can be selected in addition to the other options) which loads the data into PowerPivot + +More information on these options can be found in the [Excel documentation](https://support.office.com/en-us/article/Add-a-query-to-an-Excel-worksheet-Power-Query-ca69e0f0-3db1-4493-900c-6279bef08df4?ui=en-US&rs=en-US&ad=US#querytoworksheet). + +##Handling relationships + +By default, when basic data is returned from the Analytics Service, the data is related as shown in the figure below: + +![Entity relationships](_img/pbi-relationships.png) + +You will note that the Tags, Teams and Users are not related to any of the other data. This is due to how those entities +are related. They are related by either many-to-many relationships which are not easily handled in these models or +there are multiple relationships between the entities such as between users and work items (they are related by Assigned To, +Created By, Changed By, and others). + +Multiple relationships can be handled in fairly simply. For example, in the default model you can edit the query, select the +AssignedTo column of the WorkItems table and expand the column to include all of the data from the Users table and you can repeat +this process for the Created By and Changed By columns as well. This gets you around having multiple links from one table to another +which is not allowed. \ No newline at end of file diff --git a/docs/report/analytics/access-analytics-power-bi.md b/docs/report/analytics/access-analytics-power-bi.md new file mode 100644 index 00000000000..05f30d82155 --- /dev/null +++ b/docs/report/analytics/access-analytics-power-bi.md @@ -0,0 +1,117 @@ +--- +title: Access data from Power BI desktop | VSTS +description: How to access Analytics Service OData for Visual Studio Team Services (VSTS) from Power BI Desktop +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: b26f1d04-95ca-43d5-8333-176780f3980a +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Access data through Power BI desktop + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +You can access the Analytics Service data through the Power BI Desktop and then publish it to PowerBI.com. (For any account that has alternate credentials enabled - OAuth (Organizational Accounts) is currently not supported). Unlike the [Power BI Content Pack](https://www.visualstudio.com/en-us/get-started/report/report-on-vso-with-power-bi-vs) which we previously published, no pre-configured file is required. You can simply just start working in Power BI Desktop. + +##Retrieve data manually + +1. To get started, Open Power BI Desktop. If you need to install it, [do that now](https://powerbi.microsoft.com/desktop). + +2. Click Get Data from either the welcome page or the Home ribbon. + + ![Power BI Desktop Get Data ](_img/access-analytics-pbi-get-data.png) + +3. Next, select Other > OData Feed and click Connect. + + ![Select OData Feed ](_img/pbi2.png) + +4. Enter the URL in the format: + + ``` + https://[account].analytics.visualstudio.com/DefaultCollection/_odata + ``` + + ![Select OData Feed ](_img/pbi3.png) + + If the *AccountName* is "foo" then the URL is ```https://foo.analytics.visualstudio.com/DefaultCollection/_odata```. + + >[!NOTE] + >Alternatively, you can enter the URL ```https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata``` which will trim the results by the specified team project across all entities related to that project. + +5. At this point you will be prompted to authenticate against the service. If you have not done so previously, see this topic: [Client Authentication Options](client-authentication-options.md). +6. Next, select the entities you want to retrieve data for by checking those entities. + + >[!IMPORTANT] + >Do *not* select any entity with the name **Snapshot** in it. These entities contain the state of every work item on every day since each work item was created. For repositories of any size this will lead to tens or hundreds of millions of work items which will not load correctly. In order to perform trend analysis, narrow the scope of data being retrieved to the specific items and time frame and pull this information in with a separate OData query. + + ![Select the entities of data to retrieve](_img/pbi4.png) + + At this point, if you click **Load**, Power BI Desktop will load all of the data in each entity. However, this may be more data than you want. To filter the data, select the entity to filter and click Edit. This brings up the Query Editor. For each column you want to filter on, select it and set your filter. When this is complete click Close & Apply in the upper left corner. + +###Handle relationships + +By default, when basic data is returned from the Analytics Service, the data is related as shown in the figure below: + +![Entity relationships](_img/pbi-relationships.png) + +You will note that the Tags, Teams and Users are not related to any of the other data. This is due to how those entities +are related. They are related by either many-to-many relationships which are not easily handled in these models or +there are multiple relationships between the entities such as between users and work items (they are related by Assigned To, +Created By, Changed By, and others). + +Multiple relationships can be handled in fairly simply. For example, in the default model you can edit the query, select the +AssignedTo column of the WorkItems table and expand the column to include all of the data from the Users table and you can repeat +this process for the Created By and Changed By columns as well. This gets you around having multiple links from one table to another +which is not allowed. + +Another reason for expanding columns in this way is to handle circular relationships which are also not allowed. For example, +take the following path: Projects > Areas > Work Items > Projects. This presents a typical circular problem. What if you +wanted to see which ares were part of a given project? The model as it is build has relationships between Areas and Work Items and +Projects and Work Items but Projects cannot be related to Areas because that completes the circular relationship and so it is +not allowed. To handle this, you could expand the Project column in the Areas table. To do that, take the following steps: + +1. Select **Edit Queries** from the **Home tab** +2. Select the **Areas query** +3. Scroll to the **Project column** (the last column) and click the Expand icon at the top of the column + + ![Areas Query, Project Column](_img/pbi-relationships-2.png) + +4. Uncheck all of the columns except for the ProjectName and click OK + + ![Expand Project options](_img/pbi-relationships-3.png) + +Now you can list Areas by Project and get a count of Areas in each project. + +## Use a Power BI template + +With Power BI Desktop, you can create a templated Power BI file and prompt +the user for various parameters. We have created such a file with several basic capabilities for reporting on the current +state of work items to get you started. As we include additional data types, we will improve this file. + +The current VSTS work items template file supports a single project only. + +**What's included** + +* A basic bug status report with five charts +* Area hierarchy +* Iteration hierarchy +* Age in Days column in the WorkItems table + +**How to use this file** + +1. [Download Power BI Desktop](https://go.microsoft.com/fwlink/?LinkId=521662&clcid=0x409), the April version or later. + +2. Download the [VSTS work items template file](http://go.microsoft.com/fwlink/?LinkId=797544). + +3. Double-click the downloaded file to open it and enter the account and project as noted here: + + ![Enter parameters](_img/pbi10.png) + +4. Click **OK**. + + After the data is downloaded you can create your own reports. + diff --git a/docs/report/analytics/aggregated-data-analytics.md b/docs/report/analytics/aggregated-data-analytics.md new file mode 100644 index 00000000000..b04754421b1 --- /dev/null +++ b/docs/report/analytics/aggregated-data-analytics.md @@ -0,0 +1,214 @@ +--- +title: How to aggregate data using the OData Analytics Service for VSTS +description: How to aggregate data with the Analytics Service +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 8D81FEFD-F432-4E10-A415-9167B5FE9A57 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Aggregate data + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Using the OData analytics service, you can aggregate data. + +There are two ways to aggregate data. The simple approach, which doesn't use aggregation extensions, only provides access to counts of data. The more advanced approach performs aggregations available via the aggregation extensions. + +In this topic, the basic root URL is constructed as: + +``` +https://[collection name].analytics.visualstudio.com/DefaultCollection/_odata +``` + + +All additional URL parts are specified as an additional part of the query string as shown in the examples below. + + +##Simple count aggregations + +First, let's look at how to do counts without the aggregation extensions. + +Basic counting is done by adding the ```$count``` query option to the end of the URL. For example, to find out how many work items are in the system you can +issue the following query: + + /WorkItems/$count + +For comparison, using data aggregations you enter this query: + + /WorkItems?$apply=aggregate(Count with sum as Count) + +For simple counts, the non-aggregation approach has a simpler syntax. + + +>[!NOTE] +>There is one other difference in these approaches: using ```$count``` returns a scalar value, that is a single number. Using aggregation extensions returns a formatted JSON result. +  + +You can also filter what you want to count. For example, if you want to know how many work items are in the "In Progress" state, specify this query: + + /WorkItems/$count?$filter=State eq 'In Progress' + +## Aggregate data using aggregation extensions + +Now that you've seen how to do basic aggregations with ```count```, let's look at more complex examples that help solve real-world problems. + +>[!NOTE] +>At this time, aggregation extensions are not supported by any of our client tools although they are being looked at. We've come up with a simple workaround which is explained in the Power BI client documentation. + + +First, using OData, you trigger aggregations using the ```$apply``` token at the end of the URL. The basic format is: + + /[entity name]?$apply=aggregate([column to aggregate] with [aggregation type] as [new column name]) + +### Additional examples + +The following are some concrete examples of this functionality: + +**Return the count of work items:** + + /WorkItems?$apply=aggregate(Count with sum as CountOfWorkItems) + +Work items can also be counted by using the following: + + /WorkItems?$apply=aggregate(WorkItemId with countdistinct as CountOfWorkItems) + +>[!NOTE] +>The column "Count" is provided by the model to make it easier to do counts and work with client tools because the underlying OData implementation does not currently support the ```$count``` virtual property within the aggregation extensions. Once we implement this functionality, we'll update this document. + + +**Return the count of areas** + + /Areas?$apply=aggregate(AreaId with countdistinct as CountOfAreas) + +**Return the sum of all remaining work** + + /WorkItems?$apply=aggregate(RemainingWork with sum as SumOfRemainingWork) + +**Return the last work item ID** + + /WorkItems?$apply=aggregate(WorkItemId with max as MaxWorkItemId) + +###Group results + +Aggregation extensions also support a ```groupby``` clause which is identical to the SQL group by clause. You can use this clause to quickly break down numbers +in more detail. + +For example, the following gives you the count of work items: + + /WorkItems?$apply=aggregate(Count with sum as Count) + +Add the ```groupby``` clause to return a count of work items by type: + + /WorkItems?$apply=groupby((WorkItemType), aggregate(Count with sum as Count)) + +This returns a result similar to the following: + + { + "@odata.context":"https://[collection].analytics.visualstudio.com/DefaultCollection/_odata/$metadata#WorkItems(WorkItemType,Count)","value":[ + { + "@odata.id":null,"WorkItemType":"Issue","Count":220 + },{ + "@odata.id":null,"WorkItemType":"Test Plan","Count":469 + },{ + "@odata.id":null,"WorkItemType":"Product Backlog Item","Count":915 + },{ + "@odata.id":null,"WorkItemType":"Scenario","Count":1382 + },{ + "@odata.id":null,"WorkItemType":"Test Suite","Count":6328 + },{ + "@odata.id":null,"WorkItemType":"Feature","Count":9829 + },{ + "@odata.id":null,"WorkItemType":"Test Case","Count":29516 + },{ + "@odata.id":null,"WorkItemType":"User Story","Count":47714 + },{ + "@odata.id":null,"WorkItemType":"Bug","Count":63621 + },{ + "@odata.id":null,"WorkItemType":"Task","Count":106469 + } + ] + } + +You can also group by multiple properties as in the following: + + /WorkItems?$apply=groupby((WorkItemType, State), aggregate(Count with sum as Count)) + +You can also group across entities, however OData grouping differs from how you might normally think about it. + +For example, suppose you wanted to know how many areas are in each project. In OData, "count all areas and group them by project" is equivalent to "give me all projects and a count of areas for each project". This results in a query similar to: + + /Areas?$apply=groupby((Project/ProjectName), aggregate(AreaId with countdistinct as CountOfAreas)) + +### Filter aggregated results + +You can also filter aggregated results, however they are applied slightly differently than when you are not using aggregation. The analytics service evaluates filters along a pipe so it's always best to do the most discrete filtering first. + +Filters look like the following: + + /WorkItems?$apply=filter(Iteration/IterationName eq 'Sprint 89')/filter(WorkItemType eq 'User Story')/groupby((State), aggregate(Count with sum as Count)) + + +>[!NOTE] +>You don't have to provide the ```groupby``` clause. You can simply use the ```aggregate``` clause to return a single value. + + +###Multiple aggregations in a single call + +When you want to provide multiple pieces of information, such as the sum of completed work and separately the sum of remaining work., you can accomplish this with separate calls or with a single call as follows: + +```/WorkItems?$apply=aggregate(CompletedWork with sum as SumOfCompletedWork, RemainingWork with sum as SumOfRemainingWork)``` + +This will return a result that looks like the following: + +``` +{ + "@odata.context":"https://[account].analytics.visualstudio.com/DefaultCollection/_odata/$metadata#WorkItems(SumOfCompletedWork,SumOfRemainingWork)","value":[ + { + "@odata.id":null,"SumOfCompletedWork":1525841.2900000005,"SumOfRemainingWork":73842.39 + } + ] +} + +``` + +##The benefits of aggregation, a real world example + +Let's say you want to create a cumulative flow diagram in Power BI. To start off with you need to retrieve +the data. In a normal circumstance you would use a query like the following (this query is explained in the +WIT Analytics topic): + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItemBoardSnapshot?$filter=BoardLocation/Team/TeamName eq '[team name]' +and BoardLocation/BoardName eq 'Microsoft.RequirementCategory'&$expand=Date,BoardLocation +``` + +This query returns every work item for every day for a given team with no aggregations. In a single test on a small project (just 10 days worth of data) +it returned 471 rows. The CFD can be created with this data. + +This is what an aggregation query looks like for the exact same data: + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItemBoardSnapshot?$apply=filter(BoardLocation/Team/TeamName eq '[team name]')/filter(BoardLocation/BoardName eq 'Microsoft.RequirementCategory')/groupby((Date/Date,BoardLocation/ColumnName,BoardLocation/ColumnOrder), aggregate(Count with sum as Count)) +``` + +This query returns 41 rows. That's better than a 10x reduction in data. Let's take a look at what this query actually does. + +* Filter the data down to the team we want the data for +* Filter the data to the specific backlog (the default boards are "Microsoft.ScenarioCategory, Microsoft.FeatureCategory and Microsoft.RequirementCategory") +* Group by the Date (in the related Date entity) +* Group by the ColumnName (in the related BoardLocation entity) +* Group by the ColumnId (in the related BoardLocation entity) - note that this is used for ordering the column name correctly and it needs to be returned in the query results +* Get a count of work items + +When refreshing a Power BI workbook and/or PowerBI.com or Excel, the fewer rows required, the faster the refresh occurs. + + +##Related notes + +- [WIT analytics](wit-analytics.md) +- [OData Extension for Data Aggregation Version 4.0](http://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/cs01/odata-data-aggregation-ext-v4.0-cs01.html) diff --git a/docs/report/analytics/analytics-recipes.md b/docs/report/analytics/analytics-recipes.md new file mode 100644 index 00000000000..c8d26c546d8 --- /dev/null +++ b/docs/report/analytics/analytics-recipes.md @@ -0,0 +1,82 @@ +--- +title: Analytics recipes | VSTS +description: Provides general queries for use with the Analytics service for VSTS +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 1320852A-5C62-4954-9E9D-508D670777A4 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +#Analytics service recipes + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +This topic provides a set of general queries that demonstrate various querying capabilities of the +analytics service and which also provides common queries which solve everyday needs. Most of these can be +adapted for different needs. + +**Retrieve the history of a work item** + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/_odata/WorkItemRevisions?$filter=WorkItemId eq [Id] +``` + +**Retrieve all work items in a given iteration** + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/_odata/WorkItems?$filter=Iteration/IterationPath eq '[iteration path]' +``` + +**Retrieve all work items in a given area** + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/_odata/WorkItems?$filter=Area/AreaPath eq '[area path]' +``` + +**Get the count of work items in each project** + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/_odata/WorkItems?$apply=groupby((Project/ProjectName), aggregate(Count with sum as Count)) +``` + +**Retrieve all work items for a given iteration which fall between the first day of the iteration and the last day of the iteration** + +This type of query is a little different in that you are constraining your query by data +contained with the data. + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/_odata/WorkItems?$filter=Iteration/IterationPath eq '[iteration path]' and Date/Date ge Iteration/StartDate and Date/Date le Iteration/EndDate +``` + +**Retrieve the data for a cumulative flow diagram** + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItemBoardSnapshot?$filter=BoardLocation/Team/TeamName eq '[team name]' +and BoardLocation/BoardName eq '[board reference name]'&$expand=Date,BoardLocation +``` + +**Retrieve all work items with a specific tag** + +Note that the **any** operator is used here because there are a collection of tags that can be associated with a work item. +From a usage perspective, the format is: **[Navigation Property]/any(d:d/[Field Name] [operator] [expression])**. Any item not surrounded by +brackets ([]) is a literal. There are some variations on this (for example, you don't have to use "d" as used in the expression above) +but following this format keeps it simple. + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItems?$filter=Tags/any(d:d/TagName eq '[tag name]') +``` + +**Retrieve all work items for a specific team** + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItems?$filter=Teams/any(d:d/TeamName eq '[team name]')&$select=WorkItemId,Title,State +``` +##Related notes + +- [WIT analytics](wit-analytics.md) +- [Aggregate data](aggregated-data-analytics.md) +- [Overview of the analytics service](overview-analytics-service.md) diff --git a/docs/report/analytics/analytics-security.md b/docs/report/analytics/analytics-security.md new file mode 100644 index 00000000000..115300bf360 --- /dev/null +++ b/docs/report/analytics/analytics-security.md @@ -0,0 +1,58 @@ +--- +title: Analytics service security, permissions | VSTS +description: Required permissions necessary to access the Analytics service and how to handle project access denied errors +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 868DC7E6-540C-4F9F-B4A3-7680F1C49FC9 +ms.manager: douge +ms.author: kaelli +ms.date: 05/21/2017 +--- + +# Permissions required to access the Analytics service + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +The Analytics service implements a subset of the security found in the VSTS operational store. The security container in the Analytics service is at the team project level. + +>[!NOTE] +>The Analytics service does not support security at the area path level. Therefore, if a user has access to a team project and can report on that project but they don't have access to work items in specific areas of that project, they can view data through the Analytics service. Therefore, to protect your data, the best practice is to not allow reporting against the Analytics service for any user who does not have access to all data within a team project. + +Security is granted by giving a user the **View analytics** permission in Visual Studio Team Services. + +Analytics Permission dialog + +**The whole truth or nothing at all** + +The Analytics service is designed to provide accurate data - not data trimmed by your security settings. + +For example, take the following scenario: + +Project A has 200 work items + +Project B has 100 work items + +If a user with access to both projects issues a query that says "give me the sum of all work items in Project A +and Project B" the result will be 300 which is as expected. Now, say that another user who only has access to +Project B makes the same query the expected results might be 100. However, the Analytics service will not return +a result at all in the latter case. Instead, it will return a "Project access denied" error. The reason for this is that +in requesting a specific set of data the service could not return the "truth" so it returns nothing at all. + +This behavior is different from that provided by the current Work Item Query editor which would return you all +the work items in Project B but nothing from Project A without informing you that there is missing data. + +Because of this scenario, the recommended approach for querying the Analytics Service is to always provide +a project level filter instead of using a global query. For information on providing a project level filter, see [WIT analytics](wit-analytics.md). + +##Related notes + +- [Power BI integration overview](../powerbi/overview.md) + + + diff --git a/docs/report/analytics/building-extension-against-analytics-service.md b/docs/report/analytics/building-extension-against-analytics-service.md new file mode 100644 index 00000000000..268a81d11f8 --- /dev/null +++ b/docs/report/analytics/building-extension-against-analytics-service.md @@ -0,0 +1,281 @@ +--- +title: Build a hub extension | VSTS +description: How to build a hub extension that calls the Analytics Service OData for Visual Studio Team Services (VSTS) from Power BI Desktop +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: B1CAEAB1-3D8F-44FA-A2FD-CA24695AEE86 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +# Build a hub extension + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Building an extension that calls the Analytics Service is identical to building any other extension. However, +in this early stage, a few things have to be done manually at this point - and then there's working +with the returned data. This documentation will show you how to do both. + +To build an extension, see [Write your first extension for VSTS](../../extend/get-started/node.md). +We won't be building a grid control to hold the results though - we'll be building a chart. For the purposes of this +example we'll use the open source C3 library which sits on top of D3. + +At the end of this walkthrough you will have a new hub called "Analytics Data" with a bar chart showing the count of work +items across all projects in your account. + +##Set up the project + +**Before beginning, download the following items:** + +* [Client SDK](https://github.com/microsoft/vss-sdk) +* [D3](https://github.com/mbostock/d3/releases/download/v3.5.13/d3.zip) +* [C3](https://github.com/masayuki0812/c3/archive/0.4.10.zip) + +### Create the web page + +1. Create a new folder called "Analytics Extension" +2. Unzip the Client SDK and copy the VSS.SDK.js file into the **Analytics Extension\sdk\scripts** folder +3. Unzip D3 and copy the d3.min.js file into the **Analytics Extension\scripts** folder +4. Unzip C3 and copy the c3.min.js file into the **Analytics Extension\scripts** folder +5. Add another folder called **images** to the Analytics Extension folder and copy an image you would like to use +as your extension image +6. Copy the c3.min.css file into the **Analytics Extension\content** folder +7. In the Analytics Extension folder create a new web page called **Analytics.html** +8. Copy the following html and javascript in the Analytics.html page + +``` + + + +Analytics Data + + + + + + + + +

        + + + +``` + +### Handle authentication + +For a more comprehensive discussion of authentication, see [Choosing the right authentication mechanism](/vsts/integrate/get-started/authentication/authentication-guidance). +To get an authorization token, replace the **Get authentication token** comment from the code above with the following: + +``` +//Get the access token and invoke a callback function +VSS.getAccessToken().then(function(token){ +// Get the token +var authToken = VSS_Auth_Service.authTokenManager.getAuthorizationHeader(token); + + + + +}); +``` + +Once the token is retrieved, you need to add it to the request for data from the Analytics Service. To do this, replace the +**Get analytics data** comment with the following: + + +``` + //Get the access token and invoke a callback function + VSS.getAccessToken().then(function(token){ + + // Get the token + var authToken = VSS_Auth_Service.authTokenManager.getAuthorizationHeader(token); + + //Get the account name so that we're calling a valid analytics service endpoint + var accountName = VSS.getWebContext().account.name; + + $.ajax({ + type: "GET", + url: "https://" + accountName + ".analytics.visualstudio.com/DefaultCollection/_odata/WorkItems?$apply=groupby((WorkItemType), aggregate(Count with sum as Count))", + contentType: "application/json; charset=utf-8", + dataType: "json", + beforeSend: function (xhr) { + xhr.setRequestHeader('Authorization', authToken); + } + }) + .success(function (data, textStatus, jqXHR) { + + }) + .error(function (jqXHR, textStatus, errorThrown) { + $("#chart").html(errorThrown); + }); + }); +``` + +This call uses the jQuery ajax function to call out to the Analytics Service and sets the content type and data type. The +beforeSend callback sets the authorization header with the token retrieved from the previous step. +The success and error callbacks are called respectively after the call to the Analytics Service is completed. + +Finally, to build the chart, replace the **Create the chart** comment with the following code: + +``` +//Retrieve the JSON data +var jsonData = JSON.parse(data); + +//Create the chart +var chart = c3.generate({ + bindto: '#chart', + data: { + //Set the data + json: jsonData.value, + keys: { + //Tell C3 that the x-axis is the WorkItemType value and that the value is Count + x: 'WorkItemType', + value: ['Count'] + }, + //Set the chart type and show labels + type: 'bar', + labels: true + }, + axis: { + //Make sure the x-axis is a category otherwise you can't set a textual value + x: { + type: 'category' + }, + y: { + label: { + text: 'Work Item Count', + position: 'outer-middle' + } + } + }, + legend: { + position: 'right' + } +}); +``` + +### Create the manifest + +Full documentation on extension manifests can be found in the [Extension manifest reference](/vsts/extend/develop/manifest) documentation. +For the purposes of this sample, use the following manifest and copy it into a file called vss-extension.json in the root folder. + +``` +{ + "manifestVersion": 1, + "id": "AnalyticsSampleAddIn", + "version": "0.1.0", + "name": "Analytics Sample", + "publisher": "", + "description": "An Analytics Service based extension", + "public": false, + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "icons": { + "default": "images/.png" + }, + "categories": [ + "Plan and track" + ], + "tags": [ + "Sample" + ], + "content": { + "details": { + "path": "overview.md" + }, + "license": { + "path": "license.md" + } + }, + "branding": { + "color": "blue", + "theme": "light" + }, + "scopes": [ + "vso.analytics" + ], + "contributions": [ + { + "id": "sampleChart", + "type": "ms.vss-web.hub", + "description": "Adds a sample analytics chart.", + "targets": [ + "ms.vss-work-web.work-hub-group" + ], + "properties": { + "title": "Analytics Sample", + "name": "Analytics Sample", + "uri": "Analytics.html" + } + } + ], + "files": [ + { + "path": "Analytics.html", + "addressable": true + }, + { + "path": "sdk/scripts", + "addressable": true + }, + { + "path": "images/.png", + "addressable": true + }, + { + "path": "scripts", + "addressable": true + }, + { + "path": "Content", + "addressable": true + } + ] +} + +``` + +**Remember to replace the publisher name and image name as appropriate. In this example the license.md and overview.md files +do exist but they have no content. They must exist otherwise the extension cannot be compiled into a VSIX pacakage.** + +There are a few key things to note here: +* This extension adds a work-hub-group (extension points are described in [Extension points](../../extend/reference/targets/overview.md)) +* The name of the hub is "Analytics Sample" and it will load the page "Analytics.html" +* The scope is **vso.analytics** which is the OAuth scope required to access the analytics service + +At this point the extension can be compiled, deployed, installed and executed following the steps described +in the [Create your first extension for VSTS](../../extend/get-started/node.md) documentation, starting from the Create your publisher section. + +Once the solution is deployed you should see something similar to the following: + +## Build a widget extension + +Widgets allow you to place items on a [dashboard](../dashboards.md) and to compose those items as required. Detailed information +on creating widget extensions can be found in [Building a dashboard widget that calls the Analytics Service](../../extend/develop/add-dashboard-widget.md). This topic covers how to call out to the analytics service specifically. \ No newline at end of file diff --git a/docs/report/analytics/client-authentication-options.md b/docs/report/analytics/client-authentication-options.md new file mode 100644 index 00000000000..2e8625aff8b --- /dev/null +++ b/docs/report/analytics/client-authentication-options.md @@ -0,0 +1,158 @@ +--- +title: Client authentication options | VSTS +description: Client authentication options to use when connecting to the Analytics service for VSTS using Power BI or Excel +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 91C6424B-3C3D-4773-B252-C627A5CE7C6D +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + + +# Client authentication options + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +In general, the order of authentication options should be the following (in order from most secure to least secure): Azure Active Directory (**AAD**) then Personal Access Tokens (**PAT**s) then Alternate Access Credentials (**AAC**s). + + + +## Azure Active Directory (AAD) + +"Azure Active Directory" is also known as "Organizational Credential" in Power BI Desktop. You can use it in [PowerBI.com](https://powerbi.microsoft.com) through “OAuth2” selection when configuring data refresh. + +When connecting with Power BI Desktop you will be prompted to enter your credentials for the data source. Click Organizational account as shown here: + +Organizational account prompt + +Click the Sign in button and you will be prompted to enter your AAD credentials. After that, you're done. + +To change an existing URL to use AAD instead of a PAT or AAC, see [Change authentication credentials](#update-credentials) later in this topic. + +### Publish to PowerBI.com + +After you have created the model and loaded it with data you can [publish it to Power BI](publishing-power-bi-desktop-to-power-bi.md). When using AAD, make sure to select +the **oAuth2** option. + +## Create a Personal Access Token + + Why use a Personal Access Token over an Alternate Access Credential? For these three reasons: + +- As part of good password management, these tokens automatically expire so you don't have to remember to change your password +- Since PATs are a generated password, you won't use a common password as part of your AAC, which means a more limited surface area for attack +- If you need to provide a diagnostic trace and forget to replace the value, you can simply revoke the credential thereby maintaining secure access to VSTS. + + +0. Log in to VSTS, and choose My security from your account menu options. + + User Profile, My Security menu option + +0. From the Personal access tokens page, click Add: + + Personal Access Tokens, Added + + +0. Click Add, and fill out the required information: + - Add a description + - Set the expiration period + - Select the account + - Choose Selected scopes + - Check the **Analytics (read)** + + And, then click Create Token. + + Create personal access token + +0. Copy the token that displays. If you navigate away from the page, you won't be able to retrieve it later. + + PAT created + +0. If you need to revoke a token, simply navigate to this page and click the **Revoke** link. That token will immediately be deniedaccess to VSTS. + + These tokens are your identity. When used, the token is acting as you. Keep your tokens secret and treat them like your password. To help keep your token more secure, consider using credential managers so that you don't have to enter your credentials every time you push. + + +## Create an Alternate Access Credential + +Alternate Access Credentials should be used as a last resort, but if you have to use them, do the following: + +0. From the Security page, open Alternate authentication credentials. + + Alternate Access Credentials + +0. Check Enabled alternate access credentials, enter a password, confirm the password and then click Save. + +## Enter credentials within a client + +Both Power BI and Excel work using Power Query when accessing OData, therefore the authentication mechanism, including the various +authentication screens are identical. This walkthrough is done using Power BI Desktop, however it also applies to Excel. + +1. Open **Power BI Desktop**. + +2. Click **Get Data**. + +3. Click **OData Feed** (or More > Other > OData Feed). + +4. Enter the URL for the OData endpoint and click **OK**. + + OData Feed URL + +5. In the authentication dialog, click Basic, enter your credentials, and then click **Connect**: + - If you are using an AAC, enter your username and password + - If you are using a PAT, enter a text string, such as "test" or "user" for the username and enter the token in the password field. + + Authentication information + + +## Change authentication credentials + +If you receive an access denied message, you may need to change your authentication credentials. Power Query caches your credential information so you only have to enter it once. However, Personal Access Tokens expire and you may need to update or change your authentication information. + +### Update credentials in Power BI Desktop + +1. Open **Power BI Desktop**. + +2. Click **File** > **Options and Settings** > **Data Source Settings**. Select the correct URL to the OData Feed and click **Edit**. + + Data source settings + +3. In the next **Data Source Settings** dialog, click the Edit button under the Credentials setting. + + Data source settings, 2nd dialog + +5. Edit the credentials as noted above, click **Save**, then **Done**, then **Close**. + +### Update credentials in Excel + +1. Open **Excel** and click the **Data** tab. + +2. Click **New Query** > **Data Source Settings...** + + Excel, Open Data source settings + +3. Select the correct URL to the OData Feed and click **Edit**. + + Excel, Data source settings + +5. In the next **Data Source Settings** dialog, click the Edit button under the Credentials setting. + + Data source settings, 2nd dialog + +6. Edit the credentials as noted above, click **Save**, then **Done**, then **Close**. + +## Related notes + +- [Analytics service overview](overview-analytics-service.md) +- [Authenticate your identity with personal access tokens](../../accounts/use-personal-access-tokens-to-authenticate.md) +- [Access data through Excel](access-analytics-excel.md) +- [Access data throughPower BI desktop](access-analytics-power-bi.md) +- [Publish a Power BI Desktop file to PowerBI.com](publishing-power-bi-desktop-to-power-bi.md) + diff --git a/docs/report/analytics/custom-calculations.md b/docs/report/analytics/custom-calculations.md new file mode 100644 index 00000000000..0aa39ad08b9 --- /dev/null +++ b/docs/report/analytics/custom-calculations.md @@ -0,0 +1,68 @@ +--- +title: Custom calculations with Power Query | VSTS +description: Adding custom columns with custom calculations in Power BI Desktop and Excel using Power Query +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 9EB84AC2-9A2B-43EF-821D-3418810F5D32 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +#Create custom calculations with Power Query + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + + +One of the benefits of using Power BI or Excel is the ability to add calculated fields to the +data set. There are several ways to add a calculated column and you can use either [Power Query](https://msdn.microsoft.com/en-us/library/mt211003.aspx) or +[DAX](https://support.office.com/article/Data-Analysis-Expressions-DAX-in-Power-Pivot-BAB3FBE3-2385-485A-980B-5F64D3B0F730). + +In this topic we'll add a simple but useful column - an Age In Days column. + +1. First, navigate to the correct location within the file: + - For Excel: [Access data through Excel](access-analytics-excel.md) + - For PowerBI: [Access data through Power BI desktop](access-analytics-power-bi.md). + +2. Choose to Edit Queries: + + **For Excel:** + + In the Workbook Queries pane (if this is not visible, select the Data tab and Show Queries), right-click WorkItems and click Edit. + + ![Edit Queries](_img/custom-queries-1.png) + + **For Power BI** + + From the Home tab, click Edit Queries. + + ![Edit Queries](_img/custom-queries-2.png) + +3. Select the **WorkItems** query from the query list + +4. On the **Add column** tab, click **Add Custom Column** + + ![Add Custom Column](_img/custom-queries-3.png) + +5. Enter the calculation as shown in the following image: + + ![Custom calculation](_img/custom-queries-4.png) + + This formula simply calculates the duration between the current date and time and when the work item was created. It then turns the duration into days. + +6. Click **OK** then click the **Home** tab. + +7. Select the AgeInDays column and change the data type to **Text**. + + ![Change the column type to Text](_img/custom-queries-5.png) + + We need to do this otherwise the application tries to sum this value when applied to axis which does not produce the desired results + +6. Click **Close & Apply** + + Then you can create a chart similar to the one below which shows a histogram of open bugs by age in days. + + ![Figure 9 ](_img/pbi9.png) + diff --git a/docs/report/analytics/data-model-analytics-service.md b/docs/report/analytics/data-model-analytics-service.md new file mode 100644 index 00000000000..cdef1ad6c50 --- /dev/null +++ b/docs/report/analytics/data-model-analytics-service.md @@ -0,0 +1,63 @@ +--- +title: Data model for the Analytics Service for VSTS +description: Describes the data sets, counts and calculated measures provided with the Analytics service for Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 032FB76F-DC43-4863-AFC6-F8D67963B177 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Data model for the Analytics service + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + + +The Analytics service data model consists of data sets, counts, and measures, as well as how data sets relate to each other. + +##Entities + +>[!NOTE] +>Information listed may differ from the entities shown as```https://[collection].analytics.visualstudio.com/DefaultCollection/_odata/$metadata```.   + +The entities support by the data model are as follows: + +| Entity | Description| +|--------|------------| +|Areas | A discrete list of area paths | +|BoardLocations | A discrete list of Kanban board columns | +|Dates | A date table for use in retrieving dates in a specific format (or filtering by dates) on related entities| +|Iterations | A discrete list of iteration paths| +|Projects | Contains a list of all of the projects| +|Tags | A discrete list of tags related to work items| +|Teams | Contains a list of all teams| +|WorkItemBoardSnapshot | A list of all revisions for all work items (including the current revision)| +|WorkItemLeadTime | | +|WorkItemLinks | Contains link information (all types are supported) for work items only (no hyperlinks for example)| +|WorkItemRevisions | A list of all revisions for all work items (including the current revision)| +|WorkItemLinks | Contains link information (all types are supported) for work items only (no hyperlinks for example)| +|WorkItems | The current list of work items| +|WorkItemSnapshot | The state of each work item on each calendar. Use this entity for trend reporting. | +|Users | A discrete list of users related to various work item fields (i.e. assigned to, created by, etc.)| + + +##Relationships + +The entity model for this is fairly complex and is difficult to understand without an interactive model. This is because entities play +different roles depending on the starting point. For example, a Project contains Teams, Areas and Iterations. However, Teams also "own" a subset of these Iterations and Areas and they can overlap a given team. + +The following image proves a snapshot of the current data model; only keys and navigation properties are shown here. + +![Analytics Service Data Model](_img/datamodel.png) + + +##Related notes + +- [WIT analytics](wit-analytics.md) +- [Aggregate data](aggregated-data-analytics.md) +- [Overview of the analytics service](overview-analytics-service.md) + + diff --git a/docs/report/analytics/overview-analytics-service.md b/docs/report/analytics/overview-analytics-service.md new file mode 100644 index 00000000000..ea4166dff07 --- /dev/null +++ b/docs/report/analytics/overview-analytics-service.md @@ -0,0 +1,233 @@ +--- +title: Analytics service overview | VSTS +description: Overview of the Analytics service for VSTS +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 0A9D0E48-64B4-4D90-933B-E0EBFC3FA3D4 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Analytics Service overview + + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +The Analytics service provides a concise OData model over the VSTS suite—Work Item Tracking, Test, Version Control, Release and Build. You can use it to answer quantitative questions regarding past or present state and velocity of your projects. It is built upon a near real-time reporting warehouse hosted in the cloud and optimized for fast read-access and support of server-based aggregations. + +You can learn more from one of these topics: + + +> [!div class="mx-tdBreakAll"] +> |Basics |Client access |Query access| Extensions | +> |-------------|----------|---------|---------| +> |- [Data model](data-model-analytics-service.md)
        - [Security](analytics-security.md) |- [Client authentication options](client-authentication-options.md)
        - [Excel](access-analytics-excel.md)
        - [Power BI desktop](access-analytics-power-bi.md)
        - [PowerBI.com](publishing-power-bi-desktop-to-power-bi.md)
        - [Power BI desktop and OData aggregations](using-odata-aggregations-with-power-bi-desktop.md)
        - [Create custom calculation](custom-calculations.md) |- [WIT analytics](wit-analytics.md)
        - [Analytic recipes](analytics-recipes.md)
        - [Aggregated data](aggregated-data-analytics.md)
        - [Query for trend data](querying-for-trend-data.md)
        - [Work item links](work-item-links.md) |- [Hub extension](building-extension-against-analytics-service.md)
        - [Dashboard widget](widget-extensions-against-analytics-service.md)
        - [Add configuration](widget-extension-against-analytics-service-configuration.md) | + +## Available data + +For more information about the following entities, see [data model](data-model-analytics-service.md). + +- Areas +- Dates +- Iterations (including start/end dates) +- Kanban data +- Links: + - Parent/child link relationships *New!* + - Related links *New!* +- Work Item Snapshots for trend reporting +- Work Item Board (Kanban) Snapshots for trend reporting +- Tags *New!* +- Team projects +- Teams (including owned areas/iterations) +- User information for work item fields (Assigned To, Created By, etc.) *New!* +- Work items +- Work item revisions +- Custom fields *New!* + + +## Supported entities and metadata + +This information can also be found by going to the service root url endpoint. The endpoint is: + +*AccountName*```.analytics.visualstudio.com/DefaultCollection/_odata ``` + +So, for the *FabrikamFiber* account: + +``` +fabrikamfiber.analytics.visualstudio.com/DefaultCollection/_odata +``` + +>[!NOTE] +>The OData Analytics Service URL is case sensitive. + +Accessing this URL returns a metadata document similar to the following: + +``` +{ + "@odata.context":"https://fabrikamfiber.analytics.visualstudio.com/DefaultCollection/_odata/$metadata","value":[ + { + "name":"WorkItems","kind":"EntitySet","url":"WorkItems" + },{ + "name":"WorkItemRevisions","kind":"EntitySet","url":"WorkItemRevisions" + },{ + "name":"WorkItemSnapshot","kind":"EntitySet","url":"WorkItemSnapshot" + },{ + "name":"WorkItemBoardSnapshot","kind":"EntitySet","url":"WorkItemBoardSnapshot" + },{ + "name":"WorkItemLeadTimes","kind":"EntitySet","url":"WorkItemLeadTimes" + },{ + "name":"Dates","kind":"EntitySet","url":"Dates" + },{ + "name":"Projects","kind":"EntitySet","url":"Projects" + },{ + "name":"Iterations","kind":"EntitySet","url":"Iterations" + },{ + "name":"Areas","kind":"EntitySet","url":"Areas" + },{ + "name":"Tags","kind":"EntitySet","url":"Tags" + },{ + "name":"Teams","kind":"EntitySet","url":"Teams" + },{ + "name":"BoardLocations","kind":"EntitySet","url":"BoardLocations" + },{ + "name":"WorkItemLinks","kind":"EntitySet","url":"WorkItemLinks" + },{ + "name":"Users","kind":"EntitySet","url":"Users" + } + ] +} +``` +
        +To access detailed metadata, add ```$metadata``` to the end of the URL: + +``` +https://fabrikamfiber.analytics.visualstudio.com/DefaultCollection/_odata/$metadata +``` +
        +This returns a fully qualified XML document which describes all entities, fields, and relationships. + +## OData + +OData supports access to the Analytics service through an [OData v4](http://docs.oasis-open.org/odata/odata/v4.0/odata-v4.0-part2-url-conventions.html) +interface with [aggregation extensions](http://docs.oasis-open.org/odata/odata-data-aggregation-ext/v4.0/cs01/odata-data-aggregation-ext-v4.0-cs01.html). + +Currently, updates are pulled from the operational store every 15 minutes. Our goal is to reduce this to 30 seconds using a push model; we aren't there yet. + +For details and examples on using OData with the Analytics Service, see [WIT analytics](wit-analytics.md). + + +## Supported OData functions + +The following table summarizes the supported and unsupported OData functions. + +> [!NOTE] +> OData aggregation extensions are relatively new and either not supported by various client tools (yet) or full support for the extension is not supported by the Analytics Service. +  + + + + + + + + + + + + +
        Implemented Not implemented
        +- ```$count``` (not in aggregation extensions) +- ```$apply``` (partially) +- ```$aggregate``` +- ```groupby``` +- ```filter``` +- ```average``` +- ```countdistinct``` +- ```max``` +- ```min``` +- ```sum``` +- ```$filter``` +- ```$expand``` + +*Canonical functions:* +- ```contains``` +- ```endswith``` +- ```startswith``` +- ```length``` +- ```indexof``` +- ```substring``` +- ```tolower``` +- ```toupper``` +- ```trim``` +- ```concat``` +- ```year``` +- ```month``` +- ```day``` +- ```hour``` +- ```minute``` +- ```second``` +- ```fractionalseconds``` +- ```date``` +- ```time``` +- ```totaloffsetminutes``` +- ```maxdatetime``` +- ```mindatetime``` +- ```totalseconds``` +- ```round``` +- ```floor``` +- ```ceiling``` +- ```isof``` +- ```cast``` + + + +- ```concat``` +- ```$search``` +- ```$rollup``` +- ```isdefined``` +- ```$crossjoin``` +- ```now``` +- ```topcount``` +- ```topsum``` +- ```toppercent``` +- ```bottomcount``` +- ```bottomsum``` +- ```bottompercent``` +
        + + +You use OData functions in a ```filter``` clause, but not in a ```$select``` clause the way that you would use them in a SQL statement. + +For example, you can specify: + +``` +/WorkItems?$filter=toupper(Title) eq 'HELP' +``` +However, you can't enter the following: +``` +/WorkItems?$select=WorkItemId,State,toupper(Title) +``` + +## Related notes +>[!NOTE] +>The Analytics Service is on a 15 minute refresh schedule. + +- [WIT analytics](wit-analytics.md) +- [Aggregate data](aggregated-data-analytics.md) +- [OData Version 4.0 Part 2: URL Conventions Plus Errata 02](http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part2-url-conventions/odata-v4.0-errata02-os-part2-url-conventions-complete.html) + + + diff --git a/docs/report/analytics/publishing-power-bi-desktop-to-power-bi.md b/docs/report/analytics/publishing-power-bi-desktop-to-power-bi.md new file mode 100644 index 00000000000..3307466879b --- /dev/null +++ b/docs/report/analytics/publishing-power-bi-desktop-to-power-bi.md @@ -0,0 +1,75 @@ +--- +title: Publish a Power BI Desktop file to PowerBI.com | VSTS +description: How to publish and enable refresh of a Power BI Desktop file to PowerBI.com that uses the Analytics Service for VSTS +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: C03A04EC-F011-4043-A38E-5C5394F777CE +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Publish a Power BI Desktop file to PowerBI.com + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Once you've [created a Power BI Desktop file](access-analytics-power-bi.md) and the associated charts and tables, you can share those with others by creating a dashboard on PowerBI.com. This process walks you through how to do that. + +0. Open the **Power BI Desktop** file with your data. + +0. Click **Publish** on the **Home** tab. + + Publish Power BI Desktop file + +0. You will be prompted to Sign in or create and if you don't have a Power BI account you can create one. Click **Sign in** + + If you are already signed in, the dialog will go away and you will see a Publishing to Power BI message. + After the publishing is complete you'll see a success message. + + ![Publishing successful](_img/publish-2.png) + +0. Click the **Open 'file name' in Power BI** link + +0. Expand the navigation pane in Power BI and select the work space that you selected when you published the report. + +0. Click **Datasets** in the upper right corner. + +0. Click the ellipsis next to the dataset that represents the report you just loaded (this is typically the file name. + + Select the dataset + +0. Click **Schedule Refresh**. + +0. Click the Edit credentials link next to ODATA under Data source credentials as shown here: + + ![Update odata credentials](_img/publish-4.png) + +0. Select the appropriate authentication option (as discussed in [Client Authentication Options](client-authentication-options.md)). +* Use **oAuth2** for Azure Active Directory (AAD) credentials. + + vt + +* Use **Basic** for PAT credentials + + ![Enter credentials](_img/publish-5.png) + + See [Client Authentication Options](client-authentication-options.md) for more information on acquiring credentials. + +0. Click **Sign in**. + +At this point the data will update on your scheduled basis using the credentials entered. + +>[!IMPORTANT] +>If you are using a Personal Access Token, remember that the token expires on a set interval. When it expires you'll need to [update the credentials](client-authentication-options.md#update-credentials). Otherwise the report, while still displaying data, won't update with the latest data. + + + +## Related notes + +- [Analytics service overview](overview-analytics-service.md) +- [Client Authentication Options](client-authentication-options.md) +- [Authenticate your identity with personal access tokens](../../accounts/use-personal-access-tokens-to-authenticate.md) +- [Access data through Excel](access-analytics-excel.md) +- [Access data throughPower BI desktop](access-analytics-power-bi.md) diff --git a/docs/report/analytics/querying-for-trend-data.md b/docs/report/analytics/querying-for-trend-data.md new file mode 100644 index 00000000000..3b92614093f --- /dev/null +++ b/docs/report/analytics/querying-for-trend-data.md @@ -0,0 +1,105 @@ +--- +title: Query for trend data | VSTS +description: How to query the Analytics service for trend data and consume it in a client tool when working from Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: FEF88D72-32D7-4DE8-B11E-BCB1A491C3FC +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Query for trend data + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Examining trends in data and making period-over-period comparisons are two of the most interesting aspects of data analysis. The Analytics service supports this capability fully. It does, depending on what you are trying to accomplish, require some manual work at this point in time. + +Trend data is captured in the WorkItemSnapshot and WorkItemBoardSnapshot entities. They are constructed such that every work item, from the day it was created until today, exists for each day. This means that for an account with only one work item that was created a year ago, there are 360 rows in this entity. + +For any project of size, this entity will be far too large to load into a client tool. + +What is the solution? Aggregation Extensions. + +Using the OData Aggregation Extensions, you can distill the data +on the server and return only the aggregated data thereby making the data manageable. Let's +take a basic scenario - showing bug trends for the month of March. Bug trends are a common and critical part of managing any project so you can put this to good use immediately. + +See the topic [Aggregate data](aggregated-data-analytics.md) for more detailed information on +constructing aggregation queries. + +##Construct the basic query +There are some basic requirements you need to effectively query the WorkItemSnapshot table: +* The data needs to be filtered by date +* The aggregation should group by, at the very least, date + +With this in mind, the query to create a bug trend report looks like the following: + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItemSnapshot?$apply=filter(Date/Date ge 2016-03-01 and Date/Date le 2016-03-31 and WorkItemTyp eq 'Bug')/groupby((Date/Date,State), aggregate(Count with sum as Count))&$orderby=Date/Date +``` + +This query will produce at most, 31 * number of bug states. The default bug has three states +(Active, Resolved and Closed) which means at most, this query will return 93 rows no matter +how many thousands of records actually exist. This provides a much more compact form of returning data and it also loads faster into client tools. + +Before walking you through how to use this in a client tool, let's look at a variation on this example. You want to see the bug trend for an iteration or a release which starts with one iteration and ends with another. + +To construct that query, do the following: + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItemSnapshot?$apply=filter(Iteration/IterationName eq 'Sprint 99')/filter(Date/Date ge Iteration/StartDate and Date/Date le Iteration/EndDate and WorkItemType eq 'Bug')/groupby((Date/Date,State), aggregate(Count with sum as Count))&$orderby=Date/Date +``` + +In this query, there are two key differences. We added a filter clause to filter the data to a specific iteration and the dates are now being compared to the iteration start and end dates versus a hard coded date. + +>[!NOTE] +>Using Power Query you can craft the query such that it provides a rolling chart using a formal, such as, todays date minus 30 days for a rolling 30 day chart. + +Now that we have a basic query that we can use, it's time to jump into a client tool. For this walkthrough I will use Power BI, but the same applies to Excel. + +##Query for trend data in Power BI Desktop + +1. Open Power BI Desktop and select Get Data. + + ![Get data in Power BI Desktop](_img/pbi1.png) + +2. For this step you can choose either Web or OData Feed. Each has benefits over the other. For simplicity, we'll choose OData Feed. + + ![OData Feed](_img/pbi2.png) + +3. For the query, enter the query you crafted for your project which matches one of the above queries and click OK. + +4. When the preview is shown, click **Edit**. + + You'll note that this loads as "Query 1" rather than the WorkItemSnapshot table. You can rename this query in the Query Editor. + + What's unique about this approach is that the table that is created (Query1) will contain all of the columns from the WorkItemSnapshot entity even though it only shows data in the Date, Count and State columns. + +5. Find the Date column and expand it, selecting only the Date column as shown below (it will also rename the column to Date.1). + + ![Expand the Date column](_img/pbi11.png) + +6. Click **OK**. + +7. Click **Close and Apply**. + + Now we can construct the chart. + +8. In the Field List, select Count (this will create a bar chart). + +9. Drag the State to the Legend area. + +10. Add Date.1 to the Axis area, click the drop down next to the date and select Date.1 as shown here. + + ![Remove the date hierarcy](_img/pbi12.png) + + This removes the date hierarchy which otherwise acts as a drilldown function which we do not want here. + +11. Change the chart to a line chart and you now have an excellent bug trend chart as shown here. + + ![The completed bug trend chart](_img/pbi13.png) + + Note that the Closed state has been filtered out for presentation purposes. \ No newline at end of file diff --git a/docs/report/analytics/using-odata-aggregations-with-power-bi-desktop.md b/docs/report/analytics/using-odata-aggregations-with-power-bi-desktop.md new file mode 100644 index 00000000000..f8bf846cc2f --- /dev/null +++ b/docs/report/analytics/using-odata-aggregations-with-power-bi-desktop.md @@ -0,0 +1,83 @@ +--- +title: Using OData aggregations with Power BI Desktop | VSTS +description: Describes how to call the Analytics Service using aggregations extensions for the most flexibility +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 48FFCA0B-D30B-4C59-B057-0B130577912F +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +#Using OData Aggregations with Power BI desktop + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Currently, Power Query (the underlying technology in both Power BI Desktop and Excel) does not support OData Aggregation Extensions. +However, Power Query is extremely flexible and as such has an easy mechanism for allowing this content to be used. This article +walks you through this process. + +In order to use Aggregation Extensions with Power BI Desktop, you must create the URL by hand which requires knowledge of [OData](wit-analytics.md) and the +[Aggreation Extensions](aggregated-data-analytics.md) specifically. Please review these two topics before continuing. + +For the purposes of this walkthrough, we'll create a simple aggregation query which returns the count of work items by Work Item Type and State. The URL for this query is shown below. + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project name]/_odata/WorkItems?$apply=groupby((WorkItemType,State), aggregate(Count with sum as Count)) +``` + +Execute this query in your browser to make sure it works first. Replace the account and project names with the appropriate values. + +Now that we have the query, it's time to make use of it. Follow these steps to be able to retrieve this data in Power BI Desktop: + +1. Open **Power BI Desktop** + +2. Click **Get Data** + + ![Power BI Get Data](_img/access-analytics-pbi-get-data.png) + +3. Select **Other** > **Web** + + ![Select Web](_img/aggregated-1.png) + +4. In the **From Web** dialog, paste the URL for the query and click **OK** + + ![From Web dialog](_img/aggregated-2.png) + +5. If prompted for credentials, see the article [Client Authentication Options](client-authentication-options.md) and enter the appropriate credentials. + + The query editor will open and look like the following: + + ![Initial query results](_img/aggregated-3.png) + +6. Click the **list** link in the query results. + +7. Click **To Table** from the **Transform** tab. + + ![Turn the results into a list](_img/aggregated-4.png) + +8. Click **OK** on the **To Table** dialog. + + ![Transform the results into a table](_img/aggregated-5.png) + +9. Click the **Column Expander** in the query results. + + ![Results as a table](_img/aggregated-6.png) + +10. In the Expand dialog, uncheck @odata.id and uncheck the Use original column name as prefix checkbox and click **OK**. + + ![Expand the column](_img/aggregated-7.png) + + This will result in the data being shown, nicely formatted in columns without any extraneous information. At this point, you can rename the query (on the right under Properties) to something more meaningful but that isn't required. + + ![Expand the column options](_img/aggregated-8.png) + +11. Finally, change the data type of the Count column from Any to Whole Number. + + ![Change count data type](_img/aggregated-9.png) + +12. Click **Close & Apply** from the **Home** tab. + +At this point you can now create charts and graphs based on the data and publish this file to Power BI by following the topic [Publishing Power BI Desktop to Power BI](publishing-power-bi-desktop-to-power-bi.md). \ No newline at end of file diff --git a/docs/report/analytics/widget-extension-against-analytics-service-configuration.md b/docs/report/analytics/widget-extension-against-analytics-service-configuration.md new file mode 100644 index 00000000000..ddf7642cb1b --- /dev/null +++ b/docs/report/analytics/widget-extension-against-analytics-service-configuration.md @@ -0,0 +1,532 @@ +--- +title: Add configuration to an extension | VSTS +description: How to add configuration options to an extension that calls the Analytics Service +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 5B665450-00DB-4F59-9948-BDA0BDF8EEC7 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +# Add configuration to an extension that calls the Analytics Service + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +[Access analytics data through a dashboard widget extension](widget-extensions-against-analytics-service.md) describes how to create a chart that pulls a +pre-determined set of data from the analytics service. Rarely will consumers of your extension want to pull just the data +that has been coded into the widget. Therefore, you can give your users the ability to alter the data returned and to chart that appropriately. + +In this topic, we'll take the chart on the left and give users the ability to slice it by another data point creating the chart on the right. We'll also let the user change the title of the widget. + +![First widget extension](_img/widget-extension-2.png) + +![New widget extension](_img/widget-extension-3.png) + +To do this you need to add a configuration page, populate it with options, store those options and communicate them back to the widget. Finally, you need to register the +configuration page as part of the extension and associate it with the widget. + +**Add a configuration page** + +Add a new HTML page in the root of your project (the same folder that Analytics.html is in) called **Configuration.html**. Add a corresponding **configuration.js** file in the +**scripts** folder. + +**Note: Because you can have many widgets in a single extension it is advisable to call each configuration page a specific name to associate it with the correct widget. +This goes for any javascript files as well so it's easier to locate the related files.** + +Add the following HTML to the **configuration.html** page: + +``` + + + + + + +
        +
        + +
        + +
        +
        + +
        + +
        +
        + +
        + +
        +
        + + + + +``` + +Append some additional css to the **widget.css** file: + +``` +.label { + font-family: "Segoe UI"; + font-size: 12px; + color: black; +} + +.userInput { + width: 80%; + margin-bottom: 20px; +} +``` + +Copy the following code to the **configuration.js** page: + +``` +VSS.init({ + explicitNotifyLoaded: true, + usePlatformStyles: true +}); + +VSS.require(["TFS/Dashboards/WidgetHelpers", "VSS/Authentication/Services"], function (WidgetHelpers, VSS_Auth_Service) { + VSS.register("analyticsWidget.Configuration", function () { + return { + load: function (widgetSettings, widgetConfigurationContext) { + //Set up the configuration pane + + //Restore the saved settings + + //Notify the widget that the configuration has changed + + }, + onSave: function () { + return WidgetHelpers.WidgetConfigurationSave.Valid(getCustomSettings()); + } + } + }); + VSS.notifyLoadSucceeded(); +}); + +function loadSelector(selector, dataList, addNone) { + var optionList = ""; + if (addNone) { + optionList += ""; + } + + for (var i = 0; i < dataList.length; i++) { + optionList += ""; + } + + selector.html(optionList); +} + +function getCustomSettings() { + return { + data: JSON.stringify({ + widgetTitle: $("#widgetTitleInput").val(), + groupBy: $("#groupBySelector").val(), + category: $("#categorySelector").val() + }) + } +} +``` + +The code here is virtually identical in many respects to the code in the actual widget. But, there are a couple of minor differences. + +* The register function returns a load and an onSave function +* onSave calls WidgetConfigurationSave.Valid and returns custom settings instead of calling success or error + +The onSave function calls the reload function in the widget (which hasn't been coded yet) and this is how the configuration communicates changes to the widget. + +The load function has to do four things: + +* Set up the configuration pane +* Restore the saved settings +* Notify the widget that the configuration has changed +* Save any changes to the settings and communicate them to the widget + +The loadSelect and getCustomSettings functions are simply small functions that keep everything cleaner. + +The **loadSelector** function will simply load the fields that the widget will allow a user to choose from for the categories +and groups. + +The **getCustomSettings** function simply returns a string with the configuration data so it can be saved by the configuration +window and passed back to the widget. + +In this widget we'll give the users a basic list of items they can select from for the group and category aspects of the bar chart. We also want the user to +be able to say that they only want to categorize the values and don't want to group by anything else (i.e. a standard bar chart versus a stacked bar chart). + +**Set up the drop down lists** + +Replace the **//Set up the configuration pane** comment with the following code: + +``` +var dataList = []; +dataList.push({ name: "Area", value: "Area/AreaName" }); +dataList.push({ name: "Iteration", value: "Iteration/IterationName" }); +dataList.push({ name: "State", value: "State" }); +dataList.push({ name: "Work Item Type", value: "WorkItemType" }); + +loadSelector($("#categorySelector"), dataList, false); +loadSelector($("#groupBySelector"), dataList, true); +``` + +This code simply provides the users with two drop downs to select the category and group for the chart. Note that the +"value" of the option is the item needed by the analytics service to group the data, that's why the value for Area +is **Area/AreaName** because it is a navigation property from the WorkItems entity to the Areas entity. This code also +adds a **(none)** option to the group by selector. When a user has (none) selected they will get a standard bar chart +instead of a stacked area bar chart. + +**Read the settings data and restore the selections** + +Replace the **//Restore the saved settings** comment with the following code: + +``` +var settings = JSON.parse(widgetSettings.customSettings.data); + +if ((settings != null) && (settings.groupBy != null)) { + $("#categorySelector").val(settings.category); +} +else { + $("#categorySelector").val(""); +} + +if ((settings != null) && (settings.groupBy != null)) { + $("#groupBySelector").val(settings.groupBy); +} +else { + $("#groupBySelector").val("WorkItemType"); +} +``` + +The first line reads the settings data. The next two blocks check to see that a) there were settings (which you won't have +on a new install of the widget) and b) that there are settings for the category and group by and if not, it sets the +drop downs to default values. + +Finally, the configuration needs to notify the widget that it has changed. Replace the **//Notify the widget that the configuration has changed** +comment with the following code: + +``` +$("#widgetTitleInput").change(function () { + var eventName = WidgetHelpers.WidgetEvent.ConfigurationChange; + var eventArgs = WidgetHelpers.WidgetEvent.Args(getCustomSettings()); + widgetConfigurationContext.notify(eventName, eventArgs); +}); + +$("#categorySelector").change(function () { + var eventName = WidgetHelpers.WidgetEvent.ConfigurationChange; + var eventArgs = WidgetHelpers.WidgetEvent.Args(getCustomSettings()); + widgetConfigurationContext.notify(eventName, eventArgs); +}); + +$("#groupBySelector").change(function () { + var eventName = WidgetHelpers.WidgetEvent.ConfigurationChange; + var eventArgs = WidgetHelpers.WidgetEvent.Args(getCustomSettings()); + widgetConfigurationContext.notify(eventName, eventArgs); +}); +``` + +For simplicity purposes, this code could be abstracted into a re-usable method but this works for demonstration +purposes. Essentially, when any control on the configuration page changes, get the settings and raise an event to +the widget. In this case the widgetConfigurationContext.notify triggers the **reload** function in the widget to +be called. + +At this point the configuration page is done. Time to switch back to the **analytics.js** file to accept data from +a configuration and respond to changes of the configuration. + +**Revisiting the widget** + +Now that the widget actually has settings, replace the load function with the following code: + +``` +load: function (widgetSettings) { + var titleDiv = $("#title"); + var settings = JSON.parse(widgetSettings.customSettings.data); + + if (!settings || !settings.widgetTitle) { + titleDiv.text('Count of Work Items by Type'); + } + else { + titleDiv.text(settings.widgetTitle); + } + + createChart(VSS_Auth_Service, WidgetHelpers, widgetSettings); + + return WidgetHelpers.WidgetStatusHelper.Success(); +}, +``` + +This code is the same code that was there before, except now the settings are being read and the title of the widget is +being set dynamically (or given a default if it was never configured before). The other change is that the **createChart** +method has been updated to accept one more parameter - the **widgetSettings**. + +Next, replace the **//Widget reload function** comment with the following code: + +``` +reload: function (widgetSettings) { + var titleDiv = $("#title"); + var settings = JSON.parse(widgetSettings.customSettings.data); + + if (!settings || !settings.widgetTitle) { + titleDiv.text('Count of Work Items by Type'); + } + else { + titleDiv.text(settings.widgetTitle); + } + + createChart(VSS_Auth_Service, WidgetHelpers, widgetSettings); + + return WidgetHelpers.WidgetStatusHelper.Success(); +} +``` + +This code, not so oddly enough, is identical to the load function. Refactoring this to a single set of code that is called +from both places is a good idea! + +**Creating the chart** + +For the updated chart, quite a bit of work needs to be done. The following changes are needed: + +1. Allow for the user to include a grouping value or not which means dynamically constructing the group by clause of the +query string +2. If the widget is configured to include a group by, pivot the data to the format that C3 expects + +For the purposes of this walkthrough, delete the code from the existing createChart function and replace it with the +following: + + + + + +This work is dependent on the charting framework that you +use. Some of the frameworks don't require this type of manipulation. For any D3 based charting framework, the data is +expected in a very specific form for stacked bar charts and this is not the form that the analytics service returns. + +The analytics service returns data in this form (in part): + +``` +{ + "@odata.id": null, + "WorkItemType": "User Story", + "State": "Active", + "Count": 1 +}, { + "@odata.id": null, + "WorkItemType": "User Story", + "State": "Closed", + "Count": 1 +} +``` + +However, D3 based frameworks expect the data in this form (for a stacked bar chart): + +``` +{ +["Active", 1, 2, 3], +["Resolved", 4, 5, 6] +} +``` + +The first element is the group and the remaining columns correspond with the categories which are not even +defined in this set of data. Because of this, a bit of data manipulation has to be done when presenting a stacked bar +chart. + +With this in mind, replace the entire **createChart** function with the following code: + +``` +function createChart(VSS_Auth_Service, WidgetHelpers, settings) { + VSS.getAccessToken().then(function (token) { + authToken = VSS_Auth_Service.authTokenManager.getAuthorizationHeader(token); + + var accountName = VSS.getWebContext().account.name; + var projectName = VSS.getWebContext().project.name; + var groupBy = ""; + var category = ""; + var groupByClause = ""; + + //Create the groupby clause + if ((settings != null) && (settings.category != "")) { + category = settings.category; + } + else { + category = "WorkItemType"; + } + + groupByClause = category; + + if ((settings != null) && (settings.groupBy != "")) { + groupBy = settings.groupBy; + groupByClause = category + "," + groupBy; + } + else { + groupBy = ""; + } + + var urlString = "https://" + accountName + ".analytics.visualstudio.com/DefaultCollection/" + projectName + + "/_odata/WorkItems?$apply=groupby((" + groupByClause + "), aggregate(Count with sum as Count))"; + + $.ajax({ + type: "GET", + url: urlString, + contentType: "application/json; charset=utf-8", + dataType: "json", + beforeSend: function (xhr) { + xhr.setRequestHeader('Authorization', authToken); + } + }) + .success(function (data, textStatus, jqXHR) { + var jsonData = data.value; + var final = []; + + //Read the categories and if a group was specified, read that too + //We'll end up with an array of data for the categories and groups + var groups = []; + var categories = []; + //Get the groups and categories + for (var i = 0; i < jsonData.length; i++) { + if (categories.indexOf(jsonData[i][category]) == -1) { + categories.push(jsonData[i][category]); + } + if (groupBy != "") { + if (groups.indexOf(jsonData[i][groupBy]) == -1) { + groups.push(jsonData[i][groupBy]); + } + } + } + + categories.sort(); + + if (groupBy != "") { + groups.sort(); + //Convert the array into the expected format + for (var j = 0; j < groups.length; j++) { + var tempData = []; + tempData.push(groups[j]); + for (var k = 0; k < categories.length; k++) { + var found = false; + for (var i = 0; i < jsonData.length; i++) { + if (jsonData[i][groupBy] == groups[j]) { + if (jsonData[i][category] == categories[k]) { + tempData.push(jsonData[i].Count); + found = true; + break; + } + } + } + if (!found) { + tempData.push(null); + } + } + final.push(tempData); + } + + //generate the chart if using groups + var chart = c3.generate({ + bindto: '#chart', + data: { + columns: final, + groups: [ + groups + ], + type: 'bar', + labels: true + }, + axis: { + x: { + type: 'category', + categories: categories + }, + y: { + label: { + text: 'Work Item Count', + position: 'outer-middle' + } + } + }, + legend: { + position: 'bottom' + } + }); + } + else { + //Generate the chart in the "standard" way if not using groups + var chart = c3.generate({ + bindto: '#chart', + data: { + json: jsonData, + keys: { + x: category, + value: ['Count'] + }, + type: 'bar', + labels: true + }, + axis: { + x: { + type: 'category' + }, + y: { + label: { + text: 'Work Item Count', + position: 'outer-middle' + } + } + }, + legend: { + position: 'bottom' + } + }); + } + + + }) + .error(function (jqXHR, textStatus, errorThrown) { + return WidgetHelpers.WidgetStatusHelper.Failure(errorThrown); + }); + }); +} +``` + +At this point the code is complete and it's time to register the configuration with the extension so that +the configuration is associated with this widget. In the vss-extension.json file, update the analyticsWidget +contribution so that the **targets** section reads as follows: + +``` +"targets": [ + "ms.vss-dashboards-web.widget-catalog", + "..analyticsWidget.Configuration" + ], +``` + +The key item here is that we're adding the configuration as a target of the widget. In this case the +extension ID is "sampleODataWidget". + +Next, add the following +contribution to the file: + +``` +{ + "id": "analyticsWidget.Configuration", + "type": "ms.vss-dashboards-web.widget-configuration", + "targets": [ "ms.vss-dashboards-web.widget-configuration" ], + "properties": { + "name": "Analytics Widget Configuration", + "description": "Configures the Analytics Widget", + "uri": "Configuration.html" + } +} +``` + +And finally, include the Configuration.html in the manifest: + +``` +{ + "path": "Configuration.html", + "addressable": true +}, +``` + +Deploy the widget and configure it! \ No newline at end of file diff --git a/docs/report/analytics/widget-extensions-against-analytics-service.md b/docs/report/analytics/widget-extensions-against-analytics-service.md new file mode 100644 index 00000000000..d90fb7773ca --- /dev/null +++ b/docs/report/analytics/widget-extensions-against-analytics-service.md @@ -0,0 +1,347 @@ +--- +title: Build a dashboard widget that calls the analytics service | VSTS +description: How to access Analytics Service OData for Visual Studio Team Services (VSTS) from a dashboard widget extension +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: CA782CE8-2BDF-4CDE-BEC7-F3FCF761B1A9 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +# Build a dashboard widget extension that calls the Analytics Service + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Building an dashboard widget extension that calls the Analytics Service is identical to building any other extension. However, +in this early stage, a few things have to be done manually at this point - and then there's working +with the returned data. This documentation will show you how to do both. + +The following topics describe how to build an extension and a widet extension: +- [Overview of extensions for Visual Studio Team Services](../../extend/get-started/node.md) +- [Add a dashboard widget](../../extend/develop/add-dashboard-widget.md) + +For the purposes of this example we'll use the open source C3 charting library which sits on top of the D3 graphics library. + +At the end of this walk-through you will have a working dashboard widget which allows you to decompose work in several different ways in a column chart. + +##Set up the project + +**Before your begin, download the following items:** + +* [Client SDK](https://github.com/microsoft/vss-sdk) +* [D3](https://github.com/mbostock/d3/releases/download/v3.5.13/d3.zip) +* [C3](https://github.com/masayuki0812/c3/archive/0.4.10.zip) + +**Create the widget page** + +1. Create a new folder called "AnalyticsWidgetExtensionSample" +2. Unzip the Client SDK and copy the VSS.SDK.js file into the **AnalyticsWidgetExtensionSample\sdk\scripts** folder +3. Unzip D3 and copy the d3.min.js file into the **AnalyticsWidgetExtensionSample\scripts** folder +4. Unzip C3 and copy the c3.min.js file into the **AnalyticsWidgetExtensionSample\scripts** folder +5. Add an empty file called **analytics.js** to the **AnalyticsWidgetExtensionSample\scripts** folder - this is where the code +for the widget will go +6. Add another folder called **images** to the AnalyticsWidgetExtensionSample folder and copy an image you would like to use +as your extension image (see this [topic](/vsts/extend/develop/add-dashboard-widget#image) for details on the image) +7. Copy the c3.min.css file into the **AnalyticsWidgetExtensionSample\content** folder +8. Add a file called **widget.css** into the content folder +8. In the AnalyticsWidgetExtensionSample folder create a new web page called **Analytics.html** + +At this point the folder structure should look like the following: + +![widget-extension-1.png](_img/widget-extension-1.png) + +Next copy the following HTML to the **Analytics.html** file: +``` + + + + + + + +
        +
        + + + + + + +``` + +This code simply sets up the structure of the page - we'll write the code in a separate javascript file. The **title** div is the title of the +widget and the **chart** div will hold the chart. The size dimensions allow for room around the chart for asthetics. + +Add the following css to the **widget.css** file: + +``` + #title { + font-size: 16px; + font-weight: normal; + color: #424245; + margin-bottom: 15px; + padding-left: 15px; + padding-top: 10px; +} + + #chart { + margin-left: 10px; +} +``` + + +Next, add the following code to the **analytics.js** file: + +``` + VSS.init({ + explicitNotifyLoaded: true, + usePlatformStyles: true + }); + VSS.require(["TFS/Dashboards/WidgetHelpers", "VSS/Authentication/Services"], function (WidgetHelpers, VSS_Auth_Service) { + //Register the widget + //Widget load function + //Widget reload function + VSS.notifyLoadSucceeded(); + }); + //Reusable function to call the analytics service and build the chart +``` + +The init method does just what it says, it initializes the SDK. The second block of code you will make changes to over the next several steps and it does the +heavy lifting. + +**Register the widget** + +To register the widget, update the **analytics.js** as shown here, replacing the **//Register the widget comment**: + +``` +VSS.require(["TFS/Dashboards/WidgetHelpers", "VSS/Authentication/Services"], function (WidgetHelpers, VSS_Auth_Service) { + VSS.register("analyticsWidget", function () { + //Widget load function + //Widget reload function + }); + VSS.notifyLoadSucceeded(); +}); +//Reusable function to call the analytics service and build the chart +``` + +The [register](https://www.visualstudio.com/docs/integrate/extensions/reference/client/core-sdk#method_register) method takes the name of the widget, +as defined in the manifest which hasn't been created yet, and a function to execute. + +**Retrieve data and build the chart** + +The next step is to retrieve data from the analytics service. To do that we first need an OAuth access token that we can use to authenticate +against the service. Once we have the token, we need to append it to the header of our request and we're good to go. Update the code in the **analytics.js** +file by replacing the **//Reusable function to call the analytics service** comment: + +``` +function createChart(VSS_Auth_Service, WidgetHelpers) { + VSS.getAccessToken().then(function (token) { + authToken = VSS_Auth_Service.authTokenManager.getAuthorizationHeader(token); + + var accountName = VSS.getWebContext().account.name; + var projectName = VSS.getWebContext().project.name; + var urlString = "https://" + accountName + ".analytics.visualstudio.com/DefaultCollection/" + projectName + + "/_odata/WorkItems?$apply=groupby((WorkItemType), aggregate(Count with sum as Count))"; + + $.ajax({ + type: "GET", + url: urlString, + contentType: "application/json; charset=utf-8", + dataType: "json", + beforeSend: function (xhr) { + xhr.setRequestHeader('Authorization', authToken); + } + }) + .success(function (data, textStatus, jqXHR) { + //success function + }) + .error(function (jqXHR, textStatus, errorThrown) { + return WidgetHelpers.WidgetStatusHelper.Failure(errorThrown); + }); + }); +} +``` + +VSS.getAccessToken retrieves the authentication token for us. Once we have the token, an authorization header is created based on the token. + +The next three lines are used to construct the analytics service URL to retrieve the data. This initial URL will return a count of work items +for the account and project the widget is in, grouped by work item type. + +The ajax call actually retrieves the data from the analytics service. The beforeSend function adds the authetication token to the header. The error function +called is boilerplate code which allows any errors to be passed to the widget infrastructure for handling. The success function is where the the chart is +built. + +Replace the **//success function** comment with the following code which actually draws the chart: + +``` +var jsonData = data.value; + +var chart = c3.generate({ + bindto: '#chart', + data: { + json: jsonData, + keys: { + x: 'WorkItemType', + value: ['Count'] + }, + type: 'bar', + labels: true + }, + axis: { + x: { + type: 'category' + }, + y: { + label: { + text: 'Work Item Count', + position: 'outer-middle' + } + } + }, + legend: { + position: 'bottom' + } +}); +``` + +C3 has a full [reference](http://c3js.org/reference.html) on their site, but this code does the following: + +1. Sets the div in which to draw the chart +2. Sets the data to use in the chart +3. Sets the x axis category (WorkItemType) and the y axis data (Count) +4. Sets the chart type to a bar +5. Says that the x axis is a category type rather than a numerical type +6. Sets the y axis label and the legend position + +**Hook the chart up to the widget** + +At this point in the process, we have code to retrieve the data and draw a chart but we don't have the functions that will +be called by the extension framework which will trigger the data load. + +Replace the **//Widget load function** comment with the following code: + +``` +return { + load: function (widgetSettings) { + var titleDiv = $("#title"); + titleDiv.text("Count of Work Items by Type"); + + createChart(VSS_Auth_Service, WidgetHelpers); + + return WidgetHelpers.WidgetStatusHelper.Success(); + } + //Widget reload function +} +``` + +This function simply sets the title of the widget and calls the createChart function. For the moment, we'll leave the reload method alone. It's time to +put the finishing touches on the widget and see what it looks like. + +**Add an extension manifest** + +For detailed information on extension manifests for widgets, see can be found [Add a dashboard widget](../../extend/develop/add-dashboard-widget.md). + +Add a file called **vss-extension.json** to the root of the project. Add the following to this file: + +``` +{ + "manifestVersion": 1, + "id": "sampleODataWidget", + "version": "0.1.0", + "name": "Sample OData Widget", + "publisher": "[your publisher name here]", + "description": "A javascript based OData widget sample", + "public": false, + "targets": [ + { + "id": "Microsoft.VisualStudio.Services" + } + ], + "icons": { + "default": "images/ODataLogo-96.png" + }, + "categories": [ + "Plan and track" + ], + "tags": [ + "OData", + "Reporting", + "Analytics", + "Widget" + ], + "branding": { + "color": "blue", + "theme": "light" + }, + "scopes": [ + "vso.analytics" + ], + "contributions": [ + { + "id": "analyticsWidget", + "type": "ms.vss-dashboards-web.widget", + "targets": [ + "ms.vss-dashboards-web.widget-catalog" + ], + "properties": { + "title": "Analytics Widget", + "name": "Analytics Widget", + "uri": "Analytics.html", + "description": "Demonstration widget which returns the count of work items by work item type", + "previewImageUrl": "images/gallery-image.png", + "supportedSizes": [ + { + "rowSpan": 2, + "columnSpan": 2 + } + ], + "supportedScopes": [ "project_team" ] + } + } + ], + "files": [ + { + "path": "Analytics.html", + "addressable": true + }, + { + "path": "sdk/scripts", + "addressable": true + }, + { + "path": "images", + "addressable": true + }, + { + "path": "scripts", + "addressable": true + }, + { + "path": "content", + "addressable": true + } + ] +} +``` + +Remember to replace the author value denoted by [your publisher name here] with your publisher name. +For details on extension manifests, see [Extension manifest reference](../../extend/develop/manifest.md). + +There are a few key things to note here: + +* This extension will show up in the widget gallery as denoted by this target: **ms.vss-dashboards-web.widget-catalog** +* The scope is **vso.analytics** which is the OAuth scope required to access the analytics service +* The supported size is 330x330 which is a 2x2 sized tile (160+160+10 pixels for spacing) + +At this point the extension can be compiled, deployed, installed and executed following the steps described in +[Write your first extension for VSTS](../../extend/get-started/node.md) starting from the Create your publisher section. + +You should end up with a widget that looks like this: + +![widget-extension-2.png](_img/widget-extension-2.png) + +Continue to the next topic, [Add configuration to the analytics chart](widget-extension-against-analytics-service-configuration.md) to learn how to give users the ability to customize +your extension. \ No newline at end of file diff --git a/docs/report/analytics/wit-analytics.md b/docs/report/analytics/wit-analytics.md new file mode 100644 index 00000000000..507f76a7427 --- /dev/null +++ b/docs/report/analytics/wit-analytics.md @@ -0,0 +1,304 @@ +--- +title: Work item tracking analytics | VSTS +description: How to query the OData Analytics service to generate work item tracking reports for Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 0ABC2F7B-AFA5-465F-8DFE-4779D90452CD +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +#Analytics - Work Item Tracking OData queries + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Using the OData service provided by the Analytics Marketplace extension, you can construct basic and filtered queries to return work items of interest. With basic querying capabilities you can query data directly from your browser. + +In this topic, the basic root URL is constructed as follows: + +```https://[collection name].analytics.visualstudio.com/DefaultCollection/_odata``` + + +All additional URL parts are specified as an additional part of the query string as shown in the examples below. + + +##Construct a basic query + +###Query a single entity +To query a single entity, such as Work Items or Areas or Projects, simply add the name of the entity: ```/Areas```, ```/Projects```, or ```/WorkItems```. + +For example, you query Areas by adding ```/Areas```. The full URL is: + +```https://[collection name].analytics.visualstudio.com/DefaultCollection/_odata/Areas``` + +This is equivalent to performing a select statement on the entity and returning everything, all columns and all rows. If you have a large number of work items, this may take several seconds. + +### Select specific columns +Return specific field data by adding a ```select``` clause. + +For example, to return only the Work Item ID, Work Item Type, Title, and State of work items, enter: + + /WorkItems?$select=WorkItemId,WorkItemType,Title,State + +This is equivalent to selecting all rows in the entity, but returning only these specific fields. + +>[!NOTE] +>There are no spaces in the field names. The query fails when you add spaces. Both spacing and casing are critical in OData. + + +### Target a specific project + +Because team projects are an integral part of VSTS, we have added the ability to specify the project scope in the URL. By specifying the project, you automatically filter for any entities that are related to the project entity. + +For example, the following project-scoped query will return the count of work items for a specific project: + + https://[collection].analytics.visualstudio.com/DefaultCollection/ProjectA/_odata/WorkItems/$count + +Likewise, this query string will return the areas for a specific project: + + https://[collection].analytics.visualstudio.com/DefaultCollection/ProjectA/_odata/Areas + +This is equivalent to the following filter on a collection-scoped query: + + https://[collection].analytics.visualstudio.com/DefaultCollection/_odata/Areas?$filter=Project/ProjectName eq 'ProjectA' + + +When using a project-scoped query with an expand you are not required to provide additional filters. + +For example, the following project scoped filter: + + https://[collection].analytics.visualstudio.com/ProjectA/_odata/WorkItems?$expand=Parent + +Would be filtered automatically to enforce security: + + https://[collection].analytics.visualstudio.com/_odata/WorkItems?$filter=ProjectName eq 'ProjectA'&$expand=Parent($filter=ProjectName eq 'ProjectA') + + +When using a collection-scoped query with an ```expand``` you must provide an additional filter. + +For example, the following collection-scoped query, which uses an ```expand``` to retrieve the children of all work items: + + https://[collection].analytics.visualstudio.com/_odata/WorkItems?$expand=Children&$filter=Project/ProjectName eq 'ProjectA' + + Requires an additional filter to verify the children are limited to the specified project: + + https://[collection].analytics.visualstudio.com/_odata/WorkItems?$expand=Children($filter=Project/ProjectName eq 'ProjectA')&$filter=Project/ProjectName eq 'ProjectA' + +This query, which uses an ```expand``` to retrieve the parent of all work items: + + https://[collection].analytics.visualstudio.com/_odata/WorkItems?$expand=Parent&$filter=Project/ProjectName eq 'ProjectA' + +Requires an additional filter to verify the parent is limited to the specified project: + + https://[collection].analytics.visualstudio.com/_odata/WorkItems?$expand=Parent($filter=Project/ProjectName eq 'ProjectA')&$filter=Project/ProjectName eq 'ProjectA' + +Without the additional filter, the request will fail if the child of any work item references work items in a project that you do not have read access to. + + +Analytics has a few additional restrictions on query syntax related to Project level security. + +The ```any``` or ```all``` filters apply to the base Entity on an ```expand```. For filters based on a Project we explicitly ignore the filter when using an ```expand```: + + https://[collection].analytics.visualstudio.com/_odata/WorkItems?$expand=Children&$filter=ProjectName eq 'ProjectA' and Children/any(r: r/ProjectName eq 'ProjectA') + +Using ```level``` is only supported if you have access to all projects in the collection or when using a project scoped query: + + https://[collection].analytics.visualstudio.com/_odata/WorkItems?$expand=Children($levels=2;$filter=ProjectName eq 'ProjectA') + +Analytics does not understand or support any cross level reference with Projects. As an example, this query is referencing the root work item’s ProjectName using $it alias which is unsupported: + + https://[collection].analytics.visualstudio.com/_odata/WorkItems?$expand=Links($expand=TargetWorkItem;$filter=TargetWorkItem/Project/ProjectName eq $it/Project/ProjectName) + +>[!NOTE] +>If you don't have access to all projects in an account, apply a project filter to your query. When pulling data into client tools such as +>Power BI Desktop or Excel, use the project path form of the URL to ensure your data is constrained by a project, unless you need to report on more than one project. + +###Filter results + +You can filter data by providing a query filter clause. + +Building on the last query, what if you wanted to filter the work items so that only items with the state "In Progress" were returned? To do that, use the following: + + /WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=State eq 'In Progress' + +Alternatively, you can exclude the ```select``` clause altogether and just filter the results as follows: + + /WorkItems?$filter=State eq 'In Progress' + +You can apply multiple filters by concatenating the filters: + + /WorkItems?$filter=WorkItemType eq 'Task' and State eq 'In Progress' + +Additionally, you can apply various functions such as ```contains```, ```startswith```, ```endswith``` and more. See the [Filter and order by canonical functions](#canonical-functions) section later in this topic. + +## Query with filters +Querying work items is helpful, but you will eventually want to be able to filter by other data such as the Iteration Path +or Area Path or Team Project. To do this, you need to understand the navigation properties of the entity model. + +Here is a partial view of the Work Items entity metadata: + + +``` + + + + + + + + + + + + + + + + + + +``` + +The navigation properties appear towards the bottom of the metadata, which includes ```Revisions```, ```BoardLocations``` (Kanban metadata), ```Project```, ```Area```, and ```Iteration```. + +How do you use this information to filter results? + +This query returns all of the work items in a specific iteration: + + /WorkItems?$filter=Iteration/IterationPath eq 'Project Name\Iteration 1' + +In this example, ```Iteration``` is the navigation property name and ```IterationPath``` is the full path for the iteration. To use another entity as a filter, put the navigation property followed by a slash followed by the name of the field to filter on. + +>[!NOTE] +>You can't use the navigation property in a ```select``` statement. Instead, you can use ```expand```. + + +##Return data from related entities + +In the previous query, the filter was on the iteration path but the iteration path is not returned in the results because it is contained in a related entity. + +To return data in a related entity, add an ```expand``` statement: + + /WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=WorkItemId eq 10000&$expand=Iteration + +This returns the following: + +``` +{ + "@odata.context":"https://[account].analytics.visualstudio.com/DefaultCollection/_odata/$metadata#WorkItems(WorkItemId,WorkItemType,Title,State,Iteration)","value":[ + { + "WorkItemId":10000,"WorkItemType":"Task","Title":"Some title","State":"Completed","Iteration":{ + "IterationId":"7a2c246e-fc62-41af-ad18-62332017bc46","Name":"Sprint 55","Number":13021,"IterationPath":"Fabrikam\\Sprints\\Sprint 55","StartDate":"2013-09-23T00:00:00Z","EndDate":"2013-10-11T00:00:00Z","IterationLevel0":"VSOnline","IterationLevel1":"OneVS","IterationLevel2":"Previous Sprints","IterationLevel3":"Sprint 55","IterationLevel4":null,"IterationLevel5":null,"IterationLevel6":null,"IterationLevel7":null,"IterationLevel8":null,"IterationLevel9":null,"IterationLevel10":null,"IterationLevel11":null,"IterationLevel12":null,"IterationLevel13":null,"Level":3,"IsDeleted":false + } + } + ] +} +``` + +Iteration is expanded in the JSON result and all of the iteration data is returned. This is probably more data than you want. + +To return less data, add a ```select``` statement against the iteration as well: + + /WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=WorkItemId eq 10000&$expand=Iteration($select=Name,IterationPath) + +Which returns the following: +``` +{ + "@odata.context":"https://[account].analytics.visualstudio.com/DefaultCollection/_odata/$metadata#WorkItems(WorkItemId,WorkItemType,Title,State,Iteration,Iteration(Name,IterationPath))","value":[ + { + "WorkItemId":10000,"WorkItemType":"Task","Title":"Some title","State":"Completed","Iteration":{ + "Name":"Sprint 55","IterationPath":"Fabrikam\\Sprints\\Sprint 55" + } + } + ] +} +``` + +In OData, you can nest ```expand``` statements. For example, you can write the previous query statement to display the project the iteration is part of: + + /WorkItems?$filter=WorkItemId eq 10000&$expand=Iteration($expand=Project) + +This results in: +``` +{ + "@odata.context":"https://[collection].analytics.visualstudio.com/DefaultCollection/_odata/$metadata#WorkItems","value":[ + { + "WorkItemId":10000,"Revision":3,"Watermark":283397,"Title":"Production deployment and testing for Entitlement API v2 and Subscriber database","WorkItemType":"Task","ChangedDate":"2014-07-10T19:29:58.41Z","CreatedDate":"2014-04-19T22:44:58.31Z","State":"Completed","Reason":"Completed","FoundIn":null,"IntegrationBuild":null,"ActivatedDate":null,"Activity":null,"BacklogPriority":null,"BusinessValue":null,"ClosedDate":null,"Discipline":null,"Issue":null,"Priority":2,"Rating":null,"ResolvedDate":null,"ResolvedReason":null,"Risk":null,"Severity":null,"StackRank":null,"TimeCriticality":null,"Triage":null,"ValueArea":null,"CompletedWork":10.0,"DueDate":null,"Effort":null,"FinishDate":null,"OriginalEstimate":20.0,"RemainingWork":null,"Size":null,"StartDate":null,"StoryPoints":null,"TargetDate":null,"Blocked":null,"Committed":null,"Escalate":null,"FoundInEnvironment":null,"HowFound":null,"Probability":null,"RequirementType":null,"RequiresReview":null,"RequiresTest":null,"RootCause":null,"SubjectMatterExpert1":null,"SubjectMatterExpert2":null,"SubjectMatterExpert3":null,"TargetResolveDate":null,"TaskType":null,"UserAcceptanceTest":null,"Count":1,"Iteration":{ + "IterationId":"7a2c246e-fc62-41af-ad18-62332017bc46","Name":"Sprint 55","Number":13021,"IterationPath":"Fabrikam\\Sprints\\Sprint 55","StartDate":"2013-09-23T00:00:00Z","EndDate":"2013-10-11T00:00:00Z","IterationLevel0":"VSOnline","IterationLevel1":"OneVS","IterationLevel2":"Previous Sprints","IterationLevel3":"Sprint 55","IterationLevel4":null,"IterationLevel5":null,"IterationLevel6":null,"IterationLevel7":null,"IterationLevel8":null,"IterationLevel9":null,"IterationLevel10":null,"IterationLevel11":null,"IterationLevel12":null,"IterationLevel13":null,"Level":3,"IsDeleted":false,"Project":{ + "ProjectId":"b924d696-3eae-4116-8443-9a18392d8544","ProjectName":"Fabrikam","IsDeleted":false + } + } + } + ] +} +``` + +You can also combine ```expand``` and ```select``` statements. For example, you can change the previous query to only return the Iteration Name and Iteration Path: + + /WorkItems?$filter=WorkItemId eq 10000&$expand=Iteration($select=IterationId,IterationPath;$expand=Project) + +This results in: +``` +{ + "@odata.context":"https://[collection].analytics.visualstudio.com/DefaultCollection/_odata/$metadata#WorkItems(Iteration(IterationId,IterationPath,Project))","value":[ + { + "WorkItemId":10000,"Revision":3,"Watermark":283397,"Title":"Production deployment and testing for Entitlement API v2 and Subscriber database","WorkItemType":"Task","ChangedDate":"2014-07-10T19:29:58.41Z","CreatedDate":"2014-04-19T22:44:58.31Z","State":"Completed","Reason":"Completed","FoundIn":null,"IntegrationBuild":null,"ActivatedDate":null,"Activity":null,"BacklogPriority":null,"BusinessValue":null,"ClosedDate":null,"Discipline":null,"Issue":null,"Priority":2,"Rating":null,"ResolvedDate":null,"ResolvedReason":null,"Risk":null,"Severity":null,"StackRank":null,"TimeCriticality":null,"Triage":null,"ValueArea":null,"CompletedWork":10.0,"DueDate":null,"Effort":null,"FinishDate":null,"OriginalEstimate":20.0,"RemainingWork":null,"Size":null,"StartDate":null,"StoryPoints":null,"TargetDate":null,"Blocked":null,"Committed":null,"Escalate":null,"FoundInEnvironment":null,"HowFound":null,"Probability":null,"RequirementType":null,"RequiresReview":null,"RequiresTest":null,"RootCause":null,"SubjectMatterExpert1":null,"SubjectMatterExpert2":null,"SubjectMatterExpert3":null,"TargetResolveDate":null,"TaskType":null,"UserAcceptanceTest":null,"Count":1,"Iteration":{ + "IterationId":"7a2c246e-fc62-41af-ad18-62332017bc46","IterationPath":"Fabrikam\\Sprints\\Sprint 55","Project":{ + "ProjectId":"b924d696-3eae-4116-8443-9a18392d8544","ProjectName":"Fabrikam","IsDeleted":false + } + } + } + ] +} +``` + +Notice that the result here shows only the IterationId and IterationPath and that the Project is a nested object within the JSON result. Another key item to note is the URL itself, when using a ```select``` statement and an ```expand``` clause you must use a semi-colon (;) before the ```$expand```. Anything else will result in an error. + +###Sort results + +You can sort OData results using the ```orderby``` clause. You can apply this clause to any OData query as shown: + + /WorkItems?$filter=WorkItemType eq 'User Story'&$orderby=WorkItemId + +You can order by multiple items, but you can only order by columns that are returned. For example, the following entry will result in an error: + + /WorkItems?$select=WorkItemId,WorkItemType,State&$orderby=Reason + + + +##Related notes + +- [Aggregate data](aggregated-data-analytics.md) +- [OData Version 4.0 Part 2: URL Conventions Plus Errata 02](http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part2-url-conventions/odata-v4.0-errata02-os-part2-url-conventions-complete.html) + + +###Filter or order by canonical functions + +You can use the following canonical functions with the ```$filter``` or ```$orderby``` system query options. For more information, see the [Odata specifications](http://docs.oasis-open.org/odata/odata/v4.0/errata02/os/complete/part2-url-conventions/odata-v4.0-errata02-os-part2-url-conventions-complete.html#_Toc406398116). + +| Canonical function | Description | +| ------------------ | ----------- | +| ```contains``` | Returns true if the second parameter string value is a substring of the first parameter string value, otherwise it returns false. | +| ```endswith``` | Returns true if the first parameter string value ends with the second parameter string value, otherwise it returns false | +| ```startswith``` | Returns true if the first parameter string value starts with the second parameter string value, otherwise it returns false | +| ```length``` | Returns the number of characters in the parameter value | +| ```indexof``` | Returns the zero-based character position of the first occurrence of the second parameter value in the first parameter value | +| ```substring``` | Returns a substring of the first parameter string value, starting at the Nth character and finishing at the last character (where N is the second parameter integer value) | +| ```tolower``` | Returns the input parameter string value with all uppercase characters converted to lowercase | +| ```toupper``` | Returns the input parameter string value with all lowercase characters converted to uppercase | +| ```trim``` | Returns the input parameter string value with all leading and trailing whitespace characters | +| ```concat``` | Returns the year component of the Date or DateTimeOffset parameter value | +| ```year``` | Returns the year component of the Date or DateTimeOffset parameter value | +| ```month``` | Returns the month component of the Date or DateTimeOffset parameter value | +| ```day``` | Returns the day component of the Date or DateTimeOffset parameter value | +| ```second``` | Returns the second component (without the fractional part) of the DateTimeOffset or TimeOfDay parameter value | +| ```fractionalseconds``` | Returns the fractional seconds component of the DateTimeOffset or TimeOfDay parameter value as a non-negative decimal value less than 1 | +| ```date``` | Returns the date part of the DateTimeOffset parameter value | +| ```time``` | Returns the time part of the DateTimeOffset parameter value | +| ```totaloffsetminutes``` | Returns the signed number of minutes in the time zone offset part of the DateTimeOffset parameter value | +| ```now``` | Returns the current point in time (date and time with time zone) as a DateTimeOffset value | +| ``` maxdatetime``` | Returns the latest possible point in time as a DateTimeOffset value | +| ```mindatetime``` | Returns the earliest possible point in time as a DateTimeOffset value | diff --git a/docs/report/analytics/work-item-links.md b/docs/report/analytics/work-item-links.md new file mode 100644 index 00000000000..add6248342b --- /dev/null +++ b/docs/report/analytics/work-item-links.md @@ -0,0 +1,213 @@ +--- +title: Linked work item queries | VSTS +description: How to query for linked work items using the Analytics service for Visual Studio Team Services (VSTS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: BF30FE4E-0370-4C9B-A660-51207D816F8B +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +#Query for linked work items + +**VSTS** + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Querying work items across links is similar to any other operation across related entities in OData, but +because of the different link types there can be some added complexities. + +There are two ways to query links - the first is using the hierarchichal navigation capabilities provided +by Children and Parent. + +## Parent to child queries + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItems?$select=WorkItemId,Title,State&$expand=Children($select=WorkItemId,Title,State)&$filter=WorkItemId eq [ID #] +``` + +This query is querying the work items, and expanding the children (and work items linked to the work item being filtered with a parent/child +relationships). It filters the query so only one root work item is returned. The query result looks like this: + +``` +{ + "@odata.context":"https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/$metadata#WorkItems(WorkItemId,Title,State,Children,Children(WorkItemId,Title,State))","value":[ + { + "WorkItemId":103,"Title":"Feature Y","State":"New","Children":[ + { + "WorkItemId":48,"Title":"Story 15","State":"Resolved" + },{ + "WorkItemId":50,"Title":"Story 17","State":"New" + },{ + "WorkItemId":55,"Title":"Story 22","State":"New" + } + ] + } + ] +} +``` + +However, as you might be wondering - a hierarchy can have multiple leves - how do I get all of them? +Modify the query above so that it looks like this: + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItems?$select=WorkItemId,Title,State&$expand=Children($select=WorkItemId,Title,State;$levels=max)&$filter=WorkItemId eq 103 +``` + +There is only one change in this query - **;$levels=max** in the children clause. This will cause the entire hieararchy to +be returned (**max** actually equates to $levels=5 in this case). This means that you can control how many levels of data are +returned. The results of this query look like the following: + +``` +{ + "@odata.context":"https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/$metadata#WorkItems(WorkItemId,Title,State,Children,Children(WorkItemId,Title,State,Children,Children(WorkItemId,Title,State)))","value":[ + { + "WorkItemId":103,"Title":"Feature Y","State":"New","Children":[ + { + "WorkItemId":48,"Title":"Story 15","State":"Resolved","Children":[ + { + "WorkItemId":104,"Title":"Task A","State":"New" + } + ] + },{ + "WorkItemId":50,"Title":"Story 17","State":"New","Children":[ + + ] + },{ + "WorkItemId":55,"Title":"Story 22","State":"New","Children":[ + { + "WorkItemId":105,"Title":"Task B","State":"New" + } + ] + } + ] + } + ] +} + +``` + +Notice that two of the stories now have child tasks being shown. + +**Note** that $levels only works for recursive relationships and not flat or directed work item links.** + +##Child to parent queries + +Modify the previous query to this: + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItems?$select=WorkItemId,Title,State&$expand=Parent($select=WorkItemId,Title,State;$levels=max)&$filter=WorkItemId eq 105 +``` + +See the difference? Change **Children** to **Parent** and replace the ID with the ID of a task. The results are as follows: + +``` +{ + "@odata.context":"https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/$metadata#WorkItems(WorkItemId,Title,State,Parent,Parent(WorkItemId,Title,State,Parent,Parent(WorkItemId,Title,State)))","value":[ + { + "WorkItemId":105,"Title":"Task B","State":"New","Parent":{ + "WorkItemId":55,"Title":"Story 22","State":"New","Parent":{ + "WorkItemId":103,"Title":"Feature Y","State":"New" + } + } + } + ] +} +``` + +##Non-hierarchical link query + +The Parent/Child hierarchy is one way to bring back information. The analytics serivce also provides the ability to return +directed links and to mix and match the data that is returned using the **Links** navigation property. + +##Get link info query + +This query will return all of the links (not work items on the other end of those links) for a work item: + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId%20eq%20103&$expand=Links +``` + +This results in the following: + +``` +{ + "@odata.context":"https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Links)","value":[ + { + "WorkItemId":103,"Title":"Feature Y","WorkItemType":"Feature","State":"New","Links":[ + { + "SourceWorkItemId":103,"TargetWorkItemId":48,"CreatedDate":"2016-01-14T16:30:56.287Z","DeletedDate":null,"Comment":"","LinkTypeId":2,"LinkTypeReferenceName":"System.LinkTypes.Hierarchy-Forward","LinkTypeName":"Child","LinkTypeIsAcyclic":true,"LinkTypeIsDirectional":true + },{ + "SourceWorkItemId":103,"TargetWorkItemId":50,"CreatedDate":"2016-01-14T16:30:50.277Z","DeletedDate":null,"Comment":"","LinkTypeId":2,"LinkTypeReferenceName":"System.LinkTypes.Hierarchy-Forward","LinkTypeName":"Child","LinkTypeIsAcyclic":true,"LinkTypeIsDirectional":true + },{ + "SourceWorkItemId":103,"TargetWorkItemId":55,"CreatedDate":"2016-01-14T16:30:53.867Z","DeletedDate":null,"Comment":"","LinkTypeId":2,"LinkTypeReferenceName":"System.LinkTypes.Hierarchy-Forward","LinkTypeName":"Child","LinkTypeIsAcyclic":true,"LinkTypeIsDirectional":true + },{ + "SourceWorkItemId":103,"TargetWorkItemId":112,"CreatedDate":"2016-03-03T17:17:46.023Z","DeletedDate":null,"Comment":"","LinkTypeId":1,"LinkTypeReferenceName":"System.LinkTypes.Related-Forward","LinkTypeName":"Related","LinkTypeIsAcyclic":false,"LinkTypeIsDirectional":false + } + ] + } + ] +} +``` + +This is probably not exactly what you need or wanted, but it's a start that can be built upon. In order to get the work items on the +other end of those links, you can expand the links one more level by doing the following: + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId%20eq%20103&$expand=Links($expand=TargetWorkItem($select=WorkItemId,Title,State)) +``` + +By expanding the Links on the TargetWorkItem navigation property you end up with this result: + +``` +{ + "@odata.context":"https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Links,Links(TargetWorkItem(WorkItemId,Title,State)))","value":[ + { + "WorkItemId":103,"Title":"Feature Y","WorkItemType":"Feature","State":"New","Links":[ + { + "SourceWorkItemId":103,"TargetWorkItemId":48,"CreatedDate":"2016-01-14T16:30:56.287Z","DeletedDate":null,"Comment":"","LinkTypeId":2,"LinkTypeReferenceName":"System.LinkTypes.Hierarchy-Forward","LinkTypeName":"Child","LinkTypeIsAcyclic":true,"LinkTypeIsDirectional":true,"TargetWorkItem":{ + "WorkItemId":48,"Title":"Story 15","State":"Resolved" + } + },{ + "SourceWorkItemId":103,"TargetWorkItemId":50,"CreatedDate":"2016-01-14T16:30:50.277Z","DeletedDate":null,"Comment":"","LinkTypeId":2,"LinkTypeReferenceName":"System.LinkTypes.Hierarchy-Forward","LinkTypeName":"Child","LinkTypeIsAcyclic":true,"LinkTypeIsDirectional":true,"TargetWorkItem":{ + "WorkItemId":50,"Title":"Story 17","State":"Active" + } + },{ + "SourceWorkItemId":103,"TargetWorkItemId":55,"CreatedDate":"2016-01-14T16:30:53.867Z","DeletedDate":null,"Comment":"","LinkTypeId":2,"LinkTypeReferenceName":"System.LinkTypes.Hierarchy-Forward","LinkTypeName":"Child","LinkTypeIsAcyclic":true,"LinkTypeIsDirectional":true,"TargetWorkItem":{ + "WorkItemId":55,"Title":"Story 22","State":"New" + } + },{ + "SourceWorkItemId":103,"TargetWorkItemId":112,"CreatedDate":"2016-03-03T17:17:46.023Z","DeletedDate":null,"Comment":"","LinkTypeId":1,"LinkTypeReferenceName":"System.LinkTypes.Related-Forward","LinkTypeName":"Related","LinkTypeIsAcyclic":false,"LinkTypeIsDirectional":false,"TargetWorkItem":{ + "WorkItemId":112,"Title":"Some issue","State":"Active" + } + } + ] + } + ] +} +``` + +Next, is the ability to query only on specific links. To do this, modify the above query as follows: + +``` +https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/WorkItems?$select=WorkItemId,Title,WorkItemType,State&$filter=WorkItemId%20eq%20103&$expand=Links($filter=LinkTypeName eq 'Related';$expand=TargetWorkItem($select=WorkItemId,Title,State)) +``` + +This query returns only the work items linked with the **Related** link type as shown here: + +``` +{ + "@odata.context":"https://[account].analytics.visualstudio.com/DefaultCollection/[project]/_odata/$metadata#WorkItems(WorkItemId,Title,WorkItemType,State,Links,Links(TargetWorkItem(WorkItemId,Title,State)))","value":[ + { + "WorkItemId":103,"Title":"Feature Y","WorkItemType":"Feature","State":"New","Links":[ + { + "SourceWorkItemId":103,"TargetWorkItemId":112,"CreatedDate":"2016-03-03T17:17:46.023Z","DeletedDate":null,"Comment":"","LinkTypeId":1,"LinkTypeReferenceName":"System.LinkTypes.Related-Forward","LinkTypeName":"Related","LinkTypeIsAcyclic":false,"LinkTypeIsDirectional":false,"TargetWorkItem":{ + "WorkItemId":112,"Title":"Some issue","State":"Active" + } + } + ] + } + ] +} +``` \ No newline at end of file diff --git a/docs/report/breadcrumb/toc.yml b/docs/report/breadcrumb/toc.yml new file mode 100644 index 00000000000..e0eb1a3fa44 --- /dev/null +++ b/docs/report/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Analytics + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=analytics + items: + - name: Dashboards + tocHref: /vsts/ + topicHref: /vsts/report/index \ No newline at end of file diff --git a/docs/report/charts.md b/docs/report/charts.md new file mode 100644 index 00000000000..b138b739025 --- /dev/null +++ b/docs/report/charts.md @@ -0,0 +1,184 @@ +--- +title: Status and trend work item, query-based charts +description: Create status, progress, and trend charts from flat-based queries in VSTS and Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: EFAD32DB-8B19-4ACC-8F72-87CC5A513798 +ms.manager: douge +ms.author: kaelli +ms.date: 05/22/2017 +--- + + +# Track progress by creating status and trend query-based charts + + +[!INCLUDE [temp](_shared/vsts-tfs-header-17-15.md)] + + +You can quickly view the status of work in progress by charting the results of a [flat-list query](../work/track/using-queries.md). You can create several types of charts—such as pie, column, or trend—for the same query. Charts support viewing a count of work items or a sum of values for select numeric fields, such as Remaining Work or Original Estimate. + +>[!NOTE] +>For examples of queries based on numeric fields, see [Query by numeric fields](../work/track/query-numeric.md). For information on creating charts that track test progress and results, see [Track test status](../manual-test/getting-started/track-test-status.md). + +For example, the following image illustrates four different charts created from the same flat-list query. The pie chart groups the 146 active bugs by priority, and the bar chart groups the bugs by team and their triage status. The last two chart show two different views of the active bugs as they trend over the last two weeks. + +![A view of 4 charts for a flat-list query](_img/charts-active-bugs.png) + +## Add and configure a query-based chart + +1. From the Queries page, open the chart editor for a flat list query. You must belong to the Contributors group to create charts. Stakeholders can view charts but not create them. + + Web portal, Queries page, Chart tab, New chart link + +2. Select the chart type and field for grouping values. When you use pie, bar, and column charts, select a single field to view a count of work items. + + Web portal, Queries page, Chart tab, Configure Chart dialog, Configure a Pie chart  + + If you don't see the field you want in the **Group by** drop-down list, add the field as a column to the query and save the query. You can group by any field except date-time and free-form text fields. For example: + - To group by iterations, include the Iteration Path in the query or column options + - To group by team, include the Area Path or Node Name in the query or column options + - To group by a custom field, include it in a query clause or column options (See [Customize your work tracking experience](../work/customize/customize-work.md) to learn about adding a custom field) + + If you receive an error message when you close the chart editor, you need to request [Basic access](../security/change-access-levels.md). + +3. To sort the results, choose value or label as the sort option and then ascending or descending. + +4. To change a color, simply click a color on the chart and pick a new color from the color picker. + +Charts automatically update when you edit the query or refresh the query results. + + +### Stacked bar chart + +A stacked bar chart lets you track progress against two field values. Node Name will display the last leaf within the hierarchy of area paths. Use this when you want to show data across teams. + +Web portal, Queries page, Chart tab, Configure Chart dialog, Stacked bar chart  + + +### Trend chart +Trend charts let you view progress for the last one, two, or four weeks. + +Web portal, Queries page, Chart tab, Configure Chart dialog, Stacked area trend chart  + + +### Burndown chart + +Choose the Sum operator for Remaining Work to view a burndown chart of tasks. + +Web portal, Queries page, Chart tab, Configure Chart dialog,Trend chart for the past 4 weeks  + + +## Add a chart to a team dashboard + +Select your option from the chart's context menu. + +![Chart context menu, add to a team dashboard](_img/pin-chart-to-a-dashboard.png) + +To add a chart to your team's home page, you must be a [team administrator](../work/scale/add-team-administrator.md). You can only add charts defined for shared queries. + +To add other types of charts, such as test results and build summary charts, see [Add widgets and chart to a dashboard](add-widget-to-dashboard.md). + +>[!NOTE] +>Feature availability: For on-premises TFS 2015, you can pin charts to the team homepage. From VSTS or TFS 2015.1, you can add charts to [multiple team dashboards](dashboards.md) and get access to the [widget catalog](widget-catalog.md). + + + +## Add chart widget to a dashboard +>[!NOTE] +>Feature availability: The widget, Chart for Work Items, is available from VSTS or TFS 2015.2 or later version. You add it to a team dashboard from the [widget catalog](widget-catalog.md). + + +If you've already defined your [flat list query](../work/track/using-queries.md), you can add and configure a chart to a team dashboard using the Chart for work items widget. + +1. From the web portal for VSTS, open the [team dashboard](dashboards.md) you want to add the chart to. + +2. Click ![Edit dashboard icon](_img/edit-dashboard-icon.png) to modify a dashboard, and then click ![add a widget icon](_img/add-widget-icon.png) to access the widget catalog. + + If you don't see these icons, then you need to be added as a [team administrator](../work/scale/add-team-administrator.md) or a member of the Project Administrators group. + +3. Choose the Chart for work items widget and then click Add. + + Web portal, Dashboards page, Widget catalog, Chart for work items widget + +4. Click the widget's ![Configure widget icon](_img/icons/configure-icon.png) or the ![Actions icon](_img/icons/actions-icon.png) configure icon to open the configuration dialog. + + Web portal, Dashboards page, Widget catalog, Chart for work items widget, Configuration dialog + +5. Give the chart a title, select the flat list query on which the chart is based, and choose the chart type. + + Based on your chart type, specify values for the remaining fields. Change a chart color simply by choosing another color from those shown. + + >[!NOTE] + >All rules for configuring charts described previously in this topic apply to configuring the chart for work items widget. + +6. After you save your changes, you'll see the new chart has been added to the dashboard. + + ![Chart of work items widget, configure dialog](_img/charts-chart-wit-widget-configured.png) + +7. Drag the tile anywhere on the dashboard to put it where you want it. + +8. When you're finished with your changes, click ![Exit edit-dashboard-mode icon](_img/exit-edit-dashboard-mode-icon.png) to exit dashboard editing. + + +## Related notes + +Now you know how to create status and trend charts for work items. A few things to keep in mind... + +- To create similar charts for tests, see [Track your test results](../manual-test/getting-started/track-test-status.md) +- Charts you create for queries that are saved under Shared Queries are viewable by all team members and can be added to team dashboards or pinned to a team homepage +- Charts that you create for queries under your My Queries folder are visible only to you +- You can copy and email the URL of any chart page to share it with a team member +- For additional examples of charts created from numeric fields, see [Query by a numeric field](../work/track/query-numeric.md). + + +Also, from the web portal, you can view the following charts: + +- [Cumulative flow diagram](./guidance/cumulative-flow.md) +- [Team velocity](./guidance/team-velocity.md) +- [Sprint burndown charts](../work/scrum/sprint-burndown.md) +- [Test progress and test results](../manual-test/getting-started/track-test-status.md) +- [Add widgets and chart to a dashboard](add-widget-to-dashboard.md) +- [Widget catalog charts](widget-catalog.md) + + +[!INCLUDE [temp](_shared/image-differences.md)] + + +### Requirements to view and create charts +If you have [Stakeholder access or license](../quickstart/get-started-stakeholder.md), you can only view charts. If you need to create charts, ask your project admin or account owner to grant you elevated access. + +### Fields that show up in the chart editor +For fields to appear in the chart editor, you must add the field to either the query filter criteria or a displayed column. + +You can't select fields for groupings that aren't supported, such as ID, Title, Tags, date-time fields, Description, Repro Steps, and other HTML and long text fields. + +### Charts and the display of areas and iterations +When you select **Area Path** or **Iteration Path**, only the leaf node appears in the chart. The leaf node is the last node of the full path. For example, ```Phone``` is the leaf node of ```FabrikamFiber/Fabrikam Website/Phone```. If your query contains a mixed level of leaf nodes, your chart might not reflect expected results. + +Use ```Node Name```, the area path leaf node, to see if that improves your results. + + +Charts display in browsers that support Scalable Vector Graphics (SVG). This includes Internet Explorer 9 and Internet Explorer 10, Chrome, Firefox and Safari on Mac. Charts have not been optimized for mobile or touch displays. + +### Why some charts don't show all the field values in the results +When a chart contains more than seven items within the data series, values in the eight-plus items are consolidated into a set labeled "other"? + +![Other category groups data beyond 7 set series](_img/tfs-vso-remaining-category-consolidation-chart.png) + + +### Additional charts (TFS) +- If your team project has a project portal and SharePoint site configured, you can access several [Excel charts](excel/excel-reports.md). These include charts to monitor code quality, testing, and bug tracking activity. +- If your team project has [SQL Server reports](https://msdn.microsoft.com/library/dd380714.aspx) added, you can access several reports that include status and trend activities. If you need to add reporting, see [Add reports to a team project](./admin/add-reports-to-a-team-project.md). +- If your team project has reporting services added, you can [create an Excel chart from a work item query](./excel/create-status-and-trend-excel-reports.md). + +### Query-based charts versus Excel-generated PivotCharts (TFS) + +Query-based charts generate data from the work item tracking data store and therefore displays the most recent data. [Excel PivotCharts](./excel/create-status-and-trend-excel-reports.md) access data published to the Analysis Services cube, which is refreshed every two hours by default. Also, Excel PivotCharts are only available to users of an on-premises TFS. + + + +[add-a-team]: ../Work/scale/multiple-teams.md +[team-assets]: ../Work/scale/manage-team-assets.md +[add-team-members]: ../Work/scale/multiple-teams.md#add-team-members +[add-team-admin]: ../work/scale/add-team-administrator.md diff --git a/docs/report/choose-source-data-authoring-tool.md b/docs/report/choose-source-data-authoring-tool.md new file mode 100644 index 00000000000..9bbbc95eaf3 --- /dev/null +++ b/docs/report/choose-source-data-authoring-tool.md @@ -0,0 +1,73 @@ +--- +title: Choose the source of data and authoring tool +description: Guide to data sources and tools for creating and customizing reports - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: cc71c69f-230b-47e6-b29b-398e3e280894 +ms.author: kaelli +ms.manager: douge +ms.date: 03/03/2017 +--- + +# Choose the source of data and authoring tool + +[!INCLUDE [temp](_shared/tfs-header-17-15.md)] + +When you create reports that show data from Team Foundation Server (TFS), you specify one of three sources of data and use one of three authoring tools. The choice of data source and authoring tool are interrelated. + +The simplest reports that you can generate are based on work item lists. You can create reports about work items by exporting a work item query to Office Excel. Work item lists are best suited to tables and charts that handle no more than several hundred work items. + +You can create current status and historical trend data by using the Online analytical processing (OLAP) data cube (TFS\_Analysis), which is optimized for reporting. The OLAP data cube is best suited to reports that provide aggregated information, such as the number of work items that meet a set of criteria. If you want to create reports that show trends over time, such as burn-down or progress charts, you can most easily create them from the OLAP data cube. + +You can use the relational warehouse database (TFS\_Warehouse) to create reports that provide line-item details. These include reports that contain titles of work items and more complex reports that do not include trends or historical data. + +## Data sources and authoring tools + +As the following table shows, your choice of data source depends not only on the kind of data that you want to show but also on the tool that you use to create reports. If you use Excel, you cannot use the warehouse database effectively. If you use Report Builder or Report Designer, you cannot use lists of work items. + +|Authoring tool|Work item query results|OLAP data cube (TFS_Analysis)|Relational warehouse database (TFS_Warehouse)| +|---|---|---|---| +|Excel|Yes|Yes|No| +|Report Builder|No|Yes|Yes| +|Report Designer|No|Yes|Yes| + +For more information about how you can create reports that access the three sources of data, see the related topics in the following table. + +|Authoring tool|Source of data|Related topic| +|---|---|---| +|Excel|Work item query results|[Use the query editor to list and manage queries](../work/track/using-queries.md)| +|Excel|OLAP data cube|[Create Excel reports from a work item query](excel/create-status-and-trend-excel-reports.md)| +|Report Designer|OLAP data cube|[Create an aggregate report using Report Designer and the Analysis Services Cube](sql-reports/create-aggregate-report-report-designer-analysis-services-cube.md)
      | +|Report Designer|Warehouse database|[Create a Detailed Report using Report Designer](sql-reports/create-a-detailed-report-using-report-designer.md)| + +## Creating Reports That are Based on the OLAP Data Cube + +The analysis services database is a multidimensional database that aggregates the data from the warehouse database for more efficient analysis. This data source works especially well with Microsoft Excel. + +The analysis services database organizes data in a cube structure. The cube contains measures that are aggregated against many dimensions. This structure provides aggregate values, such as the hours of work for a set of work items. The values are selected directly from the cube instead of calculated in the query. + +> [!NOTE] +> Some measures, such as **Work Item.Work Item Count**, are not pre-aggregated. They are calculated when the query is performed. + + +You can easily build PivotTable and PivotChart reports in Excel by using the analysis services database. For more information, see [Create Excel reports from a work item query](excel/create-status-and-trend-excel-reports.md). + +For more information about this source of data, see [Perspectives and measure groups provided in the Analysis Services cube for Visual Studio](sql-reports/perspective-measure-groups-cube.md). + +## Creating Reports Based on Warehouse Data + +The warehouse database is a relational database that organizes data in a set of related tables and provides views and table-valued functions for accessing that data. Data from the team project collections is gathered and maintained in the warehouse database. If you are familiar with writing Transact-SQL queries, you can create reports by using the warehouse database. + +> [!NOTE] +> The warehouse database might contain detailed data that is not present in the analysis services database, depending on the work items that your project uses. For more information about how work item fields are mapped to the warehouse, see [Reportable fields reference for Visual Studio ALM](../work/reference/reportable-fields-reference.md). + + +For more information about the warehouse database, see [Table reference for the relational warehouse database](sql-reports/table-reference-relational-warehouse-database.md). + +## Related notes + +- [Create Excel status and trend charts from a query](excel/create-status-and-trend-excel-reports.md) +- [Dashboards and reports](overview.md) +- [Design Reporting Services Paginated Reports with Report Designer (SSRS)](https://msdn.microsoft.com/en-us/library/ms156280.aspx) +- [Report Builder in SQL Server 2016](https://msdn.microsoft.com/en-us/library/dd220460.aspx) + diff --git a/docs/report/dashboard-permissions.md b/docs/report/dashboard-permissions.md new file mode 100644 index 00000000000..ca3a21ea116 --- /dev/null +++ b/docs/report/dashboard-permissions.md @@ -0,0 +1,29 @@ +--- +title: Set permissions and access for tracking in VSTS & TFS +description: How to guide for setting permissions and access levels to support work tracking tasks (VSTS and Team Foundation Server) +ms.technology: vs-devops-reporting +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 07/13/2017 +--- + + +# Set dashboard permissions + +**VSTS | TFS 2018 | TFS 2017.1** + +>[!NOTE] +>**Feature availability:** For VSTS and TFS 2017.1 and later versions, you can set dashboard permissions. + +As a team admin you can set dashboard permissions for your team. As a member of the Project Administrators group, you can set dashboard permissions for all teams. + +From the **Permissions** tab you can grant or restrict permissions to your team members to edit and manage your team dashboards. The default setting provides all team members permissions to edit and manage dashboards. + +Manage dashboards - permissions + +## Related notes + +- [Add a team administrator](../work/scale/add-team-administrator.md) + \ No newline at end of file diff --git a/docs/report/dashboards.md b/docs/report/dashboards.md new file mode 100644 index 00000000000..eeabaf87ec4 --- /dev/null +++ b/docs/report/dashboards.md @@ -0,0 +1,227 @@ +--- +title: Add and manage team dashboards in VSTS & TFS +description: View progress and gain quick access to code, builds, and work items by creating multiple team dashboards in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: B080CEFA-4D94-44B2-99E3-0E3E85616D04 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 09/07/2017 +--- + +# Dashboards + +VSTS | TFS 2018 | TFS 2017 | TFS 2015.1-2015.3 + +> [!NOTE] +> **Feature availability:** Multiple team dashboards and the [widget catalog](widget-catalog.md) are available from Visual Studio Team Services (VSTS) and from the web portal for TFS 2015.1 or later version. +> +> If you connect to an on-premises TFS running TFS 2015 or earlier version, you don't have access to multiple team dashboards. Instead, your home page serves as a [single team dashboard](team-dashboard.md). For information on SharePoint dashboards, see [Project portal dashboards](sharepoint-dashboards/project-portal-dashboards.md).   + +Share progress and status with your team using configurable team dashboards. Dashboards provide easy-to-read, easy access, real-time information. At a glance, you can make informed decisions without having to drill down into other parts of your team project site. + +The Overview page provides access to a default team dashboard which you can customize by adding, removing, or rearranging the tiles. Each tile corresponds to a widget that provides access to one or more features or functions. + +Anyone with access to the team project, including [stakeholders](../quickstart/get-started-stakeholder.md), can view dashboards. However, only team admins can add or modify dashboards. + +If you need to add a team first, see [add teams and team members](../work/scale/multiple-teams.md). + +## Connect to the web portal for your team project + +To add and manage dashboards, you connect to your team project using a [supported web browser](../accounts/requirements.md#supported-browsers). If you don't have a team project yet, create one in [VSTS](../accounts/create-account-msa-or-work-student.md) or set one up in an [on-premises TFS](../accounts/create-team-project.md). + +Open a browser window and click the **Dashboards** hub. + +![Open the Dashboards hub](_img/dashboards-go-to.png) + + +If you don't see the team or team project you want, click the ![project icon](../work/_img/icons/project-icon.png) project icon to [browse all team projects and teams](../connect/account-home-pages.md). + +## Add and name your dashboard + +From the dashboards tab, click the ![plus icon](../Work/_img/icons/green_plus_icon.png) and enter a dashboard name. + +![Add and name a dashboard](_img/dashboards-new-ts.png) + +If you don't see the ![plus icon](../work/_img/icons/green_plus_icon.png), then you're not a team admin for the currently selected team. Either [switch the context to your team](../work/how-to/switch-team-context-work.md), or request you be added as a [team admin](../work/scale/add-team-administrator.md). + +With the dashboard selected, you can add [widgets and charts to the dashboard](add-widget-to-dashboard.md). Or, you can [add charts to a team dashboard from the Work, Build, or Test hubs](add-charts-to-dashboard.md). + + +## Manage dashboards + +>[!NOTE] +>**Feature availability:** You can configure the auto-refresh setting for each dashboard on VSTS and for TFS 2015.2 and later versions. For VSTS and TFS 2017.1 and later versions, you can [set dashboard permissions](dashboard-permissions.md). + +You can rename, reorder, or delete a dashboard. Also, you can enable auto-refresh, and the dashboard will automatically update every 5 minutes. + +From VSTS and TFS 2017, you can also [manage dashboard permissions](dashboard-permissions.md). + + +To manage dashboards, click the ![configure icon](_img/icons/configure-icon.png) wrench icon. + +Open manage dashboards dialog + + +### Reorder and auto-refresh + +1. Drag and drop the dashboards into the sequence you want them to appear. + + Manage dashboards - VSTS + +2. Click ![delete icon](_img/icons/delete_icon.png) to delete a dashboard and then click Save. + +3. Select the Auto-refresh checkbox when you want the dashboard to refresh every five minutes. + + + +### Required permissions + +If you don't see the ![plus icon](../work/_img/icons/green_plus_icon.png), then you don't have permission to edit your team dashboards. In general, you need to be a team admin for the currently selected team to edit dashboards. Request your current team or project admin to add you as a [team admin](../work/scale/add-team-administrator.md). + +If you work in VSTS, you can ask your team admin to change dashboard permissions to allow you and other team members to edit dashboards as described in [Set permissions](dashboard-permissions.md). + +## Move or delete a widget from a dashboard + +> [!NOTE] +> Just as you have to be a team or project admin to add items to a dashboard, you must have admin permissions to remove items. + +Click ![Edit dashboard icon](_img/edit-dashboard-icon.png) to modify your dashboard. You can then drag tiles to reorder their sequence on the dashboard. + +To remove a widget, click the widget's ![Trash icon](_img/dashboard-trash-icon.png) or ![Delete icon](_img/dashboard-delete-icon.png) delete icons. + +When you're finished with your changes, click ![Exit edit-dashboard-mode icon](_img/exit-edit-dashboard-mode-icon.png) to exit dashboard editing. + + + +## Try this next + +As you can see, you can use team dashboards to provide guidance and keep your team in sync, providing visibility across the org as to status, trends, and progress. + +> [!div class="nextstepaction"] +> [Add a widget to a dashboard](add-widget-to-dashboard.md) + + +See these additional resources to help you support your team: +- [Review the widget catalog](widget-catalog.md) +- [Review Marketplace widgets](https://marketplace.visualstudio.com/search?term=widget&target=VSTS&category=All%20categories&sortBy=Relevance) + + +### Extensibility + +Using the REST API service, you can [create a dashboard widget](/vsts/extend/develop/add-dashboard-widget). To learn more about the REST APIs for dashboards and widgets, see [Dashboards (API)](https://www.visualstudio.com/en-us/docs/integrate/api/overviewdashboard/dashboards). + + + + + + + +[!INCLUDE [temp](_shared/help-support-shared.md)] \ No newline at end of file diff --git a/docs/report/excel/_img/ALM_PG_Excel_BugTrends.png b/docs/report/excel/_img/ALM_PG_Excel_BugTrends.png new file mode 100644 index 00000000000..29efffc2698 Binary files /dev/null and b/docs/report/excel/_img/ALM_PG_Excel_BugTrends.png differ diff --git a/docs/report/excel/_img/ALM_PG_Excel_BuildStatus.png b/docs/report/excel/_img/ALM_PG_Excel_BuildStatus.png new file mode 100644 index 00000000000..43ec5e762bd Binary files /dev/null and b/docs/report/excel/_img/ALM_PG_Excel_BuildStatus.png differ diff --git a/docs/report/excel/_img/IC730317.png b/docs/report/excel/_img/IC730317.png new file mode 100644 index 00000000000..aeda5538d1a Binary files /dev/null and b/docs/report/excel/_img/IC730317.png differ diff --git a/docs/report/excel/_img/IC730318.png b/docs/report/excel/_img/IC730318.png new file mode 100644 index 00000000000..af401064c05 Binary files /dev/null and b/docs/report/excel/_img/IC730318.png differ diff --git a/docs/report/excel/_img/IC733832.png b/docs/report/excel/_img/IC733832.png new file mode 100644 index 00000000000..aed6075af60 Binary files /dev/null and b/docs/report/excel/_img/IC733832.png differ diff --git a/docs/report/excel/_img/IC733833.png b/docs/report/excel/_img/IC733833.png new file mode 100644 index 00000000000..6e8b7a16e86 Binary files /dev/null and b/docs/report/excel/_img/IC733833.png differ diff --git a/docs/report/excel/_img/icon_autofilloptions.png b/docs/report/excel/_img/icon_autofilloptions.png new file mode 100644 index 00000000000..315afbaaa40 Binary files /dev/null and b/docs/report/excel/_img/icon_autofilloptions.png differ diff --git a/docs/report/excel/_img/icon_fillhandle.png b/docs/report/excel/_img/icon_fillhandle.png new file mode 100644 index 00000000000..5c2f8c1849b Binary files /dev/null and b/docs/report/excel/_img/icon_fillhandle.png differ diff --git a/docs/report/excel/_img/procg_actperuser.png b/docs/report/excel/_img/procg_actperuser.png new file mode 100644 index 00000000000..ed19eefd18d Binary files /dev/null and b/docs/report/excel/_img/procg_actperuser.png differ diff --git a/docs/report/excel/_img/procg_autodesign.png b/docs/report/excel/_img/procg_autodesign.png new file mode 100644 index 00000000000..1072cda2e33 Binary files /dev/null and b/docs/report/excel/_img/procg_autodesign.png differ diff --git a/docs/report/excel/_img/procg_bugeffectiveness.png b/docs/report/excel/_img/procg_bugeffectiveness.png new file mode 100644 index 00000000000..54f292ea04f Binary files /dev/null and b/docs/report/excel/_img/procg_bugeffectiveness.png differ diff --git a/docs/report/excel/_img/procg_bugsperuser.png b/docs/report/excel/_img/procg_bugsperuser.png new file mode 100644 index 00000000000..759e3f93a95 Binary files /dev/null and b/docs/report/excel/_img/procg_bugsperuser.png differ diff --git a/docs/report/excel/_img/procg_buildqualitybvt.png b/docs/report/excel/_img/procg_buildqualitybvt.png new file mode 100644 index 00000000000..8bbd96aa8e8 Binary files /dev/null and b/docs/report/excel/_img/procg_buildqualitybvt.png differ diff --git a/docs/report/excel/_img/procg_cmmi_testgaps.png b/docs/report/excel/_img/procg_cmmi_testgaps.png new file mode 100644 index 00000000000..8454f318ce2 Binary files /dev/null and b/docs/report/excel/_img/procg_cmmi_testgaps.png differ diff --git a/docs/report/excel/_img/procg_failureanalysis.png b/docs/report/excel/_img/procg_failureanalysis.png new file mode 100644 index 00000000000..a950f2f7072 Binary files /dev/null and b/docs/report/excel/_img/procg_failureanalysis.png differ diff --git a/docs/report/excel/_img/procg_planprogress.png b/docs/report/excel/_img/procg_planprogress.png new file mode 100644 index 00000000000..a3d48704242 Binary files /dev/null and b/docs/report/excel/_img/procg_planprogress.png differ diff --git a/docs/report/excel/_img/procg_reqteststatus.png b/docs/report/excel/_img/procg_reqteststatus.png new file mode 100644 index 00000000000..e3439406e8e Binary files /dev/null and b/docs/report/excel/_img/procg_reqteststatus.png differ diff --git a/docs/report/excel/_img/procg_testactivity.png b/docs/report/excel/_img/procg_testactivity.png new file mode 100644 index 00000000000..e08bdec4e6f Binary files /dev/null and b/docs/report/excel/_img/procg_testactivity.png differ diff --git a/docs/report/excel/_img/procg_testactperbuild.png b/docs/report/excel/_img/procg_testactperbuild.png new file mode 100644 index 00000000000..98c288382ab Binary files /dev/null and b/docs/report/excel/_img/procg_testactperbuild.png differ diff --git a/docs/report/excel/_img/procg_testcaseauthoring.png b/docs/report/excel/_img/procg_testcaseauthoring.png new file mode 100644 index 00000000000..18d3f438595 Binary files /dev/null and b/docs/report/excel/_img/procg_testcaseauthoring.png differ diff --git a/docs/report/excel/_img/procg_userstorystatus.png b/docs/report/excel/_img/procg_userstorystatus.png new file mode 100644 index 00000000000..8c63145ce99 Binary files /dev/null and b/docs/report/excel/_img/procg_userstorystatus.png differ diff --git a/docs/report/excel/_img/procguid_7day.png b/docs/report/excel/_img/procguid_7day.png new file mode 100644 index 00000000000..3dc3cbff9e2 Binary files /dev/null and b/docs/report/excel/_img/procguid_7day.png differ diff --git a/docs/report/excel/_img/procguid_agileburn.png b/docs/report/excel/_img/procguid_agileburn.png new file mode 100644 index 00000000000..82ba10f1dde Binary files /dev/null and b/docs/report/excel/_img/procguid_agileburn.png differ diff --git a/docs/report/excel/_img/procguid_agileexcel.png b/docs/report/excel/_img/procguid_agileexcel.png new file mode 100644 index 00000000000..43ec5e762bd Binary files /dev/null and b/docs/report/excel/_img/procguid_agileexcel.png differ diff --git a/docs/report/excel/_img/procguid_agileexr.png b/docs/report/excel/_img/procguid_agileexr.png new file mode 100644 index 00000000000..46224712d66 Binary files /dev/null and b/docs/report/excel/_img/procguid_agileexr.png differ diff --git a/docs/report/excel/_img/procguid_agiletest.png b/docs/report/excel/_img/procguid_agiletest.png new file mode 100644 index 00000000000..71bd116893e Binary files /dev/null and b/docs/report/excel/_img/procguid_agiletest.png differ diff --git a/docs/report/excel/_img/procguid_bugtrends.png b/docs/report/excel/_img/procguid_bugtrends.png new file mode 100644 index 00000000000..29efffc2698 Binary files /dev/null and b/docs/report/excel/_img/procguid_bugtrends.png differ diff --git a/docs/report/excel/_img/procguid_byassignment.png b/docs/report/excel/_img/procguid_byassignment.png new file mode 100644 index 00000000000..83d87a4229f Binary files /dev/null and b/docs/report/excel/_img/procguid_byassignment.png differ diff --git a/docs/report/excel/_img/procguid_bypriority.png b/docs/report/excel/_img/procguid_bypriority.png new file mode 100644 index 00000000000..3ad5fc0ad35 Binary files /dev/null and b/docs/report/excel/_img/procguid_bypriority.png differ diff --git a/docs/report/excel/_img/procguid_codechurn.png b/docs/report/excel/_img/procguid_codechurn.png new file mode 100644 index 00000000000..47e487125e9 Binary files /dev/null and b/docs/report/excel/_img/procguid_codechurn.png differ diff --git a/docs/report/excel/_img/procguid_codecoverage.png b/docs/report/excel/_img/procguid_codecoverage.png new file mode 100644 index 00000000000..8f1bd2791c4 Binary files /dev/null and b/docs/report/excel/_img/procguid_codecoverage.png differ diff --git a/docs/report/excel/_img/procguid_excelbug.png b/docs/report/excel/_img/procguid_excelbug.png new file mode 100644 index 00000000000..8e7684f3640 Binary files /dev/null and b/docs/report/excel/_img/procguid_excelbug.png differ diff --git a/docs/report/excel/_img/procguid_excelreport.png b/docs/report/excel/_img/procguid_excelreport.png new file mode 100644 index 00000000000..4266d354108 Binary files /dev/null and b/docs/report/excel/_img/procguid_excelreport.png differ diff --git a/docs/report/excel/_img/procguid_exceltask.png b/docs/report/excel/_img/procguid_exceltask.png new file mode 100644 index 00000000000..723ecfa0f62 Binary files /dev/null and b/docs/report/excel/_img/procguid_exceltask.png differ diff --git a/docs/report/excel/_img/procguid_exceltestcase.png b/docs/report/excel/_img/procguid_exceltestcase.png new file mode 100644 index 00000000000..e94bc0b01a6 Binary files /dev/null and b/docs/report/excel/_img/procguid_exceltestcase.png differ diff --git a/docs/report/excel/_img/procguid_exruserstore.png b/docs/report/excel/_img/procguid_exruserstore.png new file mode 100644 index 00000000000..e393b6fd9d0 Binary files /dev/null and b/docs/report/excel/_img/procguid_exruserstore.png differ diff --git a/docs/report/excel/_img/procguid_failureanalysis.png b/docs/report/excel/_img/procguid_failureanalysis.png new file mode 100644 index 00000000000..699e1356679 Binary files /dev/null and b/docs/report/excel/_img/procguid_failureanalysis.png differ diff --git a/docs/report/excel/_img/procguid_reqprogress.png b/docs/report/excel/_img/procguid_reqprogress.png new file mode 100644 index 00000000000..cf05f72c6e0 Binary files /dev/null and b/docs/report/excel/_img/procguid_reqprogress.png differ diff --git a/docs/report/excel/_img/procguid_testactivity.png b/docs/report/excel/_img/procguid_testactivity.png new file mode 100644 index 00000000000..8385403c28d Binary files /dev/null and b/docs/report/excel/_img/procguid_testactivity.png differ diff --git a/docs/report/excel/bug-progress-excel-report.md b/docs/report/excel/bug-progress-excel-report.md new file mode 100644 index 00000000000..e16628aa5ae --- /dev/null +++ b/docs/report/excel/bug-progress-excel-report.md @@ -0,0 +1,72 @@ +--- +title: Bug Progress Excel Report | TFS +description: Tracks the team's progress toward resolving Bugs - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 471fb90b-9815-4d26-aa01-7ee293682717 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- + +# Bug Progress Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +You can use the Bug Progress report in Office Excel to track the team's progress toward resolving Bugs. This report shows the number of Bugs in each state over time. For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Bugs Progress report from the Bugs dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + +## Data in the Report + You can use the Bug Progress report to understand how well the team is finding, fixing, and closing Bugs. This report is based on a PivotChart report that shows the last four weeks of data captured for bugs. The data is stored in the data warehouse. + + ![Bug Progress Excel Report](_img/procguid_excelbug.png "ProcGuid_ExcelBug") + +### Required Activities for Tracking Bugs + For the Bug Progress chart to be useful and accurate, the team must perform the following activities: + +- Define Bugs, and specify their **Iteration** and **Area** paths. + + > [!NOTE] + > For information about how to define area and iteration paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +- Specify the **Priority** of each Bug. + +- Update the **State** of each Bug as the team fixes, verifies, and closes it. + +## Interpreting the Report + You should expect the Bug Progress report to vary based on where you are in your product development cycle. Early iterations should show a gradual increase in the active number of Bugs. Iterations that are close to the end of a product cycle should show a wide band of resolved and closed Bugs. + + You can review the chart to determine the progress over time or within an iteration. Specifically, you can find answers to the following questions: + +- How quickly is the team resolving and closing Bugs? + +- Is the team fixing Bugs quickly enough to finish on time? + +- Did the team find any Bugs in the past several weeks? + + For information about healthy and unhealthy versions of the report, see [Bug Status](../sql-reports/bug-status-report.md). + +## Customizing the Report + You can customize the Bug Progress report by opening it in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Burndown of Bugs for an iteration|Change the filter for **Iteration** (default=All)| +|Burndown of Bugs for a product area|Change the filter for **Area** (default=All)| +|Burndown of Bugs for the last six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to Customize Excel Reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/bug-reactivations-excel-report.md b/docs/report/excel/bug-reactivations-excel-report.md new file mode 100644 index 00000000000..9b3f741b35f --- /dev/null +++ b/docs/report/excel/bug-reactivations-excel-report.md @@ -0,0 +1,80 @@ +--- +title: Bug Reactivations Excel Report | TFS +description: Use the Bug Reactivations report to determine how effectively the team is fixing bugs - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: c26a24cc-5710-425d-8fc4-77e35442e743 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Bug Reactivations Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Bug Reactivations report to determine how effectively the team is fixing bugs. This report shows the cumulative count of Bugs that the team has reactivated and Bugs that the team has since resolved, for the most recent four weeks. The reactivation rate is also referred to as the fault feedback ratio. + + For information about how to access this chart, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Bug Reactivations report from the Quality dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + The Bug Reactivations report shows an area graph of the number of Bugs that the team has reactivated (**Reactivated and Still Active**) from a resolved or closed state and Bugs that the team has **Resolved**. + + ![Bug Reactivations Excel Report](_img/procguid_agileexr.png "ProcGuid_AgileExR") + + This report is based on a PivotChart report that shows the most recent four weeks of data that was captured for Bugs and that is stored in the data warehouse. + +### Required Activities for Tracking Bugs + For the Bug Reactivations report to be useful and accurate, the team must perform the following activities: + +- Define Bugs. + + > [!NOTE] + > For information about how to define area and iteration paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +- Update the **State** of each Bug as the team fixes, verifies, closes, or reactivates it. + +- (Optional) Specify the **Iteration** and **Area** paths of each Bug if you want to filter by those fields. + +## Interpreting the Report + You should expect the Bug Reactivations report to vary based on where you are in your product development cycle. Early iterations should show very few reactivations. As the team closes Bugs, you will want to review the rate of reactivations. + + The Reactivations report displays information that you can use to detect whether the team is reactivating a high number of Bugs or User Stories. The reactivation rate counts the number of supposedly fixed Bugs whose fixes do not work. These reactivations can create a harmful cycle of rework that interferes with making progress on planned tasks. + + You can review the report to answer these questions: + +- How many Bugs have been reactivated in the past four weeks? + +- Is the team resolving and closing reactivated Bugs quickly enough? + + For information about healthy and unhealthy versions of the report, see [Reactivations](../sql-reports/reactivations-report.md). + +## Updating and Customizing the Report + You can update the Bug Reactivations report by opening it in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Reactivation of Bugs for an iteration|Change the filter for **Iteration** (default=All)| +|Reactivation of Bugs for a product area|Change the filter for **Area** (default=All)| +|Reactivation of Bugs for the last six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTables and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/bug-trends-excel-report.md b/docs/report/excel/bug-trends-excel-report.md new file mode 100644 index 00000000000..3054d10b904 --- /dev/null +++ b/docs/report/excel/bug-trends-excel-report.md @@ -0,0 +1,59 @@ +--- +title: Bug Trends Excel Report | TFS +description: Track the rate at which the team is discovering, resolving, and closing Bugs - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: fedaecea-cedb-467b-b8f4-03f63420f7b3 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Bug Trends Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Bug Trends report in Office Excel to track the rate at which the team is discovering, resolving, and closing Bugs. This report shows a moving average of Bugs that the team has discovered and resolved over time. For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Bugs Trends report from the Bugs dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + +## Data in the Report + You can use the Bug Trends report to understand the rate at which the team is finding, fixing, and closing Bugs. This report is based on a PivotChart report that shows the last four weeks of data captured for Bugs. That data is stored in the data warehouse. + + ![Bug Trends report](_img/procguid_bugtrends.png "ProcGuid_BugTrends") + + You should expect the Bug Trends report to vary based on where you are in your product development cycle. Early iterations should exhibit a gradual increase in the rate at which the team discovers bugs. + + For information about healthy and unhealthy versions of the report, see [Bug Trends](../sql-reports/bug-trends-report.md). + +### Required Activities for Tracking Bugs + For the Bug Trends report to be useful and accurate, the team must perform the following activities: + +- Define Bugs, and specify their **Iteration** and **Area** paths. + + > [!NOTE] + > For information about how to define area and iteration paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +- Update the **State** of each Bug as it is fixed, verified, and closed. + +## Customizing the Report + You can customize the Bug Trends report by opening the report in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Bug trends for an iteration|Change the filter for **Iteration** (default=All)| +|Bug trends for a product area|Change the filter for **Area** (default=All)| +|Bug trends for the last six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to Customize Excel Reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/bugs-by-assignment-excel-report.md b/docs/report/excel/bugs-by-assignment-excel-report.md new file mode 100644 index 00000000000..571be518eb4 --- /dev/null +++ b/docs/report/excel/bugs-by-assignment-excel-report.md @@ -0,0 +1,72 @@ +--- +title: Bugs by Assignment Excel Report | TFS +description: Shows the distribution of active Bugs, grouped by priority, to team members - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: c7851b4c-33a2-4536-85d3-ec73c8e2a8b6 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Bugs by Assignment Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +The Bugs by Assignment report shows the distribution of active Bugs, grouped by priority, to team members. For information about how to access this chart, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Bugs by Assignment report from the Bugs Dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + +## Data in the Report + You can use the Bugs by Assignment report to understand the distribution of Bugs to team members and determine whether to reassign some Bugs. This report is based on a PivotChart report that shows the last four weeks of data captured for Bugs. This data is stored in the data warehouse. + + ![Bugs by Assignment chart](_img/procguid_byassignment.png "ProcGuid_ByAssignment") + + You can review the Bugs by Assignment report to determine the allocation of bugs to each team member. Specifically, you can find answers to the following questions: + +- How many bugs are assigned to each team member? + +- Which team member is assigned the most bugs? + +- Which team member is assigned the most high priority bugs? + +- Does any team member have a backlog of priority 1 bugs that warrant redistribution? + +### Required Activities for Tracking Bugs + For the Bugs by Assignment report to be useful and accurate, the team must perform the following activities: + +- Define Bugs, and specify their **Iteration** and **Area** paths. + + > [!NOTE] + > For information about how to define area and iteration paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +- Assign each Bug to the team member who is working to resolve or close it. + +- Specify the **Priority** of each Bug. + +- Update the **State** of each Bug as the team fixes, verifies, and closes it. + +## Customizing the Report + You can customize the Bugs by Assignment report by opening it in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Distribution of Bugs for an iteration|Change the filter for **Iteration** (default=All)| +|Distribution of Bugs for a product area|Change the filter for **Area** (default=All)| +|Distribution of Bugs by severity|In the Columns PivotTable Field List, replace **Priority** with **Severity**| +|Distribution of bugs for the last six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| +|Distribution of resolved or closed Bugs to team members|Change the filter for **State** to **Resolved** or **Closed** (default=**Active**)| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to Customize Excel Reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/bugs-by-priority-excel-report.md b/docs/report/excel/bugs-by-priority-excel-report.md new file mode 100644 index 00000000000..e21e46771e7 --- /dev/null +++ b/docs/report/excel/bugs-by-priority-excel-report.md @@ -0,0 +1,66 @@ +--- +title: Bugs by Priority Excel Report | TFS +description: Shows the distribution of active Bugs, grouped by priority - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: c1ba2ff0-b4f5-4ddb-88ce-f3358161b877 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Bugs by Priority Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +The Bugs by Priority report in Office Excel shows the distribution of active Bugs, grouped by priority. For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Bugs by Priority report from the Bugs dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + +## Data in the Report + You can use the Bugs by Priority report to understand the distribution of active Bugs by priority. As the following illustration shows, this report is based on a PivotChart report that shows the last four weeks of the data captured for Bugs. This data is stored in the data warehouse. + + ![Bugs by priority chart](_img/procguid_bypriority.png "ProcGuid_ByPriority") + + You can review the Bugs by Priority report to determine the overall distribution of Bugs by priority. Specifically, you can find answers to the following questions: + +- How many priority 1, 2, and 3 Bugs are active? + +- Is the team resolving priority 1 Bugs before resolving priority 2 and 3 Bugs? + +### Required Activities for Tracking Bugs + For the Bugs by Priority report to be useful and accurate, the team must perform the following activities: + +- Define Bugs, and specify their **Iteration** and **Area** paths. + + > [!NOTE] + > For information about how to define area and iteration paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +- Specify the **Priority** of each Bug. + +- Update the **State** of each Bug as the team fixes, verifies, and closes it. + +## Customizing the Report + You can customize the Bugs by Priority report by opening it in Office Excel and changing the filter options or a column field list for the PivotTable report. You can customize this report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|Distribution of Bugs for an iteration|Change the filter for **Iteration** (default=All)| +|Distribution of Bugs for a product area|Change the filter for **Area** (default=All)| +|Distribution of Bugs by severity|In the Columns PivotTable Field List, replace **Priority** with **Severity**| +|Distribution of Bugs for the last six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| +|Distribution of resolved or closed Bugs|Change the filter for **State** to resolved or closed (default=Active)| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to Customize Excel Reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/build-quality-excel-report.md b/docs/report/excel/build-quality-excel-report.md new file mode 100644 index 00000000000..91d91f30ddb --- /dev/null +++ b/docs/report/excel/build-quality-excel-report.md @@ -0,0 +1,91 @@ +--- +title: Build Quality Excel Report | TFS +description: Help monitor the success or failure rate of test activity with each build - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 60e637b9-4599-4fe5-bff1-e6adade81d9c +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Build Quality Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +Teams who are responsible for testing software can use the Build Quality report to help monitor the success or failure rate of test activity with each build. The Build Quality report provides the following reports, which show the test results for all build definitions for a team project. + +- **Build Verification Testing**: Helps the team monitor the quality of builds by showing test results for all automated tests that are marked as Build Verification Test (BVT) that are run during the build process. + +- **Test Activity Per Build**: Helps the team monitor the quality of builds by showing test results for all tests that have been run against the build for all or selected test plans. + + > [!NOTE] + > You can view the Build Quality report if you open Team Explorer, open the team project, open the **Excel Reports** folder, and open the **Test Team Management** folder. You can access this folder only if your team project portal has been enabled and is configured to use SharePoint Server Enterprise Edition. For more information, see [Share information using the project portal](../sharepoint-dashboards/share-information-using-the-project-portal.md). + + These reports are available only when the team creates test plans and starts to run tests by using Microsoft Test Manager. For information about how to define test suites and test plans, see [Plan your tests](../../manual-test/getting-started/create-test-cases.md). For information about how to access this report, see [Excel reports](excel-reports.md). + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the reports + The Build Quality reports illustrate the cumulative count of test results for all build definitions for a team project. Both reports are based on PivotTable reports that access data that is stored in the data warehouse. The count that is shown in each report is a count of the most recent version of each test result in a particular build. + + **Build verification testing** + + ![Build Quality Excel Report](_img/procg_buildqualitybvt.png "ProcG_BuildQualityBVT") + + **Test activity per build** + + ![Test Activity PerBuild Excel Report](_img/procg_testactperbuild.png "ProcG_TestActPerBuild") + + The following table describes the report filters and fields that are used in the PivotTables that generate the Build Quality reports. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes build results for build definitions that are defined for the selected team project.
      - **Test Result - Iteration Hierarchy**: Includes test results that were run from test cases that were assigned to the selected iterations.
      - **Test Result - Area Hierarchy**: Includes test results that were run from test cases that were assigned to the selected product areas.
      - **Build - Build Definition Name**: Includes test results that were run against builds that belong to the selected build definitions.

      **Filter specific to the Build Verification Testing report**:

      - **Test Run - Is Build Verification Run**: Includes test results from all automated tests that were run during the build process and configured as BVT.|- **Test Result - Outcome**: The outcome of the test (for example, Blocked, Never Run, Failed, None, and Passed).
      - **(Measure) Test Result - Build Result Count Trend**: Counts the most recent version of each test result in a particular build.
      - **Build - Build Name**: The name of the build. Each time that a build is run, it is assigned a name that contains the build definition name as its prefix.| + +### Required activities for monitoring build quality + For the Build Quality report to be useful and accurate, the team must perform the following activities: + +- Define test cases and test plans, and assign test cases to the test plans. + +- **Define tests to run automatically as part of the build**. As part of the build definition, you can define tests to run as part of the build or to fail if the tests fail. + + For more information, see [Run tests in your build process](../../build-release/test/test-build.md). + +- **Run builds regularly**. You can run builds at set intervals or after every check-in. You can create regular builds when you use the schedule trigger. + + For more information, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + +- **Run tests**. For more information, see [Run your tests](../../manual-test/getting-started/run-manual-tests.md). + +- (Optional) To support filtering, assign **Iteration** and **Area** paths to each test case. + + > [!NOTE] + > The project administrator for each team project defines area and iteration paths for that project so that the team can track progress by those designations. For more information, see[Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +## Updating and customizing the report + You can update the Build Quality report by opening it in Office Excel and changing the filter options for the PivotTable report for one of the worksheets. You can customize each report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|Build quality for select iterations|Change the filter for **Iteration** (default=All)| +|Build quality for select product areas|Change the filter for **Area** (default=All)| +|Build quality for select build definitions|Change the filter for **Build Definition Name** (default=All)| +|Build quality for the most recent six, eight, or more weeks|In the Columns PivotTable Field List, add the **Date - Sets** field and select **@@Last 6 weeks@@** or other set| + + For more information about how to work with and customize PivotTables and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/build-status-excel-report.md b/docs/report/excel/build-status-excel-report.md new file mode 100644 index 00000000000..65110b78eed --- /dev/null +++ b/docs/report/excel/build-status-excel-report.md @@ -0,0 +1,81 @@ +--- +title: Build Status Excel Report | TFS +description: Helps track the progress of builds by showing the number of builds that failed or succeeded - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: ada4926d-5e2b-4a17-b651-60684e4d72cd +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Build Status Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +The Build Status report helps the team track the progress of their builds by showing the number of builds that failed or succeeded for the most recent four weeks. + + For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Build Status report from the Quality dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + The team can review the Build Status report to help determine the trend of build health over time and whether any builds need attention today. As the following illustration shows, the report provides a stacked column of the number of builds that were run with an outcome of failed, passed, or unknown during the most recent two weeks. + + ![Build Status report](_img/procguid_agileexcel.png "ProcGuid_AgileExcel") + + The chart is based on a PivotTable from data that is stored in the Analysis Services database. + +### Required Activities for Tracking Build Status + For the Build Status report to be useful and accurate, the team must perform the following activities: + +- **Configure a build system**. To use Team Foundation Build, you must set up a build system. + + For more information, see [Build and Release agents](../../build-release/concepts/agents/agents.md). + +- **Create build definitions**. You can create several build definitions and then run each of them to produce code for a different platform. Also, you can run each build definition for a different configuration. + + For more information, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + +- **Run builds regularly**. You can run builds at set intervals or after every check-in. You can create regular builds when you use the schedule trigger. + + For more information, see [Build triggers](../../build-release/concepts/definitions/build/triggers.md). + + > [!NOTE] + > Although a team member can manually rate a build by using Build Explorer, this rating is not reflected in the Build Quality Indicators report. The build rating appears in the Build Summary report. For more information, see [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx) and [Build Summary](../sql-reports/build-summary-report.md). + +## Interpreting the Report + You can use the Builds Status report to gain insight into the following questions: + +- How is my team's build health changing over time? + +- Do any builds need attention today? + +## Customizing the Report + You can customize the Builds Status report by opening it in Office Excel and changing the filter options or a column field list for the PivotTable report. You can modify the report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|Build results for an iteration|Change the filter for **WorkItem.Iteration** (default=All)| +|Build results for a product area|Change the filter for **WorkItem.Area** (default=All)| +|Build results for the most recent six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/burndown-excel-report.md b/docs/report/excel/burndown-excel-report.md new file mode 100644 index 00000000000..85860cc35d5 --- /dev/null +++ b/docs/report/excel/burndown-excel-report.md @@ -0,0 +1,78 @@ +--- +title: Burndown Excel Report | TFS +description: Determine how much progress the team has made in completing work for an iteration or other interval of time - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: ac299174-7f32-4867-8efb-c7bb50cdbd51 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- + +# Burndown Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +You can use the Burndown report to help determine how much progress the team has made in completing work for an iteration or other interval of time. The report shows how many hours of work the team has completed and how many hours remain. For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Burndown report from the Progress dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + The Burndown report shows a stacked area chart of the **Completed Work** and **Remaining Work** hours that have been tracked for all Tasks during the time interval set for the report. The default interval is the current week through the next three weeks. + + ![Burndown chart](_img/procguid_agileburn.png "ProcGuid_AgileBurn") + + The **Ideal Trend** line calculates a slope or trajectory for when the team will complete work based on the amount of work that remains and the end date of the report. A healthy Burndown chart shows that the team is making steady progress toward finishing the work. The line is drawn from the remaining work on the start date and intersects the x-axis on the end date. + +## Required Activities for Tracking Burndown + For the Burndown chart to be useful and accurate, the team must perform the following activities: + +- Define Tasks, and specify the **Iteration** and **Area** paths for each. + +- Specify and update the **Completed** and **Remaining** fields for each Task as the team works on it. + + > [!IMPORTANT] + > If you subdivide a Task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent Task and User Story. + +## Interpreting the Report + You can review the Burndown report to determine the progress that the team made during an iteration. For example, you can find answers to the following questions: + +- How fast is the team completing remaining work? + +- Is the team adding work during the iteration? Is the team allowing scope creep? + +- How much work can the team complete in the available time? + +- When can the team finish the work? + +- When can the team finish the current iteration? + +## Updating and Customizing the Report + You can update the Burndown report by opening the report in Office Excel and changing the filter options for the PivotTable report or change the start date for the report. You can customize this report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Burndown for an iteration|Change the filter for **Iteration** (default=All)| +|Burndown for a product area|Change the filter for **Area** (default=All)| +|Burndown for a specific time interval|In the **Reports** worksheet, perform the following steps:

      1. In the cell under **Date**, specify the start date of the time interval in either mm/dd or mm/dd/yyyy format.
      2. Click the cell that contains the start date that you just specified, and then drag the fill handle![A small square in the cell's lower-right corner.](_img/icon_fillhandle.png "Icon_FillHandle") across the cells that you want to fill.
      3. (Optional) Use the **Auto Fill Options** button ![Auto Fill Options button image](_img/icon_autofilloptions.png "Icon_AutoFillOptions") to specify how to fill the selection. For example, you can specify **Fill Series** or **Fill Weekdays**.
      For more information, see the following page on the Microsoft Web site: [Fill data in worksheet cells](http://go.microsoft.com/fwlink/?LinkID=165808).
      4. On the **Data** tab, in the **Connections** group, click **Refresh All.**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/code-churn-excel-report.md b/docs/report/excel/code-churn-excel-report.md new file mode 100644 index 00000000000..80d8f6b94e5 --- /dev/null +++ b/docs/report/excel/code-churn-excel-report.md @@ -0,0 +1,95 @@ +--- +title: Code Churn Excel Report | TFS +description: Understand how many lines of code the team added, deleted, or modified during the most recent four weeks - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 753f0afd-3852-4724-ae3e-a1644f304e00 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- + +# Code Churn Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +With the Code Churn report, you can analyze how source files are changing over time. This report shows how many lines of code the team added, deleted, or modified during the most recent four weeks. + + For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Code Churn report from the Quality dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + The team can review the Code Churn report to determine how volatile the code base is and how many lines of code were modified in the previous week. As the following illustration shows, the report provides a stacked area graph of the lines of code that the team added, deleted, or modified in the most recent four weeks. + + ![Code Churn Report](_img/procguid_codechurn.png "ProcGuid_CodeChurn") + + This report is based on a PivotChart report that shows the most recent four weeks of data that were captured for code changes and that is stored in the data warehouse. All lines are counted, even lines that contain comments or that are blank. + +### Required Activities for Tracking Code Churn + For the Code Churn report to be useful and accurate, team members must perform the following activities: + +- **Configure a build system**. To use Team Foundation Build, you must set up a build system. + + For more information, see [Build and Release agents](../../build-release/concepts/agents/agents.md). + +- **Create build definitions**. You can create several build definitions, and run each of them to produce code for a different platform. Also, you can run each build for a different configuration. + + For more information, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + +- **Define tests to run automatically as part of the build**. As part of the build definition, you can define tests to run as part of the build or to fail if the tests fail. + + For more information, see [Set up continuous testing for your builds](../../build-release/test/set-up-continuous-testing-builds.md). + +- **Configure tests to gather code coverage data**. For code coverage data to appear in the report, team members must instrument tests to gather that data. + + For more information, see [Code Coverage configuration using Test Settings is deprecated](https://msdn.microsoft.com/en-us/library/dd504821.aspx) and [(NIB) How to: Gather Code-Coverage Data with Generic Tests](http://msdn.microsoft.com/en-us/164f5cb9-9dad-4a0b-83e3-68e83ca99431). + +- **Run builds regularly**. You can run builds at set intervals or after every check-in. You can create regular builds when you use the schedule trigger. + + For more information, see [Build triggers](../../build-release/concepts/definitions/build/triggers.md). + + > [!NOTE] + > Although a team member can manually rate a build by using Build Explorer, this rating is not reflected in the Build Quality Indicators report. The build rating appears in the Build Summary report. For more information, see [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx) and [Build Summary](../sql-reports/build-summary-report.md). + +## Interpreting the Report + Code churn is a good measure to quantify the amount of change that is occurring in your project. In general, high levels of code churn indicate a less stable project. You should expect high rates of code churn at the start of a product cycle or when the team has implemented many changes. Toward the end of an iteration or before a release, you should expect the level of code churn to decrease, which indicates that your project is more stable. + + You can review the Code Churn report to answer these questions: + +- How much of the code is the team testing? + +- Is the team testing enough of the code? + +- Based on the code coverage and test metrics, is the team likely to meet target goals? + + For more information about how code churn affects quality, see [Quality](../sharepoint-dashboards/quality-dashboard-agile-cmmi.md). + +## Customizing the Report + You can customize the Code Churn report by opening it in Office Excel and changing the filter options or a column field list for the PivotTable report. You can modify the report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Code churn for an iteration|Change the filter for **Iteration** (default=All)| +|Code churn for a product area|Change the filter for **Area** (default=All)| +|Code churn for the most recent six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/code-coverage-excel-report.md b/docs/report/excel/code-coverage-excel-report.md new file mode 100644 index 00000000000..db89b231bcb --- /dev/null +++ b/docs/report/excel/code-coverage-excel-report.md @@ -0,0 +1,91 @@ +--- +title: Code Coverage Excel Report | TFS +description: Understand how to use this report to help determine how close parts of the code are to release quality - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: bf316d3c-5d74-42d4-90f1-bb411b0bf13d +ms.author: kaelli +ms.date: 12/30/2016 +ms.manager: douge +--- + +# Code Coverage Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +With the Code Coverage report, you can monitor how much code the team is testing over time. Team members can use this report to help determine how close parts of the code are to release quality. For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Code Coverage report from the Quality dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + The team can review the Code Coverage report to determine whether tests cover the code sufficiently and how the coverage changed over time. As the following illustration shows, the report provides a line graph of the build verification test (BVT) code coverage and other coverage over the most recent four weeks. + + ![Code Coverage Report](_img/procguid_codecoverage.png "ProcGuid_CodeCoverage") + + This report is based on a PivotChart report that shows the most recent four weeks of data that was captured for code changes and that is stored in the data warehouse. + +### Required Activities for Tracking Code Coverage + For the Code Coverage report to be useful and accurate, team members must perform the following activities: + +- **Configure a build system**. To use Team Foundation Build, you must set up a build system. + + For more information, see [Build and Release agents](../../build-release/concepts/agents/agents.md). + +- **Create build definitions**. You can create several build definitions and then run each of them to produce code for a different platform. Also, you can run each build for a different configuration. + + For more information, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + +- **Define tests to run automatically as part of the build**. As part of the build definition, you can define tests to run as part of the build or to fail if the tests fail. + + For more information, see [Set up continuous testing for your builds](../../build-release/test/set-up-continuous-testing-builds.md). + +- **Configure tests to gather code coverage data**. For code coverage data to appear in the report, team members must instrument tests to gather that data. + +- **Run builds regularly**. You can run builds at set intervals or after every check-in. You can create regular builds when you use the schedule trigger. + + For more information, see [Build triggers](../../build-release/concepts/definitions/build/triggers.md). + + > [!NOTE] + > Although a team member can manually rate a build by using Build Explorer, this rating is not reflected in the Build Quality Indicators report. The build rating appears in the Build Summary report. For more information, see [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx) and [Build Summary](../sql-reports/build-summary-report.md). + +## Interpreting the Report + If the team practices test-driven development or similar techniques, the code coverage should almost always approach 100%. If unit tests are reused as BVTs, the code coverage should be visible in the Code Coverage report. + + You can review the Code Coverage report to answer these questions: + +- How much of the code is the team testing? + +- Does the team have sufficient code coverage? + +- Is code coverage increasing or decreasing over time? + + For more information about how code coverage impacts quality, see [Quality](../sharepoint-dashboards/quality-dashboard-agile-cmmi.md) and [Build Quality Indicators](../sql-reports/build-quality-indicators-report.md). + +## Customizing the Report + You can customize the Code Coverage report by opening it in Office Excel and changing the filter options or a column field list for the PivotTable report. You can modify the report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|Code coverage for an iteration|Change the filter for **Iteration** (default=All)| +|Code coverage for a product area|Change the filter for **Area** (default=All)| +|Code coverage for the most recent six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/create-status-and-trend-excel-reports.md b/docs/report/excel/create-status-and-trend-excel-reports.md new file mode 100644 index 00000000000..4cb4012e566 --- /dev/null +++ b/docs/report/excel/create-status-and-trend-excel-reports.md @@ -0,0 +1,115 @@ +--- +title: Create Excel reports from a work item query | TFS +description: View progress by creating status and trend Excel charts from a flat list query when connecting to a team project on Team Foundation Server (TFS) +ms.assetid: EBBA2C3A-A9F4-4808-B746-5DC0F039EA53 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 08/03/2017 +ms.topic: get-started-article +--- + +# Create Excel reports from a work item query + +TFS 2017 | TFS 2015 | TFS 2013 + +>[!NOTE] +>Feature availability: You can use this feature only when you connect to a team project hosted an on-premises Team Foundation Server (TFS) and with SQL Server Analysis Services configured. +> +>If you want to export work items to Excel, see [Bulk add or modify work items with Excel](../../work/office/bulk-add-modify-work-items-excel.md). + +One of the quickest ways to generate a custom report in Excel is to start with a flat list query. You can generate both status and trend charts. Also, once you've build a report, you can manipulate the data further by adding or filtering fields using the PivotTable. + +Here's an example of a status report generated from a flat-list query. + +![Excel State pie chart report](_img/IC733832.png) + + +#### Requirements +You can generate these reports only when you work with an on-premises TFS that has been configured with reporting services. + +* Your deployment needs to be integrated with reporting services. If your on-premises TFS application-tier server hasn't been configured to support reporting services, you can add that functionality by following the steps provided here: [Add reports to a team project](../admin/add-reports-to-a-team-project.md). + + +* You must be a member of the **TfsWarehouseDataReader** security roles. To get added, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + +* A version of Excel that is compatible with Office 2007, Office 2010, or Office 2013. If you don't have Excel, [install it now](http://office.microsoft.com/excel/). + + +* Either Visual Studio or the Team Explorer plug-in for Visual Studio, which you can [install from this download site](https://www.visualstudio.com/downloads/download-visual-studio-vs). Team Explorer is free and requires a Windows OS. + + You need to install Team Explorer to get the Team Foundation add-in for Excel. + +## Create an Excel report from a flat-list query + +Use this procedure when you work from the Team Explorer plug-in for Visual Studio. + +1. Create or open a [flat-list query](../../work/track/using-queries.md#flat-list-query) that contains the work items that you want to include in the report. + + Choose the fields you want to base reports on and include them in the filter criteria or as a column option. For non-reportable fields, see [Q: Which fields are non-reportable](#which_fields_are_non_reportable)? + +2. Create a report in Excel From the query results view. + + ![Create Report in Microsoft Excel](_img/IC730317.png) + +3. Select the check boxes of the reports that you want to generate. + + ![Expanded nodes, New Work Item Report dialog box](_img/IC730318.png) + + Wait until Excel finishes generating the reports. This step might take several minutes, depending on the number of reports and quantity of data. + + Each worksheet displays a report. The first worksheet provides hyperlinks to each report. Pie charts display status reports and area graphs display trend charts. + +4. To view a report, choose a tab, for example, choose the State tab to view the distribution of work items by State. + + You can change the chart type and filters. For more information, see [Use PivotTables and other business intelligence tools to analyze your data](http://office.microsoft.com/excel-help/use-pivottables-and-other-business-intelligence-tools-to-analyze-your-data-HA104042322.aspx?CTT=1). + +## Create a query-based report by using Excel + +Use this procedure when you work from the web portal or the Team Explorer plug-in for Visual Studio. + +1. Open an Office Excel workbook and choose **New Report**. + ![New Report (Team menu selection)](_img/IC733833.png) + + If you don't see the Team menu, you'll need to install Team Explorer to get the Team Foundation add-in to Excel. See **Requirements** listed earlier in this topic. + +2. Connect to the team project and choose the query. + + If the server you need isn't listed, [add it now](../../connect/connect-team-projects.md). + +3. Choose the reports to generate (steps 3 and 4 from the previous procedure). + +## Q & A + + + + +### Q: Can I export a query to Excel? + +**A:** If you want to export a query to Excel, you can do that from [Excel or Visual Studio/Team Explorer](../../work/office/bulk-add-modify-work-items-excel.md). Or, to export a query directly from the web portal Queries page, install the [VSTS Open in Excel Marketplace extension](https://marketplace.visualstudio.com/items?itemName=blueprint.vsts-open-work-items-in-excel). This extension will add in **Open in Excel** link to the toolbar of the query results page. + + + +###Q: Which fields can't I use to generate a report? + + **A:** Even though you can include non-reportable fields in your query field criteria or as a column option, they won't be used to generate a report. + + * Description, History, and other HTML data-type fields. These fields won't be added to the PivotTable or used to generate a report. Excel does not support generating reports on these fields. + + * Fields with filter criteria that specify the **Contains**, **Contains Words**, **Does Not Contain**, or **Does Not Contain Words** operators will not be added to the PivotTable. Excel does not support these operators. + +###Q: Can I create reports if I'm working in VSTS? + + **A:** You can't create Excel reports; however, you can create [query-based charts](../charts.md). + +###Q: How do I refresh the report to show the most recent data? + + **A:** At any time, you can choose Refresh on the Data tab to update the data for the PivotTables in your workbook. To learn more, see [Update (refresh) data in a PivotTable](http://office.microsoft.com/excel-help/update-refresh-data-in-a-pivottable-HA102840043.aspx?CTT=1). + +###Q: Can I upload these reports to a project portal? + + **A:** Yes. See [Manage documents and document libraries](../sharepoint-dashboards/manage-documents-and-document-libraries.md). + + + diff --git a/docs/report/excel/excel-reports-cmmi.md b/docs/report/excel/excel-reports-cmmi.md new file mode 100644 index 00000000000..958e69ff864 --- /dev/null +++ b/docs/report/excel/excel-reports-cmmi.md @@ -0,0 +1,126 @@ +--- +title: Excel reports provided with the CMMI process template for TFS +description: Summary of Excel reports made available with the CMMI process template for Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: e1263634-8bb5-4aa9-904f-bf3ccdefa77a +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# Excel reports (CMMI) + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Excel reports to display information from the data warehouse for your team project. This topic describes reports that are provided with the [CMMI process template](../../work/guidance/cmmi-process.md). + +If you want to export work items to Excel, see [Bulk add or modify work items with Excel](../../work/office/bulk-add-modify-work-items-excel.md). Or, if you want to create an Excel report from a query, see [Create Excel reports from a work item query](create-status-and-trend-excel-reports.md). + +> [!NOTE] +> These reports require your team project portal to be configured with SharePoint Server Enterprise Edition. Also, you can view these reports in your team project's [portal dashboards](../sharepoint-dashboards/project-portal-dashboards.md). +> +> If the project collection where your team project is stored is configured with SQL Server Reporting Services, you can use Report Manager to view and filter the same information that the Excel reports provide. See [Reporting Services Reports](../sql-reports/reporting-services-reports.md). + + You can access the Microsoft Excel reports from the **Documents** folder + +## Requirements + To access and use the Microsoft Excel reports, the following configurations must be met: + +- To access an Microsoft Excel report, your team project must have been configured with a project portal based on SharePoint Server Enterprise Edition. + +- To open a report in Microsoft Excel that connects to the operational data store for Team Foundation, you must have the Team Foundation Office Integration add-in installed on your client computer. This add-in is installed when you install any product in Visual Studio ALM. + + To view or modify an Excel report that is stored under the Documents node for a team project, you must be assigned or belong to a group that has been assigned **Read** permissions for Team Foundation. You must also be assigned the **Visitors** or **Members** permissions, respectively, in SharePoint Products for the team project. + + In addition, all Microsoft Excel reports that appear in the enterprise dashboards contain data from the Analysis Services cube. You can view enterprise dashboards only if the team project portal is hosted on a server that is running SharePoint Server Enterprise Edition. + + To view, refresh, or create an Excel report from an enterprise dashboard, you must configure the SharePoint web application definition to either use Single Sign-On or Windows Authentication. The following restrictions apply based on the authentication service that you configure. + +> [!IMPORTANT] +> You must configure the SharePoint web application for Single Sign-On if you do not want to add users as members of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also configure the application for Single Sign-on if the team project portal is configured to use NTLM authentication and is not installed on the data-tier server. + +- **For Single Sign-On Authentication (Recommended)** + + To authenticate viewers of enterprise dashboards by using Single Sign-On, you must perform the following actions: + + - You must configure the SharePoint web application to use Single Sign-on. For more information about how to configure Single Sign-on, see [Configure authentication infrastructure in SharePoint 2013](http://msdn.microsoft.com/EN-US/library/jj219795.aspx). + + - You must add dashboard viewers to a group that is granted access to the Single Sign-on enterprise application definition. + +- **For Windows Authentication** + + To authenticate viewers of enterprise dashboards by using Windows Authentication, you must perform the following actions: + + - You must either host the team project portal on the data-tier server, or you must configure the SharePoint web application to use Kerberos authentication. + + - You must add users to the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. + + The following table summarizes the required permissions based on activity. For information about how to grant these permissions to team members, see [Add users to team projects](../../accounts/add-users.md). For information about permissions that are required to work with Excel reports in general, see [Grant permissions to view and manage reports](../admin/grant-permissions-to-reports.md). + +|Activity|Team Foundation Server|Team project portal|SQL Server Analysis Services cube (Tfs_Analysis)|Notes| +|--------------|------------------------------------------------------------------|-------------------------|----------------------------------------------------------------------------------------------------------|-----------| +|View or refresh an Excel report that is opened from the Documents node for Team Explorer|Readers|Visitors|TfsWarehouseDataReader role|To access the Documents node for a team project, you must belong to the **Team Foundation Valid Users** security group. If the necessary security permissions are set explicitly, your **View project-level information** permission on the team project must be set to **Allow**.| +|View or refresh an Excel report that appears in an enterprise dashboard||Visitors|Requirements depend on the authentication that is configured for the SharePoint web application|In addition to **Visitors** or **Read** permissions, you must belong to a group that is granted access to the `TfsWarehouseDataReader` role or the Single Sign-on enterprise application definition for the SharePoint web application.| +|Run a work item query, and then use the **Create Report in Microsoft Excel** feature|Readers||TfsWarehouseDataReader role|In addition to these permissions, you may need permission to open a team query. For more information, see [Set permissions on queries](../../work/track/set-query-permissions.md).

      Also, if you want to save the resulting workbook to the project portal, you must belong to the **Members** group for the portal.| +|Open a dashboard, and use the **New Excel Report** feature||Visitors|TfsWarehouseDataReader role|The **New Excel Report** button is available only if reporting is configured for the project collection that hosts the team project.| +|Create a report from Microsoft Excel that connects directly to the Analysis Services cube|||TfsWarehouseDataReader role|If you want to save the resulting workbook to the project portal, you must belong to the **Members** group for the portal.| +|Manage Excel reports from the Documents node|Readers|Members||To save files under the Documents node, you must belong to the **Members** group for the team project portal. For more information, see [Manage documents and document libraries](../sharepoint-dashboards/manage-documents-and-document-libraries.md).| + + +## Project management + Team members can use the reports in the following table to help track the rate of the team's progress toward completing Tasks, finishing Requirements, and meeting their iteration plan. + +|Data in the report|Report and related topic| +|------------------------|------------------------------| +|A visual representation of the cumulative count of all hours for all Tasks for the past four weeks.

      ![Burndown chart](_img/procguid_agileburn.png "ProcGuid_AgileBurn")|[Burndown](burndown-excel-report.md)| +|A visual representation of the cumulative count of all active and closed Tasks for the past four weeks.

      ![Task Progress Excel Report](_img/procguid_exceltask.png "ProcGuid_ExcelTask")|[Task Progress](task-progress-excel-report.md)| +|A visual representation of the cumulative count of all Requirements, grouped by their state, for the past four weeks.

      ![Example User Stories report](_img/procguid_excelreport.png "ProcGuid_ExcelReport")|[Requirements Progress Excel Report](requirements-progress-excel-report-cmmi.md)| +|Line chart that shows the rolling average of the number of Issues that the team has opened and closed for the past four weeks. The rolling average is based on the seven days before the date for which it is calculated.

      ![7-Day Issue Trend Excel Report](_img/procguid_7day.png "ProcGuid_7Day")|[Issue Trends](issue-trends-excel-report.md)| + +## Bug backlog management + Team members can use the reports in the following table to help track the bugs that the team finds and the progress that the team makes towards fixing them. These reports are displayed in the Bugs dashboard, For more information, see [Bugs](../sharepoint-dashboards/bugs-dashboard-agile-cmmi.md). + +|Data in the report|Report and related topic| +|------------------------|------------------------------| +|A visual representation of the cumulative count of all Bugs, grouped by their state for the past four weeks.

      ![Bug Progress Excel Report](_img/procguid_excelbug.png "ProcGuid_ExcelBug")|[Bug Progress](bug-progress-excel-report.md)| +|Line chart that shows the rolling average of the number of Bugs that the team has opened, resolved, and closed for the past four weeks. The rolling average is based on the seven days before the date for which it is calculated.

      ![Bug Trends report](_img/procguid_bugtrends.png "ProcGuid_BugTrends")|[Bug Trends](bug-trends-excel-report.md)| +|A visual representation of the cumulative count of all Bugs, grouped by their priority for the past four weeks.

      ![Bugs by priority chart](_img/procguid_bypriority.png "ProcGuid_ByPriority")|[Bugs by Priority](bugs-by-priority-excel-report.md)| +|A horizontal bar chart with the total count of Bugs that each team member has currently assigned to them in the active state, grouped by priority.

      ![Bugs by Assignment chart](_img/procguid_byassignment.png "ProcGuid_ByAssignment")|[Bugs by Assignment](bugs-by-assignment-excel-report.md)| +|A stacked area graph of the number of Bugs that have been reactivated from the resolved or closed state within the past four weeks.

      ![Bug Reactivations Excel Report](_img/procguid_agileexr.png "ProcGuid_AgileExR") **Note:** The Bug Reactivations report is displayed on the Quality dashboard. For more information, see [Quality](../sharepoint-dashboards/quality-dashboard-agile-cmmi.md).|[Bug Reactivations](bug-reactivations-excel-report.md)| + +## Build management + Team members can use the Code Churn and Code Coverage reports to help track how source files are changing over time and how well the source code is being tested over time. These reports are displayed in the Build dashboard. For more information, see [Build](../sharepoint-dashboards/build-dashboard-agile-cmmi.md). + +|Data in the report|Report and related topic| +|------------------------|------------------------------| +|Line chart that depicts the percentage of code that was tested under Build Verification Test over the last four weeks.

      ![Code Coverage Report](_img/procguid_codecoverage.png "ProcGuid_CodeCoverage")|[Code Coverage](code-coverage-excel-report.md)| +|Stacked area chart that depicts the number of lines of code that the team added, removed, and changed in the checkins before the build within the last four weeks.

      ![Code Churn Report](_img/procguid_codechurn.png "ProcGuid_CodeChurn")|[Code Churn](code-churn-excel-report.md)| +|Stacked column that shows the count of builds that **Failed** or **Succeeded** within the last four weeks.

      ![Build Status report](_img/procguid_agileexcel.png "ProcGuid_AgileExcel") **Note:** The Builds Status report is displayed on the Quality dashboard. For more information, see [Quality](../sharepoint-dashboards/quality-dashboard-agile-cmmi.md).|[Build Status](build-status-excel-report.md)| + +## Test management + Team members can use the reports described in the following table to help monitor test activities, report on progress, find gaps in test coverage, and identify test areas that may require further investigation. These reports are displayed in the Test dashboard, For more information, see [Test](../sharepoint-dashboards/test-dashboard-agile-cmmi.md). + +|Data in the report|Report and related topic| +|------------------------|------------------------------| +|Stacked area graph of the test results of all Test Cases grouped into their last recorded outcome - **Never Run**, **Blocked**, **Failed**, or **Passed** - within the past four weeks.

      ![Test Plan Progress Excel Report](_img/procguid_agiletest.png "ProcGuid_AgileTest")|[Test Plan Progress](../sql-reports/test-plan-progress-report.md)| +|Stacked area graph that shows how many Test Cases are in the **Design** or **Ready** state for the past four weeks.

      ![Test Case Readiness Excel Report](_img/procguid_exceltestcase.png "ProcGuid_ExcelTestCase")|[Test Case Readiness](../sql-reports/test-case-readiness-report.md)| +|Horizontal bar chart that shows the count of test results for each Test Case and test configuration combination that is defined for each Requirement. The chart groups the test results according to their most recent test run, where the options are **Passed** (green), **Failed** (red), **Blocked** (purple), or **Not Run** (gray).|[Requirement Test Status](requirement-test-status-excel-report-cmmi.md)| +|Line chart that shows the cumulative count of all results run for Test Cases, according to their recorded status of **Passed**, **Failed**, **Blocked**, or **Never Run** during the past four weeks.

      ![Test Activity Excel Report](_img/procguid_testactivity.png "ProcGuid_TestActivity") **Note:** The **Manual Test Activity** report differs from the **Test Plan Progress** report as it shows the cumulative count of all test results for all Test Cases and their test configurations run on each day. Whereas, the **Test Plan Progress** report shows only the last recorded test result for each Test Case on each day.|[Test Activity](test-activity-excel-report.md)| +|Stacked area graph that shows the cumulative count of all failed outcome results for Test Cases, according to their failure type of **Regression**, **New Issue**, or **Known Issue**, during the past four weeks.

      ![Failure Analysis Excel Report](_img/procguid_failureanalysis.png "ProcGuid_FailureAnalysis")|[Failure Analysis](failure-analysis-excel-report.md)| + +## Software quality and release management + Team members can use the reports described in the following table to obtain an overview of progress occurring in the test, development, and build areas as they relate to the quality of the software under development. These reports are displayed in the Quality dashboard. For more information, see [Quality](../sharepoint-dashboards/quality-dashboard-agile-cmmi.md). + +|Data in the report|Report and related topic| +|------------------------|------------------------------| +|Stacked area graph of the test results of all Test Cases grouped into their last recorded outcome - **Never Run**, **Blocked**, **Failed**, or **Passed** - within the past four weeks.

      ![Test Plan Progress Excel Report](_img/procguid_agiletest.png "ProcGuid_AgileTest")|[Test Plan Progress](../sql-reports/test-plan-progress-report.md)| +|Stacked column that shows the count of builds that **Failed** or **Succeeded** within the last four weeks.

      ![Build Status report](_img/procguid_agileexcel.png "ProcGuid_AgileExcel")|[Build Status](build-status-excel-report.md)| +|A stacked area graph of the cumulative count of all Bugs, grouped by their state for the past four weeks.

      ![Bug Progress Excel Report](_img/procguid_excelbug.png "ProcGuid_ExcelBug")|[Bug Progress](bug-progress-excel-report.md)| +|A stacked area graph of the number of Bugs that have been reactivated from the resolved or closed state within the past four weeks.

      ![Bug Reactivations Excel Report](_img/procguid_agileexr.png "ProcGuid_AgileExR")|[Bug Reactivations](bug-reactivations-excel-report.md)| +|Line chart that depicts the percentage of code that was tested under Build Verification Test over the last four weeks.

      ![Code Coverage Report](_img/procguid_codecoverage.png "ProcGuid_CodeCoverage")|[Code Coverage](code-coverage-excel-report.md)| +|Stacked area chart that depicts the number of lines of code that the team added, removed, and changed in the checkins before the build within the last four weeks.

      ![Code Churn Report](_img/procguid_codechurn.png "ProcGuid_CodeChurn")|[Code Churn](code-churn-excel-report.md)| + +## Related notes + [Charts](../charts.md) + [Create Excel reports from a work item query](create-status-and-trend-excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/excel-reports.md b/docs/report/excel/excel-reports.md new file mode 100644 index 00000000000..3c4f9e01eb4 --- /dev/null +++ b/docs/report/excel/excel-reports.md @@ -0,0 +1,202 @@ +--- +title: Excel reports provided with the Agile process template for TFS +description: Summary of Agile process template Excel reports for Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 9faa625b-d87b-46a9-96ec-0618fe93db96 +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# Excel reports + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Microsoft Excel reports to display information from the data warehouse for your team project. This topic describes reports that are provided with the [Agile](../../work/guidance/agile-process.md) process template. For a summary of reports provided with the CMMI process template, see [Excel reports (CMMI)](excel-reports-cmmi.md). + +If you want to export work items to Excel, see [Bulk add or modify work items with Excel](../../work/office/bulk-add-modify-work-items-excel.md). Or, if you want to create an Excel report from a query, see [Create Excel reports from a work item query](create-status-and-trend-excel-reports.md). + +> [!NOTE] +> These reports require your team project portal to be configured with SharePoint Server Enterprise Edition. Also, you can view these reports in your team project's [dashboards](../sharepoint-dashboards/project-portal-dashboards.md). +> +> If the project collection where your team project is stored is provisioned with SQL Server Reporting Services, you can use Report Manager to view and filter the same information that the Excel reports provide. See [Reporting Services Reports](../sql-reports/reporting-services-reports.md). + + + + +## Excel Reports (TFS) +You can track your team project's burn rate, bug backlog, software quality, test progress, and other metrics by viewing a [default Excel report](excel-reports.md). + +Here are examples of two of the Excel reports. + +![Bug trends example report](_img/ALM_PG_Excel_BugTrends.png) ![Build status example report](_img/ALM_PG_Excel_BuildStatus.png) + +Default Excel reports require that your team project is configured with SharePoint Products and SQL Server Analysis Services. If these reports aren't available to you, you can [create ad-hoc reports in Excel from a work item query](create-status-and-trend-excel-reports.md) or by connecting to the Analysis Services cube. + + + + + + + + + + +
      +**Adhoc status and trend reports** +
        +
      • [Create Excel reports from a query](create-status-and-trend-excel-reports.md)
      • +
      +**Build and code quality** +
        +
      • [Build Quality](build-quality-excel-report.md)
      • +
      • [Build Status](build-status-excel-report.md)
      • +
      • [Code Churn](code-churn-excel-report.md)
      • +
      • [Code Coverage](code-coverage-excel-report.md)
      • +
      +
      + +**Progress** +
        +
      • [Burndown](burndown-excel-report.md)
      • +
      • [Issue Trends](issue-trends-excel-report.md)
      • +
      • [Task Progress](task-progress-excel-report.md)
      • +
      • [User Story Progress (Agile)](user-story-progress-excel-report-agile.md)
      • +
      • [Requirements Progress (CMMI)](requirements-progress-excel-report-cmmi.md)
      • +
      + +
      + +**Bug tracking** +
        +
      • [Bug Progress](bug-progress-excel-report.md)
      • +
      • [Bug Reactivations](bug-reactivations-excel-report.md)
      • +
      • [Bug Trends](bug-trends-excel-report.md)
      • +
      • [Bugs by Assignment](bugs-by-assignment-excel-report.md)
      • +
      • [Bugs by Priority](bugs-by-priority-excel-report.md)
      • +
      + +
      +**Test tracking** +
        +
      • [Failure Analysis](failure-analysis-excel-report.md)
      • +
      • [Test Activity](test-activity-excel-report.md)
      • +
      • [Test Case Readiness](test-case-readiness-excel-report.md)
      • +
      • [Test Plan Progress](test-plan-progress-excel-report.md)
      • +
      • [Test management reports](test-management-reports.md)
      • +
      • [Testing Gaps (Agile)](testing-gaps-excel-report-agile.md)
      • +
      • [Test Team Progress](test-team-progress-excel-report.md)
      • +
      • [Test Team Productivity](test-team-productivity-excel-report.md)
      • +
      • [User Story Test Status (Agile)](user-story-test-status-excel-report-agile.md)
      • +
      • [Requirement Test Status (CMMI)](requirement-test-status-excel-report-cmmi.md)
      • + +
      +
      + + +## Project management + Team members can use the reports in the following table to help track the rate of the team's progress toward completing Tasks, implementing User Stories, and meeting their iteration plan. + +|Data in the report|Report name and related topic| +|------------------------|-----------------------------------| +|A visual representation of the cumulative count of all hours for all tasks for the past four weeks.

      ![Burndown chart](_img/procguid_agileburn.png "ProcGuid_AgileBurn")|[Burndown](burndown-excel-report.md)| +|A visual representation of the cumulative count of all active and closed tasks for the past four weeks.

      ![Task Progress Excel Report](_img/procguid_exceltask.png "ProcGuid_ExcelTask")|[Task Progress](task-progress-excel-report.md)| +|A visual representation of the cumulative count of all user stories, grouped by their state, for the past four weeks.

      ![Example User Stories report](_img/procguid_excelreport.png "ProcGuid_ExcelReport")|[User Story Progress](user-story-progress-excel-report-agile.md)| +|Line chart that shows the rolling average of the number of issues that the team has opened and closed for the past four weeks. The rolling average is based on the seven days before the date for which it is calculated.

      ![7-Day Issue Trend Excel Report](_img/procguid_7day.png "ProcGuid_7Day")|[Issue Trends](issue-trends-excel-report.md)| + +## Bug backlog management + Team members can use the reports in the following table to help track the bugs that the team finds and the progress that the team makes toward fixing them. These reports appear in the Bugs dashboard. For more information, see [Bugs](../sharepoint-dashboards/bugs-dashboard-agile-cmmi.md). + +|Data in the report|Report name and related topic| +|------------------------|-----------------------------------| +|A visual representation of the cumulative count of all bugs, grouped by their state for the past four weeks.

      ![Bug Progress Excel Report](_img/procguid_excelbug.png "ProcGuid_ExcelBug")|[Bug Progress](bug-progress-excel-report.md)| +|Line chart that shows the rolling average of the number of bugs that the team has opened, resolved, and closed for the past four weeks. The rolling average is based on the seven days before the date for which it is calculated.

      ![Bug Trends report](_img/procguid_bugtrends.png "ProcGuid_BugTrends")|[Bug Trends](bug-trends-excel-report.md)| +|A visual representation of the cumulative count of all bugs, grouped by their priority for the past four weeks.

      ![Bugs by priority chart](_img/procguid_bypriority.png "ProcGuid_ByPriority")|[Bugs by Priority](bugs-by-priority-excel-report.md)| +|A horizontal bar chart with the total count of Bugs that each team member has currently assigned to them in the active state, grouped by priority.

      ![Bugs by Assignment chart](_img/procguid_byassignment.png "ProcGuid_ByAssignment")|[Bugs by Assignment](bugs-by-assignment-excel-report.md)| +|A stacked area graph of the number of bugs that have been reactivated from the resolved or closed state within the past four weeks.

      ![Bug Reactivations Excel Report](_img/procguid_agileexr.png "ProcGuid_AgileExR")
      **Note:** The Bug Reactivations report appears on the Quality dashboard. For more information, see [Quality](../sharepoint-dashboards/quality-dashboard-agile-cmmi.md).|[Bug Reactivations](bug-reactivations-excel-report.md)| + +## Build management + Team members can use the reports in the following table to help track how source files are changing over time and how well the source code is being tested over time. These reports appear in the Build dashboard. For more information, see [Build](../sharepoint-dashboards/build-dashboard-agile-cmmi.md). + +|Data in the report|Report name and related topic| +|------------------------|-----------------------------------| +|Line chart that depicts the percentage of code that was tested under Build Verification Test over the last four weeks.

      ![Code Coverage Report](_img/procguid_codecoverage.png "ProcGuid_CodeCoverage")|[Code Coverage](code-coverage-excel-report.md)| +|Stacked area chart that depicts the number of lines of code that the team added, removed, and changed in the checkins before the build within the last four weeks.

      ![Code Churn Report](_img/procguid_codechurn.png "ProcGuid_CodeChurn")|[Code Churn](code-churn-excel-report.md)| +|Stacked column that shows the count of builds that **Failed** or **Succeeded** within the last four weeks.

      ![Build Status report](_img/procguid_agileexcel.png "ProcGuid_AgileExcel")
      **Note:** The Builds Status report appears on the Quality dashboard. For more information, see [Quality](../sharepoint-dashboards/quality-dashboard-agile-cmmi.md).|[Build Status](build-status-excel-report.md)| + +## Test management + Team members can use the reports in the following table to help monitor test activities, report on progress, find gaps in test coverage, and identify test areas that may require further investigation. These reports appear in the Test dashboard. For more information, see [Test](../sharepoint-dashboards/test-dashboard-agile-cmmi.md). + +|Data in the report|Report name and related topic| +|------------------------|-----------------------------------| +|Stacked area graph of the test results grouped into their last recorded outcome - **Never Run**, **Blocked**, **Failed**, or **Passed** - within the past four weeks.

      ![Test Plan Progress Excel Report](_img/procguid_agiletest.png "ProcGuid_AgileTest")|[Test Plan Progress](../sql-reports/test-plan-progress-report.md)| +|Stacked area graph that shows how many test cases are in the **Design** or **Ready** state for the past four weeks.

      ![Test Case Readiness Excel Report](_img/procguid_exceltestcase.png "ProcGuid_ExcelTestCase")|[Test Case Readiness](../sql-reports/test-case-readiness-report.md)| +|Horizontal bar chart that shows the count of test results for each test case and test configuration combination that is defined for each user story. The chart groups the test results according to their most recent test run, where the options are **Passed** (green), **Failed** (red), **Blocked** (purple), or **Not Run** (gray).

      ![User Story Test Status Excel Report](_img/procguid_exruserstore.png "ProcGuid_ExRUserStore")|[User Story Test Status](user-story-test-status-excel-report-agile.md)| +|Line chart that shows the cumulative count of all results run for manual tests during the past four weeks.

      ![Test Activity Excel Report](_img/procguid_testactivity.png "ProcGuid_TestActivity")|[Test Activity](test-activity-excel-report.md)| +|Stacked area graph that shows the cumulative count of all failed outcome results for tests, according to their failure type of **Regression**, **New Issue**, or **Known Issue**, during the past four weeks.

      ![Failure Analysis Excel Report](_img/procguid_failureanalysis.png "ProcGuid_FailureAnalysis")|[Failure Analysis](failure-analysis-excel-report.md)| + +## Software quality and release management + Team members can use the reports in the following table to obtain an overview of progress occurring in the test, development, and build areas. These reports appear in the Quality dashboard. For more information, see [Quality](../sharepoint-dashboards/quality-dashboard-agile-cmmi.md). + +|Data in the report|Report name and related topic| +|------------------------|-----------------------------------| +|Stacked area graph of the test results grouped into their last recorded outcome - **Never Run**, **Blocked**, **Failed**, or **Passed** - within the past four weeks.

      ![Test Plan Progress Excel Report](_img/procguid_agiletest.png "ProcGuid_AgileTest")|[Test Plan Progress](../sql-reports/test-plan-progress-report.md)| +|Stacked column that shows the count of builds that **Failed** or **Succeeded** within the last four weeks.

      ![Build Status report](_img/procguid_agileexcel.png "ProcGuid_AgileExcel")|[Build Status](build-status-excel-report.md)| +|A stacked area graph of the cumulative count of all Bugs, grouped by their state for the past four weeks.

      ![Bug Progress Excel Report](_img/procguid_excelbug.png "ProcGuid_ExcelBug")|[Bug Progress](bug-progress-excel-report.md)| +|A stacked area graph of the number of bugs that have been reactivated from the resolved or closed state within the past four weeks.

      ![Bug Reactivations Excel Report](_img/procguid_agileexr.png "ProcGuid_AgileExR")|[Bug Reactivations](bug-reactivations-excel-report.md)| +|Line chart that depicts the percentage of code that was tested under Build Verification Test over the last four weeks.

      ![Code Coverage Report](_img/procguid_codecoverage.png "ProcGuid_CodeCoverage")|[Code Coverage](code-coverage-excel-report.md)| +|Stacked area chart that depicts the number of lines of code that the team added, removed, and changed in the checkins before the build within the last four weeks.

      ![Code Churn Report](_img/procguid_codechurn.png "ProcGuid_CodeChurn")|[Code Churn](code-churn-excel-report.md)| + +## Related notes + - [Charts](../charts.md) +- [Create Excel reports from a work item query](create-status-and-trend-excel-reports.md) + + + +### Requirements and permissions + To access and use the Microsoft Excel reports, the following configurations must be met: + +- To access an Excel report, your team project must have been provisioned with a project portal. + + Excel reports are stored on the server that hosts SharePoint Products for your team project. If a project portal has not been enabled for your team project, you cannot access the workbook. For more information, see [Configure or add a project portal](../sharepoint-dashboards/configure-or-add-a-project-portal.md). + +- To open a report in Excel that connects to the operational data store for Team Foundation, you must have the Team Foundation Office Integration add-in installed on your client computer. This add-in is installed when you install any version of Visual Studio or Team Explorer. + + To view or modify an Excel report that is stored under the Documents node for a team project, you must be assigned or belong to a group that has been assigned **Read** permissions for Team Foundation. You must also have **Visitors** or **Members** permissions, respectively, in SharePoint Products for the team project. + + In addition, all Excel reports that appear in the enterprise dashboards contain data from the Analysis Services cube. You can view enterprise dashboards only if the team project portal is hosted on a server that is running SharePoint Server Enterprise Edition. + + To view, refresh, or create an Excel report from an enterprise dashboard, you must configure the SharePoint web application definition to either use Single Sign-On or Windows Authentication. The following restrictions apply based on the authentication service that you configure. + + You must configure the SharePoint web application for Single Sign-On if you do not want to add users as members of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. In addition, you must configure the application for Single Sign-on if the team project portal is configured to use NTLM authentication and is not installed on the data-tier server. + +- **For Single Sign-On Authentication (Recommended)** + + To authenticate viewers of enterprise dashboards by using Single Sign-On, you must perform the following actions: + + - You must configure the SharePoint web application to use Single Sign-on. For more information about how to configure Single Sign-on, see [Configure authentication infrastructure in SharePoint 2013](http://msdn.microsoft.com/library/jj219795.aspx). + + - You must add dashboard viewers to a group that is granted access to the Single Sign-on enterprise application definition. + +- **For Windows Authentication** + + To authenticate viewers of enterprise dashboards by using Windows Authentication, you must perform the following actions: + + - You must either host the team project portal on the data-tier server, or you must configure the SharePoint web application to use Kerberos authentication. + + - You must add users as members of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. + + The following table summarizes the required permissions based on activity. For information about how to grant these permissions to team members, see [Add users to team projects](../../accounts/add-users.md). For information about permissions that are required to work with Excel reports in general, see [Grant permissions to view and manage reports](../admin/grant-permissions-to-reports.md). + +|Activity|Team Foundation Server|Team project portal|SQL Server Analysis Services cube (Tfs_Analysis)|Notes| +|--------------|------------------------------------------------------------------|-------------------------|----------------------------------------------------------------------------------------------------------|-----------| +|View or refresh an Excel report that is opened from the Documents node of Team Explorer|Readers|Visitors|TfsWarehouseDataReader role|To access the Documents node for a team project, you must be a member of the **Team Foundation Valid Users** security group. If the required security permissions are set explicitly, your **View project-level information** permission on the team project must be set to **Allow**.| +|View or refresh an Excel report that appears in an enterprise dashboard||Visitors|Requirements depend on the authentication that is configured for the SharePoint web application|In addition to **Visitors** or **Read** permissions, you must belong to a group that is granted access to the `TfsWarehouseDataReader` role or to the Single Sign-on enterprise application definition for the SharePoint web application.| +|Run a work item query, and use the **Create Report in Microsoft Excel** feature|Readers||TfsWarehouseDataReader role|In addition to these permissions, you may need permission to open a team query. For more information, see [Set permissions on queries](../../work/track/set-query-permissions.md).

      Also, if you want to save the resulting workbook to the project portal, you belong to the **Members** group for the portal.| +|Open a dashboard and use the **New Excel Report** feature||Visitors|TfsWarehouseDataReader role|The **New Excel Report** button is available only if reporting is configured for the project collection that hosts the team project.| +|Create a report from Microsoft Excel that connects directly to the Analysis Services cube|||TfsWarehouseDataReader role|If you want to save the resulting workbook to the project portal, you must belong to the **Members** group for the portal.| +|Manage Excel reports from the Documents node|Readers|Members||To save files under the Documents node, you must be a must belong to the **Members** group for the team project portal. For more information, see [Manage documents and document libraries](../sharepoint-dashboards/manage-documents-and-document-libraries.md).| + +### Refresh frequency + All data captured for work items is written to the WIT data store, but only select data is written to the Analysis Services data warehouse. The WIT data store is updated in real-time as team members create and modify work items. Incremental updates are then written to the relational warehouse database every two minutes and the OLAP cube every two hours. To change these settings, see [Change the Data Warehouse Refresh Frequency](../admin/change-a-process-control-setting.md). \ No newline at end of file diff --git a/docs/report/excel/failure-analysis-excel-report.md b/docs/report/excel/failure-analysis-excel-report.md new file mode 100644 index 00000000000..cae47ef964d --- /dev/null +++ b/docs/report/excel/failure-analysis-excel-report.md @@ -0,0 +1,92 @@ +--- +title: Failure Analysis Excel Report | TFS +description: Use Failure Analysis report to help monitor how many regressions the test team is finding - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 22f98044-e3bb-4e63-80a1-99a95775baa5 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- + +# Failure Analysis Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Failure Analysis report to help monitor how many regressions the test team is finding. Regressions are bugs in the software that you are testing that did not appear in previous versions. A team that performs regression testing is specifically focused on finding bugs that have appeared only in a new version of the software. The Failure Analysis report shows how many distinct configurations for each Test Case previously passed and are now failing, for the most recent four weeks. + + This report is available only when the team creates test plans and starts to run tests by using Microsoft Test Manager. For information about how to define test suites and test plans, see [Plan your tests](../../manual-test/getting-started/create-test-cases.md). For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Failure Analysis report from the Test dashboard. You can access this dashboard only if your team project portal has been enabled and is configured to use SharePoint Server Enterprise Edition. + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the report + The Failure Analysis report provides a stacked area graph that shows the cumulative count of all failed outcome results for Test Cases for all configurations, during the most recent four weeks. Failure types include **New Issue**, **Known Issue**, or **Regression**. + + ![Failure Analysis Excel Report](_img/procguid_failureanalysis.png "ProcGuid_FailureAnalysis") + + This report is based on a PivotChart report that shows the most recent four weeks of test result data that is stored in the data warehouse. + + The system examines each configuration on which the Test Case was executed and tries to identify the predecessor result for the same configuration for the Test Case. The failure type that is assigned to the Test Case/configuration is determined based on the following criteria: + +- **Regression**: When the immediate predecessor result had an outcome of **Passed**. + +- **New Issue**: When no immediate predecessor result can be found. + +- **Known Issue**: When the immediate predecessor result had an outcome of **Failed**. + +### Required activities for monitoring regressions + For the Failure Analysis report to be useful and accurate, the team must perform the following activities: + +- Define Test Cases and Test Plans, and assign Test Cases to Test Plans. + +- For manual tests, mark the results of each validation step in the Test Case as passed or failed. + + > [!IMPORTANT] + > Testers must mark a test step with a status if it is a validation test step. The overall result for a Test Case reflects the status of all the test steps that the tester marked. Therefore, the Test Case will have a status of failed if the tester marked any test step as failed or not marked. + + For automated tests, each Test Case is automatically marked as passed or failed. + +- (Optional) To support filtering, assign **Iteration** and **Area** paths to each Test Case. + +## Interpreting the report + You should expect the Failure Analysis report to vary depending on where you are in your product development cycle. Early iterations should show little, if any, regression activity. Later in the development cycle, you should expect some regressions. Specifically, you should review the report to find answers to the following questions: + +- How many tests overall are regressing? + +- Is the team keeping the overall number of regressions or test failures within expected ranges or team goals? + +- Is the team addressing issues as they are identified? Are the known issues being addressed in a timely manner? + + A healthy Failure Analysis report will show moderate numbers of new issues, known issues, and regressions. If spikes occur in one or more of these areas, the team might need to investigate further. Spikes may indicate problems in either the test activity or the quality of code that the team is checking in. + + Also, you might want to check the status of recent builds, bug status, and code churn to determine whether the metrics for each of these factors can help explain the changes in the test activity lines. + +## Updating and customizing the report + You can update the Failure Analysis report by opening it in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views, the following table describes. + +|View|Action| +|----------|------------| +|Failure analysis for an iteration|Change the filter for **Iteration** (default=All)| +|Failure analysis for a product area|Change the filter for **Area** (default=All)| +|Failure analysis for a specific test plan or suite of test plans|Add the filter for **Test Plan** (default=All)| +|Failure analysis for the most recent six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTables and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/issue-trends-excel-report.md b/docs/report/excel/issue-trends-excel-report.md new file mode 100644 index 00000000000..c94fcaee9f1 --- /dev/null +++ b/docs/report/excel/issue-trends-excel-report.md @@ -0,0 +1,72 @@ +--- +title: Issue Trends Excel Report | TFS +description: Shows Issue Trends report to track the rate at which the team is finding and resolving Issues - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: b32acf30-a218-4f0d-ba74-dd20f5ae8e1a +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- + +# Issue Trends Excel Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Issue Trends report to track the rate at which the team is finding and resolving Issues. This report shows the average number of Issues in each state over time. For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Issue Trends report from the Progress dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + The Issue Trends report calculates a rolling average of the number of Issues that the team has opened, resolved, and closed for the past four weeks. The rolling average is based on the seven days before the date for which it is calculated. More precisely, the report averages the number of Issues in each state for each of the seven days before the date and then the divides the result by seven. + + ![7-Day Issue Trend Excel Report](_img/procguid_7day.png "ProcGuid_7Day") + + You can use the Issue Trends report to understand the volume of Issues that the team is identifying and addressing. This report is based on a PivotChart report that shows the last four weeks of data that is captured for Issues and that is stored in the data warehouse. + +### Required Activities for Tracking Issue Trends + For the Issue Trends report to be useful and accurate, the team must perform the following activities: + +- Define Issues. + +- Close the **State** of each Issue as the team addresses it. + +- (optional) Specify the **Iteration** and **Area** paths for each Issue if you want to filter by that field. + +## Interpreting the Report + You can review the Issue Trends report to determine whether the team is addressing the Issues that it is identifying. Specifically, you can find answers to the following questions: + +- How often is the team identifying Issues? + +- Is the team resolving Issues as quickly as they are identifying them? + + If the team identifies more Issues than it can address, the Issue Trends report will show that the team is closing Issues more slowly. The team might need to reexamine priorities to determine whether the Issues are actually problems that it should address or if the team can ignore them. + +## Customizing the Report + You can update the Issue Trends report by opening it in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Issue trends for an iteration|Change the filter for **Iteration** (default=All)| +|Issue trends for a product area|Change the filter for **Area** (default=All)| +|Issue trends for the last six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/requirement-test-status-excel-report-cmmi.md b/docs/report/excel/requirement-test-status-excel-report-cmmi.md new file mode 100644 index 00000000000..e3cd97bb1a5 --- /dev/null +++ b/docs/report/excel/requirement-test-status-excel-report-cmmi.md @@ -0,0 +1,90 @@ +--- +title: Requirement Test Status Excel Report (CMMI) | TFS +description: Use to determine gaps in test coverage and monitor test progress for each requirement. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 4e5ffafb-82fc-4aaa-b7bb-e5e47b239e7c +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Requirement Test Status Excel Report (CMMI) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Requirement Test Status report to help determine gaps in test coverage and monitor test progress for each requirement. This report indicates how many tests are passing or failing for each requirement. This report is available only when the team creates test plans and starts to run tests by using Microsoft Test Manager. For information about how to define test suites and test plans, see [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + + For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Requirement Test Status report from the Test dashboard. You can access this dashboard only if your team project portal has been enabled and is configured to use SharePoint Server Enterprise Edition. For more information, see [Dashboards (CMMI)](http://msdn.microsoft.com/en-us/c149b78b-1803-4dc0-aefe-35dbb13a5de0). + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the report + The Requirement Test Status report provides a horizontal bar chart that shows the count of results for each test case and test configuration combination that the team has defined for each requirement. The chart groups the results according to their most recent test runs, where the options are **Passed** (green), **Failed** (red), **Blocked** (purple), or **Not Run** (gray). + + ![Requirement Test Status Excel report](_img/procg_reqteststatus.png "ProcG_ReqTestStatus") + + The report is based on a PivotChart report that shows the most recent data that is stored in the data warehouse and that is captured for the results for the test cases that are linked to specific requirements. + +### Required activities for monitoring test activity + For the Requirement Test Status report to be useful and accurate, the team must perform the following activities: + +- Define test cases and requirements, and link test cases to requirements by using the **Tested By** link type. + +- Define test plans, and assign test cases to them. + +- For manual tests, mark the results of each validation step in the test case as passed or failed. + + > [!IMPORTANT] + > Testers must mark a test step with a status if it is a validation test step. The overall result for a test case reflects the status of all the test steps that the tester marked. Therefore, the test case will have a status of failed if the tester marked any test step as failed or not marked. + + For automated tests, each test is automatically marked as passed or failed. + +- (Optional) To support filtering, assign **Iteration** and **Area** paths to each Test Case. + +## Interpreting the report + You should expect the Requirement Test Status report to vary depending on where you are in your product development cycle. Early iterations will show few tests that are passing. However, you should expect most tests to pass toward the end of an iteration or product development cycle. + + You can review the report to find answers to the following questions: + +- Which requirements have a low overall count of tests? + +- Which requirements have a high overall count of tests that are blocked or have never been run? + +- Does the test coverage for each requirement meet expectations? + +- Which requirements have a high rate of test failures? + +- What is the average number of tests that are defined per requirement? + +- Which requirements have a high rate of test failures? + +- Is the team running tests for each requirement? + +- If tests are blocked or not being run, does the team understand the blocking issues, and is the team addressing them? + +## Updating and customizing the report + You can update the Requirement Test Status report by opening it in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|Requirement test status for an iteration|Change the filter for **Iteration** (default=All)| +|Requirement test status for a product area|Change the filter for **Area** (default=All)| + + For more information about how to work with and customize PivotTables and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/requirements-progress-excel-report-cmmi.md b/docs/report/excel/requirements-progress-excel-report-cmmi.md new file mode 100644 index 00000000000..a318491357f --- /dev/null +++ b/docs/report/excel/requirements-progress-excel-report-cmmi.md @@ -0,0 +1,64 @@ +--- +title: Requirements Progress Excel Report (CMMI) | TFS +description: Tracks the rate at which the team is implementing requirements. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 45434ab2-3363-4ebd-89ce-95f438c64424 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Requirements Progress Excel Report (CMMI) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Requirements Excel report to track the rate at which the team is implementing requirements. This report shows the distribution of active, resolved, and closed requirements over time. For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Requirements report from the Burndown dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + You can use the Requirements report to understand how well the team is completing the requirements that it defined for an iteration or release. This report is based on a PivotChart report that shows the last four weeks of data that was captured for requirements and that is stored in the data warehouse. + + ![Requirements Progress report](_img/procguid_reqprogress.png "ProcGuid_ReqProgress") + +### Required Activities for Tracking Requirements + For the Requirements report to be useful and accurate, the team must perform the following activities: + +- define requirements. + +- Update the **State** of each requirement as it transitions from **Active** to **Resolved** to **Closed**. + +- (optional) Specify the **Iteration** path, **Area** path, or both of each requirement if you want to filter by those fields. + +## Interpreting the Report + You should expect the Requirements report to vary based on where you are in your product development cycle. Early iterations should show a gradual increase in the number of active requirements. Iterations that are near the end of a product cycle should show a wide band of resolved and closed Requirements. + + You can review the chart to determine the team's progress over time or during an iteration. Specifically, you can determine how much progress the team is making toward resolving and closing user stories. + +## Updating and Customizing the Report + You can update the Requirements report by opening the report in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Burndown of requirements for an iteration|Change the filter for **Iteration** (default=All)| +|Burndown of requirements for a product area|Change the filter for **Area** (default=All)| +|Burndown of requirements for the last six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/task-progress-excel-report.md b/docs/report/excel/task-progress-excel-report.md new file mode 100644 index 00000000000..f6c0ae0e3aa --- /dev/null +++ b/docs/report/excel/task-progress-excel-report.md @@ -0,0 +1,70 @@ +--- +title: Task Progress Excel Report | TFS +description: Tracks how much work the team has completed and how much remains. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 7deef86f-987f-4b77-8acc-e31d436b48cf +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Task Progress Excel Report +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Task Progress report to track how much work the team has completed and how much remains. This report shows the distribution of active and closed Tasks over time. For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Task Progress report from the Progress dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + You can use the Task Progress report to track how much work remains to be completed. This report is based on a PivotChart report that shows the last four weeks of data that is captured for Tasks and that is stored in the data warehouse. + + ![Task Progress Excel Report](_img/procguid_exceltask.png "ProcGuid_ExcelTask") + +### Required Activities for Tracking Tasks + For the Task Progress report to be useful and accurate, the team must perform the following activities: + +- Define Tasks. + +- Change the **State** of each Task to **Closed** as the team completes it. + +- (optional) Specify the **Iteration** and **Area** paths of each Task if you want to filter by those fields. + +## Interpreting the Report + You should expect the Task Progress report to vary based on where you are in your product development cycle. Early iterations should show a gradual increase in the number of active Tasks. Iterations that are near the end of a product cycle should show a wide band of closed Tasks. + + You can review the report to determine the progress over time or during an iteration. Specifically, you can find answers to the following questions: + +- Is the team making progress toward closing Tasks? + +- Is the team adding work? + + For information about healthy and unhealthy versions of the report, see [Remaining Work](../sql-reports/remaining-work-report.md). + +## Updating and Customizing the Report + You can update the Task Progress report by opening the report in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Burn down chart for Tasks during an iteration|Change the filter for **Iteration** (default=All)| +|Burn down chart for Tasks in a product area|Change the filter for **Area** (default=All)| +|Burn down chart for Tasks over the most recent six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/test-activity-excel-report.md b/docs/report/excel/test-activity-excel-report.md new file mode 100644 index 00000000000..35cb91c895d --- /dev/null +++ b/docs/report/excel/test-activity-excel-report.md @@ -0,0 +1,82 @@ +--- +title: Test Activity Excel Report | TFS +description: Helps monitor the number of manual tests that the team has run over time. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: cb950153-2f44-4b0b-afeb-cfb697281930 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Test Activity Excel Report +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +You can use the Test Activity report to help monitor the number of manual tests that the team has run over time. This report is available only after the team creates test plans and starts to run tests by using Microsoft Test Manager. For information about how to define test suites and test plans, see [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + + For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Test Activity report from the Test dashboard. You can access this dashboard only if your team project portal has been enabled and is configured to use SharePoint Server Enterprise Edition. For more information, see [Share information using the project portal](../sharepoint-dashboards/share-information-using-the-project-portal.md). + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the report + You can use the Test Activity report to understand how well the team is completing tests. This report is based on a PivotChart that shows the most recent four weeks of data that was captured for test results and that is stored in the data warehouse. + + ![Test Activity Excel Report](_img/procguid_testactivity.png "ProcGuid_TestActivity") + +### Required activities for monitoring test activity + For the Test Activity report to be useful and accurate, the team must perform the following activities: + +- Define test cases and test pans, and assign test cases to test plans. + +- For manual tests, mark the results of each validation step in the test case as passed or failed. + + > [!IMPORTANT] + > Testers must mark a test step with a status if it is a validation test step. The overall result for a test case reflects the status of all the test steps that were marked. Therefore, the test case will have a status of failed if any test step is marked as failed or not marked. + + For automated tests, each test case is automatically marked as passed or failed. + +- (Optional) To support filtering, assign **Iteration** and **Area** paths to each test case. + +## Interpreting the report + You should expect the Test Activity report to vary depending on where you are in your product development cycle. Early iterations should show a gradual increase in the number of manual test cases that have been run. + + You can review the report to answer to the following questions: + +- Is the trend of manual tests that the team is running consistently increasing? + +- Do you identify any spikes in the test activity that you cannot account for? + + The Test Activity report indicates the results for each test case run for each test configuration and for all test plans. Spikes that might occur may be early indicators of problems in either the test activity or the quality of code that is being checked in. + + You might want to check the status of recent builds, bug status, and code churn to determine whether the metrics for each of these factors can help explain the changes in test activity. + +## Updating and customizing the report + You can update the Test Activity report by opening it in Microsoft Excel and changing the filter options for the PivotTable report. You can customize this report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|Test activity for an iteration|Change the filter for **Iteration** (default=All)| +|Test activity for a product area|Change the filter for **Area** (default=All)| +|Test activity for a specific test plan or suite of test plans|Change the filter for **Test Plan** (default=All)| +|Test activity for automated test cases|Change the filter for **Is Automated** (default=False)| +|Test activity for the last six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/test-case-readiness-excel-report.md b/docs/report/excel/test-case-readiness-excel-report.md new file mode 100644 index 00000000000..2e042ac4f11 --- /dev/null +++ b/docs/report/excel/test-case-readiness-excel-report.md @@ -0,0 +1,78 @@ +--- +title: Test Case Readiness Excel Report | TFS +description: Use the Test Case Readiness report to help monitor the progress that the team is making toward defining and designing Test Cases. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: faaad500-45da-45c7-8ab2-59d1c6f30c2a +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Test Case Readiness Excel Report +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Test Case Readiness report to help monitor the progress that the team is making toward defining and designing Test Cases. This report shows a burndown chart of how many test cases were in the design and ready states for the most recent four weeks. + + For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the Test Case Readiness from the Test dashboard. You can access this dashboard only if your team project portal has been enabled and is configured to use SharePoint Server Enterprise Edition. For more information, see [Share information using the project portal](../sharepoint-dashboards/share-information-using-the-project-portal.md). + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the report + This report provides a stacked area graph that shows how many Test Cases have been in the **Design** or **Ready** state for the most recent four weeks. + + ![Test Case Readiness Excel Report](_img/procguid_exceltestcase.png "ProcGuid_ExcelTestCase") + + The report is based on a PivotChart report that shows the data that is stored in the data warehouse for Test Cases. + +### Required activities for monitoring test case readiness + For the Test Case Readiness report to be useful and accurate, the team must perform the following activities: + +- Define [test cases](../../manual-test/getting-started/create-test-cases.md), and update their **State** from **Design** to **Ready**. + +- (Optional) To support filtering, assign **Iteration** and **Area** paths to Test Cases. + +## Interpreting the report + You should expect the Test Case Readiness report to vary depending on where you are in your product development cycle. Early iterations should show a gradual increase in how many Test Cases are in the **Design** state. Toward the end of the product cycle, most Test Cases should be in a **Ready** state. + + You can review the report to find answers to the following questions: + +- How many Test Cases is the test team defining? + +- How many Tests Cases are ready to run today? + +- How many Test Cases must the team still write and review? + +- Does the overall number of Test Cases appear to be enough for the number of User Stories that the team is implementing? + +- What is the percentage of Test Cases that the test team can run today? + +- Will the team be able to have all the Tests Cases ready by the end of the iteration? + +## Updating and customizing the report + You can update the Test Case Readiness report by opening it in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|Test Case readiness for an iteration|Change the filter for **Iteration** (default=All)| +|Test Case readiness for a product area|Change the filter for **Area** (default=All)| +|Test Case readiness for the most recent six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTables and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/test-management-reports.md b/docs/report/excel/test-management-reports.md new file mode 100644 index 00000000000..25d57867d9c --- /dev/null +++ b/docs/report/excel/test-management-reports.md @@ -0,0 +1,31 @@ +--- +title: Test Management Reports | TFS +description: Display the team-project information that is stored in the data warehouse. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 9d85d62d-00a2-4c9f-8ad8-d527b13b58f4 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Test Management Reports +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +The test team can take advantage of the Office Excel reports in the **Test Team Management** folder to monitor progress and identify the volume, status, and effectiveness of their test activities. The test management reports display team-project information that is stored in the data warehouse. The four Office Excel workbooks provide 17 reports, and each report appears in on its own worksheet. + + These reports are available only for team projects that were created using the [Agile](../../work/guidance/agile-process.md) and [CMMI](../../work/guidance/cmmi-process.md) process templates. + +> [!NOTE] +> You can access the **Test Team Management** folder from the **Excel Reports** folder for the team project in Team Explorer. You can access this folder only if your team project portal has been enabled and is configured to use SharePoint Server with Enterprise Edition. For more information, see [Share information using the project portal](../sharepoint-dashboards/share-information-using-the-project-portal.md). + +## Test team tasks + +|Task|Related topics| +|----------|--------------------| +|**Monitor the success or failure rate of test activities with each build**. The Build Quality workbook provides the following two reports, which show the test results for all build definitions for a team project.

      - **Build Verification Testing**: Helps the team monitor the quality of builds by showing test results for all automated tests that are marked as Build Verification Tests (BVT) and that are run during the build process.
      - **Test Activity Per Build**: Helps the team monitor the quality of builds by showing test results for all tests that have been run against the build for all or selected test plans.

      The count of test results in these reports represents a cumulative count of the most recent version of each test result in a particular build.|- [Build Quality](build-quality-excel-report.md)| +|**Monitor the overall productivity and effectiveness of the test team's test and bug generation activities**. The Test Team Productivity workbook provides the following four reports, which show test and bug activity.

      - **Test Activity**: Helps the team monitor the volume of tests that they have run over the past four weeks.
      - **Test Activity Per User**: Helps the team track the volume of tests that each team member has run over the past eight weeks. The team can use this to help load balance the test activity across team members.
      - **Bugs Created By User**: Helps the team track how many bugs each team member has created.
      - **Bug Effectiveness**: Supports the team in determining how effective they are in defining bugs that are useful and help build a quality product.|- [Test Team Productivity](test-team-productivity-excel-report.md)| +|**Monitor the test results and regression testing for a product**. The Test Team Progress workbook provides the following four reports:

      - **Test Plan Progress**: Helps the team determine how much testing the team has completed and whether it is likely to finish test activities on time.
      - **Test Case Authoring Status**: Helps the team track the progress toward finishing the definition of tests so that they can be run.
      - **Test Status by Suite**: Helps the team determine how much testing the team has completed within each test suite.
      - **Test Status by Area**: Helps the team determine how much testing the team has completed within each product area.
      - **Failure Analysis**: Helps the team monitor how many regressions it is finding.
      - **Automation Design Status**: Supports the team in tracking the number of test cases that still must be automated.|- [Test Team Progress](test-team-progress-excel-report.md)| +|**Determine where the test plans, test configurations, and test coverage are deficient**. The Testing Gaps workbook provides the following five reports, which are based on test results and builds that have been defined and run for a team project.

      - **User Story Status** or **Requirement Status**: Helps the team identify gaps in test coverage for each user story or requirement.
      - **User Story Status by Config** or **Requirement Status by Config**: Helps the team identify gaps in test coverage for each test configuration for each user story or requirement.
      - **Test Status by Area**: Helps the team identify gaps in test coverage of product areas. This report requires that team members assign test cases to product areas.
      - **Tests Not Executed**: Helps the team identify test cases that have never been run for each test configuration.
      - **Code Coverage**: Helps the team determine which builds and build assemblies have low or high code coverage.

      The count of test results in these reports represents a cumulative count of the most recent version of each test result in a particular build. If a test is run multiple times against a build, the count includes the most recent result for that test for that build.|- [Testing Gaps](testing-gaps-excel-report-agile.md)
      - [Testing Gaps](testing-gaps-excel-report-cmmi.md)| + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/test-plan-progress-excel-report.md b/docs/report/excel/test-plan-progress-excel-report.md new file mode 100644 index 00000000000..1f0884275be --- /dev/null +++ b/docs/report/excel/test-plan-progress-excel-report.md @@ -0,0 +1,95 @@ +--- +title: Test Plan Progress Excel Report | TFS +description: Use the Test Plan Progress report to monitor test activities and report on the team's overall test progress. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 5fa325e8-ca16-47f5-a8af-bdfdcbcfc243 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Test Plan Progress Excel Report +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Test Plan Progress report to monitor test activities and report on the team's overall test progress. This report shows a burndown chart of the test results for all tests the team has defined for the team project for the most recent four weeks. + + This report is available only when the team creates test plans and starts to run tests as described in [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + + For information about how to access this report, see [Excel reports](excel-reports.md). + +||| +|-|-| +|**In this topic**

      - [Data in the Report](#Data)
      - [Interpreting the Report](#Interpreting)
      - [Updating and Customizing the Report](#Updating)|**Related topics**

      - [Test](../sharepoint-dashboards/test-dashboard-agile-cmmi.md)
      - [Quality](../sharepoint-dashboards/quality-dashboard-agile-cmmi.md)
      - [Test Plan Progress](../sql-reports/test-plan-progress-report.md)| + +> [!NOTE] +> A team uses test cases to define both manual and automated tests that it can run and manage by using Test Runner and Microsoft Test Manager. By using Microsoft Test Manager, you can create not only test cases but also test suites and test configurations that support testing your project. You can use test configurations to define how you want to run your Test Cases and test suites. You can group your test cases together by organizing them into a hierarchy of test suites in your test plan. By creating test suites, you can run sets of test cases as a group. See [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + + **Requirements** + +- You can view the Test Plan Progress from the Test or Quality dashboards. You can access these dashboards only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + +- To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. See [Add users to team projects](../../accounts/add-users.md). + +- To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + The team can review the Test Plan Progress report to help determine how much testing the team has completed and whether it is likely to finish test activities on time. As the following illustration shows, the report provides a stacked area graph of the results of all tests, grouped into their most recently recorded outcome within the most recent four weeks. Outcomes include **Never Run**, **Blocked**, **Failed**, or **Passed**. + + ![Test Plan Progress Excel Report](_img/procguid_agiletest.png "ProcGuid_AgileTest") + + The chart is based on a PivotTable report from data that is stored in the data warehouse. The data is derived from the results that are generated when members of the team run tests by using Microsoft Test Manager. For more information, see [Run your tests](../../manual-test/getting-started/run-manual-tests.md). + +### Required Activities for Tracking Test Plan Progress + For the Test Plan Progress report to be useful and accurate, the team must perform the following activities: + +- [Define test plans, and assign test cases to test plans](../../manual-test/getting-started/create-test-cases.md). + +- For manual tests, mark the results of each validation step in the test case as passed or failed. + + > [!IMPORTANT] + > Testers must mark a test step with a status if it is a validation test step. The overall result for a test case reflects the status of all the test steps that were marked. Therefore, the test case will have a status of failed if any test step is marked as failed or not marked. + + For automated tests, each test is automatically marked as passed or failed. + +- (Optional) To support filtering, assign **Iteration** and **Area** paths to each test case. + +## Interpreting the Report + You should expect the Test Plan Progress report to vary depending on where you are in your product development cycle. Early iterations should show a gradual increase in the number of test cases that pass. The team can review the report to find answers to the following questions: + +- How many tests are passing? + +- How many tests are failing? + +- How many tests are blocked? + +- How many tests have never run? + +- What percentage of tests are passing across all test plans? + +- How much testing has the team completed? + +- Is the team likely to finish the testing on time? + + An ideal trend would show a steady increase in the number of **Passed** tests and a steady decrease in the number of **Failed**, **Never Run**, or **Blocked** tests. For information about healthy and unhealthy versions of the report, see [Test Plan Progress](../sql-reports/test-plan-progress-report.md). + +## Updating and Customizing the Report + You can update the Test Plan Progress report by opening it in Office Excel and changing the filter options or a column field list for the PivotTable report. You can customize this report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|Test plan progress for an iteration|Change the filter for **TestResult.Iteration** (default=All)| +|Test plan progress for a product area|Change the filter for **TestResult.Area** (default=All)| +|Test plan progress for the most recent six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Test results](https://msdn.microsoft.com/en-us/library/ms244708) diff --git a/docs/report/excel/test-team-productivity-excel-report.md b/docs/report/excel/test-team-productivity-excel-report.md new file mode 100644 index 00000000000..9efea6f9277 --- /dev/null +++ b/docs/report/excel/test-team-productivity-excel-report.md @@ -0,0 +1,112 @@ +--- +title: Test Team Productivity Excel Report | TFS +description: Use the report to help track the overall activity of the team and individual team members in testing the product and finding and reporting bugs. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: cd899058-1200-4b1f-8fb2-4cecec8b0c05 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Test Team Productivity Excel Report +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Teams who are responsible for testing software can use the Test Team Productivity report to help track the overall activity of the team and individual team members in testing the product and finding and reporting bugs. The Test Team Productivity report provides four reports that show test and bug activity: + +- **Test Activity**: Helps the team monitor the volume of tests it has run over the past four weeks. + +- **Test Activity Per User**: Helps the team track the volume of tests that individual team members have run over the past eight weeks. The team can use this to help load balance the test activity across team members. + +- **Bugs Created By User**: Helps the team track how many bugs each team member creates. + +- **Bug Effectiveness**: Supports the team in determining how effective it is in defining bugs that are useful and that help build a quality product. + + > [!NOTE] + > You can view the Test Team Productivity report from the **Test Team Management** folder that is located under the **Excel Reports** folder for the team project in Team Explorer. You can access this folder only if your team project portal has been enabled and is configured to use SharePoint Products. For more information, see [Share information using the project portal](../sharepoint-dashboards/share-information-using-the-project-portal.md). + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Reports + The test activity reports are available only when the team creates test plans and starts to run tests by using Microsoft Test Manager. For information about how to define test suites and test plans, see [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + + The bug activity reports are available only when the team creates bugs and starts to resolve bugs. + + These reports are based on PivotTable reports that show activity that is recorded for a specific team project and data that is stored in the data warehouse. + +### Test Activity and Test Activity by User Reports + The Test Activity report provides a line graph that shows the number of individual tests that were run each day. If a particular test case was run three times in one day, it is counted three times for that day. + + ![Test Activity Excel Report](_img/procg_testactivity.png "ProcG_TestActivity") + + The Test Activity per User report provides a bar chart that indicates how many tests each test team member ran each week. + + ![Test Activity Per User Excel Report](_img/procg_actperuser.png "ProcG_ActPerUser") + + The following table describes the report filters and fields that are used in the PivotTables that generate the test activity reports. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes data that is collected for the selected team project.
      - **Test Result - Area Hierarchy**: Includes test results that were run from test cases that were assigned to the selected product areas.
      - **Test Result - Iteration Hierarchy**: Includes test results that were run from test cases that were assigned to the selected iterations.
      - **Test Plan - Test Plan Name**: Includes test results that were run from test cases that belong to the selected test plans.

      **Filter specific to the Test Activity report**:

      - **Test Result - Outcome**: Includes test results that had an outcome of Passed, Failed, Never Run. **Note:** The **Outcome** field is not listed under the Report Filter. However, it is set in the **PivotTable Field List**.

      **Filter specific to the Test Activity by User report**:

      - **Test Run - Is Automated**: Includes only test results from manual test cases. (**Is Automated**=**False**)|- **(Measure) Test - Result Count**: Counts all the results for each test run individually.
      - **Date - Sets - Last 4 or 8 weeks**: Defines the time span of activity to report.

      **Field specific to the Test Activity by User report**:

      - **Test - Test Results Executed By**: Groups the count of test results according to the team member who ran the tests.| + +### Bugs Created by User and Bug Effectiveness Reports + The Bugs Created by User report provides a bar chart that indicates how many bugs each test team member created each week. + + ![Bugs Per User Excel Report](_img/procg_bugsperuser.png "ProcG_BugsPerUser") + + The Bug Effectiveness report provides a bar chart that indicates the count of resolved bugs that were created by each test team member, grouped by their bug resolution. + + ![Bug Effectiveness Excel Report](_img/procg_bugeffectiveness.png "ProcG_BugEffectiveness") + + The following table describes the report filters and fields that are used in the PivotTables that generate the bug activity reports. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes work items that are defined for the selected team project.
      - **Work Item - Work Item.Iteration Hierarchy**: Includes work items that are assigned to the selected iteration paths.
      - **Work Item - Work Item.Area Hierarchy**: Includes work items that are assigned to the selected product areas.
      - **Work Item - Work Item.Work Item Type**: Includes only the selected work items. For these reports, bug is selected.

      **Filter specific to the Bugs Created by User report**:

      - **Work Item - Rev=1**: Selects data that is contained in the first revision of the work item to include in the report.

      **Filters specific to the Bug Effectiveness report**:

      - **Work Item - State**: Includes work items that are in the selected state. For this report, includes bugs that are in the **Resolved** state.
      - **Work Item - Work Item.Previous State**: Includes work items whose previous state was in one of the selected states. For this report, includes bugs whose previous state was **Active**.
      - **Date - Year Month Date=All**: Includes work items that contain data that corresponds to the previous filters in the list during the selected time periods. For this report, **All** time periods are included.|**Fields specific to Bugs Created by User report**:

      - **Work Item - Created By**: Groups the report of bugs based on the test team member who created the bugs.
      - **(Measure) Work Item - Revision Count**: Counts the number of times that a work item has been modified. Because the report is filtered to only consider data contained in Revision 1 of each bug, the **Revision Count** provides the total number of new bugs that the test team member created.
      - **Date - Sets - Last 8 weeks**: The time span of activity to include in the report.

      **Fields specific to Bug Effectiveness report**:

      - **Work Item - Reason**: The reason that the state of the work item changed. For the Bug Effectiveness report, this provides the groupings of **As Designed**, **Cannot Reproduce**, **Duplicate**, and **Fixed**.
      - **(Measure) Work Item - State Change Count**: Indicates the number of times that a team member changed the state of the work item. For the Bug Effectiveness report, this field indicates how often the bug has been reactivated.
      - **Work Item - Created By**: Groups the report of bugs based on the test team member who created the bugs.| + +## Required Activities for Tracking Test and Bug Activity + For the test activity reports to be useful and accurate, the team must perform the following activities: + +- [Define test cases and test plans](../../manual-test/getting-started/create-test-cases.md), and assign test cases to the test plans. + +- [Run tests](../../manual-test/getting-started/run-manual-tests.md). + +- (Optional) To filter the reports by product area and iteration, specify the **Area** and **Iteration** paths of each test case. + + > [!NOTE] + > The project administrator for each team project [defines area and iteration paths](../../work/customize/set-area-paths.md) for that project so that the team can track progress by those designations. + + For the bug activity reports to be useful and accurate, the team must perform the following activities: + +- Create a bug for each code defect that was found by testing. + +- Update the **State** of each bug as the team fixes, verifies, closes, or reactivates it and accurately set the **Reason** field every time that the bug changes state. + +- (Optional) To filter the reports by product area and iteration, specify the **Area** and **Iteration** paths of each bug. + +## Updating and customizing the reports + You can update the Test Team Productivity report by opening it in Office Excel and changing the filter options for the PivotTable report for one of the worksheets. You can customize each report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|Test or bug activity for a product area|Change the filter for **Area** (default=All)| +|Test or bug activity for an iteration|Change the filter for **Iteration** (default=All)| +|Test activity for a specific test plan or set of test plans|Change the filter for **Test Plan** (default=All)| +|Test or bug activity for the most recent six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** or **@@Last 8 weeks@@** with a different **Set**| +|Bug effectiveness for a particular time period|Change the filter for **Year Month Date** (default=All)| + + For more information about how to work with and customize PivotTables and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/test-team-progress-excel-report.md b/docs/report/excel/test-team-progress-excel-report.md new file mode 100644 index 00000000000..5b7a4c54543 --- /dev/null +++ b/docs/report/excel/test-team-progress-excel-report.md @@ -0,0 +1,161 @@ +--- +title: Test Team Progress Excel Report | TFS +description: Use the report to help monitor test activities and report on the progress of the team in authoring and automating tests and performing regression testing. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: a7c04739-72c4-4bb9-b857-adb312d50d87 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Test Team Progress Excel Report +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Teams who are responsible for testing software can use the Test Team Progress report to help monitor test activities and report on the progress of the team in authoring and automating tests and performing regression testing. The Test Team Progress report provides the following six reports based on data that was collected for test cases that were defined for the team project and test results: + +- **Test Plan Progress**: Helps the team determine how much testing the team has completed and whether it is likely to finish test activities on time. + +- **Test Case Authoring Status**: Helps the team track the status of completing the definition of test cases so that they can be run. + +- **Test Status by Suite**: Helps the team determine how much testing the team has completed within each test suite. + +- **Test Status by Area**: Helps the team determine how much testing the team has completed within each product area. + +- **Failure Analysis**: Helps the team monitor how many regressions they are finding. + +- **Automation Design Status**: Supports the team in tracking the number of test cases that still must be automated. + + This Test Team Progress report is available only when the team creates test plans and starts to run tests by using Microsoft Test Manager. For more information, see [Testing overview](../../manual-test/index.md). + +> [!NOTE] +> You can access the Test Team Progress report from the **Test Team Management** folder that is located under the **Excel Reports** folder for the team project in Team Explorer. You can access this folder only if your team project portal has been enabled and is configured to use SharePoint Products. For more information, see [Share information using the project portal](../sharepoint-dashboards/share-information-using-the-project-portal.md). + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant permissions to view or create reports](../admin/grant-permissions-to-reports.md). + +## Data in the reports + The Test Team Project report presents data that is based on PivotTable reports that access data stored in the data warehouse. The data is derived from the results that are generated when members of the team define test cases and run tests by using Microsoft Test Manager. For more information, see [Run your tests](../../manual-test/getting-started/run-manual-tests.md) and [Track your test results](../../manual-test/getting-started/track-test-status.md). + +### Test case authoring and automation design status + The team can use the Test Case Authoring Status report to help monitor the progress that they make toward defining and designing test cases. This report shows a burndown chart of how many test cases were in the design and ready states for the most recent six weeks. + + ![Test Case Authoring Excel Report](_img/procg_testcaseauthoring.png "ProcG_TestCaseAuthoring") + + The team can use the Automation Design Status report to help monitor the progress that they make toward automating test cases. This report shows a burndown chart of how many test cases have moved into an automated state for the most recent six weeks. + + ![Automation Design Status Excel Report](_img/procg_autodesign.png "ProcG_AutoDesign") + + The following table describes the report filters and fields that are used in the PivotTable reports that generate the Test Case Authoring Status and Automation Design Status reports. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes work items that are defined for the selected team project.
      - **Work Item - Work Item.Iteration Hierarchy**: Includes work items that are assigned to the selected iteration paths.
      - **Work Item - Work Item.Area Hierarchy**: Includes work items that are assigned to the selected product areas.
      - **Work Item - Work Item.Work Item Type**: Includes only the selected work items. For these reports, test case is selected.|- **(Measure) Work Item- Work Item Count**: The count of work items. The report uses this field to count all work items in the specified states.
      - **Date - Sets - Last 6 weeks**: The time span of activity to report.

      **Field specific to the Test Case Authoring Status report**:

      - **Work Item- State**: The state of the test case. The report uses this field to define the column labels and to filter the test cases to include **Design** and **Ready**.

      **Field specific to the Automation Design Status report**:

      - **Work Item- Microsoft.VSTS.TCM - Is Automated**: The automation status of a test case. The report uses this field to define the column labels as **Automated** and **Not Automated**.| + +### Test Plan Progress + The Test Plan Progress report provides a stacked area graph of the test results from all test cases. The report groups the test results into their most recently recorded outcome and plots the data for the most recent four weeks. Outcomes include **Never Run**, **Blocked**, **Failed**, or **Passed**. + + ![Test Plan Progress report](_img/procg_planprogress.png "ProcG_PlanProgress") + + The team can review this report to determine the progress in a sprint or iteration or over time. For example, the team can answer these questions: + +- How much testing has the team completed? + +- Is the team likely to finish the testing on time? + +- How many tests are left to be run? + +- How many tests are passing? + +- How many tests are failing? + +- How many tests are blocked? + +### Test results by test suite or product area + The Test Status by Suite and Test Status by Area reports list the count of all test results that were collected for all test cases that were based on recorded outcomes. The reports group the test results either by test suite or product area. The outcomes for test results include **Never Run**, **Blocked**, **Failed**, or **Passed**. + + The team can use these reports to investigate test suites or product areas whose test results have high failure counts or test cases that have never run. + +### Regression testing + The test team can use the Failure Analysis report to help monitor how many regressions the test team finds. Regressions are bugs in the software that you test that did not appear in previous versions. A team that performs regression testing is specifically focused on finding bugs that have appeared only in a new version of the software. + + The Failure Analysis report provides a stacked area graph that shows the cumulative count of all failed outcome test results. The report groups the results by failure type for all test cases and test configurations and plots the results for the most recent six weeks. Failure types include **Regression**, **None**, **New Issue**, and **Known Issue**. + + ![Failure Analysis Excel Report](_img/procg_failureanalysis.png "ProcG_FailureAnalysis") + + The system examines each test configuration for which the test case was executed and tries to identify the predecessor result for the same configuration for the test case. The failure type that is assigned to the test case/configuration is determined based on the following criteria: + +- **Regression**: When the immediate predecessor result had an outcome of **Passed**. + +- **None**: When the immediate predecessor result had an outcome that was not **Passed** or **Failed**. + +- **New Issue**: When no immediate predecessor result can be found. + +- **Known Issue**: When the immediate predecessor result had an outcome of **Failed**. + + The team can review the report to find answers to the following questions: + +- How many tests overall are regressing? + +- Is the team keeping the overall number of regressions or test failures within expected ranges or team goals? + +- Is the team addressing issues as they are identified? Are the known issues addressed in a timely manner? + + A healthy Failure Analysis report will show moderate numbers of new issues, known issues, and regressions. If spikes occur in one or more of these areas, the team might want to investigate this issue more. Spikes may indicate problems in either the test activity or the quality of code that the team checks in. Also, the team might want to check the status of recent builds, bug status, and code churn to determine whether the metrics for each of these factors can help explain the changes in the test activity lines. + +### Report filters and fields + The following table describes the report filters and fields that are used in the PivotTables that generate the Test Plan Progress, Test Status by Suite or Area, and the Failure Analysis reports. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes test results that were collected for the selected team project.
      - **Test Result - Iteration Hierarchy**: Includes test results that were run from test cases that are assigned to the selected iterations.
      - **Test Plan - Test Plan Name**: Includes test results that were run from test cases that belong to the selected test plans.

      **Filters specific to the Test Plan Progress report**:

      - **Test Result - Area Hierarchy**: Includes test results that were run from test cases that are assigned to the selected product areas.
      - **Test Suite - Test Suite Hierarchy**: Includes test results that were run from test cases that belong to the selected test suites.

      **Filter specific to the Test Status by Suite report**:

      - **Test Result - Area Hierarchy**: Includes test results that were run from test cases that are assigned to the selected product areas.

      **Filters specific to the Failure Analysis report**:

      - **Test Result - Area Hierarchy**: Includes test results that were run from test cases that are assigned to the selected product areas.
      - **Test Suite - Test Suite Hierarchy**: Includes test results that were run from test cases that belong to the selected test suites.
      - **Test Result- Outcome**: Includes test results that have the selected outcome. The report uses this field to filter the count of test results to include only those that have an outcome of **Failed**.|- **Test Result- Outcome**: The outcome of the test. The report uses this field to define the column labels and to filter the test results to include Passed, Failed, Blocked, or Never Run.
      - **(Measure) Test - Point Count Trend**: Counts the latest version of each test result in a particular build. If a test is run multiple times against a build, the Point Count Trend counts the latest result for that test that uses that build. If a test case is not included in the build, then it is counted as "Never Run."

      **Field specific to the Test Plan Progress report**:

      - **Date - Sets - Last 6 weeks**: The time span of activity to report.

      **Field specific to the Test Status by Suite report**:

      - **Test Suite - Test Suite Hierarchy**: The test suites to list in the report.

      **Field specific to the Test Status by Area report**:

      - **Test Result - Area Hierarchy**: The set of test results to include in the report that is based on the area paths that are assigned to the test cases that were run.

      **Fields specific to the Failure Analysis report**:

      - **Test Result- Failure Type**: The report uses this field to build the columns in the report.
      - **Date - Sets - Last 6 weeks**: The time span of activity to report.| + +## Required activities for monitoring test team progress + For the Test Team Progress reports to be useful and accurate, the team must perform the following activities: + +- [Define test cases and test plans](../../manual-test/getting-started/create-test-cases.md), and assign test cases to the test plans. + +- [Run tests](../../manual-test/getting-started/run-manual-tests.md). + +- For manual tests, mark the results of each validation step in the test case as passed or failed. + + > [!IMPORTANT] + > Testers must mark a test step with a status if it is a validation test step. The overall result for a test case reflects the status of all the test steps that the tester marked. Therefore, the test case will have a status of failed if the tester marked any test step as failed or not marked. + + For automated tests, each test case is automatically marked as passed or failed. + +- (Optional) To filter the reports by product area and iteration, specify the **Area** and **Iteration** paths of each test case. + + For the Testing Gaps reports to be useful and accurate, the team must perform the activities that are described in the following table: + +|Worksheet report|Required activities| +|----------------------|-------------------------| +|- Test Case Authoring Status
      - Automation Design Status|- Define test cases, and update their **State** from **Design** to **Ready**.| +|- Automation Design Status|- [Automate test cases](https://msdn.microsoft.com/en-us/library/dd380741.aspx).| +|- Test Plan Progress
      - Test Status by Suite
      - Test Status by Area
      - Failure Analysis|- Define test plans and test suites, and assign test cases to test plans and test suites.
      - [Run tests](../../manual-test/getting-started/run-manual-tests.md), and, for manual tests, mark the results of each validation step in the test case as passed or failed.| +|- Test Case Authoring Status
      - Automation Design Status
      - Test Plan Progress
      - Test Status by Suite
      - Test Status by Area
      - Failure Analysis|- (Optional) To support filtering, assign **Iteration** and **Area** paths to each test case. The **Test Result - Iteration Hierarchy** and **Test Result - Area Hierarchy** fields get their values from the **Iteration** and **Area** paths that are assigned to their corresponding test cases.| + +## Updating and Customizing the Reports + You can update the Test Team Progress report by opening it in Office Excel and changing the filter options for the Pivot-Table report for one of the worksheets. You can customize each report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|- Authoring and automation status for an iteration
      - Test plan progress and test results for an iteration
      - Regression testing for an iteration|Change the filter for **Iteration** (default=All)| +|- Authoring and automation status for a product area
      - Test plan progress and test results for a product area
      - Regression testing for a product area|Change the filter for **Area** (default=All)| +|- Test plan progress and test results for selected test plans
      - Regression testing for selected test plans
      - Failure analysis for selected test plans|Change the filter for **Test Plan** (default=All)| +|- Authoring and automation status for the most recent eight, ten, or more weeks
      - Test plan progress for the most recent eight, ten, or more weeks
      - Regression testing for an iteration Failure Analysis for the most recent eight, ten, or more weeks|In the Columns PivotTable Field List, replace **@@Last 6 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/testing-gaps-excel-report-agile.md b/docs/report/excel/testing-gaps-excel-report-agile.md new file mode 100644 index 00000000000..fce5376ffef --- /dev/null +++ b/docs/report/excel/testing-gaps-excel-report-agile.md @@ -0,0 +1,106 @@ +--- +title: Testing Gaps Excel Report (Agile) | TFS +description: Use the Testing Gaps report to help determine where there are deficiencies in their test plans, test configurations, and test coverage. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 6f1a7509-2c47-411f-b033-ebd72b9c51d3 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Testing Gaps Excel Report (Agile) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Teams who are responsible for testing software can use the Testing Gaps report to help determine where there are deficiencies in their test plans, test configurations, and test coverage. The Testing Gaps report provides the following five reports based on test results and builds that have been defined and run for a team project. + +- **User Story Status**: Helps the team identify gaps in test coverage for each user story. This report requires that team members link test cases to user stories. + +- **User Story Status by Config**: Helps the team identify gaps in test coverage for each test configuration for each user story. This report requires that team members link test cases to user stories. + +- **Test Status by Area**: Helps the team identify gaps in test coverage of product areas. This report requires that team members assign test cases to product areas. + +- **Tests Not Executed**: Helps the team identify test cases that have never been run for each test configuration. + +- **Code Coverage**: Helps the team determine which builds and build assemblies have low or high code coverage. + + The first four reports are available only when the team creates test plans and starts to run tests by using Microsoft Test Manager. For information about how to define test suites and test plans, see [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + +> [!NOTE] +> You can access the Testing Gaps report from the **Test Team Management** folder that is located under the **Excel Reports** folder for the team project in Team Explorer. You can access this folder only if your team project portal has been enabled and is configured to use SharePoint Products. For more information, see [Share information using the project portal](../sharepoint-dashboards/share-information-using-the-project-portal.md). + + **Requirements** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the reports + The Testing Gaps reports show the cumulative count of test results for the test plans, test configurations, and test cases that are defined for a team project. All reports are based on PivotTables that access data that is stored in the data warehouse. + +### Test coverage of user stories + The User Story Status report indicates how many tests are passing or failing for each user story. It provides a horizontal bar chart that shows the count of test results for each test case and test configuration combination that the team has defined for each user story. The report presents the cumulative outcome of tests run for all test cases that are linked to user stories. The report displays results that are filtered by the following outcomes: **Passed** (green), **Failed** (red), **Never Run** (blue), or **Blocked** (yellow). + + ![User Story Test Status Excel Report](_img/procg_userstorystatus.png "ProcG_UserStoryStatus") + + The User Story Status by Config report presents the test results for each user story, grouped by test configuration. + + The following table describes the report filters and fields that are used in the PivotTables that generate the reports that are focused on test coverage of user stories. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes test results that were collected for the selected team project.
      - **Test Result - Iteration Hierarchy**: Includes test results that were run from test cases that were assigned to the selected iterations.
      - **Test Result - Area Hierarchy**: Includes test results that were run from test cases that were assigned to the selected product areas.
      - **Test Plan - Test Plan Name**: Includes test results that were run from test cases that belong to the selected test plans.
      - **Work Item Linked - Work Item Linked.Work Item Type**: Includes test results that were run from test cases that are linked to the selected work item type. The report counts test results for test cases only if they are linked to a user story.

      **Filter specific to the User Story Status by Config report**:

      - **Test Suite - Test Suite Hierarchy**: Includes test results that were run from test cases that belong to the selected test suites.|
      • **Test Result- Outcome**: The outcome of the test. The report uses this field to define the column labels and to filter the test results to include Passed, Failed, Blocked, or Never Run.
      • **(Measure) Test - Point Count Trend**: Counts the most recent version of each test result in a particular build. If a test is run multiple times against a build, the Point Count Trend counts the most recent result for that test using that build.
      • **Work Item Link- Title**: The title of the work item that is linked to the test case. In this report, the title of the user story is listed.
      • **Field specific to the User Story Status by Config report**:

        • **Test Configuration - Configuration Name**: The name of the test configuration to list in the report.
      | + +### Test coverage by product area + The Test Status by Area report indicates how many test cases are passing or failing for a team project by product area. The following table describes the report filters and fields that are used in the PivotTable reports that generate the Test Status by Area report. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes test results that are collected for the selected team project.
      - **Test Result - Iteration Hierarchy**: Includes test results that were run from test cases that were assigned to the selected iterations.
      - **Test Plan - Test Plan Name**: Includes test results that were run from test cases that belong to the selected test plans.|- **Test Result- Outcome**: The outcome of the test. The report uses this field to define the column labels and to filter the test results to include Passed, Failed, Blocked, or Never Run.
      - **(Measure) Test - Point Count Trend**: Counts the most recent version of each test result in a particular build. If a test is run multiple times against a build, the Point Count Trend counts the most recent result for that test using that build.
      - **Test Result - Area Hierarchy**: The set of test results to include in the report based on the area paths that are assigned to the test cases that were run.| + +### Tests cases that have never run + The Tests Not Executed report indicates how many test cases have never run. The test cases are grouped by test configuration and test result owner. The following table describes the report filters and fields that are used in the PivotTable reports that generate the Test Status by Area report. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes test results that were collected for the selected team project.
      - **Test Result - Iteration Hierarchy**: Includes test results that were run from test cases that were assigned to the selected iterations.
      - **Test Result - Area Hierarchy**: Includes test results that were run from test cases that were assigned to the selected product areas.
      - **Test Plan - Test Plan Name**: Includes test results that were run from test cases that belong to the selected test plans.
      - **Test Suite - Test Suite Hierarchy**: Includes test results that were run from test cases that belong to the selected test suites.
      - **Test Result- Outcome**: Includes test results with the selected outcome. The report uses this field to filter the count of test cases to include only those with an outcome of Never Run.|- **(Measure) Test - Point Count Trend**: Counts the most recent version of each test result in a particular build. If a test case is not included in the build, it is counted as "Never Run."
      - **Test Configuration - Configuration Name**: The name of the test configuration to list in the report.
      - **Test Case- Title**: The title of the test case.
      - **Test Result - Owner**: The name of the team member who ran the test.| + +### Code Coverage + The Code Coverage report lists the lines of code that are covered, not covered, or only partially covered for each build and build assembly. You can use this report to determine which builds and assemblies have the lowest and highest code coverage. The following table describes the report filters and fields that are used in the PivotTables that generate the Code Coverage report. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes builds that are defined for the selected team project.
      - **Build - Build Definition Name**: Includes builds that are associated with the selected build definitions.|- **Build Coverage - Lines Covered**: The number of lines that are covered in the selected build.
      - **Build Coverage - Lines Not Covered**: The number of lines that are not covered in the selected build.
      - **Build Coverage - Lines Partially Covered**: The number of lines that are partially covered in the selected build. **Note:** If multiple runs are performed against a build, the build coverage reflects the combined coverage of the runs, taking into consideration that there might be overlap in the lines covered across the runs.
      - **Build - Build Name**: The name of the build. Each time that a build is run, it is assigned a name that contains the build definition name as its prefix.
      - **Assembly - Assembly**: The assembly name against which the coverage statistics were generated.| + +## Required activities for monitoring testing gaps + For the Testing Gaps reports to be useful and accurate, the team must perform the activities that are described in the following table: + +|Worksheet report|Required activities| +|----------------------|-------------------------| +|- User Story Status
      - User Story Status by Config
      - Test Status by Area
      - Tests Not Executed|- Define test cases and test plans, and assign test cases to the test plans.
      - [Run tests](../../manual-test/getting-started/run-manual-tests.md), and, for manual tests, mark the results of each validation step in the test case as passed or failed.| +|- User Story Status
      - User Story Status by Config|- Define user stories, and link test cases to user stories. The recommended link type to use is **Tested By**.| +|- User Story Status by Config
      - Tests Not Executed|- Define test configurations, and assign to test plans or test suites. For more information, see [Test configurations: specifying test platforms](../../manual-test/test-different-configurations.md).| +|- User Story Status
      - User Story Status by Config
      - Test Status by Area
      - Tests Not Executed|- (Optional) To support filtering, assign **Iteration** and **Area** paths to each test case. The **Test Result - Iteration Hierarchy** and **Test Result - Area Hierarchy** fields get their values from the **Iteration** and **Area** paths that are assigned to their corresponding test cases.| +|- User Story Status
      - User Story Status by Config
      - Test Status by Area
      - Tests Not Executed
      - Code Coverage|- **Configure tests to gather code coverage data**. For code coverage data to appear in the report, team members must instrument tests to gather that data.| + +## Updating and Customizing the Report + You can update the Testing Gaps report by opening it in Office Excel and changing the filter options for the PivotTable report for one of the worksheets. You can customize each report to support other views, as the following table describes. + +|Worksheet|View|Action| +|---------------|----------|------------| +|- User Story Status
      - User Story Status by Config
      - Test Status by Area
      - Tests Not Executed|Testing gaps for an iteration|Change the filter for **Iteration** (default=All)| +|- User Story Status
      - User Story Status by Config
      - Test Status by Area
      - Tests Not Executed|Testing gaps for a product area|Change the filter for **Area** (default=All)| +|- User Story Status
      - User Story Status by Config
      - Test Status by Area
      - Tests Not Executed|Testing gaps for a specific test plan or set of test plans|Change the filter for **Test Plan** (default=All)| +|- User Story Status by Config
      - Tests Not Executed|Testing gaps for a specific test suite|Change the filter for **Test Suite Hierarchy** (default=All)| +|- Code Coverage|Code coverage for a specific build definition or set of build definitions|Change the filter for **Build Definition Name** (default=All)| +|- User Story Status
      - User Story Status by Config
      - Test Status by Area
      - Tests Not Executed
      - Code Coverage|Testing gaps or code coverage that includes data from the most recent six, eight, or more weeks|In the Columns PivotTable Field List, add the **Date - Sets** field, and specify **@@Last 6 weeks@@** or other set| + +For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Test Result tables](https://msdn.microsoft.com/en-us/library/ee620635.aspx) + [Excel reports](excel-reports.md) diff --git a/docs/report/excel/testing-gaps-excel-report-cmmi.md b/docs/report/excel/testing-gaps-excel-report-cmmi.md new file mode 100644 index 00000000000..83190ea4e3d --- /dev/null +++ b/docs/report/excel/testing-gaps-excel-report-cmmi.md @@ -0,0 +1,108 @@ +--- +title: Testing Gaps Excel Report (CMMI) | TFS +description: Use Testing Gaps report to help determine where there are deficiencies in the test plans, test configurations, and test coverage. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: e4ce9627-630f-4c11-bd23-f5348431cd86 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Testing Gaps Excel Report (CMMI) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Teams who are responsible for testing software can use the Testing Gaps report to help determine where there are deficiencies in the test plans, test configurations, and test coverage. The Testing Gaps report provides the following five reports based on test results and builds that have been defined and run for a team project. + +- **Requirement Status**: Helps the team identify gaps in test coverage for each requirement. This report requires that team members link test cases to requirements. + +- **Requirement Status by Config**: Helps the team identify gaps in test coverage for each test configuration for each requirement. This report requires that team members link test cases to requirements. + +- **Test Status by Area**: Helps the team identify gaps in test coverage of product areas. This report requires that team members assign test cases to product areas. + +- **Tests Not Executed**: Helps the team identify test cases that have never been run for each test configuration. + +- **Code Coverage**: Helps the team determine which builds and build assemblies have low or high code coverage. + + The first four reports are available only when the team creates test plans and starts to run tests by using Microsoft Test Manager. For information about how to define test suites and test plans, see [Organizing Test Cases Using Test Suites](../../manual-test/getting-started/create-test-cases.md). + +> [!NOTE] +> You can access the Testing Gaps report from the **Test Team Management** folder that is located under the **Excel Reports** folder for the team project in Team Explorer. You can access this folder only if your team project portal has been enabled and is provisioned to use SharePoint Products. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Reports + The Testing Gaps reports show the cumulative count of test results for the test plans, test configurations, and test cases that are defined for a team project. All reports are based on PivotTables that access data that is stored in the data warehouse. + +### Test Coverage of Requirements + The Requirement Status report indicates how many tests are passing or failing for each requirement. It provides a horizontal bar chart that shows the count of test results for each test case and test configuration combination that the team has defined for each requirement. The report presents the cumulative outcome of tests that were run for all test cases that are linked to requirements. The report displays results that are filtered by the following outcomes: **Passed** (green), **Failed** (red), **Never Run** (blue), or **Blocked** (yellow). + + ![Requirement Test Status Excel report](_img/procg_cmmi_testgaps.png "ProcG_CMMI_TestGaps") + + The Requirement Status by Config report presents the test results for each requirement, grouped by test configuration. + + The following table describes the report filters and fields that are used in the PivotTables that generate the reports that are focused on test coverage of requirements. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes test results that are collected for the selected team project.
      - **Test Result - Iteration Hierarchy**: Includes test results that were run from test cases that are assigned to the selected iterations.
      - **Test Result - Area Hierarchy**: Includes test results that were run from test cases that are assigned to the selected product areas.
      - **Test Plan - Test Plan Name**: Includes test results that were run from test cases that belong to the selected test plans.
      - **Work Item Linked - Work Item Linked.Work Item Type**: Includes test results that were run from test cases that are linked to the selected work item type. The report only counts test results for test cases that are linked to a requirement.

      **Filter specific to the Requirement Status by Config report**:

      - **Test Suite - Test Suite Hierarchy**: Includes test results that were run from test cases that belong to the selected test suites.|
      • **Test Result- Outcome**: The outcome of the test. The report uses this field to define the column labels and to filter the test results to include Passed, Failed, Blocked, or Never Run.
      • **(Measure) Test - Point Count Trend**: Counts the most recent version of each test result in a particular build. If a test is run multiple times against a build, the Point Count Trend counts the most recent result for that test using that build.
      • **Work Item Link- Title**: The title of the work item that is linked to the test case. In this report, the title of the requirement is listed.
      • **Field specific to the Requirement Status by Config report**:

        • **Test Configuration - Configuration Name**: The name of the test configuration to list in the report.
      | + +### Test Coverage by Product Area + The Test Status by Area report indicates how many test cases are passing or failing for a team project by product area. The following table describes the report filters and fields that are used in the PivotTables that generates the Test Status by Area report. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes test results that were collected for the selected team project.
      - **Test Result - Iteration Hierarchy**: Includes test results that were run from test cases that were assigned to the selected iterations.
      - **Test Plan - Test Plan Name**: Includes test results that were run from test cases that belong to the selected test plans.|- **Test Result- Outcome**: The outcome of the test. The report uses this field to define the column labels and to filter the test results to include Passed, Failed, Blocked, or Never Run.
      - **(Measure) Test - Point Count Trend**: Counts the most recent version of each test result in a particular build. If a test is run multiple times against a build, the Point Count Trend counts the most recent result for that test using that build.
      - **Test Result - Area Hierarchy**: The set of test results to include in the report based on the area paths that are assigned to the test cases that were run.| + +### Tests Cases That Have Never Run + The Tests Not Executed report indicates how many test cases have never run. The test cases are grouped by test configuration and test result owner. The following table describes the report filters and fields that are used in the PivotTables that generates the Test Status by Area report. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes test results that were collected for the selected team project.
      - **Test Result - Iteration Hierarchy**: Includes test results that were run from test cases that were assigned to the selected iterations.
      - **Test Result - Area Hierarchy**: Includes test results that were run from test cases that were assigned to the selected product areas.
      - **Test Plan - Test Plan Name**: Includes test results that were run from test cases that belong to the selected test plans.
      - **Test Suite - Test Suite Hierarchy**: Includes test results that were run from test cases that belong to the selected test suites.
      - **Test Result- Outcome**: Includes test results with the selected outcome. The report uses this field to filter the count of test cases to include only those with an outcome of Never Run.|- **(Measure) Test - Point Count Trend**: Counts the most recent version of each test result in a particular build. If a test case is not included in the build, it is counted as "Never Run."
      - **Test Configuration - Configuration Name**: The name of the test configuration to list in the report.
      - **Test Case- Title**: The title of the test case.
      - **Test Result - Owner**: The name of the team member who ran the test.| + +### Code Coverage + The Code Coverage report lists the lines of code that are covered, not covered, or only partially covered for each build and build assembly. You can use this report to determine which builds and assemblies have the lowest and highest code coverage. The following table describes the report filters and fields that are used in the PivotTable reports that generate the Code Coverage report. + +|Filters|Fields| +|-------------|------------| +|- **Team Project - Team Project Hierarchy**: Includes builds that were defined for the selected team project.
      - **Build - Build Definition Name**: Includes builds that were associated with the selected build definitions.|- **Build Coverage - Lines Covered**: The number of lines that were covered in the selected build.
      - **Build Coverage - Lines Not Covered**: The number of lines that were not covered in the selected build.
      - **Build Coverage - Lines Partially Covered**: The number of lines that were partially covered in the selected build.

      **Note:** If multiple runs are performed against a build, the build coverage reflects the combined coverage of the runs, taking into consideration that there might be overlap in the lines covered across the runs.

      - **Build - Build Name**: The name of the build. Each time that a build is run, it is assigned a name that contains the build definition name as its prefix.
      - **Assembly - Assembly**: The assembly name against which the coverage statistics were generated.| + +## Required Activities for Monitoring Testing Gaps + For the Testing Gaps reports to be useful and accurate, the team must perform the activities that are described in the following table: + +|Worksheet report|Required activities| +|----------------------|-------------------------| +|- Requirement Status
      - Requirement Status by Config
      - Test Status by Area
      - Tests Not Executed|- Define test cases and test plans, and assign test cases to the test plans. For more information, see [Defining a Test Plan](../../manual-test/getting-started/create-a-test-plan.md).
      - Run tests, and, for manual tests, [mark the results of each validation step in the test case as passed or failed](../../manual-test/getting-started/run-manual-tests.md).| +|- Requirement Status
      - Requirement Status by Config|- Define requirements, and link test cases to requirements. The recommended link type to use is **Tested By**.| +|- Requirement Status by Config
      - Tests Not Executed|- Define test configurations and assign to test plans or test suites. For more information, see [Test configurations: specifying test platforms](../../manual-test/test-different-configurations.md).| +|- Requirement Status
      - Requirement Status by Config
      - Test Status by Area
      - Tests Not Executed|- (Optional) To support filtering, assign **Iteration** and **Area** paths to each test case. The **Test Result - Iteration Hierarchy** and **Test Result - Area Hierarchy** fields get their values from the **Iteration** and **Area** paths that are assigned to their corresponding test cases.| +|- Requirement Status
      - Requirement Status by Config
      - Test Status by Area
      - Tests Not Executed
      - Code Coverage|- **Configure a build system**. To use Team Foundation Build, you must set up a build system.
      For more information, see [Configure Your Build System](../../build-release/overview.md).
      - **Create build definitions**. You can create several build definitions and then run each of them to produce code for a different platform. Also, you can run each build for a different configuration.
      For more information, see [Configure and manage your build system](../../build-release/overview.md).
      - **Define tests to run automatically as part of the build**. As part of the build definition, you can define tests to run as part of the build or to fail if the tests fail.
      For more information, see [Set up continuous testing for your builds](../../build-release/test/set-up-continuous-testing-builds.md).
      - **Configure tests to gather code coverage data**. For code coverage data to appear in the report, team members must instrument tests to gather that data.
      - **Run builds regularly**. You can run builds at set intervals or after every check-in. You can create regular builds when you use the schedule trigger.
      For more information, see [Build triggers](../../build-release/concepts/definitions/build/triggers.md).

      **Note:** Although a team member can manually rate a build by using Build Explorer, this rating is not reflected in the Build Quality Indicators report. The build rating appears in the Build Summary report. For more information, see [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx) and [Build Summary](../sql-reports/build-summary-report.md).| + +## Updating and Customizing the Report + You can update the Testing Gaps report by opening it in Office Excel and changing the filter options for the PivotTable report for one of the worksheets. You can customize each report to support other views, as the following table describes. + +|Worksheet|View|Action| +|---------------|----------|------------| +|- Requirement Status
      - Requirement Status by Config
      - Test Status by Area
      - Tests Not Executed|Testing gaps for an iteration|Change the filter for **Iteration** (default=All)| +|- Requirement Status
      - Requirement Status by Config
      - Test Status by Area
      - Tests Not Executed|Testing gaps for a product area|Change the filter for **Area** (default=All)| +|- Requirement Status
      - Requirement Status by Config
      - Test Status by Area
      - Tests Not Executed|Testing gaps for a specific test plan or set of test plans|Change the filter for **Test Plan** (default=All)| +|- Requirement Status by Config
      - Tests Not Executed|Testing gaps for a specific test suite|Change the filter for **Test Suite Hierarchy** (default=All)| +|- Code Coverage|Code coverage for a specific build definition or set of build definitions|Change the filter for **Build Definition Name** (default=All)| +|- Requirement Status
      - Requirement Status by Config
      - Test Status by Area
      - Tests Not Executed
      - Code Coverage|Testing gaps or code coverage that includes data from the most recent six, eight, or more weeks|In the Columns PivotTable Field List, add the **Date - Sets** field and select **@@Last 6 weeks@@** or other set| + + For more information about how to work with and customize PivotTables and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports (CMMI)](excel-reports-cmmi.md) diff --git a/docs/report/excel/user-story-progress-excel-report-agile.md b/docs/report/excel/user-story-progress-excel-report-agile.md new file mode 100644 index 00000000000..ff2da462a9c --- /dev/null +++ b/docs/report/excel/user-story-progress-excel-report-agile.md @@ -0,0 +1,64 @@ +--- +title: User Story Progress Excel Report (Agile) | TFS +description: Use the User Stories Progress report to track the rate at which the team is implementing user stories. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: bea12f89-1bfa-40db-b8c8-c44e54372538 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# User Story Progress Excel Report (Agile) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the User Stories Progress report to track the rate at which the team is implementing user stories. This report shows the distribution of active, resolved, and closed User Stories over time. For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the User Story Progress report from the Progress dashboard. You can access this dashboard only if your team project portal has been enabled and is provisioned to use Microsoft Office SharePoint Server 2007. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the Report + You can use the User Stories Progress report to understand how well the team is completing the stories that it defined for an iteration or release. This report is based on a PivotChart report that shows the last four weeks of data that was captured for User Stories and that is stored in the data warehouse. + + ![Example User Stories report](_img/procguid_excelreport.png "ProcGuid_ExcelReport") + +### Required Activities for Tracking User Stories + For the User Stories Progress report to be useful and accurate, the team must perform the following activities: + +- define user stories. + +- Update the **State** of each user story as it transitions from **Active** to **Resolved** to **Closed**. + +- (optional) Specify the **Iteration** path, **Area** path, or both of each user story if you want to filter by those fields. + +## Interpreting the Report + You should expect the User Stories Progress report to vary based on where you are in your product development cycle. Early iterations should show a gradual increase in the number of active User Stories. Iterations that are near the end of a product cycle should show a wide band of resolved and closed User Stories. + + You can review the chart to determine the team's progress over time or during an iteration. Specifically, you can determine how much progress the team is making toward resolving and closing user stories. + +## Updating and Customizing the Report + You can update the User Stories Progress report by opening the report in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views as the following table describes. + +|View|Action| +|----------|------------| +|Burndown of user stories for an iteration|Change the filter for **Iteration** (default=All)| +|Burndown of user stories for a product area|Change the filter for **Area** (default=All)| +|Burndown of user stories for the last six, eight, or more weeks|In the Columns PivotTable Field List, replace **@@Last 4 weeks@@** with a different **Set**| + + For more information about how to work with and customize PivotTable and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) \ No newline at end of file diff --git a/docs/report/excel/user-story-test-status-excel-report-agile.md b/docs/report/excel/user-story-test-status-excel-report-agile.md new file mode 100644 index 00000000000..2dec02127a6 --- /dev/null +++ b/docs/report/excel/user-story-test-status-excel-report-agile.md @@ -0,0 +1,90 @@ +--- +title: User Story Test Status Excel Report (Agile) | TFS +description: Use the User Story Test Status report to help determine gaps in test coverage and monitor test progress for each user story. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: bb10f6a4-25f0-4fcf-b0f2-789264d3ef27 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# User Story Test Status Excel Report (Agile) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the User Story Test Status report to help determine gaps in test coverage and monitor test progress for each user story. This report indicates how many test cases are passing or failing for each user story. This report is available only when the team creates test plans and starts to run tests by using Microsoft Test Manager. For information about how to define test suites and test plans, see [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + + For information about how to access this report, see [Excel reports](excel-reports.md). + +> [!NOTE] +> You can view the User Story Test Status report from the Test dashboard. You can access this dashboard only if your team project portal has been enabled and is configured to use SharePoint Server Enterprise Edition. For more information, see [Project portal dashboards](../sharepoint-dashboards/project-portal-dashboards.md). + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Read** permissions in SharePoint Products for the team project. + + To modify or customize the report, you must be a member of the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. You must also be assigned or belong to a group that has been assigned the **Members** permissions in SharePoint Products for the team project. For more information, see [Grant Access to the Databases of the Data Warehouse for Team System](../admin/grant-permissions-to-reports.md). + +## Data in the report + The User Story Test Status report provides a horizontal bar chart that shows the count of results for each test case and test configuration combination that the team has defined for each user story. The chart groups the results according to their most recent test runs, where the options are **Passed** (green), **Failed** (red), **Blocked** (purple), or **Not Run** (gray). + + ![User Story Test Status Excel Report](_img/procguid_exruserstore.png "ProcGuid_ExRUserStore") + + The report is based on a PivotChart report that shows the most recent data that is stored in the data warehouse and that is captured for the results for the test cases that are linked to specific user stories. + +### Required activities for monitoring test activity + For the User Story Test Status report to be useful and accurate, the team must perform the following activities: + +- Define test cases and user stories, and link test cases to user stories by using the **Tested By** link type. + +- Define test plans, and assign test cases to them. + +- For manual tests, mark the results of each validation step in the test case as passed or failed. + + > [!IMPORTANT] + > Testers must mark a test step with a status if it is a validation test step. The overall result for a test case reflects the status of all the test steps that the tester marked. Therefore, the test case will have a status of failed if the tester marked any test step as failed or not marked. + + For automated tests, each test case is automatically marked as passed or failed. + +- (Optional) To support filtering, assign **Iteration** and **Area** paths to each test case. + +## Interpreting the report + You should expect the User Story Test Status report to vary depending on where you are in your product development cycle. Early iterations will show few test cases that are passing. However, you should expect most test cases to pass toward the end of an iteration or product development cycle. + + You can review the report to find answers to the following questions: + +- Which user stories have a low overall count of test cases? + +- Which user stories have a high overall count of test cases that are blocked or have never been run? + +- Does the test case coverage for each user story meet expectations? + +- Which user stories have a high rate of test failures? + +- What is the average number of test cases that are defined per user story? + +- Which user stories have a high rate of test failures? + +- Is the team running test cases for each user story? + +- If test cases are blocked or not being run, does the team understand the blocking issues, and is the team addressing them? + +## Updating and customizing the report + You can update the User Story Test Status report by opening it in Office Excel and changing the filter options for the PivotTable report. You can customize this report to support other views, as the following table describes. + +|View|Action| +|----------|------------| +|User story test status for an iteration|Change the filter for **Iteration** (default=All)| +|User story test status for a product area|Change the filter for **Area** (default=All)| + + For more information about how to work with and customize PivotTables and PivotChart reports, see the following pages on the Microsoft Web site: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) + +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) + +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) + +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) + +## Related notes + [Excel reports](excel-reports.md) diff --git a/docs/report/guidance/_img/ALM_DS_Velocity_Chrt_S.png b/docs/report/guidance/_img/ALM_DS_Velocity_Chrt_S.png new file mode 100644 index 00000000000..15cf779334f Binary files /dev/null and b/docs/report/guidance/_img/ALM_DS_Velocity_Chrt_S.png differ diff --git a/docs/report/guidance/_img/ALM_VF_VelocityCountItems.png b/docs/report/guidance/_img/ALM_VF_VelocityCountItems.png new file mode 100644 index 00000000000..6a8bb638421 Binary files /dev/null and b/docs/report/guidance/_img/ALM_VF_VelocityCountItems.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-bug-burndown.png b/docs/report/guidance/_img/burndown-widget/burndownup-bug-burndown.png new file mode 100644 index 00000000000..b8c79075762 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-bug-burndown.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-dotdotdot-actions-icon.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-dotdotdot-actions-icon.png new file mode 100644 index 00000000000..a3c0ad9cb8d Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-dotdotdot-actions-icon.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-backlog.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-backlog.png new file mode 100644 index 00000000000..1432a446297 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-backlog.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-burndown-on-count.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-burndown-on-count.png new file mode 100644 index 00000000000..ae02520686f Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-burndown-on-count.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-burndown-on-field.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-burndown-on-field.png new file mode 100644 index 00000000000..237fce68513 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-burndown-on-field.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-field-criteria.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-field-criteria.png new file mode 100644 index 00000000000..63333962789 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-field-criteria.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-iterations-search.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-iterations-search.png new file mode 100644 index 00000000000..0696a37b92e Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-iterations-search.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-iterations.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-iterations.png new file mode 100644 index 00000000000..880d86ea212 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-iterations.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-multiple-field-criteria.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-multiple-field-criteria.png new file mode 100644 index 00000000000..051d7f8f153 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-multiple-field-criteria.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-multiple-teams.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-multiple-teams.png new file mode 100644 index 00000000000..4008de97fb3 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-multiple-teams.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-team.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-team.png new file mode 100644 index 00000000000..ca3d3f06eae Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-team.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-time-period-daily.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-time-period-daily.png new file mode 100644 index 00000000000..e23ba27a9f7 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-time-period-daily.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-time-period-iterations.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-time-period-iterations.png new file mode 100644 index 00000000000..f161aa68773 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-time-period-iterations.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-time-period-weekly.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-time-period-weekly.png new file mode 100644 index 00000000000..bccca41ad7e Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-time-period-weekly.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-config-select-work-item-type.png b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-work-item-type.png new file mode 100644 index 00000000000..6ed5d0aaca3 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-config-select-work-item-type.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-release-burndown-with-markup.png b/docs/report/guidance/_img/burndown-widget/burndownup-release-burndown-with-markup.png new file mode 100644 index 00000000000..102955a0dc4 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-release-burndown-with-markup.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-release-burndown.png b/docs/report/guidance/_img/burndown-widget/burndownup-release-burndown.png new file mode 100644 index 00000000000..a6884f3fbee Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-release-burndown.png differ diff --git a/docs/report/guidance/_img/burndown-widget/burndownup-stories-burnup.png b/docs/report/guidance/_img/burndown-widget/burndownup-stories-burnup.png new file mode 100644 index 00000000000..f63638a94e8 Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/burndownup-stories-burnup.png differ diff --git a/docs/report/guidance/_img/burndown-widget/image-config-dotdotdot-actions-icon.png b/docs/report/guidance/_img/burndown-widget/image-config-dotdotdot-actions-icon.png new file mode 100644 index 00000000000..a3c0ad9cb8d Binary files /dev/null and b/docs/report/guidance/_img/burndown-widget/image-config-dotdotdot-actions-icon.png differ diff --git a/docs/report/guidance/_img/cfd-bulge.png b/docs/report/guidance/_img/cfd-bulge.png new file mode 100644 index 00000000000..41d1d6d7c55 Binary files /dev/null and b/docs/report/guidance/_img/cfd-bulge.png differ diff --git a/docs/report/guidance/_img/cfd-choose-widget.png b/docs/report/guidance/_img/cfd-choose-widget.png new file mode 100644 index 00000000000..519b9542643 Binary files /dev/null and b/docs/report/guidance/_img/cfd-choose-widget.png differ diff --git a/docs/report/guidance/_img/cfd-configure-common-settings.png b/docs/report/guidance/_img/cfd-configure-common-settings.png new file mode 100644 index 00000000000..d5e392140e7 Binary files /dev/null and b/docs/report/guidance/_img/cfd-configure-common-settings.png differ diff --git a/docs/report/guidance/_img/cfd-configure.png b/docs/report/guidance/_img/cfd-configure.png new file mode 100644 index 00000000000..fd8cdd7b730 Binary files /dev/null and b/docs/report/guidance/_img/cfd-configure.png differ diff --git a/docs/report/guidance/_img/cfd-exampe-rolling-30-days.png b/docs/report/guidance/_img/cfd-exampe-rolling-30-days.png new file mode 100644 index 00000000000..f9ca85f8b47 Binary files /dev/null and b/docs/report/guidance/_img/cfd-exampe-rolling-30-days.png differ diff --git a/docs/report/guidance/_img/cfd-flatline.png b/docs/report/guidance/_img/cfd-flatline.png new file mode 100644 index 00000000000..dda9fbc88f4 Binary files /dev/null and b/docs/report/guidance/_img/cfd-flatline.png differ diff --git a/docs/report/guidance/_img/cfd-incomplete.png b/docs/report/guidance/_img/cfd-incomplete.png new file mode 100644 index 00000000000..469e33b6554 Binary files /dev/null and b/docs/report/guidance/_img/cfd-incomplete.png differ diff --git a/docs/report/guidance/_img/cfd-metrics.png b/docs/report/guidance/_img/cfd-metrics.png new file mode 100644 index 00000000000..0b3020e50cc Binary files /dev/null and b/docs/report/guidance/_img/cfd-metrics.png differ diff --git a/docs/report/guidance/_img/cfd-scope-change.png b/docs/report/guidance/_img/cfd-scope-change.png new file mode 100644 index 00000000000..a0f953a8ecb Binary files /dev/null and b/docs/report/guidance/_img/cfd-scope-change.png differ diff --git a/docs/report/guidance/_img/commerce-team-velocity-eight-iterations.png b/docs/report/guidance/_img/commerce-team-velocity-eight-iterations.png new file mode 100644 index 00000000000..f831662dd2c Binary files /dev/null and b/docs/report/guidance/_img/commerce-team-velocity-eight-iterations.png differ diff --git a/docs/report/guidance/_img/cycle-lead-time-concept-intro.png b/docs/report/guidance/_img/cycle-lead-time-concept-intro.png new file mode 100644 index 00000000000..cf902d4bc3a Binary files /dev/null and b/docs/report/guidance/_img/cycle-lead-time-concept-intro.png differ diff --git a/docs/report/guidance/_img/cycle-lead-time-configure-dialog.png b/docs/report/guidance/_img/cycle-lead-time-configure-dialog.png new file mode 100644 index 00000000000..a92309dadb0 Binary files /dev/null and b/docs/report/guidance/_img/cycle-lead-time-configure-dialog.png differ diff --git a/docs/report/guidance/_img/cycle-lead-time-lt-sample-chart.png b/docs/report/guidance/_img/cycle-lead-time-lt-sample-chart.png new file mode 100644 index 00000000000..c4426aee7db Binary files /dev/null and b/docs/report/guidance/_img/cycle-lead-time-lt-sample-chart.png differ diff --git a/docs/report/guidance/_img/cycle-time-outliers.png b/docs/report/guidance/_img/cycle-time-outliers.png new file mode 100644 index 00000000000..afe1263b743 Binary files /dev/null and b/docs/report/guidance/_img/cycle-time-outliers.png differ diff --git a/docs/report/guidance/_img/cycle-time-planning.png b/docs/report/guidance/_img/cycle-time-planning.png new file mode 100644 index 00000000000..41a28743c67 Binary files /dev/null and b/docs/report/guidance/_img/cycle-time-planning.png differ diff --git a/docs/report/guidance/_img/lead-time-control-chart.png b/docs/report/guidance/_img/lead-time-control-chart.png new file mode 100644 index 00000000000..045b7f6faf9 Binary files /dev/null and b/docs/report/guidance/_img/lead-time-control-chart.png differ diff --git a/docs/report/guidance/_img/procguid_workbookissues.png b/docs/report/guidance/_img/procguid_workbookissues.png new file mode 100644 index 00000000000..7937ae0c006 Binary files /dev/null and b/docs/report/guidance/_img/procguid_workbookissues.png differ diff --git a/docs/report/guidance/_img/procguid_workbooktriage.png b/docs/report/guidance/_img/procguid_workbooktriage.png new file mode 100644 index 00000000000..7861c00e661 Binary files /dev/null and b/docs/report/guidance/_img/procguid_workbooktriage.png differ diff --git a/docs/report/guidance/_img/team-velocity-chart-web-7-iterations.png b/docs/report/guidance/_img/team-velocity-chart-web-7-iterations.png new file mode 100644 index 00000000000..a898f274cd5 Binary files /dev/null and b/docs/report/guidance/_img/team-velocity-chart-web-7-iterations.png differ diff --git a/docs/report/guidance/_img/team-velocity-config-dialog.bmp b/docs/report/guidance/_img/team-velocity-config-dialog.bmp new file mode 100644 index 00000000000..d75ff67a902 Binary files /dev/null and b/docs/report/guidance/_img/team-velocity-config-dialog.bmp differ diff --git a/docs/report/guidance/_img/team-velocity-config-dialog.png b/docs/report/guidance/_img/team-velocity-config-dialog.png new file mode 100644 index 00000000000..e9344eb61ba Binary files /dev/null and b/docs/report/guidance/_img/team-velocity-config-dialog.png differ diff --git a/docs/report/guidance/_img/team-velocity-six-iterations.bmp b/docs/report/guidance/_img/team-velocity-six-iterations.bmp new file mode 100644 index 00000000000..57a609b8605 Binary files /dev/null and b/docs/report/guidance/_img/team-velocity-six-iterations.bmp differ diff --git a/docs/report/guidance/_img/team-velocity-six-iterations.png b/docs/report/guidance/_img/team-velocity-six-iterations.png new file mode 100644 index 00000000000..5c6554ffd16 Binary files /dev/null and b/docs/report/guidance/_img/team-velocity-six-iterations.png differ diff --git a/docs/report/guidance/_img/velocity-chart.png b/docs/report/guidance/_img/velocity-chart.png new file mode 100644 index 00000000000..b82f3aafad8 Binary files /dev/null and b/docs/report/guidance/_img/velocity-chart.png differ diff --git a/docs/report/guidance/_img/velocity-forecast-open-chart.png b/docs/report/guidance/_img/velocity-forecast-open-chart.png new file mode 100644 index 00000000000..18f42bab8e2 Binary files /dev/null and b/docs/report/guidance/_img/velocity-forecast-open-chart.png differ diff --git a/docs/report/guidance/burndown-guidance.md b/docs/report/guidance/burndown-guidance.md new file mode 100644 index 00000000000..598df680948 --- /dev/null +++ b/docs/report/guidance/burndown-guidance.md @@ -0,0 +1,85 @@ +--- +title: Burndown guidance| Team Services & TFS +description: Review Scrum progress during and at the end of a sprint when working in Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-agile-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + + +# Burndown guidance + +[!INCLUDE [temp](../_shared/vsts-tfs-header-17-15.md)] + +Review your sprint burndown chart throughout your sprint cycle to check for these indicators: + +> [!div class="checklist"] +> * Is remaining work getting updated regularly? Flat spaces within the blue area indicate a lack of updates. +> * Is remaining work increasing instead of decreasing? Increases can indicate unestimated or unplanned work. Both signal a need for the team to discuss how they'll complete the sprint tasks on time. +> * Based on the actual burn rate, does the team feel confident that they'll complete the work by the end of the sprint? + + +To configure or view sprint burndown charts, see [Sprint burndown](../../work/scrum/sprint-burndown.md). + + + +## Scope management +By estimating remaining work of tasks for each product backlog item, teams have a good understanding of what they can accomplish within a sprint. Because the sprint tasks represent the overall sprint scope, the sprint scope is well defined. Anything that is not represented by a task in the sprint should be considered out of scope for the sprint. + +As the team makes progress, divergences from the ideal trend line help the team monitor divergences from scope. + + + + + +
      +

      Increases instead of decreases within the blue graph may indicate:

      +
        +
      • Poor estimates made to tasks
      • +
      • Discovery of new work not accounted for in sprint planning
      • +
      • Scope creep, additional work not agreed to by the team.
      • +
      +

      Whatever the cause, teams should come together quickly to determine how to remedy the increased workload.

      + +

      Solutions may include reassigning tasks or recruiting additional resources. The team should move all non-essential sprint work to the backlog and consider it during the next sprint planning meeting.

      +
      +![Sprint burndown chart: Increasing remaining work can indicate scope creep](../../work/scrum/_img/ALM_SB_ScopeCreep_75.png) + +
      + + + +## Mitigate risk through daily inspection +Your burn-down chart shows you if your project is on schedule. A daily check can mitigate risks and provide early warning of potential schedule or cost overruns, two metrics associated with traditional project management. + + + + + + +
      +

      For example, when the actual remaining work (blue area) goes flat for a period of time, or remains high above the ideal trend line, the team is at risk of not meeting their sprint commitments.

      +

      Teams should meet immediately to course correct and either reassign work, recruit more resources, or reset expectations.

      +
      +![Sprint burndown chart: Actual remaining work high above ideal trend line](../../work/scrum/_img/ALM_SB_RiskMitigation.png) +
      + + +##Try this next +In addition to the sprint burndown chart, teams can review the velocity at which they work sprint over sprint. The velocity chart tracks how many backlog items your team works on in a sprint. + +You can use your team [velocity](team-velocity.md) as input into the [forecast](../../work/scrum/forecast.md) tool to help plan your sprints. + + + +### Industry resources: +* [Understanding the Scrum Burndown Chart](http://www.methodsandtools.com/archive/scrumburndown.php) +* [Task sizing in Agile software development](http://www.solutionsiq.com/task-sizing-in-agile-software-development/) + + diff --git a/docs/report/guidance/configure-burndown-burnup-widgets.md b/docs/report/guidance/configure-burndown-burnup-widgets.md new file mode 100644 index 00000000000..315c572f1a7 --- /dev/null +++ b/docs/report/guidance/configure-burndown-burnup-widgets.md @@ -0,0 +1,236 @@ +--- +title: Configure Bundown/Burnup widgets | Team Services & TFS +description: Configure a Burndown or Burnup widget that you add to a dashboard to track progress across one or more teams +ms.technology: vs-devops-agile-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + + +# Configure a Burndown or Burnup widget + +**VSTS** + +The Burndown and Burnup widgets provide the flexibility to create burndown or burnup charts for any type of scope, worked on by any number of teams, within any defined period of time. Burndown charts focus on remaining work within a specific time period, while Burnup charts focus on completed work. + + + +> [!NOTE] +> **Feature availability:** The Burndown and Burnup widgets are available only for VSTS at this time. For on-premises TFS, you can add the [Sprint Burndown widget](../widget-catalog.md#sprint-burndown-widget) to your dashboard. + +Both burndown and burnup charts help answer the question: **Are we on track to complete this set of work by the end date?** + +Use this topic to learn how to: + +> [!div class="checklist"] +> * Install and configure the burndown or burnup widgets +> * How burndown metrics should be used +> * How to work with the burndown chart + +A burndown chart is a useful tool to track completion of a predefined scope of work over a predefined period of time. For example, a sprint burndown tracks the sprint backlog completion by end of the sprint. A release burndown tracks the release backlog completion by the end of the release. A bug burndown chart can also be used to track completion of a set of bugs by a certain date. + +**Burndown widget configured to display a Release Burndown** +![Burndown Widget - Release Burndown Example](./_img/burndown-widget/burndownup-release-burndown.png) + +**Burndown widget configured to display a Bug Burndown** +![Burndown Widget - Release Burndown Example](./_img/burndown-widget/burndownup-bug-burndown.png) + + +## Burndown and burnup metrics + +Burndown and burnup charts provide an easy way to monitor progress across teams and sprints by showing work remaining over time. Work remaining is the vertical axis and time is the horizontal axis. You can define remaining work to be calculated as a sum of a particular field, such as Story Points, or count of a particular work item type. + +In addition, each chart calculates and displays the average burndown or burnup rate and added scope over the course of the project. The Burndown chart calculates a projected completion date for when the work is expected to be done based on historical burndown and scope increase trends. Using burndown, teams can stay on top of their progress and see the immediate impact of their work on their delivery date. + +To help you answer the question: *Are we on track to complete this set of work by the end date?*, the widgets provide these useful metrics: +* Percentage work complete +* Average burndown rate +* Total scope increase +* Number of work items not estimated with Story Points (or whichever field you are burning down on) +* Projected burndown trend, based on historical burndown rate +* Projected scope increase trend, based on historical scope increase rate +* Projected completion date, based on historical burndown and scope increase rates + + + + + +## Add the widget to your dashboard + +The Configuration dialog for the Burndown and Burnup widgets is the same. You configure these widgets for one or more teams. To learn more about teams, see [Add teams and team members](../../work/scale/multiple-teams.md). + +1. If you haven't yet added the [Analytics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics), do that now. +1. If you haven't yet [added the Burndown widget to your dashboard](../add-widget-to-dashboard.md), do that now. +1. Click the ![dotdotdot actions](./_img/burndown-widget/image-config-dotdotdot-actions-icon.png) actions icon and choose the Configure option to open the configuration dialog. + +> [!NOTE] +> While the Burndown and Burnup widgets use the Analytics service, access to the service for other report purposes is not supported at this time. + +## Choose the teams and work items to chart + +1. Modify the **Title** of the widget and select your preferred **Size**. The Burndown widget can scale up to 10x10. +1. Select the **Teams** you want to track. + Select at least one **Project** and one **Team**. + ![Burndown Widget - Configuration - Select team](./_img/burndown-widget/burndownup-config-select-team.png) + If you wish to track progress across teams, just add more teams using the team selector. You may also select teams from other team projects. + ![Burndown Widget - Configuration - Select multple teams](./_img/burndown-widget/burndownup-config-select-multiple-teams.png) + The Burndown chart will display the burndown of remaining work for all selected teams. + + > [!NOTE] + > While you can select teams from other team projects, all of the available configuration options—**Work items**, **Field criteria**, and **Burndown on** will show selections from your **current team project**. + > The list of selectable backlogs, work item types, and fields are based on your current team project. + > + > For example, if you select a work item type that doesn't exist in another team project, the burndown will not include work items from that team project. If you select a field that doesn't exist in another team project, that field will be considered blank for the burndown. + > Therefore, a burndown created across multiple team projects will only work if the [Process](../..//work/guidance/choose-process.md) for those projects are the same, or at least very similar. + +1. Choose your work items. The burndown can include work based on items in your **Backlog** or by **Work item type**. + You can select a **Backlog**, which include all the work items in that backlog. + If you select the Stories backlog you are presented with an additional option: **Include bugs on the Stories backlog**. Place a checkmark in the box to include bugs along with user stories in your burndown. + + This option is presented for the PBI Backlog for Scrum projects, and the Requirements backlog for CMMI projects. + ![Burndown Widget - Configuration - Select work item types](./_img/burndown-widget/burndownup-config-select-backlog.png) + + You can also select **Work item type** to burndown on a specific work item type. In the list, you will find all the project's work item types including [custom work item types](../../work/process/customize-process-wit.md). + ![Burndown Widget - Configuration - Select work item types](./_img/burndown-widget/burndownup-config-select-work-item-type.png) + +1. (Optional) Select field criteria to limit the work items that appear in the chart. + You can filter by any field available in your team project, even a specific tag. For example, you can narrow your burndown to top priority items by adding a filter **Priority <= 2**. + ![Burndown Widget - Configuration - Select field criteria](./_img/burndown-widget/burndownup-config-select-field-criteria.png) + You may add multiple field critiera, by selecting **Add criteria**. For example, you can also select a custom field such as Release, to create a burndown chart of only those items assigned to a specific release. + ![Burndown Widget - Configuration - Select field criteria](./_img/burndown-widget/burndownup-config-select-multiple-field-criteria.png) + + > [!NOTE] + > All field criteria are AND-ed together. That is, work items must match all the field criteria to be included in the burndown or burnup chart. + + +## Choose how you want to calculate burndown or burnup + +1. Select how you want to calculate burndown or burnup, by a count of work items or a sum based on a selected field. + Here, we choose to base the burndown on a count of work items. + ![Burndown Widget - Configuration - Select burndown on count](./_img/burndown-widget/burndownup-config-select-burndown-on-count.png) + And, here we choose a sum based on Story Points. + ![Burndown Widget - Configuration - Select burndown on field](./_img/burndown-widget/burndownup-config-select-burndown-on-field.png) + + + +## Choose the time period and plotting interval + +1. Select the time period. You can select from one of the following options to define your time period: + + | Option | Purpose for burndown | + | --- | --- | + | **Start Date** | Determines the original scope baseline. The chart burns down from the original scope. **% Complete** and **Total Scope Increase** are calculated based on your original scope. + | **End Date** | Specifies the target date of completion. Your goal is to burndown the original scope of work by the **End Date**. + | **Plotting Interval** | Here you select the intervals to plot between the **Start Date** and **End Date**. Average Burndown is based on the selected interval. You can plot burndown based on daily/weekly/monthly intervals or based on an iteration schedule. + + ### Plot based on an iteration schedule + + After selecting the **Start Date**, set **Plot burndown by** to **Iteration**. You can select iterations from your current team project. + ![Burndown Widget - Configuration - select time period iterations](./_img/burndown-widget/burndownup-config-select-iterations.png) + + Add multiple iterations by selecting **Add iterations**. + + ![Burndown Widget - Configuration - Select iterations](./_img/burndown-widget/burndownup-config-select-iterations-search.png) + + The iteration selection box support search, so you can simply type a partial name of an iteration and it will find the closest match. + ![Burndown Widget - Configuration - Select iterations search](./_img/burndown-widget/burndownup-config-select-iterations-search.png) + + The selectable iterations are based on the **current team project**, even if you selected teams from other team projects. Since the burndown chart plots remaining work based on the end date of the iteration, it calculates remaining work across all teams/team projects, based on that iteration end date. For example, if an iteration ends on 11/10/2017, the burndown chart calculates remaining work as of 11/10/2017, counting or summing all work items for every team/team project. Therefore, a cross-project burndown will work when plotting by iterations, as long as you are OK with having all the teams reporting on the same iteration schedule. + + The burndown chart uses the end date of each iteration to plot the remaining work for that iteration. + + > [!NOTE] + > The Average Burndown assumes that every iteration is the same length. It does not account for iterations that are different lengths. Additionally, it assumes that the interval between the **Start Date** and the first iteration is a full iteration, even if the length of time between **Start Date** and the first iteration's end date does not match your typical length of iteration. For best restuls, enter a **Start Date** that is the same as the first iteration's start date. + + If you select to plot based on an iteration schedule, you will not be able to select **End Date**. The burndown assumes the **End Date** is the last iteration's end date. + + ### Plot based on a daily, weekly, or monthly interval + After selecting the **Start Date**, set **Plot burndown by** to **Date**. Specify the **End Date** for your burndown. + You can set **Plot interval** to Days, Weeks, or Months. + ![Burndown Widget - Configuration - select time period daily](./_img/burndown-widget/burndownup-config-select-time-period-daily.png) + + If you select **Weeks**, then you'll be able to select the **Last day of week**. The remaining work for each interval will be calculated based on that day. + ![Burndown Widget - Configuration - select time period daily](./_img/burndown-widget/burndownup-config-select-time-period-weekly.png) + + If you select **Months**, then burndown will be caluclated based the last day of each month. + + > [!NOTE] + > The **Average Burndown** assumes that every interval is the same length. It does not account for months that are different lengths. Additionally, it assumes that the interval between the **Start Date** and the first month is a full month, even if the length of time between **Start Date** and the first months's end date does not match your typical length of a month. For example, a **Start Date** of 11/15/2017, would plot the first month as 10/31/2017, but would be counted as a full month for your **Average Burndown**. For best results, enter a **Start Date** that is the same as the first months's start date. **This is also true when plotting by weekly itervals.** + +## Choose additional options + +Check the boxes of the following options that you want to add to your chart. +* **Show burndown trendline**: Displays both the historical and projected future burndown trend +* **Show total scope treadnline**: Displays both the historical and projected scope increase trend +* **Show completed work**: In addition to remaining work, it also displays completed work as as stack bar +* **Plot remaining using work item type color**: Displays remaining work based on the work item type color, rather than the default blue color. If multiple work items are included, then it stacks colors by work item type. + +## Interpret a Burndown or Burnup widget chart + +Looking at the burndown chart, a team can not only get immediate insight as to their progress, but also learn about their rhythm and behavior. Most burndown trendlines are not straight lines. The team never moves at exactly one fixed velocity and scope might be added on the way. For example, if your projected completion date as moved, you may want to ask +* Are we adding too much scope? +* Is the average burnrate changing, and if so, why? + +The burndown chart also helps the teams understand if the release is at risk. If the projected end date exceeds the release target date, you may need to reduce scope or lengthen your project. Burndown can also indicate that progress is greater than anticipated, providing the uncommon, but wonderful option of adding scope. + +As the following diagram shows, charts based on the Burndown and Burnup widgets provide a number of calculated elements. + +![Burndown Widget - Release Burndown Example](./_img/burndown-widget/burndownup-release-burndown-with-markup.png) + + +| Element | Description| +|---------|------------| +|**Date range**|The start and end date of the burndown. When burndown is plotted by iterations the end date is the end of the last iteration | +|**Main metric**|Current remaining work based on the selected burndown method.| +|**% Completed**|The percentage of work completed based on original scope. You may click or press **% Completed** to see the full list of completed work items.| +|**Average burndown**|Average work completed per interval or iteration.| +|**Items not estimated**|Shows only when burning down on a Sum of a field. It represents the current number of items that do not have a value in the selected **Burndown on** field. You may click or press the number to see a full list of work items without estimates.| +|**Total Scope Increase** |show how much work was added to the original scope since the burndown started.| +|**Projected completion** |Calculates the projected completion date based on the remaining work and historical burndown and scope increase rates. If the projected completion date is before the specified **End Date**, it will draw a vertical line on the interval/interation when the work should be complete. If the projected completion date is after the specified **End Date**, then it will display the projected completion date and how many additional intervals/iterations are needed to complete the work.| +|**Original Scope** |Original scope is all remaining work as of the specified **Start Date**. The chart burns down from the original scope. **% Complete** and **Total Scope Increase** are calculated based on your original scope.| +|**Total Scope trendline** |Represents to the total scope of the burndown, including both completed and remaining work. A total scope trendline tells you how much scope creep your project has. For past data points, the plotted total scope represents actual total scope as of the end of each interval/iteration. For future data points, the plotted total scope represents a projected future trend, based on scope changes.| +|**Burndown trendline**|Represents the burndown. A burndown trendline tells you how fast you are burning down the work. For past data points, the plotted burndown represents actual burndown as of the end of each interval/iteration. For future data points, the plotted burndown represents a projected future trend, based on past burndown. | + + +## Configure the Burnup widget + +Configuring the Burnup widget is exactly like configuring the Burnup widget, except that it plots work completed, rather than work remaining. + +**Burnup Widget displaying a Stories Burnup** +![Burnup Widget - Stories Burnup Example](./_img/burndown-widget/burndownup-stories-burnup.png) + + + +## Related notes + +* [Define sprints for the team project](../../work/customize/set-iteration-paths-sprints.md) +* [Select sprints for a team](../../work/scale/set-team-defaults.md) +* [Add a custom field to a work item type](../../work/process/customize-process-field.md) + +####Industry resources + +* [Managing Myopia with Release Burndowns](https://www.scrumalliance.org/community/articles/2010/may/managing-myopia-with-release-burndowns) + + + + + + + + + + + + diff --git a/docs/report/guidance/cumulative-flow-cycle-lead-time-guidance.md b/docs/report/guidance/cumulative-flow-cycle-lead-time-guidance.md new file mode 100644 index 00000000000..e78f2c5c45d --- /dev/null +++ b/docs/report/guidance/cumulative-flow-cycle-lead-time-guidance.md @@ -0,0 +1,244 @@ +--- +title: Cumulative flow guidance | VSTS & TFS +description: Process guidance to work with cumulative flow diagrams to improve your +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 8/22/2017 +--- + +# Cumulative flow, lead time, and cycle time guidance + +[!INCLUDE [temp](../_shared/vsts-tfs-header-17-15.md)] + +You use cumulative flow diagrams (CFD) to monitor the flow of work through a system. The two primary metrics to track, cycle time and lead time, can be extracted from the chart. Or, you can add the [Lead time and cycle time control charts](cycle-time-and-lead-time.md) to your dashboards (VSTS only at this time). + +To configure or view CFD charts, see [Configure a cumulative flow chart](cumulative-flow.md). + + +## Sample charts and primary metrics + + + + + + + + + + + + + + + +
      + +

      The Continuous flow CFD provides the chart most favored by teams that follow a lean process.

      +

      However, many teams have begun combining lean practices with Scrum or other methodologies which means they practice lean within the span of an iteration or sprint. In this situation the diagram takes on a slightly different look and provides two additional, and very valuable, pieces of information as shown in the next chart.

      + + +
      **Continuous flow CFD** +![CFD metrics](_img/cfd-metrics.png) +
      +

      The Fixed period CFD shown here is for a completed sprint.

      +

      The top line represents the scope set for the sprint. And, because the work must be completed by the last day of the sprint, the slope of the Closed state indicates whether or not a team is on track to complete the sprint. The easiest way to think of this view is as a burnup chart.

      +

      The data is always depicted with the first step in the process as the upper left and the last step in the process as the bottom right.

      + +
      **Fixed period CFD for a completed sprint** + +![CFD metrics](_img/cfd-scope-change.png) + +
      + +## Chart metrics +CFD charts display the count of work items grouped by state/Kanban column over time. The two primary metrics to track, cycle time and lead time, can be extracted from the chart. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      MetricDefinition
      Cycle Time 1Measures the time it takes to move work through a single process or workflow state, calculated by the start of the given process to the start of the subsequent process. + +
      Lead Time 1*For a continuous flow process:* measures the amount of time it takes from when a request is made (such as adding a proposed user story) until that request is completed (closed). +
      +*For a sprint or fixed period process:* measures the time from when work on a request begins until the work is completed (i.e. the time from Active to Closed). + + +
      Work in ProgressMeasures the amount of work or number of work items that are actively being worked.
      ScopeRepresents the amount of work committed for the given period of time. Only applies to fixed period processes.
      + +**Note**: + +1. The CFD widget (Analytics Service) and built-in CFD chart (work tracking data store) do not provide discrete numbers on Lead Time and Cycle Time. However, the [Lead Time and Cycle Time widgets](cycle-time-and-lead-time.md) do provide these numbers. + +There is a very tight, well defined correlation between Lead Time/Cycle Time and Work in Progress (WIP). The more work in progress, the longer the cycle time which leads to longer lead times. The opposite is also true—the less work in progress, the shorter the cycle and lead time is because the development team can focus on fewer items. This is a key reason why you can and should set [Work In Progress limits on the Kanban board](../../work/kanban/wip-limits.md). + +The count of work items indicates the total amount of work on a given day. In a fixed period CFD, a change in this count indicates scope change for a given period. In a continuous flow CFD, it indicates the total amount of work in the queue and completed for a given day. + +Decomposing this work into specific Kanban board columns provides a view into where work is in the process. This provides insights on where work is moving smoothly, where there are blockages and where no work is being done at all. It's difficult to decipher a tabular view of the data, however, the visual CFD chart provides clear evidence that something is happening in a given way. + +## Identify issues, take appropriate actions + +The CFD answers several specific questions and based on the answer, actions can be taken to adjust the process to move work through the system. Let's look at each of those questions here. + +### Will the team complete work on time? + +This question applies to fixed period CFDs only. You gain an understanding of this by looking at the curve (or progression) of work in the last column of the Kanban board. + +![Sample CFD with a half completed chart, dotted lines show the work won't be completed](_img/cfd-incomplete.png) + +In this scenario it may be appropriate to reduce the scope of work in the iteration if it's clear that work, at a steady pace, is not being completed quickly enough. It may indicate the work was under estimated and should be factored into the next sprints planning. + +There may however be other reasons which can be determined by looking at other data on the chart. + +### How is the flow of work progressing? + +Is the team completing work at a steady pace? One way to tell this is to look at the spacing between the different columns on the chart. Are they of a similar or uniform distance from each other from beginning to end? Does a column appear to flat-line over a period of multiple days? Or, does it seem to "bulge"? + +Two problems show up visually as flat lines and as bulges. + + + + + + + + + + + + + + + +
      + +

      Flat lines appear when the team doesn't update their work with a regular cadence. The [Kanban board](../../work/kanban/kanban-basics.md) provides the quickest way to transition work from one column to another.

      +

      Flat lines can also appear when the work across one or more processes takes longer than planned for. For this to occur, flat lines must appear across many parts of the system because if only one part of the system or two parts of a system have problems then you'll see a bulge.

      +
      **Flat lines** +![CFD metrics](_img/cfd-flatline.png) +
      +

      Bulges occur when work builds up in one part of the system and it isn't moving through a process.

      +

      An example of this may be that testing is taking a long period of time but development is taking a short period of time therefore work is accumulating in the development state (bulges indicate that a succeeding step is having a problem, not necessarily the step in which the bulge is occurring).

      + + +
      **Bulges** + +![CFD metrics](_img/cfd-bulge.png) + +
      + + +Mura, the lean term for flat lines and bulges, means unevenness and indicates a form of waste (Muda) in the system. Any unevenness in the system will cause bulges to appear in the CFD. + +Monitoring the CFD for flat lines and bulges supports a key part of the Theory of Constraints project management process. Protecting the slowest area of the system is referred to as the drum-buffer-rope process and is part of how work is planned. + + + +**How do you fix flow problems?** + +You can solve the problem of lack of timely updates through daily stand-ups, other regular meetings, or scheduling a daily team reminder email. + +Systemic flat-line problems indicate a more challenging problem (although you should rarely if ever see this). This problem means that work across the system has stopped. This may be the result of process-wide blockages, processes taking a very long time, or work shifting to other opportunities that aren't captured on the board. + +One example of systemic flat-line can occur with a features CFD. Feature work can take much longer than work on user stories because features are composed of several stories. In these situations, either the slope is expected (as in the example above) or the issue is well known and already being raised by the team as an issue, in which case, problem resolution is outside the scope of this topic to provide guidance. + +Teams can proactively fix problems that appear as CFD bulges. Depending on where the bulge occurs, the fix may be different. As an example, let's suppose that the bulge occurs in the development process because running tests is taking much longer than writing code, or testers are finding may be finding a large number of bugs and continually transition the work back to the developers so the developers have a growing list of active work. + +Two potentially easy ways to solve this problem are: 1) Shift developers from the development process to the testing process until the bulge is eliminated or 2) change the order of work such that work that can be done quickly is interwoven with work that takes longer to do. Look for simple solutions to eliminate the bulges. + +>[!NOTE] +>Because many different scenarios can occur which cause work to proceed unevenly, it's critical that you perform an actual analysis of the problem. The CFD will tell you that there is a problem and approximately where it is but you must investigate to get to the root cause(s). The guidance provided here indicate recommended actions which solve specific problems but which may not apply to your situation. + +### Did the scope change? + +Scope changes apply to fixed period CFDs only. The top line of the chart indicates the scope of work because a sprint is pre-loaded with the work to do on the first day, this becomes a set level of work. Changes to this top line indicate worked was added or removed. + +The one scenario where you can't track scope changes with a CFD occurs when the same number of works are added as removed on the same day. The line would continue to be flat. This is the primary reason why several charts should be used in conjunction with one another to monitor for specific issues. For example, the [sprint burndown chart](../../work/scrum/sprint-burndown.md) can also show scope changes. + + +### Too much work in progress? + +You can easily monitor [whether WIP limits have been exceed from the Kanban board](../../work/kanban/wip-limits.md). However, you can also see monitor it from the CFD. + +Not so oddly, a large amount of work in progress usually shows up as a vertical bulge. The longer there is a large amount of work in progress, the bulge will expand to become an oval which will indicate that the work in progress is negatively affecting the cycle and lead time. + +A good rule of thumb for work in progress is that there should be no more than two items in progress per team member at any given time. The main reason for two items versus stricter limits is because reality frequently intrudes on any software development process. + +Sometimes it takes time to get information from a stakeholder, or it takes more time to acquire necessary software. There are any number of reasons why work might be halted so having a secondary item to switch to provides a little bit of leeway. If both items are blocked, it's time to raise a red flag to get something unblocked—not just switch to yet another item. As soon as there are a large number of items in progress, the person working on those items will have difficulty context switching, are more likely to forget what they were doing, and likely incur mistakes. + + + +## Lead time versus cycle time + +The diagram below illustrates how lead time differs from cycle time. Lead time is calculated from work item creation to entering a Completed state. Cycle time is calculated from first entering an In Progress state to entering a Completed state. + +#### Illustration of lead time versus cycle time +Conceptual image of how cycle time and lead time are measured + +If a work item enters a Completed state and then is reactivated and moved out of that state, then any additional time it spends in a Proposed/In Progress state will contribute to its lead/cycle time when it enters a Completed state for the second time. + +If your team uses the Kanban board, you’ll want to understand how your Kanban columns map to workflow states. For more information on configuring your Kanban board, see [Add columns](../../work/kanban/add-columns.md). + +To learn more about how the system uses the state categories—Proposed, In Progress, and Completed—see [Workflow states and state categories](../../work/concepts/workflow-and-state-categories.md). + +## Plan using estimate delivery times based on lead/cycle times +You can use the average lead/cycle times and standard deviations to estimate delivery times. + +When you create a work item, you can use your team’s average lead time to estimate when your team will complete that work item. Your team’s standard deviation tells you the variability of the estimate. Likewise, you can use cycle time and its standard deviation to estimate the completion of a work item once work has begun. + +In the following chart, the average cycle time is 8 days. The standard deviation is +/- 6 days. Using this data, we can estimate that the team will complete future user stories about 2-14 days after they begin work. The narrower the standard deviation, the more predictable your estimates. + +#### Example Cycle Time widget + +Cycle Time widget + + +## Identify process issues +Review your team’s control chart for outliers. Outliers often represent an underlying process issue. For example, waiting too long to complete pull request reviews or not resolving an external dependency in a timely manner. + +As you can see in the following chart, which shows several outliers, several bugs took significantly longer to complete than the team's average. Investigating why these bugs took longer may help uncover process issues. Addressing the process issues can help reduce your team's standard deviation and improve your team's predictability. + +#### Example Cycle Time widget showing several outliers +Cycle Time widget showing several outliners + +You can also see how process changes affect your lead and cycle time. For example, on May 15th the team made a concerted effort to limit the work in progress and address stale bugs. You can see that the standard deviation narrows after that date, showing improved predictability. + + +## Try this next + +> [!div class="nextstepaction"] +> [Configure your cumulative flow charts](cumulative-flow.md) +> [Configure a lead time or cycle time chart](cycle-time-and-lead-time.md) \ No newline at end of file diff --git a/docs/report/guidance/cumulative-flow.md b/docs/report/guidance/cumulative-flow.md new file mode 100644 index 00000000000..1f0f660dff3 --- /dev/null +++ b/docs/report/guidance/cumulative-flow.md @@ -0,0 +1,112 @@ +--- +title: Cumulative flow charts | VSTS & TFS +description: Configure and view cumulative flow diagrams to improve your Kanban processes +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 9A16EDA7-6249-49E1-84A3-FE7550028E9F +ms.manager: douge +ms.author: kaelli +ms.date: 8/22/2017 +ms.topic: get-started-article +--- + +# Configure a cumulative flow chart + +[!INCLUDE [temp](../_shared/vsts-tfs-header-17-15.md)] + +You use cumulative flow diagrams (CFD) to monitor the flow of work through a system. There are two CFD charts, the one viewed from the Kanban board and the one you access by adding the CFD widget to your dashboard. + +>[!NOTE] +>Feature availability: The CFD widget is available only for VSTS at this time. + +The CFD widget provides more configuration options than those supported by the default CFD charts shown on the backlog and board pages. With the CFD widget, you can monitor the count of work items as they progressively move through various states which you define. You can configure the CFD chart to monitor the flow of epics, features, user stories, product backlog items, or requirements, depending on the process ([Agile](../../work/guidance/agile-process.md), [Scrum](../../work/guidance/scrum-process.md), or ([CMMI](../../work/guidance/cmmi-process.md)) you've selected. + +Use this topic to learn how to: + +> [!div class="checklist"] +> * Install and configure the Cumulative Flow widget (Analytics service) +> * View and configure the built-in Cumulative Flow chart (work tracking datastore) + +For usage guidance, see [Cumulative flow, lead time, and cycle time guidance](cumulative-flow-cycle-lead-time-guidance.md). + + + + + +## Configure the CFD widget + +>[!NOTE] +>Feature availability: For VSTS, you can add the [CFD widget](../widget-catalog.md#cycle-time-widget) to your dashboard. You need to first install the [Analyics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics). You can then [add the widget(s) to your dashboard](../add-widget-to-dashboard.md). You must be an account owner or a member of the [Project Collection Administrator group](../../tfs-server/add-administrator-tfs.md) to add extensions. + +You will need to be a team administrator or a member of the Project Administrators group to perform these tasks. See +[Manage team assets](../../work/scale/add-team-administrator.md)to get added as a team admin. + +1. If you haven't yet configured your Kanban board, do that now. Define the [columns](../../work/kanban/add-columns.md) and [swimlanes](../../work/kanban/expedite-work.md) that support your workflow processes. + +2. If you want fixed scope CFD charts, make sure that you've [defined the sprint iterations](../../work/scrum/define-sprints.md) for those sprints of interest. + +3. To add a CFD chart to your team dashboard, see [Add a widget to a dashboard](../add-widget-to-dashboard.md). Add the Cumulative Flow Diagram widget. + + ![Cumulative flow diagram widget](_img/cfd-choose-widget.png) + +4. Click the ![Actions icon](../_img/icons/actions-icon.png) actions icon and choose the Configure option to open the configuration dialog. Modify the title, and then select the team, backlog level, swimlanes, and time period you want to monitor. + + Configure CFD chart + +5. For a continuous flow diagram, select Rolling period and specify the number of days you want to view on the chart. + + Or, for a fixed scope view, choose and specify the Start date. Choose this view if your team employs a Scrumban process or follows a standard sprint process. + + The main difference between these two types of CFD charts is that the fixed scope CFD will provide information (in most cases) of scope change. + +6. Choose the color. You can distinguish the CFD for different teams by choosing different colors. + +7. Click Save when done. The following image shows an example CFD chart showing 30 days of data. + + Example CFD chart, rolling 30 days + + + +## View the built-in cumulative flow chart + +You open the built-in (work tracking datastore) cumulative flow chart for your backlog or portfolio backlog by clicking the image in the upper-right corner of your **Work>Backlogs** page. + +Open the cumulative flow diagram + +The CFD shows the count of items in each Kanban column for the past 30 weeks or less. From this chart you can gain an idea of the amount of work in progress and lead time. Work in progress counts unfinished requirements. Lead time indicates the amount of time it takes to complete a requirement once work has started. + +Kanban board, cumulative flow diagram + + + + +## Configure the built-in cumulative flow chart + +Each team can set their preferences for the built-in cumulative flow charts. + +1. Open the backlog level for which you want to configure and then open the common configuration dialog. Click the ![gear icon](../../work/_img/icons/team-settings-gear-icon.png) gear icon. + + Kanban board, open common configuration settings + + If you're not a team admin, [get added as one](../../work/scale/add-team-administrator.md). Only team and project admins can customize the team Kanban boards and CFD charts. + +2. Click the Cumulative flow tab and specify the team's preferences. + + Kanban board, Common configuration dialog, Cumulative flow + +3. Repeat steps 1 and 2 for each backlog level you want to configure. + +For the CFD chart to reflect useful information, you'll want to update the status of work items to reflect progress as it occurs. The quickest way to make these updates is through your [Kanban board](../../work/kanban/kanban-basics.md). + +## Try this next + +> [!div class="nextstepaction"] +> [Cumulative flow, lead time, and cycle time guidance](cumulative-flow-cycle-lead-time-guidance.md) or +> [Kanban basics](../../work/kanban/kanban-basics.md) + + + + + \ No newline at end of file diff --git a/docs/report/guidance/cycle-time-and-lead-time.md b/docs/report/guidance/cycle-time-and-lead-time.md new file mode 100644 index 00000000000..95065553054 --- /dev/null +++ b/docs/report/guidance/cycle-time-and-lead-time.md @@ -0,0 +1,137 @@ +--- +title: Cycle time and lead time control charts | VSTS +description: Configure and use the cycle time and lead time control charts/widgets to improve your team's ability to plan and improve processes +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: C444622C-A2CA-4FCF-9E68-90D8D4896E6B +ms.manager: douge +ms.author: kaelli +ms.date: 05/26/2017 +ms.topic: get-started-article +--- + +# Lead time and cycle time control charts + +**VSTS** + +> [!NOTE] +> Feature availability: The Lead Time and Cycle Time widgets are only available for VSTS at this time. + +Both lead time and cycle time measures are extremely useful to teams as they indicate how long it takes for work to flow through their development pipeline. Lead time measures the total time elapsed from the creation of work items to their completion. Cycle time measures the time it takes for your team to complete work items once they begin actively working on them. + +These measures help teams plan, spot variations in efficiency, and identify potential process issues. The lower the lead and cycle times, the faster the throughput your team has. + +In this topic you'll learn: + +> [!div class="checklist"] +> * How to install and configure the Lead Time and Cycle Time widgets (Analytics service) +> * How to interpret the scatter-plot control charts +> * How moving average and standard deviation are calculated in the charts + + + +## Configure the Cycle Time and Lead Time widgets + +The Configuration dialog for the Cycle Time and Lead Time widgets is the same. You configure these widgets for a team. To learn more about teams, see [Add teams and team members](../../work/scale/multiple-teams.md). + +### Pre-requisites +In order to configure the Cycle Time and Lead Time widgets, you must have the following in place: +- Installed the [Analyics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics). You must be an account owner or a member of the [Project Collection Administrator group](../../tfs-server/add-administrator-tfs.md) to add extensions. +- [Added the widget to a dashboard](../add-widget-to-dashboard.md). You must be a [team administrator](../../work/scale/add-team-administrator.md)or have [permissions to add and edit dashboards](../dashboard-permissions.md#set-permissions). + +> [!NOTE] +> While the Cycle Time and Lead Time widgets use the Analytics data store, access to the data store for other report purposes is not supported at this time. + +### Configuration dialog +1. If you haven't yet added the [Analyics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics), do that now. + +2. (Optional) If you haven't yet configured your team's Kanban board, do that now. Define the [columns](../../work/kanban/add-columns.md) and [swimlanes](../../work/kanban/expedite-work.md) that support your workflow processes. + +3. If you haven't yet [added the widgets to your dashboard](../add-widget-to-dashboard.md), do that now. + +4. Click the ![Actions icon](../_img/icons/actions-icon.png) actions icon and choose the Configure option icon to open the configuration dialog. Modify the title, and then select the team, backlog level, swimlanes, and time period you want to monitor. + + Configure dialog, Lead Time widget + +5. For a continuous flow, choose Rolling period and specify the number of days you want to view on the chart. + + Or, for a fixed scope view, choose and specify the Start date. Choose this view if your team employs a Scrumban process or follows a standard sprint process. + + The main difference between these two types of charts is that the fixed scope chart will provide information (in most cases) of scope change. + +7. Click Save when done. The following image shows an example Lead Time chart showing 60 days of data. + + Example CFD chart, rolling 30 days + + For your lead/cycle time charts to provide useful data, your team must [Update the status](../../work/kanban/kanban-basics.md#track-work) in a timely manner those work items that the widgets track. + + +## Interpret the scatter-plot control charts + +Both Lead Time and Cycle Time widgets display as scatter-plot control charts. They display summary information as well as provide several interactive elements. + +**Example Lead Time widget** +Cycle Time widget + +The chart dots represent completed work items where their position on the horizontal axis represents the date they were completed. Their position on the vertical axis represents the calculated lead time or cycle time. +- Larger dots represent multiple work items with the same lead/cycle time +- Dot color corresponds to the work item type displayed in the legend +- Dark gray dots correspond to a mix of work item types. + + +#### Summary elements include: +- Days on average (average lead time or cycle time) for the main work item types configured for the chart +- The number of backlog work items used in the chart calculations; if there are more than three types of work items, you'll see a summary for Other +- The black trend line indicates the moving average +- The band around the trend line shows the standard deviation. + +#### Interactive elements include: +- Hover over any dot to see which work items contributed to the data point and the lead/cycle time for those items +- Click a dot to open the work item or query that lists the work items +- To filter the chart, click a work item type in the legend (![backlog item icon](../../_img/icons/user-story-icon.png),![bug item icon](../../_img/icons/bug-icon.png), or other icon) to filter on that type; to return to the original chart, refresh the dashboard. + + +## Moving average and standard deviation calculations + +The daily moving average value corresponds to the average of data points that fall within the moving average window. +The time-based moving average window is calculated based on the current day and previous *N* days, where *N* corresponds to 20% of the number of days the chart displays, rounded down to the nearest odd number. + +For example, if the chart displays the last 30 days, then *N*=5 days (20% of 30 days=6 days, rounded down to 5). The moving average window for April 10th corresponds to the previous 5 days. Therefore, the April 10th moving average is the average of all data points that fall on April 5th through April 10th. + +If there are no data points that fall within the moving average window, the chart doesn't show a moving average line. This can happen if you are starting out and there aren't enough days to calculate a moving average. + +The standard deviation appears as a band that encompasses the moving average. Standard deviation is calculated based on all data points falling within the same moving average window. Like moving average, if no data points fall within the moving average window, the chart doesn't plot standard deviation. + + +## Related notes + +We recommend your team review the lead/cycle time charts before or during each retrospective. Use lead time to help estimate delivery times and track service level agreements (SLAs). Use cycle time to identify potential process issues, spot variations in trends, and help with planning. + +- [Kanban basics](../../work/kanban/kanban-basics.md) +- [Cumulative flow diagram](cumulative-flow.md) +- [Workflow states and state categories](../../work/concepts/workflow-and-state-categories.md) +- [Agile](../../work/guidance/agile-process.md), [Scrum](../../work/guidance/scrum-process.md), and [CMMI](../../work/guidance/cmmi-process.md) processes + + + \ No newline at end of file diff --git a/docs/report/guidance/team-velocity.md b/docs/report/guidance/team-velocity.md new file mode 100644 index 00000000000..8fc3934bb0b --- /dev/null +++ b/docs/report/guidance/team-velocity.md @@ -0,0 +1,156 @@ +--- +title: Configure and view Velocity charts in VSTS & TFS +description: Track team velocity across several sprints using the velocity chart or widget +ms.technology: vs-devops-reporting +ms.prod: vs-devops-alm +ms.assetid: 31CBF001-CFF2-49CF-97A1-FDFFEFDDF3AB +ms.topic: get-started-article +ms.manager: douge +ms.author: kaelli +ms.date: 09/01/2017 +--- + + + + +# Configure and view Velocity charts + +[!INCLUDE [temp](../_shared/vsts-tfs-header-17-15.md)] + +Teams track their velocity to help them determine how much work they can perform sprint-over-sprint. Velocity provides an indication of how much work a team can complete during a sprint based either on a count of work items completed or the sum of estimates made to Effort (PBIs), Story Points (user stories), or Size (requirements). Velocity calculations rely on the team's ability to estimate backlog items. + +Once your team has completed a few sprints, they can use their velocity to [forecast](../../work/scrum/forecast.md) how much of the backlog they can finish within upcoming sprints. + +Use this topic to learn: + +> [!div class="checklist"] +> * Install and configure the Velocity widget (Analytics service) +> * How to work with the Velocity chart (work tracking datastore) +> * Required and recommended team activities to support velocity tracking + +For usage guidance, see [Velocity metrics and usage guidance ](velocity-guidance.md). + +There are two velocity charts, the one viewed from the backlog of a team and the one you access by adding the Velocity widget to a dashboard. The Velocity widget enables you to view more sprints and additional information than that provided by the velocity chart. + +> [!NOTE] +> **Feature availability:** The Velocity widget is available only for VSTS at this time. + + + + + + +
      +**Velocity chart**
      +![3 sprint velocity chart](_img/ALM_DS_Velocity_Chrt_S.png) +
      +**Velocity widget**
      +![6 sprint velocity widget](_img/team-velocity-six-iterations.png) +
      + + +## Configure the Velocity widget + +You configure your velocity widget for a team. To learn more about teams, see [Add teams and team members](../../work/scale/multiple-teams.md). + +### Pre-requisites +In order to add a Velocity widget to a dashboard, you must have the following in place: +- Installed the [Analyics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics). You must be an account owner or a member of the [Project Collection Administrator group](../../tfs-server/add-administrator-tfs.md) to add extensions. +- [Added the widget to a dashboard](../add-widget-to-dashboard.md). You must be a [team administrator](../../work/scale/add-team-administrator.md)or have [permissions to add and edit dashboards](../dashboard-permissions.md#set-permissions). + +> [!NOTE] +> While the Velocity widget uses the Analytics data store, access to the data store for other report purposes is not supported at this time. + +### Configuration dialog +1. If you haven't yet added the [Analyics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics), do that now. + +2. If you haven't yet [added the Velocity widget to your dashboard](../add-widget-to-dashboard.md), do that now. + +3. Click the ![Actions icon](../_img/icons/actions-icon.png) actions icon and choose the Configure option to open the configuration dialog. + + Modify the title, select the team, and then choose either the backlog level or work item type to track. Select whether you want to track a count of work items or a sum of a numeric field. The most common summed field is that of Effort, Story Points, or Size. + + Configure dialog, Velocity widget + +4. Specify the number of sprints you want to view. The default is 6 and the maximum is 15. + +5. (Optional) Select the check boxes to show additional information for work completed later than planned for each sprint. + + **Displayed planned work for iterations:** Check this box to + display the amount of work planned for an iteration at the start of the iteration. + This is useful for comparing your planned work to actual deliverables. + By default, the count of planned work begins as of the start date of the iteration. + + Days past start date of iteration when planned work is final: Specify a number of days past the start date to count planned work. + For example, if the first 2 days of an iteration are for planning, then you can enter "3", and planned work will be counted on the 3rd day. + + **Highlight work completed late** + Work items marked complete after the iteration end date are considered to be completed late and will show as light green. + This is useful for spotting a trend where work items are marked complete after the iteration is complete. + + > [!NOTE] + > A work item is considered late when the work item's Completed Date is later than End Date of the Iteration the work item is _currently_ assigned to. + > + > It will take into account the value you enter for Days past end date of iteration after which work is late. + + Days past end date of iteration after which work is late: Specify a number of days past which a work item is considered late if it's status is still new or in progress. + For example, entering 3 days will give the team 3 days after the end of an iteration to mark work items complete or done, before they are considered late. + +6. Click Save when done. The following image shows Velocity based on Story Points and 8 sprints of data. + + Example Velocity widget, 8 iterations + + + + +## Work with the built-in team velocity chart +Velocity provides a useful metric for gaining insight into how much work your team can complete during a sprint cycle. Each team is associated with one and only one velocity chart. + +Velocity will vary depending on team capacity, sprint over sprint. However, over time, the velocity should indicate a reliable average that can be used to forecast the full backlog. + +[!INCLUDE [temp](../_shared/image-differences.md)] + +1. From the backlog page, open the velocity chart. + + ![Click the the velocity chart in the upper right area of the page](_img/velocity-forecast-open-chart.png) + + For charts to appear, your team must perform these activities: + - Select sprints for your team + - Assign backlog items to sprints + - Estimate backlog items by defining the Effort, Story Points, or Size. + +2. The chart tracks your estimated backlog work (sum of Effort, Story Points, or Size) that your team has completed (green) in the previous sprints, or that are still in progress (blue). + + As this chart shows, velocity will fluctuate from sprint-to-sprint for a variety of reasons. However, you can quickly determine the average velocity by averaging the values shown in green for each sprint. You can then plug the average into the Forecast tool. + + Web portal, Velocity chart showing seven sprints of in progress and completed work + + >[!NOTE] + >Work items based on the [Scrum process](../../work/guidance/scrum-process.md) get counted in the chart once their State is set to Committed, whereas items based on the [Agile](../../work/guidance/agile-process.md) and [CMMI](../../work/guidance/cmmi-process.md) processes get counted once their State is set to Active. This behavior is set through the [workflow states to category state mappings](../../work/concepts/workflow-and-state-categories.md). + +## Required and recommended activities + +For your team to gain the greatest utility from the velocity chart or velocity widget, follow these required and recommended tasks. + +**Required:** +* [Define sprints for the team project](../../work/customize/set-iteration-paths-sprints.md) - Sprints should be of the same duration. +* [Select sprints for each team](../../work/scale/set-team-defaults.md#activate) +* [Define and estimate backlog items](../../work/backlogs/create-your-backlog.md#estimates). If you work from your team's backlog, the items you create will automatically be assigned to the current sprint (Iteration) and to your team's default Area Path. +* Update the status of backlog items once work starts and when completed. Only backlog items whose State maps to a metastate of In Progress or Done will show up on the velocity chart or velocity widget. + +**Recommended:** +* Define and size backlog items to [minimize variability](velocity-guidance.md). +* Determine how your team wants to [treat bugs](../../work/customize/show-bugs-on-backlog.md). If your team chooses to treat bugs like requirements, bugs will show up on the backlog and be counted within the Velocity chart and forecasting. +* [Set your team's area path](../../work/customize/set-area-paths.md). The forecast tool will forecast those items based on your team's default settings. These settings can specify to include items in area paths under the team's default or exclude them. +* Don't create a hierarchy of backlog items and bugs. The Kanban board, sprint backlog, and task board only show the last node in a hierarchy, called the leaf node. For example, if you link items within a hierarchy that is four levels deep, only the items at the fourth level appear on the Kanban board, sprint backlog, and task board.
      Instead of nesting requirements, bugs, and tasks, we recommend that you maintain a flat list─only creating parent-child links one level deep between items. Use [Features to group requirements or user stories](../../work/backlogs/organize-backlog.md). You can quickly map stories to features, which creates parent-child links in the background. +* At the end of the sprint, update the status of those backlog items that the team has fully completed. Incomplete items should be moved back to the product backlog and considered in a future sprint planning meeting. + +## Try this next + +> [!div class="nextstepaction"] +> [Velocity guidance](velocity-guidance.md) + + +### Add other teams +If you work with several teams, and each team wants to work with their own backlog view, velocity chart, and forecast tool, you can [add teams](../../work/scale/multiple-teams.md). Each team then gets access to their own set of Agile tools. Each Agile tool filters work items to only include those whose assigned area paths and iteration paths meet those [set for the team](../../work/scale/set-team-defaults.md). + diff --git a/docs/report/guidance/velocity-guidance.md b/docs/report/guidance/velocity-guidance.md new file mode 100644 index 00000000000..7cbb8d092d1 --- /dev/null +++ b/docs/report/guidance/velocity-guidance.md @@ -0,0 +1,70 @@ +--- +title: Velocity guidance | VSTS & TFS +description: Guidance for working with velocity charts +ms.technology: vs-devops-reporting +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 07/12/2017 +--- + + +# Velocity metrics and usage guidance + +[!INCLUDE [temp](../_shared/vsts-tfs-header-17-15.md)] + +Velocity provides a useful metric for these activities: +- Support sprint planning +- Forecast future sprints and the backlog items that can be completed +- A guide for determining how well the team estimates and meets their planned commitments + +And, with the velocity widget, you can quickly determine the following: +- Planned velocity +- Actual (completed) velocity +- Work completed later than planned +- Amount of work not completed + +To configure or view Velocity charts, see [Configure and view Velocity charts](team-velocity.md). + +The velocity chart requires that teams estimate their backlog items with a number using the [Effort, Story Points, or Size fields](../../work/track/query-numeric.md). + +The velocity widget allows teams to track velocity based on the count of backlog items or with estimates for the the Effort, Story Points, or Size fields. + + + +## Minimize variability in your estimates +Estimates, by their nature, don't reflect reality. They represent a best guess by the team as to the effort required to complete an item, relative to the effort of other items on the backlog. + +By minimizing the size variability of your backlog items, you help strengthen the team's ability to create more accurate estimates. Variability increases uncertainty. By minimizing the variability of your estimates, you increase the likelihood of more reliable velocity metrics and forecast results. + + +## Velocity is not a KPI + +While velocity provides a measure of a team's ability to deliver work over time, you shouldn't confuse it as a key performance indicator of the team. + +Velocity simply provides an aid to determine team capacity. Nothing more, nothing less. Asking a team to increase their velocity, basically asks them to accomplish more with the same resources. This request will mostly likely lead to "Story points inflation" and lead to less desirable outcomes. + +## Other types of velocity charts + +While the velocity chart provides a measure of Effort, Story Points, or Size that gets completed sprint-over-sprint, there may be other types of velocity that you may want to track. You can create similar charts by creating a work item query and [chart the count of or sum of items](../charts.md). + +For example, you can create a chart of the number of Product backlog items and bugs completed for the last several sprints. For examples on creating this type of chart, see [Query by numeric fields](../../work/track/query-numeric.md). + +![Velocity count of backlog items and bugs](_img/ALM_VF_VelocityCountItems.png) + +## Try this next + +> [!div class="nextstepaction"] +> [Configure or view velocity chart](team-velocity.md) +> [Forecast your sprints](../../work/scrum/forecast.md) +> [Plan your sprint](../../work/scrum/sprint-planning.md). + + +### Industry resources +- [How Should We Use Velocity?](https://www.scrumalliance.org/community/articles/2013/2013-april/how-should-we-use-velocity) +- [Velocity Is Not the Goal](https://www.scrumalliance.org/community/articles/2017/march/sprint-velocity-sense-and-nonsense) +- [How to Calculate and Use Velocity to Help Your Team and Your Projects](https://www.scrumalliance.org/community/articles/2014/february/velocity) + +### Add other teams +If you work with several teams, and each team wants to work with their own backlog view, velocity chart, and forecast tool, you can [add teams](../../work/scale/multiple-teams.md). Each team then gets access to their own set of Agile tools. Each Agile tool filters work items to only include those whose assigned area paths and iteration paths meet those [set for the team](../../work/scale/set-team-defaults.md). diff --git a/docs/report/guidance/workbooks.md b/docs/report/guidance/workbooks.md new file mode 100644 index 00000000000..c79000f30de --- /dev/null +++ b/docs/report/guidance/workbooks.md @@ -0,0 +1,47 @@ +--- +title: Excel workbooks supported with the Agile and CMMI process templates for TFS +description: Use the workbook to rank and assign bugs to be worked on for an iteration, also referred to as a sprint. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: ac07307f-e87c-43d5-a044-01023cea2e50 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Workbooks + +**TFS 2017 | TFS 2015 | TFS 2013** + + You can open the workbook from the Documents page in Team Explorer. + + **Requirements** + +- Your team project must be provisioned with SharePoint Products and the project portal enabled. For more information, see [Configure or redirect process guidance](../sharepoint-dashboards/configure-or-redirect-process-guidance.md). + +- To open a workbook in Office Excel, you must have the Team Foundation Office Integration add-in installed on your client computer. This add-in is installed when you install any product in Visual Studio ALM. + +- To view a shared query, you must be assigned or belong to a group that has been assigned **Read** permissions for the shared query folder for the team project. To modify a query, you must be assigned or belong to a group that has been assigned **Contribute** or **Full Control** permissions for the shared query. See [Set permissions on queries](../../work/track/set-query-permissions.md). + +- To create or modify work items, you must be a member of the **Contributors** group or your **View work items in this node** and **Edit work items in this node** permissions must be set to **Allow**. See [Add users to team projects](../../accounts/add-users.md). + +> [!NOTE] +> When you open the workbook, choose **Edit Workbook** next to **Server Workbook** so that you can modify the workbook. If the workbook is not available to you, open the Triage shared query by using Team Explorer or Microsoft Excel. + +## Bugs listed in the Triage (Agile) workbook + You can use the Triage workbook to review and update the priority and status of bugs. Triage is the process that a team uses to review newly reported or reopened bugs, assign a priority and iteration to them, and assign a team member to fix them. Triage is typically driven by the product owner or the scrum master, with input from the team. + + For Agile team projects, the Triage worksheet references the Triage shared query, which is configured to find all active bugs for the team project. + + ![Example triage workbook](_img/procguid_workbooktriage.png "ProcGuid_WorkbookTriage") + + For CMMI team projects, the Triage worksheet references the Untriaged Work Items shared query, which is configured to find all requirements, change requests, tasks, bugs, and issues whose **Triage** field is not set to **Triaged** for the team project. + +## Issues workbook + You can use the Issues workbook to review and rank problems that might block team progress. The Issues worksheet references the Issues shared query, which is configured to find all issues that are defined for the team project. + + ![Example of Issues Workbook](_img/procguid_workbookissues.png "ProcGuid_WorkbookIssues") + +## Q & A + +### Q: How can I create my own workbooks? + **A:** See [Bulk add or modify work items with Excel](../../work/office/bulk-add-modify-work-items-excel.md). \ No newline at end of file diff --git a/docs/report/index.md b/docs/report/index.md new file mode 100644 index 00000000000..66ff825c8dd --- /dev/null +++ b/docs/report/index.md @@ -0,0 +1,55 @@ +--- +title: Dashboards index to content for VSTS & TFS +description: Index to topics for working with dashboards to monitor status and trends in VSTS and Team Foundation Server (TFS) +ms.assetid: CF7FBF52-AC95-4B0B-9FEC-D2EDD5583F9E +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 06/22/2017 +--- + +# Dashboards + +Start gaining visibility into how your team is progressing by adding one or more widgets to your dashboard. Each team can customize and configure dashboards to share information and monitor their progress. + + + +## 5-Minute Quickstarts +- [Add and manage dashboards](dashboards.md) +- [Add charts and widgets to a dashboard](add-widget-to-dashboard.md) + + +## Step-by-Step Tutorials + +- [Configure a Cumulative Flow chart](guidance/cumulative-flow.md) +- [Configure a Lead Time or Cycle Time widget](guidance/cycle-time-and-lead-time.md) +- [Configure or view Velocity chart](guidance/team-velocity.md) +- [View sprint burndown charts](/vsts/work/scrum/sprint-burndown?toc=/vsts/report/toc.json&bc=/vsts/report/breadcrumb/toc.json) + +## Concepts +- [Cumulative flow, lead time, and cycle time guidance](guidance/cumulative-flow-cycle-lead-time-guidance.md) +- [Velocity metrics and usage guidance](guidance/velocity-guidance.md) +- [Burndown guidance](guidance/burndown-guidance.md) + + +## How-to Guides +- [Add charts to a dashboard](add-charts-to-dashboard.md) +- [Add Markdown to a dashboard](add-markdown-to-dashboard.md) +- [Configure work item query-based charts](charts.md) +- [Configure test status, progress, and result charts](/vsts/manual-test/getting-started/track-test-status?toc=/vsts/report/toc.json&bc=/vsts/report/breadcrumb/toc.json) +- [Set dashboard permissions](dashboard-permissions.md) + + +## Reference +- [Widget catalog](widget-catalog.md) + +## Resources + +- [Build a dashboard widget](/vsts/extend/develop/add-dashboard-widget) +- [Marketplace widgets](https://marketplace.visualstudio.com/search?term=widget&target=VSTS&category=All%20categories&sortBy=Relevance) + + diff --git a/docs/report/overview.md b/docs/report/overview.md new file mode 100644 index 00000000000..158f79da672 --- /dev/null +++ b/docs/report/overview.md @@ -0,0 +1,164 @@ +--- +title: Dashboards, charts, & widgets for VSTS & TFS +description: Review of the OOB charts, widgets, dashboards, & reports available to monitor status and trends in VSTS & Team Foundation Server (TFS) +ms.assetid: 7BAD53A1-080E-40E8-8866-24EC00395D39 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 8/22/2017 +--- + +# Dashboards, charts, & widgets + +[!INCLUDE [temp](_shared/vsts-tfs-header-17-15.md)] + +Customizable, highly-configurable dashboards provide you and your teams with the flexibility to share information, monitor progress and trends, and improve your workflow processes. + + +## Add widgets to your dashboard + +With dashboards, you can configure an array of charts and widgets. + +Each team can [add and configure multiple dashboards](dashboards.md) to share information, view status, progress, and trends, and access quick links and other functions. Easily add and rearrange widgets on the dashboard to show recent changes made to view build status, bug trends, and more. + +![Example dashboard](_img/dashboard-view-with-widgets.png) + + +**Sample chart widgets** + +![Lead time widget](guidance/_img/lead-time-control-chart.png) ![Cumulative flow diagram widget](guidance/_img/cfd-exampe-rolling-30-days.png) + +**Sequence for adding and customizing a dashboard** + +[![Add dashboard](_img/gs-add-dashboard.png)](dashboards.md)[![Add widget](_img/gs-add-widget.png)](add-widget-to-dashboard.md) + +### Monitor code activity, build progress and deployment status + +With the code tile widgets, you can monitor the activity occuring within a repo or branch folder. Build history displays a histogram of all builds run for a specific build definition. Bar color indicates: green-completed, red-failed, and yellow-completed without tests. + +**Code, build, and release chart widgets** + +![Code tile widget](_img/widget-code-tile.png)   ![Pull request widget](_img/widget-catalog-pull-request.png) +![Build history widget](_img/widget-build-history-chart.png)   ![Deployment status widget](_img/widget-deployment-status.png) + + +### Marketplace widgets + +In addition to the widgets available to your from the widget catalog, you may find additional widgets of interest from the [Marketplace](https://marketplace.visualstudio.com/search?term=webpage%20widget&target=VSTS&sortBy=Relevance). + + + +## Generate status and trend charts from queries + +With flat-list queries, you can create various charts to monitor status, progress, and trends. To get started, you can open a shared query and create a chart based on your tracking interests. Chart types include status—pie, bar, column, stacked bar, and pivot—and trend—stacked area, line, and area—charts. + + +#### Sample Agile tool light-weight charts + +![Active bugs](_img/gs-monitor-charts-active-bugs.png) + +**Sequence for adding query-based charts to a dashboard** + +[![Edit query](_img/gs-chart-query.png)](../work/track/using-queries.md)[![Create chart](_img/gs-chart-create.png)](charts.md)[![Add chart to dashboard](_img/gs-chart-add-dashboard.png)](add-charts-to-dashboard.md#add-charts) + + +Prior to monitoring work progress and trends, you'll need to have [planned your project and made progress on work you're tracking](../work/backlogs/create-your-backlog.md). + + +## Test progress, results, and trends + +The steps to creating charts that track test progress and results are similar to those for tracking work. The starting point, however, begins with the test plan rather than a query. For example, you can find out how many test cases are ready to run, or how many tests are passing and failing in each test suite. + +#### Sample light-weight test charts + +![Active bugs](_img/gs-monitor-test-charts.png) + +And, just like work item query-based charts, you can add these charts to a dashboard. + +**Sequence for adding test progress and result charts to a dashboard** + +[![Edit query](_img/gs-chart-test-type.png)](../manual-test/getting-started/track-test-status.md)[![Create chart](_img/gs-chart-create.png)](charts.md)[![Add chart to dashboard](_img/gs-chart-add-dashboard.png)](add-charts-to-dashboard.md#add-charts) + + + +## System-generated work tracking charts + +There are a number of system-generated charts that you can access from the web portal, but can't add to a dashboard. However, you may find a comparable widget listed in the [widget catalog](widget-catalog.md) that tracks the same or similar data which you can add to the dashboard. These include: + + +- [Cumulative flow](guidance/cumulative-flow.md) +- [Team velocity](guidance/team-velocity.md) +- - [Sprint burndown chart](../work/scrum/sprint-burndown.md) + + +## Sprint charts + +Each sprint provides access to two charts. The first [tracks capacity](../work/scrum/define-sprints.md) for the team, team activities—such as Development, Test, Design—and individual team members. The second tracks the [sprint burndown](../work/scrum/sprint-burndown.md) in terms of remaining work. + +| Capacity bars | Burndown | +|-------| ----- | +|![Capacity bars](../work/scrum/_img/ALM_DS_CapacityBars_S.png) | ![Burndown chart](../work/scrum/_img/ALM_DS_SprntBD_Chrt_S.png) | + + +**Sprint chart widgets** + + ![Sprint capacity widget](_img/widget-sprint-capacity.png) ![Sprint burndown widget](_img/widget-sprint-burndown.png) + + + +## Try this next + +> [!div class="nextstepaction"] +> [Add a widget to a dashboard](widget-catalog.md) +> or +> [Review available widgets](widget-catalog.md) + + +### Add custom fields +You can add data to support reporting requirements in the following ways: + +- [Add a custom field (Inheritance process model, VSTS)](../work/process/customize-process-field.md) +- [Add or modify a field (Hosted XML or On-premises XML)](../work/customize/add-modify-field.md) + +### Extensibility + +Using the REST API service, you can [create a custom widget](../extend/develop/add-dashboard-widget.md). + + + + + + + +[excel-adhoc-query-report]: ./excel/create-status-and-trend-excel-reports.md +[add-a-team]: ../Work/scale/multiple-teams.md +[team-assets]: ../Work/scale/manage-team-assets.md +[add-team-members]: ../Work/scale/multiple-teams.md#add-team-members +[add-team-admin]: ../work/scale/add-team-administrator.md + + diff --git a/docs/report/powerbi/_img/AccessDeniedError.png b/docs/report/powerbi/_img/AccessDeniedError.png new file mode 100644 index 00000000000..39d652d3cc8 Binary files /dev/null and b/docs/report/powerbi/_img/AccessDeniedError.png differ diff --git a/docs/report/powerbi/_img/AnalyticsAccessCheckException.png b/docs/report/powerbi/_img/AnalyticsAccessCheckException.png new file mode 100644 index 00000000000..e85031f4add Binary files /dev/null and b/docs/report/powerbi/_img/AnalyticsAccessCheckException.png differ diff --git a/docs/report/powerbi/_img/AnalyticsNotEnabledError.png b/docs/report/powerbi/_img/AnalyticsNotEnabledError.png new file mode 100644 index 00000000000..0e856fb91de Binary files /dev/null and b/docs/report/powerbi/_img/AnalyticsNotEnabledError.png differ diff --git a/docs/report/powerbi/_img/ProjecNotFoundError.png b/docs/report/powerbi/_img/ProjecNotFoundError.png new file mode 100644 index 00000000000..391cc65b7bf Binary files /dev/null and b/docs/report/powerbi/_img/ProjecNotFoundError.png differ diff --git a/docs/report/powerbi/_img/QueryExceedsPreferedMaxSizeException.png b/docs/report/powerbi/_img/QueryExceedsPreferedMaxSizeException.png new file mode 100644 index 00000000000..a5b2c75e6de Binary files /dev/null and b/docs/report/powerbi/_img/QueryExceedsPreferedMaxSizeException.png differ diff --git a/docs/report/powerbi/_img/Screen5.png b/docs/report/powerbi/_img/Screen5.png new file mode 100644 index 00000000000..ab475e197ef Binary files /dev/null and b/docs/report/powerbi/_img/Screen5.png differ diff --git a/docs/report/powerbi/_img/Screen6.png b/docs/report/powerbi/_img/Screen6.png new file mode 100644 index 00000000000..a961aa1fc66 Binary files /dev/null and b/docs/report/powerbi/_img/Screen6.png differ diff --git a/docs/report/powerbi/_img/Screen7.png b/docs/report/powerbi/_img/Screen7.png new file mode 100644 index 00000000000..cec2fbb2bb2 Binary files /dev/null and b/docs/report/powerbi/_img/Screen7.png differ diff --git a/docs/report/powerbi/_img/basic-steps-to-add-a-rollup-chart.png b/docs/report/powerbi/_img/basic-steps-to-add-a-rollup-chart.png new file mode 100644 index 00000000000..9bf8ec88824 Binary files /dev/null and b/docs/report/powerbi/_img/basic-steps-to-add-a-rollup-chart.png differ diff --git a/docs/report/powerbi/_img/connect-to-vs-team-services-auth.png b/docs/report/powerbi/_img/connect-to-vs-team-services-auth.png new file mode 100644 index 00000000000..581081c0cc6 Binary files /dev/null and b/docs/report/powerbi/_img/connect-to-vs-team-services-auth.png differ diff --git a/docs/report/powerbi/_img/connect-to-vs-team-services-choose.png b/docs/report/powerbi/_img/connect-to-vs-team-services-choose.png new file mode 100644 index 00000000000..231e06e9478 Binary files /dev/null and b/docs/report/powerbi/_img/connect-to-vs-team-services-choose.png differ diff --git a/docs/report/powerbi/_img/connect-to-vs-team-services.png b/docs/report/powerbi/_img/connect-to-vs-team-services.png new file mode 100644 index 00000000000..3ab7b3991a2 Binary files /dev/null and b/docs/report/powerbi/_img/connect-to-vs-team-services.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-1.png b/docs/report/powerbi/_img/data-connector-get-data-1.png new file mode 100644 index 00000000000..4b38c636686 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-1.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-10a.png b/docs/report/powerbi/_img/data-connector-get-data-10a.png new file mode 100644 index 00000000000..1a3781d1a7a Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-10a.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-11a.png b/docs/report/powerbi/_img/data-connector-get-data-11a.png new file mode 100644 index 00000000000..ef145a4fa4f Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-11a.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-12a.png b/docs/report/powerbi/_img/data-connector-get-data-12a.png new file mode 100644 index 00000000000..68921b7f727 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-12a.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-13a.png b/docs/report/powerbi/_img/data-connector-get-data-13a.png new file mode 100644 index 00000000000..9460d62e71e Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-13a.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-14.png b/docs/report/powerbi/_img/data-connector-get-data-14.png new file mode 100644 index 00000000000..80bce92e1dc Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-14.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-15.png b/docs/report/powerbi/_img/data-connector-get-data-15.png new file mode 100644 index 00000000000..e66455fda82 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-15.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-1a.png b/docs/report/powerbi/_img/data-connector-get-data-1a.png new file mode 100644 index 00000000000..d05f26d3ad4 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-1a.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-2.png b/docs/report/powerbi/_img/data-connector-get-data-2.png new file mode 100644 index 00000000000..7b50e43968f Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-2.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-3.png b/docs/report/powerbi/_img/data-connector-get-data-3.png new file mode 100644 index 00000000000..5ee4d3ec6ed Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-3.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-4.png b/docs/report/powerbi/_img/data-connector-get-data-4.png new file mode 100644 index 00000000000..b7e052eed2c Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-4.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-5.png b/docs/report/powerbi/_img/data-connector-get-data-5.png new file mode 100644 index 00000000000..22a7bd21278 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-5.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-6.png b/docs/report/powerbi/_img/data-connector-get-data-6.png new file mode 100644 index 00000000000..9f4011343de Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-6.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-7.png b/docs/report/powerbi/_img/data-connector-get-data-7.png new file mode 100644 index 00000000000..206fb3af2d3 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-7.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-8.png b/docs/report/powerbi/_img/data-connector-get-data-8.png new file mode 100644 index 00000000000..342617112c3 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-8.png differ diff --git a/docs/report/powerbi/_img/data-connector-get-data-9.png b/docs/report/powerbi/_img/data-connector-get-data-9.png new file mode 100644 index 00000000000..6d31ea3ba90 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-get-data-9.png differ diff --git a/docs/report/powerbi/_img/data-connector-recipes-count-1.png b/docs/report/powerbi/_img/data-connector-recipes-count-1.png new file mode 100644 index 00000000000..4167ecc4712 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-recipes-count-1.png differ diff --git a/docs/report/powerbi/_img/data-connector-recipes-count-2.png b/docs/report/powerbi/_img/data-connector-recipes-count-2.png new file mode 100644 index 00000000000..515355741aa Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-recipes-count-2.png differ diff --git a/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-1.png b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-1.png new file mode 100644 index 00000000000..a5628aaf464 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-1.png differ diff --git a/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-2.png b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-2.png new file mode 100644 index 00000000000..17802e1decc Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-2.png differ diff --git a/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-3.pdn b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-3.pdn new file mode 100644 index 00000000000..dbd2515e0eb Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-3.pdn differ diff --git a/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-3.png b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-3.png new file mode 100644 index 00000000000..d22b4175c79 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-3.png differ diff --git a/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-4.png b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-4.png new file mode 100644 index 00000000000..5e3c0a04bb9 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-4.png differ diff --git a/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-5.png b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-5.png new file mode 100644 index 00000000000..531196677c7 Binary files /dev/null and b/docs/report/powerbi/_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-5.png differ diff --git a/docs/report/powerbi/_img/get-data-final.png b/docs/report/powerbi/_img/get-data-final.png new file mode 100644 index 00000000000..da66cf62f68 Binary files /dev/null and b/docs/report/powerbi/_img/get-data-final.png differ diff --git a/docs/report/powerbi/_img/icons/checkmark.png b/docs/report/powerbi/_img/icons/checkmark.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/report/powerbi/_img/icons/checkmark.png differ diff --git a/docs/report/powerbi/_img/icons/delete-icon.png b/docs/report/powerbi/_img/icons/delete-icon.png new file mode 100644 index 00000000000..f3fee7cbd95 Binary files /dev/null and b/docs/report/powerbi/_img/icons/delete-icon.png differ diff --git a/docs/report/powerbi/_img/icons/table-no.png b/docs/report/powerbi/_img/icons/table-no.png new file mode 100644 index 00000000000..6846403438c Binary files /dev/null and b/docs/report/powerbi/_img/icons/table-no.png differ diff --git a/docs/report/powerbi/_img/icons/table-yes.png b/docs/report/powerbi/_img/icons/table-yes.png new file mode 100644 index 00000000000..9abfa61341a Binary files /dev/null and b/docs/report/powerbi/_img/icons/table-yes.png differ diff --git a/docs/report/powerbi/_img/native-support-for-rollup.png b/docs/report/powerbi/_img/native-support-for-rollup.png new file mode 100644 index 00000000000..3bdcda0e39d Binary files /dev/null and b/docs/report/powerbi/_img/native-support-for-rollup.png differ diff --git a/docs/report/powerbi/_img/powerbi-add-a-trend-chart.png b/docs/report/powerbi/_img/powerbi-add-a-trend-chart.png new file mode 100644 index 00000000000..5583b77b749 Binary files /dev/null and b/docs/report/powerbi/_img/powerbi-add-a-trend-chart.png differ diff --git a/docs/report/powerbi/_img/powerbi-add-state-filter.png b/docs/report/powerbi/_img/powerbi-add-state-filter.png new file mode 100644 index 00000000000..734687642ed Binary files /dev/null and b/docs/report/powerbi/_img/powerbi-add-state-filter.png differ diff --git a/docs/report/powerbi/_img/powerbi-advanced-date-filters.png b/docs/report/powerbi/_img/powerbi-advanced-date-filters.png new file mode 100644 index 00000000000..10d8775ae96 Binary files /dev/null and b/docs/report/powerbi/_img/powerbi-advanced-date-filters.png differ diff --git a/docs/report/powerbi/_img/powerbi-story-points-burndown-iteration-date-filtered.png b/docs/report/powerbi/_img/powerbi-story-points-burndown-iteration-date-filtered.png new file mode 100644 index 00000000000..bc196a7d8c3 Binary files /dev/null and b/docs/report/powerbi/_img/powerbi-story-points-burndown-iteration-date-filtered.png differ diff --git a/docs/report/powerbi/_img/powerbi-story-points-burndown-iteration.png b/docs/report/powerbi/_img/powerbi-story-points-burndown-iteration.png new file mode 100644 index 00000000000..03be7240ba2 Binary files /dev/null and b/docs/report/powerbi/_img/powerbi-story-points-burndown-iteration.png differ diff --git a/docs/report/powerbi/_img/powerbi-story-points-filter-by-state-line.png b/docs/report/powerbi/_img/powerbi-story-points-filter-by-state-line.png new file mode 100644 index 00000000000..e2a1e18d784 Binary files /dev/null and b/docs/report/powerbi/_img/powerbi-story-points-filter-by-state-line.png differ diff --git a/docs/report/powerbi/_img/powerbi-story-points-trend.png b/docs/report/powerbi/_img/powerbi-story-points-trend.png new file mode 100644 index 00000000000..50e8d1267ee Binary files /dev/null and b/docs/report/powerbi/_img/powerbi-story-points-trend.png differ diff --git a/docs/report/powerbi/_img/rollup-user-stories-count-of-tasks.png b/docs/report/powerbi/_img/rollup-user-stories-count-of-tasks.png new file mode 100644 index 00000000000..43d1b3c69ef Binary files /dev/null and b/docs/report/powerbi/_img/rollup-user-stories-count-of-tasks.png differ diff --git a/docs/report/powerbi/_img/vs-team-services-power-bi-opened.png b/docs/report/powerbi/_img/vs-team-services-power-bi-opened.png new file mode 100644 index 00000000000..f7f47443b03 Binary files /dev/null and b/docs/report/powerbi/_img/vs-team-services-power-bi-opened.png differ diff --git a/docs/report/powerbi/breadcrumb/toc.yml b/docs/report/powerbi/breadcrumb/toc.yml new file mode 100644 index 00000000000..84d6b0ffec7 --- /dev/null +++ b/docs/report/powerbi/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Analytics + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=analytics + items: + - name: "VSTS & Power BI" + tocHref: /vsts/ + topicHref: /vsts/report/powerbi/index \ No newline at end of file diff --git a/docs/report/powerbi/connect-vso-pbi-vs.md b/docs/report/powerbi/connect-vso-pbi-vs.md new file mode 100644 index 00000000000..958df0b1c25 --- /dev/null +++ b/docs/report/powerbi/connect-vso-pbi-vs.md @@ -0,0 +1,100 @@ +--- +title: Connect Power BI | VSTS +description: Get started using Power BI to analyze data collected for team projects hosted on Visual Studio Team Services (VSTS) +ms.technology: vs-devops-reporting +ms.prod: vs-devops-alm +ms.assetid: 2915605A-E3F1-4FE0-ACA5-7A4D734DB679 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Connect to VSTS with Power BI Content Pack + +**VSTS** + +You can gain insight and analyze the progress and quality of your project by connecting Power BI to the data collected and stored for VSTS. + +For a list of currently available data, see [What's available in the Power BI VSTS Connector](vso-pbi-whats-available-vs.md). + +## Authorize Power BI to access your account data +Your first step requires you to authorize Power BI to access your VSTS account. Choose between one of these two connection scenarios when connecting to Power BI: + +- **Scenario #1:** You use the same Azure Active Directory (AAD) account to log in to VSTS and Power BI. + +- **Scenario #2:** You use an MSA (Microsoft account/LiveID) to log in to VSTS or you use different AAD credentials to log into VSTS than you use to log into Power BI. + +Prior to performing either Scenario #1 or #2, make sure you have [permissions required to access the Analytics service](../analytics/analytics-security.md). + +## Scenario #1: Log in using AAD + +1. Open a web browser and go to [http://powerbi.com](http://powerbi.microsoft.com/). + +2. Click **Sign In** in the upper right corner to log in to Power BI. + +3. In the lower left corner, click **Get Data**. + + >[!NOTE] + >If you don't have a Power BI account you can create one by entering your email address and click **Use it free**. + +4. Click **Get** under **Services** on the Get Data page. + + ![get-data-final.png](_img/get-data-final.png) + +5. Select the VSTS connector and click **Connect**. + + ![VSTS connector](_img/connect-to-vs-team-services-choose.png) + +6. Enter the names of the account and team whose data you want to connect to and click **Next**. + + > [!IMPORTANT] + > For the **Account**, do not include **visualstudio.com** (if the account is "corpx.visualstudio.com" just enter "corpx"). + + ![Enter the account and project(s)](_img/connect-to-vs-team-services.png) + + > [!NOTE] + > Wildcards are supported for the **Project** name. You can enter "*" for every project in the account or, if you had projects with these names "Test1", "Test2", "Test3", "App1", "App2" and enter "Test*" Power BI will retrieve data for the projects Test1, Test2 and Test3. However, you cannot enter something like "T*st". + +7. The next step specifies the authentication method. Only oAuth2 is supported. Click **Sign In** to continue. + + ![Login to VS VSTS with oAuth2](_img/connect-to-vs-team-services-auth.png) + + > [!IMPORTANT] + > You won't be able to connect if your account administrator disabled third party application access via OAuth. When enabled, it appears as follows on the **Administration>Control panel>Settings page**: + > + > ![Third-party oAuth enabled](_img/Screen5.png)

      + + > Contact your account administrator to determine if it needs to be enabled.   + +8. Successful authorization displays the following authorization dialog which allows Power BI to retrieve data from your account. Scroll down to the bottom and click **Accept**. + + ![VS VSTS Authorization page](_img/Screen6.png) + +9. Once Power BI is authorized, data will begin to load and you'll be presented with a loading screen until the data is complete. Depending on how much data there is, it may take a few minutes to as long as 30 minutes to complete the data load. + + At this point you can close your browser and come back to Power BI later. Power BI data refreshes every 24 hours by default. If you have a paid Power BI account, you can refresh the data as frequently as every hour. + +## Scenario #2: Log in when you use different credentials for VSTS and Power BI + +If you are using a Microsoft Account or different AAD credentials than you use for Power BI, you will need to supply those credentials to VSTS to get access to the data. This can happen in one of two ways. Either, the connect experience will prompt you for the credentials or, if you access VSTS often, your browser may have your most recent credentials cached. If the cached credentials match the account you are connecting to, it will work seamlessly, however, this caching can be confusing if the last account/username you used isn't the one you need to enable Power BI to access the VSTS data. This can lead to Access Denied errors. If you are getting access denied errors without any prompt for credentials, then you should use In Private in IE or Incognito in Chrome to bypass the cache. + +If your cached credentials work, you won't get prompted. If you don't have cached credentials, then you will be prompted to login to VSTS. If you are using a Microsoft account enter your credentials on the right hand side of the dialog. If you are using AAD credentials, click the **Sign in with your work or school account** link on the left hand side of the dialog. + +![VSTS Login page](_img/Screen7.png) + +>[!IMPORTANT] +>There is a situation that can occur where Power BI will still try to use your cached credentials even though they are different than the credentials you used when logging onto Power BI. In this case, the VSTS Authorize dialog will still be displayed however, you'll be logged on as the wrong user. To correct this situation, do the following:
      +> - Click **Sign out** in the Authorize application page +> - Close the page and click **Sign In** again on the Power BI Configure VSTS dialog +> - You will then be prompted to enter your VSTS credentials and everything will work as normal. + + +## Related notes + +To get started using Power BI and the Analytics service, make sure you have [permissions required to access the Analytics service](../analytics/analytics-security.md) and then review the [knowledge base of articles](https://support.powerbi.com/). + +Always check into updates of [What's available in the Power BI VSTS Connector](vso-pbi-whats-available-vs.md) to learn about the latest data and changes made to the VSTS Connector. + +To understand the default reports available, see [Create reports with data from using Power BI for VSTS](report-on-vso-with-power-bi-vs.md). + + diff --git a/docs/report/powerbi/create-rollup-charts.md b/docs/report/powerbi/create-rollup-charts.md new file mode 100644 index 00000000000..c81a69b7eac --- /dev/null +++ b/docs/report/powerbi/create-rollup-charts.md @@ -0,0 +1,104 @@ +--- +title: Create rollup charts | VSTS +description: Create rollup charts in Power BI from data collected for Visual Studio Team Services (VSTS) +ms.assetid: 81223001-126D-4856-B1B3-7231013089F2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Create rollup charts + +**VSTS** + +Rollup provides summed values of select fields for all child work items of a parent. You can create rollups based on counts of work items or selected measures, such as Story Points, Effort, Size for backlog items and Original Estimate, Remaining Work, Completed Work for tasks. + +Natively, VSTS provides rollup of Remaining Work for tasks on the Task board. + +![Native support of rollup](_img/native-support-for-rollup.png) + +With Power BI, you can create additional rollup charts for those [supported rollup paths](#supported-rollup-paths). + + +##Rollup count of tasks per user story + +Here's an example that shows the number of child tasks and their state for each user story. Unparented tasks are also listed. + +![Rollup of tasks by State per user story in power bi](_img/rollup-user-stories-count-of-tasks.png) + + +You can create this type of rollup chart by following steps ![step 1](../_img/icons/step1.png) through ![step 7](../_img/icons/step7.png) outlined below. + +Optionally, can also add different measures such as Completed Work or Remaining work to see that information instead of just counts. + + +##Basic steps to create a rollup chart + +The following image shows the basic steps to create a rollup chart. In step ![step 4](../_img/icons/step4.png), you choose the parent and child work item types that will filter the rollup. For example, by choosing Parent User Stories>User Story and Work Items/Task, you get a table that will rollup the count of Tasks that are children of each user story. + +![Basic steps to create a rollup chart: 1-Open report, 2-Edit report, 3-Add and label a new report, 4-Add parent and child rollup fields, 5-Change the chart type from Table to Matrix, 6- Turn off Row totals, and 7-Add State to columns filter.](_img/basic-steps-to-add-a-rollup-chart.png) + +After you have your initial chart, you can change the chart type from Table to Matrix and add the State field to the Column to expand the number of columns in the chart. + +If you use the [Scrum](../../work/guidance/scrum-process.md) or +[CMMI](../../work/guidance/cmmi-process.md) processes, you can create similar charts by first choosing the Parent Product Backlog Items/Product Backlog or Parent Requirements/Requirement fields for the first column of the matrix in ![step 4](../_img/icons/step4.png). + +if you're new to Power BI, go [here to Connect to Power BI](connect-vso-pbi-vs.md). + +You can create Power BI rollup charts for data stored in VSTS. To access similar charts for on-premises TFS, see [Rollup of work and other fields](https://msdn.microsoft.com/library/dn217871.aspx). + + + + +##Supported rollup paths +The VSTS data model supports rollup along these pre-defined paths. +- **Agile process:** Epics > Features > User Stories > Bugs > Tasks + +- **Scrum process:** Epics > Features > Product Backlog Items > Bugs > Tasks + +- **CMMI process:** + - Epics > Features > Requirements > Bugs > Tasks + - Issues > Tasks + - Epics > Features > Requirements > Change Requests > Issues > Bugs > Tasks + +Rollups within any one of these chains will work as well. For example, child Tasks of Epics will rollup to the Epic level. + +Rollup doesn't support those parent-child relationships that don't follow this structure. For example, rollup isn't supported for parent Risks and child tasks (CMMI process). Also, the rollup data model doesn't support custom parent-child links and hierarchies. + +> [!TIP] +> Use the **Parent...** dimensions only for hierarchical charts. Use the **Work Items** dimension for all other standard charts.   + + +##Apply State filter + +To focus the rollup chart to count only active or in progress tasks from, add the state filter and check those values associated with being Closed, Completed, Cut, or Done. For example: + +![State filter for active or in progress work items in power bi](_img/powerbi-add-state-filter.png) + + +## Related notes + +The sprint burndown chart based on Story Points provides you with a daily update of your sprint progress when you don't break your stories down into tasks. You can update the chart further by adding Work Item Type as an additional filter to differentiate the story point count for bugs versus user stories. + + +### Get started using Power BI and the VSTS connector +- [Create dashboards and reports](report-on-vso-with-power-bi-vs.md) +- [What's available in the Power BI VSTS connector](vso-pbi-whats-available-vs.md) +- [Add a page to a Power BI report](https://support.powerbi.com/knowledgebase/articles/474804-add-a-page-to-a-power-bi-report) +- [Pin a tile to a Power BI dashboard from a report](https://support.powerbi.com/knowledgebase/articles/430323-pin-a-tile-to-a-power-bi-dashboard-from-a-report) +- [Save a report in Power BI](https://support.powerbi.com/knowledgebase/articles/444112-save-a-report-in-power-bi) + + +### Rollup requirements +To support rollup of different measures such as Story Points, Effort, Size, Completed Work, or Remaining Work, structure your work items according to the following recommendations: +- Use parent-child links to link work items that contain values that you want to rollup. +- Add required fields to the WITs that will capture the rollup values. Default fields used to schedule work are only present on the task work item. These fields are: + - Original Estimate (Microsoft.VSTS.Scheduling.OriginalEstimate): The amount of work required to complete a task. (Agile and CMMI) + - Completed Work (Microsoft.VSTS.Scheduling.CompletedWork): The amount of work that has been spent implementing a task. (Agile and CMMI) + - Remaining Work (Microsoft.VSTS.Scheduling.RemainingWork): This field is used to support burndown charts. + If your team project was created using the Visual Studio Scrum process template, only Remaining Work is defined in the task. + To learn more about adding fields, see Modify or add a field to support queries, reports, and workflow. +- Determine the unit of time used to track work and make sure it is used consistently across your team or organization. For example, you can track tasks using hours or days. +- Determine if you want to make rollup values read-only on the work item form. By making them read-only you prevent users from entering inaccurate data. You make fields read-only using the Control field Readonly attribute. \ No newline at end of file diff --git a/docs/report/powerbi/create-trend-charts.md b/docs/report/powerbi/create-trend-charts.md new file mode 100644 index 00000000000..e10e8758e00 --- /dev/null +++ b/docs/report/powerbi/create-trend-charts.md @@ -0,0 +1,94 @@ +--- +title: Create trend charts | VSTS +description: Create trend, burnup, and burndown charts in Power BI from data collected for VSTS +ms.assetid: 94080282-C697-4AF2-BD2E-414674701234 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 04/06/2016 +--- + +#Create trend charts + +VSTS + +Trend charts show progress or activity over time. Common types of trend charts include sprint burndowns or burnups, cumulative flow diagrams, and bug activity. + +## Story points burnup trend chart + +By following steps ![step 1](../_img/icons/step1.png) through ![step 4](../_img/icons/step4.png) of the [basic steps shown below](#basic-steps), you'll see the trend of story points as their added to the work item store. + +![Story Points VSTS trend chart in power bi](_img/powerbi-story-points-trend.png) + +Story points provide an estimate of the amount of work required to complete a user story ([Agile](../../work/guidance/agile-process.md) process) using any unit of measurement your team prefers, such as t-shirt size, story points, or time. + +If you use the [Scrum](../../work/guidance/scrum-process.md) or +[CMMI](../../work/guidance/cmmi-process.md) processes, you can create similar charts by filtering on the Effort or Size fields. + + +##Basic steps to create a trend chart +The following image shows the basic steps to create a trend chart. In step ![step 4](../_img/icons/step4.png), you expand the Fields sections to checkmark the X and then Y axis fields on which to create the report. Here we check Story Points for the X axis and the Date field for the Y axis. + +![Steps to create a trend chart: 1-Open report, 2-Edit report, 3-Add and label report, 4-Check the X and Y axis fields, 5-Change the chart type from to Linex, 6-Apply additional filters.](_img/powerbi-add-a-trend-chart.png) + +After you have your initial chart, you can change the chart type and apply additional filters as shown in the examples below. + +if you're new to Power BI, go [here to Connect to Power BI](connect-vso-pbi-vs.md). + +You can create Power BI trend charts for data stored in VSTS. To access similar charts for on-premises TFS, see [Create status and trend charts in Excel](../excel/create-status-and-trend-excel-reports.md). + +##Apply State filter + +To focus the trend chart to count only story points from active or in progress work items, add the state filter and check those values associated with being Closed, Completed, Cut, or Done. For example: + +![State filter for active or in progress work items in power bi](_img/powerbi-add-state-filter.png) + +Apply step ![step 5](../_img/icons/step5.png) and change the chart type from a column to a line chart, and your chart will look more like this one. +![Story Points by date, filter by State, line chart](_img/powerbi-story-points-filter-by-state-line.png) + +##Apply additional filters to create a burndown chart + +To change the trend chart to a burndown that focuses on a specific iteration, add the Iteration Path to the filter set and choose the iteration of interest. + +![Story Points burn-down chart](_img/powerbi-story-points-burndown-iteration.png) + +This chart indicates that most of the work was finished in the iteration, but there are still some story points assigned to the iteration that haven't been closed. Beware! These are things to investigate. + +You can also apply advanced filtering on the Date field to focus only on the start and end dates for your selected sprint. Here we add the Date field and set the advanced filters to: +- First option: **is on or after** the first day of the sprint
      And +- Second option: **is on or before** the last day of the sprint. + + +![State filter for active or in progress work items in power bi](_img/powerbi-advanced-date-filters.png) + +This changes the trend to the following: + +![Story Points by date, filter by State, line chart](_img/powerbi-story-points-burndown-iteration-date-filtered.png) + +This chart indicates that some work wasn't scoped until a day or two after the sprint started and that some work was added to the sprint a day or two before the sprint was started (indicated by the line starting at 150 on the first day instead of zero). Note also that by constraining it with the iteration and the date it ends nicely on the last day showing how many story points were not delivered. + +##Related notes + +The sprint burndown chart based on Story Points provides you with a daily update of your sprint progress when you don't break your stories down into tasks. You can update the chart further by adding Work Item Type as an additional filter to differentiate the story point count for bugs versus user stories. + + +###Get started using Power BI and the VSTS connector +- [Create dashboards and reports](report-on-vso-with-power-bi-vs.md) +- [What's available in the Power BI VSTS connector](vso-pbi-whats-available-vs.md) +- [Add a page to a Power BI report](https://support.powerbi.com/knowledgebase/articles/474804-add-a-page-to-a-power-bi-report) +- [Save a report in Power BI](https://support.powerbi.com/knowledgebase/articles/444112-save-a-report-in-power-bi) + + + +###Pin your chart to a dashboard + +To pin your trend chart to a dashboard, follow the steps provided in [Pin a tile to a Power BI dashboard from a report](https://support.powerbi.com/knowledgebase/articles/430323-pin-a-tile-to-a-power-bi-dashboard-from-a-report). + +###More about sprint burndown +To learn more about healthy and unhealthy sprint burndown charts, see [Sprint burndown](../../Work/scrum/sprint-burndown.md). + +###Additional chart resources: + +- [Create charts from flat-list queries](../charts.md) +- [Cumulative flow diagram](../guidance/cumulative-flow.md) diff --git a/docs/report/powerbi/data-connector-available-data.md b/docs/report/powerbi/data-connector-available-data.md new file mode 100644 index 00000000000..992b2197d72 --- /dev/null +++ b/docs/report/powerbi/data-connector-available-data.md @@ -0,0 +1,81 @@ +--- +title: Data available in Power BI | VSTS +description: Learn about what data is available in the Power BI content pack for Visual Studio Team Services (VSTS) +ms.technology: vs-devops-reporting +ms.prod: vs-devops-alm +ms.assetid: 8E92B372-B312-4BAD-960A-B3CB0202E2A1 +ms.manager: douge +ms.author: stansw +ms.date: 03/02/2017 +--- + +#Available data tables in the Power BI Content Pack for VSTS + +VSTS + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +To connect to the Analytics Services for VSTS from the Power BI Desktop, you must download the *Power BI Desktop January 2017 Update* or a newer version. You can download it from the official [Power BI Desktop download page](https://powerbi.microsoft.com/desktop/). + +The current release of the Data Connector supports custom fields added to the process references by a team project. + + + +## Currently available data + + + + + + + + + + + + + + + + + +
      DataDetails
      Work Items - Current stateLoad current state of Work Items.
      Work Items - HistoryLoad all changes that happened to work items in the last 30 days.
      Work Items - CustomizationLoad values of custom fields defined added to process templates.
      + +## Currently available tables + + + + + + + + + + + + + + +
      TableDescription
      Work Items - Today +

      Contains all Work Items. + Suffix "Today" indicates that it contains one days' worth of data in contrast to *Work Items - Last 30 Days* table, which loads also historical data. + Each column corresponds to a data field available in a work item type used in the team project. +

      +
      Work Items - Last 30 Days +

      Similar to the *Work Items - Today* table in that it contains the same column-fields, however, it loads work item history for the last 30 days, which can be used to create trend reports.

      +

      It has been modelled as a periodic snapshot fact table with one day period. + The grain of this table is the period, not the individual work item. + What this means is that a single Work Item can appear 30 times (once per day). + When working with this table you should partition the data by the Date column. + Additionally, it contains a field named Is Current, which can be used instead of the Date column if you are interested in only the current state of each work item. +

      +
      + +## Related notes +- [Power BI integration overview](overview.md) +- [Connect to VSTS with Power BI Data Connector](./data-connector-connect.md) +- [Data Connector - Example reports](./data-connector-examples.md) +- [Functions available in Power BI Data Connector](data-connector-functions.md) \ No newline at end of file diff --git a/docs/report/powerbi/data-connector-connect.md b/docs/report/powerbi/data-connector-connect.md new file mode 100644 index 00000000000..5be959f325c --- /dev/null +++ b/docs/report/powerbi/data-connector-connect.md @@ -0,0 +1,231 @@ +--- +title: Connect to Power BI Data Connector | VSTS +description: Step-by-step guidance on how to connect to Power BI Data Connector to access Visual Studio Team Services (VSTS) data +ms.assetid: 509ECCF2-E18E-4F14-B7EE-8802AB8938A2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: stansw +ms.date: 05/21/2017 +--- + +# Connect to VSTS with Power BI Data Connector + +VSTS + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +You import data from the Analytics Service for VSTS into Power BI using a data connector. + +## Import data + +1. Make sure you have *Power BI Desktop* *January 2017 Update* or a newer version. You can download it from the official [Power BI Desktop download page](https://powerbi.microsoft.com/desktop). + +2. Make sure you have [permissions required to access the Analytics service](../analytics/analytics-security.md). + +3. **Launch Power BI Desktop and get your data**. Select *Get Data* using one of the two options to access the Data Connector. + + You can either click *Get Data* button in the splash screen that opens up when you launch *Power BI.* + + ![](./_img/data-connector-get-data-1.png) + + Or, you can find a similar button in the ribbon in the *Home* section. + + ![](./_img/data-connector-get-data-1a.png) + +4. Select the Visual Studio Team Services (Beta) entry listed under the Online Services category, and click **Connect**. + + ![](./_img/data-connector-get-data-2.png) + +5. **Confirm acceptance of using the data connector that is in Preview**. While the data connector is in Preview you need to confirm that you are aware of the implications. + + Select *Don't warn me again for this connector* to avoid seeing it every time you want to use the connector. Then, click **Continue**. + + ![](./_img/data-connector-get-data-3.png) + +6. **Specify the basic parameters to connect to your data**. *VSTS account name*" and *Project name* are mandatory. + + ![](./_img/data-connector-get-data-4.png) + + - For *VSTS account name*, enter just the account name and not the full URL (e.g. use `fabrikam-fiber-inc` if the URL of your account is "`https://fabrikam-fiber-inc.visualstudio.com`"). + - For *Project name*, enter just the project name (e.g. use `Fabrikam-Fiber-Git` if the URL of your project is "`https://fabrikam-fiber-inc.visualstudio.com/Fabrikam-Fiber-Git`"). + - For *Area path(s)* (optional), enter the full path as it appears in the `Area` field of your work items and optionally add `\*` suffix to include all children. + > [!TIP] + > The *Area path(s)* parameter supports wildcards. You can add `\*` at the end of the path to include all its children. Also, you can specify multiple paths by entering each path separated by the `|` (vertical bar) character. + + ![](./_img/data-connector-get-data-5.png) + + > [!IMPORTANT] + > Don't confuse the team name with the project name, a common mistake. + > If the URL you use on the daily basis is "`https://fabrikam-fiber-inc.visualstudio.com/Fabrikam-Fiber-Git/Device`", then `Fabrikam-Fiber-Git` is the project name, whereas `Device` is the team name. + +7. **Sign in to the service**. Upon first-time access, you're required to sign in and have your credentials authenticated. Power BI Desktop saves your credentials so you will only have to do this once. + + Choose between these two authentication options: + - Select *Organizational account* if your organization is using Azure Active Directory to manage users. + - Select *Basic* if you are connecting to a personal account or you want to use personal access token. This option also support alternate credentials, but it is not recommended as unlike personal access tokens, this login doesn't expire and can't be scoped to limit access to your VSTS data. + + ![](./_img/data-connector-get-data-6.png) + + If you select *Organizational account,* enter your username and password into the standard login page. + + ![](./_img/data-connector-get-data-7.png) + +8. Click connect upon verification of your credentials. Upon successful login Power BI will verify if your user account has the right permissions to access the specified team project. If any errors arise, refer to the [Q & A](#q-a) section as it covers the most common problems. + + ![](./_img/data-connector-get-data-8.png) + +9. **Select tables to load**. Once your credentials are saved they will be used to fetch the list of available tables. To learn more about available tables, see [Available data tables in the Power BI Data Connector](data-connector-available-data.md). + + Click *Work Items - Today* table and wait for the preview to load. + It represents the current state of all Work Items in the project. + Columns are sorted alphabetically. Each column corresponds to a field. + + Select the checkbox next to *Work Items - Today* table and click **Edit** to enter query edit mode. + + > [!NOTE] + > We don't recommend that you click the *Load* button as it will load the whole table. + > Loading the whole table will succeed only if the number of Work Items is less than 200K. + > Otherwise the load operation will fail with an error message saying that the number of rows exceeded the allowed limit. + > For more information, see [How do I resolve error: *Query result exceeds maximum size...*](#QueryExceedsPreferedMaxSizeException) in the Q & A section. + + ![](./_img/data-connector-get-data-9.png) + +10. **Select relevant rows**. Just as you can [define work item queries in VSTS](../../work/track/using-queries.md) you can also select the Work Items that you are interested in using the *Power BI Query Editor*. The query editing experience differs from that of the web portal as it shows you a preview of the dataset after each filter or transformation step you make. + + > [!TIP] + > Filtering rows can significantly decrease the load time and speed up queries against the dataset. + > One of the best ways to reduce the number of rows is to set filter on `State` column. + + Although the *Work Items - Today* table is already filtered to a selected *Project* and *Area Path*, it can still result in a very large dataset. Therefore, we recommend you add additional filter steps. + + You can do this and quickly reduce the number of rows by setting the filter on `State` column. + a. Scroll horizontally to see the `State` column. + b. Click the filter drop-down button. + c. Select active states. + d. Click **OK** to accept the selection. + + ![](./_img/data-connector-get-data-10a.png) + + You can combine many filters by applying them in a sequence. + For example, in order to add additional filterS on `Work Item Type` you can repeat the steps from above. + + ![](./_img/data-connector-get-data-11a.png) + +11. **Select relevant columns**. As you can see in the preview, the *Work Items - Today* table + has many columns, one for each field available in any Work Item used in the project. + Depending on the process referenced by the team project—[Agile](../../work/guidance/agile-process.md), [Scrum](../../work/guidance/scrum-process.md), or [CMMI](../../work/guidance/cmmi-process.md)—the number of columns can be very large, reaching even hundreds. Of course, not all of them will be relevant to your reporting scenarios. + + > [!TIP] + > By selecting only those columns of interest you decrease the load time, speed up queries, and make the data model easier to work with. + + Follow these steps to select relevant columns: + a. While holding `Ctrl` button on the keyboard scroll and click column headers to select columns you care about. + b. Once all the columns are selected, right-click the header to open context menu. + c. Select `Remove Other Columns` to insert selection step. + + ![](./_img/data-connector-get-data-12a.png) + +12. **Close the Query Editor and apply your changes**. After filtering rows and selecting columns you can either finish and click *Close & Apply* or add additional transformation steps. + + > [!IMPORTANT] + > Power BI automatically translates filtering and columns selection steps into queries to the underlying data source provided that they appear at the beginning of *Applied steps* list. Always start with filtering and columns selection before you apply more advanced transformations such as adding custom columns. + + ![](./_img/data-connector-get-data-13a.png) + +13. **Wait for the data to load**. Closing the *Query Editor* triggers the load operation. + You can observe its progress by looking at the status messages, which appear directly under + the table name. Should you see any errors, refer to the [Q & A](#q-a) section. + + ![](./_img/data-connector-get-data-14.png) + +14. **Create reports based on the loaded data**. After the load operation finishes, you can explore the data by creating custom reports. For examples of common reports, see [Data Connector - Example reports](data-connector-examples.md). + + ![](./_img/data-connector-get-data-15.png) + + +## Related notes +- [Permissions required to access the Analytics service](../analytics/analytics-security.md) +- [Power BI integration overview](overview.md) +- [Analytics Service security](../analytics/analytics-security.md) +- [Authenticate your identity with personal access tokens](../../accounts/use-personal-access-tokens-to-authenticate.md) +- [Available data tables in the Power BI Data Connector](data-connector-available-data.md) +- [Data Connector - Example reports](data-connector-examples.md) + + +## Q & A + + + +### Q: How should I read error messages coming from the connector? +**A:** Reading error messages coming from the connector can be challenging because they typically contain additional contextual information. +If the load operation fails, then the message will start with *Failed to save modifications to the server...*. +When you see it, then search for **[DataSource.Error] Visual Studio Team Services:**. +The following text is the real error message returned from the connector. + +In the example below the most important part of the error message is: + +>Query result exceeds maximum size. Please reduce the number of records by applying additional filters. + +![QueryExceedsPreferedMaxSizeException](./_img/QueryExceedsPreferedMaxSizeException.png) + + +### Q: How do I resolve error: *The Analytics Service is in preview and only available to select customers...*? + +You encountered an error while trying to connect. + +> **The Analytics Service is in preview and only available to select customers of VSTS at this time.** If your account has been enabled please contact the Microsoft employee who set up the service for assistance. + +**A:** Data Connector is built on top of the Analytics Service, which is currently in the preview stage. + +![The Analytics Service is in preview and only available to select customers...](./_img/AnalyticsNotEnabledError.png) + + + +### Q: How do I resolve error: *Query result exceeds maximum size. Please reduce the number of records by applying additional filters*? + +**A:** You will get the following error if the number or records exceeds 200k. +> Failed to save modifications to the server. Error returned: 'OLE DB or ODBC error: +> [DataSource.Error] Visual Studio Team Services: Request failed: The remote server returned an error: (400) Bad Request. +> (**Query result exceeds maximum size. Please reduce the number of records by applying additional filters**).'. + + +This error typically occurs when your project has a lot of work items and you haven't specified filters that would bring the number of rows to an acceptable level. If you encounter this error then go to step [10. Select relevant rows](#select-relevant-rows) and update existing or add more filter steps. + +![Query result exceeds maximum size. Please reduce the number of records by applying additional filters](_img/QueryExceedsPreferedMaxSizeException.png) + + + +### Q: How do I resolve error: *The user was not authorized*? + +> The user was not authorized. + +**A:** You can encounter this error if you try to access a team project to which you don't have permissions. + +![The user was not authorized.](_img/AccessDeniedError.png) + + +### Q: How do I resolve error: *Access to the resource is forbidden*? + +> Access to the resource is forbidden. + +**A:** You can encounter this error if you have access to a given project but you do not have the *View analytics* permissions. Please work with your project administrator to get these permissions. +For more information about the security model, see [Analytics Service security](../analytics/analytics-security.md). + +![Access to the resource is forbidden.](_img/AnalyticsAccessCheckException.png) + + +### Q: How do I resolve error: *Project "X" does not exist or you do not have permissions to access it*? + +> We encountered an error while trying to connect.
      +> Details: Invalid "Project" parameter. **Project "X" does not exist or you do not have permissions to access it.**. + +**A:** This error indicates that the value you entered for *Project name* does not correspond to any project. A common mistake users can make is to confuse the team project name with a team name. + +If the URL you use on a daily basis is "`https://fabrikam-fiber-inc.visualstudio.com/Fabrikam-Fiber-Git/Device`", then `Fabrikam-Fiber-Git` is the project name and it should be used in the parameter, whereas `Device` is the team name. + +![ProjectNotFoundError](_img/ProjecNotFoundError.png) + + + + diff --git a/docs/report/powerbi/data-connector-examples.md b/docs/report/powerbi/data-connector-examples.md new file mode 100644 index 00000000000..bb77a38d4e7 --- /dev/null +++ b/docs/report/powerbi/data-connector-examples.md @@ -0,0 +1,70 @@ +--- +title: Example reports for Power BI Data Connector | VSTS +description: Guidance on developing reports based on examples when using the Power BI Data Connector and the Analytics Service for VSTS +ms.assetid: 3356B3EF-E9AB-4B42-8738-E58AA34A4B4F +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: stansw +ms.date: 01/17/2017 +--- + +# Example reports for Power BI Data Connector + +VSTS + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Steps are provided to support generating the following example reports: + +- [Number of Work Items](#number-of-work-items) +- [Number of Bugs by Area Path and Priority](#number-of-bugs-by-area-path-and-priority) + +Prior to generating these reports, you must first [connect to the Analytics Services for VSTS using the Power BI data connector](data-connector-connect.md). + +> [!TIP] +> Use the search box if you are working with tables that contain many columns. + + +## Number of Work Items + +1. Load `Work Items - Today` table with columns: `Work Item Count`. + +2. Select *Card* visual. + + ![](./_img/data-connector-recipes-count-1.png) + +3. Search for `Work Item Count` and drag it to the `Fields`. + + ![](./_img/data-connector-recipes-count-2.png) + + +## Number of Bugs by Area Path and Priority + +1. Load `Work Items - Today` table with columns: `Area Path`, `Priority`, `Work Item Count`, `Work Item Type`. + +2. Select `Matrix` visual. + + ![](./_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-1.png) + +3. Search for `Area Path` and drag it to `Rows`. + + ![](./_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-2.png) + +4. Search for `Priority` and drag it to `Columns`. + + ![](./_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-3.png) + +5. Search for `Work Item Count` and drag it to `Values`. + + ![](./_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-4.png) + +6. Search for `Work Item Type`, drag it to `Visual level filters` and select `Bugs`. + + ![](./_img/data-connector-recipes-number-of-bugs-by-area-path-and-priority-5.png) + +## Related notes +- [Power BI integration overview](overview.md) +- [Connect to VSTS with Power BI Data Connector](./data-connector-connect.md) +- [Available data tables in the Power BI Content Pack](data-connector-available-data.md) +- [Functions available in Power BI Data Connector](data-connector-functions.md) \ No newline at end of file diff --git a/docs/report/powerbi/data-connector-functions.md b/docs/report/powerbi/data-connector-functions.md new file mode 100644 index 00000000000..5cabbfdb2c3 --- /dev/null +++ b/docs/report/powerbi/data-connector-functions.md @@ -0,0 +1,249 @@ +--- +title: Functions available in Power BI Data Connector | VSTS +description: Description of functions available from the Power BI Data Connector and the Analytics Service for Visual Studio Team Services +ms.assetid: EC735BA2-24C9-4BA3-B35E-2CE9D2F1D7F1 +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: stansw +ms.date: 01/17/2017 +--- + +# Functions available in Power BI Data Connector + +VSTS + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +The Data Connector for VSTS contributes functions which can be used by query authors. For example, VSTS.Feed adds to the functionality of OData.Feed by handling unique requirements of the VSTS OData feed such as authentication. We strongly recommend using VSTS.Feed and using the latest version of Power BI when possible. + + + + + + + + + + + + + + + + +
      FunctionDescription
      VSTS.FeedAllows for users to easily execute OData queries against Analytics in Visual Studio Team Services.
      VSTS.ContentsIntended for more advanced scenarios, VSTS.Contents returns the contents downloaded from the URL for the Analytics Service for VSTS as a binary value.
      + +## VSTS.Feed +Allows for users to easily execute OData queries against Analytics in Visual Studio Team Services. + +The `VSTS.Feed` function is similar to the standard `OData.Feed` function in terms of the arguments it accepts and the format of the returned value. For more information, see [Power Query (M) Formula Reference - OData.Feed](https://msdn.microsoft.com/library/mt260868.aspx). + +> [!TIP] +> If you are already using `OData.Feed` to access data from VSTS, then just replace it with `VSTS.Feed` to leverage Data Connector authentication. +> This will also inform Power BI that these requests are referencing the same data source and you'll be able to combine the data without violating the single data source constraints for refreshing data sets in the Power BI.com. + +### Arguments for VSTS.Feed + + + + + + + + + + + + + + +
      ArgumentDescription
      urlA URL to the OData endpoint of the Analytics Service.
      optionsAn options record to control the behavior of this function.
      + +### Options fields for VSTS.Feed + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldDescription
      MaxSize + Controls the max size of the table the client is interested in. + If request exceeds this limit then the server can fail the request immediately. + Default value is zero, which tells the server to use its default value. +
      QueryProgrammatically add query parameters to the URL without having to worry about escaping.
      ShowHiddenFlag which indicates if all tables (including snapshot) should be shown.
      ShowOnlyReportingViewsFlag which indicates if only EntitySets with IsReportingView annotation should be returned.
      TimeoutSpecifying this value as a duration will change the timeout for an HTTP request. The default value is 600 seconds.
      VersionVersion of the data model. This option is primary for diagnostics.
      + +### Examples for VSTS.Feed +Use `VSTS.Feed` function to count the number of work items in a project. + +1. Create a new blank query and click on "Advanced Editor" in the Power BI Query Editor +2. In the editor add the text below to load the feed for `fabrikam-fiber-inc` account and `Fabrikam-Fiber-Git` project using full URL to OData endpoint. +3. Select relevant columns using "Choose Columns", in this case select `Count`. + +Basic Query: +``` +let + Source = VSTS.Feed("https://fabrikam-fiber-inc.analytics.visualstudio.com/Fabrikam-Fiber-Git/_odata/" + & "WorkItems?$apply=aggregate($count as Count)") +in + Source +``` + +Query with Columns Selected: +``` +let + Source = VSTS.Feed("https://fabrikam-fiber-inc.analytics.visualstudio.com/Fabrikam-Fiber-Git/_odata/" + & "WorkItems?$apply=aggregate($count as Count)"), + #"Removed Other Columns" = Table.SelectColumns(Source,{"Count"}) +in + #"Removed Other Columns" +``` + +Use `VSTS.Feed` function to load a count of User Stories for each Iteration Path. + +1. Create a new blank query and click on "Advanced Editor" in the Power BI Query Editor +2. In the editor add the text below to load the feed for `fabrikam-fiber-inc` account and `Fabrikam-Fiber-Git` project using full URL to OData endpoint. +3. Select relevant columns using "Choose Columns", in this case expand 'Iteration' and select 'Iteration Path' then select `Count`. + +Basic Query: +``` +let + #"Source" = VSTS.Feed("https://fabrikam-fiber-inc.analytics.visualstudio.com/Fabrikam-Fiber-Git/_odata/" + & "WorkItems?$apply=groupby((Iteration/IterationPath), aggregate(Count with sum as Count))") +in + #"Source" +``` + +Query with Columns Selected: +``` +let + #"Source" = VSTS.Feed("https://fabrikam-fiber-inc.analytics.visualstudio.com/Fabrikam-Fiber-Git/_odata/" + & "WorkItems?$apply=groupby((Iteration/IterationPath), aggregate(Count with sum as Count))"), + #"Expanded Iteration" = Table.ExpandRecordColumn(Source, "Iteration", {"IterationPath"}, {"Iteration.IterationPath"}), + #"Removed Other Columns" = Table.SelectColumns(#"Expanded Iteration",{"Count", "Iteration.IterationPath"}) +in + #"Removed Other Columns" +``` + +Use VSTS.Feed function to load detailed information about bugs. + +1. Create a new blank query and click on "Advanced Editor" in the Power BI Query Editor +2. In the editor add the text below to load the feed for `fabrikam-fiber-inc` account and `Fabrikam-Fiber-Git` project using full URL to OData endpoint. +3. Select relevant columns using "Choose Columns", in this case select `WorkItemID` and `State`. + +Basic Query: +``` +let + #"Source" = VSTS.Feed("https://fabrikam-fiber-inc.analytics.visualstudio.com/Fabrikam-Fiber-Git/_odata/" + & "WorkItems?$select=WorkItemId,State&$filter=WorkItemType eq 'Bug'") +in + #"Source" +``` +Query with Columns Selected: +``` +let + #"Source" = VSTS.Feed("https://fabrikam-fiber-inc.analytics.visualstudio.com/Fabrikam-Fiber-Git/_odata/" + & "WorkItems?$select=WorkItemId,State&$filter=WorkItemType eq 'Bug'"), + #"Removed Other Columns" = Table.SelectColumns(Source,{"WorkItemId", "State"}) +in + #"Removed Other Columns" +``` + +## VSTS.Contents +Advanced function which returns the contents downloaded from the URL for the Analytics Service for VSTS as a binary value. + +The `VSTS.Contents` function is similar to the standard `Web.Contents` function in terms of the arguments it accepts and the format of the returned value. +For more information please refer to: [Power Query (M) Formula Reference - Web.Contents](https://msdn.microsoft.com/library/mt260892.aspx). + +> [!TIP] +> If you are already using `Web.Contents` to access data from VSTS (REST API or OData), then just replace it with `VSTS.Contents` to leverage Data Connector authentication. +> This will also inform Power BI that these requests are referencing the same data source and you'll be able to combine the data without violating the single data source constraints in Power BI Service. + + +### Arguments for VSTS.Contents + + + + + + + + + + + + + + +
      ArgumentDescription
      urlURL to one of the VSTS service endpoints.
      optionsAn options record to control the behavior of this function.
      + +### Options fields for VSTS.Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      FieldDescription
      IsRetrySpecifying this logical value as true will ignore any existing response in the cache when fetching data.
      ManualStatusHandling Specifying this value as a list will prevent any builtin handling for HTTP requests whose response has one of these status codes.
      MaxSize + Controls the max size of the table the client is interested in. + If request exceeds this limit then server can fail the request immediately. + Default value is zero, which tells the servers server to use its default value. +
      QueryProgrammatically add query parameters to the URL.
      RelativePath Specifying this value as text appends it to the base URL before making the request.
      TimeoutSpecifying this value as a duration will change the timeout for an HTTP request. The default value is 600 seconds.
      VersionVersion of the data model. This option is primary for diagnostics.
      + + + +## Related notes +* [Power Query (M) Formula Reference](https://msdn.microsoft.com/library/mt270235.aspx) +* [Power Query (M) Formula Reference - Accessing data functions](https://msdn.microsoft.com/library/mt296615.aspx) \ No newline at end of file diff --git a/docs/report/powerbi/index.md b/docs/report/powerbi/index.md new file mode 100644 index 00000000000..a8451ce54a4 --- /dev/null +++ b/docs/report/powerbi/index.md @@ -0,0 +1,61 @@ +--- +title: VSTS & Power BI | VSTS +description: Index to topics for generating PowerBI charts, reports, and dashboards for VSTS and and Team Foundation Server (TFS) +ms.assetid: +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 08/03/2017 +--- + +# VSTS & PowerBI + + +VSTS + +>[!NOTE] +> **Feature availability:** Using the Power BI Content Pack, you can generate PowerBI dashboards and reports. The Power BI Data Connector, however, requires access to the Analytics Service. The Analytics Service is in a closed preview at this time. +> +> Both the Power BI Content Pack and Power BI Data Connector are only available for VSTS. + + + + +## How-to Guides + +- [Assign permissions (Security)](/vsts/report/analytics/analytics-security?toc=/vsts/report/powerbi/toc.json) + +### Power BI Content Pack + +- [Connect to VSTS with Power BI Content Pack](connect-vso-pbi-vs.md) +- [Create dashboards and reports](report-on-vso-with-power-bi-vs.md) +- [Create trend charts](create-trend-charts.md) +- [Create rollup charts](create-rollup-charts.md) + +### Power BI Data Connector + +- [Connect to Power BI via the Data Connector](data-connector-connect.md) +- [Power BI desktop and OData aggregations](/vsts/report/analytics/using-odata-aggregations-with-power-bi-desktop?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json) +- [Share reports, publish to PowerBI.com](/vsts/report/analytics/publishing-power-bi-desktop-to-power-bi?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json) + + +## Reference +- [Power BI available data](vso-pbi-whats-available-vs.md) +- [Data Connector available functions](data-connector-functions.md) +- [Analytics Service overview](/vsts/report/analytics/overview-analytics-service?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json) + + +## Resources + +- [Dashboards, charts, & widgets](/vsts/report/index) +- [PowerBI Desktop](https://powerbi.microsoft.com/documentation/powerbi-desktop-get-the-desktop/) +- [PowerBI Documentation](https://powerbi.microsoft.com/documentation/powerbi-landing-page/) +- [Insights Lab Power BI Widget](https://marketplace.visualstudio.com/items?itemName=InsightsLab.powerbiWidget) + + + diff --git a/docs/report/powerbi/overview.md b/docs/report/powerbi/overview.md new file mode 100644 index 00000000000..cafc6937e42 --- /dev/null +++ b/docs/report/powerbi/overview.md @@ -0,0 +1,206 @@ +--- +title: Power BI integration overview | VSTS +description: Overview of the different integration options to connect to Power BI and VSTS. +ms.assetid: 8026A5ED-CD58-417A-913F-72A20272E7DC +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: stansw +ms.topic: get-started-article +ms.date: 08/23/2017 +--- + +# Power BI integration overview + +VSTS + +[!INCLUDE [temp](../_shared/analytics-preview.md)] + +Gain insight and analyze the progress and quality of your project by connecting Power BI to the data collected and stored in VSTS. +Currently, you can choose between two different options depending on your reporting requirements. + +The first option, the **Content Pack**, contains a complete analytic data model (tables, relationships and measures), a set of default reports and a default dashboard. Reports and dashboard are fully customizable but the data model is not. All VSTS customers can use the Content Pack to generate dashboards and reports. + +This option is great for users who want to get quick insights without the need of building custom models. The data model is shared between all users and therefore does not support process customization, this is one of the primary reasons to consider the second option. To learn more, see [Connect to VSTS with Power BI Content Pack](connect-vso-pbi-vs.md). + + +The second option, **Data Connector**, has been released with the *Power BI Desktop January 2017 Update*. +This option is available in the *Power BI Desktop*. It allows users to select the data they are interested in, which includes support for a fully customized data model by including project-specific fields, work item customizations, and adding tables from additional data sources. + +Since you select which data to load, this approach works well for very large accounts, that could not use the *Content Pack* in the past. To learn more, see [Connect to VSTS with Power BI Data Connector](data-connector-connect.md). + +The following table contains a detailed comparison of both options. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Content PackData Connector
      First release dateMay 27, 2015January 9, 2017
      Last update dateSeptember 2, 2015-
      Data Source[VSTS REST API](https://www.visualstudio.com/en-us/docs/integrate/api/overview)[Analytics Service](../analytics/overview-analytics-service.md) 1
      Power BI Servicecheckedchecked 2
      Power BI Desktopuncheckedchecked
      + Available Data +
      Work Items - Current statecheckedchecked
      Work Items - Historycheckedchecked
      Work Items - Customizationuncheckedchecked
      Source Control - Gitcheckedunchecked
      Source Control - TFVCcheckedunchecked
      Builds - XAMLcheckedunchecked
      + Elements +
      Tablescheckedchecked
      Relationshipscheckedunchecked
      Measurescheckedunchecked
      Reportscheckedunchecked
      Dashboardcheckedunchecked
      Power Query Functionsuncheckedchecked
      + Authentication +
      Microsoft Account (Live ID)checkedchecked
      Azure Active Directory (AAD)checkedchecked
      OAuthcheckedchecked
      Personal access tokenuncheckedchecked
      Alternate credentialsuncheckedchecked
      + Other +
      Support for large accounts 3uncheckedchecked
      Support for custom measuresuncheckedchecked
      Support for mashup with additional data sources 4uncheckedchecked
      + +**Notes:** +1. The Analytics Service is in close preview at this time. +2. The data model is created in *Power BI Desktop*. Then, it can be published and refreshed in *Power BI Service*. +3. There is a limit on how long a refresh operation can take before it gets terminated by the system. +Using the number of work items as a proxy measure for the size of account, an account is considered "large" accounts when it has over 400k work items. +4. Power BI Desktop allows users to load tables from different sources and combine them into a single data model (e.g. custom working days calendar). + + + +## Related notes + +To get started using Power BI and the Analytics service, make sure you have [permissions required to access the Analytics service](../analytics/analytics-security.md) and then review the [knowledge base of articles](https://support.powerbi.com/). + +- [Connect to services with content packs for Power BI](https://powerbi.microsoft.com/documentation/powerbi-content-packs-services/) +- [Connect to VSTS with Power BI Data Connector](./data-connector-connect.md) +- [Data Connector - Example reports](./data-connector-examples.md) +- [Functions available in Power BI Data Connector](data-connector-functions.md) +- [Available data tables in the Power BI Content Pack](data-connector-available-data.md) diff --git a/docs/report/powerbi/report-on-vso-with-power-bi-vs.md b/docs/report/powerbi/report-on-vso-with-power-bi-vs.md new file mode 100644 index 00000000000..9bc5be197f8 --- /dev/null +++ b/docs/report/powerbi/report-on-vso-with-power-bi-vs.md @@ -0,0 +1,90 @@ +--- +title: Dashboards and reports using Power BI | VSTS +description: Learn about default reports and how to refresh datasets, create reports and dashboards from Visual Studio Team Services (VSTS) data using Power BI +ms.technology: vs-devops-reporting +ms.prod: vs-devops-alm +ms.assetid: BBCB1E19-F2D2-4C52-BE8C-7CEF8A7FDB0B +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + + +# Create Power BI dashboards and reports +**VSTS** + +You can create dashboards, individual reports, or explore data collected for your VSTS account once you [connect to Power BI](connect-vso-pbi-vs.md). As the Power BI data model for VSTS grows to include more features you'll have access to more advanced reporting. As Power BI is upgraded, it will provide you with additional visualizations and capabilities over time without any upgrades. + +Prior to working with VSTS data, review [Power BI - Guided Learning](https://powerbi.microsoft.com/en-us/guided-learning/). + +## Get started +After getting connected to VSTS you will see an initial dashboard. On the left side of the screen you will notice Dashboards, Reports and Datasets. + +![Dashboards, Reports and Datasets](_img/vs-team-services-power-bi-opened.png) + +These are related in the following way: Dashboards contain charts that are based on Power Q&A or charts contained in a report. Reports contain charts based on data contained in the dataset. + +Currently, a report can be based on a single dataset. You can create as many reports based on a dataset as you want. Dashboards can contain charts from one or more reports or Power Q&A questions. + +> [!NOTE] +> Consider renaming the dataset, report and dashboard immediately after the data finishes loading. Every time you click **Get Data**, new data is imported with the name "VSTS" and another dataset, report and dashboard is created. This can become confusing very quickly. +> +> A good habit is to rename the datasets based on either the account or the project name. For example, using Fabrikam as the account or Fabrikam.projectA to differentiate a project will make using Power BI much easier. + + + +## Work with datasets +Refer to [Get started with Power BI](https://powerbi.microsoft.com/documentation/powerbi-service-get-started) for information on working with datasets. + +##Work with reports +Reports are at the heart of Power BI and provide the basis for dashboards. Dashboards are the shareable component of Power BI. See the Power BI documentation on [Reports](https://powerbi.microsoft.com/en-us/documentation/powerbi-service-reports/) for more information. + +###Understand the default report +The VSTS content pack generates a single report with several pages. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Report pageDescription
      Open Bug StatusThis is a general bug status report which is applicable to all three of the [out-of-the-box processes (Agile, CMMI, and Scrum](../../Work/guidance/choose-process.md). All charts exclude closed bugs (State=Closed or Done).
      Git ActivityProvides source control file information for a team project created to use Git. Report pages show data from the last 30 days only.
      (Team Foundation) Version ControlProvides source control file information for a team project created to use Team Foundation version control (TFVC).
      Builds (Xaml)Information related to automated builds. This does not include the latest build engine released with TFS 2015 (formerly Build v.Next).
      Agile Project Status * basic report that details data pertinent to a team project created with a version of the [Agile process](../../Work/guidance/agile-process.md).
      Scrum Project Status * basic report that details data pertinent to a team project created with a version of the [Scrum process](../../Work/guidance/scrum-process.md).
      CMMI Project Status * A basic report that details data pertinent to a team project created with a version of the [CMMI process](../../Work/guidance/cmmi-process.md).
      Pull RequestsProvides information related specifically to pull requests for a team project created to use Git.
      + + * Delete any project status report pages that don't apply to your particular situation and update the dashboard as appropriate. + +### Edit the default report +For information on how to edit the default report, see the [Power BI documentation](https://powerbi.microsoft.com/en-us/documentation/powerbi-service-the-report-editor-take-a-tour/). + +## Work with Dashboards +For help in creating and managing Dashboards, see the [Dashboards in the Power BI service](https://powerbi.microsoft.com/en-us/documentation/powerbi-service-dashboards/). \ No newline at end of file diff --git a/docs/report/powerbi/toc.yml b/docs/report/powerbi/toc.yml new file mode 100644 index 00000000000..c03aa8c6dd9 --- /dev/null +++ b/docs/report/powerbi/toc.yml @@ -0,0 +1,54 @@ +- name: "VSTS & PowerBI" + href: index.md +- name: Overview + items: + - name: Power BI integration overview + href: /vsts/report/powerbi/overview?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json +- name: How-to Guides + items: + - name: Client authentication + href: /vsts/report/analytics/client-authentication-options?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: Power BI Content Pack + items: + - name: Connect to VSTS with Power BI Content Pack + href: /vsts/report/powerbi/connect-vso-pbi-vs?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: Create dashboards + href: /vsts/report/powerbi/report-on-vso-with-power-bi-vs?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: Create trend charts + href: /vsts/report/powerbi/create-trend-charts?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: Create rollup charts + href: /vsts/report/powerbi/create-rollup-charts?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: Power BI Data Connector + items: + - name: Assign permissions (Security) + href: /vsts/report/analytics/analytics-security?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: Connect to VSTS + href: data-connector-connect.md + - name: Access data through Power BI desktop + href: /vsts/report/analytics/access-analytics-power-bi?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: Power BI desktop and OData aggregations + href: /vsts/report/analytics/using-odata-aggregations-with-power-bi-desktop?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: "Share reports, publish to PowerBI.com" + href: /vsts/report/analytics/publishing-power-bi-desktop-to-power-bi?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json +- name: Samples + items: + - name: Power BI example reports + href: /vsts/report/powerbi/data-connector-examples?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json +- name: Reference + items: + - name: Power BI available data + href: /vsts/report/powerbi/vso-pbi-whats-available-vs?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: Data Connector available functions + href: /vsts/report/powerbi/data-connector-functions?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json + - name: Analytics Service overview + href: /vsts/report/analytics/overview-analytics-service?toc=/vsts/report/powerbi/toc.json&bc=/vsts/report/powerbi/breadcrumb/toc.json +- name: Resources + items: + - name: "Dashboards, charts, & widgets" + href: /vsts/report/index + - name: PowerBI Desktop + href: https://powerbi.microsoft.com/documentation/powerbi-desktop-get-the-desktop/ + - name: PowerBI Documentation + href: https://powerbi.microsoft.com/documentation/powerbi-landing-page/ + - name: Insights Lab Power BI Widget + href: https://marketplace.visualstudio.com/items?itemName=InsightsLab.powerbiWidget diff --git a/docs/report/powerbi/vso-pbi-whats-available-vs.md b/docs/report/powerbi/vso-pbi-whats-available-vs.md new file mode 100644 index 00000000000..eb89fd3765e --- /dev/null +++ b/docs/report/powerbi/vso-pbi-whats-available-vs.md @@ -0,0 +1,197 @@ +--- +title: Data available in Power BI | VSTS +description: Learn about what data is available in the Power BI connector for Visual Studio Team Services (VSTS) +ms.technology: vs-devops-reporting +ms.prod: vs-devops-alm +ms.assetid: 94233019-F353-434C-9D90-6FD736CC818E +ms.manager: douge +ms.author: kaelli +ms.date: 03/02/2017 +--- + +#What is available in the Power BI Content Pack for VSTS + +VSTS + +Power BI Content Pack for VSTS gathers data from different feature areas and combines them into a single coherent analytical model. + +##Currently available data + + + + + + + + + + + + + + + + + + + + + +
      DataDetails
      Work ItemsCurrent state, [trend data](create-trend-charts.md), and [rollup](create-rollup-charts.md)
      BuildsXAML builds including build requests, queues and details
      Source Control - GitCommits, repositories, pull requests
      Source Control - TFVCChangesets, files, file changes and branches
      + + +##Work with the data model +The data model has several different sets of tables related to main feature areas. +These tables are described here along with their basic measures. + +###General purpose + + + + + + + + + + + + + + + + + + + + + +
      TableDescription
      Dataset detailsContains information on when the data in Power BI was last updated and the version of the VSTS connector data model being used.
      DatesRelates to pull requests (Create Timestamp) and work items (Created Timestamp).
      ProjectsAllows you to determine which project code check-ins and pull requests happened as well as serving as a filter against all work items.
      UsersDetailed user information for use with work items, pull requests, changesets and commits.
      + + +###Team Foundation version control + + + + + + + + + + + + + + + + + + + + + + +
      TableDescription
      BranchesInformation on branches, including branch count.
      ChangesetsInformation on changesets including (but not limited to) measures such as the count of changesets, changesets in the last 30 days, count of changesets by a given author.
      File ChangesThe type of change made against the file (add, change, delete) and associated measures.
      FilesFile path and extension information on checked-in files.
      + +###Git + + + + + + + + + + + + + + + + + + +
      TableDescription
      CommitsInformation on commits such as the number of files added/deleted/edited, number of projects with commits and commit counts.
      Pull RequestsInformation on pull requests including age, count, authors and status.
      RepositoriesInformation on the repos per project including name, count and by growth and commits.
      + +###XAML Builds + + + + + + + + + + + + + + + + + + + + + + +
      TableDescription
      Xaml Build DefinitionsBuild definitions including how the build is triggered.
      Xaml Build QueuesInformation build queues including if they are enabled and their status.
      Xaml Build RequestsInformation on build requests including build duration, percentiles, number of builds, how long the builds were queued for and retry reasons if the build failed.
      Xaml BuildsAll of the details regarding a build. This includes builds that failed and passed, error codes and messages, build quality and build durations.
      + +###Work Items +All individual work item tables have the following measures: + +* Count of work items. This column name is the same as the table name. For example the Bugs table has a measure called "Bugs". + + +Other tables may include measures specific to that work item type. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      TableDescription
      Parent BugsContains information relating to bugs and includes Effort, Original Effort, Remaining Work, Size and Story Points values.
      Parent Change RequestsContains information relating to Change requests and includes the Original Estimate value.
      Parent FeaturesContains information relating to Features and includes Business Value, Days Past Target and Days Until Target values.
      Parent IssuesContains information relating to Issues and includes the Original Estimate value.
      Parent Product Backlog ItemsContains information relating to Product Backlog Items and includes Business Value and Effort values.
      Parent RequirementsContains information relating to Requirements and includes Original Estimate and Size values.
      Parent User StoriesContains information relating to User Stories and includes the Story Points value.
      Work ItemsThis table contains all work items, regardless of type. Work items in any table can be filtered or sub-divided by values in this table. The Work Items count in this table is an overall count and can be broken down using the Work Item Type field. This table contains all of the System.* fields.
      + +##Related notes + +- [Create rollup charts](create-rollup-charts.md) +- [Create trend charts](create-trend-charts.md) diff --git a/docs/report/sharepoint-dashboards/_img/alm_pg_portalenabled.png b/docs/report/sharepoint-dashboards/_img/alm_pg_portalenabled.png new file mode 100644 index 00000000000..7326168c7ca Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/alm_pg_portalenabled.png differ diff --git a/docs/report/sharepoint-dashboards/_img/alm_pg_portalsettings.png b/docs/report/sharepoint-dashboards/_img/alm_pg_portalsettings.png new file mode 100644 index 00000000000..f7e73b9c9a8 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/alm_pg_portalsettings.png differ diff --git a/docs/report/sharepoint-dashboards/_img/alm_pg_portalwebsite.png b/docs/report/sharepoint-dashboards/_img/alm_pg_portalwebsite.png new file mode 100644 index 00000000000..555ab54909a Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/alm_pg_portalwebsite.png differ diff --git a/docs/report/sharepoint-dashboards/_img/alm_pg_processguid_sp.png b/docs/report/sharepoint-dashboards/_img/alm_pg_processguid_sp.png new file mode 100644 index 00000000000..7b9e2bbe315 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/alm_pg_processguid_sp.png differ diff --git a/docs/report/sharepoint-dashboards/_img/alm_pg_processguid_website.png b/docs/report/sharepoint-dashboards/_img/alm_pg_processguid_website.png new file mode 100644 index 00000000000..920d2510b14 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/alm_pg_processguid_website.png differ diff --git a/docs/report/sharepoint-dashboards/_img/alm_pg_scrum_dshbrdworkitems.png b/docs/report/sharepoint-dashboards/_img/alm_pg_scrum_dshbrdworkitems.png new file mode 100644 index 00000000000..6ccfbb45f79 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/alm_pg_scrum_dshbrdworkitems.png differ diff --git a/docs/report/sharepoint-dashboards/_img/alm_pg_scrum_releasedashbrd.png b/docs/report/sharepoint-dashboards/_img/alm_pg_scrum_releasedashbrd.png new file mode 100644 index 00000000000..7ea8ca4c707 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/alm_pg_scrum_releasedashbrd.png differ diff --git a/docs/report/sharepoint-dashboards/_img/alm_pg_showprojectportal.png b/docs/report/sharepoint-dashboards/_img/alm_pg_showprojectportal.png new file mode 100644 index 00000000000..cc870d376a6 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/alm_pg_showprojectportal.png differ diff --git a/docs/report/sharepoint-dashboards/_img/alm_te_githome.png b/docs/report/sharepoint-dashboards/_img/alm_te_githome.png new file mode 100644 index 00000000000..c19333eb0b5 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/alm_te_githome.png differ diff --git a/docs/report/sharepoint-dashboards/_img/icon_autofilloptions.gif b/docs/report/sharepoint-dashboards/_img/icon_autofilloptions.gif new file mode 100644 index 00000000000..315afbaaa40 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/icon_autofilloptions.gif differ diff --git a/docs/report/sharepoint-dashboards/_img/icon_buildstatus_1.gif b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_1.gif new file mode 100644 index 00000000000..4fd33cb977d Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_1.gif differ diff --git a/docs/report/sharepoint-dashboards/_img/icon_buildstatus_2.gif b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_2.gif new file mode 100644 index 00000000000..292a0a63777 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_2.gif differ diff --git a/docs/report/sharepoint-dashboards/_img/icon_buildstatus_3.gif b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_3.gif new file mode 100644 index 00000000000..b3280b8dc00 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_3.gif differ diff --git a/docs/report/sharepoint-dashboards/_img/icon_buildstatus_4.gif b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_4.gif new file mode 100644 index 00000000000..5f833e60882 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_4.gif differ diff --git a/docs/report/sharepoint-dashboards/_img/icon_buildstatus_5.gif b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_5.gif new file mode 100644 index 00000000000..9a47cd64879 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_5.gif differ diff --git a/docs/report/sharepoint-dashboards/_img/icon_buildstatus_6.gif b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_6.gif new file mode 100644 index 00000000000..d15ebf914ec Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/icon_buildstatus_6.gif differ diff --git a/docs/report/sharepoint-dashboards/_img/icon_fillhandle.gif b/docs/report/sharepoint-dashboards/_img/icon_fillhandle.gif new file mode 100644 index 00000000000..5c2f8c1849b Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/icon_fillhandle.gif differ diff --git a/docs/report/sharepoint-dashboards/_img/icon_witcheckgreen.png b/docs/report/sharepoint-dashboards/_img/icon_witcheckgreen.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/icon_witcheckgreen.png differ diff --git a/docs/report/sharepoint-dashboards/_img/processguidance_wi_icon.png b/docs/report/sharepoint-dashboards/_img/processguidance_wi_icon.png new file mode 100644 index 00000000000..06353ab7480 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/processguidance_wi_icon.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procg_burnrate.png b/docs/report/sharepoint-dashboards/_img/procg_burnrate.png new file mode 100644 index 00000000000..d0d67dfb3d2 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procg_burnrate.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procg_dashboard_proj.png b/docs/report/sharepoint-dashboards/_img/procg_dashboard_proj.png new file mode 100644 index 00000000000..fb44848ef42 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procg_dashboard_proj.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_1.png b/docs/report/sharepoint-dashboards/_img/procguid_1.png new file mode 100644 index 00000000000..6bc00571363 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_1.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_10.png b/docs/report/sharepoint-dashboards/_img/procguid_10.png new file mode 100644 index 00000000000..c6493b576a4 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_10.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_2.png b/docs/report/sharepoint-dashboards/_img/procguid_2.png new file mode 100644 index 00000000000..4dd3ac4b9d6 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_2.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_3.png b/docs/report/sharepoint-dashboards/_img/procguid_3.png new file mode 100644 index 00000000000..18a2082dd73 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_3.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_4.png b/docs/report/sharepoint-dashboards/_img/procguid_4.png new file mode 100644 index 00000000000..97f4bd09f23 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_4.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_5.png b/docs/report/sharepoint-dashboards/_img/procguid_5.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_5.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_6.png b/docs/report/sharepoint-dashboards/_img/procguid_6.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_6.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_6a.png b/docs/report/sharepoint-dashboards/_img/procguid_6a.png new file mode 100644 index 00000000000..9a2775815db Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_6a.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_7.png b/docs/report/sharepoint-dashboards/_img/procguid_7.png new file mode 100644 index 00000000000..3ea6b1a2433 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_7.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_7day.png b/docs/report/sharepoint-dashboards/_img/procguid_7day.png new file mode 100644 index 00000000000..3dc3cbff9e2 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_7day.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_8.png b/docs/report/sharepoint-dashboards/_img/procguid_8.png new file mode 100644 index 00000000000..ad0c180c458 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_8.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_9.png b/docs/report/sharepoint-dashboards/_img/procguid_9.png new file mode 100644 index 00000000000..452bdd8235a Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_9.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_agileburn.png b/docs/report/sharepoint-dashboards/_img/procguid_agileburn.png new file mode 100644 index 00000000000..82ba10f1dde Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_agileburn.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_agileexcel.png b/docs/report/sharepoint-dashboards/_img/procguid_agileexcel.png new file mode 100644 index 00000000000..43ec5e762bd Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_agileexcel.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_agileexr.png b/docs/report/sharepoint-dashboards/_img/procguid_agileexr.png new file mode 100644 index 00000000000..46224712d66 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_agileexr.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_agiletest.png b/docs/report/sharepoint-dashboards/_img/procguid_agiletest.png new file mode 100644 index 00000000000..71bd116893e Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_agiletest.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_bugtrends.png b/docs/report/sharepoint-dashboards/_img/procguid_bugtrends.png new file mode 100644 index 00000000000..29efffc2698 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_bugtrends.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_byassignment.png b/docs/report/sharepoint-dashboards/_img/procguid_byassignment.png new file mode 100644 index 00000000000..83d87a4229f Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_byassignment.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_bypriority.png b/docs/report/sharepoint-dashboards/_img/procguid_bypriority.png new file mode 100644 index 00000000000..3ad5fc0ad35 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_bypriority.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_codechurn.png b/docs/report/sharepoint-dashboards/_img/procguid_codechurn.png new file mode 100644 index 00000000000..47e487125e9 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_codechurn.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_codecoverage.png b/docs/report/sharepoint-dashboards/_img/procguid_codecoverage.png new file mode 100644 index 00000000000..8f1bd2791c4 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_codecoverage.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_dashboard_buildquality.png b/docs/report/sharepoint-dashboards/_img/procguid_dashboard_buildquality.png new file mode 100644 index 00000000000..0e496d1055f Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_dashboard_buildquality.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_dashboard_productquality.png b/docs/report/sharepoint-dashboards/_img/procguid_dashboard_productquality.png new file mode 100644 index 00000000000..c5472f68a31 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_dashboard_productquality.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_dashboard_test.png b/docs/report/sharepoint-dashboards/_img/procguid_dashboard_test.png new file mode 100644 index 00000000000..2875af6f2c9 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_dashboard_test.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_dashboardburndown.png b/docs/report/sharepoint-dashboards/_img/procguid_dashboardburndown.png new file mode 100644 index 00000000000..313cbb0c6dc Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_dashboardburndown.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_dashboardmy.png b/docs/report/sharepoint-dashboards/_img/procguid_dashboardmy.png new file mode 100644 index 00000000000..cdc16bf08c5 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_dashboardmy.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_dashboardtest.png b/docs/report/sharepoint-dashboards/_img/procguid_dashboardtest.png new file mode 100644 index 00000000000..fe3b12949fb Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_dashboardtest.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_dashboardworkbook_toolbar.png b/docs/report/sharepoint-dashboards/_img/procguid_dashboardworkbook_toolbar.png new file mode 100644 index 00000000000..8c534a8bb47 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_dashboardworkbook_toolbar.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_dashbugs.png b/docs/report/sharepoint-dashboards/_img/procguid_dashbugs.png new file mode 100644 index 00000000000..93b1982f9bf Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_dashbugs.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_excelbug.png b/docs/report/sharepoint-dashboards/_img/procguid_excelbug.png new file mode 100644 index 00000000000..8e7684f3640 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_excelbug.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_excelreport.png b/docs/report/sharepoint-dashboards/_img/procguid_excelreport.png new file mode 100644 index 00000000000..4266d354108 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_excelreport.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_exceltask.png b/docs/report/sharepoint-dashboards/_img/procguid_exceltask.png new file mode 100644 index 00000000000..723ecfa0f62 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_exceltask.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_exceltestcase.png b/docs/report/sharepoint-dashboards/_img/procguid_exceltestcase.png new file mode 100644 index 00000000000..e94bc0b01a6 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_exceltestcase.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_exruserstore.png b/docs/report/sharepoint-dashboards/_img/procguid_exruserstore.png new file mode 100644 index 00000000000..e393b6fd9d0 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_exruserstore.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_failureanalysis.png b/docs/report/sharepoint-dashboards/_img/procguid_failureanalysis.png new file mode 100644 index 00000000000..699e1356679 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_failureanalysis.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_process_guidance.png b/docs/report/sharepoint-dashboards/_img/procguid_process_guidance.png new file mode 100644 index 00000000000..178bcb5277b Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_process_guidance.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_projectportalsettings.png b/docs/report/sharepoint-dashboards/_img/procguid_projectportalsettings.png new file mode 100644 index 00000000000..52549dfda63 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_projectportalsettings.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_testactivity.png b/docs/report/sharepoint-dashboards/_img/procguid_testactivity.png new file mode 100644 index 00000000000..8385403c28d Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_testactivity.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguid_toolbar_dashboard.png b/docs/report/sharepoint-dashboards/_img/procguid_toolbar_dashboard.png new file mode 100644 index 00000000000..1c35f527c4e Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguid_toolbar_dashboard.png differ diff --git a/docs/report/sharepoint-dashboards/_img/procguide_dashboard_teamprogress.png b/docs/report/sharepoint-dashboards/_img/procguide_dashboard_teamprogress.png new file mode 100644 index 00000000000..1287be2a588 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/procguide_dashboard_teamprogress.png differ diff --git a/docs/report/sharepoint-dashboards/_img/scrum_releaseburndonw.png b/docs/report/sharepoint-dashboards/_img/scrum_releaseburndonw.png new file mode 100644 index 00000000000..f8424214385 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/scrum_releaseburndonw.png differ diff --git a/docs/report/sharepoint-dashboards/_img/sharepoint_dashboard.png b/docs/report/sharepoint-dashboards/_img/sharepoint_dashboard.png new file mode 100644 index 00000000000..b8de94cbdf1 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/sharepoint_dashboard.png differ diff --git a/docs/report/sharepoint-dashboards/_img/tracking_teamproject.png b/docs/report/sharepoint-dashboards/_img/tracking_teamproject.png new file mode 100644 index 00000000000..ec8a11704e8 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/tracking_teamproject.png differ diff --git a/docs/report/sharepoint-dashboards/_img/twsa_dashbuilds.png b/docs/report/sharepoint-dashboards/_img/twsa_dashbuilds.png new file mode 100644 index 00000000000..873555fb1e1 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/twsa_dashbuilds.png differ diff --git a/docs/report/sharepoint-dashboards/_img/twsa_dashcheckins.png b/docs/report/sharepoint-dashboards/_img/twsa_dashcheckins.png new file mode 100644 index 00000000000..c305edb3ab1 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/twsa_dashcheckins.png differ diff --git a/docs/report/sharepoint-dashboards/_img/twsa_dashprojectwi.png b/docs/report/sharepoint-dashboards/_img/twsa_dashprojectwi.png new file mode 100644 index 00000000000..5837bba6326 Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/twsa_dashprojectwi.png differ diff --git a/docs/report/sharepoint-dashboards/_img/wit_downarrow.gif b/docs/report/sharepoint-dashboards/_img/wit_downarrow.gif new file mode 100644 index 00000000000..a559e91df9b Binary files /dev/null and b/docs/report/sharepoint-dashboards/_img/wit_downarrow.gif differ diff --git a/docs/report/sharepoint-dashboards/_shared/about-sharepoint-deprecation.md b/docs/report/sharepoint-dashboards/_shared/about-sharepoint-deprecation.md new file mode 100644 index 00000000000..447f9b72308 --- /dev/null +++ b/docs/report/sharepoint-dashboards/_shared/about-sharepoint-deprecation.md @@ -0,0 +1,4 @@ + + +> [!NOTE] +> TFS 2018 and later versions no longer support server-to-server integration with SharePoint products. If you're planning to upgrade to TFS 2018, read [About SharePoint integration](/vsts/ecosystem/sharepoint/about-sharepoint-integration) to learn about the options available to you. \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/bugs-dashboard-agile-cmmi.md b/docs/report/sharepoint-dashboards/bugs-dashboard-agile-cmmi.md new file mode 100644 index 00000000000..80f21948dcc --- /dev/null +++ b/docs/report/sharepoint-dashboards/bugs-dashboard-agile-cmmi.md @@ -0,0 +1,106 @@ +--- +title: Bugs dashboard (Agile and CMMI) | TFS +description: Monitor Bug activity for a team project by using the Bugs dashboard - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: ecd05065-521c-451f-acd9-efde10fa1822 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Bugs dashboard (Agile and CMMI) + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +You can monitor Bug activity for a team project by using the Bugs dashboard, which shows the following charts: + +- Bug burndown + +- The rate at which the team is finding, resolving, and closing Bugs over time + +- The count of priority Bugs over time + +- The current count of active Bugs that are assigned to each team member + + You access dashboards through your team project portal. You can access the Bugs dashboard only if that portal has been enabled and is provisioned to use SharePoint Server Enterprise Edition. For more information, see [Project portal dashboards](project-portal-dashboards.md). + +**You can use this dashboard to answer the following questions**:

      - How quickly is the team resolving and closing bugs?
      - Is the team fixing bugs quickly enough to finish on time?
      - How many bugs is the team reporting, resolving, and closing per day?
      - Is the team resolving priority 1 bugs before priority 2 and 3 bugs?
      - Does any team member have a backlog of priority 1 bugs that warrant redistribution?
      - What is the status of last night's build?
      - What were the most recent check-ins? + + **Requirements** + + Same requirements defined in [Project portal dashboards](project-portal-dashboards.md). + +##
      Data that appears in the dashboard + The team can use the Bugs dashboard to understand how well the team is finding, resolving, and closing bugs. To learn about the Web Parts that are displayed on the Bugs dashboard, refer to the illustration and the table that follow. + + ![Bugs Dashboard](_img/procguid_dashbugs.png "ProcGuid_DashBugs") + +> [!NOTE] +> Burndown, trend, and bar charts, reports ![Step 1](_img/procguid_1.png "ProcGuid_1") through ![Step 4](_img/procguid_4.png "ProcGuid_4"), do not appear when the server that hosts Analysis Services for the team project is not available. + + For more information about how to interpret, update, or customize the charts that appear in the Bugs dashboard, see the topics that are listed in the following table. + +|Web Part|Data displayed|Related topic| +|--------------|--------------------|-------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|A visual representation of the cumulative count of all Bugs, grouped by their state, for the past four weeks.

      ![Bug Progress Excel Report](_img/procguid_excelbug.png "ProcGuid_ExcelBug")|[Bug Progress](../excel/bug-progress-excel-report.md)| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|Line chart that shows the rolling average of the number of Bugs that the team has opened, resolved, and closed for the past four weeks. The rolling average is based on the seven days before the date for which it is calculated.

      ![Bug Trends report](_img/procguid_bugtrends.png "ProcGuid_BugTrends")|[Bug Trends](../excel/bug-trends-excel-report.md)| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|A visual representation of the cumulative count of all Bugs, grouped by their priority, for the past four weeks.

      ![Bugs by priority chart](_img/procguid_bypriority.png "ProcGuid_ByPriority")|[Bugs by Priority](../excel/bugs-by-priority-excel-report.md)| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|A horizontal bar chart with the total count of active Bugs that each team member has currently assigned to them, grouped by priority.

      ![Bugs by Assignment chart](_img/procguid_byassignment.png "ProcGuid_ByAssignment")|[Bugs by Assignment](../excel/bugs-by-assignment-excel-report.md)| +|![Step 5](_img/procguid_6.png "ProcGuid_6")|List of the active Bugs. The list is derived from a Team Web Access Web Part.

      ![Bug Trends report](_img/procguid_bugtrends.png "ProcGuid_BugTrends")|[Workbooks](../guidance/workbooks.md)| +|![Step 6](_img/procguid_6a.png "ProcGuid_6a")|List of upcoming events. The list is derived from a SharePoint Web Part.

      ![Import Events Web part](_img/sharepoint_dashboard.png "SharePoint_Dashboard")|Not applicable| +|![Step 7](_img/procguid_7.png "ProcGuid_7")|Count of active, resolved, and closed work items. You can open the list of work items by choosing each number. This list is derived from a Team Web Access Web Part.

      ![Project Work Items Web part](_img/twsa_dashprojectwi.png "TWSA_DashProjectWI")|Not applicable| +|![Step 8](_img/procguid_8.png "ProcGuid_8")|List of recent builds and their status. You can view more details about a build by choosing it. This list is derived from a Team Web Access Web Part.

      ![Recent Builds Web part](_img/twsa_dashbuilds.png "TWSA_DashBuilds")

      **Legend**:

      ![Build in Progress](_img/icon_buildstatus_1.gif "Icon_BuildStatus_1"): Build not started

      ![Build Not Started](_img/icon_buildstatus_2.gif "Icon_BuildStatus_2"): Build in progress

      ![Build Succeeded](_img/icon_buildstatus_3.gif "Icon_BuildStatus_3"): Build succeeded

      ![Build Failed](_img/icon_buildstatus_4.gif "Icon_BuildStatus_4"): Build failed

      ![Build Stopped](_img/icon_buildstatus_5.gif "Icon_BuildStatus_5"): Build stopped

      ![Build Partially Succeeded](_img/icon_buildstatus_6.gif "Icon_BuildStatus_6"): Build partially succeeded|[Run, monitor, and manage](../../build-release/overview.md)| +|![9](_img/procguid_9.png "ProcGuid_9")|List of the most recent check-ins. You can view more details about a specific check-in by choosing it. This list is derived from a Team Web Access Web Part.

      ![Recent Checkins Web part](_img/twsa_dashcheckins.png "TWSA_DashCheckins")|[Manage pending changes](../../tfvc/develop-code-manage-pending-changes.md)| + +## Required activities for tracking bugs + For the reports that appear in the Bugs dashboard to be useful and accurate, the team must perform the following activities: + +- Define Bugs, and specify their **Iteration** and **Area** paths. + +- Assign each Bug to the team member who is working to resolve or close it. + +- Specify the **Priority** of each Bug. + +- Update the **State** of each Bug as the team fixes, verifies, and closes it. + +## Monitor active bugs and bug trends + Team members can use the Bugs dashboard to determine whether they are managing the list of active Bugs according to established team goals and agile practices. By unit testing each increment of code before check-in, the team can reduce the overall number of bugs that the team must find. A team that focuses on being able to ship each increment of code removes defects incrementally and minimizes ongoing bugs. + + By using the Bugs dashboard, the team can answer the following questions: + +- Is the number of active Bugs acceptable based on team goals? Is the team postponing too many Bugs? + +- Is the team finding, fixing, and closing Bugs quickly enough to meet expectations and at a rate that matches previous development cycles? + +- Is the team addressing high priority bugs before lower priority bugs? + +- Does any team member need help in resolving bugs? + +### Bug progress indicators + +|Indicator|Questions to ask| +|---------------|----------------------| +|**The band for active Bugs is becoming wider**. If the width of the team's band for active Bugs is increasing, the Bug backlog is growing. The team is finding more Bugs than it can resolve or close.

      A widening band of active Bugs might indicate that a bottleneck is slowing the team's ability to resolve and close Bugs.|- Are team members being reallocated to other, non-priority tasks?
      - Are other issues blocking the team's ability to resolve and fix Bugs?| +|**The number of active Bugs is not changing**. A flat trend in the number of active Bugs indicates that the team is not finding Bugs.|- Is the test coverage sufficient?
      - Are other issues blocking the team's ability to find Bugs?| +|**The number of resolved or closed Bugs is not changing**. When the number of Bugs that the team is resolving or closing remains flat for long periods of time, team members might not be able to resolve or close Bugs.|- Are team priorities correctly set?
      - Are team members overallocated on other tasks?
      - Are team members correctly tracking their Bug status?| + +### Bug trend indicators + +|Indicator|Questions to ask| +|---------------|----------------------| +|**The team is resolving many Bugs in each time period**. A high resolution rate usually indicates that the team is making good progress.|- Is the team promptly closing the Bugs that it resolves? The rate of closure should resemble the rate of resolution.
      - Is the team reactivating Bugs at an acceptable rate?| +|**The team is resolving Bugs quickly but not closing them**. Team members who are assigned to verify fixes might be spread too thin, or different priorities might keep those team members from closing resolved Bugs.|- Are test resources over-allocated?
      - Should the team revisit test priorities?
      For more information about these metrics, see [Test](test-dashboard-agile-cmmi.md).| +|**The team is finding few bugs in each time period**. The team might struggle to find bugs in a high-quality solution or with ineffective testing.|- Do the metrics for code coverage, code churn, or test progress indicate a problem with the code or testing?
      For more information about these metrics, see [Quality](quality-dashboard-agile-cmmi.md).| +|**The team is finding about the same number of bugs in successive time periods**. If the team finds the same number of bugs week after week or iteration after iteration, you might investigate the underlying cause. Early in the testing cycle, the tests might not be rigorous or advanced enough to find many bugs. In early iterations, this situation is expected. However, as the product matures, tests should exercise broader scenarios and integrations.|- Are the test cases adequate to test the user stories that the team is developing?
      - Have the tests become stale or are they testing the wrong functionality?
      - Is the test team rigorously testing each user story?
      For more information about these metrics, see [Test](test-dashboard-agile-cmmi.md).| +|**The team is finding many bugs in each time period**. The team might find bugs easily in sloppy code, in newly integrated code, with effective testing, or during a specific event, such as a bug bash.|- Do the metrics for code coverage, code churn, or test progress indicate a problem with the code or testing?
      For more information about these metrics, see [Quality](quality-dashboard-agile-cmmi.md).| + +### Bug priority and distribution + +|Indicator|Questions to ask| +|---------------|----------------------| +|**The number of active higher priority Bugs is larger than the number of active lower priority Bugs**. When the number of high priority Bugs is much larger than the number of lower priority bugs, the team might be focusing on lower priority items first.|- Is the team fixing bugs in the order of priority set by the team?
      - Are issues blocking the team's ability to fix the higher priority bugs?| +|**Bug assignments are not evenly distributed**. The team might consider reassigning work when many Bugs are assigned to one or two team members and only a few to other team members.|- Should the team balance the workload by reassigning Bugs?| + +## Related notes + [Project portal dashboards](project-portal-dashboards.md) \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/build-dashboard-agile-cmmi.md b/docs/report/sharepoint-dashboards/build-dashboard-agile-cmmi.md new file mode 100644 index 00000000000..b9994852b63 --- /dev/null +++ b/docs/report/sharepoint-dashboards/build-dashboard-agile-cmmi.md @@ -0,0 +1,88 @@ +--- +title: Build dashboard (Agile and CMMI) | TFS +description: Obtain an overview of the development activities that are affecting the quality of the builds - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 9ff71bb8-2e3d-49ae-97c0-5c8bd37c3b93 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Build dashboard (Agile and CMMI) + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Build dashboard to obtain an overview of the development activities that are affecting the quality of the builds. Nightly builds are important to software development projects. When builds are not completing successfully or are not passing build verification tests (BVT), the team must fix the problem immediately. + +**You can use this dashboard to answer the following questions**:

      - How volatile is the code base?
      - How much of the code is the team testing?
      - How high is the quality of the builds?
      - Is the quality increasing, decreasing, or staying constant?
      - Which builds succeeded?
      - Which builds have a significant number of changes to the code? + + **Requirements** + + Same requirements defined in [Project portal dashboards](project-portal-dashboards.md). + +## Data displayed in the dashboard + The team can use the Build dashboard to monitor the quality of builds and determine whether a member of the team must take specific steps to correct build failures. To learn about the Web Parts that are displayed on the Build dashboard, refer to the illustration and the table that follow. + + ![Build Quality Dashboard](_img/procguid_dashboard_buildquality.png "ProcGuid_Dashboard_BuildQuality") + +> [!NOTE] +> Code coverage and churn charts, reports ![Step 1](_img/procguid_1.png "ProcGuid_1") and ![Step 2](_img/procguid_2.png "ProcGuid_2"), do not appear when the data warehouse for the team project is not available. + +|Web Part|Data displayed|Related topic| +|--------------|--------------------|-------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|Line chart that depicts the percentage of code that was tested by build verification tests (BVT) and other tests over the most recent four weeks.

      ![Code Coverage Report](_img/procguid_codecoverage.png "ProcGuid_CodeCoverage")|[Code Coverage](../excel/code-coverage-excel-report.md)| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|Stacked area chart that depicts how many lines of code the team added, removed, and changed in the check-ins before the build within the most recent four weeks.

      ![Code Churn Report](_img/procguid_codechurn.png "ProcGuid_CodeChurn")|[Code Churn](../excel/code-churn-excel-report.md)| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|List of recent builds and their build status. You can view more details by choosing a specific build. This list is derived from a Team Web Access Web Part.

      ![Recent Builds Web part](_img/twsa_dashbuilds.png "TWSA_DashBuilds")

      **Legend**:

      ![Build in Progress](_img/icon_buildstatus_1.gif "Icon_BuildStatus_1"): Build Not Started

      ![Build Not Started](_img/icon_buildstatus_2.gif "Icon_BuildStatus_2"): Build in Progress

      ![Build Succeeded](_img/icon_buildstatus_3.gif "Icon_BuildStatus_3"): Build Succeeded

      ![Build Failed](_img/icon_buildstatus_4.gif "Icon_BuildStatus_4"): Build Failed

      ![Build Stopped](_img/icon_buildstatus_5.gif "Icon_BuildStatus_5"): Build Stopped

      ![Build Partially Succeeded](_img/icon_buildstatus_6.gif "Icon_BuildStatus_6"): Build Partially Succeeded|[Run, monitor, and manage](../../build-release/overview.md)| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|List of upcoming events derived from a SharePoint Web Part.

      ![Import Events Web part](_img/sharepoint_dashboard.png "SharePoint_Dashboard")|Not applicable| +|![Step 5](_img/procguid_6.png "ProcGuid_6")|Count of active, resolved, and closed work items. You can open the list of work items by choosing each number. This list is derived from a Team Web Access Web Part.

      ![Project Work Items Web part](_img/twsa_dashprojectwi.png "TWSA_DashProjectWI")|Not applicable| +|![Step 6](_img/procguid_6a.png "ProcGuid_6a")|List of the most recent check-ins. You can view more details by choosing a specific check-in. This list is derived from a Team Web Access Web Part.

      ![Recent Checkins Web part](_img/twsa_dashcheckins.png "TWSA_DashCheckins")|[Manage pending changes](../../tfvc/develop-code-manage-pending-changes.md)| + +## Required activities for tracking builds + For the reports shown in the Build dashboard to be useful and accurate, the team must perform the following activities: + +- **Configure a build system**. To use Team Foundation Build, you must set up a build system. + + For more information, see [Build and Release agents](../../build-release/concepts/agents/agents.md). + +- **Create build definitions**. You can create several build definitions and then run each of them to produce code for a different platform. Also, you can run each build for a different configuration. + + For more information, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + +- **Define tests to run automatically as part of the build**. As part of the build definition, you can define tests to run as part of the build or to fail if the tests fail. + + For more information, see [Set up continuous testing for your builds](../../build-release/test/set-up-continuous-testing-builds.md). + +- **Configure tests to gather code coverage data**. For code coverage data to appear in the report, team members must instrument tests to gather that data. + + For more information, see [Run tests in your build process](../../build-release/test/test-build.md). + +- **Run builds regularly**. You can run builds at regular intervals or after every check-in. You can create regular builds when you use the schedule trigger. + + For more information, see [Build triggers](../../build-release/concepts/definitions/build/triggers.md). + + > [!NOTE] + > Although a team member can manually rate a build by using Build Explorer, this rating is not reflected in the Build Quality Indicators report. The build rating appears in the Build Summary report. For more information, see [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx) and [Build Summary](../sql-reports/build-summary-report.md). + +## Monitor builds + The team can use the Build dashboard to monitor the quality of builds and the level of code coverage that they are testing. Ideally, code coverage is high, and code churn is low or falling. Depending on your team goals, code coverage should be 80% to 100%. + + You can use the Code Coverage and Code Churn reports to answer the questions that are listed in the following table. + +- Which builds succeeded? + +- Which builds have a significant number of changes to the code? + +- How often are builds succeeding? + +- How volatile is the code base? + +- How much of the code is the team testing? + +- How high is the quality of the builds? + +- Is the quality increasing, decreasing, or staying constant? + + For more information, see [Code Coverage](../excel/code-coverage-excel-report.md) and [Code Churn](../excel/code-churn-excel-report.md). + +## Related notes + [Project portal dashboards](project-portal-dashboards.md) diff --git a/docs/report/sharepoint-dashboards/configure-or-add-a-project-portal.md b/docs/report/sharepoint-dashboards/configure-or-add-a-project-portal.md new file mode 100644 index 00000000000..fb733a9d56d --- /dev/null +++ b/docs/report/sharepoint-dashboards/configure-or-add-a-project-portal.md @@ -0,0 +1,142 @@ +--- +title: Configure or add a project portal | TFS +description: How the SharePoint project portal provides access to shared documents, dashboards, and support files-Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 63eae10a-b4d6-4ef5-93fd-270d20a8a2cf +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +ms.topic: get-started-article +--- + +# Configure or add a project portal + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +The project portal is a site associated with a team project for the purposes of sharing information. Project portals that are created when the team project is created are associated with a SharePoint site. These [portals](share-information-using-the-project-portal.md) provide access to shared documents, dashboards, and support files that contain redirect links to MSDN process guidance topics. + + If your team project was created using the Basic configuration or is hosted on Visual Studio Team Services (VSTS), you won't have access to a project portal. If you want to configure a portal, you can. Also, you can configure the portal and [process guidance](share-information-using-the-project-portal.md) independently of each other. + + Choose one of the following options based on your deployment configuration and team requirements: + +- [Determine if your team project portal is enabled](#portal_enabled). + + Choose this option if you're not sure if your team project is already configured. + +- [Configure a Web site for your portal](#simple). + + Choose this option if you want to use a website that doesn't require SharePoint integration or if your team project is hosted on VSTS. + +- [Configure a prepared SharePoint site for your portal](#validtfs). + + Choose this option if you have already configured TFS to integrate with a SharePoint Web application. + +- [Add a SharePoint server and upload portal contents from the process template](#addsp) + + Choose this option to prepare a SharePoint Web application, and add all portal artifacts and process guidance for a team project that was created using the Basic configuration. + +## Determine if your team project portal is enabled + If you cannot access Excel reports or dashboards, you might want to verify whether a portal has been enabled for your team project. + +1. From Visual Studio or Team Explorer, [connect to your team project](../../connect/connect-team-projects.md). + +2. Open Portal Settings. + + ![Open Portal Settings page from Team Explorer](_img/alm_pg_portalsettings.png "ALM_PG_PortalSettings") + + If the **Enable team project portal** check box is not selected, your team project portal is not enabled. + + ![Project Portal Settings dialog box](_img/procguid_projectportalsettings.png "ProcGuid_ProjectPortalSettings") + +## Configure a Web site for your portal + Configure this option when you aren't using SharePoint Products or when your team project is hosted on VSTS. + +1. If you aren't a member of the Team Project Administrators group, [get added now](/vsts/accounts/add-administrator-team-project). + +2. Open Portal Settings. + +3. Select the **Enable team project portal** check box and then enter the URL for the Web site you've prepared for your team project portal. + + ![Specify URL for project portal Web site](_img/alm_pg_portalwebsite.png "ALM_PG_PortalWebSite") + +## Configure a prepared SharePoint site for your portal + Choose this option when you have a SharePoint Web application that has been integrated to work with TFS. To learn how to do this, see [SharePoint Products requirements for Team Foundation Server](/vsts/accounts/requirements#sharepoint). + +1. If you aren't a member of the Team Project Administrators group, [get added now](/vsts/accounts/add-administrator-team-project). + +2. Open Portal Settings from the Settings page in Team Explorer. + +3. Select the **Enable team project portal** check box and then choose **Configure the URL**. + +4. Enter the URL for the SharePoint site you've prepared for your team project portal. + + ![Verify portal configuration](_img/alm_pg_portalenabled.png "ALM_PG_PortalEnabled") + +## Add SharePoint site integration and upload portal contents from a process template + Choose this option to gain access to Excel reports, dashboards, and process guidance support. To add the portal to the team project, use the **tfpt** command line tool that TFS Power Tools provides. + +1. [Add SharePoint products to your deployment](../../tfs-server/admin/add-sharepoint-to-tfs.md). + +2. Verify that you have the following tools, configurations, and permissions. + + 1. If you haven't installed TFS power tools, install them now to your Visual Studio client: + - **TFS 2015:** [Microsoft Visual Studio Team Foundation Server 2015 Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power) + - **TFS 2013:** [Microsoft Visual Studio Team Foundation Server 2013 Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2013Power) + + 2. If you haven't installed a version of Visual Studio, [install one of them now](https://www.visualstudio.com/downloads/download-visual-studio-vs). You can download Team Explorer for free. Team Explorer must be installed on the same machine where you run the **tfpt** command line tool. + + 3. If you aren't an administrator for the team project, [get added now](../../accounts/add-administrator-project-collection.md). + + 4. If you haven't been granted Full Control for the SharePoint site, [get that permission now](../../accounts/add-users.md). + +3. Open a Command Prompt in administrative mode and change to the directory where you installed the power tools. + + ``` + cd %programfiles%\TFS 2013 Power Tools + ``` + + On a 64-bit edition of Windows, replace `%programfiles%` with %`programfiles(x86)%`. + +4. Add the portal. The process template you specify must be compatible with the template used to create the team project. And, it must have been uploaded to the team project collection that hosts your team project. + + ``` + tfpt addprojectportal /collection:"http://MyServer:8080/tfs/DefaultCollection" /teamproject:MyProject /processtemplate:"TemplateName" + ``` + + These are the names of the process templates available with TFS 2013: + + - Microsoft Visual Studio Scrum 2013 + - MSF for Agile Software Development 2013 + - MSF for CMMI Process Improvement 2013 + +5. Open Portal Settings and verify that the SharePoint site is configured as expected. + +6. From the Home page, open the Documents page. + + + + + + + + + + + + +
      **Git****TFVC**
      ![Team Explorer Home page with Git as source control](_img/alm_te_githome.png "ALM_TE_GitHome")![Team Explorer Home page w/ TFVC as source control](_img/tracking_teamproject.png "Tracking_TeamProject")
      + +7. Open the project portal. + + ![Show Project Portal link on Documents page](_img/alm_pg_showprojectportal.png "ALM_PG_ShowProjectPortal") + +8. From your project portal, [add team member accounts to the Contributors group](/vsts/security/set-sharepoint-permissions) for the SharePoint site. + +## Related notes + +The artifacts you'll have access to depend on the process template created with your team project. For an overview of the artifacts available with the default process templates, see [Choose a process](../..//work/guidance/choose-process.md). + +- [SharePoint Online Tutorial](http://office.microsoft.com/sharepoint-server-help/sharepoint-pages-i-an-introduction-RZ101837217.aspx?CTT=1) + + diff --git a/docs/report/sharepoint-dashboards/configure-or-redirect-process-guidance.md b/docs/report/sharepoint-dashboards/configure-or-redirect-process-guidance.md new file mode 100644 index 00000000000..9d844696615 --- /dev/null +++ b/docs/report/sharepoint-dashboards/configure-or-redirect-process-guidance.md @@ -0,0 +1,167 @@ +--- +title: Configure process guidance | TFS +description: How to customize links to process guidance-Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 644ee4b7-3653-4943-9809-3d14d4d79c48 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +ms.topic: get-started-article +--- + +# Configure or redirect process guidance + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Your team can use process guidance to capture how they coordinate work on a team project, how to use work item types (WITs), and how to work with reports throughout the project life cycle. For generic guidance, see [Agile](../../work/guidance/agile-process.md), [Scrum](../../work/guidance/scrum-process.md), and [CMMI](../../work/guidance/cmmi-process.md) process template artifacts. You can customize your own process guidance and redirect the F1 help links from select artifacts to point to your custom guidance. + + If your team project was created using the Basic configuration or is hosted on VSTS, neither your project portal nor process guidance is enabled. This means that the links that redirect F1 help within a work item form aren't available. + + To configure a project portal, see [Configure or add a project portal](configure-or-add-a-project-portal.md). If you want to configure process guidance, choose from one of the following options based on your deployment configuration and team requirements: + +- [Determine if process guidance is enabled for your team project](#guid_enabled). + + Choose this option to determine if process guidance is enabled. + +- [Specify a website that hosts your custom process guidance](#simple). + + Choose this option if you want to use a website that doesn't require SharePoint integration or your team project is hosted on VSTS. Note that with this option, F1 help links within work item forms will not be redirected to your custom process guidance. + +- [Specify a SharePoint document library that contains your process guidance](#sp). + + Choose this option if you have already configured TFS to integrate with a SharePoint Web application, and you want F1 help links within work item forms to open to process guidance content. Also, choose this option when you want to share process guidance across several team projects within an organization. + +- [Upload process guidance support files from a process template](#upload) + + Choose this option when your SharePoint document library doesn't contain the support files used to redirect help links to process guidance content. + +- [Modify support files that redirect process guidance to your custom guidance](#redirect) + + Choose this option when you have a SharePoint site configured as your project portal and you want to modify the support files to redirect process guidance links to your custom process guidance. + +## Determine if process guidance is enabled for your team project portal + +1. From Visual Studio or Team Explorer, [connect to your team project](/vsts/connect/connect-team-projects). + +2. Open Portal Settings. + + ![Open Portal Settings page from Team Explorer](_img/alm_pg_portalsettings.png "ALM_PG_PortalSettings") + +3. Choose the Process Guidance tab. When the **Enable the link to process guidance** check box is not selected, process guidance is not enabled. + + ![Process guidance not enabled](_img/procguid_process_guidance.png "ProcGuid_Process_Guidance") + + When process guidance is not enabled, F1 help links within work item forms will not open help content. + +## Specify a website for your process guidance + Choose this option when you aren't using SharePoint Products or when your team project is hosted on VSTS. + +1. If you aren't a member of the Team Project Administrators group, [get added now](/vsts/accounts/add-administrator-team-project). + +2. Open Portal Settings and choose the Process Guidance tab. + +3. Enable the link to process guidance and then enter the URL for the website you've prepared for your team project portal. + + ![Specify Web site for process guidance](_img/alm_pg_processguid_website.png "ALM_PG_ProcessGuid_WebSite") + +4. To redirect F1 help links to point to content on your website, [upload](#upload) and then [modify the support files](#redirect). + +## Specify a SharePoint document library that contains your process guidance + Some process guidance links will work only if process guidance has been enabled for your team project. + +1. If you aren't a member of the Team Project Administrators group, [get added now](/vsts/accounts/add-administrator-team-project). + +2. Open Portal Settings and choose the Process Guidance tab. + +3. Enable the link to process guidance and then configure the URL. + +4. Enter the URL for the SharePoint document library that contains the process guidance support files or content. + + ![Specify URL to SharePoint document library](_img/alm_pg_processguid_sp.png "ALM_PG_ProcessGuid_SP") + +## Upload files that support linking to process guidance + +1. To obtain the process guidance support files for your team project, download them using the Process Template Manager. See [Download the latest version of the process templates](../../work/guidance/manage-process-templates.md). + +2. Upload the contents of the Windows SharePoint Services/Process Guidance folder to the SharePoint document library that you have configured for process guidance. + + Depending on your process template, upload the following files into the indicated folders. + + |Folder|Scrum|Agile|CMMI| + |------------|-----------|-----------|----------| + |Process Guidance|ProcessGuidance.html|ProcessGuidance.html|ProcessGuidance.html| + |Process Guidance/Supporting Files|Bug.htm
      CodeReviewRequest.htm
      CodeReviewResponse.htm
      Feature.htm
      FeedbackRequest.htm
      FeedbackResponse.htm
      Impediment.htm
      Impediment.htm
      ProductBacklogItem.htm
      SharedSteps.htm
      Task.htm
      TestCase.htm|AboutWorkItems.htm
      Bug.htm
      CodeReviewRequest.htm
      CodeReviewResponse.htm
      Feature.htm
      FeedbackRequest.htm
      FeedbackResponse.htm
      Issue.htm
      SharedSteps.htm
      Task.htm
      TestCase.htm
      UserStory.htm|AboutWorkItems.htm
      Bug.htm
      ChangeRequest
      CodeReviewRequest.htm
      CodeReviewResponse.htm
      Feature.htm
      FeedbackRequest.htm
      FeedbackResponse.htm
      Issue.htm
      Requirement.htm
      Review.htm
      Risk.htm
      SharedSteps.htm
      Task.htm
      TestCase.htm| + +## Modify support files that redirect process guidance to your custom guidance + You can redirect users to customized content by modifying the redirect links contained within the process guidance support and report files. + + The ![Open process guidance for work item](_img/processguidance_wi_icon.png "ProcessGuidance_WI_Icon") process guidance icon is designed to look for an `.aspx`, `.htm`, or `.html` file. These files can either contain the content or provide a URL that redirects to it. + + These files must be uploaded to a folder labeled `Supporting Files`, within the SharePoint document library configured for process guidance for the team project. + +#### Upload .aspx content pages + +- For each work item type for which you want to provide process guidance, upload the .aspx content page that you named to match the work item type to your process guidance website. + + You must name the `.aspx` file to match the WORKITEMTYPE value in the type definition. For example, if the process guidance content is about the bug type of work item, which has `` within its type definition, name the file `Bug.aspx`. + +#### Modify a process guidance support file + +1. In the Process Guidance folder and its subfolder Supporting Files, open each `.htm` file that you downloaded in step 1 of [Upload process guidance support files](#upload). + +2. In each file, locate the `meta` statement that specifies the URL. For example: + + ``` + + ``` + +3. Replace the value specified for the URL with the URL of the customized guidance stored on your configured process guidance website. For example: + + ``` + + ``` + +4. Save and close each file. + +5. Upload each file to your process guidance website. + + These files must be stored in the appropriate folder as indicated in step 2 of [Upload process guidance support files](#upload), above. + +#### Modify a process guidance link within a report + +1. From Visual Studio, choose **Team, Show Report Site**. + +2. Open the folder that contains the report that you want to modify. + +3. Open the short-cut menu for the report and choose **Download**. + +4. Open the file in Visual Studio or a text editor. + +5. Locate the `Hyperlink` statement within the report. + +6. Replace the URL in that statement with the URL of the file that contains your customized content. + +7. Save and close the file. + +8. Return to the Report Manager folder of the report, and choose **Upload File**. + +## Related notes + + +### How do I access process guidance from work items or reports? + **A: For work items**: From Team Explorer, press F1 or choose the ![Open process guidance for work item](_img/processguidance_wi_icon.png "ProcessGuidance_WI_Icon") process guidance icon from an open work item. + + The ![Open process guidance for work item](_img/processguidance_wi_icon.png "ProcessGuidance_WI_Icon") process guidance icon appears only on the work item forms opened from Team Explorer and only when your team project has process guidance enabled and configured. + + When you choose the ![Open process guidance for work item](_img/processguidance_wi_icon.png "ProcessGuidance_WI_Icon") process guidance icon that appears in the work item forms in Team Explorer, a web browser opens and the page that's defined in the process guidance support file for the corresponding work item type is displayed. If you have not configured your team project with a project portal, or you haven't uploaded the process guidance support files to the project portal, then this link will be inactive. + + **For reports**: From an open report in Report Manager, choose the **How to Use this Report** link at the bottom of a report. + + Depending on your settings, a web browser page opens to the standard process guidance content or your customized process guidance opens. + + +### Q: Can I embed process guidance within a work item form? + **A:** Yes. To specify text or a hyperlink within a work item form, see [LabelText and Text](../../work/reference/labeltext-and-text-xml-elements-reference.md). + + To embed a webpage or html content within a work item form, see [WebpageControlOptions](../../work/reference/webpagecontroloptions-xml-elements-reference.md). \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/manage-documents-and-document-libraries.md b/docs/report/sharepoint-dashboards/manage-documents-and-document-libraries.md new file mode 100644 index 00000000000..d066ac6a0f8 --- /dev/null +++ b/docs/report/sharepoint-dashboards/manage-documents-and-document-libraries.md @@ -0,0 +1,108 @@ +--- +title: Manage documents and document libraries | TFS +description: Create documents libraries and share to all team members by uploading them to the project portal for the team project - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 405eea1b-d607-4cae-a98b-cca50c6ce41e +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +ms.topic: get-started-article +--- + +# Manage documents and document libraries + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can share documents and files that you want to make available to all team members by uploading them to the project portal for your team project. You can create document libraries and organize the files that you upload to your project portal within those libraries, in addition to folders and subfolders. The folders and subfolders always appear in alphabetical order. + + Your team project's **Documents** page displays all the project portal document libraries as its child nodes. These nodes are the same names that appear when you click **Documents** in the project portal. The **Documents** node is another view of the document libraries on the project portal. + + You can view documents by double-clicking them. You can also upload, delete, move, and perform other tasks on the documents, libraries, and folders. + + When you create a team project, the process template that you use determines the default names and content of the folders that are located under the **Documents** node of Team Explorer. For a description of the documents that are provided with the Microsoft Solutions Framework (MSF) process templates, see [Agile process template](../../work/guidance/agile-process.md) or [CMMI process template](../../work/guidance/cmmi-process.md). You can add other folders to the Documents node. The folders and subfolders always appear in alphabetical order. + + You can use Team Explorer or your project portal to manage documents and document libraries. For information about how to manage documents in the project portal, see the help information that is provided for SharePoint Products. + + **Requirements** + +- Your team project has a project portal enabled and is associated with a SharePoint site. The **Documents** page appears in Team Explorer only when these conditions are met. See [Configure or redirect process guidance](configure-or-redirect-process-guidance.md). + +- You must be a member of the **Team Foundation Valid Users** security group. If the necessary security permissions are set explicitly, your **View project-level information** permission on the team project must be set to **Allow**. + +- You must also have **Contribute** permissions set for the project portal in SharePoint Products. + + For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Upload a document + +#### To upload a document in Team Explorer + +1. In Team Explorer, under the **Documents** node, right-click the folder where you want to upload the document, and then click **Upload Document**. + +2. In the **Open** dialog box, click the document that you want to upload. + + If necessary, use the navigation buttons to locate the document. + +3. Click **Open**. + + The document is uploaded to the folder that you right-clicked. + +#### To upload a document in Windows Explorer + +1. In Team Explorer, expand the **Documents** node or child node where you want to upload the document. + +2. In Windows Explorer, click the document that you want to upload, and then drag it to the folder or document library under the **Documents** node. Note that in Windows 8, Windows Explorer is File Explorer. + +## Create a document library + +#### To create a document library in Team Explorer + +1. In Team Explorer, right-click the Documents node for the team project where you want to create the document library, and then click **New Document Library**. + +2. Type a name for the library, and then press ENTER. + +## Add a folder or subfolder + +#### To add a folder or subfolder in Team Explorer + +1. In Team Explorer, right-click the folder that is above where you want to add the folder, and then click **New Folder**. + +> [!NOTE] +> You can create folders only at the document library or folder levels. You cannot create a folder at the **Documents** node level. + +1. Type a name for the new folder, and then press ENTER. + +## Move, copy, or delete a document or folder + +#### To move or copy a document or folder to a new folder + +1. In Team Explorer, right-click the document or folder, and then click **Cut** or **Copy**. + +2. Right-click the target folder, and then click **Paste**. + + > [!NOTE] + > If you create a list of work items as a document in one team project and then move or copy that list to another team project, the bindings and references in that list continue to the first team project. For example, if a list of work items is contained in a Microsoft Excel (.xls) or Microsoft Project (.mpp) file, these files continue to be bound to the team project where the work items are defined. If you move the files to another team project, you do not change the server bindings. For information about how to change the server to which a document is bound, see [Connect Excel or Project to a team project](../../connect/connect-team-projects.md). + +#### To delete a document or folder + +1. In Team Explorer, right-click the document or folder, and then click **Delete**. + +2. Click **OK**. + +## Rename a document or folder + +#### To rename a document or folder + +1. Right-click the document or folder, and then click **Rename**. + + > [!NOTE] + > You cannot rename a folder if it represents a document library. + +2. Type a new name, and then press ENTER. + + > [!NOTE] + > You cannot change the file name extension for a document by using Team Explorer or the project portal. + +## Related notes + [Work in Team Explorer](../../connect/work-team-explorer.md) \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/my-dashboard-agile-cmmi.md b/docs/report/sharepoint-dashboards/my-dashboard-agile-cmmi.md new file mode 100644 index 00000000000..6a9a4546564 --- /dev/null +++ b/docs/report/sharepoint-dashboards/my-dashboard-agile-cmmi.md @@ -0,0 +1,49 @@ +--- +title: My Dashboard (Agile and CMMI) | TFS +description: Use My Dashboard to monitor tasks and quickly access to work items that are assigned - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: e05d8187-c5cc-423a-b977-6ce5ad52abc4 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- + +# My Dashboard (Agile and CMMI) + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can monitor your tasks and quickly access work items that are assigned to you by using My Dashboard. You can use this dashboard to answer the following questions: + +- What is the next set of tasks, bugs, or test cases that I should act on? + +- What is the status of the team's most recent builds? + + **Requirements** + + See requirements listed in [Project portal dashboards](project-portal-dashboards.md). + +## Data that appears in the dashboard + You can use My Dashboard to review and access your work items. To learn about the Web Parts that are displayed on My Dashboard, refer to the illustration and the table that follow. You can open the list of Tasks, Bugs, and Test Cases in either Team Web Access or Team Explorer by using one of the following team queries: My Tasks, My Bugs, or My Test Cases. + + ![Web parts for My Dashboard](_img/procguid_dashboardmy.png "ProcGuid_DashboardMy") + +|Web Part|Data displayed| +|--------------|--------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|**My Tasks**: List of all tasks that are not closed and that are assigned to the team member who is logged on to the site. This list is derived from the My Tasks shared query.| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|**My Bugs**: List of all bugs that are not closed and that are assigned to the team member who is logged on to the site. This list is derived from the My Bugs shared query.| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|**My Test Cases**: List of all test cases that are not closed and that are assigned to the team member who is logged on to the site. This list is derived from the My Test Cases shared query.| +|![Step 7](_img/procguid_7.png "ProcGuid_7")|List of upcoming events. This list is derived from a SharePoint Web Part.

      ![Import Events Web part](_img/sharepoint_dashboard.png "SharePoint_Dashboard")| +|![Step 8](_img/procguid_8.png "ProcGuid_8")|Count of active, resolved, and closed work items. You can open the list of work items by choosing each number. This list is derived from a Team Web Access Web Part.

      ![Project Work Items Web part](_img/twsa_dashprojectwi.png "TWSA_DashProjectWI")| +|![9](_img/procguid_9.png "ProcGuid_9")|List of recent builds and their build status. You can view more details by choosing a specific build. This list is derived from a Team Web Access Web Part.

      ![Recent Builds Web part](_img/twsa_dashbuilds.png "TWSA_DashBuilds")

      **Legend**:

      ![Build in Progress](_img/icon_buildstatus_1.gif "Icon_BuildStatus_1"): Build not started

      ![Build Not Started](_img/icon_buildstatus_2.gif "Icon_BuildStatus_2"): Build in progress

      ![Build Succeeded](_img/icon_buildstatus_3.gif "Icon_BuildStatus_3"): Build succeeded

      ![Build Failed](_img/icon_buildstatus_4.gif "Icon_BuildStatus_4"): Build failed

      ![Build Stopped](_img/icon_buildstatus_5.gif "Icon_BuildStatus_5"): Build stopped

      ![Build Partially Succeeded](_img/icon_buildstatus_6.gif "Icon_BuildStatus_6"): Build partially succeeded| +|![10](_img/procguid_10.png "ProcGuid_10")|List of the most recent check-ins. You can view more details by choosing a specific check-in. This list is derived from a Team Web Access Web Part.

      ![Recent Checkins Web part](_img/twsa_dashcheckins.png "TWSA_DashCheckins")| + +## Required work item tracking activities + For the reports that My Dashboard shows to be useful and accurate, the team must perform the following activities: + +- Define tasks, bugs, and test cases, and assign each work item to the team member who is currently working to resolve or close it. + +- Update the **State** of each work item the team fixes, verifies, and closes it. + +## Related notes + [Project portal dashboards](project-portal-dashboards.md) \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/progress-dashboard-agile-cmmi.md b/docs/report/sharepoint-dashboards/progress-dashboard-agile-cmmi.md new file mode 100644 index 00000000000..2d3a6dcf6d8 --- /dev/null +++ b/docs/report/sharepoint-dashboards/progress-dashboard-agile-cmmi.md @@ -0,0 +1,142 @@ +--- +title: Progress dashboard (Agile and CMMI) | TFS +description: Dashboard designed to monitor team progress, burndown, and issues toward-Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: abd1932d-47d3-4e5c-82a8-1b2d6fc4af89 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + +# Progress dashboard (Agile and CMMI) + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Progress dashboard to track team progress toward completing an iteration. This dashboard displays four reports that help you monitor progress, burndown, and issues. + + +**You can use this dashboard to answer the following questions**: +- Is the team likely to finish the iteration on time? +- Will the team complete the planned work based on the current burndown? +- How much progress has the team made on implementing user stories or requirements in the past four weeks? +- How quickly is the team identifying and closing Issues? +- What were the most recent check-ins? + + +**Requirements** + + Same requirements defined in [Project portal dashboards](project-portal-dashboards.md). + +## Data displayed in the dashboard + You can use the Progress dashboard to understand how much progress the team is making toward completing user stories, tasks, and issues. To learn about the Web Parts that are displayed on the Progress dashboard, refer to the illustration and the table that follow. + + **Agile process template version** + + ![Burndown Dashboard](_img/procguide_dashboard_teamprogress.png "ProcGuide_Dashboard_TeamProgress") + + **CMMI process template version** + + ![Burndown dashboard](_img/procguid_dashboardburndown.png "ProcGuid_DashboardBurndown") + +> [!NOTE] +> Burndown, progress, and trend charts, reports ![Step 1](_img/procguid_1.png "ProcGuid_1") through ![Step 4](_img/procguid_4.png "ProcGuid_4"), do not appear when the server that hosts Analysis Services for the team project is not available. + + For more information about how to interpret, update, or customize the charts that appear in the Progress dashboard, see the topics that are listed in the following table. + +|Web Part|Data displayed| +|--------------|--------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|[Burndown](../excel/burndown-excel-report.md)

      A visual representation of the cumulative count of all hours that the team spent on all tasks for the past four weeks.

      ![Burndown chart](_img/procguid_agileburn.png "ProcGuid_AgileBurn")

      The **Ideal Trend** line calculates a slope or trajectory for when work will be completed based on the amount of work remaining and the end date of the report. The line is drawn from the remaining work on the start date to intersect the x-axis on the end date.| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|[Task Progress](../excel/task-progress-excel-report.md)

      A visual representation of the cumulative count of all active and closed tasks for the past four weeks.

      ![Task Progress Excel Report](_img/procguid_exceltask.png "ProcGuid_ExcelTask")| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|[User Story Progress](../excel/user-story-progress-excel-report-agile.md)

      [Requirements Progress](../excel/requirements-progress-excel-report-cmmi.md)

      A visual representation of the cumulative count of all user stories (Agile) or requirements (CMMI), grouped by their state, for the past four weeks.

      ![Example User Stories report](_img/procguid_excelreport.png "ProcGuid_ExcelReport")| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|[Issue Trends](../excel/issue-trends-excel-report.md)

      Line chart that shows the rolling average of the number of Issues that the team has opened and closed for the past four weeks. The rolling average is based on the seven days before the date for which it is calculated.

      ![7-Day Issue Trend Excel Report](_img/procguid_7day.png "ProcGuid_7Day")| +|![Step 5](_img/procguid_6.png "ProcGuid_6")|[Issues Workbook](../guidance/workbooks.md)

      Query results list of active issues.| +|![Step 6](_img/procguid_6a.png "ProcGuid_6a")|List of upcoming events. The list is derived from a SharePoint Web Part.

      ![Import Events Web part](_img/sharepoint_dashboard.png "SharePoint_Dashboard")| +|![Step 7](_img/procguid_7.png "ProcGuid_7")|Count of active, resolved, and closed work items. You can open the list of work items by choosing each number.

      ![Project Work Items Web part](_img/twsa_dashprojectwi.png "TWSA_DashProjectWI")| +|![Step 8](_img/procguid_8.png "ProcGuid_8")|List of recent builds and their status. You can view more details about a specific build by choosing it.

      ![Recent Builds Web part](_img/twsa_dashbuilds.png "TWSA_DashBuilds")

      See also [Run, monitor, and manage](../../build-release/overview.md).| +|![9](_img/procguid_9.png "ProcGuid_9")|List of the most recent check-ins. You can view more details about a specific check-in by choosing it.

      ![Recent Checkins Web part](_img/twsa_dashcheckins.png "TWSA_DashCheckins")

      See also [Manage pending changes](../../tfvc/develop-code-manage-pending-changes.md).| + +## Required activities for tracking progress + For the reports that appear in the Progress dashboard to be useful and accurate, the team must perform the following activities: + +- Define user stories, tasks, and issues. + +- Specify and update the **Completed** and **Remaining** fields for each Task as the team works on it. + + > [!IMPORTANT] + > If you subdivide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and user story. + +- Update the **State** of each task, user story, and issue as it progresses from **Active** to **Closed**. + +- (optional) Specify the **Iteration** and **Area** paths for each work item if you want to filter by those fields. + +## Track an iteration + By using the Progress dashboard, product owners and the team can view the team's progress and determine whether the team is making enough progress, delivering value by closing user stories, and implementing the iteration based on the iteration plan. + +### Modify the Task Burndown report for an iteration + To track an iteration by using the Progress dashboard, you must modify the Task Burndown report in Office Excel to reflect the start date for your iteration. By default, the start date is five days before the current date. + +> [!NOTE] +> The progress and trend reports, ![Step 2](_img/procguid_2.png "ProcGuid_2") through ![Step 4](_img/procguid_4.png "ProcGuid_4"), display data for the previous four weeks. You can change the time interval for these reports by modifying the corresponding report in Office Excel. + +##### To modify the Task Burndown report to correspond to a specific iteration + +1. In the dashboard navigation panel, choose **Excel Reports**. + +2. Check out the Burndown file. + +3. On the Reports worksheet, choose the ![Down arrow](_img/wit_downarrow.gif "WIT_DownArrow") down arrow in the cell to the right of Work Item.Iteration Hierarchy, expand the selections, and then select the check box of the iteration that you want to track. + +4. (Optional) Click the ![Down arrow](_img/wit_downarrow.gif "WIT_DownArrow") down arrow in the cell to the right of Work Item.Area Hierarchy, expand the selections, and then select the check box of the product area that you want to track. + +5. In the cell under **Date**, specify the start date of the time interval in either mm/dd or mm/dd/yyyy format. + +6. Click the cell that contains the start date that you just specified, and then drag the fill handle![A small square in the cell's lower-right corner.](_img/icon_fillhandle.gif "Icon_FillHandle") across the cells that you want to fill. + +7. (Optional) Use the **Auto Fill Options** button ![Auto Fill Options button image](_img/icon_autofilloptions.gif "Icon_AutoFillOptions") to specify how to fill the selection. + + For example, you can specify **Fill Series** or **Fill Weekdays**. + +8. Click the **Data** tab. + +9. In the **Connections** group, choose **Refresh All**, and verify that the report is refreshed. + +10. Save and close the report. + +11. Check in the report to the SharePoint site. + +12. Return to the Progress dashboard, and refresh your browser window to display the most recent reports. + +### Monitor progress + To monitor team progress, you can review the **Task Burndown (hours)**, **Task Progress (count)**, and **User Story Progress (count)** or **Requirement Progress (count)** reports for the following types of indicators: + +- **Has Completed Work stopped increasing in the Task Burndown (hours) report?** + + One or more issues might be blocking progress or the team might not be resolving and closing work items that it has completed, fixed, and verified. + +- **Has the number of active Tasks or active or resolved user stories stopped increasing?** + + This situation warrants additional investigation. When the team appears to make no progress over several days in either the **Task Progress (count)** or **User Story Progress (count)** reports, the team might be blocked or the team might not be resolving and closing work items that it has completed, fixed, and verified. You should investigate the cause because it could hinder the team's ability to meet the iteration plan and project schedule. + +- **Is the team adding or expanding the scope of work during the iteration?** + + Significant increases over time to the amount of Remaining Work or to the number of active tasks or user stories may indicate poor estimations or scope creep. That is, either the team did not accurately estimate the work at the start of the iteration or the team added features after the iteration started. When required effort is larger than estimated effort, team members might be underestimating the difficulty, time, or other factors. You should investigate the root causes. For example, you might want to determine how granular the tasks are. + +- **Do changes in the reports match your expectations?** + + Dashboard reports reflect work that the team is tracking. You should expect the reports to change according to the decisions and changes that the team makes about the work. If the team reallocates work to another iteration or decides to add work for an iteration, reports on the Progress dashboard should reflect those decisions. + + If the slope of the **Remaining Work** is progressing near or under the **Ideal Trend** line, the team is executing well against the iteration plan. However, if the **Remaining Work** slope is higher than the **Ideal Trend** line, the team will probably not complete all planned tasks before the end of the iteration. + +### Monitor issues + Because issues can block or impede team progress, you should track them as the team identifies them, and you should monitor how quickly the team addresses them. You can use the **7-Day Issue Trend Rate** and the Open Issues report to review any issues that have an impact on the team. Specifically, you can find answers to the following questions: + +- How often is the team identifying issues? + +- Is the team resolving issues as quickly as it is identifying them? + + If the team identifies more issues than it can address, the Issue Trends report will show that the team is closing issues at a lower rate. The team might need to reexamine priorities to determine whether the issues are actually problems that it should address or if it can ignore them. + +## Related notes + +- [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/project-dashboard-agile-cmmi.md b/docs/report/sharepoint-dashboards/project-dashboard-agile-cmmi.md new file mode 100644 index 00000000000..15f1c80ea4e --- /dev/null +++ b/docs/report/sharepoint-dashboards/project-dashboard-agile-cmmi.md @@ -0,0 +1,143 @@ +--- +title: Project dashboard (Agile and CMMI) | TFS +description: Displays data that helps to monitor task burndown, burn rate, and the product backlog - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 2423170b-dbcf-4b50-8e1c-360461cc753b +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- + +# Project dashboard (Agile and CMMI) + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Project dashboard to track team progress toward completing an iteration. This dashboard displays data that helps you monitor task burndown, burn rate, and the product backlog. + + +**You can use this dashboard to answer the following questions**:

      - Is the team likely to finish the iteration on time?
      - Will the team complete the planned work based on the current burn rate?
      - What were the most recent check-ins? + + **Requirements** + + Same requirements defined in [Project portal dashboards](project-portal-dashboards.md). + +## Data displayed in the dashboard + You can use the Project dashboard to understand how much progress the team is making toward completing tasks. To learn about the Web Parts that are displayed on the Project dashboard, refer to the illustration and the table that follow. + + ![Project dashboard (Agile)](_img/procg_dashboard_proj.png "ProcG_Dashboard_Proj") + +> [!NOTE] +> Burndown and burn rate charts, reports ![Step 1](_img/procguid_1.png "ProcGuid_1") and ![Step 2](_img/procguid_2.png "ProcGuid_2"), do not appear when the server that hosts Analysis Services for the team project is not available. + + For more information about how to interpret, update, or customize the charts that appear in the Project dashboard, see the topics that are listed in the following table: + +|Web Part|Data displayed|Related topic| +|--------------|--------------------|-------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|A visual representation of the cumulative count of all hours that the team spent on all task work items for the past four weeks.

      ![Burndown chart](_img/procguid_agileburn.png "ProcGuid_AgileBurn")

      The **Ideal Trend** line calculates a slope or trajectory for when work will be completed based on the amount of work remaining and the end date of the report. The line is drawn from the remaining work on the start date to intersect the x-axis on the end date.|[Burndown and Burn Rate](../sql-reports/burndown-and-burn-rate-report.md)| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|Bar chart that shows the actual and required burn rate of the team. The burn rate shows how quickly the team is actually completing planned work and what the rate must be to complete the currently active tasks on schedule.

      ![Burn Rate Excel Report](_img/procg_burnrate.png "ProcG_BurnRate")|[Burndown and Burn Rate](../sql-reports/burndown-and-burn-rate-report.md)| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|Team Web Access list of active user stories.|[User Story Progress](../excel/user-story-progress-excel-report-agile.md)| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|List of upcoming events. The list is derived from a SharePoint Web Part.

      ![Import Events Web part](_img/sharepoint_dashboard.png "SharePoint_Dashboard")|Not applicable| +|![Step 5](_img/procguid_6.png "ProcGuid_6")|Count of active, resolved, and closed work items. You can open the list of work items by choosing each number. This list is derived from a Team Web Access Web Part.

      ![Project Work Items Web part](_img/twsa_dashprojectwi.png "TWSA_DashProjectWI")|Not applicable| +|![Step 6](_img/procguid_6a.png "ProcGuid_6a")|List of recent builds and their status. You can view more details about a specific build by choosing it. This list is derived from a Team Web Access Web Part.

      ![Recent Builds Web part](_img/twsa_dashbuilds.png "TWSA_DashBuilds")

      **Legend**:

      ![Build in Progress](_img/icon_buildstatus_1.gif "Icon_BuildStatus_1"): Build not started

      ![Build Not Started](_img/icon_buildstatus_2.gif "Icon_BuildStatus_2"): Build in progress

      ![Build Succeeded](_img/icon_buildstatus_3.gif "Icon_BuildStatus_3"): Build succeeded

      ![Build Failed](_img/icon_buildstatus_4.gif "Icon_BuildStatus_4"): Build failed

      ![Build Stopped](_img/icon_buildstatus_5.gif "Icon_BuildStatus_5"): Build stopped

      ![Build Partially Succeeded](_img/icon_buildstatus_6.gif "Icon_BuildStatus_6"): Build partially succeeded|[Run, monitor, and manage](../../build-release/overview.md)| +|![Step 7](_img/procguid_7.png "ProcGuid_7")|List of the most recent check-ins. You can view more details about a specific check-in by choosing it. This list is derived from a Team Web Access Web Part.

      ![Recent Checkins Web part](_img/twsa_dashcheckins.png "TWSA_DashCheckins")|[Manage pending changes](../../tfvc/develop-code-manage-pending-changes.md)| + +## Required activities for tracking task burndown and burn rate + For the reports that appear in the Project dashboard to be useful and accurate, the team must perform the following activities: + +- Define tasks. + +- Specify and update the **Completed** and **Remaining** fields for each task as the team works on it. + + > [!IMPORTANT] + > If you subdivide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and the user story. + +- Update the **State** of each task as it progresses from **Active** to **Closed**. + +- (optional) Specify the **Iteration** and **Area** paths for each work item if you want to filter by those fields. + +## Track an iteration + By using the Project dashboard, product owners and the team can view the team's progress and determine whether the team is making sufficient progress. + +### Modify the Task Burndown Report for an iteration + To track an iteration by using the Project Dashboard, you must modify the parameters for the Task Burndown and Burn Rate reports in Report Manager to reflect the start and end dates for your iteration. By default, the start date is five days before the current date. + +##### To modify the Task Burndown and Burn Rate reports to correspond to a specific iteration + +1. In the dashboard navigation panel, choose **Reports**. + +2. In Report Manager, choose **Dashboards**, and then choose **Burndown**. + +3. Choose **Properties**, and then choose **Parameters**. + +4. For the **StartDateParam** parameter, choose **Override Default**, and type the iteration start date in the text box with the format mm/dd/yyyy. + +5. For the **EndDateParam** parameter, choose **Override Default**, and type the iteration end date in the text box with the format mm/dd/yyyy. + +6. Choose **Apply**. + +7. At the top of Report Manager, choose the **Dashboards** navigation link, and then choose **Burn Rate**. + +8. Repeat steps 3 through 6. + +9. Return to the Project Dashboard, and refresh the browser. + +10. Verify that the **Task Burndown** chart shows the new start and end dates. + +##### To switch between displaying work hours and number of work items in the Task Burndown or Burn Rate reports + +1. In the dashboard navigation panel, choose **Reports**. + +2. In Report Manager, choose **Dashboards**, and then choose **Burndown** or **Burn Rate**. + +3. Choose **Properties**, and then choose **Parameters**. + +4. In the **YAxis** list, choose one of the following options: + + - **Hours of Work** displays the cumulative number of work hours for all tasks that are defined for the iteration. + + - **Number of Work Items** displays the cumulative number of work items, grouped by state, that are defined for the iteration. + +5. Choose **Apply**. + +##### To display different trend lines in the Task Burndown report + +1. In the dashboard navigation panel, choose **Reports**. + +2. In Report Manager, choose **Dashboards**, and then choose **Burndown**. + +3. Choose **Properties**, and then Choose **Parameters**. + +4. In the **TrendLineParameter** list, choose one of the following options: + + - **Display Actual** displays a band that is based on the actual burndown. The band intersects the x-axis when the iteration is expected to finish. + + - **Display Ideal** displays a straight line from the remaining work at the start date to the x-axis on the end date. + + - **Display Both** displays both the actual and ideal trend lines. + + - **None** does not display a trend line. + +5. Choose **Apply**. + +6. Return to the Project Dashboard, and refresh the browser. + +### Monitor progress + To monitor team progress, you can review the **Task Burndown (hours)** report for the following types of indicators: + +- **Has Completed Work stopped increasing in the Task Burndown (hours) report?** + + One or more issues might be blocking progress or the team might not be resolving and closing work items that it has completed, fixed, and verified. + +- **Is the team adding or expanding the scope of work during the iteration?** + + Significant increases over time to the amount of Remaining Work may indicate poor estimations or scope creep. That is, either the team did not accurately estimate the work at the start of the iteration or the team added features after the iteration started. When required effort is larger than estimated effort, team members might be underestimating the difficulty, time, or other factors. You should investigate the root causes. For example, you might want to determine how granular the Tasks are. + +- **Do changes in the reports match your expectations?** + + Dashboard reports reflect work that the team is tracking. You should expect the reports to change according to the decisions and changes that the team makes about the work. If the team reallocates work to another iteration or decides to add work for an iteration, those one or more reports on the Project dashboard should reflect those decisions. + + If the slope of the **Remaining Work** is progressing near or under the **Ideal Trend** line, the team is executing well against the iteration plan. However, if the **Remaining Work** slope is higher than the **Ideal Trend** line, the team will probably not complete all planned tasks before the end of the iteration. + +## Related notes + [Project portal dashboards](project-portal-dashboards.md) \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/project-portal-dashboards.md b/docs/report/sharepoint-dashboards/project-portal-dashboards.md new file mode 100644 index 00000000000..3d7c11fda45 --- /dev/null +++ b/docs/report/sharepoint-dashboards/project-portal-dashboards.md @@ -0,0 +1,104 @@ +--- +title: Project portal dashboards | TFS +description: Use Dashboards to show project data, support investigation, and provide tools for teams to quickly perform common tasks - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: d1576274-544b-4100-844a-2895e7acf2e4 +ms.manager: douge +ms.author: kaelli +ms.date: 09/07/2017 +--- + +# Project portal dashboards + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Teams can quickly find important information about their team projects by using dashboards. Dashboards show project data, support investigation, and provide tools for teams to quickly perform common tasks. + +> [!TIP] +> See [Dashboards](../dashboards.md) for information about creating dashboards in the web portal. If you work in Visual Studio Team Services (VSTS), you can also [Create Power BI dashboards and reports](https://www.visualstudio.com/en-us/get-started/report/report-on-vso-with-power-bi-vs). This topic discusses SharePoint site dashboards. + + To view a dashboard, choose **Go to project portal** from the **Documents** page in Team Explorer. + + **Requirements** + +- To view dashboards, your team project must have a [project portal enabled and be associated with a SharePoint site](configure-or-add-a-project-portal.md). To view the project portal, you must also be a member of the **Visitors** or **Members** group for the portal. +- PivotChart reports and Excel Web Access Web Parts that appear in dashboards require that your team project is provisioned with SQL Server Analysis Services. +- To update or refresh [Excel reports](../excel/excel-reports.md) that appear in the dashboard, you must belong to a group that is granted access to the Single Sign-on enterprise application definition, or you must belong to the **TfsWarehouseDataReaders** security role in SQL Server Analysis Services. +- To view the dashboard, you must be assigned or belong to a group that has been assigned **Read** permissions in SharePoint Products for the team project. +- To create or modify work items from the dashboard, you must be a member of the **Contributors** group or your **Edit work items in this node** permissions must be set to **Allow**. See [Add users to team projects](../../accounts/add-users.md). + +## Dashboards available to you + The dashboards that are available to you depend on the version of SharePoint Products that is installed on your portal and the process template used to create your team project. The following dashboards are installed with the Agile and CMMI process templates. When you create a team project with the Scrum process template, you only have access to the [Release dashboard](release-scrum.md). + +|Task|SharePoint Server Standard Edition|SharePoint Server Enterprise Edition| +|----------|----------------------------------------|------------------------------------------| +|**Quickly access work items that are assigned to you**. Use [My dashboard](my-dashboard-agile-cmmi.md) to view and open the bugs, tasks, and test cases that are assigned to you.|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Review progress with the team**. Use the [Project dashboard](project-dashboard-agile-cmmi.md) to view team status and progress and to answer the following questions:

      - Is the team on track?
      - Is the team likely to finish the iteration on time?
      - Will the team complete the planned work based on the current burn rate?|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|| +|**Track progress toward completing an iteration**. Use the [Progress dashboard](progress-dashboard-agile-cmmi.md) to view its own progress and to answer the following questions:

      - Is the team on track?
      - Is the team delivering value (closing stories)?
      - How well did the team plan the iteration?
      - How many hours remain in the iteration?
      - How much work has been added to the iteration?||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Troubleshoot software quality issues with the team**. Use the [Quality dashboard](quality-dashboard-agile-cmmi.md) to view the quality of the software and to answer the following questions:

      - Is the team testing the correct functionality?
      - Is the team fixing bugs effectively?
      - Are tests stale?
      - Does the team have sufficient tests?||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Monitor test progress and find gaps in test coverage**. Use the [Test dashboard](test-dashboard-agile-cmmi.md) to track the team's progress toward testing user stories or requirements and to answer the following questions:

      - Is authoring of test cases on track?
      - Is the team analyzing automated test results?
      - Are automated tests broken?
      - Is the team's automation of test cases on track?||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Monitor bug activity**. Use the [Bugs dashboard](bugs-dashboard-agile-cmmi.md) to track the team's progress toward finding and resolving code defects and to answer the following questions:

      - Is the team fixing bugs quickly enough to finish on time?
      - Is the team fixing high priority bugs first?
      - What is the distribution of bugs by priority?
      - How many bugs are being reactivated?
      - Is the team resolving and closing reactivated bugs quickly enough?||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Monitor code coverage, code churn, and build activity**. Use the [Build dashboard](build-dashboard-agile-cmmi.md) to track the quality of the builds and to answer the following questions:

      - How much code is being tested?
      - How much is the code changing every day?
      - Is the quality of the builds improving? **Note:** If you use Git for version control, code churn and code coverage report data are not available.||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| + +## Dashboards and web parts + Dashboards use SharePoint Products to display web parts. You can add many types of web parts to a dashboard. TFS web parts show lists of work items, work item counts, and other project data that is derived from TFS databases. These are the web parts that TFS provides: + +- Completed Builds Web Part +- Go to Work Item Web Part +- New Work Item Shortcuts Web Part +- Project Portal Links Web Part +- Query Results Web Part +- Recent Check-ins Web Part +- Team Project Portal Shortcut Web Part +- Work Item Summary Web Part + + The following illustration and table show and describe a sample dashboard, Bugs dashboard. For more information, see [Bugs](bugs-dashboard-agile-cmmi.md). + + ![Bugs Dashboard](_img/procguid_dashbugs.png "ProcGuid_DashBugs") + +|Dashboard element|Element title|Source data|Data displayed| +|-----------------------|-------------------|-----------------|--------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|**Bug Progress**|Bug Progress Excel Report|A visual representation of the cumulative count of all bugs, grouped by their state for the past four weeks.| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|**7-Day Bug Trend Rates**|Bug Trends Excel Report|Line chart that shows the rolling average of the number of bugs that the team has opened, resolved, and closed for the past four weeks. The rolling average is based on the seven days before the date for which it is calculated.| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|**Active Bugs by Priority**|Bugs by Priority Excel Report|A visual representation of the cumulative count of all bugs, grouped by their priority, for the past four weeks.| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|**Active Bugs by Assignment**|Bugs by Assignment Excel Report|A horizontal bar chart with the total count of active bugs, grouped by priority, that are assigned to each team member.| +|![Step 5](_img/procguid_6.png "ProcGuid_6")|**Active Bugs**|Query Results Web Part|A list of active bugs derived from a query.| +|![Step 6](_img/procguid_6a.png "ProcGuid_6a")|**Important Dates**|SharePoint Events Web Part|A list of upcoming events| +|![Step 7](_img/procguid_7.png "ProcGuid_7")|**Project Work Items**|Work Item Summary Web Part|A count of active, resolved, and closed work items. You can open the list of work items by clicking each number.| +|![Step 8](_img/procguid_8.png "ProcGuid_8")|**Recent Builds**|Completed Builds Web Part|A list of recent builds and their build status. You can view more details by clicking a specific build.| +|![9](_img/procguid_9.png "ProcGuid_9")|**Recent Checkins**|Recent Check-ins Web Part|A list of the most recent check-ins. You can view more details by clicking a specific check-in.| + +## Use the dashboard toolbar + From the dashboard toolbar, you can create a work item, an Excel report, or a copy of the current dashboard. Or, you can open a work item based on its ID. The following illustration shows these functions. + + ![Dashboard toolbar](_img/procguid_toolbar_dashboard.png "ProcGuid_Toolbar_Dashboard") + +## Use the work item toolbar + By using the following toolbar which is displayed within a work item query web part, you can perform the functions that the following illustration summarizes. + + ![Toolbar for Query Results Web Part](_img/procguid_dashboardworkbook_toolbar.png "ProcGuid_DashboardWorkbook_Toolbar") + +- Create a task, bug, test case, or other work item. +- Refresh the items in the list from the query that it references. +- Add or remove columns, and change the sort order of the items in the list. +- Run the query behind the work item list. +- Copy work items to the Clipboard. +- Send work items to Office Outlook. +- Create a linked work item. + +## Customize a dashboard +Here's how you can customize a SharePoint dashboard: +- Add columns, or sort columns in an existing work item list. +- Change the query that is referenced by one of the existing work item lists. +- Add a custom query Web part that displays the list of work items that the query finds. For example, you can add a query that lists all active requirements, issues, or other types of work items that are assigned to you. +- Add other SharePoint site supported Web parts that integrate with Office Outlook or search functions of SharePoint Products. +- Change the filters of each report in Office Excel to focus on specific product areas or iterations. +- Add existing or adhoc Excel reports. + + For more information about how to work with and customize reports in Office Excel, see these articles: + +- [Ways to customize PivotTable reports](http://go.microsoft.com/fwlink/?LinkId=165722) +- [Edit or remove a workbook from Excel Services](http://go.microsoft.com/fwlink/?LinkId=165723) +- [Publish a workbook to Excel Services](http://go.microsoft.com/fwlink/?LinkId=165724) +- [Save a file to a SharePoint library or another Web location](http://go.microsoft.com/fwlink/?LinkId=165725) \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/quality-dashboard-agile-cmmi.md b/docs/report/sharepoint-dashboards/quality-dashboard-agile-cmmi.md new file mode 100644 index 00000000000..fa38f0634e1 --- /dev/null +++ b/docs/report/sharepoint-dashboards/quality-dashboard-agile-cmmi.md @@ -0,0 +1,124 @@ +--- +title: Quality dashboard (Agile and CMMI) | TFS +description: Obtains an overview of progress occurring in the test, development, and build areas as they relate to the quality of the software under development. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: eaae1890-73e5-4324-9df4-634281621d2a +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Quality dashboard (Agile and CMMI) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Quality dashboard to obtain an overview of progress occurring in the test, development, and build areas as they relate to the quality of the software under development. The team can use the Quality dashboard to learn and make decisions that support team goals around product quality. + + By using this dashboard, you can review test progress, build states, progress in resolving and closing bugs, rate of bug reactivations, the percentage of code that has been tested, and the trends in code changes. Each of these metrics is plotted for the most recent four weeks. + + +**You can use this dashboard to answer the following questions**:

      - Is the test effort on track?
      - Is the team testing the appropriate functionality?
      - Are the team's bug fixes of high quality?
      - Are tests stale?
      - Does the team have sufficient tests?
      - Are any bottlenecks occurring? + + **Requirements** + + Same requirements defined in [Project portal dashboards](project-portal-dashboards.md). + +## Data displayed in the dashboard + Team members can use the Quality dashboard to determine the overall quality of the product that they are developing. In an ideal case, test pass rates, bugs, and code churn all show the same picture, but often they do not. When you find a discrepancy, you must examine more closely the appropriate build and data series. The Quality dashboard combines the test results, code coverage from testing, code churn, and bugs, to help you understand many perspectives at the same time. + + To learn about the Web Parts that are displayed on the Quality dashboard, refer to the illustration and the table that follow. + + ![Product Quality Dashboard](_img/procguid_dashboard_productquality.png "ProcGuid_Dashboard_ProductQuality") + +> [!NOTE] +> The **Test Plan Progress** report is available only when the team [creates test plans](../../manual-test/getting-started/create-test-cases.md) and runs tests. +> +> Progress, build, and code charts, reports ![Step 1](_img/procguid_1.png "ProcGuid_1") through ![Step 6](_img/procguid_6a.png "ProcGuid_6a"), do not appear when the data warehouse for the team project is not available. + + To learn more about how to interpret, update, or customize the charts that appear in the Quality dashboard, see the topics in the following table. + +|Web Part|Data displayed|Related topic| +|--------------|--------------------|-------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|Stacked area graph of the test results of all Test cases grouped by their most recent recorded outcome - **Never Run**, **Blocked**, **Failed**, or **Passed** - during the most recent four weeks.

      ![Test Plan Progress Excel Report](_img/procguid_agiletest.png "ProcGuid_AgileTest")|[Test Plan Progress](../sql-reports/test-plan-progress-report.md)| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|Stacked columns that show how many builds **Failed** or **Succeeded** during the most recent four weeks.

      ![Build Status report](_img/procguid_agileexcel.png "ProcGuid_AgileExcel")|[Build Status](../excel/build-status-excel-report.md)| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|A stacked area graph of the cumulative count of all Bugs, grouped by state, during the most recent four weeks.

      ![Bug Progress Excel Report](_img/procguid_excelbug.png "ProcGuid_ExcelBug")|[Bug Progress](../excel/bug-progress-excel-report.md)| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|A stacked area graph of how many bugs the team has reactivated from the resolved or closed state during the most recent four weeks.

      ![Bug Reactivations Excel Report](_img/procguid_agileexr.png "ProcGuid_AgileExR")|[Bug Reactivations](../excel/bug-reactivations-excel-report.md)| +|![Step 5](_img/procguid_6.png "ProcGuid_6")|Line chart that shows the percentage of code tested by build verification tests (BVT) and other tests during the most recent four weeks.

      ![Code Coverage Report](_img/procguid_codecoverage.png "ProcGuid_CodeCoverage")|[Code Coverage](../excel/code-coverage-excel-report.md)| +|![Step 6](_img/procguid_6a.png "ProcGuid_6a")|Stacked area graph that shows how many lines of code the team added, removed, and changed in the check-ins before the build during the most recent four weeks.

      ![Code Churn Report](_img/procguid_codechurn.png "ProcGuid_CodeChurn")|[Code Churn](../excel/code-churn-excel-report.md)| +|![Step 7](_img/procguid_7.png "ProcGuid_7")|List of upcoming events. This list is derived from a SharePoint Web Part.

      ![Import Events Web part](_img/sharepoint_dashboard.png "SharePoint_Dashboard")|Not applicable| +|![Step 8](_img/procguid_8.png "ProcGuid_8")|Count of active, resolved, and closed work items. You can open the list of work items by choosing each number. This list is derived from a Team Web Access Web Part.

      ![Project Work Items Web part](_img/twsa_dashprojectwi.png "TWSA_DashProjectWI")|Not applicable| +|![9](_img/procguid_9.png "ProcGuid_9")|List of recent builds and their status. You can view more details by choosing a specific build. This list is derived from a Team Web Access Web Part.

      ![Recent Builds Web part](_img/twsa_dashbuilds.png "TWSA_DashBuilds")

      **Legend**:

      ![Build in Progress](_img/icon_buildstatus_1.gif "Icon_BuildStatus_1"): Build not started

      ![Build Not Started](_img/icon_buildstatus_2.gif "Icon_BuildStatus_2"): Build in progress

      ![Build Succeeded](_img/icon_buildstatus_3.gif "Icon_BuildStatus_3"): Build succeeded

      ![Build Failed](_img/icon_buildstatus_4.gif "Icon_BuildStatus_4"): Build failed

      ![Build Stopped](_img/icon_buildstatus_5.gif "Icon_BuildStatus_5"): Build stopped

      ![Build Partially Succeeded](_img/icon_buildstatus_6.gif "Icon_BuildStatus_6"): Build partially Succeeded|[Run, monitor, and manage](../../build-release/overview.md)| +|![10](_img/procguid_10.png "ProcGuid_10")|List of the most recent check-ins. You can view more details by choosing a specific check-in. This list is derived from a Team Web Access Web Part.

      ![Recent Checkins Web part](_img/twsa_dashcheckins.png "TWSA_DashCheckins")|[Manage pending changes](../../tfvc/develop-code-manage-pending-changes.md)| + +## Required activities for monitoring quality + For the Quality Dashboard to be useful and accurate, the team must perform the activities that this section describes. + +### Required activities for tracking test plan progress + For the Test Plan Progress report to be useful and accurate, the team must perform the following activities: + +- Define test cases and user stories, and create **Tested By** links between test cases and user stories. + +- [Define test plans](../../manual-test/getting-started/create-test-cases.md), and assign test cases to test plans. + +- For manual tests, mark the results of each validation step in the test case as passed or failed. + + > [!IMPORTANT] + > Testers must mark a test step with a status if it is a validation test step. The overall result for a test case reflects the status of all the test steps that the tester marked. Therefore, the test case will have a status of failed if the tester marked any test step as failed or did not mark it. + + For automated tests, each test case is automatically marked as passed or failed. + +- (Optional) To support filtering, assign **Iteration** and **Area** paths to each test case. + + > [!NOTE] + > For information about how to define area and iteration paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +### Required activities for tracking bug progress and bug reactivations + For the Bug Progress and Bug Reactivations reports to be useful and accurate, the team must perform the following activities: + +- Define Bugs. + +- Update the **State** of each Bug as the team fixes, verifies, closes, or reactivates it. + +- (Optional) Specify the **Iteration** and **Area** paths of each Bug if you want to filter by those fields. + +### Required activities for tracking build status, code coverage, and code churn + For the Build Status, Code Coverage, and Code Churn reports to be useful and accurate, team members must perform the following activities: + +- **Configure a build system**. To use Team Foundation Build, you must set up a build system. + + For more information, see [Build and Release agents](../../build-release/concepts/agents/agents.md). + +- **Create build definitions**. You can create several build definitions and then run each of them to produce code for a different platform. Also, you can run each build for a different configuration. + + For more information, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + +- **Define tests to run automatically as part of the build**. As part of the build definition, you can define tests to run as part of the build or to fail if the tests fail. + + For more information, see [Set up continuous testing for your builds](../../build-release/test/set-up-continuous-testing-builds.md). + +- **Configure tests to gather code coverage data**. For code coverage data to appear in the report, team members must instrument tests to gather that data. + + For more information, see [Run tests in your build process](../../build-release/test/test-build.md). + +- **Run builds regularly**. You can run builds at regular intervals or after every check-in. You can create regular builds when you use the schedule trigger. + + For more information, see [Build triggers](../../build-release/concepts/definitions/build/triggers.md). + + > [!NOTE] + > Although a team member can manually rate a build by using Build Explorer, this rating is not reflected in the Build Quality Indicators report. The build rating appears in the Build Summary report. For more information, see [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx) and [Build Summary](../sql-reports/build-summary-report.md). + +## Troubleshoot quality issues + The following table describes specific quality issues that the Quality dashboard can help you monitor and identify actions the team can take. + +|Issue|Reports to review|Troubleshooting notes| +|-----------|-----------------------|---------------------------| +|Build failures|**Builds Status**|A nightly build is the heartbeat of software development projects. When builds are not completing successfully or are not passing build verification tests (BVT), the team must fix the problem immediately.| +|Tests failing|**Test Plan Progress**

      **Code Churn**|When the rates of failed tests and code churn are high, the team may investigate why the software is failing so often. Causes may include loose development practices or tests that are too rigorous for an early iteration cycle.| +|Tests passing but with a high rate of finding Bug|**Test Plan Progress**

      **Bug Progress**|When many tests pass in the same period as many Bugs are found, the team might investigate the following possibilities:

      - Tests might not be sufficiently rigorous for the current product stage. In early iterations, simple tests are good. However, tests should exercise broader scenarios and integration as the product matures.
      - Tests might be stale or testing the wrong functionality.
      - Different test techniques might offer better results.
      - Bugs are being reported but not subject to testing. When Bugs are reported and are not linked to a test case, they are not subject to regression testing.| +|Tests are stale|**Test Plan Progress**

      **Code Coverage**

      **Code Churn**|When many tests pass, a significant amount of code changes, and code coverage decreases, the team might not be running tests that exercise the new code.

      Because tests are not developed at the same rate as the code changes, test coverage might become less and less adequate.| +|Team is not testing, closing, or reactivating resolved Bugs|**Bug Progress**|When a bulge occurs in the Bug Progress report for resolved Bugs, developers are resolving Bugs, but testers have not verified and closed them. The team should investigate why this pattern has developed.| +|Too little testing|**Test Plan Progress**

      **Code Churn**|When the team is running few tests, code churn is high, and code coverage is less than expected, the team might need to allocate more resources to testing. In addition, the team should ensure that testers are focusing on the same functions as the rest of the team.| +|Reactivations|**Bug Reactivations**|When the team reactivates Bugs at a high or increasing rate, testers are frequently rejecting developers' fixes. The team must address these problems to avoid allocating significant resources toward reworking the rejected fixes. Potential causes include poor bug reporting, poor test lab management, or overly aggressive triage.| +|Inadequate unit testing|**Code Coverage**

      **Code Churn**|When a decrease in code coverage coincides with an increase in code churn, developers might be checking in code without any corresponding unit tests to cover it.

      In most cases, the code coverage should approach 100% if the team practices test-driven development or similar techniques. If unit tests are reused as BVTs, the code coverage should appear in the corresponding reports.| + +## Related notes + [Project portal dashboards](project-portal-dashboards.md) diff --git a/docs/report/sharepoint-dashboards/release-scrum.md b/docs/report/sharepoint-dashboards/release-scrum.md new file mode 100644 index 00000000000..fff2d41dbaa --- /dev/null +++ b/docs/report/sharepoint-dashboards/release-scrum.md @@ -0,0 +1,39 @@ +--- +title: Release (Scrum) | TFS +description: Shows how much work remains in the release and how quickly your team is working through the product backlog. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: f280fa1f-a147-4b85-b233-5982a1eac4ac +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Release (Scrum) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +The Release dashboard shows how much work remains in the release and how quickly your team is working through the product backlog. It displays the Release Burndown report, along with additional charts and quick access links. + + ![Release burndown chart](_img/scrum_releaseburndonw.png "Scrum_ReleaseBurndonw") + + To view the dashboard, choose **Go to project portal** from the **Documents** page in Team Explorer or the home page of the web portal. + + **Requirements** + + See [Project portal dashboards](project-portal-dashboards.md). + +## Data displayed in the dashboard + You can use the Release dashboard to understand how much progress the team is making to complete PBIs. To learn about the web parts that are displayed on the dashboard, refer to the following illustration and table. + + ![Release dashboard](_img/alm_pg_scrum_releasedashbrd.png "ALM_PG_Scrum_ReleaseDashbrd") + +|Web Part|Data displayed| +|--------------|--------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|Shows how much work remains at the start of each sprint in a release. This chart doesn't appear when the server that hosts Analysis Services for the team project is unavailable.

      The source of the raw data is your product backlog. Each sprint that has been assigned to the team project or team appears along the horizontal axis. The vertical axis indicates the sum of all effort of all active backlog items at the start of each sprint. As the team updates the state of backlog items to Done, the effort remaining decreases. The amount of estimated effort on the vertical axis is in whatever unit that your scrum team has decided to use (for example, story points, size, or hours).

      See also [Release Burndown](../sql-reports/release-burndown.md).| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|Excel list of active PBIs.| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|List of upcoming events derived from a SharePoint Web Part.

      ![Import Events Web part](_img/sharepoint_dashboard.png "SharePoint_Dashboard")| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|Count of new, approved, committed, or done work items. You can open the list of work items by choosing each number.

      ![Scrum work items (Release dashboard)](_img/alm_pg_scrum_dshbrdworkitems.png "ALM_PG_Scrum_DshbrdWorkItems")| +|![Step 5](_img/procguid_6.png "ProcGuid_6")|List of recent builds and their status. You can view more details about a specific build by choosing it. This list is derived from a Team Web Access Web Part.

      ![Recent Builds Web part](_img/twsa_dashbuilds.png "TWSA_DashBuilds")

      **Legend**:

      ![Build in Progress](_img/icon_buildstatus_1.gif "Icon_BuildStatus_1"): Build not started

      ![Build Not Started](_img/icon_buildstatus_2.gif "Icon_BuildStatus_2"): Build in progress

      ![Build Succeeded](_img/icon_buildstatus_3.gif "Icon_BuildStatus_3"): Build succeeded

      ![Build Failed](_img/icon_buildstatus_4.gif "Icon_BuildStatus_4"): Build failed

      ![Build Stopped](_img/icon_buildstatus_5.gif "Icon_BuildStatus_5"): Build stopped

      ![Build Partially Succeeded](_img/icon_buildstatus_6.gif "Icon_BuildStatus_6"): Build partially succeeded

      For more information, see [Run, monitor, and manage](../../build-release/overview.md).| +|![Step 6](_img/procguid_6a.png "ProcGuid_6a")|List of the most recent check-ins. You can view more details about a specific check-in by choosing it. This list is derived from a Team Web Access Web Part.

      ![Recent Checkins Web part](_img/twsa_dashcheckins.png "TWSA_DashCheckins")

      For more information, see [Manage pending changes](../../tfvc/develop-code-manage-pending-changes.md). **Note:** If you use Git for version control, check-in data is not available.| + +## Related notes + [Project portal dashboards](project-portal-dashboards.md) \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/share-information-using-the-project-portal.md b/docs/report/sharepoint-dashboards/share-information-using-the-project-portal.md new file mode 100644 index 00000000000..da291dad2ce --- /dev/null +++ b/docs/report/sharepoint-dashboards/share-information-using-the-project-portal.md @@ -0,0 +1,84 @@ +--- +title: Share information using the project portal | TFS +description: Use the SharePoint project portal to share information with your team +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 74f0e0bc-6528-4757-b906-b53aa869507b +ms.manager: douge +ms.author: kaelli +ms.date: 09/09/17 +ms.topic: get-started-article +--- + +# Share information using the project portal + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Teams use project portals to share information and support how their team works. If you install TFS with a configuration that includes SharePoint Products and you created a project portal when you created your team project, your team project is configured with a SharePoint site for the project portal. + +## Open the project portal + +1. From Team Explorer, open the documents page. + + + + + + + + + + + + +
      **Git****TFVC**
      ![Team Explorer Home page with Git as source control](_img/alm_te_githome.png "ALM_TE_GitHome")![Team Explorer Home page w/ TFVC as source control](_img/tracking_teamproject.png "Tracking_TeamProject")
      + + If you don't see the documents icon, your team project is not configured with a SharePoint site. To learn how to configure a SharePoint site for your team project, see [Configure or add a project portal](configure-or-add-a-project-portal.md). + +2. Show the project portal. + + ![Show Project Portal link on Documents page](_img/alm_pg_showprojectportal.png "ALM_PG_ShowProjectPortal") + + From the web portal, choose the **Go to project portal** from the home page or a dashboard which contains the [Other links widget](../widget-catalog.md). + + The link opens to the Project, Progress, or Release dashboard, depending on your SharePoint site configuration and the process template used to create your team project. + + To learn more about SharePoint dashboards, see [Project portal dashboards](project-portal-dashboards.md). + + If you can't open the portal, you need to be added to a [permissions group in SharePoint](../../accounts/add-users.md). + + +## Related notes + +- [Dashboards and reports](../overview.md) +- [Agile process guidance](../../work/guidance/agile-process.md) +- [CMMI process guidance](../../work/guidance/cmmi-process.md) +- [Scrum process guidance](../../work/guidance/scrum-process.md) + +### Q: What artifacts are available with a SharePoint project portal? + **A:** The artifacts you'll have access to depend on the process template created with your team project. For an overview of the artifacts available with the default process templates, see [Choose a process](../../work/guidance/choose-process.md). + +### Q: How do I access process guidance? + **A:** If your team project is configured with a SharePoint site for its project portal, you can access process guidance from the work item forms in Team Explorer. Choose the ![Open process guidance for work item](_img/processguidance_wi_icon.png "ProcessGuidance_WI_Icon") process guidance icon or press F1. These links access information contained in the Documents **Support** folder. + + From the web portal, you can access process guidance from the home page or a dashboard + + When you choose the ![Open process guidance for work item](_img/processguidance_wi_icon.png "ProcessGuidance_WI_Icon") process guidance icon that appears in the work item forms in Team Explorer, a web browser opens and the page that's defined in the process guidance support file for the corresponding work item type is displayed. If you have not configured your team project with a project portal, or you haven't uploaded the process guidance support files to the project portal, then this link will be inactive. + + You can [redirect process guidance](configure-or-redirect-process-guidance.md) to your custom content. + +### Q: How do I add a project portal to my team project? How do I enable process guidance? + **A:** If you want to specify an existing website as your team project's portal or support process guidance, see [Configure a project portal](configure-or-add-a-project-portal.md). + +> [!IMPORTANT] +> If you add another type of website, the links to open the project portal from the web portal and Team Explorer don't appear. Also, the **Documents** page doesn't appear in Team Explorer. + + **A:** If you have a SharePoint site already configured with Team Foundation Server Extensions for SharePoint, see [Configure a project portal](configure-or-add-a-project-portal.md). + + If you need to install a SharePoint product first, see [Manually install SharePoint products for Team Foundation Server](../../tfs-server/install/sharepoint/install-sharepoint.md). + +### Q: Can I customize the process guidance? + **A:** Yes. See [Configure or redirect process guidance](configure-or-redirect-process-guidance.md). + +### Q: Do you want more information about SharePoint site features? + **A:** See the [SharePoint Online Tutorial](http://office.microsoft.com/sharepoint-server-help/sharepoint-pages-i-an-introduction-RZ101837217.aspx?CTT=1). \ No newline at end of file diff --git a/docs/report/sharepoint-dashboards/test-dashboard-agile-cmmi.md b/docs/report/sharepoint-dashboards/test-dashboard-agile-cmmi.md new file mode 100644 index 00000000000..31fb37f2bf2 --- /dev/null +++ b/docs/report/sharepoint-dashboards/test-dashboard-agile-cmmi.md @@ -0,0 +1,97 @@ +--- +title: Test dashboard (Agile and CMMI) | TFS +description: Use test dashboard to monitor test activities, report on progress and find gaps in test coverage. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 701fd381-fff0-4508-9316-852a45b6afb4 +manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Test dashboard (Agile and CMMI) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +By using the test dashboard, you can monitor test activities, report on progress, find gaps in test coverage, and identify test areas that might require additional investigation. This dashboard displays five reports that provide information about testing that has occurred in the most recent four weeks. + + +**You can use this dashboard to answer the following questions**:

      - Is test case authoring on track?
      - Has the team defined test cases for all user stories or requirements?
      - What are the proportions of test cases that are passing, failing, and blocked?
      - Do test failure metrics indicate a problem that requires further investigation?
      - What is the status of last night's build?
      - What are the most recent check-ins? + + **Requirements** + +- The **Test Plan Progress**, **Test Case Readiness**, **User Story Test Status**, **Requirement Test Status**, and **Test Activity** reports are available only when the team creates test plans and runs tests as described in [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + +- Burndown, progress, trend charts, and reports ![Step 1](_img/procguid_1.png "ProcGuid_1") through ![Step 5](_img/procguid_6.png "ProcGuid_6") do not appear when the server that hosts Analysis Services for the team project is not available. + +- Plus requirements listed in [Project portal dashboards](project-portal-dashboards.md). + +## Data displayed in the dashboard + You can use the test dashboard to understand how well the team is progressing in testing the user stories (Agile) or requirements (CMMI). The test dashboard, displays the following web parts. + + **Agile process template version** + + ![Web Parts for Test Progress Dashboard](_img/procguid_dashboardtest.png "ProcGuid_DashboardTest") + + **CMMI process template version** + + ![Test Dashboard](_img/procguid_dashboard_test.png "ProcGuid_Dashboard_Test") + +|Web Part|Data displayed|Related topic| +|--------------|--------------------|-------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|Stacked area graph of the test results of all test cases grouped into their most recent recorded outcome during the past four weeks. Outcomes include **Never Run**, **Blocked**, **Failed**, and **Passed**.

      ![Test Plan Progress Excel Report](_img/procguid_agiletest.png "ProcGuid_AgileTest")|[Test Plan Progress](../sql-reports/test-plan-progress-report.md)| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|Stacked area graph that shows how many test cases have been in the **Design** or **Ready** state for the most recent four weeks.

      ![Test Case Readiness Excel Report](_img/procguid_exceltestcase.png "ProcGuid_ExcelTestCase")|[Test Case Readiness](../sql-reports/test-case-readiness-report.md)| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|Horizontal bar chart that shows the count of test results for each combination of test case and test configuration that is defined for each user story or requirement. The chart groups the test results according to their most recent test run, where the options are **Passed** (green), **Failed** (red), **Blocked** (purple), or **Not Run** (gray).

      ![User Story Test Status Excel Report](_img/procguid_exruserstore.png "ProcGuid_ExRUserStore")|[User Story Test Status](../excel/user-story-test-status-excel-report-agile.md)

      [Requirement Test Status](../excel/requirement-test-status-excel-report-cmmi.md)| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|Line chart that shows the cumulative count of all results run for all manual test cases during the most recent four weeks.

      ![Test Activity Excel Report](_img/procguid_testactivity.png "ProcGuid_TestActivity")|[Test Activity](../excel/test-activity-excel-report.md)| +|![Step 5](_img/procguid_5.png "ProcGuid_6")|Stacked area graph that shows the cumulative count of all failed outcome results for test cases, sorted by failure type, during the most recent four weeks. Failure types include **Regression**, **New Issue**, and **Known Issue**.

      ![Failure Analysis Excel Report](_img/procguid_failureanalysis.png "ProcGuid_FailureAnalysis")|[Failure Analysis](../excel/failure-analysis-excel-report.md)| +|![Step 6](_img/procguid_6.png "ProcGuid_6a")|List of upcoming events. This list is derived from a SharePoint Web Part.

      ![Import Events Web part](_img/sharepoint_dashboard.png "SharePoint_Dashboard")|Not applicable| +|![Step 7](_img/procguid_7.png "ProcGuid_7")|Count of active, resolved, and closed work items. You can open the list of work items by choosing each number. This list is derived from a Team Web Access Web Part.

      ![Project Work Items Web part](_img/twsa_dashprojectwi.png "TWSA_DashProjectWI")|Not applicable| +|![9](_img/procguid_9.png "ProcGuid_9")|List of recent builds and their build status. You can view more details by choosing a specific build. This list is derived from a Team Web Access Web Part.

      ![Recent Builds Web part](_img/twsa_dashbuilds.png "TWSA_DashBuilds")

      **Legend**:

      ![Build in Progress](_img/icon_buildstatus_1.gif "Icon_BuildStatus_1"): Build not started

      ![Build Not Started](_img/icon_buildstatus_2.gif "Icon_BuildStatus_2"): Build in progress

      ![Build Succeeded](_img/icon_buildstatus_3.gif "Icon_BuildStatus_3"): Build succeeded

      ![Build Failed](_img/icon_buildstatus_4.gif "Icon_BuildStatus_4"): Build failed

      ![Build Stopped](_img/icon_buildstatus_5.gif "Icon_BuildStatus_5"): Build stopped

      ![Build Partially Succeeded](_img/icon_buildstatus_6.gif "Icon_BuildStatus_6"): Build partially succeeded|[Run, monitor, and manage](../../build-release/overview.md)| +|![10](_img/procguid_10.png "ProcGuid_10")|List of the most recent check-ins. You can view more details by choosing a specific check-in. This list is derived from a Team Web Access Web Part.

      ![Recent Checkins Web part](_img/twsa_dashcheckins.png "TWSA_DashCheckins")|[Manage pending changes](../../tfvc/develop-code-manage-pending-changes.md)| + +## Required activities to monitor test efforts + For the reports in the test dashboard to be useful and accurate, the team must perform the following activities: + +- Define test cases and user stories or requirements, and create **Tested By** links from test cases to user stories or requirements. + +- [Define test plans, and assign test cases to test plans](../../manual-test/getting-started/create-test-cases.md). + +- For manual tests, mark the results of each validation step in the test case as passed or failed. + + > [!IMPORTANT] + > Testers must mark a test step with a status if it is a validation test step. The overall result for a test case reflects the status of all the test steps that the tester marked. Therefore, the test case will have a status of failed if the tester marked any test step as failed or did not mark it. + + For automated tests, each test case is automatically marked as passed or failed. + +- (Optional) To support filtering, assign **Iteration** and **Area** paths to each test case. + +## Monitor test progress + You can use the first three reports in the Test Dashboard to monitor test progress and answer the questions in the following table. + +|Report|Questions answered|Notes| +|------------|------------------------|-----------| +|**Test Case Readiness**|- How many test cases has the test team defined?
      - How many test cases are ready to run today?
      - How many test cases must the team still write and review?
      - Does the overall number of test cases appear to be sufficient for the number of User stories that the team is implementing?
      - What percentage of test cases can the test team run today?
      - Will the team be able to prepare all the test cases by the end of the iteration?|- Healthy progress shows a steady increase in the number of test cases that the team is designing and moving to the ready state.
      - Unhealthy progress shows that no or few test cases are ready to be run.
      When all test cases remain in a design state for a long time, an issue may block progress. You might want to investigate the cause of the blockage.
      - A gap in testing may develop if the number of test cases does not appear sufficient.
      The number of test cases that are defined for a project should be equal to or larger than the number of User stories that the team is implementing. The number of test cases does not appear sufficient.| +|**Test Plan Progress**|- How many test cases are passing?
      - How many test cases are failing?
      - How many test cases are blocked?
      - How many test cases have never run?
      - What percentage of test cases are passing across all Test Plans?
      - How much testing has the team completed?
      - Is the team likely to finish the testing on time?|- As the development cycle progresses, the more test cases should pass, and fewer test cases should stay in other states.
      - Unhealthy progress occurs when too many test cases fail. Depending on where you are in the product cycle, you might investigate why so many test cases are failing.
      - If the number of test cases that are failing or never run is flat, you might want to investigate the specific causes that affect each area.| +|**User Story Test Status**

      **Requirement Test Status**|- Are test cases being run for each user story or requirement?
      - If test cases are blocked or not being run, does the team understand the blocking issues and are they being addressed?|- Healthy progress shows most test cases for each user story or requirement are passing.
      - Unhealthy progress is indicated too many test cases for a specific user story or requirement, which are in a **Never Run**, **Blocked**, or **Failed** state. You might want to investigate the causes that keep the test cases that are defined for a user story or requirement from passing.| + +## Determine gaps in testing + You can use the **User Story Test Status** or **Requirement Test Status** report to determine whether tests are covering all the code and to answer the following questions: + +- Which user stories or requirements have a low overall count of test cases? + +- Which user stories or requirements have a high overall count of test cases that are blocked or have never been run? + +- Does the test case coverage for each user story or requirement meet expectations? + +- Which user stories or requirements have a high rate of test failures? + +- What is the average number of test cases that are defined for each user story or requirement? + +## Monitor test failures and regressions + By monitoring test failures, you can identify and address problems in the code early. You can use the last two reports in the Test Dashboard to gain better insight into the number of tests that are failing. + +|Report|Questions answered|Notes| +|------------|------------------------|-----------| +|**Manual Test Activity**|- Is the number of tests that the team has never run decreasing?
      - Is the team minimizing the overall number of blocked tests?
      - Are fewer tests failing over time?
      - Are more tests passing?
      - Does the test activity contain spikes that you cannot account for?|The **Manual Test Activity** report indicates the results for each test case run for each test configuration and for all test plans. Spikes that might occur may be early indicators of problems in either the test activity or the quality of code that the team is checking in.

      You might want to check the metrics for recent builds, bug status, and code churn to determine whether any of them can help explain the changes.| +|**Test Failure Analysis**|- How many tests are regressing?
      - Is the team keeping the overall number of regressions or test failures within expected ranges or team goals?
      - Is the team addressing issues as they are identified and known issues in a timely manner?|A healthy Test Failure Analysis report shows moderate numbers of new issues, known issues, and regressions. If any spikes occur in these areas, the team might need to investigate further. Spikes may indicate problems in either the test activity or the quality of code that the team is checking in.

      Also, you might want to check the metrics for recent builds, bug status, and code churn to determine whether any of them can help explain the changes.| + +## Related notes + [Project portal dashboards](project-portal-dashboards.md) diff --git a/docs/report/sharepoint-dashboards/upload-refresh-excel-reports.md b/docs/report/sharepoint-dashboards/upload-refresh-excel-reports.md new file mode 100644 index 00000000000..17e6d407d99 --- /dev/null +++ b/docs/report/sharepoint-dashboards/upload-refresh-excel-reports.md @@ -0,0 +1,29 @@ +--- +title: Upload Excel reports | TFS +description: Add Excel reports to a SharePoint project portal +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: a606b12a-ac2e-4a02-a8b0-56f18c3dcc82 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Upload and refresh Excel reports in the team project portal + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +After you create a report in Excel that shows data for your team project, you can share that report with other team members. You can add the report to a shared folder or send it in e-mail, or you can upload the report to your team's *project portal*. To keep the report accurate, you might also want to run the report again on a particular schedule, such as every week or at each project milestone. + +## Upload reports to a project portal + You can share Microsoft Excel reports just as you share any other document through the project portal. You can upload reports into the portal from either the portal itself or from Team Explorer. For more information, see [Manage documents and document libraries](manage-documents-and-document-libraries.md). After you have uploaded your reports, you can manage them the same way that you manage any other documents that you have uploaded to your portal. If you have many reports, you might want to group them within folders to make it easier to find specific reports. + +## Refresh saved reports + When you view a report using Microsoft Excel, the data appears as it existed in the spreadsheet when the file was most recently saved. To display more current data, you must refresh the report. To refresh the report, you must have access to the same data source on which the report is based. + + If your report is based on a work item query, you must refresh the contents of the work item list, and then you must refresh the PivotTable and PivotChart reports. To refresh a list of work items, you display the Team ribbon and then click Refresh. To refresh PivotTable and PivotChart reports, you open the Data menu and then click **Refresh**. + + To maintain history for a report, you can save a copy of it every time that you refresh the data. If you need your reports to be refreshed automatically, you might consider using SQL Server Reporting Services to create your report instead. For more information, see [Choose the source of data and authoring tool](../choose-source-data-authoring-tool.md). + +## Related notes +- [Create Excel reports from a work item query](../excel/create-status-and-trend-excel-reports.md) +- [Perspectives and measure groups provided in the Analysis Services cube](../sql-reports/perspective-measure-groups-cube.md) \ No newline at end of file diff --git a/docs/report/sql-reports/_img/alm_pg_agile_addbug.png b/docs/report/sql-reports/_img/alm_pg_agile_addbug.png new file mode 100644 index 00000000000..c2a26eb8571 Binary files /dev/null and b/docs/report/sql-reports/_img/alm_pg_agile_addbug.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_area_hierarchy.png b/docs/report/sql-reports/_img/alm_rpt_area_hierarchy.png new file mode 100644 index 00000000000..9f92a97eb6c Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_area_hierarchy.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_changeddate_hierarchy.png b/docs/report/sql-reports/_img/alm_rpt_changeddate_hierarchy.png new file mode 100644 index 00000000000..4874889daae Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_changeddate_hierarchy.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_date_dimension.png b/docs/report/sql-reports/_img/alm_rpt_date_dimension.png new file mode 100644 index 00000000000..10fd2c05301 Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_date_dimension.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_datehierarchy.png b/docs/report/sql-reports/_img/alm_rpt_datehierarchy.png new file mode 100644 index 00000000000..797af86d570 Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_datehierarchy.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_iteration_hierarchy.png b/docs/report/sql-reports/_img/alm_rpt_iteration_hierarchy.png new file mode 100644 index 00000000000..3e68ba3de52 Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_iteration_hierarchy.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_pivot_bugreactivations.png b/docs/report/sql-reports/_img/alm_rpt_pivot_bugreactivations.png new file mode 100644 index 00000000000..47ecc69a15f Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_pivot_bugreactivations.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_pivot_build.png b/docs/report/sql-reports/_img/alm_rpt_pivot_build.png new file mode 100644 index 00000000000..8e50a5e53f9 Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_pivot_build.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_pivot_codechurn.png b/docs/report/sql-reports/_img/alm_rpt_pivot_codechurn.png new file mode 100644 index 00000000000..6058c1bde4c Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_pivot_codechurn.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_teamproject.png b/docs/report/sql-reports/_img/alm_rpt_teamproject.png new file mode 100644 index 00000000000..db32286d901 Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_teamproject.png differ diff --git a/docs/report/sql-reports/_img/alm_rpt_workitemtree.png b/docs/report/sql-reports/_img/alm_rpt_workitemtree.png new file mode 100644 index 00000000000..976df985abb Binary files /dev/null and b/docs/report/sql-reports/_img/alm_rpt_workitemtree.png differ diff --git a/docs/report/sql-reports/_img/alm_uprp_rm_scrumreports.png b/docs/report/sql-reports/_img/alm_uprp_rm_scrumreports.png new file mode 100644 index 00000000000..c437e4d8dca Binary files /dev/null and b/docs/report/sql-reports/_img/alm_uprp_rm_scrumreports.png differ diff --git a/docs/report/sql-reports/_img/alm_uprp_te_scrumreports.png b/docs/report/sql-reports/_img/alm_uprp_te_scrumreports.png new file mode 100644 index 00000000000..b8a468f3acc Binary files /dev/null and b/docs/report/sql-reports/_img/alm_uprp_te_scrumreports.png differ diff --git a/docs/report/sql-reports/_img/icon_collapse.gif b/docs/report/sql-reports/_img/icon_collapse.gif new file mode 100644 index 00000000000..9c683d1fb09 Binary files /dev/null and b/docs/report/sql-reports/_img/icon_collapse.gif differ diff --git a/docs/report/sql-reports/_img/icon_expand.gif b/docs/report/sql-reports/_img/icon_expand.gif new file mode 100644 index 00000000000..adc68ef4a8e Binary files /dev/null and b/docs/report/sql-reports/_img/icon_expand.gif differ diff --git a/docs/report/sql-reports/_img/icon_reportte.png b/docs/report/sql-reports/_img/icon_reportte.png new file mode 100644 index 00000000000..da09a927414 Binary files /dev/null and b/docs/report/sql-reports/_img/icon_reportte.png differ diff --git a/docs/report/sql-reports/_img/pivotfieldsforuserstoriestestprogress.png b/docs/report/sql-reports/_img/pivotfieldsforuserstoriestestprogress.png new file mode 100644 index 00000000000..7da28e96921 Binary files /dev/null and b/docs/report/sql-reports/_img/pivotfieldsforuserstoriestestprogress.png differ diff --git a/docs/report/sql-reports/_img/procg_reportunplanned.png b/docs/report/sql-reports/_img/procg_reportunplanned.png new file mode 100644 index 00000000000..2e3b01e10c5 Binary files /dev/null and b/docs/report/sql-reports/_img/procg_reportunplanned.png differ diff --git a/docs/report/sql-reports/_img/procg_reqoverview.png b/docs/report/sql-reports/_img/procg_reqoverview.png new file mode 100644 index 00000000000..029dac5a6d5 Binary files /dev/null and b/docs/report/sql-reports/_img/procg_reqoverview.png differ diff --git a/docs/report/sql-reports/_img/procg_reqprogress.png b/docs/report/sql-reports/_img/procg_reqprogress.png new file mode 100644 index 00000000000..94f2b1f7b83 Binary files /dev/null and b/docs/report/sql-reports/_img/procg_reqprogress.png differ diff --git a/docs/report/sql-reports/_img/procg_unplannedwork.png b/docs/report/sql-reports/_img/procg_unplannedwork.png new file mode 100644 index 00000000000..3cd67c4dbe3 Binary files /dev/null and b/docs/report/sql-reports/_img/procg_unplannedwork.png differ diff --git a/docs/report/sql-reports/_img/procguid_agileexcel.png b/docs/report/sql-reports/_img/procguid_agileexcel.png new file mode 100644 index 00000000000..43ec5e762bd Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_agileexcel.png differ diff --git a/docs/report/sql-reports/_img/procguid_agileexr.png b/docs/report/sql-reports/_img/procguid_agileexr.png new file mode 100644 index 00000000000..46224712d66 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_agileexr.png differ diff --git a/docs/report/sql-reports/_img/procguid_agilereports.png b/docs/report/sql-reports/_img/procguid_agilereports.png new file mode 100644 index 00000000000..9d1f0cf3f4f Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_agilereports.png differ diff --git a/docs/report/sql-reports/_img/procguid_alliterations.png b/docs/report/sql-reports/_img/procguid_alliterations.png new file mode 100644 index 00000000000..7b318b4d082 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_alliterations.png differ diff --git a/docs/report/sql-reports/_img/procguid_bugs_bugtrends.png b/docs/report/sql-reports/_img/procguid_bugs_bugtrends.png new file mode 100644 index 00000000000..1ad12d7e163 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_bugs_bugtrends.png differ diff --git a/docs/report/sql-reports/_img/procguid_bugs_reactivationshealthy.png b/docs/report/sql-reports/_img/procguid_bugs_reactivationshealthy.png new file mode 100644 index 00000000000..99442b237ce Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_bugs_reactivationshealthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_bugstatus.png b/docs/report/sql-reports/_img/procguid_bugstatus.png new file mode 100644 index 00000000000..06f3b52425a Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_bugstatus.png differ diff --git a/docs/report/sql-reports/_img/procguid_bugstatus_healthy.png b/docs/report/sql-reports/_img/procguid_bugstatus_healthy.png new file mode 100644 index 00000000000..a45ca3d2ed6 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_bugstatus_healthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_bugstatus_unhealthy.png b/docs/report/sql-reports/_img/procguid_bugstatus_unhealthy.png new file mode 100644 index 00000000000..18739d39e31 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_bugstatus_unhealthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_bugstatusdata.png b/docs/report/sql-reports/_img/procguid_bugstatusdata.png new file mode 100644 index 00000000000..ba1aa06eb0a Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_bugstatusdata.png differ diff --git a/docs/report/sql-reports/_img/procguid_bugtrends_dataunhealthy.png b/docs/report/sql-reports/_img/procguid_bugtrends_dataunhealthy.png new file mode 100644 index 00000000000..63f03e2d15b Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_bugtrends_dataunhealthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_bugtrendsfilters.png b/docs/report/sql-reports/_img/procguid_bugtrendsfilters.png new file mode 100644 index 00000000000..4e004a253f4 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_bugtrendsfilters.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildquality_healthy.png b/docs/report/sql-reports/_img/procguid_buildquality_healthy.png new file mode 100644 index 00000000000..2202957df07 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildquality_healthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_codechurn.png b/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_codechurn.png new file mode 100644 index 00000000000..1cf0df4200a Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_codechurn.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_highcodechurn.png b/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_highcodechurn.png new file mode 100644 index 00000000000..4c8147cac5b Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_highcodechurn.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_lowratetests.png b/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_lowratetests.png new file mode 100644 index 00000000000..5e488417f43 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_lowratetests.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_testfailing.png b/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_testfailing.png new file mode 100644 index 00000000000..62ab7ff8689 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildquality_unhealthy_testfailing.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildqualityindicators.png b/docs/report/sql-reports/_img/procguid_buildqualityindicators.png new file mode 100644 index 00000000000..d1bde035f70 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildqualityindicators.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildqualityindicators_filters.png b/docs/report/sql-reports/_img/procguid_buildqualityindicators_filters.png new file mode 100644 index 00000000000..88fd76ad228 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildqualityindicators_filters.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildsuccess_green.png b/docs/report/sql-reports/_img/procguid_buildsuccess_green.png new file mode 100644 index 00000000000..39b54e5a9b6 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildsuccess_green.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildsuccess_lightgreen.png b/docs/report/sql-reports/_img/procguid_buildsuccess_lightgreen.png new file mode 100644 index 00000000000..701a733811a Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildsuccess_lightgreen.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildsuccess_orange.png b/docs/report/sql-reports/_img/procguid_buildsuccess_orange.png new file mode 100644 index 00000000000..906cb3eb331 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildsuccess_orange.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildsuccess_red.png b/docs/report/sql-reports/_img/procguid_buildsuccess_red.png new file mode 100644 index 00000000000..b1d56192563 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildsuccess_red.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildsuccess_unhealthy.png b/docs/report/sql-reports/_img/procguid_buildsuccess_unhealthy.png new file mode 100644 index 00000000000..b7c64468d92 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildsuccess_unhealthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildsuccess_white.png b/docs/report/sql-reports/_img/procguid_buildsuccess_white.png new file mode 100644 index 00000000000..6e00084aeb7 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildsuccess_white.png differ diff --git a/docs/report/sql-reports/_img/procguid_buildsuccess_yellow.png b/docs/report/sql-reports/_img/procguid_buildsuccess_yellow.png new file mode 100644 index 00000000000..98f8f214c1b Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_buildsuccess_yellow.png differ diff --git a/docs/report/sql-reports/_img/procguid_burndown.png b/docs/report/sql-reports/_img/procguid_burndown.png new file mode 100644 index 00000000000..b2dc79ee7d4 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_burndown.png differ diff --git a/docs/report/sql-reports/_img/procguid_burndownbottom.png b/docs/report/sql-reports/_img/procguid_burndownbottom.png new file mode 100644 index 00000000000..9201d1f9232 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_burndownbottom.png differ diff --git a/docs/report/sql-reports/_img/procguid_codechurn.png b/docs/report/sql-reports/_img/procguid_codechurn.png new file mode 100644 index 00000000000..47e487125e9 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_codechurn.png differ diff --git a/docs/report/sql-reports/_img/procguid_data2.png b/docs/report/sql-reports/_img/procguid_data2.png new file mode 100644 index 00000000000..11ed5784de1 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_data2.png differ diff --git a/docs/report/sql-reports/_img/procguid_exruserstore.png b/docs/report/sql-reports/_img/procguid_exruserstore.png new file mode 100644 index 00000000000..e393b6fd9d0 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_exruserstore.png differ diff --git a/docs/report/sql-reports/_img/procguid_healthy.png b/docs/report/sql-reports/_img/procguid_healthy.png new file mode 100644 index 00000000000..34b288d88f6 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_healthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_healthyburndown.png b/docs/report/sql-reports/_img/procguid_healthyburndown.png new file mode 100644 index 00000000000..9e1e035a0c1 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_healthyburndown.png differ diff --git a/docs/report/sql-reports/_img/procguid_healthywork.png b/docs/report/sql-reports/_img/procguid_healthywork.png new file mode 100644 index 00000000000..56bc69b4d11 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_healthywork.png differ diff --git a/docs/report/sql-reports/_img/procguid_numberofwi_remainingwork.png b/docs/report/sql-reports/_img/procguid_numberofwi_remainingwork.png new file mode 100644 index 00000000000..75736cbeb37 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_numberofwi_remainingwork.png differ diff --git a/docs/report/sql-reports/_img/procguid_part2burndown.png b/docs/report/sql-reports/_img/procguid_part2burndown.png new file mode 100644 index 00000000000..f984da2960c Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_part2burndown.png differ diff --git a/docs/report/sql-reports/_img/procguid_planprogressfilters.png b/docs/report/sql-reports/_img/procguid_planprogressfilters.png new file mode 100644 index 00000000000..d1740924fa2 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_planprogressfilters.png differ diff --git a/docs/report/sql-reports/_img/procguid_progressfilters.png b/docs/report/sql-reports/_img/procguid_progressfilters.png new file mode 100644 index 00000000000..65c4815c44c Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_progressfilters.png differ diff --git a/docs/report/sql-reports/_img/procguid_reactivationsunhealthy.png b/docs/report/sql-reports/_img/procguid_reactivationsunhealthy.png new file mode 100644 index 00000000000..68024d54b92 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_reactivationsunhealthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_readiness.png b/docs/report/sql-reports/_img/procguid_readiness.png new file mode 100644 index 00000000000..959f6185827 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_readiness.png differ diff --git a/docs/report/sql-reports/_img/procguid_refresh_icon.png b/docs/report/sql-reports/_img/procguid_refresh_icon.png new file mode 100644 index 00000000000..69e387bf24a Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_refresh_icon.png differ diff --git a/docs/report/sql-reports/_img/procguid_remainingwork.png b/docs/report/sql-reports/_img/procguid_remainingwork.png new file mode 100644 index 00000000000..c4be614f69f Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_remainingwork.png differ diff --git a/docs/report/sql-reports/_img/procguid_reports_buildsummary.png b/docs/report/sql-reports/_img/procguid_reports_buildsummary.png new file mode 100644 index 00000000000..7a922aebb10 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_reports_buildsummary.png differ diff --git a/docs/report/sql-reports/_img/procguid_reports_buildsummary_filters.png b/docs/report/sql-reports/_img/procguid_reports_buildsummary_filters.png new file mode 100644 index 00000000000..c89159b05dc Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_reports_buildsummary_filters.png differ diff --git a/docs/report/sql-reports/_img/procguid_reports_testprogress.png b/docs/report/sql-reports/_img/procguid_reports_testprogress.png new file mode 100644 index 00000000000..92ed0d9dacb Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_reports_testprogress.png differ diff --git a/docs/report/sql-reports/_img/procguid_reportsbugsreactivations.png b/docs/report/sql-reports/_img/procguid_reportsbugsreactivations.png new file mode 100644 index 00000000000..0f17ceca4f8 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_reportsbugsreactivations.png differ diff --git a/docs/report/sql-reports/_img/procguid_repstoriesprogress.png b/docs/report/sql-reports/_img/procguid_repstoriesprogress.png new file mode 100644 index 00000000000..7e76e0a953f Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_repstoriesprogress.png differ diff --git a/docs/report/sql-reports/_img/procguid_scopecreep.png b/docs/report/sql-reports/_img/procguid_scopecreep.png new file mode 100644 index 00000000000..faa0aeab039 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_scopecreep.png differ diff --git a/docs/report/sql-reports/_img/procguid_statusonall2.png b/docs/report/sql-reports/_img/procguid_statusonall2.png new file mode 100644 index 00000000000..6f5fa578136 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_statusonall2.png differ diff --git a/docs/report/sql-reports/_img/procguid_successdata.png b/docs/report/sql-reports/_img/procguid_successdata.png new file mode 100644 index 00000000000..ae7e3242a56 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_successdata.png differ diff --git a/docs/report/sql-reports/_img/procguid_testcasereadiness.png b/docs/report/sql-reports/_img/procguid_testcasereadiness.png new file mode 100644 index 00000000000..e32f7dca254 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_testcasereadiness.png differ diff --git a/docs/report/sql-reports/_img/procguid_testcasereadiness_healthy.png b/docs/report/sql-reports/_img/procguid_testcasereadiness_healthy.png new file mode 100644 index 00000000000..98b0f5f354a Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_testcasereadiness_healthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_testplanprogress_healthy.png b/docs/report/sql-reports/_img/procguid_testplanprogress_healthy.png new file mode 100644 index 00000000000..37af7a3ce35 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_testplanprogress_healthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_testplanprogress_unhealthy.png b/docs/report/sql-reports/_img/procguid_testplanprogress_unhealthy.png new file mode 100644 index 00000000000..7aa33749c95 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_testplanprogress_unhealthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_unhealth_lowratetests2.png b/docs/report/sql-reports/_img/procguid_unhealth_lowratetests2.png new file mode 100644 index 00000000000..8bf87b80fc3 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_unhealth_lowratetests2.png differ diff --git a/docs/report/sql-reports/_img/procguid_unhealthy.png b/docs/report/sql-reports/_img/procguid_unhealthy.png new file mode 100644 index 00000000000..1c89bc83e76 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_unhealthy.png differ diff --git a/docs/report/sql-reports/_img/procguid_unhealthywork.png b/docs/report/sql-reports/_img/procguid_unhealthywork.png new file mode 100644 index 00000000000..4da3f2434c2 Binary files /dev/null and b/docs/report/sql-reports/_img/procguid_unhealthywork.png differ diff --git a/docs/report/sql-reports/_img/procguide_bugsreactivationsfilters.png b/docs/report/sql-reports/_img/procguide_bugsreactivationsfilters.png new file mode 100644 index 00000000000..78d88be6c7e Binary files /dev/null and b/docs/report/sql-reports/_img/procguide_bugsreactivationsfilters.png differ diff --git a/docs/report/sql-reports/_img/procguide_reportsremainingwork.png b/docs/report/sql-reports/_img/procguide_reportsremainingwork.png new file mode 100644 index 00000000000..d2ed48cca87 Binary files /dev/null and b/docs/report/sql-reports/_img/procguide_reportsremainingwork.png differ diff --git a/docs/report/sql-reports/_img/procguide_testcasereadiness_unhealthy.png b/docs/report/sql-reports/_img/procguide_testcasereadiness_unhealthy.png new file mode 100644 index 00000000000..a23266de8c5 Binary files /dev/null and b/docs/report/sql-reports/_img/procguide_testcasereadiness_unhealthy.png differ diff --git a/docs/report/sql-reports/_img/querybuilder.png b/docs/report/sql-reports/_img/querybuilder.png new file mode 100644 index 00000000000..10f0e82d992 Binary files /dev/null and b/docs/report/sql-reports/_img/querybuilder.png differ diff --git a/docs/report/sql-reports/_img/reportdesignercube.png b/docs/report/sql-reports/_img/reportdesignercube.png new file mode 100644 index 00000000000..c18e9ab2b4e Binary files /dev/null and b/docs/report/sql-reports/_img/reportdesignercube.png differ diff --git a/docs/report/sql-reports/_img/reportdesignmeasure.png b/docs/report/sql-reports/_img/reportdesignmeasure.png new file mode 100644 index 00000000000..0d165faaac7 Binary files /dev/null and b/docs/report/sql-reports/_img/reportdesignmeasure.png differ diff --git a/docs/report/sql-reports/_img/rpt_codechurn.png b/docs/report/sql-reports/_img/rpt_codechurn.png new file mode 100644 index 00000000000..005106a28c7 Binary files /dev/null and b/docs/report/sql-reports/_img/rpt_codechurn.png differ diff --git a/docs/report/sql-reports/_img/rpt_codecoverage.png b/docs/report/sql-reports/_img/rpt_codecoverage.png new file mode 100644 index 00000000000..e637f0ba6d2 Binary files /dev/null and b/docs/report/sql-reports/_img/rpt_codecoverage.png differ diff --git a/docs/report/sql-reports/_img/rpt_cube_definitions.png b/docs/report/sql-reports/_img/rpt_cube_definitions.png new file mode 100644 index 00000000000..f519434eac2 Binary files /dev/null and b/docs/report/sql-reports/_img/rpt_cube_definitions.png differ diff --git a/docs/report/sql-reports/_img/rpt_cubemg.png b/docs/report/sql-reports/_img/rpt_cubemg.png new file mode 100644 index 00000000000..2d2b760bb74 Binary files /dev/null and b/docs/report/sql-reports/_img/rpt_cubemg.png differ diff --git a/docs/report/sql-reports/_img/rpt_measuregroups.png b/docs/report/sql-reports/_img/rpt_measuregroups.png new file mode 100644 index 00000000000..c67fe8fbe2b Binary files /dev/null and b/docs/report/sql-reports/_img/rpt_measuregroups.png differ diff --git a/docs/report/sql-reports/_img/rpt_mgroups.png b/docs/report/sql-reports/_img/rpt_mgroups.png new file mode 100644 index 00000000000..5cc3f1d51c7 Binary files /dev/null and b/docs/report/sql-reports/_img/rpt_mgroups.png differ diff --git a/docs/report/sql-reports/_img/rpt_testmg.png b/docs/report/sql-reports/_img/rpt_testmg.png new file mode 100644 index 00000000000..3e356956c1a Binary files /dev/null and b/docs/report/sql-reports/_img/rpt_testmg.png differ diff --git a/docs/report/sql-reports/_img/rpt_wit_mg.png b/docs/report/sql-reports/_img/rpt_wit_mg.png new file mode 100644 index 00000000000..94e1b6e32cf Binary files /dev/null and b/docs/report/sql-reports/_img/rpt_wit_mg.png differ diff --git a/docs/report/sql-reports/_img/rpt_workitem_folders.png b/docs/report/sql-reports/_img/rpt_workitem_folders.png new file mode 100644 index 00000000000..e713987632c Binary files /dev/null and b/docs/report/sql-reports/_img/rpt_workitem_folders.png differ diff --git a/docs/report/sql-reports/_img/scrum_releaseburndonw.png b/docs/report/sql-reports/_img/scrum_releaseburndonw.png new file mode 100644 index 00000000000..f8424214385 Binary files /dev/null and b/docs/report/sql-reports/_img/scrum_releaseburndonw.png differ diff --git a/docs/report/sql-reports/_img/scrum_sprintburndown.png b/docs/report/sql-reports/_img/scrum_sprintburndown.png new file mode 100644 index 00000000000..190c98e4e1a Binary files /dev/null and b/docs/report/sql-reports/_img/scrum_sprintburndown.png differ diff --git a/docs/report/sql-reports/_img/scrum_velocity.png b/docs/report/sql-reports/_img/scrum_velocity.png new file mode 100644 index 00000000000..111083274f2 Binary files /dev/null and b/docs/report/sql-reports/_img/scrum_velocity.png differ diff --git a/docs/report/sql-reports/_img/teamproj_buildfacts.png b/docs/report/sql-reports/_img/teamproj_buildfacts.png new file mode 100644 index 00000000000..66afd2fb26b Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_buildfacts.png differ diff --git a/docs/report/sql-reports/_img/teamproj_codefacts.png b/docs/report/sql-reports/_img/teamproj_codefacts.png new file mode 100644 index 00000000000..1adcd67a273 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_codefacts.png differ diff --git a/docs/report/sql-reports/_img/teamproj_currentworkitem.png b/docs/report/sql-reports/_img/teamproj_currentworkitem.png new file mode 100644 index 00000000000..af2d8350508 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_currentworkitem.png differ diff --git a/docs/report/sql-reports/_img/teamproj_dimensions.png b/docs/report/sql-reports/_img/teamproj_dimensions.png new file mode 100644 index 00000000000..56840b58b30 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_dimensions.png differ diff --git a/docs/report/sql-reports/_img/teamproj_factbuildchangeset.png b/docs/report/sql-reports/_img/teamproj_factbuildchangeset.png new file mode 100644 index 00000000000..e501671856e Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_factbuildchangeset.png differ diff --git a/docs/report/sql-reports/_img/teamproj_factbuildcoverage.png b/docs/report/sql-reports/_img/teamproj_factbuildcoverage.png new file mode 100644 index 00000000000..a558ecb1aa3 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_factbuildcoverage.png differ diff --git a/docs/report/sql-reports/_img/teamproj_factbuilddetails.png b/docs/report/sql-reports/_img/teamproj_factbuilddetails.png new file mode 100644 index 00000000000..b62d254d7f3 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_factbuilddetails.png differ diff --git a/docs/report/sql-reports/_img/teamproj_factbuildproject.png b/docs/report/sql-reports/_img/teamproj_factbuildproject.png new file mode 100644 index 00000000000..8039715138b Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_factbuildproject.png differ diff --git a/docs/report/sql-reports/_img/teamproj_factcodechurn.png b/docs/report/sql-reports/_img/teamproj_factcodechurn.png new file mode 100644 index 00000000000..e5ab55a517a Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_factcodechurn.png differ diff --git a/docs/report/sql-reports/_img/teamproj_factruncoverage.png b/docs/report/sql-reports/_img/teamproj_factruncoverage.png new file mode 100644 index 00000000000..20152d7f1e4 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_factruncoverage.png differ diff --git a/docs/report/sql-reports/_img/teamproj_facttestresult.png b/docs/report/sql-reports/_img/teamproj_facttestresult.png new file mode 100644 index 00000000000..fc792964e70 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_facttestresult.png differ diff --git a/docs/report/sql-reports/_img/teamproj_factworkchangeset.png b/docs/report/sql-reports/_img/teamproj_factworkchangeset.png new file mode 100644 index 00000000000..38908581ca1 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_factworkchangeset.png differ diff --git a/docs/report/sql-reports/_img/teamproj_factworkitemcategory.png b/docs/report/sql-reports/_img/teamproj_factworkitemcategory.png new file mode 100644 index 00000000000..510a4e0ea05 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_factworkitemcategory.png differ diff --git a/docs/report/sql-reports/_img/teamproj_itemhistory.png b/docs/report/sql-reports/_img/teamproj_itemhistory.png new file mode 100644 index 00000000000..3fe2e42577a Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_itemhistory.png differ diff --git a/docs/report/sql-reports/_img/teamproj_measures.png b/docs/report/sql-reports/_img/teamproj_measures.png new file mode 100644 index 00000000000..e96fb72d4d1 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_measures.png differ diff --git a/docs/report/sql-reports/_img/teamproj_result_other.png b/docs/report/sql-reports/_img/teamproj_result_other.png new file mode 100644 index 00000000000..e45995b14ec Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_result_other.png differ diff --git a/docs/report/sql-reports/_img/teamproj_testfacts.png b/docs/report/sql-reports/_img/teamproj_testfacts.png new file mode 100644 index 00000000000..7fc3889b095 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_testfacts.png differ diff --git a/docs/report/sql-reports/_img/teamproj_testresultbuild.png b/docs/report/sql-reports/_img/teamproj_testresultbuild.png new file mode 100644 index 00000000000..5ad4d6f85d5 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_testresultbuild.png differ diff --git a/docs/report/sql-reports/_img/teamproj_testresultother.png b/docs/report/sql-reports/_img/teamproj_testresultother.png new file mode 100644 index 00000000000..eef15013fd6 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_testresultother.png differ diff --git a/docs/report/sql-reports/_img/teamproj_warehouse.png b/docs/report/sql-reports/_img/teamproj_warehouse.png new file mode 100644 index 00000000000..27c5dd424b6 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_warehouse.png differ diff --git a/docs/report/sql-reports/_img/teamproj_workitemfacts.png b/docs/report/sql-reports/_img/teamproj_workitemfacts.png new file mode 100644 index 00000000000..b26e7292883 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_workitemfacts.png differ diff --git a/docs/report/sql-reports/_img/teamproj_worklinkhistory.png b/docs/report/sql-reports/_img/teamproj_worklinkhistory.png new file mode 100644 index 00000000000..29bec3decc4 Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_worklinkhistory.png differ diff --git a/docs/report/sql-reports/_img/teamproj_worktestresult.png b/docs/report/sql-reports/_img/teamproj_worktestresult.png new file mode 100644 index 00000000000..d307722585b Binary files /dev/null and b/docs/report/sql-reports/_img/teamproj_worktestresult.png differ diff --git a/docs/report/sql-reports/_img/tfs_datawarearch_r.png b/docs/report/sql-reports/_img/tfs_datawarearch_r.png new file mode 100644 index 00000000000..5c7ef7a7b9d Binary files /dev/null and b/docs/report/sql-reports/_img/tfs_datawarearch_r.png differ diff --git a/docs/report/sql-reports/backlog-overview-scrum.md b/docs/report/sql-reports/backlog-overview-scrum.md new file mode 100644 index 00000000000..9ffe1e73031 --- /dev/null +++ b/docs/report/sql-reports/backlog-overview-scrum.md @@ -0,0 +1,70 @@ +--- +title: Backlog overview (Scrum) | TFS +description: Reports the lists of all product backlog items (PBIs) - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: b3e2c54e-99de-47d1-9fa5-08539ff31c87 +ms.author: kaelli +ms.manager: douge +ms.date: 02/22/2017 +--- + +# Backlog overview (Scrum) + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +The Backlog Overview report lists all product backlog items (PBIs), both active and completed. It doesn't include bugs. The report presents a snapshot of the work that has been performed for the filtered set of PBIs. + + ![Backlog Overview report](_img/alm_pg_agile_addbug.png "ALM_PG_Agile_AddBug") + + To learn how to open the report, refresh the data, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + + Use this report to answer the following questions: + +|Work progress|Quality progress and risk assessment| +|-------------------|------------------------------------------| +|- How much work does each PBI require?
      - Does the amount of work that remains for each PBI correspond to your expectations?
      - Are top-ranked PBIs being implemented first?
      - How many tests are defined for each PBI? How many tests are passing?
      - Which PBIs don't have test cases?|- How many test cases have run for each PBI, and how many have passed?
      - Which PBIs are at risk?
      - Which PBIs are not stable enough for release?
      - Which PBIs can the team ship today?| + + **Requirements** + +- This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + +- To view the report, you must be assigned or belong to a group that has been assigned a **Browser** or **Content Manager** role in Reporting Services. For more information, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + +## Data in the report + This report displays the following information for each PBI that it lists: + +|Work Progress|Test Status| +|-------------------|-----------------| +|- **Hours Breakdown**: A visual representation that shows the percentage of completed work based on the rollup of remaining hours for all tasks that are linked to the PBI or its child PBIs.
      - **To Do**: A rollup of the remaining hours for tasks in the To Do state that are linked to the PBI or its child PBIs.
      - **In Progress**: A rollup of the remaining hours for tasks in the In Progress state that are linked to the PBI or its child PBIs.|- **Test Points**: A numeric value that represents the number of pairings of test cases with test configurations in a specific test suite. For more information about test points, see [Reporting on testing progress for test plans](../../manual-test/getting-started/track-test-status.md).
      - **Test Results**: A numeric value and visual representation that shows the percentage of test cases, grouped according to the status of their most recent test run, where the options are **Passed** (green), **Failed** (red), or **Not Run** (black).| + +### Healthy and unhealthy versions of the report + A healthy report shows more progress on PBIs that appear near the top of the report. + + An unhealthy report indicates progress on PBIs that have a lower rank than on PBIs that have a higher rank, or that more tests are failing than passing. + +### PBIs that appear in the report + The report lists and highlights PBIs according to the following criteria: + +- PBIs appear in order of their importance, based on their assigned ranking (Backlog Priority field). + +- PBIs appear in bold type when they are in the New, Approved, or Committed states. + +- PBIs appear in normal type when they are in the Done state. + +- PBIs appear in gray type when their assigned iteration or area is outside the filtered set, but they have tasks or child PBIs that are within the filtered set of iterations or product areas. + +### Required activities to track the backlog + To populate the report with useful data, the team performs the following activities: + +- Define PBIs and tasks. Make sure that tasks are linked to their parent PBIs through a **Child** link. Also, create a **Child** link from any subtasks to its parent task. For more information, see [Define the tasks required to implement PBIs and bugs](http://msdn.microsoft.com/en-us/34c866ea-a130-4371-bfc4-a3d9f87dccca). + + If you subdivide a task into subtasks, specify hours only for the subtasks. Hours are roll up as summary values for the parent task and PBI. + +- Define and update the **State** and **Remaining** fields for each task or subtask during the iteration or release. + +- Define test cases and link test cases to their parent PBIs using the **Tested By** link. See [Create your tests](../../manual-test/getting-started/create-test-cases.md). + +- Specify the **Iteration** and **Area** paths for each PBI, task, and test case. + + For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . diff --git a/docs/report/sql-reports/breadcrumb/toc.yml b/docs/report/sql-reports/breadcrumb/toc.yml new file mode 100644 index 00000000000..9fe34cdda5a --- /dev/null +++ b/docs/report/sql-reports/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Integrate + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=integration + items: + - name: SQL Server Reports Integration + tocHref: /vsts/ + topicHref: /vsts/report/sql-reports/index \ No newline at end of file diff --git a/docs/report/sql-reports/bug-status-report.md b/docs/report/sql-reports/bug-status-report.md new file mode 100644 index 00000000000..7b5de77fa0a --- /dev/null +++ b/docs/report/sql-reports/bug-status-report.md @@ -0,0 +1,149 @@ +--- +title: Bug Status Report | TFS +description: Track the team's progress toward resolving and closing bugs by viewing the Bug Status report - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: ede30011-e04a-4914-ab68-b4c725a54f96 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Bug Status Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +After the team has started to find and fix bugs, you can track the team's progress toward resolving and closing bugs by viewing the Bug Status report. This report shows the cumulative bug count based on the bug state, priority, and severity. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + +**You can use this report to answer the following questions**:

      - Is the team fixing bugs quickly enough to finish on time?
      - Is the team fixing high priority bugs first?
      - What is the distribution of bugs by priority and severity?
      - How many bugs are assigned to each team member? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + +## Data in the Report + The data that appears in the Bug Status report is derived from the data warehouse. This report displays several sets of information as the following illustrations and table show and describe. + + ![Bug status chart](_img/procguid_bugstatusdata.png "ProcGuid_BugStatusData") + + ![Lower half of bug status report](_img/procguid_data2.png "ProcGuid_Data2") + +|Information|Description| +|-----------------|-----------------| +|**Number of Bugs**|A visual representation of the cumulative count of all bugs, grouped by their state.| +|**Active Bugs by Priority/Severity**|A pie chart that depicts the number of bugs that are still active, grouped by priority or severity.| +|**Active Bugs by Assignment**|A horizontal bar chart with the total count of bugs that each team member has assigned to them in the active state, grouped by priority or severity.| +|**Resolved Bugs by Assignment**|A horizontal bar chart with the total count of bugs that each team member has assigned to them in the resolved state, grouped by priority or severity.| + + You can filter the Bug Status report in the following ways: + +- Change the start and end dates for the report. + +- Filter the bugs that are counted in the report by specifying iteration and area paths, bug state, priority, and severity. + + For more information, see [Filtering the Report and Changing the Display](#Changing) later in this topic. + +### Required Activities for Tracking Bugs + For the Bug Status report to be useful and accurate, the team must perform the following activities: + +> [!NOTE] +> The team can use the Triage Workbook to review, rank, prioritize, and assign bugs. For more information, see [Workbooks](../guidance/workbooks.md) . + +- Define bugs, and specify their **Iteration** and **Area** paths. + +- Specify the **Priority** and **Severity** of each bug. + + > [!NOTE] + > For information about how to define area and iteration paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +- Assign each bug to the team member who is working to resolve or close it. + +- Update the state of each bug as it is fixed, verified, and closed. + +## Setting the Duration of the Iteration + To understand the progress that the team is making for your current iteration, the start and end dates for the report must match those of your current iteration cycle. + +#### To change the duration of the iteration + +1. Next to **Iteration Start (Date)** or **Iteration End (Date)**, click the calendar icon, and then click a date. + +2. Click **View Report**. + +## Interpreting the Report + You should expect the Bug Status report to vary based on where you are in your product development cycle. Early iterations should exhibit a gradual increase in the number of active bugs. Iterations that are near the end of a development cycle should exhibit a wide band of resolved bugs. + +### Questions That the Report Answers + You can review the report to determine the progress within an iteration or over time. Specifically, you can find answers to the following questions: + +- How quickly is the team resolving and closing bugs? + +- Is the team fixing bugs quickly enough to finish on time? + +- Is the team fixing high priority bugs first? + +- What is the distribution of bugs by priority and severity? + +- How many bugs are assigned to each team member? + +- Does any team member need help to resolve or close bugs? + +### Healthy Version of Report + A healthy Bug Status report shows an increase in active bugs over time followed by a steady progression of resolving and closing bugs, as the following illustration shows. When the team fixes more bugs than it finds, the number of active bugs decreases. + + ![Healthy version of Bug Status Report](_img/procguid_bugstatus_healthy.png "ProcGuid_BugStatus_Healthy") + +### Unhealthy Version of Report + The following illustration shows an unhealthy version of the Bug Status report. + + ![Unhealthy version of Bug Status Report](_img/procguid_bugstatus_unhealthy.png "ProcGuid_BugStatus_Unhealthy") + + An unhealthy Bug Status report shows one or more of the indicators that the following table describes: + +|Indicator|Questions to ask| +|---------------|----------------------| +|**The band for active bugs is becoming wider**. If the width of the team's band for active bugs is increasing, the bug backlog is growing. The team is finding more bugs than it can resolve or close.

      A widening active bug band might indicate that a bottleneck is slowing the team's ability to resolve and close bugs.|- Are team members being reallocated to other, non-priority tasks?
      - Are other issues blocking the team's ability to resolve and fix bugs?| +|**The number of active bugs is not changing**. A flat trend in the number of active bugs indicates that the team is not finding bugs.|- Is the test coverage sufficient?
      - Are other issues blocking the team's ability to find bugs?| +|**The number of resolved or closed bugs is not changing**. When the number of bugs that are being resolved or closed remains flat for long periods of time, team members might not able to resolve or close bugs.|- Are team priorities correctly set?
      - Are team members overallocated on other tasks?
      - Are team members correctly tracking their bug status?| +|**Bug assignments are not evenly distributed**. The team might need to reassign work when a large number of bugs are assigned to one or two team members and only a few to other team members.|- Does the team need to balance the workload by reassigning bugs?| +|**The number of active higher priority bugs is larger than the number of active lower priority bugs**. When the number of high priority bugs is much larger than the number of lower priority bugs, work might be progressing on lower priority items first.|- Is the team fixing bugs in the order of priority set by the team?
      - Are issues blocking the team's ability to fix the higher priority bugs?| + +## Filtering the Report and Changing the Display + You can filter the Bug Status report or change its display in the following ways: + +- Change the start and end dates for the report. + +- Filter the set of bugs that are counted by changing the iteration paths, the area paths, the state, the severity, or the priority. + +- Change the grouping based on priority or severity. + + The following illustration shows the available filters and display options: + + ![Filters for Bug Status](_img/procguid_bugstatus.png "ProcGuid_BugStatus") + +#### To filter the set of bugs that are counted in the report + +1. Perform one or both of the following actions: + + - In the **Iteration** and **Area** lists, select the check box of each iteration or product area to include. + + - In the **State**, **Priority**, and **Severity** lists, select the check box of each state, priority, and severity to include. + +2. Click **View Report**. + +#### To group bugs by priority or severity + +1. In the **Group Active By** list, click **Priority** or **Severity**. + +2. Click **View Report**. + +## Related notes + [Bugs](../sharepoint-dashboards/bugs-dashboard-agile-cmmi.md) + [Bugs](../sharepoint-dashboards/bugs-dashboard-agile-cmmi.md) + [Workbooks](../guidance/workbooks.md) + [Bug Trends](bug-trends-report.md) + [Reactivations](reactivations-report.md) + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/bug-trends-report.md b/docs/report/sql-reports/bug-trends-report.md new file mode 100644 index 00000000000..1a42618e905 --- /dev/null +++ b/docs/report/sql-reports/bug-trends-report.md @@ -0,0 +1,118 @@ +--- +title: Bug Trends Report | TFS +description: Track the rate at which your team is discovering and resolving bugs - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 631ec793-644f-4eff-8403-e48e746e369e +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Bug Trends Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can use the Bug Trends report to help track the rate at which your team is discovering and resolving bugs. This report shows a rolling or moving average of bugs being reported, resolved, and closed over time. When you manage a large team or a large number of bugs, you can monitor the Bug Trends report weekly to gain insight into how well the team is finding, resolving, and closing bugs. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + +**You can use this report to answer the following questions**:

      - How many bugs is the team reporting, resolving, and closing per day?
      - What is the overall trend at which the team is processing bugs?
      - Are bug activation and resolution rates declining toward the end of the iteration as expected? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in SQL Server Reporting Services. For more information, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + +## Data in the Report + The Bug Trends report calculates a rolling average of the number of bugs that the team has opened, resolved, and closed based on the filters that you specify. The rolling average is based on the seven days before the date for which it is calculated. That is, the report averages the number of bugs in each state for each of the seven days before the date, and then the result is divided by seven. The data is derived from the data warehouse. + + The following illustration displays an example of the Bug Trends report. + + ![Example of Bug Trends report](_img/procguid_bugs_bugtrends.png "ProcGuid_Bugs_BugTrends") + + This report displays up to three line graphs, and each graph represents the rolling averages of the numbers of activated, resolved, and closed bugs. + + You can filter the report in the following ways: + +- Change the start and end dates for the report. + +- Filter the bugs that are counted in the report by specifying iteration and area paths or bug state, priority, or severity. + + For more information, see [Filtering the Report](#Changing) later in this topic. + +### Required Activities for Tracking Bugs + For the Bug Trends report to be useful and accurate, the team must perform the following activities: + +- Define bugs, and specify their **Iteration** and **Area** paths. + +- Update the **State** of each bug as it is fixed, verified, and then closed. + +- Specify the **Priority** and **Severity** of each bug during triage. + + You can use the Triage workbook to quickly update the iteration, area, state, priority, and severity of bugs. For more information, see [Workbooks](../guidance/workbooks.md). + +## Setting the Duration of the Sprint or Iteration + To understand the bug trends for your current iteration, the start and end dates for the report must match those of your current iteration cycle. + +#### To change the duration of the iteration + +1. Next to **Iteration Start (Date)** or **Iteration End (Date)**, click the calendar icon, and then click a date. + +2. Click **View Report**. + +## Interpreting the Report + You should expect bug rates to vary based on where you are in your product development cycle. The team should find fewer bugs in early iterations than in later iterations. The team should close the most bugs in iterations that are near the end of a product cycle. + + You interpret bug rates best by reviewing them relative to all of the current team project activities and the other metrics that the Bug Status and Reactivations reports provide. For example, the team might find bugs especially quickly in poorly written code, in newly integrated code, with improved testing, or during an exceptional event such as a bug bash. On the other hand, bugs are more difficult to find in a high quality product and with ineffective testing. You can use the metrics for code coverage, code churn, and test rates to help further assess the meaning of the bug trends. + + As the product stabilizes toward the end of a product cycle, the team should find bugs less frequently. + + The Bug Trends report might show one or more of the indicators that the following table describes in the left-hand column. You can review the questions in the right-hand column for areas to address in more detail. + +|Indicator|Questions to ask| +|---------------|----------------------| +|**The team is finding about the same number of bugs in successive time periods**. If the team finds the same number of bugs week after week or iteration after iteration, you might investigate the underlying cause. Early in the testing cycle, the tests might not be rigorous or advanced enough to find many bugs. In early iterations, this situation is expected. However, as the product matures, tests should exercise broader scenarios and integrations.|- Are the test cases adequate to test the user stories that are being developed?
      - Have the tests become stale or are they testing the wrong functionality?
      - Is the test team rigorously testing each user story?| +|**The team is finding many bugs in each time period**. The team might find bugs easily in sloppy code, in newly integrated code, with effective testing, or during a specific event, such as a bug bash.|- Do the metrics for code coverage, code churn, or test progress indicate a problem with the code or testing?| +|**The team is finding few bugs in each time period**. The team might struggle to find bugs in a high-quality solution or with ineffective testing.|- Do the metrics for code coverage, code churn, or test progress indicate a problem with the code or testing?| +|**The team is resolving many bugs in each time period**. A high resolve rate usually indicates that the team is making good progress.|- Are resolved bugs getting promptly closed? The closed rate should resemble the resolved rate.
      - Are bug reactivations remaining within expected boundaries?| +|**The team is resolving bugs quickly but not closing them**. Team members who are assigned to verify bug fixes might be spread too thin, or different priorities might keep those team members from closing resolved bugs.|- Are test resources overallocated?
      - Should the team revisit test priorities?| + +### Healthy Version of Report + A healthy Bug Trends report shows that the team finds more bugs at the start of a development cycle and fewer bugs toward the end of a release. The team should resolve and close more bugs toward the end of the project. + + When the team resolves bugs faster than it finds them, the number of active bugs will start to decrease. When the team starts to find fewer bugs, the product is stabilizing. + +### Unhealthy Version of Report + An unhealthy Bug Trends report might show that the team is finding bugs more quickly as the ship date approaches and resolving bugs more slowly. In this situation, the team's bug backlog is growing because bugs are not getting fixed, and you might want to investigate the causes. The following illustration shows a report for a team that is finding many bugs, resolving fewer bugs than it finds, and closing fewer bugs than it resolves. + + ![Unhealthy version of Bug Trends Report](_img/procguid_bugtrends_dataunhealthy.png "ProcGuid_BugTrends_DataUnhealthy") + +## Filtering the Report and Changing the Display + You can filter the Bug Trends report or change its display in the following ways: + +- Change the start and end dates for the report. + +- Filter the bugs that are counted in the report by specifying iteration and area paths, state, priority, or severity. + + The following illustration shows the available filters. + + ![Filters for Bug Trends report](_img/procguid_bugtrendsfilters.png "ProcGuid_BugTrendsFilters") + +#### To filter the bugs that are counted in the report + +1. Perform one or both of the following actions: + + - In the **Iteration** and **Area** lists, select the check box of each iteration or product area to include. + + - In the **State**, **Priority**, or **Severity** lists, select the check box of each state, priority, and severity to include. + +2. Click **View Report**. + +## Related notes + [Bugs](../sharepoint-dashboards/bugs-dashboard-agile-cmmi.md) + [Workbooks](../guidance/workbooks.md) + [Bug Status](bug-status-report.md) + [Reactivations](reactivations-report.md) + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/build-quality-indicators-report.md b/docs/report/sql-reports/build-quality-indicators-report.md new file mode 100644 index 00000000000..2bcc213260b --- /dev/null +++ b/docs/report/sql-reports/build-quality-indicators-report.md @@ -0,0 +1,204 @@ +--- +title: Build Quality Indicators Report | TFS +description: Shows test coverage, code churn, and bug counts for a specified build definition - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 7e9e87ae-43c7-4ede-9c66-dd887f5a8905 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- +# Build Quality Indicators Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +The Build Quality Indicators report shows test coverage, code churn, and bug counts for a specified build definition. You can use this report to help determine how close portions of the code are to release quality. + + Ideally, test rates, bugs, and code churn would all produce the same picture, but they often do not. When you find a discrepancy, you can use the Bug Quality Indicators report to examine the details of a specific build and data series. Because this report combines test results, code coverage from testing, code churn, and bugs, you can view many perspectives at the same time. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + +**You can use this report to answer the following questions**:

      - What is the quality of the software?
      - How often are tests passing, and how much of the code is being tested?
      - Based on the code and test metrics, is the team likely to meet target goals? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the Report + The data that appears in the Build Quality Indicators report is derived from the data warehouse. The X-axis lists the specific builds that the report includes, based on the filters that you have set for the platform, configuration, and build definition. + + Each vertical bar represents a set of data that was derived from one or more builds. In the code size variant of the report, each vertical bar's length represents the size of the checked in code base. The bars are scaled so that the largest figure fits into the height of the chart. Manual tests can be run any time after the build, and they are associated with that build. Tests that have not been run yet are counted as "inconclusive." + + The following illustration displays a sample Build Qualities Indicators report. + + ![Example Build Quality Indicators report](_img/procguid_buildqualityindicators.png "ProcGuid_BuildQualityIndicators") + + The following table describes the information that appears for each quality indicator in the report: + +|Quality indicator|Description| +|-----------------------|-----------------| +|**Active Bugs (count)**|Line chart that depicts the number of bugs that were active at the time of the build. **Note:** Bugs are not explicitly associated with builds. Some of the bugs counted might not affect the builds that appear in the chart. You can use the Area parameter to filter bugs by product area. This technique might show bugs that are most likely to affect the builds in the report.| +|**Code Churn (lines)**|Line chart that depicts the number of lines of code that the team added, removed, and changed in the checkins before the build. The code churn is calculated by determining the number of lines of code that have been added, deleted, or modified to the build divided by the total lines in the build.| +|**Code Coverage (percent)**|Line chart that depicts the percentage of code that the tests cover.| +|**Inconclusive Tests**|Gray portion of the stacked bar chart, which indicates the number of tests that did not succeed or were paused. If the build did not succeed, the tests are either not counted or counted as inconclusive.| +|**Failed Tests**|Red portion of the stacked bar chart, which indicates the number of tests that failed for the build.| +|**Passed Tests**|Green portion of the stacked bar chart, which indicates the number of tests that passed for the build.| + +> [!NOTE] +> For more information about the meaning of failing and passing tests results, see [Test Plan Progress](test-plan-progress-report.md). + + You can filter the report in the following ways: + +- Change the range of the X-axis by specifying the number of builds and specifying the end date for the report. The date of the first build shown will depend on the frequency of builds. + +- Filter the set of builds that the report shows by specifying the platform, configuration, and build definition to include in the report. Set the parameters in that sequence because the set of available values for build definition depends on the platform and configuration. + +- Filter the bugs that are counted in the report by specifying the product areas to include. This filter does not affect the set of builds that appear on the X-axis, the code churn, code coverage, or test results. + + For more information, see [Filtering the Report](#Changing) later in this topic. + +### Required Test and Build Management Activities + For the Build Quality Indicators report to be useful and depict all the quality indicators that it can display, team members must perform the following activities to manage tests and builds: + +- **Configure a build system**. To use Team Foundation Build, you must set up a build system. + + For more information, see [Build and Release agents](../../build-release/concepts/agents/agents.md). + +- **Create build definitions**. You can create several build definitions, each of which can be run to produce code for a different platform. Also, you can run each build for a different configuration. + + For more information, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + +- **Define tests to run automatically as part of the build**. As part of the build definition, you can define tests to run as part of the build or to fail if the tests fail. + + For more information, see [Set up continuous testing for your builds](../../build-release/test/set-up-continuous-testing-builds.md). + +- **Configure tests to gather code coverage data**. For code coverage data to appear in the report, team members must instrument tests to gather that data. + +- **Run builds regularly**. You can run builds at set intervals or after every check-in. You can create regular builds when you use the schedule trigger. + + For more information, see [Build triggers](../../build-release/concepts/definitions/build/triggers.md). + + > [!NOTE] + > Although a team member can manually rate a build by using Build Explorer, this rating is not reflected in the Build Quality Indicators report. The build rating appears in the Build Summary report. For more information, see [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx) and [Build Summary](build-summary-report.md). + +## Changing the Number of Builds in the Report + The display of the Build Quality Indicators report will vary significantly based on the number of builds that the report includes and other filters that you apply to the report. You can focus the report on a specific range of builds by changing the number of builds that appear in the report. + +#### To set the number of builds that are represented in the report + +1. In **Number of Builds**, type the number to include. + +2. Next to **End (Date)**, click the calendar icon, and then click the date that corresponds to the last day that builds were run that you want to include in the report. + +3. Click **View Report**. + +## Interpreting the Report + You can review the report to find answers to these questions for any specific build definition: + +- What is the quality of the software? + +- Is the team testing enough of our code? + +- Are the tests passing? + +- Is the team is likely to finish based on the code and test metrics? + +- How often are tests passing, and how much of the code is being tested? + + > [!NOTE] + > The ratio of colored to grey segments reflects the fraction of the code that tests cover, but the proportions within the colored segments only approximately reflect the fractions of code that passes or fails tests. This ambiguity is because the fraction of green within the colored segment actually represents the number of tests that pass. A single error in one part of the code could cause many tests to fail, or a single failure might represent an extensive error in the design that has consequences throughout the code base. + +### Healthy Version of Report + A healthy Build Quality Indicators report will show the following indicators: + +- Most tests are passing (large areas of green), and few tests are failing (small amounts of red). + +- The percentage of red is less than 20-30 percent. + + As the following illustration shows, code coverage and test pass rates are high and increasing over time. Code churn, active bugs, inconclusive tests, and failed tests are all low and decreasing. + + ![Healthy version of Build Qualities Indicator](_img/procguid_buildquality_healthy.png "ProcGuid_BuildQuality_Healthy") + +### Unhealthy Versions of the Build Quality Indicators Report + An unhealthy version of the Build Quality Indicators report shows one or more of the following indicators. You might want to investigate the cause according to the following guidance. + +- **Less code coverage and more code churn**. The following illustration shows a decrease in code coverage and an increase in code churn. This data is a clear warning that new code is being checked in without corresponding unit tests to cover it. + + ![Code Churn in Build Quality Indicators report](_img/procguid_buildquality_unhealthy_codechurn.png "ProcGuid_BuildQuality_Unhealthy_CodeChurn") + +- **Low rate of tests being run**. The following illustration shows a low rate of tests being run. This data might indicate that the team is not performing enough testing. This blockage could indicate lack of resources, or testers might be doing something else, such as writing test automation instead of testing the current functionality. In either case, resource balancing might be warranted. + + ![Low rate tests in Build Quality Indicators report](_img/procguid_unhealth_lowratetests2.png "ProcGuid_Unhealth_LowRateTests2") + +- **High code churn, low rate of code coverage**. High code churn suggests that bugs will be introduced as side effects of the changes. In a perfectly refactored project, you can see code churn with no change in code coverage or test pass rates. Otherwise, high code churn might indicate decreased coverage and the need to rewrite tests. + + The following illustration shows a high rate of code churn and a low rate of code coverage from testing, even though test pass rates remain high. This data indicates that tests that are being run are not exercising the new code. + + ![High Code Churn in Build Quality Indicators report](_img/procguid_buildquality_unhealthy_highcodechurn.png "ProcGuid_BuildQuality_Unhealthy_HighCodeChurn") + +- **High rate of tests failing**. The following illustration shows that many tests are being run with reasonable code coverage, but the tests are failing. This data might indicate loose development practices, or, in early iterations, the tests might be too harsh for this stage of the product. + + ![Test Failing in Build Quality Indicators report](_img/procguid_buildquality_unhealthy_testfailing.png "ProcGuid_BuildQuality_Unhealthy_TestFailing") + + Failing tests should be addressed as soon as possible. If fixing the code is not practical, the failing tests should be temporarily disabled, and a bug should be logged. Although it is sometimes acceptable to treat code analysis faults with less urgency early in the project, you should not let the red sections get too large. + +- **High rate of tests passing and high active bug rate**. The following illustration shows a high test pass rate but still a large incoming bug rate. This situation can occur for several reasons. Tests might not be sufficiently rigorous for this stage of the product. + + ![Low Test Rate in Build Quality Indicators report](_img/procguid_buildquality_unhealthy_lowratetests.png "ProcGuid_BuildQuality_Unhealthy_LowRateTests") + + In early iterations, simple tests are good, but as the product matures, tests should exercise broader scenarios and integrations. Tests might be stale, or they might be testing the wrong functionality. It might be time to switch test techniques. + +- **Test pass rates increasing and no increase in code coverage**. Ordinarily, as more tests are run, more code should be covered. On the other hand, if test execution and test pass rates increase without a corresponding increase in code coverage, the incremental tests might be redundant. + +- **Active bug count is increasing, but test failures are not increasing**. If the active bug count is increasing and your tests are not showing corresponding failures, your tests are probably not testing the same functionality that the bugs are reporting. + +- **Active bug count is decreasing, but test passes are not increasing**. If the active bug count is decreasing and test pass rates are not increasing, you might be at risk for an increasing reactivation rate. + +- **Large areas of gray**. Gray segments signify code that was not built or tested within the given build. This data appears only in a periodic report where one or more of the specified builds did not occur within the period. + +## Filtering the Report + You can filter the Build Quality Indicators report in the following ways: + +- Change the time interval by specifying the number of builds and specifying the end date for the report. + +- Filter the set of builds that are represented in the report by specifying the platform, configuration, and build definition to include in the report. + + > [!NOTE] + > You can configure build definitions to run no tests, some tests, or all tests. The report will vary greatly based on the configuration of the build definitions. + +- Filter the bugs that are counted in the report by specifying the product areas to include. + + The following illustration shows the available filters: + + ![Filters for Build Quality Indicators](_img/procguid_buildqualityindicators_filters.png "ProcGuid_BuildQualityIndicators_Filters") + + Apply the filters in the sequence that the following procedure specifies. The options that are available with some filters depend on the filters that you previously set. + +#### To filter the builds that appear in the report + +1. In **Number of Builds**, type the number to include. + +2. Next to **End Date**, click the calendar icon, and then click the last date for builds to include. + +3. In the **Platform** list, select the check box of each platform to include. + +4. In the **Configuration** list, select the check box of each configuration to include. + +5. In the **Build Definition** list, select the check box of each build definition to include. + +6. Click **View Report**. + +#### To filter the bug counts that are displayed in the report + +1. In the **Area** list, select the check box of each test result to include. + + This step filters the report based on the hierarchy of test results. + +2. Click **View Report**. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) diff --git a/docs/report/sql-reports/build-success-over-time-report.md b/docs/report/sql-reports/build-success-over-time-report.md new file mode 100644 index 00000000000..ad66d1b7b95 --- /dev/null +++ b/docs/report/sql-reports/build-success-over-time-report.md @@ -0,0 +1,131 @@ +--- +title: Build Success Over Time Report | TFS +description: Displays the status of the last build for each build category run for each day - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 1791d80f-91f6-4e4a-a544-a3289a8a39ac +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- + +# Build Success Over Time Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +The Build Success Over Time report provides a pictorial version of the Build Summary report. The Build Success Over Time report displays the status of the last build for each build category run for each day. You can use this report to help track the quality of the code that the team is checking in. In addition, for any day on which a build ran, you can view the Build Summary for that day. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + +**You can use this report to answer the following questions**:

      - What parts of the project have produced software that is ready to be tested?
      - What parts of the project are having trouble with regressions or bad checkins?
      - How well is the team testing the code? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data That Appears in the Report + The data that appears in the Build Success Over Time report is derived from the data warehouse. The report summarizes build and test results for a set of build definitions in one or more projects over time. + + The chart shows a separate row for each combination of build definition, platform, and configuration. The report shows only those combinations that fall within the filters that you have specified for the report. At a glance, you can determine the success or failure of builds for the time period under review, as the following illustration shows. + + ![Sample Build Success Over Time Report](_img/procguid_successdata.png "ProcGuid_SuccessData") + + The daily results of runs of build definitions appear in the colors that the following table describes: + +|Build status||Color|Indicates| +|------------------|-|-----------|---------------| +|Passed|![Color green used in Build Success report](_img/procguid_buildsuccess_green.png "ProcGuid_BuildSuccess_Green")|Green|- Build succeeded.
      - All tests completed successfully.
      - Code coverage was good.| +|Tests Passed, Low Coverage|![Color light green used in Build Success report](_img/procguid_buildsuccess_lightgreen.png "ProcGuid_BuildSuccess_LightGreen")|Light green|- Build succeeded.
      - All tests completed successfully.
      - Code coverage was minimal.| +|Build Succeeded, No Tests|![Color yellow used in Build Success report](_img/procguid_buildsuccess_yellow.png "ProcGuid_BuildSuccess_Yellow")|Yellow|- Build succeeded.
      - No tests were run.| +|Build Failed|![Color red used in Build Success report](_img/procguid_buildsuccess_red.png "ProcGuid_BuildSuccess_Red")|Red|- Build ran but did not pass.
      - At least one test failed that did not previously fail. Either the test is new or the test passed in previous test runs.| +|Tests Failed|![Color orange used in Build Success report](_img/procguid_buildsuccess_orange.png "ProcGuid_BuildSuccess_Orange")|Orange|- Build failed due to a compile error or other error.| +|No build|![Color white used in Build Success report](_img/procguid_buildsuccess_white.png "ProcGuid_BuildSuccess_White")|White|- Build was not run on this day.| + + You can filter the report in the following ways: + +- Change the start and end dates for the report. + +- Filter the build definitions by specifying the platforms, configurations, and build definitions to include in the report. + + For more information, see [Filtering the Report](#Changing) later in this topic. + +### Required Build Management Activities + For the Build Success Over Time report to be useful, team members must perform the following activities to manage builds: + +- **Configure a build system**. To use Team Foundation Build, you must set up a build system. + + For more information, see [Build and Release agents](../../build-release/concepts/agents/agents.md). + +- **Create build definitions**. You can create several build definitions, each of which can be run to produce code for a different platform. Also, you can run each build for a different configuration. + + For more information, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + +- **Run builds regularly**. You can run builds can be run at set intervals or after every check-in. You can schedule regular builds when you use the schedule trigger. For more information, see [Build triggers](../../build-release/concepts/definitions/build/triggers.md). + + > [!NOTE] + > Although a team member can manually rate a build by using Build Explorer, this rating is not reflected in the Build Success Over Time report. The build rating appears in the Build Summary report. For more information, see [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx) and [Build Summary](build-summary-report.md). + +## Setting the Duration of the Report + To understand the progress that your team is making in your current iteration, the start and end dates for the report must match those of your current iteration cycle. + +#### To change the duration of the iteration + +1. Next to **Iteration Start (Date)** or **Iteration End (Date)**, click the calendar icon, and then click a date. + +2. Click **View Report**. + +## Interpreting the Report + You should expect the Build Success Over Time report to vary based on where you are in your product development cycle. Early iterations often exhibit some builds and tests failing. By reviewing the report together with the team early and often, you might be better able to focus efforts toward creating stable builds with high rates of tests passing. + +### Questions That the Report Answers + You can review the Build Success Over Time report to find answers to these questions: + +- How high is the quality of the builds? + +- Is the quality improving, deteriorating, or staying constant? + +- What parts of the project are ready to test? + +- What parts of the project are having trouble with regressions or bad checkins? + +- How well is the code tested? + + Team members should review the last column of the Build Success Over Time report to determine whether the most recent builds have passed. If long sections in the report are not green, project managers and development leads should determine the root of persistent problems. + +### Healthy and Unhealthy Versions of Report + A healthy Build Success Over Time report will show successive days of green, which indicate that builds are passing. An unhealthy version of the report will show long blocks of orange or red. These blocks indicate that builds are not passing or that tests are failing. The following illustration shows that some builds are in good shape and some need investigation: + + ![Healthy and Unhealthy version of Build Success](_img/procguid_buildsuccess_unhealthy.png "ProcGuid_BuildSuccess_Unhealthy") + +## Filtering the Report + You can filter the Build Success Over Time report in the following ways: + +- Change the start and end dates for the report. + +- Filter the builds that appear in the report by specifying the platform, configuration, and build definitions to include. + + > [!NOTE] + > You can configure build definition to run no tests, some tests, or all tests. The report will vary greatly based on the configuration of the build definitions. + + The following illustration shows the available filters: + + ![Filters for Build Summary report](_img/procguid_reports_buildsummary_filters.png "ProcGuid_Reports_BuildSummary_Filters") + + You must apply the filters in the sequence that the following procedure specifies. The options that are available with some filters depend on the filters that you applied previously. + +#### To filter the builds that appear in the report + +1. In the **Platform** list, select the check box of each platform to include. + +2. In the **Configuration** list, select the check box of each configuration to include. + +3. In the **Build Definition** list, select the check box of each build definition to include. + +4. Click **View Report**. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/build-summary-report.md b/docs/report/sql-reports/build-summary-report.md new file mode 100644 index 00000000000..2b91e686827 --- /dev/null +++ b/docs/report/sql-reports/build-summary-report.md @@ -0,0 +1,162 @@ +--- +title: Build Summary Report | TFS +description: Builds and provides information about test results, test coverage, code churn, and quality notes for each build - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: ac74cae8-5c9b-43d6-b4ef-c889dcb9440f +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- + +# Build Summary Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +The Build Summary lists builds and provides information about test results, test coverage, code churn, and quality notes for each build. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + +**You can use this report to answer the following questions**:

      - What is the status of all builds over time?
      - Which builds succeeded?
      - Which builds have a significant number of changes to the code?
      - How much of the code was executed by the tests?
      - Which builds are ready to install? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the Report + The data that appears in the Build Summary report is derived from the data warehouse. The report presents a visual display of the percentage of tests that are passing, code that is being tested, and changes in code across several builds. + + You can review the results for both manual and automatic builds, in addition to the most recent builds and continuous or frequent builds. The report lists the most recent builds first and contains build results that were captured during the specified time interval for all builds that were run, subject to the filters that you specified for the report. + + At a glance, you can determine the success or failure of several build definitions for the time period under review, as the following illustration shows. + + ![Example Build Summary report](_img/procguid_reports_buildsummary.png "ProcGuid_Reports_BuildSummary") + + The following table describes the information that appears for each quality indicator: + +|Quality indicator|Description| +|-----------------------|-----------------| +|**Build Progress**|Specifies the status of the build. A build can be in one of the following states:

      - **Failed**. The build failed to compile or tests failed to pass.
      - **Partially Succeeded**. Only some portions of the build successfully compiled.
      - **Stopped**. The build was manually stopped.
      - **Succeeded**. The build successfully compiled, and tests ran.| +|**Build Quality**|Specifies a manually assigned assessment of the quality of the build. You can add or remove the build qualities that are defined for your team project. For more information, see [Add or remove build quality values](https://msdn.microsoft.com/en-us/library/ms181735.aspx).

      The column is empty if the build quality has not been rated.| +|**% Tests Passed**|Displays a horizontal stacked bar chart that lists the percentage of tests that passed superimposed on a green bar. The remaining bar segment is red, which indicates the percentage of tests that failed. The total length of the chart always equals the width of the column.| +|**% Code Coverage**|Displays a horizontal stacked bar chart that lists the percentage of code that was covered superimposed on a green bar. The remaining bar segment is light blue, which indicates the percentage of code that was not tested in the build. The total length of the chart always equals the width of the column.| +|**% Code Churn (lines)**|Displays a horizontal bar chart that lists the percentage of code churn superimposed on a gray bar. The code churn is calculated by determining the number of lines of code that the team has added, deleted, or modified divided by the total number of lines in the build. The bar length is proportionate to the percentage figure, scaled across the report so that the maximum amount of code churn across all builds equals the width of the column.| + + You can filter the Build Summary report in the following ways: + +- Change the start and end dates for the report. + +- Filter the build definitions by specifying the platforms, configurations, build definitions, build qualities, or build progress to include in the report. + + For more information, see [Filtering the Report](#Changing) later in this topic. + +### Required Build Management Activities + For the Build Summary report to be useful, team members must perform the following activities to manage builds: + +- **Configure a build system**. To use Team Foundation Build, you must set up a build system. + + For more information, see [Build and Release agents](../../build-release/concepts/agents/agents.md). + +- **Create build definitions**. You can create several build definitions, each of which can be run to produce code for a different platform. Also, you can run each build for a different configuration. + + For more information, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + +- **Define tests to run automatically as part of the build**. As part of the build definition, you can define tests to run as part of the build or to fail if the tests fail. + + For more information, see [Set up continuous testing for your builds](../../build-release/test/set-up-continuous-testing-builds.md). + +- **Configure tests to gather code coverage data**. For code coverage data to appear in the report, team members must instrument tests to gather that data. + +- **Run builds regularly**. Builds can be run at set intervals or after every check-in. You can schedule regular builds when you use the schedule trigger. + + For more information, see [Build triggers](../../build-release/concepts/definitions/build/triggers.md). + +- (Optional) **Rate completed builds**. A team member can manually rate a build by using Build Explorer. + + For more information, see [Rate the quality of a completed build](https://msdn.microsoft.com/library/ms181734.aspx). + +## Setting the Duration of the Iteration + To understand the progress that the team is making in your current iteration, you must set the start and end dates for the report to match those of your current iteration cycle. + +#### To change the duration of the iteration + +1. Next to **Iteration Start (Date)** or **Iteration End (Date)**, click the calendar icon, and then click a date. + +2. Click **View Report**. + +## Interpreting the Report + You can review the Build Summary report to answer questions about the most recent builds. It contains more information than the Build Success Over Time report. + +### Questions That the Report Answers + You can use this report to find answers to these questions: + +- What is the status of all builds over time? + +- Which builds succeeded? + +- Which builds have a significant number of changes to the code? + +- Which builds are ready to install? + +- How much of the code did the tests execute? + + The Build Summary report does not indicate the causes of problems, but it points to where you can look to determine the root cause of problems. This report also does not indicate the size or significance of build problems. + +### Healthy Version of Report + A healthy Build Summary report show the following indicators: + +- Most builds are passing. + +- Most tests are passing. + +- Code coverage is high. + +- Code churn shows few spikes. + +### Unhealthy Version of Report + An unhealthy version of the Build Summary report will show one or more of the following indicators. You may want to investigate according to the following guidance: + +- **Many builds are failing**. Investigate reasons why builds are failing. + +- **Many tests are failing**. Investigate and fix tests that are failing to pass. + +- **Code coverage is mostly blue**. You might want to write more automatic tests. + +- **Code churn shows spikes**. You might want to verify that unusual peaks are accounted for. + +## Filtering the Report + You can filter the Build Summary report in the following ways: + +- Change the start and end dates for the report. + +- Filter the set of builds that are represented in the report by specifying the platform, configuration, build definition, build quality, and build progress to include in the report. + + > [!NOTE] + > You can configure build definitions to run no tests, some tests, or all tests. The report will vary greatly based on the configuration of the build definitions. + + The following illustration shows the available filters: + + ![Filters for Build Summary report](_img/procguid_reports_buildsummary_filters.png "ProcGuid_Reports_BuildSummary_Filters") + + You must apply the filters in the sequence that the following procedure specifies. The options that are available with some filters depend on the filters that you previously set. + +#### To filter the builds that appear in the report + +1. In the **Platform** list, select the check box of each platform to include. + +2. In the **Configuration** list, select the check box of each configuration to include. + +3. In the **Build Definition** list, select the check box of each build definition to include. + +4. In the **Build Quality** list, select the check box of each build quality to include. + +5. In the **Progress** list, select the check box of each build progress to include. + +6. Click **View Report**. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) diff --git a/docs/report/sql-reports/burndown-and-burn-rate-report.md b/docs/report/sql-reports/burndown-and-burn-rate-report.md new file mode 100644 index 00000000000..8e9f2d35996 --- /dev/null +++ b/docs/report/sql-reports/burndown-and-burn-rate-report.md @@ -0,0 +1,192 @@ +--- +title: Burndown and Burn Rate Report | TFS +description: Determine the rate of team progress by reviewing the Burndown and Burn Rate report - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 68941ffa-eb19-4d52-9418-7de1b6aca335 +ms.author: kaelli +ms.manager: douge +ms.date: 12/30/2016 +--- + +# Burndown and Burn Rate Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +After a team has worked on one or more iterations, also known as sprints, you can determine the rate of team progress by reviewing the Burndown and Burn Rate report. Burndown shows the trend of completed and remaining work over a specified time period. Burn rate provides calculations of the completed and required rate of work based on the specified time period. In addition, a chart shows the amount of completed and remaining work that is assigned to team members. You can view the Burndown and Burn Rate report based on hours worked or number of work items that have been resolved and closed. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + +**You can use this report to answer the following questions**:

      - Is the team likely to finish the iteration on time?
      - Will the team complete the required work, based on the current burn rate?
      - How much work does each team member have? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in SQL Server Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the Report + The Burndown and Burn Rate report summarizes the data that was captured during the time interval that you specify for each task, user story, or bug based on the filters that you specify. The data is derived from the data warehouse. + + You can filter the report in the following ways: + +- Change the start and end dates for the report. + +- Filter the tasks that are counted in the report by specifying iteration and area paths and work item states. You can also filter the report to show user stories and bugs. + + For more information, see [Filtering the Report and Changing the Display](#Changing) later in this topic. + + You can use the Burndown and Burn Rate report to understand how well the team is progressing and whether the team or a team member is over-allocated. The upper section of the report displays a version of the Remaining Work report, as the following illustration shows. + + ![Example Burndown and Velocity report - bottom](_img/procguid_burndownbottom.png "ProcGuid_BurndownBottom") + + In addition, you can display trend lines that predict when work will be completed. The ideal trend line calculates a slope or trajectory for when work will be completed based on the amount of work remaining and the end date that you define for the report. The actual trend line is calculated based on the team's actual progress in completing work and closing work items. + + The lower section of the report presents a calculation of the team's burn rate, both actual and required, and a breakdown of work assignments to each team member, as the following illustration shows: + + ![Example Burndown and Velocity report - top](_img/procguid_part2burndown.png "ProcGuid_Part2Burndown") + +### Burndown + Burndown shows the trend of how much work has been completed and how much work remains across time in an iteration or a release. The source of the raw data is either work hours or work remaining, which is tracked on the vertical axis, and the time period (days), which is tracked on the horizontal axis. + +|Hours|Number of Work Items| +|-----------|--------------------------| +|- **Hours Remaining**: The cumulative value of all remaining hours for all tasks.
      - **Hours Completed**: The cumulative value of all completed hours for all tasks.

      **Trend lines**:

      - **Actual**: The line intersects the x-axis when the iteration is expected to complete based on the actual rate of hours being completed and hours remaining.
      - **Ideal**: The line is drawn from the remaining work on the start date to intersect the x-axis on the end date.|- **Active**: The cumulative total of all tasks, user stories, or bugs that are in the **Active** (blue) state.
      - **Resolved**: The cumulative total of all user stories or bugs and that are in the **Resolved** (gold) state.
      - **Closed**: The cumulative total of all tasks, user stories, or bugs in the **Closed** (green) state.| + +### Burn Rate + The Burn Rate section of the report shows an estimate of how much work a team can complete during an iteration. Burn rate is one of the key elements for estimation. This calculation shows how quickly the team is actually completing planned work and how much the rate varies from day to day, or iteration to iteration. You can use this data to plan the next iteration, together with the quality measures. Similar to the Remaining Work report, this strategy is most useful when you look at days within an iteration or several iterations within a project. For more information, see [Remaining Work](remaining-work-report.md). + + The following table describes how the burn rate is calculated. + +|Team Burn Rate (Hours Completed/Day)|Team Burn Rate (Work Items Completed/Day)| +|---------------------------------------------|--------------------------------------------------| +|- **Actual**: The total number of hours that the team completed during the time interval that you specify and divided by the number of days in the interval.
      - **Required**: The total number of hours that were estimated for the time interval that you specify and divided by the number of days in the interval.|- **Actual**: The total number of work items that the team completed during the time interval that you specify and divided by the number of days in the interval.
      - **Required**: The total number of work items that the team defined for the time interval that you specify and divided by the number of days in the interval.| + +### Assignment of Work + The Assignment of Work section of the report provides insight into how well work has been allocated across the team, in addition to the work that the team completed and that remains for each team member. The following table describes the information that this view provides. + +|Assignment of Work (Hours)|Assignment of Work (Number of Work Items)| +|----------------------------------|-------------------------------------------------| +|For each team member:

      - **Remaining**: The total number of hours that remain in the time interval that you specify.
      - **Completed**: The total number of hours that the team member completed in the time interval that you specify.|For each team member:

      - **Active** (blue): The total number of tasks, user stories, and bugs that are in the active state.
      - **Resolved** (gold): The total number of tasks, user stories, and bugs that are in the resolved state.
      - **Closed** (green): The total number of tasks, user stories, and bugs that are in the closed state.| + +### Required Activities for Tracking Work Items + For the Burndown and Burn Rate report to be useful and accurate, the team must perform the following activities for tracking work items: + +- Define tasks, user stories, and bugs, and specify the **Iteration** and **Area** paths for each. + +- Specify and update the **Completed** and **Remaining** fields for each task or subtask as it is worked on. + + > [!IMPORTANT] + > If you subdivide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and user story. For more information, see [Address inaccuracies published for summary values](../address-inaccuracies-published-for-summary-values.md). + +- Update the **State** of each task, story, and bug as it progresses from active to closed. + +## Setting the Duration of the Iteration + To understand the progress that the team has made for your current iteration, the start and end dates for the report must match your current iteration cycle. Results for the actual trend and team burn rate will vary significantly based on the duration that you set for the iteration. + +#### To change the duration of the iteration + +1. For the **Iteration Start (Date)** and **Iteration End (Date)**, click the calendar icon, and then click the date that corresponds to the start or end of the iteration. + +2. Click **View Report**. + +## Interpreting the Report + You can filter the report in the following ways: + +- Change the start and end dates for the report. + +- Filter the tasks, stories, and bugs that are counted in the report by specifying iteration and area paths, work item types, and work item states. + + For more information, see [Filtering of the Report and Changing the Display](#Changing) later in this topic. + +### Questions That the Report Answers + You can review the report to determine the progress that the team made within an iteration or over time. For example, you can find answers to the following questions: + +#### Burndown + +- How fast is the team completing remaining work? + +- Is the team adding work during the iteration? Is there scope creep? + +- How much work can the team complete in the available time? + +- When can the team finish the work? + +- When can the team finish the current iteration? + +#### Burn Rate + +- Is the team working quickly enough to finish the remaining work on time? + +#### Work Assignment + +- How is the work distributed across the team? + +- Should the team balance the remaining work load? + +### Healthy Versions of the Report + A healthy Burndown and Burn Rate report shows that the team is making steady progress toward finishing the work. The actual and ideal trend lines are close together. + + ![Healthy version of Burndown report](_img/procguid_healthyburndown.png "ProcGuid_HealthyBurndown") + +### Unhealthy Versions of the Report + An unhealthy Burndown and Burn Rate report will show one or more of the following indications: + +- **Actual and ideal trend lines are diverging or are far apart**. + +- **The total number of hours is increasing**. + + Scope creep occurs when team members add features to an iteration after it is planned. The following illustration shows an iteration in which a team is taking on more work over time and making minimal progress on the work that had already been assigned. + + ![Burndown showing scope creep](_img/procguid_scopecreep.png "ProcGuid_ScopeCreep") + +## Filtering the Report and Changing the Display + You can filter the Burndown and Burn Rate report or change its display in the following ways: + +- Filter the user stories, bugs, and tasks that the report represents by specifying iteration and area paths, work item types, and work item states + +- Change the view. + +- Specify the type of trend line to display. + + The following illustration shows the available filters and display options: + + ![Filters for the Burndown and Velocity report](_img/procguid_burndown.png "ProcGuid_Burndown") + +#### To filter the set of work items that are counted in the report + +1. Perform one or both of the following actions: + + - In the **Iteration** or **Area** list, select the check box of each iteration or product area to include. + + - In the **Work Item Type** or **State** list, select the check box of each work item type or state to include. + +2. Click **View Report**. + +#### To switch between work hours and number of work items displayed in the report + +1. In the **Measure** list, click one of the following options: + + - **Hours of Work** displays the cumulative number of work hours for all tasks that are defined for the iteration. + + - **Number of Work Items** displays the cumulative number of work items, grouped by state, that are defined for the iteration. + +2. Click **View Report**. + +#### To display trend lines + +1. In the **Trend Line** list, click one of the following options: + + - **Display Actual** displays a band that is based on the actual burndown. The band intersects the x-axis when the iteration is expected to finish. + + - **Display Ideal** displays a straight line from the remaining work at the start date to the x-axis on the end date. + + - **Display Both** displays both the actual and ideal trend lines. + + - **None** does not display a trend line. + +2. Click **View Report**. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/components-data-warehouse.md b/docs/report/sql-reports/components-data-warehouse.md new file mode 100644 index 00000000000..cb8e16d2d11 --- /dev/null +++ b/docs/report/sql-reports/components-data-warehouse.md @@ -0,0 +1,61 @@ +--- +title: Components of the TFS data warehouse | TFS +description: Understand the components of the Team Foundation Server data warehouse +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 5aafaefc-84c1-4f8d-a716-753f5b74caa0 +manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Components of the TFS data warehouse + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +The Team Foundation reporting warehouse is a traditional data warehouse consisting of a relational database organized in an approximate star schema and a SQL Server Analysis Services cube built on top of the relational database. The following diagram shows the high-level architecture of the Team Foundation data warehouse and the relationships between the operational stores, the data warehouse, and the team reports. + + ![Data Warehouse Architecture](_img/tfs_datawarearch_r.png) + + +## Operational stores + Each tool or plug-in in Team Foundation uses a relational database in SQL Server 2008 to store the data used by the tool in its day-to-day operations. This relational database is often referred to as the operational store. The operational stores for Team Foundation include: + +- Common structure databases (Tfs_Configuration) + +- Team project collection databases (Tfs_Collection) + + You might also have operational stores created for third-party tools. + + Like most operational stores, the schema of the relational database is designed and optimized for the online transactional processing of data. As the tool or plug-in performs an activity, it writes the latest information to the operational store. Therefore, data in the operational store is constantly changing and being updated, and all data is current. + +## Warehouse adapters + Because each tool or plug-in has its own schema requirements and data is stored in the operational store to optimize transactional processing, the purpose of the warehouse adapter is to put the operational data into a form usable by the data warehouse. The warehouse adapter is a managed assembly that extracts the data from the operational store, transforms the data to a standardized format compatible with the warehouse, and writes the transformed data into the warehouse relational database. There is a separate adapter for each operational data store. + + The warehouse adapter copies and transforms those data fields specified in either the basic warehouse configuration or in the process template used at the time a new team project is created. If you subsequently change the process template to add or delete which data fields are written to the data warehouse, these changes are detected the next time the adapter is run. The adapter runs periodically with a frequency set by the RunIntervalSeconds property. The default setting for the refresh frequency is two hours (7,200 seconds), so give careful consideration to the appropriate refresh frequency for your installation. For more information about changing the refresh frequency, see [Change the Refresh Frequency](../admin/change-a-process-control-setting.md). + + It is important that data is not written from the relational database to the data cube while the relational database is itself being updated from the operational store. To avoid conflicts reading and writing data, the warehouse adapters that push and pull the data are synchronized. After the adapters have completed their calls, the cube is reprocessed. + +## The relational database or data warehouse + Each tool describes its contribution to the data warehouse in an XML schema. The schema specifies the fields that are written to the relational database as dimensions, measures, and details. The schema is also mapped directly into the cube. + + The data in the warehouse are stored in a set of tables organized in a star schema. The central table of the star schema is called the fact table, and the related tables represent dimensions. Dimensions provide the means for disaggregating reports into smaller parts. A row in a fact table usually contains either the value of a measure or a foreign key reference to a dimension table. The row represents the current state of every item covered by the fact table. For example, the Work Item fact table has one row for every work item stored in Work Item operational store. + + A dimension table stores the set of values that exist for a given dimension. Dimensions may be shared between different fact tables and cubes, and they may be referenced by a single fact table or data cube. A Person dimension, for example, will be referenced by the Work Items fact table for Assigned To, Opened By, Resolved By, and Closed By properties, and it will be referenced by the Code Churn fact table for the Checked In By property. + + Measures are values taken from the operational data. For example, Total Churn is a measure that indicates the number of source code changes in the selected changesets. Count is a special measure in that it can be implicit, as long as there is one record for every item that is counted. The measures defined in a fact table form a measure group in the cube. + + For more information about the facts, dimensions, and measures in the data warehouse, see [Perspectives and measure groups provided in the Analysis Services cube](perspective-measure-groups-cube.md). + +## The Analysis Services cube + Fact tables are a good source of information for reports that show the current state of affairs. However, to report on trends for data that changes over time, you need to duplicate the same data for each of the time increments that you want to report on. For example, to report on daily trends for work items or test results, the warehouse needs to retain the state of every item for each day. This allows the data cube to aggregate the measures by day. The cube aggregates both data from the underlying star schema and time data into multidimensional structures. + + Each time the data cube is processed, the data stored in the star schemas in the relational database are pulled into the cube, aggregated, and stored. The data in the cube is aggregated so that high-level reports, which would otherwise require complex processing using the star schema, are simple select statements. The cube provides a central place to obtain data for reports without having to know the schema for each operational store and without having to access each store separately. + +## Report Designer reports + Report Designer is a component of Visual Studio that allows you to define the Team Foundation data warehouse as a data source and then design a report interactively. Report Designer provides tabbed windows for Data, Layout, and Preview, and you can add datasets to accommodate a new report design idea, or adjust report layout based on preview results. In addition to the Data, Layout, and Preview design surfaces, Report Designer provides query builders, an Expression editor, and wizards to help you place images or step you through the process of creating a simple report. For more information about using Report Designer, see [Create a Detailed Report using Report Designer](create-a-detailed-report-using-report-designer.md). + +## Excel reports + Team Foundation integrates with Microsoft Excel to allow you to use Microsoft Excel to manage your project and produce reports. Microsoft Excel provides pivot tables and charts for viewing and analyzing multi-dimensional data. You can bind these pivot tables directly to the Team Foundation cube, so you can interact with the data in the cube. For more information about using Microsoft Excel for reporting, see [Create Excel reports from a work item query](../excel/create-status-and-trend-excel-reports.md). + +## Security + Security for the Team Foundation data warehouse is defined at the database level, while security for team reports is at the team project level. The Team Foundation Server administrator determines who has access to the data in the data warehouse by granting or revoking permissions on the user's account. By default, write access to the warehouse is restricted to a service account under which the warehouse service runs. Each tool adapter has write access to the data warehouse because it runs in this security context. Read-only access is granted by the administrator to individual users or groups of users. A user who has permission to view the data in the warehouse has full access to all of the data for all team projects in all team project collections. For more information about granting or denying read-only access to the data warehouse, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). \ No newline at end of file diff --git a/docs/report/sql-reports/create-a-detailed-report-using-report-designer.md b/docs/report/sql-reports/create-a-detailed-report-using-report-designer.md new file mode 100644 index 00000000000..e75c9dd59fa --- /dev/null +++ b/docs/report/sql-reports/create-a-detailed-report-using-report-designer.md @@ -0,0 +1,132 @@ +--- +title: Create a Detailed Report using Report Designer | TFS +description: Understand how to track team's progress by creating reports that contain detailed information - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 073c4d96-8525-40fc-8fd6-944d161acc2d +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- + +# Create a Detailed Report using Report Designer + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can track your team's progress more easily by creating reports that contain detailed information from Visual Studio Application Lifecycle Management (ALM) (TFS). For example, you can create a report that includes details such as titles of work items. To create this type of report, you can use SQL Server's Report Designer and the relational database of the TFS data warehouse. + + After you create your first report, you might change it by experimenting with different data and layouts. For example, you could group the table by the Assigned To field. + + If you have not created reports for TFS before, see [Dashboards and reports](../admin/review-team-activities-for-useful-reports.md). For more information about how to use Report Designer, see the Microsoft Web site: [Designing and Implementing Reports Using Report Designer](http://go.microsoft.com/fwlink/?LinkId=181954). To create reports that primarily show aggregate information, see [Create an aggregate report using Report Designer and the Analysis Services Cube](create-aggregate-report-report-designer-analysis-services-cube.md). + + **Requirements** + +- You must have Visual Studio and SQL Server Business Intelligence Development Studio installed on the same computer. + + To install Business Intelligence Development Studio, run the Setup program for SQL Server, and select the **Client Components** check box when you specify the components to install. To install the most recent service pack for SQL Server, see the following page on the Microsoft Web site: [How to obtain the latest service pack for SQL Server 2008](http://go.microsoft.com/fwlink/?LinkID=182174). + +- You must be a member of the **TfsWarehouseDataReaders** security role in the Analysis Services database on the data-tier server of Team Foundation Server. For more information, see [How to: Grant Access to the Databases of the Data Warehouse](../admin/grant-permissions-to-reports.md). + +- You must be a member of the **Team Foundation Content Manager** role in SQL Server Reporting Services. For more information, see [Add accounts to administer TFS](../../tfs-server/add-administrator-tfs.md). + +### To create a report + +1. In Visual Studio, create or open a Report Server project. For more information, see [Create a Report Server Project](create-a-report-server-project.md). + +2. On the **Project** menu, choose **Add New Item**. + + The **Add New Item** dialog box appears. + +3. Choose **Report Wizard**, and then choose **Add**. + + The **Report Wizard** opens to the **Select Data Source** page. + +4. Choose the **TFS2010ReportDS** shared data source, and then choose **Next**. + + Even though you might have installed or upgraded to TFS 2013, these names, which were assigned to the data sources for TFS 2010, are in use. + + The wizard advances to the **Design the Query** page. + + > [!NOTE] + > The data source that you specify connects to the relational database from the TFS data warehouse. For more information, see [Choose the source of data and authoring tool](https://msdn.microsoft.com/library/bb649557.aspx). If your project does not have this data source, create it. For more information, see [Create a Report Server Project](create-a-report-server-project.md). + +5. Choose **Query Builder**. + + The **Query Build** dialog box appears. + +### To create the query that will retrieve the data for the report + +1. Choose **Generic Query Designer** on the query builder toolbar to enable the query designer. + +2. Choose **Add Table** on the query builder toolbar. + + The **Add Table** dialog box appears. + +3. Choose the **Current Work Item** table, and then choose **Add**. + +4. Choose the **Work Item** table, and then choose **Add**. + + This table contains the Work Item dimension. + +5. Choose the **Person** table, choose **Add**, and then click **Close**. + + This table contains the Person dimension. The fact table for current work items has foreign keys to this table for the Assigned To, Changed By, and Created By fields. + +6. In the **Work Item** table, select the check boxes for **System_Title** and **System_State**. + +7. In the **Person** table, select the check box for **Person**. + +8. In the query pane, delete the clauses that use Changed By and Created By so that you now have the following query. + + ``` + SELECT Person.Person, [Work Item].System_State + FROM [Current Work Item] INNER JOIN + [Work Item] ON [Current Work Item].[Work Item] = + [Work Item].__ID INNER JOIN + Person ON [Current Work Item].[Assigned To] = Person.__ID + ``` + +9. Choose **Run** on the query builder toolbar to verify that the query works, and then choose **OK**. + + The **Query Builder** is closed, and the **Design the Query** page of the **Report Wizard** reappears. + +### To design the report layout + +1. Choose **Next**. + + The wizard advances to the **Report Type** page. + +2. Choose **Tabular**, and then choose **Next**. + + The wizard advances to the **Design the Table** page. + +3. Choose **System_Title**, and then choose **Details**. + +4. Choose **Person**, and then choose **Details**. + +5. Choose **System_State**, choose **Group**, and then choose **Next**. + + The wizard advances to the **Choose the Table Layout** page. + +6. Choose the layout options that you prefer, and then choose **Next**. + + The wizard advances to the **Choose the Table Style** page. + +7. Choose any style, and then choose **Next**. + + The wizard advances to the **Completing the Report** page. + +8. Type a name for the report, choose **Preview Report**, and then choose **Finish** to create the report. + + The wizard closes, and the report document window appears with the **Preview** tab active. + +### To deploy the report + +1. In **Solution Explorer**, choose the report. + +2. On the **Build** menu, choose **Deploy** *ReportName*. + + To successfully deploy the report, your project settings must be set to appropriate values. For more information, see [Create a Report Server Project](create-a-report-server-project.md). + +## Related notes + [Table reference for the relational warehouse database](https://msdn.microsoft.com/en-us/library/ms244691.aspx) \ No newline at end of file diff --git a/docs/report/sql-reports/create-a-report-server-project.md b/docs/report/sql-reports/create-a-report-server-project.md new file mode 100644 index 00000000000..c52ec50866a --- /dev/null +++ b/docs/report/sql-reports/create-a-report-server-project.md @@ -0,0 +1,89 @@ +--- +title: Create a Report Server Project | TFS +description: Use SQL Server Report Designer to create a report to track the team's progress by-Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 5fc5d272-2569-4dd8-b493-704f03f2aca1 +ms.manager: douge +ms.author: kaelli +ms.date: 03/15/2017 +--- + +# Create a Report Server project + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can track your team's progress by using SQL Server Report Designer to create reports. Before you can base these reports on data from Visual Studio Team Foundation Server (TFS), you must first create a Report Server project in Visual Studio. + + For an overview of Report Designer, see the following page on the Microsoft Web site: [Designing and Implementing Reports Using Report Designer](http://go.microsoft.com/fwlink/?LinkId=181954). For more information about how to create reports in Report Designer, see [Create a Detailed Report using Report Designer](create-a-detailed-report-using-report-designer.md) and [Create an aggregate report using Report Designer and the Analysis Services Cube](create-aggregate-report-report-designer-analysis-services-cube.md). + + **Requirements** + +- You must have Visual Studio and SQL Server Business Intelligence Development Studio installed on the same computer. + + To install Business Intelligence Development Studio, run the Setup program for SQL Server, and select the **Client Components** check box when you specify the components to install. To install the most recent service pack for SQL Server, see the following page on the Microsoft Web site: [How to obtain the latest service pack for SQL Server 2008](http://go.microsoft.com/fwlink/?LinkID=182174). + +- You must be a member of the **TfsWarehouseDataReaders** security role in the Analysis Services database on the data-tier server of Team Foundation Server. For more information, see [How to: Grant Access to the Databases of the Data Warehouse](../admin/grant-permissions-to-reports.md). + +- You must be a member of the **Team Foundation Content Manager** role in SQL Server Reporting Services. For more information, see [Add accounts to administer TFS](../../tfs-server/add-administrator-tfs.md). + +### To create a Reporting Server project + +1. In Visual Studio, open the **File** menu, point to **New**, and then choose **Project**. + + The **New Project** dialog box appears. + +2. Under **Project types**, choose **Business Intelligence Projects**. + + If **Business Intelligence Projects** does not appear in the list of project types, you must install SQL Server Business Intelligence Development Studio. For more information, see the Prerequisites section near the start of this topic. + +3. Under **Templates**, choose **Report Server Project.** + +4. In the **Name** box, typea name for the project, and then choose **OK**. + +### To create the Tfs2010ReportDS and Tfs2010OlapReportDS data sources + +1. On the **Project** menu, choose **Add New Item**. + + The **Add New Item** dialog box appears. + +2. Choose **Data Source**, and then choose **Add**. + + The **Shared Data Source** dialog box appears. + +3. In the **Name** box, type `Tfs2010ReportDS`. + + > [!IMPORTANT] + > If you do not use the name specified in this step, the procedures for deploying your reports will not work properly. This procedure creates local copies of the data sources that you will use as you develop your reports. These copies are equivalent to data sources that TFS has created on the server that is running SQL Server Reporting Services. When you deploy a report, TFS will use the data source on the server that has the same name as your local copy of the data source in your project. + +4. In the **Type** list, click **Microsoft SQL Server**, and then click **Edit**. + +5. In the **Connection Properties** dialog box, type the name of the server and instance (*DataWarehouseServerName*/*InstanceName*) that runs Analysis Services, and then choose **Use Windows Authentication**. + + > [!NOTE] + > In a typical configuration, use the name of the data-tier server. However, the warehouse can also be hosted on a separate server. + +6. Choose **Select or Enter a database name**, and then choose **Tfs_Warehouse**. + +7. (Optional) Choose **Test Connection** to verify that the connection works as defined, and then choose **OK** to return to the **Shared Data Source** dialog box. + +8. Choose **OK**, and then choose **OK** to create the data source. + +9. Repeat steps 1-7 to create another data source. Specify **Microsoft SQL Server Analysis Services** for the type of the data source, and name it `Tfs2010OlapReportDS`. Specify **Tfs_Analysis** for the database name. + + Even though you might have installed or upgraded to TFS 2013, these names, which were assigned to the data sources for TFS 2010, are in use. + +### To set the project's properties so that you can deploy reports + +1. On the **Project** menu, choose **Properties**. + +2. For the value of the **OverwriteDataSources** property, choose **False**. + + > [!NOTE] + > If you set this option, you can publish your reports without overwriting the data sources on the server with those that you defined in this project. + +3. For the value of the **TargetDataSourceFolder** property, type `/`. + +4. For the value of the **TargetReportFolder** property, type the path of the folder where you will deploy the reports from this project. If you will deploy the reports to a specific team project, use the name of the team project. + +5. For the value of the **TargetServerURL** property, type the URL of the Reporting Services server. For example, you can type **http://***ReportingServicesServerName***/reportserver**. \ No newline at end of file diff --git a/docs/report/sql-reports/create-aggregate-report-report-designer-analysis-services-cube.md b/docs/report/sql-reports/create-aggregate-report-report-designer-analysis-services-cube.md new file mode 100644 index 00000000000..205c783a85c --- /dev/null +++ b/docs/report/sql-reports/create-aggregate-report-report-designer-analysis-services-cube.md @@ -0,0 +1,174 @@ +--- +title: Create an aggregate report using Report Designer and the Analysis Services Cube | TFS +description: Understand how to create a report that shows how many active work items are assigned to each person on the team - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: b02997f4-2c4b-4814-868e-37e0c2414254 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- + +# Create an aggregate report using Report Designer and the Analysis Services Cube + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can track your team's progress more easily by creating reports that aggregate data from Visual Studio Application Lifecycle Management (ALM) (TFS) into charts and tables. For example, you can create a report that shows how many active work items are assigned to each person on the team. To create this type of report, you use Report Designer in SQL Server and the SQL Server Analysis Services cube for TFS. + + After you create your first report, you might change it by experimenting with different measures, dimensions, and layouts. For example, you can change the chart from a simple column chart to a stacked-bar chart. + + If you have not created reports for TFS before, see [Dashboards and reports](../admin/review-team-activities-for-useful-reports.md). If you have not used Report Designer before, see the following page on the Microsoft Web site: [Designing and Implementing Reports Using Report Designer](http://go.microsoft.com/fwlink/?LinkId=181954). For information about how to create reports that include line-item details (such as titles of work items), see [Create a Detailed Report using Report Designer](create-a-detailed-report-using-report-designer.md). + + **Requirements** + +- You must have Visual Studio and SQL Server Business Intelligence Development Studio installed on the same computer. + + To install Business Intelligence Development Studio, run the Setup program for SQL Server, and select the **Client Components** check box when you specify the components to install. To install the most recent service pack for SQL Server, see the following page on the Microsoft Web site: [How to obtain the latest service pack for SQL Server 2008](http://go.microsoft.com/fwlink/?LinkID=182174). + +- You must be a member of the **TfsWarehouseDataReaders** security role in the Analysis Services database on the data-tier server of Team Foundation Server. For more information, see [How to: Grant Access to the Databases of the Data Warehouse](../admin/grant-permissions-to-reports.md). + +- You must be a member of the **Team Foundation Content Manager** role in SQL Server Reporting Services. For more information, see [Add accounts to administer TFS](../../tfs-server/add-administrator-tfs.md). + +### To create a report + +1. In Visual Studio, create or open a Report Server project. For more information, see [Create a Report Server Project](create-a-report-server-project.md). + +2. On the **Project** menu, choose **Add New Item**. + + The **Add New Item** dialog box appears. + +3. Choose **Report Wizard**, and then choose **Add**. + + The **Report Wizard** opens to the **Select Data Source** page. + +4. Choose the **Tfs2010OlapReportDS** shared data source, and then choose **Next**. + + Even though you might have installed or upgraded to TFS 2013, these names, which were assigned to the data sources for TFS 2010 are in use. + + The wizard advances to the **Design the Query** page. + + > [!NOTE] + > The data source that you specified connects to the analysis services database for TFS. For more information, see [Choose the source of data and authoring tool](https://msdn.microsoft.com/library/bb649557.aspx). If your project does not have this data source, create it. For more information, see [Create a Report Server Project](create-a-report-server-project.md). + +5. Choose **Query Builder**. + + The **Query Build** dialog box appears. + +### To create the query that will retrieve the data for the report + +1. Choose the **Team System** cube, as the following illustration shows. + + ![Query Builder - click the Team System cube](_img/reportdesignercube.png "ReportDesignerCube") + + > [!NOTE] + > If your data warehouse is using SQL Server Enterprise Edition, the list of cubes will include Team System and a set of perspectives. The perspectives provide a focused view of the data so that you do not have to scroll through the dimensions and measures in the whole Team System cube. For this procedure, you can use the Work Item History perspective if it is available. For more information, see [Perspectives and measure groups provided in the Analysis Services cube](https://msdn.microsoft.com/en-us/library/ms244710.aspx). + +2. Expand **Measures**, expand the **Work Item History** measure group, and then drag the **Cumulative Count** measure into the data area, as the following illustration shows. + + ![Query Builder - add Cumulative Count measure](_img/reportdesignmeasure.png "ReportDesignMeasure") + + > [!NOTE] + > Cumulative Count shows how many work items are selected. Because you have not yet applied any filters, the number that appears is the total number of work items. For more information about work item measures, see [Perspectives and measure groups provided in the Analysis Services cube](https://msdn.microsoft.com/en-us/library/ms244710.aspx). + +3. Expand the **Assigned To** dimension, and then drag the **Person** property into the data area, as the following illustration shows. + + ![Query Builder - add Person dimension](_img/querybuilder.png "QueryBuilder") + + The query now returns the number of work items that are assigned to each person. + + > [!NOTE] + > The **Assigned To** field generally contains Windows accounts. For each Windows account, the **Person** property contains the display name of that account, and the **Alias** property contains the alias. + +4. Expand the **Work Item** dimension, drag the **State** property into the data area, and then click **OK**. + + The **Query Builder** is closed, and the **Design the Query** page of the **Report Wizard** reappears. + +### To design the initial report layout + +1. Choose **Next**. + + The wizard advances to the **Report Type** page. + +2. Choose **Matrix**, and then choose **Next**. + + The wizard advances to the **Design the Matrix** page. + +3. Choose **Cumulative_Count**, and then choose **Details**. + +4. Choose **State**, and then choose **Columns**. + +5. Choose **Person**, choose **Rows**, and then click **Next**. + + The wizard advances to the **Choose the Matrix Style** page. + +6. Choose any style, and then choose **Next**. + + The wizard advances to the **Completing the Report** page. + +7. Type a name for the report, choose **Preview Report**, and then choose **Finish** to create the report. + + The wizard closes, and the report document window appears with the **Preview** tab active. + +### To replace the table with a chart + +1. In the report document window, choose the **Layout** tab. + + > [!NOTE] + > Report Designer uses three tabs, as the following table describes briefly. + + |Tab|Description| + |---------|-----------------| + |Data|Define the data sets that your report uses.| + |Layout|Design and arrange the visual elements of your report.| + |Preview|Run your report to see how it looks.| + +2. Highlight the table, and then press **Delete**. + + > [!NOTE] + > To highlight the whole table, choose anywhere in the table, and then choose the upper-left corner of the table. + +3. From the **Toolbox** pane, drag a **Chart** element to the report's layout area, and then size the chart to meet your needs. + + > [!NOTE] + > By default, the **Toolbox** and **Datasets** panes are tabs on the left of the Visual Studio surface. + +4. Right-click the chart, and then choose **Properties**. + + The **Chart Properties** dialog box appears. + +5. Choose the **Data** tab, and then click the **TfsOlapReportDS** dataset name. + +6. Under **Values**, choose the **Add** button. + + The **Edit Chart Value** dialog box appears. + +7. On the **Value** tab, in the **Value** list, choose**=Sum(Fields!Cumulative_Count.Value)**, and then choose **OK**. + +8. Under **Category groups**, choose the **Add** button. + + The **Grouping and Sorting Properties** dialog box appears. + + > [!NOTE] + > The category groups appear on the x-axis of the chart. + +9. In the first row of the **Expression** table, choose**=Fields!Person.Value**, and then choose **OK**. + +10. Under **Series groups**, choose the **Add** button. + + The **Grouping and Sorting Properties** dialog box appears. + +11. In the first row of the **Expression** table, choose**=Fields!State.Value**, choose **OK**, and then choose **OK**. + +12. Choose the **Preview** tab to display a chart that shows how many work items are assigned to each team member, organized by the work item state. + +### To deploy the report + +1. In **Solution Explorer**, choose the report. + +2. On the **Build** menu, click **Deploy** *ReportName*. + + > [!IMPORTANT] + > To successfully deploy the report, your project settings must be set to appropriate values. For more information, see [Create a Report Server Project](create-a-report-server-project.md). + +## Related notes + [Perspectives and measure groups provided in the Analysis Services cube](https://msdn.microsoft.com/en-us/library/ms244710.aspx) \ No newline at end of file diff --git a/docs/report/sql-reports/create-and-manage-reporting-services-reports.md b/docs/report/sql-reports/create-and-manage-reporting-services-reports.md new file mode 100644 index 00000000000..d095cb8a210 --- /dev/null +++ b/docs/report/sql-reports/create-and-manage-reporting-services-reports.md @@ -0,0 +1,77 @@ +--- +title: Create and manage Reporting Services reports | TFS +description: Understand how to use SQL Server Reporting Services to analyze the progress and quality of your project - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: f45075c5-1f3e-4550-a40e-9171f59841fe +ms.manager: douge +ms.author: kaelli +ms.date: 09/05/2017 +--- + +# Create and manage Reporting Services reports + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +If you added SQL Server Reporting Services at installation, then your on-premises Team Foundation Server (TFS) deployment is configured with a data warehouse, SQL Server Analysis Services cube, and Reporting Services Reports. If you didn't add these services previously and want to add them now, see [Add a report server to your deployment](../admin/add-a-report-server.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json ). + + You can create or customize your own Reporting Services reports which support the following scenarios: + +- Allow users to update the report without granting them read access to the databases. + +- Share your reports in Team Explorer under the Reports folder. + +- Support subscriptions to reports that can be sent daily over email. + +- Manage the properties of your reports so that they return results faster and use fewer server resources. + +- Use Transact-SQL queries to retrieve the data for your reports. + + To learn more, see the following topics: + +- [Creating Reports for Team Foundation Server 2010](http://go.microsoft.com/fwlink/?LinkID=199478) describes how to create reports that you can view by using Report Manager. + + (There are only minor schema changes introduced for the TFS 2015 relational warehouse since TFS 2010). + +- [Customizing Reports for Team Foundation Server 2010](http://go.microsoft.com/fwlink/?LinkID=199479) describes how to customize the default reports for Reporting Services that are provided with each process template. These reports use queries that are written in either SQL or Multidimensional Expressions (MDX). + + (There are only minor schema changes introduced for the TFS 2015 cube since TFS 2010). + +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md). The warehouse contains data about builds, source code, test results and code coverage, and work items such as tasks and bugs. Data in the warehouse is collected from the operational stores and organized in a set of tables, views, and table-valued functions from which you can design reports. You can explore relationships between the integrated data sets by directly querying and creating reports from data that is stored in the relational warehouse database. + + ![Team Foundation Warehouse](_img/teamproj_warehouse.png "TeamProj_Warehouse") + +- [Perspectives and measure groups provided in the Analysis Services cube](perspective-measure-groups-cube.md). The Team System cube provides all metrics that are defined for all measure groups. By using the Analysis Services cube for TFS, you can generate reports of aggregated information about the data that is stored in team project collections. You can easily use this data to create PivotTable and PivotChart reports in Microsoft Excel. + + ![Analysis Services Data Cube Measure Groups](_img/rpt_measuregroups.png "RPT_MeasureGroups") + +- [Reportable fields reference](../../work/reference/reportable-fields-reference.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json). All data captured for work items is written to the WIT data store, but only select data is written to the Analysis Services data warehouse. The reportable attribute assigned to each work item field determines whether data is written to only the relational warehouse database or to both the relational warehouse and the OLAP cube. Reportable fields have their reportable attribute set to detail, dimension, or measure. + +## Tools for creating reports + You can access both the relational data warehouse and the Analysis Services cube to create highly customized reports by using these authoring tools. + +- **Report Builder 2.0** is an intuitive environment for authoring reports. This application is optimized for Microsoft Office so that business users can work in that familiar environment. You can use Report Builder 2.0 to work with data, define a layout, preview a report, and publish a report to a report server or a SharePoint site. This application includes a wizard for creating tables or charts, in addition to query builders and an expression editor. It also supports the advanced reporting features in SQL Server 2008 Reporting Services. + + You can download Report Builder for free from the following page on the Microsoft Web site: [Microsoft SQL Server 2008 Reporting Services Report Builder 2.0](http://go.microsoft.com/fwlink/?LinkId=181949). + +- **Report Designer** is a graphical interface for creating full-featured Reporting Services reports. After your report is finished, you have access to the full functionality for managing Reporting Services reports. To use Report Designer, you must know how to connect to and query a data source, but you do not have to know Report Definition Language (RDL). + + To use Report Designer, you must have Visual Studio and SQL Server Business Intelligence Development Studio. + + To learn more about how to work with authoring tool, see these articles: + +- [Designing and Implementing Reports (Reporting Services)](http://go.microsoft.com/fwlink/?LinkId=181950) +- [Reporting Services in Business Intelligence Development Studio](http://go.microsoft.com/fwlink/?LinkId=181951) +- [Comparing Report Authoring Environments](http://go.microsoft.com/fwlink/?LinkId=181952) +- [Designing and Implementing Reports Using Report Builder 2.0](http://go.microsoft.com/fwlink/?LinkId=181953) + +## Q & A + +### Q: How do I view and organize default Reporting Services reports? + **A:** Open reports from Team Explorer, Team Web Access, or Report Manager. See [Reporting Services Reports](reporting-services-reports.md). + +### Q: How do I upload a report? + **A:** See [Upload reports](../admin/upload-reports.md). + +### Q: How do I manage report properties? + **A:** After you create and publish reports, you can use Report Manager to view, organize, and configure those reports. By using Report Manager, you can group related reports in folders, adjust parameters and data sources, and schedule automated reports. See [View, organize, and configure reports using Report Manager](../admin/view-upload-organize-reporting-services-reports.md). \ No newline at end of file diff --git a/docs/report/sql-reports/index.md b/docs/report/sql-reports/index.md new file mode 100644 index 00000000000..1086248a865 --- /dev/null +++ b/docs/report/sql-reports/index.md @@ -0,0 +1,51 @@ +--- +title: Data Warehouse & SQL Server Reports +titleSuffix: | TFS +description: Index to topics for managing the data warehouse, adding reports, and viewing SQL Server reports +ms.assetid: +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.manager: douge +ms.author: kaelli +ms.date: 09/05/2017 +--- + +# Data Warehouse & SQL Server Reports + +> [!IMPORTANT] +> Integration with the data warehouse and SQL Server Reporting Services is only supported for on-premises TFS. If you don't have a reporting site and want to add it, see [Add reports to a team project](../admin/add-reports-to-a-team-project.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json ). +> +> For information on what is supported for VSTS, see [Dashboards and reports overview](../overview.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json). + + + + +## 5-Minute Quickstarts +- [Create Excel reports from a work item query](../excel/create-status-and-trend-excel-reports.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json) + + +## Concepts + +- [Choose data source and authoring tool](../choose-source-data-authoring-tool.md) +- [Components of the data warehouse](components-data-warehouse.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json) + +## How-to Guides + +- [Add reports to a team project](../admin/add-reports-to-a-team-project.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json) +- [Manually process the data warehouse and cube](../admin/manually-process-data-warehouse-and-cube.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json) +- [View, organize, and configure reports using Report Manager](../admin/view-organize-configure-reports-using-report-manager.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json) + + +## Reference + +- [Data warehouse tables](table-reference-relational-warehouse-database.md) +- [Cube perspectives and measure groups](perspective-measure-groups-cube.md) + + +## Resources + +- [TFS - Reporting & Warehouse forum](https://social.msdn.microsoft.com/Forums/vstudio/home?forum=tfsreporting) +- [TFS & SharePoint integration](../../ecosystem/sharepoint/index.md) diff --git a/docs/report/sql-reports/perspective-build-analyze-report-build-details-coverage.md b/docs/report/sql-reports/perspective-build-analyze-report-build-details-coverage.md new file mode 100644 index 00000000000..d85e3597f4c --- /dev/null +++ b/docs/report/sql-reports/perspective-build-analyze-report-build-details-coverage.md @@ -0,0 +1,134 @@ +--- +title: Analyze and report on build details and build coverage | TFS +description: View the measures, dimensions, and attributes in the SQL Server Analysis Services cube for Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 36b4e35a-d81d-4851-bd49-8b23d177fb53 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + +# Analyze and report on build details and build coverage using the Build perspective + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +By using the Build perspective, you can view just the measures, dimensions, and attributes in the SQL Server Analysis Services cube for Visual Studio Team Foundation Server that pertain to the build process. For example, you can use these measures to determine how many builds are failing and how much of the code changed within a build. + + The Build perspective is based on the relational tables that enable reporting on builds as either a property of the build, code coverage, or a changeset in version control. For more information, see [Build Details tables](table-reference-build-details.md), [Build Project tables](table-reference-build-project.md), [Build Coverage tables](table-reference-build-coverage.md), and [Build Changeset tables](table-reference-build-changeset.md). + + +![Build Measure Group](_img/rpt_cubemg.png "RPT_CubeMG") + +By using the Build perspective, you can create reports that answer the following questions: + +**Status reports:** +- Which builds failed and which builds succeeded?
      Which builds reflect a significant number of changes to the code? +- Which builds are ready to install? + +**Trend reports:** +- What is the status of all builds over time? +- How much of the code was executed by the tests over time? + +>[!NOTE] +>If your data warehouse is using SQL Server Enterprise Edition, the list of cubes will include Team System and a set of perspectives. The perspectives provide a focused view of the data so that you do not have to scroll through all of the dimensions and measure groups that are defined for the whole Team System cube. + + + +## Example: Build status report +By using PivotChart reports in Excel, you can display the build status over time, similar to the data in the following illustration. + + ![Build Status report](_img/procguid_agileexcel.png "ProcGuid_AgileExcel") + + The [Agile](../../work/guidance/agile-process.md) and [CMMI](../../work/guidance/cmmi-process.md) process templates include the Build Status report in Excel. For more information, see [Build Status](../excel/build-status-excel-report.md). + +### Pivot field selection and filters + + ![Pivot Fields for Build Summary Status report](_img/alm_rpt_pivot_build.png "ALM_RPT_Pivot_Build") + + You can create the summary report for build status by performing the following steps: + +1. In Excel, connect to the Analysis Services cube for Team Foundation Server, and insert a PivotChart report. + + For more information, see [Create Excel reports from a work item query](../excel/create-status-and-trend-excel-reports.md). + +2. Open the context menu for the chart and then choose **Change Chart Type**, **Area**, **Stacked Column**. + +3. For each report filter, open the context menu for each of the following fields, specify the hierarchies, weeks, or other elements of interest, and then drag the field to the **Report Filter** area. + + - **Team Project Hierarchy** from the **Team Project** dimension + + - **Year Week Date** from the **Date** dimension + + - **Build Definition Name** from the **Build** dimension + +4. In the **Date** dimension, expand **More fields**, and drag the **Date**, **Week**, or **Month** fields to the **Axis Fields (Categories)** area to specify how granular a report you want to generate. + +5. Drag the **Build Details Count** field from the **Build Details** measure group to the **Values** area. + +6. Drag the **Build Status Name** field from the **Build Status** dimension to the **Legend Fields (Series)** area. + +7. (Optional) Filter the **Build Status Name** field to display only those builds that **Failed**, **Partially Succeeded**, or **Succeeded**. + + + +## Build measures + The following table describes the measures that are associated with builds. The **Build Coverage** measure group requires that the test team instrument tests to gather code coverage data. For more information, see [Required activities](#tracking) later in this topic. For an example of a report that uses several of these measures, see [Build Quality Indicators](build-quality-indicators-report.md). + +|Measure Group|Measure|Description| +|-------------------|-------------|-----------------| +|Build Details|Build Details Count|Number of times that a specific build has been run.| +||Build Duration|Number of minutes that the build took to finish.| +|Build Changeset|Build Changeset Count|Number of changesets in the selected set of builds.| +|Build Coverage|Blocks Covered|Number of blocks that the selected build covers. If multiple test runs are performed against a build, the build coverage reflects the combined coverage of the runs. However, the runs may cover blocks that overlap.| +||Blocks Not Covered|Number of blocks that the selected build does not cover. If multiple test runs are performed against a build, the build coverage reflects the combined coverage of the runs. However, the runs may cover blocks that overlap.| +||Build Coverage|Number of builds that are associated with code coverage statistics.| +||Lines Covered|Number of lines that the selected build covers. If multiple test runs are performed against a build, the build coverage reflects the combined coverage of the runs. However, the runs may cover lines that overlap.| +||Lines Not Covered|Number of lines that the selected build does not cover. If multiple test runs are performed against a build, the build coverage reflects the combined coverage of the runs. However, the runs might cover lines that overlap.| +||Lines Partially Covered|Number of lines that the selected build partially covers. If multiple test runs are performed against a build, the build coverage reflects the combined coverage of the runs. However, the runs might cover lines that overlap.| +|Build Project|Build Project Count|Number of .csproj files, .vbproj files, and other project files in the selected set of builds.| +||Compile Errors|Number of compile errors that occurred for the selected builds.| +||Compile Warnings|Number of compile warnings that occurred for the selected builds.| +||Static Analysis Errors|Number of static analysis errors that occurred for the selected builds.| +||Static Analysis Warnings|Number of static analysis warnings that occurred for the selected builds.| + + +## Dimensions and attributes in the Build perspective that support filtering and categorization + You can use the attributes in the following table to aggregate a measure, filter a report, or specify a report axis. These attributes supplement the **Team Project** and **Date** shared dimensions that [Working with Shared Dimensions](shared-dimensions-in-the-analysis-services-cube.md) describes. + +> [!NOTE] +> To use the **Assembly**, **Build Flavor**, or **Build Platform** dimension attributes, the test team must publish the test results to the TFS data store. For more information, see [Required activities](#tracking) later in this topic. + +|Dimension|Attribute|Description| +|---------------|---------------|-----------------| +|Assembly|Assembly|(Published test results only) The name of the code of the application that is tested as part of the build. For more information, see [Get started with continuous testing](../../build-release/test/getting-started-with-continuous-testing.md).| +|Build|Build Definition Name|Name that is assigned to the build definition for which a build was executed.| +||Build ID|The number that is assigned to the build. Each time that a particular build definition is run, the **Build ID** is incremented by 1.| +||Build Name|The name or expression that uniquely identifies a build. For more information, see [build definition options](../../build-release/concepts/definitions/build/options.md).| +||Build Start Time|The date and time when the build started.| +||Build Type|The reason why the build was run. Build types are associated with the trigger that was defined for the build. Team Foundation Server supports the following types of builds: manual, continuous (triggered by every check-in), rolling (accumulate check-ins until the previous build finishes), gated check-in, and scheduled. For more information, see [Build definition triggers](../../build-release/concepts/definitions/build/triggers.md).| +||Drop Location|The Uniform Resource Locator (URL) for the completed build. A URL specifies the protocol with which web browsers will to locate Internet resources. Each URL includes the name of the server on which the details of the build resides. You can also include the path to a resource.| +|Build Flavor|Build Flavor|(Published test results only) A name that designates the category of builds that was assigned to a set of completed builds that were published as part of a test run. For example, a build flavor can designate a beta release or final release. For more information, see [Command-Line options for publishing test results](https://msdn.microsoft.com/library/ms243151.aspx).| +|Build Platform|Build Platform|The name of the platform for which an end-to-end (not desktop) build was made (for example, **x86** or **Any CPU**). For an example of a report that uses this attribute, see [Build Summary](build-summary-report.md). For more information, see [How do I build multiple configurations for multiple platforms?](../../build-release/tasks/build/visual-studio-build.md#how-do-i-build-multiple-configurations-for-multiple-platforms).| +|Build Quality|Build Quality|The quality of the build. For example, you can rate a completed build's quality as **Ready for Deployment**, **Rejected**, or **Under Investigation**. | +|Build Status|Build Status Name|The current state of the build. Valid values are **Failed**, **Partially Succeeded**, **Stopped**, **Succeeded**, and **Unknown**.| +|Build Source Project File|File Hierarchy|The full network path of the source file.| +||File Extension|The extension of the name of the source file.| +|Version Control Changeset|Changeset ID|The number that is assigned to the changeset.| +||Checked In By|The user name of the team member who checked in the changeset.| +||Description|The check-in comment that is associated with the changeset.| +||Policy Override Comment|The comment that is provided when a policy is overridden. If a policy was not overridden with a changeset, the field is null.| + +## Required activities + To create reports that contain useful data about builds, team members should review the information in the following topics: + +- [Run tests in your build process](../../build-release/test/test-build.md) +- [Using Code Coverage to Determine How Much Code is being Tested](https://msdn.microsoft.com/library/dd537628.aspx) + +## Related notes +- [Build Quality](../excel/build-quality-excel-report.md) +- [Build Status](https://msdn.microsoft.com/library/dd695786.aspx) +- [Build Quality Indicators](build-quality-indicators-report.md) +- [Build Success Over Time](build-success-over-time-report.md) +- [Build Summary](build-summary-report.md) +- [Perspectives and measure groups provided in the Analysis Services cube](perspective-measure-groups-cube.md) diff --git a/docs/report/sql-reports/perspective-code-analyze-report-code-churn-coverage.md b/docs/report/sql-reports/perspective-code-analyze-report-code-churn-coverage.md new file mode 100644 index 00000000000..ac5c0931561 --- /dev/null +++ b/docs/report/sql-reports/perspective-code-analyze-report-code-churn-coverage.md @@ -0,0 +1,156 @@ +--- +title: Analyze and report on code churn and code coverage | TFS +description: View measures, dimensions, and attributes that are associated with the changes in lines of codes +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 7a6c9101-c38d-4d6d-be8d-d64a3931487b +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + + +# Analyze and report on code churn and coverage using the code churn and run coverage perspectives + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can report on the software quality by using the Code Churn and Run Coverage perspectives from the SQL Server Analysis Services cube for Visual Studio Team Foundation Server. By using these perspectives, you can view just the measures, dimensions, and attributes that are associated with the changes in lines of codes and the extent to which code is covered in builds and test runs. + + These perspectives are based on the relational tables that you can use to report on code changes and coverage as a property of the build, the build assembly or platform, the test run, or the changeset. For more information, see [Code Churn tables](table-reference-code-churn.md) and [Run Coverage tables](run-coverage-tables.md). + + +![Code Churn Measure Group](_img/rpt_codechurn.png "RPT_CodeChurn") + +By using the Code Churn perspective, you can create reports that answer the following questions: +- How many files with a specific file name extension changed in a particular build? +- How many lines of code are in the source base for a particular build? +- Which changesets have been submitted, and what are the details of each change? (For example, who made the change, which files were changed, and on what date was the change made)? + +![Code Coverage Measure Group](_img/rpt_codecoverage.png "RPT_CodeCoverage") + +By using the Run Coverage perspective, you can create reports that answer the following questions: +Which assemblies have the least test coverage?
      - Which test runs cover the most code? +Which architectures or build types have the most test coverage? + +>[!NOTE] +>If your data warehouse is using SQL Server Enterprise Edition, the list of cubes will include Team System and a set of perspectives. The perspectives provide a focused view of the data so that you do not have to scroll through all of the dimensions and measure groups in the whole Team System cube. + + + +## Example: Code Churn Report +By using a PivotChart report in Excel, you can create a trend report that displays the code churn over time, similar to the report that the following illustration shows. + + ![Code Churn Report](_img/procguid_codechurn.png "ProcGuid_CodeChurn") + + The process templates for Microsoft Solutions Framework (MSF) [Agile](../../work/guidance/agile-process.md) and [CMMI](../../work/guidance/cmmi-process.md) provide the Code Churn report in Excel. For more information, see [Code Churn](../excel/code-churn-excel-report.md). + +### Select and filter pivot fields + ![Pivot Fields for Code Churn Report](_img/alm_rpt_pivot_codechurn.png "ALM_RPT_Pivot_CodeChurn") + + You can create a code churn report by performing the following steps: + +1. In Excel, connect to the SQL Server Analysis Services cube for Visual Studio Team Foundation Server, and insert a PivotChart report. + + For more information, see [Create Excel reports from a work item query](../excel/create-status-and-trend-excel-reports.md). + +2. Right-click the chart and then choose **Change Chart Type**, **Area**, **Stacked Area**. + +3. For each report filter, open the shortcut menu for each of the following fields, specify the hierarchies, weeks, or other elements of interest, and then drag the field to the **Report Filter** area. + + - **Team Project Hierarchy** from the **Team Project** dimension + + - **Work Item.Iteration Hierarchy** from the **Work Item** dimension + + - **Work Item.Area Hierarchy** from the **Work Item** dimension + + - **Year Week Date** from the **Date** dimension + +4. In the **Date** dimension, expand **More fields**, and drag the **Date**, **Week**, or **Month** fields to the **Axis Fields (Categories)** area based on how granular a report you want to generate. + +5. Drag the **Lines Added**, **Lines Modified**, and **Lines Deleted** fields from the **Code Churn** measure group to the **Values** area. You must drag each field separately. + + +## Code churn measures + Code churn measures quantify how much change is occurring in your project. In general, high levels of churn indicate project instability. You should expect high rates of churn at the start of a product cycle or after the team has implemented many changes. Toward the end of an iteration or before a release, you should expect the level of churn to decrease, which indicates that your project is more stable. + + The following table describes the measures in the Code Churn measure group. By using these measures, you can create reports that show how many file versions are stored in Team Foundation version control and how much the code has changed. You can analyze metrics by file directory, build, or team member who checked in changes, and you can determine how those metrics change over time. + + For information about similar metrics that you can collect for builds, see [Builds](perspective-build-analyze-report-build-details-coverage.md). + +|Measure|Description| +|-------------|-----------------| +|Code Churn Count|The number of times that the team changed files in version control.| +|Lines Added|The number of lines of code that the team added to files for the dimensions that you specify.| +|Lines Deleted|The number of lines of code that the team deleted from files for the dimensions that you specify.| +|Lines Modified|The number of lines of code that the team modified during the time period that you specify.| +|Total Churn|Churn in the code, computed as: [Lines Added] + [Lines Deleted] + [Lines Modified].| +|Total Lines|The number of lines in the part of the file path hierarchy that you specify. You must also specify one or more builds to indicate the point or points at which to perform this calculation. If you do not specify one or more builds, NULL is returned. The number of lines is calculated by aggregating the lines added and lines deleted that have contributed to a specific combination of build type and operating system. **Tip:** The Total Lines measure can cause the OLAP query to timeout. If your report takes too long to render, consider shortening the changeset, build, test run, or date range.| + + +## Run coverage measures + +The following table describes the measures in the Run Coverage measure group. By using these measures, you can create reports that show the extent to which the code was covered by tests in a test run. For information about similar metrics that you can collect for builds, see [Builds](perspective-build-analyze-report-build-details-coverage.md). + +|Measure|Description| +|-------------|-----------------| +|Run Coverage|The number of test runs that have code coverage statistics associated with them.| +|Run Coverage Blocks Covered|The number of blocks that all tests in a run cover. However, coverage across the tests might overlap.| +|Run Coverage Blocks Not Covered|The number of blocks that are not covered by any tests in a run. However, coverage across the tests might overlap.| +|Run Coverage Lines Covered|The number of lines that all tests in a run cover. However, coverage across the tests might overlap.| +|Run Coverage Lines Not Covered|The number of lines that are not covered by any tests in a run. However, coverage across the tests might overlap.| +|Run Coverage Lines Partially Covered|The number of lines that tests in a run partially cover. However, coverage across the tests might overlap.| + + +## Dimension and attributes in the Code Churn Perspective that support filtering and categorization + The following table describes the dimensions and attributes in the Code Churn perspective. These attributes supplement the **Team Project** and **Date** shared dimensions, which [Working with Shared Dimensions](shared-dimensions-in-the-analysis-services-cube.md) describes. You can aggregate the measures along each of these attributes. + +|Dimension|Attribute|Description| +|---------------|---------------|-----------------| +|Build|Build Definition Name|The name that is assigned to the build definition for which a build was run.| +||Build ID|The number that is assigned to the build. Each time that a particular build definition is run, this attribute is incremented by 1.| +||Build Name|The name or expression that uniquely identifies a build. For more information, see [build definition options](../../build-release/concepts/definitions/build/options.md).| +||Build Start Time|The date and time when the build started.| +||Build Type|The reason why the build was run. Build types are associated with the trigger that was defined for the build. Team Foundation Server supports the following types of builds: manual, continuous (triggered by every check-in), rolling (accumulate check-ins until the previous build finishes), gated check-in, and scheduled. For more information, see [Build definition triggers](../../build-release/concepts/definitions/build/triggers.md).| +||Drop Location|The Uniform Resource Locator (URL) for the completed build. A URL specifies the protocol with which web browsers will locate Internet resources. Each URL includes the name of the server on which the details of the build reside. You can also include the path to a resource.| +|Version Control Changeset|Changeset ID|The number that is assigned to the changeset that included the file changes.| +||Checked In By|The user name of the team member who checked in the changeset.| +||Description|The check-in comment that is associated with the changeset.| +||Policy Override Comment|The comment that is provided when a policy is overridden. If a policy was not overridden with this changeset, this field is null.| +|Version Control File|Version Control File.File Hierarchy|The full network path of the source file.| +||Version Control File.File Extension|The extension of the name of the source file.| +|Work Item|Work Item Type and more|For more information, see [Test cases and work items](perspective-test-analyze-report-work.md).| + + +## Dimensions and attributes in the Run Coverage Perspective that support filtering and categorization + The following table describes the dimensions and attributes in the Run Coverage perspective. These attributes supplement the **Team Project** and **Date** shared dimensions that [Working with Shared Dimensions](shared-dimensions-in-the-analysis-services-cube.md) describes later in this topic. You can aggregate the measures along each of these attributes. + +> [!NOTE] +> Before you can use the **Assembly** or **Build Flavor** attributes, the test team must specify them and publish the test results to the data store for Team Foundation Server. For more information, see [Required activities](#tracking) later in this topic. + +|Dimension|Attribute|Description| +|---------------|---------------|-----------------| +|Assembly|Assembly|(Published test results only) The name of the code of the application that is tested as part of the build. For more information, see [Get started with continuous testing](../../build-release/test/getting-started-with-continuous-testing.md).| +|Build|Build Definition Name|The name that is assigned to the build definition for which a build was run.| +||Build ID|The number that is assigned to the build. Each time that a particular build definition is run, the **Build ID** is incremented by 1.| +||Build Name|The name or expression that uniquely identifies a build. For more information, see [build definition options](../../build-release/concepts/definitions/build/options.md).| +||Build Start Time|Date and time when the build started.| +||Build Type|The reason why the build was run. Build types are associated with the trigger that was defined for the build. Team Foundation Server supports the following types of builds: manual, continuous (triggered by every check-in), rolling (accumulate check-ins until the previous build finishes), gated check-in, and scheduled. For more information, see [Build definition triggers](../../build-release/concepts/definitions/build/triggers.md).| +||Drop Location|The Uniform Resource Locator (URL) for the completed build. A URL specifies the protocol with which web browsers will locate Internet resources. The URL also includes the name of the server on which the resource resides. You can also specify the path to a resource.| +|Build Flavor|Build Flavor|(Published test results only) A name that designates the category that is assigned to a set of completed builds that were published as part of a test run. For example, you can use a build flavor to designate a beta release or final release.| +|Build Platform|Build Platform|(Published test results only) The name of the machine platform for which an end-to-end (not desktop) build was made and that was published as part of a test run (for example, **x86** or **Any CPU**). For an example of a report that uses this attribute, see [Build Summary](build-summary-report.md).| +|Test Run|Complete Date Hierarchy by Month or by Week

      Creation Date Hierarchy by Month or by Week|Date dimensions that are based on the date when the test run was created and finished. For more information, see [Shared dimensions](shared-dimensions-in-the-analysis-services-cube.md).| + +## Required activities + To create reports that contain code churn and code coverage data, team members should review the information in the following topics: + +- [Get started with continuous testing](../../build-release/test/getting-started-with-continuous-testing.md) +- [Using Code Coverage to Determine How Much Code is being Tested](https://msdn.microsoft.com/library/dd537628.aspx) + +- [Configure unit tests by using a .runsettings file](https://msdn.microsoft.com/library/jj635153.aspx) + +## Related notes +- [Code Churn](../excel/code-churn-excel-report.md) +- [Code Churn](../excel/code-coverage-excel-report.md) +- [Code Churn tables](table-reference-code-churn.md) +- [Run Coverage tables](run-coverage-tables.md) +- [Perspectives and measure groups in the Analysis Services cube](perspective-measure-groups-cube.md) diff --git a/docs/report/sql-reports/perspective-measure-groups-cube.md b/docs/report/sql-reports/perspective-measure-groups-cube.md new file mode 100644 index 00000000000..eef1b1d584e --- /dev/null +++ b/docs/report/sql-reports/perspective-measure-groups-cube.md @@ -0,0 +1,68 @@ +--- +title: Perspectives and measure groups | TFS +description: Generate reports of aggregated information about the data stored in team project collections +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 9ab451df-ce11-4fc9-9aac-bedd154ba0d4 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Perspectives and measure groups + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +By using the SQL Server Analysis Services cube for Visual Studio Team Foundation Server, you can generate reports of aggregated information about the data that is stored in team project collections. You can easily use this data to create PivotTable and PivotChart reports in Office Excel. You can drag the cube elements onto PivotTable or PivotChart reports to formulate questions and retrieve answers quickly. The cube is optimized to answer questions such as "How many bugs were active, resolved, and closed on each day of the project?" + +> [!NOTE] +> If your data warehouse for Visual Studio ALM is using SQL Server Enterprise Edition, the list of cubes will include Team System and a set of perspectives. The perspectives provide a focused view of the data so that you do not have to scroll through all of the dimensions and measure groups that are defined for the whole Team System cube. + + + +## Perspectives and measure groups + The following table describes the measure groups, which are grouped according to their cube perspective. The Team System cube contains all measure groups in addition to the ones that are listed as belonging just to the Team System perspective. Most measure groups contain one or more cumulative counts. You can use cumulative counts to generate trend reports. In some cases, the name for a cumulative count has a trend label (for example, Build Result Count Trend and Point Count Trend). + +> [!NOTE] +> All measure groups contain cumulative counts based on the start, end, creation, and completion dates for test results. + +|Perspectives and Measure Groups|Related topic and description| +|-------------------------------------|-----------------------------------| +|![Build Measure Group](_img/rpt_cubemg.png "RPT_CubeMG")|[Builds](perspective-build-analyze-report-build-details-coverage.md)

      Provides metrics that describe builds, such as build time and build frequency, and that can be analyzed by various dimensions, such as who performed the build, the build type, the build flavor, and the build outcome.

      - Which builds failed, and which builds succeeded?
      - Which builds have a significant number of changes to the code?
      - How much of the code in a build or a group of builds did the tests cover?| +|![Code Churn Measure Group](_img/rpt_codechurn.png "RPT_CodeChurn")|[Code churn and code coverage](perspective-code-analyze-report-code-churn-coverage.md)

      Supports reports that are focused on the number of file versions that are stored in Team Foundation version control and the extent to which the code has changed. Metrics can be analyzed by file directory, build, or team member who is checked in code. All totals can be analyzed over time so that you can answer the following types of questions:

      - How many files of a specific file name extension changed in a particular build?
      - How many lines of code are in the source base for a particular build?
      - Which changesets have been submitted, and what were the details of each change (for example, who performed the change, what files were modified, and on what date was the change made).| +|![Code Coverage Measure Group](_img/rpt_codecoverage.png "RPT_CodeCoverage")|[Code churn and code coverage](perspective-code-analyze-report-code-churn-coverage.md)

      Provides metrics about how many lines and blocks of code were tested in various build and run configurations. You can use the Run Coverage perspective to create reports that answer the following questions:

      - Which assemblies and projects have the least code coverage?
      - Which test runs give you the most code coverage?
      - Which architectures or build types have the most code coverage?| +|![Test Measure Group](_img/rpt_testmg.png "RPT_TestMG")|[Test results](perspective-test-analyze-report-test-results.md)

      Provides metrics about test runs and test results. Test results are tracked over time and can be analyzed by their outcome, the build they were testing, the type of test, and other dimensions. By using the Test perspective, you can create reports that answer the following questions:

      - What is the status of testing of specific user stories or product areas?
      - What is the quality of builds based on the number of failed and passed tests?
      - How many test cases have never been run?
      - Which test cases have never been run?| +|![Work Item Measure Group](_img/rpt_wit_mg.png "RPT_WIT_MG")|[Test cases and work items](perspective-test-analyze-report-work.md)

      Provides metrics and detailed information about work items, including historical information that enables total work item counts to be analyzed over time or as of a current date. You can use this measure group to answer the following types of questions:

      - What was the total count of active bugs each day in the last iteration?
      - How many scenarios were active each month during the last year?
      - How many bugs of each priority have been active each day in the last month?| +|![Analysis Services Data Cube Measure Groups](_img/rpt_measuregroups.png "RPT_MeasureGroups")|Provides all metrics for all measure groups that appear previously in this table.| + +## Combining dimensions and measures + Not all combinations of dimensions and measures will produce useful results. For you to get meaningful results, the measures must relate to the dimensions in your reports. To determine which dimensions relate to a specific measure, you can check the fact tables in the data warehouse by using SQL Server Management Studio. + + If you are using Excel, you can use the **Show fields related to** box to specify a group of measures and dimensions that cover a specific section of the cube. By working within a single set of related fields, you can find data more easily because not all fields in the cube appear, and you are much more likely to get useful numbers. + + You can combine measures from different groups of fields as long as the measures have a common set of dimensions that are used in the report. The Date dimension, for example, appears in multiple groups of fields. Therefore, you could combine the Remaining Work or Completed Work data with test result counts for a day or days that you specify because both these sets of measures have Date as a related dimension. + +## Cube terms and definitions + A cube represents a set of measures that are grouped into measure groups and hierarchically organized by dimensions. The cube is constructed from data retrieved from relational database. The following illustration shows the relationship that exists between different aspects of the cube. + + ![Cube relationships](_img/rpt_cube_definitions.png "RPT_Cube_Definitions") + + The following table describes the terms and definitions that are used when referring to different aspects of the cube. + +|Term|Description| +|----------|-----------------| +|Attribute|Each attribute is connected to a column in a corresponding dimension table in the data warehouse. Each dimension is associated with a set of attributes and potentially a set of hierarchies. Area and iteration paths are examples of hierarchies.

      Some work item dimension attributes are also stored as numeric and date filter values. When you use one of these dimension attributes in the rows or columns section, you can use these values to filter the report. For example, you can filter a report to show work items that were created after Oct 1, 2009, by using the value filter "System_CreatedDate is greater than Oct 1, 2009." You can also use the measure values to filter a report. For example, you can filter the report to show only work items that have more than two hours of work remaining by using the value filter "Remaining Work is greater than 2." | +|Dimension|Dimensions enable you to extract different views of data. Data values are associated with a set of dimensions that allow you to show aggregate results that are filtered using a specific set of dimension values.

      You can use dimensions to disaggregate the data and show more detail. For example, you can use the Date dimension in the rows or columns section of a PivotTable or PivotChart report to show a trend over time. You can also use dimensions to filter the report. Place a dimension or dimension attribute in the filter area, and then specify the values that you want to include in the report.

      Some dimensions are used in more than one measure group. For example, all measure groups share the Date, Team Project, Person, Area, and Iteration dimensions. The following illustration shows the dimensions in the cube.

      ![Team System Dimensions](_img/teamproj_dimensions.png "TeamProj_Dimensions")

      Dimensions are groups of attributes that are based on columns from tables or views in a data source view. Dimensions exist outside of a cube, can be used in multiple cubes, can be used multiple times in a single cube, and can be linked between Analysis Services instances. A dimension that exists outside of a cube is referred to as a database dimension, and an instance of a database dimension within a cube is referred to as a cube dimension.| +|Fact and fact table|A fact represents data that can be associated with multiple dimensions. This data may also be aggregated. Fact tables hold these values.

      Each data warehouse includes one or more fact tables. Central to a "star" or "snowflake" schema, a fact table captures the data that measures the team's operations. Fact tables usually contain large numbers of rows, especially when they contain one or more years of history for a large team project.

      A key characteristic of a fact table is that it contains numerical data (facts) that can be summarized to provide information about the history of the operation of the organization. Each fact table also includes a multipart index that contains, as foreign keys, the primary keys of related dimension tables. The related dimensions contain attributes of the fact records. Fact tables should not contain descriptive information or any data other than the numerical measurement fields and the index fields that relate the facts to corresponding entries in the dimension tables.

      For a list of the fact tables that are defined for the data warehouse, see [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md).| +|KPIs|In business terminology, a key performance indicator (KPI) is a quantifiable measurement for gauging business success.

      In Analysis Services, a KPI is a collection of calculations that are associated with a measure group in a cube and that are used to evaluate business success. Typically, these calculations are a combination of Multidimensional Expressions (MDX) expressions or calculated members. KPIs also have additional metadata that provides information about how client applications should display the results of the KPI's calculations.| +|Measure|Measures are values that correspond to columns in the corresponding fact table. Also, fields whose reportable attribute is set to Measure appear as measures in the cube. The following illustration shows the measures in the cube.

      ![Team System Measures](_img/teamproj_measures.png "TeamProj_Measures")| +|Measure group|Each measure group contains measures, such as Work Item Count, and dimensions, such as Date and Team Project. The measures are the numeric values that provide summaries at different levels of aggregation. You can use them in the Values section of a PivotTable or PivotChart report. The following illustration indicates the measure groups for Team Foundation.

      ![Team System Measure Groups](_img/rpt_mgroups.png "RPT_MGroups")| +|Perspective | By using perspectives, you can view portions of a cube, making it easier to focus on just the set of information that is of interest for creating a report. | + +>[!NOTE] +>Perspectives are available only when your data warehouse is using SQL Server Enterprise Edition. Otherwise, you will see only a single perspective, the Team System cube. Each perspective provides a focused view of the data so that you do not have to scroll through all of the dimensions and measure groups that are defined for the whole cube. A perspective is a subset of the features and objects of a cube. + +## Related notes +- [Resolve schema conflicts occurring in the data warehouse](../admin/resolve-schema-conflicts.md) +- [Create status and trend reports in Excel](../excel/create-status-and-trend-excel-reports.md) +- [Manage reports, data warehouse, and cube](../admin/manage-reports-data-warehouse-cube.md) +- [Dashboards and reports](../overview.md) \ No newline at end of file diff --git a/docs/report/sql-reports/perspective-test-analyze-report-test-results.md b/docs/report/sql-reports/perspective-test-analyze-report-test-results.md new file mode 100644 index 00000000000..b58df19f220 --- /dev/null +++ b/docs/report/sql-reports/perspective-test-analyze-report-test-results.md @@ -0,0 +1,171 @@ +--- +title: Analyze and report on test results | TFS +description: View the measures, dimensions, and attributes that pertain to reporting on tests results and test runs +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 85cbf27b-d908-4fa1-8f72-d9a584922a45 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + +# Analyze and report on test results using the test perspective + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + By using the Test perspective in the SQL Server Analysis Services cube, you can view just the measures, dimensions, and attributes that pertain to reporting on tests results and test runs. For example, you can use these measures to determine the overall quality of each build, the tests that a particular build affected, and the number of test cases that were run. You can also answer questions about changes to the result outcomes. + +The Test measure group is based on the Test Results relational table, which enables reporting on test results as either a property of the tests or an independent outcome. For more information, see [Test Result tables](test-result-tables.md). + + +![Test Measure Group](_img/rpt_testmg.png "RPT_TestMG") + +By using the Test perspective, you can create reports that answer the following questions: + +**Status reports:** +- What is the status of testing of specific user stories or product areas? +- What is the quality of builds based on the number of failed and passed tests? +- How many test cases have never been run? +- Which test cases have never been run? + +**Trend reports:** +- How many tests are blocked, passing, or failing over time? +- How many tests are regressing? +- How consistent is the manual test activity over time? + +> [!NOTE] +> If your data warehouse is using SQL Server Enterprise Edition, the list of cubes will include Team System and a set of perspectives. The perspectives provide a focused view of the data so that you do not have to scroll through all of the dimensions and measure groups in the whole Team System cube. + + To use many Test measures and dimension attributes, the test team must publish the test results to the data store for Team Foundation Server. For more information, see [Required activities](#tracking) later in this topic. + + + +## Example: Progress report for testing user stories + By using PivotTable and PivotChart reports in Excel, you can create a status report that shows the test progress on user stories, similar to the report in the following illustration. + + ![User Story Test Status Excel Report](_img/procguid_exruserstore.png "ProcGuid_ExRUserStore") + + The [Agile](../../work/guidance/agile-process.md) and [CMMI](../../work/guidance/cmmi-process.md) process templates include the [User Story Test Status](../excel/user-story-test-status-excel-report-agile.md) and [Requirement Test Status](../excel/requirement-test-status-excel-report-cmmi.md) in Excel, respectively. + +### Specify and filter pivot fields + + ![Pivot Fields for User Stories Test Progress](_img/pivotfieldsforuserstoriestestprogress.png "PivotFieldsforUserStoriesTestProgress") + + By performing the following steps, you can create a progress report for testing user stories: + +1. In Excel, connect to the Analysis Services cube for Team Foundation Server, and then insert a PivotChart report. + + For more information, see [Create Excel reports from a work item query](../excel/create-status-and-trend-excel-reports.md). + +2. Right-click the chart, then choose **Change Chart Type**, **Area**, **Stacked Bar**. + +3. For each report filter, right-click each of the following fields, specify the hierarchies or elements of interest, and then drag the field to the **Report Filter** area. + + - **Team Project Hierarchy** from the **Team Project** dimension + + - **Area Path** from the **Team Project** dimension + + - **Iteration Path** from the **Test Case** dimension + + - **Work Item Type** from the **Work Item Linked** dimension + + Specify the type as user story, requirement, or another type of work item that has test cases linked to it that you want to report. + +4. Drag the **Point Count Trend** field from under the **Test** measure group to the **Values** area. + +5. Drag the **Outcome** field from under the **Test Result** dimension to the **Column Labels** area. + +## Test measures + The following table describes the measures that the Test measure group includes. You can analyze test results by the aggregate of tests results and their outcome for a particular build or by the changed outcome for a test result. + +|**Measure**|**Description**| +|-----------------|---------------------| +|Build Result Count Trend|Counts the most recent version of each result in a particular build.

      For an example of a report that uses this measure, see [Build Quality](../excel/build-quality-excel-report.md).| +|Point Count Trend|Count of the most recent version of each test result in a particular build. If a test is run multiple times against a build, the Point Count Trend counts the most recent result for that test using that build. If a test case is not included in the build, the test case is counted as "Never Run."

      Use this measure to determine which tests or how many tests are failing in the current build.| +|Result Count|Counts the most recent version of each test result. Use this measure when you want to determine the overall volume of testing.

      For an example of a report that uses this measure, see [Build Quality Indicators](build-quality-indicators-report.md).| +|Result Transition Count|Counts all the results whose outcome changed in a particular build. Use this measure when you want to determine which tests were affected by a particular build.| +|Test Case Count|Number of test cases. Use this measure when you want to determine how many test cases were run for a particular test run or build.| + +## Dimensions and attributes in the Test Perspective that support filtering and categorization + By using the attributes that this section describes, you can aggregate a measure, filter a report, or specify a report axis. These attributes are in addition to the **Team Project** and **Date** shared dimensions that [Working with shared dimensions](shared-dimensions-in-the-analysis-services-cube.md) describes. + +### Build, build flavor, and build platform dimensions + You can filter test reports based on build definition, build flavor, or build platform by using the attributes that the following table describes. + +|Dimension|Attribute|Description| +|---------------|---------------|-----------------| +|Build|Build Definition Name|The name that is assigned to the build definition for which a build was executed.

      For an example of a report that uses this attribute, see [Build Quality](../excel/build-quality-excel-report.md).| +||Build ID|The number that is assigned to the build. Each time that a particular build definition is run, the **Build ID** is incremented by 1.| +||Build Name|The name or expression that uniquely identifies a build. For more information, see [build definition options](../../build-release/concepts/definitions/build/options.md).| +||Build Start Time|The date and time when the build started.| +||Build Type|The reason why the build was run. Build types are associated with the trigger that was defined for the build. Team Foundation Server supports the following types of build: manual, continuous (triggered by every check-in), rolling (accumulate check-ins until the previous build finishes), gated check-in, and scheduled. For more information, see [Build definition triggers](../../build-release/concepts/definitions/build/triggers.md).| +||Drop Location|The drop folder that is defined for the build and that is specified as a Uniform Resource Locator (URL). A URL specifies the protocol with which web browsers will locate Internet resources. The URL also includes the name of the server on which the resource resides. You can also include the path to a resource.

      For more information, see [Utility: Publish Build Artifacts](../../build-release/tasks/utility/publish-build-artifacts.md).| +|Build Flavor|Build Flavor|(Published test results only) A name that designates the category of builds that are assigned to a set of completed builds that were published as part of a test run. For example, a build flavor can be used to designate a beta release or a final release.| +|Build Platform|Build Platform|The name of the machine platform for which an end-to-end (not desktop) build was made (for example, **x86** or **Any CPU**). | + + T +### Test case, test configuration, test plan, and test suite dimensions + +The Test Case, Test Configuration, Test Plan, and Test Suite dimensions correspond to how you can organize, configure, automate, and run tests by using Microsoft Test Manager. + + The test case corresponds to a type of work item that the test team uses to define both manual and automated tests that your team can run and manage by using Microsoft Test Manager. A test plan consists of test configurations and test suites. A test configuration defines the software or hardware on which you want to run your tests. A test suite defines a hierarchy within the plan so that you can group test cases together. + + For more information, see [Testing overview](../../manual-test/index.md). + +|Dimension|Attribute|Description| +|---------------|---------------|-----------------| +|Test Case|Area Hierarchy and more|The Work Item and Test Case dimensions contain all attributes that relate to work items, such as State, Work Item Type, and Work Item ID. For information about the structure of the Test Case dimension, see [Test cases and work items](perspective-test-analyze-report-work.md).

      For a description of each attribute, see [Work item field index](../../work/guidance/work-item-field.md).

      For information about how to work with date, area, and iteration hierarchies, see [Shared dimensions](shared-dimensions-in-the-analysis-services-cube.md).

      This measure group contains additional attributes when custom fields in the definition for a type of work item specify `Dimension` as the reportable attribute. For more information about how to use the optional `reportable` attribute and its values, see [Add or modify work item fields to support reporting](../../work/reference/add-or-modify-work-item-fields-to-support-reporting.md).| +|Test Configuration|Configuration ID and Configuration Name|The number that the system assigns and the name of a test configuration.| +|Test Plan|Area Hierarchy, Area Path, Iteration Hierarchy, and Iteration Path|The product area and milestone that is assigned to the test plan.

      For more information, see [Test cases and work items](perspective-test-analyze-report-work.md).| +||End Date Hierarchy By Month or By Week

      Start Date Hierarchy By Month or By Week|Optional values that a test plan owner can assign to the test plan. They represent the date on which the test plan should start and the date on which the test plan should finish.

      For more information about how to work with date hierarchies, see [Shared dimensions](shared-dimensions-in-the-analysis-services-cube.md).| +||Test Plan Id and Test Plan Name|The number that the system assigns and the name that the test plan owner assigns.| +||Test Plan Owner|The user name of the test team member who created or currently is assigned as the owner of the test plan.| +||Test Plan ID and State|The system-assigned number and name of the state of the test plan. For example, **Inactive** indicates that the test plan is being defined, and **Active** indicates that the test plan is ready to be reviewed and run.| +|Test Suite|Test Suite Hierarchy|Provides a mechanism to specify multiple filters based on project collection, team project, and test suite.| +||Suite Path|Corresponds to the hierarchy of test suites that are configured for all team projects in all team project collections.| + + +### Test result dimension + The following table lists all dimensions and attributes that are specific to the test measures in the cube. Before you can report on **Failure Type** or **Resolution**, the test team must populate this information as part of their test activities. + +|Attribute|Description| +|---------------|-----------------| +|Failure Type and Failure Type Id|Corresponds to one of the following reasons why a test failed: **None**, **Known Issue**, **New Issue**, or **Regression**.

      Microsoft Test Manager automatically assigns a number or an ID to each reason. The test team can, but is not required to, assign a failure type to each failed test. **Note:** You cannot add to or change the set of failure types.

      For an example of a trend report that shows the outcome of test results based on failure type, see [Failure Analysis](../excel/failure-analysis-excel-report.md).| +|Outcome and Outcome Id|The outcome of the test (for example, **Passed**, **Failed**, or **Inconclusive**).

      For an example of a trend report that shows the outcome of test plans and test configurations, see [Test Plan Progress](test-plan-progress-report.md).| +|Readiness State and Readiness State Id|The state of a particular test within a test run. Valid values are **Completed**, **InProgress**, **None**, **NotReady**, and **Ready**.| +|Resolution State|(Optional) The name of the **Resolution** with which a tester identified the cause of a failed test. By default, all MSF process templates have the following resolution states: **Needs investigation**, **Test issue**, **Product issue**, and **Configuration issue**. The test team can, but is not required to, assign a resolution state to each failed test. **Note:** You can change these states or add states using the `tcm` command line tool. See [tcm: Customize and manage the test experience](../../work/reference/witadmin/tcm-customize-manage-test-experience.md).| +|Test Result Executed By|The name of the user or other account under which the test was run.

      For an example of a report that uses this attribute, see [Test Team Productivity](../excel/test-team-productivity-excel-report.md).| +|Test Result Owner|The name of the user or other account that is assigned as the owner of the test result. The assignment corresponds to the value that is set by using the `tcm /resultowner` switch.| +|Test Result Priority|The priority of a particular test within a test run.| + + +### Test run dimension + +The following table describes the attributes that are defined for the Test Run dimension. Many of these attributes correspond to parameters that the test team specifies when it runs tests. + +|Attribute|Description| +|---------------|-----------------| +|Complete Date, Creation Date, Start Date Hierarchy By Month or By Week|Dates when the test run was created, completed, or started. You can use these attributes to filter or structure a report. For more information, see [Shared dimensions](shared-dimensions-in-the-analysis-services-cube.md).| +|Is Automated|Flag that indicates that the test run contains one or more automated tests.

      For an example of a report that uses this attribute, see [Build Quality](../excel/build-quality-excel-report.md).| +|Is Build Verification Run|Flag that indicates whether the test run contains build verification tests that check the basic functionality of the build. This flag corresponds to the `tcm /buildverification` switch.

      For an example of a report that uses this attribute, see [Build Quality](../excel/build-quality-excel-report.md).| +|Test Run Id|The number that the system assigned to the test run.| +|Test Run Owner|Corresponds to the owner who is assigned to the test run that the test team created or published. Corresponds to the `tcm /owner` switch.| +|Test Run State and Id|Name or number that is assigned to the state of a test run (for example, **Aborted**, **Completed**, **In Progress**, **Not Started**, or **Unknown**).| +|Test Run Title|Corresponds to the title that is assigned to the test run that the test team created or published. Corresponds to the `tcm /title` switch.| + + +### Work item and work item linked dimensions +You can link test cases to other work items such as user stories, requirements, and bugs. By using the Work Item Linked dimension, you can create a report that provides test results that relate to the linked work items. The progress report for testing user stories, described earlier in this topic, provides an example of using the linked work item. + + For a description of each attribute, see [Index of work item fields](../../work/guidance/work-item-field.md). + +## Required activities +To create reports that contain useful data about test efforts and test results, team members should review the information in the following topics: + +- [Get started with continuous testing](../../build-release/test/getting-started-with-continuous-testing.md) +- [Using Code Coverage to Determine How Much Code is being Tested](https://msdn.microsoft.com/library/dd537628.aspx) + +## Related notes +- [Test Management Reports](../excel/test-management-reports.md) +- [Test Plan Progress](test-plan-progress-report.md) +- [Perspectives and measure groups provided in the Analysis Services cube](perspective-measure-groups-cube.md) diff --git a/docs/report/sql-reports/perspective-test-analyze-report-work.md b/docs/report/sql-reports/perspective-test-analyze-report-work.md new file mode 100644 index 00000000000..a292b0b2d5f --- /dev/null +++ b/docs/report/sql-reports/perspective-test-analyze-report-work.md @@ -0,0 +1,304 @@ +--- +title: Analyze work items and test case data | TFS +description: Analyze current or historical data for work items and test cases by using Work Item perspective +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: c6d0d2da-d63f-4e9c-b92e-50c4605a72ef +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + + +# Analyze and report on work items and test case data using the Work Item perspective + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can analyze current or historical data for work items and test cases by using the measures, dimensions, and attributes that are defined for the Work Item perspective in the SQL Server Analysis Services cube for Visual Studio Team Foundation Server. A test case is a type of work item that is associated within its own dimension and used specifically to support Microsoft Test Manager. For more information, see [Create your tests](../../manual-test/getting-started/create-test-cases.md). + + The Work Item perspective is based on the relational tables that enable reporting on work items as either a property of the work item or a linked work item. For more information, see [Work Item History tables](work-item-history-tables.md). + +> [!NOTE] +> You can use **Create Report in Microsoft Excel** to create status and trend reports based on a work item query. For more information, see [Create Excel reports from a work item query](../excel/create-status-and-trend-excel-reports.md). + + +![Work Item Measure Group](_img/rpt_wit_mg.png "RPT_WIT_MG") + +By using the Work Item perspective, you can create reports that answer the following questions: +- What was the total count of active bugs each day in the last iteration? +- How many scenarios were active each month during the last year? +- How many bugs of each priority have been active each day in the last month? +- How much outstanding and remaining work has a set of work items had over the last month? +- How much work did a particular group of developers finish? +- How much additional work was created after a particular date? + +> [!NOTE] +> If your data warehouse is using SQL Server Enterprise Edition, the list of cubes will include Team System and a set of perspectives. The perspectives provide a focused view of the data so that you do not have to scroll through all of the dimensions and measure groups in the whole Team System cube. + + +## Example: Bug Reactivations Report + +By using PivotChart reports in Excel, you can display the number of bugs that were closed and then reactivated over time, similar to the data in the following illustration. + + ![Bug Reactivations Excel Report](_img/procguid_agileexr.png "ProcGuid_AgileExR") + + The process templates for [Agile](../../work/guidance/agile-process.md) and [CMMI](../../work/guidance/cmmi-process.md) include the Bug Reactivations report in Excel. For more information, see [Bug Reactivations](../excel/bug-reactivations-excel-report.md). + +### Select and filter pivot fields + ![Pivot Fields for Bug Reactivations Report](_img/alm_rpt_pivot_bugreactivations.png "ALM_RPT_Pivot_BugReactivations") + + You can create a bug reactivations report by performing the following steps: + +1. In Excel, connect to the Analysis Services cube for Team Foundation Server, and insert a PivotChart report. + + For more information, see [Create Excel reports from a work item query](../excel/create-status-and-trend-excel-reports.md). + +2. Open the shortcut menu for the chart, choose **Change Chart Type**, choose **Area**, and then choose **Stacked Area**. + +3. For each report filter, open the shortcut menu for each of the following fields, specify the hierarchies, weeks, or other elements of interest, and then drag the field to the **Report Filter** area. + + - **Team Project Hierarchy** from the **Team Project** dimension. + + - **Work Item.Iteration Hierarchy** from the **Work Item** dimension. + + - **Work Item.Area Hierarchy** from the **Work Item** dimension. + + - **Work Item.Work Item Type** from the **Work Item** dimension. Select the **Bug** check box as the only type to display. + + - **Year Week Date** from the **Date** dimension. + +4. In the **Date** dimension, expand **More fields**, and drag the **Date**, **Week**, or **Month** fields to the **Axis Fields (Categories)** area to specify how granular a report you want to generate. + +5. Drag **Work Item Count** from the **Work Item** measure group to the **Values** area. + +6. Drag **State** from the **Work Item** dimension to the **Column Labels** area, and then select the **Active** and **Resolved** check boxes. + +7. In the **Work Item** dimension, expand **More Fields**, drag **Previous State** to the **Column Labels** area, and then select the **Active** and **Resolved** check boxes. + +8. In the PivotTable report, collapse the **Active** column to show only a single column, and then rename the cell as **Reactivated and Still Active**. + +9. In the PivotTable report, collapse the **Resolved** column to show only a single column. + +10. (Optional) Right-click any filter that appears on the chart, and then choose **Hide All Field Buttons on Chart**. + + +## Work item measures + The following table describes the measures that you can use to filter or report on the status or progress of work. With the Work Item Count measure, you can report on the total number of work items in a particular state at a particular point in time. To report activity that occurred on a particular day, you can use the State Change Count or Revision Count measures. The Work Item measure group contains additional measures when custom fields in the definitions of work item types specify `Measure` as the reportable attribute. For more information about how to use the `reportable` attribute, which is optional, and its values, see [Add or modify work item fields to support reporting](../../work/reference/add-or-modify-work-item-fields-to-support-reporting.md). + +> [!NOTE] +> The Agile and CMMI process templates include calculated measures that are associated with the scheduling work fields. When a measure in the cube is based on a field in a process template, the label for the measure is based on the reference name of the originating field. However, a localized translation appears for the measure labels when you browse the cube with Excel or other reporting tools. + +|**Measure**|**Description**| +|-----------------|---------------------| +|Business Value|A subjective unit of measure that captures the relative business value of a product backlog item. The reference name of this measure is Microsoft.VSTS.Common.BusinessValue.| +|Completed Work|The number of hours of work that were completed for work items that meet the criteria in the query or report. The reference name of this measure is Microsoft.VSTS.Scheduling.CompletedWork.| +|Effort|The aggregate of the units of effort for product backlog items that meet the criteria in the query or report. Effort is a subjective unit of measure that captures the level of effort to implement a product backlog item. A larger number indicates more work. This field is defined only in the Visual Studio Scrum process templates. The reference name of this measure is Microsoft.VSTS.SchedulingEffort.| +|Original Work|The number of hours of work from the baseline plan for work items that meet the criteria in the query or report. The reference name of this measure is Microsoft.VSTS.Scheduling.OriginalWork.| +|Remaining Work|The number of hours that are recorded as estimates of the work remaining to complete work items that meet the criteria in the query or report. The reference name of this measure is Microsoft.VSTS.Scheduling.RemainingWork.| +|Revision Count|The number of times that work items have been revised. You can use this measure to view detailed history about a set of work items or a particular work item. For example, you can use this measure to display the number of times that each member of the team has modified a work item during a span of time that you specify. To display this information, you create a query in which you slice the Revision Count measure by the Changed By dimension and also filter the measure by a date range.| +|State Change Count|The number of times that the team changed the states of a filtered set of work items. You can use this measure to count bug activations in a particular product area during a span of time that you specify. Note that this measure returns the number of state transition events but not the number of work items in state transition. For example, this measure would return the resolved rate of 2 if the team resolved, reactivated, and then re-resolved the same bug.| +|Size|A subjective unit of measure that captures the size of a requirement. This field is defined only in the MSF process templates for CMMI. The reference name of this measure is Microsoft.VSTS.Scheduling.Size.| +|Story Points|A subjective unit of measure that captures the size of a user story. If you assign more points to a user story, you indicate that it requires more work to implement. This field is defined only in the MSF process templates for Agile software development. The reference name of this measure is Microsoft.VSTS.Scheduling.StoryPoints.| +|Work Item Count|The count of work items that is based on the dimensions or filters that you specify. If your filter includes a date dimension, the measure returns historical information. Otherwise, the measure returns current information.| + +### Hidden measures + To build the calculations that provide point-in-time totals, several hidden measures are used. These measures are not exposed to client tools such as Microsoft Excel, Report Builder, or Report Designer, but the measures are present in definitions in the deployed cube. Hidden measures perform a calculation by using the Multidimensional Expressions (MDX) LastChild function, which aggregates the total for the measure as of a particular date. + +|**Measure**|**Description**| +|-----------------|---------------------| +|LastChild Record Count|A hidden measure that is used to calculate the Work Item Count measure.| +|LastChild Microsoft_VSTS_Scheduling_RemainingWork|A hidden measure that is used to calculate the Remaining Work measure.| +|LastChild Microsoft_VSTS_Scheduling_CompletedWork|A hidden measure that is used to calculate the Completed Work measure.| +|LastChild Microsoft_VSTS_Scheduling_BaselineWork|A hidden measure that is used to calculate the Baseline Work measure.| + + +## Date and numeric filters + +You can use **Date Filters** and **Numeric Filters** to filter a report based on one or more values in this set. These filters appear under the measure group that is labeled **Values**. You can use the selections within each group to filter the set of work items. You should not add them to the PivotTable report directly. Instead, you filter the rows or columns within the PivotTable report by performing the following steps: + +1. Choose the filter icon for either **Row Labels** or **Column Labels** within the PivotTable report, point to **Value Filters**, and then specify the criteria that you want (for example, **Greater Than**). + +2. In the first field, choose the date or numeric filter that you want (for example, **Created Date**). + +3. In the third field, type the value that meets your filter criteria, and then choose **OK**. + + For example, to display all work items that were created after June 1, 2010, type **6/1/2010**. + + The following table describes the date filters that you can use to refine the set of work items that a report returns. You can even combine filters. + + +|**Field name**|**Description**| +|-|-| +|Activated Date|The date and time when the work item was activated or reactivated. This filter corresponds to the Microsoft.VSTS.Common.ActivatedDate field.| +|Closed Date|The date and time when a work item was closed. This filter corresponds to the Microsoft.VSTS.Common.ClosedDate field.| +|Created Date|The date and time when a work item was created. This filter corresponds to the Microsoft.VSTS.Common.CreatedDate field.| +|Due Date|The date and time by which the team forecasted that a task or an issue will be completed. This field applies only to task and issue work items. This filter corresponds to the Microsoft.VSTS.Scheduling.DueDate field.| +|Finish Date|The date and time when the schedule indicates that the task will be completed. This filter corresponds to the Microsoft.VSTS.Scheduling.FinishDate field.| +|Resolved Date|The date and time when a bug or other type of work item was resolved. This filter corresponds to the Microsoft.VSTS.Common.ResolvedDate field.| +|Start Date|The date and time when the schedule indicates that the task will start. This filter corresponds to the Microsoft.VSTS.Scheduling.StartDate field.| + + The following table describes the numeric filters that you can use to distill the set of work items that appear in a report. + +|Measure|Description| +|-------------|-----------------| +|ID|The unique ID of each work item. Work item IDs are unique across all team projects in a team project collection. In the data warehouse, you should expect duplicate IDs to exist across collections. This filter corresponds to the System.Id field.| +|Priority|A subjective rating of the bug, issue, task, or test case as it relates to the business, usually between the values of 1 and 3. This filter corresponds to the Microsoft.VSTS.Common.Priority field.| +|Rev|A number that is assigned to a revision of a work item. This filter corresponds to the System.Rev field.| +|Stack Rank|A subjective rating of the user story, task, issue, or bug compared to other work items of the same type. An item that is assigned a lower number should be fixed before an item that is assigned a higher number. This filter corresponds to the Microsoft.VSTS.Common.StackRank field.| + +## Dimensions, Attributes, Filters, and Categories in the Work Item Perspective + You can combine attributes across several dimensions to filter the set of work items that appear in a report or to highlight specific details about a group of work items. These attributes correspond to all the fields for any type of work item that have the reportable attribute set to `Dimension`. You can filter based on field attributes by work item, test case, linked work item, or linked test case. You can also filter the set of work items based on the type or types of links between them. + + When you choose **Work Item** in the **Show fields related to** combo box in Excel, you have access not only to the Test Case, Work Item, and Work Item Category dimensions but also the Date and Team Project shared dimensions. Choose **Work Item** when you want to analyze work items or test cases and filter by date, project collection, project, or work item category. For information about the Date and Team Project dimensions, see [Shared dimensions](shared-dimensions-in-the-analysis-services-cube.md). + +> [!TIP] +> Always start your filter process by specifying the criteria for the set of project collections and the team project on which you want to report. + + To create reports about the status of current work items, you choose **Current Work Item** in the combo box. This combination of dimensions does not contain the Date dimension. To analyze the historical data of work items in a trend report, choose **Work Item** in the combo box. + + +### Filter by Work Item Fields Under the Work Item Dimension + + The Work Item and Test Case dimensions contain all attributes that are specific to work items, such as State, Work Item Type, and Work Item ID. Additionally, work item fields in process templates that have the reportable attribute set to "`Dimension`" are reflected as attributes in the Work Item dimension. + + Attributes appear under display folders in the Test Case and Work Item dimensions. Dimension attributes are organized into folders that are based on the reporting reference name that is assigned in the definition of each type of work item. The following types of mapping occur: + +- Intrinsic fields, which have the "System" prefix, appear directly under the Test Case or Work Item dimension. + +- Other fields appear under folders whose names correspond to the prefixes in the reference names of the fields. For example, fields that have the "Microsoft.VSTS.Common" prefix appear under the folder that is labeled "Microsoft.VSTS.Common." + + For example, work item fields appear under the Work Item dimension, as the following illustration shows. The Linked Work Item and Test Case dimensions have similar structures. + + + + + + + + +
      +For information about each field, see [Work item field index](../../work/guidance/work-item-field.md). Only fields that have `reportable="Dimension"` appear under the associated dimensions. Additional attributes appear when custom fields in the definitions of types of work items specify `Dimension` as the reportable attribute. For more information about how to use the `reportable` attribute, which is optional, and its values, see [Add or modify work item fields to support reporting](../../work/reference/add-or-modify-work-item-fields-to-support-reporting.md).

      For information about how to work with date hierarchies, see [Shared dimensions](shared-dimensions-in-the-analysis-services-cube.md). +
      +![Folder structure in OLAP data cube](_img/rpt_workitem_folders.png "RPT_WorkItem_Folders") +
      + + The following table describes the attributes that are not associated with a specific work item field and the hierarchical attributes that the Work Item dimension provides. + +|Attribute|Description| +|---------------|-----------------| +|Area|Contains a 14-level hierarchy, as the following illustration shows, which correlates the measures in the cube according to the area classifications with which they are associated. You can use this parent-child hierarchy to summarize or filter measures according to their level within the area hierarchy.

      ![Area Hierarchy Dimension](_img/alm_rpt_area_hierarchy.png "ALM_RPT_Area_Hierarchy")

      For more information, see [Create and Modify Areas and Iterations](../../work/customize/set-area-paths.md).| +|Area Path|Flat list of the area paths for all team projects.| +|Changed Date|Flat list of dates that you can use to filter the set of work items based on the dates on which the team modified the items.| +|Changed Date Hierarchy by Month|Hierarchical tree that supports filtering and reporting on the set of work items based on the months in which the team modified the items. For example, you can use the Changed Date Hierarchy by Month or by Week, as the following illustration shows, to filter or create a trend report based on the changed date. For more information about how to work with date hierarchies, see [Shared dimensions](shared-dimensions-in-the-analysis-services-cube.md).

      ![Changed Date Hierarchy](_img/alm_rpt_changeddate_hierarchy.png "ALM_RPT_ChangedDate_Hierarchy")| +|Changed Date Hierarchy by Week|Hierarchical tree that supports filtering and reporting on the set of work items based on the week in which the team modified the items.| +|Created Date|Flat list of dates that you can use to filter the set of work items based on the date on which the team created the items.| +|Created Date Hierarchy by Month|Hierarchical tree that supports filtering and reporting on the set of work items based on the month in which the team created the items.| +|Created Date Hierarchy by Week|Hierarchical tree that supports filtering and reporting on the set of work items based on the week in which the team created the items.| +|Iteration|As the following illustration shows, contains a 14-level hierarchy that correlates the measures in the cube according to the iteration classifications with which they are associated. You can use this parent-child hierarchy to summarize or filter measures according to their levels within the iteration hierarchy.

      ![Iteration Hierarchy Dimension](_img/alm_rpt_iteration_hierarchy.png "ALM_RPT_Iteration_Hierarchy")

      For more information, see [Create and Modify Areas and Iterations](../../work/customize/set-area-paths.md).| +|Iteration Path|Flat list of the set of iteration paths that are defined for all team projects.| +|Previous State|The only field under **More fields** is **Previous State**, which you can use to filter a report based on the State to which a work item was assigned before it was assigned to its current state. State is an attribute of the workflow for a type of work item. For more information, see [Change the workflow](../../work/reference/change-workflow-wit.md).| + + +### Filter by Link Type or Fields That Are Defined for a Linked Work Item + When you choose the **Linked Current Work Item** entry in the **Show fields related to** combo box, you gain access to the Work Item, Work Item Link Type, and Work Item Linked dimensions. Choose this entry when you want to filter the set of work items in a report based on the link type or values of fields in work items that are linked to other work items. + + +#### Filter Based on an Attribute of a Link Type + By specifying one or more of the attributes in the following table, you can filter work items that have at least one link relationship whose link type meets the criteria that you specify. For more information, see [LinkTypes](../../work/reference/link-type-element-reference.md) and [Manage link types](../../work/reference/witadmin/manage-link-types.md). + +> [!NOTE] +> You can use any of the attributes in the following table to filter the report, but you will find the Link Name and Link Reference Name attributes most useful. All Boolean attributes have a value of either `True` or `False`. + +|Attribute|Description| +|---------------|-----------------| +|Is Deleted|A Boolean value that specifies whether a link type is deleted.| +|Is Deny Delete|A Boolean value that specifies whether the link type can be deleted. For example, you can delete custom link types but not built-in link types.| +|Is Deny Edit|A Boolean value that specifies whether the link type can be modified. For example, you can modify custom link types but not built-in link types.| +|Is Directional|A Boolean value that specifies whether the link type is directional. Directional links are used to form dependent relationships and prohibit circular relationships.| +|Is Disabled|A Boolean value that specifies whether the link type has been disabled. You can use this attribute to find or filter work items that contain link relationships whose link type has been deactivated or disabled.| +|Is Non-Circular|A Boolean value that specifies whether the link type prohibits circular link relationships.| +|Is Single Target|A Boolean value that specifies whether the link type allows users to specify only one target for each link of this type. For example, a child work item can have only one parent, as defined by a Parent link type.| +|Is Tree|A Boolean value that specifies whether the link type is based on the Tree topology.| +|Link ID|The integer that the system assigns to built-in and custom link types.| +|Link Name|The friendly name of the link type. The friendly name corresponds to either the forward or reverse name that is assigned to that link type.| +|Reference Name|The name that is assigned to the link type. For example, System.LinkTypes.Related is the reference name of the Related link type.| +|Rules|The system assigns values to the rules that the link type uses. Do not use this attribute.| + +#### Filter Based on an Attribute of the Linked Work Item + The Work Item Linked dimension contains the same set of attributes as the Test Case and Work Item dimensions. You can use these attributes to find work items or filter measures based on attributes of work items that are linked to the work items that you are analyzing. By running this type of query, you can answer questions such as "How many active bugs are linked to priority 1 user stories?" + +> [!NOTE] +> You can use the Work Item Link Type and Work Item Linked dimensions to filter reports about current work items only. You cannot use those dimensions to analyze historical data. + + The Work Item Link Type and Work Item Linked dimensions are many-to-many dimensions that are linked to the Current Work Item fact table. Team members can link any work item to more than one other work item. + + If a dimension corresponds to the attributes of links between work items, the name of the dimension is prefixed with the phrase "Work Item Linked." For example, the "Assigned To" attribute corresponds to the "Work Item Linked.Assigned To" attribute and so on for all other work item fields in the OLAP cube. For more information, see [Filter by Work Item Fields Under the Work Item Dimension](#work_Item_field) earlier in this topic. + + +### Filter By Changesets +You choose the **Work Item Changeset** entry in the combo box to access the Version Control Changeset and Work Item dimensions. Choose this entry when you want to filter the set of work items by information in the changesets that are linked to the work items. When you make and check in changes to the code by using TFVC, you can associate the changeset with the work item that the changes address. A changeset lists the source files that you checked in for the changeset and a list of all work items that you linked to the changeset. For more information, see [Check in your work to the team's codebase](../../tfvc/check-your-work-team-codebase.md). + + The Version Control Changeset dimension is a parent-child dimension type and linked to the Current Work Item fact table through an intermediate, many-to-many fact table. Team members can link any work item to more than one changeset. The following table describes the attributes in the Version Control Changeset dimension. + +|Attribute|Description| +|---------------|-----------------| +|Changeset ID|The number that is assigned to the changeset.| +|Checked In By|The user name of the team member who checked in the changeset.| +|Description|The check-in comment that is associated with the changeset.| +|Policy Override Comment|The comment that is provided when a policy is overridden. If a policy was not overridden with a changeset, the field is null.| + + +### Filter By category + The **Work Item to Category** entry in the combo box contains the Work Item and Work Item Category dimensions. Choose this entry when you want to filter the set of work items by their associated categories. You use categories when your team projects contain types of work item that are similar but named differently. For more information, see [Use categories to group work item types](../../work/reference/use-categories-to-group-work-item-types.md). + + The following table describes the attributes in the Work Item Category dimension. + +|Attribute|Description| +|---------------|-----------------| +|Name|The friendly name that is assigned to the category of a work item.| +|Reference Name|The reference name that is assigned to the category of a work item.| + +### Filter By Hierarchical Relationships + The **Work Item to Tree** entry in the combo box contains the Work Item and Work Item Tree dimensions. Choose this entry when you want to filter by hierarchical nesting of work items that are linked by using the Parent and Child types of links or other custom-defined types of tree-topology links. + +> [!NOTE] +> You can use the Work Item Tree dimension to filter reports about current work items only. You cannot use this dimension to analyze historical data about work items. + + The Work Item Tree dimension is a parent-child dimension type and linked to the Current Work Item fact table through an intermediate, many-to-many fact table. Any work item can be linked to more than one work item and, therefore, can appear in multiple places in the tree. + + As the following illustration shows, The Work Item Tree Hierarchy contains eight hierarchical filters. The first hierarchy supports filtering work items at the top of the tree, Work Item Tree 1 supports filtering work items that are nested one level deep, and so on. + + ![Work Item Tree](_img/alm_rpt_workitemtree.png "ALM_RPT_WorkItemTree") + + The following table describes the attributes in the Work Item Tree dimension. You use link types that are based on the tree topology to create multi-level, hierarchical relationships among work items. In addition to supporting multi-level, hierarchical views, hierarchical link types support directionality and restrict circular relationships. For more information, see [LinkTypes](../../work/reference/link-type-element-reference.md). + +|Attribute|Description| +|---------------|-----------------| +|Work Item Tree Hierarchy|Work items that are linked through hierarchical link types.| +|Tree Type Name|The reference name of the hierarchical link type (for example System.LinkTypes.Hierarchy). You can filter the report based on a hierarchical type of link that is used within a team project collection. To filter the report based on the forward or reverse name of a type of link, use the Link Name attribute that the Work Item Link Type dimension provides.| + +### Filter By Test Result + The **Work Item with Result** entry in the combo box contains the Test Result, Version Control Changeset, Work Item, Work Item Category, and Work Item Tree dimensions. You can use the attributes in the Test Result dimension to filter reports based on the test results that are associated with test cases and their linked work items. + + You can use the Work Item Count measure not only to determine how many work items are linked to a test result but also to report on work items and their associated test results. For a description of each Test Result attribute, see [Test results](perspective-test-analyze-report-test-results.md). + +## Required Activities to Monitor and Track Work + To create reports that contain useful data about the status, progress, and trends about work items, team members must perform the following activities: + +- **Create work items**. Team members must create work items to manage the backlog of user stories or bugs, to track work by using tasks, and to manage test cases. Update the state of work items based on the process guidance for each type of work item. + + For more information, see [Agile work items and workflow](../../work/guidance/agile-process-workflow.md), [CMMI work items and workflow](../../work/guidance/cmmi-process-workflow.md), or [Scrum work items and workflow](../../work/guidance/scrum-process-workflow.md). + +- **Link work items to other work items or changesets**. To track relationships between work items, team members must create links between, for example, user stories and tasks. Team members can create other useful links such as those between user stories and test cases, bugs and test cases, and changesets and user stories, tasks, and bugs. Team members can show relatedness, dependency, or hierarchy by specifying the appropriate type of link. + + For more information, see [Manage dependencies, link work items](../../work/track/link-work-items-support-traceability.md). + +- **Specify area and iteration paths**. To monitor status or trends on product areas or milestones by filtering reports, team members must set the Area and Iteration fields for each work item. + +- **Assign work to owners and update the work item State**. As work progresses, team members must change the State of the work items that are assigned to them as the work items move from a new or proposed state, to active or in progress, to closed or done + +- **Update the work effort**. To monitor progress that a team has made in completing work for an iteration or other interval of time, team members must update the amount of completed and remaining work for the work items that are assigned to them. + +## Related notes +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) +- [Perspectives and measure groups in the Analysis Services cube](perspective-measure-groups-cube.md) diff --git a/docs/report/sql-reports/reactivations-report.md b/docs/report/sql-reports/reactivations-report.md new file mode 100644 index 00000000000..df5a1222096 --- /dev/null +++ b/docs/report/sql-reports/reactivations-report.md @@ -0,0 +1,113 @@ +--- +title: Reactivations Report | TFS +description: Determines how effectively the team is fixing bugs. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: de38d7e8-4bd4-4b43-be4f-a116ea424bee +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Reactivations Report +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +As the team resolves and closes bugs, you can use the Reactivations report to determine how effectively the team is fixing bugs. Reactivations generally refer to bugs that have been resolved or closed prematurely and then reopened. The reactivation rate is also referred to as the fault feedback ratio. + + You can use the Reactivations report to show either bugs or user stories that have been reactivated. As a product owner, you might want to discuss acceptable rates of reactivation with the team. A low rate of reactivations (for example, less than 5%) might be acceptable depending on your team's goals. However, a high or increasing rate of reactivations indicates that the team might need to diagnose and fix systemic issues. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + +**You can use this report to answer the following questions**:

      - How many bugs are being reactivated?
      - How many user stories are being reactivated?
      - Is the team resolving and closing reactivated bugs at an acceptable rate? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in SQL Server Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the Report + The Reactivations report shows an area graph of the number of bugs or stories that are in a resolved state or that have been reactivated from the closed state. The data is derived from the data warehouse. The graph depicts the number of items based on the time duration and filters that you specify, as the following illustration shows. + + ![Example Reactivations Report](_img/procguid_reportsbugsreactivations.png "ProcGuid_ReportsBugsReactivations") + + You can filter the Reactivations report in the following ways: + +- Change the start and end dates for the report. + +- Filter the bugs and stories that are counted in the report by specifying iteration and area paths, work item types, and previous state of the work items. + + For more information, see [Filtering the Report](#Changing) later in this topic. + +### Required Activities for Tracking User Stories and Bugs + For the Reactivations report to be useful and accurate, the team must perform the following activities: + +- Define user stories and bugs, and specify their **Iteration** and **Area** paths. + +- Update the **State** of stories and bugs as they progress from active to closed. + +## Setting the Duration of the Iteration + To understand the reactivation rate of your current iteration, the start and end dates for the report must match those of your current iteration cycle. + +#### To change the duration of the iteration + +1. Next to **Iteration Start (Date)** or **Iteration End (Date)**, click the calendar icon, and then click a date. + +2. Click **View Report**. + +## Interpreting the Report + You should expect the Reactivations report to vary based on where you are in your product development cycle. Early iterations should exhibit very few reactivations. As bugs and stories are closed, you will want to review the rate of reactivations. + + The Reactivations report displays information that you can use to detect whether the team is reactivating a high number of bugs or stories. The reactivation rate counts the number of supposedly fixed bugs whose fixes do not work. These reactivations can create a harmful cycle of rework that interferes with making progress on planned tasks. + +### Questions That the Report Answers + You can review the report to answer these questions: + +- How many bugs have been reactivated in the current iteration? + +- How many user stories have been reactivated in the current iteration? + +- Is the team resolving and closing reactivated bugs and stories at an acceptable rate? + +### Healthy Version of Report + A healthy version of the Reactivations report shows a steady progress in resolving and closing bugs as the following illustration shows. The total rate of work item reactivation is 5% or less, and it does not increase during the iteration. Small fluctuations might be acceptable, based on your team goals. The lower your reactivation rate, the more progress your team can make overall. + + ![Healthy version of a Reactivations report](_img/procguid_bugs_reactivationshealthy.png "ProcGuid_Bugs_ReactivationsHealthy") + +### Unhealthy Version of Report + The following illustration shows an unhealthy version of the Reactivations report. + + ![Unhealthy version of Reactivations report](_img/procguid_reactivationsunhealthy.png "ProcGuid_ReactivationsUnhealthy") + + The following table describes the indications of an unhealthy version of this report, in addition to providing some suggested questions to consider. + +|Indicator|Questions to ask| +|---------------|----------------------| +|**The team is reactivating a high number of bugs**. You should consider the reactivation rate as a percentage of the overall number of bugs that the team is finding.

      A high rate of bug reactivation might indicate that the team is closing bugs prematurely. It is a warning sign of project dysfunction. Reactivations introduce extra work into the product cycle, which often doubles the total effort that is required to complete the corresponding work.|- Is the team performing sufficient unit testing when it resolves bugs?
      - Do the bug descriptions support efficient bug resolution?
      - Are bugs being resolved even though the underlying problems have not been fixed?
      - Should some bugs be set to lower priority, effectively reducing the number of high priority bugs that the team is working on?
      - Is the test lab being managed effectively?| +|**The team is reactivating a high number of user stories**. You should consider the reactivation rate of user stories as a percentage of the overall number of user stories that the team is closing. A high rate of story reactivation might indicate that other issues warrant investigation.|- Is the test coverage adequate for user scenarios?| +|**The number of reactivations is growing**. When the number of reactivations grows, reactivated bugs or stories are not being fixed. You might want to reassess team priorities for fixing reactivated bugs or stories.|- Are priorities for the team set correctly?
      - Are other issues at the root of the reactivations?| + +## Filtering the Report + You can filter the Reactivations report in the following ways: + +- Change the start and end dates for the report. + +- Filter the bugs or stories that the report represents by specifying iteration and area paths, work item types, and the previous states for the work items. + + The following illustration shows the available filters: + + ![Filters for Reactivations Report](_img/procguide_bugsreactivationsfilters.png "ProcGuide_BugsReactivationsFilters") + +#### To filter the work items that appear in the report + +1. Perform one or more of the following actions: + + - In the **Iteration** and **Area** lists, select the check box of each iteration or product area to include. + + - In the **Work Item Type** and **Previous State** lists, select the check box of each work item type and state to include. + +2. Click **View Report**. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/release-burndown.md b/docs/report/sql-reports/release-burndown.md new file mode 100644 index 00000000000..286597bf0c7 --- /dev/null +++ b/docs/report/sql-reports/release-burndown.md @@ -0,0 +1,50 @@ +--- +title: Release Burndown | TFS +description: Shows how quickly your team has delivered backlog items and track how much work the team must still perform to complete a product release. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 9044206f-c993-451d-bcc8-6f3980c90b3e +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Release Burndown +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +By reviewing the release burndown report, you can understand how quickly your team has delivered backlog items and track how much work the team must still perform to complete a product release. + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + +## Data in the report + As the following illustration shows, a release burndown graph shows how much work remained at the start of each sprint in a release. The source of the raw data is your product backlog. Each sprint that has been assigned to the team project or team appears along the horizontal axis. The vertical axis indicates the sum of all effort of all active backlog items at the start of each sprint. As the team updates the state of backlog items to Done, the effort remaining decreases. The amount of estimated effort on the vertical axis is in whatever unit that your scrum team has decided to use (for example, story points, size, or hours). + + ![Release burndown chart](_img/scrum_releaseburndonw.png "Scrum_ReleaseBurndonw") + + You can filter the report by selecting the **Release Path** or **Area**. + +### Required activities for tracking release burndown + For the burndown graph to be useful and accurate, your team must perform the following activities for tracking work items: + +- Specify the number of releases you want to track and [define the start and end dates for each sprint](http://msdn.microsoft.com/en-us/f292f3bc-b472-4399-a7e4-49151d4c0484). + +- Define product backlog items and bugs, and assign each to a sprint or iteration. (**Iteration** field). Make sure that all backlog items are assigned to your team's area path or subarea. + +- At the start of a release, estimate the **Effort** for each product backlog item and each bug that your team will work on. + +- During the sprint or at the close of each sprint, for each product backlog item and each bug that the team completed, change the **State** to **Done**. + +## Interpreting the report + You can review the report to determine the progress that your team has made in a release and to answer the following questions: + +- How much work remains in the release? + +- How quickly is your team working through the product backlog? + +## Related notes + [Scrum process](../../work/guidance/scrum-process.md) +[Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) \ No newline at end of file diff --git a/docs/report/sql-reports/remaining-work-report.md b/docs/report/sql-reports/remaining-work-report.md new file mode 100644 index 00000000000..e63116eb2ee --- /dev/null +++ b/docs/report/sql-reports/remaining-work-report.md @@ -0,0 +1,155 @@ +--- +title: Remaining Work Report | TFS +description: Tracks the team's progress and identify any problems in the flow of work. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 61990591-ac5a-4cec-80f6-6627a723a910 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Remaining Work Report +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +After the team has estimated its tasks and begun work, you can use the Remaining Work report to track the team's progress and identify any problems in the flow of work. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + +**You can use this report to answer the following questions**:

      - What is the cumulative flow of work?
      - Is the team likely to finish the iteration on time?
      - Is the amount of work or number of work items in the iteration growing?
      - Does the team have too much work in progress?
      - How is the team doing in estimating work for the iteration? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the Report + The Remaining Work report summarizes the data that was captured during the specified time interval for each task, user story, or bug based on the filter criteria that were specified for the report. The data is derived from the data warehouse. + + You can view this report in either the **Hours of Work** view or the **Number of Work Items** view. The first view displays the total number of hours of work for the specified time period and the team's progress toward completing that work. The second view displays the number of work items for the specified time period and the number of work items in each state. Each view provides an area graph that charts the progress of completed work against the total estimated work for the specified time duration. + + You can filter the report in the following ways: + +- Change the start and end dates for the report. + +- Filter the tasks, stories, and bugs that are counted in the report by specifying iteration and area paths, types of work items, and states. + + For more information, see [Filtering the Report and Changing the Display](#Changing) later in this topic. + +### Hours of Work + The following illustration shows an example of the Remaining Work report in the **Hours of Work** view. This example is healthy in that a steady rate of work is being completed. However, the team significantly underestimated the amount of work that was required to complete the iteration, as shown by the hours remaining at the start and the hours completed at the end. + + ![Example of Remaining Work report](_img/procguide_reportsremainingwork.png "ProcGuide_ReportsRemainingWork") + +### Number of Work Items + The following illustration shows the same report as in the previous illustration but in the **Number of Work Items** view, with the work items grouped by state. Although the team made good progress resolving and closing work items, the estimate of work items increased from the start of the iteration to almost three times more by the end of the iteration. + + ![Example of number of work items report](_img/procguid_numberofwi_remainingwork.png "ProcGuid_NumberOfWi_RemainingWork") + + The following table summarizes the data that the report shows, subject to which filters and display option you specify. + +|Hours|Number of Work Items| +|-----------|--------------------------| +|- **Hours Remaining**: The cumulative value of all remaining hours for all tasks.
      - **Hours Completed**: The cumulative value of all completed hours for all tasks.|- **Active**: The cumulative value of all stories, tasks, and bugs that are in the **Active** (blue) state.
      - **Resolved**: The cumulative value of all stories or bugs and that are in the **Resolved** (gold) state.
      - **Closed**: The cumulative value of all stories, tasks, and bugs in the **Closed** (green) state.| + +### Required Activities for Tracking Work Items + For the Remaining Work report to be useful and accurate, the team must perform the following activities to track work items: + +- Define tasks, stories, and bugs, and specify the **Iteration** and **Area** paths for each work item. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +- Specify and update the **HoursCompleted** and **HoursRemaining** fields for each task or subtask as the team makes progress on each work item. + + > [!IMPORTANT] + > If you subdivide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and user story. For more information, see [Address inaccuracies published for summary values](../../report/address-inaccuracies-published-for-summary-values.md). + +- Update the **State** of each task, story, and bug as it progresses from active to closed. + +## Setting the Duration of the Iteration + To understand the progress made for your current iteration, the start and end dates for the report must match those of your current iteration cycle. + +#### To change the duration of the iteration + +1. Next to **Iteration Start (Date)** or **Iteration End (Date)**, click the calendar icon, and then click a date. + +2. Click **View Report**. + +## Interpreting the Report + The Remaining Work report displays information that you can use to understand how well the team is progressing and whether the team will finish the tasks within the allocated time. + +### Questions That the Report Answers + You can review the report to determine the progress within an iteration or over time. Specifically, you can find answers to these questions: + +- How fast is the team burning down remaining work? + +- Is work being added during the iteration? Is the team expanding the scope of the work? + +- How much progress can the team make in the available time? + +- Approximately when can the team finish the work? + +- Is too much work in progress? + +- Is the flow of work being impeded or blocked? + +- When will the team finish the current iteration? + +### Healthy Version of Report + A healthy Remaining Work report shows steady progress in resolving and closing tasks, as the following illustration shows. The rectangular shape of the diagram indicates that the estimated work closely matched the required work. + + ![Healthy version of Remaining Work report](_img/procguid_healthywork.png "ProcGuid_HealthyWork") + +### Unhealthy Version of Report + The following illustration shows an unhealthy version of the Remaining Work report. Little progress is made for several weeks at a time, as indicated by the flat line of work items remaining in an unchanged state. Also, the number of work items increases past the midpoint of the iteration, which indicates that more features have been introduced. + + ![Unhealthy version of Remaining Work report](_img/procguid_unhealthywork.png "ProcGuid_UnhealthyWork") + + An unhealthy Remaining Work report might show one or more of the following indicators: + +- **Number of hours completed or number of work items resolved or closed remains flat**. + + This situation indicates that one or more issues might be blocking progress or that the team has not resolved and closed work items that it has completed, fixed, and verified. + +- **Number of remaining hours or active work items increases**. + + This situation indicates that either the team did not accurately estimate the work at the start of the iteration or that the team added features after the iteration started. When required effort is larger than estimated effort, team members might be underestimating the difficulty, time, or other factors. This area is worth inquiring about to determine root causes. For example, you might want to determine how granular the tasks are. + +## Filtering the Report and Changing the Display + You can filter the Remaining Work report or change its display in the following ways: + +- Change the start and end dates for the report. + +- Filter the user stories, bugs, and tasks that appear in the report by specifying iteration and area paths, types of work items, and work item states. + +- Switch the view in which the report appears. + + The following illustration shows the available filters and display options: + + ![Filters for Remaining Work report](_img/procguid_remainingwork.png "ProcGuid_RemainingWork") + +#### To filter the tasks, user stories, and bugs that appear in the report + +1. Perform one or more of the following actions: + + - In the **Iteration** or **Area** list, select the check box of each iteration or product area to include. + + - In the **Work Item Type** or **State** list, select the check box of each work item type or state to include. + +2. Click **View Report**. + +#### To switch between displaying the number of work hours and number of work items + +1. In the **Measurement** list, click **Hours of Work** or **Number of Work Items**. + + - The **Hours of Work** view displays the cumulative value of work hours for all tasks based on the filters that you applied to the report. + + - The **Number of Work Items** view displays the cumulative states of all work items based on the filters that you applied to the report. + +2. Click **View Report**. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/reporting-services-reports.md b/docs/report/sql-reports/reporting-services-reports.md new file mode 100644 index 00000000000..e559c012bb4 --- /dev/null +++ b/docs/report/sql-reports/reporting-services-reports.md @@ -0,0 +1,216 @@ +--- +title: Reporting Services Reports | TFS +description: Answer questions about the actual state of the project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: c784953f-5faf-43eb-a4a9-080afd9270de +ms.manager: douge +ms.author: kaelli +ms.date: 03/28/17 +ms.topic: get-started-article +--- +# Reporting Services Reports +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can analyze the progress and quality of your project by using the reports in SQL Server Reporting Services. These reports aggregate metrics from work items, version control, test results, and builds. These reports answer questions about the actual state of your project. + + Most of these reports provide filters that you can use to specify contents to include in the report. Filters include time period, iteration and area paths, work item types, and work item states. The questions that they answer relate to all types of work items such as user stories, test cases, tasks, and bugs. + + **Requirements** + +- Your TFS on-premises deployment must be provisioned with SQL Server Reporting Services. These reports are not available if your Team Explorer home page does not contain a link to **Reports**. + + Also, your team project must be provisioned with reports. + + If you need to provision your deployment with Reporting Services or add reports to an existing team project, see [Add reports to a team project](../admin/add-reports-to-a-team-project.md). + +- To view these reports, you must be assigned or belong to a group that has been assigned the **Browser** or **Team Foundation Content Manager** role in Reporting Services. For more information, see [Grant permissions to view or create reports](../admin/grant-permissions-to-reports.md). + + +##Monitor code quality +Build reports track the quality of software under development. By defining tests to run automatically as part of each build definition and instrumenting tests to gather code coverage data, you can gain insight about the quality of the builds, tests, and code. + + + + + + +
      +Build and test activities +
        +
      1. [Configure a build system](../../build-release/concepts/agents/agents.md)
      2. +
      3. [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md)
      4. +
      5. [Run tests in your build process](../../build-release/test/getting-started-with-continuous-testing.md)
      6. +
      7. (Optional) [Rate completed builds](https://msdn.microsoft.com/library/ms181734.aspx) to populate the Build Quality dimension.
      8. +
      +
      +Build reports +
        +
      • [Build Quality Indicators](build-quality-indicators-report.md) (Agile and CMMI only)
      • +
      • [Build Success Over Time](build-success-over-time-report.md) (pictured)
      • +
      • [Build Summary](build-summary-report.md)
      • +
      +
      + + +**Sample build success over time report** + +![Sample build summary report](../admin/_img/IC665009.png) + +##Monitor progress +Project management reports provide insight into how much work the team is tackling within a sprint or release, and the rate of their progress. By linking work items and updating specific fields as work is performed, you can track the progress of individual stories and be able to more accurately estimate future activities. + + + + + + +
      +Work item tracking activities +
        +
      1. [Create the backlog](../../work/backlogs/create-your-backlog.md). +
          +
        • Create product backlog items and specify the Effort (Scrum).
        • +
        • Create user stories and specify the Story Points (Agile).
        • +
        • Create requirements and specify the Size (CMMI).
        • +
        +
      2. +
      3. [Work in sprints](../../work/scrum/sprint-planning.md). Assign backlog items to sprints, create tasks and link them to parent backlog items, and assign to a team member.
      4. +
      5. + [Update Remaining Work for tasks](../../work/scrum/task-board.md). For Agile and CMMI team projects, update Completed Work as well. +
        + Tip +
        + The only report that references Original Estimate is [Status on All Iterations](status-on-all-iterations-report.md). +
      6. +
      7. Create test cases and bugs, link them to their parent backlog item, and update their State.
      8. +
      9. (Optional) Assign work items to areas to filter reports.
      10. +
      +
      + Project management (Scrum) reports +
        +
      • [Backlog Overview (Scrum)](backlog-overview-scrum.md)
      • +
      • [Release Burndown](release-burndown.md)
      • +
      • [Sprint Burndown (Scrum)](sprint-burndown-scrum.md)
      • +
      + Project management (Agile and CMMI) reports +
        +
      • [Burndown and Burn Rate](burndown-and-burn-rate-report.md)
      • +
      • [Remaining Work](remaining-work-report.md)
      • +
      • [Requirements Overview (CMMI)](requirements-overview-report-cmmi.md)
      • +
      • [Requirements Progress (CMMI)](requirements-progress-report-cmmi.md)
      • +
      • [Status on All Iterations](status-on-all-iterations-report.md)
      • +
      • [Stories Overview (Agile)](stories-overview-report-agile.md)
      • +
      • [Stories Progress (Agile)](stories-progress-report-agile.md)
      • +
      • [Unplanned Work](unplanned-work.md)
      • +
      +
      + +**Sample stories overview report** +![Sample stories overview report](../admin/_img/IC665011.png) + + +##Monitor test plans and bug tracking +Test planning reports support monitoring the test progress and coverage of backlog items or user stories. Bug tracking reports illustrate the team's capacity to find and resolve bugs. + + + + + + +
      +Test planning and bug tracking activities +
        +
      1. Define test plans and test cases, and update their State as work progresses.
      2. +
      3. [Mark the results of each validation step in manual tests](../../manual-test/getting-started/run-manual-tests.md) as either passed or failed.
      4. +
      5. Create bugs, specify the Priority and Severity, assign to a team member, and update the State.
      6. +
      7. (Optional) Assign test cases and bugs to areas and iterations to filter reports.
      8. +
      +
      +Bug and test reports +
        +
      • [Bug Status](bug-status-report.md)
      • +
      • [Bug Trends](bug-trends-report.md)
      • +
      • [Reactivations](reactivations-report.md)
      • +
      • [Test Case Readiness](test-case-readiness-report.md)
      • +
      • [Test Plan Progress](test-plan-progress-report.md)
      • +
      +
      + +**Sample test plan progress report** +![Sample test plan progress report](../admin/_img/IC665012.png) + + +## Open a report + You can open a report from Team Explorer, your team project portal, or any team home page in the web access portal. + + Open the report site from the **Reports** page in Team Explorer. + + ![Open the team project report site](_img/alm_uprp_te_scrumreports.png "ALM_UPRP_TE_ScrumReports") + + Here's a view of reports for a Scrum project in Report Manager. + + ![Open a Scrum report in Report Manager](_img/alm_uprp_rm_scrumreports.png "ALM_UPRP_RM_ScrumReports") + +> [!NOTE] +> If a red X icon appears on the **Reports** node in Team Explorer, you might not have permissions to access the reports or Team Explorer might have lost communication with the server that hosts SQL Server Reporting Services. In these instances, check with your project administrator to make sure that you have permissions to access the reports node and that the server that hosts Reporting Services is running. +> +> The red X icon might appear on the **Reports** node if both of the following conditions are true: +> +>- If Team Explorer is running on the same computer as SQL Server Reporting Services +>- You are not logged on as the administrator, or enhanced security is enabled for Internet Explorer. +> +>To correct this issue, log onto your computer as an administrator, or open Internet Explorer, open Internet Options, choose the **Security** tab, and clear the **Enabled Protected Mode** check box. + + +## Refreshing a report + All data captured for work items is written to the WIT data store, but only select data is written to the Analysis Services data warehouse. The WIT data store is updated in real-time as team members create and modify work items. Incremental updates are then written to the relational warehouse database every two minutes and the OLAP cube every two hours. To change these settings, see [Change the Data Warehouse Refresh Frequency](../admin/change-a-process-control-setting.md). + + The following table describes how you can refresh the report. + +|Option|Result| +|------------|------------| +|Refresh button on the browser window|Refreshes the display with the report that is stored in the session cache. A session cache is created when a user opens a report. Reporting Services uses browser sessions to maintain a consistent viewing experience when a report is open.| +|![Refresh report](_img/procguid_refresh_icon.png "ProcGuid_Refresh_Icon")|Causes the server that is running Reporting Services to rerun the query and update report data if the report runs on-demand. If the report is cached or a snapshot, the report that is stored in the report server database appears.| +|CTRL+F5 keyboard combination|Produces the same result as choosing **Refresh** on the report toolbar.| + +## Manage and work with published reports + You can also perform the following tasks when you view a report in Reporting Services: + +- Zoom in or out of the report. + +- Search for text that the report contains. + +- Open a related report. + +- Export the report to another format such as XML, CSV, PDF, MHTML, Excel, TIFF, or Word. + +- Refresh the report. + +- Print the report. + +- Create a subscription for the report. + +## Q & A + +### Q: Do reports handle stories and substories or tasks and subtasks? + **A:** Yes, you can subdivide stories or backlog items as well as tasks, creating a nested hierarchy of both backlog items and tasks. You can nest items several levels deep. If you subdivide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and their parent backlog item. To correct reports you believe are in error, see [Address inaccuracies published for summary values](../../report/address-inaccuracies-published-for-summary-values.md). + +### Q: Which reports depend on linking work items? + **A:** The overview and progress reports depend on linking tasks, test cases, and bugs to backlog items. You must link these items using the parent-child link for tasks and bugs and the Tested By link for test cases. + +### Q: Why isn't code churn and code coverage data appearing in my reports? + **A:** If you use Git for version control, code churn and code coverage report data are not available. + +### Q: Are these reports the same as the charts that appear in the web portal? + **A:** While some reports do display similar information, such as sprint burndown and velocity or status on all iterations, these reports are formatted differently and support additional filters. + +### Q: Do you want to create additional product areas or release milestones? + **A:** See [Create areas or iterations](../../work/customize/set-area-paths.md). + +### Q: Do you want to bulk edit work items to assign them to an area, iteration, team member, or priority? + **A:** See [Bulk modify work items](../../work/backlogs/bulk-modify-work-items.md). + +### Q: Do you want to add a field to track additional data? +**A:** See [Add or modify a work item field to support reporting](../../work/reference/add-or-modify-work-item-fields-to-support-reporting.md). + diff --git a/docs/report/sql-reports/requirements-overview-report-cmmi.md b/docs/report/sql-reports/requirements-overview-report-cmmi.md new file mode 100644 index 00000000000..f2a822ee434 --- /dev/null +++ b/docs/report/sql-reports/requirements-overview-report-cmmi.md @@ -0,0 +1,154 @@ +--- +title: Requirements Overview Report (CMMI) | TFS +description: Lists all requirements, filtered by area and iteration and in order of importance. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 18214bb0-6ff1-4e91-b354-a9b46823f69d +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Requirements Overview Report (CMMI) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +The Requirements Overview report lists all requirements, filtered by area and iteration and in order of importance. For information about how to open this report, refresh the data, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + +**You can use this report to answer the following questions**:

      - How much work does each Requirement require?
      - How much work has the team completed for each Requirement?
      - Are the tests for each Requirement passing?
      - How many active bugs does each Requirement have? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the Report + The Requirements Overview report presents a snapshot of the work that has been performed for the filtered set of requirements to the current date, as the following illustration shows: + + ![Requirements Overview report](_img/procg_reqoverview.png "ProcG_ReqOverview") + + This report displays the following information for each user story that it lists: + + **Work Progress** + +- **% Hours Completed**: A numeric value and visual representation that shows the percentage of completed work based on the rollup of baseline and completed hours for all tasks that are linked to the requirement or its child requirements. + +- **Hours Remaining**: A numeric value for the rollup of all remaining hours for all tasks that are linked to the requirement or its child requirements. + + **Test Status** + +- **Tests**: A numeric value that represents the number of test cases that are linked to the requirement or its child requirements. + +- **Test Results**: A numeric value and visual representation that shows the percentage of test cases, grouped according to the status of their most recent test run, where the options are **Passed** (green), **Failed** (red), or **Not Run** (black). + +- **Bugs**: A numeric value and visual representation that shows the number of bugs that are linked to the test case or requirement, where the options are **Active** (blue) and **Resolved** (gold). If a requirement is linked to one or more child requirements, the values represent a rollup of all bugs for the requirement and its child requirements. + +### Requirements that Appear in the Report + The Requirements Overview report lists and highlights requirements according to the following criteria: + +- Requirements appear in order of their importance, based on their assigned ranking. + +- Requirements appear in bold type when they are in the active or resolved state. + +- Requirements appear in normal type when they are in the closed state. + +- Requirements appear in gray type when their assigned iteration or area is outside the filtered set, but they have Tasks or child Requirements that are within the filtered set of iterations or product areas. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +### Required Activities for Tracking Work Items + For the Requirements Overview report to be useful and accurate, the team must perform the following activities to track work items: + +- Define requirements and tasks, create a **Child** link from each task to a requirement, and create a **Child** link from any subtasks to its parent task. + +- Define and update the **Completed** and **Remaining** fields for each task or subtask during the iteration or release. + + > [!IMPORTANT] + > If you subdivide a task into subtasks, team members should specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and requirement. + +- Define test cases, and create a **Tested By** link from each test case to a requirement. + +- For each bug, create either a **Tested By** link to the test case that identified the code defect or a **Related** link to the requirement to which the bug relates. + +- Set the **State** of each bug to **Resolved** when it is fixed. + +- Specify the **Iteration** and **Area** paths for each requirement, task, test case, and bug. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +## Interpreting the Report + The Requirements Overview report shows overall work progress in the three areas that are important to completing and closing a Requirement: + +- Tasks implemented to complete each requirement. + +- Tests run to ensure the quality of the implemented requirements. + +- Bugs identified that indicate problems with the quality of the requirements. + + Depending on your area of focus, you can filter the report in the following ways: + +- Specify the **Iteration** and **Area** paths of interest. + + For more information, see [Filtering the Report](#Changing) later in this topic. + +- Click ![Expand](_img/icon_expand.gif "Icon_Expand") or ![Collapse](_img/icon_collapse.gif "Icon_Collapse") to expand or collapse a requirement and display child requirements. Parent requirements display a rollup of all task hours that are assigned to it and its child requirements. + +### Questions That the Report Answers + You can review the report to determine the overall progress for each requirement of interest. For example, you can find answers to the following questions: + +#### Work Progress + +- Does the amount of work that remains for each requirement correspond to your expectations? + +- Are top-ranked requirements being implemented first? + +- How many test cases are defined for each requirement? How many tests are passing? + +- What requirements are being implemented that have no test cases defined for them? + +#### Quality Progress + +- How many tests have run for each requirement, and how many have passed? + +- How many active bugs does each requirement have? + +- Are bugs being found for requirements that are being tested? + +- Are bugs being resolved or are they remaining active? + +#### Risk Assessment + +- Which requirements are at risk? + +- Which requirements are not stable enough for release? + +- Which requirements can the team ship today? + +### Healthy Version of the Report + A healthy Requirements Overview report shows more progress on requirements that appear near the top of the report. As the following illustration shows, the team has accomplished more work for those requirements that appear first in the report. Requirements are always listed according to their ranking. + + ![Example of Healthy Stories Progress](_img/procguid_healthy.png "ProcGuid_Healthy") + +### Unhealthy Version of the Report + An unhealthy Requirements Overview report shows one or more of the following indications: + +- The team is making more progress on requirements that have a lower rank than on requirements that have a higher rank. + +- More tesst are failing than are passing. + +- Tests are failing for a requirement, but no bug work items are being created. + +## Filtering the Report + You can filter the Requirements Overview report to show only those requirements that are defined for the iterations or product areas that you specify. + +#### To specify which Requirements appear in the report + +1. In the **Iteration** or **Area** list, select the check box of each iteration or product area to include. + +2. Click **View Report** to refresh the report based on the new filter criteria. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/requirements-progress-report-cmmi.md b/docs/report/sql-reports/requirements-progress-report-cmmi.md new file mode 100644 index 00000000000..adfc9de1c0a --- /dev/null +++ b/docs/report/sql-reports/requirements-progress-report-cmmi.md @@ -0,0 +1,172 @@ +--- +title: Requirements Progress Report (CMMI) | TFS +description: Lists all requirements, filtered by product area and iteration in order of importance. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: c5ecc16d-9645-4b5f-97b9-e92f76a88852 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Requirements Progress Report (CMMI) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +The Requirements Progress report lists all requirements, filtered by product area and iteration in order of importance. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + +**You can use this report to answer the following questions**:

      - How much progress has the team made toward completing the work for each requirement?
      - How much work must the team still perform to implement each requirement?
      - How much work did the team perform in the last calendar period? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the Report + The Requirements Progress report shows the status of completion as determined by the tasks that have been defined to implement the requirement, as the following illustration shows. The data in the report is derived from the data warehouse. + + ![Requirements Progress report](_img/procg_reqprogress.png "ProcG_ReqProgress") + + This report displays the following information for each requirement that appears in the report: + +- **Progress % Completed**: Numeric value that represents the percentage of completed work based on the rollup of baseline and completed hours for all tasks that are linked to the requirement or its child requirements. + +- **Hours Completed**: A visual representation of the completed hours, displayed as a dark green bar. + +- **Recently Completed**: A visual representation of those hours completed within the time interval specified for **Recent (Calendar Days)**, displayed as a light green bar. + +- **Hours Remaining**: Rollup of all remaining hours for all tasks that are linked to the requirement or its child requirements. + + > [!NOTE] + > The report displays active requirements in bold type and closed requirements in normal type. + +### Requirements that Appear in the Report + The Requirements Progress report lists and highlights requirements according to the following criteria: + +- Requirements appear in order of their importance, based on their assigned ranking. + +- Requirements appear in bold type when they are in the active or resolved state. + +- Requirements appear in normal type when they are in the closed state. + +- Requirements appear in gray type when their assigned iteration or area is outside the filtered set but they have tasks or child requirements that are within the filtered set of iterations or product areas. + +### Required Activities for Tracking Work Items + For the Requirements Progress report to be useful and accurate, the team must perform the following activities: + +- Define requirements and tasks, create a **Child** link from each task to the requirement that it implements, and create a **Child** link from any sub-task to its parent task. + +- Define and update the **Completed** and **Remaining** fields for each task or subtask during the iteration or release + + > [!IMPORTANT] + > If you subdivide a task into sub-tasks, specify hours only for the sub-tasks. These hours are rolled up as summary values for the parent task and requirement. + +- Specify the **Iteration** and **Area** paths for each requirement and task. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +## Interpreting the Report + Depending on your area of focus, you can filter the report in the following ways: + +- Specify the **Iteration** and **Area** paths of interest. + +- Change the **Recent (Calendar) Days**. + + By default, the value of this field is seven days. + +- Click ![Expand](_img/icon_expand.gif "Icon_Expand") or ![Collapse](_img/icon_collapse.gif "Icon_Collapse") to expand or collapse a requirement and display child requirements. Parent requirements display a rollup of all task hours that are assigned to it and its child requirements. + + For more information, see [Filtering the Report and Changing the Display](#Changing) later in this topic. + +### Questions That the Report Answers + You can review the report to determine how much work the team performed for the past week or recent period. Specifically, you can find answers to the following questions: + +- **On which requirements did the team make progress, and which are almost complete**? + + Requirements on which the team made progress will show a significant light green band within the progress bar. + + Requirements that are almost complete will indicate a high **Progress % Completed**, the progress bar will be almost completely green, and few hours will be listed in the **Hours Remaining** column. + +- **Which requirements did the team not work on**? + + Requirements that were not worked on will not show any light green band within the progress bar. + +- **Which requirements have the most work still to be completed?** + + Requirements that require the most work to complete will show a significant blue band within the progress bar and a large number of hours in the **Hours Remaining** column. + +- **Is work on any requirement blocked?** + + Requirements that show no light green band in the progress bar might indicate a blocking issue. + + If the team has not completed any work on a requirement for several weeks, you might want to determine why and identify any blocking or resource issues. + +- **Can we deliver everything that we planned? Which goals should we re-scope or cut?** + + Based on the requirements that are still active, you might want to defer some requirements to a later iteration so that the team can focus on completing other requirements in the current iteration. + +### Healthy Version of Report + A healthy Requirements Progress report shows that the team recently completed work (light green) on all requirements that are expected to be in progress, as the following illustration shows. + + ![Example of Healthy Stories Progress](_img/procguid_healthy.png "ProcGuid_Healthy") + +### Unhealthy Version of Report + An unhealthy Requirements Progress report might show one or more of the following indications: + +- **One or more requirements show no work**. + + Requirements that have 0% progress or 0 hours remaining have no tasks or estimated effort defined for them. You might want to verify whether tasks to implement the requirement are both assigned correctly and linked to the requirement. + +- **Many requirements have no recently completed work**. + + When several requirements indicate no or very small amounts of recently completed work, team progress is slow. You might investigate the cause of the slow progress and determine whether you should resolve or track blocking issues. + +## Filtering the Report and Changing the Display + You can filter the Requirements Progress report or change its display in the following ways: + +- Filter the list of requirements that appear by changing the iteration or area paths. + +- Change the time interval that determines what is considered recent. + + The amount of **Recently Completed** work is the work that the team performed or added during the interval specified by **Recent (Calendar) Days**. To determine whether the team performed any work in the last week, you set the value to 7 days. To determine how much work the team completed in the last month, you set the value to 30 days. + +- Change the scale that is used to show progress. + + You can view the report in absolute scale or in 100% scale. Absolute scale shows progress relative to work that the team performed on all requirements in the report, and 100% scale shows progress specific to the baseline of work for each requirement. + + The following illustration shows the available filters and display options. + + ![Filters for Stories Progress report](_img/procguid_progressfilters.png "ProcGuid_ProgressFilters") + +#### To filter the requirements that appear in the report + +1. In the **Iteration** or **Area** list, select the check box of each iteration or product area to include. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +2. Click **View Report** to refresh the display based on the new filter criteria. + +#### To change the time interval that determines recent activity + +1. In the **Recent (Calendar) Days** box, type the number of days to be considered as the recent time interval. + +2. Click **View Report** to refresh the display based on the new interval. + +#### To change the scale that displays requirement progress + +1. In the **Display Option** list, click one of the following options: + + - **Absolute Scale**: Displays the progress of hours completed and remaining as a percentage of the baseline, which appears relative to all requirements in the report. + + - **100% Scale**: Displays the progress of hours completed and remaining as a percentage of the baseline for each requirement, which is always 100%. + +2. Click **View Report** to refresh the display based on the new scale. + +## Related notes + [Requirements Overview](requirements-overview-report-cmmi.md) + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/run-coverage-tables.md b/docs/report/sql-reports/run-coverage-tables.md new file mode 100644 index 00000000000..c31b80c951e --- /dev/null +++ b/docs/report/sql-reports/run-coverage-tables.md @@ -0,0 +1,43 @@ +--- +title: Run Coverage tables | VSTS & TFS +description: Uses FactRunCoverage to query for data. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 4868da2c-9402-444e-a4a4-6b99e71a27ac +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Run Coverage tables +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for data about how thoroughly a particular test run covered the code that it was intended to test by using FactRunCoverage and the associated dimensions. + + For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Code churn and code coverage](perspective-code-analyze-report-code-churn-coverage.md). + + ![Fact Table for Run Coverage](_img/teamproj_factruncoverage.png "TeamProj_FactRunCoverage") + +> [!NOTE] +> You cannot aggregate these coverage values to determine code coverage for a build. To determine the code coverage in a build, you must use FactBuildCoverage. For more information, see [Build Coverage tables](table-reference-build-coverage.md). + + FactRunCoverage is associated with the following dimension tables: + +- DimAssembly + +- DimBuild + +- DimBuildFlavor + +- DimBuildPlatform + +- DimDate + +- DimPerson + +- DimTestRun + +## Related notes + [Code churn and code coverage](perspective-code-analyze-report-code-churn-coverage.md) + [Code Churn](../excel/code-coverage-excel-report.md) + [Build](https://docs.microsoft.com/en-us/visualstudio/ide/walkthrough-building-an-application) + [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) \ No newline at end of file diff --git a/docs/report/sql-reports/shared-dimensions-in-the-analysis-services-cube.md b/docs/report/sql-reports/shared-dimensions-in-the-analysis-services-cube.md new file mode 100644 index 00000000000..ff6291cd256 --- /dev/null +++ b/docs/report/sql-reports/shared-dimensions-in-the-analysis-services-cube.md @@ -0,0 +1,42 @@ +--- +title: Shared dimensions in the Analysis Services Cube | VSTS & TFS +description: Uses to show the data for only those team projects that you specify. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 7e4570e4-443b-4589-9d16-5699f51664b5 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Shared dimensions in the Analysis Services Cube +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can report data from across team project collections because all reportable data in a deployment of Team Foundation is written to the SQL Server Analysis Services cube for Visual Studio Team Foundation Server. You can use the Team Project dimension to show the data for only those team projects that you specify. You can use the Date dimension to create trend reports that show changes over a day, a week, a month, or a year. All perspectives in the cube share these dimensions. + + You can use dimension attributes to summarize the measures in the cube according to various categories. For example, you can use the Priority, Work Item Type, State, Closed By, and Closed Date attributes to determine how many priority one bugs were closed by a specific team member in November. + +## Filter Reports or Mine Data Based on Project Collections and Team Projects + You can use the Team Project dimension to filter a report or highlight specific details of a project collection or team project. All measures and dimensions in the Team System cube record data that is specific to a team project and project collection. The following illustration shows the attributes within the Team Project dimension as it appears in the Report Builder Query Designer. The Team Project Hierarchy node contains two hierarchical attributes, the first at the collection level and the second at the team-project level. + + ![Team Project Dimension](_img/alm_rpt_teamproject.png "ALM_RPT_TeamProject") + + You can filter the report to the team projects of interest by specifying one or more of the attributes in the following table. + +|Attribute|Description| +|---------------|-----------------| +|Team Project Hierarchy|The hierarchy of project collections and team projects. Use this field when you must filter a report from many project collections and team projects.| +|Is Deleted|A Boolean value that specifies whether a project is deleted.| +|Name|The name of a team project or project collection.| +|Project Node Type Name|The name of the node. Valid values are **Team Project** and **Team Project Collection**.| +|Project Path|A flat list of team project paths that start with the project collection.| + +## Create and Filter Trend Reports + By using the Date dimension, you can create trend reports that summarize changes that occur over time to work items, builds, tests, and files in version control. Reports that include the Date dimension show information for the specific day on which an action occurred. All information in the data warehouse is tracked as it appeared at the end of each day. + +> [!NOTE] +> The dates in the Date dimension are stored according to the date that is set for the application-tier server that runs the warehouse adapters that move data from the data stores to the relational warehouse database. Dates are not adjusted based on time zone. + +![Date Dimenension](_img/alm_rpt_date_dimension.png "ALM_RPT_Date_Dimension")
      You can use date dimension hierarchies to aggregate values by day, week, month, or year. For example, you can compare the percentage of opened versus closed bugs from one month to another.

      The first two attributes, **Year Month Date** and **Year Week Date**, correspond to hierarchical tree filters. The first hierarchy, as the following illustration shows, supports filtering by month. The second hierarchy supports filtering by week.

      ![Date Hierarchy](_img/alm_rpt_datehierarchy.png "ALM_RPT_DateHierarchy")

      Under **More fields**, you can specify the granularity of the time axis for displaying trend reports as **Date**, **Month**, **Week**, or **Year**.

      You can use the Date hierarchy with the **Year Month Day** attribute to aggregate measures by year, month, and the day of the month.

      You can use the Date hierarchy with the **Year Week Day** attribute to aggregate measures by year, week of year, and the day of the week. + +## Related notes + [Perspectives and measure groups provided in the Analysis Services cube](perspective-measure-groups-cube.md) \ No newline at end of file diff --git a/docs/report/sql-reports/sprint-burndown-scrum.md b/docs/report/sql-reports/sprint-burndown-scrum.md new file mode 100644 index 00000000000..76141725ba7 --- /dev/null +++ b/docs/report/sql-reports/sprint-burndown-scrum.md @@ -0,0 +1,72 @@ +--- +title: Sprint Burndown (Scrum) | TFS +description: Tracks how much work remains in a sprint backlog. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: f7422ba3-c309-4092-87cf-17a83c77ac01 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Sprint Burndown (Scrum) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +By reviewing a sprint burndown report, you can track how much work remains in a sprint backlog, understand how quickly your team has completed tasks, and predict when your team will achieve the goal or goals of the sprint. + + This report is very similar to the report available from your team backlog page. The sprint burndown report is built from data in the Analysis Services cube, and the team burndown chart references the WIT data store in real time. + + **Requirements** + +- The on-premises Team Foundation Server (TFS) deployment and the team project collection that contains your team project are configured with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + If you need to add reporting services to your deployment or reports for a team project, see [Add reports to a team project](../admin/add-reports-to-a-team-project.md). + +- To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in SQL Server Reporting Services. For more information, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + +## Data in the report + A sprint burndown report shows how much work remained at the end of specified intervals during a sprint. The source of the raw data is the sprint backlog. The horizontal axis shows days in a sprint, and the vertical axis measures the amount of work that remains to complete the tasks in the sprint. The work that remains is shown in hours. + + A sprint burndown graph displays the following pieces of data: + +- The Ideal Trend line indicates an ideal situation in which the team burns down all of the effort that remains at a constant rate by the end of the sprint. + +- The In Progress series shows how many hours remain for tasks that are marked as **In Progress** in a sprint. + +- The To Do series shows how many hours remain for tasks that are marked as **To Do** in a sprint. + + Both the In Progress and the To Do series are drawn based on the actual progress of your team as it completes tasks. + + The following illustration shows an example of a sprint burndown graph. + + ![Sprint burndown chart](_img/scrum_sprintburndown.png "Scrum_SprintBurndown") + + You can filter the report by selecting the **Iteration** or **Area**. + +### Required activities to support the sprint burndown report + For the burndown report to be useful and accurate, your team must perform the following activities for tracking tasks: + +- [Define sprints](../../work/scrum/define-sprints.md) for your team. + +- [Define tasks for each product backlog item](http://msdn.microsoft.com/en-us/f13e32ae-fe77-421a-b524-43b6bcd1a0f3) you're working on within the sprint. If you work from your team's backlog and task board, the items you create will automatically be assigned to the current sprint (**Iteration**) and to your team's default **Area** path. + +- Specify and update the **Remaining Work** field for each task or subtask as it is worked on. + + > [!IMPORTANT] + > If you divide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task. For more information, see [Address inaccuracies published for summary values](../../report/address-inaccuracies-published-for-summary-values.md). + +- Update the **State** of each task as it progresses from **To Do** to **Done**. + +## Interpreting the report + You can review the report to determine the progress that your team has made in a release and answer the following questions: + +- How much work remains in the sprint? + +- Is your team on track to finish all work for the sprint? + +- When will your team finish all work for the sprint? + +- How much work for the sprint is in progress? + +## Related notes + [Scrum process](../../work/guidance/scrum-process.md) +[Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) \ No newline at end of file diff --git a/docs/report/sql-reports/status-on-all-iterations-report.md b/docs/report/sql-reports/status-on-all-iterations-report.md new file mode 100644 index 00000000000..b2ac70037d7 --- /dev/null +++ b/docs/report/sql-reports/status-on-all-iterations-report.md @@ -0,0 +1,103 @@ +--- +title: Status on All Iterations Report | TFS +description: Helps you track the team's performance over successive iterations. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: ab92d41e-aab1-4d82-ad57-a4f868adc102 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Status on All Iterations Report +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +After work has progressed on several iterations, also known as sprints, you can view the team progress by viewing the Status on All Iterations report. This report helps you track the team's performance over successive iterations. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + +**You can use this report to answer the following questions**:

      - Is steady progress being made across all iterations?
      - How many stories did the team complete for each iteration?
      - How many hours did the team work for each iteration?
      - For each iteration, how many bugs did the team find, resolve, or close? + + **Requirements** + + To view this report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the report + The Status on All Iterations report presents a snapshot of work that the team accomplished across several iterations, as the following illustration shows. The data is derived from the data warehouse. + + ![Example Status on All Iterations Report](_img/procguid_statusonall2.png "ProcGuid_StatusOnAll2") + + For each iteration that is defined for the product areas that you specify, this report displays the following information: + +- **Stories Closed**: The number of user stories that have been closed. These values are derived from the current values specified for the iteration and the state of each user story. + +- **Progress (Hours)**: A two-bar numeric and visual representation that represents the values for **Original Estimate** (grey), **Completed** (green) and **Remaining** (light blue) based on the rollup of hours that are defined for all tasks. These values are derived from the current values that are specified for the iteration and the hours for each task. + +- **Bugs**: A numeric value and visual representation for all bugs, grouped by their current states of **Active** (blue), **Resolved** (gold) and **Closed** (green). These values are derived from the current values that are specified for the iteration and the state of each bug. + + In addition, you can choose an iteration to access the Burndown and Burn Rate report for that iteration. For more information, see [Burndown and Burn Rate](burndown-and-burn-rate-report.md). + +### Required activities for tracking work items + For the Status on All Iterations report to be useful and accurate, the team must perform the following activities for tracking work items: + +- Define user stories, tasks, and bugs, and specify the **Iteration** and **Area** paths for each. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +- Specify the **Original Estimate**, **Completed**, and **Remaining** fields for each task or subtask, and update the **Completed** and **Remaining** fields during the iteration. + + > [!IMPORTANT] + > If you subdivide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and the user story. For more information, see [Address inaccuracies published for summary values](../../report/address-inaccuracies-published-for-summary-values.md). + +- Update the **State** of each story, task, and bug as it progresses from active to closed. + +## Interpret the report + The Status on All Iterations report shows work progress across iterations that are defined for the product areas that you specify. For information about how to filter the report, see [Filtering the Report](#Changing) later in this topic. + +### Questions answered by the report + You can review the report to determine how many stories are ready to release and to better understand the rate of the team's progress. For example, you can find answers to the following questions: + +- Did the scope of work for each iteration closely match the team capacity? + +- Does the number of stories closed in each iteration correspond to your expectations? + +- Is the team resolving and closing more bugs with successive iterations? + +- How many stories can the team ship today? + +### Healthy version of report + A healthy Status on All Iterations report shows more progress with each successive iteration, as the following illustration shows. + + ![Healthy version of Status on All Iterations](_img/procguid_alliterations.png "ProcGuid_AllIterations") + +### Unhealthy version of report + An unhealthy Status on All Iterations report might show one or more of the following indicators: + +- **No stories were closed in one or more iterations**. + + You might want to review the story size and determine whether the team can define smaller stories. + +- **The number of estimated and completed hours vary widely within or across iterations**. + + You might want to review how well you are sizing your stories and how well the team is estimating work. When the estimated and completed hours match closely within an iteration, it indicates that the team is well positioned to progress at a known rate. + +- **Inconsistent progress made across past iterations**. + + You might want to determine whether any blocking issues have not been identified or tracked. + +- **Number of bugs being found is not increasing with each successive iteration**. + + ![Unhealthy version of Status on All Iterations](_img/procguid_unhealthy.png "ProcGuid_Unhealthy") +Unhealthy Version of a Status on All Iterations Report + +## Filter the report + You can filter the Status on All Iterations report to show progress only for product areas that you specify. + +- In the **Area** list, select the check box of each product area to include, and then choose **View Report**. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/stories-overview-report-agile.md b/docs/report/sql-reports/stories-overview-report-agile.md new file mode 100644 index 00000000000..5910a1ae2f8 --- /dev/null +++ b/docs/report/sql-reports/stories-overview-report-agile.md @@ -0,0 +1,159 @@ +--- +title: Stories Overview Report (Agile) | TFS +description: Lists all user stories, filtered by area and iteration and in order of importance. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 2b21601e-c737-4eda-b836-87517e19cf63 +ms.manager: douge +ms.author: kaelli +ms.date: 03/03/2017 +--- + +# Stories Overview Report (Agile) + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +The Stories Overview report lists all user stories, filtered by area and iteration and in order of importance. For information about how to open this report, refresh the data, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + +**You can use this report to answer the following questions**:

      - How much work does each story require?
      - How much work has the team completed for each story?
      - Are the tests for each story passing?
      - How many active bugs does each story have? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + + +## Data in the report + The Stories Overview report presents a snapshot of the work that has been performed for the filtered set of user stories to the current date, as the following illustration shows: + + ![Stories Overview example report](_img/procguid_agilereports.png "ProcGuid_AgileReports") + + This report displays the following information for each user story that it lists: + + **Work Progress** + +- **% Hours Completed**: A numeric value and visual representation that shows the percentage of completed work based on the rollup of baseline and completed hours for all tasks that are linked to the user story or its child stories. + +- **Hours Remaining**: A numeric value for the rollup of all remaining hours for all tasks that are linked to the user story or its child stories. + + **Test Status** + +- **Test Points**: A numeric value that represents the number of pairings of test cases with test configurations in a specific test suite. For more information about test points, see [Reporting on testing progress for test plans](../../manual-test/getting-started/track-test-status.md). + +- **Test Results**: A numeric value and visual representation that shows the percentage of test cases, grouped according to the status of their most recent test run, where the options are **Passed** (green), **Failed** (red), or **Not Run** (black). + +- **Bugs**: A numeric value and visual representation that shows the number of bugs that are linked to the test case or user story, where the options are **Active** (blue) and **Resolved** (gold). If a user story is linked to one or more child stories, the values represent a rollup of all bugs for the user story and its child stories. + +### User Stories that Appear in the Report + The Stories Overview report lists and highlights user stories according to the following criteria: + +- Stories appear in order of their importance, based on their assigned ranking. + +- Stories appear in bold type when they are in the active or resolved state. + +- Stories appear in normal type when they are in the closed state. + +- Stories appear in gray type when their assigned iteration or area is outside the filtered set, but they have tasks or child stories that are within the filtered set of iterations or product areas. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +### Required Activities for Tracking Work Items + For the Stories Overview report to be useful and accurate, the team must perform the following activities to track work items: + +- Define user stories and tasks, create a **Child** link from each task to a user story, and create a **Child** link from any subtasks to its parent task. + +- Define and update the **Completed** and **Remaining** fields for each task or subtask during the iteration or release. + + > [!IMPORTANT] + > If you subdivide a task into subtasks, team members should specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and user story. + +- Define test cases, and create a **Tested By** link from each test case to a user story. + +- For each bug, create either a **Tested By** link to the test case that identified the code defect or a **Related** link to the user story to which the bug relates. + +- Set the **State** of each bug to **Resolved** when it is fixed. + +- Specify the **Iteration** and **Area** paths for each story, task, test case, and bug. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + + +## Interpreting the Report + The Stories Overview report shows overall work progress in the three areas that are important to completing and closing a user story: + +- Tasks implemented to complete the user story. + +- Test cases run to ensure the quality of the implemented user stories. + +- Bugs identified that indicate problems with the quality of the user stories. + + Depending on your area of focus, you can filter the report in the following ways: + +- Specify the **Iteration** and **Area** paths of interest. + + For more information, see [Filtering the Report](#Changing) later in this topic. + +- Click ![Expand](_img/icon_expand.gif "Icon_Expand") or ![Collapse](_img/icon_collapse.gif "Icon_Collapse") to expand or collapse a user story and display child stories. Parent stories display a rollup of all task hours that are assigned to it and its child stories. + +### Questions that the report answers + You can review the report to determine the overall progress for each user story of interest. For example, you can find answers to the following questions: + +#### Work Progress + +- Does the amount of work that remains for each story correspond to your expectations? + +- Are top-ranked stories being implemented first? + +- How many tests are defined for each story? How many tests are passing? + +- What user stories are being implemented that have no test cases defined for them? + +#### Quality Progress + +- How many test cases have run for each story, and how many have passed? + +- How many active bugs does each story have? + +- Are bugs being found for stories that are being tested? + +- Are bugs being resolved or are they remaining active? + +#### Risk Assessment + +- Which stories are at risk? + +- Which stories are not stable enough for release? + +- Which stories can the team ship today? + +### Healthy version of the report + A healthy Stories Overview report shows more progress on stories that appear near the top of the report. As the following illustration shows, the team has accomplished more work for those stories that appear first in the report. Stories are always listed according to their ranking. + + ![Example of Healthy Stories Progress](_img/procguid_healthy.png "ProcGuid_Healthy") + +### Unhealthy version of the report + An unhealthy Stories Overview report shows one or more of the following indications: + +- The team is making more progress on stories that have a lower rank than on stories that have a higher rank. + +- More test are failing than are passing. + +- Tests are failing for a story, but no bug work items are being created. + + +## Filter the report + You can filter the Stories Overview report to show only those user stories that are defined for the iterations or product areas that you specify. + +#### To specify which user stories appear in the report + +1. In the **Iteration** or **Area** list, select the check box of each iteration or product area to include. + +2. Click **View Report** to refresh the report based on the new filter criteria. + +## Related notes +- [Reporting Services Reports](reporting-services-reports.md) diff --git a/docs/report/sql-reports/stories-progress-report-agile.md b/docs/report/sql-reports/stories-progress-report-agile.md new file mode 100644 index 00000000000..eedf931c613 --- /dev/null +++ b/docs/report/sql-reports/stories-progress-report-agile.md @@ -0,0 +1,171 @@ +--- +title: Stories Progress Report (Agile) | TFS +description: Lists all user stories, filtered by product area and iteration in order of importance. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 1478227b-50b9-4ef1-be5b-838cd5a5467b +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Stories Progress Report (Agile) +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +The Stories Progress report lists all user stories, filtered by product area and iteration in order of importance. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + +**You can use this report to answer the following questions**:

      - How much progress has the team made toward completing the work for each story?
      - How much work must the team still perform to implement each user story?
      - How much work did the team perform in the last calendar period? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the Report + The Stories Progress report shows the status of completion as determined by the tasks that have been defined to implement the user story, as the following illustration shows. The data in the report is derived from the data warehouse. + + ![Example Stories Progress Report](_img/procguid_repstoriesprogress.png "ProcGuid_RepStoriesProgress") + + This report displays the following information for each user story that appears in the report: + +- **Progress (% Completed)**: Numeric value that represents the percentage of completed work based on the rollup of baseline and completed hours for all tasks that are linked to the user story or its child stories. + +- **Hours Completed**: A visual representation of the completed hours, displayed as a dark green bar. + +- **Recently Completed**: A visual representation of those hours completed within the time interval specified for **Recent (Calendar) Days**, displayed as a light green bar. + +- **Hours Remaining**: Rollup of all remaining hours for all tasks that are linked to the user story or its child stories. + + > [!NOTE] + > The report displays active user stories in bold type and closed user stories in normal type. + +### User Stories that Appear in the Report + The Stories Progress report lists and highlights user stories according to the following criteria: + +- Stories appear in order of their importance, based on their assigned ranking. + +- Stories appear in bold type when they are in the active or resolved state. + +- Stories appear in normal type when they are in the closed state. + +- Stories appear in gray type when their assigned iteration or area is outside the filtered set but they have tasks or child stories that are within the filtered set of iterations or product areas. + +### Required Activities for Tracking Work Items + For the Stories Progress report to be useful and accurate, the team must perform the following activities: + +- Define user stories and tasks, create a **Child** link from each task to the story that it implements, and create a **Child** link from any subtask to its parent task. + +- Define and update the **Completed** and **Remaining** fields for each task or subtask during the iteration or release + + > [!IMPORTANT] + > If you subdivide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task and user story. + +- Specify the **Iteration** and **Area** paths for each story and task. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +## Interpreting the Report + Depending on your area of focus, you can filter the report in the following ways: + +- Specify the **Iteration** and **Area** paths of interest. + +- Change the **Recent (Calendar) Days**. + + By default, the value of this field is seven days. + +- Click ![Expand](_img/icon_expand.gif "Icon_Expand") or ![Collapse](_img/icon_collapse.gif "Icon_Collapse") to expand or collapse a user story and display child stories. Parent stories display a rollup of all task hours that are assigned to it and its child stories. + + For more information, see [Filtering the Report and Changing the Display](#Changing) later in this topic. + +### Questions That the Report Answers + You can review the report to determine how much work the team performed for the past week or recent period. Specifically, you can find answers to the following questions: + +- **On which stories did the team make progress, and which are almost complete**? + + Stories on which the team made progress will show a significant light green band within the progress bar. + + Stories that are almost complete will indicate a high **Progress (% Completed)**, the progress bar will be almost completely green, and few hours will be listed in the **Hours Remaining** column. + +- **Which stories did the team not work on**? + + Stories that were not worked on will not show any light green band within the progress bar. + +- **Which user stories have the most work still to be completed?** + + Stories that require the most work to complete will show a significant blue band within the progress bar and a large number of hours in the **Hours Remaining** column. + +- **Is work on any story blocked?** + + Stories that show no light green band in the progress bar might indicate a blocking issue. + + If the team has not completed any work on a story for several weeks, you might want to determine why and identify any blocking or resource issues. + +- **Can we deliver everything that we planned? Which goals should we re-scope or cut?** + + Based on the stories that are still active, you might want to defer some stories to a later iteration so that the team can focus on completing other stories in the current iteration. + +### Healthy Version of Report + A healthy Stories Progress report shows that the team recently completed work (light green) on all stories that are expected to be in progress, as the following illustration shows. + + ![Example of Healthy Stories Progress](_img/procguid_healthy.png "ProcGuid_Healthy") + +### Unhealthy Version of Report + An unhealthy Stories Progress report might show one or more of the following indications: + +- **One or more stories show no work**. + + Stories that have 0% progress or 0 hours remaining have no tasks or estimated effort defined for them. You might want to verify whether tasks to implement the user story are both assigned correctly and linked to the user story. + +- **Many user stories have no recently completed work**. + + When several stories indicate no or very small amounts of recently completed work, team progress is slow. You might investigate the cause of the slow progress and determine whether you should resolve or track blocking issues. + +## Filtering the Report and Changing the Display + You can filter the Stories Progress report or change its display in the following ways: + +- Filter the list of stories that appear by changing the iteration or area paths. + +- Change the time interval that determines what is considered recent. + + The amount of **Recently Completed** work is the work that the team performed or added during the interval specified by **Recent (Calendar) Days**. To determine whether the team performed any work in the last week, you set the value to 7 days. To determine how much work the team completed in the last month, you set the value to 30 days. + +- Change the scale that is used to show progress. + + You can view the report in absolute scale or in 100% scale. Absolute scale shows progress relative to work that the team performed on all user stories in the report, and 100% scale shows progress specific to the baseline of work for each user story. + + The following illustration shows the available filters and display options. + + ![Filters for Stories Progress report](_img/procguid_progressfilters.png "ProcGuid_ProgressFilters") + +#### To filter the user stories that appear in the report + +1. In the **Iteration** or **Area** list, select the check box of each iteration or product area to include. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +2. Click **View Report** to refresh the display based on the new filter criteria. + +#### To change the time interval that determines recent activity + +1. In the **Recent (Calendar) Days** box, type the number of days to be considered as the recent time interval. + +2. Click **View Report** to refresh the display based on the new interval. + +#### To change the scale that displays user story progress + +1. In the **Display Option** list, click one of the following options: + + - **Absolute Scale**: Displays the progress of hours completed and remaining as a percentage of the baseline, which appears relative to all user stories in the report. + + - **100% Scale**: Displays the progress of hours completed and remaining as a percentage of the baseline for each story, which is always 100%. + +2. Click **View Report** to refresh the display based on the new scale. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/table-reference-build-changeset.md b/docs/report/sql-reports/table-reference-build-changeset.md new file mode 100644 index 00000000000..14bd194ce81 --- /dev/null +++ b/docs/report/sql-reports/table-reference-build-changeset.md @@ -0,0 +1,36 @@ +--- +title: Build Changeset tables | TFS +description: Uses FactBuildChangeset to query for data about the changesets. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 66ab6ac3-ff81-4ed7-9535-dd7ce9ebbb37 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + +# Build Changeset tables + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for data about the changesets that were incorporated in each build by using FactBuildChangeset and the associated dimension tables. + + For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Builds](perspective-build-analyze-report-build-details-coverage.md). + + ![Tables for Changesets in a Build](_img/teamproj_factbuildchangeset.png "TeamProj_FactBuildChangeset") + + FactBuildChangeset is associated with the following dimension tables: + +- DimBuild + +- DimChangeset + +- DimPerson + +- DimTeamProject + +## Related notes +- [Builds](perspective-build-analyze-report-build-details-coverage.md) +- [Find and view changesets](../../tfvc/find-view-changesets.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) +- [Continuous integration on any platform](../../build-release/overview.md) diff --git a/docs/report/sql-reports/table-reference-build-coverage.md b/docs/report/sql-reports/table-reference-build-coverage.md new file mode 100644 index 00000000000..374c1abfedd --- /dev/null +++ b/docs/report/sql-reports/table-reference-build-coverage.md @@ -0,0 +1,42 @@ +--- +title: Build Coverage tables | TFS +description: Query for data about how thoroughly source code was covered by the tests that use specific builds. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 262d8253-6e8c-4c2f-8b11-db3f9a5bcd89 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Build Coverage tables + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for data about how thoroughly source code was covered by the tests that use specific builds by using FactBuildCoverage and the associated dimension tables. + + For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Builds](perspective-build-analyze-report-build-details-coverage.md). + + ![Build Coverage Fact Table](_img/teamproj_factbuildcoverage.png "TeamProj_FactBuildCoverage") + + FactBuildCoverage is associated with the following dimension tables: + +- DimAssembly + +- DimBuild + +- DimBuildFlavor + +- DimBuildPlatform + +- DimCodeElement + +- DimDate + +- DimTeamProject + +## Related notes +- [Builds](perspective-build-analyze-report-build-details-coverage.md) +- [Code Churn](../excel/code-coverage-excel-report.md) +- [Run Coverage tables](run-coverage-tables.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) +- [Continuous integration on any platform](../../build-release/overview.md) diff --git a/docs/report/sql-reports/table-reference-build-details.md b/docs/report/sql-reports/table-reference-build-details.md new file mode 100644 index 00000000000..d69ed9eb2e1 --- /dev/null +++ b/docs/report/sql-reports/table-reference-build-details.md @@ -0,0 +1,41 @@ +--- +title: Build Details tables | TFS +description: Query for data about builds, such as the status and quality. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: cbcabf4d-d334-4c17-a003-315e337a49b3 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Build Details tables + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for data about builds, such as the status and quality, by using FactBuildDetails and the associated dimension tables. + + For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Builds](perspective-build-analyze-report-build-details-coverage.md). + + ![Tables for Builds](_img/teamproj_factbuilddetails.png "TeamProj_FactBuildDetails") + + FactBuildDetails is associated with the following dimension tables: + +- DimBuild + +- DimBuildQuality + +- DimBuildStatus + +- DimDate + +- DimPerson + +- DimTeamProject + +## Related notes +- [Builds](perspective-build-analyze-report-build-details-coverage.md) +- [Build Quality Indicators](build-quality-indicators-report.md) +- [Build Success Over Time](build-success-over-time-report.md) +- [Build Summary](build-summary-report.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) +- [Continuous integration on any platform](../../build-release/overview.md) diff --git a/docs/report/sql-reports/table-reference-build-project.md b/docs/report/sql-reports/table-reference-build-project.md new file mode 100644 index 00000000000..8535f35b2fc --- /dev/null +++ b/docs/report/sql-reports/table-reference-build-project.md @@ -0,0 +1,42 @@ +--- +title: Build Project tables | TFS +description: Query for data about the files and projects that were built and information about those files +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 3d97e0e9-84ac-4662-84fe-36a38eb463b7 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Build Project tables + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for data about the files and projects that were built and information about those files by using FactBuildProjects and the associated dimensions. Records contain the static analysis and compiler warnings and errors for each file that was built. If it was built for more than one platform or flavor, you can find records for each platform and flavor. + + For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Builds](perspective-build-analyze-report-build-details-coverage.md). + + ![Tables for Source Projects in a Build](_img/teamproj_factbuildproject.png "TeamProj_FactBuildProject") + + FactBuildProject is associated with the following dimension tables: + +- DimBuild + +- DimBuildFlavor + +- DimBuildPlatform + +- DimDate + +- DimFile + +- DimTeamProject + +## Related notes +- [Builds](perspective-build-analyze-report-build-details-coverage.md) +- [Build Quality Indicators](build-quality-indicators-report.md) +- [Build Success Over Time](build-success-over-time-report.md) +- [Build Summary](build-summary-report.md) +- [Build Details tables](table-reference-build-details.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) +- [Continuous integration on any platform](../../build-release/overview.md) diff --git a/docs/report/sql-reports/table-reference-code-churn.md b/docs/report/sql-reports/table-reference-code-churn.md new file mode 100644 index 00000000000..01af58460fa --- /dev/null +++ b/docs/report/sql-reports/table-reference-code-churn.md @@ -0,0 +1,36 @@ +--- +title: Code Churn tables | TFS +description: Query for data about the changes in the code that is under version control +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: c158a791-7f9d-4440-aa47-87a9497da9e2 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + +# Code Churn tables + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for data about the changes in the code that is under version control by using FactCodeChurn and the associated dimension tables. The fact table contains one record for each revision of a file in each changeset. + + For a description of the measures and dimensions that are associated with these tables in the Analysis Services cube, see [Code churn and code coverage](perspective-code-analyze-report-code-churn-coverage.md). + + ![Fact Table for Code Churn](_img/teamproj_factcodechurn.png "TeamProj_FactCodeChurn") + + FactCodeChurn is associated with the following dimension tables: + +- DimChangeset + +- DimDate + +- DimFile + +- DimTeamProject + +## Related notes +- [Code churn and code coverage](perspective-code-analyze-report-code-churn-coverage.md) +- [Code Churn](../excel/code-churn-excel-report.md) +- [Run Coverage tables](run-coverage-tables.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) \ No newline at end of file diff --git a/docs/report/sql-reports/table-reference-current-work-items.md b/docs/report/sql-reports/table-reference-current-work-items.md new file mode 100644 index 00000000000..b4981067c57 --- /dev/null +++ b/docs/report/sql-reports/table-reference-current-work-items.md @@ -0,0 +1,38 @@ +--- +title: Current Work Item tables | TFS +description: Query for data about the current state of bugs, task, and other type of work items +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 8f70c31b-1c6f-4d5b-8413-3948a298d879 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + +# Current Work Item tables + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + + +You can query for data about the current state of bugs, tasks, and other types of work items by using the FactCurrentWorkItem table and the associated dimension tables. + + For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Test cases and work items](perspective-test-analyze-report-work.md). + + ![Fact Table for Current Work Items](_img/teamproj_currentworkitem.png "TeamProj_CurrentWorkItem") + + FactCurrentWorkItem is associated with the following dimension tables: + +- DimArea + +- DimIteration + +- DimPerson + +- DimTeamProject + +- DimWorkItem + +## Related notes +- [Test cases and work items](perspective-test-analyze-report-work.md) +- [Work Item History tables](work-item-history-tables.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) \ No newline at end of file diff --git a/docs/report/sql-reports/table-reference-relational-warehouse-database.md b/docs/report/sql-reports/table-reference-relational-warehouse-database.md new file mode 100644 index 00000000000..1027d1d4f63 --- /dev/null +++ b/docs/report/sql-reports/table-reference-relational-warehouse-database.md @@ -0,0 +1,90 @@ +--- +title: Relational warehouse database tables | TFS +description: Create reports and query for Team Foundation Server (TFS) data +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 0f398cef-add1-4112-85e8-016108de10b3 +ms.manager: douge +ms.author: kaelli +ms.date: 03/03/2017 +--- + +# Table reference for the relational warehouse database + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can create reports and query for data by using the warehouse database. The data in the warehouse is collected from the TFS operational stores and organized in a set of tables, views, and table-valued functions that are designed for creating reports. + + ![Team Foundation Warehouse](_img/teamproj_warehouse.png "TeamProj_Warehouse") + + The warehouse contains data about builds, source code, test results and code coverage, and work items such as tasks and bugs. The relationships between these sets of data are created in Visual Studio ALM and retained in the warehouse. Therefore, you can create queries to explore relationships between these integrated sets of data and better understand what is happening on your projects. + + + The data in the warehouse is stored in fact and dimension tables. This pattern for storing data in star and snowflake schemas is described in the following topic on the Microsoft Web site: [Introduction to Dimensions](https://msdn.microsoft.com/library/ms175439.aspx). + + Some other common patterns occur in the warehouse: + +- All fact tables reference DimTeamProject, because all data in Visual Studio ALM is organized by team projects and team project collections. Some dimensions also reference the DimTeamProject so that you can more easily use them as project-filter parameters in your reports. + +- All fact tables reference DimDate to indicate the date on which the fact occurred. + +- Many fact tables reference DimPerson, sometimes more than once. For example, the work item facts reference DimPerson to indicate to whom a work item is assigned to and who changed it most recently. + +## Builds + You can query for data about builds by using four fact tables, as the following illustration shows. Each fact table uses the build dimension table DimBuild to store many details about the builds. + + ![Build Fact Tables](_img/teamproj_buildfacts.png "TeamProj_BuildFacts") + +|Fact Table|Description| +|----------------|-----------------| +|[Build Details tables](table-reference-build-details.md)|Basic information about each build, such as the build status and quality.| +|[Build Changeset tables](table-reference-build-changeset.md)|Changesets that were included in each build.| +|[Build Project tables](table-reference-build-project.md)|Files that were built and the platforms and flavors of the builds.| +|[Build Coverage tables](table-reference-build-coverage.md)|The extent to which the code was covered by tests that were performed against the build.| + + For more information about builds, see [Build](../../build-release/overview.md). + +## Source Code + You can query for data about code and other files that are under version control by using the fact tables in the following illustration. DimFile and DimChangeset are the two primary dimensions that are associated with these fact tables. DimFile provides information about files and folders, without regard to specific versions of those files. DimChangeset provides information about the changesets. + + ![Fact Tables about Source Code](_img/teamproj_codefacts.png "TeamProj_CodeFacts") + +|Fact Table|Description| +|----------------|-----------------| +|[Code Churn tables](table-reference-code-churn.md)|Basic information about each build.| +|[Build Changeset tables](table-reference-build-changeset.md)|Changesets that were included in the build.| +|[Build Project tables](table-reference-build-project.md)|Files that were built and the platforms and flavors that were used.| +|[Work Item Changeset tables](work-item-changeset-tables.md)|Links between work items and changesets.| + + For more information about version control, see [Code](../../tfvc/overview.md). + +## Tests + You can query for information about test results and analyze how well the tests cover the code by using the tables in the following illustration. + + ![Fact Tables for Tests](_img/teamproj_testfacts.png "TeamProj_TestFacts") + +|Fact Table|Description| +|----------------|-----------------| +|[Test Result tables](test-result-tables.md)|Tests and their results.| +|[Run Coverage tables](run-coverage-tables.md)|The extent to which the code was covered by tests in a test run.| +|[Build Coverage tables](table-reference-build-coverage.md)|The extent to which the code was covered by tests that were performed against the build.| +|[Work Item Test Result tables](work-item-test-result-tables.md)|Links between work items and test results.| + + For more information, see [Testing overview](../../manual-test/index.md) and [Using Code Coverage to Determine How Much Code is being Tested](https://msdn.microsoft.com/library/dd537628.aspx). + + +## Tasks, Bugs and Other Types of Work Items + You can query for information about tasks, bugs, and other types of work items by using the work item tables in the following illustration. Each work item fact table uses the work item dimension table to store many details about the work items. + + ![Fact Tables for Tasks, Bugs, and Other Work Items](_img/teamproj_workitemfacts.png "TeamProj_WorkItemFacts") + +|Fact Table|Description| +|----------------|-----------------| +|[Current Work Item tables](table-reference-current-work-items.md)|The current state of each work item.| +|[Work Item History tables](work-item-history-tables.md)|The full history of each work item.| +|[Work Item Link History tables](work-item-link-history-tables.md)|The full history of links between work items.| +|[Work Item Category tables](work-item-category-tables.md)|The categories that are used to associate similar types of work items.| +|[Work Item Changeset tables](work-item-changeset-tables.md)|Links between work items and changesets.| +|[Work Item Test Result tables](work-item-test-result-tables.md)|Links between work items and test results.| + + diff --git a/docs/report/sql-reports/test-case-readiness-report.md b/docs/report/sql-reports/test-case-readiness-report.md new file mode 100644 index 00000000000..89cd6cd4d17 --- /dev/null +++ b/docs/report/sql-reports/test-case-readiness-report.md @@ -0,0 +1,113 @@ +--- +title: Test Case Readiness Report | TFS +description: Determine how many test cases have been defined and are ready to run +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: c4e804d5-1549-41c0-a365-28fdec77bffe +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- + +# Test Case Readiness report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +After the team starts to define test cases, you can use the Test Case Readiness report to determine how many test cases have been defined and are ready to run. + +> [!NOTE] +> The Test Case Readiness report is useful only if your team is testing your application by using Test Runner and Microsoft Test Manager. For more information about how to define and use test cases, see [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was configured with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + +**You can use this report to answer the following questions**:

      - When will all the test cases be ready to run?
      - Will all the test cases be ready to run by the end of the iteration?
      - How many test cases must the team still write and review?
      - How many test cases are ready to be run? + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Grant permissions to view or create reports](../admin/grant-permissions-to-reports.md). + +## Data in the report + The Test Case Readiness report provides an area graph that shows how many test cases are in the **Design** or **Ready** state over the time period that you specify. By reviewing this data, you can easily determine how quickly the team is designing test cases and making them ready for testing. When you create a test case, it is automatically set to the design state. After the team has reviewed and approved the test case, then a team member should change its state to **Ready**, which indicates that the test case is ready to be run. + + The following illustration shows an example of a Test Case Readiness report. + + ![Example Test Case Readiness Report](_img/procguid_testcasereadiness.png "ProcGuid_TestCaseReadiness") + + The data that appears in the report is derived from the data warehouse. The report summarizes the data that was captured for each test case during the time interval that you specified, based on the area path and other filters that you specified. + + You can filter the report in the following ways: + +- Change the start and end dates for the report. + +- Filter the test cases that are counted in the report by specifying area paths, priority, and state. + + For more information, see [Filtering the Report](#Changing) later in this topic. + +### Required activities for tracking test cases + For the Test Case Readiness report to be useful and accurate, the team must perform the following activities: + +- Define test cases, and specify the **Iteration** and **Area** paths for each test case. + +- Update the state of each test case as it progresses from **Design** to **Ready** to **Closed**. + +## Interpreting the report + The Test Case Readiness report displays the number of all test cases, grouped by state. + +### Questions answered by the report + You can review the report to determine the team's progress within an iteration or over time. For example, you can answer these questions: + +- How many test cases are ready to be run? + +- How many test cases must the team still write and review? + +- When will all the test cases be ready to run? + +- Will all the test cases be ready to run by the end of the iteration? + +### Healthy version of report + A healthy Test Case Readiness report will show a steady progress in test cases being designed and moving to the ready state, as the following illustration shows. + + ![Healthy version of Test Case Readiness](_img/procguid_testcasereadiness_healthy.png "ProcGuid_TestCaseReadiness_Healthy") + +### Unhealthy version of report + The following illustration shows an unhealthy version of the Test Case Readiness report, in which the states do not change for several weeks at a time. + + ![Unhealthy version of Test Case Readiness](_img/procguide_testcasereadiness_unhealthy.png "ProcGuide_TestCaseReadiness_Unhealthy") + + An unhealthy Test Case Readiness report shows one or more of the following indicators: + +- **No test cases are ready to be run**. + + When all test cases remain in a design state for a long time, some issue is blocking progress. You might want to investigate the cause of the blockage. + +- **The number of test cases does not appear sufficient**. + + The number of test cases that are defined for a project should be equal to or larger than the number of user stories that the team is implementing. + +## Filtering the report + You can filter the Test Case Readiness report to show only those test cases that are defined for the product areas, states, and priorities that you specify. The following illustration shows the available filters: + + ![Filters for Test Case Readiness report](_img/procguid_readiness.png "ProcGuid_Readiness") + +#### To change the time interval of the report + +1. In **Iteration Start (Date)** or **Iteration End (Date)**, click the calendar icon, and then click the appropriate date. + +2. Click **View Report**. + +#### To filter the test cases that are counted in the report + +1. Perform one or both of the following actions: + + - In the **Area** list, select the check box of each product area to include. + + - In the **State** and **Priority** lists, select the check box of each state and priority to include. + +2. Click **View Report**. + +## Related notes +- [Reporting Services Reports](reporting-services-reports.md) + diff --git a/docs/report/sql-reports/test-plan-progress-report.md b/docs/report/sql-reports/test-plan-progress-report.md new file mode 100644 index 00000000000..f32c1a4a3e8 --- /dev/null +++ b/docs/report/sql-reports/test-plan-progress-report.md @@ -0,0 +1,131 @@ +--- +title: Test Plan Progress Report | TFS +description: Use the Test Plan Progress report to track the team's progress in testing the product. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 97d112d1-2d31-4890-b518-124fbeebea30 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- + +# Test Plan Progress Report + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +After the team creates test plans and starts to run tests by using the test management tools provided with Team Foundation Server (TFS) which include Test Runner, Microsoft Test Manager, or Team Web Access (TWA) Test hub. With the Test Plan Progress report, you can track the team's progress in testing the product. + + For information about how to define test suites and test plans, see [Plan your tests](../../manual-test/getting-started/create-test-cases.md). + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +**You can use this report to answer the following questions**:

      - How much testing has the team completed?
      - Is the team likely to finish the testing on time?
      - How many tests are left to be run?
      - How many tests are passing?
      - How many tests are failing?
      - How many tests are blocked? + + **Requirements** + +- To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +- The team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. If you need to add reports, see [Add reports to a team project](../admin/add-reports-to-a-team-project.md). + +## Data in the Report + The data that appears in the Test Plan Progress report is derived from the data warehouse and the test results that are generated when tests are run by using Microsoft Test Manager. The report presents an area graph that shows the most recent result of running any test in the specified test plans over time. For more information, see [Run your tests](../../manual-test/getting-started/run-manual-tests.md). + + The following illustration shows an example of a Test Plan Progress report: + + ![Example Test Plan Progress report](_img/procguid_reports_testprogress.png "ProcGuid_Reports_TestProgress") + + The horizontal axis shows days in a sprint or iteration, and the vertical axis shows test points. A test point is a pairing of a test case with a test configuration in a specific test suite. For more information about test points, see [Reporting on testing progress for test plans](../../manual-test/getting-started/track-test-status.md). The following table describes the meaning of each test result: + +|Test result|Description| +|-----------------|-----------------| +|**Passed**|Number of test cases that passed.| +|**Failed**|Number of test cases that failed.| +|**Inconclusive**|Number of test cases that ran and were assigned a status of Inconclusive.| +|**Blocked**|Number of test cases that are currently blocked from running.| +|**Never Run**|Number of test cases that have never been run.| +|**Other**|Number of test cases that were run and assigned one of the following states: Aborted, Not Executed, PassedButRunAborted, NotRunnable, Disconnected, Timeout, Pending, In Progress, or Inconclusive.| + + You can filter the Test Plan Progress report in the following ways: + +- Change the start and end dates for the report. + +- Filter the test plans that are counted in the report by specifying iteration paths, area paths, and the names or states of the test plans. + + For more information, see [Filtering the Report](#Changing) later in this topic. + +### Required Activities for Managing Test Cases and Test Plans + For the Test Plan Progress report to be useful and accurate, the team must perform the following activities to manage test plans: + +- Define test cases, and specify the **Iteration** and **Area** paths for each test case. + +- Define test plans, and specify their current state. + +- For manual tests, mark the results of each validation step in the test case as passed or failed. + + > [!IMPORTANT] + > Testers must mark a test step with a status if it is a validation test step. The overall result for a test reflects the status of all the test steps that were marked. Therefore, the test will have a status of failed if any test step is marked as failed or not marked. + + For automated tests, each test is automatically marked as passed or failed. + +- To support filtering, assign **Iteration** and **Area** paths to test cases. + +## Interpreting the Report + You can track how many test plans have been run and how many are failing. The Test Plan Progress report displays the cumulative value of all test plans, grouped by result status. + +### Questions Answered by the Report + You can review the report to determine the progress within a sprint or iteration or over time. For example, you can answer these questions: + +- How much testing has the team completed? + +- Is the team likely to finish the testing on time? + +- How many tests are left to be run? + +- How many tests are passing? + +- How many tests are failing? + +- How many tests are blocked? + +### Healthy Version of the Report + A healthy Test Plan Progress report shows a steady progress in test plans running and passing as the following illustration shows. Ideally, the report shows a relatively flat number of test cases for a given plan. As the development cycle progresses, the number of passing test cases should increase, and the numbers of test cases in other states should decrease. + + ![Healthy version of Test Plan Progress](_img/procguid_testplanprogress_healthy.png "ProcGuid_TestPlanProgress_Healthy") + +### Unhealthy Version of the Report + An unhealthy Test Plan Progress report shows one or more of the following indicators: + +- **A high number of test cases are failing**. + + When the chart shows more red than green, more test cases are failing then passing. Depending on where you are in the product cycle, you might investigate why so many test cases are failing. + +- **The number of test cases that are passing remains flat**. + + As the following illustration shows, the number of test cases that are passing, failing, or never run is flat. You might want to investigate the specific causes that affect each area. + + ![Unhealthy version of the Test Plan Progress](_img/procguid_testplanprogress_unhealthy.png "ProcGuid_TestPlanProgress_Unhealthy") + +## Filtering the Report + You can filter the Test Plan Progress report to show only those test cases that are defined for the iteration, product areas, test plans, or test plan states that you specify. The following illustration shows the available filters: + + ![Filters for Test Plan Progress report](_img/procguid_planprogressfilters.png "ProcGuid_PlanProgressFilters") + +#### To change the time interval of the report + +1. Next to **Iteration Start (Date)** or **Iteration End (Date)**, click the calendar icon, and then click the appropriate date. + +2. Click **View Report**. + +#### To filter the test plans or test cases that are counted in the report + +1. Perform one or both of the following actions: + + - In the **Iteration** or **Area** lists, select the check box of each iteration path and product area to include. + + - In the **Test Plan** and **Test Plan State** lists, select the check box of each test plan and test plan state to include. + +2. Click **View Report**. + +## Related notes +- [Reporting Services Reports](reporting-services-reports.md) +- [Agile process](../../work/guidance/agile-process.md) diff --git a/docs/report/sql-reports/test-result-tables.md b/docs/report/sql-reports/test-result-tables.md new file mode 100644 index 00000000000..2f23b2b4020 --- /dev/null +++ b/docs/report/sql-reports/test-result-tables.md @@ -0,0 +1,51 @@ +--- +title: Test Result tables | TFS +description: Query for data about test results +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 0fa44e3e-3033-49e7-a796-eb4fbd12d984 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + +# Test Result tables + + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for data about test results by using the FactTestResult table and the associated dimension tables. For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Test results](perspective-test-analyze-report-test-results.md). + + +## Test Results, Test Suites, and Test Plans + The DimTestResult table provides details about the test results themselves, and you can use the DimTestPlan and DimTestSuite tables to organize the results by test plan and test suite. + + ![Fact Table for Test Results](_img/teamproj_facttestresult.png "TeamProj_FactTestResult") + + + +## Test Results and Test Runs + You can use the DimTestRun, DimConfiguration, and DimPerson dimension tables to include data about how the tests were run. + + ![Fact Table for Test Results with Runs](_img/teamproj_result_other.png "TeamProj_Result_Other") + + +## Test Results and Builds + You can use the DimBuild, DimBuildFlavor, and DimBuildPlatform dimension tables, to include data about the build that was used to create the test results. + + ![Fact Table for Test Results with Builds](_img/teamproj_testresultbuild.png "TeamProj_TestResultBuild") + + +## Test Results and Team Project Data + You can use the DimTeamProject, DimArea, and DimIteration tables to obtain details about how the tests are organized in the team project, and you can use DimDate to show when the test results were created. + + ![Fact Table for Test Results with Other](_img/teamproj_testresultother.png "TeamProj_TestResultOther") + + + +## Related notes +- [Test results](perspective-test-analyze-report-test-results.md) +- [Test Management Reports](../excel/test-management-reports.md) +- [Testing overview](../../manual-test/index.md) +- [Work Item Test Result tables](work-item-test-result-tables.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) diff --git a/docs/report/sql-reports/toc.yml b/docs/report/sql-reports/toc.yml new file mode 100644 index 00000000000..c26a4abb261 --- /dev/null +++ b/docs/report/sql-reports/toc.yml @@ -0,0 +1,152 @@ +- name: "Data Warehouse & SQL Server Reports" + href: index.md +- name: Overview + items: + - name: Reporting Services Reports + href: reporting-services-reports.md +- name: Quickstarts + items: + - name: Create Excel reports from a work item query + href: ../excel/create-status-and-trend-excel-reports.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Grant permissions to view or create reports + href: ../admin/grant-permissions-to-reports.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json +- name: Concepts + items: + - name: Choose data source and authoring tool + href: ../choose-source-data-authoring-tool.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Components of the data warehouse + href: components-data-warehouse.md +- name: How-to Guides + items: + - name: Add reports to a team project + href: ../admin/add-reports-to-a-team-project.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + items: + - name: Add a report server + href: ../admin/add-a-report-server.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Upload reports to a team project + href: ../admin/upload-reports.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Grant permissions to view or create reports + href: ../admin/grant-permissions-to-reports.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Review team activities + href: ../admin/review-team-activities-for-useful-reports.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Manage data warehouse + items: + - name: Manage the data warehouse and cube + href: ../admin/manage-reports-data-warehouse-cube.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Manually process the data warehouse and cube + href: ../admin/manually-process-data-warehouse-and-cube.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Change a process control setting + href: ../admin/change-a-process-control-setting.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Rebuild the data warehouse and cube + href: ../admin/rebuild-data-warehouse-and-cube.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Create and manage Reporting Services reports + href: create-and-manage-reporting-services-reports.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + items: + - name: Create a Report Server Project + href: create-a-report-server-project.md + - name: Create a Detailed Report + href: create-a-detailed-report-using-report-designer.md + - name: Create an aggregate report + href: create-aggregate-report-report-designer-analysis-services-cube.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: "View, organize, and configure reports using Report Manager" + href: ../admin/view-organize-configure-reports-using-report-manager.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: "View, upload, and organize Reporting Services reports" + href: ../admin/view-upload-organize-reporting-services-reports.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json +- name: Reference + items: + - name: Reporting Services reports (TFS) + items: + - name: Backlog Overview (Scrum) + href: backlog-overview-scrum.md + - name: Bug Status + href: bug-status-report.md + - name: Bug Trends + href: bug-trends-report.md + - name: Build Quality Indicators + href: build-quality-indicators-report.md + - name: Build Success Over Time + href: build-success-over-time-report.md + - name: Build Summary + href: build-summary-report.md + - name: Burndown and Burn Rate + href: burndown-and-burn-rate-report.md + - name: Reactivations + href: reactivations-report.md + - name: Release Burndown + href: release-burndown.md + - name: Remaining Work + href: remaining-work-report.md + - name: Requirements Overview (CMMI) + href: requirements-overview-report-cmmi.md + - name: Requirements Progress (CMMI) + href: requirements-progress-report-cmmi.md + - name: Status on All Iterations + href: status-on-all-iterations-report.md + - name: Stories Overview (Agile) + href: stories-overview-report-agile.md + - name: Stories Progress (Agile) + href: stories-progress-report-agile.md + - name: Test Case Readiness + href: test-case-readiness-report.md + - name: Test Plan Progress + href: test-plan-progress-report.md + - name: Unplanned Work + href: unplanned-work.md + - name: Sprint Burndown (Scrum) + href: sprint-burndown-scrum.md + - name: Velocity (Scrum) + href: velocity.md + - name: Data warehouse table reference (TFS) + items: + - name: Data warehouse tables + href: table-reference-relational-warehouse-database.md + - name: Build Changeset tables + href: table-reference-build-changeset.md + - name: Build Coverage tables + href: table-reference-build-coverage.md + - name: Build Details tables + href: table-reference-build-details.md + - name: Build Project tables + href: table-reference-build-project.md + - name: Code Churn tables + href: table-reference-code-churn.md + - name: Current Work Item tables + href: table-reference-current-work-items.md + - name: Run Coverage tables + href: run-coverage-tables.md + - name: Test Result tables + href: test-result-tables.md + - name: Work Item Category tables + href: work-item-category-tables.md + - name: Work Item Changeset tables + href: work-item-changeset-tables.md + - name: Work Item History tables + href: work-item-history-tables.md + - name: Work Item Link History tables + href: work-item-link-history-tables.md + - name: Work Item Test Result tables + href: work-item-test-result-tables.md + - name: Cube perspectives and measure groups + items: + - name: Cube perspectives and measure groups + href: perspective-measure-groups-cube.md + - name: Shared dimensions + href: shared-dimensions-in-the-analysis-services-cube.md + - name: Build details and coverage + href: perspective-build-analyze-report-build-details-coverage.md + - name: Code churn and code coverage + href: perspective-code-analyze-report-code-churn-coverage.md + - name: Test results + href: perspective-test-analyze-report-test-results.md + - name: Work items and test case data + href: perspective-test-analyze-report-work.md +- name: Troubleshooting + items: + - name: Address inaccuracies published for summary values + href: ../address-inaccuracies-published-for-summary-values.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json + - name: Resolve schema conflicts in the data warehouse + href: ../admin/resolve-schema-conflicts.md?toc=/vsts/report/sql-reports/toc.json&bc=/vsts/report/sql-reports/breadcrumb/toc.json +- name: Resources + items: + - name: TFS - Reporting & Warehouse forum + href: https://social.msdn.microsoft.com/Forums/vstudio/home?forum=tfsreporting \ No newline at end of file diff --git a/docs/report/sql-reports/unplanned-work.md b/docs/report/sql-reports/unplanned-work.md new file mode 100644 index 00000000000..332da5bbba0 --- /dev/null +++ b/docs/report/sql-reports/unplanned-work.md @@ -0,0 +1,107 @@ +--- +title: Unplanned Work | TFS +description: Use the Unplanned Work report to determine how much work was added to the iteration that was not planned at the start of the iteration. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 4c174c3c-2e3d-4f09-913d-bbc17b6382a8 +ms.manager: douge +ms.author: kaelli +ms.date: 12/30/2016 +--- +# Unplanned Work +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +Toward the end of an iteration, you can use the Unplanned Work report to determine how much work was added to the iteration that was not planned at the start of the iteration. You can view the unplanned work as measured by work items added, such as tasks, test cases, user stories, and bugs. + + Having unplanned work may be acceptable, especially if the team has scheduled a sufficient buffer for handling the load of unplanned work (for example, bugs). On the other hand, the unplanned work may represent a real problem if the team does not have the capacity to meet it and is forced to cut back on the planned work. + + For information about how to access, refresh, or manage reports, see [Reporting Services Reports](reporting-services-reports.md). + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + +**You can use this report to answer the following questions**:

      - How much work was added after the iteration started?
      - Is too much work being added during the iteration? + + **Required Permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in Reporting Services. For more information, see [Add users to team projects](../../accounts/add-users.md). + +## Data in the Report + The Unplanned Work report is useful when the team plans an iteration by identifying all work items that they intend to resolve or close during the course of the iteration. The work items that are assigned to the iteration by the plan completion date of the report are considered planned work. All work items that are added to the iteration after that date are identified as unplanned work. + +> [!IMPORTANT] +> The plan completion date refers to the date when your team finishes planning for the iteration. + + The following illustration shows an example of the Unplanned Work report. This example is fairly healthy because only 10 items were added after the start of the iteration, representing a 16% increase over the work that was planned + + ![Unplanned Work report](_img/procg_reportunplanned.png "ProcG_ReportUnplanned") + + The data about work item count is derived from the cube, and other parameter information comes from the data warehouse. + + You can filter the report in the following ways: + +- Change the start and end dates for the report. + +- Filter the tasks, stories, test cases, and bugs that are counted in the report by specifying one or more iterations, area paths, and types of work items. + + For more information, see [Filtering the Report and Changing the Display](#Changing) later in this topic. + +### Required Activities for Tracking Unplanned Work + For the Unplanned Work report to be useful and accurate, the team must perform the following activities to track work items: + +- At the start of an iteration, review the backlog of user stories, test cases, tasks, and bugs, and assign each to the iteration during which the team will work on them. + +- As work is identified and added to the iteration, update the **Iteration** field of the work item to match the current iteration. + +- (Optional) To support filtering, assign the **Area** that represents the product area to which the work item belongs. + + > [!NOTE] + > For information about how to define iteration and area paths, see [Define area paths](../../work/customize/set-area-paths.md) or [Define iteration paths](../../work/customize/set-iteration-paths-sprints.md) . + +## Setting the Duration of the Iteration + To review the amount of unplanned work for a current iteration, you must set the planned end date and the start dates for the report to match those of your current iteration cycle. + +#### To change the duration of the iteration + +1. Next to **Plan Completion Date** or **From Date**, click the calendar icon, and then click a date. + +2. Click **View Report**. + +## Interpreting the Report + The Unplanned Work report displays information that you can use to understand how well the team plans its work and whether the team is encountering scope creep during an iteration. + + You can use the Unplanned Work report to understand how well the team is estimating the work that they can complete during an iteration. As a scrum master or project manager, you can use this report to derive historical data about your team. You may want to discuss with your team the idea of having a goal that limits the amount of work added to an iteration to no more than 10% of the planned work. + +### Questions That the Report Answers + You can review the report to determine the amount of scope creep that has occurred throughout an iteration or over time. Specifically, you can find answers to these questions: + +- What is the delta between planned work at the start of the iteration and work performed? + +- Is too much work being added during the iteration? Is the team expanding the scope of the work? + +## Filtering the Report and Changing the Display + You can filter the Unplanned Work report or change its display in the following ways: + +- Change the plan completion date and start dates for the report. + + > [!IMPORTANT] + > The plan completion date refers to the date when your team finishes planning for the iteration. + +- Filter the user stories, bugs, and tasks that appear in the report by specifying iteration and area paths and types of work items. + + The following illustration shows the available filters and display options: + + ![Filters for Unplanned Work report](_img/procg_unplannedwork.png "ProcG_UnplannedWork") + +#### To filter the tasks, user stories, and bugs that appear in the report + +1. Perform one or more of the following actions: + + - In the **Iteration** or **Area** list, select the check box of each iteration or product area to include. + + - In the **Work Item Type** list, select the check box of each work item type to include. + +2. Click **View Report**. + +## Related notes + [Reporting Services Reports](reporting-services-reports.md) \ No newline at end of file diff --git a/docs/report/sql-reports/velocity.md b/docs/report/sql-reports/velocity.md new file mode 100644 index 00000000000..c9a9f9f6c21 --- /dev/null +++ b/docs/report/sql-reports/velocity.md @@ -0,0 +1,65 @@ +--- +title: Velocity (Scrum)| TFS +description: Use the velocity report to forecast release and product completion dates and plan future projects +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 4c2c4f98-ca0f-4003-8292-4c50b66a996c +ms.manager: douge +ms.author: kaelli +ms.date: 02/21/17 +--- +# Velocity +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +If your team has completed multiple sprints, you can forecast release and product completion dates and plan future projects more accurately by reviewing the velocity report. Based on the velocity of previous sprints that the report illustrates, you can accomplish the following goals: + +- Track how much effort your team has reported as complete for each sprint. + +- Estimate how much backlog effort your team can handle in future sprints if your team composition and sprint duration stay constant. + + You can access similar information from the [velocity chart](../guidance/team-velocity.md) provided in the web portal. + +> [!NOTE] +> This report requires that the team project collection that contains your team project was provisioned with SQL Server Reporting Services. This report is not available if ![Report](_img/icon_reportte.png "Icon_reportTE") **Reports** does not appear when you open Team Explorer and expand your team project node. + + **Required permissions** + + To view the report, you must be assigned or belong to a group that has been assigned the **Browser** role in SQL Server Reporting Services. For more information, see [Grant permissions to view or create reports in TFS](../admin/grant-permissions-to-reports.md). + +## Data in the report + As the following illustration shows, a velocity graph shows the amount of effort that your team has reported as complete for each sprint. The source of the raw data is your product backlog. Each sprint that has been assigned to the team project or to the team appears along the horizontal axis. The vertical axis indicates the sum of all effort for all backlog items assigned to the indicated sprint that have been closed (State=Done). The vertical axis shows effort in whatever unit your team uses (for example, story points, size, or hours). + + The graph also displays a horizontal line that represents the average velocity across all the sprints. + + ![Velocity chart (Scrum process template)](_img/scrum_velocity.png "Scrum_Velocity") + + You can filter the report by selecting the **Iteration** or **Area**. + +### Required activities for tracking velocity + For the velocity graph to be useful and accurate, your team must perform the following activities for tracking work items: + +- [Define sprints](../../work/scrum/define-sprints.md) for your team. + +- Define product backlog items and bugs, and assign them to an **Iteration** and to your team's **Area** path. + +- Specify and update the **Effort** for each product backlog item and each bug that is active. + +- Update the **State** of each product backlog item and each bug as it progresses from **New** to **Done**. + + + +## Interpreting the report + You can review the report to determine how much progress your team has made and to answer the following questions: + +- How much effort has your team completed in each sprint? + +- What is the maximum velocity of your team? + +- What is the minimum velocity of your team? + +- What is the average velocity of your team? + +## Related notes + [Scrum process](../../work/guidance/scrum-process.md) + [Define iteration paths (sprints)](../../work/customize/set-iteration-paths-sprints.md) + [Velocity chart and widget](../guidance/team-velocity.md) \ No newline at end of file diff --git a/docs/report/sql-reports/work-item-category-tables.md b/docs/report/sql-reports/work-item-category-tables.md new file mode 100644 index 00000000000..7381a0f00ac --- /dev/null +++ b/docs/report/sql-reports/work-item-category-tables.md @@ -0,0 +1,31 @@ +--- +title: Work Item Category tables | TFS +description: Query for categories of work items defined in Team Foundation Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: ae8ea834-400f-4cda-98d4-a7e612c91cce +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + +# Work Item Category tables + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for categories of work items by using the FactWorkItemToCategory and DimWorkItemCategory tables. You can organize the results of other work item queries by category if you join these tables with the DimWorkItem by using `FactWorkItemToCategory.WorkItemTypeName = DimWorkItem.System_WorkItemType`. + + For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Test cases and work items](perspective-test-analyze-report-work.md). + + ![Fact Tables for Work Item Category](_img/teamproj_factworkitemcategory.png "TeamProj_FactWorkItemCategory") + + FactWorkItemToCategory is associated with the following dimension tables: + +- DimWorkItem + +- DimWorkItemCategory + +## Related notes +- [Test cases and work items](perspective-test-analyze-report-work.md) +- [Use categories to group work item types](../../work/reference/use-categories-to-group-work-item-types.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) \ No newline at end of file diff --git a/docs/report/sql-reports/work-item-changeset-tables.md b/docs/report/sql-reports/work-item-changeset-tables.md new file mode 100644 index 00000000000..bcb4aff92a3 --- /dev/null +++ b/docs/report/sql-reports/work-item-changeset-tables.md @@ -0,0 +1,30 @@ +--- +title: Work Item Changeset tables | TFS +description: Query for data about work items that are linked to changesets +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 0c017c1e-b19b-40b6-9927-b88b48700976 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Work Item Changeset tables + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for data about work items that are linked to changesets by using FactWorkItemChangeset and the associated dimensions. For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Test cases and work items](perspective-test-analyze-report-work.md). + + ![Fact Table for Work Items Linked to Changesets](_img/teamproj_factworkchangeset.png "TeamProj_FactWorkChangeset") + + FactWorkItemChangeset is associated with the following dimension tables: + +- DimChangeset + +- DimPerson + +- DimWorkItem + +## Related notes +- [Test cases and work items](perspective-test-analyze-report-work.md) +- [Find and view changesets](../../tfvc/find-view-changesets.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) \ No newline at end of file diff --git a/docs/report/sql-reports/work-item-history-tables.md b/docs/report/sql-reports/work-item-history-tables.md new file mode 100644 index 00000000000..57c48f8fcaf --- /dev/null +++ b/docs/report/sql-reports/work-item-history-tables.md @@ -0,0 +1,87 @@ +--- +title: Work Item History tables | TFS +description: Query for historical data about bugs, tasks, and other types of work items defined in an on-premises Team Foundation Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 54f07bd4-dc55-4f68-a28e-e61ccce77060 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- + +# Work Item History tables + +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for historical data about bugs, tasks, and other types of work items by using FactWorkItemHistory and the associated dimension tables as the following illustration shows. Historical data provides information about the status of a work item or a value of a field for a work item as it changed over time. Progress and burndown charts are examples of reports that are built from work item history tables. The data is stored by using compensating records. + + For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Test cases and work items](perspective-test-analyze-report-work.md). + + ![Fact Table for Work Item History](_img/teamproj_itemhistory.png "TeamProj_ItemHistory") + + FactWorkItemHistory is associated with the following dimension tables: + +- DimArea + +- DimIteration + +- DimPerson + +- DimTeamProject + +- DimWorkItem + + You can use the following sample query to find the historical workload trend for the period between 2009-09-21 and 2009-09-30 for certain user stories. For each user story in the team project, this query returns information about the total completed work, the original estimated work, the remaining work, and the total story points for every day during that period. + +> [!NOTE] +> This query assumes that a user story is linked to other work items through child links. + +``` +declare @TeamProjectNodeSK int +select @TeamProjectNodeSK = ProjectNodeSK from GetProjectNodeInfoFromReportFolder(N'/TfsReports/VSTSDF/ProcessDev10') +-- This table value function returns the ProjectNodeSK: the Surrogate Key of a team project under a certain area path. + +declare @TeamProjectCollectionGuid nvarchar(36) +select @TeamProjectCollectionGuid = pc.ProjectNodeGUID from DimTeamProject p inner join DimTeamProject pc on p.ParentNodeSK = pc.ProjectNodeSK where p.ProjectNodeSK = @TeamProjectNodeSK +-- This query finds the team project collection GUID by joining TeamProject.ParentNodeSK to TeamProject.ProjectNodeSK +``` +
      + +``` +select +    d.DateSK +    ,wi.System_Title +    ,wi.System_Id +    ,coalesce(sum(wih_child.Microsoft_VSTS_Scheduling_CompletedWork), 0) as Total_CompletedWork, -- Finds the total number of hours of completed work. + coalesce(sum(wih_child.Microsoft_VSTS_Scheduling_OriginalEstimate), 0) as Total_OriginalEstimate --Finds the total number of hours of original estimate. +    ,coalesce(sum(wih_child.Microsoft_VSTS_Scheduling_RemainingWork), 0) as Total_RemainingWork--Finds the total number of hours of remaining work. +    ,coalesce(sum(wih_child.Microsoft_VSTS_Scheduling_StoryPoints), 0) as Total_StoryPoints --Finds the total story points. +from +    DimDate d +cross apply +    DimWorkItem wi +cross apply +    GetWorkItemsTree(@TeamProjectCollectionGuid, wi.System_Id, +N'Child', d.DateSK) wit +left join           +    FactWorkItemHistory wih_child   +        on wih_child.WorkItemSK = wit.ChildWorkItemSK +where +    d.DateSK >= N'2009-09-21 00:00:00.000' +    and d.DateSK <= N'2009-9-30 00:00:00.000' +    and wi.TeamProjectSK = @TeamProjectNodeSK +    and wi.System_WorkItemType = N'User Story' +    and wi.System_ChangedDate <= d.DateSK +    and wi.System_RevisedDate > d.DateSK +    and wi.System_State = N'Active' +    and (wih_child.RecordCount != -1 or wih_child.RecordCount is null) +group by d.DateSK, wi.System_Id, wi.System_Title +``` + + +## Related notes +- [COALESCE (Transact-SQL)](https://msdn.microsoft.com/library/ms190349.aspx) +- [Test cases and work items](perspective-test-analyze-report-work.md) +- [Burndown](../excel/burndown-excel-report.md) +- [Test Team Progress](../excel/test-team-progress-excel-report.md) +- [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) \ No newline at end of file diff --git a/docs/report/sql-reports/work-item-link-history-tables.md b/docs/report/sql-reports/work-item-link-history-tables.md new file mode 100644 index 00000000000..52feeb2951c --- /dev/null +++ b/docs/report/sql-reports/work-item-link-history-tables.md @@ -0,0 +1,81 @@ +--- +title: Work Item Link History tables | TFS +description: Use Work Item Link History tables to query for links between bugs, tasks, and other types of work items. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 8fc040dc-8ff4-4ca6-be89-86a60a460cfa +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Work Item Link History tables +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for links between bugs, tasks, and other types of work items by using FactWorkItemLinkHistory and the associated dimension tables. To include details about the linked work items, you join SourceWorkItemID and TargetWorkItemID to Dim.System_ID. + + For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Test cases and work items](perspective-test-analyze-report-work.md). + + ![Fact Table for Links between Work Items](_img/teamproj_worklinkhistory.png "TeamProj_WorkLinkHistory") + + FactWorkItemLinkHistory is associated with the following dimension tables: + +- DimTeamProject + +- DimPerson + +- DimWorkItem + +> [!NOTE] +> This table contains links that have been removed. Links that have not been removed have the RemovedDate set to Jan 1, 9999. When a link is removed, the removed date is set to the date and time when it was removed. You can use `RemovedDate > GetDate()` to filter out links that have been removed. + + You can use the following sample query to find the following types of information: + +- total number of hours for completed work + +- original estimated work + +- remaining work + +- total story points for each user story in a team project under a specified area path + + For information about the Coalesce function that is used in the sample query, see the following page on the Microsoft Web site: [COALESCE (Transact-SQL)](http://go.microsoft.com/fwlink/?LinkId=178080). + +> [!NOTE] +> This query assumes that a user story is linked to other work items through Child links. + +``` +declare @TeamProjectNodeSK int +select @TeamProjectNodeSK = ProjectNodeSK from GetProjectNodeInfoFromReportFolder(N'/TfsReports/VSTSDF/ProcessDev10') +-- This table-value function returns the ProjectNodeSK: the Surrogate Key of a team project under a certain area path. + +declare @TeamProjectCollectionGuid nvarchar(36) +select @TeamProjectCollectionGuid = pc.ProjectNodeGUID from DimTeamProject p inner join DimTeamProject pc on p.ParentNodeSK = pc.ProjectNodeSK where p.ProjectNodeSK = @TeamProjectNodeSK +-- This query finds the team project collection GUID by joining TeamProject.ParentNodeSK to TeamProject.ProjectNodeSK + +select +     wi.System_Title +    ,wi.System_Id +    ,coalesce(sum(cwi_child.Microsoft_VSTS_Scheduling_CompletedWork), 0) as Total_CompletedWork -- Finds the total number of hours of completed work. +   ,coalesce(sum(cwi_child.Microsoft_VSTS_Scheduling_OriginalEstimate), 0) as Total_OriginalEstimate --Finds the total number of hours of original estimate. +    ,coalesce(sum(cwi_child.Microsoft_VSTS_Scheduling_RemainingWork), 0) as Total_RemainingWork --Finds the total number of hours of remaining work. +    ,coalesce(sum(cwi_child.Microsoft_VSTS_Scheduling_StoryPoints), 0) as Total_StoryPoints --Finds the total story points. +from +    DimWorkItem wi +cross apply +    GetWorkItemsTree(@TeamProjectCollectionGuid, wi.System_Id, N'Child', DEFAULT) wit +left join       +    FactCurrentWorkItem cwi_child +        on cwi_child.WorkItemSK = wit.ChildWorkItemSK +where +    wi.TeamProjectSK = @TeamProjectNodeSK +    and wi.System_WorkItemType = N'User Story' +    and wi.System_RevisedDate = CONVERT(datetime, '9999', 126)--The revised date of the work item is equal to today. +    and wi.System_State = N'Active' +group by wi.System_Id, wi.System_Title +order by wi.System_Id +``` + +## Related notes + [Test cases and work items](perspective-test-analyze-report-work.md) + [Define a custom link type](../../work/reference/define-custom-link-type.md) + [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) \ No newline at end of file diff --git a/docs/report/sql-reports/work-item-test-result-tables.md b/docs/report/sql-reports/work-item-test-result-tables.md new file mode 100644 index 00000000000..61ab438667c --- /dev/null +++ b/docs/report/sql-reports/work-item-test-result-tables.md @@ -0,0 +1,32 @@ +--- +title: Work Item Test Result tables | TFS +description: Use Work Item Test Result tables to query for data about work items that are linked to test results. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-reporting +ms.assetid: 33dbfef7-c17b-4884-9a33-cfc61a1d7cd6 +ms.manager: douge +ms.author: kaelli +ms.date: 03/09/2017 +--- +# Work Item Test Result tables +[!INCLUDE [temp](../_shared/tfs-header-17-15.md)] + +You can query for data about work items that are linked to test results by using FactWorkItemTestResult and the associated dimension tables. For information about the measures and dimensions that are associated with these tables in the SQL Server Analysis Services cube, see [Test results](perspective-test-analyze-report-test-results.md). + + ![Fact Table for Work Items linked to Test Results](_img/teamproj_worktestresult.png "TeamProj_WorkTestResult") + + FactWorkItemTestResult is associated with the following dimension tables: + +- DimTeamProject + +- DimTestResult + +- DimWorkItem + +## Related notes + [Test results](perspective-test-analyze-report-test-results.md) + [Test Result tables](test-result-tables.md) + [Current Work Item tables](table-reference-current-work-items.md) + [Test Management Reports](../excel/test-management-reports.md) + [Testing overview](../overview.md) + [Table reference for the relational warehouse database](table-reference-relational-warehouse-database.md) diff --git a/docs/report/team-dashboard.md b/docs/report/team-dashboard.md new file mode 100644 index 00000000000..3ad6dd71738 --- /dev/null +++ b/docs/report/team-dashboard.md @@ -0,0 +1,72 @@ +--- +title: TFS team home page or dashboard +description: View progress and gain quick access to code, builds, and work items from the team home page in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: 2F69B746-DB11-4AD2-8003-5D39D0D17070 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2016 +--- + +# Pin items to a team dashboard (TFS) + +TFS 2015 | TFS 2013 + +>[!NOTE] +>**Feature availability:** For on-premises TFS, install TFS 2015 Update 1 to get access to [multiple team dashboards](dashboards.md) and [widgets](widget-catalog.md) that you can add to these dashboards.   + +Teams can view the progress of work from the team home page. Team administrators can add or pin items to this dashboard and re-sequence tiles. Each tile provides team members quick access to work items, build progress, code changes, and more. + +From the web portal, you can view pinned items on the home page, including flat-list query charts. + +![Team dashboard](_img/on-premises-tfs-team-dashboard.png) + +If you need to add a team first, see [Multiple teams](../work/scale/multiple-teams.md). + +##Pin items to a dashboard + +You pin an item to the team dashboard from the code, work, and build pages. + +1. If you aren't a team administrator, [get added as one](../work/scale/manage-team-assets.md). + +2. Pin a work item query from its context menu. + + ![Pin query from context menu](_img/tfs-pin-to-homepage.png) + + To add a source control folder or a build definition, open the corresponding page and access the pin feature in the same way. + +3. To pin a chart, go to the query's Charts page and pin it to your selected dashboard or the team homepage. + + ![Chart context menu](_img/tfs-pin-to-homepage.png) + +4. Drag tiles to reorder their sequence on the dashboard. + + Using Internet Explorer 10 or Internet Explorer 11, you can also tab to a tile and press Shift+L or Shift+R to move the selected tile to the left or to the right. + +5. Click a tile or link to open it. + +###Remove an item or chart from your dashboard + +Choose the ellipses for any tile to remove it from a dashboard. + +![From a dashboard tile, choose the tile ellipses and select remove]](_img/add-a-dashboard-remove-tile.png) + +Either choose the context menu for the item that you want to remove and select Unpin from the home page, or drag it from the Team favorites section. + +![Unpin an item from the team homepage](_img/tfs-unpin-from-homepage.png) + +##Related notes + +- [Define queries](../work/track/using-queries.md) +- [Define builds](../build-release/overview.md) +- [Test charts](../manual-test/getting-started/track-test-status.md) + + + + +###Switch team context + +You navigate to your team context from the top navigation bar. + +![Choose another team from the team project menu](_img/switch-team-context.png) diff --git a/docs/report/toc.yml b/docs/report/toc.yml new file mode 100644 index 00000000000..fc1e8a7f4ad --- /dev/null +++ b/docs/report/toc.yml @@ -0,0 +1,58 @@ +- name: Dashboards + href: index.md +- name: Overview + items: + - name: "Charts, dashboards, and widgets" + href: overview.md +- name: Quickstarts + items: + - name: Add and manage dashboards + href: dashboards.md + - name: Add widgets to a dashboard + href: add-widget-to-dashboard.md +- name: Tutorials + items: + - name: Configure burndown or burnup widgets + href: guidance/configure-burndown-burnup-widgets.md + - name: Configure a cumulative flow chart + href: guidance/cumulative-flow.md + - name: Configure a lead/cycle time widget + href: guidance/cycle-time-and-lead-time.md + - name: Configure or view Velocity charts + href: guidance/team-velocity.md + - name: Work with sprint burndown + href: /vsts/work/scrum/sprint-burndown?toc=/vsts/report/toc.json&bc=/vsts/report/breadcrumb/toc.json +- name: Concepts + items: + - name: Cumulative flow, lead time, and cycle time guidance + href: guidance/cumulative-flow-cycle-lead-time-guidance.md + - name: Velocity guidance + href: guidance/velocity-guidance.md + - name: Burndown guidance + href: guidance/burndown-guidance.md +- name: How-to Guides + items: + - name: Add charts to a dashboard + href: add-charts-to-dashboard.md + - name: Add Markdown to a dashboard + href: add-markdown-to-dashboard.md + - name: Configure work item query-based charts + href: charts.md + - name: "Configure test status, progress, & result charts" + href: /vsts/manual-test/getting-started/track-test-status?toc=/vsts/report/toc.json&bc=/vsts/report/breadcrumb/toc.json + - name: Set dashboard permissions + href: dashboard-permissions.md +- name: Reference + items: + - name: Widget catalog + href: widget-catalog.md +- name: Resources + items: + - name: Agile + href: /vsts/#pivot=services&panel=agile + - name: Testing + href: /vsts/#pivot=services&panel=testing + - name: Build a dashboard widget + href: /vsts/extend/develop/add-dashboard-widget + - name: Marketplace widgets + href: https://marketplace.visualstudio.com/search?term=widget&target=VSTS&category=All%20categories&sortBy=Relevance diff --git a/docs/report/widget-catalog.md b/docs/report/widget-catalog.md new file mode 100644 index 00000000000..e372c8c35b3 --- /dev/null +++ b/docs/report/widget-catalog.md @@ -0,0 +1,420 @@ +--- +title: Catalog of widgets supported for team dashboards in VSTS or TFS +description: Determine which widgets you want to add to your dashboards when working in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-reporting +ms.assetid: C9FD12C0-033E-4A4D-AF63-6EF67E7B4828 +ms.manager: douge +ms.author: kaelli +ms.date: 08/10/2017 +--- + +# Widget catalog + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015.1-2015.3** + +> [!NOTE] +> **Feature availability**: You can access the widget catalog from VSTS or the web portal for TFS 2015.1 or later version. All widgets listed below are available from the web portal for VSTS. Some widgets listed below are only available when you connect to TFS 2015 Update 2 or later version. +> +> With TFS 2015, you have access to a [single team dashboard](team-dashboard.md) with which you can pin items but can't add widgets to the dashboard. Install [TFS 2015 Update 1](https://www.visualstudio.com/news/tfs2015-update1-vs.aspx) or later version to get access to the widget catalog and [multiple team dashboards](dashboards.md). +To determine the platform and version you're on, see [Provide product and content feedback, Platforms and version support](../provide-feedback.md#platform-version). + + +To add a widget to a dashboard or copy a widget from one dashboard to another, see [Add a widget to a dashboard](add-widget-to-dashboard.md). + +## User-focused and team-scoped widgets + +User-focused widgets display information based on the logged-in user. + +Team-scoped widgets display data based on the selected team context. + + +## Code + + +### Code tile + +![Code tile widget](_img/widget-code-tile.png) + +Adds a configurable tile to display the summary of a code folder or Git repository. To configure, simply click the added tile, select a repository, select a branch (Git only) and select a path. The code tile supports both TFVC and Git repositories. + +---- + + +### Pull request (user-focused or team-scoped) + +![Pull request widget](_img/widget-catalog-pull-request.png) + +> [!NOTE] +> **Feature availability:** Available from VSTS or TFS 2015.2 or later version.    + + + +Adds a configurable tile to display active pull requests requested by the team, or assigned to or requested by the person logged in. Select the Git repository for the pull requests of interest. + +You need to add a widget for each Git repository of interest. +To learn more about pull requests, see [Review code with pull requests](../git/pull-requests.md). + + + + + +## Plan and track work + + +### Assigned to me (user-focused) + +![Assigned to me widget](_img/widget-assigned-to-me.png) + +> [!NOTE] +> **Feature availability:** You can access this widget from VSTS and TFS 2017.    + + + +Displays the list of work items currently assigned to the currently logged in user. The list ignores closed or deleted work items. + + + + + + +---- +### Chart for work items + + + +![Chart work item query widget](_img/widget-chart-work-query.png) + +> [!NOTE] +> **Feature availability:** You can access this widget from VSTS or TFS 2015.2 or later version. For TFS 2015.1 and earlier versions, see [Add charts to a dashboard](add-charts-to-dashboard.md#add-charts) to add shared query charts to a dashboard.    + +Adds a tile to display a progress or trend chart that builds off a shared work item query. +From the configuration dialog, select a shared query and [specify the chart type and values](charts.md#add-chart-widget). + + +---- + + +### Cumulative flow diagram (team-scoped) + +![Cumulative flow diagram widget](_img/widget-cfd-chart.png) + +> [!NOTE] +> **Feature availability:** This widget is available for VSTS. To add it to your dashboard, you first need to install the [Analyics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics). You can then [add the widget(s) to your dashboard](add-widget-to-dashboard.md). You must be an account owner or a member of the [Project Collection Administrator group](../tfs-server/add-administrator-tfs.md) to add extensions. +  + +Displays the cumulative flow of backlog items based on the time frame, team, backlog level and swimlane you select. + +From the configuration dialog, [specify the team, backlog level, and other parameters you want](guidance/cumulative-flow.md#configure-widget). + +Hover over each color within the chart to see the count of items for a particular Kanban column. + + +---- + +### Cycle time (team-scoped) + +![Cumulative flow diagram widget](_img/widget-cycle-time.png) + +> [!NOTE] +> **Feature availability:** This widget is available for VSTS. To add it to your dashboard, you first need to install the [Analyics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics). You can then [add the widget(s) to your dashboard](add-widget-to-dashboard.md). You must be an account owner or a member of the [Project Collection Administrator group](../tfs-server/add-administrator-tfs.md) to add extensions. +  + +Displays the cycle time of work items closed in a specified timeframe for a single team and backlog level. The cycle time of a work item is defined as the time taken to close a work item after work on it has started. + +Each marker on the chart corresponds to one or more work items with a particular cycle time. The lower the cycle time, the faster work is progressing through your development pipeline. + + +---- + +### Lead time (team-scoped) + +![Lead time widget](_img/widget-lead-time.png) + +> [!NOTE] +> **Feature availability:** This widget is available for VSTS. To add it to your dashboard, you first need to install the [Analyics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics). You can then [add the widget(s) to your dashboard](add-widget-to-dashboard.md). You must be an account owner or a member of the [Project Collection Administrator group](../tfs-server/add-administrator-tfs.md) to add extensions. +  + +Displays the lead time of work items closed in a specified timeframe for a single team and backlog level. The lead time of a work item is defined as the time taken to close a work item after it was created. + +Each marker on the chart corresponds to one or more work items with a particular lead time. The lower the lead time, the faster work is being delivered to the customer. + +---- + + +### New Work item (team-scoped) + + +![New work item widget](_img/widget-new-work-items.png) + +Enables you to add work items from the dashboard. You [use work items to plan and track work](../work/backlogs/add-work-items.md).

      + +Work items that you add using this widget are automatically scoped to the team's default area path and the team's current sprint (TFS) or the default iteration (VSTS). To change team defaults, see [Set team defaults](../work/scale/set-team-defaults.md). + + +---- + + +### Other links (team-scoped) + +![Other links widget](_img/widget-other-links.png) + +Provides links to the following features: +- Opens a form to initiate a [request to provide feedback](/vsts/work/connect/get-feedback?toc=/vsts/feedback/toc.json). +- Opens the team's quick dialog to add or modify the active sprints or iteration paths for your team. To learn more see [Define sprints](../work/scrum/define-sprints.md). +- Opens the team's quick dialog to modify your [team's area path](../work/scale/set-team-defaults.md). + +For on-premises TFS, additional links are displayed when the corresponding resource is configured for the team project: + +**On-premises TFS with configured resources** + +![Other links widget](_img/widget-other-links-tfs.png) + +- [View project portal](sharepoint-dashboards/share-information-using-the-project-portal.md) (opens either a SharePoint site or URL that's been configured as the team project's portal. +- [View process guidance](sharepoint-dashboards/configure-or-redirect-process-guidance.md) (opens either a SharePoint site or URL that's been configured as the team project's process guidance. +- [View reports](sql-reports/reporting-services-reports.md) (opens SQL Server Reporting Services). To add or update reports for a team project, see [Add reports to a team project](./admin/add-reports-to-a-team-project.md). + + +---- + + +### Query results + + +![Query results widget](_img/widget-query-results.png) + +Adds a configurable tile that lists the results of a shared query. +From the configuration dialog, select either a team favorite or shared query. +To create a shared query, see [Use the query editor to list and manage queries](../work/track/using-queries.md). + + +---- + +### Query tile + +![Query tile widget](_img/widget-query-tile.png) + +Adds a configurable tile to display the summary of a shared query results. +From the configuration dialog, select either a team favorite or shared query. You can optionally specify rules to change the query tile color based on the number of work items returned by the query. +To create a shared query, see [Use the query editor to list and manage queries](../Work/track/using-queries.md). + + +---- + + + +### Sprint burndown (team-scoped) + +![Sprint burndown widget](_img/widget-sprint-burndown.png) + +Adds the team's burndown chart for the current sprint to the dashboard. This chart always displays data for the current sprint. +Teams [use the burndown chart to mitigate risk and check for scope creep](../work/scrum/sprint-burndown.md) throughout the sprint cycle. + + +---- + + +### Sprint capacity (team-scoped) + +![Sprint capacity widget](_img/widget-sprint-capacity.png) + + +Inserts the team's capacity bar chart for the current sprint. +Teams [specify their capacity to plan and monitor their sprint resources](../work/scale/capacity-planning.md). + +---- + +### Sprint overview (team-scoped) + +![Sprint overview widget](_img/widget-sprint-overview.png) + + +For VSTS, inserts a configurable overview of sprint progress. You can choose between a count of story points or number of work items. +For on-premises TFS, inserts a visual overview of sprint progress indicating the number of backlog items in progress, completed, or not started. + +Teams [plan their sprints by defining sprints](../work/scale/set-team-defaults.md) and [assigning backlog items to an iteration](../work/scrum/sprint-planning.md). + +---- + +### Velocity (team-scoped) + +![Sprint velocity widget](_img/widget-velocity.png) + +> [!NOTE] +> **Feature availability:** This widget is available for VSTS. To add it to your dashboard, you first need to install the [Analyics Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics). You can then [add the widget to your dashboard](add-widget-to-dashboard.md). You must be an account owner or a member of the [Project Collection Administrator group](../tfs-server/add-administrator-tfs.md) to add extensions. + + +The velocity widget tracks a team's capacity to deliver work sprint after sprint. You configure the widget by selecting a team, a work item type, an aggregation field, and the number of sprints. The widget takes advantage of the Analytics service. You can track the velocity for a single team, not multiple teams. +For additional guidance, see [Velocity](guidance/team-velocity.md). + + +---- + +### Work links (team-scoped) + +![Work links widget](_img/widget-work-links.png) +Provides quick access to open the following Agile tools and team resources: + +- [Backlog](../Work/backlogs/create-your-backlog.md) +- [Kanban Board](../Work/kanban/kanban-basics.md) +- [Task board](../Work/scrum/task-board.md) +- [Queries](../Work/track/using-queries.md) + + +## Build, test, release + + +### Chart for build history + +![Build history widget](_img/widget-build-history-chart.png) + +> [!NOTE] +> **Feature availability:** You can access this widget from VSTS or TFS 2015.2 or later version. For TFS 2015.1 and earlier versions, see [Add charts to a dashboard](add-charts-to-dashboard.md#add-charts) to add a build summary chart to a dashboard.   + +Adds a tile to display a histogram of all builds run for the configured build definition. +From the configuration dialog, select the build you want to monitor. +Hover over a bar to learn how long the build took to complete. Click the bar to open the summary for that specific build. Bar color indicates: green-completed, red-failed, and yellow-completed without tests. + +---- + + +### Deployment status + +![Deployment status widget](_img/widget-deployment-status.png) + +> [!NOTE] +> **Feature availability:** You can access this widget from VSTS or TFS 2017.1 or later versions.   + +Configurable widget that shows a consolidated view of the deployment status and test pass rate across multiple environments for a recent set of builds. You configure the widget by specifying a build definition, branch, and linked release definitions. + +To learn more, see [View and manage releases](../build-release/actions/view-manage-releases.md#release-overview). + + +---- + +### Release definition overview + +![Release definition overview widget](_img/widget-release-definitions.png) + +> [!NOTE] +> **Feature availability:** You can access this widget from VSTS.    + +Configurable widget that you can use to view and track the status of a release definition. The widget shows the release as a series of environments, with the name of the release and the date or time it was started. The color of the heading and the icon in each environment indicate the current status of the release, which are the same as are used on the **Releases** page. Select a release definition in the left column to filter the list to just releases for that definition. +To learn more, see [Add release information to the dashboard](../build-release/actions/view-manage-releases.md#add-widget). + +---- + +### Requirements quality + + +![Requirements quality widget](_img/widget-requirements-quality.png) + +> [!NOTE] +> **Feature availability:** You can access this widget from VSTS or TFS 2017.    + +Configurable widget that you can use to track quality continuously from a build or release definition. +To learn more, see [Associate automated test results with requirements](../build-release/test/associate-automated-results-with-requirements.md). + +---- + +### Test results trend + +![Test results trend widget](_img/widget-test-results-trend.png) + +> [!NOTE] +> **Feature availability:** You can access this widget from VSTS or TFS 2017.    + +Adds a configurable tile that displays the trend of test results, such as passed or failed tests, for the selected build definition. + +From the configuration dialog, select the build whose test results you'd like to monitor. Then, choose the type of chart you want displayed. You can track the trend of test duration by adding an optional line chart. + +To learn more about creating charts for tracking test results, see [Track your test results](../manual-test/getting-started/track-test-status.md). + + +## Informational content and other links + + +### Embedded web page + +![Embedded web page widget](_img/embedded-web-page-widget.png) + +> [!NOTE] +> **Feature availability:** You can access this widget from VSTS or TFS 2017 or later version.   + +Adds a configurable tile to display the contents of a web page. Only webpages that allow [iframe embedding](http://go.microsoft.com/fwlink/?LinkId=808035) are supported. + +---- + + +### Markdown + + +![Markdown widget](_img/widget-markdown-tile.png) + +> [!NOTE] +> **Feature availability:** For VSTS and TFS 2015.2 or later versions, you can configure the widget to point to a file stored in your repository.   +  +Adds a configurable tile to display any type of information, guidance, or links that you want. +From the configuration dialog, add the information you want to share with your team. + +To learn more about markdown format, see [Markdown guidance](../reference/markdown-guidance.md). + + +---- + +### Team members (team-scoped) + +![Team members widget](_img/widget-team-members.png) + +Sows team member profiles and, on-hover, their user account alias. +For team admins, supports access to the quick dialog to [add or remove team members](../work/scale/multiple-teams.md). + + +> [!NOTE] +> This widget is a convenient way to add team members to specific teams within projects. If you remove it, you can still [add members to your team from the team administration page](../work/scale/multiple-teams.md#add-team-members). + +---- + +### Team room (team-scoped) + +![Team room widget](_img/widget-team-room.png) + +Provides status and access to [team rooms](../collaborate/collaborate-in-a-team-room.md). +Team rooms support increased team productivity by providing a space to discuss work in progress, ask questions, share status, and clarify issues that arise. Team administrators can create additional team rooms. + +---- + +### Visual Studio Shortcuts + +![Visual Studio widget](_img/widget-visual-studio.png) + +Provides links to open or download Visual Studio. The Visual Studio IDE client comes with the [Team Explorer plug-in](../connect/work-team-explorer.md) which provides quick access to several features (some of which aren't available through the web portal). + +---- + +### Welcome + +![How to links widget](_img/widget-how-to-links.png) + +Provides links to the Work, Code, and Build hubs and reference documentation on how to add charts. + + +## Related notes + +These represent the basic widgets. Look forward to more widgets becoming available in the coming months. + +### Marketplace widgets + +You may find additional widgets of interest from the [Marketplace](https://marketplace.visualstudio.com/search?term=webpage%20widget&target=VSTS&sortBy=Relevance). + +If your account or project collection administrator disables a marketplace widget, you'll see the following image: + +Disabled widget extension notification + +To regain access to it, request your admin to reinstate or reinstall the widget. + +### Extensibility + +Using the REST API service, you can [create a dashboard widget](../extend/develop/add-dashboard-widget.md). To learn more about the REST APIs for dashboards and widgets, see [Dashboards](https://www.visualstudio.com/en-us/docs/integrate/api/dashboard/dashboards). + + diff --git a/docs/roles.md b/docs/roles.md new file mode 100644 index 00000000000..06b721f8139 --- /dev/null +++ b/docs/roles.md @@ -0,0 +1,124 @@ +--- +title: Sofware development roles supported by VSTS & TFS +description: Understand how our tools and services support the various roles supported in software development when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 4600B0D9-3799-4902-814B-F6EC9098C4CE +ms.manager: douge +ms.author: kaelli +ms.date: 12/07/2016 +--- + +#Software development roles supported by VSTS and TFS + +VSTS | TFS 2017 | TFS 2015 + +If you are a sole developer, or work on a small team, chances are that you participate in many activites—performing tasks associated with issue tracking, feature planning, coding, testing, build, and deployment. + +However, if you work within a large organization, you're probably more focused on a specific set of tasks that are traditionally aligned with one or two specific roles, such as software development, project management, and DevOps. + +This topic provides a roadmap to support you in quickly coming up to speed on the features and tasks available to you based on the role you perform. + +##Contributor roles + +Team members are contributors who have access to the code base, work item tracking, Agile tools, build definitions, test tools, and more. If you need to lock down specific areas to a select set of contributors, you can do that through the [permission management](security/permissions.md). + +### Software developers +Developers use Visual Studio or other [tools](tools.md) to develop their applications. They then check in their changes to a Git or TFVC repository hosted in VSTS or TFS. From the web portal or supported IDE, they can view repositories, check history, and more. + +- To get started using Git, see one of these resources: + - [Share your code with Git and Visual Studio](git/share-your-code-in-git-vs.md). + - [Share your code in Git using Eclipses](git/share-your-code-in-git-eclipse.md). + - [Share your code in Git using Xcode](git/share-your-code-in-git-xcode.md). + - [Share your code in Git using IntelliJ](http://java.visualstudio.com/docs/tools/intellij). + - [Get Started with Git and VSTS](git/gitquickstart.md). +- To get started using TFVC, see one of the following resources: + - [Develop and share your code in TFVC using Visual Studio](tfvc/share-your-code-in-tfvc-vs.md) + - [Share your code in TFVC using Eclipse](tfvc/share-your-code-in-tfvc-eclipse.md) + - [Share your code in TFVC using Xcode](tfvc/share-your-code-in-tfvc-xcode.md) + +### Project managers + +The role of project manager typically encompasses planning the feature set to deliver, setting priorities, and tracking the status of work, code defects, and customer issues. The suite of web-based Agile tools provide PMs with the views and features they need to perform these tasks. All work is captured within a work item. Each work item represents a specific type such as a user story, task, or bug. + +- Use the product backlog to quickly define and prioritize user stories, features, and other work items +- Use the sprint backlog and task board to implement Scrum practices +- Use the Kanban board to work with Kanban methods +- Use queries to list and update work items, create status and trend charts, and post charts to dashboards +- Use dashboards to share information, status, and trends with your team or organization + +To get started, see [Get started with Agile tools to plan and track work](work/overview.md). + +If you are used to using Excel or Project to plan and track your work, you can still use these tools and integrate with VSTS and TFS. See [Bulk modify using Excel](work/office/bulk-add-modify-work-items-excel.md) and [Create your backlog and tasks using Project](work/office/create-your-backlog-tasks-using-project.md). + +### DevOps: builders, testers, and release managers + +One of the main advantages to working with VSTS or TFS is the suite of tools and integrated functionality that supports build, testing, and deploying software applications. Here are the main DevOps associated tasks supported by VSTS and TFS: +- Define builds +- Unit test your code +- Run tests with your builds +- Performance test your apps +- Perform exploratory tests +- Define, manage, track, and approve releases +- Deploy applications to Azure, a virtual machine, Docker containers, and more + +To get started, see the overviews provided here: [Build & Release](build-release/overview.md) and [Test](manual-test/index.md). + +### Stakeholders +With stakeholder access, anyone within your organization can check project status and provide feedback. Stakeholders can track project priorities and provide direction, feature ideas, and business alignment to a team. They can contribute to plans by adding and modifying work items. They can't, however, contribute to the code base or exercise test tools. + +Stakeholder access essentially provides free access to a limited set of feature to project sponsors and supporters. To learn more, see [Work as a Stakeholder](quickstart/get-started-stakeholder.md). + + +## Administrator roles +A distinct advantage to working in VSTS is the reduced overhead of server maintenance. That said, there are still several administrative tasks required to support a collaborative, integrated software development environment + +The main tasks are grouped here by membership within a security group or role: + +###Team administrators +Responsible for configuring team settings which include: +- Backlog and board settings +- Team area(s) and iterations (sprints) +- Team members +- Team dashboards +- Team work item templates +- Team alerts + +To get started, see [Manage team assets](work/scale/manage-team-assets.md). + +###Project administrators +Responsible for project level settings, including: +- [Area paths](work/customize/set-area-paths.md) and [Iteration paths](work/customize/set-iteration-paths-sprints.md) +- [Project permissions and repository security](security/permissions.md) +- [Customize work tracking objects (TFS only)](work/customize/customize-work.md) +- [Build agents, pools, and service endpoints](build-release/overview.md) +- [Test](manual-test/getting-started/how-long-to-keep-test-results.md) and [release](build-release/concepts/policies/retention.md) retention policies + + +### Project collection administrators +Responsible for account or collection-level settings. These include: +- Manage billing +- Add and manage team projects +- Manage collection-level settings and permissions +- Customize work tracking processes +- Install and manage extensions (install custom or [Marketplace extensions](https://marketplace.visualstudio.com/)) + +To get started, see [Account Management](accounts/account-management.md). + + +###TFS administrators +Responsible for installing, upgrading, and maintaining an on-premises TFS deployment. Tasks include: +- Install TFS +- Update servers running TFS +- Manage database backups +- Server administrative settings and permissions +- Build retention policies +- Add and manage team project collections + +To get started, see [Server Administration (TFS)](tfs-server/index.md). + + +## Related notes +- [Key concepts](concepts.md) +- [Essential services](services.md) + diff --git a/docs/search/_img/_shared/Warning-hightop.png b/docs/search/_img/_shared/Warning-hightop.png new file mode 100644 index 00000000000..482d15eb718 Binary files /dev/null and b/docs/search/_img/_shared/Warning-hightop.png differ diff --git a/docs/search/_img/_shared/codesearch-icon.png b/docs/search/_img/_shared/codesearch-icon.png new file mode 100644 index 00000000000..a14341aca94 Binary files /dev/null and b/docs/search/_img/_shared/codesearch-icon.png differ diff --git a/docs/search/_img/_shared/fullscreen-icon-expand.png b/docs/search/_img/_shared/fullscreen-icon-expand.png new file mode 100644 index 00000000000..380ba2e880c Binary files /dev/null and b/docs/search/_img/_shared/fullscreen-icon-expand.png differ diff --git a/docs/search/_img/_shared/fullscreen-icon-shrink.png b/docs/search/_img/_shared/fullscreen-icon-shrink.png new file mode 100644 index 00000000000..576d7ca212a Binary files /dev/null and b/docs/search/_img/_shared/fullscreen-icon-shrink.png differ diff --git a/docs/search/_img/_shared/goto-marketplace.png b/docs/search/_img/_shared/goto-marketplace.png new file mode 100644 index 00000000000..c055c5bb098 Binary files /dev/null and b/docs/search/_img/_shared/goto-marketplace.png differ diff --git a/docs/search/_img/_shared/question.png b/docs/search/_img/_shared/question.png new file mode 100644 index 00000000000..8043245c95d Binary files /dev/null and b/docs/search/_img/_shared/question.png differ diff --git a/docs/search/_img/_shared/search-select-type-icon.png b/docs/search/_img/_shared/search-select-type-icon.png new file mode 100644 index 00000000000..b61873e77df Binary files /dev/null and b/docs/search/_img/_shared/search-select-type-icon.png differ diff --git a/docs/search/_img/_shared/start-search-icon.png b/docs/search/_img/_shared/start-search-icon.png new file mode 100644 index 00000000000..3d16bc7acee Binary files /dev/null and b/docs/search/_img/_shared/start-search-icon.png differ diff --git a/docs/search/_img/_shared/title-bar-search-box-select-type.png b/docs/search/_img/_shared/title-bar-search-box-select-type.png new file mode 100644 index 00000000000..5317ebc3680 Binary files /dev/null and b/docs/search/_img/_shared/title-bar-search-box-select-type.png differ diff --git a/docs/search/_img/_shared/wisearch-icon.png b/docs/search/_img/_shared/wisearch-icon.png new file mode 100644 index 00000000000..8e50296de04 Binary files /dev/null and b/docs/search/_img/_shared/wisearch-icon.png differ diff --git a/docs/search/_shared/shared-got-feedback.md b/docs/search/_shared/shared-got-feedback.md new file mode 100644 index 00000000000..5b7a9c109d9 --- /dev/null +++ b/docs/search/_shared/shared-got-feedback.md @@ -0,0 +1,5 @@ +## Got feedback? + +![Question](../_img/_shared/question.png) +Send your feedback to **[vstssearch@microsoft.com](mailto:vstssearch@microsoft.com?Subject=Feedback%20on%20Search)**. +Post your ideas and feature requests on **[UserVoice](http://go.microsoft.com/fwlink/?LinkId=698652&clcid=0x409)**. diff --git a/docs/search/_shared/version-header-shared-vsts-tfs.md b/docs/search/_shared/version-header-shared-vsts-tfs.md new file mode 100644 index 00000000000..2394b752935 --- /dev/null +++ b/docs/search/_shared/version-header-shared-vsts-tfs.md @@ -0,0 +1 @@ +**VSTS | TFS 2017** diff --git a/docs/search/administration.md b/docs/search/administration.md new file mode 100644 index 00000000000..5b59df83813 --- /dev/null +++ b/docs/search/administration.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/code/administration +--- diff --git a/docs/search/advanced-search.md b/docs/search/advanced-search.md new file mode 100644 index 00000000000..076d375d7b4 --- /dev/null +++ b/docs/search/advanced-search.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/code/advanced-search +--- diff --git a/docs/search/breadcrumb/toc.yml b/docs/search/breadcrumb/toc.yml new file mode 100644 index 00000000000..4ddac7ee645 --- /dev/null +++ b/docs/search/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Search + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=collaboration + items: + - name: "Search" + tocHref: /vsts/ + topicHref: /vsts/search/index diff --git a/docs/search/code/_img/administration/script-filesv2.png b/docs/search/code/_img/administration/script-filesv2.png new file mode 100644 index 00000000000..2307095c3ca Binary files /dev/null and b/docs/search/code/_img/administration/script-filesv2.png differ diff --git a/docs/search/code/_img/administration/separate-server.png b/docs/search/code/_img/administration/separate-server.png new file mode 100644 index 00000000000..a0404d9038b Binary files /dev/null and b/docs/search/code/_img/administration/separate-server.png differ diff --git a/docs/search/code/_img/get-started/compare-tab.png b/docs/search/code/_img/get-started/compare-tab.png new file mode 100644 index 00000000000..25eb49e2245 Binary files /dev/null and b/docs/search/code/_img/get-started/compare-tab.png differ diff --git a/docs/search/code/_img/get-started/open-in-code-explorer.png b/docs/search/code/_img/get-started/open-in-code-explorer.png new file mode 100644 index 00000000000..26d8e24bfd8 Binary files /dev/null and b/docs/search/code/_img/get-started/open-in-code-explorer.png differ diff --git a/docs/search/code/_img/get-started/search-results-01.png b/docs/search/code/_img/get-started/search-results-01.png new file mode 100644 index 00000000000..540063d991f Binary files /dev/null and b/docs/search/code/_img/get-started/search-results-01.png differ diff --git a/docs/search/code/_img/get-started/select-projects.png b/docs/search/code/_img/get-started/select-projects.png new file mode 100644 index 00000000000..1e5c585d1be Binary files /dev/null and b/docs/search/code/_img/get-started/select-projects.png differ diff --git a/docs/search/code/_img/get-started/title-bar-search-box-empty-outlined.png b/docs/search/code/_img/get-started/title-bar-search-box-empty-outlined.png new file mode 100644 index 00000000000..e013b2b595b Binary files /dev/null and b/docs/search/code/_img/get-started/title-bar-search-box-empty-outlined.png differ diff --git a/docs/search/code/_img/get-started/title-bar-search-functionlist.png b/docs/search/code/_img/get-started/title-bar-search-functionlist.png new file mode 100644 index 00000000000..9aa032ae9cc Binary files /dev/null and b/docs/search/code/_img/get-started/title-bar-search-functionlist.png differ diff --git a/docs/search/code/administration.md b/docs/search/code/administration.md new file mode 100644 index 00000000000..ebc3049880f --- /dev/null +++ b/docs/search/code/administration.md @@ -0,0 +1,681 @@ +--- +title: Code and Work Item Search set up +description: Setup notes and administration links for Microsoft Code Search & Work Item Search in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.assetid: A78DC9CF-4ADD-46D7-9E25-D1A0764FCB06 +ms.prod: vs-devops-alm +ms.technology: vs-devops-search +ms.manager: douge +ms.author: douge +ms.date: 08/04/2016 +--- + +# Set up and administer Microsoft Code Search and Work Item Search + +[!INCLUDE [version-header-shared-vsts-tfs](../_shared/version-header-shared-vsts-tfs.md)] + +In this topic: + +* **Configure Code Search in VSTS** + - [Install the Code Search extension](#config-ts) + - [Uninstall the Code Search extension](#uninstall-ts)

      + +* **Configure Search in Team Foundation Server** + - [Configure Search](#config-tfs) + - [Secure Search](#secure-search) + - [Upgrade Search](#upgrading-search) + - [Manage Search](#manage-tfs) + - [Uninstall Search](#uninstall-tfs) + - [Limitations of Search](#limit-tfs) + - [Troubleshoot Search](#trouble-tfs) + +Also see [Install and configure TFS](../../tfs-server/install/get-started.md) +and [TFS requirements and compatibility](../../accounts/requirements.md). + +>Users with at least a **Basic** access can use Code Search. +Stakeholders do not have access to code, and therefore no access to Code Search. +All users have access to Work Item Search. + + +## Install Code Search in VSTS + +Go to [Visual Studio Marketplace](http://go.microsoft.com/fwlink/?LinkId=703823&clcid=0x409) +to install the extension in your VSTS account as an administrator. +Non-administrative users can also go here to request the extension be added to VSTS. + +For more details, see [Install an extension](../../marketplace/install-vsts-extension.md#install-extension) in the Marketplace documentation. + + +## Uninstall Code Search in VSTS + +See [Uninstall or disable an extension](../../marketplace/uninstall-disable-vsts-extensions.md) in the Marketplace documentation. + + +## Configure Code Search/Work Item Search in Team Foundation Server + +Code Search is available in TFS 2017 and later. +Work Item Search is available in TFS 2017 Update 2 and later. +Configure the Search service using the dedicated pages in the TFS Configuration Wizard +as you install TFS. You can also [configure and unconfigure Search](#uninstall-tfs) +afterwards by running the TFS Configuration Wizard again or lauching the Search Configuration Wizard. + + +### Hardware recommendations + +Search can be used on any size physical server or virtual machine that runs +TFS 2017 or above. It can be configured on the same server as TFS, +or on a separate server dedicated to Search. +When configuring Search on the same server as TFS, +you must take into account the existing CPU utlization +factor due to TFS itself. +In most cases you should +consider configuring Search on a separate server. + +For acceptable performance in multi-user scenarios, consider the +following recommendations: + +* Less than 250 users with Search co-located on the TFS server: + - Quad core processor, 8 GB (minimum) RAM + - CPU Utilization factor less than 50% + - Fast hard drive backed by Solid State Drive (SSD) storage

      + +* Less than 500 users with Search located on a [separate server](#separate-server): + - Dual core processor, 8 GB (minimum) RAM + - Fast hard drive backed by Solid State Drive (SSD) storage

      + +* Less than 1,000 users with Search located on a [separate server](#separate-server): + - Quad core processor, 16 GB (minimum) RAM + - Fast hard drive backed by Solid State Drive (SSD) storage

      + +* More than 1,000 users with Search located on a [separate server](#separate-server): + - Quad core processor, 16 GB (minimum) RAM + - Fast hard drive backed by Solid State Drive (SSD) or Storage Area Network (SAN) storage

      + +* TFS server with Multiple ATs: + - Install Search on a [separate server](#separate-server)

      + +* TFS server CPU utilization greater than 50% before installing Code Search: + - Install Search on a [separate server](#separate-server)

      + +**Disk space requirement**: + +The amount of disk space taken up by Search depends mainly on the type of +code files in version control that will be indexed. As a general guideline, +allocate upto 35% of the size of all the collections that will be indexed. + +### Software Dependencies + +Search has the following dependencies, which are installed automatically +as part of the configuration: + +* [Elasticsearch](https://www.elastic.co/products/elasticsearch) by Elasticsearch BV (see Note 1) +* [Elasticsearch NEST client](https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/index.html) +* [Oracle Server JRE 8 Update 20 or higher](http://www.oracle.com/technetwork/java/javase/downloads/server-jre8-downloads-2133154.html) Java runtime environment (see Note 2) +* [Markdowndeep](http://www.toptensoftware.com/markdowndeep/) by Topten Software +* [Roslyn](https://github.com/dotnet/roslyn) compiler platform +* [ANTLR](http://www.antlr.org/) language recognition parser + +**NOTES**: + +* A modified version of Elasticsearch ships with TFS. + Search will work only with this version of Elasticsearch. + +* The system or TFS administrator must ensure that Server JRE is + maintained and updated in line with the software provider's recommendations. + Also see the [installation notes](#java-notes) that follow. + + +#### Java installation notes + +If the Search configuration wizard does not detect a working installation of +Java Server JRE, it provides an option to download and install the latest version. +Internet connectivity is required to download this from the Java website. +If the target server does not have Internet connectivity, you must download +and install Server JRE manually before attempting to install Search. + +During installation, the wizard sets the **JAVA\_HOME** environment variable +to point to the Server JRE installation folder. The configuration wizard may fail +to detect an existing Server JRE installation if it is not correctly configured, +or if the **JAVA\_HOME** setting points to an earlier version than that required +by Search. + +If there is a version of Server JRE **earlier** than the minimum required by +Search, and the **JAVA\_HOME** variable is set to that version, we recommend +you install Search on a separate server because changing the value +of the **JAVA\_HOME** variable may cause other installed software to fail. + +If there is a version of Server JRE **equal to or later** than the minimum required +by Search, and it is not recognized by the configuration wizard, you +must set the value of the **JAVA\_HOME** variable to that version as described in +the **[Java troubleshooting guide](http://docs.oracle.com/javase/7/docs/webnotes/tsg/)**, +and then rerun the configuration wizard. + +If you cannot install the version of Java required by Search due to other dependencies, you can: + +* Install TFS and Search together on a different server that does + not have Java installed (not recommended for more than 250 users or CPU utilization greater than 50% or multiple ATs). + +* Install Search and Java on a [separate server](#separate-server) from TFS. + +>Search does not use or support any of the commercial features +of Server JRE 8 as outlined [here](http://www.oracle.com/technetwork/java/javase/terms/products/index.html). +Therefore, during Search configuration on Team Foundation Server 2017, +the commercial features of the Server JRE are not activated or unlocked. +See the Oracle documentation for examples of unlocking the commercial features of +[Java 7](http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html) +or [Java 8](https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr004.html). + +### Installation considerations + +Consider the following when configuring Search: + +* The Code Search extension must be installed for each TFS collection where you want to use it. + When initially configuring Search, you can set a checkbox to **Automatically install Code Search extension + for existing and new Tem Project Collections** to automate this process. + +* If you do not set the checkbox to install the Code Search extension for all your Team Project Collection, while + configuring Search, your Project Collection administrator can install it from Visual Studio Marketplace. Make + sure you navigate to the Marketplace from your TFS portal page. + +* The search index folder should be located on a separate fast hard drive backed by fast storage such + as Solid State Drive (SSD) or Storage Area Network (SAN) to maximize search performance. + As a general guide, the Search index for a collection can be a maximum of 35% the size of the collection itself. + That is the worst case scenario; the actual space consumed is dictated by the amount and type of code files & amount of work items in that collection. + +* The indexing service and Elasticsearch engine use the account you specify during + installation to create and access the index files. This account must have **Log on as a service** + permission. + +* Restrict the permissions for the index disk and folder to protect the index + from accidental or malicious modification or deletion, and configure appropriate + [security settings](#secure-search) for the service. + +* When configuring Search for a TFS server with **multiple application tiers (ATs)**, make sure Search is installed on a [separate server](#separate-server). After Search is installed + on the remote server, use the Configuration wizard on any one of the ATs to link the search instance with your TFS instance. When unconfiguring Search in future + you must use the Configuration wizard on the same AT where configuration was done. + +* If you are performing a **pre-production upgrade** on a TFS server where Search is already configured, you must fully + reconfigure Search again to avoid corrupting your production instance of Search. For this reason there is no option to configure + Search as part of a pre-production upgrade. Instead, configure it after the pre-production upgrade is complete. + As this is a pre-production upgrade, you can choose to uncheck **Automatically install and configure Code Search for all existing and new collections** + during configuration, and instead install the Code Search extension for just one or two of your collections after configuration is complete. + +* If you are performing a **production upgrade** on a TFS server where Search is already configured, and want to retain the Search feature, + you must set the checkbox to **Install and Configure Search**. At this point the wizard will detect your existing Search instance and + automatically select the **Use existing Search instance** option, and pre-populate your current Search service URL. + Use the **Install a new Search instance** option only if you want to set up a new instance of Search on the same TFS server. + Setting up a new instance causes all your code to be indexed again, which - depending on the size of the collections - can take some time. + During indexing, users may see partial search results. + +* If you are **upgrading your TFS server to new hardware**, + depending on how Search was previously configured, you have two options: + + - If Search was configured on a separate server, you must select **Install and Configure Search** in the TFS wizard, + and subsequently select **Use an existing Search instance** + and provide the URL of your existing Search instance to complete the Search configuration. + + - If Search was configured alongside your TFS instance on the old server, you must select **Install and Configure Search** + in the TFS wizard, and subsequently select **Install a new Search instance** + again on the new TFS server if you want to continue to co-host Search and TFS. + This will cause all Search indexes for all collections to be re-created which, + depending on the size of each collection, might take some time.

      + +* If you are **detaching a collection** from one TFS instance in order to attach it to another TFS instance, ensure that: + + - Search has been configured on the target TFS instance. + - Before you detach the collection, you have uninstalled the Code Search extension for that collection from the **Manage Extensions** page of your source TFS instance. + - After you attach the collection to the target TFS instance, you install the Code Search extension for that collection from the Marketplace by browsing to it from that TFS instance.

      + + +### Installing or Updating Search on a separate server + +To install or update Search on a separate (remote) server, typically when you have more than 250 users, +follow these steps: + +1. As you install TFS on the primary server, set the **Install and configure Search** checkbox + in the **Search** page of the TFS Configuration Wizard. + +1. Select the option to **Use an existing Search Service**. + +1. Use the **Search Service package** link provided in the wizard to access a set of Search installer files + on the local machine, and then copy these files to the remote server. + + ![Separate server installation](_img/administration/separate-server.png) + +1. Follow the instructions in the **Readme.md** file located in the set of + installer files to install or update the Search service on the remote server. + +1. After the installation of the Search service on the remote server is complete, + copy the resulting Search server URL into the **Search URL** field of the + configuration wizard running on the TFS server. + +1. When both installations are complete, configure appropriate + [security settings](#secure-search) for both servers. + + +## Secure Search + +The Search service uses a modified version of +[Elasticsearch](https://www.elastic.co/products/elasticsearch) +(the terms "Search" and "Elasticsearch" are used +interchangeably for the remainder of this section). +Elasticsearch does not perform authentication or authorization, and it does not support HTTPS, +so it is vital you configure appropriate security settings +based on your corporate security and compliance requirements. + +Typically you should aim to limit access to both searching and indexing +to specific users or user groups - we recommend using encryption through IPSec. + +When the Elasticsearch service is installed locally on the TFS server, +it is protected by the security settings you configure for +that server. In such a configuration, Elasticsearch is bound to +the loopback address, which prevents access from outside the local network. +However, if you set up Search on a remote server +you must ensure that only the TFS Application Tiers can access Elasticsearch on the remote server +by creating an appropriate firewall rule to allow incoming +requests to the Elasticsearch port on the remote server. + +By default, this open port allows anonymous access to +the server. To prevent this, consider the following +techniques for using IPSec to secure Elasticsearch +on a Windows server. + +#### Configure security with authentication only + +This ensures only authorized users can access +the Elasticsearch port. It requires only service-side +rules (firewall rules on only on the server running +Elasticsearch). + +**Prerequisite**: TFS must be configured with a domain account. + +Follow the steps in [Creating Firewall Rules that Allow IPsec-protected Network Traffic](https://technet.microsoft.com/en-us/library/cc754873%28v%3Dws.10%29.aspx). + +#### Configure security with authentication, integrity protection, and encryption + +This ensures encryption and integrity protection +are applied along with authentication. It requires +both client-side and service-side rules (firewall rules +on the server running Elasticsearch and all of +TFS App Tier servers). + +**Prerequisite**: TFS must be configured with a domain account. + +Follow the steps in [Isolating a Server by Requiring Encryption and Group Membership](https://technet.microsoft.com/en-us/library/cc772460%28v%3Dws.10%29.aspx). + + +## Upgrade the Search service + +TFS 2017 Update 1 includes updated Search components. If the Search +service was configured in TFS 2017 RTM then, during an upgrade, the +Search service components will be updated automatically if the Search +service was configured on the TFS server that is being upgraded. +If Search was configured on a remote server, follow +[these instructions](#separate-server) to update it. + +TFS 2017 Update 2 includes Work items Search. It uses the same Search service as Code Search. +If the Search service was configured in TFS 2017 RTM/Update1 then, during an upgrade, the +Search service components will be updated automatically if the Search +service was configured on the TFS server that is being upgraded. +If Search was configured on a remote server, follow +[these instructions](#separate-server) to update it. + + +## Manage Search in Team Foundation Server + +Search is managed by running PowerShell and SQL scripts. All of +these scripts are available to download from +**[this GitHub repository](https://github.com/Microsoft/Code-Search)**. +You may wish to download all of the scripts into a local folder on your TFS +server using the **Download ZIP** option. The PowerShell scripts require the SQL script files, so ensure +the **SqlScripts** folder and its contents is present, along with the PowerShell scripts. + +![Download script files for administration](_img/administration/script-filesv2.png) + +> [!NOTE] +> When executing scripts, ensure you run the appropriate script for your TFS version: +> +> * [TFS 2017 RTM](https://github.com/Microsoft/Code-Search/tree/master/TFS_2017RTW) +> * [TFS 2017 Update 1](https://github.com/Microsoft/Code-Search/tree/master/TFS_2017Update1) +> * [TFS 2017 Update 2](https://github.com/Microsoft/Code-Search/tree/master/TFS_2017Update2) + + +### Check indexing status for TFS 2017 RTM + +(For TFS 2017 Update 1, see the [next section](#index-update1)) + +To check the indexing status after Search is configured, or after the extension is installed for a collection: + +1. Execute the **CheckIndexingStatus.ps1** script with administrative privileges. + You will be prompted to enter: + + - The SQL server instance name where the TFS configuration database resides. + - The name of the TFS collection database. + - The name of the TFS configuration database. + - The name of the collection. + - The number of previous days to check indexing status.

      + +1. Check the following outputs: + + - **Collection indexing was triggered successfully**: Indicates that + indexing is in progress. If it is displayed, check the following outputs. + If it is not displayed, go to step 3 below. + + - **Repositories Indexing Completed**: The repositories whose indexing + has been completed and are now searchable. + + - **Repositories in File Discovery Phase**: The repositories where files + are yet to be discovered. The files are indexed after this stage. + Repositories in this state are not yet searchable. The number of + files already discovered for indexing in each repository is shown, and this + number should be increasing as more files are discovered. + + - **Repositories Indexing In Progress**: These repositories are partially + indexed and should be searchable now, even if the results are only partial.

      + +1. It takes some time for indexing to complete. Execute the **CheckIndexingStatus.ps1** script + at intervals to check indexing progress. + +1. If indexing is not occurring, or indexing is in progress but the number of + files pending or the number of files discovered has not changed for some time, + or no results are returned for a search, trigger indexing again by running + the **TriggerCollectionIndexing.ps1** script in a PowerShell window with administrative permission. + +1. If the problem persists, contact customer support at the address shown at the end of this topic. + + +### Check indexing status for TFS 2017 Update 1 + +(For TFS 2017 Update 2, see the [next section](#index-update2)) + +To check the indexing status after Search is configured, or after the extension is installed for a collection: + +1. Execute the **ExtensionInstallIndexingStatus.ps1** script with administrative privileges. + You will be prompted to enter: + + - The SQL server instance name where the TFS configuration database resides. + - The name of the TFS collection database. + - The name of the TFS configuration database. + - The name of the collection. + - The number of previous days to check indexing status.

      + +1. Check the following outputs: + + - **Collection indexing was triggered successfully**: Indicates that + indexing is in progress. If it is displayed, check the following outputs. + If it is not displayed, go to step 3 below. + + - **Repositories completed indexing**: The number of repositories for which indexing has completed and are searchable. + + - **Status of repositories currently indexing**: A list of the names of all the repositories that are still being indexed and are partially searchable.

      + +1. It takes some time for indexing to complete. Execute the **RecentIndexingActivity.ps1** script at intervals to check indexing progress. This script takes the same parameters as the **ExtensionInstallIndexingStatus.ps1** script. + + - **Repositories completed fresh indexing**: The number of repositories for which indexing has completed within the specified time interval. + + - **Count of repositories with fresh indexing in progress**: The number of repositories for which indexing has not yet completed. These repositories are still being indexed and are partially searchable. + + - **Repositories completed continuous indexing**: The number of commits processed in the specified time interval. The number may not exactly match the total number of pushes to the repository because merges are committed as they are indexed. + + - **Count of repositories with continuous indexing in progress**: The number of repositories for which the commits are still being processed. These repositories will show incomplete results until indexing is completed.

      + + - **Count of indexing job failures**: The number of indexing jobs that failed. Repositories associated with these indexing jobs could potentially show incomplete results until subsequent indexing jobs for the same repositories have patched the failed indexing.

      + + +### Check indexing status for TFS 2017 Update 2 + +To check the indexing status after Search is configured, or after the extension is installed for a collection: + +1. Execute the **ExtensionInstallIndexingStatus.ps1** script with administrative privileges. + You will be prompted to enter: + + - The SQL server instance name where the TFS configuration database resides. + - The name of the TFS collection database. + - The name of the TFS configuration database. + - The name of the collection. + - The number of previous days to check indexing status.

      + +1. Check the following outputs: + + - **Collection indexing was triggered successfully**: Indicates that + indexing is in progress. If it is displayed, check the following outputs. + If it is not displayed, go to step 3 below. + + - **Repositories completed indexing**: The number of repositories for which indexing has completed and are searchable. + + - **Status of repositories currently indexing**: A list of the names of all the repositories that are still being indexed and are partially searchable.

      + +1. It takes some time for indexing to complete. Execute the **RecentIndexingActivity.ps1** script at intervals to check indexing progress. This script takes the same parameters as the **ExtensionInstallIndexingStatus.ps1** script along with an additional EntityType parameter. + + - **Repositories completed fresh indexing**: The number of repositories for which indexing has completed within the specified time interval. + + - **Count of repositories with fresh indexing in progress**: The number of repositories for which indexing has not yet completed. These repositories are still being indexed and are partially searchable. + + - **Repositories completed continuous indexing**: The number of commits processed in the specified time interval. The number may not exactly match the total number of pushes to the repository because merges are committed as they are indexed. + + - **Count of repositories with continuous indexing in progress**: The number of repositories for which the commits are still being processed. These repositories will show incomplete results until indexing is completed.

      + + - **Count of indexing job failures**: The number of indexing jobs which failed. Repositories associated with these indexing jobs could potentially show incomplete results until subsequent indexing jobs for the same repositories have patched the failed indexing.

      + + +### Pause indexing + +To pause all indexing, execute the script **PauseSearchIndexing.ps1** +with administrative privileges. Useful if you see spikes in CPU utilization after configuring Search. + +You will be prompted to enter: + +* The SQL server instance name where the TFS configuration database resides. +* The name of the TFS configuration database. + + +### Resume indexing + +If indexing was paused, execute the script **StartSearchIndexing.ps1** +with administrative privileges, to start indexing again. +You will be prompted to enter: + +* The SQL server instance name where the TFS configuration database resides. +* The name of the TFS configuration database. + + +### Re-index a repository or collection + +To re-index a Git or TFVC repository, execute the appropriate +version of the script **Re-IndexingRepository.ps1** for your TFS version +with administrative privileges. You will be prompted to enter: + +* The SQL server instance name where the TFS configuration database resides. +* The name of the TFS collection database. +* The name of the TFS configuration database. +* The type of re-indexing to execute. This can be one of the values: + - **Git\_Repository** + - **TFVC\_Repository** +* The name of the collection. +* The name of the repository to re-index. + +To re-index a **collection**, execute the script **TriggerCollectionIndexing.ps1** +with administrative privileges. You will be prompted to enter: + +* The SQL server instance name where the TFS configuration database resides. +* The name of the TFS collection database. +* The name of the TFS configuration database. +* The name of the collection. + +Re-indexing a collection can take from a few minutes +to a few hours, depending on the size of the collection. + +Also see **[Troubleshoot Code Search](#trouble-tfs)**. + + +## Unconfigure Search in Team Foundation Server + +In cases such as a pre-production upgrade, production upgrade, new hardware migration, cloning, +or other maintenance operation, the TFS wizard will unconfigure Code Search in a way that makes it easy to re-configure it after the TFS +maintenance operation is complete. + +However, there might be cases where you no longer want to use Code Search, or want to perform a new and clean +install. This requires multiple steps, depending on whether Code Search is configured +[on the same server as TFS ](#unconfig-same-server) or on a [separate server](#unconfig-separate-server). + + +### Unconfigure Search on the machine configured as your TFS server + +1. Uninstall the Code Search extension for each collection where it is installed. + Do this by navigating to the **Manage Extensions** page of each collection in + your Team Foundation Server: + + ![Checking that the extension is installed](../_img/_shared/goto-marketplace.png) + +1. Remove the Search feature: + + 1. Open the Team Foundation Server Administration Console. + 1. In the left pane, select the name of the TFS server. + 1. In the right pane, choose **Remove Feature**. + 1. In the Remove Feature dialog, select **Team Foundation Search Service** and choose **Remove**.

      + +1. Remove the Elasticsearch service: + + 1. Open **Command Prompt** as an administrator + 1. Change directory: + + For TFS 2017 RTM, `cd "C:\Program Files\TFS 15.0\Search\ES\elasticsearch-1.7.1-SNAPSHOT\bin"` + + For TFS 2017 Update1 and above, `cd "C:\Program Files\TFS 15.0\Search\ES\elasticsearch-2.4.1\bin"` + + 1. Remove the service: `"service.bat remove"`

      + +1. Remove Search data: + + * Delete the contents of the location described by the environment variable `SEARCH_ES_INDEX_PATH`

      + +1. Remove environment variables: + + 1. Delete the environment variable `"SEARCH_ES_INDEX_PATH"` + 1. Delete the environment variable `"ES_HEAP_SIZE"`

      + + +### Unconfigure Search when its configured on a separate server + +1. Uninstall the Code Search extension for each collection where it is installed. Do this by navigating to the **Manage Extensions** page of each collection in +your Team Foundation Server. + + ![Checking that the extension is installed](../_img/_shared/goto-marketplace.png) + +1. Remove the Search feature: + + 1. Open the Team Foundation Server Administration Console. + 1. In the left pane, select the name of the TFS server. + 1. In the right pane, choose **Remove Feature**. + 1. In the Remove Feature dialog, select **Team Foundation Search Service** and choose **Remove**.

      + +1. Remove the Elasticsearch service and data + + 1. Open **Powershell** as an administrator + 1. Go to the folder where **ConfigureTFSSearch.ps1** is installed along with the rest of the files required for a remote install of Search. + 1. Run the script again with the remove option: + + For TFS 2017 RTM, `"ConfigureTFSSearch.ps1 -RemoveTFSSearch"`

      + + For TFS 2017 Update1 and above, `"ConfigureTFSSearch.ps1 -remove"`

      + + +## Limitations of Search in Team Foundation Server + +Code Search for Team Foundation Server 2017 has the following limitations: + +* If you perform a disaster recovery (DR) operation and move your TFS server back + to an earlier snapshot of your SQL database, you will need to re-index all your collections [re-index the collections](#re-index). + + +## Troubleshoot Search in Team Foundation Server + +* [Search is configured but the Search box is not displayed](#no-search-box) +* [No search results are shown after installing or configuring Search](#no-results-install) +* [How do I know if indexing was triggered for all the collections?](#indexing-status-for-collections) +* [Search stops working and no results are shown](#no-results-later) +* [Search does not show the expected results](#unexpected-results) +* [TFS server overall performance is affected](#server-slow) + + +**Search is configured but the Search box is not displayed** + +1. The search box is shown only in the context of a project page. + Navigate to a project and check if the search box is displayed at the top right. + + ![The Code Search textbox in the VSTS title bar](_img/get-started/title-bar-search-box-empty-outlined.png) + +1. If the search box is not shown, verify that the extension is installed for the collection. + If not, [install](#config-ts) or [configure](#config-tfs) the extension. + + +**No search results are shown after installing or configuring Search** + +1. Wait until you are sure a sufficient time has elapsed + after installing or configuring Search. It typically takes + less than one hour for Search to index a collection, but + it may take up to 12 hours depending on + the size and number of code files. + +1. If no results are shown after this period, + [check indexing status](#check-index). + + +**How do I know if indexing was triggered for all the collections?** + +* [Check indexing status](#check-index) separately for each collection. + + +**Search stops working and no results are shown** + +Follow these steps. Replace "SearchServer" with the +name of the server where Search is installed: + +1. Access the URL `http://SearchServer:9200` from a web browser + on a computer in the same domain as the server running Search. + - If the status returned is `200 - OK`, go to step 2. + - If any other status is returned, contact support at + the address shown at the end of this topic. + - If you don't get a response, verify that the + **elasticsearch-service-x64** service is running on + the server where Search is configured. If the service + is stopped, start it and access the Search server again. + If you still get no response, or a response other than + `200 - OK`, contact support at + the address shown at the end of this topic.

      + +1. If the status is 200, access the URL `http://SearchServer:9200/_cat/health?v` + from a web browser on a computer in the same domain as the server running Search. + - If the status column shows green/OK, and + Search is still not working, contact support at + the address shown at the end of this topic. + - If the status column shows red/fault, look at the value + in the **init** or **unassigned** columns. If these are + greater than zero, wait for 30 minutes and then + repeat this step. If the values are unchanged, go to step 3.

      + +1. Access the URL `http://SearchServer:9200/_cat/shards?v` + from a web browser on a computer in the same domain as the server running Search. + - Make a note of the values in the **Shard** column for the + rows with a **state** value of **unassigned** and contact + support at the address shown at the end of this topic.

      + + +**Search does not show the expected results** + +1. If the files were added in the last few minutes, + wait for ten minutes or so while they are indexed. +1. [Check indexing status](#check-index) for the collection. +1. If the files are still not shown in the results, + [re-index the repository or collection](#re-index) + where the files are located. + + +**TFS server overall performance is affected** + +1. [Pause all indexing](#pause-index) and see if performance recovers. +1. If performance does recover, consider locating Code Search + on a separate server if you have not already done so. + + + +[!INCLUDE [shared-got-feedback](../_shared/shared-got-feedback.md)] diff --git a/docs/search/code/advanced-search.md b/docs/search/code/advanced-search.md new file mode 100644 index 00000000000..a96373026a0 --- /dev/null +++ b/docs/search/code/advanced-search.md @@ -0,0 +1,235 @@ +--- +title: Advanced search options in Microsoft Code Search in VS Team Services and TFS +description: Advanced options for Code Search in VSTS and Team Foundation Server +ms.assetid: 936AA33C-4AEF-461E-B49B-C98A59098282 +ms.prod: vs-devops-alm +ms.technology: vs-devops-search +ms.manager: douge +ms.author: douge +ms.date: 08/04/2016 +--- + +# How To: Use Code Search + +[!INCLUDE [version-header-shared-vsts-tfs](../_shared/version-header-shared-vsts-tfs.md)] + +By using Code Search you can: + +* **Search across all of your projects**: + Search in your own codebase and your partner teams' codebases. Use cross-project + searches over all the code in your VSTS or TFS instance to search + across your organization's entire codebase. Narrow your search by using project, repository, + path, file name, and other filter operators. Use wildcards to widen your search and + Boolean operators to fine-tune it. + +* **Find specific types of code**: Use code type filters + to search for specific kinds of code such as definitions, references, functions, + comments, strings, namespaces, and more. You can use Code Search to narrow + down your results to exact code type matches. Navigate quickly to a method + definition to understand its implementation simply by applying the definition + filter, or scope the search to references in order to view calls and maximize + code reuse. + +* **Easily drill down or widen your search**: When you find an item of interest, + simply place the cursor on it and use the shortcut menu to quickly search for + that text across all your projects and files. Easily trace how your code works + by using the shortcut menu to search for related items such as definitions and + references - directly from inside a file.

      + + +## Syntax for simple and compound searches + +Use simple search strings for words or phrases. The default is a whole word search; +for example, a search for "valid" will not find instances of the word +"validation". However, searches are _not_ case-sensitive. + +When you search from inside a project, the default is to search only within that +project. + +In a TFVC project, you see a list of folder paths in that project for +which you have read access - you won't see any projects and folders +for which you don't have read permission. Select paths in the folder tree +to narrow your search if required. + +In a Git project, you see a list of the repositories it contains (Code Search indexes +files in only the default branch of your Git repositories; usually this is the **master** branch). +Use the project and repository checkboxes to widen your search to more or all projects, or to +narrow your search to fewer projects and repositories. If there is more than a few +projects or repositories, use the **Show more** link to see them all. + +Code Search remembers your last settings, such as the project and repository or path you +searched in. Clear all the checkboxes to search across all projects. Do this quickly and +easily with the **Clear all** links when you want to search in a different scope. + +### Narrow your search with Boolean operators + +Narrow your search by using Boolean operators to combine search criteria. +Combine multiple search criteria using `AND`, `OR`, or `NOT` (they must be +uppercase). + +Use parentheses to specify the precedence of the operations when you use more than +one Boolean operator. By default, a search combines all the words you enter using +the `AND` operator so that it will return only files that contain all of the +words you entered. + +For example: + +* `validate AND revisit` finds files that contain both the words **validate** and + **revisit**. Note that `AND` is the default operator, and so this is equivalent to + the search string `validate revisit`. +* `validate OR revisit` finds files that contain either of the words **validate** or **revisit**. +* `validate NOT revisit` finds files that contain the word **validate** but not the word **revisit**. +* `(validate NOT revisit) OR "release delayed"` finds files that contain the word **validate** + but not the word **revisit** or files that contain the phrase **release delayed**. + +To find an exact match to a set of words, enclose your search terms in double-quotes. +For example, `"Client not found"` + +### Broaden your search with wildcards + +Use the wildcard characters `*` and `?` to broaden your search criteria. For +example: + +* `CodeSenseHttp*` finds files containing words that start with **CodeSenseHttp**, + such as **CodeSenseHttpClient** and **CodeSenseHttpClientTest**. +* `CodeX23?R` finds files containing words that start with **CodeX23**, have any + alphanumeric character next, and end with **R**. For example, **CodeX234R** and **CodeX23QR**. + +You can use wildcard characters anywhere in your search string **except** as +a **prefix** in a simple search string or a query that uses a +[code type filter](#codefunctions). +For example, you cannot use a search query such as `*RequestHandler` or +`class:?RequestHandler`. However, you can use prefix wildcards with the +other search filter functions; for example, the search query strings +`file:*RequestHandler.cs` and `repo:?Handlers` are valid. + +You can use more than one `?` wildcard to match more than one character. + +------------------ + +![Warning](../_img/_shared/Warning-hightop.png) **No results found for ...** +If there is a very large number of hits when using a wildcard search, such +as when using a very simple wildcard search string, you may see a message that no +matching files were found. In this case, narrow your search to reduce the number +of matches. For example, specify more characters of the word(s) you want to find, +or add a condition or filter to limit the number of possible matches. + +------------------ + + +## Functions to find specific types of code + +As you type in the search box, select functions and keywords from the drop-down +list to quickly create your query. Use the **Show more** link to display all the +available functions and keywords. Mix and match the functions as required. + +You can also select one or a combination of filters from the list in the left column. +Again, the **Show more** link displays all the available functions and keywords. + +Alternatively, you can type the functions and parameters directly into the search box. The following table shows +the full list of functions for selecting specific types or members in your +C#, C, C++, Java, and Visual Basic.NET code. + +| To find code where _findThis_ appears as a ... | ... search for argument **arg:**_findThis_ | +| --- | --- | +| Argument | **arg:**_findThis_ | +| Base type | **basetype:**_findThis_ | +| Calling function | **caller:**_findThis_ | +| Class definition or declaration | **class:**_findThis_ | +| Class declaration | **classdecl:**_findThis_ | +| Class definition | **classdef:**_findThis_ | +| Comment | **comment:**_findThis_ | +| Constructor | **ctor:**_findThis_ | +| Declaration | **decl:**_findThis_ | +| Definition | **def:**_findThis_ | +| Destructor | **dtor:**_findThis_ | +| Enumerator | **enum:**_findThis_ | +| Extern | **extern:**_findThis_ | +| Field | **field:**_findThis_ | +| Friend function | **friend:**_findThis_ | +| Function | **func:**_findThis_ | +| Function declaration | **funcdecl:**_findThis_ | +| Function definition | **funcdef:**_findThis_ | +| Global | **global:**_findThis_ | +| Header | **header:**_findThis_ | +| Interface | **interface:**_findThis_ | +| Macro | **macro:**_findThis_ | +| Macro definition | **macrodef:**_findThis_ | +| Macro reference | **macroref:**_findThis_ | +| Method | **method:**_findThis_ | +| Method declaration | **methoddecl:**_findThis_ | +| Method definition | **methoddef:**_findThis_ | +| Namespace | **namespace:**_findThis_ | +| Property | **prop:**_findThis_ | +| Reference | **ref:**_findThis_ | +| String literal | **strlit:**_findThis_ | +| Struct | **struct:**_findThis_ | +| Struct declaration | **structdecl:**_findThis_ | +| Struct definition | **structdef:**_findThis_ | +| Template argument | **tmplarg:**_findThis_ | +| Template specification | **tmplspec:**_findThis_ | +| Type | **type:**_findThis_ | +| Typedef | **typedef:**_findThis_ | +| Union | **union:**_findThis_ | + + +## Functions to select projects, repositories, paths, and files + +Functions make it easy to narrow the search to specified locations, +specific types of files within these locations, or specified filenames. +Mix and match the functions as required. + +Narrow the search to a specific location using the `proj`, `repo`, or `path` filters: + +* `QueueJobsNow proj:Fabrikam` finds all occurrences of the word **QueueJobsNow** in the **Fabrikam** project. +* `QueueJobsNow repo:Contoso` finds all occurrences of the word **QueueJobsNow** in the **Contoso** repository. +* `QueueJobsNow path:VisualStudio/Services/Framework` finds all occurrences of the word **QueueJobsNow** + in the path **VisualStudio/Services/Framework** and its sub-paths. +* Enclose the argument to the filter in double-quotes if it contains a space. + For example: `QueueJobsNow path:"VisualStudio/Windows Phones and Devices/Services"`. + +Narrow the search to specific files using the `file` or `ext` filters: + +* `QueueJobsNow file:queueRegister*` finds all occurrences of the word **QueueJobsNow** in all + files where the filename starts with **queueRegister**. +* `QueueJobsNow ext:cs` finds all occurrences of the word **QueueJobsNow** in only C# source files. +* A plain text search string that does not include file type functions + will also find files where the string matches part of the filename. + + +## Find related items or other terms + +One of the powerful features of Code Search is the capability to expand your +search interactively, based on the results of previous searches. For example, +you can easily broaden your search to related files when tracing or debugging code. + +Place the insertion point on a term in the file and open the shortcut menu (mouse: right-click) to start a new search +for other files containing the selected term. You can search for it as text, for +the definition if you select an object name, or for references to a selected object. + +## More examples + +Some more examples of search strings are: + +* You can find all instances of "ToDo" comments in your code simply by selecting `comment:` and typing `todo`. + +* You can search in specific locations, such as within a particular path, by using a search string such as `Driver path:MyShuttle/Server`. + +* You can search for files by name, such as `Driver file:GreenCabs.cs`, or just by file extension. For example, the search string + `error ext:resx` could be useful when you want to review all error strings in your code. + But even if your plain text search string (without specific file type functions) + matches part of a filename, the file appears in the list of found files. + +* You can combine two or more words by using Boolean operators; for example, `validate OR release`. + +* You can find an exact match to a set of words by enclosing your search terms in double-quotes. For example, `"Client not found"`. + +* You can use the code type search functions with files written in C#, C, C++, Java, and Visual Basic.NET. + +Open the search results in a new browser tab from either search box by +pressing _Ctrl_ + _Enter_ or by holding _Ctrl_ and clicking the +![start search icon](../_img/_shared/start-search-icon.png) icon. +In Google Chrome, press _Ctrl_ + _Shift_ + _Enter_ to switch the focus +to the new browser tab. + +[!INCLUDE [shared-got-feedback](../_shared/shared-got-feedback.md)] diff --git a/docs/search/code/code-search.md b/docs/search/code/code-search.md new file mode 100644 index 00000000000..d3334874c64 --- /dev/null +++ b/docs/search/code/code-search.md @@ -0,0 +1,97 @@ +--- +title: Search your code in VSTS and Team Foundation Server +description: Get started with Code Search in VSTS and TFS +ms.assetid: 95BAB38A-C7D3-414D-9FE3-BB72B549C21C +ms.prod: vs-devops-alm +ms.technology: vs-devops-search +ms.topic: get-started-article +ms.manager: douge +ms.author: douge +ms.date: 08/04/2016 +--- + +# Search your code + +[!INCLUDE [version-header-shared-vsts-tfs](../_shared/version-header-shared-vsts-tfs.md)] + +Use Code Search to search across all of your projects, find specific types of code, +and easily drill down or widen your search + +## Prepare + +Go to [Visual Studio Marketplace](http://go.microsoft.com/fwlink/?LinkId=703823&clcid=0x409) +to install the extension in your VSTS account as an administrator. +Non-administrative users can also go here to request the extension be added to VSTS. +For more details, see [Install an extension](../../marketplace/install-vsts-extension.md#install-extension) in the Marketplace documentation. + +>Only users with Basic access can use Code Search. + +## Get searching + +1. In the search textbox at the top right of the window, check that the text says + _Search code_. The search text box may say _Search work items_. In this case, use the drop-down selector to change it. + + ![Switching between searching for code and work items](_img/get-started/title-bar-search-box-empty-outlined.png) + + If you don't see the ![select search type](../_img/_shared/search-select-type-icon.png) + selector in the Search box, open the **Manage extensions** page + and check that Code Search is installed. + + ![Checking that the extension is installed](../_img/_shared/goto-marketplace.png) + +1. Enter a search string in the textbox, and press _Enter_ (or choose the + ![start search icon](../_img/_shared/start-search-icon.png) icon) to start your search. + +1. The search page shows a list of the matching code files. The selected file has all + instances of the search string highlighted. + + ![Search results](_img/get-started/search-results-01.png) + + If you see a list of work items, ensure that **Code** is selected in the top left. + +1. Try assembling more complex search strings using the operators and functions listed in the handy + drop-down list. Select the filter function or code type you want to include in your search string from the + list, and type the criteria value. + + ![Search from VSTS title bar](_img/get-started/title-bar-search-functionlist.png) + + * You can find all instances of "ToDo" comments in your code simply by selecting `comment:` and typing `todo`. + + * You can search in specific locations, such as within a particular path, by using a search string such as `Driver path:MyShuttle/Server`. + + * You can search for files by name, such as `Driver file:GreenCabs.cs`, or just by file extension. For example, the search string + `error ext:resx` could be useful when you want to review all error strings in your code. + But even if your plain text search string (without specific file type functions) + matches part of a filename, the file appears in the list of found files. + + * You can combine two or more words by using Boolean operators; for example, `validate OR release`. + + * You can find an exact match to a set of words by enclosing your search terms in double-quotes. For example, `"Client not found"`. + + * You can use the code type search functions with files written in C#, C, C++, Java, and Visual Basic.NET. + + * See also [full details of the search syntax](advanced-search.md#syntaxdetails). + +1. Widen your search to all projects, or narrow it to specific areas and types of code, + by selecting from the drop-down lists at the top of the page. + + ![Use drop-down lists to widen or narrow your search](_img/get-started/select-projects.png) + +1. Use the tabs in the results page to view the history of the file and to compare versions of the file. + + ![Use tabs to view history and compare files](_img/get-started/compare-tab.png) + + >Open the search results in a new browser tab from either search box by + pressing _Ctrl_ + _Enter_ or by holding _Ctrl_ and clicking the + ![start search icon](../_img/_shared/start-search-icon.png) icon. + In Google Chrome, press _Ctrl_ + _Shift_ + _Enter_ to switch the focus + to the new browser tab. + +1. Choose the filename link at the top of this column to open the file in a new Code Explorer window. + + ![Open the file in Code Explorer](_img/get-started/open-in-code-explorer.png) + +## Next step + +> [!div class="nextstepaction"] +> [Learn more about Code Search](advanced-search.md) diff --git a/docs/search/code/get-started.md b/docs/search/code/get-started.md new file mode 100644 index 00000000000..62d002cf116 --- /dev/null +++ b/docs/search/code/get-started.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/code/code-search +--- diff --git a/docs/search/code/release-notes.md b/docs/search/code/release-notes.md new file mode 100644 index 00000000000..499d0f60b92 --- /dev/null +++ b/docs/search/code/release-notes.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/overview +--- diff --git a/docs/search/code/repos-and-projects.md b/docs/search/code/repos-and-projects.md new file mode 100644 index 00000000000..076d375d7b4 --- /dev/null +++ b/docs/search/code/repos-and-projects.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/code/advanced-search +--- diff --git a/docs/search/code/search-results.md b/docs/search/code/search-results.md new file mode 100644 index 00000000000..076d375d7b4 --- /dev/null +++ b/docs/search/code/search-results.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/code/advanced-search +--- diff --git a/docs/search/get-started.md b/docs/search/get-started.md new file mode 100644 index 00000000000..499d0f60b92 --- /dev/null +++ b/docs/search/get-started.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/overview +--- diff --git a/docs/search/index.md b/docs/search/index.md new file mode 100644 index 00000000000..bc15f48773c --- /dev/null +++ b/docs/search/index.md @@ -0,0 +1,39 @@ +--- +title: Search index of topics for VSTS and TFS +description: Search with VSTS and TFS +ms.assetid: A8EB4B0C-5656-4070-9A0F-488AB8288BBE +ms.prod: vs-devops-alm +ms.technology: vs-devops-search +ms.manager: douge +ms.author: ahomer +ms.date: 12/04/2016 +--- + +# Search + +Search makes it easy to locate information across all your projects, from anywhere and any computer or mobile device, +using just a web browser. + +## 5-Minute Quickstarts + +| | | +| --- | --- | +| ![icon](_img/_shared/codesearch-icon.png)
      [Search code](code/code-search.md) | ![icon](_img/_shared/wisearch-icon.png)
      [Search work items](workitem/work-item-search.md) | +| | | + +## Videos + + + +## How-to Guides + +* [Use Code Search](code/advanced-search.md) +* [Use Work Item Search](workitem/advanced-search-syntax.md) +* [Administer Search](code/administration.md) + +## Resources + +| | | | +| --- | --- | --- | +| [Code Search blog posts](https://social.msdn.microsoft.com/Search/en-US?query=code%20search&beta=0&rn=Microsoft+Application+Lifecycle+Management&rq=site:https://blogs.msdn.microsoft.com/visualstudioalm&ac=5) | [Code Search on Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search) | [Work Item Search blog posts](https://social.msdn.microsoft.com/Search/en-US?query=work%20item%20search&beta=0&rn=Microsoft+Application+Lifecycle+Management&rq=site:https://blogs.msdn.microsoft.com/visualstudioalm&ac=5) | +| | | | diff --git a/docs/search/overview.md b/docs/search/overview.md new file mode 100644 index 00000000000..f6973a5afc7 --- /dev/null +++ b/docs/search/overview.md @@ -0,0 +1,35 @@ +--- +title: Search across all your code and work items +description: Quickly Search with VSTS and TFS +ms.assetid: A0889E82-EAE7-464C-B82A-B05D2E404426 +ms.prod: vs-devops-alm +ms.technology: vs-devops-search +ms.topic: get-started-article +ms.manager: douge +ms.author: ahomer +ms.date: 12/04/2016 +--- + +# Search across all your code and work items + +[!INCLUDE [version-header-shared-vsts-tfs](_shared/version-header-shared-vsts-tfs.md)] + +Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) store a tremendous amount of information; +work items for planning and tracking your work, version control to track code file changes, +and build and release services to help you ship effortlessly. +As your backlog and codebase expand and are divided across multiple projects, teams and repositories, +finding what you need becomes increasingly difficult. To maximize cross-team +collaboration and sharing, you need solutions that can quickly and +efficiently locate information across all your projects. The Search +extensions available for VSTS and Team Foundation Server +enable you to search across all the projects, teams and repositories to which you have access. + +![Search boxes in VSTS and TFS](_img/_shared/title-bar-search-box-select-type.png) + +The Search extensions make it easy to search for information across all +your projects, from anywhere and any computer or mobile device, using just a web browser. +You can narrow down your results and focus in on what you need by using filters. + +![Code Search](_img/_shared/codesearch-icon.png)   **[Code Search](code/code-search.md)** + +![Work Item Search](_img/_shared/wisearch-icon.png)   **[Work Item Search](workitem/work-item-search.md)** diff --git a/docs/search/release-notes.md b/docs/search/release-notes.md new file mode 100644 index 00000000000..499d0f60b92 --- /dev/null +++ b/docs/search/release-notes.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/overview +--- diff --git a/docs/search/repos-and-projects.md b/docs/search/repos-and-projects.md new file mode 100644 index 00000000000..076d375d7b4 --- /dev/null +++ b/docs/search/repos-and-projects.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/code/advanced-search +--- diff --git a/docs/search/search-results.md b/docs/search/search-results.md new file mode 100644 index 00000000000..076d375d7b4 --- /dev/null +++ b/docs/search/search-results.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/code/advanced-search +--- diff --git a/docs/search/toc.yml b/docs/search/toc.yml new file mode 100644 index 00000000000..e7747e1af67 --- /dev/null +++ b/docs/search/toc.yml @@ -0,0 +1,30 @@ +- name: Search + href: index.md +- name: Overview + items: + - name: About Search + href: overview.md +- name: Quickstarts + items: + - name: Search code + href: code/code-search.md + - name: Search work items + href: workitem/work-item-search.md +- name: How-to Guides + items: + - name: Use Code Search + href: code/advanced-search.md + - name: Use Work Item Search + href: workitem/advanced-search-syntax.md + - name: Administer Search + href: code/administration.md +- name: Resources + items: + - name: Code Search Video + href: https://sec.ch9.ms/ch9/d0f4/782cd441-3b03-4323-a3a7-8ab168cdd0f4/CodeSearch_high.mp4 + - name: Code Search on Marketplace + href: https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search + - name: Code Search blog posts + href: https://social.msdn.microsoft.com/Search/en-US?query=code%20search&beta=0&rn=Microsoft+Application+Lifecycle+Management&rq=site:https://blogs.msdn.microsoft.com/visualstudioalm&ac=5 + - name: Work Item Search blog posts + href: https://social.msdn.microsoft.com/Search/en-US?query=work%20item%20search&beta=0&rn=Microsoft+Application+Lifecycle+Management&rq=site:https://blogs.msdn.microsoft.com/visualstudioalm&ac=5 diff --git a/docs/search/workitem/_img/advanced-search-syntax/open-work-item-modal.png b/docs/search/workitem/_img/advanced-search-syntax/open-work-item-modal.png new file mode 100644 index 00000000000..f4f14740914 Binary files /dev/null and b/docs/search/workitem/_img/advanced-search-syntax/open-work-item-modal.png differ diff --git a/docs/search/workitem/_img/advanced-search-syntax/title-bar-search-quick-filters.png b/docs/search/workitem/_img/advanced-search-syntax/title-bar-search-quick-filters.png new file mode 100644 index 00000000000..152ebc5fc46 Binary files /dev/null and b/docs/search/workitem/_img/advanced-search-syntax/title-bar-search-quick-filters.png differ diff --git a/docs/search/workitem/_img/get-started/NewFilters.gif b/docs/search/workitem/_img/get-started/NewFilters.gif new file mode 100644 index 00000000000..a746404e01d Binary files /dev/null and b/docs/search/workitem/_img/get-started/NewFilters.gif differ diff --git a/docs/search/workitem/_img/get-started/NewSearchAcross.gif b/docs/search/workitem/_img/get-started/NewSearchAcross.gif new file mode 100644 index 00000000000..36502078c87 Binary files /dev/null and b/docs/search/workitem/_img/get-started/NewSearchAcross.gif differ diff --git a/docs/search/workitem/_img/get-started/all-fields-anim.gif b/docs/search/workitem/_img/get-started/all-fields-anim.gif new file mode 100644 index 00000000000..3a7625551ed Binary files /dev/null and b/docs/search/workitem/_img/get-started/all-fields-anim.gif differ diff --git a/docs/search/workitem/_img/get-started/area-selectors.png b/docs/search/workitem/_img/get-started/area-selectors.png new file mode 100644 index 00000000000..c0084b5ad13 Binary files /dev/null and b/docs/search/workitem/_img/get-started/area-selectors.png differ diff --git a/docs/search/workitem/_img/get-started/dyna-dropdown.png b/docs/search/workitem/_img/get-started/dyna-dropdown.png new file mode 100644 index 00000000000..e7778ef8f9a Binary files /dev/null and b/docs/search/workitem/_img/get-started/dyna-dropdown.png differ diff --git a/docs/search/workitem/_img/get-started/quick-filters-anim.gif b/docs/search/workitem/_img/get-started/quick-filters-anim.gif new file mode 100644 index 00000000000..407bbbadb77 Binary files /dev/null and b/docs/search/workitem/_img/get-started/quick-filters-anim.gif differ diff --git a/docs/search/workitem/_img/get-started/quick-filters.gif b/docs/search/workitem/_img/get-started/quick-filters.gif new file mode 100644 index 00000000000..b7b406fb087 Binary files /dev/null and b/docs/search/workitem/_img/get-started/quick-filters.gif differ diff --git a/docs/search/workitem/_img/get-started/results-matching.png b/docs/search/workitem/_img/get-started/results-matching.png new file mode 100644 index 00000000000..14e5f51a71d Binary files /dev/null and b/docs/search/workitem/_img/get-started/results-matching.png differ diff --git a/docs/search/workitem/_img/get-started/search-across-fields.gif b/docs/search/workitem/_img/get-started/search-across-fields.gif new file mode 100644 index 00000000000..1a1b80f890b Binary files /dev/null and b/docs/search/workitem/_img/get-started/search-across-fields.gif differ diff --git a/docs/search/workitem/_img/get-started/search-results-02.png b/docs/search/workitem/_img/get-started/search-results-02.png new file mode 100644 index 00000000000..168a7ff4ce5 Binary files /dev/null and b/docs/search/workitem/_img/get-started/search-results-02.png differ diff --git a/docs/search/workitem/_img/get-started/static-dropdown.png b/docs/search/workitem/_img/get-started/static-dropdown.png new file mode 100644 index 00000000000..3d9a7b44935 Binary files /dev/null and b/docs/search/workitem/_img/get-started/static-dropdown.png differ diff --git a/docs/search/workitem/_img/get-started/title-bar-search-box-empty-outlined.png b/docs/search/workitem/_img/get-started/title-bar-search-box-empty-outlined.png new file mode 100644 index 00000000000..e854da3f629 Binary files /dev/null and b/docs/search/workitem/_img/get-started/title-bar-search-box-empty-outlined.png differ diff --git a/docs/search/workitem/advanced-search-syntax.md b/docs/search/workitem/advanced-search-syntax.md new file mode 100644 index 00000000000..c29ac47ba12 --- /dev/null +++ b/docs/search/workitem/advanced-search-syntax.md @@ -0,0 +1,206 @@ +--- +title: Advanced search options in Microsoft Work Item Search in VS Team Services +description: Advanced options for Work Item Search in Visual Studio Team Services +ms.assetid: B64E70C5-E5B2-49E6-BD05-FF5932F9894C +ms.prod: vs-devops-alm +ms.technology: vs-devops-search +ms.manager: douge +ms.author: ahomer +ms.date: 12/04/2016 +--- + +# How To: Use Work Item Search + +[!INCLUDE [version-header-shared-vsts-tfs](../_shared/version-header-shared-vsts-tfs.md)] + +Work Item Search is available as a built-in extension in Visual Studio Team Services (VSTS). +Users can use Work Item Search by default without any installation. + +By using Work Item Search you can: + +* **Search over all your projects**: + Search in your own and your partner teams' backlog. Use cross-project + searches over all the work items in your VSTS account to search + across your organization's entire work items. Narrow your search by using project and + area path filters. + +* **Search across all work item fields**: + Quickly and easily find relevant work items by searching across all work item fields + (including custom fields). Use a full text search across all fields to efficiently + locate relevant work items. The snippet view indicates where matches were found.

      + +* **Search in specific fields**: + Use the quick in-line search filters, on any work item field, to narrow down to a + list of work items in seconds. The dropdown list of suggestions helps complete your + search faster. For example, a search such as **AssignedTo:Chris WorkItemType:Bug + State:Active** finds all active bugs assigned to a user named Chris. + +* **Take advantage of integration with work item tracking**: + The Work Item Search interface integrates with familiar controls in the **Work** hub, + letting you view, edit, comment, share, and much more. + + +## Full text search across all fields + +You can easily search across all work item fields, including custom fields, +which enables more natural searches. The snippet view indicates where matches were found. + +Search across all work item fields + +Use simple search strings for words or phrases. Work item search matches derived forms +of your search terms; for example, a search for "updating" will also find instances of the word +"updated" and "update". Note that searches are _not_ case-sensitive. + +When you search from inside a project, the default is to search only within that +project. When you search from inside a team, the default is to search +only within the default area path of that team. When you have one project selected, +you see a list of area paths in that project for which you have read access - +you won't see any projects and area paths for which you don't have read permission. +Select area paths in the tree to narrow your search if required. + +The selected projects are always at the top of the list. +Notice that hit counts are also shown for projects that are not selected. + +Open the search results in a new browser tab from either search box by +pressing _Ctrl_ + _Enter_ or by holding _Ctrl_ and clicking the +![start search icon](../_img/_shared/start-search-icon.png) icon. +In Google Chrome, press _Ctrl_ + _Shift_ + _Enter_ to switch the focus +to the new browser tab. + + +## Quick Filters for matching in specific fields + +Quick inline search filters let you refine work items in seconds. +The dropdown list of suggestions helps complete your search faster. +Mix and match the functions to create quick powerful searches. For example: + +* Scope your search terms to match in any work item field including custom fields. +Simply type the field name followed by the search terms; for example, a search such as **tags:Critical** +finds work items having a field 'tags' containing the term 'Critical'. + +* Use multiple inline search filters to scope your search by any work item field, including custom fields. +For example, a search such as **t: Bug path:"project\search"** finds all bugs in the area path "project\search". + +* Use the operators `>`, `>=`, `<`, `<=`, `=`, and `!=` for date, integer and float fields. +For example, a search such as **t: Bug CreatedDate> @Today-7** finds all bugs created in the last week + +* For the search query that contain multiple terms and users looking for exact match, embed the search term inside " "; +for example, a search such as **BuildPath: "tools.demoproject.com"** finds all work items that neccesarily contain the path "tools.demoproject.com". + +Quick inline search filters let you refine work items in seconds + +## Quick Filters shortcuts + +The common inline search filters can be quickly accessed using shortcuts: + +* `a:` for **Assigned to:** +* `c:` for **Created by:** +* `s:` for **State** +* `t:` for **Work item type** + +For example, you can use quick searches such as **a:@Me s:active t:bug** to find all bugs assigned to you. + +![Quick Filters shortcuts](_img/advanced-search-syntax/title-bar-search-quick-filters.png) + + +## Filters to scope projects, area and iteration paths + +Filters make it easy to narrow the search to specified projects and area paths. +Narrow the search to a specific location using the `proj`, `area`, or `iteration` filters: + +* `Wiki proj:Fabrikam` finds all occurrences of the word **Wiki** in the **Fabrikam** project. +* `Wiki area:Contoso/Mobile` finds all occurrences of the word **Wiki** + in the area path **Contoso/Mobile** and its sub-paths. +* `Wiki iteration:Contoso/Sprint101` finds all occurrences of the word **Wiki** + in the iteration path **Contoso/Sprint101** and its sub-paths. +* Enclose the argument to the filter in double-quotes if it contains a space. + For example: `Wiki path:"Contoso/Windows Phones and Devices/Services"`. + + +## Quickly navigate to a work item using its ID + +Type or paste the work item ID in the search box in the VSTS title bar +to quickly navigate to it. Searching for a work item ID opens the work item in a +modal dialog, providing quick access to read and edit work items. + +![Opening the work item in a modal dialogue](_img/advanced-search-syntax/open-work-item-modal.png) + + +## Narrow your search with Boolean operators + +Narrow your search by using Boolean operators to combine search criteria. +Combine multiple search criteria using `AND`, `OR`, or `NOT` (they must be +uppercase). + +Use parentheses to specify the precedence of the operations when you use more than +one Boolean operator. By default, a search combines all the words you enter using +the `AND` operator so that it will return only work items that contain all of the +words you entered. + +For example: + +* `welcome AND page` finds work items that contain derived forms of both the words **welcome** and + **page**. Note that `AND` is the default operator, and so this is equivalent to + the search string `welcome page`. +* `signup OR signin` finds work items that contain either of the words **signup** or **signin**. +* `signin NOT signup` finds work items that contain the word **signin** but not the word **signup**. +* `(signin NOT signup) OR "user login"` finds work items that contain the word **signin** + but not the word **signup** or work items that contain the phrase **user login**. + +To find an exact match to a set of words, enclose your search terms in double-quotes. +For example, `"Client not found"` + + +## Broaden your search with wildcards + +Use the wildcard characters `*` and `?` to broaden your search criteria. For +example: + +* `Browser*` finds work items containing words that start with **Browser**, + such as **BrowserEdge**, **BrowserIE** and **BrowserFirefox**. +* `alpha?version` finds work items containing words that start with **alpha**, have any + alphanumeric character next, and end with **version**. For example, **alpha1version** and **alphaXversion**. + +You can use wildcard characters anywhere in your search string **except** as +a **prefix**. For example, you cannot use a search query such as `*RequestHandler`. +However, you can use prefix wildcards with the +other search filter functions; for example, the search query strings +`area:*mobile` and `tags:*Browser` are valid. + +You can use more than one `?` wildcard to match more than one character. + +----------------- + +![Warning](../_img/_shared/Warning-hightop.png) **No results found for ...** + +* If there are no results matching the input, try removing filters and retry the search. This will broaden the search and after you view the search results, + you can apply appropriate filters again and search again for relevant results + +* Check for the spelling of your search terms. Currently Work item search doesn't support ignoring of users' spelling mistakes + +* If there are a very large number of hits when using a wildcard search, such + as when using a very simple wildcard search string, you may see a message that no + matching files were found. In this case, narrow your search to reduce the number + of matches. For example, specify more characters of the word(s) you want to find, + or add a condition or filter to limit the number of possible matches. + +----------------- + + +## See more of the work item + +You can quickly get a full screen view of the selected work item using the expand +![Expand the file to fullscreen](../_img/_shared/fullscreen-icon-expand.png) +and shrink ![Shrink the file to a window](../_img/_shared/fullscreen-icon-shrink.png) +icons in the toolbar. However, another way to see more of the work item, while still being able to +select work items from the list of matching results, is to hide the left column filter pane +by choosing the **<** icon at the top left of the column. Use the **>** icon to restore the filter pane. + +If you are using a portrait orientation screen, use the **Preview pane: Right** +link at the top right of the window to display the code below the +search results list. + +>Search remembers the state of the filter pane, configuration of the work item +view pane, and its position between sessions as part of your user preferences. + +[!INCLUDE [shared-got-feedback](../_shared/shared-got-feedback.md)] diff --git a/docs/search/workitem/get-started.md b/docs/search/workitem/get-started.md new file mode 100644 index 00000000000..a910677dbbf --- /dev/null +++ b/docs/search/workitem/get-started.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/workitem/work-item-search +--- diff --git a/docs/search/workitem/search-results.md b/docs/search/workitem/search-results.md new file mode 100644 index 00000000000..4af58a393c6 --- /dev/null +++ b/docs/search/workitem/search-results.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/search/workitem/advanced-search-syntax +--- diff --git a/docs/search/workitem/work-item-search.md b/docs/search/workitem/work-item-search.md new file mode 100644 index 00000000000..2d67328d158 --- /dev/null +++ b/docs/search/workitem/work-item-search.md @@ -0,0 +1,88 @@ +--- +title: Search for work items in a VSTS account +description: Use Work Item Search to search across all work item fields over all projects of your VSTS and TFS projects +ms.assetid: 133EF8B9-B4F9-4057-9CB3-E745A7E0B8F5 +ms.prod: vs-devops-alm +ms.technology: vs-devops-search +ms.topic: get-started-article +ms.manager: douge +ms.author: ahomer +ms.date: 12/04/2016 +--- + +# Search for work items + +[!INCLUDE [version-header-shared-vsts-tfs](../_shared/version-header-shared-vsts-tfs.md)] + +Work Item Search provides fast and flexible search across all your work items over all projects in an account. + + +## Get searching + +1. In the search textbox at the top right of the window, check that the text says + _Search work items_. + + ![The Work Item Search textbox in the VSTS title bar](_img/get-started/title-bar-search-box-empty-outlined.png) + + If you have the Code Search extension installed, the search text box may + say _Search code_. In this case, use the drop-down selector to change it. + +1. Enter a search string in the textbox, and press _Enter_ (or choose the + ![start search icon](../_img/_shared/start-search-icon.png) icon) to start your search. + +1. Search results are displayed in a snippet view where the matches found are shown in bold. + + ![Search results](_img/get-started/results-matching.png) + + This is a full text search that uses simple search strings for words or phrases. + Work item search matches derived forms of your search terms; for example, a search for + "updating" will also find instances of the word "updated" and "update". Note that searches are _not_ case-sensitive. + +1. Select a snippet of a work item to display it in the right window. + You can edit and manage this work item in the usual way. + + ![Display a work item](_img/get-started/search-results-02.png) + + >Open the search results in a new browser tab from a search box by + pressing _Ctrl_ + _Enter_ or by holding _Ctrl_ and clicking the + ![start search icon](../_img/_shared/start-search-icon.png) icon. + In Google Chrome, press _Ctrl_ + _Shift_ + _Enter_ to switch the focus + to the new browser tab. + +1. Fine tune your search by specifying the fields to search. Enter `a:` and a user name + to search for all items assigned to that user. + + ![Static drop down](_img/get-started/static-dropdown.png) + + The quick filters you can use are: + + * `a:` for **Assigned to:** + * `c:` for **Created by:** + * `s:` for **State** + * `t:` for **Work item type**

      + +1. Start typing the name of a field in your work items; for example, type `ta`. + + ![Quick filters as you type](_img/get-started/dyna-dropdown.png) + + The dropdown list shows work item field name suggestions + that match user input thereby helping the user to complete the search faster. For example, a search such as + **tags:Critical** finds all work items tagged 'Critical'. + +1. Add more filters to further narrow your search, and use Boolean operators + to combine terms if required. For example, + **a: Chris t: Bug s: Active** finds all active bugs assigned + to a user named Chris. + +1. Widen your search across all projects, or narrow it to specific types + and states, by using the drop-down selector lists at the top of the results page. + + ![Selector drop-down lists](_img/get-started/area-selectors.png) + + + >Work Item search remembers your filter settings. For example, the project and area path that you have selected in a search will be applied in your subsequent searches. + +## Next step + +> [!div class="nextstepaction"] +> [Learn more about Work Item Search](advanced-search-syntax.md) diff --git a/docs/security/_img/ALM_CAL_OpenAdminPage.png b/docs/security/_img/ALM_CAL_OpenAdminPage.png new file mode 100644 index 00000000000..555043a0104 Binary files /dev/null and b/docs/security/_img/ALM_CAL_OpenAdminPage.png differ diff --git a/docs/security/_img/about-permissions-trace.png b/docs/security/_img/about-permissions-trace.png new file mode 100644 index 00000000000..4f31bb28d6d Binary files /dev/null and b/docs/security/_img/about-permissions-trace.png differ diff --git a/docs/security/_img/about-permissions-why.png b/docs/security/_img/about-permissions-why.png new file mode 100644 index 00000000000..0add4ec4f18 Binary files /dev/null and b/docs/security/_img/about-permissions-why.png differ diff --git a/docs/security/_img/access-groups-permissions.png b/docs/security/_img/access-groups-permissions.png new file mode 100644 index 00000000000..88fc4b0f40e Binary files /dev/null and b/docs/security/_img/access-groups-permissions.png differ diff --git a/docs/security/_img/access-levels-2015-advanced.png b/docs/security/_img/access-levels-2015-advanced.png new file mode 100644 index 00000000000..a7578b19239 Binary files /dev/null and b/docs/security/_img/access-levels-2015-advanced.png differ diff --git a/docs/security/_img/access-levels-2017-basic.png b/docs/security/_img/access-levels-2017-basic.png new file mode 100644 index 00000000000..f4bb2112d96 Binary files /dev/null and b/docs/security/_img/access-levels-2017-basic.png differ diff --git a/docs/security/_img/access-levels-2017-open-admin-context.png b/docs/security/_img/access-levels-2017-open-admin-context.png new file mode 100644 index 00000000000..76bf75d39f5 Binary files /dev/null and b/docs/security/_img/access-levels-2017-open-admin-context.png differ diff --git a/docs/security/_img/access-levels-2017-stakeholder-acess.png b/docs/security/_img/access-levels-2017-stakeholder-acess.png new file mode 100644 index 00000000000..1126fbe9859 Binary files /dev/null and b/docs/security/_img/access-levels-2017-stakeholder-acess.png differ diff --git a/docs/security/_img/access-levels-2017-stakeholder.png b/docs/security/_img/access-levels-2017-stakeholder.png new file mode 100644 index 00000000000..1b6d27a6c46 Binary files /dev/null and b/docs/security/_img/access-levels-2017-stakeholder.png differ diff --git a/docs/security/_img/access-levels-2017-update2-vs-t.png b/docs/security/_img/access-levels-2017-update2-vs-t.png new file mode 100644 index 00000000000..be9e01d84b4 Binary files /dev/null and b/docs/security/_img/access-levels-2017-update2-vs-t.png differ diff --git a/docs/security/_img/access-levels-2017-vs.png b/docs/security/_img/access-levels-2017-vs.png new file mode 100644 index 00000000000..c110019f6a3 Binary files /dev/null and b/docs/security/_img/access-levels-2017-vs.png differ diff --git a/docs/security/_img/add-team-administrator.png b/docs/security/_img/add-team-administrator.png new file mode 100644 index 00000000000..f4c5ce514a4 Binary files /dev/null and b/docs/security/_img/add-team-administrator.png differ diff --git a/docs/security/_img/add-user.png b/docs/security/_img/add-user.png new file mode 100644 index 00000000000..5b3d1409200 Binary files /dev/null and b/docs/security/_img/add-user.png differ diff --git a/docs/security/_img/change-access-levels-export-audit-log.png b/docs/security/_img/change-access-levels-export-audit-log.png new file mode 100644 index 00000000000..b3a739cfdda Binary files /dev/null and b/docs/security/_img/change-access-levels-export-audit-log.png differ diff --git a/docs/security/_img/change-access-levels-set-default.png b/docs/security/_img/change-access-levels-set-default.png new file mode 100644 index 00000000000..91f46428d51 Binary files /dev/null and b/docs/security/_img/change-access-levels-set-default.png differ diff --git a/docs/security/_img/change-access-levels-stakeholder-add-user.png b/docs/security/_img/change-access-levels-stakeholder-add-user.png new file mode 100644 index 00000000000..5b893aedfdd Binary files /dev/null and b/docs/security/_img/change-access-levels-stakeholder-add-user.png differ diff --git a/docs/security/_img/checkmark.png b/docs/security/_img/checkmark.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/security/_img/checkmark.png differ diff --git a/docs/security/_img/collection-level-permissions-work-tracking-group.png b/docs/security/_img/collection-level-permissions-work-tracking-group.png new file mode 100644 index 00000000000..0ad8221e471 Binary files /dev/null and b/docs/security/_img/collection-level-permissions-work-tracking-group.png differ diff --git a/docs/security/_img/contributor-permissions.png b/docs/security/_img/contributor-permissions.png new file mode 100644 index 00000000000..692f92f2a53 Binary files /dev/null and b/docs/security/_img/contributor-permissions.png differ diff --git a/docs/security/_img/icons/Action_Add.png b/docs/security/_img/icons/Action_Add.png new file mode 100644 index 00000000000..1fafd77fee6 Binary files /dev/null and b/docs/security/_img/icons/Action_Add.png differ diff --git a/docs/security/_img/icons/actions-icon.png b/docs/security/_img/icons/actions-icon.png new file mode 100644 index 00000000000..4b5e7389162 Binary files /dev/null and b/docs/security/_img/icons/actions-icon.png differ diff --git a/docs/security/_img/icons/add_icon.png b/docs/security/_img/icons/add_icon.png new file mode 100644 index 00000000000..7259c747558 Binary files /dev/null and b/docs/security/_img/icons/add_icon.png differ diff --git a/docs/security/_img/icons/checkmark.png b/docs/security/_img/icons/checkmark.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/security/_img/icons/checkmark.png differ diff --git a/docs/security/_img/icons/gear_icon.png b/docs/security/_img/icons/gear_icon.png new file mode 100644 index 00000000000..0bad2ccf47b Binary files /dev/null and b/docs/security/_img/icons/gear_icon.png differ diff --git a/docs/security/_img/icons/icon-save-wi.png b/docs/security/_img/icons/icon-save-wi.png new file mode 100644 index 00000000000..06e97592f0b Binary files /dev/null and b/docs/security/_img/icons/icon-save-wi.png differ diff --git a/docs/security/_img/icons/project-icon.png b/docs/security/_img/icons/project-icon.png new file mode 100644 index 00000000000..806ceb3f6b7 Binary files /dev/null and b/docs/security/_img/icons/project-icon.png differ diff --git a/docs/security/_img/icons/search_filter_icon.png b/docs/security/_img/icons/search_filter_icon.png new file mode 100644 index 00000000000..1a9686ad5ee Binary files /dev/null and b/docs/security/_img/icons/search_filter_icon.png differ diff --git a/docs/security/_img/icons/team-settings-gear-icon.png b/docs/security/_img/icons/team-settings-gear-icon.png new file mode 100644 index 00000000000..d32acc9bceb Binary files /dev/null and b/docs/security/_img/icons/team-settings-gear-icon.png differ diff --git a/docs/security/_img/permissions/admin-permissions.png b/docs/security/_img/permissions/admin-permissions.png new file mode 100644 index 00000000000..20463ddfd59 Binary files /dev/null and b/docs/security/_img/permissions/admin-permissions.png differ diff --git a/docs/security/_img/permissions/area-permissions.png b/docs/security/_img/permissions/area-permissions.png new file mode 100644 index 00000000000..47e4cbe92e9 Binary files /dev/null and b/docs/security/_img/permissions/area-permissions.png differ diff --git a/docs/security/_img/permissions/build-permissions.png b/docs/security/_img/permissions/build-permissions.png new file mode 100644 index 00000000000..c09338c7329 Binary files /dev/null and b/docs/security/_img/permissions/build-permissions.png differ diff --git a/docs/security/_img/permissions/collection-groups-and-permissions.png b/docs/security/_img/permissions/collection-groups-and-permissions.png new file mode 100644 index 00000000000..3f7b1b33870 Binary files /dev/null and b/docs/security/_img/permissions/collection-groups-and-permissions.png differ diff --git a/docs/security/_img/permissions/contributor-permissions.png b/docs/security/_img/permissions/contributor-permissions.png new file mode 100644 index 00000000000..692f92f2a53 Binary files /dev/null and b/docs/security/_img/permissions/contributor-permissions.png differ diff --git a/docs/security/_img/permissions/deny-permissions.png b/docs/security/_img/permissions/deny-permissions.png new file mode 100644 index 00000000000..691082947b8 Binary files /dev/null and b/docs/security/_img/permissions/deny-permissions.png differ diff --git a/docs/security/_img/permissions/git-permissions-prior-to-2017.png b/docs/security/_img/permissions/git-permissions-prior-to-2017.png new file mode 100644 index 00000000000..d487699c368 Binary files /dev/null and b/docs/security/_img/permissions/git-permissions-prior-to-2017.png differ diff --git a/docs/security/_img/permissions/git-permissions.png b/docs/security/_img/permissions/git-permissions.png new file mode 100644 index 00000000000..39a19fcc754 Binary files /dev/null and b/docs/security/_img/permissions/git-permissions.png differ diff --git a/docs/security/_img/permissions/grant-permissions.png b/docs/security/_img/permissions/grant-permissions.png new file mode 100644 index 00000000000..c45876bb567 Binary files /dev/null and b/docs/security/_img/permissions/grant-permissions.png differ diff --git a/docs/security/_img/permissions/inherited-permissions.png b/docs/security/_img/permissions/inherited-permissions.png new file mode 100644 index 00000000000..87961b7019a Binary files /dev/null and b/docs/security/_img/permissions/inherited-permissions.png differ diff --git a/docs/security/_img/permissions/iteration-permissions.png b/docs/security/_img/permissions/iteration-permissions.png new file mode 100644 index 00000000000..402fdf2d099 Binary files /dev/null and b/docs/security/_img/permissions/iteration-permissions.png differ diff --git a/docs/security/_img/permissions/permissions-overview.png b/docs/security/_img/permissions/permissions-overview.png new file mode 100644 index 00000000000..048429de71c Binary files /dev/null and b/docs/security/_img/permissions/permissions-overview.png differ diff --git a/docs/security/_img/permissions/query-folder-permissions.png b/docs/security/_img/permissions/query-folder-permissions.png new file mode 100644 index 00000000000..a13a98e4835 Binary files /dev/null and b/docs/security/_img/permissions/query-folder-permissions.png differ diff --git a/docs/security/_img/permissions/server-groups-and-permissions.png b/docs/security/_img/permissions/server-groups-and-permissions.png new file mode 100644 index 00000000000..5008ab322d7 Binary files /dev/null and b/docs/security/_img/permissions/server-groups-and-permissions.png differ diff --git a/docs/security/_img/permissions/server-groups.png b/docs/security/_img/permissions/server-groups.png new file mode 100644 index 00000000000..893c94c46bf Binary files /dev/null and b/docs/security/_img/permissions/server-groups.png differ diff --git a/docs/security/_img/permissions/server-permissions.png b/docs/security/_img/permissions/server-permissions.png new file mode 100644 index 00000000000..6d6a8f83f2a Binary files /dev/null and b/docs/security/_img/permissions/server-permissions.png differ diff --git a/docs/security/_img/permissions/team-project-groups-and-permissions.png b/docs/security/_img/permissions/team-project-groups-and-permissions.png new file mode 100644 index 00000000000..e80d49f2220 Binary files /dev/null and b/docs/security/_img/permissions/team-project-groups-and-permissions.png differ diff --git a/docs/security/_img/permissions/tfvc-permissions.png b/docs/security/_img/permissions/tfvc-permissions.png new file mode 100644 index 00000000000..483c123b001 Binary files /dev/null and b/docs/security/_img/permissions/tfvc-permissions.png differ diff --git a/docs/security/_img/permissions/turn-on-inheritance.png b/docs/security/_img/permissions/turn-on-inheritance.png new file mode 100644 index 00000000000..e5e478ad624 Binary files /dev/null and b/docs/security/_img/permissions/turn-on-inheritance.png differ diff --git a/docs/security/_img/permissions/users-groups.png b/docs/security/_img/permissions/users-groups.png new file mode 100644 index 00000000000..5634085bc9c Binary files /dev/null and b/docs/security/_img/permissions/users-groups.png differ diff --git a/docs/security/_img/project-level-permissions-add-a-user.png b/docs/security/_img/project-level-permissions-add-a-user.png new file mode 100644 index 00000000000..1737db7eb38 Binary files /dev/null and b/docs/security/_img/project-level-permissions-add-a-user.png differ diff --git a/docs/security/_img/project-level-permissions-add-group.png b/docs/security/_img/project-level-permissions-add-group.png new file mode 100644 index 00000000000..97393ba221d Binary files /dev/null and b/docs/security/_img/project-level-permissions-add-group.png differ diff --git a/docs/security/_img/project-level-permissions-add-member.png b/docs/security/_img/project-level-permissions-add-member.png new file mode 100644 index 00000000000..8f5584edb64 Binary files /dev/null and b/docs/security/_img/project-level-permissions-add-member.png differ diff --git a/docs/security/_img/project-level-permissions-contributors-group.png b/docs/security/_img/project-level-permissions-contributors-group.png new file mode 100644 index 00000000000..b326d87991f Binary files /dev/null and b/docs/security/_img/project-level-permissions-contributors-group.png differ diff --git a/docs/security/_img/project-level-permissions-create-group.png b/docs/security/_img/project-level-permissions-create-group.png new file mode 100644 index 00000000000..3fe53487d3c Binary files /dev/null and b/docs/security/_img/project-level-permissions-create-group.png differ diff --git a/docs/security/_img/project-level-permissions-member-added.png b/docs/security/_img/project-level-permissions-member-added.png new file mode 100644 index 00000000000..771a8374906 Binary files /dev/null and b/docs/security/_img/project-level-permissions-member-added.png differ diff --git a/docs/security/_img/set-build-collection-level-permission-dialog.png b/docs/security/_img/set-build-collection-level-permission-dialog.png new file mode 100644 index 00000000000..a5cb0ceb283 Binary files /dev/null and b/docs/security/_img/set-build-collection-level-permission-dialog.png differ diff --git a/docs/security/_img/set-build-permission-dialog.png b/docs/security/_img/set-build-permission-dialog.png new file mode 100644 index 00000000000..ce0a5e0d2f2 Binary files /dev/null and b/docs/security/_img/set-build-permission-dialog.png differ diff --git a/docs/security/_img/set-build-permission-open-dialog.png b/docs/security/_img/set-build-permission-open-dialog.png new file mode 100644 index 00000000000..34ee322b765 Binary files /dev/null and b/docs/security/_img/set-build-permission-open-dialog.png differ diff --git a/docs/security/_img/set-release-permission-dialog.png b/docs/security/_img/set-release-permission-dialog.png new file mode 100644 index 00000000000..65c87b579e1 Binary files /dev/null and b/docs/security/_img/set-release-permission-dialog.png differ diff --git a/docs/security/_img/set-release-permission-open-dialog.png b/docs/security/_img/set-release-permission-open-dialog.png new file mode 100644 index 00000000000..5d5b7927098 Binary files /dev/null and b/docs/security/_img/set-release-permission-open-dialog.png differ diff --git a/docs/security/_img/set-repo-git-permissions.png b/docs/security/_img/set-repo-git-permissions.png new file mode 100644 index 00000000000..9928b9e0eb0 Binary files /dev/null and b/docs/security/_img/set-repo-git-permissions.png differ diff --git a/docs/security/_img/set-repo-tfvc-permissions.png b/docs/security/_img/set-repo-tfvc-permissions.png new file mode 100644 index 00000000000..fa0ae45522a Binary files /dev/null and b/docs/security/_img/set-repo-tfvc-permissions.png differ diff --git a/docs/security/_img/view-permissions-member-of.png b/docs/security/_img/view-permissions-member-of.png new file mode 100644 index 00000000000..01dafb573e1 Binary files /dev/null and b/docs/security/_img/view-permissions-member-of.png differ diff --git a/docs/security/_img/view-permissions-project-level-membership.png b/docs/security/_img/view-permissions-project-level-membership.png new file mode 100644 index 00000000000..2d56a1ca3dc Binary files /dev/null and b/docs/security/_img/view-permissions-project-level-membership.png differ diff --git a/docs/security/_img/view-permissions-project-level.png b/docs/security/_img/view-permissions-project-level.png new file mode 100644 index 00000000000..fa413f4b53e Binary files /dev/null and b/docs/security/_img/view-permissions-project-level.png differ diff --git a/docs/security/_img/view-permissions-search-user-name.png b/docs/security/_img/view-permissions-search-user-name.png new file mode 100644 index 00000000000..4825091f4e4 Binary files /dev/null and b/docs/security/_img/view-permissions-search-user-name.png differ diff --git a/docs/security/_img/web-site-settings/default-setting-group.png b/docs/security/_img/web-site-settings/default-setting-group.png new file mode 100644 index 00000000000..9f627dcf005 Binary files /dev/null and b/docs/security/_img/web-site-settings/default-setting-group.png differ diff --git a/docs/security/_img/web-site-settings/edge-certificate-error.png b/docs/security/_img/web-site-settings/edge-certificate-error.png new file mode 100644 index 00000000000..08f4fcddcda Binary files /dev/null and b/docs/security/_img/web-site-settings/edge-certificate-error.png differ diff --git a/docs/security/_img/web-site-settings/https-and-http-setting-group.png b/docs/security/_img/web-site-settings/https-and-http-setting-group.png new file mode 100644 index 00000000000..46fc3451bcd Binary files /dev/null and b/docs/security/_img/web-site-settings/https-and-http-setting-group.png differ diff --git a/docs/security/about-permissions.md b/docs/security/about-permissions.md new file mode 100644 index 00000000000..14a70ad2f5d --- /dev/null +++ b/docs/security/about-permissions.md @@ -0,0 +1,221 @@ +--- +title: Understand how permissions and groups are defined in VSTS & TFS +description: Understand how permissions are managed in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +--- + +# About permissions and groups + + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +To access the resources you manage in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS)—like your code, builds, and work—you need to have permissions to those specific resources. Most permissions are granted through built-in security groups as described in [Permissions and access](permissions-access.md). + +Permissions may apply to a specific team project or objects within the team project, such as Git or TFVC repositories, branches, build definitions, area paths, and more. Or, they can apply to an entire VSTS account or TFS collection, or to a TFS instance. Each functional area uses groups to simplify management across the deployment. + +You manage security groups and permissions from the web portal administration context. Permissions are automatically set based on the group that you add users to, or based on the object, project, collection, or server level to which you add groups. + +## Permission settings + +Here's what you need to know about permission settings: + +- **Allow** or **Deny** explicitly grants or restricts users from performing specific tasks, and are usually inherited from group membership. + +- **Not set** implicitly denies users the ability to perform tasks that require that permission, but allows membership in a group that does have that permission set to take precedence, also known as **Inherited allow** and **Inherited deny**. + +- For most groups and almost all permissions, **Deny** trumps **Allow**. If a user belongs to two groups, and one of them has a specific permission set to **Deny**, that user will not be able to perform tasks that require that permission even if they belong to a group that has that permission set to **Allow**. + + For members of the **Project Collection Administrators** or **Team Foundation Administrators** groups, Deny doesn't trump Allow. Permissions assigned to these groups take precedent over any Deny set within any other group to which that member might belong. + +- Changing a permission for a group changes that permission for all users who are granted that permission through their membership in that group. In other words, depending on the size of the group, you might affect the ability of hundreds of users to do their jobs by changing just one permission. So make sure you understand the impact before you make a change. + +Two useful tips for understanding the effects of change: The **Member of** tab shows the groups that an individual user or group belongs to. You can also hover over an inherited permission, and a **Why?** icon will appear. If you choose it, a dialog box will open with more information. + +Control panel, team project, Security tab, Contributors group, permissions + + + +## Inheritance + +If a permission isn't directly allowed or denied for a user, then it may be inherited in two ways. +- Users inherit permissions from the groups to which they belong. +When a permission is allowed for a user directly or through membership in a group that has that permission, +and it is denied, either directly or through group membership, +the permission is denied. + + > Members of **Project Collection Administrators** or **Team Foundation Administrators** + > retain any allowed permissions, even if they belong to other groups that deny those permissions. + +- Object-level permissions that are assigned for nodes of a hierarchy - +areas, iterations, version control folders, work item query folders - +are inherited down the hierarchy. +That is, a user's permissions that are set at `area-1` are inherited by `area-1/sub-area-1`, +if the same permission is not explicitly allowed or denied for `area-1/sub-area-1`. +If a permission is set explicitly for an object, like `area-1/sub-area-1`, +then the parent node is not inheritied, regardless of whether it is denied or allowed. +If it's not set, then the permissions for that node are inheritied from the closest ancestor +that has the permission explicitly set. + +To understand why a permission is inherited, you can pause over the permission setting, and then choose **Why?**. + +###VSTS, TFS 2017 + + + +A new window opens that shows the inheritance information for that permission. + + + +### TFS 2015, TFS 2013 + + +Some object level Security dialog boxes provide an Inheritance on/off option. +Use this option to disable inheritance for folders, shared queries, and other objects. + + + +**When assigning permissions** + +**Do:** +- Use Windows groups when managing lots of users. +- Consider granting the [work item query folders **Contribute**](../work/track/set-query-permissions.md) permission to users or groups that require the ability to create and share work item queries for the team project. +- When adding many teams, consider creating a **Team Administrators** group to TFS where you allocate a subset of the permissions available to **Project Administrators**. +- When adding teams, consider what permissions you want to assign to team leads, scrum masters, and other team members who may need to create and modify area paths, iteration paths, and queries. + + +**Don't:** +- Don’t add accounts to the team project **Readers** group that you’ve added to the **Project Administrators** group. Because the Readers group denies several permissions that the Project Administrators group allows, and deny takes precedence. +- Don’t change the default assignments made to the valid users groups. If you remove or set the **View instance-level information** permission to Deny for one of the Valid Users groups, no users in the group will be able to access the team project, collection, or deployment, depending on the group you set. +- Don’t assign permissions that are noted as ‘Assign only to service accounts’ to user accounts. + + + +## Permissions versus access levels + + > [!NOTE] + > Permissions are different than access levels. + > Access levels control what features are visible to users in the web portal, + > and are dependent on user licenses; permissions control a user's ability to use features across TFS. + > If you're just trying to give someone access to a team room or to Agile portfolio management + > and test case management features, + > you'll want to [change access levels](change-access-levels.md), not permissions. + +Setting the access level for users or groups doesn't provide them access to a team project or the web portal. Only users or groups added to a team or TFS group can connect to a team project and the web portal. Make sure your users have both the permissions and the access level they need. You do this by making sure they're [added to the team project](../accounts/add-users.md) or as a [team member](../work/scale/multiple-teams.md#add-team-members). + + +## Manage large numbers of users using Active Directory, Azure Active Directory, or Windows groups + +If you need to set permissions for large numbers of users, +create a group in Windows, Active Directory, or Azure Active Directory, +add these groups to TFS groups or Team Services groups, +and add the same groups to grant access to additional resources. + + + +Of course, you don't need to grant permissions for reports or the project portal +if your team project doesn't use SQL Server Reporting Services or a SharePoint site. + + + +## Valid user groups + +When you add accounts of users directly to a built-in group or through a Windows group, they are automatically added to one of the valid user groups. + +- *Server*\\Team Foundation Valid Users: All members added to server-level groups. + +- *ProjectCollectionName*\\Project Collection Valid Users: All members added to collection-level groups. + +- *TeamProjectName*\\Project Valid Users: All members added to team project-level groups. + +The default permissions assigned to these groups are primarily limited to +read access, such as **View build resources**, **View project-level +information**, and **View collection-level information**. + +This means that all users that you add to one team project can view the objects in other team projects within a collection. +If you need to restrict view access, then you can [set restrictions through the area path node](../work/how-to/set-permissions-access-work-tracking.md). +For additional methods, see [Restrict access in TFS](../accounts/restrict-access-tfs.md). + +If you remove or deny the **View instance-level information** permission for one of the Valid Users groups, +no users in the group will be able to access the team project, collection, or deployment, depending on the group you set. + +In addition, the `VALIDUSER` element can be used [to allow or restrict access for work item tracking](../accounts/restrict-access-tfs.md#work-items). + + +## Tools used to set permissions + +You set most permissions through the web portal. You can use the tools listed in the following table to set permissions. +Different tools are used depending on whether you are setting permissions at a server, collection, or team project level. +You use the [TFS web portal administration context](../accounts/add-users.md) to set most permissions. + +|Permission level|Web portal security pages |Team Foundation Administration Console|TFSSecurity command-line tool|Tf command-line tool|TFSLabConfig command-line tool| +|---|:---:|:---:|:---:|:---:|:---:| +|[Server-level](permissions.md#server)||![check mark](../_img/check.png)|![check mark](../_img/check.png)||| +|[Collection-level](permissions.md#collection)|![check mark](../_img/check.png)|![check mark](../_img/check.png)|![check mark](../_img/check.png)||| +|[Team project and test level](permissions.md#project_test)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Build level](permissions.md#build)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Git repository](permissions.md#git-repo)|![check mark](../_img/check.png)|||![check mark](../_img/check.png)|| +|[Team Foundation Version Control](permissions.md#tfvc)|![check mark](../_img/check.png)|||![check mark](../_img/check.png)|| +|[Area level for work item tracking](permissions.md#area-permissions)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Iteration level for work item tracking](permissions.md#iteration-path-permissions)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Work item query](permissions.md#query)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Work item tags](permissions.md#tags)|||![check mark](../_img/check.png)||| +|[Alerts](permissions.md#alerts)|||![check mark](../_img/check.png)||| +|[Release Management](permissions.md#release_management) |![check mark](../_img/check.png)||||| | +|[Lab Management](permissions.md#lab)|||||![check mark](../_img/check.png)| + + + +## SQL Server reports (TFS) + +For information about how to set permissions in Reporting Services, +see [Add administrators to TFS](../tfs-server/add-administrator-tfs.md). + + +## Tools used to set permissions + +You can use the tools listed in the following table to set permissions. +Different tools are used depending on whether you are setting permissions at a server, collection, or team project level. +You use the [TFS web portal administration context](../accounts/add-users.md) to set most permissions. + +|Permission level|Web portal security pages |Team Foundation Administration Console|TFSSecurity command-line tool|Tf command-line tool|TFSLabConfig command-line tool| +|---|:---:|:---:|:---:|:---:|:---:| +|[Server-level](permissions.md#server)||![check mark](../_img/check.png)|![check mark](../_img/check.png)||| +|[Collection-level](permissions.md#collection)|![check mark](../_img/check.png)|![check mark](../_img/check.png)|![check mark](../_img/check.png)||| +|[Team project and test level](permissions.md#project_test)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Build level](permissions.md#build)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Git repository](permissions.md#git-repo)|![check mark](../_img/check.png)|||![check mark](../_img/check.png)|| +|[Team Foundation Version Control](permissions.md#tfvc)|![check mark](../_img/check.png)|||![check mark](../_img/check.png)|| +|[Area level for work item tracking](permissions.md#area-permissions)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Iteration level for work item tracking](permissions.md#iteration-path-permissions)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Work item query](permissions.md#query)|![check mark](../_img/check.png)||![check mark](../_img/check.png)||| +|[Work item tags](permissions.md#tags)|||![check mark](../_img/check.png)||| +|[Alerts](permissions.md#alerts)|||![check mark](../_img/check.png)||| +|[Release Management](permissions.md#release_management) |![check mark](../_img/check.png)||||| | +|[Lab Management](permissions.md#lab)|||||![check mark](../_img/check.png)| + + + + +## On-premises TFS + +### SharePoint integration + +For information about how to set permissions for SharePoint Products integrated with TFS, +see [Add administrators to TFS](../tfs-server/add-administrator-tfs.md). + +For more information, see [Determine permission levels and groups in SharePoint 2013](https://technet.microsoft.com/en-us/library/cc262690.aspx). + + +## SQL Server reports (TFS) + +For information about how to set permissions in Reporting Services, +see [Add administrators to TFS](../tfs-server/add-administrator-tfs.md). + + + \ No newline at end of file diff --git a/docs/security/about-security-identity.md b/docs/security/about-security-identity.md new file mode 100644 index 00000000000..fa1a0a2d4b9 --- /dev/null +++ b/docs/security/about-security-identity.md @@ -0,0 +1,162 @@ +--- +title: Understand the components of security and identity in VSTS & TFS +description: Understand how VSTS and TFS manage security and accounts +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 08/24/2017 +ms.topic: get-started-article +--- + +# About security and identity + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Visual Studio Team Services (VSTS), our cloud-hosted application, is based on the capabilities of Team Foundation Server, with additional cloud services. Both support development projects, from planning through deployment. +VSTS uses Microsoft Azure's Platform as a Service infrastructure and many of Azure's services, including Azure SQL databases, to deliver a reliable, globally available service for your development projects. + +This topic introduces the main security concepts employed by VSTS and TFS. To learn more about the steps Microsoft takes to keep your VSTS projects safe, available, secure, and private, see this white paper, [Visual Studio Team Services (VSTS) Data Protection Overview](../articles/team-services-security-whitepaper.md). + +The main security concepts to understand are + +- Authentication +- Authorization +- Security groups +- Permission levels and permissions +- Access levels + +## Authentication + +Authentication verifies a user's identify based on the credentials provided when they sign into VSTS or TFS. These systems integrate with and rely upon the security features provided by these additional systems: +- Azure Active Directory (AAD) +- Microsoft account (MSA) +- Active Directory (AD) + +AAD and MSA support cloud authentication. We recommend AAD when you need to manage a large group of users. Otherwise, if you have a small user base accessing your VSTS account, you can simply use Microsoft accounts. + +For on-premises TFS, AD is recommended when managing a large group of users. + +### Authentication methods, integrating with other services and apps + +Other applications and services can integrate with VSTS and TFS services and resources. To access your account without asking for user credentials multiple times, apps can use these authentication methods: + +* [Alternate credentials](../git/auth-overview.md#alternate-credentials) +as a single set of credentials across all tools that don't have +plug-in, extension, or native support. For example, +you can use basic authentication to access +[REST APIs for VSTS and TFS](../integrate/get-started/rest/basics.md), +but you must turn on alternate credentials. + +* [Personal access tokens](../accounts/use-personal-access-tokens-to-authenticate.md) +to generate tokens for: + + * Accessing specific resources or activities, like builds or work items + * Clients like Xcode and Nuget that require usernames and passwords + as basic credentials and don't support Microsoft account + and Azure Active Directory features like multi-factor authentication + * Accessing [REST APIs for VSTS and TFS](../integrate/get-started/rest/basics.md) + +* [OAuth](/vsts/integrate/get-started/Authentication/oauth) +to generate tokens for accessing [REST APIs](/vsts/integrate/get-started/rest/basics). The [Accounts](/vsts/integrate/api/shared/accounts) +and [Profiles](/vsts/integrate/api/shared/profiles) +APIs support only OAuth. + +* [SSH authentication](../git/use-ssh-keys-to-authenticate.md) +to generate encryption keys when you use Linux, Mac, +or Windows running [Git for Windows](http://www.git-scm.com/download/win) +and can't use +[Git credential managers](../git/set-up-credential-managers.md) +or [personal access tokens](../accounts/use-personal-access-tokens-to-authenticate.md) +for HTTPS authentication. + + +By default, your account or collection allows access for all authentication methods. +You can limit access, but you must specifically restrict access for each method. +When you deny access to an authentication method, +no app can use that method to access your account. +Any app that previously had access will get an +authentication error and can't access your account. + + +## Authorization +Authorization verifies that the identity whcih is attempting to connect has the neccesary permissions to access a service, feature, function, object, or method. + +Authorization always occurs after successful authentication. If a connection is not authenticated, it fails before any authorization checking is performed. If authentication of a connection succeeds, a specific action might still be disallowed because the user or group did not have authorization to perform that action. + +Authorization is based on users and groups, and the permissions assigned directly to both those users and groups and permissions those users and groups might inherit by belonging to one or more VSTS/TFS security groups. These users and groups can be AAD or AD users and groups. For TFS, they can also be local Windows users and groups. + +Also, for select features, users and groups may need to belong to an access level that grants them access to a feature. + +## Security groups and permissions + +VSTS and TFS are preconfigured with default security groups. Default permissions are assigned to the default security groups. + +> [!div class="mx-tdBreakAll"] +> | Security groups | Permission levels | Permission States | +> |-------------|----------| ----------| +> |- Team project level
      - Collection or Account level
      - Server level (TFS only) |- Object-level
      - Project-level
      - Collection-level
      - Server-level (TFS only) |User or group has permissions to perform a task:
      - **Allow**
      - **Inherited allow**
      User or group doesn't have permission to perform a task:
      - **Deny**
      - **Inherited deny**
      - **Not set** | + +You can populate these groups by using individual users. However, for ease of management, it's easier if you populate these groups by using AAD or AD security groups. This method enables you to manage group membership and permissions more efficiently across multiple computers. + +![Conceptual image of permissions and access levels](_img/permissions/permissions-overview.png) + +VSTS and TFS control access through these three inter-connected functional areas: + +- **Membership management** supports adding individual Windows user accounts and groups to default TFS groups. Also, you can create TFS groups. Each default TFS group is associated with a set of default permissions. All users added to any TFS group are added to the Valid Users group. A valid user is someone who can connect to the team project. + +- **Permission management** controls access to specific functional tasks at different levels of the system. Object-level permissions set permissions on a file, folder, build definition, or a shared query. Permission settings correspond to **Allow**, **Deny**, **Inherited allow**, **Inherited deny**, and **Not set**. To learn more about inheritance, see [About permissions and groups](about-permissions.md#inheritance). + +- **Access level management** controls access to features provided via the web portal, the web application for TFS. Based on what has been purchased for a user, administrators set the user's access level to Basic, Advanced, or Stakeholder (previously labeled Standard, Full, and Limited). + +Each functional area uses groups to simplify management across the deployment. You add users and groups through the web administration context. Permissions are automatically set based on the security group that you add users to, or based on the object, project, collection, or server level to which you add groups. On the other hand, access level management controls access for all users and groups at the server level. + +Access levels, membership management, and permissions management + +You can create local groups or Active Directory (AD) [groups to manage your users](../tfs-server/admin/setup-ad-groups.md). If you decide to use groups, make sure that membership in those groups is limited to TFS users. Because group membership can be altered by their owners at any time, if those owners did not consider TFS when they created those groups, their changes to membership can cause unwanted side effects within TFS. + + +### Default permissions set for the Contributors group + +The following image shows the default permission assignments made to the Contributors group. + +![Contributor role default permissions](_img/contributor-permissions.png) + +To learn more about other groups and their permission assignments, +see [Permissions and groups reference](permissions.md). + + +## Access levels + +Certain features are only available to users who have the appropriate licensing level for those features. Access to those features is not controlled by permissions but by membership in an access level. To learn more, see [Access levels](access-levels.md). + +## Related notes + +See these topics for more information: +- [Permissions and groups reference](permissions.md) +- [Access with Azure Active Directory (Azure AD)](../accounts/add-users-to-aad.md). +- [Set up groups for use in TFS deployments](../tfs-server/admin/setup-ad-groups.md). +- [Setting up HTTPS with Secure Sockets Layer (SSL)](../tfs-server/admin/setup-secure-sockets-layer.md) + + \ No newline at end of file diff --git a/docs/security/access-levels.md b/docs/security/access-levels.md new file mode 100644 index 00000000000..0d96088fe39 --- /dev/null +++ b/docs/security/access-levels.md @@ -0,0 +1,96 @@ +--- +title: Understand what access levels are supported in VSTS & TFS +description: Understand how access levels are used to support stakeholder, basic, advanced, or VS Enterprise +ms.technology: vs-devops-admin +ms.prod: vs-devops-alm +ms.assetid: E2C63C7B-6273-41D7-BD14-BFB340DF8D65 +ms.manager: douge +ms.author: kaelli +ms.date: 07/20/2017 +--- + +# Access levels + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Access levels enable administrators the ability to provide their user base access to the features they need and only pay for those features. To connect and use the functions and features that TFS provides, users must be added to a group with the appropriate permissions. To use select web portal features, they must also belong to the access level that enables access to that feature. + +Make sure to set each user's access level based on what you've purchased for that user. Basic access includes all Stakeholder features. Advanced and Visual Enterprise access levels include all Basic features. + +To add user accounts or groups to specific access levels, see the following topics: + +- For VSTS: [Manage users and access in Visual Studio Team Services](../accounts/add-account-users-assign-access-levels.md) +- For on-premises TFS: [Change access levels](change-access-levels.md). + +When you add a user or group to a team or team project, they're automatically granted access to those features supported by the default access level, which is Basic. This provides most users all the features they need. For a simplified overview of the permissions assigned to the most common groups—Readers, Contributors, and Project Administrators—as well as the Stakeholder access group, see [Permissions and access](permissions-access.md). + +The systems employ these access levels: + +- Stakeholders: provides limited access, unlimited assignments +- Basic: provides access to most features +- VS Enterprise (TFS 2017.1 and later versions): provides access to premium features +- Advanced (TFS 2017 and earlier versions): provides access to premium features + +## Basic access + +Assign **Basic** access to all users with a Visual Studio subscriptions and paid VSTS users, including a TFS client access license (CAL). Basic provides access to most features, except for Test and other premium features. + +Basic access features + +## Stakeholder + +Assign**Stakeholder** access to those users who need to enter bugs, view backlogs, boards, charts, and dashboards, but who don't have a TFS CAL. Stakeholders can also view releases and manage release approvals. Stakeholder access is free. + +Stakeholder access features + +See [Stakeholder access](../quickstart/get-started-stakeholder.md) for details of features available to stakeholders. + +## VS Enterprise + +Assign **VS Enterprise** to those users for whom you've purchased Visual Studio Enterprise. These include a TFS CAL plus the rights to access VS Enterprise features. (For users with MSDN subscriptions or Test Professional, assign the Basic access level and the Test Manager extension.) To learn more, see [Get extensions for TFS, Assign paid extension access to users](../marketplace/get-tfs-extensions.md#assign-extension). For example, for users with Visual Studio Test Professional or Visual Studio Enterprise, assign them [access to the Test Manager extension](../marketplace/get-tfs-extensions.md#assign-extension). + +**TFS 2017.2** + +VS Enterprise access features + +## Advanced +For TFS 2017 and earlier versions, you should assign the **Advanced** level to those users for whom you've purchased the full Test feature set. Here are the purchasing options: +- Higher-level Visual Studio subscriptions: Visual Studio Test Professional, Visual Studio Enterprise, or MSDN platform subscriptions. +These include a TFS CAL plus the rights to access the full set of Test features. +- A paid VSTS user (which includes a TFS CAL) plus the [Test Manager extension](change-access-levels.md#test-manager). + +For TFS 2017.2, Assign **Advanced** access to those users for whom you've purchased MSDN Platform or Visual Studio Test Professional subscriptions. These include a TFS CAL plus the rights to access Test Manager. To learn more, see [Get extensions for TFS, Assign paid extension access to users](../marketplace/get-tfs-extensions.md#assign-extension). + + +**TFS 2017, TFS 2017.1** + +TFS 2017.2, Advanced Access + +**TFS 2015, TFS 2013** + +Advanced access features + +> [!NOTE] +> The **Advanced** access level is deprecated for TFS 2017 and later versions of TFS. Use the **VS Enterprise** access level only for active Visual Studio Enterprise subscribers. For MSDN Platforms and Visual Studio Test Professional with MSDN subscribers needing access to the Test hub, assign them to the Advanced access level and the Test Manager extension. + + + +## Access to the Test hub and Marketplace extensions + +Full access to the Test hub requires Advanced (TFS 2015) or VS Enterprise (TFS 2017) access . Visual Studio Test Professional plus the Test hub features in the TFS web portal are managed through Visual Studio VSTS, Azure billing services, and purchase of Test Manager extensions from the Marketplace. + +To learn how to grant access to an extensions, see [Get extensions for TFS](../marketplace/get-tfs-extensions.md). + +## What features are accessible to users who belong to two different groups? +If a user belongs to a group that has Basic access and another group that has Advanced access, the user has access to all features available through Advanced, which is a superset of Basic. + +## Service account access +[TFS service accounts](../tfs-server/admin/service-accounts-dependencies-tfs.md) are added to the default access level. If you make Stakeholder the default access level, you must set the TFS service accounts to Basic or Advanced/VS Enterprise access. + +Service accounts don't require a TFS CAL or other purchase. + +## Related notes + +- [Change access levels](change-access-levels.md) +- [Permissions & access](permissions-access.md) +- [Work in the web portal](../connect/work-web-portal.md) \ No newline at end of file diff --git a/docs/security/breadcrumb/toc.yml b/docs/security/breadcrumb/toc.yml new file mode 100644 index 00000000000..6f1f740f404 --- /dev/null +++ b/docs/security/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Admin + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=admin + items: + - name: "Security & Identity" + tocHref: /vsts/ + topicHref: /vsts/security/index \ No newline at end of file diff --git a/docs/security/change-access-levels.md b/docs/security/change-access-levels.md new file mode 100644 index 00000000000..e132cf96c87 --- /dev/null +++ b/docs/security/change-access-levels.md @@ -0,0 +1,133 @@ +--- +title: How to change access levels for a user or group in TFS +description: Provide access to web portal users based on their license for stakeholder, basic, advanced, or VS Enterprise via Team Foundation Server +ms.technology: vs-devops-admin +ms.prod: vs-devops-alm +ms.assetid: 84B0D454-09A7-414B-A9E0-FE9A9ACD7E99 +ms.manager: douge +ms.author: kaelli +ms.date: 07/20/2017 +--- + +# Change access levels + +**TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013** + +> [!IMPORTANT] +> This topic applies to managing access levels for team projects defined on an on-premises Team Foundation Server (TFS). To manage access levels for VSTS, see [Manage users and access in Visual Studio Team Services](../accounts/add-account-users-assign-access-levels.md). For VSTS feature availability, see the [VSTS Feature Matrix](https://www.visualstudio.com/pricing/visual-studio-online-feature-matrix-vs). + +To connect and use the functions and features that TFS provides, users must be added to a group with the appropriate permissions. To use select web portal features, they must also belong to the access level that enables access to that feature. For a description and usage information for each access level, see [Access levels](access-levels.md). + +For a simplified overview of the permissions assigned to the most common groups—Readers, Contributors, and Project Administrators—as well as the Stakeholder access group, see [Permissions and access](permissions-access.md). + +>[!IMPORTANT] +>Even if you set a user or group's access level, you must add them to a team project collection or team project for them to connect to TFS and access features available through a supported client or the web portal. + +Make sure to set each user's access level based on what you've purchased for that user. Basic access includes all Stakeholder features. Advanced and Visual Enterprise access levels include all Basic features. In the images provided below, the circled features indicate the features made available from the previous access level. + + + +## Open the administrative context, Access levels + +You manage access levels for all collections defined on the application tier for TFS. The default access level you set applies to all team projects defined for all collections. Users or groups that you add to teams, team projects, or collections are granted the access level that you set as the default. To change the access level for a specific group or user, you add them specifically to one of the other, non-default access levels. + +>[!NOTE] +>The images you see from your web portal may differ from the images you see in this topic. These differences result from updates made to your on-premises TFS. However, the basic functionality available to you remains the same unless explicitly mentioned. + +From a user context, open the admin context by clicking the ![gear icon](../work/_img/icons/gear_icon.png) gear Settings icon. The tabs and pages available differ depending on which admin context you access. + + +### TFS 2017 + +0. From the web portal home page for a team project (for example, ```http://MyServer:8080/tfs/DefaultCollection/MyProject/```), open the Server Settings administration context. + + TFS 2017, Web portal, open the Server settings admin context + +0. From the Access levels page, select the access level you want to manage. For example, here we click Add to add a group to Stakeholder access.

      + + TFS 2017, Web portal, Server settings admin context, Access levels, Stakeholder access level, Add user or group + + If you don't see the Access levels tab, you aren't a TFS administrator and don't have permission. [Here's how to get permissions](../tfs-server/add-administrator-tfs.md). + +### TFS 2015, TFS 2013 + +1. From the web portal home page for a team project (for example, ```http://MyServer:8080/tfs/DefaultCollection/MyProject/```), open the administration context. + + ![Open the administration page](_img/ALM_CAL_OpenAdminPage.png) + +2. From the Access levels page, select the access level you want to manage. For example, here we add a group to Stakeholder access.

      + + Stakeholder access level, Add Windows user or group + + If you don't see the Access levels tab, you aren't a TFS administrator and don't have permission. [Here's how to get permissions](../tfs-server/add-administrator-tfs.md). + + + +## Change the default access level + +Change the default access level to match the access you have licenses for. If you change the default access level to Stakeholder, all users not explicitly added to the Basic or Advanced level will be limited to the features provided through Stakeholder access. + +>[!IMPORTANT] +>Service accounts are added to the default access level. If you set Stakeholder as the default access level, you must add the TFS service accounts to the Basic or Advanced group.    + +You set an access level from its page. Click Set as default access level as shown. + +Admin context, Control panel, Access levels, Stakeholder tab, set as default access level + + + +## Set the access level for a user or group + +If you're managing access for a large group of users, a best practice is to first create either a [Windows group or TFS group](../tfs-server/admin/setup-ad-groups.md) and add individuals to those groups. + + + +## List users and groups who have access + +You can get a list of users and groups that have access to the server by exporting the audit log. The audit log also indicates which access level has been granted. + +1. From the Access levels page, export the audit log. + + Control panel, admin context, Export audit log + +2. Save the audit log .csv file which is downloaded to a folder. + +3. You can open the file in Excel and determine the access level assigned to each group or user. + + +## Guide to features and access levels + +You can learn more about each of the features you have access to from the following topics. Basic includes all features supported by Stakeholder, and Advanced includes access to all features supported by Basic. + + +> [!div class="mx-tdBreakAll"] +> | Stakeholder access 1 | Basic access 5 | Advanced access (TFS 2017, TFS 2015, TFS 2013) | +> |-------------|----------| ----------| +> | - View My [Work items](../work/backlogs/add-work-items.md)
      - Standard features: [Dashboards](../report/dashboards.md) & [Queries](../work/track/using-queries.md) 2
      - Agile boards: [Backlogs](../work/backlogs/create-your-backlog.md), [Kanban](../work/kanban/kanban-basics.md) & [Task](../work/scrum/task-board.md) 3
      - [View releases and manage approvals](../build-release/actions/view-manage-releases.md) 4 |- [Basic & Advanced backlog and sprint planning tools](../work/scrum/sprint-planning.md)
      - [Request and manage feedback](../work/connect/get-feedback.md) 6
      - [Chart viewing & Chart authoring](../report/charts.md)
      - Code: [Git](../git/overview.md) and [TFVC](../tfvc/overview.md)
      - [Build](../build-release/overview.md)
      - [Administer account](#administer-account) 7
      - [Advanced home page](../work/backlogs/organize-backlog.md) 8
      - [Web-based test execution](../manual-test/getting-started/run-manual-tests.md)
      - [Create and manage releases](../build-release/actions/create-deploy-releases.md) 4
      - [Author release definitions](../build-release/concepts/definitions/release/index.md) 4
      - [Advanced portfolio management](../work/backlogs/define-features-epics.md)
      - [Team rooms](../collaborate/collaborate-in-a-team-room.md)
      - [Analyze test results and manage machine groups](https://msdn.microsoft.com/library/dd286743.aspx) |- [Web-based test case management](../manual-test/getting-started/create-a-test-plan.md) 9

      Advanced access will be deprecated in future versions of TFS.

      **VS Enterprise (TFS 2017)**

      - Microsoft published TFS Extensions 10 | + +#### Notes: +1. With Stakeholder access, users can create and modify all work items, and can create and save queries on all work items under their My Queries folder. (This is a change from Limited access in which users could create and modify only those work items that they created and query and view work items they created.) +Also, stakeholders can create and modify work items using Team Foundation clients such as Visual Studio Community, Microsoft Excel, Microsoft Project, and Microsoft Feedback Client. +2. Standard features include access to the Home and Work hubs. +3. Includes all backlogs and boards, including product, portfolio, and sprint backlogs and Kanban and sprint task boards. Can add work items to backlogs, which appear at the bottom of the list. Can't reorder items on the page or use some other features. See [Stakeholder access](../quickstart/get-started-stakeholder.md) for details. +4. Release Management is in preview and available when you [upgrade your application server to TFS 2015 Update 2 or later version](https://www.visualstudio.com/downloads/download-visual-studio-vs). +5. Basic access allows you to access the Code, Build, and Test hubs in addition to the Home and Work hubs. +6. Request and manage feedback is now available within the Basic access level when you [upgrade your application server to TFS 2015 Update 1 or later version](https://www.visualstudio.com/downloads/download-visual-studio-vs). +7. You can open the Admin context and view and modify settings provided you are a team, project, or project collection administrator. See [Administer account features](#administer-account). +8. Advanced home page allows you to configure and view the Welcome page in addition to team dashboards. +9. You can [purchase Test Manager extensions and assign to user accounts](access-levels.md#test-manager) to gain full access to web-based Test case management tools. +10. With VS Enterprise access, users have access to any fee-based, Marketplace extension published by Microsoft Marketplace extension published by Microsoft that is included for active Visual Studio Enterprise subscribers. Examples include [Package Management](https://marketplace.visualstudio.com/items?itemName=ms.feed) (which is also free for 5 users who are not Visual Studio Enterprise subscribers) and [Test Manager](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web). + + + +Within the admin context, there are several hubs which support administrating features at the team, project, or project collection level. You can learn more from these resources: + +- [Permissions and group reference](permissions.md) +- [About teams and team tools](../work/about-teams-and-settings.md) + +## Related notes + +- [About access levels](access-levels.md) +- [Permissions & access](permissions-access.md) +- [Work in the web portal](../connect/work-web-portal.md) + diff --git a/docs/security/git-permissions-before-2017.md b/docs/security/git-permissions-before-2017.md new file mode 100644 index 00000000000..02b1b0faca3 --- /dev/null +++ b/docs/security/git-permissions-before-2017.md @@ -0,0 +1,95 @@ +--- +title: Git permissions prior to TFS 2017 Update 1 +description: Git permissions in usage for TFS 2017 update 1 and earlier versions +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: EF010374-22A9-4179-B49F-9B601ACBB5A0 +toc: hide +ms.manager: douge +ms.author: douge +ms.date: 12/1/2016 +--- + +# Git permissions prior to TFS 2017 Update 1 + +In TFS 2017 Update 1 (and VSTS), Git repository permissions have changed. +For those customers using previous versions of TFS, here are the old permissions. +Those using TFS 2017 Update 1 or VSTS should see the [latest list of permissions](permissions.md#git-repository). + +These permissions appear only for a team project including a Git repository. + + + +Set permissions across all Git repositories by making changes to the top-level **Git repositories** entry. + +Individual repositories inherit permissions from the top-level **Git Repositories** entry. + +Branches inherit permissions from assignments made at the repository level. + +By default, the team project level and collection level Readers groups have only Read permissions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      Administer + Can rename and delete the repository. If assigned to the top-level **Git repositories** entry, can add additional repositories. +

      + At the branch level, users can set permissions for the branch and unlock the branch. +
      + TFS 2013, TFS 2015: The Administer permission set on a individual Git repository does not grant the ability to rename or delete the repository. These tasks require + Administer permissions at the top-level **Git repositories** entry. +
      +
      Branch Creation + Can create and publish branches in the repository.
      + Lack of this permission does not limit users from creating branches in their local repository; + it merely prevents them from publishing local branches to the server.
      + When a user creates a new branch on the server, + they have Administer, Contribute, and Force permissions for that branch by default. +
      Contribute + At the repository level, can push their changes to branches in the repository. Does not override restrictions in place from [branch policies](../git/branch-policies.md). + At the branch level, can push their changes to the branch and lock the branch. +
      Note Management + Can push and edit Git notes to the repository. + They can also remove notes from items if they have the Force permission. + See this topic for more details on notes. +
      Read + Can clone, fetch, pull, and explore the contents of the repository. +
      Rewrite and destroy history (force push) + Can force an update to a branch and delete a branch. A force update can overwrite commits added from any user.

      + Users with this permission can modify the commit history of a branch. +
      Tag Creation + Can push tags to the repository, + and can also edit or remove tags if they have the Force permission. +
      diff --git a/docs/security/index.md b/docs/security/index.md new file mode 100644 index 00000000000..931ac1a938e --- /dev/null +++ b/docs/security/index.md @@ -0,0 +1,55 @@ +--- +title: Security & Identity content index for VSTS & TFS +description: Index to topics for working with authentication, permissions, groups, and access levels in VSTS and and Team Foundation Server (TFS) +ms.assetid: +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2017 +--- + +# Security & Identity + +**VSTS | TFS 2017 | TFS 2015 | TFS 2013** + + + +## 5-Minute Quickstarts + +- [View permissions](view-permissions.md) +- [Set Git or TFVC repository permissions](set-git-tfvc-repository-permissions.md) +- [Set permissions at the project or collection level](set-project-collection-level-permissions.md) + + +## Concepts +- [About permissions and groups](about-permissions.md) +- [About access levels](access-levels.md) +- [Azure Active Directory groups (VSTS)](/vsts/accounts/access-with-azure-ad?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json) +- [Active Directory groups (TFS)](/vsts/tfs-server/admin/setup-ad-groups?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json) + +## How-to Guides + +- [Set Git branch permissions](/vsts/git/branch-permissions?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json ) +- [Set build and release permissions](set-build-release-permissions.md) +- [Set permissions and access for work tracking](/vsts/work/how-to/set-permissions-access-work-tracking?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json) +- [Change access levels (TFS)](change-access-levels.md) +- [Restrict access to a resource](/vsts/accounts/restrict-access-tfs?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json) + +## Reference +- [Permissions lookup guide](permissions-lookup-guide.md) +- [Permissions and groups reference](permissions.md) + + +## Resources + +- [Account Management (VSTS)](../accounts/index.md) +- [Server Administration (TFS)](../tfs-server/index.md) +- [Billing](../billing/index.md) +- [Authentication guidance for REST APIs](../integrate/get-started/authentication/authentication-guidance.md) +- [VSTS Data Protection Overview](../articles/team-services-security-whitepaper.md) +- [Technical Articles](../articles/index.md) \ No newline at end of file diff --git a/docs/security/permissions-access.md b/docs/security/permissions-access.md new file mode 100644 index 00000000000..56b2fd9f7a2 --- /dev/null +++ b/docs/security/permissions-access.md @@ -0,0 +1,824 @@ +--- +title: Permissions and access quick reference for VSTS & TFS +description: Simplified views of required permissions and access levels for common user tasks when working in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: B656A277-BA3D-472D-824D-CDD4E067053E +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 06/02/2017 +ms.topic: get-started-article +--- + +# Permissions and access for VSTS and TFS + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +To connect and use the functions and features that VSTS and TFS provides, users must be added to a group with the appropriate permissions. The most common built-in groups include Readers, Contributors, and Project Administrators. These groups are assigned the default permissions as listed below. + +In addition to permissions, access to select features are controlled by the access level assigned to a user. Contributors and administrators should be added to Basic (paid) access. Stakeholder access is available to support free access to a limited set of features by an unlimited set of stakeholders. + +For a complete reference of all built-in groups and permissions, see [Permissions and groups](permissions.md). For information about assigning access levels and supporting stakeholder access, see [Manage users and access](../accounts/add-account-users-assign-access-levels.md) for VSTS, and [Change access levels](change-access-levels.md) for TFS. + + +## Code + +You can connect to your code from the Code hub or the web portal, and using Xcode, Eclipse, IntelliJ, Android Studio, Visual Studio, Visual Studio Code. For an overview of code features and functions, see [Git](../git/overview.md) and [Use Team Foundation Version Control](../tfvc/overview.md). Stakeholders have no access to the Code hub or its features. + +From the team project admin content for Version Control, you can set permissions on a repository. From the **Code>Branches** page, you can set permissions for a specific branch and set branch policies. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      TaskReadersContributorsBuild AdminsAccount Owner/
      Project Admins
      (Git) Clone, fetch, pull, and explore the contents of a repository +![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      (Git) Unlimited private Git repositories + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      (Git) Create branches and tags, manage notes + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      (Git) Create, delete, and rename repositories + ![checkmark](_img/checkmark.png)
      (Git) Manage permissions, manage branches and branch policies + ![checkmark](_img/checkmark.png)
      (TFVC) Contribute to a centralized version control, including Code Review (Check in, label, lock, merge, pend a change) + +Read only![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      (TFVC) Check in, revise, undo, unlock other users' changes + ![checkmark](_img/checkmark.png)
      (TFVC) Manage branches, manage permissions + ![checkmark](_img/checkmark.png)
      (Git and TFVC) Powerful semantic code search + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      + +## Work tracking + +You can connect to work items from the Work hub of the web portal and using Eclipse, Visual Studio, Excel, Project, and other clients. For an overview of work tracking features and functions, see [About Agile tools](../work/overview.md). Stakeholders have limited access to select work tracking functions as described in [Work as a stakeholder](../quickstart/get-started-stakeholder.md). + +In addition to the permissions set at the project level via the built-in groups, you can set permissions for the following objects: [area and iteration paths](../work/how-to/set-permissions-access-work-tracking.md), [queries and query folders](../work/track/set-query-permissions.md), and [delivery plans](../work/scale/review-team-plans.md#plan-permissions). + +The team administrator role supports configuration of team settings. To be added as a team administrator, see [Configure team settings and add team administrators](../work/scale/add-team-administrator.md). + +>[!NOTE] +>There are no UI permissions associated with [managing tags](../work/track/add-tags-to-work-items.md). Instead, you can manage them using the [TFSSecurity command line tool](../tfs-server/command-line/tfssecurity-cmd.md#collection-level-permissions). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      TaskStakeholdersReadersContributorsTeam AdminsAccount Owner/
      Project Admins
      View work items, including bugs, requirements, and tasks![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Create and edit work items, follow a work item![checkmark](_img/checkmark.png) ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Change work item type ![checkmark](_img/checkmark.png) ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Move or delete work items ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Search and query work items, save work item queries +![checkmark](_img/checkmark.png)Can't save queries![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      View backlogs, boards, and plans +![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Provide feedback +![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Request feedback + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Agile tools (Kanban boards, backlogs, sprint planning, portfolio management) + limited interactions view only![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Configure Agile tools, set team defaults + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Create new work item tagsCan assign existing tags ![check mark](_img/checkmark.png)![check mark](_img/checkmark.png)![check mark](_img/checkmark.png)
      View, add, and configure Delivery Plans view only![check mark](_img/checkmark.png)![check mark](_img/checkmark.png)![check mark](_img/checkmark.png)
      Customize project information (area paths, iteration paths, and work tracking processes) + ![checkmark](_img/checkmark.png)
      + + + +## Notifications, alerts, and team collaboration tools + +To manage notifications, see [Manage personal notifications](../notifications/manage-personal-notifications.md) and [Manage team notifications](../collaborate/manage-team-notifications.md). + +>[!NOTE] +>There are no UI permissions associated with managing notifications. Instead, you can manage them using the [TFSSecurity command line tool](../tfs-server/command-line/tfssecurity-cmd.md#collection-level-permissions). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      TaskStakeholdersReadersContributorsTeam AdminsAccount Owner/
      Project Admins
      Set personal notifications or alerts +![checkmark](_img/checkmark.png) ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Set team notifications or alerts + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Participate in Team (chat) rooms ![check mark](_img/checkmark.png)![check mark](_img/checkmark.png)![check mark](_img/checkmark.png)
      + + +## Build and release + + +You can define and manage your builds and releases from the web portal, Build & Release hub. For an overview of build and release management features and functions, see [Continuous integration on any platform](../build-release/overview.md). + +From the **Build & Release>Builds** and **Releases** pages, you can set permissions for all or each build definition or release definition, respectively. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      TaskStakeholdersReadersContributorsBuild
      Admins
      Account Owner/
      Project Admins
      Release Admins
      View build and release definitions + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Define builds with continuous integration + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Define releases, manage deployments, manage releases with Release Management + ![checkmark](_img/checkmark.png) ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Approve releases +![checkmark](_img/checkmark.png) ![checkmark](_img/checkmark.png) ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Package Management (5 users free) + ![checkmark](_img/checkmark.png) ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Queue builds, edit build quality + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Manage build queues and build qualities + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Manage build retention policies, delete and destroy builds + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Administer build permissions + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Manage release permissions + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      + + + +## Test + +You can define and manage your builds and releases from the web portal, Test hub. For an overview of test features and functions, see [Testing overview](../manual-test/index.md). + +You set test permissions at the team project level from the admin context Security page. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      TaskStakeholdersReadersContributorsAccount Owner/
      Project Admins
      Exploratory testing, view test runs + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Exploratory testing, create and delete test runs + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Provide feedback using the Test & Feedback extension +![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Request feedback using the Test & Feedback extension + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Manage test configurations and test environments + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Manage test plans and test suites + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Test Manager (purchased separately) + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      + + +## Charts, dashboards, and other web portal features + +You can define and manage dashboards from the web portal, Dashboard hub. For an overview of dashboard and chart features, see [Dashboards](../report/overview.md). + +You set [dashboard permissions at the team level](../report/dashboard-permissions.md) from the team dashboard page. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      TaskStakeholdersReadersContributorsTeam adminsAccount Owner/
      Project Admins
      View charts and dashboards +![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Create work item and test tracking charts + ![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      View the project page +![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Edit the project page + ![checkmark](_img/checkmark.png)
      Navigate using the Account hub pages +![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      Add and configure dashboards + With permissions set![checkmark](_img/checkmark.png)![checkmark](_img/checkmark.png)
      + + +## Related notes + +- [Add users to a team project](../accounts/add-users.md) +- [Permissions and groups reference](permissions.md) +- [Manage users and access](../accounts/add-account-users-assign-access-levels.md) (VSTS) +- [Change access levels](change-access-levels.md) +- [Account management (VSTS) guide](../accounts/index.md) + + + + diff --git a/docs/security/permissions-lookup-guide.md b/docs/security/permissions-lookup-guide.md new file mode 100644 index 00000000000..b1d58422fec --- /dev/null +++ b/docs/security/permissions-lookup-guide.md @@ -0,0 +1,35 @@ +--- +title: Permissions lookup guide for VSTS & TFS +description: Index to permissions defined for Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-admin +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/14/2017 +--- + +# Permissions lookup guide + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Use this index to find how to manage a specific permission. + +Values in parenthesis indicate what level the permission is managed: + +- **Object**: Permissions are managed at the object-level +- **Project**: Permissions are managed at the team project level +- **Collection**: Permissions are managed at the account or project collection level +- **Server**: Permissions are managed at the instance level for a TFS server. +- **Team**: Permissions are managed via the team administrator role. + +> [!div class="mx-tdBreakAll"] +> |     |    |     | +> |-------------|----------|---------|---------| +> |- [Alerts (Collection)](../tfs-server/command-line/tfssecurity-cmd.md#collection-level-permissions)
      - [Alerts (Team)](../work/scale/team-administrator-permissions.md)
      - [Analytics service (Project)](../report/analytics/analytics-security.md)
      - [Area path (Object)](../work/how-to/set-permissions-access-work-tracking.md)
      - [Area paths (Team)](../work/scale/team-administrator-permissions.md)
      - [Branches, Git (Object)](../git/branch-permissions.md)
      - [Branches, TFVC (Object)](set-git-tfvc-repository-permissions.md)
      - [Build definitions (Object)](set-build-release-permissions.md)
      - [Build quality, manage (Object)](set-build-release-permissions.md)
      - [Build queue, manage (Object)](set-build-release-permissions.md)
      - [Build resources (Collection)](set-build-release-permissions.md)
      - [Build permissions, manage (Object)](set-build-release-permissions.md)
      - [Builds, manage (Object)](set-build-release-permissions.md)
      - [Change work item type (Project)](set-project-collection-level-permissions.md)
      - [Check ins, TFVC (Object)](set-git-tfvc-repository-permissions.md)
      - [Collection-level information](set-project-collection-level-permissions.md)
      - [Configure Agile tools (Team)](../work/scale/team-administrator-permissions.md)
      - [Dashboards, manage (Team)](../work/scale/team-administrator-permissions.md)
      - [Delivery plans (Object)](../work/scale/review-team-plans.md#plan-permissions)
      - [Events (Collection)](set-project-collection-level-permissions.md) |- [Field, delete (Collection)](set-project-collection-level-permissions.md)
      - [Git branch (Object)](../git/branch-permissions.md)
      - [Iteration paths (Object)](../work/how-to/set-permissions-access-work-tracking.md)
      - [Iteration paths (Team)](../work/scale/team-administrator-permissions.md)
      - [Kanban board, customize (Team)](../work/scale/team-administrator-permissions.md)
      - [Labels, TFVC (Object)](set-git-tfvc-repository-permissions.md)
      - [Locks, TFVC (Object)](set-git-tfvc-repository-permissions.md)
      - [Merge, TFVC (Object)](set-git-tfvc-repository-permissions.md)
      - [Move or delete work items (Project)](set-project-collection-level-permissions.md)
      - [Notes, Git (Object)](../git/branch-permissions.md)
      - [Notifications (Collection)](../tfs-server/command-line/tfssecurity-cmd.md#collection-level-permissions)
      - [Policies, Git branch (Object)](../git/branch-permissions.md)
      - [Policies, Git repository (Object)](set-git-tfvc-repository-permissions.md)
      - [Process (Collection)](../work/process/manage-process.md#process-permissions)
      - [Project properties (Project)](set-project-collection-level-permissions.md)
      - [Project-level information](set-project-collection-level-permissions.md)
      - [Query (Object)](../work/track/set-query-permissions.md)
      - [Query folder (Object)](../work/track/set-query-permissions.md)
      - [Release definitions (Object)](set-build-release-permissions.md)
      - [Repository, Git (Object)](set-git-tfvc-repository-permissions.md) |- [Set team defaults (Team)](../work/scale/team-administrator-permissions.md)
      - [Shelvesets, TFVC (Collection)](set-project-collection-level-permissions.md)
      - [Sprint, define (Object)](../work/how-to/set-permissions-access-work-tracking.md)
      - [Sprints, select (Team)](../work/scale/team-administrator-permissions.md)
      - [Synchronization information (Collection)](set-project-collection-level-permissions.md)
      - [Tags, Git (Oject)](../git/branch-permissions.md)
      - [Tags, work items (Project)](../work/how-to/set-permissions-access-work-tracking.md)
      - [Team projects (Collection)](set-project-collection-level-permissions.md)
      - [Team rooms (Team)](../work/scale/team-administrator-permissions.md)
      - [Test configurations (Project)](set-project-collection-level-permissions.md)
      - [Test controllers (Project)](set-project-collection-level-permissions.md)
      - [Test environments (Project)](set-project-collection-level-permissions.md)
      - [Test runs (Project)](set-project-collection-level-permissions.md)
      - [TFVC repositories (Object)](set-git-tfvc-repository-permissions.md)
      - [Trace settings (Collection)](set-project-collection-level-permissions.md)
      - [Work items (Project)](../work/how-to/set-permissions-access-work-tracking.md)
      - [Workspaces (Collection)](set-project-collection-level-permissions.md) | + + + +## Related notes +- [About permissions and groups](about-permissions.md) +- [Permissions and groups reference](permissions.md) diff --git a/docs/security/permissions.md b/docs/security/permissions.md new file mode 100644 index 00000000000..94083202e3e --- /dev/null +++ b/docs/security/permissions.md @@ -0,0 +1,1891 @@ +--- +title: Permissions and groups reference for VSTS & TFS +description: Manage groups, security, and permissions in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 169E817F-B297-4461-B359-27C78D4A8A7D +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 08/24/2017 +--- + + +# Permissions and groups in VSTS and TFS + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +This topic provides descriptions for each built-in group and permission. To learn how to add users to a group or set a specific permission that you can manage through the web portal, see the following resources: + + +> [!div class="mx-tdBreakAll"] +> |Users and groups |DevOps permissions |Agile/Work tracking permissions | +> |-------------|----------|---------| +> |- [Add users to an administrator role](../tfs-server/add-administrator-tfs.md)
      - [Add users to a team project](../accounts/add-team-members-vs.md) (VSTS)
      - [Add users to a team project](../accounts/add-users.md) (TFS)
      - [Make a user a team admin](../work/scale/add-team-administrator.md) |- [Git branch](../git/branch-permissions.md)
      - [TFVC](../accounts/restrict-access-tfs.md)
      - [Builds](../build-release/concepts/policies/permissions.md#build-permissions)
      - [Release definition security](../build-release/concepts/policies/permissions.md#release-permissions)
      - [Approvals and approvers](../build-release/concepts/definitions/release/environments.md#approvals) | - [Area and iteration paths](../work/how-to/set-permissions-access-work-tracking.md)
      - [Work item query and folder](../work/track/set-query-permissions.md)
      - [Plan permissions](../work/scale/review-team-plans.md#plan-permissions) (VSTS)
      - [Dashboard permissions](../report/dashboard-permissions.md#set-permissions)| + + +## Groups + +Permissions can be granted directly to an individual, or to a group. +Using groups can make things a lot simpler, +and TFS sets up some built-in groups for that purpose. +These groups and the permissions they're assigned to exist at several different levels: +server (TFS deployment), team project collection, team project, and specific objects. +You can also create your own groups and grant them the specific set of permissions +that are appropriate for certain roles in your organization. + + + + + +## Server-level groups (TFS) + +Server groups apply to TFS only. When you install TFS, the system creates default groups that have [deployment-wide, server-level permissions](#server-permissions). You can neither remove nor delete the built-in server-level groups. + +![ADMIN_GROUPS_PERMISSIONS](_img/permissions/server-groups-and-permissions.png) + + +You can't remove or delete the default server level groups. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Group namePermissionsMembership
      Team Foundation Administrators + Has permissions to perform all operations for TFS. + +

      + Local Administrators group (BUILTIN\Administrators) + for any server that hosts Team Foundation application services. +

      +

      + Server \Team Foundation Service Accounts group + and the members of the \Project Server Integration Service Accounts group. +

      +

      + This group should be restricted to the smallest possible number of users + who need total administrative control over TFS. +

      +
      + If your deployment uses SharePoint or Reporting, + consider [adding the members of this group](../tfs-server/add-administrator-tfs.md) + to the Farm Administrators and Site Collection Administrators groups in SharePoint + and the Team Foundation Content Managers groups in Reporting Services. +
      +
      Team Foundation Proxy Service Accounts + Has service level permissions for Team Foundation Server Proxy, + and some TFS service level permissions. +
      + Created when you install the TFS proxy service. +
      +
      + This group should contain only service accounts and not user accounts or groups + that contain user accounts. +
      Team Foundation Service Accounts

      Has service level permissions for TFS.

      +

      + Contains the service account that was supplied during installation +

      +

      + This group should contain only service accounts + and not user accounts or groupsthat contain user accounts. + By default, this group is a member of Team Foundation Administrators. +

      +
      Team Foundation Valid Users + Has permission to view instance level information. +
      + If you set the View instance-level information + permission to Deny or Not set for this group, + no users will be able to access the deployment. +
      +
      + Contains all users known to exist in the Team Services account or TFS instance. + You can't modify the membership of this group. +
      Project Server Integration Service Accounts    + Has service level permissions for the Project Server deployments + that are configured for interoperation with TFS + and some TFS service level permissions. +
      + Created when you install Project Service integration. +
      +
      + This group should contain only service accounts + and not user accounts or groups that contain user accounts. + By default, this group is a member of Team Foundation Administrators. +
      SharePoint Web Application Services + Has service level permissions for the SharePoint Web applications + that are configured for use with TFS + and some service level permissions for TFS. + + This group should contain only service accounts + and not user accounts or groups that contain user accounts. + Unlike the Service Accounts group, this group is not a member + of Team Foundation Administrators. +
      + +> The full name of each of these groups is **[Team Foundation]/{group name}**. +> So the full name of the server level administrators group is +> **[Team Foundation]/Team Foundation Administrators**. + + +### Collection-level groups + +When you create a Team Services account or TFS collection, the system creates collection-level groups that have [permissions in that collection](#collection-level). You can neither remove nor delete the built-in collection-level groups. + + + + + +## Collection + +When you create a collection, these groups are created that have permissions in that collection. + + + +#### Groups + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Group namePermissionsMembership
      Project Collection Administrators

      Has permissions to perform all operations for the collection.

      +

      + Contains the Local Administrators group (BUILTIN\Administrators) + for the server where the application-tier services for TFS have been installed. + Also, contains the members of the + CollectionName\Service Accounts group. +

      +

      + This group should be restricted to the smallest possible number of users + who need total administrative control over the collection. +

      +
      + If your deployment uses SharePoint or Reporting, + consider [adding the members of this group](../accounts/add-administrator-project-collection.md) + to the Site Collection Administrators group in SharePoint + and the Team Foundation Content Managers groups in Reporting Services. +
      +
      Project Collection Build Administrators

      Has permissions to administer build resources and permissions for the collection.

      +

      + Limit this group to the smallest possible number of users + who need total administrative control over build servers and services for this collection. +

      +
      Project Collection Build Service Accounts +

      Has permissions to run build services for the collection.

      +
      Limit this group to service accounts and groups that contain only service accounts.
      Project Collection Proxy Service Accounts

      Has permissions to run the proxy service for the collection.

      Limit this group to service accounts and groups that contain only service accounts.

      Project Collection Service Accounts

      Has service level permissions for the collection and for TFS.

      +

      + Contains the service account that was supplied during installation. + This group should contain only service accounts and groups that contain only service accounts. + By default, this group is a member of Team Foundation Administrators + and Team Foundation Service Accounts. +

      +
      Project Collection Test Service Accounts

      Has test service permissions for the collection.

      Limit this group to service accounts and groups that contain only service accounts.

      Project Collection Valid Users

      Has permissions to access team projects in the collection.

      +
      + If you set the View collection-level information permission + to Deny or Not set for this group, + no users will be able to access the collection. +
      +
      +

      + Contains all users and groups that have been added anywhere within the collection. + You cannot modify the membership of this group. +

      +
      + +> The full name of each of these groups is **[{collection name}]/{group name}**. +> So the full name of the adminstrators group for the default collection is +> **[Default Collection]/Project Collection Administrators**. + + + + + + +### Project-level groups + +For each team project that you create, the system creates the followings team project-level groups. These groups are assigned [project-level permissions](#team-project-level-permissions). + +> The full name of each of these groups is **[{team project name}]\{group name}**. +> For example, the contributors group for a team project called "My Project" is +> **[My Project]/Contributors**. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Group namePermissionsMembership
      Build AdministratorsHas permissions to administer build resources and build permissions for the team project. Members can manage test environments, create test runs, and manage builds.
      ContributorsHas permissions to contribute fully to the team project code base and work item tacking.By default, the team group created when you create a team project is added to this group, and any user you add to the team will be a member of this group. In addition, any team you create for a team project will be added to this group by default, unless you choose a different group from the list.
      ReadersHas permissions to view the team project but not modify it. + Assign to [stakeholders](../quickstart/get-started-stakeholder.md) + who want to be able to view work in progress. +
      Project AdministratorsHas permissions to administer all aspects of the team project, although they can’t create team projects.Assign to users who will manage user permissions, create teams, define area an iteration paths, or customize work item tracking.
      Project Valid Users

      Has permissions to access the team project.

      +
      + If you set the View collection-level information permission + to Deny or Not set for this group, + no users will be able to access the team project. +
      +
      +

      + Contains all users and groups that have been added anywhere within the team project. + You cannot modify the membership of this group. +

      +
      {team name} + Has permissions to contribute fully to the team project code base and work item tacking. + The default Team group is created when you create a team project, + and by default is added to the Contributors group for the team project. + Any new teams you create will also have a group created for them and added to the Contributors group. +
      + You can grant permissions to administer team assets by + [adding members to the team administrator role](../work/scale/add-team-administrator.md). +
      +
      Add members of the team to this group.
      + + + + + +### Team administrator role + +For each team that you add, you can assign one or more team members as administrators. The team admin role isn't a group with a set of defined permissions. Instead, the team admin role is tasked with managing the following team assets. + +> [!NOTE] +> Project Administrators can manage all team admin areas for all teams. + +- **Create and manage team alerts** + Can add and modify alerts so that the team can receive email notifications as changes occur to work items, code reviews, source control files, and builds. For details, see [Manage team alerts](../work/track/alerts-and-notifications.md). + + > [!NOTE] + > There is no UI associated with managing alert permissions. Instead, you can use **TFSSecurity** to manage alerts in TFS. + +-
      **Create and manage team rooms** + Can add users and events to team rooms, and add team rooms. Team rooms are chat rooms limited to team members. For details, see [Collaborate in a team room](../collaborate/collaborate-in-a-team-room.md). +- **Select team area paths** + Can select the default area path(s) associated with the team. These settings affect a number of Agile tools available to the team. For details, see [Set team defaults](../work/scale/set-team-defaults.md). +- **Select team sprints** + Can select the default area path(s) associated with the team. These settings affect a number of Agile tools available to the team. For details, see [Set team defaults](../work/scale/set-team-defaults.md). +- **Configure team backlogs** + Can choose which backlog levels are active for a team. For example, a feature team may choose to show only the product backlog and a management team may choose to show only the feature and epic backlogs. For details, see [Select backlog levels for your team](../work/customize/select-backlog-navigation-levels.md). +- **Customize the Kanban board** + Can fully customize the team's Kanban boards associate with the product and portfolio backlogs. This includes the following elements: + * [Cards: Fields](../work/customize/customize-cards.md#kanban-board) + * [Cards: Styles](../work/customize/customize-cards.md#style-rule) + * [Cards: Tag colors](../work/customize/customize-cards.md#color-tags) + * [Cards: Annotations](../work/customize/customize-cards.md#annotations) + * [Cards: Tests](../work/customize/customize-cards.md#tests) + * [Board: Columns](../work/kanban/add-columns.md) + * [Board: WIP limits](../work/kanban/wip-limits.md) + * [Board: Split columns](../work/kanban/split-columns.md) + * [Board: Swimlanes](../work/kanban/expedite-work.md) + * [Board: Card reordering](../work/customize/reorder-cards.md) + * [Board: Definition of Done](../work/kanban/definition-of-done.md) + * [Charts: Cumulative flow](../report/guidance/cumulative-flow.md#configure) +- **Manage team dashboards** + Can add, configure, and manage permissions (VSTS and TFS 2017) for team dashboards. For details, see [Add and manage dashboards](../report/dashboard-permissions.md#set-permissions). +- **Set working days off** + Sprint planning and tracking tools automatically consider days off when calculating capacity and sprint burndown. Team admins can choose which days are non-working days through the team's Settings dialog. For details, see [Set working days](../work/customize/set-working-days.md). +- **Show bugs on backlogs and boards** + Team admins can choose whether bugs are treated similar to user stories and requirements or as tasks. For details, see [Set your team's preferences for tracking bugs](../work/customize/show-bugs-on-backlog.md). + + + +## Permissions + + +The system manages permissions at different levels—server, collection, project, or object—and by default assigns them to one or more built-in groups. You manage most permissions through the web portal. + + + + + +### Server-level permissions (TFS) + +You manage server-level permissions through the [Team Foundation Administration Console](../tfs-server/add-administrator-tfs.md) or [TFSSecurity command-line tool](../tfs-server/command-line/tfssecurity-cmd.md#permissions). Team Foundation Administrators are granted all server-level permissions. Other server-level groups have select permission assignments. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      Administer warehouse +

      + Can process or change settings for the data warehouse or SQL Server Analysis cube + by using the [Warehouse Control Web Service](../report/admin/manage-reports-data-warehouse-cube.md). +

      +

      + Additional permissions may be required to fully process + or [rebuild the data warehouse and Analysis cube](../report/admin/rebuild-data-warehouse-and-cube.md). +

      +
      Create team project collectionCan create and administer collections.
      Delete team project collection + Can delete a collection from the deployment. +
      + Deleting a collection will not delete the collection database from SQL Server. +
      +
      Edit instance-level information + Can edit server level permissions for TFS users and groups, + and add or remove server level groups from the collection. +
      +

      + **Edit instance-level information** includes the ability to perform these tasks + for all team projects defined in all collections defined for the instance: +

      +
        +
      • Add and administer teams and all team-related features
      • +
      • Create and modify areas and iterations
      • +
      • Edit check-in policies
      • +
      • Edit shared work item queries
      • +
      • Edit team project level and collection level permission ACLs
      • +
      • Create and modify global lists
      • +
      • Edit [event subscriptions](#alerts) (email or SOAP).
      • +
      +

      + When set through the menus, the **Edit instance-level information** permission + also implicitly allows the user to modify version control permissions. + To grant all these permissions at a command prompt, + you must use the `tf.exe Permission` command + to grant the **AdminConfiguration** and **AdminConnections** permissions + in addition to GENERIC\_WRITE. +

      +
      +
      Make requests on behalf of othersCan perform operations on behalf of other users or services. Only assign to service accounts.
      Trigger events + Can trigger TFS alert events. + Only assign to service accounts and members of the Team Foundation Administrators group. +
      Use full Web Access features + Can use all TFS WEB PORTAL features. +
      + If the Use full Web Access features permission is set to Deny, the user will only see + those features permitted for the **Stakeholder** group + (see [Change access levels](change-access-levels.md)). + A Deny will override any implicit Allow, + even for accounts that are members of administrative groups + such as Team Foundation Administrators. +
      +
      View instance-level information + Can view server level group membership and the permissions of those users. +
      + The **View instance-level information** permission is also assigned to the Team Foundation Valid Users group. +
      +
      + + + + + + +### Collection-level permissions + +You manage collection-level permissions through the [web portal admin context](../connect/work-web-portal.md#admin-context) or [TFSSecurity command-line tool](../tfs-server/command-line/tfssecurity-cmd.md#collection-level-permissions). Project Collection Administrators are granted all collection-level permissions. Other collection-level groups have select permission assignments. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      Administer build resource permissionsCan modify permissions for build resources.
      Administer process permissions + Can modify permissions for processes. +
      + Applies to Team Services only, not TFS. +
      +
      Administer Project Server integration + Can [configure the integration of TFS and Project Server](../work/tfs-ps-sync/synchronize-tfs-project-server.md) to enable data synchronization between the two server products. +
      Administer shelved changes + Can delete shelvesets created by other users. +
      Administer workspacesCan create workspaces for other users and delete workspaces created by other users.
      Alter trace settings + Can change the trace settings for gathering more detailed diagnostic information + about TFS Web services. +
      Create a workspace + Can create a version control workspace. +
      + The **Create a workspace** permission is granted to all users + as part of their membership within the Project Collection Valid Users group. +
      +
      Create new team projects + Can create team projects in the collection. +
      + Additional permissions may be required depending on your deployment. + + [Create a New Team Project Wizard](../accounts/create-team-project.md). +
      +
      Create process + Can [create an inherited process](../work/process/manage-process.md). +
      + Applies to Team Services only, not TFS. +
      +
      Delete process + Can [delete an inherited process](../work/process/manage-process.md). +
      + Applies to Team Services only, not TFS. +
      +
      Delete team project + Can [delete team projects](../accounts/delete-team-project.md). +
      + Deleting a team project will delete all data that is associated with the team project. + You cannot undo the deletion of a team project except + by restoring the collection to a point + before the team project was deleted. +
      +
      Edit collection-level information + Can add users and groups, and edit collection level permissions for users and groups. +
      +

      + Edit collection level information includes the ability to perform these tasks + for all team projects defined in a collection: +

      + +
        +
      • Add and administer teams and all team-related features
      • +
      • Create and modify areas and iterations
      • +
      • Edit check-in policies
      • +
      • Edit shared work item queries
      • +
      • Edit team project level and collection level permission ACLs
      • +
      • Create and modify global lists
      • +
      • Edit [event subscriptions](#alerts) (email or SOAP) on team project or collection level events.
      • +
      + +

      + When you set **Edit collection-level information** to **Allow**, + users can add or remove collection level groups and implicitly + allows these users to modify version control permissions. + To grant all these permissions at a command prompt, + you must use the `tf.exe Permission` command to grant + the **AdminConfiguration** and **AdminConnections** permissions, + in addition to GENERIC\_WRITE. +

      +
      +
      Edit process + Can edit a [custom inherited process](../work/process/customize-process.md). +
      + Applies to Team Services only, not TFS. +
      +
      Make requests on behalf of others + Can perform operations on behalf of other users or services. + Assign only to service accounts. +
      Manage build resourcesCan manage build computers, build agents, and build controllers.
      Manage process template + Can download, create, edit, and upload process templates. +
      Applies to TFS only, not Team Services.
      +
      Manage test controllersCan register and de-register test controllers.
      Trigger events + Can trigger team project alert events within the collection. Assign only to service accounts. +
      + Users with this permission can't remove built-in collection level groups + such as Project Collection Administrators. +
      +
      Use build resourcesCan reserve and allocate build agents. Assign only to service accounts for build services.
      View build resourcesCan view, but not use, build controllers and build agents that are configured for the collection.
      View collection-level informationCan view collection level group membership and permissions.
      View system synchronization informationCan call the synchronization application programming interfaces. Assign only to service accounts.
      + + + + + + + +### Project-level permissions + +You manage project-level permissions from the [web portal admin context](../connect/work-web-portal.md#admin-context) or using the [TFSSecurity command-line tool](../tfs-server/command-line/tfssecurity-cmd.md#team-project-level-permissions). Project Administrators are assigned all project-level permissions. Other project-level groups are assigned a subset of these permissions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Feature availability: The Analytics Service is in private preview and only available to select customers of VSTS at this time. + + + + + + + + + + + +
      PermissionDescription
      Create tag definitionCan add tags through a work item form.
      Create test runsCan add and remove test results and add or modify test runs.
      Delete team projectCan [delete the team project](../accounts/delete-team-project.md) from the collection.
      Delete test runsCan delete a scheduled test.
      +

      Delete and restore work items

      or Delete work items in this project

      Can [mark work items in this project as deleted](../work/backlogs/remove-delete-work-items.md). +
        +
      • For VSTS and TFS 2015.1 and later versions, the Contributors group has **Delete and restore work items** at the project-level set to "Allow" by default.
      •   +
      • For TFS 2015 and earlier versions, the Contributors group has **Delete work items in this project** at the project-level set to "Not set" by default. This setting causes the Contributors group to inherit the value from the closest parent that has it explicitly set. 
      •     +
      +
      Edit team project-level information + Can edit team project level permissions for users and groups. +
      +

      + **Edit project-level information** includes the ability + to perform these tasks for the team project: +

      +
        +
      • Add and administer teams and all team-related features
      • +
      • Create and modify areas and iterations
      • +
      • Edit check-in policies
      • +
      • Edit shared work item queries
      • +
      • Edit team project level permission ACLs
      • +
      • Create and modify global lists
      • +
      • Edit [event subscriptions](#alerts) (email or SOAP) on team project level events.
      • +
      +
      +
      Manage test configurationsCan create and delete test configurations.
      Manage test environmentsUsers who have this permission can create and delete test environments.
      Move work items out of this projectCan [move a work item from one team project to another team project](../work/backlogs/remove-delete-work-items.md) within the collection. +
      + Applies to Team Services only, not TFS. +
      +
      Permanently delete work items in this projectCan [permanently delete work items](../work/backlogs/remove-delete-work-items.md) from this project.
      Rename team projectCan [change the name of the team project](../accounts/rename-team-project.md).
      View analyticsCan access data available from the Analytics service. For details, see [Permissions required to access the Analytics service](../report/analytics/analytics-security.md).
      View team project-level informationCan view team project level group membership and permissions.
      View test runsCan view test plans under the team project area path.
      + +## Object permissions + + + +
      + +### Build permissions (object-level) + +You manage build permissions [for each build defined in the web portal](../build-release/concepts/policies/permissions.md#build-permissions) or using the [TFSSecurity command-line tool](../tfs-server/command-line/tfssecurity-cmd.md#build-permissions). Project Administrators are granted all build permissions and Build Administrators are assigned most of these permissions. You can set build permissions for each build definition. + + + + + +Permissions in Build follow a hierarchical model. Defaults for all the permissions can be set at the team project level and can be overridden on an individual build definition. + +To set the permissions at project level for all build definitions in a project, choose **Security** from the action bar on the main page of Builds hub. + +To set or override the permissions for a specific build definition, choose **Security** from the context menu of the build definition. + +The following permissions are defined in Build. All of these can be set at both the levels. + +| Permission | Description | +|------------|-------------| +| **Administer build permissions** | Can change any of the other permissions listed here. | +| **Queue builds** | Can queue new builds. | +| **Delete build definition** | Can delete build definition(s). | +| **Delete builds** | Can delete builds for a definition. Builds that are deleted are [retained](../build-release/concepts/policies/retention.md) in the **Deleted** tab for a period of time before they are destroyed. | +| **Destroy builds** | Can delete builds from the **Deleted** tab. | +| **Edit build definition** | Can save any changes to a build definition, including configuration variables, triggers, repositories, and retention policy. | +| **Edit build quality** | Can add tags to a build. | +| **Override check-in validation by build** | Applies to [TFVC gated check-in builds](../build-release/concepts/definitions/build/triggers.md). This does not apply to PR builds. | +| **Retain indefinitely** | Can toggle the retain indefinitely flag on a build. | +| **Stop builds** | Can stop builds queued by other team members or by the system. | +| **View build definition** | Can view build definition(s). | +| **View builds** | Can view builds belonging to build definition(s). | +| **Update build information** | It is recommended to leave this alone. It's intended to enable service accounts, not team members. | +| **Manage build qualities** | _Only applies to XAML builds_ | +| **Manage build queue** | _Only applies to XAML builds_ | + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      Administer build permissionsCan administer the build permissions for other users.
      Delete build definitionCan delete build definitions for this team project.
      Delete buildsCan delete a completed build.
      Destroy buildsCan permanently delete a completed build.
      Edit build definition + Can create and modify build definitions for this team project. +
      +

      + You turn Inheritance Off for a build definition + when you want to control permissions for specific build definitions. +

      +

      + When inheritance is On, the build definition respects the build permissions + defined at the team project level or a group or user. + For example, a custom Build Managers group has permissions set to manually queue a build for team project Fabrikam. + Any build definition with inheritance On for team project Fabrikam would allow a member of the Build Managers group + the ability to manually queue a build. +

      +

      + However, by turning Inheritance Off for team project Fabrikam, + you can set permissions that only allow Project Administrators + to manually queue a build for a specific build definition. + This would then allow me to set permissions for that build definition specifically. +

      +
      +
      Edit build qualityCan add information about the quality of the build through Team Explorer or the web portal.
      Manage build qualitiesCan add or remove build qualities.
      Manage build queueCan cancel, re-prioritize, or postpone queued builds.
      Override check-in validation by build + Can commit a TFVC changeset that affects a gated build definition + without triggering the system to shelve and build their changes first. +
      + Assign the Override check-in validation by build permission + only to service accounts for build services + and to build administrators who are responsible for the quality of the code. + For more information, see + [Check in to a folder that is controlled by a gated check-in build process](../tfvc/check-folder-controlled-by-gated-check-build-process.md). +
      +
      Queue builds + Can put a build in the queue through the interface for Team Foundation Build or at a command prompt. + They can also stop the builds that they have queued. +
      Retain indefinitelyCan mark a build so that it will not be automatically deleted by any applicable retention policy.
      Stop buildsCan stop any build that is in progress, including builds queued and started by another user.
      Update build information + Can add build information nodes to the system, and can also add information about the quality of a build. + Assign only to service accounts. +
      View build definitionCan view the build definitions that have been created for the team project.
      View buildsCan view the queued and completed builds for this team project.
      + + + + + + +### Git repository permissions (object-level) + + + +>[!NOTE] +>These permissions have changed in TFS 2017 Update 1 and VSTS. +>If you are using an earlier version of TFS, see the [previous list of permissions](git-permissions-before-2017.md). + +You manage the security of each Git repository or branch from the [web portal](../git/branch-permissions.md) or using the [TFSSecurity command-line tool](../tfs-server/command-line/tfssecurity-cmd.md#git-repo-permissions). Project Administrators are granted most of these permissions (which appear only for a team project that's been configured with a Git repository). You can manage these permissions for each Git repository. + +These permissions appear only for a team project including a Git repository. + + + +Set permissions across all Git repositories by making changes to the top-level **Git repositories** entry. + +Individual repositories inherit permissions from the top-level **Git Repositories** entry. + +Branches inherit permissions from assignments made at the repository level. + +By default, the team project level and collection level Readers groups have only Read permissions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      Contribute

      At the repository level, can push their changes to existing branches in the repository. Users who lack this permission but who have [create branch](#git-create-branch-permission) may push changes to new branches. Does not override restrictions in place from [branch policies](../git/branch-policies.md).

      +

      At the branch level, can push their changes to the branch and lock the branch.

      +
      ContributeAt the repository level, can push their changes to branches in the repository. Does not override restrictions in place from [branch policies](../git/branch-policies.md). At the branch level, can push their changes to the branch and lock the branch. +
      Create Branch + Can create and publish branches in the repository. + Lack of this permission does not limit users from creating branches in their local repository; it merely prevents them from publishing local branches to the server. + When a user creates a new branch on the server, they have Contribute, Edit Policies, Force Push, Manage Permissions, and Remove Others' Locks permissions for that branch by default. +
      Create Repository + Can create new repositories. +
      Create Tag + Can push tags to the repository. +
      Delete Repository + Can delete the repository. At the top-level **Git repositories** level, can delete any repository. +
      Edit Policies + Can edit policies for the repository and its branches. +
      Exempt From Policy Enforcement + Can bypass branch policies. +
      Force Push (Rewrite History and Delete Branches) + Can force an update to a branch, delete a branch, and modify the commit history of a branch. Can delete tags and notes. +
      Manage Notes + Can push and edit Git notes. See [Note to self (blog post)](http://git-scm.com/2010/08/25/notes.html) for more details on notes. +
      Manage Permissions + Can set permissions for the repository. +
      Read + Can clone, fetch, pull, and explore the contents of the repository. +
      Remove Others' Locks + Can remove [branch locks](../git/lock-branches.md) set by other users. +
      Rename Repository + Can change the name of the repository. When set at the top-level **Git repositories** entry, can change the name of any repository. +
      + + +>[!NOTE] +> Set permissions across all Git repositories by making changes to the top-level **Git repositories** entry. Individual repositories inherit permissions from the top-level **Git repositories** entry. Branches inherit permissions from assignments made at the repository level. By default, the team project level and collection-level Readers groups only have Read permissions. + +To manage Git repo and branch permissions, see [Set branch permissions](../git/branch-permissions.md). + + + + +### TFVC permissions (object-level) + +You manage the security of each TFVC branch from the [web portal](../accounts/restrict-access-tfs.md) or using the [TFSSecurity command-line tool](../tfs-server/command-line/tfssecurity-cmd.md#tfvc-permissions). Project Administrators are granted most of these permissions which appear only for a team project that's been configured to use Team Foundation Version Control as the source control system. In version control permissions, explicit deny takes precedence over administrator group permissions. + + + + +### TFVC + +These permissions appear only for a team project set up to use Team Foundation Version Control as the source control system. + + + +In version control permissions, explicit deny takes precedence over administrator group permissions. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      + Administer labels + + Can edit or delete labels created by another user. +
      + Check in + + Can check in items and revise any committed changeset comments. + Pending changes are committed at check-in. +
      + Consider adding these permissions to any manually added users or groups + that contributes to the development of the team project; + any users who should be able to check in and check out changes, + make a pending change to items in a folder, + or revise any committed changeset comments. +
      +
      + Check in other users' changes + + Can check in changes that were made by other users. + Pending changes are committed at check-in. +
      + Check out + + Can check out and make a pending change to items in a folder. + Examples of pending changes include adding, editing, renaming, deleting, + undeleting, branching, and merging a file. + Pending changes must be checked in, + so users will also need the Check in permission + to share their changes with the team. +
      + Consider adding these permissions to any manually added users or groups + that contributes to the development of the team project; + any users who should be able to check in and check out changes, + make a pending change to items in a folder, + or revise any committed changeset comments. +
      +
      + Label + + Can label items. +
      + Lock + + Can lock and unlock folders or files. +
      + Manage branch + + Can convert any folder under that path into a branch, + and also take the following actions on a branch: + edit its properties, re-parent it, and convert it to a folder. + Users who have this permission can branch this branch + only if they also have the Merge permission for the target path. + Users cannot create branches from a branch + for which they do not have the Manage Branch permission. +
      + Manage permissions + + Can manage other users' permissions for folders and files in version control. +
      + Consider adding this permission to any manually added users or groups + that contributes to the development of the team project + and that must be able to create private branches, + unless the team project is under more restrictive development practices. +
      +
      + Merge + + Can merge changes into this path. +
      + Consider adding this permission to any manually added users or groups + that contribute to the development of the team project + and that must be able to merge source files, + unless the team project is under more restrictive development practices. +
      +
      + Read + + Can read the contents of a file or folder. + If a user has Read permissions for a folder, + the user can see the contents of the folder and the properties of the files in it, + even if the user does not have permission to open the files. +
      + Revise other users' changes + + Can edit the comments on checked-in files, even if another user checked in the file. +
      + Consider adding this permission to any manually added users or groups + that are responsible for supervising or monitoring the team project + and that might or must change the comments on checked-in files, + even if another user checked in the file. +
      +
      + Undo other users' changes Merge + + Can undo a pending change made by another user. +
      + Consider adding this permission to any manually added users or groups + that are responsible for supervising or monitoring the team project + and that might or must change the comments on checked-in files, + even if another user checked in the file. +
      +
      + Unlock other users' changes + + Can unlock files locked by other users. +
      + Consider adding this permission to any manually added users or groups + that are responsible for supervising or monitoring the team project + and that might or must change the comments on checked-in files, + even if another user checked in the file. +
      +
      + + + + +### Area path permissions (object-level) + +You manage the security of each area path from the [web portal](../work/how-to/set-permissions-access-work-tracking.md) or using the [TFSSecurity command-line tool](../tfs-server/command-line/tfssecurity-cmd.md#area-permissions). Area permissions grant or restrict access to create and manage area paths as well as create and modify work items defined under area paths. + +Members of the Project Administrators group are automatically granted permissions to manage area paths for a team project. Consider granting team administrators or team leads permissions to create, edit, or delete area nodes. + + +Area level permissions grant or restrict access to branches of the area hierarchy +and to the work items in those areas. + +> Multiple teams may contribute to a team project. +> When that's the case, you can set up teams that are associated with an area. +> Permissions for the team's work items are assigned by assigning permissions to the area. +> There are other [team settings](../work/scale/manage-team-assets.md) +> that configure the team's agile planning tools. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      Create child nodes + Can create area nodes. + Users who have both this permission and the Edit this node permission + can move or re-order any child area nodes. +
      + Consider adding this permission to any manually added users or groups + that may need to delete, add, or rename area nodes. +
      +
      Delete this node + Users who have both this permission and the Edit this node permission for another node + can delete area nodes and reclassify existing work items from the deleted node. + If the deleted node has child nodes, those nodes are also deleted. +
      + Consider adding this permission to any manually added users or groups + that may need to delete, add, or rename area nodes. +
      +
      Edit this node + Can set permissions for this node and rename area nodes. +
      + Consider adding this permission to any manually added users or groups + that may need to delete, add, or rename area nodes. +
      +
      Edit work items in this node + Can edit work items in this area node. +
      + Consider adding this permission to any manually added users or groups + that may need to edit work items under the area node. +
      +
      Manage test plans + Can modify test plan properties such as build and test settings. +
      + Consider adding Manage test suites permissions to any manually added users or groups + that may need to manage test plans or test suites under this area node. +
      +
      Manage test suites + Can create and delete test suites, + add and remove test cases from test suites, + change test configurations associated with test suites, + and modify suite hierarchy (move a test suite). +
      + Consider adding Manage test suites permissions to any manually added users or groups + that may need to manage test plans or test suites under this area node. +
      +
      View permissions for this nodeCan view the security settings for this node.
      View work items in this node + Can view, but not change, work items in this area node. +
      + If you set the View work items in this node to Deny, + the user will not be able to see any work items in this area node. + A Deny will override any implicit allow, even for accounts + that are members of administrative groups such as Team Foundation Administrators. +
      +
      + + + + + +### Iterations permissions (object-level) + +Multiple teams may contribute to a team project. +When that's the case, you can set up teams that are associated with an area. +Permissions for the team's work items are assigned by assigning permissions to the area. +There are other [team settings](../work/scale/manage-team-assets.md) +that configure the team's agile planning tools. +

      To learn more, see [Set permissions to restrict access to work items](../work/how-to/set-permissions-access-work-tracking.md).

      + +You manage the security of each iteration path from the [web portal](../work/how-to/set-permissions-access-work-tracking.md) or using the [TFSSecurity command-line tool](../tfs-server/command-line/tfssecurity-cmd.md#iteration-permissions). +Members of the Project Administrators group are automatically granted these permissions for each iteration defined for a team project. Consider granting team administrators, scrum masters, or team leads permissions to create, edit, or delete iteration nodes. + +Iteration level permissions grant or restrict access to create and manage iteration paths. + + + +Consider granting team administrators, scrum masters, or team leads +permissions to create, edit, or delete iteration nodes. + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      Create child nodes + Can create iteration nodes. + Users who have both this permission and the Edit this node permission + can move or re-order any child iteration nodes. +
      + Consider adding this permission to any manually added users or groups that might need to + delete, add, or rename iteration nodes. +
      +
      Delete this node + Users who have both this permission and the Edit this node permission for another node + can delete iteration nodes and reclassify existing work items from the deleted node. + If the deleted node has child nodes, those nodes are also deleted. +
      + Consider adding this permission to any manually added users or groups that might need to + delete, add, or rename iteration nodes. +
      +
      Edit this node + Can set permissions for this node and rename iteration nodes. +
      + Consider adding this permission to any manually added users or groups that might need to + delete, add, or rename iteration nodes. +
      +
      View permissions for this node + Can view the security settings for this node. +
      + Members of the Project Collection Valid Users, Project Valid Users, or any user or group + that has **View collection-level information** or **View project-level information** + can view permissions of any iteration node. +
      +
      + + + + +### Work item query and folder permissions (object-level) + +You manage query and query folder permissions through the [web portal](../work/track/set-query-permissions.md). Project Administors are granted all of these permissions. Contributors are granted Read permissions only. Consider granting the Contribute permissions to users or groups that require the ability to create and share work item queries for the team project. + + + +Consider granting the Contribute permissions to users or groups that require the abilityto create and share work item queries for the team project. To learn more, see [Set permissions on queries](../work/track/set-query-permissions.md). + +> To create query charts [you need Basic access](change-access-levels.md). + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      ContributeCan view and modify this query or query folder.
      DeleteCan delete a query or query folder and its contents.
      Manage permissionsCan manage the permissions for this query or query folder.
      Read + Can view and use the query or the queries in a folder, + but cannot modify the query or query folder contents. +
      + + + + +### Plan permissions (object-level) (VSTS) + +You manage plan permissions through the [web portal](../work/scale/review-team-plans.md#plan-permissions). You manage permissions for each plan through it's Security dialog. Project Administors are granted all permissions to create, edit, and manage plans. Valid users are granted View (read-only) permissions. + +> [!NOTE] +> **Feature availability**: Plans is in preview and available only on Team Services. You access plans by installing the Plans Marketplace [extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-plans). + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      DeleteCan delete the selected plan.
      EditCan edit the configuration and settings defined for the selected plan.
      ManageCan manage the permissions for the selected plan.
      ViewCan view the lists of plans, open and interact with a plan, but cannot modify the plan configuration or settings.
      + + + + +### Work item tags + +You manage tagging permissions mostly from the [TFSSecurity command-line tool](../tfs-server/command-line/tfssecurity-cmd.md#tagging-permissions). Contributors can add tags to work items and use them to quickly filter a backlog, board, or query results view. + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      Create tag definition + Can create new tags and apply them to work items. + Users without this permission can only select from the existing set of tags for the team project. +
      +

      + Readers and Contributors inherit the **Create tag definition** permission + as it is set explicitly to Allow for the Project Valid Users group. +

      +

      + Although the **Create tag definition** permission appears + in the security settings at the team project level, + tagging permissions are actually collection level permissions that are scoped + at the team project level when they appear in the user interface. + To scope tagging permissions to a single team project when using the TFSSecurity command, + you must provide the GUID for the team project as part of the command syntax. + Otherwise, your change will apply to the entire collection. + Keep this in mind when changing or setting these permissions. +

      +
      +
      Delete tag definition + Can remove a tag from the list of available tags for that team project. +
      +

      + This permissions does not appear in the UI. + It can only be set by using the [TFSSecurity](../tfs-server/command-line/tfssecurity-cmd.md) command. +

      +

      + There is also no UI to explicitly delete a tag. + Instead, when a tag has not been in use for 3 days, + TFS automatically deletes it. +

      +
      +
      Enumerate tag definition + Can view a list of tags available for the work item within the team project. + Users without this permission will not have a list of available tags + from which to choose in the work item form or in the query editor. +
      +

      + This permissions does not appear in the UI. + It can only be set by using the [TFSSecurity](../tfs-server/command-line/tfssecurity-cmd.md) command. +

      +

      + The **View project-level information** + implicitly allows users to view existing tags. +

      +
      +
      Update tag definition + Can rename a tag by using the REST API. +
      + This permissions does not appear in the UI. + It can only be set by using the [TFSSecurity](../tfs-server/command-line/tfssecurity-cmd.md) command. +
      +
      + + + + + +### Release management permissions (object-level) (VSTS, TFS 2017) + +Project Administrators and Release Administrators are granted all release management permissions. These permissions can be granted or denied in a hierarchical model at the team project level, for a specific release definition, or for a specific environment in a release definition. Within this hierarchy, permissions can be inherited from the parent or overridden. + +In addition, you can assign approvers to specific steps within a release definition to ensure that the applications being deployed meet quality standards. + +>[!NOTE] +>If you are working with the Release Management client and server supported for TFS 2015, see [Automate deployments with Release Management](../release/previous-version/release-management-overview.md). + + +The following permissions are defined in Release Management. The scope column explains whether the permission can be set at the team project, release definition, or environment level. + +| Permission | Description | Scopes | +|------------|-------------|--------| +| **Administer release permissions** | Can change any of the other permissions listed here. | Project, Release definition, Environment | +| **Create releases** | Can create new releases. | Project, Release definition | +| **Delete release definition** | Can delete release definition(s). | Project, Release definition | +| **Delete release environment** | Can delete environment(s) in release definition(s). | Project, Release definition, Environment | +| **Delete releases** | Can delete releases for a definition. | Project, Release definition | +| **Edit release definition** | Can save any changes to a release definition, including configuration variables, triggers, artifacts, and retention policy as well as configuration within an environment of the release definition. To make changes to a specific environment in a release definition, the user also needs **Edit release environment** permission. | Project, Release definition | +| **Edit release environment** | Can edit environment(s) in release definition(s). To save the changes to the release definition, the user also needs **Edit release definition** permission. This permission also controls whether a user can edit the configuration inside the environment of a specific release instance. The user also needs **Manage releases** permission to save the modified release. | Project, Release definition, Environment | +| **Manage deployments** | Can initiate a direct deployment of a release to an environment. This permission is only for direct deployments that are manually initiated by selecting the **Deploy** action in a release. If the condition on an environment is set to any type of automatic deployment, the system automatically initiates deployment without checking the permission of the user that created the release. | Project, Release definition, Environment | +| **Manage release approvers** | Can add or edit approvers for environment(s) in release definition(s). This permissions also controls whether a user can edit the approvers inside the environment of a specific release instance. | Project, Release definition, Environment | +| **Manage releases** | Can edit the configuration in releases. To edit the configuration of a specific environment in a release instance, the user also needs **Edit release environment** permission. | Project, Release definition | +| **View release definition** | Can view release definition(s). | Project, Release definition | +| **View releases** | Can view releases belonging to release definition(s). | Project, Release definition | + +Default values for all of these permissions are set for team +project collections and team project groups. For example, +**Project Collection Administrators**, **Project Administrators**, and +**Release Administrators** are given all of the above permissions by +default. **Contributors** are given all permissions except +**Administer release permissions**. **Readers**, by default, +are denied all permissions except **View release definition** and +**View releases**. + + + + + + +### Lab Management permissions (TFS 2015, TFS 2013) + +Visual Studio Lab Management permissions are specific to virtual machines, environments, and other resources. In addition, the creator of an object in Lab Management is automatically granted all permissions on that object. +You can set these permissions by using the [TFSLabConfig permissions command-line tool](../tfs-server/command-line/tfslabconfig-cmd.md#permissions). + +By default, the team project level and collection-level Readers groups have only View lab resources (Read) permissions. + +>[!NOTE] +>Lab Management is deprecated for TFS 2017. We recommend that you [use Build and Release Management instead of Lab Management for automated testing](https://docs.microsoft.com/visualstudio/test/lab-management/use-build-or-rm-instead-of-lab-management). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      PermissionDescription
      Delete Environment and Virtual MachinesCan delete environments and templates. The permission is checked for the object that is being deleted. +
      Delete Environment and Virtual MachinesCan delete environments and templates. The permission is checked for the object that is being deleted. +
      Delete Lab LocationsCan delete the locations for Lab Management resources, which include collection host groups, collection library shares, project host groups, and project library shares. To delete a location, you must have the **Delete Lab Location** permission for that location. +
      Edit Environment and Virtual MachinesCan edit environments and templates. The permission is checked for the object that is being edited. +
      Environment OperationsCan start, stop, pause, and manage snapshots, in addition to performing other operations on an environment. +
      Import Virtual MachineCan import a virtual machine from a VMM library share.This permission differs from Write because it only creates an object in Lab Management and does not write anything to the Virtual Machine Manager host group or library share. +
      Manage Child Permissions + Can change the permissions of all the child Lab Management objects. For example, if a user has **Manage Child Permission** for a team project host group, the user can change permissions for all the environments under that team project host group. +
      Manage Lab Locations + Can edit the locations of Lab Management resources, which include collection host groups, collection library shares, project host groups, and project library shares. To edit a specific location, you must have the **Manage Lab Location** permission for that location. This permission for collection level locations (collection host groups and collection library shares) also allows you to create team project level locations (project host group and project library share). +
      Manage PermissionsCan modify the permissions for a Lab Management object. This permission is checked for the object whose permissions are being modified. +
      Manage SnapshotsCan perform all snapshot management tasks for an environment, which include taking a snapshot, reverting to a snapshot, renaming a snapshot, deleting a snapshot, and reading a snapshot. +
      Pause EnvironmentCan pause an environment.
      StartCan start an environment.
      StopCan stop an environment.
      View Lab ResourcesCan view information for the various Lab Management resources, which include collection host groups, project host groups, and environment. To view information about a specific lab resource, you must have the **View Lab Resources** permission for that resource. +
      Write Environment and Virtual MachinesCan create environments for a project host group. Users who have this permission for a project library share can store environments and templates. +
      + + + + + + +### Alert permissions + +There are no UI permissions associated with [managing email notifications or alerts](../work/track/alerts-and-notifications.md). Instead, they can be managed using the [TFSSecurity command line tool](../tfs-server/command-line/tfssecurity-cmd.md#collection-level-permissions). + + +- By default, members of the team project level **Contributors** group can subscribe to alerts for themselves. +- Members of the **Project Collection Administrators** group, + or users who have the **Edit collection-level information** + can set alerts in that collection for others or for a team. +- Members of the **Project Administrators** group, + or users who have the **Edit project-level information** + can set alerts in that team project for others or for a team. + +You can manage alert permissions using [TFSSecurity](../tfs-server/command-line/tfssecurity-cmd.md). + + +|TFSSecurity Action|TFSSecurity Namespace|Description|Project Collection Administrators and Project Collection Service Accounts| +|---|---|---|:---:| +|CREATE_SOAP_SUBSCRIPTION|EventSubscription|Can create a SOAP-based web service subscription.|![](_img/checkmark.png)| +|GENERIC_READ|EventSubscription|Can view subscription events defined for a team project.|![](_img/checkmark.png)| +|GENERIC_WRITE|EventSubscription|Can create alerts for other users or for a team.|![](_img/checkmark.png)| +|UNSUBSCRIBE|EventSubscription|Can unsubscribe from an event subscription.|![](_img/checkmark.png)| + + + +##Related notes + +- [About permissions](about-permissions.md) +- [Add users to a team project](../accounts/add-team-members-vs.md) (VSTS) +- [Add users to a team project](../accounts/add-users.md) (TFS) +- [Add users to an administrator role](../tfs-server/add-administrator-tfs.md) +- [Make a user a team admin](../work/scale/manage-team-assets.md) +- [Change groups and permissions with TFSSecurity](../tfs-server/command-line/tfssecurity-cmd.md) + diff --git a/docs/security/set-build-release-permissions.md b/docs/security/set-build-release-permissions.md new file mode 100644 index 00000000000..9fc240e05a8 --- /dev/null +++ b/docs/security/set-build-release-permissions.md @@ -0,0 +1,67 @@ +--- +title: Set build and release permissions in VSTS and TFS +description: Grant or restrict access to build-release functions supported in VSTS and TFS +ms.assetid: +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: douge +ms.date: 08/14/2017 +--- + +# Set build and release permissions + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Permissions for build and release functions are set at the object-level for a specific build or release. In addition, there are build permissions set at the collection level. You grant or restrict permissions by setting the permission state to Allow or Deny, either for a security group or an individual user. + +For definitions of each build and release permission, see [Build and release permissions](../build-release/concepts/policies/permissions.md). + +## Set the permissions for a build definition + +1. From the web portal **Build-Release** hub, **Builds** page, open the Security dialog for a build definition. + + Open the security dialog for a build definition  + +2. Choose the group you want to set permissions for, and then change the permission setting to Allow or Deny. + + For example, here we change the permission for Edit build definition for the Contributors group to Allow. + + Security dialog for a build definition  + +3. Save your changes. + +## Set the permissions for all release definitions or a specific release definition + +1. From the web portal **Build-Release** hub, **Releases** page, open the Security dialog for all release definitions. + + Open the security dialog for a build definition  + + If you want to manage the permissions for a specific release, then open the Security dialog for that release. + +2. Choose the group you want to set permissions for, and then change the permission setting to Allow or Deny. + + For example, here we deny access to several permissions for the Contributors group. + + Security dialog for a release definition  + +3. Save your changes. + +## Set collection-level permissions to administer build resources + +0. From the web portal user context, open the admin context by clicking the ![](../work/_img/icons/gear_icon.png) gear Settings icon and choosing Account or Collection settings. + +0. Click Security, and then choose the group whose permissions you want to modify. + + Here we choose the Build Administrators group and change the **Use build resources** permission. + + Security dialog for Project Collection Build Administrators group  + +0. Save your changes. + + +## Related notes + +- [Build and release permissions](../build-release/concepts/policies/permissions.md) +- [Default permissions and access](permissions-access.md) +- [Permission reference for Team Foundation Server](permissions.md) \ No newline at end of file diff --git a/docs/security/set-git-tfvc-repository-permissions.md b/docs/security/set-git-tfvc-repository-permissions.md new file mode 100644 index 00000000000..9c6790394a6 --- /dev/null +++ b/docs/security/set-git-tfvc-repository-permissions.md @@ -0,0 +1,65 @@ +--- +title: Set Git or TFVC repository permissions for VSTS & TFS +description: Grant or restrict access to a Git or TFVC repository feature or function +ms.assetid: +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: douge +ms.date: 08/04/2017 +--- + +# Set repository permissions for Git or TFVC + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can grant or restrict access to a repository by setting the permission state to Allow or Deny for a single user or a security group. For a description of each security group and permission level, see [Permissions and group reference](permissions.md). + + +## Set Git repository permissions + +You can set the permissions for all Git repositories for a team project, or for a single repository. + +0. From the web portal user and team project context, open the admin context by clicking the ![](../work/_img/icons/gear_icon.png) gear Settings icon and click **Version Control**. + +0. To set the set the permissions for all Git repositories for a team project, click Git Repositories and choose the security group whose permissions you want to manage. + + Otherwise, click a specific repository and choose the security group whose permissions you want to manage. + +3. Click the setting for the permission you want to change. + + Here we grant permissions to the Contributors group to create repositories. + + Security dialog for all GIt repositories, Contributors group  + +4. When done, click Save changes. + + + + + + +## Set TFVC repository permissions + + +0. From the web portal user and team project context, open the admin context by clicking the ![](../work/_img/icons/gear_icon.png) gear Settings icon and click **Version Control**. + +1. Click the TFVC repository for the team project and then choose the security group whose permissions you want to manage. + +2. Change the permission setting to Allow or Deny. + + For example, here we change the **Manage branch** permission to allow for all members of the Contributors group. + + Security dialog for the TFVC repository, Contributors group  + +3. Save your changes. + + + +## Related notes + +- [Git permissions prior to TFS 2017 Update 1](git-permissions-before-2017.md) \ No newline at end of file diff --git a/docs/security/set-project-collection-level-permissions.md b/docs/security/set-project-collection-level-permissions.md new file mode 100644 index 00000000000..89eff021a65 --- /dev/null +++ b/docs/security/set-project-collection-level-permissions.md @@ -0,0 +1,104 @@ +--- +title: Set project-level or collection-level permissions for VSTS & TFS +description: How-to guide to set project-level permissions in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 08/24/2017 +--- + +# Set permissions at the project-level or project collection-level + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Several permissions are set for the team project or at the account/team project collection level. You can grant these permissions by adding a user or group to one of the default security groups listed here. Or, you can create a VSTS/TFS security group within a level and add members to that group. You can then change the default permission settings. + +> [!div class="mx-tdBreakAll"] +> | Project level | Account/Collection level| +> |-------------|----------| +> |- Build Administrators
      - Contributors
      - Project Administrators
      - Project Valid Users
      - Readers
      - Release Administrators
      - Team Admins |- Project Collection Administrators
      - Project Collection Build Administrators
      - Project Collection Build Service Accounts
      - Project Collection Proxy Service Accounts
      - Project Collection Service Accounts
      - Project Collection Test Service Accounts
      - Project Collection Administrators
      - Project Collection Valid Users
      - Readers group
      - Security Service Group | + +For a description of each group, see [Permissions and groups reference, Groups](permissions.md#groups). + + +> [!Note] +> The above list indicates the latest groups defined for VSTS and TFS 2017. For earlier versions of TFS, the list may differ. Only add service accounts to [TFS service account groups](../tfs-server/admin/service-accounts-dependencies-tfs.md). To understand valid user groups, see [About permissions and groups, Valid user groups](about-permissions.md#validusers). + +## Add a user or group to a security group + +As roles and responsibilities change, you might need to change the permission levels for individual members of a team project. The easiest way to do that is to add the user or a group of users to a pre-defined security group. + +Here we show how to add a user to the built-in Project Administrators group. The method is similar to adding an Azure Active Directory or Active Directory group. + +0. Open the admin context from the user/team project context, click the ![gear icon](_img/icons/gear_icon.png) gear settings icon, and click the **Security** tab. + +0. Click the security group, Project Administrators, and then click Members, and then click **Add**. + + Web portal, Admin context, Security hub, Add member + +0. Type the name of the user account into the text box. You can type several identities into the text box, separated by commas. The system will automatically search for matches. Click the match(es) that meets your choice. + + Add users and group dialog + + > [!NOTE] + > Users that have limited access, such as Stakeholders, won't be able to access select features even if granted permissions to those features. To learn more, see [Permissions and access](permissions-access.md). + +0. Click Save changes and you'll notice the user Project Administrators, and then click Members, and then click **Add**. + + Web portal, Admin context, Security hub, Members of Project Administrators group + + +## Change the permission level for a project-level group + +0. To open the admin context from the user/team project context, click the ![gear icon](_img/icons/gear_icon.png) gear settings icon, and click the **Security** tab. + +0. Click the group whose permissions you want to change. + + For example, here we grant permission to the Contributors group to delete and resotre work items. + + Default Collections level groups and permissions + + > [!NOTE] + > You can't change the permission settings for the Project Administrators group. This is by design. + +0. Click **Save changes**. + + + +## Add a group and change its permissions at the account or collection-level group + +0. Open the admin context for the account or collection. Click the ![gear icon](_img/icons/gear_icon.png) gear Settings icon and choose **Account Settings** (VSTS) or **Collection Settings** (TFS), and then click the **Security** tab. + +0. Click Create group to open the dialog for adding a group. + + Create security group at the account or collection level + +0. Enter a name for the group, and optionally a description. + + For example, here we define a Work Tracking Administrators group. + + Security group dialog, Add a security group at the account or collection level + + For a description of each permission, see [Permissions and groups reference, project-level permissions](permissions.md#project-level-permissions). + +0. Click the group name you just created and change the permission levels. + + Here we grant this group permissions to [manage customizations for the Inheritance process model](../work/process/manage-process.md). + + Security group dialog, Add a security group at the account or collection level + +0. Click **Save changes**. + +> [!NOTE] +> You can't change the permission settings for the Project Collection Administrators group. This is by design. + +## Related notes + +- [About permissions and groups](about-permissions.md) +- [Permissions lookup reference](permissions-lookup-guide.md) +- [Permissions and groups reference](permissions.md) +- [Team administrator permissions](../work/scale/team-administrator-permissions.md) +- [TFS service account groups](../tfs-server/admin/service-accounts-dependencies-tfs.md) diff --git a/docs/security/set-sharepoint-permissions.md b/docs/security/set-sharepoint-permissions.md new file mode 100644 index 00000000000..8d5b3b99e38 --- /dev/null +++ b/docs/security/set-sharepoint-permissions.md @@ -0,0 +1,99 @@ +--- +title: Set SharePoint permissions for TFS +description: How-to guide to set add users to SharePoint integrated with Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 08/14/2017 +--- + + +# Set SharePoint site permissions + +**TFS 2017 | TFS 2015 | TFS 2013** + +> [!IMPORTANT] +> Integration with a SharePoint site is only supported for on-premises TFS. For information on what is supported for VSTS, see [Dashboards and reports overview](../report/overview.md). If you don't have a site and want to add it, see [Configure or add a project portal](../report/sharepoint-dashboards/configure-or-add-a-project-portal.md). + + + +## Add users to SharePoint site + +1. Open your project portal. + +2. Choose **Share**, and add users or user groups to the appropriate SharePoint groups. + + ![Choose the SharePoint group and add users](../accounts/_img/add-users-team-project/invite-people.png) + + - To add users who will require minimal access to the project, choose **Readers**. + - To add users who will contribute fully to this project, choose **Contributors**. + - To add users who will act as project leads, choose **Full Control**. + +For more information about users and groups in SharePoint Products, +[go here](https://technet.microsoft.com/library/cc262690.aspx). + +If your TFS deployment is integrated with SQL Server Reporting Services, +you'll need to manage users in the appropriate SQL Server Reporting Services groups, +or they won't be able to view or edit those reports. + + +## Add a user account as an administrator of the SharePoint site + +1. On the server that's running SharePoint Products, open SharePoint Central Administration. + +2. Grant permissions that are appropriate for this user at the farm or the Web application level, depending on your security needs. + + For optimum interoperability, consider adding users of the **Team Foundation Administrators** group + to the following groups in SharePoint Products: + + - **Farm Administrators** + + - **Site Collection Administrators** group for all site collections that the deployment of Team Foundation Server uses + + ![Follow instructions for your version of SharePoint](../tfs-server/_img/add-administrator-tfs/people-and-groups.png) + + + + \ No newline at end of file diff --git a/docs/security/toc.yml b/docs/security/toc.yml new file mode 100644 index 00000000000..014126d1af1 --- /dev/null +++ b/docs/security/toc.yml @@ -0,0 +1,68 @@ +- name: "Security & Identity" + href: index.md +- name: Overview + items: + - name: About security and identity + href: about-security-identity.md + - name: Default permission and access assignments + href: permissions-access.md +- name: Quickstart + items: + - name: View permissions + href: view-permissions.md + - name: Set Git or TFVC repository permissions + href: set-git-tfvc-repository-permissions.md + - name: Set permissions at the project or collection level + href: set-project-collection-level-permissions.md +- name: Concepts + items: + - name: About permissions and groups + href: /vsts/security/about-permissions?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: About access levels + href: /vsts/security/access-levels?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Active Directory groups (TFS) + href: /vsts/tfs-server/admin/setup-ad-groups?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json +- name: How-to Guides + items: + - name: Set Git branch permissions + href: /vsts/git/branch-permissions?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Set build and release permissions + href: /vsts/security/set-build-release-permissions?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Set permissions and access for work tracking + href: /vsts/work/how-to/set-permissions-access-work-tracking?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: "Set permissions for READMEs & Wikis" + href: /vsts/collaborate/manage-readme-wiki-permissions?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Add accounts using streamlined user management (VSTS) + href: /vsts/accounts/add-account-users-from-user-hub?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Add a user to a team project + href: /vsts/accounts/add-users?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Authenticate access with personal access tokens + href: /vsts/accounts/use-personal-access-tokens-to-authenticate?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: "Change access levels (TFS)" + href: change-access-levels.md + - name: Restrict access to resources + href: /vsts/accounts/restrict-access-tfs?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json +- name: Reference + items: + - name: Permission lookup guide + href: permissions-lookup-guide.md + - name: Permissions and groups reference + href: /vsts/security/permissions?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Git permissions prior to TFS 2017 Update 1 + href: /vsts/git-permissions-before-2017?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: Web site settings and security (TFS) + href: /vsts/security/websitesettings?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json + - name: TFSSecurity + href: /vsts/tfs-server/command-line/tfssecurity-cmd?toc=/vsts/security/toc.json&bc=/vsts/security/breadcrumb/toc.json +- name: Resources + items: + - name: Account Management (VSTS) + href: ../accounts/index.md + - name: Server Administration (TFS) + href: ../tfs-server/index.md + - name: Authentication guidance for REST APIs + href: /vsts/integrate/get-started/authentication/authentication-guidance + - name: VSTS data protection overview + href: ../articles/team-services-security-whitepaper.md + - name: Technical Articles + href: ../articles/index.md diff --git a/docs/security/view-permissions.md b/docs/security/view-permissions.md new file mode 100644 index 00000000000..c308d483693 --- /dev/null +++ b/docs/security/view-permissions.md @@ -0,0 +1,53 @@ +--- +title: View permissions +description: View permissions for yourself or a team member +ms.assetid: +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2017 +--- + + +## View permissions for yourself or others + +**VSTS | TFS 2017 | TFS 2015 | TFS 2013** + +You can view your permissions or those defined for another. That way, if you don't have the permission to access a feature or function, you can request it from the right resource. + +Permissions are set at the collection, team project, and object level as described in [About permissions and groups](about-permissions.md). So to view the permissions you have, you need to open the permissions at the object, project, or collection level. + +> [!NOTE] +> This topic shows how to view permissions assigned to a user as the project-level. However, the steps are similar whether you work from the Security dialog of an object or at the account/collection level. + +## View project-level permissions + +0. Open the admin context from the user/team project context. Click the ![gear icon](_img/icons/gear_icon.png) gear settings icon, and click the **Security** tab. + +0. Begin typing the name into the *Filter users and groups* box. The system will automatically show the names that being with the characters you type. + + Find a user account name + +0. Click the name you want. The project-level permissions you have set are based on the groups you belong to or those specifically set for your account. + + Web portal, Security tab, Project Administrators Group, Members tab + +0. Click **Member of** to see which security groups the user belongs to. + + Here we see that the user account, Jamal Hartnett, belongs to several teams as well as the Project Collection Administrators group. + + Web portal, Security tab, User name, Members tab + +## Determine who is a member of the Project Administrators group + +If you aren't a project administrator, and you need to be, find someone who is, and have them add you. You can find who is a member of the Project Administrators group by clicking on that group and seeing who are members. + +Web portal, Security tab, Project Administrators Group, Members tab + + +## Related notes + +- [Add users to a team](../work/scale/multiple-teams.md) +- [Add users to a team project](../accounts/add-users.md) + diff --git a/docs/security/websitesettings.md b/docs/security/websitesettings.md new file mode 100644 index 00000000000..23674f1de94 --- /dev/null +++ b/docs/security/websitesettings.md @@ -0,0 +1,128 @@ +--- +title: Web Site Settings and Security, TFS Setup, Upgrade, and Administration +description: Discusses security concerns related to web site settings for TFS, including SSL/TLS, certificates, and so forth. +ms.prod: visual-studio-tfs-dev15 +ms.technology: vs-devops-admin +ms.assetid: ca9cd507-37fc-438f-bc8e-562b72dfedb2 +toc: show +ms.manager: douge +ms.author: douge +ms.date: 08/08/2016 +--- + +# TFS web site settings and security + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +## Background + +For many releases, the default web site settings for Team Foundation Server have been: + +* A single HTTP binding for the TFS web site on port 8080, with no host name or IP address specified. +* A public URL (previously referred to as the Notification URL) of the form http://machine-name:8080/tfs. + +The primary benefit of these settings is that they are very simple to set up and convenient for end users in most scenarios. In particular: + +* Using HTTP rather than HTTPS avoids the need to obtain and install certificates. +* Using 8080 rather than 80 avoids potential conflicts with other sites on the same machine. +* Using "tfs" as the virtual directory for the site makes it easier to host Team Foundation Server and other web sites on the same port on the same server. +* Using the machine name, rather than the fully-qualified-domain-name (FQDN), in the public URL saves a lot of typing. +* Leaving the host name in the binding unspecified allows for flexibility in connecting - machine name, FQDN, or IP address will all work when users try to connect to their servers. + +These settings are not, however, secure by default. In particular, by not using an HTTPS binding, communication to and from Team +Foundation Server is not encrypted in transit unless other solutions like IPSec are used. They are thus potentially vulnerable to malicious +actors monitoring or even modifying the contents of the communication. These issues are mitigated to some extent when TFS is deployed on +an intranet behind a corporate firewall, as the vast majority of TFS instances are. But even in these scenarios, data sent to and from +TFS includes source code, work item data, and other information which could often benefit from additional security. + +Additionally, in TFS 2017 new authentication scenarios exist (build/release agent service account authentication, personal access tokens) +which send bearer tokens over the wire. If these tokens are obtained by malicious users, they can then be used to impersonate the users +to whom they belong. + +Given all of this, we decided the time had come to more strongly advocate for the use of HTTPS bindings in Team Foundation Server +deployments. + +## Setting groups + +TFS 2017 presents web site settings configuration options in all server configuration scenarios. Several setting groups are provided, which bundle up combinations of +site bindings, virtual directories, and public URLs which we recommend and believe will be most commonly used. For scenarios where none of these setting groups are +appropriate, settings can be fully customized using the Edit Site Settings dialog. + +Default setting group + +The Default setting group includes the same settings used in previous versions of Team Foundation Server. For all of the reasons listed above, these settings are +still the default for new TFS deployments. For existing deployments, we will attempt to preserve existing settings, which will often result in the Default setting +group being selected. + +HTTPS and HTTP with redirect setting group + +The HTTPS and HTTP (with redirect) setting group provisions two bindings: + +* One HTTPS binding on port 443, with the fully-qualified-domain-name (FQDN) of the machine as the Host Name. +* One HTTP binding on port 80, again with the FQDN of the machine as the Host Name. + +The HTTP binding on port 80 is added only as a convenience for end users - a redirect is configured so that all traffic ends up using the HTTPS binding on port 443. +The Public URL for this setting group is of the form https://fully-qualified-domain-name. By default, this setting group will provision new self-signed +certificates and use them for the HTTPS binding. We do not typically recommend using self-signed certificates for production TFS deployments. See Certificate +Options below for more information on when it is appropriate to use self-signed certificates and what other options are available. + +The HTTPS only setting group provisions a single HTTPS binding on port 443, with the FQDN of the machine as the Host Name. Again, the Public URL for this setting +group is of the form https://fully-qualified-domain-name, and self-signed certificates will be provisioned by default. + +The HTTP Only setting group provisions a single HTTP binding on port 80 with no Host Name specified. The Public URL for this setting group is of the form +http://machine-name. + +## Certificate options + +Deploying web sites using HTTPS bindings and SSL/TLS encryption is closely related to the broader topic of public key infrastructure (PKI), which is a rich and +interesting topic for which a wide variety of documentation already exists. We will not attempt to cover all of the complexity here, but rather will focus on high +level options for configuring HTTPS bindings for Team Foundation Server deployments. Many organizations have specific policies around deploying certificates, so the +first step in deciding what certificate to use for a TFS deployment is often to talk with an organization-level information technology group. + +Options include: + +* Allowing the TFS configuration wizard to generate self-signed certificates for use by the deployment. +* Obtaining a certificate from an internal Certificate Authority. +* Obtaining a certificate from an external Certificate Authority. + +### Self-signed certificates + +Self-signed certificates are useful for trial deployments of Team Foundation Server, since they are very easy to provision and use. They are less appropriate for +production deployments of Team Foundation Server, and we do not recommend they be used for Team Foundation Server deployments exposed to the public internet. +Generally, self-signed certificates are susceptible to man-in-the-middle attacks. They also cause problems for users, since they will cause certificate warnings +and errors until their root certificates are installed on each client machine. For example, the Edge browser will show the below error. + +Certificate errors in Edge + +When the TFS configuration wizard generates self-signed certificates for your deployment, it will create two - one that is placed in the Trusted Root Certification +Authorities store on the server, and a second, signed by the first, that is placed in the Personal store on the server and used by TFS. Setting things up in this way +helps to mitigate the possibility of man-in-the-middle attacks and enables rotation of the certificate used in the HTTPS binding without also needing to distribute a +new certificate to all clients in order to avoid certificate errors like the one shown above. + +To avoid those certificate warnings and errors, you can export the root certificate and install it on client machines. There are several ways to accomplish this, +including: + +* Using the Certificates MMC snap-in to manually [export the certificate](https://technet.microsoft.com/library/cc730988.aspx) on the server and then import it on each client. +* Using the [Export-Certificate](https://technet.microsoft.com/library/hh848628.aspx) powershell cmdlet, available in Windows 8 / Windows Server 2012 and later +operating systems, to export the certificate. [Import-Certificate](https://technet.microsoft.com/library/hh848630.aspx) can then be used to import it on each client. +* Using [Group Policy](https://technet.microsoft.com/library/dd807084.aspx) to automate distribution to clients. + +### Internal and external Certificate Authorities + +Many large organizations have their own public key infrastructure, and are able to issue certificates from their own Certificate Authorities. Typically, when this +is the case, the trusted root certificates for these authorities will already be distributed to client machines, thus avoiding the need to distribute additional +certificates for Team Foundation Server. If your organization has its own public key infrastructure, this can be a good option for your TFS deployment. + +When other options are not appropriate or available, certificates may be obtained (typically at a cost) from an external Certificate Authority (CA). Instructions for +this process, which starts with creating a [Certificate Signing Request](https://technet.microsoft.com/en-us/library/cc732906(v=ws.10).aspx), can be found on most CA +websites. Some important notes: + +* Make sure that the Common Name provided in the certificate request matches up with the host name you want in your public URL - for example, tfs.contoso.com. +* On the Cryptographic Service Provider Properties, we recommend selecting Microsoft RSA SChannel Cryptographic Provider and a bit length of 2048 or greater. + +## Changing your public URL + +It should also be noted that when upgrading an existing Team Foundation Server deployment, changing the public URL will impact end users. While we do still +recommend converting from HTTP to HTTPS bindings, Visual Studio client connections will need to be re-established, old bookmarks will no longer resolve properly, +and so forth. It is therefore important to coordinate this sort of change with the users of your TFS deployment to avoid significant disruption. + diff --git a/docs/service-hooks/_data/build.complete.json b/docs/service-hooks/_data/build.complete.json new file mode 100644 index 00000000000..d7e5b32db60 --- /dev/null +++ b/docs/service-hooks/_data/build.complete.json @@ -0,0 +1,21 @@ +{ + "id": "698261b2-8a2a-47d5-ae40-5ea8fd7f734b", + "eventType": "build.complete", + "publisherId": "tfs", + "message": { + "text": "My First Project Build FabrikamAppsBuild_20131216.1 completed (Status: Successfully Completed)", + "html": "My First Project Build FabrikamAppsBuild_20131216.1 completed (Status: Successfully Completed)", + "markdown": "My First Project Build [FabrikamAppsBuild_20131216.1](https://willsmythe.vsoalm.tfsallin.net/web/build.aspx?pcguid=095e6561-c80c-40f3-81ed-11db98815141&builduri=vstfs%3a%2f%2f%2fBuild%2fBuild%2f7) completed (Status: Successfully Completed)" + }, + "detailedMessage": { + "text": "My First Project Build FabrikamAppsBuild_20131216.1 completed (Status: Successfully Completed)", + "html": "My First Project Build FabrikamAppsBuild_20131216.1 completed (Status: Successfully Completed)", + "markdown": "My First Project Build [FabrikamAppsBuild_20131216.1](https://willsmythe.vsoalm.tfsallin.net/web/build.aspx?pcguid=095e6561-c80c-40f3-81ed-11db98815141&builduri=vstfs%3a%2f%2f%2fBuild%2fBuild%2f7) completed (Status: Successfully Completed)" + }, + "resource": { + "id": 7, + "name": "FabrikamAppsBuild_20131216.1", + "url": "https://willsmythe.vsoalm.tfsallin.net/DefaultCollection/_apis/build/Builds/7" + }, + "createdDate": "2013-12-16T04:33:48.106Z" +} \ No newline at end of file diff --git a/docs/service-hooks/_data/consumers.json b/docs/service-hooks/_data/consumers.json new file mode 100644 index 00000000000..cb8288814e5 --- /dev/null +++ b/docs/service-hooks/_data/consumers.json @@ -0,0 +1,1732 @@ +{ +"count": 14, +"value": [ +{ +"id": "zendesk", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/zendesk", +"name": "Zendesk", +"description": "Zendesk is a SaaS suite that offers help desk ticketing, issue tracking, and customer service support.", +"imageUrl": "", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=396756", +"authenticationType": "external", +"inputDescriptors": [ +{ +"id": "accountName", +"name": "Account name", +"description": "Zendesk account name like https://.zendesk.com", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": true, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^([A-Za-z0-9][A-Za-z0-9\\-]{0,61}[A-Za-z0-9]|[A-Za-z0-9]{1,63})$", +"maxLength": 63 +} +}, +{ +"id": "username", +"name": "User name", +"description": "The Zendesk user name of a user who will update tickets", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^.+\\@.+\\..+$", +"maxLength": 254 +} +}, +{ +"id": "apiToken", +"name": "API token", +"description": "The Zendesk API token (can be found in Zendesk app in Admin > Channels > API)", +"inputMode": "passwordBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"maxLength": 100 +} +} +], +"actions": [ +{ +"id": "createPrivateComment", +"consumerId": "zendesk", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/zendesk/actions/createPrivateComment", +"name": "Create a private comment in a ticket", +"description": "Create a private comment in a ticket", +"supportedEventTypes": [ +"workitem.commented" +], +"inputDescriptors": [] +} +] +}, +{ +"id": "zapier", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/zapier", +"name": "Zapier", +"description": "Zapier enables you to automate tasks between 200+ online services. Note: Subscriptions for this service must be created and managed at zapier.com.", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=390581", +"authenticationType": "none", +"externalConfiguration": { +"editSubscriptionPropertyName": "editSubscriptionUrl" +}, +"inputDescriptors": [], +"actions": [ +{ +"id": "sendNotification", +"consumerId": "zapier", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/zapier/actions/sendNotification", +"name": "Send notification", +"description": "Send event information to the specified Zapier subscription URL.", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "url", +"name": "Subscription URL", +"description": "The URL on zapier.com that the notification POST will be sent to.", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "uri", +"isRequired": true +} +} +] +} +] +}, +{ +"id": "webHooks", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/webHooks", +"name": "Web Hooks", +"description": "Provides event communication via HTTP", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=390531", +"authenticationType": "none", +"inputDescriptors": [], +"actions": [ +{ +"id": "httpRequest", +"consumerId": "webHooks", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/webHooks/actions/httpRequest", +"name": "Post via HTTP", +"description": "This action posts a JSON object representation of the event to the specified URL. Secure, HTTPS endpoints are recommended due to the potential for private data in the event payload. Learn More", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "url", +"name": "URL", +"description": "The URL to which an HTTP POST will be sent.", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "uri", +"isRequired": true +} +}, +{ +"id": "httpHeaders", +"name": "HTTP headers", +"description": "HTTP header keys and values separated by a colon(e.g. \"Key1:value1\") with each key-value-pair appearing on its own line of text.", +"inputMode": "textArea", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"pattern": "^([\\S]+[\\s]*:[\\s]*[\\S]+[\\s]*[\r\n\f]+)*?([\\S]+[\\s]*:[\\s]*[\\S]+)+$" +} +}, +{ +"id": "basicAuthUsername", +"name": "Basic authentication username", +"description": "Enter a username for standard HTTP authentication. Basic HTTP authentication sends credentials in plain text (unencrypted) which means you should use a URL beginning with \"https\" to enable encryption of these credentials via secure transport layer (SSL).", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"pattern": "^[\\S]+$", +"minLength": 1, +"maxLength": 256 +} +}, +{ +"id": "basicAuthPassword", +"name": "Basic authentication password", +"description": "Enter a password for standard HTTP authentication. Basic HTTP authentication sends credentials in plain text (unencrypted) which means you should use a URL beginning with \"https\" to enable encryption of these credentials via secure transport layer (SSL).", +"inputMode": "passwordBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"pattern": "^[\\S]+$", +"minLength": 1, +"maxLength": 256 +} +}, +{ +"id": "resourceDetailsToSend", +"name": "Resource details to send", +"description": "Control the resource fields to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "resourceDetailsToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "minimal", +"displayValue": "Minimal" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +}, +{ +"id": "messagesToSend", +"name": "Messages to send", +"description": "Control the messages to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "messagesToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "text", +"displayValue": "Text" +}, +{ +"value": "html", +"displayValue": "HTML" +}, +{ +"value": "markdown", +"displayValue": "Markdown" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +}, +{ +"id": "detailedMessagesToSend", +"name": "Detailed messages to send", +"description": "Control the detailed messages to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "detailedMessagesToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "text", +"displayValue": "Text" +}, +{ +"value": "html", +"displayValue": "HTML" +}, +{ +"value": "markdown", +"displayValue": "Markdown" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +} +] +} +] +}, +{ +"id": "userVoice", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/userVoice", +"name": "UserVoice", +"description": "UserVoice integrates easy-to-use feedback, helpdesk, and knowledge base management tools in one platform that empowers users to speak and companies to understand", +"imageUrl": "", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=393617", +"authenticationType": "external", +"inputDescriptors": [], +"actions": [ +{ +"id": "sendLinkedWorkItemEvent", +"consumerId": "userVoice", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/userVoice/actions/sendLinkedWorkItemEvent", +"name": "Send linked work item event", +"description": "Send linked work item events to UserVoice", +"supportedEventTypes": [ +"workitem.created", +"workitem.updated" +], +"inputDescriptors": [ +{ +"id": "url", +"name": "URL", +"description": "The URL to which the liked work item event will be sent", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "uri", +"isRequired": true +} +}, +{ +"id": "authToken", +"name": "Authorization token", +"description": "The authorization token to use while sending the event to UserVoice", +"inputMode": "textBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true +} +} +] +} +] +}, +{ +"id": "trello", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/trello", +"name": "Trello", +"description": "Provides integration with Trello", +"imageUrl": "https://d2k1ftgv7pobq7.cloudfront.net/images/bd87ee916375920ae72dffadbb10d412/logo-blue-lg.png", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=390530", +"authenticationType": "external", +"inputDescriptors": [ +{ +"id": "userToken", +"name": "User token (need one? Get it now)", +"description": "Your user token provided by Trello. Click the link in the action description above to learn how to obtain this token.", +"inputMode": "textBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"minLength": 64, +"maxLength": 64 +} +} +], +"actions": [ +{ +"id": "createList", +"consumerId": "trello", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/trello/actions/createList", +"name": "Create a list", +"description": "This action creates a list on an existing board in Trello. A list is used to organize cards on a board and typically represents a state. Learn More", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "boardId", +"name": "Board", +"description": "The name of the board on which the Trello list will be created.", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"minLength": 8, +"maxLength": 64 +}, +"dependencyInputIds": [ +"userToken" +], +"hasDynamicValueInformation": true +}, +{ +"id": "addToBottom", +"name": "Create at bottom of board", +"description": "Indicates if the list should be created at the bottom of the board, instead of the top.", +"inputMode": "checkBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "boolean" +}, +"values": { +"defaultValue": "False" +} +} +] +}, +{ +"id": "createCard", +"consumerId": "trello", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/trello/actions/createCard", +"name": "Create a card", +"description": "This action creates a card on an existing list in Trello. A card can represent a task, issue, event, or just about anything. A card's state is typically determined by what list it is on. Learn More", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "boardId", +"name": "Board", +"description": "The name of the board on which the Trello card will be created.", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"minLength": 8, +"maxLength": 64 +}, +"dependencyInputIds": [ +"userToken" +], +"hasDynamicValueInformation": true +}, +{ +"id": "listId", +"name": "List", +"description": "The name of the list on which the Trello card will be created.", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"minLength": 9, +"maxLength": 64 +}, +"dependencyInputIds": [ +"boardId" +], +"hasDynamicValueInformation": true +}, +{ +"id": "labels", +"name": "Labels", +"description": "A comma-separated list of label colors to apply to the created card. Valid label color names are red, orange, yellow, green, blue, and purple.", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"pattern": "^((red|orange|yellow|green|blue|purple),)*?(red|orange|yellow|green|blue|purple)+$", +"minLength": 3, +"maxLength": 35 +}, +"values": { +"possibleValues": [ +{ +"value": "red" +}, +{ +"value": "orange" +}, +{ +"value": "yellow" +}, +{ +"value": "green" +}, +{ +"value": "blue" +}, +{ +"value": "purple" +} +] +} +}, +{ +"id": "addToTop", +"name": "Create at top of list", +"description": "Indicates if the card should be created at the top of the Trello list, instead of the bottom.", +"inputMode": "checkBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "boolean" +}, +"values": { +"defaultValue": "False" +} +} +] +} +] +}, +{ +"id": "myGet", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/myGet", +"name": "MyGet", +"description": "MyGet allows you to create and host your own NuGet feeds with your own packages and those from other package sources such as NuGet.org", +"imageUrl": "https://www.myget.org/Content/images/myget/logo.png", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=393619", +"authenticationType": "external", +"inputDescriptors": [], +"actions": [ +{ +"id": "publishPackage", +"consumerId": "myGet", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/myGet/actions/publishPackage", +"name": "Publish NuGet package to MyGet", +"description": "Publish NuGet package produced in a build to a MyGet feed", +"supportedEventTypes": [ +"build.complete" +], +"inputDescriptors": [ +{ +"id": "feedId", +"name": "Feed", +"description": "The MyGet private or public feed where to publish the packages", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": true, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^[a-z0-9]([_-]?[a-z0-9]+)*$", +"maxLength": 63 +} +}, +{ +"id": "packageSourceId", +"name": "Package source identifier", +"description": "The MyGet package source identifier which defines the packages to publish", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "guid", +"isRequired": true +} +} +] +}, +{ +"id": "triggerBuild", +"consumerId": "myGet", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/myGet/actions/triggerBuild", +"name": "Trigger a MyGet build", +"description": "Trigger a MyGet build, which is based on several conventions. Learn more.", +"supportedEventTypes": [ +"git.push" +], +"inputDescriptors": [ +{ +"id": "feedId", +"name": "Feed", +"description": "The MyGet private or public feed where to trigger a build", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": true, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^[a-z0-9]([_-]?[a-z0-9]+)*$", +"maxLength": 63 +} +}, +{ +"id": "buildSourceId", +"name": "Build source identifier", +"description": "The MyGet build source identifier which defines the sources to build", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "guid", +"isRequired": true +} +} +] +} +] +}, +{ +"id": "kato", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/kato", +"name": "Kato", +"description": "Kato provides a messaging service for modern organizations", +"imageUrl": "", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=393614", +"authenticationType": "external", +"inputDescriptors": [ +{ +"id": "roomToken", +"name": "Room token", +"description": "The token for interacting with a room using the Kato API", +"inputMode": "textBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^([a-zA-Z0-9]|-|_|\\.|!|\\^|\\*|~|'|\\(|\\))+$", +"maxLength": 300 +} +}, +{ +"id": "roomName", +"name": "Room name", +"description": "Room name as seen in Kato", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": true, +"validation": { +"dataType": "string" +} +} +], +"actions": [ +{ +"id": "postEventToRoom", +"consumerId": "kato", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/kato/actions/postEventToRoom", +"name": "Post event to room", +"description": "Posts an event to a Kato room", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [] +} +] +}, +{ +"id": "jenkins", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/jenkins", +"name": "Jenkins", +"description": "Jenkins is a continuous integration server which allows building and testing software projects continously.", +"imageUrl": "http://jenkins-ci.org/sites/default/files/images/headshot.png", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=393616", +"authenticationType": "external", +"inputDescriptors": [ +{ +"id": "serverBaseUrl", +"name": "Jenkins base URL", +"description": "The base URL that hosts the Jenkins server", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "uri", +"isRequired": true +} +}, +{ +"id": "username", +"name": "User name", +"description": "The Jenkins user name of a user who is allowed to trigger the build", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true +} +}, +{ +"id": "password", +"name": "User API token (or password)", +"description": "The user's API token, which is available in the Jenkin user configuration page. The API token is new since version 1.426. For earlier versions of Jenkins the real user password must be specified.", +"inputMode": "passwordBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true +} +} +], +"actions": [ +{ +"id": "triggerGenericBuild", +"consumerId": "jenkins", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/jenkins/actions/triggerGenericBuild", +"name": "Trigger generic build", +"description": "Triggers a generic Jenkins build, invoking the Jenkins build URL.", +"supportedEventTypes": [ +"git.push", +"build.complete", +"tfvc.checkin" +], +"inputDescriptors": [ +{ +"id": "buildName", +"name": "Build", +"description": "The build name to trigger", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true +}, +"dependencyInputIds": [ +"serverBaseUrl", +"username", +"password" +], +"hasDynamicValueInformation": true +}, +{ +"id": "buildAuthToken", +"name": "Build token", +"description": "The authorization token in the form of a string so that only those who know it would be able to remotely trigger this project's builds", +"inputMode": "passwordBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +} +}, +{ +"id": "buildParameterized", +"name": "Accepts parameters", +"description": "Indicates if the build is parameterized or not (build parameters are optionally specified above)", +"inputMode": "checkBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "boolean" +} +}, +{ +"id": "buildParams", +"name": "Build parameters", +"description": "Build parameteres names and values separated by a colon(e.g. \"param1:value1\") with each name-value pair appearing on its own line of text", +"inputMode": "textArea", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"pattern": "^((.+?)(\\s*):(.*)[\r\n\f]?)+$" +} +} +] +}, +{ +"id": "triggerGitBuild", +"consumerId": "jenkins", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/jenkins/actions/triggerGitBuild", +"name": "Trigger Git build", +"description": "Triggers a build configured to use a Git repository using the Jenkins Git Plugin.", +"supportedEventTypes": [ +"git.push" +], +"inputDescriptors": [] +} +] +}, +{ +"id": "hipChat", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/hipChat", +"name": "HipChat", +"description": "HipChat provides group instant messaging for companies and teams.", +"imageUrl": "http://www.hipchat.com/img/logo.png", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkId=392098", +"authenticationType": "external", +"inputDescriptors": [ +{ +"id": "authToken", +"name": "Authorization token", +"description": "Authorization token which allows to post messages to a room. It can be a room token which is just authorized to a given room, or a personal access token, which is authorized to all rooms that the token's owner is authorized.", +"inputMode": "textBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true +} +} +], +"actions": [ +{ +"id": "postMessageToRoom", +"consumerId": "hipChat", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/hipChat/actions/postMessageToRoom", +"name": "Post a message to a room", +"description": "Post a message about the event to a room in HipChat. Learn more.", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "roomName", +"name": "Room", +"description": "Room to post the message to.", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": true, +"validation": { +"dataType": "string", +"isRequired": true, +"minLength": 1, +"maxLength": 50 +}, +"dependencyInputIds": [ +"authToken" +], +"hasDynamicValueInformation": true +}, +{ +"id": "notifyRoom", +"name": "Notify room participants", +"description": "Whether or not this message should trigger a notification for people in the room (change the tab color, play a sound, etc). Each recipient's notification preferences are taken into account.", +"inputMode": "checkBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "boolean" +} +}, +{ +"id": "showDetails", +"name": "Send a detailed message", +"description": "Post a short or detailed messages about the event.", +"inputMode": "checkBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "boolean" +} +}, +{ +"id": "bgColor", +"name": "Message color", +"description": "Background color for message. Valid values: yellow, red, green, purple, gray, random (default: 'yellow')", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"possibleValues": [ +{ +"value": "gray", +"displayValue": "Gray" +}, +{ +"value": "green", +"displayValue": "Green" +}, +{ +"value": "purple", +"displayValue": "Purple" +}, +{ +"value": "random", +"displayValue": "Random" +}, +{ +"value": "red", +"displayValue": "Red" +}, +{ +"value": "yellow", +"displayValue": "Yellow" +} +], +"isLimitedToPossibleValues": true +} +} +] +} +] +}, +{ +"id": "flowdock", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/flowdock", +"name": "Flowdock", +"description": "Flowdock is Chat & inbox for teams.", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=393615", +"authenticationType": "external", +"inputDescriptors": [ +{ +"id": "flowAPIToken", +"name": "Flow API token", +"description": "The authorization token to post messages to a team inbox or a group chat. You can get the flow API Token from Flowdock (", +"inputMode": "textBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^[\\w0-9\\s]*$" +} +}, +{ +"id": "flowName", +"name": "Flow name", +"description": "Flow name as seen in Flowdock", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": true, +"validation": { +"dataType": "string", +"maxLength": 100 +} +}, +{ +"id": "showDetails", +"name": "Send a detailed message", +"description": "Post a short or detailed message about the event.", +"inputMode": "checkBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "boolean" +} +} +], +"actions": [ +{ +"id": "postMessageToChat", +"consumerId": "flowdock", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/flowdock/actions/postMessageToChat", +"name": "Post a message to a team chat", +"description": "Post a message about the event to a team chat in Flowdock. Learn more.", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "externalUserName", +"name": "Sender user name", +"description": "Name of the \"user\" sending the message.", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^[\\w0-9@\\.]*$", +"maxLength": 16 +} +}, +{ +"id": "tags", +"name": "Tags", +"description": "List of tags to be added to the message (comma separated). User tags should start with '@'. Hashtags can optionally be prefixed with \"#\". Tags are case insensitive.", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +} +} +] +}, +{ +"id": "postMessageToTeamInbox", +"consumerId": "flowdock", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/flowdock/actions/postMessageToTeamInbox", +"name": "Post a message to a team inbox", +"description": "Post a message about the event to a team inbox in Flowdock. Learn more.", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "subject", +"name": "Subject", +"description": "Subject line of the message (displayed as the title of the team inbox message)", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true +} +}, +{ +"id": "fromName", +"name": "From name", +"description": "Name of the message sender", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +} +}, +{ +"id": "fromAddress", +"name": "From address", +"description": "Email address of the message sender (used to show an avatar of the sender)", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"maxLength": 254 +} +}, +{ +"id": "replyTo", +"name": "Reply to", +"description": "Email address for replies (used when replying to the message within Flowdock)", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"maxLength": 254 +} +}, +{ +"id": "project", +"name": "Project", +"description": "Human readable identifier for more detailed message categorization", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"pattern": "^[\\w0-9\\s]*$" +} +}, +{ +"id": "tags", +"name": "Tags", +"description": "List of tags to be added to the message (comma separated). User tags should start with '@'. Hashtags can optionally be prefixed with \"#\". Tags are case insensitive.", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +} +} +] +} +] +}, +{ +"id": "campfire", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/campfire", +"name": "Campfire", +"description": "Campfire is like instant messaging, but designed exclusively for groups.", +"imageUrl": "https://campfirenow.com/images/logo_campfire-full.png", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=393613", +"authenticationType": "external", +"inputDescriptors": [ +{ +"id": "accountName", +"name": "Account name", +"description": "Account name like https://.campfirenow.com", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^([A-Za-z0-9][A-Za-z0-9\\-]{0,61}[A-Za-z0-9]|[A-Za-z0-9]{1,63})$", +"maxLength": 63 +} +}, +{ +"id": "authToken", +"name": "API authentication token", +"description": "API authentication token for the user that messages will be posted from. You can get this token visiting the user profile page at Campfire.", +"inputMode": "textBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true +} +} +], +"actions": [ +{ +"id": "postMessageToRoom", +"consumerId": "campfire", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/campfire/actions/postMessageToRoom", +"name": "Post a message to a room", +"description": "Post a message about the event to a room in Campfire. Learn more.", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "roomId", +"name": "Room", +"description": "Room to post the message to.", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "number", +"isRequired": true, +"minValue": 1 +}, +"dependencyInputIds": [ +"accountName", +"authToken" +], +"hasDynamicValueInformation": true +}, +{ +"id": "showDetails", +"name": "Send a detailed message", +"description": "Post a short or detailed messages about the event.", +"inputMode": "checkBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "boolean" +} +} +] +} +] +}, +{ +"id": "azureServiceBus", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/azureServiceBus", +"name": "Azure Service Bus", +"description": "Provides integration with Microsoft Azure Service Bus, including Notification Hubs.", +"imageUrl": "http://www.windowsazure.com/css/images/logo.png", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=392636", +"authenticationType": "external", +"inputDescriptors": [ +{ +"id": "connectionString", +"name": "SAS connection string", +"description": "The SAS (shared access signature) connection string to use to connect with Azure Service Bus. This connection string is available in the Azure Portal.", +"inputMode": "textBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"minLength": 1, +"maxLength": 500 +} +} +], +"actions": [ +{ +"id": "serviceBusNotificationHubSend", +"consumerId": "azureServiceBus", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/azureServiceBus/actions/serviceBusNotificationHubSend", +"name": "Send a message to a Notification Hub", +"description": "This action sends a generic, template notification to the specified Azure Notification Hub. Learn More", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "notificationHubName", +"name": "Notification Hub name", +"description": "The name of the notification hub to send the notification to. The name can contain only letters, numbers, periods, hyphens, forward slashes, and underscores. The name must start and end with a letter or number. The hub should already exist.", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^[A-Za-z0-9]$|^[A-Za-z0-9][\\w-\\.\\/]*[A-Za-z0-9]$", +"minLength": 1, +"maxLength": 50 +}, +"dependencyInputIds": [ +"connectionString" +], +"hasDynamicValueInformation": true +}, +{ +"id": "tagsExpression", +"name": "Tags", +"description": "The tags expression (for targeting specific sets of devices). Learn more", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +} +} +] +}, +{ +"id": "serviceBusQueueSend", +"consumerId": "azureServiceBus", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/azureServiceBus/actions/serviceBusQueueSend", +"name": "Send a message to a Service Bus Queue", +"description": "This action sends a JSON string representation of the event to the specified Azure Service Bus queue. Learn More", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "queueName", +"name": "Queue name", +"description": "The name of the queue to send the message to. The name can contain only letters, numbers, periods, hyphens, forward slashes, and underscores. The name must start and end with a letter or number. If the queue does not exists, it will be created if the specified connection string has the necessary permissions.", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^[A-Za-z0-9]$|^[A-Za-z0-9][\\w-\\.\\/]*[A-Za-z0-9]$", +"minLength": 1, +"maxLength": 50 +}, +"dependencyInputIds": [ +"connectionString" +], +"hasDynamicValueInformation": true +}, +{ +"id": "resourceDetailsToSend", +"name": "Resource details to send", +"description": "Control the resource fields to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "resourceDetailsToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "minimal", +"displayValue": "Minimal" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +}, +{ +"id": "messagesToSend", +"name": "Messages to send", +"description": "Control the messages to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "messagesToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "text", +"displayValue": "Text" +}, +{ +"value": "html", +"displayValue": "HTML" +}, +{ +"value": "markdown", +"displayValue": "Markdown" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +}, +{ +"id": "detailedMessagesToSend", +"name": "Detailed messages to send", +"description": "Control the detailed messages to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "detailedMessagesToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "text", +"displayValue": "Text" +}, +{ +"value": "html", +"displayValue": "HTML" +}, +{ +"value": "markdown", +"displayValue": "Markdown" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +} +] +}, +{ +"id": "serviceBusTopicSend", +"consumerId": "azureServiceBus", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/azureServiceBus/actions/serviceBusTopicSend", +"name": "Send a message to a Service Bus Topic", +"description": "This action sends a JSON string representation of the event to the specified Azure Service Bus topic. Learn More", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "topicName", +"name": "Topic name", +"description": "The name of the topic to send the message to. The name can contain only letters, numbers, periods, hyphens, forward slashes, and underscores. The name must start and end with a letter or number. If the topic does not exists, it will be created if the specified connection string has the necessary permissions.", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"pattern": "^[A-Za-z0-9]$|^[A-Za-z0-9][\\w-\\.\\/]*[A-Za-z0-9]$", +"minLength": 1, +"maxLength": 50 +}, +"dependencyInputIds": [ +"connectionString" +], +"hasDynamicValueInformation": true +}, +{ +"id": "resourceDetailsToSend", +"name": "Resource details to send", +"description": "Control the resource fields to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "resourceDetailsToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "minimal", +"displayValue": "Minimal" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +}, +{ +"id": "messagesToSend", +"name": "Messages to send", +"description": "Control the messages to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "messagesToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "text", +"displayValue": "Text" +}, +{ +"value": "html", +"displayValue": "HTML" +}, +{ +"value": "markdown", +"displayValue": "Markdown" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +}, +{ +"id": "detailedMessagesToSend", +"name": "Detailed messages to send", +"description": "Control the detailed messages to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "detailedMessagesToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "text", +"displayValue": "Text" +}, +{ +"value": "html", +"displayValue": "HTML" +}, +{ +"value": "markdown", +"displayValue": "Markdown" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +} +] +} +] +}, +{ +"id": "azureStorageQueue", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/azureStorageQueue", +"name": "Azure Storage", +"description": "Provides integration with Microsoft Azure Storage", +"imageUrl": "http://www.windowsazure.com/css/images/logo.png", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=390532", +"authenticationType": "external", +"inputDescriptors": [ +{ +"id": "accountName", +"name": "Storage account name", +"description": "The name associated with your Azure storage account (e.g. https://STORAGE_ACCOUNT_NAME.queue.core.windows.net).", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"minLength": 1, +"maxLength": 100 +} +}, +{ +"id": "accountKey", +"name": "Storage account key", +"description": "The key associated with your Azure storage account.", +"inputMode": "textBox", +"isConfidential": true, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"minLength": 64, +"maxLength": 100 +} +} +], +"actions": [ +{ +"id": "enqueue", +"consumerId": "azureStorageQueue", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/azureStorageQueue/actions/enqueue", +"name": "Insert a message in a Storage Queue", +"description": "This action inserts a JSON string representation of the event to the specified Azure storage queue. Learn More", +"supportedEventTypes": [ +"*" +], +"inputDescriptors": [ +{ +"id": "queueName", +"name": "Queue name", +"description": "The lowercase-only name of the queue to be used within Azure storage. A queue by this name will be created if it does not already exist.", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true, +"minLength": 1, +"maxLength": 100 +} +}, +{ +"id": "visiTimeout", +"name": "Message visibility timeout (in seconds)", +"description": "Specifies the visibility timeout value, in seconds, for the enqueued message, relative to server time. The value must be larger than or equal to 0, and cannot be larger than 7 days, or 604,800 seconds. The visibility timeout must be set to a value smaller than the message's time-to-live value.", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "number", +"isRequired": true, +"minValue": 0, +"maxValue": 604800 +}, +"values": { +"defaultValue": "0" +} +}, +{ +"id": "ttl", +"name": "Message time-to-live (in seconds)", +"description": "Specifies the time-to-live interval for the queue message, in seconds. The maximum time-to-live allowed is 7 days, or 604,800 seconds.", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "number", +"isRequired": true, +"minValue": 1, +"maxValue": 604800 +}, +"values": { +"defaultValue": "604800" +} +}, +{ +"id": "resourceDetailsToSend", +"name": "Resource details to send", +"description": "Control the resource fields to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "resourceDetailsToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "minimal", +"displayValue": "Minimal" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +}, +{ +"id": "messagesToSend", +"name": "Messages to send", +"description": "Control the messages to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "messagesToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "text", +"displayValue": "Text" +}, +{ +"value": "html", +"displayValue": "HTML" +}, +{ +"value": "markdown", +"displayValue": "Markdown" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +}, +{ +"id": "detailedMessagesToSend", +"name": "Detailed messages to send", +"description": "Control the detailed messages to send", +"inputMode": "combo", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string" +}, +"values": { +"inputId": "detailedMessagesToSend", +"defaultValue": "", +"possibleValues": [ +{ +"value": "", +"displayValue": "All" +}, +{ +"value": "text", +"displayValue": "Text" +}, +{ +"value": "html", +"displayValue": "HTML" +}, +{ +"value": "markdown", +"displayValue": "Markdown" +}, +{ +"value": "none", +"displayValue": "None" +} +], +"isLimitedToPossibleValues": true +} +} +] +} +] +}, +{ +"id": "appVeyor", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/appVeyor", +"name": "AppVeyor", +"description": "Continuous Integration service for Windows developers that securely builds and tests code in parallel and then deploys successful bits to on-premise or cloud environments", +"imageUrl": "", +"informationUrl": "http://go.microsoft.com/fwlink/?LinkID=396758", +"authenticationType": "external", +"inputDescriptors": [], +"actions": [ +{ +"id": "triggerBuild", +"consumerId": "appVeyor", +"url": "https://fabrikam.visualstudio.com/_apis/hooks/consumers/appVeyor/actions/triggerBuild", +"name": "Trigger a AppVeyor build", +"description": "Trigger a AppVeyor build Learn more", +"supportedEventTypes": [ +"git.push" +], +"inputDescriptors": [ +{ +"id": "webHookId", +"name": "Webhook ID", +"description": "The Webhook ID that uniquely identifies a project in AppVeyor database", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": false, +"validation": { +"dataType": "string", +"isRequired": true +} +}, +{ +"id": "projectName", +"name": "Project name", +"description": "Project name in AppVeyor", +"inputMode": "textBox", +"isConfidential": false, +"useInDefaultDescription": true, +"validation": { +"dataType": "string" +} +} +] +} +] +} +] +} \ No newline at end of file diff --git a/docs/service-hooks/_data/git.push.json b/docs/service-hooks/_data/git.push.json new file mode 100644 index 00000000000..598827c546e --- /dev/null +++ b/docs/service-hooks/_data/git.push.json @@ -0,0 +1,33 @@ +{ + "id": "8fda2152-0de0-4031-9127-98a472f586e0", + "eventType": "git.push", + "publisherId": "tfs", + "message": { + "text": "Will Smythe pushed 1 commit to Branch master in repository FabrikamApps", + "html": "Will Smythe pushed 1 commit to Branch master in repository FabrikamApps", + "markdown": "Will Smythe pushed 1 commit to [Branch master](https://willsmythe.vsoalm.tfsallin.net/DefaultCollection/My%20First%20Project/_git/FabrikamApps/#version=GBmaster) in repository [FabrikamApps](https://willsmythe.vsoalm.tfsallin.net/DefaultCollection/My First Project/_git/FabrikamApps/)" + }, + "detailedMessage": { + "text": "Will Smythe pushed 1 commit to Branch master in repository FabrikamApps\r\ncommit e3fb8501: Here is a demo commit 3", + "html": "

      Will Smythe pushed 1 commit to Branch master in repository FabrikamApps

      commit e3fb8501: Here is a demo commit 3

      ", + "markdown": "Will Smythe pushed 1 commit to [Branch master](https://willsmythe.vsoalm.tfsallin.net/DefaultCollection/My%20First%20Project/_git/FabrikamApps/#version=GBmaster) in repository [FabrikamApps](https://willsmythe.vsoalm.tfsallin.net/DefaultCollection/My First Project/_git/FabrikamApps/)\r\ncommit [e3fb8501](https://willsmythe.vsoalm.tfsallin.net/DefaultCollection/My%20First%20Project/_git/FabrikamApps/commit/e3fb8501634140be6feb57d622d400a20ff2c207): Here is a demo commit 3" + }, + "resource": { + "refUpdates": [ + { + "name": "refs/heads/master", + "oldObjectId": "12a5468b684fd20846583f3d6ff7545b5e45ba91", + "newObjectId": "e3fb8501634140be6feb57d622d400a20ff2c207" + } + ], + "pushedBy": { + "id": "0003BFFDB1093F98@Live.com", + "displayName": "Will Smythe", + "uniqueName": "Windows Live ID\\will.smythe@live.com" + }, + "pushId": 6, + "date": "2013-12-08T17:02:58.2884008Z", + "url": "https://willsmythe.vsoalm.tfsallin.net/DefaultCollection/_apis/git/repositories/pushes/6" + }, + "createdDate": "2013-12-08T17:03:03.825Z" +} \ No newline at end of file diff --git a/docs/service-hooks/_data/publishers.json b/docs/service-hooks/_data/publishers.json new file mode 100644 index 00000000000..eb56dd5c7b6 --- /dev/null +++ b/docs/service-hooks/_data/publishers.json @@ -0,0 +1,1278 @@ +{ + "count": 2, + "value": [{ + "id": "rm", + "url": "https://mseng.vsrm.visualstudio.com/_apis/hooks/publishers/rm", + "name": "Release Management", + "description": "Publishes Release Management events", + "supportedEvents": [{ + "publisherId": "rm", + "scope": "project", + "id": "ms.vss-release.deployment-approval-completed-event", + "url": "https://mseng.vsrm.visualstudio.com/_apis/hooks/publishers/rm/eventTypes/ms.vss-release.deployment-approval-completed-event", + "name": "Release deployment approval completed", + "description": "A deployment approval has been completed", + "supportedResourceVersions": [ + "3.0-preview.1" + ], + "inputDescriptors": [{ + "id": "releaseDefinitionId", + "name": "Release Definition Name", + "description": "Filter events to include only completed deployments for the specified definition", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "hasDynamicValueInformation": true + }, { + "id": "releaseEnvironmentId", + "name": "Environment Name", + "description": "Filter events to include only completed deployments for the specified environment", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "dependencyInputIds": [ + "releaseDefinitionId" + ], + "hasDynamicValueInformation": true + }, { + "id": "releaseApprovalType", + "name": "Approval Type", + "description": "Filter events to include only deployments requesting an approval of the specified type", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }, { + "value": "1", + "displayValue": "Pre-deployment" + }, { + "value": "2", + "displayValue": "Post-deployment" + }], + "isLimitedToPossibleValues": true + } + }, { + "id": "releaseApprovalStatus", + "name": "Approval Status", + "description": "Filter events to include only deployments with an approval of the specified status", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }, { + "value": "2", + "displayValue": "Approved" + }, { + "value": "4", + "displayValue": "Rejected" + }], + "isLimitedToPossibleValues": true + } + }] + }, { + "publisherId": "rm", + "scope": "project", + "id": "ms.vss-release.deployment-approval-pending-event", + "url": "https://mseng.vsrm.visualstudio.com/_apis/hooks/publishers/rm/eventTypes/ms.vss-release.deployment-approval-pending-event", + "name": "Release deployment approval pending", + "description": "A deployment approval has been requested", + "supportedResourceVersions": [ + "3.0-preview.1" + ], + "inputDescriptors": [{ + "id": "releaseDefinitionId", + "name": "Release Definition Name", + "description": "Filter events to include only completed deployments for the specified definition", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "hasDynamicValueInformation": true + }, { + "id": "releaseEnvironmentId", + "name": "Environment Name", + "description": "Filter events to include only completed deployments for the specified environment", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "dependencyInputIds": [ + "releaseDefinitionId" + ], + "hasDynamicValueInformation": true + }, { + "id": "releaseApprovalType", + "name": "Approval Type", + "description": "Filter events to include only deployments requesting an approval of the specified type", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }, { + "value": "1", + "displayValue": "Pre-deployment" + }, { + "value": "2", + "displayValue": "Post-deployment" + }], + "isLimitedToPossibleValues": true + } + }] + }, { + "publisherId": "rm", + "scope": "project", + "id": "ms.vss-release.deployment-completed-event", + "url": "https://mseng.vsrm.visualstudio.com/_apis/hooks/publishers/rm/eventTypes/ms.vss-release.deployment-completed-event", + "name": "Release deployment completed", + "description": "A deployment completed", + "supportedResourceVersions": [ + "3.0-preview.1" + ], + "inputDescriptors": [{ + "id": "releaseDefinitionId", + "name": "Release Definition Name", + "description": "Filter events to include only completed deployments for the specified definition", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "hasDynamicValueInformation": true + }, { + "id": "releaseEnvironmentId", + "name": "Environment Name", + "description": "Filter events to include only completed deployments for the specified environment", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "dependencyInputIds": [ + "releaseDefinitionId" + ], + "hasDynamicValueInformation": true + }, { + "id": "releaseEnvironmentStatus", + "name": "Status", + "description": "Filter events to include only completed deployments with the specified status", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }, { + "value": "8", + "displayValue": "Canceled" + }, { + "value": "16", + "displayValue": "Rejected" + }, { + "value": "4", + "displayValue": "Succeeded" + }, { + "value": "128", + "displayValue": "Partially Succeeded" + }], + "isLimitedToPossibleValues": true + } + }] + }, { + "publisherId": "rm", + "scope": "project", + "id": "ms.vss-release.deployment-started-event", + "url": "https://mseng.vsrm.visualstudio.com/_apis/hooks/publishers/rm/eventTypes/ms.vss-release.deployment-started-event", + "name": "Release deployment started", + "description": "A deployment was started", + "supportedResourceVersions": [ + "3.0-preview.1" + ], + "inputDescriptors": [{ + "id": "releaseDefinitionId", + "name": "Release Definition Name", + "description": "Filter events to include only completed deployments for the specified definition", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "hasDynamicValueInformation": true + }, { + "id": "releaseEnvironmentId", + "name": "Environment Name", + "description": "Filter events to include only completed deployments for the specified environment", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "dependencyInputIds": [ + "releaseDefinitionId" + ], + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "rm", + "scope": "project", + "id": "ms.vss-release.release-abandoned-event", + "url": "https://mseng.vsrm.visualstudio.com/_apis/hooks/publishers/rm/eventTypes/ms.vss-release.release-abandoned-event", + "name": "Release abandoned", + "description": "A release was abandoned", + "supportedResourceVersions": [ + "3.0-preview.1" + ], + "inputDescriptors": [{ + "id": "releaseDefinitionId", + "name": "Release Definition Name", + "description": "Filter events to include only completed deployments for the specified definition", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "rm", + "scope": "project", + "id": "ms.vss-release.release-created-event", + "url": "https://mseng.vsrm.visualstudio.com/_apis/hooks/publishers/rm/eventTypes/ms.vss-release.release-created-event", + "name": "Release created", + "description": "A release was created", + "supportedResourceVersions": [ + "3.0-preview.1" + ], + "inputDescriptors": [{ + "id": "releaseDefinitionId", + "name": "Release Definition Name", + "description": "Filter events to include only completed deployments for the specified definition", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "hasDynamicValueInformation": true + }] + }], + "inputDescriptors": [{ + "id": "projectId", + "name": "Project", + "description": "Team Project to restrict events to", + "type": null, + "inputMode": "none", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "guid" + } + }], + "_links": { + "self": { + "href": "https://mseng.vsrm.visualstudio.com/_apis/hooks/publishers/rm" + }, + "eventTypes": { + "href": "https://mseng.vsrm.visualstudio.com/_apis/hooks/publishers/rm/eventTypes" + } + } + }, { + "id": "tfs", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs", + "name": "Team Foundation Server", + "description": "Publishes Team Foundation Server service hooks events", + "supportedEvents": [{ + "publisherId": "tfs", + "scope": "project", + "id": "tfvc.checkin", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/tfvc.checkin", + "name": "Code checked in", + "description": "A changeset is checked into version control.", + "supportedResourceVersions": [ + "1.0", + "1.0-preview.1" + ], + "inputDescriptors": [{ + "id": "path", + "name": "Under path", + "description": "Filter to checkins that change one or more files under the specified path", + "type": null, + "inputMode": "textBox", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string", + "isRequired": true, + "pattern": "^\\$\\/[^&<>'\"]*$" + }, + "values": { + "defaultValue": "$/" + } + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "workitem.created", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/workitem.created", + "name": "Work item created", + "description": "Filter events to include only newly created work items.", + "supportedResourceVersions": [ + "1.0", + "1.0-preview.2" + ], + "inputDescriptors": [{ + "id": "areaPath", + "name": "Area path", + "description": "Filter events to include only work items under the specified area path.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }, { + "id": "workItemType", + "name": "Work item type", + "description": "Filter events to include only work items of the specified type.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "workitem.commented", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/workitem.commented", + "name": "Work item commented on", + "description": "Filter events to include only work items commented on.", + "supportedResourceVersions": [ + "1.0", + "1.0-preview.2" + ], + "inputDescriptors": [{ + "id": "areaPath", + "name": "Area path", + "description": "Filter events to include only work items under the specified area path.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }, { + "id": "workItemType", + "name": "Work item type", + "description": "Filter events to include only work items of the specified type.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }, { + "id": "commentPattern", + "name": "Contains string", + "description": "The string that must be found in the comment.", + "type": null, + "inputMode": "textBox", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string", + "pattern": "^\\s*[^\\s&<>'\"][^&<>'\"]*$", + "patternMismatchErrorMessage": "Value should contain at least one non whitespace character and cannot contain any of characters: &, <, >, ' (apostrophe), or \" (quote).", + "minLength": 1, + "maxLength": 1024 + }, + "values": { + "defaultValue": "", + "possibleValues": [] + } + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "workitem.updated", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/workitem.updated", + "name": "Work item updated", + "description": "Filter events to include only changed work items.", + "supportedResourceVersions": [ + "1.0", + "1.0-preview.2" + ], + "inputDescriptors": [{ + "id": "areaPath", + "name": "Area path", + "description": "Filter events to include only work items under the specified area path.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }, { + "id": "workItemType", + "name": "Work item type", + "description": "Filter events to include only work items of the specified type.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }, { + "id": "changedFields", + "name": "Field", + "description": "Filter events to include only work items with the specified field(s) changed.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "dependencyInputIds": [ + "workItemType" + ], + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "workitem.deleted", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/workitem.deleted", + "name": "Work item deleted", + "description": "Filter events to include only newly deleted work items.", + "supportedResourceVersions": [ + "1.0", + "1.0-preview.2" + ], + "inputDescriptors": [{ + "id": "areaPath", + "name": "Area path", + "description": "Filter events to include only work items under the specified area path.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }, { + "id": "workItemType", + "name": "Work item type", + "description": "Filter events to include only work items of the specified type.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "workitem.restored", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/workitem.restored", + "name": "Work item restored", + "description": "Filter events to include only newly restored work items.", + "supportedResourceVersions": [ + "1.0", + "1.0-preview.2" + ], + "inputDescriptors": [{ + "id": "areaPath", + "name": "Area path", + "description": "Filter events to include only work items under the specified area path.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }, { + "id": "workItemType", + "name": "Work item type", + "description": "Filter events to include only work items of the specified type.", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + }, + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "git.pullrequest.merged", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/git.pullrequest.merged", + "name": "Pull request merge commit created", + "description": "Pull request - Created merge commit", + "supportedResourceVersions": [ + "1.0-preview.1" + ], + "inputDescriptors": [{ + "id": "repository", + "name": "Repository", + "description": "The repository that code was pushed to", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "guid" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }, { + "id": "branch", + "name": "Target branch", + "description": "The target branch of the pull request", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "dependencyInputIds": [ + "repository" + ], + "hasDynamicValueInformation": true + }, { + "id": "pullrequestCreatedBy", + "name": "Requested by a member of group:", + "description": "A group which has the requester as a member", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }, { + "id": "pullrequestReviewersContains", + "name": "Reviewer includes group:", + "description": "A group included in the reviewers list", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "git.pullrequest.created", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/git.pullrequest.created", + "name": "Pull request created", + "description": "Pull request is created in a Git repository", + "supportedResourceVersions": [ + "1.0-preview.1" + ], + "inputDescriptors": [{ + "id": "repository", + "name": "Repository", + "description": "The repository that code was pushed to", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "guid" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }, { + "id": "branch", + "name": "Target branch", + "description": "The target branch of the pull request", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "dependencyInputIds": [ + "repository" + ], + "hasDynamicValueInformation": true + }, { + "id": "pullrequestCreatedBy", + "name": "Requested by a member of group:", + "description": "A group which has the requester as a member", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }, { + "id": "pullrequestReviewersContains", + "name": "Reviewer includes group:", + "description": "A group included in the reviewers list", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "git.pullrequest.updated", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/git.pullrequest.updated", + "name": "Pull request updated", + "description": "Pull request is updated status, review list, reviewer vote changed or the source branch is updated with a push", + "supportedResourceVersions": [ + "1.0-preview.1" + ], + "inputDescriptors": [{ + "id": "repository", + "name": "Repository", + "description": "The repository that code was pushed to", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "guid" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }, { + "id": "branch", + "name": "Target branch", + "description": "The target branch of the pull request", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "dependencyInputIds": [ + "repository" + ], + "hasDynamicValueInformation": true + }, { + "id": "notificationType", + "name": "Change", + "description": "The type of pull request change", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }, { + "value": "PushNotification", + "displayValue": "Source branch updated" + }, { + "value": "ReviewersUpdateNotification", + "displayValue": "Reviewers changed" + }, { + "value": "StatusUpdateNotification", + "displayValue": "Status changed" + }, { + "value": "ReviewerVoteNotification", + "displayValue": "Votes score changed" + }], + "isLimitedToPossibleValues": true, + "isReadOnly": true + } + }, { + "id": "pullrequestCreatedBy", + "name": "Requested by a member of group:", + "description": "A group which has the requester as a member", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }, { + "id": "pullrequestReviewersContains", + "name": "Reviewer includes group:", + "description": "A group included in the reviewers list", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "git.push", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/git.push", + "name": "Code pushed", + "description": "Code is pushed to a Git repository", + "supportedResourceVersions": [ + "1.0", + "1.0-preview.1" + ], + "inputDescriptors": [{ + "id": "repository", + "name": "Repository", + "description": "The repository that code was pushed to", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "guid" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }, { + "id": "branch", + "name": "Branch", + "description": "The branch that code was pushed into", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "dependencyInputIds": [ + "repository" + ], + "hasDynamicValueInformation": true + }, { + "id": "pushedBy", + "name": "Pushed by a member of group:", + "description": "A group which has the pusher as its member", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "build.complete", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/build.complete", + "name": "Build completed", + "description": "A build completes", + "supportedResourceVersions": [ + "1.0", + "2.0-preview.2", + "1.0-preview.1" + ], + "inputDescriptors": [{ + "id": "definitionName", + "name": "Build Definition", + "description": "Filter events to include only completed builds for the specified definition", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string" + }, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }], + "isLimitedToPossibleValues": true + }, + "hasDynamicValueInformation": true + }, { + "id": "buildStatus", + "name": "Build Status", + "description": "Filter events to include only completed builds for the specified completion status", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "values": { + "defaultValue": "", + "possibleValues": [{ + "value": "", + "displayValue": "[Any]" + }, { + "value": "Succeeded", + "displayValue": "Succeeded" + }, { + "value": "PartiallySucceeded", + "displayValue": "Partially Succeeded" + }, { + "value": "Failed", + "displayValue": "Failed" + }, { + "value": "Stopped", + "displayValue": "Stopped" + }], + "isLimitedToPossibleValues": true + } + }] + }, { + "publisherId": "tfs", + "scope": "project", + "id": "message.posted", + "url": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes/message.posted", + "name": "Team room message posted", + "description": "Triggers when a message is posted to a team room", + "supportedResourceVersions": [ + "1.0", + "1.0-preview.1" + ], + "inputDescriptors": [{ + "id": "roomId", + "name": "Team room", + "description": "Filter events to include only messages sent to the specified Team room", + "type": null, + "inputMode": "combo", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "number", + "isRequired": true + }, + "values": { + "defaultValue": "", + "possibleValues": [] + }, + "hasDynamicValueInformation": true + }, { + "id": "messagePattern", + "name": "Message contains string", + "description": "The string that must be found in the message", + "type": null, + "inputMode": "textBox", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "string", + "pattern": "^[^&<>'\"]*$", + "patternMismatchErrorMessage": "Value cannot contain any of characters: &, <, >, ' (apostrophe), or \\\" (quote).", + "maxLength": 1024 + }, + "values": { + "defaultValue": "", + "possibleValues": [] + } + }] + }], + "inputDescriptors": [{ + "id": "projectId", + "name": "Project", + "description": "Team Project to restrict events to", + "type": null, + "inputMode": "none", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "guid" + } + }, { + "id": "teamId", + "name": "Team", + "description": "Team that the subscription is associated with", + "type": null, + "inputMode": "none", + "isConfidential": false, + "useInDefaultDescription": false, + "groupName": null, + "valueHint": null, + "validation": { + "dataType": "guid" + } + }], + "_links": { + "self": { + "href": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs" + }, + "eventTypes": { + "href": "https://mseng.visualstudio.com/_apis/hooks/publishers/tfs/eventTypes" + } + } + }] +} \ No newline at end of file diff --git a/docs/service-hooks/_data/tfvc.checkin.json b/docs/service-hooks/_data/tfvc.checkin.json new file mode 100644 index 00000000000..feb27df7e5a --- /dev/null +++ b/docs/service-hooks/_data/tfvc.checkin.json @@ -0,0 +1,32 @@ +{ + "id": "85828cda-94fa-428f-99dd-53a4492d6b3b", + "eventType": "tfvc.checkin", + "publisherId": "tfs", + "message": { + "text": "Service Hooks Test 12/20/2013 6:47:31 AM", + "html": "Service Hooks Test 12/20/2013 6:47:31 AM (HTML)", + "markdown": "Service Hooks Test 12/20/2013 6:47:31 AM (**markdown**)" + }, + "detailedMessage": { + "text": "Service Hooks test for publisher \"Team Foundation Server\", event type \"tfvcCheckin\". Initiated: Friday, December 20, 2013 6:47:31 AM", + "html": "Service Hooks Test 12/20/2013 6:47:31 AM (HTML)", + "markdown": "Service Hooks Test 12/20/2013 6:47:31 AM (**markdown**)" + }, + "resource": { + "changesetId": 12345, + "url": "http://me.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/12345", + "author": { + "id": "00000000-0000-0000-0000-000000000000", + "displayName": "Firstname Surname", + "uniqueName": "DOMAIN\\username" + }, + "checkedInBy": { + "id": "00000000-0000-0000-0000-000000000000", + "displayName": "Firstname Surname", + "uniqueName": "DOMAIN\\username" + }, + "createdDate": "2013-12-20T06:47:31.9011658Z", + "comment": "comment" + }, + "createdDate": "2013-12-20T06:47:30.542Z" +} \ No newline at end of file diff --git a/docs/service-hooks/_img/Authorizations.png b/docs/service-hooks/_img/Authorizations.png new file mode 100644 index 00000000000..e1547a07908 Binary files /dev/null and b/docs/service-hooks/_img/Authorizations.png differ diff --git a/docs/service-hooks/_img/Profile-manage-applications.png b/docs/service-hooks/_img/Profile-manage-applications.png new file mode 100644 index 00000000000..18432786a9f Binary files /dev/null and b/docs/service-hooks/_img/Profile-manage-applications.png differ diff --git a/docs/service-hooks/_img/Trello_wizard_Action.png b/docs/service-hooks/_img/Trello_wizard_Action.png new file mode 100644 index 00000000000..6206592c1dd Binary files /dev/null and b/docs/service-hooks/_img/Trello_wizard_Action.png differ diff --git a/docs/service-hooks/_img/Trello_wizard_Event.png b/docs/service-hooks/_img/Trello_wizard_Event.png new file mode 100644 index 00000000000..4b3d19a7588 Binary files /dev/null and b/docs/service-hooks/_img/Trello_wizard_Event.png differ diff --git a/docs/service-hooks/_img/authorize/authorizations.png b/docs/service-hooks/_img/authorize/authorizations.png new file mode 100644 index 00000000000..96a5e8d0a7d Binary files /dev/null and b/docs/service-hooks/_img/authorize/authorizations.png differ diff --git a/docs/service-hooks/_img/authorize/vso-authorize.png b/docs/service-hooks/_img/authorize/vso-authorize.png new file mode 100644 index 00000000000..49be971e204 Binary files /dev/null and b/docs/service-hooks/_img/authorize/vso-authorize.png differ diff --git a/docs/service-hooks/_img/authorize/vso-sign-in b/docs/service-hooks/_img/authorize/vso-sign-in new file mode 100644 index 00000000000..00d5091eced Binary files /dev/null and b/docs/service-hooks/_img/authorize/vso-sign-in differ diff --git a/docs/service-hooks/_img/authorize/vso-sign-in.png b/docs/service-hooks/_img/authorize/vso-sign-in.png new file mode 100644 index 00000000000..00d5091eced Binary files /dev/null and b/docs/service-hooks/_img/authorize/vso-sign-in.png differ diff --git a/docs/service-hooks/_img/createfirst.png b/docs/service-hooks/_img/createfirst.png new file mode 100644 index 00000000000..e5792d8b8dc Binary files /dev/null and b/docs/service-hooks/_img/createfirst.png differ diff --git a/docs/service-hooks/_img/openadmin.png b/docs/service-hooks/_img/openadmin.png new file mode 100644 index 00000000000..10abe8c0204 Binary files /dev/null and b/docs/service-hooks/_img/openadmin.png differ diff --git a/docs/service-hooks/_img/selectservice.png b/docs/service-hooks/_img/selectservice.png new file mode 100644 index 00000000000..bb6a0acfddf Binary files /dev/null and b/docs/service-hooks/_img/selectservice.png differ diff --git a/docs/service-hooks/_img/test1.png b/docs/service-hooks/_img/test1.png new file mode 100644 index 00000000000..9c39110385c Binary files /dev/null and b/docs/service-hooks/_img/test1.png differ diff --git a/docs/service-hooks/_img/test2.png b/docs/service-hooks/_img/test2.png new file mode 100644 index 00000000000..fa450f3b941 Binary files /dev/null and b/docs/service-hooks/_img/test2.png differ diff --git a/docs/service-hooks/_img/troubleshoot/detailed-activity.png b/docs/service-hooks/_img/troubleshoot/detailed-activity.png new file mode 100644 index 00000000000..a21c1abdad8 Binary files /dev/null and b/docs/service-hooks/_img/troubleshoot/detailed-activity.png differ diff --git a/docs/service-hooks/_img/troubleshoot/service-hooks.png b/docs/service-hooks/_img/troubleshoot/service-hooks.png new file mode 100644 index 00000000000..819d3b05d60 Binary files /dev/null and b/docs/service-hooks/_img/troubleshoot/service-hooks.png differ diff --git a/docs/service-hooks/authorize.md b/docs/service-hooks/authorize.md new file mode 100644 index 00000000000..f399d55eb2b --- /dev/null +++ b/docs/service-hooks/authorize.md @@ -0,0 +1,70 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Authorize Other Services | Visual Studio Team Services +description: Authorize other services to work with Visual Studio Team Services +ms.assetid: 314a28cd-b2ae-41a0-8dfb-330222c1aed0 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Authorize other services to access your VSTS account + +When you use a service that's integrated with Visual Studio Team Services, +we use the industry-standard OAuth 2.0 authorization framework to provide safe, +secure access to your resources by those other services. +With OAuth, you grant a service the authorization to access your Visual Studio Team Services +resources such as work items, source code, build results. + +- Authorizations are bound to your credentials, +so the service can use the authorization to access resources +in any VSTS account that you have access to. + +- Use your Microsoft account (like ```me@live.com```) or your work account +(your account in Azure AD - like ```me@my-workplace.com```) to authorize the service. + +- The service that you authorize never has access to your VSTS credentials. + +- Revoke any authorizations that you've granted to other services. + +## Authorize a service + +A typical authorization flow might go like this: + +1. You're using a service that uses VSTS resources, +so the service requests authorization from Visual Studio Team Services. + +2. If you're not already signed in, VSTS will prompt you for your credentials. + + VSTS sign in page + +3. After you've signed in, you get the VSTS authorization approval page. + + VSTS authorization page + + At this point in time, services can only request full access to all of the resources that are available to you through the REST APIs, so don't be surprised that the authorization request is not more specific. + +4. You review the request and approve the authorization. + +5. The authorized service uses that authorization to access resources in your Visual Studio account. + +To ensure an authorization request is legitimate: + +- Look for the VSTS branding across the top of the authorization approval page. + +- Ensure the authorization approval page URL begins with ```https://app.vssps.visualstudio.com```. + +- Pay attention to any HTTPS-related security warnings in your browser. + +- Remember that other services do not ask for your credentials directly. They let you provide them to VSTS through the VSTS authorization approval page. + +## Manage authorizations + +To see the services that you've authorized to access your account, +go to [https://app.vssps.visualstudio.com/Profile/View](https://app.vssps.visualstudio.com/Profile/View) +and follow the **Manage applications** link. + +List of authorized services + +You can revoke any authorizations here and the service will no longer be able to access your account on your behalf. \ No newline at end of file diff --git a/docs/service-hooks/consumers.md b/docs/service-hooks/consumers.md new file mode 100644 index 00000000000..215c470087a --- /dev/null +++ b/docs/service-hooks/consumers.md @@ -0,0 +1,559 @@ +--- +title: Service hooks consumers for Visual Studio Team Services +description: Service hooks consumer documentation for Visual Studio Team Services +toc: Hide +ms.assetid: CDACB8A1-4BAB-499F-B9ED-BD1680743B26 +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Service hook consumers + +Use service hook consumers to [programmatically create a subscription](./create-subscription.md). The subscription specifies the event, the consumer and the action. +Select the consumer that you want to use in your subscription from the following consumers: + +- [Azure Service Bus](#azureservicebus) +- [Azure Storage](#azurestorage) +- [Campfire](#campfire) +- [Flowdock](#flowdock) +- [HipChat](#hipchat) +- [Jenkins](#jenkins) +- [Kato](#kato) +- [Trello](#trello) +- [Web Hooks](#webhooks) +- [Zendesk](#zendesk) + + +## Azure Service Bus +Provides integration with Microsoft Azure Service Bus, including Notification Hubs. + +### Send a message to a Notification Hub +This action sends a generic, template notification to the specified Azure Notification Hub. [Learn more](http://go.microsoft.com/fwlink/?LinkID=392636). + +* Consumer ID: **azureServiceBus** +* Action ID: **serviceBusNotificationHubSend** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **connectionString** + * SAS connection string + * The SAS (shared access signature) connection string to use to connect with Azure Service Bus. This connection string is available in the Azure Portal. + * Data type: **string** + * Required: **Yes** + * **notificationHubName** + * Notification Hub name + * The name of the notification hub to send the notification to. The name can contain only letters, numbers, periods, hyphens, forward slashes, and underscores. The name must start and end with a letter or number. The hub should already exist. + * Data type: **string** + * Required: **Yes** + * **tagsExpression** + * Tags + * The tags expression (for targeting specific sets of devices). [Learn more](http://msdn.microsoft.com/en-us/library/windowsazure/dn530749.aspx). + * Data type: **string** + * Required: **No** + +### Send a message to a Service Bus Queue +This action sends a JSON string representation of the event to the specified Azure Service Bus queue. [Learn more](http://go.microsoft.com/fwlink/?LinkID=392636). + +* Consumer ID: **azureServiceBus** +* Action ID: **serviceBusQueueSend** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **connectionString** + * SAS connection string + * The SAS (shared access signature) connection string to use to connect with Azure Service Bus. This connection string is available in the Azure Portal. + * Data type: **string** + * Required: **Yes** + * **queueName** + * Queue name + * The name of the queue to send the message to. The name can contain only letters, numbers, periods, hyphens, forward slashes, and underscores. The name must start and end with a letter or number. If the queue does not exists, it will be created if the specified connection string has the necessary permissions. + * Data type: **string** + * Required: **Yes** + * **resourceDetailsToSend** + * Resource details to send + * Control the resource fields to send + * Data type: **string** + * Required: **No** + * **messagesToSend** + * Messages to send + * Control the messages to send + * Data type: **string** + * Required: **No** + * **detailedMessagesToSend** + * Detailed messages to send + * Control the detailed messages to send + * Data type: **string** + * Required: **No** + +### Send a message to a Service Bus Topic +This action sends a JSON string representation of the event to the specified Azure Service Bus topic. [Learn more](http://go.microsoft.com/fwlink/?LinkID=392636). + +* Consumer ID: **azureServiceBus** +* Action ID: **serviceBusTopicSend** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **connectionString** + * SAS connection string + * The SAS (shared access signature) connection string to use to connect with Azure Service Bus. This connection string is available in the Azure Portal. + * Data type: **string** + * Required: **Yes** + * **topicName** + * Topic name + * The name of the topic to send the message to. The name can contain only letters, numbers, periods, hyphens, forward slashes, and underscores. The name must start and end with a letter or number. If the topic does not exists, it will be created if the specified connection string has the necessary permissions. + * Data type: **string** + * Required: **Yes** + * **resourceDetailsToSend** + * Resource details to send + * Control the resource fields to send + * Data type: **string** + * Required: **No** + * **messagesToSend** + * Messages to send + * Control the messages to send + * Data type: **string** + * Required: **No** + * **detailedMessagesToSend** + * Detailed messages to send + * Control the detailed messages to send + * Data type: **string** + * Required: **No** + + +## Azure Storage +Provides integration with Microsoft Azure Storage. + +### Insert a message in a Storage Queue +This action inserts a JSON string representation of the event to the specified Azure storage queue. [Learn more](http://go.microsoft.com/fwlink/?LinkID=390532). + +* Consumer ID: **azureStorageQueue** +* Action ID: **enqueue** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **accountName** + * Storage account name + * The name associated with your Azure storage account (e.g. ```https://STORAGE_ACCOUNT_NAME.queue.core.windows.net```). + * Data type: **string** + * Required: **Yes** + * **accountKey** + * Storage account key + * The key associated with your Azure storage account. + * Data type: **string** + * Required: **Yes** + * **queueName** + * Queue name + * The lowercase-only name of the queue to be used within Azure storage. A queue by this name will be created if it does not already exist. + * Data type: **string** + * Required: **Yes** + * **visiTimeout** + * Message visibility timeout (in seconds) + * Specifies the visibility timeout value, in seconds, for the enqueued message, relative to server time. The value must be larger than or equal to 0, and cannot be larger than 7 days, or 604,800 seconds. The visibility timeout must be set to a value smaller than the message's time-to-live value. + * Data type: **number** + * Required: **Yes** + * **ttl** + * Message time-to-live (in seconds) + * Specifies the time-to-live interval for the queue message, in seconds. The maximum time-to-live allowed is 7 days, or 604,800 seconds. + * Data type: **number** + * Required: **Yes** + * **resourceDetailsToSend** + * Resource details to send + * Control the resource fields to send + * Data type: **string** + * Required: **No** + * **messagesToSend** + * Messages to send + * Control the messages to send + * Data type: **string** + * Required: **No** + * **detailedMessagesToSend** + * Detailed messages to send + * Control the detailed messages to send + * Data type: **string** + * Required: **No** + + +## Campfire +Campfire is like instant messaging, but designed exclusively for groups. + +### Post a message to a room +Post a message about the event to a room in Campfire. [Learn more](http://go.microsoft.com/fwlink/?LinkID=393613). + +* Consumer ID: **campfire** +* Action ID: **postMessageToRoom** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **accountName** + * Account name + * Account name like ```https://{account name}.campfirenow.com``` + * Data type: **string** + * Required: **Yes** + * **authToken** + * API authentication token + * API authentication token for the user that messages will be posted from. You can get this token visiting the user profile page at Campfire. + * Data type: **string** + * Required: **Yes** + * **roomId** + * Room + * Room to post the message to. + * Data type: **number** + * Required: **Yes** + * **showDetails** + * Send a detailed message + * Post a short or detailed messages about the event. + * Data type: **boolean** + * Required: **No** + + +## Flowdock +Flowdock is chat and inbox for teams. + +### Post a message to a team chat +Post a message about the event to a team chat in Flowdock. [Learn more](http://go.microsoft.com/fwlink/?LinkId=392098). + +* Consumer ID: **flowdock** +* Action ID: **postMessageToChat** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **flowAPIToken** + * Flow API token + * The authorization token to post messages to a team inbox or a group chat. You can get the flow API Token from Flowdock ([account settings](https://www.flowdock.com/account/tokens)). + * Data type: **string** + * Required: **Yes** + * **flowName** + * Flow name + * Flow name as seen in Flowdock + * Data type: **string** + * Required: **No** + * **showDetails** + * Send a detailed message + * Post a short or detailed message about the event. + * Data type: **boolean** + * Required: **No** + * **externalUserName** + * Sender user name + * Name of the "user" sending the message. + * Data type: **string** + * Required: **Yes** + * **tags** + * Tags + * List of tags to be added to the message (comma separated). User tags should start with '@'. Hashtags can optionally be prefixed with "#". Tags are case insensitive. + * Data type: **string** + * Required: **No** + +### Post a message to a team inbox +Post a message about the event to a team inbox in Flowdock. [Learn more](http://go.microsoft.com/fwlink/?LinkId=392098). + +* Consumer ID: **flowdock** +* Action ID: **postMessageToTeamInbox** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **flowAPIToken** + * Flow API token + * The authorization token to post messages to a team inbox or a group chat. You can get the flow API Token from Flowdock ([account settings](https://www.flowdock.com/account/tokens)). + * Data type: **string** + * Required: **Yes** + * **flowName** + * Flow name + * Flow name as seen in Flowdock + * Data type: **string** + * Required: **No** + * **showDetails** + * Send a detailed message + * Post a short or detailed message about the event. + * Data type: **boolean** + * Required: **No** + * **subject** + * Subject + * Subject line of the message (displayed as the title of the team inbox message) + * Data type: **string** + * Required: **Yes** + * **fromName** + * From name + * Name of the message sender + * Data type: **string** + * Required: **No** + * **fromAddress** + * From address + * Email address of the message sender (used to show an avatar of the sender) + * Data type: **string** + * Required: **Yes** + * **replyTo** + * Reply to + * Email address for replies (used when replying to the message within Flowdock) + * Data type: **string** + * Required: **No** + * **project** + * Project + * Human readable identifier for more detailed message categorization + * Data type: **string** + * Required: **No** + * **tags** + * Tags + * List of tags to be added to the message (comma separated). User tags should start with '@'. Hashtags can optionally be prefixed with "#". Tags are case insensitive. + * Data type: **string** + * Required: **No** + + +## HipChat +HipChat provides group instant messaging for companies and teams. + +### Post a message to a room +Post a message about the event to a room in HipChat. [Learn more](http://go.microsoft.com/fwlink/?LinkId=392098). + +* Consumer ID: **hipChat** +* Action ID: **postMessageToRoom** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **authToken** + * Authorization token + * Authorization token which allows to post messages to a room. It can be a room token which is just authorized to a given room, or a personal access token, which is authorized to all rooms that the token's owner is authorized. + * Data type: **string** + * Required: **Yes** + * **roomName** + * Room + * Room to post the message to. + * Data type: **string** + * Required: **Yes** + * **notifyRoom** + * Notify room participants + * Whether or not this message should trigger a notification for people in the room (change the tab color, play a sound, etc). Each recipient's notification preferences are taken into account. + * Data type: **boolean** + * Required: **No** + * **showDetails** + * Send a detailed message + * Post a short or detailed messages about the event. + * Data type: **boolean** + * Required: **No** + * **bgColor** + * Message color + * Background color for message. Valid values: yellow, red, green, purple, gray, random (default: 'yellow') + * Data type: **string** + * Required: **No** + + +## Jenkins +Jenkins is a continuous integration server which allows building and testing software projects continuously. + +### Trigger Git build +Triggers a build configured to use a Git repository using the [Jenkins Git Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin). + +* Consumer ID: **jenkins** +* Action ID: **triggerGitBuild** +* Supported events: **git.push** +* Settings: + * **serverBaseUrl** + * Jenkins base URL + * The base URL that hosts the Jenkins server + * Data type: **uri** + * Required: **Yes** + * **username** + * User name + * The Jenkins user name of a user who is allowed to trigger the build + * Data type: **string** + * Required: **Yes** + * **password** + * User API token (or password) + * The user's API token, which is available in the Jenkin user configuration page. The API token is new since version 1.426. For earlier versions of Jenkins the real user password must be specified. + * Data type: **string** + * Required: **Yes** + +### Trigger generic build +Triggers a generic Jenkins build, invoking the Jenkins build URL. + +* Consumer ID: **jenkins** +* Action ID: **triggerGenericBuild** +* Supported events: **git.push, build.complete, tfvc.checkin** +* Settings: + * **serverBaseUrl** + * Jenkins base URL + * The base URL that hosts the Jenkins server + * Data type: **uri** + * Required: **Yes** + * **username** + * User name + * The Jenkins user name of a user who is allowed to trigger the build + * Data type: **string** + * Required: **Yes** + * **password** + * User API token (or password) + * The user's API token, which is available in the Jenkin user configuration page. The API token is new since version 1.426. For earlier versions of Jenkins the real user password must be specified. + * Data type: **string** + * Required: **Yes** + * **buildName** + * Build + * The build name to trigger + * Data type: **string** + * Required: **Yes** + * **buildAuthToken** + * Build token + * The authorization token in the form of a string so that only those who know it would be able to remotely trigger this project's builds + * Data type: **string** + * Required: **No** + * **buildParameterized** + * Accepts parameters + * Indicates if the build is parameterized or not (build parameters are optionally specified above) + * Data type: **boolean** + * Required: **No** + * **buildParams** + * Build parameters + * Build parameteres names and values separated by a colon(e.g. "param1:value1") with each name-value pair appearing on its own line of text + * Data type: **string** + * Required: **No** + + +## Kato +Kato provides a messaging service for modern organizations. + +### Post event to room +Posts an event to a Kato room + +* Consumer ID: **kato** +* Action ID: **postEventToRoom** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **roomToken** + * Room token + * The token for interacting with a room using the Kato API + * Data type: **string** + * Required: **Yes** + * **roomName** + * Room name + * Room name as seen in Kato + * Data type: **string** + * Required: **No** + + +## Trello +Provides integration with Trello. + +### Create a card +This action creates a card on an existing list in Trello. A card can represent a task, issue, event, or just about anything. A card's state is typically determined by what list it is on. [Learn more](http://go.microsoft.com/fwlink/?LinkID=390530). + +* Consumer ID: **trello** +* Action ID: **createCard** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **userToken** + * User token (need one? [Get it now](http://go.microsoft.com/fwlink/?LinkID=390580).) + * Your user token provided by Trello. Click the link in the action description above to learn how to obtain this token. + * Data type: **string** + * Required: **Yes** + * **boardId** + * Board + * The name of the board on which the Trello card will be created. + * Data type: **string** + * Required: **Yes** + * **listId** + * List + * The name of the list on which the Trello card will be created. + * Data type: **string** + * Required: **Yes** + * **labels** + * Labels + * A comma-separated list of label colors to apply to the created card. Valid label color names are red, orange, yellow, green, blue, and purple. + * Data type: **string** + * Required: **No** + * **addToTop** + * Create at top of list + * Indicates if the card should be created at the top of the Trello list, instead of the bottom. + * Data type: **boolean** + * Required: **No** + +### Create a list +This action creates a list on an existing board in Trello. A list is used to organize cards on a board and typically represents a state. [Learn more](http://go.microsoft.com/fwlink/?LinkID=390530). + +* Consumer ID: **trello** +* Action ID: **createList** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **userToken** + * User token (need one? [Get it now](http://go.microsoft.com/fwlink/?LinkID=390580).) + * Your user token provided by Trello. Click the link in the action description above to learn how to obtain this token. + * Data type: **string** + * Required: **Yes** + * **boardId** + * Board + * The name of the board on which the Trello list will be created. + * Data type: **string** + * Required: **Yes** + * **addToBottom** + * Create at bottom of board + * Indicates if the list should be created at the bottom of the board, instead of the top. + * Data type: **boolean** + * Required: **No** + + +## Web Hooks +Provides event communication via HTTP. + +### Post via HTTP +This action posts a JSON object representation of the event to the specified URL. HTTPS endpoints are recommended due to the potential for private data in the event payload. [Learn more](http://go.microsoft.com/fwlink/?LinkID=390531). + +* Consumer ID: **webHooks** +* Action ID: **httpRequest** +* Supported events: **build.complete, git.push, tfvc.checkin, workitem.created, workitem.commented, workitem.updated** +* Settings: + * **url** + * URL + * The URL to which an HTTP POST will be sent. + * Data type: **uri** + * Required: **Yes** + * **httpHeaders** + * HTTP headers + * HTTP header keys and values separated by a colon(e.g. "Key1:value1") with each key-value-pair appearing on its own line of text. + * Data type: **string** + * Required: **No** + * **basicAuthUsername** + * Basic authentication username + * Enter a username for standard HTTP authentication. Basic HTTP authentication sends credentials in plain text (unencrypted) which means you should use a URL beginning with "https" to enable encryption of these credentials via secure transport layer (SSL). + * Data type: **string** + * Required: **No** + * **basicAuthPassword** + * Basic authentication password + * Enter a password for standard HTTP authentication. Basic HTTP authentication sends credentials in plain text (unencrypted) which means you should use a URL beginning with "https" to enable encryption of these credentials via secure transport layer (SSL). + * Data type: **string** + * Required: **No** + * **resourceDetailsToSend** + * Resource details to send + * Control the resource fields to send + * Data type: **string** + * Required: **No** + * **messagesToSend** + * Messages to send + * Control the messages to send + * Data type: **string** + * Required: **No** + * **detailedMessagesToSend** + * Detailed messages to send + * Control the detailed messages to send + * Data type: **string** + * Required: **No** + + +## Zendesk +Zendesk is a SaaS suite that offers help desk ticketing, issue tracking, and customer service support. + +### Create a private comment in a ticket +Create a private comment in a ticket + +* Consumer ID: **zendesk** +* Action ID: **createPrivateComment** +* Supported events: **workitem.commented** +* Settings: + * **accountName** + * Account name + * Zendesk account name like ```https://{account name}.zendesk.com``` + * Data type: **string** + * Required: **Yes** + * **username** + * User name + * The Zendesk user name of a user who will update tickets + * Data type: **string** + * Required: **Yes** + * **apiToken** + * API token + * The Zendesk API token (can be found in Zendesk app in Admin > Channels > API) + * Data type: **string** + * Required: **Yes** + + diff --git a/docs/service-hooks/create-subscription.md b/docs/service-hooks/create-subscription.md new file mode 100644 index 00000000000..a04d0981b46 --- /dev/null +++ b/docs/service-hooks/create-subscription.md @@ -0,0 +1,221 @@ +--- +title: Subscribe to VSTS events from another service | VSTS REST APIs +description: Use service hooks to set up actions to take when specific events occur in Visual Studio Team Services. +toc: Hide +ms.assetid: 0614F217-4F4E-45DC-A50C-B9FF81F8A5BD +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Create a service hooks subscription programmatically + +Using the [Subscriptions](https://www.visualstudio.com/en-us/docs/integrate/api/hooks/subscriptions) REST APIs, you can programmatically create a subscription that performs an action on an external (consumer) service when a specific event occurs in a team project. For example, you can create a subscription to notify your service when a build fails. + +Supported events: + +- build completed +- code pushed (for Git team projects) +- pull request create or updated (for Git team projects) +- code checked in (TFVC team projects) +- work item created, updated, deleted, restored or commented on +- message posted to a team room + +You can configure filters on your subscriptions to control which events trigger an action. For example, you can filter the build completed event based on the build status. For a complete set of supported events and filter options, see the [event reference](./events.md). + +For a complete set of supported consumer services and actions, see the [consumer reference](./consumers.md). + + +## Create a subscription for a team project + +To create a subscription for an event, choose which consumer to use and the action you want to take. You will create an HTTP POST +request to the subscriptions URL for the VSTS account with the event, consumer and action to +take for the subscription. + +### Before you begin + +To create a subscription, the following data will be required: + +- team project ID (use the [Team Project REST API](https://www.visualstudio.com/en-us/docs/integrate/api/tfs/overview) to get the project ID) +- event ID and settings (see the [event reference](./events.md)) +- consumer and action IDs and settings (see the [consumer reference](./consumers.md)) + +### Create the request + +Construct the body of the HTTP POST request to create the subscription based on the team project id, event, consumer and action. + +Here is an example request for creating a subscription that will cause a build event to be POSTed to `https://myservice/event` when the build `WebSite.CI` fails. + +```js +{ + "publisherId": "tfs", + "eventType": "build.complete", + "resourceVersion": "1.0", + "consumerId": "webHooks", + "consumerActionId": "httpRequest", + "publisherInputs": { + "buildStatus": "failed", + "definitionName": "WebSite.CI", + "projectId": "56479caf-1eeb-4bca-86ab-aaa6f29399d9", + }, + "consumerInputs": { + "url": " https://myservice/event" + }, +} + +``` +Secure HTTPS URLs are highly recommended for the security of the private data in the JSON object. + +Here is the response to the request to create the subscription: +```js +{ + "id": "74aeeed0-bf5d-48dc-893f-f862b80987e9", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/hooks/subscriptions/74aeeed0-bf5d-48dc-893f-f862b80987e9", + "publisherId": "tfs", + "eventType": "build.complete", + "resourceVersion": "1.0", + "consumerId": "webHooks", + "consumerActionId": "httpRequest", + "createdBy": { + "id": "00ca946b-2fe9-4f2a-ae2f-40d5c48001bc" + }, + "createdDate": "2014-03-28T16:10:06.523Z", + "modifiedBy": { + "id": "1c4978ae-7cc9-4efa-8649-5547304a8438" + }, + "modifiedDate": "2014-04-25T18:15:26.053Z", + "publisherInputs": { + "buildStatus": "failed", + "definitionName": "WebSite.CI", + "hostId": "17f27955-99bb-4861-9550-f2c669d64fc9", + "projectId": "56479caf-1eeb-4bca-86ab-aaa6f29399d9", + "tfsSubscriptionId": "29cde8b4-f37e-4ef9-a6d4-d57d526d82cc" + }, + "consumerInputs": { + "url": "http://myservice/event" + } +} + +``` + +If the subscription request fails, an HTTP response code of 400 will be returned with a message that has further details. + +### What happens when the event occurs? + +When an event occurs, all enabled subscription in the project are evaluated, and the consumer action is performed for all matching subscriptions. + +### Resource versions (advanced) + +Resource versioning is applicable when an API is in preview. For most scenarios, specifying `1.0` as the resource version is the safest route. + +The event payload sent to certain consumers (like Web hooks, Azure Service Bus, Azure Storage) includes a JSON representation of subject resource (for example, a build or work item). The representation of this resource can have different forms (or versions). +You can specify the version of the resource that you want to have sent to the consumer service via the `resourceVersion` field on the subscription. +The resource version is the same as the [API version](../integrate/concepts/rest-api-versioning.md). Not specifying a resource version means "latest released". You should always specify a resource version - this ensures a consistent event payload over time. + + +## Q&A + + + +#### Q: Are there services that I can subscribe to manually? + +A: Yes. [Here](./index.md) are the services that you can subscribe to from the administration page for a team project. + +#### Q: Are there C# libraries that I can use to create subscriptions? + +A: No, but here's a sample to help you get started. + +```cs +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Web.Mvc; + +namespace Microsoft.Samples.VisualStudioOnline +{ + public class ServiceHookEventController : Controller + { + + // POST: /ServiceHookEvent/workitemcreated + [HttpPost] + public HttpResponseMessage WorkItemCreated(Content workItemEvent) + { + //Grabbing the title for the new workitem + var value = RetrieveFieldValue("System.field", workItemEvent.Resource.Fields); + + //Acknowledge event receipt + return new HttpResponseMessage(HttpStatusCode.OK); + } + + /// + /// Gets the value for a specified work item field. + /// + /// Key used to retrieve matching value + /// List of fields for a work item + /// + public String RetrieveFieldValue(String key, IList fields) + { + if (String.IsNullOrEmpty(key)) + return String.Empty; + + var result = fields.Single(s => s.Field.RefName == key); + + if (result == null) + return String.Empty; + + return result.Value; + } + + } + + public class Content + { + public String SubscriptionId { get; set; } + + public int NotificationId { get; set; } + + public String EventType { get; set; } + + public WorkItemResource Resource { get; set; } + + } + + public class WorkItemResource + { + public String UpdatesUrl { get; set; } + + public IList Fields { get; set;} + + public int Id { get; set; } + + public int Rev { get; set; } + + public String Url { get; set; } + + public String WebUrl { get; set; } + } + + public class FieldInfo + { + public FieldDetailedInfo Field { get; set; } + + public String Value { get; set; } + + } + + public class FieldDetailedInfo + { + public int Id { get; set; } + + public String Name { get; set; } + + public String RefName { get; set; } + } +} +``` + + diff --git a/docs/service-hooks/events.md b/docs/service-hooks/events.md new file mode 100644 index 00000000000..b08b01a1ac0 --- /dev/null +++ b/docs/service-hooks/events.md @@ -0,0 +1,2107 @@ +--- +title: Service hooks event reference | Visual Studio Team Services +description: Events supported by VSTS and Team Foundation Server +ms.assetid: 1DC15791-5614-405E-8372-79A5ED6E66EE +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Team Services service hooks events + +Available event types: + +* Build and release + * [Build completed](#build.complete) + * [Release created](#ms.vss-release.release-created-event) + * [Release abandoned](#ms.vss-release.release-abandoned-event) + * [Release deployment approval completed](#ms.vss-release.deployment-approval-completed-event) + * [Release deployment approval pending](#ms.vss-release.deployment-approval-pending-event) + * [Release deployment completed](#ms.vss-release.deployment-completed-event) + * [Release deployment started](#ms.vss-release.deployment-started-event) + +* Code + * [Code checked in](#tfvc.checkin) + * [Code pushed](#git.push) + * [Pull request created](#git.pullrequest.created) + * [Pull request merge commit created](#git.pullrequest.merged) + * [Pull request updated](#git.pullrequest.updated) + +* Work item + * [Work item commented on](#workitem.commented) + * [Work item created](#workitem.created) + * [Work item deleted](#workitem.deleted) + * [Work item restored](#workitem.restored) + * [Work item updated](#workitem.updated) + +Deprecated event types: + +* [Team room message posted](#message.posted) + +## Build and release + + +### Build completed + +A build completes + +* Publisher ID: `tfs` +* Event ID: `build.complete` + +#### Settings + * `definitionName`: Filter events to include only completed builds for the specified definition + * `buildStatus`: Filter events to include only completed builds for the specified completion status + * Valid values: + * `Succeeded` + * `PartiallySucceeded` + * `Failed` + * `Stopped` + +#### Sample payload +```json +{ + "id": "4a5d99d6-1c75-4e53-91b9-ee80057d4ce3", + "eventType": "build.complete", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Build ConsumerAddressModule_20150407.2 succeeded", + "html": "Build ConsumerAddressModule_20150407.2 succeeded", + "markdown": "Build [ConsumerAddressModule_20150407.2](https://fabrikam-fiber-inc.visualstudio.com/web/build.aspx?pcguid=5023c10b-bef3-41c3-bf53-686c4e34ee9e&builduri=vstfs%3a%2f%2f%2fBuild%2fBuild%2f3) succeeded" + }, + "detailedMessage": { + "text": "Build ConsumerAddressModule_20150407.2 succeeded", + "html": "Build ConsumerAddressModule_20150407.2 succeeded", + "markdown": "Build [ConsumerAddressModule_20150407.2](https://fabrikam-fiber-inc.visualstudio.com/web/build.aspx?pcguid=5023c10b-bef3-41c3-bf53-686c4e34ee9e&builduri=vstfs%3a%2f%2f%2fBuild%2fBuild%2f3) succeeded" + }, + "resource": { + "uri": "vstfs:///build-release/Build/2", + "id": 2, + "buildNumber": "ConsumerAddressModule_20150407.1", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/71777fbc-1cf2-4bd1-9540-128c1c71f766/_apis/build-release/Builds/2", + "startTime": "2015-04-07T18:04:06.83Z", + "finishTime": "2015-04-07T18:06:10.69Z", + "reason": "manual", + "status": "succeeded", + "dropLocation": "#/3/drop", + "drop": { + "location": "#/3/drop", + "type": "container", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/resources/Containers/3/drop", + "downloadUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/resources/Containers/3/drop?api-version=1.0&$format=zip&downloadFileName=ConsumerAddressModule_20150407.1_drop" + }, + "log": { + "type": "container", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/resources/Containers/3/logs", + "downloadUrl": "https://fabrikam-fiber-inc.visualstudio.com/_apis/resources/Containers/3/logs?api-version=1.0&$format=zip&downloadFileName=ConsumerAddressModule_20150407.1_logs" + }, + "sourceGetVersion": "LG:refs/heads/master:600c52d2d5b655caa111abfd863e5a9bd304bb0e", + "lastChangedBy": { + "id": "d6245f20-2af8-44f4-9451-8107cb2767db", + "displayName": "Normal Paulk", + "uniqueName": "fabrikamfiber16@hotmail.com", + "url": "https://fabrikam-fiber-inc.visualstudio.com/_apis/Identities/d6245f20-2af8-44f4-9451-8107cb2767db", + "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=d6245f20-2af8-44f4-9451-8107cb2767db" + }, + "retainIndefinitely": false, + "hasDiagnostics": true, + "definition": { + "batchSize": 1, + "triggerType": "none", + "definitionType": "xaml", + "id": 2, + "name": "ConsumerAddressModule", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/71777fbc-1cf2-4bd1-9540-128c1c71f766/_apis/build-release/Definitions/2" + }, + "queue": { + "queueType": "buildController", + "id": 4, + "name": "Hosted Build Controller", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/build-release/Queues/4" + }, + "requests": [ + { + "id": 1, + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/71777fbc-1cf2-4bd1-9540-128c1c71f766/_apis/build-release/Requests/1", + "requestedFor": { + "id": "d6245f20-2af8-44f4-9451-8107cb2767db", + "displayName": "Normal Paulk", + "uniqueName": "fabrikamfiber16@hotmail.com", + "url": "https://fabrikam-fiber-inc.visualstudio.com/_apis/Identities/d6245f20-2af8-44f4-9451-8107cb2767db", + "imageUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=d6245f20-2af8-44f4-9451-8107cb2767db" + } + } + ] + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:26.4285528Z" +} +``` + + +### Release abandoned + +A release was abandoned + +* Publisher ID: `rm` +* Event ID: `ms.vss-release.release-abandoned-event` + +#### Settings + * `releaseDefinitionId`: Filter events to include only completed deployments for the specified definition + +#### Sample payload +```json +{ + "id": "b0497ad3-50c9-4722-96da-a8fa5b80d77f", + "eventType": "ms.vss-release.release-abandoned-event", + "publisherId": "rm", + "scope": "all", + "message": { + "text": "Release Release-1 abandoned.", + "html": "Release Release-1 abandoned.", + "markdown": "Release [Release-1](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/5) abandoned." + }, + "detailedMessage": { + "text": "Release Release-1 from release definition Fabrikam.CD abandoned.\\r\\nRelease description: QFE release for fixing title\\r\\nContinuousIntegration Requested for Chuck Reinhart\\r\\n
    • Build: fabrikam.Bd.2016.04.10 & 2 more<\\li>", + "html": "Release Release-1 from Fabrikam.CD release definition abandoned.\\r\\n
    • Release description: QFE release for fixing title
    • \\r\\n
    • ContinuousIntegration Requested for Chuck Reinhart
    • \\r\\n
    • Build: fabrikam.Bd.2016.04.10 & 2 more <\\li>", + "markdown": "Release [Release-1](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/5) from release definition [Fabrikam.CD](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releasedefinitions/1) abandoned.\\r\\n
    • Release description: QFE release for fixing title
    • \\r\\n
    • ContinuousIntegration Requested for Chuck Reinhart
    • \\r\\n
    • Build: fabrikam.Bd.2016.04.10 & 2 more<\\li>" + }, + "resource": { + "release": { + "id": 4, + "name": "Release-1", + "status": "abandoned", + "createdOn": "2016-01-21T08:19:17.26Z", + "modifiedOn": "2016-01-21T08:19:17.26Z", + "modifiedBy": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "createdBy": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "environments": [ + { + "id": 5, + "releaseId": 0, + "name": "Dev", + "status": "succeeded", + "variables": {}, + "preDeployApprovals": [], + "postDeployApprovals": [], + "preApprovalsSnapshot": { + "approvals": [], + "approvalOptions": { + "requiredApproverCount": 0, + "releaseCreatorCanBeApprover": true + } + }, + "postApprovalsSnapshot": { + "approvals": [] + }, + "deploySteps": [], + "rank": 1, + "definitionEnvironmentId": 1, + "queueId": 1, + "environmentOptions": { + "emailNotificationType": "OnlyOnFailure", + "emailRecipients": "release.environment.owner;release.creator", + "skipArtifactsDownload": false, + "timeoutInMinutes": 0, + "enableAccessToken": false + }, + "demands": [], + "conditions": [], + "modifiedOn": "2016-01-21T08:19:17.26Z", + "workflowTasks": [ + { + "taskId": "00000000-0000-0000-0000-000000000000", + "version": "*", + "name": "Deploy Website to Azure", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": null, + "inputs": { + "ConnectedServiceName": "b460b0f8-fe23-4dc2-a99c-fd8b0633fe1c", + "WebSiteName": "$(webAppName)", + "WebSiteLocation": "Southeast Asia", + "Slot": "", + "Package": "$(System.DefaultWorkingDirectory)\\**\\*.zip" + } + } + ], + "deployPhasesSnapshot": [], + "owner": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "scheduledDeploymentTime": "2016-01-21T08:19:17.26Z", + "schedules": [], + "release": { + "id": 5, + "name": "Release-1", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/5" + } + } + ], + "variables": {}, + "artifacts": [ + { + "sourceId": "31419848-1780-4137-b7e3-62092e986fd6:1", + "type": "Build", + "alias": "Fabrikam.CI", + "definitionReference": { + "Definition": { + "id": "1", + "name": "Fabrikam.CI" + }, + "Project": { + "id": "31419848-1780-4137-b7e3-62092e986fd6", + "name": "Fabrikam" + } + }, + "isPrimary": true + } + ], + "releaseDefinition": { + "id": 1, + "name": "Fabrikam.CD", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/definitions/1" + }, + "description": "QFE release for fixing title", + "reason": "continuousIntegration", + "releaseNameFormat": "Release-$(rev:r)", + "keepForever": false, + "definitionSnapshotRevision": 0, + "comment": "", + "logsContainerUrl": null, + "_links": {} + }, + "project": { + "id": "00000000-0000-0000-0000-000000000000", + "name": "Fabrikam" + } + }, + "resourceVersion": "3.0-preview.1", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + } + }, + "createdDate": "2016-09-19T13:03:27.784654Z" +} +``` + + +### Release created + +A release was created + +* Publisher ID: `rm` +* Event ID: `ms.vss-release.release-created-event` + +#### Settings + * `releaseDefinitionId`: Filter events to include only completed deployments for the specified definition + +#### Sample payload +```json +{ + "id": "d4d69db4-18d4-413e-bc43-07f56b531160", + "eventType": "ms.vss-release.release-created-event", + "publisherId": "rm", + "scope": "all", + "message": { + "text": "Release Release-1 created.", + "html": "Release-1 created.", + "markdown": "Release [Release-1](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/5) created." + }, + "detailedMessage": { + "text": "Release Release-1 created from release definition Fabrikam.CD.\\r\\nRelease description: QFE release for fixing title\\r\\nContinuousIntegration Requested for Chuck Reinhart\\r\\n
    • Build: fabrikam.Bd.2016.04.10 & 2 more<\\li>", + "html": "Release Release-1 created from release definition Fabrikam.CD.\\r\\n
    • Release description: QFE release for fixing title
    • \\r\\n
    • ContinuousIntegration Requested for Chuck Reinhart
    • \\r\\n
    • Build: fabrikam.Bd.2016.04.10 & 2 more<\\li>", + "markdown": "Release [Release-1](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/5) created from release definition [Fabrikam.CD](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releasedefinitions/1).\\r\\n
    • Release description: QFE release for fixing title
    • \\r\\n
    • ContinuousIntegrationRequested for Chuck Reinhart
    • \\r\\n
    • Build: fabrikam.Bd.2016.04.10 & 2 more<\\li>" + }, + "resource": { + "release": { + "id": 4, + "name": "Release-1", + "status": "active", + "createdOn": "2016-01-21T08:19:17.26Z", + "modifiedOn": "2016-01-21T08:19:17.26Z", + "modifiedBy": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "createdBy": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "environments": [ + { + "id": 5, + "releaseId": 0, + "name": "Dev", + "status": "succeeded", + "variables": {}, + "preDeployApprovals": [], + "postDeployApprovals": [], + "preApprovalsSnapshot": { + "approvals": [], + "approvalOptions": { + "requiredApproverCount": 0, + "releaseCreatorCanBeApprover": true + } + }, + "postApprovalsSnapshot": { + "approvals": [] + }, + "deploySteps": [], + "rank": 1, + "definitionEnvironmentId": 1, + "queueId": 1, + "environmentOptions": { + "emailNotificationType": "OnlyOnFailure", + "emailRecipients": "release.environment.owner;release.creator", + "skipArtifactsDownload": false, + "timeoutInMinutes": 0, + "enableAccessToken": false + }, + "demands": [], + "conditions": [], + "modifiedOn": "2016-01-21T08:19:17.26Z", + "workflowTasks": [ + { + "taskId": "00000000-0000-0000-0000-000000000000", + "version": "*", + "name": "Deploy Website to Azure", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": null, + "inputs": { + "ConnectedServiceName": "b460b0f8-fe23-4dc2-a99c-fd8b0633fe1c", + "WebSiteName": "$(webAppName)", + "WebSiteLocation": "Southeast Asia", + "Slot": "", + "Package": "$(System.DefaultWorkingDirectory)\\**\\*.zip" + } + } + ], + "deployPhasesSnapshot": [], + "owner": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "scheduledDeploymentTime": "2016-01-21T08:19:17.26Z", + "schedules": [], + "release": { + "id": 5, + "name": "Release-1", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/5" + } + } + ], + "variables": {}, + "artifacts": [ + { + "sourceId": "31419848-1780-4137-b7e3-62092e986fd6:1", + "type": "Build", + "alias": "Fabrikam.CI", + "definitionReference": { + "Definition": { + "id": "1", + "name": "Fabrikam.CI" + }, + "Project": { + "id": "31419848-1780-4137-b7e3-62092e986fd6", + "name": "Fabrikam" + } + }, + "isPrimary": true + } + ], + "releaseDefinition": { + "id": 1, + "name": "Fabrikam.CD", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/definitions/1" + }, + "description": "QFE release for fixing title", + "reason": "continuousIntegration", + "releaseNameFormat": "Release-$(rev:r)", + "keepForever": false, + "definitionSnapshotRevision": 0, + "comment": "", + "logsContainerUrl": null, + "_links": {} + }, + "project": { + "id": "00000000-0000-0000-0000-000000000000", + "name": "Fabrikam" + } + }, + "resourceVersion": "3.0-preview.1", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + } + }, + "createdDate": "2016-09-19T13:03:27.6570261Z" +} +``` + + +### Release deployment approval completed + +A deployment approval has been completed + +* Publisher ID: `rm` +* Event ID: `ms.vss-release.deployment-approval-completed-event` + +#### Settings + * `releaseApprovalStatus`: Filter events to include only deployments with an approval of the specified status + * Valid values: + * `2` - Approved + * `4` - Rejected + * `releaseApprovalType`: Filter events to include only deployments requesting an approval of the specified type + * Valid values: + * `1` - Pre-deployment + * `2` - Post-deployment + * `releaseEnvironmentId`: Filter events to include only completed deployments for the specified environment + * `releaseDefinitionId`: Filter events to include only completed deployments for the specified definition + +#### Sample payload +```json +{ + "id": "106acb39-c61e-4efd-995e-a9f5e71ba3cd", + "eventType": "ms.vss-release.deployment-approval-completed-event", + "publisherId": "rm", + "scope": "all", + "message": { + "text": "Pre Deployment approval for deployment of release Release-1 on environment Dev Succeeded.", + "html": "Pre Deployment approval for release Release-1 on environment Dev Succeeded.", + "markdown": "Pre Deployment approval for deployment of release [Release-1](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/1) on environment [Dev](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/definitions/1) Succeeded." + }, + "detailedMessage": { + "text": "Pre Deployment approval for release Release-1 on environment Dev Succeeded.\\r\\nApprover: Chuck Reinhart\\r\\nComment: Approving", + "html": "Pre Deployment approval for release Release-1 on environment Dev Succeeded.\\r\\nApprover: Chuck Reinhart\\r\\nComment: Approving", + "markdown": "Pre Deployment approval for release [Release-1](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/1) on environment [Dev](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/definitions/1) Succeeded.\\r\\nApprover: Chuck Reinhart\\r\\nComment: Approving" + }, + "resource": { + "approval": { + "id": 0, + "revision": 0, + "approver": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "approvedBy": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "approvalType": "preDeploy", + "createdOn": "2016-01-21T08:19:17.26Z", + "modifiedOn": "2016-01-21T08:19:17.26Z", + "status": "approved", + "comments": "", + "isAutomated": false, + "isNotificationOn": true, + "trialNumber": 1, + "attempt": 0, + "rank": 1, + "release": { + "id": 1, + "name": "Release-1" + }, + "releaseDefinition": { + "id": 1, + "name": "Fabrikam.CD", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/definitions/1" + }, + "releaseEnvironment": { + "id": 8, + "name": "Dev" + } + }, + "release": { + "id": 1, + "name": "Release-1", + "status": "active", + "createdOn": "2016-01-21T08:19:17.26Z", + "modifiedOn": "2016-01-21T08:19:17.26Z", + "modifiedBy": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "createdBy": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "environments": [ + { + "id": 1, + "releaseId": 0, + "name": "Dev", + "status": "succeeded", + "variables": {}, + "preDeployApprovals": [], + "postDeployApprovals": [], + "preApprovalsSnapshot": { + "approvals": [], + "approvalOptions": { + "requiredApproverCount": 0, + "releaseCreatorCanBeApprover": true + } + }, + "postApprovalsSnapshot": { + "approvals": [] + }, + "deploySteps": [], + "rank": 1, + "definitionEnvironmentId": 1, + "queueId": 1, + "environmentOptions": { + "emailNotificationType": "OnlyOnFailure", + "emailRecipients": "release.environment.owner;release.creator", + "skipArtifactsDownload": false, + "timeoutInMinutes": 0, + "enableAccessToken": false + }, + "demands": [], + "conditions": [], + "modifiedOn": "2016-01-21T08:19:17.26Z", + "workflowTasks": [ + { + "taskId": "00000000-0000-0000-0000-000000000000", + "version": "*", + "name": "Deploy Website to Azure", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": null, + "inputs": { + "ConnectedServiceName": "b460b0f8-fe23-4dc2-a99c-fd8b0633fe1c", + "WebSiteName": "$(webAppName)", + "WebSiteLocation": "Southeast Asia", + "Slot": "", + "Package": "$(System.DefaultWorkingDirectory)\\**\\*.zip" + } + } + ], + "deployPhasesSnapshot": [], + "owner": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "scheduledDeploymentTime": "2016-01-21T08:19:17.26Z", + "schedules": [], + "release": { + "id": 1, + "name": "Release-1", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/1" + } + } + ], + "variables": {}, + "artifacts": [ + { + "sourceId": "31419848-1780-4137-b7e3-62092e986fd6:1", + "type": "Build", + "alias": "Fabrikam.CI", + "definitionReference": { + "Definition": { + "id": "1", + "name": "Fabrikam.CI" + }, + "Project": { + "id": "31419848-1780-4137-b7e3-62092e986fd6", + "name": "Fabrikam" + } + }, + "isPrimary": true + } + ], + "releaseDefinition": { + "id": 1, + "name": "Fabrikam.CD", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/definitions/1" + }, + "description": "QFE release for fixing title", + "reason": "continuousIntegration", + "releaseNameFormat": "Release-$(rev:r)", + "keepForever": false, + "definitionSnapshotRevision": 0, + "comment": "", + "logsContainerUrl": null, + "_links": {} + }, + "project": { + "id": "00000000-0000-0000-0000-000000000000", + "name": "Fabrikam" + } + }, + "resourceVersion": "3.0-preview.1", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + } + }, + "createdDate": "2016-09-19T13:03:28.1594606Z" +} +``` + + +### Release deployment approval pending + +A deployment approval has been requested + +* Publisher ID: `rm` +* Event ID: `ms.vss-release.deployment-approval-pending-event` + +#### Settings + * `releaseApprovalType`: Filter events to include only deployments requesting an approval of the specified type + * Valid values: + * `1` - Pre-deployment + * `2` - Post-deployment + * `releaseEnvironmentId`: Filter events to include only completed deployments for the specified environment + * `releaseDefinitionId`: Filter events to include only completed deployments for the specified definition + +#### Sample payload +```json +{ + "id": "a73e7272-e96d-4249-93ac-7404eacd6801", + "eventType": "ms.vss-release.deployment-approval-pending-event", + "publisherId": "rm", + "scope": "all", + "message": { + "text": "Pre deployment approval pending for release Release-1 on environment Dev.", + "html": "Pre deployment approval pending for release Release-1 on environment Dev.", + "markdown": "Pre deployment approval pending for release [Release-1](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/1) on environment [Dev](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apps/hub/ms.vss-releaseManagement-web.hub-explorer?_a=environment-summary&definitionEnvironmentId=8&definitionId=1)." + }, + "detailedMessage": { + "text": "Pre deployment approval pending for release Release-1 on environment Dev.\\r\\nPending on: Chuck Reinhart\\r\\nPending since: 09 May 2016 12:09:29 (UTC)", + "html": "Pre deployment approval pending of release Release-1 on environment Dev.\\r\\nPending on: Chuck Reinhart\\r\\nPending since: 09 May 2016 12:09:29 (UTC)", + "markdown": "Pre deployment approval pending for release [Release-1](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/1) on environment [Dev](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apps/hub/ms.vss-releaseManagement-web.hub-explorer?_a=environment-summary&definitionEnvironmentId=8&definitionId=1).\\r\\nPending on: Chuck Reinhart\\r\\nPending since: 09 May 2016 12:09:29 (UTC)" + }, + "resource": { + "approval": { + "id": 0, + "revision": 0, + "approver": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "approvalType": "preDeploy", + "createdOn": "2016-01-21T08:19:17.26Z", + "modifiedOn": "2016-01-21T08:19:17.26Z", + "status": "pending", + "comments": "", + "isAutomated": false, + "isNotificationOn": true, + "trialNumber": 1, + "attempt": 0, + "rank": 1, + "release": { + "id": 1, + "name": "Release-1" + }, + "releaseDefinition": { + "id": 1, + "name": "Fabrikam.CD", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/definitions/1" + }, + "releaseEnvironment": { + "id": 8, + "name": "Dev" + } + }, + "release": { + "id": 1, + "name": "Release-1", + "status": "active", + "createdOn": "2016-01-21T08:19:17.26Z", + "modifiedOn": "2016-01-21T08:19:17.26Z", + "modifiedBy": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "createdBy": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "environments": [ + { + "id": 5, + "releaseId": 0, + "name": "Dev", + "status": "succeeded", + "variables": {}, + "preDeployApprovals": [], + "postDeployApprovals": [], + "preApprovalsSnapshot": { + "approvals": [], + "approvalOptions": { + "requiredApproverCount": 0, + "releaseCreatorCanBeApprover": true + } + }, + "postApprovalsSnapshot": { + "approvals": [] + }, + "deploySteps": [], + "rank": 1, + "definitionEnvironmentId": 1, + "queueId": 1, + "environmentOptions": { + "emailNotificationType": "OnlyOnFailure", + "emailRecipients": "release.environment.owner;release.creator", + "skipArtifactsDownload": false, + "timeoutInMinutes": 0, + "enableAccessToken": false + }, + "demands": [], + "conditions": [], + "modifiedOn": "2016-01-21T08:19:17.26Z", + "workflowTasks": [ + { + "taskId": "00000000-0000-0000-0000-000000000000", + "version": "*", + "name": "Deploy Website to Azure", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": null, + "inputs": { + "ConnectedServiceName": "b460b0f8-fe23-4dc2-a99c-fd8b0633fe1c", + "WebSiteName": "$(webAppName)", + "WebSiteLocation": "Southeast Asia", + "Slot": "", + "Package": "$(System.DefaultWorkingDirectory)\\**\\*.zip" + } + } + ], + "deployPhasesSnapshot": [], + "owner": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "scheduledDeploymentTime": "2016-01-21T08:19:17.26Z", + "schedules": [], + "release": { + "id": 1, + "name": "Release-1", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/1" + } + } + ], + "variables": {}, + "artifacts": [ + { + "sourceId": "31419848-1780-4137-b7e3-62092e986fd6:1", + "type": "Build", + "alias": "Fabrikam.CI", + "definitionReference": { + "Definition": { + "id": "1", + "name": "Fabrikam.CI" + }, + "Project": { + "id": "31419848-1780-4137-b7e3-62092e986fd6", + "name": "Fabrikam" + } + }, + "isPrimary": true + } + ], + "releaseDefinition": { + "id": 1, + "name": "Fabrikam.CD", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/definitions/1" + }, + "description": "QFE release for fixing title", + "reason": "continuousIntegration", + "releaseNameFormat": "Release-$(rev:r)", + "keepForever": false, + "definitionSnapshotRevision": 0, + "comment": "", + "logsContainerUrl": null, + "_links": {} + }, + "project": { + "id": "00000000-0000-0000-0000-000000000000", + "name": "Fabrikam" + } + }, + "resourceVersion": "3.0-preview.1", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + } + }, + "createdDate": "2016-09-19T13:03:28.0320509Z" +} +``` + + +### Release deployment completed + +A deployment completed + +* Publisher ID: `rm` +* Event ID: `ms.vss-release.deployment-completed-event` + +#### Settings + * `releaseEnvironmentId`: Filter events to include only completed deployments for the specified environment + * `releaseDefinitionId`: Filter events to include only completed deployments for the specified definition + * `releaseEnvironmentStatus`: Filter events to include only completed deployments with the specified status + * Valid values: + * `8` - Canceled + * `16` - Rejected + * `4` - Succeeded + * `128` - Partially Succeeded + +#### Sample payload +```json +{ + "id": "c3e52c57-187a-45c4-abe2-184a48291bad", + "eventType": "ms.vss-release.deployment-completed-event", + "publisherId": "rm", + "scope": "all", + "message": { + "text": "Deployment of release Release-1 on environment Dev Succeeded.", + "html": "Deployment on environment Dev Succeeded.", + "markdown": "Deployment on environment [Dev](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apps/hub/ms.vss-releaseManagement-web.hub-explorer?_a=environment-summary&definitionEnvironmentId=8&definitionId=1) Succeeded." + }, + "detailedMessage": { + "text": "Deployment of release Release-1 on environment Dev Succeeded. Time to deploy: 0.11 minutes.", + "html": "Deployment on environment Dev Succeeded. Time to deploy: 0.11 minutes.", + "markdown": "Deployment on environment [Dev](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apps/hub/ms.vss-releaseManagement-web.hub-explorer?_a=environment-summary&definitionEnvironmentId=8&definitionId=1) Succeeded. Time to deploy: 0.11 minutes." + }, + "resource": { + "environment": { + "id": 5, + "releaseId": 0, + "name": "Dev", + "status": "succeeded", + "variables": {}, + "preDeployApprovals": [], + "postDeployApprovals": [], + "preApprovalsSnapshot": { + "approvals": [], + "approvalOptions": { + "requiredApproverCount": 0, + "releaseCreatorCanBeApprover": true + } + }, + "postApprovalsSnapshot": { + "approvals": [] + }, + "deploySteps": [], + "rank": 1, + "definitionEnvironmentId": 1, + "queueId": 1, + "environmentOptions": { + "emailNotificationType": "OnlyOnFailure", + "emailRecipients": "release.environment.owner;release.creator", + "skipArtifactsDownload": false, + "timeoutInMinutes": 0, + "enableAccessToken": false + }, + "demands": [], + "conditions": [], + "modifiedOn": "2016-01-21T08:19:17.26Z", + "workflowTasks": [ + { + "taskId": "00000000-0000-0000-0000-000000000000", + "version": "*", + "name": "Deploy Website to Azure", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": null, + "inputs": { + "ConnectedServiceName": "b460b0f8-fe23-4dc2-a99c-fd8b0633fe1c", + "WebSiteName": "$(webAppName)", + "WebSiteLocation": "Southeast Asia", + "Slot": "", + "Package": "$(System.DefaultWorkingDirectory)\\**\\*.zip" + } + } + ], + "deployPhasesSnapshot": [], + "owner": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "scheduledDeploymentTime": "2016-01-21T08:19:17.26Z", + "schedules": [], + "release": { + "id": 1, + "name": "Release-1", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/1" + } + }, + "project": { + "id": "00000000-0000-0000-0000-000000000000", + "name": "Fabrikam" + } + }, + "resourceVersion": "3.0-preview.1", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + } + }, + "createdDate": "2016-09-19T13:03:28.5345098Z" +} +``` + + +### Release deployment started + +A deployment was started + +* Publisher ID: `rm` +* Event ID: `ms.vss-release.deployment-started-event` + +#### Settings + * `releaseEnvironmentId`: Filter events to include only completed deployments for the specified environment + * `releaseDefinitionId`: Filter events to include only completed deployments for the specified definition + +#### Sample payload +```json +{ + "id": "055285c7-9d7a-4ca0-bbfe-5eb0529d312e", + "eventType": "ms.vss-release.deployment-started-event", + "publisherId": "rm", + "scope": "all", + "message": { + "text": "Deployment of release Release-1 to environment Dev started.", + "html": "Deployment on environment Dev started.", + "markdown": "Deployment on environment [Dev](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apps/hub/ms.vss-releaseManagement-web.hub-explorer?_a=environment-summary&definitionEnvironmentId=8&definitionId=4) started." + }, + "detailedMessage": { + "text": "Deployment of release Release-1 on environment Dev started.\\r\\nTrigger: Manual", + "html": "Deployment on environment http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apps/hub/ms.vss-releaseManagement-web.hub-explorer?_a=environment-summary&definitionEnvironmentId=8&definitionId=4 started.\\r\\nTrigger: Manual", + "markdown": "Deployment on environment [Release-1](http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apps/hub/ms.vss-releaseManagement-web.hub-explorer?_a=environment-summary&definitionEnvironmentId=8&definitionId=4) started.\\r\\nTrigger: Dev" + }, + "resource": { + "environment": { + "id": 5, + "releaseId": 0, + "name": "Dev", + "status": "queued", + "variables": {}, + "preDeployApprovals": [], + "postDeployApprovals": [], + "preApprovalsSnapshot": { + "approvals": [], + "approvalOptions": { + "requiredApproverCount": 0, + "releaseCreatorCanBeApprover": true + } + }, + "postApprovalsSnapshot": { + "approvals": [] + }, + "deploySteps": [], + "rank": 1, + "definitionEnvironmentId": 1, + "queueId": 1, + "environmentOptions": { + "emailNotificationType": "OnlyOnFailure", + "emailRecipients": "release.environment.owner;release.creator", + "skipArtifactsDownload": false, + "timeoutInMinutes": 0, + "enableAccessToken": false + }, + "demands": [], + "conditions": [], + "modifiedOn": "2016-01-21T08:19:17.26Z", + "workflowTasks": [ + { + "taskId": "00000000-0000-0000-0000-000000000000", + "version": "*", + "name": "Deploy Website to Azure", + "enabled": true, + "alwaysRun": false, + "continueOnError": false, + "timeoutInMinutes": 0, + "definitionType": null, + "inputs": { + "ConnectedServiceName": "b460b0f8-fe23-4dc2-a99c-fd8b0633fe1c", + "WebSiteName": "$(webAppName)", + "WebSiteLocation": "Southeast Asia", + "Slot": "", + "Package": "$(System.DefaultWorkingDirectory)\\**\\*.zip" + } + } + ], + "deployPhasesSnapshot": [], + "owner": { + "id": "4247c988-4060-4712-abca-ff44681dd78a", + "displayName": "Chuck Reinhart" + }, + "scheduledDeploymentTime": "2016-01-21T08:19:17.26Z", + "schedules": [], + "release": { + "id": 5, + "name": "Release-1", + "url": "http://fabfiber.vsrm.visualstudio.com/DefaultCollection/Fabrikam-Fiber-Git/_apis/Release/releases/5" + } + }, + "project": { + "id": "00000000-0000-0000-0000-000000000000", + "name": "Fabrikam" + } + }, + "resourceVersion": "3.0-preview.1", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + } + }, + "createdDate": "2016-09-19T13:03:28.4539019Z" +} +``` + +## Code + + +### Code checked in + +A changeset is checked into version control. + +* Publisher ID: `tfs` +* Event ID: `tfvc.checkin` + +#### Settings + * `path`: Filter to checkins that change one or more files under the specified path + * Required + +#### Sample payload +```json +{ + "id": "f9b4c23e-88dd-4516-b04d-849787304e32", + "eventType": "tfvc.checkin", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Normal Paulk checked in changeset 18: Dropping in new Java sample", + "html": "Normal Paulk checked in changeset 18: Dropping in new Java sample", + "markdown": "Normal Paulk checked in changeset [18](https://fabrikam-fiber-inc.visualstudio.com/web/cs.aspx?pcguid=d81542e4-cdfa-4333-b082-1ae2d6c3ad16&cs=18): Dropping in new Java sample" + }, + "detailedMessage": { + "text": "Normal Paulk checked in changeset 18: Dropping in new Java sample", + "html": "Normal Paulk checked in changeset 18: Dropping in new Java sample", + "markdown": "Normal Paulk checked in changeset [18](https://fabrikam-fiber-inc.visualstudio.com/web/cs.aspx?pcguid=d81542e4-cdfa-4333-b082-1ae2d6c3ad16&cs=18): Dropping in new Java sample" + }, + "resource": { + "changesetId": 18, + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/18", + "author": { + "id": "d6245f20-2af8-44f4-9451-8107cb2767db", + "displayName": "Normal Paulk", + "uniqueName": "fabrikamfiber16@hotmail.com" + }, + "checkedInBy": { + "id": "d6245f20-2af8-44f4-9451-8107cb2767db", + "displayName": "Normal Paulk", + "uniqueName": "fabrikamfiber16@hotmail.com" + }, + "createdDate": "2014-05-12T22:41:16Z", + "comment": "Dropping in new Java sample" + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + } + }, + "createdDate": "2016-09-19T13:03:26.2056408Z" +} +``` + + +### Code pushed + +Code is pushed to a Git repository + +* Publisher ID: `tfs` +* Event ID: `git.push` + +#### Settings + * `branch`: The branch that code was pushed into + * `pushedBy`: A group which has the pusher as its member + * `repository`: The repository that code was pushed to + * Data type: `guid` + +#### Sample payload +```json +{ + "id": "03c164c2-8912-4d5e-8009-3707d5f83734", + "eventType": "git.push", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Jamal Hartnett pushed updates to branch master of repository Fabrikam-Fiber-Git.", + "html": "Jamal Hartnett pushed updates to branch master of repository Fabrikam-Fiber-Git.", + "markdown": "Jamal Hartnett pushed updates to branch `master` of repository `Fabrikam-Fiber-Git`." + }, + "detailedMessage": { + "text": "Jamal Hartnett pushed 1 commit to branch master of repository Fabrikam-Fiber-Git.\n - Fixed bug in web.config file 33b55f7c", + "html": "Jamal Hartnett pushed 1 commit to branch master of repository Fabrikam-Fiber-Git.\n
        \n
      • Fixed bug in web.config file 33b55f7c\n
      ", + "markdown": "Jamal Hartnett pushed 1 commit to branch [master](https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_git/Fabrikam-Fiber-Git/#version=GBmaster) of repository [Fabrikam-Fiber-Git](https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_git/Fabrikam-Fiber-Git/).\n* Fixed bug in web.config file [33b55f7c](https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_git/Fabrikam-Fiber-Git/commit/33b55f7cb7e7e245323987634f960cf4a6e6bc74)" + }, + "resource": { + "commits": [ + { + "commitId": "33b55f7cb7e7e245323987634f960cf4a6e6bc74", + "author": { + "name": "Jamal Hartnett", + "email": "fabrikamfiber4@hotmail.com", + "date": "2015-02-25T19:01:00Z" + }, + "committer": { + "name": "Jamal Hartnett", + "email": "fabrikamfiber4@hotmail.com", + "date": "2015-02-25T19:01:00Z" + }, + "comment": "Fixed bug in web.config file", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_git/Fabrikam-Fiber-Git/commit/33b55f7cb7e7e245323987634f960cf4a6e6bc74" + } + ], + "refUpdates": [ + { + "name": "refs/heads/master", + "oldObjectId": "aad331d8d3b131fa9ae03cf5e53965b51942618a", + "newObjectId": "33b55f7cb7e7e245323987634f960cf4a6e6bc74" + } + ], + "repository": { + "id": "278d5cd2-584d-4b63-824a-2ba458937249", + "name": "Fabrikam-Fiber-Git", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249", + "project": { + "id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "name": "Fabrikam-Fiber-Git", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "state": "wellFormed" + }, + "defaultBranch": "refs/heads/master", + "remoteUrl": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_git/Fabrikam-Fiber-Git" + }, + "pushedBy": { + "id": "00067FFED5C7AF52@Live.com", + "displayName": "Jamal Hartnett", + "uniqueName": "Windows Live ID\\fabrikamfiber4@hotmail.com" + }, + "pushId": 14, + "date": "2014-05-02T19:17:13.3309587Z", + "url": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/git/repositories/278d5cd2-584d-4b63-824a-2ba458937249/pushes/14" + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:27.0379153Z" +} +``` + + +### Pull request created + +Pull request is created in a Git repository + +* Publisher ID: `tfs` +* Event ID: `git.pullrequest.created` + +#### Settings + * `repository`: The repository that code was pushed to + * Data type: `guid` + * `pullrequestCreatedBy`: A group which has the requester as a member + * `pullrequestReviewersContains`: A group included in the reviewers list + * `branch`: The target branch of the pull request + +#### Sample payload +```json +{ + "id": "2ab4e3d3-b7a6-425e-92b1-5a9982c1269e", + "eventType": "git.pullrequest.created", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Jamal Hartnett created a new pull request", + "html": "Jamal Hartnett created a new pull request", + "markdown": "Jamal Hartnett created a new pull request" + }, + "detailedMessage": { + "text": "Jamal Hartnett created a new pull request\r\n\r\n- Merge status: Succeeded\r\n- Merge commit: eef717(https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n", + "html": "Jamal Hartnett created a new pull request\r\n
        \r\n
      • Merge status: Succeeded
      • \r\n
      • Merge commit: eef717
      • \r\n
      ", + "markdown": "Jamal Hartnett created a new pull request\r\n\r\n+ Merge status: Succeeded\r\n+ Merge commit: [eef717](https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n" + }, + "resource": { + "repository": { + "id": "4bc14d40-c903-45e2-872e-0462c7748079", + "name": "Fabrikam", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079", + "project": { + "id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "name": "Fabrikam", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "state": "wellFormed" + }, + "defaultBranch": "refs/heads/master", + "remoteUrl": "https://fabrikam.visualstudio.com/DefaultCollection/_git/Fabrikam" + }, + "pullRequestId": 1, + "status": "active", + "createdBy": { + "id": "54d125f7-69f7-4191-904f-c5b96b6261c8", + "displayName": "Jamal Hartnett", + "uniqueName": "fabrikamfiber4@hotmail.com", + "url": "https://fabrikam.vssps.visualstudio.com/_apis/Identities/54d125f7-69f7-4191-904f-c5b96b6261c8", + "imageUrl": "https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=54d125f7-69f7-4191-904f-c5b96b6261c8" + }, + "creationDate": "2014-06-17T16:55:46.589889Z", + "title": "my first pull request", + "description": " - test2\r\n", + "sourceRefName": "refs/heads/mytopic", + "targetRefName": "refs/heads/master", + "mergeStatus": "succeeded", + "mergeId": "a10bb228-6ba6-4362-abd7-49ea21333dbd", + "lastMergeSourceCommit": { + "commitId": "53d54ac915144006c2c9e90d2c7d3880920db49c", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/53d54ac915144006c2c9e90d2c7d3880920db49c" + }, + "lastMergeTargetCommit": { + "commitId": "a511f535b1ea495ee0c903badb68fbc83772c882", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/a511f535b1ea495ee0c903badb68fbc83772c882" + }, + "lastMergeCommit": { + "commitId": "eef717f69257a6333f221566c1c987dc94cc0d72", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72" + }, + "reviewers": [ + { + "reviewerUrl": null, + "vote": 0, + "id": "2ea2d095-48f9-4cd6-9966-62f6f574096c", + "displayName": "[Mobile]\\Mobile Team", + "uniqueName": "vstfs:///Classification/TeamProject/f0811a3b-8c8a-4e43-a3bf-9a049b4835bd\\Mobile Team", + "url": "https://fabrikam.vssps.visualstudio.com/_apis/Identities/2ea2d095-48f9-4cd6-9966-62f6f574096c", + "imageUrl": "https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=2ea2d095-48f9-4cd6-9966-62f6f574096c", + "isContainer": true + } + ], + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/pullRequests/1" + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:27.2879096Z" +} +``` + + +### Pull request merge commit created + +Pull request - Created merge commit + +* Publisher ID: `tfs` +* Event ID: `git.pullrequest.merged` + +#### Settings + * `repository`: The repository that code was pushed to + * Data type: `guid` + * `pullrequestCreatedBy`: A group which has the requester as a member + * `pullrequestReviewersContains`: A group included in the reviewers list + * `branch`: The target branch of the pull request + +#### Sample payload +```json +{ + "id": "6872ee8c-b333-4eff-bfb9-0d5274943566", + "eventType": "git.pullrequest.merged", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Jamal Hartnett has created a pull request merge commit", + "html": "Jamal Hartnett has created a pull request merge commit", + "markdown": "Jamal Hartnett has created a pull request merge commit" + }, + "detailedMessage": { + "text": "Jamal Hartnett has created a pull request merge commit\r\n\r\n- Merge status: Succeeded\r\n- Merge commit: eef717(https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n", + "html": "Jamal Hartnett has created a pull request merge commit\r\n
        \r\n
      • Merge status: Succeeded
      • \r\n
      • Merge commit: eef717
      • \r\n
      ", + "markdown": "Jamal Hartnett has created a pull request merge commit\r\n\r\n+ Merge status: Succeeded\r\n+ Merge commit: [eef717](https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n" + }, + "resource": { + "repository": { + "id": "4bc14d40-c903-45e2-872e-0462c7748079", + "name": "Fabrikam", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079", + "project": { + "id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "name": "Fabrikam", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "state": "wellFormed" + }, + "defaultBranch": "refs/heads/master", + "remoteUrl": "https://fabrikam.visualstudio.com/DefaultCollection/_git/Fabrikam" + }, + "pullRequestId": 1, + "status": "completed", + "createdBy": { + "id": "54d125f7-69f7-4191-904f-c5b96b6261c8", + "displayName": "Jamal Hartnett", + "uniqueName": "fabrikamfiber4@hotmail.com", + "url": "https://fabrikam.vssps.visualstudio.com/_apis/Identities/54d125f7-69f7-4191-904f-c5b96b6261c8", + "imageUrl": "https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=54d125f7-69f7-4191-904f-c5b96b6261c8" + }, + "creationDate": "2014-06-17T16:55:46.589889Z", + "closedDate": "2014-06-30T18:59:12.3660573Z", + "title": "my first pull request", + "description": " - test2\r\n", + "sourceRefName": "refs/heads/mytopic", + "targetRefName": "refs/heads/master", + "mergeStatus": "succeeded", + "mergeId": "a10bb228-6ba6-4362-abd7-49ea21333dbd", + "lastMergeSourceCommit": { + "commitId": "53d54ac915144006c2c9e90d2c7d3880920db49c", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/53d54ac915144006c2c9e90d2c7d3880920db49c" + }, + "lastMergeTargetCommit": { + "commitId": "a511f535b1ea495ee0c903badb68fbc83772c882", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/a511f535b1ea495ee0c903badb68fbc83772c882" + }, + "lastMergeCommit": { + "commitId": "eef717f69257a6333f221566c1c987dc94cc0d72", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72" + }, + "reviewers": [ + { + "reviewerUrl": null, + "vote": 0, + "id": "2ea2d095-48f9-4cd6-9966-62f6f574096c", + "displayName": "[Mobile]\\Mobile Team", + "uniqueName": "vstfs:///Classification/TeamProject/f0811a3b-8c8a-4e43-a3bf-9a049b4835bd\\Mobile Team", + "url": "https://fabrikam.vssps.visualstudio.com/_apis/Identities/2ea2d095-48f9-4cd6-9966-62f6f574096c", + "imageUrl": "https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=2ea2d095-48f9-4cd6-9966-62f6f574096c", + "isContainer": true + } + ], + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/pullRequests/1" + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:27.3156388Z" +} +``` + + +### Pull request updated + +Pull request is updated; status, review list, reviewer vote changed or the source branch is updated with a push + +* Publisher ID: `tfs` +* Event ID: `git.pullrequest.updated` + +#### Settings + * `notificationType`: The type of pull request change + * Valid values: + * `PushNotification` - Source branch updated + * `ReviewersUpdateNotification` - Reviewers changed + * `StatusUpdateNotification` - Status changed + * `ReviewerVoteNotification` - Votes score changed + * `repository`: The repository that code was pushed to + * Data type: `guid` + * `pullrequestCreatedBy`: A group which has the requester as a member + * `pullrequestReviewersContains`: A group included in the reviewers list + * `branch`: The target branch of the pull request + +#### Sample payload +```json +{ + "id": "af07be1b-f3ad-44c8-a7f1-c4835f2df06b", + "eventType": "git.pullrequest.updated", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Jamal Hartnett marked the pull request as completed", + "html": "Jamal Hartnett marked the pull request as completed", + "markdown": "Jamal Hartnett marked the pull request as completed" + }, + "detailedMessage": { + "text": "Jamal Hartnett marked the pull request as completed\r\n\r\n- Merge status: Succeeded\r\n- Merge commit: eef717(https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n", + "html": "Jamal Hartnett marked the pull request as completed\r\n
        \r\n
      • Merge status: Succeeded
      • \r\n
      • Merge commit: eef717
      • \r\n
      ", + "markdown": "Jamal Hartnett marked the pull request as completed\r\n\r\n+ Merge status: Succeeded\r\n+ Merge commit: [eef717](https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72)\r\n" + }, + "resource": { + "repository": { + "id": "4bc14d40-c903-45e2-872e-0462c7748079", + "name": "Fabrikam", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079", + "project": { + "id": "6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "name": "Fabrikam", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/projects/6ce954b1-ce1f-45d1-b94d-e6bf2464ba2c", + "state": "wellFormed" + }, + "defaultBranch": "refs/heads/master", + "remoteUrl": "https://fabrikam.visualstudio.com/DefaultCollection/_git/Fabrikam" + }, + "pullRequestId": 1, + "status": "completed", + "createdBy": { + "id": "54d125f7-69f7-4191-904f-c5b96b6261c8", + "displayName": "Jamal Hartnett", + "uniqueName": "fabrikamfiber4@hotmail.com", + "url": "https://fabrikam.vssps.visualstudio.com/_apis/Identities/54d125f7-69f7-4191-904f-c5b96b6261c8", + "imageUrl": "https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=54d125f7-69f7-4191-904f-c5b96b6261c8" + }, + "creationDate": "2014-06-17T16:55:46.589889Z", + "closedDate": "2014-06-30T18:59:12.3660573Z", + "title": "my first pull request", + "description": " - test2\r\n", + "sourceRefName": "refs/heads/mytopic", + "targetRefName": "refs/heads/master", + "mergeStatus": "succeeded", + "mergeId": "a10bb228-6ba6-4362-abd7-49ea21333dbd", + "lastMergeSourceCommit": { + "commitId": "53d54ac915144006c2c9e90d2c7d3880920db49c", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/53d54ac915144006c2c9e90d2c7d3880920db49c" + }, + "lastMergeTargetCommit": { + "commitId": "a511f535b1ea495ee0c903badb68fbc83772c882", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/a511f535b1ea495ee0c903badb68fbc83772c882" + }, + "lastMergeCommit": { + "commitId": "eef717f69257a6333f221566c1c987dc94cc0d72", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/eef717f69257a6333f221566c1c987dc94cc0d72" + }, + "reviewers": [ + { + "reviewerUrl": null, + "vote": 0, + "id": "2ea2d095-48f9-4cd6-9966-62f6f574096c", + "displayName": "[Mobile]\\Mobile Team", + "uniqueName": "vstfs:///Classification/TeamProject/f0811a3b-8c8a-4e43-a3bf-9a049b4835bd\\Mobile Team", + "url": "https://fabrikam.vssps.visualstudio.com/_apis/Identities/2ea2d095-48f9-4cd6-9966-62f6f574096c", + "imageUrl": "https://fabrikam.visualstudio.com/DefaultCollection/_api/_common/identityImage?id=2ea2d095-48f9-4cd6-9966-62f6f574096c", + "isContainer": true + } + ], + "commits": [ + { + "commitId": "53d54ac915144006c2c9e90d2c7d3880920db49c", + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/commits/53d54ac915144006c2c9e90d2c7d3880920db49c" + } + ], + "url": "https://fabrikam.visualstudio.com/DefaultCollection/_apis/git/repositories/4bc14d40-c903-45e2-872e-0462c7748079/pullRequests/1" + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:27.2813828Z" +} +``` + +## Work item + + +### Work item created + +Filter events to include only newly created work items. + +* Publisher ID: `tfs` +* Event ID: `workitem.created` + +#### Settings + * `areaPath`: Filter events to include only work items under the specified area path. + * `workItemType`: Filter events to include only work items of the specified type. + +#### Sample payload +```json +{ + "id": "d2d46fb1-dba5-403c-9373-427583f19e8c", + "eventType": "workitem.created", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Bug #5 (Some great new idea!) created by Jamal Hartnett.\r\n(http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5)", + "html": "Bug #5 (Some great new idea!) created by Jamal Hartnett.", + "markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) created by Jamal Hartnett." + }, + "detailedMessage": { + "text": "Bug #5 (Some great new idea!) created by Jamal Hartnett.\r\n(http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5)\r\n\r\n- Area: FabrikamCloud\r\n- Iteration: FabrikamCloud\\Release 1\\Sprint 1\r\n- State: New\r\n- Assigned to: \r\n- Comment: \r\n- Severity: 3 - Medium\r\n", + "html": "Bug #5 (Some great new idea!) created by Jamal Hartnett.
        \r\n
      • Area: FabrikamCloud
      • \r\n
      • Iteration: FabrikamCloud\\Release 1\\Sprint 1
      • \r\n
      • State: New
      • \r\n
      • Assigned to:
      • \r\n
      • Comment:
      • \r\n
      • Severity: 3 - Medium
      ", + "markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) created by Jamal Hartnett.\r\n\r\n* Area: FabrikamCloud\r\n* Iteration: FabrikamCloud\\Release 1\\Sprint 1\r\n* State: New\r\n* Assigned to: \r\n* Comment: \r\n* Severity: 3 - Medium\r\n" + }, + "resource": { + "id": 5, + "rev": 1, + "fields": { + "System.AreaPath": "FabrikamCloud", + "System.TeamProject": "FabrikamCloud", + "System.IterationPath": "FabrikamCloud\\Release 1\\Sprint 1", + "System.WorkItemType": "Bug", + "System.State": "New", + "System.Reason": "New defect reported", + "System.CreatedDate": "2014-07-15T17:42:44.663Z", + "System.CreatedBy": "Jamal Hartnett", + "System.ChangedDate": "2014-07-15T17:42:44.663Z", + "System.ChangedBy": "Jamal Hartnett", + "System.Title": "Some great new idea!", + "Microsoft.VSTS.Common.Severity": "3 - Medium", + "WEF_EB329F44FE5F4A94ACB1DA153FDF38BA_Kanban.Column": "New" + }, + "_links": { + "self": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5" + }, + "workItemUpdates": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/updates" + }, + "workItemRevisions": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/revisions" + }, + "workItemType": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/ea830882-2a3c-4095-a53f-972f9a376f6e/workItemTypes/Bug" + }, + "fields": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/fields" + } + }, + "url": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5" + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:29.7688022Z" +} +``` + + +### Work item deleted + +Filter events to include only newly deleted work items. + +* Publisher ID: `tfs` +* Event ID: `workitem.deleted` + +#### Settings + * `areaPath`: Filter events to include only work items under the specified area path. + * `workItemType`: Filter events to include only work items of the specified type. + +#### Sample payload +```json +{ + "id": "72da0ade-0709-40ee-beb7-104287bf7e84", + "eventType": "workitem.deleted", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Bug #5 (Some great new idea!) deleted by Jamal Hartnett.", + "html": "Bug #5 (Some great new idea!) deleted by Jamal Hartnett.", + "markdown": "[Bug #5] (Some great new idea!) deleted by Jamal Hartnett." + }, + "detailedMessage": { + "text": "Bug #5 (Some great new idea!) deleted by Jamal Hartnett.\r\n\r\n- Area: FabrikamCloud\r\n- Iteration: FabrikamCloud\\Release 1\\Sprint 1\r\n- State: New\r\n", + "html": "Bug #5 (Some great new idea!) deleted by Jamal Hartnett.
        \r\n
      • Area: FabrikamCloud
      • \r\n
      • Iteration: FabrikamCloud\\Release 1\\Sprint 1
      • \r\n
      • State: New
      ", + "markdown": "[Bug #5] (Some great new idea!) deleted by Jamal Hartnett.\r\n\r\n* Area: FabrikamCloud\r\n* Iteration: FabrikamCloud\\Release 1\\Sprint 1\r\n* State: New\r\n" + }, + "resource": { + "id": 5, + "rev": 1, + "fields": { + "System.AreaPath": "FabrikamCloud", + "System.TeamProject": "FabrikamCloud", + "System.IterationPath": "FabrikamCloud\\Release 1\\Sprint 1", + "System.WorkItemType": "Bug", + "System.State": "New", + "System.Reason": "New defect reported", + "System.CreatedDate": "2014-07-15T17:42:44.663Z", + "System.CreatedBy": "Jamal Hartnett", + "System.ChangedDate": "2014-07-15T17:42:44.663Z", + "System.ChangedBy": "Jamal Hartnett", + "System.Title": "Some great new idea!", + "Microsoft.VSTS.Common.Severity": "3 - Medium", + "WEF_EB329F44FE5F4A94ACB1DA153FDF38BA_Kanban.Column": "New" + }, + "_links": { + "self": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/recyclebin/5" + }, + "workItemType": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/ea830882-2a3c-4095-a53f-972f9a376f6e/workItemTypes/Bug" + }, + "fields": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/fields" + } + }, + "url": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/recyclebin/5" + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:30.0657064Z" +} +``` + + +### Work item restored + +Filter events to include only newly restored work items. + +* Publisher ID: `tfs` +* Event ID: `workitem.restored` + +#### Settings + * `areaPath`: Filter events to include only work items under the specified area path. + * `workItemType`: Filter events to include only work items of the specified type. + +#### Sample payload +```json +{ + "id": "1ca023d6-6cff-49dd-b3d1-302b69311810", + "eventType": "workitem.restored", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Bug #5 (Some great new idea!) restored by Jamal Hartnett.\r\n(http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5)", + "html": "Bug #5 (Some great new idea!) restored by Jamal Hartnett.", + "markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) restored by Jamal Hartnett." + }, + "detailedMessage": { + "text": "Bug #5 (Some great new idea!) restored by Jamal Hartnett.\r\n(http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5)\r\n\r\n- Area: FabrikamCloud\r\n- Iteration: FabrikamCloud\\Release 1\\Sprint 1\r\n- State: New\r\n- Severity: 3 - Medium\r\n", + "html": "Bug #5 (Some great new idea!) restored by Jamal Hartnett.
        \r\n
      • Area: FabrikamCloud
      • \r\n
      • Iteration: FabrikamCloud\\Release 1\\Sprint 1
      • \r\n
      • State: New
      • Severity: 3 - Medium
      ", + "markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) restored by Jamal Hartnett.\r\n\r\n* Area: FabrikamCloud\r\n* Iteration: FabrikamCloud\\Release 1\\Sprint 1\r\n* State: New\r\n* Severity: 3 - Medium\r\n" + }, + "resource": { + "id": 5, + "rev": 1, + "fields": { + "System.AreaPath": "FabrikamCloud", + "System.TeamProject": "FabrikamCloud", + "System.IterationPath": "FabrikamCloud\\Release 1\\Sprint 1", + "System.WorkItemType": "Bug", + "System.State": "New", + "System.Reason": "New defect reported", + "System.CreatedDate": "2014-07-15T17:42:44.663Z", + "System.CreatedBy": "Jamal Hartnett", + "System.ChangedDate": "2014-07-15T17:42:44.663Z", + "System.ChangedBy": "Jamal Hartnett", + "System.Title": "Some great new idea!", + "Microsoft.VSTS.Common.Severity": "3 - Medium", + "WEF_EB329F44FE5F4A94ACB1DA153FDF38BA_Kanban.Column": "New" + }, + "_links": { + "self": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5" + }, + "workItemUpdates": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/updates" + }, + "workItemRevisions": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/revisions" + }, + "workItemType": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/ea830882-2a3c-4095-a53f-972f9a376f6e/workItemTypes/Bug" + }, + "fields": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/fields" + }, + "html": { + "href": "https://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=d81542e4-cdfa-4333-b082-1ae2d6c3ad16&id=5" + }, + "workItemHistory": { + "href": "https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/history" + } + }, + "url": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5" + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:30.1456784Z" +} +``` + + +### Work item updated + +Filter events to include only changed work items. + +* Publisher ID: `tfs` +* Event ID: `workitem.updated` + +#### Settings + * `areaPath`: Filter events to include only work items under the specified area path. + * `changedFields`: Filter events to include only work items with the specified field(s) changed. + * `workItemType`: Filter events to include only work items of the specified type. + +#### Sample payload +```json +{ + "id": "27646e0e-b520-4d2b-9411-bba7524947cd", + "eventType": "workitem.updated", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Bug #5 (Some great new idea!) updated by Jamal Hartnett.\r\n(http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5)", + "html": "Bug #5 (Some great new idea!) updated by Jamal Hartnett.", + "markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) updated by Jamal Hartnett." + }, + "detailedMessage": { + "text": "Bug #5 (Some great new idea!) updated by Jamal Hartnett.\r\n(http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5)\r\n\r\n- New State: Approved\r\n", + "html": "Bug #5 (Some great new idea!) updated by Jamal Hartnett.
        \r\n
      • New State: Approved
      ", + "markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) updated by Jamal Hartnett.\r\n\r\n* New State: Approved\r\n" + }, + "resource": { + "id": 2, + "workItemId": 0, + "rev": 2, + "revisedBy": null, + "revisedDate": "0001-01-01T00:00:00", + "fields": { + "System.Rev": { + "oldValue": "1", + "newValue": "2" + }, + "System.AuthorizedDate": { + "oldValue": "2014-07-15T16:48:44.663Z", + "newValue": "2014-07-15T17:42:44.663Z" + }, + "System.RevisedDate": { + "oldValue": "2014-07-15T17:42:44.663Z", + "newValue": "9999-01-01T00:00:00Z" + }, + "System.State": { + "oldValue": "New", + "newValue": "Approved" + }, + "System.Reason": { + "oldValue": "New defect reported", + "newValue": "Approved by the Product Owner" + }, + "System.AssignedTo": { + "newValue": "Jamal Hartnet" + }, + "System.ChangedDate": { + "oldValue": "2014-07-15T16:48:44.663Z", + "newValue": "2014-07-15T17:42:44.663Z" + }, + "System.Watermark": { + "oldValue": "2", + "newValue": "5" + }, + "Microsoft.VSTS.Common.Severity": { + "oldValue": "3 - Medium", + "newValue": "2 - High" + } + }, + "_links": { + "self": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/updates/2" + }, + "parent": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5" + }, + "workItemUpdates": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/updates" + } + }, + "url": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/updates/2", + "revision": { + "id": 5, + "rev": 2, + "fields": { + "System.AreaPath": "FabrikamCloud", + "System.TeamProject": "FabrikamCloud", + "System.IterationPath": "FabrikamCloud\\Release 1\\Sprint 1", + "System.WorkItemType": "Bug", + "System.State": "New", + "System.Reason": "New defect reported", + "System.CreatedDate": "2014-07-15T16:48:44.663Z", + "System.CreatedBy": "Jamal Hartnett", + "System.ChangedDate": "2014-07-15T16:48:44.663Z", + "System.ChangedBy": "Jamal Hartnett", + "System.Title": "Some great new idea!", + "Microsoft.VSTS.Common.Severity": "3 - Medium", + "WEF_EB329F44FE5F4A94ACB1DA153FDF38BA_Kanban.Column": "New" + }, + "url": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/revisions/2" + } + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:30.6438544Z" +} +``` + + + +### Work item commented on + +Filter events to include only work items commented on. + +* Publisher ID: `tfs` +* Event ID: `workitem.commented` + +#### Settings + * `areaPath`: Filter events to include only work items under the specified area path. + * `commentPattern`: The string that must be found in the comment. + * `workItemType`: Filter events to include only work items of the specified type. + +#### Sample payload +```json +{ + "id": "fb2617ed-60df-4518-81fa-749faa6c5cd6", + "eventType": "workitem.commented", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Bug #5 (Some great new idea!) commented on by Jamal Hartnett.\r\n(http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5)", + "html": "Bug #5 (Some great new idea!) commented on by Jamal Hartnett.", + "markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) commented on by Jamal Hartnett." + }, + "detailedMessage": { + "text": "Bug #5 (Some great new idea!) commented on by Jamal Hartnett.\r\n(http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5)\r\nThis is a great new idea", + "html": "Bug #5 (Some great new idea!) commented on by Jamal Hartnett.
      This is a great new idea", + "markdown": "[Bug #5](http://fabrikam-fiber-inc.visualstudio.com/web/wi.aspx?pcguid=74e918bf-3376-436d-bd20-8e8c1287f465&id=5) (Some great new idea!) commented on by Jamal Hartnett.\r\nThis is a great new idea" + }, + "resource": { + "id": 5, + "rev": 4, + "fields": { + "System.AreaPath": "FabrikamCloud", + "System.TeamProject": "FabrikamCloud", + "System.IterationPath": "FabrikamCloud\\Release 1\\Sprint 1", + "System.WorkItemType": "Bug", + "System.State": "New", + "System.Reason": "New defect reported", + "System.CreatedDate": "2014-07-15T17:42:44.663Z", + "System.CreatedBy": "Jamal Hartnett", + "System.ChangedDate": "2014-07-15T17:42:44.663Z", + "System.ChangedBy": "Jamal Hartnett", + "System.Title": "Some great new idea!", + "Microsoft.VSTS.Common.Severity": "3 - Medium", + "WEF_EB329F44FE5F4A94ACB1DA153FDF38BA_Kanban.Column": "New", + "System.History": "This is a great new idea" + }, + "_links": { + "self": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5" + }, + "workItemUpdates": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/updates" + }, + "workItemRevisions": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5/revisions" + }, + "workItemType": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/ea830882-2a3c-4095-a53f-972f9a376f6e/workItemTypes/Bug" + }, + "fields": { + "href": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/fields" + } + }, + "url": "http://fabrikam-fiber-inc.visualstudio.com/DefaultCollection/_apis/wit/workItems/5" + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:28.9695265Z" +} +``` + +## Deprecated event types + + +### Team room message posted + +Triggers when a message is posted to a team room + +* Publisher ID: `tfs` +* Event ID: `message.posted` + +#### Settings + * `messagePattern`: The string that must be found in the message + * `roomId`: Filter events to include only messages sent to the specified Team room + * Data type: `number` + * Required + +#### Sample payload +```json +{ + "id": "daae438c-296b-4512-b08e-571910874e9b", + "eventType": "message.posted", + "publisherId": "tfs", + "scope": "all", + "message": { + "text": "Jamal Hartnett posted a message to Fabrikam-Fiber-Git Team Room\r\nHello", + "html": "Jamal Hartnett posted a message to Fabrikam-Fiber-Git Team Room\r\nHello", + "markdown": "Jamal Hartnett posted a message to Fabrikam-Fiber-Git Team Room\r\nHello" + }, + "detailedMessage": { + "text": "Jamal Hartnett posted a message to Fabrikam-Fiber-Git Team Room\r\nHello", + "html": "Jamal Hartnett posted a message to Fabrikam-Fiber-Git Team Room

      Hello

      ", + "markdown": "Jamal Hartnett posted a message to Fabrikam-Fiber-Git Team Room\r\nHello" + }, + "resource": { + "id": 0, + "content": "Hello", + "messageType": "normal", + "postedTime": "2014-05-02T19:17:13.3309587Z", + "postedRoomId": 1, + "postedBy": { + "id": "00067FFED5C7AF52@Live.com", + "displayName": "Jamal Hartnett", + "uniqueName": "Windows Live ID\\fabrikamfiber4@hotmail.com" + } + }, + "resourceVersion": "1.0", + "resourceContainers": { + "collection": { + "id": "c12d0eb8-e382-443b-9f9c-c52cba5014c2" + }, + "account": { + "id": "f844ec47-a9db-4511-8281-8b63f4eaf94e" + }, + "project": { + "id": "be9b3917-87e6-42a4-a549-2bc06a7a878f" + } + }, + "createdDate": "2016-09-19T13:03:29.2506967Z" +} +``` + +## Resource containers + +The event payload contains a `resourceContainers` dictionary that includes the IDs of the project, collection/account, or server that the event initiated from. Some products/environments also include a `baseUrl` field with each entry that provides the full URL to the container. This URL can be used to create a connection to the container in order to make REST API calls. + +* **Team Foundation Server 2015**: includes project, collection, and server. Does not include `baseUrl`. +* **Team Foundation Server 2017**: includes project, collection, and server. Includes `baseUrl` for each. +* **Team Services**: includes project and collection (account). Includes `baseUrl` for each. + diff --git a/docs/service-hooks/index.md b/docs/service-hooks/index.md new file mode 100644 index 00000000000..91c6c3c58f9 --- /dev/null +++ b/docs/service-hooks/index.md @@ -0,0 +1,47 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Integrate VSTS with third party apps using service hooks +description: Index of using service hooks to integrate third party apps with Visual Studio Team Services +ms.assetid: ae372488-1430-4b68-b12e-a0a09ecad685 +ms.manager: douge +ms.author: elbatk +ms.date: 08/23/2016 +--- + +# Integrate VSTS with other applications + +Service hooks enable you to perform tasks on other services when events happen in your Visual Studio Team Services (VSTS) projects. For example, create a card in Trello when a work item is created or send a push notification to your team's mobile devices when a build fails. Service hooks can also be used in custom apps and services as a more efficient way to drive activities when events happen in your projects. + +## 5-minute Quickstarts +* [Integrate with Slack](services/slack.md) +* [Integrate with Jenkins](services/jenkins.md) +* [Integrate with Trello](services/trello.md) + +## How-to Guides +* [Integrate with AppVeyor](services/appveyor.md) +* [Integrate with Azure Service Bus](services/azure-service-bus.md) +* [Integrate with Azure Storage](services/azure-storage.md) +* [Integrate with Bamboo](services/bamboo.md) +* [Integrate with Campfire](services/campfire.md) +* [Integrate with Flowdock](services/flowdock.md) +* [Integrate with HipChat](services/hipchat.md) +* [Integrate with Hubot](services/hubot.md) +* [Integrate with MyGet](services/myget.md) +* [Integrate with Microsoft Teams](services/teams.md) +* [Integrate with UserVoice](services/uservoice.md) +* [Integrate with WebHooks](services/webhooks.md) +* [Integrate with Zapier](services/zapier.md) +* [Integrate with Zendesk](services/zendesk.md) +* [Authorize applications with VSTS](./authorize.md) + +## Troubleshooting +* [Troubleshoot service hooks and FAQs](./troubleshoot.md) + +## Resources +* [Visual Studio Marketplace](https://marketplace.visualstudio.com/) +* [Billing information](../billing/index.md) + + + + diff --git a/docs/service-hooks/overview.md b/docs/service-hooks/overview.md new file mode 100644 index 00000000000..59b05d17bd8 --- /dev/null +++ b/docs/service-hooks/overview.md @@ -0,0 +1,130 @@ +--- +title: Integrate with service hooks | Visual Studio Team Services +description: Perform tasks with other services when events happen in VSTS projects +ms.assetid: c0617128-b67c-4ec4-b1c9-e65e1b3ab82c +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Integrate with service hooks + +Service hooks enable you to perform tasks on other services when events happen in your Visual +Studio Online projects. For example, create a card in Trello when a work item is created +or send a push notification to your team's mobile devices when a build fails. Service hooks +can also be used in custom apps and services as a more efficient way to drive activities +when events happen in your projects. + +## Available services + +> These services are available as the target of service hooks. To learn about others apps and services that integrate with Visual Studio Team Services, visit the [Visual Studio Marketplace](https://marketplace.visualstudio.com/#VSTS) + +Build and release | Collaborate | Customer support | Plan and track | Integrate +------------------- | ------------- | ---------------- | --------- | ------- +[AppVeyor](./services/appveyor.md) | [Campfire](./services/campfire.md) | [UserVoice](./services/uservoice.md) | [Trello](./services/trello.md) | [Azure Service Bus](./services/azure-service-bus.md) +[Bamboo](./services/bamboo.md) | [Flowdock](./services/flowdock.md) | [Zendesk](./services/zendesk.md) | | [Azure Storage](./services/azure-storage.md) +[Jenkins](./services/jenkins.md) | [HipChat](./services/hipchat.md) | | | [Web Hooks](./services/webhooks.md) | +[MyGet](./services/myget.md) | [Hubot](./services/hubot.md) | | | [Zapier](./services/zapier.md) | + | [Slack](./services/slack.md) | | | + +## Create a subscription + +When you integrate one of these services with Visual Studio Team Services, +you have to create a new subscription, something like this. In many cases, +you have to do some work in the other service, too. For specific details, +look at the information on the service that you're interested in. + +1. Open the admin page for a team project in web access. + + Open the admin page + +2. Create a subscription by running the wizard. + + Click the link to run the subscription wizard + +3. Select the service you want to integrate with. + + Select the service to integrate + +4. Select the event to trigger on and any filters (if applicable). + + Select the event to trigger on and any filters + +5. Select an action to perform on the target service. + + > [!NOTE] + > The list of available actions may be limited based on the event type you selected. + + Select an action to perform on the target service + +6. To confirm the settings are correct, test the subscription and then finish the wizard. + + Test notification 1 + + Test notification 2 + +## Q & A + + + +####Q: What permissions do I need to set up a subscription? + +A: *Edit subscriptions* and *View subscriptions*. By default, only project administrators +have these permissions. To grant them to other users directly, use **tfssecurity.exe** +from the command line. For example: + +``` +tfssecurity /a+ /collection:https://fabrikam.visualstudio.com/DefaultCollection ServiceHooks PublisherSecurity/abcdef00-abcd-0000-0000-abcdef000000 ViewSubscriptions n:fabrikamfiber4@hotmail.com ALLOW +``` + +and + +``` +tfssecurity /a+ /collection:https://fabrikam.visualstudio.com/DefaultCollection ServiceHooks PublisherSecurity/abcdef00-abcd-0000-0000-abcdef000000 EditSubscriptions n:fabrikamfiber4@hotmail.com ALLOW +``` + +The GUID is the ID of the team project. You can get it using the [Projects](https://visualstudio.com/integrate/api/overview.md) REST API. + +####Q: What are the security implications of granting *Edit subscriptions* and *View subscriptions* permissions? + +A: The user with these permissions can see all subscriptions created in the team project +project and the notification history for those subscriptions. That user will be able to +create any type of service hook subscription in that project. If the user sets up a +subscription for a resource that he does not otherwise have permission to access, the +subscription will not get triggered. + +For example: if I don't have access to work items in area path XYZ, and I set up a +subscription to the work item update events, I won't get notifications for updates +to work items in area path XYZ. However, if another user who does have access to the work +items in area path XYZ is receiving those "work item update" events, then I could see the +notification history of that other user's events, which includes work item data that I +don't otherwise have access to. + +####Q: Can I create service hook subscriptions for a project programmatically? + +A: Yes. Go [here](create-subscription.md) for more details. + +####Q: Can I remove an app's access to my account after I've authorized it? + +A: Yes. You can revoke authorizations from your profile. + +1. Go to your profile page from http://visualstudio.com. + + Make sure you start from the Visual Studio site (http://visualstudio.com) + instead of your account (```https://{account}.visualstudio.com```) because, right now, + your profile accessed from your account will take you to the wrong implementation + of the authorizations management feature. + +2. Manage your authorizations. + + Click Manage applications to manage authorizations + +3. Revoke any authorizations you no longer want to allow. + + Click Revoke to revoke authorizations + + + diff --git a/docs/service-hooks/services/_img/add-service-hook.png b/docs/service-hooks/services/_img/add-service-hook.png new file mode 100644 index 00000000000..0ff9fd08c14 Binary files /dev/null and b/docs/service-hooks/services/_img/add-service-hook.png differ diff --git a/docs/service-hooks/services/_img/admin-700.png b/docs/service-hooks/services/_img/admin-700.png new file mode 100644 index 00000000000..4d22be3f5ec Binary files /dev/null and b/docs/service-hooks/services/_img/admin-700.png differ diff --git a/docs/service-hooks/services/_img/admin.png b/docs/service-hooks/services/_img/admin.png new file mode 100644 index 00000000000..56904bc4607 Binary files /dev/null and b/docs/service-hooks/services/_img/admin.png differ diff --git a/docs/service-hooks/services/_img/appveyor/appveyor-add-repository.png b/docs/service-hooks/services/_img/appveyor/appveyor-add-repository.png new file mode 100644 index 00000000000..6ec7612340a Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/appveyor-add-repository.png differ diff --git a/docs/service-hooks/services/_img/appveyor/appveyor-linked-accounts.png b/docs/service-hooks/services/_img/appveyor/appveyor-linked-accounts.png new file mode 100644 index 00000000000..54b4194e787 Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/appveyor-linked-accounts.png differ diff --git a/docs/service-hooks/services/_img/appveyor/appveyor-new-build.png b/docs/service-hooks/services/_img/appveyor/appveyor-new-build.png new file mode 100644 index 00000000000..702f274c72c Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/appveyor-new-build.png differ diff --git a/docs/service-hooks/services/_img/appveyor/appveyor-new-project.png b/docs/service-hooks/services/_img/appveyor/appveyor-new-project.png new file mode 100644 index 00000000000..fb90bf91e05 Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/appveyor-new-project.png differ diff --git a/docs/service-hooks/services/_img/appveyor/appveyor-permissions.png b/docs/service-hooks/services/_img/appveyor/appveyor-permissions.png new file mode 100644 index 00000000000..067a59d910f Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/appveyor-permissions.png differ diff --git a/docs/service-hooks/services/_img/appveyor/appveyor-project-settings.png b/docs/service-hooks/services/_img/appveyor/appveyor-project-settings.png new file mode 100644 index 00000000000..78758ecd48b Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/appveyor-project-settings.png differ diff --git a/docs/service-hooks/services/_img/appveyor/appveyor-service-hook.png b/docs/service-hooks/services/_img/appveyor/appveyor-service-hook.png new file mode 100644 index 00000000000..cfd54092e02 Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/appveyor-service-hook.png differ diff --git a/docs/service-hooks/services/_img/appveyor/authorize-vso.png b/docs/service-hooks/services/_img/appveyor/authorize-vso.png new file mode 100644 index 00000000000..49fb17d2d04 Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/authorize-vso.png differ diff --git a/docs/service-hooks/services/_img/appveyor/build-output.png b/docs/service-hooks/services/_img/appveyor/build-output.png new file mode 100644 index 00000000000..03c96f7d82d Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/build-output.png differ diff --git a/docs/service-hooks/services/_img/appveyor/sign-up.png b/docs/service-hooks/services/_img/appveyor/sign-up.png new file mode 100644 index 00000000000..83b1efa85b9 Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/sign-up.png differ diff --git a/docs/service-hooks/services/_img/appveyor/team-room-notification.png b/docs/service-hooks/services/_img/appveyor/team-room-notification.png new file mode 100644 index 00000000000..d780b98fafc Binary files /dev/null and b/docs/service-hooks/services/_img/appveyor/team-room-notification.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/add-service-hook.png b/docs/service-hooks/services/_img/azure-service-bus/add-service-hook.png new file mode 100644 index 00000000000..915995d380b Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/add-service-hook.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/azure-service-bus b/docs/service-hooks/services/_img/azure-service-bus/azure-service-bus new file mode 100644 index 00000000000..0388e370c73 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/azure-service-bus differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/configure-action.png b/docs/service-hooks/services/_img/azure-service-bus/configure-action.png new file mode 100644 index 00000000000..7360d6ff9be Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/configure-action.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/configure-event.png b/docs/service-hooks/services/_img/azure-service-bus/configure-event.png new file mode 100644 index 00000000000..ff35e5c6e8f Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/configure-event.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/configure-notification-action.png b/docs/service-hooks/services/_img/azure-service-bus/configure-notification-action.png new file mode 100644 index 00000000000..a9a5adc360a Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/configure-notification-action.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/configure-notification-event.png b/docs/service-hooks/services/_img/azure-service-bus/configure-notification-event.png new file mode 100644 index 00000000000..1eb5bd107a2 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/configure-notification-event.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/configure-topic-action.png b/docs/service-hooks/services/_img/azure-service-bus/configure-topic-action.png new file mode 100644 index 00000000000..5eb40a17ad0 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/configure-topic-action.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/configure-topic-event.png b/docs/service-hooks/services/_img/azure-service-bus/configure-topic-event.png new file mode 100644 index 00000000000..29c93a01d0b Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/configure-topic-event.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/connection-information.png b/docs/service-hooks/services/_img/azure-service-bus/connection-information.png new file mode 100644 index 00000000000..f14647843e2 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/connection-information.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/connection-string.png b/docs/service-hooks/services/_img/azure-service-bus/connection-string.png new file mode 100644 index 00000000000..c50cc8b1df4 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/connection-string.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/create-service-bus b/docs/service-hooks/services/_img/azure-service-bus/create-service-bus new file mode 100644 index 00000000000..0388e370c73 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/create-service-bus differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/create-service-bus.jpg b/docs/service-hooks/services/_img/azure-service-bus/create-service-bus.jpg new file mode 100644 index 00000000000..0388e370c73 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/create-service-bus.jpg differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/dashboard.png b/docs/service-hooks/services/_img/azure-service-bus/dashboard.png new file mode 100644 index 00000000000..8f7c4a7afa9 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/dashboard.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/namespace.png b/docs/service-hooks/services/_img/azure-service-bus/namespace.png new file mode 100644 index 00000000000..00bb4910a49 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/namespace.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/notification-hubs.png b/docs/service-hooks/services/_img/azure-service-bus/notification-hubs.png new file mode 100644 index 00000000000..ff7cdeb08c5 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/notification-hubs.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/queues.png b/docs/service-hooks/services/_img/azure-service-bus/queues.png new file mode 100644 index 00000000000..0a22b294c9c Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/queues.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/test-topic.png b/docs/service-hooks/services/_img/azure-service-bus/test-topic.png new file mode 100644 index 00000000000..e5ffe93ec3a Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/test-topic.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/test.png b/docs/service-hooks/services/_img/azure-service-bus/test.png new file mode 100644 index 00000000000..d01c1f702b7 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/test.png differ diff --git a/docs/service-hooks/services/_img/azure-service-bus/topics.png b/docs/service-hooks/services/_img/azure-service-bus/topics.png new file mode 100644 index 00000000000..118889d0901 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-service-bus/topics.png differ diff --git a/docs/service-hooks/services/_img/azure-storage/access-keys.png b/docs/service-hooks/services/_img/azure-storage/access-keys.png new file mode 100644 index 00000000000..903b51bf27e Binary files /dev/null and b/docs/service-hooks/services/_img/azure-storage/access-keys.png differ diff --git a/docs/service-hooks/services/_img/azure-storage/add-service-hook.png b/docs/service-hooks/services/_img/azure-storage/add-service-hook.png new file mode 100644 index 00000000000..915995d380b Binary files /dev/null and b/docs/service-hooks/services/_img/azure-storage/add-service-hook.png differ diff --git a/docs/service-hooks/services/_img/azure-storage/configure-action.png b/docs/service-hooks/services/_img/azure-storage/configure-action.png new file mode 100644 index 00000000000..b515fc5a801 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-storage/configure-action.png differ diff --git a/docs/service-hooks/services/_img/azure-storage/configure-event.png b/docs/service-hooks/services/_img/azure-storage/configure-event.png new file mode 100644 index 00000000000..e80922222c1 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-storage/configure-event.png differ diff --git a/docs/service-hooks/services/_img/azure-storage/create-storage-account.png b/docs/service-hooks/services/_img/azure-storage/create-storage-account.png new file mode 100644 index 00000000000..e70309ec66f Binary files /dev/null and b/docs/service-hooks/services/_img/azure-storage/create-storage-account.png differ diff --git a/docs/service-hooks/services/_img/azure-storage/manage-access-keys b/docs/service-hooks/services/_img/azure-storage/manage-access-keys new file mode 100644 index 00000000000..5f81f0ed139 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-storage/manage-access-keys differ diff --git a/docs/service-hooks/services/_img/azure-storage/manage-access-keys.png b/docs/service-hooks/services/_img/azure-storage/manage-access-keys.png new file mode 100644 index 00000000000..5f81f0ed139 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-storage/manage-access-keys.png differ diff --git a/docs/service-hooks/services/_img/azure-storage/new.png b/docs/service-hooks/services/_img/azure-storage/new.png new file mode 100644 index 00000000000..b6d7423dd69 Binary files /dev/null and b/docs/service-hooks/services/_img/azure-storage/new.png differ diff --git a/docs/service-hooks/services/_img/azure-storage/test.png b/docs/service-hooks/services/_img/azure-storage/test.png new file mode 100644 index 00000000000..0f908d0eacb Binary files /dev/null and b/docs/service-hooks/services/_img/azure-storage/test.png differ diff --git a/docs/service-hooks/services/_img/bamboo/alternate-credentials.png b/docs/service-hooks/services/_img/bamboo/alternate-credentials.png new file mode 100644 index 00000000000..02263128791 Binary files /dev/null and b/docs/service-hooks/services/_img/bamboo/alternate-credentials.png differ diff --git a/docs/service-hooks/services/_img/bamboo/configure-event.png b/docs/service-hooks/services/_img/bamboo/configure-event.png new file mode 100644 index 00000000000..830d5af0173 Binary files /dev/null and b/docs/service-hooks/services/_img/bamboo/configure-event.png differ diff --git a/docs/service-hooks/services/_img/bamboo/new-service-hook.png b/docs/service-hooks/services/_img/bamboo/new-service-hook.png new file mode 100644 index 00000000000..ea83a7ca186 Binary files /dev/null and b/docs/service-hooks/services/_img/bamboo/new-service-hook.png differ diff --git a/docs/service-hooks/services/_img/bamboo/repository-management-settings.png b/docs/service-hooks/services/_img/bamboo/repository-management-settings.png new file mode 100644 index 00000000000..035ae7b3bb3 Binary files /dev/null and b/docs/service-hooks/services/_img/bamboo/repository-management-settings.png differ diff --git a/docs/service-hooks/services/_img/bamboo/subscription.png b/docs/service-hooks/services/_img/bamboo/subscription.png new file mode 100644 index 00000000000..47620d5e0b4 Binary files /dev/null and b/docs/service-hooks/services/_img/bamboo/subscription.png differ diff --git a/docs/service-hooks/services/_img/bamboo/target-service.png b/docs/service-hooks/services/_img/bamboo/target-service.png new file mode 100644 index 00000000000..a490c8493e2 Binary files /dev/null and b/docs/service-hooks/services/_img/bamboo/target-service.png differ diff --git a/docs/service-hooks/services/_img/campfire/campfire-my-info.png b/docs/service-hooks/services/_img/campfire/campfire-my-info.png new file mode 100644 index 00000000000..2e8c5805b30 Binary files /dev/null and b/docs/service-hooks/services/_img/campfire/campfire-my-info.png differ diff --git a/docs/service-hooks/services/_img/campfire/campfire-service.png b/docs/service-hooks/services/_img/campfire/campfire-service.png new file mode 100644 index 00000000000..1a9945dabf6 Binary files /dev/null and b/docs/service-hooks/services/_img/campfire/campfire-service.png differ diff --git a/docs/service-hooks/services/_img/campfire/configure-action.png b/docs/service-hooks/services/_img/campfire/configure-action.png new file mode 100644 index 00000000000..b46aa1a6acd Binary files /dev/null and b/docs/service-hooks/services/_img/campfire/configure-action.png differ diff --git a/docs/service-hooks/services/_img/campfire/configure-event.png b/docs/service-hooks/services/_img/campfire/configure-event.png new file mode 100644 index 00000000000..4c2f98cb303 Binary files /dev/null and b/docs/service-hooks/services/_img/campfire/configure-event.png differ diff --git a/docs/service-hooks/services/_img/campfire/results.png b/docs/service-hooks/services/_img/campfire/results.png new file mode 100644 index 00000000000..5d76f3a7a61 Binary files /dev/null and b/docs/service-hooks/services/_img/campfire/results.png differ diff --git a/docs/service-hooks/services/_img/campfire/test.png b/docs/service-hooks/services/_img/campfire/test.png new file mode 100644 index 00000000000..d7a9f6023b4 Binary files /dev/null and b/docs/service-hooks/services/_img/campfire/test.png differ diff --git a/docs/service-hooks/services/_img/flowdock/add-flow.png b/docs/service-hooks/services/_img/flowdock/add-flow.png new file mode 100644 index 00000000000..89df3a4baff Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/add-flow.png differ diff --git a/docs/service-hooks/services/_img/flowdock/add-service-hook.png b/docs/service-hooks/services/_img/flowdock/add-service-hook.png new file mode 100644 index 00000000000..d3cad855bea Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/add-service-hook.png differ diff --git a/docs/service-hooks/services/_img/flowdock/chat-messages.png b/docs/service-hooks/services/_img/flowdock/chat-messages.png new file mode 100644 index 00000000000..fc9a69812e4 Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/chat-messages.png differ diff --git a/docs/service-hooks/services/_img/flowdock/configure-action.png b/docs/service-hooks/services/_img/flowdock/configure-action.png new file mode 100644 index 00000000000..62718eb719c Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/configure-action.png differ diff --git a/docs/service-hooks/services/_img/flowdock/configure-event.png b/docs/service-hooks/services/_img/flowdock/configure-event.png new file mode 100644 index 00000000000..f0adb24503b Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/configure-event.png differ diff --git a/docs/service-hooks/services/_img/flowdock/configure-flow.png b/docs/service-hooks/services/_img/flowdock/configure-flow.png new file mode 100644 index 00000000000..7578cf4b31e Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/configure-flow.png differ diff --git a/docs/service-hooks/services/_img/flowdock/create-flow.png b/docs/service-hooks/services/_img/flowdock/create-flow.png new file mode 100644 index 00000000000..2542989c078 Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/create-flow.png differ diff --git a/docs/service-hooks/services/_img/flowdock/flowdock-service.png b/docs/service-hooks/services/_img/flowdock/flowdock-service.png new file mode 100644 index 00000000000..c20611f591a Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/flowdock-service.png differ diff --git a/docs/service-hooks/services/_img/flowdock/inbox-admin.png b/docs/service-hooks/services/_img/flowdock/inbox-admin.png new file mode 100644 index 00000000000..2113af2325f Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/inbox-admin.png differ diff --git a/docs/service-hooks/services/_img/flowdock/manage-inbox-sources.png b/docs/service-hooks/services/_img/flowdock/manage-inbox-sources.png new file mode 100644 index 00000000000..870a29ec0ec Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/manage-inbox-sources.png differ diff --git a/docs/service-hooks/services/_img/flowdock/test.png b/docs/service-hooks/services/_img/flowdock/test.png new file mode 100644 index 00000000000..ae8a1528024 Binary files /dev/null and b/docs/service-hooks/services/_img/flowdock/test.png differ diff --git a/docs/service-hooks/services/_img/hipchat/configure-action.png b/docs/service-hooks/services/_img/hipchat/configure-action.png new file mode 100644 index 00000000000..9542e70c204 Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/configure-action.png differ diff --git a/docs/service-hooks/services/_img/hipchat/configure-event.png b/docs/service-hooks/services/_img/hipchat/configure-event.png new file mode 100644 index 00000000000..9410045c01f Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/configure-event.png differ diff --git a/docs/service-hooks/services/_img/hipchat/create-hipchat-token.png b/docs/service-hooks/services/_img/hipchat/create-hipchat-token.png new file mode 100644 index 00000000000..018438c1255 Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/create-hipchat-token.png differ diff --git a/docs/service-hooks/services/_img/hipchat/create-service-hook.png b/docs/service-hooks/services/_img/hipchat/create-service-hook.png new file mode 100644 index 00000000000..0d9fe616159 Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/create-service-hook.png differ diff --git a/docs/service-hooks/services/_img/hipchat/hipchat-account-settings.png b/docs/service-hooks/services/_img/hipchat/hipchat-account-settings.png new file mode 100644 index 00000000000..ac051ee1c0d Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/hipchat-account-settings.png differ diff --git a/docs/service-hooks/services/_img/hipchat/hipchat-api-access.png b/docs/service-hooks/services/_img/hipchat/hipchat-api-access.png new file mode 100644 index 00000000000..74bfb6d970f Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/hipchat-api-access.png differ diff --git a/docs/service-hooks/services/_img/hipchat/hipchat-password.png b/docs/service-hooks/services/_img/hipchat/hipchat-password.png new file mode 100644 index 00000000000..940507649af Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/hipchat-password.png differ diff --git a/docs/service-hooks/services/_img/hipchat/hipchat-room.png b/docs/service-hooks/services/_img/hipchat/hipchat-room.png new file mode 100644 index 00000000000..d512ac6557f Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/hipchat-room.png differ diff --git a/docs/service-hooks/services/_img/hipchat/hipchat-service.png b/docs/service-hooks/services/_img/hipchat/hipchat-service.png new file mode 100644 index 00000000000..ad87a162c28 Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/hipchat-service.png differ diff --git a/docs/service-hooks/services/_img/hipchat/hipchat-token.png b/docs/service-hooks/services/_img/hipchat/hipchat-token.png new file mode 100644 index 00000000000..8ee7306318a Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/hipchat-token.png differ diff --git a/docs/service-hooks/services/_img/hipchat/test.png b/docs/service-hooks/services/_img/hipchat/test.png new file mode 100644 index 00000000000..5e1539155a8 Binary files /dev/null and b/docs/service-hooks/services/_img/hipchat/test.png differ diff --git a/docs/service-hooks/services/_img/hubot/hubot-http-action.png b/docs/service-hooks/services/_img/hubot/hubot-http-action.png new file mode 100644 index 00000000000..192e761375d Binary files /dev/null and b/docs/service-hooks/services/_img/hubot/hubot-http-action.png differ diff --git a/docs/service-hooks/services/_img/hubot/hubot.png b/docs/service-hooks/services/_img/hubot/hubot.png new file mode 100644 index 00000000000..af7fe8c407d Binary files /dev/null and b/docs/service-hooks/services/_img/hubot/hubot.png differ diff --git a/docs/service-hooks/services/_img/hubot/select-event.png b/docs/service-hooks/services/_img/hubot/select-event.png new file mode 100644 index 00000000000..5c7790c0b9f Binary files /dev/null and b/docs/service-hooks/services/_img/hubot/select-event.png differ diff --git a/docs/service-hooks/services/_img/hubot/select-hubot.png b/docs/service-hooks/services/_img/hubot/select-hubot.png new file mode 100644 index 00000000000..fef86dea1ae Binary files /dev/null and b/docs/service-hooks/services/_img/hubot/select-hubot.png differ diff --git a/docs/service-hooks/services/_img/jenkins/alternate-credentials.png b/docs/service-hooks/services/_img/jenkins/alternate-credentials.png new file mode 100644 index 00000000000..02263128791 Binary files /dev/null and b/docs/service-hooks/services/_img/jenkins/alternate-credentials.png differ diff --git a/docs/service-hooks/services/_img/jenkins/configure-event.png b/docs/service-hooks/services/_img/jenkins/configure-event.png new file mode 100644 index 00000000000..8b5c6bfaa59 Binary files /dev/null and b/docs/service-hooks/services/_img/jenkins/configure-event.png differ diff --git a/docs/service-hooks/services/_img/jenkins/my-build.png b/docs/service-hooks/services/_img/jenkins/my-build.png new file mode 100644 index 00000000000..e04ce228cef Binary files /dev/null and b/docs/service-hooks/services/_img/jenkins/my-build.png differ diff --git a/docs/service-hooks/services/_img/jenkins/new-item.png b/docs/service-hooks/services/_img/jenkins/new-item.png new file mode 100644 index 00000000000..f2bdc7a3e64 Binary files /dev/null and b/docs/service-hooks/services/_img/jenkins/new-item.png differ diff --git a/docs/service-hooks/services/_img/jenkins/source-code-management-settings.png b/docs/service-hooks/services/_img/jenkins/source-code-management-settings.png new file mode 100644 index 00000000000..052fba5cbda Binary files /dev/null and b/docs/service-hooks/services/_img/jenkins/source-code-management-settings.png differ diff --git a/docs/service-hooks/services/_img/jenkins/subscription.png b/docs/service-hooks/services/_img/jenkins/subscription.png new file mode 100644 index 00000000000..f4844cbb70d Binary files /dev/null and b/docs/service-hooks/services/_img/jenkins/subscription.png differ diff --git a/docs/service-hooks/services/_img/jenkins/target-service.png b/docs/service-hooks/services/_img/jenkins/target-service.png new file mode 100644 index 00000000000..f2e969dcc90 Binary files /dev/null and b/docs/service-hooks/services/_img/jenkins/target-service.png differ diff --git a/docs/service-hooks/services/_img/kato/add-service-hook.png b/docs/service-hooks/services/_img/kato/add-service-hook.png new file mode 100644 index 00000000000..915995d380b Binary files /dev/null and b/docs/service-hooks/services/_img/kato/add-service-hook.png differ diff --git a/docs/service-hooks/services/_img/kato/configure-action.png b/docs/service-hooks/services/_img/kato/configure-action.png new file mode 100644 index 00000000000..1d804735d88 Binary files /dev/null and b/docs/service-hooks/services/_img/kato/configure-action.png differ diff --git a/docs/service-hooks/services/_img/kato/configure-event.png b/docs/service-hooks/services/_img/kato/configure-event.png new file mode 100644 index 00000000000..02715aba63e Binary files /dev/null and b/docs/service-hooks/services/_img/kato/configure-event.png differ diff --git a/docs/service-hooks/services/_img/kato/here.htm b/docs/service-hooks/services/_img/kato/here.htm new file mode 100644 index 00000000000..cffa05a54fd --- /dev/null +++ b/docs/service-hooks/services/_img/kato/here.htm @@ -0,0 +1,2 @@ + + + +1. Create a new project. + + Create new project + +1. Add a Git repository from your VSTS account. + + Add VSTS Git project + + Now an AppVeyor CI build will start whenever you push code to your repository in Visual Studio Team Services. + + Build results + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + + + +####Q: Do I need to sign into AppVeyor using my VSTS ID in order to setup this integration? + +A: No. If you use an account that's not already assocaited with your Visual Studio ID, +you'll authorize access to your VSTS account when you add Git repositories from Visual Studio Team Services. + +####Q: Does AppVeyor change anything in my VSTS account? + +A: Yes. It adds a service hook subscription to your team project. + +VSTS AppVeyor consumer added + +####Q: What happens if I remove the AppVeryor project? + +A: The AppVeyor service hook subscription is removed from Visual Studio Team Services. + +####Q: Can I get notification of AppVeyor builds in my VSTS team room? + +A: Yes, you can set that up in the AppVeyor Notifications page. + +Configure team room notifications + +####Q: If I reconfigure AppVeyor from Visual Studio Team Services, where do I get the webhook ID used by AppVeyor? + +A: From the projects settings: + +Project settings + +####Q: Where can I get more information about AppVeyor? + +A: [AppVeyor.com](http://appveyor.com). + + diff --git a/docs/service-hooks/services/azure-service-bus.md b/docs/service-hooks/services/azure-service-bus.md new file mode 100644 index 00000000000..5806d0fd293 --- /dev/null +++ b/docs/service-hooks/services/azure-service-bus.md @@ -0,0 +1,194 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Azure Service Bus with Visual Studio Team Services +description: Use Azure Service Bus with your VSTS account +ms.assetid: bffe0cee-2c1c-4e7a-adbe-f6dc6a94f735 +ms.manager: douge +ms.author: elbatk +ms.date: 08/16/2016 +--- + +# Microsoft Azure service bus with Visual Studio Team Services + +The Microsoft Azure service bus provides messaging between services and applications. +You can choose the type of service bus you want to send VSTS messages to: + +- **Queue:** The Service Bus queue is a simple process. +A sender sends a message to a queue, and a receiver +picks up that message at a later time. A queue is limited to a single receiver. + +- **Topics:** Topics are similar to queues, but they let +each receiving application create its own subscription by defining a filter. +A subscriber will see only the messages that match that filter. + +- **Notification hub:** Use a notification hub to implement push notifications. +Notification hubs work for both consumer and enterprise applications +for mobile platforms including Windows Store, Windows Phone 8, IOS and Android. + +## Create a Microsoft Azure service bus namespace + +1. If you don't have a Microsoft Azure account, get one here. + +2. In the Microsoft Azure portal, in the navigation pane select **SERVICE BUS** +and then create a new namespace. + + Select or create a service bus + +3. Enter a name for the namespace and choose a region. + + Specify namespace and region + +4. View the connection information for the namespace. + + View the connection information + + +5. Copy the SAS connection string. You will need to provide this value +when you create a Service Hook subscription. + + Copy the connection string + +## Send messages to the service bus queue + +1. In the Azure portal, verify the queue you want to use, or create one. + + Azure Service Bus Queue + +2. Create or modify your app's code to receive Visual Studio Team Services +messages using a Azure Service Bus queue. For details, go [here](http://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-queues/). + +3. Open the admin page for the team project in Visual Studio Team Services. + +4. On the **Service Hooks** tab, run the subscription wizard. + + For details about the subscription wizard, go [here](../index.md). + + Add a service hook + +5. Pick and configure the VSTS event. + + Configure the event + +6. Configure what to do when the action occurs. In this case, +to send Visual Studio messages to a service bus queue. +For the SAS connection string, use the value that you copied earlier +from the namespace connection information page. + + Configure the action + +7. Test the service hook subscription and finish the wizard. + + Azure Service Bus Queue Test + +Now the messages are set up. +You can verify this in your application or service. + +## Send messages to the service bus topic + +1. In the Azure portal, verify the queue you want to use, or create one. + + Azure Service Bus Topic + +2. Create or modify your app's code to recieve +VSTS messages using a Azure Service Bus topic. +For details, go [here](http://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-topics-subscriptions/). + +3. Open the admin page for the team project in Visual Studio Team Services. + +4. On the **Service Hooks** tab, run the subscription wizard. + + For details about the subscription wizard, go [here](../index.md). + + Add a service hook + +5. Pick and configure the VSTS event. + + Configure the event + +6. Configure what to do when the event occurs. In this case, +to send Visual Studio messages to a service bus topic. +For the SAS connection string, use the value that you copied earlier +from the namespace connection information page. + + Configure the action + +7. Test the service hook subscription and finish the wizard. + + Azure Service Bus Topic Action + +Now the messages are set up. You can verify this in your application or service. + +You can also observe activity in the Windows Azure dashboard. + +Azure Service Bus Topic Result + +## Send messages to the notification hub + +Push VSTS messages to your application using a notification hub. +For more information about notification hubs go [here](https://msdn.microsoft.com/en-us/library/azure/jj891130.aspx/). + +1. In the Azure portal, verify the notification hub you want to use, or create one. + + Azure Service Bus notifications + +2. Create or modify an app to receive messages from VSTS through the notification hub. +The steps and code required to set up your app depend on the target platform (Windows Store, Windows Phone 8, IOS, or Android). +For details, go [here](http://azure.microsoft.com/en-us/documentation/services/notification-hubs/). + +3. Open the admin page for the team project in Visual Studio Team Services. + +4. On the **Service Hooks** tab, run the subscription wizard. + + For details about the subscription wizard, go [here](../index.md). + + Add a sevice hook + +5. Pick and configure the VSTS event. + + Configure the event + +6. Configure what to do when the event occurs. In this case, +to send Visual Studio messages to a service bus notification hub. +For the SAS connection string, use the value that you copied earlier +from the namespace connection information page. +You can use tags to filter the messages to specific registered apps +or users. For more information regarding tags go [here](https://msdn.microsoft.com/library/azure/dn530749.aspx/). + + Configure the action + +7. Test the service hook subscription and finish the wizard. + +Now the messages are set up. +You can verify this in your application or service. + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + + + +#### Q: When using VSTS service hooks connected to a Azure notification hub, how do I pass parameters in a push notification template? + +A: Use the following taking care to concatenate the variable and value in the param node: + +``` + "" + + "" + + "" + + "" + "{'?VariableName='" + "$(parameter)" + "}" + + "" + + ""; +``` + +#### Q: Can I get more information about the differences between service bus queues and service bus topics? + +A: Get more details [here](http://azure.microsoft.com/en-us/documentation/articles/fundamentals-service-bus-hybrid-solutions/). + +#### Q: Can I programmatically create subscriptions? + +A: Yes. See details [here](../create-subscription.md). + + \ No newline at end of file diff --git a/docs/service-hooks/services/azure-storage.md b/docs/service-hooks/services/azure-storage.md new file mode 100644 index 00000000000..99b978c79c0 --- /dev/null +++ b/docs/service-hooks/services/azure-storage.md @@ -0,0 +1,132 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Azure Storage with Visual Studio Team Services +description: Use Azure Storage with your VSTS account +ms.assetid: ca016666-8e07-42a6-a6c5-09fceba179da +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Azure Storage Queue + +Insert a JSON string message in a storage queue in response to +[events](../events.md) from Visual Studio Team Services. +For example, you can insert a queue message when a work item is created or changed, or a build occurs. + +The storage queue provides reliable, persistent messaging within and between services. +Messages can be accessed from anywhere in the world via authenticated calls using HTTP or HTTPS. +A single queue message can be up to 64 KB in size, +and a queue can contain millions of messages, up to the total capacity limit of a storage account. + +## Create a Microsoft Azure storage account + +1. If you don't have a Microsoft Azure account, get one [here](http://azure.microsoft.com/). + +2. In the Microsoft Azure portal, at the bottom of the navigation pane, click **NEW**. + + Click NEW + +3. Click **DATA SERVICES**, then **STORAGE**, and then click **QUICK CREATE**. + + - In URL, type a subdomain name to use in the URI for the storage account. + The entry can contain from 3-24 lowercase letters and numbers. + This value becomes the host name within the URI that is used + to address Blob, Queue, or Table resources for the subscription. + + - Choose a Region/Affinity Group in which to locate the storage. + If you plan to use storage from your Azure application, + select the same region where you will deploy your application. + + - Optionally, you can enable geo-replication. + + - Click **CREATE STORAGE ACCOUNT**. + + Configure new storage account + +4. Select the storage account and click **MANAGE ACCESS KEYS**. + + Open manage access keys + +5. Copy the storage account name and primary acccess key. +You need to provide these values when you create a Service Hook subscription. + + Copy name and primary key values + +You do not have to add a storage queue. +This can be done when you create a service hook subscription. + +## Create a service hook subscription + +1. Open the admin page for the team project in Visual Studio Team Services. + +2. On the **Service Hooks** tab, run the subscription wizard. + + For details about the subscription wizard, go [here](../index.md). + + Add a service hook + +3. Pick the VSTS event to use as a trigger to insert a message in a storage queue. + + Configure the event + +4. Enter the storage account name and the queue where you want to insert the event into. For the account key, use the primary access key value that you copied when you managed the access keys. + + Configure the action + +5. Test the service hook subscription and finish the wizard. + + Test the subscription + +Now the event is set up. +Your messages are put into the Azure storage queue and are available for reading. + +## Reading messages from the queue (.NET Framework) + +An event matching a Service Hook subscription will be added +to the selected storage queue as a JSON string. +You can then use APIs provided by the Microsoft Azure SDK +for .NET Framework (and other languages) to access the message: + +1. [How to: Peek at the next message](http://www.windowsazure.com/en-us/develop/net/how-to-guides/queue-service/#peek-message) + +2. [How to: Dequeue the next message](http://www.windowsazure.com/en-us/develop/net/how-to-guides/queue-service/#get-message) + +Example: + +``` + // Retrieve storage account from connection string + CloudStorageAccount storageAccount = CloudStorageAccount.Parse( + CloudConfigurationManager.GetSetting("StorageConnectionString")); + + // Create the queue client + CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); + + // Retrieve a reference to a queue + CloudQueue queue = queueClient.GetQueueReference("myqueue"); + + // Get the next message + CloudQueueMessage retrievedMessage = queue.GetMessage(); + + //Process the message in less than 30 seconds, and then delete the message + queue.DeleteMessage(retrievedMessage); +``` + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + + + +#### Q: Can I get more information about Microsoft Azure storage? + +A: Yes, go [here](http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-queues/). + +#### Q: Can I programmatically create subscriptions? + +A: Yes, see details [here](../../integrate/get-started/service-hooks/create-subscription. + + \ No newline at end of file diff --git a/docs/service-hooks/services/bamboo.md b/docs/service-hooks/services/bamboo.md new file mode 100644 index 00000000000..64b6970023c --- /dev/null +++ b/docs/service-hooks/services/bamboo.md @@ -0,0 +1,86 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Bamboo with Visual Studio Team Services +description: Use Atlassian Bamboo with your VSTS account +ms.assetid: a5cb1028-9b46-4106-9fdd-5b8059b4dedd +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Bamboo with Visual Studio Team Services + +If you use Bamboo to build your apps, you can store your code in Visual Studio Team Services +and continue to use Bamboo for your continuous integration builds. +You can trigger a Bamboo build when you push code to your team project's +Git repository, when you check code in to Team Foundation version control, +or when a VSTS build finishes. + +## Configure Bamboo + +1. If you haven't already, set up a [Bamboo](https://www.atlassian.com/software/bamboo/) server. + +2. If you use Bamboo on-premises, [enable HTTPS](https://confluence.atlassian.com/display/BAMBOO/Advanced+actions) on your Bamboo server. + +3. If your team project uses Team Foundation version control and not Git, install the [TFS respository add-on](https://marketplace.atlassian.com/search?q=tfs) for Bamboo. + +## Enable VSTS basic authentication +1. If you haven't already, enable [alternate credentials](https://www.visualstudio.com/en-us/integrate/get-started/auth/overview/) in your VSTS profile. +Be sure to set a secondary user name because you won't be able to use your email address +to connect VSTS to Bamboo. + + Profile, credentials tab, alternative credentials enabled wiht a secondary user name + +## Set up a Bamboo build plan + +1. In Bamboo, create a new plan by choosing **Create** > **Create a new plan** from the menu bar. + +2. Under **Link repository to new build plan**, choose **Other** > **Git** and set the URL for your Git repository in Visual Studio Team Services. +The URL is in the form ```https://{Team Services account}.visualstudio.com/DefaultCollection/_git/{team project name}```. + +3. Next to **Authentication Type**, choose **Username/password** and enter the [alternate credentials](https://www.visualstudio.com/en-us/integrate/get-started/auth/overview/) of a VSTS account with read access to the repository. + + Repository settings with Git selected + +## Trigger Bamboo from VSTS + +1. Go to your team project's administration page. + + Team project administraton icon + +2. On the Service Hooks tab, create a subscription. + + Service hooks page, add icon + +3. Add Bamboo. + + Select target service dialog box, Bamboo selected + +4. Pick the event from VSTS that you want to trigger a build in Bamboo. + + Configure event dialog box + +5. Configure the action you want Bamboo to take. + + New service hook subscription dialog box + +Now, when that event occurs in Visual Studio Team Services, your Bamboo build will be triggered. + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + + + +#### Q: Can I build part of my app in VSTS and part in Bamboo? + +A: Yes. You can trigger a Bamboo build when your VSTS build is completed so that you use both systems to build your app. + +#### Q: Can I programmatically create subscriptions? + +A: Yes, use [REST APIs](../create-subscription.md). + + \ No newline at end of file diff --git a/docs/service-hooks/services/campfire.md b/docs/service-hooks/services/campfire.md new file mode 100644 index 00000000000..881aafacb3b --- /dev/null +++ b/docs/service-hooks/services/campfire.md @@ -0,0 +1,63 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Campfire with Visual Studio Team Services +description: Use Campfire with your VSTS account +ms.assetid: 38a3f329-96c5-49a2-a88d-523356c496f0 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Notifications and Campfire + +Post messages to a room in Campfire in response to events from Visual Studio Team Services. +For example, you can post a message when a work item is created or changed, or a build occurs. + +## Get a Campfire authorization token + +1. If you don't have a Campfire account, get one [here](https://campfirenow.com/signup), and create a room. + +2. Copy the token from your Campfire profile page. + + Campfire + +## Post messages to a room + +1. On the team project page in the service hooks tab, run the subscription wizard. + + Add service hook + +3. Configure the VSTS event that will post a message in a Campfire room. + + Configure event + +4. Configure the action with your Campfire account name, authentication token and room. + + Configure action + +5. Test the service hook subscription and finish the wizard. + + Test it + + Now the messages are set up. Go to Campfire and see the messages. + + Results + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + + + +####Q: Can I programmatically create subscriptions? + +A: Yes, see details [here](http://www.visualstudio.com/integrate/get-started/get-started-service-hooks-creating-and-managing-vsi). + +####Q: Where can I get more information about Campfire? + +A: At [campfirenow.com](https://campfirenow.com/). + + \ No newline at end of file diff --git a/docs/service-hooks/services/flowdock.md b/docs/service-hooks/services/flowdock.md new file mode 100644 index 00000000000..72475d3070f --- /dev/null +++ b/docs/service-hooks/services/flowdock.md @@ -0,0 +1,86 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Flowdock with Visual Studio Team Services +description: Use Flowdock with your VSTS account +ms.assetid: 191c21d1-17d7-4d33-9a5f-231bc70edd0f +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Notifications and Flowdock + +VSTS can post messages to your flow in Flowdock +so everyone will know when code has been pushed or checked in, +a build has finished, or a work item has been created or updated. + +## Set up a flow + +1. If you don't have a Flowdock account, get one [here](https://flowdock.com/signup). + +1. In Flowdock, add a flow. + + Flowdock page, add icon + +1. Create the flow. + + Create a new flow + +1. Configure the flow. + + Configure the flow + +1. Go to the flow's administration page. + + Administer the flow's inbox sources + +1. Get the API token. + + Copy the API token + +## Use a service hook to push messages + +1. In Visual Studio Team Services, open your team project's administration page. + +1. Add a service hook. + + Add service hook + +1. Choose Flowdock + + Flowdock selected in the service dialog box + +1. Configure the VSTS event that will push a message to Flowdock. + + Configure event + +1. Tell Flowdock what action to take. + + Configure action + +1. Test the service hook subscription and finish the wizard. + + Test it + +Now messages will be posted to your flow in Flowdock. + +Messages appear in flow + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + + + +####Q: Can I programmatically create subscriptions? + +A: Yes, see details [here](http://www.visualstudio.com/integrate/get-started/service-hooks/create-subscription.md). + +####Q: Where can I get more information about Flowdock? + +A: At [flowdock.com](https://www.flowdock.com/). + + \ No newline at end of file diff --git a/docs/service-hooks/services/hipchat.md b/docs/service-hooks/services/hipchat.md new file mode 100644 index 00000000000..e7d0665e5a1 --- /dev/null +++ b/docs/service-hooks/services/hipchat.md @@ -0,0 +1,77 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: HipChat with Visual Studio Team Services +description: Use HipChat with your VSTS account +ms.assetid: 43ef12ac-4541-436c-b6df-343e6e321cf9 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# HipChat with Visual Studio Team Services + +Post messages to a room in HipChat in response to events from Visual Studio Team Services. +For example, when code is pushed, or a build occurs. + +Get a HipChat authorization token + +1. If you don't have a HipChat account, get one [here](https://hipchat.com/). + +2. In HipChat, get a room token. + + Create the token + +3. Copy the token. + + Copy the token + +## Post a message to a room + +1. Open the admin page for the team project in Visual Studio Team Services. + +2. On the Service Hooks tab, create a subscription. + + Create a service hook + +3. Choose HipChat. + + Select service dialog, HipChat selected + +3. Configure the VSTS event that you want to post a message in HipChat. + + Configure the event + +4. Tell HipChat what to do when the event occurs. + + Configure the action + +5. Test the service hook subscription and finish the wizard. + + Test it + +Now the messages are setup. Go to HipChat and see the messages appear. + +HipChat room + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + + + +####Q: Can I programmatically create subscriptions? + +A: Yes, see details [here](../create-subscription.md). + +####Q: Where can I get more information about HipChat? + +A: At [hipchat.com](https://www.hipchat.com/). + + + + + + diff --git a/docs/service-hooks/services/hubot.md b/docs/service-hooks/services/hubot.md new file mode 100644 index 00000000000..42ecc998a7b --- /dev/null +++ b/docs/service-hooks/services/hubot.md @@ -0,0 +1,96 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Hubot with Visual Studio Team Services +description: Use Hubot with your VSTS account +ms.assetid: FA7D521A-4B4A-43A8-8443-F86687B46339 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Hubot with Visual Studio Team Services + +Using Hubot, you can type a command in your VSTS team room +to create a work item, queue a build, recall what you last worked on, and more. +For example, create a bug by typing "hubot vso create bug Error in latest service code" +or assign a work item with the command "hubot vso assign 123 to Sally". +And you can add scripts to extend what your Hubot service can do. + +Hubot chat + +## Set up Hubot + +Set up a Hubot instance and configure the VSTS adapter +to accept messages from a team room in Visual Studio Team Services. + +1. If you don't already have your own Hubot instance, set one up. +A good way to do that is to deploy Hubot to an Azure web site. + + 1. Create an Azure web site enabled for local Git deployment. + + 2. Create your own Hubot instance locally by cloning [Hubot](https://github.com/github/hubot). + +2. Add the [VSTS adapter for Hubot](https://github.com/scrumdod/hubot-VSOnline). + +3. Add the [VSTS scripts for Hubot](https://github.com/scrumdod/vso-hubotscripts). + +4. Push your configured Hubot instance to your web site. + +5. Set the necessary configuration parameters on your site, +including HUBOT_ADAPTER=vsonline, and start it. + +6. Create a service hook subscription in your VSTS project +that sends messages from a team room to your Hubot instance. + +Here are more [detailed instructions](https://github.com/scrumdod/hubot-VSOnline) +for deploying a Hubot instance to an Azure web site. + +## Subscribe Hubot to team room messages in Visual Studio Team Services + +Now that you've set up Hubot, create a service hook subscription +that will forward messages in a VSTS team room +to your Hubot instance. + +1. Go to a team project in your VSTS account +and open the project adminstration page. + +2. On the service hooks tab, add a service hook. + +3. Select the Hubot service. + + + +4. Configure an event to trigger when there are messages posted in your team room. + + + +5. Select the **Post a message** action from the drop-down and supply the full URL and user name and password of your Hubot instance. + + + +6. Click **Finish** to save the subscription. + +Now when you post commands starting with "hubot" to the selected room, Hubot will receive the command and respond back to that room. + +## Commands + +Here are the available VSTS commands available to users: + +* ```vso assign to ```: Assigns one more or more work item(s) to a user (comma separated ids) +* ```vso build ```: Triggers a build +* ```vso builds```: Shows a list of build definitions +* ```vso commits [last days]```: Shows a list of commits you have made in the last day (or specified number of days) +* ```vso create pbi|bug|feature|impediment|task with description <description>```: Creates a work item, and optionally sets a description (repro step for some work item types) +* ```vso forget credentials```: Removes the access token issued to Hubot when you accepted the authorization request +* ```vso help <search text>```: Get help from VS related forums about the <search text> +* ```vso me```: Shows info about your VSTS profile +* ```vso projects```: Shows a list of projects +* ```vso room default <key> = <value>```: Sets a room default project, etc. +* ```vso room defaults```: Shows room defaults (e.g. project, etc) +* ```vso status```: Shows status for the VSTS service +* ```vso today```: Shows work items you have touched and code commits you have made today + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. \ No newline at end of file diff --git a/docs/service-hooks/services/jenkins.md b/docs/service-hooks/services/jenkins.md new file mode 100644 index 00000000000..ff53f7ac823 --- /dev/null +++ b/docs/service-hooks/services/jenkins.md @@ -0,0 +1,87 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Jenkins with Visual Studio Team Services +description: Use Jenkins with your VSTS account +ms.assetid: 3e9cf797-092f-48da-a515-e4d0cc93c4a1 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Jenkins with Visual Studio Team Services + +If you use Jenkins to build your apps, you can store your code in Visual Studio Team Services +and continue to use Jenkins for your continuous integration builds. +You can trigger a Jenkins build when you push code to your team project's +Git repository or when you check code in to Team Foundation version control. + +## Configure Jenkins + +1. If you haven't already, set up a [Jenkins](http://jenkins-ci.org/) server. + +2. If you're setting up Jenkins on-premises, [enable HTTPS](https://wiki.jenkins-ci.org/display/JENKINS/Starting+and+Accessing+Jenkins). + +## Set up a Jenkins build + +1. In Jenkins, create a new item. + + <img alt="New item link in Jenkins" src="./_img/jenkins/new-item.png" style="border: 1px solid #CCCCCC" /> + +2. Create the type of build that's appropriate for your project. + + <img alt="Build name and type in Jenkins" src="./_img/jenkins/my-build.png" style="border: 1px solid #CCCCCC" /> + +3. Set the URL for your Git repository in Visual Studio Team Services. +The URL is in the form ```https://{Team Services account}.visualstudio.com/DefaultCollection/_git/{team project}```. + + <img alt="Source code management settings with Git selected" src="./_img/jenkins/source-code-management-settings.png" style="border: 1px solid #CCCCCC" /> + +## Trigger Jenkins from VSTS + +1. If you haven't already, enable alternate credentials in your VSTS profile. +Be sure to set a secondary user name because you won't be able to use your email account +to connect VSTS to Jenkins. + + <img alt="Profile, credentials tab, alternative credentials enabled with a secondary user name" src="./_img/jenkins/alternate-credentials.png" style="border: 1px solid #CCCCCC" /> + +2. Go to your team project's administration page. + + <img alt="Team project administraton icon" src="./_img/admin-700.png" style="border: 1px solid #CCCCCC" /> + +3. On the Service Hooks tab, create a subscription. + + <img alt="Service hooks page, add" src="./_img/add-service-hook.png" style="border: 1px solid #CCCCCC" /> + +4. Add Jenkins. + + <img alt="Select target service dialog box, Jenkins selected" src="./_img/jenkins/target-service.png" style="border: 1px solid #CCCCCC" /> + +5. Pick the event from VSTS that you want to trigger a Jenkins build. + + <img alt="Configure event dialog box" src="./_img/jenkins/configure-event.png" style="border: 1px solid #CCCCCC" /> + +6. Configure the action to take in Jenkins. + + <img alt="New service hook subscription dialog box" src="./_img/jenkins/subscription.png" style="border: 1px solid #CCCCCC" /> + +Now, when that event occurs in Visual Studio Team Services, your Jenkins build will be triggered. + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + +<!-- BEGINSECTION class="m-qanda" --> + +#### Q: Can I build part of my app in VSTS and part in Jenkins? + +A: Yes. You can trigger a Jenkins build when your VSTS build is completed so that you use both systems to build your app. + +#### Q: Can I programmatically create subscriptions? + +A: Yes, use [REST APIs](../create-subscription.md). + +<!-- ENDSECTION --> \ No newline at end of file diff --git a/docs/service-hooks/services/myget.md b/docs/service-hooks/services/myget.md new file mode 100644 index 00000000000..9e7f53c7abe --- /dev/null +++ b/docs/service-hooks/services/myget.md @@ -0,0 +1,87 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: MyGet with Visual Studio Team Services +description: Use MyGet with your VSTS account +ms.assetid: 2fcfead5-4f59-4b49-b55d-3199919e21c3 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# MyGet with Visual Studio Team Services + +Use a MyGet feed for the following integration scenarios with Visual Studio Team Services: + +- When code is pushed to a Git repository in Visual Studio Team Services, MyGet pulls the code, builds it, and adds any resulting NuGet packages to a feed. +- When a NuGet package is built in Visual Studio Team Services, MyGet downloads the package and adds it to a feed. + +## Create and configure a MyGet feed + +1. If you don't have a MyGet account, get one [here](http://myget.org/). + +2. In MyGet, add a feed. + + <img alt="Add a feed" src="./_img/myget/new-feed.png" style="border: 1px solid #CCCCCC" /> + +3. Configure the feed. + + <img alt="Enter the URL and create the feed" src="./_img/myget/create-feed.png" style="border: 1px solid #CCCCCC" /> + +## Build and deploy a package when code is pushed + +2. Add VSTS to your feed as a build source. + + <img alt="Add VSTS Git" src="./_img/myget/add-build-source.png" style="border: 1px solid #CCCCCC" /> + +3. Use your VSTS account. + + <img alt="Enter the name of your VSTS account" src="./_img/myget/vso-account.png" style="border: 1px solid #CCCCCC" /> + +4. Authorize MyGet to access you VSTS account. + + <img alt="Accept the permission request" src="./_img/myget/authorize.png" style="border: 1px solid #CCCCCC" /> + +5. Configure the build source. + + <img alt="Link build source" src="./_img/myget/link-build-source.png" style="border: 1px solid #CCCCCC" /> + + Now the feed is set up. When code is pushed, view the status of the triggered MyGet builds. + + <img alt="Triggered build" src="./_img/myget/triggered-build.png" style="border: 1px solid #CCCCCC" /> + +## Deploy a package built on Visual Studio Team Services + +2. Add the VSTS build definition as a package source for your feed. + + <img alt="Choose VSTS build definition" src="./_img/myget/add-package-source.png" style="border: 1px solid #CCCCCC" /> + +3. Use your VSTS account. + + <img alt="Enter your VSTS account name" src="./_img/myget/vso-account.png" style="border: 1px solid #CCCCCC" /> + +4. Authorize MyGet to access your VSTS account. + + <img alt="Accept the permission request" src="./_img/myget/authorize.png" style="border: 1px solid #CCCCCC" /> + +5. Choose a build definition that includes a NuGet package in the build drop. + + <img alt="Configure build definition" src="./_img/myget/configure-build-definition.png" style="border: 1px solid #CCCCCC" /> + + You've defined the package source. + + <img alt="The name and source appear in the new feed" src="./_img/myget/completed-feed.png" style="border: 1px solid #CCCCCC" /> + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + +<!-- BEGINSECTION class="m-qanda" --> + +#### Q: Where can I get more information about MyGet? + +A: At [myget.org](http://www.myget.org/). + +<!-- ENDSECTION --> diff --git a/docs/service-hooks/services/slack.md b/docs/service-hooks/services/slack.md new file mode 100644 index 00000000000..c59eb2294ad --- /dev/null +++ b/docs/service-hooks/services/slack.md @@ -0,0 +1,71 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Slack with Visual Studio Team Services +description: Use Slack with your VSTS account +ms.assetid: ea948249-1053-4971-99b9-ffa820c03803 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Slack with Visual Studio Team Services + +Post messages to [Slack](https://slack.com/) in response to events in your VSTS account, +like completed builds, code changes, and new and updated work items. + +## Create the Slack integration + +1. From any page on your team's Slack (```https://[team].slack.com/...```), click your account name in the left window pane +to open up the menu, and find **Apps and integrations**: +<img alt="Integrations link on the account home page" src="./_img/slack/slack-integrations.png" style="border: 1px solid #CCCCCC; width:35%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. Search for and click the VSTS integration: +<img alt="VSTS link" src="./_img/slack/vso.png" style="border: 1px solid #CCCCCC; width:65%; height:auto; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. On the VSTS integration page, click **Install**. +1. Choose a channel to have notifications posted to from the dropdown and click **Add Visual Studio Integration**. +1. Scroll down the page and copy the web hook URL to use when you create the service hook subscription in your VSTS account. +<img alt="Web hook URL in the integration settings section" src="./_img/slack/webhook-url.png" style="border: 1px solid #CCCCCC; width:70%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +## Create a service hook subscription in your VSTS account + +1. From your VSTS account's team project page (```https://[account].visualstudio.com/[project]```), navigate to **Service Hooks** in the settings: +<img alt="Team Services Service Hook Settings" src="./_img/slack/vsts-service-hooks.png" style="border: 1px solid #CCCCCC; width:70%; height:auto; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. Click **Create subscription** and select the Slack service. +1. Choose the types of events you want to appear in your Slack channel. +> You can filter each of the triggers in specific ways. +> For example, the *pull request created* trigger can be filtered on the repository in which the pull request occurs, +> the target branch it applies to, and the team members that are required or invited to review the request. + +1. Paste the web hook URL from the Slack integration that you created and click Finish. +<img alt="Action dialog box with the web hook URL" src="./_img/slack/action.png" style="border: 1px solid #CCCCCC; width:60%; height:auto; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. Now, when the event you configured happens in your project, a notification will apear in your team's Slack channel. +<img alt="General channel with a real pull request notification" src="./_img/slack/completed-build-in-slack.png" style="border: 1px solid #CCCCCC; width:70%; height:auto; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + +<!-- BEGINSECTION class="m-qanda" --> + +####Q: Why don't I have the pull request events as an option when I configure my trigger? + +A: Pull requests are only available with team projects that use Git. +If your team project uses TFVC, pull event triggers aren't available, +and your code event is called "Code checked in" instead of "Code pushed". + +####Q: How can I get multiple events to show up in my Slack channel? + +A: Create a new subscription for each type of event you want. +For example, if you want to see build failures and new work items in your Slack channel, +create two additional subscriptions. + + + +<!-- ENDSECTION --> diff --git a/docs/service-hooks/services/teams.md b/docs/service-hooks/services/teams.md new file mode 100644 index 00000000000..b73be7a4bf2 --- /dev/null +++ b/docs/service-hooks/services/teams.md @@ -0,0 +1,123 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-marketplace +title: Microsoft Teams with VSTS and Team Foundation Server +description: Use Microsoft Teams with your VSTS account +--- + +# Microsoft Teams with Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) + +<b>Team Services | TFS 2017.2</b> + +>[!NOTE] +>This topic applies to Team Services and to TFS 2017.2 and later versions. + +See activity about your Team Services or Team Foundation Server (2017.2 and later) projects directly in your Microsoft Teams channel, for example: + +* Work item updates +* Pull requests +* Code commits +* Builds +* Release deployments and approvals + +Also bring your Team Services Kanban board directly into Microsoft Teams as a tab. + +While the functionality is the same across Team Services and Team Foundation Server, the configuration process is different. Check out the appropriate getting started section below for details. + +## Configuring a new connector for Team Services + +1. To bring events from Team Services into Microsoft Teams, click the ellipsis or '...' at the top nav of your team channel, and then select Connectors. +<img alt="Adding a new Connector to Teams" src="./_img/teams/Teams Connector config 1.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +2. Select **Visual Studio Team Services** from the list. +<img alt="Connectors list" src="./_img/teams/Teams Connector config 2.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +3. Select your Team Services account (you may be prompted to sign in first), the project, and your team. +<img alt="VSTS Connector event configuration" src="./_img/teams/Teams Connector config 4.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. Choose the type of activity you want to be notified about. Depending on the event, you may be given further fields to filter down the notifications so you can filter out notifications your team does not care about. For example, for work item events, you can filter by area path, work item type, and even particular field changes. +<img alt="Example work item event configuration" src="./_img/teams/Teams Connector config 5.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. When you are happy with the configuration, save it. + +Activity from your Team Services project will start appearing in your Teams channel. + +### Changing an existing connector + +To make a change to an existing connector: + +1. Navigate to the "Configured" tab on the Connector dialog, find the connector, and click Manage. +<img alt="Example work item event configuration" src="./_img/teams/Teams Connector config 6.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +## Configuring a new connector for Team Foundation Server (TFS) + +Configuring integration between Team Foundation Server and Teams is a two step process. First setup a connector in Teams, then setup one or more service hook subscriptions in your Team Foundation Server project. + +>[!NOTE] +>Project administrator permissions are required to create service hook subscriptions. + +### From Teams + +1. To bring events from TFS into Microsoft Teams, click the ellipsis or '...' at the top nav of your team channel, and select Connectors. +<img alt="Adding a new Connector to Teams" src="./_img/teams/Teams Connector config 1.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. Select **Team Foundation Server** from the list. +<img alt="Connectors list" src="./_img/teams/Teams Connector config tfs 1.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. Choose a name for the Connector, for example "My project notifications", and click Create. Note: this name is only used for managing the Connector. +<img alt="Connectors list" src="./_img/teams/Teams Connector config tfs 2.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. Copy the generated web hook URL. You will provide this URL when setting up service hook subscriptions in your TFS project. + +### From Team Foundation Server + +1. From your TFS team project page (```https://mycompany/tfs/[collection]/[project]```), navigate to **Service Hooks** in the settings: +<img alt="Team Services Service Hook Settings" src="./_img/slack/vsts-service-hooks.png" style="border: 1px solid #CCCCCC; width:70%; height:auto; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. Click **Create subscription** and select the "Teams" service. + +1. Choose the type of activity you want to appear in your Teams channel. +> You can filter each of the triggers in specific ways. +> For example, the *pull request created* trigger can be filtered on the repository in which the pull request occurs, +> the target branch it applies to, and the team members that are required or invited to review the request. + +1. Paste the web hook URL from the Teams connector configuration step and click Finish. + +Activity from your TFS project will start appearing in your Teams channel. + +## Kanban board in Teams (Team Services only) + +<img alt="Kanban board tab in Teams channel" src="./_img/teams/Teams Kanban board 2.png" style="border: 1px solid #CCCCCC; width:100%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +Developers and product managers can track and create new work items by bringing their Team Services Kanban boards right into Microsoft Teams. All your favorite Kanban board features - live refresh, card styling, tag coloring, extensions, and more - are available without leaving your team's channel. + +>[!NOTE] +>The Kanban board integration has the following limitations +>1. Only works for Visual Studio Team Services (Team Foundation Server is not supported) +>2. Only Kanban boards within Team Services accounts in the same organization (Azure Active Directory tenant) as your Microsoft Teams account can be configured. + +### Configuring your Team Services Kanban board for Microsoft Teams + +1. To bring your Kanban board into Microsoft Teams, click the '+' ('add new tab') button on the top nav of your team channel. Find the Visual Studio icon and follow the steps to connect to your Team Services account. + +<img alt="Add a new tab to Teams channel" src="./_img/teams/Teams Kanban board 3.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +1. Once you have authenticated and selected your Team Services account, select the project, team and level of the board you want to add. + +<img alt="Kanban board tab configuration" src="./_img/teams/Teams Kanban board 4.png" style="border: 1px solid #CCCCCC; width:80%; display:block;margin-right:auto;margin-left:auto;margin-top:10px" /> + +## Q & A + +<!-- BEGINSECTION class="m-qanda" --> + +####Q: How can I get multiple events from my TFS project to show up in my Teams channel? + +A: Create a new subscription for each type of event you want. +For example, if you want to see build failures and new work items in your Teams channel, +create two additional subscriptions. + +####Q: I don't see my Team Services account when trying to add a Kanban board tab to Teams. + +A: Only Kanban boards within Team Services accounts in the same organization (Azure Active Directory tenant) as your Microsoft Teams account can be configured. This means even if the sign-in email address is the same for VSTS and Teams, they may be backed by different tenants and therefore cannot be linked. + +<!-- ENDSECTION --> diff --git a/docs/service-hooks/services/trello.md b/docs/service-hooks/services/trello.md new file mode 100644 index 00000000000..1bcd20d472d --- /dev/null +++ b/docs/service-hooks/services/trello.md @@ -0,0 +1,159 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Trello with Visual Studio Team Services +description: Use Trello with your VSTS account +ms.assetid: 7472f06c-11f3-4603-953c-9a0de5abe29d +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Trello with Visual Studio Team Services + +Create cards and lists in Trello in response to events from Visual Studio Team Services. +For example, when code is pushed, or a build occurs. + +## Get a Trello authorization token + +1. If you don't have a Trello account, get one [here](https://trello.com/signup). + +2. Go to the [Authorize VSTS for Trello page](https://trello.com/1/authorize?key=7d6630fd03ac2b6fc9fde2f2ef0c4096&name=Visual%20Studio%20Online&expiration=never&response_type=token&scope=read%2cwrite), and sign in with your Trello credentials. + +3. Allow VSTS to use your Trello account. + + <img alt="Allow Visual Studio Team Services" src="./_img/trello/allow.png" style="border: 1px solid #CCCCCC" /> + +4. Copy the authorization token. + + <img alt="Trello athorization token" src="./_img/trello/authorization-token.png" style="border: 1px solid #CCCCCC" /> + +Create a Trello card or list from a VSTS event + +1. From your team project's home page, go to the administration page. + + <img alt="Administration icon on the team project home page" src="./_img/admin.png" style="border: 1px solid #CCCCCC" /> + +2. In the Service Hooks tab, add a subscription. + + <img alt="Service hooks tab, create subscription link" src="./_img/trello/new-service-hook.png" style="border: 1px solid #CCCCCC" /> + +3. Pick the Trello service. + + <img alt="Service page, Trello selected" src="./_img/trello/service.png" style="border: 1px solid #CCCCCC" /> + +4. Configure the triggering Visual Studio event. In this case, +we're going to have the subscription respond when a work item is created. + + <img alt="Trigger configuration page" src="./_img/trello/trigger.png" style="border: 1px solid #CCCCCC" /> + + +5. Set up the action that Trello will take in response to the trigger - +either create a card or a list. + + <img alt="Action configuration page" src="./_img/trello/action.png" style="border: 1px solid #CCCCCC" /> + + You can use placeholders to insert content from the event into the + name and description of the cards or lists that the subscription creates. + For example, when we run the test notification, the card that gets created is named + "Bug #5: Some great new idea!" because the test work item is a bug (ID=5) + with the title "Some great new idea!". + +6. Test the service hook subscription and finish the wizard. + + <img alt="Test notification" src="./_img/trello/test.png" style="border: 1px solid #CCCCCC" /> + +Now its setup. Go to Trello and see the cards appear. + +<img alt="Welcome board with a card for Bug #5" src="./_img/trello/welcome-board.png" style="border: 1px solid #CCCCCC" /> + +## Placeholders + +You can insert placeholders in the name of a list or the name or description of a card to be created by your subscription. +When a list or card is created, the placeholders will be replaced by values from the event that was raised. +The example we used for the card name in this page uses: + +``` + {{workitem.workItemType}} #{{workitem.id}}: {{workitem.title}} +``` + +So when a bug is created with the ID 5 and title "Some great new idea!", +the card name is "Bug #5: Some great new idea!". + +The basic form of the placeholder is ```{{resource.field}}``` +where resource is the name of the resource raising the event (workitem, build, etc) +and field is a field within the resource section of the event, like id. +So, if the subscription were for a completed build, it might be something like + +``` + Build {{build.id}} completed at {{build.finishTime}} +``` + +To understand what fields are available to use, look at the [events reference](../events.md). + +### Work item fields + +Work item fields appear in the event in the fields array, like this: + +``` + " fields": { + " System.AreaPath": "Fabrikam-Fiber-Git", + " System.TeamProject": "Fabrikam-Fiber-Git", + " System.IterationPath": "Fabrikam-Fiber-Git", + " System.WorkItemType": "Product Backlog Item", + " System.State": "New", + " System.Reason": "New backlog item", + " System.CreatedDate": "2014-11-05T21:11:28.85Z", + " System.CreatedBy": "Normal Paulk", + " System.ChangedDate": "2014-11-05T21:11:29.23Z", + " System.ChangedBy": "Normal Paulk", + " System.Title": "Test PBI", + " Microsoft.VSTS.Common.BacklogPriority": 999999999, + " WEF_6CB513B6E70E43499D9FC94E5BBFB784_Kanban.Column": "New" + }, +``` + +Working directly from the event definition, we would have created our card name like this: + +``` + {{workitem.fields["System.workItemType"]}} #{{workitem.fields["System.id"]}: {{workitem.fields["System.title"]}} +``` + +As a shortcut, you can reference any fields in the System or Microsoft.VSTS.Common namespaces +as if they were fields of the resource. +So ```{{workitem.fields["System.workItemType"]}}``` becomes ```{{workitem.workItemType}}```. + +### Placeholder expressions + +These placeholders use a (handlebars templates)[http://handlebarsjs.com/] +implementation that is largely compatible with [Mustache](http://mustache.github.io/mustache.5.html). +Some useful expressions include + +Type of expression | examples +---------------------------|----------------------------- +basic expressions | ```{{workitem.name}}``` +array expressions | ```{{pullRequest.reviewers.[0].displayName}}``` +Mustache sections | ```{{#workitem.assignedTo}}``` This WI is assigned ```{{/workitem.assignedTo}}``` +Mustache Inverted Sections | ```{{^workitem.assignedTo}}``` This WI is not assigned ```{{/workitem.assignedTo}}``` +Handlebars block helpers | with<br/>if/else<br/>unless<br/>each +Handlerbars paths | ...<br/>this<br/>For example, ```{{../comment/id}}``` or ```{{this/title}}``` +Template comments | ```{{!-- this is a handlebar comment --}}``` + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + +<!-- BEGINSECTION class="m-qanda" --> + +####Q: Can I programmatically create subscriptions? + +A: Yes, see details [here](../create-subscription.md). + +####Q: Can I get more information about Trello? + +A: Yes, [trello.com](http://www.trello.com/). + +<!-- ENDSECTION --> \ No newline at end of file diff --git a/docs/service-hooks/services/uservoice.md b/docs/service-hooks/services/uservoice.md new file mode 100644 index 00000000000..fa7fea2639b --- /dev/null +++ b/docs/service-hooks/services/uservoice.md @@ -0,0 +1,109 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: UserVoice with Visual Studio Team Services +description: Use UserVoice with your VSTS account +ms.assetid: c0f08f71-39cd-48ac-aff0-0618c57229c7 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# UserVoice + +Use User Voice to get feedback from your customers and push that feedback directly into your backlog in Visual Studio Team Services. +When your team updates the item in the backlog, the User Voice item is updated, too. + +Link your VSTS account to your UserVoice account. + +1. If you don't have a UserVoice account, get one [here](https://www.uservoice.com/for/visual-studio-online/). + +2. In UserVoice, go to the integrations page. + + <img alt="Uservoice settings menu, integrations" src="./_img/uservoice/uservoice-integrations-menu.png" style="border: 1px solid #CCCCCC" /> + +3. Set up a synced service. + + <img alt="Uservoice settings dialog box, integrations tab, sync services link" src="./_img/uservoice/uservoice-sync-services.png" style="border: 1px solid #CCCCCC" /> + +4. Sync to Visual Studio Team Services. + + <img alt="Uservoice settings dialog box, integrations tab, VSTS link" src="./_img/uservoice/sync-visual-studio-online.png" style="border: 1px solid #CCCCCC" /> + +5. Link your VSTS account to your UserVoice account. + + <img alt="Uservoice settings dialog box, integrations tab, link account link" src="./_img/uservoice/uservoice-link-account.png" style="border: 1px solid #CCCCCC" /> + + +6. Authorize UserVoice to access your VSTS account. + + <img alt="VSTS authorization dialog box" src="./_img/uservoice/authorize.png" style="border: 1px solid #CCCCCC" /> + +## Add an item to your backlog from a UserVoice idea + +You can create a work item in VSTS form an idea in UserVoice. +In this case, we're creating a product backlog item. You might want to create a bug in some cases. +Or, if your team uses user stories instead of product backlog items, you can create those. + +1. Open an idea in the admin area of UserVoice and then create a work item in Visual Studio. + + <img alt="Uservoice idea, settings menu, create work item" src="./_img/uservoice/uservoice-idea.png" style="border: 1px solid #CCCCCC" /> + +2. Create the backlog item in Visual Studio Team Services. +The description you type here will be the description of the item in Visual Studio Team Services. + + <img alt="Create work item dialog box in Uservoice" src="./_img/uservoice/uservoice-create-work-item.png" style="border: 1px solid #CCCCCC" /> + +3. Submit the idea. A link to the item in VSTS shows up on the UserVoice idea. + + <img alt="Uservoice idea with work item" src="./_img/uservoice/idea-with-work-item.png" style="border: 1px solid #CCCCCC" /> + +4. Follow that link to open the backlog item in Visual Studio Team Services. + + <img alt="Work item in Visual Studio Team Services" src="./_img/uservoice/work-item.png" style="border: 1px solid #CCCCCC" /> + +## Update a your backlog + +When you update your backlog in Visual Studio Team Services, the UserVoice idea is updated, too. + +1. Approve the backlog item. + + <img alt="Approved backlog item in Visual Studio Team Services" src="./_img/uservoice/approved-backlog-item.png" style="border: 1px solid #CCCCCC" /> + +2. Add a comment in the history control. + + <img alt="Work item history" src="./_img/uservoice/work-item-history.png" style="border: 1px solid #CCCCCC" /> + +3.In UserVoice, refresh the page and you'll see that the item was just updated +and that the comment added in the history control is displayed with the item in UserVoice. +Your customers can see that you're doing this work. + + <img alt="Updated work item in Uservoice idea" src="./_img/uservoice/updated-work-item.png" style="border: 1px solid #CCCCCC" /> + +## Add comments to items in VSTS from UserVoice + +1. In UserVoice, add a note to the linked VSTS item. + + <img alt="Uservoice add note dialog box" src="./_img/uservoice/add-note.png" style="border: 1px solid #CCCCCC" /> + +2. In Visual Studio Team Services, refresh the work item to see the note in the discussion tab. + + <img alt="Work item discussion tab with note added" src="./_img/uservoice/work-item-discussion.png" style="border: 1px solid #CCCCCC" /> + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + +<!-- BEGINSECTION class="m-qanda" --> + +#### Q: Can I programmatically create subscriptions? + +A: Yes, see details [here](../create-subscription.md). + +#### Q: Where can I get more information about UserVoice? + +A: At UserVoice for [Visual Studio Team Services](https://www.uservoice.com/for/visual-studio-online/). + +<!-- ENDSECTION --> \ No newline at end of file diff --git a/docs/service-hooks/services/webhooks.md b/docs/service-hooks/services/webhooks.md new file mode 100644 index 00000000000..0641b7e1770 --- /dev/null +++ b/docs/service-hooks/services/webhooks.md @@ -0,0 +1,98 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: WebHooks with Visual Studio Team Services +description: Use WebHooks with your VSTS account +ms.assetid: 6c7dfe37-800d-47b8-b9db-9f73878eeb77 +ms.manager: douge +ms.author: elbatk +ms.date: 08/16/2016 +--- + +# Web Hooks + +Web Hooks provides a way to send a JSON representation of an event to any service. +All that is required is a public endpoint (HTTP or HTTPS). + +For more information about the JSON payloads posted by this consumer, see [events](../events.md). + +## Send JSON representation to a service + +1. Open the admin page for the team project in Visual Studio Team Services. + +2. On the Service Hooks tab, run the subscription wizard. + + For details about the subscription wizard, go [here](../index.md). + + <img alt="Team project administraton page, service hooks tab, add icon" src="./_img/webhooks/add-service-hook.png" style="border: 1px solid #CCCCCC" /> + +3. Pick and configure the VSTS event. + + <img alt="Configure the event dialog box" src="./_img/webhooks/configure-event.png" style="border: 1px solid #CCCCCC" /> + +4. Configure what to do when the event occurs. + + See Q & A below for information on the **Resource details to send**, + **Messages to send**, and **Detailed messages to send** settings. + + <img alt="Configure the action dialog box" src="./_img/webhooks/configure-action.png" style="border: 1px solid #CCCCCC" /> + +5. Test the service hook subscription and finish the wizard. + + <img alt="Test it" src="./_img/webhooks/test.png" style="border: 1px solid #CCCCCC" /> + +Now the Web hook is set up. Go to the target service to view the JSON representation. + +<img alt="View the JSON representation" src="./_img/webhooks/request-bin.png" style="border: 1px solid #CCCCCC" /> + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + +<!-- BEGINSECTION class="m-qanda" --> + +#### Q: What are the Resource details to send, Messages to send, and Detailed messages to send settings for? + +A: They control the size of the JSON payload that is sent. + +The **Resource details to send** setting controls how much of the resource is sent. +The default is **All**, but you can also choose to send **Minimal** (only sends key fields like URL and ID), or **None**. + +**None** and **Minimal** are useful in scenarios where the caller doesn't actually need much, +if anything, about the resource because it is relying on the message or detailed message. +**None** and **Minimal** are also useful for security reasons, for example, +the caller needs to call back into VSTS and go through normal security/permission checks +in order to get more details about the resource. + +Sample JSON: + +``` + { + "event.type": "git.push", + ... + "messsages": { + "text": "...", + "html": "...", + "markdown": "..." + }, + "detailedMesssages": { + "text": "...", + "html": "...", + "markdown": "..." + }, + "resource": { + "id": "...", + "url": "https://...", + "name": "...", + "field1:": "..." + } + } +``` + +#### Q: Can I programmatically create subscriptions? + +A: Yes, see details [here](../create-subscription.md). + +<!-- ENDSECTION --> \ No newline at end of file diff --git a/docs/service-hooks/services/zapier.md b/docs/service-hooks/services/zapier.md new file mode 100644 index 00000000000..daccb0595b9 --- /dev/null +++ b/docs/service-hooks/services/zapier.md @@ -0,0 +1,101 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Zapier with Visual Studio Team Services +description: Use Zapier with your VSTS account +ms.assetid: 93b2aed5-2f28-41a3-b1b7-2d88b4feec09 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Zapier with Visual Studio Team Services + +Use Zapier to connect VSTS to other apps for development, +operations, customer connection, sales, marketing and more. +Once you have your Zapier account, just create a zap to send messages +between VSTS and those other apps. + +## Create a note when code is pushed + +Create a zap that responds to an [event](../events.md) +from Visual Studio and triggers an action in another app. +In this case, we create a note in OneNote when code is pushed +to a Git repository in our VSTS account to show how that works. + +1. If you don't already have one, [sign up](https://zapier.com/zapbook/visual-studio-online/) for a Zapier account. + +2. Create a zap. + + <img alt="Zapier dashboard, make a new zap button" src="./_img/zapier/make-zap.png" style="border: 1px solid #CCCCCC" /> + +3. Pick the event in Visual Studio that you want to respond to, and then choose the app that you want to trigger and the action you want that app to take. + + <img alt="Choose a triiger and action" src="./_img/zapier/triggered-action.png" style="border: 1px solid #CCCCCC" /> + +4. Connect to your VSTS account. + + <img alt="Connect and test your VSTS account" src="./_img/zapier/select-visual-studio-online.png" style="border: 1px solid #CCCCCC" /> + +5. Connect to the app that will respond to the event. + + <img alt="Connect to the action app account" src="./_img/zapier/connect-one-note.png" style="border: 1px solid #CCCCCC" /> + +6. Authorize Zapier to access your account's resources. + + <img alt="Allow access to the action app account" src="./_img/zapier/authorize.png" style="border: 1px solid #CCCCCC" /> + +7. You can filter the events coming from VSTS for this zap. For example, this zap will only act on code pushes in the master branch of the default repository for this team project. Pushes in other team projects, other repositories, or other branches of this repository will be ignored by this zap. + + <img alt="Select the branch to trigger on for new code pushes" src="./_img/zapier/filter-triggers.png" style="border: 1px solid #CCCCCC" /> + +8. Configure the response to the event in the other app. + + <img alt="Configure the action app message" src="./_img/zapier/configure-response.png" style="border: 1px solid #CCCCCC" /> + +9. Verify that the zap works. + + <img alt="Verify that the zap works" src="./_img/zapier/test.png" style="border: 1px solid #CCCCCC" /> + +10. Name the zap and turn it on. + + <img alt="Name the zap and turn it on" src="./_img/zapier/turn-zap-on.png" style="border: 1px solid #CCCCCC" /> + + Now the zap is set up, you'll get new notes in OneNote each time code is pushed in Visual Studio Team Services. + + <img alt="Now the zap is set up" src="./_img/zapier/code-pushed-zap.png" style="border: 1px solid #CCCCCC" /> + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + +<!-- BEGINSECTION class="m-qanda" --> + +#### Q: Can VSTS take actions based on events from other apps, too. + +A: Yes, you can create a zap to post a message to a team room, queue a build, or add a link to a work item in Visual Studio Team Services. Just choose VSTS as the app that's taking the action instead of raising the event. + +<img alt="Choose VSTS as the action app" src="./_img/zapier/to-vso.png" style="border: 1px solid #CCCCCC" /> + +#### Q: Why can't I create a zap? + +A: If you are not able to create a zap, make sure that: + +- Service hooks are enabled on the VSTS account you are trying to create the zap in. +- You are a project administrator (or have the appropriate service hook management permissions) on the project. + +#### Q: Why can't I connect to the VSTS service? + +A: Verify that you are a project administrator for the VSTS project you are attempting to create zaps against. + +#### Q: Can I programmatically create subscriptions? + +A: Yes, see details [here](../create-subscription.md). + +#### Q: Where can I get more information about Zapier? + +A: At [Zapier for Visual Studio Team Services](https://zapier.com/zapbook/visual-studio-online/). + +<!-- ENDSECTION --> \ No newline at end of file diff --git a/docs/service-hooks/services/zendesk.md b/docs/service-hooks/services/zendesk.md new file mode 100644 index 00000000000..38daa06d32b --- /dev/null +++ b/docs/service-hooks/services/zendesk.md @@ -0,0 +1,143 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Zendesk with Visual Studio Team Services +description: Use Zendesk with your VSTS account +ms.assetid: 7dd649d2-152f-4894-955d-dd42ac56d81a +ms.manager: douge +ms.author: elbatk +ms.date: 02/08/2017 +--- + +# Zendesk with Visual Studio Team Services + +If you use Zendesk to support your customers, +you can create work items in VSTS directly from your Zendesk tickets. +Then you can configure VSTS to update the Zendesk ticket when the work item is updated. + +## Install the Team Services app for Zendesk + +1. Download the .zip file that contains the VSTS for Zendesk app from [GitHub](https://github.com/Microsoft/vsts-zendesk-app). + +2. If you don't have a Zendesk account, [get one](http://zendesk.com/). + +3. Go to your Zendesk administration page to mange your apps. + + <img alt="Zendesk administer page, manage button" src="./_img/zendesk/zendesk-manage-apps.png" style="border: 1px solid #CCCCCC" /> + +4. Upload the VSTS for Zendesk app .zip file + + <img alt="Upload app button on Zendesk manage apps page" src="./_img/zendesk/zendesk-upload-app.png" style="border: 1px solid #CCCCCC" /> + +5. Install and configure the app + + <img alt="VSTS for Zendesk installation page with the work item tag" src="./_img/zendesk/install.png" style="border: 1px solid #CCCCCC" /> + + If you use a work item tag, work items you create from Zendesk will have that tag. Later, you can use it to find items that were created from Zendesk. + +## Authenticating + +Each user of the app must provide credentials so that the Team Services app can create and query work items as that user. Creating a personal access token is recommended. + +1. Navigate to the Team Services account you associated with your Zendesk account (from step 5 above) + +2. Open the profile menu and select Security + + <img alt="Profile menu" src="./_img/zendesk/security-on-profile-menu.png" style="border: 1px solid #CCCCCC" /> + +3. Create a personal access token + + <img alt="Zendesk ticket page, Apps button, login" src="./_img/zendesk/create-pat.png" style="border: 1px solid #CCCCCC" /> + + Suggestions: + + * Give the token a recognizable name so you can find it later if you need to revoke it or check its expiration date + * Scope the token to the account associated with Zendesk + * Limit to at least **Work item (read and write)** + +4. Copy the token and paste it into the **Password** field of the Team Services app in Zendesk + + <img alt="Profile menu" src="./_img/zendesk/login.png" style="border: 1px solid #CCCCCC" /> + + * If you are running version 0.5.0 or higher of the app, you do not need to specify a Username. Otherwise, supply any value into the Username field (for example "**me**"). + +## Create a work item from Zendesk + +1. Go to a ticket in Zendesk and log in to the VSTS for Zendesk app. + + <img alt="Zendesk ticket page, Apps button, login" src="./_img/zendesk/visual-studio-online-app-login.png" style="border: 1px solid #CCCCCC" /> + +2. Add a work item to VSTS based on this ticket. + + <img alt="VSTS for Zendesk, new work item" src="./_img/zendesk/new-work-item.png" style="border: 1px solid #CCCCCC" /> + +3. Create the work item. + + <img alt="Create work item dialog box" src="./_img/zendesk/create-work-item.jpg"> + +4. Open the work item in VSTS directly from Zendesk. + + <img alt="Zendesk ticket with work item" src="./_img/zendesk/ticket-with-work-item.png" style="border: 1px solid #CCCCCC" /> + + In Visual Studio Team Services, the work item is tagged with the tag you set up , and it's linked back to the ticket in Zendesk. + + <img alt="Work item in VSTS with tag and link to Zendesk ticket" src="./_img/zendesk/work-item.png" style="border: 1px solid #CCCCCC" /> + +## Configure VSTS to update Zendesk tickets + +Close the loop by configuring VSTS to update the Zendesk tickets whenever there's a change in the work items that were created from Zendesk. + +1. Go to the your Zendesk API administration page. + + <img alt="Zendesk administration, APIs" src="./_img/zendesk/zendesk-apis.png" style="border: 1px solid #CCCCCC" /> + +2. Enable token access and copy your token. + + <img alt="Channels/tokens with token access enabled" src="./_img/zendesk/token-access.png" style="border: 1px solid #CCCCCC" /> + +3. Go to a team project in your VSTS account and open the project adminstration page. + + <img alt="Administration icon on the team project home page" src="./_img/admin.png" style="border: 1px solid #CCCCCC" /> + +4. On the service hooks tab, add a service hook. + + <img alt="Team project administration page, service hooks tab, add icon" src="./_img/zendesk/new-service-hook.png" style="border: 1px solid #CCCCCC" /> + +5. Start configuring Zendesk. + + <img alt="Sevice hooks tab, Zendesk selected" src="./_img/zendesk/target-service.png" style="border: 1px solid #CCCCCC" /> + +6. Use the **Work item is commented on** event. +You can filter for comments, too. +For example, you can only act on comments that contain the string "Zendesk:" +and only those comments will be reflected back to Zendesk. + + <img alt="Configure the event dialog box with the tag set to Zendesk:" src="./_img/zendesk/configure-event.png" style="border: 1px solid #CCCCCC" /> + +7. Configure the action that Zendesk will take in response to that event. This is where you provide the Zendesk access token. + + <img alt="Configure action dialog box" src="./_img/zendesk/configure-action.png" style="border: 1px solid #CCCCCC" /> + +Now when you update the work item, a private comment will be added to the Zendesk ticket. + +## Pricing +VSTS doesn't charge for the framework for integrating with external services. Check out the specific service's site +for pricing related to their services. + +## Q & A + +<!-- BEGINSECTION class="m-qanda" --> + +#### Q: Why do I keep getting prompted for a user name and password? + +A: If you supplied a Personal Access Token (recommended) in the login panel of the app, make sure the token is scoped either to "all accessible accounts" or to the specific Team Services account configured in the app's settings. To open the app settings from Zendesk go to Settings > Apps > Manage. + +Also make sure the token has not expired and that it has the **Work items (read and write)** scope. + +For more details, see the Authenticating section above or the [Authenticate access with personal access tokens](../../accounts/use-personal-access-tokens-to-authenticate.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json) topic. + +#### Q: Can I programmatically create subscriptions? + +A: Yes, use the [REST APIs](../create-subscription.md). + +<!-- ENDSECTION --> \ No newline at end of file diff --git a/docs/service-hooks/toc.yml b/docs/service-hooks/toc.yml new file mode 100644 index 00000000000..797dd5dca6e --- /dev/null +++ b/docs/service-hooks/toc.yml @@ -0,0 +1,54 @@ +- name: Integrate with other services + href: index.md +- name: Overview + href: overview.md +- name: Quickstarts + items: + - name: Integrate with Slack + href: services/slack.md + - name: Integrate with Jenkins + href: services/jenkins.md + - name: Integrate with Trello + href: services/trello.md +- name: How-to Guides + items: + - name: Integrate with AppVeyor + href: services/appveyor.md + - name: Integrate with Azure Service Bus + href: services/azure-service-bus.md + - name: Integrate with Azure Storage + href: services/azure-storage.md + - name: Integrate with Bamboo + href: services/bamboo.md + - name: Integrate with Campfire + href: services/campfire.md + - name: Integrate with Flowdock + href: services/flowdock.md + - name: Integrate with HipChat + href: services/hipchat.md + - name: Integrate with Hubot + href: services/hubot.md + - name: Integrate with MyGet + href: services/myget.md + - name: Integrate with Microsoft Teams + href: services/teams.md + - name: Integrate with UserVoice + href: services/uservoice.md + - name: Integrate with WebHooks + href: services/webhooks.md + - name: Integrate with Zapier + href: services/zapier.md + - name: Integrate with Zendesk + href: services/zendesk.md + - name: Authorize other services + href: authorize.md +- name: Troubleshoot + items: + - name: Troubleshoot and FAQs + href: troubleshoot.md +- name: Resources + items: + - name: Visual Studio Marketplace + href: https://marketplace.visualstudio.com/ + - name: Billing information + href: ../billing/index.md diff --git a/docs/service-hooks/troubleshoot.md b/docs/service-hooks/troubleshoot.md new file mode 100644 index 00000000000..487ecdcc1ef --- /dev/null +++ b/docs/service-hooks/troubleshoot.md @@ -0,0 +1,65 @@ +--- +ms.prod: vs-devops-alm +ms.technology: vs-devops-extensions-api +title: Troubleshoot your service hooks integrations | Visual Studio Team Services +description: Troubleshoot problems with the services you have integrated with your VSTS account +ms.assetid: dcf00653-24c5-4ab6-b9e8-19ec098bbb66 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Troubleshoot a service hooks issue + +## View activity and debug problems + +The Service Hooks tab in the web access admin shows your the recent activity (last 14 days) +for each subscription, and whether a subscription is enabled, disabled, or restricted. + +Detailed history about a subscription can be accessed, +as well as detailed request/response data +(useful for debugging a problematic service or subscription). + +1. To view the activity and status of your subscriptions, +go to the Service Hooks tab. + + <img alt="View the activity" src="./_img/troubleshoot/service-hooks.png" style="border: 1px solid #CCCCCC" /> + +2. To view detailed activity for a subscription, including full request, response, +and event payload data, select a subscription in the table and click **History**. + + <img alt="View detailed activity for a subscriptions" src="./_img/troubleshoot/detailed-activity.png" style="border: 1px solid #CCCCCC" /> + +## FAQs + +<!-- BEGINSECTION class="m-qanda" --> + +#### Q: What does the status Enabled (restricted) mean? + +A: A subscription becomes restricted if too many failures occur. + +#### Q: What should I try if a service hook is not working? + +A: Check these: + +- Confirm the subscription is enabled. + +- Confirm the subscription settings are correct (both event filters and actions). + +- Look at the History, especially if there are failures. + +#### Q: Can I grant a regular project user the ability to view and manage service hook subscriptions for a project? + +A: Use tfssecurity.exe from the command line, for example: + +```` + tfssecurity /a+ /collection: https://fabrikam-fiber-inc.visualstudio.com/DefaultCollection ServiceHooks PublisherSecurity/abcdef00-abcd-0000-0000-abcdef000000 EditSubscriptions n:fabrikamfiber4@hotmail.com ALLOW +``` + +**Note:** The GUID represents the team project ID which can be retrieved using the [Projects](https://visualstudio.com/integrate/api/tfs/projects.md) REST API. + +#### Q: Can I programmatically create subsciptions? + +A: Yes, use [REST APIs](./create-subscription.md). + +<!-- ENDSECTION --> \ No newline at end of file diff --git a/docs/services.md b/docs/services.md new file mode 100644 index 00000000000..7016c3e1899 --- /dev/null +++ b/docs/services.md @@ -0,0 +1,173 @@ +--- +title: A tour of VSTS & TFS services +description: Understand the services that support the hosted cloud offering of Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.topic: get-started-article +ms.assetid: D861983F-CC66-4314-A3C6-E2F30A37923D +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +--- + +# A tour of services Team Services and TFS provides +<b>Team Services | TFS 2017 | TFS 2015 </b> + +With Team Services and TFS, you gain an integrated set of services and tools to manage your software projects, from planning and development through testing and deployment. Services are delivered through a client-server model, many of which are delivered through an easy-to-use web-based interface that you can access from all major browsers. + +Web services are access through the following main hubs as shown in the following image. + +![Team Services, main hubs](_img/services-hubs.png) + +Many of our services are either free for small teams or available through a subscription model or per use model. Where needed, you can exercise a hybrid approach where you use an on-premises TFS to manage your code and work, and purchase cloud build or testing services on an as needed basis. + +For information about client tools, see [Tools](tools.md). + +<!--- +###Video overview + (Video ala Robert's 1.5 min Commit) +--> + +## Core services +When you sign up for Team Services or install an on-premises TFS, you get access to the following services. All of these services you manage through a web browser. Some services, such as source control and build definitions, can also be managed through a client. + + + +## Dashboards +From the **Dashboards** hub you gain access to user-configurable dashboards. + +<img src="./report/_img/dashboard-view-with-widgets.png" alt="Dashboard hub, Overview" style="border: 2px solid #C3C3C3;" />  + +Tasks you can perform in this hub include: +- Add, configure, and manage dashboards +- Configure widgets that you add to dashboards +- Quickly navigate to different areas of your team project + + +To learn more, see [Dashboards](report/dashboards.md). + + +## Code + +From the **Code** hub you gain access to your source control Git-based or TFVC repositories to support version control of your software projects. These repositories are private. + +<img src="_img/services/code-git-hub.png" alt="Code hub, Git, files page" style="border: 2px solid #C3C3C3;" />  + +From the Code hub for Git you can perform these tasks: +- Review, download, and edit files and review the change history for a file +- Review and manage commits that have been pushed +- Review, create, approve, comment, and complete pull requests +- Add and manage Git tags + +To learn more, see the overviews for [Git](git/overview.md) or [TFVC](tfvc/overview.md). + +## Plan and track work +From the **Work** hub you gain access to Agile tools to support planning and tracking work. + +<img src="_img/services/work-hub-backlogs.png" alt="Work hub, Backlogs page" style="border: 2px solid #C3C3C3;" />  + +Specifically, from the **Work** you can perform these tasks: +- Add and update work items +- Define work item queries and create status and trend charts based on those queries +- Manage your product backlog +- Plan sprints using sprint backlogs +- Review sprint tasks and update tasks through the task boards +- Visualize the work flow and update status using Kanban boards +- Manage portfolios by grouping stories under features and features under epics + +See [Backlogs, boards, and plans](work/backlogs-boards-plans.md) for an overview of each. + +## Build & Release +The **Build & Release** hub provides an integrated set of features to support building and deploying your applications. + + +<img src="_img/services/build-release-hub.png" alt="Build-Release hub, Build definitions page" style="border: 2px solid #C3C3C3;" />  + +You use this hub to implement continuous integration and continuous delivery. +- **Build automation**: Define the steps to take during build and the triggers that will initiate a build. +- **Release management**: Supports a rapid release cadence and management of simultaneous releases. You can configure release definitions that represent your environments from development to production. Run automations to deploy your app to each environment. Add approvers to sign off that the app has been successfully deployed in an environment. Create your release manually or automatically from a build. Then track your releases as they are deployed to various environments. + + +To learn more, see [Continuous integration on any platform](build-release/overview.md). + + +## Test +Test features support manual and exploratory testing, load or performace testing, and continuous testing. Here we show the **Test** hub that support creating and managing manual tests. + +<img src="_img/services/test-hub.png" alt="Test hub" style="border: 2px solid #C3C3C3;" />  + +Test **Test** hub provides support for the following: +- Customization of workflows with test plan, test suite and test case work items +- End-to-end traceability from requirements to test cases and bugs with requirement-based test suites +- Criteria-based test selection with query-based test suites +- Excel-like interface with the grid for easy test case creation +- Reusable test steps and test data with shared steps and shared parameters +- Sharable test plans, test suites and test cases for reviewing with stakeholders +- Browser-based test execution on any platform +- Real-time charts for tracking test activity. + +To learn more, see [Testing overview](manual-test/index.md). + + +## Collaboration services + +In addition to the above "hub" services, the following services work across hubs to support: +- Linking of work items, commits, pull requests and other artifacts to support traceability +- Alerts and change notifications managed per user or for teams +- Request and manage feedback +- Team (chat) rooms +- Reporting + +>[!NOTE] +>Team rooms are deprecated for TFS 2017.2. Instead, we recommend you use service hooks to integrate with Slack. The Slack extension is pre-installed with Team Services and TFS 2015 and later versions. + + +## Service hooks + +Service hooks enable you to perform tasks on other services when events happen within your team project hosted on Team Services or TFS. For example, you can send a push notification to your team's mobile devices when a build fails. Service hooks can also be used in custom apps and services as a more efficient way to drive activities when events happen in your projects. + +The following services are available as the target of service hooks. To learn about others apps and services that integrate with our Team Services or TFS, visit the [Visual Studio Marketplace](https://marketplace.visualstudio.com) + +For the latest set of supported services, see [Integrate with service hooks](service-hooks/index.md) + +## Cloud-hosted services based on usage + +The following services support your DevOps operations. +- Cloud-based build and deployment hosted agents +- On-premises private agents to support build and deployment +- Cloud-based performance/load testing lets you load test your code by simulating high traffic + +To learn more, see [Pricing](https://www.visualstudio.com/team-services/pricing/). + + +## Azure services +Azure provides a number of cloud-hosted services to support application development and deployment. You can make use of these services solely or in combination with Team Services or TFS. + +To browse Azure's directory of integrated services, features, and bundled suites, see [Azure products](https://azure.microsoft.com/services/). + +For continuous delivery to Azure from Team Services, see [Automatically build and deploy to Azure web apps or cloud services](https://azure.microsoft.com/documentation/articles/cloud-services-continuous-delivery-use-vso/). + + +## Administrative services + +There are a number of features and tasks associated with administrating a collaborate software development environment. You perform most of these tasks through the web portal. + + +<img src="user-guide/_img/tour-admin-project-level.png" alt="Product backlog" style="border: 2px solid #C3C3C3;" />  + +> [!div class="mx-tdBreakAll"] +> |Account Management (Team Services) | Administration (TFS) | +> |-------------|----------| +> |- Manage users, access, and billing<br/>- Add and manage team projects and teams<br/>- Customize work tracking processes<br/>- Manage build retention policies<br/>- Add and manage build agent pools<br/>- Add and manage extensions|-Manage users, access, and permissions<br/>- Add and manage teams, team projects, and collections<br/>- Customize work tracking processes<br/>- Manage build retention policies<br/>- Add and manage build agent pools<br/>- Add and manage extensions<br/>- Configure an SMTP server (supports feedback requests and notification features)<br/>- Configure a backup schedule and manage database backups<br/>- Manage upgrades | + + +## Related notes +- [Key concepts](concepts.md) +- [Client-server tools](tools.md) +- [Software development roles](roles.md) +- [Pricing](https://www.visualstudio.com/team-services/pricing/) + + +<!--- +**System Center integration**: Enables a release definition to connect to a System Center Virtual Machine Manager (SCVMM) server to easily provision virtual machines and perform actions on them such as managing checkpoints, starting and **VMware Resource Deployment**: Connect to a VMware vCenter Server from Team Services or TFS to provision, start, stop, or snapshot VMware virtual machines. +--> diff --git a/docs/teams/breadcrumb/toc.yml b/docs/teams/breadcrumb/toc.yml new file mode 100644 index 00000000000..0a2ded0d6c2 --- /dev/null +++ b/docs/teams/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Admin + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=admin + items: + - name: "Scale & Configure Teams" + tocHref: /vsts/ + topicHref: /vsts/teams/index \ No newline at end of file diff --git a/docs/teams/index.md b/docs/teams/index.md new file mode 100644 index 00000000000..4688a060587 --- /dev/null +++ b/docs/teams/index.md @@ -0,0 +1,40 @@ +--- +title: Scale & Configure Teams | VSTS & TFS +description: Index to topics for adding teams in VSTS and and Team Foundation Server (TFS) +ms.technology: vs-devops-agile-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/28/2017 +--- + +# Scale & Configure Teams + +Give your teams the autonomy they need as your organization grows. Add teams to give each team their set of Agile tools which they can configure their way. + +## 5-Minute Quickstarts + +- [Add a team & team members](/vsts/work/scale/multiple-teams?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json) +- [Add a team administrator](/vsts/work/scale/add-team-administrator?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json) + +## Concepts + +- [Team administrator role and permissions](/vsts/work/scale/team-administrator-permissions?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json) + +## How-to Guides +- [Set team defaults](/vsts/work/scale/set-team-defaults?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json) +- [Configure team settings](/vsts/work/scale/manage-team-assets?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json) + + + +## Reference +- [Permissions and access for work tracking](/vsts/work/permissions-access-work-tracking?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json) + + +## Resources +- [Customization](../work/customize/index.md) +- [Agile culture](https://www.visualstudio.com/learn/agile-culture/) +- [Scale Agile to large teams](https://www.visualstudio.com/learn/scale-agile-large-teams/) +- [Microsoft Teams Integration](https://marketplace.visualstudio.com/items?itemname=ms-vsts.vss-services-teams) +- [Integrate with service hooks](../service-hooks/index.md) \ No newline at end of file diff --git a/docs/teams/toc.yml b/docs/teams/toc.yml new file mode 100644 index 00000000000..9bca6aceb54 --- /dev/null +++ b/docs/teams/toc.yml @@ -0,0 +1,40 @@ +- name: "Scale & Configure Teams" + href: index.md +- name: Overview + items: + - name: Support a growing organization + href: /vsts/work/scale/scale-teams?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json + - name: "About teams & Agile tools" + href: /vsts/work/about-teams-and-settings?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json +- name: Quickstarts + items: + - name: "Add a team & team members" + href: /vsts/work/scale/multiple-teams?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json + - name: Add a team administrator + href: /vsts/work/scale/add-team-administrator?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json +- name: Concepts + items: + - name: Team administrator role and permissions + href: /vsts/work/scale/team-administrator-permissions?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json +- name: How-to Guides + items: + - name: Set team defaults + href: /vsts/work/scale/set-team-defaults?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json + - name: Configure team settings + href: /vsts/work/scale/manage-team-assets?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json + - name: "Manage permissions & access" + href: /vsts/work/how-to/set-permissions-access-work-tracking?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json +- name: Reference + items: + - name: "Permissions & access for work tracking" + href: /vsts/work/permissions-access-work-tracking?toc=/vsts/teams/toc.json&bc=/vsts/teams/breadcrumb/toc.json +- name: Resources + items: + - name: Customization + href: ../work/customize/index.md + - name: Scale Agile to large teams + href: https://www.visualstudio.com/learn/scale-agile-large-teams/ + - name: Microsoft Teams Integration + href: https://marketplace.visualstudio.com/items?itemname=ms-vsts.vss-services-teams + - name: Integrate with service hooks + href: ../service-hooks/index.md diff --git a/docs/test/automated-tests/review-automated-test-results-after-build.md b/docs/test/automated-tests/review-automated-test-results-after-build.md new file mode 100644 index 00000000000..f5b1bec065d --- /dev/null +++ b/docs/test/automated-tests/review-automated-test-results-after-build.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/ +--- diff --git a/docs/test/continuous-testing/associate-automated-results-with-requirements.md b/docs/test/continuous-testing/associate-automated-results-with-requirements.md new file mode 100644 index 00000000000..1ae585e2a9d --- /dev/null +++ b/docs/test/continuous-testing/associate-automated-results-with-requirements.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/associate-automated-results-with-requirements +--- diff --git a/docs/test/continuous-testing/associate-automated-test-with-test-case.md b/docs/test/continuous-testing/associate-automated-test-with-test-case.md new file mode 100644 index 00000000000..9164919fda8 --- /dev/null +++ b/docs/test/continuous-testing/associate-automated-test-with-test-case.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/associate-automated-test-with-test-case +--- diff --git a/docs/test/continuous-testing/continuous-testing.md b/docs/test/continuous-testing/continuous-testing.md new file mode 100644 index 00000000000..114ca3ab03e --- /dev/null +++ b/docs/test/continuous-testing/continuous-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/index +--- diff --git a/docs/test/continuous-testing/example-continuous-testing.md b/docs/test/continuous-testing/example-continuous-testing.md new file mode 100644 index 00000000000..035156ffad5 --- /dev/null +++ b/docs/test/continuous-testing/example-continuous-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/example-continuous-testing +--- diff --git a/docs/test/continuous-testing/getting-started/continuous-test-java.md b/docs/test/continuous-testing/getting-started/continuous-test-java.md new file mode 100644 index 00000000000..cdcd1b902f9 --- /dev/null +++ b/docs/test/continuous-testing/getting-started/continuous-test-java.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/continuous-test-java +--- diff --git a/docs/test/continuous-testing/getting-started/continuous-test-selenium.md b/docs/test/continuous-testing/getting-started/continuous-test-selenium.md new file mode 100644 index 00000000000..e134fa6f5ef --- /dev/null +++ b/docs/test/continuous-testing/getting-started/continuous-test-selenium.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/continuous-test-selenium +--- diff --git a/docs/test/continuous-testing/getting-started/getting-started-with-continuous-testing.md b/docs/test/continuous-testing/getting-started/getting-started-with-continuous-testing.md new file mode 100644 index 00000000000..65edc9985f2 --- /dev/null +++ b/docs/test/continuous-testing/getting-started/getting-started-with-continuous-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/getting-started-with-continuous-testing +--- diff --git a/docs/test/continuous-testing/getting-started/review-continuous-test-results-after-build.md b/docs/test/continuous-testing/getting-started/review-continuous-test-results-after-build.md new file mode 100644 index 00000000000..0a67f741412 --- /dev/null +++ b/docs/test/continuous-testing/getting-started/review-continuous-test-results-after-build.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/review-continuous-test-results-after-build +--- diff --git a/docs/test/continuous-testing/index.md b/docs/test/continuous-testing/index.md new file mode 100644 index 00000000000..f5b1bec065d --- /dev/null +++ b/docs/test/continuous-testing/index.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/ +--- diff --git a/docs/test/continuous-testing/reference-qa.md b/docs/test/continuous-testing/reference-qa.md new file mode 100644 index 00000000000..8152ab9e780 --- /dev/null +++ b/docs/test/continuous-testing/reference-qa.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/reference-qa +--- diff --git a/docs/test/continuous-testing/review-automated-test-results-after-build.md b/docs/test/continuous-testing/review-automated-test-results-after-build.md new file mode 100644 index 00000000000..0a67f741412 --- /dev/null +++ b/docs/test/continuous-testing/review-automated-test-results-after-build.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/review-continuous-test-results-after-build +--- diff --git a/docs/test/continuous-testing/run-automated-tests-from-test-hub.md b/docs/test/continuous-testing/run-automated-tests-from-test-hub.md new file mode 100644 index 00000000000..1934a5908a6 --- /dev/null +++ b/docs/test/continuous-testing/run-automated-tests-from-test-hub.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/run-automated-tests-from-test-hub +--- diff --git a/docs/test/continuous-testing/set-up-automated-test-environments-builds.md b/docs/test/continuous-testing/set-up-automated-test-environments-builds.md new file mode 100644 index 00000000000..b7253f9a712 --- /dev/null +++ b/docs/test/continuous-testing/set-up-automated-test-environments-builds.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/set-up-continuous-test-environments-builds +--- diff --git a/docs/test/continuous-testing/set-up-automated-testing-builds.md b/docs/test/continuous-testing/set-up-automated-testing-builds.md new file mode 100644 index 00000000000..0ebedd961a3 --- /dev/null +++ b/docs/test/continuous-testing/set-up-automated-testing-builds.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/set-up-continuous-testing-builds +--- diff --git a/docs/test/continuous-testing/set-up-continuous-test-environments-builds.md b/docs/test/continuous-testing/set-up-continuous-test-environments-builds.md new file mode 100644 index 00000000000..b7253f9a712 --- /dev/null +++ b/docs/test/continuous-testing/set-up-continuous-test-environments-builds.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/set-up-continuous-test-environments-builds +--- diff --git a/docs/test/continuous-testing/set-up-continuous-testing-builds.md b/docs/test/continuous-testing/set-up-continuous-testing-builds.md new file mode 100644 index 00000000000..0ebedd961a3 --- /dev/null +++ b/docs/test/continuous-testing/set-up-continuous-testing-builds.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/set-up-continuous-testing-builds +--- diff --git a/docs/test/continuous-testing/test-build.md b/docs/test/continuous-testing/test-build.md new file mode 100644 index 00000000000..65edc9985f2 --- /dev/null +++ b/docs/test/continuous-testing/test-build.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/getting-started-with-continuous-testing +--- diff --git a/docs/test/continuous-testing/test-with-unified-agent-and-phases.md b/docs/test/continuous-testing/test-with-unified-agent-and-phases.md new file mode 100644 index 00000000000..37aab1246e6 --- /dev/null +++ b/docs/test/continuous-testing/test-with-unified-agent-and-phases.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/test-with-unified-agent-and-phases +--- diff --git a/docs/test/create-a-test-plan-vs.md b/docs/test/create-a-test-plan-vs.md new file mode 100644 index 00000000000..2f429bc04ae --- /dev/null +++ b/docs/test/create-a-test-plan-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/create-a-test-plan +--- diff --git a/docs/test/create-tests-vs.md b/docs/test/create-tests-vs.md new file mode 100644 index 00000000000..cfdf6a5ac99 --- /dev/null +++ b/docs/test/create-tests-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/ +--- diff --git a/docs/test/developer-testing/developer-testing.md b/docs/test/developer-testing/developer-testing.md new file mode 100644 index 00000000000..36746b52fca --- /dev/null +++ b/docs/test/developer-testing/developer-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios +--- diff --git a/docs/test/developer-testing/getting-started/create-unit-tests-menu.md b/docs/test/developer-testing/getting-started/create-unit-tests-menu.md new file mode 100644 index 00000000000..586a93d3709 --- /dev/null +++ b/docs/test/developer-testing/getting-started/create-unit-tests-menu.md @@ -0,0 +1,4 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/create-unit-tests-menu +--- + diff --git a/docs/test/developer-testing/getting-started/getting-started-with-developer-testing.md b/docs/test/developer-testing/getting-started/getting-started-with-developer-testing.md new file mode 100644 index 00000000000..ef005274e85 --- /dev/null +++ b/docs/test/developer-testing/getting-started/getting-started-with-developer-testing.md @@ -0,0 +1,4 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/getting-started-with-unit-testing +--- + diff --git a/docs/test/developer-testing/index.md b/docs/test/developer-testing/index.md new file mode 100644 index 00000000000..36746b52fca --- /dev/null +++ b/docs/test/developer-testing/index.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios +--- diff --git a/docs/test/developer-testing/intellitest-manual/attribute-glossary.md b/docs/test/developer-testing/intellitest-manual/attribute-glossary.md new file mode 100644 index 00000000000..8e786e293c2 --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/attribute-glossary.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/attribute-glossary +--- diff --git a/docs/test/developer-testing/intellitest-manual/exploration-bounds.md b/docs/test/developer-testing/intellitest-manual/exploration-bounds.md new file mode 100644 index 00000000000..f55e3ce8413 --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/exploration-bounds.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/exploration-bounds +--- diff --git a/docs/test/developer-testing/intellitest-manual/getting-started.md b/docs/test/developer-testing/intellitest-manual/getting-started.md new file mode 100644 index 00000000000..e665b6b7eca --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/getting-started.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/getting-started +--- diff --git a/docs/test/developer-testing/intellitest-manual/index.md b/docs/test/developer-testing/intellitest-manual/index.md new file mode 100644 index 00000000000..404fda97119 --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/index.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/index +--- diff --git a/docs/test/developer-testing/intellitest-manual/input-generation.md b/docs/test/developer-testing/intellitest-manual/input-generation.md new file mode 100644 index 00000000000..d53d637fadf --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/input-generation.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/input-generation +--- diff --git a/docs/test/developer-testing/intellitest-manual/introduction.md b/docs/test/developer-testing/intellitest-manual/introduction.md new file mode 100644 index 00000000000..ee63839b43d --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/introduction.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/introduction +--- diff --git a/docs/test/developer-testing/intellitest-manual/settings-waterfall.md b/docs/test/developer-testing/intellitest-manual/settings-waterfall.md new file mode 100644 index 00000000000..59e092ea99e --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/settings-waterfall.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/settings-waterfall +--- diff --git a/docs/test/developer-testing/intellitest-manual/static-helper-classes.md b/docs/test/developer-testing/intellitest-manual/static-helper-classes.md new file mode 100644 index 00000000000..debc45ab55b --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/static-helper-classes.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/static-helper-classes +--- diff --git a/docs/test/developer-testing/intellitest-manual/test-generation.md b/docs/test/developer-testing/intellitest-manual/test-generation.md new file mode 100644 index 00000000000..f30f38cc00f --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/test-generation.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/test-generation +--- diff --git a/docs/test/developer-testing/intellitest-manual/warnings-and-errors.md b/docs/test/developer-testing/intellitest-manual/warnings-and-errors.md new file mode 100644 index 00000000000..d2a93e24537 --- /dev/null +++ b/docs/test/developer-testing/intellitest-manual/warnings-and-errors.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/intellitest-manual/warnings-and-errors +--- diff --git a/docs/test/get-performance-data-for-load-tests.md b/docs/test/get-performance-data-for-load-tests.md new file mode 100644 index 00000000000..a629fad6d6e --- /dev/null +++ b/docs/test/get-performance-data-for-load-tests.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/get-performance-data-for-load-tests +--- diff --git a/docs/test/how-long-to-keep-test-results.md b/docs/test/how-long-to-keep-test-results.md new file mode 100644 index 00000000000..270732b03ce --- /dev/null +++ b/docs/test/how-long-to-keep-test-results.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/how-long-to-keep-test-results +--- diff --git a/docs/test/index.md b/docs/test/index.md new file mode 100644 index 00000000000..6399545859c --- /dev/null +++ b/docs/test/index.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/index +--- diff --git a/docs/test/lab-management/test-machines/install-configure-test-agents.md b/docs/test/lab-management/test-machines/install-configure-test-agents.md new file mode 100644 index 00000000000..42a2f0b8b38 --- /dev/null +++ b/docs/test/lab-management/test-machines/install-configure-test-agents.md @@ -0,0 +1,4 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/lab-management/install-configure-test-agents +--- + diff --git a/docs/test/lab-management/upgrade-scvmm-2008-r2-scvmm-2012.md b/docs/test/lab-management/upgrade-scvmm-2008-r2-scvmm-2012.md new file mode 100644 index 00000000000..d7fa5773f1f --- /dev/null +++ b/docs/test/lab-management/upgrade-scvmm-2008-r2-scvmm-2012.md @@ -0,0 +1,4 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/lab-management/upgrade-scvmm-2008-r2-scvmm-2012 +--- + diff --git a/docs/test/lab-management/use-build-or-rm-instead-of-lab-management.md b/docs/test/lab-management/use-build-or-rm-instead-of-lab-management.md new file mode 100644 index 00000000000..f2a96a650fd --- /dev/null +++ b/docs/test/lab-management/use-build-or-rm-instead-of-lab-management.md @@ -0,0 +1,4 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/lab-management/use-build-or-rm-instead-of-lab-management +--- + diff --git a/docs/test/lab-management/using-a-lab-environment-for-your-application-lifecycle.md b/docs/test/lab-management/using-a-lab-environment-for-your-application-lifecycle.md new file mode 100644 index 00000000000..54c645aac77 --- /dev/null +++ b/docs/test/lab-management/using-a-lab-environment-for-your-application-lifecycle.md @@ -0,0 +1,4 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/lab-management/using-a-lab-environment-for-your-application-lifecycle +--- + diff --git a/docs/test/load-test-your-app-vs.md b/docs/test/load-test-your-app-vs.md new file mode 100644 index 00000000000..2599a76609f --- /dev/null +++ b/docs/test/load-test-your-app-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/getting-started-with-performance-testing +--- diff --git a/docs/test/manual-exploratory-testing/add-to-bugs-exploratory-testing.md b/docs/test/manual-exploratory-testing/add-to-bugs-exploratory-testing.md new file mode 100644 index 00000000000..1e639a2432d --- /dev/null +++ b/docs/test/manual-exploratory-testing/add-to-bugs-exploratory-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/add-to-bugs-exploratory-testing +--- diff --git a/docs/test/manual-exploratory-testing/capture-exploratory-testing.md b/docs/test/manual-exploratory-testing/capture-exploratory-testing.md new file mode 100644 index 00000000000..e3b7189f015 --- /dev/null +++ b/docs/test/manual-exploratory-testing/capture-exploratory-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/perform-exploratory-tests +--- diff --git a/docs/test/manual-exploratory-testing/collect-data-diagnostics.md b/docs/test/manual-exploratory-testing/collect-data-diagnostics.md new file mode 100644 index 00000000000..9eb7bbd549a --- /dev/null +++ b/docs/test/manual-exploratory-testing/collect-data-diagnostics.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/collect-diagnostic-data +--- diff --git a/docs/test/manual-exploratory-testing/collect-diagnostic-data.md b/docs/test/manual-exploratory-testing/collect-diagnostic-data.md new file mode 100644 index 00000000000..9eb7bbd549a --- /dev/null +++ b/docs/test/manual-exploratory-testing/collect-diagnostic-data.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/collect-diagnostic-data +--- diff --git a/docs/test/manual-exploratory-testing/configuration-testing.md b/docs/test/manual-exploratory-testing/configuration-testing.md new file mode 100644 index 00000000000..a8bedd78091 --- /dev/null +++ b/docs/test/manual-exploratory-testing/configuration-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/test-different-configurations +--- diff --git a/docs/test/manual-exploratory-testing/connected-mode-exploratory-testing.md b/docs/test/manual-exploratory-testing/connected-mode-exploratory-testing.md new file mode 100644 index 00000000000..c83ae063949 --- /dev/null +++ b/docs/test/manual-exploratory-testing/connected-mode-exploratory-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/connected-mode-exploratory-testing +--- diff --git a/docs/test/manual-exploratory-testing/exploratory-testing-mtm.md b/docs/test/manual-exploratory-testing/exploratory-testing-mtm.md new file mode 100644 index 00000000000..f102d0ac32e --- /dev/null +++ b/docs/test/manual-exploratory-testing/exploratory-testing-mtm.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/exploratory-testing-using-microsoft-test-manager +--- diff --git a/docs/test/manual-exploratory-testing/exploratory-testing-mtm.txt b/docs/test/manual-exploratory-testing/exploratory-testing-mtm.txt new file mode 100644 index 00000000000..e00ed58d6be --- /dev/null +++ b/docs/test/manual-exploratory-testing/exploratory-testing-mtm.txt @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/test/manual-exploratory-testing/mtm/exploratory-testing-using-microsoft-test-manager +--- diff --git a/docs/test/manual-exploratory-testing/explore-workitems-exploratory-testing.md b/docs/test/manual-exploratory-testing/explore-workitems-exploratory-testing.md new file mode 100644 index 00000000000..4e62ce0004d --- /dev/null +++ b/docs/test/manual-exploratory-testing/explore-workitems-exploratory-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/explore-workitems-exploratory-testing +--- diff --git a/docs/test/manual-exploratory-testing/getting-started/create-a-test-plan.md b/docs/test/manual-exploratory-testing/getting-started/create-a-test-plan.md new file mode 100644 index 00000000000..2f429bc04ae --- /dev/null +++ b/docs/test/manual-exploratory-testing/getting-started/create-a-test-plan.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/create-a-test-plan +--- diff --git a/docs/test/manual-exploratory-testing/getting-started/create-test-cases.md b/docs/test/manual-exploratory-testing/getting-started/create-test-cases.md new file mode 100644 index 00000000000..7120f2a55ce --- /dev/null +++ b/docs/test/manual-exploratory-testing/getting-started/create-test-cases.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/create-test-cases +--- diff --git a/docs/test/manual-exploratory-testing/getting-started/getting-started-with-manual-testing.md b/docs/test/manual-exploratory-testing/getting-started/getting-started-with-manual-testing.md new file mode 100644 index 00000000000..7120f2a55ce --- /dev/null +++ b/docs/test/manual-exploratory-testing/getting-started/getting-started-with-manual-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/create-test-cases +--- diff --git a/docs/test/manual-exploratory-testing/getting-started/how-long-to-keep-test-results.md b/docs/test/manual-exploratory-testing/getting-started/how-long-to-keep-test-results.md new file mode 100644 index 00000000000..270732b03ce --- /dev/null +++ b/docs/test/manual-exploratory-testing/getting-started/how-long-to-keep-test-results.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/how-long-to-keep-test-results +--- diff --git a/docs/test/manual-exploratory-testing/getting-started/perform-exploratory-tests.md b/docs/test/manual-exploratory-testing/getting-started/perform-exploratory-tests.md new file mode 100644 index 00000000000..e3b7189f015 --- /dev/null +++ b/docs/test/manual-exploratory-testing/getting-started/perform-exploratory-tests.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/perform-exploratory-tests +--- diff --git a/docs/test/manual-exploratory-testing/getting-started/record-play-back-manual-tests.md b/docs/test/manual-exploratory-testing/getting-started/record-play-back-manual-tests.md new file mode 100644 index 00000000000..69389ef5f5b --- /dev/null +++ b/docs/test/manual-exploratory-testing/getting-started/record-play-back-manual-tests.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/record-play-back-manual-tests +--- diff --git a/docs/test/manual-exploratory-testing/getting-started/run-manual-tests.md b/docs/test/manual-exploratory-testing/getting-started/run-manual-tests.md new file mode 100644 index 00000000000..acd3a777d50 --- /dev/null +++ b/docs/test/manual-exploratory-testing/getting-started/run-manual-tests.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/run-manual-tests +--- diff --git a/docs/test/manual-exploratory-testing/getting-started/track-test-status.md b/docs/test/manual-exploratory-testing/getting-started/track-test-status.md new file mode 100644 index 00000000000..89ff57f0d17 --- /dev/null +++ b/docs/test/manual-exploratory-testing/getting-started/track-test-status.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/track-test-status +--- diff --git a/docs/test/manual-exploratory-testing/getting-started/user-acceptance-testing.md b/docs/test/manual-exploratory-testing/getting-started/user-acceptance-testing.md new file mode 100644 index 00000000000..46e454784b3 --- /dev/null +++ b/docs/test/manual-exploratory-testing/getting-started/user-acceptance-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/user-acceptance-testing +--- diff --git a/docs/test/manual-exploratory-testing/index.md b/docs/test/manual-exploratory-testing/index.md new file mode 100644 index 00000000000..cfdf6a5ac99 --- /dev/null +++ b/docs/test/manual-exploratory-testing/index.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/ +--- diff --git a/docs/test/manual-exploratory-testing/insights-exploratory-testing.md b/docs/test/manual-exploratory-testing/insights-exploratory-testing.md new file mode 100644 index 00000000000..26f42eea3f6 --- /dev/null +++ b/docs/test/manual-exploratory-testing/insights-exploratory-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/insights-exploratory-testing +--- diff --git a/docs/test/manual-exploratory-testing/manual-testing-extensibility.md b/docs/test/manual-exploratory-testing/manual-testing-extensibility.md new file mode 100644 index 00000000000..cfdf6a5ac99 --- /dev/null +++ b/docs/test/manual-exploratory-testing/manual-testing-extensibility.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/ +--- diff --git a/docs/test/manual-exploratory-testing/manual-testing.md b/docs/test/manual-exploratory-testing/manual-testing.md new file mode 100644 index 00000000000..9d88995ce73 --- /dev/null +++ b/docs/test/manual-exploratory-testing/manual-testing.md @@ -0,0 +1,4 @@ +--- +redirect_url: /vsts/manual-test/index +--- + diff --git a/docs/test/manual-exploratory-testing/mtm/collect-more-diagnostic-data-in-manual-tests.md b/docs/test/manual-exploratory-testing/mtm/collect-more-diagnostic-data-in-manual-tests.md new file mode 100644 index 00000000000..527a83582b6 --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/collect-more-diagnostic-data-in-manual-tests.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/collect-more-diagnostic-data-in-manual-tests +--- diff --git a/docs/test/manual-exploratory-testing/mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan.md b/docs/test/manual-exploratory-testing/mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan.md new file mode 100644 index 00000000000..8fa530e493a --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/connect-microsoft-test-manager-to-your-team-project-and-test-plan +--- diff --git a/docs/test/manual-exploratory-testing/mtm/copying-and-cloning-test-suites-and-test-cases.md b/docs/test/manual-exploratory-testing/mtm/copying-and-cloning-test-suites-and-test-cases.md new file mode 100644 index 00000000000..46d7d7bea3c --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/copying-and-cloning-test-suites-and-test-cases.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/copying-and-cloning-test-suites-and-test-cases +--- diff --git a/docs/test/manual-exploratory-testing/mtm/exploratory-testing-using-microsoft-test-manager.md b/docs/test/manual-exploratory-testing/mtm/exploratory-testing-using-microsoft-test-manager.md new file mode 100644 index 00000000000..f102d0ac32e --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/exploratory-testing-using-microsoft-test-manager.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/exploratory-testing-using-microsoft-test-manager +--- diff --git a/docs/test/manual-exploratory-testing/mtm/guidance-mtm-usage.md b/docs/test/manual-exploratory-testing/mtm/guidance-mtm-usage.md new file mode 100644 index 00000000000..3378fd61956 --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/guidance-mtm-usage.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/guidance-mtm-usage +--- diff --git a/docs/test/manual-exploratory-testing/mtm/plan-manual-tests-with-microsoft-test-manager.md b/docs/test/manual-exploratory-testing/mtm/plan-manual-tests-with-microsoft-test-manager.md new file mode 100644 index 00000000000..6c550c13cbb --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/plan-manual-tests-with-microsoft-test-manager.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/plan-manual-tests-with-microsoft-test-manager +--- diff --git a/docs/test/manual-exploratory-testing/mtm/run-manual-tests-with-microsoft-test-manager.md b/docs/test/manual-exploratory-testing/mtm/run-manual-tests-with-microsoft-test-manager.md new file mode 100644 index 00000000000..a41275c9e0f --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/run-manual-tests-with-microsoft-test-manager.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/run-manual-tests-with-microsoft-test-manager +--- diff --git a/docs/test/manual-exploratory-testing/mtm/share-steps-between-test-cases.md b/docs/test/manual-exploratory-testing/mtm/share-steps-between-test-cases.md new file mode 100644 index 00000000000..741928c2293 --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/share-steps-between-test-cases.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/share-steps-between-test-cases +--- diff --git a/docs/test/manual-exploratory-testing/mtm/test-configurations-specifying-test-platforms.md b/docs/test/manual-exploratory-testing/mtm/test-configurations-specifying-test-platforms.md new file mode 100644 index 00000000000..5b493579685 --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/test-configurations-specifying-test-platforms.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/test-configurations-specifying-test-platforms +--- diff --git a/docs/test/manual-exploratory-testing/mtm/testing-windows-store-apps.md b/docs/test/manual-exploratory-testing/mtm/testing-windows-store-apps.md new file mode 100644 index 00000000000..23cd5591d72 --- /dev/null +++ b/docs/test/manual-exploratory-testing/mtm/testing-windows-store-apps.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/mtm/testing-windows-store-apps +--- diff --git a/docs/test/manual-exploratory-testing/repeat-test-with-different-data.md b/docs/test/manual-exploratory-testing/repeat-test-with-different-data.md new file mode 100644 index 00000000000..0985d7afba8 --- /dev/null +++ b/docs/test/manual-exploratory-testing/repeat-test-with-different-data.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/repeat-test-with-different-data +--- diff --git a/docs/test/manual-exploratory-testing/share-parameter-data.md b/docs/test/manual-exploratory-testing/share-parameter-data.md new file mode 100644 index 00000000000..e3b7189f015 --- /dev/null +++ b/docs/test/manual-exploratory-testing/share-parameter-data.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/perform-exploratory-tests +--- diff --git a/docs/test/manual-exploratory-testing/stakeholder/provide-stakeholder-feedback.md b/docs/test/manual-exploratory-testing/stakeholder/provide-stakeholder-feedback.md new file mode 100644 index 00000000000..ab9143fbc4b --- /dev/null +++ b/docs/test/manual-exploratory-testing/stakeholder/provide-stakeholder-feedback.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/stakeholder/provide-stakeholder-feedback +--- diff --git a/docs/test/manual-exploratory-testing/stakeholder/request-stakeholder-feedback.md b/docs/test/manual-exploratory-testing/stakeholder/request-stakeholder-feedback.md new file mode 100644 index 00000000000..7d3fc8086df --- /dev/null +++ b/docs/test/manual-exploratory-testing/stakeholder/request-stakeholder-feedback.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/stakeholder/request-stakeholder-feedback +--- diff --git a/docs/test/manual-exploratory-testing/stakeholder/track-stakeholder-feedback.md b/docs/test/manual-exploratory-testing/stakeholder/track-stakeholder-feedback.md new file mode 100644 index 00000000000..a6f37c4971d --- /dev/null +++ b/docs/test/manual-exploratory-testing/stakeholder/track-stakeholder-feedback.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/stakeholder/track-stakeholder-feedback +--- diff --git a/docs/test/manual-exploratory-testing/stakeholder/voluntary-stakeholder-feedback.md b/docs/test/manual-exploratory-testing/stakeholder/voluntary-stakeholder-feedback.md new file mode 100644 index 00000000000..f7ef76e548a --- /dev/null +++ b/docs/test/manual-exploratory-testing/stakeholder/voluntary-stakeholder-feedback.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/stakeholder/voluntary-stakeholder-feedback +--- diff --git a/docs/test/manual-exploratory-testing/standalone-mode-exploratory-testing.md b/docs/test/manual-exploratory-testing/standalone-mode-exploratory-testing.md new file mode 100644 index 00000000000..d1596985baa --- /dev/null +++ b/docs/test/manual-exploratory-testing/standalone-mode-exploratory-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/standalone-mode-exploratory-testing +--- diff --git a/docs/test/manual-exploratory-testing/test-different-configurations.md b/docs/test/manual-exploratory-testing/test-different-configurations.md new file mode 100644 index 00000000000..a8bedd78091 --- /dev/null +++ b/docs/test/manual-exploratory-testing/test-different-configurations.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/test-different-configurations +--- diff --git a/docs/test/overview.md b/docs/test/overview.md new file mode 100644 index 00000000000..6399545859c --- /dev/null +++ b/docs/test/overview.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/index +--- diff --git a/docs/test/perform-exploratory-tests.md b/docs/test/perform-exploratory-tests.md new file mode 100644 index 00000000000..e3b7189f015 --- /dev/null +++ b/docs/test/perform-exploratory-tests.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/perform-exploratory-tests +--- diff --git a/docs/test/performance-testing/app-service-web-app-performance-test.md b/docs/test/performance-testing/app-service-web-app-performance-test.md new file mode 100644 index 00000000000..0a25eeae002 --- /dev/null +++ b/docs/test/performance-testing/app-service-web-app-performance-test.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/app-service-web-app-performance-test +--- diff --git a/docs/test/performance-testing/getting-started/get-performance-data-for-load-tests.md b/docs/test/performance-testing/getting-started/get-performance-data-for-load-tests.md new file mode 100644 index 00000000000..a629fad6d6e --- /dev/null +++ b/docs/test/performance-testing/getting-started/get-performance-data-for-load-tests.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/get-performance-data-for-load-tests +--- diff --git a/docs/test/performance-testing/getting-started/get-started-jmeter-test.md b/docs/test/performance-testing/getting-started/get-started-jmeter-test.md new file mode 100644 index 00000000000..a8a7e74f492 --- /dev/null +++ b/docs/test/performance-testing/getting-started/get-started-jmeter-test.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/get-started-jmeter-test +--- diff --git a/docs/test/performance-testing/getting-started/get-started-simple-cloud-load-test.md b/docs/test/performance-testing/getting-started/get-started-simple-cloud-load-test.md new file mode 100644 index 00000000000..62e08f8b1d8 --- /dev/null +++ b/docs/test/performance-testing/getting-started/get-started-simple-cloud-load-test.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/get-started-simple-cloud-load-test +--- diff --git a/docs/test/performance-testing/getting-started/getting-started-with-performance-testing.md b/docs/test/performance-testing/getting-started/getting-started-with-performance-testing.md new file mode 100644 index 00000000000..2599a76609f --- /dev/null +++ b/docs/test/performance-testing/getting-started/getting-started-with-performance-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/getting-started-with-performance-testing +--- diff --git a/docs/test/performance-testing/getting-started/performance-reports.md b/docs/test/performance-testing/getting-started/performance-reports.md new file mode 100644 index 00000000000..15b2eef7916 --- /dev/null +++ b/docs/test/performance-testing/getting-started/performance-reports.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/performance-reports +--- diff --git a/docs/test/performance-testing/getting-started/record-and-replay-cloud-load-tests.md b/docs/test/performance-testing/getting-started/record-and-replay-cloud-load-tests.md new file mode 100644 index 00000000000..1d2049a378f --- /dev/null +++ b/docs/test/performance-testing/getting-started/record-and-replay-cloud-load-tests.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/record-and-replay-cloud-load-tests +--- diff --git a/docs/test/performance-testing/index.md b/docs/test/performance-testing/index.md new file mode 100644 index 00000000000..7a03ce069b4 --- /dev/null +++ b/docs/test/performance-testing/index.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/ +--- diff --git a/docs/test/performance-testing/performance-testing.md b/docs/test/performance-testing/performance-testing.md new file mode 100644 index 00000000000..3478d206c83 --- /dev/null +++ b/docs/test/performance-testing/performance-testing.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/index +--- diff --git a/docs/test/performance-testing/reference-qa.md b/docs/test/performance-testing/reference-qa.md new file mode 100644 index 00000000000..3c609bc8aef --- /dev/null +++ b/docs/test/performance-testing/reference-qa.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/reference-qa +--- diff --git a/docs/test/performance-testing/run-performance-tests-app-before-release.md b/docs/test/performance-testing/run-performance-tests-app-before-release.md new file mode 100644 index 00000000000..7ad68b60e2c --- /dev/null +++ b/docs/test/performance-testing/run-performance-tests-app-before-release.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/run-performance-tests-app-before-release +--- diff --git a/docs/test/performance-tests/run-performance-tests-app-before-release.md b/docs/test/performance-tests/run-performance-tests-app-before-release.md new file mode 100644 index 00000000000..7ad68b60e2c --- /dev/null +++ b/docs/test/performance-tests/run-performance-tests-app-before-release.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/load-test/run-performance-tests-app-before-release +--- diff --git a/docs/test/run-tests-vs.md b/docs/test/run-tests-vs.md new file mode 100644 index 00000000000..acd3a777d50 --- /dev/null +++ b/docs/test/run-tests-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/run-manual-tests +--- diff --git a/docs/test/run-tests-with-builds.md b/docs/test/run-tests-with-builds.md new file mode 100644 index 00000000000..65edc9985f2 --- /dev/null +++ b/docs/test/run-tests-with-builds.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/build-release/test/getting-started-with-continuous-testing +--- diff --git a/docs/test/test-machines/install-configure-test-agents.md b/docs/test/test-machines/install-configure-test-agents.md new file mode 100644 index 00000000000..7260583600a --- /dev/null +++ b/docs/test/test-machines/install-configure-test-agents.md @@ -0,0 +1,3 @@ +--- +redirect_url: https://docs.microsoft.com/visualstudio/test/lab-management/install-configure-test-agents +--- diff --git a/docs/test/track-test-status-vs.md b/docs/test/track-test-status-vs.md new file mode 100644 index 00000000000..89ff57f0d17 --- /dev/null +++ b/docs/test/track-test-status-vs.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/getting-started/track-test-status +--- diff --git a/docs/test/whats-new-test.md b/docs/test/whats-new-test.md new file mode 100644 index 00000000000..6399545859c --- /dev/null +++ b/docs/test/whats-new-test.md @@ -0,0 +1,3 @@ +--- +redirect_url: /vsts/manual-test/index +--- diff --git a/docs/tfs-server/_img/IC347963.png b/docs/tfs-server/_img/IC347963.png new file mode 100644 index 00000000000..5ff62954ce8 Binary files /dev/null and b/docs/tfs-server/_img/IC347963.png differ diff --git a/docs/tfs-server/_img/a-simple-topo.png b/docs/tfs-server/_img/a-simple-topo.png new file mode 100644 index 00000000000..847c61f29b3 Binary files /dev/null and b/docs/tfs-server/_img/a-simple-topo.png differ diff --git a/docs/tfs-server/_img/add-administrator-tfs/add-team-administrator.png b/docs/tfs-server/_img/add-administrator-tfs/add-team-administrator.png new file mode 100644 index 00000000000..f4c5ce514a4 Binary files /dev/null and b/docs/tfs-server/_img/add-administrator-tfs/add-team-administrator.png differ diff --git a/docs/tfs-server/_img/add-administrator-tfs/add-user-group.png b/docs/tfs-server/_img/add-administrator-tfs/add-user-group.png new file mode 100644 index 00000000000..c3567e5c127 Binary files /dev/null and b/docs/tfs-server/_img/add-administrator-tfs/add-user-group.png differ diff --git a/docs/tfs-server/_img/add-administrator-tfs/admin-console.png b/docs/tfs-server/_img/add-administrator-tfs/admin-console.png new file mode 100644 index 00000000000..28ead5a7abb Binary files /dev/null and b/docs/tfs-server/_img/add-administrator-tfs/admin-console.png differ diff --git a/docs/tfs-server/_img/add-administrator-tfs/invite-administrators.png b/docs/tfs-server/_img/add-administrator-tfs/invite-administrators.png new file mode 100644 index 00000000000..e7612653c2b Binary files /dev/null and b/docs/tfs-server/_img/add-administrator-tfs/invite-administrators.png differ diff --git a/docs/tfs-server/_img/add-administrator-tfs/people-and-groups-collection.png b/docs/tfs-server/_img/add-administrator-tfs/people-and-groups-collection.png new file mode 100644 index 00000000000..19d554f44e9 Binary files /dev/null and b/docs/tfs-server/_img/add-administrator-tfs/people-and-groups-collection.png differ diff --git a/docs/tfs-server/_img/add-administrator-tfs/people-and-groups.png b/docs/tfs-server/_img/add-administrator-tfs/people-and-groups.png new file mode 100644 index 00000000000..842ae1794f5 Binary files /dev/null and b/docs/tfs-server/_img/add-administrator-tfs/people-and-groups.png differ diff --git a/docs/tfs-server/_img/add-administrator-tfs/rs-role-assignment.png b/docs/tfs-server/_img/add-administrator-tfs/rs-role-assignment.png new file mode 100644 index 00000000000..88f49891958 Binary files /dev/null and b/docs/tfs-server/_img/add-administrator-tfs/rs-role-assignment.png differ diff --git a/docs/tfs-server/_img/add-administrator-tfs/windows-groups.png b/docs/tfs-server/_img/add-administrator-tfs/windows-groups.png new file mode 100644 index 00000000000..2d62d09938a Binary files /dev/null and b/docs/tfs-server/_img/add-administrator-tfs/windows-groups.png differ diff --git a/docs/tfs-server/_img/admin-gear-icon.png b/docs/tfs-server/_img/admin-gear-icon.png new file mode 100644 index 00000000000..8f79c4767e0 Binary files /dev/null and b/docs/tfs-server/_img/admin-gear-icon.png differ diff --git a/docs/tfs-server/_img/architecture/IC406389.png b/docs/tfs-server/_img/architecture/IC406389.png new file mode 100644 index 00000000000..72cb0b5adce Binary files /dev/null and b/docs/tfs-server/_img/architecture/IC406389.png differ diff --git a/docs/tfs-server/_img/architecture/IC630774.png b/docs/tfs-server/_img/architecture/IC630774.png new file mode 100644 index 00000000000..757ac77c78d Binary files /dev/null and b/docs/tfs-server/_img/architecture/IC630774.png differ diff --git a/docs/tfs-server/_img/architecture/IC738717.png b/docs/tfs-server/_img/architecture/IC738717.png new file mode 100644 index 00000000000..d3efaa74ac2 Binary files /dev/null and b/docs/tfs-server/_img/architecture/IC738717.png differ diff --git a/docs/tfs-server/_img/architecture/hosted-tfs.png b/docs/tfs-server/_img/architecture/hosted-tfs.png new file mode 100644 index 00000000000..279f287e37d Binary files /dev/null and b/docs/tfs-server/_img/architecture/hosted-tfs.png differ diff --git a/docs/tfs-server/_img/architecture/object_model.png b/docs/tfs-server/_img/architecture/object_model.png new file mode 100644 index 00000000000..ad9b46cc9db Binary files /dev/null and b/docs/tfs-server/_img/architecture/object_model.png differ diff --git a/docs/tfs-server/_img/architecture/optional_tfs_services.png b/docs/tfs-server/_img/architecture/optional_tfs_services.png new file mode 100644 index 00000000000..ad2461eeac3 Binary files /dev/null and b/docs/tfs-server/_img/architecture/optional_tfs_services.png differ diff --git a/docs/tfs-server/_img/architecture/ports-protocols.png b/docs/tfs-server/_img/architecture/ports-protocols.png new file mode 100644 index 00000000000..0c180c78eab Binary files /dev/null and b/docs/tfs-server/_img/architecture/ports-protocols.png differ diff --git a/docs/tfs-server/_img/architecture/tfs_client_model.png b/docs/tfs-server/_img/architecture/tfs_client_model.png new file mode 100644 index 00000000000..89567ba7636 Binary files /dev/null and b/docs/tfs-server/_img/architecture/tfs_client_model.png differ diff --git a/docs/tfs-server/_img/architecture/tfs_services_tiers.png b/docs/tfs-server/_img/architecture/tfs_services_tiers.png new file mode 100644 index 00000000000..c7e6b54223a Binary files /dev/null and b/docs/tfs-server/_img/architecture/tfs_services_tiers.png differ diff --git a/docs/tfs-server/_img/architecture/vsts_architecture_intro.png b/docs/tfs-server/_img/architecture/vsts_architecture_intro.png new file mode 100644 index 00000000000..96e3640547d Binary files /dev/null and b/docs/tfs-server/_img/architecture/vsts_architecture_intro.png differ diff --git a/docs/tfs-server/_img/complex-multi-domain-topo.png b/docs/tfs-server/_img/complex-multi-domain-topo.png new file mode 100644 index 00000000000..43b5bc307e3 Binary files /dev/null and b/docs/tfs-server/_img/complex-multi-domain-topo.png differ diff --git a/docs/tfs-server/_img/complex-multi-domain-topo2.png b/docs/tfs-server/_img/complex-multi-domain-topo2.png new file mode 100644 index 00000000000..a6ed46720a1 Binary files /dev/null and b/docs/tfs-server/_img/complex-multi-domain-topo2.png differ diff --git a/docs/tfs-server/_img/complex-single-domain-topo.png b/docs/tfs-server/_img/complex-single-domain-topo.png new file mode 100644 index 00000000000..486cede9800 Binary files /dev/null and b/docs/tfs-server/_img/complex-single-domain-topo.png differ diff --git a/docs/tfs-server/_img/moderate-topo.png b/docs/tfs-server/_img/moderate-topo.png new file mode 100644 index 00000000000..7575a6104ff Binary files /dev/null and b/docs/tfs-server/_img/moderate-topo.png differ diff --git a/docs/tfs-server/_img/rename-team-project/remotelink.PNG b/docs/tfs-server/_img/rename-team-project/remotelink.PNG new file mode 100644 index 00000000000..bf6a24e93a0 Binary files /dev/null and b/docs/tfs-server/_img/rename-team-project/remotelink.PNG differ diff --git a/docs/tfs-server/_img/simplest-topo.png b/docs/tfs-server/_img/simplest-topo.png new file mode 100644 index 00000000000..66cc074eccb Binary files /dev/null and b/docs/tfs-server/_img/simplest-topo.png differ diff --git a/docs/tfs-server/_shared/about-sharepoint-deprecation.md b/docs/tfs-server/_shared/about-sharepoint-deprecation.md new file mode 100644 index 00000000000..ad37a08b59c --- /dev/null +++ b/docs/tfs-server/_shared/about-sharepoint-deprecation.md @@ -0,0 +1,4 @@ +**TFS 2017 | TFS 2015 | TFS 2013** + +> [!NOTE] +> TFS 2018 and later versions no longer support native integration with SharePoint products. If you're planning to upgrade to TFS 2018, read [About SharePoint integration](/vsts/ecosystem/sharepoint/about-sharepoint-integration) to learn about the options available to you. \ No newline at end of file diff --git a/docs/tfs-server/add-administrator-tfs.md b/docs/tfs-server/add-administrator-tfs.md new file mode 100644 index 00000000000..498b3a8b249 --- /dev/null +++ b/docs/tfs-server/add-administrator-tfs.md @@ -0,0 +1,62 @@ +--- +title: Add administrators TFS +description: Add server, team project collection, or team project administrators +ms.assetid: ed578715-f4d2-4042-b797-5f97abde9973 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 03/29/2017 +ms.topic: get-started-article +--- + +# Add administrators to TFS + +**TFS 2017 | TFS 2015 | TFS 2013** + +Administrators in VSTS and TFS exist at three levels: +the team, the team project, and the team project collection. + +In TFS, there are also server-level administrators. + +See adding administrators to [project collections](../accounts/add-administrator-project-collection.md) and +[projects](../accounts/add-administrator-team-project.md). + + +## Server + +To perform system maintenance, schedule backups, add functionality, and do other tasks, +TFS server administrators must be able to configure and control all aspects of TFS. +As a result, TFS server administrators require administrative permissions +in the software that TFS interoperates with, +in addition to TFS itself. + +You can quickly grant these permissions to administrators by adding them to the **Team Foundation Administrators** +group in Team Foundation Server (TFS). + +1. On the application-tier server, add the user to the local Administrators group. + + ![Follow instructions for your operating system](_img/add-administrator-tfs/windows-groups.png) + +2. In the TFS administration console and add the user to the set of users who can run the administration console. + + ![Click or tab, then input username](_img/add-administrator-tfs/admin-console.png) + + If you're running a standard single-server deployment, + or a multi-server deployment without SharePoint or reporting, that's it! + However, if you have multiple application tiers, + you'll need to repeat these two steps on every application tier server. + And if you have SharePoint or reporting on other servers, + you might need to manually add administrative users to those products separately. + + See [Set SharePoint site permissions](../security/set-sharepoint-permissions.md) or [Grant permissions to view or create SQL Server reports in TFS](../report/admin/grant-permissions-to-reports.md). + + + +## Team + +0. From the team page, click the ![Settings icon](_img/admin-gear-icon.png) to go to the team administraton page. + +0. Add an administrator. + + ![Add link in the administrators section of the team administration page](_img/add-administrator-tfs/add-team-administrator.png) diff --git a/docs/tfs-server/admin/_img/IC314731.png b/docs/tfs-server/admin/_img/IC314731.png new file mode 100644 index 00000000000..aff50dfeed1 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC314731.png differ diff --git a/docs/tfs-server/admin/_img/IC372331.png b/docs/tfs-server/admin/_img/IC372331.png new file mode 100644 index 00000000000..d4367e76912 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC372331.png differ diff --git a/docs/tfs-server/admin/_img/IC372332.png b/docs/tfs-server/admin/_img/IC372332.png new file mode 100644 index 00000000000..92644c00bee Binary files /dev/null and b/docs/tfs-server/admin/_img/IC372332.png differ diff --git a/docs/tfs-server/admin/_img/IC562054.png b/docs/tfs-server/admin/_img/IC562054.png new file mode 100644 index 00000000000..c720f079581 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC562054.png differ diff --git a/docs/tfs-server/admin/_img/IC562055.png b/docs/tfs-server/admin/_img/IC562055.png new file mode 100644 index 00000000000..85ec858593c Binary files /dev/null and b/docs/tfs-server/admin/_img/IC562055.png differ diff --git a/docs/tfs-server/admin/_img/IC562056.png b/docs/tfs-server/admin/_img/IC562056.png new file mode 100644 index 00000000000..14d09462c7a Binary files /dev/null and b/docs/tfs-server/admin/_img/IC562056.png differ diff --git a/docs/tfs-server/admin/_img/IC654273.png b/docs/tfs-server/admin/_img/IC654273.png new file mode 100644 index 00000000000..a58d3d39a1d Binary files /dev/null and b/docs/tfs-server/admin/_img/IC654273.png differ diff --git a/docs/tfs-server/admin/_img/IC654274.png b/docs/tfs-server/admin/_img/IC654274.png new file mode 100644 index 00000000000..09501ad7ccd Binary files /dev/null and b/docs/tfs-server/admin/_img/IC654274.png differ diff --git a/docs/tfs-server/admin/_img/IC664996.png b/docs/tfs-server/admin/_img/IC664996.png new file mode 100644 index 00000000000..01e9dc0ed58 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC664996.png differ diff --git a/docs/tfs-server/admin/_img/IC664997.png b/docs/tfs-server/admin/_img/IC664997.png new file mode 100644 index 00000000000..600185b4a8e Binary files /dev/null and b/docs/tfs-server/admin/_img/IC664997.png differ diff --git a/docs/tfs-server/admin/_img/IC664998.png b/docs/tfs-server/admin/_img/IC664998.png new file mode 100644 index 00000000000..025876d4383 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC664998.png differ diff --git a/docs/tfs-server/admin/_img/IC665036.png b/docs/tfs-server/admin/_img/IC665036.png new file mode 100644 index 00000000000..26f3a268226 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC665036.png differ diff --git a/docs/tfs-server/admin/_img/IC665322.png b/docs/tfs-server/admin/_img/IC665322.png new file mode 100644 index 00000000000..7f3a2d4d4ab Binary files /dev/null and b/docs/tfs-server/admin/_img/IC665322.png differ diff --git a/docs/tfs-server/admin/_img/IC675405.png b/docs/tfs-server/admin/_img/IC675405.png new file mode 100644 index 00000000000..2821905de07 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC675405.png differ diff --git a/docs/tfs-server/admin/_img/IC676478.png b/docs/tfs-server/admin/_img/IC676478.png new file mode 100644 index 00000000000..5c2e3415ac1 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC676478.png differ diff --git a/docs/tfs-server/admin/_img/IC676480.png b/docs/tfs-server/admin/_img/IC676480.png new file mode 100644 index 00000000000..8b0bc5992e6 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC676480.png differ diff --git a/docs/tfs-server/admin/_img/IC676482.png b/docs/tfs-server/admin/_img/IC676482.png new file mode 100644 index 00000000000..ba6b84b08ac Binary files /dev/null and b/docs/tfs-server/admin/_img/IC676482.png differ diff --git a/docs/tfs-server/admin/_img/IC676485.png b/docs/tfs-server/admin/_img/IC676485.png new file mode 100644 index 00000000000..1a46d88f363 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC676485.png differ diff --git a/docs/tfs-server/admin/_img/IC676488.png b/docs/tfs-server/admin/_img/IC676488.png new file mode 100644 index 00000000000..bbe918f7abd Binary files /dev/null and b/docs/tfs-server/admin/_img/IC676488.png differ diff --git a/docs/tfs-server/admin/_img/IC676780.png b/docs/tfs-server/admin/_img/IC676780.png new file mode 100644 index 00000000000..7e26bd8d259 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC676780.png differ diff --git a/docs/tfs-server/admin/_img/IC676784.png b/docs/tfs-server/admin/_img/IC676784.png new file mode 100644 index 00000000000..08db7c02b64 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC676784.png differ diff --git a/docs/tfs-server/admin/_img/IC676788.png b/docs/tfs-server/admin/_img/IC676788.png new file mode 100644 index 00000000000..8f11296bae4 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC676788.png differ diff --git a/docs/tfs-server/admin/_img/IC677247.png b/docs/tfs-server/admin/_img/IC677247.png new file mode 100644 index 00000000000..2a7929f8253 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC677247.png differ diff --git a/docs/tfs-server/admin/_img/IC677249.png b/docs/tfs-server/admin/_img/IC677249.png new file mode 100644 index 00000000000..c927d9afc01 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC677249.png differ diff --git a/docs/tfs-server/admin/_img/IC677919.png b/docs/tfs-server/admin/_img/IC677919.png new file mode 100644 index 00000000000..42ccb9f08da Binary files /dev/null and b/docs/tfs-server/admin/_img/IC677919.png differ diff --git a/docs/tfs-server/admin/_img/IC677921.png b/docs/tfs-server/admin/_img/IC677921.png new file mode 100644 index 00000000000..dbe2c855980 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC677921.png differ diff --git a/docs/tfs-server/admin/_img/IC682727.png b/docs/tfs-server/admin/_img/IC682727.png new file mode 100644 index 00000000000..50c0431c515 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC682727.png differ diff --git a/docs/tfs-server/admin/_img/IC682729.png b/docs/tfs-server/admin/_img/IC682729.png new file mode 100644 index 00000000000..415afa1476f Binary files /dev/null and b/docs/tfs-server/admin/_img/IC682729.png differ diff --git a/docs/tfs-server/admin/_img/IC682730.png b/docs/tfs-server/admin/_img/IC682730.png new file mode 100644 index 00000000000..165246fea00 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC682730.png differ diff --git a/docs/tfs-server/admin/_img/IC687421.png b/docs/tfs-server/admin/_img/IC687421.png new file mode 100644 index 00000000000..5634085bc9c Binary files /dev/null and b/docs/tfs-server/admin/_img/IC687421.png differ diff --git a/docs/tfs-server/admin/_img/IC688120.png b/docs/tfs-server/admin/_img/IC688120.png new file mode 100644 index 00000000000..b4db4b5269c Binary files /dev/null and b/docs/tfs-server/admin/_img/IC688120.png differ diff --git a/docs/tfs-server/admin/_img/IC688121.png b/docs/tfs-server/admin/_img/IC688121.png new file mode 100644 index 00000000000..4fbc23f956b Binary files /dev/null and b/docs/tfs-server/admin/_img/IC688121.png differ diff --git a/docs/tfs-server/admin/_img/IC688122.png b/docs/tfs-server/admin/_img/IC688122.png new file mode 100644 index 00000000000..6e7cee9ee8d Binary files /dev/null and b/docs/tfs-server/admin/_img/IC688122.png differ diff --git a/docs/tfs-server/admin/_img/IC688492.png b/docs/tfs-server/admin/_img/IC688492.png new file mode 100644 index 00000000000..aa3dbe19ca4 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC688492.png differ diff --git a/docs/tfs-server/admin/_img/IC688711.png b/docs/tfs-server/admin/_img/IC688711.png new file mode 100644 index 00000000000..233154b21ac Binary files /dev/null and b/docs/tfs-server/admin/_img/IC688711.png differ diff --git a/docs/tfs-server/admin/_img/IC688712.png b/docs/tfs-server/admin/_img/IC688712.png new file mode 100644 index 00000000000..647e0b8f3bb Binary files /dev/null and b/docs/tfs-server/admin/_img/IC688712.png differ diff --git a/docs/tfs-server/admin/_img/IC689361.png b/docs/tfs-server/admin/_img/IC689361.png new file mode 100644 index 00000000000..81f9e5bc48c Binary files /dev/null and b/docs/tfs-server/admin/_img/IC689361.png differ diff --git a/docs/tfs-server/admin/_img/IC689362.png b/docs/tfs-server/admin/_img/IC689362.png new file mode 100644 index 00000000000..535890cbe34 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC689362.png differ diff --git a/docs/tfs-server/admin/_img/IC712598.png b/docs/tfs-server/admin/_img/IC712598.png new file mode 100644 index 00000000000..3144096ce6b Binary files /dev/null and b/docs/tfs-server/admin/_img/IC712598.png differ diff --git a/docs/tfs-server/admin/_img/IC712599.png b/docs/tfs-server/admin/_img/IC712599.png new file mode 100644 index 00000000000..9f5efa00a25 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC712599.png differ diff --git a/docs/tfs-server/admin/_img/IC712602.png b/docs/tfs-server/admin/_img/IC712602.png new file mode 100644 index 00000000000..8418bd80d09 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC712602.png differ diff --git a/docs/tfs-server/admin/_img/IC712603.png b/docs/tfs-server/admin/_img/IC712603.png new file mode 100644 index 00000000000..8d794170a3a Binary files /dev/null and b/docs/tfs-server/admin/_img/IC712603.png differ diff --git a/docs/tfs-server/admin/_img/IC720089.png b/docs/tfs-server/admin/_img/IC720089.png new file mode 100644 index 00000000000..50d9a867314 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC720089.png differ diff --git a/docs/tfs-server/admin/_img/IC720090.png b/docs/tfs-server/admin/_img/IC720090.png new file mode 100644 index 00000000000..191d02a2f4d Binary files /dev/null and b/docs/tfs-server/admin/_img/IC720090.png differ diff --git a/docs/tfs-server/admin/_img/IC724655.png b/docs/tfs-server/admin/_img/IC724655.png new file mode 100644 index 00000000000..90205069cb0 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC724655.png differ diff --git a/docs/tfs-server/admin/_img/IC724656.png b/docs/tfs-server/admin/_img/IC724656.png new file mode 100644 index 00000000000..d970d527f9b Binary files /dev/null and b/docs/tfs-server/admin/_img/IC724656.png differ diff --git a/docs/tfs-server/admin/_img/IC726408.png b/docs/tfs-server/admin/_img/IC726408.png new file mode 100644 index 00000000000..0ab6082cf2b Binary files /dev/null and b/docs/tfs-server/admin/_img/IC726408.png differ diff --git a/docs/tfs-server/admin/_img/IC726728.png b/docs/tfs-server/admin/_img/IC726728.png new file mode 100644 index 00000000000..2385d792030 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC726728.png differ diff --git a/docs/tfs-server/admin/_img/IC726730.png b/docs/tfs-server/admin/_img/IC726730.png new file mode 100644 index 00000000000..cb52dd0aa47 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC726730.png differ diff --git a/docs/tfs-server/admin/_img/IC728936.png b/docs/tfs-server/admin/_img/IC728936.png new file mode 100644 index 00000000000..63837ab34a5 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC728936.png differ diff --git a/docs/tfs-server/admin/_img/IC728993.png b/docs/tfs-server/admin/_img/IC728993.png new file mode 100644 index 00000000000..c599429fbda Binary files /dev/null and b/docs/tfs-server/admin/_img/IC728993.png differ diff --git a/docs/tfs-server/admin/_img/IC729494.png b/docs/tfs-server/admin/_img/IC729494.png new file mode 100644 index 00000000000..88c4abf5f52 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC729494.png differ diff --git a/docs/tfs-server/admin/_img/IC729495.png b/docs/tfs-server/admin/_img/IC729495.png new file mode 100644 index 00000000000..13d1a4b86b9 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC729495.png differ diff --git a/docs/tfs-server/admin/_img/IC729496.png b/docs/tfs-server/admin/_img/IC729496.png new file mode 100644 index 00000000000..7ad6abfc0f6 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC729496.png differ diff --git a/docs/tfs-server/admin/_img/IC729692.png b/docs/tfs-server/admin/_img/IC729692.png new file mode 100644 index 00000000000..45bdef0c498 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC729692.png differ diff --git a/docs/tfs-server/admin/_img/IC738718.png b/docs/tfs-server/admin/_img/IC738718.png new file mode 100644 index 00000000000..4926cbce4e4 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738718.png differ diff --git a/docs/tfs-server/admin/_img/IC738719.png b/docs/tfs-server/admin/_img/IC738719.png new file mode 100644 index 00000000000..ba123bb4adb Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738719.png differ diff --git a/docs/tfs-server/admin/_img/IC738720.png b/docs/tfs-server/admin/_img/IC738720.png new file mode 100644 index 00000000000..11684f59aa6 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738720.png differ diff --git a/docs/tfs-server/admin/_img/IC738721.png b/docs/tfs-server/admin/_img/IC738721.png new file mode 100644 index 00000000000..5866dd733fc Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738721.png differ diff --git a/docs/tfs-server/admin/_img/IC738722.png b/docs/tfs-server/admin/_img/IC738722.png new file mode 100644 index 00000000000..16d27e8a052 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738722.png differ diff --git a/docs/tfs-server/admin/_img/IC738723.png b/docs/tfs-server/admin/_img/IC738723.png new file mode 100644 index 00000000000..577daed0bc4 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738723.png differ diff --git a/docs/tfs-server/admin/_img/IC738724.png b/docs/tfs-server/admin/_img/IC738724.png new file mode 100644 index 00000000000..e41f230e7c5 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738724.png differ diff --git a/docs/tfs-server/admin/_img/IC738725.png b/docs/tfs-server/admin/_img/IC738725.png new file mode 100644 index 00000000000..3e72aa530f7 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738725.png differ diff --git a/docs/tfs-server/admin/_img/IC738726.png b/docs/tfs-server/admin/_img/IC738726.png new file mode 100644 index 00000000000..98de29626a0 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738726.png differ diff --git a/docs/tfs-server/admin/_img/IC738727.png b/docs/tfs-server/admin/_img/IC738727.png new file mode 100644 index 00000000000..314e1df5420 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738727.png differ diff --git a/docs/tfs-server/admin/_img/IC738728.png b/docs/tfs-server/admin/_img/IC738728.png new file mode 100644 index 00000000000..445451f1466 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738728.png differ diff --git a/docs/tfs-server/admin/_img/IC738729.png b/docs/tfs-server/admin/_img/IC738729.png new file mode 100644 index 00000000000..1cef06dbd14 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738729.png differ diff --git a/docs/tfs-server/admin/_img/IC738730.png b/docs/tfs-server/admin/_img/IC738730.png new file mode 100644 index 00000000000..b1bc87a5c4f Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738730.png differ diff --git a/docs/tfs-server/admin/_img/IC738731.png b/docs/tfs-server/admin/_img/IC738731.png new file mode 100644 index 00000000000..d65142a8709 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738731.png differ diff --git a/docs/tfs-server/admin/_img/IC738732.png b/docs/tfs-server/admin/_img/IC738732.png new file mode 100644 index 00000000000..ce6cdd14a09 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738732.png differ diff --git a/docs/tfs-server/admin/_img/IC738734.png b/docs/tfs-server/admin/_img/IC738734.png new file mode 100644 index 00000000000..b53a0e43b5f Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738734.png differ diff --git a/docs/tfs-server/admin/_img/IC738735.png b/docs/tfs-server/admin/_img/IC738735.png new file mode 100644 index 00000000000..15e74823282 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738735.png differ diff --git a/docs/tfs-server/admin/_img/IC738736.png b/docs/tfs-server/admin/_img/IC738736.png new file mode 100644 index 00000000000..e30c955e700 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC738736.png differ diff --git a/docs/tfs-server/admin/_img/IC740323.png b/docs/tfs-server/admin/_img/IC740323.png new file mode 100644 index 00000000000..9a4ad69337d Binary files /dev/null and b/docs/tfs-server/admin/_img/IC740323.png differ diff --git a/docs/tfs-server/admin/_img/IC742581.png b/docs/tfs-server/admin/_img/IC742581.png new file mode 100644 index 00000000000..19d9fba46ca Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742581.png differ diff --git a/docs/tfs-server/admin/_img/IC742582.png b/docs/tfs-server/admin/_img/IC742582.png new file mode 100644 index 00000000000..7a4b9261b96 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742582.png differ diff --git a/docs/tfs-server/admin/_img/IC742583.png b/docs/tfs-server/admin/_img/IC742583.png new file mode 100644 index 00000000000..24ca1d12c5f Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742583.png differ diff --git a/docs/tfs-server/admin/_img/IC742585.png b/docs/tfs-server/admin/_img/IC742585.png new file mode 100644 index 00000000000..af04fd7d0d3 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742585.png differ diff --git a/docs/tfs-server/admin/_img/IC742586.png b/docs/tfs-server/admin/_img/IC742586.png new file mode 100644 index 00000000000..f57692ef8af Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742586.png differ diff --git a/docs/tfs-server/admin/_img/IC742587.png b/docs/tfs-server/admin/_img/IC742587.png new file mode 100644 index 00000000000..ba29c5fcbe7 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742587.png differ diff --git a/docs/tfs-server/admin/_img/IC742588.png b/docs/tfs-server/admin/_img/IC742588.png new file mode 100644 index 00000000000..f8d5d264c34 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742588.png differ diff --git a/docs/tfs-server/admin/_img/IC742589.png b/docs/tfs-server/admin/_img/IC742589.png new file mode 100644 index 00000000000..17a751c0040 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742589.png differ diff --git a/docs/tfs-server/admin/_img/IC742590.png b/docs/tfs-server/admin/_img/IC742590.png new file mode 100644 index 00000000000..ce996409e29 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742590.png differ diff --git a/docs/tfs-server/admin/_img/IC742591.png b/docs/tfs-server/admin/_img/IC742591.png new file mode 100644 index 00000000000..f6819b2f855 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742591.png differ diff --git a/docs/tfs-server/admin/_img/IC742592.png b/docs/tfs-server/admin/_img/IC742592.png new file mode 100644 index 00000000000..a82d6d68ced Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742592.png differ diff --git a/docs/tfs-server/admin/_img/IC742593.png b/docs/tfs-server/admin/_img/IC742593.png new file mode 100644 index 00000000000..b2c2f767fd5 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742593.png differ diff --git a/docs/tfs-server/admin/_img/IC742594.png b/docs/tfs-server/admin/_img/IC742594.png new file mode 100644 index 00000000000..76de8282436 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC742594.png differ diff --git a/docs/tfs-server/admin/_img/IC752293.png b/docs/tfs-server/admin/_img/IC752293.png new file mode 100644 index 00000000000..39a90bfd917 Binary files /dev/null and b/docs/tfs-server/admin/_img/IC752293.png differ diff --git a/docs/tfs-server/admin/_img/add-proj-admin-dlg.png b/docs/tfs-server/admin/_img/add-proj-admin-dlg.png new file mode 100644 index 00000000000..23aa48712aa Binary files /dev/null and b/docs/tfs-server/admin/_img/add-proj-admin-dlg.png differ diff --git a/docs/tfs-server/admin/_img/admin-console-button.png b/docs/tfs-server/admin/_img/admin-console-button.png new file mode 100644 index 00000000000..590d5f48e71 Binary files /dev/null and b/docs/tfs-server/admin/_img/admin-console-button.png differ diff --git a/docs/tfs-server/admin/_img/app-tier-version-numbers.png b/docs/tfs-server/admin/_img/app-tier-version-numbers.png new file mode 100644 index 00000000000..edaa8a05aea Binary files /dev/null and b/docs/tfs-server/admin/_img/app-tier-version-numbers.png differ diff --git a/docs/tfs-server/admin/_img/app-tier-wiz-complete.png b/docs/tfs-server/admin/_img/app-tier-wiz-complete.png new file mode 100644 index 00000000000..e2cad6919ee Binary files /dev/null and b/docs/tfs-server/admin/_img/app-tier-wiz-complete.png differ diff --git a/docs/tfs-server/admin/_img/app-tier-wiz-sql-name.png b/docs/tfs-server/admin/_img/app-tier-wiz-sql-name.png new file mode 100644 index 00000000000..65a36df8de7 Binary files /dev/null and b/docs/tfs-server/admin/_img/app-tier-wiz-sql-name.png differ diff --git a/docs/tfs-server/admin/_img/app-tier-wiz-svc-acct-name.png b/docs/tfs-server/admin/_img/app-tier-wiz-svc-acct-name.png new file mode 100644 index 00000000000..0941cbfc330 Binary files /dev/null and b/docs/tfs-server/admin/_img/app-tier-wiz-svc-acct-name.png differ diff --git a/docs/tfs-server/admin/_img/collection-db-locs.png b/docs/tfs-server/admin/_img/collection-db-locs.png new file mode 100644 index 00000000000..74745abc847 Binary files /dev/null and b/docs/tfs-server/admin/_img/collection-db-locs.png differ diff --git a/docs/tfs-server/admin/_img/console-sched-backup.png b/docs/tfs-server/admin/_img/console-sched-backup.png new file mode 100644 index 00000000000..bc99d8825fb Binary files /dev/null and b/docs/tfs-server/admin/_img/console-sched-backup.png differ diff --git a/docs/tfs-server/admin/_img/create-team-proj.png b/docs/tfs-server/admin/_img/create-team-proj.png new file mode 100644 index 00000000000..aa30d7c9fee Binary files /dev/null and b/docs/tfs-server/admin/_img/create-team-proj.png differ diff --git a/docs/tfs-server/admin/_img/db-relationships-with-sharepoint.png b/docs/tfs-server/admin/_img/db-relationships-with-sharepoint.png new file mode 100644 index 00000000000..5ff62954ce8 Binary files /dev/null and b/docs/tfs-server/admin/_img/db-relationships-with-sharepoint.png differ diff --git a/docs/tfs-server/admin/_img/detach-collection.png b/docs/tfs-server/admin/_img/detach-collection.png new file mode 100644 index 00000000000..869602e75f8 Binary files /dev/null and b/docs/tfs-server/admin/_img/detach-collection.png differ diff --git a/docs/tfs-server/admin/_img/each-iteration-permissions.png b/docs/tfs-server/admin/_img/each-iteration-permissions.png new file mode 100644 index 00000000000..fe515c223ce Binary files /dev/null and b/docs/tfs-server/admin/_img/each-iteration-permissions.png differ diff --git a/docs/tfs-server/admin/_img/example-moderately-complex-dbs.png b/docs/tfs-server/admin/_img/example-moderately-complex-dbs.png new file mode 100644 index 00000000000..d4367e76912 Binary files /dev/null and b/docs/tfs-server/admin/_img/example-moderately-complex-dbs.png differ diff --git a/docs/tfs-server/admin/_img/explicit-overrides-implicit.png b/docs/tfs-server/admin/_img/explicit-overrides-implicit.png new file mode 100644 index 00000000000..038300baba5 Binary files /dev/null and b/docs/tfs-server/admin/_img/explicit-overrides-implicit.png differ diff --git a/docs/tfs-server/admin/_img/ic664999.png b/docs/tfs-server/admin/_img/ic664999.png new file mode 100644 index 00000000000..1b97eb48246 Binary files /dev/null and b/docs/tfs-server/admin/_img/ic664999.png differ diff --git a/docs/tfs-server/admin/_img/iteration-changes-whole-team.png b/docs/tfs-server/admin/_img/iteration-changes-whole-team.png new file mode 100644 index 00000000000..9d50e192508 Binary files /dev/null and b/docs/tfs-server/admin/_img/iteration-changes-whole-team.png differ diff --git a/docs/tfs-server/admin/_img/launch-app-tier-wizard.png b/docs/tfs-server/admin/_img/launch-app-tier-wizard.png new file mode 100644 index 00000000000..9eb7ec67f20 Binary files /dev/null and b/docs/tfs-server/admin/_img/launch-app-tier-wizard.png differ diff --git a/docs/tfs-server/admin/_img/reapply-svc-accts.png b/docs/tfs-server/admin/_img/reapply-svc-accts.png new file mode 100644 index 00000000000..512b0cf2bcb Binary files /dev/null and b/docs/tfs-server/admin/_img/reapply-svc-accts.png differ diff --git a/docs/tfs-server/admin/_img/refresh-urls.png b/docs/tfs-server/admin/_img/refresh-urls.png new file mode 100644 index 00000000000..418e567e3ec Binary files /dev/null and b/docs/tfs-server/admin/_img/refresh-urls.png differ diff --git a/docs/tfs-server/admin/_img/refresh-urls2.png b/docs/tfs-server/admin/_img/refresh-urls2.png new file mode 100644 index 00000000000..c38287d9db0 Binary files /dev/null and b/docs/tfs-server/admin/_img/refresh-urls2.png differ diff --git a/docs/tfs-server/admin/_img/refresh-urls3.png b/docs/tfs-server/admin/_img/refresh-urls3.png new file mode 100644 index 00000000000..a65c6ef4e2a Binary files /dev/null and b/docs/tfs-server/admin/_img/refresh-urls3.png differ diff --git a/docs/tfs-server/admin/_img/sched-backup-wiz-alerts.png b/docs/tfs-server/admin/_img/sched-backup-wiz-alerts.png new file mode 100644 index 00000000000..629987eeee3 Binary files /dev/null and b/docs/tfs-server/admin/_img/sched-backup-wiz-alerts.png differ diff --git a/docs/tfs-server/admin/_img/sched-backup-wiz-confirm.png b/docs/tfs-server/admin/_img/sched-backup-wiz-confirm.png new file mode 100644 index 00000000000..64228bc6235 Binary files /dev/null and b/docs/tfs-server/admin/_img/sched-backup-wiz-confirm.png differ diff --git a/docs/tfs-server/admin/_img/sched-backup-wiz-network-paths.png b/docs/tfs-server/admin/_img/sched-backup-wiz-network-paths.png new file mode 100644 index 00000000000..1b7db3f1994 Binary files /dev/null and b/docs/tfs-server/admin/_img/sched-backup-wiz-network-paths.png differ diff --git a/docs/tfs-server/admin/_img/sched-backup-wiz-preconfig.png b/docs/tfs-server/admin/_img/sched-backup-wiz-preconfig.png new file mode 100644 index 00000000000..26f3a268226 Binary files /dev/null and b/docs/tfs-server/admin/_img/sched-backup-wiz-preconfig.png differ diff --git a/docs/tfs-server/admin/_img/team-inherits-from-contribs.png b/docs/tfs-server/admin/_img/team-inherits-from-contribs.png new file mode 100644 index 00000000000..321f5da0fbe Binary files /dev/null and b/docs/tfs-server/admin/_img/team-inherits-from-contribs.png differ diff --git a/docs/tfs-server/admin/_img/team-permissions.png b/docs/tfs-server/admin/_img/team-permissions.png new file mode 100644 index 00000000000..de0c88f5218 Binary files /dev/null and b/docs/tfs-server/admin/_img/team-permissions.png differ diff --git a/docs/tfs-server/admin/_img/view-proj-collections.png b/docs/tfs-server/admin/_img/view-proj-collections.png new file mode 100644 index 00000000000..039948433d5 Binary files /dev/null and b/docs/tfs-server/admin/_img/view-proj-collections.png differ diff --git a/docs/tfs-server/admin/add-sharepoint-to-tfs.md b/docs/tfs-server/admin/add-sharepoint-to-tfs.md new file mode 100644 index 00000000000..1c4230d2cfa --- /dev/null +++ b/docs/tfs-server/admin/add-sharepoint-to-tfs.md @@ -0,0 +1,191 @@ +--- +title: Add SharePoint products to your Team Foundation Service deployment +description: Add SharePoint products to your Team Foundation Service deployment +ms.assetid: 3b5bb2e2-4142-4b9d-848e-b52ffafe9aa3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 09/09/2017 +--- + +# Add SharePoint products to your Team Foundation Service deployment + +[!INCLUDE [temp](../_shared/about-sharepoint-deprecation.md)] + +To integrate team projects with SharePoint sites, you must add one or +more SharePoint Web applications to standard and advanced installations +of Team Foundation Server (TFS). The version of SharePoint Products must +also be compatible with TFS. For more information, see [SharePoint Products requirements for Team Foundation Server](../../accounts/requirements.md#sharepoint). + +For guidance about how to install SharePoint Products for TFS, see +Manually Install SharePoint Products. For guidance about how to add an +existing deployment of SharePoint Products to TFS, see [Verify SharePoint products for Team Foundation Server](../install/sharepoint/verify-sharepoint.md) + +1. [Install and configure the Extensions for SharePoint Products](../install/install-2013/install-tfs.md) + on the server or servers hosting the SharePoint deployment you want + to integrate with TFS. + +2. On the server where you installed the extensions, open the + administration console for Team Foundation. + +3. Expand the tree, and choose **Extensions for + SharePoint Products**. + +4. In the **Extensions** pane, choose <span + **Grant access**. + + The **Access for Team Foundation Server** + window opens. + +5. In **URL for Team Foundation Server**, the + public URL for Team Foundation Server. + + You can look up this information in the + **Application Tier** node of the administration + console where you have installed the application tier for Team + Foundation Server. + +6. In **SharePoint Web Application**, choose the + URL for the SharePoint web application that you want to use from the + drop-down list. + + If you have installed the Team Foundation Server Extensions for + SharePoint Products on the server that is hosting the SharePoint Web + applications, all SharePoint web applications on that server appear + in the list. If no web applications appear, either the extensions + were not installed correctly, or no SharePoint web applications have + been configured. + +7. (optional) In **Restrict site creation to the + following path**, specify the path of the site collection where + you want to create all sites that Team Foundation Server will use. + + This step is recommended for most deployments, because it helps + ensure that the deployment can be backed up and restored correctly. + +8. In **Enterprise Application Definition**, + specify the name of the definition that you created for Team + Foundation Server. + + This step is required only if you are configuring a web application + that is hosted on SharePoint Server and you want reports and + dashboards to operate correctly. For more information, see [Configure the enterprise application definition for Team Foundation Server](../install/sharepoint/config-enterprise-app-def.md). + +9. When you have provided the required information, choose + **OK**. + + If all values are correct, access will be granted. This process + might take several moments. + +To grant access between Team Foundation Server and a SharePoint web application: + +1. On the server where you have installed the application tier for Team + Foundation Server, open the administration console for + Team Foundation. + +2. Expand the tree, and choose **SharePoint Web + Applications**. + +3. In the **SharePoint Web Applications** pane, + choose **Add**. + + The **SharePoint Web Application Settings** + window opens. + +4. On the **General** tab, in + **Friendly Name**, specify a name for this + SharePoint web application. + + This name will appear in the list of web applications. If you intend + to use more than one SharePoint web application in your deployment, + consider specifying a name that will help users distinguish this + access grant from the access grants for other SharePoint + web applications. You can also add a description in the + **Description** box to help identify this access + grant, but the description will not appear in the list. + +5. In **Web Application URL**, specify the URL + of the SharePoint web application for which you want to + grant access. + + This name should match the name of the web application in + SharePoint Products. If the SharePoint web application is configured + to use a port number that is not the standard default (80), you must + also specify the port number. + +6. In **Central Administration URL**, specify + the URL and the port number for SharePoint Central Administration. + + > [!NOTE] + > If you have administrative permissions on the server that is running + > SharePoint Products, you can view this URL and port number by opening + > SharePoint Central Administration. If not, you must obtain this + > information from an administrator for that server. + +7. In **Default location for team project collection + sites**, specify the relative path for the site collection that + you want to use as the root for team project collections that use + this SharePoint web application. + + > [!NOTE] + > By default, the location name is **/sites**, but + > you can use any named path for site collections as configured in + > SharePoint Central Administration. If you are deploying Team Foundation + > Server in an environment where another administrator manages SharePoint + > Products, consider contacting that administrator for guidance on which + > path to use. + +8. (optional) If you want to make sure that the relative path that you + provided is valid, choose **Verify Path**. + +9. Choose **OK**. + + If all the values are correct, the SharePoint Web application + appears in the list of Web applications that are available for use + with Team Foundation Server. This process might take + several moments. + + > [!NOTE] + > Team Foundation Server will not only grant access but also attempt to + > add the service accounts for the SharePoint web application to the + > appropriate group in Team Foundation. If any one of these attempts + > fails, the configuration information for the web application is saved, + > but an error message appears. You must then manually configure the + > settings that the message indicates. + +## Add the Service Account for the SharePoint web Application + +When you grant access between a SharePoint web application and Team +Foundation Server, you must add the service account for the web +application to the **SharePoint Web Application +Services** group in Team Foundation Server. + +> [!NOTE] +> You do not have to perform the procedure to grant access between a +> SharePoint web application and Team Foundation Server if your account is +> a member of the Farm Administrators group. If your account is a member +> of that group, these settings are configured for you automatically when +> you perform the procedure to grant access between Team Foundation Server +> and the SharePoint web application. + +To add a service account for a SharePoint web application to SharePoint Web Application Services: + +1. On the server where you have installed the application tier for Team + Foundation Server, open the administration console for + Team Foundation. + +2. Expand the tree, and choose **SharePoint Web + Applications**. + +3. In the **SharePoint Web Applications** pane, + in the **Service Accounts for SharePoint Web + Applications** section, choose **Add + Members**. + + The **Select Users, Computers, or Groups** + dialog box opens. + +4. In **Enter the object names to select**, + specify the account that you want to add, and then choose + **OK**. diff --git a/docs/tfs-server/admin/backup/back-up-restore-tfs.md b/docs/tfs-server/admin/backup/back-up-restore-tfs.md new file mode 100644 index 00000000000..8bc0e05efd0 --- /dev/null +++ b/docs/tfs-server/admin/backup/back-up-restore-tfs.md @@ -0,0 +1,57 @@ +--- +title: Back up and restore TFS +description: Back up and restore TFS +ms.assetid: cf9b5ab7-f4da-4519-991c-cc1722cb5d3c +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Back up and restore TFS + +**TFS 2015** | **TFS 2013** + +If you don't regularly back up Team Foundation Server (TFS) databases, you increase the risk of losing productivity or data because of equipment failure or other unexpected events. Fortunately, the Scheduled Backups Wizard makes it easy to back up your TFS databases, which are part of the TFS data-tier and stored in SQL Server. All of the information required for restoring a TFS deployment is stored in those databases. Consequently, you do not have to worry about backing up Team Foundation client computers or application-tier servers. + +![Choose a preconfigured or custom schedule](../_img/ic665036.png) + +For an overview of TFS databases, see [Understand backing up Team Foundation Server](backup-db-architecture.md). The following topics provide detail procedures for backing up and restoring TFS databases. + +| | broad steps | +| --- | --- | +| ![Back up and restore your TFS deployment](../_img/ic677919.png) | **Back up your data** </br>[Create a backup schedule and plan](config-backup-sched-plan.md) </br> [Manually back up Team Foundation Server](manually-backup-tfs.md) | +| ![Learn how to restore TFS](../_img/ic689362.png) | **Restore databases from backup** </br> [Restore a deployment to new hardware](tut-single-svr-home.md) </br> | [Restore data to the same location](restore-data-same-location.md) | +| ![Manage user access to your deployment](../_img/ic687421.png) | **Recover from a hardware failure on the application tier** </br> [Restore an application-tier server](restore-application-tier-server.md) </br> [Refresh the data caches on client computers](refresh-data-caches.md) | +| ![Configure and manage Lab Management](../_img/ic677921.png) | **Back up and restore Lab Management** </br> [Restore Lab Management components](restore-lab-management-components.md) | + +## Q & A + +**Q: Where can I learn more about backups in TFS?** + +**A:** You can learn more about the kinds of backups available in [Understand TFS databases, deployment topologies, and backup](backup-db-architecture.md). + +**Q: Are there situations where I wouldn't want to use the Scheduled Backups tool?** + +**A:** The Scheduled Backups tool is designed to meet the needs of most deployments. You might need to configure backups manually if your deployment has security restrictions that prevent the use of the tool or has other requirements for backing up databases (for example, for auditing purposes). You can learn how to back up TFS manually [here](manually-backup-tfs.md). + +**Q: I deployed TFS across multiple servers. How do I restore it?** + +**A:** The steps for restoring TFS in a multiple-server deployment are essentially the same as described in the tutorial for [restoring data to a single server](tut-single-svr-home.md). The process is also the same as the process described in a [restoration-based move](../move-clone-hardware.md). + +**Q: Can I move TFS?** + +**A:** Yes, you can [move TFS to new hardware](../move-clone-hardware.md). You can also [change its environment](../move-across-domains.md), such as its domain. + +**Q: Data-tier? Application-tier? What are those? Where can I learn more about TFS architecture?** + +**A:** Learn more about how TFS works in [Team Foundation Server architecture](../../architecture/architecture.md). + +**Q: Can't I just tweak the databases manually?** + +**A:** No. Unless you are following the procedure for [manually backing up the databases](manually-backup-tfs.md), modifying any TFS database can invalidate your support agreement. It can cause data loss, make it impossible to upgrade or patch TFS, or cause other severe problems. + +**Q: Can't I just tweak the databases manually?** + +**A:** No. Unless you are following the procedure for [manually backing up the databases](manually-backup-tfs.md), modifying any TFS database can invalidate your support agreement. It can cause data loss, make it impossible to upgrade or patch TFS, or cause other severe problems. diff --git a/docs/tfs-server/admin/backup/backup-db-architecture.md b/docs/tfs-server/admin/backup/backup-db-architecture.md new file mode 100644 index 00000000000..dd0a26a110d --- /dev/null +++ b/docs/tfs-server/admin/backup/backup-db-architecture.md @@ -0,0 +1,161 @@ +--- +title: Understand TFS databases, deployment topologies, and backup +description: Understand TFS databases, deployment topologies, and backup +ms.assetid: dcd8abb5-5593-4b2d-a532-bb183c84d83f +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Understand TFS databases, deployment topologies, and backup + +**TFS 2015** | **TFS 2013** + +You can help protect your deployment from data loss by creating a regular schedule of backups for the databases that Visual Studio Team Foundation Server (TFS) depends on. To restore your deployment of Team Foundation in its entirety, you must first back up all databases for TFS. If your deployment includes SharePoint Products or SQL Server Reporting Services, you must also back up the databases that TFS uses within those components. To prevent synchronization errors or data mismatch errors, you must synchronize all backups to the same time stamp. The easiest way to ensure successful synchronization is by using marked transactions. By routinely marking related transactions in every Team Foundation database, you establish a series of common recovery points in the databases. For step-by-step guidance for backing up a single-server deployment that uses SharePoint Foundation and also uses reporting, see [Create a backup schedule and plan](config-backup-sched-plan.md). + +## Backing up databases + +You can create backups of the databases that TFS uses as a key aspect of protecting your deployment of Team Foundation against loss. The following table and accompanying illustrations show which databases you must back up and provide examples of how those databases might be physically distributed in a deployment. + +|Database Type|Product|Optional component?| +|---|---|---| +|Configuration database|Team Foundation Server|No| +|Warehouse database|Team Foundation Server|No| +|Team project collection databases|Team Foundation Server|No| +|SharePoint Products databases|SharePoint Products|Yes| +|Reporting databases|SQL Server Reporting Services|Yes| +|Analysis databases|SQL Server Analysis Services|Yes| + +### Deployment topologies + +Based on your deployment configuration, all the databases that require backing up might be on the same physical server, as in this example topology. This example does not include SharePoint Products or Reporting Services, so you do not have to back up any databases that are associated with reporting, analysis, or SharePoint Products. + +![](../_img/ic314731.png) + +As an alternative, the databases might be distributed across many servers and server farms. In this example topology, you must back up the following databases, which are scaled across six servers or server farms: + +- the configuration database + +- the warehouse database + +- the team project collection databases that are located on the SQL Server cluster + +- the collection database that is located on the stand-alone server that is running SQL Server + +- the SharePoint Products administrative databases and the site collection databases for both SharePoint Web applications1 + +- the databases that are located on the server that is running Reporting Services + +- the database that is located on the server that is running Analysis Services + +1 If your SharePoint databases are scaled across multiple servers, you cannot use the Scheduled Backups feature to back them up. You will have to manually configure backups for those databases, and ensure that those backups are synchronized with the backups for TFS databases. See [Manually back up Team Foundation Server](manually-backup-tfs.md) for more details. + +![](../_img/ic372332.png) + +In both of these examples, you do not have to back up any of the clients that connect to the server. However, you might need to manually clear the caches for Team Foundation Server on the client computers before they can reconnect to the restored deployment. + +### Databases to back up + +The following list provides additional detail about what you must back up, depending on your deployment resources. + +>**Caution:** +>All the databases in the following list are SQL Server databases. Although you can use SQL Server Management Studio to back up individual databases at any time, you should avoid using such individual backups when possible. You might experience unexpected results if you restore from individual backups because the databases that TFS uses are all related. If you back up only one database, the data in that database will be out of synchronization with the data in the other databases. + +- **Databases for Team Foundation Server**   The logical data tier for Team Foundation Server includes several SQL Server databases, including the configuration database, the warehouse database, and a database for each team project collection in the deployment. These databases might all be on the same server, distributed across several instances in the same SQL Server deployment, or distributed across multiple servers. Regardless of their physical distribution, you must back up all of the databases to the same time stamp to help ensure against data loss. You can perform database backups manually or automatically by using maintenance plans that run at specific times or intervals. + + >**Caution:** + >The list of databases for Team Foundation Server is not static. A new database is created every time you create a collection. When you create a collection, make sure that you add the database for that collection to your maintenance plan. + +- **Databases for SharePoint Products** If your deployment uses SharePoint Products to host team project portals, you must back up several databases. These databases include the administration database for each SharePoint Web application that your deployment uses and the site collection databases that host team project portals. Ideally, your deployment has been configured to use a separate site collection for each team project collection in your deployment. Just as team project collections can be backed up and restored as a unit in Team Foundation Server, site collections can be backed up and restored in SharePoint Products. If one or more collections in your deployment are using sites or sub-sites instead of site collections as their root site, you might not be able to fully back up and restore the collections. For more information, see [Organize your server with team project collections](../manage-team-project-collections.md). + + >**Note:** + >You might assume that you must back up both databases and Web sites for the team project portal pages. However, SharePoint Products dynamically generates the web sites from the databases. So when you back up the databases, you also back up the sections of the team project that appear as web sites. If you have created custom site collections, site templates, or web parts in SharePoint Products but outside Team Foundation, you must back them up separately. For more information, see the following page on the Microsoft web site: [Backup (SharePoint Foundation Foundation)](http://go.microsoft.com/fwlink/?LinkId=237641). + +- **Databases for Reporting Services and Analysis Services** If your deployment uses SQL Server Reporting Services or SQL Server Analysis Services to generate reports for Team Foundation Server, you must back up the reporting and analysis databases. However, you must still regenerate certain databases after restoration, such as the warehouse. + +- **Encryption key for the report server**   The report server has an encryption key that you must back up. This key safeguards sensitive information that is stored in the database for the report server. You can manually back up this key by using either the Reporting Services Configuration tool or a command-line tool. + +## Advanced preparation for backups + +When you deploy Team Foundation, you should keep a record of the accounts that you create and any computer names, passwords, and setup options that you specify. You should also keep a copy of all recovery materials, documents, and database and transaction log backups at a secure location. To safeguard against a disaster, such as a fire or an earthquake, you should keep duplicates of your server backups in a different location from the location of the servers. This strategy will help protect you against the loss of critical data. As a best practice, you should keep three copies of the backup media, and you should keep at least one copy offsite in a controlled environment. + +>**Important:** +>Perform a trial data restoration periodically to verify that your files are correctly backed up. A trial restoration can reveal hardware problems that do not appear with software verifications. + +When you back up and restore a database, you must back up the data onto media with a network address (for example, tapes and disks that have been shared as network drives). Your backup plan should include provisions for managing media, such as the following tactics: + +- A tracking and management plan for storing and recycling backup sets. + +- A schedule for overwriting backup media. + +- In a multi-server environment, a decision to use either centralized or distributed backups. + +- A way of tracking the useful life of media. + +- A procedure to minimize the effects of the loss of a backup set or backup media (for example, a tape). + +- A decision to store backup sets onsite or offsite and an analysis of how this decision might affect recovery time. + +Because data for Team Foundation is stored in SQL Server databases, you do not have to back up the computers on which clients of Team Foundation are installed. If a media failure or disaster that involved those computers were to occur, you can reinstall the client software and reconnect to the server. By reinstalling the client software, your users will have a cleaner and more reliable alternative to restoring a client computer from a backup. + +You can back up a server by using the Scheduled Backups features available in Update 2, or by manually creating maintenance plans in SQL Server to back up the databases that relate to your deployment of Team Foundation. The databases for Team Foundation Server work in relationship with one other, and if you create a manual plan, you should back them up and restore them at the same time. For more information about strategies for backing up databases, see the following page on the Microsoft Web site: [Introduction to Backup and Restore Strategies in SQL Server](http://go.microsoft.com/fwlink/?LinkId=115461). + +### Types of backups + +Understanding the types of backups available can help you determine the best options for backing up your deployment. For example, if you are working with a large deployment and want to protect against data loss while efficiently using limited storage resources, you can configure differential backups as well as full data backups. If you are using SQL Server ALwaysOn, you can take backups of your secondary database. You can also try using backup compression or splitting backups across multiple files. Here are brief descriptions of your backup options: + +**Full data backups (databases)**   A full database backup is necessary for the recoverability of your deployment. A full backup includes part of the transaction log so that you can recover the full backup. Full backups are self-contained in that they represent the entire database as it existed when you backed it up. For more information, see the following page on the Microsoft Web site: [Full Database Backups](http://go.microsoft.com/fwlink/?LinkId=115462). + +**Differential data backups (databases)   **A differential database backup records only the data that has changed since the last full database backup, which is called the differential base. Differential database backups are smaller and faster than full database backups. This option saves backup time at the cost of increased complexity. For large databases, differential backups can occur at shorter intervals than database backups, which reduces the work-loss exposure. For more information, see the following page on the Microsoft Web site: [Differential Database Backups](http://go.microsoft.com/fwlink/?LinkId=158819). + +You should also back up your transaction logs regularly. These backups are necessary for recovering data when you use the full database backup model. If you back up transaction logs, you can recover the database to the point of failure or to another specific point in time. + +**Transaction log backups**   The transaction log is a serial record of all modifications that have occurred in a database in addition to the transaction that performed each modification. The transaction log records the start of each transaction, the changes to the data, and, if necessary, enough information to undo the modifications made during that transaction. The log grows continuously as logged operations occur in the database. + +By backing up transaction logs, you can recover the database to an earlier point in time. For example, you can restore the database to a point before unwanted data was entered or to a point of failure. Besides database backups, transaction log backups must be part of your recovery strategy. For more information, see the following page on the Microsoft Web site: [Working with Transaction Log Backups](http://go.microsoft.com/fwlink/?LinkId=115463). + +Transaction log backups generally use fewer resources than full backups. Therefore, you can create transaction log backups more frequently than full backups, which reduces your risk of losing data. However, sometimes a transaction log backup is larger than a full backup. For example, a database might have a high transaction rate, which causes the transaction log to grow quickly. In this situation, you should create transaction log backups more frequently. For more information, see the following page on the Microsoft Web site: [Troubleshooting a Full Transaction Log](http://go.microsoft.com/fwlink/?LinkId=115464). + +You can perform the following types of transaction log backups: + +- A pure log backup contains only transaction log records for an interval, without any bulk changes. + +- A bulk log backup contains log and data pages that were changed by bulk operations. Point-in-time recovery is not allowed. + +- A tail-log backup is taken from a possibly damaged database to capture the log records that have not yet been backed up. A tail-log backup is taken after a failure to prevent work loss and can contain either pure log or bulk log data. + +Because synchronization of data is critical for successful restoration of Team Foundation Server, you should use marked transactions as part of your backup strategy if you are configuring backups manually. For more information, see [Create a backup schedule and plan](config-backup-sched-plan.md) and [Manually back up Team Foundation Server](manually-backup-tfs.md). + +## Backups for services (application tier) + +The only backup that you must perform for the logical application tier is for the encryption key for Reporting Services. If you use the Scheduled Backups feature to back up your deployment, this key will be backed up for you as part of the plan. You might assume that you must back up Web sites that are used as team project portals. If you integrated SharePoint Products as part of your deployment of Team Foundation Server, the portals will be backed up as part of backing up the databases for Team Foundation Server and SharePoint Products. However, if you specified a web site that was not created by using an integrated web application, you must back up and restore those sites manually. In addition, if you have any customizations to SharePoint Products or to services, you must also back those up or otherwise record them so that they can be reproduced on a new server. + +Although you can back up an application tier more easily than a data tier, you must perform many steps when you restore an application tier. You must install another application tier for Team Foundation, redirect team project collections to use the new application tier, and redirect the portal sites for team projects. + +## Default database names + +If you do not customize the names of your databases, you can use the following table to identify the databases used in your deployment of Team Foundation Server. As mentioned previously, not all deployments have all these databases. For example, if you did not configure Team Foundation Server with Reporting Services, you will not have the ReportServer or ReportServerTempDB databases. Similarly, you will not have the database for System Center Virtual Machine Manager (SCVMM), which is named VirtualManagerDB, if you did not configure Team Foundation Server to support Lab Management. In addition, the databases that Team Foundation Server uses might be distributed across more than one instance of SQL Server or across more than one server. + +>**Note:** +>By default, the prefix **TFS_** is added to the names of any databases that are created automatically when you install Team Foundation Server or while it is operating. + +| Database | Description | +| --- | --- | +| TFS_Configuration | The configuration database for Team Foundation Server contains the catalog, server names, and configuration data for the deployment. The name of this database might include additional characters between **TFS_** and **Configuration**, such as the user name of the person who installed Team Foundation Server. For example, the name of the database might be TFS_UserNameConfiguration | +| TFS_Warehouse |The warehouse database contains the data for building the warehouse that Reporting Services uses. The name of this database might include additional characters between **TFS_** and **Warehouse**, such as the user name of the person who installed Team Foundation Server. For example, the name of the database might be TFS_UserNameWarehouse. | +| TFS_CollectionName | The database for a team project collection contains all data for the team projects in that collection. This data includes source code, build configurations, and lab management configurations. The number of collection databases will equal the number of collections. For example, if you have three collections in your deployment, you must back up three collection databases. The name of each database might include additional characters between **TFS_** and CollectionName, such as the user name of the person who created the collection. For example, the name of a collection database might be TFS_UserNameCollectionName. | +| TFS_Analysis | The database for SQL Server Analysis Services contains the data sources and cubes for your deployment of Team Foundation Server. The name of this database might include additional characters between **TFS_** and **Analysis**, such as the user name of the person who installed Analysis Services. For example, the name of the database might be TFS_UserNameAnalysis. </br> **Note**: You can back up this database, but you must rebuild the warehouse from the restored TFS_Warehouse database. | +| ReportServer | The database for Reporting Services contains the reports and report settings for your deployment of Team Foundation Server. </br> **Note**: If Reporting Services is installed on a separate server from Team Foundation Server, this database might not be present on the data-tier server for Team Foundation. In that case, you must configure, back up, and restore it separately from Team Foundation Server. However, you should synchronize the maintenance of the databases to avoid synchronization errors. | +| ReportServerTempDB | The temporary database for Reporting Services temporarily stores information when you run specific reports. </br> **Note**: If Reporting Services is installed on a separate server from Team Foundation Server, this database might not be present on the data-tier server for Team Foundation. In that case, you must configure, back up, and restore it separately from Team Foundation Server. However, you should synchronize the maintenance of the databases to avoid synchronization errors. | +| WSS_Config | The configuration database for SharePoint Products contains a list of all sites, such as content databases, site templates, custom web parts, and other settings from SharePoint Central Administration. </br> **Note**: You should not use marked transactions if you manually back up or restore the databases that SharePoint Products uses. However, to help avoid synchronization errors, you should attempt to synchronize your backup and restoration schedules for SharePoint Products and Team Foundation Server. For more information, see [Create a backup plan for SharePoint Foundation](config-backup-sched-plan.md). | +| WSS_Content | The content database for SharePoint Products contains the actual content in team project portals. </br> **Note**: The name of this database will vary based on the version of SharePoint Products that is installed and whether the person who installed it customized the name. You should not use marked transactions if you manually back up or restore the databases that SharePoint Products uses. However, to help avoid synchronization errors, you should attempt to synchronize your backup and restoration schedules for SharePoint Products and Team Foundation Server. For more information, see [Create a backup plan for SharePoint Foundation ](config-backup-sched-plan.md). | +| WSS_AdminContent | The administration database for SharePoint Products contains the security information for users, roles, and databases. </br> **Note**: You should not use marked transactions if you manually back up or restore the databases that SharePoint Products uses. However, to help avoid synchronization errors, you should attempt to synchronize your backup and restoration schedules for SharePoint Products and Team Foundation Server. For more information, see [Create a backup plan for SharePoint Foundation ](config-backup-sched-plan.md). | +| VirtualManagerDB | The administration database for SCVMM contains the information that you view in the SCVMM Administrator Console, such as virtual machines, virtual machine hosts, virtual machine library servers, and their properties. </br> **Note**: If SCVMM is installed on a separate server from Team Foundation Server, this database might not be present on the data-tier server for Team Foundation. In that case, you must configure, back up, and restore it separately from Team Foundation Server. However, you should use marked transactions and synchronize the maintenance of the databases to avoid synchronization errors. | + +## See Also + + [Back up and restore TFS](back-up-restore-tfs.md) + + [Restore a deployment to new hardware](tut-single-svr-home.md) diff --git a/docs/tfs-server/admin/backup/config-backup-sched-plan.md b/docs/tfs-server/admin/backup/config-backup-sched-plan.md new file mode 100644 index 00000000000..4dca324672d --- /dev/null +++ b/docs/tfs-server/admin/backup/config-backup-sched-plan.md @@ -0,0 +1,110 @@ +--- +title: Configure a backup schedule and plan for Team Foundation Server +description: Configure a backup schedule and plan for Team Foundation Server +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: a92e7f03-61d0-458d-9155-eefa40e228cc +toc: show +ms.manager: douge +ms.author: douge +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Configure a backup schedule and plan for Team Foundation Server + +**TFS 2017** | **TFS 2015** + +If you administer systems, you're probably already familiar with all the +reasons why a good backup set is crucial. No one wants to be the +administrator of a server that goes down without a complete set of +backups in place. Fortunately, you can back up data for TFS by using the +Scheduled Backups tool in the administration console. If you regularly +back up those databases, you reduce the risk of losing productivity or +data because of equipment failure or other unexpected events. Unlike +previous methods, this tool also backs up the SharePoint databases that +TFS uses, if TFS is configured to use SharePoint. + +> [!Important] +> If you are using the Enterprise or Datacenter edition of SQL Server and +> you want to restore the collection and configuration databases to a +> Standard edition of SQL Server, then before you make the backup, you +> must turn off SQL Server compression by following the steps in the +> [Microsoft Knowledge Base article](http://go.microsoft.com/fwlink/?LinkId=253758). + + +## Create a backup + +1. If you're not an administrator for TFS, a member of the SQL Server + System Administrators group, and (if your deployment uses + SharePoint Products) a member of the Farm Administrators group, [get + those permissions + now](../../add-administrator-tfs.md). + + In addition, the service account for TFS (TFSService) must have SQL + Server Perform Back Up and Create Maintenance Plan permissions set + to Allow on each instance of SQL Server that hosts the databases + that you want to back up, and Full Control on the network share, + folder, or storage device where the backups will be kept. + +2. Open the administration console for TFS and on the **Scheduled Backups** page, launch the wizard for + creating a backup schedule. + + ![The Schedule Backups node in the console](../_img/console-sched-backup.png) + +3. Backups must be stored on a network-accessible location, and both + the account that configures the scheduled backup and the service + account for TFS must have Full Control for that location. You can + also choose how long a backup set will be kept and the file + extensions used for backup types. + + ![Specify the network path for the backups](../_img/sched-backup-wiz-network-paths.png) + +4. If your server is configured with SMTP support, you can select email + alerts for specific events. If not, all selections will be dimmed. + + ![Alerts are only available if SMTP is configured](../_img/sched-backup-wiz-alerts.png) + +5. Choose between two default schedules, or create your own + custom schedule. + + ![Choose a preconfigured or custom schedule](../_img/sched-backup-wiz-preconfig.png) + +6. Complete the wizard. If your deployment uses reporting, you will be + prompted for a password in order to back up the encryption key + for reporting. + + ![The wizard confirms success](../_img/sched-backup-wiz-confirm.png) + +7. Once you've configured the scheduled backups, you can allow them + to run as scheduled. You can also choose to take an immediate + backup, which will back up your data right away while leaving your + plan in place. This is particularly recommended if your scheduled + backups will not occur for a significant amount of time, or if you + do not already have a recent backup available. + +> [!Note] +> If another administrator chooses to take an immediate backup, that +> administrator must also have Full Control on the location where the +> backups are saved. + +**Q: Where can I learn more about backups in TFS?** + +**A:** You can learn more about the kinds of +backups available in [Understand backing up Team Foundation Server](backup-db-architecture.md) + +**Q: I don't want to use the Scheduled Backups tool. Are there other methods for backing up the system?** + +**A:** Yes. You can [manually create backup plans](manually-backup-tfs.md). + +**Q: How do I restore TFS from backups?** + +**A:** You use the Restore tool, but the steps +vary depending on whether you need to [restore data to a new server](tut-single-svr-home.md), or whether +you want to [restore data to the same server](restore-data-same-location.md). + +**Q: Can I move TFS?** + +**A:** Yes, you can [move TFS to new hardware](../move-clone-hardware.md). You can +also [change its environment](../move-across-domains.md), such as +its domain. diff --git a/docs/tfs-server/admin/backup/manually-backup-tfs.md b/docs/tfs-server/admin/backup/manually-backup-tfs.md new file mode 100644 index 00000000000..10270d8f8f0 --- /dev/null +++ b/docs/tfs-server/admin/backup/manually-backup-tfs.md @@ -0,0 +1,622 @@ +--- +title: Manually back up Team Foundation Server +description: Manually back up Team Foundation Server +ms.assetid: a4d79122-7170-49ff-ad1b-d3e4f983bfd5 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Manually back up Team Foundation Server + +**TFS 2015** | **TFS 2013** + +You can manually back up data for Visual Studio Team Foundation Server by using the tools that SQL Server provides. However, you might need to configure backups manually if your deployment has security restrictions that prevent use of that tool. To manually back up Team Foundation Server, you must not only back up all databases that the deployment uses, you must also synchronize the backups to the same point in time. You can manage this synchronization most effectively if you use marked transactions. If you routinely mark related transactions in every database that Team Foundation uses, you establish a series of common recovery points in those databases. If you regularly back up those databases, you reduce the risk of losing productivity or data because of equipment failure or other unexpected events. + +>**Caution:** +>You should not manually modify any of the TFS databases unless you’re instructed to do so by Microsoft Support or you’re following the procedures described in this document. Any other modifications can invalidate your service agreement. + +The procedures in this topic explain how to create maintenance plans that perform either a full or an incremental backup of the databases and how to create tables and stored procedures for marked transactions. For maximum data protection, you should schedule full backups to run daily or weekly and incremental backups to run hourly. You can also back up of the transaction logs. For more information, see the following page on the Microsoft website: [Creating Transaction Log Backups](http://go.microsoft.com/fwlink/?LinkId=115465). + +>**Note:** +>Many procedures in this topic specify the use of SQL Server Management Studio. If you installed SQL Server Express Edition, you cannot use that tool unless you download SQL Server Management Studio Express. To download this tool, see the following page on the Microsoft website: [Microsoft SQL Server 2008 Management Studio Express](http://go.microsoft.com/?linkid=9647069). + + +**In this topic:** + +- Required Permissions + +- [Backup Reporting Services Encryption Key](#reporting-encyption-key) + +- [Identify Databases](#identify-dbs) + +- [Create Tables in Databases](#create-tables) + +- [Create a Stored Procedure for Marking Tables](#create-stored-proc-for-marking) + +- [Create a Stored Procedure for Marking All Tables At Once](#create-stored-proc-mark-all-tables) + +- [Create a Stored Procedure to Automatically Mark Tables](#create-stored-proc-auto-mark) + +- [Create a Scheduled Job to Run the Table-Marking Procedure](#create-sched-job-to-run-proc) + +- [Create a Maintenance Plan For Full Backups](#create-maintenance-plan-full-backups) + +- [Create a Maintenance Plan For Differential Backups](#create-maintenance-plan-diff-backups) + +- [Create a Maintenance Plan For Transaction Backups](#create-maintenance-plan-transaction-log-backup) + +- [Back Up the Reporting Services Encryption Key](#backup-encryption-key-for-reporting) + +- [Create a Back Up Plan for SharePoint Foundation](#create-backup-plan-sharepoint) + +- [Back Up Additional Lab Management Components](#backup-additional-lab-mgt) + +**Required permissions** + +To perform this procedure, you must be a member of all the following groups: + +- The **Administrators** security group on the server that is running the administration console for Team Foundation. + +- The **SQL Server System Administrator** security group. Alternatively, your **SQL Server Perform Back Up and Create Maintenance Plan** permissions must be set to **Allow** on each instance of SQL Server that hosts the databases that you want to back up.  + +- The **Farm Administrators** group in SharePoint Foundation, or an account with the permissions required to back up the farm. + + +<a name="reporting-encyption-key"></a> +## Backup reporting services encryption key + +If your deployment uses SQL Server Reporting Services, you must back up not only the databases but also the encryption key. + +For a single-server deployment of Team Foundation Server, +you can back up the encryption key for SQL Server Reporting Services +in either of two ways. You can use either the Reporting Services +Configuration tool, or you can use the **RSKEYMGMT** command-line +tool, which SQL Server provides. For a multiple-server or clustered +deployment, you must use **RSKEYMGMT**. For more information about +**RSKEYMGMT**, see the following page on the Microsoft Web site: +[RSKEYMGMT Utility](http://go.microsoft.com/fwlink/?LinkId=160686). + +For more information about how to back up the encryption key, see the +following page on the Microsoft Web site: [Administration (Reporting +Services)](http://go.microsoft.com/fwlink/?LinkId=115438). For more +information about how to restore the encryption key, see the following +page on the Microsoft Web site: [Restore Encryption Key (Reporting +Services Configuration)](http://go.microsoft.com/fwlink/?LinkId=158327). + +Required Permissions: To perform this procedure, you must be a member of the **Local Administrator** group, which has the role of a +**Content Manager** in Reporting Services, or +your **Manage report server security** permission +must be set to **Allow**. + +Back up the encryption key by using the Reporting Services Configuration tool: + +1. On the server that is running Reporting Services, click **Start**, point to **All + Programs**, point to **Microsoft SQL + Server**, point to **Configuration + Tools**, and then click **Reporting Services + Configuration Manager**. + + The **Report Server Installation Instance + Selection** dialog box opens. + +2. Type the name of the data-tier server and the database instance, and + then click **Connect**. + +3. In the navigation bar on the left side, click **Encryption Keys**, and then click **Backup**. + + The **Encryption Key Information** dialog + box opens. + +4. In **File Location**, specify the location + where you want to store a copy of this key. + + You should consider storing this key on a separate computer from the + one that is running Reporting Services. + +5. In **Password**, type a password for + the file. + +6. In **Confirm Password**, retype the password + for the file. + +7. Click **OK**. + + + +<a name="identify-dbs"></a> +## Identify databases + +Before you begin, you should take the time to identify all the databases you will need to back up if you would ever have to fully restore your deployment. This includes databases for SharePoint Foundation and SQL Server Reporting Services. These might be on the same server, or you might have databases distributed across multiple servers. For a complete table and description of TFS databases, including the default names for the databases, see [Understand TFS databases, deployment topologies, and backup](backup-db-architecture.md). + +### To identify databases + +1. Open **SQL Server Management Studio**, and connect to the database engine. + +2. In **SQL Server Management Studio**, in Object Explorer, expand the name of the server and then expand **Databases**. + +3. Review the list of databases and identify those used by your deployment. + + For example, Fabrikam, Inc.'s TFS deployment is a single-server configuration, and it uses the following databases: + + - the configuration database (Tfs\_Configuration) + + - the collection database (Tfs\_DefaultCollection) + + - the database for the data warehouse (Tfs\_Warehouse) + + - the reporting databases (ReportServer and ReportServerTempDB) + + - the databases used by SharePoint Foundation (WSS\_AdminContent, WSS\_Config, WSS\_Content, and WSS\_Logging) + + >**Important:** + >Unlike the other databases in the deployment, the databases used by SharePoint Foundation should not be manually backed up using the tools in SQL Server. Follow the separate procedure "[Create a Back Up Plan for SharePoint Foundation](#create-backup-plan-sharepoint)" later in this topic for backing up these databases. + +<a name="create-tables"></a> +## Create tables in databases + +To make sure that all databases are restored to the same point, you can create a table in each database to mark transactions. You can use the Query function in SQL Server Management Studio to create an appropriate table in each database. + +>**Important:** +>Do not create tables in any databases that SharePoint Products uses. + +### To create tables to mark related transactions in databases that Team Foundation uses + +1. Open **SQL Server Management Studio**, and connect to the database engine. + +2. In **SQL Server Management Studio**, highlight the name of the server, open the submenu, and then choose **New Query**. + + The Database Engine Query Editor window opens. + +3. On the **Query** menu, choose **SQLCMD Mode**. + + The Query Editor executes sqlcmd statements in the context of the Query Editor. If the Query menu does not appear, select anywhere in the new query in the **Database Engine Query Editor** window. + +4. On the **SQL Editor** toolbar, open the **Available Databases** list, and then choose **TFS\_Configuration**. + + >**Note:** + >TFS_Configuration is the default name of the configuration database. This name is customizable and might vary. + +5. In the query window, enter the following script to create a table in the configuration database: + + Use Tfs_Configuration + Create Table Tbl_TransactionLogMark + ( + logmark int + ) + GO + Insert into Tbl_TransactionLogMark (logmark) Values (1) + GO + +6. Choose the **F5** key to run the script. + + If the script is well-formed, the message "(1 row(s) affected.)" appears in the Query Editor. + +7. (Optional) Save the script. + +8. Repeat steps 4−7 for every database in your deployment of TFS, except for those used by SharePoint Products. In the fictitious Fabrikam, Inc. deployment, you would repeat this process for all of the following databases: + + - Tfs\_Warehouse + + - Tfs\_DefaultCollection + + - ReportServer + + - ReportServerTempDB + +<a name="create-stored-proc-for-marking"></a> +## Create a stored procedure for marking tables + +After the tables have been created in each database that you want to back up, you must create a procedure for marking the tables. + +### To create a stored procedure to mark transactions in each database that Team Foundation Server uses + +1. In **SQL Server Management Studio**, open a query window, and make sure that **SQLCMD Mode** is turned on. + +2. On the **SQL Editor** toolbar, open the **Available Databases** list, and then choose **TFS\_Configuration**. + +3. In the query window, enter the following script to create a stored procedure to mark transactions in the configuration database: + + Create PROCEDURE sp_SetTransactionLogMark + @name nvarchar (128) + AS + BEGIN TRANSACTION @name WITH MARK + UPDATE Tfs_Configuration.dbo.Tbl_TransactionLogMark SET logmark = 1 + COMMIT TRANSACTION + GO + +4. Choose the **F5** key to run the procedure. + + If the procedure is well-formed, the message "Command(s) completed successfully." appears in the Query Editor. + +5. (Optional) Save the procedure. + +6. Repeat steps 2−5 for every TFS database.  In the Fabrikam, Inc. deployment, you would repeat this process for all of the following databases: + + - Tfs\_Warehouse + + - Tfs\_DefaultCollection + + - ReportServer + + - ReportServerTempDB + + >**Tip:** + >Make sure that you select the name of the database you want to create the stored procedure for from the **Available Database** list in Object Explorer before you create the procedure. Otherwise when you run the script the command will display an error that the stored procedure was already exists. + +<a name="create-stored-proc-mark-all-tables"></a> +## Create a stored procedure for marking all tables at once + +To make sure that all databases are marked, you can create a procedure that will run all the procedures that you just created for marking the tables. Unlike the previous procedures, this procedure runs only in the configuration database. + +### To create a stored procedure that will run all stored procedures for marking tables + +1. In **SQL Server Management Studio**, open a query window, and make sure that **SQLCMD Mode** is turned on. + +2. On the **SQL Editor** toolbar, open the **Available Databases** list, and then choose **TFS\_Configuration**. + +3. In the query window, create a stored procedure that executes the stored procedures that you created in each database that TFS uses. Replace *ServerName* with the name of the server that is running SQL Server, and replace *Tfs\_CollectionName* with the name of the database for each team project collection. + + In the example deployment, the name of the server is FABRIKAMPRIME, and there is only one team project collection in the deployment, the default one created when she installed Team Foundation Server (DefaultCollection). With that in mind, you would create the following script: + + CREATE PROCEDURE sp_SetTransactionLogMarkAll + @name nvarchar (128) + AS + BEGIN TRANSACTION + EXEC [FABRIKAMPRIME].Tfs_Configuration.dbo.sp_SetTransactionLogMark @name + EXEC [FABRIKAMPRIME].ReportServer.dbo.sp_SetTransactionLogMark @name + EXEC [FABRIKAMPRIME].ReportServerTempDB.dbo.sp_SetTransactionLogMark @name + EXEC [FABRIKAMPRIME].Tfs_DefaultCollection.dbo.sp_SetTransactionLogMark @name + EXEC [FABRIKAMPRIME].Tfs_Warehouse.dbo.sp_SetTransactionLogMark @name + COMMIT TRANSACTION + GO + +4. Choose the **F5** key to run the procedure. + + >**Note:** + >If you have not restarted SQL Server Management Studio since you created the stored procedures for marking transactions, one or more red wavy lines might underscore the name of the server and the names of the databases. However, the procedure should still run. + + If the procedure is well-formed, the message "Command(s) completed successfully." appears in the Query Editor. + +5. (Optional) Save the procedure. + +<a name="create-stored-proc-auto-mark"></a> +## Create a stored procedure to automatically mark tables + +When you have a procedure that will run all stored procedures for table marking, you must create a procedure that will mark all tables with the same transaction marker. You will use this marker to restore all databases to the same point. + +### To create a stored procedure to mark the tables in each database that Team Foundation Server uses + +1. In **SQL Server Management Studio**, open a query window, and make sure that **SQLCMD Mode** is turned on. + +2. On the **SQL Editor** toolbar, open the **Available Databases** list, and then choose **TFS\_Configuration**. + +3. In the query window, enter the following script to mark the tables with 'TFSMark': + + EXEC sp_SetTransactionLogMarkAll 'TFSMark' + GO + + >**Note:** + >TFSMark is an example of a mark. You can use any sequence of supported letters and numbers in your mark. If you have more than one marked table in the databases, record which mark you will use to restore the databases. For more information, see the following page on the Microsoft website: [Using Marked Transactions](http://go.microsoft.com/fwlink/?LinkId=186142). + +4. Choose the **F5** key to run the procedure. + + If the procedure is well-formed, the message "(1 row(s) affected)" appears in the Query Editor. The WITH MARK option applies only to the first "BEGIN TRAN WITH MARK" statement for each table that has been marked. + +5. Save the procedure. + +<a name="create-sched-job-to-run-proc"></a> +## Create a scheduled job to run the table-marking procedure + +Now that you have created and stored all the procedures that you need, you must schedule the table-marking procedure to run just before the scheduled backups of the databases. You should schedule this job to run approximately one minute before the maintenance plan for the databases runs. + +### To create a scheduled job for table marking in SQL Server Management Studio + +1. In Object Explorer, expand **SQL Server Agent**, open the **Jobs** menu, and then choose **New Job**. + + The **New Job** window opens. + +2. In **Name**, specify a name for the job. For example, you might choose "MarkTableJob" for your job name. + +3. (Optional) In **Description**, specify a description of the job. + +4. In **Select a page**, choose **Steps** and then choose **New**. + +5. The **New Job Step** window opens. + +6. In **Step Name**, specify a name for the step. + +7. In **Database**, choose the name of the configuration database. For example, if your deployment uses the default name for that database, TFS\_Configuration, you would choose that database from the drop-down list. + +8. Choose **Open**, browse to the procedure that you created for marking the tables, choose **Open** two times, and then choose **OK**. + + >**Note:** + >The procedure that you created for marking the tables runs the following step: + + EXEC sp_SetTransactionLogMarkAll 'TFSMark' + +9. In **Select a page**, choose **Schedules**, and then choose **New**. + + The **New Job Schedule** window opens. + +10. In **Name**, specify a name for the schedule. + +11. In **Frequency**, change the frequency to match the plan that you will create for backing up the databases. For example, you might want to run incremental backups daily at 2 A.M., and full backups on Sunday at 4 A.M. For marking the databases for the incremental backups, you would change the value of **Occurs** to **Daily**. When you create another job to mark the databases for the weekly full backup, you would keep the value of **Occurs** at **Daily**, and select the **Sunday** check box. + +12. In **Daily Frequency**, change the occurrence so that the job is scheduled to run one minute before the backup for the databases, and then choose **OK**. In the example deployment, in the job for the incremental backups, you would specify 1:59 A.M.. In the job for the full backup, you would specify 3:59 A.M.. + +13. In **New Job**, choose **OK** to finish creating the scheduled job. + +<a name="create-maintenance-plan-full-backups"></a> +## Create a maintenance plan for full backups + +After you create a scheduled job for marking the databases, you can use the Maintenance Plan Wizard to schedule full backups of all of the databases that your deployment of TFS uses. + +>**Important:** +>If your deployment is using the Enterprise or Datacenter editions of SQL Server, but you think you might want to restore databases to a server running Standard edition, you must use a backup set that was made with SQL Server compression disabled. Unless you disable data compression, you will not be able to successfully restore Enterprise or Datacenter edition databases to a server running Standard edition. You should turn off compression before creating your maintenance plans. To turn off compression, follow the steps in the [Microsoft Knowledge Base article](http://go.microsoft.com/fwlink/?LinkId=253758). + +### To create a maintenance plan for full backups + +1. In **SQL Server Management Studio**, expand the **Management** node, open the **Maintenance Plans** sub-menu, and then choose **Maintenance Plan Wizard**. + +2. On the welcome page for the **SQL Server Maintenance Plan Wizard**, choose **Next**. + + The **Select Plan Properties** page appears. + +3. In the **Name** box, specify a name for the maintenance plan. + + For example, you might create a plan for full backups named **TfsFullDataBackup**. + +4. Choose **Single schedule for the entire plan or no schedule**, and then choose **Change**. + +5. Under **Frequency** and **Daily Frequency**, specify options for your plan. For example, you might specify a weekly backup to occur on Sunday in **Frequency**, and specify 4 A.M. in **Daily Frequency**. + + Under **Duration**, leave the default value, **No end date**. Choose **OK**, and then choose **Next**. + +6. On the **Select Maintenance Tasks** page, select the **Backup Database (Full)**, **Execute SQL Server Agent Job**, and **Back up Database (Transaction Log)** check boxes, and then choose **Next**. + +7. On the **Select Maintenance Task Order** page, change the order so that the full backup runs first, then the Agent job, and then the transaction log backup, and then choose **Next**. + + For more information about this dialog box, choose the **F1** key. Also, search for **Maintenance Plan Wizard** on the following page of the Microsoft website: [SQL Server Books Online](http://go.microsoft.com/fwlink/?LinkId=160990). + +8. On the **Define Back Up Database (Full) Task** page, choose the down arrow, choose **All Databases**, and then choose **OK**. + +9. Specify the backup options for saving the files to disk or tape, as appropriate for your deployment and resources, and then choose **Next**. + +10. On the **Define Execute SQL Server Agent Job Task** page, select the check box for the scheduled job that you created for table marking, and then choose **Next**. + +11. On the **Define Back Up Database (Transaction Log) Task** page, choose the down arrow, choose **All Databases**, and then choose **OK**. + +12. Specify the backup options for saving the files to disk or tape as appropriate for your deployment and resources, and then choose **Next**. + +13. On the **Select Report Options** page, specify report distribution options, and then choose **Next** two times. + +14. On the **Complete the Wizard** page, choose **Finish**. + + SQL Server creates the maintenance plan and backs up the databases that you specified based on the frequency that you specified. + +<a name="create-maintenance-plan-diff-backups"></a> +## Create a maintenance plan for differential backups + +You can use the Maintenance Plan Wizard to schedule differential backups for all databases that your deployment of TFS uses. + +>**Important:** +>SQL Server Express does not include the Maintenance Plan Wizard. You must manually script the schedule for your differential backups. For more information, see the following topic on the Microsoft website: [How to: Create a Differential Database Backup (Transact-SQL)](http://go.microsoft.com/fwlink/?LinkId=186155). + +### To create a maintenance plan for differential backups + +1. Log on to the server that is running the instance of SQL Server that contains the databases that you want to back up. + +2. Open **SQL Server Management Studio**. + + 1. In the **Server type** list, choose **Database Engine**. + + 2. In the **Server name** and **Authentication** lists, choose the appropriate server and authentication scheme. + + 3. If your instance of SQL Server requires it, in **User name** and **Password**, specify the credentials of an appropriate account. + + 4. Choose **Connect**. + +3. In **SQL Server Management Studio**, expand the **Management** node, open the sub-menu, choose **Maintenance Plans**, and then choose **Maintenance Plan Wizard**. + +4. On the welcome page for the **SQL Server Maintenance Plan Wizard**, choose **Next**. + +5. On the **Select Plan Properties** page, in the **Name** box, specify a name for the maintenance plan. + + For example, you could name a plan for differential backups **TfsDifferentialBackup**. + +6. Choose **Single schedule for the entire plan or no schedule**, and then choose **Change**. + +7. Under **Frequency** and **Daily Frequency**, specify options for your backup plan. + + Under **Duration**, leave the default value, **No end date**. Choose **OK**, and then choose **Next**. + +8. On the **Select Maintenance Tasks** page, select the **Back up Database (Differential)** check box, and then choose **Next**. + +9. On the **Define Back Up Database (Differential) Task** page, choose the down arrow, choose **All Databases**, and then choose **OK**. + +10. Specify the backup options for saving the files to disk or tape as appropriate for your deployment and resources, and then choose **Next**. + +11. On the **Select Report Options** page, specify report distribution options, and then choose **Next** two times. + +12. On the **Complete the Wizard** page, choose **Finish**. + + SQL Server creates the maintenance plan and backs up the databases that you specified based on the frequency that you specified. + +<a name="create-maintenance-plan-transaction-log-backup"></a> +## Create a maintenance plan for transaction logs + +You can use the Maintenance Plan Wizard to schedule transaction log backups for all databases that your deployment of TFS uses. + +>**Important:** +>SQL Server Express does not include the Maintenance Plan Wizard. You must manually script the schedule for transaction-log backups. For more information, see the following topic on the Microsoft website: [How to: Create a Transaction Log Backup (Transact-SQL)](http://go.microsoft.com/fwlink/?LinkId=186158). + +### To create a maintenance plan for transaction log backups + +1. Log on to the server that is running the instance of SQL Server that contains the databases that you want to back up. + +2. Open **SQL Server Management Studio**. + +3. In the **Server type** list, choose **Database Engine**. + + 1. In the **Server name** and **Authentication** lists, choose the appropriate server and authentication scheme. + + 2. If your instance of SQL Server requires it, in **User name** and **Password**, specify the credentials of an appropriate account. + + 3. Choose **Connect**. + +4. In **SQL Server Management Studio**, expand the **Management** node, open the submenu, choose **Maintenance Plans**, and then choose **Maintenance Plan Wizard**. + +5. On the welcome page for the **SQL Server Maintenance Plan Wizard**, choose **Next**. + + The **Select Plan Properties** page appears. + +6. In the **Name** box, specify a name for the maintenance plan. + + For example, you could name a plan to back up transaction logs **TfsTransactionLogBackup**. + +7. Choose **Single schedule for the entire plan or no schedule**, and then choose **Change**. + +8. Under **Frequency** and **Daily Frequency**, specify options for your plan. + + Under **Duration**, leave the default value, **No end date**. + +9. Choose **OK**, and then choose **Next**. + +10. On the **Select Maintenance Tasks** page, select the **Execute SQL Server Agent Job** and **Back up Database (Transaction Log)** check boxes, and then choose **Next**. + +11. On the **Select Maintenance Task Order** page, change the order so that the Agent job runs before the transaction-log backup, and then choose **Next**. + + For more information about this dialog box, choose the **F1** key. Also, search for **Maintenance Plan Wizard** on the following page of the Microsoft website: [SQL Server Books Online](http://go.microsoft.com/fwlink/?LinkId=160990). + +12. On the **Define Execute SQL Server Agent Job Task** page, select the check box for the scheduled job that you created for table marking, and then choose **Next**. + +13. On the **Define Back Up Database (Transaction Log) Task** page, choose the down arrow, choose **All Databases**, and then choose **OK**. + +14. Specify the backup options for saving the files to disk or tape as appropriate for your deployment and resources, and then choose **Next**. + +15. On the **Select Report Options** page, specify report distribution options, and then choose **Next** two times. + +16. On the **Complete the Wizard** page, choose **Finish**. + + SQL Server creates the maintenance plan and backs up the transaction logs for the databases that you specified based on the frequency that you specified. + +<a name="backup-encryption-key-for-reporting"></a> +## Back up the encryption key for reporting services + +You must back up the encryption key for Reporting Services as part of backing up your system. Without this encryption key, you will not be able to restore the reporting data. For a single-server deployment of TFS, you can back up the encryption key for SQL Server Reporting Services by using the Reporting Services Configuration tool. You could also choose to use the **RSKEYMGMT** command-line tool, but the configuration tool is simpler. For more information about **RSKEYMGMT**, see the following page on the Microsoft website: [RSKEYMGMT Utility](http://go.microsoft.com/fwlink/?LinkId=160686). + +### To back up the encryption key by using the Reporting Services Configuration tool + +1. On the server that is running Reporting Services, open **Reporting Services Configuration Manager**. + + The **Report Server Installation Instance Selection** dialog box opens. + +2. Specify the name of the data-tier server and the database instance, and then choose **Connect**. + +3. In the navigation bar on the left side, choose **Encryption Keys**, and then choose **Backup**. + + The **Encryption Key Information** dialog box opens. + +4. In **File Location**, specify the location where you want to store a copy of this key. + + You should consider storing this key on a separate computer from the one that is running Reporting Services. + +5. In **Password**, specify a password for the file. + +6. In **Confirm Password**, specify the password for the file again, and then choose **OK**. + +<a name="create-backup-plan-sharepoint"></a> +## Create a backup plan for SharePoint Foundation + +Unlike Team Foundation Server, which uses the scheduling tools in SQL Server Management Studio, there is no built-in scheduling system for backups in SharePoint Foundation, and SharePoint specifically recommends against any scripting that marks or alters its databases. To schedule backups so that they occur at the same time as the backups for TFS, SharePoint Foundation guidance recommends that you create a backup script by using Windows PowerShell, and then use Windows Task Scheduler to run the backup script at the same time as your scheduled backups of TFS databases. This will help you keep your database backups in sync. + +>**Important:** +>Before proceeding with the procedures below, you should review the latest guidance for SharePoint Foundation. The procedures below are based on that guidance, but might have become out of date. Always follow the latest recommendations and guidance for the version of SharePoint Products you use when managing that aspect of your deployment. For more information, see the links included with each of the procedures in this section. + +### To create scripts to perform full and differential backups of the farm in SharePoint Foundation + +1. Open a text editor, such as Notepad. + +2. In the text editor, type the following, where *BackupFolder* is the UNC path to a network share where you will back up your data: + + Backup-SPFarm -Directory BackupFolder -BackupMethod Full + + >**Tip:** + >There are a number of other parameters you could use when backing up the farm. For more information, see [Back up a farm](http://go.microsoft.com/fwlink/?LinkId=235811) and [Backup-SPFarm](http://go.microsoft.com/fwlink/?LinkId=235810). + +3. Save the script as a .PS1 file. Consider giving the file an obvious name, such as "SharePointFarmFullBackupScript.PS1" or some meaningful equivalent. + +4. Open a new file, and create a second backup file, only this time specifying a differential backup: + + Backup-SPFarm -Directory BackupFolder -BackupMethod Differential + +5. Save the script as a .PS1 file. Consider giving the file an obvious name, such as "SharePointFarmDiffBackupScript.PS1". + + >**Important:** + >By default, PowerShell scripts will not execute on your system unless you have changed PowerShell's execution policy to allow scripts to run. For more information, see [Running Windows PowerShell Scripts](http://go.microsoft.com/fwlink/?LinkId=235813). + +After you have created your scripts, you must schedule them to execute following the same schedule and frequency as the schedule you created for backing up Team Foundation Server databases. For example, if you scheduled differential backups to execute daily at 2 A.M., and full backups to occur on Sundays at 4 A.M., you will want to follow the exact same schedule for your farm backups. + +To schedule your backups, you must use Windows Task Scheduler. In addition, you must configure the tasks to run using an account with sufficient permissions to read and write to the backup location, as well as permissions to execute backups in SharePoint Foundation. Generally speaking, the simplest way to do this is to use a farm administrator account, but you can use any account as long as all of the following criteria are met: + +- The account specified in Windows Task Scheduler is an administrative account. + +- The account specified for the Central Administration application pool and the account you specify for running the task have read/write access to the backup location. + +- The backup location is accessible from the server running SharePoint Foundation, SQL Server, and Team Foundation Server. + +### To schedule backups for the farm + +1. Choose **Start**, choose **Administrative Tools**, and then choose **Task Scheduler**. + +2. In the **Actions** pane, choose **Create Task**. + +3. On the **General** tab, in **Name**, specify a name for this task, such as "Full Farm Backup." In **Security options**, specify the user account under which to run the task if it is not the account you are using. Then choose **Run whether user is logged on or not**, and select the **Run with highest privileges** check box. + +4. On the **Actions** tab, choose **New**. + + In the **New Action** window, in **Action**, choose **Start a program**. In **Program/script**, specify the full path and file name of the full farm backup .PS1 script you created, and then choose **OK**. + +5. On the **Triggers** tab, choose **New**. + + In the **New Trigger** window, in **Settings**, specify the schedule for performing the full backup of the farm. Make sure that this schedule exactly matches the schedule for full backups of the Team Foundation Server databases, including the recurrence schedule, and then choose **OK**. + +6. Review all the information in the tabs, and then choose **OK** to create the task for the full backup for the farm. + +7. In the **Actions** pane, choose **Create Task**. + +8. On the **General** tab, in **Name**, specify a name for this task, such as "Differential Farm Backup." In **Security options**, specify the user account under which to run the task if it is not the account you are using, choose **Run whether user is logged on or not**, and select the **Run with highest privileges** check box. + +9. On the **Actions** tab, choose **New**. + + In the **New Action** window, in **Action**, choose **Start a program**. In **Program/script**, specify the full path and file name of the differential farm backup .PS1 script you created, and then choose **OK**. + +10. On the **Triggers** tab, choose **New**. + + In the **New Trigger** window, in **Settings**, specify the schedule for performing the full backup of the farm. Make sure that this schedule exactly matches the schedule for full backups of the Team Foundation Server databases, including the recurrence schedule, and then choose **OK**. + +11. Review all the information in the tabs, and then choose **OK** to create the task for the differential backup for the farm. + +12. In **Active Tasks**, refresh the list and make sure that your new tasks are scheduled appropriately, and then close Task Scheduler. For more information about creating and scheduling tasks in Task Scheduler, see [Task Scheduler How To](http://go.microsoft.com/fwlink/?LinkId=235812). + +<a name="backup-additional-lab-mgt"></a> +## Back up additional lab management components + +If you use Visual Studio Lab Management in your deployment of Team Foundation Server, you must also back up each machine and component that Lab Management uses. The hosts for the virtual machines and the SCVMM library servers are separate physical computers that are not backed up by default. You must specifically include them when you plan your backup and restoration strategies. The following table summarizes what you should back up whenever you back up Team Foundation Server. + +| Machine | Component | +| --- | --- | +| Server that is running System Center Virtual Machine Manager 2008 (SCVMM) R2 | SQL Server database (user accounts, configuration data) | +| Physical host for the virtual machines | Virtual machines (VMs) </br> Templates </br> Host configuration data (virtual networks) | +| SCVMM library server | Virtual machines </br> Templates </br> Virtual hard disks (VHDs) </br> ISO images | + +The following table contains tasks and links to procedural or conceptual information about how to back up the additional machines for an installation of Lab Management. You must perform the tasks in the order shown, without skipping any tasks. + +To back up the machines that are running any SCVMM components, you must be a member of the Backup Operators group on each machine. + +| Common Tasks | Detailed instructions | +| --- | --- | +| Back up the server that is running System Center Virtual Machine Manager 2008 R2. </br> Back up the library servers for SCVMM. </br> Back up each physical host for the virtual machines. | [Backing Up and Restoring the SCVMM Database](http://go.microsoft.com/fwlink/?linkid=150302) diff --git a/docs/tfs-server/admin/backup/refresh-data-caches.md b/docs/tfs-server/admin/backup/refresh-data-caches.md new file mode 100644 index 00000000000..a640a2dccf0 --- /dev/null +++ b/docs/tfs-server/admin/backup/refresh-data-caches.md @@ -0,0 +1,76 @@ +--- +title: Refresh the data caches on client computers +description: Refresh the data caches on client computers +ms.assetid: b3b31e5e-d431-475a-b6ca-a1ccb63795d3 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Refresh the data caches on client computers + +**TFS 2015** | **TFS 2013** + +To prevent workspace errors from occurring during version control or build operations in Team Foundation, the data cache on client computers must be updated after certain maintenance operations. After you move, restore, rename, or fail over a data-tier or application-tier server or after you recover from a failure such as a hardware malfunction, you must refresh the cache for tracking work items and users must refresh the version control cache on client computers. + +**Required permissions** + +To invoke the **StampWorkitemCache** Web method, you must be a member of the **Administrators** security group on the application-tier server for Team Foundation. For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +To use the **tf workspaces** command on the client computer, your **Read** permission must be set to **Allow**. + +## Refresh the Work Item Cache + +>**Note:** +>This procedure is optional. You should perform it only if errors occur with work item tracking. + + +To update the cache for tracking work items, you invoke the **StampWorkitemCache** Web method. This method forces client computers to update the cache the next time that they connect to the application-tier server. This method also synchronizes the workspaces that are defined on the client computers. + +>**Note:** +>When you invoke the **StampWorkitemCache** Web method, the performance of Visual Studio Team Foundation Server might temporarily degrade. The performance impact depends on how many Team Foundation users are connected when you invoke the method. + +To refresh the cache for tracking work items on client computers: + +1. On the new server, open Internet Explorer. + +2. In the Address bar, enter the following address to connect to the **ClientService** web service: + + **http://** *PublicURL/VirtualDirectory* **:8080/WorkItemTracking/v3.0/ClientService.asmx** + + >**Note:** + >Even if you are logged on with administrative credentials, you might need to start Internet Explorer as an administrator, and you might be prompted for your credentials. + +3. Choose **StampWorkitemCache**, and then choose **Invoke**. + + >**Note:** + >The StampWorkitemCache method returns no data. + +## Refresh the Version Control Cache + +To refresh the version control cache, each user runs the **tf workspaces** command on any computer that must be updated. They must update any computer that uses version control and that connects to a team project collection whose databases were relocated. + +To refresh the version control cache on client computers: + +1. On the client computer, open a Command Prompt window with administrative permissions, and change directories to *Drive*:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE. + +2. At the command prompt, enter the following command, including the URL of the collection, which includes the server name and the port number of the new server: + + **tf workspaces /collection:http://** *ServerName:Port/VirtualDirectoryName/CollectionName* + + In the example deployment, a developer needs to refresh the version control cache for a project that is a member of the DefaultCollection collection, which is hosted in the FabrikamPrime deployment of Team Foundation Server. He types the following string: + + **tf workspaces /collection:http://FabrikamPrime:8080/tfs/DefaultCollection** + + For more information, see [Workspaces Command](../../../tfvc/workspaces-command.md). + + +## See Also + + [Open the Team Foundation Administration Console](../../command-line/open-admin-console.md) + + [Workspaces Command](../../../tfvc/workspaces-command.md) + + [Managing Data](https://msdn.microsoft.com/library/ms253169) diff --git a/docs/tfs-server/admin/backup/restore-application-tier-server.md b/docs/tfs-server/admin/backup/restore-application-tier-server.md new file mode 100644 index 00000000000..f5173b3c922 --- /dev/null +++ b/docs/tfs-server/admin/backup/restore-application-tier-server.md @@ -0,0 +1,61 @@ +--- +title: Restore an application-tier server +description: Restore an application-tier server +ms.assetid: d5886fe9-c92a-49b7-87db-bbe47c808929 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Restore an application-tier server + +**TFS 2015** | **TFS 2013** + +The databases for Team Foundation store all data for your deployment of Team Foundation Server. Even if you back up the application-tier server, you will not back up any data for Team Foundation Server. However, if the hardware of an application-tier server fails, you can install another application-tier server and configure it to use the databases for your deployment. That server will then replace the offline server as the application-tier server for the deployment. If your application-tier server hosted SharePoint Products, you must also restore that software on the new hardware. For more information, see [Backup (SharePoint Foundation)](http://go.microsoft.com/fwlink/?LinkId=237641), [Backup and Recovery (SharePoint Server)](http://go.microsoft.com/fwlink/?LinkId=203842), or [Protecting and restoring a farm (Office SharePoint Server 2007)](http://go.microsoft.com/fwlink/?LinkId=203843). + +>**Note:** +> After you restore an application tier to new hardware, make sure that all users, groups, and service accounts for your deployment are configured with the permissions that they require to perform necessary tasks. For example, administrators for Team Foundation must be members of the local **Administrators** group on the application-tier server so that they can open the administration console. For more information, see [Add users to team projects](../../../accounts/add-users.md), [Set administrator permissions for team project collections](../../add-administrator-tfs.md), [Set administrator permissions for Team Foundation Server](../../add-administrator-tfs.md), and [Service accounts and dependencies in Team Foundation Server](../service-accounts-dependencies-tfs.md). + +You can also add more than one application-tier server to a deployment of Team Foundation Server, but you must configure clients to connect to that server as a separate application tier. You cannot configure automatic load balancing between application-tier servers. For actual load balancing and transparency to clients, you must first install and configure a hardware or software device for network load balancing (NLB). + +### To install and configure a server as the application-tier server + +1. Stop the application pools and services that Team Foundation Server uses. + + For more information, see [TFSServiceControl Command](../../command-line/tfsservicecontrol-cmd.md). + +2. If you are using Network Service as the service account for Team Foundation (TFSService), on the application-tier server, open a Command Prompt window, and change directories to *Drive:%Program Files%*\\ TFS 12.0\\Tools. At the command prompt, enter the following command: + + **TfsConfig Accounts /add /account:"NT Authority\\Network Service" /accountType:ApplicationTier /SQLInstance:** *ServerName* **/DatabaseName:** *DatabaseName* + + >**Note:** + > For more information, see [Accounts Command](../../command-line/tfsconfig-cmd.md#accounts). + +3. Install Team Foundation Server on the new server, and start the Application-Tier Only wizard. + +4. If you are using Visual Studio Lab Management, install the System Center Virtual Machine Manager (SCVMM) Administrator Console on the application tier, and configure it to connect to the server that is running SCVMM. + + For more information, see [Configuring Lab Management for SCVMM Environments](../config-lab-scvmm-envs.md). + +5. If the computer name has changed, open the administration console for Team Foundation. + +6. In the navigation bar, choose **Application Tier**, and then choose **Change URLs**. + + The **Change URLs** window opens. + +7. In **Notification URL**, specify the URL for the new application-tier server, and then choose **OK**. + + >**Note:** + > The name of the old application-tier server will still appear in the list of application-tier servers in the administration console for Team Foundation. If you select the **Filter out machines that have not connected in more than 3 days** check box, the old server will disappear from the list within three days. + +## See Also + + [Restore Lab Management components](restore-lab-management-components.md) + + [Team Foundation Server architecture](../../architecture/architecture.md) + + [Restore a deployment to new hardware](tut-single-svr-home.md) + + [Open the Team Foundation Administration Console](../../command-line/open-admin-console.md) diff --git a/docs/tfs-server/admin/backup/restore-data-different-instance.md b/docs/tfs-server/admin/backup/restore-data-different-instance.md new file mode 100644 index 00000000000..8cf6fa8923d --- /dev/null +++ b/docs/tfs-server/admin/backup/restore-data-different-instance.md @@ -0,0 +1,851 @@ +--- +title: Restore data to a different server than the current one for TFS +description: Restore data to a different server than the current one for TFS +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 7d5d9c39-ea7b-44bc-ae69-a2ce10a0c27e +ms.manager: douge +ms.author: aaronha +ms.date: 12/15/2016 +--- + +# Restore data to a different server than the current one for TFS + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can restore the data for your deployment of Visual Studio Team +Foundation Server to a different server or instance from where it was +originally stored. You might have to make such a change if, for +example, you want to upgrade your data-tier server, or hardware on the +original server failed. To help ensure successful recovery of data in +this scenario, you should configure marked transactions as part of your +backup strategy. For more information, see [Back Up Team Foundation Server](manually-backup-tfs.md). + +To restore data to a different server, you must perform different +steps from those that you perform to restore data to the same server. +For more information about how to restore data to the same server or +servers, see [Restore Data to the Same Location](restore-data-same-location.md)</span>. For +information about how to restore a single-server deployment after +hardware fails, see [Restore a single server deployment to new hardware](tut-single-svr-home.md). If your deployment uses +SharePoint Products, you must perform additional steps to back up and +restore its databases, as detailed in the procedures in this topic. + +> **Note:** +> +> You can automate some procedures in this topic by using wizards in the +> September 2010 release of power tools for Team Foundation Server. These +> wizards help simplify the process for backing up and restoring your +> deployment. However, they do not help back up or restore Visual Studio +> Lab Management, and you should not use them to back up or restore the +> databases for SharePoint Products or Microsoft Project Server. For more +> information, see the following page on the Microsoft website: [Team Foundation Server Power Tools September 2010](http://go.microsoft.com/fwlink/?LinkId=202027). + +The steps that you must perform to restore data to different servers or +instances vary, based on how Team Foundation Server is installed and +configured. For simplicity, the procedures in this topic are structured +as they would apply to restoring only the databases for Team Foundation +Server in a moderately complex deployment, as the following illustration +shows: + +![Example moderate topology with databases](../_img/example-moderately-complex-dbs.png) + +Your topology does not have to match this example for you to +successfully follow the procedures in this topic, but you might have to +adjust the steps. For example, if you have a deployment where all +components are installed on a single physical server, you would perform +all procedures on the server that is running Team Foundation Server. If +databases for team project collections were originally deployed on more +than one server, you must perform the steps to restore each database on +the server or servers that you specify. You do not have to restore the +databases in the same configuration as before, but you must restore each +database. You must also restore the databases for SharePoint Products, +Microsoft Project Server, and SQL Server Reporting Services in some +cases, such as if they were all hosted on a server that failed. For more +information about which components might be deployed on each server, see +the following topics: + +- [Understanding Backing Up Team Foundation Server](backup-db-architecture.md) + +- [Team Foundation Server Architecture](../../architecture/architecture.md) + +- [Examples of Simple Topology](../../architecture/examples-simple-topo.md) + +- [Examples of Moderate Topology](../../architecture/examples-moderate-topo.md) + +- [Examples of Complex Topology](../../architecture/examples-complex-topo.md) + +**In this topic** + +To restore data for Team Foundation to a different server or instance, +you must complete the procedures that your deployment topology requires +in the following sequence: + +1. [Required Permissions](#RequiredPermissions) + +2. [Back Up Data](#BackupData) + +3. [Install and Configure SQL Server on the New Hardware](#InstallAndConfigure) + +4. [Stop Services That Team Foundation Server Uses](#StopServices) + +5. [Restore the Databases](#RestoreDB) + +6. [Redirect SharePoint Products to the New Location of the Content Database](#RedirectSPT) + +7. [Change the Database in Reporting Services Configuration Manager](#ChangeSQLRS) + +8. [Prepare the New SQL Server or Instance for Team Foundation Server](#ConfigNewSQL) + +9. [Change the Ownership of the Restored Databases](#ChangeOwnership) + +10. [Redirect Team Foundation Server to Remote Collection Databases](#RedirectSQLRTPC) + +11. [Update Service Accounts](#UpdateNetworkService) + +12. [Register the Location of the Restored Databases](#RegisterDB) + +13. [Configure Reporting and Analysis Services](#RestoreWarehouse) + +14. [Clear the Data Cache On Servers](#ClearData) + +15. [Restart Services That Team Foundation Server Uses](#RestartServices) + +16. [Refresh the Data Cache on Client Computers](#RefreshDataCache) + +<a name="RequiredPermissions"></a> +**Required ermissions** + +To perform this procedure, you must be a member of the following groups +or have the following permissions: + +- A member of the **Administrators** security + group on the server or servers that are running the administration + console for Team Foundation. + +- Either a member of the **SQL Server System + Administrator** security group or your **SQL + Server Perform Back Up and Create Maintenance Plan** permission + must be set to **Allow** on the instance of + SQL Server that will host the databases. + +- A member of the **sysadmin** security group + for the databases for Team Foundation and for the Analysis + Services database. + +- An authorized user of the TFS\_Warehouse database. + +- If the deployment uses SharePoint Products, a member of the Farm + Administrators group for the farm to which you are restoring the + databases for SharePoint Products. + +In addition to these permissions, you might have to address the +following requirements on a computer that is running Windows Server +2008, Windows Server 2008 R2, Windows Vista, or Windows 7: + +- To follow a command-line procedure, you might have to open an + elevated command prompt by clicking + **Start**, right-clicking **Command Prompt**, and then clicking + **Run as Administrator**. + +- To follow a procedure that requires Internet Explorer, you might + have to start it as an administrator by clicking + **Start**, clicking **All + Programs**, right-clicking **Internet + Explorer**, and then clicking **Run as + administrator**. + +- To access Report Manager, reports, or websites for Reporting + Services, you might have to add these sites to the list of trusted + sites in Internet Explorer or start Internet Explorer as + an administrator. + +For more information, see the technet article: [User Account Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +<a name="BackupData"></a> +## Back up data + +To restore data from the original deployment of Team Foundation Server, +you must have a complete set of data backups for the SQL +Server databases. If the data was encrypted, you must also have the +encryption key and its password. + +See [Back Up Team Foundation Server](manually-backup-tfs.md) +and [Back Up the Reporting Services Encryption Key](manually-backup-tfs.md#reporting-encyption-key). + +> **Important:** +> +> You must back up the TFS\_Warehouse and TFS\_Analysis databases if your +> deployment is configured to use SQL Server Reporting Services and you +> want to restore those databases to a different server. You cannot just +> rebuild the warehouse, as you can when you restore to the same server +> or instance. You must also back up the databases for SharePoint Products +> if you want to move them to the server or instance to which you are +> restoring the databases for Team Foundation. These databases include the +> administrative database for SharePoint Products +> (SharePoint\_AdminContent\_*ID*) and the +> content and configuration databases. + +<a name="InstallAndConfigure"></a> +## Install and Configure SQL Server on the New Hardware + +To restore data for Team Foundation, you must install SQL Server on the +computer to which you want to move the databases for Team Foundation +Server. The version of SQL Server that you install must exactly match +the version on the original server that hosted the databases. This +requirement includes the service-pack level, the collation settings, and +the language edition. If the match is not exact, you might not be able +to restore the data, or Team Foundation Server might not operate +correctly even if you can restore the data. + +Install SQL Server in the new environment, prepare SQL Server for restoration of data for Team Foundation, and make sure that it +is operational. As an alternative, create an instance of SQL Server +on a server that already has a matching version installed. + +For more information, see [Installing Team Foundation Components](../../install/get-started.md). + +<a name="StopServices"></a> +## Stop Services that Team Foundation Server Uses + +Before you can restore data, you must stop all services that Team +Foundation Server uses on every server. If you have optional components +installed, such as SharePoint Products or Reporting Services, you must +stop those services on the servers where these components are installed. + +To stop services that Team Foundation Server uses: + +1. On the server that is running the application-tier services for Team + Foundation, open a Command Prompt window, and change directories to + *Drive*:\\%programfiles%\\TFS 2010\\Tools. + +2. Type the following command: ```TFSServiceControl quiesce``` + + For more information, see [TFSServiceControl Command](../../command-line/tfsservicecontrol-cmd.md). + +<a name="RestoreDB"></a> + +## Restore the Databases + +After you stop the services, you can restore data for Team +Foundation by using tools that SQL Server provides. + +> **Warning**: +> You must restore all databases to the same point in time, or the +> databases will be out of synchronization. The following procedures +> assume that you are using marked transactions to help ensure +> synchronization of the databases that Team Foundation Server uses. For +> more information, see [Back Up Team Foundation Server](manually-backup-tfs.md). If +> your deployment uses SharePoint Products, you should follow the guidance +> for the version of that product in your deployment. For more +> information, see [Backup and Recovery (SharePoint Server 2010)](http://go.microsoft.com/fwlink/?LinkId=203842), +> [Protecting and restoring a farm (Office SharePoint Server 2007)](http://go.microsoft.com/fwlink/?LinkId=203843), +> or [Protecting and restoring a farm (Windows SharePoint Services 3.0)](http://go.microsoft.com/fwlink/?LinkId=203844). + +To open the Restore Database dialog box: + +1. Log on to the server to which you want to restore databases. + +2. Click **Start**, point to **All Programs**, point to **Microsoft SQL Server 2008**, and then click + **SQL Server Management Studio**. + + > **Note:** + > For more information about how to restore databases, see the following + > page on the Microsoft website: [Implementing Restore Scenarios for SQL + > Server Databases](http://go.microsoft.com/fwlink/?LinkId=115277). + + The **Connect to Server** dialog box opens. + +3. In the **Server type** list, click **Database Engine**. + +4. In **Server name**, click or type the name of + the data-tier server and database instance, and then click **Connect**. + + > **Note:** + > If SQL Server is installed on a cluster, the server name is the name of + > the cluster and not the computer name. + + SQL Server Management Studio opens. + +5. Expand the **Databases** node to show the + list of databases that make up the data tier for Team Foundation. + +Complete the next procedure to restore a database (steps listed below databases) for the following +databases on each server where you have installed and configured SQL +Server: + +- TFS\_Configuration -- This database name might include additional characters between + **TFS\_** and **Configuration**. + +- TFS\_*CollectionName* -- Each team project collection has its own database. For example, if you + have five team project collections, you will have five databases, each + distinguished by the name of the team project collection. These + databases might be on the same instance of SQL Server, on separate + instances, or on separate physical servers. You must back up each + database and then restore each database. + +- TFS\_Warehouse -- This database name might include additional characters between + **TFS\_** and **Warehouse** + +On the server that is running Reporting Services, if +you have one configured for your deployment and must restore the +databases to a different server: + +- ReportServer -- If you used a named instance, this database will be named + ReportServer\$*InstanceName*. + +- ReportServerTempDB -- If you used a named instance, this database will be named + ReportServerTempDB\$*InstanceName*. + +On the server or servers that are running SharePoint +Products, if you have configured your deployment with one or more +SharePoint web applications and must restore the databases to a +different server: + +- The content database for SharePoint Products (WSS\_Content) -- The names of the databases that contain data for SharePoint + Products will vary based on the version of SharePoint Products that is installed + and whether the person who installed it customized the name. + Additionally, these databases might not reside on the data-tier + server if SharePoint Products is installed on a separate server from + Team Foundation Server. If the databases reside on different servers, + you must back up, restore, and configure them separately from Team + Foundation Server. However, you should synchronize the maintenance of + the databases to avoid synchronization errors. + + To restore the databases that SharePoint Products uses, you should + follow the guidance for the version of the software that your + deployment uses. For more information, see [Backup and Recovery + (SharePoint + Server 2010)](http://go.microsoft.com/fwlink/?LinkId=203842), + [Protecting and restoring a farm (Office SharePoint + Server 2007)](http://go.microsoft.com/fwlink/?LinkId=203843), or + [Protecting and restoring a farm (Windows SharePoint + Services 3.0)](http://go.microsoft.com/fwlink/?LinkId=203844). + +On the server or servers that are running Microsoft +Project Server, if you have integrated your deployment with Project +Server and must restore the databases to a different server: + +- The databases on which your deployment of Project Server depends. + For more information, see [Restore databases (Project + Server 2007)](http://go.microsoft.com/fwlink/?LinkId=211794) or + [Restore databases (Project + Server 2010)](http://go.microsoft.com/fwlink/?LinkId=211795). + +On the server that is running SQL Server Analysis +Services, if you have one configured for your deployment and must +restore the databases to a different server: + +- TFS\_Analysis + +For more information about these databases, see [Understanding Backing Up Team Foundation Server](backup-db-architecture.md). + +**To restore a database** + +1. Right-click the database that you want to restore, point to + **Tasks**, point to **Restore**, and then click **Database**. + + The **Restore Database** dialog box opens. + +2. Under **Source for restore**, click **From Device**, and then click the ellipsis button (**...**). + +3. In the **Specify Backup** dialog box, specify + the location of the backup file, and then click + **OK**. + + You must restore the full backup first, followed by the differential + backup, and then the transaction log backups, in the order in which + they were created. + +4. Under **Select the backup sets to restore**, + specify the backup sets to restore. + + Make sure that you restore the full, differential, and transaction + log databases if you created backup sets with marked transactions. + For more information about marked transactions, see [Back Up Team Foundation Server](manually-backup-tfs.md). + +5. In the **Select a page** pane, click **Options**, and then select the **Overwrite the existing database** check box. + +6. In the **Restore the database files as** + list, verify that the paths match your current database paths. + +7. Under **Recovery state**, perform one of the + following steps: + + - If you are using marked transactions, click + **Leave the database non-operational, and do not + roll back uncommitted transactions. Additional transaction logs + can be restored. (RESTORE WITH RECOVERY)**. + + - If you are not using marked transactions and you are not + applying additional transaction logs, click + **Leave the database ready to use**. + + - If you are not using marked transactions but you are applying + additional transaction logs, click **Leave the + database non-operational**. + +8. Click **OK**. + + A progress icon appears. + +9. When the **SQL Server Management Studio** + dialog box appears and confirms successful restoration, click + **OK** to return to **Object Explorer**. + +10. If you are using marked transactions, right-click the database that + you just restored, point to **Tasks**, point + to **Restore**, and then click + **Transaction Log**. + + The **Restore Transaction Log** window opens. + +11. On the **General** page, make sure that the + appropriate database is highlighted in the + **Database** list. + +12. Under **Select the transaction log to + restore**, select the check box that is next to the log that + you want to restore. + +13. Under **Restore to**, click + **Marked transaction**. + + The **Select Marked Transaction** + window opens. + +14. In the **Select the marked transaction to stop the + restore at** list, select the check box that is next to the + transaction mark that you want to use for the restoration, and then + click **OK**. + + > **Important:** + > You must use the same transaction mark that has the same date and time + > for all databases to successfully restore the data. + +15. In the **Restore Transaction Log** window, + click **OK**. + + A progress icon appears. + +16. When the **SQL Server Management Studio** + dialog box appears and confirms successful restoration, click + **OK**. + + For more information, see the following page on the Microsoft + website: [Applying Transaction Log Backups](http://go.microsoft.com/fwlink/?LinkId=115460). + +> **Note:** +> If you restored the databases for Reporting Services, you must also +> restore their encryption key. For more information, see the following +> topic on the Microsoft website: [Restoring the Encryption Key (Reporting +> Services Configuration)](http://go.microsoft.com/fwlink/?LinkId=158327). + +<a name="RedirectSPT"></a> +## Redirect SharePoint Products to the New Location of the Content Database + +You can skip this procedure if SharePoint Products is not configured +for use with your deployment of Team Foundation Server or if you are not +restoring the databases for SharePoint Products. + +After you have restored the content database for SharePoint Products +(WSS\_Content), you must redirect the server that is running SharePoint +Products to the new location of that database. This database must be +operational before you can reconfigure Team Foundation Server with the +new locations of its databases. + +To redirect project sites to use the content database on the new data-tier server: + +- Log on to the server that hosts SharePoint Products, and redirect + it to use the content databases on the new server. + + For more information, see + [Redirect SharePoint Products to Use a New Content Database](https://msdn.microsoft.com/en-us/library/cc668750). + +<a name="ChangeSQLRS"></a> +## Change the Database in Reporting Services Configuration Manager + +You can skip this procedure if you do not have a report server that is +configured for use with your deployment of Team Foundation Server or you +are not restoring the databases for the report server. + +After you redirect SharePoint Products to the new content databases, you +must redirect Reporting Services to the new location of its databases +(ReportServer and ReportServer\_TempDB). Unless you perform this +procedure, no reports will be available for any team project. These +databases must be operational before you can reconfigure Team Foundation +Server with the new locations of its databases. + +To redirect Reporting Services to connect to the new server: + +- Log on to the server that hosts Reporting Services, and redirect it + to connect to the databases on the new server. + + For more information, see [Redirect Reporting Services to Connect to a Different Server](https://msdn.microsoft.com/en-us/library/cc668756). + +<a name="ConfigNewSQL"></a> +## Prepare SQL Server for Team Foundation Server + +Before the restored databases will work correctly, you must use the +**TFSConfig PrepSQL** command to prepare SQL Server to host databases +for Team Foundation Server. This command creates the TFSEXECROLE and +TFSADMINROLE groups on the new server or instance and also adds the +system messages that are required for operation. + +> **Note:** +> If you do not have access to the command-line tools for Team Foundation +> Server, you can install them by installing Team Foundation Server. +> Install it on the computer that will be the application-tier server, but +> cancel the configuration wizard that appears after the software is +> installed. + +To prepare SQL Server to host databases for Team Foundation Server: + +1. Log on to the server that hosts the application tier for Team + Foundation, open a Command Prompt window, and change directories to + *Drive*:\\%programfiles%\\TFS 2010\\Tools. + +2. Type the following command, where *ServerName* is the name of the instance of + SQL Server that hosts a database for Team Foundation Server, in + either *ServerName* or *ServerName\InstanceName format: + + **TFSConfig PrepSQL /SQLInstance:** *ServerName* + +3. Repeat this step for every new server or instance to which you + restored a database for Team Foundation Server. + +<a name="ChangeOwnership"></a> +## Change the Ownership of the Restored Databases + +You must use the **TFSConfig Accounts ResetOwner** command to change the +database owner login for the restored databases to the current user. +Before you perform the next sequence of steps, make sure that you are +logged on with an appropriate user account. For example, you can use the +account with which Team Foundation Server was installed, which the +installation guide refers to as TFSSETUP. At a minimum, the account must +be a member of the **Team Foundation +Administrators** group in Team Foundation Server and a member of +the **sysadmin** group in SQL Server. + +To change the ownership of the restored databases to the current user: + +1. Log on to the application-tier server for Team Foundation, open a + Command Prompt window, and change directories to *Drive*:\\%programfiles%\\TFS 2010\\Tools. + +2. Type the following command, where *ServerName* (in either + *ServerName* or *ServerName*\*InstanceName* format) is the name of the + instance of SQL Server that hosts a database for Team Foundation + Server and *DatabaseName* is the name + of the configuration database (by default, TFS\_Configuration): + + **TFSConfig Accounts /ResetOwner /SQLInstance:** + *ServerName* **/DatabaseName:** + *DatabaseName* + + This command line will change the ownership for all databases that + Team Foundation Server uses. + +<a name="RedirectSQLRTPC"></a> +## Redirect Team Foundation Server to Remote Collection Databases + +You can skip this procedure if all databases for collections, Analysis +Services, and reporting are on the same server and instance as the +configuration database. + +You must redirect Team Foundation Server to any collection databases +that are hosted on a separate server or servers from the configuration +database. In addition, you must run the RemapDBs command if you are +using a named instance or if either the TFS\_Analysis or the +TFS\_Warehouse database is hosted on a different server from +TFS\_Configuration. + +To redirect Team Foundation Server to remote databases: + +1. Log on to the application-tier server for Team Foundation, open a + Command Prompt window, and change directories to + *Drive*:\\%programfiles%\\TFS 2010\\Tools. + +2. Type the following command, where + *ServerName* is the name of the instance of + SQL Server that hosts the configuration database for Team + Foundation Server, + *TFS\_Configuration* is the name of the + restored configuration database for Team Foundation Server, and + *ServerName2* is the name of the server + that hosts the remote collection. You can have as many ServerName + parameters as you have servers that are configured in + your deployment. You can specify *ServerName* in either *ServerName* or + *ServerName*\*InstanceName* format. You must specify the + instance name if you are not using the default instance: + + **TFSConfig RemapDBs /DatabaseName:** *ServerName***;** *TFS\_Configuration* **/SQLInstances:** + *ServerName,ServerName2* **/AnalysisInstance:** *ServerName2* **/AnalysisDatabaseName:** + *DatabaseName* + + > **Note:** + > In **/SQLInstances**, you must specify all instances, separated by + > commas, of SQL Server that host databases for Team Foundation Server. + > For more information, see [RemapDBs Command](../../command-line/tfsconfig-cmd.md#remapdbs). + +<a name="UpdateNetworkService"></a> +## Update All Service Accounts + +You must update the service account for Team Foundation Server +(TFSService) and the data sources account (TFSReports). Even if these +accounts have not changed, you must update the information in order +to make sure that the identity and the format of the accounts are +appropriate for the new server. + +> **Note:** +> If you have more than one application-tier server in your deployment, +> you must update the service accounts on each of those servers. + +To update service accounts: + +1. On the report server, open Computer Management, and start the + following components if they are not already started: + + - ReportServer or ReportServer\$<span + *InstanceName* (application pool) + + - SQL Server Reporting Services (*TFSINSTANCE*) + +2. On the application-tier server, open a Command Prompt window, and + change directories to + *Drive*:\\%programfiles%\\ TFS 2010\\Tools. + +3. At the command prompt, type the following command to add the service + account for Team Foundation, where + *DatabaseName* is the name of the + configuration database (by default, TFS\_Configuration): + + **TfsConfig Accounts /add /AccountType:ApplicationTier + /account:** *AccountName* **/SQLInstance:** *ServerName* **/DatabaseName:** *DatabaseName* + + For more information about how to use this command, see + [Accounts Command](../../command-line/tfsconfig-cmd.md#accounts). + +4. Use the **Accounts** command to add the data sources account for the + report server and the proxy account for Team Foundation Server + Proxy, if your deployment uses these resources. + +<a name="RegisterDB"></a> + +## Register the Location of the Restored Databases if You Are Not Restoring the Application Tier + +You can skip this procedure if you are also restoring the application +tier to a different server. + +After you update the service account information, you must redirect the +application tier to the new location of the restored databases. + +> **Note:** +> If you have more than one application-tier server in your deployment, +> you must register the location of the databases on each of those +> servers. + +To register the location of the databases: + +1. On the application-tier server, open a Command Prompt window, and + change directories to + *Drive*:\\%programfiles%\\ TFS 2010\\Tools. + +2. At the command prompt, type the following command, where + *DatabaseName* is the name of the configuration database (by default, TFS\_Configuration): + + **TfsConfig registerDB /SQLInstance:** *ServerName* **/DatabaseName:** *DatabaseName* + + For more information about how to use this command, see + [RegisterDB Command](../../command-line/tfsconfig-cmd.md#registerdb). + +<a name="RestoreWarehouse"></a> +## Configure Reporting and Analysis Services + +You can skip this procedure if you are not using a report server as part +of your deployment. If your deployment uses a report server, you must +redirect Team Foundation Server to its location, restart the warehouse, +and manually rebuild the database for Analysis Services. + +> **Note:** +> You must complete this procedure even if you restored the TFS\_Warehouse +> and TFS\_Analysis databases, as described in the previous section. + +To reconfigure reporting and Analysis Services: + +1. Open the administration console for Team Foundation. + +2. In the navigation bar, click **Reporting**. + +3. In **Reporting**, click + **Edit**. + +4. In the **Take Offline** confirmation message, + click **OK**. + + The **Reporting Services** dialog box opens. + +5. Select the **Use Report Server** check box. + +6. Click the **Warehouse** tab, and, in + **Server**, type or click the name of the + report server. + +7. In **Database**, type the name of the + warehouse database for Team Foundation Server. + + By default, this database is named TFS\_Warehouse. + +8. (Optional) Click **Test Connection** to make + sure that the database that you specified is valid. + +9. Click the **Analysis Services** tab. + +10. In **Server**, type or click the name of the + server that is running SQL Server Analysis Services. + +11. In **Database**, type the name of the + Analysis Services database for Team Foundation Server. + + By default, the name of this database is TFS\_Analysis. + +12. If you are not using the default instance for the database, select + the **Specify non-default instance** check + box, and then type or click the name of the instance. + +13. (Optional) Click **Test Connection** to make + sure that the database that you specified is valid. + +14. In **Username** and + **Password**, type the account name and password + (if any) for the data sources account (TFSReports). + +15. On the **Reports** tab, in + **Server**, type or click the name of the report + server, and then click **Populate URLs**. + +16. In **Username** and + **Password**, type the account name and password + (if any) for the data sources account (TFSReports). + +17. In **Default Path**, type the relative path + in which reports are stored, and then click + **OK**. + +18. In the administration console, click **Start + Jobs** to restart reporting. + +19. Open a Command Prompt window, and change directories to + %ProgramFiles%\\TFS 2010\\Tools. + +20. Type the following command to rebuild the database for Analysis + Services: + + ```TFSConfig RebuildWarehouse /AnalysisServices /ReportingDataSourcePassword: Password``` + + *Password* is the password for the data sources account for Reporting Services (TFSReports). + +21. Wait until the command has successfully completed. + +22. On the report server, open Internet Explorer, type the following + string in the Address bar, and then press ENTER: + + ```http://localhost:8080/<VirtualDirectory>/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx``` + + For *VirtualDirectory*, type the virtual directory for Internet Information Services (IIS) that was + specified when Team Foundation Server was installed. By default, this directory is named ```tfs```. + + The **WarehouseControlWebService** page opens. + + > **Note:** + > The TFS Application Pool must be running + > for the Warehouse Control Web service to be available. + +23. Click **GetProcessingStatus**, and then click **Invoke**. + + > **Important:** + > The service should return a value of **Idle** for + > all jobs, which indicates that the cube is not being processed. If a + > different value is returned, repeat this step until + > **Idle** is returned for all jobs. + +24. On the **WarehouseControlWebService** page, + click **ProcessAnalysisDatabase**, and then + click **Invoke**. + + A browser window opens. The service returns + **True** when it successfully starts the processing + of the cube and **False** if it is not + successful or if the cube is currently being processed. + +25. To determine when the cube has been processed, return to the + **WarehouseControlWebService** page, click + **GetProcessingStatus**, and then click + **Invoke**. + + Processing has completed when the + **GetProcessingStatus** service returns a value of + **Idle** for all jobs. + + For more information, see [Manually Process the Data Warehouse and Analysis Services Cube](../../../report/admin/manually-process-data-warehouse-and-cube.md) for Team Foundation Server. + +26. On the application-tier server, open Computer Management, and start + the Visual Studio Team Foundation Background Job Agent. + +<a name="ClearData"></a> +## Clear the Data Cache on Servers + +Each application-tier server in your deployment of Team Foundation +utilizes a file cache so that users can more quickly download files from +the data-tier server. When you restore a deployment, you should clear +this cache on each application-tier server. Otherwise, mismatched file +IDs might cause problems when users download files from version control. +If your deployment uses Team Foundation Server Proxy, you must also +clear the data cache on each server that is configured as a proxy. + +> **Note:** +> By performing this step, you can help prevent the download of incorrect +> versions of files in version control. You should perform this step +> unless you are replacing all hardware in your deployment as part of your +> restoration. If you are replacing all hardware, you can skip this +> procedure. + +To clear the data cache: + +1. On a server that is running the application-tier services for Team + Foundation or that is configured with Team Foundation Server Proxy, + open a Command Prompt window, and then change directories to + *Drive*:\\%programfiles%\\Microsoft Team Foundation Server 2010\\Application Tier\\Web Services\\\_tfs\_data. + +2. Delete everything in the \_tfs\_data directory. + +3. Repeat these steps for each application-tier server and each server + that is running Team Foundation Server Proxy in your deployment. + + +<a name="RestartServices"></a> +## Restart Services that Team Foundation Server Uses + +After you restore the data, you must restart the services before your +deployment will operate and be available to users. + +To restart services that Team Foundation Server uses: + +1. On the server that is running the application-tier services for Team + Foundation, open a Command Prompt window, and change directories to + *Drive*:\\%programfiles%\\TFS 2010\\Tools. + +2. Type the following command: + + ```TFSServiceControl unquiesce``` + + For more information, see [TFSServiceControl Command](../../command-line/tfsservicecontrol-cmd.md). + + +<a name="RefreshDataCache"></a> +## Refresh the Data Cache on Client Computers + +To refresh the data cache on client computers: + +- Log on to the application-tier server, and use the + **ClientService** web service to force clients to + update the cache for tracking work items. + + For more information, see [Refresh the Data Caches on Client Computers](refresh-data-caches.md). diff --git a/docs/tfs-server/admin/backup/restore-data-same-location.md b/docs/tfs-server/admin/backup/restore-data-same-location.md new file mode 100644 index 00000000000..6d5afd40026 --- /dev/null +++ b/docs/tfs-server/admin/backup/restore-data-same-location.md @@ -0,0 +1,285 @@ +--- +title: Restore data to the same location +description: Restore data to the same location +ms.assetid: 57881758-8f6e-4d36-afa7-75d6b50e3e48 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Restore data to the same location + +**TFS 2015** | **TFS 2013** + +You can restore data from a backup to the same server and instance of SQL Server for Team Foundation from which that data was backed up. For example, you might want to restore a corrupted set of databases to the last known good state. + +> **TFS 2013 Tip:** +> If your original deployment used the Enterprise or Datacenter editions of SQL Server, and you want to restore databases to a server running Standard edition, you must use a backup set that was made with SQL Server compression disabled. Unless you disable data compression, you will not be able to successfully restore Enterprise or Datacenter edition databases to a server running Standard edition. To turn off compression, follow the steps in the [Microsoft Knowledge Base article](http://go.microsoft.com/fwlink/?LinkId=253758). + +If you want to restore data to another server or another instance of SQL Server, see [Restore a deployment to new hardware](tut-single-svr-home.md).  + +> **Note:** +> If you use SharePoint Products in your deployment, when you restore data, you do not have to restore the websites that are automatically generated based on the data for each team project. The data for the team project portals is contained in the databases that you restore. + +The steps to restore data to the same server or servers vary based on how Team Foundation Server is installed and configured. For simplicity, the procedures in this topic are structured for a moderately complex deployment of Team Foundation Server, as the following illustration shows: + +![Example moderate topology with databases](../_img/ic372331.png) + +If your topology does not exactly match this example, you might have to adjust the steps in this procedure to follow it successfully. For example, if you have a deployment where all components are installed on a single physical server, you would perform all procedures on that server. If databases for team project collections are deployed on more than one server, you must perform the steps to restore each collection database on the appropriate server. For more information about which components might be deployed on each server, see the following topics: + +- [Understand TFS databases, deployment topologies, and backup](backup-db-architecture.md) + +- [Team Foundation Server architecture](../../architecture/architecture.md) + +- [Examples of Simple Topology](../../architecture/examples-simple-topo.md) + +- [Examples of Moderate Topology](../../architecture/examples-moderate-topo.md) + +- [Examples of Complex Topology](../../architecture/examples-complex-topo.md) + +**In this topic** + +1. [Required Permissions](#req-permissions) + +2. [Stop services that TFS uses](#stop-svcs-tfs-uses) + +3. [Rename Databases You Want To Restore](#rename-dbs-to-restore) + +4. [Restore Team Foundation Databases](#restore-tfs-dbs) + +5. [Update All Service Accounts](#update-all-svc-accts) + +6. [Restore/Rebuild the Warehouse](#rebuild-the-warehouse) + +7. [Clear the Data Cache On Servers](#clear-data-cache-on-servers) + +8. [Restart Services that Team Foundation Server Uses](#restart-svcs-tfs) + +9. [Refresh the Data Cache on Client Computers](#refresh-caches-clients) + +<a name="req-permissions"></a> +## Required Permissions + +To perform this procedure, you must be a member of the following groups or have the following permissions: + +- A member of the **Administrators** security group on the server or servers that are running the administration console for Team Foundation. + +- Either a member of the **SQL Server System Administrator** security group or your **SQL Server Perform Back Up and Create Maintenance Plan** permission must be set to **Allow** on the instance of SQL Server that hosts the databases. + +- A member of the **sysadmin** security group for the database instance for Team Foundation and for the Analysis Services instance of the warehouse database. + +- An authorized user of the TFS\_Warehouse database. + +- A member of the TFSEXECROLE database role. + +- If the deployment uses SharePoint Products, a member of the **Farm Administrators** group for the farm to which the SharePoint Products databases are being restored. + +For more information, see the following page on the Microsoft website: [User Account Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +<a name="stop-svcs-tfs-uses"></a> +## Stop services that TFS uses + +Stopping the services helps protect against data loss or corruption during the restoration process, particularly if you rename databases. + +1. On the server that is running the application-tier services for Team Foundation, open a Command Prompt window, and change directories to Drive:\\%programfiles%\\TFS 12.0\\Tools. + +2. Type the following command: + + TFSServiceControl quiesce + + For more information, see [TFSServiceControl Command](../../command-line/tfsservicecontrol-cmd.md). + +<a name="rename-dbs-to-restore"></a> +## Rename Databases that You Want to Restore + +Before you can use the Restore wizard to restore a database that Team Foundation Server, you must first take it offline, and then rename it. + +### To stop databases that Team Foundation Server uses + +1. Open **SQL Server Management Studio**. + + > **Note:** + > For more information about how to restore databases, see the following page on the Microsoft website: [Implementing Restore Scenarios for SQL Server Databases](http://go.microsoft.com/fwlink/?LinkId=115277). + + The **Connect to Server** dialog box opens. + +2. In **Server type**, choose **Database Engine**. + +3. In **Server name**, choose or type the name of the data-tier server and database instance, and then choose **Connect**. + + > **Note:** + > If SQL Server is installed on a cluster, the server name is the name of the cluster and not the computer name. + + SQL Server Management Studio opens. + +4. Expand the **Databases** node to show the list of databases that make up the data tier for Team Foundation. + +5. Rename and then stop each database you want to restore, following [the guidance for your version of SQL Server](https://technet.microsoft.com/library/ms345378.aspx). Give the database a name that indicates it is the old version of the database you will replace with the restored version. For example, you might rename TFS\_DefaultCollection to TFS\_DefaultCollection\_Old. + +<a name="restore-tfs-dbs"></a> +## Restore Team Foundation Databases + +You can restore data for Team Foundation Server by using the Restore wizard in the administration console in TFS. The Restore wizard also restores the encryption key used for reporting. + +### To restore databases + +1. Open the administration console for TFS and navigate to **Scheduled Backups** to start the Restore wizard. + + ![Start the Restore wizard](../_img/ic654273.png) + +2. Specify the path to the backup set and choose the set you want to use for restoration. + + ![Choose the network path, then the restore set](../_img/ic664997.png) + +3. Complete the wizard and restore the databases. + + ![The databases are restored to the new server](../_img/ic664998.png) + +<a name="update-all-svc-accts"></a> +## Update All Service Accounts + +You must update the service account for Team Foundation Server (TFSService) and the data sources account (TFSReports). Even if these accounts have not changed, you must update the information to ensure that the identity and the format of the accounts are appropriate. + +### To update service accounts + +1. On the server that is running SQL Server Reporting Services, open Computer Management, and start the following components if they are not already started: + + - ReportServer or ReportServer$*InstanceName* (application pool) + + - SQL Server Reporting Services (*TFSINSTANCE*) + +2. On the application-tier server, open a Command Prompt window, and change directories to *Drive*:\\%programfiles%\\ TFS 12.0\\Tools. + +3. At the command prompt, enter the following command to add the service account for Team Foundation, where *DatabaseName* is the name of the configuration database (by default, TFS\_Configuration): + + **TfsConfig Accounts /add /AccountType:ApplicationTier /account:** *AccountName* + + For more information about how to use this command, see [Accounts Command](../../command-line/tfsconfig-cmd.md#accounts). + +4. Use the **Accounts** command to add the data sources account for the report server and the proxy account for Team Foundation Server Proxy, if your deployment uses these resources. + +<a name="rebuild-the-warehouse"></a> +## Rebuild the Warehouse + +You can rebuild the data warehouse instead of restoring the **TFS\_Warehouse** and **TFS\_Analysis** databases. You will require a significant amount of time to rebuild the warehouse if your deployment contains a lot of data. However, that strategy helps ensure that all data is properly synchronized. When you rebuild the warehouse, Team Foundation Server creates an instance of it, which you must then process to populate it by using data from the operational stores. + +> **Note:** +> If you restored the TFS_Warehouse and TFS_Analysis databases in the previous section, you do not have to perform the following procedure. + +### To rebuild the warehouse + +1. On the server that is running the application-tier services for Team Foundation, open a Command Prompt window, and change directories to *Drive*:\\%programfiles%\\TFS 12.0\\Tools. + +2. Enter the following command: + + **TFSConfig rebuildwarehouse /all /ReportingDataSourcePassword:** *Password* + + where *Password* is the password for the data sources account for Reporting Services (TFSReports). + +3. Wait until the command is successfully completed. + +4. On the report server, open Internet Explorer and enter the following string in the Address bar: + + **http://localhost:8080/** *VirtualDirectory* **/TeamFoundation/Administration/v3.0/WarehouseControlService.asmx** + + For *VirtualDirectory*, enter the virtual directory for Internet Information Services (IIS) that was specified when Team Foundation Server was installed. By default, this directory is named **tfs**. + + The **WarehouseControlWebService** page opens. + + > **Note:** + > The Microsoft Team Foundation Server Application Pool must be running for the Warehouse Control Web service to be available. + +5. Choose **GetProcessingStatus**, and then choose **Invoke**. + + > **Important:** + > The service should return a value of **Idle** for all jobs, which indicates that the cube is not being processed. If a different value is returned, repeat this step until **Idle** is returned for all jobs. + +6. On the **WarehouseControlWebService** page, choose **ProcessAnalysisDatabase**, and then choose **Invoke**. + + A browser window opens. The service returns **True** when it successfully starts to process the cube and **False** if it is not successful or if the cube is currently being processed. + +7. To determine when the cube has been processed, return to the **WarehouseControlWebService** page, choose ** GetProcessingStatus**, and then choose **Invoke**. + + Processing has completed when the **GetProcessingStatus** service returns a value of **Idle** for all jobs. + +8. On the application-tier server for Team Foundation, open **Computer Management**, and start the Visual Studio Team Foundation Background Job Service. + +<a name="clear-data-cache-on-servers"></a> +## Clear the Data Cache on Servers + +Each application-tier server in your deployment of Team Foundation uses a file cache so that users can quickly download files from the data-tier server. When you restore a deployment, you should clear this cache on each application-tier server. Otherwise, mismatched file IDs might cause problems when users download files from version control. If your deployment uses Team Foundation Server Proxy, you must also clear the data cache on each server that is configured as a proxy. + +> **Note:** +> By clearing the data caches, you can help prevent the download of incorrect versions of files in version control. You should routinely do this unless you are replacing all hardware in your deployment as part of your restoration. If you are replacing all hardware, you can skip this procedure. + +### To clear the data cache + +1. On a server that is running the application-tier services for Team Foundation or that is configured with Team Foundation Server Proxy, open a Command Prompt window and change directories to *Drive*:\\%programfiles%\\TFS 12.0\\Application Tier\\Web Services\\\_tfs\_data. + +2. Delete everything in the \_tfs\_data directory. + +3. Repeat these steps for each application-tier server and each server that is running Team Foundation Server Proxy in your deployment. + +<a name="restart-svcs-tfs"></a> +## Restart Services that Team Foundation Server Uses + +After you restore the data, you must restart the services to return the server to an operational state. + +### To restart services that Team Foundation Server uses + +1. On the server that is running the application-tier services for Team Foundation, open a Command Prompt window, and change directories to *Drive*:\\%programfiles%\\TFS 12.0\\Tools. + +2. Enter the following command: + + **TFSServiceControl unquiesce** + + For more information, see [TFSServiceControl Command](../../command-line/tfsservicecontrol-cmd.md). + +<a name="refresh-caches-clients"></a> +## Refresh the Caches on Client Computers + +### To refresh the cache for tracking work items on client computers + +1. On the new server, open Internet Explorer. + +2. In the Address bar, enter the following address to connect to the **ClientService** web service: + + **http://** *PublicURL/VirtualDirectory* **:8080/WorkItemTracking/v3.0/ClientService.asmx** + + > **Note:** + > Even if you are logged on with administrative credentials, you might need to start Internet Explorer as an administrator, and you might be prompted for your credentials. + +3. Choose **StampWorkitemCache**, and then choose **Invoke**. + + > **Note:** + > The StampWorkitemCache method returns no data. + +### To refresh the version control cache on client computers + +1. On the client computer, open a Command Prompt window with administrative permissions, and change directories to *Drive*:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE. + +2. At the command prompt, enter the following command, including the URL of the collection, which includes the server name and the port number of the new server: + + **tf workspaces /collection:http://** *ServerName:Port/VirtualDirectoryName/CollectionName* + + In the example deployment, a developer needs to refresh the version control cache for a project that is a member of the DefaultCollection collection, which is hosted in the FabrikamPrime deployment of Team Foundation Server. He types the following string: + + **tf workspaces /collection:http://FabrikamPrime:8080/tfs/DefaultCollection** + + For more information, see [Workspaces Command](../../../tfvc/workspaces-command.md). + +## See Also + + [Permission reference for Team Foundation Server](../../../security/permissions.md) + + [Team Foundation Server architecture](../../architecture/architecture.md) + + [Restore the databases](tut-single-svr-restore-dbs.md) + + [Restore Lab Management components](restore-lab-management-components.md) + + [Team Foundation Server services and service accounts](../config-tfs-resources.md) + + [Restore a deployment to new hardware](tut-single-svr-home.md) diff --git a/docs/tfs-server/admin/backup/restore-lab-management-components.md b/docs/tfs-server/admin/backup/restore-lab-management-components.md new file mode 100644 index 00000000000..6d58e8e9e9a --- /dev/null +++ b/docs/tfs-server/admin/backup/restore-lab-management-components.md @@ -0,0 +1,138 @@ +--- +title: Restore Lab Management components +description: Restore Lab Management components +ms.assetid: c99b3b8c-d025-4e2f-b6ef-533c5c2f3f92 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Restore Lab Management components for TFS + +**TFS 2015** | **TFS 2013** + +By following the procedures in this topic, you can restore one or more components of Visual Studio Lab Management that have failed. You can decide which procedures to complete based on which components failed, but you should complete the procedures in the following order: + +1. [Restore the library server for System Center Virtual Machine Manager (SCVMM)](#restore-lib-svr-scvmm) + +2. [Restore the server that is running SCVMM](#restore-svr-running-scvmm) + +3. [Restore Team Foundation Server](#restore-tfs) + +4. [Restore the Hyper-V hosts](#restore-hyper-v-hosts) + +If you follow the recommended order, Team Foundation Server will recognize all virtual machines, templates, hosts and other objects in SCVMM. However, Team Foundation Server will not recognize any objects that were deleted from SCVMM after it was backed up but before Team Foundation Server was backed up. You can remove any such objects from Microsoft Test Manager, as described later in this topic. + +Before you can complete these procedures, the following conditions must be true: + +- The network names of the new machines must match the names of the machines that were replaced. + +- All security accounts must have been restored. + +- All software must have been recovered to the same state. + +**Required Permissions** + +To perform this procedure, you must be a member of the following groups: + +- The **Administrators** security group on the server that is running the administration console for Team Foundation. + +- The **SQL Server System Administrator** security group or your **SQL Server Perform Back Up and Create Maintenance Plan** permissions must be set to **Allow** on each instance of SQL Server that hosts the databases that you want to back up. + +- The ** Administrator** user role in SCVMM. + +<a name="restore-lib-svr-scvmm"></a> +## Restore the Library Server for SCVMM + +When you restore the library server, make sure that you use the same names for the host and the library shares. For more information, see the following page on the Microsoft website: [Backing Up and Restoring the SCVMM Database](http://go.microsoft.com/fwlink/?linkid=150302) + +<a name="restore-svr-running-scvmm"></a> +## Restore the Server That Is Running SCVMM + +### To restore the server that is running SCVMM + +1. Restore the server that is running SCVMM, and give it the same machine name as the old server. + + For more information, see the following page on the Microsoft website: [Backing Up and Restoring the SCVMM Database](http://go.microsoft.com/fwlink/?linkid=150302). + +2. Make sure that the $machinename of the application-tier server for Team Foundation is a member of the Administrators group on the server that is running SCVMM. + +3. Add or remove any host groups or library shares that were added or removed after the most recent backup. For more information, see the following page on the Microsoft website: [Backing Up and Restoring the SCVMM Database](http://go.microsoft.com/fwlink/?linkid=150302) + +<a name="restore-tfs"></a> +## Restore Team Foundation Server + +If Team Foundation Server has failed, you must restore both the application-tier and the data-tier servers that compose the deployment. These components might be hosted on the same server or on multiple servers. + +### To restore Team Foundation Server + +1. Restore the server or servers that are running Team Foundation Server. + + For more information, see [Restore an application-tier server](restore-application-tier-server.md), [Restore data to the same location](restore-data-same-location.md), [Restore Data to a Different Server or Instance](restore-data-different-instance.md), or [Restore a Single-Server Deployment to New Hardware](tut-single-svr-home.md). + + The machine name, accounts, and software must all be returned to the same state. The machine must be joined and connected to the domain. + + If you restore Team Foundation Server to a new machine, you must update the notification URL for Lab Management to match the URL of the new machine. For information about how to set the **Lab URL** in the Team Foundation Administration Console, see [Configuring Lab Management for SCVMM Environments](../config-lab-scvmm-envs.md). + +2. Make sure that Team Foundation Server is running under a user account that is a member of the Administrators group on the server that is running SCVMM. If Team Foundation Server is running as Network Service, the TFS\_MACHINE$ account should be a member of the Administrators group on the server that is running SCVMM. + +3. Perform the following steps to make sure that Team Foundation Server is running under a user account that is a member of the Administrators group on all Hyper-V hosts. + + 1. Open the Team Foundation Administration Console.  + + 2. On the **Lab Management** tab, click **Configure Host Groups**, and then click **Verify**. + + 3. When you are prompted for a user name and password, type the user name and password of a member of the Administrators group on all the Hyper-V hosts. The service account for Team Foundation Server is automatically configured for you. + + 4. Repeat steps b and c for each team project collection. + +4. In SCVMM, manually delete any virtual machines that were created after the point to which you restored Team Foundation Server. + + These machines will not appear in either Microsoft Test Manager or Microsoft Environment Viewer. You can find them in SCVMM by looking for the team project name in the description field of the virtual machine. + +5. In Microsoft Test Manager, manually delete any virtual machines that were deleted after the point to which you restored Team Foundation Server. + + These machines are no longer in SCVMM. In both Microsoft Test Manager and Microsoft Environment Viewer, the environment will have a status of **Failed**, and the virtual machines will have a status as **Deleted**. If a host was added to a SCVMM host group that was already associated with a team project collection, that host will be available for placement the next time that you deploy an environment. + +6. In Microsoft Test Manager, manually delete any hosts that were removed from SCVMM after the point to which you restored Team Foundation Server. + + Because these hosts can no longer run virtual machines and environments, all environments on these hosts will appear as **Failed** in Microsoft Test Manager and Microsoft Environment Viewer. + +7. Manually reassociate any a host groups that were associated with a team project collection and team project after the point to which you restored Team Foundation Server. + + The virtual machines on this host group will not be associated with the team project. + +8. At the levels of both team project collections and team projects, manually unassociate any host groups that were unassociated after the point to which you restored Team Foundation Server. + + For more information, see [How to: Change the Host Groups for Your Team Project Collections](https://msdn.microsoft.com/en-us/library/dd386364(v=vs.120).aspx). + +9. Reassociate any host groups that were associated with a team project after the point to which you restored Team Foundation Server. + +10. Reassociate any library shares that were associated with a team project after the point to which you restored Team Foundation Server, and reimport all virtual machines and templates that were imported into the team project. + +<a name="restore-hyper-v-hosts"></a> +## Restore the Hyper-V Hosts + +If a host that had virtual environments crashed, they will be in a **Failed** state. + +### To restore a physical host that was running virtual machines + +1. Restore the host from your backup, and connect it to SCVMM. + + For more information, see the following page on the Microsoft website: [Backing Up and Restoring the SCVMM Database](http://go.microsoft.com/fwlink/?linkid=150302). + + If the virtual machines are running again on the host, no additional action is required. Lab Management will update the new status of all running virtual machines to the correct state. If you cannot restore the virtual machines and this host is new, the environments will appear as **Failed** and the virtual machines as **Deleted** in Microsoft Test Manager or in Microsoft Environment Viewer. + +2. Refresh Microsoft Test Manager, manually delete the environments that ran on this host, and then re-create them. + + If you must determine the environments that ran on this host, SCVMM provides a list of which virtual machines ran on which host. + +## See Also + + [Manually back up Team Foundation Server](manually-backup-tfs.md) + + [Back up and restore TFS](back-up-restore-tfs.md) + + [Move a team project collection](../move-project-collection.md) diff --git a/docs/tfs-server/admin/backup/tut-single-svr-home.md b/docs/tfs-server/admin/backup/tut-single-svr-home.md new file mode 100644 index 00000000000..91261324d47 --- /dev/null +++ b/docs/tfs-server/admin/backup/tut-single-svr-home.md @@ -0,0 +1,37 @@ +--- +title: Restore a TFS deployment to new hardware +description: Restore a TFS deployment to new hardware +ms.assetid: 4601dd68-3b9e-4d29-aa71-432566d4e4bd +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Restore a TFS deployment to new hardware + +**TFS 2015** | **TFS 2013** + +If the server that hosts your deployment of Team Foundation Server (TFS) fails, you can use the backups you made of the databases and of SharePoint Foundation to restore the deployment to new server hardware. You need reliable data backups and installation media for TFS, SQL Server, and SharePoint Foundation, including access to all service packs and cumulative updates you applied to your original deployment. + +You must install and configure the software on the same operating system as the original server, and you should ensure that you restore the backups to the same versions, editions, and servicing levels of the software that you backed up. + +>**Note:** +>This tutorial contains fictitious users, servers, and companies as part of the examples that help illustrate the procedures. The example companies, organizations, products, domain names, e-mail addresses, logos, people, places, and events depicted herein are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, places, or events is intended or should be inferred. + + +## Tutorial procedures + +|Title|Description| +|---|---| +| [Prepare the new hardware](tut-single-svr-prep-new-hw.md) |Learn how to choose the right replacement hardware, review the prerequisites for a replacement server, and install the software you'll need in order to restore the deployment. As part of this process, you must choose a replacement server, and then install SQL Server, SharePoint Foundation, and the tools that are required to reconfigure the restored TFS databases.| +| [Restore the databases](tut-single-svr-restore-dbs.md) |Learn how to restore the databases from backups, and to restore the SharePoint farm. As part of this process, you must restore the configuration, collection, and reporting databases, and restore the SharePoint farm from backup.| +| [Install and configure Team Foundation Server](tut-single-svr-install-config-tfs.md) |Learn how to use the Application-Tier Only wizard to install the web services and applications for TFS. As part of this process, you must install Team Foundation Server and the extensions for SharePoint Products, and configure URLs, service accounts, reporting, and analysis resources to complete the data restoration part of the recovery.| +| [Reconnect services and users](tut-single-svr-reconn-svcs-users.md) |Learn how to complete configuration of TFS after its databases have been restored. As part of this process, you will start team project collections, add groups of users to the new server, and clear the data caches to help prevent data errors. Learn how to clear the work item cache on the new server, and learn how users can clear their version control caches on their own computers so that they don't experience data caching problems when connecting to the new server.| + +## Try this next + +> [!div class="nextstepaction"] +> * [Prepare the new hardware](tut-single-svr-prep-new-hw.md) diff --git a/docs/tfs-server/admin/backup/tut-single-svr-install-config-tfs.md b/docs/tfs-server/admin/backup/tut-single-svr-install-config-tfs.md new file mode 100644 index 00000000000..026a21bdb9f --- /dev/null +++ b/docs/tfs-server/admin/backup/tut-single-svr-install-config-tfs.md @@ -0,0 +1,198 @@ +--- +title: nstall and configure Team Foundation Server +description: nstall and configure Team Foundation Server +ms.assetid: ca535d08-9e52-4ef9-9f56-516c3549395f +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Install and configure Team Foundation Server + +**TFS 2015** | **TFS 2013** + +This topic, the third part of the Restore a Single-Server tutorial, +teaches you how to install Team Foundation Server (TFS) using the +Application-Tier Only wizard. You will also learn how to install the +Extensions for SharePoint Products on the new server. Additionally, you +will learn how to configure SharePoint Foundation, reporting, and +analysis services to work with the new server. + +Use this topic to: + +> [!div class="checklist"]    +> * Install Team Foundation Server and the Extensions for SharePoint Products +> * Configure SharePoint Foundation +> * Configure reporting and Analysis Services + + +**Required permissions**: you must be a member of the following groups or have the following +permissions: + +- A member of the **Administrators** security group on the server. + +- A member of the **Team Foundation Administrators** group. + +- Either a member of the **SQL Server System Administrator** security group, or your **SQL Server Perform Back Up and Create Maintenance Plan** permission must be set to **Allow**. + +- A member of the **sysadmin** security group for the databases for Team Foundation. + +- A member of the **Farm Administrators** group. + +<a name ="#InstallTFS"></a> +## Install Team Foundation Server and the Extensions for SharePoint Products + +By restoring the databases that TFS uses, you have already restored the +data tier of the original deployment. Now you must complete the +restoration process by installing the application tier (the application +and services that compose Team Foundation Server) by using the +Application-Tier Only wizard. You must also install the extensions used +by TFS and SharePoint Foundation by running the Extensions for +SharePoint Products wizard, if your original deployment was configured +with SharePoint Foundation. + +To install the application tier and the extensions: + +1. Open the administration console and start the configuration process. + + ![Configure TFS after databases are restored](../_img/ic664999.png) + + If you don't see the administration console for TFS, you haven't + installed the TFS software on the server. To learn how, go to + [Install Team Foundation Server](tut-single-svr-prep-new-hw.md#install-tfs). + +2. Launch the application-tier only wizard. + + ![This uses the restored configuration database](../_img/launch-app-tier-wizard.png) + +3. Specify the name of the SQL Server where you just restored the + databases and choose **List Available Databases** to populate the list. Choose the + configuration database. + + ![The instance that hosts the restored databases](../_img/app-tier-wiz-sql-name.png) + +4. Provide the same service account information as used in the prior + deployment, if possible. + + ![The default choice is Network Service](../_img/app-tier-wiz-svc-acct-name.png) + +5. Complete the wizard. + + ![TFS is configured after success](../_img/app-tier-wiz-complete.png) + +6. In the Configuration Center, choose **Configure + Extensions for SharePoint Products** and complete that wizard + to install the extensions. + +7. Open the administration console, and in the Application Tier pane, + update or refresh the URLs to reflect the new URLs for the + restored server. Even if you have not changed the name or ports used + for the restored server, you should reapply this information. + + ![The new server still uses the old URL info](../_img/refresh-urls.png) + + ![Update the URL information](../_img/refresh-urls2.png) + +8. After finishing the update, verify that the URLS appear correctly. + + ![Team Web Access information is now correct](../_img/refresh-urls3.png) + +9. Reapply the service account for TFS. + + ![Reapply the service account information](../_img/reapply-svc-accts.png) + + +<a name="ConfigureSPT"></a> +## Configure SharePoint Products + +After you install the application tier and the extensions, you must +reconfigure the settings for the SharePoint web applications that your +deployment uses. + +To configure the settings for SharePoint web applications: + +1. Open the administration console for Team Foundation. + +2. In the navigation bar, choose **SharePoint Web + Applications**. + +3. In the **SharePoint Web Applications** list, + highlight the web application used by the original deployment, and + then choose **Change**. + + > **Tip**: + > By default, the web application should appear automatically in the listf web applications. If it does not, choose **Add**, and then add it manually. + + +4. The SharePoint Web Application Settings window opens. In **Web Application URL** and + **Central Administration URL**, review the + settings, and if necessary, specify or change the values to reflect + the URLs on the new server. + +5. When you are satisfied with the settings, choose **OK**. + + For more information about how to configure SharePoint web + applications as part of your deployment, see [Add SharePoint products to your deployment](../add-sharepoint-to-tfs.md). + +<a name="RestoreWarehouse"></a> +## Configure reporting and Analysis Services + +After you have configured SharePoint Foundation, you must redirect Team +Foundation Server to the location of the report server, restart the +warehouse, and manually rebuild the database for Analysis Services, if +your deployment used reporting. + +> **Note**: +> You must complete this procedure even if you restored the TFS\_Warehouse and TFS\_Analysis databases, as the previous section describes. + +To reconfigure reporting and Analysis Services: + +1. In the navigation bar for the administration console, choose **Reporting**. + +2. On the **Reporting** page, choose **Edit**. + +3. In the **Take Offline** dialog box, choose **OK**. + + The **Reporting** dialog box opens. + +4. Select the **Use Reporting** check box. + +5. On the **Warehouse** tab, in **Server**, specify the name of the report server, + and in **Database**, type the name of the + warehouse database. Optionally choose **Test Connection** to verify that the database is valid. + +6. On the **Analysis Services** tab, in the + **Server** list, specify the name of the + server that is running SQL Server Analysis Services. In + **Database**, specify the name of the analysis + services database, and in **Account for accessing + data sources**, specify the username and password of the data + sources account. + +7. On the **Reports** tab, in the **Server** list, specify the name of the report + server, and then choose **Populate URLs**. In **Username** and **Password**, specify the account name and password + (if any) for the data sources account. In **Default Path**, specify the relative path for the + location where reports are stored, and then choose **OK**. + +8. In the administration console, choose **Start Jobs** to restart reporting. + +9. Open a Command Prompt window, and then change directories to + `%ProgramFiles%\\TFS 12.0\\Tools`. + +10. Enter the following command to rebuild the database for Analysis + Services: + + `TFSConfig RebuildWarehouse /AnalysisServices /ReportingDataSourcePassword: Password` + + *Password* is the password for the data sources account for Reporting Services. + +11. Wait until the command is successfully completed. + + +## Try this next + +> [!div class="nextstepaction"] +> * [Reconnect services and users](tut-single-svr-reconn-svcs-users.md) diff --git a/docs/tfs-server/admin/backup/tut-single-svr-prep-new-hw.md b/docs/tfs-server/admin/backup/tut-single-svr-prep-new-hw.md new file mode 100644 index 00000000000..afe3cda945b --- /dev/null +++ b/docs/tfs-server/admin/backup/tut-single-svr-prep-new-hw.md @@ -0,0 +1,172 @@ +--- +title: Prepare the new hardware +description: Prepare the new hardware +ms.assetid: 1fde1282-d853-4230-b06d-584f681ff7bb +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Prepare the new hardware + +**TFS 2015** | **TFS 2013** + +This topic, the first part of the Restore a Single-Server tutorial, teaches you how to install and configure the prerequisites, how to restore the databases and the SharePoint farm, and how to install but not configure Team Foundation Server (TFS) so that you can restore the databases on the new hardware. + + +Use this topic to: + +> [!div class="checklist"]    +> * Choose hardware and name the server +> * Install SQL Server on the new server +> * Install SharePoint Foundation on the new server +> * Install Team Foundation Server + +**Required permissions** +To perform the procedures in this topic, you must be a member of the **Administrators** security group on the server where you want to install the software. + +<a name="choosing-hardware"></a> +## Choose hardware and name the server + +Restoring a deployment that has unexpectedly gone offline due to a hardware failure is always stressful, and usually involves acquiring hardware as quickly as possible. You might be tempted to grab an unused machine and try to use it as the new server. However, for the long-term health of your deployment and to help ensure a successful restoration of your deployment, you should not use any server that has less RAM than the previous machine, and you should make sure that the new server is running the same operating system as the old server. You also must match the service pack level of the previous server as closely as possible. + +In addition, this can be an opportune time to expand the hard drive space or processing power for your deployment, particularly if your previous server was not performing as quickly as you wanted, or if you were running low on hard drive space. Upgrading the numbers or speed of the processors, adding more RAM, or adding more hard drive space should not adversely affect your restoration, and you and your users can benefit from a faster, more powerful server. + +## Name the server + +Your users will experience the least amount of confusion and inconvenience if you give the new server the exact same name as the old one. You will also find it much easier to restore the deployment if the new server has the same name as the old server. Unless you have compelling reasons not to reuse the name, such as underscores in the old server name that interfered with navigation in Team Web Access, use the same name for the new server as the old server. + + +<a name="installing-sql-svr-new-svr"></a> +## Install SQL Server on the new server + +After you acquire a server that meets the requirements mentioned above and give it the same name, you must install the same version and edition of SQL Server on that new hardware. You must also make sure to choose the same collation settings as your previous deployment, or you will not be able to restore the databases you backed up for the old deployment. + +>**Tip:** +>Most installations of SQL Server use the default collation settings. The default collation settings are determined by the Windows system locale on the server where you install SQL Server. + +### To install SQL Server to support Team Foundation Server + +1. Launch the SQL Server Installation Center. + +2. On the **SQL Server Installation Center** page, choose **Installation**, and then choose **New installation or add features to an existing installation**. + +3. On the **Setup Support Rules** page, verify that all rules have passed, and then choose **OK**. + +4. On the **Product Key** page, provide your product key, and then choose **Next**. + +5. On the **License Terms** page, review the license agreement. If you accept the terms, select **I accept the license terms**. Optionally, you can select the check box to send usage data to Microsoft, and then choose **Next**. + +6. On the **Setup Support Files** page, choose **Install**. + +7. On the **Setup Support Rules** page, review the setup information. Correct any failure conditions, and then choose **Next**. + +8. On the **Setup Role** page, choose **SQL Server Feature Installation**, and then choose **Next**. + +9. On the **Feature Selection** page, select the following check boxes, and then choose **Next**: + + - Database Engine Services + - Full-Text Search + - Analysis Services, if reporting was part of the deployment you want to restore + - Reporting Services, if reporting was part of the deployment you want to restore + - Client Tools Connectivity + - Management Tools - Basic + - Management Tools - Complete + + ![Install SQL Server 2008 R2 - Features](../_img/ic562054.png) + +10. On the **Installation Rules** page, review any warnings and correct any failures, and then choose **Next**. + +11. On the **Instance Configuration** page, choose **Default instance**, and then choose **Next**. + +12. On the **Disk Space Requirements** page, review the information to make sure you have sufficient disk space, and then choose **Next**. + +13. On the **Server Configuration** page, choose **Use the same account for all SQL Server services**. In the **Use the same account for all SQL Server services** window, choose or specify **NT AUTHORITY\\NETWORK SERVICE**, and then choose **OK**. + + In the **Startup Type** column, specify **Automatic** for all services that you can edit, and then choose **Next**. + + ![Accounts set to Network Service/Automatic](../_img/ic562055.png) + +14. On the **Database Engine Services** page, on the **Account Provisioning** tab, choose **Windows authentication mode** and then choose **Add Current User** to add your account as an administrator for this instance of SQL Server. Optionally add any other user accounts for users you want to act as database administrators, and then choose **Next**. + +15. On the **Analysis Services Configuration** page, on the **Account Provisioning** tab, choose **Add Current User** to add your account as an administrator for the analysis services database. Optionally add any other user accounts for users you want to act as administrators, and then choose **Next**. + +16. On the **Reporting Services Configuration** page, choose **Install the native mode default configuration**, and then choose **Next**. + +17. On the **Error Reporting** page, choose whether to send information about errors to Microsoft, and then choose **Next**. + +18. On the **Installation Rules** page, review any failures or warnings, and then choose **Next**. + +19. On the **Ready to Install** page, review the list of components to be installed, and if they match the list of features shown in the illustration below, then choose **Install**. If you need to make any changes, choose **Back**. + + ![Install SQL Server 2008 R2 - Ready](../_img/ic562056.png) + + On the **Installation Progress** page, optionally monitor the installation progress of each component. When all components have finished installing, the **Complete** page appears. Review any messages, and then close the page. + +20. After you finish the installation, visit Microsoft Update to apply the same service packs or updates that you applied to the installation on the old server. Do not apply any service packs or updates that were not applied to that server. + +<a name="installing-sharept-new-svr"></a> +## Installing SharePoint Foundation on the new server + +Unlike a new installation of Team Foundation Server, you cannot use the installation wizard for TFS to install SharePoint Foundation for you. If you want to be able to restore the team project portals and other information used in the SharePoint Foundation portion of your deployment, you must first install SharePoint Foundation manually, and then restore the farm. + +## Use SharePoint Tools to install SharePoint Foundation + +You can use the tools and features provided with SharePoint Foundation to install it on the new server. You should choose the same deployment configuration as your previous deployment. For example, if you installed SharePoint Foundation automatically during the installation process for Team Foundation Server in your original deployment, you should choose to install SharePoint Foundation on a single server, but using the installation of SQL Server you have already installed on the new server. You should also run the Microsoft SharePoint Products Preparation Tool prior to installing SharePoint Foundation. + +### To install SharePoint Foundation in a single-server farm configuration + +1. Launch the installation media for SharePoint Foundation. On the SharePoint Foundation Start page, choose **Install SharePoint Foundation**. + +2. On the **Read the Microsoft Software License Terms** page, review the terms, select the **I accept the terms of this agreement** check box, and then choose **Continue**. + +3. On the **Choose the installation you want** page, choose **Server farm**. + +4. On the **Server Type** tab, choose **Complete**. + + If you want to install SharePoint Foundation in a custom location, choose the **Data Location** tab, and then either type the location or choose **Browse** to specify the location. + +5. Choose **Install Now**. + +6. When setup completes, choose **Close**. Do not configure the initial farm. + +## Use Windows PowerShell to install SharePoint Foundation + +While there are a number of ways to install SharePoint Foundation, including the tools provided with SharePoint Foundation, restoring the farm requires Windows PowerShell. You can also use Windows PowerShell to install SharePoint Foundation. For convenience, consider using Windows PowerShell for both installing and restoring SharePoint Foundation on the new server. For more information about Windows PowerShell, see [Getting Started: Windows Server Administration with Windows PowerShell](http://go.microsoft.com/fwlink/?LinkId=236005). + +### To install SharePoint Foundation using Windows PowerShell + +1. Open a Windows PowerShell command prompt. + +2. Input the following command, where *Drive* is the location of the installation media for SharePoint Foundation: +all-SharePoint -SetupExePath "Drive:\SharePoint 2013\Setup\setup.exe" + + This installs SharePoint Foundation using a PID key in a farm deployment, but does not configure it or create any databases. Instead, you will restore the farm and its databases to this installation. + + >**Tip:** + >As an alternative, you can choose to use a configuration XML file with the Install-SharePoint command to install SharePoint Foundation. + + For more information, see [Install SharePoint Foundation by using Windows PowerShell](http://go.microsoft.com/fwlink/?LinkId=236008). + +<a name="install-tfs"></a> +## Install Team Foundation Server + +To restore the databases using the **Scheduled Backups** features, you must install, but not configure, the Team Foundation Server software. + +To install Team Foundation Server binaries and tools: + +1. Launch the installation media for Team Foundation Server. On the **Team Foundation Server Setup** page, choose **Install**. + +2. When the installation completes, the **Team Foundation Server Configuration Center** opens. Choose **Cancel**. + + ![Close the configuration center when it appears](../_img/ic654274.png) + + The administration console opens automatically in an unconfigured state. This is expected. + +## Try this next + +> [!div class="nextstepaction"] +> * [Restore the databases](tut-single-svr-restore-dbs.md) diff --git a/docs/tfs-server/admin/backup/tut-single-svr-reconn-svcs-users.md b/docs/tfs-server/admin/backup/tut-single-svr-reconn-svcs-users.md new file mode 100644 index 00000000000..84531c2c248 --- /dev/null +++ b/docs/tfs-server/admin/backup/tut-single-svr-reconn-svcs-users.md @@ -0,0 +1,97 @@ +--- +title: Reconnect services and users +description: Reconnect services and users +ms.assetid: 088544b7-6a4f-4c7b-9e83-9b8520d26afb +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Reconnect services and users + +**TFS 2015** | **TFS 2013** + +This topic, the fourth part of the Restore a Single-Server tutorial, teaches you how to start team project collections and verify user groups on the new server. You will also learn how to clear the data caches on the new server, and how to help ensure that your users do not experience data caching problems when they connect to the new server. + +Use this topic to: + +> [!div class="checklist"]    +> * Start team project collections and verify permissions +> * Refresh the version control cache on client computers and reconnect to TFS + + +**Required permissions** + +To invoke the **StampWorkitemCache** web method, you must be a member of the **Administrators** security group on the server. + +To use the **tf workspaces** command on the client computer, your **Read** permission must be set to **Allow**. + +<a name="start-team-project-colls"></a> +## Start team project collections and verify permissions + +After you have completed restoring the data and software on the new server, start the team project collections, and then make sure that all users, groups, and service accounts for your deployment are configured with the permissions that they require to perform tasks and function correctly. + +You cannot automatically migrate all permissions. For example, administrators for Team Foundation must be members of the local **Administrators** group on the server so that they can open the administration console, and you must manually add them to that group. + +To start a team project collection: + +1. Open the administration console, and in Team Project Collections, start the default collection. + + ![Collections remain offline until started](../_img/ic664996.png) + +2. Repeat this action for any other team project collections in the deployment. + +To verify permissions: + +- Log on to the server and make sure that users, groups, and service accounts are configured with the permissions that they need to operate. + + For more information, see [Add users to team projects](../../../accounts/add-users.md), [Set administrator permissions for team project collections](../../add-administrator-tfs.md), [Set administrator permissions for Team Foundation Server](../../add-administrator-tfs.md), and [Service accounts and dependencies in Team Foundation Server](../service-accounts-dependencies-tfs.md). + + +## Refresh the work item cache + +>**Note:** +>This procedure is optional. You should perform it only if you receive errors with work item tracking. + +To update the cache for tracking work items, you invoke the **StampWorkitemCache** web method. This method forces client computers to update the cache the next time that they connect to the application-tier server. This method also synchronizes the workspaces that are defined on the client computers. + +To refresh the cache for tracking work items on client computers: + +1. On the new server, open Internet Explorer. + +2. In the Address bar, enter the following address to connect to the **ClientService** web service: + + **http://** *PublicURL:8080/VirtualDirectory* **/WorkItemTracking/v3.0/ClientService.asmx** + + >**Note:** + >Even if you are logged on with administrative credentials, you might need to start Internet Explorer as an administrator, and you might be prompted for your credentials. + +3. Choose **StampWorkitemCache**, and then choose **Invoke**. + + >**Note:** + >The StampWorkitemCache method returns no data. + +<a name="refresh-vc-cache-reconn-tfs"></a> +## Refresh the version control cache on client computers and reconnect to Team Foundation Server + +To prevent workspace errors from occurring during version control or build operations in Team Foundation, you have to update the data cache on client computers. + +To refresh the version control cache, each user must run the **tf workspaces** command on any computer that uses version control and that connects to the restored server. + +To refresh the version control cache on client computers: + +1. On the client computer, open a Command Prompt window with administrative permissions, and change directories to *Drive*:\\Program Files (x86)\\Microsoft Visual Studio 12.0\\Common7\\IDE. + +2. At the command prompt, enter the following command, including the URL of the collection, which includes the server name and the port number of the new server: + + **tf workspaces /collection:http://** *ServerName:Port/VirtualDirectoryName/CollectionName* + + For example, to refresh the version control cache for a project that is a member of the DefaultCollection collection, which is hosted in the FabrikamPrime deployment of Team Foundation Server, type the following string: + + **tf workspaces /collection:http://FabrikamPrime:8080/tfs/DefaultCollection** + + For more information, see [Workspaces Command](../../../tfvc/workspace-command.md). + diff --git a/docs/tfs-server/admin/backup/tut-single-svr-restore-dbs.md b/docs/tfs-server/admin/backup/tut-single-svr-restore-dbs.md new file mode 100644 index 00000000000..967729e6b35 --- /dev/null +++ b/docs/tfs-server/admin/backup/tut-single-svr-restore-dbs.md @@ -0,0 +1,119 @@ +--- +title: Restore the databases +description: Restore the databases +ms.assetid: c00bb8f7-bdb9-49c2-a291-79aab20d2701 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Restore the databases + +**TFS 2015** | **TFS 2013** + +This topic, the second part of the Restore a Single-Server tutorial, teaches you how to use the backups you made of the original server to restore the databases for Team Foundation Server (TFS) and the SharePoint farm on the new server. + +You can use the backups you made of the original deployment to restore the data from that deployment to the new server. When restoring the data, be sure to restore all databases and the SharePoint Farm to the same point in time. If you followed the guidance in [Create a backup schedule and plan](config-backup-sched-plan.md), you used the **Scheduled Backups** feature to create your backups. You will use these backups to restore your data. + +If you manually configured your backups, you cannot use the Restore wizard in Scheduled Backups to restore those databases. You must manually restore them using the software you used to back them up. + +Use this topic to: + +> [!div class="checklist"]    +> * Restore Team Foundation Server databases +> * Restore the SharePoint farm + +**Required permissions** +To perform these procedures, you must be a member of the following groups or have the following permissions: +- A member of the **Administrators** security group on the server. +- Either a member of the **SQL Server System Administrator** security group, or your **SQL Server Perform Back Up and Create Maintenance Plan** permission must be set to **Allow**. +- A member of the **sysadmin** security group for the databases for Team Foundation. +- A member of the **Farm Administrators** group. + +<a name="restore-tfs-dbs"></a> +## Restore Team Foundation Server databases + +Installing and configuring software isn't sufficient to recover a deployment. You must restore the data before your users will be able to get back to work. There’s a wizard to help you do this.. + +### To restore databases + +1. To start the Restore wizard, open the administration console for TFS and navigate to **Scheduled Backups**. + + ![Start the Restore wizard](../_img/ic654273.png) + +2. Specify the path to the backup set and choose the set you want to use for restoration. + + ![Choose the network path, then the restore set](../_img/ic664997.png) + +3. Complete the wizard and restore the databases. + + ![The databases are restored to the new server](../_img/ic664998.png) + +In the example deployment, use the Restore wizard to restore the following databases: + +- TFS\_Warehouse +- TFS\_DefaultCollection + + This is the default name of the collection database. If you customized the name, make sure to use that name. +- TFS\_Configuration +- ReportServer +- ReportServerTempDB +- WSS\_Config +- WSS\_AdminContent +- WSS\_Content + +The Restore wizard also restores the encryption key for SQL Server Reporting Services as part of its operation. You can choose to restore that key manually, but it should not be necessary. + +<a name="restore-sharept-farm"></a> +## Restore the SharePoint farm + +Although the Restore wizard restored the SharePoint databases used by your deployment, it cannot restore the farm. You must use Windows PowerShell with the Restore-SPFarm command to restore the backup you made of the SharePoint Farm. In some cases, you can choose to use the Central Administration website to restore the farm instead of Restore-SPFarm, but the PowerShell command is the preferred method for restoring a farm. + +To restore a farm, either you must be logged in with an account that is a member of the Farm Administrators group, or you must provide the credentials for an account that is a member of that group when prompted to do so. + +### To restore the farm for SharePoint Foundation using Restore-SPFarm + +1. Open Windows PowerShell or SharePoint Management Shell. + +2. At the Windows PowerShell command prompt, enter the following command, where *UNCPath* is the fully-qualified UNC path of the directory where the farm backup is located: + + `Restore-SPFarm –Directory UNCPath –RestoreMethod Overwrite` + + This command will restore the farm using the most recent backup available. If you want to use a different backup, you must specify which backup to restore by using the –BackupID parameter with the GUID of the specific backup you want to use. + +3. At the Windows PowerShell command prompt, enter the following command, where *ServiceApplicationID* is the GUID of the restored farm: + + `Start-SPServiceInstance –Identity ServiceApplicationID` + + >**Tip:** + >If you do not know the GUID, you can use the **Get-SPServiceInstance** command to list the service instance GUIDs for all SharePoint applications on the server. + +4. For more information about restoring a farm, see [Restore a farm (SharePoint Foundation)](http://go.microsoft.com/fwlink/?LinkId=236093) and [Restore-SPFarm](http://go.microsoft.com/fwlink/?LinkId=236095). + +### To restore the farm using SharePoint Central Administration + +1. Open SharePoint Central Administration, and on the **Home** page, in the Backup and Restore section, choose **Restore from a backup**. + + The Restore Wizard opens. + +2. On the **Restore from Backup – Step 1 of 3** page, choose the farm backup job that you want to restore, and then choose **Next**. + +3. On the **Restore from Backup – Step 2 of 3** page, select the check box next to the farm option, and then choose **Next**. + +4. On the **Restore from Backup – Step 3 of 3** page, in the **Restore Component** section, make sure that **Farm** appears in the **Restore the following component** list. In the **Restore Only Configuration Settings** section, choose **Restore content and configuration settings**. In the **Restore Options** section, under **Type of Restore**, choose **Same configuration**. When a dialog box appears asking you to confirm your choices, choose **OK**, and then choose **Start Restore**. + +5. Monitor the general status of the recovery as it appears in the **Readiness** section of the **Backup and Restore Job Status** page. The status automatically updates every 30 seconds. You can also choose to manually update the status by choosing **Refresh**. + +6. When restoration is complete, return to the **Home** page in Central Administration. In **Application Management**, choose **Manage services on server**. + +7. On the **Services on Server** page, find the service applications for the restored farm, and in the **Actions** column, choose **Start** for each of those service applications. + +8. For more information about restoring a farm, see [Restore a farm (SharePoint Foundation)](http://go.microsoft.com/fwlink/?LinkId=236093). + +## Try this next + +> [!div class="nextstepaction"] +> * [Install and configure Team Foundation Server](tut-single-svr-install-config-tfs.md) diff --git a/docs/tfs-server/admin/change-caching-app-tier.md b/docs/tfs-server/admin/change-caching-app-tier.md new file mode 100644 index 00000000000..fb3e7cb6d68 --- /dev/null +++ b/docs/tfs-server/admin/change-caching-app-tier.md @@ -0,0 +1,133 @@ +--- +title: Change cache settings for an application-tier server +description: Change cache settings for an application-tier server +ms.assetid: c9674fd0-badf-4820-8e7f-6bbea6dd1b2d +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Change cache settings for an application-tier server + +**TFS 2015** | **TFS 2013** + +You can help increase or balance performance in your deployment of Team Foundation Server (TFS) by changing the settings of the cache for files that are under version control on the application-tier server. By default, this cache is enabled so that users can download files more quickly from the cache instead of directly from the database. As an administrator, you can change the settings of this cache any time after installation. + +You can change the following settings: +- [Specify a different cache root folder.](#specify-diff-cache-root) +- [Change the limit at which old files are removed from the cache.](#change-limit-old-files) + +You can perform these tasks by editing the web.config file for version control, which is located in the installation directory on the application-tier server. + +> [!NOTE] +> By default, the installation directory for the application tier is *%programfiles%\*TFS 12.0\Application Tier\Web Services. + +**Required Permissions** +To perform these procedures, you must be a member of the **Administrators** security group on the application-tier server for Team Foundation. + +For more information, see the [Microsoft website](http://go.microsoft.com/fwlink/?LinkId=111235). + +<a name="specify-diff-cache-root"></a> +## To specify a different cache root folder + +1. On the application-tier server, create a cache folder. + + You can create the folder on a local disk, in the UNC path, or on a mounted drive. For example, you might create the following folder: + + *d:\\temp\\cacheroot* + + >**Security Note:** + >The cache folder stores sensitive information that is not encrypted. Therefore, you should make sure that only the service account of the application tier (*TFSService*) has **Modify** permissions to this folder. + +2. Open the shortcut menu for the folder, and then choose **Properties**. + + The **Properties** dialog box for the folder opens. + +3. On the **Security** tab, choose **Edit**. + + The **Permissions** dialog box opens. + +4. Choose **Add**. + + The **Select Users, Computers, or Groups** dialog box opens. + +5. Add the local group **TFS\_APPTIER\_SERVICE\_WPG**, and then choose **OK**. + +6. Select the **Modify** check box, clear all other check boxes, and then choose **OK**. + +7. In Windows Explorer (or File Explorer), browse to *%programfiles%\\*TFS 2013\\Application Tier\\Web Services. + +8. Open the web.config file in a text or XML editor, and then locate the `\<appSettings\>` section. + +9. Add a line to the `appSettings` section to point to the folder that you just created: + + <add key="dataDirectory" value="NewCacheRootFolderLocation" /> + + For example, you would add the following line if you created a cache root folder that is named *cacheroot* in the temp directory of a hard drive, as in the earlier example: + + <add key="dataDirectory" value="d:\temp\cacheroot" /> + +10. Save and close the web.config file. + + > [!NOTE] + > To maximize performance, copy the files from the old cache folder to the new cache folder. + +11. Open a Command Prompt window, type **iisreset**, and then press ENTER. + +12. Delete the old cache root folder. + + > [!NOTE] + > By default, the cache root folder is located at *%programfiles%*\TFS 12.0\Version Control Proxy\Web Services\VersionControlProxy\Data. + + +## Changing limits for removing files from the cache + +You can change the maximum limit on the amount of storage space that the application-tier server can use for caching files. When this limit is reached, a cleanup routine makes room for newly requested files by deleting those files that have not been accessed in the longest time. + +<a name="change-limit-old-files"></a> +### To change the limit at which old files are removed from the cache + +1. On the application-tier server, open Windows Explorer (or File Explorer), and browse to *\\%programfiles%\\*TFS 12.0\\Application Tier\\Web Services. + +2. Open the web.config file in a text or XML editor, and then locate the `\<appSettings\>` element. + +3. Add one of the following elements: + + - To specify a percentage of available disk space to fill before old files are removed, add the `PercentageBasedPolicy` element. You must specify a whole number as the value of this element. + + For example, the following line specifies that the cache should fill up to 60% capacity of available disk space before old files are removed: + + <add key="PercentageBasedPolicy" value="60" /> + + - To specify a fixed size in MB for the cache to reach before old files are removed, add the `FixedSizeBasedPolicy` element. You must specify a whole number as the value of this element. + + For example, the following line specifies that the cache should reach 500 MB before old files are removed: + + <add key="FixedSizeBasedPolicy" value="500" /> + + > [!NOTE] + > If both the `FixedSizeBasedPolicy` and `PercentageBasedPolicy` elements are specified, the value of the `FixedSizeBasedPolicy` element is used, and the value of the `PercentageBasedPolicy` element is ignored. + +4. Save and close the web.config file. + +5. Open a Command Prompt window, type **iisreset**, and then press ENTER. + +### To change the amount of cache to free when removing old files + +1. On the application-tier server, open Windows Explorer (or File Explorer), and browse to *%programfiles%\\*TFS 12.0\\Application Tier\\Web Services\\. + +2. Open the web.config file in a text or XML editor, locate the `\<appSettings\>` element, and then add the `CacheDeletionPercent` element. + + For example, the following line specifies to free 50% of the cache when removing old files: + + <add key="CacheDeletionPercent" value="50" /> + +3. Save and close the web.config file. + +4. Open a Command Prompt window, type **iisreset**, and then press ENTER. + +## See Also + + [Service accounts and dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md) \ No newline at end of file diff --git a/docs/tfs-server/admin/change-deployment.md b/docs/tfs-server/admin/change-deployment.md new file mode 100644 index 00000000000..1bcbdf96754 --- /dev/null +++ b/docs/tfs-server/admin/change-deployment.md @@ -0,0 +1,228 @@ +--- +title: Change your deployment configuration for Team Foundation Server +description: Change your deployment configuration for Team Foundation Server +ms.assetid: 9dfd7be8-b40e-401f-82fc-e3c3d8fdbd87 +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Change your deployment configuration for Team Foundation Server + +**TFS 2015** > **TFS 2013** + +After you have configured Visual Studio Team Foundation Server (TFS) and +Microsoft Project Server to support data synchronization, you might need +to perform additional administrative tasks when you change your +deployment. For example, you might need to remove, re-register, or +re-map a component before or after you move or delete a team project, a +team project collection, or an application-tier server. Before you +change your deployment or perform maintenance operations, you should +consider the impact that these operations have on the synchronization +process. + +Review the following notes and resources before you change a deployment +where you have integrated TFS and Project Server. + +**In this topic:** + +- [Delete components](#deleting) + +- [Move or split a project collection](#tpc) + +- [Move Team Foundation Server to a new machine or environment](#tfs) + +- [Upgrade from Project Server 2007 to Project Server 2010](#upgrading) + +<a name="deleting"></a> +## Delete components + +Whenever you delete a mapped component, you should unmap it and review +the following guidelines: + +- **Delete an enterprise project plan or a team + project**. Before you delete a mapped project plan or a mapped + team project, you must first unmap all project plans that are mapped + to the team project. For more information, see [Manage the + association of enterprise projects to team + projects](https://msdn.microsoft.com/en-us/library/gg412651(v=vs.120).aspx). + +- **Delete an instance of Project Web Access or + Project Web App (PWA)**. Before you delete an instance of PWA, + you must first remove all associations of team project collections + that are mapped to the instance and then unregister it. For more + information, see [Remove a component from participating in + data + synchronization](https://msdn.microsoft.com/en-us/library/gg412644(v=vs.120).aspx) + and [Remove an Instance of PWA from Participating in + Synchronization](https://msdn.microsoft.com/en-us/library/gg412644(v=vs.120).aspx#removepwa). + +- **Delete a team project collection**. Before + you delete a mapped collection, you should unmap it by following the + procedure in [Remove a component from participating in data + synchronization](https://msdn.microsoft.com/en-us/library/gg412644(v=vs.120).aspx). + + > [!NOTE] + > If you delete not only a mapped project collection but also all + > instances of PWA that were mapped to it, you will remove all mappings of + > work items that have been synchronized. However, the instance of PWA + > that is registered to Team Foundation Server remains registered. + + +<a name="tpc"></a> +## Move or split a project collection + +To move a mapped collection to another instance of TFS and continue to +synchronize data on the new application-tier server, you must perform +several steps, based on the following choices: + +- All collections move to a different instance of TFS but remain + mapped to the same instance of PWA. A recommended practice is to + move or split all collections that are mapped to the same instance + of PWA at the same time. + +- Some collections move to a different instance of TFS, but some + collections remain with the same instance. In this case, you must + unmap the collections that are split and remap them to the same or + to a different instance of PWA that will then be registered with the + second instance of TFS. An instance of PWA can be registered to only + one instance of TFS. + +To move all mapped collections to a different instance of TFS: + + 1. Move or split the collection. + + For more information, see [Manage team project collections](manage-team-project-collections.md). + + 2. Grant required permissions to the service account for the second + instance of Team Foundation Server. + + For more information, see [Assign permissions to support + TFS-Project Server + integration](https://msdn.microsoft.com/en-us/library/gg412653(v=vs.120).aspx). + + 3. Add the **Administer Project Server + integration** permission to those accounts that will run the + ```TfsAdmin ProjectServer``` command-line tool for the second project collection. + + 4. Add the accounts of users who will configure and register instances + of PWA to the **Team Foundation + Administrators** group for the second project collection. + + 5. Register the instance of PWA with the second application-tier server + by using the **/RegisterPWA** and ```/force``` command options. + + 6. Wait until the synchronization engine runs through one cycle of + updates and updates the instance of PWA. + + 7. Unregister the instance of PWA from the first application-tier + server by using the **/UnRegisterPWA** command option. + +To move some collections to a different instance of TFS and a different instance of PWA: + + 1. Use the **/UnmapPwaFromCollection** command option with the + **/force** switch to unmap each collection that you are moving. + + > [!WARNING] + > By using the **/force** switch, you break all associations between + > enterprise project plans and team projects that are defined for + > the collection. + + 2. Move or split the collection. + + For more information, see [Manage team project collections](manage-team-project-collections.md). + + 3. Assign all required permissions. + + For more information, see [Assign permissions to support + TFS-Project Server + integration](https://msdn.microsoft.com/en-us/library/gg412653(v=vs.120).aspx). + + 4. Use the **/RegisterPWA** command option to register the second + instance of PWA with the second application-tier server. + + 5. Use the **/MapPwaToCollection** command option to map each + collection that you moved to the second instance of PWA. + + 6. Use the **/MapPlapToTeamProject** command option to map each plan to + the team project that was moved to a different collection. + +For more information, see the following topics: + +- [Move or clone Team Foundation Server (hardware move)](move-clone-hardware.md) + + +- [Move Team Foundation Server from one environment to another](move-across-domains.md) + + +- [Register an instance of PWA to TFS](https://msdn.microsoft.com/en-us/library/gg412639(v=vs.120).aspx) + + +- [Map a team project collection to an instance of PWA](https://msdn.microsoft.com/en-us/library/gg412654(v=vs.120).aspx) + + +- [Manage mappings between an enterprise project and a team + project](https://msdn.microsoft.com/en-us/library/gg412638(v=vs.120).aspx) + + +<a name="tfs"></a> +## Move a Team Foundation Server to a new machine or environment + +You must re-register each instance of PWA that is registered with the +current machine. + +To move an instance of Team Foundation Server to which an instance of PWA is mapped: + + 1. Move the instance of Team Foundation Server. + + For more information, see [Move or clone Team Foundation Server (hardware move)](move-clone-hardware.md). + + 2. Assign all required permissions. + + For more information, see [Assign permissions to support + TFS-Project Server + integration](https://msdn.microsoft.com/en-us/library/gg412653(v=vs.120).aspx). + + 3. Use the **/RegisterPWA** command option to register the instance of + PWA with the second application-tier server. + + 4. Wait until the synchronization engine runs through one cycle of + updates and updates the instance of PWA. + + 5. Use the **/UnRegisterPWA** command option to unregister the instance + of PWA from the first application-tier server. + +> [!NOTE] +> You must specify the **/force** switch when you move the project +> collection to a different instance of Team Foundation Server. If the +> instance identifier has not changed, you do not have to specify the +> **/force** switch. + +<a name="upgrading"></a> +## Upgrade from Project Server 2007 to Project Server 2010 + +If you have an instance of Project Web Access that is registered to TFS +and the synchronization process is running for a collection, you must +perform the following procedures before you upgrade the instance from +Project Server 2007 to Project Server 2010: + + 1. Perform the steps on the following page of the Microsoft website: + [Database-attach full upgrade to Project Server + 2010](http://go.microsoft.com/fwlink/?LinkId=211859) + + 2. To enable the synchronization after the upgrade, open a Command + Prompt window where either Visual Studio or Team Explorer is + installed and enter: + + ```cd %programfiles(x86)%%\Microsoft Visual Studio 12.0\Common7\IDE``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles**. + + 3. Enter the following command: + + ```TfsAdmin ProjectServer /RegisterPwa /tfs:TfsURL /previousPWA:URLFor2007 /PWA:URLFor2010``` + + For more information, see [Register an instance of PWA to + TFS](https://msdn.microsoft.com/en-us/library/gg412639(v=vs.120).aspx). diff --git a/docs/tfs-server/admin/change-permission-levels.md b/docs/tfs-server/admin/change-permission-levels.md new file mode 100644 index 00000000000..5ea23941bb2 --- /dev/null +++ b/docs/tfs-server/admin/change-permission-levels.md @@ -0,0 +1,143 @@ +--- +title: Change permission levels in Team Foundation Server +description: Change permission levels in Team Foundation Server +ms.assetid: c8f12906-5965-4e24-b0fa-748c64524572 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Change permission levels in TFS + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +As roles and responsibilities change in your team, you might need to +change the permission levels for individual team members, or for the +team as a whole. Permissions are different than access levels. If you're +just trying to give someone access to a product backlog or the provide +feedback features, you'll want to [change access levels](../../security/change-access-levels.md), not +permissions. + +## A few things to know about permissions in TFS + +There's a lot to learn about permissions, but here's some things you +should understand before you change any permissions in TFS: + +- Permissions **allow** or + **deny** users the ability to perform specific + tasks, and are usually inherited from group membership. + +- A permission that is **not set** implicitly + denies users the ability to perform tasks that require that + permission, but allows membership in a group that does have that + permission set to take precedence, also known as + **inherited allow** and + **inherited deny**. + +- For almost all permissions, **deny** trumps + **allow**, so if a user belongs to two + groups, and one of them has a specific permission set to + **deny**, that user will not be able to perform + tasks that require that permission even if they belong to a group + that has that permission set to **allow**. + +- Changing a permission for a group changes that permission for all + users who are granted that permission through their membership in + that group. In other words, depending on the size of the group, you + might affect the ability of hundreds of users to do their jobs by + changing just one permission. So make sure you understand the impact + before you make a change. Two useful tricks for understanding the + effects of change: The **member of** tab + shows the groups that an individual user or group belongs to. You + can also hover over an inherited permission, and a + **why?** icon will appear. If you choose it, a + dialog box will open with more information. + + +## View your own permissions + +The rest of the procedures in this topic require you to be a project +administrator, so first double-check that you are one. + +1. Open the administrative context for your team project. + +2. In the **security** tab, under users, find + your own name, and look at what groups you belong to and what + permissions you have. + +3. If you aren't a project administrator, you need to be. Find someone + who is, and have them add you: + + ![You can add more than one person at a time](_img/add-proj-admin-dlg.png) + + +## Change permissions for the entire team + +When a team is created, the team group is added to the +**Contributors** group for the team project, by +default. So when you add a team member, that person is also added to the +**Contributors** group by virtue of being a +member of your team. If you want team members to have different +permissions, you can change the permissions for the team group. This +will not change the permissions for all users of the +**Contributors** group, but just for members of that +one team. + +1. Now that you're a project administrator, go to the security tab and + choose the team group whose permissions you want to change. + + ![The screen shows permissions granted to the team](_img/team-permissions.png) + +2. Look at the permissions that the team group has by default. You'll + see that a lot of them are set to **inherited + allow**. That's because the team group is a member of the + **Contributors** group for the team project. To + give the team group a different set of permissions than that group, + choose a permission from the list and change it. For example, let's + say you don't want anyone on this team to have permission to delete + test runs, so change that permission from + **inherited allow** to + **deny**. + + ![The team inherits permissions from Contributors](_img/team-inherits-from-contribs.png) + + > [!TIP] + > Tip: It's a good idea to test changes in permissions immediately after you make them. + +3. Teams can also have specific permissions for the areas and + iterations that they work in. Because areas and iterations affect an + entire project, and not just the individual team, the default value + is **not set**. Usually, project + administrators don???t change this, but you can set + them specifically. To do this, you must first navigate to areas or + iterations and open the security context. + + ![Each iteration has its own security](_img/each-iteration-permissions.png) + +4. Add the team group to the list of groups if it doesn't already + appear there (by default, it won't until someone adds it), and then + set the permissions for the group. + + ![Changes to iterations affect the whole team](_img/iteration-changes-whole-team.png) + + +## Change permissions for individual users + +Alternatively, you might want to manage the permissions of individual +team members. This takes a little more work and is more time-consuming +to manage, but allows you a finer degree of control over who can do +what. + +1. Go to the security tab and change views so that you're looking at + users, not groups. + +2. Choose the user whose permissions you want to change and change it. + For example, let's say you want a particular user to have permission + to delete the team project. Set that permission to + **allow**. + + ![Explicit permissions override inherited ones](_img/explicit-overrides-implicit.png) + + That **allow** will override the **not set** that exists for the team. diff --git a/docs/tfs-server/admin/change-service-account-or-password-sql-reporting.md b/docs/tfs-server/admin/change-service-account-or-password-sql-reporting.md new file mode 100644 index 00000000000..4f93774ce43 --- /dev/null +++ b/docs/tfs-server/admin/change-service-account-or-password-sql-reporting.md @@ -0,0 +1,218 @@ +--- +title: Change the service account or password for SQL Server Reporting Services for TFS +description: Change the service account or password for SQL Server Reporting Services for Team Foundation Server +ms.assetid: 658da0e5-0390-4016-bacf-4ad9003777a6 +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Change the service account or password for SQL Server Reporting Services for Team Foundation Server + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can help improve the security of Team Foundation Server (TFS) by +changing the service account that it uses for the data sources for SQL +Server Reporting Services or by changing the password that is used for +that account. TFS acts in the security context of a service account +when it retrieves project data from the data sources in SQL +Server Reporting Services. TFS documentation refers to this service +account by the placeholder *TFSReports</span>. +The actual account name depends on your installation. You might need to +change the password of that account, or designate a different account. +For example, if the password of the underlying account expires, and you +assign a new password, you must change the password of the +*TFSReports</span> account in TFS to match. + +The **TFSConfig** utility does not create a new account to use as the +data sources account, nor does the utility change the account password. +Instead, the utility updates TFS to use a different set of credentials. + +You change the password or account used as the *FSReports* account by using the **TFSConfig** command-line utility with the **Accounts** option. + +> [!IMPORTANT] +> The **TFSConfig** utility changes only those services that run under the old account. + +You can use the same utility to assign a different account to be the +*TFSReports</span> account, but you might need to +perform one or more of the following additional actions: + +- Before you assign an account to use as the + *TFSReports* account, you must verify that it + is a member of a workgroup or domain that is trusted by every + computer in the deployment of Team Foundation. + +- You must manually grant the account that you will use as the + *TFSReports* account the + **Allow log on locally** permission. The TFSConfig + utility does not grant this permission when it assigns the account. + +- Optionally, after you use TFSConfig to specify an account to use as + the *TFSReports* account, you can + revoke its **Log on as a service** + permission, which TFSConfig automatically grants to the + *TFSReports* account. + *TFSReports* does not need this permission, + but the *TFSService* account does. + Therefore, you should not remove this permission if you use the same + domain or workgroup account for both service accounts. + + For more information about the **Log on as a + service** permission, see this page on the Microsoft website: + [Add the Log on as a service right to an account](http://go.microsoft.com/fwlink/?LinkId=62101). For more + information about the **Allow log on locally** permission, see this page on the Microsoft website: + [Allow log on locally](http://go.microsoft.com/fwlink/?LinkId=103673). + +For more information about required service accounts, see the topic +[Service accounts and dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md) and +also the topic [Accounts required for installation of Team Foundation Server](service-accounts-dependencies-tfs.md) in +the installation guide for Team Foundation. + +**Requirements** + +To perform these procedures, you must be a member of the +**Administrators** group on the server where TFSConfig +is installed. You must also be a member of the +**sysadmin** group on the server that hosts the +configuration database. For more information about permissions, see +[Permission reference for Team Foundation +Server](../../security/permissions.md). + +In addition to these permissions, you might need to address the +following requirements: + +- To follow a command-line procedure, you might need to open an + elevated Command Prompt. + +- To access Report Manager, reports, or websites for SQL + Server Reporting Services, you might need to add these sites to the + list of trusted sites in Internet Explorer or start Internet + Explorer as an administrator. + + +## Change the Reporting Services account name or password + +To change the password of the *TFSReports* +account or to assign a different account, you must log on to a server +that hosts the application services for Team Foundation and use the +**TfsConfig Accounts** utility. + +> [!NOTE] +> Depending on your deployment configuration, you might need to restart +> Internet Information Services (IIS) after you complete this procedure +> for the changes to take effect. + +To change the password using the TFSConfig utility: + +1. Open a Command Prompt window and change to the directory that + contains the **TFSConfig** utility. + + By default, the utility is located in + *Drive*:\\Program Files\\TFS 12.0\\Tools. + +2. At the command line, type **TFSConfig Accounts /UpdatePassword + /accountType:ReportingDatasource /account:** + *AccountName* **/password:** *newPassword*, and then press ENTER. + + Replace *AccountName* with the name of the current *TFSReports* account. + Replace *newPassword* with the new password of the account. + +To use the administration console to change the password: + +1. Open the administration console for Team Foundation on the server + that hosts the application tier. + + For more information, see [Configure and manage TFS resources](config-tfs-resources.md). + +2. In the console, expand the server name and choose + **Application Tier**. + +3. In the Application Tier pane, navigate to + **Reporting Services Summary** choose + **Update Account Password**. + + The **Update Account Password** window opens. + + > If you used a system account as the service account, you will see an + > error message when you choose **Update Account + > Password**. You do not need to change the password of that account. + > System accounts do not have user-managed passwords. + +4. Type the new password in **Password**, and + then choose **OK**. + + The **Change Report Reader Account** + window opens. + +5. Wait for all the status messages to complete in + **Status**, and then choose + **Close**. + + > [!NOTE] + > This process might take a few minutes. + +To assign a new reporting services service account to all Team Foundation Server services using the TFSConfig utility: + +1. Open a Command Prompt window and change to the directory that + contains the **TFSConfig** utility. + + By default, the utility is located in + *Drive*:\\Program Files\\Microsoft Team + Foundation Server 12.0\\Tools. + +2. At the command line, type **TFSConfig Accounts /change + /accountType:ReportingDatasource /account:** + *NewAccountName* **/password:** + *newPassword*, and then press ENTER. + + Replace *NewAccountName* with the name + of the new TFSReports account. Replace + *newPassword* with the password of + the account. + +To use the administration console to change the account: + +1. Open the administration console for Team Foundation on the server + that hosts the application tier. + +2. In the console, expand the server name and choose + **Application Tier**. + +3. In the Application Tier pane, navigate to + **Reporting Services Summary**, and then choose + **Change Account**. + + The **Change Report Reader Account** + window opens. + +4. Choose one of the following steps: + + 1. If you want to use a system account, choose + **Use a system account**, and then choose a + system account from the drop-down list. + + > [!NOTE] + > System accounts do not have user-managed passwords. If you choose to use + > a system account as TFSReports, you should not type a password in the + > password field. + + 2. If you want to use a domain or workgroup account, choose + **Use a user account**, type the name of the + account in **Account Name**, and then + type the password for that account in + **Password**. + +5. Choose **OK**. + + The **Change Report Reader Account** + window opens. + +6. Wait for all the status messages to complete in + **Status**, and then choose + **Close**. + + > [!NOTE] + > This process might take a few minutes. diff --git a/docs/tfs-server/admin/change-service-account-password.md b/docs/tfs-server/admin/change-service-account-password.md new file mode 100644 index 00000000000..e95a558ca51 --- /dev/null +++ b/docs/tfs-server/admin/change-service-account-password.md @@ -0,0 +1,134 @@ +--- +title: Change the service account or password for Team Foundation Server +description: Change the service account or password for Team Foundation Server +ms.assetid: 644edcbc-983e-4f86-a832-4461e635bec6 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Change the service account or password for Team Foundation Server + +**TFS 2015** | **TFS 2013** + +You can help improve the security of Team Foundation Server (TFS) by changing its service account or the password used for that account. TFS runs services such as its Web services and the Team Foundation Background Job Agent in the context of a service account. + +For simplicity, the TFS documentation refers to this account as TFSService, although that is not the actual name of the account unless you specifically create an account with that name. TFS stores a record of the name of the actual account that is used as its service account. By changing the record, you can assign a different account to act as the service account. You can also change the password for that account. Whether you change the account, the password, or both, you stay synchronized with other components in your deployment. For example, if an Active Directory domain policy requires that all passwords expire periodically, you can update the password information for the service account in TFS when that password changes. + +>**Note:** +>TFS and its utilities cannot create a new local or domain account to use as *TFSService*, and they cannot update the password for that account in the workgroup or the domain. Instead, the utilities update the records to match the new credentials. If you your deployment includes more than one application-tier server, you must manually update each server with any changes to the service account or its password. + +For more information about service accounts in TFS, see [Service accounts and dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md). For more information about the accounts required for installation, including the service account for TFS, see [Accounts required for installation of Team Foundation Server](../../accounts/requirements.md#accounts). + +**Required Permissions**: + + * To perform these procedures, you must be a member of the **Administrators** group on the Team Foundation application-tier server and a member of the **sysadmin** group on the server and instance of SQL Server that hosts the configuration database for Team Foundation. For more information, see [Team Foundation Server architecture](../architecture/architecture.md) and [Permission reference for Team Foundation Server](../../security/permissions.md). + +To follow a command-line procedure, you might need to open an elevated Command Prompt window. To perform this task, open the context menu for **Command Prompt**, and choose **Run as Administrator**. For more information, see this page on the Microsoft Web site: [User Account Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +## Changing the Password of the Service Account + +To change the password of *TFSService*, you must log on to the application-tier server for Team Foundation and either use the administration console for Team Foundation, or open a Command Prompt window and use the TFSConfig command-line utility. If your deployment includes more than one application-tier server, you must perform this task on each server, or the account information will be out of synchronization. + +> [!NOTE] +> Depending on your deployment configuration, you might need to restart Internet Information Services (IIS) after you complete the procedure before the changes will take effect. + +### To use the administration console to change the password + +1. Open the administration console for Team Foundation on the server that hosts the application tier. + + For more information, see [Open the Team Foundation Administration Console](../command-line/open-admin-console.md). + +2. In the console, expand the server name and choose **Application Tier**. + +3. In the Application Tier pane, choose **Update Account Password**. + + The **Update Account Password** window opens. + + > [!NOTE] + > If you used a system account as the service account, you will see an error message when you choose **Update Account Password**. You do not need to change the password of that account. System accounts do not have user-managed passwords. + +4. Type the new password in **Password**, and then choose **OK**. + + The **Change Service Account** window opens. + +5. Wait for all the status messages to complete in **Status**, and then choose **Close**. + + > [!NOTE] + > This process might take a few minutes. + +**To use the TFSConfig utility to change the password**: + +1. On the application-tier server, open a Command Prompt window and change directories to the directory that contains the **TFSConfig** utility. + + By default, this utility is located in *Drive*:\\Program Files\\TFS 12.0\\Tools. + +2. At the command line, type **TFSConfig Accounts /UpdatePassword /accountType:ApplicationTier /account:***AccountName* **/password:***NewPassword*, and then choose ENTER. + +3. You must specify both the name of the account you want to use as *TFSService* (*AccountName*) and the password of the account (*NewPassword*). + +## Assigning a Different Account as the Service Account + +To configure TFS to use a different account as the service account for Team Foundation, you can use either the administration console or the TFSConfig command-line utility. If your deployment includes more than one application-tier server, you must perform this task on each server, or the account information will be out of synchronization. Before you use either utility to make the change, consider the following issues: +- You must choose a new account that is either a system account or a member of a workgroup or domain that is trusted by every computer in this deployment of TFS. +- The configuration utilities grant the **Log on as a service** permission to the new service account, but the utilities do not revoke this permission from the account previously used as the service account if another service still uses that account. If the old account no longer needs that permission for the service for which it is still in use, you might want to manually remove that permission from the old account. + + For more information, see this page on the Microsoft Web site: [Add the Log on as a service right to an account](http://go.microsoft.com/fwlink/?LinkId=62101). +- You might need to restart IIS after you complete the procedure before the changes will take effect. +- The TFSConfig utility changes only those services that run under the old account. + +**To use the administration console to change the service account**: + +1. Open the administration console for Team Foundation on the server that hosts the application tier. + +2. In the console, expand the server name and choose **Application Tier**. + +3. In the Application Tier pane, choose **Change Account**. + + The **Update Service Account** window opens. + +4. Perform one of the following steps: + + 1. If you want to use a system account, choose **Use a system account**, and then choose a system account from the drop-down list. + + If your server is a member of an Active Directory domain, the default choice for the system account to use is Network Service. If your server is a member of a workgroup, the default choice is Local Service. Depending on the details of your deployment, the default choice might be the only available choice. + + >**Note:** + >System accounts do not have user-managed passwords. If you choose to use a system account as TFSService, you should not type a password in the password field. + + 2. If you want to use a domain or workgroup account, choose **Use a user account**, type the name of the account in **Account Name**, and then type the password for that account in **Password**. + +5. Choose **OK**. + + The **Change Service Account** window opens. + +6. Wait for all the status messages to complete in **Status**, and then choose **Close**. + + > [!NOTE] + > This process might take a few minutes. + +**To use the TFSConfig utility to change the service account**: + +1. On the application-tier server, open a Command Prompt window and change directories to the directory that contains the **TFSConfig** utility. + + By default, this utility is located in *Drive*:\\Program Files\\TFS 12.0\\Tools. + +2. At the command line, type **TFSConfig Accounts /change /accountType:ApplicationTier /account:***AccountName* **/password:***NewPassword*, and then choose ENTER. + + For more information, see [Accounts Command](../command-line/tfsconfig-cmd.md#accounts). + +## See Also + + [Change the service account or password for SQL Server Reporting Services](change-service-account-or-password-sql-reporting.md) + + [Accounts Command](../command-line/tfsconfig-cmd.md#accounts) + + [Service accounts and dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md) + + [Managing server configuration with TFSConfig](../command-line/tfsconfig-cmd.md) + + [How to: Change the Password for Visual Studio Team Foundation Build Service](https://msdn.microsoft.com/library/bb778405) + \ No newline at end of file diff --git a/docs/tfs-server/admin/config-ent-sharepoint0710-dashboards.md b/docs/tfs-server/admin/config-ent-sharepoint0710-dashboards.md new file mode 100644 index 00000000000..f142bd74dd7 --- /dev/null +++ b/docs/tfs-server/admin/config-ent-sharepoint0710-dashboards.md @@ -0,0 +1,659 @@ +--- +title: Configure the Enterprise Editions of SharePoint Server 2010 or Office SharePoint Server 2007 for Dashboard Compatibility with Team Foundation Server +description: Configure the Enterprise Editions of SharePoint Server 2010 or Office SharePoint Server 2007 for Dashboard Compatibility with Team Foundation Server +ms.assetid: a32b811c-00a6-4fe9-97f6-75a39900e6c9 +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Configure the Enterprise Editions of SharePoint Server 2010 or Office SharePoint Server 2007 for Dashboard Compatibility with Team Foundation Server + +**TFS 2015** | **TFS 2013** + +Before you can use the Enterprise edition of either Microsoft Office +SharePoint Server 2007 or Microsoft SharePoint Server 2010, you must +configure it to work with your deployment of Team Foundation Server. If +you do not configure the settings that this topic describes, the +reports and dashboards in team project portals might not have all the +functionality that you expect or might not function correctly. + +**Required Permissions** + +To perform this procedure, you must be a member of the +**Administrators** security group on the server that is +running Team Foundation Server. You must also be a member of the Farm +Administrators group in SharePoint Products. + +## Configure SharePoint Server 2010 + +To manually configure the Enterprise edition of SharePoint Server 2010 +for compatibility with Team Foundation Server, you must perform the +procedures in this section. + +### Configure required services in SharePoint Server 2010 + +Team Foundation Server requires certain services to run in SharePoint +Server 2010 for reports and dashboards to appear correctly in team +project portals. + +To configure services in SharePoint Server 2010: + + 1. On the server that is running SharePoint Server 2010, open + SharePoint Central Administration, and then choose + **Configuration Wizards**. + + 2. Choose **Start the Wizard**. + + 3. Make sure that the **Excel Services + Application** and **Secure Store + Service** check boxes have been selected, and then choose + **Next**. + +### Configure Excel services + +For reports to operate correctly, you must also configure the web +application that you created for Team Foundation Server to use a trusted +file location for Excel Services. + +To add a trusted file location: + + 1. In SharePoint Central Administration, under + **Application Management**, choose + **Manage service applications**. + + 2. On the Manage Service Applications page, choose + **Excel Services Application**. + + 3. On the Manage Excel Services Application page, choose + **Trusted File Locations**. + + 4. Choose **Add Trusted File Location**. + + 5. In **Address**, enter the URL of the root + site of the web application that you will use with Team + Foundation Server. + + You should specify the web application that you created for Team + Foundation Server. + + 6. In **Location Type**, choose + **Microsoft SharePoint Foundation**. + + 7. In **Trust Children**, select the + **Children trusted** check box. + + 8. In the **External Data** section, under + **Allow External Data**, choose + **Trusted data connection libraries and embedded**. + + 9. (Optional) Clear the **Refresh warning + enabled** check box. + + 10. In **Maximum Concurrent Queries Per + Session**, change the number to 20, and then choose + **OK**. + +### Configure secure store service (optional) + +In SharePoint Server 2010, the secure store service replaces the single +sign-on service in Microsoft Office SharePoint Server 2007. To configure +the secure store service, you must create a target application for the +secure store. In Microsoft Office SharePoint Server 2007, this +application was called an enterprise application definition. + +To configure the secure store service: + + 1. In SharePoint Central Administration, under + **Application Management**, choose + **Manage service applications**. + + 2. On the Manage Service Applications page, choose + **Secure Store Service**. + + 3. Choose **New** to create a secure store + target application for Team Foundation Server. + + > [!TIP] + > If you have not created a key, SharePoint Products prompts you to create + > one by choosing **Generate New Key**. Without a + > key, you cannot create a target application for the secure store. + + 4. On the Create New Secure Store Target Application page, in + **Target Application ID** and + **Display Name**, enter + ```TFS```. + + > [!TIP] + > You do not have to use ```TFS``` for + > **Target Application ID** or + > **Display Name**, but take note of whatever you use + > here, because you will need it to configure Team Foundation + > Server later. + + 5. In **Contact E-mail**, enter the e-mail + address of the person or group you want email messages about this + application to be sent to. + + 6. In the **Target Application Type** list, + choose **Group**. + + 7. In **Target Application Page URL**, choose + **None**, and then choose + **Next**. + + 8. In **Specify the credential fields for your Secure + Store Target Application**, choose + **Next** to accept the default settings for the + credential fields. + + 9. In **Specify the membership settings**, enter + the administrative account for the application in + **Target Application Administrators**. + + 10. In **Members**, enter the global security + group from the domain that contains all the users to whom you want + to grant access to dashboards and reports in Team Foundation Server, + and then choose **OK**. + + 11. On the Secure Store Service Application page, select the check box + for the target application that you just created (named TFS if you + used the naming guidance that was provided earlier in this topic), + and then choose **Set Credentials** in + the ribbon. + + 12. In the **Set Credentials for Secure Store Target + Application (Group)** dialog box, enter the name and password, + confirm the password of the report reader account for Team + Foundation Server, and then choose **OK**. + + > [!TIP] + > TFSReports is the placeholder name of the report reader account. + + +## Configure Office SharePoint Server 2007 + +To manually configure the Enterprise edition of Microsoft Office +SharePoint Server 2007 for compatibility with Team Foundation Server, +you must perform the procedures in this section. + +### Configure required services in Office SharePoint Server 2007 + +Team Foundation Server requires certain services to run in Microsoft +Office SharePoint Server 2007 for reports and dashboards to appear +correctly in team project portals. + +To configure services in Office SharePoint Server 2007: + + 1. On the server that is running Microsoft Office SharePoint Server + 2007, open SharePoint Central Administration. + + 2. Choose the **Operations ** tab, and under + **Topology and Services**, choose + **Services on server**. + + 3. In **Select server role to display services you + will need to start in the table below**, choose + **Single Server or Web Server for small server + farms** or **Web server for medium server + farms**. + + > [!NOTE] + > For this procedure, both options are equally valid. The services are the + > same for both options. + + 4. In **Start services in the table below**, + find **Excel Calculation Services**, choose + **Start**, and then wait for the operation + to complete. + + 5. In **Start services in the table below**, + find **Office SharePoint Server Search**, and + then choose **Start**. + + The **Configure Office SharePoint Server Search + Service Settings** page opens. + + 6. In **Query and Indexing**, select the + **Use this server for indexing content** and + **Use this server for serving search queries** + check boxes. + + 7. In **Contact E-mail Address**, enter the + address of an email account to which external users should send mail + about problems with this server. + + 8. In **Farm Search Service Account**, enter the + user name and password of a domain account to use as the search + service account for Office SharePoint Server. + + 9. Leave the rest of the settings in their default configurations, + choose **Start**, and then wait for the + operation to complete. + + > [!NOTE] + > The search service account that you specify for Office SharePoint Server + > requires special permissions and has security implications. For this + > account, you should not specify the service account that you use for + > SharePoint Products or a system account, such as Network Services. For + > more information, see the following page on the Microsoft website: + > [Service Accounts and Dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md). + + 10. In **Start services in the table below**, + find **Windows SharePoint Services Search**, + and then choose **Start**. + + The **Configure Windows SharePoint Services Search + Service Settings** page opens. + + 11. In **Service Account**, enter the user name + and password of a domain account to use as the service account. + + 12. In **Content Access Account**, enter the user + name and password of an account to use as the read-only + access account. + + 13. Leave the rest of the settings in their default configurations, + choose **Start**, and then wait for the + operation to complete. + + > [!NOTE] + > The accounts that you specify for the service account and the content + > access account both require special permissions and have + > security implications. For more information, see the following page on + > the Microsoft website: [Service Accounts and Dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md). + + +### Create a shared service provider for use with Team Foundation Server + +After you enable the services that Team Foundation Server requires, you +must create a shared service provider (SSP) for use with Team Foundation +Server. You will also create a SharePoint web application to support +this SSP. + +To create a shared service provider and the web application that it will use: + +1. Choose **Home** to display the main page for + Central Administration, and then choose **Shared + Services Administration**. + +2. On the **Manage this Farm's Shared Services** + page, choose **New SSP**. + + The **New Shared Services Provider** + page appears. + +3. In **SSP Name**, either enter a name for the + new SSP, or accept the default name. + + By default, the name is **SharedServices** + followed immediately by a number (for example, **SharedServices1**). + +4. Choose **Create a new Web application**. + + The **Create New Web Application** + page appears. + +5. In **IIS Web site**, choose + **Create a new IIS Web site**. + +6. (Optional) In **Description**, change the + value from the default value, **SharePoint**, + to the name that you provided in the previous step (for + example, SharedServices1). + + > [!IMPORTANT] + > Do not change the port number or remove the port number reference from + > the description. + +7. In **Security Configuration**, choose + **NTLM**, and then choose + **Create a new application pool**. + +8. In **Application Pool**, configure the + following options: + + - In **Application pool name**, ensure that + the name matches the name in + **Description**. + + - In the **Select a security account for this + application pool** section, choose + **Configurable**, and then enter the user name + and password of the service account for SharePoint Products. + +9. Leave the rest of the settings in their default configurations, and + then choose **OK**. + + After the web application is created, the **New + Shared Services Provider** page appears with an error message + in the title bar. This behavior is expected. + +10. In **SSP Name**, in **Web + Application**, verify that the name of the web application that + you just created for the SSP appears, and do not modify the values + of any settings in this section. + +11. In **My Site Location**, under + **My Site Location URL**, in + **Relative URL**, enter a relative URL if a site + already exists at /. + + This URL is required only if a site already exists at + **/**. Users typically specify **/My**, but you can + specify any name that does not use prohibited characters. For more + information, see the following page on the Microsoft website: + [Naming Restrictions in Team Foundation](../../reference/naming-restrictions.md). + +12. In **Enter the SSP Service Credentials**, + enter the user name and password of a domain account that you want + to use as the account for the service credentials. + + > [!NOTE] + > You must specify a domain user account, but it doesn't have to be a + > member of any particular security group. Specify a unique user account + > that doesn't have administrative permissions. Do not use the service + > account for Team Foundation (TFSService) or the data reader + > account (TFSReports) because they both require permissions that this + > account should not have. For more information, see the following page on + > the Microsoft website: [Service Accounts and Dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md). + +13. Leave the rest of the settings in their default configurations, + choose **OK**, and then wait for the + operation to complete. + + > [!NOTE] + > If a warning message appears about hosting the administration site for + > SSP and the root site on the same server, choose <span + > **OK**. + +14. On the **Success** page, choose **OK**. + + +### Configure single sign-on + +To configure single sign-on, you must create an enterprise application +definition. During the following procedure, you might need to log on +with two sets of credentials. To successfully complete this procedure, +the account with which you log on to the server that is running +Microsoft Office SharePoint Server 2007 must be: + +- A domain user account, not a group account. + +- A member of the **Farm + Administrators** group. + +- A member of the local Administrators group on the + encryption-key server. + +- A member of the **securityadmin** and + **db\_creator** roles on the instance of SQL Server + that will host the single sign-on database. + +- Either the same account that is used as the + **Single Sign-On Administrator Account** or a + member of the group account that is used as the + **Single Sign-On Administrator Account**. + +To configure single sign-on: + + 1. In SharePoint Central Administration, choose the + **Operations** tab. + + 2. Under **Security Configuration**, choose + **Service accounts**. + + 3. On the Service Accounts page, in the **Credential + Management** section, choose **Windows + service**, and then choose **Single Sign-on + Service** from the list of services. + + 4. In the **Select an account for this + component** section, choose + **Configurable**. + + 5. Enter the user name and password of an account that you have + configured to use as the sign-on account, and then choose + **OK**. + + > [!NOTE] + > The service account that you specify requires special permissions and + > has security implications. The account must have the permissions that + > are required to log on interactively on this server and must be a member + > of the Administrators group on the single sign-on server. For this + > account, you should not specify the service account that you use for + > SharePoint Products or a system account, such as Network Services. For + > more information, see the following pages on the Microsoft website: + > [Service Accounts and Dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md), + > [Plan for administrative and service accounts](http://go.microsoft.com/fwlink/?LinkID=165826), + > [Single Sign-On Service](http://go.microsoft.com/fwlink/?LinkID=147676), and + > [Start the Single Sign-On Service](http://go.microsoft.com/fwlink/?LinkID=147677). + + 6. Choose **Start**, + **Administrative Tools**, + **Services**. + + 7. In **Services**, open the shortcut menu for + **Microsoft Single Sign-On Service**, and + then choose **Properties**. + + 8. On the **General** tab, in + **Startup type**, choose + **Automatic**, choose + **Start**, and then choose + **OK**. + + 9. In SharePoint Central Administration, choose the + **Operations** tab. + + 10. Under **Security Configuration**, choose + **Manage settings for single sign-on**. + + > [!NOTE] + > To open this page, you might need to log on with the account and + > credentials that you configured in the previous step. In that case, you + > should switch users or start another session and log on to the server + > with that account. You should not log off your current user session. As + > an alternative, you can try the **Sign In as a + > Different User** function in SharePoint Central Administration, but + > that function might not work for this operation. To try to use this + > function, choose **Welcome **<span + > *UserName* at the top of the window, choose <span + > **Sign In As A Different User**, and then sign in with + > that account. + + 11. On the **Manage Settings For Single Sign-On** + page, choose **Manage server settings**. + + The **Manage Server Settings for Single + Sign-On** page appears. + + 12. In **Single Sign-on Administrator Account**, + enter the user name and password of an account that you have + configured to use as the sign-on account. + + > [!NOTE] + > The service account that you specify requires special permissions and + > has security implications. The account must have the permissions that + > are required to log on interactively on this server and must be a member + > of the Administrators group on the single sign-on server. For this + > account, you should not specify the service account that you use for + > SharePoint Products or a system account, such as Network Services. For + > more information, see the following pages on the Microsoft website: + > [Service Accounts and Dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md), [Plan for + > administrative and service accounts](http://go.microsoft.com/fwlink/?LinkID=165826), [Single Sign-On Service](http://go.microsoft.com/fwlink/?LinkID=147676), and + > [Start the Single Sign-On Service](http://go.microsoft.com/fwlink/?LinkID=147677). + + 13. In **Enterprise Application Definition + Administrator Account**, enter the user name of the person or + group of people whom you want to assign as the manager or managers + of enterprise application definitions on this server. + + You should consider creating and using a group that you will use for + all members of the Team Foundation Administrators group. + + 14. Leave the rest of the settings in their default configurations, and + then choose **OK**. + + 15. On the **Manage Settings For Single Sign-On** + page, choose **Manage encryption key**. + + 16. On the **Manage Encryption Key** page, choose + **Create Encryption Key**. + + 17. On the **Create Encryption Key** page, choose + **OK**. + + > **Important:** + > Make sure that you back up the encryption key to a secure location. + + 18. Return to the **Manage Settings For Single + Sign-On** page. + + > [!NOTE] + > If you signed into SharePoint Central Administration with a different + > user account to change the settings for single sign-on, you should + > change back to a session that you are running with your own account. + > After you make this change, the top two options disappear from the + > **Manage settings for Single Sign-On** page. + + 19. Choose **Manage settings for the enterprise + application definitions**. + + 20. On the **Manage Settings for the Enterprise + Application Definitions** page, choose **New + Item**. + + The **Create an Enterprise Application + Definition** page appears. + + 21. (Optional) In **Application and Contact + Information**, in both **Display name** + and **Application name**, enter + ```TFS```. + + This step is not required, but it can be useful for convenience in + later identification. + + 22. In **E-mail address**, enter the email + address of the person or group to whom you want to email messages + about this application to be sent. + + 23. In **Account type**, choose + **Group**. + + 24. In **Authentication type**, choose + **Windows Authentication**, and then choose + **OK**. + + 25. Return to the **Manage Settings For Single + Sign-On** page, and then choose **Manage + account information for enterprise application definitions**. + + The **Manage Account Information for Enterprise + Application Definitions** page appears. + + 26. In the **Account information** section, in + the **Enterprise account definition** list, + choose the name of the enterprise account definition that you + created to support Team Foundation Server. + + If you followed the suggested naming convention, the name will be + **TFS**. + + 27. In **Group account name**, enter the name of + a global security group in the domain that contains all the users to + whom you want to grant access to dashboards and reports in Team + Foundation Server, and then choose **Set**. + + 28. In **Provide Server Account Information**, + enter the name and password for the report reader account (referred + to with the placeholder *TFSReports*), + and then choose **OK**. + + 29. On the **Manage Account Information for Enterprise + Application Definitions** page, choose + **Done**. + +### Add a trusted file location for Excel Services + +For reports to operate correctly, you must also configure the web +application that you created for Team Foundation Server to use a trusted +file location for Excel Services. + +To add a trusted file location: + + 1. In SharePoint Central Administration, choose + **Home** to return to the home page for SharePoint + Central Administration. + + 2. Under **Shared Services Administration**, + choose the name of the shared service provider that you created. + + If you followed the suggested naming convention, this application + will be called **SharedServices1**. + + The home page for administering the web application opens. + + 3. Under **Excel Services Settings**, choose + **Trusted file locations**. + + 4. On the **Trusted File Locations** page, + choose **Add trusted file location**. + + The **Excel Services Add Trusted File + Location** page appears. + + 5. In **Address**, enter the URL of the root + site of the web application that you will use with Team + Foundation Server. + + You should specify the web application that you created in the + **Create a Web Application** section. + + 6. In **Location Type**, choose + **Windows SharePoint Services**. + + 7. In **Trust Children**, select the + **Children trusted** check box. + + 8. In the **External Data** section, under + **Allow External Data**, choose + **Trusted data connection libraries and embedded**. + + 9. (Optional) Clear the **Refresh Warning + Enabled** check box. + + 10. In **Maximum Concurrent Queries Per + Session**, change the number to 20, make sure that the + **Refresh warning enabled** check box is cleared, + and then choose **OK**. + + +### Set the access model + +After you configure all the settings and services that Team Foundation +Server requires, you must configure the access model for the web +application for single sign-on for delegation. If you do not configure +the access model, Team Foundation Server and the web application cannot +interoperate. + +To set the access model: + + 1. On the server that is running SharePoint Central Administration, + open a Command Prompt window. + + 2. Change directories to %programfiles%\\Common Files\\Microsoft + Shared\\Web Server Extensions\\12\\bin, and enter the following + command: + + **stsadm -o set-ecssecurity -ssp** *SharedServiceProviderName* **-accessmodel delegation** + + *SharedServiceWebApplicationName* is the name of the shared service provider that you created. If you + followed the suggested naming convention, this name of that provider + is **SharedServices1**. + + 3. At the command prompt, enter ```iisreset``` to + restart IIS. diff --git a/docs/tfs-server/admin/config-lab-scvmm-envs.md b/docs/tfs-server/admin/config-lab-scvmm-envs.md new file mode 100644 index 00000000000..b36cc10ee4a --- /dev/null +++ b/docs/tfs-server/admin/config-lab-scvmm-envs.md @@ -0,0 +1,1131 @@ +--- +title: Configure Lab Management for SCVMM environments and Team Foundation Server +description: Configure Lab Management for SCVMM environments and Team Foundation Server +ms.assetid: dc8906e0-cced-4728-9060-e38ea14bd4be +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Configure Lab Management for SCVMM environments and Team Foundation Server + +**TFS 2015** | **TFS 2013** + +To create and manage System Center Virtual Machine Manager (SCVMM) +environments, you must first configure the required components for Lab +Management. These components are: + +- Hyper-V hosts + +- SCVMM + +- Team Foundation Server + +- A test controller + +For more information about Lab Management, see [Using a Lab +Environment for Your Application +Lifecycle](https://msdn.microsoft.com/en-us/library/dd997438(v=vs.120).aspx). + +If you are upgrading from earlier versions of Lab Management or SCVMM, +see [upgrading](https://msdn.microsoft.com/en-us/library/hh707966(v=vs.120).aspx). + +> [!NOTE] +> Any computers that you use as Library Servers (including the SCVMM +> machine that has a default library server) and as Hyper-V hosts should +> be on a gigabit network that is connected to a common network switch. +> The faster network speed will help improve performance when you deploy +> virtual machines to hosts and when you save virtual machines to the +> library from your host. + + +## Prerequisites + +The Team Foundation Server administrator must set up and configure Team +Foundation Server before configuring Lab Management. For more +information about how to set up and configure Team Foundation Server, +see the Team Foundation Server Installation Guide. After the +administrator has configured Team Foundation Server and created a +default team project collection, make sure that you have the following +information: + +- *TfsMachine*: The name of the machine + that is running Team Foundation Server. + +- *domain*: The Active Directory domain + that is used by all machines. + +- *tfssvc*: The account under which Team + Foundation Server is running. + + > [!NOTE] + > You must use a domain user account and password for the TFSservice + > account to set up an SCVMM environment for lab management. + +- *domain*\\*tfsadmin*: The account for the Team + Foundation Server administrator. + + +## System requirements + +The following table summarizes the minimum and recommended hardware and +software requirements for the machines used with Lab Management. To make +the requirements easier to understand, each role is broken out as if it +were installed on a separate machine. For a simpler setup, you can run +the *HyperVHost* machine, the *VmmMachine* and the *LibraryMachine* all on the same computer. + +*HyperVHost* + + * Processor -- 64-bit with hardware virtualization enabled + + * Supported OS -- Windows Server 2012 R2 operating system with Hyper-V 64-bit, Standard, Enterprise and Datacenter Editions. + + VMM Server 2012 R2 operating system with Hyper-V 64-bit, Standard, Enterprise and Datacenter Editions. + + Hyper-V Host and Library Server 2012 R2. The Hyper-V Host and Library servers can be running on Windows Server 2012 with VMM server running on 2012 R2. + + Windows Server 2008 R2 operating system with Hyper-V 64-bit, Standard, Enterprise, and Datacenter Editions. + + Windows Server 2008 R2�Server Core installation, Standard, Enterprise, and Datacenter Editions. + + Windows Server 2008 operating system with Hyper-V 64-bit, Standard, Enterprise, and Datacenter Editions with Service Pack 2. + + Hyper-V Server 2008 R2 operating system. + + * RAM (min/recommended) -- 4GB / 8GB + + * Hard disk (min/recommended) -- 100GB / 200GB + +*VmmMachine* + + * Processor -- 64-bit + + * Supported OS -- Windows Server 2012 R2 operating system with Hyper-V 64-bit, Standard, Enterprise and Datacenter Editions. + + VMM Server 2012 R2 operating system with Hyper-V 64-bit, Standard, Enterprise and Datacenter Editions. + + Hyper-V Host and Library Server 2012 R2. The Hyper-V Host and Library servers can be running on Windows Server 2012 with VMM server running on 2012 R2. + + Windows Server 2008 R2 operating system 64-bit Standard, Enterprise, and Datacenter Editions. + + Windows Server 2008 operating system Standard, Enterprise, and Datacenter Editions with Service Pack 2. + + * RAM (min/recommended) -- 2GB / 4GB + + * Hard disk -- 200GB + +*LibraryMachine* + + * Processor -- 64-bit + + * Supported OS -- Windows Server 2012 R2 operating system with Hyper-V 64-bit, Standard, Enterprise and Datacenter Editions. + + VMM Server 2012 R2 operating system with Hyper-V 64-bit, Standard, Enterprise and Datacenter Editions. + + Hyper-V Host and Library Server 2012 R2. The Hyper-V Host and Library servers can be running on Windows Server 2012 with VMM server running on 2012 R2. + + Windows Server 2008 R2 operating system 64-bit Standard, Enterprise, and Datacenter Editions. + + * RAM (min/recommended) -- 4GB / 8GB + + * Hard disk (min/recommended) -- 200GB / 500GB + +*TfsMachine* + + * Processor -- 32-bit x86, 64-bit x64 + + * Supported OS -- All operating systems that are supported by Team Foundation Server are supported by Visual Studio Lab Management, except Windows 8 clients and servers. + + * RAM (min/recommended) -- 2GB / 4GB + + * Hard disk (min/recommended) -- 120GB / 230GB + +*ControllerMachine* + + * Processor -- 32-bit x86, 64-bit x64 + + * Supported OS -- All operating systems that are supported by Team Foundation Server are supported by Visual Studio Lab Management, except any operating systems that are not joined to a domain. + + * RAM (min/recommended) -- 2GB / 4GB + + * Hard disk (min/recommended) -- 120GB / 230GB + + +## Configuration procedures + +The following table details the procedures that you must follow to +complete the configuration for Hyper-V, SCVMM, and Lab Management, and +the permissions that are required. For a simple setup, the +*HyperVHost</span> machine, the +*VmmMachine</span> and the +*LibraryMachine</span> can be the same machine. + +> [!NOTE] +> All the machines that are used for Lab Management must be joined either +> to the same domain or domains that have two-way trust between them. + +| Step Number | Procedure | Details | Machine Name In Procedure | Permissions Required | +| --- | --- | --- | --- | --- | +| 1 | [Set Up And Configure Hyper-V Hosts](#setup-hyperv) | Hyper-V lets you manage virtual machines and their resources. | *HyperVHost* | Administrator for the *HyperVHost* | +| 2 | [Install and configure SCVMM](#install-scvmm) | SCVMM helps you manage your virtual machines and templates, and where and how you store them. | *VmmMachine* </br> **Note:** You can use a separate machine as the LibraryMachine to use for the library share to store the virtual machines. | Administrator for *VmmMachine* | +| 3 | [Configure Team Foundation Server to enable Lab Management](#config-tfs-for-lab) | You configure TFS to give you access to the virtual machines and templates that you have created. | *TfsMachine* | Team Foundation Server Administrator | +| 4 | [Verify the configuration using Microsoft Test Manager](https://msdn.microsoft.com/en-us/library/dd380739.aspx) | Verify that you can connect to a team project and access the **Lab Center** by using Microsoft Test Manager. | *DesktopClient* | Any user account that has been added to the computer | +| 5 | [Install test controller](#build-test-controller) | If you want to build and deploy your application by using Team Foundation Build and run tests, you will need build controllers and test controllers. | *TfsMachine* </br> **Note:** It is recommended that you use a separate machine as the ControllerMachine to install the test controller. | Team Project Collection Administrator | + +<a name="setup-hyperv"></a> +## Set up and configure Hyper-V hosts + +To set up Hyper-V, you can do one of the following: + +- Enable the Hyper-V role on your computer that has Windows Server + 2008 R2 or Windows Server 2012 installed. If you do not have the + Hyper-V role enabled on the *HyperVHost* computer, you must first enable + this by using Server Manager on each of the Hyper-V hosts so that + you can create and manage virtual machines using the steps in the + following procedure. For more information about Hyper V, see the + following [Microsoft Web site](http://go.microsoft.com/fwlink/?LinkId=179531). + +- Install Hyper-V Server 2008 R2 on your + *HyperVHost*. For information about Hyper-V + server and how to install it, see the following [Microsoft Web site](http://go.microsoft.com/fwlink/?LinkId=181875). + +To enable the Hyper-V role on each Hyper-V host with Windows Server: + + 1. On the Hyper-V host, log on as an administrator. + + 2. Choose **Start**, point to + **Administrative Tools**, and then choose + **Server Manager**. + + 3. In the left pane of **Server Manager,** + right-choose **Roles** and point to + **Add Roles**. + + 4. Follow the **Add Roles Wizard**. You can just + choose **Next** in all except the following + pages of the wizard: + + 1. On the **Select Server Roles** page, + select **Hyper-V** and then choose + **Next**. + + 2. On the **Create Virtual Networks** page, + you must select an active network adapter and then choose + **Next**. + + > [!NOTE] + > To find which network adapters are active, use the **ipconfig** command + > to view which network adapters have IP addresses. In the wizard, select + > the network adapter that should be used for creating a virtual network. + > You must select an adapter that is connected to the same network as the + > other machines in the lab. If there are several adapters, select the + > adapter to which the virtual machines that were created by Lab + > Management should be connected. + + 3. On the **Confirm Installation + Selections** page, choose + **Install**. + + 4. On the **Installation Results** page, + choose **Close**. + + 5. On the **Do you want to restart now** + dialog box, choose **Yes**. + + The machine will restart and continue with + **Resume Configuration Wizard**. + + 6. On the **Installation Results** page, you + will see a message that states **Installation succeeded**. + Choose **Close**. + + 5. Install the update described on this [Microsoft Web + site](http://go.microsoft.com/fwlink/?LinkId=186068). This update + supports the network isolation capability of SCVMM environments. + + +### Improve the reliability of WinRM + +Windows Remote Management (WinRM) is used by SCVMM to communicate with +Hyper-V hosts. You must make the following changes to the default +configuration settings for WinRM. The changes to these settings help +improve the reliability of WinRM because Lab Management performs a +larger number of operations on Hyper-V hosts than are performed in a +typical production scenario for Hyper-V. These changes to the WinRM +settings must also be performed on any computer that is used for a +library share. + +To change Windows Remote Management configuration settings: + + 1. Choose **Start**, open the shortcut menu for + the **Command Prompt**, and then choose + **Run as administrator**. + + > [!NOTE] + > You must be a domain user who has been added to the administrators group + > for this machine. + + 2. At the command prompt, run the following command: + + ```winrm set winrm/config @{MaxTimeoutms = "1800000"}``` + + 3. Restart the winrm service and the SCVMM agent on the host using the + following commands: + + ```net stop winrm``` + + ```net start winrm``` + + ```net start scvmmagent``` + + 4. If the host OS is Windows Server 2008: + + 1. Run the following command: + + ```winrm set winrm/config/Service @{MaxConcurrentOperations="200"}``` + + 2. Restart winrm and the SCVMM agent on the host using the + following commands: + + ```net stop winrm``` + + ```net start winrm``` + + ```net start scvmmagent``` + + +### Verify the Hyper-V setup + +To verify that Hyper-V is installed correctly and is working: + + +- Create a virtual machine using Hyper-V and check that you can start + the virtual machine. + + If you have enabled the Hyper-V role for your + *HyperVHost*, create a virtual machine using + the information from the following + [Microsoft](http://go.microsoft.com/fwlink/?LinkID=179170) Web site. + + > [!NOTE] + > You can change the settings for the virtual machine based on your needs. + > You can update the hard disk size and the memory. For more information + > about these settings, see the following [Microsoft Web + > site](http://go.microsoft.com/fwlink/?LinkId=179170). + + If you are using Hyper-V Server, create a virtual machine using the + information in the Hyper-V Server Getting Started Guide from the + following + [Microsoft](http://go.microsoft.com/fwlink/?LinkId=181894) Web site. + + > [!NOTE] + > If you have multiple hard disk drives on your Hyper-V machine, you must + > configure the paths for the virtual machines to be the larger disk, or + > you may not have sufficient disk space to create your virtual machines. + +For more information about Hyper-V, see [this overview of Hyper-V](http://go.microsoft.com/fwlink/?linkid=164925). + +> [!NOTE] +> When you create or start a virtual machine, issues may occur due to +> antivirus software. For more information, see the following [Microsoft +> Web site](http://go.microsoft.com/fwlink/?LinkId=180418). + + +<a name="install-scvmm"></a> +## Install and configure SCVMM + +To access the virtual machines that you create with Hyper-V from Lab +Management, you must install and configure SCVMM. SCVMM is a tool for +managing your Hyper-V host machines from a central console. Lab +Management communicates with SCVMM to be able to use the virtual +machines and templates to create environments. Two versions of System +Center Virtual Machine Manager are supported for Lab Management: SCVMM +2012 or SCVMM 2008 R2. Lab Management **does not** support SCVMM 2016. + +> [!NOTE] +> If you are using the stand-alone Hyper-V Server 2008 R2 operating +> system, you must install SCVMM on a separate +> *VmmMachine*. You cannot use the +> *HyperVHost* computer. For more information about +> the unique characteristics of Hyper-V Server 2008 R2, see the following +> [Microsoft Web site](http://go.microsoft.com/fwlink/?LinkID=181875) + +### Install and configure SCVMM 2012 + +For information about prerequisites, see: [System Requirements: VMM +Management Server](http://go.microsoft.com/fwlink/?LinkId=238153) + +Install SCVMM server and its administrator console on the VMMMachine: + + 1. On *VmmMachine*, log on as a domain + user who is also a local administrator on the machine. + + 2. Run setup.exe. + + 3. In System Center 2012 setup, choose + **Install**. + + > [!TIP] + > If you do not have Microsoft .NET Framework 3.5 SP1 installed, VMM Setup + > prompts you to install it. Choose **OK**. + + 4. In Select features to add, choose **VMM management + server** and then choose **Next**. + **VMM Console** is automatically installed with + the server. + + 5. Type your name, organization and product key and choose + **Next**. + + 6. Choose **I have read, understood, and agreed with + the terms of the license agreement** and choose + **Next**. + + 7. Choose whether to participate in the customer experience improvement + program and choose **Next**. + + 8. To accept the recommended installation location, choose + **Next**. + + 9. Specify the SQL Server instance to use, as well as any particulars + about it, and choose **Next**. + + 10. Specify the local system account or a domain account as the identity + the VMM service will use and choose **Next**. + + 11. Choose **Next** to accept the default port + assignments or to enter different values. + + 12. Choose **Create a new library share** and + choose **Next**. + + 13. On the Installation summary screen, choose + **Install**, and then choose + **Close** after the wizard finishes. + + +After you install VMM manager, you must add your Hyper-V host machines +to a host group, and optionally add more library shares. + +To configure SCVMM: + + 1. Open Virtual Machine Manager Console. + + 1. Choose **Start**, **All + programs**, **Microsoft System Center + 2012**, **Virtual Machine Manager**, + and then **Virtual Machine Manager + Console**. + + 2. On the **Connect to Server** dialog box, + type ```localhost:<port number>``` or + ```<the name of the SCVMM Server>:<port number>```, and then choose + **Connect**. + + 2. To add the *HyperVHost* machines to a + host group in SCVMM, choose **Fabric**, and + then choose **Add resources**, and then + choose **Hyper-V Hosts and Clusters**. Choose + **Next** in all except the following pages of + the wizard: + + 1. On **Specify the credentials to use for + discovery**, choose **Manually enter the + credentials**, type the credentials of an administrator for + the Hyper-V host, and choose **Next**. + + 2. On the **Specify the search scope for virtual + machine host candidates** wizard page, choose + **Specify Windows Server computers by names**, + in the **Computer names** box, type the + computer name of the host that you are adding to SCVMM (for + example, *HyperVHost*), and then + choose **Next**. + + 3. On the **Select the computer that you want to + add as hosts** page, select the Hyper-V host computers and + choose **Next**. + + 4. On the **Summary** wizard page, choose + **Finish**. + + > [!NOTE] + > It is recommended that you configure a separate host group for each team + > project collection. For example, if you plan to configure Lab Management + > in two project collections in Team Foundation Server, you can create two + > host groups in System Center Virtual Machine Manager. + + 3. (Optional) By default, SCVMM configures the machine on which it is + installed to act as a library server. It also sets up a default + library share on the machine. You can add more library servers or + shares to improve the performance. + + 1. To add a new library server to SCVMM, choose + **Library**, and then choose the + **Add library server** button from the ribbon + and follow the instructions in the wizard. + + 2. To add a new library share to SCVMM, first create a Windows file + share on a library server. Then choose + **Library**, in the navigation pane, select the + library server where you created the Windows file share, and + choose **Library Server** from the menu. + In the ribbon, choose **Add library + shares** and follow the instruction in the wizard. + + > [!NOTE] + > We recommend that you configure a separate library share for each team + > project collection. + + 4. To ensure that virtual machines start quickly and that the host + service and any network agents do not timeout, set the minimum + amount of memory that the *HyperVHost* + machine will always have in reserve. The default memory reserves on + the host machine are often too low to accommodate the longer startup + time required for virtual machines. + + 1. In the SCVMM Administrator Console, choose + **Fabric**. + + 2. In the navigation pane, expand + **Servers**, **All + Hosts**, choose the Hyper-V host machine, and then choose + the **Properties** button from + the ribbon. + + 3. In the properties dialog box, choose + **Reserves** and then select the + **Override host reserves settings from the parent + host group** check box. + + 4. In the **Memory (MB)** edit box, type or + select ```1024```, and then choose + **OK**. + + 5. Repeat steps b. through d. for each host. + + +### Install and configure SCVMM 2008 R2 + +To install SCVMM server and SCVMM Administrator Console on the VmmMachine: + + 1. On *VmmMachine**, log on as a domain + user who is also an administrator on the machine. + + 2. To install **System Center** + **Virtual Machine Manager**, run setup.exe. + + 3. To install the SCVMM Server, under **Setup** + choose **VMM Server**. Choose + **I accept the terms of this agreement**. Then + choose **Next** in all except the following + pages of the wizard: + + 1. On the **SQL Server Settings** wizard + page, choose **Install SQL Server 2005 Express + Edition SP3**, and then choose + **Next**. + + > [!NOTE] + > If you do have an existing instance of SQL that you want to use, then + > select **Use a supported version of SQL Server**. + + 2. On the **Library Share Settings** wizard + page, select **Create a new library + share**. + + > [!NOTE] + > You can accept the default names and locations for the library share or + > enter different values. + + 3. On the **Installation Settings** wizard + page, you can either accept the default port numbers and VMM + service account or enter different values. + + 4. On the **Summary of Settings** wizard + page, choose **Install**. + + 5. On the **Installation** wizard page, + choose **Close**. + + 4. To install the Virtual Machine Manager Administrator Console, under + **Setup** choose **VMM + Administrator Console**. Choose **I accept + the terms of this agreement**. Then choose + **Next** in all except the following pages of the + wizard: + + 1. On the **Summary of Settings** wizard + page, choose **Install**. + + 2. On the **Installation** wizard page, + choose **Close**. + + 5. On the **System Center Virtual Machine Manager + 2008** startup page, choose **Exit**. + + +After you install VMM manager, you must add your Hyper-V host machine to +a host group, and optionally add more library shares. + +> [!NOTE] +> A host group lets you group the Hyper-V host machines together in a +> meaningful way based on the purpose of the host machine. For example, a +> set of host machines might belong to a particular department in your +> company. + +To configure SCVMM: + + 1. Open Virtual Machine Manager Administrator Console. + + 1. Choose **Start**, **All + programs**, **Microsoft System + Center**, **Virtual Machine Manager 2008 + R2**, and then **Virtual Machine Manager + Administrator Console**. + + 2. On the **Connect to Server** dialog box, + enter ```localhost:<port number>```or + ```<the name of the SCVMM Server>:<port number>```, and then choose + **Connect**. + + > [!NOTE] + > If you receive an error message that states that you cannot connect + > because the service is not running, run services.msc and verify that + > Virtual Machine Manager Service is running. + + 2. To add the *HyperVHost* machines to a + host group in SCVMM, in the **Actions** pane + choose **Add host**. Choose + **Next** in all except the following pages of the + wizard: + + 1. On **Select Host Location** wizard page + of the **Add Hosts** wizard, enter the + credentials of an administrator for the Hyper-V host. + + 2. On the **Select Host Servers** wizard + page, enter the computer name of the host that you are adding to + SCVMM,for example, + *HyperVHost*,and then choose + **Add**. + + 3. On the **Summary** wizard page, choose + **Add Hosts**. + + > [!NOTE] + > We recommend that you configure a separate host group for each team + > project collection. For example, if you plan to configure Lab Management + > in two project collections in Team Foundation Server, you can create two + > host groups in System Center Virtual Machine Manager. + + 3. (Optional) By default, SCVMM configures the machine on which it is + installed to act as a library server. It also sets up a default + library share on the machine. You can add more library servers or + shares to improve the performance. + + 1. To add a new library server to SCVMM, choose + **Add library server** in the + **Actions** pane on the right side and follow + the instructions in the wizard. + + 2. To add a new library share to SCVMM, first create a Windows file + share on a library server. Then select the library server on the + **Library** tab of SCVMM Administrator + Console and choose **Add library shares** + under the **Actions** pane on the + right side. + + > [!NOTE] + > We recommend that you configure a separate library share for each team + > project collection. + + 3. On each SCVMM library server, install the update described on + this [Microsoft + website](http://go.microsoft.com/fwlink/?LinkId=186068). This + update supports the network isolation capability of + SCVMM environments. + + 4. To ensure that virtual machines start quickly and that the host + service and any network agents do not timeout, set the minimum + amount of memory that the *HyperVHost** + machine will always have in reserve. The default memory reserves on + the host machine are often too low to accommodate the longer startup + time required for virtual machines. + + 1. In the SCVMM Administrator Console, choose + **Go**, **Hosts**. + + 2. In the center **All Hosts** pane, open + the shortcut menu for the name of the host machine, and then + choose **Properties**. + + 3. In the **Host Group Properties for ** + *host machine* dialog, choose the + **Reserves** tab. + + 4. In the **Memory** edit box, enter or + select ```1024```, and then choose + **OK**. For more information about the minimum + required memory for Hyper-V hosts, see this [Microsoft + website](http://go.microsoft.com/fwlink/?LinkID=181896). + + 5. Repeat steps b through d for each host. + +> [!IMPORTANT] +> If you have two SCVMM servers that are both configured to be used by Lab +> Management with a specific Team Foundation Server, then each SCVMM +> server must be configured to use a unique MAC range. To configure the +> MAC range, from the Virtual Machine Manager Administration Console, in +> the lower-left navigation window choose +> **Administration**, choose +> **Networking** and then open **Global +> Static MAC Address Range**. For more information about how to +> configure the MAC range, see the following [Microsoft Web +> site](http://go.microsoft.com/fwlink/?LinkId=182078). + +To verify that SCVMM is installed correctly and is working: + + 1. In the **Virtual Machine Manager Administrator + Console**, in the **Actions** pane on + the right side, choose **New virtual + machine**. Choose **Next** in all except + the following pages of the wizard. + + 1. On the **Select Source** wizard page, + select **Create the new virtual machine with a + blank virtual hard disk**. + + 2. On the **Virtual Machine Identity** + wizard page, in **Virtual machine name**, + enter ```blank```. + + 3. On the **Select Destination** wizard + page, select **Place the virtual machine on a + host**. + + 4. On the **Select Host** wizard page, view + the ratings, and then choose **Next**. + + You should see all the *HyperVHost* + machines that you are using for Lab Management. All of them + should have positive star ratings. If not, you might have an + issue that must be corrected. To determine why the + *HyperVHost* machines are not usable by + SCVMM, examine the **Rating + Explanation**. + + 5. On the **Summary** wizard page, choose + **Create**. + + A new virtual machine called **blank** + should be created without any errors and should be visible in + the **Virtual Machines** tab of SCVMM. + There might be a warning that SCVMM could not locate the + boot volume. This is expected and can be ignored. + + 2. In the **Virtual Machine Manager Administrator + Console**, choose **Virtual Machines**, + open the shortcut menu for the virtual machine displayed in the + list, and then choose **Start**. If the + virtual machine does not start, review the information located on + the following sites to identify the cause of the problem: + + - [New Installation of SCVMM 2008](http://go.microsoft.com/fwlink/?LinkId=139442) + + - [System Center Virtual Machine Manager TechCenter](http://go.microsoft.com/fwlink/?LinkId=139443) + + 3. After the **Status** of the VM is + **Running**, open the shortcut menu for the VM, and + then choose **Stop**. + + This confirms that your Hyper-V hosts are configured correctly. + + 4. To store the virtual machine in the library, open the shortcut menu + for the VM, and then choose **Store in + library**. + + 1. On the **Select Library Server** wizard + page, choose one of the library shares. + + 2. On the **Select Path** wizard page, + browse to the path for your library share that you plan to use + for your team project collection on Team Foundation Server. + + 3. When you are finished, confirm that a virtual machine called + **blank** appears in the + **Library** pane in the SCVMM + Administrator Console. + + This confirms that the library share is configured correctly. + +You can use the following procedure to improve the performance of +virtual machine transfers from the SCVMM library share to a host and +also when storing a virtual machine to the SCVMM library share. This +performance improvement removes encryption that has security +implications if the images are transmitted unencrypted over the network. + +To improve performance of VM transfers: + + 1. Enable unencrypted file transfers for library servers. + + 1. Choose the **Library** tab in the SCVMM + Administrator console. Open the shortcut menu for each library + server in the **Library Servers** tree, + and then choose **Properties**. + + 2. Select **Allow unencrypted file + transfers**. + + 3. Choose **OK** to close the dialog box. + + 2. Enable unencrypted file transfers for host groups. + + 1. Choose the **Hosts** tab in the SCVMM + Administrator console. Open the shortcut menu for each host + group in the **Hosts** tree, and then + choose **Properties**. + + 2. Select **Allow unencrypted file + transfers**. + + 3. Choose **OK** to close the dialog box. + + +<a name="config-tfs-for-lab"></a> +## Configure Lab Management for Team Foundation Server + +To enable Team Foundation Server to communicate with the SCVMM server, +you must also install the SCVMM Administrator Console on your +*TfsMachine* if this is a different computer from +the computer that you are using as your +*VmmMachine*. + +> [!NOTE] +> If your deployment of Team Foundation Server has more than one +> application-tier machine, install the console on every application tier +> in the deployment. + +To install SCVMM 2012 Console on <TFSMachine> : + + 1. Log on to *TfsMachine* as + *domain*\\*tfsadmin*. + + 2. To install Virtual Machine Manager Administrator Console, run + setup.exe for Virtual Machine Manager. + + 3. In VMM setup, choose **Install**. + + 4. You can just choose **Next** in all except + the following pages of the wizard: + + 1. On the **Select features to install** + page, choose **VMM console** and then + choose **Next**. + + 2. On the license page, you must choose **I agree + with the terms of this notice** and then choose + **Next**. + + 3. On the **Installation summary** page, + choose **Install**. + + 4. On the **Setup completed successfully** + page, choose **Close**. + +To install the SCVMM 2008 R2 Administrator Console on <TfsMachine> : + + 1. Logon to *TfsMachine* as + *domain* \\ *tfsadmin*. + + 2. To install Virtual Machine Manager Administrator Console, run + setup.exe for Virtual Machine Manager. + + 3. Under **Setup** on the + **System Center Virtual Machine Manager 2008 R2** + startup wizard page, choose **VMM Administrator + Console**. + + 4. You can just choose **Next** in all except + the following pages of the wizard: + + 1. On the **Summary of Settings** wizard + page, choose **Install**. + + 2. On the **Installation** wizard page, + choose **Close**. + + +### Configure Lab Management for Team Foundation Server + +You must configure Lab Management in Team Foundation Server. This +enables access to the virtual machines and templates that you create +from Microsoft Test Manager. You can then use these virtual machines or +templates to create SCVMM environments and store them in a library +share. This requires you to select the SCVMM server to use with Team +Foundation Server. + +To configure Lab Management for Team Foundation Server: + + 1. On *TfsMachine*, choose + **Start**, **All programs**, + **Microsoft Visual Studio Team Foundation + Server**, and then choose **Team Foundation + Server Administration Console**. + + > [!NOTE] + > You must log on to *TfsMachine* as *domain(\\*tfsadmin*. + + 2. In the Administration Console, in the + **Application Tier** node, choose + **Lab Management**. + + 3. Choose **Configure**. + + The **Lab Management Settings** dialog + box appears. + + 4. On the **Virtual Machine Manager** tab, in + **VMM Server Name**, type the name of + *VmmMachine*, the server that is running + Virtual Machine Manager and that you will use to manage the + virtual machines. + + 5. Choose **Test **to determine whether Team + Foundation Server can communicate with the SCVMM server. + + 1. If Team Foundation Server service account does not have the + appropriate permissions on the specified SCVMM, a dialog box + prompts you for a user name and password. + + 2. Specify the credentials of an existing member of SCVMM + Administrators Role. By using this user name and password, the + Team Foundation Server service account will be added to the + SCVMM Administrator Role. + + If Team Foundation Server cannot contact the SCVMM server, a red x + and an error message is displayed. For more information about how to + troubleshoot installation issues, see [Troubleshooting Lab + Management](https://msdn.microsoft.com/en-us/library/ee853230(v=vs.120).aspx). + + 6. You can use network isolation in Visual Studio Lab Management to + enable multiple copies of a lab environment to run at the same time + without causing network conflicts, such as conflicts in computer + names and Domain Name System (DNS) registration. For more + information about network isolation, see [Creating and using + a network isolated + environment](https://msdn.microsoft.com/en-us/library/ee518924(v=vs.120).aspx). + On the **Network Isolation** tab, follow + these steps: + + 1. In **IP Block**, type the range of + Internet Protocol (IP) addresses to be assigned to the virtual + machines in an environment when an isolated network is created. + + You must type the IP Block using Classless Inter-Domain + Routing (CIDR) notation. The CIDR notation is constructed from + the IP address, the forward slash (/), and the prefix size. For + example, 192.168.0.0/24. + + The addresses that you specify are used only for internal + routing among virtual machines and are not exposed beyond the + boundaries of an environment. Therefore, you can specify any + address range that is not used within your public network. In + most cases, you can use the default range of 192.168.23.0/24. + + 2. In **DNS Suffix**, type the suffix of the + domain name to be assigned to the environment when an isolated + network is created. + + Team Foundation Server uses the suffix that you entered when it + registers a unique external name with DNS for each virtual + machine in a network-isolated environment. The DNS alias record + makes it possible for machines and other objects outside the + isolated network to communicate with machines inside the + isolated network. Because Team Foundation Server goes into the + DNS zone to register the alias record, the service account under + which Team Foundation runs must have permissions to add or + delete alias records in the specified DNS zone. + + If your Team Foundation Server deployment has more than one + application tier and each application tier runs under a + different service account, then each application-tier service + account must have permission to edit the DNS alias records + created by the other application tiers. + + Choose **Test **to determine whether Team + Foundation Server can use the suffix. + + If the suffix is valid, a green check mark appears. Choose + **OK**. + + If the suffix is not valid, a red x and an error message appear. + You must fix the error before you can continue. + + 7. If your deployment of Team Foundation Server has more than one + application-tier machine, repeat the following steps on each of the + other application-tier machines: + + 1. In the Team Foundation Administration Console, choose the + **Application Tier** node, choose + **Lab Management,** and then choose + **Reconfigure**. + + The **Lab Management Settings** dialog + box appears. + + 2. Choose the **Virtual Machine Manager** + tab, and then choose **Test** to + determine whether the application tier can communicate + with SCVMM. + + If the Team Foundation Server service account does not have the + correct permissions on the specified SCVMM, a dialog box is + displayed prompting you for a user name and password. Type the + credentials of an existing member of SCVMM Administrators role. + When you type this user name and password and choose + **OK**, the Team Foundation Server service + account of this application tier will be added to the SCVMM + Administrator role. + +## Configure Lab Management for Each Team Project Collection + +You must configure the host group and library share from SCVMM that you +want to use with each team project collection. For example, you might +decide to allocate one host group to each team project collection to +evenly divide the virtual machine resources. + +To use the workflow capability from a Team Foundation Build build +definition to deploy your application, or run tests by using a test +controller on your SCVMM environments, you must add a domain user +account that will be used by test agents and build agents. + +> [!NOTE] +> You must have a team project collection already created for this step of +> the configuration. + +To configure Lab Management for each team project collection: + + 1. To select the library share to use to store virtual machines, + templates, and SCVMM environments, choose **Team + Project Collections** under **Application + Tier**. + + > [!IMPORTANT] + > You must configure a library share for each team project collection that + > you want to configure for Lab Management. + + 2. In the right-side pane, choose the appropriate team project + collection from the list of project collections. + + 3. Choose the **Lab Management** tab, and then + choose **Configure Library Shares**. + + The **Lab Management Settings** dialog + box appears. + + 4. On the **Library Shares** tab, choose + **Add and Verify**. + + The Select Library Shares dialog box appears. + + 5. In the **Select Library Shares** dialog box, + choose one or more SCVMM library shares that this team project + collection will use, and then choose **Add**. + + The verify process now confirms that Team Foundation Server can + connect to the library share. If the verification fails, then a log + is generated. You can view the log to identify the problems and then + fix them. When they are fixed, you can choose + **Verify** to confirm that Team Foundation Server + can connect to the library share. + + 6. To add the library share to each team project in the team project + collection, select the **Auto Provision** + check box for the library share. + + > [!NOTE] + > If you select to auto-provision the library share, Team Foundation + > Server automatically adds the library share to all the team projects in + > this team project collection. For team projects that have not yet been + > created, the library share is added when the New Team Project wizard + > creates the project. For team projects that have already been created in + > this team project collection, the library share is added when these + > settings are saved. If you clear Auto Provision the library share will + > no longer be added to new team projects that you add to your team + > project collection. + + 7. To select the host group to use for a team project collection, + choose **Host Groups**. + + > [!IMPORTANT] + > You must select the host group for each team project collection that you + > want to configure for Lab Management. + + 8. On the **Host Groups** tab, choose + **Add and Verify**. + + 9. In the **Select Host Groups** dialog box, + choose one or more SCVMM host groups that this team project + collection will use, and then choose **Add**. + + 10. To add the host group to each team project in the team project + collection, choose the **Auto Provision** + check box for the host group. + + > [!NOTE] + > If you select to auto-provision the host group, Team Foundation Server + > automatically adds the host group to all the team projects in this team + > project collection. For team projects that have not yet been created, + > the host group is added when the New Team Project wizard creates + > the project. For team projects that have already been created in this + > team project collection, the host group is added when these settings + > are saved. If you clear **Auto Provision**, the + > host group will no longer be added to new team projects that you add to + > your team project collection. + + +<a name="build-test-controller"></a> +## Install a Test Controller + +You can use Lab Management to deploy an application to your SCVMM +environment and also to run tests on that environment. This requires a +test controller. For more information about how to run tests using test +settings and environments, see [Setting Up Test Machines to Run +Tests or Collect Data](https://msdn.microsoft.com/en-us/library/dd293551(v=vs.120).aspx). + +To install the test controller: + + 1. Install the test controller on + *ControllerMachine* or on a + different machine. For information about how to install and + configure a test controller, see [Installing and Configuring + Test Agents and Test + Controllers](https://msdn.microsoft.com/en-us/library/dd648127(v=vs.120).aspx). + + > [!NOTE] + > You must register the test controller with the team project collection + > that you are using for Lab Management. + + 2. Specify the user account to use for communication between the test + agents and build agents and between the test controllers and Team + Foundation Server. + + > [!WARNING] + > The service account that you specify must be a domain account. For + > security reasons, this account must have limited privileges. The account + > that you use must not have any administrative permission or be the + > account that is used by any trusted service. This includes the build + > controller and test controller. + > + > We recommend that you create two accounts to use for this + > service account. For more information about how to switch between these + > two accounts and how existing environments are updated with the service + > account, see [How to: Configure the Lab Service + > Account](https://msdn.microsoft.com/en-us/library/dd692846(v=vs.120).asp + > x). + > + > You must configure the user account for each team project collection + > that you want to configure for Lab Management. diff --git a/docs/tfs-server/admin/config-tfs-resources.md b/docs/tfs-server/admin/config-tfs-resources.md new file mode 100644 index 00000000000..2dcf9e9d12b --- /dev/null +++ b/docs/tfs-server/admin/config-tfs-resources.md @@ -0,0 +1,304 @@ +--- +title: Configure and manage TFS resources +description: Configure and manage TFS resources +ms.assetid: 634a401e-a919-4dac-b964-51ece1bb43c0 +ms.manager: douge +ms.author: billchi +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Configure and manage TFS resources + +**TFS 2017 | TFS 2015 | TFS 2013** + +You configure and manage Team Foundation Server (TFS) and additional +resources to support your teams. These resources include the +application-tier and data-tier server(s), team project collections which +host team projects, and optional resources such as report servers, +SharePoint products, build servers, lab management, and more. For +information on TFS components and architecture, see <span>[Team Foundation Server architecture](../architecture/architecture.md). + +> Important: +> You should not manually modify any of the TFS databases unless you're +> either instructed to do so by Microsoft Support or when you're +> following the procedures described for [manually backing up the databases](backup/manually-backup-tfs.md). Any other modifications can invalidate your service agreement. + +Through the Team Foundation Server Administration Console, you can +manage and monitor your server configuration. Tasks you can accomplish +through the administration console are indicated with this image: ![Team Foundation Server Administration Console](_img/admin-console-button.png). + + +> [!div class="mx-tdBreakAll"]   +> |Application tier  |Data tier  |  +> |-------------|----------| +> |- [Add administration console users](../add-administrator-tfs.md) ![Team Foundation Server Administration Console](_img/admin-console-button.png)<br/>- [Configure an SMTP server to support alerts and feedback requests](setup-customize-alerts.md) ![Team Foundation Server Administration Console](_img/admin-console-button.png)<br/>- [Change cache settings for an application-tier server](change-caching-app-tier.md) ![Team Foundation Server Administration Console](_img/admin-console-button.png)<br/>- [Manage access to features in Team Web Access](../../security/change-access-levels.md)|- [Configure a backup schedule and plan](backup/config-backup-sched-plan.md) ![Team Foundation Server Administration Console](_img/admin-console-button.png)<br/>- [Back up and restore TFS](backup/back-up-restore-tfs.md)<br/>- [Manage TFS reports, data warehouse, and analysis services cube](../../report/admin/manage-reports-data-warehouse-cube.md)<br/>- [Understand backing up Team Foundation Server](backup/backup-db-architecture.md) | + + +> [!div class="mx-tdBreakAll"]   +> |Team project collections  |Team projects  |  +> |-------------|----------| +> |- [Manage team project collections](manage-team-project-collections.md) ![Team Foundation Server Administration Console](_img/admin-console-button.png)<br/>- [Move a team project collection](move-project-collection.md)<br/>- [Split a team project collection](split-team-project-collection.md) |- [Create a team project](../../accounts/create-team-project.md)<br/>- [Delete a team project](../../accounts/delete-team-project.md#delete-team-proj) ![Team Foundation Server Administration Console](_img/admin-console-button.png)<br/>- [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md)<br/>- [Configure or add a project portal](https://msdn.microsoft.com/library/ms242865.aspx)<br/>- [Support rollup of work and other fields](https://msdn.microsoft.com/en-us/library/dn217871(v=vs.120).aspx) | + + +> [!div class="mx-tdBreakAll"]   +> |Reports, documents, and dashboards  |Service accounts, application pools, and websites  |  +> |-------------|----------| +> |- [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md) ![Team Foundation Server Administration Console](_img/admin-console-button.png)<br/>- [Manage the data warehouse and analysis services cube](../../report/admin/manage-reports-data-warehouse-cube.md)<br/>- [Add SharePoint products to your deployment](add-sharepoint-to-tfs.md)|- [Stop and start services, application pools, and websites](stop-start-stuff.md)<br/>- [Service accounts and dependencies in TFS](service-accounts-dependencies-tfs.md)<br/>- [Change the service account or password for TFS](change-service-account-password.md) ![Team Foundation Server Administration Console](_img/admin-console-button.png)<br/>- [Change the service account or password for SQL Server Reporting Services](change-service-account-or-password-sql-reporting.md) | + +## Use the Team Foundation Administration Console to configure and manage your deployment + +The administration console is installed by default on any server on +which you install one or more of the following components: an +application tier for TFS, TFS extensions for SharePoint Products, Team +Foundation Build, and Visual Studio Lab Management + +If all of your components are installed on a single server, the +administration console provides management nodes for all components in +your deployment. If, however, your deployment uses multiple servers, you +must open the console on the server that is running the component that +you want to manage. + +1. If you're not a local administrator on the server where the + console is running and an administrator in TFS, [get those + permissions](../add-administrator-tfs.md). + +2. To open the console: + + - From Start, open the application menu, choose Microsoft Team + Foundation Server, and then choose Team Foundation Server + Administration Console. + + If **Team Foundation Server Administration + Console** doesn't appear in the list of available + applications, you might not have permission to open it. You can + try to open it at a command prompt, but you might not be able to + access some or all of the administration + console's functionality. + + - From the command line, open a Command Prompt window running as + an administrator, and change directories to the TFS tools + directory (by default, *Drive*:\%programfiles%\TFS 12.0\Tools), and enter ```TfsMgmt.exe```. + +**Q: When I open the administration console, why do some of the fields say "Loading"?** + +**A:** On some servers, you might have to wait briefly for all the information to populate throughout the nodes of the console. This is more common on servers with minimal resources or in a multi-server deployment. + +**Q: Why can't I perform one or more tasks from the administration console?** + +**A:** You can only perform those tasks for which you have permissions. While you may have permission to open the admin console, you may not have all the permissions to run a task that the admin console supports. The console can be opened by anyone who has a valid user account on the server or servers on which the console is installed. However, you'll only be able to perform those functions for which you have the required permissions. + + +## View installed updates on your server + +To determine what updates have been installed, you can open the +administration console for Team Foundation or view the version number of +a particular file. + +1. Open the administration console and choose **Application Tier** and review the version numbers + listed for the application-tier and data-tier. + + ![View installed updates](_img/app-tier-version-numbers.png) + +2. To learn when the software was installed, choose **Installed Updates**. + +If the administration console provides isn't available, for example +during a TFS upgrade, you can view the file version number of the **Microsoft.TeamFoundation.Admin.dll** file. + +1. Open Windows Explorer (or File Explorer), and browse to \\Program + Files\\TFS 12.0\\Tools. + +2. Expand the sub-menu for **Microsoft.TeamFoundation.Admin.dll**, and then + choose **Properties**. + +3. Choose the **Details** tab, and review the + information under **File Version**. + + +## Application areas and resource dependencies + +You can add or remove resources to your deployment to better meet the +changing needs of your business and the software projects that you +support with TFS. You can add or remove reporting and Web resources at +any time. You can also use more than one instance of SQL Server to host +the databases for your deployment. For example, you can add a server +that is running SQL Server Reporting Services to your deployment after +you install and initially configure TFS. You can also upgrade the +version of SharePoint Products that supports your deployment and add its +capabilities of that product to the team projects that already exist in +your deployment. + +When you create a team project, you automatically gain access to the +following functions: + +- Web access: provides a web interface to TFS that grants access to + team projects, Agile planning and tracking tools, version control, + and builds. For an overview, see [Work in Team Web Access](../../connect/work-web-portal.md) (TWA). + +- Source control repository using Team Foundation [version + control](../../git/overview.md) or [Git repositories](../../git/gitquickstart.md). + +- Work item tracking: teams can create work items and work item + queries to track, monitor, and report on the development of a + product and its features. A work item is a database record that + stores the definition, assignment, priority, and state of work. Your + team can create only those types of work items that are defined in + the process template that is used to create the team project or + types that are added to the team project after it is created. + + Team members can work in TWA or Team Explorer. To learn more about + these and other clients that connect to TFS, see [Choose the Team Foundation client to support your tasks](https://msdn.microsoft.com/library/ms181304.aspx). + +The following table indicates the additional servers and functionality +that you must configure for your team to have access to the +corresponding feature. You can add resources before or after you have +created your team project. + +| Feature area | Required resources | Related topics | Notes | +| --- | --- | --- | --- | +| Feedback requests and email alerts | SMTP Server | [Configure an SMTP server to support alerts and feedback requests](setup-customize-alerts.md) | The SMTP server you configure supports all team projects created under the project collections defined on the application-tier. If the SMTP server isn't configured, then links may not appear to access the [Request feedback](../../work/connect/get-feedback.md) and to set [Alerts](../../work/track/alerts-and-notifications.md). | +| **Builds** | Team Foundation Build | [Configure and manage your build system](../../build-release/overview.md) | The **Builds** page lists the build definitions defined for your team project. This page appears only when Team Foundation Build is installed and configured. Team Foundation Build enables your team to create and manage product builds. For example, a team can run daily builds and post them to a shared server. Team Foundation Build also supports build reports about the status and quality of each build. </br> Access to Team Foundation Build Service requires that the team project collection has been configured to use a build controller. Each build controller is dedicated to a single team project collection. The controller accepts build requests from any team project in a specified collection. See <span>[Build the application](https://msdn.microsoft.com/en-us/library/ms181709). | +| **Documents** (team project portal) | SharePoit Products | [Add SharePoint products to your deployment](add-sharepoint-to-tfs.md) </br> [Configure a Default Location for Team Project Portals](https://msdn.microsoft.com/en-us/library/dd386357) | The **Documents** page appears only when your team project has been configured with SharePoint Products. After the team project is created, you can configure a SharePoint site or another web location as the project portal. You may need to [configure dashboard compatibility](config-ent-sharepoint0710-dashboards.md) and [configure an enterprise application definition](../install/sharepoint/config-enterprise-app-def.md). See also [Share information using the project portal](https://msdn.microsoft.com/en-us/library/ms242883(v=vs.120).aspx). | +| Excel reports | SharePoint Products </br> SQL Server Analysis Services | [Add Sharepoint products to your deployment](add-sharepoint-to-tfs.md) </br> [Add a report server](../../report/admin/add-a-report-server.md) | Microsoft Excel reports are uploaded to the **Document** node Documents folder when you configure your team project with a SharePoint site. With these reports you can track your team project's burn rate, bug backlog, software quality, test progress, and other metrics. Many of these reports display within your project's dashboards. In addition to the SharePoint Products dependency, Excel reports depend on your team project collection that hosts your team project has been configured with both SQL Server Analysis Services. </br> For an overview of the default Excel reports, see [Excel reports](https://msdn.microsoft.com/en-us/library/dd997876) or [Excel reports (CMMI)](https://msdn.microsoft.com/en-us/library/ee461589). </br> If your team project doesn't have a SharePoint site, you can still use Excel to create status and trend reports. See [Creating Reports in Microsoft Excel by Using Work Item Queries](../../report/excel/create-status-and-trend-excel-reports.md). | +| **Reports** | SQL Server Analysis Services </br> SQL Server Reporting Services | [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md) | The **Report** page appears only when the team project collection that hosts your team project has been configured with both SQL Server Reporting Services and SQL Server Analysis Services. This page provides access to Report Manager and the default and custom reports that you upload to the server that hosts SQL Server Reporting Services. </br> For an overview of the default reports, see [Reporting Services Reports](https://msdn.microsoft.com/en-us/library/dd380714). | +| Remote-site | Team Foundation | [How to: Install Team Foundation Proxy and set up a remote site](../install/install-proxy-setup-remote.md) </br> [Configure Visual Studio to connect to TFS Proxy](../../connect/connect-team-projects.md) | If some team members are located remotely from the main location for version control, you may want to install and configure Team Foundation Server Proxy to support them. TFS Proxy manages a cache of downloaded version control files in the location of the distributed team, which significantly reduces the bandwidth that is needed across wide area connections. </br> If clients are configured to use Team Foundation Server Proxy, management of the files is transparent to the user. Any metadata exchange and file uploads continue to interface directly with TFS. See [Connect to team projects in Team Foundation Server](). | +| Virtual environments | Visual Studio Lab Management | [Configure Lab Management for SCVMM environments](config-lab-scvmm-envs.md) | By using Lab Management, your team can create, assign, and track virtual environments to support application development, deployment, and tests. Testing teams can test applications by using Microsoft Test Manager when their team project is configured to use these virtual environments. | +|Automate deployments | Release Management | [Automate deployments with Release Management](https://msdn.microsoft.com/en-us/library/dn217874.aspx) | You can support a rapid release cadence and manage simultaneous releases using Release Management. Set up release paths that represent your stages from development to production. Run actions to deploy your app to an environment for that stage. | +| Synchronize with Project Server (deprecated for TFS 2017) | TFS-Project server Integration | [Synchronize Team Foundation Server with Project Server](https://msdn.microsoft.com/en-us/library/gg455680.aspx) | To support data to flow from work items TFS to tasks in enterprise project plans in Project Server, you install Team Foundation Server Extensions for Project Server on the server hosting Project Server. This integration enables project managers and software development teams to use the tools that they prefer, work at the level of precision that supports their needs, and share information transparently. | +| Capture production incidents | Preemptive Analytics | [Preemptive Analytics](https://www.preemptive.com/pa) | With PreEmptive Analytics for Team Foundation Server, development teams can capture production incidents (unhandled, caught, and thrown exceptions) and create and update TFS work items based on custom rules and thresholds. </br> You configure PreEmptive Analytics through the Team Foundation Administrator Console. | + + +## Q & A + +**Q: Can I rename a team project or team project collection?** + +**A:** You can't rename a team project. You can +rename a collection by first detaching the collection, editing its +settings, and then attaching the collection. See [Manage team project collections](manage-team-project-collections.md). + +**Q: How does TFS manage its services?** + +**A:** TFS and the products it integrates with +include several services and service accounts which run on some or all +of the logical tiers and physical computers that compose a deployment. +You can use the same account for all of these service accounts, or you +can use different accounts. Your choice of account or accounts to use +depends on the configuration of your deployment, your security needs, +and what components you have installed. For clarity, each service +account is referred to separately by using placeholder names. + +To learn more, see <span>[Service accounts and dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md). + +**Q: How do I scale my deployment?** + +**A:** You can [move TFS to a new server](move-clone-hardware.md) +or add [additional application-tier servers](backup\restore-application-tier-server.md). You can +also [Move Team Foundation Server from one environment to another](move-across-domains.md). + +**Q: How do I monitor my deployment?** + +**A:** You can monitor TFS activity using the following tools: + +- From the administration console Logs page, you can open a log file + generated when configuring or servicing TFS. + +- From the web administration page for the application-tier server, + you can view activity logs and job monitoring charts. + + ```http://MyServer:8080/tfs/\_oi/``` + + To learn more, see this blog post: [New tools for TFS + Administrators](http://blogs.msdn.com/b/granth/archive/2013/02/13/tfs2012-new-tools-for-tfs-administrators.aspx). + +- From the Control Panel context of TWA, you can export an audit log + of all users and their access levels. See [Change access levels](../../security/change-access-levels.md). + +For additional monitoring tips, see this blog post: [What does a well +maintained Team Foundation Server look +like?](http://blogs.msdn.com/b/granth/archive/2013/10/08/what-does-a-well-maintained-team-foundation-server-look-like.aspx) + +**Q: What do I need to know about maintaining multiple servers?** + +**A:** Depending on how you initially installed +and configured Visual Studio Team Foundation Server (TFS), you might +need to manage it across one or multiple servers to maintain and +operate your deployment. For example, the following illustration shows +the logical architecture of a deployment of TFS that is integrated with +both SQL Server Reporting Services and SharePoint Products: + +![Database relationships with SharePoint Products](_img/db-relationships-with-sharepoint.png) + +In this example, you have to manage the configuration of the components, +the users, the groups, and permissions across several servers. You must +configure firewalls or other devices to allow network traffic on the +ports that are required for communication between the servers. You have +to make sure that all services that the deployment requires are running +and configured to start automatically. Finally, you must make sure that +the service account that TFS uses is fully trusted by every computer in +the deployment. + +See also this blog post: [What does a well maintained Team Foundation +Server look +like?](http://blogs.msdn.com/b/granth/archive/2013/10/08/what-does-a-well-maintained-team-foundation-server-look-like.aspx) + +**Q: Where can I learn more about TFS requirements?** + +**A:** See one or more of the following topics: + +- The installation guide includes details about these elements: + + - [system requirements](../../accounts/requirements.md) + + - [SQL Server requirements](../../accounts/requirements.md#sql-server) + + - [Active Directory requirements](../../accounts/requirements.md) + + - [SharePoint Products requirements](../../accounts/requirements.md#sharepoint) + + - [account requirements](../../accounts/requirements.md#accounts) + + - [language requirements](../../accounts/requirements.md#languages) + + - [port requirements](../architecture/required-ports.md). + +- You can also learn about requirements and infrastructure in these reference topics: + + - [Team Foundation Server architecture](../architecture/architecture.md) + + - [Naming restrictions in Team Foundation](../../reference/naming-restrictions.md) + + - [Service accounts and dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md) + +- For licensing information, read the [licensing whitepaper](https://www.microsoft.com/download/details.aspx?id=13350). + + +**Q: Are there any restrictions I should be aware of when maintaining TFS?** + +A: Yes. As mentioned above, you should never manually modify TFS +databases, because that can invalidate your service agreement, block +upgrades and patches, and result in data loss or corruption. There are +only two circumstances where you should ever consider modification: + +- You are instructed to do so by Microsoft Support. + +- Your deployment needs require you to manually back up your + TFS databases. In that case, you should only modify the databases as + described [here](backup/manually-backup-tfs.md). + +**Q: What other resources are available?** + +**A:**The following resources and tools are available: + +- You can post questions or search for answers in the MSDN forum: + [Team Foundation Server - Setup and + Administration](https://social.msdn.microsoft.com/forums/vstudio/home?forum=tfsadmin) + +- [Team Foundation Server + Blog](http://go.microsoft.com/fwlink/?LinkId=254496) + +- [Microsoft Visual Studio Team Foundation Server 2013 Power + Tools](http://go.microsoft.com/fwlink/?LinkId=320602) includes the + TFS Best Practices Analyzer, a Process Template editor, and + additional tools. diff --git a/docs/tfs-server/admin/manage-file-types.md b/docs/tfs-server/admin/manage-file-types.md new file mode 100644 index 00000000000..7959968078e --- /dev/null +++ b/docs/tfs-server/admin/manage-file-types.md @@ -0,0 +1,150 @@ +--- +title: Managing File Types for Team Foundation Server +description: Managing File Types for Team Foundation Server +ms.assetid: e88eaec2-9e63-4fa4-94e6-6c95bae963ce +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Managing File Types for Team Foundation Server + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +File type definitions allow you to customize the way Team Foundation version control processes files with specific extensions. By defining a file type, you can disable files with certain extensions from being merged and thereby, prevent multiple users from checking them out in parallel. + +> [!NOTE] +> By default, file merging and multiple check-out is enabled. + +> [!NOTE] +> Multiple check-out can be disabled at the team project level. + +## File Type Properties + +A Team Foundation file type definition consists of three properties. The most important of these properties is File Extension, which is the unique identifier for a file type. + +| Property | Example | +| --- | --- | +| Name | Visual Basic File | +| File Extension | .vb | +| Enable File Merging and Multiple Checkout | Yes | + +As a Team Foundation administrator, you might want to specify that files of certain types, such as binary Microsoft Excel files (*.xls) for which a merging tool does not exist, cannot be merged when conflicts are detected and can only be checked out by one user at a time. You can control this by selecting **Enable File Merging and Multiple Checkout** in the **Edit File Type** dialog box. For more information, see [Edit File Type Association with Team Foundation Version Control](#edit-file-type). If a file type does not exist for a given extension, files with that extension can be merged. + +## File Ecodings + +In addition to these basic file type properties, Team Foundation also tracks the file encoding for each file on the version control server. You can override the default encoding for a file from the version control Properties window opened from Source Control Explorer, or using the command line interface. For more information, see [Configure Version Control File Encoding](#config-file-encodings) and [Checkout and Edit Commands](../../tfvc/checkout-or-edit-command.md). + + +<a name="edit-file-type"></a> +## Edit File Type Association with Team Foundation Version Control + +File type definitions let you customize the way the Team Foundation version control system processes files that have specific extensions. By defining a file type, you control whether files that have a particular extension can have internal keywords expanded during a check-in, and whether multiple users can modify a specific file in parallel. The following procedure demonstrates how to change a file type extension association in version control. + +**Required Permissions:** + +To edit a file type association, you must have the Edit server-level information permission set to Allow. For more information, see Team Foundation Server Permissions. + +To change a file type association in version control: + + 1. On the **Team** menu, click **Team Foundation Server Settings**, and then **Source Control File Types�**. The **File Types** dialog box displays a listing of the file extensions currently associated with version control. + + 2. Click **Edit�**. + + 3. On the **Edit File Type** dialog box, in the **Name** box, type a description for the file type; for example, Word Documents to add Microsoft Word document file association to version control. + + 4. In the **File Extension** box, type the file type extension; for example, doc for Microsoft Word document files. + + 5. Optionally select the **Enable file merging and multiple checkout** box (selected by default). + + 6. Click **OK** to return to the **File Types** dialog box and see that the new entry is reflected. + +> [!TIP] +> You can specify multiple file type extension associations with a single name; for example you could add **dot** to the Word Documents name entered earlier. + + +<a name="config-file-encodings"></a> +## Configure Version Control File Encoding + +Team Foundation version control properties include general file and folder information and the file encoding type. The properties also list the pending check-in status, security information, and branching history. For more information, see [View Version Control File and Folder Properties](https://msdn.microsoft.com/en-us/library/ms245468(v=vs.110).aspx). + +> [!NOTE] +> Team Foundation version control properties are not viewed in Visual Studio's Properties Window. They are viewed in their own **Properties** dialog box, as described in the procedure below. + +**Required Permissions:** + +To perform these procedures, you must have the Read and the Check out permissions set to Allow. For more information, see [Team Foundation Server Permissions](../../security/permissions.md). + +To configure version control file encoding: + + 1. Open Source Control Explorer. On the View menu, click Other Windows, and then click Source Control Explorer. + + 2. In Source Control Explorer, click the Workspace drop-down list box in the toolbar, and select the workspace you want to use. + + 3. Go to a file for which you want to view properties, right-click, and then click Properties. + + 4. In the Properties dialog box, select the General tab. + + 5. In the General tab, click Set Encoding. + + 6. In the Set Encoding dialog box, use the Encoding drop-down list box to select the encoding base type you want to be used for the file, for example, utf-8. + + > **Tip:** + > Click **Detect** to have the system detect the file encoding scheme used with the file and populate the list box. + + 7. Click **OK**. + +> [!NOTE] +> The set encoding results in a pending change that must be checked in. + + +<a name="add-file-types"></a> +## Add File Type Association with Team Foundation Version Control + +File type definitions allow you to customize the way the version control system processes files with specific extensions. By defining a file type, you control whether files with a given extension allow multiple users to be able to modify a specific file in parallel. The following procedure demonstrates how to add a file type extension association in version control. + +**Required Permissions:** + +To add a file type association, you must have the **Edit server-level information** permission set to **Allow**. For more information, see [Team Foundation Server Permissions](../../security/permissions.md). + +To add a file type association to version control: + + 1. On the **Team** menu, click **Team Foundation Server Settings**, and then click **Source Control File Types**. The **File Types** dialog box is displayed listing the file extensions currently associated with version control. + + 2. Click **Add**. + + 3. From the **Add File Type** dialog box, in the **Name** box, type a description for the new file type, for example, **Word Documents**, to add a Microsoft Word document file association to version control. + + 4. In the **File Extension** box, type or click the file type extension, for example **doc**, for Microsoft Word document files. + + 5. Optionally, select the **Enable file merging and multiple check out** check box (selected by default). + + 6. Click **OK** to return to the **File Types** dialog box with the new entry reflected. + +> [!TIP] +> You can specify multiple file type extensions to be associated with a single name, for example you could add **dot** to the **Word Documents** name entered in this procedure. + + +<a name="remove-file-types"></a> +## Remove a File Type Associated with Team Foundation Version Control + +File type definitions let you customize the way the version control system handles files that have specific extensions. By defining a file type, you control whether files that have a particular extension can have internal keywords expanded during a check-in, and whether multiple users can modify a specific file in parallel. For information about adding file type associations to version control, see [Add File Type Association with Team Foundation Version Control](#add-file-types). The following procedure demonstrates how to remove a file type extension associated with version control. + +**Required Permissions:** + +To remove a file type association, you must have the **Edit server-level information** permission set to Allow. For more information, see [Team Foundation Server Permissions](../../security/permissions.md). + +To remove a file type associated with version control: + + 1. On the **Team** menu, click **Team Foundation Server Settings**, and then click Source Control File Types. + + The **File Types** dialog box appears. It displays a list of the file name extensions that are currently associated with version control. + + 2. Highlight the file type extension you want to remove and then click **Remove**. + + The entry is erased and no longer appears in the **File Types** dialog box. + + 3. Click **OK**. + diff --git a/docs/tfs-server/admin/manage-team-project-collections.md b/docs/tfs-server/admin/manage-team-project-collections.md new file mode 100644 index 00000000000..b6a891f4f5c --- /dev/null +++ b/docs/tfs-server/admin/manage-team-project-collections.md @@ -0,0 +1,397 @@ +--- +title: Manage team project collections in Team Foundation Server +description: Manage team project collections in Team Foundation Server +ms.assetid: 784e9934-ff35-4657-b4c6-6402d6374d1d +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Manage team project collections in Team Foundation Server + +**TFS 2015** | **TFS 2013** + +When your Team Foundation Server (TFS) hosts multiple team projects, you +can manage them more efficiently by grouping them together and assigning +the same resources to them. For example, you can group projects that +have similar requirements or objectives, such as all team projects that +access a particular code base. You can then manage the group of team +projects as an autonomous resource with its own user groups, server +resources, and maintenance schedule. + +A group of team projects is called a *team +project collection*. When you install TFS, a default collection is +created to contain all team projects. When you create a collection, you +specify the logical and physical resources that team projects within +that collection can use. All the artifacts and data that those team +projects use are stored in the single database of the collection. + +The following illustration shows how databases for team project +collections are integrated with the logical architecture of TFS. When +you create a team project, you specify the collection where its data +will be stored. + +![Example: possible location of collection databases](_img/collection-db-locs.png) + + +## View information or configure existing team project + +1. If you haven't been added as a TFS administrator, [get added now](../add-administrator-tfs.md). + + You must be a member of the local Administrators group on the server + where you want to open the console, and either a member of the Team + Foundation Administrators group or your **Edit + Server-Level Information** permission must be set to **Allow**. + +2. Log on to the application-tier server for TFS, open the + administration console for TFS, and open the Team Project + Collections node. + + ![View team project collections](_img/view-proj-collections.png) + + To learn how to open the admin console, see [Use the Team Foundation Administration Console to configure and manage your deployment](config-tfs-resources.md). + +3. Highlight the name of a collection and review the information + provided from the various tabs. Some tabs only appear if the + corresponding application has been configured to support the + application-tier in the TFS deployment. + + You can perform the following tasks from the corresponding tab. + + | Tab | Tasks | + | --- | --- | + | **General** | <ul><li> **Start Collection** or **Stop Collection**: Start or stop a collection. Team projects become unavailable when you stop a collection. You typically stop a collection to support maintenance operations, such as moving or splitting a collection. </li><li> If the collection is started, only **Stop Collection** appears. If the collection is stopped, only *Start Collection** appears. Starting or stopping a collection can take several minutes to complete. You might need to choose **Refresh** to display the change in state. </li><li> **Edit settings**: Edit the collection's description or configuration. </li><li> **Group Membership**: Add or remove users or groups as members of a collection. To learn more, see [Set administrator permissions for team project collections](../../accounts/add-administrator-project-collection.md). </li><li> **Administer Security**: Manage the permissions of a collection group. To learn more, see [Permission reference for Team Foundation Server](../../security/permissions.md). </li></ul> | + | **Status** | View an activity log or rerun a job. | + | **Team Projects** | <ul><li> View the team projects defined for a collection and [Delete a team project](../../accounts/delete-team-project.md). </li><li> To learn more about team projects, see [Create a team project](../../accounts/create-team-project.md). </li></ul> | + | **Reports Folder** | <ul><li> Configure the report server for use by the collection. </li><li> When you edit the default folder location, the operation will fail if you type the path of a folder that does not exist on the server and you do not have permission to create a folder on that server. You must specify an existing folder if you do not have permissions to create folders on that server. </li><li> To remove the default location for report subfolders, choose **Clear Configuration**. </li><li> Removing the configuration removes the reporting functionality for all existing and future team projects in the collection. </li><li> This tab only appears when you've [added a report server to TFS](../../report/admin/add-a-report-server.md). </li></ul> | + | **SharePoint Site** | <ul><li> View, configure, or remove the default root location for where team project portals are created. The **Create New Team Project Wizard** creates team project portals at this location. </li><li> If the **SharePoint Web Application** list is empty, the application-tier hasn't been configured with any applications. </li><li> This tab only appears when you've configured the application-tier with SharePoint Products. See [Add SharePoint products to your deployment](add-sharepoint-to-tfs.md). </li></ul> | + + + +## Create a team project collection + +Before creating a team project collection, jump to this [section to learn more about the pros and cons of creating multiple team project collections](#pros_cons). + +1. If you haven't been added as an administrator to TFS, [get added now](../add-administrator-tfs.md). + + You must be a member of the local Administrators group on the server + where you want to open the console, and either a member of the Team + Foundation Administrators group or your **Edit Server-Level Information** permission must be set to **Allow**. + +2. From the administration console, open the **Team + Project Collections** page and choose **Create Collection**. + + ![Create a team project collection](_img/create-team-proj.png) + +3. Follow the guidance provided by the **Create Team + Project Collection** wizard. + + For the **Name**, specify a unique name with + no more than 64 characters (the shorter the better), and don't + specify slashes, or other special characters listed in [Naming restrictions in Team Foundation](../../reference/naming-restrictions.md). + + The wizard supports configuration of the following resources. Some + resources can only be configured if the application-tier server that + hosts the collection has been previously configured to support the + corresponding application. + + **Data Tier or SQL Server instance** + + 1. In **SQL Server Instance**, specify the + name of the TFS data-tier server. If you want to use a named + instance to host the database for this team project collection, + you must also specify the name of the instance as in the + following example: + + *ServerName* **\\** *InstanceName* + + 2. Choose **Create a new database for this + collection** if you want to create a database for + the collection. This option requires that the service account + for the Visual Studio Team Foundation Background Job Agent uses + has permissions to create a database on the instance of + SQL Server. + + Or, choose **Use this existing database** + if you want to use a database that already exists, and specify + the name of the database in the text box. This option requires + that an empty database exists on the named SQL Server instance + and you have write permissions. + + **SharePoint web application** + + 1. **SharePoint web application** appears if + you have configured the application-tier with a SharePoint web + application, otherwise it is disabled. To configure it later, + see [Add SharePoint products to your deployment](add-sharepoint-to-tfs.md). + + 2. Choose **Next** if you want to use the + default option to create a site collection. Choose this option + unless your business infrastructure requires that you use an + existing site collection. This option will create a SharePoint + site collection with the name of the collection used as the name + of the sub-site of the root site that is configured in the + SharePoint web application. + + This option requires the TFS service account to be a member of + the Farm Administrators group. If it isn't, you can't create + a site collection. + + 3. Or, to use an existing site collection that a member of the Farm + Administrators group created for you, expand **Advanced configuration**, choose **Specify a path to an existing SharePoint + site**, and specify the relative path of the site + collection that was created for you. + + Choose **Verify Path**, and??if the path + is correct, choose **Next**. + + **SQL Server Reporting Services** + + 1. **Reports** appears if you have + configured the application-tier to use SQL Server Reporting + Services, otherwise it is disabled. To configure it later, see + [Add a report server](../../report/admin/add-a-report-server.md). + + 2. Review the information for the server and the folder that will + host reports, and choose **Next**. This + option requires your user account to have permissions to create + a folder on the server that is running Reporting Services. + + Unless security restrictions in your business infrastructure + prevent the automatic creation of a folder as part of the + wizard, you should use the default option to create a folder. + + 3. If you must use a folder that an administrator created for you + on the server that is running Reporting Services, expand **Advanced configuration**, choose **Specify a path to an existing folder**, and + specify the relative path of the folder that has been created + for you. + + Choose **Verify Path**, and if the path + is correct, choose **Next**. + + **Lab Management** + + **Lab Management** appears if you have + configured the application-tier to use Lab Management for the + collection, otherwise it is disabled. To configure it later, see + [Configure Lab Management for SCVMM environments](config-lab-scvmm-envs.md). + + If you do not use Lab Management, skip to **Verification process**. + + If you do use Lab Management, follow the steps provided in **To configure Lab Management for each team project + collection** as described in [Configure Lab Management for SCVMM environments](config-lab-scvmm-envs.md). + + **Verification process** + + 1. In **Readiness Checks**, review the + status of the checks. + + A blue underlined **Error** indicator + appears next to any configuration that contains an error. You + can choose the indicator for a detailed message about + the problem. You must address all errors before you + can continue. + + After all readiness checks have passed, choose **Create**. + + 2. The process of creating a team project collection starts. + + After the wizard finishes, choose **Close**. + + +## Detach or delete a team project collection + +You detach a team project collection when you want to perform a +maintenance operation, such as moving or splitting a collection. Teams +can't access team projects or source code when you detach the +collection. + +You delete a collection when you no longer need the data stored in the +team projects defined in the collection. The three steps to delete a +collection are (1) detach the collection, (2) delete the collection +database, and (3) delete the SharePoint site collection that supported +the deleted collection. + +**Detach the collection** + +1. From the administration console, highlight the name of the + collection that you want to delete, and then choose **Detach Collection**. + + ![Detach a team project collection](_img/detach-collection.png) + +2. Follow the guidance provided by the **Detach Team + Project Collection Wizard**. + + (Optional) On the **Provide a servicing message + for the team project collection** page, in **Servicing Message**, specify a message for users + who might try to connect to projects in this collection. + +3. When all the readiness checks have completed successfully, choose + **Detach**. + + On the **Monitor the team project collection + detach progress** page, when all processes have completed, + choose **Next**. + +4. (Optional) On the **Review supplemental + information for this team project collection** page, note the + location of the log file. + +**Delete the database and the SharePoint site collection** + +1. Open SQL Server Management Studio, connect to the instance of the + SQL Server Database Engine that hosts the collection database, and + expand the instance. + + Highlight the name of the collection database (by default, + TFS\_*CollectionName*), and then delete + the database. + + For more information, see [How to: Delete a Database](http://go.microsoft.com/fwlink/?LinkId=178820). + +2. Open SharePoint Central Administration, and delete the site + collection that supported the deleted collection. + + For more information, see [Delete a site collection in SharePoint 2013](https://msdn.microsoft.com/library/cc262392.aspx). + +The team project collection no longer appears in the list of collections +in the administration console. + + +## Q & A + +<a name="pros_cons"></a> +**Q: What are the pros and cons of creating multiple team project collections?** + +If your development efforts will benefit from the ability to branch and +merge code or you must query the status of work items that relate to the +same code, you should consolidate your team projects in the same team +project collection. + +**A: Advantages for creating more than one collection** + +You can better separate the operational needs for one code base or other +grouping of projects from the operational needs for another grouping. +Because the data for each collection is stored in its own database, you +can independently manage many aspects of each collection separately from +other collections in your deployment. For example, you can stop and +start each collection individually. Therefore, you can schedule +maintenance operations for each collection at different times. + +Grouping team projects into more than one collection provides the +following advantages: + +- **Greater flexibility and scalability in managing + and distributing databases and resources**. A group of related + team projects share reports, work items, and process guidance, as + well as a code base. + + By creating a database for each collection, teams and administrators + can perform the following tasks: + + - Build, branch, merge, and iterate an autonomous code base + according to the needs of the projects within the collection. + Code dependencies outside the collection can be + formally managed. + + - Back up and restore the data for each collection independently + of other collections. + + - Store all collection databases on a single instance of SQL + Server, or distribute the databases across one or + more instances. + + - Detach a collection, back it up, and then restore it to a + different deployment of TFS. + + - Reassign resources to better meet the demands of projects as + they increase in size over time. + +- **Increased operational security**. Because + each collection has its own set of users and permissions, isolating + different code bases can be isolated under different collections. + Administrators can add users only to the collection that contains + the project or projects that pertain to that particular code base. + +- **Increased capability to support custom workflow + processes**. Each collection manages process templates, work + item types, link types, global lists, and work item fields separate + from other collections. By separating team projects that have + different workflow processes into different collections, you only + expose those customizations needed to those team projects within + a collection. + +**A: Disadvantages of creating more than one collection** + +The main disadvantage of creating more than one team project collection +is that you increase the complexity of your deployment of TFS. + +- You must backup and restore the database for each collection, and + other management and maintenance tasks also increase in proportion + to the number of collections that you have. For example, you must + manage the set of users and permissions for each team project + collection individually. + +- Teams cannot link work items across collections. + +- Teams cannot branch or merge code across collections. + +- Teams cannot create queries across collections. + + +**Q: What objects or resources are managed at the collection level?** + +**A:** Each team project belongs to a collection. +In addition, the following objects are managed at the collection level: + +- **Source control (TFVC)**: [File types](https://msdn.microsoft.com/library/ms181457(v=vs.100).aspx) + and [enabling/disabling asynchronous checkout in server workspaces](../../tfvc/decide-between-using-local-server-workspace.md). + +- **Work item tracking**: [Process templates](../../work/guidance/manage-process-templates.md), + [work item types](../../work/customize/add-modify-wit.md), + [link types](https://msdn.microsoft.com/en-us/library/dd728085(v=vs.120).aspx), + [work item fields](../../work/customize/add-modify-field.md), + [global lists](../../work/reference/define-global-lists.md), + and [global workflow](https://msdn.microsoft.com/en-us/library/gg534720(v=vs.120).aspx). + + All fields defined for all team projects defined within a collection + are managed or configured for a collection. You can define no more + than 1,024 work item fields in the same team project collection, and + you can set no more than 1,024 fields to be reportable in all team + project collections. + +- **Dev-Test-Ops**: + - TFS 2015: [Agent queues](../../build-release/concepts/agents/pools-queues.md) + - TFS 2013: [XAML build controllers](https://msdn.microsoft.com/library/dd793166%28v=vs.120%29.aspx) + +- **Security**: [Collection-level groups and permissions](../../security/permissions.md). + +**Q: How does TFS support reports from data stored for different team collections?** + +**A:** A single relational data warehouse +contains all reportable data from all team projects that are defined in +all project collections for a TFS deployment. Data from that warehouse +is then processed and written to the OLAP cube. Because data is +collected into a single data warehouse, you can report across multiple +team project collections. + +To create or customize reports, you must [add user accounts to the TfsWarehouseDataReader role](../../report/admin/grant-permissions-to-reports.md). +Report authors need read access to both the relational data warehouse +and Analysis Services cube. These accounts can view data for all team +projects that are hosted in all team project collections in the TFS +deployment. There is no way to limit access to a team project or +collection. + +**Q: How do I scale my deployment with collections?** + +**A:** See [Move a team project collection](move-project-collection.md) +or [Split a team project collection](split-team-project-collection.md). + +**Q: Is there a command line tool for managing collections?** + +**A:** You can use the **TFSConfig Collection** +command to attach, detach, delete, or clone a team project collection. +See [Collection command \[TFSConfig\]](../command-line/tfsconfig-cmd.md#collection). diff --git a/docs/tfs-server/admin/modify-remove-access-shareport-tfs.md b/docs/tfs-server/admin/modify-remove-access-shareport-tfs.md new file mode 100644 index 00000000000..3cd3dba8b3a --- /dev/null +++ b/docs/tfs-server/admin/modify-remove-access-shareport-tfs.md @@ -0,0 +1,141 @@ +--- +title: Modify or Remove Access Between a SharePoint Web Application and TFS +description: Modify or Remove Access Between a SharePoint Web Application and Team Foundation Server +ms.assetid: 0ba027bb-bfb9-490e-9220-2fe98230ee40 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Modify or Remove Access Between a SharePoint Web Application and Team Foundation Server + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +After you grant access between a SharePoint web application and Visual +Studio Team Foundation Server, you can modify or delete either or both +access grants. Over time, you might need to modify the access grants in +your deployment to reflect changes in your organization. For example, if +you change your deployment to use HTTPS and Secure Socket Layer (SSL) +instead of HTTP, you must update the access grant for the web +application to reflect these changes. + +> [!NOTE] +> When you remove an access grant, you should verify whether the service +> account for the SharePoint web application is being used by another web +> application in the deployment. If it is not, you should remove the +> account from the SharePoint Web Application Services group. + +**Required Permissions** + +To perform these procedures, you must be a member of the +**Team Foundation Administrators** group or your +**Edit Server-Level Information** permission must be +set to **Allow** in Team Foundation Server. You +must also be a member of the local +**Administrators** group on each server that hosts the +administration console for Team Foundation. For more information about +permissions, see [Team Foundation Server Permissions](../../security/permissions.md). + +To modify or delete access from a SharePoint web application to Team Foundation Server: + +1. On the server that is running the Team Foundation Server Extensions + for SharePoint Products, open the administration console for Team + Foundation, and expand the tree. + + For more information, see [Open the Team Foundation Administration Console](../command-line/open-admin-console.md). + +2. Under **Team Foundation**, choose + **Extensions for SharePoint Products**. + +3. In the **Grant access to a SharePoint Web + application for Team Foundation Server** pane, highlight the + access grant that you want to modify, and then perform one of the + following sets of steps: + + - Choose **Modify access**, change the + access grant, and then choose **OK**. + + - Choose **Remove access**, and in the + confirmation dialog box, choose **Yes**. + +To modify or delete access from Team Foundation Server to a SharePoint web application: + +1. On the server where you have installed the application tier for Team + Foundation Server, open the administration console for Team + Foundation, and expand the tree. + + For more information, see [Open the Team Foundation Administration Console](../command-line/open-admin-console.md). + +2. Under **Team Foundation**, choose + **SharePoint Web Applications**. + +3. In the **SharePoint Web Applications** pane, + highlight the access grant that you want to modify or delete, and + perform one of the following steps: + + - Choose **Change**, change the access + grant, and then choose **OK**. + + > [!NOTE] + > Any changes that you make to the access settings for the web application + > might have a significant impact on the team projects and team project + > collections that use this SharePoint web application. On the + > **Dependents** tab, you can review the list of + > collections and projects that use this web application. You should + > consider verifying whether each of these sites still operates as you + > expect after you modify the web application. + + - Choose **Remove**. In the + **Remove SharePoint Web Application** dialog + box, choose **Yes** if you are sure that + you want to remove access to the web application. If you are not + sure, choose **No**. + + > [!IMPORTANT] + > When you remove a web application, you will have a significant impact on + > any team projects and team project collections that use this SharePoint + > web application. If you remove access for a SharePoint web application, + > any team project or team project collection that uses this web + > application will lose whatever SharePoint libraries or team project + > portals that were hosted on that web application. Before you remove a + > web application, you should make sure that you understand what projects + > and collections will be affected. To review the list of collections and + > projects that use this web application, you highlight the access grant, + > choose **Change**, and choose the + > **Dependents** tab. Before you remove access for the + > web application, you should consider verifying whether any of these + > sites is still needed. + + +## Remove a service account for a SharePoint web application from SharePoint Web Application Services: + +When you remove a SharePoint web application or change the service +account that a web application uses, you might still need to manually +remove its service account. If a service account is no longer used by +any SharePoint web application in the deployment, you should remove that +service account from the **SharePoint Web Application +Services** group in Team Foundation Server. + +1. On the server where you have installed the application tier for Team + Foundation Server, open the administration console for Team + Foundation, and expand the tree. + + For more information, see [Open the Team Foundation Administration Console](../command-line/open-admin-console.md). + +2. Under **Team Foundation**, choose + **SharePoint Web Applications**. + +3. In the **SharePoint Web Applications** pane, + in the **Service Accounts for SharePoint Web + Applications** section, highlight the service account that you + want to remove, and choose **Remove**. + + > [!IMPORTANT] + > You will not be asked to verify the removal of the service account. Make + > sure that you have clicked the service account that you intend to remove + > before you choose **Remove**. If you remove the + > wrong service account, the portals that use the SharePoint web + > application might stop functioning correctly. You can re-add the service + > account at any time. diff --git a/docs/tfs-server/admin/move-across-domains.md b/docs/tfs-server/admin/move-across-domains.md new file mode 100644 index 00000000000..a1a85b93deb --- /dev/null +++ b/docs/tfs-server/admin/move-across-domains.md @@ -0,0 +1,218 @@ +--- +title: Move Team Foundation Server from one environment to another +description: Move Team Foundation Server from one environment to another +ms.assetid: ff582394-a3d6-4a1d-86d2-ff4a0c9f7e30 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Move Team Foundation Server from one environment to another + +**TFS 2015** | **TFS 2013** + +The most common environment-based move scenario is changing the domain of the TFS deployment, whether it's a domain name change or going from a workgroup to a domain. + +> [!IMPORTANT] +> In some situations you might want to change the domain of a TFS deployment as well as its hardware. Changing the hardware is a restoration-based move, and you should never combine the two move types. First complete the [hardware move](move-clone-hardware.md), and then change the environment. +> +> Additionally, changing identities in TFS as part of an environmental move is the aspect that most often causes conflicts or problems. The [Identities Command](../command-line/tfsconfig-cmd.md#identities) is a powerful tool, but it has certain limitations. Read up about it as part of planning your move. To help ensure a successful move, make sure that you understand the following requirements: +> * Once a user account is present in TFS, it cannot be removed or have another account mapped to it. For example, if you are moving DomainA/UserA to DomainB/UserB, the Identities command would only work to migrate the user if DomainB/UserB is not already present in TFS. +> * Because the members of the local Administrators group are automatically added to TFS, make sure to remove any accounts that you want migrated from that group before you change the domain or environment. +> +> For further background information, [go here](http://blogs.msdn.com/b/vasu_sankaran/archive/2010/06/07/identity-change-in-tfs-2010.aspx) for a detailed description of how identity changes in TFS work, including limitations of the tool. + + +We'll walk through the steps to change the environment of your TFS deployment in the following sections: + +1. [Check permissions and accounts](#check-permissions-accts) +2. [Stop TFS services](#stop-tfs-svcs) +3. [Back Up Data](#backup-dbs) +4. [Join TFS to its new domain](#join-tfs-to-domain) +5. [Configure SharePoint Products for the new environment](#config-sharept-products) +6. [Move TFS user and service accounts](#move-tfs-user-svc-accts) +7. [Configure Reporting and Analysis Services](#config-reporting-analysis-svcs) +8. [Restart TFS services](#restart-tfs-svcs) + +<a name="check-permissions-accts"></a> +## Check permissions and accounts + +In order to successfully change the environment for TFS, you'll need to be an administrator on the local computer as well as for TFS and all of the software on which your deployment depends: SQL Server, reporting, SharePoint Products (if your deployment uses reporting or SharePoint), and any other software with which your deployment interoperates, such as Project Server. However, all members of the local Administrators group are automatically included in TFS, which can cause problems when trying to migrate accounts. Therefore, you should use an account that you do not intend to migrate as part of the environmental move. You might consider adding a special administrative account just for the move, and using that account to perform the migration. + +### To verify administrator-level permissions + +- Make sure the account you're using is a member of the following groups: + - Servers: Administrators (local Administrators group or equivalent) + - TFS: Team Foundation Administrators and Admin Console Users + - SQL Server: sysadmin + - SharePoint Products: Farm Administrators (if your TFS deployment integrates with SharePoint Products) + +If you aren't a member of one or more of these groups, [get permissions now](../add-administrator-tfs.md). + +Now that you're sure you're using an account that has all the permissions needed, it's time to start checking accounts to see if there might be any conflicts with names or groups in the environment to which you'll be moving. We already know that accounts that are members of the local Administrators group can't be migrated, so let's remove those first. + +### Remove accounts to be migrated from local Administrators group + +- Open the local Administrators group and remove any accounts that you wish to migrate to the new environment. Repeat this step for any other groups that might be affected. + +Now check the list of identities in the current TFS environment and look for any potential problems with groups or individual user accounts that might exist in the new environment. + +> [!TIP] +> Consider creating a table or migration map of identities to be moved as part of the environmental move, including details of which accounts might not be able to be migrated automatically. + +### Check identities + +1. On the application-tier server for Team Foundation, open a Command Prompt window with administrative permissions, navigate to *%ProgramFiles%***\\Microsoft Visual Studio 12.0 Team Foundation Server\\Tools**, and run the following command to view the identities currently in the system: + + TFSConfig Identities + +2. A list of identities will display. Check these users and groups to ensure that there are no potential duplicates or problems with identities in the environment to which you'll move TFS, and take steps to mitigate any potential conflicts. + +<a name="stop-tfs-svcs"></a> +## Stop TFS services + +Stopping the services helps ensure that users cannot make changes to work items or check in source code to the original deployment during or after the move process. + +1. On the TFS application-tier computer, open a Command Prompt window, and change directories to *Drive*:\\%programfiles%\\TFS 12.0\\Tools. + +2. Type the following [TFSServiceControl](../command-line/tfsservicecontrol-cmd.md) command: + + **TFSServiceControl quiesce** + +<a name="backup-dbs"></a> +## Back up the databases and the SQL Server Reporting Services encryption key + +1. Open the administration console for TFS and on the **Scheduled Backups** page, take a full backup. The backup will back up everything you configured for backup in your backup plan, but it will do so immediately, not according to the time scheduled in the plan. If your deployment uses reporting, you can back up the encryption key as part of this backup set. + + ![You can close the window while the job completes](_img/ic688711.png) + + (If you don't have backups configured, you'll have to [create a plan](backup/config-backup-sched-plan.md) before you can take a full backup.) + +2. Once the backup completes, verify that the backup is available on the storage device or network share, and that you can access this backup from the new hardware. + +<a name="join-tfs-to-domain"></a> +## Join TFS to its new domain + +1. On each server, open the properties for the computer. + +2. Change the settings for the computer to the domain or workgroup to which you want to join the server. + + If you are prompted to provide the user name and password of an account that has permissions to join this computer to the domain, provide the appropriate credentials. + +3. Restart the computer for the domain change to take effect. + + > [!NOTE] + > After you restart the computer, a warning might appear that services or drivers could not be started. Continue with the next procedure. + +<a name="config-sharept-products"></a> +## Configure SharePoint Products for the new environment + +If you are changing the environment to one where there is no trust with your previous environment, you might need to configure SharePoint Products before it will operate correctly. Information about users imported from directory services is available on SharePoint sites from the People Picker Web control. Site administrators and other users use the People Picker to select people and groups when assigning permissions. When information about users is located on multiple forests or on a forest without a trust relationship for all users, additional steps might be necessary to ensure that all people and groups are available from this Web control. + +Skip this procedure if you are not using SharePoint Products in your deployment, if you're new environment has a two-way trust to the old environment, or if no errors for your SharePoint Web application appear in the administration console for Team Foundation. + +1. On every server that is part of the SharePoint farm that supports your deployment of Team Foundation Server, open a Command Prompt window with administrative permissions, and change directories to %programfiles%\\Common Files\\Microsoft Shared\\Web Server Extensions\\15\\BIN. + +2. Type the following command, where *Key* is the encryption key you want to use in your deployment of SharePoint Products: + + **stsadm.exe -o setapppassword -password** *Key* + + > [!NOTE] + > This key is an encryption string that is used to encrypt the password for the account that is used to access the forest or domain. The encryption string must be the same for every server in the farm, but a unique string should be used for each farm. + +3. Type the following command, where *domain:DNSName* is the target forest or domain and its DNS name, *user,password* is the username and password for an account that has access to the target forest or domain, and *WebApp* is the name of the Web application that supports your deployment of Team Foundation Server: + + **stsadm.exe -o setproperty -pn peoplepicker-searchadforests -pv** *domain:DnsName***,***user***,***password* **-url http://***WebApp* + +4. Type the following command, where *URL* is the URL for a site collection that supports a team project collection, *Port* is the port number that is assigned to that site collection, and *UserName* is the user name of the account that will act as the owner for that site collection: + + **stsadm.exe -o siteowner -url http://** *URL* **:** *Port* **-ownerlogin** *UserName* + +5. Repeat the previous step for each site collection that your deployment of Team Foundation Server uses. + +<a name="move-tfs-user-svc-accts"></a> +## Move TFS user and service accounts + +As mentioned at the beginning of this topic, moving accounts is when you're most likely to encounter difficulties, particularly if you haven't carefully planned for user migration. The TFSConfig Identities command cannot migrate any account to an account that already exists in TFS. + +If account names are the same in both domains, and the only difference is the domain name, then you can use the batch mode of TFSConfig Identities to change all the identities at once. Otherwise you must change identities individually and specify a different target account name, as detailed below. + +1. On the application-tier server for Team Foundation, open a Command Prompt window with administrative permissions, navigate to *%ProgramFiles%***\\Microsoft Visual Studio 12.0 Team Foundation Server\\Tools**, and run the following command to change the service IDs (SIDs) for the service account to the new domain: + + TFSConfig identities /change /fromdomain:OldComputerorDomainName /todomain:NewDomainName /account:OldTFSServiceAccount /toaccount:NewTFSServiceAccount + + > [!WARNING] + > If your service account was a system account such as Network Service, you cannot directly migrate the service account, because a system account with the same name exists in the new environment. You'll have to perform a two-stage process change. See the example in [Identities Command](../command-line/tfsconfig-cmd.md#identities). + +2. To migrate all accounts that have the same name in the new environment, type the following command: + + TFSConfig Identities /change /fromdomain:OldDomainName /todomain:NewDomainName + + This will batch process the accounts. + +3. if you're new domain contains one or more identities where the name changes between environments, you'll need to manually update the SIDs for each of those identities. For example, if Christie Church's user account was Fabrikam\\CChurch in the previous environment, but is NewFabrikam\\ChristieC in the new environment, you would have to manually update her SID. For every account that has this requirement, type the following command: + + TFSConfig Identities /change /fromdomain:OldDomainName /todomain:NewDomainName /account:OldAccountName /toaccount:NewAccountName + +4. Now run the following command to update the service account: + + TFSConfig Accounts /change /AccountType:ApplicationTier /account:AccountName /password:Password + +5. If your deployment uses reporting, run the following command to update the data source account used for reporting: + + TFSConfig Accounts /change /AccountType:ReportingDataSource /account:AccountName /password:Password + +6. If your deployment uses Team Foundation Server Proxy, run the following command to update the service account used for the proxy: + + TFSConfig Accounts /change /AccountType:Proxy /account:AccountName /password:Password + + > [!NOTE] + > If you are moving to a non-trusted domain, you might also need to manually add users and groups to teams, projects, collections, and Team Foundation Server itself. For more information, see [Add users to team projects](../../accounts/add-users.md), [Set administrator permissions for team project collections](../add-administrator-tfs.md), and [Set administrator permissions for Team Foundation Server](../add-administrator-tfs.md). + +7. If your deployment is integrated with Project Server, you might need to perform additional steps to configure the service accounts with the permissions required for operation. For more information, see [Assign permissions to support TFS-Project Server integration](https://msdn.microsoft.com/library/gg412653) and [ConfigureTFS-Project Server integration](https://msdn.microsoft.com/library/gg412647). + +<a name="config-reporting-analysis-svcs"></a> +## Configure Reporting and Analysis Services + +You can skip this procedure if you are not using reporting as part of your deployment. + +If you renamed a report server as part of this type of move, you must redirect Team Foundation Server to the report server at its new location. You must also restart the warehouse and manually rebuild the database for Analysis Services. + +1. Open the administration console for Team Foundation, go to the Reporting node, and edit the settings. + + ![Reports still point to the old server](_img/ic682727.png) + +2. Change the values on all three tabs so that they include the new name of the server. Make sure that you provide the correct information for the data sources account in the new environment. + + ![Make sure the information is correct on all 3 tabs](_img/ic688492.png) + +3. Choose **Start Jobs** to restart reporting. + +4. Choose **Start Rebuild** to rebuild the warehouse. + +## Configure backups + +If the network share name or storage device changed with the domain name change, you'll need to update the scheduled backup plan to point to those renamed resources. + +- In the administration console, go to the Scheduled Backups node and reconfigure the scheduled backups to back up the TFS databases on the new server. For more information, see [Create a backup schedule and plan](backup/config-backup-sched-plan.md). + +<a name="restart-tfs-svcs"></a> +## Restart TFS services + +Now that you've updated TFS with all the information for the new environment, restart the services. + +1. On the TFS application-tier computer, open a Command Prompt window with administrative permissions and change directories to *Drive*:\\%programfiles%\\TFS 12.0\\Tools. + +2. Type the following [TFSServiceControl](../command-line/tfsservicecontrol-cmd.md) command: + + **TFSServiceControl unquiesce** + +## Q & A + +**Q: I want to change the physical server or servers for my deployment, not domains. Can I do that?** + +**A:** Yes. That's called a hardware-based move, and the steps can be found [here](move-clone-hardware.md). You should not try to combine an environment-based move with a hardware-based move. First complete the hardware move, and then change the environment. + + diff --git a/docs/tfs-server/admin/move-clone-hardware.md b/docs/tfs-server/admin/move-clone-hardware.md new file mode 100644 index 00000000000..976aafcb111 --- /dev/null +++ b/docs/tfs-server/admin/move-clone-hardware.md @@ -0,0 +1,362 @@ +--- +title: Move Team Foundation Server from one hardware configuration to another +description: Move Team Foundation Server from one hardware configuration to another +ms.assetid: b9af3864-d28a-42df-aa43-6b1f48b5adf0 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Move or Clone Team Foundation Server from one hardware to another + +**TFS 2015** | **TFS 2013** + +You can move or clone your deployment of Team Foundation Server (TFS) software. You move TFS from one machine to another by restoring it to new hardware (called a restoration-based move). For example, you might want to move TFS to a server with greater capacity or improved processing speed. When you move to a new server you do not lose any of your project history. + +To clone your TFS deployment, you perform the same steps as a move plus a few additional ones. + +You perform a move when you plan to discontinue use of the original hardware and TFS deployment. You perform a clone when you intend to continue using the original TFS instance. + +> [!IMPORTANT] +> In some situations you might want to change the domain of a TFS deployment as well as its hardware. Changing the domain is an environment-based move, and you should never combine the two move types. First complete the hardware move, and then change the environment. + +Moving TFS requires several steps. We'll walk through them in the following sections: + +- [Check permissions](#check-permissions) + +- [Back up the databases and the encryption key](#backup-db-encryption-key) + +- [Install and configure SQL Server on the new data-tier server](#install-config-sql-svr-data-tier) + +- [Install and configure software on the new application-tier server](#install-config-sw-app-tier) + +- [Restore the TFS databases](#restore-tfs-dbs) + +- [(Clone option) Reconfigure server IDs and remap databases](#clone-option) + +- [Redirect SharePoint Products to the new location of the content database](#redirect-sharept-new-locs) + +- [Configure the application tier](#install-app-tier) + +- [Update Team Foundation Server URLs](#update-tfs-urls) + +- [Update all service accounts](#update-svc-accts) + +- [Update build servers](#update-build-svrs) + +- [Configure SharePoint Web Applications in TFS](#config-sharept-web-apps) + +- [Configure Reporting and SQL Server Analysis Services](#config-reporting-analysis-svcs) + +- [Verify permissions for users, groups, teams, and service accounts](#verify-perms) + +- [Refresh the caches on client computers](#refresh-caches-clients) + +- [Notify users](#update-users) + +- [Configure backups](#config-bkups) + + + +<a name="check-permissions"></a> +## Check your permissions before you begin + +In order to successfully move TFS, you'll need to be an administrator on both sets of hardware (the old and the new). In addition, you'll need to be an administrator (or have the equivalent permissions) for TFS and all of the software on which your deployment depends: SQL Server, reporting, SharePoint Products (if your deployment uses reporting or SharePoint), and any other software with which your deployment interoperates, such as Project Server. + +**Make sure you are a member of the following groups**: + + - Servers: Administrators (local Administrators group or equivalent) + + - TFS: Team Foundation Administrators and Admin Console Users + + - SQL Server: sysadmin + + - SharePoint Products: Farm Administrators (if your TFS deployment integrates with SharePoint Products) + +If you aren't a member of one or more of these groups, [get permissions now](../add-administrator-tfs.md). + + + +<a name="backup-db-encryption-key"></a> +## Back up the databases and the SQL Server Reporting Services encryption key + +1. Open the administration console for TFS and on the **Scheduled Backups** page, take a full backup. The backup will back up everything you configured for backup in your backup plan, but it will do so immediately, not according to the time scheduled in the plan. If your deployment uses reporting, you can back up the encryption key as part of this backup set. + + ![You can close the window while the job completes](_img/ic688711.png) + + (If you don't have backups configured, you'll have to [create a plan](backup/config-backup-sched-plan.md) before you can take a full backup.) + +2. Once the backup completes, verify that the backup is available on the storage device or network share, and that you can access this backup from the new hardware. + +<a name="install-config-sql-svr-data-tier"></a> +## Install and configure SQL Server on the new data-tier server + +- Install SQL Server on the new server and make sure that it is operational. If your previous deployment used reporting, make sure that you include the reporting and analysis services components. You must install the same version and edition that you used previously, including service pack and cumulative update levels. + + ![Install SQL Server 2008 R2 - Features](_img/ic562054.png) + + As an alternative, you can create an instance of SQL Server on a server that already has a matching version installed and restore the TFS databases to that instance, but that will require more post-restoration configuration. + + For more information about options for installing and configuring SQL Server, [go here](../install/sql-server/install-sql-server.md). + + After installing SQL Server, if your deployment includes reporting, open SQL Server Management Studio and detach the ReportServer and ReportServerTempDB databases. Otherwise you might not be able to restore these databases with the backup you created for the TFS databases. + + ![Existing databases must be detached before restore](_img/ic688712.png) + + + +<a name="install-config-sw-app-tier"></a> +## Install and configure software on the new application-tier server + +To configure a new server or servers for TFS, you must first install and configure the software that is required to support it. This software includes the following components: + +- a supported operating system for your deployment configuration + +- a supported version of SharePoint Products (if your deployment is integrated with SharePoint Products and you want to move it to the same server as TFS) + +> [!NOTE] +> Unlike installing a new deployment of TFS, you will not be able to install SharePoint Products as part of the Standard Single-Server or Advanced options when moving to a new server. You must manually install the same version and edition of SharePoint Products that you used in your previous deployment, or follow the guidance for your version and edition of SharePoint Products to move its deployment to the new hardware separately. + +- Install and configure Windows, IIS (if not configured by default), and SharePoint (if using) in the new environment, and make sure that the server and its software are operational.  + + For more information, see [the system requirements for Team Foundation Server](../../accounts/requirements.md) and [Move SharePoint to new hardware for TFS](../install/sharepoint/move-sharepoint-new-hardware.md). + + + +<a name="restore-tfs-dbs"></a> +## Restore the TFS databases + +In order to restore the TFS databases using the restore tool, you must install but not configure TFS on the new data-tier server, and then use the restore function in the Scheduled Backups node. + +If you want to restore TFS databases manually using SQL Server restoration tools, you can, but that is a more difficult procedure. In addition, you will have to manually unquiesce the databases in the new deployment. The restore wizard in TFS automatically does this for you as part of its restoration process, but that functionality is not part of SQL Server's restoration tools. + +If you installed SharePoint Foundation 2013 using the steps in [Move SharePoint to new hardware for TFS](../install/sharepoint/move-sharepoint-new-hardware.md), and you plan on using that server as the server for TFS, the installation bits and administration console will already be present on the server and you can skip the first two steps in this next procedure. + +1. Launch the TFS installation media. On the **Team Foundation Server Setup** page, choose **Install**. + +2. When the installation completes, the **Team Foundation Server Configuration Center** opens. Close it. + + The administration console opens automatically in an unconfigured state. This is expected. + +3. To start the Restore wizard, open the administration console for TFS and open **Scheduled Backups**. + + ![Start the Restore wizard](_img/ic654273.png) + +4. Specify the path to the backup set and choose the set you created after quiescing the old deployment. + + ![Choose the network path, then the restore set](_img/ic664997.png) + +5. Complete the wizard and restore the databases to the new instance of SQL Server. + + ![The databases are restored to the new server](_img/ic664998.png) + + + +<a name="redirect-sharept-new-locs"></a> +## Redirect SharePoint Products to the new location of the content database + +If your deployment uses SharePoint Products, you've already installed the same version and edition of SharePoint Products that you used in your previous deployment by following the steps in [Move SharePoint to new hardware for TFS](../install/sharepoint/move-sharepoint-new-hardware.md), as mentioned above. Now, after you have restored the old deployment's content database (WSS\_Content) to the new server as part of the restoration set, you must redirect the server that is running SharePoint Products to the new location of that database. This database must be operational before you can reconfigure Team Foundation Server with the new locations of its databases. + +1. Open a Command Prompt as an administrator on the new hardware that is running SharePoint Foundation. + +2. Change directories to *Drive*:\\Program Files\\Common Files\\Microsoft Shared\\Web Server Extensions\\15\\bin and run stsadm.exe with the following parameters, where *SharePointFoundationServerName* is the name of the server where you installed SharePoint Foundation 2013, and *SQLServerName* is the name of the server where you restored the WSS\_Content database as part of restoring TFS databases: + + stsadm.exe –o addcontentdb –url http://SharePointFoundationServerName/sites -databasename WSS_Content -databaseserver SQLServerName + +3. After that command completes successfully, type the following command, where *Domain\\UserName* is the account you used to install and configure SharePoint Foundation 2013 for use with TFS: + + stsadm.exe -o addpermissionpolicy -url http://SharePointFoundationServerName -userlogin Domain\UserName -permissionlevel "full control" + + + +<a name="clone-option"></a> +## (Clone option) Reconfigure server IDs and remap databases + +Perform the next set of steps on the new application-tier server if you intend to continue using the original TFS instance. These steps are necessary to avoid the risk of corruption of one or both deployments. If both servers are live, you could end up with corruption, particularly if they are pointing to the same SharePoint or reporting resources. + +1. Open a Command Prompt window as an administrator and change directories to Drive:\%programfiles%\TFS 12.0\Tools. Open a Command Prompt window and enter: + +2. Run the [TFSConfig PrepareClone](../command-line/tfsconfig-cmd.md#prepareclone) command to remove information about scheduled backups, SharePoint, and reporting resources. + + TFSConfig PrepareClone /SQLInstance:ServerName /DatabaseName:DatabaseName /notificationURL: ApplicationTierURL + +3. Run the [TFSConfig ChangeServerID](../command-line/tfsconfig-cmd.md#changeserverid) command to change the server GUIDs that are associated with the databases. GUIDs must be unique within TFS deployment. + + TFSConfig ChangeServerID /SQLInstance:ServerName] /DatabaseName:ConfigurationDatabaseName [/ProjectCollectionsOnly] [/ConfigDBOnly] [/usesqlalwayson] + +4.Run the [TFSConfig RemapDBs](../command-line/tfsconfig-cmd.md#remapdbs) command to redirect the cloned TFS to its databases. + + TFSConfig RemapDBs /DatabaseName:ServerName;DatabaseName /SQLInstances:ServerName1,ServerName2 [/AnalysisInstance:ServerName] [/AnalysisDatabaseName:DatabaseName] [/preview] [/continue] [/usesqlalwayson] + + + +<a name="install-app-tier"></a> +## Configure the application-tier server + +1. From the administration console for TFS, choose Configure Installed Features to launch the configuration center. + +2. Launch the Application-Tier Only wizard, and in Databases, specify the new SQL Server instance where you restored the TFS databases. Choose the Tfs\_Configuration database from the list. + + ![Select the SQL Server and database backup set](_img/ic682729.png) + +3. Before you close the final page of the wizard, look for the “i” symbol. It signifies information that you might want for future reference. The final page also includes the location of the configuration log. + + ![Note any issues and the log file location](_img/ic688120.png) + +<a name="update-tfs-urls"></a> +## Update Team Foundation Server URLs + +1. Go to the application-tier node and look at the notification and Team Web Access URLs. Note that they still point to the location of the old deployment. Update them. + + ![The notification and Web URLs are out of date](_img/ic688121.png) + +2. After updating the URLs with the name of the new server, review the information to make sure that it is correct. + + ![Server URL still uses localhost](_img/ic682730.png) + + + +<a name="update-svc-accts"></a> +## Update all service accounts + +You must update the service account for Team Foundation Server (TFSService) and the data sources account (TFSReports). Even if these accounts have not changed, you must update the information to help ensure that the identity and the format of the accounts are appropriate for the new server. + +1. Open a Command Prompt window as an administrator and change directories to *Drive*:\\%programfiles%\\TFS 12.0\\Tools. + +2. At the command prompt, type the following command to add the service account for Team Foundation, where *DatabaseName* is the name of the configuration database (by default, TFS\_Configuration): + + **TfsConfig Accounts /add /AccountType:ApplicationTier /account:** *AccountName* **/SQLInstance:** *ServerName* **/DatabaseName:** *DatabaseName* + +3. At the command prompt, type the following command to add the data sources account: + + **TfsConfig Accounts /add /AccountType:ReportingDataSource /account:** *AccountName* **/SQLInstance:***ServerName* **/DatabaseName:***DatabaseName* + + For more information, see [Accounts Command](../command-line/tfsconfig-cmd.md#accounts). + + + +<a name="update-build-svrs"></a> +## Update build servers + +Now you'll need to redirect your build servers to point to the moved TFS deployment. + +1. On each build server, open the administration console and stop the build service. + +2. In the properties for the build service, update the communications properties. + + ![Stop the service, then make changes](_img/ic689361.png) + +<a name="config-sharept-web-apps"></a> +## Configure SharePoint Web Applications + +If your deployment uses SharePoint Products and you moved SharePoint Foundation 2013 as part of the TFS move, you might need to redirect TFS to the new web application. Even if you don't, you should still repair the connection to help ensure proper performance. + +If you're not using SharePoint Products as part of your deployment, or if your deployment will continue to use the old SharePoint server, you can skip this procedure. + +- Open the administration console and navigate to SharePoint Web Applications. If the web application still refers to the old site, or if you're new deployment uses a different web application than the one listed, choose Change and update the settings. + + ![TFS still redirects to the old application](_img/ic688122.png) + + If the information is correct, or after you have corrected it, choose Repair Connection. This helps ensure that everything is working properly. + +<a name="config-reporting-analysis-svcs"></a> +## Configure Reporting and Analysis Services + +If your deployment uses a report server, you must redirect Team Foundation Server to its location, restart the warehouse, and manually rebuild the database for Analysis Services. If you don't use reporting, skip this procedure. + +1. Go to the Reporting node. The listed report server values are the old ones, not the new, so edit them. + + ![Reports still point to the old server](_img/ic682727.png) + +2. Change the values on all three tabs to point to the new server. Make sure that you provide the correct information for the data sources account in the new deployment. + + ![Make sure the information is correct on all 3 tabs](_img/ic688492.png) + +3. Choose **Start Jobs** to restart reporting. + +4. Choose **Start Rebuild** to rebuild the warehouse. + + + +<a name="verify-perms"></a> +## Verify permissions for users, groups, and service accounts + +After you move to new hardware, make sure that all users, groups, and service accounts for your deployment are configured with the permissions that they require to function correctly on each server. Some permissions, such as additional permissions in SQL Server or on the local computer, cannot be automatically migrated. For example, Team Foundation administrators must be members of the local **Administrators** group on the application-tier server to open the administration console, so you must add manually them to that group. + +- Log on to the server and make sure that users, groups, and service accounts are configured with the permissions required for operation. Manually spot-check membership in project groups and teams, and verify that those groups and teams have the permissions you expect. + +- Browse to a team project collection and make sure that all projects in that collection appear as expected, and that users in those projects can appropriately access their work items. + +- Open Team Web Access and verify that team sites and teams appear as expected. + +Not sure what groups and permissions to expect? For more information, see [Add users to team projects](../../accounts/add-users.md), [Set administrator permissions for team project collections](../add-administrator-tfs.md), [Set administrator permissions for Team Foundation Server](../add-administrator-tfs.md), and [Service accounts and dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md). + +<a name="refresh-caches-clients"></a> +## Refresh the data cache on client computers + +- Log on to the server and use the **ClientService** Web service to force clients to update the cache for tracking work items and for Team Foundation version control. + + http://ServerName:8080/tfs/WorkItemTracking/v3.0/ClientService.asmx + + For more information, see [Refresh the data caches on client computers](backup/refresh-data-caches.md). + + If you want to refresh the entire cache for all users the next time they log on, use the [witadmin rebuildcache](rebuild-client-cache.md) command. + + > [!NOTE] + > If you restored your databases to a different point in time, you will also need to refresh the version control cache as documented in [Refresh the data caches on client computers](backup/refresh-data-caches.md). + + + +<a name="update-users"></a> +## Notify users + +Now that you've moved TFS, you'll need to tell your users how to connect to the moved deployment. Specifically, you'll need to give them the following information: + +- The name of the new server and the URL for Team Web Access, so that they can reconnect to their projects + +- The new database names for reporting, if reporting is part of your deployment + +- The new URL for SharePoint, if SharePoint is part of your deployment + +- If they are members of a team project that uses Git, instructions for how to update every clone they have locally for every repository for that project. Specifically, they will have to run the following command for every clone: + + git remote set-url <remote name> <new URL> + + Users can see what the URL is for each clone by browsing the team project from the Explorer tab. + + ![Copying the URL to manually clone a repository in](_img/ic675405.png) + + + +<a name="config-bkups"></a> +## Configure backups + +Although you had backups scheduled for your old deployment, those scheduled backups weren't changed to back up your moved deployment. You'll need to configure them. + +- In the administration console, go to the Scheduled Backups node and reconfigure the scheduled backups to back up the TFS databases on the new server. For more information, see [Create a backup schedule and plan](backup/config-backup-sched-plan.md). + + + +## Q & A + +**Q: I want to change domains, not physical servers. Can I do that?** + +**A:** Yes. That's called an environment-based move, and the steps can be found [here](move-across-domains.md). You should not try to combine an environment-based move with a hardware-based move. First complete the hardware move, and then change the environment. + +**Q: I just realized that I want to keep using my old TFS after moving to new hardware. Can I do that?** + +**A:** Yes, but it's very important that you perform additional steps right away. Ideally, you should have performed these steps as part of the move or the cloning steps. That is the best way to avoid the risk of corruption of one or both deployments. If both servers are live, you could end up with corruption, particularly if they are pointing to the same SharePoint or reporting resources. + +To fix this problem: + +1. Run the [TFSConfig PrepareClone](../command-line/tfsconfig-cmd.md#prepareclone) command on the new server + +2. Run the TFSConfig [ChangeServerID Command](../command-line/tfsconfig-cmd.md#changeserverid) on the new server + +3. Run the TFSConfig [RemapDBs Command](../command-line/tfsconfig-cmd.md#remapdbs) on the new server + +**Q: I have a deployment that integrates with Project Server. Do I have to perform any extra steps to get it to work with my moved TFS?** + +**A:** Yes, after you complete the hardware move you'll need to use the **TFSAdmin ProjectServer** **/RegisterPWA** command with the **/tfs**, **/force**, and **/pwa** options to re-register TFS with Project Server. You can read more about TFS integration with Project Server [here](https://msdn.microsoft.com/library/vstudio/gg412647(v=vs.120).aspx). diff --git a/docs/tfs-server/admin/move-project-collection.md b/docs/tfs-server/admin/move-project-collection.md new file mode 100644 index 00000000000..50e29517404 --- /dev/null +++ b/docs/tfs-server/admin/move-project-collection.md @@ -0,0 +1,272 @@ +--- +title: Move a team project collection +description: Move a team project collection +ms.assetid: b5d79dcb-826e-4eb4-ab8e-de222d9b9974 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Move a team project collection + +**TFS 2015** | **TFS 2013** + +You can move a team project collection from one deployment of Team Foundation Server (TFS) to another. For example: + +- You have more than one deployment of TFS in your organization, and you want to move a collection to another deployment to better align with your business needs. + +- You want to move the collection to a remote office that has its own deployment of TFS. + +- You want to expand your deployment of TFS by adding another instance of SQL Server to it, and you want to distribute existing collections between the instances. + +- You need to incrementally upgrade your deployment by detaching an individual team project collection from a deployment of TFS running an earlier version, and then move it to a server running the current version of TFS. (One common reason for this is some teams might need to migrate to a newer version of TFS, while others must remain on an older version for tools or projects reasons.) In this scenario, you must also then upgrade each team project within the collection by using the Configure Features wizard. For more information, see [Configure features after a TFS upgrade](../../work/customize/configure-features-after-upgrade.md). + +The steps to move a collection will depend on the particular configuration of the deployment that hosted the collection and the deployment to which you move it. For example, if you move a collection to a new domain, you will need to add users from that domain to the appropriate groups at the collection level and the project level. Similarly, if you move a collection to a deployment of TFS that uses a different SharePoint Web application, you'll either need to move the site collection database that supports the collection to that SharePoint Web application, or you must add the SharePoint Web application that supports the collection to the deployment of TFS to which you have moved it. + +Here's how to move an entire team project collection. If you want to move part of a collection, see [Split a Team Project Collection](split-team-project-collection.md). + +**In this topic** + +1. [Detach the collection](#detach-coll) + +2. [Back up the collection database](#backup-coll-db) + +3. [Move the collection database](#move-coll-db) + +4. [Attach the collection](#attach-coll) + +5. [Configure the moved team project collection](#config-moved-team-coll) + +6. [Configure projects](#config-projs) + +[Q & A](#q-and-a) + +- My TFS deployment uses reporting. How do I move reports when I move a collection? + +- How do I move a collection that uses SharePoint Products? + +- How do I move a team project collection that includes Lab Management? + +- Can I move a team project collection that's integrated with Project Server? + +- I moved my collection to a TFS that has users or groups that shouldn't have access to projects or functions in some of the team projects, but need access to other projects in the moved collection. Can I keep them from seeing projects I don't want them to see? + +**Before you begin** + +Before you start your move, make sure that you're an administrator on the servers and in the software used by both the deployment you're moving from, and the one you're moving to. If you're not an administrator, [get added as one](../add-administrator-tfs.md). + +<a name="detach-coll"></a> +## 1. Detach the collection + +Before you move a collection, you must first detach it from the deployment of TFS on which it is running. It's very important that you not skip this step. When you detach a collection, all jobs and services are stopped, and then the collection database is stopped. In addition, the detach process copies over the collection-specific data from the configuration database and saves it as part of the team project collection database. This configuration data is what allows the collection database to be attached to a different deployment of TFS. If that data is not present, you cannot attach the collection to any deployment of TFS except the one from which it originated. + +> [!NOTE] +> Detaching a collection prevents users from accessing any projects in that collection. + +1. Open the administration console for Team Foundation on the server that hosts the collection that you want to move, and in **Team Project Collections**, highlight the collection that you want to move. + +2. On the **General** tab, choose **Detach Collection**. + + ![On the General tab, select then detach](_img/ic738718.png) + + The **Detach Team Project Collection Wizard** opens. + +3. (Optional) On the **Provide a servicing message for the team project collection** page, in **Servicing Message**, provide a message for users who might try to connect to projects in this collection. + +4. Choose **Next**. + +5. On the **Review settings that will be used to detach team project collection** page, review the details. + +6. If you want to changes any settings, choose **Previous**. If they appear to be correct, choose **Verify**. + +7. When all the readiness checks have completed successfully, choose **Detach**. + +8. On the **Monitor the team project collection detach progress** page, when all processes have completed, choose **Next**. + + ![The wizard shows you progress](_img/ic738719.png) + +9. (Optional) On the **Review supplemental information for this team project collection** page, either choose or note the location of the log file. + +10. Choose **Close**. + + The team project collection no longer appears in the list of collections in the administration console. + + ![TFS admin console doesn't show detached](_img/ic738720.png) + +<a name="backup-coll-db"></a> +## 2. Back up the collection database + +After you have detached the collection, you must back up its database to move it to the other server. To perform this task, you must use the tools that are provided with SQL Server. + +![Use the tools provided with SQL Server](_img/ic738721.png) +- For information about this task, see the following page on the Microsoft website, and make sure to choose the version of SQL Server that matches your deployment: [Backing Up and Restoring Databases in SQL Server](http://go.microsoft.com/fwlink/?LinkId=115430) and [Create a backup schedule and plan](backup/config-backup-sched-plan.md). + +> [!IMPORTANT] +> You can only restore a database to the same version or a more recent version of SQL Server. You can't restore a SQL Server database to an earlier version of the product </br> +> If your original deployment used the Enterprise or Datacenter editions of SQL Server, and you want to restore databases to a server running Standard edition, you must use a backup set that was made with SQL Server compression disabled. Unless you disable data compression, you will not be able to successfully restore Enterprise or Datacenter edition databases to a server running Standard edition. To turn off compression, follow the steps in the [Microsoft Knowledge Base article](http://go.microsoft.com/fwlink/?LinkId=253758). + +<a name="move-coll-db"></a> +## 3. Move the collection database + +As part of moving the collection, you must restore, copy, or otherwise move the collection database to an instance of SQL Server that is configured to support the deployment of TFS to which you want to move the collection. You can choose whichever method you prefer to move the database. + +![Use the tools provided with SQL Server](_img/ic738722.png) + +### For more information about moving a database to another instance of SQL Server, see: + +- [Use the Copy Database Wizard](http://go.microsoft.com/fwlink/?LinkId=267144) + +- [Copy Databases with Backup and Restore](http://go.microsoft.com/fwlink/?LinkId=267145) + +<a name="attach-coll"></a> +## 5. Attach the collection + +After you restore the collection database, you can attach the collection to the deployment of TFS to which you want to move it. If the deployment you're moving to uses reporting, a reporting folder and default reports will be built for the collection you're attaching as part of the process. + +> [!NOTE] +> Warnings will appear when you attach the collection if your deployment uses SharePoint Products and the service account for TFS is not a member of the Farm Administrators group, or if your deployment uses reporting and you've already created a reporting folder and path that is identical to the previous deployment's folder and path. This behavior is expected, and you can proceed. + +1. Open the administration console for Team Foundation on the server that hosts the application tier for the deployment to which you want to move the collection. + +2. Choose **Team Project Collections**, and then choose **Attach Collection**. + + ![Use the TFS administration console](_img/ic738723.png) + + The **Attach Team Project Collection Wizard** opens. + +3. On the **Select the team project collection database to attach** page, in **SQL Server Instance**, provide the name of the server and the instance that hosts the collection database, if it is not already listed. + + ![Make sure the SQL Server instance is correct](_img/ic738724.png) + +4. In the **Databases** list, choose the collection database that you want to attach, and then choose **Next**. + +5. On the **Enter the team project collection information** page, provide a name for the collection in **Name** if one is not already present. + +6. (Optional) In **Description**, provide a description of the collection. + +7. Choose **Next**. + +8. On the **Review settings that will be used to attach the team project collection** page, review the information. + +9. If you must change any settings, choose **Previous**. If all the settings are correct, choose **Verify**. + +10. When all the readiness checks have completed successfully, choose **Attach**. + +11. On the **Monitor the team project collection attach progress** page, when all processes have completed, choose **Next**. + +12. (Optional) On the **Review supplemental information for this team project collection** page, choose or note the location of the log file. + +13. Choose **Close**. + + The team project collection appears in the list of collections in the administration console. The SharePoint Web application that supported this collection in its original deployment will appear in the list of Web applications. + + ![Stop collection if configuration isn't complete](_img/ic738725.png) + +14. (Optional) Modify or remove the Web application from the list of Web applications. For more information, see [Modify or Remove Access Between a SharePoint Web Application and Team Foundation Server](modify-remove-access-shareport-tfs.md). + +<a name="config-moved-team-coll"></a> +## 6. Configure the moved team project collection + +You can skip this procedure if you moved the collection in the same domain, intend to use the same Web application that previously supported the collection, **and** you want to allow access for the administrators of that collection to this deployment of TFS. + +After you have moved a collection, you must update the Web application and permission groups for that collection with the appropriate settings. + +### To configure the moved collection + +- Open each tab for the team project collection and, if necessary, modify the settings to reflect the services and locations to match the locations of the resources on the current TFS. This is particularly important to do for SharePoint and reporting resources. If you see errors, make sure that your account has the permissions required for administrators of team project collections, and that any other team project collection administrators have been added appropriately. + + For information about this task, see [Modify a Team Project Collection](manage-team-project-collections.md) and [Set administrator permissions for team project collections](../add-administrator-tfs.md). + +<a name="config-projs"></a> +## Configure projects + +You can skip this procedure if you moved the collection in the same domain and you want to allow access for the users of projects in that collection to this deployment of TFS. + +After you configure administrators for the moved collection, either you or those administrators must add users and groups to the projects in that collection. Depending on your deployment, you might also need to configure permissions for those users in SharePoint Products and Reporting Services. + +### To add users to team projects + +- For information about this task, see [Add users to team projects](../../accounts/add-users.md). + +### To add resources to moved team projects + +- For more information about this task, see [Configure resources to support team projects](config-tfs-resources.md). + +<a name="q-and-a"></a> +## Q & A + +### Q: My TFS deployment uses reporting. How do I move reports along with moving a collection? + +**A:** First, you'll need to save or export any reports you want to move from the report server that supported the collection in its original deployment. Then you'll need to upload each report manually to the report server that will support the moved collection, which can be a lengthy process. Consider whether you want to upload all reports or whether a subset of reports will meet your business needs. You do not have to upload all reports or any reports, but only those reports that you upload will be available after the move process is completed. + +You'll also need to rebuild the warehouse and analysis services cube on the original deployment after you've moved the collection, so that the original deployment doesn't keep trying to build reports for a collection that is no longer there. + +### To move reports + +1. Export or save the reports you want to move from the report server that supported the collection in its original deployment. For information about this task, see [Exporting Reports](https://msdn.microsoft.com/library/dd239307.aspx) and [Saving Reports](https://msdn.microsoft.com/library/dd255213.aspx). + +2. Upload each report that you want to move to the appropriate folder on the report server that supports the collection in its new environment in Report Manager. + + For more information, see the following topic on the Microsoft website: [Uploading Files to a Folder](http://go.microsoft.com/fwlink/?LinkID=177729). + +3. In Report Manager, edit each report to change the data source to the new report server. + + For more information, see the following topic on the Microsoft website: How to: Configure Data Source Properties for a Report. + +### Rebuild the data warehouse and Analysis Services + +1. Open the administration console for Team Foundation. + +2. In the navigation bar, choose **Reporting**. + +3. In **Reporting**, choose **Start Rebuild**. + +4. In the **Rebuild the Warehouse and Analysis Services Databases** dialog box, choose **OK**. + + > [!NOTE] + > The warehouses will finish rebuilding and the data will finish repopulating after the Start Rebuild action completes. Depending on the size of your deployment and the amount of data, the entire process might take several hours to complete. + +### Q: How do I move a collection that uses SharePoint Products? + +**A:** To move a team project collection that uses a SharePoint Web application, you must move both the team project collection itself and the SharePoint site collection that supports the team project collection. The site collection must be moved to the Web application that will support the team project collection in the new deployment. Specifically, you must [back up the site collection database](https://technet.microsoft.com/library/ee748617(v=office.15).aspx) and then [move the site collection database](https://technet.microsoft.com/library/cc825328(v=office.15).aspx). Once you've done that and attached the moved team project collection to its destination TFS, you'll need to repair the connection between that TFS and its SharePoint web application to ensure that the attached collection connects properly to the moved site collection. You’ll also need to make sure that the SharePoint tab for the team project collection points to that site collection database. + +> [!NOTE] +> If you are moving the collection between deployments that use SharePoint Products, it is strongly recommended that the service account for TFS be a member of the <strong>Farm Administrators</strong> group in SharePoint Products in both deployments. Otherwise, you might experience errors when you attempt to detach or attach the collection. </br> +> You can move a team project collection without granting this membership to the service account for TFS. However, errors will appear when you attach the collection, and you will need to perform additional steps to reconnect projects with their portals. Even if your operational requirements generally restrict granting this membership to the service account, you should consider adding the service account to the Farm Administrators group for the duration of the move operation. + +1. Open the administration console for Team Foundation, choose **SharePoint Web Applications**, and in the list of Web applications, choose the Web application that will support the collection that you just attached. + + The **Repair Connection** button appears after you select a Web application in the list. + +2. Choose **Repair Connection**, and in the **Repair the connection to a SharePoint Web Application** dialog box, choose **Repair**. + +3. In **Team Project Collections**, select the moved team project collection, choose the SharePoint Products tab, and modify the settings to point to the site collection database. + +### Q: How do I move a team project collection that includes Lab Management? + +**A:** If you moved the collection to a different domain or intend to use a different System Center Virtual Machine Manager, you must delete the virtual machines, templates, team project host groups, and team project library shares from the collection database before you start the move, and recreate them in Microsoft Test Manager after the move. + +### To delete the Lab Management resources before moving the collection + +- For information about how to remove all group hosts, library shares, and environments from a specified team project collection, see [TFSConfig Lab /Delete Command](../command-line/tfsconfig-cmd.md#lab-delete) with the **/External** option. + +### To configure Lab Management resources after moving the collection + +1. Configure the application tier for Team Foundation. + + For more information, see [Configuring Lab Management for SCVMM Environments](config-lab-scvmm-envs.md). + +2. Recreate the golden master virtual machines and templates in the new SCVMM and import virtual machines and templates into the team project collection. + + For more information, see [How to: Create and Store Virtual Machines and Templates Ready for Lab Management](https://msdn.microsoft.com/en-us/library/ee702479(v=vs.120).aspx). + +3. Recreate the environments for each team project. + + For more information, see [Creating an SCVMM Environment Using Stored Virtual Machines and Templates](https://msdn.microsoft.com/en-us/library/ee518915(v=vs.120).aspx). + + +### Q: How do I restrict access to select functions in a team project? + +**A:** Users who have permissions to access one project within a collection can view other projects within that collection, even if they don't have permissions to modify work items or perform other actions in that project. You can [restrict individuals or TFS groups](../../accounts/restrict-access-tfs.md) from creating or modifying select artifacts, as well as restrict them from seeing projects, by specifically creating groups and configuring restrictions on those groups. For more information, see [Restricting access to projects in the deployment](../../accounts/restrict-access-tfs.md). diff --git a/docs/tfs-server/admin/rebuild-client-cache.md b/docs/tfs-server/admin/rebuild-client-cache.md new file mode 100644 index 00000000000..7e08687fb8a --- /dev/null +++ b/docs/tfs-server/admin/rebuild-client-cache.md @@ -0,0 +1,55 @@ +--- +title: Rebuild the client cache for Team Foundation Server +description: Rebuild the client cache for Team Foundation Server +ms.assetid: ac682990-f57e-49a8-8a26-caf3b2de7575 +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Rebuild the client cache for Team Foundation Server + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can force a rebuild of the cache on each client computer the next time it connects to a team project collection by using the **witadmin rebuildcache** command. + +To prevent workspace errors from occurring during version control or build operations in Team Foundation, the data cache on client computers must be updated after certain maintenance operations. After you move, restore, rename, or fail over a data-tier or application-tier server, you must refresh the cache for tracking work items and users must refresh the version control cache on client computers. + +> [!IMPORTANT] +> To avoid server performance issues, you should not run this command during normal operating hours. + +To run the tool, open a Command Prompt window where where you�ve installed Visual Studio and enter: + + ```cd %programfiles(x86)%\Microsoft Visual Studio <version>\Common7\IDE``` + +On a 32-bit edition of Windows, replace ```%programfiles(x86)%``` with ```%programfiles%```. + +**Requirements:** To use the witadmin rebuildcache command, you must be a member of the Team Foundation Administrators security group or the Project Administrators security group for the project collection that you want to manage. Permission reference for Team Foundation Server. + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the shortcut menu for **Command Prompt**, and choose **Run as Administrator**. For more information, see the [Microsoft Web site](http://go.microsoft.com/fwlink/?LinkId=111235). + + +**Syntax:** + + ```witadmin rebuildcache /collection:CollectionURL [/noprompt]``` + +**Parameters:** + +| Parameter | Description | +| --- | --- | +| **/collection:** *CollectionURL* | Specifies the URI of the team project collection or Visual Studio Team Services (VSTS) account. For example: </br> **On-premises TFS format:** ```http://ServerName:Port/VirtualDirectoryName/CollectionName``` </br> If no virtual directory is used, then the format for the URI is the following: ```http://ServerName:Port/CollectionName```. </br> **VSTS format:** http://AccountName.visualstudio.com.DefaultCollection | +| **/noprompt** | Disables the prompt for confirmation. | +| **/?** or **help** | Displays help about the command in the Command Prompt window. | + +**Remarks:** + +The **witadmin rebuildcache** command invalidates cached data on all clients for a specified team project collection. This causes the cache for each client to be refreshed the next time the client connects to the project collection. + +**Example:** + +The following command invalidates the metadata cache for all clients that connect to DefaultCollection that is defined on the server that is named AdventureWorksServer. The client caches are updated the next time they connect to the project collection. + + ```witadmin rebuildcache /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection``` diff --git a/docs/tfs-server/admin/service-accounts-dependencies-tfs.md b/docs/tfs-server/admin/service-accounts-dependencies-tfs.md new file mode 100644 index 00000000000..90b7888977f --- /dev/null +++ b/docs/tfs-server/admin/service-accounts-dependencies-tfs.md @@ -0,0 +1,108 @@ +--- +title: Service accounts and dependencies in Team Foundation Server +description: Service accounts and dependencies in Team Foundation Server +ms.assetid: cf314289-96ef-4f70-9c2b-a130d7287442 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Service accounts and dependencies in Team Foundation Server + +**TFS 2015** | **TFS 2013** + +You can better manage Visual Studio Team Foundation Server (TFS) if you understand the services and several service accounts that every deployment of TFS includes and on which every deployment depends. Depending on how you have installed and configured TFS, these services and service accounts might all run on one computer, or they might run on many computers. This changes certain aspects of managing your deployment. For example, if the server-side components of your deployment run on more than one computer, you must ensure that the service accounts your deployment uses have the access and permissions they require to function correctly. + +Team Foundation Server has services and service accounts that run on the following computers in a deployment: + +- any server that hosts one or more databases for Team Foundation Server + +- any server that hosts components of the application tier for Team Foundation + +- any computer that is running Team Foundation Server Proxy + +- any build computer + +- any test machine + +- any computer that is running one or more components of Visual Studio Lab Management + +You can install and deploy different features of TFS in various ways. The distribution of features in your deployment determines what services and service accounts run on which physical computers. In addition, you might need to manage the service accounts for software programs that are configured to work with TFS, such as the service accounts for SharePoint Products and SQL Server. + +## Service Accounts for Team Foundation Server + +Although TFS uses several service accounts, you can use the same domain or workgroup account for most or all of them. For example, you can use the same domain account "Contoso\\Example" as both the service account for Team Foundation Server (*TFSService*) and the data sources account for SQL Server Reporting Services (*TFSReports*). However, different service accounts can require different permission levels. For example, *TFSService* must have the **Log on as a service** permission, and *TFSReports* must have the **Allow log on locally** permission. If you use the same account "Contoso\\Example" for both, you must grant both of these permissions to it. In addition, *TFSService* requires significantly more permissions to operate correctly than those that *TFSReports* requires, as the table later in this topic shows. For security purposes, you should consider using separate accounts for these two service accounts. + +> [!IMPORTANT] +> You must not use the account that was used to install Team Foundation Server as the account for either of these service accounts. + +If you have deployed Team Foundation Server in an Active Directory domain, you should set the **Account is sensitive and cannot be delegated** option for service accounts. For example, in the following table, you should set that option for *TFSService*. For more information about required service accounts and placeholder names used in documentation for Team Foundation Server, see the topic "[Accounts required for installation of Team Foundation Server](../../accounts/requirements.md#accounts)" in the installation guide for Team Foundation. For more information about how to restrict account delegation in Active Directory, see the following page on the Microsoft Web site: [Enabling Delegated Authentication](http://go.microsoft.com/fwlink/?LinkId=61995). + +Because you must manage several service accounts, each service account is referred to by a placeholder name that identifies its function, as listed in the table later in this topic. The placeholder name is not the actual name of the account that you use for each service account. The actual name of the account varies depending on your deployment. In the previous example, the account used for both *TFSService* and *TFSReports* was "Contoso\\Example." In your own deployment, you might create domain accounts with the specific names of "TFSService" and "TFSReports," or you might use the system account Network Service as the service account for Team Foundation Server. + +> [!IMPORTANT] +> Unless specifically stated otherwise, no groups or accounts in the following table should be members of the Administrators group on any of the servers in your deployment of Team Foundation Server. + +The following table shows all the service accounts that you might use in a deployment of TFS: + + +| Service Account | Placeholder name and usable account type | Required Permission and Group Membership | Notes | +| --- | --- | --- | --- | +| Service account for Team Foundation Server | *TFSService*, which can be a local account, a domain account, Local Service in a workgroup, or Network Service in a domain | **Log on as a service** on the application-tier server </br> **Farm Administrators** group for any SharePoint Web applications that Team Foundation Server uses1 </br> **TFSExecRole**, or if this role does not exist for the database, a combination of the following roles for any databases that Team Foundation Server uses: </br> * db_owner </br> * db_create | This service account is used for all of the Web services for Team Foundation Server. If you use a domain account for this account, it must be a member of a domain that all computers throughout the deployment fully trust. | +| Data sources account for SQL Server Reporting Services | *TFSReports*, which can be a local account, a domain account, or Local Service in a workgroup | **Allow log on locally** on the application-tier server and on the server that is running SQL Server Reporting Services </br> **TFSWareHouseDataReader** on the report server | This service account retrieves data for reports from Reporting Services. | +| Service account for Team Foundation Build | *TFSBuild*, which can be a local account, a domain account, or Local Service in a workgroup | **Log on as a service** | This service account is used when builds are configured and when build status information is communicated between the build controller and the build agents. | +| Service account for Lab Management | *TFSLab*, which can be a local account, a domain account, Local Service in a workgroup, or Network Service in a domain | **Log on as a service** | This service account is used when information about Lab Management is communicated between Team Foundation Server and the lab agent that is running on a virtual machine. | +| Service account for Team Foundation Server Proxy | *TFSProxy*, which can be a local account, a domain account, Local Service in a workgroup, or Network Service in a domain | **Log on as a service** | This service account is used for all of the proxy services. If you use a domain account for this account, it must be a member of a domain that all computers throughout the deployment fully trust. | +| Service account for Test Agent and Test Agent Controller | *TFSTest*, which can be a local account, a domain account, or Network Service in a domain. | **Log on as a service** | This service account is used when information about tests is communicated between the test agent controller and the test agent. | +| Service accounts for SharePoint Web applications | *WebAppService* | **Allow log on locally** | You must add at least one service account for each SharePoint Web application that you configure for use with Team Foundation Server. This service account is used to create team project portals and to enable dashboard functionality. | +| Service account for VSTS | Account Service (*CollectionName*) | None. This account is only used if you are using a hosted deployment of TFS. It is automatically created for you, and can be viewed through the administration page of Team Web Access. | This service account is created automatically when you create a collection in Visual Studio Team Services, and is used when clients communicate with the hosted service. | + +1 You can integrate your deployment with SharePoint Products without this permission, but you must perform additional steps if the service account is not a member of the Farm Administrators group. For more information, see [Integrate Team Foundation Server with SharePoint Products Without Administrative Permissions](https://msdn.microsoft.com/library/ee462864). + +## Services That Run Under Service Accounts + +The following services run under service accounts in a deployment of Team Foundation Server: + +|**Service name**|**Service account**|**Logical Tier**| +|---|---|---| +|Code Coverage Service|*TFSService*|application tier| +|Team Foundation Server Web Services|*TFSService*|application tier| +|SQL Server Reporting Services **(MSSQLSERVER** or *InstanceName* if using a named instance)|Local System or a domain account|application tier| +|Report Web Service|Local System, Network Service, or a domain account|application tier| +|SharePoint Administration (if SharePoint Products is installed and configured for use with Team Foundation Server)|Local System, Network Service, or a domain account|application tier| +|SharePoint Timer (if SharePoint Products is installed and configured for use with Team Foundation Server)|Domain account|application tier| +|Visual Studio Team Foundation Build Service Host (if Team Foundation Build is installed)|*TFSBuild*|build computer| +|Visual Studio Team Foundation Background Job Agent|*TFSService*|application tier| +|Visual Studio Test Controller|*TFSTest*|any computer| +|Visual Studio Test Agent|*TFSTest*|test computer| +|Analysis Server **(MSSQLSERVER** or *InstanceName* if you are using a named instance)|Local System or a domain account|data tier| +|SQL Server Browser|Local Service or a domain account|data tier| +|SQL Server (**MSSQLSERVER** or *InstanceName* if using a named instance)|Local System, Network Service, or a domain account|data tier| +|SQL Server Agent (**MSSQLSERVER** or *InstanceName* if using a named instance)|Local System, Network Service, or a domain account|data tier| +|Account Service (*CollectionName*)|Automatic|web tier (VSTS only)| + +For more information about service accounts for SQL Server, see the following page on the Microsoft Web site: [SQL Server Books Online](http://go.microsoft.com/fwlink/?LinkID=62398). For the most recent information about service accounts in Team Foundation, see [Team Foundation Server install guide](../install/get-started.md). + +> [!NOTE] +> If you change the service account for Team Foundation Build, you must make sure that the new service account is a member of the Build Services group. You must also make sure that the account has read/write permissions to the temporary folders and the ASP.NET temporary folder. Similarly, if you change the service account for the Team Foundation Server Proxy service, you must make sure that the account is a member of the appropriate groups. For more information, see [Configure Your Build System](https://msdn.microsoft.com/library/ms181711). + + +## Q & A + +### Q: Are service accounts assigned to an access level group? + +**A:** By default service accounts are added to the default access level. If you make Stakeholder the default access level, you must add the TFS service account to the Basic or Advanced group. + +### Q: Do service accounts require a license? + +**A:** No. Service accounts don’t require a separate license. + +### Q: How do I change the password or account for a service account? + +**A:** See the following topics: + +* [Change the service account or password for SQL Server Reporting Services](change-service-account-or-password-sql-reporting.md) + +* [Change the service account or password for Team Foundation Server](change-service-account-password.md) \ No newline at end of file diff --git a/docs/tfs-server/admin/setup-ad-groups.md b/docs/tfs-server/admin/setup-ad-groups.md new file mode 100644 index 00000000000..bf76691e434 --- /dev/null +++ b/docs/tfs-server/admin/setup-ad-groups.md @@ -0,0 +1,66 @@ +--- +title: Set up groups for use in TFS deployments +description: Set up groups for use in TFS deployments +ms.assetid: fc3a37cc-bef3-475c-a177-92c843905c3d +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Set up groups for use in TFS deployments + +**TFS 2015** | **TFS 2013** + +Managing users in TFS is much easier if you create Windows or Active Directory groups for them, particularly if your deployment includes SharePoint Foundation and SQL Server Reporting Services. + +## Users, groups, and permissions in Team Foundation Server deployments + +Team Foundation Server, SharePoint Products, and SQL Server Reporting Services all maintain their own information about groups, users, and permissions. To make managing users and permissions across these programs simpler, you can create groups of users with similar access requirements in the deployment, give those groups appropriate access in the different software programs, and then just add or remove users from a group as needed. This is much easier than maintaining individual users or groups of users separately in three separate programs. + +If your server is in an Active Directory domain, one option is to create specific Active Directory groups to manage your users, like a group of developers and testers for all projects in the team project collection, or a group of users who can create and administer projects in the collection. Similarly, you can create an Active Directory account for services that can't be configured to use the Network Service system account as the service account. To do so, create an Active Directory account for SharePoint Foundation and as the read-access data source account for reports in SQL Server Reporting Services. + +> [!IMPORTANT] +> If you decide to use Active Directory groups in TFS, consider creating specific ones whose purpose is dedicated to user management in TFS. Using previously existing groups that were created for another purpose, particularly if they are managed by others who are not familiar with TFS, can lead to unexpected user consequences when membership changes to support some other function. + +The default choice during installation is to use the Network Service system account as the service account for Team Foundation Server and SQL Server. If you want to use a specific account as the service account for security purposes or other reasons, such as a scaled-out deployment, you can. You might also want to create a specific Active Directory account to use as the service account for SharePoint Foundation and as the data source reader account for SQL Server Reporting Services. + +If your server is in an Active Directory domain but you don't have permissions to create Active Directory groups or accounts, or if you're installing your server in a workgroup instead of a domain, you can create and use local groups to manage users across SQL Server, SharePoint Foundation, and Team Foundation Server. Similarly, you can create a local account to use as the service account. However, keep in mind that local groups and accounts are not as robust as domain groups and accounts. For example, in the event of a server failure, you would need to recreate the groups and accounts from scratch on the new server. If you use Active Directory groups and accounts, the groups and accounts will be preserved even if the server hosting Team Foundation Server fails. + +For example, after reviewing business requirements for the new deployment and the security requirements with the project managers, you might decide to create three groups to manage the majority of users in the deployment: + +- A general group for developers and testers who will participate fully in all projects in the default team project collection. This group will contain the majority of users. You might name this group TFS\_ProjectContributors. + +- A small group of project administrators who will have permissions to create and manage projects in the collection. You might name this group TFS\_ProjectAdmins. + +- A special, restricted group of contractors who will only have access to one of the projects. You might name this group TFS\_RestrictedAccess. + +Later on, as the deployment expands, you might decide to create other groups. + +### To create a group in Active Directory + +- Create a security group that is a local domain, global, or universal group in Active Directory, as best meets your business needs. For example, if the group needs to contain users from more than one domain, the universal group type will best suit your needs. For more information, see [Create a New Group (Active Directory Domain Services)](http://go.microsoft.com/fwlink/?LinkId=235815). + +### To create a local group on the server + +- Create a local group and give it a name that will quickly identify its purpose. By default, any group you create will have the equivalent permissions of the Users default group on that computer. For more information, see [Create a local group](http://go.microsoft.com/fwlink/?LinkId=235816). + +### To create an account to use as a service account in Active Directory + +- Create an account in Active Directory, set the password policy according to your business requirements, and make sure that **Account is trusted for delegation** is selected for the account. For more information, see [Create a New User Account (Active Directory Domain Services)](http://go.microsoft.com/fwlink/?LinkId=235817) and [Understanding User Accounts (Active Directory Domain Services)](http://go.microsoft.com/fwlink/?LinkId=235818). + +### To create a local account to use as the service account on the server + +- Create a local account to use as the service account and then modify its group membership and other properties according to the security requirements for your business. For more information, see [Create a local user account](http://go.microsoft.com/fwlink/?LinkId=235819). + +### Try this next + +- [Add users to team projects](../../accounts/add-users.md) + +## Q & A + +**Q: Can I use groups to restrict access to projects or features in TFS?** + +**A:** Yes, you can. You can create specific groups for [restricting access to projects](../../accounts/restrict-access-tfs.md), for [managing access levels](../../security/change-access-levels.md), and other purposes. + diff --git a/docs/tfs-server/admin/setup-customize-alerts.md b/docs/tfs-server/admin/setup-customize-alerts.md new file mode 100644 index 00000000000..bbdcbdda7f1 --- /dev/null +++ b/docs/tfs-server/admin/setup-customize-alerts.md @@ -0,0 +1,98 @@ +--- +title: Configure an SMTP server and customize email for alerts and feedback requests in TFS +description: Configure an SMTP server and customize email for alerts and feedback requests in TFS +ms.assetid: f49fce23-2808-450b-a2de-7d5a83401d30 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Configure an SMTP server and customize email for alerts and feedback requests in TFS + +**TFS 2015** | **TFS 2013** + +For feedback requests and alerts to work, you must configure an SMTP server for TFS. + +## Configure an SMTP server for TFS + +1. If you aren't an administrator of TFS, [get those permissions](../add-administrator-tfs.md). + +2. Open the Team Foundation Administration Console from the **Start** menu. Or, at a command prompt, type **TFSMgmt.exe** (located in *Drive*:\\%programfiles%\\TFS 12.0\\Tools). + +3. Open email alert settings. + + ![Open email alerts for the application tier](_img/ic724655.png) + +4. Enable email alerts and specify the SMTP Server and the email address to use for sending emails. + + ![Enable and configure SMTP server](_img/ic724656.png) + + If your deployment is configured to use SSL, then select the second checkbox and enter a certificate. See also [Setting up HTTPS with Secure Sockets Layer (SSL) for Team Foundation Server](setup-secure-sockets-layer.md). + + >**Troubleshooting tips:** + ><ul><li>Make sure your firewall is configured to allow communications between TFS and your SMTP server.</li> + ><li>Your SMTP server must be configured to allow anonymous senders to send email, or you must have previously created an account specifically to use as the email account for alerts. If you specify the TFS service account (<em>TFSService</em>), this account must be a domain account with permission to send email.</li> + ><li>If you used a system account (such as Network Service) as the TFS service account, leave the User and Password fields blank for the advanced configuration, and make sure that your SMTP server is configured to allow anonymous users to send mail. Alternately, specify an email-enabled domain account to use as the email account for alerts. If you do not, email notifications will not be sent.</li></ul> + +5. To verify your configuration, open alerts management. You might need to refresh your browser to see this option if you just recently enabled an SMTP server. + + ![Manage individual alerts from Team Web Access](_img/ic726730.png) + + Create an alert and then perform an action that will trigger the alert. You can [set alerts for yourself or for a team](../../work/track/alerts-and-notifications.md). + +This task supports [Request and review feedback](../../work/connect/get-feedback.md) and [Set alerts, get notified when changes occur](../../work/track/alerts-and-notifications.md). + + +## Customize the format for TFS email alerts + +You can customize the format of email notifications, or alerts, that [team members subscribe to](../../work/track/alerts-and-notifications.md). These notifications are sent when changes occur to work items, code reviews, source control files, and builds. To customize their format, you can modify their associated XSL transform files. In addition, your team members can configure *project alerts* in Team Web Access (TWA) for various notifications and specify whether they want HTML or plain text as the format. + +Alert format transform files are stored in the following folder on the application-tier server: + +*Drive*:\\%programfiles%\\TFS 12.0\\Application Tier\\TFSJobAgent\\Transforms\\1033 + +You can use an XML editor, such as Visual Studio, to change any of the transform files. The following table lists the two transform files used when email notifications are sent for work item change events: + +| Transform file | Format | +| --- | --- | +| WorkItemChangedEvent.xsl | HTML e-mail | +| WorkItemChangedEvent.plaintextXsl | plaintext e-mail | + +The event service uses the .xsl and the plaintextXsl files to transform the XML data for an event into an e-mail message. Edit the .xsl file to get a different format for the email notification. For HTML-formatted email messages, the core layout for all events is stored in TeamFoundation.xsl. You should make a backup copy of any files that you want to change, and then test your changes. After you have made your changes, TFS will use the modified transform the next time it generates a notification for an event.� + +> [!NOTE] +> The content of the emails that are issued is automatically generated from the TeamFoundation.xsl file and the above WorkItemChangedEvent xsl files. Modifying the TeamFoundation.xsl file is not recommended. If you do modify the contents of this file, you must thoroughly test your modifications. Incorrect modifications of this file can result in the failure of TFS email alerts and cause you to be unable to view work items, changesets, or files in a Web browser. + +**Requirements**: + +To perform these procedures, you must be a member of the **Administrators** security group on the Team Foundation application-tier server. + +**To modify the alert format for work item changes**: + +1. On your application-tier server, open this folder: + + *Drive*:\\%programfiles%\\TFS 12.0\\Application Tier\\TFSJobAgent\\Transforms\\1033 + +2. Open WorkItemChangedEvent.xsl in Notepad or some other text editor. + +3. Edit the file to show the message that you want in the notification email. + + > [!NOTE] + > You should make similar changes to the WorkItemChangedEvent.plaintextXsl for any users who have requested plaintext messages. + +4. Save the WorkItemChangedEvent.xsl file. + + + +## See Also + + [Set alerts, get notified when changes occur](../../work/track/alerts-and-notifications.md) + + [Support alerts and feedback requests with an SMTP server](setup-customize-alerts.md) + + [Configure resources to support team projects](config-tfs-resources.md) + + [You can also use TFSConfig ConfigureMail](../command-line/tfsconfig-cmd.md#configure-email) diff --git a/docs/tfs-server/admin/setup-secure-sockets-layer.md b/docs/tfs-server/admin/setup-secure-sockets-layer.md new file mode 100644 index 00000000000..920cbf9bb3c --- /dev/null +++ b/docs/tfs-server/admin/setup-secure-sockets-layer.md @@ -0,0 +1,564 @@ +--- +title: Setting up HTTPS with Secure Sockets Layer (SSL) for Team Foundation Server +description: Setting up HTTPS with Secure Sockets Layer (SSL) for Team Foundation Server +ms.assetid: 27540d50-ac8a-46e1-a98e-baee43ed98a3 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Setting up HTTPS with Secure Sockets Layer (SSL) for Team Foundation Server + +**TFS 2015** | **TFS 2013** + +You can strengthen the security of your deployment of Visual Studio Team Foundation Server (TFS) by configuring it to use Hypertext Transfer Protocol Secure (HTTPS) with Secure Sockets Layer (SSL). You can choose either to require this protocol, which maximizes the security of your deployment, or you can choose to support HTTPS with SSL in addition to the default protocol, HTTP. If you use Release Management for Visual Studio 2013, you can also configure that to use HTTPS with SSL, although you cannot configure it to support both HTTP and HTTPS with SSL. + +Before you choose a configuration, review the advantages and disadvantages described here. After you identify the configuration that best meets the security needs of your organization, follow the steps in this topic to configure your deployment. + +## In this topic + +- **Conceptual information** + + - [Advantages of Supporting HTTPS with SSL in Addition to HTTP](#advantages-supporting-tfs-ssl) + + - [Advantages of Requiring HTTPS with SSL for All Connections](#advantages-requiring-https) + + - [Disadvantages of Supporting or Requiring HTTPS with SSL](#disadvantages-supporting-https) + + - [Prerequisites](#prereqs) + + - [Assumptions](#assumptions) + +- **Server configuration** + + - [Obtaining a Certificate](#obtaining-certificate) + + - [Requesting, installing, and configuring websites with a certificate](#request-install-config-websites) + + - [Configuring Your Firewall](#config-firewall) + + - [Configuring SQL Server Reporting Services](#config-sql-svr-reporting) + + - [Configuring HTTPS for TFS](#config-https) + +- **Optional configuration tasks** + + - [Testing Access to Your Deployment (Optional)](#test-access-to-deployment) + + - [Configuring Your Deployment to Require HTTPS with SSL (Optional)](#config-deply-require-https) + +- **Build configuration** + + - [Installing the Certificate on Build Servers](#installing-certificats-build-svrs) + + - [Updating the Build Configuration](#updating-build-configs) + +- **Release Management configuration** + + - [Release Management and TFS](#release-mgt-tfs) + + - [Configure Release Management Server to use HTTPS](#config-release-mgt-server) + + - [Making all the Release Management connections with HTTPS](#making-release-mgt-conn) + +- **Client configuration** + + 1. [Configuring Client Computers](#config-client-computers) + +- **Git repository configuration** + + 1. [Configuring Git for certificates](#config-git) + +<a name="advantages-supporting-tfs-ssl"></a> +## Advantages of Supporting HTTPS with SSL in Addition to HTTP + +If you configure your deployment of TFS to support both protocols, users whose computers have been configured for HTTPS with SSL will connect by using that protocol, which makes your deployment more secure. In addition, users whose computers are configured for HTTP only can still connect to your deployment. Although you should not deploy this configuration over public networks, you can gain the following advantages by continuing to support HTTP connections in a controlled network environment: + +- You can increase the security of your deployment over time by configuring client computers for HTTPS with SSL as your schedule permits. If you take a phased approach, you do not need to upgrade all computers at the same time, and users whose computers have not yet been upgraded can still connect to the deployment. + +- You can more easily configure and maintain Team Foundation Server. + +- Calls from one Web service to another are faster over HTTP than over HTTPS with SSL. Therefore, you can continue to support HTTP connections from client computers for which the performance requirements outweigh the security risks. + +<a name="advantages-requiring-https"></a> +## Advantages of Requiring HTTPS with SSL for All Connections + +If you require HTTPS with SSL for all connections, you gain the following advantages: + +- All web connections between the application tier, the data tier, and the client tier for Team Foundation are more secure because they require certificates. + +- You can control access more easily by configuring certificates to expire when a project phase is expected to end. + +<a name="disadvantages-supporting-https"></a> +## Disadvantages of Supporting or Requiring HTTPS with SSL + +Before you configure TFS to support or require HTTPS with SSL, you should consider the following disadvantages: + +- You might complicate ongoing administration tasks. For example, you might have to reconfigure your deployment to stop supporting HTTPS with SSL before you can apply service packs or other updates. + +- You must not only configure but also manage a certification authority (CA) and certificate trusts. You can use Certificate Services in Windows Server 2003 and Windows Server 2008, but you might not want to invest the time and resources that deploying a secure public key infrastructure (PKI) requires. + +- You must spend significant time setting up and testing either of these configurations, and troubleshooting your deployment will become more difficult. + +- If you continue to support both protocols, external connections might not be encrypted if the application tier for Team Foundation is not appropriately secured. + +- If you require HTTPS with SSL, your deployment's performance will be slower. + +## Configuring Your Deployment to Support or Require HTTPS with SSL + +The procedures in this topic describe one process for requesting, issuing, and assigning certificates that are required for SSL connections in TFS. If you are using different software than what this topic describes, you might need to perform different steps. To support external connections to your TFS deployment, you must also enable Basic authentication, Digest authentication, or both in Internet Information Services (IIS). + +By following the procedures in this topic, you will accomplish the following tasks: + +1. Obtain certificates for your deployment of Team Foundation Server and the websites that it uses. + +2. Install and assign the certificates. + +3. Configure Team Foundation Server. + +4. Configure Team Foundation Build. + +5. Configure Release Management for Visual Studio 2013 + +6. Configure client computers. + +<a name="prereqs"></a> +## Prerequisites + +To perform the procedures in this topic, you must first meet the following requirements: + +- The logical components in the data and application tiers of Team Foundation must be installed, although in the case of TFS itself, not necessarily configured. These tiers include IIS, SQL Server, and any additional components you might have integrated, such as SharePoint Products, Team Foundation Build, Release Management and SQL Server Reporting Services. + + The procedures in this topic refer to the server or servers that are running the logical components in the application tier for Team Foundation and the data tier for Team Foundation. The application and data tiers might be running on the same server or multiple servers, as described in [Team Foundation Server install guide](../install/get-started.md). + +- You must have a certification authority (CA) from which you can issue certificates, or have subscribed to a third-party certifying authority with a trusted chain. This topic assumes that you are using Certificate Services as your CA, but you can use any CA that you have configured for your deployment, or certificates from a trusted third-party certification authority. If you do not have a certification authority, you can install Certificate Services and configure one. For more information, see the one of the following sets of documentation on the Microsoft website: + + - For Windows Server 2012: [Active Directory Certificate Services](https://technet.microsoft.com/library/hh831740.aspx) + + - For Windows Server 2008: [Active Directory Certificate Services and Public Key Management](http://go.microsoft.com/fwlink/?LinkId=199272) + +**Required Permissions** + + * You need to be an administrator to configure all the components of your deployment for HTTPS and SSL. If you work in a distributed deployment where different people have administrative permissions for individual components, such as SharePoint, you'll need to coordinate with those people to complete configuration. + + * Specifically, you must belong to the **Team Foundation Administrators** group, and you must belong to the **Administrators** group on the application-tier, data-tier, and TFS Proxy server or servers for Team Foundation. + + * To configure a build server, you must belong to the **Administrators** group on that server. + + * To configure Release Management, you must belong to the **Administrators** group on the server that hosts Release Management Server and be a member of the **Release Manager** role in Release Management. + + * If your deployment uses SharePoint Products, you must belong to the **Administrators** group on the server that hosts SharePoint Central Administration. You must also belong to the **Farm Administrators** group. + + * If your deployment uses reporting, you must be a member of an administrative security group or have equivalent permissions individually set for configuring reporting services. + + For more information about permissions, see [Permission reference for Team Foundation Server](../../security/permissions.md). + +<a name="assumptions"></a> +## Assumptions + +The procedures in this topic assume that the following conditions are true: + +- The data-tier and application-tier server or servers have been installed and deployed in a secure environment and configured according to security best practices. + +- You have installed Release Management for Visual Studio 2013. + +- You are familiar with how to configure and manage PKIs and requesting, issuing, and assigning certificates. + +- You have a working knowledge of the network topology of the development environment, and you are familiar with configuring network settings, IIS, and SQL Server. + +<a name="obtaining-certificate"></a> +## Obtaining a certificate + +Before you configure TFS to use HTTPS with SSL, you must obtain and install a server certificate for the servers in your deployment. To obtain a server certificate, you must install and configure your own certification authority, or you must use a certification authority from an external organization that you trust (third-party certificates). + +For more information about how to install a certification authority, see the following topics on the Microsoft website: + +- For Windows Server 2012: [Deploying an AD CS Two-Tier PKI Hierarchy](https://technet.microsoft.com/library/hh831348.aspx) + +- For Windows Server 2008: [Active Directory Certificate Services and Public Key Management](http://go.microsoft.com/fwlink/?LinkId=199272) + +<a name="request-install-config-websites"></a> +## Requesting, installing, and configuring websites with a certificate + +After you enlist in a certification authority, you must either request a certificate by using IIS Manager, or you must manually install the certificate on each of the following servers in your deployment: + +- Each application-tier server. + +- Each server that is running Team Foundation Server Proxy, if any are configured for your deployment. + +- Each server that is running Team Foundation Build Service as either a build controller or a build agent, if any are configured for your deployment. + +- Each server that is running Release Management Server, or any servers¹ in a release environment that are running the deployment agent, if Release Management is part of your deployment. + +- Each server that is running SharePoint Products, if SharePoint Products is configured for your deployment. + + > [!NOTE] + > Configuring a SharePoint site to use HTTPS and certificates often requires additional steps, such as [configuring alternate access mappings](https://technet.microsoft.com/library/cc263208(v=office.15).aspx) and [configuring authentication infrastructure](https://technet.microsoft.com/library/jj219795(v=office.15).aspx). For more information, consult the latest SharePoint documentation for your version of the product. + +- The server that is running Reporting Services, if one is configured for your deployment. + +In addition, the client computers in your deployment will need to be enrolled in the certificate chain and request the needed certificate. If you’re using Release Management, this includes any computers running the Release Management client, as well as any clients¹ running the deployment agent in your release environments. If one or more of your projects uses Git for version control, users in those projects will also have to configure Git on their computers to recognize and use the client certificate. For information about how to request a client certificate from a specific CA, see the documentation for that certification authority. + +¹ Clients and servers are called out separately here, but that’s just a convention of this document. Any computer running the deployment agent needs the certificate installed. + +1. Open **Internet Information Services (IIS) Manager**. + +2. Expand your server, navigate to **Server Certificates**, and create and complete your certificate request. + + ![Open IIS Manager and request a certificate](_img/ic728993.png) + + ![Create a request, then complete it](_img/ic712598.png) + + For more information, see [Configuring Server Certificates in IIS](http://go.microsoft.com/fwlink/?LinkId=201844). + +3. Import the certificate. + +4. Now you need to configure each website that will require this certificate with the appropriate settings, (with the exception of the Release Management website, which you will configure later). Specifically, you'll need to do this for each of the following websites: + + - Default Website + + - Team Foundation Server + + - TFS Proxy (if your deployment uses it) + + - SharePoint Central Administration (if your deployment uses SharePoint) + + On each server that hosts a website that you want to configure, open **Internet Information Services (IIS) Manager**. + +5. Expand *ComputerName*, expand **Sites**, open the submenu for the website that you want to configure (for example, Team Foundation Server), and then choose **Bindings** from the Actions pane. + + ![You must configure bindings for all sites](_img/ic712599.png) + +6. In **Site Bindings**, choose **Add**. + + The **Add Site Binding** dialog box appears. + +7. In the **Type** list, choose **https**. + + In **Port**, type a different port number. + + > [!IMPORTANT] + > The default port number for SSL connections is 443, but you must assign a unique port number for each of the following sites: Default Website, Team Foundation Server, TFS Proxy (if your deployment uses it), and SharePoint Central Administration (if your deployment uses SharePoint).</p> + <p>You should record the SSL port number for each website that you configure. You will need to specify these numbers in the administration console for Team Foundation. + + In **SSL Certificate**, choose the certificate that you imported, and then choose **OK** and close the Bindings page. + + ![Make sure to choose a unique port number](_img/ic720089.png) + +8. On the **Home** page for the website that you are configuring, open the **Features** view. + +9. Under **IIS**, choose **Authentication**. + +10. Choose an authentication method that you want to configure, open its submenu, and then enable, disable, or perform additional configuration on the method, as best meets your security needs. For example, if you wanted to disable anonymous authentication, you would choose the Anonymous Authentication method and the choose Disable from the Actions menu. + + ![Choose the method, and then the action to perform](_img/ic720090.png) + +11. Once you have finished configuration, restart web services. + +<a name="config-firewall"></a> +## Configuring Your Firewall + +You must configure your firewall to allow traffic through the SSL ports that you just specified in IIS. For more information, see the documentation for your firewall. + +> [!IMPORTANT] +> Make sure to test traffic on the ports you specified from another computer. If you cannot access the default website or Team Web Access, double-check the port settings you specified for these websites in IIS, and make sure that the firewall is configured appropriately to allow traffic on those ports. + +<a name="config-sql-svr-reporting"></a> +## Configure SQL Server Reporting Services + +If your deployment uses reporting, you must configure SQL Server Reporting Services to support HTTPS with SSL and to use the port that you specified in IIS for Team Foundation Server. Otherwise, the report server will not function correctly for your deployment. For more information, see [Configuring a Report Server for Secure Sockets Layer (SSL) Connections](https://technet.microsoft.com/library/ms345223(v=sql.110).aspx). + +> [!TIP] +> If your deployment does not use reporting, you can skip this procedure. + +<a name="config-https"></a> +## Configuring HTTPS for TFS + +Follow these steps to configure your TFS deployment with the HTTPS ports and values that you configured in IIS for the default and Team Foundation Server websites. + +### To reconfigure Team Foundation Server to use or require HTTPS + +1. Open the administration console for Team Foundation and browse to the application tier node. + +2. In **Application Tier Summary**, choose **Change URLs**. + + The **Change URLs** window opens. + +3. In **Notification URL**, type the HTTPS URL that you configured for the Team Foundation Server website in IIS. + + For example, you might have configured the website to use port 444. In this case, you type https://*ServerName*:444/tfs. Make sure that you use the fully qualified domain name of the server instead of localhost. + + ![Specify HTTPS, server, and port in the address](_img/ic712602.png) + +4. Choose **Test**. Don't choose **OK** if the test doesn't pass. Go back and make sure that you entered the correct URL and port information, that all firewalls are configured to allow traffic on those ports, and that the site is available and running in IIS Manager. + +5. To require HTTPS, choose **Use** in **Server URL**, and then type the HTTPS URL that you configured for the Team Foundation Server website. + + Make sure that you use the fully qualified domain name of the server instead of localhost. + +6. Choose **Test**, and then choose **OK** if the test passes. + +7. If your deployment uses SharePoint Products, choose **SharePoint Web Applications** in the administration console. Otherwise, skip the next six steps. + +8. In **SharePoint Web Applications**, in the **Name** list, choose a web application, and then choose **Change**. + + The **SharePoint Web Application Settings** page opens. + +9. In **Web Application URL**, change the URL to the HTTPS value for the application. + +10. In **Central Administration URL**, change the URL to the HTTPS value for the Central Administration website. + +11. (Optional) In **Friendly Name**, change the value to reflect the HTTPS address of this application. + +12. Choose **OK**. + +13. Repeat the previous five steps for every SharePoint web application in your deployment. + +14. If your deployment uses Reporting Services, in the administration console, choose **Reporting**. Otherwise, skip the rest of this procedure. + +15. In **Reporting**, choose **Edit**. + + If the **Take Offline** dialog box opens, choose **OK**. + + The **Reporting** window opens. + +16. Choose the **Reports** tab. In **URLs for Report Server**, type the HTTPS URLs for **Web Service** and **Report Manager**, and then choose **OK**. + +<a name="test-access-to-deployment"></a> +## Test Access to Your Deployment + +You should test whether your changes are functioning as you expect. This step is optional but strongly recommended. + +### To test access to your deployment + +1. On a computer that does not host the application tier, open a web browser and navigate to a team home page. + +2. Verify whether you can access your teams and projects from Team Web Access, including the administration pages. + +3. If you cannot access your deployment through Team Web Access, review the steps that you just completed, and make sure that you have made all configuration changes correctly. + +<a name="config-deply-require-https"></a> +## Configuring Your Deployment to Require HTTPS with SSL (Optional) + +You can require all connections to the TFS application tier to use HTTPS with SSL. This additional security is optional but recommended. + +### To require SSL connections + +1. On the server that hosts the website that you want to configure, choose **Start**, choose **Administrative Tools**, and then choose **Internet Information Services (IIS) Manager**. + +2. Follow the appropriate steps for your version of IIS: + + **For deployments that use IIS 7.0:** + + 1. Expand *ComputerName*, expand **Web Sites**, and then choose the website that you want to configure. + + 2. On the home page for that website, choose **SSL Settings**. + + 3. In the **SSL Settings** pane, select the **Require SSL** check box. + + (Optional) Select the **Require 128-bit SSL** check box. + + 4. In **Client Certificates**, choose **Ignore**, **Accept**, or **Require**, depending on the security requirements of your deployment. + + 5. In **Actions**, choose **Apply**. + + 6. Repeat these steps for each website for which you want to require SSL. + +<a name="installing-certificats-build-svrs"></a> +## Installing the Certificate on Build Servers + +If you installed Team Foundation Build Service on one or more servers, you must install the certificate in the Trusted Root Certification Authorities store of each server. For more information, see [Obtaining a Certificate](#obtaining-certificate) and [Requesting, installing, and configuring websites with a certificate](#request-install-config-websites) earlier in this topic. Both the controller and the agent require a certificate with a private key with which to identify themselves in HTTPS connections. + +> [!NOTE] +> To perform builds over SSL, the certificate must be installed in the trusted root store on both the build controller and the build agent. + +<a name="updating-build-configs"></a> +## Updating Build Configurations + +To configure Team Foundation Build for SSL connections, you must configure the build service to use the HTTPS URL that you configured for the application tier and the collection that the build configuration supports. You must configure this URL for each build configuration in your deployment. + +### To change a build configuration to use HTTPS + +1. On the server that hosts the build configuration that you want to configure, open the administration console for Team Foundation. + +2. Under **Team Foundation**, expand the name of the server, and then choose **Build Configuration**. + + The **Build Configuration** pane appears. + +3. Under the service configuration, choose **Stop**, and then choose **Properties**. + + The **Build Service Properties** dialog box opens. + +4. In **Communications**, make sure that the URL for the team project collection is using the correct HTTPS address and full server name. + +5. In **Local Build Service Endpoint (incoming)**, choose **Change**. + + The **Build Service Endpoint** dialog box opens. + +6. In **Endpoint Details**, verify that the port number matches your configuration details. + +7. In **Protocol**, choose **HTTPS**. + +8. In the **SSL Certificates** list, choose the certificate that you installed and configured for use with this deployment, and then choose **OK**. + + ![Make sure the configuration details match](_img/ic712603.png) + +9. In the **Build Service Properties** dialog box, choose **Start**. + +<a name="release-mgt-tfs"></a> +## Release Management and TFS + +You can deploy Release Management with HTTPS completely separate from TFS, regardless of the protocol you’re using for TFS, or if you’re using TFS at all. However you decide to deploy Release Management, the instructions for creating a secure deployment for Release Management are very similar to what’s set down here for TFS. The big difference is the procedure for binding the HTTPS protocol to the Release Management website, which is covered below. + +To deploy Release Management with HTTPS, use the task list below. If you’re configuring Release Management with TFS, skip over any tasks you might have already completed for TFS configuration. + +1. Obtain a certificate. For more information, see [Obtaining a Certificate](#obtaining-certificate). + +2. Configure Release Management Server to use HTTPS. See the next section, [Configure Release Management Server to use HTTPS](#config-release-mgt-server). + +3. Install the certificate in the trusted root store of any computer running Release Management Client or the Microsoft Deployment Agent. For more information, see [Configuring Client Computers](#config-client-computers) below. + +4. Open any firewalls. After you install the certificates, make sure to open any ports you used for SSL traffic. For more information, see [Configure Your Firewall](#config-firewall). + +5. Test. The website for Release Management Server is not configured for browsing, so to test that it’s available, you should connect to it with Release Management Client, connect the agents in your environment and then make a release. For more information, see [Making all the Release Management connections with HTTPS](#making-release-mgt-conn) and [Manage your release](../../release/previous-version/manage-your-release.md). + +<a name="config-release-mgt-server"></a> +### Configure Release Management Server to use HTTPS + +Release Management supports either the HTTPS or HTTP protocol but not both protocols at the same time. Use this procedure to bind the HTTPS protocol to the Release Management website. + +1. In Release Management Server, select **HTTPS**, enter the port number you want to use for HTTPS traffic in **Web service port**, and then choose **Apply settings**. + + ![Configure Release Managment Server for HTTPS](_img/ic729494.png) + +2. Open **Internet Information Services (IIS) Manager**. + +3. Expand *ComputerName*, expand **Sites**, open the submenu for the Release Management website, and then choose **Bindings** from the Actions pane. + +4. In **Site Bindings**, choose **Add**. + +5. In the **Type** list, choose **https**. + +6. In **Port**, type a different port number. This is a just temporary port number necessary to complete the configuration. + + ![Add a temporary port](_img/ic729495.png) + +7. In **SSL Certificate**, choose the certificate you will use, and then choose **OK** and close the Bindings page. + + You see the original HTTP binding, and the HTTPS binding you just created. + +8. Select the original HTTP binding and choose **Remove**. + +9. Select the HTTPS binding and choose **Edit**. + +10. Change **Port** from the temporary value you added in step 6, to the port number you used in the Release Management Server in step 1, and then choose **OK** and **Close**. + + ![Edit the temporary port](_img/ic729496.png) + + The HTTPS port binding on the Release Management website in IIS matches the port that you originally entered in Release Management Server configuration tool. + + ![Port in IIS matches port in server](_img/ic729692.png) + +<a name="making-release-mgt-conn"></a> +### Making all the Release Management connections with HTTPS + +Once the certificates have been installed on all the computers running Release Management Client and Microsoft Deployment Agent, you can connect the computers to the Release Management Server over SSL. If TFS is running HTTPS with SSL, you must configure the TFS connection to use HTTPS. + +Setting up a TFS connection for the first time? There are some additional steps and some account permission requirements. For more information, see [Connect Release Management to TFS](../../release/previous-version/install-release-management/connect-to-tfs.md) + +### Connect Release Management Client to Release Management Server using HTTPS + +1. Launch the Release Management Client. + + > [!TIP] + > If you get an error message saying you no longer have access to the server, you can reinstall the Release Management client, or you can use a command line tool to point the client to the server using the new port and protocol. For more information, see this [blog post](http://blogs.msdn.com/b/visualstudioalm/archive/2014/04/02/did-you-uninstall-release-management-server-and-lose-access-to-the-release-management-client.aspx). + +2. Choose **Administration**, and then choose **Settings**. + +3. In **Release Management Server URL**, choose **Edit**. + +4. In the **Configure Services** dialog box, select HTTPS and enter the fully qualified domain name and the SSL port of the Release Management Server, and then choose **OK**. You’ll be prompted to restart the application. + +![Connect client using HTTPS/SSL](_img/ic726408.png) + +### Connect Microsoft Deployment Agent to Release Management Server using HTTPS + +1. Launch the Microsoft Deployment Agent. + +2. In **Release Management Server**, enter the URL for the Release Management Server and choose **Apply Settings**. Remember to use HTTPS protocol, the fully qualified domain name for the server, and the port you set up in IIS. + +![Connect agent using HTTPS/SSL](_img/ic726728.png) + +### Connect Release Management Server to TFS using HTTPS + +1. Launch the Release Management Client. + +2. Choose **Administration**, and then choose **Manage TFS**. + +3. Change the protocol of the connection to HTTPS, update the port (if necessary) and choose **Verify**. + +![Connect to TFS using HTTPS/SSL](_img/ic728936.png) + +<a name="config-client-computers"></a> +## Configuring Client Computers + +On every client computer from which users access Team Foundation, you must install the certificate locally and clear the client cache for any user who has accessed Team Foundation from that computer. Otherwise, users will not be able to connect to Team Foundation from that computer. For more information, see [Manage Trusted Root Certificates](http://go.microsoft.com/fwlink/?LinkId=164939). + +> [!IMPORTANT] +> Do not follow this procedure for computers that are running both Team Foundation Server and one or more clients of Team Foundation. + +### To install the certificate on a client computer + +1. Log on to the computer by using an account that belongs to the **Administrators** group on that computer. + +2. Install the certificate into the Trusted Root Certification Authorities folder for the local computer. + +### To clear the cache on a client computer + +1. Log on to the computer by using the credentials of the user whose cache you want to clear. + +2. Close any open instances of Visual Studio. + +3. In a browser window, open the following folder: + + *Drive* **:\\Users\\** *UserName* **\\AppData\\Local\\Microsoft\\Team Foundation\\4.0\\Cache** + +4. Delete the contents of the Cache directory. Make sure that you delete all subfolders. + +5. Choose **Start**, choose **Run**, type **devenv /resetuserdata**, and then choose **OK**. + +6. Repeat these steps for the account of every user who has accessed Team Foundation from that computer. + + > [!NOTE] + > You might want to distribute instructions for clearing the cache to all of your Team Foundation users so that they can clear the caches for themselves. + +### To connect client computers to the reconfigured deployment + +- In Visual Studio, connect to Team Foundation Server by using the new HTTPS URL. + + For more information, see [Connect to team projects in Team Foundation Server](../../connect/connect-team-projects.md). + +<a name="config-git"></a> +## Configuring Git + +By default, projects that use Git for version control will fail to validate the SSL certificate you have configured for TFS. This is because unlike TFS and Visual Studio, Git does not recognize the Windows certificate store. Instead, it uses OpenSSL for its certificate store. In order to use a Git repository for projects configured with SSL, you'll need to configure Git with the certificate at the root of the certification chain for your TFS 2013 deployment. This is a client configuration task that only applies to Git repository projects. + +For more information about how Git network operations work in Visual Studio 2013, see this [blog post](http://blogs.msdn.com/b/phkelley/archive/2013/10/20/git-network-operations-in-visual-studio-2013.aspx). + +> [!TIP] +> For other Git credential management tasks, such as Windows authentication, consider downloading and installing [Windows Credential Store for Git](http://gitcredentialstore.codeplex.com/). + +### To configure the certificate store for Git + +- Log on to the computer by using an account that belongs to the **Administrators** group on that computer. + +- Make sure that the required certificate has been installed and configured on the computer, as per above. + +- In your supported web browser, extract the TFS root certificate as a base64-encoded X.509 CER/PEM file. + +- Create a private copy of the Git root certificate store and add that to your private user copy of the store. + +For a full walkthrough of this procedure, including screenshots, see [Philip Kelley's blog](http://blogs.msdn.com/b/phkelley/archive/2014/01/20/adding-a-corporate-or-self-signed-certificate-authority-to-git-exe-s-store.aspx). + diff --git a/docs/tfs-server/admin/split-team-project-collection.md b/docs/tfs-server/admin/split-team-project-collection.md new file mode 100644 index 00000000000..9ebe09b4d5c --- /dev/null +++ b/docs/tfs-server/admin/split-team-project-collection.md @@ -0,0 +1,403 @@ +--- +title: Split a team project collection +description: Split a team project collection +ms.assetid: e64f32d4-fd48-4a50-81fe-24311f27b49e +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Split a team project collection + +**TFS 2015** | **TFS 2013** + +As your business changes, you might want to split a single team project collection into multiple team project collections. For example: + +- You want the projects in a collection to align with business units in your organization, and the projects in the collection are now owned by separate units. + +- You upgraded from an earlier version of TFS, you have only one collection, and you want to organize your projects into separate collections for security or business alignment reasons. + +- You want to change ownership of some of the projects in the collection to a remote office that has its own deployment of TFS. This scenario requires that you first split a collection and then move one of the resulting collections to the remote office deployment. + + > [!NOTE] + >The procedures in this topic support only splitting a team project collection. If you want to move a collection after you split it, see [Move a team project collection](move-project-collection.md). + +**In this topic** + +To split a team project collection, follow these steps: + +1. **Prepare to split the collection:** + + 1. [Detach the collection](#detach-the-coll) + + 2. [Back up the collection database](#backup-coll-db) + +2. **Split the collection:** + + 1. [Restore the collection database with a different Name](#restor-coll-db-new-name) + + 2. [Attach the original collection database](#attach-original-coll-db) + + 3. [Attach the renamed collection database](#attach-renamed-coll-db) + + 4. [Delete projects from the split collections](#delete-projs-split-colls) + + 5. [Start the collections](#start-team-proj-coll) + +3. **Configure the split collections:** + + 1. [Configure Users and Groups for the Split Team Project Collections](#config-users-split-colls) + + 2. [Configure users and groups for projects in the collections](#config-users-projs) + +[Q & A](#q-and-a) + +**Before you begin** + +Make sure that you're an administrator on the servers and in SQL Server and TFS. If you're not an administrator, [get added as one](../add-administrator-tfs.md). + +<a name="detach-the-coll"></a> +## 1-a. Detach the collection + +First detach the collection from the deployment of TFS on which it is running. Detaching a collection stops all jobs and services as well as the collection database itself. In addition, the detach process copies over the collection-specific data from the configuration database and saves it as part of the team project collection database. + +### To detach a team project collection + +1. Open the administration console for Team Foundation on the server that hosts the collection that you want to split. + +2. Choose **Team Project Collections**, and in the list of collections, choose the collection that you want to split. + + In this example, the administrator chooses "TestProjects." + + ![](_img/ic738726.png) + + > [!TIP] + > The default name for a team project collection is "DefaultCollection." If you are splitting this database, make sure to give the second collection a distinctly different name, because this is the default choice at connection. + +3. On the **General** tab, choose **Stop Collection**. + + ![](_img/ic738727.png) + + The **Team Project Collection Status Reason** dialog box opens. The text you enter will be displayed to your users. Choose **Stop**, and wait for the collection to stop. When it is stopped, its status will show as **Offline**. + +4. On the **General** tab, choose **Detach Collection**. + + The **Detach Team Project Collection Wizard** opens. + + ![](_img/ic738728.png) + +5. (Optional) On the **Provide a servicing message for the team project collection** page, in **Servicing Message**, provide a message for users who might try to connect to projects in this collection. + +6. On the **Review settings that will be used to detach team project collection** page, review the details. If you want to changes any settings, choose **Previous**. If they appear to be correct, choose **Verify**. + +7. When all the readiness checks have completed successfully, choose **Detach**. + +8. On the **Monitor the team project collection detach progress** page, when all processes have completed, choose **Next**. + +9. (Optional) On the **Review supplemental information for this team project collection** page, choose or note the location of the log file, and then close the wizard. + + The team project collection no longer appears in the list of collections in the administration console. + +<a name="backup-coll-db"></a> +## 1-b. Back up the collection database + +After you have detached the collection, you must back up its database before you can restore a copy to the server with a different name. That copy will become the database for the part of the original collection that you want to split into another collection. To perform this task, you must use the tools that are provided with SQL Server. + +![](_img/ic738721.png) +### To back up a collection database + +- For information about how to manually back up and restore individual databases, see the following pages on the Microsoft Web site, and make sure to choose the version of SQL Server that matches your deployment: [Backing Up and Restoring Databases in SQL Server](http://go.microsoft.com/fwlink/?LinkId=115430) and [Create a backup schedule and plan](backup/config-backup-sched-plan.md). + + > [!IMPORTANT] + > If your original deployment used the Enterprise or Datacenter editions of SQL Server, and you want to restore the database that you want to split to a server running Standard edition, you must use a backup set that was made with SQL Server compression disabled. Unless you disable data compression, you will not be able to successfully restore Enterprise or Datacenter edition databases to a server running Standard edition. To turn off compression, follow the steps in the [Microsoft Knowledge Base article](http://go.microsoft.com/fwlink/?LinkId=253758). + +<a name="restor-coll-db-new-name"></a> +## 2-a. Restore the collection database + +When you split a collection, you must restore the backup of the collection database to an instance of SQL Server that is configured to support the deployment of TFS. When you restore the database, you must give it a different name from the name of the original collection database. + +> [!TIP] +> The steps below give a general overview of how to restore a team project collection database in SQL Server 2012 using SQL Server Management Studio. For more information about how to manually back up and restore individual databases, see the following page on the Microsoft Web site, and make sure to choose the version of SQL Server that matches your deployment: [Backing Up and Restoring Databases in SQL Server](http://go.microsoft.com/fwlink/?LinkId=115430). + +### To restore the collection database with a new name + +1. Open SQL Server Management Studio and connect to the instance that hosts the database for the team project collection that you want to split. + +2. In Object Explorer, expand **Databases**, open the sub-menu for the database you want to split, and then choose **Tasks**, choose **Restore**, and then choose **Database**. + + The Restore Database window opens on the **General** page. + + ![](_img/ic738729.png) + +3. In **Source**, make sure that the team project collection database is chosen. In **Destination**, provide a name for the copy of the database. Keep the Tfs\_ prefix, but give it a distinct name after that prefix. Ideally that name will be the name of the split team project collection. In **Restore plan**, make sure that the backup sets to restore are the ones you want to restore to. To make sure that these are valid sets, choose **Verify Backup Media** and then, in **Select a page**, choose **Options**. + +4. In **Restore options**, leave all the check boxes blank. Make sure that **Recovery state** is set to **RESTORE WITH RECOVERY**. In **Tail-Log Backup**, clear the **Leave source database in the restoring state** check box, and then choose **OK**. + + >**Tip:** + >If the restore operation fails with an error message indicating that the database is in use and cannot be overwritten, you might need to manually configure all the logical file names to reflect the new name for the database. In **Select a page**, choose **Files**, choose the ellipsis button next to each file being restored, and make sure that the names of the files reflect the new name for the database, not the old one. Then try the restore operation again. + +<a name="attach-original-coll-db"></a> +## 2-b. Attach the original collection database + +After you have restored the database with a different name, you must reattach the original collection database to the deployment of TFS. + +> [!NOTE] +> If your deployment uses SharePoint Products and the service account for TFS is not a member of the Farm Administrators group, warnings will appear when you attach the collection. This behavior is expected. + + +### To attach the collection + +1. Open the administration console for Team Foundation. + +2. Choose **Team Project Collections**, and then choose **Attach Collection**. + + The **Attach Team Project Collection Wizard** opens. + +3. On the **Select the team project collection database to attach** page, in **SQL Server Instance**, provide the name of the server and the instance that hosts the collection database, if it is not already listed. + +4. In the **Databases** list, choose the collection database that you want to attach. + + ![](_img/ic738730.png) + +5. On the **Enter the team project collection information** page, provide a name for the collection in **Name** if one is not already present. Since this is the original collection, you can choose to leave the name the same as it was before. In **Description**, optionally provide a description of the collection. + +6. On the **Review settings that will be used to attach the team project collection** page, review the information. + +7. If you must change any settings, choose **Previous**. If all the settings are correct, choose **Verify**. + +8. When all the readiness checks have completed successfully, choose **Attach**. + +9. On the **Monitor the team project collection attach progress** page, when all processes have completed, choose **Next**. + +10. (Optional) On the **Review supplemental information for this team project collection** page, choose or note the location of the log file, and close the wizard. + +11. The team project collection appears in the list of collections in the administration console. **If the collection state is listed as** **Online**, **you must stop it before continuing.** Choose the collection from the list, and on the **General** tab, choose **Stop Collection**. + + ![](_img/ic738731.png) + +<a name="attach-renamed-coll-db"></a> +## 2-c. Attach the renamed collection database + +After you attach the original collection database, you must attach the renamed collection to the deployment of TFS. When this collection is attached, it will remain stopped. You will not be able to start it until all duplicate projects have been removed. + +> [!NOTE] +> Warnings will appear when you attach the collection if your deployment uses SharePoint Products and the service account for TFS is not a member of the Farm Administrators group. This behavior is expected. + + +### To attach the renamed collection database + +1. Open the administration console for Team Foundation. + +2. Choose **Team Project Collections**, and then choose **Attach Collection** to open the wizard. + +3. On the **Select the team project collection database to attach** page, in **SQL Server Instance**, provide the name of the server and the instance that hosts the renamed collection database, if it is not already listed. + +4. In the **Databases** list, choose the renamed collection database. + +5. On the **Enter the team project collection information** page, type a name for the renamed collection in **Name** that differs from the name of the original name of the collection. Ideally, this should match the name you gave the renamed database without the Tfs\_ prefix. + + ![](_img/ic738732.png) + +6. (Optional)In **Description**, type a description of the collection. + +7. On the **Review settings that will be used to attach the team project collection** page, review the information. If you must change any settings, choose **Previous**. If all the settings are correct, choose **Verify**. + +8. When all the readiness checks have completed successfully, choose **Attach**. + +9. On the **Monitor the team project collection attach progress** page, when all processes have completed, choose **Next**. + + > [!NOTE] + > If the collection is supported by a SharePoint Web application, a warning icon will appear for the attach status of the SharePoint Web application. Similarly, if the original collection included reporting, a warning icon will appear for the attach status for reports. This behavior is expected, and you can ignore it. + +10. (Optional) On the **Review supplemental information for this team project collection** page, choose or note the location of the log file, and then close the wizard. + +11. The name of the collection appears in the list of collections in the administration console, and its status should display as **Offline**. + + ![](_img/ic738732.png) + +12. To ensure that both collections have attached with unique IDs, in the administration console, go to Event Logs and open the log files for both collection attach operations. The GUIDs for CollectionProperties should **not** match. + + ![](_img/ic740323.png) + + In the unlikely event that the CollectionProperties GUIDs do match, you must change the ID to a unique ID before continuing by running the TFSConfig [Collection Command](../command-line/tfsconfig-cmd.md#collection) on the second collection with the /clone parameter.. + +<a name="delete-projs-split-colls"></a> +## 2-d. Delete projects on the split collections + +Now that you have two copies of the collection attached to TFS, you must delete each project from either the original collection or the renamed collection so that no project remains in both collections. + +> [!IMPORTANT] +> A project cannot exist in more than one collection. Until you delete all duplicated projects between the split collections, you will not be able to start the renamed collection. + +### To delete projects from the collections + +1. Open the administration console for Team Foundation. + +2. Choose **Team Project Collections**, and in the list of collections, choose the original team project collection that you stopped in order to split it. + +3. On the **Team Projects** tab, in the list of team projects, choose a project that you want to delete from the collection, and then choose **Delete**. + + > [!TIP] + > You can select more than one project to delete at a time. + + ![](_img/ic738734.png) + +4. Select the **Delete workspace data** check box, leave the **Delete external artifacts** check box cleared, and then choose **Delete**. + + If the **Delete external artifacts** check box is not cleared and your team project is configured to use Lab Management, the virtual machines and templates that are associated with the project will be deleted from System Center Virtual Machine Manager. They will no longer be available to the team project in the renamed collection. + +5. When you have finished deleting the projects you do not want hosted in the original team project collection, choose the renamed team project collection from the list of collections. Then, on the Team Projects tab, delete the projects you do not want hosted on the new collection. + + ![](_img/ic738735.png) + +6. Repeat these steps until both collections contain a set of unique projects. + +<a name="start-team-proj-coll"></a> +## 2-e. Start the team project collections + +After you delete projects, you must restart both collections. + +### To start a team project collection + +1. Open the administration console for Team Foundation. + +2. Choose **Team Project Collections**, and in the list of collections, choose the collection that you stopped in order to split it. + +3. On the **General** tab, choose **Start Collection**. + +4. Repeat step 2 for the collection that you attached with a new name. + + ![](_img/ic738736.png) + +<a name="config-users-split-colls"></a> +## 3-a. Configure users and groups for the split collections + +You can skip this procedure if both split collections will remain in the same domain and you want to allow access for the administrators of the original collection to both collections. + +After you have split a collection, you must update the permission groups for both collections with users and groups that will administer those collections. + +### To configure administrators for both collections + +- For more information, see [Set administrator permissions for team project collections](../add-administrator-tfs.md). + +<a name="config-users-projs"></a> +## 3-b. Configure users and groups for projects + +You can skip this procedure if the split collections will remain in the same domain and you want to allow access for the users of projects in the original collection to both collections. + +After you configure administrators for both collections, either you or those administrators must configure access for users and groups to the projects in each collection. Depending on your deployment, you might also need to configure permissions for those users in SharePoint Products and Reporting Services. + +### To configure access for users to team projects + +- For more information, see [Add users to team projects](../../accounts/add-users.md) and [Add team members](../../work/scale/multiple-teams.md#add-team-members). + +<a name="q-and-a"></a> +## Q & A + +### Q: My deployment uses reporting. Are there any additional steps I need to take when splitting collections? + +**A:** Yes, you'll need to split reports after you've finished deleting team projects so that both collections have a unique set of projects. You'll also need to rebuild your data warehouse. + +After you delete projects, you must move the reports that the split collection uses into a different folder, and you must delete them from the original folder. + +> [!IMPORTANT] +> The report folders exist in both locations. Make sure that you move all reports appropriately before you delete any report folders. + +### To split reports into separate folders + +1. In Report Manager, move the reports that support the split collection into the appropriate folders for that collection. + + For more information, see the following topic on the Microsoft Web site: [Move Items Page](http://go.microsoft.com/fwlink/?LinkId=178734). + +2. If your deployment utilizes a SharePoint Web application, you might need to repair the connection again after you move the reports before they will appear correctly. If reports do not appear correctly, follow the steps in the previous procedure to repair the connection. + +Once you've split the reports and started both collections, you must rebuild the warehouse for Team Foundation and the database for Analysis Services. You must perform this step to ensure that reports and dashboards work correctly for the deployment after you split the collection and that no conflicts occur with other collections in the deployment. + +### To rebuild the data warehouse and the Analysis Services database + +1. Open the administration console for Team Foundation. + +2. In the navigation bar, choose **Reporting**. + +3. In **Reporting**, choose **Start Rebuild**. + +4. In the **Rebuild the Warehouse and Analysis Services Databases** dialog box, choose **OK**. + + > [!NOTE] + > The warehouses will continue to be rebuilt and the data will continue to be repopulated after the Start Rebuild action finishes. Depending on the size of your deployment and the amount of data, the whole process might take several hours to complete. + +### Q: Can I split a collection that uses SharePoint Products to support one or more team projects in the collection? + +**A:** Yes, but you'll need to perform additional steps for the split collection. + +After you attach the renamed collection and remove all duplicate projects, you must repair the connection to the SharePoint Web application. Repairing the connection ensures that all connections are correctly set between the Web application and the original and renamed collections. + +If your deployment uses SharePoint Products, it is strongly recommended that the service account for TFS be a member of the **Farm Administrators** group. + +> [!NOTE] +> You can split a team project collection without granting this membership to the service account for TFS. However, you will see errors when you attach the collection, and you will need to perform additional steps to reconnect projects with their portals. Even if your operational requirements generally restrict granting this membership to the service account, you should consider adding the service account to the Farm Administrators group for the duration of the split operation. + + +### To repair the connection to a SharePoint Web application + +1. Open the administration console for Team Foundation on the server that hosts the application tier for the deployment to which you want to move the collection. + +2. Choose **SharePoint Web Applications**, and in the list of Web applications, choose the Web application that supports the collections that you just attached. + + The **Repair Connection** button appears after you select a Web application in the list. + +3. Choose **Repair Connection**, and in the **Repair the connection to a SharePoint Web Application** dialog box, choose **Repair**. + +4. When the Status window reports **Reconnect operation succeeded**, choose **Close**. This might take a few minutes. In addition, you might see some errors as part of this process, since the two collections are still using the same SharePoint default site location for their team project portals. This is expected behavior. + +After you have repaired the connection and started both collections, you must reconfigure the team project portals for projects in each collection so that those portals reflect the correct data for those projects. + +<a name="configportals"></a> +### To reconfigure team project portals + +- Open Team Explorer, connect to each team project collection, and for each team project, configure the URL for the SharePoint site. For each team project, choose **Settings**, choose **Portal Settings**, and make sure that the **Reports and dashboards refer to data for this team project** check box is selected. + +You can continue to use the same site collection in SharePoint Products to support both split collections. Team projects in both collections will use the same team project portals as before. All portals are hosted on the site collection that supported the original team project collection. However, this configuration not only complicates the one-to-one relationship between a team project collection and a site collection but also makes restoring your deployment potentially more difficult. To avoid this complexity, you can split the site collection that supported the original team project collection to reflect the split that you made for the team project collections. + +### To split the site collection and redirect the split team project collections to use the split site collections + +1. For information about how to split a site collection, see [Move site collections between databases](https://technet.microsoft.com/library/cc825328(v=office.15).aspx) or the latest guidance for your version of SharePoint Products. + + > [!TIP] + > Make sure that you configure user permissions and access to the site collections to match the user access to the team project collections, as detailed earlier in this topic. + +2. Configure any affected team project collection to utilize the split site collection by opening the administration console, choosing the collection from the list of the team project collections, and on the SharePoint Site tab, choosing **Edit Default Site Location**. + +3. Reconfigure the team project portals for team projects in each collection so that those portals reflect the correct data for those projects. + + For more information, see [Reconfigure Team Project Portals](split-team-project-collection.md#configportals) above. + + + +### Q: How do I split a collection configured for Lab Management? + +**A:** You'll need to perform several additional steps to split the collection. Before you start the split, you'll need to delete the Lab Management resources from the collection, and then, after the split, you'll have to individually configure Lab Management resources for each of the split collections. + +Before you start the split, delete the resources that Lab Management uses from the collection database. These resources include virtual machines, templates, team project host groups, and team project library shares. You will need to re-create the Lab Management assets after you restore and attach the collection. + +### To delete the Lab Management resources + +- For information about how to remove all group hosts, library shares, and environments from a specified team project collection, see [TFSConfig Lab /Delete Command](../command-line/tfsconfig-cmd.md#lab-delete) with the **/External** option. + +Once you've completed the split, you must recreate team project host groups. You must also recreate team project library shares in TFS and the virtual machines, templates, and environments in Microsoft Test Manager. + +### To configure Lab Management resources + +1. Configure the application tier for Team Foundation. + + For more information, see [Configuring Lab Management for SCVMM Environments](config-lab-scvmm-envs.md). + +2. Recreate the golden master virtual machines and templates in the new SCVMM and import virtual machines and templates into the team project collection. + + For more information, see [How to: Create and Store Virtual Machines and Templates Ready for Lab Management](https://msdn.microsoft.com/en-us/library/ee702479(v=vs.120).aspx). + +3. Recreate the environments for each team project. + + For more information, see [Creating an SCVMM Environment Using Stored Virtual Machines and Templates](https://msdn.microsoft.com/en-us/library/ee518915(v=vs.120).aspx). diff --git a/docs/tfs-server/admin/stop-start-stuff.md b/docs/tfs-server/admin/stop-start-stuff.md new file mode 100644 index 00000000000..1a86b74e3f1 --- /dev/null +++ b/docs/tfs-server/admin/stop-start-stuff.md @@ -0,0 +1,76 @@ +--- +title: Stop and start services, application pools, and websites +description: Stop and start services, application pools, and websites +ms.assetid: 1c3471fc-6ecc-4e9f-b25b-748f70672134 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.topic: get-started-article +--- + +# Stop and start services, application pools, and websites + +**TFS 2015** | **TFS 2013** + +For Visual Studio Team Foundation Server (TFS) to operate correctly, all required services, application pools, and Web sites must be running on the appropriate server. In single-server deployments, each component must run on the server that runs TFS. In multiple-server deployments, each component must run on the appropriate server. In addition, you might need to stop an element to perform a particular task, such as moving your deployment to a different set of hardware. + +For operations such as backing up or restoring databases, you can run the [TFSServiceControl Command](../command-line/tfsservicecontrol-cmd.md) to start or stop all TFS services and application pools. + +## To stop or start a service, application pool, or Web site + +1. If you’re not a member of the **Administrators** group on the server that hosts the service, application pool, or Web site that you want to manage, get added now. See [Set administrator permissions for Team Foundation Server](../add-administrator-tfs.md). + +2. Log on to the server that hosts the service, application pool, or Web site. + +3. Open **Computer Management**. + +4. In the navigation pane, expand **Services and Applications**. + +5. Perform one of the following steps based on what element you want to stop or start: + + - For a service, open the navigation menu for the service, and then choose **Stop** or **Start**. + + - For an application pool, open **Internet Information Services (IIS) Manager**, expand the local computer and open **Application Pools**. Open the navigation menu and choose **Stop** or **Start**. + + - For a Web site, open **Internet Information Services (IIS) Manager**, expand the local computer, and open **Web Sites** or **Sites**. Open the navigation menu and then choose **Stop** or **Start**. + +## Location of services, application pools, and web sites + +The following table lists the server on which each service, application pool, and web site must be running. The Name column lists the display name for each element with service names in parentheses. Which services you need will vary based on which features of Team Foundation you have installed. + +| Element | Location | Name | +| --- | --- | --- | +| Services | Application-tier server | Code Coverage Analysis Service </br> Internet Information Services Administration Service (IISADMIN) </br> HTTP SSL (HTTPFilter) </br> Visual Studio Team Foundation Build (VSTFBUILD) (only when Team Foundation Build is installed) </br> Visual Studio Team Foundation Background Job Agent (TFSJobAgent) </br> World Wide Web Publishing Service (W3SVC) | +| . | Server that hosts the databases for Team Foundation | SQL Server (<em>TFSINSTANCE</em>) </br> SQL Server Agent (<em>TFSINSTANCE</em>) (SQLSERVERAGENT) | +| . | Server that hosts SQL Server Reporting Services | IIS Admin Service (IISADMIN) </br> HTTP SSL (HTTPFilter) </br> SQL Server Reporting Services (<em>TFSINSTANCE</em>) (ReportServer) </br> World Wide Web Publishing Service (W3SVC) | +| . | Server that hosts SQL Server Analysis Services | SQL Server Analysis Services | +| . | Server that hosts SharePoint Products  | Internet Information Services Administration (IISADMIN) </br> HTTP SSL (HTTPFilter) </br> Windows SharePoint Services Timer (SPTimer) </br> World Wide Web Publishing Service (W3SVC) | +| Application pools | Application-tier server | TFS Application Pool </br> TFS Proxy Application Pool (only when Team Foundation Server Proxy is installed) | +| . | Server that hosts SharePoint Products | DefaultAppPool (used by the Team Project portal) </br> **Note**: The name might vary based on how SharePoint Products was installed. </br> SharePoint Central Administration v3 | +| Web sites | Application-tier server | Team Foundation Server </br> Team Foundation Server Proxy (only if Team Foundation Server Proxy is installed) | +| . | Server that hosts SharePoint Products | Default Web Site or Team Web site </br> **Note**: The name might vary based on how SharePoint Products was installed. </br> SharePoint Central Administration v3 |</tbody> + + +## Q & A + +**Q: Which service account supports each service?** + +**A:** [See Service accounts and dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md). + +**Q: Are there additional services that TFS supports?** + +**A:** Yes, TFS includes a set of Web services and application-level services See [Team Foundation Server architecture](../architecture/architecture.md). + +**Q: What services depend on service accounts?** + +**A:** [See Service accounts and dependencies in Team Foundation Server](service-accounts-dependencies-tfs.md). + +**Q: How do I change the TFS service account or password?** + +**A:** See [Change the service account or password for Team Foundation Server](change-service-account-password.md). + +**Q: How do I change the service account or password for SQL Server Reporting Service?** + +**A:** See [Change the service account or password for SQL Server Reporting Services](change-service-account-or-password-sql-reporting.md). diff --git a/docs/tfs-server/architecture/architecture.md b/docs/tfs-server/architecture/architecture.md new file mode 100644 index 00000000000..0bfe0982b70 --- /dev/null +++ b/docs/tfs-server/architecture/architecture.md @@ -0,0 +1,301 @@ +--- +title: Team Foundation Server Architecture +description: Describes the overall architecture of Team Foundation Server +ms.assetid: b6c250e9-6494-4dbd-8146-061e3b9c0f6b +ms.manager: douge +ms.author: elbatk +ms.date: 08/16/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Team Foundation Server architecture + +**TFS 2017 | TFS 2015 | TFS 2013** + +To best plan and manage your deployment, you should first understand the underlying architecture of Team Foundation Server (TFS). Understanding the architecture can help you maintain the overall health of the deployment and help ensure the overall availability of the servers and services your development teams require. + +You can deploy TFS in several ways: on one server; on many servers; or in one domain or workgroup or across domains. Alternatively, you might choose to use Visual Studio Team Services, where all the server elements of your deployment are hosted for you by Microsoft. Understanding the architecture can help you decide what topology is most likely to meet your business needs. Regardless of your choice of topology, if you understand the architecture underlying TFS, you can better manage the physical and logical requirements. This topic provides a simple overview of the various architectures, with links to more information about example deployments. It also provides technical information about the services, databases, configuration information, and network ports and protocols of local deployments. + +To understand the architecture of TFS and how it affects your deployment, you should consider the following: + +* The logical application, data, and client tiers of Team Foundation, and whether you want to use one or more servers for the application and data tiers, or whether you want the application and data tiers hosted in the cloud for you by using VSTS + +* The location of the physical or virtual servers that host those tiers + +* Team Foundation Build and the number and location of build computers that will run in your environment, including how many you might need to support your development practices + +* The potential need for Team Foundation ServerProxy + + +In addition, you must consider the interactions between these entities. For example, if you choose to use the hosted TFS service, you must ensure that your clients can access the service on port 443. If you choose to deploy TFS locally, you must know what Web services, databases, and object models TFS uses. Also, you must know which network ports and protocols TFS uses by default and which network ports you can customize. Finally, you must understand what permissions you must set in Team Foundation Server and the components and programs on which your deployment depends. + +Besides its own services, Team Foundation Server depends on other services in order to function. For information about these services, see Team Foundation Server concepts and Components of the TFS data warehouse. For more information about the requirements and dependencies for installation, see Team Foundation Server install guide. + +> **Caution!** You should not manually modify any of the TFS databases unless you’re instructed to do so by Microsoft Support or you’re following the procedures described for manually backing up the databases. Any other modifications can invalidate your service agreement. + + +<a name="teamservices"></a> +## Visual Studio Team Services (VSTS) + +![Team Services](../_img/architecture/vsts_architecture_intro.png) + +Microsoft offers the option of using VSTS, which can host all of the server-side aspects of TFS for you. Your source code, work items, build configurations, and team features are all hosted in the cloud. From an architectural point of view, this greatly simplifies your use of TFS, as the only aspects of the architecture you need to consider are the client components and their Internet access. + +When using the VSTS, you use a web browser to connect to the service using your Microsoft account. You can create team projects, add members to your team, and work as you would with a locally installed TFS, without the overhead of administering the servers. VSTS hosts your application tier, data tier, and build servers in the cloud. + + +<a name="theobjectmodel"></a> +## The object model + +With either the hosted or the locally-deployed architecture, you can extend the features and functionality of Team Foundation by writing an application that is based on its server or client object model. In all deployment types, you can write applications that extend client capabilities. However, if you want to extend server capabilities, your application must run on the application-tier server. To extend the client capabilities, you must run the application on the same computer as Team Explorer. + +![The TFS object model](../_img/architecture/object_model.png) + + +<a name="web-svcs-local-deploy"></a> +## Web services and databases for local deployments + +Team Foundation Server includes a set of Web services and databases that you install and configure separately on the server or servers that host the logical application, data, and client tiers for Team Foundation. Some features, such as the task board, and backlog team-based features, are entirely web-based and accessed solely through Team Web Access, a client-side web based service. Others, such as the version control features, can be accessed through either Team Web Access or through a client application. The following illustrations provide a high-level view of web services, applications, and databases for local deployments of TFS. + +![TFS main service tiers](../_img/architecture/tfs_services_tiers.png) + +![Optional TFS services](../_img/architecture/optional_tfs_services.png) + +![TFS clients](../_img/architecture/tfs_client_model.png) + + +<a name="collection-level-svcs"></a> +### Collection-level services + +Collection-level services provide the functionality for operations at the level of the team project collection. You can create applications that extend Team Foundation Server by using some of these services. For more information about creating applications for TFS, see Extending Team Foundation. + +> **Tip!** Some services appear in more than one level. For example, the Registry service functions at the collection level and the server level, and appears in both lists. + + +Team Foundation Framework Services: + +* Registry service + +* Registration service (for compatibility with earlier versions of Team Foundation Server) + +* Property Service + +* Event Service + +* Security service + +* Location service + +* Identity Management service + +* Version Control Web service + +* Work Item Tracking Web service + +* Team Foundation Build Web service + +* Lab Management Web service + +* VMM Administration Web service + +* Test Agent Controller Web service + + +<a name="server-level-svcs"></a> +### Server-level services + +Server-level services (also known as application-level services) provide the functionality for operations for Team Foundation Server as a software application. You can create applications that extend Team Foundation Server by using some of these services. For more information, see [Extending Team Foundation](extend-vs-for-alm.md). + +Team Foundation Framework Services: + +* Registry service +* Event service +* Team Project Collection service +* Property service +* Security service +* Location service +* Identity Management service +* Administration Service +* Collection Management Service +* Catalog Service + +<a name="datatier"></a> +### Data tier + +The data tier includes data, stored procedures, and other associated logic. When you use Visual Studio Team Services, the data tier is hosted for you using SQL Server Azure. In a local deployment of TFS, the logical data tier consists of the following operational stores within SQL Server. These stores might be located on one physical server or distributed across many servers. You can create applications that extend Team Foundation Server by using some of these operational stores. For more information, see [Extending Team Foundation](extend-vs-for-alm.md). + +* Configuration database (TFS_Configuration) +* Application warehouse (TFS_Warehouse) +* Analysis Services database (TFS_Analysis) +* Databases for team project collections (TFS_CollectionName) + + +The following table provides a list of the databases that Team Foundation Server uses in local deployments. Unless otherwise noted, you can move all databases in this list from the original server and instance where they are installed and restore them to another server or instance. + + +| Database Name and Description | Server | +| --- | --- | +| **TFS_Configuration** This database stores the catalog of resources and the configuration information for Team Foundation Server. This database contains the operational stores for Team Foundation Server. | Instance of SQL Server that is used when Team Foundation Server is installed and configured. | +| **TFS_Warehouse** This database stores the data for reports. | Instance of SQL Server that is used when Team Foundation Server is installed and configured. | +| **TFS_Analysis** This multi-dimensional database stores the aggregated data from team project collections. | Instance of SQL Server that is used when Team Foundation Server is installed and configured. | +| **Databases for team project collections** One database for each team project collection, containing data from all team projects in that collection. | Instance of SQL Server that is compatible with Team Foundation Server. | + + +<a name="clienttier"></a> +### Client tier + +The client tier communicates with the application tier through the server object model, and uses the same Web services that are listed for that tier. This is true whether you deploy TFS locally, or if you use Visual Studio Team Services. Besides that model, the client tier consists of Visual Studio Industry Partners (VSIP) components, Microsoft Office integration, command-line interfaces, and a framework for check-in policies. + + +<a name="config-info"></a> +## Configuration information + +The hosted service depends on the client services, deployed locally, and an Internet connection to the application and data tiers hosted in the cloud. A local deployment of Team Foundation Server depends on SQL Server, Internet Information Services (IIS), and the Windows operating system. Contingent on your chosen topology, Team Foundation Server might also depend on SQL Server Reporting Services or SharePoint Products. Therefore, configuration information for Team Foundation Server can be stored in any of the following locations: + +* IIS data stores. +* Configuration files for Team Foundation Server. +* Data sources for Reporting Services (for example, TFSREPORTS data). +* Configuration database for Team Foundation Server. The Team Foundation Server registry is part of the configuration database. +* Windows Registry. + + +For examples of different local deployment topologies and where these resources are stored, see [Examples of Simple Topology](examples-simple-topo.md), [Examples of Moderate Topology](examples-moderate-topo.md), and [Examples of Complex Topology](examples-complex-topo.md). As you maintain a local deployment of Team Foundation Server, you must take these configuration sources into account. To change the configuration in any way, you might need to modify information that is stored in multiple locations. You might also need to change configuration information for the data and client tiers. Team Foundation Server includes an administration console and several command-line utilities to help you make these changes. For more information, see [Configure and manage TFS resources](../admin/config-tfs-resources.md). + + +<a name="sync-group-ids"></a> +## Synchronization of group identities between Active Directory and Team Foundation Server + +In local deployments where Team Foundation Server is running in an Active Directory domain, group and identity information is synchronized when any of the following events occur: + +* The application-tier server for Team Foundation starts. + +* An Active Directory group is added to a group in Team Foundation Server. + +* The period of time that is specified in the scheduled job elapses. The default is one hour, and all groups in Team Foundation Server update every 24 hours. + + +Identity Management Services (IMS) synchronizes with Active Directory, and changed identities propagate from the server to the clients. By default, all groups update within 24 hours, but you can customize this to better suit the needs of your deployment. For more information, see [Trusts and Forests Considerations for Team Foundation Server](https://msdn.microsoft.com/en-us/library/ms253081(v=vs.120).aspx). For local deployments that do not use Active Directory, see [Managing Team Foundation Server in a Workgroup](https://msdn.microsoft.com/en-us/library/ms252507(v=vs.120).aspx). + +<a name="groups-n-perms"></a> +## Groups and permissions + +In a local deployment, Team Foundation Server has its own set of default groups and permissions that you can set at the project, collection, or server level. You can create custom groups and customize permissions at group and individual levels. However, users or groups that you add to Team Foundation Server are not automatically added to two components on which local deployments of Team Foundation Server can depend: SharePoint Products and Reporting Services. If your deployment uses these programs, you must add users and groups to them and grant the appropriate permissions before those users or groups will function correctly across all operations in Team Foundation Server. For more information, see [Manage users or groups in TFS](../../security/permissions.md). + +For hosted deployments, access is controlled through a combination of Microsoft accounts and team membership. For more information, see the [VSTS overview](../../overview.md). + + +<a name="network-ports-protocols"></a> +## Network ports and protocols + +By default, a local deployment of TFS is configured to use specific network ports and protocols. The following illustration shows network traffic for Team Foundation Server in a simple deployment. + +![Simple on-premises installation](../_img/architecture/ports-protocols.png) + +Similarly, the hosted service for TFS is configured to use specific network ports and protocols. The following illustration shows network traffic in a hosted deployment. + +![Hosted TFS](../_img/architecture/hosted-tfs.png) + +The following illustration shows network traffic in a more complex deployment that includes the components for Visual Studio Lab Management. + +![Application tier](../_img/architecture/ic630774.png) + +![Virtual environments](../_img/architecture/ic406389.png) + +![virtual machines](../_img/architecture/ic738717.png) + +Virtual machines use port 80 to communicate with any test controller about the download of a lab management agent. Check that this port is enabled if you are having any communication issues. + + +<a name="default-network-settings"></a> +## Default network settings + +By default, communication between the computers in a deployment of Team Foundation uses the protocols and ports shown in the following table. If an asterisk (*) follows the port number, you can customize that port. + +| Tier and service | Protocol | Port | +| --- | --- | --- | +| Application tier – Web Services | HTTP/HTTPS | 8080/443* | +| Application tier – SharePoint Products Administration | HTTP | 17012* if SharePoint Products was installed with Team Foundation Server; otherwise, randomly generated | +| Application tier – SharePoint Products and Reporting Services | HTTP <br/> Windows Management Instrumentation (WMI) service (required during installation to specify and verify the URLs for reporting services) | 80* Dynamic port | +| Data tier | MS-SQL TCP | 1433* | +| Data tier (SQL Server Analysis Services) | MS-AS | default (2382 or 2383)* <br/> The default port varies depending on the version of SQL Server you installed and the type of instance. Use SQL Server Configuration Manager to determine the ports used by your deployment. | +| Team Foundation Server Proxy - client to proxy | HTTP | 8081* | +| Team Foundation Server Proxy - proxy to application tier | HTTP/HTTPS | 8080/443* | +| Client tier - Reporting Services | HTTP | 80* | +| Client tier - Web services | HTTP/HTTPS | 8080/443* | +| Build controller to application tier HTTP/HTTPS | 8080/443 | +| Build agent to application tier | HTTP/HTTPS | 8080/443 | +| Release Management Server | HTTP or HTTPS | 1000* | +| Release Management Client | HTTP or HTTPS | 1000* | +| Release Management Agent | HTTP or HTTPS | 1000* | +| Test controller to application tier | HTTP/HTTPS | 8080/443* | +| Application tier to test controller | .NET remoting | 6901*| +| Application tier to Domain Name System (DNS) | DNS Dynamic Update | 53 | +| Application tier – Virtual Machine Manager | HTTP | 8100 | +| Test controller to test agent | .NET remoting | 6910* | +| Test agent to test controller | .NET remoting | 6901* | +| Build controller to build agent | SOAP over HTTP | 9191 | +| Lab agent to lab agent in an isolated environment | TCP sockets | 9050 | +| Build agent to build controller | SOAP over HTTP | 9191 | +| Virtual Machine Manager Administrator Console – Virtual Machine Manager | HTTP | 8100 | +| Virtual Machine Manager– Virtual Machine Manager hosts | Windows Remote Management (WinRM) to perform actions <br/> Background Intelligent Transfer Service (BITS) to transfer data | 80 to perform actions <br/> 443 to transfer data | +| Virtual Machine Manager– Virtual Machine Manager library server | WinRM to perform actions <br/> BITS to transfer data | 80 to perform actions <br/> 443 to transfer data | +| Application tier – Virtual Machine Manager hosts | Distributed Component Object Model/Windows Management Interface (DCOM/WMI) communication to transfer data | 135 <br/> Dynamically assigned in the range 49152 to 65535 | +| Client tier – Virtual Machine Manager hosts | Host-based connection to the virtual machine. | 2179 to perform host-based connections | +| Hosted services | HTTPS | 443 | + + +<a name="customizable-network-settings"></a> +## Customizable network settings + +As the previous table shows, you can change communication between the application, data, and client tiers in local deployments by modifying Team Foundation Server to use custom ports. The following table describes example changes in ports from HTTP to HTTPS. + +> [!NOTE] +>To configure Team Foundation Server to use HTTPS and Secure Sockets Layer, you must not only enable ports for HTTPS network traffic but also perform many other tasks. For more information, see [Set up HTTPS with Secure Sockets Layer (SSL) for Team Foundation Server](../admin/setup-secure-sockets-layer.md). + +| Service | Protocol | Port | +| --- | --- | --- | +| Web Services with SSL | HTTPS | Configured by the administrator | +| SharePoint Central Administration HTTPS | Configured by the administrator | +| SharePoint Products | HTTPS | 443 | +| Reporting Services | HTTPS | 443 | +| Client Web Services | HTTPS | Configured by the administrator | +| Release Management | HTTPS | Configured by the administrator | + + +## See Also + +[Team Foundation Server concepts](tfs-concepts.md) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/tfs-server/architecture/background-job-agent.md b/docs/tfs-server/architecture/background-job-agent.md new file mode 100644 index 00000000000..7d1342af146 --- /dev/null +++ b/docs/tfs-server/architecture/background-job-agent.md @@ -0,0 +1,55 @@ +--- +title: Team Foundation Background Job Agent +description: Team Foundation Background Job Agent +ms.assetid: 0755031e-29d6-4dfa-83fb-fcd823470932 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Team Foundation Background Job Agent + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +The Visual Studio Team Foundation Background Job Agent service provides a general scheduling mechanism for Web services and jobs for Team Foundation. This Windows service is also used to run the tasks spawned by various wizards, such as the New Team Project wizard and Create a Team Project Collection wizard. The service uses the service account for Team Foundation Server (TFS), referred to as *TFSService*. The service runs on any server that is running a Web service or Web application in the logical application tier for Team Foundation. To operate correctly, the service account for the Team Foundation Background Job Agent service must have the permissions required for the tasks that it performs. + +Some Team Foundation services have tasks that recur at regular intervals. For example, administrators might want to schedule builds on a nightly basis. To accomplish this, build services must be able to set up an automatically scheduled event in the registration database. The Team Foundation Background Job Agent service provides a single Windows-based service to schedule repeating tasks on servers that are running Team Foundation. The service runs through the registration database, identifies all Team Foundation Server Web services that have scheduled events, and schedules these tasks. + +> [!IMPORTANT] +> To perform tasks such as creating team project collections, the service account that the Team Foundation Background Job Agent uses must have certain permissions granted to it. For more information, see [Service accounts and dependencies in Team Foundation Server](../admin/service-accounts-dependencies-tfs.md). + +## Instances + +Only one instance of the Team Foundation Background Job Agent service should be running on any application-tier server for Team Foundation. By default, the service runs under the service account that you specified when you installed Team Foundation Server. To view the status of this service on an application-tier server, open Services and browse to find the service. + +## Permissions + +The Team Foundation Background Job Agent service uses the same service account as TFS does, *TFSService*. To operate correctly, this account requires the following permissions: + +- Log on as a service + +- Farm Administrators group for any SharePoint Web applications that Team Foundation Server uses + +- **TFSExecRole** or both of the following for any databases that Team Foundation Server uses: + + - db\_owner + + - db\_create + +## Assumptions and limitations + +The Team Foundation Background Job Agent service runs continuously on all application-tier servers. Administrators should not need to manually stop or start this service except during system recovery. For example, you must stop this service before you restore databases. The service should restart automatically when a server is restarted. + +Administrators will not directly configure the Team Foundation Background Job Agent service. Tasks that need to be scheduled are configured directly in individual components of Team Foundation, such as Team Foundation Build. When an event is added or deleted, the service automatically reconfigures the tasks scheduled in the registration database. + +The Team Foundation Background Job Agent service will log only one instance of any given error until that error is resolved and a success message is recorded in the Event Log, or until the service is manually restarted. If you want to monitor the Event Log for that error message, you must first stop and restart the service. + +The Team Foundation Background Job Agent service is not designed to be an all-purpose scheduling mechanism. It is not designed to provide scheduling precision beyond day of the week, hour of the day, and minute of the day. Most administrators will not need to schedule tasks beyond this level of granularity. + +## See Also + + [Change the service account or password for Team Foundation Server](../admin/change-service-account-password.md) + + [Change the service account or password for SQL Server Reporting Services](../admin/change-service-account-or-password-sql-reporting.md) diff --git a/docs/tfs-server/architecture/examples-complex-topo.md b/docs/tfs-server/architecture/examples-complex-topo.md new file mode 100644 index 00000000000..c0e242c47b4 --- /dev/null +++ b/docs/tfs-server/architecture/examples-complex-topo.md @@ -0,0 +1,108 @@ +--- +title: Examples of Complex Topology for Team Foundation Server +description: Examples of Complex Topology for Team Foundation Server +ms.assetid: 91421828-00d3-44e2-8ebb-520622fa9b61 +ms.manager: douge +ms.author: elbatk +ms.date: 08/16/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Examples of Complex Topology for Team Foundation Server + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can configure Visual Studio Team Foundation Server in one of several +topology configurations. Generally speaking, the simpler the topology, +the more easily you will be able to maintain a??Team Foundation Server +deployment. You should deploy the simplest topology that meets your +business needs. + +This topic describes two complex Team Foundation Server topologies. A +complex topology has Team Foundation Server components distributed +across many servers. It is accessed by clients in multiple domains in +geographically distant physical locations. Team Foundation Server Proxy +is installed in addition to optional components such as SharePoint +Products and SQL Server Reporting Services. There are several different +code bases, and these code bases each have their own team project +collection for the projects that use them. The databases for team +project collections are stored on several different servers that are +running SQL Server. + +## Complex Single-Domain Topology + +A complex server topology uses multiple servers in clusters or other +failover configurations to host the logical Team Foundation data and +application tier components. The following diagram demonstrates a +complex single-domain topology: + +![Example complex single-domain topology](../_img/complex-single-domain-topo.png) + +This example topology is similar to the [moderate topology](examples-moderate-topo.md). +Team Foundation Server services are deployed on one server and the Team +Foundation Server databases are installed on a separate server, with +Team Foundation Build and the team's test agents and test agent +controllers deployed on additional servers. Also, fail-over components +have been added. The Team Foundation databases have been installed on +a??SQL Server cluster. + +The example diagram shows child domains in Seattle and Cleveland, each +with a two-way transitive trust to the parent domain. The service +account for Team Foundation Server is trusted by both domains.??Each +geographically distant child domain uses a limited bandwidth connection. +Since getting an enlistment from the version code control component of +Team Foundation Server can take a very long time under such limited +bandwidth conditions, a??Team Foundation Server Proxy is installed in +each child domain to act as a version control file proxy cache. All +client requests go directly to the application tier, with the exception +of version control code **get** requests. These requests are directed +through the Team Foundation Server Proxy, which then caches all source +files that it downloads on the proxy server. + +The topology in this example is also concerned about fault tolerance and +high performance. Data tier fault tolerance is provided by taking +advantage of the SQL Server clustering technologies. Multiple SharePoint +Web applications are configured for use by team projects within +collections in a SharePoint Web farm. Team project collection databases +are distributed across SQL Server instances for improved performance and +ease of individual management. SQL Server Reporting Services and SQL +Server Analysis Servers are running on separate servers for improved +performance. + +This example is designed for a large product development team with up to +2,000 users. + + +## Complex Multi-Domain Topology + +A complex multi-domain server topology uses multiple servers in two or +more domains. As with the complex single-domain topology, the deployment +uses clusters or other failover configurations to host the components of +the data tier for Team Foundation. The administrators for this +deployment have configured network load balancing and added multiple +application-tier servers to distribute the operational load. The +following illustration demonstrates a complex multi-domain topology: + +![Complex multi-domain topology](../_img/complex-multi-domain-topo.png) + +![Complex multidomain topology continued](../_img/complex-multi-domain-topo2.png) + +As in the above example, this topology is configured for fault tolerance +and high performance. In addition, this topology is distributed across +multiple domains, some of which are fully trusted child domains of the +parent domains, but one of which (IsolatedLab.com) is a completely +separate domain. The service accounts used by Team Foundation Server are +fully trusted members of all domains, and user accounts have been +configured in both the parent domain and the separate domain as +necessary for users who must work in both domains. Firewalls have been +configured to allow traffic across the ports required by Team Foundation +Server. + +## See also + +[Examples of simple topology](examples-simple-topo.md) + +[Examples of moderate topology](examples-moderate-topo.md) + +[TFS architecture](architecture.md) diff --git a/docs/tfs-server/architecture/examples-moderate-topo.md b/docs/tfs-server/architecture/examples-moderate-topo.md new file mode 100644 index 00000000000..789cde84075 --- /dev/null +++ b/docs/tfs-server/architecture/examples-moderate-topo.md @@ -0,0 +1,62 @@ +--- +title: Examples of Moderate Topology for Team Foundation Server +description: Examples of Moderate Topology for Team Foundation Server +ms.assetid: dcd13be0-5234-4398-be64-a8453a1764d3 +ms.manager: douge +ms.author: elbatk +ms.date: 08/16/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Examples of Moderate Topology for Team Foundation Server + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can configure Visual Studio Team Foundation Server in several +topology configurations. Generally speaking, the simpler the topology, +the more easily you can maintain a deployment of Team Foundation Server. +You should deploy the simplest topology that meets your business needs. +This topic describes a moderately complex topology, in which the logical +components of the data and application tiers of Team Foundation are +installed on separate physical servers. Client computers within the +trusted domains can access Team Foundation Server. + +## A Moderate Server Topology + +A moderate topology will use two or more servers to host the logical +components of the data and application tiers of Team Foundation. The +following illustration demonstrates a moderately complex topology for +Team Foundation Server: + +![Moderate Server Topology](../_img/moderate-topo.png) + +In this example, the services for Team Foundation Server are deployed on +one server, referred to as an application-tier server, and the databases +for Team Foundation Server are installed on a separate server, referred +to as a data-tier server. A separate server hosts the SharePoint Web +application that Team Foundation Server uses, and another server hosts +the instance of SQL Server Reporting Services that Team Foundation +Server uses. The portal for each team project is hosted on the +SharePoint Web application. Therefore, the administrator must configure +permissions for the users of that project on that Web application. The +same consideration applies to configuring permission for users in SQL +Server Reporting Services. Team Foundation Build and the team's test +controllers are deployed on additional servers. In this illustration, +the domain for the Cleveland clients is a child domain of the parent +domain in Seattle. The child domain has a two-way transitive trust +relationship with its parent domain. The service account for Team +Foundation Server is trusted by both domains. Users in the child domain +can access the server, and they are authenticated automatically +by Windows integrated authentication. In this configuration, Team +Foundation Server Proxy is required and installed in the +Cleveland office. This example is designed for a moderately sized +product development team that has fewer than 1,000 users. + +## See also + +[Examples of simple topology](examples-simple-topo.md) + +[Examples of complex topology](examples-complex-topo.md) + +[TFS architecture](architecture.md) diff --git a/docs/tfs-server/architecture/examples-simple-topo.md b/docs/tfs-server/architecture/examples-simple-topo.md new file mode 100644 index 00000000000..0d7898804e3 --- /dev/null +++ b/docs/tfs-server/architecture/examples-simple-topo.md @@ -0,0 +1,73 @@ +--- +title: Examples of simple Topology for Team Foundation Server +description: Examples of simple Topology for Team Foundation Server +ms.assetid: 435e67a7-79df-4029-b5c3-9bba515b6533 +ms.manager: douge +ms.author: elbatk +ms.date: 08/16/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Examples of Simple Topology for Team Foundation Server + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can install and configure Visual Studio Team Foundation Server in +several topology configurations. Generally speaking, the simpler the +topology, the more easily you will be able to maintain a deployment of +Team Foundation Server. You should deploy the simplest topology that +meets your business needs. This topic describes two fairly simple +topologies, in which the server and clients are all contained within a +single workgroup or domain. + +## Simplest Topology + +The simplest server topology will use the fewest number of physical +servers to host the components that compose the logical tiers of Team +Foundation. The following illustration shows the simplest topology: + +![Simple Server Topology](../_img/simplest-topo.png) + +In this example, all server components are deployed on a single physical +server. You can access them from client computers in the same domain or +workgroup. This example is designed for a small product development team +that has fewer than 50 users. + +In this configuration, you can install the computer that is running Team +Foundation Build and the team's test components on either the single +server, which is running Team Foundation Server, or on one or more +client computers. This configuration is best suited to small development +organizations or pilot projects within larger organizations. + +## Simple Topology + +The simple server topology will also use the fewest number of physical +servers to host the components that compose the logical tiers of Team +Foundation. However, this topology also recognizes the additional load +that building and testing software places on processing power. The +following illustration shows a simple topology for Team Foundation +Server: + +![Simple VSTS topology](../_img/a-simple-topo.png) + +In this example, the Web services and databases for Team Foundation are +hosted on the same physical server, but the build services are installed +on a separate computer. You can access Team Foundation Server from +client computers in the same domain or workgroup. This example is +designed for a small product development team that has fewer than 100 +users. + +In this configuration, you install the computer that is running Team +Foundation Build and the team's test components on a computer that is +dedicated to that purpose. This configuration is best suited to smaller +development projects where builds and testing demands are regular and +performance is a greater concern. + +## See Also + +[Examples of Moderate Topology](examples-moderate-topo.md) + +[Examples of Complex Topology](examples-complex-topo.md) + +[Team Foundation Server Architecture](architecture.md) diff --git a/docs/tfs-server/architecture/extend-vs-for-alm.md b/docs/tfs-server/architecture/extend-vs-for-alm.md new file mode 100644 index 00000000000..556c48b31aa --- /dev/null +++ b/docs/tfs-server/architecture/extend-vs-for-alm.md @@ -0,0 +1,38 @@ +--- +title: Extending Visual Studio devops +description: Extending Visual Studio devops +ms.assetid: d794b1ae-8750-4582-962a-1828e88eb845 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Extending Visual Studio devops + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can customize some aspects of Visual Studio to extend existing features or to add new capabilities if you have special requirements. + +Some of the extensibility points are provided with your Visual Studio installation. For other extensibility points, you must also install the Visual Studio SDK. You can identify the specific requirements for each extensibility point in the content that supports that extensibility point. + + +**Testing** + +- [Customizing for Testing By Using the Visual Studio SDK](https://msdn.microsoft.com/en-us/library/bb166187) + - [Creating a Diagnostic Data Adapter to Collect Custom Data or Affect a Test Machine](https://msdn.microsoft.com/en-us/library/dd286727) + - [Verifying Code by Using UI Automation](https://msdn.microsoft.com/en-us/library/dd286726) + - [Verifying Code by Using Unit Tests](https://msdn.microsoft.com/en-us/library/dd264975) +- [API Reference for Testing Tools for Visual Studio devops](https://msdn.microsoft.com/en-us/library/dd465178) + +**Modeling** + +- [Extending UML Models and Diagrams](https://msdn.microsoft.com/en-us/library/ee329484) +- [Extending Layer Diagrams](https://msdn.microsoft.com/en-us/library/ff657803) + +**Team Foundation** + +- [Connect to Team Foundation Server from a Console Application](https://msdn.microsoft.com/en-us/library/bb286958) +- [Extending Work Item Tracking by Using the Client Object Model for Team Foundation](https://msdn.microsoft.com/en-us/library/bb130347) +- [Extending Version Control](https://msdn.microsoft.com/en-us/library/bb130331) diff --git a/docs/tfs-server/architecture/required-ports.md b/docs/tfs-server/architecture/required-ports.md new file mode 100644 index 00000000000..523b060d018 --- /dev/null +++ b/docs/tfs-server/architecture/required-ports.md @@ -0,0 +1,81 @@ +--- +title: Ports required for installation of Team Foundation Server +description: Ports required for installation of Team Foundation Server +ms.assetid: d91e25a9-94d0-4767-a972-3755dea790a6 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Ports required for installation of Team Foundation Server + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +Your firewall controls network ports, but Team Foundation Server requires port access. You must ensure that your firewall does not block Team Foundation Server from the ports it requires. The tables in this topic show the default settings for TCP ports that Team Foundation Server, SQL Server, and SharePoint Products require. + +## Firewalls + +If you are using Windows Firewall and it is configured to allow exceptions, the installation wizard for Team Foundation Server opens the ports that TFS requires. If Windows Firewall is configured not to allow exceptions, you should configure it to allow exceptions during the installation of Team Foundation Server. Otherwise, you will have to manually open the ports that TFS requires. For more information, see this page on the Microsoft website: [How to Configure Windows Firewall on a Single Computer](https://technet.microsoft.com/en-us/library/cc875811.aspx). + +If you are using some other firewall product, you should check its documentation to determine how to open the ports that TFS requires. + +## Required Ports for SQL Server + +The following table specifies the TCP ports that SQL Server requires. + +|**Server or Application Context**|**TCP Port**| +|---|---| +|SQL Service (Database Engine)|1433¹| +|SQL Browser Service (Database Engine)|1434| +|SQL Server Analysis Services Redirector |2382| +|SQL Server Analysis Services|2383| +|SQL Server Reporting Services|80| + +¹ SQL Server uses port 1433 for the default instance. For named instances, SQL Server uses a dynamic port that the operating system assigns. Use SQL Server Configuration Manger to determine the SQL Server port number for any named instances. For more information, see this page on the Microsoft website: [Configuring the Windows Firewall to Allow SQL Server Access](https://msdn.microsoft.com/en-us/library/cc646023.aspx). + +**Report Server Port Requirements** + +You must ensure that the report server contains an exception in Windows Firewall for Windows Management Instrumentation (WMI) if the report server is not on the server that is running Team Foundation Server. The instructions for completing this task differ based on the operating system that you are using. If you are using Windows Server 2003 or Windows Server 2003 R2, see the following page on the Microsoft website: [Connecting Through Windows Firewall](https://msdn.microsoft.com/en-us/library/aa389286(VS.85).aspx). If you are using Windows Server 2008, Windows Server 2008 R2, Windows Vista or Windows 7, see the following page on the Microsoft website: [Connecting to WMI Remotely Starting with Windows Vista](https://msdn.microsoft.com/en-us/library/aa822854(VS.85).aspx). + +## Required Ports for SharePoint Products + +The table in this section specifies the TCP ports that SharePoint Foundation uses if it is installed by the installation wizard for TFS.  + +These port numbers might be different for existing deployments of SharePoint Products. You can determine which port numbers SharePoint Products uses by opening Internet Information Services (IIS) Manager and looking at the properties of the websites. For more information, see [Verify SharePoint products for Team Foundation Server](../install/sharepoint/verify-sharepoint.md). + +|**Server or Application Context**|**TCP Port**| +|---|---| +|Default website|80| +|SharePoint Central Administration|17012| + +## Required Ports for Team Foundation Server + +By default, Team Foundation Server uses the following TCP ports: + +|**Server or Application Context**|**TCP Port**| +|---|---| +|Team Foundation Server|8080| +|Team Foundation Server Proxy|8081| + +## Required Ports for Release Management for Visual Studio 2013 + +By default, Release Management Server uses the following TCP port: + +|**Server or Application Context**|**TCP Port**| +|---|---| +|Release Management Server|1000| + + +## See Also + +[Install Team Foundation Server](../install/install-2013/install-tfs.md) + +[How to: Create a Team Foundation server farm (high availability)](../install/create-tfs-farm.md) + +[TFS upgrade requirements](../upgrade/upgrade-2013/upgrade-2013-requirements.md) + +[How to: Install Team Foundation Proxy and set up a remote site](../install/install-proxy-setup-remote.md) + +[Install Release Management for Visual Studio 2013](https://msdn.microsoft.com/en-us/library/dn593700%28v=vs.120%29.aspx) diff --git a/docs/tfs-server/architecture/sql-server-databases.md b/docs/tfs-server/architecture/sql-server-databases.md new file mode 100644 index 00000000000..9f3879efa03 --- /dev/null +++ b/docs/tfs-server/architecture/sql-server-databases.md @@ -0,0 +1,59 @@ +--- +title: Team Foundation Server Databases +description: Team Foundation Server Databases +ms.assetid: 44d3053c-044e-420d-8d18-3137605e4d8a +ms.manager: douge +ms.author: elbatk +ms.date: 01/13/2017 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Team Foundation Server Databases + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can manage Visual Studio Team Foundation Server more easily if you understand SQL Server, SQL Server Reporting Services, and how they both interact with Team Foundation Server. + +## Interactions between Team Foundation Server and SQL Server + +The following table describes the databases that might be present in your deployment of Team Foundation Server: + +| Database | Used If | Description | +|---|---|---| +| Tfs_Configuration | Always | Stores data that describes your deployment of Team Foundation Server, including the name and location of the other databases. | +| Tfs_*Collection* | Always | One database for each team project collection. Each database stores the data for the team projects (version control, builds, and work items) in that collection. | +| Tfs_Warehouse | Reporting is configured | Data from all project collections is collected and stored in tables that are optimized for reporting. | +| Tfs_Analysis | Reporting is configured | Analysis Services database that organizes the data from the warehouse database into a cube structure.. | +| ReportServer | Reporting is configured | Stores reports and report configuration data for Reporting Services. | +| ReportServer_TempDB | Reporting is configured | Stores temporary reporting data for Reporting Services. | +| WSS_Config | Integration with SharePoint Products is configured | Stores configuration data about SharePoint Products. | +| WSS_Content | Integration with SharePoint Products is configured | Stores the content for the SharePoint Products sites. | +| WSS_AdminContent | Integration with SharePoint Products is configured | Stores the administration information for SharePoint Products. | + + +The following diagram illustrates the logical architecture of a deployment of Team Foundation Server that is integrated with both SQL Server Reporting Services and SharePoint Products: + +![Database relationships with SharePoint Products](../_img/ic347963.png) +One advantage of storing all your data in a database is that it simplifies data management because you don’t have to back up individual client computers. If you are familiar with backing up SQL Server databases, you will find backing up and restoring Team Foundation Server databases equally familiar.  + +> [!TIP] +> Team Foundation Server requires that collation settings are case insensitive, are accent sensitive, and are not binary. If you want to use an existing installation of SQL Server with Team Foundation Server, you must verify that the collation settings meet these requirements. If they do not, installation of Team Foundation Server will fail. For more information, see [SQL Server Collation Requirements for Team Foundation Server](../install/sql-server/collation-requirements.md) + +SQL Server must be installed on a server (or servers) that has the appropriate trust levels configured between it and the server (or servers) that hosts the logical Team Foundation application-tier. + +## Interactions between Team Foundation Server and SQL Server Reporting Services + +SQL Server Reporting Services is considered part of the logical application tier for Team Foundation Server. However, Reporting Services does not have to be installed on the same physical server as other logical aspects of that application tier, such as SharePoint Products. + +When you configure user and group permissions and group membership in Team Foundation Server, you must also manually configure role membership and permissions appropriately for those users and groups in Reporting Services. For more information, see [SQL Server Reporting Services Roles](../install/sql-server/reporting-services-roles.md). + +In addition to configuring role membership and permissions in Reporting Services, you must also manage the report reader account that Team Foundation Server uses to communicate with the report server. This account is frequently referred to as the data sources account for Reporting Services, or *TFSREPORTS*. Like the service account for Team Foundation Server, the report reader account must be a member of a workgroup or domain that is trusted by every computer that will connect to Team Foundation Server. For more information, see [Accounts required for installation of Team Foundation Server](../../accounts/requirements.md#accounts). + +> [!TIP] +> Even if you are logged on with administrative credentials, you might have trouble accessing Report Manager or the http://*localhost*/Reports sites unless you add these sites as Trusted Sites in Internet Explorer or start Internet Explorer as an administrator. To start Internet Explorer as an administrator, choose **Start**, **All Programs**, open the shortcut menu **Internet Explorer**, and then choose **Run as administrator**. For more information, see the [Microsoft Web site](http://go.microsoft.com/fwlink/?LinkId=111235). + +## See also + +- [SQL Server Reporting Services Roles](../install/sql-server/reporting-services-roles.md) +- [Grant permissions to view or create reports in TFS](../../report/admin/grant-permissions-to-reports.md) \ No newline at end of file diff --git a/docs/tfs-server/architecture/tfs-concepts.md b/docs/tfs-server/architecture/tfs-concepts.md new file mode 100644 index 00000000000..b469d3729e2 --- /dev/null +++ b/docs/tfs-server/architecture/tfs-concepts.md @@ -0,0 +1,87 @@ +--- +title: Team Foundation Server concepts +description: Describes several concepts related to Team Foundation Server +ms.assetid: cfe7f112-1f35-4df4-8bd3-8fc361db8248 +ms.manager: douge +ms.author: elbatk +ms.date: 08/16/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + + +# Components, terms, and key concepts + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +To deploy and manage Visual Studio Team Foundation Server effectively, you must understand how it works and communicates with other components of Team Foundation. As an administrator for Team Foundation Server, you should be familiar with Windows authentication, network protocols and traffic, and the structure of the business network on which Team Foundation Server is installed. You should also have an understanding of groups and permissions in Team Foundation Server. You might also find an understanding of SQL Server, SQL Server Reporting Services, and SharePoint Products useful as you manage Team Foundation Server. + +## Understanding components and terms + +You will be better able to plan, deploy, and manage Team Foundation Server if you understand the following components and terms: + +* **Application tier, data tier, and client tier**: The logical tiers that compose Team Foundation Server. These tiers might all be deployed on the same physical computer, or they might be installed across multiple computers. For more information, see [Team Foundation Server architecture](architecture.md). + +* **Team project collection**: The primary organizational unit for all data in Team Foundation Server. Collections can include one or more team projects. For more information, see [Manage team project collections](../admin/manage-team-project-collections.md). + +* **Team project**: A central point for your team to share team activities that are required to develop a specific software technology or product. Team projects are organized in team project collections. For more information, see [Track work with Visual Studio devops and TFS](https://msdn.microsoft.com/en-us/library/dd286619(v=vs.120).aspx). + +* **Team Foundation Server Administration Console**: The centralized management tool for TFS administrators to configure and manage resources. For more information, see [Configure and manage TFS resources](../admin/config-tfs-resources.md). + +* **Service accounts**: The account or accounts that the Web services and applications in Team Foundation use. Team Foundation Server requires service accounts to perform operations across servers and Web services. These service accounts have specific requirements. For more information, see [Service accounts and dependencies in Team Foundation Server](../admin/service-accounts-dependencies-tfs.md). + +* **SharePoint Products**: Software that provides support for team project portals and dashboards. You can include one or more SharePoint Web applications as part of your deployment of Team Foundation Server. To include one of these applications, you must install and configure Team Foundation Server extensions for SharePoint Products, and you must configure permissions across the deployment. For more information, see [Share information using the project portal](https://msdn.microsoft.com/en-us/library/ms242883(v=vs.120).aspx). + +* **SQL Server and SQL Server Reporting Services**: Software that provides a database platform for data warehousing and a business intelligence platform for data integration, analysis, and reporting solutions. TFS stores its data in SQL Server databases. You can also optionally include a server that is running SQL Server Reporting Services and that automatically generates reports for team projects. For more information, see [Manage TFS reports, data warehouse, and analysis services cube](../../report/admin/manage-reports-data-warehouse-cube.md). + + +## Understanding Team Foundation Server Security + +To optimize the security of Team Foundation Server, you should understand the following concepts: + +* [Topology](#topos), which includes where and how servers that are running components of Team Foundation are deployed, the network traffic that passes between Team Foundation Server and clients of Team Foundation, and the services that must run on Team Foundation Server. + +* [Authentication](#auth), which includes the determination of the validity of users, groups, and services in Team Foundation Server. + +* [Authorization](#authorization), which includes the determination of whether valid users, groups, and services in Team Foundation Server have the appropriate permissions to perform specific actions. + + +You should also consider the other components and services on which Team Foundation Server depends. + +When you consider security for Team Foundation Server, you must understand the difference between authentication and authorization. Authentication is the verification of the credentials of a connection attempt from a client, server, or process. Authorization is the verification that the identity that is trying to connect has permissions to access the object or method. Authorization occurs only after successful authentication. If a connection is not authenticated, it fails before any authorization checking is performed. If authentication of a connection succeeds, a specific action might still be disallowed because the user or group was not authorized to perform that action. + +<a name="topos"></a> +### Topologies, Ports, and Services + +The first element of deployment and security for Team Foundation Server is whether the components of your deployment can connect to one another to communicate. Your goal is to enable connections between clients of Team Foundation and Team Foundation Server and to limit or prevent other connection attempts. + +Team Foundation Server depends on certain ports and services so that it can function. You can secure and monitor these ports to help meet business security needs. You must permit network traffic for Team Foundation Server to pass between clients of Team Foundation, the servers that host the logical components of the application tier and the data tier for Team Foundation, computers for Team Foundation Build, and remote clients that are using Team Foundation Server Proxy. By default, Team Foundation Server is configured to use HTTP for its Web services. For a full list of ports and services that Team Foundation Server uses and how they are used within its architecture, see [Team Foundation Server architecture](architecture.md). + +You can deploy Team Foundation Server in an Active Directory domain or in a workgroup. Active Directory provides more built-in security features than workgroups provide. You can use Active Directory features to help secure your deployment of Team Foundation Server. For example, you can configure Active Directory to prevent duplicate computer names so that a malicious user cannot spoof the computer name with a rogue server that is running Team Foundation Server. To mitigate the same kind of threat in a workgroup, you must configure computer certificates. + +Whether you deploy Team Foundation Server in a workgroup or a domain, you must comply with certain constraints imposed by the requirements of Team Foundation Server itself. For more information about topologies for Team Foundation Server, see [A Simple Team Foundation Server Topology](examples-simple-topo.md), [A Moderate Team Foundation Server Topology](examples-moderate-topo.md), [A Complex Team Foundation Server Topology, Understanding Windows SharePoint Services](examples-complex-topo.md), and [Understanding SQL Server and SQL Server Reporting Services](sql-server-databases.md). + +<a name="auth"></a> +### Authentication + +Security for Team Foundation Server is integrated with and relies on Windows integrated authentication and the security features of the Windows operating system. You can use Windows integrated authentication to authenticate accounts for connections between Team Foundation clients and TFS, for Web services on the servers that host the logical application and data tiers, and for connections between application-tier and data-tier servers themselves. + +> [!NOTE] +> You can configure TFS to support Kerberos for mutual authentication of both the client and the server after you install TFS. + +You should not configure any SQL Server database connections between Team Foundation Server and SharePoint Products to use SQL Server Authentication because it is not as secure as Windows authentication. When you connect to the database, the user name and the password for the database administrator account are sent in an unencrypted format. Windows integrated authentication does not send the user name and password. Instead, it uses Windows integrated authentication security protocols to transfer service account identity information that is associated with the host Internet Information Services (IIS) application pool to SQL Server. + +<a name="authorization"></a> +### Authorization + +Team Foundation Server authorization is based on users and groups in Team Foundation, the permissions that are assigned directly to both those users and groups, and permissions that those users and groups might inherit by belonging to other groups in Team Foundation Server. Users and groups in Team Foundation can be local users or groups, Active Directory users and groups, or both. + +Team Foundation Server is preconfigured with default groups at the server, collection, and project level. You can populate these groups by adding individual users. However, you might find management easier if you populate these groups by using Active Directory security groups. By taking this approach, you can manage group membership and permissions more efficiently across multiple computers or applications, such as SharePoint Products and SQL Server. + +Your specific deployment might require that you configure users, groups, and permissions on multiple computers and within several applications. For example, you must configure permissions for users and groups in Reporting Services, SharePoint Products, and Team Foundation Server if you want to include reports and project portals as part of your deployment. In Team Foundation Server, you can set permissions for each project, for each collection, and across a deployment (at the server level). Additionally, certain permissions are granted by default to any user or group that you add to Team Foundation Server, as that user or group is automatically added to Team Foundation Valid Users. For more information, see [Manage users or groups in TFS](../../security/permissions.md). + +Besides configuring permissions for authorization in Team Foundation Server, you might need authorization within version control and work items. You manage these permissions separately at a command prompt, but they are integrated as part of the interface for Team Explorer. + + +## See Also +[Team Foundation Server architecture](architecture.md) diff --git a/docs/tfs-server/breadcrumb/toc.yml b/docs/tfs-server/breadcrumb/toc.yml new file mode 100644 index 00000000000..cea4fc79a0c --- /dev/null +++ b/docs/tfs-server/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Admin + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=admin + items: + - name: "Server Administration (TFS)" + tocHref: /vsts/ + topicHref: /vsts/tfs-server/index \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/accounts.md b/docs/tfs-server/command-line/_shared/accounts.md new file mode 100644 index 00000000000..5c957110d60 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/accounts.md @@ -0,0 +1,166 @@ +Use the **Accounts** command to manage these TFS service accounts. +- the TFS service account +- the data sources account for SQL Server Reporting Services +- the TFS Proxy service account + +You can also use this command to change the ownership of the TFS databases. + + TFSConfig Accounts /change|add|set|delete|updatepassword|resetowner + [/AccountType:{AdminConsole|ApplicationTier|Proxy|ReportingDataSource}] + [/Account:AccountName] [/Password:Password] + [/SQLInstance:ServerName] [/DatabaseName:DatabaseName] [/Continue] [/usesqlalwayson] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/change</strong></td> + <td> + Changes the account that is used as the service account. + This option adds the account that you specify to all the necessary groups, grants it the required permissions if possible, and sets the service to use the account. + If you do not use the <strong>/AccountType</strong> option with this option, the service account for the application tier will be changed. + </td> + </tr> + <tr> + <td><strong>/add</strong></td> + <td> + Adds an account to the groups that are required for using the account as a service account. + This option adds the account that you specify to the necessary groups and grants it the permissions + that are required to act as the service account (if possible). + However, this option will not change the account that is used as the service account. + This option is usually used in network load balancing (NLB) scenarios. + You can use this option with /continue if some services or databases might not be available in your environment. + </td> + </tr> + <tr> + <td><strong>/set</strong></td> + <td> + Sets an account as the service account. This option does not add the account to any groups. + Therefore, you must use this option only with accounts that have already been added to the required groups and have the necessary permissions. + This option is usually used in NLB scenarios. + </td> + </tr> + <tr> + <td><strong>/delete</strong></td> + <td> + Removes an account from the account type that you specify. + This option removes the account that you specify from the necessary groups and removes the permissions + that are required to act as the service account (if possible). + However, this option will not change the account that is used as the service account. + Make sure that you do not use this option for an account that the servers in your deployment currently use as a service account. + </td> + </tr> + <tr> + <td><strong>/ResetOwner</strong></td> + <td> + Changes the ownership of the databases that Team Foundation Server uses to the account that you are using to run this command. + This option iterates though all the databases and sets the <strong>dbo</strong> login to the account that you are using to run this command. + You might need to use this option when you move or restore a deployment.</td> + </tr> + <tr> + <td><strong>/UpdatePassword</strong></td> + <td> + Changes the password of an account that is used as a service account. + This option updates the password for the account that you specify for all services in Team Foundation Server that use that account. + </td> + </tr> + <tr> + <td><strong>/AccountType:</strong> { AdminConsole | ApplicationTier | ReportingDataSource | Proxy }</td> + <td> + <ul> + <li>**AdminConsole**: the group of users who have the minimum permissions that are required to open and use the administration console for Team Foundation (AdminConsole)</li> + <li>**ApplicationTier**: the service account that is used for Team Foundation Server (TFSService)</li> + <li>**ReportingDataSource**: the data sources account for Reporting Services (TFSReports)</li> + <li>**Proxy**: the service account for Team Foundation Server Proxy (TFSProxy)</li> + </ul> + <p>The default value is ApplicationTier.</p> + </td> + </tr> + <tr> + <td><strong>/Account:</strong> AccountName</td> + <td> + Specifies the name of the account that you want to add, change, or delete from a referenced account type, + such as <strong>/AccountType:ApplicationTier</strong>. + Specify Account in one of the following forms: Domain\AccountName or Computer\AccountName. + If you want to use a system account, such as Network Service or Local System, use the Computer\AccountName format. + For more information about how to specify a system account, see the usage examples later in this topic. + </td> + </tr> + <tr> + <td><strong>/Password:</strong> Password</td> + <td> + Specifies the password of the service account.<br /><br /> + <strong>Note:</strong> This parameter is optional if you are using a system account or an account that does not have a password, such as Network Service. + </td> + </tr> + <tr> + <td><strong>/SQLInstance:</strong> ServerName</td> + <td> + Used only with <strong>/ResetOwner</strong>. + Specifies the name of the server that is running SQL Server and the name of the instance if you want to use an instance other than the default instance. + You must specify the name and instance in the following format:<br /><br />ServerName\InstanceName. + </td> + </tr> + <tr> + <td><strong>/DatabaseName:</strong> DatabaseName</td> + <td> + Used only with <strong>/ResetOwner</strong>. + Specifies the name of the database whose ownership you want to change. + By using this command, you reset the ownership of the database that you specify to the account under which you are running the command. + </td> + </tr> + <tr> + <td><strong>/continue</strong></td> + <td>Updates any groups that are not available when you run the command. This option is usually used in NLB scenarios.</td> + </tr> + <tr> + <td><strong>/usesqlalwayson</strong></td> + <td> + Used only with <strong>/ResetOwner</strong> in conjunction with <strong>/SQLInstance</strong> and <strong>/DatabaseName</strong>. + Specifies that the databases are part of an AlwaysOn Availability Group in SQL Server. + If configured, this option sets MultiSubnetFailover in the connection string.<br /><br /> + For more information, see <a href="http://msdn.microsoft.com/library/hh510230.aspx">AlwaysOn Availability Groups (SQL Server)</a>.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **Accounts** command, you must be a member of +- the Team Foundation Administrators security group +- the sysadmin role for all SQL Server instances that your TFS instance uses. + +If you use the **/proxy** option, you must be an administrator on the proxy server. + +For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md)>. + +### Remarks + +Use the **Accounts** command to automate changes to the service accounts, databases, and service account groups of Team Foundation Server. You can configure accounts that you have already created, but you can't create accounts. + +Before you change the domain or workgroup of an account, the account must have the <span sdata="langKeyword" value="Account is sensitive and cannot be delegated"> Account is sensitive and cannot be delegated </span> permission on the application-tier server. For more information, see this page on the Microsoft Web site: [Enabling Delegated Authentication](http://go.microsoft.com/fwlink/?LinkId=98742). + +The **Accounts** command supports on-premises TFS deployments. To change the account owner of a Team Services account, +see [Change account ownership](http://www.visualstudio.com/get-started/change-account-ownership-vs). + +### Examples + +Change the service account of data sources for Reporting Services to a new account in the Contoso domain, Contoso\\NewAccount, and the password, to Password. + + TFSConfig Accounts /change /AccountType:ReportingDataSource /Account:Contoso\NewAccount /Password:Password + +Add the Network Service system account to the service account groups for Team Foundation Server. (System accounts don't have passwords.) + + TFSConfig Accounts /add /AccountType:ApplicationTier /Account:"NT Authority\Network Service" + +Change the ownership of the "TFS\_Warehouse" database on the "ContosoMain" SQL Server in the "TeamDatabases" named instance to the user account under which you are running the command. + +>**Note:** +>You can't specify what account to set as the owner of the databases when you use this command. The owner will be set to the account under which you are running the command. + + TFSConfig Accounts /ResetOwner /SQLInstance:ContosoMain\TeamDatabases /DatabaseName:TFS_Warehouse \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/addProjectReports.md b/docs/tfs-server/command-line/_shared/addProjectReports.md new file mode 100644 index 00000000000..bc7865bd806 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/addProjectReports.md @@ -0,0 +1,59 @@ +<a id="add-project-reports"> </a> +>**Command availability:** TFS 2017.1 (RC2) + +You use the **AddProjectReports** command to add or overwrite reports for an existing team project. + + TfsConfig addProjectReports + /collection:teamProjectCollectionUrl + /teamProject:projectName + /template:templateName + [/force] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/collection</strong></td> + <td>Required. URL of Team Project Collection.</td> + </tr> + <tr> + <td><strong>/teamProject</strong></td> + <td>Required. Specifies the name of the team project.</td> + </tr> + <tr> + <td><strong>/template</strong></td> + <td>Required. Specifies the name of the process template. Available options are Agile, CMMI and Scrum</td> + </tr> + <tr> + <td><strong>/force</strong></td> + <td>Optional. Specifies that reports should be overwritten if they already exist.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **AddProjectReports** command, you must have permissions to run **TFSConfig** and to [upload reports to the Reporting Service](../../../report/admin/grant-permissions-to-reports.md). + +### Remarks + +You use the **AddProjectReports** command when your team project does not have reports or you want to update the reports defined for a process. + +You may need to use this command when: +- the team project was created in the TFS web portal and not from Visual Studio +- the team project was created from Visual Studio, however reporting was not configured in TFS. + +If you would like to overwrite reports in your project with default reports because you upgraded TFS and old reports in your team project are no longer compatible, use the **/force** option. If you have customized reports, please make a backup before doing this. + +To learn more about adding reports to an on-premises TFS, see [Add reports to a team project](../../../report/admin/add-reports-to-a-team-project.md). + +### Example + +The following example shows how to add Agile reports to MyProject team project in http://myTfsServer:8080/tfs/DefaultCollection project collection + + TFSConfig addprojectreports /collection:http://myTfsServer:8080/tfs/DefaultCollection /teamproject:MyProject /template:Agile \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/authentication.md b/docs/tfs-server/command-line/_shared/authentication.md new file mode 100644 index 00000000000..e1aeca5e1bd --- /dev/null +++ b/docs/tfs-server/command-line/_shared/authentication.md @@ -0,0 +1,50 @@ +The **Authentication** command changes the network authentication protocol that the TFS application tier or proxy website uses. + + TFSConfig Authentication [/provider:NTLM|Negotiate] [/viewAll] [/siteType:ApplicationTier|Proxy] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/viewAll</strong></td> + <td>Displays the current authentication settings for TFS.</td> + </tr> + <tr> + <td><strong>/provider</strong>: { NTLM | Negotiate }</td> + <td>Specifies the authentication provider you want to configure for the website. + <ul> + <li>**NTLM**: Use the NTML authentication protocol</li> + <li>**Negotiate**: Use the Negotiate (Kerberos) authentication protocol</li> + </ul> + </td> + </tr> + <tr> + <td><strong>/siteType</strong></td> + <td>Specifies the website (applicaiton tier or prox) whose network authentication protocol you want to change. The application tier is the default.</td> + </tr> + </tbody> +</table> + +### Required permissions +To use the **Authentication** command, you must be a member of the Team Foundation Administrators security group +and a local administrator on the application-tier server or proxy server, depending on the value of the **siteType** +option. + +### Remarks + +The **Authentication** command is used by an administrator who wants to change the network authentication protocol for one or more websites on which TFS relies. +The administrator runs this command from the application tier to update those websites that require a change in their network authentication protocol. +The command changes the **NTAuthenticationProviders** property in the IIS metabase. + +>Before you use the <strong>Authentication</strong> command to change the authentication protocol, you can run the command with the <strong>/viewAll</strong> option to see what the existing settings are. + +### Example + +The following example displays the current value that is assigned for the network authentication protocol. + + TFSConfig Authentication /viewAll \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/certificates.md b/docs/tfs-server/command-line/_shared/certificates.md new file mode 100644 index 00000000000..1147ebb6a76 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/certificates.md @@ -0,0 +1,62 @@ +Use the **Certificates** command to change how certificates are configured for client authentication in a deployment +of TFS that utilizes HTTPS, secure sockets layer (SSL), and certificates. + + TFSConfig Certificates [/machine] [/disable] [/autoSelect] [/noprompt] [/thumbprints:thumbprint1[,thumbprint2,...]] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/machine</strong></td> + <td>Specifies that the certificate list will be from the local machine context instead of the current user context.</td> + </tr> + <tr> + <td><strong>/disable</strong></td> + <td>Specifies that the client authentication certificate setting will be disabled.</td> + </tr> + <tr> + <td><strong>/autoSelect</strong></td> + <td>Specifies that a certificate will be automatically selected from the certificate list. The Manage Client Certificates window will not open.</td> + </tr> + <tr> + <td><strong>/noprompt</strong></td> + <td>Specifies that the Manage Client Certificates window will not open when the Certificates command is run.</td> + </tr> + <tr> + <td><strong>/thumbprints:</strong> thumbprint</td> + <td>Specifies that the certificate that matches the specified thumbprint will be used. You can specify more than one certificate by separating individual thumbprints with a comma.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **Certificates** command, you must be a member of the Team Foundation Administrators security group +and the local Administrators group on the computer from which you run the command. +For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +### Remarks + +By default, the **Certificates** command will automatically select a client certificate from the certificate list for the current user. +However, you can use the options for the command to specify a specific certificate or certificates from the current user context or from the local machine context. + +Before you use the **Certificates** command, you must first configure the servers in your deployment of TFS to utilize certificates. +For more information, see [Setting up HTTPS with Secure Sockets Layer (SSL) for Team Foundation Server](https://msdn.microsoft.com/library/27540d50-ac8a-46e1-a98e-baee43ed98a3). + +You use the **Certificates** command to configure the client certificates that are used by a deployment of TFS that has been configured to use HTTPS/SSL and certificates. +If you use the Certificates command with no options, a client certificate will be automatically selected from the current user context from which you run the command. + +### Examples + +The following example shows how to specify the local machine certificate that has the thumbprint "aa bb cc dd ee" with no prompting. + + TFSConfig Certificates /machine /thumbprint:aa bb cc dd ee /noprompt + +The following example shows how to specify using automatic selection of a client certificate from the current user store. + + TFSConfig Certificates /autoselect \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/changeserverid.md b/docs/tfs-server/command-line/_shared/changeserverid.md new file mode 100644 index 00000000000..124bfa7296c --- /dev/null +++ b/docs/tfs-server/command-line/_shared/changeserverid.md @@ -0,0 +1,63 @@ +The **ChangeServerID** command changes the GUIDs that are associated with the databases for TFS. +GUIDs must be unique within a deployment of TFS. If more than one database has the same GUID, your deployment can become unstable or unusable. +You can change the GUID for the configuration database, the GUIDs for all team project collection databases in the deployment, or both. +Although you would not typically use this command in daily operations, you might use this command in the following circumstances: + +- You restored your deployment to new hardware, the old deployment is still operational, and you want to utilize both deployments. This scenario is sometimes referred to as cloning the server. + +- You want to test a software update or a hardware configuration on a duplicate deployment so that you do not risk disrupting your production environment. + +- You want to fully test the restoration of databases to new hardware in a test lab or separate environment, to ensure that your deployment can be restored. + +- You must reset the GUID for a collection database after moving it to another deployment for which that GUID is already reserved. + + >**Note:** + >The ChangeServerID command is not reversible. After a GUID has been changed, you cannot undo that change except by restoring a previous version of that database. + + TFSConfig ChangeServerID /SQLInstance:ServerName /DatabaseName:ConfigurationDatabaseName + [/ProjectCollectionsOnly] [/ConfigDBOnly] [/usesqlalwayson] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>**/SQLInstance**: ServerName</td> + <td>Required. Specifies the name of the server that is running SQL Server and the name of the instance if you want to use an instance other than the default instance. If you specify an instance, you must use the format: `ServerName\InstanceName`</td> + </tr> + <tr> + <td>**/DatabaseName**: DatabaseName</td> + <td>Required. Specifies the name of the configuration database for TFS. By default, the name of this database is TFS_ConfigurationDB.</td> + </tr> + <tr> + <td>**/ProjectCollectionsOnly**</td> + <td>Specifies that only the GUIDs for collections will be changed.</td> + </tr> + <tr> + <td>**/ConfigDBOnly**</td> + <td>Specifies that only the GUID for the configuration database will be changed.</td> + </tr> + <tr> + <td>**/usesqlalwayson**</td> + <td>Specifies that the databases are part of an AlwaysOn Availability Group in SQL Server. If configured, this option sets MultiSubnetFailover in the connection string.<br /><br />For more information, see <a href="http://msdn.microsoft.com/library/hh510230.aspx">AlwaysOn Availability Groups (SQL Server)</a>.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **ChangeServerID** command, you must be a member of the Team Foundation Administrators security group and a member of the sysadmin security role for all SQL Server instances that Team Foundation Server uses. For more information, see [Permission reference for Team Foundation](../../../security/permissions.md). + +### Remarks + +You use the **ChangeServerID** command to create a discrete duplicate of a deployment of Team Foundation Server for testing or cloning purposes. After you use the ChangeServerID command, you must direct clients to create a connection to the changed server before it can be used. + +### Example + +The following example shows how to change the GUIDs of all databases in the Contoso1 deployment of TFS, where the configuration database is hosted on the server that is named "ContosoMain" on the named instance "TeamDatabases" in SQL Server. + + TFSConfig ChangeServerID /SQLInstance:ContosoMain\TeamDatabases /DatabaseName:TFS_ConfigurationDB diff --git a/docs/tfs-server/command-line/_shared/codeindex.md b/docs/tfs-server/command-line/_shared/codeindex.md new file mode 100644 index 00000000000..a1f215ea26d --- /dev/null +++ b/docs/tfs-server/command-line/_shared/codeindex.md @@ -0,0 +1,235 @@ +>**Command availability:** TFS 2015 and TFS 2013 + +Use the CodeIndex command to manage code indexing on Team Foundation Server. +For example, you might want to reset the index to fix CodeLens information, or turn off indexing to investigate server performance issues. + + TFSConfig CodeIndex /indexingStatus | /setIndexing:[ on | off | keepupOnly ] | + /ignoreList:[ add | remove | removeAll | view ] ServerPath | + /listLargeFiles [/fileCount:FileCount] [/minSize:MinSize] | + /reindexAll | /destroyCodeIndex [/noPrompt] | + /temporaryDataSizeLimit:[ view | <SizeInGBs> | disable ] | + /indexHistoryPeriod:[ view | all | <NumberOfMonths> ] [/collectionName:CollectionName | /collectionId:CollectionId] + +<table Responsive="true"> +<tr> + <th> + Option + </th> + <th> + Description + </th> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/indexingStatus</strong> + </p> + </td> + <td data-th="Description"> + <p>Show the status and configuration of the code indexing service.</p> + </td> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/setIndexing:</strong>[ on | off | keepupOnly ]</p> + </td> + <td data-th="Description"> + <ul> + <li> + <p> + <strong>on</strong>: Start indexing all changesets.</p> + </li> + <li> + <p> + <strong>off</strong>: Stop indexing all changesets.</p> + </li> + <li> + <p> + <strong>keepupOnly</strong>: Stop indexing previously created changesets and start indexing new changesets only.</p> + </li> + </ul> + </td> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/ignoreList:</strong>[ add | remove | removeAll | view ] <span class="parameter">ServerPath</span></p> + + </td> + <td data-th="Description"> + <p>Specifies a list of code files and their paths that you don't want indexed.</p> + <ul> + <li> + <p> + <strong>add</strong>: Add the file that you don't want indexed to the ignored file list.</p> + </li> + <li> + <p> + <strong>remove</strong>: Remove the file that you want indexed from the ignored file list.</p> + </li> + <li> + <p> + <strong>removeAll</strong>: Clear the ignored file list and start indexing all files.</p> + </li> + <li> + <p> <strong>view</strong>: See all the files that aren't being indexed.</p> + </li> + <li> + <p><strong>ServerPath</strong>: Specifies the path to a code file.</p> + <p>You can use the wildcard character (*) at the start, end, or both ends of the server path.</p> + </li> + </ul> + </td> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/listLargeFiles [/fileCount:</strong> + <span class="parameter">FileCount</span> + <strong>/minSize:</strong> + <span class="parameter">MinSize</span>]</p> + </td> + <td data-th="Description"> + <p>Shows the specified number of files that exceeds the specified size in KB. You can then use the <strong>/ignoreList</strong> option to exclude these files from indexing.</p> + <p>For this, you'll need <a href="http://go.microsoft.com/fwlink/?LinkId=506638" target="_blank">Team Foundation Server 2013 with Update 3</a>.</p> + </td> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/reindexAll</strong> + </p> + </td> + <td data-th="Description"> + <p>Clear previously indexed data and restart indexing.</p> + </td> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/destroyCodeIndex [/noPrompt]</strong> + </p> + </td> + <td data-th="Description"> + <p>Delete the code index and remove all indexed data. Does not require confirmation if you use the <strong>/noPrompt</strong> option.</p> + </td> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/temporaryDataSizeLimit</strong>:[ view | <<span class="parameter">SizeInGBs</span>> | disable ]</p> + </td> + <td data-th="Description"> + <p>Control how much temporary data that CodeLens creates when processing changesets. The default limit is 6 GB (2 GB in Update 5).</p> + <ul> + <li> + <p> + <strong>view</strong>: Show the current size limit. </p> + </li> + <li> + <p> + <span class="parameter">SizeInGBs</span>: Change the size limit.</p> + </li> + <li> + <p> + <strong>disable</strong>: Remove the size limit.</p> + </li> + </ul> + <p>This limit is checked before CodeLens processes a new changeset. If temporary data exceeds this limit, CodeLens will pause processing past changesets, not new ones. CodeLens will restart processing after the data is cleaned up and falls below this limit. Cleanup runs automatically once a day. This means temporary data might exceed this limit until cleanup starts running.</p> + <p>For this, you'll need <a href="http://go.microsoft.com/fwlink/?LinkId=517392" target="_blank">Team Foundation Server 2013 with Update 4</a>.</p> + </td> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/indexHistoryPeriod</strong>:[ view | all | <<span class="parameter">NumberOfMonths</span>> ]</p> + </td> + <td data-th="Description"> + <p>Control how long to index your change history. This affects how much history CodeLens shows you. The default limit is 12 months. This means CodeLens shows your change history from the last 12 months only.</p> + <ul> + <li> + <p> + <strong>view</strong>: Show the current number of months.</p> + </li> + <li> + <p> + <strong>all</strong>: Index all change history.</p> + </li> + <li> + <p> + <span class="parameter">NumberOfMonths</span>: Change the number of months used to index change history.</p> + </li> + </ul> + <p>For this, you'll need <a href="http://go.microsoft.com/fwlink/?LinkId=517392" target="_blank">Team Foundation Server 2013 with Update 4</a>.</p> + </td> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/collectionName:</strong> + <span class="parameter">CollectionName</span> + </p> + </td> + <td data-th="Description"> + <p>Specifies the name of the team project collection on which to run the <strong>CodeIndex</strong> command. Required if you don't use <strong>/CollectionId</strong>.</p> + </td> +</tr> +<tr> + <td data-th="Option"> + <p> + <strong>/collectionId:</strong> + <span class="parameter">CollectionId</span> + </p> + </td> + <td data-th="Description"> + <p>Specifies the identification number of the team project collection on which to run the <strong>CodeIndex</strong> command. Required if you don't use <strong>/CollectionName</strong>.</p> + </td> +</tr> +</table> + +### Required permissions + +To use the CodeIndex command, you must be a member of the Team Foundation Administrators security group. See Permission reference for Team Foundation Server. + +### Examples + +To see the code indexing status and configuration: + + TFSConfig CodeIndex /indexingStatus /collectionName:"Fabrikam Web Site" + +To start indexing all changesets: + + TFSConfig CodeIndex /setIndexing:on /collectionName:"Fabrikam Web Site" + +To stop indexing previously created changesets and start indexing new changesets only: + + TFSConfig CodeIndex /setIndexing:keepupOnly /collectionName:"Fabrikam Web Site" + +To find up to 50 files that are larger than 10 KB: + + TFSConfig CodeIndex /listLargeFiles /fileCount:50 /minSize:10 /collectionName:"Fabrikam Web Site" + +To exclude a specific file from indexing and add it to the ignored file list: + + TFSConfig CodeIndex /ignoreList:add "$/Fabrikam Web Site/Catalog.cs" /collectionName:"Fabrikam Web Site" + +To see all the files that aren't indexed: + + TFSConfig CodeIndex /ignoreList:view + +To clear previously indexed data and restart indexing: + + TFSConfig CodeIndex /reindexAll /collectionName:"Fabrikam Web Site" + +To save all changeset history: + + TFSConfig CodeIndex /indexHistoryPeriod:all /collectionName:"Fabrikam Web Site" + +To remove the size limit on CodeLens temporary data and continue indexing regardless of temporary data size: + + TFSConfig CodeIndex /temporaryDataSizeLimit:disable /collectionName:"Fabrikam Web Site" + +To delete the code index with confirmation: + + TFSConfig CodeIndex /destroyCodeIndex /collectionName:"Fabrikam Web Site" diff --git a/docs/tfs-server/command-line/_shared/collection.md b/docs/tfs-server/command-line/_shared/collection.md new file mode 100644 index 00000000000..fc8b1c8e5c2 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/collection.md @@ -0,0 +1,111 @@ +You can use the **Collection** command to attach, detach, or delete a team project collection from a deployment of TFS. +You can also use the **Collection** command to duplicate the database of an existing collection, rename it, and attach it to the deployment. +This process is sometimes referred to as cloning a collection. +However, you cannot use the **Collection** command to create a team project collection. + + TFSConfig Collection {/attach | /detach | /delete} [/collectionName:CollectionName] + [/collectionDB:ServerName;DatabaseName] [/clone] + +### Parameters + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/attach</strong></td> + <td> + Required if neither <strong>/detach</strong> nor <strong>/delete</strong> is used. + If you specify this option, you must also use the <strong>/collectionDB</strong> option. + As an option, you can also use <strong>/collectionName</strong> and <strong>/clone</strong> with this option. + If you use the <strong>/attach</strong> option, the specified collection database will be added to your deployment of TFS. + </td> + </tr> + <tr> + <td><strong>/detach</strong></td> + <td> + Required if neither <strong>/attach</strong> nor <strong>/delete</strong> is used. + If you specify this option, you must also use the <strong>/collectionName</strong> option. + If you use the <strong>/detach</strong> option, the database for the specified collection will be stopped, and the collection will be detached from your deployment of TFS. + </td> + </tr> + <tr> + <td><strong>/delete</strong></td> + <td> + Required if neither <strong>/detach</strong> nor <strong>/attach</strong> is used. + If you specify this option, you must also use the <strong>/collectionName</strong> option. + If you use the <strong>/delete</strong> option, the database for the specified collection will be stopped, and the collection will be permanently detached from TFS. + You will not be able to re-attach the collection database to this or any other deployment.<br /><br /> + <strong>Tip:</strong> The <strong>/delete</strong> option will not delete the collection database from SQL Server. + After deleting the collection database from TFS, you can delete the database manually from SQL Server. + </td> + </tr> + <tr> + <td><strong>/CollectionName:</strong> CollectionName</td> + <td> + Specifies the name of the team project collection. If the name of the collection contains spaces, you must enclose the name in quotation marks (for example, "My Collection"). + Required if either <strong>/detach</strong> or <strong>/delete</strong> is used. + If you use this option with <strong>/detach</strong> or <strong>/delete</strong>, it specifies the collection that will be detached or deleted. + If you use this option with <strong>/attach</strong>, it specifies a new name for the collection. + If you use this option with both <strong>/attach</strong> and <strong>/clone</strong>, it specifies the name for the duplicated collection. + </td> + </tr> + <tr> + <td><strong>/CollectionDB:</strong> ServerName;DatabaseName</td> + <td> + Required if <strong>/attach</strong> is used. + This option specifies the name of the server that is running SQL Server and the name of the collection database that is hosted on that server. + <ul> + <li> + <strong>ServerName</strong>: Specifies the name of the server that hosts the configuration database for TFS, + and the name of the instance if you want to use an instance other than the default instance. + If you specify an instance, you must use the format: `ServerName\InstanceName`. + </li> + <li> + <strong>DatabaseName</strong>: Specifies the name of the configuration database. By default, the name of this database is TFS_ConfigurationDB. + </li> + </ul> + </td> + </tr> + <tr> + <td><strong>/clone</strong></td> + <td> + If you specify this option, the original collection database will be attached as a clone in SQL Server, + and this database will be attached to TFS. This option is primarily used as part of splitting a team project collection. + </td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **Collections** command, you must be a member of the Team Foundation Administrators security group as well as the local Administrators group on the machine running **TFSConfig**. You must also be a member of the sysadmin security role for all instances of SQL Server used by TFS databases. If your deployment is integrated with SharePoint and you are using the **/delete** option, you must also be a member of the Farm Administrators group for the SharePoint farm from which you are deleting the site collection. + +For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +### Remarks + +To manage collections interactively or to create a collection, you can use the Team Project Collections node in the administration console for Team Foundation. +See [Manage team project collections](https://msdn.microsoft.com/library/80848156-fa61-4f13-aea7-2bc47c59d9bf). + +### Examples + +The following example shows how to permanently remove the "Contoso Summer Intern Projects" team project collection from a deployment of Team Foundation Server. + + TFSConfig Collection /delete /CollectionName:"Contoso Summer Intern Projects" + + TFSConfig - Team Foundation Server Configuration Tool + Copyright � Microsoft Corporation. All rights reserved. + Deleting a team project collection is an irreversible operation. A deleted collection cannot be reattached to the same or another Team Foundation Server. Are you sure you want to delete 'Contoso Summer Intern Projects'? (Yes/No) + Yes + Found Collection 'Contoso Summer Intern Projects' Deleting... + The delete of collection 'Contoso Summer Intern Projects' succeeded. + +The following example shows how to duplicate the "Contoso Summer Interns Projects" team project collection, name it "Contoso Winter Interns Projects," and attach the duplicate collection to the deployment of Team Foundation Server. + + TFSConfig Collection /attach /collectiondb:"ContosoMain;TFS_Contoso Summer Interns Projects" + /CollectionName:"Contoso Winter Intern Projects" /clone \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/columnStoreIndex.md b/docs/tfs-server/command-line/_shared/columnStoreIndex.md new file mode 100644 index 00000000000..10b42db3ce6 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/columnStoreIndex.md @@ -0,0 +1,50 @@ +>**Command availability:** TFS 2015 Update 2 + +You use the **ColumnStoreIndex** command to enable or disable column store indexes for the databases used by your TFS deployment. + + TfsConfig columnStoreIndex /enabled:{true|false} + /sqlInstance:ServerName + /databaseName:DatabaseName + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/enabled</strong></td> + <td>Specifies whether you are enabling or disabling column store index for the given SQL instance and database.</td> + </tr> + <tr> + <td><strong>/sqlInstance</strong></td> + <td> + Specifies the name of the server that hosts the database for which column store index is being enabled or disabled, + and the name of the instance if an instance other than the default is used. + If you specify an instance, you must use the format: `ServerName\InstanceName` + </td> + </tr> + <tr> + <td><strong>/databaseName</strong></td> + <td>Specifies the name of the database for which column store index is being enabled or disabled.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **ColumnStoreIndex** command, you must be a member of the sysadmin role for the specified SQL Server instance. + +### Remarks + +You would typically use the **ColumnStoreIndex** command if you were moving a database from a SQL instance which supported column store index to one which did not. +In this case, you would need to disable all column store indexes before you could successfully move the databases. +Similarly, if you were moving a database back to a SQL instance which supported column store index you might wish to re-enable column store index in order to save space and gain performance. + +### Example + +The following example shows how to enable column store index, for a database named TFS\_DefaultCollection on a SQL instance running on a server named "ContosoMain" on the named instance "TeamDatabases". + + TFSConfig columnStoreIndex /enabled:true /sqlInstance:ContosoMain\TeamDatabases /databaseName:TFS_DefaultCollection \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/configuremail.md b/docs/tfs-server/command-line/_shared/configuremail.md new file mode 100644 index 00000000000..84dccac3aeb --- /dev/null +++ b/docs/tfs-server/command-line/_shared/configuremail.md @@ -0,0 +1,36 @@ +Configure the server that runs Team Foundation Server (TFS) to use an existing SMTP server for email alerts. + + TFSConfig ConfigureMail /FromEmailAddress:emailAddress /SmtpHost:SMTPHostName + +<table> +<thead> +<tr> +<th>Option</th> +<th>Description</th> +</tr> +</thead> +<tbody> +<tr> +<td><strong>/FromEmailAddress:</strong> emailAddress</td> +<td>Specifies the address from which to send email notifications from TFS for a check in, work item assigned to you, or other notifications. This address is also checked for validity and, depending on your server configuration, might have to represent a valid email account on the mail server.If the address does not exist or is not valid, the default email address is used.</td> +</tr> +<tr> +<td><strong>/SmtpHost:</strong> SMTPHostName</td> +<td>Specifies the name of the server that hosts the mail server.</td> +</tr> +</tbody> +</table> + +### Required permissions + +To use the **ConfigureMail** command, you must be a member of the Team Foundation Administrators security group on the Team Foundation application-tier server. For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md) + +### Remarks + +You can also [use the administration console](../../admin/setup-customize-alerts.md) to configure TFS to use an SMPT server. + +### Example + +The following example shows the syntax used to configure the from email address to TFS@contoso.com and the SMTP mail server as ContosoMailServer: + + TFSConfig ConfigureMail /FromEmailAddress:TFS@contoso.com /SmtpHost:ContosoMailServer \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/createteamprojecthostgroup.md b/docs/tfs-server/command-line/_shared/createteamprojecthostgroup.md new file mode 100644 index 00000000000..a85940f7340 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/createteamprojecthostgroup.md @@ -0,0 +1,68 @@ + +Use the **CreateTeamProjectHostGroup** command to assign a +*host group* from a team project collection to an +individual team project in the collection. Host groups specify one or +more physical machines that are the deployment targets for virtual +environments in Visual Studio Lab Management. Host groups are created in +System Center Virtual Machine Manager (SCVMM) and assigned to a project +collection by Visual Studio Lab Management. Use separate +**CreateTeamProjectHostGroup** commands to assign multiple host groups +to a team project. + +> **Note:** +> You can automatically assign a host group to all the projects in a team +> project collection when you assign the host group to the team project +> collection. See [TFSConfig Lab /HostGroup Commands](lab-hostgroup.md) +> and [How to: Change the Host Groups for Your Team Project Collections](https://msdn.microsoft.com/en-us/library/dd386364(v=vs.120).aspx). + +**Required Permissions** + +To use the **CreateTeamProjectHostGroup** command, you must have the +**Manage Lab Locations** permission at the Team Project Collection Host +Group level. By default, the members of the Team Foundation Server +Administrators and Project Collection Administrators groups have this +permission. For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + + + TFSLabConfig CreateTeamProjectHostGroup + /Collection:collectionUrl + /TeamProject:{* |teamProjectName} + /TeamProjectCollectionHostGroup:(* |teamProjectCollectionHostGroupName} + /Name:teamProjectHostGroupName + [/Description:teamProjectHostGroupDescription] + [/NoPrompt] + +### Parameters + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | +| **TeamProject:**{ * | *teamProjectName*} | Required. The name of the team project. Use quotation marks if there are spaces in the name. Use an asterisk (* ) to assign the specified host group to all team projects in the collection. | +| **TeamProjectCollectionHostGroup:**{ * | *teamProjectCollectionHostGroupName*} | +| **Name:** *teamProjectHostGroupName* | Required. The name to assign to the host group in the team project. | +| **Description:** *teamProjectHostGroupDescription* | Optional. A description of the team project host group. | +| **NoPrompt** | Optional. Do not prompt the user for confirmation. | + + +### Example + +For increased readability in the example, command options are listed on +separate lines. In a command prompt window, type all options for a +command on the same line. + +In the first example, all the host groups in the team project collection +are assigned to each team project in the collection. In the second +example, one host group in the team project collection is assigned to a +specific team project. + + REM First example + TFSLabConfig CreateTeamProjectHostGroup + /collection:http://abc:8080/TFS/Collection0 + /teamProject:* + /teamProjectCollectionHostGroup:* + REM Second example + TFSLabConfig CreateTeamProjectHostGroup + /collection:http://abc:8080/TFS/Collection0 + /teamProject:Project1 + /teamProjectCollectionHostGroup:tpchg1 + /name:hg1 diff --git a/docs/tfs-server/command-line/_shared/createteamprojectlibraryshare.md b/docs/tfs-server/command-line/_shared/createteamprojectlibraryshare.md new file mode 100644 index 00000000000..a3e24b1eef6 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/createteamprojectlibraryshare.md @@ -0,0 +1,71 @@ + +Use the **CreateTeamProjectLibraryShare** command to assign a library +share from a team project collection to an individual team project in +the collection. A library share provides access to file-based resources +for virtual environments such as ISO images and virtual hard disks. +Library shares are created in System Center Virtual Machine Manager +(SCVMM) and assigned to project collection by Visual Studio Lab +Management. Use separate **CreateTeamProjectLibraryShare** commands to +assign multiple library shares to a team project. + +> **Note:** +> You can automatically assign a library share to all projects in a team +> project collection by using the [TFSConfig Lab /LibraryShare Commands](../tfsconfig-cmd.md#lab-libraryshare) +> and [How to: Change the Library Share for Your Team Project +> Collections](https://msdn.microsoft.com/en-us/library/dd386363(v=vs.120).aspx). + +**Required Permissions:** + +To use the **CreateTeamProjectLibraryShare** command, you must have +**Manage Lab Locations** permission at the Team Project Collection +Library Share level. By default, members of the Team Foundation Server +Administrators and Project Collection Administrators groups have this +permission. For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + + + TFSLabConfig CreateTeamProjectLibraryShare + Collection:collectionUrl + /TeamProject:{* |teamProjectName} + /TeamProjectCollectionLibraryShare:{* |teamProjectCollectionLibraryShareName} + /Name:teamProjectLibraryShareName + [/Description:teamProjectLibraryShareDescription] + [/NoPrompt] + + +### Parameters + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | +| **TeamProject:**{ * | *teamProjectName*} | Required. The name of the team project. Use quotation marks if there are spaces in the name. Use an asterisk (* ) to assign the specified host group to all team projects in the collection. | +| **TeamProjectCollectionLibraryShare:**{ * | *teamProjectCollectionHostShareName*} | +| **Name:** *teamProjectHostShareName* | Required. The name to assign to the library share in the team project. | +| **Description:** *teamProjectHostGroupDescription* | Optional. A description of the team project library share. | +| **NoPrompt** | Optional. Do not prompt the user for confirmation. | + + +### Example + +For increased readability in the example, command options are listed on +separate lines. In a command prompt window, type all options for a +command on the same line. + +In the first example, all the library shares in the team project +collection are assigned to each of the team projects in the collection. +In the second example, one library share in the team project collection +is assigned to a specific team project. + + + REM First example + TFSLabConfig CreateTeamProjectLibraryShare + /collection:http://abc:8080/TFS/Collection0 + /TeamProject:* + /TeamProjectCollectionLibraryShare:* + + REM Second example + TFSLabConfig CreateTeamProjectLibraryShare + + /collection:http://abc:8080/TFS/Collection0 + /TeamProject:Project1 + /TeamProjectCollectionLibraryShare:tpcls1 + /name:ls1 diff --git a/docs/tfs-server/command-line/_shared/dbcompression.md b/docs/tfs-server/command-line/_shared/dbcompression.md new file mode 100644 index 00000000000..d80b6bda9c7 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/dbcompression.md @@ -0,0 +1,63 @@ +>**Command availability:** TFS 2015 and TFS 2013 +> For earlier versions of TFS, see [https://support.microsoft.com/kb/2712111](https://support.microsoft.com/kb/2712111) + +You use the **DBCompression** command to enable or disable database page compression for the databases used by your TFS deployment. + + TFSConfig dbCompression /pageCompression:{enable|disable} + /sqlInstance:ServerName + /databaseName:DatabaseName + [/rebuildNow [/offline]] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/pageCompression</strong></td> + <td>Specifies whether you are enabling or disabling page compression for the given SQL instance and database.</td> + </tr> + <tr> + <td><strong>/sqlInstance</strong></td> + <td> + Specifies the name of the server that hosts the database for which page compression is being enabled or disabled, + and the name of the instance if an instance other than the default is used. + If you specify an instance, you must use the format: `ServerName\InstanceName` + </td> + </tr> + <tr> + <td><strong>/databaseName</strong></td> + <td>Specifies the name of the database for which page compression is being enabled or disabled.</td> + </tr> + <tr> + <td><strong>/rebuildNow</strong></td> + <td>Optional. Specifies whether database indexes should be rebuilt (and compressed or decompressed as necessary) immediately. If not used, indexes will be rebuilt by a background job which runs weekly.</td> + </tr> + <tr> + <td><strong>/offline</strong></td> + <td>Optional. Used only in combination with <strong>/rebuildNow</strong>. If <strong>/offline</strong> is not specified, indexes will be rebuilt online. If <strong>/offline</strong> is specified, indexes will be rebuilt offline. This will block other operations, but may be faster than an online index rebuild.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **DBCompression** command, you must be a member of the sysadmin role for the specified SQL Server instance. + +### Remarks + +You would typically use the **DBCompression** command if you were moving a database from a SQL instance which supported compression to one which did not. +In this case, you would need to disable compression and decompress all indexes before you could successfully move the databases. +Similarly, if you were moving a database back to a SQL instance which supported compression you might wish to re-enable compression in order to save space. + +This command only changes whether TFS prefers to use database page compression or not - your databases must still be hosted in a SQL instance whose edition supports compression. +See [Features Supported by the Editions of SQL Server](https://msdn.microsoft.com/library/cc645993.aspx) for more information. + +### Example + +The following example shows how to enable page compression immediately, with indexes rebuilt online, for a database named TFS\_DefaultCollection on a SQL instance running on a server named "ContosoMain" on the named instance "TeamDatabases". + + TFSConfig dbCompression /pageCompression:enable /sqlInstance:ContosoMain\TeamDatabases /databaseName:TFS_DefaultCollection /rebuildNow \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/deleteteamprojecthostgroup.md b/docs/tfs-server/command-line/_shared/deleteteamprojecthostgroup.md new file mode 100644 index 00000000000..b051c531426 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/deleteteamprojecthostgroup.md @@ -0,0 +1,60 @@ + +Use the **DeleteTeamProjectHostGroup** command to remove the assignment +of a host group from an individual team project. Host groups specify one +or more physical machines that are the deployment targets for virtual +environments in Visual Studio Lab Management. + +Host groups are created in System Center Virtual Machine Manager +(SCVMM). In Lab Management, host groups are assigned to one or more team +project collections and then to one or more team projects in the +collections. The **DeleteTeamProjectHostGroup** command does not remove +the assignment of the host group to the team project collection. + +**Required Permissions:** + +To use the **DeleteTeamProjectHostGroup** command, you must have Delete +Lab Locations permission for the Team Project host group. By default, +Team Foundation Server Administrators, Team Project Collection +Administrators and Team Project Administrators have this permission. For +more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + + TFSLabConfig DeleteTeamProjectHostGroup + /Collection:collectionUrl + /TeamProject:{* |teamProjectName>} + /Name:{* |teamProjectHostGroupName} + [/NoPrompt] + + +### Parameters + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | +| **TeamProject:**{ * | *teamProjectName*} | Required. The name of the team project from which you want to remove the host group. Use quotation marks if there are spaces in the name. Use an asterisk (*) to specify all team projects in the team project collection. | +| **Name:** *teamProjectHostGroupName* | Required. The name of the host group to delete from a team project. Use quotation marks if there are spaces in the name. Use an asterisk (*) to specify all host groups in the team project. | +| **NoPrompt** | Optional. Do not prompt the user for confirmation. | + + +### Example + +For increased readability in the example, command options are listed on +separate lines. In a command prompt window, type all options for a +command on the same line. + +In the first example, all the host groups assigned to each of the team +project in the team project collection are removed. In the second +example, one host group is removed from a specific team project. + + + REM First example + TFSLabConfig DeleteTeamProjectLibraryShare + /collection:http://abc:8080/TFS/DefaultCollection + /teamProject:* + /name:* + + REM Second example + TFSLabConfig DeleteTeamProjectLibraryShare + /collection:http://abc:8080/TFS/DefaultCollection + /teamProject:Project1 + /name:hg1 + diff --git a/docs/tfs-server/command-line/_shared/deleteteamprojectlibraryshare.md b/docs/tfs-server/command-line/_shared/deleteteamprojectlibraryshare.md new file mode 100644 index 00000000000..a44fcbb9a00 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/deleteteamprojectlibraryshare.md @@ -0,0 +1,59 @@ + +Use the **DeleteTeamProjectLibraryShare** command to remove the +assignment of a library share from an individual team project. A library +share provides access to file-based resources for virtual environments +such as ISO images and virtual hard disks., Library shares are created +by System Center Virtual Machine Manager (SCVMM). In Visual Studio Lab +Management,??library shares are assigned to one or more team project +collections and then to one or more team projects in the collections. +The **DeleteTeamProjectLibraryShare** command does not remove the +assignment of the library share to the team project collection. + +**Required Permissions:** + +To use the **DeleteTeamProjectLibraryShare** command, you must have +**Delete Lab Locations** permission for that Team Project Library Share. +By default, members of the Team Foundation Server Administrators, +Project Collection Administrators and Team Project Administrators groups +have this permission. For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + + + TFSLabConfig DeleteTeamProjectLibraryShare + Collection:collectionUrl + /TeamProject:{* |teamProjectName} + /Name:{* |teamProjectLibraryShareName} + [/NoPrompt] + + +### Parameters + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | +| **TeamProject:**{ * | *teamProjectName*} | Required. The name of the team project that contains the library share that you want to delete. Use quotation marks if there are spaces in the name. Use an asterisk (*) to specify all team projects in the team project collection. | +| **Name:** *teamProjectHostGroupName* | Required. The name of the library share to delete from a team project. Use quotation marks if there are spaces in the name. Use an asterisk (*) to specify all library shares of the team project. | +| **NoPrompt** | Optional. Do not prompt the user for confirmation. | + + +### Example + +For increased readability in the example, command options are listed on +separate lines. In a command prompt window, type all options for a +command on the same line. + +In the first example, all the library shares assigned to each of the +team project in the team project collection are removed. In the second +example, one library share is removed from a specific team project. + + REM First example + TFSLabConfig DeleteTeamProjectLibraryShare + /collection:http://abc:8080/TFS/DefaultCollection + /teamProject:* + /name:* + + REM Second example + TFSLabConfig DeleteTeamProjectLibraryShare + /collection:http://abc:8080/TFS/DefaultCollection + /teamProject:Project1 + /name:ls1 + diff --git a/docs/tfs-server/command-line/_shared/deletetestresults.md b/docs/tfs-server/command-line/_shared/deletetestresults.md new file mode 100644 index 00000000000..2658c4d92aa --- /dev/null +++ b/docs/tfs-server/command-line/_shared/deletetestresults.md @@ -0,0 +1,63 @@ +>**Command availability:** TFS 2017 and later + +You use the **DeleteTestResults** command to +delete old stored test results from your collection store. +This is typically done to reduce the store size or to +reduce the time taken when migrating test results to a new schema. + + TFSConfig DeleteTestResults /ageInDays:{number} + /sqlInstance:ServerName + /databaseName:DatabaseName + [/type:{automated|manual|all}] + [/preview] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/ageInDays</strong></td> + <td>Test results older than the specified number of days will be deleted or previewed.</td> + </tr> + <tr> + <td><strong>/sqlInstance</strong></td> + <td> + The name of the server that hosts the database for which test results are being deleted or previewed, + and the name of the instance if an instance other than the default is used. + If you specify an instance, you must use the format: `ServerName\InstanceName` + </td> + </tr> + <tr> + <td><strong>/databaseName</strong></td> + <td>The name of the database for which test results are being deleted or previewed.</td> + </tr> + <tr> + <td><strong>/type</strong></td> + <td>Optional. The type of test results to delete. Valid values are **automated**, **manual**, and **all**.</td> + </tr> + <tr> + <td><strong>/preview</strong></td> + <td>Optional. Display the number of test results that would be deleted based on the age in days, but do not delete these results.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **DeleteTestResults** command, you must be a member of the sysadmin role for the specified SQL Server instance. + +### Remarks + +Use the **/preview** parameter to see the test results sorted by project name and year without deleting these results. + +### Example + +The following example shows how to delete manual test results older +than 60 days for a database named TFS\_DefaultCollection on a SQL +instance running on a server named "ContosoMain" on the named instance "TeamDatabases". + + TFSConfig deleteTestResults /ageInDays:60 /sqlInstance:ContosoMain\TeamDatabases /databaseName:TFS_DefaultCollection /type:manual diff --git a/docs/tfs-server/command-line/_shared/deprecated.md b/docs/tfs-server/command-line/_shared/deprecated.md new file mode 100644 index 00000000000..44f9470eaab --- /dev/null +++ b/docs/tfs-server/command-line/_shared/deprecated.md @@ -0,0 +1,191 @@ +<a id="license"></a> +### License + +**Command availability:** TFS 2015 | TFS 2013 | TFS 2012 | TFS 2010 + +You can use the **License** command to display, modify, or extend the licensing key for your deployment of Visual Studio Team Foundation Server. + + TFSConfig License [/ProductKey:Key] [/extend [NewTrialID]] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/ProductKey:</strong> Key</td> + <td>Specifies that the license key for the deployment will be updated with the value of Key.</td> + </tr> + <tr> + <td><strong>/extend</strong></td> + <td> + Specifies that the trial licensing period for Team Foundation Server will be extended by 30 days. + This option can be used only once without a getting a new trial ID. + If a second extension is required, you must obtain a second trial license from Microsoft. + </td> + </tr> + </tbody> +</table> + +### Required Permissions + +To use the **License** command, you must be a member of the Team Foundation Administrators security group. For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +### Remarks + +To view, modify, or change the licensing for your deployment interactively, you can use the administration console for Team Foundation. +For more information, see [Open the Team Foundation Administration Console](https://msdn.microsoft.com/library/d4e7d06b-fd68-43d1-8baf-ce31c8989a02) and [Locate or Change the Product Key for Team Foundation Server](https://msdn.microsoft.com/library/64f29927-b520-4c9f-b633-bcb527e562cd). + +### Examples + +The following example shows how to view the licensing information for a deployment of Team Foundation Server. In this example, the deployment is using a trial license. + + TFSConfig License + + TFSConfig - Team Foundation Server Configuration Tool + Copyright © Microsoft Corporation. All rights reserved. + Team Foundation Server Standard license + The following features are installed: + Team Foundation Server + Build Services + Build: 21106.00 + Product ID: 01234-567-8910 + Trial license with 74 days remaining, expiring on 6/30/2010 + Trial ID: ABCD-EFGH-IJKL + +<a id="tcm"></a> +### TCM + +**Command availability:** TFS 2015 | TFS 2013 | TFS 2012 | TFS 2010 + +When upgrading to the latest version of TFS, the system automatically attempts to upgrade the Tests Management components, including test plans and suites. +If the automatic migration fails, use the **TCM** command to upgrade your test plans and test suites manually to their respective work item types (WITs). + + TFSConfig TCM /upgradeTestPlans|upgradeStatus /CollectionName:CollectionName /TeamProject:TeamProjectName + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/upgradeTestPlans</strong></td> + <td> + Required unless <strong>/upgradeStatus</strong> is used.<br/><br/> + Converts existing test plan and test suites to point to the work item-based test plans and test suites. + It also updates existing test management data and links + between other existing test artifacts such as test points, test runs, and test results. + </td> + </tr> + <tr> + <td><strong>/upgradeStatus</strong></td> + <td> + Required unless <strong>/upgradeTestPlans</strong> is used.<br/><br/> + Reports the migration status of test data for the specified team project. + It will also indicate whether the specified project has any test plans. + </td> + </tr> + <tr> + <td><strong>/CollectionName</strong>:CollectionName</td> + <td> + Required. Specifies the project collection that contains the team project + for which you want to migrate test data or check the migration status.<br/><br/> + If there are spaces in the name of the team project collection, + enclose the name in quotation marks, for example, "Fabrikam Fiber Collection". + </td> + </tr> + <tr> + <td><strong>/TeamProjectName</strong>:TeamProjectName</td> + <td> + Required. Specifies the team project for which you want to migrate test data or check the migration status. + This team project must be defined in the collection that you specified by using the <strong>/collectionName</strong> parameter. + <br/><br/>If there are spaces in the name of the team project, enclose the name in quotation marks, for example, "My Team Project". + </td> + </tr> + </tbody> +</table> + +### Required permissions + +You must be a member of the Team Foundation Administrators security group, and an administrator on the application-tier server. +See [Set administrator permissions for Team Foundation Server](https://msdn.microsoft.com/library/ed578715-f4d2-4042-b797-5f97abde9973). + +### Remarks + +Your application-tier server must be upgraded to the latest version of TFS to use this command. + +Before you can use the TCM command, you must first import the test plan work item definition and the test plan category into the project. +To learn more about the migration and when to use this command, see [Manual updates to support test management](https://msdn.microsoft.com/library/edbe689d-7863-4273-916f-b7e93b7f00b3). + +The TCM command is applied to individual team projects. If you need to upgrade test plans in more than one team project, you will have to run it against each team project individually. + +You must run the **TCM** command from the tools directory for TFS. By default, that location is: `drive:\%programfiles%\TFS 12.0\Tools`. + +You use the **TCM** command only in the event that automatic migration of existing test data fails. +To learn more about the migration and when to use this command, [Manual updates to support test management](https://msdn.microsoft.com/library/edbe689d-7863-4273-916f-b7e93b7f00b3). + +If you can't access test plans or test suites that were defined before the server upgrade occurred, run **TFSConfig TCM upgradeStatus** to determine the status of the migration. + +You run the **TCM** command for an individual team project. If you need to upgrade more than one team project, you will have to run it against each team project in turn. + +### Examples + +The following example shows how to check the status of test plan upgrade on the Fabrikam Fiber project hosted on the default team project collection (DefaultCollection): + + tfsconfig tcm /upgradeStatus /CollectionName:DefaultCollection /TeamProject:"Fabrikam Fiber" + +<a id="import"></a> +### Import + +The import command was deprecated in TFS 2013. Earlier versions are available here: + +- [TFS 2012](https://msdn.microsoft.com/library/ff407080%28v=vs.110%29.aspx) +- [TFS 2010](https://msdn.microsoft.com/library/ff407080%28v=vs.100%29.aspx) + +If you need assistance with upgrading data and projects from an earlier version of Team Foundation Server (TFS), +see [Upgrade Team Foundation Server](https://msdn.microsoft.com/library/f4cde7d5-4021-4b21-b9b8-ba6e51572243), +or contact [Microsoft Support](http://support.microsoft.com/ph/1117). + +<a id="preparesql"></a> +### PrepareSQL + +The prepareSQL command was depracated in TFS 2012. Earlier versions are available here: + +- [TFS 2010](https://msdn.microsoft.com/library/ee349267%28v=vs.100%29.aspx) + +<a id="repair"></a> +### Repair + +The repair command was depracated in TFS 2012. Earlier versions are available here: + +- [TFS 2010](https://msdn.microsoft.com/library/ee349268%28v=vs.100%29.aspx) + +If you need to repair your stored procedures after a failed database patch, contact [Microsoft Support](http://support.microsoft.com/ph/1117). + +<a id="diagnose"></a> +### Diagnose + +The diagnose command was deprecated in TFS 2013. Earlier versions are available here: + +- [TFS 2012](https://msdn.microsoft.com/library/ff407076%28v=vs.110%29.aspx) +- [TFS 2010](https://msdn.microsoft.com/library/ff407076%28v=vs.100%29.aspx) + +If you need assistance with diagnosing potential mismatches between software updates on your application-tier and data-tier servers for Team Foundation Server (TFS), +contact [Microsoft Support](https://support.microsoft.com/ContactUs). + +<a id="updates"></a> +### Updates + +The updates command was deprecated in TFS 2013.Earlier versions are available here: + +- [TFS 2012](https://msdn.microsoft.com/library/ff407078%28v=vs.110%29.aspx) +- [TFS 2012](https://msdn.microsoft.com/library/ff407078%28v=vs.100%29.aspx) + +If you need assistance with installing any software updates that are missing from the databases for Team Foundation Server (TFS), +contact [Microsoft Support](http://support.microsoft.com/ph/1117). diff --git a/docs/tfs-server/command-line/_shared/identities.md b/docs/tfs-server/command-line/_shared/identities.md new file mode 100644 index 00000000000..5ff0de2e23e --- /dev/null +++ b/docs/tfs-server/command-line/_shared/identities.md @@ -0,0 +1,112 @@ +The Identities command lists or changes the security identifier (SID) of users and groups in your deployment of TFS. +You might need to change or update the SID for users and groups in one of the following scenarios: + +- changing the domain of your deployment + +- changing from a workgroup to a domain or from a domain to a workgroup + +- migrating accounts across domains in Active Directory + + >**Note:** + >You do not need to run this command if you are changing domains within the same Active Directory forest. TFS will automatically handle SID changes for moves within the same forest. + + TFSConfig Identities [/change /fromdomain:DomainName1 /todomain:DomainName2 [/account:AccountName] + [/toaccount:AccountName]] [/sqlInstance:ServerName /databaseName:DatabaseName] [/account:AccountName] [/usesqlalwayson] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/change</strong></td> + <td>Specifies that you want to change identities instead of listing them.</td> + </tr> + <tr> + <td><strong>/fromdomain:</strong> DomainName</td> + <td>Required when using <strong>/change</strong>. Specifies the original domain of the identities that you want to change. If you are changing from a workgroup environment, specifies the name of the computer.</td> + </tr> + <tr> + <td><strong>/todomain:</strong> DomainName</td> + <td>Required when using <strong>/change</strong>. Specifies the domain to which you want to change identities. If you are changing to a workgroup environment, specifies the name of the computer.</td> + </tr> + <tr> + <td><strong>/account:</strong> AccountName</td> + <td>Specifies the name of an account for which you want to list or change identities.</td> + </tr> + <tr> + <td><strong>/toaccount:</strong> AccountName</td> + <td>Specifies the name of an account to which you want to change identities.</td> + </tr> + <tr> + <td><strong>/SQLInstance:</strong> ServerName</td> + <td>Specifies the name of the server that is running SQL Server and the name of the instance if you want to use an instance other than the default instance. If you specify an instance, you must use the following format:<br /><br />ServerName\InstanceName</td> + </tr> + <tr> + <td><strong>/DatabaseName:</strong> DatabaseName</td> + <td>Specifies the name of the configuration database for TFS.</td> + </tr> + <tr> + <td><strong>/usesqlalwayson</strong></td> + <td>Specifies that the databases are part of an AlwaysOn Availability Group in SQL Server. If configured, this option sets MultiSubnetFailover in the connection string.<br /><br />For more information, see <a href="http://msdn.microsoft.com/library/hh510230.aspx">AlwaysOn Availability Groups (SQL Server)</a>.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **Identities** command, you must be a member of the Team Foundation Administrators security group +and a member of the sysadmin role for all SQL Server instances that Team Foundation Server uses. +For more information, see [Set administrator permissions for Team Foundation Server](https://msdn.microsoft.com/library/ed578715-f4d2-4042-b797-5f97abde9973). + +### Remarks + +You can optionally specify the database to change identities before you configure an application-tier server for the deployment. For example, you might specify the database to change the service account when you clone a deployment of TFS. + +When you change identities, the target account or accounts must already exist in Windows. + +You must wait for the next identity synchronization with Windows before the properties of accounts that you change with this command will be updated. This requirement includes changes from group to user, user to group, and domain account to local account. + +### Examples + +The following example shows how to list the names of all Windows users and groups that are stored in TFS and to display whether the SID for each user or group matches the SID in Windows. The Contoso1 domain administrators created domain groups such as "Contoso1\\Developers" and "Contoso1\\Testers" to help ease the management of permissions across TFS, SQL Server Reporting Services, and SharePoint Products. + + TFSConfig Identities + +Sample output: + + TFSConfig - Team Foundation Server Configuration Tool + Copyright � Microsoft Corporation. All rights reserved. + + Account Name Exists (see note 1) Matches (see note 2) + -------------------------------------------------------------------- + CREATOR OWNER True True + Contoso1\hholt True True + BUILTIN\Administrators True True + Contoso1\Developers True True + Contoso1\Testers True True + Contoso1\PMs True True + Contoso1\jpeoples True True + Contoso1\Domain Admins True True + Contoso1\SVCACCT1 True True + + 9 security identifiers (SIDs) were found stored in Team Foundation Server. Of these, 9 were found in Windows. 0 had differing SIDs. + +The following example shows how to change the SIDs for all accounts in Team Foundation Server from the Contoso1 domain to the SIDs for accounts that have matching names in the ContosoPrime domain. Only account names that match will have their SIDs updated. For example, if the "hholt" account exists as Contoso1\\hholt and ContosoPrime\\hholt, the account SID will be changed to the SID for ContosoPrime\\hholt. If the "ContosoPrime\\hholt" account does not exist, the SID will not be updated for Contoso1\\hholt. + + TFSConfig Identities /change /fromdomain:Contoso1 /todomain:ContosoPrime + +The following example shows how to change the account for a single user account, Contoso1\\hholt, to the account for another user account, ContosoPrime\\jpeoples. + + TFSConfig Identities /change /fromdomain:Contoso1 /todomain:ContosoPrime /account:hholt /toaccount:jpeoples + +The following example shows how to change the SID of the "NT AUTHORITY\\NETWORK SERVICE" service account that is used in the deployment of Team Foundation Server when changing the domain of the deployment from Contoso1 to ContosoPrime. To change a system account such as Network Service, you must follow a two-stage process. You first change the service account from NT AUTHORITY\\NETWORK SERVICE to a domain account in the new domain (TempSVC), and then you change the account back to NETWORK SERVICE on the server in the new domain. The configuration database is hosted on the server that is named "ContosoMain" on the named instance "TeamDatabases" in SQL Server. + + TFSConfig Identities /change /fromdomain:"NT AUTHORITY" /todomain:ContosoPrime /account:"NETWORK SERVICE" + /toaccount:TempSVC /SQLInstance:ContosoMain\TeamDatabases /DatabaseName:TFS_ConfigurationDB + + TFSConfig Identities /change /fromdomain:ContosoPrime /todomain:"NT AUTHORITY" /account:TempSVC + /toaccount:"NETWORK SERVICE" diff --git a/docs/tfs-server/command-line/_shared/jobs.md b/docs/tfs-server/command-line/_shared/jobs.md new file mode 100644 index 00000000000..4b927a7baf7 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/jobs.md @@ -0,0 +1,46 @@ +You can use the **Jobs** command to create a log file that provides the details of the most recent job activity for a specific team project collection, +or to retry a job for one or all team project collections. + + TFSConfig Jobs /retry|dumplog [/CollectionName:CollectionName] [/CollectionID:ID] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/retry</strong></td> + <td>Required if <strong>/dumplog</strong> is not used. Specifies that the most recent job will be reattempted for the specified team project collection. If you use this option, you must also use either the <strong>/CollectionName</strong> or the <strong>/CollectionID</strong> option.</td> + </tr> + <tr> + <td><strong>/dumplog</strong></td> + <td>Required if <strong>/retry</strong> is not used. Specifies that the most recent job activity for the collection will be sent to a log file. If you use this option, you must also use either the <strong>/CollectionName</strong> or <strong>/CollectionID</strong> option.</td> + </tr> + <tr> + <td><strong>/CollectionName:</strong> CollectionName</td> + <td>Required if <strong>/CollectionID</strong> is not used. Specifies the name of the collection for which the most recent job will be either retried (<strong>/retry</strong>) or logged (<strong>/dumplog</strong>). If you want to specify all collections, you can use an asterisk (*).</td> + </tr> + <tr> + <td><strong>/CollectionID:</strong> ID</td> + <td>Required if <strong>/CollectionName</strong> is not used. Specifies the identification number of the collection for which the most recent job will be either retried (<strong>/retry</strong>) or logged (<strong>/dumplog</strong>).</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **Jobs** command, you must be a member of the Team Foundation Administrators security group. For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +### Remarks + +To retry a job interactively, you can open the administration console for Team Foundation, click the Status tab for the collection, and then click Retry Job. +For more information, see [Open the Team Foundation Administration Console](https://msdn.microsoft.com/library/d4e7d06b-fd68-43d1-8baf-ce31c8989a02). + +### Example + +The following example shows how to create a log file that lists the most recent job activity for the "Contoso Summer Intern Projects" team project collection in Team Foundation Server. + + TFSConfig Jobs /dumplog /CollectionName:"Contoso Summer Intern Projects" diff --git a/docs/tfs-server/command-line/_shared/lab-delete.md b/docs/tfs-server/command-line/_shared/lab-delete.md new file mode 100644 index 00000000000..d651cfb4ba2 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/lab-delete.md @@ -0,0 +1,24 @@ +Use the **TfsConfig Lab /Delete** option to remove all group hosts, library shares, and environments from a specified team project collection. +By default, the associated objects in the System Center Virtual Machine Manager (SCVMM) are not deleted. +You can add the **/External** option to the command line to remove the objects from the project collection and from SCVMM. + + TfsConfig Lab /Delete /CollectionName:collectionName [/External] [/NoPrompt] + +|Option|Description| +|---|---| +|**CollectionName**:collectionName|Required. Specifies the name of the team project collection on the application tier of Team Foundation Server.| +|**External**|Optional. When specified, removes the library shares and host groups in SCVMM in addition to the objects in the team project collection. When **/External** is not specified, the **TfsConfig Lab /Delete** command only removes the objects in the team project collection.| +|**NoPrompt**|Optional. When specified, does not display progress and success information.| + +### Remarks + +Use the **/Delete** command to remove the lab assets from a project collection when you want to detach the lab configuration of a project collection. This is useful when moving a project collection from one Team Foundation Server (TFS) instance to another, and where the new Team Foundation Server instance uses a different SCVMM server than the original one. In this case, you will have to delete all the lab assets and reconfigure lab for the project collection. + +>**Note:** +>The **/Delete** option works on all lab assets in a team project collection only when the **/LibraryShare** and **/GroupHost** options are not specified on the command line. For more information, see [TFSConfig Lab /LibraryShare Commands](#lab-libraryshare)(../tfsconfig-cmd.md#lab-libraryshare) and [TFSConfig Lab /HostGroup Commands](../tfsconfig-cmd.md#lab-libraryshare). + +### Example + +In the following example, all lab objects in the DefaultCollection team project collection are removed. Because the **/External** option is not specified, the objects are retained in SCVMM. + + tfsconfig lab /delete /collectionName:DefaultCollection diff --git a/docs/tfs-server/command-line/_shared/lab-dns.md b/docs/tfs-server/command-line/_shared/lab-dns.md new file mode 100644 index 00000000000..1ec65be3f21 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/lab-dns.md @@ -0,0 +1,62 @@ +The **TfsConfig Lab /DNS** command adds, deletes, or displays DNS records that were created by Visual Studio Lab Management for network-isolated environments. + + TfsConfig Lab /DNS + {/Add | /Delete | /List} + [/CollectionName:collectionName | + / CollectionName:collectionName /TeamProject:projectName | + / CollectionName:collectionName /TeamProject:projectName /LabEnvironment:environmentUri | + /Name:FQDN /IP:IpAddress] + [/NoPrompt] + + +|Option|Description| +|---|---| +|**Add**|Adds the specified DNS records. To use the **/Add** option, the targeted environments must be running.| +|**Delete**|Removes the specified DNS records.| +|**List**|Displays the specified DNS records.| +|**LabEnvironment:** environmentUri|Targets the **/Add**, **/Delete**, or **/List** options to an individual network-isolated environment that is specified by environmentUri.<br /><br />To use the **LabEnvironment** option, you must also specify the **/Collection** and **/TeamProject** options.| +|**TeamProject:** projectName|When used without **/LabEnvironment**, targets the **/Add**, **/Delete**, or **/List** options to all of the network-isolated environments in the team project that is specified by projectName. Otherwise, **/TeamProject** specifies the team project that contains the environment.<br /><br />To use the **/TeamProject** option, you must also specify the **/Collection** option| +|**CollectionName:** collectionName|When used without **/TeamProject**, targets the **/Add**, **/Delete**, or **/List** options to all of the network-isolated environments in the team project collection that is specified by collectionName. Otherwise, **/Collection** specifies the team project collection that contains the team project.| +|**Name:** FQDN|Specifies the fully qualified domain name of the network location that contains the environment to target.<br /><br />You must specify the **/Name** and **/IP** options together.| +|**IP:** IPAddress|Specifies the IP address of the environment to target.<br /><br />You must specify the **/Name** and **/IP** options together.| + +### Remarks + +Team Foundation Server uses the suffix you enter when it registers a unique external name with DNS for each virtual machine in a network-isolated environment. +The DNS alias record makes it possible for machines and other objects outside the isolated network to communicate with machines inside the isolated network. +Because Team Foundation Server goes into the DNS zone to register the alias record, the service account under which Team Foundation runs must have permissions to add or delete alias records in the specified DNS zone. + +If your Team Foundation Server deployment has more than one application tier and each application tier runs under a different service account, +then each application-tier service account must have permission to edit the DNS alias records created by the other application tiers. + +>**Note:** +>DNS record management is performed automatically by Lab Management. You should use the **/DNS** command only in the following situations: +> +>- You change the account under which Visual Studio Team Foundation Server (TFS) runs. +>- You move a team project collection from one instance of Team Foundation Server to another. +> +>In both these cases, the DNS records that were created by using the old TFS service account have to be removed, and then the same DNS records have to be re-created by using the new TFS service account. If these steps are not performed in the previous scenarios, the new TFS service account will not be able to perform automatic management of those DNS records. As a result, users will not be able connect to virtual environments. + +Specify only one of the **/Add**, **/Delete**, or **/List** options on a **TfsConfig Lab /DNS** command line. If you do not specify any target options, the operation acts on all virtual machines of all network isolated environments that belong to all project collections in the Team Foundation Server database. + +To target the DNS entries of network isolated environments of an object in the Lab Management object hierarchy, use the appropriate combination of **/Collection**, **/TeamProject**, and **/LabEnvironment** options + +- The **/LabEnvironment** option targets the command to the specified network-isolated environment. You must use the **/CollectionName** and **/TeamProject** options with the **/LabEnvironment** option to specify the team project collection and the team project that contain the environment. + + Use the format **vstfs:///LabManagement/LabEnvironment/** environmentID to specify the environment URI. You can view the environment identifier (environmnetID) in the Environment Viewer of Lab Management or from the description of the virtual machine in SCVMM Administrator Console. + +- The **/TeamProject** option targets the operation to isolated network environments in the specified team project. The **/TeamProject** option must be used with the **/CollectionName** option and the **/CollectionName** option must specify the team project collection that contains the team project. + +- The **/CollectionName** option targets the operation to network isolated environments in the specified team project collection. + +The second way to target a network isolated environment is to use the **/Name** and **/IP** options to specify the fully qualified external name and external IP address of an individual virtual machine. You must specify both the **/Name** and **/IP** options on the command line. You can view the external name and external IP address of a virtual machine in the Environment Viewer of Lab Management or from the description of the virtual machine in SCVMM Administrator Console. + +### Examples + +In the first example, records for all network-isolated environments in a team project are added to DNS. In the second example, an individual DNS record is removed. + + REM First example + tfsconfig lab /dns /add /collectionname:Collection0 /teamproject:Project1 + + REM Second example + tfsconfig lab /dns /delete /name:0b668996-2736-46d2-88ac-0733acbd0d9c.contoso.com /ip:111.00.000.000 diff --git a/docs/tfs-server/command-line/_shared/lab-hostgroup.md b/docs/tfs-server/command-line/_shared/lab-hostgroup.md new file mode 100644 index 00000000000..7b87f8e74a8 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/lab-hostgroup.md @@ -0,0 +1,108 @@ +Use the **TfsConfig Lab /HostGroup** commands to add, edit, or delete +the assignment of a System Center Virtual Machine Manager (SCVMM) host group to a team project collection. +Host groups that are assigned in this manner are managed by Visual Studio Lab Management. + + TfsConfig Lab /hostgroup /CollectionName:collectionName + { /Add + /SCVMMHostGroup:vmmHostPath + /Name:name + [LabEnvironmentPlacementPolicy:{Conservative|Aggressive}] + [/AutoProvision:{True|False}] + [/DNSSuffix:dnsSuffix] + | /Delete + /Name:name + [/NoPrompt] + | /Edit + /Name:name + {[/AutoProvision:{True|False}] + [/LabEnvironmentPlacementPolicy:{Conservative|Aggressive}] + [/DNSSuffix:dnsSuffix]} + [/NoPrompt]] + | /List + | /ListSCVmmHostGroups } + +<table><thead> +<tr><th><p>Option</p></th><th><p>Description</p></th></tr></thead><tbody> +<tr> + <td><p><strong>CollectionName:</strong> collectionName</p></td> + <td><p>Required. The name of the team project collection on the application-tier Team Foundation Server.</p></td></tr> +<tr> + <td><p><strong>Add</strong></p></td> + <td><p>Adds the specified SCVMM host group to the team project collection host groups. You must specify the <strong>/SCVmmHostGroup</strong> and <strong>/Name</strong> options with <strong>Add</strong>.</p></td></tr> +<tr> + <td><p><strong>Delete</strong></p></td> + <td><p>Removes the specified host group from the team project collection. You must specify the <strong>/Name</strong> option with <strong>Delete</strong>.</p></td></tr> +<tr> + <td><p><strong>Edit</strong></p></td> + <td><p>Sets one or both of the Lab Management <strong>AutoProvision</strong> and <strong>LabEnvironmentPlacementPolicy</strong> properties for the host group.</p><p>You must specify the <strong>/Name</strong> option and at least one of the <strong>/AutoProvision</strong> or <strong>/LabEnvironmentPlacementPolicy</strong> options with <strong>Edit</strong>.</p></td></tr> +<tr> + <td><p><strong>SCVMMHostGroup:vmmH</strong> ostGroupPath</p></td> + <td><p>Required with the <strong>/Add</strong> option. Specifies the host path of the SCVMM host group.</p></td></tr> +<tr> + <td><p><strong>Name:</strong> name</p></td> + <td><p>Required with the <strong>/Add</strong>, <strong>/Delete</strong>, or <strong>/Edit</strong> options. Specify the name of the team project collection host group to add, delete, or edit.</p></td></tr> +<tr> + <td><p><strong>AutoProvision:</strong>{<strong>True</strong>|<strong>False</strong>}</p></td> + <td><p>Optional with the <strong>/Add</strong> or <strong>/Edit</strong> options. Sets (<strong>True</strong>) or clears (<strong>False</strong>) the AutoProvision property of the host group. <strong>AutoProvision</strong> specifies whether the host group is automatically assigned to each team project in the collection. By default, host groups are assigned to the team projects in a collection when you use the <strong>TfsConfig Lab/HostGroup</strong> command.</p></td></tr> +<tr> + <td><p><strong>LabEnvironmentPlacementPolicy:</strong>{<strong>Conservative</strong>|<strong>Aggressive</strong>}</p></td> + <td><p>Optional with the <strong>/Add</strong> or <strong>/Edit</strong> options. Specifies how Lab Management treats the physical machines in a host group on which it deploys new virtual lab environments.</p><ul><li><p><strong>Conservative</strong> (Default). Consider non-running virtual environments in deployment decisions. This includes all virtual machines which are part of environments which are in "Stopped" state also.</p></li><li><p><strong>Aggressive</strong> Do not consider non-running virtual environments in deployment decisions.</p></li></ul></td></tr> +<tr> + <td><p><strong>DNSSuffix:</strong>[dnsSuffix]</p></td> + <td><p>Optional. Sets or the DNS suffix of the virtual computers in the host group.</p><ul><li><p>If the <strong>/DNSSuffix:</strong> option is specified without a dnsSuffix value, sets or resets the DNS suffix the suffix of the virtual computers to the suffix of the host computer in the host group.</p></li><li><p>If the <strong>/DNSSuffix</strong> option is not specified with the <strong>/Add</strong> option, the suffix of virtual computers are set to the suffixes of the their host computers in the host group.</p></li><li><p>If the <strong>/DNSSuffix</strong> option is not specified with the <strong>/Edit</strong> option, the suffix of virtual computers is not changed.</p></li></ul></td></tr> +<tr> + <td><p><strong>NoPrompt</strong></p></td> + <td><p>Optional with the <strong>/Delete</strong> or <strong>/Edit</strong> options. Do not prompt user for confirmation.</p></td></tr> +<tr> + <td><p><strong>List</strong></p></td> + <td><p>Displays the host groups assigned to the team project collection.</p></td></tr> +<tr> + <td><p><strong>ListSCVmmHostGroups</strong></p></td> + <td><p>Displays the host groups available from SCVMM.</p></td></tr></tbody> +</table> + +### Remarks + +Host groups are containers that an administrator creates within SCVMM to group a set of virtual machine hosts for easy management. +Host groups are hierarchical; a host group can contain other host groups. + +Each host group is identified by its host path, a sequence of host group names that specifies +the location of a host or host group within the hierarchy of host groups in SCVMM. +All host paths begin with the root host group. +For example, the host path `All Hosts\\New York\\Site21\\VMHost05` indicates that the host +VMHost05 belongs to the host group Site21, which is a child host group of the host group New York. + +Use only one of the **/Add**, **/Delete**, or **/Edit** options on a command line. Use separate **TfsConfig Lab /HostGroup** command lines to assign multiple host groups to a team project collection. + +You can also use **TfsConfig Lab /HostGroup** commands to set properties that are specific to Lab Management: + +- AutoProvision specifies whether the host group is assigned to each team project in the team project collection. +By default, AutoProvision is on. +To assign a host group in a project collection to an individual team project, +use the [TFSLabConfig CreateTeamProjectHostGroup Command](../tfslabconfig-cmd.md#createteamprojecthostgroup). + + - **True** (Default). The host group is assigned to each team project in the team project collection. + + - **False**. The host group is not assigned to each team project in the team project collection. + +- LabEnvironmentPlacementPolicy specifies whether Lab Management considers the existing virtual machines when it deploys new environments on a physical machine in a host group. + + - **Conservative** (Default). Consider non-running virtual environments in deployment decisions. This includes all virtual machines that are part of environments and that are in "Stopped" state also. + + - **Aggressive** Do not consider non-running virtual environments in deployment decisions. + +- **DNSSuffix** specifies a DNS suffix to use for the virtual computers created in the host group. The following table describes how the DNS suffixes of virtual computers are affected by the /DNSSuffix setting. + +|DNSSuffix|/Add|/Edit| +|---|---|---| +|**DNSSuffix:** dnsValue|The DNS suffix is set to dnsValue.|The DNS suffix is set to dnsValue.| +|**DNSSuffix:**|The DNS suffix is inherited from host computer.|The existing suffix value is removed and the DNS suffix is inherited from host computer.| +|<Not Specified>|The DNS suffix is inherited from host computer.|DNS suffix not changed.| + +### Example + +In the following example a SCVMM host group is assigned to a team project collection. +Because the **/AutoProvision** options is not specified, the host group is automatically assigned to all team projects in the collection. + + tfsconfig lab /hostgroup /add /scvmmhostgroup:"All Hosts\Lab1\HostGroup1" /collection:Collection0 + /name:Lab1Collection0_Lab1_HostGroup1 diff --git a/docs/tfs-server/command-line/_shared/lab-libraryshare.md b/docs/tfs-server/command-line/_shared/lab-libraryshare.md new file mode 100644 index 00000000000..bd15e877f08 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/lab-libraryshare.md @@ -0,0 +1,53 @@ +You can use the **TfsConfig Lab /LibraryShare** command to add, remove, or edit the assignment +of a library share from System Center Virtual Machine Manager (SCVMM) to a team project collection. +You can also use this command set properties that are specific to Visual Studio Lab Management +and to display the library shares that are currently assigned to a collection in Lab Management or to display all the library shares in SCVMM. + + TfsConfig Lab /LibraryShare + /CollectionName:collectionName + { /Add + /SCVMMLibraryShare:librarySharePath + /Name:name + [/AutoProvision:{True|False}] + | /Delete + /Name:name + [/NoPrompt] + | /Edit + /Name:name + /AutoProvision:{True|False} + [/NoPrompt] + | /List + | /ListSCVMMLibraryShares } + +|Option|Description| +|---|---| +|**Add**|Adds the specified library share to the team project collection. You must specify the **/SCVMMLibraryShare** and **/Name** options with **Add**.| +|**Delete**|Removes the specified library share from the team project collection. You must specify the **/Name** option with **Delete**.| +|**Edit**|Sets or clears the AutoProvision property of the library share. You must specify the **/Name** and **/AutoProvision** options with **Edit**.<br /><br />By default, library shares are assigned to the team projects in a collection.<br /><br />**Note:** Changing auto-provision does impact existing team projects.| +|**CollectionName:** collectionName|Required. Specify the name of the team project collection on the application-tier Team Foundation Server.| +|**SCVMMLibraryShare:** librarysharePath|Required with **Add**. Specifies the path to the Virtual Machine Manager library share.| +|**Name:** libraryShareName|Required with **Add**, **Delete**, and **Edit**. Specifies the name of library share in the team project collection.| +|**AutoProvision**|Optional with **Add**; required with **Edit**. Specifies whether the library shares are automatically assigned to each team project in the collection. By default, library shares are assigned to the team projects.| +|**NoPrompt**|Optional with **Add** and **Edit**. Do not prompt the user for confirmation.| +|**List**|Lists all library shares that are assigned to the specified team project collection.| +|**ListSCVMMLibraryShares**|Lists all library shares that are available in Virtual Machine Manager.| + +### Remarks + +A library share is a designated share on a Virtual Machine Manager library server. +A library share provides access to file-based resources for virtual Lab Management environments that are stored on your library servers, +such as ISO images and virtual hard disks. +Library shares are created in Virtual Machine Manager. +Visual Studio Lab Management uses library shares to provision virtual machines in the lab. + +Use only one of the **/Add**, **/Edit**, or **/Delete** options on a TfsConfig Lab /LibraryShare command line. +Use separate **TfsConfig Lab /LibraryShare** command lines to assign multiple library shares to a collection. + +By default, library shares in a team project collection are automatically assigned to each of the team projects in the collection. +You can use the **/AutoProvision** option with the **/Add** and **/Edit** commands to change the library shares are assigned. + +- Set the **/AutoProvision** option to **False** to disable the automatic assignment of the library share to team projects. +To assign or remove a library share in an individual team project, +use the **TfsLabConfig** [TFSLabConfig CreateTeamProjectLibraryShare Command](createteamprojectlibraryshare.md). + +- Set the **/AutoProvision** option to **True** to enable the automatic assignments. diff --git a/docs/tfs-server/command-line/_shared/lab-settings.md b/docs/tfs-server/command-line/_shared/lab-settings.md new file mode 100644 index 00000000000..3c84075ec20 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/lab-settings.md @@ -0,0 +1,50 @@ +You can configure Visual Studio Lab Management by using the **TFSConfig Lab /Settings** option. The Settings option + +- Sets the name of the System Center Virtual Machine Manager (SCVMM) Server that controls the administration of virtual machines in your lab. + +- Sets the network location, such as the network domain or workgroup, that the physical computers in all host groups can connect to. + +- Sets the IP addresses and virtual DNS suffix for network-isolated networks in your lab. + + TfsConfig Lab + /Settings + [/ScVmmServerName:VMMServerName] + [/NetworkLocation:networkLocation] + [/IpBlock:networkIsolationIpRange] + [/DnsSuffix:networkIsolationDnsSuffix] + [/NoPrompt] + [/List] + +|Option|Description| +|---|---| +|**ScvmmServerName:** VMMServerName|Optional. Sets the fully qualified name of the System Center Virtual Machine Manager 2008 (SCVMM) server that will be used by Team Foundation Server. This is the name of the SCVMM server that will be used to manage the virtual machines.For Team Foundation Server to communicate with SCVMM, you must add the account under which Team Foundation Server is running to the Administrator role in SCVMM.| +|**NetworkLocation:** networkLocation|Optional. Sets the fully qualified name of a network, such as a network domain or workgroup, that is available on all the hosts in your lab network. When it provisions a virtual machine, Lab Management automatically connects the virtual machine to the specified network. You can find the available network locations on a host using SCVMM Administrator Console. | +|**IpBlock:** networkIsolationIpRange|Optional. Sets the range of IP addresses to be assigned to the virtual machines in an environment when an isolated network is created. Because the IP addresses are used only for internal routing among virtual machines and are not exposed beyond the boundaries of an environment, you can specify any IP range that is not used within the network specified by the **/NetworkLocation** option. In most cases, the default range of 192.168.23.0/24 should work. If you encounter problems connecting to network isolated environments, you might have to choose a different range.| +|**DnsSuffix:** networkIsolationDnsSuffix|Optional. Sets the DNS suffix that will be used to register the names of virtual machines on the isolated network for the virtual environment. To confirm that the suffix is configured correctly in the DNS hierarchy, contact your network administrator.| +|**NoPrompt**|Optional. Do not prompt for confirmation. Do not use with the **/List** option.| +|**List**|Lists the current configuration values for Lab Management.| + +### Remarks + +One of the **/ScvmmServerName**, **/NetworkLocation**, **/IpBlock**, **/DnsSuffix**, or **/List** options must be specified on each **TfsConfig Lab /Settings** command line. + +To set up Lab Management, you must specify both **/ScVmmServerName** and the **/NetworkLocation** options. However, you can specify these options on separate command lines. + +To set up network isolation, you must specify both the **/IpBlock** and **/DnsSuffix** options. However, you can specify these options on separate command lines. + +Network isolation enables you to use multiple copies of a virtual machine without machine name or IP address conflicts. +You must assign both a DNS suffix and an IP range for an isolated network. +Because the IP addresses are used only for internal routing among virtual machines and are not exposed beyond the boundaries of an environment, +you can specify any IP range that is not used within your public network. In most cases, the default range of 192.168.1.0/24 should work. +If you encounter problems connecting to network-isolated environments, you might have to choose a different range. + +### Examples + +In the this example, Lab Management is set up by using the **/ScvmmServerName** and **/NetworkLocation** options on a single command line. + + tfsconfig lab /settings /scvmmservername:vmmserver /networklocation:lab1.contoso.com + +In this example, network isolation is configured by using the **/IpBlock** and **/DNSSuffix** options on separate command lines. + + tfsconfig lab /settings /ipblock: 192.168.23.0/24 + tfsconfig lab /settings /dnssuffix:virtual1.lab1.contoso.com diff --git a/docs/tfs-server/command-line/_shared/listteamprojectcollectionhostgroups.md b/docs/tfs-server/command-line/_shared/listteamprojectcollectionhostgroups.md new file mode 100644 index 00000000000..80c1fc71e5a --- /dev/null +++ b/docs/tfs-server/command-line/_shared/listteamprojectcollectionhostgroups.md @@ -0,0 +1,37 @@ + +Use the **ListTeamProjectCollectionHostGroups** command to list the +System Center Virtual Machine Manager (SCVMM) *host groups* that are assigned to a team project +collection and that you have read access to. These collection host +groups can be added to a team project by using the +**CreateTeamProjectHostGroup** command. For more information, see +[TFSLabConfig CreateTeamProjectHostGroup Command](../tfslabconfig-cmd.md#createteamprojecthostgroup). + +**Required Permissions:** + +To use the **ListTeamProjectCollectionHostGroups** command, you must +have **View Lab Resources** permission at the Team Project collection +level. By default, members of the TFS Administrators and Team Project +Collection Administrators groups have this permission. For more +information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + + TFSLabConfig ListTeamProjectCollectionHostGroups + /Collection:collectionUrl + +### Parameter + + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | + + +### Example + +For increased readability in the example, command options are listed on +separate lines. In a command prompt window, type all options for a +command on the same line. + + + TFSLabConfig ListTeamProjectCollectionHostGroups + /collection:http://abc:8080/TFS/Collection0 + diff --git a/docs/tfs-server/command-line/_shared/listteamprojectcollectionlibraryshares.md b/docs/tfs-server/command-line/_shared/listteamprojectcollectionlibraryshares.md new file mode 100644 index 00000000000..e1b12ecfb71 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/listteamprojectcollectionlibraryshares.md @@ -0,0 +1,42 @@ + +Use the **ListTeamProjectCollectionLibraryShares** command to list the +library shares that have been assigned to a team project collection and +that you have read access to. Library shares are created in System +Center Virtual Machine Manager (SCVMM). and are assigned to a team +project collection by using the [TFSConfig Lab /LibraryShare Commands](lab-libraryshare.md). +Team project collection library shares can be added to a team project by +using the **CreateTeamProjectLibraryShare** command. For more +information, see [TFSLabConfig CreateTeamProjectLibraryShare Command](createteamprojectlibraryshare.md). + +**Required Permissions:** + +To use the **ListTeamProjectCollectionLibraryShares** command, you must +have **View Lab Resources** permission at the Team Project collection +level. By default, members of the TFS Administrators and Team Project +Collection Administrators groups have this permission. For more +information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + + + TFSLabConfig ListTeamProjectCollectionLibraryShares + Collection:collectionUrl + + +### Parameter + + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | + + + +### Example + +For increased readability in the example, command options are listed on +separate lines. In a command prompt window, type all options for a +command on the same line. + + + TFSLabConfig ListTeamProjectCollectionLibraryShares + /collection:http://abc:8080/TFS/Collection0 + diff --git a/docs/tfs-server/command-line/_shared/listteamprojecthostgroups.md b/docs/tfs-server/command-line/_shared/listteamprojecthostgroups.md new file mode 100644 index 00000000000..61aa5f30923 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/listteamprojecthostgroups.md @@ -0,0 +1,35 @@ + +Use the **ListTeamProjectHostGroups** command to list the *host groups* that are assigned to a team project +and that you have read access to. + +**Required Permissions:** + +To use the ListTeamProjectHostGroups command, you must have **View Lab +Resources** permissions at the Team Project level. By default, members +of the Team Foundation Server Administrators, Team Project Collection +Administrators, Team Project Administrators, Team Project Contributors, +and Team Project Readers groups have this permission. For more +information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + + + TFSLabConfig ListTeamProjectHostGroups + Collection:collectionUrl + /TeamProject:teamProjectName + +### Parameters + + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | +| **TeamProject:** *teamProjectName* | Required. The name of the team project. Use quotation marks if there are spaces in the name. | + +### Example + +For increased readability in the example, command options are listed on +separate lines. In a command prompt window, type all options for a +command on the same line. + + TFSLabConfig ListTeamProjectHostGroups + /collection:http://abc:8080/TFS/DefaultCollection + /teamProject:Project1 diff --git a/docs/tfs-server/command-line/_shared/listteamprojectlibraryshares.md b/docs/tfs-server/command-line/_shared/listteamprojectlibraryshares.md new file mode 100644 index 00000000000..7a0923fa2a1 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/listteamprojectlibraryshares.md @@ -0,0 +1,27 @@ + +Use the **ListTeamProjectLibraryShares** command to list all *library shares* that are assigned to a team +project and that you have access to. + +**Required Permissions:** + +To use the ListTeamProjectLibraryShares command, you must have the +**View Lab Resources** permission at Team Project level. By default, +members of the TFS Administrators, Team Project Collection +Administrators, Team Project Administrators, Team Project Contributors, +and Team Project Readers groups have this permission. For more +information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + + + TFSLabConfig ListTeamProjectLibraryShares + Collection:collectionUrl + /TeamProject:teamProjectName + + +### Parameters + + + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | +| **TeamProject:** *teamProjectName* | Required. The name of the team project. Use quotation marks if there are spaces in the name. | diff --git a/docs/tfs-server/command-line/_shared/offlinedetach.md b/docs/tfs-server/command-line/_shared/offlinedetach.md new file mode 100644 index 00000000000..6b04e3de85f --- /dev/null +++ b/docs/tfs-server/command-line/_shared/offlinedetach.md @@ -0,0 +1,55 @@ +>**Command availability:** TFS 2015 Update 3 and newer + +You use the **OfflineDetach** command to make an offline collection database into +a detached offline collection database. + + TFSConfig offlineDetach /configurationDB:DatabaseName + /collectionDB:DatabaseName + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/configurationDB</strong></td> + <td>Specifies the name of the configuration database to be used.</td> + </tr> + <tr> + <td><strong>/collectionDB</strong></td> + <td>Specifies the name of the collection database to be detached.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **OfflineDetach** command, you must be a member of the sysadmin role for the specified SQL Server instance. + +### Remarks + +This command modifies the schema of the specified collection database and should never be run +against databases which are in use by a Team Foundation Server deployment. If your databases +are in use by a Team Foundation Server deployment, use TfsConfig collection /detach instead. + +This command is useful when you need to restore an individual collection database from backup +without restoring other collection databases that are part of the same TFS deployment. +Previously this required restoring a complete and consistent set of databases (configuration +and all collections) to a staging environment, configuring a TFS deployment using those +databases, and detaching the one collection of interest. + +Instead, you can now restore consistent copies of the configuration database +and the collection database of interest and run the OfflineDetach command. +The detached collection database can then be attached to any TFS deployment +at an appropriate version. + +### Example + +The following example illustrates detaching a collection database named TFS_PrimaryCollection, using a +configuration database named TFS_Configuration, with both on a SQL instance running on a server named +"ContosoTemp" on the named instance "Backups". + + TFSConfig offlineDetach /configDB:ContosoTemp\Backups;TFS_Configuration /collectionDB:ContosoTemp\Backups;TFS_PrimaryCollection \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/permissions.md b/docs/tfs-server/command-line/_shared/permissions.md new file mode 100644 index 00000000000..f69308b9cde --- /dev/null +++ b/docs/tfs-server/command-line/_shared/permissions.md @@ -0,0 +1,124 @@ + +Use the **TFSLabConfig Permissions** command to set and get permissions +set for a specified user or for multiple users on a specified object in +Visual Studio Lab Management. For more information about individual +permissions, see the Lab Management Permissions section of +[Permission reference for Team Foundation Server](../../../security/permissions.md). + +**Required Permissions:** + +To query permissions on an object, you must have Read permissions for +the object. To change permissions on an object the **Permissions** +command, you must have the **Manage Permissions** permission. By +default, the creator of the object has this permission. For more +information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + + + TFSLabConfig Permissions + /Collection:collectionUrl + [objectSpec] + {[/User:userName1[,userName2][,...]] + [/Group:groupName1[,groupName2][,...]]} + [/Allow:{* |perm1[,perm2][,...] }] + [/Deny:{* |perm1[,perm2][,...]}] + [/Remove:{* |perm1[,perm2][,...]}] + [/Inherit:Yes|No] + + +### Parameters + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | +| *objectSpec* | Optional. Specifies the target object such as a team project or library share to which the permissions are applied. For information about how to specify objects, see objectSpec below. | +| **User**: *userName1[,userName2][,...]* | Optional. Specifies one or more users to which the permissions are applied. Use commas to separate multiple user names. | +| **Group**: *groupName1[,groupName2][,...]* | Optional. Specifies one or more groups to which the permissions are applied. Use commas to separate multiple group names. | +| **Allow**: {* | *perm1*[,*perm2*][,...] } | Optional. Enables the specified permissions for the specified users or groups. Use an asterisk (*) to specify all permissions. To specify an individual permission, use the identifiers in the **Name at command line** column of the table in the Lab Management Permissions section of [Permission reference for Team Foundation Server](../../../security/permissions.md). Use commas to separate multiple permissions. | +| Deny:{* | *perm1*[,*perm2*][,...] } | Optional. Denies the specified permissions for the specified users or groups. Use an asterisk (*) to specify all permissions. To specify an individual permission, use the identifiers in the **Name at command line** column of the table in the Lab Management Permissions section of [Permission reference for Team Foundation Server](../../../security/permissions.md). Use commas to separate multiple permissions. | +| **Remove**:{* | *perm1*[,*perm2*][,...] } | Optional. Unsets the specified permissions that were previously granted or denied to the user or group. To specify an individual permission, use the identifiers in the **Name at command line** column of the table in the Lab Management Permissions section of [Permission reference for Team Foundation Server](../../../security/permissions.md). Use commas to separate multiple permissions. | +| **Inherit:Yes | No** | Optional. If you specify **yes**, all permissions associated with a parent ACL are inherited by an item. Cannot be combined with the /**remove**, /**user**, or /**group** options. | + +### objectSpec + +You can specify the objects that you want to include in the +**TFSLabConfig Permissions** command in two ways: + +- Use one or more locations options to specify the object in the Lab + Management hierarchy. + +- Use the **/Url** option to specify the object as a Uri. + +If the *objectSpec* parameter option is not +specified, the permissions are applied to all objects in the team +project collection. + + +#### Object type options + +The following table lists the valid combination of options that you can +use to specify an object as the *objectSpec* parameter of a **TFSLabConfig +permissions** command. + +| To set permissions on | Use these options | +| --- | --- | +| A specific host group in a team project collection | **/TeamProjectCollectionHostGroup**: *teamProjectCollectionHostGroupName* | +| A specific library share in a team project collection | **/TeamProjectCollectionLibraryShare**: *teamProjectCollectionLibraryShareName* | +| All group hosts in a team project | **/TeamProject**: *projectName* **/TeamProjectHostGroup**: * | +| A group host in a team project | **/TeamProject**: *projectName* **/TeamProjectHostGroup**:*teamProjectHostGroupName* | +| A lab environment in a host group for a team project | **/TeamProject**: *projectName* **/TeamProjectHostGroup**: *teamProjectHostGroupName* **/LabEnvironment**:*labEnvironmentName* | +| All library shares in a team project | **/TeamProject**: *projectName* **/TeamProjectLibraryShare**: * | +| A library share in a team project | **/TeamProject**: *projectName* **/TeamProjectLibraryShare**:*teamProjectLibraryShareName* | +| A lab template in a library share of a team project | **/TeamProject**: *projectName* **/TeamProjectLibraryShare**: *teamProjectLibraryShareName* **/LabTemplate**: *labTemplateName* | +| A lab environment in a library share of a team project | **/TeamProject**: *projectName* **/TeamProjectLibraryShare**: *teamProjectLibraryShareName* **/LabEnvironment**: *labEnvironmentName* | + + +#### URL + +Use the following syntax to specify the +*objectSpec* target object of a **TFSLabConfig +permissions** command by using the **/Url** option: + +**/url:VSTFS:///LabManagement/** +*objectType* **/** +*objectId* + +The objectId is the unique numeric identifier of the object. + +The following table lists the valid keywords for the +*objectType* keyword: + + +| Object Type | Description | +| --- | --- | +| **TeamProjectCollectionHostGroup** | A host group of a team project collection | +| **TeamProjectCollectionLibraryShare** | A library share of a team project collection | +| **TeamProject** | A team project | +| **TeamProjectHostGroup** | A host group of a team project | +| **TeamProjectLibraryShare** | A library share of a team project | +| **LabTemplate** | A virtual machine or template in a team project library share | +| **LabEnvironment** | An environment that is deployed on a team project host group or stored in a team project library share. | + + +### Permissions + +You can specify one or more of Lab Management permissions as the target +of the **/Allow**, **/Deny**, or **/Remove** options. For a lists of +available permissions, see the **Lab Management Permissions** section of +the <span>[Permission reference for Team Foundation +Server](https://msdn.microsoft.com/en-us/library/ms252587(v=vs.120).aspx)</span> +topic. + +- Use an asterisk (\*) to specify all lab permissions. + +- Use commas to separate multiple permissions. + + +### Remarks + +If neither the **/User** or **/Group** option is specified, the current +permissions of the specified object is displayed. + +If the *objectSpec* parameter option is not +specified, the permissions are applied to all objects in the team +project collection. + diff --git a/docs/tfs-server/command-line/_shared/prepareclone.md b/docs/tfs-server/command-line/_shared/prepareclone.md new file mode 100644 index 00000000000..ec1bace2f2d --- /dev/null +++ b/docs/tfs-server/command-line/_shared/prepareclone.md @@ -0,0 +1,74 @@ +>**Command availability:** TFS 2015 and TFS 2013 + +The **PrepareClone** command removes information about scheduled backups, SharePoint, +and reporting resources from a Team Foundation Server (TFS) deployment. +This command is used in two circumstances: +- when you move a deployment to new hardware but want to keep using the old deployment +- when you clone a TFS deployment + +In either of these cases it is critical to run this command. +If you don't, the original resources will be used by both the original and the new servers. +If both the original and the new servers are live and point to the same SharePoint or reporting resources for any amount of time, +you could end up with corrupted databases. + +>**Important:** +>This command should be run before configuration, whether you move or clone TFS. +>If you run it after configuration, +>you could end up with inconsistencies between content in your databases and content in your web.config file. +>These inconsistencies might take your server offline. +>If you have already configured your moved or cloned TFS deployment and realize you need to run the command, follow these steps. +>First, quiesce your server. Next, run PrepareClone command, ChangeServerID command, and then RemapDBs command. Finally, unquiesce your server. + + TFSConfig PrepareClone /SQLInstance:ServerName /DatabaseName:TFSConfigurationDatabaseName + [/notificationURL: TFSURL] [/usesqlalwayson] + +<table> + <thead> + <tr> + <th>Option</th> + <th>What it does</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/DatabaseName</strong></td> + <td>Specifies the name of the server that hosts the database that you want to map for TFS, in addition to the name of the configuration database itself.</td> + </tr> + <tr> + <td><strong>/SQLInstance:</strong> ServerName</td> + <td> + Specifies the name of the server that you want to map as a server that hosts one or more databases for TFS. + If an instance other than the default instance hosts a database, you must also specify the name of the instance. + Use this format: ServerName <strong>\</strong> InstanceName. + </td> + </tr> + <tr> + <td><strong>/NotificationURL:</strong> TFSURL</td> + <td>Optional. Specifies The notification URL for the application-tier server.</td> + </tr> + <tr> + <td><strong>/usesqlalwayson</strong></td> + <td> + Optional. Specifies that the databases are part of an AlwaysOn Availability Group in SQL Server. + If configured, this option sets MultiSubnetFailover in the connection string.<br/><br/> + For more information, see <a href="http://msdn.microsoft.com/library/hh510230.aspx">AlwaysOn Availability Groups (SQL Server)</a>. + </td> + </tr> + </tbody> +</table> + +### Required Permissions + +To use the **PrepareClone** command, you must be a member of the Team Foundation Administrators security group +and a member of the sysadmin security group for any SQL Server databases that Team Foundation Server uses. +For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +### Remarks + +You use the **PrepareClone** command to reconfigure TFS when you move the original installation to new hardware and want to continue to use the original deployment TFS and hardware, or when you want to clone your TFS deployment for testing purposes. You use TFSConfig PrepareClone in conjunction with TFSConfig RemapDBs and TFSConfig ChangeServerID to support the cloning configuration. + +### Example + +The following example shows how to use the command on a moved TFS named NewFabrikamTFS to remove old backup, reporting, and SharePoint resource information. If this information isn't removed, the original deployment of TFS still uses those same resources and databases become corrupt. In the example, the SQL Server supporting the moved TFS is also named NewFabrikamTFS, and the instance is the default instance, so no specific instance information is required, just the server name. + + TFSConfig PrepareClone /SQLInstance:NewFabrikamTFS /DatabaseName:TFS_Configuration \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/proxy.md b/docs/tfs-server/command-line/_shared/proxy.md new file mode 100644 index 00000000000..c1f5330a828 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/proxy.md @@ -0,0 +1,97 @@ +>**Command availability:** TFS 2015, TFS 2013, and TFS 2012 + +You can use the **TFSConfig Proxy** command to update or change the settings used by Team Foundation Server Proxy. +Team Foundation Server Proxy provides support for distributed teams to use version control by managing a cache of downloaded version control files in the location of the distributed team. +By configuring Team Foundation Server Proxy, you can significantly reduce the bandwidth needed across wide area connections. +In addition, you do not have to manage downloading and caching of version files; management of the files is transparent to the developer who is using the files. +Meanwhile, any metadata exchanges and file uploads continue to appear in Team Foundation Server (TFS). +If you use the VSTS to host your development project in the cloud, +you can use the Proxy command to not only manage the cache for projects in the hosted collection, but also to manage some of the settings used by that service. + +For more information about installing Team Foundation Server Proxy and initial configuration of the proxy, +see <span sdata="link"> How to: Install Team Foundation Proxy and set up a remote site </span>. For more information about configuring proxy on client computers, see [Team Foundation Version Control Command Reference](http://go.microsoft.com/fwlink/?LinkId=254422). + + TFSConfig Proxy /add|delete|change [/Collection:TeamProjectCollectionURL /account:AccountName] + /Server:TeamFoundationServerURL [/Continue] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/add</strong></td> + <td> + Adds the specified server or collection to the proxy list in the Proxy.config file. + You can run /add multiple times to include more collections or servers. + When using /add with a collection hosted on Visual Studio Team Services, + you will be prompted for your credentials on Visual Studio Team Services. + </td> + </tr> + <tr> + <td><strong>/change</strong></td> + <td> + Changes the credentials stored as the service account for Visual Studio Team Services. + The /change option is only used for Visual Studio Team Services; it should not be used for local deployments of TFS. + </td> + </tr> + <tr> + <td><strong>/delete</strong></td> + <td>Removes the specified server or collection from the proxy list in the Proxy.config file.</td> + </tr> + <tr> + <td><strong>/account</strong></td> + <td> + Specifies the account used as the service account for the proxy in Visual Studio Team Services. + This option is only used for VSTS in conjunction with the /change option.<br/><br/> + The default service account used for VSTS is "Account Service." + </td> + </tr> + <tr> + <td><strong>/continue</strong></td> + <td>Continues the execution of the command even if the verification process produces warnings.</td> + </tr> + <tr> + <td><strong>/Collection</strong>:TeamProjectCollectionURL</td> + <td>Specifies the URL of the team project collection that is hosted on Visual Studio Team Services, in `AccountName.DomainName/CollectionName` format.</td> + </tr> + <tr> + <td><strong>/account</strong>:AccountName</td> + <td> + Specifies the name of the account that is used as the service account for Visual Studio Team Services. + If the account name has spaces, the name must be enclosed within quotation marks (""). + All special characters in account names must be specified in accordance with command-line syntax. + </td> + </tr> + <tr> + <td><strong>/account</strong>:ServerURL</td> + <td>Specifies the URL of a TFS deployment, in `ServerURL:Port/tfs` format.</td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **Proxy** command, you must be a member of the Team Foundation Administrators security group and an administrator on the proxy server. For more information, see <span sdata="link"> Permission reference for Team Foundation Server </span>. + +### Remarks + +You use the **Proxy** command to update the existing configuration of Team Foundation Server Proxy. You cannot use the Proxy command for initial installation and configuration of the proxy. + +### Examples + +The following example shows how to add a TFS deployment named FABRIKAM to the proxy list. + + TFSConfig Proxy /add /Server:http://www.fabrikam.com:8080/tfs + +The following example shows how to add a team project collection hosted on VSTS to the proxy list. The collection is named PhoneSaver and the account name used for VSTS is HelenaPetersen.fabrikam.com. Because the /account option is not specified, the default service account will be used. + + TFSConfig Proxy /add /Collection:https://HelenaPetersen.tfs.visualstudio.com/PhoneSaver + +The following example shows how to change the service account used by the proxy for the team project collection hosted on Visual Studio Team Services. The collection is named PhoneSaver, the account name used for VSTS is HelenaPetersen.fabrikam.com, and the service account used by the proxy is being changed to "My Proxy Service Account". Because the account name contains spaces, quotation marks are used to enclose the name. + + TFSConfig Proxy /change /Collection:https://HelenaPetersen.tfs.visualstudio.com/PhoneSaver + /account:"My Proxy Service Account" diff --git a/docs/tfs-server/command-line/_shared/rebuildwarehouse.md b/docs/tfs-server/command-line/_shared/rebuildwarehouse.md new file mode 100644 index 00000000000..a830e8a9726 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/rebuildwarehouse.md @@ -0,0 +1,63 @@ +You can use the **RebuildWarehouse** command to rebuild the SQL Server Reporting Services and SQL Server Analysis Services databases that Visual Studio Team Foundation Server (TFS) uses. + + TFSConfig RebuildWarehouse /analysisServices | /all [/ReportingDataSourcePassword:Password] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/analysisServices</strong></td> + <td> + Required if <strong>/all</strong> is not used. + Specifies that only the database for Analysis Services will be rebuilt. + If no database exists for Analysis Services, you must also use the <strong>/reportingDataSourcePassword</strong> option. + </td> + </tr> + <tr> + <td><strong>/all</strong></td> + <td> + Required if <strong>/analysisServices</strong> is not used. + Specifies that all reporting and analysis databases that TFS uses will be rebuilt. + </td> + </tr> + <tr> + <td><strong>/reportingDataSourcePassword:</strong> Password</td> + <td> + Required if the TFS_Analysis database does not exist. + Specifies the password of the account that is used as the data sources account for SQL Server Reporting Services (TFSReports). + For more information, see <a href="https://msdn.microsoft.com/library/cf314289-96ef-4f70-9c2b-a130d7287442">Service accounts and dependencies in Team Foundation Server</a>. + </td> + </tr> + </tbody> +</table> + +### Required Permissions + +To use the **RebuildWarehouse** command, you must be a member of the following groups: + +- the Team Foundation Administrators security group and the Administrators security group on the server or servers that are running the administration console for Team Foundation + +- the sysadmin group on the server or servers that are running the instance of SQL Server that hosts the databases for TFS + +For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +### Remarks + +You might use this command when moving or splitting a team project collection, restoring data, or otherwise changing the configuration of your deployment. + +To start the rebuild of these databases interactively, you can use the Reporting node in the administration console for Team Foundation. For more information, see [Open the Team Foundation Administration Console](https://msdn.microsoft.com/library/d4e7d06b-fd68-43d1-8baf-ce31c8989a02)>. + +### Example + +The following example shows how to rebuild the Analysis Services database for a deployment of TFS. + + TFSConfig RebuildWarehouse /analysisServices + + TFSConfig - Team Foundation Server Configuration Tool + Copyright � Microsoft Corporation. All rights reserved. + The Analysis Services database was successfully rebuilt. diff --git a/docs/tfs-server/command-line/_shared/registerdb.md b/docs/tfs-server/command-line/_shared/registerdb.md new file mode 100644 index 00000000000..ae24206fe14 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/registerdb.md @@ -0,0 +1,60 @@ +Use **RegisterDB** to update name of the server that hosts the configuration database in Visual Studio Team Foundation Server (TFS). +You might use this command when restoring the configuration database to new hardware or when changing the domain of a deployment. + + TFSConfig RegisterDB /SQLInstance:ServerName /databaseName: DatabaseName [/usesqlalwayson] + +<table> + <thead> + <tr> + <th>Argument</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/SQLInstance:</strong> ServerName</td> + <td> + Required. Specifies the name of the server that is running SQL Server and the name of the instance + if you want to use an instance other than the default instance. + If you specify an instance, you must use the format: `ServerName\InstanceName`. + </td> + </tr> + <tr> + <td><strong>/databaseName:</strong> DatabaseName</td> + <td>Required. Specifies the name of the configuration database. By default, this is Tfs_Configuration.</td> + </tr> + <tr> + <td><strong>/usesqlalwayson</strong></td> + <td> + Optional. Specifies that the databases are part of an AlwaysOn Availability Group in SQL Server. + If configured, this option sets MultiSubnetFailover in the connection string.<br/><br/> + For more information, see <a href="http://msdn.microsoft.com/library/hh510230.aspx">AlwaysOn Availability Groups (SQL Server)</a>. + </td> + </tr> + </tbody> +</table> + +### Required Permissions + +To use the **RegisterDB** command, you must be a member of the Team Foundation Administrators group on the application-tier server +for Team Foundation and a member of the sysadmin group in SQL Server on the data-tier server for Team Foundation. +For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +### Remarks + +Back up the databases for TFS before you use this command. + +For the RegisterDB command to succeed, the following application pools and programs must be running: + +- Team Foundation Server Application Pool (application pool) +- ReportServer (application pool) +- SQL Server Reporting Services (program) + +You must provide the exact name or address of the configuration database for this command to operate correctly. +If you must change the server on which this database is stored, you must ensure that TFS points to the new location. + +### Example + +The following example redirects TFS to a configuration database that is located on the server ContosoMain in the SQL Server instance TeamDatabases. + + TFSConfig RegisterDB /SQLInstance:ContosoMain\TeamDatabases /databaseName:Tfs_Configuration diff --git a/docs/tfs-server/command-line/_shared/remapdbs.md b/docs/tfs-server/command-line/_shared/remapdbs.md new file mode 100644 index 00000000000..16fa8ad4bf0 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/remapdbs.md @@ -0,0 +1,84 @@ +The **RemapDBs** command redirects Visual Studio Team Foundation Server (TFS) to its databases +when they are stored on more than one server and you are restoring, moving, or otherwise changing the configuration of your deployment. +For example, you must redirect TFS to any databases for team project collections +if they are hosted on a separate server or servers from the configuration database. +You must also redirect TFS to the server or servers that are running SQL Server Analysis Services or SQL Server Reporting Services +if those databases are hosted on a separate server or instance from the configuration database. + + TFSConfig RemapDBs /DatabaseName:ServerName;DatabaseName /SQLInstances:ServerName1,ServerName2 + [/AnalysisInstance:ServerName] [/AnalysisDatabaseName:DatabaseName] + [/preview] [/continue] [/usesqlalwayson] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/DatabaseName</strong></td> + <td>Specifies the name of the server that hosts the database that you want to map for TFS, in addition to the name of the database itself.</td> + </tr> + <tr> + <td><strong>/SQLInstances:</strong> ServerName1,ServerName2</td> + <td> + Specifies the name of the server that is running SQL Server, + in addition to the name of the instance if you want to use an instance other than the default instance.<br/><br/> + If you are specifying more than one server, you must use a comma to separate multiple pairs of server and instance names. + </td> + </tr> + <tr> + <td><strong>/AnalysisInstance:</strong> ServerName</td> + <td> + Optional. Specifies the name of the server and instance that hosts SQL Server Analysis Services. + Use this option to specify the server and instance that hosts the Analysis Services database. + </td> + </tr> + <tr> + <td><strong>/AnalysisDatabaseName:</strong> DatabaseName</td> + <td> + Optional. Specifies the name of the Analysis Services database that you want to use + with TFS if you have more than one such database on the server that you specified with the <strong>/AnalysisInstance</strong> option. + </td> + </tr> + <tr> + <td><strong>/preview</strong></td> + <td>Optional. Displays the actions that you must take to update the configuration.</td> + </tr> + <tr> + <td><strong>/continue</strong></td> + <td> + Optional. Specifies that the <strong>RemapDB</strong> command should continue even if an error occurs during the attempt to locate one or more databases. + If you use the <strong>/continue</strong> option, any collections whose databases are not found on the server or servers that you specify + will be reconfigured to use the server and instance that hosts the configuration database. + </td> + </tr> + <tr> + <td><strong>/usesqlalwayson</strong></td> + <td> + Optional. Specifies that the databases are part of an AlwaysOn Availability Group in SQL Server. + If configured, this option sets MultiSubnetFailover in the connection string.<br/><br/> + For more information, see <a href="http://msdn.microsoft.com/library/hh510230.aspx">AlwaysOn Availability Groups (SQL Server)</a>. + </td> + </tr> + </tbody> +</table> + +### Required Permissions + +To use the **RemapDBs** command, you must be a member of the Team Foundation Administrators security group and a member of the sysadmin security group for any SQL Server databases that Team Foundation Server uses. For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +### Remarks + +You use the **RemapDBs** command to reconfigure TFS to use different servers and instances of SQL Server from the servers and instances in the original installation. + +### Example + +The following example shows how to redirect TFS to its configuration database TFS\_Configuration. +This database is hosted on ContosoMain on the named instance TeamDatabases. +Its project collection databases are stored on both ContosoMain\\TeamDatabases and the default instance on Contoso2. + + TFSConfig RemapDBs /DatabaseName:ContosoMain\TeamDatabases;TFS_Configuration + /SQLInstances:ContosoMain\TeamDatabases,Contoso2 diff --git a/docs/tfs-server/command-line/_shared/repairjobqueue.md b/docs/tfs-server/command-line/_shared/repairjobqueue.md new file mode 100644 index 00000000000..1d50ec09119 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/repairjobqueue.md @@ -0,0 +1,19 @@ +>**Command availability:** TFS 2015 + +You use the **RepairJobQueue** command to fix scheduled jobs that have stopped running for deployment and collection hosts. + + TfsConfig repairJobQueue + +### Required permissions + +To use the **RepairJobQueue** command, you must be a member of the local administrators group on the machine running **TfsConfig**. +You must also be a member of the sysadmin security role for all the SQL Server instances used by the TFS deployment. + +### Remarks + +You would typically use the **RepairJobQueue** command if you notice any scheduled jobs are not running. +The command does not take any arguments, and requires the TFS deployment to be configured. + +### Example + + TFSConfig repairJobQueue \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/settings.md b/docs/tfs-server/command-line/_shared/settings.md new file mode 100644 index 00000000000..17a829e45e2 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/settings.md @@ -0,0 +1,42 @@ +You can use the **Settings** command to automate changes to the uniform resource locator (URL) +that is used by the notification interface and for the server address for Visual Studio Team Foundation Server (TFS). +By default, the notification interface URL and the server URL match in TFS, but you can configure separate URLs. +For example, you might want to use a different URL for the automatic e-mails that TFS generates. +You must run this tool from the application tier to update all servers so that they use the new URLs. + +To change these URLs interactively or to just view the current settings, you can use the administration console for Team Foundation. See [Configure and manage TFS resources](https://msdn.microsoft.com/library/d553c7b0-e794-41dc-a7ef-91d7a5e1e46b). + + TFSConfig Settings [/ServerURL:URL] [/NotificationURL:URL] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/ServerURL:</strong> URL</td> + <td>Specifies the URL of the application-tier server for Team Foundation. This value is stored in the configuration database for Team Foundation.</td> + </tr> + <tr> + <td><strong>/NotificationURL:</strong> URL</td> + <td>Specifies the URL to use in the text of e-mail alerts, if that URL differs from the URL of the application-tier server for Team Foundation. This value is stored in the configuration database.</td> + </tr> + </tbody> +</table> + +### Required permissions + +You must be a member of the Team Foundation Administrators security group and the Administrators group on the application-tier server. For more information, see [Set administrator permissions for Team Foundation Server](https://msdn.microsoft.com/library/ed578715-f4d2-4042-b797-5f97abde9973). + +### Remarks + +The **Settings** command changes connection information for server-to-server communication in a deployment of TFS. The URL that is specified in **/ServerURL** must be available to all servers within the deployment. + +### Example + +The following example changes the value of NotificationURL to `http://contoso.example.com/tfs` and the value of ServerURL to `http://contoso.example.com:8080/tfs`. + + TFSConfig Settings /NotificationURL:http://contoso.example.com/tfs /ServerURL:http://contoso.example.com:8080/tfs diff --git a/docs/tfs-server/command-line/_shared/setup.md b/docs/tfs-server/command-line/_shared/setup.md new file mode 100644 index 00000000000..811d316882a --- /dev/null +++ b/docs/tfs-server/command-line/_shared/setup.md @@ -0,0 +1,37 @@ +>**Command availability:** TFS 2015 and TFS 2013 + +You use the **Setup** command to uninstall features which are currently configured on the machine where the command is being run. + + TfsConfig setup /uninstall:{feature[,feature,...]} + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/uninstall</strong></td> + <td> + Specifies one or more features to be uninstalled from the machine where the command is being run. + Options include: All, ApplicationTier, SharePointExtensions, TeamBuild, VersionControlProxy. + </td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **Setup** command, you must be a member of the Team Foundation Administrators security group. + +### Examples + +The following example uninstalls all TFS features from the current machine. + + TfsConfig setup /uninstall:ALL + +The following example uninstalls the application tier and build features from the current machine. + + TfsConfig setup /uninstall:ApplicationTier,TeamBuild \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/ssh.md b/docs/tfs-server/command-line/_shared/ssh.md new file mode 100644 index 00000000000..c6c9d2f3131 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/ssh.md @@ -0,0 +1,78 @@ +>**Command availability:** TFS 2016 + +You can use the **ssh** command to regenerate the SSH server host key, get the server key fingerprint or enable/disable the SSH service on TFS deployment. + + TFSConfig SSH {/RegenerateKey | /GetKeyFingerprint | /Enable | /Disable} + +### Parameters + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/RegenerateKey</strong></td> + <td> + Required if <strong>/GetKeyFingerprint</strong> or <strong>/Enable</strong> or <strong>/Disable</strong> is not used. + Generates SSH server host key and updates it in the database. The command will replace the old key, if there is any, for the current TFS deployment. + </td> + </tr> + <tr> + <td><strong>/GetKeyFingerprint</strong></td> + <td> + Required if <strong>/RegenerateKey</strong> or <strong>/Enable</strong> or <strong>/Disable</strong> is not used. + Specifies the SSH server host key fingerprint from the current TFS deployment. + </td> + </tr> + <tr> + <td><strong>/Enable</strong></td> + <td> + Required if <strong>/RegenerateKey</strong> or <strong>/GetKeyFingerprint</strong> or <strong>/Enable</strong> is not used. + Enables SSH service for the current TFS deployment.<br /><br /> + <strong>Tip:</strong> The SSH service is installed when Application Tier is configured. The <strong>/Enable</strong> option will only enable SSH service by starting it on all the Application Tier nodes. + </td> + </tr> + <tr> + <td><strong>/Disable</strong></td> + <td> + Required if <strong>/RegenerateKey</strong> or <strong>/GetKeyFingerprint</strong> or <strong>/Disable</strong> is not used. + Disables SSH service for the current TFS deployment.<br /><br /> + <strong>Tip:</strong> The SSH service is uninstalled when Applciation Tier is configured. The <strong>/Disable</strong> option will only disable SSH service by stopping it on all the Application Tier nodes. + </td> + </tr> + </tbody> +</table> + +### Required permissions + +To use the **SSH** command, you must be a member of the Team Foundation Administrators security group as well as the local Administrators group on the machine running **TFSConfig**. +You must also be a member of the sysadmin security role for all the SQL Server instances used by the TFS deployment. + +For more information, see [Permission reference for Team Foundation Server](../../../security/permissions.md). + +### Remarks + +The **SSH** command is used by an administrator who wants to update the existing SSH server host key or look up the existing key fingerprint. +The **/Enable** and **/Disable** options enable or disable the SSH service on each Application Tier in the TFS deployment. + +### Examples + +To Regenerate the SSH server host key + + TFSConfig Ssh /Regenerate + +To get the existing key fingerprint + + TFSConfig Ssh /GetKeyFingerprint + +To Enable the SSH service on all the application tiers + + TFSConfig Ssh /Enable + +To Disable the SSH service on all the application tiers + + TFSConfig Ssh /Disable \ No newline at end of file diff --git a/docs/tfs-server/command-line/_shared/tpchostgroup.md b/docs/tfs-server/command-line/_shared/tpchostgroup.md new file mode 100644 index 00000000000..e2671190be9 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/tpchostgroup.md @@ -0,0 +1,64 @@ + +> **Note:** +> These commands only work on SCVMM 2012 server, and are not supported on +> SCVMM 2008 R2 server. + +Use the **TPCHostGroup** command to add or remove a host group from a +team project collection, or to modify the Lab Management settings of the +host group. + +To run these commands, you must be a member of Team Project Collection +Administrators group in Team Foundation Server for the collection you +specify. In addition, you must be a member of Administrator or Delegated +Administrator role in the SCVMM Server from which you are adding the +host groups. Furthermore, you must ensure that no other team project +collection in any Team Foundation Server is already using the same SCVMM +host group. + + + TfsLabConfig TPCHostGroup + /collection:collectionUrl + [/add + /scvmmhostgroup:scvmmHostGroupPath + /name:name + [/dnssuffix:dnsSuffixForNetworkIsolation] + [/autoprovision:{True|False}]] + [/delete + /name:name + [/noprompt]] + [/edit + /name:hostGroupName + [/autoprovision:{True|False}] + [/dnssuffix:dnSuffixForNetworkIsolation] + [/noprompt]] + [/list] + [/listscvmmhostgroups] + + +### Parameters + + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. The URL of the team project collection on the application tier of Team Foundation Server that contains the team project. For example, ```/collection:http://abc:8080/TFS/DefaultCollection```. | +| **add** | Adds the specified host group to the team project collection. You must specify the /**collection**, /**scvmmhostgroup**, and name options with /**add**. | +| **scvmmhostgroup**: *scvmmHostGroupPath* | Required with /**add**. Specifies the fully qualified domain name (FDQN) of the VMM host group. The FQDN path can be found by using the VMM Admin Console. | +| **name**: *hostGroupName* | Required with /**add**. Specifies the name of the host group in the team project collection. | +| **dnsSuffix**: *dnsSuffixForNetworkIsolation* | Optional with /**add** or /**edit**. Specifies the DNS suffix that will be used to register the names of virtual machines on the isolated network for the virtual environments within this host group. To confirm that the suffix is configured correctly in the DNS hierarchy, contact your network administrator. | +| **autoProvision** : *True | False* | Optional with /**add** or /**edit**. Specifies whether the host group is automatically assigned to each team project in the collection. By default, /autoProvision is set to True, and host group is automatically assigned to every team project in the collection. Note: The /**autoProvision** option affects existing team projects.| +| **Delete** | Removes the specified host group from the team project collection. You must specify the /**collection** and /**name** options. | +| **noPrompt** | Optional with /**add**, /**edit**, or /**delete**. Suppresses display progress and result data from the command window. | +| **edit** | Changes the Lab Management settings of the host group. You must specify the /**collection** and /**name** options. | +| **list** | Lists all host groups that are assigned to the specified team project collection. | +| **listVmmHostGroups** | Lists all host groups that are available in VMM. | + + +### Example + +In this example, a host group is added to a team project collection: + + + TFSLabConfig TPCHostGroup + /collection:http://abc:8080/TFS/Collection0 + /name:HostGroup1 + diff --git a/docs/tfs-server/command-line/_shared/tpclibraryshare.md b/docs/tfs-server/command-line/_shared/tpclibraryshare.md new file mode 100644 index 00000000000..468fcb26d16 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/tpclibraryshare.md @@ -0,0 +1,60 @@ + +> **Note:** +> These commands only work on SCVMM 2012 server, and are not supported on +> SCVMM 2008 R2 server. + +Use the **TPCLibraryShare** command to add or remove a library share +from a team project collection, or to modify the lab management settings +of the library share. + +To run these commands, you must be a member of Team Project Collection +Administrators group in Team Foundation Server for the collection you +specify. In addition, you must be a member of Administrator or Delegated +Administrator role in the SCVMM Server from which you are adding the +host groups. Furthermore, you must ensure that no other team project +collection in any Team Foundation Server is already using the same SCVMM +library share. + + TfsLabConfig TPCLibraryShare + /collection:collectionUrl + [/add + /scvmmLibraryShare:vmmLibrarySharePath + /name:libraryShareName + [/autoprovision:{True|False}]] + [/delete + /name:libraryShareName + [/noprompt]] + [/edit + /name:libraryShareName + [/autoprovision:{True|False}] + [/noprompt]] + [/list] + [/listscvmmlibraryshares] + + +### Parameters + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. Specifies the URL of the team project collection on the application-tier of the Team Foundation Server. | +| **add** | Adds the specified library share to the team project collection. You must specify the **/collection**, **/scvmmlibraryshare**, and **/name** options with **/add**. | +| **scvmmLibraryShare**: *vmmLibrarySharePath* | Required with **/add**. Specifies the fully qualified domain name (FQDN) of the VMM share. The FDQN path can be retrieved by using the VMM Admin Console. | +| **name**: *libraryShareName* | Required with **/add**, **/edit**, and **/delete**. Specifies the name of the library share in the team project collection. | +| **autoProvision:True | False** | Optional with **/add** or **/edit**. Specifies whether the library share is automatically assigned to each team project in the collection. By default, **/autoProvision** is set to True, and library share is automatically assigned to every team project in the collection. The **/autoProvision** option only affects existing team projects. | +| **Delete** | Removes the specified library share from the team project collection. You must specify the **/collection** and **/name** options. | +| **noPrompt** | Optional with **/add**, **/edit**, or **/delete**. Suppresses display progress and result data from the command window. | +| **edit** | Changes Lab Management settings of the library share. You must specify the **/collection** and **/name** options. | +| **list** | Lists all library shares that are assigned to the specified team project collection. | +| **listscvmmlibraryshares** | Lists all library shares that are available in VMM. | + + +### Example + +In this example, a library share is added to a team project collection. + + + TFSLabConfig TPCLibraryShare + /collection:http://abc:8080/TFS/Collection0 + /add + /scvmmLibraryShare:"LibraryShares\LibraryShare1" + /name:LibraryShare1 diff --git a/docs/tfs-server/command-line/_shared/tphostgroup.md b/docs/tfs-server/command-line/_shared/tphostgroup.md new file mode 100644 index 00000000000..ee48578b3c6 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/tphostgroup.md @@ -0,0 +1,57 @@ + +> **Note:** +> These commands only work on SCVMM 2012 server, and are not supported on +> SCVMM 2008 R2 server. + +Use the **TPHostGroup** command to assign or unassign a host group from +a team project collection to individual team projects in the collection. +Host groups specify one or more physical machines that are the +deployment targets for virtual environments in Visual Studio Lab +Management.. + +To run these commands, you must be a member of Team Project Collection +Administrators group in Team Foundation Server for the collection you +specify. In addition, you must be a member of Administrator or Delegated +Administrator role in the SCVMM Server from which you are adding the +host groups. + + TfsLabConfig TPHostGroup + /collection:collectionUrl + /teamProject:* | teamProjectName + [/add + /teamProjectCollectionHostGroup:* | teamProjecctCollectionHostGroupFQDN + /name:teamProjectHostGroupName + [/description:description] + [/NoPrompt]] + [/delete + /name:* | teamProjectHostGroupName + [/noprompt]] + [/list] + + +### Parameters + + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. Specifies the URL of the team project collection on the application-tier of the Team Foundation Server. | +| **teamProject**: * | *teamProjectName* | The name of the team project to which to add or delete host groups. Use quotation marks if there are spaces in the name. Use an asterisk (* ) to assign the specified host group to all team projects in the collection. | +| **add** | Adds the specified host group to the team projects. | +| **teamProjectCollectionHostGroup**: *teamProjectCollectionHostGroup* | The name of the host group in the team project collection. Use quotation marks if there are spaces in the name. Use an asterisk (*) to assign all host groups in the collection to the specified team project. | +| **name**: *hostGroupName* | Tthe name of the host group in the team project collection. | +| **Delete** | Removes the host group from the team project. | +| **noPrompt** | Suppresses display progress and result data from the command window. | +| **list** | Lists all host groups that are assigned to the specified team project. | + + +### Example + +In this example, all the host groups in the team project collection are +assigned to all the team projects in the collection: + + + TFSLabConfig TPHostGroup /add + /collection:http://abc:8080/TFS/Collection0 + /teamProject:* + /teamProjectCollectionHostGroup:NORTHAMERICA\hostgroup1 + /name:HostGroup1 diff --git a/docs/tfs-server/command-line/_shared/tplibraryshare.md b/docs/tfs-server/command-line/_shared/tplibraryshare.md new file mode 100644 index 00000000000..4e2d02a84d6 --- /dev/null +++ b/docs/tfs-server/command-line/_shared/tplibraryshare.md @@ -0,0 +1,45 @@ + +> **Note:** +> These commands only work on SCVMM 2012 server, and are not supported on +> SCVMM 2008 R2 server. + +Use the **TPLibraryShare** command to assign or unassign a library share +from a team project collection to an individual team project in the +collection. A library share provides access to file-based resources for +virtual environments such as ISO images and virtual hard disks. Library +shares are created in System Center Virtual Machine Manager (SCVMM) and +assigned to project collection by Visual Studio Lab Management. + +To run these commands, you must be a member of Team Project Collection +Administrators group in Team Foundation Server for the collection you +specify. In addition, you must be a member of Administrator or Delegated +Administrator role in the SCVMM Server from which you are adding the +host groups. + + + TfsLabConfig TPLibraryShare + /collection:collectionUrl + /teamProject:* | teamProjectName + [/add + /teamProjectCollectionLibraryShare:* | teamProjectCollectionLibraryShare + /name:teamProjectLibraryShareName + [/noprompt]] + [/delete + /name:* | teamProjectLibraryShareName + [/noprompt]] + [/list] + +### Parameters + + + +| Option | Description | +| --- | --- | +| **Collection**:*collectionUrl* | Required. Specifies the URL of the team project collection on the application-tier of the Team Foundation Server. | +| **add** | Assigns the specified library share to the team project. | +| **teamProjectCollectionLibraryShare**: *teamProjectCollectionLibraryShare* | The name of the team project collection library share. | +| **name**: *libraryShareName* | Tthe name of the library share. | +| **Delete** | Removes the specified library share from the team project collection. | +| **noPrompt** | Suppresses display progress and result data from the command window. | +| **list** | Lists all library shares that are assigned to the specified team project collection. | + diff --git a/docs/tfs-server/command-line/_shared/unattend.md b/docs/tfs-server/command-line/_shared/unattend.md new file mode 100644 index 00000000000..8041365d9ce --- /dev/null +++ b/docs/tfs-server/command-line/_shared/unattend.md @@ -0,0 +1,194 @@ +>**Command availability:** TFS 2015 and TFS 2013 + +The **Unattend** command is designed for users who are familiar with Team Foundation Server (TFS) and the configuration process, and who need to install TFS on different machines. + +For example, if you use Team Foundation Build, you can use the **Unattend** command to install multiple build servers using the same configuration file. + +Use the *Unattend* /create option to create an unattend file. +This file defines all configuration parameters for a TFS installation. +Next, use the *Unattend /configure* option to actually perform the configuration. + +This process allows you to configure TFS from start to finish without having to provide input during the installation process. +In the case of multiple installations, this also helps ensure that the exact same configuration parameters are used across multiple servers. + + TFSConfig unattend /create|unattend /type:InstallType /unattendfile:ConfigurationFileName [/inputs:Key1=Value1; Key2=Value2;...] [/verify] [/continue] + +<table> + <thead> + <tr> + <th>Option</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td><strong>/create</strong></td> + <td>Creates the unattend file with the name and parameters you specify.</td> + </tr> + <tr> + <td><strong>/configure</strong></td> + <td> + Configures TFS using the unattend file and parameters you specify. + You must use /type or /unattendfile with this option. + </td> + </tr> + <tr> + <td><strong>/type</strong>:InstallTyoe</td> + <td> + <p>Specifies the type of configuration to use.</p> + <ul> + <li><p>Basic: Configures TFS in the basic configuration, including SQL Server Express.</p></li> + <li><p>Standard: Configures TFS in the standard single-server configuration.</p></li> + <li><p>ATOnly: Configures an additional application-tier for an existing TFS deployment.</p></li> + <li><p>Build: Configures the Team Foundation Build Service.</p></li> + <li><p>Proxy: Configures Team Foundation Server Proxy.</p></li> + <li><p>SPInstall: Installs and configures SharePoint Foundation 2013 for use with a TFS deployment.</p></li> + <li> + <p>Upgrade: Upgrades a previous version of Team Foundation Server to the latest version of the software.</p> + <p>You must have downloaded and installed that version locally before running this command with /configure.</p> + </li> + <li><p>SPExtensions: Configures the SharePoint Extensions for Team Foundation Server.</p></li> + </ul> + <p>When you use /configure, either /type or /unattendfile are required, but you cannot use both.</p> + </td> + </tr> + <tr> + <td><strong>/unattendfile</strong>:ConfigurationFileName</td> + <td>Specifies the unattend file to create or use, depending on whether the initial parameter is /create or /configure. When you use /configure, either /unattendfile or /type is required.</td> + </tr> + <tr> + <td><strong>/inputs</strong>:Key1=Value1; Key2=Value2;...</td> + <td> + Optional. If you use /create, specifies settings and values to use when creating the unattend file. + If you use /configurespecifies additional settings and values to use in conjunction with the unattend file.<br/><br/> + As an alternative to using /inputs, you can manually edit the unattend file in any plain-text editor. + This is necessary for certain input types, such as <span sdata="langKeyword" value="ServiceAccountPassword"> ServiceAccountPassword </span>, + as the password cannot be set using the <span sdata="langKeyword" value="/inputs"> /inputs </span> parameter. + </td> + </tr> + <tr> + <td><strong>/verify</strong></td> + <td> + Optional. Specifies a configuration run that only completes verification checks based on the unattend file, inputs, and configuration type. + This is an alternative to performing a complete configuration. + </td> + </tr> + <tr> + <td><strong>/continue</strong></td> + <td>Optional. Specifies that /create or /configure should continue regardless of warnings from verification checks.</td> + </tr> + <tr> + <td><strong>/?</strong></td> + <td>Optional. Provides command-line help for the unattend command.</td> + </tr> + </tbody> +</table> + +### Required permissions + +- You must be a member of the Administrators group on the computer where you are installing the software. + +- Depending on the type of installation, you might also require additional administrator permissions. +For example, if you are using the **Unattend** command to install Team Foundation Server, +you must be a member of the sysadmin group on the instance of SQL Server that will support TFS. +For more information, see the Q & A section of [Set administrator permissions for Team Foundation Server](https://msdn.microsoft.com/library/ed578715-f4d2-4042-b797-5f97abde9973). + +### Remarks + +Before you can use the **Unattend** command to configure TFS, +you must [create the service accounts](../../../accounts/requirements.md#accounts) that you will use as part of your deployment. +You must also install any prerequisite software for your chosen installation type. This includes TFS itself. +You must install TFS but you don't have to configure it because the **Unattend** command will do that for you. + +The Unattend command configures TFS components. It does not perform the initial installation of the software. +It configures the software according to your specifications after the bits are present on the computer. + +### Examples + +The following example shows how to create an unattend file for a basic installation of Team Foundation Server. + + TFSConfig Unattend /create /type:basic /unattendfile:configTFSBasic.ini + +In this example, the unattend file is created in the same directory as the command. A log file is created as part of the command, and the location of the file is returned in the command as part of executing the command. + +The following example shows how to create an unattend file for the configuration of Team Foundation Build on a server using "FabrikamFiber\\BuildSVC" as the build service account, and then configure Team Foundation Build using that unattend file. + +>**Important:** +>In this example, after creating the unattend file, the administrator manually edits the file to specify the password for the build service account. Adding the password as an input using "ServiceAccountPassword=Password" doesn't add the password information to the file. + + TFSConfig Unattend /create /type:build /unattendfile:configTFSBuild.ini + /inputs:IsServiceAccountBuiltIn=false;ServiceAccountName=FabrikamFiber\\BuildSVCTFSConfig + Unattend /configure /unattendfile:configTFSBuild.ini + +The first command returns the following: + + Microsoft (R) TfsConfig - Team Foundation Server Configuration Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + Command: unattend + Logging sent to file C:\ProgramData\Microsoft\Team Foundation\Server Configuration\Logs\TFS_Build Configuration_0512_203133.log + +The second command returns the following information, including the name of the server where Team Foundation Build was configured (FabrikamFiberTFS) and the team project collection associated with the controller (DefaultCollection): + + Microsoft (R) TfsConfig - Team Foundation Server Configuration Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + Command: unattend + + --------------------------------------------- + Inputs: + --------------------------------------------- + + Feedback + Send Feedback: True + + Build Resources + Configuration Type: create + Agent Count: 1 + New Controller Name: FabrikamFiberTFS - Controller + Clean Up Resources: False + + Team Project Collection + Collection URL: http://FabrikamFiberTFS:8080/tfs/defaultcollection + + Windows Service + Service Account: FabrikamFiber\BuildSVC + Service Password: ******** + + Advanced Settings * + Port: 9191 + + + --------------------------------------------- + Running Readiness Checks + --------------------------------------------- + + [1/2] System Verifications + [2/2] Build Service Verifications + + --------------------------------------------- + Configuring + --------------------------------------------- + + root + [1/4] Install Team Foundation Build Service + Installing Windows services ... + Adding service account to groups ... + Setting ACL on a windows service + [2/4] Enable Event Logging + Adding event log sources ... + Token replace a config file + RegisterBuildEtwProvider + Configuring ETW event sources ... + [3/4] Register with Team Foundation Server + Registering the build service + [4/4] Start Team Foundation Build Service + StartBuildHost + Starting Windows services ... + Marking feature configured status + [Info] [Register with Team Foundation Server] Firewall exception added for port + 9191 + + + TeamBuild completed successfully. + Logging sent to file C:\ProgramData\Microsoft\Team Foundation\Server Configuration\Logs\TFS_Build Configuration_0512_203322.log diff --git a/docs/tfs-server/command-line/open-admin-console.md b/docs/tfs-server/command-line/open-admin-console.md new file mode 100644 index 00000000000..b445b8ea158 --- /dev/null +++ b/docs/tfs-server/command-line/open-admin-console.md @@ -0,0 +1,45 @@ +--- +title: Open Team Foundation Server administration console +description: Open Team Foundation Server administration console +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 8278b2af-1733-4b6a-a548-ad2cae4b0cab +ms.manager: douge +ms.author: douge +ms.date: 09/26/2016 +--- + +# Open Team Foundation Server administration console + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can configure and manage various aspects of your deployment of Team Foundation by using the administration console for Team Foundation. For example, you can add a server for hosting team project portals, create and modify team project collections, and change the service account for Visual Studio Team Foundation Server. This administration console is installed when you install one or more of the following components on a server: + +* an application-tier for Team Foundation Server +* the extensions for SharePoint Products +* Team Foundation Build +* Visual Studio Lab Management + +Required Permissions: you must be a member of the local Administrators group on the server where you want to open the console, and either a member of the **Team Foundation Administrators** group or your **Edit Server-Level Information** permission must be set to **Allow**. + +To open the administration console from the Start menu on a server that is running one or more components of Team Foundation, type and choose **Team Foundation Server Administration Console**. On older versions of Windows, you may need to choose **All Programs**, then choose **Microsoft Team Foundation Server**, and then choose **Team Foundation Server Administration Console**. + +> [!NOTE] +> If **Team Foundation Server Administration Console** does not appear as a menu option, you might not have permission to open it. You can try to open it at a command prompt, but you might not be able to access some or all of the administration console's functionality. + +The administration console opens. You might have to wait briefly for all the information to populate throughout the nodes of the console. + + +To open the administration console at a command prompt: + +1. On a server that is running one or more components of Team Foundation, open a Command Prompt window and change directories to the tools directory for Team Foundation Server. + +By default, the tools directory is located in `Drive:\Program Files\TFS <version>\Tools`. + +2. Type TFSMgmt.exe and press ENTER. + +The administration console opens. You might have to wait briefly for all the information to populate throughout the nodes of the administration console. + +> [!NOTE] +> You can open the administration console at a command prompt even if you do not have all the required permissions to view or modify some or all of the information that the console shows. + diff --git a/docs/tfs-server/command-line/tfsconfig-cmd.md b/docs/tfs-server/command-line/tfsconfig-cmd.md new file mode 100644 index 00000000000..830a2bcce8a --- /dev/null +++ b/docs/tfs-server/command-line/tfsconfig-cmd.md @@ -0,0 +1,164 @@ +--- +title: Manage TFS server configuration with TFSConfig +description: Use TFSConfig to manage the configuration of your TFS server from the command-line. +ms.assetid: 94424190-3b6b-4f33-a6b6-5807f4225b62 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Manage TFS server configuration with TFSConfig + +**TFS 2017** | **TFS 2015** | **TFS 2013** | **TFS 2012** | **TFS 2010** + +> For versions earlier than TFS 2010, a few of these commands are available in the TFSAdminUtils command-line tool. + +The **TFSConfig** command-line tool can be used to perform a variety of administrative actions for +your on-premises deployment of Team Foundation Server (TFS). + +**TFSConfig** can be run from any machine on which TFS has been installed. It is installed in the +Tools directory - by default, this will be +- TFS 2017: `%programfiles%\TFS 15.0\Tools` +- TFS 2015: `%programfiles%\TFS 14.0\Tools` +- TFS 2013: `%programfiles%\TFS 12.0\Tools` +- TFS 2012: `%programfiles%\TFS 11.0\Tools` +- TFS 2010: `%programfiles%\TFS 2010\Tools` + +For many commands to operate correctly, **TFSConfig** will need to be able to connect to the various servers +and services which are part of your TFS deployment, and the user running **TFSConfig** will need to have administrative +permissions for these same servers and services. Requirements for specific commands will be called out below. + +Many **TFSConfig** command must be run from an elevated Command Prompt, even if the running user has administrative +credentials. To open an elevated Command Prompt, click Start, right-click Command Prompt, and then click Run as +Administrator. For more information, see: [User Account Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +You can also perform administrative actions interactively using the administration console for TFS. +See [Configure and manage TFS resources](https://msdn.microsoft.com/library/d553c7b0-e794-41dc-a7ef-91d7a5e1e46b). + + +### Listing commands and getting help +To display a full list of **TFSConfig** commands, use the **help** command: + + TFSConfig help + +To get help for an individual command, use the **help** command and specify the name of the command with which you want help. For example, to get help for the **accounts** command: + + TFSConfig help accounts + +## Accounts +[!INCLUDE [ACCOUNTS](_shared/accounts.md)] +<hr/> + +## AddProjectReports +[!INCLUDE [ADDPROJECTREPORTS](_shared/addProjectReports.md)] +<hr/> + +## Authentication +[!INCLUDE [AUTHENTICATION](_shared/authentication.md)] +<hr/> + +## Certificates +[!INCLUDE [CERTIFICATES](_shared/certificates.md)] +<hr/> + +## ChangeServerID +[!INCLUDE [CHANGESERVERID](_shared/changeserverid.md)] +<hr/> + +## CodeIndex +[!INCLUDE [CODEINDEX](_shared/codeindex.md)] +<hr/> + +## Collection +[!INCLUDE [COLLECTION](_shared/collection.md)] +<hr/> + +## ColumnStoreIndex +[!INCLUDE [COLUMNSTOREINDEX](_shared/columnstoreindex.md)] +<hr/> + +<a name="configure-email"></a> +## ConfigureMail +[!INCLUDE [CONFIGUREMAIL](_shared/configuremail.md)] +<hr/> + +## DBCompression +[!INCLUDE [DBCOMPRESSION](_shared/dbcompression.md)] +<hr/> + +## DeleteTestResults +[!INCLUDE [DELETETESTRESULTS](_shared/deletetestresults.md)] +<hr/> + +## Identities +[!INCLUDE [IDENTITIES](_shared/identities.md)] +<hr/> + +## Jobs +[!INCLUDE [JOBS](_shared/jobs.md)] +<hr/> + +## Lab /delete +[!INCLUDE [LAB](_shared/lab-delete.md)] +<hr/> + +## Lab /dns +[!INCLUDE [LAB](_shared/lab-dns.md)] +<hr/> + +## Lab /hostgroup +[!INCLUDE [LAB](_shared/lab-hostgroup.md)] +<hr/> + +## Lab /libraryshare +[!INCLUDE [LAB](_shared/lab-libraryshare.md)] +<hr/> + +## Lab /settings +[!INCLUDE [LAB](_shared/lab-settings.md)] +<hr/> + +## OfflineDetach +[!INCLUDE [OFFLINEDETACH](_shared/offlinedetach.md)] +<hr/> + +## PrepareClone +[!INCLUDE [PREPARECLONE](_shared/prepareclone.md)] +<hr/> + +## Proxy +[!INCLUDE [PROXY](_shared/proxy.md)] +<hr/> + +## RebuildWarehouse +[!INCLUDE [REBUILDWAREHOUSE](_shared/rebuildwarehouse.md)] +<hr/> + +## RegisterDB +[!INCLUDE [REGISTERDB](_shared/registerdb.md)] +<hr/> + +## RemapDBs +[!INCLUDE [REMAPDBS](_shared/remapdbs.md)] +<hr/> + +## RepairJobQueue +[!INCLUDE [REPAIRJOBQUEUE](_shared/repairjobqueue.md)] +<hr/> + +## Settings +[!INCLUDE [SETTINGS](_shared/settings.md)] +<hr/> + +## Setup +[!INCLUDE [SETUP](_shared/setup.md)] +<hr/> + +## Unattend +[!INCLUDE [UNATTEND](_shared/unattend.md)] +<hr/> + +## Deprecated commands +[!INCLUDE [DEPRECATED](_shared/deprecated.md)] diff --git a/docs/tfs-server/command-line/tfsdeleteproject-cmd.md b/docs/tfs-server/command-line/tfsdeleteproject-cmd.md new file mode 100644 index 00000000000..235a0b2f4cb --- /dev/null +++ b/docs/tfs-server/command-line/tfsdeleteproject-cmd.md @@ -0,0 +1,292 @@ +--- +title: Delete a team project using TFSDeleteProject +description: Delete a team project in TFS from the command-line using TFSDeleteProject +ms.assetid: dc7efa4d-9c70-4b61-a910-8f1e66678866 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Delete a team project with TFSDeleteProject + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can remove a team project from Team Foundation Server(TFS) when the project is no longer required by using TFSDeleteProject. +In addition, if there are components that remain undeleted after an unsuccessful team project creation, you can use TFSDeleteProject to remove them. + +To delete a team project from VSTS or from TFS using the admin console, see [Delete a team project](../../accounts/delete-team-project.md). + +> [!WARNING] +> TFSDeleteProject permanently destroys the team project, after which it cannot be recovered. You should backup all important project data before using TFSDeleteProject. + +To access the TFSDeleteProject command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE + +On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + +Required permissions + +To use the TFSDeleteProject command, you must be a member of the **Team Foundation Administrators** security group or the **Project Administrators** security group. +For more information, see Set administrator permissions for Team Foundation Server. + + TFSDeleteproject [/q] [/force] [/excludewss] /collection:URL TeamProjectName + +<table Responsive="true"> +<tr> + <th> + <p> + Option + </p> + </th> + <th> + <p> + Description + </p> + </th> +</tr> +<tr> + <td> + <p> + <strong>/q</strong> + </p> + </td> + <td> + <p>Optional. Use the quiet mode. Do not prompt the user for confirmation.</p> + </td> +</tr> +<tr> + <td> + <p> + <strong>/force</strong> + </p> + </td> + <td> + <p>Optional. Specifies that the deletion process should continue even if some components cannot be deleted.</p> + </td> +</tr> +<tr> + <td> + <p> + <strong>/excludewss</strong> + </p> + </td> + <td> + <p>Optional. Specifies to not delete the SharePoint site that is associated with the team project. Specify this option to maintain the existing site so that other team projects can continue using it.</p> + </td> +</tr> +<tr> + <td> + <p> + <strong>/collection</strong>:<span class="parameter">URL</span></p> + </td> + <td> + <p>Required. Specifies the URI of the team project collection. You must use the following format for the URI: <strong>http</strong>://<span class="parameter">ServerName:Port/VirtualDirectoryName/CollectionName</span></p> + <p>If you do not specify a virtual directory, you must use the following format for the URI:</p> + <p> + <strong>http</strong>://<span class="parameter">ServerName:Port/CollectionName</span>. </p> + </td> +</tr> +<tr> + <td> + <p> + <span class="parameter">TeamProjectName</span> + </p> + </td> + <td> + <p>Required. The name of the project. If the name includes spaces, enclose it in quotations marks.</p> + </td> +</tr> +</table> + + +## Remarks + +When you create a team project, Team Foundation Server creates data objects on the server that hosts Team Foundation Server, +and may create data objects on the server that hosts SharePoint Products, and the server that hosts SQL Server Reporting Services. +When you remove a team project, the reports are automatically removed from SQL Server Reporting Services. + +When you remove a team project, you can choose whether or not to remove the objects that were created to support the SharePoint site. +However, an error can prevent Team Foundation Server from creating or deleting all the objects. To troubleshoot these problems, +the following sections provide background information, links to other resources, and specific steps that help you determine the cause of the problem, +fix the problem, and when necessary delete data objects that remain after running TFSDeleteProject. + +## TFSDeleteProject Process + +When you use the TFSDeleteProject command-line tool, it first deletes project data and then project Web sites. + +### Phase 1: TFSDeleteProject Deletes Project Data + +In the first phase, TFSDeleteProject automatically performs the following steps to remove team project data: + +0. TFSDeleteProject creates an inventory of all the components that are candidates for deletion. +This includes components that integrate with Test Manager, Team Foundation Build, and Team Foundation version control. + +0. TFSDeleteProject deletes the component that displays the project node in Team Explorer. + +0. TFSDeleteProject flags the version control information for deletion, but does not immediately delete this information. +The information includes all version control branches in the specified project, but no other branches outside of the project. + + - If a parent branch and a child branch are both in the project, TFSDeleteProject flags both for deletion. + - If parent and child branches are in different projects, TFSDeleteProject flags only the specified branch. + - If another project is a branch from the specified project, TFSDeleteProject flags only the specified project. + When the specified project is deleted, the branch project becomes an orphan. + +0. TFSDeleteProject immediately deletes build data, including information and core data, build definitions, +build agents, and test results associated with the team project. The tool does not delete build drop locations. +You do not need to delete the build drop location of an old team project before creating a team project that uses the same build drop location. + + If the specified project contains a large amount of build data, the deletion might not finish within the timeout period. + To work around this problem, see Increase the Time-Out Period, and then run TFSDeleteProject again. + +0. TFSDeleteProject immediately deletes work items and work item fields that belong to the specified project, and it deletes all non-shared metadata. + + If the specified project contains a large amount of work item data, the deletion might not finish within the timeout period. + To solve this problem, see Increase the Time-Out Period, and then run TFSDeleteProject again. + +### Phase 2: TFSDeleteProject Deletes Project Web Sites + +In the second phase, TFSDeleteProject deletes the following data: + +> [!IMPORTANT] +> These steps can take a long time to complete, and during that time they can degrade server performance. + + +- TFSDeleteProject Uses the Reporting Services APIs to delete reports on the server that hosts Reporting Services. +- TFSDeleteProject Deletes the project portal Web site from the server that hosts SharePoint Products. +This step occurs only if the project owns the site and site deletion is not excluded in the command line. +(Consider that multiple projects may point to a single site, but only one of them can be the owner where reports/dashboards are by default using this project). + + > [!NOTE] + > Prior to deleting a team project, you can confirm that Reporting Services and SharePoint Products + > are using the correct project URLs by verifying the portal settings. + > For more information, see [How to: Add a Team Project Portal](https://msdn.microsoft.com/library/dd386320.aspx). + +If TFSDeleteProject successfully deletes all of the above data elements, it returns the message Done. +To verify this result, see Verify Team Project Components Are Deleted. + +If one or more components are not removed, you can rerun TFSProjectDelete by using the /force option +to continue the deletion process even if it is unable to delete all data elements. +With this option TFSDeleteProject, skips a component that it cannot delete, returns an error message, +deletes the next component, and leaves the team project metadata and security settings intact. + +## Data That May Remain Undeleted + +The following data might remain in the deployment after TFSDeleteProject successfully completes: + +- **Team project data in the cube**. +Team project data remains in the cube until the cube is rebuilt, at which time the warehouse controller service +removes all of the historic build data that has been deleted from the Team Foundation databases. +- **Build drop files and folders**. +Build binaries, build log files, and log files containing test results are published during the build process. +The locations for these files are not deleted. If you want to remove these files, you must remove them manually. +- **Work item tracking metadata that is shared**. +TFSDeleteProject does not delete any metadata for work item tracking that is shared between team projects. +- **Version control shelvesets containing shared code**. +Version control shelvesets are not deleted if there is code in the shelveset from multiple team projects. + + +## Verify Project Deletion + +You can verify the success of a project deletion by confirming that the team project node no longer appears +in Team Explorer and that its project portal Web site and reports folders no longer exist. + +0. Open Team Explorer and verify that the project does not appear as a project node. + +0. Open Internet Explorer and type the URL of the project portal Web site. Verify that the site no longer exists. + +0. In Internet Explorer, in the Address box, type the URL of the Reporting Services Web site using one of the following URL formats: + + - ```http://ReportingServices/Reports``` + - ```http://ReportingServices/Reports_TFSInstance``` + +0. In Report Manager, choose Show Details. + +0. Verify that the folder for the deleted team project no longer appears. +Choose the root folder TfsReports, and then choose the folder named for the team project collection. +There should no longer be a folder with the name of the deleted project. + +0. If either the reports or the Web site remain, see the next procedure. + +## Remove Remaining Components After Partial Project Deletion + +If the project portal Web site and reports folder remain after you delete a team project, remove the site and folder manually. + +0. Log on to the server that hosts Reporting Services for the team project that you deleted. + +0. Open Internet Explorer, and in the Address box type the URL of the Reporting Services Web site using one of the following URL formats: + + - ```http://localhost/Reports``` + - ```http://localhost/Reports_TFSInstance``` + +0. In Report Manager, choose Show Details. + +0. Choose the root folder TfsReports, and then choose the folder named for the team project collection. + +0. Select the check box for the team project that was deleted. + +0. Choose Delete. + +0. Choose OK to confirm that you want to delete the reports folder for the team project. + +0. To remove the project portal Web site of a deleted team project, see the following page on the Microsoft Web site: +[How to: Create, Edit, and Delete Windows SharePoint Services Sites](http://go.microsoft.com/fwlink/?LinkId=131660). + + +## Increase the Time-Out Period + +By default, each Web service call that the TFSDeleteProject command issues to delete a component must complete within 10 minutes. +If there are six calls, then the process could take up to an hour. +If you want to delete a team project that is associated with a large amount of data, you can temporarily increase this time-out period. + +> [!NOTE] +> When you increase the time-out period, the change affects all Web service calls. +> In general, you want to keep the time-out period to within 10 minutes to prevent +> Web service calls from degrading server performance and causing users to be locked out +> from using the user interface for long periods of time. +> Therefore, after the project is successfully deleted, you should change the time-out period back to 10 minutes. + +Required Permissions + +To complete these procedures, you must be a Windows Administrator on the application-tier server. + +> [!IMPORTANT] +> Improperly modifying your computer's registry can cause your computer to become unstable. +> If you are not familiar with the registry, you should not add or remove entries, or modify it in any way. + +0. Log on to the application-tier server. + +0. Choose Start, Run, type regedit, and then choose OK. + +0. In the browser pane, expand HKEY_ LOCAL_MACHINE: + + - If the server runs a 32-bit operating system, + expand: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\11.0\TeamFoundation\RequestSettings. + - If the server runs a 64-bit operating system, + expand: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432\Microsoft\VisualStudio\11.0\TeamFoundation\RequestSettings. + +0. If the TeamFoundation\RequestSettings key does not exist, follow these steps to create it: + + 0. Open the context menu for TeamFoundation, point to New, and choose Key. + 0. Name the key RequestSettings. + 0. Open the context menu for RequestSettings, point to New, and choose DWORD Value. + 0. Name the new value DefaultTimeout. + +0. Open the context menu for DefaultTimeout and choose Modify. + +0. In Value Data, type the time-out period in milliseconds, and then choose Decimal. + + For example, to increase the time-out period to 30 minutes, type 1800000. To change the time-out period back to 10 minutes, type 600000. + +0. Choose OK. + +0. On the File menu, choose Exit. + +## Example + +The following command removes all components associated with the team project StoreFront +on the Team Foundation Server AdventureWorks1 server in project collection Collection1 and from Team Explorer. + + TFSDeleteProject /force /collection:http://AdventureWorks1:8080/tfs/Collection1 StoreFront diff --git a/docs/tfs-server/command-line/tfslabconfig-cmd.md b/docs/tfs-server/command-line/tfslabconfig-cmd.md new file mode 100644 index 00000000000..3788e92a714 --- /dev/null +++ b/docs/tfs-server/command-line/tfslabconfig-cmd.md @@ -0,0 +1,75 @@ +--- +title: Configure Lab Management with TFSLabConfig for Team Foundation Server +description: Use TFSLabConfig to manage and configure the lab service provide by Visual Studio Lab Management. +ms.assetid: 329cd673-d30b-4697-b1a9-ff160a5bff56 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Configure Lab Management with TFSLabConfig + +**TFS 2017** | **TFS 2015** | **TFS 2013** | **TFS 2012** | **TFS 2010** + +Team Foundation Server includes a command-line tool to help you configure and manage the lab service provide by Visual Studio Lab Management. + +The **TFSLabConfig** command-line tool is located in Drive:\Program Files\TFS <version>\Tools on Team Foundation Server application tier -- by default, this will be: +- TFS 2015: `%programfiles%\TFS 14.0\Tools` +- TFS 2013: `%programfiles%\TFS 12.0\Tools` +- TFS 2012: `%programfiles%\TFS 11.0\Tools` +- TFS 2010: `%programfiles%\TFS 2010\Tools` + +It is also located in Drive:\Program Files\Microsoft Visual Studio <version>\Common7\IDE on the client machine where Microsoft Test Manager is installed. + +**Required Permissions:** + +To use TFSLabConfig, you must have the appropriate permissions for the operation that you want to perform. The required permissions are described for each command in the command reference topic. + + +## CreateTeamProjectHostGroup +[!INCLUDE [CreateTeamProjectHostGroup](_shared/CreateTeamProjectHostGroup.md)] +<hr/> + +## CreateTeamProjectLibraryShare +[!INCLUDE [CreateTeamProjectLibraryShare](_shared/CreateTeamProjectLibraryShare.md)] +<hr/> + +## DeleteTeamProjectHostGroup +[!INCLUDE [DeleteTeamProjectHostGroup](_shared/DeleteTeamProjectHostGroup.md)] + +## DeleteTeamProjectLibraryShare +[!INCLUDE [DeleteTeamProjectLibraryShare](_shared/DeleteTeamProjectLibraryShare.md)] + +## ListTeamProjectCollectionHostGroups +[!INCLUDE [ListTeamProjectCollectionHostGroups](_shared/ListTeamProjectCollectionHostGroups.md)] + +## ListTeamProjectCollectionLibraryShares +[!INCLUDE [ListTeamProjectCollectionHostGroups](_shared/listteamprojectcollectionlibraryshares.md)] + +## ListTeamProjectHostGroups +[!INCLUDE [ListTeamProjectHostGroups](_shared/listteamprojecthostgroups.md)] + +## ListTeamProjectLibraryShares +[!INCLUDE [ListTeamProjectLibraryShares](_shared/listteamprojectlibraryshares.md)] + +## Permissions +[!INCLUDE [Permissions](_shared/permissions.md)] +<hr/> + +## TCPHostGroup +[!INCLUDE [TCPHostGroup](_shared/tpchostgroup.md)] +<hr/> + +## TPCLibraryShare +[!INCLUDE [TPCLibraryShare](_shared/tpclibraryshare.md)] +<hr/> + +## TPHostGroup +[!INCLUDE [TPHostGroup](_shared/tphostgroup.md)] +<hr/> + +## TPLibraryShare +[!INCLUDE [TPLibraryShare](_shared/tplibraryshare.md)] +<hr/> diff --git a/docs/tfs-server/command-line/tfssecurity-cmd.md b/docs/tfs-server/command-line/tfssecurity-cmd.md new file mode 100644 index 00000000000..d887577b32d --- /dev/null +++ b/docs/tfs-server/command-line/tfssecurity-cmd.md @@ -0,0 +1,1315 @@ +--- +title: Change groups and permissions with TFSSecurity +description: Change groups and permissions from the command-line using TFSSecurity +ms.assetid: 58b780cb-9678-4d45-96dd-64447a6d5b17 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Change groups and permissions with TFSSecurity + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can use the **TFSSecurity** command-line tool to create, modify, and delete groups and users in Visual Studio Team Foundation Server (TFS), in addition to modifying permissions for groups and users. For information about how to perform these tasks in the user interface, see <span sdata="link"> Manage users or groups </span>. + +This server-level tool is located in Drive:\\%programfiles%\\TFS 12.0\\Tools on the TFS application-tier server. + +> Even if you are logged on with administrative credentials, +> you must open an elevated Command Prompt to perform this function. + +## Permissions + +<a id="aplus"></a> +### /a+: Add permissions +Use **/a+** to add permissions for a user or a group in a server-level, collection-level, or project-level group. To add users to groups from the user interface, see [Manage users or groups](https://msdn.microsoft.com/library/30493f4c-d3e6-42f0-bca2-2ad749246944). + +``` +tfssecurity /a+ Namespace Token Action Identity (ALLOW | DENY)[/collection:CollectionURL] [/server:ServerURL] +``` + +#### Required Permissions + +To use the **/a+** command, you must have the View collection-level information or the View instance-level information permission set to Allow, depending on whether you are using the **/collection** or **/server** parameter, respectively. If you are changing permissions for a team project, you must also have the Edit project-level information permission for the team project set to Allow. For more information, see [Permission reference for Team Foundation Server](../../security/permissions.md). + +#### Parameters + +| Argument | Description | +| --- | --- | +| Namespace | The namespace that contains the group to which you want to add permissions for a user or group. You can also use the **tfssecurity /a** command to view a list of namespaces at the server, collection, and project level. | +| Token | The name or GUID of the object on which you want to add permissions.<br>**Note:** Tokens vary depending on the namespace you specify. Some namespaces do not have tokens that apply for this command. | +| Action | The name of the permission for which you are granting or denying access. For a list of valid IDs, see <a href="https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6">Permission reference for Team Foundation Server</a>, or use the **tfssecurity /a** command to view a list of valid actions for a namespace that you specify. | +| Identity | The identity of the user or the group. For more information about identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).<br><ul><li>**ALLOW**<br>The group or user can perform the operation that the Action specifies.</li><li>**DENY**<br>The group or user cannot perform the operation that the Action specifies.</li></ul> | +| **/collection** :CollectionURL | Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName | +| **/server** :ServerURL | Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName | + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +Access control entries are security mechanisms that determine which operations a user, group, service, or computer is authorized to perform. + +#### Examples + +The following example displays what namespaces are available at the server level for the application-tier server that is named ADatumCorporation. + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + +``` +tfssecurity /a /server:ServerURL +``` + +Sample output: + +``` + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + The target Team Foundation Server is http://ADatumCorporation:8080/. + + The following security namespaces are available to have permissions set on them: + + Registry + Identity + Job + Server + CollectionManagement + Warehouse + Catalog + EventSubscription + Lab + + Done. +``` + +The following example displays what actions are available for the Server namespace at the collection level. + +``` +tfssecurity /a Server /collection:CollectionURL +``` + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + The target Team Foundation Server is http://ADatumCorporation:8080/. + + The following actions are available in the security namespace Server: + GenericRead + GenericWrite + Impersonate + TriggerEvent + + Done. + +The following example grants the server-level "View instance-level information" permission to the ADatumCorporation deployment for the Datum1 domain user John Peoples (Datum1\\jpeoples). + + tfssecurity /a+ Server FrameworkGlobalSecurity GenericRead n:Datum1\jpeoples ALLOW /server:http://ADatumCorporation:8080 + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + The target Team Foundation Server is http://ADatumCorporation:8080/. + Resolving identity "n:Datum1\jpeoples"... + [U] Datum1\jpeoples (John Peoples) + Adding the access control entry... + Verifying... + + Effective ACL on object "FrameworkGlobalSecurity": + [+] GenericRead [INSTANCE]\Team Foundation Valid Users + [+] GenericRead [INSTANCE]\SharePoint Web Application Services + [+] Impersonate [INSTANCE]\SharePoint Web Application Services + [+] GenericRead [INSTANCE]\Team Foundation Service Accounts + [+] GenericWrite [INSTANCE]\Team Foundation Service Accounts + [+] Impersonate [INSTANCE]\Team Foundation Service Accounts + [+] TriggerEvent [INSTANCE]\Team Foundation Service Accounts + [+] GenericRead [INSTANCE]\Team Foundation Administrators + [+] GenericWrite [INSTANCE]\Team Foundation Administrators + [+] TriggerEvent [INSTANCE]\Team Foundation Administrators + [+] GenericRead DATUM1\jpeoples + + Done. + +The following example grants the collection-level "View collection-level information" permission to the Collection0 team project collection for Datum1 domain user John Peoples (Datum1\\jpeoples). + + tfssecurity /a+ Server FrameworkGlobalSecurity GenericRead n:Datum1\jpeoples ALLOW /collection:http://ADatumCorporation:8080/Collection0 + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + The target Team Foundation Server is http://ADatumCorporation:8080/COLLECTION0. + Resolving identity "n:Datum1\jpeoples"... + [U] DATUM1\jpeoples (John Peoples) + Adding the access control entry... + Verifying... + + Effective ACL on object "FrameworkGlobalSecurity": + [+] GenericRead [Collection0]\Project Collection ValidUsers + [+] GenericRead [Collection0]\Project Collection Service Accounts + [+] GenericWrite [Collection0]\Project Collection Service Accounts + [+] Impersonate [Collection0]\Project Collection Service Accounts + [+] TriggerEvent [Collection0]\Project Collection Service Accounts + [+] GenericRead [Collection0]\Project Collection Administrators + [+] GenericWrite [Collection0]\Project Collection Administrators + [+] TriggerEvent [Collection0]\Project Collection Administrators + [+] GenericRead [INSTANCE]\SharePoint Web Application Services + [+] Impersonate [INSTANCE]\SharePoint Web Application Services + [+] GenericRead [Collection0]\Project Collection Build Service Accounts + [+] GenericRead DATUM1\jpeoples + + Done. + +<a id="aminus"></a> +### /a-: Remove a user or a group from membership in a group +Use the **/a-** command to remove a user or a group from membership in a server-level, collection-level, or project-level group. To add users to groups from the user interface, see [Manage users or groups](https://msdn.microsoft.com/library/30493f4c-d3e6-42f0-bca2-2ad749246944). + + tfssecurity /a- Namespace Token Action Identity (ALLOW | DENY) [/collection:CollectionURL] [/server:ServerURI] + +#### Required Permissions + +To use the **/a-** command, you must have the View collection-level information or the View instance-level information permission set to Allow, depending on whether you are using the **/collection** or **/server** parameter, respectively. If you are changing permissions for a team project, you must also have the Edit project-level information permission for the team project set to Allow. + +#### Parameters + +| Argument | Description | +| --- | --- | +| Namespace | The namespace that contains the group to which you want to remove permissions for a user or group. You can also use the **tfssecurity /a** command to view a list of namespaces at the server, collection, and project level. | +| Token | The name or GUID of the object on which you want to set permissions.<br>**Note:** Tokens vary depending on the namespace you specify. Some namespaces do not have tokens that apply for this command. | +| Action | The name of the permission for which you are granting or denying access. For a list of valid IDs, see <a href="https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6">Permission reference for Team Foundation Server</a>, or use the **tfssecurity /a** command to view a list of valid actions for a namespace that you specify. | +| Identity | The identity of the user or the group. For more information about identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).<br><ul><li>**ALLOW**<br>The group or user can perform the operation that the Action specifies.</li><li>**DENY**<br>The group or user cannot perform the operation that the Action specifies.</li></ul> | +| **/collection** :CollectionURL | Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName | +| **/server** :ServerURL | Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName | + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +Access control entries are security mechanisms that determine which operations a user, group, service, or computer is authorized to perform on a computer or server. + +#### Examples + +The following example displays what namespaces are available at the server level for the application-tier server that is named ADatumCorporation. + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /a /server:ServerURL + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + The target Team Foundation Server is http://ADatumCorporation:8080/. + + The following security namespaces are available to have permissions set on them: + + Registry + Identity + Job + Server + CollectionManagement + Warehouse + Catalog + EventSubscription + Lab + + Done. + +The following example displays what actions are available for the Server namespace at the collection level. + + tfssecurity /a Server /collection:CollectionURL + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + The target Team Foundation Server is http://ADatumCorporation:8080/. + + The following actions are available in the security namespace Server: + GenericRead + GenericWrite + Impersonate + TriggerEvent + + Done. + +The following example removes the server-level "View instance-level information" permission to the ADatumCorporation deployment for the Datum1 domain user John Peoples (Datum1\\jpeoples). + + tfssecurity /a- Server FrameworkGlobalSecurity GenericRead n:Datum1\jpeoples ALLOW /server:http://ADatumCorporation:8080 + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + The target Team Foundation Server is http://ADatumCorporation:8080/. + Resolving identity "n:Datum1\jpeoples"... + [U] Datum1\jpeoples (John Peoples) + Removing the access control entry... + Verifying... + + Effective ACL on object "FrameworkGlobalSecurity": + [+] GenericRead [INSTANCE]\Team Foundation Valid Users + [+] GenericRead [INSTANCE]\SharePoint Web Application Services + [+] Impersonate [INSTANCE]\SharePoint Web Application Services + [+] GenericRead [INSTANCE]\Team Foundation Service Accounts + [+] GenericWrite [INSTANCE]\Team Foundation Service Accounts + [+] Impersonate [INSTANCE]\Team Foundation Service Accounts + [+] TriggerEvent [INSTANCE]\Team Foundation Service Accounts + [+] GenericRead [INSTANCE]\Team Foundation Administrators + [+] GenericWrite [INSTANCE]\Team Foundation Administrators + [+] TriggerEvent [INSTANCE]\Team Foundation Administrators + + Done. + +The following example removes the collection-level "View collection-level information" permission to the Collection0 team project collection for Datum1 domain user John Peoples (Datum1\\jpeoples). + + tfssecurity /a+ Server FrameworkGlobalSecurity GenericRead n:Datum1\jpeoples ALLOW /collection:http://ADatumCorporation:8080/Collection0 + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + The target Team Foundation Server is http://ADatumCorporation:8080/COLLECTION0. + Resolving identity "n:Datum1\jpeoples"... + [U] DATUM1\jpeoples (John Peoples) + Removing the access control entry... + Verifying... + + Effective ACL on object "FrameworkGlobalSecurity": + [+] GenericRead [Collection0]\Project Collection ValidUsers + [+] GenericRead [Collection0]\Project Collection Service Accounts + [+] GenericWrite [Collection0]\Project Collection Service Accounts + [+] Impersonate [Collection0]\Project Collection Service Accounts + [+] TriggerEvent [Collection0]\Project Collection Service Accounts + [+] GenericRead [Collection0]\Project Collection Administrators + [+] GenericWrite [Collection0]\Project Collection Administrators + [+] TriggerEvent [Collection0]\Project Collection Administrators + [+] GenericRead [INSTANCE]\SharePoint Web Application Services + [+] Impersonate [INSTANCE]\SharePoint Web Application Services + [+] GenericRead [Collection0]\Project Collection Build Service Accounts + + Done. + +<a id="acl"></a> +### /acl: Display the access control list + +Use **/acl** to display the access control list that applies to a particular object. + + tfssecurity /acl Namespace Token [/collection:CollectionURL] [/server:ServerURL] + +#### Required permissions + +To use the **/acl** command, you must have the **View collection-level information** +or the **View instance-level information** permission set to **Allow**, +depending on whether you are using the **/collection** or **/server** parameter, respectively. +For more information, see [Permission reference for Team Foundation Server](../../security/permissions.md). + +#### Parameters + +| Argument | Description | +| --- | --- | +| Namespace | The namespace that contains the group to which you want to view permissions for a user or group. | +| Token | The name or GUID of the object on which you want to view permissions.<br>**Note:** Tokens vary depending on the namespace you specify. Some namespaces do not have tokens that apply for this command. | +| **/collection** :CollectionURL | Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName | +| **/server** :ServerURL | Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName | + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +Access control entries are security mechanisms that determine which operations a user, group, service, or computer is authorized to perform on a computer or server. + +#### Examples + +The following example displays what users and groups have access to the FrameworkGlobalSecurity token in the Server namespace within the ADatumCorporation deployment. + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /acl Server FrameworkGlobalSecurity /server:ServerURL + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + The target Team Foundation Server is http://ADatumCorporation:8080/. + Retrieving the access control list for object "Server"... + + Effective ACL on object "FrameworkGlobalSecurity": + [+] GenericRead [INSTANCE]\Team Foundation Valid Users + [+] GenericRead [INSTANCE]\SharePoint Web Application Services + [+] Impersonate [INSTANCE]\SharePoint Web Application Services + [+] GenericRead [INSTANCE]\Team Foundation Service Accounts + [+] GenericWrite [INSTANCE]\Team Foundation Service Accounts + [+] Impersonate [INSTANCE]\Team Foundation Service Accounts + [+] TriggerEvent [INSTANCE]\Team Foundation Service Accounts + [+] GenericRead [INSTANCE]\Team Foundation Administrators + [+] GenericWrite [INSTANCE]\Team Foundation Administrators + [+] TriggerEvent [INSTANCE]\Team Foundation Administrators + [+] GenericRead DATUM1\jpeoples + + Done. + + +## Groups + +<a id="g"></a> +### /g: List the groups +Use **/g** to list the groups in a team project, in a team project collection, or across Team Foundation Server. + + tfssecurity /g [scope] [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/g** command, you must have the View collection-level information or the View instance-level information permission set to Allow, depending on whether you are using the **/collection** or **/server** parameter, respectively. To use the /g command within the scope of a single team project, you must have the View project-level information permissions set to Allow. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +#### Parameters + +|Argument|Description| +|---|---| +|scope|Optional. Specifies the URI of the team project for which you want to display groups. To obtain the URI for a team project, open Team Explorer, right-click the team project, click Properties, and copy the entire entry for URL.| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +The **/g** command of the **TFSSecurity** command-line utility displays information about every group within the selected scope. This scope can be the team project collection (**/server**) or the application-tier server (**/instance**). If used with the scope of a team project, it will display information only about the groups associated with that team project. + +#### Example + +The following example displays information for all the groups within a team project collection. + + tfssecurity /g /collection:CollectionURL + +<a id="gplus"></a> +### /g+: Add a user or another group to an existing group +Use **/g+** to add a user or another group to an existing group. + + tfssecurity /g+ groupIdentity memberIdentity [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/g+** command, you must have the View collection-level information and Edit collection-level information or the View instance-level information and Edit instance-level information permissions set to Allow, depending on whether you are using the /collection or /server parameter, respectively. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +#### Parameters + +|Argument|Description| +|---|---| +|groupIdentity|Specifies the group identity. For more information on valid identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|memberIdentity|Specifies the member identity. For more information on valid identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +You can also add users and groups to an existing group using Team Explorer. For more information, see [Add Users to a Collection-Level Group](https://msdn.microsoft.com/library/65e3df75-0700-47d2-9877-5a16e3065d22). + +#### Examples + +The following example adds the Datum1 domain user John Peoples (Datum1\\jpeoples) to the Team Foundation Administrators group. + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /g+ "Team Foundation Administrators" n:Datum1\jpeoples /server:http://ADatumCorporation:8080 + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + The target Team Foundation Server is http://ADatumCorporation:8080/. + Resolving identity "Team Foundation Administrators"... + a [A] [INSTANCE]\Team Foundation Administrators + Resolving identity "n:Datum1\jpeoples"... + [U] DATUM1\jpeoples (John Peoples) + Adding John Peoples to [INSTANCE]\Team Foundation Administrators... + Verifying... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Server scope + Display name: [INSTANCE]\Team Foundation Administrators + Description: Members of this group can perform all operations on the Team Foundation Application Instance. + + 4 member(s): + [U] Datum1\hholt (Holly Holt) + [U] Datum1\jpeoples (John Peoples) + [G] BUILTIN\Administrators (BUILTIN\Administrators) + s [A] [INSTANCE]\Team Foundation Service Accounts + + Member of 2 group(s): + a [A] [Collection0]\Project Collection Administrators + e [A] [INSTANCE]\Team Foundation Valid Users + + Done. + +<a id="gminus"></a> +### /g-: Remove a user or group + +Use **/g-** to remove a user or a user group from an existing group. + + tfssecurity /g- groupIdentity memberIdentity [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/g-** command, you must have the View collection-level information and Edit collection-level information or the View instance-level information and Edit instance-level information permissions set to Allow, depending on whether you are using the **/collection** or **/server** parameter, respectively. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +#### Parameters + +|Argument|Description| +|---|---| +|groupIdentity|Specifies the group identity. For more information about valid identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|memberIdentity|Specifies the member identity. For more information about valid identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +You can also add users and groups to an existing group using Team Explorer. For more information, see [Remove Users from a Team Project Group](https://msdn.microsoft.com/library/a4af4029-0202-4b56-8053-40b3a8c0f175), [Remove Users from a Default Group](https://msdn.microsoft.com/library/4e495381-f55a-480e-b7a0-da221ad0ae1a) or [Remove Users from a Collection-Level Group](https://msdn.microsoft.com/library/1c4b2566-3381-4d7a-ba50-e4633abf617d). + +#### Examples + +The following example removes the Datum1 domain user John Peoples (Datum1\\jpeoples) from the Team Foundation Administrators group. + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /g- "Team Foundation Administrators" n:Datum1\jpeoples /server:http://ADatumCorporation:8080 + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + The target Team Foundation Server is http://ADatumCorporation:8080/. + Resolving identity "Team Foundation Administrators"... + a [A] [INSTANCE]\Team Foundation Administrators + Resolving identity "n:Datum1\jpeoples"... + [U] DATUM1\jpeoples (John Peoples) + Removing John Peoples from [INSTANCE]\Team Foundation Administrators... + Verifying... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Server scope + Display name: [INSTANCE]\Team Foundation Administrators + Description: Members of this group can perform all operations on the Team Foundation Application Instance. + + 3 member(s): + [U] Datum1\hholt (Holly Holt) + [G] BUILTIN\Administrators (BUILTIN\Administrators) + s [A] [INSTANCE]\Team Foundation Service Accounts + + Member of 2 group(s): + a [A] [Collection0]\Project Collection Administrators + e [A] [INSTANCE]\Team Foundation Valid Users + + Done. + +<a id="gc"></a> +### /gc: Create a project-level group +Use **/gc** at a command prompt to create a project-level group. To create a project-level group from the user interface, see <span sdata="link"> Manage users or groups </span>. + + tfssecurity /gc Scope GroupName [GroupDescription] [/collection:CollectionURL] + +#### Required Permissions + +To use the **/gc** command, you must have the Edit Project-Level Information permission for that team project set to Allow. For more information, see <span sdata="link"> Permission reference for Team Foundation Server </span>. + +#### Parameters + +|Argument|Description| +|---|---| +|Scope|The URI of the team project to which you want to add a project-level group. To obtain the URI for a team project, connect to it, and open Team Explorer, hover over the name of the project in Home, and read the address. Alternatively, connect to the project in Web Access and copy the URL.| +|GroupName|The name of the new group.| +|GroupDescription|A description of the project group. Optional.| +|**/collection** :CollectionURL|The URL of the team project collection. Required. The group will be created within the team project collection. The format for the URL is **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +A project-level group is a security group for your team project. You can use project groups to grant read, write, and administrative permissions that meet the security requirements of your organization. + +#### Example + +The following example creates a group that is specific to the project that the URI "vstfs://Classification/TeamProject/00000000-0000-0000-0000-000000000000" specifies. The group is named "Test Group" and has the description "This group is for testing." + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + +You must replace the placeholder GUID with the URI of the team project for which you want to create this group. To obtain the URI for a team project, open Team Explorer, right-click the team project, click Properties, and copy the entire value of the URL property. + +After you run the command, you can verify the group in Team Explorer. Right-click the team project that you used in the command, click Team Project Settings, and then click Group Memberships. In the Project Groups on TeamProjectName dialog box, the Groups list includes Test Group . + +> [!NOTE] +> You can use the **/gc** command to create groups but not to add any users to the groups or assign any permissions. To change the membership of the group, see [/g+: Add a user or another group to an existing group](#gplus) and [/g-: Remove a user or group](#gminus). To change the permissions for the group, see [/a+: Add permissions](#aplus) and [/a-: Remove a user or a group from membership in a group](#aminus). + + tfssecurity /gc "vstfs:///Classification/TeamProject/00000000-0000-0000-0000-000000000000" "Test Group" + "This group is for team members who test our code" /collection:CollectionURL + +<a id="gcg"></a> +### /gcg: Create a server or collection-level group +Use the **/gcg** command to create a server-level or collection-level group. To create a server-level or collection-level group from the user interface, see [Manage users or groups](https://msdn.microsoft.com/library/30493f4c-d3e6-42f0-bca2-2ad749246944). + + tfssecurity /gcg GroupName [GroupDescription] [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/gcg** command, you must have the Edit project-level information permission for that team project set to Allow. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +#### Parameters + +|Argument|Description| +|---|---| +|GroupName|The group name.| +|GroupDescription|A description of the group. Optional.| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +Server-level groups are created directly on the application tier and apply to all team project collections. Collection-level are created at the team project collection level. They apply to that collection and have implications for all team projects within the collection. In contrast, team project groups apply to a specific project within a collection but not any other projects in that collection. You can assign permissions to server-level groups so that members of those groups can perform tasks in Team Foundation Server (TFS) itself, such as creating team project collections. You can assign permissions to collection-level groups so that members of those groups can perform tasks across a team project collection, such as administering users. + +> [!NOTE] +> You can use the <b>/gcg</b> command to create groups, but you cannot use it to add any users to the groups or assign any permissions. For information about how to change the membership of a group, see [/g+: Add a user or another group to an existing group](#gplus) and [/g-: Remove a user or group](#gminus). For information about how to change the permissions for the group, see [/a+: Add permissions](#aplus) and [/a-: Remove a user or a group from membership in a group](#aminus). + +#### Example + +The following example creates a collection-level group that is named "Datum Testers" with the description "A. Datum Corporation Testers." + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /gcg "Datum Testers" "A. Datum Corporation Testers" /collection:CollectionURL + +The following example creates a server-level group that is named "Datum Auditors" with the description "A. Datum Corporation Auditors." + + tfssecurity /gcg "Datum Auditors" "A. Datum Corporation Auditors" /server:ServerURL + +<a id="gd"></a> +### /gd: Delete a server or collection-level group +Use **/gd** to delete a server-level or collection-level group. + + tfssecurity /gd groupIdentity [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/gd** command, you must have the View collection-level information and Edit collection-level information or the View instance-level information and Edit instance-level information permissions set to Allow, depending on whether you are using the **/collection** or **/server** parameter, respectively. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +#### Parameters + +|Argument|Description| +|---|---| +|groupIdentity|Specifies the group identity. | +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +You can also remove groups on Team Explorer. For more information, see [Remove a Collection-Level Group](https://msdn.microsoft.com/library/68582caf-aa57-47a0-924a-6de7f541c246) and [Remove a Team Project Group](https://msdn.microsoft.com/library/dfb686ca-5a8b-4da9-bd00-6d68ae85f9fa). + +#### Example + +The following example deletes a group from the team project collection. The group is identified by "S-1-5-21-2127521184-1604012920-1887927527-588340", the security identifier (SID). For more information about finding the SID of a group, see [/im: Display information about identities that compose direct membership](#im). You can also use the friendly name to delete a group. + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /gd S-1-5-21-2127521184-1604012920-1887927527-588340 /collection:CollectionURL + +<a id="gud"></a> +### /gud: Change the description for a server or collection-level group +Use **/gud** to change the description for a server-level or collection-level group. + + tfssecurity /gud GroupIdentity GroupDescription [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/gud** command, you must have the Edit project-level information permission set to Allow. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +#### Parameters + +|Argument|Description| +|---|---| +|GroupIdentity|Specifies the group identity. For more information about valid identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|GroupDescription|Specifies the new description for the group.| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +#### Example + +The following example associates the description "The members of this group test the code for this project" with the group "Datum Testers." + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /gud "Datum Testers" "The members of this group test the code for this project" /collection:CollectionURL + +<a id="gun"></a> +### /gun: Rename a group +Use **/gun** to rename a server-level or collection-level group. + + tfssecurity /gun GroupIdentity GroupName [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/gun** command, you must have the View collection-level information and Edit collection-level information or the View instance-level information and Edit instance-level information permissions set to Allow, depending on whether you are using the **/collection** or **/server** parameter, respectively. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6)>. + +#### Parameters + +|Argument|Description| +|---|---| +|GroupIdentity|Specifies the group identity. For more information about valid identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|GroupName|Specifies the new name of the group.| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +#### Example + +The following example renames the collection-level group "A. Datum Corporation Testers" to "A. Datum Corporation Test Engineers." + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /gun "A. Datum Corporation Testers" "A. Datum Corporation Test Engineers" /collection:CollectionURL + +## Identities and membership + +<a id="i"></a> +### /i: Display identity information for a specified group +Use **/i** to display identity information for a specified group in a deployment of Team Foundation Server. + + tfssecurity /i Identity [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/i** command, you must have the View collection-level information or the View instance -level information permission set to Allow, depending on whether you are using the /collection or /server parameter, respectively. For more information, see <[Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +#### Parameters + +|Argument|Description| +|---|---| +|Identity|The identity of the user or the application group. For more information about identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +The **/i** command of the **TFSSecurity** command-line utility displays information about each group within the team project collection (/server) or the application-tier server (/instance). It does not display any membership information. + +#### Examples + +The following example displays identity information for the "Team Foundation Administrators" group. + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /i "Team Foundation Administrators" /server:ServerURL + +Sample output: + + Resolving identity "Team Foundation Administrators"... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Server scope + Display name: Team Foundation Administrators + Description: Members of this application group can perform all privileged operations on the server. + +The following example displays identity information for the Project Collection Administrators group using the adm: identity specifier. + + tfssecurity /i adm: /collection:CollectionURL + +Sample output: + + Resolving identity "adm:"... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Server scope + Display name: [DatumOne]\Project Collection Administrators + Description: Members of this application group can perform all privileged operations on the team project collection. + +The following example displays identity information for the Project Administrators group for the "Datum" project by using the adm: identity specifier. + + tfssecurity /i adm:vstfs:///Classification/TeamProject/ProjectGUID /collection:CollectionURL + +Sample output: + + Resolving identity "adm:vstfs:///Classification/TeamProject/ProjectGUID"... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Datum + Display name: [Datum]\Project Administrators + Description: Members of this application group can perform all operations in the team project. + +<a id="im"></a> +### /im: Display information about identities that compose direct membership +Use **/im** to display information about the identities that compose the direct membership of a group that you specify. + + tfssecurity /im Identity [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/im** command, you must have the View collection-level information or the View instance-level information permission set to Allow, depending on whether you are using the /collection or /server parameter, respectively. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +#### Parameters + +|Argument|Description| +|---|---| +|Identity|The identity of the user or the group. For more information about identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +The **/im** command of **TFSSecurity** displays the direct members of the specified group only. This list includes other groups that are members of the specified group. However, the actual members of the member groups are not listed. + +#### Examples + +The following example displays direct membership identity information for the "Team Foundation Administrators" group in the domain "Datum1" at the fictitious company "A. Datum Corporation". + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /im "Team Foundation Administrators" /server:ServerURL + +Sample output: + + Resolving identity "Team Foundation Administrators"... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Server scope + Display name: Team Foundation Administrators + Description: Members of this application group can perform all privileged operations on the server. + + 3 member(s): + [U] Datum1\hholt (Holt, Holly) + [G] BUILTIN\Administrators (BUILTIN\Administrators) + s [A] [InstanceName]\Team Foundation Service Accounts + + Member of 2 group(s): + a [A] [DatumOne]\Project Collection Administrators ([DatumOne]\Project Collection Administrators) + e [A] [InstanceName]\Team Foundation Valid Users + + Done. + +The following example displays identity information for the Project Collection Administrators group in the "DatumOne" team project collection in the domain "Datum1" at the fictitious company "A. Datum Corporation" by using the adm: identity specifier. + + tfssecurity /im adm: /collection:CollectionURL + +Sample output: + + Resolving identity "adm: "... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Server scope + Display name: [DatumOne]\Project Collection Administrators + Description: Members of this application group can perform all privileged operations on the team project collection. + + 5 member(s): + [U] Datum1\jpeoples (Peoples, John) + [U] Datum1\hholt (Holt, Holly) + [G] BUILTIN\Administrators (BUILTIN\Administrators) + a [A] [InstanceName]\Team Foundation Administrators + s [A] [DatumOne]\Project Collection Service Accounts ([DatumOne]\Project Collection Service Accounts) + + Member of 1 group(s): + e [A] [DatumOne]\Project Collection Valid Users ([DatumOne]\Project Colleciton Valid Users) + + Done. + +The following example displays identity information for the Project Administrators group for the "Datum" project in the "DatumOne" team project collection in the domain "Datum1" at the fictitious company "A. Datum Corporation" using the adm: identity specifier. + + tfssecurity /im adm:vstfs:///Classification/TeamProject/ProjectGUID /collection:CollectionURL + +Sample output: + + Resolving identity "adm:vstfs:///Classification/TeamProject/ProjectGUID"... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXX + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Datum + Display name: [Datum]\Project Administrators + Description: Members of this application group can perform all operations in the team project. + + 2 member(s): + [U] Datum1\jpeoples (Peoples, John) + [U] Datum1\hholt (Holt, Holly) + + Member of 1 group(s): + e [A] [DatumOne]\Project Collection Valid Users ([DatumOne]\Project Collection Valid Users) + + Done. + +<a id="imx"></a> +### /imx: Display information about the identities that the expanded membership +Use **/imx** to display information about the identities that compose the expanded membership of a specified group. + + tfssecurity /imx Identity [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/imx** command, you must have the View collection-level information or the View instance-level information permission set to Allow, depending on whether you are using the **/collection** or **/server** parameter, respectively. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +#### Parameters + +|Argument|Description| +|---|---| +|Identity|The identity of the user or the group. For more information about identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on an application-tier server for Team Foundation. + +The **/imx** command of **TFSSecurity** displays the expanded members of the specified group only. This list includes not only other groups that are members of the specified group but also the members of the member groups. + +#### Examples + +The following example displays expanded membership identity information for the "Team Foundation Administrators" group in the domain "Datum1" at the fictitious company "A. Datum Corporation". + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + + tfssecurity /imx "Team Foundation Administrators" /server:ServerURL + +Sample output: + + Resolving identity "Team Foundation Administrators"... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Server scope + Display name: Team Foundation Administrators + Description: Members of this application group can perform all privileged operations on the server. + + 10 member(s): + [U] Datum1\hholt (Holly Holt) + [U] Datum1\jpeoples (John Peoples) + [U] Datum1\tommyh (Tommy Hartono) + [U] Datum1\henriea (Henriette Andersen) + [U] Datum1\djayne (Darcy Jayne) + [U] Datum1\aprilr (April Reagan) + [G] Datum1\InfoSec Secure Environment + [U] Datum1\nbento (Nuno Bento) + [U] Datum1\cristp (Cristian Petculescu) + [G] BUILTIN\Administrators (BUILTIN\Administrators) + s [A] [InstanceName]\Team Foundation Service Accounts + + Member of 3 group(s): + a [A] [DatumOne]\Project Collection Administrators ([DatumOne]\Project Collection Administrators) + e [A] [DatumOne]\Project Collection Valid Users ([DatumOne]\Project Collection Valid Users) + e [A] [InstanceName]\Team Foundation Valid Users + + Done. + +The following example displays identity information for the Project Collection Administrators group in the "DatumOne" team project collection in the domain "Datum1" at the fictitious company "A. Datum Corporation" using the adm: identity specifier. + + tfssecurity /imx adm: /collection:CollectionURL + +Sample output: + + Resolving identity "adm: "... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-0-0-0-0-1 + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Server scope + Display name: [DatumOne]\Project Collection Administrators + Description: Members of this application group can perform all privileged operations on the team project collection. + + 6 member(s): + [U] Datum1\jpeoples (Peoples, John) + [U] Datum1\hholt (Holt, Holly) + [G] BUILTIN\Administrators (BUILTIN\Administrators) + a [A] [InstanceName]\Team Foundation Administrators + s [A] [InstanceName]\Team Foundation Service Accounts + s [A] [DatumOne]\Project Collection Service Accounts ([DatumOne]\Project Collection Service Accounts) + + Member of 1 group(s): + e [A] [DatumOne]\Project Collection Valid Users ([DatumOne]\Project Collection Valid Users) + + Done. + +The following example displays identity information for the Project Administrators group for the "Datum" project in the "DatumOne" team project collection in the domain "Datum1" at the fictitious company "A. Datum Corporation" using the adm: identity specifier. + + tfssecurity /imx adm:vstfs:///Classification/TeamProject/ProjectGUID /collection:CollectionURL + +Sample output: + + Resolving identity "adm:vstfs:///Classification/TeamProject/ProjectGUID"... + + SID: S-1-9-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-XXXXXXX + + DN: + + Identity type: Team Foundation Server application group + Group type: AdministrativeApplicationGroup + Project scope: Datum + Display name: [Datum]\Project Administrators + Description: Members of this application group can perform all operations in the team project. + + 2 member(s): + [U] Datum1\jpeoples (Peoples, John) + [U] Datum1\hholt (Holt, Holly) + + Member of 2 group(s): + e [A] [DatumOne]\Project Collection Valid Users ([DatumOne]\Project Collection Valid Users) + e [A] [InstanceName]\Team Foundation Valid Users + + Done. + +For more information about the output specifiers, such as [G] and [U], see [TFSSecurity Identity and Output Specifiers](#specifiers). + +<a id="m"></a> +### /m: Check explicit and implicit group membership +Use **/m** to check explicit and implicit group membership information for a specified group or user. + + tfssecurity /m GroupIdentity [MemberIdentity] [/collection:CollectionURL] [/server:ServerURL] + +#### Required Permissions + +To use the **/m** command, you must be a member of the Team Foundation Administrators security group. For more information, see [Permission reference for Team Foundation Server](https://msdn.microsoft.com/library/39997de5-b7fb-4777-b779-07de0543abe6). + +> [!NOTE] +> Even if you are logged on with administrative credentials, you must open an elevated Command Prompt to perform this function. + +#### Parameters + +|Argument|Description| +|---|---| +|GroupIdentity|Specifies the group identity. For more information on valid identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|MemberIdentity|Specifies the member identity. By default, the value of this argument is the identity of the user who is running the command. For more information on valid identity specifiers, see [TFSSecurity Identity and Output Specifiers](#specifiers).| +|**/collection** :CollectionURL|Required if **/server** is not used. Specifies the URL of a team project collection in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName **/** CollectionName| +|**/server** :ServerURL|Required if **/collection** is not used. Specifies the URL of an application-tier server in the following format: **http://** ServerName **:** Port **/** VirtualDirectoryName| + +#### Remarks + +Run this command on the local application-tier computer. + +The **/m** command of the **TFSSecurity** command-line utility checks both direct and extended memberships. + +#### Examples + +The following example verifies whether the user "Datum1\\jpeoples" belongs to the Team Foundation Administrators server-level group. + +> [!NOTE] +> The examples are for illustration only and are fictitious. No real association is intended or inferred. + +```cmdline +tfssecurity /m "Team Foundation Administrators" n:Datum1\jpeoples /server:http://ADatumCorporation:8080 +``` + +Sample output: + + TFSSecurity - Team Foundation Server Security Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + The target Team Foundation Server is http://ADatumCorporation:8080/. + Resolving identity "Team Foundation Administrators"... + a [A] [INSTANCE]\Team Foundation Administrators + Resolving identity "n:Datum1\jpeoples"... + [U] DATUM1\jpeoples (John Peoples) + Checking group membership... + + John Peoples IS a member of [INSTANCE]\Team Foundation Administrators. + + Done. + +<a id="permissions"></a> +## Permission namespaces and actions + +<a id="server-level-permissions"></a> +### Server level + +|Permission|Namespace|Action| +|---|---|---| +|[Administer warehouse](../../security/permissions.md#administer-warehouse-permission)|Warehouse|Administer| +|[Create team project collection](../../security/permissions.md#create-team-project-collection-permission)|CollectionManagement|CreateCollection| +|[Delete team project collection](../../security/permissions.md#delete-team-project-collection-permission)|CollectionManagement|DeleteCollection| +|[Edit instance-level information](../../security/permissions.md#edit-instance-level-information-permission)|Server|GENERIC_WRITE<br /><br />tf: AdminConfiguration<br /><br />tf: AdminConnections| +|[Make requests on behalf of others](../../security/permissions.md#make-requests-on-behalf-of-others-permission)|Server|Impersonate| +|[Trigger events](../../security/permissions.md#trigger-events-permission)|Server|TRIGGER_EVENT| +|[Use full Web Access features](../../security/permissions.md#use-full-web-access-features-permission)|Server|FullAccess| +|[View instance-level information](../../security/permissions.md#view-instance-level-information-permission)|Server|GENERIC_READ| +|[Publish extensions](../../extend/publish/overview.md)| Publisher| **For TFS 2017 or earlier**:<br />Create<br/>Publish<br />Write<br /><br />**For TFS 2017**:<br />CreatePublisher<br />PublishExtension<br />UpdateExtension<br />DeleteExtensions<br />| + +<a id="collection-level-permissions"></a> +### Collection level + +|Permission|Namespace|Action| +|---|---|---| +|[Administer build resource permissions](../../security/permissions.md#administer-build-resource-permissions-permission)|BuildAdministration|AdministerBuildResourcePermissions| +|[Administer Project Server integration](../../security/permissions.md#administer-Project-Server-integration-permission)|ProjectServerAdministration|AdministerProjectServer| +|[Administer shelved changes](../../security/permissions.md#administer-shelved-changes-permission)|VersionControlPrivileges|AdminShelvesets<br /><br />tf: AdminShelvesets| +|[Administer workspaces](../../security/permissions.md#administer-workspaces-permission)|VersionControlPrivileges|AdminWorkspaces<br /><br />tf: AdminWorkspaces| +|[Alter trace settings](../../security/permissions.md#alter-trace-settings-permission)|Collection|DIAGNOSTIC_TRACE| +|[Create a workspace](../../security/permissions.md#create-a-workspace-permission)|VersionControlPrivileges|tf: CreateWorkspace| +|[Create new projects](../../security/permissions.md#create-new-team-projects-permission)|Collection|CREATE_PROJECTS| +|[Delete team project](../../security/permissions.md#delete-team-project-permission)|Project|Delete| +|[Edit collection-level information](../../security/permissions.md#edit-collection-level-information-permission)|Collection<br /><br />VersionControlPrivileges|GENERIC_WRITE<br /><br />tf: AdminConfiguration<br /><br />tf: AdminConnections| +|[Make requests on behalf of others](../../security/permissions.md#make-requests-on-behalf-of-others-permission)|Server|Impersonate| +|[Manage build resources](../../security/permissions.md#manage-build-resources-permission)|BuildAdministration|ManageBuildResources| +|[Manage process template](../../security/permissions.md#manage-process-template-permission)|Collection|MANAGE_TEMPLATE| +|[Manage test controllers](../../security/permissions.md#manage-test-controllers-permission)|Collection|MANAGE_TEST_CONTROLLERS| +|[Trigger events](../../security/permissions.md#trigger-events-permission)|Collection|TRIGGER_EVENT| +|[Use build resources](../../security/permissions.md#use-build-resources-permission)|BuildAdministration|UseBuildResources| +|[View build resources](../../security/permissions.md#view-build-resources-permission)|BuildAdministration|ViewBuildResources| +|[View collection-level information](../../security/permissions.md#view-collection-level-information-permission)|Collection|GENERIC_READ| +|[View system synchronization information](../../security/permissions.md#view-system-synchronization-information-permission)|Collection|SYNCHRONIZE_READ| +|Can create a SOAP-based web service subscription. |EventSubscription|CREATE_SOAP_SUBSCRIPTION| +|Can view subscription events defined for a team project. |EventSubscription|GENERIC_READ| +|Can create alerts for other users or for a team. |EventSubscription|GENERIC_WRITE| +|Can unsubscribe from an event subscription. |EventSubscription|UNSUBSCRIBE| + +<a id="team-project-level-permissions"></a> +### Team project level + +|Permission|Namespace|Action| +|---|---|---| +|[Create tag definition](../../security/permissions.md#create-tag-definition-permission)|Tagging|Create| +|[Create test runs](../../security/permissions.md#create-test-runs-permission)|Project| PUBLISH_TEST_RESULTS +|[Delete team project](../../security/permissions.md#delete-team-project-permission)|Project|DELETE| +|[Delete work items](../../security/permissions.md#delete-work-items-in-this-project-permission) (TFS 2015.2)| Project | WORK_ITEM_DELETE | +|[Delete test runs](../../security/permissions.md#delete-test-runs-permission)|Project|DELETE_TEST_RESULTS| +|[Edit project-level information](../../security/permissions.md#edit-team-project-level-information-permission)|Project|GENERIC_WRITE| +|[Move work items out of this project](../../security/permissions.md#move-work-items-out-of-this-project-permission) (TFS 2015.2)| Project| WORK_ITEM_MOVE | +|[Manage test configurations](../../security/permissions.md#manage-test-configurations-permission)|Project|MANAGE_TEST_CONFIGURATIONS| +|[Manage test environments](../../security/permissions.md#manage-test-environments-permission)|Project|MANAGE_TEST_ENVIRONMENTS| +|[Permanently delete (destroy) work items in this project](../../security/permissions.md#permanently-delete-work-items-in-this-project-permission) (TFS 2015.2)| Project | WORK_ITEM_PERMANENTLY_DELETE | +|[View project-level information](../../security/permissions.md#view-team-project-level-information-permission)|Project|GENERIC_READ| +|[View test runs](../../security/permissions.md#view-test-runs-permission)|Project|VIEW_TEST_RESULTS| + +<a id="build-permissions"></a> +### Build + +|Permission|Namespace|Action| +|---|---|---| +|[Administer build permissions](../../security/permissions.md#administer-build-permissions-permission)|Build|AdministerBuildPermissions| +|[Delete build definition](../../security/permissions.md#delete-build-definition-permission)|Build|DeleteBuildDefinition| +|[Delete builds](../../security/permissions.md#delete-builds-permission)|Build|DeleteBuilds| +|[Destroy builds](../../security/permissions.md#destroy-builds-permission)|Build|DestroyBuilds| +|[Edit build definition](../../security/permissions.md#edit-build-definition-permission)|Build|EditBuildDefinition| +|[Edit build quality](../../security/permissions.md#edit-build-quality-permission)|Build|EditBuildDefinition| +|[Manage build qualities](../../security/permissions.md#manage-build-qualities-permission)|Build|ManageBuildQualities| +|[Manage build queue](../../security/permissions.md#manage-build-queue-permission)|Build|ManageBuildQueue| +|[Override check-in validation by build](../../security/permissions.md#override-check-in-validation-by-build-permission)|Build|OverrideBuildCheckInValidation| +|[Queue builds](../../security/permissions.md#queue-builds-permission)|Build|QueueBuilds| +|[Retain indefinitely](../../security/permissions.md#retain-indefinitely-permission)|Build|RetainIndefinitely| +|[Stop builds](../../security/permissions.md#stop-builds-permission)|Build|StopBuilds| +|[Update build information](../../security/permissions.md#update-build-information-permission)|Build|UpdateBuildInformation| +|[View build definition](../../security/permissions.md#view-build-definition-permission)|Build|ViewBuildDefinition| +|[View builds](../../security/permissions.md#view-builds-permission)|Build|ViewBuilds| + +<a id="work-item-query-permissions"></a> +### Work item query + +|Permission|Namespace|Action| +|---|---|---| +|[Contribute](../../security/permissions.md#workitemqueryfolders-contribute-permission)|WorkItemQueryFolders|CONTRIBUTE| +|[Delete](../../security/permissions.md#workitemqueryfolders-delete-permission)|WorkItemQueryFolders|DELETE| +|[Manage permissions](../../security/permissions.md#workitemqueryfolders-manage-permissions-permission)||MANAGEPERMISSIONS| +|[Read](../../security/permissions.md#workitemqueryfolders-read-permission)|WorkItemQueryFolders|READ| + +<a id="tagging-permissions"></a> +### Tagging + +|Permission|Namespace|Action| +|---|---|---| +|[Create tag definition](../../security/permissions.md#create-tag-definition-permission)|Tagging|CREATE| +|[Delete tag definition](../../security/permissions.md#delete-tag-definition-permission)|Tagging|DELETE| +|[Enumerate tag definition](../../security/permissions.md#enumerate-tag-definition-permission)|Tagging|ENUMERATE| +|[Update tag definition](../../security/permissions.md#update-tag-definition-permission)|Tagging|UPDATE| + +<a id="area-permissions"</a> +### Area + +|Permission|Namespace|Action| +|---|---|---| +|[Create child nodes](../../security/permissions.md#area-create-child-nodes-permission)|CSS|CREATE_CHILDREN| +|[Delete this node](../../security/permissions.md#area-delete-this-node-permission)|CSS|DELETE| +|[Edit this node](../../security/permissions.md#area-edit-this-node-permission)|CSS|GENERIC_WRITE| +|[Edit work items in this node](../../security/permissions.md#area-edit-work-items-in-this-node-permission)|CSS|WORK_ITEM_WRITE| +|[Manage test plans](../../security/permissions.md#area-manage-test-plans-permission)|CSS|MANAGE_TEST_PLANS| +|[Manage test suites](../../security/permissions.md#area-manage-test-suites-permission)|CSS|MANAGE_TEST_SUITES| +|[View permissions for this node](../../security/permissions.md#area-view-permissions-for-this-node-permission)|CSS|GENERIC_READ| +|[View work items in this node](../../security/permissions.md#area-view-work-items-in-this-node-permission)|CSS|WORK_ITEM_READ| + +<a id="iteration-permissions"></a> +### Iteration + +|Permission|Namespace|Action| +|---|---|---| +|[Create child nodes](../../security/permissions.md#iteration-create-child-nodes-permission)|Iteration|CREATE_CHILDREN| +|[Delete this node](../../security/permissions.md#iteration-delete-this-node-permission)|Iteration|DELETE| +|[Edit this node](../../security/permissions.md#iteration-edit-this-node-permission)|Iteration|GENERIC_WRITE| +|[View permissions for this node](../../security/permissions.md#iteration-view-permissions-for-this-node-permission)|Iteration|GENERIC_WRITE| + +<a id="tfvc-permissions"></a> +### TFVC + +|Permission|Namespace|Action| +|---|---|---| +|[Administer labels](../../security/permissions.md#administer-labels-permission)|VersionControlItems|LabelOthers| +|[Check in](../../security/permissions.md#check-in-permission)|VersionControlItems|Checkin| +|[Check in other users' changes](../../security/permissions.md#check-in-other-users-changes-permission)|VersionControlItems|CheckinOther| +|[Check out](../../security/permissions.md#check-out-permission)|VersionControlItems|PendChange| +|[Label](../../security/permissions.md#label-permission)|VersionControlItems|Label| +|[Lock](../../security/permissions.md#lock-permission)|VersionControlItems|Lock| +|[Manage branch](../../security/permissions.md#manage-branch-permission)|VersionControlItems|ManageBranch| +|[Manage permissions](../../security/permissions.md#manage-permissions-permission)|VersionControlItems|AdminProjectRights| +|[Merge](../../security/permissions.md#merge-permission)|VersionControlItems|VersionControlItems| +|[Read](../../security/permissions.md#read-permission)|VersionControlItems|| +|[Revise other users' changes](../../security/permissions.md#revise-other-users-changes-permission)|VersionControlItems|ReviseOther| +|[Undo other users' changes](../../security/permissions.md#undo-other-users-changes-merge-permission)|VersionControlItems|UndoOther| +|[Unlock other users'-changes](../../security/permissions.md#unlock-other-users-changes-permission)|VersionControlItems|UnlockOther| + +<a id="git-repo-permissions"></a> +### Git repository + +TFS 2017 Update 1 and later + +|Permission|Namespace|Action| +|---|---|---| +|[Contribute](../../security/permissions.md#git-contribute-permission)|GitRepositories|GenericContribute| +|[Create Branch](../../security/permissions.md#git-create-branch-permission)|GitRepositories|CreateBranch| +|[Create Repository](../../security/permissions.md#git-create-repository-permission)|GitRepositories|CreateRepository| +|[Create Tag](../../security/permissions.md#git-create-tag-permission)|GitRepositories|CreateTag| +|[Delete Repository](../../security/permissions.md#git-delete-repository-permission)|GitRepositories|DeleteRepository| +|[Edit Policies](../../security/permissions.md#git-edit-policies-permission)|GitRepositories|EditPolicies| +|[Exempt From Policy Enforcement](../../security/permissions.md#git-repository)|GitRepositories|PolicyExempt| +|[Force Push (Rewrite History and Delete Branches)](../../security/permissions.md#git-force-push-permission)|GitRepositories|ForcePush| +|[Manage Notes](../../security/permissions.md#git-repository)|GitRepositories|ManageNote| +|[Manage Permissions](../../security/permissions.md#git-repository)|GitRepositories|ManagePermissions| +|[Read](../../security/permissions.md#git-read-permission)|GitRepositories|GenericRead| +|[Remove Others' Locks](../../security/permissions.md#git-remove-others-locks-permission)|GitRepositories|RemoveOthersLocks| +|[Rename Repository](../../security/permissions.md#git-rename-repository-permission)|GitRepositories|RenameRepository| + +TFS 2017 RTM and earlier + +|Permission|Namespace|Action| +|---|---|---| +|[Administer](../../security/git-permissions-before-2017.md#git-administer-permission)|GitRepositories|Administer| +|[Branch Creation](../../security/git-permissions-before-2017.md#git-branch-creation-permission)|GitRepositories|CreateBranch| +|[Contribute](../../security/git-permissions-before-2017.md#git-contribute-permission)|GitRepositories|GenericContribute| +|[Note Management](../../security/git-permissions-before-2017.md#git-note-management-permission)|GitRepositories|ManageNote| +|[Read](../../security/git-permissions-before-2017.md#git-read-permission)|GitRepositories|GenericRead| +|[Rewrite and destroy history (force push)](../../security/git-permissions-before-2017.md#git-rewrite-and-destroy-history-permission)|GitRepositories|ForcePush| +|[Tag Creation](../../security/git-permissions-before-2017.md#git-tag-creation-permission)|GitRepositories|CreateTag| + +<a id="specifiers"></a> +## Identity specifiers + +You can reference an identity by using one of the notations in the following table. + +|Identity specifier|Description|Example| +|---|---|---| +|**sid:** Sid.|References the identity that has the specified security identifier (SID).|**sid:S-1-5-21-2127521184-1604012920-1887927527-588340**| +|**n:**[D omain\]Name|References the identity that has the specified name. For Windows, Name is the account name. If the referenced identity is in a domain, the domain name is required. For application groups, Name is the group display name, and Domain is the URI or GUID of the containing project. In this context, if Domain is omitted, the scope is assumed to be at the collection level.|To reference the identity of the user "John Peoples" in the domain "Datum1" at the fictitious company "A. Datum Corporation:"<br /><br />**n:DATUM1\jpeoples**<br /><br />To reference application groups:<br /><br />**n:"Full-time Employees"**<br /><br />**n:00a10d23-7d45-4439-981b-d3b3e0b0b1ee\Vendors**| +|**adm:**[Scope]|References the administrative application group for the scope, such as "Team Foundation Administrators" for the server level or "Project Collection Administrators" at the collection level. The optional parameter Scope is a project URI or URL, including its GUID and connection string. If scope is omitted, the server or collection scope is assumed based on whether the /instance or /server parameter is used. In either case, the colon is still required.|**adm:vstfs:///Classification/TeamProject/** GUID| +|**srv:**|References the application group for service accounts.|Not applicable| +|**all:**|References all groups and identities.|Not applicable| +|String|References an unqualified string. If String starts with **S-1-**, it is identified as a SID. If String starts with **CN=** or **LDAP://** it is identified as a distinguished name. Otherwise, String is identified as a name.|"Team testers"| + +## Type Markers + +The following markers are used to identify types of identities and ACEs in output messages. + +### Identity type markers + +|Identity type marker|Description| +|---|---| +|**U**|Windows user.| +|**G**|Windows group.| +|**A**|Team Foundation Server (TFS) application group.| +|**a \[** A **\]**|Administrative application group.| +|**s \[** A **\]**|Service account application group.| +|**X**|Identity is not valid.| +|**?**|Identity is unknown.| + + +### Access control entry markers + +|Access control entry marker|Description| +|---|---| +|**+**|ALLOW access control entry.| +|**-**|DENY access control entry.| +|**\* \[\]**|Inherited access control entry.| diff --git a/docs/tfs-server/command-line/tfsservicecontrol-cmd.md b/docs/tfs-server/command-line/tfsservicecontrol-cmd.md new file mode 100644 index 00000000000..f1550b83865 --- /dev/null +++ b/docs/tfs-server/command-line/tfsservicecontrol-cmd.md @@ -0,0 +1,66 @@ +--- +title: Use TFSServiceControl command to stop or start TFS services or application pools +description: Start or stop TFS services from the command line using TFSServiceControl +ms.assetid: 7a385e9d-b1b7-4a4a-8f7d-1ece14144432 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# TFSServiceControl Command + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can use the **TFSServiceControl** command to stop or start all of the services and application pools Team Foundation Server (TFS) uses. For example, you use this command when backing up or restoring databases, or when you are moving your deployment from one machine to another. + +> [!NOTE] +> You must use the **TFSServiceControl** command to ensure that all necessary operations, services, and application pools are stopped for maintenance tasks such as backup and restore. You cannot manually perform all of the tasks carried out by the **TFSServiceControl** command. + +**Requirements** + +- You must be a member of the Team Foundation Administrators security group, a member of the Administrators group on the application-tier server, and a member of the sysadmin security group for any SQL Server databases that TFS uses. See [Set administrator permissions for Team Foundation Server](https://msdn.microsoft.com/library/ed578715-f4d2-4042-b797-5f97abde9973). + +- Even if you log on with administrative credentials, you must open an elevated Command Prompt window to perform this function. + +  + + TFSServiceControl [quiesce|unquiesce] + +## Parameters + +|Option|Description| +|---|---| +|**quiesce**|Stops or pauses all of the services, application pools, and operations in your deployment of TFS. This is required for certain maintenance tasks, such as restoring databases.| +|**unquiesce**|Starts or restarts all of the services, application pools, and operations in your deployment of TFS. This is required to return your server to operation after you run the command with the **quiesce** option.| + +## Remarks + +You use the **TFSServiceControl** command as part of specific maintenance tasks. After you specify the **quiesce** option, the server will not operate until you specify the **unquiesce** option. By default, the **TFSServiceControl** command is located in the %programfiles%\\TFS 12.0\\Tools directory. + +## Example + +The following example shows how to stop a deployment of Team Foundation Server. + + TFSServiceControl quiesce + +The following example shows how to start a deployment of Team Foundation Server. + + TFSServiceControl unquiesce + +## See Also + +### Tasks + +[Restore data to the same location](https://msdn.microsoft.com/library/57881758-8f6e-4d36-afa7-75d6b50e3e48) + +### Concepts + +[Back up and restore TFS](https://msdn.microsoft.com/library/cf9b5ab7-f4da-4519-991c-cc1722cb5d3c) + +[Configure and manage TFS resources](https://msdn.microsoft.com/library/d553c7b0-e794-41dc-a7ef-91d7a5e1e46b) + +## Other Resources + +[Restore a deployment to new hardware](https://msdn.microsoft.com/library/4601dd68-3b9e-4d29-aa71-432566d4e4bd) diff --git a/docs/tfs-server/index.md b/docs/tfs-server/index.md new file mode 100644 index 00000000000..2fbc6323eb1 --- /dev/null +++ b/docs/tfs-server/index.md @@ -0,0 +1,69 @@ +--- +title: Server administration index to content for TFS +description: Guide to topics for installing TFS, and managing team projects, project collections for Team Foundation Server (TFS) +ms.technology: vs-devops-admin +ms.prod: vs-devops-alm +ms.assetid: D51EAF72-F73D-4012-97F9-6208232B91B7 +ms.manager: douge +ms.author: kaelli +ms.date: 06/22/2017 +--- + +# Server Administration (TFS) + +<b>TFS 2017 | TFS 2015 | TFS 2013</b> + + +<!--- +## Overview +- [TFS components & concepts](architecture/tfs-concepts.md) +- [Configure & manage TFS resources](admin/config-tfs-resources.md) +- [Backup and restore](admin/backup/back-up-restore-tfs.md) +--> + +## 5-minute quickstarts + +Once you've installed TFS, you're ready to create a team project, add users, and configure some key resources. + +- [Install TFS on a single server](install/single-server.md) +- [Create a team project](/vsts/accounts/create-team-project?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) +- [Add users to projects](/vsts/accounts/add-users?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) +- [Configure a backup server](admin/backup/config-backup-sched-plan.md) + + + +## Step-by-step tutorials + +- [Add administrators](add-administrator-tfs.md) +- [Change permission levels](admin/change-permission-levels.md) +- [Configure an SMTP server](admin/setup-customize-alerts.md) +- [Manage team project collections](./admin/manage-team-project-collections.md) + +## Concepts + +- [Architecture overview](./architecture/architecture.md) +- [Components, terms, and key concepts](./architecture/tfs-concepts.md) +- [About permissions and groups](/vsts/security/about-permissions?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) +- [About access levels](/vsts/security/access-levels?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) + + +## How-to guides + +- [Open the admin console](./command-line/open-admin-console.md) +- [Restrict access to resources](/vsts/accounts/restrict-access-tfs?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) +- [Change access levels](/vsts/security/change-access-levels?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) + + + +## Reference +- [Requirements](/vsts/accounts/requirements?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) +- [Permissions lookup guide](/vsts/security/permissions-lookup-guide?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) +- [Permissions and groups reference](/vsts/security/permissions?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json) + + +## Resources + +- [Security](../security/index.md) +- [Billing](../billing/index.md) +- [Authentication guidance for REST APIs](/vsts/integrate/get-started/authentication/authentication-guidance) +- [Technical Articles](../articles/index.md) diff --git a/docs/tfs-server/install/_img/2013-install.png b/docs/tfs-server/install/_img/2013-install.png new file mode 100644 index 00000000000..7f3a2d4d4ab Binary files /dev/null and b/docs/tfs-server/install/_img/2013-install.png differ diff --git a/docs/tfs-server/install/_img/IC548953.png b/docs/tfs-server/install/_img/IC548953.png new file mode 100644 index 00000000000..e2983d86c80 Binary files /dev/null and b/docs/tfs-server/install/_img/IC548953.png differ diff --git a/docs/tfs-server/install/_img/IC552206.png b/docs/tfs-server/install/_img/IC552206.png new file mode 100644 index 00000000000..1ba2c4e3b59 Binary files /dev/null and b/docs/tfs-server/install/_img/IC552206.png differ diff --git a/docs/tfs-server/install/_img/IC588492.png b/docs/tfs-server/install/_img/IC588492.png new file mode 100644 index 00000000000..af68a123438 Binary files /dev/null and b/docs/tfs-server/install/_img/IC588492.png differ diff --git a/docs/tfs-server/install/_img/IC612456.png b/docs/tfs-server/install/_img/IC612456.png new file mode 100644 index 00000000000..0609649b232 Binary files /dev/null and b/docs/tfs-server/install/_img/IC612456.png differ diff --git a/docs/tfs-server/install/_img/IC612461.png b/docs/tfs-server/install/_img/IC612461.png new file mode 100644 index 00000000000..94802cd259f Binary files /dev/null and b/docs/tfs-server/install/_img/IC612461.png differ diff --git a/docs/tfs-server/install/_img/IC612464.png b/docs/tfs-server/install/_img/IC612464.png new file mode 100644 index 00000000000..9eaeef382c6 Binary files /dev/null and b/docs/tfs-server/install/_img/IC612464.png differ diff --git a/docs/tfs-server/install/_img/IC612476.png b/docs/tfs-server/install/_img/IC612476.png new file mode 100644 index 00000000000..6414f54747d Binary files /dev/null and b/docs/tfs-server/install/_img/IC612476.png differ diff --git a/docs/tfs-server/install/_img/IC612479.png b/docs/tfs-server/install/_img/IC612479.png new file mode 100644 index 00000000000..598f9ed9737 Binary files /dev/null and b/docs/tfs-server/install/_img/IC612479.png differ diff --git a/docs/tfs-server/install/_img/IC612480.png b/docs/tfs-server/install/_img/IC612480.png new file mode 100644 index 00000000000..279f1d71981 Binary files /dev/null and b/docs/tfs-server/install/_img/IC612480.png differ diff --git a/docs/tfs-server/install/_img/IC646324.png b/docs/tfs-server/install/_img/IC646324.png new file mode 100644 index 00000000000..26f7f24e98d Binary files /dev/null and b/docs/tfs-server/install/_img/IC646324.png differ diff --git a/docs/tfs-server/install/_img/IC646325.png b/docs/tfs-server/install/_img/IC646325.png new file mode 100644 index 00000000000..4dd3ac4b9d6 Binary files /dev/null and b/docs/tfs-server/install/_img/IC646325.png differ diff --git a/docs/tfs-server/install/_img/IC646326.png b/docs/tfs-server/install/_img/IC646326.png new file mode 100644 index 00000000000..18a2082dd73 Binary files /dev/null and b/docs/tfs-server/install/_img/IC646326.png differ diff --git a/docs/tfs-server/install/_img/IC646327.png b/docs/tfs-server/install/_img/IC646327.png new file mode 100644 index 00000000000..97f4bd09f23 Binary files /dev/null and b/docs/tfs-server/install/_img/IC646327.png differ diff --git a/docs/tfs-server/install/_img/IC646328.png b/docs/tfs-server/install/_img/IC646328.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/tfs-server/install/_img/IC646328.png differ diff --git a/docs/tfs-server/install/_img/IC665325.png b/docs/tfs-server/install/_img/IC665325.png new file mode 100644 index 00000000000..4a4f4d2dcbd Binary files /dev/null and b/docs/tfs-server/install/_img/IC665325.png differ diff --git a/docs/tfs-server/install/_img/IC665430.png b/docs/tfs-server/install/_img/IC665430.png new file mode 100644 index 00000000000..eb6eedebfbe Binary files /dev/null and b/docs/tfs-server/install/_img/IC665430.png differ diff --git a/docs/tfs-server/install/_img/IC665433.png b/docs/tfs-server/install/_img/IC665433.png new file mode 100644 index 00000000000..56434eac3de Binary files /dev/null and b/docs/tfs-server/install/_img/IC665433.png differ diff --git a/docs/tfs-server/install/_img/IC666062.png b/docs/tfs-server/install/_img/IC666062.png new file mode 100644 index 00000000000..2ce4ff28515 Binary files /dev/null and b/docs/tfs-server/install/_img/IC666062.png differ diff --git a/docs/tfs-server/install/_img/IC756627.png b/docs/tfs-server/install/_img/IC756627.png new file mode 100644 index 00000000000..6bc00571363 Binary files /dev/null and b/docs/tfs-server/install/_img/IC756627.png differ diff --git a/docs/tfs-server/install/_img/app-tier-only.png b/docs/tfs-server/install/_img/app-tier-only.png new file mode 100644 index 00000000000..7c0af7745c3 Binary files /dev/null and b/docs/tfs-server/install/_img/app-tier-only.png differ diff --git a/docs/tfs-server/install/_img/configure-reporting.png b/docs/tfs-server/install/_img/configure-reporting.png new file mode 100644 index 00000000000..1003625c747 Binary files /dev/null and b/docs/tfs-server/install/_img/configure-reporting.png differ diff --git a/docs/tfs-server/install/_img/create-farm.png b/docs/tfs-server/install/_img/create-farm.png new file mode 100644 index 00000000000..012b15c094e Binary files /dev/null and b/docs/tfs-server/install/_img/create-farm.png differ diff --git a/docs/tfs-server/install/_img/database.png b/docs/tfs-server/install/_img/database.png new file mode 100644 index 00000000000..ff9fb76d111 Binary files /dev/null and b/docs/tfs-server/install/_img/database.png differ diff --git a/docs/tfs-server/install/_img/databases-app-tier-only.png b/docs/tfs-server/install/_img/databases-app-tier-only.png new file mode 100644 index 00000000000..11ab4df15f0 Binary files /dev/null and b/docs/tfs-server/install/_img/databases-app-tier-only.png differ diff --git a/docs/tfs-server/install/_img/full-configuration-wizard.png b/docs/tfs-server/install/_img/full-configuration-wizard.png new file mode 100644 index 00000000000..c48190ff0dc Binary files /dev/null and b/docs/tfs-server/install/_img/full-configuration-wizard.png differ diff --git a/docs/tfs-server/install/_img/report-reader-account.png b/docs/tfs-server/install/_img/report-reader-account.png new file mode 100644 index 00000000000..89a9a5de2e9 Binary files /dev/null and b/docs/tfs-server/install/_img/report-reader-account.png differ diff --git a/docs/tfs-server/install/_img/reporting-service-instance.png b/docs/tfs-server/install/_img/reporting-service-instance.png new file mode 100644 index 00000000000..0578a6aa776 Binary files /dev/null and b/docs/tfs-server/install/_img/reporting-service-instance.png differ diff --git a/docs/tfs-server/install/_img/service-account-and-authentication.png b/docs/tfs-server/install/_img/service-account-and-authentication.png new file mode 100644 index 00000000000..0d8c6ded77c Binary files /dev/null and b/docs/tfs-server/install/_img/service-account-and-authentication.png differ diff --git a/docs/tfs-server/install/_img/service-account-app-tier-only.png b/docs/tfs-server/install/_img/service-account-app-tier-only.png new file mode 100644 index 00000000000..e57ca0db14e Binary files /dev/null and b/docs/tfs-server/install/_img/service-account-app-tier-only.png differ diff --git a/docs/tfs-server/install/_img/sharepoint.png b/docs/tfs-server/install/_img/sharepoint.png new file mode 100644 index 00000000000..8a125b9f279 Binary files /dev/null and b/docs/tfs-server/install/_img/sharepoint.png differ diff --git a/docs/tfs-server/install/_img/sql-client-tools-connectivity.png b/docs/tfs-server/install/_img/sql-client-tools-connectivity.png new file mode 100644 index 00000000000..40521045695 Binary files /dev/null and b/docs/tfs-server/install/_img/sql-client-tools-connectivity.png differ diff --git a/docs/tfs-server/install/_img/std-config-intro.png b/docs/tfs-server/install/_img/std-config-intro.png new file mode 100644 index 00000000000..8779ecd5d17 Binary files /dev/null and b/docs/tfs-server/install/_img/std-config-intro.png differ diff --git a/docs/tfs-server/install/_img/tfs-extensions-for-sharepoint.png b/docs/tfs-server/install/_img/tfs-extensions-for-sharepoint.png new file mode 100644 index 00000000000..c0dc9aa6a61 Binary files /dev/null and b/docs/tfs-server/install/_img/tfs-extensions-for-sharepoint.png differ diff --git a/docs/tfs-server/install/_shared/_img/configuration-center.png b/docs/tfs-server/install/_shared/_img/configuration-center.png new file mode 100644 index 00000000000..87dfede5e7f Binary files /dev/null and b/docs/tfs-server/install/_shared/_img/configuration-center.png differ diff --git a/docs/tfs-server/install/_shared/_img/configure-installed-features.png b/docs/tfs-server/install/_shared/_img/configure-installed-features.png new file mode 100644 index 00000000000..22c489bb638 Binary files /dev/null and b/docs/tfs-server/install/_shared/_img/configure-installed-features.png differ diff --git a/docs/tfs-server/install/_shared/_img/installer.png b/docs/tfs-server/install/_shared/_img/installer.png new file mode 100644 index 00000000000..6f60ee8b716 Binary files /dev/null and b/docs/tfs-server/install/_shared/_img/installer.png differ diff --git a/docs/tfs-server/install/_shared/_img/new-deployment-basic.png b/docs/tfs-server/install/_shared/_img/new-deployment-basic.png new file mode 100644 index 00000000000..59ea6689fcb Binary files /dev/null and b/docs/tfs-server/install/_shared/_img/new-deployment-basic.png differ diff --git a/docs/tfs-server/install/_shared/_img/sql-features.png b/docs/tfs-server/install/_shared/_img/sql-features.png new file mode 100644 index 00000000000..808508d1339 Binary files /dev/null and b/docs/tfs-server/install/_shared/_img/sql-features.png differ diff --git a/docs/tfs-server/install/_shared/install.md b/docs/tfs-server/install/_shared/install.md new file mode 100644 index 00000000000..93842121204 --- /dev/null +++ b/docs/tfs-server/install/_shared/install.md @@ -0,0 +1,2 @@ +[Download](https://www.visualstudio.com/downloads/visual-studio-2015-downloads-vs.aspx) +and install TFS now. \ No newline at end of file diff --git a/docs/tfs-server/install/_shared/sql-server-data-tier.md b/docs/tfs-server/install/_shared/sql-server-data-tier.md new file mode 100644 index 00000000000..1713a8e2188 --- /dev/null +++ b/docs/tfs-server/install/_shared/sql-server-data-tier.md @@ -0,0 +1,7 @@ +You'll need to [open port 1433](https://msdn.microsoft.com/en-us/library/cc646023.aspx) +so that TFS can connect to the SQL Server database engine +from the application tier server. + +If you're going to enable reporting, +install SQL Server Analysis Services and install and configure SQL Server Reporting Services, too. + diff --git a/docs/tfs-server/install/create-tfs-farm.md b/docs/tfs-server/install/create-tfs-farm.md new file mode 100644 index 00000000000..8c9f5f5766e --- /dev/null +++ b/docs/tfs-server/install/create-tfs-farm.md @@ -0,0 +1,101 @@ +--- +title: How to create a Team Foundation server farm (high availability) +description: How to create a Team Foundation server farm (high availability) +ms.assetid: e2952ac4-5ba0-4b64-ac82-1ed9454bfc46 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# How to: Create a Team Foundation server farm (high availability) + +**TFS 2013** + +![Create high-availability farm](_img/create-farm.png) + +You might add an application-tier server to an existing deployment of Team Foundation Server for any of the following reasons: + +- You want to build redundancy into your deployment of Team Foundation Server. +- You want your deployment of Team Foundation Server to run faster. +- You want to restore an application-tier server that has failed. +- You want to move an application tier to a different server. + +**Redundancy and performance** +By using the Application-tier Only Configuration wizard, you can enhance the availability, scalability, and performance of your application tier.  + +To benefit from multiple application-tier servers, you should ensure that your initial deployment of Team Foundation Server includes the following characteristics: + +- The application tier and the configuration database are installed on separate servers. +- You used a domain account for the Team Foundation Server service account (TFSSERVICE). +- Network Load Balancing (NLB) is deployed. + +You use NLB to create a cluster of Web servers that appear as a single logical Web service. This procedure is separate from the Application-tier Only Configuration wizard. For more information about how to set up NLB, see the following page on the Microsoft website: [Network Load Balancing](http://go.microsoft.com/fwlink/?LinkId=158320). + +If you create an NLB cluster, you do not need to use a SQL Server cluster for your configuration database or any team project collection. For the purposes of performance, scalability, and availability, any SQL Server cluster that you might deploy is independent of the NLB cluster. + +**Disaster recovery and hardware upgrade** +If you have a backup of your configuration database and your application tier has a hardware failure, you can use the Application-tier Only Configuration wizard to restore the application tier. + +You can also move your application tier with the Application-tier Only Configuration wizard. Although no particular architecture is required to move an application tier, you must have access to the configuration database for the deployment. + +## Create a Team Foundation Server Farm + +Use the steps in this checklist to add an application tier to an existing deployment of Team Foundation Server. + +| | Task | Detailed instructions | +| --- | --- | --- | +| [Step 1](_img/ic646324.png) | **Check for supported hardware and software**. Verify that the operating system and hardware meet requirements for Team Foundation Server. | [System requirements for Team Foundation Server](../../accounts/requirements.md) | +| [Step 2](_img/ic646325.png) | **Set up Team Foundation Server**. Install Team Foundation Server and run the Application-Tier Only Configuration wizard. | [Run Team Foundation Server installation](install-2013/install-tfs.md#installer) </br> [Configure TFS using the application-tier-only configuration wizard](#config-tfs-app-tier-wiz) | + +<a name="config-tfs-app-tier-wiz"></a> +## Configure TFS using the application-tier-only configuration wizard + +You can use a wizard to add an application tier to an existing Team Foundation Server deployment. + +Your Team Foundation Server deployment must use a domain account for its service account. If you originally used a built-in account for the TFS service account, you must change it to a domain account. For more information, see the section "Assigning a Different Account as the Service Account" on this page on the Microsoft website: Change the Service Account or Password for Team Foundation Server. + +> [!TIP] +> You can access the Team Foundation Server Configuration tool by launching Team Foundation Server Administration Console, choosing **Application Tier**, and then choosing **Configure Installed Features**. + +**Required permissions:** To perform this procedure, you must be a member of the **Administrators** security group on the server. + +To configure Team Foundation Server by using the application-tier only option: + + 1. Choose **Application-Tier Only Configuration**, and then choose **Start Wizard**. + + The **Team Foundation Server Application-Tier Only** wizard appears. + + 2. Read the Welcome screen, and then choose Next. + + 3. In **SQL Server Instance**, type the instance of SQL Server that hosts the configuration database for the installation of TFS for which you want to add an application-tier server, and then choose **List Available Databases**. + + The wizard lists all the databases on that instance of SQL Server. + + 4. Choose a database, and then choose **Next**. + + The wizard displays the application-tier settings for this server. + + 5. In the list, choose the account you want to use. Enter the password for the service account. To test the user account and password combination, you can optionally choose **Test**. + + > [!NOTE] + > Make sure that the service account you specify has been added to the Farm Administrators group for the SharePoint Central Administration site. For more information, see [Add the service account for Team Foundation Server to the Farm Administrators group](sharepoint/setup-remote-sharepoint.md#tfs-svc-acct-to-farm-admin-group). + + 6. Under **Authentication Method**, choose **NTLM** to use NTLM authentication or **Negotiate (Kerberos)** to first attempt Kerberos authentication, the more secure option. If that fails, fall back to NTLM. Choose **Next**. + + NTLM is the default value. + + 7. On the Review page, review the settings, and then choose **Next**. + + 8. Choose Configure to apply the configuration settings. + + The wizard applies configuration settings. + + 9. Choose **Next**, **Close**, **Close**. + + The Team Foundation Server Administration Console appears. + +> [!TIP] +> If you want to connect to an NLB cluster from a client that is running on one of the application-tier servers in the cluster, you should connect using localhost as the name of the server, instead of the Domain Name System (DNS) name for the load balancer. By default, Internet Information Services (IIS) prevents you from connecting to an NLB cluster from any server in the cluster, unless you use localhost as the name of the cluster. + diff --git a/docs/tfs-server/install/dual-server.md b/docs/tfs-server/install/dual-server.md new file mode 100644 index 00000000000..9bce8d7cd75 --- /dev/null +++ b/docs/tfs-server/install/dual-server.md @@ -0,0 +1,151 @@ +--- +title: How to set up TFS in a dual server configuration +description: How to set up Team Foundation Server in a dual server configuration using the full configuration wizard +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 1364dc15-fbd7-4e05-afa4-39ea22a13e02 +toc: show +ms.manager: douge +ms.author: aaronha +ms.date: 08/04/2016 +--- + +# How to set up TFS in a dual server configuration + +**TFS 2017** | **TFS 2015** + +You can enable your TFS deployment to handle more load than a single server +configuration by deploying the application and data tiers on separate servers. +Make sure to review our [hardware recommendations](../../accounts/requirements.md#hardware-recommendations) +to confirm that this configuration seems appropriate for your team. If not, +consider a [single server](single-server.md) or +[mutliple server](multiple-server.md) configuration instead. + +## Preparation + +0. Prepare an application tier server that satisfies the +[system requirements](../../accounts/requirements.md) for TFS. + +0. Prepare a data tier server that meets the +[hardware recommendations](../../accounts/requirements.md#hardware-recommendations) +for your team. + + Set up an [appropriate version of SQL Server](../../accounts/requirements.md#sql-server) + on the data tier. When you set SQL Server up for TFS, install at least the + database engine and the full text search services. + + ![SQL_SERVER_FEATURES](_shared/_img/sql-features.png) + + Paid copies of Team Foundation Server come with a license to SQL Server + Standard for use with TFS. The + [Team Foundation Server pricing page](https://www.visualstudio.com/team-services/tfs-pricing) + explains the details. If you use the license that's included with TFS, you can + only use it for the TFS databases. + +0. Configure the firewall on your data tier to +[allow access to the SQL Server database engine](https://msdn.microsoft.com/library/ms175043.aspx) +so that TFS can get through the firewall to connect to the SQL Server database +engine from the application tier. + +0. Ensure that the account you plan to use to configure TFS is a member of the +[SysAdmin server role in SQL Server](https://msdn.microsoft.com/library/ms188659.aspx). + + > Installing TFS involves a complex set of operations that require a high degree of privilege - these include creating databases, + > provisioning logins for service accounts, and more. Technically, all that is required is membership in the ServerAdmin role; + > ALTER ANY LOGIN, CREATE ANY DATABASE, and VIEW ANY DEFINITION server scoped permissions; and CONTROL permission on the master + > database. Membership in the SysAdmin server role will confer all of these memberships and permissions, + > and is therefore the easiest way to ensure that TFS configuration will succeed. If necessary, these memberships and permissions + > can be revoked after TFS is installed. + +0. If you're going to enable reporting, prepare the application and data tiers for that. + + Install SQL Server Analysis Services and install and configure SQL Server + Reporting Services. Configure your firewall to + [allow access to Reporting Services](https://msdn.microsoft.com/library/bb934283.aspx) + and to + [allow access to Analysis Services](https://msdn.microsoft.com/library/ms174937.aspx). + + If you're using a version of TFS prior to TFS 2017, install SQL Server Client + Tools Connectivity on the application tier server. + + ![SQL Server Client Tools Connectivity feature installation](_img/sql-client-tools-connectivity.png) + +0. If you're going to enable SharePoint integration, +prepare one of the servers for that. + + Install [an appropriate version of SharePoint](../../accounts/requirements.md#sharepoint). + If you already have SharePoint deployed, you can use that deployment instead of + installing it on one of your new servers - just install TFS on the SharePoint + server and run the Configure Extensions for SharePoint Products wizard. + + ![Extensions for SharePoint Products int the TFS Configuration Center](_img/tfs-extensions-for-sharepoint.png) + + Add the service account you plan to use for your TFS deployment to the Farm + Administrators group in SharePoint. Note that if you plan to use NetworkService + as your service account, this will look like *{domain}\\{app-tier-machine-name}$*. + +## Installation + +0. Download TFS from VisualStudio.com, MSDN Subscriber Downloads, +or the Volume Licensing Center or purchase a DVD through retail channels. + +0. Kick off the installation. + +![TFS_INSTALLER](_shared/_img/installer.png) + +The installation process itself simply gets TFS bits onto your machine. +At the end of this process, the installer will launch the TFS +Configuration Center. + +## Configuration + +Configure TFS using your selected scenario. Even in a dual-server configuration, +the easiest way to set up Team Foundation Server is to use the Server Configuration +Wizard with the New Deployment - Basic scenario. + +![TFS_SERVER_CONFIGURATION_NEW_DEPLOYMENT_BASIC](_shared/_img/new-deployment-basic.png) + +> In previous versions of TFS, you would use the Basic Configuration +> Wizard. + +This scenario is optimized for simplicity, using default options for +most inputs. If you want full control over all inputs, use the New +Deployment - Advanced scenario instead. + +When selecting a SQL Server instance in the wizard, be sure to point to the +data tier you have already configured. With the New Deployment - Basic scenario, +you will also need to choose: + +- Which website settings to use, including whether to use HTTP or HTTPS +bindings. See [website settings](../../security/websitesettings.md) for more +information. +- Whether to install and configure Code Search features. See +[configuring Search](../../search/code/administration.md#config-tfs) +for more information. + +If you select the New Deployment - Advanced scenario, you will additionally need +to chose: + +- The service account your various TFS deployment processes will run as. +The default value used in the Basic scenario is NT AUTHORITY\NETWORK SERVICE +in domain joined scenarios, and LOCAL SERVICE in workgroup scenarios. +- Whether to enable SSH, along with the port it should listen on. The +default value used in the Basic scenario is to configure SSH on port 22. +- The location of the file cache used for frequently accessed TFS +resources. The default value used in the Basic scenario is the path +TfsData\ApplicationTier\_fileCache on the local drive which has the most +free space. +- Whether to configure Reporting features and SharePoint integration. +The default behavior used in the Basic scenario is to not configure +these features. Note that these options are not available on client +operating systems. +- Whether to create a team project collection in which to store your +projects, along with the name of that collection. The default behavior +in the Basic scenario is to create a project collection named +DefaultCollection. + +In both cases, the wizard will run readiness checks to validate your +environment and your setting selections. If all goes well, the wizard +will then let you configure your deployment. If there are errors, you +will need to fix each of them and re-run the readiness checks before +you can continue. \ No newline at end of file diff --git a/docs/tfs-server/install/get-started.md b/docs/tfs-server/install/get-started.md new file mode 100644 index 00000000000..48600f298cd --- /dev/null +++ b/docs/tfs-server/install/get-started.md @@ -0,0 +1,90 @@ +--- +title: Install and configure TFS +ms.topic: get-started-article +description: Use the new install guide for Team Foundation Server to set up TFS on your server or servers +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 0a44920a-fcdc-4545-b150-8246dcc47f42 +toc: show +ms.manager: douge +ms.author: aaronha +ms.date: 08/04/2016 +--- + +# Install and configure TFS + +**TFS 2017** | **TFS 2015** + +You have several choices +in how to deploy TFS, from putting everything on a single server all the way to using multiple +application tiers, multiple SQL instances, and a SharePoint farm. See our +[hardware recommendations](../../accounts/requirements.md#hardware-recommendations) for more detailed help +in determining the right type of deployment for your team. + +* [Single server](single-server.md) + A single server deployment is the easiest way to deploy TFS, with the + application tier and data tier on the same machine. + +* [Dual server](dual-server.md) + A dual server deployment, with separate application and data tiers, can + provide better performance for larger teams or teams with heavier usage. + +* [Multiple server configuration](multiple-server.md) + Multiple server deployments, which can involve multiple application + and/or data tiers, can provide better performance for larger teams or + teams with heavier usage. Using multiple servers can also improve high + availability and disaster recovery capabilities. + +## For evaluation or personal use + +If you're setting up TFS for personal use or to evaluate the core features +(version control, build and work item tracking), +use [TFS Express](https://www.visualstudio.com/downloads/). +It's free, it's simple to set up, +and it can be installed on both client and server operating systems. +In TFS 2015 Update 2 and later, it supports all of the same features as TFS. +TFS Express licensing limits it to five active users, however. + +You might also want to consider using a free +[VSTS account](../../accounts/create-account-msa-or-work-student.md) +for personal use. +Because it's in the cloud, you won't have to install SQL Server and TFS on your own hardware, +and you won't need to do things like manage your own backups. + +## The installation process + +No matter how you plan to deploy TFS, the process always involves three steps - +preparation, installation, and configuration. + +Preparation is the process of getting one or more servers prepared for TFS by +reviewing and following the system requirements. If in doubt, don't worry - the +configuration process runs a series of readiness checks to ensure your system +meets the TFS requirements. + +Installation is the process of getting TFS bits on your server, and involves +running an installer obtained from VisualStudio.com, MSDN Subscriber Downloads, +the Volume Licensing Service Center, or physical media purchased through retail +channels. + +When installation completes, it will launch the Team Foundation Server +Configuration Center. Configuration is the process of going through the +appropriate wizard to actually get TFS up and running. In TFS 2017, a unified +wizard is used for all TFS configurations - new installations, upgrades, and +application-tier only scenarios. Prior to TFS 2017, you would pick the +appropriate wizard for your scenario. Other wizards are available to configure +proxies, SharePoint extensions, and so forth. + +![TEAM_FOUNDATION_SERVER_CONFIGURATION_CENTER](_shared/_img/configuration-center.png) + +If you need to close the configuration center for any reason, you can always get +back to it by launching the installed Team Foundation Server Administration +Console and clicking the Configure Installed Features link from the Application +Tier node. + +![ADMINISTRATION_CONSOLE_APPLICATION_TIER_NODE](_shared/_img/configure-installed-features.png) + +When you run a configuration wizard, it will run a series of readiness checks +to ensure that your system meets the TFS requirements and that your setting selections +look like they are going to work. If there are issues, you will be presented +with one or more warnings or errors. When all the errors have been resolved, +you can run your configuration to set up your TFS deployment. \ No newline at end of file diff --git a/docs/tfs-server/install/install-2013/add-tfs-svc-acct-report-svr.md b/docs/tfs-server/install/install-2013/add-tfs-svc-acct-report-svr.md new file mode 100644 index 00000000000..88a3ce361d0 --- /dev/null +++ b/docs/tfs-server/install/install-2013/add-tfs-svc-acct-report-svr.md @@ -0,0 +1,46 @@ +--- +title: Add the TFS service account to the report server +description: Add the TFS service account to the report server +ms.assetid: e0a41663-9426-48f1-8e4e-4d6708b25f88 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Add the TFS service account to the report server + +**TFS 2015** | **TFS 2013** + + +If the report server and Team Foundation Server are not on the same server, you must add the name of the service account that you will use for Team Foundation Server (TFSSERVICE) to the Content Manager group on the report server. This step is done automatically during Team Foundation Server setup if the report server is installed on Team Foundation Server. + +If you are using Network Service for TFSSERVICE, you must add the machine name of the server that is running Team Foundation Server instead of Network Service. The machine name is the server name followed by the $ symbol. For example, *Domain\ServerName$*. + +For more information about service accounts, see [Accounts Required for Installation of Team Foundation Server](../../../accounts/requirements.md#accounts). + +**Required Permissions:** + +To perform this procedure, you must be a member of the **Administrators** security group on the report server. + +To add the service account for Team Foundation Server to the Content Manager group on the report server: + + 1. From the **Start** menu, choose **Reporting Services Configuration Manager**. + + > **Note:** + > On Windows Server 2008, open the shortcut menu for **Reporting Services Configuration Manager** and choose **Run as administrator**. + + The **Reporting Services Configuration Connection** dialog box appears. + + 2. In the **Server Name** box, enter the name of the report server. If you are using an instance name, choose the name of the instance in the **Report Server Instance** list. Choose **Connect**. + + 3. Choose **Report Manager URL**, and then choose the link to the report manager website. + + The report manager website for the report server opens in an Internet browser window. + + 4. In the report manager website, choose the **Properties** tab, and then choose **New Role Assignment**. + + + 5.In the **Group or user name** box, enter the name of the service account that you will use for Team Foundation Server (TFSSERVICE), select the **Content Manager** check box, and then choose **OK**. + diff --git a/docs/tfs-server/install/install-2013/config-tfs-advanced.md b/docs/tfs-server/install/install-2013/config-tfs-advanced.md new file mode 100644 index 00000000000..c7b4e6c579d --- /dev/null +++ b/docs/tfs-server/install/install-2013/config-tfs-advanced.md @@ -0,0 +1,192 @@ +--- +title: Configure Team Foundation Server using the advanced configuration +description: Configure Team Foundation Server using the advanced configuration +ms.assetid: f4c1e81f-d792-4035-be2d-8e034da27b24 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Configure Team Foundation Server using the advanced configuration + +**TFS 2013** + +The advanced configuration for Team Foundation Server lets you customize most settings. Although you can run the advanced configuration on either a client or a server operating system, if you use a client, you won’t be able to add a portal or reporting to your deployment. + +![Installing on more than one server](../../admin/_img/ic665322.png) + +If you use advanced on a client operating system, you don’t need any domain accounts. On a server, you must have at least one domain account, which you can use for all of the following identities: + +- The service account for Team Foundation Server. +- The report reader account for creating HTML reports. +- The service account for new installations of SharePoint Foundation. + +For more information about accounts, see [Accounts required for installation of Team Foundation Server](../../../accounts/requirements.md#accounts). + +> [!TIP] +> Access the Team Foundation Server Configuration tool by launching Team Foundation Server Administration Console, choosing **Application Tier**, and then choosing **Configure Installed Features**. + +**Required permissions** +You must be a member of the **Administrators** security group on the server on which you will install TFS. If you plan to configure reporting, you must also be a member of the **Administrators** security group on the server that is running SQL Server Reporting Services. If you plan to configure SharePoint, you must be a member of the **Farm Administrators** group on the SharePoint administration site. If you did not install the Database Engine that will host the configuration database or a database administrator manages the instance of SQL Server that you are using, you must be a member of **sysadmin** Server role in SQL Server. + +> [!TIP] +> If you or your database administrator want a better understanding of the required SQL Server permissions, see the following page on the Microsoft website: [Database Permissions Required to Configure TFS](https://blogs.msdn.microsoft.com/bharry/2010/08/20/database-permissions-required-to-configure-tfs/). + +### To configure Team Foundation Server using the advanced configuration + +1. In the Team Foundation Server Configuration tool, start the advanced wizard and read the Welcome screen. + + ![Choose Advanced](../../admin/_img/ic676478.png) + +2. In **SQL Server Instance**, type the name of the server that is running SQL Server or the named instance that will host the configuration databases. + + ![Specify a database server](../../admin/_img/ic742581.png) + + You also have these options: + + - Select **This instance is a SQL AlwaysOn Availability Group** to specify that the SQL Server instance is an Availability Group Listener (AGL) and its availability group will host the TFS databases created during set up. See [Use SQL Server 2012 Always On Availability Groups with Team Foundation Server](../sql-server/use-always-on-groups.md). + + - In **Server Database Label**, type a label string, which is then embedded into all three of the default database names. + + This technique enables you to use a single instance of SQL Server to host multiple configuration databases. + + - Select the **Use pre-existing empty database(s) **check box, and then specify databases that are hosted on the server that is named in **SQL Server Instance**. + + You must create names for these databases by using the default naming structure, with or without a label. You can find the default naming structure under **Team Foundation Server Databases**. + + - Test the connectivity to SQL Server. + + ![Specify any optional database server details](../../admin/_img/ic676480.png) + +3. Choose **Use a system account**. To use a domain or local account, choose **Use a user account**. User accounts require a password. To test the user account and password combination, choose **Test**. + + ![Specify a system account](../../admin/_img/ic742582.png) + + Network Service is the default value for the TFS service account. + + > [!TIP] + > If your report server and SharePoint servers are not installed on the same server as TFS, you should add the account you use here to the Farm Administrators group (for SharePoint) and the content manager group on the report server. If you’re installing TFS on the same server as the report server and SharePoint, this account is added to these groups automatically. + +4. Choose **NTLM** as an **Authentication Method**. If you choose **Negotiate (Kerberos)**, Kerberos authentication is attempted first. If that attempt fails, NTLM authentication is used. + + ![Specify authentaication](../../admin/_img/ic676482.png) + + NTLM is the default setting. + +5. Accept the default **Port** number. Otherwise, enter a different one. This is the port number clients will use to connect to TFS. + + ![Specify listener port](../../admin/_img/ic742583.png) + + The default value for **Port** is **8080**. + +6. Set up your file cache location. Make sure you have at least 50 Gb of free space. If you use a drive other than your Windows drive, TFS will perform better. + + ![File cache folder](../../admin/_img/ic752293.png) + +7. Accept the default virtual directory or specify something else. + + ![Specify virtual directory](../../admin/_img/ic677247.png) + + The default value for **Virtual Directory** is **tfs**. + +8. Under **Web Site**, note the TFS Site URL, which is dynamically assembled based on your input in **Port** and **IIS Virtual Directory**. Developers will use this URL to connect to TFS. + + ![Take note of the site URL.](../../admin/_img/ic676485.png) + + On a client operating system, you must skip to step 10. You can’t add a portal or reporting (steps 8 and 9) on a client operating system. + +9. Choose **Configure Reporting for use with Team Foundation Server** to use reporting. Otherwise, clear the check box to skip it. + + ![Choose to configure reporting](../../admin/_img/ic742585.png) + + 1. Type the name of the server that is running SQL Server Reporting Services in **Reporting Services Instance** and choose **Populate URLs.** + + The URLs for the report server and its management site appear in the drop-down lists for **Report Server URL** and **Report Manager URL**. + + ![Choose Populate URLs](../../admin/_img/ic742586.png) + + 2. Make sure that the values displayed are the URLs that you want to use for TFS. + + ![Double check you have the right URLs](../../admin/_img/ic676488.png) + + 3. Type the name of the server that is running SQL Server Analysis Services in **SQL Analysis Services Instance**. + + To test the connectivity to SQL Server, choose **Test**. + + ![Specify the instance of Analysis servies](../../admin/_img/ic676780.png) + + 4. Type the name and password of the report reader account. To test the user account and password combination, choose **Test**. + + ![Specify the report reader](../../admin/_img/ic742587.png) + + > [!TIP] + > If you specified a user account for the service account of TFS in step 3, you must select the **Use a different account than the Team Foundation Server service account for the report reader account** check box to use a different account. + +10. Choose **Configure SharePoint Products for use with Team Foundation Server** to use SharePoint. Otherwise, clear the check box to skip it. + + ![Choose to configure SharePoint](../../admin/_img/ic742588.png) + + If you chose to configure SharePoint, then you have two choices—either install and configure SharePoint on this machine or specify a SharePoint location. Here are the details: + + - Install and configure SharePoint on this machine + + 1. Choose **Install and configure SharePoint on this machine**. + + ![Choose to install SharePoint](../../admin/_img/ic742589.png) + + 2. Choose the big **Install SharePoint Foundation 2013** button. When the install finishes, choose **Next**. + + ![Choose the big button](../../admin/_img/ic676784.png) + + > [!NOTE] + > If the SharePoint installation requires a reboot, you might need to reenter some of the information you previously entered in this wizard. + + 3. Type a user account and password for the service account for SharePoint Foundation. If you specified a user account for the service account of TFS in step 3, you must select the **Use a different account than the Team Foundation Server service account for the SharePoint farm** check box to use a different account. + + ![Use the report reader account](../../admin/_img/ic742590.png) + + - Specify a SharePoint location + + 1. Choose **Specify a SharePoint location** and then choose **Next**. + + 2. In **Site URL**, type the URL for the SharePoint web app. + + 3. In **Administration URL**, type the URL for the SharePoint Central Administration site. To test connectivity to each of these URLs, choose **Test**. + +11. Select the **Create a new team project collection** check box to create a collection, or clear that check box to skip that step. + + If you create a collection, accept the default values, or type a new name and description. + + ![Create a new team project collection](../../admin/_img/ic742591.png) + +12. On the **Review** page, review the settings, and choose **Next** to let the wizard validate your configuration. + + ![Readiness checks validate your system](../../admin/_img/ic742592.png) + + If you run into a problem, you can use the detailed results to identify the issue. If you can, fix the issue, and then choose the link to run the ready checks over again. If you resolved the problem, you’ll be able to configure TFS in the next step. + + ![Use detailed results to troublshoot any problems](../../admin/_img/ic676788.png) + +13. Choose **Configure**. + + The wizard applies configuration settings. This process might take several minutes. + + ![The wizard applies your configurations](../../admin/_img/ic742593.png) + +14. At the success screen, choose **Next**. Review the results of the next success screen, including the connection URL for TFS and any details about the installation. + + ![Take note of your connection URL](../../admin/_img/ic742594.png) + +15. Choose **Close**. In the TFS Configuration Center, note that TFS extensions for SharePoint have already been installed, if you installed TFS and SharePoint on the same server. + + ![Configuration results](../../admin/_img/ic677249.png) + + After you close the TFS Configuration Center, the Team Foundation Server Administration Console appears. + +## See Also + +[How to: Set up remote SharePoint Products for Team Foundation Server](../sharepoint/setup-remote-sharepoint.md) + +[Set up Team Foundation Build Service](https://msdn.microsoft.com/en-us/library/ee259687(v=vs.120).aspx) diff --git a/docs/tfs-server/install/install-2013/config-tfs-basic.md b/docs/tfs-server/install/install-2013/config-tfs-basic.md new file mode 100644 index 00000000000..76df485991f --- /dev/null +++ b/docs/tfs-server/install/install-2013/config-tfs-basic.md @@ -0,0 +1,75 @@ +--- +title: Configure Team Foundation Server using the basic configuration +description: Configure Team Foundation Server using the basic configuration +ms.assetid: c76177bf-0530-4a49-ac13-8d5153036046 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Configure Team Foundation Server using the basic configuration + +**TFS 2013** + +![](../_img/ic552206.png) + +You can configure Team Foundation Server to use the basic configuration, which enables you to use SQL Server Express.  + +> [!TIP] +> You can access the Team Foundation Server Configuration tool by launching Team Foundation Server Administration Console, choosing **Application Tier**, and then choosing **Configure Installed Features**. + +**Required Permissions** + +To perform this procedure, you must be a member of the **Administrators** security group on the server that is running Team Foundation Server.  + +### To configure Team Foundation Server by using the basic configuration + +1. In the Team Foundation Server Configuration tool, choose **Basic**, **Start Wizard**. + +2. Read the Welcome screen and decide whether to participate in the program. + +3. Choose **Install SQL Server Express** to host the configuration database on an instance of SQL Server Express. + + > [!TIP] + > You don’t have to use SQL Server Express. You can also choose **Use an existing SQL Server Instance ** and then type the name of the server that is running a supported version of SQL Server or the named instance that will host the configuration database in **SQL Server Instance**. Choose **Test** to test the connectivity to SQL Server. + +4. Review your configurations settings and then choose **Next**. + + The wizard validates your configuration. If you run into a problem, you can use the detailed results to identify the issue. If you can, fix the issue, and then choose the link to run the ready checks over again. If you resolved the problem, you’ll be able to configure TFS in the next step. + +5. Choose **Configure**. + + The wizard applies configuration settings. After the wizard completes, close it. + + > [!TIP] + > Did you get error TF255356 you tried install TFS Basic or Express? It’s a misleading error message. Read this blog post to recover: [TF255356: Known Issue with Configuring TFS 2013 RTM Express and Basic](http://blogs.msdn.com/b/visualstudioalm/archive/2013/12/04/known-issue-with-configuring-tfs-2013-rtm-express-and-basic.aspx) + +6. In the TFS Configuration tool, choose **Configure Team Foundation Build Service**, **Start Wizard**. + +7. Read the Welcome screen, and then choose **Next**. The build service will automatically connect to TFS. + + If you connect to a collection that previously hosted resources for the build service on this server, you're prompted to restore your settings. If you want the same number of controllers and agents, choose **Yes** and then skip to step 9. (If you're upgrading from TFS 2012 or later, we'll save any other build service customizations you made, too.) If you want to configure this build server with different resources, choose **No**. + +8. Choose Use the default setting and specify one build agent. + +9. Choose **Use a system account** to run the build service as Network Service or Local Service. + + > [!TIP] + > You can also run the build service as a domain or local account. Enter the account name and password and choose **Test**. + +10. Review your settings and then choose **Next**. If you run into a problem, use the detailed results to fix the issue, and then run the checks again. + +11. Choose **Configure**. + + The wizard applies configuration settings. After the wizard completes, close it. + + The Team Foundation Server Administration Console appears. + +> [!TIP] +> After you set up TFS and the build service, the next thing to do is [create a team project](../../../accounts/create-team-project.md). + +## See Also + +[Install Team Foundation Server](../get-started.md) diff --git a/docs/tfs-server/install/install-2013/config-tfs-standard.md b/docs/tfs-server/install/install-2013/config-tfs-standard.md new file mode 100644 index 00000000000..19ef01df5e1 --- /dev/null +++ b/docs/tfs-server/install/install-2013/config-tfs-standard.md @@ -0,0 +1,66 @@ +--- +title: Configure Team Foundation Server using the standard configuration +description: Configure Team Foundation Server using the standard configuration +ms.assetid: 6d6a7eb4-a390-4954-9642-d9899f4c6c30 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Configure Team Foundation Server using the standard configuration + +**TFS 2013*** + +![Standard configuration on single server](../_img/std-config-intro.png) + +You can configure Team Foundation Server to use the standard configuration. To complete this procedure, you must have a domain account.  + +For more information about accounts, see [Accounts required for installation of Team Foundation Server](../../../accounts/requirements.md#accounts) + +> [!TIP] +> You can access the Team Foundation Server Configuration tool by launching Team Foundation Server Administration Console, choosing **Application Tier**, and then choosing **Configure Installed Features**. + +**Required Permissions** + +You must be a member of the **Administrators** security group on the server that is running TFS.  + +### To configure Team Foundation Server by using the standard configuration + +1. Choose **Standard Single Server**, and then choose **Start Wizard**. + + The **Team Foundation Server Standard Configuration **wizard appears. + +2. Read the Welcome screen, and then choose **Next**. + +3. In **User Account**, enter the name of the service account that you want to use for SharePoint Foundation. + + This account is also used as the report reader account to create reports. + +4. In **Password**, enter the password for this service account, and then choose **Next**. + +5. Choose **Install SharePoint Foundation 2013**. + +> [!NOTE] +> If the SharePoint installation requires a reboot, you might need to reenter some of the information you previously entered in this wizard. + +6. After Team Foundation Server installs SharePoint Foundation, choose **Next**. + +7. Review the information, and then choose **Next**. + + The wizard validates your configuration. + + If you run into a problem, you can use the detailed results to identify the issue. If you can, fix the issue, and then choose the link to run the ready checks over again. If you resolved the problem, you’ll be able to configure TFS in the next step. + +8. Choose **Configure**. + + The wizard applies configuration settings. + +9. Choose **Next**, **Close**, **Close**. + + The Team Foundation Server Administration Console appears. + +## See Also + +[Install Team Foundation Server](../get-started.md) diff --git a/docs/tfs-server/install/install-2013/install-tfs.md b/docs/tfs-server/install/install-2013/install-tfs.md new file mode 100644 index 00000000000..0a0278dee5c --- /dev/null +++ b/docs/tfs-server/install/install-2013/install-tfs.md @@ -0,0 +1,88 @@ +--- +title: Install Team Foundation Server +description: Install Team Foundation Server +ms.assetid: 5bd14bb5-c5dd-4afb-b983-53df2b33caff +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Install Team Foundation Server + +**TFS 2013** + +![Install on more than one server](../_img/2013-install.png) + +If you intend to have SQL Server and TFS on the same server, then you might be able to use the TFS standard installation wizard, which is designed to streamline the number of decisions you have to make during TFS installation. To use the standard wizard, you have to have SQL Server set up on the default instance (as we did in the SQL Server installation topic) and the reporting features must be installed. We recommend that you have 24 GB of RAM to run SharePoint on the same server as SQL Server. If you’re okay with all these requirements and with the default TFS options¹ (SharePoint Foundation is installed), then use the standard wizard. + +If you want more control over installation options, use the advanced configuration. + +> [!TIP] +> If you want to see the default options for TFS, use the advanced wizard and don’t change any of the default settings. You’ll get the same TFS installation as if you had used the standard wizard. + +## What will I need? + +Whether you use standard or advanced TFS install wizards, you’ll need at least one domain account for the report reader account. TFS uses this account to generate reports. If you let us install SharePoint, we use this same account for the Farm Admin account in SharePoint. + +> [!TIP] +> The report reader account only needs the **Allow log on locally** permission, which all domain accounts have by default. + +## Why use the advanced wizard? + +If you want to change the default installation options for Team Foundation Server, use the advanced wizard, which lets you configure Team Foundation Server on multiple servers and change many other options. + +Why use advanced? The standard installation might not fit your needs. You might want to customize a single server installation or install Team Foundation Server and its configuration database on different servers. Perhaps you already have SQL Server or SharePoint Products running in your organization and you’d like to use one of these installations to host team projects or the data for Team Foundation Server. If you use the optional features that require prerequisite server software, these installations can also be hosted on different servers. If you use multiple servers, you can distribute the load between Team Foundation Server and the configuration database, or you can ensure that prerequisite server software for features such as reporting or the portal site is running on capable hardware. + +Don’t confuse the multiple server installation with the robust scale-out features that Team Foundation Server offers. These scale-out features include the ability to create a Team Foundation Server farm and add a team project collection to an instance of SQL Server that was not part of the original deployment of Team Foundation Server. However, these scale-out features are not part of this scenario. This scenario offers you guidance for an initial deployment of Team Foundation Server that takes advantage of configurable installation options, such as installing TFS on more than one server. For more information about how to add an application-tier server to your deployment of Team Foundation Server, see [How to: Create a Team Foundation server farm (high availability)](../create-tfs-farm.md). + +> [!TIP] +> A multiple-server installation requires an Active Directory domain and domain accounts or the Network Service account. You cannot use local accounts for service accounts. + +## To install Team Foundation Server + +![Step 1](../_img/ic646324.png) Verify that the operating system and hardware meet the requirements for Team Foundation Server and all its prerequisites. You must use a 64-bit server if you install TFS on a server operating system. Determine the report reader account you will use for Team Foundation Server. + +For more information, see [System requirements for Team Foundation Server](../../../accounts/requirements.md), [Accounts required for installation of Team Foundation Server](../../../accounts/requirements.md#accounts). + +![Step 2](../_img/ic646325.png) Install a supported version of SQL Server. You must install these SQL Server features: Database Engine, Full-Text and Semantic Extractions for Search. To get HTML reports from your TFS team projects, add these features: Analysis Services, and Reporting Services – Native + +![SQL R2 installation](../_img/ic665430.png) +For more information, see: [SQL Server requirements for Team Foundation Server](../../../accounts/requirements.md#sql-server), [Manually install SQL Server for Team Foundation Server](../sql-server/install-sql-server.md) + +![Step 3](../_img/ic646326.png) You have a lot of options for SharePoint. If you have SQL Server and TFS on running on the same server, your best alternative might be to install SharePoint on a different server to minimize competition for resources. If you know you want SharePoint Server, you should install and configure it before you install TFS. Remember that you can always skip SharePoint integration altogether by using the TFS advanced wizard. TFS doesn’t require SharePoint. + +![Configure SharePoint Server](../_img/ic665433.png) +For more information, see [SharePoint Products requirements for Team Foundation Server](../../../accounts/requirements.md#sharepoint), [Manually Install SharePoint products for Team Foundation Server](../sharepoint/install-sharepoint.md) + +> [!TIP] +> You can also [verify](../sharepoint/verify-sharepoint.md) and use an existing SharePoint deployment that meets the [TFS requirements for SharePoint](../../../accounts/requirements.md#sharepoint). If you’re existing SharePoint is not on the same server as where you’ll install TFS, you’ll want to first install the TFS SharePoint extensions on the SharePoint site. See [How to: Install Remote SharePoint Products for Team Foundation Server](../sharepoint/setup-remote-sharepoint.md). + +![Step 4](../_img/ic646327.png) Run the Team Foundation Server install from the product DVD and then use one of the configuration wizards to configure your installation. Use the standard wizard if you have SQL Server on the default instance, and TFS will install SharePoint Foundation 2013 for you. For everything else, use the advanced wizard. See, “Why use the advanced wizard?” earlier. + +![Select TFS standard configuration](../_img/ic665325.png) + +For remote SharePoint Products deployments, you can use a special version of the installation program that installs only the Team Foundation Server extensions on the SharePoint Products server. This keeps the server running SharePoint Products tidy. You don’t need to run this special installer on the server running Team Foundation Server, where the extensions are installed by default with most installations of Team Foundation Server. + +> [!TIP] +> If you have a remote portal for your SharePoint Products, you must install Team Foundation Server Extensions for SharePoint Products on the remote portal. If multiple servers are running SharePoint Products in a web farm, you must install and configure these extensions on every server in that farm. + + +To perform this procedure, you must be a member of the **Administrators** security group. + +<a name="installer"></a> +To run the Team Foundation Server installer: + +1. Insert the Team Foundation Server DVD in the drive and launch the tfs\_server.exe file to begin the installation. + + > [!TIP] + > If you don’t want to install all of Team Foundation Server on the server that is running SharePoint Products, launch the tfs_sharePointExtensions.exe file from the SharePoint Extensions folder to install only the Team Foundation Server Extensions for SharePoint Products. + +2. On the license terms dialog box, accept the license terms and then choose **Install Now**. If you want to install Team Foundation Server to a specific location in the file system, choose the browse button **(…)** next to the default install location. + +For more information, see [Configure Team Foundation Server using the advanced configuration](config-tfs-advanced.md) and [Configure Team Foundation Server using the standard configuration](config-tfs-standard.md). + +## See Also + +[Set up Team Foundation Build Service](https://msdn.microsoft.com/en-us/library/ee259687(v=vs.120).aspx) diff --git a/docs/tfs-server/install/install-proxy-setup-remote.md b/docs/tfs-server/install/install-proxy-setup-remote.md new file mode 100644 index 00000000000..5cf8111d395 --- /dev/null +++ b/docs/tfs-server/install/install-proxy-setup-remote.md @@ -0,0 +1,161 @@ +--- +title: How to Install Team Foundation Proxy and set up a remote site +description: How to Install Team Foundation Proxy and set up a remote site +ms.assetid: 21880717-de0c-4ded-8e07-92312d7f5216 +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# How to: Install Team Foundation Proxy and set up a remote site + +**TFS 2013** + +![Team Foundation Proxy](_img/ic588492.png) + +If you have developers at a remote site who are sharing code with developers at the main site, you might save bandwidth by caching version control files at the remote location. Team Foundation Server Proxy distributes popular version control files from its cache at the remote site, rather than having multiple developers from the remote site each download the same file from the main site. Your team at the remote site works like they always have, without managing which version control files get loaded into the cache. + +To set this up, you install and configure the proxy server at the remote site, connect the proxy server to the application tier, and then connect the version control feature of Team Explorer to the proxy. Before you can start to cache files at the remote site, you must add the service account for the proxy server to Team Foundation Server at the main site. + +## To cache version control files at a remote site + +| | Task | Detailed instructions | +| --- | --- | --- | +| ![Step 1](_img/ic646324.png) | **Check for supported hardware and software**. Verify that the operating system meets requirements for Team Foundation Server Proxy and that the hardware can run it. | [System requirements for Team Foundation Server Proxy](../../accounts/requirements.md#proxy-server) | +| ![Step 2](_img/ic646325.png) | **Set up Team Foundation Server Proxy**. Install Team Foundation Server Proxy. After the installation is finished, use the Team Foundation Server Configuration Tool to configure your proxy server. | [Run Team Foundation Server installation](install-2013/install-tfs.md#installer) <br/> [How to: Configure Team Foundation Server Proxy Using the Team Foundation Server Configuration Tool](#config--proxy-with-config-tool) | +| ![Step 3](_img/ic646326.png) | **Connect Team Explorer to Team Foundation Server Proxy**. After you configure the proxy server to connect to Team Foundation Server, you must configure Team Explorer to access version control files through the proxy server. | [How to: Configure Team Foundation version control to use Proxy server](#config-to-use-proxy) | + + +<a name="config--proxy-with-config-tool"></a> +## Configure Team Foundation Server Proxy Using the Team Foundation Server Configuration Tool + +![](_img/ic588492.png) + +You can use these procedures to configure Team Foundation Server Proxy. + +>**Note:** +>You can access the Team Foundation Server Configuration tool from the **Start** menu by launching Team Foundation Server Administration Console, choosing **Proxy Server**, and then choosing **Configure Installed Features**. + +**Required permissions**: To follow this procedure, you must be a member of the **Administrators** security group on the server on which you are configuring Team Foundation Server Proxy. You must be a member of the Project Collection Administrators group on TFS. + +For VSTS you either need to be a collection admin or have manage proxy permissions on the Proxy namespace. You can grant that using: + +> [!NOTE] +> You must have a proxy server at TFS 2017 Update 2 and newer to use the following command. + +```no-highlight +tfssecurity /a+ Proxy Proxy Manage <user account> ALLOW /collection:{collection url} +``` + +<br /> +To configure Proxy Server, you must have TFS installed on a server operating system. For more information, see [System requirements for Team Foundation Server](../../accounts/requirements.md). + +To configure Team Foundation Server Proxy by using Team Foundation Server Configuration tool, follow these steps: + +1. Choose **Configure Team Foundation Server Proxy**, and then choose **Start Wizard**. + + The Team Foundation Server Proxy Configuration wizard appears. + +2. Read the Welcome screen, and then choose **Next**. If you had a version of TFS 2013 proxy (this feature only works with TFS 2013 proxy and forward) set up on this server, you're prompted to restore your settings. If you want to configure this proxy server with different resources, choose **No** and move on to the next step. If you want to connect proxy to the same TFS servers, choose **Yes**. TFS will attempt to authenticate. If TFS successfully authenticates all endpoints, skip to step 4. + + If there is a problem with one or more endpoints, you have the following troubleshooting options for each failed connection: + + - **Connect**: Use this option to manually authenticate endpoints. Manual authentication is a good place to start with any failed connection. + + - **Skip**: Use this option to skip authentication. Skip is useful if you don't have the password to authenticate this endpoint, but you want to save the connection information for another try, sometime in the future, perhaps when you have someone available who knows the password and can authenticate the endpoint. + + - **Remove**: Use this option to completely remove the endpoint. + + >**Tip:** + >Would you like more details about what happens with any of these options? See this [blog post](http://blogs.msdn.com/b/tfsao/archive/2013/06/27/how-to-verify-skipped-proxy-endpoints.aspx). + +3. Choose **Browse**, and then choose the team project collection to which you want this proxy server to connect. Choose **Next**. + + >**Note:** + >If your team project collection is on Visual Studio Team Services, you're prompted to authenticate. Enter the Microsoft account you used to set up the service. + +4. Under **Service Account**, choose **Use a system account** to use Network Service or **Use a user account** to use a domain or local account. If you are using a user account, you must type the password. To test the user account and password combination, choose **Test.** + + Network Service is the default value for the proxy server service account. + +5. The following optional configurations appear under **Advanced Configuration**: + - If you're connected to the hosted service, **Account Name** appears here. + + When you created the instance of Team Foundation Server on the hosted service, Account Name was automatically created for you. This account will be added to the **Project Collection Proxy Service Accounts** group on the hosted service. To use a different account, enter the account name and choose **Test**. To reset to the default service account automatically created for you, choose **Reset to default service account**. *This is no longer applicable for TFS 2017 Update 2 and newer proxy servers.* + + - You can change authentication settings. Under **Authentication Method**, choose **NTLM** to use NTLM authentication or **Negotiate (Kerberos)** to first attempt Kerberos authentication, the more secure option, and if that fails, fall back to NTLM. + + NTLM is the default value. + +6. Choose **Next**. + +7. In **Port**, accept the default value of 8081 or type a different listener port number for incoming connections to Team Foundation Server Proxy. + + 8081 is the default value. + +8. In **Cache Root Directory**, accept the default value, or type the path of a different location in which to store cache files. + + The default value is *Drive*:\\Program Files\\TFS 12.0\\Version Control Proxy\\ \_tfs\_data + + *Drive* is the letter of the drive on which you want to store cache files. You can specify a mapped network drive. + +9. Choose **Next**. + +10. On the Review page, review the settings, and then choose **Next**. + + The wizard validates your configuration. + +11. Choose **Configure** for the wizard to apply configuration settings. + +12. Choose **Next** on the success screen to read the detailed results on the next success screen. You will also find a link to a log on this screen that contains the results of the configuration. + +13. Choose **Close** twice and the TFS administration console will appear. + + + +<a name="config-to-use-proxy"></a> +## Configure Team Foundation version control to use Proxy server + +You can configure Team Foundation version control to use a proxy server, which caches copies of version control files in the location of a distributed team. You may reduce bandwidth requirements for remote developers by using a proxy server. + +To follow this procedure, you must be a member of the Users security group on the computer on which you are configuring Team Explorer. + +To configure Team Explorer to use Team Foundation Server Proxy: + +1.Launch Visual Studio. + +2.On the **Tools** menu, choose **Options**. + +3.In the **Options** dialog box, expand **Source Control**, and then choose **Visual Studio Team Foundation Server**. + +4.Select the **Use proxy server for file downloads** check box. + +5.In the **Proxy server name box**, type the name of the server running Team Foundation Server Proxy. + +6.In the **Port** box, type the listener port for Team Foundation Server Proxy. By default, Team Foundation Server Proxy listens for client requests on port 8081. + + + +## Q&A + +### Q: Is TFS 2013 Proxy backward compatible with previous versions of TFS? + +**A**: Yes. TFS 2013 Proxy is fully compatible with TFS 2010 and TFS 2012. In fact, TFS Proxy 2010, TFS Proxy 2012, and TFS Proxy 2013 are fully compatible with one another in any combination. For example, you can use TFS Proxy 2010 with TFS Server 2013 or vice versa. + +### Q: Does any version of TFS Proxy have cache cleanup improvements to support disks larger than 1 TB? + +**A**: Yes. TFS Proxy 2012 and TFS Proxy 2013 have cache cleanup improvements to support large disks. + +### Q: Does TFS Proxy 2013 have corruption detection logic? + +**A**: Yes. If a cached file becomes corrupted on a disk after it was stored, TFS Proxy 2013 has logic to detect the corruption. + +### Q: Does TFS Proxy 2013 fully support caching against VisualStudio.com? + +**A**: Yes. + +### Q: What happens to the proxy cache when I upgrade from one version of TFS to another? + +**A**: If you upgrade from TFS Proxy 2010, TFS Proxy 2012, or TFS Proxy 2013, the cache is preserved during upgrade. You will be able to continue accessing TFS from remote locations right away, without any performance impact, because TFS will not need to recreate or repopulate the cache. diff --git a/docs/tfs-server/install/multiple-server.md b/docs/tfs-server/install/multiple-server.md new file mode 100644 index 00000000000..da297b4e964 --- /dev/null +++ b/docs/tfs-server/install/multiple-server.md @@ -0,0 +1,158 @@ +--- +title: How to set up TFS in a multiple server configuration +description: How to set up Team Foundation Server in a multiple server configuration using the full configuration wizard +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: F31E31CA-6E48-4726-B527-6E4F2C6BCB86 +toc: show +ms.manager: douge +ms.author: douge +ms.date: 08/04/2016 +--- + +# How to set up TFS in a multiple server configuration + +**TFS 2017** | **TFS 2015** + +You can scale TFS up for thousands or tens of thousands of users +by deploying your application tier across many servers, +and you can ensure high availability by using SQL Server AlwaysOn Availability Groups. + +> If you have an existing installation of TFS and you want to upgrade it, +> [use the upgrade wizard](../upgrade/run-upgrade-wizard.md). + +## Data tier + +0. Set up your SQL Server deployment using an [appropriate version of SQL Server](../../accounts/requirements.md#sql-server). +Your deployment can be a single instance of SQL Server or an [AlwaysOn Availability Group](https://msdn.microsoft.com/library/gg509118.aspx). +When you set up SQL Server up for TFS, install the database engine and the full text search services. + + ![SQL_SERVER_FEATURES](_shared/_img/sql-features.png) + +0. Configure the firewall on each of the servers +to [allow access to the SQL Server database engine](https://msdn.microsoft.com/library/ms175043.aspx) +so that TFS can get through the firewall to connect to the SQL Server database engine +from the application tier server. + +### Reporting + +If you're going to enable reporting, prepare the data tier servers for that. + +0. Install SQL Server Analysis Services. + + You can install Analysis Services on the server or AlwaysOn Availability Group where you installed the database engine, + or you can install it on a separate SQL Server instance or a separate AlwaysOn Availability Group. + +0. Configure the firewall on each of the Analysis Services servers +to [allow access to Analysis Services](https://msdn.microsoft.com/library/ms174937.aspx). + +0. Install and configure SQL Server Reporting Services. + + You can install Reporting Services on the server or AlwaysOn Availability Group where you installed the database engine or Analysis Services, + or you can install it on a separate SQL Server instance or a separate AlwaysOn Availability Group. + +0. Configure the firewall on each of the Reporting Services servers +to [allow access to Reporting Services](https://msdn.microsoft.com/library/bb934283.aspx). + +### SharePoint + +If you're going to enable SharePoint integration, prepare the data tier servers for that. + +0. Install [an appropriate version of SharePoint](../../accounts/requirements.md#sharepoint). + + You can install SharePoint Products on the server or AlwaysOn Availability Group where you installed the database engine, + Analyisis Services, or Reporting Services, + or you can install it on a separate SQL Server instance or a separate AlwaysOn Availability Group. + + If you already have SharePoint deployed, you can use that deployment instead of installing a new one. + +0. Using the TFS Configuration Center, install the Team Foundation Server Extensions for SharePoint Products on your SharePoint server. + + ![Extensions for SharePoint Products int the TFS Configuration Center](_img/tfs-extensions-for-sharepoint.png) + +0. Add the identity of each of the application tier servers that you'll set up - *{domain}\\{app-tier-server}$* - +to the Farm Administrators group in SharePoint. + +## Application tier + +You can scale up the application tier by installing TFS on multiple application tier servers. + +### First application tier server. + +0. If you're going to enable reporting, install SQL Server Client Tools Connectivity on the application tier server. + + ![SQL Server Client Tools Connectivity feature installation](_img/sql-client-tools-connectivity.png) + +0. [Download](https://www.visualstudio.com/downloads/visual-studio-2015-downloads-vs.aspx) and install TFS and run the full configuration wizard. + + ![Full configuration wizard](_img/full-configuration-wizard.png) + +0. On the database page, point to the SQL Server instance on the data tier and test the connection. + + ![Dabatase page in the full configuration wizard](_img/database.png) + +0. Set the service account and authentication method. + + ![Service account page in the full configuration wizard](_img/service-account-and-authentication.png) + + By default, TFS services will run as a network service in a domain + or as local system in a workgroup. + On a domain, + you can use a domain account + and grant it only the permissions that the TFS service account needs. + +#### Reporting + +0. If you want to enable reporting, turn it on here. + + ![Configure reporting checkbox](_img/configure-reporting.png) + +0. Set the reporting service instance to your data tier and populate the reporting URLs. + + ![Reporting services page in the full configuration wizard](_img/reporting-service-instance.png) + +0. Set the account that will be assigned the Reports Reader role in the Analysis Services instance +and test that the account and password can be authenticated. +Reports use this account when they access the Analysis Services database. + + ![Report reader account page in the full configuration wizard](_img/report-reader-account.png) + +#### SharePoint + +0. Point to your SharePoint instance and TFS will configure the site in SharePoint and hook it up to TFS. + + ![Sharepoint page in the full configuration wizard](_img/sharepoint.png) + + If you don't know the administration URL, go to the start menu and run the SharePoint administration application. + That will open the adminstration web page and you can get the port from the URL in your browser. + +### Additional application tier servers + +0. If you're going to enable reporting, +install SQL Server Client Tools Connectivity on each additional application tier server. + + ![SQL Server Client Tools Connectivity feature installation](_img/sql-client-tools-connectivity.png) + +0. [Download](https://www.visualstudio.com/downloads/visual-studio-2015-downloads-vs.aspx) and install TFS and run the application tier only configuration wizard. + + ![Application tier only configuration wizard](_img/app-tier-only.png) + +0. Point to the SQL Server instance that is the primary replica in the AlwaysOn Availability Group +where you installed the database engine, +and list the available databases. + + ![Database page in the application tier only configuration wizard](_img/databases-app-tier-only.png) + +0. Set the service account and authentication method. + + ![Service account page in the full configuration wizard](_img/service-account-app-tier-only.png) + +## AlwaysOn Availability Group + +If you installed the database engine on a SQL Server AlwaysOn Availability Group, +add the TFS databases to the availability group. +- TfsConfiguration +- TfsDefaultCollection + +If you add a new project collection to TFS, add that database to the AlwaysOn Availability Group, too. + diff --git a/docs/tfs-server/install/sharepoint/_img/IC666679.png b/docs/tfs-server/install/sharepoint/_img/IC666679.png new file mode 100644 index 00000000000..d8175c22dff Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666679.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666680.png b/docs/tfs-server/install/sharepoint/_img/IC666680.png new file mode 100644 index 00000000000..4c7678a7fbb Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666680.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666681.png b/docs/tfs-server/install/sharepoint/_img/IC666681.png new file mode 100644 index 00000000000..9e0d9570f28 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666681.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666682.png b/docs/tfs-server/install/sharepoint/_img/IC666682.png new file mode 100644 index 00000000000..46b8b1b10ee Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666682.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666683.png b/docs/tfs-server/install/sharepoint/_img/IC666683.png new file mode 100644 index 00000000000..3d7f874d9dc Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666683.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666684.png b/docs/tfs-server/install/sharepoint/_img/IC666684.png new file mode 100644 index 00000000000..a6007ad0ba4 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666684.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666685.png b/docs/tfs-server/install/sharepoint/_img/IC666685.png new file mode 100644 index 00000000000..defc86bc4b2 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666685.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666686.png b/docs/tfs-server/install/sharepoint/_img/IC666686.png new file mode 100644 index 00000000000..66fb5538754 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666686.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666687.png b/docs/tfs-server/install/sharepoint/_img/IC666687.png new file mode 100644 index 00000000000..51c0e2e5e7e Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666687.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666688.png b/docs/tfs-server/install/sharepoint/_img/IC666688.png new file mode 100644 index 00000000000..2594c166b7a Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666688.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666689.png b/docs/tfs-server/install/sharepoint/_img/IC666689.png new file mode 100644 index 00000000000..696e7180405 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666689.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666690.png b/docs/tfs-server/install/sharepoint/_img/IC666690.png new file mode 100644 index 00000000000..66e738f4016 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666690.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC666691.png b/docs/tfs-server/install/sharepoint/_img/IC666691.png new file mode 100644 index 00000000000..7b1a017a50a Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC666691.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667095.png b/docs/tfs-server/install/sharepoint/_img/IC667095.png new file mode 100644 index 00000000000..34f8a25e9d2 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667095.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667096.png b/docs/tfs-server/install/sharepoint/_img/IC667096.png new file mode 100644 index 00000000000..0cf1d9825e5 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667096.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667097.png b/docs/tfs-server/install/sharepoint/_img/IC667097.png new file mode 100644 index 00000000000..c7d99e75863 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667097.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667098.png b/docs/tfs-server/install/sharepoint/_img/IC667098.png new file mode 100644 index 00000000000..e39517b0e08 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667098.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667099.png b/docs/tfs-server/install/sharepoint/_img/IC667099.png new file mode 100644 index 00000000000..4f0b31ec012 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667099.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667100.png b/docs/tfs-server/install/sharepoint/_img/IC667100.png new file mode 100644 index 00000000000..d1bea288759 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667100.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667101.png b/docs/tfs-server/install/sharepoint/_img/IC667101.png new file mode 100644 index 00000000000..1d771f6ce1a Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667101.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667102.png b/docs/tfs-server/install/sharepoint/_img/IC667102.png new file mode 100644 index 00000000000..113c8adae3a Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667102.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667103.png b/docs/tfs-server/install/sharepoint/_img/IC667103.png new file mode 100644 index 00000000000..5178e502eb1 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667103.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667104.png b/docs/tfs-server/install/sharepoint/_img/IC667104.png new file mode 100644 index 00000000000..27f2e6dbbb3 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667104.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667396.png b/docs/tfs-server/install/sharepoint/_img/IC667396.png new file mode 100644 index 00000000000..c446b18d259 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667396.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667397.png b/docs/tfs-server/install/sharepoint/_img/IC667397.png new file mode 100644 index 00000000000..7a5c714db42 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667397.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667398.png b/docs/tfs-server/install/sharepoint/_img/IC667398.png new file mode 100644 index 00000000000..3457e4928f6 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667398.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667399.png b/docs/tfs-server/install/sharepoint/_img/IC667399.png new file mode 100644 index 00000000000..3680972892f Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667399.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667400.png b/docs/tfs-server/install/sharepoint/_img/IC667400.png new file mode 100644 index 00000000000..d6a18a2f286 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667400.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667401.png b/docs/tfs-server/install/sharepoint/_img/IC667401.png new file mode 100644 index 00000000000..2668209de46 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667401.png differ diff --git a/docs/tfs-server/install/sharepoint/_img/IC667402.png b/docs/tfs-server/install/sharepoint/_img/IC667402.png new file mode 100644 index 00000000000..1e259353783 Binary files /dev/null and b/docs/tfs-server/install/sharepoint/_img/IC667402.png differ diff --git a/docs/tfs-server/install/sharepoint/config-enterprise-app-def.md b/docs/tfs-server/install/sharepoint/config-enterprise-app-def.md new file mode 100644 index 00000000000..65c91209760 --- /dev/null +++ b/docs/tfs-server/install/sharepoint/config-enterprise-app-def.md @@ -0,0 +1,28 @@ +--- +title: Configure the enterprise application definition for Team Foundation Server +description: Configure the enterprise application definition for Team Foundation Server +ms.assetid: 0d1eb936-a6fa-455c-8fdb-19b1c36f8c6e +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 09/09/2017 +--- + +# Configure the enterprise application definition for Team Foundation Server + +[!INCLUDE [temp](../../_shared/about-sharepoint-deprecation.md)] + +If you’re using a supported enterprise edition of SharePoint Server, you must add the enterprise application definition to your deployment of Team Foundation Server. You created the enterprise application definition when you [configured SharePoint for dashboard compatibility](install-sharepoint.md). You must perform this configuration before reports and dashboards will appear correctly in Team Foundation Server.  + +### To configure the enterprise application definition + +1. On the server that is running Team Foundation Server Extensions for SharePoint Products, open the administration console for Team Foundation Server. +2. Choose **Extensions for SharePoint Products**, and then choose the SharePoint web application for which you want to configure the enterprise application definition. +3. Choose **Modify access**, enter the name of the enterprise application definition in **Enterprise Application Definition (optional)**, and then choose **OK**. + +## See Also + + [Install Team Foundation Server](../install-2013/install-tfs.md) + [How to: Set up remote SharePoint Products for Team Foundation Server](setup-remote-sharepoint.md) + \ No newline at end of file diff --git a/docs/tfs-server/install/sharepoint/install-sharepoint.md b/docs/tfs-server/install/sharepoint/install-sharepoint.md new file mode 100644 index 00000000000..0536c673a47 --- /dev/null +++ b/docs/tfs-server/install/sharepoint/install-sharepoint.md @@ -0,0 +1,305 @@ +--- +title: Manually Install SharePoint products for Team Foundation Server +description: Manually Install SharePoint products for Team Foundation Server +ms.assetid: 38b11ed7-6556-4aa0-bfa5-16661c74cb10 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 09/09/2017 +--- + +# Manually Install SharePoint products for Team Foundation Server + +[!INCLUDE [temp](../../_shared/about-sharepoint-deprecation.md)] + +This procedure is for installing and configuring SharePoint Server 2013 on the same server as TFS and SQL Server. + +We’re going to install SharePoint after we install SQL Server, so that we can use the same Database Engine instance we installed for TFS for our SharePoint deployment, although using the same SQL Server instance for both SharePoint and TFS is not a requirement. + +> [!TIP] +> Installing SharePoint on the same server as TFS isn’t a requirement either. TFS is very flexible with regard to the topology of your SharePoint installation. See “What If I Already Have SharePoint?” later. + +## Do I even need SharePoint? + +Maybe. SharePoint is a collaboration website product that offers deep integration with Office products like Word, Outlook, and Excel. Although it’s not a TFS requirement, some teams do find its features useful. SharePoint is different from the Team Web Access site that comes with TFS. Team Web Access is a website that mirrors Visual Studio features and offers functionality for certain specialized team collaborations that relate to creating software projects. You get Team Web Access by default when you install TFS. + +You don’t need to add SharePoint to your initial TFS installation. You can always install TFS first, add SharePoint later, and then manually hook up each of your TFS team projects to SharePoint. + +## What will I need? + +Assuming you still want SharePoint in your TFS deployment, you’ll need a single domain account to act as the TFS Report Reader account. TFS uses this account to generate reports. (Even if you don’t set up SharePoint, you’ll need a report reader account to generate reports). We’re going to use the report reader account for reports, but we’ll also use it as the Farm Administrator account for our SharePoint installation, just as TFS would during a standard install. + +> [!TIP] +> Don’t put the report reader account in the Windows Administrators security group. It just needs the Allow log on locally permission, which all domain accounts have by default. + +## Free SharePoint vs. paid-for SharePoint + +For each version of SharePoint, Microsoft delivers a free version and a paid-for version with additional functionality. TFS always comes with one of the free versions. However, TFS supports both versions and the instructions for installing either are very similar. + +If you use the enterprise edition of SharePoint Server, as we are going to in this topic, you must make a few additional SharePoint configurations after you install SharePoint (and before you install TFS) to enable TFS dashboard functionality on the SharePoint site. If you install any other version of SharePoint, you can skip the extra dashboard configurations in this topic. You’ll still get some dashboard functionality, but not as much as if you had the enterprise edition of SharePoint Server. + +### Dashboard differences between SharePoint products + +Team Foundation Server contains dashboards that use SharePoint Products features to display team data. The dashboards that are available to you depend on the version of SharePoint that you use. + +- If you use any supported enterprise edition of SharePoint Server, you get five dashboards that are based on Microsoft Excel.  + +- If you use any other SharePoint Product (including the standard editions of SharePoint Server), you get two dashboards that are based on SQL Server Reporting Services. + +## What if I already have SharePoint? + +If your existing SharePoint installation meets the TFS requirements for SharePoint, you can [verify your existing SharePoint deployment](verify-sharepoint.md) and then integrate it with TFS. Before you verify, review the [SharePoint requirements for TFS](../../../accounts/requirements.md#sharepoint). + +> [!TIP] +> You can use a remote SharePoint installation—an instance of SharePoint that is not installed on the TFS server—but to do this you’ll need to install the TFS extensions for SharePoint on the SharePoint server. See [How to: Install Remote SharePoint Products for Team Foundation Server](setup-remote-sharepoint.md). + +## To install SharePoint 2013 products for TFS + +**Required Permissions** + +You must be a member of the **Windows Administrators** security group on the computer where you install SharePoint Products and where you host its databases. + +Before you install any SharePoint 2013 product, run the SharePoint 2013 Products preparation tool. After preparing the server, you’ll install SharePoint, and then do whatever post installation configuration tasks are appropriate for the product you just installed. + +Remember that you’ll need a single domain account to act as the TFS Report Reader account to install SharePoint Server 2013. See, [What will I need?](#what-will-i-need)? + +### Run the preparation tool + +1. Insert the SharePoint Server 2013 DVD and launch default.hta, or [download SharePoint Foundation 2013](https://www.microsoft.com/download/details.aspx?id=35488) and run sharepoint.exe. + + You can find detailed information about [SharePoint Products requirements for Team Foundation Server](../../../accounts/requirements.md#sharepoint) on MSDN, but this instruction will guide you through typical installations. + +2. Choose **Install software prerequisites**. + + ![Install software prerequisites](_img/ic666679.png) + +3. On the Welcome page, choose **Next**. + +4. On the license agreement page, accept the terms of the license and choose **Next**. + + Depending on the state of your computer, the installer might prompt you to restart the machine. Follow any instructions. + + ![Restart the machine](_img/ic666680.png) + + After a restart, you might have to run the SharePoint Products prep tool again, if it doesn’t start automatically. Repeat the previous four steps for manual restarts until you get a success message. + +5. At completion, choose **Finish**. + + ![Prep tool success message](_img/ic666681.png) + +### Run the SharePoint installation + +Once the SharePoint Products Perpetration tool finishes, you might have to launch the SharePoint installer again, especially if you had to restart your computer. + +Remember that you’ll need a single domain account to act as the TFS Report Reader account to complete this section. See “What will I need?” earlier in this topic. + +1. Insert the SharePoint Server 2013 DVD and launch default.hta, or run sharepoint.exe (for SharePoint Foundation installations). + +2. Choose **Install SharePoint Server** this time (or Install SharePoint Foundation). + + ![Install SharePoint Server](_img/ic666682.png) + + If you are installing SharePoint Server, type your product key, and choose **Continue**. + +3. Read and accept the agreement. Choose **Continue**. + +4. On the **Server Type** tab, choose **Complete**. + + ![Choose Complete](_img/ic666683.png) + +5. Choose **Install Now**. + + When the installation wizard finishes, a dialog box appears that prompts you to complete the configuration of your server. + +6. In that dialog box, verify that the **Run the SharePoint Products and Technologies Configuration Wizard now** check box is selected. + + ![Run the wizard check box](_img/ic666684.png) + +7. Choose **Close** to start the configuration wizard. + +8. On the Welcome page, choose **Next**. + + > [!NOTE] + > A warning about restarting certain services will appear. Choose **Yes**. Some services might need to be restarted during the configuration phase. + + ![Choose Yes](_img/ic666685.png) + +9. On the **Connect to a server farm** page, choose **Create a new server farm**. + + ![Create a new server farm](_img/ic666686.png) + +10. On the **Specify Configuration Database Settings** page, perform the following steps and then choose **Next**: + + 1. In **Database server**, type the name of the server that is running SQL Server. Accept the default value for database name. + + ![Name of the SQL Server?](_img/ic666687.png) + + > [!TIP] + > If you used a named instance in step 10 of your SQL Server install, type the named instance here. For example, servername\InstanceName. + + 2. Type the name of the report reader account and its password.  + + ![Add report reader account](_img/ic666688.png) + + > [!TIP] + > You can use the same account here that you will use for the report reader account. Even if you use the report reader account here, the account you use to run the wizard will also be added to the SharePoint Farm administrators group. + +11. Type a password in **Passphrase** and confirm it. + +12. On the **Configure SharePoint Central Administration Web Application** page, select the **Specify port number** check box, and type **17012**. + + ![Port number 17012](_img/ic666689.png) + + You can use the randomly generated port number, but Team Foundation Server has always used 17012 as the port for the SharePoint Products administration site. + +13. Choose **NTLM**, and then choose **Next**. + +14. Review the information, and then choose **Next**. + + Configuration begins. + + ![Configuration begins](_img/ic666690.png) + +15. Choose **Finish**. + + ![Install success!](_img/ic666691.png) + + Once the installation routine finishes, it launches the SharePoint administration site, open to the initial configuration wizard. + +### Run the SharePoint Configuration wizards + +No matter which version of SharePoint you install, you must run the SharePoint Configuration wizard. Special instructions appear in step 3 if you’re installing the enterprise edition of SharePoint Server 2013. + +1. Choose **Start the Wizard**. + + ![Start the wizard](_img/ic667095.png) + +2. Select **Use existing managed account** and choose the report reader account. + + ![Use existing managed account](_img/ic667096.png) + +3. If you’re installing SharePoint Server Enterprise edition, as we are, then you’ll need to select **Excel Services** and **Secure Store Service**. + + If you’re installing the Standard edition of SharePoint Server 2013 or SharePoint Foundation, none of the listed services are required, but you must run the wizard to succeed with your TFS installation. Even if you select no services, SharePoint will configure a site collection and some other services. + + Select any services you want to set up. Clear any you don’t want set up. + + SharePoint selects all of them by default. + + > [!TIP] + > Remember that you can always come back later to run the configuration wizards, but to succeed with your TFS installation, you have to run it one time after the SharePoint installation. + +4. Choose **Next**. + + The SharePoint configuration begins and takes a few minutes, depending on the number of services you’re configuring. At some point during the configuration, SharePoint will prompt you to create a site collection. + +5. Type a Title and choose **Next**. + + ![Type a title](_img/ic667097.png) + +6. Choose **Finish**. + + If you’re installing SharePoint Foundation or the standard edition of SharePoint Server, you can skip forward to TFS installation. If you’re installing SharePoint Server 2013, as we are, then configure Excel Services and Secure Store Service in the following sections. + +### Configure Excel Services (SharePoint Server only) + +For TFS reports to operate correctly on a supported enterprise edition of SharePoint Server, you must also configure a trusted file location for Excel Services. + +1. In SharePoint Central Administration, under Application Management, choose **Manage service applications**. + + ![Choose Manage service applications](_img/ic667098.png) + +2. On the Manage Service Applications page, choose **Excel Services Application**. + + ![Choose Excel Services Application](_img/ic667396.png) + +3. On the Manage Excel Services Application page, choose **Trusted File Locations**. + + ![Choose Trusted File Locations](_img/ic667099.png) + +4. Choose **Add Trusted File Location**. + + ![Choose Add Trusted File Location](_img/ic667100.png) + +5. In Address, enter the URL of the root of the SharePoint site. This is the web application that the SharePoint configuration wizards created on port 80. + + ![Configure Trusted File Location](_img/ic667101.png) + +6. In Location Type, choose **Microsoft SharePoint Foundation**. + +7. In Trust Children, select the **Children trusted** check box. + +8. In the External Data section, under Allow External Data, choose **Trusted data connection libraries and embedded**. + +9. (Optional) Clear the Refresh warning enabled check box. + +10. In Maximum Concurrent Queries Per Session, change the number to 20 and choose **OK**. + + The trusted file location you just created appears in the Excel Services trusted file location list. + + ![Trusted File Location added](_img/ic667102.png) + +### Configure Secure Store Service (SharePoint Server only) + +To configure the secure store service, you must create a target application for the secure store. + +1. In SharePoint Central Administration, under Application Management, choose **Manage service applications**. + + ![Choose Manage service applications](_img/ic667103.png) + +2. On the Manage Service Applications page, choose **Secure Store Service**. + + ![Choose Secure Store Service](_img/ic667397.png) + +3. Choose **New** to create a secure store target application for Team Foundation Server. + + ![Create a secure store target application](_img/ic667398.png) + + > [!TIP] + > If you have not created a key, SharePoint Products prompts you to create one by choosing **Generate New Key**. Without a key, you cannot create a target application for the secure store. + + The fields configured in the next four steps are pictured in the next screenshot. + +4. In **Target Application ID** and **Display Name**, enter TFS + + > [!TIP] + > You do not have to use TFS for Target Application ID or Display Name, but take note of whatever you use here, because you will need it to configure Team Foundation Server later. + +5. In Contact E-mail, type the e-mail address of the person or group you want email messages about this application to be sent to + +6. In the Target Application Type list, choose **Group** + +7. In Target Application Page URL, choose **None**. + + ![Configure a secure store target application](_img/ic667104.png) + +8. In Specify the credential fields for your Secure Store Target Application, accept the default settings for the credential fields. + + ![Specify the credential fields](_img/ic667399.png) + +9. In **Target Application Administrators**, type the administrative account for the application. + +10. In **Members**, enter the global security group from the domain that contains all the users to whom you want to grant access to dashboards and reports in Team Foundation Server. + + ![Add global security group](_img/ic667400.png) + +11. On the Secure Store Service Application page, select the check box for the target application that you just created (named TFS if you used the naming guidance that was provided earlier in this topic), and then choose **Set Credentials** in the ribbon. + + ![Set Credentials](_img/ic667401.png) + +12. In the Set Credentials for Secure Store Target Application (Group) dialog box, enter the name and password of the report reader account for Team Foundation Server and confirm the password. + + ![Add report reader account](_img/ic667402.png) + +## Next steps + +With SharePoint Server 2013 installed, you’re ready to move to the topic on TFS installation. + +## See Also + +[Install Team Foundation Server](../install-2013/install-tfs.md) + +[TFS upgrade requirements](../../upgrade/upgrade-2013/upgrade-2013-requirements.md) + +[How to: Set up remote SharePoint Products for Team Foundation Server](setup-remote-sharepoint.md) diff --git a/docs/tfs-server/install/sharepoint/move-sharepoint-new-hardware.md b/docs/tfs-server/install/sharepoint/move-sharepoint-new-hardware.md new file mode 100644 index 00000000000..d49394098d2 --- /dev/null +++ b/docs/tfs-server/install/sharepoint/move-sharepoint-new-hardware.md @@ -0,0 +1,126 @@ +--- +title: Move SharePoint to new hardware for TFS +description: Move SharePoint to new hardware for TFS +ms.assetid: b5cdc973-6538-4a54-812f-e58bb001a398 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 09/09/2017 +--- + +# Move SharePoint to new hardware for TFS + +[!INCLUDE [temp](../../_shared/about-sharepoint-deprecation.md)] + +## Set up a new SharePoint site + +You can install SharePoint Foundation using the TFS extensions for SharePoint wizard. The TFS wizard will install a fresh copy of SharePoint using the installation of SQL Server you just set up, and then configure the TFS extensions for the new installation of TFS. After you install SharePoint, you’ll detach its content database to prepare for the migration of the data from your previous SharePoint installation in step 4, Back up and Restore Data. + +**Required Permissions** + +You must be a member of the administrators security group on Windows Server. + +## Install SharePoint and the TFS extensions + + +Run the TFS installation program from the product DVD and then use the **Configure Extensions for SharePoint Products** wizard. + +### To run the Team Foundation Server installer + +1. Insert the Team Foundation Server DVD in the drive and launch the tfs\_server.exe file to begin the installation. + +2. On the license terms dialog box, accept the license terms and then choose **Install Now**. + + If you want to install Team Foundation Server to a specific location in the file system, choose the browse button (…) next to the default install location. + +### To install SharePoint + +1. In the Team Foundation Server Configuration tool, choose **Configure Extensions for SharePoint Products** and then choose **Start Wizard**. + + ![](../../upgrade/_img/ic666063.png) + + The Team Foundation Server SharePoint Extensions Configuration wizard appears. + +2. Read the** Welcome** screen, and choose **Next**. + +3. Take these steps to install SharePoint: + + 1. Choose the big **Install SharePoint Foundation 2013** button. Once the install completes, choose **Next**. + + 2. Type the name of the SQL Server or named instance that will host the configuration databases for SharePoint and choose **Next**. + + 3. Type a user account and password for the service account for SharePoint and then choose **Next**. + + For more information, see [Accounts required for installation of Team Foundation Server](../../../accounts/requirements.md#accounts) + +4. On the **Review** page, review the settings and choose ** Next**. + + The wizard validates your configuration. + +5. Choose **Configure**. + + The wizard applies configuration settings. This process might take several minutes. + +6. Choose **Next**, **Close**, **Close**. + + The Team Foundation Server Administration Console appears. + +### Add the TFS service account to the Farm Administrator group + + +If you're using the same SharePoint site from your previous deployment, you may already have the TFS service account in the Farm Administrators group. If so, you can skip this step. Otherwise, you should follow the steps below to ensure the service account that you will use for TFS is added to the Farm Administrators group on SharePoint. + +How do you know if this step is necessary? Here are two potential scenarios that would require you to perform this step. + +- If you're planning to change the account you're using for the TFS service account during TFS upgrade, you should add the new account to the Farm Administrators group. + +- If you are using Network Service and you're planning to migrate the TFS application tier to new hardware, you should add the name of the new hardware followed by a $ symbol (Domain\\ServerName$) to the Farm Administrators group. + +### To add the service account to the Farm Administrators group + +1. In a web browser, open the SharePoint 2013 Central Administration site. + +2. Under **Security**, choose **Manage the farm administrators group**. + +3. Choose **New**. + +4. In the Users/Groups box, enter the name of the service account for Team Foundation Server. + + If you're using Network Service, add the server name followed by a $ symbol. For example, domain\\servername$. SharePoint might not find the name but will allow you to enter it into the list. + +5. Choose **Share**. + +### Detach the SharePoint content database + +When you installed SharePoint, a brand new content database was created for SharePoint. You need to detach this database to prepare for the migration of data from your previous SharePoint installation in step 4, Back up and Restore Data. + +### To detach the content database + +1. In a web browser, open the SharePoint 2013 Central Administration site. + +2. Under **Application Management**, choose **Manage Content Databases**. + +3. Choose **WSS\_Content**. + + > [!NOTE] + > WSS_Content is the default name. Your installation might use a custom name for this database. + + The **Manage Content Database Settings** page opens. + +4. Select the **Remove content database** check box, and then choose **OK**. + + > [!NOTE] + > This step detaches the database but does not delete any content. + +5. In the warning dialog box that appears, choose **OK**. + +6. In **Manage Content Database Settings**, choose **OK** to confirm your changes. + +## Next Step: Back up and restore data + +You can use TFS custom backup and restore tools to manage your data. First you’re going to back up your data, including the encryption key on the report server. Next, you’re going to restore your data to the SQL Server instance you set up in step 2. With the restore complete, you’ll use the SQL Server Reporting tool to restart the database, restore the encryption key, and then verify access to the report server. If you installed SharePoint, you’ll use a SharePoint command line tool to attach and upgrade your content database + +For more information, see [Back up and restore data for TFS](../../upgrade/upgrade-2013/backup-and-restore-data.md) + +![](../_img/ic612476.png) diff --git a/docs/tfs-server/install/sharepoint/setup-remote-sharepoint.md b/docs/tfs-server/install/sharepoint/setup-remote-sharepoint.md new file mode 100644 index 00000000000..d2be6be9712 --- /dev/null +++ b/docs/tfs-server/install/sharepoint/setup-remote-sharepoint.md @@ -0,0 +1,108 @@ +--- +title: How to set up remote SharePoint Products for Team Foundation Server +description: How to set up remote SharePoint Products for Team Foundation Server +ms.assetid: daf507f9-ca46-439f-a3c9-c9ef3f917085 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 09/09/2017 +--- + +# Set up remote SharePoint Products for Team Foundation Server + +[!INCLUDE [temp](../../_shared/about-sharepoint-deprecation.md)] + +If you have SQL Server and TFS running on the same server, your best alternative might be to install SharePoint on a different server to minimize competition for resources. The remote SharePoint scenario addresses such an installation. + +Install Team Foundation Server Extensions for SharePoint Products on a remote server +![install extensions on remote portal](../_img/ic548953.png) + +If you want to run SharePoint Products on a server other than Team Foundation Server, you must install Team Foundation Server on the SharePoint server and then configure the TFS Extensions for SharePoint. This installs *all* of TFS on the SharePoint server, including the TFS SharePoint Extensions. The application tier, the build server, and the proxy server appear in the TFS administration console, but you do not have to configure any of these additional features. + +You can install and configure SharePoint Foundation 2013 during the extensions configuration. If you install SharePoint by using the TFS Extensions configuration, it automatically provisions a new SharePoint web application for you during the SharePoint installation. + +## To install Team Foundation Server Extensions for SharePoint Products + +![Step 1](../_img/ic646324.png) Verify that the operating system and hardware or the existing SharePoint Products installation meets the requirements for Team Foundation Server Extensions for SharePoint Products. If you don't want to use SharePoint Foundation 2013, you can install any supported version of SharePoint Products. If you install the Enterprise version of SharePoint Server, you must configure it for dashboards. For more information: [SharePoint Products requirements for Team Foundation Server](../../../accounts/requirements.md#sharepoint), [Verify SharePoint products for Team Foundation Server](verify-sharepoint.md), [Manually Install SharePoint products for Team Foundation Server](install-sharepoint.md). + + + +![Step 2](../_img/ic646325.png) Run the Team Foundation Server install from the product DVD and then use the Team Foundation Server Extensions for SharePoint Products configuration wizard to configure your installation. This wizard installs and configures the extensions and, if you want, SharePoint Foundation 2013. After you configure the TFS Extensions, add the service account that you will use for Team Foundation Server to the Farm Administrators group. For more information: [Run Team Foundation Server installation](../install-2013/install-tfs.md#installer), [Configure Team Foundation Server Extensions for SharePoint Products](#config-exts), Add the service account for Team Foundation Server to the Farm Administrators group (below). + +> [!TIP] +> If you don't want to install all of Team Foundation Server on the server that is running SharePoint Products, launch the tfs_sharePointExtensions.exe file from the SharePoint Extensions folder to install only the Team Foundation Server Extensions for SharePoint Products. + +<a name="tfs-svc-acct-to-farm-admin-group"></a> +**Add the service account for Team Foundation Server to the Farm Administrators group** + +You must add the service account for Team Foundation Server to the Farm Administrators group on the SharePoint administration site. If you are using Network Service for the TFS service account and SharePoint is not running on the same server as TFS, you must add the machine name of the server that is running TFS instead of Network Service. The machine name is the server name followed by the $ symbol. For example, *Domain\ServerName$*. + +For more information about service accounts, see [Accounts required for installation of Team Foundation Server](../../../accounts/requirements.md#accounts). + +Required permissions: To follow this procedure, you must be a member of the Windows **Administrators** security group on the server that is running SharePoint. + +To add the service account for Team Foundation Server to the Farm Administrators group + + 1. In a web browser, open the SharePoint Central Administration site. + + 2. Under Security, choose **Manage the farm administrators group**. + + 3. Choose **New**. + + 4. In the **Users/Groups** box, enter the name of the service account for TFS and choose Share. + + > [!TIP] + > If you have to manually add a server name followed by the $ symbol, the search utility might not find it, but you will still be able to choose **Share**. + + + +![Step 3](../_img/ic646326.png) If you installed Enterprise version of SharePoint Server, you must make some final configurations in the extensions, but you must do this step *after* you install Team Foundation Server. For more information: [Configure the enterprise application definition for Team Foundation Server](config-enterprise-app-def.md). + + +<a name="config-exts"></a> +## Configure Team Foundation Server Extensions for SharePoint Products + +If SharePoint Products is not installed on the server that is running Team Foundation Server, you have a remote portal. If you have a remote portal, you must install and configure the Team Foundation Server Extensions for SharePoint Products on the remote portal. + +If you have multiple servers in a web farm, you must install and configure the extensions on every application-tier and web-tier server in the farm. After you install the extensions, you must perform this configuration procedure on each server. An error message might appear during configuration asking you to verify that the extensions have been installed on every server in the farm. You can safely ignore this error. After the extensions have been installed and configured on every server, this error stops. + +**Required permissions** + +To follow this procedure, you must be a member of the **Farm** **administrators** group on the SharePoint administration site. + +### To configure Team Foundation Server Extensions for SharePoint Products + +From Windows **Start**, run **Team Foundation Server Administration Console**. + +1. In the left pane choose **Extensions for SharePoint Products**, and then in the right pane choose **Configure Installed Features**. + +2. In the **Team Foundation Server Configuration Center** window, choose **Configure Extensions for SharePoint Products** in the left pane. In the right pane, choose **Start Wizard**. + +3. In the **SharePoint Extensions Configuration** window, read the Welcome screen, choose if you want to help improve Team Foundation Server, and then choose **Next**. + +4. If SharePoint Products is installed, skip to the next step. If SharePoint is not installed, take these steps: + +5. Choose the big **Install SharePoint Foundation 2013** button. When the install finishes, choose **Next**. + + 1. Type the name of the SQL Server or named instance that will host the configuration databases for SharePoint Foundation 2013. + + 2. Type a user account and password for the service account for SharePoint. + + 3. For more information, see [Accounts required for installation of Team Foundation Server](../../../accounts/requirements.md#accounts) + + On the **Review** page, review the settings and choose ** Next** to let the wizard validate your configuration. + +6. Choose **Configure**. + +7. The wizard applies configuration settings. This process might take several minutes. + +8. Choose **Next**, **Close**, **Close**. + +The Team Foundation Server Administration Console appears. + + + +## See Also + +[TFS upgrade requirements](../../../accounts/requirements.md) diff --git a/docs/tfs-server/install/sharepoint/verify-sharepoint.md b/docs/tfs-server/install/sharepoint/verify-sharepoint.md new file mode 100644 index 00000000000..b4305c55293 --- /dev/null +++ b/docs/tfs-server/install/sharepoint/verify-sharepoint.md @@ -0,0 +1,75 @@ +--- +title: Verify SharePoint products for Team Foundation Server +description: Verify SharePoint products for Team Foundation Server +ms.assetid: 104566ef-2578-4b76-a73d-c5e6c10eee06 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.manager: douge +ms.author: elbatk +ms.date: 09/09/2017 +--- + +# Verify SharePoint products for Team Foundation Server + +[!INCLUDE [temp](../../_shared/about-sharepoint-deprecation.md)] + +If you choose to use an installation of SharePoint Products other than the one that was installed during Team Foundation Server installation, you should verify that your installation of SharePoint Products meets the following guidelines: + +- The administration site and default website are running, and other computers on the network can access them. + +- SharePoint uses NTLM, the recommended authentication. (Basic authentication is not supported by Team Foundation Server extensions for SharePoint Products.) + +- If you are using a supported enterprise edition of SharePoint Server, you must configure settings for dashboard compatibility. + +**Required Permissions** + +To perform this procedure, you must be a member of the **Administrators** security group on the server that is running SharePoint. + +### To verify that the administration site and default website are running and that other computers on the network can access them + +1. On the server that is running SharePoint, choose **Start**, **Run**, enter **inetmgr**, and then choose **OK**. + + Internet Information Services (IIS) Manager appears. + +2. In Internet Information Services (IIS) Manager, open *ServerName* (local computer). + + *ServerName* is the name of the web server. + +3. Choose **Sites**, and then choose the default website. + +4. On the Actions pane, choose **Browse :80 (http)**. + + The default website appears in the default browser. + +5. Choose the SharePoint Central Administration site. + + On the Actions pane, choose **Browse** :*Port* **(http).** + + *Port* is the number of the port that is bound to the SharePoint Central Administration site. + + The SharePoint Central Administration site appears in the default browser. + +### To verify that the default website uses recommended authentication + +1. In a web browser, open the SharePoint Central Administration site, and choose the **Security**. + +2. Under **General Security**, choose **Specify authentication providers**. + +3. In the Zone column, choose **Default**. + +4. In **Claims Authentication Types**, make sure that check boxes for **Enable Windows Authentication**, **Integrated Windows authentication**, and **NTLM** are selected. + +> [!NOTE] +> You should check that the authentication setting that appears in the SharePoint Central Administration site matches the authentication setting that appears in IIS. + +### To verify that a supported enterprise edition of SharePoint Server is configured for dashboard compatibility + +- If you are using a supported enterprise edition of SharePoint Server, [perform the required configurations for dashboard compatibility](install-sharepoint.md). If you are using any other version of SharePoint, you can disregard this procedure. For more information, see [Manually Install SharePoint products for Team Foundation Server](install-sharepoint.md). + +## See Also + +[Install Team Foundation Server](../install-2013/install-tfs.md) + +[TFS upgrade requirements](../../upgrade/upgrade-2013/upgrade-2013-requirements.md) + +[How to: Set up remote SharePoint Products for Team Foundation Server](setup-remote-sharepoint.md) diff --git a/docs/tfs-server/install/single-server.md b/docs/tfs-server/install/single-server.md new file mode 100644 index 00000000000..a0031226b05 --- /dev/null +++ b/docs/tfs-server/install/single-server.md @@ -0,0 +1,117 @@ +--- +title: Install TFS on a single server +description: Set up Team Foundation Server (or TFS Express) on a single server using the basic configuration wizard +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 36d82fcb-e849-41e1-a33f-68974c15fbd4 +toc: show +ms.manager: douge +ms.author: aaronha +ms.date: 08/04/2016 +ms.topic: get-started-article +--- + +# Install TFS on a single server + +**TFS 2017** | **TFS 2015** + +The simplest way to set up TFS is to put everything on a single server. +Make sure to review our [hardware recommendations](../../accounts/requirements.md#hardware-recommendations) +to confirm that this configuration seems appropriate for your team. If not, +consider a [dual server](dual-server.md) or [multiple server](multiple-server.md) +configuration instead. + +## Preparation + +0. Prepare a single computer that satisfies the +[system requirements](../../accounts/requirements.md) for TFS. + +0. If you do not plan to use SQL Express, set up an +[appropriate version of SQL Server](../../accounts/requirements.md#sql-server). +When you set SQL Server up for TFS, install at least the database +engine and full text search services. + + ![SQL_SERVER_FEATURES](_shared/_img/sql-features.png) + + While the configuration wizard will install SQL Server Express for + you, we don't recommend using SQL Server Express for anything but + personal or evaluation deployments of TFS. Paid copies of Team Foundation + Server come with a license to SQL Server Standard for use with TFS. + The [Team Foundation Server pricing page](https://www.visualstudio.com/team-services/tfs-pricing) + explains the details. If you use the license that's included with TFS, + you can only use if for the TFS databases. + +0. Ensure that the account you plan to use to configure TFS is a member of +the [SysAdmin server role in SQL Server](https://msdn.microsoft.com/en-us/library/ms188659.aspx). + + > Installing TFS involves a complex set of operations that require a high degree of privilege - these include creating databases, + > provisioning logins for service accounts, and more. Technically, all that is required is membership in the ServerAdmin role; + > ALTER ANY LOGIN, CREATE ANY DATABASE, and VIEW ANY DEFINITION server scoped permissions; and CONTROL permission on the master + > database. Membership in the SysAdmin server role will confer all of these memberships and permissions, + > and is therefore the easiest way to ensure that TFS configuration will succeed. If necessary, these memberships and permissions + > can be revoked after TFS is installed. + +## Installation + +0. Download TFS from VisualStudio.com, MSDN Subscriber Downloads, +or the Volume Licensing Center or purchase a DVD through retail channels. + +0. Kick off the installation. + +![TFS_INSTALLER](_shared/_img/installer.png) + +The installation process itself simply gets TFS bits onto your machine. +At the end of this process, the installer will launch the TFS +Configuration Center. + +## Configuration + +Configure TFS using your selected scenario. The easiest way to set up +Team Foundation Server on a single server is to use the Server +Configuration Wizard with the New Deployment - Basic scenario. + +![TFS_SERVER_CONFIGURATION_NEW_DEPLOYMENT_BASIC](_shared/_img/new-deployment-basic.png) + +> In previous versions of TFS, you would use the Basic Configuration +> Wizard. + +This scenario is optimized for simplicity, using default options for +most inputs. If you want full control over all inputs, use the New +Deployment - Advanced scenario instead. + +With the New Deployment - Basic scenario, you will need to choose: + +- Whether to install SQL Express or use an existing SQL Server instance. +- Which website settings to use, including whether to use HTTP or HTTPS +bindings. See [website settings](../../security/websitesettings.md) for more +information. +- Whether to install and configure Code Search features. See +[configuring Search](../../search/code/administration.md#config-tfs) +for more information. + +If you select the New Deployment - Advanced scenario, you will additionally need +to chose: + +- The service account your various TFS deployment processes will run as. +The default value used in the Basic scenario is NT AUTHORITY\NETWORK SERVICE +in domain joined scenarios, and LOCAL SERVICE in workgroup scenarios. +- Whether to enable SSH, along with the port it should listen on. The +default value used in the Basic scenario is to configure SSH on port 22. +- The location of the file cache used for frequently accessed TFS +resources. The default value used in the Basic scenario is the path +TfsData\ApplicationTier\_fileCache on the local drive which has the most +free space. +- Whether to configure Reporting features and SharePoint integration. +The default behavior used in the Basic scenario is to not configure +these features. Note that these options are not available on client +operating systems. +- Whether to create a team project collection in which to store your +projects, along with the name of that collection. The default behavior +in the Basic scenario is to create a project collection named +DefaultCollection. + +In both cases, the wizard will run readiness checks to validate your +environment and your setting selections. If all goes well, the wizard +will then let you configure your deployment. If there are errors, you +will need to fix each of them and re-run the readiness checks before +you can continue. \ No newline at end of file diff --git a/docs/tfs-server/install/sql-server/_img/IC630622.png b/docs/tfs-server/install/sql-server/_img/IC630622.png new file mode 100644 index 00000000000..4da49c0f1ec Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC630622.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC630623.png b/docs/tfs-server/install/sql-server/_img/IC630623.png new file mode 100644 index 00000000000..cf999d0aa73 Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC630623.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC662712.png b/docs/tfs-server/install/sql-server/_img/IC662712.png new file mode 100644 index 00000000000..1f79a85d845 Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC662712.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC662962.png b/docs/tfs-server/install/sql-server/_img/IC662962.png new file mode 100644 index 00000000000..3e03e5e6bae Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC662962.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC665094.png b/docs/tfs-server/install/sql-server/_img/IC665094.png new file mode 100644 index 00000000000..2217bdc7f80 Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC665094.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC665096.png b/docs/tfs-server/install/sql-server/_img/IC665096.png new file mode 100644 index 00000000000..85e71f3ec2a Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC665096.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC665097.png b/docs/tfs-server/install/sql-server/_img/IC665097.png new file mode 100644 index 00000000000..965d1d71e53 Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC665097.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC665098.png b/docs/tfs-server/install/sql-server/_img/IC665098.png new file mode 100644 index 00000000000..dc28499f353 Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC665098.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC665099.png b/docs/tfs-server/install/sql-server/_img/IC665099.png new file mode 100644 index 00000000000..ebebae56a5f Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC665099.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC665100.png b/docs/tfs-server/install/sql-server/_img/IC665100.png new file mode 100644 index 00000000000..727e5b8ee12 Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC665100.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC665101.png b/docs/tfs-server/install/sql-server/_img/IC665101.png new file mode 100644 index 00000000000..af3a808d827 Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC665101.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC665102.png b/docs/tfs-server/install/sql-server/_img/IC665102.png new file mode 100644 index 00000000000..f8862e32fea Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC665102.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC665103.png b/docs/tfs-server/install/sql-server/_img/IC665103.png new file mode 100644 index 00000000000..3f0dbb00446 Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC665103.png differ diff --git a/docs/tfs-server/install/sql-server/_img/IC688130.png b/docs/tfs-server/install/sql-server/_img/IC688130.png new file mode 100644 index 00000000000..95e67454330 Binary files /dev/null and b/docs/tfs-server/install/sql-server/_img/IC688130.png differ diff --git a/docs/tfs-server/install/sql-server/collation-requirements.md b/docs/tfs-server/install/sql-server/collation-requirements.md new file mode 100644 index 00000000000..4269552118c --- /dev/null +++ b/docs/tfs-server/install/sql-server/collation-requirements.md @@ -0,0 +1,66 @@ +--- +title: SQL Server Collation Requirements for Team Foundation Server +description: SQL Server Collation Requirements for Team Foundation Server +ms.assetid: 193b1aa8-6682-490c-8a58-4b01cc657e4b +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# SQL Server Collation Requirements for Team Foundation Server + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +When you install SQL Server, you must consider two factors regarding collation settings that could affect your Team Foundation Server deployment: + +- Requirements for Team Foundation Server  + +- All instances of SQL Server in your Team Foundation Server deployment must use the same settings + +You can set collation settings for the Database Engine and SQL Server Analysis Services. Collation settings include character set, sort order, and other locale-specific settings, that are fundamental to the structure and function of SQL Server databases. You cannot change these settings after installation. + +## Requirements for Team Foundation Server + +To work with Team Foundation Server, the collation settings for SQL Server must be case insensitive, accent sensitive, and not binary. If multiple SQL Server are running an instance of Database Engine or SQL Server Analysis Services for Team Foundation Server, the collation settings that you use must be the same across all these servers. + +SQL Server bases your default collation settings on the locale of your operating system. The default setting for U.S. English and most other locales often meets the requirements for Team Foundation Server. However, those settings might not support all of the data that your organization must store in Team Foundation Server. In that case, you must find a setting that supports your data and is accent sensitive, not case sensitive, and not binary. + +If you install Database Engine Services or Analysis Services, you can change collation settings on the **Server Configuration** page, by clicking the **Collation** tab and then clicking **Customize**. You may want to specify an option under **Windows collation designator and sort order**. For example, you can specify **Latin1\_General**, and select the **AS** checkbox, if you require support for additional characters. + +For most other locales, the default setting is an option under **Windows collation designator and sort order**. Make sure that the settings match the requirements for Team Foundation Server. If you must change this setting, you should specify the option that is named for your locale with "\_100" after it, where possible. For example, you can use Japanese\_100 collation if you use Unicode CJK Extension A characters or Unicode surrogates in the following ways: + +- Names of objects, such as queries or projects, in Team Foundation Server. + +- Files or paths that are checked into the version control system. + +- Any work item field that is used for searches. + +To avoid problems with double-width or hiragana/katakana-equivalent characters, you should select the check boxes to enable Kana and width sensitivity when you install SQL Server. + +For more information, see the Microsoft website: [Collation Settings in Setup](https://msdn.microsoft.com/en-us/library/ms143508.aspx). + +## Full-Text search queries and collation settings + +To support full-text search queries, the collation settings of the SQL Server database should correspond to a language that has a word breaker registered with SQL Server. If you use an unsupported language, you could receive unexpected results when you run a work item query that specifies the **Contains** or **Contains Words** operators with text strings. + +To learn more, see one of the following topics: + +- [Full-Text Search (SQL Server)](http://go.microsoft.com/fwlink/?LinkId=247533) + +- [sys.fulltext\_languages (Transact-SQL)](http://go.microsoft.com/fwlink/?LinkId=247534) + +- [ALTER FULLTEXT INDEX (Transact-SQL)](http://go.microsoft.com/fwlink/?LinkId=247535) + +- [SQL Server 2008 Full-Text Search: Internals and Enhancements](http://go.microsoft.com/fwlink/?LinkId=247533) + +- [Query Fields, Operators, Values, and Variables](http://go.microsoft.com/fwlink/?LinkId=248569) + +## See Also + +[Manually install SQL Server for Team Foundation Server](install-sql-server.md) + +[Install Team Foundation Server](../install-2013/install-tfs.md) + +[TFS upgrade requirements](../../upgrade/upgrade-2013/upgrade-2013-requirements.md) diff --git a/docs/tfs-server/install/sql-server/install-sql-server.md b/docs/tfs-server/install/sql-server/install-sql-server.md new file mode 100644 index 00000000000..84f8541653e --- /dev/null +++ b/docs/tfs-server/install/sql-server/install-sql-server.md @@ -0,0 +1,314 @@ +--- +title: Manually install SQL Server for Team Foundation Server +description: Manually install SQL Server for Team Foundation Server +ms.assetid: a69f52ef-8313-46f5-afd4-f7e6a0241d2b +ms.manager: douge +ms.author: elbatk +ms.date: 08/31/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Manually install SQL Server for Team Foundation Server + +**TFS 2015** | **TFS 2013** + +The steps in this topic are for installing SQL Server 2012 enterprise edition, but you can use the same steps for installing the standard edition. The steps for SQL 2014 are also very similar to these. We’ll install all the SQL Server 2012 features that TFS requires on the same server as TFS, but this isn’t a requirement. TFS is very flexible with regard to SQL Server topologies. See [One Server or Two?](#one-svr-or-two) + +> [!TIP] +> You can also use an existing installation of SQL Server for TFS, but to do this you’ll need the SQL Server administrator to grant you a lot of administrative credentials. You must be a member of the sysadmin Server role in SQL Server to install and configure TFS. [Why does TFS need so much privilege on the SQL Server?](http://blogs.msdn.com/b/bharry/archive/2010/08/20/database-permissions-required-to-configure-tfs.aspx) (blog post) + +<a name="one-svr-or-two"></a> +## One server or two? + +If you’re going to use only one server for TFS, you can safely ignore this section. + +If you plan to have more than 500 users accessing your TFS server, the recommendation is to put SQL Server on a second server. This splits the load between TFS and its configuration database. You could install all the SQL Server features that TFS requires on the second server, or you could split the features up. Some teams like to put the report server on the TFS server, and the Database engine, Full text search, and Analysis services on the second server, splitting HTTP traffic from SQL Server traffic. + +There are many different topology choices you could make. In general, TFS allows you to install SQL Server instance features (Database engine, Reporting Services, Analysis Services) on different servers. Here are some caveats for various SQL Server topologies to keep in mind: + +- TFS requires the Database Engine and Full text search features on the same instance. +- TFS reporting is optional, but if you want reporting you must install Reporting Services and Analysis Services (each can go on its own server, if you want that topology). If you skip reporting, you don’t have to set up Reporting Services or Analysis Services. +- If you don’t install any SQL Server instances on the TFS server, you must at least install the SQL Server feature Client Tools Connectivity on TFS. If you have a SQL Server instance on the TFS server (either the Database Engine, Reporting Services or Analysis Services) you don’t have to install Client Tools Connectivity. + +If you want to install SQL Server features on different servers, run the SQL Server installation on each server where you want to install a feature. Use the same instructions below for each installation, but at step 9, only install the features that you require. + +> [!TIP] +> A multiple-server installation of TFS requires an Active Directory domain and domain accounts or the Network Service account. You cannot use local accounts for service accounts. + +## To install SQL Server + +**Required Permissions** +You must be a member of the **Windows Administrators** security group on the server on which you are installing SQL Server. To manually configure a report server, you must also be a member of the **Windows Administrators** security group on the SQL Server that hosts the report server database, if this instance of SQL Server is not on your report server. + +> [!TIP] +> If you are installing SQL Server 2014 on Windows Server 2012 or Windows Server 2012 R2, you must have the .NET Framework 3.5 installed. You can install the .NET Framework 3.5 by using the Add Features Wizard from Server Manager. For more information, see the following page on the Microsoft website: [Adding Server Roles and Features (Windows 2012/Windows 2012 R2)](https://technet.microsoft.com/library/hh831809.aspx), [Adding Server Roles and Features (Windows Server 2008 R2)](https://technet.microsoft.com/library/cc732263.aspx) + + +1. Insert the installation DVD for a supported version of SQL Server and launch setup.exe. + + +2. On the **SQL Server Installation Center** page, choose **Installation**, and then choose **New installation or add features to an existing installation**. + + ![New installation of SQL Server](_img/ic665094.png) + +3. On the **Setup Support Rules** page, choose **OK**. + +4. On the **Product Key** page, type your product key or specify a free edition. + +5. On the **License Terms** page, accept the license agreement. + +6. On the **Setup** **Support Rules** page, choose **Next**. + + ![Windows Firewall warning](_img/ic688130.png) + + > [!TIP] + > A Windows Firewall warning might appear, but you can safely ignore this warning if you’re planning to also install TFS on this server. TFS automatically adds an exception to Windows Firewall for SQL Server, if both servers (TFS and SQL Server) are installed on the same machine. If you’re installing TFS on some other server, you’ll want to [open a port for SQL Server in Windows Firewall on this server](http://elhajj.wordpress.com/2013/02/25/workaround-error-tf255049-punching-a-hole-through-windows-firewall/) (blog post). + > + >For more information about SQL Server ports required for Team Foundation Server, see [Ports required for installation of Team Foundation Server](../../architecture/required-ports.md). + +7. On the **Setup Role** page, choose **SQL Server Feature Installation**. + + ![Setup role](_img/ic665096.png) + +8. On the **Feature Selection** page, select the check boxes for one or more of the following components, depending on the topology you intend to use: + + - Database Engine Services (required) + + - Full-Text and Semantic Extractions for Search (required) + + - Analysis Services (required for reporting) + + - Reporting Services – Native (required for reporting) + + - Client Tools Connectivity (required only if no other SQL Server components are installed on the server that is running Team Foundation Server - not pictured) + + - Management Tools - Basic ¹ (not pictured) + + ![Feature Selection](_img/ic665097.png) + +9. On the **Installation Rules** page, choose **Next**. + +10. On the **Instance Configuration** page, choose **Default instance**. If you choose **Named instance**, type the name of the instance.. + + ![Instance configuration](_img/ic665098.png) + +11. On the **Disk Space Requirements **page, choose **Next**. + +12. On the **Server Configuration** page, accept the defaults or enter the name of a domain account or **NT AUTHORITY\\NETWORK SERVICE** in **Account Name** for every service. If you specify a domain account, type its password in **Password**. If you use **NT AUTHORITY\\NETWORK SERVICE**, leave **Password** blank. + + ![Server Configuration](_img/ic665099.png) + +13. In the Startup Type column, verify that **Automatic** appears for all services that you can edit, and then click **Next**. + + ![Server Configuration (details)](_img/ic665100.png) + + > [!NOTE] + > Are you using a non-English version of SQL Server? The default collation settings for U.S. English meet the requirements for Team Foundation Server. If you’re not using English, you can set collation settings for the Database Engine on this page. For more information, see [SQL Server Collation Requirements for Team Foundation Server](collation-requirements.md). + +14. If you selected the **Database Engine Services** check box in step 8, on the **Database Engine Configuration** page, choose **Windows authentication mode**, choose **Add Current User**. Otherwise skip to the next step. + + ![Database Engine Configuration](_img/ic665101.png) + +15. If you selected the Analysis Services check box in step 8, on the **Analysis Services Configuration** page, choose **Add Current User**. Otherwise skip to the next step. + + ![Analysis Services Configuration](_img/ic665102.png) + +16. If you selected the Reporting Services check box in step 8, on the **Reporting Services Configuration** page, choose **Install and configure**. If that option is unavailable, choose **Install only**. + + ![Reporting Services Configuration](_img/ic665103.png) + + If you had to choose **Install only**, you might be planning to have the report server and Team Foundation Server on different servers. This is a supported topology, but you will have to manually configure the report server after you finish installing SQL Server. Use these instructions: [Configure Report Server Manually](#config-report-svr-manually) + + > [!NOTE] + > You should not choose **Reporting Service SharePoint Integrated Mode**. TFS does not support this configuration mode. + +17. (Optional) On the **Error and Usage Reporting** page, specify whether to send information about errors. + +18. On the **Installation Rules** page, choose **Next**. + +19. On the **Ready to Install** page, review the list of components to be installed, and then choose **Install**. + + ![Complete](_img/ic662712.png) + +¹ To install Team Foundation Server, you do not need to install **Management Tools** (Basic or Complete) on the same computer as SQL Server. However, you must use the SQL Server Management Studio management tool to verify your installation of SQL Server. + +<a name="config-report-svr-manually"></a> +## Configure Report Server Manually + +No automatic configuration of Reporting Services + +![SQL Server 2008 R2 no SSRS auto configure](_img/ic662962.png) + +If you don’t install the Database Engine on the same server as Reporting Services, you must manually configure your report server using the steps below after you finish SQL Server installation.  + +In the unlikely case that Reporting Services is on the same server as Team Foundation Server and you have not configured the report server, you are prompted during Team Foundation Server installation to complete the report server configuration, starting on step 3. + +### To manually configure a report server + +1. Launch **Reporting Services Configuration Manager**. + + The **Reporting Services Configuration Connection** dialog box appears. + +2. In **Server Name**, enter the name of the report server. If you are using an instance name, enter the name of the instance in **Report Server Instance**. Choose **Connect**. + +3. On the **Reporting Services Configuration Manager** page, choose **Start** if the Report Service status reads **Stopped**. + +4. In the navigation bar, choose **Web Service URL**. + +5. On the **Web Service URL** page, choose **Apply** to accept the default values in the **Virtual Directory**, **IP Address**, and **TCP Port** boxes. + +6. In the navigation bar, choose **Database**. + +7. On the **Report Server Database** page, choose **Change Database**. + + The **Report Server Database Configuration Wizard** appears. + +8. On the **Action** page of the wizard, choose **Create a new report server database**. + +9. On the **Database Server** page of the wizard, enter the name of a local or remote instance of SQL Server to host the database for the report server in **Server Name**. + +10. On the **Database** page of the wizard, accept the default values in the **Database Name**, **Language**, and **Native Mode** boxes. + +11. In **Credentials**, accept the default values in the **Authentication Type**, **User name**, and **Password** boxes. + +12. On the **Summary** page of the wizard, verify your information. + +13. On the **Progress and Finish** page of the wizard, choose **Finish**. + +14. In the navigation bar for **Reporting Services Configuration Manager**, choose **Report Manager URL**. + +15. On the **Report Manager URL** page, choose **Apply** to accept the default value in the **Virtual Directory** box. + + + +## Provisioning SQL Server Databases for Team Foundation Server + +You might want to create empty databases for Team Foundation Server, because doing so can be useful for managing the databases of multiple instances of Team Foundation Server on a single instance of SQL Server or hosting Team Foundation Server databases on a managed instance of SQL Server. Whatever the reason, this topic provides guidance for how to provision empty SQL Server databases for use with Team Foundation Server. + +Conceptually, this procedure contains two steps: + +1. You create the databases and name them based on established guidelines. + +2. You identify these databases when you install Team Foundation Server. + +Team Foundation Server has two databases that you can configure to use empty databases during installation. + +- Tfs\_*DatabaseLabel*Warehouse + +- Tfs\_*DatabaseLabel*Application + +These databases must use the naming structure as shown, but you can either omit the string *DatabaseLabel* or use any custom string that uniquely describes both databases. + +When you install Team Foundation Server, you must select the **Use pre-existing empty database(s)** check box. If you added a label, you must also type it in **Server Databases Label**. The installation wizard will then use the empty databases that you created to set up the configuration database. + +> [!NOTE] +> Each project collection requires its own database, but you cannot configure Team Foundation Server to use an empty project collection database during installation. You must add an empty project collection database after installation, using Team Foundation Server Administration Console. + + + +## Work with SQL Server Named Instances + +You can choose to install Team Foundation Server using the default instance of SQL Server or a named instance of SQL Server. Depending on your business infrastructure and deployment needs, you might prefer to use a named instance. If you want to use a named instance in your deployment of Team Foundation Server, you must create that named instance in SQL Server before you install Team Foundation Server or create a team project collection that uses that instance. You cannot create a named instance during installation of Team Foundation Server. + +To use a named instance of SQL Server in a deployment of Team Foundation Server, you must do one of the following: + +* install SQL Server by using a named instance + +* move or restore Team Foundation Server data to a named instance + +* create a team project collection on a named instance + + + +<a name="verify"></a> +## Verify SQL Server for Team Foundation Server + +To ensure that your installation of SQL Server will work with Team Foundation Server, you should verify that the required SQL Server features are available, the underlying Windows services that are associated with SQL Server are running, the connection settings are configured, and the network ports are open. + +If SQL Server Reporting Services is not on the server that is running Team Foundation Server and you are using reporting, you must install Client Tools Connectivity on Team Foundation Server. + +If the Database Engine, Analysis Services, and Reporting Services are running on different instances of SQL Server, you must log on to each server to verify each instance.  + +**Required Permissions** + +To run SQL Server Configuration Manager, you must be a member of the **Users** security group on the server that hosts SQL Server. To use SQL Server Configuration Manager to modify services, you must be a member of the **Administrators** security group. + +To run SQL Server Reporting Services Configuration Manager or SQL Server Management Studio, you must be a member of the **Administrators** security group on the operating system of the server that is running the instance of SQL Server that you want to verify. For SQL Server Management Studio, you must also be a member of the **Public** server role on the instance of SQL Server that you want to verify. + +### Verify Reporting Services + +If you are not using Team Foundation Server reporting, you do not need to verify SQL Server Reporting Services or Analysis Services. + +To verify that the Windows service is running using SQL Server Configuration Manager: + +1. On the server that is running SQL ServerSQL Server Reporting Services, launch **SQL Server Configuration Manager**. + +2. Choose **SQL Server Services**, and verify that **Running** appears in the **State** column for SQL Server **Reporting Services**. + +To verify the report server URLs are running using SQL Server Reporting Services Configuration Manger: + +1. On the server that is running SQL Server Reporting Services, launch **Reporting Services Configuration Manager**. + + > [!NOTE] + > On Windows Server, you must open the context menu for **Reporting Services Configuration Manager** and choose **Run as administrator**. + + The **Reporting Services Configuration Connection** dialog box appears. + +2. In **Server Name**, type the name of the report server. If you are using an instance name, type the name of the instance in **Report Server Instance**. Choose **Connect**. + +3. Choose **Report Manager URL**, and choose the link to the report manager website. + + The report manager website for the report server opens in an Internet browser window. + +4. Choose **Web Service URL**, and choose the link to the report server website. + + The report server website opens in an Internet browser window. + + + +### Verify the Database Engine and Analysis Services + +On the instance of SQL Server that is running the Database Engine, you must ensure that you have the Full-Text Search feature installed. To verify this functionality, you open the **SQL Server Installation Center**, and then click the **New SQL Server stand-alone installation or add features to an existing installation**. If Full-Text Search is not available on the instance of SQL Server that is running the Database Engine, you must install Full-Text Search. For more information about how to work with **SQL Server Installation Center**, see [Manually install SQL Server for Team Foundation Server](install-sql-server.md). + +To verify that Windows services are running by using SQL Server Configuration Manager: + +1. On the instance of SQL Server on which the Database Engine, SQL Server Analysis Services, or both are running, launch **SQL Server Configuration Manager**. + +2. Choose **SQL Server Services**, and verify that **Running** appears in the **State** column and the Start Mode is set to automatic for all services. + + - To change the start mode of a service to start automatically, you must open the context menu for the service, choose **Properties**, choose the **Service** tab, click the drop-down list to the right of **Start Mode,** and then choose **Automatic**. + + - To change a stopped service state to running, you must open the context menu for the stopped service and choose **Start**. + +3. Choose **SQL Server Network Configuration**, double-click **Protocols for MyInstanceName**, and verify that **Enabled** appears in the **Status** column for **TCP/IP**. + + If you specified the default instance during installation, *MyInstanceName* will be **MSSQLSERVER**. + +To perform the following procedure, you must have SQL Server Management Studio installed. However, it does not have to be installed on the server that is running the instance of SQL Server that you are verifying. If you must install SQL Server Management Studio, see [Manually install SQL Server for Team Foundation Server](install-sql-server.md). + +To verify a connection to an instance of SQL Server by using SQL Server Management Studio: + +1. Launch **SQL Server Management Studio**. + + The **Connect to Server** dialog box opens. + +2. In the **Server type** list, choose **Database Engine** or **Analysis Services**, depending on the type of installation that you are verifying. + +3. Type the name of the server to which you want to connect, and then choose **Connect**. + + If SQL Server is installed on a cluster, you must specify the server name, not the computer name. If you are using a named instance of SQL Server, you must specify the name of the server and the name of the instance. If you cannot connect to the server, verify the firewall settings, and then try to connect again. + +4. In **Object Explorer**, verify that a green arrow appears next to the server name. + + + + + +## See Also + +[Install Team Foundation Server](../install-2013/install-tfs.md) + +[TFS upgrade requirements](../../upgrade/upgrade-2013/upgrade-2013-requirements.md) + +[SQL Server Collation Requirements for Team Foundation Server](collation-requirements.md) diff --git a/docs/tfs-server/install/sql-server/reporting-services-roles.md b/docs/tfs-server/install/sql-server/reporting-services-roles.md new file mode 100644 index 00000000000..fb989ee3100 --- /dev/null +++ b/docs/tfs-server/install/sql-server/reporting-services-roles.md @@ -0,0 +1,50 @@ +--- +title: SQL Server Reporting Services Roles +description: SQL Server Reporting Services Roles +ms.assetid: 4fa956ee-f01a-42b4-b34b-e6b1b784c953 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# SQL Server Reporting Services Roles + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +You can use the roles in SQL Server Reporting Services to assign particular permissions to users in Visual Studio Team Foundation Server. Every user and group in Team Foundation Server must be assigned appropriate permissions in Reporting Services. Reporting Services provides default security through role assignments. You can use management tools for SQL Server, such as Management Studio and Report Manager, to assign users and groups to predefined roles. + +You can use group membership in Team Foundation Server to determine the appropriate membership in one of the predefined roles in Reporting Services. No additional configuration of the role will be required. However, you can modify predefined roles and add custom roles to better meet your business needs. If you add custom roles or modify predefined roles, you must be sure that the roles have the permissions required for the appropriate level of access to reports and reporting features. For more information, see the following topic on the Microsoft Web site: [Granting Permissions on a Native Mode Report Server](http://go.microsoft.com/fwlink/?LinkId=117112). + +The following predefined roles are suggested for use with Team Foundation Server: + +- System Administrator + +- Team Foundation Content Manager + +- Browser + +For detailed information about pre-defined roles in Reporting Services, see the following topic on the Microsoft Web site: [Using Predefined Roles](http://go.microsoft.com/fwlink/?LinkId=117113). + +> [!IMPORTANT] +> You should restrict membership in Reporting Services to only those users who need the specific level of access and permissions granted by membership in that predefined role. Add a user or group to the predefined role that has the minimum permissions required to complete the user's or group's role within a team project. For example, if a user only needs to view the project schedule, you should add the user to the Browser role but not to the Content Manager role. + +## System Administrator + +The System Administrator role includes permissions that are useful for a report server administrator who has overall responsibility for a report server, but not necessarily for the content within it. The System Administrator role does not convey the full range of permissions that a local administrator might have on a computer. You must add Team Foundation Administrators to both the System Administrator role and the Content Manager role. Together, the two role definitions provide a complete set of permissions required by members of the Team Foundation Administrators group. + +## Team Foundation Content Manager + +Make sure to [add your administrators to the Team Foundation Content Managers group](../../../report/admin/grant-permissions-to-reports.md) on the server that hosts SQL Server Reporting Services. Otherwise they might have problems, such as being blocked by a TF218027 error when trying to create a team project. + +Unlike the other roles described in this topic, the Team Foundation Content Manager role is not a default role in SQL Server. The role is created specifically for integration between Team Foundation Server and SQL Server Reporting Services when Team Foundation Server is installed. Its structure and permissions are similar to the Content Manager role that is native to SQL Server. The Team Foundation Content Manager role includes permissions that are useful for users who manage reports and Web content but that do not necessarily write reports or manage a Web server or instance of SQL Server. A content manager deploys reports, manages report models and data source connections, and decides how to use reports. The Team Foundation Content Manager role provides the typical range of permissions required by users who belong to the Project Administrators group in a team project, in addition to users who belong to the Project Collection Administrators group. You should also add members of the Team Foundation Administrators group to this role. + + +## Browser + +The Browser role includes permissions that are useful for users who view reports, but do not necessarily write or manage them. This role provides basic capabilities for users who belong to either the Contributor or Reader group in a team project. + +## See Also + + [Understanding SQL Server and SQL Server Reporting Services](../../architecture/sql-server-databases.md) diff --git a/docs/tfs-server/install/sql-server/sql-server-requirements.md b/docs/tfs-server/install/sql-server/sql-server-requirements.md new file mode 100644 index 00000000000..1211fa342cf --- /dev/null +++ b/docs/tfs-server/install/sql-server/sql-server-requirements.md @@ -0,0 +1,215 @@ +--- +title: SQL Server requirements for Team Foundation Server +description: SQL Server requirements for Team Foundation Server +ms.assetid: 22d562f4-8da1-4d6f-ab34-3403a3b9d471 +ms.manager: douge +ms.author: billchi +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# SQL Server requirements for Team Foundation Server + +**TFS 2013** + +The most recent requirements information, which also covers TFS 2015, is [Requirements and Compatibility](../../../accounts/requirements.md). + +Team Foundation Server 2013 requires SQL Server 2012 with Service Pack 1 or SQL Server 2014. + +You have multiple options: +- You can use the basic configuration of Team Foundation Server, which comes with the required version of SQL Server Express. + + [Limitations of SQL Server Express](http://stackoverflow.com/questions/1169634/limitations-of-sql-server-express) (stackoverflow post) + +- You can [install one of the supported editions](install-sql-server.md). +- You can [verify and use an existing installation](#verify).  + +Regardless of which option you choose, your instance of SQL Server must meet the following requirements: + +| Category | Requirements | +| --- | --- | +| Supported editions | SQL Server 2014¹ (Express,² Standard,² and Enterprise editions) </br> SQL Server 2012 with SP1³ or newer service pack (Express,² Standard,² and Enterprise Editions) **Tip**: TFS Express only supports SQL Server Express instances that use the default instance name (SQLExpress). | +| Required for Team Foundation Server | Database Engine Services </br></br> Full-Text and Semantic Extractions for Search | +Required for reporting | Reporting Services – Native </br> Analysis Services | +| Collation settings | Must be accent sensitive </br> Must not be case sensitive </br> Must not be Binary </br> Must not be Binary - code point </br> For more information, see [SQL Server Collation Requirements for Team Foundation Server](collation-requirements.md) | +| Authentication | Windows authentication | +| Service account | You can use a domain account or a built-in account. | + + +> [!TIP] +> For TFS installations that require running SQL Server on dedicated hardware, hardware recommendations are available. For more information, see [System requirements for Team Foundation Server](../../../accounts/requirements.md) + +**Your limits on database read operations** +Microsoft does not support any read operations against the TFS databases that originate from queries, scripts, .dll files, and so on, not provided by Microsoft or its support teams. If Microsoft Support determines that those read operations prevent them from solving your problem, the entire database will be unsupported. To return the database to a supported state, all unsupported read operations must stop. + +¹ SQL Server 2014 has increased hardware requirements compared with previous versions. Certain configurations might hurt TFS performance. For more information, read [TFS 2013 Update 2: performance considerations using SQL Server 2014](http://support.microsoft.com/kb/2953452). + +² Limited or no SQL Server High Availability support. + +³ If you’re using SQL Server 2012 with SP1, we recommend you also apply [cumulative update 2 on top of SP1](http://support.microsoft.com/kb/2790947) to address a critical SQL Server bug around resource consumption. This isn’t a requirement because the bug only affects a small number of instances, but we wanted you to be aware of it. If you don’t apply CU2, you should apply a SQL Server hotfix ([KB2793634](http://support.microsoft.com/kb/2793634)) to addresses another (different) issue where SQL Server 2012 with SP1 might request an excessive amount of restarts. + +## SQL Server High Availability features Supported by Team Foundation Server + +SQL Server 2012 offers a new high availability (HA) feature that requires a Team Foundation Server-specific configuration. For more information, see: [Use SQL Server 2012 Always On Availability Groups with Team Foundation Server](use-always-on-groups.md) + +|SQL Server HA feature|TFS support|Requires TFS Configuration| +|---|---|---| +|Always On Failover Cluster Instances|Yes|No| +|Always On Availability Groups|Yes|Yes| +|SQL Mirroring|Yes|No| +|SQL Replication|No|No| +|SQL Log Shipping|No|No| + +## How to install SQL Server for Team Foundation Server + +[Manually install SQL Server for Team Foundation Server](install-sql-server.md) +Provides steps for how to install SQL Server for Team Foundation Server. Use these steps whether you are installing on a single server, across multiple servers, or for any combination of the two. + + [Add the service account for Team Foundation Server to the report server](https://msdn.microsoft.com/library/dd631908) +Describes how to assign permission to the service account for Team Foundation Server to use the report server. + + [Verify SQL Server for Team Foundation Server](#verify) +Provides steps to verify that a SQL Server instance is ready to work with Team Foundation Server. + + +### Provisioning SQL Server Databases for Team Foundation Server + +You might want to create empty databases for Team Foundation Server, because doing so can be useful for managing the databases of multiple instances of Team Foundation Server on a single instance of SQL Server or hosting Team Foundation Server databases on a managed instance of SQL Server. Whatever the reason, this topic provides guidance for how to provision empty SQL Server databases for use with Team Foundation Server. + +Conceptually, this procedure contains two steps: + +1. You create the databases and name them based on established guidelines. + +2. You identify these databases when you install Team Foundation Server. + +Team Foundation Server has two databases that you can configure to use empty databases during installation. + +- Tfs\_*DatabaseLabel*Warehouse + +- Tfs\_*DatabaseLabel*Application + +These databases must use the naming structure as shown, but you can either omit the string *DatabaseLabel* or use any custom string that uniquely describes both databases. + +When you install Team Foundation Server, you must select the **Use pre-existing empty database(s)** check box. If you added a label, you must also type it in **Server Databases Label**. The installation wizard will then use the empty databases that you created to set up the configuration database. + +> [!NOTE] +> Each project collection requires its own database, but you cannot configure Team Foundation Server to use an empty project collection database during installation. You must add an empty project collection database after installation, using Team Foundation Server Administration Console. + + + + +### Work with SQL Server Named Instances + +You can choose to install Team Foundation Server using the default instance of SQL Server or a named instance of SQL Server. Depending on your business infrastructure and deployment needs, you might prefer to use a named instance. If you want to use a named instance in your deployment of Team Foundation Server, you must create that named instance in SQL Server before you install Team Foundation Server or create a team project collection that uses that instance. You cannot create a named instance during installation of Team Foundation Server. + +To use a named instance of SQL Server in a deployment of Team Foundation Server, you must do one of the following: + +* install SQL Server by using a named instance + +* move or restore Team Foundation Server data to a named instance + +* create a team project collection on a named instance + + + +<a name="verify"></a> +### Verify SQL Server for Team Foundation Server + +To ensure that your installation of SQL Server will work with Team Foundation Server, you should verify that the required SQL Server features are available, the underlying Windows services that are associated with SQL Server are running, the connection settings are configured, and the network ports are open. + +If SQL Server Reporting Services is not on the server that is running Team Foundation Server and you are using reporting, you must install Client Tools Connectivity on Team Foundation Server. + +If the Database Engine, Analysis Services, and Reporting Services are running on different instances of SQL Server, you must log on to each server to verify each instance.  + +**Required Permissions** + +To run SQL Server Configuration Manager, you must be a member of the **Users** security group on the server that hosts SQL Server. To use SQL Server Configuration Manager to modify services, you must be a member of the **Administrators** security group. + +To run SQL Server Reporting Services Configuration Manager or SQL Server Management Studio, you must be a member of the **Administrators** security group on the operating system of the server that is running the instance of SQL Server that you want to verify. For SQL Server Management Studio, you must also be a member of the **Public** server role on the instance of SQL Server that you want to verify. + +#### Verify Reporting Services + +If you are not using Team Foundation Server reporting, you do not need to verify SQL Server Reporting Services or Analysis Services. + +To verify that the Windows service is running using SQL Server Configuration Manager: + +1. On the server that is running SQL ServerSQL Server Reporting Services, launch **SQL Server Configuration Manager**. + +2. Choose **SQL Server Services**, and verify that **Running** appears in the **State** column for SQL Server **Reporting Services**. + +To verify the report server URLs are running using SQL Server Reporting Services Configuration Manger: + +1. On the server that is running SQL Server Reporting Services, launch **Reporting Services Configuration Manager**. + + > [!NOTE] + > On Windows Server, you must open the context menu for **Reporting Services Configuration Manager** and choose **Run as administrator**. + + The **Reporting Services Configuration Connection** dialog box appears. + +2. In **Server Name**, type the name of the report server. If you are using an instance name, type the name of the instance in **Report Server Instance**. Choose **Connect**. + +3. Choose **Report Manager URL**, and choose the link to the report manager website. + + The report manager website for the report server opens in an Internet browser window. + +4. Choose **Web Service URL**, and choose the link to the report server website. + + The report server website opens in an Internet browser window. + + + +#### Verify the Database Engine and Analysis Services + +On the instance of SQL Server that is running the Database Engine, you must ensure that you have the Full-Text Search feature installed. To verify this functionality, you open the **SQL Server Installation Center**, and then click the **New SQL Server stand-alone installation or add features to an existing installation**. If Full-Text Search is not available on the instance of SQL Server that is running the Database Engine, you must install Full-Text Search. For more information about how to work with **SQL Server Installation Center**, see [Manually install SQL Server for Team Foundation Server](install-sql-server.md). + +To verify that Windows services are running by using SQL Server Configuration Manager: + +1. On the instance of SQL Server on which the Database Engine, SQL Server Analysis Services, or both are running, launch **SQL Server Configuration Manager**. + +2. Choose **SQL Server Services**, and verify that **Running** appears in the **State** column and the Start Mode is set to automatic for all services. + + - To change the start mode of a service to start automatically, you must open the context menu for the service, choose **Properties**, choose the **Service** tab, click the drop-down list to the right of **Start Mode,** and then choose **Automatic**. + + - To change a stopped service state to running, you must open the context menu for the stopped service and choose **Start**. + +3. Choose **SQL Server Network Configuration**, double-click **Protocols for MyInstanceName**, and verify that **Enabled** appears in the **Status** column for **TCP/IP**. + + If you specified the default instance during installation, *MyInstanceName* will be **MSSQLSERVER**. + +To perform the following procedure, you must have SQL Server Management Studio installed. However, it does not have to be installed on the server that is running the instance of SQL Server that you are verifying. If you must install SQL Server Management Studio, see [Manually install SQL Server for Team Foundation Server](install-sql-server.md). + +To verify a connection to an instance of SQL Server by using SQL Server Management Studio: + +1. Launch **SQL Server Management Studio**. + + The **Connect to Server** dialog box opens. + +2. In the **Server type** list, choose **Database Engine** or **Analysis Services**, depending on the type of installation that you are verifying. + +3. Type the name of the server to which you want to connect, and then choose **Connect**. + + If SQL Server is installed on a cluster, you must specify the server name, not the computer name. If you are using a named instance of SQL Server, you must specify the name of the server and the name of the instance. If you cannot connect to the server, verify the firewall settings, and then try to connect again. + +4. In **Object Explorer**, verify that a green arrow appears next to the server name. + + +### Conceptual Information about SQL Server and Team Foundation Server + + [Understanding SQL Server and SQL Server Reporting Services](../../architecture/sql-server-databases.md) +Pulling it all together: Interactions between Team Foundation Server and SQL Server. + + [Team Foundation Server Databases](../../architecture/sql-server-databases.md) +A comprehensive list of the databases used to store Team Foundation Server data. + + [SQL Server Reporting Services Roles](reporting-services-roles.md) +A brief explanation of how roles work in SQL Server Reporting Services. + + [SQL Server Collation Requirements for Team Foundation Server](collation-requirements.md) +Explains the Team Foundation Server requirements for SQL Server collation settings. + +## See Also + +[Install Team Foundation Server](../install-2013/install-tfs.md) + +[TFS upgrade requirements](../../upgrade/upgrade-2013/upgrade-2013-requirements.md) diff --git a/docs/tfs-server/install/sql-server/use-always-on-groups.md b/docs/tfs-server/install/sql-server/use-always-on-groups.md new file mode 100644 index 00000000000..4977c776428 --- /dev/null +++ b/docs/tfs-server/install/sql-server/use-always-on-groups.md @@ -0,0 +1,69 @@ +--- +title: Use SQL Server Always-on Availability Groups with Team Foundation Server +description: Use SQL Server Always-on Availability Groups with Team Foundation Server +ms.assetid: ffbd4565-169c-4e00-82c3-981725cc9bdd +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Use SQL Server Always-on Availability Groups with Team Foundation Server + +**TFS 2015** | **TFS 2013** + +This topic provides general guidelines for enabling AlwaysOn Availability Groups with Team Foundation Server. AlwaysOn Availability Groups requires a small amount of TFS-specific configuration, which can help you provide high availability (HA) to TFS relational databases like TFS_Configuration and TFS_Collection database. The TFS-specific configuration sets the MultisubnetFailover option to true in the connection string that TFS uses for the data tier and is not necessary for providing HA support for reporting or SharePoint. To provide high availability to the TFS report server or SharePoint deployment, use the documentation for those products. + +TFS support for AlwaysOn Availability Groups is an on or off proposition: if you use it, you must include your TFS_Configuration database as well as all of your TFS_Collection databases in the availability group. If you add a team project collection in the future, the database for that collection must be added to the availability group in SQL Server. + +You can use more than one SQL Server availability group. + +Use SQL Server documentation for guidance about configuring AlwaysOn Availability Groups. TFS does not require any specific AlwaysOn Availability Group configuration. Use the configuration that best meets your team’s needs and the recommendations found in SQL Server guidance. See [Getting Started with AlwaysOn Availability Groups (SQL Server)](https://technet.microsoft.com/library/gg509118.aspx). + +## Setting up a new TFS installation with AlwaysOn Availability Groups + +This a high level walkthrough of the steps required to implement AlwaysOn Availability Groups during TFS installation. + +> [!TIP] +> To set the MultisubnetFailover option to true in the connection string for an already running deployment of TFS, use the RegisterDB command of TFSConfig with the /usesqlalwayson argument. You will need to use the TFSService Control Command to stop and start TFS before you can set the MultisubnetFailover option. See [RegisterDB Command](../../command-line/tfsconfig-cmd.md#registerdb) and [TFSServiceControl Command](../../command-line/tfsservicecontrol-cmd.md). + +###One: set up AlwaysOn Availability Groups + +The SQL Server AlwaysOn Availability Group must be ready before you install TFS. See [Getting Started with AlwaysOn Availability Groups (SQL Server)](https://technet.microsoft.com/library/gg509118.aspx) + +###Two: install TFS using the advanced wizard + +![Select AlwaysOn checkbox](_img/ic630622.png) + +If you’re installing TFS for the first time, use the Advanced configuration wizard, which gives you access to the **SQL AlwaysOn Availability Group** check box (pictured above). On this screen, enter the Availability Group Listener in the **SQL Server Instance** text box. TFS will create TFS\_Configuration and the DefaultCollection databases on the Primary replica of your AlwaysOn Availability Group. The databases for SharePoint will also be created, if you allow TFS to install SharePoint Foundation. + +> [!TIP] +> You can also access the **SQL AlwaysOn Availability Group** check box by using the Application-Tier Only or Upgrade wizards. See [How to: Create a Team Foundation server farm (high availability)](../create-tfs-farm.md) or [TFS upgrade requirements](../../upgrade/upgrade-2013/upgrade-2013-requirements.md). + +###Three: add the new TFS databases to the AlwaysOn Availability Group + +![Add TFS databases to AlwaysOn Availibility Group](_img/ic630623.png) + +You’ll need to back up any databases that you want to add to the AlwaysOn Availability Group to bring them into compliance for data stored in an AlwaysOn Availability Group. Next, use the Availability Group Wizard to add the databases to the group. See [Creation and Configuration of Availability Groups (SQL Server)](https://technet.microsoft.com/library/ff878265.aspx), and [Use the New Availability Group Wizard (SQL Server Management Studio)](https://technet.microsoft.com/library/hh403415.aspx). + +> [!TIP] +> If you add a new team project collection to TFS, remember to add the database for the collection to your availability group in SQL Server. You cannot have some databases for team project collections in and some outside the availability group. + +## AlwaysOn Availability Groups Support for Reporting and SharePoint + +The TFS-specific configurations described in this topic are not necessary to provide HA support for reporting or SharePoint. To provide AlwaysOn support for those features, use the guidance available for those products, or implement some other TFS-supported HA feature. + +**Reporting and AlwaysOn Availability Groups** + +- [Reporting Services with AlwaysOn Availability Groups (SQL Server)](https://technet.microsoft.com/library/hh882437.aspx) + +- [Analysis Services with AlwaysOn Availability Groups](https://technet.microsoft.com/library/hh967523.aspx) + +**SharePoint and HA** + +- [Configure and manage SQL Server availability groups for SharePoint Server](https://technet.microsoft.com/library/hh913923.aspx) + +- [Plan for availability (SharePoint Server 2010)](https://technet.microsoft.com/library/cc748824.aspx) + +- [SQL Server 2008 R2 and SharePoint 2010 Products: Better Together (white paper) (SharePoint Server 2010)](https://technet.microsoft.com/library/cc990273.aspx) diff --git a/docs/tfs-server/requirement-changes-tfs15.md b/docs/tfs-server/requirement-changes-tfs15.md new file mode 100644 index 00000000000..01c28dd9f98 --- /dev/null +++ b/docs/tfs-server/requirement-changes-tfs15.md @@ -0,0 +1,65 @@ +--- +title: Requirements Changes for TFS 2017, Team Foundation Server Setup, Upgrade, and Administration +description: Describes changes to requirements between TFS 2015 and TFS 2017. +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 54e497b6-ac9b-42ae-bc35-8b270f8f88ad +toc: show +ms.manager: douge +ms.author: douge +ms.date: 09/26/2016 +--- + +# Changes to requirements for TFS 2017 + +**TFS 2017** + +There are a number of changes coming to Team Foundation Server +requirements in TFS 2017. Details on requirements across versions +of TFS can be found in +[requirements and compatibility](../accounts/requirements.md). This document +is intended to help current users of TFS 2015 who are upgrading +to TFS 2017. + +## Operating systems + +TFS 2017 will not support 32-bit OSes. There has not been a +32-bit server OS since Windows Server 2008, and we do not recommend installing +TFS on client OSes except for evaluation purposes or personal use. Despite this, +a relatively large percentage of TFS installations were on 32-bit OSes as recently +as TFS 2013. In TFS 2015, this percentage dropped low enough that we felt the +time was right to drop support for installing TFS on 32-bit OSes with TFS 2017. + +## SQL Server + +TFS 2017 will no longer support SQL 2012, but will continue to support SQL 2014. +We typically strive to support at least one "overlapping" version of SQL between +major releases of TFS in order to make it easier to upgrade TFS deployments +incrementally. + + +## Project Server + +TFS 2017 and later versions will no longer support native integration with Microsoft Project Server. Instead, if you are on TFS 2017 and want to integrate with Microsoft Project Server, you can do so using the [solution that our partner Tivitie provides](../work/office/sync-ps-tfs.md). + +For more information on why we no longer support this integration, please check out [this blog post](http://go.microsoft.com/fwlink/?LinkID=823693). + +When you upgrade TFS 2015 or earlier version which has the native TFS-Project Server integration configured, remnants of the integration remain. You may choose to ignore them, or you can remove them to avoid receiving error messages. See [Remove integration of TFS with Project Server](../work/office/remove-tfs-ps-integration.md). + + + +## Hardware requirements + +There are no major changes in hardware requirements for TFS 2017 if your usage +remains consistent. There are some new features in TFS 2017, however, which +may impact performance and requirements if you choose to use them. Code +Search, for example, can introduce significant new memory and CPU consumption +to your TFS deployment, and if your deployment is sensitive to additional load +you may wish to use a dedicated computer for Code Search. For more details, see +[hardware requirements for Code Search](../search/code/administration.md#hardware-recommendations). + + +## Browsers + +TFS 2017 will no longer support Internet Explorer 9 or 10. We recommend upgrading to +Internet Explorer 11, or using the most recent version of Edge, Chrome, or Firefox. \ No newline at end of file diff --git a/docs/tfs-server/requirement-changes-tfs16.md b/docs/tfs-server/requirement-changes-tfs16.md new file mode 100644 index 00000000000..362aa1e27a4 --- /dev/null +++ b/docs/tfs-server/requirement-changes-tfs16.md @@ -0,0 +1,50 @@ +--- +title: Changes to required for TFS 2018 +titleSuffix: |TFS 2018 +description: Describes changes to requirements between TFS 2017 and TFS 2018 RC1 that impact Setup, Upgrade, and Administration +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 67751d35-7c53-454c-8b6d-12e95ffd853d +toc: show +ms.manager: douge +ms.author: aaronha +ms.date: 07/11/2017 +--- + +# Changes to requirements for TFS 2018 + +**TFS 2018** + +There are a number of changes coming to Team Foundation Server +requirements in TFS 2018. Details on requirements across versions +of TFS can be found in +[requirements and compatibility](../accounts/requirements.md). This document +is intended to help current users of TFS 2017 who are upgrading +to TFS 2018. + +## Operating systems + +TFS 2018 will not support Windows Server 2008 R2, Windows 7, Windows 8.1, or +Windows 10 Home edition. We have never recommended installing TFS on client +OSes except for evaluation purposes or personal use. Even for these use cases, +we now recommend creating a free VSTS account. We will +continue to support Windows 10 Professional and Enterprise editions. + +## SQL Server + +TFS 2018 will no longer support SQL 2014, but will continue to support SQL 2016 +and will add support for SQL 2017. We typically strive to support at least one +"overlapping" version of SQL between major releases of TFS in order to make it +easier to upgrade TFS deployments incrementally. + +## SharePoint + +TFS 2018 discontinues support for the TFS Extension for SharePoint. +For more information, go here: +[https://go.microsoft.com/fwlink/?linkid=852977](https://go.microsoft.com/fwlink/?linkid=852977). + +## Build compatibility + +TFS 2018 will no longer support the XAML build system. +For more information, go here: +[https://blogs.msdn.microsoft.com/bharry/2017/05/30/evolving-tfsteam-services-build-automation-capabilities/](https://blogs.msdn.microsoft.com/bharry/2017/05/30/evolving-tfsteam-services-build-automation-capabilities/). \ No newline at end of file diff --git a/docs/tfs-server/toc.yml b/docs/tfs-server/toc.yml new file mode 100644 index 00000000000..70d769e552d --- /dev/null +++ b/docs/tfs-server/toc.yml @@ -0,0 +1,265 @@ +- name: "Server Administration (TFS)" + href: index.md +- name: Overview + items: + - name: Installation overview + href: ./install/get-started.md + - name: Configure and manage TFS resources + href: ./admin/config-tfs-resources.md +- name: Quickstarts + items: + - name: Single server install + href: ./install/single-server.md + - name: Create a team project + href: ../accounts/create-team-project.md?toc=/vsts/tfs-server/toc.json + - name: Add users to projects + href: ../accounts/add-users.md?toc=/vsts/tfs-server/toc.json + - name: Configure a backup schedule + href: ./admin/backup/config-backup-sched-plan.md + - name: Configure an SMTP server + href: ./admin/setup-customize-alerts.md +- name: Tutorials + items: + - name: Add administrators + href: add-administrator-tfs.md + - name: Change permission levels + href: ./admin/manage-team-project-collections.md + - name: Manage team project collections + href: ./admin/manage-team-project-collections.md + - name: Stop and start services, app pools, and websites + href: ./admin/stop-start-stuff.md + - name: Change service account password + href: ./admin/change-service-account-password.md + - name: Change service account or password for SQL reporting + href: ./admin/change-service-account-or-password-sql-reporting.md + - name: Restore a TFS deployment to new hardware + href: ./admin/backup/tut-single-svr-home.md + items: + - name: 1-Prepare new hardware + href: ./admin/backup/tut-single-svr-prep-new-hw.md + - name: 2-Restore databases + href: ./admin/backup/tut-single-svr-restore-dbs.md + - name: 3-Install and configure TFS + href: ./admin/backup/tut-single-svr-install-config-tfs.md + - name: 4-Reconnect services and users + href: ./admin/backup/tut-single-svr-reconn-svcs-users.md +- name: Concepts + items: + - name: Architecture overview + href: ./architecture/architecture.md + - name: Components, terms, and key concepts + href: ./architecture/tfs-concepts.md + - name: About permissions and groups + href: /vsts/security/about-permissions?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json + - name: About access levels + href: /vsts/security/access-levels?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json + - name: Set up AD groups for TFS users + href: ./admin/setup-ad-groups.md + - name: Required ports + href: ./architecture/required-ports.md + - name: SQL Server databases + href: ./architecture/sql-server-databases.md + - name: Background job agent + href: ./architecture/background-job-agent.md +- name: How-to Guides + items: + - name: Open the admin console + href: ./command-line/open-admin-console.md + - name: Restrict access to resources + href: /vsts/accounts/restrict-access-tfs?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json + - name: Change access levels + href: /vsts/security/change-access-levels?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json + - name: Install TFS + items: + - name: Dual server install + href: ./install/dual-server.md + - name: Multiple server install + href: ./install/multiple-server.md + - name: Install TFS 2013 + items: + - name: Get started + href: ./install/install-2013/install-tfs.md + - name: Basic configuration + href: ./install/install-2013/config-tfs-basic.md + - name: Standard configuration + href: ./install/install-2013/config-tfs-standard.md + - name: Advanced configuration + href: ./install/install-2013/config-tfs-advanced.md + - name: Create high-availability farm + href: ./install/create-tfs-farm.md + - name: Install SQL Server + items: + - name: Install SQL Server + href: ./install/sql-server/install-sql-server.md + - name: Collation requirements + href: ./install/sql-server/collation-requirements.md + - name: Reporting services roles + href: ./install/sql-server/reporting-services-roles.md + - name: Use always-on availability groups + href: ./install/sql-server/use-always-on-groups.md + - name: Use always-on availability groups + href: ./install/sql-server/use-always-on-groups.md + - name: SQL Server Reporting Services reports + href: /vsts/report/sql-server/reporting-services-reports?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json + - name: Add TFS service account to Report Server + href: ./install/install-2013/add-tfs-svc-acct-report-svr.md + - name: Install SharePoint + items: + - name: Configure enterprise app definition + href: ./install/sharepoint/config-enterprise-app-def.md + - name: Install on same server + href: ./install/sharepoint/install-sharepoint.md + - name: Install on different server + href: ./install/sharepoint/setup-remote-sharepoint.md + - name: Verify SharePoint + href: ./install/sharepoint/verify-sharepoint.md + - name: Move SharePoint to new hardware + href: ./install/sharepoint/move-sharepoint-new-hardware.md + - name: Share information using the project portal + href: /vsts/report/sharepoint-dashboards/share-information-using-the-project-portal?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json + - name: Backup and restore + href: ./admin/backup/back-up-restore-tfs.md + items: + - name: Databases and deployment topologies + href: ./admin/backup/backup-db-architecture.md + - name: Manually back up + href: ./admin/backup/manually-backup-tfs.md + - name: Refresh data caches on clients + href: ./admin/backup/refresh-data-caches.md + - name: Restore app tier server (data is elsewhere) + href: ./admin/backup/restore-application-tier-server.md + - name: Restore data same server with TFS + href: ./admin/backup/restore-data-same-location.md + - name: Restore data different server than current + href: ./admin/backup/restore-data-different-instance.md + - name: Restore Lab Management components + href: ./admin/backup/restore-lab-management-components.md + - name: Modify the deployment + items: + - name: Move team project collection + href: ./admin/move-project-collection.md + - name: Split team project collection + href: ./admin/split-team-project-collection.md + - name: Change app tier caching + href: ./admin/change-caching-app-tier.md + - name: Change the deployment configuration + href: ./admin/change-deployment.md + - name: Restore a single server to new hardware + items: + - name: Move or clone to new hardware + href: ./admin/move-clone-hardware.md + - name: Rebuild the client cache + href: ./admin/rebuild-client-cache.md + - name: Move TFS between network domains + href: ./admin/move-across-domains.md + - name: Manage SharePoint integration + items: + - name: Add SharePoint products to TFS + href: ./admin/add-sharepoint-to-tfs.md + - name: Modify or remove access between sharePoint web app and TFS + href: ./admin/modify-remove-access-shareport-tfs.md + - name: Configure SharePoint Server 2010 or 2007 for Dashboards + href: ./admin/config-ent-sharepoint0710-dashboards.md + - name: Upgrade TFS + href: ./upgrade/get-started.md + items: + - name: Pre-upgrade + href: ./upgrade/pre-upgrade.md + - name: Pre-production + href: ./upgrade/pre-production.md + - name: Locate or change TFS product key + href: ./upgrade/change-product-key.md + - name: TFS Express + href: ./upgrade/express.md + - name: Walkthrough + href: ./upgrade/walkthrough.md + - name: Upgrade TFS 2013 + items: + - name: Upgrade requirements + href: ./upgrade/upgrade-2013/upgrade-2013-requirements.md + - name: Use new app tier hardware + href: ./upgrade/upgrade-2013/new-app-tier-hardware.md + - name: Use same app tier hardware + href: ./upgrade/upgrade-2013/same-app-tier-hardware.md + - name: Set up SQL Server + href: ./upgrade/upgrade-2013/setup-sql-server.md + - name: Use same SharePoint site + href: ./upgrade/upgrade-2013/use-same-sharepoint-site.md + - name: Back up and restore TFS data + href: ./upgrade/upgrade-2013/backup-and-restore-data.md + - name: Run upgrade wizard + href: ./upgrade/run-upgrade-wizard.md + - name: Upgrade from TFS 2005 + href: ./upgrade/tfs-2005-to-2015.md + - name: Migrate from TFS to VSTS + items: + - name: Migrate data from TFS to VSTS + href: ../migrate-to-vsts-from-tfs.md + - name: Migration overview + href: ../articles/migration-overview.md + - name: Migration import + href: ../articles/migration-import.md + - name: Process templates + href: ../articles/migration-processtemplates.md + - name: Post import + href: ../articles/migration-post-import.md + - name: Advanced migration topics + href: ../articles/migration-advanced-topics.md + - name: Configure Lab Management for SCVMM environments + href: ./admin/config-lab-scvmm-envs.md + - name: Set up secure sockets layer + href: ./admin/setup-secure-sockets-layer.md + - name: Manage TFVC file types + href: ./admin/manage-file-types.md + - name: Restrict access to resources + href: ../accounts/restrict-access-tfs.md?toc=/vsts/tfs-server/toc.json + - name: Install proxy server and set up remote site + href: ./install/install-proxy-setup-remote.md + - name: Change site and certificate settings + href: ../security/websitesettings.md?toc=/vsts/tfs-server/toc.json +- name: Troubleshooting + items: + - name: Troubleshooting migration + href: ../articles/migration-troubleshooting.md +- name: Reference + items: + - name: Requirements + href: /vsts/accounts/requirements?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json + - name: Requirement changes + href: requirement-changes-tfs15.md + - name: Service accounts dependencies + href: ./admin/service-accounts-dependencies-tfs.md + - name: Permission lookup guide + href: /vsts/security/permissions-lookup-guide?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json + - name: Permissions and groups reference + href: /vsts/security/permissions?toc=/vsts/tfs-server/toc.json&bc=/vsts/tfs-server/breadcrumb/toc.json + - name: Supported topologies + items: + - name: Examples of simple topology + href: ./architecture/examples-simple-topo.md + - name: Examples of moderate topology + href: ./architecture/examples-moderate-topo.md + - name: Examples of complex topology + href: ./architecture/examples-complex-topo.md + - name: Command-line tools + items: + - name: TFSConfig + href: ./command-line/tfsconfig-cmd.md + - name: TFSLabConfig + href: ./command-line/tfslabconfig-cmd.md + - name: TFSDeleteProject + href: ./command-line/tfsdeleteproject-cmd.md + - name: TFSSecurity + href: ./command-line/tfssecurity-cmd.md + - name: TFSServiceControl + href: ./command-line/tfsservicecontrol-cmd.md +- name: Resources + items: + - name: Get started user guide + href: ../user-guide/index.md + - name: "Security & Identity" + href: ../security/index.md + - name: Billing + href: ../billing/index.md + + diff --git a/docs/tfs-server/upgrade/_img/IC552209.png b/docs/tfs-server/upgrade/_img/IC552209.png new file mode 100644 index 00000000000..b4a7cad0fb1 Binary files /dev/null and b/docs/tfs-server/upgrade/_img/IC552209.png differ diff --git a/docs/tfs-server/upgrade/_img/IC612457.png b/docs/tfs-server/upgrade/_img/IC612457.png new file mode 100644 index 00000000000..d07a7852c3b Binary files /dev/null and b/docs/tfs-server/upgrade/_img/IC612457.png differ diff --git a/docs/tfs-server/upgrade/_img/IC612458.png b/docs/tfs-server/upgrade/_img/IC612458.png new file mode 100644 index 00000000000..b154221478d Binary files /dev/null and b/docs/tfs-server/upgrade/_img/IC612458.png differ diff --git a/docs/tfs-server/upgrade/_img/IC612459.png b/docs/tfs-server/upgrade/_img/IC612459.png new file mode 100644 index 00000000000..73443457da5 Binary files /dev/null and b/docs/tfs-server/upgrade/_img/IC612459.png differ diff --git a/docs/tfs-server/upgrade/_img/IC666060.png b/docs/tfs-server/upgrade/_img/IC666060.png new file mode 100644 index 00000000000..a7e9c294da8 Binary files /dev/null and b/docs/tfs-server/upgrade/_img/IC666060.png differ diff --git a/docs/tfs-server/upgrade/_img/IC666061.gif b/docs/tfs-server/upgrade/_img/IC666061.gif new file mode 100644 index 00000000000..b391518c02c Binary files /dev/null and b/docs/tfs-server/upgrade/_img/IC666061.gif differ diff --git a/docs/tfs-server/upgrade/_img/IC666063.png b/docs/tfs-server/upgrade/_img/IC666063.png new file mode 100644 index 00000000000..4d8475bbbe2 Binary files /dev/null and b/docs/tfs-server/upgrade/_img/IC666063.png differ diff --git a/docs/tfs-server/upgrade/_img/backup-dbs.png b/docs/tfs-server/upgrade/_img/backup-dbs.png new file mode 100644 index 00000000000..6414f54747d Binary files /dev/null and b/docs/tfs-server/upgrade/_img/backup-dbs.png differ diff --git a/docs/tfs-server/upgrade/_img/hostsfile.png b/docs/tfs-server/upgrade/_img/hostsfile.png new file mode 100644 index 00000000000..90320e22cac Binary files /dev/null and b/docs/tfs-server/upgrade/_img/hostsfile.png differ diff --git a/docs/tfs-server/upgrade/_img/run-upgrade-wiz.png b/docs/tfs-server/upgrade/_img/run-upgrade-wiz.png new file mode 100644 index 00000000000..0609649b232 Binary files /dev/null and b/docs/tfs-server/upgrade/_img/run-upgrade-wiz.png differ diff --git a/docs/tfs-server/upgrade/_img/serviceaccount.png b/docs/tfs-server/upgrade/_img/serviceaccount.png new file mode 100644 index 00000000000..676350ae2fd Binary files /dev/null and b/docs/tfs-server/upgrade/_img/serviceaccount.png differ diff --git a/docs/tfs-server/upgrade/_img/setup-sql-server.png b/docs/tfs-server/upgrade/_img/setup-sql-server.png new file mode 100644 index 00000000000..eb6eedebfbe Binary files /dev/null and b/docs/tfs-server/upgrade/_img/setup-sql-server.png differ diff --git a/docs/tfs-server/upgrade/change-product-key.md b/docs/tfs-server/upgrade/change-product-key.md new file mode 100644 index 00000000000..b76eb6a239c --- /dev/null +++ b/docs/tfs-server/upgrade/change-product-key.md @@ -0,0 +1,47 @@ +--- +title: Locate or Change the Product Key for Team Foundation Server +description: Locate or Change the Product Key for Team Foundation Server +ms.assetid: 1a99fafa-aa5b-4488-944e-123110a2c547 +ms.manager: douge +ms.author: elbatk +ms.date: 08/18/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Locate or Change the Product Key for Team Foundation Server + +**TFS 2015** | **TFS 2013** + + +To move from the trial edition to the full edition of Team Foundation Server, you must have a valid product key for Team Foundation Server. + +You can review the license type, license expiration date, and product key number of your deployment of Team Foundation Server. Problems with an expired or non-valid product key can disrupt your deployment. If you installed a trial edition of Team Foundation Server, you should be careful not to let the license expire. After the license expires, your users will be unable to use Team Foundation Server until you take steps to correct the situation. You might also need to locate the product key of Team Foundation Server for support or record-keeping purposes. + +> [!NOTE] +> If you have any issues during the licensing upgrade process, you can contact support for Visual Studio. For more information, see the following page on the Microsoft Web site: [Help and Support](http://go.microsoft.com/fwlink/?linkid=108287) and the [Team Foundation Server Licensing Whitepaper](http://go.microsoft.com/fwlink/?LinkID=253211). + +**Required Permissions** + +To perform these procedures, you must be a member of the Administrators security group on the application-tier server for Team Foundation Server and a member of the Team Foundation Administrators group. + +## To locate or change your product key + +1. Open the administration console of Team Foundation Server. + +2. Expand the name of the server, and review the information in Product ID, License Type, and License Expires. + + The number that appears in Product ID is your product key. + +3. (Optional) If you must change or update your product key, choose Update License. + + The Team Foundation Server License window opens. + +4. Type the product key, and then choose Activate. + + +## Where to find your product key if it does not appear in the administration console + + * On the sleeve of the setup DVD. + * On the [Microsoft Subscriber Downloads](http://go.microsoft.com/fwlink/?LinkId=206363) web site. + diff --git a/docs/tfs-server/upgrade/express.md b/docs/tfs-server/upgrade/express.md new file mode 100644 index 00000000000..49e4a6f38c9 --- /dev/null +++ b/docs/tfs-server/upgrade/express.md @@ -0,0 +1,53 @@ +--- +title: Upgrading TFS Express On-premises +description: Walkthrough of an Express upgrade +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 25542ee9-2c35-4e95-be1e-6c1243119513 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Upgrading TFS Express + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +Upgrading a TFS Express install is about as simple as a TFS upgrade can get, since +express installations are limited in size, cannot be configured to use multiple machines, +do not support SharePoint or reporting, etc. + +## Prepare your environment + +As with any upgrade, you will need to check [system requirements](../../accounts/requirements.md) to +ensure that your current configuration is supported. For an Express deployment this will mean +checking the OS. The TFS 2015 Express upgrade process will attempt to upgrade SQL Express to +SQL 2014 SP1 Express, which typically requires the latest service pack of whatever version +is currently installed. If in doubt, the upgrade process itself will tell you if you need to do +something. + +## Expect the best, prepare for the worst + +For TFS Express deployments it is not typically worth it to attempt any sort of pre-production upgrade, +since these deployments are simple ones that are typically used by one person or a small handful of +people. It is always worth having a complete set of backups, however, so you should ensure that +you take backups prior to starting the upgrade. The upgrade wizard provides access to a +database backup tool which can do this for you if you don't already have a process in place for +taking backups. + +## Do the upgrade + +The upgrade process itself for TFS Express is quite simple - +just install [TFS Express 2015](https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs) +where you have the older version of TFS installed. +You will only need to make a couple of basic decisions, and when upgrading +from TFS 2012 or TFS 2013 the settings from your previous deployment will be remembered for you. + +By default, the TFS 2015 Express upgrade will install and configure a build agent for the +[new TFS 2015 build system](../../build-release/overview.md), and will set it up to start automatically +so that you can start using it right away after your upgrade. If you do not want to use the +new build system, you can uncheck the box to turn the agent off. + +And that's it. As with all TFS configuration wizards, readiness checks will run to validate that your +system is ready to configure, and when you click Configure your databases will be upgraded. + diff --git a/docs/tfs-server/upgrade/get-started.md b/docs/tfs-server/upgrade/get-started.md new file mode 100644 index 00000000000..0a185dc44bb --- /dev/null +++ b/docs/tfs-server/upgrade/get-started.md @@ -0,0 +1,99 @@ +--- +title: Upgrade your TFS deployment +description: Upgrade your instance of Team Foundation Server to the latest version +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 575486d5-af44-41a1-b14c-b82e1e362132 +toc: show +ms.manager: douge +ms.author: elbatk +ms.date: 09/26/2016 +--- + +# Upgrade your deployment to the latest version of TFS + +**TFS 2018 | TFS 2017 | TFS 2015** + +The general process for upgrading an existing deployment of Team Foundation Server is to: + +1. **Prepare your environment**. New [system requirements](../../accounts/requirements.md) may require you to upgrade hardware or software. +And regardless, an upgrade is a good time to consider whether your current environment is meeting your needs, +or whether it makes sense to make changes. + +2. **Expect the best, prepare for the worst**. While we put a lot of effort into ensuring that TFS upgrades are highly reliable, it always makes sense to +prepare for the case where something goes wrong. The single most important step you can take here is to ensure +you have a complete and consistent set of [database backups](../admin/backup/config-backup-sched-plan.md). + + > If you're upgrading in place (not moving to new hardware), + > consider doing a [dry run](pre-production.md) of your upgrade in a pre-production environment. + +3. **Do the upgrade**! Once the preparation is done, you'll need to install the new version of TFS to get new binaries, and then run +through the upgrade wizard to upgrade your databases. + + > Direct upgrade to TFS 2015 is supported only from TFS 2010 and newer. + > If your TFS deployment is on an older version than that, + > you will need to upgrade to TFS 2015 in multiple hops. + > For example, if you are on TFS 2008 you could upgrade to TFS 2012 first and then to TFS 2015. + +4. **Configure new features**. Depending on what version you upgraded from, you may need to [configure each team project](../../work/customize/configure-features-after-upgrade.md) to gain access to some of the new features made available. You don't have to do this immediately, but those features aren't available in that team project until they're configured. Depending on the team project, you'll use some combination of the Configure Features wizard that appears on the Work page and some manual configuration. + + +## Before you upgrade to TFS 2018 + +As of TFS 2017.2, the [old work item form <Layout> tag has been deprecated](https://blogs.msdn.microsoft.com/devops/2017/05/22/announcing-the-deprecation-of-the-old-work-item-form-in-tfs/) and is no longer supported in TFS 2018. +If you are upgrading your server and have a collection where the new work item form has not been enabled you will encounter the following severe warning during readiness checks: + +``` +[VS403364]: This release introduces major updates to the work item form layout and functionality and deprecates legacy custom controls. Consequently, the upgrade process will update all work item type definitions to use the new work +item form WebLayout element and remove all custom controls. For additional information and recommended upgrade steps, see the Deployment Guide. +``` + +We recommend that you review [handling a TFS 2018 upgrade from old form to new form](https://blogs.msdn.microsoft.com/devops/2017/08/31/handling-a-tfs-2018-upgrade-from-old-form-to-new-form/) for further guidance. + +## Before you upgrade to TFS 2017 + +If you use TFS-Project Server integration to synchronize data between TFS and Project Server, then you'll want to review the following two topics: + +- [Synchronize TFS with Project Server](../../work/office/sync-ps-tfs.md) - which describes how native integration with Project Server is no longer supported, and instead a solution is provided by our partner, Tivitie. +- [Remove integration of TFS with Project Server](../../work/office/remove-tfs-ps-integration.md) - which provides step-by-step procedures for removing the integration. You need to perform the first procedure provided prior to your upgrade. + +Also, we recommend that you review the options you have when [you upgrade from TFS 2008 or TFS 2010](../../work/customize/upgrade-tfs-2008-or-2010.md). Depending on the amount of customization you've made to your work tracking process, you'll want to choose between the options described. + +## Complexity + +Upgrading a TFS deployment can be quite straightforward or quite complicated, depending on the specifics of your +existing deployment. Factors that will influence the complexity and duration of your upgrade include: + +- How many servers are involved in your deployment. +- Whether your deployment is configured with SharePoint integration or reporting. +- How large your databases are. +- How old a version you are upgrading from. + +In all cases, however, the general process is logically the same. Get your environment ready; Expect the best, +prepare for the worst; and finally, do the upgrade. + +## Downtime + +Your TFS deployment will be offline for the duration of the upgrade. Upgrade times can be measured in minutes for +very small deployments or in days for very large deployments. You can keep +your upgrades comparably speedy by [cleaning up unnecessary data](../../accounts/clean-up-data.md). If you're keeping up +with the latest versions of TFS, that helps a lot, too. + +If you're upgrading a very large database to TFS 2015, consider using the [TfsPreUpgrade tool](pre-upgrade.md). +It performs the most expensive parts of the upgrade from TFS 2013 QU4/QU5 in the background, allowing you to +continue using TFS. This tool can cut offline times for upgrade significantly for large databases - one internal +Microsoft database went from over a week of offline time down to under a day. + +## Details + +[Walk through a TFS Express upgrade](express.md) - this is as simple as it gets. + +[Walk through a standard upgrade scenario](walkthrough.md) - upgrading a two server deployment +from TFS 2012 to TFS 2015. + +[Walk through an upgrade from TFS 2005 to TFS 2015](tfs-2005-to-2015.md). + +We will be covering more advanced scenarios - things like upgrading deployments which have multiple application +tiers in a load balancer, deployments which have their databases in SQL Always On availability groups, etc. - in +future updates. In the meantime, the documentation for TFS 2013 and earlier is still relevant and can provide +some guidance for these more advanced scenarios. \ No newline at end of file diff --git a/docs/tfs-server/upgrade/pre-production.md b/docs/tfs-server/upgrade/pre-production.md new file mode 100644 index 00000000000..332ad071c9c --- /dev/null +++ b/docs/tfs-server/upgrade/pre-production.md @@ -0,0 +1,97 @@ +--- +title: Pre-production upgrade On-premises +description: Do a dry run of your upgrade in pre-production to avoid surprises in production. +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 28B2A39E-71BB-49A0-A5EA-3F094446CE32 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Do a dry run of your upgrade in a pre-production environment + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +## Do I need to bother? + +Doing a dry run of your upgrade in a pre-production environment is strongly recommended, but it doesn't always +make sense. If you are debating whether or not to do a pre-production upgrade, weigh the costs of doing so +against the costs of not doing so. In particular, if something goes wrong with your production upgrade the primary +cost will be the downtime involved while you roll back to the old version of TFS. Depending on the specifics of your +upgrade, this could be a fast and straightforward process, or it could take a very long time and involve a lot of +moving parts. Just as with upgrade, the complexity of the rollback will depend on things like the size of your +databases, the number of machines involved, etc. + +## The basics + +If you decide to move forward with a pre-production upgrade, the general process consists of: + +1. Standing up a pre-production environment that is similar to your production environment. +2. Protecting your production environment. +3. Restoring databases from backups. +5. Doing the upgrade. + +## Standing up an environment + +In an ideal world, your pre-production environment would look exactly like your production environment – this way +you would get as accurate as possible a picture of how long your upgrade will take, whether you will encounter any +issues along the way, etc. In the real world, however, this is not always possible or desirable. The product doesn't +support cloning SharePoint integration features, for example. And the costs of provisioning a second set of +identical machines for pre-production testing can be prohibitive. Don't let these discrepancies +dissuade you, however – almost any pre-production environment is better than nothing. + +## Protecting production + +TFS databases contain a number of settings which point to various resources in their deployment environment. For +example, the collection database connection strings are stored in the configuration database, as is the network +share used by the scheduled backups feature. As a result, it is possible for a pre-production environment to +cause problems in a production environment, and it is a best practice when standing up a pre-production environment +to take steps to prevent this. + +The most important step you can take is to use a service account in your pre-production environment that does not +have any permissions to your production environment. Ideally it should not have any permissions in TFS, in +SQL, on network shares, etc. Options here include Network Service (assuming your pre-production machine account +does not need permissions in production) or a dedicated pre-production domain account, as in the example below. + +![Example pre-production service account](_img/serviceaccount.png) + +Another optional step is to add entries to your pre-production machine(s)' hosts files to map your production +machine names to invalid IP addresses. See the Wikipedia entry [here](https://en.wikipedia.org/wiki/Hosts_(file) ) +if you are unsure what a hosts file is. This can prevent outbound communication to your production machines +from your pre-production machines. + +![Example hosts file redirection of AT and DT](_img/hostsfile.png) + +## Restoring databases + +If you use the [scheduled backups wizard](../admin/backup/config-backup-sched-plan.md) to generate +database backups from your production deployment, you can also use it to restore backups on your pre-production +deployment. If not, you can of course follow standard SQL procedures to restore backups as well. Your list of +databases to backup and restore should always include your configuration database and all your collection databases. +If your pre-production environment will include reporting features, you should also include the warehouse and report +server databases. + +## Doing the upgrade + +Install the new version of TFS on your application tier machines. Prior to running the upgrade wizard, +run the [ChangeServerId command](../command-line/tfsconfig-cmd.md#changeserverid). This will ensure that you +don't run into problems if you access both your production and pre-production environments from the same clients, +and should be done any time you are cloning either a collection or a complete deployment. + +Once you are ready, upgrade your pre-production environment using the same steps you will use to upgrade +production. Make sure you remember to use a service account which has no permissions in your production environment. + +## Configure new features + +Some upgrades introduce new features which take additional steps to configure, since they involve process changes to +your existing team projects. Depending on the specifics of your team projects and the version of TFS you are upgrading +from, this could be more or less complicated. See [here](../../work/customize/configure-features-after-upgrade.md) for details. + +## Try things out + +Take the pre-production server out for a spin! Poke around a bit, try out some of the new features... Note that +some things, like running builds, will require some additional configuration. + +If you discover any issues, try to work through them here in order to avoid hitting them again in production. +When you are satisfied, call it a day and move on to your production upgrade. \ No newline at end of file diff --git a/docs/tfs-server/upgrade/pre-upgrade.md b/docs/tfs-server/upgrade/pre-upgrade.md new file mode 100644 index 00000000000..67fe4342481 --- /dev/null +++ b/docs/tfs-server/upgrade/pre-upgrade.md @@ -0,0 +1,192 @@ +--- +title: TfsPreUpgrade On-premises +description: Use TfsPreUpgrade to reduce the time required to upgrade TFS 2013 to TFS 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 445ae357-cea6-48f8-85cb-037613a240cb +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Use TfsPreUpgrade to reduce downtime + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +## Requirements +TfsPreUpgrade is only supported for Team Foundation Server deployments which: + +- Are currently on TFS 2013 Update 4 or Update 5. +- Have their relevant collection databases on an Enterprise edition of SQL Server. +- Have their relevant collection databases on either SQL Server 2012 SP1 (or greater) or SQL Server 2014 CU3 (or greater). + +See below for more information. + +## Introduction +Team Foundation Server 2015 includes schema changes to a large number of tables in order to +support renaming team projects. As a result, upgrading to Team Foundation Server 2015 can take +a significant amount of time, depending on the size of your database. Because TFS upgrades are +offline, Microsoft is providing a tool, TfsPreUpgrade.exe, which can be used to do the most expensive +parts of the work to upgrade to TFS 2015 while your TFS 2013 deployment is still online. +You don't have to run this tool before you upgrade. +We recommend running it for collection databases that exceed 1 TB in size +to reduce the time that TFS will need to be offline. + +Generally TfsPreUpgrade.exe works by creating new copies of the tables most impacted by the schema changes +present in TFS 2015 and then migrating data from the original tables to the new copies. In order to handle +ongoing user activity, it also puts triggers in place that keep changes to the original tables flowing to +the new copies. Microsoft has optimized TfsPreUpgrade.exe extensively in order to minimize its performance +impacts on your servers and users, but it can and will have an impact on performance. For large operations +such as Team Foundation Version Control (TFVC) creating and deleting of branches, this could lead to user +dissatisfaction and even database timeouts. See below for a complete list of the operations known to be +substantially impacted. + +As a result, TfsPreUpgrade.exe should be started as close as possible to the planned date of the offline +upgrade while still having time to complete its work, and should be run during a window where these large +operations can be avoided. Many factors will go in to how long it takes TfsPreUpgrade.exe to complete, but +we generally expect it to take two weeks or less, and therefore generally recommend beginning TfsPreUpgrade.exe +two weeks before your planned offline upgrade. TfsPreUpgrade.exe can provide a rough estimate of how long it +will take to execute by running the Estimate command. + + TfsPreUpgrade.exe Estimate /TargetDatabaseNames:"{SQL Instance};{Collection Database Name}" + +Because of how it works, TfsPreUpgrade.exe requires stable source and target database schemas. As such, it can +only be run against TFS 2013 Update 4 and Update 5 databases. If your TFS deployment is not yet on TFS 2013 Update 4 or 5, +you will need to upgrade to one of those versions before running TfsPreUpgrade.exe. TFS 2013 Update 5 can be downloaded here: +https://www.visualstudio.com/downloads/download-visual-studio-vs. + +## What does TfsPreUpgrade.exe do? +TfsPreUpgrade.exe will: + +- Enable compression for a small number of tables that were not compressed in 2013 but will be in 2015. +- Scan for and fix a very rare but well understood data corruption in TFS version control data. +- Create new tables and migrate existing data to them. +- Create triggers. +- Update stored procedures. +- Create indexes. (Enterprise editions of SQL Server are required in order to allow these operations to be performed online.) + +Because it creates new tables in order to migrate data in an online manner, TfsPreUpgrade.exe requires a +potentially large amount of additional disk space for both data and transaction logs. As part of the execution +of TfsPreUpgrade.exe, it will check to see whether that amount of space is already available. If not, it will +attempt to pre-allocate that much space. If that fails, it will generate an error. TfsPreUpgrade.exe can provide +an estimate of how much space it will attempt to pre-allocate by running the Estimate command. + + TfsPreUpgrade.exe Estimate /TargetDatabaseNames:"{SQL Instance};{Collection Database Name}" + +Because TfsPreUpgrade.exe performs potentially expensive operations (bulk copying of data, index creations, etc.) +it can have an impact on the performance of your server. Microsoft does not expect this impact to be dramatic, +and we have optimized the operations performed by TfsPreUpgrade.exe to minimize the impact on your servers and +your users. If you do experience performance problems while TfsPreUpgrade.exe is running, it can always be canceled +by typing Ctrl-C. TfsPreUpgrade.exe is written so that canceling it cancels the operations it is performing. It +should never leave your database in a bad state, and can always be re-run multiple times if it exits before it has +run to completion. + +Because TfsPreUpgrade.exe creates triggers which keep the original and new copies of tables in sync after the +initial migration, even after canceling TfsPreUpgrade.exe it is possible that it will continue having an impact +on the performance of your server. Again, Microsoft does not expect this impact to be dramatic, and we have +optimized the performance of these triggers in order to minimize the impact on your servers and your users. If +you do continue to experience performance problems after canceling TfsPreUpgrade.exe, you can use the +TfsPreUpgrade.exe Revert command to undo most of the actions performed by the Run command. Revert will remove all +of the triggers installed by the Run command, will delete all of the new tables it created, etc. For the set of +actions taken by Run which are not reverted by Revert, see below. + +TFVC operations that deal with very large numbers of items +are the most likely to be negatively impacted by the triggers that TfsPreUpgrade.exe creates. +If you can, avoid these TFVC operations while TfsPreUpgrade.exe is running +and before offline upgrade to TFS 2015 is completed. + +- Creating, deleting and renaming branches. +- Destroy operations which impact large numbers of items. +- Deleting team projects that use TFVC. + +If you do need to perform these operations, +you can expect them to take at least twice as long to complete with the TfsPreUpgrade triggers in place. + +## How do I run TfsPreUpgrade.exe? + +The recommended procedure for running TfsPreUpgrade.exe is: + +1. [Download TfsPreUpgrade.exe](http://www.microsoft.com/en-us/download/details.aspx?id=48263). + Note that the machine on which you install TfsPreUpgrade is not + important so long as it can access the relevant SQL instance(s) - it comes zipped up with all of its dependencies. +2. Unzip it to a local directory. +3. Determine which collection databases you wish to run TfsPreUpgrade.exe on. It can be run on any collection +databases without negative impacts on their upgrade-ability, but is generally only needed on databases that are +large enough to require significant downtime during an offline upgrade. Microsoft recommends using TfsPreUpgrade.exe +on databases above 1 TB in size. +4. As a user who is a sysadmin on the SQL instance (TfsPreUpgrade sets several traceflags during its execution), +execute the Run command: + + TfsPreUpgrade.exe Run /TargetDatabaseNames:"{SQL Instance};{Collection Database Name}" + +5. If you wish to run TfsPreUpgrade.exe on more than one collection database, you can either use multiple +invocations of TfsPreUpgrade.exe (in which case they will run in parallel) or you can specify multiple +comma-separated SQL instance / Collection Database strings in a single invocation (in which case they will run +sequentially). + +TfsPreUpgrade.exe will run for quite some time, depending on the size of the collection database(s) that it is +running against. It will report progress along the way so that you can have some idea of how far along it is and +how much time might be left. Once TfsPreUpgrade.exe has completed, the triggers that it installs will keep any +additional changes made due to the server being online flowing into the migrated tables. As such, there is no need +to run it again before performing your offline upgrade to TFS 2015. + +## Code churn statistics +One advanced option you can consider when running TfsPreUpgrade.exe is skipping the migration of code churn statistics +older than some threshold. Code churn statistics are calculated by a background process when changes are checked in to +TFVC, and are stored in one of the tables migrated by TfsPreUpgrade.exe. This data then flows into the warehouse and +cube and can then be used in reports. See [here](https://msdn.microsoft.com/library/ms244661.aspx) for more information. + +If old code churn statistics are not of interest to you (or if any code churn statistics are not of interest to you), you can +save some time during the execution of TfsPreUpgrade.exe and the subsequent execution of offline upgrade by skipping +the migration of statistics older than a given date. This can be accomplished using the optional +/SkipCodeChurnBefore parameter to the Run command. For example, if you wanted to skip the migration of code churn +statistics older than January 1st, 2015, you could use the following command line: + + TfsPreUpgrade.exe Run /TargetDatabaseNames:"{SQL Instance};{Collection Database Name}" /SkipCodeChurnBefore:"1/1/2015" + +If you use this option, the relevant code churn statistics will not be migrated and will not be present in the warehouse +and cube after your offline upgrade. + +## Offline upgrade to TFS 2015 + +You are now ready to do your offline upgrade to TFS 2015, for which you can follow the normal procedures for +upgrading TFS. + +See below for additional data on some infrequently performed operations which are blocked by TfsPreUpgrade.exe +and for more information on database changes made by TfsPreUpgrade.exe which are not reverted by running +TfsPreUpgrade.exe Revert. + +### Blocked operations + +Early on during the execution of TfsPreUpgrade.exe a number of "safety" triggers are put in place to block +operations which were allowed by TFS 2013 but which are either no longer allowed by TFS 2015 or which would +cause problems in the presence of the triggers put in place by TfsPreUpgrade.exe. These include: + +1. Deletion of team projects. It is not recommended to delete team projects once you have run TfsPreUpgrade.exe +against a collection database. If you do delete a team project, it will fail just before finalizing the deletion, +leaving the project behind in a Deleting state. Team project deletion will be supported again once you upgrade to +TFS 2015. +2. Creation of workspaces with references to root folders which do not exist. These will fail with error +TF10169. Note that one scenario where this could surface is in build definitions whose workspace templates reference +root folders which do not exist - in these scenarios, builds may fail during workspace creation with the given error. +This scenario will continue to be unsupported in TFS 2015 due to changes related to Team Project rename but will +fail with a more relevant error message. +3. Calling VersionControlServer.CreateTeamProjectFolder() via code written against the TFS client OM. This will +fail with error TF10169. This scenario will continue to be unsupported in TFS 2015 due to changes related to Team +Project rename but will fail with a more relevant error message. + +### Exceptions to TfsPreUpgrade.exe Revert +Running TfsPreUpgrade.exe Run has a number of side effects which are not reverted by running TfsPreUpgrade.exe Revert. +Of most interest, any pre-allocation of database and/or transaction log space done by TfsPreUpgrade.exe will not be reverted, +meaning that your database files may be significantly larger than they were prior to running TfsPreUpgrade.exe. The extra +space will be unused, however, since the additional tables created by TfsPreUpgrade.exe will be deleted. We recommend +leaving this space in place, both since it will naturally be filled in as the size of the data in your database files +goes up, and because it will be needed eventually by the upgrade to TFS 2015. + +The other side effects which are not reverted are not impactful and are listed here only for your information. These changes +would have been made by an upgrade to TFS 2015 in any case, and should not have any impact on the functioning of your server +or on its eventual upgrade. + +1. Any corruptions found and fixed in TFS version control data will not be reverted. +2. A column added to tbl_Version by the corruption detection and fixup script will not be removed. +3. Tables for which compression is enabled will not have it disabled again. \ No newline at end of file diff --git a/docs/tfs-server/upgrade/run-upgrade-wizard.md b/docs/tfs-server/upgrade/run-upgrade-wizard.md new file mode 100644 index 00000000000..ebe1c459e2b --- /dev/null +++ b/docs/tfs-server/upgrade/run-upgrade-wizard.md @@ -0,0 +1,167 @@ +--- +title: Run the TFS Upgrade Wizard +description: Run the TFS Upgrade Wizard +ms.assetid: 5569d0ac-6c7a-4f02-9546-c27d538f2dea +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Run the TFS Upgrade Wizard + +**TFS 2015** | **TFS 2013** + +First, install TFS, then run the upgrade configuration wizard. If you move the TFS application tier to new hardware, you must update the URL for the application tier after you finish running the TFS upgrade wizard. + +> [!TIP] +> After you install TFS, its configuration tool appears automatically. If for some reason you don’t see it, you can access it from the TFS administration console. Launch TFS administration console from the **Start** menu. In the admin console, choose **Application Tier**, and then choose **Configure Installed Features**. + +**Required Permissions** + +You must be a member of the Windows Administrators security group. If you’re upgrading a basic TFS installation, these are the only permissions you need. If you plan to configure reporting, you must also be a member of the Windows Administrators security group on the server that is running SQL Server Reporting Services. If you plan to configure SharePoint Products, you must be a member of the Farm Administrators group on the SharePoint Products administration site. If you did not install the Database Engine that will host the configuration database or a database administrator manages the instance of SQL Server that you are using, you must be a member of sysadmin Server role in SQL Server. + +### To run the Team Foundation Server installer + +1. Insert the Team Foundation Server DVD in the drive and launch the tfs\_server.exe file to begin the installation. + +2. On the license terms dialog box, accept the license terms and then choose **Install Now**. + + If you want to install Team Foundation Server to a specific location in the file system, choose the browse button (…) next to the default install location. + +### To run the Team Foundation Server upgrade wizard + +1. In the **Team Foundation Server Configuration** tool, choose **Upgrade**, and then choose **Start Wizard**. If you have TFS 2012 or TFS 2013 installed, the wizard opens automatically and you can skip this step. + +2. Read the Welcome screen and choose **Next**. + +3. Type the name of the SQL Server instance that hosts the data from an earlier version of Team Foundation Server, and choose **List Available Databases**. If your configuration database is part of an AlwaysOn Availability Group, you will be prompted to confirm that you want to upgrade in full recovery mode. + + The wizard lists deployments of Team Foundation Server that you can upgrade. If multiple deployments are listed, choose the one that you want to upgrade. + +4. Select the **By checking this box, I confirm that I have a current backup** check box, and then choose **Next**. + + If you need to do a backup, you can choose **Click here to launch the Database Backup Tool**, follow the steps below, then continue with the TFS upgrade wizard. + + The TFS Database Backup Tool displays the databases it finds on the SQL Server instance specified in **SQL Server Instance**. + + 1. In Select databases to back up, choose the databases to back up. + + Need help? [List of TFS 2010 databases on MSDN](http://go.microsoft.com/fwlink/?LinkId=258325); [List of TFS 2012 databases on MSDN](../architecture/sql-server-databases.md) + + 2. In **Backup Databases to**, accept the default location or enter another location. + + > [!NOTE] + > If you want to overwrite backups stored in this network location, you can choose **Overwrite existing database backups at this location**. + + 3. Choose **Backup Now**. + + The Backup tool reports progress on each database being backed up. + + 4. Choose **Close**. + +5. Choose **Use a system account** to use a built-in account, or choose **Use a user account** to use a domain or local account. If you are using a user account, you must type its password. To test the user account and password combination, choose **Test**. + + **Network Service** is the default value for this service account. + +6. Under **Authentication Method**, choose **NTLM** or **Negotiate (Kerberos)**, and then choose **Next**. + + - If you choose **NTLM**, NTLM authentication is used. This option is the default setting. + + - If you choose **Negotiate (Kerberos)**, Kerberos authentication is attempted first. If that authentication fails, NTLM authentication is used. + +7. Set up your file cache location. Make sure you have at least 50 Gb of free space. If you use a drive other than your Windows drive, TFS will perform better. + + On client operating systems, you must skip to step 10. You cannot configure SharePoint Products or the reporting feature of Team Foundation Server (steps 8 and 9) on a client operating system. + +8. Select the **Configure Reporting for use with Team Foundation Server** check box to use reporting, or clear the check box to skip reporting, and then choose **Next**. + + > [!TIP] + > If you skip reporting and add it later during an upgrade, you may need to use different database names for the reporting warehouse databases (TFS_Warehouse and TFS_Analysis). As an alternative, you can delete the old reporting databases and new databases will be created using the default names. + + 1. Enter the name of the server that is running SQL Server Reporting Services in **Reporting Services Instance** and choose **Populate URLs**.** ** + + The URLs for the report server and its management site appear in the drop-down lists for **Report Server URL** and **Report Manager URL**. + + 2. Choose the URLs that you want to use for Team Foundation Server and then choose **Next**. + + 3. Type the name of the server that is running the Database Engine and Full-Text Search to host the warehouse database, and then choose **List Available Databases**. + + The wizard lists available warehouse databases that you can upgrade. Choose the database that you want to upgrade, and then choose **Next**. + + You can choose **Test** to test the connection to SQL Server.  + + 4. Enter the name of the server that is running SQL Server Analysis Services in **SQL Analysis Services Instance** and choose **Next**. + + To test the connection to SQL Server, choose **Test**. + + 5. Enter the name and the password of the report reader account and choose **Next**. If you specified a user account for the service account of Team Foundation Server in step 5 and you want to use a different account in this step, you must select the **Use a different account than the Team Foundation Server service account for the Reporting Services report reader account** check box. + + Choose **Test** to test the user account and password combination. + +9. Select the **Configure SharePoint for use with Team Foundation Server** check box to configure SharePoint Products or clear the check box to skip the step, and choose **Next**. + + If you selected SharePoint Products configuration perform one of the following steps: + + - Choose **Use current SharePoint settings** to retain your settings for SharePoint Products, and then choose **Next**. + + You typically use this option to continue to use the existing portal, which must have the new Team Foundation Server Extensions for Windows SharePoint Services installed and configured. If your portal is on the server you are upgrading, the new extensions are configured automatically. + + - Choose **Change current settings to point to a different SharePoint farm**, enter the URL for the SharePoint web application and the SharePoint Administration site, and then choose **Next**. To test the connection to each of these URLs, you can choose **Test**. + + You typically use this option to migrate to a new portal, which must contain your migrated data for SharePoint Products. + +10. On the **Review** page, review your settings, and choose** Next**. + + The wizard validates your configuration. + +11. Choose **Configure**. + + The wizard applies configuration settings. + + > [!TIP] + > Did you get error TF255356 when you tried to upgrade from TFS 2012 (or TF400744 with TFS 2010)? These are misleading error messages. Read this blog post to recover: [TF255356: Known Issue with Configuring TFS 2013 RTM Express and Basic](http://blogs.msdn.com/b/visualstudioalm/archive/2013/12/04/known-issue-with-configuring-tfs-2013-rtm-express-and-basic.aspx) + +12. Choose **Next**. + + Your data is upgraded, and progress reports appear and detail the steps that are being performed. + +13. Choose **Next**. + +14. Read the final summary screen, and then choose **Close** twice—once in the wizard and then again in the configuration tool. + +> [!TIP] +> If you have Project Server added to TFS, this is when you should upgrade the TFS Extensions for Project Server. See the heading “Less-common upgrade tasks” for more information in [TFS upgrade requirements](upgrade-2013/upgrade-2013-requirements.md) + +## Update the URL for TFS + +If you did an in-place upgrade, you can ignore both these procedures. + +If you migrated the TFS application tier to new hardware, you have to update the URL for TFS on the application tier and in the TFS SharePoint Extensions. + +### Update the URL for TFS on the application tier + +1. On the TFS application-tier, open the administration console for Team Foundation Server. + +2. In the navigation bar, choose **Application Tier**, and then click **Change URLs**. + + The **Change URLs** window opens. + +3. In **Notification URL**, type the URL for the new application-tier server, and then choose **OK**. + +### Update the URL for the TFS application tier in the TFS Extensions for SharePoint + +1. On server running SharePoint, open the administration console for Team Foundation Server. + +2. In the navigation bar, choose **Extensions for SharePoint Products**, select the **SharePoint Web Application** and then choose **Modify access**. + + The **Access for Team Foundation Server** window opens. + +3. In **URL for Team Foundation Server**, type the URL for the new application-tier server, and then choose **OK**. + +## See Also + + [TFS upgrade requirements](upgrade-2013/upgrade-2013-requirements.md) + + [How to: Set up remote SharePoint Products for Team Foundation Server](../install/sharepoint/setup-remote-sharepoint.md) diff --git a/docs/tfs-server/upgrade/tfs-2005-to-2015.md b/docs/tfs-server/upgrade/tfs-2005-to-2015.md new file mode 100644 index 00000000000..cd4215ac1d6 --- /dev/null +++ b/docs/tfs-server/upgrade/tfs-2005-to-2015.md @@ -0,0 +1,94 @@ +--- +title: Upgrade from TFS 2005 to TFS 2015 +description: Walk through an upgrede from TFS 2005 to TFS 2015. +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: 659bcd33-d7b4-4ded-ad74-007d5fc4e4fd +toc: show +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Upgrade from TFS 2005 to TFS 2015 + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +Direct upgrade to TFS 2015 is not supported for anything older than 2010, +so to upgrade from TFS 2005, +you'll upgrade first to TFS 2010, +then to TFS 2015. + +## 1. Backup your databases + +If you're moving to new hardware, +you'll use the [backups of your TFS databases](../admin/backup/back-up-restore-tfs.md) to do that. +If you're upgrading TFS in place, the backups are there in case you decide not to complete the upgrade at this time. + +## 2. Upgrade your SQL instance + +Since TFS 2005 only supports SQL 2005 and TFS 2010 only supports SQL 2008 and SQL 2008 R2, +you'll have to upgrade your existing data tier, +or install a supported version of SQL on a new data tier and then restore your backed up DBs. + +## 3. Install TFS 2010 on the application tier + +Either: + +- Uninstall TFS 2005 from your existing application tier and then install TFS 2010 on it, or +- Install TFS 2010 on a new application tier. + +The choice you make here may depend on what operating system you want your final TFS 2015 deployment to be on. +TFS 2005 supports Server 2003. +TFS 2010 also supports Server 2003 in addition to Server 2008 and Server 2008 R2. +TFS 2015 supports Server 2008 R2, Server 2012, and Server 2012 R2, in addition to various client operating systems. +So, if you want to end up on Server 2012 or later in your 2015 deployment, +you can avoid upgrading your OS twice by sticking with Server 2003 for your TFS 2010 upgrade. +If you want to end up on Server 2008 R2, +you can jump straight to it for your TFS 2010 upgrade and then stick with it for the 2015 upgrade. + +## 4. Upgrade your databases to TFS 2010 + +Run through the TFS 2010 upgrade wizard to upgrade your databases. +If you had reporting configured in TFS 2005, +be sure to keep it configured in your TFS 2010 upgrade. + +## 5. Backup your databases again + +Same thing, you'll use them for moving to new hardware, or have them in case you decide not to complete the upgrade. + +## 6. Upgrade your SQL instance again. + +You'll need to upgrade your SQL instance again, +since TFS 2015 only supports SQL 2012 SP1 and SQL 2014. + +Either: + +- Upgrade SQL on your existing data tier, or +- Install a supported version of SQL on a new data tier and then restore your backed up DBs. + +## 7. Install TFS 2015 on the application tier + +Either: + +- Uninstall TFS 2010 from your existing application tier and then install TFS 2015 on it, or +- Install TFS 2015 on a new application tier. + +## 8. Upgrade your databases to TFS 2015 + +Run through the TFS 2015 upgrade wizard to upgrade your databases. +If you had reporting configured in TFS 2005, +be sure to keep it configured in your TFS 2015 upgrade. + +## 9. Upgrade SharePoint + +If you had SharePoint configured in your TFS 2005 deployment, +you'll need to upgrade your SharePoint instance. +TFS 2005 supported SharePoint 2.0. TFS 2015 supports SharePoint 2010 and 2013. +After upgrading your SharePoint instance, +you'll need to install TFS 2015 on it and configure SharePoint Extensions. + +For more information, see: + +- [Upgrading Team Foundation Server (2010)](../../accounts/requirements.md) +- [Upgrade your deployment to the latest version of TFS (2015)](../../accounts/account-management.md) diff --git a/docs/tfs-server/upgrade/upgrade-2013/backup-and-restore-data.md b/docs/tfs-server/upgrade/upgrade-2013/backup-and-restore-data.md new file mode 100644 index 00000000000..fd156ccaf8a --- /dev/null +++ b/docs/tfs-server/upgrade/upgrade-2013/backup-and-restore-data.md @@ -0,0 +1,316 @@ +--- +title: Back up and restore data for Team Foundation Server +description: Back up and restore data for Team Foundation Server +ms.assetid: da379f2e-79fc-440d-bc62-a5bf654c52e3 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Back up and restore data for TFS + +**TFS 2015** | **TFS 2013** + +![back up and restore data](../_img/backup-dbs.png) + + +## How to back up and restore TFS data to new hardware + +If you haven't installed TFS on the new hardware yet, you'll want to +do that now. You can use TFS custom backup and restore tools to manage +your data. + +> **Tip:** +> If you're upgrading from TFS 2012 with update 2 (TFS 2012.2) or +> higher, you can use the TFS built-in functionality to create your back +> up and restore it. + +First you're going to back up your data, including the encryption key +on the report server that you used with the previous version of TFS. +Next, you're going to restore your data to the SQL Server instance you +set up in step 2. With the restore complete, you'll use the SQL Server +Reporting tool to restart the report server database, restore its +encryption key, and then verify access to the report server. If you +installed SharePoint, you'll use a SharePoint command line tool to +attach and upgrade your content database. + +**Required Permissions** + +You must be a member of the administrators security group on Windows +server of the new hardware and the old. + +If you plan to configure reporting, you must also be a member of the +administrators security group on the server that is running SQL Server +Reporting Services. If you plan to configure SharePoint Products, you +must be a member of the farm administrators group on the SharePoint +Products administration site. If you did not install the Database Engine +that will host the configuration database or a database administrator +manages the instance of SQL Server that you are using, you must be a +member of sysadmin Server role in SQL Server. + + +### Back up your data + +If you haven't installed TFS on the new hardware yet, you'll want to +do that now to access the TFS custom backup and restore tools. You're +going to back up all of your TFS data, including the encryption key for +the report server. + +> [!TIP] +> All your data needs to be backed up to the same point in time in order +> for the restore and upgrade to work correctly. The only reason to not +> back up a database would be, for example, if you have reporting in the +> old TFS instance, but you're not going to use reporting in the new TFS +> instance. + +To run the Team Foundation Server installer: + + 1. Insert the Team Foundation Server DVD in the drive and launch the + tfs\_server.exe file to begin the installation. + + 2. On the license terms dialog box, accept the license terms and then + choose **Install Now**. + + If you want to install Team Foundation Server to a specific location + in the file system, choose the browse button (...) next to the + default install location. + +To back up the encryption key for reporting services: + + 1. Launch **Reporting Services Configuration + Manager**. + + The Reporting Services Configuration Connection dialog box opens. + + 2. Specify the name of the report server you used with the previous + version of TFS and then choose **Connect**. + + 3. In the navigation bar on the left side, choose + **Encryption Keys**, and then choose + **Backup**. + + The Encryption Key Information dialog box opens. + + 4. In **File Location**, specify the location + where you want to store a copy of this key. + + Consider storing this key on the new hardware, so that it's easily + accessible when you restore the Reporting Services databases. + + 5. In **Password**, specify a password for + the file. + + Don't forget the password! You'll need it later on to restore + the Reporting Services databases. + + 6. In **Confirm Password**, specify the password + for the file again. + + 7. Choose **OK**. + +To back up your databases: + + 1. Launch TFSBackup.exe. + + The TFSBackup.exe tool is in the Tools folder where you installed + Team Foundation Server. The default location is C:\\Program + Files\\TFS 12.0\\Tools. + + 2. In **Source SQL Server Instance**, enter the + name of the SQL Server instance that hosts the TFS databases you + want to back up and choose **Connect**. + + 3. In Select databases to backup, choose the databases to back up. + + For more hlep: [List of TFS 2010 databases on MSDN](https://msdn.microsoft.com/library/ms400720(v=vs.100).aspx) and + [List of TFS 2012 databases on MSDN](https://msdn.microsoft.com/library/ms400720(v=vs.110).aspx). + + 4. In **Backup Databases to**, enter the name of + a network share that is configured with read/write access for + Everyone, or accept the default location in the file system of the + SQL Server you connected to in step 2. + + > **Note:** + > If you want to overwrite backups stored in this network location, you + > can choose **Overwrite existing database backups at + > this location**. + + 5. Choose **Backup Now**. + + The Backup tool reports progress on each database being backed up. + + 6. Choose **Close**. + + +### Restore your data + +To restore your TFS data: + + 1. Launch TFSRestore.exe. + + The TFSRestore.exe tool is in the Tools folder where you installed + Team Foundation Server. The default location is C:\\Program + Files\\TFS 12.0\\Tools. + + 2. In **Target SQL Server Instance**, enter the + SQL Server instance you will use as the data tier and choose + **Connect**. + + 3. Choose **Add Share** and enter the UNC path + to the network share that is configured with read/write access to + Everyone where you stored the backups of your TFS data. For + example, \\\\servername\\sharename\\. + + If the backup files are located on the file system of the server + that is running TFSRestore.exe, you can use the drop down box to + select a local drive. + + > **Note:** + > The service account for the instance of SQL Server you identified at the + > start of this procedure must have read access to this share. + + 4. In the left hand navigation pane, choose the network share or local + disk you identified in the previous step. + + The TFS Restore Tool displays the database backups stored on the + file share. + + 5. Select the check boxes for the databases you want to restore to the + SQL Server you identified at the start of this procedure. + + > [!IMPORTANT] + > For SharePoint, you must only restore the WSS\_Content database. Do not + > restore the WSS\_AdminContent or WSS\_Config databases. You want the new + > SharePoint Foundation versions of these databases, not the ones from the + > previous version of SharePoint or from a SharePoint installation running + > on any other server. + + 6. Choose **Overwrite the existing database(s)** + and then choose **Restore**. + + The Database Restore Tool restores your data and displays + progress reports. + + 7. Choose **Close**. + + +### Fix up the report server + +To restart the Reporting Services database and restore its encryption key: + + 1. Launch the Report Server Configuration tool and restore the original + reporting database and its encryption key to your new instance of + SQL Server Reporting Services. + + 2. In **Reporting Services Configuration + Connection**, specify the name of the server where you + installed Reporting Services for TFS 2013 and choose + **Connect**. + + 3. On the **Database** page, choose + **Change Database**. + + The Report Server Database Configuration Wizard appears. + + 4. Choose **Choose an existing report server + database** and then choose **Next**. + + 5. In **Server Name**, type the name of the SQL + server you used in the TFS Database Restore Tool to restore your + report server databases and choose **Next**. + + 6. Choose the report server database you restored with the TFS Database + Restore Tool and then choose **Next**. + + If you haven't changed the name, the default database name + is ReportServer. + + 7. On the **Credentials** page, choose + **Next**. + + 8. On the **Summary** page, review the + information and then choose **Next**. + + The wizard configures the database and displays progress reports. + + 9. On **Encryption Keys** page, choose + **Restore**. + + The **Restore Encryption Key** window opens. + + 10. In **File Location**, specify the location of + the backup file for the encryption key. In + **Password**, specify the password you used when + you backed up the encryption key, and then choose + **OK**. + + The status of the restoration appears in Results. + + 11. On the **Scale-out Deployment** page, choose + the previous report server from the scale-out deployment status page + and choose **Remove Server**. + + 12. On the **Report Manager URL** page, use the + hyperlink in **URL** to launch the Report + Manager site. + + The report manager site appears. Your report server has + been restored. + + 13. Choose **Exit** to close + **Reporting Services Configuration Manager**. + + +### Fix up SharePoint server + +To run the STSADM command line tool for SharePoint: + + 1. Open a Command Prompt as an administrator on the new hardware that + is running SharePoint Foundation. + + 2. Change directories to this location: + + ```Drive:\\Program Files\\Common Files\\Microsoft Shared\\Web Server Extensions\\15\\bin\\``` + + Where *Drive* is the drive letter. + + 3. In the command prompt, type the following command: + + ```stsadm.exe -o addcontentdb -url http://WSSServerName /sites -databasename contentdatabase -databaseserver SQLServerName``` + + Where: + + - *WSSServerName* is the name of the + SharePoint server; + + - *contentdatabase* is the name of + the content database; + + - *SQLServerName* is the name of the + SQL Server that hosts the content database. + + 4. In the command prompt, type the following command: + + ```stsadm.exe -o addpermissionpolicy -url http://WSSServerName -userlogin Domain\\UserName -permissionlevel "full control"``` + + Where: + + 1. *WSSServerName* is the name of the + SharePoint server; + + 2. *Domain\\UserName* is the user name + and domain of the account used to run the TFS SharePoint + configuration wizard and install SharePoint. + + + +## Next Step: Run the TFS Upgrade Wizard + +Run the Team Foundation Server install from the product DVD and then use +the Upgrade Configuration wizard to upgrade your installation. + +For more information, see: [Run the TFS Upgrade Wizard](../run-upgrade-wizard.md) + +![Select upgrade](../_img/run-upgrade-wiz.png) diff --git a/docs/tfs-server/upgrade/upgrade-2013/new-app-tier-hardware.md b/docs/tfs-server/upgrade/upgrade-2013/new-app-tier-hardware.md new file mode 100644 index 00000000000..e272c320800 --- /dev/null +++ b/docs/tfs-server/upgrade/upgrade-2013/new-app-tier-hardware.md @@ -0,0 +1,71 @@ +--- +title: TFS Application Tier will use different hardware than it’s using right now +description: TFS Application Tier will use different hardware than it’s using right now +ms.assetid: 88819042-702b-4a19-9c97-b16009ddad87 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# TFS Application Tier will use different hardware than it’s using right now + +**TFS 2013** + +Illustration of migration upgrade + +![](../../install/_img/ic612479.png) + +## To do a hardware swap (migration) upgrade of Team Foundation Server + +![](../../install/_img/ic756627.png) **Double Check**. Verify that the operating system and hardware meet the requirements for Team Foundation Server. You must use a 64-bit server if you use a server operating system. + +Determine the service account you will use for Team Foundation Server. By default, TFS uses Network Service, but you can also use a domain account. In most cases, you should use the same account you used for the previous installation or consider using Network Service. + +For more information, see [requirements for Team Foundation Server](../../../accounts/requirements.md), or [Accounts required for installation of Team Foundation Server](setup-sql-server.md). + +![](../../install/_img/ic646325.png) **Set up SQL Server**. You’re going to install all the SQL Server features that TFS requires on the same server where you’ll eventually run TFS. + +For more information, see [Set up SQL Server for TFS](setup-sql-server.md) + +![](../../install/_img/ic665430.png) + +![](../../install/_img/ic646326.png) **Set up SharePoint Products**. If you don’t skip the portal setup, you have two options for how to deal with SharePoint: + +**Option one**: [Use the same SharePoint site for TFS that you have right now](use-same-sharepoint-site.md) + +If your old SharePoint server is still running, you can continue to use it. Go to the SharePoint server and uninstall the old extensions, and then install the new extensions <span class="parameter">before</span> you upgrade TFS. If SharePoint and the previous version of TFS were on the same computer, you have to uninstall the entire TFS 2010 application tier. In the new upgraded configuration, the only TFS component on the SharePoint server will be the TFS extensions for SharePoint. + +For more information, see [Use the same SharePoint site for TFS that you have right now](use-same-sharepoint-site.md) + +![](../../install/_img/ic612480.png) + +**Option two**: [Move SharePoint to New Hardware for TFS](../../install/sharepoint/move-sharepoint-new-hardware.md) + +You can install SharePoint Foundation using the TFS extensions for SharePoint wizard. The TFS wizard will install a fresh copy of SharePoint using the installation of SQL Server you just set up, and then configure the TFS extensions for the new installation of TFS. After you install SharePoint, you’ll detach its content database to prepare for the migration of the data from your previous SharePoint installation in step 4, Restore Data. + +For more information, see [Move SharePoint to new hardware for TFS](../../install/sharepoint/move-sharepoint-new-hardware.md) + +![](../../install/_img/ic666062.png) + +![](../../install/_img/ic646327.png) **Restore data**. You can use the TFS custom backup and restore tools to manage your data. First you’re going to back up your data, including the encryption key on the report server. Next, you’re going to restore your data to the SQL Server instance you set up in step 2. With the restore complete, you’ll use the SQL Server Reporting tool to restart the report server database, restore its encryption key, and then verify access. If you installed SharePoint, you’ll use a SharePoint command line tool to attach and upgrade your content database. + +For more information, see [Back up and restore data for TFS](backup-and-restore-data.md) + +![](../../install/_img/ic612476.png) + +![](../../install/_img/ic646328.png) **Upgrade TFS**. Run the Team Foundation Server install from the product DVD and then use the Upgrade Configuration wizard to upgrade your installation. + +For more information, see [Run the TFS Upgrade Wizard](../run-upgrade-wizard.md) + +![](../../install/_img/ic612456.png) + +> [!TIP] +> If you have Project Server added to TFS, this is the point where you should upgrade the TFS Extensions for Project Server. See the heading "Less-common upgrade tasks" for more information in [TFS upgrade requirements](../../../accounts/requirements.md) + +## Next Step: Set up a new build machine + +After you upgrade the application tier, you might want to install the new build service. For more information, see [Set up Team Foundation Build Service](https://msdn.microsoft.com/en-us/library/ee259687(v=vs.120).aspx). + +![](../../install/_img/ic612464.png) \ No newline at end of file diff --git a/docs/tfs-server/upgrade/upgrade-2013/same-app-tier-hardware.md b/docs/tfs-server/upgrade/upgrade-2013/same-app-tier-hardware.md new file mode 100644 index 00000000000..b8cdd5ed26d --- /dev/null +++ b/docs/tfs-server/upgrade/upgrade-2013/same-app-tier-hardware.md @@ -0,0 +1,50 @@ +--- +title: TFS application tier will use the same hardware +description: TFS application tier will use the same hardware +ms.assetid: 2d394c69-c25e-44be-8bf2-3b9e17559f6e +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# TFS application tier will use the same hardware + +**TFS 2013** + +Illustration of an In-place Upgrade + +![](../_img/ic666060.png) + +## To do an in-place upgrade of Team Foundation Server + +![](../../install/_img/ic756627.png) **Double check**. Verify that the operating system and hardware meet the requirements for the new version of Team Foundation Server. + +Determine the service account you will use for Team Foundation Server. By default, TFS uses Network Service, but you can also use a domain account. In most cases, you should use the same account you used for the previous installation or consider using Network Service. + +For more information, see: [System requirements for Team Foundation Server](../../../accounts/requirements.md), or [Accounts required for installation of Team Foundation Server](../../../accounts/requirements.md#accounts). + +![](../../install/_img/ic646325.png) **Uninstall TFS 2010**. Use Control Panel to completely uninstall Team Foundation Server 2010. If you’re upgrading TFS 2012, you don’t have to uninstall the old version of TFS. You can skip this step and we’ll preserve some of your application tier settings. + +> [!TIP] +> If SharePoint is running on a computer other than Team Foundation Server, you have to [uninstall the TFS extensions for SharePoint from the SharePoint server](use-same-sharepoint-site.md), too. If SharePoint Products is on the TFS application-tier, don’t worry. We uninstall the TFS extensions for SharePoint at the same time as we remove the old version of TFS. + +![](../_img/ic552209.png) + +![](../../install/_img/ic646326.png) **Upgrade TFS**. Run the Team Foundation Server install from the product DVD and then use the Upgrade Configuration wizard to upgrade your installation. <span class="parameter">But wait</span>—if SharePoint Products is running on a computer other than Team Foundation Server, [you’ll first want to install the new TFS Extensions for SharePoint on the SharePoint server](use-same-sharepoint-site.md). Similar to the previous step, if SharePoint Products is on the TFS application-tier, we’ll install the Extensions for SharePoint at the same time that we set up the new version of TFS. + +For more information, see: [Run the TFS Upgrade Wizard](../run-upgrade-wizard.md). + +![](../../install/_img/ic612456.png) + +> [!TIP] +> If you have Project Server added to TFS, this is when you should upgrade the TFS Extensions for Project Server. See the heading “Less-common upgrade tasks” for more information in [TFS upgrade requirements](upgrade-2013-requirements.md). + +## Next Step: Set up a new build machine + +After you upgrade the application tier, you might want to install the new build service. + +For more information, see [Set up Team Foundation Build Service](https://msdn.microsoft.com/en-us/library/ee259687(v=vs.120).aspx). + +![](../../install/_img/ic612464.png) \ No newline at end of file diff --git a/docs/tfs-server/upgrade/upgrade-2013/setup-sql-server.md b/docs/tfs-server/upgrade/upgrade-2013/setup-sql-server.md new file mode 100644 index 00000000000..a69d69602ef --- /dev/null +++ b/docs/tfs-server/upgrade/upgrade-2013/setup-sql-server.md @@ -0,0 +1,119 @@ +--- +title: Set up SQL Server for TFS +description: Set up SQL Server for TFS +ms.assetid: 28a1ad64-07b6-44d2-aa24-acbb0d2d8004 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Set up SQL Server for TFS + +**TFS 2013** + +![Set up SQL Server for TFS](../_img/setup-sql-server.png) + +Install SQL Server 2012 SP1 for Team Foundation Server with reporting. + +If you're using SQL Server 2012 with SP1, we recommend you also apply [cumulative update 2 on top of SP1](http://support.microsoft.com/kb/2790947) to address a critical SQL Server bug around resource consumption. This isn't a requirement because the bug only affects a small number of instances, but we wanted you to be aware of it. + +**Upgrade tips for SQL Server** +- Make sure the default collation settings in SQL Server match the existing settings from the SQL Server instance that you're migrating from. For more information, see: [SQL Server Collation Requirements for Team Foundation Server](../../install/sql-server/collation-requirements.md) +- Make sure your data compression settings in the new SQL Server instance are the same as they were in the previous instance, especially if you're changing from Enterprise edition to a different SQL Server edition. + +**Required Permissions** +You must be a member of the **Administrators** security group on Windows Server. + +1. Insert the installation DVD for a supported version of SQL Server and launch setup.exe. + +2. On the **SQL Server Installation Center** page, choose **Installation**, and then choose **New installation or add features to an existing installation**. + + ![New installation of SQL Server](../../install/sql-server/_img/ic665094.png) + +3. On the **Setup Support Rules** page, choose **OK**. + +4. On the **Product Key** page, type your product key or specify a free edition. + +5. On the **License Terms** page, accept the license agreement. + +6. On the **Setup** **Support Rules** page, choose **Next**. + + ![Windows Firewall warning](../../install/sql-server/_img/ic688130.png) + + > [!TIP] + > A Windows Firewall warning might appear, but you can safely ignore this warning. TFS automatically adds an exception for Windows Firewall during upgrade in this topology. + +7. On the **Setup Role** page, choose **SQL Server Feature Installation**. + + ![Setup role](../../install/sql-server/_img/ic665096.png) + +8. On the **Feature Selection** page, select the following check boxes: + + - Database Engine Services (required) + - Full-Text and Semantic Extractions for Search (required) + - Analysis Services (required for reporting) + - Reporting Services � Native (required for reporting) + - Management Tools - Basic (not pictured) + + ![Feature Selection](../../install/sql-server/_img/ic665097.png) + +9. On the **Installation Rules** page, choose **Next**. + +10. On the **Instance Configuration** page, choose **Default instance**. If you choose **Named instance**, type the name of the instance.. + + ![Instance configuration](../../install/sql-server/_img/ic665098.png) + +11. On the **Disk Space Requirements **page, choose **Next**. + +12. On the **Server Configuration** page, accept the defaults. + + ![Server Configuration](../../install/sql-server/_img/ic665099.png) + +13. In the Startup Type column, verify that **Automatic** appears for all services that you can edit, and then choose **Next**. + + ![Server Configuration (details)](../../install/sql-server/_img/ic665100.png) + + > [!NOTE] + > Are you using a non-English version of SQL Server? The default collation settings for U.S. English meet the requirements for Team Foundation Server. If you're not using English, you can set collation settings for the Database Engine on this page. For more information, see [SQL Server Collation Requirements for Team Foundation Server](../../install/sql-server/collation-requirements.md). + +14. On the **Database Engine Configuration** page, choose **Windows authentication mode**, choose **Add Current User**. + + ![Database Engine Configuration](../../install/sql-server/_img/ic665101.png) + +15. On the **Analysis Services Configuration** page, choose **Add Current User**. + + ![Analysis Services Configuration](../../install/sql-server/_img/ic665102.png) + +16. On the **Reporting Services Configuration** page, choose **Install and configure**. + + ![Reporting Services Configuration](../../install/sql-server/_img/ic665103.png) + +17. (Optional) On the **Error and Usage Reporting** page, specify whether to send information about errors. + +18. On the **Installation Rules** page, choose **Next**. + +19. On the **Ready to Install** page, review the list of components to be installed, and then choose **Install**. + + ![Complete](../../install/sql-server/_img/ic662712.png) + +## Next Step: Set up SharePoint + +If you don't skip the portal setup, you have two options for how to deal with SharePoint (if you don't want to deal with SharePoint, you can move on to step 4, [Back up and restore data for TFS](backup-and-restore-data.md)): + +**Use the same SharePoint site for TFS that you have right now** + +If your old SharePoint server is still up and running, you can continue to use it. Go to the SharePoint server and uninstall old extensions, and then install the new extensions before you upgrade TFS. If SharePoint and the previous version of TFS were on the same computer, you have to uninstall the entire TFS 2010 application tier. In the new upgraded configuration, the only TFS component on the SharePoint server will be the TFS extensions for SharePoint. + +For more information, see: [Use the same SharePoint site for TFS that you have right now](use-same-sharepoint-site.md) + +![install new TFS extensions](../_img/ic612457.png) + +**Move SharePoint to New Hardware for TFS** + +You can install SharePoint Foundation using the TFS extensions for SharePoint wizard. The TFS wizard will install a fresh copy of SharePoint using the installation of SQL Server you just set up, and then configure the TFS extensions for the new installation of TFS. After you install SharePoint, you�ll detach its content database to prepare for the migration of the data from your previous SharePoint installation in step 4, Back up and Restore Data. + +For more information: [Move SharePoint to new hardware for TFS](../../install/sharepoint/move-sharepoint-new-hardware.md) + +![install new SharePoint 2010](../_img/ic666063.png) diff --git a/docs/tfs-server/upgrade/upgrade-2013/upgrade-2013-requirements.md b/docs/tfs-server/upgrade/upgrade-2013/upgrade-2013-requirements.md new file mode 100644 index 00000000000..0f9ccbb9680 --- /dev/null +++ b/docs/tfs-server/upgrade/upgrade-2013/upgrade-2013-requirements.md @@ -0,0 +1,86 @@ +--- +title: TFS upgrade requirements +description: TFS upgrade requirements +ms.assetid: b91d72fb-26ac-463e-ae8e-364922cd477f +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# TFS upgrade requirements + +**TFS 2013** + +Review the requirements listed here and then choose a server upgrade path. You can upgrade from any of the following earlier releases: + +- Team Foundation Server 2013 RTM ¹ + +- Team Foundation Server 2012 with Update 4 (TFS 2012.4), TFS 2012.3, TFS 2012.2, TFS 2012.1, or TFS 2012 releases + +- Team Foundation Server 2010 with or without Service Pack 1 + +¹ Unlike Visual Studio 2013, there was no Update 1 for TFS 2013. The first update for TFS 2013 is Update 2. + +> [!TIP] +> Do you need to upgrade from TFS 2008? You must upgrade to TFS 2012 first: [There is an ISO of TFS 2012 available](http://go.microsoft.com/fwlink?linkid=255990) for you to prepare your TFS 2008 installation for an upgrade to TFS 2013. + +## New prerequisite requirements + +**SQL Server**: Before you start your upgrade, you might have to upgrade SQL Server to meet new Team Foundation Server requirements. SQL Server 2008 R2 is no longer supported. SQL Server 2012 with SP1 is supported. For more information, see [SQL Server requirements for Team Foundation Server](../../../accounts/requirements.md#sql-server). + +> [!TIP] +> If you’re using SQL Server 2012 with SP1, we recommend you also apply [cumulative update 2 on top of SP1](http://support.microsoft.com/kb/2790947) to address a critical SQL Server bug around resource consumption. This isn’t a hard requirement because the bug only affects a small number of instances, but we wanted you to be aware of it. If you don’t apply CU2, you should apply a SQL Server hotfix ([KB2793634](http://support.microsoft.com/kb/2793634)) to addresses another (different) issue where SQL Server 2012 with SP1 might request an excessive amount of restarts. + +**SharePoint Products**: If you have a portal server, you might have to upgrade it to continue using SharePoint integration. We no longer support Windows SharePoint Services 3.0 or Microsoft Office SharePoint Server 2007. See [SharePoint Products requirements for Team Foundation Server](../../../accounts/requirements.md#sharepoint). + +> [!TIP] +> Do you need to upgrade SharePoint to a supported version? See [Upgrade from Office SharePoint Server 2007 or Windows SharePoint Services 3.0 to SharePoint Server 2013 or SharePoint Foundation 2013](https://technet.microsoft.com/library/ee947141.aspx) + +### What about skipping reporting or SharePoint during upgrade? + +If you don’t install reporting or SharePoint, your deployment is simpler, but we don’t recommend it. Keep these two features during upgrade because the upgrade configuration will automatically link upgraded projects to the portal and reporting features. If you add a portal or reporting after you upgrade, you cannot easily create these links between all your upgraded projects and the portal. + +> [!TIP] +> Team Foundation Server doesn’t support changing languages during an upgrade. You should maintain the locale of your operating system and Team Foundation Server during the upgrade. For more information, see: [Language requirements for Team Foundation Server](../../../accounts/requirements.md#languages) + +## Next step: choose a server upgrade path + +The steps are different based on whether you’re using a basic installation, or if you’re planning to use the same hardware (standard upgrade) or moving to a new machine (advanced upgrade). Select from one of the paths below: + +- [Upgrade TFS Basic or Express](../express.md) (basic upgrade) + +- [TFS application tier will use the same hardware it’s using right now](same-app-tier-hardware.md) (standard upgrade) + +- [TFS Application Tier will use different hardware than it’s using right now](new-app-tier-hardware.md) (advanced upgrade) + +![TFS server upgrade choices](../../install/_img/ic612461.png) + +## Less common upgrade tasks + +You can probably skip this section, if you are not using the trial edition of Team Foundation Server, a Team Foundation Server farm, or no one on your team uses Project Server. + +### Upgrade from the trial edition of Team Foundation Server + +If you are using the trial edition of Team Foundation Server and your evaluation period expires or you are ready to upgrade to the full edition, you need to change the product key information to upgrade from the trial to the full edition. For more information, see this topic: [Locate or Change the Product Key for Team Foundation Server](../change-product-key.md). + +### Upgrade from trial edition of Release Management for Visual Studio 2013 + +Release Management for Visual Studio 2013 has three components (server, client and deployment agent) and you should use the same version of all components throughout your deployment. If you have the trial version of Release Management Server for Team Foundation Server 2013 installed and you upgrade to the full version, you should upgrade all three components before you start to manage any releases. You have to uninstall the trial version of Release Management to install the full version. + +For more information, see this topic: [Install Release Management for Visual Studio 2013](https://msdn.microsoft.com/en-us/library/dn593700%28v=vs.120%29.aspx) + +### Upgrading a Team Foundation Server application-tier farm + +If you have a scaled-out deployment of TFS application tiers that you want to upgrade, you should do one of the following processes, based on the version of the product you’re upgrading from. + +- **Your TFS farm is TFS 2010**: Uninstall Team Foundation Server 2010 from each application tier. After all previous versions have been uninstalled, install TFS 2012 on one of the application tiers and run the upgrade as you would for a standalone deployment. Select any application tier in the farm that you like; it doesn’t matter. After the upgrade completes, use the Add an Application Tier wizard to install Team Foundation Server 2012 on the remaining application tiers. This reassembles the farm and completes the farm upgrade. + +- **Your TFS farm is TFS 2012 or TFS 2013**: [Quiesce](../../command-line/tfsservicecontrol-cmd.md) every application tier in the farm. After all previous versions have been quiesced, install TFS 2013 on one of the application tiers (without uninstalling the previous version of TFS) and run the upgrade as you would for a standalone deployment. Select any application tier in the farm that you like; it doesn’t matter. After the upgrade completes, use the Add an Application Tier wizard to install Team Foundation Server 2013 (without uninstalling the previous version of TFS) on the remaining application tiers. This reassembles the farm and completes the farm upgrade. + +For more information, see this topic: [How to: Create a Team Foundation server farm (high availability)](../../install/create-tfs-farm.md) + +### Upgrading the TFS Extensions for Project Server + +If you have integrated Project Server with your TFS deployment and you upgrade TFS, your team projects should continue to work as before, but you won’t have access to any new features until you install the new TFS Extensions for Project Server. You should uninstall the old extensions from Project Server and then install the latest version of the extensions on all the servers where it was previously installed. The version of the extensions you use for Project Server should always match the version of Team Foundation Server you’re running. For more information, see this topic: [How to: Add Project Server to Team Foundation Server](https://msdn.microsoft.com/en-us/library/hh548139(v=vs.120).aspx ) diff --git a/docs/tfs-server/upgrade/upgrade-2013/use-same-sharepoint-site.md b/docs/tfs-server/upgrade/upgrade-2013/use-same-sharepoint-site.md new file mode 100644 index 00000000000..84ba79ae119 --- /dev/null +++ b/docs/tfs-server/upgrade/upgrade-2013/use-same-sharepoint-site.md @@ -0,0 +1,111 @@ +--- +title: Use the same SharePoint site for TFS that you have right now +description: Use the same SharePoint site for TFS that you have right now +ms.assetid: 562798b8-7010-4855-96e0-9d60b926a052 +ms.manager: douge +ms.author: elbatk +ms.date: 09/01/2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +--- + +# Use the same SharePoint site for TFS that you have right now + +**TFS 2013** + +![Uninstall previous version](../_img/ic612457.png) + +If your current SharePoint site meets the new requirements for TFS 2013, you can continue to use it, if you perform a few procedures. First you have to uninstall the old TFS extensions for SharePoint¹, and then install the new version of the extensions. You also want to make sure the service account that you will use on the upgraded Team Foundation Server is a member of the Farm administrators group. If you’re currently using Windows SharePoint Services 3.0 or SharePoint Server 2007, you’ll have to upgrade to supported version of SharePoint. For more information, see [Upgrade from Office SharePoint Server 2007 or Windows SharePoint Services 3.0 to SharePoint Server 2013 or SharePoint Foundation 2013](https://technet.microsoft.com/library/ee947141.aspx) + +> [!TIP] +> If you’re upgrading TFS 2012, you don’t have to uninstall the old version of TFS extensions. + +**Required Permissions** + +To perform these procedures, you must be a member of the **Administrators** security group on Windows Server and a member of the **Farm Administrators** group in Windows SharePoint Services 3.0. + +### Uninstall the old TFS extensions + + ![Uninstall previous version](../_img/ic552209.png) +On the SharePoint site you were using with TFS 2010, uninstall the TFS Extensions for SharePoint. + +If SharePoint and the previous version of TFS were on the same computer, you have to uninstall the entire TFS application tier. In the new upgraded TFS deployment, your SharePoint server will be on a different server than the TFS application tier, and the only TFS component on the SharePoint server will be the TFS extensions for SharePoint. + +> [!TIP] +> If you’re upgrading TFS 2012, you don’t have to uninstall the old version of TFS. You can skip this step and install the new TFS extensions without uninstalling the old. + +### Install the new TFS extensions + +Run the TFS installation program from the product DVD and then use the **Configure Extensions for SharePoint Products** wizard. + +### To run the Team Foundation Server installer + +1. Insert the Team Foundation Server DVD in the drive and launch the tfs\_server.exe file to begin the installation. + +2. On the license terms dialog box, accept the license terms and then choose **Install Now**. + + If you want to install Team Foundation Server to a specific location in the file system, choose the browse button (…) next to the default install location. + +### To configure Team Foundation Server Extensions for SharePoint Products + +1. In the Team Foundation Server Configuration tool, choose **Configure Extensions for SharePoint Products** and then choose **Start Wizard**. + + The Team Foundation Server SharePoint Extensions Configuration wizard appears. + +2. Read the** Welcome** screen, and choose **Next**. + +3. Since SharePoint Products is already installed, skip to the next step. If SharePoint weren’t installed, you’d take these steps: + + 1. Choose the big **Install SharePoint Foundation 2013** button. Once the install completes, choose **Next**. + + 2. Type the name of the SQL Server or named instance that will host the configuration databases for SharePoint and choose **Next**. + + 3. Type a user account and password for the service account for SharePoint and then choose **Next**. + + For more information, see [Accounts required for installation of Team Foundation Server](../../../accounts/requirements.md#accounts) + +4. On the **Review** page, review the settings and choose ** Next**. + + The wizard validates your configuration. + +5. Choose **Configure**. + + The wizard applies configuration settings. This process might take several minutes. + +6. Choose **Next**, **Close**, **Close**. + + The Team Foundation Server Administration Console appears. + +### Add the TFS service account to the Farm Administrator group + +If you're using the same SharePoint site from your previous deployment, you may already have the TFS service account in the Farm Administrators group. If so, you can skip this step. Otherwise, you should follow the steps below to ensure the service account that you will use for TFS is added to the Farm Administrators group on SharePoint. + +How do you know if this step is necessary? Here are two potential scenarios that would require you to perform this step. + +- If you're planning to change the account you're using for the TFS service account during TFS upgrade, you should add the new account to the Farm Administrators group. + +- If you are using Network Service and you're planning to migrate the TFS application tier to new hardware, you should add the name of the new hardware followed by a $ symbol (Domain\\ServerName$) to the Farm Administrators group. + +### To add the service account to the Farm Administrators group + +1. In a web browser, open the SharePoint Central Administration site. + +2. Under **Security Configuration**, choose **Manage the farm administrator's group**. + +3. Choose **New**. + +4. In the Users/Groups box, enter the name of the service account for Team Foundation Server. + + If you're using Network Service, add the server name followed by a $ symbol. For example, domain\\servername$. SharePoint might not find the name but will allow you to enter it into the list. + +5. Choose **Share**. + +## Next Step: Which server upgrade path are you on? + +- If you're doing an in-place upgrade, go to Step 3, [Run the TFS Upgrade Wizard](../run-upgrade-wizard.md). + +- If you're doing a migration upgrade, go to Step 4, [Back up and restore data for TFS](backup-and-restore-data.md). + +![Install TFS on same hardware](../_img/ic612458.png) + +![install TFS on different hardware](../_img/ic612459.png) diff --git a/docs/tfs-server/upgrade/walkthrough.md b/docs/tfs-server/upgrade/walkthrough.md new file mode 100644 index 00000000000..3e383897a8b --- /dev/null +++ b/docs/tfs-server/upgrade/walkthrough.md @@ -0,0 +1,64 @@ +--- +title: Upgrade Walkthrough On-premises +description: Walkthrough of a standard upgrade scenario +ms.prod: vs-devops-alm +ms.technology: vs-devops-admin +ms.assetid: aa4c0088-6a0e-4bdd-801c-a7a4eaa15bf2 +ms.manager: douge +ms.author: elbatk +ms.date: 08/04/2016 +--- + +# Upgrade walkthrough + +**TFS 2017** | **TFS 2015** | **TFS 2013** + +Let's walk through a typical TFS upgrade scenario to get a sense of what the high level steps discussed in +the [overview](../../accounts/account-management.md) might look like in a real world example. + +## Prepare your environment + +Our starting point for this upgrade is a TFS 2012 Update 4 environment with two machines - one serving as the +application tier and a second serving as the data tier for both the config/collection databases, and the +reporting and analysis services databases. Both machines are currently running Windows Server 2008 SP2, and +the data tier is currently running SQL Server 2008 R2. + +Our first step is to check the [system requirements](../../accounts/requirements.md) for TFS 2015. Unfortunately, +neither the OS nor the SQL version we are using are still supported, so we will need to make some changes. We +decide to take the opportunity to acquire two more powerful machines, and we install Windows Server 2012 R2 on +both of them. We install SQL Server 2014 on the data tier, making sure to include Reporting Services and +Analysis Services, since we are using those features in our deployment. Our environment is prepared. + +## Expect the best, prepare for the worst + +We have been using [scheduled backups](../admin/backup/config-backup-sched-plan.md) to ensure that we always +have backups in place in case something goes wrong. + +Because we are moving to new hardware anyways, we will not bother setting up a separate pre-production environment +to do our [dry run](pre-production.md). Instead, we will use that new hardware to do a dry run first, and then +we will wipe everything clean and use it again for the production upgrade. + +For our dry run, the steps for our upgrade will be: + +1. Copy recent database backups to our new SQL instance. +2. Install TFS 2015 on our new application tier. +3. Use scheduled backups to restore the database backups. +4. Run through the upgrade wizard, +being sure to use a service account which does not have any permissions in our production environment. +See *Protecting production* in the [dry run in pre-production](pre-production.md) document for more information. +5. Optionally [configure new features](../../work/customize/upgrade-tfs-2008-or-2010.md) which require changes to our existing team projects. + +## Do the upgrade + +Assuming that all goes smoothly, the production upgrade steps will be quite similar. There the steps will be: + +1. Take the production server offline using [TFSServiceControl's quiesce command](../command-line/tfsservicecontrol-cmd.md). The goal here is to ensure that the backups we use to move to our new hardware are complete and we don't lose any user data. +2. Take new backups of each database. +3. Copy the backups to our new SQL instance. +4. Install TFS 2015 on our new application tier. +5. Use the scheduled backups wizard to restore the database backups. +6. Run through the upgrade wizard, using our desired production service account. +7. Optionally [configure new features](../../work/customize/configure-features-after-upgrade.md) which require changes to our existing team projects. + +And we're done! + diff --git a/docs/tfvc/_img/add-command/IC572374.png b/docs/tfvc/_img/add-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/add-command/IC572374.png differ diff --git a/docs/tfvc/_img/add-command/_imgadd-command/IC572374.png b/docs/tfvc/_img/add-command/_imgadd-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/add-command/_imgadd-command/IC572374.png differ diff --git a/docs/tfvc/_img/add-files-server/IC579084.png b/docs/tfvc/_img/add-files-server/IC579084.png new file mode 100644 index 00000000000..244f34a8ad9 Binary files /dev/null and b/docs/tfvc/_img/add-files-server/IC579084.png differ diff --git a/docs/tfvc/_img/add-files-server/IC579087.png b/docs/tfvc/_img/add-files-server/IC579087.png new file mode 100644 index 00000000000..f4190f4032c Binary files /dev/null and b/docs/tfvc/_img/add-files-server/IC579087.png differ diff --git a/docs/tfvc/_img/add-files-server/IC579088.png b/docs/tfvc/_img/add-files-server/IC579088.png new file mode 100644 index 00000000000..9e1c5c1cc75 Binary files /dev/null and b/docs/tfvc/_img/add-files-server/IC579088.png differ diff --git a/docs/tfvc/_img/add-files-server/IC581098.png b/docs/tfvc/_img/add-files-server/IC581098.png new file mode 100644 index 00000000000..ce18e6a7aa5 Binary files /dev/null and b/docs/tfvc/_img/add-files-server/IC581098.png differ diff --git a/docs/tfvc/_img/add-files-server/IC591735.png b/docs/tfvc/_img/add-files-server/IC591735.png new file mode 100644 index 00000000000..599f4915814 Binary files /dev/null and b/docs/tfvc/_img/add-files-server/IC591735.png differ diff --git a/docs/tfvc/_img/add-files-server/IC612253.png b/docs/tfvc/_img/add-files-server/IC612253.png new file mode 100644 index 00000000000..718295df262 Binary files /dev/null and b/docs/tfvc/_img/add-files-server/IC612253.png differ diff --git a/docs/tfvc/_img/branch-folders-files/IC106108.gif b/docs/tfvc/_img/branch-folders-files/IC106108.gif new file mode 100644 index 00000000000..45467f487aa Binary files /dev/null and b/docs/tfvc/_img/branch-folders-files/IC106108.gif differ diff --git a/docs/tfvc/_img/branch-folders-files/IC272396.png b/docs/tfvc/_img/branch-folders-files/IC272396.png new file mode 100644 index 00000000000..a00a9e3af01 Binary files /dev/null and b/docs/tfvc/_img/branch-folders-files/IC272396.png differ diff --git a/docs/tfvc/_img/branch-folders-files/IC277127.png b/docs/tfvc/_img/branch-folders-files/IC277127.png new file mode 100644 index 00000000000..2831f202502 Binary files /dev/null and b/docs/tfvc/_img/branch-folders-files/IC277127.png differ diff --git a/docs/tfvc/_img/branch-folders-files/IC452318.png b/docs/tfvc/_img/branch-folders-files/IC452318.png new file mode 100644 index 00000000000..6bb41413f78 Binary files /dev/null and b/docs/tfvc/_img/branch-folders-files/IC452318.png differ diff --git a/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC106108.gif b/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC106108.gif new file mode 100644 index 00000000000..45467f487aa Binary files /dev/null and b/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC106108.gif differ diff --git a/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC272396.png b/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC272396.png new file mode 100644 index 00000000000..a00a9e3af01 Binary files /dev/null and b/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC272396.png differ diff --git a/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC277127.png b/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC277127.png new file mode 100644 index 00000000000..2831f202502 Binary files /dev/null and b/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC277127.png differ diff --git a/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC452318.png b/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC452318.png new file mode 100644 index 00000000000..6bb41413f78 Binary files /dev/null and b/docs/tfvc/_img/branch-folders-files/_imgbranch-folders-files/IC452318.png differ diff --git a/docs/tfvc/_img/branch-strategically/IC372280.png b/docs/tfvc/_img/branch-strategically/IC372280.png new file mode 100644 index 00000000000..687822214a0 Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/IC372280.png differ diff --git a/docs/tfvc/_img/branch-strategically/IC372284.png b/docs/tfvc/_img/branch-strategically/IC372284.png new file mode 100644 index 00000000000..577c9c70f80 Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/IC372284.png differ diff --git a/docs/tfvc/_img/branch-strategically/IC378600.png b/docs/tfvc/_img/branch-strategically/IC378600.png new file mode 100644 index 00000000000..e5ee90b4194 Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/IC378600.png differ diff --git a/docs/tfvc/_img/branch-strategically/IC378601.png b/docs/tfvc/_img/branch-strategically/IC378601.png new file mode 100644 index 00000000000..bbee84fb398 Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/IC378601.png differ diff --git a/docs/tfvc/_img/branch-strategically/IC379434.png b/docs/tfvc/_img/branch-strategically/IC379434.png new file mode 100644 index 00000000000..5040f49b61f Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/IC379434.png differ diff --git a/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC372280.png b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC372280.png new file mode 100644 index 00000000000..687822214a0 Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC372280.png differ diff --git a/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC372284.png b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC372284.png new file mode 100644 index 00000000000..577c9c70f80 Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC372284.png differ diff --git a/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC378600.png b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC378600.png new file mode 100644 index 00000000000..e5ee90b4194 Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC378600.png differ diff --git a/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC378601.png b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC378601.png new file mode 100644 index 00000000000..bbee84fb398 Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC378601.png differ diff --git a/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC379434.png b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC379434.png new file mode 100644 index 00000000000..5040f49b61f Binary files /dev/null and b/docs/tfvc/_img/branch-strategically/_imgbranch-strategically/IC379434.png differ diff --git a/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-developer-isolation.gif b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-developer-isolation.gif new file mode 100644 index 00000000000..08a3a075a88 Binary files /dev/null and b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-developer-isolation.gif differ diff --git a/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-feature-isolation.gif b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-feature-isolation.gif new file mode 100644 index 00000000000..78d4b3a9475 Binary files /dev/null and b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-feature-isolation.gif differ diff --git a/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-main-only.gif b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-main-only.gif new file mode 100644 index 00000000000..0783dc47d13 Binary files /dev/null and b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-main-only.gif differ diff --git a/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-release-isolation.gif b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-release-isolation.gif new file mode 100644 index 00000000000..9ba837f6907 Binary files /dev/null and b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-release-isolation.gif differ diff --git a/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-service-hotfix-release-isolation.gif b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-service-hotfix-release-isolation.gif new file mode 100644 index 00000000000..7838392bd4d Binary files /dev/null and b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-service-hotfix-release-isolation.gif differ diff --git a/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-service-release-isolation.gif b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-service-release-isolation.gif new file mode 100644 index 00000000000..b09373ab309 Binary files /dev/null and b/docs/tfvc/_img/branching-strategies-with-tfvc/branching-scenarios-service-release-isolation.gif differ diff --git a/docs/tfvc/_img/check-folder-controlled-by-gated-check-build-process/IC547418.png b/docs/tfvc/_img/check-folder-controlled-by-gated-check-build-process/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/check-folder-controlled-by-gated-check-build-process/IC547418.png differ diff --git a/docs/tfvc/_img/check-folder-controlled-by-gated-check-build-process/IC572351.png b/docs/tfvc/_img/check-folder-controlled-by-gated-check-build-process/IC572351.png new file mode 100644 index 00000000000..b897f5b98a9 Binary files /dev/null and b/docs/tfvc/_img/check-folder-controlled-by-gated-check-build-process/IC572351.png differ diff --git a/docs/tfvc/_img/check-folder-controlled-by-gated-check-build-process/IC588244.png b/docs/tfvc/_img/check-folder-controlled-by-gated-check-build-process/IC588244.png new file mode 100644 index 00000000000..a4beab5ace0 Binary files /dev/null and b/docs/tfvc/_img/check-folder-controlled-by-gated-check-build-process/IC588244.png differ diff --git a/docs/tfvc/_img/check-out-edit-files/IC51402.gif b/docs/tfvc/_img/check-out-edit-files/IC51402.gif new file mode 100644 index 00000000000..f83b76318f5 Binary files /dev/null and b/docs/tfvc/_img/check-out-edit-files/IC51402.gif differ diff --git a/docs/tfvc/_img/check-out-edit-files/IC572374.png b/docs/tfvc/_img/check-out-edit-files/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/check-out-edit-files/IC572374.png differ diff --git a/docs/tfvc/_img/check-out-edit-files/_imgcheck-out-edit-files/IC51402.gif b/docs/tfvc/_img/check-out-edit-files/_imgcheck-out-edit-files/IC51402.gif new file mode 100644 index 00000000000..f83b76318f5 Binary files /dev/null and b/docs/tfvc/_img/check-out-edit-files/_imgcheck-out-edit-files/IC51402.gif differ diff --git a/docs/tfvc/_img/check-out-edit-files/_imgcheck-out-edit-files/IC572374.png b/docs/tfvc/_img/check-out-edit-files/_imgcheck-out-edit-files/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/check-out-edit-files/_imgcheck-out-edit-files/IC572374.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/IC51402.gif b/docs/tfvc/_img/check-your-work-team-codebase/IC51402.gif new file mode 100644 index 00000000000..f83b76318f5 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/IC51402.gif differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/IC547418.png b/docs/tfvc/_img/check-your-work-team-codebase/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/IC547418.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/IC572351.png b/docs/tfvc/_img/check-your-work-team-codebase/IC572351.png new file mode 100644 index 00000000000..b897f5b98a9 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/IC572351.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/IC572374.png b/docs/tfvc/_img/check-your-work-team-codebase/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/IC572374.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/IC593474.png b/docs/tfvc/_img/check-your-work-team-codebase/IC593474.png new file mode 100644 index 00000000000..fa65ff67ba0 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/IC593474.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/IC667296.png b/docs/tfvc/_img/check-your-work-team-codebase/IC667296.png new file mode 100644 index 00000000000..dfa49d1afc5 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/IC667296.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/IC720120.png b/docs/tfvc/_img/check-your-work-team-codebase/IC720120.png new file mode 100644 index 00000000000..90bb99145c2 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/IC720120.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC51402.gif b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC51402.gif new file mode 100644 index 00000000000..f83b76318f5 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC51402.gif differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC547418.png b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC547418.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC572351.png b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC572351.png new file mode 100644 index 00000000000..b897f5b98a9 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC572351.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC572374.png b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC572374.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC593474.png b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC593474.png new file mode 100644 index 00000000000..fa65ff67ba0 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC593474.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC667296.png b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC667296.png new file mode 100644 index 00000000000..dfa49d1afc5 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC667296.png differ diff --git a/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC720120.png b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC720120.png new file mode 100644 index 00000000000..90bb99145c2 Binary files /dev/null and b/docs/tfvc/_img/check-your-work-team-codebase/_imgcheck-your-work-team-codebase/IC720120.png differ diff --git a/docs/tfvc/_img/checkin-command/IC572374.png b/docs/tfvc/_img/checkin-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/checkin-command/IC572374.png differ diff --git a/docs/tfvc/_img/checkin-command/_imgcheckin-command/IC572374.png b/docs/tfvc/_img/checkin-command/_imgcheckin-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/checkin-command/_imgcheckin-command/IC572374.png differ diff --git a/docs/tfvc/_img/checkout-or-edit-command/IC572374.png b/docs/tfvc/_img/checkout-or-edit-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/checkout-or-edit-command/IC572374.png differ diff --git a/docs/tfvc/_img/compare-files/IC547418.png b/docs/tfvc/_img/compare-files/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC547418.png differ diff --git a/docs/tfvc/_img/compare-files/IC556152.png b/docs/tfvc/_img/compare-files/IC556152.png new file mode 100644 index 00000000000..0385fdc8740 Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC556152.png differ diff --git a/docs/tfvc/_img/compare-files/IC558315.gif b/docs/tfvc/_img/compare-files/IC558315.gif new file mode 100644 index 00000000000..458f5b74a4a Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC558315.gif differ diff --git a/docs/tfvc/_img/compare-files/IC558316.gif b/docs/tfvc/_img/compare-files/IC558316.gif new file mode 100644 index 00000000000..92a474273c4 Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC558316.gif differ diff --git a/docs/tfvc/_img/compare-files/IC558594.png b/docs/tfvc/_img/compare-files/IC558594.png new file mode 100644 index 00000000000..6d7cc6ffea1 Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC558594.png differ diff --git a/docs/tfvc/_img/compare-files/IC588355.png b/docs/tfvc/_img/compare-files/IC588355.png new file mode 100644 index 00000000000..7978fdb550e Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC588355.png differ diff --git a/docs/tfvc/_img/compare-files/IC646325.png b/docs/tfvc/_img/compare-files/IC646325.png new file mode 100644 index 00000000000..4dd3ac4b9d6 Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC646325.png differ diff --git a/docs/tfvc/_img/compare-files/IC646326.png b/docs/tfvc/_img/compare-files/IC646326.png new file mode 100644 index 00000000000..18a2082dd73 Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC646326.png differ diff --git a/docs/tfvc/_img/compare-files/IC646327.png b/docs/tfvc/_img/compare-files/IC646327.png new file mode 100644 index 00000000000..97f4bd09f23 Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC646327.png differ diff --git a/docs/tfvc/_img/compare-files/IC646328.png b/docs/tfvc/_img/compare-files/IC646328.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC646328.png differ diff --git a/docs/tfvc/_img/compare-files/IC756627.png b/docs/tfvc/_img/compare-files/IC756627.png new file mode 100644 index 00000000000..6bc00571363 Binary files /dev/null and b/docs/tfvc/_img/compare-files/IC756627.png differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC547418.png b/docs/tfvc/_img/compare-files/_imgcompare-files/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC547418.png differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC556152.png b/docs/tfvc/_img/compare-files/_imgcompare-files/IC556152.png new file mode 100644 index 00000000000..0385fdc8740 Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC556152.png differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC558315.gif b/docs/tfvc/_img/compare-files/_imgcompare-files/IC558315.gif new file mode 100644 index 00000000000..458f5b74a4a Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC558315.gif differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC558316.gif b/docs/tfvc/_img/compare-files/_imgcompare-files/IC558316.gif new file mode 100644 index 00000000000..92a474273c4 Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC558316.gif differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC558594.png b/docs/tfvc/_img/compare-files/_imgcompare-files/IC558594.png new file mode 100644 index 00000000000..6d7cc6ffea1 Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC558594.png differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC588355.png b/docs/tfvc/_img/compare-files/_imgcompare-files/IC588355.png new file mode 100644 index 00000000000..7978fdb550e Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC588355.png differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC646325.png b/docs/tfvc/_img/compare-files/_imgcompare-files/IC646325.png new file mode 100644 index 00000000000..4dd3ac4b9d6 Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC646325.png differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC646326.png b/docs/tfvc/_img/compare-files/_imgcompare-files/IC646326.png new file mode 100644 index 00000000000..18a2082dd73 Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC646326.png differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC646327.png b/docs/tfvc/_img/compare-files/_imgcompare-files/IC646327.png new file mode 100644 index 00000000000..97f4bd09f23 Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC646327.png differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC646328.png b/docs/tfvc/_img/compare-files/_imgcompare-files/IC646328.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC646328.png differ diff --git a/docs/tfvc/_img/compare-files/_imgcompare-files/IC756627.png b/docs/tfvc/_img/compare-files/_imgcompare-files/IC756627.png new file mode 100644 index 00000000000..6bc00571363 Binary files /dev/null and b/docs/tfvc/_img/compare-files/_imgcompare-files/IC756627.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/IC698934.png b/docs/tfvc/_img/create-work-workspaces/IC698934.png new file mode 100644 index 00000000000..758fa111d06 Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/IC698934.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/IC698935.png b/docs/tfvc/_img/create-work-workspaces/IC698935.png new file mode 100644 index 00000000000..d5db1f87646 Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/IC698935.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/IC698937.png b/docs/tfvc/_img/create-work-workspaces/IC698937.png new file mode 100644 index 00000000000..d9b8834f600 Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/IC698937.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/IC700907.png b/docs/tfvc/_img/create-work-workspaces/IC700907.png new file mode 100644 index 00000000000..00f47cbef3e Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/IC700907.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/IC720118.png b/docs/tfvc/_img/create-work-workspaces/IC720118.png new file mode 100644 index 00000000000..1798b5ff129 Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/IC720118.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/IC720119.png b/docs/tfvc/_img/create-work-workspaces/IC720119.png new file mode 100644 index 00000000000..88b901736de Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/IC720119.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC698934.png b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC698934.png new file mode 100644 index 00000000000..758fa111d06 Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC698934.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC698935.png b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC698935.png new file mode 100644 index 00000000000..d5db1f87646 Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC698935.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC698937.png b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC698937.png new file mode 100644 index 00000000000..d9b8834f600 Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC698937.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC700907.png b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC700907.png new file mode 100644 index 00000000000..00f47cbef3e Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC700907.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC720118.png b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC720118.png new file mode 100644 index 00000000000..1798b5ff129 Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC720118.png differ diff --git a/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC720119.png b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC720119.png new file mode 100644 index 00000000000..88b901736de Binary files /dev/null and b/docs/tfvc/_img/create-work-workspaces/_imgcreate-work-workspaces/IC720119.png differ diff --git a/docs/tfvc/_img/create-your-app-vs/IC685701.png b/docs/tfvc/_img/create-your-app-vs/IC685701.png new file mode 100644 index 00000000000..880080c7ed0 Binary files /dev/null and b/docs/tfvc/_img/create-your-app-vs/IC685701.png differ diff --git a/docs/tfvc/_img/create-your-app-vs/IC687145.png b/docs/tfvc/_img/create-your-app-vs/IC687145.png new file mode 100644 index 00000000000..486d2a42c2b Binary files /dev/null and b/docs/tfvc/_img/create-your-app-vs/IC687145.png differ diff --git a/docs/tfvc/_img/create-your-app-vs/IC687147.png b/docs/tfvc/_img/create-your-app-vs/IC687147.png new file mode 100644 index 00000000000..a257bce1893 Binary files /dev/null and b/docs/tfvc/_img/create-your-app-vs/IC687147.png differ diff --git a/docs/tfvc/_img/create-your-app-vs/IC687148.png b/docs/tfvc/_img/create-your-app-vs/IC687148.png new file mode 100644 index 00000000000..04834167e64 Binary files /dev/null and b/docs/tfvc/_img/create-your-app-vs/IC687148.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532202.gif b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532202.gif new file mode 100644 index 00000000000..14272b3214e Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532202.gif differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532203.gif b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532203.gif new file mode 100644 index 00000000000..d516fde27da Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532203.gif differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532204.gif b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532204.gif new file mode 100644 index 00000000000..dcf73c4cd10 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532204.gif differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532205.gif b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532205.gif new file mode 100644 index 00000000000..d7d5f8a22e9 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532205.gif differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC547418.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC547418.png new file mode 100644 index 00000000000..332976f36c3 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC547418.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC588354.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC588354.png new file mode 100644 index 00000000000..d2fd0f735e5 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC588354.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591024.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591024.png new file mode 100644 index 00000000000..3e41f028251 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591024.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591026.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591026.png new file mode 100644 index 00000000000..f8a00ae0854 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591026.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591278.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591278.png new file mode 100644 index 00000000000..b60b8afd3e3 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591278.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592393.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592393.png new file mode 100644 index 00000000000..73f54624da1 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592393.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592394.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592394.png new file mode 100644 index 00000000000..5767c3a5be1 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592394.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592517.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592517.png new file mode 100644 index 00000000000..a00fd64f0be Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592517.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592880.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592880.png new file mode 100644 index 00000000000..d315a40654a Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592880.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC593474.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC593474.png new file mode 100644 index 00000000000..b92b65b6812 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC593474.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675827.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675827.png new file mode 100644 index 00000000000..3a94c05d174 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675827.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675828.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675828.png new file mode 100644 index 00000000000..bb097170aca Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675828.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532202.gif b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532202.gif new file mode 100644 index 00000000000..14272b3214e Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532202.gif differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532203.gif b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532203.gif new file mode 100644 index 00000000000..d516fde27da Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532203.gif differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532204.gif b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532204.gif new file mode 100644 index 00000000000..dcf73c4cd10 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532204.gif differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532205.gif b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532205.gif new file mode 100644 index 00000000000..d7d5f8a22e9 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532205.gif differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC547418.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC547418.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC588354.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC588354.png new file mode 100644 index 00000000000..2ab28f1f06e Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC588354.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591024.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591024.png new file mode 100644 index 00000000000..e7b0742a229 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591024.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591026.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591026.png new file mode 100644 index 00000000000..73c995871c8 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591026.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591278.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591278.png new file mode 100644 index 00000000000..e4bb61bf8ec Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591278.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592393.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592393.png new file mode 100644 index 00000000000..b6bd2667d4c Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592393.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592394.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592394.png new file mode 100644 index 00000000000..bfbc40f7183 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592394.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592517.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592517.png new file mode 100644 index 00000000000..3a4311c54d7 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592517.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592880.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592880.png new file mode 100644 index 00000000000..698f96c470f Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592880.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC593474.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC593474.png new file mode 100644 index 00000000000..fa65ff67ba0 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC593474.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675827.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675827.png new file mode 100644 index 00000000000..a0f2cd2d601 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675827.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675828.png b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675828.png new file mode 100644 index 00000000000..8cbc824cfab Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/_imgday-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675828.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC547418.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC547418.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC558300.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC558300.png new file mode 100644 index 00000000000..1a2d4b6bff9 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC558300.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC588354.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC588354.png new file mode 100644 index 00000000000..2ab28f1f06e Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC588354.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591023.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591023.png new file mode 100644 index 00000000000..6dfbe6b9b9b Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591023.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591276.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591276.png new file mode 100644 index 00000000000..428a23775f8 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591276.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591277.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591277.png new file mode 100644 index 00000000000..1f6fac4bd26 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591277.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591729.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591729.png new file mode 100644 index 00000000000..895aceccdb6 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC591729.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC592882.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC592882.png new file mode 100644 index 00000000000..6db4acfec35 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC592882.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC612257.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC612257.png new file mode 100644 index 00000000000..60a761a2483 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC612257.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675817.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675817.png new file mode 100644 index 00000000000..16597b08656 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675817.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675818.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675818.png new file mode 100644 index 00000000000..220c5639f58 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675818.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675819.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675819.png new file mode 100644 index 00000000000..98b7069d645 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675819.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675829.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675829.png new file mode 100644 index 00000000000..e7a64abb3b3 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675829.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675830.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675830.png new file mode 100644 index 00000000000..6da42c54ddf Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675830.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675831.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675831.png new file mode 100644 index 00000000000..ed60c247dca Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675831.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675832.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675832.png new file mode 100644 index 00000000000..e87e9dfcca3 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675832.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675833.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675833.png new file mode 100644 index 00000000000..17ebbc57ee3 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/IC675833.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC547418.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC547418.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC558300.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC558300.png new file mode 100644 index 00000000000..1a2d4b6bff9 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC558300.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC588354.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC588354.png new file mode 100644 index 00000000000..2ab28f1f06e Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC588354.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591023.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591023.png new file mode 100644 index 00000000000..6dfbe6b9b9b Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591023.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591276.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591276.png new file mode 100644 index 00000000000..428a23775f8 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591276.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591277.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591277.png new file mode 100644 index 00000000000..1f6fac4bd26 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591277.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591729.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591729.png new file mode 100644 index 00000000000..895aceccdb6 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC591729.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC592882.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC592882.png new file mode 100644 index 00000000000..6db4acfec35 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC592882.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC612257.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC612257.png new file mode 100644 index 00000000000..60a761a2483 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC612257.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675817.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675817.png new file mode 100644 index 00000000000..16597b08656 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675817.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675818.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675818.png new file mode 100644 index 00000000000..220c5639f58 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675818.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675819.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675819.png new file mode 100644 index 00000000000..98b7069d645 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675819.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675829.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675829.png new file mode 100644 index 00000000000..e7a64abb3b3 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675829.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675830.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675830.png new file mode 100644 index 00000000000..6da42c54ddf Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675830.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675831.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675831.png new file mode 100644 index 00000000000..ed60c247dca Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675831.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675832.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675832.png new file mode 100644 index 00000000000..e87e9dfcca3 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675832.png differ diff --git a/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675833.png b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675833.png new file mode 100644 index 00000000000..17ebbc57ee3 Binary files /dev/null and b/docs/tfvc/_img/day-life-alm-developer-write-new-code-user-story/_imgday-life-alm-developer-write-new-code-user-story/IC675833.png differ diff --git a/docs/tfvc/_img/delete-restore-files-folders/IC51402.gif b/docs/tfvc/_img/delete-restore-files-folders/IC51402.gif new file mode 100644 index 00000000000..f83b76318f5 Binary files /dev/null and b/docs/tfvc/_img/delete-restore-files-folders/IC51402.gif differ diff --git a/docs/tfvc/_img/delete-restore-files-folders/IC547418.png b/docs/tfvc/_img/delete-restore-files-folders/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/delete-restore-files-folders/IC547418.png differ diff --git a/docs/tfvc/_img/delete-restore-files-folders/IC572373.png b/docs/tfvc/_img/delete-restore-files-folders/IC572373.png new file mode 100644 index 00000000000..65a2695d551 Binary files /dev/null and b/docs/tfvc/_img/delete-restore-files-folders/IC572373.png differ diff --git a/docs/tfvc/_img/delete-restore-files-folders/important.png b/docs/tfvc/_img/delete-restore-files-folders/important.png new file mode 100644 index 00000000000..256ea947eac Binary files /dev/null and b/docs/tfvc/_img/delete-restore-files-folders/important.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC106108.gif b/docs/tfvc/_img/develop-code-manage-pending-changes/IC106108.gif new file mode 100644 index 00000000000..45467f487aa Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC106108.gif differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC51402.gif b/docs/tfvc/_img/develop-code-manage-pending-changes/IC51402.gif new file mode 100644 index 00000000000..f83b76318f5 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC51402.gif differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC547418.png b/docs/tfvc/_img/develop-code-manage-pending-changes/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC547418.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC572374.png b/docs/tfvc/_img/develop-code-manage-pending-changes/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC572374.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC591023.png b/docs/tfvc/_img/develop-code-manage-pending-changes/IC591023.png new file mode 100644 index 00000000000..6dfbe6b9b9b Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC591023.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC591276.png b/docs/tfvc/_img/develop-code-manage-pending-changes/IC591276.png new file mode 100644 index 00000000000..428a23775f8 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC591276.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC612257.png b/docs/tfvc/_img/develop-code-manage-pending-changes/IC612257.png new file mode 100644 index 00000000000..60a761a2483 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC612257.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC667296.png b/docs/tfvc/_img/develop-code-manage-pending-changes/IC667296.png new file mode 100644 index 00000000000..dfa49d1afc5 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC667296.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC668001.png b/docs/tfvc/_img/develop-code-manage-pending-changes/IC668001.png new file mode 100644 index 00000000000..3f68b4256b1 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC668001.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC673341.png b/docs/tfvc/_img/develop-code-manage-pending-changes/IC673341.png new file mode 100644 index 00000000000..9734e1fa15f Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC673341.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/IC97411.gif b/docs/tfvc/_img/develop-code-manage-pending-changes/IC97411.gif new file mode 100644 index 00000000000..b83fa88b39d Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/IC97411.gif differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC106108.gif b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC106108.gif new file mode 100644 index 00000000000..45467f487aa Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC106108.gif differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC51402.gif b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC51402.gif new file mode 100644 index 00000000000..f83b76318f5 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC51402.gif differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC547418.png b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC547418.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC572374.png b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC572374.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC591023.png b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC591023.png new file mode 100644 index 00000000000..6dfbe6b9b9b Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC591023.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC591276.png b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC591276.png new file mode 100644 index 00000000000..428a23775f8 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC591276.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC612257.png b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC612257.png new file mode 100644 index 00000000000..60a761a2483 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC612257.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC667296.png b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC667296.png new file mode 100644 index 00000000000..dfa49d1afc5 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC667296.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC668001.png b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC668001.png new file mode 100644 index 00000000000..3f68b4256b1 Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC668001.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC673341.png b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC673341.png new file mode 100644 index 00000000000..9734e1fa15f Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC673341.png differ diff --git a/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC97411.gif b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC97411.gif new file mode 100644 index 00000000000..b83fa88b39d Binary files /dev/null and b/docs/tfvc/_img/develop-code-manage-pending-changes/_imgdevelop-code-manage-pending-changes/IC97411.gif differ diff --git a/docs/tfvc/_img/download-get-files-from-server/IC572374.png b/docs/tfvc/_img/download-get-files-from-server/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/download-get-files-from-server/IC572374.png differ diff --git a/docs/tfvc/_img/download-get-files-from-server/_imgdownload-get-files-from-server/IC572374.png b/docs/tfvc/_img/download-get-files-from-server/_imgdownload-get-files-from-server/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/download-get-files-from-server/_imgdownload-get-files-from-server/IC572374.png differ diff --git a/docs/tfvc/_img/find-view-changesets/IC263819.png b/docs/tfvc/_img/find-view-changesets/IC263819.png new file mode 100644 index 00000000000..11f7f2508b5 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/IC263819.png differ diff --git a/docs/tfvc/_img/find-view-changesets/IC572374.png b/docs/tfvc/_img/find-view-changesets/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/IC572374.png differ diff --git a/docs/tfvc/_img/find-view-changesets/IC592883.png b/docs/tfvc/_img/find-view-changesets/IC592883.png new file mode 100644 index 00000000000..1497be01a1a Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/IC592883.png differ diff --git a/docs/tfvc/_img/find-view-changesets/IC612254.png b/docs/tfvc/_img/find-view-changesets/IC612254.png new file mode 100644 index 00000000000..8d60dd50103 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/IC612254.png differ diff --git a/docs/tfvc/_img/find-view-changesets/IC612255.png b/docs/tfvc/_img/find-view-changesets/IC612255.png new file mode 100644 index 00000000000..2bbc7bcaf88 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/IC612255.png differ diff --git a/docs/tfvc/_img/find-view-changesets/IC615597.png b/docs/tfvc/_img/find-view-changesets/IC615597.png new file mode 100644 index 00000000000..cce0d1b96a2 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/IC615597.png differ diff --git a/docs/tfvc/_img/find-view-changesets/IC667296.png b/docs/tfvc/_img/find-view-changesets/IC667296.png new file mode 100644 index 00000000000..dfa49d1afc5 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/IC667296.png differ diff --git a/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC263819.png b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC263819.png new file mode 100644 index 00000000000..11f7f2508b5 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC263819.png differ diff --git a/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC572374.png b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC572374.png differ diff --git a/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC592883.png b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC592883.png new file mode 100644 index 00000000000..1497be01a1a Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC592883.png differ diff --git a/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC612254.png b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC612254.png new file mode 100644 index 00000000000..8d60dd50103 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC612254.png differ diff --git a/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC612255.png b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC612255.png new file mode 100644 index 00000000000..2bbc7bcaf88 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC612255.png differ diff --git a/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC615597.png b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC615597.png new file mode 100644 index 00000000000..cce0d1b96a2 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC615597.png differ diff --git a/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC667296.png b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC667296.png new file mode 100644 index 00000000000..dfa49d1afc5 Binary files /dev/null and b/docs/tfvc/_img/find-view-changesets/_imgfind-view-changesets/IC667296.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC682169.png b/docs/tfvc/_img/get-code-reviewed-vs/IC682169.png new file mode 100644 index 00000000000..8ec5041e01d Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC682169.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC682170.png b/docs/tfvc/_img/get-code-reviewed-vs/IC682170.png new file mode 100644 index 00000000000..b59f953117e Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC682170.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC682171.png b/docs/tfvc/_img/get-code-reviewed-vs/IC682171.png new file mode 100644 index 00000000000..64709b30b91 Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC682171.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC682757.png b/docs/tfvc/_img/get-code-reviewed-vs/IC682757.png new file mode 100644 index 00000000000..44c645f75d0 Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC682757.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC682758.png b/docs/tfvc/_img/get-code-reviewed-vs/IC682758.png new file mode 100644 index 00000000000..a00f12b9b98 Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC682758.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC682760.png b/docs/tfvc/_img/get-code-reviewed-vs/IC682760.png new file mode 100644 index 00000000000..68fda0f3a2d Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC682760.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC682763.png b/docs/tfvc/_img/get-code-reviewed-vs/IC682763.png new file mode 100644 index 00000000000..9217f4b9984 Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC682763.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC682764.png b/docs/tfvc/_img/get-code-reviewed-vs/IC682764.png new file mode 100644 index 00000000000..8767d935c7a Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC682764.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC683034.png b/docs/tfvc/_img/get-code-reviewed-vs/IC683034.png new file mode 100644 index 00000000000..0fa5d82ba61 Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC683034.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC683035.png b/docs/tfvc/_img/get-code-reviewed-vs/IC683035.png new file mode 100644 index 00000000000..a17d3d37df2 Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC683035.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC683036.png b/docs/tfvc/_img/get-code-reviewed-vs/IC683036.png new file mode 100644 index 00000000000..fa05b51acca Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC683036.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC683037.png b/docs/tfvc/_img/get-code-reviewed-vs/IC683037.png new file mode 100644 index 00000000000..4fd5fbb470b Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC683037.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC683038.png b/docs/tfvc/_img/get-code-reviewed-vs/IC683038.png new file mode 100644 index 00000000000..897fd456ff3 Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC683038.png differ diff --git a/docs/tfvc/_img/get-code-reviewed-vs/IC683039.png b/docs/tfvc/_img/get-code-reviewed-vs/IC683039.png new file mode 100644 index 00000000000..b2510c05575 Binary files /dev/null and b/docs/tfvc/_img/get-code-reviewed-vs/IC683039.png differ diff --git a/docs/tfvc/_img/get-command/IC572374.png b/docs/tfvc/_img/get-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/get-command/IC572374.png differ diff --git a/docs/tfvc/_img/get-command/_imgget-command/IC572374.png b/docs/tfvc/_img/get-command/_imgget-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/get-command/_imgget-command/IC572374.png differ diff --git a/docs/tfvc/_img/history-command/IC572374.png b/docs/tfvc/_img/history-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/history-command/IC572374.png differ diff --git a/docs/tfvc/_img/history-command/_imghistory-command/IC572374.png b/docs/tfvc/_img/history-command/_imghistory-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/history-command/_imghistory-command/IC572374.png differ diff --git a/docs/tfvc/_img/index/eclipse.png b/docs/tfvc/_img/index/eclipse.png new file mode 100644 index 00000000000..e0135be2097 Binary files /dev/null and b/docs/tfvc/_img/index/eclipse.png differ diff --git a/docs/tfvc/_img/index/vs-ide.png b/docs/tfvc/_img/index/vs-ide.png new file mode 100644 index 00000000000..f2dd67bbd2c Binary files /dev/null and b/docs/tfvc/_img/index/vs-ide.png differ diff --git a/docs/tfvc/_img/index/xcode.png b/docs/tfvc/_img/index/xcode.png new file mode 100644 index 00000000000..8e36aa72d04 Binary files /dev/null and b/docs/tfvc/_img/index/xcode.png differ diff --git a/docs/tfvc/_img/merge-folders-files/IC268252.png b/docs/tfvc/_img/merge-folders-files/IC268252.png new file mode 100644 index 00000000000..915002137e8 Binary files /dev/null and b/docs/tfvc/_img/merge-folders-files/IC268252.png differ diff --git a/docs/tfvc/_img/merge-folders-files/IC269735.png b/docs/tfvc/_img/merge-folders-files/IC269735.png new file mode 100644 index 00000000000..886a707cbfc Binary files /dev/null and b/docs/tfvc/_img/merge-folders-files/IC269735.png differ diff --git a/docs/tfvc/_img/merge-folders-files/_imgmerge-folders-files/IC268252.png b/docs/tfvc/_img/merge-folders-files/_imgmerge-folders-files/IC268252.png new file mode 100644 index 00000000000..915002137e8 Binary files /dev/null and b/docs/tfvc/_img/merge-folders-files/_imgmerge-folders-files/IC268252.png differ diff --git a/docs/tfvc/_img/merge-folders-files/_imgmerge-folders-files/IC269735.png b/docs/tfvc/_img/merge-folders-files/_imgmerge-folders-files/IC269735.png new file mode 100644 index 00000000000..886a707cbfc Binary files /dev/null and b/docs/tfvc/_img/merge-folders-files/_imgmerge-folders-files/IC269735.png differ diff --git a/docs/tfvc/_img/optimize-your-workspace/IC578257.png b/docs/tfvc/_img/optimize-your-workspace/IC578257.png new file mode 100644 index 00000000000..c241fbc187d Binary files /dev/null and b/docs/tfvc/_img/optimize-your-workspace/IC578257.png differ diff --git a/docs/tfvc/_img/optimize-your-workspace/IC646325.png b/docs/tfvc/_img/optimize-your-workspace/IC646325.png new file mode 100644 index 00000000000..4dd3ac4b9d6 Binary files /dev/null and b/docs/tfvc/_img/optimize-your-workspace/IC646325.png differ diff --git a/docs/tfvc/_img/optimize-your-workspace/IC646326.png b/docs/tfvc/_img/optimize-your-workspace/IC646326.png new file mode 100644 index 00000000000..18a2082dd73 Binary files /dev/null and b/docs/tfvc/_img/optimize-your-workspace/IC646326.png differ diff --git a/docs/tfvc/_img/optimize-your-workspace/IC646327.png b/docs/tfvc/_img/optimize-your-workspace/IC646327.png new file mode 100644 index 00000000000..97f4bd09f23 Binary files /dev/null and b/docs/tfvc/_img/optimize-your-workspace/IC646327.png differ diff --git a/docs/tfvc/_img/optimize-your-workspace/IC646328.png b/docs/tfvc/_img/optimize-your-workspace/IC646328.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/tfvc/_img/optimize-your-workspace/IC646328.png differ diff --git a/docs/tfvc/_img/optimize-your-workspace/IC720115.png b/docs/tfvc/_img/optimize-your-workspace/IC720115.png new file mode 100644 index 00000000000..20e99861771 Binary files /dev/null and b/docs/tfvc/_img/optimize-your-workspace/IC720115.png differ diff --git a/docs/tfvc/_img/optimize-your-workspace/IC720116.png b/docs/tfvc/_img/optimize-your-workspace/IC720116.png new file mode 100644 index 00000000000..5a451cb4b00 Binary files /dev/null and b/docs/tfvc/_img/optimize-your-workspace/IC720116.png differ diff --git a/docs/tfvc/_img/optimize-your-workspace/IC720117.png b/docs/tfvc/_img/optimize-your-workspace/IC720117.png new file mode 100644 index 00000000000..0691e93a60b Binary files /dev/null and b/docs/tfvc/_img/optimize-your-workspace/IC720117.png differ diff --git a/docs/tfvc/_img/optimize-your-workspace/IC756627.png b/docs/tfvc/_img/optimize-your-workspace/IC756627.png new file mode 100644 index 00000000000..6bc00571363 Binary files /dev/null and b/docs/tfvc/_img/optimize-your-workspace/IC756627.png differ diff --git a/docs/tfvc/_img/rename-move-files-folders/IC547418.png b/docs/tfvc/_img/rename-move-files-folders/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/rename-move-files-folders/IC547418.png differ diff --git a/docs/tfvc/_img/rename-move-files-folders/IC572374.png b/docs/tfvc/_img/rename-move-files-folders/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/rename-move-files-folders/IC572374.png differ diff --git a/docs/tfvc/_img/rename-move-files-folders/_imgrename-move-files-folders/IC547418.png b/docs/tfvc/_img/rename-move-files-folders/_imgrename-move-files-folders/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/rename-move-files-folders/_imgrename-move-files-folders/IC547418.png differ diff --git a/docs/tfvc/_img/rename-move-files-folders/_imgrename-move-files-folders/IC572374.png b/docs/tfvc/_img/rename-move-files-folders/_imgrename-move-files-folders/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/rename-move-files-folders/_imgrename-move-files-folders/IC572374.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC277131.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC277131.png new file mode 100644 index 00000000000..59bd051074a Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC277131.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC277132.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC277132.png new file mode 100644 index 00000000000..2d03dae1785 Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC277132.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC277133.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC277133.png new file mode 100644 index 00000000000..3b24539a789 Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC277133.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377394.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377394.png new file mode 100644 index 00000000000..9177831d4b7 Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377394.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377395.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377395.png new file mode 100644 index 00000000000..1ea862640c5 Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377395.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377396.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377396.png new file mode 100644 index 00000000000..47831e1c0a9 Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377396.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377397.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377397.png new file mode 100644 index 00000000000..12ffe7b8394 Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC377397.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC572374.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC572374.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC612247.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC612247.png new file mode 100644 index 00000000000..cf957291f95 Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC612247.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC612248.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC612248.png new file mode 100644 index 00000000000..7fe665484b2 Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC612248.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC612249.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC612249.png new file mode 100644 index 00000000000..7d17619f886 Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC612249.png differ diff --git a/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC745580.png b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC745580.png new file mode 100644 index 00000000000..1f8749bccef Binary files /dev/null and b/docs/tfvc/_img/resolve-team-foundation-version-control-conflicts/IC745580.png differ diff --git a/docs/tfvc/_img/roll-back-changesets/IC572374.png b/docs/tfvc/_img/roll-back-changesets/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/roll-back-changesets/IC572374.png differ diff --git a/docs/tfvc/_img/roll-back-changesets/IC581279.png b/docs/tfvc/_img/roll-back-changesets/IC581279.png new file mode 100644 index 00000000000..ec9e6a88e03 Binary files /dev/null and b/docs/tfvc/_img/roll-back-changesets/IC581279.png differ diff --git a/docs/tfvc/_img/roll-back-changesets/IC581280.png b/docs/tfvc/_img/roll-back-changesets/IC581280.png new file mode 100644 index 00000000000..94c463906f8 Binary files /dev/null and b/docs/tfvc/_img/roll-back-changesets/IC581280.png differ diff --git a/docs/tfvc/_img/roll-back-changesets/IC581281.png b/docs/tfvc/_img/roll-back-changesets/IC581281.png new file mode 100644 index 00000000000..809c03cd6ef Binary files /dev/null and b/docs/tfvc/_img/roll-back-changesets/IC581281.png differ diff --git a/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC572374.png b/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC572374.png differ diff --git a/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC581279.png b/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC581279.png new file mode 100644 index 00000000000..ec9e6a88e03 Binary files /dev/null and b/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC581279.png differ diff --git a/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC581280.png b/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC581280.png new file mode 100644 index 00000000000..94c463906f8 Binary files /dev/null and b/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC581280.png differ diff --git a/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC581281.png b/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC581281.png new file mode 100644 index 00000000000..809c03cd6ef Binary files /dev/null and b/docs/tfvc/_img/roll-back-changesets/_imgroll-back-changesets/IC581281.png differ diff --git a/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC675409.png b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC675409.png new file mode 100644 index 00000000000..75c6582f1c7 Binary files /dev/null and b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC675409.png differ diff --git a/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC675823.png b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC675823.png new file mode 100644 index 00000000000..51326d61e9d Binary files /dev/null and b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC675823.png differ diff --git a/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC675825.png b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC675825.png new file mode 100644 index 00000000000..7f10794abe5 Binary files /dev/null and b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC675825.png differ diff --git a/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC677199.png b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC677199.png new file mode 100644 index 00000000000..2b40559596e Binary files /dev/null and b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC677199.png differ diff --git a/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC696633.png b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC696633.png new file mode 100644 index 00000000000..ebd5503a809 Binary files /dev/null and b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC696633.png differ diff --git a/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC696634.png b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC696634.png new file mode 100644 index 00000000000..344332b3d79 Binary files /dev/null and b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC696634.png differ diff --git a/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC696635.png b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC696635.png new file mode 100644 index 00000000000..8a5535567b0 Binary files /dev/null and b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC696635.png differ diff --git a/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC750752.png b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC750752.png new file mode 100644 index 00000000000..59f90d6562b Binary files /dev/null and b/docs/tfvc/_img/set-up-team-foundation-version-control-your-dev-machine/IC750752.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-eclipse/checkin-changes-tfvc.png b/docs/tfvc/_img/share-your-code-in-tfvc-eclipse/checkin-changes-tfvc.png new file mode 100644 index 00000000000..e8a2b41b189 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-eclipse/checkin-changes-tfvc.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-eclipse/share-project-tfvc.png b/docs/tfvc/_img/share-your-code-in-tfvc-eclipse/share-project-tfvc.png new file mode 100644 index 00000000000..1ddcd1a4831 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-eclipse/share-project-tfvc.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/ConfigureWorkspace.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/ConfigureWorkspace.png new file mode 100644 index 00000000000..c5ef9648d0b Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/ConfigureWorkspace.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682140.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682140.png new file mode 100644 index 00000000000..30cdc26bbef Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682140.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682155.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682155.png new file mode 100644 index 00000000000..1893144fbc5 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682155.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682157.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682157.png new file mode 100644 index 00000000000..c2308582a47 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682157.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682159.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682159.png new file mode 100644 index 00000000000..21355c5311b Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682159.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682161.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682161.png new file mode 100644 index 00000000000..b1f40ec061c Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682161.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682163.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682163.png new file mode 100644 index 00000000000..a5a7b491066 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682163.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682953.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682953.png new file mode 100644 index 00000000000..f72f35ec31b Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682953.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682954.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682954.png new file mode 100644 index 00000000000..34ac3e5ba0d Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682954.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682955.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682955.png new file mode 100644 index 00000000000..82714d98bc5 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682955.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682956.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682956.png new file mode 100644 index 00000000000..5bbcbc61a05 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682956.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682957.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682957.png new file mode 100644 index 00000000000..8683008ca7c Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC682957.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC685248.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC685248.png new file mode 100644 index 00000000000..15ab2064ae6 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC685248.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC685249.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC685249.png new file mode 100644 index 00000000000..6f7a6b9c2ec Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC685249.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC689415.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC689415.png new file mode 100644 index 00000000000..c0ae5e39b9b Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC689415.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC689416.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC689416.png new file mode 100644 index 00000000000..25b6e39d77c Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/IC689416.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/MapAndGet.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/MapAndGet.png new file mode 100644 index 00000000000..5601d6702d8 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/MapAndGet.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/MapWorkspaceSuccess.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/MapWorkspaceSuccess.png new file mode 100644 index 00000000000..cdc1a8d326d Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/MapWorkspaceSuccess.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/OpenSCE_ManageWorkspaces.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/OpenSCE_ManageWorkspaces.png new file mode 100644 index 00000000000..0da5df21061 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/OpenSCE_ManageWorkspaces.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/open-solution-from-team-explorer-home.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/open-solution-from-team-explorer-home.png new file mode 100644 index 00000000000..4e586760daf Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/open-solution-from-team-explorer-home.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/open-workspace-folder-from-source-control-explorer.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/open-workspace-folder-from-source-control-explorer.png new file mode 100644 index 00000000000..9efd4a1e48e Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/open-workspace-folder-from-source-control-explorer.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-vs/team-explorer-new-solution.png b/docs/tfvc/_img/share-your-code-in-tfvc-vs/team-explorer-new-solution.png new file mode 100644 index 00000000000..19eb4a1020a Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-vs/team-explorer-new-solution.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-xcode/git-tf-help-checkin.png b/docs/tfvc/_img/share-your-code-in-tfvc-xcode/git-tf-help-checkin.png new file mode 100644 index 00000000000..8d462ee0880 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-xcode/git-tf-help-checkin.png differ diff --git a/docs/tfvc/_img/share-your-code-in-tfvc-xcode/git-tf-help.png b/docs/tfvc/_img/share-your-code-in-tfvc-xcode/git-tf-help.png new file mode 100644 index 00000000000..088dcfaffa3 Binary files /dev/null and b/docs/tfvc/_img/share-your-code-in-tfvc-xcode/git-tf-help.png differ diff --git a/docs/tfvc/_img/status-command/IC572374.png b/docs/tfvc/_img/status-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/status-command/IC572374.png differ diff --git a/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC547418.png b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC547418.png new file mode 100644 index 00000000000..9e19a694b84 Binary files /dev/null and b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC547418.png differ diff --git a/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC572374.png b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC572374.png differ diff --git a/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC591026.png b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC591026.png new file mode 100644 index 00000000000..73c995871c8 Binary files /dev/null and b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC591026.png differ diff --git a/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC592393.png b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC592393.png new file mode 100644 index 00000000000..b6bd2667d4c Binary files /dev/null and b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC592393.png differ diff --git a/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC612901.png b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC612901.png new file mode 100644 index 00000000000..0a3649ff630 Binary files /dev/null and b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC612901.png differ diff --git a/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC612902.png b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC612902.png new file mode 100644 index 00000000000..91905bbdd46 Binary files /dev/null and b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC612902.png differ diff --git a/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC612903.png b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC612903.png new file mode 100644 index 00000000000..51aeba800bf Binary files /dev/null and b/docs/tfvc/_img/suspend-your-work-manage-your-shelvesets/IC612903.png differ diff --git a/docs/tfvc/_img/undo-command/IC572374.png b/docs/tfvc/_img/undo-command/IC572374.png new file mode 100644 index 00000000000..1ea345c632b Binary files /dev/null and b/docs/tfvc/_img/undo-command/IC572374.png differ diff --git a/docs/tfvc/_img/use-source-control-explorer-manage-files-under-version-control/IC612245.png b/docs/tfvc/_img/use-source-control-explorer-manage-files-under-version-control/IC612245.png new file mode 100644 index 00000000000..828a80b9acd Binary files /dev/null and b/docs/tfvc/_img/use-source-control-explorer-manage-files-under-version-control/IC612245.png differ diff --git a/docs/tfvc/_img/use-source-control-explorer-manage-files-under-version-control/IC698934.png b/docs/tfvc/_img/use-source-control-explorer-manage-files-under-version-control/IC698934.png new file mode 100644 index 00000000000..758fa111d06 Binary files /dev/null and b/docs/tfvc/_img/use-source-control-explorer-manage-files-under-version-control/IC698934.png differ diff --git a/docs/tfvc/_img/view-branch-hierarchy-team-project/IC268252.png b/docs/tfvc/_img/view-branch-hierarchy-team-project/IC268252.png new file mode 100644 index 00000000000..915002137e8 Binary files /dev/null and b/docs/tfvc/_img/view-branch-hierarchy-team-project/IC268252.png differ diff --git a/docs/tfvc/_img/view-branch-hierarchy-team-project/IC363705.png b/docs/tfvc/_img/view-branch-hierarchy-team-project/IC363705.png new file mode 100644 index 00000000000..c89e7a862d9 Binary files /dev/null and b/docs/tfvc/_img/view-branch-hierarchy-team-project/IC363705.png differ diff --git a/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC267918.gif b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC267918.gif new file mode 100644 index 00000000000..419ecbae1ab Binary files /dev/null and b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC267918.gif differ diff --git a/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC267920.gif b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC267920.gif new file mode 100644 index 00000000000..4591a97195b Binary files /dev/null and b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC267920.gif differ diff --git a/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC268252.png b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC268252.png new file mode 100644 index 00000000000..915002137e8 Binary files /dev/null and b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC268252.png differ diff --git a/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC348439.png b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC348439.png new file mode 100644 index 00000000000..66deab12a68 Binary files /dev/null and b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC348439.png differ diff --git a/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC451984.png b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC451984.png new file mode 100644 index 00000000000..573fb28b52c Binary files /dev/null and b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC451984.png differ diff --git a/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC451985.png b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC451985.png new file mode 100644 index 00000000000..069085be7e5 Binary files /dev/null and b/docs/tfvc/_img/view-where-when-changesets-have-been-merged/IC451985.png differ diff --git a/docs/tfvc/_shared/_img/add-personal-access-token.png b/docs/tfvc/_shared/_img/add-personal-access-token.png new file mode 100644 index 00000000000..94139f03164 Binary files /dev/null and b/docs/tfvc/_shared/_img/add-personal-access-token.png differ diff --git a/docs/tfvc/_shared/_img/changesVSCommits.png b/docs/tfvc/_shared/_img/changesVSCommits.png new file mode 100644 index 00000000000..77ec5700b5f Binary files /dev/null and b/docs/tfvc/_shared/_img/changesVSCommits.png differ diff --git a/docs/tfvc/_shared/_img/clone-url.png b/docs/tfvc/_shared/_img/clone-url.png new file mode 100644 index 00000000000..a64567396ce Binary files /dev/null and b/docs/tfvc/_shared/_img/clone-url.png differ diff --git a/docs/tfvc/_shared/_img/cloneURL.png b/docs/tfvc/_shared/_img/cloneURL.png new file mode 100644 index 00000000000..27e9f4419a2 Binary files /dev/null and b/docs/tfvc/_shared/_img/cloneURL.png differ diff --git a/docs/tfvc/_shared/_img/cloneVsRepo.png b/docs/tfvc/_shared/_img/cloneVsRepo.png new file mode 100644 index 00000000000..eb4f3ce9031 Binary files /dev/null and b/docs/tfvc/_shared/_img/cloneVsRepo.png differ diff --git a/docs/tfvc/_shared/_img/code-explorer.png b/docs/tfvc/_shared/_img/code-explorer.png new file mode 100644 index 00000000000..20f283a9f1b Binary files /dev/null and b/docs/tfvc/_shared/_img/code-explorer.png differ diff --git a/docs/tfvc/_shared/_img/create-personal-access-token.png b/docs/tfvc/_shared/_img/create-personal-access-token.png new file mode 100644 index 00000000000..d5029a0f60f Binary files /dev/null and b/docs/tfvc/_shared/_img/create-personal-access-token.png differ diff --git a/docs/tfvc/_shared/_img/enable-alternate-credentials.png b/docs/tfvc/_shared/_img/enable-alternate-credentials.png new file mode 100644 index 00000000000..8da1ba99147 Binary files /dev/null and b/docs/tfvc/_shared/_img/enable-alternate-credentials.png differ diff --git a/docs/tfvc/_shared/_img/git-credentials.png b/docs/tfvc/_shared/_img/git-credentials.png new file mode 100644 index 00000000000..d41af6e600a Binary files /dev/null and b/docs/tfvc/_shared/_img/git-credentials.png differ diff --git a/docs/tfvc/_shared/_img/manageConnections.png b/docs/tfvc/_shared/_img/manageConnections.png new file mode 100644 index 00000000000..71766a3c797 Binary files /dev/null and b/docs/tfvc/_shared/_img/manageConnections.png differ diff --git a/docs/tfvc/_shared/_img/my-profile.png b/docs/tfvc/_shared/_img/my-profile.png new file mode 100644 index 00000000000..b8e60dd8c53 Binary files /dev/null and b/docs/tfvc/_shared/_img/my-profile.png differ diff --git a/docs/tfvc/_shared/_img/newVSBranch.png b/docs/tfvc/_shared/_img/newVSBranch.png new file mode 100644 index 00000000000..7a258cfb275 Binary files /dev/null and b/docs/tfvc/_shared/_img/newVSBranch.png differ diff --git a/docs/tfvc/_shared/_img/newVsPull.png b/docs/tfvc/_shared/_img/newVsPull.png new file mode 100644 index 00000000000..ce805583c9e Binary files /dev/null and b/docs/tfvc/_shared/_img/newVsPull.png differ diff --git a/docs/tfvc/_shared/_img/newVsPullRequest.png b/docs/tfvc/_shared/_img/newVsPullRequest.png new file mode 100644 index 00000000000..f37bebb6c82 Binary files /dev/null and b/docs/tfvc/_shared/_img/newVsPullRequest.png differ diff --git a/docs/tfvc/_shared/_img/newVsPush.png b/docs/tfvc/_shared/_img/newVsPush.png new file mode 100644 index 00000000000..158bf0cf3cc Binary files /dev/null and b/docs/tfvc/_shared/_img/newVsPush.png differ diff --git a/docs/tfvc/_shared/_img/select-personal-access-token-scopes.png b/docs/tfvc/_shared/_img/select-personal-access-token-scopes.png new file mode 100644 index 00000000000..8d9d6821fc6 Binary files /dev/null and b/docs/tfvc/_shared/_img/select-personal-access-token-scopes.png differ diff --git a/docs/tfvc/_shared/_img/setup-personal-access-token.png b/docs/tfvc/_shared/_img/setup-personal-access-token.png new file mode 100644 index 00000000000..6b0783096ef Binary files /dev/null and b/docs/tfvc/_shared/_img/setup-personal-access-token.png differ diff --git a/docs/tfvc/_shared/_img/share-project.png b/docs/tfvc/_shared/_img/share-project.png new file mode 100644 index 00000000000..d1eeb1c649b Binary files /dev/null and b/docs/tfvc/_shared/_img/share-project.png differ diff --git a/docs/tfvc/_shared/_img/vs-rebasing.gif b/docs/tfvc/_shared/_img/vs-rebasing.gif new file mode 100644 index 00000000000..696fc3bcb62 Binary files /dev/null and b/docs/tfvc/_shared/_img/vs-rebasing.gif differ diff --git a/docs/tfvc/_shared/_img/vstsCreatePullReq.png b/docs/tfvc/_shared/_img/vstsCreatePullReq.png new file mode 100644 index 00000000000..9cdd281b8c6 Binary files /dev/null and b/docs/tfvc/_shared/_img/vstsCreatePullReq.png differ diff --git a/docs/tfvc/_shared/alternate-credentials.md b/docs/tfvc/_shared/alternate-credentials.md new file mode 100644 index 00000000000..6908119c8b6 --- /dev/null +++ b/docs/tfvc/_shared/alternate-credentials.md @@ -0,0 +1,12 @@ +0. Sign in to your VSTS account +(```http://{youraccount}.visualstudio.com```). + +0. From your home page, open your profile. Go to your security details. + + <img alt="Go to VSTS home, open your profile, go to Security" src="./_img/my-profile.png" style="border: 1px solid #CCCCCC" /> + +0. Enable alternate authentication credentials for this account. +Then provide a secondary username and password. + + <img alt="Enable alternate authentication credentials link on the user profile page" src="./_img/enable-alternate-credentials.png" style="border: 1px solid #CCCCCC" /> + diff --git a/docs/tfvc/_shared/connect-eclipse-to-vso.md b/docs/tfvc/_shared/connect-eclipse-to-vso.md new file mode 100644 index 00000000000..e1c7aecefb2 --- /dev/null +++ b/docs/tfvc/_shared/connect-eclipse-to-vso.md @@ -0,0 +1,5 @@ +Before you start: + +0. If you don't have a Team Services account, [create it first](../../accounts/create-account-msa-or-work-student.md). + +0. If you have not yet connected to a team project in your Team Services account, [do that now](../../connect/connect-team-projects.md). diff --git a/docs/tfvc/_shared/find-url.md b/docs/tfvc/_shared/find-url.md new file mode 100644 index 00000000000..45c596b7891 --- /dev/null +++ b/docs/tfvc/_shared/find-url.md @@ -0,0 +1,18 @@ +#### Q: Where can I find the URL for my Git repository? + +A: You'll find it in the code hub in your team project. + +1. Sign in to your VSTS account and browse to your team project or type the team project URL directly in your browser. + +* The URL will look like ```https://{your_account}.visualstudio.com/DefaultCollection/{your_team_project}``` + +* If you are not sure about your team project URL, [Sign in to your Visual Studio](http://go.microsoft.com/fwlink/?LinkID=309329) and select your account. + +2. Open the code hub from your you team project's home page. + + ![Team project home page, code explorer](_img/code-explorer.png) + +3. Select the the repository and click on the **clone** action to get the URL. + + ![Team project home page, code explorer, clone selected to show the URL](_img/clone-url.png) + diff --git a/docs/tfvc/_shared/open-team-project-in-vs-qa.md b/docs/tfvc/_shared/open-team-project-in-vs-qa.md new file mode 100644 index 00000000000..201f85cf9f6 --- /dev/null +++ b/docs/tfvc/_shared/open-team-project-in-vs-qa.md @@ -0,0 +1,6 @@ +<a name="DifferentSignInPage"></a> +#### Q: Why is my sign-in page different than when I sign in to Visual Studio? + +A: Your sign-in page depends on whether you used a Microsoft account or +work account with VSTS. So, sign in with the username and +password that you used with VSTS. diff --git a/docs/tfvc/_shared/open-team-project-in-vs.md b/docs/tfvc/_shared/open-team-project-in-vs.md new file mode 100644 index 00000000000..4131d0fe0da --- /dev/null +++ b/docs/tfvc/_shared/open-team-project-in-vs.md @@ -0,0 +1,14 @@ +## Open your team project in Visual Studio + +0. Before you start, if you haven't already: + + * [Sign up and create your team project](../../accounts/create-account-msa-or-work-student.md). + * Install [Visual Studio 2013 or later](https://www.visualstudio.com/downloads). + +0. Go to your team project's page +(```http://{youraccount}.visualstudio.com/DefaultCollection/{yourteamproject}```) +and then open Visual Studio to connect to your team project. + + ![On your team project overview page, click Open in Visual Studio](../../_shared/_img/GoHomeOpenInVisualStudio.png) + +0. Sign in to VSTS from Visual Studio. diff --git a/docs/tfvc/_shared/personal-access-tokens.md b/docs/tfvc/_shared/personal-access-tokens.md new file mode 100644 index 00000000000..af6478fb8c9 --- /dev/null +++ b/docs/tfvc/_shared/personal-access-tokens.md @@ -0,0 +1,41 @@ +0. Sign in to your VSTS account +(```http://{youraccount}.visualstudio.com```). + +0. From your home page, open your profile. Go to your security details. + + <img alt="Go to VSTS home, open your profile, go to Security" src="./_img/my-profile.png" style="border: 1px solid #CCCCCC" /> + +0. Create a new personal access token. + + <img alt="Add a personal access token" src="./_img/add-personal-access-token.png" style="border: 1px solid #CCCCCC" /> + +0. Name your token. Select a lifespan for your token. + + If you're using Team Services, and you have more than one account, + you can also select the Team Services account where you want to use the token. + + <img alt="Name your token, select a lifespan. If using Team Services, select an account for your token" src="./_img/setup-personal-access-token.png" style="border: 1px solid #CCCCCC" /> + +0. Select the [scopes](/vsts/integrate/get-started/authentication/oauth#scopes) +that this token will authorize for **your specific tasks**. + + For example, to build and release apps with a Windows, OSX, or Linux agent, + [limit your token's scope to **Agent Pools (read, manage)**](/vsts/build-release/concepts/agents/agents). + +0. When you're done, make sure to *copy the token*. You'll use this token as your password. + + <img alt="Use token as the password for your git tools or apps" src="./_img/create-personal-access-token.png" style="border: 1px solid #CCCCCC" /> + + **Note: Remember that this token is your identity and acts as you when it's used. + Keep your tokens secret and treat them like your password.** + + **Tip:** To keep your token more secure, use credential managers + so that you don't have to enter your credentials every time. + Here are some recommended credential managers: + + * Git: [Git Credential Manager for Mac OS X and Linux](https://github.com/Microsoft/Git-Credential-Manager-for-Mac-and-Linux) + or [Git Credential Manager for Windows](https://github.com/Microsoft/Git-Credential-Manager-for-Windows) + (Requires [Git for Windows](https://www.git-scm.com/download/win)) + * NuGet: [NuGet Credential Provider](/vsts/package/nuget/nuget-exe) + +0. When you don't need your token anymore, just revoke it to remove its access. diff --git a/docs/tfvc/add-check-policies.md b/docs/tfvc/add-check-policies.md new file mode 100644 index 00000000000..2e52971a764 --- /dev/null +++ b/docs/tfvc/add-check-policies.md @@ -0,0 +1,75 @@ +--- +title: Add Check-In Policies +description: Add Check-In Policies +ms.assetid: 1f3046e3-1ea2-4477-99ca-76d3fc70c47b +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/18/2016 +--- + +# Add Check-In Policies + +**VSTS | TFS 2015 | Visual Studio 2013, 2015, and 2017** + +Administrators of Team Foundation version control can add check-in policy requirements. These check-in policies require the user to take actions when they conduct a check-in to source control, for example a user can be required to associate a work item with a changeset. For more information about check-ins, see [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411). By default, the following check-in policy types are available: + +- **Builds**   Requires that the last build was successful before a check-in. + +- **Code Analysis**   Requires that code analysis is run before check-in. + +- **Work Items**   Requires that one or more work items be associated with the check-in. + +**Required Permissions** + +To complete this procedure, you must have the **Edit project-level information** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +> Visual Studio 2017 : Check-in policies in Visual Studio 2017 must be set through Team Explorer, tf.exe, or [through registry keys declared in the pkgdef of a Visual Studio extension](https://docs.microsoft.com/en-us/visualstudio/extensibility/internals/createpkgdef-utility). Policies only apply a single installation of Visual Studio 2017 on your computer. If you have mulitple installations of Visual Studio 2017, you'll need to set the check-in policy on each installation. [Learn more](https://docs.microsoft.com/en-us/visualstudio/extensibility/what-s-new-in-the-visual-studio-2017-sdk) + + +Procedure +----------------------------------------------------------------------------- + + +### To create a check-in policy + +1. From Team Explorer, select the **Settings** page, then select **Source Control** under the **Team Project** section. + + The **Source Control Settings** dialog box appears. + +2. Click the **Check-in Policy** tab and then click **Add**. + + The **Add Check-in Policy** dialog box appears. + +3. In the Check-in Policy list, select the policy type you want and then click OK. + + The list includes the following selections: + + - Select **Builds** if you want to require that a previous build was successful before any new changes can be checked in. + + - Select **Code Analysis** if you want to require that code analysis is run before code can be checked in. The **Code Analysis Policy Editor** dialog box appears. + + Select the check boxes for the types of code analysis that you want performed. Options are Enforce check-in to only contain files that are part of current solution, **Enforce C/C++ Code Analysis (/analyze)**, and **Enforce Code Analysis For Managed Code**. If you select the **Enforce Code Analysis For Managed Code** check box, select the desired rule settings under **Rule settings for Managed Code Analysis**. + + For more information about how to use code analysis tools, see [Creating and Using Code Analysis Check-In Policies](https://msdn.microsoft.com/library/ms182075). + + When you are finished, click **OK**. + + - If you selected **Work Items**, the policy is added to the list that a work item must be associated with the check in. + +4. When you are satisfied with the settings for the check-in policies, click **OK**; the new check-in policy now displays with future check-ins. + +## See Also + +#### Reference + +[Configure Command](configure-command.md) + +#### Concepts + +[Set and Enforce Quality Gates](set-enforce-quality-gates.md) + +#### Other Resources + +[Walkthrough: Customizing Checkin Policies and Notes](https://msdn.microsoft.com/library/ms181281) diff --git a/docs/tfvc/add-command.md b/docs/tfvc/add-command.md new file mode 100644 index 00000000000..a147128d2f7 --- /dev/null +++ b/docs/tfvc/add-command.md @@ -0,0 +1,71 @@ +--- +title: Add files to version control using the TFVC Add command +description: Use the TFVC Add command to add files to version control in TFS +ms.assetid: 0b61e4c6-a3da-48d6-bda0-7b14452049a4 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Add command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Adds files and folders to version control. + +>**Tip:** +>Before you add files to version control, you should first set up the workspace on your dev machine. See [Workspace Command](workspace-command.md) or [Set up Team Foundation Version Control on your dev machine](set-up-team-foundation-version-control-your-dev-machine.md). + +**Requirements:** See [Permissions and groups reference](../security/permissions.md). + + tf add itemspec [/lock:(none|checkin|checkout)] [/encoding:filetype] + [/noprompt] [/recursive] [/noignore] [/login:username,[password]] + +## Parameters + +|**Parameter**|**Description**| +|---|---| +|**/encoding**: *filetype*|Ignore this parameter.| +|*itemspec*|Specifies the scope of the items to add. You can specify more than one *itemspec* argument.|For syntax, see [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md).| +|**/lock**|Applies or removes a lock. See [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md).| +|**/login**:*username*,[*password*]|Specifies the user account to run the command. See [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md).| +|**/noignore**|By default certain types of files (for example, .dll files) are ignored by version control. The rules in a **.tfignore** files apply to the **Add** command when you specify a wildcard in your *itemspec*. To override the application of the rules in this case, specify **/noignore**.<p> You can configure which kinds of files are ignored using a .tfignore file (see <a href="add-files-server.md#tfignore">Add Files: .tfignore file</a>).| +|**/noprompt**|Suppresses the display of windows and dialog boxes and redirects output data to the command prompt. See [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md).| +|**/recursive**|Recursively adds items in the specified directory and any subdirectories.| + +## Examples + +In all the following examples, assume that `$/SiteApp/Main/` is mapped to `c:\\code\\SiteApp\\Main\\` in the workspace. + +### Add all new files in a local workspace + +New files in a [local workspace](decide-between-using-local-server-workspace.md) are automatically detected. You can promote these newly detected files to your pending changes. + + c:\code\SiteApp\Main\SolutionA\Project1>tf add + +Adds the latest versions of all items (except those that are [ignored](add-files-server.md#tfignore)) in a local workspace. + + c:\code\SiteApp\Main\SolutionA\Project1>tf add /noignore + +Adds the latest versions of all items in a local workspace. + +### Add individual items + c:\code\SiteApp\Main>tf add program1.cs program2.c + +Adds the files program1.cs and program2.c. + +### Recursively add all items of a specific type + c:\code\SiteApp\Main>tf add *.cs /recursive + +Adds all C\# code files (.cs) in the current directory and any subdirectories. + +## Work in Visual Studio + +- [Add files to the server](add-files-server.md) Use Visual Studio to add files to the server. + +## Tips + +- The results of this command are queued as pending changes (see [Status command](status-command.md)) and do not take effect on the server until you check in (see [Checkin command](checkin-command.md)). +- If you need to set aside changes (and perhaps also want to clean your workspace for another task), use the [Shelve Command](shelve-command.md). diff --git a/docs/tfvc/add-files-server.md b/docs/tfvc/add-files-server.md new file mode 100644 index 00000000000..578c9a76278 --- /dev/null +++ b/docs/tfvc/add-files-server.md @@ -0,0 +1,248 @@ +--- +title: Add files to the server +description: Add files to the server +ms.assetid: 9b457eb0-9cdf-438d-935d-ceac7ce2201a +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Add files to the server + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Adding a file to version control is often automatic when you use Solution Explorer and your project is under version control. However, in some cases, you have to take some extra steps to add the project to version control. + +>**Tip:** +> Before you add files to version control, you should first [set up the workspace on your dev machine](set-up-team-foundation-version-control-your-dev-machine.md) + +## Create a new code project and solution under version control + +You can simultaneously create a new team project and add it to version control so that you and your team can immediately enjoy all the benefits of version control beginning from the first line of code you write. + +![New Project dialog box](_img/add-files-server/IC579084.png) + +1. In Visual Studio, if you have not already done so, [connect to the team project](../connect/connect-team-projects.md). + +2. Choose **File**, **New**, **Project** (Keyboard: Ctrl + Shift + N). + + The **New Project** dialog box appears. + +3. Select the type of code project that you want to create. + +4. In the **Name** box, specify the name of the code project. + +5. If the **Solution** list appears, make sure **Create new solution** is selected. + +6. In the **Location** list, specify the path to a [good local working folder](optimize-your-workspace.md) (such as **c:\\code\\SiteApp\\Main\\**) in the workspace you created when you [set up your dev machine](set-up-team-foundation-version-control-your-dev-machine.md). + + Make sure the **Create directory for solution** and **Add to source control** check boxes are selected. + +7. Choose **OK** to create the code project, which you can then view in Solution Explorer (Keyboard: Ctrl + Alt + L). + + ![New Code Project in Solution Explorer](_img/add-files-server/IC612253.png) + +8. In **Solution Explorer**, open the context menu of the solution you created or modified and then choose **Check In** to [submit your pending changes](check-your-work-team-codebase.md). + +## Place an existing solution and code projects under version control + +To add an existing solution to version control, move all the solution files into your workspace, and then add them. + +>**Note:** +>Avoid using the **Add Solution to Source Control** dialog box to upload your solution into version control. Use the following procedure instead. + +1. In Visual Studio, if you have not already done so, [connect to the team project](../connect/connect-team-projects.md). + +2. Choose **View**, **Other Windows**, **Source Control Explorer**. + +3. In Source Control Explorer, navigate to a logical parent folder for your solution, such as **$/SiteApp/Main**, where SiteApp is the name of your team project. [Why is this a good parent folder?](optimize-your-workspace.md) + +4. Choose the link next to **Local Path** to open the parent folder in Windows Explorer (File Explorer in Windows 8). + + [What do I do if the link text is “Not Mapped”](create-work-workspaces.md)? + +5. Move the folder that contains your solution into the parent folder. + +6. In Visual Studio, choose **File**, **Open**, **Project/Solution**, and then use the **Open Project** dialog box to open the solution. + +7. In Solution Explorer (Keyboard: Ctrl + Alt + L), select the solution, open its context menu, and then choose **Add Solution to Source Control**. + +8. In Solution Explorer, select the solution, open its context menu, and then choose **Check In**. + +9. In Team Explorer, the **Pending Changes** page appears. + +10. Are there any **Detected** items shown in the **Excluded Changes** section? + + - **No:** Skip to the next step. + + - **Yes:** Choose the **Detected** link. The **Promote Candidate Changes** dialog box appears. The files in listed in this dialog box are not referenced by any code projects in your solution. If your team will need these files, make sure they are selected and then choose **Promote** to move them into the **Included Changes** section of the **Pending Changes** page. For more information, see [Check in your work to the team's codebase](check-your-work-team-codebase.md). + +11. When you’re ready, [submit your pending changes](check-your-work-team-codebase.md). + +## Add one or more files to version control + +When you use Solution Explorer to add a file to your code project, the system automatically adds it to version control. However, you can also add files that are not referenced by your code projects. + +>**Tip:** +>If you are creating an automated process or prefer to use the command prompt, you can use [Add command](add-command.md) instead of the following procedures. + +## Automatically add one or more files to version control + +>[!IMPORTANT] +> These steps only apply when using a [local workspace](decide-between-using-local-server-workspace.md). Files saved when working in a server workspace will add and check in without showing as a pending +> change in Team Explorer. + +If you are using a [local workspace](decide-between-using-local-server-workspace.md), then new files are automatically detected by the **Pending Changes** page. + +1. In Visual Studio, if you have not already done so, [connect to the team project](../connect/connect-team-projects.md). + +2. Choose **View**, **Other Windows**, **Source Control Explorer**. + +3. In Source Control Explorer, navigate to the folder where you want to add the files or folders. + +4. Choose the link next to **Local Path** to open the target folder in Windows Explorer (File Explorer in Windows 8). + + Move your files and folders into this folder. + + [What do I do if the link text is “Not Mapped”](create-work-workspaces.md)? + +5. In Visual Studio, in Team Explorer, choose **Pending Changes**. + +6. On the **Pending Changes** page, in the **Excluded Changes** section, select the **Detected** link. + +7. In the **Promote Candidate Changes** dialog box, make sure only files that you want to check in are selected, and then choose **Promote**. + +8. [Submit your pending changes](check-your-work-team-codebase.md). + +### Manually add files to version control + +You can also manually add files to version control. + +1. Choose **View**, **Other Windows**, **Source Control Explorer**. + +2. In Source Control Explorer, navigate to the folder where you want to place your files. + +>**Important:** +>Make sure this folder is checked in before you proceed. If you are creating the folder now, open its context menu and choose **Check In**, and then check in the new folder before proceeding. + +3. Drag the folders or files from Windows Explorer (or File Explorer) into the folder in Source Control Explorer. + +4. When the **Add to Source Control** dialog box appears, make sure all the files you want to add are selected, and then choose **Include item(s)**. + +5. Choose **Finish**. + +6. In Team Explorer, when the **Pending Changes** page appears, make sure the binaries that you want to add appear in the **Included Changes** section. Choose **Check In**. + +## Leverage third-party binaries that your code does not build + +Many teams develop code that depends on binaries that are not built by the solution in which they manage their code. Typically these binaries are part of a library that the team has licensed from a third party. + +Sometimes these binaries come from another team in the same company. For example, Team A depends on binaries produced by Team B, and each team must for some reason work in different team project collections. As a result, Team B delivers binaries to Team A, which then checks them into version control. + +> **Tip:** +>If your dev machines and [build agents](../build-release/concepts/agents/agents.md) can access the Internet, then [NuGet](http://go.microsoft.com/fwlink/?LinkId=246165) may make it easier for your team to manage your dependencies and keep your binaries up to date. Even if you decide to use NuGet, you should probably still add the binaries to version control so that you can reproduce and build historical versions of your code. + +The folder and workspace structure you should use to store your third-party binaries depends on the way your solutions depend on these libraries. + +### Add the binaries within your folder or branch structure + +If you place your third-party binaries in the same parent folder that contains your solution folders, then all your code projects in all solutions can reference the libraries with the same relative path. + +For example, a team uses this folder structure: + +![Library folder within the main parent folder](_img/add-files-server/IC591735.png) +Every code project can then reference the libraries folder with the following relative path: `../../Lib` + +If, later in your project, your team needs to isolate separate efforts that require different versions of the binaries, you can branch the library folder along with your solution folder. + +For example, Version 1 an app leverages Version 1 of a library. As some developers on the Data Access team work on the next version, they leverage Version 2. But the other teams are not yet ready to upgrade. You can use branches to manage this kind of situation. + +![Library folder within a branch structure](_img/add-files-server/IC581098.png) + +### Use a workspace to map in the binaries + +Some companies must manage more complicated dependencies on third-party libraries. For example, multiple team projects contain solutions with different dependencies on a common set of libraries. In cases like this, you can store your third-party libraries in a dedicated team project. Contributors to the various team projects map in the folders that contain the libraries they need. + +For example, FabrikamFiber puts the following team project, branch, and folder structure in place: + +![Libraries stored in a dedicated team project](_img/add-files-server/IC579087.png) + +Raisa sets up her dev machine with two workspaces for two different efforts, each of which map in the libraries she needs: + +![Workspaces map in the libraries](_img/add-files-server/IC579088.png) + +<a name="tfignore"></a> + +## Customize which files are ignored by version control + +By default certain types of files (for example, .dll files) are ignored by version control. As a result: + +- When you add ignored files to folders that are mapped in a [local workspace](decide-between-using-local-server-workspace.md), they do not appear in the **Pending Changes** page in Team Explorer. + +- When you try to add ignored files using the Add to Source Control dialog box (for example by dragging them into Source Control Explorer), they automatically appear in the **Excluded items** tab. + +You can configure which kinds of files are ignored by placing text file called **.tfignore** in the folder where you want rules to apply. The effects of the .tfignore file are recursive. However, you can create .tfignore files in sub-folders to override the effects of a .tfignore file in a parent folder. + +### .tfignore file rules + +The following rules apply to a .tfignore file: + +- `#` begins a comment line + +- The `*` and `?` wildcards are supported. + +- A filespec is recursive unless prefixed by the `\` character. + +- `!` negates a filespec (files that match the pattern are not ignored) + +### .tfignore file example + + ###################################### + # Ignore .cpp files in the ProjA sub-folder and all its subfolders + ProjA\*.cpp + # + # Ignore .txt files in this folder + \*.txt + # + # Ignore .xml files in this folder and all its sub-folders + *.xml + # + # Ignore all files in the Temp sub-folder + \Temp + # + # Do not ignore .dll files in this folder nor in any of its sub-folders + !*.dll + +### Create and use a .tfignore file + +While you can manually create a .tfignore text file using the above rules, you can also automatically generate one when the **Pending Changes** page has detected a change. + +>[!IMPORTANT] +> This only applies when using a [local workspace](decide-between-using-local-server-workspace.md). Files changed when working in a server workspace will check in without showing as a pending +> change in Team Explorer. + +### To automatically generate a .tfignore file + +1. In the **Pending Changes** page, in the **Excluded Changes** section, select the **Detected** link. + + The **Promote Candidate Changes** dialog box appears. + +2. Select a file, open its context menu, and choose **Ignore this local item**, **Ignore by extension**, **Ignore by file name**, or **Ignore by folder**. + +3. Choose **OK** or **Cancel** to close the **Promote Candidate Changes** dialog box. + +4. A .tfignore file appears in the **Included Changes** section of the **Pending Changes** page. You can open this file and modify it to meet your needs. + +The .tfignore file is automatically added as an included pending change so that the rules you have created will apply to each team member who gets the file. + +## Work from the command prompt + +- [Add command](add-command.md) Upload files from the workspace on your dev machine to your server. + +## See Also + +#### Other Resources + + [Decide between using a local or a server workspace](decide-between-using-local-server-workspace.md) diff --git a/docs/tfvc/administering-team-foundation-version-control.md b/docs/tfvc/administering-team-foundation-version-control.md new file mode 100644 index 00000000000..782db2ac0d5 --- /dev/null +++ b/docs/tfvc/administering-team-foundation-version-control.md @@ -0,0 +1,46 @@ +--- +title: Administering Team Foundation Version Control +description: Administering Team Foundation Version Control +ms.assetid: 0d96b6d2-f00a-4d28-98b9-83fe75cde284 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Administering Team Foundation Version Control + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Topics in this section describe how to complete common administrative version control tasks using Team Foundation. +## In This Section +[Configure Check-Out Settings](configure-check-out-settings.md) +Explains how to configure source control check-out settings. + +[Managing File Types](../tfs-server/admin/manage-file-types.md) +Describes how to add, edit, and remove file type extensions associated with Team Foundation version control check-ins. + +[Set and Enforce Quality Gates](set-enforce-quality-gates.md) +Describes the purpose of check-in policies and notes, and how to customize them. + +[Control Access to Team Foundation Version Control](control-access-team-foundation-version-control.md) +Explains the steps required to add users and groups to Team Foundation version control. + +[Remove Access to Version Control Files](remove-access-version-control-files.md) +Describes how to remove access to a file under version control. + +[Undo Changes in Another User's Workspace](undo-changes-another-user-workspace.md) +Describes how to undo pending changes in another user's workspace. + +[Clean Up Files When Users Leave](clean-up-files-when-users-leave.md) +Explains how to dispose of obsolete files. + +[Destroy Version Controlled Files](destroy-version-controlled-files.md) +Describes how to destroy files and folders. + +[Migrate from Visual SourceSafe](https://msdn.microsoft.com/library/ms253060) +Explains how to use the Team Foundation VSSConverter command-line tool to migrate projects, files, version history, labels, and user information from your Microsoft Visual SourceSafe 2005 database to Team Foundation version control. +## Reference +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) + diff --git a/docs/tfvc/associate-file-type-file-comparison-tool.md b/docs/tfvc/associate-file-type-file-comparison-tool.md new file mode 100644 index 00000000000..d56208d06a3 --- /dev/null +++ b/docs/tfvc/associate-file-type-file-comparison-tool.md @@ -0,0 +1,74 @@ +--- +title: Associate a file type with a file-comparison tool +description: Associate a file type with a file-comparison tool +ms.assetid: 3cda923d-7bd8-4ff7-a071-03d8cf60d509 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Associate a file type with a file-comparison tool + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +You can compare text files by using the default file-comparison tool integrated with Visual Studio, the [Diff window](compare-files.md). However, you can, for file types that you specify, enable the file-comparison tool that you prefer to use. You can use any comparison tool that supports, as command-line arguments, the full paths of the two files that you want to compare. + +**Required Permissions** +To perform this procedure, you must be a member of the **Administrators** or **Users** security group on the computer where Visual Studio is installed. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To associate a file type with a third-party compare tool + +1. Perform either of the following sets of steps. + 1. In Visual Studio, on the menu bar, choose **Tools**, **Options**. + 2. In the **Options** dialog box, expand **Source Control**, choose **Visual Studio Team Foundation Server**, and then choose **Configure User Tools**. + --or-- + 1. In Windows, choose **Start**, **All Programs**, **Microsoft Visual Studio 2012**, **Visual Studio Tools**, **Developer Command Prompt **. + 2. Type **tf diff /configure**. +2. In the **Configure User Tools** dialog box, choose **Add**. + + The **Configure Tool** dialog box appears. + +3. In the **Extension** box, specify the extension (for example, .cpp) that you want to associate with your tool. + + >**Tip:** + >Specify `.*` if you want to associate all types of files with your tool. +4. In the **Operation** list, choose **Compare**. +5. In the **Command** box, either type the path and name of your tool, or choose the ellipses (**…**) to locate and specify it. The result should resemble the following example: + + C:\Program Files\OtherDiff\otherdiff.exe + +6. In the **Arguments** box, type any arguments that your tool requires: + - **%1**: The path to the source file. + - **%2**: The path to the target file. + - **%5**: The options that the user specified by using the **/option** option of the Difference command. For more information, see [Difference Command](difference-command.md). + - **%6**: Label ("friendly name") of the source file. + - **%7**: Label ("friendly name") of the target file. + + >**Tip:** + >For information about frequently used external tools and the arguments that they require, see the following page on the Microsoft website: [diff/merge configuration in Team Foundation - common Command and Argument values](http://go.microsoft.com/fwlink/?LinkID=200171). + + **Use white space to delimit the arguments.** + For example, you might specify the following syntax to compare two files: + + %1 %2 + + **Use quotation marks to pass white space or quotation marks to the tool.** + If an argument includes one or more spaces, you must enclose it in quotation marks (""). If an argument contains one or more quotation marks, you must add another quotation mark immediately after any quotation mark in the argument. For example, you could specify the following argument: + + "This "" embeds a double quote" + + **Pass labels ("friendly names") to the tool.** + If your tool supports displaying a label (a "friendly name"), such as **c:\\workspace\\test\\MyWindow.xaml.cs;C5 (server) 4/26/2010 1:32 PM**, you can include the `%6` and `%7` tokens to pass label values to the tool. If you do not specify these tokens, the tool may show names of temporary files, which can be difficult to read. + + For example, you might specify the following syntax to display labels. + + %1 /title1=%6 %2 /title2=%7 + + >**Note:** + >This capability is not related to version-control labels, which you apply to specific versions of items in version control, as described in [Use labels to take a snapshot of your files](use-labels-take-snapshot-your-files.md). + +7. In the **Configure Tool** dialog box, choose **OK**. +8. If you want to specify more types of files, repeat steps 4−9. +9. In the **Configure User Tools** dialog box, choose **OK**. diff --git a/docs/tfvc/associate-file-type-merge-tool.md b/docs/tfvc/associate-file-type-merge-tool.md new file mode 100644 index 00000000000..2c2002fb5ed --- /dev/null +++ b/docs/tfvc/associate-file-type-merge-tool.md @@ -0,0 +1,54 @@ +--- +title: Associate a file type with a merge tool +description: Associate a file type with a merge tool +ms.assetid: be153b5c-b26d-4bfe-aec2-fd23156ead68 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Associate a file type with a merge tool + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +The diff/merge tool included in Team Foundation opens when the user tries to compare two files (or two versions of a file), or when the user elects to perform a manual merge of a file that has conflicting changes. + +The tool is compatible with text and XML based files; however, should you want to associate a specific file type with a third-party merging or diff tool, use the procedure that is described in the following procedure. + +**Required Permissions** + +To perform this procedure, you must be a member of the **Administrators** or **Users** security group on the computer where Visual Studio is installed. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To associate a file type with a third-party merge tool + +1. From the **Tools** menu, click **Options**. + +2. In the **Options** dialog box, open **Source Control**, expand it, and then click **Visual Studio Team Foundation Server**. + +3. Click **Configure User Tools**. + +4. In the **Configure User Tools** dialog box, click **Add**. + +5. In **Configure Tools** dialog box, specify the extension you want to associate with your tool in the **Extension** box, for example .cpp or \* for all files. + +6. Use the **Operation** drop-down list to click **Merge**. + +7. In the **Command** text box, either type the path and name of the tool tool, or use the ellipses to browse to it. + +8. In the **Arguments** text box, type any arguments that your tool requires. + + The arrow button shows a list of available variables that the diff/resolve command will fill in before passing them to the configured tool as specified in the arguments box. Any other text in the argument box will be passed to the tool directly. + +9. Click **OK**. + +10. Repeat steps 4 - 9 to add more file type extensions. + +11. Click **OK**. + +## See Also + +#### Other Resources + + [Merge folders and files](merge-folders-files.md) diff --git a/docs/tfvc/branch-command.md b/docs/tfvc/branch-command.md new file mode 100644 index 00000000000..ff88ea181c2 --- /dev/null +++ b/docs/tfvc/branch-command.md @@ -0,0 +1,116 @@ +--- +title: Branch Command +description: Branch Command +ms.assetid: 2e075024-9830-4373-a3d4-ac6a194d133f +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Branch Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +The **branch** command copies an item or set of items, including metadata and version control history, from one location to another in the Team Foundation version control server and in the local workspace. + +> [!NOTE] +> The results of this command are not reflected in the Team Foundation version control server until you perform a check-in operation. For more information, see [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411). + +**Required Permissions** + +To use the **branch** command, you must have the **Read** permission for the source item and the **Check out** and **Merge** permissions for the target folder set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf branch olditem newitem [/version:versionspec] [/noget] [/lock:(none|checkin|checkout)] [/noprompt] [/silent] [/checkin] [/comment:("comment"|@commentfile)] [/author:authorname] [/login:username, [password]] +## Parameters + +|**Argument**|**Description**| +|---|---| +|*olditem*|Specifies the name of the source file or folder being branched. The *olditem* may also contain version information in the format *item;version*.| +|*newitem*|Specifies the name of the destination file or folder or the parent folder for the destination. If *newitem* already exists and is a Team Foundation version control server folder, Team Foundation creates the branched items within it. Otherwise, *newitem* specifies the name of the destination file or folder. Conflicts can occur during check-in if the destination already exists.| +|*versionspec*|Provides a value for the **/version** option. For more information about how Team Foundation parses a version specification to determine which items are within its scope, see [Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be).| +|*comment*|Provides a comment about the branch.| +|*@commentfile*|Specifies the path of a file that contains the comment that is used for the branch.| +|*authorname*|The user-provided value for the **/author** option.| +|*username*|Provides a value to the **/login** option. You can specify a username value as either *DOMAIN*\*UserName* or *UserName*.| + +<table><thead> +<tr><th><p><strong>Option</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><strong>/version</strong></p></td> + <td><p>The version of the item at which you want to create the branch. You can specify a version by:</p><ul><li><p>Date/time (D10/20/2005)</p></li><li><p>Changeset number (C1256)</p></li><li><p>Label (Lmylabel)</p></li><li><p>Latest version (T)</p></li><li><p>Workspace (Wworkspacename)</p></li></ul><p>If no version is provided, Team Foundation uses the following logic to decide which version of the item to copy to the new branch:</p><ul><li><p>If a Team Foundation version control server path is specified, then Team Foundation branches the item at the latest Team Foundation version control server version. For example, <strong>tf branch $/projects/help.cs</strong> uses the server version.</p></li><li><p>If a local path is specified for the source, Team Foundation uses the local, workspace version to create the new branch. For example, <strong>tf branch C:\314.cs</strong> uses the local workspace version.</p></li></ul><p>If you branch a file whose workspace version is older than the latest version in the Team Foundation version control server, the file is branched at the older version.</p></td></tr> +<tr> + <td><p><strong>/lock</strong></p></td> + <td><p>Prevents other users from checking in or checking out items until you check in your pending branch and associated changes. For more information, see <a href="understand-lock-types.md">Understanding Lock Types</a>.</p><p>Lock Options:</p><ul><li><p><strong>None</strong></p><p>Default. No lock is applied. If a lock exists on the file that you are creating a branch for, this option removes it.</p></li><li><p><strong>Checkin</strong></p><p>Other users can check out the specified items but they cannot check in revisions to locked files until you release the lock by performing a check-in. If any other users have locked any one of the specified items, the lock operation fails.</p></li><li><p><strong>Checkout</strong></p><p>Prevents other users from checking in or checking out any one of the specified items until you release the lock by performing a check-in. If any other users have locked any one of the specified items, the lock operation fails.</p></li></ul></td></tr> +<tr> + <td><p><strong>/noget</strong></p></td> + <td><p>If this option is specified, local copies of the files and folders in the new branch are not created in the local workspace. However, local copies will be retrieved into the workspace the next time that you perform a recursive Get operation.</p><div class="alert"><div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"><div class="mtps-row"><strong>Note:</strong></div><div class="mtps-row"> You can prevent items, such as the contents of an /images folder, from being retrieved to your workspace during recursive Get and Get Latest operations by cloaking a workspace folder. For more information, see <a href="workfold-command.md">Workfold Command</a>. +</div></div></div></td></tr> +<tr> + <td><p><strong>/noprompt</strong></p></td> + <td><p>Suppresses any prompts for input from you.</p></td></tr> +<tr> + <td><p><strong>/silent</strong></p></td> + <td><p>Implies <strong>/noget</strong> and specifies that output is not written to the Command Prompt window when you create a branch.</p></td></tr> +<tr> + <td><p><strong>/checkin</strong></p></td> + <td><p>Creates and checks in the branch to the server in one operation. This option does not create any pending changes in the local workspace.</p></td></tr> +<tr> + <td><p><strong>/comment</strong></p></td> + <td><p>Adds a comment to the new branch. This option is used only with the <strong>/checkin</strong> option.</p></td></tr> +<tr> + <td><p><strong>/author</strong></p></td> + <td><p>Identifies the author of the new branch. This option is used only with the <strong>/checkin</strong> option.</p></td></tr></tbody> +</table> + +## Remarks +If you specify a local path such as c:\\00101 but do not specify a *versionspec*, Team Foundation uses the local workspace version as the basis for creating the new branch. + +However, if you specify a server path such as $/00101/\*.cs and do not specify a *versionspec*, Team Foundation uses the latest Team Foundation version control server version as the basis for creating the new branch instead. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example creates a branch file that contains the latest workspace version of 314.cs, names it "314\_branch", and saves it to the current directory on disk and also to the Team Foundation version control server folder to which it maps. + + c:\projects>tf branch 314.cs 314_branch + +The following example copies all the files without pending edits in the workspace version of 314.cs from its current Team Foundation version control server folder into the testdata Team Foundation version control server folder and from the current directory on disk to the working folder that maps to the testdata Team Foundation version control server folder. + + c:\projects>tf branch C:\314.cs $/testdata + +The following example copies all the files without pending edits in the current workspace version of the testfiles folder and the files it contains for all items from its current Team Foundation version control server folder into the testfiles\_branch Team Foundation version control server folder and from c:\\testfiles into the local folder that maps to the testfiles\_branch Team Foundation version control server folder. + + c:\projects>tf branch C:\testfiles $/testfiles_branch + +The following example creates a branch of 314.cs as it existed in changeset \#4 for the file. In the working folder on disk, as in the Team Foundation version control server, a branch file titled csharp\_branch is created. + + c:\projects>tf branch C:\314.cs;C4 csharp_branch + +The following example creates a new branch of 314.cs as it was on 12/12/03. In the working folder on disk as in the Team Foundation version control server, a branch file titled 314\_branch is created. + + c:\projects>tf branch 314.cs;D12/12/03 314_branch + +The following example branches the version of 314.cs to which the "Beta1" label was applied, names it "Beta1branch," and saves it to the current directory on disk in addition to the Team Foundation version control server folder to which the current directory maps. + + c:\projects>tf branch 314.cs;LBeta1 314_Beta1branch + +## See Also + +#### Tasks + +[Branch Folders and Files](branch-folders-files.md) + +#### Reference + +[Branches Command](branches-command.md) + +[Merge Command](merge-command.md) + +#### Concepts + +[Working with Changesets](find-view-changesets.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/branch-folders-files.md b/docs/tfvc/branch-folders-files.md new file mode 100644 index 00000000000..c3ab3c82184 --- /dev/null +++ b/docs/tfvc/branch-folders-files.md @@ -0,0 +1,186 @@ +--- +title: Branch folders and files +description: Branch folders and files +ms.assetid: 437854e0-3f64-4d68-8e18-748ea7f889aa +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: sdanie +ms.date: 05/12/2017 +--- + +# Branch folders and files + +**VSTS | TFS 2017 | TFS 2015 | Visual Studio 2017, 2015, and 2013** + +You can use branches to accomplish the following goals: +- Manage concurrent work by multiple teams on the same codebase +- Isolate risks that are introduced by different sets of changes to the codebase +- Take snapshots and then support subsequent isolated changes (for example, to create a release branch) + +For example, the following illustration shows how the DinnerNow company developed a branch structure to meet its business needs. + +The following screenshot shows the DinnerNow branch structure in the Hierarchy window. + +![Hierarchy window](_img/branch-folders-files/IC452318.png) + +Feature Team A and Feature Team B each do their work in separate branches. When the teams are ready to integrate their work, they merge their branches into the Dev branch. When the builds from the Dev branch are stable and ready to test, the teams merge the Dev branch into the Test branch. + +As each version is released, the Main branch is branched into a new version branch, such as the Version1 branch and the Version2 branch. By following this strategy, the company can enhance or fix each past version of the product separately if necessary. + +You can perform a branching operation by using either **Source Control Explorer**, as this topic demonstrates, or the Branch command at a command prompt. For more information, see [Branch Command](branch-command.md). + +>**Tip:** +>Branching is an important and powerful technique for creating a parallel set of versions of your files. However, using branches can add complexity and cost to your project. For example, when you merge two branches, you may have to resolve conflicts. +> +>Before you create a branch, you should consider whether you can better meet your needs by applying a label. By applying a label, you can quickly and easily take a snapshot of the state of your files so that you can then later retrieve or build the files in that state. For more information, see [Use labels to take a snapshot of your files](use-labels-take-snapshot-your-files.md). + +## Convert a Folder to a Branch + +The release of Visual Studio Team Foundation Server 2010 began a distinction between branches and folders. The following illustration shows the top-level of the DinnerNow folder structure: + +DinnerNow folder structure in Source Control Explorer + +![Folder structure in Source Control Explorer](_img/branch-folders-files/IC277127.png) + +As the illustration shows, you can still use folders to organize branches within a team project's version control hierarchy. However, folders and branches have a different appearance and different capabilities. When you right-click a folder or branch and click **Properties**, you display different information and different functionality. + +When you perform branch operations, branches have important advantages over folders. Branches support version control features that provide extra visibility into your branch structure and into where your changesets have merged. (For more information, see the links in the [See Also](#see-also) section later in this topic.) + +Although you can still branch and merge among folders, the best practice for your team is to branch and merge only among branches. The following procedure explains how to convert a folder to a branch. + +**Required Permissions** +To perform the following procedure, your **Manage branch** permission must be set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To convert a folder to a branch + +1. In **Source Control Explorer**, make sure that the folder that you want to convert exists on the server. + +2. If the pending addition icon (![TFSC Pending Addition Status Icon](_img/branch-folders-files/IC106108.gif)) appears next to the folder, right-click the folder, and then click **Check In Pending Changes**. + +3. Right-click the folder that you want to convert, point to **Branching and Merging**, and then click **Convert to Branch**. + + The **Convert Folder to Branch** dialog box appears. + + >[!IMPORTANT] + >If you are converting a folder that you have already branched, you should probably select the **Recursively perform this conversion for all branched child folders** check box. This option also converts to branches all folders that were branched from this one folder. + > + > + +4. (Optional) In the **Owner** field, type the name of the person who owns this branch. + + >[!NOTE] + >The Owner field is for information only. Being named in the Owner field grants no additional permissions. + > + > + +5. (Optional) In the **Description** field, type information that you think would be helpful to other team members who must use this branch or understand its purpose. + +6. Click **Convert**. + +>[!IMPORTANT] +>You cannot nest branches; therefore, you cannot convert any folder to a branch if it either contains a branch or is contained by a branch. For example, the following illustration shows how neither the parent nor the child of the **FeatureTeamA** branch can be converted to a branch. +> +>![Nested branches are not allowed](_img/branch-folders-files/IC272396.png) +> +> + +After you have converted a folder to a branch, you can convert it back to a folder if your team decides to change your branch structure. + +### To convert a branch to a folder + +1. In **Source Control Explorer**, click the branch that you want to convert. +2. On the **File** menu, point to **Source Control**, point to **Branching and Merging**, and then click **Convert to Folder**. +3. When the **Convert Branch Back To Folder** message appears, click **Yes**. + +## Branch a branch + +After you have converted a folder to a branch, you can then create other branches from that branch. The following procedure shows how you can use the graphical user interface of Visual Studio to branch a branch. (For information about how to perform this task at the command prompt, see [Branch Command](branch-command.md).) + +**Required Permissions** +To perform this procedure, your **Manage branch** permission must be set to **Allow** for the paths to the source and target branches. Your **Merge** permission for the path of target branch must set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To branch a branch + +1. In **Source Control Explorer**, right-click the branch that you want to branch, point to **Branching and Merging**, and then click **Branch**. + + The **Branch from** dialog box appears. + +2. In the **Target Branch Name** box, specify the path of the new branch. + +3. (Optional) In the **Branch from version** section, click one of the following options in the **By** list: + + - If you click **Latest Version**, the branch is created for the most recent version in version control. + + - If you click **Changeset**, you can specify the number of the changeset in the **Changeset** box. As an alternative, click the ellipses (**…**) to open the **Find Changesets** dialog box. + + For more information, see [Find and view changesets](find-view-changesets.md). + + - If you click **Date**, you can specify a date in the **Date** box. + +4. Click **Branch**. + + The branch is created and appears in **Source Control Explorer**. + + >[!NOTE] + >Unlike most version control operations, this operation does not generate a pending change. Rather, the operation is completed immediately and you cannot undo it. + > + > + +## Branch a folder or file + +Although you can branch a folder or file directly, we recommend that you avoid it. Otherwise, you will not be able to [view your branch hierarchy](view-branch-hierarchy-team-project.md) or [track your changesets](view-where-when-changesets-have-been-merged.md). The best practice is to branch and merge only among branches, as described earlier in this topic. + +But if you have a special need to branch a folder or file, you can use the following procedure to perform this task. (For information about how to perform this task at the command prompt, see [Branch Command](branch-command.md).) + +**Required Permissions** +To perform this procedure, your **Check out** permission and your **Merge** permission for the target path must be set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To branch a folder or file + +1. In **Source Control Explorer**, right-click the folder or file that you want to branch, point to **Branching and Merging**, and then click **Branch**. + + The **Branch** dialog box appears. + +2. In the **Target** box, modify the location and name for the new branch. + + You can also click **Browse** to specify a target. + +3. In the **Branch from version** section, click one of the following options in the **By** list: + + - If you click **Latest Version**, the branch is created for the most recent version in version control. + + - If you click **Changeset**, you can specify the number of the changeset in the **Changeset** box. As an alternative, you can click the ellipses (**…**) to open the **Find Changesets** dialog box. + + For more information, see [Find and view changesets](find-view-changesets.md). + + - If you click **Date**, you can specify a date in the **Date** box. + + - If you click **Label**, you can type the label name in the **Label** box. As an alternative, you can click the ellipses (**…**) to open the **Find Label** dialog box. + + For more information, see [Use labels to take a snapshot of your files](use-labels-take-snapshot-your-files.md). + + - If you click **Workspace Version**, the branch is created for the version in your workspace. + +4. (Optional) Select the **Create local working copies for the new branch** check box to create a copy of the version-controlled item on the local workspace. Clear the check box if you do not need a local copy and you want to improve performance by not downloading many items to your computer. + +5. Click **OK**. + + The branch is created and appears in **Source Control Explorer**. + + >[!NOTE] + >A **Browse For Folder** window appears if you selected the **Create local working copies for the new branch** check box and the local folder that you specified is not mapped in the current workspace. Browse for a folder or click **Make New Folder**, specify a folder to synchronize to the version-controlled items, and then click **OK**. + > + > + +## See Also + +#### Other Resources + + [Use Source Control Explorer to manage files under version control](use-source-control-explorer-manage-files-under-version-control.md) + [View where and when changesets have been merged](view-where-when-changesets-have-been-merged.md) + [View the branch hierarchy of a team project](view-branch-hierarchy-team-project.md) + [Branch Command](branch-command.md) + [Branches Command](branches-command.md) + [Branch strategically](branch-strategically.md) +[Visual Studio TFS Branching Guide](http://go.microsoft.com/fwlink/?LinkId=191400) diff --git a/docs/tfvc/branch-strategically.md b/docs/tfvc/branch-strategically.md new file mode 100644 index 00000000000..8b176976f62 --- /dev/null +++ b/docs/tfvc/branch-strategically.md @@ -0,0 +1,76 @@ +--- +title: Branch strategically +description: Branch strategically +ms.assetid: f586f036-a63f-40f9-8143-732e1d01323f +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Branch strategically + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Source code is an important asset in your development effort. But it can be a challenge to effectively manage and evolve source files when multiple developers work concurrently on file updates. You can use a version control system to store source code in shared repositories, to isolate parallel development efforts, to integrate code changes, and to recover previous file versions. A key element in version control is branching that enables simultaneous development. If you branch strategically, you can maintain the order and consistency of multiple versions of your software. + +Team Foundation provides a flexible and reliable version control system. You can use Team Foundation version control to manage multiple revisions during development of source code, documents, work items, and other critical information that is worked on by your team.  + +## How does your team manage code while it introduces multiple changes simultaneously through several project releases? + +When you work with a version control system, you must consider how to set up a branch structure. You can create a branch by mirroring the source code file. Then you can change the branch without affecting the source. For example, as the branch structure in the following illustration shows, the MAIN branch contains completed functionality that has passed integration tests, and the DEVELOPMENT branch contains the code that is under construction. When a new functionality in the DEVELOPMENT branch is completed and can pass integration tests, you can promote the code from the DEVELOPMENT branch to the MAIN branch. This process is referred to as reverse integration. Conversely, if you merge the code from the MAIN branch to the DEVELOPMENT branch, the process is referred to as forward integration. + +![Main Branch](_img/branch-strategically/IC372280.png) + For more information about how to create and merge code branches, see the following page on the CodePlex Web site: [Team Foundation Server Branching Guide 2.0](http://go.microsoft.com/fwlink/?LinkId=178567). + +Branching and merging entail the following principles: + +1. Each branch must have a defined policy about how to integrate code into this branch. For example, in the branch structure of the previous illustration, you can assign a team member to own and manage the MAIN branch. This member is responsible for performing the initial branch operation, reverse integrating changes from the DEVELOPMENT branch to the MAIN branch, and forward integrating changes from the MAIN branch to the DEVELOPMENT branch. Forward integration is important when the MAIN branch also integrates changes from other branches. + +2. The MAIN branch must contain code that has passed integration tests so that it is always ready for a release. + +3. The DEVELOPMENT (or work) branch constantly evolves because team members check in changes periodically. + +4. Labels are snapshots of the files in a branch at a specific time. + + For more information, see [Use labels to take a snapshot of your files](use-labels-take-snapshot-your-files.md). + +Team Foundation Build allows you to choose from several types of builds for your branches: manual, continuous, gated, rolling, and scheduled. We recommend that the MAIN branch has a gated check-in build type. This means that the DEVELOPMENT branch must pass all requirements for the MAIN branch before you can commit a reverse integration. The DEVELOPMENT branch should run a continuous build type because your team must know as soon as possible when a new check-in affects the DEVELOPMENT branch. + +## How often should your team reverse integrate and forward integrate? + +As shown in the following illustration, reverse integration and forward integration should occur at least when you complete a user story. Although each team might define completeness differently, completion of a user story generally means that you complete both the functionality and the corresponding unit tests. You can reverse integrate to the MAIN branch only after unit tests have verified the stability of the DEVELOPMENT branch. + +![Branch across two sprints](_img/branch-strategically/IC378600.png) +If you have more than one work (DEVELOPMENT) branch, forward integration to all work branches should occur as soon as any branch integrates into the MAIN branch. Because the MAIN branch is kept stable, forward integration is safe. Conflicts or failures at the work branches might occur because you cannot guarantee that the work branches are stable. + +It is important that you resolve all conflicts as soon as possible. By using a gated check-in for the MAIN branch, you help make the reverse integration much easier because quality gates help avoid conflicts or errors in the MAIN branch. For more information, see [Check in to a folder that is controlled by a gated check-in build process](check-folder-controlled-by-gated-check-build-process.md). + +## How does your team manage sources that implement different user stories? + +As the following illustration shows, you can check in changes to a work branch periodically to complete a user story. You can implement multiple user stories in the same branch at the same time. However, you can reverse integrate to the MAIN branch only when you complete all the in-progress work. It is recommended that you group user stories by similar size because you do not want a large user story to block the integration of many small ones. You can split the two sets of user stories into two branches. + +![Check-in Completes User story](_img/branch-strategically/IC378601.png) + +## When should the team add a branch? + +You should create branches in the following situations: + +- When you must release code on a different schedule/cycle than the existing branches. + +- When your code requires a different branch policy. If you create a new branch that has the new policy, you can add strategic value to your project. + +- When functionality is released to a customer and your team plans to make changes that do not affect the planned release cycle. + +You should not create a branching for each user story because it creates a high integration cost. Although makes branching easy, the overhead of managing branches can become significant if you have many branches. + +## How does the team manage releases from the version control perspective? + +Your team should be able to release code at the end of any sprint. By using Team Foundation Server, you can label a branch to take a snapshot of the code at a specific point in time. As the following illustration shows, you can label the MAIN branch for a release. This lets you return the branch to its state at this point. + +![Label a branch to take a snapshot of the code](_img/branch-strategically/IC372284.png) +Because you must implement updates on releases, creating a branch for a release helps your team continue to work independently on the next sprint without creating conflicts with future releases. The following illustration shows a branch that contains code for an update and that is reverse integrated into the MAIN branch after a release at the end of the second sprint. + +![Reverse integrate a branch that contains update](_img/branch-strategically/IC379434.png) +When you create a branch for a release, you should create that branch from the MAIN branch, which is the most stable. If you branch for release from a work branch, it can cause integration challenges because the stability of work branches is not guaranteed. diff --git a/docs/tfvc/branches-command.md b/docs/tfvc/branches-command.md new file mode 100644 index 00000000000..3190ff311b3 --- /dev/null +++ b/docs/tfvc/branches-command.md @@ -0,0 +1,118 @@ +--- +title: Branches Command +description: Branches Command +ms.assetid: dae78c90-c65a-444d-96cb-84027b91ad4a +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Branches Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays the history of a branch for a specified file or folder. + +**Required Permissions** + +To use the **branches** command, your **Read** permission must be set to **Allow** for the item and any branches to view their history. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf branches itemspec [/version:versionspec] [/collection:TeamProjectCollectionUrl] [/login:username,[password]] + +## Parameters<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><i>Itemspec</i></p></td> +<td><p>Identifies the file or folder that contains the branch you want to examine. For more information about how Team Foundation parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/4y2ash30">Command-Line Options</a>.</p></td> +</tr> +<tr> +<td><p><i>Versionspec</i></p></td> +<td><p>Provides a value for the <strong>/version</strong> option. For more information about how Team Foundation parses a version specification to determine which items are within its scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p></td> +</tr> +<tr> +<td><p><i>TeamProjectCollectionUrl</i></p></td> +<td><p>The URL of the team project collection that contains a file or folder in a branch for which you want to display the history (for example, http://myserver:8080/tfs/DefaultCollection).</p></td> +</tr> +<tr> +<td><p><i>username</i></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <i>Domain</i>\<i>UserName</i> or <i>UserName</i>.</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p><strong>Option</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/version</strong></p></td> +<td><p>Specifies the version for the path. This option is rarely used.</p></td> +</tr> +<tr> +<td><p><strong>/collection</strong></p></td> +<td><p>Specifies the team project collection.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td> +</tr> +</tbody> +</table> +## Remarks +The branches command tells you when an item has been the source or destination of a branch operation. The output displays the parent branch for each version. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +Examples +----------------------------------------------------------------------------- + + +The following example displays branch history for the version-controlled file C:\\314.cs. + + c:\projects>tf branches 314.cs + +The following example displays branch history for the header.h item in the Team Foundation version control server. + + c:\projects>tf branches $/applications/header.h + +The following example displays the branch history of the folder $/rel30/math. + + c:\projects>tf branches $/rel30/math/ + +The following example displays the branch history for WindowsApplication13-branch. The results indicate the history for the specified branch by using angle brackets. + + D:\projects\ws1>tf branches WindowsApplication13-branch + $/jun16-1/WindowsApplication13 + >>      $/jun16-1/WindowsApplication13-branch   Branched from version 3 << +                 $/jun16-1/WindowsApplication13-branch-prime     Branched from version 5 +         $/jun16-1/WindowsApplication13-branch2  Branched from version 3 + +## See Also + +#### Reference + +[Branch Command](branch-command.md) + +[Merges Command](merges-command.md) + +#### Concepts + +[Informational Commands](https://msdn.microsoft.com/library/ms181450) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) + +[Branching and Merging](use-branches-isolate-risk-team-foundation-version-control.md) diff --git a/docs/tfvc/branching-strategies-with-tfvc.md b/docs/tfvc/branching-strategies-with-tfvc.md new file mode 100644 index 00000000000..3943f7743ca --- /dev/null +++ b/docs/tfvc/branching-strategies-with-tfvc.md @@ -0,0 +1,119 @@ +--- +title: Version Control - Branching strategies with TFVC +description: Explore branching strategies and explain how to decide amongst them with Team Foundation Version Control +ms.assetid: C9659CD5-CC5D-4522-9DB7-B887F361819F +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: willys +ms.date: 09/09/2017 +ms.author: willys +author: willys +--- + +# Branching strategies with TFVC + +Do you plan to adopt Team Foundation Version Control ([TFVC](index.md)), and are wondering how to best use branches? We will not delve deep into branching features, as they are well documented in the product [documentation](use-branches-isolate-risk-team-foundation-version-control.md) and [guidance](https://blogs.msdn.microsoft.com/visualstudioalmrangers/2015/04/22/library-of-tooling-and-guidance-solutions-aka-msvsarsolutions/), but will explore a few common branching strategies to help you make the right decision. + +Unlike Git branches, which are repository scoped, TFVC branches are path scoped and not as light-weight. Set your bar for creating branches high, to avoid the management it takes to keep track of branches, storage resources and resolution of merge conflicts. Consider branching only if you have multiple teams working on the same codebase, or need isolation for development or release. + +## Main Only + +The **Main Only** strategy can be folder based or with the **main** folder [converted to a Branch](branch-folders-files.md), to enable additional visibility features. You commit your changes to the main branch and optionally indicate development and release milestones with labels. + +![Main Only](./_img/branching-strategies-with-tfvc/branching-scenarios-main-only.gif) + +> RISK: The mutability and lack of history with TFVC labels can add risk of change control. + +Start with the the main only branching strategy, [branch strategically](branch-strategically.md) and adopt other strategies to evolve into more complex strategies as needed. + +## Development isolation +When you need to maintain and protect a stable **main** branch, you can branch one or more **dev** branches from **main**, giving you isolation and concurrent development. Work can be isolated in development branches by feature, organization or temporary collaboration. + +![Developer Isolation](./_img/branching-strategies-with-tfvc/branching-scenarios-developer-isolation.gif) + +Changes made to **main** branch, should be forward integrated (FI) to the **dev** branch and merge conflicts resolved, before changes are reverse integrated (RI) back to **main**. To maintain the same quality bar across branches, always build and run build verification tests (BVTs) on **dev** the same way you are doing on **main**. Optionally combine this branching strategy with other strategies covered herein. + +> NOTE: With this strategy, teams are likely to keep the **dev** branch around forever, potentially building a large merge ticket history. + +## Feature isolation + +Feature isolation is a special derivation of the development isolation, allowing you to branch one or more **feature** branches from **main**, as shown, or from your **dev** branches. + +![Feature Isolation](./_img/branching-strategies-with-tfvc/Branching-Scenarios-Feature-Isolation.gif) + +When you need to work on a particular feature, it might be a good idea to create a feature branch. + +You should keep the lifetime of feature work and the associated feature branch short-lived. Forward integrate (FI) changes from the parent branch frequently, but reverse integrate (RI) back to the parent only when some agreed team criteria, for example definition of done, is met. Rollback of features on **main** can be costly and may reset testing. + +## Release isolation + +Release isolation introduces one or more **release** branches from **main**, enabling concurrent release management, multiple and parallel releases, and accurate snapshots of your codebase at release time. + +![Release Isolation](./_img/branching-strategies-with-tfvc/branching-scenarios-release-isolation.gif) + +When your codebase has the first release candidate or the release is ready to be locked down, it might be a good time to create a new branch for the release. + +Never forward integrate (FI) from **main** and lock release branches using access permissions, to prevent unintended modifications to a **release**. Patches and hot fixes made to the **release** branch can be reverse integrated (RI) back to the **main** branch. + +> NOTE: None of the branching scenarios are immutable, which is why you notice emergency hotfixes performed on release branches. Evolve each strategy to match your requirements, without losing sight of complexity and associated cost. + +## Servicing and Release isolation + +Servicing and Release Isolation strategy introduces **servicing** branches, enabling concurrent servicing management of service packs, and accurate snapshots of your codebase at service and release time. + +![Service Release Isolation](./_img/branching-strategies-with-tfvc/branching-scenarios-service-release-isolation.gif) + +Consider this strategy if you need a servicing model for customers to upgrade to the next major release and additional service packs per release. + +Like the release isolation, the **servicing** isolation and **release** branches are created when the release is ready to be locked down. Never forward integrate from **main** to **servicing**, or from **servicing** to **release**, and lock the **release** branch to prevent modifications. Future servicing changes can be done on the **servicing** branch. + +Create new servicing and release branches for subsequent releases if you require that level of isolation. + +## Servicing, Hotfix, Release isolation + +Although not recommended, you can continue to evolve the strategies, by introducing additional **hotfix** branches and associated release scenarios. + +![Service HotFix Release Isolation](./_img/branching-strategies-with-tfvc/branching-scenarios-service-hotfix-release-isolation.gif) + +At this point you have successfully explored a few of the common TFVC branching scenarios. You can evolve them, or investigate other strategies such as [feature toggling](https://msdn.microsoft.com/magazine/dn683796.aspx), toggling features on and off to determine whether a feature is available at run time. + +## Q&A + +### Why should branches be short-lived? + +By keeping branches short-lived, merge conflicts are kept to as few as possible. + +### Why only branch if neccessary? + +To embrace [DevOps](http://aka.ms/devops) you need to rely on automation of build, test and deployment. Change is **continuous**, frequent and merge operations more challenging as merge conflicts often require manual intervention. It is therefore recommended to avoid branching and rely on other strategies, such as feature toggling. + +### Why remove branches? + +Your goal should be get changes back into **main** as soon as possible, to mitigate long-term merge consequences. Temporary, unused and abundant branches cause confusion and overhead for the team. + +### Can a codebase be branched across team projects? + +Yes, but it is not recommended, unless teams must share source and cannot share a common process. + +### What about the code promotion strategy? + +The Code Promotion strategy feels like a relic from the waterfall development era. It is typically with long testing cycles, and separate development and testing teams. The strategy is no longer recommended. Refer to the [branching guidance](https://blogs.msdn.microsoft.com/visualstudioalmrangers/2015/04/22/library-of-tooling-and-guidance-solutions-aka-msvsarsolutions/) for more information. + +### When merging **dev** to **main** branch, why are no changes detected? + +You have likely ignored changes in previous merges, for example, using the `keep source` conflict resolution option. See [merging developement branch to main: there were no changes to merge](http://stackoverflow.com/questions/27590388/merging-developement-branch-to-main-there-were-no-changes-to-merge) for details. + +### Are there similarities between TFVC and Git branch strategies? + +The TFVC Feature Isolation branching strategy is similar to the Git [topic branches](http://www.git-scm.com/book/en/v2/Git-Branching-Branching-Workflows#Topic-Branches). + +> Authors: Jesse Houwing, Marcus Fernandez, Mike Fourie, and Willy Schaub + +*(c) 2015 Microsoft Corporation.ÿAll rights reserved.ÿThis document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* \ No newline at end of file diff --git a/docs/tfvc/changeset-command.md b/docs/tfvc/changeset-command.md new file mode 100644 index 00000000000..5c00ca579be --- /dev/null +++ b/docs/tfvc/changeset-command.md @@ -0,0 +1,139 @@ +--- +title: Changeset Command +description: Changeset Command +ms.assetid: 74d584cf-277f-41f9-b7a1-642ebab963af +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Changeset Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays information about and lets you change the attributes, such as comments and check-in notes, that are associated with a changeset. + +**Required Permissions** + +To use the **changeset** command you must have the **Read** permission set to **Allow** for any files or folders in the changeset for which you wish to display full information. The only users who can modify the notes and comments that are associated with a changeset are the users who created the changeset or a user who has the Revise other user's changes global permission. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf changeset [/comment:("comment"|@commentfile)] + [/notes:("NoteFieldName"="NoteFieldValue"|@notefile)] [/noprompt][/collection:TeamProjectCollectionUrl]] + [changesetnumber | /latest][/login:username,[password]] + +## Parameters + +| **Argument** | **Description** | +|---|---| +| *comment* | Provides a comment about the check-in. | +| *@commentfile* | Specifies a path of a file on disk that contains the comment used for the check-in. | +| *NoteFieldName=NoteFieldValue* | Sets the value of the check-in note field. You can provide multiple, semicolon-separated "field=value" expressions. | +| *@notefile* | Provides the path of a file on disk that contains check-in note field names and values in the format of "field=value" with one per line. | +| *TeamProjectCollectionUrl* | The URL of the team project collection that contains a changeset about which you want to display information or whose attributes you want to modify (for example, http://myserver:8080/tfs/DefaultCollection). | +| *username* | Provides a value to the **/user** option. You can specify this argument as either *Domain*\*UserName* or *UserName*. | +| *changesetnumber* | Identifies the changeset to be reviewed or modified. Cannot be used with **/latest**. | + +| **Option** | **Description** | +|---|---| +| **/comment** | Replaces the changeset comment that was created during the check-in process, with a new comment. | +| **/notes** | Provides one or more check-in notes to associate with the changeset. | +| **/latest** | Specifies the most recent changeset. Cannot be used with *changesetnumber.* | +| **/noprompt** | Suppresses any prompts for input from you. | +| **/collection** | Specifies the team project collection. | +| **/login** | Specifies the user name and the password to authenticate the user with Visual Studio Team Foundation Server. | + +## Remarks +A *changeset* is a set of file and folder revisions that were committed to the Team Foundation version control server as part of the same check-in event. For more information, see [Working with Changesets](find-view-changesets.md). + +You can use the **changeset** command to view the attributes of a changeset and modify its properties. You can use the History command to determine which changeset you want to obtain information about. For more information, see [History Command](history-command.md). + +For links to other Team Foundation commands that provide additional information about the items in your Team Foundation version control server and all the workspaces that map to it, see [Informational Commands](https://msdn.microsoft.com/library/ms181450). + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +## Examples + +The following example Displays detailed information about changeset 8675309 in an editable format in the **Changeset **dialog box and replaces the existing comment with "This is a new comment." + +After you press ENTER, the **Details for Changeset** *\<changeset number\>* **- Source Files** dialog box appears. Click **Save** to associate the comment with the changeset. + + c:\projects>tf changeset /comment:"This is a new comment." 8675309 + +The following example provides two check-in notes to associate with the changeset. + + c:\projects>tf changeset /notes:reviewer=Jo;Security = checked 8675309 + +The following example provides two check-in notes that include spaces in the values and names to associate with the changeset. + + c:\projects>tf changeset /notes:"Code Reviewer"="John Smith";"Security Reviewer"="Chen Yang" 8675309 + +The following example associates the check-in notes included in the file notes.txt with the changeset 8675309. + + c:\projects>tf changeset /notes:@notes.txt 8675309 + +Where the notes.txt can be in following format: + +``` +field1=value1; +``` +``` +field2=value that +``` +``` +spans multiple +``` +``` +lines; +``` +``` +field3 = value3; +``` + +The following example replaces the existing comment for changeset 8675309 and displays information about the changeset in the Command Prompt window. The example does not start the **Changeset **dialog box. + + c:\projects>tf changeset /comment:"This is an automatically generated comment." /noprompt 8675309 + +The following example displays non-editable information about changeset 8675309 in the Command Prompt window. + + c:\projects>tf changeset 8675309 /noprompt + +Sample output: + + Changeset: 8675309 + User: DOMAIN\JohnG + Date: 01/21/2004 21:03:45 + Comment: This check-in fixes issues in several features. I also refactored some items in buf.c into a new file named bif.c because buf.c was too hard to parse. + Items: + $/baz/proj/bif.c Added + $/baz/proj/buf.c Modified, Renamed + Work Items: + 34527 The "Access Denied" message is not descriptive enough. + 35628 The UI flickers when I press the '8', 'y', 'Ctrl', and 'End' buttons at the same time. + Check-in Notes: + Code Reviewer: ShellM + Performance Reviewer: ShellM + Security Reviewer: ShellM + +## See Also + +#### Reference + +[Checkin Command](checkin-command.md) + +[Checkout and Edit Commands](checkout-or-edit-command.md) + +[Shelve Command](shelve-command.md) + +[History Command](history-command.md) + +[Configure Command](configure-command.md) + +#### Concepts + +[Working with Changesets](find-view-changesets.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/check-folder-controlled-by-gated-check-build-process.md b/docs/tfvc/check-folder-controlled-by-gated-check-build-process.md new file mode 100644 index 00000000000..f67f4238396 --- /dev/null +++ b/docs/tfvc/check-folder-controlled-by-gated-check-build-process.md @@ -0,0 +1,109 @@ +--- +title: Check in to a folder that is controlled by a gated check-in build process +description: Check in to a folder that is controlled by a gated check-in build process +ms.assetid: 28fabf92-d3e0-43bb-96b5-7e5c10baa336 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Check in to a folder that is controlled by a gated check-in build process + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +When you check in files to a version control folder that is controlled by a [gated check-in build process](../build-release/concepts/definitions/build/triggers.md), there are some additional steps that you must take to complete the check-in. + +![](_img/check-folder-controlled-by-gated-check-build-process/IC572351.png) +**Required permissions** + +You must be one of the **Contributors** for your team project. See [Team Foundation Server default groups, permissions, and roles](https://msdn.microsoft.com/library/ms253077). + +<a name="begin_checkin"></a> + +## Begin checking in changes to a folder that is controlled by a gated check-in build + +If the **Gated Check-in** dialog box appears during your check-in, then your changes must first be built by Team Foundation Build before they can be checked in. + +### To check in changes to a folder that is controlled by a gated check-in build + +1. In the **Gated Check-in** dialog box: + + - If a build definition is displayed, proceed to the next step. + + - If the **Build definition** menu is displayed instead of the name of a build definition, on the **Build definition** menu, choose the build definition that your build engineer suggests that you use. + +2. Decide how you want to proceed: + + - **Cancel the check-in operation and continue working**: If you do not want to try building your changes yet, choose **Cancel**, and then when the system asks you if you want to delete the shelveset, choose **Yes**. + + - **Cancel the check-in operation and start a private build of your changes**: If you want to build the code yourself in a private build, choose **Cancel**. You can now build the shelveset manually. For more information, see [Get started with CI/CD](../build-release/actions/ci-cd-part-1.md). + + - **Proceed with the check-in operation while keeping your changes in your workspace**: To proceed with the check-in operation and continue working with your changes, see [Proceed with the Gated Check-in after Keeping the Changes in Your Workspace](check-folder-controlled-by-gated-check-build-process.md#proceed_and_keep_changes). + + - **Proceed with the check-in operation while deleting changes in your workspace**: If you do not need to continue working with your changes, see [Proceed with the Gated Check-in after Deleting the Changes in Your Workspace](check-folder-controlled-by-gated-check-build-process.md#proceed_and_delete_changes). + + - **Bypass the gated check-in requirement**: If you have the **Override check-in validation by build permission** set to **Allow**, you can bypass the gated check-in requirement. Choose **Show options**, and then choose **Bypass validation build and check in my changes directly (requires permissions)**. + +<a name="proceed_and_keep_changes"></a> + +## Proceed with the gated check-in after keeping the changes in your workspace + +The gated check-in process provides a way to proceed with the check-in and continue working with your changes. The drawback of proceeding in this way is that if the build completes successfully you must reconcile the changes in your workspace with the changes that are checked into version control. + +### To proceed with the gated check-in after keeping your changes in your workspace + +1. Follow the steps in [Begin Checking in Changes to a Folder that is Subject to Gated Check-in](check-folder-controlled-by-gated-check-build-process.md#begin_checkin). + +2. In the **Gated Check-in** dialog box, choose **Build Changes**. + + In **Team Explorer**, when the information message appears in the **Pending Changes** page, monitor the build by choosing the **here** link to display the build results window. You can also choose ![](_img/check-folder-controlled-by-gated-check-build-process/IC547418.png) **Home**, and then choose ![](_img/check-folder-controlled-by-gated-check-build-process/IC588244.png) **Builds** to monitor the build on the **Builds** page. + +3. After the build is completed: + + - **Check-in committed**: We recommend that you reconcile your workspace before you continue developing your code. If you are using the Build Notifications application, the **Gated Check-in** dialog box appears. Choose **Reconcile**. Otherwise, in **Team Explorer**, on the **Builds** page, under **My Builds**, open the shortcut menu for the completed build, and then choose **Reconcile Workspace**. When the **Reconcile Workspace** dialog box appears, use this dialog box to resolve version control conflicts. + + - **Check-in rejected**: Correct the problems that caused the check-in to be rejected. In **Team Explorer**, on the **Builds** page, under **My Builds**, double-click the build (or open the shortcut menu for the build, and then choose **Open**). The build results window appears and contains information that can help you resolve the problem that caused the build to fail. For some types of problems, you may be able to choose the error or issue to view the file that requires corrections. + +<a name="proceed_and_delete_changes"></a> + +## Proceed with the gated check-in after deleting the changes in your workspace + +If you want to proceed with the gated check-in operation and you do not plan to continue working with your changes, you can delete the changes in your workspace. Your changes are preserved in a shelveset and built by the system. If the build completes, then your changes are checked in. If the build fails, then you can unshelve the shelveset to get the changes back into your workspace. + +### To proceed with the gated check-in after deleting changes in your workspace + +1. Follow the steps in [Begin Checking in Changes to a Folder that is Subject to Gated Check-in](check-folder-controlled-by-gated-check-build-process.md#begin_checkin). + +2. In the **Gated Check-in** dialog box: + + - Choose **Show Options** and then clear **Preserve my pending changes locally**. + + - Choose **Build Changes**. + +3. In **Team Explorer**, when the information message appears in the **Pending Changes** page, monitor the build by choosing the **here** link to display the build results window. You can also choose ![](_img/check-folder-controlled-by-gated-check-build-process/IC547418.png) **Home**, and then choose ![](_img/check-folder-controlled-by-gated-check-build-process/IC588244.png) **Builds** to monitor the build on the **Builds** page. + +4. After the build is completed: + + - **Check-in committed**: Now that your changes are checked in, you may want to get the latest version of the files so that your workspace contains these changes. For more information, see [Download (get) files from the Server](download-get-files-from-server.md). + + - **Check-in rejected**: Correct the problems that caused the check-in to be rejected. + + 1. In **Team Explorer**, on the **Builds** page, under **My Builds**, double-click the build (or open the shortcut menu for the build and then choose **Open**). The build results window appears. + + 2. In the build results window, look for information that can help you resolve the problem that caused the build to fail. For some types of problems, you may be able to choose the error or issue to view the file that requires corrections. + + 3. Retrieve your changes from the shelveset. For more information, see [Suspend your work and manage your shelvesets](suspend-your-work-manage-your-shelvesets.md). + + 4. In your files, correct the problems that caused the build to fail. + +## See Also + +#### Other Resources + + [Use a gated check-in build process to validate changes](../build-release/concepts/definitions/build/triggers.md) + + [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411) + + [Suspend your work and manage your shelvesets](suspend-your-work-manage-your-shelvesets.md) diff --git a/docs/tfvc/check-out-edit-files.md b/docs/tfvc/check-out-edit-files.md new file mode 100644 index 00000000000..25cd1519385 --- /dev/null +++ b/docs/tfvc/check-out-edit-files.md @@ -0,0 +1,66 @@ +--- +title: Check out and edit files +description: Check out and edit files +ms.assetid: eb404d63-c448-4994-9416-3e6d50ec554a +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Check out and edit files + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +When you want to edit a file you can open it from Solution Explorer or from Source Control Explorer. When you begin editing a file, it is automatically checked out to you. In rare situations (for example, you want to check out and lock the file to make sure your changes are checked in before changes from other team members), you might need to manually check out (and optionally lock) an item. + +**Required permissions** +You must be one of the **Contributors** for your team project. See [Team Foundation Server default groups, permissions, and roles](https://msdn.microsoft.com/library/ms253077). + +## Manually check out items + +### To manually check out items + +1. In [Solution Explorer](develop-code-manage-pending-changes.md) or in [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), select the files that you want to edit, open their shortcut menu, and choose **Check Out for Edit**. + +2. (Optional) You can lock the file. + >**Important:** + >As a best practice, use the **Lock type** option with discretion and notify your teammates why you are locking an item, and when you plan to remove the lock. + + On the **Lock type** menu, choose: + + - **Unchanged**: Do not apply a lock to the items. + - **Check Out**: Prevent other users from checking out and checking in the items until you check in and unlock them. + + >**Note:** + >In Visual Studio Team Foundation Server 2012 this option is not available if you are using a [local workspace](decide-between-using-local-server-workspace.md). Also, this lock is not enforceable because other users might be using local workspaces. See [Understand lock types](understand-lock-types.md).</p></td> + </tr> + </tbody> + </table> + + - **Check In**: Allow other users to check out the items you are checking out, but prevent them from checking in their changes until you check in your changes and unlock the items. + + >**Note:** + >The **Lock type** menu is not available if:</p> + <ul> + <li>Another team member has locked the file.</li> + <li>The <strong>Enable multiple check-out</strong> option has been cleared (not a recommended practice) by an Administrator of your team project. Administrator: On the menu bar, choose <strong>Team</strong>, <strong>Team Project Settings</strong>, <strong>Source Control</strong>).</li></ul> + + If any other users have locked any of the specified items, the lock operation will fail. For more information, see [Lock and unlock folders or files](lock-unlock-folders-files.md). + +3. Choose **Check Out**. + +In Solution Explorer and in Source Control Explorer, a check mark ![TFSC Checked-Out Status Icon](_img/check-out-edit-files/IC51402.gif) appears next to the items that you have checked out. In Team Explorer, a pending **edit** change to the file is displayed on the Pending Changes page. In Source Control Explorer, a pending **edit** change is visible to you and to members of your team. + +## Work from the command prompt + +- [Get command](get-command.md) Get files from the server. +- [Checkout (or Edit) command](checkout-or-edit-command.md) Check out files from the server. + +## Tips + +- If you are beginning a new task, it’s probably a good idea for you to [download the latest files from the server](download-get-files-from-server.md) before you check out files and begin your work. +- To help you and your team organize and track your work, you should use the My Work or Pending Changes page to associate a task or a bug with the work you are doing. See [Develop code and manage pending changes](develop-code-manage-pending-changes.md). +- If you use a [server workspace](decide-between-using-local-server-workspace.md), files that you have not checked out are read-only. +- You can [review and manage your work](develop-code-manage-pending-changes.md), [suspend your work](suspend-your-work-manage-your-shelvesets.md), and ultimately [contribute your work to the team’s codebase](check-your-work-team-codebase.md). diff --git a/docs/tfvc/check-your-work-team-codebase.md b/docs/tfvc/check-your-work-team-codebase.md new file mode 100644 index 00000000000..3e282e1f254 --- /dev/null +++ b/docs/tfvc/check-your-work-team-codebase.md @@ -0,0 +1,119 @@ +--- +title: Check in your work to the team's codebase +description: Check in your work to the team's codebase +ms.assetid: 325ef815-f163-4b3c-8fcb-2b7faf09c83d +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Check in your work to the team's codebase + +**VSTS | TFS 2015 & TFS 2017 | Visual Studio 2013 | Visual Studio 2015** + +Use the **Pending Changes** page (Keyboard: Ctrl + 0, P) in Team Explorer to check in your code into a new changeset. + +![Checking in an update to fix a bug](_img/check-your-work-team-codebase/IC593474.png) + +<a name="include_exclude"></A> + +## Choose the files you want to check in + +You can specify which file changes you want to check in by dragging them between the **Included Changes** and **Excluded Changes** sections of the **Pending Changes** page in Team Explorer. +You can also check-in as you work in other areas of Visual Studio: + +- In Solution Explorer, select one of the following: + + - The solution + - One or more of the code projects + - One or more files + + After you select the items, right-click and select **Check In**. + +- In Source Control Explorer, select one or more items with pending changes or one or more folders that contain items with pending changes. (Items with pending changes are indicated by this symbol: ![TFSC Checked-Out Status Icon](_img/check-your-work-team-codebase/IC51402.gif)). Open the context menu for the selected items, and choose **Check In**. + + +> [!IMPORTANT] +> The **Check in** option is not displayed if there are no pending changes to the item selected. + +> [!TIP] +> If you don't see pending changes for an item, make sure that it is not already listed as an excluded change. Open Team Explorer's **Pending Changes** view and select the +> **Detected: ..** link under **Excluded Changes**. Check the changes to include from the list and select **Promote** to move the excluded changes into the **Included Changes** section. +> These changes can now be checked in. + +## Associate work items + +When you check in changes, you should associate such work items with the changes. Benefits of doing so include: + +- A team member who looks at the work item can [link directly to the changeset](../work/track/link-work-items-support-traceability.md) to see the work that you did. +- A team member who [reviews the history of a file](view-manage-past-versions.md) you changed can view the changeset and see the work items that were the justification for the change. +- If you build your changes in your automated build system (for example with a [CI Build](../build-release/concepts/definitions/build/triggers.md) or a [Gated Check-in Build](../build-release/concepts/definitions/build/repository.md) your team members can see in which completed build the task was completed or the bug was fixed. + +To associate work items with your check-in: + +- Choose the **Add Work Item by ID** link in the **Related Work Items** section. +- Drag a work item from a work item query window from [Team Explorer's **Work Item**](../work/track/using-queries.md) page into the **Related Work Items** section. + +Next to each work item, select how it should be related to your check-in: **Associate** or **Resolve** (available only if the work item is not already in a state that precludes this relationship, such as **Resolved**, **Done**, or **Closed**). + +## Check in your changes + +1. In Team Explorer, choose ![Home icon](_img/check-your-work-team-codebase/IC547418.png) **Home**, and then choose **Pending Changes** (Keyboard: Ctrl + 0, P). + +2. On the **Pending Changes** page, enter a **Comment** so that teammates who later need to [review and understand the history of your files](view-manage-past-versions.md) will understand what you did. For example: **Implemented shopping cart controller**. + +3. Some teams prefer that their members to provide certain kinds of information about each check-in. In some cases they even implement a check-in policy to require this. If an Administrator of your team project has [enabled check-in notes](configure-check-notes.md), then you can type the information into each field in the **Notes** section. + +4. Choose the **Check In** button. + +One of the following outcomes occurs: + +### Your changes are checked in + +All the included file changes from your workspace along with the comment, check-in notes, and links to related work items are stored on the server as a single [changeset](find-view-changesets.md) on your server. + +### Conflicts block your check in + +The system presents you with conflicts between your changes the latest version of the files on the server. See [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md). + +### Your check in is blocked because it violates a check-in policy. + +Administrators of your team project can implement check-in policies to encourage your team to follow best practices. For example, a check-in policy can encourage team members to associate at least one work item with their changes. For more information, see [Set and Enforce Quality Gates](set-enforce-quality-gates.md). + +In some cases, you might want to override these check-in policies. In the **Policy Warnings** section, choose **Override Warnings**. + +In the **Reason** box, explain why you chose to override the policy. + +### Check in changes to a folder that is controlled by a gated check-in build process + + ![Gated Check-in dialog box](_img/check-your-work-team-codebase/IC572351.png) +If you are checking in changes into version control folders that are controlled by a [gated check-in build process](../build-release/concepts/definitions/build/repository.md), the **Gated Check-in** dialog box appears. For information about how to complete your check-in operation, see [Check in to a folder that is controlled by a gated check-in build process](check-folder-controlled-by-gated-check-build-process.md). + +## Subscribe to alerts + +If you want to be notified when someone checks in code in your TFVC team project, you can [subscribe]((https://msdn.microsoft.com/library/ms181334) to receive email alerts. [Here’s how] + +![Alerts page for TFVC team project in web portal](_img/check-your-work-team-codebase/IC720120.png) + +## Work from the command prompt + +- [Checkin command](checkin-command.md) : View pending changes and check in files + +## Tips + + +- ![Tip](_img/check-your-work-team-codebase/IC572374.png) You can ![Undock](_img/check-your-work-team-codebase/IC667296.png) undock the **Pending Changes** page from Team Explorer and open it in a new window. + +- ![Tip](_img/check-your-work-team-codebase/IC572374.png) You can toggle between list and tree view from the **Actions** menu. + +- ![Tip](_img/check-your-work-team-codebase/IC572374.png) Before checking in new code, you should consider conducting a code review. See [Day in the life of an devops Developer: Suspend work, fix a bug, and conduct a code review](day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md). + +- ![Tip](_img/check-your-work-team-codebase/IC572374.png) You can manage and, if necessary, undo your pending changes. See [Develop code and manage pending changes](develop-code-manage-pending-changes.md). + +- ![Tip](_img/check-your-work-team-codebase/IC572374.png) If you need to set aside your changes, see [Suspend your work and manage your shelvesets](suspend-your-work-manage-your-shelvesets.md). + +- ![Tip](_img/check-your-work-team-codebase/IC572374.png) A check-in is performed atomically—the operation either succeeds completely or fails completely (with one exception). If any one of the changes cannot be submitted to your Team Foundation server, none of the changes is committed and a changeset is not created. For example, if you lose network connectivity in the middle of a check-in, the whole operation fails. + + The exception is the association of work items with the changeset. If work item association fails but all other aspects of the check-in succeed, then the changeset is created. You can manually associate a work item with a changeset. See [Manage dependencies, link work items to support traceability](../work/track/link-work-items-support-traceability.md). diff --git a/docs/tfvc/checkin-command.md b/docs/tfvc/checkin-command.md new file mode 100644 index 00000000000..eefe0e612cf --- /dev/null +++ b/docs/tfvc/checkin-command.md @@ -0,0 +1,185 @@ +--- +title: Checkin command +description: Checkin command +ms.assetid: 90b18c7c-b0ae-4f46-829f-3a4471614086 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Checkin command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Checks in your pending changes to files or folders to the server. + +Almost every change that you make to the files on your dev machine is stored in your workspace as a [pending change](develop-code-manage-pending-changes.md) until you check it in. When you check in your changes, they are stored as a [changeset](find-view-changesets.md) on the server. Although the **Checkin** command provides a different user interface than the one you can use in Visual Studio (see [Check in your work to the team's codebase](check-your-work-team-codebase.md)), the process is fundamentally the same. + +**Requirements**: See [Permissions and groups reference](../security/permissions.md). + + tf checkin [/author:author name] [/comment:("comment"|@comment file)] + [/noprompt] [/notes:("Note Name"="note text"|@notefile)] + [/override:(reason|@reasonfile)] [/recursive] [/saved] [/validate] [itemspec] [/bypass] [/force] [/noautoresolve] [/login:username,[password]] [/new] + + tf checkin /shelveset:shelvesetname[;shelvesetowner] [/bypass] [/noprompt] [/login:username,[password]] [/collection:TeamProjectCollectionUrl][/author:author name] [/force] + +## Parameters + +<table> +<thead> +<tr> +<th><p><strong>Parameter</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/author</strong>:<i>author name</i></p></td> +<td><p>Identifies the author of the pending changes so that one user can check in changes on behalf of another user.</p> +<p>Requires the <strong>CheckinOther </strong>permission. See [Permissions and groups reference](../security/permissions.md)</p></td> +</tr> +<tr> +<td><p><strong>/bypass</strong></p></td> +<td><p>Bypasses a gated check-in requirement. For more information, see <a href="check-folder-controlled-by-gated-check-build-process.md">Check in to a folder that is controlled by a gated check-in build process</a>.</p></td> +</tr> +<tr> +<td><p><strong>/collection</strong>:<i>TeamProjectCollectionUrl</i></p></td> +<td><p>If you use the <strong>shelveset</strong> option, the <strong>/collection</strong> option specifies the URL of the team project collection that contains the shelveset. For example: http://myserver:8080/tfs/DefaultCollection.</p> +<p>By default, the team project collection is presumed to be the one that contains the workspace that maps the current directory.</p></td> +</tr> +<tr> +<td><p><strong>/comment</strong></p></td> +<td><p>Associates a comment with the changeset using one of the following arguments:</p> +<ul> +<li><p><i>Comment</i>: A user-provided comment about the check-in.</p></li> +<li><p><i>@comment file</i>: The path to a file on disk that contains the comment for the check-in.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>/force</strong></p></td> +<td><p>Forces a check-in on items with pending edits even when there are no content changes in the file.</p></td> +</tr> +<tr> +<td><p><i>itemspec</i></p></td> +<td><p>Specifies the scope of the items to check in from the user’s workspace. You can specify more than one <em>Itemspec</em> argument. For syntax, see <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong>:<i>username</i>,[<i>password</i>]</p></td> +<td><p>Specifies the user account to run the command. See <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td> +</tr> +<tr> +<td><p><strong>/new</strong></p></td> +<td><p>The selected state of each pending change (as shown in the <strong>Check In</strong> dialog box), the comment, associated work items, check-in notes, and check-in policy override reason, are stored on your dev machine as pending changes until you check them in. The <strong>/new</strong> option clears this check-in metadata before you check in.</p> +<p>This option and the behavior it modifies have no effect when you use the <strong>/noprompt</strong> option.</p></td> +</tr> +<tr> +<td><p><strong>/noautoresolve</strong></p></td> +<td><p>By default, the system automatically attempts to <strong>AutoResolve All</strong> (see <a href="resolve-team-foundation-version-control-conflicts.md">Resolve Team Foundation Version Control conflicts</a>). Specify this option to disable this default behavior.</p></td> +</tr> +<tr> +<td><p><strong>/noprompt</strong></p></td> +<td><p>Suppresses the display of windows and dialog boxes (such as the <strong>Check In</strong> dialog box) and redirects output data to the command prompt. See <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td> +</tr> +<tr> +<td><p><strong>/notes</strong></p></td> +<td><p>Provides one or more check-in notes to associate with the changeset using one of the following arguments:</p> +<ul> +<li><p><i>NoteFieldName=NoteFieldValue</i>: Sets the value of the check-in note field. You can provide multiple, semicolon-separated "field=value" expressions.</p></li> +<li><p><i>Notefile</i>: The user-provided path of a file on disk that contains check-in note field names and values in the format of "field=value". A semicolon separated note tile can span multiple lines, for example:</p> +<p>Field1=Value1;</p> +<p>Field2=First line of Value2</p> +<p>Second line Value2;</p> +<p>Field3=Value3;</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>/override</strong></p></td> +<td><p>Overrides a check-in policy using one of the following arguments:</p> +<ul> +<li><p><i>reason</i>: A user-provided reason why the check-in policy is being ignored.</p></li> +<li><p><i>Reasonfile</i>: The path to a file that contains a user-provided description of the reason why the check-in policy is being ignored.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>Recursively checks in items in the specified directory and any subdirectories.</p></td> +</tr> +<tr> +<td><p><strong>/saved</strong></p></td> +<td><p>Ignore this parameter.</p></td> +</tr> +<tr> +<td><p><strong>/shelveset</strong>:<i>shelvesetname[;owner]</i></p></td> +<td><p>Specifies a shelveset to check in. The optional <i>owner</i> argument is used to specify a shelveset that the current user does not own.</p> +<div class="alert"> +<table> +<thead> +<tr> +<th> <strong>Note</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>After you check in the shelveset, the system deletes it.</p></td> +</tr> +</tbody> +</table> +</div></td> +</tr> +<tr> +<td><p><strong>/validate</strong></p></td> +<td><p>Tests whether the check in would succeed without checking in the files. The system evaluates check-in policies, check-in notes, and lists conflicts.</p> +<div class="alert"> +<table> +<thead> +<tr> +<th> <strong>Note</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>If you do not specify the <strong>/noprompt</strong> option, you must choose the <strong>Check In</strong> button on the <strong>Check In</strong> dialog box to validate the check in. After you choose this button, the system will not check in the files.</p></td> +</tr> +</tbody> +</table> +</div></td> +</tr> +</tbody> +</table> + +## Examples + +### Check in all pending changes in the current workspace + + c:\code\SiteApp\Main>tf checkin + +Displays the **Check In** dialog box, which displays all pending changes in the current workspace. You can use the **Check In** dialog box to select or clear the pending changes you want to check in, add a comment, associate work items, and perform other tasks and then choose the **Check In** button when you are ready to proceed. + +### Check in all pending changes with a comment + +### Check in all pending changes with a comment + + c:\code\SiteApp\Main>tf checkin /comment:"Re-implemented Pi calculator" + +Checks in all pending changes in the current workspace and provides a comment to help your teammates understand the purpose of your changes. + +### Check in a change to a single item without using the Check In dialog box + + c:\code\SiteApp\Main>tf checkin program.cs /noprompt + +Checks in your pending changes to program.cs. The **Check In** dialog box is not displayed, and if any conflicts block the check in, the system does not display the conflicts window. + + +## Work in Visual Studio + +- [Check in your work to the team's codebase](check-your-work-team-codebase.md) Use Visual Studio to check in your changes to the server. + +## Tips + +- ![Tip](_img/checkin-command/IC572374.png) To set aside changes (and perhaps also want to clean your workspace for another task), use the [Shelve Command](shelve-command.md). + +- ![Tip](_img/checkin-command/IC572374.png) If conflicts block your check-in, you can use the [Resolve Command](resolve-command.md) to resolve them. + +- ![Tip](_img/checkin-command/IC572374.png) If a machine and user account do not have a workspace mapped to the Team Project Collection that contains the shelveset, you can use the **/shelveset** and **/collection** options to check in a shelveset. diff --git a/docs/tfvc/checkout-or-edit-command.md b/docs/tfvc/checkout-or-edit-command.md new file mode 100644 index 00000000000..baec3ddf76d --- /dev/null +++ b/docs/tfvc/checkout-or-edit-command.md @@ -0,0 +1,66 @@ +--- +title: Checkout (or Edit) command +description: Checkout (or Edit) command +ms.assetid: 377fec8a-bdc5-4e3c-ac8c-79ee85eef4ce +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Checkout (or Edit) command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Checks out a file and changes its pending change status to Edit. You can call this command using either **Checkout** or **Edit**. + +**Requirements:** See [Permissions and groups reference](../security/permissions.md). + + tf checkout [/lock:(none|checkin|checkout)] [/recursive] [/encoding:encoding] itemspec [/login: username,[password]] + +## Parameters + +|**Parameter**|**Description**| +|---|---| +|**/encoding**|Ignore this parameter.| +|*itemspec*|Specifies the scope of the items to check in. For syntax, see [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md).| +|**/lock**|Applies or removes a lock. See [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md).| +|**/login**:*username*,[*password*]|Specifies the user account to run the command. See [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md).| +|**/recursive**|Recursively checks out items in the specified directory and any subdirectories.| + +## Examples + +### Check out a single item + + c:\code\SiteApp\Main\SolutionA\Project1\>tf checkout program.cs + +Checks out program.cs. + +### Check out two items + + c:\code\SiteApp\Main\SolutionA\Project1\>tf checkout program1.cs program2.c + +Checks out the files program1.cs and program2.c. + +## Work in Visual Studio + +- [Check out and edit files](check-out-edit-files.md) Use Visual Studio to check out files. + +## Tips + +- ![Tip](_img/checkout-or-edit-command/IC572374.png) If you are beginning a new task, it’s probably a good idea for you to download the latest files from the server before you check out files and begin your work. See [Get command](get-command.md). + +- ![Tip](_img/checkout-or-edit-command/IC572374.png) When you begin editing a file in a [local workspace](decide-between-using-local-server-workspace.md), it is automatically checked out for you. + +- ![Tip](_img/checkout-or-edit-command/IC572374.png) You can view a list of your pending changes: + + - And work with related data such as Comments and Associated Work Items in the **Check In** dialog box using the [Checkin command](checkin-command.md). + + - At the command prompt by using the [Status command](status-command.md). + +- ![Tip](_img/checkout-or-edit-command/IC572374.png) When you are ready to check in your changes to the team’s codebase on the server, use the [Checkin command](checkin-command.md). + +- ![Tip](_img/checkout-or-edit-command/IC572374.png) If you need to set aside changes (and perhaps also want to clean your workspace for another task), use the [Shelve Command](shelve-command.md). + +- ![Tip](_img/checkout-or-edit-command/IC572374.png) If you use a [server workspace](decide-between-using-local-server-workspace.md), files that you have not checked out are read-only. diff --git a/docs/tfvc/clean-up-files-when-users-leave.md b/docs/tfvc/clean-up-files-when-users-leave.md new file mode 100644 index 00000000000..18c37258866 --- /dev/null +++ b/docs/tfvc/clean-up-files-when-users-leave.md @@ -0,0 +1,36 @@ +--- +title: Clean Up Files When Users Leave +description: Clean Up Files When Users Leave +ms.assetid: 7e8249cc-2933-4caa-8bee-ea93a3aff01a +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Clean Up Files When Users Leave + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +When a member leaves a team, version control administrators must correctly dispose of that member's files. + +**Required Permissions** + +To perform these procedures, you must be a member of the **Team Foundation Administrators** security group. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To clean up version-controlled files after a team member leaves + +1. Check in any files that are checked out to the team member who has left. + + >**Note:** If the member's checked-out files do not need to be saved, omit this step. + +2. Delete the workspaces of the member who has left. + + This operation can be performed only from the command line. For more information, see [Workspace Command](workspace-command.md). + +## See Also + +#### Tasks + +[Remove a User From a Team Project or Team Project Collection](https://msdn.microsoft.com/library/ms253182) diff --git a/docs/tfvc/compare-files.md b/docs/tfvc/compare-files.md new file mode 100644 index 00000000000..334ebadb5dd --- /dev/null +++ b/docs/tfvc/compare-files.md @@ -0,0 +1,135 @@ +--- +title: Compare files +description: Compare files +ms.assetid: d16677af-ab40-4e8c-99d3-ae54675dcfb6 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: sdanie +ms.date: 05/12/2017 +--- + +# Compare files + +**VSTS | TFS 2017 | TFS 2015 | Visual Studio 2017, 2015, and 2013** + +This article provides a guide for comparing files when using Team Foundation Version Control (TFVC). If you're using Git for version control, see [comparing files with Git and Visual Studio](../git/tutorial/history.md). + +> [!NOTE] +> Even if you're not using version control, you can use the Diff window in Visual Studio to compare two files. To open the Diff window directly in Visual Studio, you can use the [devenv.exe tool with the /diff option](https://msdn.microsoft.com/en-us/library/jj874068.aspx) from the Developer Command Prompt to compare any two files on your computer. + + +## Compare any two files using the Compare dialog + +You can compare any two files using the Compare dialog. The files can both reside on the local system, both on your Team Foundation Server, or one on each. + +1. On the menu bar, choose **View**, **Other Windows**, **Source Control Explorer**. + +2. In **Source Control Explorer**, right-click a file and select **Compare**. + + The **Compare** dialog box appears. + +3. Specify the two files you want to compare - one under **Source Path** and the other under **Target Path**: + + - Type a path, or open the **Browse** menu, choose **Local Path** or **Server Path**, and then browse to choose the file. + + - Choose an option to specify file the server file version when specifying a **Server Path** from the **Type** menu: **Changeset**, **Date**, **Label**, **Latest Version**, or **Workspace Version**. + + > [!TIP] + > To compare any two local files, select **Local Path...** from both **Browse...** drop downs in the Compare dialog. + +4. Choose **OK**. + +## Compare files in your workspace with the most recent version + +Compare your work with the latest version on your Team Foundation Server while continuing to make changes. + +1. If you are not already connected to the team project that you want to work in, then [connect to the team project](../connect/connect-team-projects.md). + +2. From **Team Explorer**, open the **Pending Changes** view. + +3. On the **Pending Changes** view, locate the file in the **Included Changes** list. Open the shortcut menu for this file (select the file and right-click), and then: + + - Choose **Compare with Workspace Version** to see what changes you have made to the version you checked out. + + > [!TIP] + > You can also press Ctrl+Shift and then double-click the file. + + - Choose **Compare with Latest Version** to see how the changes you have made compare to the latest version of the file on your Team Foundation Server. + +4. The Diff window appears. You can continue to make changes to the file in this window. + +> [!Tip] +> You can also use **Solution Explorer** and the **Source Control Explorer** windows to compare the file in your workspace with a version of the file on the server. Select a file, open its shortcut menu (right-click), and then choose **Compare**. When the **Compare** dialog box appears, choose **OK**. + +## Compare two versions of a file in your TFVC history + +Compare two versions of a file already checked into Team Foundation Version Control: + +1. On the menu bar, choose **View**, **Other Windows**, **Source Control Explorer**. + +2. In **Source Control Explorer**, right-click a file and select **View History**. + +3. Select two versions of the file, right-click and select **Compare**. + + +## Use the Diff window + +When you compare files using the instructions in the previous sections, Visual Studio displays the files in the Diff window. The Diff window shows the difference between two files. If one of the files is checked out in your workspace, you can modify the file as you run the comparison. + +> [!NOTE] +> Even if you're not using version control, you can use the Diff window in Visual Studio to compare two files. To open the Diff window directly in Visual Studio, you can use the [devenv.exe tool with the /diff option](https://msdn.microsoft.com/en-us/library/jj874068.aspx) from the Developer Command Prompt to compare any two files on your computer. + +![Comparing two versions of a file](_img/compare-files/IC558594.png) + +![Comparison window layouts](_img/compare-files/IC556152.png) +![Step 1](_img/compare-files/IC756627.png) Deleted text + +![Step 2](_img/compare-files/IC646325.png) Added text + +![Step 3](_img/compare-files/IC646326.png) Changed text + +![Step 4](_img/compare-files/IC646327.png) Code review comment + +![Step 5](_img/compare-files/IC646328.png) Visual summary of the differences between the files + +Here are some tips for working with the **Diff** window: + +- Although **Side-by-side mode** is generally more effective in most cases, you can use whichever mode works best for you and the code you are examining. + +- To skip: + + - To the next difference, choose **Next difference** ![Next difference](_img/compare-files/IC558315.gif) (Keyboard: F8). + + - To the previous difference, choose **Previous difference** ![Previous difference](_img/compare-files/IC558316.gif) (Keyboard: Shift+F8). + + - Back and forth in the file, choose a section of the ![Step 5](_img/compare-files/IC646328.png) visual summary. + +- When you participate in a [code review](day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md), you use the **Diff** window to see the code changes that are the subject of the review. For more information, see [Day in the life of a devops Developer: Suspend work, fix a bug, and conduct a code review](day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md). + +## Merge changes between versions + +Copy and paste changes from the diff view into the version in your workspace to make quick updates to bring in updates from one version to another. +Merge more complex changes between two versions when you [resolve merge conflicts in TFVC](resolve-team-foundation-version-control-conflicts.md) before making a check-in. + +If you need to merge two files with significant differences outside of TFVC conflict resolution, use the [vsdiffmerge command line tool](https://roadtoalm.com/2013/10/22/use-visual-studio-as-your-diff-and-merging-tool-for-local-files). +The vsdiffmerge tool allows you to merge changes side-by-side and pick which contents you want to keep for each difference between the files. +Run the command with four file parameters followed by the `/m` flag from the Visual Studio Developer Command Prompt to bring up the merge tool directly against any tow files. + +The basic syntax for vsdiffmerge.exe is: + +``` +vsdiffmerge.exe "File1" "File2" "Base file" "Result file" /m +``` + + +`File1` and `File2` are the full path to the files you want to merge. +The `Base file` is the full path to the file both files are based off of, and `Result file` is the full path to where you want to write the merged results. + +## Use the command prompt + +- [Difference command](difference-command.md) Compare two files from the command prompt. + +## See Also + +[Compare folders](compare-folders.md) diff --git a/docs/tfvc/compare-folders-files.md b/docs/tfvc/compare-folders-files.md new file mode 100644 index 00000000000..58d0f30add2 --- /dev/null +++ b/docs/tfvc/compare-folders-files.md @@ -0,0 +1,33 @@ +--- +title: Compare folders and files +description: Compare folders and files +ms.assetid: 62dd76a4-8315-4415-8bd9-4cbddc689e7f +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Compare folders and files + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +This section explains how to compare folders and files. You can compare server folders and local folders to each other, and view the differences between the contents of each folder. You can compare two server files, two local files, or a server file against a local file and view the differences between the files. + +## In This Section + + [Compare files](compare-files.md) +Describes how to view the differences between two server files, two local files, or a server file and a local file. + + [Compare folders](compare-folders.md) +Describes how to compare two server folders, two local folders, or a server folder and a local folder. + + [Folder comparison filters](folder-comparison-filters.md) +Describes the name filters that are used to match the names of files or folders you are comparing. + + [Reconcile differences between two folders](reconcile-differences-between-two-folders.md) +Describes how to reconcile the differences between a server folder and local folder, and how to resolve conflicting pending changes in your local folder. + + [Associate a file type with a file-comparison tool](associate-file-type-file-comparison-tool.md) +Describes how to associate a specific file type with a third-party compare or difference tool. diff --git a/docs/tfvc/compare-folders.md b/docs/tfvc/compare-folders.md new file mode 100644 index 00000000000..f93f68f9e4c --- /dev/null +++ b/docs/tfvc/compare-folders.md @@ -0,0 +1,63 @@ +--- +title: Compare folders +description: Compare folders +ms.assetid: 9c894c51-c34c-4c03-a840-5e485dbbc55d +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Compare folders + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +You can compare the differences between two server folders, two local folders, or a server folder and a local folder. + +**Required Permissions** +To perform these procedures, you must have the **Read** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +>**Note:** +>To compare two local folders, you do not need Team Foundation Server permissions. + +### To compare folders by using Folder Difference + +1. On the **View** menu, choose **Other Windows**, and then choose **Source Control Explorer**. + +2. In **Source Control Explorer**, locate the source folder you want to compare, open its shortcut menu, and then choose **Compare**. + + The **Compare** dialog box appears and the version control path of the folder that you selected is in the **Source Path** box. + +3. Under **Source Version**, select the **Type** you want to use for comparison: **Changeset**, **Date**, **Label**, **Latest Version**, or **Workspace Version**. + +4. Enter the **Target Path** or choose **Browse** and locate the target folder. + +5. If the **Target Path** is to a server folder, under **Target Version**, select the **Type** you want to use for comparison: **Changeset**, **Date**, **Label**, **Latest Version**, or **Workspace Version**. + +6. Under **Filter**, you can add or remove file and folder filters. + + For more information, see [Folder comparison filters](folder-comparison-filters.md). + + Select the **Filter local paths only** box if you want to apply the filter only to local paths. + +7. Under **View Options**, select which items that you want shown in the comparison results. You can select a combination of view options by checking or clearing the following boxes: + - **Show items that exist only in source path**. + - **Show items that exist only in target path**. + - **Show items that are different**. + - **Show items that are the same**. + +8. Choose **OK**. + + The **Folder Difference** window displays a list of items that are compared in the source and target folders. + + - You can compare the differences between two versions of a file by opening its shortcut menu and choosing **Compare**. The [Diff window](compare-files.md) appears. + - If there are differences between a server folder and your local folder, you can [reconcile them](reconcile-differences-between-two-folders.md). + +## See Also + +#### Other Resources + + [Folder comparison filters](folder-comparison-filters.md) + [Compare files](compare-files.md) + [Reconcile differences between two folders](reconcile-differences-between-two-folders.md) diff --git a/docs/tfvc/comparison-git-tfvc.md b/docs/tfvc/comparison-git-tfvc.md new file mode 100644 index 00000000000..f70845c7424 --- /dev/null +++ b/docs/tfvc/comparison-git-tfvc.md @@ -0,0 +1,283 @@ +--- +title: Git and TFVC version control +description: Choosing which version control to use in Visual Studio Team Services +ms.assetid: A4D7295A-22AB-4990-BE68-EF81A1C31F01 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: sdanie +ms.date: 05/12/2017 +--- + + +# Choosing the right version control for your project + +**VSTS | TFS 2017 | TFS 2015 | Visual Studio 2017, 2015, and 2013** + +Whether your software project is large or small, using version control as soon as possible is a good idea. Team Services supports two types of version control: [Git](../git/gitquickstart.md) +and [Team Foundation Version Control](./overview.md) (TFVC). + +<a name="tfvc_or_git_summary"></a> +## Which version control system should I use? + +Git is the default version control provider for new projects. You should use Git for version control in your projects unless you have a specific need for centralized version control features in TFVC. + +You can use TFVC repos with Git in the same Team Project so it's easy to add TFVC later if you need centralized version control. To setup a new repo type for an existing team project [use these instructions](../git/team-projects.md). + +### Git (distributed) + +Git is a distributed version control system. Each developer has a copy of the source repository on their dev machine. Developers can commit each set of changes on their dev machine and perform version control operations such as history and compare without a network connection. Branches are lightweight. When you need to switch contexts, you can create a private local branch. You can quickly switch from one branch to another to pivot among different variations of your codebase. Later, you can merge, publish, or dispose of the branch. + +>[!NOTE] +>Git in Visual Studio, Team Services, and TFS is standard Git. You can use Visual Studio with third-party Git services, and you can also use third-party Git clients with TFS. + +To learn more, see [Git and Team Services](../git/overview.md). + +### TFVC (centralized) + +Team Foundation Version Control (TFVC) is a centralized version control system. Typically, team members have only one version of each file on their dev machines. Historical data is maintained only on the server. Branches are path-based and created on the server. + +TFVC has two [workflow models](decide-between-using-local-server-workspace.md): + + - **Server workspaces** - Before making changes, team members publicly check out files. Most operations require developers to be connected to the server. This system facilitates locking workflows. Other systems that work this way include Visual Source Safe, Perforce, and CVS. With server workspaces, you can scale up to very large codebases with millions of files per branch and large binary files. + + - **Local workspaces** - Each team member takes a copy of the latest version of the codebase with them and works offline as needed. Developers check in their changes and resolve conflicts as necessary. Another system that works this way is Subversion. + +To learn more, see [TFVC overview](./overview.md) + +<a name="tfvc_or_git_details"></a> + +### Moving from TFVC to Git + +If you have existing TFVC repos, you can migrate them to Git repos using the [git-tfs tool](https://github.com/git-tfs/git-tfs). The tool allows you to [migrate a TFVC repo to a Git repo](https://github.com/git-tfs/git-tfs/blob/master/doc/usecases/migrate_tfs_to_git.md) +in just a couple of commands. + +## Git and TFVC capabilities + +Need more help to make a choice? These charts might help. + +<table> +<thead> +<tr> +<td>Capability</td> +<td>TFVC</td> +<td>Git</td> +</tr> +</thead> +<tr> +<td>Changes</td> +<td><p>Team members can concurrently change files on their dev machines. You [upload (check-in)](check-your-work-team-codebase.md) changesets to the server when you create them. You can upload your changes at any time. However, you might be interrupted by [conflicts](resolve-team-foundation-version-control-conflicts.md).</p> + +<p>You can change the comment of a [changeset](find-view-changesets.md) after you check it in. You can link changesets to work items and associate them with completed builds.</p> +</td> +<td><p>Team members can concurrently change files on their dev machines. You create commits on your dev machine independently of contributing them to the team. When you’re ready you must pull the latest commits before you upload (push) yours to the server. When you pull, you might be interrupted by conflicts.</p> + +<p>You can amend the latest local commit. You cannot change older commits. You can link commits to work items and associate them with completed builds.</p> + +<p>You can modify and combine local commits from the command prompt.</p></td> +</tr> +<tr> +<td>Branching</td> +<td> +<p>Path-based branches are used mostly as long-standing constructs to isolate risk of change among feature teams and releases. Team members typically set up an additional workspace for each branch they work on.</p> + +<p>Changes in each branch are independent from each other, so you don’t have to check them in before switching from one branch to another. Merging between sibling branches requires a baseless merging. +</p> + +<p>You can get visualizations of your branch structures and where your changesets have been merged.</p> + +<p>See [Use branches to isolate risk in Team Foundation Version Control](use-branches-isolate-risk-team-foundation-version-control.md).</p> +</td> +<td><p>Branching is lightweight and path independent. Many developers create a branch for each new feature they are coding, sometimes on a daily basis. You can quickly switch from one branch to another to pivot among different variations of your codebase. You can create branches that exist only on your dev machine and share them if and when you’re ready. </p> + +<p>You must commit, branch, stash, or undo changes before switching branches. Merging is simple and independent of the commit that the branch is based on.</p> + +<p>You can compare branches to see which commits exist on which branches.</p> + +<p>See Use Git branches to switch contexts, suspend work, and isolate risk.</p> +</td> +</tr> +<tr> +<td>Conflict resolution</td> +<td>You might have to [resolve conflicts](resolve-team-foundation-version-control-conflicts.md) when you get, check in, merge, or unshelve. You can resolve all types of conflicts in Visual Studio.</td> +<td>You might have to resolve conflicts when you pull or merge. You can resolve content conflicts in Visual Studio or from the command prompt.</td> +</tr> +<tr> +<td>File storage</td> +<td>You can check in large binary files. You might also want to use [NuGet](http://go.microsoft.com/fwlink/?LinkId=246165) in combination or as an alternative.</td> +<td>You can check in small binary files as you would regular files. When working with large binary files, use [Git-LFS](https://blogs.msdn.microsoft.com/visualstudioalm/2015/10/01/announcing-git-lfs-on-all-vso-git-repos/) to store your large binary files in VSTS.</td> +</tr> +<tr> +<td>History</td> +<td>File history is not replicated on the client dev machine and so can be viewed only when you’re connected to the server. You can [view history](get-history-item.md) in Visual Studio and on the web portal. You can annotate files to see who changed a line, and when they changed it.</td> +<td>File history is replicated on the client dev machine and can be viewed even when not connected to the server. You can view history in Visual Studio and on the web portal. You can annotate files to see who changed a line, and when they changed it. +</td> +</tr> +<tr> +<td>Tag your files</td> +<td>You can [apply labels](use-labels-take-snapshot-your-files.md) to a version of one or more files from either Visual Studio or the command prompt. Each file can have label applied to a different version.</td> +<td>You can apply tags from the command prompt to individual commits. View tags in the Visual Studio history window. +</td> +</tr> +<tr> +<td>Roll back changes</td> +<td>You can [roll back one or more changesets](roll-back-changesets.md)</td> +<td>You can revert a commit. +</td> +</tr> +<tr> +<td>Scale</td> +<td>You can work on small or very large scale projects using [local workspaces](decide-between-using-local-server-workspace.md#why-should-i-use-a-local-workspace). Supports massive scale (millions of files per branch and large binary files) projects using [server workspaces](decide-between-using-local-server-workspace.md#when-might-i-need-to-use-a-server-workspace).</td> +<td>You can quickly begin small projects. You can scale up to very large projects, but you have to plan ahead to modularize your codebase. You can create multiple repositories in a team project. +</td> +</tr> +</table> + + +### Server + +<table> +<thead> +<tr> +<td>Capability</td> +<td>TFVC</td> +<td>Git</td> +</tr> +</thead> +<tr> +<td>Server</td> +<td>TFS</td> +<td>Team Services, TFS and Git third-party services</td> +</tr> +<tr> +<td>Alerts</td> +<td>Team members can [receive email alerts when check-ins occur](check-your-work-team-codebase.md#subscribe-to-alerts). +</td> +<td>Team members can receive email alerts when commits are pushed to the server. +</td> +</tr> +<tr> +<td>Auditability</td> +<td>Because your team checks in all their work into a centralized system, you can identify which user checked in a [changeset](find-view-changesets.md) and use [compare](compare-files.md) to see what they changed. Looking at a file, you can [annotate](view-file-changes-using-annotate.md) it to identify who changed a block of code, and when they did it.</td> +<td>You can identify which user pushed a commit. (Anyone can claim any identity as the author or committer.) You can identify when changes were made what was changed using history, compare, and annotate.</td> +</tr> +<tr> +<td>Builds (automated by TFBuild)</td> +<td>You can use all [TFBuild](../build-release/overview.md) capabilities to build any combination of content you want within the team project collection.</td> +<td>You can use most TFBuild capabilities to build one team project at a time, and one or more repositories at a time. +</td> +</tr> +<tr> +<td>Code reviews</td> +<td>Yes; see [Day in the life of an devops Developer: Suspend work, fix a bug, and conduct a code review](share-your-code-in-tfvc-vs.md). For more lightweight discussions, you can also comment on and send email about a changeset from the web portal. +</td> +<td>Yes; see [Conduct a pull request](../git/pull-requests.md). For more lightweight discussions, you can also comment on and send email about a commit from the web portal. +</td> +</tr> +<tr><td>Files</td> +<td><p>Each team project contains all files under a single root path (for example: **$/FabrikamTFVC**). You can [apply permissions](../security/permissions.md) at the file level. You can [lock files](lock-unlock-folders-files.md).</p> + +<p>You can browse your files on the web portal and using [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md) in Visual Studio.</p> + +<p>Your team project exists on only one server.</p> +</td> +<td> +<p>Each team project can contain one or more Git repositories and each Git repository can contain one or more branches. The most granular permissions you can apply are to a repository or a branch. Files cannot be locked.</p> +<p>You can browse your files on the web portal.</p> +<p>You can push commits to multiple remote repositories (for example to both your team project repository and to your web site hosted on Windows Azure.</p> +</td> +</tr> +<tr> +<td>Quality gates</td> +<td>You can use CI builds, gated check-in builds and check-in policies.</td> +<td>You can use CI builds and gated check-in builds through [branch policies](../git/branch-policies.md). +</td> +</tr> +</table> + + + + +### Client + +<table> +<thead> +<tr> +<td>Capability</td> +<td>TFVC</td> +<td>Git</td> +</tr> +</thead> +<tr> +<td>Client software</td> +<td> Visual Studio, Eclipse (with [Team Explorer Everywhere](https://msdn.microsoft.com/en-us/library/gg413285%28v=vs.140%29.aspx))</td> +<td>Visual Studio, Eclipse, and other third-party tools</td> +</tr> +<tr> +<td>Files</td> +<td>You can browse your files using [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md) in Visual Studio, or using Windows File Explorer or the [command prompt](use-team-foundation-version-control-commands.md).</td> +<td>You can browse your files using Windows File Explorer or the command prompt. +</td> +</tr> +<tr> +<td>Manage work on your dev machine</td> +<td>[Pending changes](develop-code-manage-pending-changes.md#use-the-pending-changes-page-to-manage-your-work) and [my work](develop-code-manage-pending-changes.md#use-the-my-work-page-to-manage-your-work) pages.</td> +<td>Changes, commits, and branches pages.</td> +</tr> +<tr> +<td>Suspend your work</td> +<td>You can [suspend from my work page or shelve your changes](suspend-your-work-manage-your-shelvesets.md).</td> +<td>You can create a branch from (from Visual Studio or the command prompt) or stash (from the command prompt)</td> +</tr> +<tr> +<td>User interface</td> +<td> +<ul> + <li>**Visual Studio:** Offers all commonly used features and many advanced features.</li> + <li>**TFS web portal:** Can browse, comment, annotate, and see history of the codebase.</li> + <li>**TF Command prompt:** Installed with Visual Studio. Used for advanced, administrative, and other less common tasks.</li> +</ul> +</td> +<td> +<ul> + <li>**Visual Studio:** Offers many commonly used features. Features for some common tasks are not yet available.</li> + <li>**TFS web portal:** Can browse, comment, annotate, and see history of the codebase.</li> + <li>**Third-party command prompt:** You can install it from Visual Studio. Used for some common and many less common tasks.</li> +</ul> +</td> +</tr> +<tr> +<td>Visual Studio compatibility</td> +<td>You can use all supported [previous versions of Visual Studio](http://msdn.microsoft.com/en-us/library/dd997788).</td> +<td><p>Git is built in with Visual Studio 2017, 2015, and 2013.</p> +<p>You can also use Visual Studio 2012 Update 4 (you must also install [Visual Studio Tools for Git](http://go.microsoft.com/fwlink/?LinkID=275845)).</p></td> +</tr> +<tr> +<td>Web portal</td> +<td>You can browse your codebase (including branches), view history, annotate and comment on changesets and shelvesets, and perform other tasks such as ad hoc downloading of selected parts of your codebase as a .zip file.</td> +<td>You can browse your codebase, view history, compare branches, annotate and comment on commits, and perform other tasks such as ad hoc downloading of selected parts of your codebase as a .zip file.</td> +</tr> +</table> + + +### Integration and migration + +<table> +<thead> +<tr> +<td>Capability</td> +<td>TFVC</td> +<td>Git</td> +</tr> +</thead> +<tr> +<td>CodePlex support</td> +<td>[CodePlex](http://www.codeplex.com/) is supported.</td> +<td>[CodePlex](http://www.codeplex.com/) is supported.</td> +</tr> +<tr> +<td>Migration path</td> +<td>[Git-TFS](https://github.com/git-tfs/git-tfs)</td> +<td>[Git-TFS](https://github.com/git-tfs/git-tfs)</td> +</tr> +</table> diff --git a/docs/tfvc/configure-check-notes.md b/docs/tfvc/configure-check-notes.md new file mode 100644 index 00000000000..f05da72829e --- /dev/null +++ b/docs/tfvc/configure-check-notes.md @@ -0,0 +1,63 @@ +--- +title: Configure Check-In Notes +description: Configure Check-In Notes +ms.assetid: c7829273-4d53-412c-99d6-4944780ebc74 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Configure Check-In Notes + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Administrators of Team Foundation version control can add, configure, and remove check-in notes. Check-in notes settings are set in the Source Control Settings window. For more information about check-ins, see [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411). + +**Required Permissions** +To complete this procedure, you must have the **Edit project-level information** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To add check-in notes + +1. On the **Team** menu, click **Team Project Settings**, and then click **Source Control**. +2. In the **Source Control Settings** dialog box, choose the **Check-in Notes** tab, and click **Add**. +3. In the **Add Check-in Note** dialog box, in the **Title** box, either type the desired name (for example, Documentation Reviewer), or select an existing check-in note from the drop-down list. +4. If you want the note to be mandatory for check-ins, select the **Required on check-ins** box. +5. Click **Add**, to return to the **Check-in Notes** tab in the **Source Control Settings** window with the new check-in note title added. + +### To configure a check-in note as being required + +1. On the **Team** menu, click **Team Project Settings**, and then click **Source Control**. +2. In the **Source Control Settings** dialog box, click the **Check-in Notes** tab. +3. In the **Required** column, select the check-in notes that you want to designate as mandatory, and clear those that you do not want to designate as mandatory for the check-in process. + +### To rename a check-in note + +1. On the **Team** menu, click **Team** **Project** **Settings**, and then click **Source** **Control**. +2. In the **Source** **Control** **Settings** dialog box, click the **Check-in** **Notes** tab. +3. Select the check-in note that you want to rename, and type a new name for it. + +### To change the ordering of the check-in notes + +1. On the **Team** menu, click **Team** **Project** **Settings**, and then click **Source** **Control**. +2. In the **Source** **Control** **Settings** dialog box, select the **Check-in** **Notes** tab. +3. Select the check-in note for which you want to change the order. +4. Use the up and down arrow buttons to move the note to the desired order. +5. Repeat process until all the check-in notes are in the order you desire. This ordering is reflected during the check-in process. For more information, see [Using the Check In and Pending Changes Windows](develop-code-manage-pending-changes.md) and [Associate Check-in Notes with Changesets](https://msdn.microsoft.com/library/ms245464). + +### To remove check-in notes + +1. On the **Team** menu, click **Team** **Project** **Settings**, and then click **Source** **Control**. +2. In the **Source** **Control** **Settings** dialog box, click the **Check-in** **Notes** tab. +3. Select the check-in note title that you want to remove, and click **Remove**. + +## See Also + +#### Tasks + +[Add Check-In Policies](add-check-policies.md) +[Associate Check-in Notes with Changesets](https://msdn.microsoft.com/library/ms245464) +#### Other Resources + +[Administering Team Foundation Version Control](administering-team-foundation-version-control.md) diff --git a/docs/tfvc/configure-check-out-settings.md b/docs/tfvc/configure-check-out-settings.md new file mode 100644 index 00000000000..49b7931f295 --- /dev/null +++ b/docs/tfvc/configure-check-out-settings.md @@ -0,0 +1,40 @@ +--- +title: Configure Check-Out Settings +description: Configure Check-Out Settings +ms.assetid: 9f4eb366-7e99-49f9-899d-cf3209c0ff72 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Configure Check-Out Settings + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Administrators of Team Foundation version control can configure source control check-out settings. Check-out settings in Team Foundation version control enable files to be edited by more than one person at the same time. The following procedure shows you how to configure check-out settings. + +**Required Permissions** + +To configure check-out settings, you must have the **Edit project-level information** set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). +## Procedure +### To configure checkout settings + +1. In **Team Explorer**, select the team project for which you want to configure check-out settings. + +2. From the **Team** menu, click **Team** **Project** **Settings**, and then click **Source** **Control**. + +3. In the **Source** **Control** **Settings** dialog box, select the **Check-out Settings** tab. + +4. Select or clear the **Enable multiple checkout** box. + +5. Select or clear the **Enable get latest on check-out** box. + +6. Click **OK**. + +## See Also + +#### Tasks + +[Enable Team Foundation Version Control to Get the Latest Files on Check-Out](https://msdn.microsoft.com/library/bb385989) diff --git a/docs/tfvc/configure-command.md b/docs/tfvc/configure-command.md new file mode 100644 index 00000000000..94c158b1a9a --- /dev/null +++ b/docs/tfvc/configure-command.md @@ -0,0 +1,83 @@ +--- +title: Configure Command +description: Configure Command +ms.assetid: c61c2a48-20d4-4452-b6e1-6c1aa3b521ee +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Configure Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Enables an administrator to view and change the following configuration settings for a team project in the **Source Control Settings** dialog box: + +- Check-out settings + +- Check-in policies + +- Check-in notes + +**Required Permissions** + +To use the **configure** command, you must have the **Edit server-level information** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf configure [PathOfTeamProject] [/collection:TeamProjectCollectionUrl][/login:username,[password]] + +## Parameters + +|**Argument**|**Description**| +|---|---| +|*PathOfTeamProject*|Path of the team project whose configuration settings an administrator can view, change, or both.| +|*TeamProjectCollectionUrl*|The URL of the team project collection that contains the team project that you specified (for example, http://myserver:8080/tfs/DefaultCollection).| +|*username*|Provides a value to the **/login** option. You can specify a username value as either *DOMAIN\UserName* or *UserName.*| + +|**Option**|**Description**| +|---|---| +|**/collection**|Specifies the team project collection.| +|**/login**|Specifies the user name and password to authenticate the user with Team Foundation Server.| + +## Remarks + +You can manage the following team project settings using the **configure** command: + +- **Check-out settings** can be used to determine whether multiple users can edit files at the same time. Also, they can be used to configure the get latest on check-out behavior. + +- **Check-in policies** provide controls that are invoked at check-in time, to make sure that defined criteria are met before a user checks in pending changes. + +- **Check-in notes** define custom fields into which users provide information during the check-in process. Check-in notes can be either required or optional. + +The settings are configured in the **Source Control Settings** dialog box which appears after you run the **configure** command. When you complete your changes, click **OK** to save them to the server. + +For more information about these settings, see [Walkthrough: Customizing Checkin Policies and Notes](https://msdn.microsoft.com/library/ms181281). + +For links to other Team Foundation commands that provide additional information about the items in your Team Foundation version control server and all the workspaces that map to it, see [Informational Commands](https://msdn.microsoft.com/library/ms181450). + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +## Examples + +The following example displays the **Source** **Control** **Settings** dialog box in which you can examine and modify the team project settings of the workspace for the c:\\projects folder. + + c:\projects>tf configure + +The following example displays the myproj team project settings in the team project collection at http://myserver:8080/tfs/DefaultCollection. + + c:\projects>tf configure $/myproj / http://myserver:8080/tfs/DefaultCollection + +## See Also + +#### Tasks + +[Configure Check-Out Settings](configure-check-out-settings.md) + +#### Concepts + +[Managing File Types](../tfs-server/admin/manage-file-types.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/control-access-team-foundation-version-control.md b/docs/tfvc/control-access-team-foundation-version-control.md new file mode 100644 index 00000000000..e3d5faa13e5 --- /dev/null +++ b/docs/tfvc/control-access-team-foundation-version-control.md @@ -0,0 +1,56 @@ +--- +title: Control Access to Team Foundation Version Control +description: Control Access to Team Foundation Version Control +ms.assetid: cccf50be-5503-4155-974b-c75b57888603 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Control Access to Team Foundation Version Control + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Team Foundation version control supports granting access control permissions to Windows Groups, Windows Users, and Team Foundation Groups. Permissions can be inherited from the containing folder, or you can declare permissions explicitly. + +Permission settings are in the form of either **Grant** or **Deny**. **Deny** always overrides **Grant**, even if **Deny** is inherited and **Grant** is explicitly defined. + +**Required Permissions** + +To complete this task, you must have the **Manipulate security settings** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To set permissions for users or groups + +1. On the Visual Studio **View** menu, click **Other Windows**, and then click **Source Control Explorer**. + +2. Right-click the folder or file for which you want to set permissions, and then click **Properties**. + +3. In the **Properties** dialog box, click the **Security** tab. + +4. In the **Add users and groups** area, select **Team Foundation Server Group** to set permissions for a Team Foundation Server group. Otherwise, select **Windows user or group**. + +5. Click **Add**. + + 1. If you selected **Team Foundation Server** group, the **Add Group** dialog box opens. Select a group, and then click **OK**. The group for which you want to set permissions appears in the **User and Groups** box of the **Properties** dialog box. + + 2. If you selected **Windows User or Group**, the **Select Users or Groups** dialog box opens. Enter the user or group for whom you want to set permissions, and then click **OK**. The user or group appears in the **User and Groups** box of the **Properties** dialog box. + + >**Note** + >To view a ToolTip that provides information about the controls in the **Select Users or Groups** dialog box, click the Help icon on the title bar, and then click the control. + +6. In the **Users and Groups** box of the **Properties** dialog box, select the user or group for which you want to set permissions. + +7. In the **Permission** box, select either **Allow** or **Deny** for each permission. + + >**Note** + >If you select the **Inherit security settings** box, the security settings of the containing folder are selected automatically. You can override these inherited settings by selecting or clearing the **Deny** box. + +8. Click **OK** to close the **Properties** dialog box. + +## See Also + +#### Other Resources + +[Administering Team Foundation Version Control](administering-team-foundation-version-control.md) diff --git a/docs/tfvc/create-work-workspaces.md b/docs/tfvc/create-work-workspaces.md new file mode 100644 index 00000000000..a9b107307ef --- /dev/null +++ b/docs/tfvc/create-work-workspaces.md @@ -0,0 +1,124 @@ +--- +title: Create and work with workspaces +description: Create and work with workspaces +ms.assetid: 1d7f6ed8-ec7c-48f8-86da-9aea55a90d5a +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: sdanie +ms.date: 05/12/2017 +--- + +# Create and work with workspaces + +**VSTS | TFS 2017 | TFS 2015 | Visual Studio 2017, 2015, and 2013** + +Your workspace is your local copy of the team’s codebase. This is where you develop and test your code in isolation until you are ready to check in your work. In most cases the only workspace you need is created automatically for you and you don’t have to edit it. + +In some cases, you might want to modify your workspace or create multiple workspaces to isolate and switch among the changes you are making in different [branches](use-branches-isolate-risk-team-foundation-version-control.md). + +## Add, edit, or remove a workspace + +After you have [connected to the team project](../connect/connect-team-projects.md) (Keyboard: Ctrl + 0, C), you can manage your workspaces from the Team Explorer home page (Keyboard: Ctrl + 0, H) + +![Manage workspaces from Team Explorer](_img/create-work-workspaces/IC698935.png) + +or from [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md). + +![Editing workspaces from Source Control Explorer](_img/create-work-workspaces/IC698934.png) + +![Manage Workspaces dialog box](_img/create-work-workspaces/IC698937.png) + +Choose **Show remote workspaces** if you want to view all the workspaces you own (including those on other computers). + +After you choose **Add** or **Edit** you can modify working folders in a new or an existing workspace. + +![Edit Workspace dialog box](_img/create-work-workspaces/IC720118.png) + +If you want to remove the workspace, before you do so, make sure there are no pending changes (Keyboard: Ctrl + 0, P). If you have pending changes, you can either [check them in](check-your-work-team-codebase.md) or [shelve them](suspend-your-work-manage-your-shelvesets.md). + +## Switch workspaces + +When you switch from one workspace to another, to avoid confusing yourself, make sure you switch to the same workspace in both **Team Explorer** and **Source Control Explorer**. + +1. [Connect to the team project](../connect/connect-team-projects.md) (Keyboard: Ctrl + 0, C). + +2. On the home page (Keyboard: Ctrl + 0, H) choose the workspace you want to use. + + ![Switching workspaces from Team Explorer Home page](_img/create-work-workspaces/IC720119.png) + +3. In [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), choose the workspace the workspace you want to work in. + + ![Switching workspace in Source Control Explorer](_img/create-work-workspaces/IC700907.png) + +## Work from the command prompt + +You can create and manage your workspaces from the command prompt. You can also perform some tasks that are not possible in Visual Studio. For example, you can delete another user’s workspace if you have [sufficient permissions](../security/permissions.md#tfvc). See [Workspace Command](workspace-command.md), [Workspaces Command](workspaces-command.md), and [Workfold Command](workfold-command.md). + +## Q & A + + +#### Q: Why would I need to change the working folders? How should I do it? + +**A:** In general, you should map your entire team project to a single local folder under **c:\\Users\\***YourName***\\Source\\Workspaces\\**. For example: + +![Edit Workspace dialog box](_img/create-work-workspaces/IC720118.png) +Some tips on effective folder names: + +- Keep all folder, sub-folder, and file names short to simplify your work and avoid potential long-path issues that can occur with some types of code projects. + +- Avoid whitespace if you want make command-line operations a little easier to perform. + +If your team has a large and complex codebase or if you want your workspace to contain only the files you need to improve performance, you can [optimize your workspace](optimize-your-workspace.md). + +#### Q: Can I reuse and share folder mappings? + +**A:** Yes. If you want to reuse or share folder mappings with other team members, you can copy the folder mappings. Simply open the shortcut menu in the **Working folders** list and choose **Copy**. To reuse the folder mappings, paste them into another version control workspace or a [build definition workspace](../build-release/concepts/definitions/build/repository.md). To share the folder mappings with your teammates, paste them into a text file and then share the file. + +#### Q: What does “Cloaked” mean? + +**A:** Choose **Cloaked** to exclude that folder from your workspace. For details and examples, see [Optimize your workspace](optimize-your-workspace.md). + +#### Q: How do I add a folder non-recursively? + +**A:** [Optimize your workspace](optimize-your-workspace.md). + +#### Q: How do I choose advanced workspace options? + +**A:** When you choose the **Advanced** button, some additional options appear. + +- **Owner**: Only the owner of a workspace can use it. + + >**Tip:** Instead of changing the owner of your workspace when someone else needs to continue your work you can [suspend (or shelve)](suspend-your-work-manage-your-shelvesets.md) your work and then share the shelveset with them. + +- **Computer**: This box identifies the dev machine where the workspace exists, and it is read-only. You cannot move a workspace from one computer to another. However, if the name of your dev machine has changed and you want that change to appear in this field, run [tf workspaces /updatecomputername](workspaces-command.md). + +- **Permissions**: For a workspace you are using on a dev machine for a single developer, set this to **Private workspace**. Choose **Public workspace** if you want to use a single computer for a team to collaborate on an effort such as resolving a large number of conflicts. If you want any team member to be able to use a workspace but not check in their work, choose **Public workspace (limited)**. This option reserves check-in permission for the **Owner**. + +- **Location**: **Local** is the best choice in most cases. See [Decide between using a local or a server workspace](decide-between-using-local-server-workspace.md). + +- **File Time**: + + - Choose **Checkin** if you want the date and time stamp of each file to generally match the stamp of the changeset of the version in your workspace. A few issues and exceptions are: + + - When you modify the local file, the date and time stamp will match the date and time when you modified the file. + + - This feature is available only if you are using Visual Studio 2012 or later and Visual Studio Team Foundation Server 2012 or later. + + - The setting does not apply to folders, unless there is a pending add or delete operation to a file contained by the folder. + + - You might not be able to build your code project incrementally. Instead, you will have to rebuild). + + - Choose **Current** if you want the date and time stamp to match the date and time when you last modified the local file. For example, a team member checked in the latest change to the file on Monday. On Tuesday, you perform a get operation to update the file. The date and time stamp is set to Tuesday. + +#### Q: Can I use the same workspace in multiple instances of Visual Studio? + +**A:** Although Visual Studio does not block you from running multiple instances against the same workspace, this usage is not supported. Also, working this way is more likely to cause problems if you are using a local workspace. + +#### Q: How do I add code, get code, develop my app, and check in? + +[Add files to the server](add-files-server.md), [download files from the server](develop-your-app-team-foundation-version-control.md), [develop your app](develop-your-app-team-foundation-version-control.md), and [check in](check-your-work-team-codebase.md). + +#### Q: I work at a remote site. Is there any way I can save bandwidth? + +**A:** [Install Team Foundation Proxy and set up a remote site](../tfs-server/install/install-proxy-setup-remote.md). diff --git a/docs/tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md b/docs/tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md new file mode 100644 index 00000000000..c01ed72f3c5 --- /dev/null +++ b/docs/tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md @@ -0,0 +1,294 @@ +--- +title: Suspend work, fix a bug, and conduct a code review +description: Day in the life of a devops developer. Suspend work, fix a bug, and conduct a code review. +ms.assetid: 2fc2a1ff-70a2-4b4e-8dff-73238628f956 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.topic: get-started-article +ms.manager: douge +ms.author: routlaw +ms.date: 08/25/2016 +--- + +# Day in the life of a devops developer: suspend work, fix a bug, and conduct a code review + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +A powerful one-click way to switch your working context from one thread of work to another is available in Visual Studio Premium and Visual Studio Ultimate with Team Foundation Server. Also, team members can easily exchange messages about proposed changes to the code. This topic illustrates these features, continuing a tutorial that follows members of a fictitious agile team for a day. + +[Peter has been busy writing some code to fulfill a backlog item task.](day-life-alm-developer-write-new-code-user-story.md) However, [his colleagues have found a bug](day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md) that is blocking them, and he wants to fix it immediately. He suspends the work that he's doing and fixes the bug. He asks Julia to review the fix and, after the review, checks in the fix and resumes work on his original task. + +>**Note:** +> The My Work and Code Review features that Peter uses are available only in Visual Studio Premium and Visual Studio Ultimate. + +## Suspend current work + +As Peter works on a backlog item, Julia comes to discuss a bug that is blocking her. It is in an area with which Peter is familiar, so he creates a task to fix the bug and assigns it to himself. He decides to start work on the fix immediately. + +Before he starts to work on the new bug, Peter wants to make sure that his current work is set aside in a safe place on the team’s server. On the **My Work** page, Peter chooses **Suspend** to save (on Team Foundation Server): + +- All the work he has done, including changes to code, tests, and other files. + +- Open solutions, windows, breakpoints, watch window variables, and other bits of Visual Studio state. + +Now that his workspace is clean, Peter drags the new task from **Available Work Items** to **In Progress Work**. He’s ready to research and write the fix. + +>**Note:** +> Your working context is linked to the work items that show as In Progress on the My Work page. By using **Suspend** and **Resume**, you can quickly switch between different tasks. Your open solutions and files, code changes, and Visual Studio layout are all switched together. + +### To suspend current work and begin work on a different task + + ![Suspending some work](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591024.png) +1. **Connect:** If you are not already connected to the team project that you want to work in, then [connect to the team project](../connect/connect-team-projects.md): + + 1. In **Team Explorer**, choose ![Home icon](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC547418.png) **Home**, and then choose ![My Work icon](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC588354.png) **My Work**. + +2. **Suspend** your current task: + + 1. In the **In Progress Work** section, choose **Suspend**. + + 2. In the box that appears, specify the name that you want to give this set of suspended work, and then choose the **Suspend** button. The default name is your currently in progress work item. + +3. **Start work on a new task**, bug, or other work item: + + 1. Before selecting a work item, you might want to: + + - Create a new task or other work item by choosing **New** under **Available Work Items**; or + + - Select a different query under **Available Work Items**. + + 2. Drag a work item from **Available Work Items** to **In Progress Work**. + + Alternatively, you can switch to a work item that you previously suspended by dragging it from under **Suspended Work**. + +>**Tip:** +> The currently In Progress work items link to your current code changes and Visual Studio state. To allow Visual Studio to help you organize your work, make sure that the appropriate items are in the In Progress state when you switch from one task to another. + +## Investigate the bug + +Peter opens and reads the bug work item. According to the description that has been written by a member of the test team, a paid invoice is sometimes incorrectly flagged as unpaid. There is a lab environment snapshot attached to the bug work item. Peter is able to open the virtual machines on which the test was run, see the incorrect invoice, and step back through the IntelliTrace log. He traces the fault to the following method: + + public class LocalMath + { + public static bool EqualTo(double a, double b) + { + return a == b; + } + +From the IntelliTrace log, Peter sees that sometimes the method returns false because the parameters differ by an extremely small amount. Peter knows that rounding errors of this kind are unavoidable in floating point arithmetic, and that it is bad practice to test floating point numbers for equality. + +### +## Augment the tests to show the error +When a bug is found, it shows that there was a gap in the unit tests, or that the test did not match the users’ actual needs. Therefore, before fixing the bug, Peter adds a test that will demonstrate the presence of this error. + + + // Added 2012-02-02 for bug 654321: + /// <summary> + /// Make sure that number equality test allows for + /// small rounding errors. + /// </summary> + [TestMethod] + public void TestDoublesEqual() + { + // We allow a rounding error of 1 in 1000000: + TestEqual(1, 1e-7, true); // Less than allowed error + TestEqual(1, 1e-5, false); // More than allowed error + TestEqual(1000, 1e-7, true); // Less than allowed error + TestEqual(1000, 1e-5, false); // More than allowed error + } + private void TestEqual(double value, double error, bool result) + { + // Try different combinations of error and value: + Assert.IsTrue(result == LocalMath.EqualTo(value + error, value)); + Assert.IsTrue(result == LocalMath.EqualTo(value, value + error)); + Assert.IsTrue(result == LocalMath.EqualTo(value - error, value)); + Assert.IsTrue(result == LocalMath.EqualTo(value, value - error)); + } + +He runs the test and it fails as expected. + +![Unit Test Explorer showing failed test for equal](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675827.png) + +### +## Make the tests pass +Peter fixes the code: + + public static bool EqualTo(double a, double b) + { + // Allow for rounding errors. + // For example, a == 2.0 and b = 1.99999999999 + + const double allowedError = 1/1000000; + return System.Math.Abs(a - b) < allowedError; + } + +The test now passes: + +![Unit Test Explorer showing passed test for equal](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675828.png) + +## Request a code review + +Peter is satisfied with his fix for the bug, but he does not check in his work yet. His team uses code reviews to increase overall code quality and reduce the risk of creating more bugs, so Peter uses Team Explorer to request a code review from his team mates Julia and Adam. + +### To request a code review + + ![My Work page - Request Review link. New Code Review page - Enter the name of a reviewer dropdown, Enter a description (optional) textbox, Submit Request button.](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592394.png) +1. In **Team Explorer**, on the **My Work** page, choose **Request Review**. + + The **New Code Review** page appears. + +2. ![Reviewer](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532202.gif) Specify one or more reviewers. + +3. ![Code Review](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532203.gif) Specify the name of the review. + +4. ![Area path](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532204.gif) Specify the area path. + +5. ![Comment](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC532205.gif) Specify a comment to your reviewers. + +6. Choose **Submit Request**. + +The reviewers will be notified of the request by email. + +You can also request a code review of suspended work, a shelveset, or a changeset. To see a list of changesets, open **Source Control Explorer** and choose the **History** button. + +## Accept or decline a code review + +Julia receives the code review request and accepts it. She reviews the code, writes some comments at the file- and code-block levels, and then sends the code review back to Peter. Adam is too busy to review the code and declines. + +In her comments, Julia points out that the test is wrong. The allowable error should be a specified fraction of the input values, not a constant quantity. So the test should multiply the error by the value. + + // We allow a rounding error of 1 in 1000000 + // as a fraction of the value: + TestEqual(1, 1e-7, true); // Less than allowed error + TestEqual(1, 1e-5, false); // More than allowed error + TestEqual(1000, 1000*1e-7, true); // Less than allowed error + TestEqual(1000, 1000*1e-5, false); // More than allowed error + +>**Tip:** +> Notice that the team members use the tests as a focus for discussion. If the tests are correct and sufficient, the code will be also. Unlike the code, each test represents a separate case. For this reason, the tests are often easier to discuss than the code. + +### +## To perform a code review![My Work page - code review item. Code Review page - Decline link, Comment, Decline button.](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591278.png)![Diff window. Code Review page - Accept link, Overall comment, code block comment](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592880.png) +1. In **Team Explorer**, on the **My Work** page, go to the **My Code Reviews & Requests** section and open the request. + +2. On the **Code Review** page, you can: + + - Choose **Accept** or **Decline** to notify the author whether you will perform the review. + + - Choose **Add Reviewer** to add other reviewers to the code–review request. + + - View the changes to each file that has been updated for this work item. + + - Expand **Comments** to discuss the changes with the author and other reviewers. + + - Choose **Add Overall Comment** + + -or- + + Select a block of code and then choose **Add Comment** from the shortcut menu. + + <!-- --> + + - Choose **Send Comments** to make your contributions visible to the author and other reviewers. + + - Choose **Send and Finish** to complete your review, indicating whether the code needs more work. + +## Respond to a code review + +Peter receives and responds to the code review from Julia. + +### To respond to a code review + +The reviewers and author of the code can exchange comments as often as they like. The review ends when the author closes it. With each contribution to the discussion, the other participants will be notified by email. + +![My Work page - code review item. Code Review page - Overall comment, file comment, Close Review link.](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592517.png) +1. In **Team Explorer**, on the **My Work** page, go to the **Code Reviews & Request** section and double-click the request. + + You can also open the shortcut menu for the request and choose **Open**. + +2. Read the comments and reply to them as needed. To reply to a comment, choose **Reply**, enter your comment in the box that appears, and then choose **OK**. To send your comments, choose **Send Comments**. + +3. To view a file and see the code-blocks that have comments, or to edit a file, go to the **Comments** section. In the **Files** sub-section, open the shortcut menu for the file and choose either **Compare (Read-Only)** or **Edit File**. + +4. When you and the other reviewers finish responding to each other’s comments and you are ready to close the review, click **Close Review**, and then choose either: + + - **Complete** to indicate that the review is finished. + + - —or— + + - **Abandon** to indicate you are canceling the review. + +## Fix the test and the code + +Having read Julia’s comments, Peter fixes his unit test as she suggests. The test now fails. This shows that the code is not yet correct. + +Peter fixes the code: + + /// <summary> + /// Returns true if two numbers are equal. + /// </summary> + public static bool EqualTo(double a, double b) + { + // Allow for rounding errors. + const double allowedErrorMultiple = 1/1000000; + double allowedError = (System.Math.Abs(a) + System.Math.Abs(b)) * allowedErrorMultiple/2; + return System.Math.Abs(a - b) < allowedError; + } + +The test passes once again: + +![Unit Test Explorer showing passed test for equal](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC675828.png) + +>**Tip:** +> To fix a bug, follow the same practice as in code development. Write a test that fails and then make the test pass. Check in the code and the tests only when the tests pass. + +Peter now turns his attention to the test case in which the bug was discovered. The steps to reproduce the bug are clearly described in the test case work item. He follows the steps and discovers that the invoices are correctly listed. + +## Check in the fix + +Peter checks in the fixed code and the unit tests. The state of the bug is automatically set to **Resolved**, and the **Assigned To** value is automatically reassigned to the member of the test team who discovered the bug. That team member will verify that the bug has been fixed and close the work item. + +### To check in the fix + + ![Checking in an update to fix a bug](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC593474.png) +1. In **Team Explorer**, on the **My Work** page, choose **Check In**. + +2. Review the contents of the **Pending Changes** page to make sure that: + + - All relevant changes are listed in **Included Changes** + + - All relevant work items are listed in **Related Work Items**. + +3. Specify a **Comment** to help your team understand the purpose of these changes when they look at the version control history of the changed files and folders. + +4. Choose **Check In**. + +## Resume work on a task + +Peter resumes work on his task. He is able to get back to work quickly because all his code changes are restored to his workspace along with important bits of state such as open windows, breakpoints, and watch window variables. + +### To resume work on a task + + ![Resuming and completing a task](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC591026.png) +- In **Team Explorer**, on the **My Work** page, find the **Suspended & Shelved Work** list. Open the shortcut menu for the item. You have two choices: + + - If you want to resume the suspended work and automatically suspend any pending changes in your workspace, choose **Resume**. + + - If you want to merge the suspended work with pending changes already in your workspace, choose **Merge with In Progress**. + +### When you resume your work + + ![Panes affected by suspending a work item.](_img/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review/IC592393.png) +When you resume your work, Visual Studio restores: + +- Your open solution + +- Your code changes + +- The state and position of open windows + +- Breakpoints + +- Watch window variables and expressions + +- Bookmarks diff --git a/docs/tfvc/day-life-alm-developer-write-new-code-user-story.md b/docs/tfvc/day-life-alm-developer-write-new-code-user-story.md new file mode 100644 index 00000000000..f955213a892 --- /dev/null +++ b/docs/tfvc/day-life-alm-developer-write-new-code-user-story.md @@ -0,0 +1,516 @@ +--- +title: Write new code for a user story +description: A day in the life of an devops developer. Write new code for a user story. +ms.assetid: 1407effb-0d9b-451b-97b0-b40e0c48594c +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Day in the life of a devops developer: write new code for a user story + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Are you a new user of Visual Studio and Team Foundation Server (TFS)? Are you wondering how you and your team can get maximum benefit from the most recent version of these tools to build your app? + +Then take a few minutes to walk step-by step through this two-chapter tutorial and follow a day in the lives of Peter and Julia, two developers at Fabrikam Fiber—a fictitious company that provides cable television and related services. You’ll see examples of how you can use Visual Studio and TFS to check out and update code, suspend work when you’re interrupted, request a code review, check in your changes, and perform other tasks. + +**The story so far** +The team recently began [adopting Visual Studio and Team Foundation Server for devops](https://msdn.microsoft.com/library/dd286491). They set up their server and client machines, created a backlog, planned an iteration, and completed other planning necessary to begin developing their app. + +**Overview of this chapter** +Peter briefly reviews his backlog and selects the task he will work on today. He writes unit tests for the code he plans to develop. Typically, he runs the tests several times in an hour, gradually writing more detailed tests and then writing the code that makes them pass. He often discusses the interface of his code with colleagues who will use the method he is writing. + +>**Note:** +>The My Work and Code Coverage features that are discussed in this topic are available only in Visual Studio Premium and Visual Studio Ultimate. + +## Review personal backlog and prepare tasks to begin work + +In **Team Explorer**, Peter opens the **My Work** page. The team has agreed that, during the current sprint, Peter will work on **Evaluate invoice status**, a top-priority item in the product backlog. Peter decides to start with ** Implement math functions**, a child task of the top-priority backlog item. He drags this task from the **Available Work Items** list into the **In Progress Work Items & Changes** list. + +### To review personal backlog and prepare tasks to begin work + + ![To Do List on My Work Page in Team Navigator](_img/day-life-alm-developer-write-new-code-user-story/IC591023.png) + +1. In **Team Explorer**: + 1. If you are not already connected to the team project that you want to work in, then [connect to the team project](../connect/connect-team-projects.md). + 2. Choose ![Home icon](_img/day-life-alm-developer-write-new-code-user-story/IC547418.png) **Home**, and then choose ![My Work icon](_img/day-life-alm-developer-write-new-code-user-story/IC588354.png) **My Work**. +2. On the **My Work** page, drag the task from the **Available Work Items** list to the **In Progress Work Items** section. + + You can also select a task in the **Available Work Items** list and then choose **Start**. + +### Draft Incremental Work Plan + +Peter usually develops code in a series of small steps. Each step typically takes no longer than an hour, and might take as little as ten minutes. In each step, he writes a new unit test and changes the code that he is developing so that it passes the new test, in addition to the tests he has already written. Sometimes he writes the new test before changing the code, and sometimes he changes the code before writing the test. Sometimes he refactors. That is, he just improves the code without adding new tests. He never changes a test that passes, unless he decides that it did not correctly represent a requirement. + +At the end of every small step, he runs all the unit tests that are relevant to this area of the code. He does not consider the step complete until every test passes. + +However, he will not check the code into Team Foundation Server until he has finished the entire task. + +Peter writes down a rough plan for this sequence of small steps. He knows that the exact details and order of the later ones will probably change as he works. Here is his initial list of steps for this particular task: +1. Create test method stub—that is, just the signature of the method. +2. Satisfy one specific typical case. +3. Test broad range. Make sure that the code responds correctly to a large range of values. +4. Exception on negative. Deal gracefully with incorrect parameters. +5. [Code coverage](day-life-alm-developer-write-new-code-user-story.md#coverage). Make sure that at least 80% of the code is exercised by the unit tests. + +Some of his colleagues write this kind of plan in comments in their test code. Others just memorize their plan. Peter finds it useful to write his list of steps in the Description field of the Task work item. If he should have to switch temporarily to a more urgent task, he knows where to find the list when he is able to return to it. + +## Create the first unit test + +Peter begins by creating a unit test. He begins with the unit test because he wants to write an example of code that uses his new class. + +This is the first unit test for the class library that he is testing, so he creates a new unit test project. He opens the **New Project** dialog box and chooses **Visual C\#**, **Test**, and then **Unit Test Project**. + +![Unit Test selected in New Project dialog](_img/day-life-alm-developer-write-new-code-user-story/IC591729.png) + +The unit test project provides a C\# file into which he can write his example. At this stage, he just wants to illustrate how one of his new methods will be invoked: + +**C\#** + + using System; + using Microsoft.VisualStudio.TestTools.UnitTesting; + + namespace Fabrikam.Math.UnitTest + { + [TestClass] + public class UnitTest1 + { + [TestMethod] + // Demonstrates how to call the method. + public void SignatureTest() + { + // Create an instance: + var math = new Fabrikam.Math.LocalMath(); + + // Get a value to calculate: + double input = 0.0; + + // Call the method: + double actualResult = math.SquareRoot(input); + + // Use the result: + Assert.AreEqual(0.0, actualResult); + } + } + } + +He writes the example in a test method because, by the time he has written his code, he wants the example to work. + +### To create a unit test project and methods + +Usually you would create a new test project for each project that is being tested. If a test project already exists, you can just add new test methods and classes. + +This procedure uses the Visual Studio Unit Test Framework, but you can also use frameworks from other providers. Test Explorer works equally well with other frameworks, provided you install the appropriate adapter. + +- Create a Test project, if it does not already exist. + - In the **New Project** dialog box, choose a language such as **Visual Basic**, **Visual C++** or **Visual C\#**. Choose **Test** and then **Unit Test Project**. +- Add your tests to the test class that is provided. Each unit test is one method. + + Each unit test must be prefixed by the `TestMethod` attribute, and the unit test method should have no parameters. You can use any name that you want for a unit test method: + + **C\#** + + [TestMethod] + public void SignatureTest() + {...} + + **VB** + + <TestMethod()> + Public Sub SignatureTest() + ... + End Sub + +- Each test method should call a method of the `Assert` class, to indicate whether it has passed or failed. Typically, you verify that the expected and actual results of an operation are equal: + + **C\#** + + Assert.AreEqual(expectedResult, actualResult); + + **VB** + + Assert.AreEqual(expectedResult, actualResult) + +- Your test methods can call other ordinary methods that do not have the `TestMethod` attribute. +- You can organize your tests into more than one class. Each class must be prefixed by the `TestClass` attribute. + + **C\#** + + [TestClass] + public class UnitTest1 + { ... } + + **VB** + + <TestClass()> + Public Class UnitTest1 + ... + End Class + +For more information about how to write unit tests in C++, see [Writing Unit tests for C/C++ with the Microsoft Unit Testing Framework for C++](https://msdn.microsoft.com/library/hh598953). + +## Create a stub for the new code + +Next, Peter creates a class library project for his new code. There is now a project for the code under development and a project for the unit tests. He adds a project Reference from the test project to the code under development. + +![Solution Explorer with Test and Class projects](_img/day-life-alm-developer-write-new-code-user-story/IC612257.png) + +In the new project, he adds the new class and a minimal version of the method that will at least allow the test to build successfully. The quickest way to do that is to generate a class and method stub from the invocation in the test. + +**C\#** + + public double SquareRoot(double p) + { + throw new NotImplementedException(); + } + +### To generate classes and methods from tests + +First, create the project where you want to add the new class, unless it already exists. + +#### To generate a class + +1. Place the cursor on an example of the class you want to generate, for example, `LocalMath`. On the shortcut menu, choose **Generate Code**, **New Type**. +2. In the **New Type** dialog box, set **Project** to the class library project. In this example, it is **Fabrikam.Math**. + +#### To generate a method + +- Place the cursor on a call to the method, for example, `SquareRoot`. On the shortcut menu, choose **Generate Code**, **Method Stub**. + +## Run the first test + +Peter builds and runs the test by pressing CTRL+R, T. The test result shows a red Failed indicator and the test appears under the list of **Failed Tests**. + +![Unit Test Explorer showing one failed test](_img/day-life-alm-developer-write-new-code-user-story/IC675817.png) + +He makes a simple change to the code: + +**C\#** + + public double SquareRoot(double p) + { + return 0.0; + } + +He runs the test again and it passes: + +![Unit Test Explorer with one passed test](_img/day-life-alm-developer-write-new-code-user-story/IC675818.png) + +### To run unit tests + + +![Test Explorer showing Run All button](_img/day-life-alm-developer-write-new-code-user-story/IC675819.png) + +- On the **Test** menu, choose **Run**, **All Tests**. + - - or - +- If Test Explorer is open, choose **Run All**. + - - or - +- Place the cursor in a test code file and press **CTRL+R, T**. +- If a test appears under **Failed Tests**: + + Open the test, for example, by double-clicking the name. + + The point at which the test failed is displayed. + +**To see a full list of tests,** choose **Show All**. To return to the summary, choose the **HOME** view. + +**To see the details of a test result,** select the test in Test Explorer. + +**To navigate to the code of a test,** double-click the test in Test Explorer, or choose **Open Test** on the shortcut menu. + +**To debug a test,** open the shortcut menu for one or more tests, and then choose **Debug Selected Tests**. + +**To run tests in the background whenever you build the solution,** toggle **Run Tests after Build**. Tests that previously failed are run first. + +## Agree the Interface + +Peter calls his colleague Julia on Lync, and shares his screen. She will be using his component. He shows his initial example. + +Julia thinks the example is OK, but comments, "A lot of functions would pass that test." + +Peter replies, "The first test is just to make sure that the name and parameters of the function are correct. Now we can write a test that captures the main requirement of this function." + +Together they write the following test: + +**C\#** + + [TestMethod] + public void QuickNonZero() + { + // Create an instance to test: + LocalMath math = new LocalMath(); + + // Create a test input and expected value: + var expectedResult = 4.0; + var inputValue = expectedResult * expectedResult; + + // Run the method: + var actualResult = math.SquareRoot(inputValue); + + // Validate the result: + var allowableError = expectedResult/1e6; + Assert.AreEqual(expectedResult, actualResult, allowableError, + "{0} is not within {1} of {2}", actualResult, allowableError, expectedResult); + } + +>**Tip:** +>For this function, Peter is using Test First Development, in which he first writes the unit test for a feature, and then writes code that satisfies the test. In other cases, he finds that this practice is not realistic, so instead, he writes the tests after he writes the code. But he considers it very important to write unit tests—whether before or after the code—because they keep the code stable. + +## Red, Green, Refactor… + +Peter follows a cycle in which he repeatedly writes a test and confirms that it fails, writes code to make the test pass, and then considers refactoring—that is, improving the code without changing the tests. + +### Red + +Peter presses CTRL+R, T to run the new test that he created with Julia. After he writes any test, he always runs it to make sure that it fails before he writes the code that makes it pass. This is a practice he learned after he forgot to place assertions in some tests he’d written. Seeing the Fail result gives him confidence that when he makes it pass, the test result correctly indicates that a requirement has been satisfied. + +Another useful practice is to set **Run Tests after Build**. This option runs the tests in the background every time you build the solution, so that you have a continual report of the test status of your code. Peter was at first suspicious that it might make Visual Studio slow to respond, but he finds that this rarely happens. + +![Unit Test Explorer with one failed test](_img/day-life-alm-developer-write-new-code-user-story/IC675829.png) + +### Green + +Peter writes his first attempt at the code of the method that he is developing: + +**C\#** + + public class LocalMath + { + public double SquareRoot(double x) + { + double estimate = x; + double previousEstimate = -x; + while (System.Math.Abs(estimate - previousEstimate) > estimate / 1000) + { + previousEstimate = estimate; + estimate = (estimate * estimate - x) / (2 * estimate); + } + return estimate; + } + + +Peter runs the tests again and all the tests pass: + +![Unit Test Explorer with two passed tests](_img/day-life-alm-developer-write-new-code-user-story/IC675830.png) + +### Refactor + +Now that the code performs its main function, Peter looks at the code to find ways of making it perform better, or to make it easier to change in the future. He realizes that he can reduce the number of calculations performed in the loop: + + public class LocalMath + { + public double SquareRoot(double x) + { + double estimate = x; + double previousEstimate = -x; + while (System.Math.Abs(estimate - previousEstimate) > estimate / 1000) + { + previousEstimate = estimate; + estimate = (estimate + x / estimate) / 2; + //was: estimate = (estimate * estimate - x) / (2 * estimate); + } + return estimate; + } + +He verifies that the tests still pass: + +![Unit Test Explorer with two passed tests](_img/day-life-alm-developer-write-new-code-user-story/IC675830.png) + +>**Tip:** +>Every change you make while you are developing the code should be either a refactoring or an extension: +><ul><li>Refactoring means that you do not change the tests because you are not adding new functionality.</li> +><li>Extension means adding tests and making the code changes that are necessary to pass both existing and new tests.</li></ul> +> +>If you are updating existing code to requirements that have changed, you will also delete old tests that no longer represent the current requirements. +> +>Avoid changing tests that have already passed. Instead, add new tests. Only write tests that represent a real requirement. +> +>Run the tests after every change. + +### … and repeat + +Peter continues his series of extension and refactoring steps, using his list of small steps as a rough guide. He doesn’t always perform a refactoring step after each extension, and he sometimes performs more than one refactoring step in succession. But he always runs the unit tests after each change to the code. + +Sometimes he adds a test that requires no change to the code, but that adds to his confidence that his code works correctly. For example, he wants to make sure that the function works over a broad range of inputs. He writes more tests, such as this one: + +**C\#** + + [TestMethod] + public void SqRtValueRange() + { + LocalMath math = new LocalMath(); + for (double expectedResult = 1e-8; + expectedResult < 1e+8; + expectedResult = expectedResult * 3.2) + { + VerifyOneRootValue(math, expectedResult); + } + } + private void VerifyOneRootValue(LocalMath math, double expectedResult) + { + double input = expectedResult * expectedResult; + double actualResult = math.SquareRoot(input); + Assert.AreEqual(expectedResult, actualResult, expectedResult / 1e6); + } + +This test passes the first time it runs: + +![Unit Test Explorer with three passed tests](_img/day-life-alm-developer-write-new-code-user-story/IC675831.png) + +Just to make sure this result is not a mistake, he temporarily introduces a small error into his test to make it fail. After seeing the failure, he fixes it again. + +>**Tip:** +>Always make a test fail before you make it pass. + +### Exceptions + +Peter now moves on to writing tests for exceptional inputs: + + [TestMethod] + public void RootTestNegativeInput() + { + LocalMath math = new LocalMath(); + try + { + math.SquareRoot(-10.0); + } + catch (ArgumentOutOfRangeException) + { + return; + } + catch + { + Assert.Fail("Wrong exception on negative input"); + return; + } + Assert.Fail("No exception on negative input"); + } + +This test puts the code into a loop. He has to use the **Cancel** button in Test Explorer. This terminates the code within 10 seconds. + +Peter wants to make sure that an endless loop could not happen on the build server. Although the server imposes a timeout on a complete run, it is a very long timeout, and would cause substantial delay. Therefore, he adds an explicit timeout to this test: + +**C\#** + + [TestMethod, Timeout(1000)] + public void RootTestNegativeInput() + {... + +The explicit timeout makes the test fail. + +Peter then updates the code to deal with this exceptional case: + +**C\#** + + public double SquareRoot(double x) + { + if (x <= 0.0) + { + throw new ArgumentOutOfRangeException(); + } + +### Regression + +The new test passes, but there is a regression. A test that used to pass now fails: + +![Unit Test failed which previously passed](_img/day-life-alm-developer-write-new-code-user-story/IC675832.png) + +Peter finds and fixes the mistake: + +**C\#** + + public double SquareRoot(double x) + { + if (x < 0.0) // not <= + { + throw new ArgumentOutOfRangeException(); + } + +After it is fixed, all the tests pass: + +![Unit Test Explorer with four passed tests](_img/day-life-alm-developer-write-new-code-user-story/IC675833.png) + +>**Tip:** +>Make sure every tests passes after every change that you make to the code. + +<a name="coverage"> + +## Code coverage + +At intervals during his work, and finally before he checks in the code, Peter obtains a Code Coverage report. This shows how much of the code has been exercised by his tests. + +Peter’s team aims for coverage of at least 80%. They relax this requirement for generated code, because it can be difficult to achieve a high coverage for this type of code. + +Good coverage is not a guarantee that the full functionality of the component has been tested, and it does not guarantee that the code will work for every range of input values. Nevertheless, there is a fairly close correlation between coverage of code lines and coverage of the behavioral space of a component. Therefore, good coverage strengthens the team’s confidence that they are testing most of the behavior that they should. + +To get a code coverage report, on the **Tests** menu, choose **Run**, **Analyze Code Coverage for All Tests**. Then run all the tests again. + +![Code Coverage result and Show Color button](_img/day-life-alm-developer-write-new-code-user-story/IC592882.png) + +Peter gets a total coverage of 86%. When he expands the total in the report, it shows that the code he is developing has coverage of 100%. This is very satisfactory, because the important score is for the code under test. The uncovered sections are actually in the tests themselves. By toggling the **Show Code Coverage Coloring** button, Peter can see which parts of the test code have not been exercised. However, he decides that these sections are unimportant for coverage because they are in the test code and would only be used if an error is detected. + +To verify that a specific test reaches into specific branches of the code, you can set **Show Code Coverage Coloring** and then run the single test by using the **Run** command on its shortcut menu. + +## When are we done? + +Peter continues to update the code in small steps until he is satisfied that: +- All the available unit tests pass. + + In a project with a very large set of unit tests, it can be impractical for a developer to wait for them all to run. Instead, the project operates a gated check-in service, in which all the automated tests are run for each checked-in shelveset before it is merged into the source tree. The check-in is rejected if the run fails. This allows the developer to run a minimal set of unit tests on his own machine, and then proceed with other work, without running the risk of breaking the build. For more information, see [Use a gated check-in build process to validate changes](../build-release/concepts/definitions/build/repository.md). +- Code coverage meets the team’s standard. 75% is a typical project requirement. +- His unit tests simulate every aspect of the behavior that is required, including both typical and exceptional inputs. +- His code is easy to understand and extend. + +When all these criteria are met, Peter is ready to check his code into source control. + +### Principles of code development with unit tests + +Peter applies the following principles while developing code: +- Develop unit tests along with the code, and run them frequently during development. The unit tests represent the specification of your component. +- Don’t change unit tests, unless the requirements have changed or the tests were wrong. Add new tests gradually as you extend the functionality of the code. +- Aim for at least 75% of your code to be covered by the tests. Look at the code coverage results at intervals, and before you check in source code. +- Check in your unit tests along with the code, so that they will be run by the continuous or regular server builds. +- Where practical, for each piece of functionality, write the unit test first. Do this before you develop the code that satisfies it. + +## Check in the changes + +Before checking in his changes, Peter again uses Lync to share his screen with his colleague Julia so she can informally and interactively review with him what he has created. The tests continue to be the focus of their discussion because Julia is primarily interested in what the code does, not how it works. Julia agrees that what Peter has written meets her needs. + +Peter checks in all changes he has made, including the both the tests and the code, and associates them with the task he has completed. The check-in queues the team’s automated team build system to validate his changes using the team’s **CI Build** build process. This build process helps the team minimize errors in their codebase by building and testing—in a clean environment separate from their development computers—every change the team makes. + +Peter is notified when the build is completed. In the build results window, he sees that the build succeeded and all the tests passed. + +### To check in the changes + + ![Checking in the pending changes](_img/day-life-alm-developer-write-new-code-user-story/IC591276.png) + +1. On the menu bar, choose **View**, **Team Explorer**. + +2. In **Team Explorer**, choose **Home** , and then choose **My Work**. + +3. On the **My Work** page, choose **Check In**. + +4. Review the contents of the **Pending Changes** page to make sure that: + + - All relevant changes are listed in **Included Changes** + + - All relevant work items are listed in **Related Work Items**. + +5. Specify a **Comment** to help your team understand the purpose of these changes when they look at the version control history of the changed files and folders. + +6. Choose **Check In**. + +### To continuously integrate the code + +For more information about how to define a continuous integration build process, see [Set up a CI build](../build-release/concepts/definitions/build/triggers.md). After you have set up this build process, you can choose to be notified about the results of team builds. + +![Peter is notified that CI Build succeeded](_img/day-life-alm-developer-write-new-code-user-story/IC558300.png) + +![CI Build results](_img/day-life-alm-developer-write-new-code-user-story/IC591277.png) + +For more information, see [Run, monitor, and manage builds](../build-release/overview.md). + +[Next (Suspend work, fix a bug, and conduct a code review)](day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md) diff --git a/docs/tfvc/decide-between-using-local-server-workspace.md b/docs/tfvc/decide-between-using-local-server-workspace.md new file mode 100644 index 00000000000..22dd51b28be --- /dev/null +++ b/docs/tfvc/decide-between-using-local-server-workspace.md @@ -0,0 +1,124 @@ +--- +title: Decide between using a local or a server workspace +description: Decide between using a local or a server workspace +ms.assetid: 492696f5-cafe-4090-af07-6dbbb0bd6a86 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Decide between using a local or a server workspace + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +When you [create or edit a workspace](create-work-workspaces.md), you can specify whether its location is **Local** or **Server**. In most cases, local is best because it provides several advantages. Most notably, you can perform core version control operations even when you're not connected to your Team Foundation Server. + +<a name="local"></a> + +## Why should I use a local workspace? + +When you use a local workspace, you get the following advantages: + +**Work offline easily.** You can quickly begin editing a file when your network connection is unavailable or unreliable. From Solution Explorer you can add, edit, delete, rename, undo, and compare items in your workspace even when you're not connected to your Team Foundation Server. + +**Easily restore files that you have deleted locally.** To restore locally deleted files, just [get your files](develop-your-app-team-foundation-version-control.md). + +**Visual Studio automatically detects changes.** When you add or delete files outside of Visual Studio, the program automatically detects these changes. + +>**Important:** +>One drawback to using a local workspace is that performance degrades as the number of items increases. See the next section for details. + +## When might I need to use a server workspace? + +When you use a server workspace, Visual Studio keeps only one copy of each file. This can significantly reduce disk space usage and improve performance when you have a lot of items. We recommend that you use a server workspace if: + +- Your workspace contains more than 100,000 items. + +- You want to use Visual Studio 2010 or earlier versions to work with the workspace. + +- You need to use the **Enable get latest on check-out** option. + +**Work offline with difficulty and with poor performance.** When you are offline in a server workspace, you cannot work with your local files because they are read-only until you check them out. You can check out files only from Solution Explorer, and only after you switch to offline mode (as explained below). While you're offline, you can't perform any other operations, such as add, delete, rename, or undo. + +>**Tip:** +You can improve responsiveness by enabling asynchronous checkout. For more information, see [Manage team project collection workspace settings for your team](decide-between-using-local-server-workspace.md#Admin_Settings). + +### Switch to offline mode when using a server workspace + +When you use a server workspace and cannot connect to your Team Foundation Server, Source Control Explorer is disabled. However, if you have local copies of your files in your server workspace, you can still edit them from Solution Explorer. After the server becomes available again, you can check the changes into version control. + +>**Tip:** +If working offline is important to you, then you should consider using a local workspace instead of a server workspace See [Local Workspaces](decide-between-using-local-server-workspace.md#local) earlier in this topic. + +### To work with version-controlled files when the server is offline + +1. From your local working folder, open the solution that you want to work on. + + If the server is offline, the **Go Offline** dialog box appears. + +2. Choose **OK**, and then edit your solution files. + +3. On the **File** menu, choose **Save**. + +4. In the **Save of Read-Only File** dialog box, choose **Overwrite** to remove the write-protection from the file. + +### To commit your offline changes to the server when it is available + +1. In **Solution Explorer**, open the context menu for the solution or file, and then choose **Go Online**. + + The **Go Online** dialog box appears and shows the changes that you made offline. + +2. Under **Name**, select the check box for each change that you want to check in, and then choose **Go Online**. + + The changes that you made offline are added to Team Foundation version control as pending changes. + +3. In **Solution Explorer**, open the context menu for the files that you edited offline, and then choose **Check In** to commit the changes to the server. + +<a name="Admin_Settings"> + +## Manage team project collection workspace settings for your team + +If you are an [administrator](https://msdn.microsoft.com/library/ms253077), you can specify which type of workspace Visual Studio creates for your team members by default: Local or Server. You can also enable asynchronous checkout for your team’s server workspaces. + +1. On the menu bar, choose **Team**, **Team Project Collection Settings**, **Source Control**. + + The **Source Control Settings** dialog box appears. + +2. On the **Workspace Settings** tab, choose either the **Local** or **Server** option button. + +3. You can reduce the time the system takes to check out files to server workspaces by selecting **Enable asynchronous checkout in server workspaces**. If you select this option: + + - The PendChange permission is no longer enforced. + + - Checkout locks are disabled + +## Work from the command prompt + +- [Workspace Command](workspace-command.md) and [Workspaces Command](workspaces-command.md): Create and manage your workspaces from the command prompt. + +## Q & A + + +### Q: Someone checked out a file even though a check-out lock was applied to it. How did this happen? + +**A:** The use of local workspaces makes [check-out locks](understand-lock-types.md) un-enforceable. If you have [sufficient permissions](../security/permissions.md#tfvc) you can use the [workspaces command](workspaces-command.md) to see the local workspaces being used in your team project collection. + + tf workspaces /format:detailed /owner:* /collection:https://YourServer/YourCollection/ + +### Q: Why can’t I see when some members of my team of checked out a file? + +Pending changes of team members who use local workspaces are not visible to other team members in [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md). + +### Q: Is it OK to switch the location of my workspace? + +**A:** Yes, you can change the location of your workspace from server to local or from local to server whenever you need to. See [Create and work with workspaces](create-work-workspaces.md). + +### Q: Can I use the same workspace in multiple instances of Visual Studio? + +**A:** Although Visual Studio does not block you from running multiple instances against the same workspace, this usage is not supported. Also, working this way is more likely to cause problems if you are using a local workspace. + +### Q: How does a local workspace work? + +**A:** A local workspace caches the unmodified version of each of your files to enable you to edit, compare, and do other things without being connected to the server. diff --git a/docs/tfvc/delete-command-team-foundation-version-control.md b/docs/tfvc/delete-command-team-foundation-version-control.md new file mode 100644 index 00000000000..4b214226429 --- /dev/null +++ b/docs/tfvc/delete-command-team-foundation-version-control.md @@ -0,0 +1,84 @@ +--- +title: Delete Command (Team Foundation Version Control) +description: Delete Command (Team Foundation Version Control) +ms.assetid: c4cf7a59-26c8-490c-a065-279888019c36 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Delete Command (Team Foundation Version Control) + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Removes files and folders from the Team Foundation version control server and deletes them from the disk. + +> [!NOTE] +> The results of this command are not visible in other workspaces until you perform a check-in operation. For more information, see [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411). + +**Required Permissions** + +To use the **delete** command, you must have the **Check out** permission set to **Allow**. If you include the **/lock** option with a value other than *none*, you must have the **Lock** permission set to **Allow**. Additionally, you must own the workspace or have the global **Administer workspaces** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf delete [/lock:(none|checkin|checkout)] [/recursive] [/login:username,[password]] itemspec +## Parameters + +<table><thead> +<tr><th><p><strong>Argument</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><em>itemspec</em></p></td> + <td><p>Identifies the file or folder to delete from the Team Foundation version control server. For more information about how Team Foundation parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/4y2ash30)">Command-Line Options</a>.</p><p><strong>Note:</strong> You can specify more than one <em>Itemspec</em> argument.</p></td></tr> +<tr> + <td><p><em>username</em></p></td> + <td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>DOMAIN</em>\<em>UserName</em> or <em>UserName.</em></p></td></tr></tbody> +</table> + +<table><thead> +<tr><th><p><strong>Option</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><strong>/lock</strong></p></td> + <td><p>Prevents other users from checking in or checking out the specified items. For more information, see <a href="understand-lock-types.md">Understanding Lock Types</a>.</p><p>Lock Options:</p><ul><li><p><strong>None</strong></p><p>Default. No lock is applied. If you have placed a lock on the specified file, this option removes it. It does not remove a lock placed by someone else.</p></li><li><p><strong>Checkin</strong></p><p>Other users can check out the specified items but they cannot check in revisions to locked files until you release the lock by performing a check-in. If any other users have locked any one of the specified items, the lock operation fails.</p></li><li><p><strong>Checkout</strong></p><p>Prevents other users from checking in or checking out any one of the specified items until you release the lock by performing a check-in. If any other users have locked any one of the specified items, the lock operation fails.</p></li></ul></td></tr> +<tr> + <td><p><strong>/recursive</strong></p></td> + <td><p>Deletes all files and/or folders and subfolders that match the itemspec from the specified directory.</p><ul><li><p><strong>tf delete folder1\folder2 /recursive</strong> (where folder1\folder2 exists and is a directory) deletes all the files and subdirectories contained by folder1\folder2 and folder1\folder2 itself.</p></li><li><p><strong>tf delete folder1\folder2\filespec<em> /recursive</strong> deletes all files and subdirectories matching filespec contained in folder1\folder2 and each of its subdirectories, as well as all files and subdirectories contained within any directory that matches the filespec.</p><p>For example, in a workspace containing:</p><p>Folder1\AVeryLongDirectoryName (with some files inside) and Folder1\Folder2\AVeryImportantFile.txt</p><p><strong>tf delete 'Folder1\AVer</em>' /recursive</strong></p><p>deletes folder1\folder2\NeverDelete\AVeryImportantFile.txt because it matches the wildcard character.</p></li></ul></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td></tr></tbody> +</table> + +## Remarks +The **delete** command records a pending change of type "delete" in your workspace for the items that you have specified. When you commit a pending change of type "delete" to the Team Foundation version control server by using the** checkin** command, Team Foundation removes the item from the Team Foundation version control server but does not delete it permanently. You can locate deleted items in the Team Foundation version control server by using the Dir Command and you can restore deleted items using the [Undelete Command](undelete-command.md). + +If you have deleted an item in your workspace but have not checked in the change, you can restore the item to your workspace and remove the deletion from your list of pending changes using the [Undo Command](undo-command.md). + +You cannot delete an item for which another pending change exists. For example, a checked out file cannot be deleted. To delete such items, you must undo the current pending change using the **undo** command. + +When you check in a pending deletion, Team Foundation marks the file as deleted in the Team Foundation version control server. Subsequently running a **get** of the item from other workspaces (either by you or other users) deletes the item from those workspaces. + +When your *itemspec* specifies a folder, Team Foundation deletes all its files and subfolders and the files they contain, by default. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example deletes 314.cs on disk in the specified local workspace folder and then, when you check in the change, removes 314.c from the version control system non-permanently. + + c:\projects>tf delete 314.cs + +## See Also + +#### Tasks + +[Move, Rename, and Delete Version-Controlled Files and Folders](rename-move-files-folders.md) + +#### Reference + +[Undelete Command](undelete-command.md) + +[Undo Command](undo-command.md) + +[Dir Command](dir-command.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/delete-restore-files-folders.md b/docs/tfvc/delete-restore-files-folders.md new file mode 100644 index 00000000000..d1d2fcf4259 --- /dev/null +++ b/docs/tfvc/delete-restore-files-folders.md @@ -0,0 +1,119 @@ +--- +title: Delete or restore files and folders using TFVC +description: Delete or restore files and folders using Team Foundation Version control +ms.assetid: 8891c77c-490c-489c-99c7-860b4a92737c +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 12/05/2016 +--- + +# Delete or restore files and folders in Team Foundation Version Control (TFVC) + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +You can delete files and folders from TFVC and also restore them, from both in the workspace on your dev machine or on the server. + +**Requirements** + +See [Permissions and groups reference](../security/permissions.md). + +## Delete an item + +Before you delete an item: + +- ![](_img/delete-restore-files-folders/IC572373.png) Before you delete a file, look for a check mark icon ![](_img/delete-restore-files-folders/IC51402.gif), which indicates pending edits in the file . If there are pending edits, you should view them (open the context menu by right-clicking the file and choosing **Compare**) and make sure that you do not need them. If you think you might need the edits in the future, consider checking in the file before you delete it. + +- ![](_img/delete-restore-files-folders/important.png) If you delete a folder, the system will pend delete actions for any folders and files that it contains. + +- ![](_img/delete-restore-files-folders/important.png) If you delete a file on which other files have dependencies, the system will automatically pend delete actions for those files. For example, if you delete a form file, the code and resource file will also be pended for deletion. + +### To delete an item + +1. In either [Solution Explorer](develop-code-manage-pending-changes.md) or [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), browse to the folder or file that you want to delete. + +2. Select the items that you want to delete, open their context menu (right-click), and choose **Delete**. + + > [!TIP] + > If you are deleting a file from Solution Explorer, the following warning message may appear: <*file name*> **will be deleted permanently**. The file deletion will not be implemented on the server until you check in this change. + > If the file was checked in to version control before the delete, then you can recover the file. Choose **OK** if you want to proceed with deleting the file. + +3. When you are ready, [check in your changes](check-your-work-team-codebase.md). + +## Restore items deleted from Visual Studio + +> [!NOTE] +> If you're already checked in the delete of an item in TFVC, you can restore the deleted item from the server long as no one on your team has [destroyed](destroy-command-team-foundation-version-control.md) it. +> If you're not using TFVC, use [Solution Explorer](https://docs.microsoft.com/en-us/visualstudio/ide/solutions-and-projects-in-visual-studio#managing-projects-in-solution-explorer) to delete items and files in your Visual Studio solution. +> Files deleted through Solution Explorer are moved to the Recycle Bin on your computer, where they can be restored. +> Once restored from the Recycle Bin, right-click your solution in Solution Explorer and select **Add..** and then **Existing item...** to restore the file into your solution. + +### From Team Explorer + +Open the [Pending Changes](develop-code-manage-pending-changes.md) page in Team Explorer (**View**, then **Team Explorer**, then select **Pending Changes**). +Right-click the deleted items in the **Included Changes** area and choose **Undo...**. + +### From Source Control Explorer + +Open [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md) and browse to the folder where you deleted the file(s). Right-click the file and select **Undo Pending Changes..**. +Verify the checkboxes to make sure they include the deleted files, then select **Undo Changes** + +### Restore an item deleted from the server + +1. From the menu bar choose **Tools**, **Options**. + +2. On the **Options** dialog box, navigate to **Source Control**, **Visual Studio Team Foundation Server**. + +3. Select **Show deleted items in the Source Control Explorer**, and then choose **OK**. + +4. From the menu bar choose **View**, **Other Windows**, **Source Control Explorer**. + +5. In Source Control Explorer, navigate to the folder that contains the item you want to restore. + +6. Open the item’s context menu (select the item and right-click it) and then choose **Undelete**. + +## Restore TFVC managed items deleted from your dev machine outside of Visual Studio + +From time to time you may need to restore an item you have deleted outside Visual Studio (possibly by accident). The method you use to restore such an item depends on whether you are using a local or a server workspace. See [Decide between using a local or a server workspace](decide-between-using-local-server-workspace.md). + +### Use a local workspace to restore an item you deleted outside Visual Studio + +When you use a local workspace, Visual Studio detects and enables you to resolve changes you have made outside the system. + +### To use a local workspace to restore an item you deleted outside Visual Studio + +1. In Team Explorer, choose ![](_img/delete-restore-files-folders/IC547418.png) **Home**, and then choose **Pending Changes**. + +2. In the **Excluded Changes** section, choose the **Detected changes** link. + +3. In the **Promote Candidate Changes** dialog box, select an item for which **delete** appears in the **Change** column, open its context menu (right-click), and choose **Restore this item**. + +### Use a server workspace to restore an item you deleted outside Visual Studio + +When you accidentally delete an item outside Visual Studio and you are using a server workspace, when you try to open the item in Visual Studio you may see an error message such as: **TF10187: Could not open document** *file name* **The system cannot find the file specified.**. You can restore the item by getting it from the server. + +### To use a server workspace to restore an item you deleted outside Visual Studio + +1. In Source Control Explorer, browse to the folder that contains the deleted items. + +2. Open the context menu of the folder (select the folder and right-click it) and choose **Get Specific Version**. + +3. On the **Get** dialog box, select **Overwrite all files even if the local version matches the specified version**. + + Choose **Get**. + +> [!TIP] +> You can also use the [tf get /force](get-command.md) command. + +## Work from the command prompt + +- [Delete Command (Team Foundation Version Control)](delete-command-team-foundation-version-control.md) Delete a file from the server. + +- [Destroy Command (Team Foundation Version Control)](destroy-command-team-foundation-version-control.md) Permanently destroy an item. + +- [Undelete Command](undelete-command.md) Restore a file deleted from the server. + +- [Undo command](undo-command.md) Undo pending changes. + +- [Get command](get-command.md) Get files from the server. diff --git a/docs/tfvc/destroy-command-team-foundation-version-control.md b/docs/tfvc/destroy-command-team-foundation-version-control.md new file mode 100644 index 00000000000..9c25a6207db --- /dev/null +++ b/docs/tfvc/destroy-command-team-foundation-version-control.md @@ -0,0 +1,148 @@ +--- +title: Destroy Command (Team Foundation Version Control) +description: Destroy Command (Team Foundation Version Control) +ms.assetid: fc14da45-891e-4f18-bbc2-9829b80531db +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Destroy Command (Team Foundation Version Control) + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Use the **tf destroy** command to destroy, or permanently delete, version-controlled files from Team Foundation version control. + +The destroy action cannot be reversed. You must not destroy files that are still needed. Sometimes you have to clean up version control systems. For example, if some files are infected with a computer virus, you have to remove them permanently from version control. + +Before you run **tf destroy** without the **/keephistory** option, we recommend that you first delete the files you want to destroy. For more information, see [Delete Files and Folders from Version Control](delete-restore-files-folders.md). + +After you delete the files you can synchronize the Team Foundation warehouse. Otherwise, the warehouse will not be synchronized with the destroyed items. + +**Required Permissions** + +To use the **destroy** command, you must belong to the **Team Foundation Administrators** security group. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf destroy [/keephistory] <itemspec1>[;<versionspec>][<itemspec2>...<itemspecN>] + [/stopat:<versionspec>] [/preview] [/startcleanup] [/noprompt] [/silent] [/login:username,[password]] [/collection:TeamProjectCollectionUrl]] +## Parameters + +<table> +<thead> +<tr><th><p><strong>Argument</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><em>itemspec1</em> <em>[itemspec2…itemspecN]</em></p></td> + <td><p>Specifies the server path of the file or folder to be destroyed. Use multiple <em>itemspec</em> values to delete multiple items. For example, <code>tf destroy $/TeamProject1 $/teamProject2 $/TeamProject3</code>.</p><p>Local paths are not supported.</p></td></tr> +<tr> + <td><p><em>versionspec</em></p></td> + <td><p>Provides a version such as C58 for the <strong>/keephistory</strong> or <strong>/stopat</strong> options. The allowed values are date, tip, or a specific changeset. For more information about how Team Foundation parses a version specification to determine which items are within its scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p></td></tr> +<tr> + <td><p><em>username</em></p></td> + <td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>DOMAIN</em>\<em>UserName</em> or <em>UserName.</em></p></td></tr> +<tr> + <td><p><em>TeamProjectCollectionUrl</em></p></td> + <td><p>The URL of the team project collection that contains files that you want to destroy (for example, http://myserver:8080/tfs/DefaultCollection).</p></td></tr></tbody> +</table> + +<table><thead> +<tr><th><p><strong>Option</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><strong>/keephistory</strong></p></td> + <td><p>Optional. Specifies that the history of a file is preserved even as its contents are destroyed. This cannot be specified with the <strong>/preview</strong> option.</p></td></tr> +<tr> + <td><p><strong>/stopat</strong></p></td> + <td><p>Optional. Can be used only if <strong>/keephistory</strong> is specified also.</p><p>Specifies the file version for the file, and the files that follow thereafter, for which the history is preserved.</p><p>The default version for <strong>/stopat</strong> is tip (T) for the latest checked-in version of an item.</p><p>You cannot use label or workspace <em>versionspec</em> values to specify an item for <strong>/stopat</strong> option.</p></td></tr> +<tr> + <td><p><strong>/preview</strong></p></td> + <td><p>Displays in the Command Prompt window the files that would be destroyed. When <strong>tf destroy</strong> runs in the preview mode, the files are not actually destroyed.</p><strong>Note:</strong> The text in the Command Prompt window displays the word "Destroyed" with each file that would be destroyed. However, the file is actually not destroyed when the <strong>/preview</strong> option is used.</td></tr> +<tr> + <td><p><strong>/startcleanup</strong></p></td> + <td><p>Forces the file content clean-up process to start immediately after the content deletion finishes. If the user does not specify <strong>/startcleanup</strong>, the destroyed content clean-up process occurs when the database maintenance cleans up all the files that are no longer referenced by Visual Studio Team Foundation Server. By default, the clean-up is scheduled to run once each day.</p></td></tr> +<tr> + <td><p><strong>/noprompt</strong></p><p><strong>/i</strong></p></td> + <td><p>Specifies that the destruction of files is non-interactive. <strong>/i</strong> is an alias for <strong>/noprompt</strong>.</p></td></tr> +<tr> + <td><p><strong>/silent</strong></p></td> + <td><p>Specifies that, when you destroy files or folders, the output is not written to the command prompt window.</p></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>Specifies the user name and password to authenticate the user with Team Foundation Server.</p></td></tr> +<tr> + <td><p><strong>/collection</strong></p></td> + <td><p>Specifies the team project collection.</p></td></tr></tbody> +</table> + +## Remarks +When you use **tf destroy** to destroy version-control files, the application tier of Team Foundation Server receives the destroy request and checks to see whether you are a member of the **Team Foundation Administrators** security group. If you are not a member, the system displays an error-message dialog box that tells you that you do not have sufficient permissions to perform the operation. + +After the system verifies your permissions, it runs the destroy command. This command deletes all file references, shelvesets, and pending changes. The actual destruction of files, which is a permanent deletion, happens the next time that the content that is no longer referenced by Team Foundation Server is cleaned up. You can also specify the **/startcleanup** option to clean up the files immediately after **tf destroy** runs. + +If you run **tf destroy** without specifying **/i** and **/preview**, the system displays a console **Yes** or **No** prompt for each *filespec* value. Otherwise, you can specify **Yes to all**. If you do not specify **/keephistory**, you are prompted by an interactive text that warns of pending changes, if they exist. The interactive text points to **/preview** if you want more information about the changes. If you specify **/keephistory**, you are also prompted by **Yes**, **No**, or **All** text. If you select **Yes** or **All**, the destruction process starts, and the server paths to the destroyed items appear in the Command Prompt window. + + Destroyed: <serverItem1> + Destroyed: <serverItem2> + Destroyed: ... + +If you specified the *versionspec* value as a tip, the server paths displayed in the Command Prompt window include deletion IDs. For example, X123 might appear in the Command Prompt window. + +If you use the **/preview** option, the files are not destroyed, but the command-line text displays the files that would be destroyed. For example, if, at the command-line, you type **tf destroy /preview $/Test1/MyProject/MyProject/Program.cs**, the command window displays this text: + +Destroyed: $/Test1/MyProject/MyProject/Program.cs + +However, the file is actually not destroyed because you used the **/preview** option. + +For more information about how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### Effects of /keephistory on Other Version Control Operations + +If you specify the **/keephistory** option to retain the history of destroyed files, the files are treated as destroyed by the following Team Foundation version control operations: + +- **Change content   **If you try to change the content of a destroyed file, for example edit or branch, the system issues an error message that states the content has been destroyed. + +- **Branch, merge, or unshelve   **If you try to branch, merge, or unshelve destroyed items, the system issues an error message that states the content of the items has been destroyed. + +### Destroying Previously Deleted Items + +If an item has already been deleted, a deletion ID is attached to it and results in a filename change. +## Examples +### Description + +The following example permanently deletes the file a.cs. + +### Code + + C:\pi\ws1>tf destroy $/proj/pi/a.cs + +### Description + +The following example deletes a folder, *aFolder*, type at the command line: + +### Code + + C:\tf delete $/MyTeamProject/aFolder + +### Description + +To destroy the deleted item, *aFolder*, you must type at the command line: + +### Code + + tf destroy $/MyTeamProject/sFolder;x123 + +Where x123 is the deletion ID. + +## See Also + +#### Tasks + +[Destroy Version Controlled Files](destroy-version-controlled-files.md) + +#### Concepts + +[Operations Available Only From the Command-Line (Team Foundation Version Control)](https://msdn.microsoft.com/library/ms194957) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/destroy-version-controlled-files.md b/docs/tfvc/destroy-version-controlled-files.md new file mode 100644 index 00000000000..44ebcc24e34 --- /dev/null +++ b/docs/tfvc/destroy-version-controlled-files.md @@ -0,0 +1,85 @@ +--- +title: Destroy Version Controlled Files +description: Destroy Version Controlled Files +ms.assetid: 9be4d796-b448-4084-a102-a0e95e7b0053 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Destroy Version Controlled Files + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Over time, a version control server acquires a growing number of files and folders. This can cause problems as you try to manage disk space requirements. You might be forced to remove all the team projects and their hierarchies from version control. For example, a team project might be created for learning purposes only, or perhaps some files are contaminated with a virus. Therefore, as a Team Foundation administrator, occasionally you may have to destroy files and folders that are under version control. + +The following procedure shows you how to destroy files and folders by using the **tf** **destroy** command. Although the files are permanently removed, you can retain the history associated with them. For more information about the options and arguments available for **tf destroy**, see [Destroy Command (Team Foundation Version Control)](destroy-command-team-foundation-version-control.md). + +>**Note:** +> This operation is available only from the command-line. + +**Required Permissions** + +To use the **destroy** command, you must be a member of the **Team Foundation Administrators** security group. For more information, see [Permissions and groups reference](../security/permissions.md). +## Prerequisites for Running tf destroy +Before you run **tf destroy** without the **/keephistory** option, we recommend that you first delete the files you want to destroy. For more information, see [Delete Files and Folders from Version Control](delete-restore-files-folders.md). After you delete a file, its file name now includes a deletion ID. For example, if a file name is aFile.cs, after deletion the file name is aFile.cs;x123, where x123 is the deletion ID. + +After you delete the files, you can synchronize the Team Foundation warehouse. Otherwise the warehouse will not be synchronized with the destroyed items. + +### To permanently destroy version-controlled files + +- Click **Start**, click **All Programs**, click **Microsoft Visual Studio 2008**, click **Visual Studio Tools**, and then click **Visual Studio Command Prompt**. + + - To preview the file aFile.cs without destroying it, type at the command prompt: + + >tf destroy /preview /i $/MyTeamProject/aFile.cs + + >**Note:** + > The text in the Command Prompt window displays "Destroyed: $/MyTeamProject/aFile.cs", but the file is not actually destroyed when you use the **/preview** option. + + - To destroy the file, aFile.cs, type at the command prompt: + + >tf destroy /i $/MyTeamProject/aFile.cs + + This command displays information about possible pending changes and shelvesets in the Command Prompt window. Because you specified **/i** (non-interactive), you are not prompted with a **Yes**, **No**, **Yes to all** dialog box before the files are permanently removed. + + - To destroy all the files in aFolder and, at the same time, retain their history, type: + + >tf destroy /keephistory $/MyTeamProject/aFolder + + >**Note:** + > **/preview** cannot be specified with **/keephistory**. + + This action retains the historical information about all the files in aFolder. You can use the **tf history** command to view the history of a file. You can also view the history in Source Control Explorer. For more information, see [History Command](history-command.md) and [View Historical Data](https://msdn.microsoft.com/library/ms181415). + + - Use the **/stopat** option to retain the historical information up to and including a *versionSpec* value. The *versionSpec* value can be the latest version, a specific changeset, or a date. For more information about *versionspec* values, see [Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be). + + To destroy all the files in the team project MyTeamProject and, at the same time, retain the history for the files up to and including 10/23/2005, type: + + >tf destroy $/MyTeamProject /keephistory /stopat:D10/23/2005 + + - Use the **/startcleanup** option to immediately clean up the content that is no longer referenced by Team Foundation Server. Without this option, the destroyed files are removed when the database is maintained by a SQL process that generally runs one time a day. + + To immediately destroy all the files in aFolder, type: + + >tf destroy /startcleanup $/MyTeamProject/aFolder + +## See Also + +#### Tasks + +[Move, Rename, and Delete Version-Controlled Files and Folders](rename-move-files-folders.md) + +#### Reference + +[Destroy Command (Team Foundation Version Control)](destroy-command-team-foundation-version-control.md) + +#### Concepts + +[Operations Available Only From the Command-Line (Team Foundation Version Control)](https://msdn.microsoft.com/library/ms194957) + +#### Other Resources + +[Team Foundation Version Control Command-Line Reference](use-team-foundation-version-control-commands.md) diff --git a/docs/tfvc/develop-code-manage-pending-changes.md b/docs/tfvc/develop-code-manage-pending-changes.md new file mode 100644 index 00000000000..7c6667d88e4 --- /dev/null +++ b/docs/tfvc/develop-code-manage-pending-changes.md @@ -0,0 +1,153 @@ +--- +title: Develop code and manage pending changes +description: Develop code and manage pending changes +ms.assetid: dded21d3-4869-4e19-bca4-62e27179539c +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Develop code and manage pending changes + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Most changes that you make to your files are queued as pending changes. As you work, you can organize, manage, and get details about what you’ve changed. + +## Work in Solution Explorer + +From the team explorer home page (Keyboard: Ctrl + 0, H), you can begin coding in a new or in an existing solution. + +![Open a solution from the Team Explorer Home page](_img/develop-code-manage-pending-changes/IC673341.png) +After you open your solution, open the solution explorer (Keyboard: Ctrl + Alt + L). + +![Solution Explorer with Test and Class projects](_img/develop-code-manage-pending-changes/IC612257.png) +When you open and modify a file from the solution explorer, the file is automatically checked out for you. Icons appear to indicate which files you have not changed ![TFSC Checked-In Status Icon](_img/develop-code-manage-pending-changes/IC97411.gif), those you have checked out ![TFSC Checked-Out Status Icon](_img/develop-code-manage-pending-changes/IC51402.gif), and those you have added to the solution ![TFSC Pending Addition Status Icon](_img/develop-code-manage-pending-changes/IC106108.gif). + +If you’re working in a solution that contains a lot of files, you’ll probably find it convenient to filter the solution explorer to show only the files you have changed ![Changes filter](_img/develop-code-manage-pending-changes/IC668001.png) (Keyboard: Ctrl + [, P). + +## Use the My Work page to manage your work + +If you’re using Visual Studio Premium or Visual Studio Ultimate, you can use the My Work (Keyboard: Ctrl + 0, M) page in the team explorer to manage your work. + +![To Do List on My Work Page in Team Navigator](_img/develop-code-manage-pending-changes/IC591023.png) +You can use My Work to: +- Track your work against [work items](../work/track/link-work-items-support-traceability.md) +- Suspend and later resume your work (including file changes, associated work items, and Visual Studio state such as window positions and breakpoints) +- Request a code review + +For a step-by-step example, see [Day in the life of an devops Developer: Write new code for a user story](day-life-alm-developer-write-new-code-user-story.md), and [Day in the life of a devops Developer: Suspend work, fix a bug, and conduct a code review](day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md). + +### Tips + +- You can control the kinds of work items that appear in the **Available Work Items** section. Choose one of the default options or any of your personal queries that are contained in the root **My Queries** folder. To work with these queries, in the team explorer choose ![Home icon](_img/develop-code-manage-pending-changes/IC547418.png) **Home**, and then choose **Work Items**. +- When you move a work item to **Available**, **In Progress**, or **Suspended**, the work item state or comments are updated so that your team is automatically advised on the status of your work. For example, the task board for your team is updated to show your status. See [Collaborate [redirected]](https://msdn.microsoft.com/library/hh500404). +- If your team project contains customized work item type definitions, you might have problems using My Work, unless an Administrator for your team project has taken certain steps. See [Configure and customize Agile planning tools for a team project](../work/guidance/agile-process.md) and [Update a customized process template to access new features](https://msdn.microsoft.com/library/ms194972). + +## Use the Pending Changes page to manage your work + +You can use the Pending Changes page (Keyboard: Ctrl + 0, P) in the team explorer to manage your work. + +![Checking in the pending changes](_img/develop-code-manage-pending-changes/IC591276.png) + +>**Tip:** +>- You can <img src="_img/develop-code-manage-pending-changes/IC667296.png" title="Undock" alt="Undock" style="border: 1px solid black;"/> undock the Pending Changes page from the team explorer and open it in a new window. +>- You can toggle between list and tree view from the actions menu. + +Almost every change that you make to the files on your dev machine is stored in your workspace as a pending change until you check it in: +- [add](add-files-server.md) +- [branch](branch-folders-files.md) +- [delete](delete-restore-files-folders.md) +- [edit](check-out-edit-files.md) +- [rename](rename-move-files-folders.md) (includes moving items) +- property +- [rollback](roll-back-changesets.md) +- [type](../tfs-server/admin/manage-file-types.md#config-file-encodings) (file encoding) +- [undelete](delete-restore-files-folders.md) + +### Work with automatically detected changes + +If you are working in a [local workspace](decide-between-using-local-server-workspace.md), Visual Studio can detect changes that you make outside the system. If you edit a file outside Visual Studio (for example, in Notepad) the change automatically appears in your **Included Changes**. + +If you add or remove a file outside Visual Studio, for example, in Windows Explorer (File Explorer in Windows 8), the **Detected changes** link appears in the **Excluded Changes** section. Choose this link if you want to include these changes. The **Promote Candidate Changes** dialog box appears. You can open the context menu of added items and choose **Browse in Windows Explorer** to display them or **Delete from disk** to delete them. + +>**Note:** Empty folders will not appear. + +If items that you don’t need to check in appear regularly in the **Promote Candidate Changes** dialog box, you can select one of them, open its context menu, and choose **Ignore this local item** to ignore the item. You can also choose **Ignore by extension** or **Ignore by file name** to create a file that will cause Visual Studio to systematically ignore this kind of file. For more information on .tfignore files, see [Add files to the server](add-files-server.md). + +### Associate work items + +It’s a best practice to associate [work items](../work/track/link-work-items-support-traceability.md) (such as tasks or bugs) with your changes. Under Related Work Items, drag work items from a [query](https://msdn.microsoft.com/library/dd286705) or add it by ID. + +### Exclude changes + +See [Specify the files you want to check in](check-your-work-team-codebase.md#include_exclude) + +## See what you changed + +You can remind yourself about what you’ve changed in a file. + +### Use Pending Changes to view what you changed + +- On the Pending Changes page, open the context menu for the item and choose: + - **Compare with Workspace Version** to see what you’ve changed to the version in your workspace + - **Compare with Latest Version** to see how your changes compare to the latest version of the file in your team’s codebase + +### Use Solution Explorer or Source Control Explorer to view what you changed + +1. Locate and select the item in Solution Explorer or in Source Control Explorer. +2. Open the context menu for the item, and then choose **Compare**. +3. On the **Compare** dialog box, from the **Type** menu, choose: + - **Workspace Version** to see what you’ve changed in the version in your workspace + - **Latest Version** to see how your changes compare to the latest version of the file in your team’s codebase + - One of the other options: **Changeset**, **Date**, or **Label**. +4. Choose **OK**. + +The Diff window appears. See [Compare files](compare-files.md). + +## Undo your pending changes + +You can discard one, a few, or all of the pending changes in your workspace. + +>**Note:** +>A few other options: +>- You can first [put the changes away in a shelveset on your server](suspend-your-work-manage-your-shelvesets.md) before removing them from your workspace. +>- If you have already checked in the change and want to revert it, see [Roll back changesets](roll-back-changesets.md). + +### To undo a few of your pending changes + +1. In Solution Explorer, the Pending Changes Window, or Source Control Explorer, select one or more items, open their context menu and choose **Undo** or **Undo Pending Changes**. + + >**Tip:** + >To undo all changes you have made in your solution or a code project, open the context menu, and then choose **Undo Pending Change**. + +2. In the **Undo Pending Changes** dialog box, make sure the changes you want to undo are selected, and then choose **Undo Changes**. + +### To undo all your pending changes + +- On the **Pending Changes** page, choose the **Actions** link, and then choose **Undo All**. + +## Use the command prompt + +- [Status command](status-command.md) : Display pending changes in the command prompt. +- [Checkin command](checkin-command.md) : View pending changes in the **Check In** dialog box. +- [Undo command](undo-command.md) : Undo pending changes. + + >**Tip:** + >You can use this command to undo another user’s check-out if you have sufficient permissions. + +- [Difference Command](difference-command.md) : See what you have changed in a file. + +## Next steps + +When you’re ready: +- To request a code review of your pending changes, on the **Pending Changes** page, choose Request Review. See [Day in the life of an devops Developer: Suspend work, fix a bug, and conduct a code review](day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md). +- If you need to set aside your changes, see [Suspend your work and manage your shelvesets](suspend-your-work-manage-your-shelvesets.md). +- Check in and add your changes to the team’s codebase, see [Check in your work to the team's codebase](check-your-work-team-codebase.md). + +## Tips + +- If you are new to developing an app with Visual Studio and Team Foundation Server: [Walk step by step with an agile team as they collaborate to develop an app](day-life-alm-developer-write-new-code-user-story.md). +- When you begin a new work item, it is probably a good idea for you to [download the latest files from the server](download-get-files-from-server.md) before you check out files and begin your work. +- Use [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md) to manage your files in version control. diff --git a/docs/tfvc/develop-your-app-team-foundation-version-control.md b/docs/tfvc/develop-your-app-team-foundation-version-control.md new file mode 100644 index 00000000000..34db561c24e --- /dev/null +++ b/docs/tfvc/develop-your-app-team-foundation-version-control.md @@ -0,0 +1,50 @@ +--- +title: Develop your app in Team Foundation version control +description: Develop your app in Team Foundation version control +ms.assetid: 8535caa8-584a-454b-8c71-ce0cd362d9b1 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Develop your app in Team Foundation version control + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +When your codebase is under version control, you can develop your app—create and open files in Solution Explorer and write your code—while version control does other work for you. When you check files in and out, it keeps track of your changes and creates a history of your project. + +Having access to the history of a project has additional benefits, such as being able to find (and undo, when necessary) changes you made during a specific time period. You can also see exactly what changes your team mates have made, and how your changes relate to the latest changes on the server. + +## Walk through an Agile Developer "Day in the Life" + +Are you a new user of Visual Studio and Team Foundation Server (TFS)? Are you wondering how you and your team can get maximum benefit from the most recent version of these tools to build your app? + +If so, we suggest you take a few minutes to walk step-by-step through a day in the life of Peter and Julia, two developers at Fabrikam Fiber—a fictitious company that provides cable television and related services. Their team recently began [adopting Visual Studio and Team Foundation Server](https://msdn.microsoft.com/library/dd286491). You’ll see examples of how you can use Visual Studio Premium and TFS to check out and update code, suspend work when you’re interrupted, request a code review, check in your changes, and perform other tasks. + +- [Day in the life of a developer: Write new code for a user story](day-life-alm-developer-write-new-code-user-story.md) + +- [Day in the life of a developer: Suspend work, fix a bug, and conduct a code review](day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md) + +## What do you want to do? + +- [Develop code and manage pending changes](develop-code-manage-pending-changes.md) + +- [Add files to the server](add-files-server.md) + +- [Download (get) files from the Server](download-get-files-from-server.md) + +- [Check out and edit files](check-out-edit-files.md) + +- [Rename or move files and folders](rename-move-files-folders.md) + +- [Delete or restore files and folders](delete-restore-files-folders.md) + +## Learn about other resources that might help + +- [Improving Quality with Visual Studio Diagnostic Tools](https://msdn.microsoft.com/library/dd264943) + +- [Testing the application](../manual-test/index.md) + +- [Track work with Visual Studio devops and TFS](../work/overview.md) diff --git a/docs/tfvc/difference-command.md b/docs/tfvc/difference-command.md new file mode 100644 index 00000000000..811c1389a89 --- /dev/null +++ b/docs/tfvc/difference-command.md @@ -0,0 +1,227 @@ +--- +title: Difference Command +description: Difference Command +ms.assetid: d7bf3b53-b0b8-4b57-a9ce-5a475b715e1d +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Difference Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Compares, and if it is possible, displays differences between two files, files in two folders, or a shelveset and a local or a server file. + +**Required Permissions** + +To use the **difference** command, you must have the **Read** permission for all specified items set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf diff[erence] itemspec [/version:versionspec] [/type:filetype] + [/format:format [/ignorespace] [/ignoreeol] [/ignorecase] [/recursive] + [/options][/noprompt][/login:username,[password]] + +  + + tf diff[erence] itemspec itemspec2 [/type:filetype] [/format: format] + [/ignorespace] [/ignoreeol] [/ignorecase] [/recursive] [/options] [/noprompt][/login:username,[password]] + +  + + tf diff[erence] [/shelveset:shelvesetname[;shelvesetowner]] + shelveset_itemspec [/type:filetype] + [/format: format] [/ignorespace] [/ignoreeol] [/ignorecase] + [/recursive] [/options] [/noprompt][/login:username,[password]] + +  + + tf diff[erence] /configure + +## Parameters + +<table><thead> +<tr><th><p><strong>Argument</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><em>itemspec</em></p></td> + <td><p>Required. Specifies the item to be compared. If no version or path is specified, the <em>current workspace version </em>is assumed. Accepts both local and Team Foundation version control server paths.</p><p>For more information about how Team Foundation parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p><p>The <strong>difference</strong> command does not support wildcard characters.</p><p>This parameter cannot be combined with the <strong>/shelveset</strong> option.</p></td></tr> +<tr> + <td><p><em>Itemspec2</em></p></td> + <td><p>Optional. The item to which the <em>itemspec</em> is to be compared. If you do not provide a second i<em>temspec</em>, the latest Team Foundation version control server version of the item is used.</p></td></tr> +<tr> + <td><p><em>Filetype</em></p></td> + <td><p>Provides a value for the <strong>/type</strong> option. You can specify "binary" or "text," and a codepage number or the friendly name for a codepage.</p></td></tr> +<tr> + <td><p><em>Format</em></p></td> + <td><p>Used with the <strong>/format</strong> option to specify an output format of one of the following types:</p><ul><li><p>Visual</p></li><li><p>Brief</p></li><li><p>Context</p></li><li><p>RCS</p></li><li><p>SS</p></li><li><p>SS_SideBySide</p></li><li><p>SS_Unix</p></li><li><p>Unified</p></li><li><p>Unix</p></li></ul><p>These outputs formats are explained in the Remarks section of this topic.</p></td></tr> +<tr> + <td><p><em>Versionspec</em></p></td> + <td><p>The user-provided value for the <strong>/version</strong> option. For more information about how Team Foundation parses a version specification to determine which items are within its scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p></td></tr> +<tr> + <td><p><em>Shelvesetowner</em></p></td> + <td><p>Identifies the owner of the shelveset by user name. If a value for this parameter is not provided, the current user is assumed.</p></td></tr> +<tr> + <td><p><em>Shelvesetname</em></p></td> + <td><p>Specifies the name of a shelveset. You can create more than one shelveset with the same name on the server that is running Team Foundation Server as long as a different user owns each shelveset.</p></td></tr> +<tr> + <td><p><em>Shelveset_itemspec</em></p></td> + <td><p>Specifies the name of a folder or file in the shelveset to compare to the base shelveset version.</p></td></tr> +<tr> + <td><p><em>username</em></p></td> + <td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>DOMAIN</em>\<em>UserName</em> or <em>UserName.</em></p></td></tr></tbody> +</table> + +|**Option**|**Description**| +|---|---| +|**/type**|Overrides any detected encodings and uses the specified encoding to present the files to the differencing engine.| +|**/version**|Specifies the version of the file or folder to compare. By default, Team Foundation uses the workspace version if you do not provide a *versionspec*.<br /><br />Instead of using the **/version** flag, you can specify versions by appending a semicolon and version specifier to the end of each file name.| +|**/format**|Specifies an output format specified by the *format* argument.| +|**/ignorespace**|Does not highlight white-space differences between the compared files.| +|**/ignoreeol**|Ignores differences between the new line characters in two files or file versions. **/ignoreeol** works differently from **/ignoreSpace**. **/ignorespace** treats eight spaces identically to one. However, if you use the **/ignoreeol** option and File A has two new line characters between unchanged areas of text, and File B has one, the result displays as a difference. If both files have only one new line, but File A uses `\r\n` as a new line and File B uses `\n`, **/ignoreEOL** option would ignore that as a difference.| +|**/ignorecase**|Does not highlight differences in letter casing between the compared files.| +|**/recursive**|Compares the differences between the current folder and all its subfolders.| +|**/options**|Specifies an option string for the tool to be invoked by diff. For more information, see [Associate a File Type with a Difference Tool](associate-file-type-file-comparison-tool.md) and [Associate a File Type with a Merge Tool](associate-file-type-merge-tool.md).| +|**/shelveset**|Specifies a shelveset to compare to the Team Foundation version control server version upon which the shelveset is based.<br /><br />This option cannot be combined with an *itemspec* argument. To compare individual shelveset items, you can provide a *shelveset_itemspec*.| +|**/noprompt**|Suppresses any dialog boxes that would otherwise be displayed during the completion of this operation.| +|**/configure**|Invokes the **Configure User Tools** dialog box. This tool is available from the Visual Studio user interface. For more information, see [Associate a File Type with a Difference Tool](associate-file-type-file-comparison-tool.md).| +|**/login**|Specifies the user name and password to authenticate the user with Team Foundation Server.| + +## Remarks +>**Note:** +>You can type **tf diff** or **tf difference** at the command line to run this command. + +You can use the **difference** command to compare and if it is possible, display differences between: + +- Two different files or two versions of the same file. + +- One or more of the items in a folder. + +- One, some, or all the items in a shelveset on the Team Foundation Server. + +You can use the **difference** command to compare both versioned and non-versioned files. + +Team Foundation categorizes all files by type. Text files can be merged and compared, side by side and line by line, as long as both files have the same encoding. If you want to compare two files whose encodings are not the same, you can temporarily mask, or override the encoding property for a file by using the **/type** option. Binary files can be compared but cannot be merged. When you pass one or more binary files to the difference command, Team Foundation indicates whether differences exist between it and the item to which it is being compared. For more information about how Team Foundation differentiates between and treats files of disparate types, see [Managing File Types](../tfs-server/admin/manage-file-types.md). + +If you specify two file names, the two files are compared. Instead of using the **/version** flag, you can specify versions by appending a semicolon and version specifier to the end of each file name. + +If you pass only one *itemspec* to the difference command: + +- If do not provide a versionspec, your current workspace version of the item is compared to the base workspace version, by default. For example, **tf difference header.h** compares the current version of header.h to the version upon which header.h is based. + +- If you include a versionspec in your itemspec such as , **tf difference header.h;LBeta1**, Team Foundation compares that version to your current workspace version on disk. + +- If you specify a range of versions such as **/version:C1~C4**, the versions of the file at the two end points of the range are compared. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### Output Format types + +The *format* parameter, used with the **/format** option, specifies many different output formats. The available output types are + +- **Visual** + + **Visual** format type opens an external difference application. By default diffmerge.exe is launched. + +- **Brief** + + Brief format prints whether the files being compared differ. + +- **Context** + + **Context** format provides lines of context for the differences in the files. This format is derived from the UNIX based **diff –c** output format. + +- **RCS** + + **RCS** format is similar to **/format:unix**, except context lines are not supplied. + + No special handing for a missing end of line marker at the end of the file is provided. + +- **SS** + + **SS** is default difference output format for Visual SourceSafe. For more information, see "Diff (Command Line)" at the Microsoft Web site (<http://go.microsoft.com/fwlink/?LinkId=99139>). + +- **SS\_SideBySide** + + **SS\_SideBySide** is the default side-by-side output format for Visual SourceSafe. + +- **SS\_Unix** + + SS\_Unix is similar to the /format:unix output format, but /format:ss\_unix includes context lines and /format:unix does not. + +- **Unified** + + **Unified** format is derived from the UNIX based **diff –u** output format. **/format:context** repeats identical context lines between the difference strings although **/format:unified** does not. + + **Unified** format produces a new unified difference string (@@ ... @@) line only when the distance to the next difference string is larger than the number of context lines. + +- **Unix** + + This output type is derived from the UNIX based **diff** command output format. + + The **Unix** output format is constructed in the following way: + + <metadataline> + "< " line prefix for lines from the first file + "---" line + "> " line prefix for lines from the second file + + <metadataline> can be one of these possibilities: + #a#,# -- add lines from line # in file1 into file2 at lines #-># + #,#d# -- delete lines from line # -> # in file 1 from file2 at line # + #,#c#,# -- change lines from line # -> # in file1 into the lines in file2 at line # -> # + + # signs seprated by commas indicate a line range. + # signs before the character indicate line numbers in the first file + # signs after the character indidicate line numbers in the second file + + /// No end of line marker at the end of the file: + /// \ No newline at end of file +## Examples +The following example displays the differences between the local version of 314.cs and the workspace version of 314.cs that is the version of the file that was checked out from the Team Foundation version control server. + + c:\projects>tf difference 314.cs + +The following example displays all files that have been changed in the src folder. Does not display files that have been changed in subfolders of src. + + c:\projects>tf difference src /format:visual + +The following example displays the differences between changeset 3 and changeset 8 of 1254.cs. + + c:\projects>tf difference /version:C3~C8 1254.cs + +The following examples display the differences between the version of 314.cs that belong to the label "release" and the version that belongs to changeset 3200. + + c:\projects>tf difference 314.cs;Lrelease 314.cs;C3200 + +—or— + + c:\projects>tf difference 314.cs;Lrelease~C3200 + +The following example displays the difference between the versions of e271.cs that a user named Nadia shelved in shelveset PeerCodeReview8 and the *base shelveset version* that is the version upon which she based her changes. Also displays the types of changes pending against e271.cs when Nadia shelved. + + c:\projects> tf difference /shelveset:PeerCodeReview8;Nadia e271.cs + +The following example displays the differences between all files in the PeerCodeReview2 shelveset and the base shelveset version of those files. + + c:\projects> tf difference /shelveset:PeerCodeReview2 + +## See Also + +#### Reference + +[Merge Command](merge-command.md) + +[Checkin Command](checkin-command.md) + +[Shelvesets Command](shelvesets-command.md) + +#### Concepts + +[Managing File Types](../tfs-server/admin/manage-file-types.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) + +[Comparing Folders and Files](compare-folders-files.md) diff --git a/docs/tfvc/dir-command.md b/docs/tfvc/dir-command.md new file mode 100644 index 00000000000..260f6c68127 --- /dev/null +++ b/docs/tfvc/dir-command.md @@ -0,0 +1,145 @@ +--- +title: Use the Dir Command to display contents of TFVC directory +description: Displays all or some of the contents of the server for Team Foundation version control using the Dir command +ms.assetid: 1e226700-a685-4c42-970b-fa6fd764726f +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Dir Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +The **dir** command displays all or some of the contents of the server for Team Foundation version control. + +**Required Permissions** + +To use the **dir** command, you must have **Read** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf dir itemspec [/version:versionspec] [/recursive] + [/folders] [/deleted] [/login:username,[password]] [/collection:TeamProjectCollectionUrl] + +## Parameters<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><i>itemspec</i></p></td> +<td><p>Identifies the file or folder to return information about. For more information about how Team Foundation parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/4y2ash30">Command-Line Options</a>.</p> +<div class="alert"> +<div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"> +<div class="mtps-row"> +<strong>Note</strong> +</div> +<div class="mtps-row"> +You can specify more than one Itemspec argument. +</div> +</div> +</div></td> +</tr> +<tr> +<td><p><i>versionspec</i></p></td> +<td><p>The user-provided value for the <strong>/version</strong> option. For more information about how Team Foundation parses a version specification to determine which items are within its scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p></td> +</tr> +<tr> +<td><p><i>username</i></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <i>DOMAIN</i>\<i>UserName</i> or <i>UserName</i>.</p></td> +</tr> +<tr> +<td><p><i>TeamProjectCollectionUrl</i></p></td> +<td><p>The URL of the team project collection that contains one or more files or folders about which you want to display information (for example, http://myserver:8080/tfs/DefaultCollection/).</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p><strong>Option</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/version</strong></p></td> +<td><p>Specifies that Team Foundation should only show files and folders of a certain version.</p></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>Displays all files and subfolders in the specified directory.</p></td> +</tr> +<tr> +<td><p><strong>/folders</strong></p></td> +<td><p>Displays folders only.</p></td> +</tr> +<tr> +<td><p><strong>/deleted</strong></p></td> +<td><p>Displays deleted items and existing items. The deleted items are followed with ;<em>X</em>3 where 3 is the deletion id.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td> +</tr> +<tr> +<td><p><strong>/collection</strong></p></td> +<td><p>Specifies the team project collection.</p></td> +</tr> +</tbody> +</table> +## Remarks +The **dir** command operates on the Team Foundation version control server copies of files, not the local copies. The command uses the local mapped folder to locate the appropriate Team Foundation version control server path. You use this command to explore the Team Foundation version control server and identify files you may have to obtain. + +For links to other Team Foundation commands that provide additional information about items in your Team Foundation version control server and the workspaces that map to it, see [Informational Commands](https://msdn.microsoft.com/library/ms181450). + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example displays a list of files, folders, subfolders, and the files therein in the Team Foundation version control server folder to which c:\\projects maps. The number of items is also listed. For more information about how to view and edit working folder mappings, see [Workspace Command](workspace-command.md) and [Workfold Command](workfold-command.md). + + c:\projects>tf dir /recursive + +The following example displays all Team Foundation version control server files at that path. The "314dir" subfolder does not have to exist in the local folder. + + c:\projects>tf dir 314dir + +The following example displays the version of files labeled "My label" in that Team Foundation version control server path. The "314dir" subfolder does not have to exist in the local folder. + + c:\projects>tf dir /version:L"My label" 314dir + +The following example displays all folders in the root of the Team Foundation version control server. The local working folder is ignored because `$/` denotes a Team Foundation version control server path. + + c:\projects>tf dir /folders $/ + +The following example lists every file and folder in the Team Foundation version control server. + + c:\projects>tf dir /recursive $/ + +The following example lists all items and deleted items in the current folder together with their deletion IDs. + + c:\projects>tf dir /deleted + +## See Also + +#### Tasks + +[Add and Remove a Working Folder in a Workspace](https://msdn.microsoft.com/library/ms181386) + +#### Reference + +[Workspace Command](workspace-command.md) + +[Workfold Command](workfold-command.md) + +#### Concepts + +[Informational Commands](https://msdn.microsoft.com/library/ms181450) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/download-get-files-from-server.md b/docs/tfvc/download-get-files-from-server.md new file mode 100644 index 00000000000..d83b7a294ae --- /dev/null +++ b/docs/tfvc/download-get-files-from-server.md @@ -0,0 +1,93 @@ +--- +title: Download (get) files from the Server +description: Download (get) files from the Server +ms.assetid: 33798544-9e9e-4200-b7d8-127fb088c735 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Download (get) files from the Server + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +In general, you should get the latest files from the server on a regular basis so that the code you develop is compatible with the code developed by others on your team and to minimize the risk of creating bugs when you check in your code. You can download the latest version or a previous version of one or more files from your Team Foundation Server to your workspace on your dev machine. + +**Required permissions** + +You must be one of the **Contributors** for your team project. See [Team Foundation Server default groups, permissions, and roles](https://msdn.microsoft.com/library/ms253077). + +## Get the latest version of some files + +You should get the latest files from your server after you [set up your dev machine](set-up-team-foundation-version-control-your-dev-machine.md). Then you can begin developing your app. + +Later, as you develop functionality in the workspace on your dev machine, your code is isolated from the changes that are made by other developers. But when you are ready (for example, you have completed and checked in the code that completes a task), you should get the latest version of your team’s files. + +### To get the latest version of some files + +- In [Solution Explorer](develop-code-manage-pending-changes.md) or [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), browse to the files or the folders that contain the files that you want to get, select them, open their shortcut menu, and choose **Get Latest Version**. + +## Get a specific version of some files + +In special cases (for example, to fix a regression bug), you might need to get and work with a specific version of one or more files. + +>**Note:** +> Keep in mind that if you get an older version of a file, make changes to it, and then try to check it in, there is an increased chance that you will need to [resolve conflicts](resolve-team-foundation-version-control-conflicts.md) before you can complete the check-in. + +### To get a specific version of some files from the History window + +1. In Solution Explorer or Source Control Explorer, browse to the folder or file, open its shortcut menu, and choose **View History**. + +2. In the [History](get-history-item.md) window, open the shortcut menu of a version and choose **Get This Version**. + +### To get a specific version of some files from Solution Explorer or Source Control Explorer + +1. In Solution Explorer or Source Control Explorer, browse to the files or the folders that contain the files you want to get, select them, open their shortcut menu, and choose **Get Specific Version**. + + The **Get** dialog box appears. + +2. Choose an option from the **Type** drop-down list: + + - **Changeset**   Get a version by specifying a [changeset](find-view-changesets.md). For more information, see [Find and view changesets](find-view-changesets.md). + + - **Date**   Get a version by specifying a date. If selected, select a date in the **Date** list. + + - **Label**   Get a version by specifying a [label](use-labels-take-snapshot-your-files.md). For more information, see [Use labels to take a snapshot of your files](use-labels-take-snapshot-your-files.md). + + - **Latest Version**   Select this option to get the latest version on the server. + + - **Workspace Version**   Gets a version by specifying a [workspace](create-work-workspaces.md). + +3. (Optional) Select the **Overwrite writable files that are not checked out** option. + + If selected, files from the server will overwrite all files that do not have the read-only attribute associated with them and are not checked out. Only files on the server, which are different, will overwrite the files in the local workspace. By default, this option is not selected. + + >**Tip:** + > This option is equivalent to running the following command: [tf get /overwrite](get-command.md). + +4. (Optional) Select the **Overwrite all files even if the local version matches the specified version** option. + + If selected, files from the server overwrite all files. + + >**Tip:** + > This option is equivalent to running the following command: [tf get /force](get-command.md). + +5. Choose **Get**. + + Source Control Explorer appears. If you chose **Latest Version** in step 5, the system updates the **Latest** column with the status of **Yes**. + +## Work from the command prompt + +- [LocalVersions Command](localversions-command.md) Display the version of one or more items in your workspace. + +- [Get command](get-command.md) Get files from the server. + +## Tips + +- ![Tip](_img/download-get-files-from-server/IC572374.png) When you get files and folders from the server, the system also deletes any checked-in files from your local workspace that have been deleted from the server. Files that have been renamed or moved on the server are changed in your workspace to match the changes on the server. + +- ![Tip](_img/download-get-files-from-server/IC572374.png) In Source Control Explorer you can verify whether you have the latest version of a file in the **Latest** column. You can see specific version information about an item by opening its shortcut menu and choosing **Properties**. + +- ![Tip](_img/download-get-files-from-server/IC572374.png) If you are using a [server workspace](decide-between-using-local-server-workspace.md), and you have accidentally deleted some files that you want to restore, you must use the [tf get /all](get-command.md) command to restore the deleted files. diff --git a/docs/tfvc/edit-check-policies.md b/docs/tfvc/edit-check-policies.md new file mode 100644 index 00000000000..0e25e6b9d70 --- /dev/null +++ b/docs/tfvc/edit-check-policies.md @@ -0,0 +1,58 @@ +--- +title: Edit Check-In Policies +description: Edit Check-In Policies +ms.assetid: 3bc445f1-d354-4991-9381-f10739b5d0fe +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/18/2016 +--- + +# Edit Check-In Policies + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Administrators of Team Foundation version control can add and edit check-in policy requirements. These check-in policies require the user to take actions when they conduct a check-in to version control; for example a user can be required to associate a work item with a changeset. For more information on check-ins, see [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411). Before editing a check-in policy, you must first create one. For more information, see [Add Check-In Policies](add-check-policies.md). The default available check-in policy types include: + +- **Builds**   Requires that the last build was successful before a check-in. +- **Code Analysis**   Requires that code analysis is run before check-in. +- **Work Items**   Requires that one or more work items are associated with the check-in. + +>**Note:** +>You can temporarily disable one or more policy types in **Source Control Settings**, on the** Check-in Policy** tab, by highlighting the policies and clicking **Disable**. To enable a disabled policy, highlight the disabled policy, and click **Enable**. + +**Required Permissions** +To complete this procedure, you must have the **Edit project-level information** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To edit a check-in policy + +1. On the **Team** menu, click **Team** **Project** **Settings**, and then click **Source Control**. + +2. In the **Source Control Settings** dialog box, click the **Check-in Policy** tab. + +3. In the **policy type** list, click the policy type for which you want to make changes, and then click **Edit**. + +4. Continue this procedure based on the type of policy you are editing: + + - **Builds**   Requires that the last build was successful before a check-in. This policy type cannot be modified. + + - **Code Analysis**   Requires that code analysis be run before code is checked in. The **Code Analysis** **Policy Editor** appears. + + Click the check boxes for the types of code analysis that you want performed. Options are **Enforce check-in to only contain files that are part of current solution**, **Enforce C/C++ Code Analysis (/analyze)**, and **Enforce Code Analysis For Managed Code**. If you select the **Enforce Code Analysis For Managed Code** check box, select the desired rule settings under **Rule settings for Managed Code Analysis**. + + For more information about how to use code analysis tools, see [Creating and Using Code Analysis Check-In Policies](https://msdn.microsoft.com/library/ms182075). + + - **Work Items**   Requires that one or more work items be associated with the check-in. This policy type cannot be modified. + +5. Click **OK**. + +## See Also + +#### Concepts + +[Set and Enforce Quality Gates](set-enforce-quality-gates.md) +[Working with Changesets](find-view-changesets.md) +#### Other Resources + +[Walkthrough: Customizing Checkin Policies and Notes](https://msdn.microsoft.com/library/ms181281) diff --git a/docs/tfvc/enable-disable-check-policies.md b/docs/tfvc/enable-disable-check-policies.md new file mode 100644 index 00000000000..499d65fd5ee --- /dev/null +++ b/docs/tfvc/enable-disable-check-policies.md @@ -0,0 +1,54 @@ +--- +title: Enable and Disable Check-In Policies +description: Enable and Disable Check-In Policies +ms.assetid: 629bf67c-22c5-4047-92b8-aa8f7c201cc9 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Enable and Disable Check-In Policies + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Administrators of Team Foundation version control can add check-in policy requirements. These check-in policies require the user to take actions when they conduct a check-in to source control; for example a user can be required to associate a work item with a changeset. For more information, see [Add Check-In Policies](add-check-policies.md). Prior to enabling or disabling check-in policies, you must first create a check-in policy. For more information, see [Add Check-In Policies](add-check-policies.md). The following procedures demonstrate how to enable or disable check-in policies for your team project. + +**Required Permissions** + +To complete this procedure, you must have the **Edit project-level information** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +## Procedure + +### To enable a check-in policy + +1. On the **Team** menu, click **Team Project Settings**, and then click **Source Control**. + +2. In the **Source Control Settings** dialog box, click the **Check-in Policy** tab. + +3. In the policy type list, select the policy type you want to enable, and click **Enable**. + +4. Click **OK**. + +### To disable a check-in policy + +1. On the **Team** menu, click **Team Project Settings**, and then click **Source** **Control**. + +2. In the **Source** **Control** **Settings** dialog box, click the **Check-in Policy** tab. + +3. In the policy type list, select the policy type you want to delete, and click **Disable**. + +4. Click **OK**. + +## See Also + +#### Concepts + +[Set and Enforce Quality Gates](set-enforce-quality-gates.md) + +[Working with Changesets](find-view-changesets.md) + +#### Other Resources + +[Walkthrough: Customizing Check-in Policies and Notes](https://msdn.microsoft.com/library/ms181281) diff --git a/docs/tfvc/find-view-changesets.md b/docs/tfvc/find-view-changesets.md new file mode 100644 index 00000000000..7046e4331bd --- /dev/null +++ b/docs/tfvc/find-view-changesets.md @@ -0,0 +1,126 @@ +--- +title: Find and view changesets +description: Find and view changesets +ms.assetid: bf36f78e-231a-46a1-94e4-4b44852f30b0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Find and view changesets + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +When you [check in your changes](check-your-work-team-codebase.md), they are stored on the server as a changeset. Changesets contain the history of each item in version control. + +![Version Control Changesets](_img/find-view-changesets/IC263819.png) + +You can view a changeset to see what the exact file changes were, discover the owner's comments, find linked work items, and see if any policy warnings were triggered. + +**Required Permissions** + +You must be one of the **Contributors** for your team project. See [Team Foundation Server default groups, permissions, and roles](https://msdn.microsoft.com/library/ms253077). + +## Find a changeset by ID + +- In [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), press Ctrl + G. + + The **Go to Changeset** dialog box appears. + + ![Go to Changeset dialog box](_img/find-view-changesets/IC612254.png) + + Type the number of the changeset and choose **OK**. + + If you don’t know the number, choose **Find**. See [Find a changeset](find-view-changesets.md#find). + +## List changesets that update a specific file or folder + +1. In Solution Explorer or [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), browse to the folder or file, open its shortcut menu, and choose **View History**. + +2. In the [History window](get-history-item.md), select the row that contains the changeset for which you want to view details, open its shortcut menu, and then choose **Changeset Details**. + + The **Changeset Details** page appears in Team Explorer. + ![Changeset Details page](_img/find-view-changesets/IC592883.png) + +<table> +<thead> +<tr> +<th> <strong>Tip</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td><ul> +<li><p>You can <img src="_img/find-view-changesets/IC667296.png" title="Undock" alt="Undock" /> undock the <strong>Pending Changes</strong> page from Team Explorer and open it in a new window.</p></li> +<li><p>You can toggle between tree and list view from the <strong>Actions</strong> menu (Visual Studio 2013) or <strong>View Options</strong> menu (Visual Studio 2015).</p></li> +</ul></td> +</tr> +</tbody> +</table> + +<a name="find"></a> + +## Search for changesets + +1. In [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), on the menu bar, choose **File**, **Source Control**, **Find**, **Find Changesets**. + + The **Find Changesets** dialog box appears. + + ![Find Changesets dialog box](_img/find-view-changesets/IC612255.png) + +2. (Optional) Next to the **Containing File **box, choose **Browse**. + +3. (Optional) In the **By User** box, type the alias or the name of the team project team member who is associated with the changeset. + +4. (Optional) In the **Range** section, choose one of the following options: + + - **All changes**   Retrieves all changesets that were applied to that file or folder. + + - **Changeset number**   Retrieves changesets from a range of numbers. In the **from** and **to** boxes, type the range. + + - **Created date**   Retrieves changesets from a range of dates. In the **between** and **and** boxes, use the calendars to specify start and end dates. + +5. Choose **Find**. + + Changesets that match your criteria appear in the **Results** list. + +6. Right-click the changeset for which you want information, and select **Changeset Details...** + + The **Details for Changeset** dialog box appears. + + ![Details for Changeset dialog box](_img/find-view-changesets/IC615597.png) + +7. In the **Details for Changeset** dialog box, view the change types that were added and any comments, work items, check-in notes, and policy warnings that are associated with the changeset. + +8. Close the **Details for Changeset** dialog box. + +9. Choose **OK**. + +## Work with changesets + +The **Changeset Details** view in Team Explorer has links to perform the following tasks: + +- **Rollback** to remove the effects of the changeset. See [Roll back changesets](roll-back-changesets.md). + +- **Track** to determine which branches have and have not received a set of changes. See [View where and when changesets have been merged](view-where-when-changesets-have-been-merged.md). + +- **Actions**, **Request Review** to request a code review. + +- **Actions**, **Open in Browser** to view the changeset in your browser (for example, if you want to copy the URL into an email to discuss the change with your team). + + +## Work from the command prompt + +To find a changeset from the [command prompt](use-team-foundation-version-control-commands.md): + + c:\users\jamal\workspaces\fabrikam>tf changeset + +To view or modify changesets and to learn about other options, see [Changeset Command](changeset-command.md). + +## Tips + +- ![Tip](_img/find-view-changesets/IC572374.png) You can download the version of a file in a changeset. See [Download (get) files from the Server](download-get-files-from-server.md). + +- ![Tip](_img/find-view-changesets/IC572374.png) You can add a link between a changeset and one or more work items. See [Manage dependencies, link work items to support traceability](../work/track/link-work-items-support-traceability.md). diff --git a/docs/tfvc/folder-comparison-filters.md b/docs/tfvc/folder-comparison-filters.md new file mode 100644 index 00000000000..112d857fbdf --- /dev/null +++ b/docs/tfvc/folder-comparison-filters.md @@ -0,0 +1,79 @@ +--- +title: Folder comparison filters +description: Folder comparison filters +ms.assetid: a074c178-1b40-44dd-9e0f-8e9c7f565bfc +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Folder comparison filters + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +The folder comparison filter is an ordered list of name filters that is used to match the names of files or folders that you are comparing. You can use **Compare** to evaluate the file or folder names against the name filters. Once **Compare** finds a match or exclusion, the comparison stops. + +The default name filters are as follows: + +!\*.pdb;!\*obj;!\*.dll;!\*.exe;!\*.res;!\*.resources;!\*.cache;!\*.ilk;!\*.ncb;!obj\\;!objd\\;!bin\\ + +## Name Filters + +The following wildcard characters have special meaning when they are used in a name filter: + +- ? - Matches exactly one character. + +- \* - Matches zero or more characters. + +- ! - Specifies an exclusion name filter. + +- \\ - Specifies a folder name filter. + +- ; - Name filter delimiter. + + >**Note:** + >The following characters are not allowed in name filters: " < > | \b \0 \t and characters 0-31. + +The name filters are applied to the file and folder names by using the following rules: + +- When **Compare** evaluates a file or folder name, it compares the name to each filter in the order that you specified the filters. As soon as the file or folder name matches a filter, the name is a match and it is not compared against the remaining filters. + +- A folder filter must end with the \\ wildcard character. + +- An exclusion filter must begin with the ! wildcard character. + +- If you specify any filters that are not the exclusion filter, only files or folders that match the specified filters are included in the results. + +- If you specify an exclusion filter, all files or folders that do not match the exclusion filter are included in the results. + +- If you want to exclude a subset of file or folder names, you must specify the filter for the file or folder name that you want to match first and then specify the exclusion filter. + +## Examples + +The following table lists filter name mask examples. + +|**Name Mask**|**Description**| +|---|---| +|.cs|Matches all C# files.| +|My*.bmp|Matches all bitmap files that begin with My.| +|!*.exe|Excludes all executable files.| +|!objd\\|Excludes all objd folders.| + + +The following table lists filter examples. + +|**Filter**|**Description**| +|---|---| +|.cs;!objd\;!obj\;!bin\\|Matches all C# files except those in objd, obj, or bin folders.| +|!*.resx;!*ini;!resources\;!\*junk*\\|Excludes all .resx and .ini files, all files in the resources folder, and all files in any folder that has a name that includes the word junk.| + + +## See Also + +#### Other Resources + + [Compare folders](compare-folders.md) + + [Reconcile differences between two folders](reconcile-differences-between-two-folders.md) diff --git a/docs/tfvc/folderdiff-command.md b/docs/tfvc/folderdiff-command.md new file mode 100644 index 00000000000..1808086aa63 --- /dev/null +++ b/docs/tfvc/folderdiff-command.md @@ -0,0 +1,207 @@ +--- +title: Folderdiff Command +description: Folderdiff Command +ms.assetid: 6bfb8318-ee32-4114-b5d1-d7196b1a1855 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Folderdiff Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Use the **folderdiff** command to display and compare a visual representation of the differences between files in two server folders, in a server folder and a local folder, or in two local folders. + +**Required Permissions** + +To use the **folderdiff** command, you must have the **Read** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf folderdiff [sourcePath] targetPath [/recursive] [/noprompt] [/collection:TeamProjectCollectionUrl] [/filter:filter] [/filterLocalPathsOnly] [/login:username,[password]] [/view:same,different,sourceOnly,targetOnly] + +## Parameters<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><i>sourcePath</i></p></td> +<td><p>The local or server path that is the source path in the compare operation. If this argument is not supplied and <i>targetPath</i> is the local mapped path, <i>sourcePath</i> is the server path that is mapped to it.</p></td> +</tr> +<tr> +<td><p><i>targetPath</i></p></td> +<td><p>The local or server path that is the target path in the compare operation.</p></td> +</tr> +<tr> +<td><p><i>filter</i></p></td> +<td><p>Specifies a semicolon delimited list of inclusion and exclusion filter masks for the <strong>/filter</strong> option. Default is "*" (include all). The Remarks section in this topic includes a detailed description of filters and masks.</p></td> +</tr> +<tr> +<td><p><i>TeamProjectCollectionUrl</i></p></td> +<td><p>The URL of the team project collection that contains the files for which you want to display and compare the differences (for example, http://myserver:8080/tfs/DefaultCollection).</p></td> +</tr> +<tr> +<td><p><i>username</i></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <i>DOMAIN</i>\<i>UserName</i> or <i>UserName.</i></p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p><strong>Option</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>Optional. Specifies that the two folders are fully compared recursively.</p></td> +</tr> +<tr> +<td><p><strong>/noprompt</strong></p></td> +<td><p>Optional. <strong>tf folderdiff</strong> runs without displaying user interface. The output is displayed in the Command Prompt window instead.</p></td> +</tr> +<tr> +<td><p><strong>/filter</strong></p></td> +<td><p>Optional. Specifies a list of inclusion and filter masks that are used to match the names of files and folders to be compared.</p></td> +</tr> +<tr> +<td><p><strong>/filterLocalPathsOnly</strong></p></td> +<td><p>Optional. Specifies that only the local paths will be filtered, unless the corresponding server path exists.</p></td> +</tr> +<tr> +<td><p><strong>/view</strong></p></td> +<td><p>Optional. Specifies what information is included in the output using a comma separated list of the following values:</p> +<p><i>same</i>—output displays files with the same content in both source and target directories.</p> +<p><i>different</i>—output displays files with different content in both source and target directories.</p> +<p><i>sourceOnly</i>—output displays files that exist only in source directory.</p> +<p><i>targetOnly</i>—output displays files that exist only in target directory.</p> +<p>The default is "<i>different</i>,<i>sourceOnly</i>,<i>targetOnly</i>"</p></td> +</tr> +<tr> +<td><p><strong>/collection</strong></p></td> +<td><p>Specifies the team project collection.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td> +</tr> +</tbody> +</table> + +## Remarks +The Command Prompt window displays the output if you specify **/noprompt**. Otherwise, the **Folder Difference** window displays the output. When the system compares the local mapped folder to the server folder to which it is mapped, the output in the **Folder Difference** window includes a list of pending changes. Also, the output in the **Folder Difference** window tells you whether the local folder contains the latest copy or not. + +The output displayed in the Command Prompt window lists all the files in the folders in the following five sections: + +- Items that exist only in the server folder. + +- Items that exist only in the local folder. + +- Items that have different contents. + +- Items that have identical contents (you must specify the same argument with the **/view** option). + +- Summary. + +### File and Folder Filters + +A filter is an ordered list of name masks used to match the name of files and folders to be compared. Each mask can contain the wildcard characters question mark (?) and asterisk (\*). '?' matches exactly one character and '\*' matches zero or more characters. The masks in a filter are delimited by semicolons (;). Folder masks must end in backslash (\\). To specify an exclusion mask, prefix the mask with an exclamation mark (!). + +The filter is applied to the file and folder names using the following rules: + +- When both file and folder masks are specified together in a filter, the file masks are separated into a file mask list and the folder masks are separated into the folder mask list. File masks are applied only to file names. Folder masks are applied only to folder names. + +- When the command matches a file or folder name, it compares the name to each mask in the filter in the order it was specified. As soon as the name matches a mask, the name is considered to be a match. + +- If the file masks in the filter contain an inclusion mask, files that do not match any of the file masks are excluded. + +- If the file masks in the filter contain only exclusion masks, files that do not match any of the file masks are included. + +- If the folder masks in the filter contain an inclusion mask, folders that do not match any of the folder masks are excluded. + +- If the folder masks in the filter contain only exclusion masks, folders that do not match any of the folder masks are included. + +These are some examples of filter masks: + +<table> +<thead> +<tr> +<th><p><strong>Mask</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>*.cs</p></td> +<td><p>Matches all C# files.</p></td> +</tr> +<tr> +<td><p>My*.bmp</p></td> +<td><p>Matches all bitmap files that begin with "My."</p></td> +</tr> +<tr> +<td><p>!*.exe</p></td> +<td><p>Excludes all executable files.</p></td> +</tr> +<tr> +<td><p>!objd\</p></td> +<td><p>Excludes all objd directories.</p></td> +</tr> +</tbody> +</table> + +These are some examples of filters: + +<table> +<thead> +<tr> +<th><p><strong>Mask</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>*.cs;!objd\;!obj\;!bin\</p></td> +<td><p>Matches all C# files, and excludes objd, obj, and bin directories</p></td> +</tr> +<tr> +<td><p>!<i>.resx;!</i>.ini;!resources\;!<i>junk</i>\</p></td> +<td><p>Excludes all resx and ini files as well as the folders "resources" or folders that have "junk" in the name</p></td> +</tr> +</tbody> +</table> + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +## Examples +The following example compares the files in the server folder and a local folder. It organizes the files in the localFolder recursively and displays the output in the Command Prompt window. + + C:>tf folderdiff $/serverFolder F:\localFolder /recursive /noprompt + +## See Also + +#### Tasks + +[Compare Two Folders](compare-folders.md) + +[View File Changes Using Annotate](view-file-changes-using-annotate.md) + +[Reconcile Differences Between Two Folders](reconcile-differences-between-two-folders.md) + +#### Concepts + +[Folder Comparison Filters](folder-comparison-filters.md) + +#### Other Resources + +[Comparing Folders and Files](compare-folders-files.md) + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/get-code-reviewed-vs.md b/docs/tfvc/get-code-reviewed-vs.md new file mode 100644 index 00000000000..0f200cf791c --- /dev/null +++ b/docs/tfvc/get-code-reviewed-vs.md @@ -0,0 +1,94 @@ +--- +title: Get your code reviewed with Visual Studio | Visual Studio Team Services +description: Get a code review from your team using Visual Studio +ms.assetid: 115cc8ee-e3b3-4bb4-a50f-604a75d52a8e +toc: show +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.topic: get-started-article +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Get your code reviewed with Visual Studio + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Before you check in your code, you can use Visual Studio to ask someone else from your team to review it. Your request will show up in his team explorer, in the my work page. + +To ask for a code review, make sure you have [shared your code in TFVC](share-your-code-in-tfvc-vs.md). + +(Are you using Git to share your code? If so, then use a [pull request](../git/pull-requests.md).) + +## Request a code review + +Jamal has changed the border color in the Hello World app, and he asks Johnnie to review the change. + +0. Before he checks in the change, Jamal goes to the my work page. + + ![My Work from the team explorer home page](_img/get-code-reviewed-vs/IC682169.png) + +0. He requests a review. + + ![Request code review link from the team explorer My Work page](_img/get-code-reviewed-vs/IC682170.png) + +0. He submits a request to Johnnie. + + ![Submit request button on the filled out new code review page in the teamexplorer](_img/get-code-reviewed-vs/IC682171.png) + +0. Jamal suspends his work on Hello World so that he can work on something else while he waits to hear back from Johnnie. + + ![Suspend link in the my work page of the team explorer](_img/get-code-reviewed-vs/IC682757.png) + +## Respond to the code review request + +Johnnie will see the code review request in the team explorer, look at the changes, and give Jamal his feedback. + +0. Johnnie opens the my work page. + + ![My work in the team explorer home page](_img/get-code-reviewed-vs/IC682758.png) + +0. He sees Jamal's code review request. + + ![The code review request in the my work page](_img/get-code-reviewed-vs/IC683034.png) + + You can get email alerts for code reviews, too. +If you aren't getting them, you can sign up in the team explorer settings page. + + ![Project alerts link in the settings page of the team explorer](_img/get-code-reviewed-vs/IC682760.png) + +0. Johnnie opens the code review request. + + ![Open the review from the context menu on the review request](_img/get-code-reviewed-vs/IC683035.png) + +0. He accepts the review. + + ![Accept the code review request](_img/get-code-reviewed-vs/IC683036.png) + +0. He opens the file that Jamal changed. + + ![The file link (Site.css) in the code review page](_img/get-code-reviewed-vs/IC683037.png) + +0. Johnnie sees that Jamal changed the color to #ddd. He selects the code in the difference window and adds a comment (Keyboard: Ctrl + Shift + K). + + ![Comment added to Site.css using the differnece window toolbar button](_img/get-code-reviewed-vs/IC682763.png) + +0. He suggests a different color instead and sends the comment to Jamal. + + ![Comment added and sent using the send comments button in the code review page in team explorer](_img/get-code-reviewed-vs/IC682764.png) + +## Update the code based on the review feedback + +0. When Jamal gets a response from Johnnie, he resumes the work on Hello World. + + ![Resume link in the my work page of the team explorer](_img/get-code-reviewed-vs/IC683038.png) + +0. His changes are unshelved and the windows he had opened are restored, so he can incorporate the review feedback. + + ![Work environment restored after resuming work](_img/get-code-reviewed-vs/IC683039.png) + +## Next steps + +> [!div class="nextstepaction"] +> [Create your backlog](../work/backlogs/create-your-backlog.md) diff --git a/docs/tfvc/get-command.md b/docs/tfvc/get-command.md new file mode 100644 index 00000000000..9711b6d2462 --- /dev/null +++ b/docs/tfvc/get-command.md @@ -0,0 +1,158 @@ +--- +title: Use the Get command to download TFVC files or folders +description: Get files or folders under TFVC version control using the Get command +ms.assetid: f374dfcb-9c1b-4cab-9a20-3c81d29593a3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Get command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Gets (downloads) either the latest version or a specified version of one or more files or folders from Team Foundation Server to the workspace. Although the **Get** command provides a different user interface than Visual Studio (see [Download (get) files from the Server](download-get-files-from-server.md)), the process is fundamentally the same. + +**Requirements:** See [Permissions and groups reference](../security/permissions.md). + + tf get [itemspec] [/version:versionspec] [/all] [/overwrite] [/force] [/remap] + [/recursive] [/preview] [/noautoresolve] [/noprompt] + [/login:username,[password]] + +## Parameters + +<table> +<thead> +<tr> +<th><p><strong>Parameter</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/all</strong></p></td> +<td><p>If you use a <a href="decide-between-using-local-server-workspace.md">local workspace</a> (recommended), then it‘s unlikely you will have to use this option.</p> +<p>You can use this option to restore an item that you have accidentally deleted from a server workspace.</p> +<p>Your Team Foundation Server maintains an internal record of all the items the workspace contains, including the version of each. By default, when you get files, if the internal record on the server indicates the workspace already has the version you are getting, then it does not retrieve the item. This option gets the items regardless of the data contained in this internal record.</p></td> +</tr> +<tr> +<td><p><strong>/force</strong></p></td> +<td><p>Combines <strong>/all</strong> and <strong>/overwrite</strong>.</p></td> +</tr> +<tr> +<td><p><i>itemspec</i></p></td> +<td><p>Specifies the scope of the items to get. You can specify more than one <i>itemspec</i> argument. If no <i>itemspec</i> is provided, the system recursively gets all items in the current workspace.</p> +<p>For syntax, see <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong>:<i>username</i>,[<i>password</i>]</p></td> +<td><p>Specifies the user account to run the command. See <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td> +</tr> +<tr> +<td><p><strong>/noautoresolve</strong></p></td> +<td><p>By default, the system automatically attempts to <strong>AutoResolve All</strong> (see <a href="resolve-team-foundation-version-control-conflicts.md">Resolve Team Foundation Version Control conflicts</a>). Specify this option to disable this default behavior.</p></td> +</tr> +<tr> +<td><p><strong>/noprompt</strong></p></td> +<td><p>Suppresses the display of windows and dialog boxes and redirects output data to the command prompt. See <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td> +</tr> +<tr> +<td><p><strong>/overwrite</strong></p></td> +<td><p>If you use a <a href="decide-between-using-local-server-workspace.md">local workspace</a> (recommended), then it is unlikely you will have to use this option.</p> +<p>By default, the system does not retrieve an item if it is writable (that is, if its read-only attribute is cleared) on the client machine. This option overrides the default behavior and overwrites a writable item, unless the item is checked out.</p></td> +</tr> +<tr> +<td><p><strong>/preview</strong></p></td> +<td><p>Displays what would occur, without actually performing the <strong>Get</strong> operation.</p></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>Recursively gets items in the specified directory and any subdirectories. If you do not specify an <em>itemspec</em>, then this option is implied.</p></td> +</tr> +<tr> +<td><p><strong>/remap</strong></p></td> +<td><p>See <a href="http://go.microsoft.com/fwlink/?LinkId=253390">phkelley's blog: tf get /remap</a>.</p></td> +</tr> +<tr> +<td><p><strong>/version</strong>:<i>versionspec</i></p></td> +<td><p>Specifies the maximum version, or the minimum and the maximum versions, to display in the history data. The default is `/version:T` (the latest version).</p> +<p>For syntax, see <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td> +</tr> +</tbody> +</table> + +## Examples + +In all the following examples, assume that `$/SiteApp/Main/` is mapped to `c:\\code\\SiteApp\\Main\\` in the workspace. + +### Get the latest version of all items in a workspace + + c:\code\SiteApp\Main\SolutionA>tf get + +Gets the latest versions of all items in the workspace. For example, the above command would recursively get all files in `$/SiteApp/Main/` including all its child folders. + +### Recursively get the latest version of items of a certain type in a folder + + c:\code\SiteApp\Main\SolutionA\Project1>tf get *.cs /recursive + +Gets the latest version of all C\# (.cs) files in `c:\\code\\SiteApp\\Main\\SolutionA\\Project1`. + +### Get the latest version of a file + + c:\code\SiteApp\Main\SolutionA\Project1>tf get program.cs + +Gets the latest version of program.cs in Project1. + +### Get a specific version of a file + + c:\code\SiteApp\Main\SolutionA\Project1>tf get program.cs;8 + +Gets version 8 of program.cs in Project1. + +### Get the latest version of two files + + c:\code\SiteApp\Main\SolutionA\Project1>tf get file1.cs file2.cs + +Gets the latest version of file1.cs and file2.cs in Project1. + +### Synchronize a workspace to match a version of the team’s codebase + + c:\code\SiteApp\Main>tf get /v:15 + +Synchronizes the workspace to match the codebase as it existed when changeset 15 was created: + +- The name and content of every item in the workspace is changed to match the state it was in on the server. + +- Items that were deleted after that changeset are restored to the workspace. + +- Items that were added after that changeset are deleted from the workspace. + +### Synchronize a workspace to match a labeled version of the team’s codebase + + c:\code\SiteApp\Main>tf get /v:LLastKnownGood + +Synchronizes the workspace to match the items in the codebase that are [labeled](use-labels-take-snapshot-your-files.md) **LastKnownGood**: + +- The name and content of every labeled item in the workspace is changed to match the state it was in on the server. + +- Labeled items that were deleted are restored to the workspace. + +- Items that are not labeled on the server are deleted from the workspace. + +## Work in Visual Studio + +- [Download (get) files from the Server](download-get-files-from-server.md) Use Visual Studio to get files and folders. + +## Tips + +- ![Tip](_img/get-command/IC572374.png) If you are beginning a new task, it’s probably a good idea for you to run `tf get` (you can do so from any directory in your workspace) to download the latest files from the server before you check out files and begin your work. + +- ![Tip](_img/get-command/IC572374.png) As needed, this command creates folders on disk to contain the child items that the command is downloading. + +- ![Tip](_img/get-command/IC572374.png) You can view information about the history of an item using the [History command](history-command.md) and the [Changeset Command](changeset-command.md). + +- ![Tip](_img/get-command/IC572374.png) If you are concerned about what changes might occur to the files in the workspace, you can use the **/preview** option to see the changes that would occur without actually implementing them. + +- ![Tip](_img/get-command/IC572374.png) Conflicts could block your get. A typical cause of conflicts is trying to get an item on which you have pending changes. You can use the [Resolve Command](resolve-command.md) to resolve these conflicts. diff --git a/docs/tfvc/get-history-item.md b/docs/tfvc/get-history-item.md new file mode 100644 index 00000000000..9fe30cdc8b7 --- /dev/null +++ b/docs/tfvc/get-history-item.md @@ -0,0 +1,162 @@ +--- +title: Get the history of an item +description: Get the history of an item +ms.assetid: 5a29031c-7fb6-42ac-885c-276b59a4b951 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Get the history of an item + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +One advantage of a version control system is that you can look back in time to get detailed information about what changes have been made to your files. Team Foundation version control maintains historical data related to every version of every file that has ever been checked in. + +Often when you look over the history of a file, folder, or branch, you are trying to solve a problem or answer a question. By using the Team Foundation version control **History** window, you can more easily resolve questions and situations such as the following: + +- What changes have been made in the past weeks or months? + +- What work item was completed by this change to the file? + +- Who checked in this change? What did they say about the change? What did they change? + +- Unexpected changes occurred in this file, causing a bug in an area of the product that we thought was stable. Who made this change, and why did they make it? + +- A change in this branch fixes a bug that also needed to be fixed in other branches. How can I make sure that the change was merged to those branches? + +Use the **History** window to get detailed historical data about a team project, branch, folder, or file. + +**Required permissions** + +You must be one of the **Contributors** for your team project. See [Team Foundation Server default groups, permissions, and roles](https://msdn.microsoft.com/library/ms253077). + +To display the History window: + +- In [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), select an item, open its shortcut menu, and then choose **View History**. + + > [!TIP] + > You can customize the position of the window by right-clicking the title and then choosing one of these options: **Float**, **Dock**, or **Dock as Tabbed Document**. + +- Use the [History Command](history-command.md). + +The **History** window displays the historical data about the item in two tabs: + +- The [Changesets tab](get-history-item.md#changesets_tab) lists every change (including edits, renames, and merges) made to the item. + +- The [Labels tab](get-history-item.md#labels_tab) lists every label that has been applied to the item. + +<a name="changesets_tab"> + +## Changesets Tab + +The **Changesets** tab displays detailed data about every change that has been made to an item. All changesets that have modified the item are listed in a table that includes the following columns: + +- **Changeset**   The ID of the changeset. + +- **User**   The name of the user who checked in the changeset. + +- **Date**   The date and time the changeset was checked in. + +- **Comment**   The comment entered by the user who checked in the changeset. + +> [!NOTE] +> If you open this window by using the **History** command and you are displaying data about a team project, branch, or folder, then the history of children items (for example, the files contained by a folder) is shown only if you use the **/recursive** option. + +If the item is a file, then additional data is displayed in the following columns: + +- **Change**   The types of changes that were made to the file with the changeset. Examples of values that can appear in this column include **add**, **edit**, **rename**, and **merge**. + +- **Path**  The path to the file. + +> [!TIP] +> Sometimes you need to share this kind of data with someone else. You can select one or more rows from the table in the **Labels** tab, right-click them, click **Copy** to copy the data to the clipboard, and then paste the data into an e-mail message, document, or spreadsheet. + +### Common Tasks + +By using the **Changesets** tab, you can perform the following tasks: + +<table><thead> +<tr><th><p>Task</p></th><th><p>Supporting content</p></th></tr></thead><tbody> +<tr> + <td><p><strong>View the item as it existed when the changeset was checked in:</strong> Double click the changeset or right-click it, and then click <strong>View</strong>. (This command is available only if the item is a file.)</p><p></p></td> + <td><p>None</p></td></tr> +<tr> + <td><p><strong>Get more details about a changeset:</strong> Right-click a changeset and then click <strong>Changeset Details</strong> to get information such as:</p><ul><li><p>Other source files that are part of the changeset.</p></li><li><p>Work items associated with the changeset.</p></li><li><p>Any check-in notes left for reviewers.</p></li></ul></td> + <td><p> <a href="find-view-changesets.md">Find and view changesets</a> </p></td></tr> +<tr> + <td><p><strong>Compare a past version with the current version:</strong> Right-click a changeset and then click <strong>Compare</strong>.</p><p><strong>Compare a past version with another past version:</strong></p><ol><li><p>Select a changeset.</p></li><li><p>Press and hold the CONTROL key and then select the second changeset.</p></li><li><p>Right-click the second changeset and click <strong>Compare</strong>.</p></li></ol></td> + <td><p> <a href="compare-files.md">Compare files</a> </p><p> <a href="compare-folders.md">Compare folders</a> </p></td></tr> +<tr> + <td><p><strong>Get a past version of the item: </strong>Right-click a changeset and then click <strong>Get This Version</strong> to download the past version of the item to your workspace.</p></td> + <td><p> <a href="download-get-files-from-server.md">Download (get) files from the Server</a> </p></td></tr> +<tr> + <td><p><strong>View which users made specific changes within a file:</strong> Right-click a changeset and then click <strong>Annotate</strong>. (This command is available only if the item is a file.)</p></td> + <td><p> <a href="view-file-changes-using-annotate.md">View file changes using annotate</a> </p></td></tr> +<tr> + <td><p><strong>Get more details about a merge:</strong> If the changeset resulted from a <strong>merge</strong> change, you can expand this item. Expand the node to display the changesets that were merged into this item from another branch. (This command is available only if the item is a file.)</p></td> + <td><p>None</p></td></tr> +<tr> + <td><p><strong>Get more details about changes that were made before a rename change:</strong> If the changeset includes a <strong>rename</strong> change, you can expand this item. Expand the node to display the changesets that occurred before the <strong>rename</strong> change was made.</p></td> + <td><p>None</p></td></tr> +<tr> + <td><p><strong>View other branches to which this changeset has been merged: </strong>Right-click the changeset and click <strong>Track Changeset</strong>.</p></td> + <td><p> <a href="view-where-when-changesets-have-been-merged.md">View where and when changesets have been merged</a> </p></td></tr> +<tr> + <td><p><strong>Roll back changes from one changeset</strong> Select a single changeset and choose <strong>Rollback Entire Changeset</strong>.</p></td> + <td><p> <a href="roll-back-changesets.md">Roll back changesets</a> </p></td></tr> +<tr> + <td><p><strong>Roll back changes from two or more consecutive changesets</strong> Select a set of consecutive changesets and choose <strong>Rollback</strong>.</p></td> + <td><p> <a href="roll-back-changesets.md">Roll back changesets</a> </p></td></tr> +<tr> + <td><p><strong>Display non-recursive history of a folder</strong> You can get this data only from the command prompt.</p></td> + <td><p><a href="history-command.md">History Command</a></p></td></tr></tbody> +</table> + +<a name="labels_tab"> + +## Labels tab + +All labels that have been applied to the item are listed in a table that includes the following columns: + +- **Name**   The name of the label. + +- **User**   The user who applied the label. + +- **Date**   The date and time the label was applied. + +- **Changeset** The changeset to which the label applies. + +- **Comment**   The comment made by the user who applied the label. + +> [!NOTE] +> When you display historical data about a team project, branch, or folder, the data about labels applied to children items (for example, the files contained by a folder) is not shown. + +  + +> [!TIP] +> Sometimes you need to share this kind of data with someone else. You can select one or more rows from the table in the **Labels** tab, right-click them, click **Copy** to copy the data to the clipboard, and then paste the data into an e-mail message, document, or spreadsheet. + +## Common Tasks + +|Task|Supporting content| +|---|---| +|**View the item as it existed when the labeled changeset was checked in:** Right-click a label and then click **View**. (This command is available only if the item is a file.)|None| +|**Edit the label:** Right-click the label and click **Edit Label**.| [Use labels to take a snapshot of your files](use-labels-take-snapshot-your-files.md) | +|**Delete the label: **Right-click the label and click **Delete Label**.| [Use labels to take a snapshot of your files](use-labels-take-snapshot-your-files.md) | +|**Compare a past version of the item with the current version:** Right-click a label and then click **Compare** to compare a past version of the item with the current version.| [Compare files](compare-files.md) [Compare folders](compare-folders.md) | +|**Get a past version of the item: **Right-click a label and then click **Get This Version** to download the past version of the item to your workspace.| [Download (get) files from the Server](download-get-files-from-server.md) | +|**View other branches to which the labeled changeset has merged: **Right-click the label and click **Track Changeset**. (This command is available only if the item is a file.)| [View where and when changesets have been merged](view-where-when-changesets-have-been-merged.md) | +|**View which users made specific changes within the labeled version of a file:** Right-click a changeset and then click **Annotate**. (This command is available only if the item is a file.)| [View file changes using annotate](view-file-changes-using-annotate.md) | + +## See Also + +#### Other Resources + + [Find and view changesets](find-view-changesets.md) + + [Use Source Control Explorer to manage files under version control](use-source-control-explorer-manage-files-under-version-control.md) + + [Use branches to isolate risk in Team Foundation Version Control](use-branches-isolate-risk-team-foundation-version-control.md) diff --git a/docs/tfvc/help-command-team-foundation-version-control.md b/docs/tfvc/help-command-team-foundation-version-control.md new file mode 100644 index 00000000000..af200c0de4e --- /dev/null +++ b/docs/tfvc/help-command-team-foundation-version-control.md @@ -0,0 +1,62 @@ +--- +title: Help Command (Team Foundation Version Control) +description: Help Command (Team Foundation Version Control) +ms.assetid: 8cd73edc-8d60-42be-a840-616e6207a1d8 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Help Command (Team Foundation Version Control) + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays help on the command line that contains information about syntax for a Team Foundation version control command. + + tf help commandname +## Parameters<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><em>commandname</em></p></td> +<td><p>Specifies a Team Foundation command for which to display help about the syntax.</p></td> +</tr> +</tbody> +</table> +## Remarks +If you do not know which command you need, type **tf help** for a list of all commands. + +If you specify the *commandname* parameter, the command line displays information about the arguments and options for that command. If the system cannot find a match for the *commandname*, it searches for aliases and short names. If it cannot find any matching command, alias, or short name, you will get an error. + +The option **/?** is an alias for **help**. If you use the **/?** option together with a command, the system invokes the **help** command and it displays information about syntax. + +For more information about how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example displays a list of the version control commands. + + c:\projects>tf help + +The following example displays information about syntax for the **workspace** command. + + c:\projects>tf help workspace + +The following example also displays the same information about syntax for the **workspace** command. + + c:\projects>tf workspace /? + +## See Also + +#### Reference + +[Msdn Command](msdn-command.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/history-command.md b/docs/tfvc/history-command.md new file mode 100644 index 00000000000..7c11226cb17 --- /dev/null +++ b/docs/tfvc/history-command.md @@ -0,0 +1,265 @@ +--- +title: History command +description: History command +ms.assetid: 14c451c2-c59e-46c7-afd5-c727ba683eb2 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# History command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays the revision history of one or more files or folders. The data is displayed in either the History window, or if **/noprompt** option is specified, at the command prompt. + +**Requirements:** See [Permissions and groups reference](../security/permissions.md). + + tf hist[ory] itemspec [/version:versionspec] + [/stopafter:number] [/recursive] [/user:username] + [/format:(brief|detailed)] [/slotmode] [/itemmode] [/noprompt] + [/login:username,[password]] [/sort:ascending,descending] + [/collection:TeamProjectCollectionUrl] + +## Parameters + +<table> +<thead> +<tr> +<th><p><strong>Parameter</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/collection</strong>: <i>TeamProjectCollectionUrl</i></p></td> +<td><p>Specifies the URL of the team project collection that contains the items. For example: http://myserver:8080/tfs/DefaultCollection.</p> +<p>By default, the team project collection is presumed to be the one that contains the workspace that maps the current directory.</p></td> +</tr> +<tr> +<td><p><strong>/format</strong></p></td> +<td><p>Specifies how much detail to display about each changeset when the <strong>/noprompt</strong> option is specified:</p> +<ul> +<li><p><strong>Brief</strong> (default): Displays one line about each changeset that includes: ID number, changes made, user who made the changes, date, and comment. Some of the data may be truncated.</p></li> +<li><p><strong>Detailed</strong>: Displays a full description of each changeset. In addition to the above information, this option displays additional data such as date with time, items changed, check-in notes, and check-in policy warnings.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>/itemmode</strong></p></td> +<td><p>You cannot combine this option with the <strong>/slotmode</strong> option. See <a href="http://go.microsoft.com/fwlink/?LinkId=253467">Matt Mitrik: Changing to Slot Mode in TFS 2010 Version Control</a>.</p></td> +</tr> +<tr> +<td><p><i>itemspec</i></p></td> +<td><p>Specifies the items for which to display history. For syntax, see <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td> +</tr> +<tr> +<td><p><strong>/noprompt</strong></p></td> +<td><p>This option:</p> +<ul> +<li><p>Suppresses the display of windows and dialog boxes (such as the <strong>History</strong> window) and redirects output data to the command prompt. See <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></li> +<li><p>Does not display the history of revisions that occurred before an item was moved, renamed, branched, or merged.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>/login</strong>:<i>username</i>,[<i>password</i>]</p></td> +<td><p>Specifies the user account to run the command. See <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>Recursively retrieves historical data on items in the specified directory and any subdirectories.</p></td> +</tr> +<tr> +<td><p><strong>/slotmode</strong></p></td> +<td><p>You cannot combine this option with the <strong>/itemmode</strong> option. See <a href="http://go.microsoft.com/fwlink/?LinkId=253467">Matt Mitrik: Changing to Slot Mode in TFS 2010 Version Control</a>.</p></td> +</tr> +<tr> +<td><p><strong>/sort</strong></p></td> +<td><p>Sorts the revision history for one or more files or folders in either of the following orders:</p> +<ul> +<li><p><strong>Ascending</strong>: from the oldest to the most recent revision.</p></li> +<li><p><strong>Descending</strong> (default): from the most recent to the oldest revision.</p></li> +</ul> +<p>You must use the <strong>/noprompt</strong> option with this option.</p></td> +</tr> +<tr> +<td><p><strong>/stopafter</strong>:<i>number</i></p></td> +<td><p>Specifies the maximum number of changesets to display in the history data.</p></td> +</tr> +<tr> +<td><p><strong>/user</strong>:<i>username</i></p></td> +<td><p>Filters the historical data to show changes made by the specified user. An asterisk (<strong>*</strong>) symbol includes data on changes from all users (the default).</p></td> +</tr> +<tr> +<td><p><strong>/version</strong>:<i>versionspec</i></p></td> +<td><p>Specifies one of the following limits on the history data:</p> +<ul> +<li><p>The maximum version</p></li> +<li><p>The minimum and the maximum versions using the range <strong>~</strong> syntax.</p></li> +</ul> +<p>The default is `/version:W` (the version in the workspace).</p> +<p>For syntax, see <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p> +<p>You cannot combine this option with the <strong>/slotmode</strong> option.</p></td> +</tr> +</tbody> +</table> + +## Examples + +### Get history of a single file + + c:\code\SiteApp\Main\SolutionA\Project1>tf history program2.cs + +Displays all changes made to program.cs in the History window. + + c:\code\SiteApp\Main\SolutionA\Project1>tf history program2.cs /noprompt + +Displays all changes made to program.cs in the command prompt window. For example: + + Changeset Change User Date Comment + --------- -------------------------- ----------------- ---------- -------- + 29        edit Jamal Hartnett 4/23/2012 Fix bug + 20        add Raisa Pokrovskaya 4/12/2012 Add new + +### Get history of all items in a folder + + c:\code\SiteApp\Main\SolutionA>tf history * /recursive + +Displays all changes made to all items in SolutionA (including those in subfolders) in the History window. + +### Get history of the last five changes to all items in a folder + + c:\code\SiteApp\Main\SolutionA>tf history * /noprompt /recursive /stopafter:5 + +Displays the latest 5 changes made to items in SolutionA (including those in subfolders): + + Changeset User              Date       Comment + --------- ----------------- ---------- ---------------------------------------- + 31        Raisa Pokrovskaya 5/15/2012 + 30        Raisa Pokrovskaya 4/23/2012 + 29        Jamal Hartnett 4/23/2012 Fix bug in new method + 20        Raisa Pokrovskaya 4/12/2012 Add new method, add program2.cs to Proje + 15        Raisa Pokrovskaya 4/8/2012 + +### Get history from version x and earlier + + c:\code\SiteApp\Main\SolutionA>tf history /noprompt * /recursive /v:30 + +Displays changes made to all items in SolutionA (including those in subfolders) in version 30 and earlier: + + Changeset User              Date       Comment + --------- ----------------- ---------- ---------------------------------------- + 30        Raisa Pokrovskaya 4/23/2012 + 29        Jamal Hartnett 4/23/2012 Fix bug in new method + 20        Raisa Pokrovskaya 4/12/2012 Add new method, add program2.cs to 15        Raisa Pokrovskaya 4/8/2012 + +### Get history from date D and earlier + + c:\code\SiteApp\Main\SolutionA>tf history /noprompt * /recursive /v:D4/24/2012 + +-- or -- + + c:\code\SiteApp\Main\SolutionA>tf history /noprompt * /recursive /v:D2012-04-24T12:00 + +Displays changes made to all items in SolutionA (including those in subfolders) on 4/23/12 or earlier: + + Changeset User              Date       Comment + --------- ----------------- ---------- ---------------------------------------- + 30        Raisa Pokrovskaya 4/23/2012 + 29        Jamal Hartnett 4/23/2012 Fix bug in new method + 20        Raisa Pokrovskaya 4/12/2012 Add new method, add program2.cs to 15        Raisa Pokrovskaya 4/8/2012 + +### Get history from version x to version y + + c:\code\SiteApp\Main\SolutionA>tf history /noprompt * /recursive /v:D4/12/2012~D4/24/2012 + +Displays changes made to all items in SolutionA (including those in subfolders) between 4/12/2012 and 4/23/12: + + Changeset User              Date       Comment + --------- ----------------- ---------- ---------------------------------------- + 30        Raisa Pokrovskaya 4/23/2012 + 29        Jamal Hartnett 4/23/2012 Fix bug in new method + 20        Raisa Pokrovskaya 4/12/2012 Add new method, add program2.cs to + +### Get detailed history + + c:\code\SiteApp\Main\SolutionA>tf history /noprompt * /recursive /v:D4/12/2012~D4/24/2012 /format:detailed + +Displays details about changes made to all items in SolutionA (including those in subfolders) between 4/12/2012 and 4/23/12: + + ------------------------------------------------------------------------------- + Changeset: 30 + User: Raisa Pokrovskaya (Fabrikam) + Date: Monday, April 23, 2012 1:23:05 PM + + Comment: + Much better name for this file + + Items: + rename $/SiteApp/Main/SolutionA/Project1/programBig.cs + delete, source rename $/SiteApp/Main/SolutionA/Project1/program3.cs;X15 + + ------------------------------------------------------------------------------- + Changeset: 29 + User: Raisa Pokrovskaya (Fabrikam) + Date: Monday, April 23, 2012 1:03:13 PM + + Comment: + Fix bug in new method + + Items: + edit $/SiteApp/Main/SolutionA/Project1/program1.cs + edit $/SiteApp/Main/SolutionA/Project1/program2.cs + + ------------------------------------------------------------------------------- + Changeset: 20 + User: Raisa Pokrovskaya (Fabrikam) + Date: Thursday, April 12, 2012 5:09:35 PM + + Comment: + Add new method, add program2.cs to Project1 + + Items: + add $/SiteApp/Main/SolutionA/Project1/program2.cs + + Check-in Notes: + Documentation: + An important new part of our codebase. + + Policy Warnings: + Override Reason: + Jamal agrees with me that we can bypass for this check-in. + Messages: + The Code Analysis Policy requires files to be checked in through Visual + Studio with an open solution. + +### Get the non-recursive history of a folder + + c:\code\SiteApp\Main\SolutionA>tf history . + +Displays the history of the SolutionA folder in the History window, which enables you to explore earlier changes to the folder. For example, if the most recent change to the folder was a rename, you can expand the changeset to see changes that occurred before the rename. + + c:\code\SiteApp\Main\SolutionA>tf history . /noprompt + +Displays the most recent change to the SolutionA folder in the command prompt window. + +## Work in Visual Studio + +- [Get the history of an item](get-history-item.md) Use Visual Studio to get revision history. + +## Tips + +- ![Tip](_img/history-command/IC572374.png) For information about how to use the **History** window, see [Get the history of an item](get-history-item.md). + +- ![Tip](_img/history-command/IC572374.png) To get more detailed information about a changeset (for example, you want to see associated work items): + + - In the History window, double-click the changeset or open its context menu and choose **Changeset Details**. + + - From the command prompt, use the [Changeset Command](changeset-command.md). + +- ![Tip](_img/history-command/IC572374.png) For more information about changesets, see [Find and view changesets](find-view-changesets.md). + +- ![Tip](_img/history-command/IC572374.png) The **/collection** option is useful for running this command from a machine and user account that does not have a workspace mapped to the Team Project Collection that contains the items. + +- ![Tip](_img/history-command/IC572374.png) See [View and manage past versions](view-manage-past-versions.md). diff --git a/docs/tfvc/index.md b/docs/tfvc/index.md new file mode 100644 index 00000000000..ed7a08bef3a --- /dev/null +++ b/docs/tfvc/index.md @@ -0,0 +1,42 @@ +--- +title: Team Foundation Version Control (TFVC) index to content +description: Guide to getting started with TFVC documentation +ms.prod: vs-devops-alm +ms.technology: vs-devops-git +ms.assetid: 36A4986E-BFB8-422B-BFC9-8A0CB75D0603 +ms.manager: douge +ms.author: sdanie +ms.date: 09/07/2017 +layout: LandingPage +--- + +# TFVC + +Whether your software project is large or small, using version control as soon as possible is a good idea. +Version control systems are software that help you track changes you make in your code over time. As you edit your code, you tell the version control system to take a snapshot of your files. +The version control system saves that snapshot permanently so you can recall it later if you need it. + +VSTS and TFS provide two models of version control: [Git](../git/overview.md), which is distributed version control, and [Team Foundation Version Control (TFVC)](use-team-foundation-version-control-commands.md), which is centralized version control. This article provides an overview and a starting point for using Team Foundation Version Control. If you're deciding which type of Team Services/TFS version control to use, see [Choosing the right version control for your project](comparison-git-tfvc.md). + +## 5-Minute Quickstarts + +Get started by creating a team project, configuring your workspace, and reviewing and sharing your code. You can use any one of these clients or IDEs: + +<!--- All images are Placeholder --> +<!-- Converting to icon48 format, this gets cleaner in YAML --> +<div class="ico48Case halfStack"><div class="ico48Link"><a href="share-your-code-in-tfvc-vs.md"><img width="48" height="48" alt="" src="https://docs.microsoft.com/media/logos/logo_visual-studio.svg"><span>Visual Studio</span></a></div><div class="ico48Link"><a href="share-your-code-in-tfvc-xcode.md"><img width="48" height="48" alt="" src="_img/index/xcode.png"><span>Xcode</span></a></div><div class="ico48Link"><a href="share-your-code-in-tfvc-eclipse.md"><img width="48" height="48" alt="" src="_img/index/eclipse.png"><span>XCode</span></a></div></div> + + +## Step-by-Step Tutorials + +Learn the basics of working in TFVC with the following tutorial which shows a day in the life of a devops developer using Visual Studio and TFVC. + +* [Day in the life of a devops developer: suspend work, fix a bug, and conduct a code review](day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md) +* [Visual Studio: Review Code](get-code-reviewed-vs.md) + + +## Resources + +- [What is version control?](https://www.visualstudio.com/learn/what-is-version-control/) +- [Migrate from TFVC to Git](https://www.visualstudio.com/learn/migrate-from-tfvc-to-git/) +- [Learn more about TFVC](overview.md) \ No newline at end of file diff --git a/docs/tfvc/label-command-team-foundation-version-control.md b/docs/tfvc/label-command-team-foundation-version-control.md new file mode 100644 index 00000000000..462e9c9b4fd --- /dev/null +++ b/docs/tfvc/label-command-team-foundation-version-control.md @@ -0,0 +1,186 @@ +--- +title: Label Command (Team Foundation Version Control) +description: Label Command (Team Foundation Version Control) +ms.assetid: 815fd18a-1511-4f72-8a4a-7b1b0d3b2144 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Label Command (Team Foundation Version Control) + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Updated: October 2011 + +Attaches a label to or removes a label from a version of a file or folder in the server for Team Foundation version control. + +**Required Permissions** + +To use the **label** command, you must have the **Label** permission set to **Allow**. To modify or delete labels created by other users, you must have the **Administer labels** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf label labelname[@scope] [/owner:ownername] + itemspec [/version:versionspec] [/comment:("comment"|@commentfile)] + [/child:(replace|merge)] [/recursive] [login:username,[password]] [/collection:TeamProjectCollectionUrl] + + tf label /delete labelname[@scope] + itemspec [/login:username,[password]] [/collection:TeamProjectCollectionUrl] + +## Parameters + +<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><i>labelname</i></p></td> +<td><p>Identifies the name of the label to attach, modify, or remove from the specified items.</p></td> +</tr> +<tr> +<td><p><i>@scope</i></p></td> +<td><p>Specifies a Team Foundation version control server directory within which the labelname is unique. This parameter lets you independently create, manage, retrieve, and delete one label or set of labeled items when two labels of the same name are in different parts of the Team Foundation version control server.</p></td> +</tr> +<tr> +<td><p><i>ownername</i></p></td> +<td><p>Provides a value such as DOMAIN\JuanGo or just juango to the <strong>/owner</strong> option.</p></td> +</tr> +<tr> +<td><p><i>itemspec</i></p></td> +<td><p>Identifies the file or folder from which to label, re-label, or modify. For more information about how Team Foundation parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p> +<div class="alert"> +<div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"> +<div class="mtps-row"> +<strong>Note</strong> +</div> +<div class="mtps-row"> +You can specify more than one <i>Itemspec</i> argument. +</div> +</div> +</div></td> +</tr> +<tr> +<td><p><i>versionspec</i></p></td> +<td><p>Provides a value such as c2 for the <strong>/version</strong> option. For more information about how Team Foundation parses a version specification to determine which items are within its scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p></td> +</tr> +<tr> +<td><p><i>comment</i></p></td> +<td><p>A user-provided comment about the label.</p></td> +</tr> +<tr> +<td><p><i>@commentfile</i></p></td> +<td><p>The user-provided path of a file on disk that contains the comment to use for the check-in.</p></td> +</tr> +<tr> +<td><p><i>username</i></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <i>DOMAIN</i>\<i>UserName</i> or <i>UserName</i>.</p></td> +</tr> +<tr> +<td><p><i>TeamProjectCollectionUrl</i></p></td> +<td><p>The URL of the specified team project collection that contains a version of a file or folder to which you want to attach a label or from which you want to delete a label (for example, http://myserver:8080/tfs/DefaultCollection).</p></td> +</tr> +</tbody> +</table> + +| **Option** | **Description** | +|---|---| +| **/owner** | Specifies the name of the user who owns the label. | +| **/version** | Optional. Specifies the version of the file or folder to which the label should be attached, modified, or from which the label should be removed. These are changeset values, for example, C93. By default, Team Foundation uses the base workspace version if no *versionspec* is provided. | +| **/comment** | Adds or modifies a description or comment for the label. | +| **/child** | Not documented. | +| **/recursive** | Labels all items in the directory that matches your *itemspec* and *versionspec*. Cannot be used with the **/delete** option. | +| **/delete** | Removes the label. | +| **/login** | Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server. | +| **/collection** | Specifies the team project collection. | + + +## Remarks +A label is a marker that you can attach to a set of unrelated files and folders in the Team Foundation version control server. Use the label to simplify their retrieval to a workspace for either development or build purposes. Therefore, a label is like a changeset or date/time to which and from which you can arbitrarily add and remove files and folders or change the versions of the items therein. A label is a version specification that can be passed to the following Team Foundation commands: + +- [Branch Command](branch-command.md) + +- [Difference Command](difference-command.md) + +- [Dir Command](dir-command.md) + +- [Get Command](get-command.md) + +- [History Command](history-command.md) + +- [Merge Command](merge-command.md) + +- [View Command](view-command.md) + +Common types of labels are milestone labels such as "M1," "Beta2," or "Release Candidate 0." + +Labels are version-specific, that is, you can only attach a label to one version of a file or folder. Each version of an item can support multiple labels. + +A label is not a versioned object; therefore, the label history of files is not tracked. Additionally, a label operation does not create a pending change in your workspace. When you issue the **label** command, the update is immediately reflected in the Team Foundation version control server. + +For more information about how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### Removing and Deleting Labels + +You can use the [Unlabel Command](unlabel-command.md) to remove a label from a file or folder. Alternatively, you can delete a label from the system using the `tf label /delete` command. + +For information about an existing label that includes a list of the items to which the label has been attached, its comment, scope, and owner, see [Labels Command](labels-command.md). + +### Managing Overloaded Labels + +Label names must be unique throughout a specified scope. When you add a label, you reserve the use of that label name at or under the specified or implied scope. The default value for the *@scope* parameter is the team project, for example, $/TeamProject1. + +If another team or user adds a common label such as "M3" to a set of version-controlled files in a different part of the Team Foundation version control server, you can apply the M3 label to version-controlled files in your project as long as the root project folders are in different directories. For example, if files in the $/math directory are labeled "M3," you can apply the "M3" to files in your $/projects directory. + +To get, remove a label, or otherwise manage your M3-labeled items, you should specify the @scope parameter to tell Team Foundation which M3 label you want to work with. + +You can prevent other users from "overloading" a label such as "M3" in different parts of the Team Foundation version control server by either creating your label at the root ($/) of the Team Foundation version control server or by adjusting Label permissions for certain folders. +## Examples +The following example attaches the "goodbuild" label to the workspace version of the "docs" folder and the files and folders it contains. + + c:\projects>tf label goodbuild docs /recursive + +The following example attaches the "goodbuild" label to the "docs" folder but not the files and folders the docs folder contains. + + c:\projects>tf label goodbuild docs + +The following example attaches the "goodbuild" label to version 3 of 314.cs in the Team Foundation version control server. + + c:\projects>tf label goodbuild /version:3 $/src/314.cs + +The following example deletes the "badbuild" label from all items in the Team Foundation version control server. + + c:\projects>tf label /delete badbuild + +The following example uses the scope option to apply a label to 314.cs. + + c:\projects>tf label goodbuild@$/TeamProject1 314.cs + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Labels Command](labels-command.md) + +[Unlabel Command](unlabel-command.md) + +#### Concepts + +[Use Labels to Take a Snapshot of Your Files](use-labels-take-snapshot-your-files.md) + +[Use Labels to Take a Snapshot of Your Files](use-labels-take-snapshot-your-files.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) +## Change History + +| Date | History | Reason | +|---|---|---| +| October 2011 | Removed incorrect guidance on `/child` option. | Content bug fix. | diff --git a/docs/tfvc/labels-command.md b/docs/tfvc/labels-command.md new file mode 100644 index 00000000000..f970bdbaf00 --- /dev/null +++ b/docs/tfvc/labels-command.md @@ -0,0 +1,76 @@ +--- +title: Labels Command +description: Labels Command +ms.assetid: 7772bc3d-7c43-47d8-ba5c-eee89aeed3ce +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Labels Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays the list of labels in the server for Team Foundation version control. + +**Required Permissions** + +To use the **labels** command, you must have the **Read** permission set to **Allow** for all files or folders to which the specified label is attached. If you have permission to some, but not all the files referenced in the label, partial results are displayed. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf labels [/owner:ownername] [/format:(brief|detailed)] + [/collection:TeamProjectCollectionUrl] [labelname] [/login:username,[password]] + +## Parameters<table> +|**Argument**|**Description**| +|---|---| +|*ownername*|Provides a username as DOMAIN\JuanGo or juango to the **/owner** option.| +|*labelname*|Specifies a string that should be used to filter the list of labels. If this parameter is omitted, the label name field will not be filtered.| +|*TeamProjectCollectionUrl*|The URL of the team project collection for which you want to display the list of labels (for example, http://myserver:8080/tfs/DefaultCollection).| +|*username*|Provides a value to the **/login** option. You can specify a username value as either *DOMAIN*\*UserName* or *UserName.*| + +|**Option**|**Description**| +|---|---| +|**/owner**|Specifies the name of the user who owns the label. By default, the owner is the person who applies the label.| +|**/format**|Displays information about the specified label in one of the following formats:<ul><li><strong>Brief:</strong> Includes label, owner, and date created. This is the default.</li><li><strong>Detailed:</strong> Includes also comments, scope, and a list of files and folders associated with each label.</li></ul>| +|**/collection**|Specifies the team project collection.| +|**/login**|Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.| +## Remarks +The **labels** command displays information about labels in the Team Foundation version control server. If you do not specify a Team Foundation version control server, the Team Explorer tries to determine the Team Foundation version control server based by using the current directory. If the current directory is not mapped to a Team Foundation version control server, you must specify one by using the **/s** option. + +By default, the results display the label name, owner and creation date for each label. If the format is changed to "detailed," comments and the list of files and folders associated with each label are also displayed. + +For links to other Team Foundation commands that provide additional information about the items in your Team Foundation version control server and all of the workspaces that map to it, see [Informational Commands](https://msdn.microsoft.com/library/ms181450). + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example displays the list of labels created by user "jasonj." + + c:\projects> tf labels /owner:jasonj + +The following example displays information about "build1033" label and lists the files and folders to which the label has been applied in the Team Foundation version control server. + + c:\projects> tf labels /format:detailed build1033 + +The following example displays all labels in the Team Foundation version control server that have a *labelname* that begins with "build" and are owned by the account executing the **labels** command. + + c:\projects> tf labels build* + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Label Command (Team Foundation Version Control)](label-command-team-foundation-version-control.md) + +[Unlabel Command](unlabel-command.md) + +#### Concepts + +[Informational Commands](https://msdn.microsoft.com/library/ms181450) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/localversions-command.md b/docs/tfvc/localversions-command.md new file mode 100644 index 00000000000..652665dbfe2 --- /dev/null +++ b/docs/tfvc/localversions-command.md @@ -0,0 +1,123 @@ +--- +title: LocalVersions Command +description: LocalVersions Command +ms.assetid: 5531edc7-0333-43eb-bea0-59db9bc35c33 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# LocalVersions Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays the version of one or more items in a workspace. + +**Required Permissions** +To use the **localversions** command, you must have the **Use** permission to the workspace. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf localversions ItemSpec + [/recursive] [/format:brief|detailed] + [/workspace:WorkspaceName[;WorkspaceOwner]] [/collection:TeamProjectCollectionUrl] + +## Parameters +<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><i>Itemspec</i></p></td> +<td><p>Specify either a file or a folder that contains the files for which you want to display version numbers.</p> +<p>You can specify only a local file or folder. For example, c:\project1\binder.cs is valid, but $/project1/binder.cs is not.</p> +<div class="alert"> +<div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"> +<div class="mtps-row"> +<strong>Note</strong> +</div> +<div class="mtps-row"> +You can specify more than one <i>Itemspec</i> argument. +</div> +</div> +</div></td> +</tr> +<tr> +<td><p><i>WorkSpaceName</i></p></td> +<td><p>Use this argument with the <strong>/workspace</strong> option to specify a workspace other than the one that is mapped to the current directory.</p></td> +</tr> +<tr> +<td><p><i>WorkSpaceOwner</i></p></td> +<td><p>Use this argument with the <i>WorkSpaceName</i> argument if you want to specify a public workspace.</p></td> +</tr> +<tr> +<td><p><i>TeamProjectCollectionUrl</i></p></td> +<td><p>The URL of the team project collection that contains one or more items for which you want to display the version (for example, http://myserver:8080/tfs/DefaultCollection).</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p><strong>Option</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/format</strong></p></td> +<td><p>Specify one of the following options to control how the data returned by this command appears:</p> +<ul> +<li><p><strong>Brief</strong></p> +<p>(Default.) Each directory appears only once, followed by the files that it contains.</p></li> +<li><p><strong>Detailed</strong></p> +<p>Each file appears after its full path.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>Specify this option if you want the operation to include items in subfolders.</p></td> +</tr> +<tr> +<td><p><strong>/workspace</strong></p></td> +<td><p>Specify this option to display data about the versions of items that are in a workspace other than the one that is mapped to the current directory.</p></td> +</tr> +<tr> +<td><p><strong>/collection</strong></p></td> +<td><p>Specifies the team project collection.</p></td> +</tr> +</tbody> +</table> + +## Remarks + +When you get or check out a file, you usually download the most current version. However, you may have older versions of some files in your workspace. + +For example, you might have checked out some files and not checked in your work for several weeks. Other people on your team may have checked in changes to the same files during that time. In this case, the versions of these files in your workspace would be older than the current versions on your server for Team Foundation version control. You can use the **localversions** command to get information about which versions of these files are in your workspace. + +For information about other Team Foundation commands that provide additional information about items in your server for Team Foundation version control and the workspaces that map to it, see [Informational Commands](https://msdn.microsoft.com/library/ms181450). + +For more information about how to find and use the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +## Examples +The following example displays the version of the `ControllerBase.cs` file in the workspace that is mapped to the `c:\\workspaces\\FeatureA\\catalog\\controller` folder. + + c:\workspaces\FeatureA\catalog\controller>tf localversions ControllerBase.cs + +The following example displays the versions of all files (including those in subfolders) in the workspace that is mapped to the `c:\\workspaces\\FeatureA\\catalog\\` folder. Because the **/format:detailed** option is specified, each file appears with its full path. + + c:\workspaces\FeatureA\catalog\>tf localversions . /recursive /format:detailed + +## See Also + +#### Concepts + +[Informational Commands](https://msdn.microsoft.com/library/ms181450) +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/lock-command.md b/docs/tfvc/lock-command.md new file mode 100644 index 00000000000..878f819a737 --- /dev/null +++ b/docs/tfvc/lock-command.md @@ -0,0 +1,145 @@ +--- +title: Use the Lock Command to lock or unlock a TFVC file or folder +description: Lock or unlock files or folder under TFVC version control using the Lock Command +ms.assetid: 5b62627b-fdb3-4832-a387-811dcc2808e3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Lock Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Locks or unlocks a file or folder to deny or restore the right of users to check out an item for edit into a different workspace or to check in pending changes to an item from a different workspace. + +**Required Permissions** + +To use the **lock** command, you must have the **Lock** permission set to **Allow**. Having the Unlock other user's changes permission set to **Allow** is required to remove a lock held by another user if you do not have **Write** permission for that user's workspace. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf lock itemspec /lock:(none|checkout|checkin) + [/workspace:workspacename] [/recursive] [/login:username,[password]] [/collection:TeamProjectCollectionUrl] + +## Parameters + +<table><thead> +<tr><th><p><strong>Argument</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><em>itemspec</em></p></td> + <td><p>Identifies the file or folder to lock or unlock. For more information about how Team Foundation parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/4y2ash30)">Command-Line Options</a>.</p><p><strong>Note:</strong> You can specify more than one <em>Itemspec</em> argument.</p></td></tr> +<tr> + <td><p><em>workspacename</em></p></td> + <td><p>The user-provided value for the <strong>/workspace</strong> option.</p></td></tr> +<tr> + <td><p><em>username</em></p></td> + <td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>DOMAIN</em>\<em>UserName</em> or <em>UserName.</em></p></td></tr> +<tr> + <td><p><em>TeamProjectCollectionUrl</em></p></td> + <td><p>The URL of the team project collection that contains the file or folder that you want to lock or unlock (for example, http://myserver:8080/tfs/DefaultCollection).</p></td></tr></tbody> +</table> + +<table><thead> +<tr><th><p><strong>Option</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><strong>/lock</strong></p></td> + <td><p>Specifies a lock type or removes a lock from an item. For more information, see <a href="understand-lock-types.md">Understanding Lock Types</a>.</p><p>Lock Options:</p><ul><li><p><strong>None</strong></p><p>Removes a lock from an item.</p></li><li><p><strong>Checkin</strong></p><p>Enables an item to be checked out and edited in all workspaces but prevents users from checking in changes to the item outside the specified <strong>/workspace</strong> until you explicitly release the check-in lock. If the specified item is locked in any other workspace, the lock operation fails.</p></li><li><p><strong>Checkout</strong></p><p>Prevents users from checking in or checking out the specified items until you explicitly release the lock. If users have locked any one of the specified items, or if pending changes exists against any one of the items, the lock operation fails.</p></li></ul></td></tr> +<tr> + <td><p><strong>/workspace</strong></p></td> + <td><p>Specifies the name of a different workspace in which to apply the lock. By default, the lock is applied in the workspace in which you are currently.</p></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td></tr> +<tr> + <td><p><strong>/collection</strong></p></td> + <td><p>Specifies the team project collection.</p></td></tr></tbody> +</table> + +## Remarks +You can use the lock command to temporarily freeze the Team Foundation version control server version of an item so that you can check in a pending change without having to resolve any merge conflicts. If you want to permanently prevent access to an item in the Team Foundation version control server, you should use the [Permission Command](permission-command.md) instead. + +>**Note:** +>As a courtesy to your teammates, notify them when you apply a lock to an item, explain why you are doing this, and estimate when you plan to remove the lock, if you can. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### How to Lock an Item + +You can lock an item using the lock command or by specifying a lock option during the commission of several other commands of the **tf** command-line utility that includes: + +- [Rename Command (Team Foundation Version Control)](rename-command-team-foundation-version-control.md) + +- [Checkout and Edit Commands](checkout-or-edit-command.md) + +- [Delete Command (Team Foundation Version Control)](delete-command-team-foundation-version-control.md) + +- [Undelete Command](undelete-command.md) + +- [Merge Command](merge-command.md) + +- [Branch Command](branch-command.md) + +- [Add Command](add-command.md) + +For add and branch, the lock is placed on the namespace where the new item will be created. Locks placed with rename apply both to the old and new namespaces. For more information, see [Lock and Unlock Folders or Files](lock-unlock-folders-files.md). + +### Lock Types + +Team Foundation provides two types of locks: **checkin** and **checkout**. + +A check-in lock is less restrictive than a check-out lock. When you apply a check-in lock, users can continue to make local changes to the item in other workspaces. The changes cannot be checked in until you explicitly remove the check-in lock from the workspace. + +A check-out lock is more restrictive than a check-in lock. When you apply a check-out lock to a version-controlled file or folder, users can neither check out the file for edit nor check in pre-existing pending changes. You cannot acquire a check-out lock if there are currently any pending changes to an item. + +For more information about when to apply a check-out lock and when to apply a check-in lock, see [Understanding Lock Types](understand-lock-types.md). + +### How Locking Works + +If you have a file checked out when you lock it, its status is modified to contain the new lock type. If the files are not checked out, a "lock" change is added to the set of pending workspace changes. Unlike the **checkout** command, **lock** does not automatically make a file editable. + +Locks on folders are implicitly recursive. If you lock a folder, you do not have to lock the files it contains unless you want to apply the more restrictive check-out lock to a file in a folder that has a check-in lock. + +### Unlocking an Item + +You can unlock a locked item using the **none** option. Additionally, Team Foundation unlocks an item automatically when you check in pending changes in the workspace. + +You can determine which files are locked in the Team Foundation version control server and by whom the files were locked using the [Status Command](status-command.md). +## Examples +The following example prevents other users from checking out 314.cs. + + c:\projects>tf lock /lock:checkout 314.cs + +The following example prevents other users from checking in changes to 1256.cs but enables them to check it out in their workspaces. + + c:\projects>tf lock /lock:checkin 1256.cs + +The following example prevents other users from pending changes to any items in the src/ folder in the Team Foundation version control server. + + c:\projects>tf lock /lock:checkout $/src + +The following example unlocks and makes all files in the src/ Team Foundation version control server folder available for check-out and check-in by other users. + + c:\projects>tf lock /lock:none src/ + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Checkout and Edit Commands](checkout-or-edit-command.md) + +[Status Command](status-command.md) + +#### Concepts + +[Understanding Lock Types](understand-lock-types.md) + +[Create a Workspace to Work with your Team Project](create-work-workspaces.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) + +[Working with Version Control Locks](work-version-control-locks.md) diff --git a/docs/tfvc/lock-unlock-folders-files.md b/docs/tfvc/lock-unlock-folders-files.md new file mode 100644 index 00000000000..0ece95cab32 --- /dev/null +++ b/docs/tfvc/lock-unlock-folders-files.md @@ -0,0 +1,73 @@ +--- +title: Lock and unlock folders or files | TFVC +description: Lock and unlock folders or files using Team Foundation Version Control +ms.assetid: 3fe6cce2-b152-4733-8aa1-4f74072e8767 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Lock and unlock folders or files in Team Foundation Version Control + +**VSTS | TFS 2015 | Visual Studio 2013 | Visual Studio 2015** + +> [!NOTE] +> This content applies to files managed by Team Foundation Version Control (TFVC) that you need to lock or unlock. For help unlocking files in use by programs on your PC, use the [Handle](https://technet.microsoft.com/en-us/sysinternals/bb896655.aspx) and +[Process Explorer](https://technet.microsoft.com/en-us/sysinternals/processexplorer) tools to help you find which program that is locking your file(s). + +A folder or file tracked by TFVC can be locked or unlocked to deny or restore the user's privileges. +Privileges include checking out an item for edit into a different workspace or checking in Pending Changes to an item from a different workspace. +For more information, see [Create and work with workspaces](create-work-workspaces.md). + +You can use a lock to temporarily freeze the server version of an item so that you can check in a [pending change](develop-code-manage-pending-changes.md) without having to resolve any merge conflicts. If you want to permanently prevent access to an item on the server, you should use the [Permission Command](permission-command.md) instead. + +> [!TIP] +> You can use the [Lock command](lock-command.md) to remove another user’s lock if you have sufficient permissions. + +**Requirements** + +See [Permissions and groups reference](../security/permissions.md). + +### To lock a folder or file from Source Control Explorer + +> [!IMPORTANT] +> These options will appear only when you are making changes in a [server workspace](create-work-workspaces.md). +> The use of [local workspaces](decide-between-using-local-server-workspace.md) in your Team Project makes check-out locks un-enforcable. [Learn more](understand-lock-types.md). + +1. On the **View** menu, choose **Other Windows**,and then choose **Source Control Explorer**. + + You can also double-click **Source Control** in Team Explorer. + +2. In Source Control Explorer, right-click on the file you want to apply a lock, and select **Advanced..**, then **Lock..** (Visual Studio 2015) or **Lock..** (Visual Studio 2013) + +3. In the **Lock** dialog box select the file or folder you want. + +4. Choose either the **Check Out lock** or the **Check In lock** type, and then choose **Lock** . [Learn more](understand-lock-types.md) about TFVC lock types. + + Under **Pending Changes**, Source Control Explorer displays the status: **lock**. The next time your pending changes are checked into the workspace, the lock will be removed. + For more information, see [Check in your work to the team's codebase](check-your-work-team-codebase.md) and [understanding locks](understand-lock-types.md) + + > [!NOTE] + > You can also lock folders and files from the command line. For more information, see [Lock Command](lock-command.md). + +### To unlock a folder or file from Source Control Explorer + +> [!IMPORTANT] +> You can only unlock files other members of your team have locked if you have [UnlockOther permissions](../security/permissions.md). +> If you don't have permission to unlock a file the option will be inaccessible. + +1. While working in the server workspace, navigate to the **View** menu and choose **Other Windows**, then choose **Source Control Explorer**. + +2. In Source Control Explorer, open the shortcut menu for the folder or file from which you want to remove a lock, and then choose **Unlock**. + +## See Also + +#### Other Resources + + [Understand lock types](understand-lock-types.md) + + [Lock Command](lock-command.md) + + [Use Source Control Explorer to manage files under version control](use-source-control-explorer-manage-files-under-version-control.md) diff --git a/docs/tfvc/merge-command.md b/docs/tfvc/merge-command.md new file mode 100644 index 00000000000..581f783ea2b --- /dev/null +++ b/docs/tfvc/merge-command.md @@ -0,0 +1,142 @@ +--- +title: Merge Command +description: Merge Command +ms.assetid: 4075b4a8-1d11-49d5-8dbe-4fd00cdb0fca +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Merge Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +The **merge** command applies changes from one branch into another. + +> [!NOTE] +> The results of this command are not reflected in the Team Foundation version control server until you perform a check-in operation. For more information, see [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411). + +**Required Permissions** + +To use the **merge** command, you must have the **Check out** permission set to **Allow** for the workspace folder that contains the *destination* and you must have the **Read** permission set to **Allow** for the workspace folder that contains the source. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf merge [/recursive] [/force] [/candidate] [/discard] + [/version:versionspec] [/lock:none|checkin|checkout] [/preview] + [/baseless] [/nosummary] [/noimplicitbaseless] [/conservative] [/format:(brief|detailed)] [/noprompt] [/login:username,[password]] source destination +## Parameters + +|**Argument**|**Description**| +|---|---| +|*versionspec*|Provides a value such as C2 for the **/version** option. For more information about how Team Foundation parses a version specification to determine which items are within its scope, see [Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be).| +|*source*|Specifies the file or folder to act as the source of the merge.| +|*destination*|Specifies the file or folder to act as the destination of the merge.| +|*username*|Provides a value to the **/login** option. You can specify a username value as either *DOMAIN*\*UserName* or *UserName*.| + +<table><thead> +<tr><th><p><strong>Option</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><strong>/recursive</strong></p></td> + <td><p>Matches the <em>source</em> item specification in the current directory and any subfolders.</p></td></tr> +<tr> + <td><p><strong>/force</strong></p></td> + <td><p>Ignores the merge history and merges the specified changes from the source into the destination, even if some or all these changes have been merged before.</p></td></tr> +<tr> + <td><p><strong>/candidate</strong></p></td> + <td><p>Prints a list of all changesets in the source that have not yet been merged into the destination. The list should include the changeset ID that has not been merged and other basic information about that changeset.</p></td></tr> +<tr> + <td><p><strong>/discard</strong></p></td> + <td><p>Does not perform the merge operation, but updates the merge history to track that the merge occurred. This discards a changeset from being used for a particular merge.</p></td></tr> +<tr> + <td><p><strong>/version</strong></p></td> + <td><p>For a selective merge, this option specifies the range that should be merged into the destination. For a catch-up merge, this parameter specifies the version before which all un-merged changes should be merged.</p><p>For a selective merge, the version range denotes the beginning and end points of the set of changes to be merged. For example, if you attempt to merge version 4~6, the changesets 4, 5, and 6 are merged.</p></td></tr> +<tr> + <td><p><strong>/lock</strong></p></td> + <td><p>Specifies a lock type or removes a lock from an item. For more information, see <a href="understand-lock-types.md">Understanding Lock Types</a>.</p><p>Lock Options:</p><ul><li><p><strong>None</strong></p><p>No lock is placed on an item and removes any existing lock from an item.</p></li><li><p><strong>Checkin</strong></p><p>Other users can check out the specified items but they cannot check in revisions to locked files until you release the lock by performing a check-in. If any other users have locked any one of the specified items, the lock operation fails.</p></li><li><p><strong>Checkout</strong></p><p>Prevents users from checking in or checking out any one of the specified items until you explicitly release the lock. If any other users have locked any one of the specified items, or if there are existing pending changes against any item, the lock operation fails.</p></li></ul></td></tr> +<tr> + <td><p><strong>/preview</strong></p></td> + <td><p>Shows a preview of the merge.</p></td></tr> +<tr> + <td><p><strong>/baseless</strong></p></td> + <td><p>Performs a merge without a base version. That is, allows the user to merge files and folders that do not have a merge relationship. After a baseless merge, a merge relationship exists, and future merges do not have to be baseless.</p><div class="alert"><div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"><div class="mtps-row"><strong>Note</strong></div><div class="mtps-row"> +Baseless merges cannot delete files in the target. You can manually carry over such changes. +</div></div></div></td></tr> +<tr> + <td><p><strong>/noimplicitbaseless</strong></p></td> + <td><p>Specifies that Team Foundation will not perform an implicit baseless merge between two items that have the same relative name in two unrelated version-control trees.</p></td></tr> +<tr> + <td><p><strong>/nosummary</strong></p></td> + <td><p>Omits summary of conflicts, errors and warnings.</p></td></tr> +<tr> + <td><p><strong>/noprompt</strong></p></td> + <td><p>Suppresses any prompts for input from you.</p></td></tr> +<tr> + <td><p><strong>/conservative</strong></p></td> + <td><p>Results in more conflicts when you merge one branch to another.</p></td></tr> +<tr> + <td><p><strong>/format</strong></p></td> + <td><p>Specifies the formats of summarizing merge conflicts:</p><ul><li><p><strong>Brief</strong>: default value, summarizes only the total number of conflicts, warnings, and errors.</p></li><li><p><strong>Detailed</strong>: summarizes not only the total number of conflicts, warnings, and errors but also lists details about each conflict.</p></li></ul><p><strong>Note:</strong> This option applies only when the output contains a summary of conflicts. The summary cannot be shown if the <strong>/nosummary</strong> option is used or the merge caused fewer than 10 conflicts, warnings, and errors.</p></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td></tr></tbody> +</table> + +## Remarks +You can use the **merge** command of the **tf** command-line utility to apply changes in an existing source branch to an existing target branch. You can merge an individual revision or a complete changeset to the target branch. You can merge changes from the source to the target branch or from the destination to the source branch. + +The **merge** command also lets you query for changes in a source branch which have not been migrated to the target branch. Additionally, it lets you indicate that certain changes will never be merged from the source to the destination and should no longer be displayed as candidates for a merge operation. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### Baseless Merge + +Use baseless merge to merge items that are not directly branched from each other. To perform a baseless merge, you must use the **tf** **merge** command. When you perform a baseless merge, Team Foundation does not have any information about the relationship of the files in the braches. In a baseless merge, you must perform manual conflict resolutions. After you have performed the baseless merge and resolved any conflicts, Team Foundation records the merge history and establishes a relationship between the folders and files. + +When you run **tf** **merge**, Team Foundation performs an implicit baseless merge between items that have the same relative name in two previously related version-controlled trees. For example, you might want to merge the related branches $SRC\\ and $TGT. Both branches contain an unrelated file that is named a.txt. When you run **tf** **merge**, Team Foundation establishes a relationship between the two a.txt files if the two files are the same, if FIPS-compliant encryption is disabled, and if the source file is not related to any other file in the target. + +If you run **tf merge** with the **/noimplicitbaseless** option set, when Team Foundation tries to merge the two branches, the two a.txt files will create a namespace conflict when you try to check in the changes. To resolve the conflict, you must rename one of the files. +## Examples +The following example merges changes from MyFile\_beta1 that have not been merged into MyFile\_RTM. + + c:\projects>tf merge MyFile_beta1 MyFile_RTM /recursive + +The following example merges changeset 137 into branch2. + + c:\projects>tf merge /version:C137~C137 branch1 branch2 /recursive + +The following example merges all the changesets up to changeset 137 into branch2. + + c:\projects>tf merge /version:C137 branch1 branch2 /recursive + +The following example prints a list of the changesets in branch1 that have not been merged into branch2. + + c:\projects>tf merge /candidate branch1 branch2 /recursive + +The following example prints a list of changesets in branch2 that have not been merged back into branch1. + + c:\projects>tf merge /candidate branch2 branch1 /recursive + +The following example discards changeset 137 as a candidate for merging into branch2. + + c:\projects>tf merge /discard /version:C137 branch1 branch2 /recursive + +## See Also + +#### Tasks + +[Resolve Conflicts between Two Files](https://msdn.microsoft.com/library/ms181433) + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Branch Command](branch-command.md) + +[Merges Command](merges-command.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) + +[Branching and Merging](use-branches-isolate-risk-team-foundation-version-control.md) diff --git a/docs/tfvc/merge-folders-files.md b/docs/tfvc/merge-folders-files.md new file mode 100644 index 00000000000..4ffc96b361e --- /dev/null +++ b/docs/tfvc/merge-folders-files.md @@ -0,0 +1,179 @@ +--- +title: Merge folders and files +description: Merge folders and files +ms.assetid: b23efc53-f715-4eef-9631-64455663cfcc +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Merge folders and files + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +For the various reasons described in [Branch folders and files](branch-folders-files.md), many software development teams work in a codebase that is forked into various branches. If you use branches, eventually your team must integrate the work that has been completed on different branches during certain phases of your project. For example, when you are ready to test a full version of your software, you will need the changes made on different feature team branches to be merged together. + +The procedures in this topic advise how you can use the graphical user interface of Visual Studio to merge together changes made in different branches. For information about how to perform merges at the command prompt, see [Merge Command](merge-command.md). + +**Required Permissions** + +To perform these procedures, you must have the following permissions set: + +- You must have the **Read** permission for the item in the source tree and your **Check out** permission for the item in the target tree set to **Allow**. + +- You must have the **Merge** permission set for the target path. + +- If the item in the target tree is being renamed, you must have the **Check out** permission for both the source tree and the target tree set to **Allow**. + +- If any files affected by the operation are locked, you must have the **Lock** permission set to **Allow**. For more information about permissions, see [Permissions and groups reference](../security/permissions.md). + +## Initiate a Merge from the Source Control Window + +<table> +<thead> +<tr> +<th> <strong>Important</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>The release of Visual Studio Team Foundation Server 2010 began a distinction between branches and folders. For example, in the following illustration you can see how branches and folders are displayed with different icons.</p> +<p><img src="_img/merge-folders-files/IC268252.png" title="A branch and a folder" alt="A branch and a folder" /></p> +<p>While you can still branch and merge among folders, the best practice for your team to follow is to branch and merge only among branches. For more information, see <a href="branch-folders-files.md">Branch folders and files</a>.</p></td> +</tr> +</tbody> +</table> + +### Merge branches, files and folders from Source Control Explorer + +1. In **Source Control Explorer**, select the branch, folder, or file that you want to merge. + +2. Click the **File** menu, point to **Source Control**, point to **Branching and Merging**, and then click **Merge**. + + The **Source Control Merge Wizard** is displayed. For information about how to use this wizard to complete the merge, see [Use the Source Control Merge Wizard to Complete a Merge](merge-folders-files.md#sourcecontrolwizard). + +## Initiate a Merge from the Tracking Changeset Window + +You can use the **Tracking Changeset** window to view information such as, where a changeset was made, where it was merged, and when these events occurred. Branches where a changeset has not been merged are also highlighted. If you see such a branch where you know the changeset is needed but is missing, you can use a drag and drop operation to fix this problem. + +<table> +<thead> +<tr> +<th> <strong>Important</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>This procedure can be performed only for changesets that affect a branch. For example, in the following illustration you can view how branches and folders are displayed with different icons.</p> +<p><img src="_img/merge-folders-files/IC268252.png" title="A branch and a folder" alt="A branch and a folder" /></p> +<p>For more information, see <a href="branch-folders-files.md">Branch folders and files</a>.</p></td> +</tr> +</tbody> +</table> + +### Drag and Drop a Changeset into the Tracking Changeset Window + +1. In **Source Control Explorer**, select either a branch, a folder, or a file which is contained within a branch. + +2. Right-click the selected item and click **View History**. + +3. In the **History **window, right-click the changeset that you want to view and select **Track Changeset**. + + The **Select Branches** dialog box appears. + +4. (Optional) In the **Target branches** list, check the branches that you want to view and uncheck the branches that you want to hide. + +5. Click **Visualize**. + + The **Tracking Changeset** window appears. + +6. Drag the branch which contains the changeset to the target branch. + + The **Source Control Merge Wizard** appears. For information about how to use this wizard to complete the merge, see [Use the Source Control Merge Wizard to Complete a Merge](merge-folders-files.md#sourcecontrolwizard). + +### Example: Where is that New Method? + +To illustrate how you might use the preceding procedure, consider the following example. Julie has asked Chris to implement a new method in some of the **FeatureTeamA** code that she leverages in her **FeatureTeamB** code. Chris writes code for the new method and then he checks it into the **FeatureTeamA** branch. He meets Julie in the hallway as he is leaving for the day and mentions that he has checked in the new method. + +Julie gets back to her desk and finds the latest source, but she does not see the new method that Chris checked in. She navigates to **Source Control Explorer**, views the **History** window for the **FeatureTeamA** branch, and she can see that with changeset 50 Chris did indeed check in the new method. She right-clicks changeset 50 and clicks **Track Changeset**, and the following window appears: + +Tracking Changeset Window: Merge to Parent Branch + +![Tracking Changeset window: merge to parent branch](_img/merge-folders-files/IC269735.png) + +From the **Tracking Changeset** window, Julie can see that Chris checked in the method with changeset 50, and merged it to the **Dev** branch with changeset 51. But Julie cannot get the new code until changeset 50 is merged into the **FeatureTeamB** branch. So she drags the **Dev** branch onto the **FeatureTeamB** branch to launch the **Source Control Merge Wizard**, which she then uses to complete the merge. + +<a name="sourcecontrolwizard"></a> + +## Use the Source Control Merge Wizard to Complete a Merge + +After you complete one of the above procedures, the **Source Control Merge Wizard** appears. This wizard enables you to specify the source and target of the merge. You can merge one entire branch to another branch, or you can pick a specific changeset or group of changesets that you want to merge. + +### Use the Source Control Merge Wizard to merge files, folders, or branches + +1. In the **Source Control Merge Wizard**, in the **Source branch** box, either type the name of the team project source branch, or click **Browse** to select one from the list. + +2. In the **Target branch** drop-down list, select the target team project branch to which you want to merge the source branch. + +3. Select the range of changes that you want to merge into the target branch by selecting either the **All changes up to a specific version** or **Selected changesets** option, and click **Next**. + + >**Tip:** + > If possible, click **All changes up to a specific version**, as it will reduce the risk of conflicts in future merges. + + - If you selected **All changes up to a specific version**, then the **Select the versions of the source items **page appears. Select the version of the items that you want to use. + + <table> + <tbody> + <tr> + <td><p><strong>Changeset</strong></p></td> + <td><p>Merge by specifying a <a href="find-view-changesets.md">changeset</a> version.</p></td> + </tr> + <tr> + <td><p><strong>Date</strong></p></td> + <td><p>Merge by specifying a date version.</p></td> + </tr> + <tr> + <td><p><strong>Label</strong></p></td> + <td><p>Merge by specifying a <a href="use-labels-take-snapshot-your-files.md">label</a> version.</p></td> + </tr> + <tr> + <td><p><strong>Latest Version</strong></p></td> + <td><p>Merge by specifying the latest version.</p></td> + </tr> + <tr> + <td><p><strong>Workspace</strong></p></td> + <td><p>Merge by specifying a <a href="create-work-workspaces.md">workspace</a> version.</p></td> + </tr> + </tbody> + </table> + + - If you selected **Selected changesets**, then the **Select changesets to merge into the target branch **page appears. Select the changeset you want to merge. + + >**Tip:** + > You can press and hold the CONTROL or SHIFT keys and then select multiple items in a continuous range. + +4. Click **Next**, and then on the **Perform the merge operation** page, click **Finish**. + + One or more pending changes are generated. + +5. (Optional) If you want to check in the pending changes immediately, you can perform these steps: + + 1. Click the **View** menu, point to **Other Windows**, and then click **Pending Changes**. + + 2. Use the Pending Changes window to check in the changes. For more information, see [Check in your work to the team's codebase](check-your-work-team-codebase.md). + +## See Also + +#### Other Resources + + [Use branches to isolate risk in Team Foundation Version Control](use-branches-isolate-risk-team-foundation-version-control.md) + + [Merge Command](merge-command.md) + + [Merges Command](merges-command.md) + + [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md) + + [Use Source Control Explorer to manage files under version control](use-source-control-explorer-manage-files-under-version-control.md) diff --git a/docs/tfvc/merges-command.md b/docs/tfvc/merges-command.md new file mode 100644 index 00000000000..5f60f993f60 --- /dev/null +++ b/docs/tfvc/merges-command.md @@ -0,0 +1,100 @@ +--- +title: Merges Command +description: Merges Command +ms.assetid: dfa1c139-028d-4329-aa03-0f9845337f82 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Merges Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays detailed information about past merges between the specified source and destination branches. + +**Required Permissions** +To use the **merges** command, you must have the **Read** permission set to **Allow** for both source and destination branches. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf merges [source] destination [/recursive] [/extended] [/format:(brief|deltailed)] [/login:username, [password]] [/showall]]] [/collection:TeamProjectCollectionUrl] + +## Parameters<table> + +<thead> +<tr><th><p><strong>Argument</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><em>source</em></p></td> + <td><p>Filters the merge history to include only entries with the specified sources.</p><p>This parameter is optional.</p></td></tr> +<tr> + <td><p><em>destination</em></p></td> + <td><p>Specifies the destination branch for which merge history is displayed.</p><p>This parameter is required.</p></td></tr> +<tr> + <td><p><em>username</em></p></td> + <td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>DOMAIN</em>\<em>UserName</em> or <em>UserName</em>.</p></td></tr> +<tr> + <td><p><em>TeamProjectCollectionUrl</em></p></td> + <td><p>The URL of the team project collection that contains the branches about which you want to display the merge history (for example, http://myserver:8080/tfs/DefaultCollection).</p></td></tr></tbody> +</table> + +<table><thead> +<tr><th><p><strong>Option</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><strong>/recursive</strong></p></td> + <td><p>Displays information for all merges in specified Team Foundation version control server folder and its subfolders.</p></td></tr> +<tr> + <td><p><strong>/extended</strong></p></td> + <td><p>Displays a list of merges for a specific range of target items (for example: <strong>tf merges</strong> tgt\file1.txt; C21-25). This option displays the types of merges (for example, add or edit) and detailed information about the source and target items. This option implies <strong>/format: Detailed</strong>.</p><strong>Note</strong> + You cannot use this option if you have specified a source item. +</td></tr> +<tr> + <td><p><strong>/format</strong></p></td> + <td><p>Specifies the formats in which merge history can appear:</p><ul><li><p><strong>Brief</strong>: default value, shows the changeset numbers for both the source and target items and the author and the date of the target checkin.</p></li><li><p><strong>Detailed</strong>: shows the detailed paths and changeset numbers for both the source and target items.</p></li></ul></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td></tr> +<tr> + <td><p><strong>/showall</strong></p></td> + <td><p>Displays all past merges for a given target item under its current name and all previously used names.</p></td></tr> +<tr> + <td><p><strong>/collection</strong></p></td> + <td><p>Specifies the team project collection.</p></td></tr></tbody> +</table> + +## Remarks + +For links to other Team Foundation commands that provide additional information about the items in your Team Foundation version control server and all the workspaces that map to it, see [Informational Commands](https://msdn.microsoft.com/library/ms181450). + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +## Examples + +The following example displays information about all merge operations performed between Beta1\_branch and RTM\_branch. + + c:\projects>tf merges /recursive Beta1_branch RTM_branch + +- Sample output: + + Changeset Merged in Changeset Author Date + -------------------------------------------------------- + 135 162 Justin 10/31/2003 + 146 162 Justin 10/31/2003 + 147* 167 Bill 11/02/2003 + + The asterisk ‘\*’ next to changeset 147 indicates that only some of the changes in that changeset \#147 were merged into changeset \#167. + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) +[Merge Command](merge-command.md) +[Branch Command](branch-command.md) +#### Concepts + +[Informational Commands](https://msdn.microsoft.com/library/ms181450) +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) +[Branching and Merging](use-branches-isolate-risk-team-foundation-version-control.md) diff --git a/docs/tfvc/msdn-command.md b/docs/tfvc/msdn-command.md new file mode 100644 index 00000000000..cb9177a3a59 --- /dev/null +++ b/docs/tfvc/msdn-command.md @@ -0,0 +1,48 @@ +--- +title: Use the Msdn Command to display a help topic from the MSDN library +description: Display a help topic from the MSDN library using the Msdn Command +ms.assetid: 6a1c9dfe-dacb-466b-a68e-efe3cd6df3e8 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Msdn Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays a help topic from the MSDN library that contains detailed information about a Team Foundation version control command. + + tf msdn commandname +## Parameters +| **Argument** | **Description** | +|---|---| +| *commandname* | Specifies a Team Foundation command for which to display a help topic. | + +## Remarks + +When you need a command and are not sure which one to use, type **tf msdn** for a list of command reference topics and links to additional resources. If you use the **msdn** command without specifying a *commandname* parameter, you will see a topic that lists all commands together with usage requirements and a description. + +When you specify the *commandname* parameter, the help topic opens for that specific command. If the system cannot find a match for the *commandname*, it searches for aliases and short names. If it does not find a matching command, alias, or short name, you will get an error message. + +For more information about how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example displays a help topic that lists all the version control commands, including a brief explanation of syntax. + + c:\projects>tf msdn + +The following example displays a help topic about the **workspace** command. + + c:\projects>tf msdn workspace + +## See Also + +#### Reference + +[Help Command (Team Foundation Version Control)](help-command-team-foundation-version-control.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/optimize-your-workspace.md b/docs/tfvc/optimize-your-workspace.md new file mode 100644 index 00000000000..d9b2a07c84c --- /dev/null +++ b/docs/tfvc/optimize-your-workspace.md @@ -0,0 +1,94 @@ +--- +title: Optimize your workspace +description: Optimize your workspace +ms.assetid: 0ad2897c-5a99-455e-a5ee-16e4413d0b6b +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Optimize your workspace + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Does your team have a large and complex codebase? Do you want your workspace to contain only the files you need to improve performance, reduce network traffic, and reduce the disk space required on your dev machine? + +- [Optimize your folder names](optimize-your-workspace.md#folder_name) + +- [Optimize your workspace using explicit, implicit, cloaked, and non-recursive folder mappings](optimize-your-workspace.md#mappings) + +- [Use workspaces to isolate and manage work among different branches](optimize-your-workspace.md#isolate) + +<a name="folder_name"></a> + +## Optimize your folder names + +If you don’t yet use branches, on your server, you should put all your code in a subfolder called Main (for example: `$/TFVCTeamProject/Main/`). If you do, then you’ll be ready when your team grows big enough to require branches to manage your codebase. On your dev machine, you should use a short, understandable folder path that matches your project structure such as `C:\Users\\YourName\Source\Workspaces\TFVCTeamProject\Main\SolutionName\`. + +Some more tips on effective folder names: + +- Keep all folder, sub-folder, and file names short to simplify your work and avoid potential long-path issues that can occur with some types of code projects. + +- Avoid whitespace if you want to make command-line operations a little easier to perform. + +<a name="mappings"></a> + +## Optimize your workspace using explicit, implicit, cloaked, and non-recursive folder mappings + +If your codebase is large, you can avoid wasting time, network bandwidth, and local disk space by optimizing your workspace folder mappings. + +When you map a folder, make sure that you choose a folder high enough in the code tree that you get all the files you need to create a local build, but low enough that you are not getting more files than you need. You can also use some tools to more simply and quickly create a usable workspace: **explicit**, **implicit**, **cloaked**, and **non-recursive** folder mappings. + +When you look at the workspace of fictitious developer, Raisa, below, you might wonder to yourself: why didn’t she simply map `$/SiteApp/` to `c:\\code\\SiteApp\\` and be done with it? A simple workspace like this would **implicitly** map all the folders she needs in `$/SiteApp/Main/`. + +The main problem with this approach is that it would also provide her with a lot of files she does not need, and thus waste time and resources. So Raisa creates some tailored folder mappings. + +![](_img/optimize-your-workspace/IC720115.png) + +![](_img/optimize-your-workspace/IC720116.png) + +<table><tbody> +<tr> + <td><p><img src="_img/optimize-your-workspace/IC756627.png" title="Step 1" alt="Step 1" /></p></td> + <td><p>Raisa doesn’t develop customized build processes so she doesn’t need `$/SiteApp/BuildProcessTemplates`. Over time she expects the codebase to grow, and she also does not want to automatically download every new bit of code added to `$/SiteApp/Main/`. As teams working in those other folders change those files, when Raisa gets the latest files from the server, she could incur long delays waiting for updates to files she doesn’t need.</p><p>To develop her code, Raisa needs all the code projects that comprise the FabrikamFiber solution. Rather than <strong>explicitly</strong> including each code project (for example, `$/SiteApp/Main/FabrikamFiber/FabrikamFiber.DAL`) she instead maps `$/SiteApp/Main/FabrikamFiber/`, and thus she <strong>implicitly</strong> maps all the sub-folders that contain the code projects she needs.</p></td></tr> +<tr> + <td><p><img src="_img/optimize-your-workspace/IC646325.png" title="Step 2" alt="Step 2" /></p></td> + <td><p>Raisa does not need the files in `$/SiteApp/Main/FabrikamFiber/3DModels` or `$/SiteApp/Main/FabrikamFiber/Docs`, and because they are implicitly mapped by<img src="_img/optimize-your-workspace/IC756627.png" title="Step 1" alt="Step 1" />, she uses two <strong>cloaked</strong> mappings to exclude these folders from her workspace.</p></td></tr> +<tr> + <td><p><img src="_img/optimize-your-workspace/IC646326.png" title="Step 3" alt="Step 3" /></p></td> + <td><p>Raisa and others on her team maintain and sometimes augment a set of some fundamental libraries. She needs almost all current libraries in this folder and expects to need libraries her team adds there in the future, so she maps `$/SiteApp/Main/libraries/Common`.</p></td></tr> +<tr> + <td><p><img src="_img/optimize-your-workspace/IC646327.png" title="Step 4" alt="Step 4" /></p></td> + <td><p>Raisa needs only a small segment of a large folder, `$/SiteApp/Main/libraries/Common/LibraryC`, so she maps it as <strong>cloaked</strong> and then explicitly maps just the sub-folder she needs: `$/SiteApp/Main/libraries/Common/LibraryC/Sub-Library1`.</p></td></tr> +<tr> + <td><p><img src="_img/optimize-your-workspace/IC646328.png" title="Step 5" alt="Step 5" /></p></td> + <td><p>Raisa needs some of the files immediately within `LibraryD`, but she does not need the large contents of its sub-folders, so she applies a <strong>non-recursive</strong> mapping to this folder: `$/SiteApp/Main/libraries/Specialized/LibraryD/*`.</p></td></tr></tbody> +</table> + +<a name="isolate"></a> + +## Use workspaces to isolate and manage work among different branches + +If your company uses [branches to isolate risk](use-branches-isolate-risk-team-foundation-version-control.md) in your codebase, then you should create a separate workspace for each branch you work in. + +For example, at Fabrikam Fiber, the codebase and the staff have grown. To isolate the risk among their many teams, they’ve branched their codebase. Raisa continues her work within her small team, but now she uses a few workspaces to manage the work that she now does in multiple branches. + +![](_img/optimize-your-workspace/IC578257.png) + +<table><tbody> +<tr> + <td><p><img src="_img/optimize-your-workspace/IC756627.png"/></p></td> + <td><p><strong>Develop features</strong> She modifies her default workspace to do work in the Extranet branch, where she participates in the development of the customer-facing website in this branch.</p></td></tr> +<tr> + <td><p><img src="_img/optimize-your-workspace/IC646325.png"/></p></td> + <td><p><strong>Integrate and stabilize</strong> She creates two new workspaces to do work in the Test and Dev branches, where she collaborates with other developers and testers to stabilize the code during integration.</p></td></tr></tbody> +</table> + +Raisa manages her work in three workspaces, each of which maps folders in a branch on the server with the folders on her dev machine. + +![](_img/optimize-your-workspace/IC720117.png) + +> **Note:** +> [Branching](use-branches-isolate-risk-team-foundation-version-control.md) or [suspending (or shelving)](suspend-your-work-manage-your-shelvesets.md) are the preferred ways to isolate different work efforts against the same codebase. However, if neither of these approaches meets your needs, you can map the same server folder in more than one workspace. In most cases you should not need to do this. If you do map the same server folder in more than one workspace, remember that you could have separate and different pending changes to the same file stored in each workspace. diff --git a/docs/tfvc/overview.md b/docs/tfvc/overview.md new file mode 100644 index 00000000000..b4654740740 --- /dev/null +++ b/docs/tfvc/overview.md @@ -0,0 +1,103 @@ +--- +title: Use Team Foundation Version Control +description: Use Team Foundation Version Control +ms.assetid: 1d629052-c65d-4c5d-81eb-eaa4413fe285 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.topic: get-started-article +ms.manager: douge +ms.author: sdanie +ms.date: 08/29/2017 +--- + +# Use Team Foundation Version Control + +**VSTS | TFS 2017 | TFS 2015 | Visual Studio 2017, 2015, and 2013** + +Whether your software project is large or small, using version control as soon as possible is a good idea. +Version control systems are software that help you track changes you make in your code over time. As you edit your code, you tell the version control system to take a snapshot of your files. +The version control system saves that snapshot permanently so you can recall it later if you need it. + +VSTS and TFS provide two models of version control: [Git](../git/overview.md), which is distributed version control, and [Team Foundation Version Control (TFVC)](#team-foundation-version-control), which is centralized version control. This article provides an overview and a starting point for using Team Foundation Version Control. If you're deciding which type of Team Services/TFS version control to use, see [Choosing the right version control for your project](comparison-git-tfvc.md). + +## Why use version control? + +Without version control, you’re tempted to keep multiple copies of code on your computer. This is dangerous, as it’s easy to change or delete a file in the wrong copy of code, potentially losing work. Version control systems solve this problem by managing all versions of your code but presenting you with a single version at a time. + +Version control systems provide the following benefits: + +- **Create workflows** - Version control workflows prevent the chaos of everyone using their own development process with different and incompatible tools. Version control systems provide process enforcement and permissions so everyone stays on the same page. +- **Work with versions** - Every version has a description for what the changes in the version do, such as fix a bug or add a feature. These descriptions help you follow changes in your code by version instead of by individual file changes. Code stored in versions can be viewed and restored from version control at any time as needed. This makes it easy to base new work off any version of code. +- **Code together** - Version control synchronizes versions and makes sure that your changes don’t conflict with other changes from your team. Your team relies on version control to help resolve and prevent conflicts, even when people make changes at the same time. +- **Keep a history** - Version control keeps a history of changes as your team saves new versions of your code. This history can be reviewed to find out who, why, and when changes were made. History gives you the confidence to experiment since you can roll back to a previous good version at any time. History lets you base work from any version of code, such as to fix a bug in a previous release. +- **Automate tasks** - Version control automation features save your team time and generate consistent results. You can automate testing, code analysis, and deployment when new versions are saved to version control. + +There are plenty of things that can take up your time as a developer: reproducing bugs, learning new tools, and adding new features or content. As the demands of your users scale up, version control helps your team work together and ship on time. + +## Team Foundation Version Control + +Team Foundation Version Control (TFVC) is a centralized version control system. Typically, team members have only one version of each file on their dev machines. Historical data is maintained only on the server. Branches are path-based and created on the server. + +TFVC lets you apply [granular permissions](../security/permissions.md) and restrict access down to a file level. Because your team checks in all their work into your Team Foundation server, you can easily audit changes and identify which user checked in a [changeset](find-view-changesets.md). By using [compare](compare-files.md) and [annotate](view-file-changes-using-annotate.md) you can identify the exact changes that they made. + +## What do you want to do? + +- [Set up your dev machine and get started](set-up-team-foundation-version-control-your-dev-machine.md) + + Spend a few minutes to set up your dev machine to take advantage of all the benefits of a version-controlled codebase. + +- [Choose your workflow model - server or local workspaces](decide-between-using-local-server-workspace.md) + + - **Server workspaces** - Before making changes, team members publicly check out files. Most operations require developers to be connected to the server. This system facilitates locking workflows. Other systems that work this way include Visual Source Safe, Perforce, and CVS. With server workspaces, you can scale up to very large codebases with millions of files per branch and large binary files. + + - **Local workspaces** - Each team member takes a copy of the latest version of the codebase with them and works offline as needed. Developers check in their changes and resolve conflicts as necessary. Another system that works this way is Subversion. + +- [Develop your app in a version-controlled codebase](develop-your-app-team-foundation-version-control.md) + + You don’t have to think about version control in most situations. The system supports you when you need to manage and understand your changes. + +- [Suspend your work](suspend-your-work-manage-your-shelvesets.md) + + Sometimes you need to set aside some or all of the work you are doing. Your version control system can take away some of the pain and reduce the time wasted by interruptions. + +- [Contribute your work to the team](check-your-work-team-codebase.md) + + Check in your changes so your team can build upon, test, and release the value you’ve created. + +- [Isolate risk](use-branches-isolate-risk-team-foundation-version-control.md) + + Use branches and locks to isolate risk introduced by work done by different teams. + +- [View and manage past versions](view-manage-past-versions.md) + + One advantage of a version control system is that you can look back in time to get detailed information about what changes have been made to your files. + +- [Compare folders and files](compare-folders-files.md) + + You can compare server folders and local folders to each other, and view the differences between the contents of each folder. + +- [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md) + + A big advantage of using version control is that several people can work concurrently on a file. One drawback is that sometimes you must resolve conflicts. Although it can be frustrating to encounter conflicts, the system provides information and tools to help you understand and resolve conflicts. + +- [Work with version control locks](work-version-control-locks.md) + + When you need to prevent a file or folder from being checked out and altered, you can lock it. + +## Related Sections + +- [Build and test the app in your automated build system](../build-release/overview.md) + + Install a bit of software to create a build server, and then fill in a few fields to create a Continuous integration (CI) or nightly build process that enables you to leverage the power, convenience, scalability, and reliability of an automated build system to build your app. + +- [Naming restrictions in Team Foundation](https://msdn.microsoft.com/library/aa980550) + + Provides information about naming syntax, conventions, and limitations. + +- [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md) + +- [Learn about TFVC permissions](../security/permissions.md#tfvc) + +We are not currently republishing the following sections. However, you can read the Visual Studio 2010 version of this guidance. + +- [Administering Team Foundation Version Control](administering-team-foundation-version-control.md) diff --git a/docs/tfvc/permission-command.md b/docs/tfvc/permission-command.md new file mode 100644 index 00000000000..56b1dacb629 --- /dev/null +++ b/docs/tfvc/permission-command.md @@ -0,0 +1,177 @@ +--- +title: Permission Command +description: Permission Command +ms.assetid: 7a0b5521-ee07-44eb-9b8f-f145d918ebeb +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Permission Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Modifies the user access control list (ACL) and displays authorization settings for an item under version control. + +**Required Permissions** + +To use the **permission** command, you must have the **Manipulate security settings** permission set to **Allow** for the folders being modified, be a member of the **Team Foundation Administrators** security group, or be a system administrator on the local computer (Windows Administrator security group). For more information, see [Permissions and groups reference](../security/permissions.md). + + tf permission [/allow:(* |perm1[,perm2,...]] + [/deny:(* |perm1[,perm2,...])] [/remove:(* |perm1[,perm2,...])] + [/inherit:yes|no] [/user:username1[,username2,...]] + [/group:groupname1[,groupname2,...]] [/collection:TeamProjectCollectionUrl] + [/recursive] itemspec [/global][/login:username,[password]] +## Parameters + +<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><em>perm</em></p></td> +<td><p>Name of a permission or role to modify. For more information about the permission names, see <a href="../security/permissions.md">Team Foundation Server Permissions</a>.</p></td> +</tr> +<tr> +<td><p><em>Username</em></p></td> +<td><p>Provides a value to the <strong>/user</strong> option. A username value can be expressed in one of two ways, depending on the network settings: DOMAIN\username or username.</p></td> +</tr> +<tr> +<td><p><em>Groupname</em></p></td> +<td><p>The user-provided value for the <strong>/group</strong> option.</p></td> +</tr> +<tr> +<td><p><em>TeamProjectCollectionUrl</em></p></td> +<td><p>The URL of the team project collection that contains the item for which you want to modify permissions (for example, http://myserver:8080/tfs/DefaultCollection).</p></td> +</tr> +<tr> +<td><p><em>Itemspec</em></p></td> +<td><p>Identifies the file or folder for which to modify permissions. For more information about how Team Foundation parses <em>itemspecs</em> to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p> +<div class="alert"> +<div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"> +<div class="mtps-row"> +**Note** +</div> +<div class="mtps-row"> +You can specify more than one *Itemspec* argument. +</div> +</div> +</div></td> +</tr> +<tr> +<td><p><em>Username</em></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>DOMAIN</em>\<em>UserName</em> or <em>UserName</em>.</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p><strong>Option</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/allow</strong></p></td> +<td><p>Specifies a list of Team Foundation version control permissions to add to the allow ACL.</p></td> +</tr> +<tr> +<td><p><strong>/deny</strong></p></td> +<td><p>Specifies a list of denied Team Foundation version control access permissions to add to the user access control list.</p></td> +</tr> +<tr> +<td><p><strong>/remove</strong></p></td> +<td><p>Specifies a list of Team Foundation version control permissions to remove from both the allow and the deny ACLs.</p></td> +</tr> +<tr> +<td><p><strong>/inherit</strong></p></td> +<td><p>If you select <strong>yes</strong>, all permissions associated with a parent ACL are inherited by an item. Cannot be combined with the <strong>/remove</strong> option.</p></td> +</tr> +<tr> +<td><p><strong>/user</strong></p></td> +<td><p>Specifies the name of a user to modify permissions for.</p></td> +</tr> +<tr> +<td><p><strong>/group</strong></p></td> +<td><p>Name of the group for which to modify permissions.</p></td> +</tr> +<tr> +<td><p><strong>/collection</strong></p></td> +<td><p>Specifies the team project collection.</p></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>Applies the specified command to all items in the directory and any subdirectories.</p> +<p><strong>/recursive</strong> option works only when viewing the permissions for items in a source tree. It does not work when setting permissions, for example with <strong>/allow</strong>, <strong>/deny</strong> and <strong>/remove</strong> options.</p></td> +</tr> +<tr> +<td><p><strong>/global</strong></p></td> +<td><p>Used to view or assign any Team Foundation server permission.</p> +<p>To assign permissions, use the <strong>/allow</strong>, <strong>/deny</strong>, or <strong>/remove</strong> options.</p> +<p>The argument <em>itmespec</em> is not required. If it is listed, it is ignored.</p> +<p>When used to view the Team Foundation server permissions, the five permissions listed are as follows:</p> +<ul> +<li><p>tf: AdminShelvesets</p></li> +<li><p>tf: AdminWorkspaces</p></li> +<li><p>tf: CreateWorkspace</p></li> +<li><p>tf: AdminConfiguration</p></li> +<li><p>tf: AdminConnections</p></li> +</ul> +<p>For more information about permissions, see <a href="../security/permissions.md">Team Foundation Server Permissions</a>.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td> +</tr> +</tbody> +</table> +## Remarks +You can use the **permission** command (or alternatively its shortcut, **perm**) to manage authorization settings for Team Foundation version control server objects. However, this command does not let you manage authentication settings such as creating or modifying Team Foundation security groups. + +For more information about how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example displays the Team Foundation access control lists (ACLs) for 314.cs. + + c:\projects>tf permission 314.cs + +The following example displays the ACL information that relates to the group "developers" for the collection that is located at http://myserver:8080/tfs/DefaultCollection/. + + c:\projects>tf permission /group:[teamproject]\developers /collection: http://myserver:8080/tfs/DefaultCollection/ + +The following example enables members of the "leads" group to change their local copies of all items in the $/baseobjects Team Foundation version control server folder. + + c:\projects>tf permission /allow:PendChange /group:[teamproject]\leads $/baseobjects + +The following example removes all permission-related settings from the $/baseobjects folder for members of the "developers" group. + + c:\projects>tf permission /remove:* /group:developers $/baseobjects + +The following example enables the group "testers" to change their local copies of all items in $/testproject. + + c:\projects>tf permission /allow:PendChange /group:testers$/testproject + +The following example enables user somealias to make pending changes to his local copy of $/testtproject/314.cs in his workspace. + + c:\projects>tf permission /allow:PendChange /user:somealias $/testproject/314.cs. + +The following example denies user somealias the ability to make pending changes to his local copy of $/testproject/1256.cs. + + c:\projects>tf permission /deny:PendChange /user:somealias $/testproject/1256.cs + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/properties-or-info-command.md b/docs/tfvc/properties-or-info-command.md new file mode 100644 index 00000000000..48110fc048e --- /dev/null +++ b/docs/tfvc/properties-or-info-command.md @@ -0,0 +1,134 @@ +--- +title: Properties Command +description: Properties Command +ms.assetid: f306bc7a-db55-47d8-aa22-e2399260e838 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Properties Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays information about items under version control. + +**Required Permissions** + +To use the **properties** command, you must have the **Read** permission set to **Allow** for all specified files and folders. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf properties [/collection:TeamProjectCollectionUrl] [/recursive] [/login:username,[password]] + itemspec [/version:versionspec] [/workspace] +## Parameters + +<table><thead> +<tr><th><p><strong>Argument </strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><em>TeamProjectCollectionUrl</em></p></td> + <td><p>The URL of the team project collection that contains the items for which you want to display properties (for example, http://myserver:8080/tfs/DefaultCollection).</p></td></tr> +<tr> + <td><p><em>Itemspec</em></p></td> + <td><p>Identifies the files and folders that are specified for property retrieval.</p><p>For more information about how Visual Studio Team Foundation Server parses <em>itemspecs</em> to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/4y2ash30">Command-Line Options</a>.</p><p><strong>Note:</strong> You can specify more than one <em>Itemspec</em> argument.</p></td></tr> +<tr> + <td><p><em>Versionspec</em></p></td> + <td><p>Provides a value such as C3 for the <strong>/version</strong> option. For more information about how Team Foundation Server parses a version specification to determine which items are within its scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p></td></tr> +<tr> + <td><p><em>username</em></p></td> + <td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>Domain</em>\<em>UserName</em> or <em>UserName</em>.</p></td></tr></tbody> +</table> + +|**Option **|**Description**| +|---|---| +|**/recursive**|Displays all files and subfolders of a folder.| +|**/version**|Specifies the version of the file to open for viewing the properties on.| +|**/workspace**|Indicates the workspace to be used when displaying the "local" properties (such as location on disk).| +|**/collection**|Specifies the team project collection.| +|**/login**|Specifies the user name and password to authenticate the user with Team Foundation Server.| + +## Remarks +The properties command displays several pieces of information about a version-controlled item. Local and server information is listed separately. + +<table><thead> +<tr><th><p><strong>Property Name</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p>Local path</p></td> + <td><p>Indicates the local path of the workspace folder for the specified item.</p></td></tr> +<tr> + <td><p>Changeset</p></td> + <td><p>Indicates the version number of the file or folder that was last retrieved to the current workspace using the <a href="get-command.md">Get Command</a>.</p></td></tr> +<tr> + <td><p>Change</p></td> + <td><p>Indicates where a change is pending.</p></td></tr> +<tr> + <td><p>Type</p></td> + <td><p>Indicates the item type, for example file.</p></td></tr> +<tr> + <td><p>Server path</p></td> + <td><p>Indicates the full path of the item on the version control server.</p></td></tr> +<tr> + <td><p>Changeset</p></td> + <td><p>Indicates the version number of the item.</p></td></tr> +<tr> + <td><p>Deletion ID</p></td> + <td><p>If the item is deleted, the deletion identification; otherwise 0.</p></td></tr> +<tr> + <td><p>Lock</p></td> + <td><p>Indicates the type of lock.</p><ul><li><p><strong>Checkin</strong>   Check in is not permitted for the file.</p></li><li><p><strong>Checkout</strong>   Check out in not permitted for the file.</p></li><li><p><strong>None</strong>   A lock is not set. For more information, see <a href="lock-command.md">Lock Command</a>.</p></li></ul></td></tr> +<tr> + <td><p>Lock Owner</p></td> + <td><p>Indicates the person who set a check-in lock.</p></td></tr> +<tr> + <td><p>Last modified</p></td> + <td><p>Indicates the date and time stamp for when the item was last modified.</p></td></tr> +<tr> + <td><p>Type</p></td> + <td><p>Indicates the item type, for example file.</p></td></tr> +<tr> + <td><p>File Type</p></td> + <td><p>Displays the file type encoding. For example, Windows-1252.</p></td></tr> +<tr> + <td><p>Size</p></td> + <td><p>Indicates the size of the file in bytes.</p></td></tr></tbody> +</table> + +For links to other Team Foundation commands that describe the items on the server and the workspaces that map to the server, see [Informational Commands](https://msdn.microsoft.com/library/ms181450). + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example displays properties information about the file 314.cs. + + c:\projects>tf properties 314.cs + +The following example displays the properties of the working folder c:\\projects\\objects. + + c:\projects>tf properties objects + +## See Also + +#### Tasks + +[View Version Control File and Folder Properties](https://msdn.microsoft.com/library/ms245468) + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Permission Command](permission-command.md) + +[Status Command](status-command.md) + +[History Command](history-command.md) + +[Changeset Command](changeset-command.md) + +[Shelvesets Command](shelvesets-command.md) + +#### Concepts + +[Informational Commands](https://msdn.microsoft.com/library/ms181450) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/proxy-command.md b/docs/tfvc/proxy-command.md new file mode 100644 index 00000000000..face99f1de6 --- /dev/null +++ b/docs/tfvc/proxy-command.md @@ -0,0 +1,124 @@ +--- +title: Proxy Command +description: Proxy Command +ms.assetid: c36b124d-f1cf-4e6f-a053-3b7d501a234c +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Proxy Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Configures your client computer to use a proxy server. Adds, deletes, and lists proxy records about the location and availability of one or more proxy servers within your deployment, including any remote sites. + +**Required Permissions** + +To use the **proxy** command to configure a client computer, you must be a member of the **User** security group on the local computer. To use the **proxy** command to work with proxy records, you must have the AdminConfiguration permission. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf proxy ([/configure [Url]) [/collection:TeamProjectCollectionUrl] + [/login:UserName,[Password]] + + tf proxy /add Url [/name:Name] [/site:SiteName] + [/description:Description] [/default:(global|site|all)] + [/collection:TeamProjectCollectionUrl] [/login:UserName,[Password]] + + tf proxy /delete Url [/collection:TeamProjectCollectionUrl] + [/login:UserName,[Password]] + + tf proxy /list [Url1 Yrl2 ...] + [/collection:TeamProjectCollectionUrl] [/login:UserName,[Password]] + + tf proxy /enabled:(true|false) +## Parameters + +<table><thead> +<tr><th><p><strong>Argument</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><em>Url</em></p></td> + <td><p>Identifies the proxy server. You must use the following format: http://proxyServerName:proxyPortNumber.</p><p>Where <em>proxyServerName</em> is the name of the proxy server and <em>proxyPortNumber</em> is the assigned listening port (for example, <strong>http://server:8081</strong>).</p></td></tr> +<tr> + <td><p><em>TeamProjectCollectionUrl</em></p></td> + <td><p>Identifies the team project collection. You must use the following format: http://ApplicationTierServerName:PortNumber/<em>Directory</em>/<em>CollectionName</em>.</p><p>Where <em>ApplicationTierServerName</em> is the name of the application-tier server, <em>PortNumber</em> is the assigned listening port, and <em>Drectory</em>/<em>CollectionName</em> are the names of the directory and the collection (for example, <strong>http://server:8080/tfs/newcollection1</strong>).</p></td></tr> +<tr> + <td><p><em>UserName</em></p></td> + <td><p>Provides a value to the <strong>/login</strong> option. You can specify a user name value as either <em>Domain</em>\<em>UserName</em> or <em>UserName</em>.</p></td></tr> +<tr> + <td><p><em>Password</em></p></td> + <td><p>Provides a password for the user name.</p></td></tr></tbody> +</table> + +<table><thead> +<tr><th><p><strong>Option</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><strong>/configure</strong></p></td> + <td><p>Configures your client computer to use a proxy server.</p></td></tr> +<tr> + <td><p><strong>/collection</strong></p></td> + <td><p>Specifies the team project collection.</p></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>Specifies the user name and password to authenticate.</p></td></tr> +<tr> + <td><p><strong>/add</strong></p></td> + <td><p>Adds a proxy record to Visual Studio Team Foundation Server about the location and availability of proxy servers on your network.</p></td></tr> +<tr> + <td><p><strong>/name</strong></p></td> + <td><p>Associates a name with a proxy record.</p></td></tr> +<tr> + <td><p><strong>/site</strong></p></td> + <td><p>Associates an Active Directory domain with a proxy record.</p></td></tr> +<tr> + <td><p><strong>/description</strong></p></td> + <td><p>Specifies a description of the proxy record.</p></td></tr> +<tr> + <td><p><strong>/default</strong></p></td> + <td><p>Specifies the scope of the proxy record. If you add a proxy record with the default set to global, the first time that a developer performs a get operation, Team Foundation Server will redirect that developer's request to the proxy that is specified by the global record. If you add a proxy record with the default set to site, the first time that a developer from within the specified Active Directory domain performs a get operation, Team Foundation Server will redirect that developer's request to the proxy that is specified by the record that is associated with the site.</p><p>You can specify one of the following values:</p><ul><li><p><strong>global</strong></p></li><li><p><strong>site</strong></p></li><li><p><strong>all</strong></p></li></ul></td></tr> +<tr> + <td><p><strong>/delete</strong></p></td> + <td><p>Deletes a proxy record from Team Foundation Server.</p></td></tr> +<tr> + <td><p><strong>/list</strong></p></td> + <td><p>Lists proxy records in Team Foundation Server.</p></td></tr> +<tr> + <td><p><strong>/enabled</strong></p></td> + <td><p>Enables or disables proxy.</p><ul><li><p><strong>true</strong></p></li><li><p><strong>false</strong></p></li></ul></td></tr></tbody> +</table> + +## Remarks +The proxy command has two purposes, and each purpose is aimed at a different type of user. + +As a developer, you can use the proxy command to configure your client to use a proxy server or to override the network defaults for a proxy server. This task is similar to configuring Team Explorer to use a proxy. + +As a network administrator, you can use the proxy command to add and manage records about the location of various proxy servers within your deployment of Team Foundation Server. You can use these records to help developers configure their workstations to use a proxy. If you define a global proxy, Team Foundation Server can automatically redirect developers to use it. If you have a complex network topology with multiple Active Directory domains in various geographic locations, you can set up multiple records and associate each record with a particular domain. These records can then help you automatically direct developers from each geographical location to the appropriate proxy for their location. + +For more information about how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example automatically detects and configures a client computer to use a proxy, if a proxy record has been established: + + c:\projects>tf proxy /configure + +The following example overrides any proxy records on Team Foundation Server and configures a client computer to use a specified proxy: + + c:\projects>tf proxy /configure Url + +The following example adds a global record to Team Foundation Server about the availability of this proxy. The first time that a developer performs a get operation, Team Foundation Server will redirect all requests from that developer to the specified proxy. + + c:\projects>tf proxy /add http://server:8081 /default:global /collection:http://tfsserver:8080/ + +The following example adds a site record to Team Foundation Server for developers in an Active Directory domain, which is named corp, to use this proxy server. The first time that a developer from that domain performs a get operation, Team Foundation Server will redirect all requests from that developer to the specified proxy. + + c:\projects>tf proxy /add http://server:8081 /default:site /site:corp /collection:http://tfsserver:8080/ + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/reconcile-differences-between-two-folders.md b/docs/tfvc/reconcile-differences-between-two-folders.md new file mode 100644 index 00000000000..5ee69e591eb --- /dev/null +++ b/docs/tfvc/reconcile-differences-between-two-folders.md @@ -0,0 +1,74 @@ +--- +title: Reconcile differences between two folders +description: Reconcile differences between two folders +ms.assetid: 8776e3dd-fc70-422c-a191-81b22a989403 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Reconcile differences between two folders + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +After you compare a server folder and a local folder, you can reconcile the differences between the folder contents and between files that have conflicting pending changes in your local folder. For more information, see [Compare folders](compare-folders.md). + +**Required Permissions** + +To perform these procedures, you must have the **Read** and **Check out** permissions set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +>**Note:** +> To reconcile two local folders or files, you do not need Team Foundation Server permissions. + +### To reconcile differences + +1. In Source Control Explorer, right-click a folder, and then click **Compare**. + + The **Compare** dialog box appears. + +2. In the **Compare** dialog box. select the folder versions to compare. For more information see [Compare folders](compare-folders.md). + + The **Folder Difference** window appears. + +3. In the **Folder Difference** window, right-click the folder or file you want to reconcile, and click **Reconcile**. + + >**Note**: + > You can select multiple folders and files by holding down the CTRL key and clicking additional folders or files. Also, you can press CTRL+A to select all folders and files. + + The **Reconcile Folder Differences** window appears. + +4. For **Files that are not in your workspace**, either click **Get** to download the latest version of files that you do not have in your local workspace, or click **Ignore** to leave these files only on the server. + +5. For **Files that are not on the server**, either click **Add to Server** to upload files that do not appear on the server or click **Ignore** to leave these files only in your local workspace. + +6. For **Files that have pending changes**, select one of the following options: + + - **Ignore** to keep the changes made to these files in your local workspace. + + - **Undo Pending Changes** to disregard changes made to these files in your local workspace. + + - **Get** to download the latest version of these files to your local workspace. + +7. For **Files that do not have pending changes**, select one of the following options: + + - Click **Get** to download the latest version of files that you do not have in your local workspace. + + - Click **Check Out** to check out the server version of files. If you have made any changes to your local version, you will have an option to merge these changes with the server version when you check in the files. + + - Click **Ignore** to leave these files only on the server. + +8. Click **OK**. + + If you have pending changes in your local workspace that conflict with the server version of a file and you chose to **Get** the latest version of the file, the **Resolve Conflicts** window appears. For more information, see [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md). + +## See Also + +#### Other Resources + + [Compare folders](compare-folders.md) + + [Compare files](compare-files.md) + + [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md) diff --git a/docs/tfvc/remove-access-version-control-files.md b/docs/tfvc/remove-access-version-control-files.md new file mode 100644 index 00000000000..cc01d7e4eaf --- /dev/null +++ b/docs/tfvc/remove-access-version-control-files.md @@ -0,0 +1,79 @@ +--- +title: Remove Access to Version Control Files +description: Remove Access to Version Control Files +ms.assetid: 4264ddaf-ef39-430a-a388-770e2d06b319 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Remove Access to Version Control Files + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +As a Team Foundation administrator, you may have to remove access to a file that is under version control. For example, someone may check in a file infected with a virus. You can also permanently destroy version controlled files. For more information, see [Destroy Version Controlled Files](destroy-version-controlled-files.md). + +The following procedure provides the details for removing the file by using the user interface or the **tf** command-line utility. Access is removed by overwriting the bad version with a clean version and adding the clean version to the database. By setting the read/write permissions, you can prevent the file from appearing in Source Control Explorer. + +>**Note:** +>Although the file remains in the database in a deleted state, do not remove the row for the file directly from the database or you may experience unexpected results. + +  + +>**Caution:** +>If you remove the **Read** permission for the **Service Accounts** security group on a file or folder that is under version control, the VersionControl.Adapter might not be able to read the file or folder. If the adapter cannot read the version control information in the data warehouse, the adapter will write a message in the application-tier event log similar to **The service account might not have permissions to retrieve this changeset**. Without the version control information from the file or folder, the data warehouse, and subsequent version control reports might not be completely accurate. + +**Required Permissions** + +To remove access to Team Foundation version control files, you must belong to the **Team Foundation Administrators** group. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To remove access to a file under version control + +1. On the Visual Studio **View** menu, click **Other Windows**, and then click **Source Control Explorer**. + +2. Locate and check out the file that you want to remove. For more information, see [Check Out and Edit Version-Controlled Items](check-out-edit-files.md). + +3. In the **Check Out** dialog box, verify that the correct file is selected, then click **Check Out** in the **Select lock type** options. + +4. Create a new file and save the file in the same location and with the same name and extension as the latest version of the file that you want to overwrite. + +5. Check in the file. For more information, see [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411). + + >**Note:** + >You might want to make sure that any client user who has a local copy of the file on their computer, removes any reference to the file in Solution Explorer and manually removes any copy of the file on their client computer. + +6. Right-click the file and then click **Properties** to open the **Properties** dialog box for the file. On the **Properties** dialog box, click the **Security** tab, and clear the **Inherit Security Settings** box. + +7. Click **deny** for each user and group except **Administrators**. + +8. Click **OK** and the file is removed for other users from Source Control Explorer. + +### To remove access to the file from the command line + +1. Open the command line and use the **CheckOut** command of the **tf** utility to obtain a write-enable version of the file that you want to remove. For example: + + **tf checkout myfile.cs** + +2. Create a new file and overwrite the file that you want to remove. + +3. Use the **CheckIn** command to replace the version of the file in the database. + + For example, you might want to add a comment describing that you overwrote the file and that the permissions are denied. + + **tf checkin /comment:"Overwrote bad file and denied permissions."** + +4. Use the **permission** command together with the **/deny** option to change the permissions to that file for a user or a group. + + For example, you can use the following command to deny read permissions on the file to groups on the ADATUM domain. + + **tf permission /inherit:no myfile.cs** + + **tf permission /deny:read myfile.cs /group:ADATAUM\\Group1 ADATAUM\\Group2 myfile.cs** + +## See Also + +#### Tasks + +[Control Access to Team Foundation Version Control](control-access-team-foundation-version-control.md) diff --git a/docs/tfvc/remove-check-policies.md b/docs/tfvc/remove-check-policies.md new file mode 100644 index 00000000000..91e07b19001 --- /dev/null +++ b/docs/tfvc/remove-check-policies.md @@ -0,0 +1,42 @@ +--- +title: Remove Check-In Policies +description: Remove Check-In Policies +ms.assetid: fb4b62ef-e413-4f03-81fe-ae560c9f60ff +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Remove Check-In Policies + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Administrators of Team Foundation version control can add check-in policy requirements. These check-in policies require the user to take actions when they conduct a check-in to source control. For example, a user can be required to associate a work item with a changeset. For more information, see [Add Check-In Policies](add-check-policies.md). The following procedure demonstrates how to remove a check-in policy from your team project. + +**Required Permissions** + +To complete this procedure, you must have the **Edit project-level information** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). +## Procedure +### To remove a check-in policy + +1. From the **Team** menu, choose **Team Project Settings**, and then select **Source Control**. + +2. In the **Source Control Settings** dialog box, choose the **Check-in Policy** tab. + +3. In the policy type list, click the policy type that you want to delete, and click **Remove**. + +4. Click **OK**. + +## See Also + +#### Concepts + +[Set and Enforce Quality Gates](set-enforce-quality-gates.md) + +[Working with Changesets](find-view-changesets.md) + +#### Other Resources + +[Walkthrough: Customizing Checkin Policies and Notes](https://msdn.microsoft.com/library/ms181281) diff --git a/docs/tfvc/rename-command-team-foundation-version-control.md b/docs/tfvc/rename-command-team-foundation-version-control.md new file mode 100644 index 00000000000..22c2b0a4730 --- /dev/null +++ b/docs/tfvc/rename-command-team-foundation-version-control.md @@ -0,0 +1,141 @@ +--- +title: Rename Command (Team Foundation Version Control) +description: Rename Command (Team Foundation Version Control) +ms.assetid: 5d754d91-41b0-40bd-a57a-aa22518deb23 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Rename Command (Team Foundation Version Control) + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +The **rename** command changes the name or the path of a file or folder. You can use the **rename** command or the aliases **move** or **ren**, to move a file or folder to a new location. + +>**Note:** +> The results of this command are not reflected in the Team Foundation version control server until you perform a check-in operation. For more information, see [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411). + +**Required Permissions** + +To use the **rename** command, you have the **Check out** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf rename [/lock:(none|checkout|checkin)] [/login:username,[password]] olditem newitem + +## Parameters<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><i>olditem</i></p></td> +<td><p>The original name and path of the file or folder that is to be renamed. You can specify a local workspace path such as C:\myfiles\314.cs or a Team Foundation version control server path such as $/myfiles/314.cs.</p></td> +</tr> +<tr> +<td><p><i>newitem</i></p></td> +<td><p>The new name of the file or folder. You can use this to specify a different local or a Team Foundation version control server path location.</p></td> +</tr> +<tr> +<td><p><i>username</i></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <i>DOMAIN</i>\<i>UserName</i> or <i>UserName</i>.</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p><strong>Option</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/lock</strong></p></td> +<td><p>Include this option to prevent other users from checking in or checking out the specified items. If this option is not specified, the existing lock status of the item is not changed. For more information, see <a href="understand-lock-types.md">Understanding Lock Types</a>.</p> +<p>Lock Options:</p> +<ul> +<li><p><strong>None</strong> No lock is applied.</p></li> +<li><p><strong>Checkin</strong> Other users can check out the specified items but they cannot check in revisions to locked files until you release the lock by performing a check-in. If any other users have locked any one of the specified items, the lock operation fails.</p></li> +<li><p><strong>Checkout</strong> Prevents other users from checking in or checking out any one of the specified items until you release the lock by performing a check-in. If any other users have locked any one of the specified items, the lock operation fails.</p> +<p></p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td> +</tr> +</tbody> +</table> + +## Remarks +You can use the **rename** command of the **tf** command-line utility to move or rename a version-controlled item in your workspace. Use the **rename** command to move multiple files by specifying wildcard characters. The ability to rename multiple version-controlled files or folders, is only available from the command-line. + +Use Rename to do the following: + +- Rename the *olditem* to the *newitem*, such as `tf rename 314.cs 315.cs`. + +- Move the *olditem* to a new location in the Team Foundation version control server by providing a *newitem* whose path differs from that of the *olditem*, such as ** **`tf rename 314.cs ..\\newdir\\314.cs`. + +If you provide a *newitem* that specifies a non-existent folder, the **rename** command creates the destination folder. If *newitem* is a folder, *olditem* becomes a child of *newitem*. + +You cannot rename an item if: + +- You have already deleted it before it was checked in to the same workspace. + +- The new name already exists in the Team Foundation version control server and is not a folder. + +- You have already added, branched, or renamed the pending check-in of the item. + +- The item is mapped in the workspace but not available on the local disk. + +- The item is cloaked. + +You can rename an item for which another file of the same name has been added pending check-in but you cannot rename an item that has been branched but not yet checked in. When you rename a file that has pending edits, the edits are preserved. + +An item that is explicitly mapped cannot be renamed without first changing the mapping. For example, if there is a working folder mapping of $/ProjectX/MyApp to c:\\MyApp, you cannot rename MyApp. You can rename items under *MyApp* but not *MyApp* itself. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example changes the name of 314.c to 1254.c. + + c:\projects>tf rename 314.c 1254.c + +The following example renames 314.c to 1254.c and moves it to the newdir folder. + + c:\projects>tf rename 314.c ..\newdir\1254.c + +The following example changes the name of Form1.vb to MainPage.vb and applies a lock to it. + + c:\projects>tf rename Form1.vb MainPage.vb /lock:checkin + +## See Also + +#### Tasks + +[Move, Rename, and Delete Version-Controlled Files and Folders](rename-move-files-folders.md) + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Add Command](add-command.md) + +[Delete Command (Team Foundation Version Control)](delete-command-team-foundation-version-control.md) + +[Get Command](get-command.md) + +#### Concepts + +[Understanding Lock Types](understand-lock-types.md) + +[Pending Changes](https://msdn.microsoft.com/library/ms181409) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/rename-move-files-folders.md b/docs/tfvc/rename-move-files-folders.md new file mode 100644 index 00000000000..30c0c70bd38 --- /dev/null +++ b/docs/tfvc/rename-move-files-folders.md @@ -0,0 +1,63 @@ +--- +title: Rename or move files and folders | Team Foundation Version Control +description: Rename or move files and folders using Team Foundation Version Control (TFVC) commands +ms.assetid: 90839209-cb51-4c00-ae19-08e7343093ea +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Rename or move files and folders in TFVC + +**VSTS | TFS 2015 & TFS 2017 | Visual Studio 2013 | Visual Studio 2015** + +> [!IMPORTANT] +> If you're not using TFVC for version control, use [Solution Explorer](https://docs.microsoft.com/en-us/visualstudio/ide/solutions-and-projects-in-visual-studio#managing-projects-in-solution-explorer) to +> move and rename files in your current open Visual Studio solutions or projects. + +## Move an item in TFVC + +You can use [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md) to move one file or folder at a time. +You should not use Source Control Explorer to move folders or files that are referenced by a Visual Studio project or solution. +Move these files with [Solution Explorer](https://docs.microsoft.com/en-us/visualstudio/ide/solutions-and-projects-in-visual-studio#managing-projects-in-solution-explorer) instead and check in the move in a new changeset. + +1. In Source Control Explorer, select the item that you want to move, open its shortcut menu, and choose **Move**. + +2. In the **Move** dialog box, either manually type the destination for the item in the **To** box, or choose **Browse** to use the **Browse for Folder** dialog box. + +3. Choose **OK**. + +## Rename an item in TFVC + +1. In Source Control Explorer, select the file that you want to edit, open its shortcut menu, and choose **Rename**. + +2. Type the desired name for the item. + +### Fix the outcome after you rename an item in your operating system + +You should avoid renaming items managed by TFVC using your operating system (for example, using Windows File Explorer, or the **rename** command in the Windows command prompt). When you have used your operating system to rename an item in in a [local workspace](decide-between-using-local-server-workspace.md), Visual Studio detects the change as two changes: an add and a delete. You can join the two actions into a rename action. + +> [!NOTE] +> Git version control users can move and rename files from the command line or Windows Explorer without this concern. The changes will be reflected in Team Explorer. + +1. In Visual Studio, in Team Explorer, choose ![Home icon](_img/rename-move-files-folders/IC547418.png) **Home**, and then choose **Pending Changes**. + +2. In the **Excluded Changes** section, choose the **Detected:** link. + +3. In the **Promote Candidate Changes** dialog box, select the delete and add actions, open their shortcut menu, and choose **Promote as Rename**. + +4. A single rename change now appears in the **Included Changes** section. + +## Work from the command prompt + +- [Rename Command (Team Foundation Version Control)](rename-command-team-foundation-version-control.md) : Rename or move a file. + +## Tips + +You must be one of the **Contributors** for your team project. See [Team Foundation Server default groups, permissions, and roles](https://msdn.microsoft.com/library/ms253077). + +- If you are beginning a new task, it’s a good practice to [download the latest files from the server](download-get-files-from-server.md) before you make changes to files in your workspace. +- Avoid renaming an item that has been branched but not yet checked in. If you try to do so, a conflict will occur. +- You can [review and manage your work](develop-code-manage-pending-changes.md), [suspend your work](suspend-your-work-manage-your-shelvesets.md), and ultimately [contribute your work to the team’s codebase](check-your-work-team-codebase.md). diff --git a/docs/tfvc/resolve-command.md b/docs/tfvc/resolve-command.md new file mode 100644 index 00000000000..b7b91b07a21 --- /dev/null +++ b/docs/tfvc/resolve-command.md @@ -0,0 +1,178 @@ +--- +title: Resolve Command +description: Resolve Command +ms.assetid: de5698a0-4e04-45b9-9dbe-3f78706919b3 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Resolve Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Lets you resolve conflicts between changed items in your workspace and the latest or destination versions of items on the server. + +**Required Permissions** + +To use the **resolve** command, you must be either the workspace owner or have the global **Administer workspaces** permission set to **Allow**. You must also have the **Read** and **Check out** permissions for the items involved in a resolve operation set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf resolve [itemspec] + [/auto:(AutoMerge|TakeTheirs|KeepYours|OverwriteLocal|DeleteConflict|KeepYoursRenameTheirs)] + [/preview] [(/overridetype:overridetype | /converttotype:converttype] [/recursive] [/newname:path] [/noprompt] [/login:username, [password]] +## Parameters + +<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><em>Itemspec</em></p></td> +<td><p>Used to identify the file or folder for which to resolve version conflicts. If omitted, all items with conflicts will be included. For more information about how Visual Studio Team Foundation Server parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p> +<div class="alert"> +<div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"> +<div class="mtps-row"> +**Note** +</div> +<div class="mtps-row"> +You can specify more than one *Itemspec* argument. +</div> +</div> +</div></td> +</tr> +<tr> +<td><p><em>overridetype</em></p></td> +<td><p>Used with the <strong>/overridetype</strong> option. Specifies the encoding type of the files involved. For example; binary.</p></td> +</tr> +<tr> +<td><p><em>converttype</em></p></td> +<td><p>Used with the <strong>/converttotype</strong> option. Specifies the encoding type, such as "unicode."</p></td> +</tr> +<tr> +<td><p><em>path</em></p></td> +<td><p>Used with the <strong>/newname</strong> option. Specifies the new path of the affected file or folder</p></td> +</tr> +<tr> +<td><p><em>username</em></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>DOMAIN</em>\<em>UserName</em> or <em>UserName</em>.</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p><strong>Option</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/auto</strong></p></td> +<td><p>Resolves outstanding conflicts between different versions of specified items in the current workspace using one of the following options:</p> +<ul> +<li><p><strong>AutoMerge</strong>   Automatically reconciles non-overlapping content differences between the specified workspace version of an item and the latest server version.</p> +<p>If differences cannot be reconciled automatically, either because the file is binary or because the workspace and server versions contain overlapping content changes, the conflict remains unresolved pending the selection of one of the following manual merge options.</p></li> +<li><p>The <strong>TakeTheirs</strong> option instructs Team Foundation Server to overwrite workspace revisions with the server revision. Further, for conflicts generated by running the <strong>Merge</strong> command, this option accepts the changes from the source of the merge and overwrites the changes in the target.</p></li> +<li><p>The <strong>KeepYours</strong> option instructs Team Foundation Server to keep your changes and discard the changes in the server version of an item. For conflicts generated by running the <strong>Merge</strong> command, this option discards the changes from the source of the merge and leaves the target unchanged.</p></li> +<li><p>The <strong>OverwriteLocal</strong> option overwrites the file in your workspace with the server version. This is used to resolve conflicts that arise from a writable file in your workspace.</p></li> +<li><p>The <strong>DeleteConflict</strong> option removes a conflict from the conflict table, and the option/description table.</p></li> +<li><p>The <strong>KeepYoursRenameTheirs</strong> option accepts the contents and name of your file and renames their file to a new name that the user specifies. This option requires a single-item filespec, and the <strong>/newname</strong> option must also be included.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>/preview</strong></p></td> +<td><p>Displays current conflicts but does nothing with them.</p></td> +</tr> +<tr> +<td><p><strong>/overridetype</strong></p></td> +<td><p>Specifies optional encoding for files involved in a three-way merge. The files are treated as the specified encoding. You must determine the correct encoding. Team Foundation Server saves the resulting merge output in the specified encoding in your workspace. For more information about file encodings, see <a href="../tfs-server/admin/manage-file-types.md">Managing File Types</a>.</p> +<div class="alert"> +<div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"> +<div class="mtps-row"> +**Note** +</div> +<div class="mtps-row"> +You cannot specify both an **/overridetype** and a **/converttotype**. +</div> +</div> +</div></td> +</tr> +<tr> +<td><p><strong>/converttotype</strong></p></td> +<td><p>Specifies the encoding used for temporary conversion for the input in a three-way merge operation. The merge output is saved in the specified encoding in your workspace. This option is an advanced option and seldom used. For more information about file encodings, see <a href="../tfs-server/admin/manage-file-types.md">Managing File Types</a>.</p> +<div class="alert"> +<div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"> +<div class="mtps-row"> +**Note** +</div> +<div class="mtps-row"> +You cannot specify both an **/overridetype** and a **/converttotype**. +</div> +</div> +</div></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>Resolves items in the specific directory and subdirectories.</p></td> +</tr> +<tr> +<td><p><strong>/newname</strong></p></td> +<td><p>Option used to resolve a name collision conflict. Can only be used in conjunction with <strong>AutoMerge</strong> and <strong>KeepYoursRenameTheirs</strong>. With <strong>AutoMerge</strong>, <strong>/newname</strong> is only valid with conflicts that involve rename and/or undelete. If used, you must supply a new <em>path</em>.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Team Foundation Server.</p></td> +</tr> +<tr> +<td><p><strong>/noprompt</strong></p></td> +<td><p>Suppresses any prompts for input.</p></td> +</tr> +</tbody> +</table> +## Remarks +You can use the **Resolve** command to select a resolution for pending changes that conflict with the server version. + +If version conflicts are detected between your version and the version on the destination server during a get, check-in, or merge operation, a prompt appears for you to select a conflict resolution using the **resolve** command. You must resolve conflicts before you can check in your pending changes. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example invokes the **Resolve Conflicts** dialog box so that you can tell Team Foundation Server how to deal with pending changes that conflict with the server version. + + tf resolve + +The following example attempts to resolve all conflicts by automatically merging the changes. + + tf resolve /auto:automerge + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Merge Command](merge-command.md) + +[Get Command](get-command.md) + +[Checkin Command](checkin-command.md) + +[Difference Command](difference-command.md) + +#### Concepts + +[Managing File Types](../tfs-server/admin/manage-file-types.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) + +[Resolving Folder Differences and File Conflicts](resolve-team-foundation-version-control-conflicts.md) + +[Comparing Folders and Files](compare-folders-files.md) diff --git a/docs/tfvc/resolve-team-foundation-version-control-conflicts.md b/docs/tfvc/resolve-team-foundation-version-control-conflicts.md new file mode 100644 index 00000000000..8f40923dd50 --- /dev/null +++ b/docs/tfvc/resolve-team-foundation-version-control-conflicts.md @@ -0,0 +1,195 @@ +--- +title: Resolve Team Foundation Version Control conflicts +description: Resolve Team Foundation Version Control conflicts +ms.assetid: 61cae295-0864-4ae9-8327-9bd1dd14cae9 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Resolve Team Foundation Version Control conflicts + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +An advantage of using Team Foundation version control to manage your files is that several people can work concurrently on a file. One drawback is that sometimes you must resolve conflicts before you can get, check in, unshelve, merge, or roll back your files. + +Although it can be frustrating to encounter conflicts, the system provides information and tools to help you understand and resolve conflicts. + +- [Resolve conflicts](resolve-team-foundation-version-control-conflicts.md#manage_items) + +- [AutoResolve all conflicts](resolve-team-foundation-version-control-conflicts.md#autoresolve) + +- [AutoMerge an individual conflict](resolve-team-foundation-version-control-conflicts.md#automerge) + +- [Manually resolve an individual conflict](resolve-team-foundation-version-control-conflicts.md#manual) + +- [Understand the automatic options](resolve-team-foundation-version-control-conflicts.md#automatic_options) + +- [Work from the command prompt](resolve-team-foundation-version-control-conflicts.md#command_prompt) + +- [Get tips](resolve-team-foundation-version-control-conflicts.md#tips) + +<a name="manage_items"> + +## Resolve conflicts + +Use the Resolve Conflicts window to resolve conflicts that are blocking you. + +![](_img/resolve-team-foundation-version-control-conflicts/IC745580.png) + +![](_img/resolve-team-foundation-version-control-conflicts/IC612247.png) +By default, the window shows only the conflicts caused by the most recent operation you attempted. When the window is in this state, a message appears that begins: **Path filter applied**. To show all conflicts in your workspace, choose **Get All Conflicts**. A message that begins with: **n Conflict(s)** appears. + +If a lot of time has passed since you made changes to files in your workspace, new conflicts might have occurred. To refresh the **Resolve Conflicts** window, choose **Refresh**. + +Each conflict contains information and sometimes links that might help you resolve it. To get more information, you can select the conflict and choose: + +- ![](_img/resolve-team-foundation-version-control-conflicts/IC277131.png) **History** to see the history of the file. If the operation that caused the conflict is a Merge or a Rollback, then you can choose the menu control to the right of **History** and then select either **Source History** or **Target History**. + + See [Get the history of an item](get-history-item.md). + +- ![](_img/resolve-team-foundation-version-control-conflicts/IC277132.png) **Annotate** to view details on all changes that were made to the most recent version of the file, including who made each change and when they made it. See [View file changes using annotate](view-file-changes-using-annotate.md). + +- ![](_img/resolve-team-foundation-version-control-conflicts/IC277133.png) **Compare** (or the menu to the right of the button and then choose a command). The [Diff](compare-files.md) window appears. + +<a name="autoresolve"> + +## AutoResolve all conflicts + +By default the system automatically attempts to **AutoResolve All** conflicts unless you have turned off this option (see [Tips](resolve-team-foundation-version-control-conflicts.md#tips)). In the Resolve Conflicts window, you can also manually choose **AutoResolve All**, and then choose: + +- Select **All Conflict Types** if you want the system to attempt to resolve the conflicts automatically by using all its heuristics. + +- Select **Specific Conflict Types** if you want the system to attempt to resolve the conflicts, but you want to exclude some heuristics. + + The **Choose Conflicts to Resolve** dialog box appears. Check or clear the options that you want to enable or disable, and then choose **AutoResolve**. For more information, see [Understand the automatic options](resolve-team-foundation-version-control-conflicts.md#automatic_options) below. + +The system attempts to automatically resolve the conflicts displayed in the Pending Changes window. Any conflicts the system was unable to resolve will remain in the window. You have to [manually resolve](resolve-team-foundation-version-control-conflicts.md#manual) these conflicts. + +<a name="automerge"> + +## AutoMerge a single conflict + +Choose **AutoMerge** if you want to try to resolve selected conflicts using all the AutoMerge options described in [Understand the automatic options](resolve-team-foundation-version-control-conflicts.md#automatic_options) below. + +> **Tip:** +> You can press and hold either the Ctrl or the Shift key and then select multiple conflicts. + +> **Note:** +> If **AutoMerge** is disabled, then this conflict must be [manually resolved](resolve-team-foundation-version-control-conflicts.md#manual). + +<a name="manual"> + +## Manually resolve a single conflict + +If the system cannot automatically resolve a conflict, or if you want to make sure you understand what is changing, you must manually resolve the conflict. Within each conflict, the system displays the actions that you can take to resolve the conflict. The actions displayed depend upon the conflict type, and the operation that caused the conflict. + +### Merge changes in merge tool + +When a conflict is caused by conflicting content changes, you can choose **Merge Changes in Merge Tool**. + +When you choose this action, the Merge window appears. + +![](_img/resolve-team-foundation-version-control-conflicts/IC612248.png) +The outcome of your work to resolve the conflict is shown in the **Results** pane. + +In this window you can: + +- Select the layout of the window: **Vertical View**, **Horizontal View**, **Mixed View**. + +- Navigate among the differences and the conflicts. + +- Select items from the left and right versions of the file to include them in the result. + +- Type additional content into the file in the Result pane. + +- View the History of the file. See [Get the history of an item](get-history-item.md). + +- Compare the various versions of the file. + +- Annotate the file to see who changed what. See [View file changes using annotate](view-file-changes-using-annotate.md). + +When are satisfied with the contents of the **Result** pane, choose **Accept Merge**. + +<a name="automatic_options"> + +## Understand the automatic options + +In special cases, you may want to restrict the types of conflicts automatically resolved by the **AutoResolve All** option. + +When you choose **AutoResolve All**, and then **Specific Conflict Types**, the **Choose Conflicts to Resolve** dialog box appears. + +![](_img/resolve-team-foundation-version-control-conflicts/IC612249.png) + +<table> +<thead> +<tr> +<th><p>If you want the system to automatically resolve conflicts that occurred because…</p></th> +<th><p>As explained in this example…</p></th> +<th><p>Then select this check box…</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>Non-conflicting content changes were made in each version of a file</p></td> +<td><p>In the file version on the left, a <strong>zero</strong> was added at the beginning. In the file on the right, a <strong>three</strong> was added at the end:</p> +<img src="_img/resolve-team-foundation-version-control-conflicts/IC377394.png" title="Non-conflicting content changes" alt="Non-conflicting content changes" /></td> +<td><p><strong>Conflicts with any content changes</strong></p></td> +</tr> +<tr> +<td><p>Content changes were made that are unique to the workspace (during get or checkin operation) or target version (during merge or rollback operation)</p></td> +<td><p><strong>four</strong> and <strong>five</strong> were added to the workspace or target version:</p> +<img src="_img/resolve-team-foundation-version-control-conflicts/IC377395.png" title="Content changes unique to workspace or target" alt="Content changes unique to workspace or target" /></td> +<td><p><strong>Conflicts with content changes made only in the local workspace or target branch</strong></p></td> +</tr> +<tr> +<td><p>Content changes were made that are unique to the server (during get or checkin operation) or source version (during merge or rollback operation)</p></td> +<td><p><strong>four</strong> and <strong>five</strong> were added to the server or source version:</p> +<img src="_img/resolve-team-foundation-version-control-conflicts/IC377396.png" title="Content changes unique to server or source" alt="Content changes unique to server or source" /></td> +<td><p><strong>Conflicts with content changes made only in the server version or source branch</strong></p></td> +</tr> +<tr> +<td><p>A file on the server (during get or checkin operation) or in the source branch (during merge or rollback operation) was renamed</p></td> +<td><p>You checked out a file that is named <strong>launch.cs</strong> and worked on it. During that time, someone else checked in a changeset that affected the same file. That changeset did not modify the contents of the file, but it did change the name of the file to <strong>start.cs</strong>.</p></td> +<td><p><strong>Conflicts caused by renaming file in the server version or source branch</strong></p></td> +</tr> +<tr> +<td><ul> +<li><p>Common content changes were made that resulted in identical content in each version</p></li> +<li><p>You changed a file, checked it in through a Gated Check-in build, and selected the <strong>Preserve my pending changes locally</strong> option</p></li> +</ul></td> +<td><p>Changes to each version resulted in identical file content. The changes can be to the content in the files, as shown in the following example:</p> +<img src="_img/resolve-team-foundation-version-control-conflicts/IC377397.png" title="Identical content changes in each version" alt="Identical content changes in each version" /> +<p>This option also resolves conflicts that are caused by all other operations (for example, rename, delete, undelete, and branch) and that result in identical files.</p> +<div class="alert"> +<table> +<thead> +<tr> +<th> <strong>Tip</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>If you select this check box, when you proceed, the system will resolve these changes by taking (downloading) the server version onto your workspace.</p></td> +</tr> +</tbody> +</table> +</div></td> +<td><p><strong>Conflicts caused by identical change in the server and workspace</strong></p></td> +</tr> +</tbody> +</table> + +<a name="command_prompt"> + +## Work from the command prompt + +- [Resolve Command](resolve-command.md) + +## Tips + +- ![](_img/resolve-team-foundation-version-control-conflicts/IC572374.png) By default the system automatically attempts to **AutoResolve All** conflicts. To change the option, from the menu bar choose **Tools**, **Options**, and then in the **Options** dialog box, navigate to **Source Control**, **Visual Studio Team Foundation Server**. Clear the **Attempt to automatically resolve conflicts when they are generated** checkbox. + +- ![](_img/resolve-team-foundation-version-control-conflicts/IC572374.png) Does your team need to collaborate to resolve a large number of conflicts (for example, which might occur after merge operation in a large codebase)? If so, a public workspace on a shared dev machine might help. See [Create and work with workspaces](create-work-workspaces.md). diff --git a/docs/tfvc/roll-back-changesets.md b/docs/tfvc/roll-back-changesets.md new file mode 100644 index 00000000000..804f54a17f7 --- /dev/null +++ b/docs/tfvc/roll-back-changesets.md @@ -0,0 +1,86 @@ +--- +title: Roll back changesets +description: Roll back changesets +ms.assetid: 11864092-7a1d-4810-ae01-148afbaa7852 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Roll back changesets + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +A [changeset](find-view-changesets.md) is a permanent part of the history of your version-controlled items and cannot be undone or removed. However, you can roll back the effects of one or more changesets. + +> **Tip:** +> You can confirm the changes that result from rolling back some items match what you intend to do before you commit them to the server. See [Tips](roll-back-changesets.md#tips) for details. + +**Required permissions** + +You must be one of the **Contributors** for your team project. See [Team Foundation Server default groups, permissions, and roles](https://msdn.microsoft.com/library/ms253077). + +## Roll back changes from a single changeset + +For example, a developer wants to remove the effects of a changeset: + +![Rollback changes from one changeset](_img/roll-back-changesets/IC581279.png) +### To roll back a changeset from the Changeset Details page + +- On the [Changeset Details](find-view-changesets.md) page, choose **Rollback**. + +### To roll back a changeset from the History window + +- In the [History](get-history-item.md) window, open the shortcut menu of a version and choose **Rollback Entire Changeset**. + +### To roll back a changeset from Source Control Explorer + +1. In [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), select an item, open its shortcut menu, and choose **Rollback**. + + > **Note:** + > The items you select determine the scope that the rollback changes. + +2. In the **Rollback** dialog box, select **Rollback changes from a single changeset**. + +## Roll back changes from a range of changesets + +For example, a developer wants to remove the effects of some consecutive changesets: + +![Rollback changes from multiple changesets](_img/roll-back-changesets/IC581280.png) +### To roll back a changeset from the History window + +- In the [History](get-history-item.md) window, select two or more consecutive versions, open their shortcut menu, and choose **Rollback**. + +### To roll back a changeset from Source Control Explorer + +1. In [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), select an item, open its shortcut menu, and choose **Rollback**. + + > **Note:** + > The items you select determine the scope that the rollback changes. + +2. In the **Rollback** dialog box, select **Rollback changes from a range of changesets**. + +## Roll back to a specific version + +For example, a developer wants to roll back a file to an earlier version, eliminating the effect of all changesets that occurred after that version: + +![Rollback to a single changeset](_img/roll-back-changesets/IC581281.png) +### To roll back to a specific version + +1. In [Source Control Explorer](use-source-control-explorer-manage-files-under-version-control.md), select an item, open its shortcut menu, and choose **Rollback**. + +2. In the **Rollback** dialog box, select **Rollback to a specific version**. + +## Work from the command prompt + +- [Rollback Command (Team Foundation Version Control)](rollback-command-team-foundation-version-control.md) + +## Tips + +- If your change is still pending (you have not yet checked it in), you can undo the change instead of rolling it back. See [Develop code and manage pending changes](develop-code-manage-pending-changes.md). + +- ![Tip](_img/roll-back-changesets/IC572374.png) Like most changes you make to files, a rollback change is queued as a pending change. After you roll back the files, you can [view the files you are changing](develop-code-manage-pending-changes.md) and [compare the content of the files with the latest version on the server](compare-files.md). After you confirm the actual changes match what you intend to do, you can [then check them in](check-your-work-team-codebase.md). + +- Rollback does not delete changesets or any data. If you change your mind, use rollback to revert the content of the files back to their state before the rollback. diff --git a/docs/tfvc/rollback-command-team-foundation-version-control.md b/docs/tfvc/rollback-command-team-foundation-version-control.md new file mode 100644 index 00000000000..a21f22a118f --- /dev/null +++ b/docs/tfvc/rollback-command-team-foundation-version-control.md @@ -0,0 +1,172 @@ +--- +title: Rollback Command (Team Foundation Version Control) +description: Rollback Command (Team Foundation Version Control) +ms.assetid: 8cbca369-eda2-459b-aa37-c86ec2eab3b0 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Rollback Command (Team Foundation Version Control) + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +You can use this command to roll back the effects of one or more changesets to one or more version-controlled items. This command does not remove the changesets from an item's version history. Instead, this command creates in your workspace a set of pending changes that negate the effects of the changesets that you specify. + +**Required Permissions** + +To use this command, you must have the **Read**, **Check Out**, and **Check In** permissions set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf rollback /toversion:VersionSpec ItemSpec [/recursive] [/lock:none|checkin|checkout] [/version:versionspec] [/keepmergehistory] [/login:username,[password]] [/noprompt] + +  + + tf rollback /changeset:ChangesetFrom~ChangesetTo [ItemSpec] [/recursive] [/lock:none|checkin|checkout] [/version:VersionSpec] + [/keepmergehistory] [/noprompt] [/login:username,[password]] + + +## Parameters + +<table> +<thead> +<tr><th><p><strong>Argument</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><em>ChangesetFrom~ChangesetTo</em></p></td> + <td><p>Use this argument with the <strong>/changeset</strong> option to specify the changesets that you want to roll back. You can specify the changesets in the following ways:</p><ul><li><p>A single changeset</p><p>Example: <strong>/changeset:C11</strong></p></li><li><p>A range of changesets</p><p>Example: <strong>/changeset:C7~C20</strong></p></li><li><p>A date</p><p>Example: <strong>/changeset:D09/30/09</strong></p></li><li><p>A range of dates</p><p>Example:<strong>/changeset:D09/23/09~D10/07/09</strong></p></li><li><p>The most recent changeset</p><p>Example: <strong>/changeset:Tip</strong> or <strong>/changeset:T</strong></p></li></ul></td></tr> +<tr> + <td><p><em>ItemSpec</em></p></td> + <td><p>Use this argument to specify one or more items that you want to roll back. If you are using the <strong>/toversion</strong> option, you must specify this argument.</p><p>For more information about how Team Foundation parses item specifications, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p><div class="alert"><div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"><div class="mtps-row"><strong>Note:</strong></div><div class="mtps-row"> +You can specify more than one <em>Itemspec</em> argument. +</div></div></div></td></tr> +<tr> + <td><p><em>VersionSpec</em></p></td> + <td><p>The user-provided value for both the <strong>/version</strong> option and the <strong>/toversion</strong> option.</p><p>Use this argument with the <strong>/toversion</strong> option to revert a file to its state in a specific changeset. You can specify the version in the following ways:</p><ul><li><p>A single changeset</p><p>Example: <strong>/toversion:C32</strong></p></li><li><p>A date (at midnight)</p><p>Example: <strong>/toversion:D06/19/09</strong></p></li><li><p>A date and a time</p><p>Example: <strong>/toversion:D06/19/09T14:32</strong></p></li><li><p>A label</p><p>Example: <strong>/toversion:LTestLabel</strong></p></li><li><p>The version in the workspace that is mapped to the current directory</p><p>Example: <strong>/toversion:W</strong></p></li><li><p>The version in a specific workspace</p><p>Example: <strong>/toversion:WResolveRIConflicts;AKerry</strong></p></li></ul><p>For more information about how Team Foundation parses versionspecs, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p></td></tr></tbody> +</table> + +<table><tbody> +<tr><th><p><strong>Option</strong></p></th><th><p><strong>Description</strong></p></th></tr> +<tr> + <td><p><strong>/changeset</strong></p></td> + <td><p>Use this option to specify one or more specific changesets that you want to negate.</p></td></tr> +<tr> + <td><p><strong>/keepmergehistory</strong></p></td> + <td><p>This option has an effect only if one or more of the changesets that you are rolling back include a <strong>branch</strong> or <strong>merge</strong> change. Specify this option if you want future merges between the same source and the same target to exclude the changes that you are rolling back.</p></td></tr> +<tr> + <td><p><strong>/lock</strong></p></td> + <td><p>Specify this option to prevent other users from checking in or checking out items until you finish rolling back all associated changes. For more information, see <a href="https://msdn.microsoft.com/en-us/library/ms181419">Understanding Lock Types</a>.</p><p>Lock Options</p><ul><li><p><strong>None</strong></p><p>Default. No lock is applied. If the file that you are rolling back has been locked, this option removes the lock.</p></li><li><p><strong>Checkin</strong></p><p>Locks an item until you release the lock by performing a check-in. Other users can check out the specified items, but the users cannot check in revisions until the lock is removed. You cannot lock a file that is already locked.</p></li><li><p><strong>Checkout</strong></p><p>Prevents users from checking in or out a locked item until you remove the lock by performing a check-in. </p></li></ul></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>For information about this option, see <a href="https://msdn.microsoft.com/en-us/library/4y2ash30">Command-Line Options</a>.</p></td></tr> +<tr> + <td><p><strong>/noprompt</strong></p></td> + <td><p>Suppresses any dialog boxes that would otherwise appear during this operation.</p></td></tr> +<tr> + <td><p><strong>/recursive</strong></p></td> + <td><p>Specify this option if you want the operation to include items in subfolders.</p></td></tr> +<tr> + <td><p><strong>/toversion</strong></p></td> + <td><p>Specify this option to revert a file to its state in a specific changeset. When you use this option, you negate the effect of all changesets that have been applied since the version that you specify.</p></td></tr> +<tr> + <td><p><strong>/version</strong></p></td> + <td><p>Specifies the current version of the files and folders that you want to roll back.</p></td></tr></tbody> +</table> + +## Remarks + +The **tf rollback** command negates the effect of each changeset that you specify for each item that you specify. The following table lists how the operation negates each kind of change. + +|**If you roll back this change…**|**...a rollback change and the following additional change are made**| +|---|---| +|**add**, **branch**, or **undelete**|**delete**| +|**edit**|**edit**| +|**encoding**|**encoding**| +|**rename/move**|**rename/move**| +|**delete**|**undelete**| +|**merge**|Change that negates whatever changes were merged into the current branch.| + +The following list provides some examples of changes that result from the rollback command: + +- If you are rolling back a changeset in which an **add** change occurred, the rollback operation causes a **rollback** change and a **delete** change. + +- If you are rolling back changeset 521 in which an **edit** change occurred, the rollback operation causes a **rollback** change and an **edit** change that negates the changes encompassed by the **edit** change in changeset 521. + +- In changeset 132, you merged from **$/BranchA/File1.txt** to **$/BranchB/File1.txt**. The changes included in that merge included **edit** changes in changesets 92 and 104. In changeset 162, you roll back changeset 132, which results in a **rollback** change and an **edit** change to **$/BranchB/File1.txt** that negates the edit changes in changesets 92 and 104. + +### Exit Codes + +The exit codes in the following table appear after you run the **tf rollback** command. + +|**Exit Code**|**Description**| +|---|---| +|0|The operation rolled back all items successfully.| +|1|The operation rolled back at least one item successfully but could not roll back one or more items.| +|100|The operation could not roll back any items.| + +## Examples +The following example negates the effect of changeset **23** on all items that were changed in that changeset. + + c:\workspace> tf rollback /changeset:C23 + +The following example negates the effect of changeset 23 on the file **a.txt**. + + c:\workspace> tf rollback /changeset:C23 a.txt + +The following example changes the content of **a.txt** to match the version that was checked in with changeset 23. + + c:\workspace> tf rollback /toversion:C23 a.txt + +The following example changes the content of **OurTeamProject** to match the last changeset that was applied on or before midnight on August 31, 2009. + + c:\workspace> tf rollback /toversion:D08/31/2009 /recursive $/OurTeamProject/ +## Example: /keepmergehistory Option +When you roll back a changeset that includes a branch or a merge change, you usually want future merges between the same source and the same target to include those changes. However, you can use the **/keepmergehistory** option if you want future merges between the same source and the same target to exclude changesets that were encompassed in a past merge operation. + +For example, you can use this command in the following situation: + +1. In On June 30, 2009, you perform a full merge of all items from **$/BranchA/** to **$/BranchB/**: + + c:\workspace> tf merge $/BranchA $/BranchB + + You check in this merge as part of changeset 292. + +2. In July, you make several changes **$/BranchA/Util.cs**. These changes are encompassed in changesets 297, 301, and 305. + +3. On August 1, 2009, you merge **$/BranchA/Util.cs** to **$/BranchB/Util.cs**: + + c:\workspace> tf merge $/BranchA/Util.cs $/BranchB/Util.cs + + You check in the change as part of changeset 314. The result of this operation is that the edits that you made in changesets 297, 301, and 305 to **$/BranchA/Util.cs** are now also applied to **$/BranchB/Util.cs**. + +4. A week later, you realize that the edits that you made to **$/BranchA/Util.cs** in July are not appropriate for **$/BranchB/Util.cs**. You can use the rollback command to negate these changes. When you use the rollback command to roll back a **merge** change or a **branch** change, you have a decision to make. + + - If you want the changes that you made in July to **$/BranchA/Util.cs** to be re-applied to **$/BranchB/Util.cs** in future merges, you should type the following command: + + c:\workspace> tf rollback /changeset:314 + + - If you want the changes that you made in July to **$/BranchA/Util.cs** to never be re-applied to **$/BranchB/Util.cs** in future merges, you should type the following command: + + c:\workspace> tf rollback /changeset:314 /keepmergehistory + +5. A few weeks later, you merge **$/BranchA/** into **$/BranchB/**: + + c:\workspace> tf merge $/BranchA $/BranchB + + - If you omitted the **/keepmergehistory** option, the **merge** change will apply to **$/BranchB/Util.cs** all changesets that were applied to **$/BranchA/Util.cs** since changeset 292, including changesets 297, 301, 305. In other words, a future merge will undo the **rollback** change. + + - If you included the **/keepmergehistory** option, the merge operation will apply to **$/BranchB/Util.cs** all changesets that were applied to **$/BranchA/Util.cs** since changeset 292, excluding changesets 297, 301, and 305. In other words, a future merge will not undo the rollback change. Therefore, the content on **BranchA** might not match the content on **BranchB**. + +## See Also + +#### Reference + +[Merge Command](merge-command.md) + +#### Concepts + +[Operations Available Only From the Command-Line (Team Foundation Version Control)](https://msdn.microsoft.com/library/ms194957) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/set-enforce-quality-gates.md b/docs/tfvc/set-enforce-quality-gates.md new file mode 100644 index 00000000000..5967bc91b0e --- /dev/null +++ b/docs/tfvc/set-enforce-quality-gates.md @@ -0,0 +1,57 @@ +--- +title: Set and Enforce Quality Gates +description: Set and Enforce Quality Gates +ms.assetid: bdc5666e-6cf0-45b2-a0a1-133c3f61e852 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Set and Enforce Quality Gates + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Check-in policies are a mechanism for enforcing development practices across your development team. Check-in notes are a communication mechanism for collecting data from team members during the check-in process. Both of these are customizable to meet the needs of a team. This section explains the purpose of these items and also describes how to configure them. + +## Check-in Policies + +Check-in policies are used to enforce mandatory software development practices. Policy is enforced during the check-in process in the Check In and Pending Changes windows. If a user attempts to perform a check-in, in violation of a policy, their check-in is blocked. If necessary, these policies may be overridden. For more information, see [Override a Check-In Policy](https://msdn.microsoft.com/library/ms245460). + +Policies are configured and established in the Source Control Settings window. A sample policy constraint is "You must associate your changes with one or more work items." This policy prevents users from submitting changes without having a specific bug or feature they are working on. + +When policies are violated, they are presented to the user during the source control check-in process in the Check In and Pending Changes window. For more information, see [Using the Check In and Pending Changes Windows](develop-code-manage-pending-changes.md). + +## Check-in Notes + +Check-in notes are used for capturing specific pieces of information during the check-in process by prompting the user for specific data. Check-in notes can be configured and made mandatory in the Source Control Settings window. The information archived in check-in notes can be vital when viewing the details of a [Working with Changesets](find-view-changesets.md). For more information, see [Viewing Historical Data about an Item](view-manage-past-versions.md). + +Check-in notes are presented to the user during the source control check-in process in the Check In and Pending Changes windows. For more information, see [Using the Check In and Pending Changes Windows](develop-code-manage-pending-changes.md). + +## In This Section + +[Add Check-In Policies](add-check-policies.md) +Describes how to create custom check-in policies associated with Team Foundation version control check-ins. + +[Edit Check-In Policies](edit-check-policies.md) +Explains the procedures used to modify a check-in policy. + +[Remove Check-In Policies](remove-check-policies.md) +Describes the steps required to delete a check-in policy. + +[Enable and Disable Check-In Policies](enable-disable-check-policies.md) +Explains the steps used to either enable or disable an existing check-in policy. + +[Configure Check-In Notes](configure-check-notes.md) +Describes the steps used to configure custom check-in notes associated with Team Foundation version control check-ins. + +## See Also + +#### Tasks + +[Check In Pending Changes](https://msdn.microsoft.com/library/ms181411) + +#### Other Resources + +[Viewing Historical Data about an Item](view-manage-past-versions.md) diff --git a/docs/tfvc/set-up-team-foundation-version-control-your-dev-machine.md b/docs/tfvc/set-up-team-foundation-version-control-your-dev-machine.md new file mode 100644 index 00000000000..0ef80dfdeea --- /dev/null +++ b/docs/tfvc/set-up-team-foundation-version-control-your-dev-machine.md @@ -0,0 +1,113 @@ +--- +title: Set up Team Foundation Version Control on your dev machine +description: Set up Team Foundation Version Control on your dev machine +ms.assetid: 15428962-f5fc-4aa4-81dc-7d53a8e3a00c +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Set up Team Foundation Version Control on your dev machine + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +To set up Team Foundation Version Control (TFVC) on your dev machine, you just need to create a workspace and then add your code. + +**Before you start** + +- If you don’t have Visual Studio, [get it here](http://go.microsoft.com/fwlink/p/?LinkId=254509). + +- If you don’t have a team project, [create](../accounts/create-team-project.md) or [get access](https://msdn.microsoft.com/library/jj920206) to one. + +## Create a workspace and get the code + +From Visual Studio, go to the Team Explorer Connect page (Keyboard: Ctrl + 0, C) and then connect to the team project. + +![](_img/set-up-team-foundation-version-control-your-dev-machine/IC750752.png) + +(If the team project you want to open is not listed, choose **Select Team Projects** and then +[connect to the team project](../connect/connect-team-projects.md).) + +Map the team project to a folder on your dev machine. + +![](_img/set-up-team-foundation-version-control-your-dev-machine/IC677199.png) + +Map the workspace and get your code. + +![](_img/set-up-team-foundation-version-control-your-dev-machine/IC696633.png) + +## Work in a “Main” parent folder + +Do you want to prepare for when your team grows large enough to need [branches](use-branches-isolate-risk-team-foundation-version-control.md) to manage your work? Put all your code in a parent called Main (for example: `$/MyTeamProject/Main/`). + +1. Go to the Team Explorer Home page (Keyboard: Ctrl + 0, H), and then open **Source Control Explorer**. + +2. In **Source Control Explorer**, select your team project in the left pane. + +3. On the menu bar choose **File**, **Source Control**, **New Folder**. + + ![](_img/set-up-team-foundation-version-control-your-dev-machine/IC675823.png) + + Name the folder. + + Open the context menu of the `Main` folder and choose **Check in**. + +4. Check in the new folder. + + ![](_img/set-up-team-foundation-version-control-your-dev-machine/IC696634.png) + + Your changeset is checked in. + + ![](_img/set-up-team-foundation-version-control-your-dev-machine/IC675825.png) + +When your team decides to branch the codebase, you can convert the Main folder to a branch. See [Branch folders and files](branch-folders-files.md). + +## Add your code to version control + +### Create a new solution under version control + +If you've got an idea for a new app, you can use version control from the start. Create a new code project (Keyboard: Ctrl + Shift + N), and add it to TFVC version control: + +![](_img/set-up-team-foundation-version-control-your-dev-machine/IC696635.png) +>**Tip:** +We suggest that you put your new project in **c:\Users\***YourName***\Source\Workspaces\**. + +When the **Choose Source Control** dialog box appears, choose **Team Foundation Version Control**. + +When you are ready, [check in your changes](check-your-work-team-codebase.md) (Keyboard: Ctrl + 0, P). + +### Put an existing solution under version control + +You’ve already got an app in progress and you want to begin working on it under TFVC version control. + +1. Move your solution into your workspace folder (for example: **c:\\Users\\YourName\\Source\\Workspaces\\YourTeamProject\\Main\\**). + +2. If you have not already done so, open your solution, (Keyboard: Ctrl + Shift + O) and then open Solution Explorer (Keyboard: Ctrl + Alt + L). + +3. Add your solution to source control. + + ![](_img/set-up-team-foundation-version-control-your-dev-machine/IC675409.png) + +4. On the **Choose Source Control** dialog box, choose **Team Foundation Version Control**. + +5. When you are ready, [check in your changes](check-your-work-team-codebase.md) (Keyboard: Ctrl + 0,P). + +## Q & A + +- **Q: I’m really new to all this; can I get more help?** + + **A:** Yes, [let us walk you step by step to get started](share-your-code-in-tfvc-vs.md). + +- **Q: Is your folder structure complex or do you use branches?** + + **A:** If so, you can [create one or more workspaces](create-work-workspaces.md) and then [optimize them to meet your needs](optimize-your-workspace.md). + +## Try this next + + [Set up a CI build](../build-release/concepts/definitions/build/triggers.md) + +## Dig deeper + + [Develop your app in Team Foundation version control](develop-your-app-team-foundation-version-control.md) diff --git a/docs/tfvc/share-your-code-in-tfvc-eclipse.md b/docs/tfvc/share-your-code-in-tfvc-eclipse.md new file mode 100644 index 00000000000..50e91b5997b --- /dev/null +++ b/docs/tfvc/share-your-code-in-tfvc-eclipse.md @@ -0,0 +1,51 @@ +--- +title: Share your code in TFVC using Eclipse | Visual Studio Team Services +description: Share code in TFVC using Eclipse +ms.assetid: 181CB50F-44D3-4BA4-8E89-ADB9CB87DEB6 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.topic: get-started-article +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Share your code in TFVC using Eclipse + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Share your code with your team with VSTS and Eclipse. + +[!INCLUDE [include](_shared/connect-eclipse-to-vso.md)] + +If your team project uses TFVC in your VSTS account, read on. However, if your team project uses Git in your VSTS account,then read [Share your code in Git using Eclipse](../git/share-your-code-in-git-eclipse.md) + +<a name="tfvc"></a> +## Share using TFVC + +1. If you haven't yet, [Connect to VSTS using Eclipse](../connect/connect-team-projects.md). + +2. In Package Explorer, right-click the project and choose Team, Share Project. + + ![In the Package Explorer, the project's context menu, Team, Share Project](./_shared/_img/share-project.png) + +3. Make sure you share it to Team Foundation Server. + + ![Share Project dialog box with tfvc selected](./_img/share-your-code-in-tfvc-eclipse/share-project-tfvc.png) + +4. Select the server and team project. + + ![Select Team Project](../_shared/_img/add-existing-team-project.png) + +5. Check in the files. + + ![Check in pending changes](./_img/share-your-code-in-tfvc-eclipse/checkin-changes-tfvc.png) + +Your code is in TFVC, so now your teammates can contribute. + +## Next steps + +> [!div class="nextstepaction"] +> [Build your Eclipse projects](../build-release/apps/java/build-maven.md) + + diff --git a/docs/tfvc/share-your-code-in-tfvc-vs.md b/docs/tfvc/share-your-code-in-tfvc-vs.md new file mode 100644 index 00000000000..ad582b768e4 --- /dev/null +++ b/docs/tfvc/share-your-code-in-tfvc-vs.md @@ -0,0 +1,171 @@ +--- +title: Develop and share your code in TFVC using Visual Studio | Visual Studio Team Services +description: Share code in Team Foundation Version Control using Visual Studio +ms.assetid: 108544c0-c29e-4b3b-9a39-4573cf4a71dc +toc: show +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.topic: get-started-article +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Develop and share your code in TFVC using Visual Studio + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Whether your software project is large, small, or brand new, +in most cases you'll be better off if you use version control +as early as possible. +Here, we'll show you how to get started with +Team Foundation Version Control (TFVC), a centralized system. +If you want to work in a distributed system, +you can instead use [Git with Visual Studio Team Services](../git/share-your-code-in-git-vs.md). + +Is your code in another place? [Learn how to migrate it here](#migrate). + +[!INCLUDE [open-team-project-in-vs](_shared/open-team-project-in-vs.md)] + +<a name="workspace"></a> +## Configure your workspace + +0. In Visual Studio, configure your workspace. + + ![On Team Explorer home page, click Configure Workspace](_img/share-your-code-in-tfvc-vs/ConfigureWorkspace.png) + + [I don't see the Configure Workspace link. What do I do next?](#workspace_exists) + +0. Confirm your workspace path, map your workspace, and get the source. + + ![On Team Explorer home page, click Map and get](_img/share-your-code-in-tfvc-vs/MapAndGet.png) + +0. Now you can check in source, queue builds, and manage work. + + ![Visual Studio is now connected to your team project](_img/share-your-code-in-tfvc-vs/MapWorkspaceSuccess.png) + +## Create a new app + +If you already have an app that you want to add to version control, +skip down to [Add an existing app](#app_add). + +![New solution from team explorer](_img/share-your-code-in-tfvc-vs/team-explorer-new-solution.png) + +Now that you've added your app, you can skip down to +[snapshot your code](#snapshot). + +<a name="app_add"></a> +## Add an existing app + +### Move and open the solution + +0. Close the solution. + +0. Open the workspace folder that you created when you [configured your workspace](#workspace). + + ![Open the workspace folder from source control explorer](_img/share-your-code-in-tfvc-vs/open-workspace-folder-from-source-control-explorer.png) + +0. Move the code you want to upload to the workspace folder. + + ![Move your source code to your workspace folder](_img/share-your-code-in-tfvc-vs/IC689415.png) + +0. Open your solution in Visual Studio. + + ![Open your solution in Visual Studio](_img/share-your-code-in-tfvc-vs/open-solution-from-team-explorer-home.png) + + +### Add the solution to Visual Studio Team Services + +0. Open the solution explorer (Keyboard: Ctrl + Alt + L). + +0. Add your solution to version control. + + ![Add the solution to Visual Studio Team Services](_img/share-your-code-in-tfvc-vs/IC682953.png) + +0. Check in the solution. + + ![Check in your solution](_img/share-your-code-in-tfvc-vs/IC682954.png) + +0. Add a comment and check in. + + ![Add a comment and check in pending changes](_img/share-your-code-in-tfvc-vs/IC685248.png) + +0. Open the source control explorer. + + ![Open the source control explorer](_img/share-your-code-in-tfvc-vs/IC682140.png) + + Your solution is now in TFS. + + ![Your solution in the source control explorer](_img/share-your-code-in-tfvc-vs/IC689416.png) + +Your whole team can work on the code now. All your changes are tracked in version control. + +<a name="snapshot"></a> +## Snapshot (check in) your code + +0. When you edit code in Visual Studio, the changed file is automatically checked out. For example, Site.css is checked out after the border color has been changed to #ddd. + + ![Checked out file in the team explorer](_img/share-your-code-in-tfvc-vs/IC682155.png) + +0. Compare the modified file with the latest version in source control. + + ![Compare in the solution explorer's context menu](_img/share-your-code-in-tfvc-vs/IC682955.png) + + You can see the difference between the two versions. + + ![Compare window](_img/share-your-code-in-tfvc-vs/IC682157.png) + +0. Check in the changes. + + ![Check in from the context menu in the solution explorer](_img/share-your-code-in-tfvc-vs/IC682956.png) + + You can also check in from the code window, or the team explorer. + +0. If you're working on a task or fixing a bug that's tracked as a work item, add that work item to your pending changes. Source control will resolve the bug or close the task, and it'll link the changeset to the work item. + + ![Related work items in pending changes](_img/share-your-code-in-tfvc-vs/IC682159.png) + +0. Add a comment and check in. + + ![Source control explorer, source file context menu, check in](_img/share-your-code-in-tfvc-vs/IC685249.png) + +0. Open the source control explorer. + + ![Source control explorer in the team explorer home page](_img/share-your-code-in-tfvc-vs/IC682161.png) + +0. View the history of the file you changed. + + ![Source control explorer, source file context menu, view history](_img/share-your-code-in-tfvc-vs/IC682957.png) + + All the changesets that include this file are listed. + + ![History window](_img/share-your-code-in-tfvc-vs/IC682163.png) + +## Troubleshooting + +* [My code is somewhere else. Can I migrate it to my TFVC project on Visual Studio Team Services?](#my-code-is-somewhere-else-can-i-migrate-it-to-my-tfvc-project-on-visual-studio-team-services) +* [I don't see the Configure Workspace link shown in the steps above. What do I do next?](#i-dont-see-the-configure-workspace-link-shown-in-the-steps-above-what-do-i-do-next) + +<a name="migrate"></a> +### My code is somewhere else. Can I migrate it to my TFVC project on VSTS? + +Yes: + + * [Upgrade From Visual SourceSafe](http://msdn.microsoft.com/library/ms253060). + + * [Migrate from Team Foundation Server into Visual Studio Team Services](../migrate-to-vsts-from-tfs.md). + +<a name="workspace_exists"></a> +### I don't see the Configure Workspace link shown in the steps above. What do I do next? + +You might already have a workspace on your computer. To see your workspace, open Source +Control Explorer. Or change your workspace. Find out how to [manage files under +source control](http://msdn.microsoft.com/library/ms181370.aspx) or +[manage workspaces](http://msdn.microsoft.com/library/ms181383.aspx). + +![In Team Explorer, click Source Control Explorer or Manage Workspaces](_img/share-your-code-in-tfvc-vs/OpenSCE_ManageWorkspaces.png) + +## Next steps + +> [!div class="nextstepaction"] +> [Get your code reviewed](get-code-reviewed-vs.md) diff --git a/docs/tfvc/share-your-code-in-tfvc-xcode.md b/docs/tfvc/share-your-code-in-tfvc-xcode.md new file mode 100644 index 00000000000..da7d78a4610 --- /dev/null +++ b/docs/tfvc/share-your-code-in-tfvc-xcode.md @@ -0,0 +1,108 @@ +--- +title: Share your code in TFVC using Xcode | Visual Studio Team Services +description: Share code in TFVC using Xcode +ms.assetid: 582BE341-2026-4C83-8F2B-552A37561DBB +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.topic: get-started-article +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Share your code in TFVC using Xcode + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Share your Xcode projects in VSTS using a TFVC repository by using the Git-tf command line tool to push your changes from the local Git repotory to TFVC. + +## Download and configure Git-tf + +1. Download and extract [Git-tf](http://go.microsoft.com/fwlink/p/?LinkId=261658). + +2. Add Git-tf and the Java runtime to your path. + + ``` + export JAVA_HOME=/Library/Java/Home + export PATH=$PATH:$JAVA_HOME/bin:/git_tf + ``` + +3. Go to the root of your local repository. + + ``` + pushd /ws/FabrikamFiber + ``` + +4. To share your Git repository in Visual Studio Team Services, configure the connection and check in your code. You'll be prompted for credentials. + + ``` + git tf configure https://fabrikamfiber.visualstudio.com $/FabrikamFiber + git tf checkin + ``` + + Or, if your team's code is already in Visual Studio Team Services, you can clone a local repository using Git-tf. + + ``` + git tf clone https://fabrikamfiber.visualstudio.com $/FabrikamFiber + ``` + +5. If you don't want to be prompted for credentials every time you run Git-tf, you can store your credentials in your Git configuration. + + ``` + git config git-tf.server.username fabrikamfiber4@hotmail.com + git config git-tf.server.password mypassword + ``` + +## Share your code + + +1. After you commit changes to your local Git repository, and you're ready to share them in Visual Studio Team Services, check them in. + + ``` + git commit -a + git tf checkin + ``` + + If you've committed multiple changes locally, you'll still get just one changeset in VSTS. + +2. Resolve a bug or close a task when you check in by providing the work item ID with the resolve flag. + + ``` + git tf checkin --resolve=21972 + ``` + + The changeset and the work item are linked, and you'll be able to see which bugs are resolved and which tasks were completed in the build reports. + +3. You can make sure you're working with your team's latest code by pulling from VSTS. + + ``` + git tf pull + ``` + + Use git tf help to learn about the Git-tf commands. + + ![git tf help](./_img/share-your-code-in-tfvc-xcode/git-tf-help.png) + ![git tf help checkin](./_img/share-your-code-in-tfvc-xcode/git-tf-help-checkin.png) + + + +## Additional information + +* [Should I use Git or TFVC for my team project?](#should-i-use-git-or-tfvc-for-my-team-project) +* [If my team project uses Git Version control, can I still share my Xcode projects in Visual Studio Team Services?](#if-my-team-project-uses-git-version-control-can-i-still-share-my-xcode-projects-in-visual-studio-team-services) + +### Should I use Git or TFVC for my team project? + +That depends on a number of factors, like the size of your codebase and the size and distribution of your team. +Learn which version control ([Git](../git/overview.md) or [Team Foundation Version Control](overview.md)) +works best for you. + +### If my team project uses Git Version control, can I still share my Xcode projects in Visual Studio Team Services? + +Yes, see [Share your code in Git using Xcode](../git/share-your-code-in-git-xcode.md). + +## Next steps + +> [!div class="nextstepaction"] +> [Choosing the right version control for your project](comparison-git-tfvc.md) + diff --git a/docs/tfvc/shelve-command.md b/docs/tfvc/shelve-command.md new file mode 100644 index 00000000000..495f43e2972 --- /dev/null +++ b/docs/tfvc/shelve-command.md @@ -0,0 +1,118 @@ +--- +title: Shelve Command +description: Shelve Command +ms.assetid: f6b9e3c8-9a5a-4ebb-9823-d3a430ca08de +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Shelve Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Stores a set of pending changes, together with pending check-in notes, a comment, and a list of associated work items on the server that is running Visual Studio Team Foundation Server without actually checking them into the version control server. + +**Required Permissions** + +If you want to use the **shelve** command to delete a shelveset, you must be a shelveset owner, or your **Administer shelved changes** permission must be set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf shelve [/replace] [/comment:("comment"|@commentfile)] [shelvesetname] [/validate][/noprompt] [/login:username,[password]] + + tf shelve [/move] [/replace] [/comment:("comment"|@commentfile)] + [/recursive] [shelvesetname] itemspec [/validate] [/noprompt] [/login:username,[password]] + + tf shelve /delete shelvesetname[;owner] [/login:username,[password]] [/collection:TeamProjectCollectionUrl] + +## Parameters + +| **Argument** | **Description** | +|---|---| +| *commentfile* | Specifies a file system path of a file from which comments for the shelveset should be read. | +| *comment* | Specifies the comment for the shelveset. | +| *itemspec* | Identifies the files or folders to shelve. By default, all pending changes in the current workspace are shelved if this parameter is not specified. For more information about how Team Foundation parses itemspecs to determine which items are within scope, see [Command-Line Options](https://msdn.microsoft.com/library/4y2ash30). | +| *shelvesetname* | Specifies a name by which the shelveset can be retrieved from the Team Foundation server. You can specify an existing combination of *shelvesetname *and *owner *but only if **/replace** is also specified.<br /><br />You must provide a value for this parameter. | +| *owner* | Identifies the current or intended owner of the shelveset by user name. By default, the current user is assigned ownership of the shelveset if one is not specified. | +| *username* | Provides a value to the **/login** option. You can specify a username value as either *DOMAIN*\*UserName* or *UserName*. | +| *TeamProjectCollectionUrl* | The URL of the team project collection that contains the files or folders that you want to shelve (for example, http://myserver:8080/tfs/DefaultCollection/). | + +| **Option** | **Description** | +|---|---| +| **/move** | Removes pending changes from the workspace after the shelve operation is successful. | +| **/replace** | Replaces the existing shelveset with the same name and owner as the one that you specify. | +| **/delete** | Deletes the specified shelveset. Only the **/server** option may be combined with this option. If you do not include the **/noprompt** option, a confirmation message appears when the **/delete** option is specified. | +| **/comment** | Adds a specified comment describing the shelved changes. | +| **/recursive** | Shelves all items in the specified shelveset folder, its subfolders and all items therein if the itemspec you provide is a folder. | +| **/noprompt** | Suppresses any prompts for input from you. | +| **/validate** | Only valid when not combined with **/noprompt**.<br /><br />This option selects the validation check box in the **Shelve - Source Files **dialog box when it opens. When the validation check box is selected, the dialog box will evaluate the check-in policies and verify that require check-in notes have been filled in. This option is useful when the changes are being handed off for review and check-in by someone else. | +| **/login** | Specifies the user name and password to authenticate the user with Team Foundation Server. | +| **/collection** | Specifies the team project collection. | + + +## Remarks + +The **shelve** command of the **tf** command-line utility backs up pending changes, a list of associated work items, in-progress check-in notes, and comments in a shelveset on the Team Foundation Server. A *shelveset *is much like a changeset that is not committed to the server. Like a changeset, a shelveset can be retrieved from the server into a local workspace by any user who has sufficient permissions. + +Shelving is an alternative to checking in pending changes that have not been tested sufficiently. Use shelving when you want to interrupt you work: + +- Share a set of local working files together with another developer or tester without checking in your changes to the version control server. + +- Set aside a group of pending changes temporarily without checking them in so that you can instead work on a higher priority issue. After you complete work on the high priority task, you can restore your shelved changes using the [Unshelve Command](unshelve-command.md). + +If you include the **/move** option, the **shelve** command rolls back all shelved file revisions to their *base workspace versions* that is the last version retrieved from the server to the current workspace. Specifically, the **/move** option makes sure that for all the items that you shelve: + +- Uses **Undo** to undo the changes that were shelved. The files that were pending additions are deleted from the workspace. + +- The base workspace versions of all files for which pending editions exist are retrieved from the server into the current workspace. + +- All items in the current workspace are marked read-only. + +If you include the **/delete** option, Team Foundation permanently removes the specified shelveset from the Team Foundation server. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +## Examples + +The following example creates a new shelveset on the Team Foundation Server called Reflector\_BuddyTest, assigns ownership to the user Hans, then returns all items in the current workspace to the latest version downloaded during the last **get** operation, and a sets a read-only state. + + c:\projects> tf shelve Reflector_BuddyTest;Hans /move + +The following example deletes the existing shelveset, "new-feature" from the server, creates a new shelveset by that name, and retains all pending changes in the current workspace. + + c:\projects> tf shelve new-feature /replace + +The following example creates a shelveset named HelloWorld\_TestMe that includes all pending changes to all .cs files in the C:\\projects working folder and its subfolders. + + c:\projects> tf shelve HelloWorld_TestMe c:\projects\*.cs /recursive + +The following example deletes the HelloWorld\_24 shelveset. + + c:\projects> tf shelve HelloWorld_24 /delete + +## See Also + +#### Tasks + +[Shelve and Unshelve Pending Changes](https://msdn.microsoft.com/library/ms181404) + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Checkin Command](checkin-command.md) + +[Changeset Command](changeset-command.md) + +[Unshelve Command](unshelve-command.md) + +#### Concepts + +[Working with Shelvesets](suspend-your-work-manage-your-shelvesets.md) + +[Pending Changes](https://msdn.microsoft.com/library/ms181409) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/shelvesets-command.md b/docs/tfvc/shelvesets-command.md new file mode 100644 index 00000000000..c354da8b180 --- /dev/null +++ b/docs/tfvc/shelvesets-command.md @@ -0,0 +1,81 @@ +--- +title: Shelvesets Command +description: Shelvesets Command +ms.assetid: 731a4339-1ba7-45ab-a551-51c3f4ae158c +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Shelvesets Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays information about a set of shelved changes. + +**Required Permissions** + +To use the **shelvesets** command, you must the have **Read** permission and the **Check out** permission set to **Allow** for the items in the shelvesets. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf shelvesets [/owner:ownername] [/format:(brief|detailed)] [/collection:TeamProjectCollectionUrl]] [/login:username,[password]] shelvesetname +## Parameters<table> +|**Argument**|**Description**| +|---|---| +|*ownername*|Provides a value such as * or DOMAIN\john to the **/owner** option.| +|*shelvesetname*|The name of the shelveset.| +|*TeamProjectCollectionUrl*|The URL of the team project collection that contains a set of shelved changes about which you want to display information (for example, http://myserver:8080/tfs/DefaultCollection).| +|*username*|Provides a value to the **/login** option. You can specify a username value as either *DOMAIN*\*UserName* or *UserName*.| + +|**Option**|**Description**| +|---|---| +|**/owner**|Specifies one or more shelveset owners. You can use wildcard characters.| +|**/format**|Specifies what kind of format to display shelveset information in.<br /><br />**Brief** displays the shelveset name, the name of the user who created it, and a shelveset comment, if one exists. **Detailed** displays the shelveset name, owner, and comment in addition to a list of associated work items and any check-in notes. **Brief** is the default value.| +|**/collection**|Specifies the team project collection.| +|**/login**|Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.| + +## Remarks +Shelvesets are created by the **shelve** command. Shelvesets are stored on the Team Foundation Server and can be retrieved into a workspace by any user who has sufficient permissions using the [Unshelve Command](unshelve-command.md). Unlike a changeset, a shelveset is a non-versioned entity. If you or another user unshelve the items of which a shelveset consists, edit several files, and re-shelve the shelveset, Team Foundation does not create a new version of the items for future comparison and maintains no record of who revised the items, when, or in what manner. For more information about deciding whether to shelve or check in a set of pending changes and a general overview of shelving, see [Working with Shelvesets](suspend-your-work-manage-your-shelvesets.md). + +For detailed information about the individual source file revisions of which a particular shelveset consists, you can use the [Status Command](status-command.md) with the **/shelveset** option. + +You can compare a shelved revision to its base shelveset version without unshelving the item into your workspace. You can use this feature to conduct a quick peer code review. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### Examples + +The following example displays information about the BuddyTest\_23 shelveset for the Team Foundation Server to which the current directory maps. + + c:\projects>tf shelvesets BuddyTest_23 + +The following example lists the shelvesets owned by "John." + + c:\projects>tf shelvesets /owner:John + +The following example displays information about the shelvesets on the Team Foundation Server to which the current directory maps. + + c:\projects>tf shelvesets /owner:* + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Status Command](status-command.md) + +[Changeset Command](changeset-command.md) + +[Shelve Command](shelve-command.md) + +[Unshelve Command](unshelve-command.md) + +#### Concepts + +[Working with Shelvesets](suspend-your-work-manage-your-shelvesets.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/status-command.md b/docs/tfvc/status-command.md new file mode 100644 index 00000000000..12f536bbcea --- /dev/null +++ b/docs/tfvc/status-command.md @@ -0,0 +1,104 @@ +--- +title: Status command +description: Status command +ms.assetid: e9f0b3a1-b8b1-45cf-b113-9fea2948405d +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Status command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays information about pending changes to files and folders in one or more workspaces. Or, when you use the **/shelveset** option, displays information about pending changes in a shelveset. + +**Requirements:** See [Permissions and groups reference](../security/permissions.md). + + tf stat[us] itemspec [/collection:TeamProjectCollectionUrl] + [/login:username,[password]] + ([/workspace:workspacename[;workspaceowner]] + | [/shelveset:shelvesetname[;shelvesetowner]]) + [/format:(brief|detailed)] [/recursive][/user:(*|username)] + [/nodetect] + +## Parameters + + +<table><thead> +<tr><th><p><strong>Argument</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><strong>/collection</strong>: <em>TeamProjectCollectionUrl</em></p></td> + <td><p>When you use the <strong>/workspace</strong> option, specifies the URL of the team project collection that contains the workspace that contains the pending changes. For example: http://myserver:8080/tfs/DefaultCollection. If not specified, by default the team project collection is presumed to be the one that contains the workspace that maps the current directory.</p><p>Ignored if you do not use the <strong>/workspace</strong> option.</p><table><thead> +<tr><th><strong>Note</strong></th></tr></thead><tbody> +<tr> + <td><p>See Remarks, below, for the limitations of this option.</p></td></tr></tbody></table></td></tr> +<tr> + <td><p><strong>/format</strong></p></td> + <td><p>Specifies how much detail to display about each pending change:</p><ul><li><p><strong>Brief</strong> (default): Displays one line about each pending change that includes: file name, changes, whether the item is locked (indicated by an asterisk (<strong></strong>*) symbol), local path, and user (if using the <strong>/collection</strong> and <strong>/workspace</strong> options). Some of the data might be truncated.</p></li><li><p><strong>Detailed</strong>: Displays a full description of each pending change. In addition to the above information, this option displays additional data such as date and time, and lock.</p></li></ul></td></tr> +<tr> + <td><p><em>itemspec</em></p></td> + <td><p>Specifies the items for which you want pending change data. For syntax, see <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>. You can specify more than one <em>itemspec</em> argument.</p></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>Specifies the user account to use to run the command. See <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td></tr> +<tr> + <td><p><strong>/recursive</strong></p></td> + <td><p>Recursively retrieves data about pending changes to items in the specified directory and any subdirectories.</p></td></tr> +<tr> + <td><p><strong>/shelveset</strong>:<em>shelvesetname</em>[;<em>shelvesetowner</em>]</p></td> + <td><p>Specifies the shelveset that contains the changes you want to list.</p><p>This option cannot be combined with the <strong>/workspace</strong> option.</p></td></tr> +<tr> + <td><p><strong>/user</strong></p></td> + <td><p>Lists all pending changes made by the specified user. An asterisk (<strong></strong>*) symbol includes data about changes from all users. The default is the current user.</p><table><thead> +<tr><th><strong>Note</strong></th></tr></thead><tbody> +<tr> + <td><p>See Remarks, below, for the limitations of this option.</p></td></tr></tbody></table></td></tr> +<tr> + <td><p><strong>/workspace</strong> <em>workspacename</em>[;<em>workspaceowner</em>]</p></td> + <td><p>Specifies the name of the workspace that contains the pending changes. If not specified, the workspace is the one that maps the current directory.</p><p>You can specify <em>workspaceowner</em> to get data about pending changes in a workspace that belongs to a specific user. If not specified, the workspace is presumed to be the current user, or if specified, the <strong>/login:</strong><em>username</em>.</p><p>This option cannot be combined with the <strong>/shelveset</strong> option.</p><table><thead> +<tr><th><strong>Note</strong></th></tr></thead><tbody> +<tr> + <td><p>See Remarks, below, for the limitations of this option.</p></td></tr></tbody></table></td></tr></tbody> +</table> + +## Remarks + +You can use the **Status** command to view pending changes in the current workspace (for example, the workspace that maps the current directory in the command prompt window) regardless of whether it is a local workspace or a server workspace. You can also use this command to view pending changes in a remote server workspace (for example, changes made by another user on another dev machine) by using the **/collection**, **/user**, and **/workspace** options. However, you cannot view pending changes in a remote local workspace. + +Also see: [Decide between using a local or a server workspace](decide-between-using-local-server-workspace.md). + +## Examples + +In all the following examples, assume that `$/SiteApp/Main/` is mapped to `c:\\code\\SiteApp\\Main\\` in the workspace. + +### List all changes in the current workspace + + c:\code\SiteApp\Main\SolutionA\>tf stat + +Lists all pending changes in the workspace. + +### List all changes in a folder + + c:\code\SiteApp\Main>tf stat SolutionA\* + +Lists all pending changes to all items in the SolutionA folder. + +### List all changes in a folder and its subfolders + + c:\code\SiteApp\Main>tf stat SolutionA\* /recursive + +Lists pending changes to all items in the SolutionA folder, including those in its subfolders). + +## Work in Visual Studio + +- [Develop code and manage pending changes](develop-code-manage-pending-changes.md) Use Visual Studio to view and manage pending changes. + +## Tips + +- Most changes you make to files under version control are queued as pending changes in your workspace. See [Develop code and manage pending changes](develop-code-manage-pending-changes.md) and [Create and work with workspaces](create-work-workspaces.md). +- You can use the [Difference Command](difference-command.md) to get details about edit changes (changes to the content) in a file. +- If you need to set aside changes (and perhaps also want to clean your workspace for another task), use the [Shelve Command](shelve-command.md). For more information about shelvesets, see [Suspend your work and manage your shelvesets](suspend-your-work-manage-your-shelvesets.md). +- When you are ready to check in changes to the server, use the [Checkin command](checkin-command.md). diff --git a/docs/tfvc/suspend-your-work-manage-your-shelvesets.md b/docs/tfvc/suspend-your-work-manage-your-shelvesets.md new file mode 100644 index 00000000000..8256efe7300 --- /dev/null +++ b/docs/tfvc/suspend-your-work-manage-your-shelvesets.md @@ -0,0 +1,143 @@ +--- +title: Suspend your work and manage your shelvesets +description: Suspend your work and manage your shelvesets +ms.assetid: 91b026a7-a590-45d1-81cf-97dfa7acba1d +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Suspend your work and manage your shelvesets + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +For a variety of reasons, sometimes you need to set aside some or all of your work in progress. Shelvesets are useful when you want to stop work for: + +- **Interruption:** You have pending changes that are not ready for check in, but you need to work on a different task. + +- **Collaboration:** You have pending changes that are not ready for check in but you need to share them with another team member. + +- **Code Review:** You want another team member to perform a code review of your pending changes. + + >**Tip:** + >If you are using Visual Studio Premium or a more powerful edition, you can use the [Code Review](day-life-alm-developer-write-new-code-user-story.md) feature. + +- **Private Build:** Before you check in your changes, you can use your automated build system to build and test your code. + +- **Backup:** You have work in progress that you cannot finish now so you want a backup copy that is stored on your server and available to other team members who might need to access it. + +- **Handoff:** You have work in progress that you want to hand off to another team member. + +You can move your [pending changes](develop-code-manage-pending-changes.md) to a shelveset on the server and then clean your [workspace](create-work-workspaces.md). The shelveset saves and stores not only your file revisions, but also the Comment, the list of Related Work Items, and check-in notes (if you evaluate policies before shelving). + +**Required permissions** + +You must be one of the **Contributors** for your team project. See [Team Foundation Server default groups, permissions, and roles](https://msdn.microsoft.com/library/ms253077). + +## Suspend and resume your work from the My Work page + +>**Note:** +>The My Work feature is available only in Visual Studio Premium and Visual Studio Ultimate. + + +From the **My Work** page you can save and then restore not only your file changes and related work items, but also the position of your open windows, breakpoints, and other important cues. + +In Team Explorer, choose ![](_img/suspend-your-work-manage-your-shelvesets/IC547418.png) **Home**, and then choose **My Work**. On the **My Work** page, choose **Suspend & Shelve**, and then type a description of the suspended work. + +![](_img/suspend-your-work-manage-your-shelvesets/IC592393.png) + +When you are ready to resume the work, go the **Suspended & Shelved Work** section of the **My Work** page, select a set of suspended work, and choose **Resume**. + +![](_img/suspend-your-work-manage-your-shelvesets/IC591026.png) + +## Shelve your changes + +>**Tip:** +In either Solution Explorer or Source Control Explorer, you can shelve a specific subset of the files that you are working with: select them, open their context menu, and then choose **Shelve Pending Changes**. The **Pending Changes** page appears, ready to shelve only the files you selected. + +### To shelve your changes + +1. In Team Explorer, choose ![](_img/suspend-your-work-manage-your-shelvesets/IC547418.png) **Home**, and then choose **Pending Changes**. + +2. In the **Pending Changes** page, make sure that the changes you want to shelve are listed in the **Included Changes** section. You can drag files between **Included Changes** and **Excluded Changes** (Keyboard shortcut: open the context menu of an item, and then choose **Include** or **Exclude**. + +3. Choose the **Shelve** link. + +4. Type a name for the shelveset. + + ![](_img/suspend-your-work-manage-your-shelvesets/IC612901.png) + +5. (Optional) Select either of the following check boxes: + + - **Preserve pending change locally** + + By default, this check box is selected. When this check box is selected, your pending changes (including the comment and the Related Work Items list) are not removed from your workspace. If you want to clean your workspace to work on another task, you should clear this check box. + + - **Evaluate Policies and check-in notes before shelving** + + When you select this check box, all check-in policies are evaluated before the shelveset is created. For more information about check-in policies, see [Set and Enforce Quality Gates](set-enforce-quality-gates.md). + +6. Choose the **Shelve** button. + +## Find a shelveset + +### To find a shelveset + +1. In Team Explorer, choose ![](_img/suspend-your-work-manage-your-shelvesets/IC547418.png) **Home**, and then choose **Pending Changes**. + +2. Choose the **Actions** link, and then choose **Find Shelvesets**. + +3. On the **Find Shelvesets** page, enter the name or alias of a team project team member in the box, and then choose the **Enter** key. + + ![](_img/suspend-your-work-manage-your-shelvesets/IC612902.png) + + >**Tip:** + >If you don’t know the name of the owner, you can type ***** to list shelvesets for all users. + +4. A list of shelvesets appears in the **Results** list. You can type a filter to reduce the size of the list. + +## View and work with a shelveset + +After you have a list of shelvesets (explained in “To find a shelveset”) in the **Find Shelvesets** page, double-click the shelveset to view it. + +The **Shelveset Details** page appears. + +![](_img/suspend-your-work-manage-your-shelvesets/IC612903.png) +- You can toggle between list and tree view from the **Actions** menu. + +- To get more information about a change to a file, open its context menu, and then choose **Open**, **View History**, or one of the **Compare** options. + +- Choose **Unshelve Changes** if you want to retrieve the changes in the shelveset into your workspace: + + 1. For any file changes that you do not want to unshelve, open the context menu of the file, and then choose **Exclude**. + + 2. If you want to delete the shelveset, clear the **Preserve shelveset on server** check box. + + 3. If you do not want to restore the work item list and check-in notes that are stored in the shelveset clear the **Restore work items and check-in notes** check box. + + 4. Choose the **Unshelve** button. + + If there are conflicts between changes in the shelveset and the file versions in your workspace, the system will prompt you to [resolve them](resolve-team-foundation-version-control-conflicts.md). + +- Choose **Delete Shelveset** if you want to delete the shelveset. + + >**Caution:** + >Be sure you do not need any of the work stored in a shelveset before you delete it. There is no way to recover a deleted shelveset. + +## Work from the command prompt + +- [Shelve Command](shelve-command.md) : Create or delete a shelveset. + +- [Shelvesets Command](shelvesets-command.md) : List shelvesets. + +- [Unshelve Command](unshelve-command.md) : Unshelve a shelveset. + +- [Difference Command](difference-command.md) : Compare the changes to a file in a shelveset with another version. + +## Tips + +- ![](_img/suspend-your-work-manage-your-shelvesets/IC572374.png) Unlike a changeset, a shelveset is a non-versioned entity. If you or another user unshelve the items of which a shelveset consists, edit several files, and then later reshelve the shelveset, the system does not create a new version of the items for future comparison and maintains no record of who revised the items, when, or in what manner. The original shelveset is completely replaced. + +- ![](_img/suspend-your-work-manage-your-shelvesets/IC572374.png) Conflicts can occur and prevent you from resuming suspended work. If this happens, see [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md). diff --git a/docs/tfvc/team-projects.md b/docs/tfvc/team-projects.md new file mode 100644 index 00000000000..e6b9144f08c --- /dev/null +++ b/docs/tfvc/team-projects.md @@ -0,0 +1,3 @@ +--- +redirect_url: /docs/git/team-projects +--- \ No newline at end of file diff --git a/docs/tfvc/toc.yml b/docs/tfvc/toc.yml new file mode 100644 index 00000000000..485640bf2e8 --- /dev/null +++ b/docs/tfvc/toc.yml @@ -0,0 +1,196 @@ +- name: TFVC + href: index.md +- name: Overview + items: + - name: Learn about TFVC + href: overview.md +- name: Quickstarts + items: + - name: Visual Studio + href: share-your-code-in-tfvc-vs.md + - name: Eclipse + href: share-your-code-in-tfvc-eclipse.md + - name: Xcode + href: share-your-code-in-tfvc-xcode.md +- name: Tutorials + items: + - name: "Walkthrough: Fix a bug and get your code reviewed" + href: day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md + - name: "Visual Studio: Review Code" + href: get-code-reviewed-vs.md +- name: Concepts + items: + - name: Compare TFVC and Git + href: comparison-git-tfvc.md + - name: Use Git and TFVC + href: ../git/team-projects.md + - name: TFVC to Git command reference + href: https://www.visualstudio.com/articles/mapping%2Dmy%2Dtfvc%2Dactions%2Dto%2Dgit + - name: Develop in branches + items: + - name: Use branches to isolate risk + href: use-branches-isolate-risk-team-foundation-version-control.md + - name: Branch folders and files + href: branch-folders-files.md + - name: Branching strategies + href: branching-strategies-with-tfvc.md + - name: More branch strategies + href: branch-strategically.md + - name: Merge folders and files + href: merge-folders-files.md + - name: View changeset merges + href: view-where-when-changesets-have-been-merged.md + - name: View branch hierarchies + href: view-branch-hierarchy-team-project.md + - name: Associate files with merge tools + href: associate-file-type-file-comparison-tool.md +- name: How-to guides + items: + - name: Set up TFVC + href: set-up-team-foundation-version-control-your-dev-machine.md + items: + - name: Create and work with workspaces + href: create-work-workspaces.md + - name: Optimize your workspace + href: optimize-your-workspace.md + - name: Local and server workspaces + href: decide-between-using-local-server-workspace.md + - name: Add check-in policies + href: add-check-policies.md + - name: Work with files + items: + - name: Create and manage pending changes + href: develop-code-manage-pending-changes.md + - name: Add files + href: add-files-server.md + - name: Download files + href: download-get-files-from-server.md + - name: Check out and edit + href: check-out-edit-files.md + - name: Check in your work + href: check-your-work-team-codebase.md + - name: Rename or move + href: rename-move-files-folders.md + - name: Delete or restore + href: delete-restore-files-folders.md + - name: Gated check-ins + href: check-folder-controlled-by-gated-check-build-process.md + - name: Manage versions + items: + - name: Get the history of an item + href: get-history-item.md + - name: View changes using annotate + href: view-file-changes-using-annotate.md + - name: Label versions + href: use-labels-take-snapshot-your-files.md + - name: Find and view changesets + href: find-view-changesets.md + - name: Roll back changesets + href: roll-back-changesets.md + - name: Suspend work with shelvesets + href: suspend-your-work-manage-your-shelvesets.md + - name: Compare code + href: compare-folders-files.md + items: + - name: Compare files + href: compare-files.md + - name: Compare folders + href: compare-folders.md + - name: Folder comparison filters + href: folder-comparison-filters.md + - name: Reconcile differences + href: reconcile-differences-between-two-folders.md + - name: Resolve conflicts + href: resolve-team-foundation-version-control-conflicts.md + - name: Lock files and folders + items: + - name: Understand lock types + href: understand-lock-types.md + - name: Lock and unlock folders or files + href: lock-unlock-folders-files.md +- name: Reference + items: + - name: TFVC command reference + items: + - name: Use Team Foundation version control commands + href: use-team-foundation-version-control-commands.md + - name: Add + href: add-command.md + - name: Checkin + href: checkin-command.md + - name: Checkout (or Edit) + href: checkout-or-edit-command.md + - name: Get + href: get-command.md + - name: History + href: history-command.md + - name: Status + href: status-command.md + - name: Undo + href: undo-command.md + - name: Delete + href: delete-command-team-foundation-version-control.md + - name: Properties + href: properties-or-info-command.md + - name: Rename + href: rename-command-team-foundation-version-control.md + - name: Shelve + href: shelve-command.md + - name: Unshelve + href: unshelve-command.md + - name: Branch + href: branch-command.md + - name: Changeset + href: changeset-command.md + - name: Configure + href: configure-command.md + - name: Destroy + href: destroy-command-team-foundation-version-control.md + - name: Difference + href: difference-command.md + - name: Dir + href: dir-command.md + - name: Folderdiff + href: folderdiff-command.md + - name: Help + href: help-command-team-foundation-version-control.md + - name: Label + href: label-command-team-foundation-version-control.md + - name: Labels + href: labels-command.md + - name: LocalVersions + href: localversions-command.md + - name: Lock + href: lock-command.md + - name: Merge + href: merge-command.md + - name: Merges + href: merges-command.md + - name: Msdn + href: msdn-command.md + - name: Permission + href: permission-command.md + - name: Proxy + href: proxy-command.md + - name: Resolve + href: resolve-command.md + - name: Rollback + href: rollback-command-team-foundation-version-control.md + - name: Shelvesets + href: shelvesets-command.md + - name: Undelete + href: undelete-command.md + - name: Unlabel + href: unlabel-command.md + - name: View + href: view-command.md + - name: Workfold + href: workfold-command.md + - name: Workspace + href: workspace-command.md + - name: Workspaces + href: workspaces-command.md +- name: Resources + items: + - name: Administering TFVC + href: https://msdn.microsoft.com/library/ms181455.aspx diff --git a/docs/tfvc/undelete-command.md b/docs/tfvc/undelete-command.md new file mode 100644 index 00000000000..419077fa262 --- /dev/null +++ b/docs/tfvc/undelete-command.md @@ -0,0 +1,99 @@ +--- +title: Undelete Command +description: Undelete Command +ms.assetid: f3b7c02e-7799-4632-b786-551f31741401 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Undelete Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +The **undelete** command restores items that were previously deleted. + +>**Note:** +>  ** **The results of this command are not visible in other workspaces until you perform a check-in operation. For more information, see [Check In Pending Changes](https://msdn.microsoft.com/library/ms181411). + +**Required Permissions** + +To use the **undelete** command, you must have the **Check out** permission set to **Allow**. If you include the **/lock** option with a value other than none, you must have the **Lock** permission set to **Allow**. Additionally, you must own the workspace or have the global **Administer workspaces** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf undelete [/noget] [/lock:(none|checkin|checkout)] + [/recursive] itemspec[;deletionID] [/login:username,[password]] +## Parameters + +**Argument**|**Description**| +|---|---| +|*itemspec*|Identifies the file or folder to undelete. For more information about how Team Foundation parses itemspecs to determine which items are within scope, see [Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be).| +|*deletionID*|Specifies a unique identifier that disambiguates multiple deleted items with the same name.| +|*username*|Provides a value to the **/login** option. You can specify a username value as either *DOMAIN*\*UserName* or *UserName*.| + +<table><thead> +<tr><th><p><strong>Option</strong></p></th><th><p><strong>Description</strong></p></th></tr></thead><tbody> +<tr> + <td><p><strong>/noget</strong></p></td> + <td><p>Restores the deleted item to your workspace and then, pending completion of a check-in operation, restores the item on the server but does not immediately retrieve a physical copy of the item to disk.</p></td></tr> +<tr> + <td><p><strong>/lock</strong></p></td> + <td><p>Prevents other users from checking in or checking out the specified files. For more information, see <a href="understand-lock-types.md">Understanding Lock Types</a>.</p><p>Lock Options:</p><ul><li><p><strong>None</strong></p><p>Default. No lock is applied.</p></li><li><p><strong>Checkin</strong></p><p>Other users can check out the specified items but they cannot check in revisions to locked files until you release the lock by performing a check-in. If any other users have locked any one of the specified items, the lock operation fails.</p></li><li><p><strong>Checkout</strong></p><p>Prevents other users from checking in or checking out any one of the specified items until you release the lock by performing a check in. If any other users have locked any one of the specified items, the lock operation fails.</p></li></ul></td></tr> +<tr> + <td><p><strong>/recursive</strong></p></td> + <td><p>Restores all files and subfolders from the specified directory.</p></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td></tr></tbody> +</table> + +## Remarks +The Undelete command of the tf command-line feature schedules specified files or folders for restoration pending the completion of a check-in operation. It also retrieves the specified items from the server to the local disk unless you explicitly include the **/noget** option. + +When files or folders that have the same name have been deleted from the same server folder, you must include a value for the *deletionID* parameter to indicate which of the deleted items that you want to restore. You can obtain a *deletionID* using the **dir** command. + +If you want to change the file after restoring it, you may check out the file for editing with the checkout command as usual. + +When your *itemspec* specifies a folder, Team Foundation restores all its files and subfolders and the files they contain, by default. If you do not want to restore all the items in a folder, you must first undelete the folder and its items and then delete the items that you do not want to keep. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example restores 314.cs to the server folder from which 314.cs was deleted and retrieves a read-only copy of the latest version in the current workspace. + + C:\projects>tf undelete c:\math\314.cs + +The following example displays deletion IDs for all items on the server that have been deleted more than one time. + + c:\projects>tf dir $/ /deleted + +- Sample output: + + $/projects/math/314.cs;X10 + $/projects/math/314.cs;X11 + +The following example restores the X11 version of 314.cs to the server folder from which the file was deleted and retrieves a read-only copy of the latest version in the current workspace. + + c:\projects>tf undelete 314.cs;X11 + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Rename Command (Team Foundation Version Control)](rename-command-team-foundation-version-control.md) + +[Delete Command](delete-command-team-foundation-version-control.md) + +[Dir Command](dir-command.md) + +#### Concepts + +[Pending Changes](https://msdn.microsoft.com/library/ms181409) + +[Understanding Lock Types](understand-lock-types.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/understand-lock-types.md b/docs/tfvc/understand-lock-types.md new file mode 100644 index 00000000000..e3b777acd5e --- /dev/null +++ b/docs/tfvc/understand-lock-types.md @@ -0,0 +1,65 @@ +--- +title: Understand lock types +description: Understand lock types +ms.assetid: 5da8c9b3-78cf-4d49-827f-3f1a95bf4b9b +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Understand lock types + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +You can use the lock command to temporarily prevent changes to a particular file or folder in the source control server. This can be helpful if you want to change an item in your workspace and then check it in without being forced to resolve any merge conflicts. Only one user at a time may hold a lock on a particular file or folder. If you want to prevent access to an item in a persistent way, you should use the [Permission Command](permission-command.md) instead. + +## Lock Types + +Team Foundation provides two types of locks: *check-in locks* and *check-out locks*. + +### Check-in lock + +A check-in lock is less restrictive than a check-out lock. When you apply a check-in lock, users can continue to make local changes to the item in other workspaces. But those changes cannot be checked in until you explicitly remove the check-in lock from the item or implicitly remove it by checking in your changes to the file. + +### Check-out lock + +In Visual Studio Team Foundation Server 2012, check-out locks are generally not effective because of local workspaces (see [Decide between using a local or a server workspace](decide-between-using-local-server-workspace.md)). Specifically, check-out locks are: + +- Not enforceable because other users might be using local workspaces. + +- Not available if you are using a local workspace. + +- Disabled if a member of the Administrators security group of your team project collection has enabled asynchronous checkout for your team’s server workspaces. + +A check-out lock prevents users who are using server workspaces from checking out and making changes to the locked item in their workspaces. You cannot apply a check-out lock to an item for which any [pending changes](develop-code-manage-pending-changes.md) exist, in any workspace other than your own. + +## How Locking Works + +If a file is checked out when you lock it, its check-out record is modified to contain the new lock type. If the files are not checked out, a "lock" change is added to the set of pending workspace changes. Unlike the check-out command, the lock command does not automatically make a file editable. + +Team Foundation unlocks an item automatically when you check in pending changes in the workspace where it is locked. Locks are also released if the pending changes for a file are undone by using the undo command. + +Locks on folders are implicitly recursive. If you lock a folder, you do not have to lock the files that it contains unless you want to apply the more restrictive check-out lock to a file in a folder that has a check-in lock. + +Only one user at a time may hold a lock on a particular file or folder. You can learn which files are locked in the Team Foundation version control server and by whom they were locked by using the [Status command](status-command.md). + +A lock may be placed either as its own operation or as part of several other operations. These include rename, checkout, delete, undelete, merge, branch, and add to source control. When you lock an item as part of an add to source control or branch operation, Team Foundation places the lock on the server path where the new item will be created. This prevents another user from adding or branching a file to the same location. When you lock an item by using the rename command, both old and new server paths are locked. + +## Unlocking an Item + +You can unlock an item explicitly by using the unlock command or implicitly when you check in. When you check in pending changes to a locked item, Team Foundation removes any locks. + +> **Note:** +> By default, the UnlockOther permission is granted to administrators only. If you have the UnlockOther permission, you can remove a lock from an item in the workspace of another user by using the [Lock Command](lock-command.md). + +## See Also + +#### Other Resources + + [Work with version control locks](work-version-control-locks.md) + + [Create and work with workspaces](create-work-workspaces.md) + + [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md) diff --git a/docs/tfvc/undo-changes-another-user-workspace.md b/docs/tfvc/undo-changes-another-user-workspace.md new file mode 100644 index 00000000000..fbcb6036fef --- /dev/null +++ b/docs/tfvc/undo-changes-another-user-workspace.md @@ -0,0 +1,66 @@ +--- +title: Undo Changes in Another User's Workspace +description: Undo Changes in Another User's Workspace +ms.assetid: 038a4364-0a70-436e-95cc-24735d0ad9e7 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Undo Changes in Another User's Workspace + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Updated: October 2011 + +If a team member is blocked from checking in a file that is locked by someone else, you can use the **tf undo** command to delete Team Foundation version control pending changes in another user's workspace. + +If you must also remove an exclusive lock on a file, but not the pending changes, you can use the **tf lock** command. For more information, see [Lock Command](lock-command.md). + +If you must also delete another user's workspace, you can use the **tf workspace** command. For more information, see [Remove a Workspace](https://msdn.microsoft.com/library/ms245474). + +**Required Permissions** + +To undo pending changes in another user's workspace, you must have the **Administer workspaces** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To Undo the Changes in Another User's Workspace + +1. Click **Start**, click **All Programs**, click **Microsoft Visual Studio 2010**, point to **Visual Studio Tools**, and then click **Visual Studio 10.0 Command Prompt**. + +2. Type the following command at the command prompt and replace the arguments with the appropriate parameter information for your needs: + + **tf undo /workspace:***OtherUserWorkspace*;*OtherUser $/TeamProject/MyFile.cs /s:http://YourTFSServer:8080* + +For more information, see [Undo Command](undo-command.md). + +## See Also + +#### Concepts + +[Create a Workspace to Work with your Team Project](create-work-workspaces.md) + +[Using the Check In and Pending Changes Windows](develop-code-manage-pending-changes.md) + +#### Other Resources + +[Working with Version Control Locks](work-version-control-locks.md) +## Change History<table> +<thead> +<tr> +<th><p>Date</p></th> +<th><p>History</p></th> +<th><p>Reason</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p></p> +<p>October 2011</p></td> +<td><p>Corrected step to launch the command prompt.</p></td> +<td><p></p> +<p>Customer feedback.</p></td> +</tr> +</tbody> +</table> diff --git a/docs/tfvc/undo-command.md b/docs/tfvc/undo-command.md new file mode 100644 index 00000000000..609026a3992 --- /dev/null +++ b/docs/tfvc/undo-command.md @@ -0,0 +1,88 @@ +--- +title: Undo command +description: Undo command +ms.assetid: e10ca7c5-98d5-4c51-99fa-74b4eb7ceb49 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Undo command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Discards one or more pending changes to files or folders. + +**Requirements:** See [Permissions and groups reference](../security/permissions.md). + + tf undo [/workspace:workspacename[;workspaceowner]] + [/recursive] itemspec [/noprompt] [/login:username,[password]] + [/collection:TeamProjectCollectionUrl] + +## Parameters + + +<table><thead> +<tr><th><p>Parameter</p></th><th><p>Description</p></th></tr></thead><tbody> +<tr> + <td><p><strong>/collection</strong> : <em>TeamProjectCollectionUrl</em></p></td> + <td><p>Specifies the URL of the team project collection that contains the items. For example: http://myserver:8080/tfs/DefaultCollection.</p><p>If you do not use the <strong>/workspace</strong> option, by default the team project collection is presumed to be the one that contains the workspace that maps the current directory.</p></td></tr> +<tr> + <td><p><em>itemspec</em></p></td> + <td><p>Specifies the scope of the items. You can specify more than one <em>itemspec</em> argument. For syntax, see <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td></tr> +<tr> + <td><p><strong>/login</strong></p></td> + <td><p>Specifies the user account to use to run the command. See <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td></tr> +<tr> + <td><p><strong>/noprompt</strong></p></td> + <td><p>Suppresses the display of windows and dialog boxes and redirects output data to the command prompt. See <a href="use-team-foundation-version-control-commands.md">Use Team Foundation version control commands</a>.</p></td></tr> +<tr> + <td><p><strong>/recursive</strong></p></td> + <td><p>Recursively undoes changes to items in the specified directory and any subdirectories.</p></td></tr> +<tr> + <td><p><strong>/workspace</strong> <em>workspacename</em>[;<em>workspaceowner</em>]</p></td> + <td><p>Specifies the name of the workspace in which you want to undo pending changes. If not specified, the workspace is the one that maps the current directory.</p><p>You can specify <em>workspaceowner</em> to undo a pending change in a workspace that belongs to a specific user. If not specified, the workspace is presumed to be the current user, or if specified, the <strong>/login:</strong><em>username</em>. You must have the UndoOther permission set to Allow to undo changes in another user’s workspace.</p><table><thead> +<tr><th><strong>Note</strong></th></tr></thead><tbody> +<tr> + <td><p>If you use the <strong>undo</strong> command to undo a pending change in a remote workspace that is still in use, then before continuing work in that workspace, a user must log on to the machine that hosts the workspace and then get (and in some cases <a href="get-command.md">get /all</a>) the items affected by the undo.</p></td></tr></tbody></table></td></tr></tbody> +</table> + +## Remarks + +For each item on which there is a pending [edit](check-out-edit-files.md) change, the **undo** command determines if the file has been modified on disk. If the file has been modified and the **/noprompt** option has not been specified, the system prompts you to confirm that you want to proceed. Choose the **N** key to leave the change in place, the **Y** key to proceed with only the current change, or the **A** key to proceed with this and any other modified files that are subsequently detected. + +The **undo** command removes any [locks](work-version-control-locks.md) on the items. + +## Examples + +### Remove pending changes to a file + + c:\code\SiteApp\Main\SolutionA\Project1>tf undo program.cs + +Removes all pending changes to program.cs. + +### Recursively remove pending changes to all items in a folder + + c:\code\SiteApp\Main>tf undo * /recursive + +Removes all pending changes in the c:\\code\\SiteApp\\Main folder and all its subfolders. + +### Remove pending changes to a file in a remote workspace + + c:\>tf undo /collection:http://fabrikam-3:8080/tfs/DefaultCollection + /workspace:FABRIKAM-1;JuliaI $/SiteApp/Main/SolutionA/Project1/program.cs + +Removes all pending changes to program.cs in the specified collection and workspace. + +## Work in Visual Studio + +- [Develop code and manage pending changes](develop-code-manage-pending-changes.md) Use Visual Studio to undo pending changes. + +## Tips + +- To view a list of pending changes in the current or in a remote workspace, use the [Status command](status-command.md). +- You can use the **/workspace** option (and as needed, the **/collection** option) to undo changes on a remote dev machine. This capability is especially useful in cases when, for example, a file has been checked out and possibly locked on a dev machine that you cannot access. See the above explanation of the **/workspace** for information about how this works. +- If you need to clean your workspace (for example, because your work is interrupted by a more urgent task) and want to preserve the pending changes instead of undoing them, you can suspend them. See [Shelve Command](shelve-command.md). You can also preserve the position of your open windows, breakpoints, and other important cues. See [Suspend your work and manage your shelvesets](suspend-your-work-manage-your-shelvesets.md). +- You can also discard changes that have already been checked in. See [Undelete Command](undelete-command.md) and [Rollback Command (Team Foundation Version Control)](rollback-command-team-foundation-version-control.md). diff --git a/docs/tfvc/unlabel-command.md b/docs/tfvc/unlabel-command.md new file mode 100644 index 00000000000..a45f53d3c87 --- /dev/null +++ b/docs/tfvc/unlabel-command.md @@ -0,0 +1,103 @@ +--- +title: Unlabel Command +description: Unlabel Command +ms.assetid: 37b15bd4-ec75-4fbe-938e-544793c88a3c +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Unlabel Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Removes an item from an existing label in the server for Team Foundation version control. + +**Required Permissions** + +To use the **unlabel** command, you must either own the label, or have the **Administer labels** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf unlabel [/collection:TeamProjectCollectionUrl] [/recursive] [/login:username, [password]] labelname itemspec + +## Parameters + +<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><i>TeamProjectCollectionUrl</i></p></td> +<td><p>The URL of the team project collection that contains the item that you want to remove from an existing label (for example, http://myserver:8080/tfs/DefaultCollection).</p></td> +</tr> +<tr> +<td><p><i>labelname</i></p></td> +<td><p>Specifies the name of the label to remove from the specified items.</p></td> +</tr> +<tr> +<td><p><i>itemspec</i></p></td> +<td><p>Identifies the file or folder from which to remove the specified label. For more information about how Team Foundation parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p> +<div class="alert"> +<div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"> +<div class="mtps-row"> +<strong>Note</strong> +</div> +<div class="mtps-row"> +You can specify more than one *itemspec* argument. +</div> +</div> +</div></td> +</tr> +<tr> +<td><p><i>username</i></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <i>DOMAIN</i>\<i>UserName</i> or <i>UserName</i>.</p></td> +</tr> +</tbody> +</table> + +| **Option** | **Description** | +|---|---| +| **/recursive** | Unlabels all items in the particular directory and all the subdirectories that match the *itemspec*. | +| **/collection** | Specifies the team project collection. | +| **/login** | Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server. | + +## Remarks + +The **unlabel** command of the **tf** command-line utility removes an item from an existing label in the Team Foundation version control server. For an introduction to labels, see [Use Labels to Take a Snapshot of Your Files](use-labels-take-snapshot-your-files.md). For information about how to assign a label to a set of files and folders, see [Label Command (Team Foundation Version Control)](label-command-team-foundation-version-control.md). + +If you remove all items from a label in the Team Foundation version control server, that label is deleted. You can also delete a label using the command `tf label /delete`. To learn more about the existing labels in the system, see [Labels Command](labels-command.md). + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +## Examples + +The following example removes the "goodbuild" label from 314.cs. + + c:\projects>tf unlabel goodbuild $/src/314.cs + +The following example removes the "Beta1" label from all files and folders in the collection at http://myserver:8080/tfs/DefaultCollection. + + c:\projects>tf unlabel Beta1 $/ /collection:http://myserver:8080/tfs/DefaultCollection /recursive + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Label Command (Team Foundation Version Control)](label-command-team-foundation-version-control.md) + +[Labels Command](labels-command.md) + +#### Concepts + +[Use Labels to Take a Snapshot of Your Files](use-labels-take-snapshot-your-files.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/unshelve-command.md b/docs/tfvc/unshelve-command.md new file mode 100644 index 00000000000..444349782c4 --- /dev/null +++ b/docs/tfvc/unshelve-command.md @@ -0,0 +1,143 @@ +--- +title: Unshelve Command +description: Unshelve Command +ms.assetid: 468ab1f4-f565-41d9-a5ad-1481ad29b176 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Unshelve Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Restores shelved file revisions, check-in notes, comments, and work item associations to the current workspace or removes an existing shelveset from the server. + +**Required Permissions** + +To use the **unshelve** command, you must have the **Read** permission set to **Allow**, and you must have the **Check out** permission for the items in the shelveset set to **Allow**. Additionally, to delete a shelveset, you must be its owner or have the **Administer shelved changes** global permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf unshelve [/move] [shelvesetname[;username]] itemspec + [/recursive] [/noprompt][/login:username,[password]] +## Parameters<table> +<thead> +<tr> +<th><p>Argument</p></th> +<th><p>Description</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><i>shelvesetname</i></p></td> +<td><p>The name of the shelveset to restore.</p></td> +</tr> +<tr> +<td><p><i>ownername</i></p></td> +<td><p>The name of the shelveset owner.</p></td> +</tr> +<tr> +<td><p><i>Itemspec</i></p></td> +<td><p>Identifies the file or folder revisions to unshelve into the current workspace. If this parameter is not included, all pending changes in the specified shelveset are unshelved, by default. Server paths are not allowed.</p> +<p>For more information about how Team Foundation parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/4y2ash30">Command-Line Options</a>.</p> +>**Note:** +>You can specify more than one *Itemspec* argument. +</td> +</tr> +<tr> +<td><p><i>username</i></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <i>DOMAIN\UserName</i> or <i>UserName</i.</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p>Option</p></th> +<th><p>Description</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/move</strong></p></td> +<td><p>Deletes the specified shelveset from the server for Team Foundation version control upon successful completion of the unshelve operation. This option cannot be combined with an <i>itemspec</i>.</p> +<p>You can also delete a shelveset using the <strong>shelve</strong> command.</p></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>If specified, the itemspec is matched recursively.</p></td> +</tr> +<tr> +<td><p><strong>/noprompt</strong></p></td> +<td><p>If specified, you are not prompted for input.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td> +</tr> +</tbody> +</table> + +## Remarks +The **unshelve** command of the **tf** command-line utility retrieves either all shelved file revisions or a defined subset of all shelved file revisions from the Team Foundation server into the current workspace. + +To unshelve an item, there must be no pending revisions against it in the destination workspace. + +When you unshelve a shelveset, Team Foundation restores each shelved revision into the destination workspace as a pending change as long as the revision does not conflict with a change that was already pending in the workspace. For more details about what happens during the unshelve process, see [Working with Shelvesets](suspend-your-work-manage-your-shelvesets.md). + +You can use the **unshelve** command to restore individual file revisions from a shelveset to your workspace. You should run get after unshelving to reconcile any changes checked into the server since the shelveset was created. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### + +#### Recycle Shelved Changes + +If you want to integrate shelved revisions into your current workspace in order to make ongoing revisions, unshelve the desired shelveset. As a best practice, get the latest version of your version-controlled files after unshelving as well. + +#### Unshelve and Review Another User's Code + +You can also unshelve a shelveset in order to review changes from another user's workspace. To unshelve for this reason, you have two options. + +- If the shelved items and the items with which they are related have not been revised, or have only been revised lightly since the shelveset was created, you can retrieve the base version of all related items from the shelveset owner's workspace. To do this, use some variation of the following command: `tf get \* /version;Wworkspacename`, where *workspacename* is the name of the workspace from which the other user created the shelveset. + +- If a significant amount of time has passed or if multiple revisions have been in the workspace since the shelveset was created, retrieve the version of all related items from the server as of the date and time when the shelveset was created. + +You can unshelve another user's shelved change by appending the username to the shelveset name. However, you can only remove a shelveset from the Team Foundation Server that was created by another user if you have the AdminShelvedChangesets permission. + +If you attempt to unshelve an item for which a pending change exists in the destination workspace, Team Foundation does not merge differences between the items and does not retrieve the revision into your workspace. + +You can delete a shelveset by using `tf shelve /delete`. For more information, see [Shelve Command](shelve-command.md). In order to automatically delete a shelveset after unshelving the entire shelveset, use `tf unshelve /move`. + +## Examples +The following example opens the **Unshelve** dialog box so that you can find and unshelve a shelveset into the current workspace. You also have an option in the dialog box to have the shelveset deleted when the unshelve operation completes. + + c:\>tf unshelve + +The following example unshelves the shelveset buddytest\_1256 into the current workspace and removes it from Team Foundation Server. + + c:\>tf unshelve /move buddytest_1256 + +## See Also + +#### Tasks + +[Shelve and Unshelve Pending Changes](https://msdn.microsoft.com/library/ms181404) + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Shelve Command](shelve-command.md) + +[Changeset Command](changeset-command.md) + +#### Concepts + +[Working with Shelvesets](suspend-your-work-manage-your-shelvesets.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/use-branches-isolate-risk-team-foundation-version-control.md b/docs/tfvc/use-branches-isolate-risk-team-foundation-version-control.md new file mode 100644 index 00000000000..68cefc9d464 --- /dev/null +++ b/docs/tfvc/use-branches-isolate-risk-team-foundation-version-control.md @@ -0,0 +1,64 @@ +--- +title: Use branches to isolate risk in Team Foundation Version Control +description: Use branches to isolate risk in Team Foundation Version Control +ms.assetid: d74122a4-6a3d-45fb-82b7-3c1494ed4afd +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Use branches to isolate risk in Team Foundation Version Control + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Consider some challenges team members typically face when they work on a software project that is staffed by more than five or ten people: + +- The group has a few (or maybe several) different feature teams, each working on a set of functionality that is reasonably discrete. But each team also depends on functionality built by other teams. You need to isolate the risk of the changes introduced by the work done in each of these teams, and yet eventually, you need to merge all their efforts together into one product. + +- The test team needs a stable version of the code to test, and yet simultaneously, the developers need to continue moving forward with new features that will occasionally destabilize the product. + +- The software has two previous versions and one current version in progress. Even though most of the development effort is invested in the current version, the previous versions must still be supported with occasional releases of service packs, critical fixes and security patches, and other changes. + +## In This Section + +This section describes the branching and merging tools provided by Team Foundation version control to enable you to meet these and other challenges faced by groups of people who collaborate on a software project. + + [Branch folders and files](branch-folders-files.md) +Explains the procedure used to create branches by using Team Foundation version control. + + [Branch strategically](branch-strategically.md) +Your team can create and use branches in version control to optimize your application development strategy. + + [Merge folders and files](merge-folders-files.md) +Explains the procedure used to merge branches by using Team Foundation version control. + + [View where and when changesets have been merged](view-where-when-changesets-have-been-merged.md) +Explains how to view and work with actionable diagrams that illustrate where and when merges have occurred. + + [View the branch hierarchy of a team project](view-branch-hierarchy-team-project.md) +Explains how to view and work with an interactive diagram that illustrates the branch hierarchy of your team project. + + [Associate a file type with a merge tool](associate-file-type-merge-tool.md) +Describes the steps used to specify the file type extensions associated with merging. + +## Reference + + [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md) + +## Related Sections + + [Compare folders and files](compare-folders-files.md) +Explains how to compare or diff files, folders, and shelvesets. + + [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md) +Lists topics about how to resolve merges, check in procedures, and get retrieve conflicts. + +## See Also + +#### Other Resources + + [Branch strategically](branch-strategically.md) + +[Visual Studio TFS Branching Guide](http://go.microsoft.com/fwlink/?LinkId=191400) diff --git a/docs/tfvc/use-labels-take-snapshot-your-files.md b/docs/tfvc/use-labels-take-snapshot-your-files.md new file mode 100644 index 00000000000..e4d9fc9fc86 --- /dev/null +++ b/docs/tfvc/use-labels-take-snapshot-your-files.md @@ -0,0 +1,285 @@ +--- +title: Use labels to take a snapshot of your files +description: Use labels to take a snapshot of your files +ms.assetid: 8945006e-3a03-4ae1-b5a1-79be57610321 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Use labels to take a snapshot of your files + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Labels let you take a snapshot of your files so that at a later date you can refer back to that snapshot. By using your label, you can view, build, or even roll back a large set of files to the state they were in when you applied the label. + +**Required permissions** + +To apply a label, you must have the **Label** permission set to **Allow**. To find, list, or view labels, you must have the **Read** permission set to **Allow**. To modify or delete a label, you must own the label or have the **Administer Labels** permission set to **Allow**. + + +## Using Labels + +In many software projects, when the code has reached a reasonable level of quality and stability, the team will build and release a new version of the product. The team needs to mark the current version of each file so that even as the files continue to change, the team can still get and build the new version of every file in their project. + +Theoretically, you could record the ID of each changeset for each file manually; but clearly this kind of process is not practical. Team Foundation version control makes the job simple: You apply a label to the folder, branch, or team project that contains the files. You can give the label a name that follows whatever naming convention you prefer. Some examples of label names include: "Sprint 5", "M1", "Beta2", and "Release Candidate 0". + +After you have applied the label, you can use it to qualify operations such as building, branching, merging, comparing, and getting specific versions of files and folders. + +Sometimes after you apply a label you decide that you need to change it. Team Foundation version control enables you to apply a label to additional files, remove a label from certain files, and even to modify which version of a specific file to which the label applies. + +>**Tip:** +>Applying a label provides many of the same benefits as creating a branch, but typically with lower cost and complexity. The tradeoff is that for large databases, operations such as merging may take much longer when running against a label. + +## Apply a Label + +>**Tip:** +>When you use Visual Studio to apply a label that already exists, the operation removes the label from all file versions and then applies the label. From the command prompt, however, the label operation is additive. See [Label Command (Team Foundation Version Control)](label-command-team-foundation-version-control.md). + +### Apply a label + +1. In **Source Control Explorer**, open the shortcut menu for the collection, team project, branch, folder, or file to which you want to apply a label and choose **Advanced**, **Apply Label**. + + The **New Label** dialog box appears. + +2. In the **Name** box, type a name for the label. + +3. (Optional) Type your comments in the **Comment** box. + +4. In the **Version** list, **Latest Version** is selected by default. This option is the one most typically used, but if you need the label to target a specific version, select: + + - **Changeset**: Specify the number of the changeset in the **Changeset** box. Alternatively, choose the ellipses (**…**) to open the **Find Changesets** dialog box. For more information, see [Find and view changesets](find-view-changesets.md). + + - **Date**: Specify a date in the **Date** box or select a date from the calendar on the drop-down menu. + + - **Label**: Specify an existing label upon which to base the new label. Either type the label name in the **Label** box, or choose the ellipses (**…**) to open the **Find Label** dialog box. For more information, see [Find, Edit, and Remove Labels](use-labels-take-snapshot-your-files.md#find_label). + + - **Workspace Version**: The label is created for the version in your workspace. + +5. When you are satisfied with your settings, perform one of the following steps: + + - To apply the label, choose **Create**. + + - To apply the label and then modify it after it has been applied, choose **Create and Edit**. This applies the label and then displays the **Label** window. For more information about using the **Label** window to edit a label, see [Use the Label Window to Work with Labels](use-labels-take-snapshot-your-files.md#label_window). + +>**Note:** +>When you apply a label using a name that already exists, the system warns you and asks if you want to continue. If you choose **OK** to continue, any items not contained in the path to which you are applying the label will no longer have that label. + +## Rename a Label + +While you cannot modify the name of an existing label, you can easily apply a new label to exactly the same files and same versions to which another label applies. + +### Apply a label based on an existing label + +1. In Source Control Explorer, open the shortcut menu for the project collection node (the root node), and then choose **Advanced**, **Apply Label**. + + The **New Label** dialog box appears. + +2. In the **Name** box, type a name for the label. + +3. (Optional) In the **Comment** box, type a comment. + +4. In **Version** list, select **Label**. + + The **Label** box appears. + +5. Perform one of the following steps: + + - Type the name of the existing label. + + - If you are not sure of the name of the existing label, choose the browse button with the ellipses (…) next to the **Label** box. + + The **Find Label** dialog box appears. + + Use the options in the **Find Label** dialog box to filter the list of labels and find the existing label to which you want to apply the new label. (For more information, see [Find, Edit, and Remove Labels](use-labels-take-snapshot-your-files.md#find_label).) + +6. Choose **Create**. + +7. (Optional) After you have created the new label, you can remove the old label. For more information, see [Find, Edit, and Remove Labels](use-labels-take-snapshot-your-files.md#find_label). + +<a name="find_label"></a> + +## List, Find, View, Edit and Remove Labels + +There are two ways to list and find labels: the **Find Label** dialog box and the **Label** tab in the **History** window. After you find the label you are interested in, you can then view it, edit it, remove it, or work with the files to which it applies. + +### Find and work with labels by using the Find Label dialog box + +1. In Source Control Explorer, on the menu bar choose **File**, **Source Control**, **Find**, **Find Label**. + + The **Find Label** dialog box appears. + +2. (Optional) Refine your search by performing one or more of the following steps: + + - In the **Name** text box, type the name of the label. + + - In the **Project** list, select the team project that contains the label that you want to find. + + - In the **Owner** text box, type the name or alias of the owner of the label. + +3. Choose **Find**. + + The **Results** list displays labels that match the search criteria that you entered. + +4. (Optional) Perform one of the following steps: + + - To view or edit a label, select it and choose **Edit**. + + The **Label** window appears. For more information, see [Use the Label Window to Work with Labels](use-labels-take-snapshot-your-files.md#label_window). + + - To delete a label, select it and choose **Delete**. + + - Choose **Close**. + +Sometimes you may not be sure of the name of a label, but you know that the label was applied to a particular item under version control. The following procedure explains how to find and then work with a label in this situation. + +### List and work with labels that apply to a specific item + +1. In Source Control Explorer, open the shortcut menu for the item to which the label you want to find applies, and then choose **View History**. + + The **History** window appears. + +2. Choose the **Labels** tab to display the list of labels that apply to this item. + +3. (Optional) Perform one of the following steps: + + - To view or edit a label, open its shortcut menu and choose **Edit Label**. + + The Label window appears. For information about how to use this window, see [Use the Label Window to Work with Labels](use-labels-take-snapshot-your-files.md#label_window). + + - To delete a label, open its shortcut menu and choose **Delete Label**. + + - Open the shortcut menu for the label and choose other actions such as **Get This Version**, and **Compare**. + +For more information about how to use the label tab in the History window, see [Get the history of an item](get-history-item.md). + +## Download Labeled Versions of Files to Your Workspace + +Labeling a set of files is like taking a snapshot of how they existed at a certain point in time. Weeks or months after you have taken this snapshot, you may need to view or work with the files as they existed in that snapshot. The following procedure explains how to download the labeled versions of a set of files to your workspace. + +### Download labeled versions of files to your workspace + +1. In Source Control Explorer, open the shortcut menu for the project collection, team project, branch, or folder that contains the items you want to download and then choose **Advanced**, **Get Specific Version**. + + The **Get** dialog box appears. + +2. From the **Type** list, select **Label**, and then either type the label name in the **Label** box, or choose the ellipses (**…**) to open the **Find Label** dialog box. For more information about how to use this dialog box, see [Find, Edit, and Remove Labels](use-labels-take-snapshot-your-files.md#find_label). + +3. Review, and if appropriate, select any of the additional options in the **Get** dialog box. + +4. Choose **Get**. + +<a name="label_window"></a> + +## Use the Label Window to Work with Labels + +After you have opened the Label window by using one of the preceding procedures, you are ready to begin working with the label. At the top of the window is a box that displays the comment, which you can edit if you want. + +You can use the Label window to perform the following tasks: + +- Add an item to the label + +- Remove an item from the label + +- Change the version of a file + +- Perform other actions on an item + +### Add an item to the label + +1. In the **Label** window, choose **Add Item**. + + The **Choose Item Version** dialog box appears. + +2. In the **Choose Item Version** dialog box, navigate to and then select the item that you want to add. + + >**Tip:** + >You can press and hold the CONTROL or SHIFT keys and then select multiple items. + +3. (Optional) If you need the label to target a specific version, from the **Version** list, select: + + - **Latest Version**: The label will be applied to the latest version that is in version control. + + - **Changeset**: Specify the number of the changeset in the **Changeset** box. Alternatively, choose the ellipses (**…**) to open the **Find Changesets** dialog box. For more information, see [Find and view changesets](find-view-changesets.md). + + - **Date**: Specify a date in the **Date** box or select a date from the calendar on the drop-down menu. + + - **Label**: Specify an existing label upon which to base the new label. Either type the label name in the **Label** box, or choose the ellipses (**…**) to open the **Find Label** dialog box. For more information, see [Find, Edit, and Remove Labels](use-labels-take-snapshot-your-files.md#find_label). + + - **Workspace Version**: The label is created for the version in your workspace. + +4. Choose **OK**. + +5. Choose **File**, **Save**. + +### Remove an item from the label + +1. In the **Label** window, locate the collection, team project, branch, folder, or file that you want to remove from this label. + +2. Open the shortcut menu for the item and choose **Remove from Label**. + + The label is removed from the item. If the item is a project collection, team project, branch, or folder, then the label is also removed from all the items it contains. + +3. Choose **File**, **Save**. + +### Change the version of a file + +1. In the **Label** window, locate the file that you want to modify. + +2. Open the shortcut menu for the file and choose **Change Labeled Version**. + +3. The **Change Labeled Version** dialog box appears. + +4. Select: + + - **Latest Version**: Apply the label to the latest version that is in version control. + + - **Changeset**: Specify the number of the changeset in the **Changeset** box. Alternatively, choose the ellipses (**…**) to open the **Find Changesets** dialog box. For more information, see [Find and view changesets](find-view-changesets.md). + + - **Date**: Specify a date in the **Date** box or select a date from the calendar on the drop-down menu. + + - **Label**: Specify an existing label upon which to base the new label. Either type the label name in the **Label** box, or choose the ellipses (**…**) to open the **Find Label** dialog box. For more information, see [Find, Edit, and Remove Labels](use-labels-take-snapshot-your-files.md#find_label). + + - **Workspace Version**: The label is created for the version in your workspace. + +5. Choose **File**, **Save**. + + +### Perform other actions on a labeled item + +When you open the shortcut menu for an item in the Label window, you can also choose one of the following commands: + +- **View** (files only) + +- [View History](get-history-item.md) + +- [Compare](compare-files.md) (files only) + +- [Annotate](view-file-changes-using-annotate.md) (files only) + +- [Get This Version](download-get-files-from-server.md) + +## Work from the command prompt + +- [Label Command (Team Foundation Version Control)](label-command-team-foundation-version-control.md) Apply or remove a label. + + >**Tip:** + >When you use this command to apply a label, you can specify a scope other than the team project. + +- [Labels Command](labels-command.md) List labels. + +## See Also + +#### Other Resources + + [Find and view changesets](find-view-changesets.md) + + [Create and work with workspaces](create-work-workspaces.md) + + [Permissions and groups reference](../security/permissions.md) + + [Use branches to isolate risk in Team Foundation Version Control](use-branches-isolate-risk-team-foundation-version-control.md) + + [Use Source Control Explorer to manage files under version control](use-source-control-explorer-manage-files-under-version-control.md) diff --git a/docs/tfvc/use-source-control-explorer-manage-files-under-version-control.md b/docs/tfvc/use-source-control-explorer-manage-files-under-version-control.md new file mode 100644 index 00000000000..e8b8924d6b2 --- /dev/null +++ b/docs/tfvc/use-source-control-explorer-manage-files-under-version-control.md @@ -0,0 +1,69 @@ +--- +title: Use Source Control Explorer to manage files under version control +description: Use Source Control Explorer to manage files under version control +ms.assetid: 2781688e-ac66-4ea5-acd3-f045ba757f13 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 12/05/2016 +--- + +# Use Source Control Explorer to manage files in TFVC + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Use Source Control Explorer to browse file versions and work with your codebase under Team Foundation version control (TFVC). + +> [!NOTE] +> If you're using Git for version control, manage your Visual Studio project files in [Team Explorer](../connect/work-team-explorer.md) and [Solution Explorer](https://docs.microsoft.com/en-us/visualstudio/ide/solutions-and-projects-in-visual-studio#managing-projects-in-solution-explorer). Learn more about using Git with Visual Studio in the [Team Services Git tutorial](../git/tutorial/gitworkflow.md). + +> [!TIP] +> If you need to work with your Visual Studio solution files outside of version control, use [Solution Explorer](https://docs.microsoft.com/en-us/visualstudio/ide/solutions-and-projects-in-visual-studio#managing-projects-in-solution-explorer). +> Source Code Explorer is for managing changes made in your project when using TFVC. + +## Open Source Control Explorer + +Source Control Explorer is available in both Visual Studio 2013 and 2015, but isn't opened by default when working with a project managed in TFVC. You can open the Source Control Explorer window: + +- From the Team Explorer home page (Keyboard: Ctrl + 0, H), choose **Source Control Explorer**. + +- From the menu bar. Select **View**, **Other Windows**, **Source Control Explorer**. + +![Source Control Explorer](_img/use-source-control-explorer-manage-files-under-version-control/IC612245.png) + +## Use the command prompt + +You can also use the command prompt to manage your files in TFVC. See [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md). + +## Q & A + +### Q: Why do I see the Not mapped link? + +**A:** If the **Not mapped** link appears next to **Local Path** in a folder that contains files you need to work with, you can choose the link to map the folder. See [Create and work with workspaces](create-work-workspaces.md). + +### Q: How do I change the local path? + +![Editing workspaces from Source Control Explorer](_img/use-source-control-explorer-manage-files-under-version-control/IC698934.png) + +See [Create and work with workspaces](create-work-workspaces.md) + +### Q: How do I toggle the folders pane? + +**A:** To toggle the folders pane, choose **Close** in the upper-right corner of its title bar, or, in the Source Control Explorer toolbar, choose **Folders**. + +### Q: I don’t see the latest data in the window. How can I fix this? + +**A:** If Source Control Explorer is not showing the latest data on the server, from the menu bar, choose **File**, **Source Control**, **Refresh Status**. + +### Q: How can the Pending Change column help me? + +**A:** The **Pending Change** column displays your [pending changes](develop-code-manage-pending-changes.md) to an item. It also displays the pending changes of other team members who are using [server workspaces](decide-between-using-local-server-workspace.md) and identifies their names in the **User** column. If an ellipsis (**…**) appears, you can view a list of the users and their pending changes: + +1. Open the context menu of the item in the **Name** column and choose **Properties**. + +2. In the **Properties** dialog box, choose the **Status** tab, which displays a list of users (in the **User** column) and their associated pending changes (in the **Change Type** column). + +### Q: Why do I see this error message: “Team Foundation Server is not your current Source Control plug-in. Click here to set the current Source Control plug-in”? + +**A:** You might have connected to a Git repository in your team project. Use [Team Explorer](../connect/work-team-explorer.md) and [Solution Explorer](https://docs.microsoft.com/en-us/visualstudio/ide/solutions-and-projects-in-visual-studio#managing-projects-in-solution-explorer) to manage your files in Git repos. diff --git a/docs/tfvc/use-team-foundation-version-control-commands.md b/docs/tfvc/use-team-foundation-version-control-commands.md new file mode 100644 index 00000000000..64e1f6165bb --- /dev/null +++ b/docs/tfvc/use-team-foundation-version-control-commands.md @@ -0,0 +1,569 @@ +--- +title: Use Team Foundation version control commands +description: Use Team Foundation version control commands +ms.assetid: efeff6e0-c4ab-4686-bc63-20a6136be39a +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Use Team Foundation version control commands + +**VSTS | TFS 2015 | Visual Studio 2013,2015,2017** + +You can use version control commands to do nearly all tasks you can do in Visual Studio, and also several tasks that can’t be done in Visual Studio. You can use the **tf.exe** tool to run version control commands from a command prompt or within a script. + +## Run a command + +To launch the Visual Studio command prompt, from Windows **Start**, choose **Visual Studio 2015**, then choose the the **Developer Command Prompt for V2015** shortcut. + +> Visual Studio 2017 users: The tf.exe binary is no longer in a fixed location in the Visual Studio install path as in previous releases (for example, C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE). Scripts using tf.exe should not hardcode a path to the file based on the Visual Studio 2017 install path. + +In most cases, you run the version control command in the context of a directory that is mapped in the workspace. For example, `$/SiteApp/Main/` is mapped to `c:\\code\\SiteApp\\Main\\`. To get the latest version of all items in the workspace: + + c:\code\SiteApp\Main\SolutionA>tf get + + +### Set up your dev machine and manage workspaces + +Your workspace is a local copy of your team’s codebase. Because it is a local copy on your dev machine, you can develop and test your code in isolation until you are ready to check in your work. Here are some commands to manage your workspace: + +[Proxy Command](proxy-command.md) (Visual Studio 2010) + +[Workfold Command](workfold-command.md) (Visual Studio 2010) + +[Workspace Command](workspace-command.md) (Visual Studio 2010) + +[Workspaces Command](workspaces-command.md) (Visual Studio 2010) + +See also: [Set up Team Foundation Version Control on your dev machine](set-up-team-foundation-version-control-your-dev-machine.md), [Create and work with workspaces](create-work-workspaces.md) + +### Develop your app + +Use these commands to develop your app under version control with your team: + +[Add command](add-command.md) +Adds files and folders to version control. + +[Checkout (or Edit) command](checkout-or-edit-command.md) +Checks out a file and changes its pending change status to "edit". + +[Delete Command (Team Foundation Version Control)](delete-command-team-foundation-version-control.md) (Visual Studio 2010) + +[Get command](get-command.md) +Gets (downloads) the latest or a specified version of one or more files or folders from Team Foundation Server to the workspace. + +[Rename Command (Team Foundation Version Control)](rename-command-team-foundation-version-control.md) (Visual Studio 2010) + +[Status command](status-command.md) +Displays information about pending changes to files and folders items in one or more workspaces, or in a shelveset. + +[Undo command](undo-command.md) +Discards one or more pending changes to files or folders. + +[Undelete Command](undelete-command.md) (Visual Studio 2010) + +See also: [Develop your app in Team Foundation version control](develop-your-app-team-foundation-version-control.md) + +### Suspend your work + +For a variety of reasons, sometimes you need to set aside some or all of your work in progress. To suspend and resume your work, and to manage your shelvesets, use these commands: + +[Shelve Command](shelve-command.md) (Visual Studio 2010) + +[Shelvesets Command](shelvesets-command.md) (Visual Studio 2010) + +[Unshelve Command](unshelve-command.md) (Visual Studio 2010) + +See also: [Suspend your work and manage your shelvesets](suspend-your-work-manage-your-shelvesets.md). + +### Contribute your work + +Here’s how to check in your code to the team’s codebase: + +[Checkin command](checkin-command.md) +Checks in pending changes to files or folders to the server. + +See also: [Check in your work to the team's codebase](check-your-work-team-codebase.md) + +### Manage files and solve problems + +**View and Manage Version Control Files and Folders** + +[Properties (or Info) Command](properties-or-info-command.md) (Visual Studio 2010) + +Property Command (not documented) + +[Dir Command](dir-command.md) (Visual Studio 2010) + +[Destroy Command (Team Foundation Version Control)](destroy-command-team-foundation-version-control.md) (Visual Studio 2010) + +[LocalVersions Command](localversions-command.md) (Visual Studio 2010) + +See also: [Use Source Control Explorer to manage files under version control](use-source-control-explorer-manage-files-under-version-control.md) + +**View and Manage Past Versions** + +[Changeset Command](changeset-command.md) (Visual Studio 2010) + +[History command](history-command.md) +Displays the revision history of one or more files or folders. + +[Label Command (Team Foundation Version Control)](label-command-team-foundation-version-control.md) (Visual Studio 2010) + +[Labels Command](labels-command.md) (Visual Studio 2010) + +[Rollback Command (Team Foundation Version Control)](rollback-command-team-foundation-version-control.md) (Visual Studio 2010) + +[Unlabel Command](unlabel-command.md) (Visual Studio 2010) + +[View Command](view-command.md) (Visual Studio 2010) + +See also: [View and manage past versions](view-manage-past-versions.md) + +**Compare Folders and Files** + +[Difference Command](difference-command.md) (Visual Studio 2010) + +[Folderdiff Command](folderdiff-command.md) (Visual Studio 2010) + +See also: [View and manage past versions](view-manage-past-versions.md) + +**Resolve File Conflicts** + +[Resolve Command](resolve-command.md) (Visual Studio 2010) + +See also: [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md). + +**Work with Version Control Locks** + +[Lock Command](lock-command.md) (Visual Studio 2010) + +See also: [Work with version control locks](work-version-control-locks.md). + +### Isolate risk + +Use the following commands to isolate risk using branches: + +[Branch Command](branch-command.md) (Visual Studio 2010) + +[Branches Command](branches-command.md) (Visual Studio 2010) + +[Merge Command](merge-command.md) (Visual Studio 2010) + +[Merges Command](merges-command.md) (Visual Studio 2010) + +See also: [Use branches to isolate risk in Team Foundation Version Control](use-branches-isolate-risk-team-foundation-version-control.md). + +### Administer Version Control + +Use the following commands to administer your version control system: + +[Configure Command](configure-command.md) (Visual Studio 2010) + +[Permission Command](permission-command.md) (Visual Studio 2010) + +See also: [Administering Team Foundation Version Control](administering-team-foundation-version-control.md) (Visual Studio 2010). + +### Get Help on Version Control Commands + +Use the following commands to get more information about version control commands: + +[Help Command (Team Foundation Version Control)](help-command-team-foundation-version-control.md) (Visual Studio 2010) + +[Msdn Command](msdn-command.md) (Visual Studio 2010) + +## Understand command syntax + +The syntax of each command appears at the top of each reference topic. + +### Required and optional arguments + +Non-bracketed arguments are required. **[Brackets]** indicate optional arguments that are not required to complete a command. However, some optional arguments have defaults that are applied to the command even if you do not specify the option. + +### Exclusive arguments + +When options are separated by a pipe (**|**), you can specify one of the options. + +### Verbatim and replaceable arguments + +Bold items are options that you include verbatim. *Italicized* items are arguments that you must replace with actual characters to perform a command. + +### Command Shortcuts and Aliases + +Some commands support shortcuts. For example, you can call the [Delete command](delete-command-team-foundation-version-control.md) with either **tf delete** or **tf del**. + +### Example + +For example, the [Checkout command](checkout-or-edit-command.md): + + tf checkout [/lock:( none|checkin|checkout)] [/recursive] itemspec [/login: username,[ password]] + +Let’s review the arguments from this example: + +- *itemspec*: You must replace this argument with an [itemspec](use-team-foundation-version-control-commands.md#itemspec) that specifies the items you are checking out. + +- **/lock:(none|checkin|checkout)**: You are not required to specify the **/lock** option. If you do not specify it, then the system by default specifies **/lock:none**. Otherwise, you can specify one of the lock options. + +- The following arguments are optional and if you do not supply them, none of their effects apply to the command: + + - **/recursive**: If you want to recursively check out multiple items in a folder, you must specify this option verbatim. + + - **/login**:*username**,password*: If you want to run the command as another user, you must specify the **/login** option verbatim, replace *username* with the name of the user, and if necessary, you can supply the password. + +## Specify the items affected by a command + +You can use itemspecs and versionspecs to specify which items are affected by a command. + +<a name="itemspec"> + +#### Use an itemspec argument to specify affected items + +You use an *itemspec* (item specification) to specify the items affected by a command. You can specify items either on a client machine or on your Team Foundation Server. You can use wildcard characters such as **\*** and **?**. + +#### Client itemspec arguments + +A client itemspec argument specifies a path to items on a client machine such as a folder (for example, **c:\\code\\SiteApp\\Main\\SolutionA\\**) a file (for example, **c:\\code\\SiteApp\\Main\\SolutionA\\Project1\\program.cs** or multiple files (for example, **c:\\code\\SiteApp\\Main\\SolutionA\\\*.cs**. You can also specify UNC paths such as **\\\\myshare\\code\\SiteApp\\Main**. + +#### Server itemspec arguments + +A server itemspec argument specifies a path to items on your Team Foundation Server such as a folder (for example, **$/SiteApp/Main/SolutionA**) a file (for example, **$/SiteApp/Main/SolutionA/Project1/program.cs** or multiple files (for example, **$/SiteApp/Main/SolutionA/\*.cs**. + +You typically use server itemspec arguments when you need run a command on items not on the client machine. For example, you are working on a dev machine and need to get some revision history data about some items that are in a team project collection you don’t work in: + + c:\>tf history /collection:http://fabrikam-3:8080/tfs/DefaultCollection + $/SiteApp/Main/SolutionA/Project1/* /recursive + /noprompt + +#### Multiple itemspec arguments + +For some commands, you can specify multiple *itemspec* arguments. For example: + + c:\code\SiteApp\Main\SolutionA\Project1\>tf checkout program1.cs program2.c + +Checks out program.cs and program2.c. + +### Use a versionspec argument to specify affected versions of items + +You use a *versionspec* (version specification) to specify the version of items affected by a command. To provide a *versionspec* you can: + +- Use the **/version** option. For example: **/version:C44**. + +- Append the versionspec to an itemspec with a semicolon. For example: **program1.cs;C44**. + +When you use the [History command](history-command.md) or the [Difference Command](difference-command.md), you can specify a range of versions by separating the versions with a tilde (~). For example: + + c:\code\SiteApp\Main\SolutionA>tf history /noprompt * /recursive /v:D4/12/2012~D4/24/2012 + +Use the following syntax to specify a *versionspec*. + +<table> +<thead> +<tr> +<th><p>Type</p></th> +<th><p>Syntax</p></th> +<th><p>Description</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>Changeset</p></td> +<td><p><strong>[C]</strong><i>n</i></p></td> +<td><p>Specifies items based on a changeset number. If an item that is in scope was not modified in the specified changeset, the system takes the latest version of the item that occurred before the specified changeset.</p> +<div class="alert"> +<table> +<thead> +<tr> +<th><strong>Tip</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>You can omit the <i>C</i> if you specify only a number.</p></td> +</tr> +</tbody> +</table> +</div> +<p><strong>Examples</strong></p> + +<div id="CodeSnippetContainerCode_ef3e28b0-5bde-46de-89e7-1607a4329249" class="codeSnippetContainerCode" dir="ltr"> +<div style="color:Black;"> +<pre><code>c:\code\SiteApp\Main>tf get readme.txt /v:C8</code></pre> +</div> +</div> +<p>-- or --</p> +<div id="code-snippet-7" class="codeSnippetContainer" xmlns=""> +<div class="codeSnippetContainerTabs"> + +<div id="CodeSnippetContainerCode_3ec2c94a-8633-431c-b2d0-29836c305073" class="codeSnippetContainerCode" dir="ltr"> +<div style="color:Black;"> +<pre><code>c:\code\SiteApp\Main>tf get readme.txt /v:8</code></pre> +</div> +</div> + +<p>-- or --</p> + +<div id="CodeSnippetContainerCode_69203803-1efd-4882-8d47-b4c20c45426a" class="codeSnippetContainerCode" dir="ltr"> +<div style="color:Black;"> +<pre><code>c:\code\SiteApp\Main>tf get readme.txt;8</code></pre> +</div> +</div> + +<p>If readme.txt was modified in changeset 8, gets that version of the file. Otherwise, gets the most recent version of readme.txt before version 8.</p></td> +</tr> +<tr> +<td><p>Label</p></td> +<td><p><strong>L</strong><i>label</i></p></td> +<td><p>Specifies items to which <i>label</i> was applied.</p> +<p><strong>Examples</strong></p> + +<div id="CodeSnippetContainerCode_08cf74c6-4a77-4c72-b034-1b2f0360d827" class="codeSnippetContainerCode" dir="ltr"> +<div style="color:Black;"> +<pre><code>c:\code\SiteApp\Main>tf get readme.txt;LJulyHotFix</code></pre> +</div> +</div> + +<p>Gets the version of readme.txt that was labeled <strong>JulyHotFix</strong>.</p> + +<div id="CodeSnippetContainerCode_3517ab06-4897-4514-bf12-fb70aa3848f4" class="codeSnippetContainerCode" dir="ltr"> +<div style="color:Black;"> +<pre><code>c:\code\SiteApp\Main>tf get /version:LLastKnownGood</code></pre> +</div> +</div> + +<p>Retrieves the version of all labeled items (and deletes those items not labeled) in the workspace as they existed when the changeset labeled as <strong>LastKnownGood</strong> was created, for example, perhaps as part of an <a href="../build-release/concepts/definitions/build/triggers.md">automated build process<a/>.</p></td> +</tr> +<tr> +<td><p>Date and time</p></td> +<td><p><strong>D</strong><i>yyyy-mm-ddTxx:xx</i></p> +<p>—or—</p> +<p><strong>D</strong><i>mm/dd/yyyy</i></p> +<p>—or—</p> +<p>Any .NET Framework-supported format.</p> +<p>—or—</p> +<p>Any of the date formats supported on the local machine.</p></td> +<td><p>Specifies a changeset created on a specified date and time.</p> +<p><strong>Examples</strong></p> + +<div id="CodeSnippetContainerCode_3e2c85b3-6c9b-4323-92f7-f43b953c7f15" class="codeSnippetContainerCode" dir="ltr"> +<div style="color:Black;"> +<pre><code>c:\code\SiteApp\Main>tf get /version:D2004-03-22</code></pre> +</div> +</div> + +<p>Updates the workspace to match the codebase as it existed on 3/22/2004 at 00:00 (midnight).</p> + +<div id="CodeSnippetContainerCode_1f0ebab8-23be-4987-bf44-3424224903c9" class="codeSnippetContainerCode" dir="ltr"> +<div style="color:Black;"> +<pre><code>c:\code\SiteApp\Main>tf get /version:D2004-03-22T09:00</code></pre> +</div> +</div> + +<p>Updates the workspace to match the codebase as it existed on 3/22/2004 at 09:00 (9 AM).</p> +<p>For more information about .NET Framework-supported date and time formats see [DateTime](https://msdn.microsoft.com/library/system.datetime) and [Standard Date and Time Format Strings](https://msdn.microsoft.com/library/az4se3k1).</p></td> +</tr> +<tr> +<td><p>Workspace (current)</p></td> +<td><p><strong>W</strong></p></td> +<td><p>Specifies the version in your workspace.</p></td> +</tr> +<tr> +<td><p>Workspace (specified)</p></td> +<td><p><strong>W</strong><i>workspacename</i>; <i>workspaceowner</i></p></td> +<td><p>Specifies the version in a specified workspace.</p> +<p>For example: <strong>WResolveRIConflicts;PeterW</strong></p></td> +</tr> +<tr> +<td><p>Tip</p></td> +<td><p><strong>T</strong></p></td> +<td><p>Specifies the most recent version.</p></td> +</tr> +</tbody> +</table> + +## Use options to modify how a command functions + +You can use some common options to modify how a command functions. + +### Use the /noprompt option to suppress requests for data input and redirect output data to the command prompt window + +Use the **/noprompt** option to suppress requests for data input and redirect output data to the command prompt window. This option can be useful when you need to use version control commands in a script because the command proceeds without intervention by a user, and the data is available for the script to perform operations such as parsing or capturing. + +When you use this option, the system: + +- Suppresses all requests for input: + + - Questions are not asked in the command prompt window. For example, when you use the [Undo command](undo-command.md) with this option, the system does not prompt you to confirm if you want to proceed with undoing the changes. + + - Windows and dialog boxes are not presented. For example, you use this option with the [Checkin command](checkin-command.md). Instead of displaying the **Check In** dialog box for you to confirm your options (which items you want to check in or which work items to associate), the system proceeds with the check in without confirmation. + +- Redirects output data to the command prompt. For example, you use this option with the [History command](history-command.md). The data is displayed in the command prompt window instead of the [History window](get-history-item.md). + +### Use /login option to specify credentials when running a command + +Use the **/login** option to specify the Team Foundation Server user account to run a command. This option can be useful when you are working at the machine of another team member. + +For example, Julia is working with Peter at his dev machine. She uses the [Lock command](lock-command.md) to unlock a file that she locked earlier: + + c:\code\SiteApp\Main> tf lock /lock:none program.cs /login:JuliaI,JuliaPassword + +If she wants to avoid having her password appear in the command prompt, she can enter the command without the password: + + c:\code\SiteApp\Main> tf lock /lock:none program.cs /login:JuliaI + +After she enters this command, the system then prompts her to type her password in a dialog box that masks her input. + +### Use the /lock option to apply or remove a lock + +<table> +<thead> +<tr> +<th> <strong>Important</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>As a best practice, use the <strong>/lock</strong> option with discretion and notify your teammates why you are locking an item, and when you plan to remove the lock.</p></td> +</tr> +</tbody> +</table> + +Use the **/lock** option to apply or remove a lock at the same time you run another command such as [Add](add-command.md) or [Edit](checkout-or-edit-command.md). + + /lock:(none|checkin|checkout) + +- **None**: No lock is placed on an item. If a lock is already in place, it is removed. + +- **Checkin** or **Checkout**: Applies a lock. See [Understand lock types](understand-lock-types.md). + +>**Note:** +>In a few cases, the lock operation can fail: +> +>- If any other users have locked any of the specified items, the lock operation will fail. +>- The system ignores this switch if there is already a pending change to the item. In this case, you must use the [Lock Command](lock-command.md) to change a lock on an item. + +### Use option shortcuts + +You can abbreviate the following options. + +<table> +<thead> +<tr> +<th><p>Option</p></th> +<th><p>Option Alias</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/comment</strong></p></td> +<td><p><strong>-C</strong></p></td> +</tr> +<tr> +<td><p><strong>/computer</strong></p></td> +<td><p><strong>-M</strong></p></td> +</tr> +<tr> +<td><p><strong>/delete</strong></p></td> +<td><p><strong>-D</strong></p></td> +</tr> +<tr> +<td><p><strong>/force</strong></p></td> +<td><p><strong>-P</strong></p></td> +</tr> +<tr> +<td><p><strong>/format</strong></p></td> +<td><p><strong>-F</strong></p></td> +</tr> +<tr> +<td><p><strong>/help</strong></p></td> +<td><p><strong>-?, -H</strong></p></td> +</tr> +<tr> +<td><p><strong>/lock</strong></p></td> +<td><p><strong>-K</strong></p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p><strong>-Y</strong></p></td> +</tr> +<tr> +<td><p><strong>/newname</strong></p></td> +<td><p><strong>-N</strong></p></td> +</tr> +<tr> +<td><p><strong>/noprompt</strong></p></td> +<td><p><strong>-I</strong></p></td> +</tr> +<tr> +<td><p><strong>/owner</strong></p></td> +<td><p><strong>-O</strong></p></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p><strong>-R</strong></p></td> +</tr> +<tr> +<td><p><strong>/server</strong></p></td> +<td><p><strong>-S</strong></p></td> +</tr> +<tr> +<td><p><strong>/slotmode</strong></p></td> +<td><p><strong>-X</strong></p></td> +</tr> +<tr> +<td><p><strong>/template</strong></p></td> +<td><p><strong>-T</strong></p></td> +</tr> +<tr> +<td><p><strong>/user</strong></p></td> +<td><p><strong>-U</strong></p></td> +</tr> +<tr> +<td><p><strong>/version</strong></p></td> +<td><p><strong>-V</strong></p></td> +</tr> +<tr> +<td><p><strong>/workspace</strong></p></td> +<td><p><strong>-W</strong></p></td> +</tr> +</tbody> +</table> + +## Understand exit codes + +Version control commands return the following exit codes: + +<table> +<thead> +<tr> +<th><p>Exit Code</p></th> +<th><p>Definition</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>0</strong></p></td> +<td><p>Success.</p></td> +</tr> +<tr> +<td><p><strong>1</strong></p></td> +<td><p>Partial success; this means at least something, or possibly everything, failed to succeed.</p></td> +</tr> +<tr> +<td><p><strong>2</strong></p></td> +<td><p>Unrecognized command.</p></td> +</tr> +<tr> +<td><p><strong>100</strong></p></td> +<td><p>Nothing succeeded.</p></td> +</tr> +</tbody> +</table> + +For example: + + c:\code\SiteApp\Main\SolutionA\Project1\>tf checkout program1.cs program2.c + +If one of the files you are trying to check out does not exist on the server, the command returns **1** to indicate partial success. diff --git a/docs/tfvc/use-visual-studio-git.md b/docs/tfvc/use-visual-studio-git.md new file mode 100644 index 00000000000..28d320fe677 --- /dev/null +++ b/docs/tfvc/use-visual-studio-git.md @@ -0,0 +1,16 @@ +--- +title: Use Visual Studio with Git +description: Use Visual Studio with Git +ms.assetid: 32f46ecd-1b03-4ef0-a9c4-8a120da2b03f +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Use Visual Studio with Git + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +See [the Git overview](../git/overview.md). diff --git a/docs/tfvc/view-branch-hierarchy-team-project.md b/docs/tfvc/view-branch-hierarchy-team-project.md new file mode 100644 index 00000000000..0e7b453675c --- /dev/null +++ b/docs/tfvc/view-branch-hierarchy-team-project.md @@ -0,0 +1,97 @@ +--- +title: View the branch hierarchy of a team project +description: View the branch hierarchy of a team project +ms.assetid: 7ecab78e-f9f5-43d1-982f-b300ee1c4c16 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# View the branch hierarchy of a team project + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +As a project grows, typically the branch structure also grows and becomes more complex. Your team members, especially those who are new, will require answers to simple questions such as the following: + +- What branches are in our team project? + +- How are these branches related to each other? + +- If I need changes from another feature team, which branches will those changes have to go through to get back to me? Who owns these branches? + +The following procedures explain how to use Team Foundation version control to answer these types of questions. + +## To View and Work with Your Branches + +You can use the **Hierarchy** window to perform the following tasks: + +- View a subset, or all, of your branches in a hierarchical view. + +- View properties of a specific branch. + +- Complete tasks for a specific branch. + +<table> +<thead> +<tr> +<th> <strong>Important</strong></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>This procedure can be performed on a branch and not on a folder. For example, in the following illustration you can see which objects are branches and which are folders.</p> +<p><img src="_img/view-branch-hierarchy-team-project/IC268252.png" title="A branch and a folder" alt="A branch and a folder" /></p> +<p>For more information, see <a href="branch-folders-files.md">Branch folders and files</a>.</p></td> +</tr> +</tbody> +</table> + +### Display the Hierarchy Window from Source Control Explorer + +1. In **Source Control Explorer**, click the branch from which you want to begin to explore your branch structure. + +2. Click the **File** menu, point to **Source Control**, point to **Branching and Merging**, and then click **View Hierarchy**. + +### Adjust the View to Show the Data You Need + +When you first display the **Hierarchy** window, by default, the branch that is shown is the branch from which you started the window, including its ancestors and its descendants. + +For example, the following illustration shows the **Hierarchy** window for the DinnerNow **Test** branch. + +**Hierarchy window showing DinnerNow Test branch with ancestors and descendants** + +![Hierarchy window](_img/view-branch-hierarchy-team-project/IC363705.png) +The options that you can use to modify the view in this window are explained in the following list: + +- **A. Show menu **You can select a typical view from the **Show** menu: **All hierarchies**, **Full hierarchy**, **Ancestors and descendants**, **Ancestors**, **Parent and children**, **Children**, or **Customized**. + + >**Tip:** + > If you want to see the full hierarchy for every version control path in your team project, including those that are outside the scope of the active team project in Source Control Explorer, select **All hierarchies**. + +- **B. Customize branch list button **Click this button to individually select the specific branches that you want to show. + + The **Select Branches** dialog box appears. + + - In the Branches list, select or clear the check boxes for the branches that you want to show or hide. + + - As you select or clear check boxes, a preview of your selections appears on the right-hand side of the dialog box. + + - If your team has many branches, you can more easily specify the branches that you want by clicking the buttons above the preview. You can point to each button to display information about what the button does. + +- **C. View controls on branches**-If you want to fine tune details of your diagram, you can click a specific branch and then click one of the following controls: + + - Click X to hide the branch (or press DELETE while the branch is selected). + + - Click the plus (+) symbol (or press INSERT while the branch is selected) to select or de-select which child branches you want to display. + +### View Properties and Take Actions + +After you view the branch hierarchy, you may need more information, or you may be ready to take some action. You can right-click any branch in the **Hierarchy** window and perform any one of the following steps: + +- Select **Properties** to display the **Properties** dialog box, which you can use to view additional information about the branch, including its path, who owns it, and who has permissions to work with it. + + The Owner field is only for information. Being named in the Owner field conveys no additional permissions. + +- Select an action such as: **Branch**, **Merge**, **Compare**, or **Open in Source Control Explorer**. diff --git a/docs/tfvc/view-command.md b/docs/tfvc/view-command.md new file mode 100644 index 00000000000..9d47e7cb60c --- /dev/null +++ b/docs/tfvc/view-command.md @@ -0,0 +1,159 @@ +--- +title: Retrieve a file using the TFVC View Command +description: Retrieve a file using the TFVC View Command for VSTS or TFS +ms.assetid: d67fcb55-6f54-434f-ba05-4564f976b8d9 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# View Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +The **view** command retrieves a specific version of a file to a temporary folder on your computer and displays it. + +**Required Permissions** + +To use the **view** command, you must have the **Read** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf view [/collection:TeamProjectCollectionUrl] [/console] [/recursive] [/output:localfile] + [/shelveset:shelvesetname[;owner]] [/noprompt] itemspec + [/version:versionspec] [/login:username,[password]] +## Parameters<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><em>TeamProjectCollectionUrl</em></p></td> +<td><p>The URL of the team project collection that contains a specific version of a file about which you want to retrieve information (for example, http://myserver:8080/tfs/DefaultCollection).</p></td> +</tr> +<tr> +<td><p><em>shelvesetname [:owner]</em></p></td> +<td><p>Identifies the shelveset. The optional <em>owner</em> argument is used to specify a shelveset that is not owned by the current user.</p></td> +</tr> +<tr> +<td><p><em>Itemspec</em></p></td> +<td><p>Identifies the file or folder to retrieve. For more information about how Team Foundation parses itemspecs to determine which items are within scope, see <a href="https://msdn.microsoft.com/library/4y2ash30">Command-Line Options</a>.</p> +<div class="alert"> +<div class="mtps-table" xmlns="http://www.w3.org/1999/xhtml"> +<div class="mtps-row"> +**Note** +</div> +<div class="mtps-row"> +You can specify more than one *Itemspec* argument. +</div> +</div> +</div></td> +</tr> +<tr> +<td><p><em>Versionspec</em></p></td> +<td><p>Provides a value such as C3 for the <strong>/version</strong> option. For more information about how Team Foundation parses a version specification to determine which items are within its scope, see <a href="https://msdn.microsoft.com/library/56f7w6be">Command-Line Syntax (Version Control)</a>.</p></td> +</tr> +<tr> +<td><p><em>username</em></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>DOMAIN</em>\<em>UserName</em> or <em>UserName</em>.</p></td> +</tr> +<tr> +<td><p><em>localfile</em></p></td> +<td><p>Provides the path of the folder to which you want to output the file.</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p><strong>Option</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/console</strong></p></td> +<td><p>Specifies that the file output should be directed to the console. This is useful if you want to write the file out to disk using console redirection (with a different name or location than the versioned item).</p></td> +</tr> +<tr> +<td><p><strong>/recursive</strong></p></td> +<td><p>Views all items in the specified directory and any subdirectories.</p></td> +</tr> +<tr> +<td><p><strong>/shelveset</strong></p></td> +<td><p>Specifies the shelveset by name.</p></td> +</tr> +<tr> +<td><p><strong>/noprompt</strong></p></td> +<td><p>Specifies that Team Foundation should not prompt you before displaying each file when you include a wildcard in an <em>itemspec</em> that matches more than one file.</p></td> +</tr> +<tr> +<td><p><strong>/version</strong></p></td> +<td><p>Specifies the version of the file to open for viewing. If you omit this option, <strong>view</strong> retrieves the latest Team Foundation version control server version.</p></td> +</tr> +<tr> +<td><p><strong>/collection</strong></p></td> +<td><p>Specifies the team project collection.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td> +</tr> +<tr> +<td><p><strong>/output</strong></p></td> +<td><p>Outputs the file to a local folder instead of invoking a Windows shell to open the file.</p></td> +</tr> +</tbody> +</table> +## Remarks +The **view** command of the **tf** command-line utility retrieves a read-only copy of a file from the Team Foundation version control server to a temporary folder on your computer and displays its contents. Unless you specify a particular version, Team Foundation retrieves the latest version of the file from the Team Foundation version control server. + +The **view** command does not retrieve files into your workspace or check them out. See [Get Command](get-command.md) and [Checkout and Edit Commands](checkout-or-edit-command.md) for more information about how to get the Team Foundation version control server version of and check out files. + +You can use the [Difference Command](difference-command.md) to view the differences between two versions of a file. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### Output Options + +By default, Team Foundation displays the contents of the file in the viewer associated with its file type. + +If you include the **/console** option, Team Foundation prints the contents of the file to the command console. Likewise, if Team Foundation cannot locate a viewer for the type of file you have specified, it prints the contents of the file to the command console. + +Finally, you can redirect the contents of a file to standard out using **|** or **\>** in order to save it in another file or pass it to another program for post-processing. +## Examples +The following example displays the latest version of the file 314.c. + + c:\projects>tf view 314.c + +The following example displays the version of 314.c that was checked in with changeset 1999. + + c:\projects>tf view /version:C1999 314.c + +The following example retrieves version 5 of 314.c and writes it to the file 314.old. + + c:\projects>tf view /version:5 314.c > 314.old + +The following example displays the latest version of each file that matches the wildcard "\*.cs". + + c:\projects>tf view *.cs + +## See Also + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Checkout and Edit Commands](checkout-or-edit-command.md) + +[Get Command](get-command.md) + +[Difference Command](difference-command.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) diff --git a/docs/tfvc/view-file-changes-using-annotate.md b/docs/tfvc/view-file-changes-using-annotate.md new file mode 100644 index 00000000000..572d79e920e --- /dev/null +++ b/docs/tfvc/view-file-changes-using-annotate.md @@ -0,0 +1,76 @@ +--- +title: View file changes using annotate +description: View file changes using annotate +ms.assetid: 34e29de4-0972-4e32-9d3d-26dc09f00713 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# View file changes using annotate + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +You can annotate a file to learn who made changes and what changes they made in all earlier versions of the file. + +**Required Permissions** + +To perform these procedures, you must have the **Read** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + +### To annotate a file + +1. On the menu bar, choose **View**, **Other Windows**, **Source Control Explorer**. + +2. In **Source Control Explorer**, go to the version of the file you want to annotate, open its shortcut menu, and then choose **Annotate**. + + The **Annotated** window displays the annotated file. + + Each annotation appears to the left of the text that was changed and displays: + + - Changeset number, or **Local** if you have pending changes in your local workspace. To get more information about the changeset, choose the changeset number. + + - The name of the person who made the change. + + - Date. + + When you move the pointer over an annotation, the following information appears: + + - **Path**: The path of the changeset. + + - **Changeset**: The changeset number. + + - **Owner**: The name of the person who made the change. + + - **Change**: The type of change. + + - **Date**: The date of the changeset. + + - **Lines**: The line numbers where the changes were made. + + - **Comment**: The changeset check-in comment. + +3. You can open the shortcut menu for an annotation, and then choose: + + - **Changeset Details** to display, in **Team Explorer** the **Changeset Details** page. + + - **View History** to open the **History** window. + + - **Compare With Previous Version** to compare, in the [Diff window](compare-files.md), the version you are examining with the previous version. + + If you have pending changes in your local workspace you can open the shortcut menu for the **Local** annotation information and choose **Compare With Workspace Version (\<server name\>)** to compare, in the [Diff window](compare-files.md), the version you are examining with the version you checked out from the server. + + - **Annotate This Version** to open a new **Annotate** window that displays annotation information for the selected version and all earlier versions of the file. + + - **Track Changeset**: to see to which branches the changeset has been merged. For more information, see [View where and when changesets have been merged](view-where-when-changesets-have-been-merged.md). + + - **Get This Version** to download the selected version of the file to your local workspace. + +## See Also + +#### Other Resources + + [Compare files](compare-files.md) + + [Resolve Team Foundation Version Control conflicts](resolve-team-foundation-version-control-conflicts.md) diff --git a/docs/tfvc/view-manage-past-versions.md b/docs/tfvc/view-manage-past-versions.md new file mode 100644 index 00000000000..c67b711a5a3 --- /dev/null +++ b/docs/tfvc/view-manage-past-versions.md @@ -0,0 +1,33 @@ +--- +title: View and manage past versions +description: View and manage past versions +ms.assetid: 752b4a6f-4212-4117-a994-03856d0c8ea9 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# View and manage past versions + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +One advantage of building your app under version control is that you can look back in time to get detailed information about what changes have been made to your files. Team Foundation Version Control (TFVC) maintains historical data related to every version of every file that has ever been checked in. + +## What do you want to do? + + [Get the history of an item](get-history-item.md) +Get detailed information about what changes have been made to your files. + + [View file changes using annotate](view-file-changes-using-annotate.md) +You can annotate a file to learn who made changes and what changes they made in all earlier versions of the file. + + [Use labels to take a snapshot of your files](use-labels-take-snapshot-your-files.md) +Use labels to take a snapshot of your files so that at a later date you can easily refer back to that snapshot. + + [Find and view changesets](find-view-changesets.md) +Changesets make up the history of each item in version control. You can look at a changeset to get detailed information about past changes. + + [Roll back changesets](roll-back-changesets.md) +You can roll back the effects of one or more changesets. diff --git a/docs/tfvc/view-where-when-changesets-have-been-merged.md b/docs/tfvc/view-where-when-changesets-have-been-merged.md new file mode 100644 index 00000000000..9bac658fb71 --- /dev/null +++ b/docs/tfvc/view-where-when-changesets-have-been-merged.md @@ -0,0 +1,120 @@ +--- +title: View where and when changesets have been merged +description: View where and when changesets have been merged +ms.assetid: 457567ff-7da3-4098-b047-bd169bad5a38 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# View where and when changesets have been merged + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Branching your code base can be a useful way to isolate concurrent development efforts and to take snapshots. However, when your team members are working in a branched code base, they may have trouble finding information about which branches have received a particular set of changes and when those changes were merged. + +For example, your team (Feature Team B) waits for a fix to a bug in some code on which your code depends. You receive an e-mail message that states that the bug has been fixed, but you can still reproduce the bug in the builds that come from your branch. + +By opening the **Tracking Changeset** window, you can determine which branches have and have not received a set of changes. For example, in the following illustration, the **Tracking Changeset** window shows how changeset 38 was merged from the **Dev** branch to a child branch and then baselessly merged to two other branches. + +Tracking Changeset window shows branches to which a changeset has merged + +![](_img/view-where-when-changesets-have-been-merged/IC451984.png) + +**Required Permissions** + +To perform these procedures, your **Read** permission must be set to **Allow** for the branches with which you are working. For more information about permissions, see [Permissions and groups reference](../security/permissions.md). + +## View the Tracking Changeset Window + +>**Important:** +>These procedures can be performed only on a branch, not on a folder. +>![](_img/view-where-when-changesets-have-been-merged/IC268252.png) +>For more information about how to branch, see [Branch folders and files](branch-folders-files.md). + +### To view the Tracking Changeset Window from the History window of a branch or file + +1. In **Source Control Explorer**, click a branch or a folder or file that is contained by a branch. + +2. Click the **File** menu, point to **Source Control**, and then click **View History**. + +3. In the **History** window, right-click the changeset that you want to view, and click **Track Changeset**. + + The **Select Branches** dialog box appears. + +4. (Optional) In the **Branches** list, select or clear the check boxes for the branches that you want to show or hide. + + As you select or clear check boxes, a preview of your selections appears on the right-hand side of the dialog box. + +5. (Optional) If your team has a lot of branches, click the buttons above the preview to select the branches that you want more easily. + + You can move the pointer over each button to get information about what the button does. + +6. Click **Visualize**. + +### To view the Tracking Changeset window from a work item that is linked to a changeset + +1. Open a work item that is linked to one or more changesets, and then click ![](_img/view-where-when-changesets-have-been-merged/IC267918.gif) **Track Work Item**. + + The **Select Branches** dialog box appears. + +2. (Optional) In the **Branches** list, select or clear the check boxes for the branches that you want to show or hide. + + As you select or clear check boxes, a preview of your selections appears on the right-hand side of the dialog box. + +3. (Optional) If your team has lots of branches, click the buttons above the preview to select the branches that you want more easily. + + You can move the pointer over each button to show information about what the button does. + +4. Click **Visualize**. + +### Overview of the Tracking Changeset Window + +- The following illustration shows an example of a changeset in the DinnerNow team project. + +Tracking Changeset window elements + +![](_img/view-where-when-changesets-have-been-merged/IC451985.png) + +The previous example illustrates how you can use the **Tracking Changeset** window to visualize the following information: + +- The branches to which the changeset has been merged (displayed in green), including the numbers of changesets in which the merge was implemented. + + >**Tip:** + >You can click one of these branches (for example, **Version2** in the previous example) to highlight all the merges that were required for the changeset to reach that branch. + +- Whether the merge was a standard merge (solid line) or a baseless merge (dashed line). + +- If a branch has received some (but not all) of the changes in a changeset, the branch is filled with a pattern, and an asterisk follows the changeset numbers within that branch. For example, the previous illustration shows that only some of the changes in changeset 38 were merged to the **Test** branch. + +- The branches to which the changeset has not been merged (displayed in light blue). + +## Switch to Timeline View + +You can get information about when a changeset was merged to one or more branches by switching to the Timeline View. This view shows not only the sources and targets of each merge but also when the merge occurred. + +**Required Permissions** + +To perform these procedures, your **Manage branch object** permission must be set to **Allow**. For more information about permissions, see [Permissions and groups reference](../security/permissions.md). + +### To display the Timeline View of a changeset + +- Open the **Tracking Changeset** or **Tracking Work Item** window, and then click ![](_img/view-where-when-changesets-have-been-merged/IC267920.gif) **Timeline Tracking**. + +### Example: Using Timeline View + +The previous illustration shows that two baseless merges and one standard merge occurred. When you click ![](_img/view-where-when-changesets-have-been-merged/IC267920.gif) **Track on Timeline View**, the **Tracking Changeset** window switches to a view that shows the sequence of the merges. + +Timeline View provides detailed chronological data + +![](_img/view-where-when-changesets-have-been-merged/IC348439.png) + +The branches that have received the changeset appear at the top of the view. In the previous example, the user has clicked the **Version1** branch to show the date and time when the merge occurred. + +The branches to which the changeset has not been merged (for example, **FeatureB** and **Main** in the previous illustration) appear in white at the bottom of the view. + +## Use the Drag and Drop Operation to Merge Branches + +You can use the drag and drop feature to merge a changeset or a branch to another branch. For more information, see [Merge folders and files](merge-folders-files.md). diff --git a/docs/tfvc/work-version-control-locks.md b/docs/tfvc/work-version-control-locks.md new file mode 100644 index 00000000000..f70ff1a088d --- /dev/null +++ b/docs/tfvc/work-version-control-locks.md @@ -0,0 +1,28 @@ +--- +title: Work with version control locks +description: Work with version control locks +ms.assetid: 097adb8d-9509-48bb-804e-37456ff80ee8 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Work with version control locks + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +This section describes how to lock a file or folder to prevent it from being checked out and altered. You lock a file or folder using Team Foundation version control locks. + +## In This Section + +[Understand lock types](understand-lock-types.md) +Explains the various types of locks that can be applied against the source control server and how to use them. + +[Lock and unlock folders or files](lock-unlock-folders-files.md) +Explains the steps used to lock and unlock source control items. + +## Reference + + [Use Team Foundation version control commands](use-team-foundation-version-control-commands.md) diff --git a/docs/tfvc/workfold-command.md b/docs/tfvc/workfold-command.md new file mode 100644 index 00000000000..c59470802a7 --- /dev/null +++ b/docs/tfvc/workfold-command.md @@ -0,0 +1,179 @@ +--- +title: Workfold Command +description: Workfold Command +ms.assetid: f4d18139-bd2e-4621-be4e-a761ca537280 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Workfold Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Creates, modifies, or displays information about the mappings between your workspace folders and the folders on the server for Team Foundation version control. + +**Required Permissions** + +To use the **workfold** command, you must be the owner of the specified or implied workspace or have the global **Administer workspaces** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf workfold localfolder [/login:username,[password]] + + tf workfold [/workspace:workspacename] [/login:username,[password]] + + tf workfold [/collection:TeamProjectCollectionUrl] [/workspace:workspacename] [/login:username,[password]] + serverfolder + + tf workfold [/map serverfolder localfolder] [/collection:TeamProjectCollectionUrl] + [/workspace:workspacename][/login:username,[password] + + tf workfold /unmap [/collection:TeamProjectCollectionUrl] [/workspace:workspacename] + [/recursive] (serverfolder|localfolder) [/login:username,[password]] + + tf workfold /cloak + serverfolder [/workspace:workspacename] [/collection:TeamProjectCollectionUrl] [/login:username,[password]] + + tf workfold /decloak serverfolder + [/workspace:workspacename] [/collection:TeamProjectCollectionUrl][/login:username,[password]] + +## Parameters<table> +<thead> +<tr> +<th><p><strong>Argument</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><i>workspacename</i></p></td> +<td><p>Specifies the name of the workspace on which the command operates for the <strong>/workspace</strong> option.</p></td> +</tr> +<tr> +<td><p><i>serverfolder</i></p></td> +<td><p>Specifies the name of a Team Foundation version control server folder.</p></td> +</tr> +<tr> +<td><p><i>localfolder</i></p></td> +<td><p>Specifies the name of a local folder.</p></td> +</tr> +<tr> +<td><p><i>TeamProjectCollectionUrl</i></p></td> +<td><p>The URL of the team project collection that contains the folders that you want to compare with server folders (for example, http://myserver:8080/tfs/DefaultCollection/).</p></td> +</tr> +<tr> +<td><p><i>username</i></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <i>DOMAIN</i>\<i>UserName</i> or <i>UserName</i>.</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p><strong>Option</strong></p></th> +<th><p><strong>Description</strong></p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/workspace</strong></p></td> +<td><p>Specifies the name of the workspace to work in.</p></td> +</tr> +<tr> +<td><p><strong>/map</strong></p></td> +<td><p>Specifies an association between a local folder and the Team Foundation version control server folder. By default, the workfold command uses this option, even if unspecified, unless <strong>/unmap</strong>, <strong>/cloak</strong>, or <strong>/decloak</strong> is specified.</p></td> +</tr> +<tr> +<td><p><strong>/unmap</strong></p></td> +<td><p>Specifies which folder mapping should be removed from the workspace.</p></td> +</tr> +<tr> +<td><p><strong>/cloak</strong></p></td> +<td><p>Specifies that the folder should be excluded from any version control actions made in the workspace.</p></td> +</tr> +<tr> +<td><p><strong>/decloak</strong></p></td> +<td><p>Decloaks a folder so the folder can be retrieved into the workspace.</p></td> +</tr> +<tr> +<td><p><strong>/collection</strong></p></td> +<td><p>Specifies the team project collection.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.</p></td> +</tr> +</tbody> +</table> + +## Remarks +You can use the **workfold** command of the **tf** command-line utility to create and edit *workspace mappings*. A workspace mapping creates a client-side folder into which all files and subfolders in the Team Foundation version control server folder are retrieved when you execute a **tf** **get** operation. This **get** will not work if the client-side folder is cloaked. + +You can also specify an asterisk (\*) wildcard to map a Team Foundation Server folder and its immediate items to your local workspace. This is often referred to as single folder mapping. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### Options for Workspace Mapping + +A workspace mapping is a list of active and cloaked items. You can add Team Foundation version control server items to the mapped list in the workspace using the **/map** option. You can also exclude an item from the workspace explicitly by using the **/cloak** option. You can only cloak the items that have a mapped parent. Cloaking is an effective way to improve the speed of batch Get operations and to conserve space on disk. + +Use cloaking with discretion. To avoid compilation and integration problems, you should only cloak those items that you know to be outside the scope of your current and future projects, such as images and external documentation files. + +You can use the **/unmap** and **/decloak** options to selectively delete mapped and cloaked entries from the workspace mapping. + +### How Workspace Mappings are Applied + +By default, workspace mappings are applied recursively. When you map a local folder to a Team Foundation version control server folder, the system implicitly creates a mapping between all its current and future subfolders. For example, if you map $/projects to c:\\projects, subsequently add a project called $/projects/project\_one, and then run a **get** of the workspace, Team Foundation automatically creates a local working folder named project\_one in the C:\\projects directory. + +In this example, you can use a wildcard, "\*", to map a server folder and its immediate items to your local workspace: + + tf workfold $/projects/MyTeamProject/* C:\MyLocalWorkfold\MyTeamProject + +In this example, you can override the automatically-created mapping between $/projects/project\_one and C:\\projects\\project\_one by using the **workfold** command as follows: + + tf workfold $/projects/project_one C:\DifferentWorkfold + +### Mappings under Cloaks + +Mappings of uncloaked folders that are located beneath a cloaked folder in the version control hierarchy can be mapped to your local workspace. + +## Examples +The following example displays the mappings for the workspace in which c:\\projects resides. + + c:\projects>tf workfold + +The following example cloaks the c:\\projects\\lib folder. + + c:\projects>tf workfold /cloak c:\projects\lib + +The following example displays the mapping for the local file word.cs. + + c:\projects>tf workfold word.cs + +The following example maps the folder C:\\DifferentWorkfold to the Team Foundation version control server folder $/projects/project\_one and replaces the previous workspace mapping for the $/projects/project\_one Team Foundation version control server folder. + + c:\projects>tf workfold $/projects/project_one C:\DifferentWorkfold + +## See Also + +#### Tasks + +[Cloak and Uncloak Folders in a Workspace](optimize-your-workspace.md) + +#### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) + +[Workspace Command](workspace-command.md) + +#### Concepts + +[Create a Workspace to Work with your Team Project](create-work-workspaces.md) + +#### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) + +[Create a Workspace and Get Files for the First Time](set-up-team-foundation-version-control-your-dev-machine.md) diff --git a/docs/tfvc/workspace-command.md b/docs/tfvc/workspace-command.md new file mode 100644 index 00000000000..01284705941 --- /dev/null +++ b/docs/tfvc/workspace-command.md @@ -0,0 +1,135 @@ +--- +title: Workspace Command +description: Workspace Command +ms.assetid: a7b374f5-02c2-4318-9130-31533bf0732c +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Workspace Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Lets you create, delete, view, or modify properties and mappings associated with a workspace. + +**Required Permissions** +To modify or delete an existing workspace, you must be the owner or have the global **Administer workspaces** permission set to **Allow**. To create a workspace, you must have the global **Create a workspace** permission set to **Allow**. To create workspaces for other users, you must have the **Administer workspaces** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf workspace /new [/noprompt] [/template:workspacename[;workspaceowner]] + [/computer:computername] [/comment:("comment"|@comment file)] + [workspacename[;workspaceowner]] [/login:username,[password]] + [/collection:TeamProjectCollectionUrl] [/permission:(Private|PublicLimited|Public)] + [/location:(local|server)] + + tf workspace /delete [/collection:TeamProjectCollectionUrl] workspacename[;workspaceowner] [/login:username,[password]] + + tf workspace [/collection:TeamProjectCollectionUrl] [/comment: ("comment"|@comment file)] [/newname:workspacename] + [workspacename[;workspaceowner]] [/newowner:ownername] [/computer:computername] [/permission:(Private|PublicLimited|Public)] [/login:username,[password]] + [/location:(local|server)] + +## Parameters + +|**Argument**|**Description**| +|---|---| +|*workspacename*|Specifies a name for the workspace which to create, edit, delete, or display information about.| +|*workspaceowner*|Specifies a username for the workspace. This parameter is required when the workspace owner is not the person performing the command.| +|*computername*|Provides a value to the **/computer** option.| +|*comment*|Provides a value to the **/comment** option.| +|*@commentfile*|Specifies the path of a file where the comment should be read.| +|*username*|Provides a value to the **/login** option. You can specify a username value as either *DOMAIN*\*UserName* or *UserName*.| +|*TeamProjectCollectionUrl*|The URL of the team project collection that contains the workspace about which you want to create, edit, delete, or display information (for example, http://myserver:8080/tfs/DefaultCollection).| +|*ownername*|Provides a value to the **/newowner** option.| + +|**Option**|**Description**| +|---|---| +|**/new**|Creates a new workspace.| +|**/template**|Specifies an existing workspace to use as a template to create the new workspace. The new workspace uses the mappings of the existing workspace.| +|**/delete**|Deletes the specified workspace.| +|**/computer**|Specifies the name of the computer on which to create the workspace. This option is an advanced option.| +|**/comment**|Provides a comment describing the workspace.| +|**/newname**|Renames an existing workspace.| +|**/noprompt**|Performs the specified workspace command without displaying a dialog box.| +|**/collection**|Specifies the team project collection.| +|**/permission**|Specifies the options of workspace permission:</p><ul><li><p>Private: Only the owners can use, check in files to, or administer the workspace.</p></li><li><p>Public Limited: Any valid user can use the workspace. However, only the owners can check in files to or administer the workspace.</p></li><li><p>Public: Any valid user can use, check in files to, or administer the workspace.</p></li></ul>| +|**/location**|Specifies where the workspace is created:</p><ul><li><p>local: On the client machine. This is the default.</p></li><li><p>server: On the TFS server.</p></li></ul>| +|**/login**|Specifies the user name and password to authenticate the user with Visual Studio Team Foundation Server.| +|**/newowner**|Specifies the user name for the new owner of the workspace.| + +## Remarks + +A [workspace](create-work-workspaces.md) is a local copy of the files and folders on the server, plus any changes that you have made locally. When you add, edit, delete, move, rename, or otherwise change any version-controlled item, your changes are isolated in your workspace where you can make and test your changes. Your [pending changes](https://msdn.microsoft.com/library/ms181409) are committed to the server and become available to other users outside your workspace when you perform a check-in. + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). + +### Creating a Workspace + +Before you can add files to the version control server or check out items on the server in order to edit them, you must create a workspace or associate an existing one with the current directory. For more information, see [Create a Workspace and Get Files for the First Time](set-up-team-foundation-version-control-your-dev-machine.md). + +To make the current directory a working folder for an existing workspace on your computer, type `tf workspace` *workspacename*, where *workspacename* is the name of the existing workspace. The **Edit Workspace** dialog box appears. Click **click here to enter a new working folder**, type the server path for which you want to map the current directory in the **Source Control Folder **box, type the current directory in the **Local Folder** box, and click **OK**. + +When you create a new workspace, you can specify a *template workspace* as part of the **/new** option. When you specify a template workspace, Team Foundation creates a new workspace on the current computer, sets the owner to the current owner, and replicates the following workspace properties into the new workspace from the template workspace: mappings and comment. If no name is specified, the system uses a name based on the current computer name. When you create a workspace using a template, Team Foundation does not retrieve the files to which it maps from the server. Use the [Get Command](get-command.md) to synchronize the new workspace with the latest version on the server. + +### Single Folder Mapping + +You can choose to map only the immediate children of a version control folder to a local workspace. To do this, add an asterisk wild-card character in the **Source Control Folder** box in the **Add Workspace** dialog box. For example, $/folder/\*. Otherwise, by default, all the children of the version control folder are recursively mapped to the local workspace. + +Single folder mapping within a version control hierarchy is useful because it limits the number of items downloaded to the client computer. Another way to limit downloaded files is to cloak files that you do not need to have in your workspace. For more information, see [Cloak and Uncloak Folders in a Workspace](optimize-your-workspace.md). This provides faster download times and saves disk space on the client computer. + +### Deleting a Workspace + +If you delete a workspace that contains pending changes, Team Foundation cancels the pending changes as part of the delete process. Deleting a workspace does not delete the files and folders on the client computer that were in that workspace. + +### Editing a Workspace + +You can change the following workspace attributes: +- Workspace Name +- Comment +- Working folder mappings + +If no workspace specification is provided, the workspace for the current folder is used. + +## Examples + +The following example opens the **Add Workspace** dialog box and creates a new workspace. You can use the **Add Workspace** dialog box to edit the source control folder, owner, computer, comment, and local folders. + + c:\projects>tf workspace /new /collection:http://myserver:8080/tfs/DefaultCollection + +The following example creates a new workspace called Beta1 and assigns jenh as the workspace owner. You must have the AdminWorkspaces permission to assign ownership of a new workspace to another user. For more information on security permissions, see [Permissions and groups reference](../security/permissions.md). + + c:\projects>tf workspace /new Beta1;jenh + +The following example creates a new workspace by using the Beta1 workspace that is owned by jenh as a template. + + c:\projects>tf workspace /new /template:Beta1;jenh /collection:http://myserver:8080/tfs/DefaultCollection + +The following example removes the Beta1 workspace from the server. + + c:\projects>tf workspace /delete Beta1 + +The following example edits properties for the current workspace. + + c:\projects>tf workspace + +The following example opens the Beta1 workspace for which user jenh is the owner so that you can see its properties and mappings. If you have the AdminWorkspaces permissions, you can change the workspace properties and mappings. + + c:\projects> tf workspace Beta1;jenh + +## See Also + +### Tasks + +[Cloak and Uncloak Folders in a Workspace](optimize-your-workspace.md) +### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) +[Workspaces Command](workspaces-command.md) +### Concepts + +[Create a Workspace to Work with your Team Project](create-work-workspaces.md) +### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) +[Create a Workspace and Get Files for the First Time](set-up-team-foundation-version-control-your-dev-machine.md) diff --git a/docs/tfvc/workspaces-command.md b/docs/tfvc/workspaces-command.md new file mode 100644 index 00000000000..9ed8a1dae45 --- /dev/null +++ b/docs/tfvc/workspaces-command.md @@ -0,0 +1,153 @@ +--- +title: Workspaces Command +description: Workspaces Command +ms.assetid: 4b6f05fb-0520-44f8-8a31-7108ff956a72 +ms.prod: vs-devops-alm +ms.technology: vs-devops-tfvc +ms.manager: douge +ms.author: routlaw +ms.date: 08/10/2016 +--- + +# Workspaces Command + +**VSTS | TFS 2015 | Visual Studio 2015 | Visual Studio 2013** + +Displays information about workspaces in the system and updates cached information about a user name or computer name change on the server that is running Visual Studio Team Foundation Server. + +**Required Permissions** +To use the **workspaces** command, you must have the **Read** permission set to **Allow**. For more information, see [Permissions and groups reference](../security/permissions.md). + + tf workspaces [/owner:ownername] [/computer:computername] + [/collection:TeamProjectCollectionUrl] [/format:(brief|detailed)] + [/updateUserName:oldUserName] [/updateComputerName:oldComputerName] + [workspacename][/login:username,[password]] + + tf workspaces /remove:(*|workspace1[,workspace2,...]) + /collection:(*|TeamProjectCollectionUrl) + +## Parameters + +<table> +<thead> +<tr> +<th><p>Argument</p></th> +<th><p>Description</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><em>ownername</em></p></td> +<td><p>Provides a value to the <strong>/owner</strong> option. Specify "*" to match workspaces created by any user.</p></td> +</tr> +<tr> +<td><p><em>computername</em></p></td> +<td><p>Provides a value to the <strong>/computer</strong> option. Specify "*" to match workspaces on any computer.</p></td> +</tr> +<tr> +<td><p><em>workspacename</em></p></td> +<td><p>Specifies the name of a workspace to display information about. If a <em>workspacename</em> is not specified, information is displayed about all the workspaces in a server. You can also use the "*" wildcard character to display information about all workspaces for a server.</p></td> +</tr> +<tr> +<td><p><em>oldUserName</em></p></td> +<td><p>Provides the old user name for the <strong>/updateUserName</strong> option.</p></td> +</tr> +<tr> +<td><p><em>oldComputerName</em></p></td> +<td><p>Provides the old computer name for the <strong>/updateComputerName</strong> option.</p></td> +</tr> +<tr> +<td><p><em>TeamProjectCollectionUrl</em></p></td> +<td><p>The URL of the team project collection that contains the workspaces about which you want to display information (for example, http://myserver:8080/tfs/DefaultCollection).</p></td> +</tr> +<tr> +<td><p><em>username</em></p></td> +<td><p>Provides a value to the <strong>/login</strong> option. You can specify a username value as either <em>DOMAIN</em>\<em>UserName</em> or <em>UserName</em>.</p></td> +</tr> +</tbody> +</table> + +<table> +<thead> +<tr> +<th><p>Option</p></th> +<th><p>Description</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>/owner</strong></p></td> +<td><p>Specifies the name of the user who created the workspace. If no owner is specified, Team Foundation returns information about workspaces owned by the current user only.</p></td> +</tr> +<tr> +<td><p><strong>/computer</strong></p></td> +<td><p>Specifies the name of a client computer by which to filter the list of workspaces for the server. If no computer is specified, Team Foundation returns information about workspaces on the current computer only.</p></td> +</tr> +<tr> +<td><p><strong>/format</strong></p></td> +<td><p>Specifies the format of the workspace information. <strong>Brief</strong> returns workspace information without mappings. <strong>Detailed</strong> returns workspace information and also the mappings. The detailed format can only be used when the <strong>/collection</strong> option is specified. <strong>Brief</strong> is the default value.</p></td> +</tr> +<tr> +<td><p><strong>/updateUserName</strong></p></td> +<td><p>Updates security identification information on the Team Foundation server for a user whose network user name has been changed. If you specify this option, you must also specify a team project collection by using the <strong>/collection</strong> option.</p></td> +</tr> +<tr> +<td><p><strong>/updateComputerName</strong></p></td> +<td><p>Instructs Team Foundation to update its tables to reflect a change in the name of a client computer. If you specify this option, you must also specify a team project collection by using the <strong>/collection</strong> option.</p></td> +</tr> +<tr> +<td><p><strong>/remove</strong></p></td> +<td><p>Removes the specified workspace entries for the specified team project collection from the client cache.</p></td> +</tr> +<tr> +<td><p><strong>/collection</strong></p></td> +<td><p>Specifies the team project collection.</p></td> +</tr> +<tr> +<td><p><strong>/login</strong></p></td> +<td><p>Specifies the user name and password to authenticate the user with Team Foundation Server.</p></td> +</tr> +</tbody> +</table> + +## Remarks +The **workspaces** command of the **tf** command-line utility displays information about [workspaces](create-work-workspaces.md) on the current computer, owned by a specified user, or for all workspaces associated with a specific Team Foundation Server. For each workspace, Team Foundation displays the name, owner, comment, and computer name. With detailed output, it also shows the workspace mappings. Unless you provide a filter such as owner, computer or workspace name, Team Foundation only displays information about the workspaces that you have created. + +For more information about how to edit workspace properties, see [Workspace Command](workspace-command.md). + +For more information on how to find the **tf** command-line utility, see [Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0). +## Examples +The following example displays a list of all workspaces for the current user on the current computer. + + c:\projects>tf workspaces + +The following example displays the list of all workspaces for all users on all computers that have been created in the following team project collection at the address http://myserver:8080/tfs/DefaultCollection. + + c:\projects>tf workspaces /owner:* /computer:* /collection:http://myserver:8080/tfs/DefaultCollection + +The following example displays detailed information about all workspaces that the current user has created in the team project collection at the address http://myserver:8080/tfs/DefaultCollection. + + c:\projects>tf workspaces /computer:* /format:detailed /collection:http://myserver:8080/tfs/DefaultCollection + +The following example displays detailed information including a list of workspace mappings about the workspace "WS1," which is owned by the current user and is located on the current computer. + + c:\projects>tf workspaces /format:detailed /collection:http://myserver:8080/tfs/DefaultCollection WS1 + +The following example removes all cached workspaces from the cache in the team project collection at the address http://myserver:8080/tfs/DefaultCollection. + + c:\projects>tf workspaces /remove:* /collection:http://myserver:8080/tfs/DefaultCollection + +## See Also + +### Reference + +[Command-Line Syntax (Version Control)](https://msdn.microsoft.com/library/56f7w6be) +[Workspace Command](workspace-command.md) +[Workfold Command](workfold-command.md) +### Concepts + +[Create a Workspace to Work with your Team Project](create-work-workspaces.md) +### Other Resources + +[Tf Command-Line Utility Commands](https://msdn.microsoft.com/library/z51z7zy0) +[Create a Workspace and Get Files for the First Time](set-up-team-foundation-version-control-your-dev-machine.md) diff --git a/docs/tools.md b/docs/tools.md new file mode 100644 index 00000000000..e1b539f3e05 --- /dev/null +++ b/docs/tools.md @@ -0,0 +1,188 @@ +--- +title: Tools and clients that connect to VSTS and TFS +description: Understand the tools that support connecting with the hosted cloud offering of Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 3836C81D-6E0A-46B5-8D1D-20E973E4F373 +ms.manager: douge +ms.author: kaelli +ms.date: 03/02/2017 +--- + +#Tools and clients that connect to VSTS and TFS +<b>VSTS | TFS 2017 | TFS 2015 </b> + +Our platform of software development tools began over 20 years ago with the releases of Visual Basic and Visual Studio as an integrated development environment (IDE). Visual Studio supports a number of plug-ins which extend its functionality. In particular, the Team Explorer plug-in allows the Visual Studio client to connect to VSTS and TFS to support source control, work tracking, build, and test operations. + +The set of tools available to you that interface with VSTS and TFS include: +- Desktop client developer tools +- Office integration tools +- Web based tools +- Command-line tools +- Marketplace extensions +- REST APIs + +<!--- +###Video overview + (Video ala Robert's 1.5 min Commit) +Contrast service versus a tool +Clarify what the service provides +IDE clients +Be clear about what they pay for and what is free + +--> + +## Desktop client developer tools + +Developers have access to a variety of tools through these versions of Visual Studio and plug-ins: + +- **Visual Studio Community**: A fully-featured and extensible IDE for creating modern applications for Windows, Android, and iOS, as well as web applications and cloud services. (Replaces Visual Studio Express) +- **Visual Studio Professional**: Development tools and services to support individual developers or small teams +- **Visual Studio Enterprise**: Integrated, end-to-end development tools and solutions for teams of any size and those with a need to scale Supports designing, building and managing complex enterprise applications +- **Visual Studio Test Professional**: Provides access to Microsoft Test in addition to development tools to support quality and collaboration throughout the development process +- **[Eclipse/Team Explorer Everywhere](http://java.visualstudio.com/Docs/tools/eclipse)**: Free plug-in to support teams targeting platforms like Mac, iOS, Android, and Linux that connects to VSTS or TFS from Eclipse-based environments and non-Windows platforms +- **[Android Studio with the VSTS Plugin for Android Studio](http://java.visualstudio.com/Docs/tools/androidstudio)**: Free plug-in to support Android developers and connect to Git repositories on VSTS or TFS +- **[IntelliJ with the Visual Studio VSTS Plugin for IntelliJ](http://java.visualstudio.com/Docs/tools/intellij)**: Free plug-in to support developers who use IntelliJ IDEA to connect to Git repositories on VSTSs or TFS +- **[Visual Studio Code](http://java.visualstudio.com/Docs/tools/vscode)**: Free, open-source code editor with a free extension to support connecting to Git repositories on VSTS or TFS. + +To understand what features you get with the Visual Studio versions, see [Compare Visual Studio Offerings](https://www.visualstudio.com/vs/compare/). To download any Visual Studio version, go to the [downloads page](https://www.visualstudio.com/downloads/). + + +**Team Explorer plug-in** + +Team Explorer, a plug-in to all Visual Studio versions, provides connects Visual Studio to team projects defined in VSTS or TFS. You can manage source code, work items, and builds. To learn more, see [Work in Team Explorer](connect/work-team-explorer.md). + +> [!div class="mx-tdBreakAll"] +> |Home page with Git |Home page with TFVC | +> |-------------|----------| +> |<img src="connect/_img/te-home-page-git-repo.png" title="Team Explorer Home page with Git as source control" alt="Team Explorer Home page with Git as source control" /> | <img src="connect/_img/te-home-page-tfvc-repo.png" title="Team Explorer Home page w/ TFVC as source control" alt="Team Explorer Home page w/ TFVC as source control" /> | + + +##Office integration tools + +When you install any edition of Visual Studio or [Team Foundation Server Standalone Office Integration 2015 (free)](https://go.microsoft.com/fwlink/?LinkId=691127), the Team Foundation plug-in installed to integrate work item tracking with select Office clients. The Team Foundation plug-in installs to your existing Office client. The plug-in supports Office 2007, Office 2010, or Office 2013 versions. + +- **[Excel](work/office/bulk-add-modify-work-items-excel.md)**: Use Excel to add and bulk modify work items. +- **[Project](work/office/create-your-backlog-tasks-using-project.md)**: Using Project you can plan projects, schedule tasks, assign resources, and track changes. You have access to features that TFS doesn't support, such as a project calendar, Gantt charts, and resource views. +- **[Project Professional](work/tfs-ps-sync/synchronize-tfs-project-server.md)**: With Project Professional and the Team Foundation Server Extensions for Project Server you can manage projects that synchronize data that exists in both TFS and Project Server. Project managers and software development teams can use the tools that they prefer, work at the level of precision that supports their needs, and easily share information. +- **[PowerPoint Storyboarding](work/office/storyboard-your-ideas-using-powerpoint.md)**: Lets you illustrate user stories and requirements using PowerPoint. The Team Foundation plug-in installs to your existing PowerPoint client. + +>[!IMPORTANT] +>Support for integrating TFS with Project Server is deprecated for TFS 2017. However, synchronization support is provided by a third part. See [Synchronize TFS with Project Server](work/office/sync-ps-tfs.md) for details. + +###Task-specific clients +The following clients support specific tasks, such as managing testing efforts, providing feedback, or modifying work items. + +- **[Microsoft Test Manager](https://msdn.microsoft.com/library/jj635157.aspx)**: Allows you to manage your test efforts, create and run manual tests, and create and track bugs that are found during test efforts. Test Manager installs with Visual Studio Test Professional and Visual Studio Enterprise. +- **[Test & Feedback extension (previously called the Exploratory Testing extension)](manual-test/stakeholder/provide-stakeholder-feedback.md)**: Provides a lightweight, plug-in to a web browser. Stakeholders can respond to feedback requests for user stories and features generated in VSTS or TFS. This extension is free to stakeholders. +- **[Microsoft Feedback Client](work/connect/give-feedback.md)**: Your stakeholders can use **Microsoft Feedback Client** to record feedback for your application as video, audio, or type-written comments. This client installs with all versions of Visual Studio, or can be [installed from the free download](https://www.microsoft.com/download/details.aspx?id=30660). All feedback is stored in the work item data store and requires [stakeholders to have required permissions](https://msdn.microsoft.com/Library/vs/alm/work/connect/give-permissions-feedback). + +>[!IMPORTANT] +>Test Manager is deprecated for TFS 2017. + +##Browser-based web tools + +###Web portal +The collaboration tools supported through the web portal are summarized under [Essential services](services.md). On VSTS, new features are deployed usually every three weeks, and for TFS, usually quarterly. For release notes, see [VSTS Features Timeline](/vsts/release-notes/index). + +You can use these browsers to access the web portal (VSTS and TFS). + +Version | Edge | Internet Explorer | Safari (Mac) | Firefox | Chrome +---------------|-------------|-------------------|----------------|-------------|------------- +VSTS | most recent | 11 and later | 9.1 and later | most recent | most recent +TFS 15 | most recent | 11 and later | 9.1 and later | most recent | most recent +TFS 2015 | most recent | 9 and later | 5 and later | most recent | most recent +TFS 2013 | | 9 and later | 5 and later | most recent | most recent + +Edge, Firefox, and Chrome automatically update themselves, so VSTS and TFS support the most recent version. + +To learn more, see [Work in the web portal](connect/work-web-portal.md). + +### Browser-based extensions + +The following extensions are available from the Visual Studio Marketplace and are built and maintained by the VSTS product team. + +- [Test Manager](https://marketplace.visualstudio.com/items?itemName=ms.vss-testmanager-web): Run tests using your browser with simple pass/fail of steps, add comments/attachments, take screenshots and file bugs. You can accomplish all of this with automatic end-to-end traceability. +- [Package Management](https://marketplace.visualstudio.com/items?itemName=ms.feed): Build packages of reusable code components and share them within your organization. The Package Management extension enables continuous delivery workflows by supporting multiple packaging protocols such as NuGet and npm . It makes packages available to your team, your builds, and your releases. +- [Code search](https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search): Increases cross-team collaboration and code sharing by enabling developers to quickly locate relevant information within the code base of all team projects hosted within an account or collection. With it, you can discover implementation examples, browsing definitions, and find error text. +- [Work item search](https://marketplace.visualstudio.com/items?itemName=ms.vss-workitem-search): Quickly find relevant work items by searching across all work item fields over all projects in an account. Perform full text searches across all fields to efficiently locate relevant work items. Use in-line search filters, on any work item field, to quickly narrow down to a list of work items. + +Find additional extensions from the [Marketplace](https://marketplace.visualstudio.com) + +###Application monitoring tools + +To monitor your applications you can use Application Insights for web apps or HockeyApp for mobile apps. + +####Monitor web applications with Application Insights +Application Insights is an extensible Application Performance Management (APM) service for web developers. Use it to monitor your live web application. It will automatically detect performance anomalies. It includes powerful analytics tools to help you diagnose issues and to understand what users actually do with your app. It's designed to help you continuously improve performance and usability. It works for apps on a wide variety of platforms including .NET, Node.js and J2EE, hosted on-premises or in the cloud. + +With Application Insights you can: +- Gain actionable insights through application performance management and instant analytics +- Detect and diagnose exceptions and application performance issues +- Monitor Azure websites, including those hosted in containers, plus websites on-premises and with other cloud providers +- Seamlessly integrate with your DevOps pipeline using VSTS, GitHub, and our webhooks +- Get started from within Visual Studio, or monitor existing apps without re-deploying + +To learn more, see [Microsoft Azure - Application Insights](https://azure.microsoft.com/services/application-insights/). + +####Monitor mobile applications with HockeyApp +With HockeyApp you can develop, distribute, and beta-test your mobile apps. HockeyApp supports: +- Android, Cordova, iOS, OS X, Unity, Windows, and Xamarin apps +- Live, reliable crash reports +- Collect in-app feedback from real users +- Open-source SDKs to let you know what code is running in your apps +- Integraion with your existing build system and work item management solution + +To learn more, see [Microsoft Azure - HockeyApp](https://docs.microsoft.com/azure/application-insights/app-insights-overview). + +##Command-line tools +You can perform many code development and administrative tasks using command line tools. + +<div style="float:left;width:180px;margin:3px;font-size:90%"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Code development</p> +<ul style="padding-left:30px"> +<ul style="padding-left:5px"> + <li style="margin-bottom:2px">[Git commands](git/command-prompt.md)</li> + <li style="margin-bottom:2px">[TFVC commands](tfvc/use-team-foundation-version-control-commands.md)</li> +</ul> +</ul> +</div> +<div style="float:left;width:180px;margin:3px;font-size:90%"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Administrative tools</p> +<ul style="padding-left:5px"> + <li style="margin-bottom:2px">[TFSConfig](tfs-server/command-line/tfsconfig-cmd.md)</li> + <li style="margin-bottom:2px">[TFSDeleteProject](tfs-server/command-line/tfsdeleteproject-cmd.md)</li> + <li style="margin-bottom:2px">[TFSSecurity](tfs-server/command-line/tfssecurity-cmd.md)</li> + <li style="margin-bottom:2px">[TFSServiceControl](tfs-server/command-line/tfsservicecontrol-cmd.md)</li> + <li style="margin-bottom:2px">[witadmin (work item tracking)](https://msdn.microsoft.com/library/dd236914.aspx)</li> +</ul> +</div> + +<div style="clear:left;font-size:100%"> +</div> + + +##Marketplace extensions + +While Visual Studio, VSTS, and TFS provide a wealth of features and functionality, they also provide a means to extend and share that functionality. + +Extensions are simple add-ons that you can use to customize and extend your DevOps and work tracking experiences. Written with standard technologies—HTML, JavaScript, CSS—you can develop your own extensions using your preferred dev tools. + +You build extensions using our RESTful API Library. You publish them to the Visual Studio Marketplace, where you can privately maintain them or share with millions of developers that use Visual Studio, VSTS, and TFS. + +To learn more, visit the [Marketplace](https://marketplace.visualstudio.com) and [Overview of extensions](extend/index.md). + +##REST APIs + +The VSTS and TFS APIs are based on REST, OAuth, Json and service hooks—all standard web technologies broadly supported in the industry. + +REST APIs are provided to support building extensions to VSTS and TFS. To learn more, see [REST API overview](https://visualstudio.com/integrate/api/overview.md). + + + +## Related notes +- [Key concepts](concepts.md) +- [Essential services](services.md) +- [Software development roles](roles.md) +- [Pricing](https://www.visualstudio.com/team-services/pricing/) + diff --git a/docs/user-guide/_img/code-with-git-clone-repo.png b/docs/user-guide/_img/code-with-git-clone-repo.png new file mode 100644 index 00000000000..ba14b3d576b Binary files /dev/null and b/docs/user-guide/_img/code-with-git-clone-repo.png differ diff --git a/docs/user-guide/_img/index/agile-planning-video-image.png b/docs/user-guide/_img/index/agile-planning-video-image.png new file mode 100644 index 00000000000..0def819b357 Binary files /dev/null and b/docs/user-guide/_img/index/agile-planning-video-image.png differ diff --git a/docs/user-guide/_img/index/zero-to-devops-video-image.png b/docs/user-guide/_img/index/zero-to-devops-video-image.png new file mode 100644 index 00000000000..db95edeaa3c Binary files /dev/null and b/docs/user-guide/_img/index/zero-to-devops-video-image.png differ diff --git a/docs/user-guide/_img/invite-users-add-user-dialog.png b/docs/user-guide/_img/invite-users-add-user-dialog.png new file mode 100644 index 00000000000..a8340623fd8 Binary files /dev/null and b/docs/user-guide/_img/invite-users-add-user-dialog.png differ diff --git a/docs/user-guide/_img/invite-users-manage-admin-page.png b/docs/user-guide/_img/invite-users-manage-admin-page.png new file mode 100644 index 00000000000..518d9769718 Binary files /dev/null and b/docs/user-guide/_img/invite-users-manage-admin-page.png differ diff --git a/docs/user-guide/_img/invite-users-open-preview-features.png b/docs/user-guide/_img/invite-users-open-preview-features.png new file mode 100644 index 00000000000..1a6798bf174 Binary files /dev/null and b/docs/user-guide/_img/invite-users-open-preview-features.png differ diff --git a/docs/user-guide/_img/placeholder-git-repo.png b/docs/user-guide/_img/placeholder-git-repo.png new file mode 100644 index 00000000000..d0b0d588b2d Binary files /dev/null and b/docs/user-guide/_img/placeholder-git-repo.png differ diff --git a/docs/user-guide/_img/placeholder-kanban.png b/docs/user-guide/_img/placeholder-kanban.png new file mode 100644 index 00000000000..c5ef220276d Binary files /dev/null and b/docs/user-guide/_img/placeholder-kanban.png differ diff --git a/docs/user-guide/_img/placeholder-web-app.png b/docs/user-guide/_img/placeholder-web-app.png new file mode 100644 index 00000000000..8e77268a2c0 Binary files /dev/null and b/docs/user-guide/_img/placeholder-web-app.png differ diff --git a/docs/user-guide/_img/sign-up-invite-users-streamline-user-mngment.png b/docs/user-guide/_img/sign-up-invite-users-streamline-user-mngment.png new file mode 100644 index 00000000000..5292996c88c Binary files /dev/null and b/docs/user-guide/_img/sign-up-invite-users-streamline-user-mngment.png differ diff --git a/docs/user-guide/_img/tour-admin-project-level.png b/docs/user-guide/_img/tour-admin-project-level.png new file mode 100644 index 00000000000..ef227dab23a Binary files /dev/null and b/docs/user-guide/_img/tour-admin-project-level.png differ diff --git a/docs/user-guide/_img/what-is-tfs-add-code-step-3.png b/docs/user-guide/_img/what-is-tfs-add-code-step-3.png new file mode 100644 index 00000000000..1a37dba63ca Binary files /dev/null and b/docs/user-guide/_img/what-is-tfs-add-code-step-3.png differ diff --git a/docs/user-guide/_img/what-is-tfs-create-team-project-step-2.png b/docs/user-guide/_img/what-is-tfs-create-team-project-step-2.png new file mode 100644 index 00000000000..d383eccda1b Binary files /dev/null and b/docs/user-guide/_img/what-is-tfs-create-team-project-step-2.png differ diff --git a/docs/user-guide/_img/what-is-tfs-install-tfs-step-1.png b/docs/user-guide/_img/what-is-tfs-install-tfs-step-1.png new file mode 100644 index 00000000000..edf9d4c2deb Binary files /dev/null and b/docs/user-guide/_img/what-is-tfs-install-tfs-step-1.png differ diff --git a/docs/user-guide/_img/what-is-vsts-add-code-ide-step-2.png b/docs/user-guide/_img/what-is-vsts-add-code-ide-step-2.png new file mode 100644 index 00000000000..779f55f11aa Binary files /dev/null and b/docs/user-guide/_img/what-is-vsts-add-code-ide-step-2.png differ diff --git a/docs/user-guide/_img/what-is-vsts-sign-up-step-1.png b/docs/user-guide/_img/what-is-vsts-sign-up-step-1.png new file mode 100644 index 00000000000..cae3df67a5d Binary files /dev/null and b/docs/user-guide/_img/what-is-vsts-sign-up-step-1.png differ diff --git a/docs/user-guide/add-run-manual-tests.md b/docs/user-guide/add-run-manual-tests.md new file mode 100644 index 00000000000..fba722bc650 --- /dev/null +++ b/docs/user-guide/add-run-manual-tests.md @@ -0,0 +1,93 @@ +--- +title: Add, run, and update inline tests | VSTS +description: Add, run, and update manual test cases when working in Visual Studio Team Services (VSTS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/24/2017 +ms.topic: get-started-article +--- + +# Add, run, and update inline tests + +**VSTS** + +A quick and easy way to start manual testing is to add the test to the user story or bug you want to test. From the Kanban board, you can quickly define inline tests, or a set of manual tests, for a backlog item. Not only can you add tests, you can run them and update their status. If you're new to working with the Kanban board, see [Kanban quickstart](../work/kanban/kanban-quickstart.md). + +Tests you create from the Kanban board are automatically linked to the user story or backlog item. + +## Open your Kanban board + +0. From your web browser, open the team project for your VSTS account and click the **Work** hub. If you don't have a team project, [create one now](sign-up-invite-teammates.md). If you haven't been added as a team member, [get invited now](sign-up-invite-teammates.md#invite-others). + + The URL follows this pattern: ```https://{account name}.visualstudio.com/{project name}/_backlogs``` + + If you don't see the team or team project you want, click the ![Team Services icon](../work/_img/icons/project-icon.png) Team Services icon to [browse all team projects and teams](../connect/account-home-pages.md). + +0. Click **Board** to open the Kanban board. + +## Add tests + +0. To start adding tests, open the menu for the work item. + + <img src="../work/kanban/_img/i-test-add-test.png" alt="Open the context menu of a backlog item to add inline test case" style="border: 2px solid #C3C3C3;" /> + + Adding inline tests is the same as adding test cases to a test suite. A default test plan and test suite are automatically created under which the manual test cases are grouped. + + For example, a test suite is created for each user story, and all inline tests are added to that suite. Below, user story 152 is highlighted which has three manual tests defined with IDs of 153, 155, and 161. + + <img src="../work/kanban/_img/i-test-plan-suite.png" alt="Inline test cases get added to test suites and test plans" style="border: 2px solid #C3C3C3;" /> + + To learn more about test plans and test suites, see [Plan your tests](../manual-test/getting-started/create-a-test-plan.md). + +2. If you have a number of tests to add, simply keep typing each title and click Enter. + + <img src="../work/kanban/_img/i-test-story-with-3-inline-tests.png" alt="Work item with several test cases added" style="border: 2px solid #C3C3C3;" /> + + To add details to the test case, open it. You can click the title, double-click the inline item, or open the context menu and choose Open. + + <img src="../work/kanban/_img/i-test-case-form.png" alt="Open test case form from Kanban board" style="border: 2px solid #C3C3C3;" /> + +See [Create manual tests](../manual-test/getting-started/create-test-cases.md) to learn more about defining tests. + +> [!IMPORTANT] +> Prior to running the test, you must add details. + +## Run a test + +Run the test by selecting ![Run icon](../work/_img/icons/run_query.png) Run test from the ![Actions icon](../work/_img/icons/actions-icon.png) actions menu for the inline test. + +<img src="../work/kanban/_img/i-test-run-test.png" alt="Run a test" style="border: 2px solid #C3C3C3;" /> + +Microsoft Test Runner starts in a new browser instance. For details on running a test, see [Run manual tests](../manual-test/getting-started/run-manual-tests.md). + +## Update the status of a test + +You can update the status of the test from the ![Actions icon](../work/_img/icons/actions-icon.png) actions menu . + +<img src="../work/kanban/_img/i-test-update-status.png" alt="Check tasks that are complete" style="border: 2px solid #C3C3C3;" /> + +Updating the status of tests enable you to [track test results](../manual-test/getting-started/track-test-status.md). + +## Expand or collapse inline tests + +Upon first opening the Kanban board, you'll see an unexpanded view of checklists. + +![Inline tests collapsed](../work/kanban/_img/i-test-open-board-collapsed-tests.png) + +Simply click the inline test summary to expand a collapsed set of tests. Click the same summary to collapse an expanded list. + +![Inline tests expanded](../work/kanban/_img/i-test-expanded-test-list.png) + +## Try this next + +Use inline tests for lightweight traceability and to manage manual tests for user stories or other backlog items that they support. + +> [!div class="nextstepaction"] +> [Learn more about test case management](../manual-test/getting-started/create-test-cases.md) +> [Kanban quickstart](../work/kanban/kanban-quickstart.md) + +To initate web-based exploratory testing for a user story, you need to install the Exploratory testing , see [Exploratory test your web app directly in your browser](../manual-test/getting-started/perform-exploratory-tests.md). + diff --git a/docs/user-guide/breadcrumb/toc.yml b/docs/user-guide/breadcrumb/toc.yml new file mode 100644 index 00000000000..170b66d85ea --- /dev/null +++ b/docs/user-guide/breadcrumb/toc.yml @@ -0,0 +1,8 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: New User Guide + tocHref: /vsts/ + topicHref: /vsts/user-guide/index + diff --git a/docs/user-guide/code-with-git.md b/docs/user-guide/code-with-git.md new file mode 100644 index 00000000000..74815408468 --- /dev/null +++ b/docs/user-guide/code-with-git.md @@ -0,0 +1,86 @@ +--- +title: Code with Git | VSTS & TFS +description: Share code in a Git repo and new team project +ms.assetid: +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.manager: douge +ms.author: kaelli +ms.date: 08/24/2017 +ms.topic: get-started-article +--- + +# Code with Git + +**VSTS** + +After you create a new account and team project in VSTS, you can begin sharing your code with others. + +To work with a Git repo, you clone it to your computer. Cloning a repo creates a complete local copy of the repo for you to work with, and downloads all [commits](../git/tutorial/commits.md) and [branches](../git/tutorial/branches.md) in the repo and sets up a named relationship with the repo on the server. Use this relationship to interact with the existing repo, pushing and pulling changes to share code with your team. + +## Install Git command line tools + +0. Install one of the following Git command line tools: + + - To install Git for Windows, including Git Credential Manager, see [Install the Git Credential Manager - Windows](../git/set-up-credential-managers.md#windows) + - To install Git for macOS and Linux, see [Install the Git Credential Manager - macOS and Linix](../git/set-up-credential-managers.md#macos-and-linux) + +## Clone the repo to your computer + +0. From your web browser, open the team project for your VSTS account and click the **Code** hub. If you don't have a team project, [create one now](sign-up-invite-teammates.md). + +0. Select Clone in the upper-right corner of the **Code** window and copy the **Clone URL**. + + <img src="_img/code-with-git-clone-repo.png" alt="Retrieve the clone URL" style="border: 2px solid #C3C3C3;" /> + +0. Open the Git command window (Git Bash on Git for Windows), navigate to the folder where you want the code from the repo stored on your computer, and run `git clone` followed by the path copied from the **Clone URL** in the previous step, as shown in the following example. + + ``` + git clone https://contoso-ltd.visualstudio.com/MyFirstProject/_git/contoso-demo + ``` + Git downloads a copy of the code, including all [commits](../git/tutorial/commits.md) and [branches](../git/tutorial/branches.md) from the repo, into a new folder for you to work with. + + Keep this command window open, as you'll use it in the following steps. + +## Work with the code + +In this step, we'll make a change to the files on your computer, commit the changes locally, push the commit up to the repo that is stored on the server, and view the changes there. + +0. Browse to the folder on your computer where you cloned the repo, open the `README.md` file in your editor of choice, make some changes, and save and close the file. + +0. In the Git command window, navigate to the `contoso-demo` directory by entering the following command: + + ``` + cd contoso-demo + ``` + +0. Commit your changes by entering the following command in the Git command window: + + ``` + git commit -a -m "My first commit" + ``` + + When using `git commit`, `-a` means to commit all changed files, and `-m` specifies a commit message. + +0. Push your changes up to the Git repo on the server by entering the following command into the Git command window: + + ``` + git push + ``` + +0. Switch back to the web portal and select **History** from the **Code** view to view your new commit. The new repo has two commits: the first commit where the README and .gitignore were added when the repo was created, and the commit you just made. + + ![View commit history](../git/_img/repo-mgmt/commit-push.png) + +0. Switch to the **Files** tab and click on the README file to view your changes. + + ![View changed file](../git/_img/repo-mgmt/readme-changed-file.png) + +## Try this next + +> [!div class="nextstepaction"] +> [Build & release an app](../build-release/actions/ci-build-git.md) +> or +> [Plan & track work](plan-track-work.md) + +Or, [learn more about working with a Git repo](../git/index.md) \ No newline at end of file diff --git a/docs/user-guide/continuous-integration-deployment.md b/docs/user-guide/continuous-integration-deployment.md new file mode 100644 index 00000000000..fd53b2c2b45 --- /dev/null +++ b/docs/user-guide/continuous-integration-deployment.md @@ -0,0 +1,25 @@ +--- +title: Continuous Integration and Deployment | Team Services & TFS +description: Understand the Agile tools supported in VSTS and TFS +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 51BD85DA-C07F-4BE5-A752-3E93DF238906 +ms.manager: douge +ms.author: kaelli +ms.date: 07/19/2017 +--- + +# Continuous integration and deployment + +<b>Team Services | TFS 2017 | TFS 2015 | TFS 2013</b> + +**NEW - To Be Completed** + + +Rapid and reliable release of software comes from automating as many processes as possible. Our systems support build, test, and release automation. + +- You can define builds to automatically run whenever a team member checks in code changes +- Your build definitions can include instructions to run tests after the build runs +- Release definitions support managing deployment of your software builds to staging or production environments + +![Multiple platform continuous integration](../_img/multi-platform.png) diff --git a/docs/user-guide/index.md b/docs/user-guide/index.md new file mode 100644 index 00000000000..c47a3aae1c7 --- /dev/null +++ b/docs/user-guide/index.md @@ -0,0 +1,63 @@ +--- +title: Guide for users new to VSTS and TFS +description: Learn the very basics of Visual Studio Team Services (VSTS) and Team Foundation Server (TFS). +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.assetid: 00f4ed452-fbb8-45f9-8f0a-343702aac5b8 +ms.manager: douge +ms.author: kaelli +ms.date: 08/18/2017 +--- + +# New User Guide + +New to Visual Studio Team Services (VSTS) and Team Foundation Server (TFS)? + +We'll walk you through the basics of the web interface and some common tasks. + +<!--- +## Overview +[What is VSTS?](what-is-vsts.md) +[What is TFS?](what-is-tfs.md) +[Overview of services](../services.md) +--> + + +## 5-Minute Quickstarts + +Get started with a free account, share your code using Git, and track your work using a Kanban board. + +- [Set up/sign up with Team Services](sign-up-invite-teammates.md) +- [Code with Git](code-with-git.md) +- [Set up continuous integration & delivery](../build-release/actions/ci-cd-part-1.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Plan & track work](plan-track-work.md) + + +## Step-by-Step Tutorials + +- [Set favorites](/vsts/collaborate/set-favorites?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Follow work and pull requests](../collaborate/follow-work-items.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Enable preview features](/vsts/collaborate/preview-features?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) + + +## Concepts + +- [Key concepts](../concepts.md) +- [Source control](source-control.md) +- [Kanban & Agile tools](../work/overview.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Clients and tools](../tools.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Software development roles](../roles.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [What's the difference between VSTS and TFS?](../about-vsts-tfs.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) + + +## Reference +- [Permissions and access](../security/permissions-access.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Keyboard shortcuts](../reference/keyboard-shortcuts.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) +- [Markdown guidance](../reference/markdown-guidance.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json) + + +## Resources + +- [Visual Studio IDE](https://docs.microsoft.com/visualstudio/) +- [Visual Studio Code](https://code.visualstudio.com/docs) +- [Visual Studio for Mac](https://docs.microsoft.com/visualstudio/mac) \ No newline at end of file diff --git a/docs/user-guide/kanban-agile.md b/docs/user-guide/kanban-agile.md new file mode 100644 index 00000000000..45e5d8ee75a --- /dev/null +++ b/docs/user-guide/kanban-agile.md @@ -0,0 +1,29 @@ +--- +title: Kanban and Agile tools | Team Services & TFS +description: Understand the Agile tools supported in VSTS and TFS +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 0A71B622-7641-4F22-8BFF-6866C0393726 +ms.manager: douge +ms.author: kaelli +ms.date: 07/19/2017 +--- + +# Kanban and Agile tools + +<b>Team Services | TFS 2017 | TFS 2015 | TFS 2013</b> + +**NEW - To Be Completed** + +Software development projects require ways to easily share information and track the status of work, tasks, issues, or code defects. In the past, you might have planned and track work using one or more tools such as Microsoft Excel, Microsoft Project, a bug tracking system, or a combination of tools. Now, many teams have adopted Agile methods and practices to support planning and development. + +Our systems provide several types of work items which you use to track features, requirements, user stories, tasks, bugs, and issues. Each work item is associated with a work item type and a set of fields that team members update as information becomes available and progress is made. + +For planning purposes, you have access to several types of backlogs and boards to support the main Agile methods—Scrum, Kanban, or Scrumban. + +- Product backlog, used to create and prioritize stories or requirements +- Kanban, used to visualize and manage the flow of work as it moves from inception to in progress to done +- Sprint backlogs, used to plan work to complete during a sprint cycle, a regular 2 to 4 week cadence teams use when implementing Scrum +- Task board, used during daily Scrum meetings to review work completed, remaining, or blocked + +Project managers and developers share information by tracking work items on the backlogs and boards. Useful charts and dashboards round out the picture helping teams monitor progress and trends. diff --git a/docs/user-guide/plan-track-work.md b/docs/user-guide/plan-track-work.md new file mode 100644 index 00000000000..d3afc0adc35 --- /dev/null +++ b/docs/user-guide/plan-track-work.md @@ -0,0 +1,58 @@ +--- +title: Plan and track work | VSTS +description: Begin planning and tracking work in your new team project on Visual Studio Team Services (VSTS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.topic: get-started-article +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/24/2017 +--- + +# Plan and track work + +**VSTS** + +You add work items to plan and manage your project. You use different types of work items to track different types of work—such as user stories or product backlog items, tasks, bugs, or issues. You can describe the work to be done, assign work, track status, and coordinate efforts within your team. + +<a id="define-new-work"> </a> +## Add a work item +You can start adding work items once you connect to a team project. If you don't have an account or team project yet, create one in [Visual Studio Team Services](sign-up-invite-teammates.md). + +Here we show how to add work items from the web portal. + +0. From your web browser, open the team project for your VSTS account and click the **Code** hub. If you don't have a team project, [create one now](sign-up-invite-teammates.md). If you haven't been added as a team member, [get invited now](sign-up-invite-teammates.md#invite-others). + + The URL follows this pattern: ```https://{account name}.visualstudio.com/{project name}/_backlogs``` + + If you don't see the team or team project you want, click the ![Team Services icon](../work/_img/icons/project-icon.png) Team Services icon to [browse all team projects and teams](../connect/account-home-pages.md). + +2. From the **Work** hub, choose the work item type from the New Work Item list of options. Here, we choose to create a User Story. + + <img src="../work/backlogs/_img/add-work-items-choose-user-story.png" alt="Team Services, TFS 2017, Work hub, Add a work item" style="border: 2px solid #C3C3C3;" /> + +3. Enter a title and then save the work item. Before you can change the State from its initial default, you must save it. + + <img src="../work/backlogs/_img/add-new-work-item-vsts-user-story.png" alt="Agile process, User story work item form" style="border: 2px solid #C3C3C3;" /> + +That's it! + +Create as many work items as you need of the type you need to track the work you want to manage. + + +## Try this next + +To quickly add backlog items, such as user stories or requirements, see these topics: +> [!div class="nextstepaction"] +> [Create your backlog](../work/backlogs/create-your-backlog.md) +> [Kanban quickstart](../work/kanban/kanban-quickstart.md) + +Or, [learn more about planning and tracking work](../work/work-items/index.md). + + +>[!NOTE] +>Depending on the process chosen when the team project was created—[Scrum](../work/guidance/scrum-process.md), +[Agile](../work/guidance/agile-process.md), or [CMMI](../work/guidance/cmmi-process.md)—the types of work items you can create will differ. For example, backlog items may be called product backlog items (Scrum), user stories (Agile), or requirements (CMMI). All three are similar: they describe the customer value to deliver and the work to be performed. +> +> For an overview of all three processes, see [Choose a process](../work/guidance/choose-process.md). \ No newline at end of file diff --git a/docs/user-guide/sign-up-invite-teammates.md b/docs/user-guide/sign-up-invite-teammates.md new file mode 100644 index 00000000000..a232bfe49a9 --- /dev/null +++ b/docs/user-guide/sign-up-invite-teammates.md @@ -0,0 +1,106 @@ +--- +title: Sign up and invite teammates | Team Services +description: Quickstart guide to signing up and inviting others to join a team project in VSTS +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.topic: get-started-article +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 07/14/2017 +--- + +# Sign up for a free VSTS account and invite others to join your team +**Team Services** + +Sign up for a [VSTS](https://www.visualstudio.com/products/visual-studio-team-services-vs) +account to upload and share code in a free unlimited private +Git repository. You can then connect to your favorite development tool like Eclipse, Xcode, +Visual Studio, IntelliJ, or Android Studio to work on apps anytime, anywhere. + + +<a name="MicrosoftAccount"></a> +## Sign up with a personal Microsoft account + +0. Go to [Visual Studio Team Services](https://go.microsoft.com/fwlink/?LinkId=307137&clcid=0x409). +Enter your email address for your Microsoft account. + + If you're a Visual Studio subscriber + and get VSTS as a benefit, + use the Microsoft account associated with your subscription. + + <img src="../accounts/_img/_shared/sign-in.png" alt="Enter your email address" style="border: 2px solid #C3C3C3;" />  + +0. On the Microsoft account sign-in page, +enter your email address for your Microsoft account. +Then enter your password, and finish signing in. + + <img src="../accounts/_img/_shared/sign-in-msa2.png" alt="Enter password for your Microsoft account" style="border: 2px solid #C3C3C3;" />  + + If you don't have a Microsoft account, + you can create a Microsoft account at this time. + +0. Name your account. +To manage your code, choose Git or Team Foundation Version Control. + + <img src="../accounts/_img/sign-up-visual-studio-team-services/create-team-services-account.png" alt="Name your VSTS account, choose your version control" style="border: 2px solid #C3C3C3;" />  + + Learn which version control ([Git](../git/overview.md) + or [Team Foundation Version Control](../tfvc/overview.md)) + works best for you. + +0. Confirm your account's location. + + <img src="../accounts/_img/sign-up-visual-studio-team-services/check-account-location-standard.png" alt="Rename team project, change account location, or select another process" style="border: 2px solid #C3C3C3;" />  + + Team Services will create your first team project as "MyFirstProject" + and will use Agile as your default work item process to organize your work. + Choose **Change details** to + rename your team project, change the account location, or select another process, like Scrum. + +0. After VSTS creates your account and team project, +you can invite others to join your project, add code, or start planning and tracking using work items. + + <img src="../accounts/_img/_shared/team-project-created.png" alt="Add code or work items" style="border: 2px solid #C3C3C3;" />  + + Congratulations, you're now a VSTS account owner! + + To sign in to your account at any time, go to ```https://{youraccount}.visualstudio.com```. + +<a id="invite-others" /> +## Invite others to join your team + +You provide others access to your account by adding their email address. + +0. Turn on **Streamlined User Management** for your account. + + a. From your user account menu, click the **Preview features** option. + <!--- <img src="_img/invite-users-open-preview-features.png" alt="Click on your user account menu, choose Preview Features" style="border: 2px solid #C3C3C3;" /> --> + <img src="../_shared/_img/preview-features-open.png" alt="Open Preview Features" style="border: 2px solid #C3C3C3;" /> + + b. In the first drop-down menu, choose the option for all accounts. + + <img src="../collaborate/_img/preview-features-admin-s117.png" alt="Preview features options for the account" style="border: 1px solid #CCCCCC;" /> + + >[!TIP] + >If you don't see the user/account menu option, then you aren't an account administrator. + + c. Enable the **Streamlined User Management** option. + + <img src="_img/sign-up-invite-users-streamline-user-mngment.png" alt="Enable streamline user management" style="border: 1px solid #CCCCCC;" /> + +0. Click the ![gear icon](../_img/icons/gear-icon.png) gear Settings icon, choose the Account Settings option, and then click Users to open the Manage users page. + + <img src="_img/invite-users-manage-admin-page.png" alt="Web portal, account admin context, Open the manage users page" style="border: 2px solid #C3C3C3;" /> + +0. Fill out the form. You can add several email addresses by separating them with a comma. Leave the Access level at Basic for those users who will contribute to the code base. To learn more, see [About access levels](../security/access-levels.md). + + <img src="_img/invite-users-add-user-dialog.png" alt="Web portal, account admin context, Add new users dialog" style="border: 2px solid #C3C3C3;" />   + +## Next steps + +> [!div class="nextstepaction"] +> [Add code to your Git repository](code-with-git.md) +> or +> [Plan and track work](plan-track-work.md) + \ No newline at end of file diff --git a/docs/user-guide/source-control.md b/docs/user-guide/source-control.md new file mode 100644 index 00000000000..d0961f98f98 --- /dev/null +++ b/docs/user-guide/source-control.md @@ -0,0 +1,41 @@ +--- +title: Source control | Team Services & TFS +description: What is source control or version control in VSTS and TFS +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 7E769466-2165-4223-96FA-80A687287EFC +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +--- + +# Source control + +Source control, also referred to as version control, systems allow developers to collaborate on code and track changes made to the code base. Source control is an essential tool for multi-developer projects. + +Our systems support two types of source control: Git (distributed) or Team Foundation Version Control (TFVC), a centralized, client-server system. Both systems enable you to check-in files and organize files within folders, branches, and repositories. + +You manage your repos, branches, and other code development operations from the **Code** hub. + + +<img src="../_img/services/code-git-hub.png" alt="Code hub, Git, files page" style="border: 2px solid #C3C3C3;" />  + + +With Git, each developer has a copy on their dev machine of the source repository including all branch and history information. Each developer works directly with his or her own local repository, and changes are shared between repositories as a separate step. + +Developers can commit each set of changes and perform version control operations such as history and compare without a network connection. Branches are lightweight. When devs need to switch contexts, they create a private local branch. Devs can quickly switch from one branch to another to pivot among different variations of the codebase. Later, they can merge, publish, or dispose of the branch. + +>[!NOTE] +>Git in Visual Studio, Team Services and TFS is standard Git. You can use Visual Studio with third-party Git services, and you can also use third-party Git clients with TFS. + +With TFVC, devs have only one version of each file on their dev machines. Historical data is maintained only on the server. Branches are path-based and created on the server. + + +## Try this next + +Start sharing your code or getting your code under source control by [creating an account on Team Services for free](../accounts/create-account-msa-or-work-student.md). + +> [!div class="nextstepaction"] +> [Add your code using Git](/vsts/git/gitquickstart?toc=/vsts/user-guide/toc.json&bc=/vsts/breadcrumb/toc.json) +> or +> [Compare Git and TFVC](/vsts/tfvc/comparison-git-tfvc?toc=/vsts/user-guide/toc.json&bc=/vsts/breadcrumb/toc.json) \ No newline at end of file diff --git a/docs/user-guide/team-projects-teams-repos.md b/docs/user-guide/team-projects-teams-repos.md new file mode 100644 index 00000000000..841ca660ea1 --- /dev/null +++ b/docs/user-guide/team-projects-teams-repos.md @@ -0,0 +1,52 @@ +--- +title: Team projects, teams, and repositories | Team Services & TFS +description: Understand the key concepts that support the hosted cloud offering of Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.assetid: 29B4E51E-F2C6-4159-89EC-61FFCB9A478F +ms.manager: douge +ms.author: kaelli +ms.date: 07/14/2017 +--- + +# Team projects, teams, and repositories +<b>Team Services | TFS 2017 | TFS 2015 | TFS 2013</b> + +NEW - BEING WRITTEN + +## What is a team project? + +## What are teams and how are they used? + + +## What is a repository? + + +<a id="collection-project-team-structure"> </a> +### Collection-project-team structure +When you connect to Team Services or an on-premises TFS, you connect to an account or team project collection. Within that collection, one or more team projects may be defined. At a minimum, at least one team project must be created in order to use the system. + +When you create your team project, a team of the same name is automatically created. For small teams, this is sufficient. + +However, for enterprise-level organizations, it may be necessary to scale up, to create additional teams and/or team projects. These can be created within the single account or collection. + +<table width="100%"> +<tbody valign="top"> +<tr> +<td width="40%"> +**Single team project, team defined within an account/collection** +![Single collection-project-team conceptual image](../connect/_img/web-portal-account-project-team-concept.png) +</td> + +<td width="60%"> +**Multiple team projects and teams defined within an account/collection** +![Scaled collection-project-team conceptual image](../connect/_img/web-portal-account-project-team-scale-concept.png) + +</td> +</tr> +</tbody> +</table> + +The collection-project-team structure provides teams a high-level of autonomy to configure their tools in ways that work for them. It also supports administrative tasks to occur at the appropriate level. + +To learn more about adding teams and the features that support team autonomy, see [Multiple teams](../work/scale/multiple-teams.md) and [Manage team assets](../work/scale/manage-team-assets.md). diff --git a/docs/user-guide/toc.yml b/docs/user-guide/toc.yml new file mode 100644 index 00000000000..5fa410123e3 --- /dev/null +++ b/docs/user-guide/toc.yml @@ -0,0 +1,98 @@ +- name: New User Guide + href: index.md +- name: Overview + items: + - name: "What is Visual Studio Team Services?" + href: what-is-vsts.md + - name: "What is Team Foundation Server?" + href: what-is-tfs.md + - name: A tour of our services + href: /vsts/services?toc=/vsts/user-guide/toc.json&bc=/vsts/breadcrumb/toc.json&bc=/vsts/breadcrumb/toc.json +- name: Quickstarts + items: + - name: Sign up and invite some teammates + href: sign-up-invite-teammates.md + - name: Code with Git + href: code-with-git.md + - name: "Set up continuous integration & delivery" + href: /vsts/build-release/actions/ci-cd-part-1?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: "Plan & track work" + href: plan-track-work.md + - name: Add and run manual tests + href: add-run-manual-tests.md + - name: Install a Marketplace extension + href: /vsts/marketplace/install-vsts-extension?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json +- name: Tutorials + items: + - name: Set favorites + href: /vsts/collaborate/set-favorites?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: "Follow work & pull requests" + href: /vsts/collaborate/follow-work-items?toc=/vsts/user-guide/toc.json&bc=/vsts/breadcrumb/toc.json + - name: Get started as a Stakeholder + href: /vsts/quickstart/get-started-stakeholder?toc=/vsts/user-guide/toc.json&bc=/vsts/breadcrumb/toc.json&bc=/vsts/breadcrumb/toc.json +- name: Concepts + items: + - name: Key concepts + href: /vsts/concepts?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: Source control + href: source-control.md + - name: "Kanban & Agile tools" + href: /vsts/work/overview?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: "Clients & tools" + href: /vsts/tools?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: Software development roles + href: /vsts/roles?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: "How do Team Services & TFS differ" + href: /vsts/about-vsts-tfs?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json +- name: How-to Guides + items: + - name: Enable preview features + href: /vsts/collaborate/preview-features?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: "Use @mentions to further discussion" + href: /vsts/notifications/at-mentions?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: "Use #ID to link to work items" + href: /vsts/notifications/add-links-to-work-items?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: View permissions + href: /vsts/security/view-permissions?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: Go mobile + href: /vsts/collaborate/mobile-work?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: Manage your notifications + href: /vsts/notifications/manage-personal-notifications?toc=/vsts/notifications/toc.json&bc=/vsts/notifications/breadcrumb/toc.json + - name: Set your preferences + href: /vsts/accounts/account-preferences?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: Sign-in to the web or a client + href: /vsts/connect/connect-team-projects?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json +- name: Troubleshooting + items: + - name: Troubleshoot connection + href: /vsts/connect/troubleshoot-connection?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json +- name: Reference + items: + - name: "Permissions & access" + href: /vsts/security/permissions-access?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: Keyboard shortcuts + href: /vsts/reference/keyboard-shortcuts?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: Markdown guidance + href: /vsts/reference/markdown-guidance?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: Navigate in the web portal + href: /vsts/connect/work-web-portal?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: Navigate in Team Explorer + href: /vsts/connect/work-team-explorer?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json + - name: FAQs + href: /vsts/faqs?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json +- name: Resources + items: + - name: Visual Studio IDE + href: https://docs.microsoft.com/visualstudio/ + - name: Visual Studio Code + href: https://code.visualstudio.com/docs + - name: Visual Studio for Mac + href: https://docs.microsoft.com/visualstudio/mac + - name: Account Management (Team Services) + href: ../accounts/index.md + - name: "Security & Identity" + href: ../security/index.md + - name: Migrate from TFS to Team Services Tutorial + href: https://www.visualstudio.com/articles/migration-overview + - name: Technical articles + href: http://visualstudio.com/articles/overview \ No newline at end of file diff --git a/docs/user-guide/what-is-tfs.md b/docs/user-guide/what-is-tfs.md new file mode 100644 index 00000000000..b6c4202db22 --- /dev/null +++ b/docs/user-guide/what-is-tfs.md @@ -0,0 +1,60 @@ +--- +title: Services | Team Services & TFS +description: Understand the services that support the hosted cloud offering of Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-overview +ms.prod: vs-devops-alm +ms.topic: get-started-article +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 12/07/2016 +--- + +# What is Team Foundation Server? +**TFS 2017 | TFS 2015 | TFS 2013** + +Team Foundation Server (TFS) is the on-premises version of our cloud service, [Visual Studio Team Services](what-is-vsts.md) (VSTS). + +Just like VSTS, TFS provides an integrated set of features that you access through your web browser or a supported IDE, including: + +- Git repositories for source control of your code +- Build and release management to support continuous integration and delivery of your apps +- Agile tools to support planning and tracking your work, code defects, and issues using Kanban and Scrum methods +- A variety of tools to test your apps, including manual/exploratory testing, load testing, and continuous testing +- Highly customizable dashboards for sharing progress and trends + +In addition, the TFS ecosystem provides support for adding extensions, integrating with other popular services, such as: Campfire, Slack, Trello, UserVoice, and more, and developing your own custom extensions. + +When you deploy TFS, you can also configure the following servers or integration points: + +- **Build server**: supports on-premise builds, you can use a combination of on-premises builds and cloud-hosted builds +- **SQL Server and SQL Analysis Server**: supports SQL Server Reports and the ability to create Excel pivot charts based on the cube + + + +## Where do I start? +- Download TFS Express for free +- Then, either upload your code to share or source control +- Or, begin tracking your work using Scrum, Kanban, or a combination of methods + + +Choose an on-premises TFS when you need your data to stay within your network or you want access to SQL Server reporting services that integrate with TFS data and tools. You can start for free by downloading TFS Express. + + +[![Install TFS](_img/what-is-tfs-install-tfs-step-1.png)](../tfs-server/install/single-server.md)[![Create a team project](_img/what-is-tfs-create-team-project-step-2.png)](../accounts/create-team-project.md)[![Add team members](_img/what-is-tfs-add-code-step-3.png)](/vsts/git/create-new-repo?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json ) + + +## Try this next + +> [!div class="nextstepaction"] +> [Install TFS](../tfs-server/install/single-server.md) + +To learn more, see these topics: +- [A tour of services](../services.md) +- [Key concepts](../concepts.md) +- [Client-server tools](../tools.md) +- [Software development roles](../roles.md) +- [Pricing - TFS](https://www.visualstudio.com/team-services/tfs-pricing/) + + + diff --git a/docs/user-guide/what-is-vsts.md b/docs/user-guide/what-is-vsts.md new file mode 100644 index 00000000000..e20b19d07b8 --- /dev/null +++ b/docs/user-guide/what-is-vsts.md @@ -0,0 +1,62 @@ +--- +title: What is Visual Studio Team Services? | VSTS +description: Understand the fundamental differences between Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-overview +ms.assetid: 4 +ms.manager: douge +ms.author: kaelli +ms.date: 06/22/2017 +ms.topic: get-started-article +--- + +# What is Visual Studio Team Services? + +VSTS is a cloud service for collaborating on code development. It provides an integrated set of features that you access through your web browser or IDE client, including: + +- Git repositories for source control of your code +- Build and release management to support continuous integration and delivery of your apps +- Agile tools to support planning and tracking your work, code defects, and issues using Kanban and Scrum methods +- A variety of tools to test your apps, including manual/exploratory testing, load testing, and continuous testing +- Highly customizable dashboards for sharing progress and trends +- Built-in wiki for sharing information with your team + +In addition, the VSTS ecosystem provides support for adding extensions, integrating with other popular services, such as: Campfire, Slack, Trello, UserVoice, and more, and developing your own custom extensions. + +Choose VSTS when you want quick setup, maintenance-free operations, easy collaboration across domains, elastic scale, and rock solid security. You'll also have access to cloud load testing, cloud build servers, and application insights. + + +## Where do I start? + +We've made it easy for you to start for free and try out our service. + +Sign up for free by creating an account and then, either upload your code to share or source control, or begin tracking your work using Scrum, Kanban, or a combination of methods. + +[![Sign up for Team Services](_img/what-is-vsts-sign-up-step-1.png)](sign-up-invite-teammates.md)[![Add code to repository](_img/what-is-vsts-add-code-ide-step-2.png)](/vsts/git/create-new-repo?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json ) + + +## Try this next + +> [!div class="nextstepaction"] +> [Sign up and invite team mates](sign-up-invite-teammates.md) + +To learn more, see these topics: +- [A tour of services](../services.md) +- [Key concepts](../concepts.md) +- [Client-server tools](../tools.md) +- [Software development roles](../roles.md) +- [Pricing - Team Services](https://www.visualstudio.com/team-services/pricing/) + + +<!--- +[Small teams can start for free!](https://www.visualstudio.com/products/visual-studio-team-services-vs.aspx) +[Devops overview for Team Services and TFS](index.md) +*(c) 2016 Microsoft Corporation. All rights reserved. This document is +provided "as-is." Information and views expressed in this document, +including URL and other Internet Web site references, may change without +notice. You bear the risk of using it.* + +*This document does not provide you with any legal rights to any +intellectual property in any Microsoft product. You may copy and use +this document for your internal, reference purposes.* +--> diff --git a/docs/work/_img/ALM_WO_CreateBacklog_S.png b/docs/work/_img/ALM_WO_CreateBacklog_S.png new file mode 100644 index 00000000000..2b051f5abab Binary files /dev/null and b/docs/work/_img/ALM_WO_CreateBacklog_S.png differ diff --git a/docs/work/_img/ALM_WO_FlowOfWork_S.png b/docs/work/_img/ALM_WO_FlowOfWork_S.png new file mode 100644 index 00000000000..7c64b3091df Binary files /dev/null and b/docs/work/_img/ALM_WO_FlowOfWork_S.png differ diff --git a/docs/work/_img/ALM_WO_Forecast_S.png b/docs/work/_img/ALM_WO_Forecast_S.png new file mode 100644 index 00000000000..771fac2c49e Binary files /dev/null and b/docs/work/_img/ALM_WO_Forecast_S.png differ diff --git a/docs/work/_img/ALM_WO_SearchWI_S.png b/docs/work/_img/ALM_WO_SearchWI_S.png new file mode 100644 index 00000000000..a5da8359fa8 Binary files /dev/null and b/docs/work/_img/ALM_WO_SearchWI_S.png differ diff --git a/docs/work/_img/b-vs-b-column-options.png b/docs/work/_img/b-vs-b-column-options.png new file mode 100644 index 00000000000..d45cb65ee51 Binary files /dev/null and b/docs/work/_img/b-vs-b-column-options.png differ diff --git a/docs/work/_img/backlogs-boards-create-query.png b/docs/work/_img/backlogs-boards-create-query.png new file mode 100644 index 00000000000..bc332055b1c Binary files /dev/null and b/docs/work/_img/backlogs-boards-create-query.png differ diff --git a/docs/work/_img/backlogs-boards-plans-delivery-plans.png b/docs/work/_img/backlogs-boards-plans-delivery-plans.png new file mode 100644 index 00000000000..f81f6cbd965 Binary files /dev/null and b/docs/work/_img/backlogs-boards-plans-delivery-plans.png differ diff --git a/docs/work/_img/backlogs-boards-query-nested-items.png b/docs/work/_img/backlogs-boards-query-nested-items.png new file mode 100644 index 00000000000..ded917b1e2b Binary files /dev/null and b/docs/work/_img/backlogs-boards-query-nested-items.png differ diff --git a/docs/work/_img/checkmark.png b/docs/work/_img/checkmark.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/work/_img/checkmark.png differ diff --git a/docs/work/_img/gs-planning-configure-kanban.png b/docs/work/_img/gs-planning-configure-kanban.png new file mode 100644 index 00000000000..4a6fce48a73 Binary files /dev/null and b/docs/work/_img/gs-planning-configure-kanban.png differ diff --git a/docs/work/_img/gs-planning-define-sprints.png b/docs/work/_img/gs-planning-define-sprints.png new file mode 100644 index 00000000000..85af5d66ae1 Binary files /dev/null and b/docs/work/_img/gs-planning-define-sprints.png differ diff --git a/docs/work/_img/gs-planning-define-stories.png b/docs/work/_img/gs-planning-define-stories.png new file mode 100644 index 00000000000..70e983ae09b Binary files /dev/null and b/docs/work/_img/gs-planning-define-stories.png differ diff --git a/docs/work/_img/gs-planning-forecast.png b/docs/work/_img/gs-planning-forecast.png new file mode 100644 index 00000000000..3f1be020c84 Binary files /dev/null and b/docs/work/_img/gs-planning-forecast.png differ diff --git a/docs/work/_img/gs-planning-manage-bugs.png b/docs/work/_img/gs-planning-manage-bugs.png new file mode 100644 index 00000000000..cf660d27379 Binary files /dev/null and b/docs/work/_img/gs-planning-manage-bugs.png differ diff --git a/docs/work/_img/gs-planning-manage-issues.png b/docs/work/_img/gs-planning-manage-issues.png new file mode 100644 index 00000000000..4fc8687322f Binary files /dev/null and b/docs/work/_img/gs-planning-manage-issues.png differ diff --git a/docs/work/_img/gs-planning-monitor-kanban.png b/docs/work/_img/gs-planning-monitor-kanban.png new file mode 100644 index 00000000000..137337c3dc6 Binary files /dev/null and b/docs/work/_img/gs-planning-monitor-kanban.png differ diff --git a/docs/work/_img/gs-planning-monitor-sprint.png b/docs/work/_img/gs-planning-monitor-sprint.png new file mode 100644 index 00000000000..5d7bbc29320 Binary files /dev/null and b/docs/work/_img/gs-planning-monitor-sprint.png differ diff --git a/docs/work/_img/gs-planning-organize-backlog.png b/docs/work/_img/gs-planning-organize-backlog.png new file mode 100644 index 00000000000..8fc45e035d4 Binary files /dev/null and b/docs/work/_img/gs-planning-organize-backlog.png differ diff --git a/docs/work/_img/gs-planning-plan-sprint.png b/docs/work/_img/gs-planning-plan-sprint.png new file mode 100644 index 00000000000..3f0e8e78b76 Binary files /dev/null and b/docs/work/_img/gs-planning-plan-sprint.png differ diff --git a/docs/work/_img/gs-planning-track-kanban.png b/docs/work/_img/gs-planning-track-kanban.png new file mode 100644 index 00000000000..48e9ff701c5 Binary files /dev/null and b/docs/work/_img/gs-planning-track-kanban.png differ diff --git a/docs/work/_img/icons/ALM_OpenAdminContext.png b/docs/work/_img/icons/ALM_OpenAdminContext.png new file mode 100644 index 00000000000..7b291d462ae Binary files /dev/null and b/docs/work/_img/icons/ALM_OpenAdminContext.png differ diff --git a/docs/work/_img/icons/Action_Add.png b/docs/work/_img/icons/Action_Add.png new file mode 100644 index 00000000000..1fafd77fee6 Binary files /dev/null and b/docs/work/_img/icons/Action_Add.png differ diff --git a/docs/work/_img/icons/Arrow_Down.png b/docs/work/_img/icons/Arrow_Down.png new file mode 100644 index 00000000000..efdaccd3199 Binary files /dev/null and b/docs/work/_img/icons/Arrow_Down.png differ diff --git a/docs/work/_img/icons/Arrow_Next.png b/docs/work/_img/icons/Arrow_Next.png new file mode 100644 index 00000000000..2e7db188c40 Binary files /dev/null and b/docs/work/_img/icons/Arrow_Next.png differ diff --git a/docs/work/_img/icons/Arrow_Previous.png b/docs/work/_img/icons/Arrow_Previous.png new file mode 100644 index 00000000000..ee99b74afdf Binary files /dev/null and b/docs/work/_img/icons/Arrow_Previous.png differ diff --git a/docs/work/_img/icons/Arrow_Up.png b/docs/work/_img/icons/Arrow_Up.png new file mode 100644 index 00000000000..09b45f73579 Binary files /dev/null and b/docs/work/_img/icons/Arrow_Up.png differ diff --git a/docs/work/_img/icons/ProcGuid_1.png b/docs/work/_img/icons/ProcGuid_1.png new file mode 100644 index 00000000000..6bc00571363 Binary files /dev/null and b/docs/work/_img/icons/ProcGuid_1.png differ diff --git a/docs/work/_img/icons/ProcGuid_2.png b/docs/work/_img/icons/ProcGuid_2.png new file mode 100644 index 00000000000..4dd3ac4b9d6 Binary files /dev/null and b/docs/work/_img/icons/ProcGuid_2.png differ diff --git a/docs/work/_img/icons/ProcGuid_3.png b/docs/work/_img/icons/ProcGuid_3.png new file mode 100644 index 00000000000..18a2082dd73 Binary files /dev/null and b/docs/work/_img/icons/ProcGuid_3.png differ diff --git a/docs/work/_img/icons/ProcGuid_4.png b/docs/work/_img/icons/ProcGuid_4.png new file mode 100644 index 00000000000..97f4bd09f23 Binary files /dev/null and b/docs/work/_img/icons/ProcGuid_4.png differ diff --git a/docs/work/_img/icons/ProcGuid_5.png b/docs/work/_img/icons/ProcGuid_5.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/work/_img/icons/ProcGuid_5.png differ diff --git a/docs/work/_img/icons/actions-icon.png b/docs/work/_img/icons/actions-icon.png new file mode 100644 index 00000000000..4b5e7389162 Binary files /dev/null and b/docs/work/_img/icons/actions-icon.png differ diff --git a/docs/work/_img/icons/add-light-icon.png b/docs/work/_img/icons/add-light-icon.png new file mode 100644 index 00000000000..8e515b0f6a9 Binary files /dev/null and b/docs/work/_img/icons/add-light-icon.png differ diff --git a/docs/work/_img/icons/add-link-icon.png b/docs/work/_img/icons/add-link-icon.png new file mode 100644 index 00000000000..680b42d9a76 Binary files /dev/null and b/docs/work/_img/icons/add-link-icon.png differ diff --git a/docs/work/_img/icons/add_icon.png b/docs/work/_img/icons/add_icon.png new file mode 100644 index 00000000000..7259c747558 Binary files /dev/null and b/docs/work/_img/icons/add_icon.png differ diff --git a/docs/work/_img/icons/change-team-project-icon.png b/docs/work/_img/icons/change-team-project-icon.png new file mode 100644 index 00000000000..e18c2c10152 Binary files /dev/null and b/docs/work/_img/icons/change-team-project-icon.png differ diff --git a/docs/work/_img/icons/change-type-icon.png b/docs/work/_img/icons/change-type-icon.png new file mode 100644 index 00000000000..c3e8e27e160 Binary files /dev/null and b/docs/work/_img/icons/change-type-icon.png differ diff --git a/docs/work/_img/icons/checkmark.png b/docs/work/_img/icons/checkmark.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/work/_img/icons/checkmark.png differ diff --git a/docs/work/_img/icons/clone-icon.png b/docs/work/_img/icons/clone-icon.png new file mode 100644 index 00000000000..4ee761d9397 Binary files /dev/null and b/docs/work/_img/icons/clone-icon.png differ diff --git a/docs/work/_img/icons/collapse-wi-section.png b/docs/work/_img/icons/collapse-wi-section.png new file mode 100644 index 00000000000..0b938829eb2 Binary files /dev/null and b/docs/work/_img/icons/collapse-wi-section.png differ diff --git a/docs/work/_img/icons/collapse_icon.png b/docs/work/_img/icons/collapse_icon.png new file mode 100644 index 00000000000..c114704bb2a Binary files /dev/null and b/docs/work/_img/icons/collapse_icon.png differ diff --git a/docs/work/_img/icons/collapse_row_icon.png b/docs/work/_img/icons/collapse_row_icon.png new file mode 100644 index 00000000000..d5eef11dac0 Binary files /dev/null and b/docs/work/_img/icons/collapse_row_icon.png differ diff --git a/docs/work/_img/icons/context_menu.png b/docs/work/_img/icons/context_menu.png new file mode 100644 index 00000000000..6953b22001e Binary files /dev/null and b/docs/work/_img/icons/context_menu.png differ diff --git a/docs/work/_img/icons/delete-icon.png b/docs/work/_img/icons/delete-icon.png new file mode 100644 index 00000000000..f3fee7cbd95 Binary files /dev/null and b/docs/work/_img/icons/delete-icon.png differ diff --git a/docs/work/_img/icons/delete-link.png b/docs/work/_img/icons/delete-link.png new file mode 100644 index 00000000000..c12779f0a4e Binary files /dev/null and b/docs/work/_img/icons/delete-link.png differ diff --git a/docs/work/_img/icons/delete_icon.png b/docs/work/_img/icons/delete_icon.png new file mode 100644 index 00000000000..8b321791706 Binary files /dev/null and b/docs/work/_img/icons/delete_icon.png differ diff --git a/docs/work/_img/icons/download-icon.png b/docs/work/_img/icons/download-icon.png new file mode 100644 index 00000000000..1782e72ca92 Binary files /dev/null and b/docs/work/_img/icons/download-icon.png differ diff --git a/docs/work/_img/icons/email-icon.png b/docs/work/_img/icons/email-icon.png new file mode 100644 index 00000000000..b52241ae751 Binary files /dev/null and b/docs/work/_img/icons/email-icon.png differ diff --git a/docs/work/_img/icons/exitfullscreen_icon.png b/docs/work/_img/icons/exitfullscreen_icon.png new file mode 100644 index 00000000000..84e1f90b11c Binary files /dev/null and b/docs/work/_img/icons/exitfullscreen_icon.png differ diff --git a/docs/work/_img/icons/expand-wi-section.png b/docs/work/_img/icons/expand-wi-section.png new file mode 100644 index 00000000000..97ee60b1357 Binary files /dev/null and b/docs/work/_img/icons/expand-wi-section.png differ diff --git a/docs/work/_img/icons/expand_icon.png b/docs/work/_img/icons/expand_icon.png new file mode 100644 index 00000000000..513e75150cc Binary files /dev/null and b/docs/work/_img/icons/expand_icon.png differ diff --git a/docs/work/_img/icons/expand_row_icon.png b/docs/work/_img/icons/expand_row_icon.png new file mode 100644 index 00000000000..c05fb862247 Binary files /dev/null and b/docs/work/_img/icons/expand_row_icon.png differ diff --git a/docs/work/_img/icons/follow-icon.png b/docs/work/_img/icons/follow-icon.png new file mode 100644 index 00000000000..28411283a7a Binary files /dev/null and b/docs/work/_img/icons/follow-icon.png differ diff --git a/docs/work/_img/icons/following-icon.png b/docs/work/_img/icons/following-icon.png new file mode 100644 index 00000000000..bc038552e6b Binary files /dev/null and b/docs/work/_img/icons/following-icon.png differ diff --git a/docs/work/_img/icons/fullscreen_icon.png b/docs/work/_img/icons/fullscreen_icon.png new file mode 100644 index 00000000000..2174e7f1a60 Binary files /dev/null and b/docs/work/_img/icons/fullscreen_icon.png differ diff --git a/docs/work/_img/icons/gear_icon.png b/docs/work/_img/icons/gear_icon.png new file mode 100644 index 00000000000..0bad2ccf47b Binary files /dev/null and b/docs/work/_img/icons/gear_icon.png differ diff --git a/docs/work/_img/icons/green-plus-new-field-icon.png b/docs/work/_img/icons/green-plus-new-field-icon.png new file mode 100644 index 00000000000..b58764743e2 Binary files /dev/null and b/docs/work/_img/icons/green-plus-new-field-icon.png differ diff --git a/docs/work/_img/icons/green_plus_icon.png b/docs/work/_img/icons/green_plus_icon.png new file mode 100644 index 00000000000..aa3f9fecbd2 Binary files /dev/null and b/docs/work/_img/icons/green_plus_icon.png differ diff --git a/docs/work/_img/icons/group-clauses-icon.png b/docs/work/_img/icons/group-clauses-icon.png new file mode 100644 index 00000000000..faa42872515 Binary files /dev/null and b/docs/work/_img/icons/group-clauses-icon.png differ diff --git a/docs/work/_img/icons/help.png b/docs/work/_img/icons/help.png new file mode 100644 index 00000000000..c4dcd80248a Binary files /dev/null and b/docs/work/_img/icons/help.png differ diff --git a/docs/work/_img/icons/icon-attachments-tab-wi.png b/docs/work/_img/icons/icon-attachments-tab-wi.png new file mode 100644 index 00000000000..8738c1e9440 Binary files /dev/null and b/docs/work/_img/icons/icon-attachments-tab-wi.png differ diff --git a/docs/work/_img/icons/icon-discussions-wi.png b/docs/work/_img/icons/icon-discussions-wi.png new file mode 100644 index 00000000000..e277291f257 Binary files /dev/null and b/docs/work/_img/icons/icon-discussions-wi.png differ diff --git a/docs/work/_img/icons/icon-history-tab-wi.png b/docs/work/_img/icons/icon-history-tab-wi.png new file mode 100644 index 00000000000..c8aeec57ef9 Binary files /dev/null and b/docs/work/_img/icons/icon-history-tab-wi.png differ diff --git a/docs/work/_img/icons/icon-links-tab-wi.png b/docs/work/_img/icons/icon-links-tab-wi.png new file mode 100644 index 00000000000..f7e356572fa Binary files /dev/null and b/docs/work/_img/icons/icon-links-tab-wi.png differ diff --git a/docs/work/_img/icons/icon-refresh-wi.png b/docs/work/_img/icons/icon-refresh-wi.png new file mode 100644 index 00000000000..b1e6fd7b8f4 Binary files /dev/null and b/docs/work/_img/icons/icon-refresh-wi.png differ diff --git a/docs/work/_img/icons/icon-save-wi.png b/docs/work/_img/icons/icon-save-wi.png new file mode 100644 index 00000000000..06e97592f0b Binary files /dev/null and b/docs/work/_img/icons/icon-save-wi.png differ diff --git a/docs/work/_img/icons/icon-undo-changes-wi.png b/docs/work/_img/icons/icon-undo-changes-wi.png new file mode 100644 index 00000000000..b99c58b0825 Binary files /dev/null and b/docs/work/_img/icons/icon-undo-changes-wi.png differ diff --git a/docs/work/_img/icons/info-icon.png b/docs/work/_img/icons/info-icon.png new file mode 100644 index 00000000000..38f8ca1e1e6 Binary files /dev/null and b/docs/work/_img/icons/info-icon.png differ diff --git a/docs/work/_img/icons/kanban-filter-icon.png b/docs/work/_img/icons/kanban-filter-icon.png new file mode 100644 index 00000000000..caab5a1a323 Binary files /dev/null and b/docs/work/_img/icons/kanban-filter-icon.png differ diff --git a/docs/work/_img/icons/live-updates-icon.png b/docs/work/_img/icons/live-updates-icon.png new file mode 100644 index 00000000000..f667c8c0c6d Binary files /dev/null and b/docs/work/_img/icons/live-updates-icon.png differ diff --git a/docs/work/_img/icons/mail_icon.png b/docs/work/_img/icons/mail_icon.png new file mode 100644 index 00000000000..c22ecfe3266 Binary files /dev/null and b/docs/work/_img/icons/mail_icon.png differ diff --git a/docs/work/_img/icons/new-linked-work-item.png b/docs/work/_img/icons/new-linked-work-item.png new file mode 100644 index 00000000000..924b0e20b02 Binary files /dev/null and b/docs/work/_img/icons/new-linked-work-item.png differ diff --git a/docs/work/_img/icons/note-icon.png b/docs/work/_img/icons/note-icon.png new file mode 100644 index 00000000000..607e30438be Binary files /dev/null and b/docs/work/_img/icons/note-icon.png differ diff --git a/docs/work/_img/icons/open-icon.png b/docs/work/_img/icons/open-icon.png new file mode 100644 index 00000000000..0dac871f505 Binary files /dev/null and b/docs/work/_img/icons/open-icon.png differ diff --git a/docs/work/_img/icons/pin-icon.png b/docs/work/_img/icons/pin-icon.png new file mode 100644 index 00000000000..b58c7a889fa Binary files /dev/null and b/docs/work/_img/icons/pin-icon.png differ diff --git a/docs/work/_img/icons/project-icon.png b/docs/work/_img/icons/project-icon.png new file mode 100644 index 00000000000..806ceb3f6b7 Binary files /dev/null and b/docs/work/_img/icons/project-icon.png differ diff --git a/docs/work/_img/icons/remove-formatting-icon.png b/docs/work/_img/icons/remove-formatting-icon.png new file mode 100644 index 00000000000..755974f516e Binary files /dev/null and b/docs/work/_img/icons/remove-formatting-icon.png differ diff --git a/docs/work/_img/icons/run_query.png b/docs/work/_img/icons/run_query.png new file mode 100644 index 00000000000..2b435212f88 Binary files /dev/null and b/docs/work/_img/icons/run_query.png differ diff --git a/docs/work/_img/icons/run_query_te.png b/docs/work/_img/icons/run_query_te.png new file mode 100644 index 00000000000..f77e7faab73 Binary files /dev/null and b/docs/work/_img/icons/run_query_te.png differ diff --git a/docs/work/_img/icons/search_filter_icon.png b/docs/work/_img/icons/search_filter_icon.png new file mode 100644 index 00000000000..1a9686ad5ee Binary files /dev/null and b/docs/work/_img/icons/search_filter_icon.png differ diff --git a/docs/work/_img/icons/storyboard-icon.png b/docs/work/_img/icons/storyboard-icon.png new file mode 100644 index 00000000000..597129ba748 Binary files /dev/null and b/docs/work/_img/icons/storyboard-icon.png differ diff --git a/docs/work/_img/icons/tag_filter_icon.png b/docs/work/_img/icons/tag_filter_icon.png new file mode 100644 index 00000000000..f3e618ab93a Binary files /dev/null and b/docs/work/_img/icons/tag_filter_icon.png differ diff --git a/docs/work/_img/icons/te-refresh-query-icon.png b/docs/work/_img/icons/te-refresh-query-icon.png new file mode 100644 index 00000000000..4e42c8841a0 Binary files /dev/null and b/docs/work/_img/icons/te-refresh-query-icon.png differ diff --git a/docs/work/_img/icons/team-settings-gear-icon.png b/docs/work/_img/icons/team-settings-gear-icon.png new file mode 100644 index 00000000000..d32acc9bceb Binary files /dev/null and b/docs/work/_img/icons/team-settings-gear-icon.png differ diff --git a/docs/work/_img/icons/tip-icon.png b/docs/work/_img/icons/tip-icon.png new file mode 100644 index 00000000000..8bad4c494c3 Binary files /dev/null and b/docs/work/_img/icons/tip-icon.png differ diff --git a/docs/work/_img/index-agile-planning-video.png b/docs/work/_img/index-agile-planning-video.png new file mode 100644 index 00000000000..1740c41fa97 Binary files /dev/null and b/docs/work/_img/index-agile-planning-video.png differ diff --git a/docs/work/_img/kanban-task-checklist.png b/docs/work/_img/kanban-task-checklist.png new file mode 100644 index 00000000000..7874a13c71b Binary files /dev/null and b/docs/work/_img/kanban-task-checklist.png differ diff --git a/docs/work/_img/overview-links.png b/docs/work/_img/overview-links.png new file mode 100644 index 00000000000..4df60ab1579 Binary files /dev/null and b/docs/work/_img/overview-links.png differ diff --git a/docs/work/_img/overview-tags.png b/docs/work/_img/overview-tags.png new file mode 100644 index 00000000000..1adcb4d4fda Binary files /dev/null and b/docs/work/_img/overview-tags.png differ diff --git a/docs/work/_img/ovr-show-bugs-settings-ts-s.png b/docs/work/_img/ovr-show-bugs-settings-ts-s.png new file mode 100644 index 00000000000..4fada3c808d Binary files /dev/null and b/docs/work/_img/ovr-show-bugs-settings-ts-s.png differ diff --git a/docs/work/_img/plan-intro.png b/docs/work/_img/plan-intro.png new file mode 100644 index 00000000000..baefb88a1c0 Binary files /dev/null and b/docs/work/_img/plan-intro.png differ diff --git a/docs/work/_img/set-sprint-start-end-dates_S.png b/docs/work/_img/set-sprint-start-end-dates_S.png new file mode 100644 index 00000000000..5d231aa26b0 Binary files /dev/null and b/docs/work/_img/set-sprint-start-end-dates_S.png differ diff --git a/docs/work/_img/sprint-backlogs_S.png b/docs/work/_img/sprint-backlogs_S.png new file mode 100644 index 00000000000..6ddbd2aefce Binary files /dev/null and b/docs/work/_img/sprint-backlogs_S.png differ diff --git a/docs/work/_shared/_img/assign-work-items.png b/docs/work/_shared/_img/assign-work-items.png new file mode 100644 index 00000000000..c80177fe9fa Binary files /dev/null and b/docs/work/_shared/_img/assign-work-items.png differ diff --git a/docs/work/_shared/_img/kanban-board-keyboard-shortcuts-ts-jul.png b/docs/work/_shared/_img/kanban-board-keyboard-shortcuts-ts-jul.png new file mode 100644 index 00000000000..3de50a87e60 Binary files /dev/null and b/docs/work/_shared/_img/kanban-board-keyboard-shortcuts-ts-jul.png differ diff --git a/docs/work/_shared/_img/kanban-live-updates.png b/docs/work/_shared/_img/kanban-live-updates.png new file mode 100644 index 00000000000..73bddf3a444 Binary files /dev/null and b/docs/work/_shared/_img/kanban-live-updates.png differ diff --git a/docs/work/_shared/_img/new-form-bug-header.png b/docs/work/_shared/_img/new-form-bug-header.png new file mode 100644 index 00000000000..eddf04e474e Binary files /dev/null and b/docs/work/_shared/_img/new-form-bug-header.png differ diff --git a/docs/work/_shared/_img/new-form-exp-resized-user-story-form.png b/docs/work/_shared/_img/new-form-exp-resized-user-story-form.png new file mode 100644 index 00000000000..842a75503fb Binary files /dev/null and b/docs/work/_shared/_img/new-form-exp-resized-user-story-form.png differ diff --git a/docs/work/_shared/_img/new-form-user-story-3-col.png b/docs/work/_shared/_img/new-form-user-story-3-col.png new file mode 100644 index 00000000000..f0f213139f6 Binary files /dev/null and b/docs/work/_shared/_img/new-form-user-story-3-col.png differ diff --git a/docs/work/_shared/_img/provide-feedback-send-a-smile.png b/docs/work/_shared/_img/provide-feedback-send-a-smile.png new file mode 100644 index 00000000000..ccb69b5824a Binary files /dev/null and b/docs/work/_shared/_img/provide-feedback-send-a-smile.png differ diff --git a/docs/work/_shared/_img/rich-text-ui-te.png b/docs/work/_shared/_img/rich-text-ui-te.png new file mode 100644 index 00000000000..89f4c38e446 Binary files /dev/null and b/docs/work/_shared/_img/rich-text-ui-te.png differ diff --git a/docs/work/_shared/_img/rich-text-ui-web-portal.png b/docs/work/_shared/_img/rich-text-ui-web-portal.png new file mode 100644 index 00000000000..cdecaf86bbf Binary files /dev/null and b/docs/work/_shared/_img/rich-text-ui-web-portal.png differ diff --git a/docs/work/_shared/_img/switch-context-tfs-2017.png b/docs/work/_shared/_img/switch-context-tfs-2017.png new file mode 100644 index 00000000000..2a32c9654ac Binary files /dev/null and b/docs/work/_shared/_img/switch-context-tfs-2017.png differ diff --git a/docs/work/_shared/_img/switch-team-context-new-nav.png b/docs/work/_shared/_img/switch-team-context-new-nav.png new file mode 100644 index 00000000000..4094794ba4b Binary files /dev/null and b/docs/work/_shared/_img/switch-team-context-new-nav.png differ diff --git a/docs/work/_shared/_img/switch-team-project-2.png b/docs/work/_shared/_img/switch-team-project-2.png new file mode 100644 index 00000000000..dad19cb2435 Binary files /dev/null and b/docs/work/_shared/_img/switch-team-project-2.png differ diff --git a/docs/work/_shared/_img/verify-bug-menu-option.png b/docs/work/_shared/_img/verify-bug-menu-option.png new file mode 100644 index 00000000000..d840bdae5ac Binary files /dev/null and b/docs/work/_shared/_img/verify-bug-menu-option.png differ diff --git a/docs/work/_shared/_img/web-portal-admin-process-hub-new-nav.png b/docs/work/_shared/_img/web-portal-admin-process-hub-new-nav.png new file mode 100644 index 00000000000..759613d7032 Binary files /dev/null and b/docs/work/_shared/_img/web-portal-admin-process-hub-new-nav.png differ diff --git a/docs/work/_shared/_img/web-portal-admin-process-hub-old-nav.png b/docs/work/_shared/_img/web-portal-admin-process-hub-old-nav.png new file mode 100644 index 00000000000..d043e51a4c3 Binary files /dev/null and b/docs/work/_shared/_img/web-portal-admin-process-hub-old-nav.png differ diff --git a/docs/work/_shared/agile-tools-areas-iterations-summary.md b/docs/work/_shared/agile-tools-areas-iterations-summary.md new file mode 100644 index 00000000000..c6f2e4de9c8 --- /dev/null +++ b/docs/work/_shared/agile-tools-areas-iterations-summary.md @@ -0,0 +1,56 @@ + +Several Agile tools reference the team's default area path, iteration path, and activated sprints to automatically filter the set of work items they display. Here's a quick summary of these tools: + + + +<div style="float:left;width:130px;margin:3px"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;font-size:90%">Backlogs</p> +- [Product backlog](../backlogs/create-your-backlog.md) +- [Features backlog](../backlogs/define-features-epics.md) +- [Epics backlog](../backlogs/define-features-epics.md) +- [Forecast](../scrum/forecast.md) + +</div> +<div style="float:left;width:130px;margin:3px"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;font-size:90%">Scrum</p> +- [Sprint backlogs](../scrum/sprint-planning.md) +- [Sprint capacity](../scale/capacity-planning.md) +- [Task boards](../scrum/task-board.md) +- [Sprint burndown](../scrum/sprint-burndown.md) + + +</div> +<div style="float:left;width:130px;margin:6px"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;font-size:90%">Kanban</p> +- [Kanban board](../kanban/kanban-basics.md) +- [Features and epics](../kanban/kanban-epics-features-stories.md) +- [Cumulative flow](../../report/guidance/cumulative-flow.md) + + +</div> +<div style="float:left;width:130px;margin:6px"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;font-size:90%">Widgets</p> +- [New work item](../../report/widget-catalog.md#new-work-item-widget) +- [Sprint burndown](../../report/widget-catalog.md#sprint-burndown-widget) +- [Sprint capacity](../../report/widget-catalog.md#sprint-capacity-widget) +- [Sprint overview](../../report/widget-catalog.md#sprint-overview-widget) +- [Team members](../../report/widget-catalog.md#team-members-widget) + +</div> + +<div style="float:left;width:100px;margin:3px"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;font-size:90%">Other</p> +- [Queries](../track/using-queries.md) +- [Velocity](../../report/guidance/team-velocity.md) +- [Dashboards](../../report/dashboards.md) +- [Alerts](../track/alerts-and-notifications.md) + +</div> + +<div style="clear:left;font-size:100%"> +</div> + + +Many of these tools are built from system queries that reference the team area path. For example, a team's default area path filters the work items that appear on a team's backlog. Also, work items that you create using an Agile tool auto-assign the areas and iterations based on team defaults. + +You can view these queries by choosing the **Create query** link that appears on these tools' pages. (Note that you can't change the underlying query.) Lastly, you can set security permissions to control who has access to create, modify, or manage test plans and test suites under an area. diff --git a/docs/work/_shared/assign-to-sprint.md b/docs/work/_shared/assign-to-sprint.md new file mode 100644 index 00000000000..ed9e1a458fc --- /dev/null +++ b/docs/work/_shared/assign-to-sprint.md @@ -0,0 +1,9 @@ + +<a id="assign-to-sprint"></a> + +### Move work items to a sprint from any backlog or board +You can drag any work item from any backlog or board to a sprint. Even when working from the Kanban or task board, you can drag a work item onto a sprint to change it's iteration path. + +>[!NOTE] +><b>Feature availability: </b> This feature is supported from VSTS and the web portal for TFS 2015.1 and later versions. + diff --git a/docs/work/_shared/common-work-item-fields.md b/docs/work/_shared/common-work-item-fields.md new file mode 100644 index 00000000000..3114dcec54d --- /dev/null +++ b/docs/work/_shared/common-work-item-fields.md @@ -0,0 +1,47 @@ + + +<a id="definitions-in-common"></a> + +## Definitions for common WIT fields + +The following fields and tabs appear in most work items. Each tab is used to track specific information, such as ![History tab icon](../backlogs/_img/icon-history-tab-wi.png) history, ![Links tab icon](../backlogs/_img/icon-links-tab-wi.png) links, or ![Attachment tab icon](../backlogs/_img/icon-attachments-tab-wi.png) attachments. These three tabs provide a history of changes, view of linked work items, and ability to view and attach files. + +The only required field for all WITs is **Title**. When the work item is saved, the system assigns it a unique **ID**. The form highlights required field in yellow. For information about other fields, see [Work item field index](../guidance/work-item-field.md). + +<table><thead> +<tr><th><p>Field/tab</p></th><th><p>Usage</p></th></tr></thead> +<tbody valign="top"> +<tr> + <td width="18%"><p>[Title](../track/titles-ids-descriptions.md) </p></td> + <td><p>Enter a description of 255 characters or less. You can always modify the title later.</p></td></tr> +<tr> + <td><p>[Assigned To](../track/query-by-workflow-changes.md)</p></td> + <td><p>Assign the work item to the team member responsible for performing the work. Depending on the context you are working in, the drop-down menu will list only team members or contributors to the team project.</p></td></tr> +<tr> + <td><p>[State](../track/query-by-workflow-changes.md)</p></td> + <td><p>When the work item is created, the State defaults to the first state in the workflow. As work progresses, update it to reflect the current state.</p></td></tr> +<tr> + <td><p>[Reason](../track/query-by-workflow-changes.md)</p></td> + <td><p>Use the default first. Update it when you change state. Each State is associated with a default reason.</p></td></tr> +<tr> + <td><p>[Area](../customize/set-area-paths.md)</p></td> + <td><p>Choose the area path associated with the product or team, or leave blank until assigned during a planning meeting.</p><p>To change the dropdown list of areas, see [Add and modify area and iteration paths](../customize/set-area-paths.md).</p></td> +</tr> +<tr> + <td><p>[Iteration](../customize/set-area-paths.md)</p></td> + <td><p>Choose the sprint or iteration in which the work is to be completed, or leave it blank and assign it later, during a planning meeting.</p><p>To change the drop-down list of iterations, see [Add and modify area and iteration paths](../customize/set-area-paths.md).</p></td> +</tr> +<tr> + <td><p>![History tab icon](../backlogs/_img/icon-history-tab-wi.png)[(History)](../track/history-and-auditing.md)</p></td> + <td><p>Review the audit trail that the system captures and capture additional information.</p><p>Every time that the work item is updated, information is appended to the history. History includes the date of the change, who made the change, and which fields were changed. You can also add formatted text to the history field.</p></td></tr> +<tr> + <td><p>![Links tab icon](../backlogs/_img/icon-links-tab-wi.png) [(Links)](https://msdn.microsoft.com/library/dd293534.aspx)</p></td> + <td><p>Add all types of links, such as hyperlinks, changesets, source files, and so on.</p><p>This tab also lists all links defined for the work item.</p></td></tr> +<tr> + <td><p>![Attachment tab icon](../backlogs/_img/icon-attachments-tab-wi.png)[(Attachments)](../track/linking-attachments.md) </p></td> + <td><p>Share more detailed information by adding files to the work item, such as email threads, documents, images, log files, or other file types.</p></td></tr> +</tbody> +</table> + + + diff --git a/docs/work/_shared/create-team-project-links.md b/docs/work/_shared/create-team-project-links.md new file mode 100644 index 00000000000..eca1c7c0ffb --- /dev/null +++ b/docs/work/_shared/create-team-project-links.md @@ -0,0 +1,14 @@ + +Before you start tracking work, you must have a team project. To create one hosted in the cloud, see [Sign up for Visual Studio Team Services](../../accounts/create-account-msa-or-work-student.md). To create one hosted on an on-premises TFS, see [Create a team project](../../accounts/create-team-project.md). + +If you have a team project, start tracking work: + +- [Add work items to manage a project](../backlogs/add-work-items.md) - to gain more familiarity with the work item form features +- [Create a backlog](../backlogs/create-your-backlog.md) - to develop your product backlog +- [Plan a sprint](../scrum/sprint-planning.md) - to start working in Scrum +- [Kanban](../kanban/kanban-basics.md) - to start working in Kanban +- [Excel](../office/bulk-add-modify-work-items-excel.md) or [Project](../office/create-your-backlog-tasks-using-project.md) - to create a work breakdown structure + +For more information on Agile tools: + +- [Team assets](../about-teams-and-settings.md) diff --git a/docs/work/_shared/custom-help.md b/docs/work/_shared/custom-help.md new file mode 100644 index 00000000000..941154cf044 --- /dev/null +++ b/docs/work/_shared/custom-help.md @@ -0,0 +1,5 @@ +### Need additional help? + +Email [VSTS Customization Help](mailto:vsocustpt@microsoft.com) and we'll be happy to help you out! + + diff --git a/docs/work/_shared/customization-phase-0-and-1-plus-version-header.md b/docs/work/_shared/customization-phase-0-and-1-plus-version-header.md new file mode 100644 index 00000000000..6cbf4ce123b --- /dev/null +++ b/docs/work/_shared/customization-phase-0-and-1-plus-version-header.md @@ -0,0 +1,7 @@ + +<p><b>VSTS (Hosted XML) | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013</b></p> + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML process models. For the Inheritance process model, see [Customize a process](../process/customize-process.md). For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + + diff --git a/docs/work/_shared/customization-witadmin-plus-version-header.md b/docs/work/_shared/customization-witadmin-plus-version-header.md new file mode 100644 index 00000000000..8ea0eeb0b15 --- /dev/null +++ b/docs/work/_shared/customization-witadmin-plus-version-header.md @@ -0,0 +1,7 @@ + +<p><b>TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013</b></p> + +>[!IMPORTANT] +>With **witadmin**, you can modify XML definition files to support the On-premises XML process model. For Hosted XML and Inheritance process models, you can only use **witadmin** commands to list information. For an overview of process models and what is supported, see [Customize your work tracking experience](../customize/customize-work.md). + + diff --git a/docs/work/_shared/customize-work-tracking.md b/docs/work/_shared/customize-work-tracking.md new file mode 100644 index 00000000000..f5cbe285d9e --- /dev/null +++ b/docs/work/_shared/customize-work-tracking.md @@ -0,0 +1,7 @@ + + +<a id="customize-work-tracking" /> +### Customize work tracking + +You can customize work item types by adding custom fields, custom workflow states, and custom pages on the form. The methods available to you depend on which platform you work from. For an overview of what you can customize, see [Customize work](../customize/customize-work.md). + diff --git a/docs/work/_shared/dev15-and-ts-version-header.md b/docs/work/_shared/dev15-and-ts-version-header.md new file mode 100644 index 00000000000..76ec253df2d --- /dev/null +++ b/docs/work/_shared/dev15-and-ts-version-header.md @@ -0,0 +1,4 @@ + + +<b>VSTS | TFS 2018 | TFS 2017</b> + \ No newline at end of file diff --git a/docs/work/_shared/dev15-version-header-process-template.md b/docs/work/_shared/dev15-version-header-process-template.md new file mode 100644 index 00000000000..3179ea28157 --- /dev/null +++ b/docs/work/_shared/dev15-version-header-process-template.md @@ -0,0 +1,9 @@ + +<b>VSTS | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013</b> + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML process models. For the Inheritance process model, see [Customize a process](/vsts/work/process/customize-process). +> +>For an overview of process models, see [Customize your work tracking experience](/vsts/work/customize/customize-work). + + diff --git a/docs/work/_shared/dev15-version-header.md b/docs/work/_shared/dev15-version-header.md new file mode 100644 index 00000000000..804b46e9d5a --- /dev/null +++ b/docs/work/_shared/dev15-version-header.md @@ -0,0 +1,3 @@ + + +<b>VSTS | TFS 2018 | TFS 2017 | TFS 2015</b> diff --git a/docs/work/_shared/feature-availability-simple.md b/docs/work/_shared/feature-availability-simple.md new file mode 100644 index 00000000000..7fd03c3ac5d --- /dev/null +++ b/docs/work/_shared/feature-availability-simple.md @@ -0,0 +1,7 @@ + +>[!NOTE] +><b>Feature availability: </b>Platform and version dependent features are annotated as follows: +- <b>VSTS</b> - Available from Visual Studio Team Services (cloud service) +- <b>TFS</b> - Available from Team Foundation Server (on-premises) +<p>To determine your platform or TFS version, see [Platform and version support](../../provide-feedback.md#platform-version).</p> + diff --git a/docs/work/_shared/feature-availability-team-services-only.md b/docs/work/_shared/feature-availability-team-services-only.md new file mode 100644 index 00000000000..72cfa7deccb --- /dev/null +++ b/docs/work/_shared/feature-availability-team-services-only.md @@ -0,0 +1,3 @@ + +[!NOTE] +<b>Feature availability: </b>This feature is currently available only from VSTS. \ No newline at end of file diff --git a/docs/work/_shared/field-reference.md b/docs/work/_shared/field-reference.md new file mode 100644 index 00000000000..d74fcc67bdc --- /dev/null +++ b/docs/work/_shared/field-reference.md @@ -0,0 +1,27 @@ +<a id="field-reference"> </a> + +### What is a field? How are field names used? + +Each [work item type](../backlogs/add-work-items.md) is associated with 31 system fields and several more type-specific fields. You use work items to plan and track your project. + +Each field supports tracking a piece of information about the work to perform. Values you assign to a field are stored in the work tracking data store which you can create queries to determine status and trends. + +For descriptions and usage of each field defined for the core system processes—[Scrum, Agile, and CMMI system processes](../guidance/choose-process.md)—see [Work item field index](../guidance/work-item-field.md). + +#### Field names +A work item field name uniquely identifies each work item field. Make sure your field names fall within these guidelines: + +- Field names must be unique within the account/project collection +- Field names must be 128 or fewer Unicode characters +- Field names can't contain any leading or trailing spaces, nor two or more consecutive spaces +- Field names must contain at least one alphabetic character +- Field names can't contain the following characters: ```.,;'`:~\/\*|?"&%$!+=()[]{}<>```. + +Because custom fields are defined for the account collection, you can't add a custom field to a process with the same field name that you add to another inherited process. + + +<!-- +16 person-name fields +1024 rules per field +128 pick list values per field +--> \ No newline at end of file diff --git a/docs/work/_shared/filter-backlog-or-board.md b/docs/work/_shared/filter-backlog-or-board.md new file mode 100644 index 00000000000..e3ba8617800 --- /dev/null +++ b/docs/work/_shared/filter-backlog-or-board.md @@ -0,0 +1,24 @@ +<a id="filter"></a> + +### Filter backlogs, boards, and queries + +If you have many items listed in your product or portfolio backlog, Kanban board, or query results—and you want to focus on a subset of them—you can filter the set. + +#### Filter based on keywords +You can use keywords to filter your backlogs, Kanban boards, and query results. The filter function picks up work items based on any visible/displayed column or field, including tags, based on the keyword that you enter. Also, you can enter a value for an ID, whether or not the ID field is visible. + +Here, we filter the backlog to only show items that include 'Web' in any one of the displayed column fields. + +<img src="../backlogs/_img/cyb-filter-backlog.png" alt="Apply text filter" style="border: 2px solid #C3C3C3;" /> + +The filtered set is always a flat list, even if you've selected to show parents. + +The filter criteria ignores the following characters when the field value starts with the character: ```{, (, [, !, @, #, $, %, ^, &, *, ~, `, ', "```. + +#### Filter based on tags +If you've [added tags to your work items](../track/add-tags-to-work-items.md), you can filter your backlogs, Kanban boards, and query results using the ![tag filter icon](../_img/icons/tag_filter_icon.png) tag filter. For backlogs and query results, add Tags as a column option prior to filtering on tags. + +To filter the Kanban board using tags, make sure that you first [customize cards to Show tags](../customize/customize-cards.md). See also, [Filter the Kanban board](../how-to/filter-backlog-or-board.md) for additional options. + +To learn more about filtering using Tags, see [Add tags to work items to categorize and filter lists and boards, Filter lists using tags](../track/add-tags-to-work-items.md#filter) + diff --git a/docs/work/_shared/follow-pr.md b/docs/work/_shared/follow-pr.md new file mode 100644 index 00000000000..0baca2895cc --- /dev/null +++ b/docs/work/_shared/follow-pr.md @@ -0,0 +1,14 @@ + + +To track the progress of a single pull request, click the ![Follow icon](../_img/icons/follow-icon.png) option from the context menu. This signals the system to notify you when changes are made to the PR. + +<img src="../track/_img/follow-pull-request.png" alt="Pull Request, context menu, Follow icon option" style="border: 2px solid #C3C3C3;" /> + +>[!IMPORTANT] +>For on-premises TFS, [you must configure an SMTP sever](../../tfs-server/admin/setup-customize-alerts.md) in order for team members to receive notifications. + +You'll only receive notifications when other members of your team modifies the PR, such as adding to the discussion or adding an attachment. + +Notifications are sent to your preferred email address, which you can change from your [account preferences](../../accounts/account-preferences.md). + +To stop following changes, open the PR context menu and click the ![Following icon](../_img/icons/following-icon.png) icon. diff --git a/docs/work/_shared/follow.md b/docs/work/_shared/follow.md new file mode 100644 index 00000000000..a7f063e9b10 --- /dev/null +++ b/docs/work/_shared/follow.md @@ -0,0 +1,13 @@ +When you want to track the progress of a single work item, click the ![Follow icon](../_img/icons/follow-icon.png) icon. This signals the system to notify you when changes are made to the work item. + +<img src="../backlogs/_img/follow-work-item.png" alt="Team Services Work item form, Follow icon control" style="border: 2px solid #C3C3C3;" /> + +>[!IMPORTANT] +>For on-premises TFS, [you must configure an SMTP sever](../../tfs-server/admin/setup-customize-alerts.md) in order for team members to receive notifications. + +You'll only receive notifications when other members of your team modifies the work item, such as adding to the discussion, changing a field value, or adding an attachment. + +Notifications are sent to your preferred email address, which you can change from your [account preferences](../../accounts/account-preferences.md). + +To stop following changes, click the ![Following icon](../_img/icons/following-icon.png) icon. + \ No newline at end of file diff --git a/docs/work/_shared/get-latest-process-templates.md b/docs/work/_shared/get-latest-process-templates.md new file mode 100644 index 00000000000..0817ec551be --- /dev/null +++ b/docs/work/_shared/get-latest-process-templates.md @@ -0,0 +1,9 @@ + + +>[!TIP] +>To access the latest versions of the default processes/process templates: +>- **For the Inheritance process model (VSTS) or the On-premises XML process model (on-premises TFS)**: + ><ul><li>[Install or upgrade to the latest version of TFS](https://www.visualstudio.com/downloads/#team-foundation-server-2017).</li> + ><li>Download the zipped template file using the [Process Template Manager](../guidance/manage-process-templates.md). You'll need to use a version of Visual Studio that is at the same version level as TFS. You can install the latest version of [Visual Studio Community](https://www.visualstudio.com/downloads/#visual-studio-community-2015-with-update-3-free) for free.</li> + ><li>You can access the latest versions of the default process templates installed on TFS 2017 here: %programfiles%/TFS 15.0/Tools/Deploy/ProcessTemplateManagerFiles/1033 (for TFS 2015, the main folder is TFS 14.0). For descriptions of each file and folder, see [Overview of process template files](../reference/process-templates/overview-process-template-files.md).</li></ul> +>- **For Hosted XML process model**: Open the Process page from the account settings admin context, and choose the Export option from the actions menu of a default process. To learn more, see [Manage processes](../process/manage-process.md). \ No newline at end of file diff --git a/docs/work/_shared/get-started-with-vsts-for-free.md b/docs/work/_shared/get-started-with-vsts-for-free.md new file mode 100644 index 00000000000..a11db06f3f5 --- /dev/null +++ b/docs/work/_shared/get-started-with-vsts-for-free.md @@ -0,0 +1,2 @@ +Support your team with services that enable them to share code, track work, and ship software – for any language, all in a single package. Get started for free with [VSTS](https://www.visualstudio.com/products/visual-studio-team-services-vs). + diff --git a/docs/work/_shared/help-support-shared.md b/docs/work/_shared/help-support-shared.md new file mode 100644 index 00000000000..9cc5da8765d --- /dev/null +++ b/docs/work/_shared/help-support-shared.md @@ -0,0 +1,8 @@ +<a id="provide-feedback"></a> +### Feedback and support + +We welcome your feedback. + +Send suggestions on **[UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services)**, and follow us on **[Twitter](https://twitter.com/vsts) @vsts**. + +See also our [comprehensive feedback and support page](../../provide-feedback.md). diff --git a/docs/work/_shared/hosted-plus-tfs-2017-earlier.md b/docs/work/_shared/hosted-plus-tfs-2017-earlier.md new file mode 100644 index 00000000000..412aa21619e --- /dev/null +++ b/docs/work/_shared/hosted-plus-tfs-2017-earlier.md @@ -0,0 +1,9 @@ + +<p><b>VSTS (Hosted XML) | TFS 2017 | TFS 2015 | TFS 2013</b></p> + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML process models. For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + + diff --git a/docs/work/_shared/image-differences.md b/docs/work/_shared/image-differences.md new file mode 100644 index 00000000000..81a49c66929 --- /dev/null +++ b/docs/work/_shared/image-differences.md @@ -0,0 +1,7 @@ + +<a id="image-diff"></a> + +>[!NOTE] +>The images you see from your web portal may differ from the images you see in this topic. These differences result from updates made to VSTSor your on-premises TFS, [options that you or your admin have enabled](/vsts/collaborate/preview-features), and which process was chosen when creating your team project—[Agile](/vsts/work/guidance/agile-process), [Scrum](/vsts/work/guidance/scrum-process), or [CMMI](/vsts/work/guidance/cmmi-process). However, the basic functionality available to you remains the same unless explicitly mentioned. +> +>Work items are denoted with icons for VSTS and TFS 2017.2 and later versions. For an overview of changes in the navigation experience and working within the user and administration contexts, see [Work in the web portal](/vsts/connect/work-web-portal#admin-context). diff --git a/docs/work/_shared/learn-about-new-nav-experience.md b/docs/work/_shared/learn-about-new-nav-experience.md new file mode 100644 index 00000000000..136c09739c4 --- /dev/null +++ b/docs/work/_shared/learn-about-new-nav-experience.md @@ -0,0 +1,3 @@ + +>[!NOTE] +>For an overview of the administration context and the new navigation experience supported in VSTS, see [Work in the web portal](/vsts/connect/work-web-portal#admin-context). diff --git a/docs/work/_shared/live-updates.md b/docs/work/_shared/live-updates.md new file mode 100644 index 00000000000..b995f1f1464 --- /dev/null +++ b/docs/work/_shared/live-updates.md @@ -0,0 +1,15 @@ +<a id="live-updates"></a> + +### Enable live updates + +>[!NOTE] +><b>Feature availability: </b> This feature is supported from VSTS and TFS 2017 and later versions. + +Enable live updates to automatically refresh your Kanban board when changes occur. With live updates enabled, you no longer have to press F5 to see the latest changes. + +![Kanban board, live updates icon](../_shared/_img/kanban-live-updates.png) + +As one team member updates the status of a work item, other team members will see those updates in real time as they occur. + +![Live update](../kanban/_img/kanban-live-updates.gif) + diff --git a/docs/work/_shared/multi-select-bulk-modify.md b/docs/work/_shared/multi-select-bulk-modify.md new file mode 100644 index 00000000000..43693facb50 --- /dev/null +++ b/docs/work/_shared/multi-select-bulk-modify.md @@ -0,0 +1,21 @@ + +<a id="bulk-modify"> </a> +### Use multi-select to bulk modify items + +>[!NOTE] +><b>Feature availability: </b> Multi-select of work items on the backlog and sprint backlogs is currently supported from VSTS and TFS 2015.1 and later versions. This feature works in the same way as multi-select works within query results. + +With multi-select, you can perform several actions on several work items at once, such as: + +- Add links +- Change one or more field values +- Change the backlog priority +- Assign to a team member +- Move to a sprint +- [Map items or change the parent an item is linked to](../backlogs/organize-backlog.md#mapping) +- Change the work item type or move to a different team project (VSTS only). + +To select several items in a sequence, hold down the shift key. To select several non-sequential items, use the Ctrl key. Then, you can either drag the selected items to a new position within the backlog, to a different sprint, or select an option from the context (![context icon](../_img/icons/context_menu.png)) or action (![actions icon](../_img/icons/actions-icon.png)) menu of one of the items. + +To learn more, see [Bulk modify work items](../backlogs/bulk-modify-work-items.md). + diff --git a/docs/work/_shared/new-form-shared.md b/docs/work/_shared/new-form-shared.md new file mode 100644 index 00000000000..c589a32a368 --- /dev/null +++ b/docs/work/_shared/new-form-shared.md @@ -0,0 +1,33 @@ +Here's what you'll see when you preview the new form. + +<img src="../_shared/_img/new-form-user-story-3-col.png" alt="New form for user story" style="border: 2px solid #C3C3C3;" /> + +For guidance in using the new form features, see [Add work items to plan and track your project](../backlogs/add-work-items.md). + +## New form features + +### Consistent look and feel + +First off, you'll notice that the form reflects the color of your work item type—bug, user story, or task. And, we've done away with duplicate titles to cut down on clutter. Whether you're working from a backlog, board, or query—your experience remains the same. + +<img src="../_shared/_img/new-form-bug-header.png" alt="New form, bug, header" style="border: 2px solid #C3C3C3;" /> + +### Great consumption experience + +Your data has more structure and organization. Plus, you can focus more easily on areas of interest by collapsing groups to hide details you don't care about. And as you resize the form, it quickly responds to provide you with a great viewing experience even within a limited screen width. + +<img src="../_shared/_img/new-form-exp-resized-user-story-form.png" alt="New form, collapsible groups, responsive form" style="border: 2px solid #C3C3C3;" /> + + +### More viewing area to support core experiences + +All the core tabs—Details, History, Links, and Attachments—now have more screen space. See [History and auditing](../track/history-and-auditing.md) for details on the new History tab. + +![View change history](../backlogs/_img/add-work-item-history.png) + +### Access to other tasks + +Looking for the toolbar task options? You access them now through the ![Actions icon](../_img/icons/actions-icon.png) Actions icon. + +![User story, Actions menu](../backlogs/_img/new-form-action-menu.png) + diff --git a/docs/work/_shared/new-form-xml-elements-availability.md b/docs/work/_shared/new-form-xml-elements-availability.md new file mode 100644 index 00000000000..36e11548dc7 --- /dev/null +++ b/docs/work/_shared/new-form-xml-elements-availability.md @@ -0,0 +1,10 @@ + + +>[!NOTE] +>When the new form roll out is enabled, the XML definitions for all work item types (WITs) in the collection are updated to include a **WebLayout** section within the **FORM** section. +> +>The new form makes available several new features as described in [New work item experience](../process/new-work-item-experience.md). Your account or project collection administrator manages the [switch to the new form](../customize/manage-new-form-rollout.md).<br/> +> - For the [Inheritance process model](../process/manage-process.md), the switch to the new form is automatic for all user accounts. +> - For the [Hosted XML process model](../import-process/import-process.md), an admin must [enable the new form](../customize/manage-new-form-rollout.md). <br/> +> - For TFS 2017, the new form is automatically available when you add team projects to a new collection. For existing team projects, an admin must [enable the new form](../customize/manage-new-form-rollout.md). <br/> +> - For TFS 2015 the new form isn't available. You must [upgrade to TFS 2017](https://www.visualstudio.com/downloads/#team-foundation-server-2017) to access the new form. diff --git a/docs/work/_shared/open-process-admin-context-ts.md b/docs/work/_shared/open-process-admin-context-ts.md new file mode 100644 index 00000000000..392d7cca002 --- /dev/null +++ b/docs/work/_shared/open-process-admin-context-ts.md @@ -0,0 +1,67 @@ + +0. To open the admin context from the user context, click the ![](../_img/icons/gear_icon.png) gear Settings icon and choose Account settings. + + >[!IMPORTANT] + >If you don't see the Account settings option, then you're working from an on-premises TFS. The Process page isn't supported. You must use the features supported for the On-premises XML process model as described in [Customize your work tracking experience](../customize/customize-work.md). + + <img src="../process/_img/manage-process-open-account-settings.png" alt="Default Collection Overview, Projects reference processes" style="border: 2px solid #C3C3C3;" /> + +0. Click Process. + + <img src="../_shared/_img/web-portal-admin-process-hub-new-nav.png" alt="Web portal, Account menu, Turn on new navigation selection" style="border: 2px solid #C3C3C3;" /> + +<!--- +<ol> +<li> +<p>To start, open the Process hub within the admin context. The steps differ depending on which navigation experience you are using.</p> + +<div style="background-color: #f2f0ee;padding-top:10px;padding-bottom:10px;"> + +<ul class="nav nav-pills" style="padding-right:15px;padding-left:15px;padding-bottom:5px;vertical-align:top;font-size:18px;"> +<li style="float:left;" data-toggle="collapse" data-target="#open-admin">Open the Process page in the admin context</li> +<li style="float: right;"><a style="max-width: 374px;min-width: 120px;vertical-align: top;background-color:#AEAEAE;margin: 0px 0px 0px 8px;min-width:90px;color: #fff;border: solid 2px #AEAEAE;border-radius: 0;padding: 2px 6px 0px 6px;outline-style:none;height:32px;font-size:14px;font-weight:400" data-toggle="pill" href="#old-nav">Old navigation</a></li> +<li class="active" style="float: right"><a style="max-width: 374px;min-width: 120px;vertical-align: top;background-color:#007acc;margin: 0px 0px 0px 0px;min-width:90px;color: #fff;border: solid 2px #007acc;border-radius: 0;padding: 2px 6px 0px 6px;outline-style:none;height:32px;font-size:14px;font-weight:400" data-toggle="pill" href="#new-nav">New navigation enabled</a></li> + +</ul> + +<div id="open-admin" class="tab-content collapse in fade" style="background-color: #ffffff;margin-left:5px;margin-right:5px;padding: 5px 5px 5px 5px;"> + +<div id="old-nav" class="tab-pane fade"> + +<p>To open the admin context from the user context, click the ![](../_img/icons/gear_icon.png) gear Settings icon.</p> + +![Open admin context](../process/_img/team-services-open-admin-context.png) + +<p>Click the account name to open the collection-level settings, and then open the Process tab. </p> + +![Web portal admin settings links](../_shared/_img/web-portal-admin-process-hub-old-nav.png) + + + +</div> + +<div id="new-nav" class="tab-pane fade in active"> + +<blockquote>**Tip**: To enable or disable the new navigation experience, open your user account menu. For more information, see [Work in the web portal, Admin context](../../connect/work-web-portal.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json#admin-context). </blockquote> + +<p>Choose the Account settings option from the project/team menu.</p> + +<img src="../../connect/_img/web-portal-open-account-settings-new-nav.png" alt="Web portal, new nav, open account settings" style="border: 2px solid #C3C3C3;" /> + +<p>Click Process. </p> + +<img src="../_shared/_img/web-portal-admin-process-hub-new-nav.png" alt="Web portal, Account menu, Turn on new navigation selection" style="border: 2px solid #C3C3C3;" /> + +</div> + +</div> +</div> + +<li><p>You'll see the three default system processes. The lock icon indicates that you're not able to customize these processes.</p> + +<img src="../process/_img/manage-process-default-collection-processes-up1.png" alt="Process tab" style="border: 2px solid #C3C3C3;" /> + +</li> +</ol> + +--> \ No newline at end of file diff --git a/docs/work/_shared/open-process-wit-admin-context-ts.md b/docs/work/_shared/open-process-wit-admin-context-ts.md new file mode 100644 index 00000000000..c32d3158b1e --- /dev/null +++ b/docs/work/_shared/open-process-wit-admin-context-ts.md @@ -0,0 +1,63 @@ +0. Open the admin context Process hub from a work item form or by choosing the Account Settings option from the gear option. For details, see [Customize a process, Start customizing](../process/customize-process.md#start-customizing). + +<!--- + +<ol> +<li> +<p>To start, open the Process hub within the admin context. The steps differ depending on which navigation experience you are using.</p> + +<div style="background-color: #f2f0ee;padding-top:10px;padding-bottom:10px;"> + +<ul class="nav nav-pills" style="padding-right:15px;padding-left:15px;padding-bottom:5px;vertical-align:top;font-size:18px;"> +<li style="float:left;" data-toggle="collapse" data-target="#open-admin">Open the Process page in the admin context</li> +<li style="float: right;"><a style="max-width: 374px;min-width: 120px;vertical-align: top;background-color:#AEAEAE;margin: 0px 0px 0px 8px;min-width:90px;color: #fff;border: solid 2px #AEAEAE;border-radius: 0;padding: 2px 6px 0px 6px;outline-style:none;height:32px;font-size:14px;font-weight:400" data-toggle="pill" href="#old-nav">Old navigation</a></li> +<li class="active" style="float: right"><a style="max-width: 374px;min-width: 120px;vertical-align: top;background-color:#007acc;margin: 0px 0px 0px 0px;min-width:90px;color: #fff;border: solid 2px #007acc;border-radius: 0;padding: 2px 6px 0px 6px;outline-style:none;height:32px;font-size:14px;font-weight:400" data-toggle="pill" href="#new-nav">New navigation enabled</a></li> + +</ul> + +<div id="open-admin" class="tab-content collapse in fade" style="background-color: #ffffff;margin-left:5px;margin-right:5px;padding: 5px 5px 5px 5px;"> + +<div id="old-nav" class="tab-pane fade"> + +<p>To open the admin context from the user context, click the ![](../_img/icons/gear_icon.png) gear Settings icon.</p> + +![Open admin context](../process/_img/team-services-open-admin-context.png) + +<p>Click the account name to open the collection-level settings, and then open the Process tab. </p> + +![Web portal admin settings links](../_shared/_img/web-portal-admin-process-hub-old-nav.png) + + + +</div> + +<div id="new-nav" class="tab-pane fade in active"> + +<blockquote>**Tip**: To enable or disable the new navigation experience, open your user account menu. For more information, see [Work in the web portal, Admin context](../../connect/work-web-portal.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json#admin-context). </blockquote> + +<p>Choose the Account settings option from the project/team menu.</p> + +<img src="../../connect/_img/web-portal-open-account-settings-new-nav.png" alt="Web portal, new nav, open account settings" style="border: 2px solid #C3C3C3;" /> + +<p>Click Process. </p> + +<img src="../_shared/_img/web-portal-admin-process-hub-new-nav.png" alt="Web portal, Account menu, Turn on new navigation selection" style="border: 2px solid #C3C3C3;" /> + + + +</div> + + +</div> +</div> + + +<li><p>Choose the inherited process you want to customize, and then click Work Item Types.</p> +<p>If you haven't created one yet, see [Create an inherited process](../process/manage-process.md#create-inherited-process).</p> +<p>Here we open Work Item Types for the MyAgile process.</p> +<img src="../process/_img/cwit-open-process-wits.png" alt="Process page, WITs" style="border: 2px solid #C3C3C3;" /> + +</li> +</ol> + +--> \ No newline at end of file diff --git a/docs/work/_shared/powerbi-reports-links.md b/docs/work/_shared/powerbi-reports-links.md new file mode 100644 index 00000000000..40cc7f380f9 --- /dev/null +++ b/docs/work/_shared/powerbi-reports-links.md @@ -0,0 +1,6 @@ + +<a id="powerbi-reports"></a> +### Power BI reports (VSTS) +If you connect to Visual Studio VSTS, then you can use [Power BI to create charts and reports](../../report/powerbi/report-on-vso-with-power-bi-vs.md). + + diff --git a/docs/work/_shared/process-editor.md b/docs/work/_shared/process-editor.md new file mode 100644 index 00000000000..e566f3e9a1c --- /dev/null +++ b/docs/work/_shared/process-editor.md @@ -0,0 +1,9 @@ + + +> [!TIP] +> With **witadmin**, you can [import and export definition files](../reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md). Other tools you can use include the Process Editor (requires that you have installed a version of Visual Studio): +> - For TFS 2017 and later versions, [install the TFS Process Template editor from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KarthikBalasubramanianMSFT.TFSProcessTemplateEditor). You can use this version of the Process Editor to modify the old-style work item forms. You can't use it to edit forms associated with the [new web forms](../process/new-work-item-experience.md). +> - For TFS 2015 and earlier versions, install [TFS Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power). +> +>Or, you can use the [TFS Team Project Manager](https://github.com/jelledruyts/TfsTeamProjectManager), an open-source client available from github. + diff --git a/docs/work/_shared/process-feature-availability.md b/docs/work/_shared/process-feature-availability.md new file mode 100644 index 00000000000..11c12d6aea7 --- /dev/null +++ b/docs/work/_shared/process-feature-availability.md @@ -0,0 +1,6 @@ +<b>VSTS (Inheritance)</b> + +>[!IMPORTANT] +>This topic applies to process customization for the Inheritance process model, which supports customization of team project(s) through a shared process model. +> +>For the Hosted XML process model, you customize your team projects by importing a custom process template; and for the On-premises XML process model, you customize a team project by importing modified XML definition files. For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md#process-models). \ No newline at end of file diff --git a/docs/work/_shared/process-guidance-form-platform.md b/docs/work/_shared/process-guidance-form-platform.md new file mode 100644 index 00000000000..4f0a01321e5 --- /dev/null +++ b/docs/work/_shared/process-guidance-form-platform.md @@ -0,0 +1,3 @@ + +[!NOTE] +<b>Feature availability: </b> Work item tracking forms and features available to you differ depending on whether you connect to VSTSor an on-premises Team Foundation Server (TFS), and whether you open the form from the web portal or Visual Studio Team Explorer. Forms and guidance provided in this topic reflect those available from the web portal for VSTS and TFS 2017.   diff --git a/docs/work/_shared/quick-tips-shared-query.md b/docs/work/_shared/quick-tips-shared-query.md new file mode 100644 index 00000000000..1ef93c60900 --- /dev/null +++ b/docs/work/_shared/quick-tips-shared-query.md @@ -0,0 +1,11 @@ + + +### Quick tips on shared queries + +If you are new to VSTS and TFS and shared queries, review these tips to learn how you can manage work more effectively: + +- To find work items that are assigned to you, add **@Me** as the value for the Assigned To field in one of the query clauses. +- All valid users with standard access can create queries and folders under the **My Queries** area. To create queries and query folders under **Shared Queries**, you must have the Contribute permission set. For more information, see [Set permissions on queries](../track/set-query-permissions.md). +- You can modify any query by adding criteria to focus on a product area, an iteration, or another field. To modify a query, [open the query editor](../track/using-queries.md). +- You can open any query in [Excel](../office/bulk-add-modify-work-items-excel.md) or [Project](../office/create-your-backlog-tasks-using-project.md), where you can update the fields of one or more work items and publish your changes to the database for tracking work items. +- You can [visualize status or progress](../../report/charts.md) by creating a pie-chart, column chart, or trend chart for flat-list queries. diff --git a/docs/work/_shared/rest-apis-queries.md b/docs/work/_shared/rest-apis-queries.md new file mode 100644 index 00000000000..0e5a8c5f840 --- /dev/null +++ b/docs/work/_shared/rest-apis-queries.md @@ -0,0 +1,6 @@ +### REST API and SDK resources + +To programmatically interact with queries, see one of these resources: + +- **REST APIs:** [Work item queries and query folders](https://www.visualstudio.com/integrate/api/wit/queries) and [Work item query language](https://www.visualstudio.com/integrate/api/wit/wiql) +- **SDK:** [Query for Bugs, Tasks, and Other Work Items](https://msdn.microsoft.com/library/bb130306.aspx). diff --git a/docs/work/_shared/rich-text-format.md b/docs/work/_shared/rich-text-format.md new file mode 100644 index 00000000000..04d5f8532a5 --- /dev/null +++ b/docs/work/_shared/rich-text-format.md @@ -0,0 +1,29 @@ +<a id="rich-text"></a> +### Rich text format + +To improve the readability of your work items and convey detailed information, you can format text and insert images inline within their description and history fields, or within any field of type HTML. You can use this feature to capture information within a work item that you might previously have attached as a file. + +The formatting toolbar appears above each text box that can be formatted. It only becomes active when you click within the text box. + +You can format text in HTML data fields, such as the Description, Accepted Criteria, and History. Available fields depend on the work item type and if you've [customized the process](../process/customize-process.md). + +You can format text and insert images inline using the web portal or Team Explorer. The specific set of formatting features differs between the two clients. + +**Rich text formatting toolbar - Web portal** + +![Rich text tool bar - web portal](_img/rich-text-ui-web-portal.png) + + +**Rich text formatting toolbar - Team Explorer** + +![Rich text tool bar - Team Explorer](_img/rich-text-ui-te.png) + +For example, using Team Explorer you can choose the font, font size, and text and background colors in addition to applying formats of bold, italics, underline, lists, and hyperlinks that are available with web portal. + +You can copy and paste HTML text or an image from another application directly into the text box using Ctrl+C and Ctrl+V shortcuts. + +You can also use the following shortcut keys to format your text: +- Bold Ctrl+B +- Italic Ctrl+I +- Underline Ctrl+U +- Hyperlink Ctrl+K (Team Explorer only) \ No newline at end of file diff --git a/docs/work/_shared/search-box.md b/docs/work/_shared/search-box.md new file mode 100644 index 00000000000..1932d600c9d --- /dev/null +++ b/docs/work/_shared/search-box.md @@ -0,0 +1,8 @@ + + + +> [!IMPORTANT] +> If your admin has installed the [Work item search extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-workitem-search), the search box will perform an adhoc query using the extension. You'll no longer be able to initiate a managed search. Instead, you'll need to open the **Work>Queries** page and construct a query. To learn more, see [Adhoc vs managed work item queries](../track/adhoc-vs-managed-queries.md). +> +> +> \ No newline at end of file diff --git a/docs/work/_shared/set-team-defaults-new-work-items.md b/docs/work/_shared/set-team-defaults-new-work-items.md new file mode 100644 index 00000000000..2c0c7eefa72 --- /dev/null +++ b/docs/work/_shared/set-team-defaults-new-work-items.md @@ -0,0 +1,44 @@ +<a id="new-work-items"></a> + +### Team context and new work items + +The system automatically assigns new work items the default area and iteration paths based on the team context. Work items you add from the team dashboard (new work item widget) and queries page are assigned the team default iteration. Work items you add from a team backlog or board, are assigned the team default backlog iteration. + +To learn more or to change team defaults, see [Set team defaults](../scale/set-team-defaults.md). + + +<div style="background-color: #f2f0ee;padding-top:10px;padding-bottom:10px;"> + +<ul class="nav nav-pills" style="padding-right:15px;padding-left:15px;padding-bottom:5px;vertical-align:top;font-size:18px;"> +<li style="float:left;" data-toggle="collapse" data-target="#open-team-context">Switch team context</li> +<li style="float: right;"><a style="max-width: 374px;min-width: 120px;vertical-align: top;background-color:#AEAEAE;margin: 0px 0px 0px 8px;min-width:90px;color: #fff;border: solid 2px #AEAEAE;border-radius: 0;padding: 2px 6px 0px 6px;outline-style:none;height:32px;font-size:14px;font-weight:400" data-toggle="pill" href="#old-nav">Old navigation</a></li> +<li class="active" style="float: right"><a style="max-width: 374px;min-width: 120px;vertical-align: top;background-color:#007acc;margin: 0px 0px 0px 0px;min-width:90px;color: #fff;border: solid 2px #007acc;border-radius: 0;padding: 2px 6px 0px 6px;outline-style:none;height:32px;font-size:14px;font-weight:400" data-toggle="pill" href="#new-nav">New navigation enabled</a></li> + +</ul> + +<div id="open-team-context" class="tab-content collapse in fade" style="background-color: #ffffff;margin-left:5px;margin-right:5px;padding: 5px 5px 5px 5px;"> + +<div id="old-nav" class="tab-pane fade"> + +<p>You navigate to your team context from the top navigation bar as shown. Choose Browse All if the name you want doesn't appear in the list. </p> + +<img src="../backlogs/_img/switch-team-project-2.png" alt="Backlog page, old nav, switch team context" style="border: 2px solid #C3C3C3;" /> + + +</div> + +<div id="new-nav" class="tab-pane fade in active"> + +>[!TIP] +>To enable or disable the new navigation experience, open your user account menu. For more information, see [Work in the web portal, Admin context](../../connect/work-web-portal.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json#admin-context). + +<p>You navigate to your team context from the top navigation bar as shown. Choose Browse All if the name you want doesn't appear in the list. </p> + +<img src="../_shared/_img/switch-team-context-new-nav.png" alt="Backlog page, new nav, switch team comtext" style="border: 2px solid #C3C3C3;" /> + + +</div> + +</div> +</div> + diff --git a/docs/work/_shared/team-defaults-referenced-by-team-tools.md b/docs/work/_shared/team-defaults-referenced-by-team-tools.md new file mode 100644 index 00000000000..5f2496e5355 --- /dev/null +++ b/docs/work/_shared/team-defaults-referenced-by-team-tools.md @@ -0,0 +1,79 @@ + +<!--- Team defaults referenced by Agile tools --> + +>**Note**: Some features are available only from VSTS and TFS 2017 or later versions. For details, see [Set team defaults](../scale/set-team-defaults.md). + +When you define a team, you define the team's: +- Selected area path(s) +- Default area path +- Selected iteration path(s) +- Backlog iteration path +- Default iteration path + +All Agile tools reference the area path(s) defined for a team. For example, one team might handle all work assigned to *Customer Profile* and *Shopping Cart*, while another team only manages work assigned to the *Email* area path. Also, the set of work items that appear on a backlog or board depend on the current State of a work item or it's parent-child status. + +In addition, several tools reference the team's default iteration and selected iteration paths or sprints. For example, when you add new work items from a backlog or board view, or from a team dashboard, the system assigns the team's default area path and default iteration path to these work items. + +<div style="font-size:90%"> + +<table valign="top" width="100%" > +<tr valign="bottom" > +<th width="20%">Agile tool</th> +<th width="18%">Area path<br/>(see note 1)</th> +<th width="32%">Iteration path</th> +<th width="30%">State</th> +</tr> +<tr valign="top" > +<td>Portfolio or product backlogs</td> +<td>Selected area path(s)</td> +<td>Equal to or under team's [backlog iteration path](../scale/set-team-defaults.md#set-backlog-iteration)</td> +<td>Active (corresponds to a Proposed or InProgress state category, see notes 2, 3)</td> +</tr> + + +<tr valign="top" > +<td>Kanban boards (see note 4)</td> +<td>Selected area path(s)</td> +<td>Equal to or under team's [backlog iteration path](../scale/set-team-defaults.md#set-backlog-iteration)</td> +<td>Any state (see notes 3, 5)</td> +</tr> + +<tr valign="top" > +<td>Sprint backlogs (see note 4)</td> +<td>Selected area path(s)</td> +<td>Team's selected iteration paths</td> +<td>Any state (see notes 3, 5)</td> +</tr> + + +<tr valign="top" > +<td>Task boards (see note 4)</td> +<td>Selected area path(s)</td> +<td>Team's selected iteration paths</td> +<td>Any state (see notes 3, 5)</td> +</tr> + +<tr valign="top" > +<td>New work item widget</td> +<td>Default area path</td> +<td>Default iteration path</td> +<td>n/a</td> +</tr> + +</table> + +<p><b>Notes:</b><p> +<ol> +<li>Agile tools filter items based on the team's selected area path(s). Teams can choose [whether to include or exclude items assigned to subarea paths](../scale/set-team-defaults.md#team-area-paths).</li> +<li>Work items whose State equals Closed, Done, or Removed (corresponding to a Completed category state) don't appear on portfolio and product backlogs.</li> +<li>You can add custom workflow states and assign them to one of three state categories. The [state categories](../concepts/workflow-and-state-categories.md) determine which work items appear on backlog and board views. </li> +<li>Kanban boards, sprint backlogs, and task boards only show the last node in a hierarchy, called the leaf node. For example, if you link items within a hierarchy that is four levels deep, only the items at the fourth level appear on the Kanban board, sprint backlog, and task board. To learn more, see [parent-child links between items](../troubleshoot/resolve-backlog-reorder-issues.md#leaf-nodes).</li> +<li>Work items whose State equals Removed don't appear on boards.</li> +</ol> +</div> + +<div style="clear:left;font-size:100%"> +</div> + + + \ No newline at end of file diff --git a/docs/work/_shared/tfs-ps-sync-header.md b/docs/work/_shared/tfs-ps-sync-header.md new file mode 100644 index 00000000000..394f4dcffd0 --- /dev/null +++ b/docs/work/_shared/tfs-ps-sync-header.md @@ -0,0 +1,4 @@ +<p><b>TFS 2015 | TFS 2013</b></p> + +>[!NOTE] +>TFS 2017 and later versions no longer support native integration with Microsoft Project Server. If you upgrade to TFS 2017 or want to use a third party option, see [Synchronize TFS with Project Server](../office/sync-ps-tfs.md). \ No newline at end of file diff --git a/docs/work/_shared/update-xml-wit.md b/docs/work/_shared/update-xml-wit.md new file mode 100644 index 00000000000..4266fe26313 --- /dev/null +++ b/docs/work/_shared/update-xml-wit.md @@ -0,0 +1,10 @@ + + +<a id="update-xml-wit"></a> +## Update the XML definition for a WIT +If you are new to WIT customization, note the following: + +- To customize any aspect of a WIT requires updating the XML definition for the WIT. The WIT XML definition is described in [All WITD XML elements reference](/vsts/work/reference/all-witd-xml-elements-reference) +- If you are customizing the web form that uses the new work item experience, you'll want to reference the [WebLayout and Control elements](/vsts/work/reference/weblayout-xml-elements) +- If you are customizing a client form for use with Visual Studio, you'll want to reference the [Layout XML element reference](/vsts/work/reference/layout-xml-element-reference) +- Follow the sequence of steps outlined in [Customize the work item tracking web form](/vsts/work/customize/customize-wit-form). \ No newline at end of file diff --git a/docs/work/_shared/verify-bug-test-runner.md b/docs/work/_shared/verify-bug-test-runner.md new file mode 100644 index 00000000000..08ccfbdfde9 --- /dev/null +++ b/docs/work/_shared/verify-bug-test-runner.md @@ -0,0 +1,12 @@ + +<a id="verify-bug"> </a> +###Verify a bug, re-run tests defined for web apps + +>[!NOTE] +><b>Feature availability: </b>The **Verify** option is available from the bug work item form from VSTS and the web portal for TFS 2017.1 or later versions. + +Choose the **Verify** option to re-run tests which identified the bug. You can invoke the Verify option from the bug work item form context menu to launch the relevant test case in the web runner. Perform your validation using the web runner and update the bug work item directly within the web runner. + +<img src="../_shared/_img/verify-bug-menu-option.png" alt="VSTS, Bug work item form, Actions menu, Verify option" style="border: 2px solid #C3C3C3;" /> + +To learn more about running test from the web portal, see [Run tests for web apps](../../manual-test/getting-started/run-manual-tests.md). diff --git a/docs/work/_shared/version-header-hosted-plus-tfs.md b/docs/work/_shared/version-header-hosted-plus-tfs.md new file mode 100644 index 00000000000..23128fc4c22 --- /dev/null +++ b/docs/work/_shared/version-header-hosted-plus-tfs.md @@ -0,0 +1 @@ +<p><b>VSTS (Hosted XML) | TFS 2018 | TFS 2017</b></p> diff --git a/docs/work/_shared/version-header-tfs-only.md b/docs/work/_shared/version-header-tfs-only.md new file mode 100644 index 00000000000..340f986c5b5 --- /dev/null +++ b/docs/work/_shared/version-header-tfs-only.md @@ -0,0 +1 @@ +<p><b>TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013</b></p> \ No newline at end of file diff --git a/docs/work/_shared/version-vsts-tfs-all-versions.md b/docs/work/_shared/version-vsts-tfs-all-versions.md new file mode 100644 index 00000000000..18b1f9b4daf --- /dev/null +++ b/docs/work/_shared/version-vsts-tfs-all-versions.md @@ -0,0 +1 @@ +<p><b>VSTS | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013</b></p> \ No newline at end of file diff --git a/docs/work/_shared/witadmin-run-tool.md b/docs/work/_shared/witadmin-run-tool.md new file mode 100644 index 00000000000..ede97ad0e98 --- /dev/null +++ b/docs/work/_shared/witadmin-run-tool.md @@ -0,0 +1,13 @@ + +To run the **witadmin** command-line tool, open a Command Prompt window where Visual Studio is installed. The **witadmin** command-line tool installs with any version of Visual Studio. You can access this tool by installing the free version of [Visual Studio Community](https://www.visualstudio.com/downloads/download-visual-studio-vs). + +|Version | Change directory | +|--------|-----------| +|TFS 2018|`cd %programfiles(x86)%\Microsoft Visual Studio 16.0\Common7\IDE` | +|TFS 2017|`cd %programfiles(x86)%\Microsoft Visual Studio 15.0\Common7\IDE` | +|TFS 2015|`cd %programfiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE` | +|TFS 2013|`cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE` | + + +On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + diff --git a/docs/work/about-teams-and-settings.md b/docs/work/about-teams-and-settings.md new file mode 100644 index 00000000000..7176de351aa --- /dev/null +++ b/docs/work/about-teams-and-settings.md @@ -0,0 +1,167 @@ +--- +title: About teams & Agile tools | VSTS & TFS +description: Guide to adding and configuring teams in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 24C97BED-88F4-4D91-98D1-4AC0B39AB7D7 +ms.manager: douge +ms.author: kaelli +ms.date: 07/21/2017 +ms.topic: get-started-article +--- + +# About teams and Agile tools + +[!INCLUDE [temp](_shared/version-vsts-tfs-all-versions.md)] + +<a id="teams"></a> + +Adding a team is the #1 way in which Agile tools supports a growing organization. Once your team grows beyond its optimum size—typically anywhere from 6 to 9 members—you might consider moving from a one team structure to a two team structure. For enterprises adopting Agile tools, setting up a hierarchical team structure provides several advantages to portfolio and program managers to track progress across several teams. + +Depending on the size of your organization and your tracking needs, you can set up a team structure similar to the one shown. You do this by defining teams and their associated area path(s). + +![Each team has its own view of the work](scale/_img/pm-team-structure.png) + +For example, each feature team can be associated with a single feature area path—such as *Customer Profile*, *Shopping Cart*, *Email*—or several area paths. Each management team, which focuses on a set of features, can choose several area paths to monitor. This allows each feature team to have their distinct backlog to plan, prioritize, and track their work. And, portfolio or product owners can create their vision, road map, and goals for each release, monitor progress across their portfolio of projects, and manage risks and dependencies. To learn more, see [Portfolio management](scale/portfolio-management.md). + +## Each team gets their own set of tools + +Each team you create gets access to a suite of Agile tools and team assets. These tools provide teams the ability to work autonomously and collaborate with other teams across the enterprise. Each team can configure and customize each tool to meet the way they want to work. + +![Agile tools, team assets](scale/_img/agile-tools-team-assets.png) + +These tools reference the team's default area path, iteration path, and selected sprints to automatically filter the set of work items they display. Here's a quick summary of these tools: + +>[!NOTE] +>Some features are available only from VSTS and TFS 2017 and later versions. + + +> [!div class="mx-tdBreakAll"] +> |Backlogs |Scrum |Kanban | Widgets | Other tools | +> |-------------|----------|---------|---------|---------| +> |- [Product backlog](backlogs/create-your-backlog.md)<br/>- [Features backlog](backlogs/define-features-epics.md)<br/>- [Epics backlog](backlogs/define-features-epics.md)<br/>- [Forecast](scrum/forecast.md) |- [Sprint backlogs](scrum/sprint-planning.md)<br/>- [Sprint capacity](scale/capacity-planning.md)<br/>- [Task board](scrum/task-board.md)<br/>- [Sprint burndown](scrum/sprint-burndown.md)|- [Kanban board](kanban/kanban-basics.md)<br/>- [Features board](kanban/kanban-epics-features-stories.md)<br/>- [Epics board](kanban/kanban-epics-features-stories.md)<br/>- [Cumulative flow](../report/guidance/cumulative-flow.md)|- [New work item](../report/widget-catalog.md#new-work-item-widget)<br/>- [Sprint burndown](../report/widget-catalog.md#sprint-burndown-widget)<br/>- [Sprint capacity](../report/widget-catalog.md#sprint-capacity-widget)<br/>- [Sprint overview](../report/widget-catalog.md#sprint-overview-widget)<br/>- [Team members](../report/widget-catalog.md#team-members-widget) | - [Favorites](../collaborate/set-favorites.md)<br/>- [Work item templates](backlogs/work-item-template.md)<br/>- [Delivery plans](scale/review-team-plans.md)<br/>- [Queries](track/using-queries.md)<br/>- [Velocity](../report/guidance/team-velocity.md)<br/>- [Dashboards](../report/dashboards.md)<br/>- [Alerts](../collaborate/manage-team-notifications.md) | + + +<!--- IN ADDITION: Favorites (query, build); assigned to <team> PRs, Default reviewers for PRs, @CurrentIteration, @Mention a group, team is a group --> + +Many of these tools are built from system queries that reference the team area path. For example, a team's default area path filters the work items that appear on a team's backlog. Also, work items that you create using an Agile tool auto-assign the areas and iterations based on team defaults. + +<!--- +You can view these queries by choosing the **Create query** link that appears on these tools' pages. (Note that you can't change the underlying query.) Lastly, you can set security permissions to control who has access to create, modify, or manage test plans and test suites under an area. +--> + + +## Team defaults referenced by backlogs and boards + +What work items appear on team backlogs and boards? When you add work items to a backlog or board, how are team defaults used to assign field values? + +Teams are associated with one or more area paths and a backlog iteration path which determine what items will appear on their backlogs and boards. + +When you define a team, you define the team's: +- Selected area path(s) +- Default area path +- Selected iteration path(s) +- Backlog iteration path +- Default iteration path + +All Agile tools reference the area path(s) defined for a team. The set of work items that appear on a backlog or board depend on the current State of a work item or it's parent-child status. + +In addition, several tools reference the team's default iteration and selected iteration paths or sprints. For example, when you add new work items from a backlog or board view, or from a team dashboard, the system assigns the team's default area path and default iteration path to these work items. + + +<table valign="top" width="100%" > +<tr valign="bottom" > +<th width="20%">Agile tool</th> +<th width="18%">Area path<br/>(see note 1)</th> +<th width="32%">Iteration path</th> +<th width="30%">State</th> +</tr> +<tr valign="top" > +<td>Portfolio or product backlogs</td> +<td>Selected area path(s)</td> +<td>Equal to or under team's [backlog iteration path](scale/set-team-defaults.md#set-backlog-iteration)</td> +<td>Active (corresponds to a Proposed or InProgress state category, see notes 2, 3)</td> +</tr> + + +<tr valign="top" > +<td>Kanban boards (see note 4)</td> +<td>Selected area path(s)</td> +<td>Equal to or under team's [backlog iteration path](scale/set-team-defaults.md#set-backlog-iteration)</td> +<td>Any state (see notes 3, 5)</td> +</tr> + +<tr valign="top" > +<td>Sprint backlogs (see note 4)</td> +<td>Selected area path(s)</td> +<td>Team's selected iteration paths</td> +<td>Any state (see notes 3, 5)</td> +</tr> + + +<tr valign="top" > +<td>Task boards (see note 4)</td> +<td>Selected area path(s)</td> +<td>Team's selected iteration paths</td> +<td>Any state (see notes 3, 5)</td> +</tr> + +<tr valign="top" > +<td>New work item widget</td> +<td>Default area path</td> +<td>Default iteration path</td> +<td>n/a</td> +</tr> + +</table> + +<p><b>Notes:</b><p> +<ol> +<li>Agile tools filter items based on the team's selected area path(s). Teams can choose [whether to include or exclude items assigned to subarea paths](scale/set-team-defaults.md#team-area-paths).</li> +<li>Work items whose State equals Closed, Done, or Removed (corresponding to a Completed category state) don't appear on portfolio and product backlogs.</li> +<li>You can add custom workflow states and assign them to one of three state categories. The [state categories](concepts/workflow-and-state-categories.md) determine which work items appear on backlog and board views. </li> +<li>Kanban boards, sprint backlogs, and task boards only show the last node in a hierarchy, called the leaf node. For example, if you link items within a hierarchy that is four levels deep, only the items at the fourth level appear on the Kanban board, sprint backlog, and task board. To learn more, see [parent-child links between items](./troubleshoot/resolve-backlog-reorder-issues.md#leaf-nodes).</li> +<li>Work items whose State equals Removed don't appear on boards.</li> +</ol> + + +## Structure hierarchical teams or scale agility within an enterprise + +Although there is no concept of sub-teams, you can create teams whose area paths are under another team, which effectively creates a hierarchy of teams. To learn more, see [Add another team](scale/multiple-teams.md). + +Also, these topics can walk you through the steps for configuring teams, area paths, and iterations to support portfolio management or enterprise organizations: +- [Portfolio management](scale/portfolio-management.md) +- [Implement Scaled Agile Framework to support epics, release trains, and multiple backlogs](scale/scaled-agile-framework.md) + + +## Summary +- Every team owns their own backlog, to create a new backlog you [create a new team](scale/multiple-teams.md) +- Every backlog has a corresponding [Kanban board](kanban/kanban-basics.md) you can use to track progress and update status +- The [team's specified area and iteration paths](scale/set-team-defaults.md) determine which work items appear on the backlog and Kanban board—you can easily decide to include or exclude work items under a specific area path +- Each team can control how [bugs show up on their backlogs and boards](customize/show-bugs-on-backlog.md) +- For an overview of all team assets and how to configure them, see [Configure team settings](scale/manage-team-assets.md) +- To have work performed by several teams roll up in to a portfolio backlog, you'll want to [setup the team hierarchy](scale/portfolio-management.md) +- To add fields or work item types, see [Customize your work tracking experience](customize/customize-work.md). + +## Related notes + +- [Add another team](scale/multiple-teams.md) +- [Set team defaults](scale/set-team-defaults.md) +- [Configure team settings ](scale/manage-team-assets.md) +- [Work effectively from your account hub ](../connect/account-home-pages.md) + +<a id="team-group"> </a> +### Team groups + +You can use this group to filter queries. The name of team groups follows the pattern [Team Project Name]\Team Name. For example, the following query finds work assigned to members of the [Fabrikam Fiber]\Email team group. + +<img src="scale/_img/query-in-group-email-team-work-in-progress.png" alt="Web portal, Queries page, Query that uses In Group operator and team group name" style="border: 2px solid #C3C3C3;" /> + +### Work on more than one team + +Can a user account belong to more than one team? + +Yes. When you add user accounts to a team project, you can add them as members of the team project, or you can add them to one or more teams added to the team project. If you work on two or more Scrum teams, you'll want to make sure you, [specify your sprint capacity for each team you work on](scale/capacity-planning.md). + + + diff --git a/docs/work/backlogs-boards-plans.md b/docs/work/backlogs-boards-plans.md new file mode 100644 index 00000000000..cb511774044 --- /dev/null +++ b/docs/work/backlogs-boards-plans.md @@ -0,0 +1,288 @@ +--- +title: Backlogs, boards, plans | VSTS & TFS +description: Understand the tasks supported among backlogs, Kanban boards, and task boards when working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 00D09790-63C3-4E3F-91BA-122CE2779A70 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/11/2017 +--- + +# Backlogs, boards, and plans + +[!INCLUDE [temp](_shared/version-vsts-tfs-all-versions.md)] + +What can you do from a backlog view versus a board view? How do these differ from plans? How do changes you make in one show up on the other? What customizations can you make for each? + +Which view should you use to work with Agile methods? + +#### In a nutshell... + +- Backlogs display work items as a list and boards display them as cards +- You use your product backlog to quickly plan and prioritize your work +- You use your sprint backlogs and task boards when you work in Scrum +- You use your Kanban board to update work status and when you employ Kanban methods +- Each backlog is associated with a board, changes to priority order you make in one are reflected in its corresponding board +- Plans allow you to review the deliverables for several teams across sprints and a calendar schedule Delivery Plans are available for VSTS and TFS 2017.2 and later versions. You access them by [installing the Marketplace Plans extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-plans) +- Backlogs, boards, and plans are configurable for each team. + + +With list backlogs you can quickly develop your project plan; group and prioritize work; and perform bulk updates on selected work items. With boards, you can quickly update status and fields displayed for each work item. + +And with plans, you can monitor progress, deliverables, and dependencies across several teams. + +You access your backlogs and boards from the **Work** hub. When you work from the Stories (Agile) or Backlog items (Scrum) pages, you have access to the product backlog and Kanban board. When you work from a sprint page, you have access to the sprint backlog and task board. For an overview of working in Scrum or Kanban, see [Get started with Agile project management](overview.md). + +<img src="_img/plan-intro.png" alt="Work hub, product backlog page" style="border: 2px solid #C3C3C3;" /> + +## Three classes of backlogs, two types of boards + +To manage work, you have access to three classes of backlogs—portfolio, product, and sprint—and two types of boards—Kanban and task. Backlogs list work items, boards display work items as cards. Backlog and board views provide similar and distinct features to support planning and tracking. + +You use work items to share information, assign work to team members, track dependencies, organize work, and more. You can apply different filters to your backlogs and boards to just show those items of interest. + +### Portfolio, product, and sprint backlogs +Portfolio backlogs typically track high-level features, scenarios, or epics. Your product backlog contains a prioritized list of user stories, deliverables, or work you plan to build or fix. Portfolio backlogs help you organize your product backlog into a hierarchy of elements. Sprint backlogs contain just those items that each team is working on during a scheduled sprint or iteration period. + +For details about working in each type of backlog, see [Create your backlog](backlogs/create-your-backlog.md), [Define features and epics](backlogs/define-features-epics.md), and [Sprint planning (sprint backlogs)](scrum/sprint-planning.md). + +>[!TIP] +>You can't sort a backlog by column. However, you can use the Create Query option on each backlog to create a query that you can sort on any field column you choose. To learn more about queries, see [Use the query editor to list and manage queries](./track/using-queries.md). + +### Kanban and task boards +Kanban and task boards support visualizing the flow of work and monitoring metrics to optimize that flow. Kanban boards track requirements, are sprint-independent, and you monitor the flow through the cumulative flow chart. Task boards track tasks defined for a sprint and you monitor the flow via the sprint burndown chart. + +For details about working in each type of board, see [Kanban basics](kanban/kanban-basics.md) and [Task board](scrum/task-board.md). + +### Feature support across backlogs and boards +The following table indicates those elements or tasks associated with each type of backlog and board. + + + +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="25%">Associated element or task</th> +<th width="15%">Backlog type:<br/>Portfolio</th> +<th width="15%">Backlog type:<br/>Product</th> +<th width="15%">Board type:<br/>Kanban</th> +<th width="15%">Backlog type:<br/>Sprint</th> +<th width="15%">Board type:<br/>Task</th> +</tr> + +<tr> +<td>Corresponding backlog or board type</td> +<td>Kanban</td> +<td>Kanban</td> +<td>Portfolio or product</td> +<td>Task</td> +<td>Sprint</td> +</tr> + +<tr> +<td>Add items and child items<br/>(see notes 1, 2)</td> +<td>Yes</td> +<td>Yes</td> +<td>Yes</td> +<td>Yes</td> +<td>Yes</td> +</tr> + +<tr> +<td>Reorder items</td> +<td>Yes</td> +<td>Yes</td> +<td>Yes</td> +<td>Yes</td> +<td>Yes</td> +</tr> + +<tr> +<td>Map items</td> +<td>Yes (except the top-level portfolio backlog)</td> +<td>Yes</td> +<td>No</td> +<td>No</td> +<td>No</td> +</tr> + + +<tr> +<td>Filter</td> +<td>Text or tags</td> +<td>Text or tags</td> +<td>Text or select fields</td> +<td>Text</td> +<td>Backlog items or people</td> +</tr> + + +<tr> +<td>Show/hide parents</td> +<td>Yes (except the top-level portfolio backlog)</td> +<td>Yes</td> +<td>No</td> +<td>No</td> +<td>No</td> +</tr> + +<tr> +<td>Show/hide in progress items<br/>(see note 3)</td> +<td>Yes</td> +<td>Yes</td> +<td>No</td> +<td>No</td> +<td>No</td> +</tr> + +<tr> +<td>Forecast</td> +<td>No</td> +<td>Yes</td> +<td>No</td> +<td>No</td> +<td>No</td> +</tr> + + +<tr> +<td>Customize: show bugs (see note 1)</td> +<td>No </td> +<td>Yes </td> +<td>Yes </td> +<td>Yes </td> +<td>Yes </td> +</tr> + +<tr> +<td>Customize: Columns</td> +<td>Yes, see [Column options](./how-to/set-column-options.md)</td> +<td>Yes, see [Column options](./how-to/set-column-options.md)</td> +<td>Yes, see [Add columns](kanban/add-columns.md)</td> +<td>Yes, see [Column options](./how-to/set-column-options.md)</td> +<td>Yes, see [Customize workflow](process/customize-process-workflow.md)</td> +</tr> + +<tr> +<td>Customize: Add more backlog or board views </td> +<td>Yes, see [Select backlog navigation levels](customize/select-backlog-navigation-levels.md)</td> +<td>Yes, when you add another team (see note 4)</td> +<td>Yes, see [Select backlog navigation levels](customize/select-backlog-navigation-levels.md)</td> +<td>Yes, see [Schedule sprints](scrum/define-sprints.md)</td> +<td>Yes, see [Schedule sprints](scrum/define-sprints.md)</td> +</tr> + +<tr> +<td>[Customize: cards](customize/customize-cards.md)</td> +<td>n/a</td> +<td>n/a</td> +<td>Yes</td> +<td>n/a</td> +<td>Yes</td> +</tr> + + +<tr> +<td>Charts </td> +<td>[Cumulative flow](../report/guidance/cumulative-flow.md)<br/>[Velocity](../report/guidance/team-velocity.md)</td> +<td>[Cumulative flow](../report/guidance/cumulative-flow.md)<br/>[Velocity](../report/guidance/team-velocity.md)</td> +<td>[Cumulative flow](../report/guidance/cumulative-flow.md)<br/>[Velocity](../report/guidance/team-velocity.md)</td> +<td>[Sprint burndown](scrum/sprint-burndown.md) </td> +<td>[Sprint burndown](scrum/sprint-burndown.md) </td> +</tr> + +<tr> +<td>Duration (see note 5) </td> +<td>Project or release</td> +<td>Project</td> +<td>Project</td> +<td>Sprint</td> +<td>Sprint</td> + +</tr> +</tbody> +</table> + + +**Notes:** +1. Each team can determine how they want to track bugs: as requirements, as tasks, or not at all. When tracked as requirements, they appear in your product backlog, sprint backlogs, and Kanban board. When tracked as tasks, they appear in your sprint backlogs and task boards. For details, see [Show bugs on backlogs and boards](customize/show-bugs-on-backlog.md). +2. Work items that appear on each team backlog and board meet the criteria defined for the [team selected area and iteration paths](about-teams-and-settings.md). +3. The "In progress items Show/Hide" control is another filter you can apply to your product and portfolio backlogs. This control essentially shows or hides those work items where work has begun. It's useful to show/hide In Progress items when [forecasting sprint work](scrum/forecast.md). +4. When you [add a team](scale/multiple-teams.md), you essentially add another product backlog associated with that team. Each team can then manage their own set of sprint backlogs and portfolio backlogs. See [Configure team settings](scale/manage-team-assets.md) for details. +5. Duration refers to how you use your backlog or board to plan and track work over time. Once you change the State of a work item to done or completed, it no longer appears on a portfolio or project backlog. As you complete each sprint, the system maintains a history of your activity. You can review past sprints and sprint burndown charts by choosing the sprint listed under the Past section. For more information, see [Sprint burndown](scrum/sprint-burndown.md#current-and-past-sprint-burndown-charts). + + + + +<a id="plans"> </a> +## Review team deliverables using Delivery Plans + +With Delivery Plans, you gain tailor-made views across several teams and their development backlogs—stories, features, or epics. You can use these views to drive alignment across teams by overlaying several backlogs onto your delivery schedule. + +> [!NOTE] +> **Feature availability**: Delivery Plans, a [Visual Studio Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-plans), is available for VSTS and TFS 2017.2 and later versions. All users with [basic access](../security/change-access-levels.md) can view, add, and configure Delivery Plans. Stakeholders, however, don’t have access to Delivery Plans. + +When you configure a plan, you select the team or teams and backlog levels of interest. To learn more about Delivery Plans, see [Review team plans](scale/review-team-plans.md). + +<img src="_img/backlogs-boards-plans-delivery-plans.png" alt="Example plans view" style="border: 2px solid #C3C3C3;" /> + + +## Related notes +Now that you understand how backlogs, boards, and plans work, [get started using them to plan and track your work](overview.md). + +A few things to keep in mind... +- Every team owns their own backlog, to add a new set of backlogs and boards, you [add a new team](scale/multiple-teams.md) +- To have work performed by several teams roll up to a portfolio backlog, you'll want to [setup the team hierarchy](scale/portfolio-management.md) +- Every backlog has a corresponding [Kanban board](kanban/kanban-basics.md) you can use to track progress and update status +- Each team can control how [bugs show up on their backlogs ](customize/show-bugs-on-backlog.md) +- When you add child items they're linked to their parent using parent-child links which support hierarchical views and [tree queries](track/using-queries.md#tree-query) +- If you need more than three backlog levels, you can add more based on the process model you use: + - **Inheritance**: [Customize your backlogs or boards for a process](process/customize-process-backlogs-boards.md) + - **Hosted XML or On-premises XML**: [Add portfolio backlogs](customize/add-portfolio-backlogs.md). + + +Additional topics of interest: + +- [About teams and Agile tools](about-teams-and-settings.md) +- [Add work items](/vsts/work/backlogs/add-work-items?toc=/vsts/work/work-items/toc.json) +- [Adhoc vs managed work item queries](./track/adhoc-vs-managed-queries.md) +- [Dashboards](../report/dashboards.md) +- [Customize work tracking](./customize/customize-work.md) + +### Additional tools from the Marketplace + +You may find additional tools to help plan and track your work from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/search?target=VSTS&category=Plan%20and%20track&sortBy=Downloads). + + +<a id="task-board-items"/> +### Task board items versus query list items + +You may notice and wonder why the items shown on the task board may differ from those listed in a query created from its corresponding sprint backlog. + +It's possible to assign tasks to an iteration but not have them linked to a parent backlog item. These items will show up in the created query, but might not show up on the task board itself. The system runs the query and then applies a few background processes before displaying the task board items. + +>[!NOTE] +>Appearance of task and child items on the task board may differ depending on whether you work in VSTS and TFS. + +These reasons can cause work items that belong to the Task Category to not appear on a sprint backlog or task board: + +- The task hasn't been linked to a parent backlog item. Only those bugs and tasks that you have linked to a parent product backlog item (Scrum), user story (Agile), or requirement (CMMI) whose iteration path is set to the sprint will appear on the sprint backlog page. + >[!NOTE] + >In VSTS and TFS 2015.2 and later versions, tasks not linked to a parent appear under an *Unparented* section. + +- The task is a parent of another task, or the user story is a parent of another user story. If you've created a hierarchy of tasks or user stories, [only the child-level tasks or the child-level stories at the bottom of the hierarchy appear](./troubleshoot/resolve-backlog-reorder-issues.md#leaf-nodes). + +- The task's linked parent corresponds to a backlog item defined for another team. Or, the area path of the task's parent backlog item differs from the task's area path. + >[!NOTE] + >In VSTS and TFS 2015.2 and later versions, tasks linked to a parent work item assigned to another team's area path will appear under the *Unparented* section. + + +### In Progress items filter + +The In progress items Show/Hide filter causes some backlog items to display or not display. Bugs and other backlog items aren't listed when In progress items=Hide and their assigned State corresponds to In Progress state category. Bugs in a New state will display, however, bugs in an Assigned state won't. + +On your [backlog](backlogs/create-your-backlog.md), set ```In progress items=Show``` to see all active bugs and other items on your backlog. + + \ No newline at end of file diff --git a/docs/work/backlogs/_img/ALM_CB_CreateImpediments.png b/docs/work/backlogs/_img/ALM_CB_CreateImpediments.png new file mode 100644 index 00000000000..4d2bf280152 Binary files /dev/null and b/docs/work/backlogs/_img/ALM_CB_CreateImpediments.png differ diff --git a/docs/work/backlogs/_img/ALM_CB_CreateWorkItem.png b/docs/work/backlogs/_img/ALM_CB_CreateWorkItem.png new file mode 100644 index 00000000000..520e776420d Binary files /dev/null and b/docs/work/backlogs/_img/ALM_CB_CreateWorkItem.png differ diff --git a/docs/work/backlogs/_img/ALM_OB_BacklogSettings.png b/docs/work/backlogs/_img/ALM_OB_BacklogSettings.png new file mode 100644 index 00000000000..2f154be870a Binary files /dev/null and b/docs/work/backlogs/_img/ALM_OB_BacklogSettings.png differ diff --git a/docs/work/backlogs/_img/ALM_OB_CustServTeamBacklog.png b/docs/work/backlogs/_img/ALM_OB_CustServTeamBacklog.png new file mode 100644 index 00000000000..b7ab950eea5 Binary files /dev/null and b/docs/work/backlogs/_img/ALM_OB_CustServTeamBacklog.png differ diff --git a/docs/work/backlogs/_img/ALM_OB_MultiTeam_C.png b/docs/work/backlogs/_img/ALM_OB_MultiTeam_C.png new file mode 100644 index 00000000000..397f15af213 Binary files /dev/null and b/docs/work/backlogs/_img/ALM_OB_MultiTeam_C.png differ diff --git a/docs/work/backlogs/_img/ALM_OB_MutliTeamOwnershipEpics.png b/docs/work/backlogs/_img/ALM_OB_MutliTeamOwnershipEpics.png new file mode 100644 index 00000000000..c346c040f62 Binary files /dev/null and b/docs/work/backlogs/_img/ALM_OB_MutliTeamOwnershipEpics.png differ diff --git a/docs/work/backlogs/_img/ALM_OB_ReparentAnItem.png b/docs/work/backlogs/_img/ALM_OB_ReparentAnItem.png new file mode 100644 index 00000000000..72cc2323ea2 Binary files /dev/null and b/docs/work/backlogs/_img/ALM_OB_ReparentAnItem.png differ diff --git a/docs/work/backlogs/_img/ALM_OB_Scrum_WIT_Hier_C.png b/docs/work/backlogs/_img/ALM_OB_Scrum_WIT_Hier_C.png new file mode 100644 index 00000000000..31549b170a1 Binary files /dev/null and b/docs/work/backlogs/_img/ALM_OB_Scrum_WIT_Hier_C.png differ diff --git a/docs/work/backlogs/_img/ALM_PRD_BugTemplate.png b/docs/work/backlogs/_img/ALM_PRD_BugTemplate.png new file mode 100644 index 00000000000..79cc85d0f2c Binary files /dev/null and b/docs/work/backlogs/_img/ALM_PRD_BugTemplate.png differ diff --git a/docs/work/backlogs/_img/IC666563.png b/docs/work/backlogs/_img/IC666563.png new file mode 100644 index 00000000000..a1119fa3e45 Binary files /dev/null and b/docs/work/backlogs/_img/IC666563.png differ diff --git a/docs/work/backlogs/_img/IC677240.png b/docs/work/backlogs/_img/IC677240.png new file mode 100644 index 00000000000..c9574a21535 Binary files /dev/null and b/docs/work/backlogs/_img/IC677240.png differ diff --git a/docs/work/backlogs/_img/IC686840.png b/docs/work/backlogs/_img/IC686840.png new file mode 100644 index 00000000000..e1df328baf8 Binary files /dev/null and b/docs/work/backlogs/_img/IC686840.png differ diff --git a/docs/work/backlogs/_img/IC700157.png b/docs/work/backlogs/_img/IC700157.png new file mode 100644 index 00000000000..7b8938a3242 Binary files /dev/null and b/docs/work/backlogs/_img/IC700157.png differ diff --git a/docs/work/backlogs/_img/IC712055.png b/docs/work/backlogs/_img/IC712055.png new file mode 100644 index 00000000000..74f129848cc Binary files /dev/null and b/docs/work/backlogs/_img/IC712055.png differ diff --git a/docs/work/backlogs/_img/add-link-choose-linked-work-item-by-title.png b/docs/work/backlogs/_img/add-link-choose-linked-work-item-by-title.png new file mode 100644 index 00000000000..66a46e56a55 Binary files /dev/null and b/docs/work/backlogs/_img/add-link-choose-linked-work-item-by-title.png differ diff --git a/docs/work/backlogs/_img/add-link-existing-backlog-ts.png b/docs/work/backlogs/_img/add-link-existing-backlog-ts.png new file mode 100644 index 00000000000..13f88fdf09a Binary files /dev/null and b/docs/work/backlogs/_img/add-link-existing-backlog-ts.png differ diff --git a/docs/work/backlogs/_img/add-link-info-icon-clicked.png b/docs/work/backlogs/_img/add-link-info-icon-clicked.png new file mode 100644 index 00000000000..294c753f107 Binary files /dev/null and b/docs/work/backlogs/_img/add-link-info-icon-clicked.png differ diff --git a/docs/work/backlogs/_img/add-link-new-branch.png b/docs/work/backlogs/_img/add-link-new-branch.png new file mode 100644 index 00000000000..86075d8e6d0 Binary files /dev/null and b/docs/work/backlogs/_img/add-link-new-branch.png differ diff --git a/docs/work/backlogs/_img/add-link-query-new-work-item-2015.png b/docs/work/backlogs/_img/add-link-query-new-work-item-2015.png new file mode 100644 index 00000000000..b021b55864d Binary files /dev/null and b/docs/work/backlogs/_img/add-link-query-new-work-item-2015.png differ diff --git a/docs/work/backlogs/_img/add-link-query-new-work-item-2016.png b/docs/work/backlogs/_img/add-link-query-new-work-item-2016.png new file mode 100644 index 00000000000..67db5e28c6e Binary files /dev/null and b/docs/work/backlogs/_img/add-link-query-new-work-item-2016.png differ diff --git a/docs/work/backlogs/_img/add-link-related-existing-item-vs.png b/docs/work/backlogs/_img/add-link-related-existing-item-vs.png new file mode 100644 index 00000000000..da589f842dd Binary files /dev/null and b/docs/work/backlogs/_img/add-link-related-existing-item-vs.png differ diff --git a/docs/work/backlogs/_img/add-link-related-new-item-issue.png b/docs/work/backlogs/_img/add-link-related-new-item-issue.png new file mode 100644 index 00000000000..b5566ae1216 Binary files /dev/null and b/docs/work/backlogs/_img/add-link-related-new-item-issue.png differ diff --git a/docs/work/backlogs/_img/add-link-related-specify-id.png b/docs/work/backlogs/_img/add-link-related-specify-id.png new file mode 100644 index 00000000000..a719878a659 Binary files /dev/null and b/docs/work/backlogs/_img/add-link-related-specify-id.png differ diff --git a/docs/work/backlogs/_img/add-new-work-item-vsts-user-story.png b/docs/work/backlogs/_img/add-new-work-item-vsts-user-story.png new file mode 100644 index 00000000000..ff45f482075 Binary files /dev/null and b/docs/work/backlogs/_img/add-new-work-item-vsts-user-story.png differ diff --git a/docs/work/backlogs/_img/add-work-item-copy-URL.png b/docs/work/backlogs/_img/add-work-item-copy-URL.png new file mode 100644 index 00000000000..ce1543a65ba Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-copy-URL.png differ diff --git a/docs/work/backlogs/_img/add-work-item-create-branch-multi-items.png b/docs/work/backlogs/_img/add-work-item-create-branch-multi-items.png new file mode 100644 index 00000000000..0bf57fbe794 Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-create-branch-multi-items.png differ diff --git a/docs/work/backlogs/_img/add-work-item-dev-links.png b/docs/work/backlogs/_img/add-work-item-dev-links.png new file mode 100644 index 00000000000..0b4689441e0 Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-dev-links.png differ diff --git a/docs/work/backlogs/_img/add-work-item-history.png b/docs/work/backlogs/_img/add-work-item-history.png new file mode 100644 index 00000000000..883897067b2 Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-history.png differ diff --git a/docs/work/backlogs/_img/add-work-item-links.png b/docs/work/backlogs/_img/add-work-item-links.png new file mode 100644 index 00000000000..91955615a10 Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-links.png differ diff --git a/docs/work/backlogs/_img/add-work-item-remove-dev-link.png b/docs/work/backlogs/_img/add-work-item-remove-dev-link.png new file mode 100644 index 00000000000..76ec45f620a Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-remove-dev-link.png differ diff --git a/docs/work/backlogs/_img/add-work-item-start-storyboarding.png b/docs/work/backlogs/_img/add-work-item-start-storyboarding.png new file mode 100644 index 00000000000..120b55c6d98 Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-start-storyboarding.png differ diff --git a/docs/work/backlogs/_img/add-work-item-vsts-remove-state.png b/docs/work/backlogs/_img/add-work-item-vsts-remove-state.png new file mode 100644 index 00000000000..f54df1d9b3a Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-vsts-remove-state.png differ diff --git a/docs/work/backlogs/_img/add-work-item-vsts-update-state.png b/docs/work/backlogs/_img/add-work-item-vsts-update-state.png new file mode 100644 index 00000000000..24a2d32b9c0 Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-vsts-update-state.png differ diff --git a/docs/work/backlogs/_img/add-work-item-vsts-user-story-form.png b/docs/work/backlogs/_img/add-work-item-vsts-user-story-form.png new file mode 100644 index 00000000000..3558089adb0 Binary files /dev/null and b/docs/work/backlogs/_img/add-work-item-vsts-user-story-form.png differ diff --git a/docs/work/backlogs/_img/add-work-items-choose-user-story.png b/docs/work/backlogs/_img/add-work-items-choose-user-story.png new file mode 100644 index 00000000000..0f905136d2e Binary files /dev/null and b/docs/work/backlogs/_img/add-work-items-choose-user-story.png differ diff --git a/docs/work/backlogs/_img/add-work-items-copy-url-for-a-work-item.png b/docs/work/backlogs/_img/add-work-items-copy-url-for-a-work-item.png new file mode 100644 index 00000000000..0fb02e052f2 Binary files /dev/null and b/docs/work/backlogs/_img/add-work-items-copy-url-for-a-work-item.png differ diff --git a/docs/work/backlogs/_img/add-work-items-discussion.png b/docs/work/backlogs/_img/add-work-items-discussion.png new file mode 100644 index 00000000000..028b1eef1ea Binary files /dev/null and b/docs/work/backlogs/_img/add-work-items-discussion.png differ diff --git a/docs/work/backlogs/_img/add-work-items-link-to-existing-branch.png b/docs/work/backlogs/_img/add-work-items-link-to-existing-branch.png new file mode 100644 index 00000000000..48071d5346f Binary files /dev/null and b/docs/work/backlogs/_img/add-work-items-link-to-existing-branch.png differ diff --git a/docs/work/backlogs/_img/add-work-items-search-box-id.png b/docs/work/backlogs/_img/add-work-items-search-box-id.png new file mode 100644 index 00000000000..47a8c058e12 Binary files /dev/null and b/docs/work/backlogs/_img/add-work-items-search-box-id.png differ diff --git a/docs/work/backlogs/_img/backlog-multi-select-non-sequential-items.png b/docs/work/backlogs/_img/backlog-multi-select-non-sequential-items.png new file mode 100644 index 00000000000..a2bcbb2597b Binary files /dev/null and b/docs/work/backlogs/_img/backlog-multi-select-non-sequential-items.png differ diff --git a/docs/work/backlogs/_img/bulk-m-backlog-menu-options-ts.png b/docs/work/backlogs/_img/bulk-m-backlog-menu-options-ts.png new file mode 100644 index 00000000000..f6bf1622498 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-m-backlog-menu-options-ts.png differ diff --git a/docs/work/backlogs/_img/bulk-m-backlog-r-tfs-2016-menu-options.png b/docs/work/backlogs/_img/bulk-m-backlog-r-tfs-2016-menu-options.png new file mode 100644 index 00000000000..fadc2521529 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-m-backlog-r-tfs-2016-menu-options.png differ diff --git a/docs/work/backlogs/_img/bulk-m-backlog-r-tfs-menu-options.png b/docs/work/backlogs/_img/bulk-m-backlog-r-tfs-menu-options.png new file mode 100644 index 00000000000..52ab79c2697 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-m-backlog-r-tfs-menu-options.png differ diff --git a/docs/work/backlogs/_img/bulk-m-query-r-tfs-2016-menu-options.png b/docs/work/backlogs/_img/bulk-m-query-r-tfs-2016-menu-options.png new file mode 100644 index 00000000000..7643cd1970b Binary files /dev/null and b/docs/work/backlogs/_img/bulk-m-query-r-tfs-2016-menu-options.png differ diff --git a/docs/work/backlogs/_img/bulk-m-query-r-tfs-menu-options.png b/docs/work/backlogs/_img/bulk-m-query-r-tfs-menu-options.png new file mode 100644 index 00000000000..1196435fd5d Binary files /dev/null and b/docs/work/backlogs/_img/bulk-m-query-r-tfs-menu-options.png differ diff --git a/docs/work/backlogs/_img/bulk-m-query-results-menu-options-ts.png b/docs/work/backlogs/_img/bulk-m-query-results-menu-options-ts.png new file mode 100644 index 00000000000..a81bf3dbfd9 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-m-query-results-menu-options-ts.png differ diff --git a/docs/work/backlogs/_img/bulk-modify-change-type-ts.png b/docs/work/backlogs/_img/bulk-modify-change-type-ts.png new file mode 100644 index 00000000000..2e08e28b004 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-modify-change-type-ts.png differ diff --git a/docs/work/backlogs/_img/bulk-modify-copy-as-html-table-results.png b/docs/work/backlogs/_img/bulk-modify-copy-as-html-table-results.png new file mode 100644 index 00000000000..2b5692f157c Binary files /dev/null and b/docs/work/backlogs/_img/bulk-modify-copy-as-html-table-results.png differ diff --git a/docs/work/backlogs/_img/bulk-modify-copy-as-html.png b/docs/work/backlogs/_img/bulk-modify-copy-as-html.png new file mode 100644 index 00000000000..ceb290bf167 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-modify-copy-as-html.png differ diff --git a/docs/work/backlogs/_img/bulk-modify-edit-fields-ts.png b/docs/work/backlogs/_img/bulk-modify-edit-fields-ts.png new file mode 100644 index 00000000000..c605ae39aa0 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-modify-edit-fields-ts.png differ diff --git a/docs/work/backlogs/_img/bulk-modify-link-existing-bulk-save-ts.png b/docs/work/backlogs/_img/bulk-modify-link-existing-bulk-save-ts.png new file mode 100644 index 00000000000..58296e83dc4 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-modify-link-existing-bulk-save-ts.png differ diff --git a/docs/work/backlogs/_img/bulk-modify-link-new-ts.png b/docs/work/backlogs/_img/bulk-modify-link-new-ts.png new file mode 100644 index 00000000000..080494abcc4 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-modify-link-new-ts.png differ diff --git a/docs/work/backlogs/_img/bulk-modify-multi-select-ts.png b/docs/work/backlogs/_img/bulk-modify-multi-select-ts.png new file mode 100644 index 00000000000..72d2c2dade8 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-modify-multi-select-ts.png differ diff --git a/docs/work/backlogs/_img/bulk-modify-save-ts.png b/docs/work/backlogs/_img/bulk-modify-save-ts.png new file mode 100644 index 00000000000..b5b288a9743 Binary files /dev/null and b/docs/work/backlogs/_img/bulk-modify-save-ts.png differ diff --git a/docs/work/backlogs/_img/change-work-item-type-dialog.png b/docs/work/backlogs/_img/change-work-item-type-dialog.png new file mode 100644 index 00000000000..b7e7781d717 Binary files /dev/null and b/docs/work/backlogs/_img/change-work-item-type-dialog.png differ diff --git a/docs/work/backlogs/_img/change-work-item-type.png b/docs/work/backlogs/_img/change-work-item-type.png new file mode 100644 index 00000000000..3babc3c9e04 Binary files /dev/null and b/docs/work/backlogs/_img/change-work-item-type.png differ diff --git a/docs/work/backlogs/_img/changed-type-to-bug.png b/docs/work/backlogs/_img/changed-type-to-bug.png new file mode 100644 index 00000000000..f0f9da11b37 Binary files /dev/null and b/docs/work/backlogs/_img/changed-type-to-bug.png differ diff --git a/docs/work/backlogs/_img/copy-wi-copy-as-html-2015.png b/docs/work/backlogs/_img/copy-wi-copy-as-html-2015.png new file mode 100644 index 00000000000..91d2661b0d2 Binary files /dev/null and b/docs/work/backlogs/_img/copy-wi-copy-as-html-2015.png differ diff --git a/docs/work/backlogs/_img/copy-wi-copy-clone-2015.png b/docs/work/backlogs/_img/copy-wi-copy-clone-2015.png new file mode 100644 index 00000000000..25709d8c759 Binary files /dev/null and b/docs/work/backlogs/_img/copy-wi-copy-clone-2015.png differ diff --git a/docs/work/backlogs/_img/copy-wi-copy-clone-2017-dialogue.png b/docs/work/backlogs/_img/copy-wi-copy-clone-2017-dialogue.png new file mode 100644 index 00000000000..8f8605fa30c Binary files /dev/null and b/docs/work/backlogs/_img/copy-wi-copy-clone-2017-dialogue.png differ diff --git a/docs/work/backlogs/_img/copy-wi-copy-clone-2017.png b/docs/work/backlogs/_img/copy-wi-copy-clone-2017.png new file mode 100644 index 00000000000..3d28eea3674 Binary files /dev/null and b/docs/work/backlogs/_img/copy-wi-copy-clone-2017.png differ diff --git a/docs/work/backlogs/_img/copy-wi-copy-clone-ts-dialogue.png b/docs/work/backlogs/_img/copy-wi-copy-clone-ts-dialogue.png new file mode 100644 index 00000000000..003439a7b9e Binary files /dev/null and b/docs/work/backlogs/_img/copy-wi-copy-clone-ts-dialogue.png differ diff --git a/docs/work/backlogs/_img/copy-wi-copy-clone-ts.png b/docs/work/backlogs/_img/copy-wi-copy-clone-ts.png new file mode 100644 index 00000000000..1ff5530e4a5 Binary files /dev/null and b/docs/work/backlogs/_img/copy-wi-copy-clone-ts.png differ diff --git a/docs/work/backlogs/_img/copy-wi-copy-to-clipboard-ts-1.png b/docs/work/backlogs/_img/copy-wi-copy-to-clipboard-ts-1.png new file mode 100644 index 00000000000..ac6eb253bab Binary files /dev/null and b/docs/work/backlogs/_img/copy-wi-copy-to-clipboard-ts-1.png differ diff --git a/docs/work/backlogs/_img/copy-wi-url-2015.png b/docs/work/backlogs/_img/copy-wi-url-2015.png new file mode 100644 index 00000000000..9ee4b6501ab Binary files /dev/null and b/docs/work/backlogs/_img/copy-wi-url-2015.png differ diff --git a/docs/work/backlogs/_img/create-backlog-add-new-items-ts.png b/docs/work/backlogs/_img/create-backlog-add-new-items-ts.png new file mode 100644 index 00000000000..c14ec57e825 Binary files /dev/null and b/docs/work/backlogs/_img/create-backlog-add-new-items-ts.png differ diff --git a/docs/work/backlogs/_img/create-backlog-backlog-intro-ts-new-nav.png b/docs/work/backlogs/_img/create-backlog-backlog-intro-ts-new-nav.png new file mode 100644 index 00000000000..fb70f170bc7 Binary files /dev/null and b/docs/work/backlogs/_img/create-backlog-backlog-intro-ts-new-nav.png differ diff --git a/docs/work/backlogs/_img/create-your-backlog-intro.2017-2.png b/docs/work/backlogs/_img/create-your-backlog-intro.2017-2.png new file mode 100644 index 00000000000..b5fd6299dc6 Binary files /dev/null and b/docs/work/backlogs/_img/create-your-backlog-intro.2017-2.png differ diff --git a/docs/work/backlogs/_img/cyb-filter-backlog.png b/docs/work/backlogs/_img/cyb-filter-backlog.png new file mode 100644 index 00000000000..90d97473281 Binary files /dev/null and b/docs/work/backlogs/_img/cyb-filter-backlog.png differ diff --git a/docs/work/backlogs/_img/cyb-new-work-item-impediment-form.png b/docs/work/backlogs/_img/cyb-new-work-item-impediment-form.png new file mode 100644 index 00000000000..b3a0b976cc1 Binary files /dev/null and b/docs/work/backlogs/_img/cyb-new-work-item-impediment-form.png differ diff --git a/docs/work/backlogs/_img/cyb-new-work-item-impediment.png b/docs/work/backlogs/_img/cyb-new-work-item-impediment.png new file mode 100644 index 00000000000..afc82d78443 Binary files /dev/null and b/docs/work/backlogs/_img/cyb-new-work-item-impediment.png differ diff --git a/docs/work/backlogs/_img/cyb-open-backlog-tfs-2015.png b/docs/work/backlogs/_img/cyb-open-backlog-tfs-2015.png new file mode 100644 index 00000000000..8fc15387b1e Binary files /dev/null and b/docs/work/backlogs/_img/cyb-open-backlog-tfs-2015.png differ diff --git a/docs/work/backlogs/_img/cyb-open-backlog-tfs-2017.png b/docs/work/backlogs/_img/cyb-open-backlog-tfs-2017.png new file mode 100644 index 00000000000..5cc17f775bf Binary files /dev/null and b/docs/work/backlogs/_img/cyb-open-backlog-tfs-2017.png differ diff --git a/docs/work/backlogs/_img/cyb-order-backlog.png b/docs/work/backlogs/_img/cyb-order-backlog.png new file mode 100644 index 00000000000..2d6e5bf090a Binary files /dev/null and b/docs/work/backlogs/_img/cyb-order-backlog.png differ diff --git a/docs/work/backlogs/_img/cyb-product-backlog-form-ts.png b/docs/work/backlogs/_img/cyb-product-backlog-form-ts.png new file mode 100644 index 00000000000..fa9297bc976 Binary files /dev/null and b/docs/work/backlogs/_img/cyb-product-backlog-form-ts.png differ diff --git a/docs/work/backlogs/_img/delete-test-artifacts-area-path-permissions.png b/docs/work/backlogs/_img/delete-test-artifacts-area-path-permissions.png new file mode 100644 index 00000000000..71a8a7fe494 Binary files /dev/null and b/docs/work/backlogs/_img/delete-test-artifacts-area-path-permissions.png differ diff --git a/docs/work/backlogs/_img/delete-test-artifacts-form-dialog-confirm.png b/docs/work/backlogs/_img/delete-test-artifacts-form-dialog-confirm.png new file mode 100644 index 00000000000..0801de91ab6 Binary files /dev/null and b/docs/work/backlogs/_img/delete-test-artifacts-form-dialog-confirm.png differ diff --git a/docs/work/backlogs/_img/delete-test-artifacts-form.png b/docs/work/backlogs/_img/delete-test-artifacts-form.png new file mode 100644 index 00000000000..33c066eb53e Binary files /dev/null and b/docs/work/backlogs/_img/delete-test-artifacts-form.png differ diff --git a/docs/work/backlogs/_img/delete-test-artifacts-open-area-permissions.png b/docs/work/backlogs/_img/delete-test-artifacts-open-area-permissions.png new file mode 100644 index 00000000000..aa62be0acea Binary files /dev/null and b/docs/work/backlogs/_img/delete-test-artifacts-open-area-permissions.png differ diff --git a/docs/work/backlogs/_img/delete-test-plans.png b/docs/work/backlogs/_img/delete-test-plans.png new file mode 100644 index 00000000000..dc0838032f3 Binary files /dev/null and b/docs/work/backlogs/_img/delete-test-plans.png differ diff --git a/docs/work/backlogs/_img/delete-test-project-permissions.png b/docs/work/backlogs/_img/delete-test-project-permissions.png new file mode 100644 index 00000000000..c9defbfd0ea Binary files /dev/null and b/docs/work/backlogs/_img/delete-test-project-permissions.png differ diff --git a/docs/work/backlogs/_img/delete-test-shared-steps-remove-link.png b/docs/work/backlogs/_img/delete-test-shared-steps-remove-link.png new file mode 100644 index 00000000000..a941e85d411 Binary files /dev/null and b/docs/work/backlogs/_img/delete-test-shared-steps-remove-link.png differ diff --git a/docs/work/backlogs/_img/delete-work-item.png b/docs/work/backlogs/_img/delete-work-item.png new file mode 100644 index 00000000000..8ee4fc92e3d Binary files /dev/null and b/docs/work/backlogs/_img/delete-work-item.png differ diff --git a/docs/work/backlogs/_img/developer-associated-work-items-build.png b/docs/work/backlogs/_img/developer-associated-work-items-build.png new file mode 100644 index 00000000000..e77cb658085 Binary files /dev/null and b/docs/work/backlogs/_img/developer-associated-work-items-build.png differ diff --git a/docs/work/backlogs/_img/drive-git-development-dev-section.png b/docs/work/backlogs/_img/drive-git-development-dev-section.png new file mode 100644 index 00000000000..0baf1ad2f54 Binary files /dev/null and b/docs/work/backlogs/_img/drive-git-development-dev-section.png differ diff --git a/docs/work/backlogs/_img/follow-work-item.png b/docs/work/backlogs/_img/follow-work-item.png new file mode 100644 index 00000000000..cd8e1cdb619 Binary files /dev/null and b/docs/work/backlogs/_img/follow-work-item.png differ diff --git a/docs/work/backlogs/_img/git-dev-commit-sync.png b/docs/work/backlogs/_img/git-dev-commit-sync.png new file mode 100644 index 00000000000..ae9e1ddcf89 Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-commit-sync.png differ diff --git a/docs/work/backlogs/_img/git-dev-complete-merge.png b/docs/work/backlogs/_img/git-dev-complete-merge.png new file mode 100644 index 00000000000..55ec2d2546e Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-complete-merge.png differ diff --git a/docs/work/backlogs/_img/git-dev-create-branch.png b/docs/work/backlogs/_img/git-dev-create-branch.png new file mode 100644 index 00000000000..f2fe3b009ba Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-create-branch.png differ diff --git a/docs/work/backlogs/_img/git-dev-create-pull-request.png b/docs/work/backlogs/_img/git-dev-create-pull-request.png new file mode 100644 index 00000000000..2338ef23059 Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-create-pull-request.png differ diff --git a/docs/work/backlogs/_img/git-dev-development-section-completed-links.png b/docs/work/backlogs/_img/git-dev-development-section-completed-links.png new file mode 100644 index 00000000000..295e7be099a Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-development-section-completed-links.png differ diff --git a/docs/work/backlogs/_img/git-dev-multi-select-backlog-create-new-branch.png b/docs/work/backlogs/_img/git-dev-multi-select-backlog-create-new-branch.png new file mode 100644 index 00000000000..db5bc5371dd Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-multi-select-backlog-create-new-branch.png differ diff --git a/docs/work/backlogs/_img/git-dev-pr-complete.png b/docs/work/backlogs/_img/git-dev-pr-complete.png new file mode 100644 index 00000000000..faea862390b Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-pr-complete.png differ diff --git a/docs/work/backlogs/_img/git-dev-pr-completed.png b/docs/work/backlogs/_img/git-dev-pr-completed.png new file mode 100644 index 00000000000..cdc95c6482e Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-pr-completed.png differ diff --git a/docs/work/backlogs/_img/git-dev-pr-create-branch-from-action-menu.png b/docs/work/backlogs/_img/git-dev-pr-create-branch-from-action-menu.png new file mode 100644 index 00000000000..2308db81cf8 Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-pr-create-branch-from-action-menu.png differ diff --git a/docs/work/backlogs/_img/git-dev-pr-create-branch.png b/docs/work/backlogs/_img/git-dev-pr-create-branch.png new file mode 100644 index 00000000000..133b4571e43 Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-pr-create-branch.png differ diff --git a/docs/work/backlogs/_img/git-dev-pr-create-pull-request-b.png b/docs/work/backlogs/_img/git-dev-pr-create-pull-request-b.png new file mode 100644 index 00000000000..6a92788881a Binary files /dev/null and b/docs/work/backlogs/_img/git-dev-pr-create-pull-request-b.png differ diff --git a/docs/work/backlogs/_img/icon-attachments-tab-wi.png b/docs/work/backlogs/_img/icon-attachments-tab-wi.png new file mode 100644 index 00000000000..8738c1e9440 Binary files /dev/null and b/docs/work/backlogs/_img/icon-attachments-tab-wi.png differ diff --git a/docs/work/backlogs/_img/icon-copy-to-clipboard.png b/docs/work/backlogs/_img/icon-copy-to-clipboard.png new file mode 100644 index 00000000000..d2860bead9e Binary files /dev/null and b/docs/work/backlogs/_img/icon-copy-to-clipboard.png differ diff --git a/docs/work/backlogs/_img/icon-discussions-wi.png b/docs/work/backlogs/_img/icon-discussions-wi.png new file mode 100644 index 00000000000..e277291f257 Binary files /dev/null and b/docs/work/backlogs/_img/icon-discussions-wi.png differ diff --git a/docs/work/backlogs/_img/icon-history-tab-wi.png b/docs/work/backlogs/_img/icon-history-tab-wi.png new file mode 100644 index 00000000000..c8aeec57ef9 Binary files /dev/null and b/docs/work/backlogs/_img/icon-history-tab-wi.png differ diff --git a/docs/work/backlogs/_img/icon-links-tab-wi.png b/docs/work/backlogs/_img/icon-links-tab-wi.png new file mode 100644 index 00000000000..f7e356572fa Binary files /dev/null and b/docs/work/backlogs/_img/icon-links-tab-wi.png differ diff --git a/docs/work/backlogs/_img/manage-bugs-priority-chart.png b/docs/work/backlogs/_img/manage-bugs-priority-chart.png new file mode 100644 index 00000000000..ef8113a6eeb Binary files /dev/null and b/docs/work/backlogs/_img/manage-bugs-priority-chart.png differ diff --git a/docs/work/backlogs/_img/manage-bugs-scrum-bug-from-ts.png b/docs/work/backlogs/_img/manage-bugs-scrum-bug-from-ts.png new file mode 100644 index 00000000000..2de0ec69f7f Binary files /dev/null and b/docs/work/backlogs/_img/manage-bugs-scrum-bug-from-ts.png differ diff --git a/docs/work/backlogs/_img/manage-bugs-trend-chart.png b/docs/work/backlogs/_img/manage-bugs-trend-chart.png new file mode 100644 index 00000000000..86953cf909d Binary files /dev/null and b/docs/work/backlogs/_img/manage-bugs-trend-chart.png differ diff --git a/docs/work/backlogs/_img/move-work-item-dialog.png b/docs/work/backlogs/_img/move-work-item-dialog.png new file mode 100644 index 00000000000..4dd589002b2 Binary files /dev/null and b/docs/work/backlogs/_img/move-work-item-dialog.png differ diff --git a/docs/work/backlogs/_img/move-work-item.png b/docs/work/backlogs/_img/move-work-item.png new file mode 100644 index 00000000000..fa105ad6a95 Binary files /dev/null and b/docs/work/backlogs/_img/move-work-item.png differ diff --git a/docs/work/backlogs/_img/new-form-action-menu.png b/docs/work/backlogs/_img/new-form-action-menu.png new file mode 100644 index 00000000000..efc65bbdf59 Binary files /dev/null and b/docs/work/backlogs/_img/new-form-action-menu.png differ diff --git a/docs/work/backlogs/_img/org-backlog-change-parent.png b/docs/work/backlogs/_img/org-backlog-change-parent.png new file mode 100644 index 00000000000..41dca96a308 Binary files /dev/null and b/docs/work/backlogs/_img/org-backlog-change-parent.png differ diff --git a/docs/work/backlogs/_img/org-backlog-collapse-backlog-ts-new-nav.png b/docs/work/backlogs/_img/org-backlog-collapse-backlog-ts-new-nav.png new file mode 100644 index 00000000000..d7cf2fcb6cb Binary files /dev/null and b/docs/work/backlogs/_img/org-backlog-collapse-backlog-ts-new-nav.png differ diff --git a/docs/work/backlogs/_img/org-backlog-epics-ts-new-nav.png b/docs/work/backlogs/_img/org-backlog-epics-ts-new-nav.png new file mode 100644 index 00000000000..df249313b72 Binary files /dev/null and b/docs/work/backlogs/_img/org-backlog-epics-ts-new-nav.png differ diff --git a/docs/work/backlogs/_img/org-backlog-feature-form-ts-new-nav.png b/docs/work/backlogs/_img/org-backlog-feature-form-ts-new-nav.png new file mode 100644 index 00000000000..cdabfec340f Binary files /dev/null and b/docs/work/backlogs/_img/org-backlog-feature-form-ts-new-nav.png differ diff --git a/docs/work/backlogs/_img/org-backlog-features-add-child-ts.png b/docs/work/backlogs/_img/org-backlog-features-add-child-ts.png new file mode 100644 index 00000000000..0c51a5a1b45 Binary files /dev/null and b/docs/work/backlogs/_img/org-backlog-features-add-child-ts.png differ diff --git a/docs/work/backlogs/_img/org-backlog-features-ts-new-nav.png b/docs/work/backlogs/_img/org-backlog-features-ts-new-nav.png new file mode 100644 index 00000000000..ffed44e4564 Binary files /dev/null and b/docs/work/backlogs/_img/org-backlog-features-ts-new-nav.png differ diff --git a/docs/work/backlogs/_img/org-backlog-intro-show-parents-ts-new-nav.png b/docs/work/backlogs/_img/org-backlog-intro-show-parents-ts-new-nav.png new file mode 100644 index 00000000000..b2c4a669bdc Binary files /dev/null and b/docs/work/backlogs/_img/org-backlog-intro-show-parents-ts-new-nav.png differ diff --git a/docs/work/backlogs/_img/org-backlog-map-pbi-to-feature-ts-new-nav.png b/docs/work/backlogs/_img/org-backlog-map-pbi-to-feature-ts-new-nav.png new file mode 100644 index 00000000000..f3347a5a413 Binary files /dev/null and b/docs/work/backlogs/_img/org-backlog-map-pbi-to-feature-ts-new-nav.png differ diff --git a/docs/work/backlogs/_img/organize-backlog-open-ccdialog.png b/docs/work/backlogs/_img/organize-backlog-open-ccdialog.png new file mode 100644 index 00000000000..df18a381049 Binary files /dev/null and b/docs/work/backlogs/_img/organize-backlog-open-ccdialog.png differ diff --git a/docs/work/backlogs/_img/prod-tips-work-item-template-bug-new-form.png b/docs/work/backlogs/_img/prod-tips-work-item-template-bug-new-form.png new file mode 100644 index 00000000000..d34c5ca4aae Binary files /dev/null and b/docs/work/backlogs/_img/prod-tips-work-item-template-bug-new-form.png differ diff --git a/docs/work/backlogs/_img/recycle-bin-icon.png b/docs/work/backlogs/_img/recycle-bin-icon.png new file mode 100644 index 00000000000..829d47eb1d9 Binary files /dev/null and b/docs/work/backlogs/_img/recycle-bin-icon.png differ diff --git a/docs/work/backlogs/_img/remove-delete-recycle.png b/docs/work/backlogs/_img/remove-delete-recycle.png new file mode 100644 index 00000000000..cccb6298efb Binary files /dev/null and b/docs/work/backlogs/_img/remove-delete-recycle.png differ diff --git a/docs/work/backlogs/_img/remove-delete-restore.png b/docs/work/backlogs/_img/remove-delete-restore.png new file mode 100644 index 00000000000..ac37ec7f4f0 Binary files /dev/null and b/docs/work/backlogs/_img/remove-delete-restore.png differ diff --git a/docs/work/backlogs/_img/remove-delete-wi-confirm-delete.png b/docs/work/backlogs/_img/remove-delete-wi-confirm-delete.png new file mode 100644 index 00000000000..e40a45e6e7d Binary files /dev/null and b/docs/work/backlogs/_img/remove-delete-wi-confirm-delete.png differ diff --git a/docs/work/backlogs/_img/remove-wi-from-kanban-board.png b/docs/work/backlogs/_img/remove-wi-from-kanban-board.png new file mode 100644 index 00000000000..3b99e49d2d6 Binary files /dev/null and b/docs/work/backlogs/_img/remove-wi-from-kanban-board.png differ diff --git a/docs/work/backlogs/_img/remove-work-items-delete-multiple-from-backlog.png b/docs/work/backlogs/_img/remove-work-items-delete-multiple-from-backlog.png new file mode 100644 index 00000000000..bddf2fa8c68 Binary files /dev/null and b/docs/work/backlogs/_img/remove-work-items-delete-multiple-from-backlog.png differ diff --git a/docs/work/backlogs/_img/scrum-active-bug-triage-mode-co.png b/docs/work/backlogs/_img/scrum-active-bug-triage-mode-co.png new file mode 100644 index 00000000000..4ff327cca87 Binary files /dev/null and b/docs/work/backlogs/_img/scrum-active-bug-triage-mode-co.png differ diff --git a/docs/work/backlogs/_img/scrum-bug-wi-form.png b/docs/work/backlogs/_img/scrum-bug-wi-form.png new file mode 100644 index 00000000000..51367033168 Binary files /dev/null and b/docs/work/backlogs/_img/scrum-bug-wi-form.png differ diff --git a/docs/work/backlogs/_img/switch-team-project-2.png b/docs/work/backlogs/_img/switch-team-project-2.png new file mode 100644 index 00000000000..2de03ef9851 Binary files /dev/null and b/docs/work/backlogs/_img/switch-team-project-2.png differ diff --git a/docs/work/backlogs/_img/wi-templates-add-remove-tags.png b/docs/work/backlogs/_img/wi-templates-add-remove-tags.png new file mode 100644 index 00000000000..9ecd2c011d9 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-add-remove-tags.png differ diff --git a/docs/work/backlogs/_img/wi-templates-apply-save-work-items-te.png b/docs/work/backlogs/_img/wi-templates-apply-save-work-items-te.png new file mode 100644 index 00000000000..424d89d3079 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-apply-save-work-items-te.png differ diff --git a/docs/work/backlogs/_img/wi-templates-apply-template-dialog-te.png b/docs/work/backlogs/_img/wi-templates-apply-template-dialog-te.png new file mode 100644 index 00000000000..db7858ef0cf Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-apply-template-dialog-te.png differ diff --git a/docs/work/backlogs/_img/wi-templates-apply-template-options-te.png b/docs/work/backlogs/_img/wi-templates-apply-template-options-te.png new file mode 100644 index 00000000000..59184b24179 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-apply-template-options-te.png differ diff --git a/docs/work/backlogs/_img/wi-templates-apply-user-story-template-vsts.png b/docs/work/backlogs/_img/wi-templates-apply-user-story-template-vsts.png new file mode 100644 index 00000000000..30d4e7bb1ad Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-apply-user-story-template-vsts.png differ diff --git a/docs/work/backlogs/_img/wi-templates-bulk-update-list-vsts.png b/docs/work/backlogs/_img/wi-templates-bulk-update-list-vsts.png new file mode 100644 index 00000000000..deba49dd0e1 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-bulk-update-list-vsts.png differ diff --git a/docs/work/backlogs/_img/wi-templates-capture-bug-vsts.png b/docs/work/backlogs/_img/wi-templates-capture-bug-vsts.png new file mode 100644 index 00000000000..415543c6c4b Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-capture-bug-vsts.png differ diff --git a/docs/work/backlogs/_img/wi-templates-capture-template-dialog-te.png b/docs/work/backlogs/_img/wi-templates-capture-template-dialog-te.png new file mode 100644 index 00000000000..73d7a3b2374 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-capture-template-dialog-te.png differ diff --git a/docs/work/backlogs/_img/wi-templates-capture-template-dialog.png b/docs/work/backlogs/_img/wi-templates-capture-template-dialog.png new file mode 100644 index 00000000000..3a85e9a91c8 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-capture-template-dialog.png differ diff --git a/docs/work/backlogs/_img/wi-templates-context-menu-te.png b/docs/work/backlogs/_img/wi-templates-context-menu-te.png new file mode 100644 index 00000000000..68036aef44e Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-context-menu-te.png differ diff --git a/docs/work/backlogs/_img/wi-templates-copy-URL-te.png b/docs/work/backlogs/_img/wi-templates-copy-URL-te.png new file mode 100644 index 00000000000..bcaaad37baf Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-copy-URL-te.png differ diff --git a/docs/work/backlogs/_img/wi-templates-copy-template.png b/docs/work/backlogs/_img/wi-templates-copy-template.png new file mode 100644 index 00000000000..8a398ef3e0c Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-copy-template.png differ diff --git a/docs/work/backlogs/_img/wi-templates-copy-url-vsts.png b/docs/work/backlogs/_img/wi-templates-copy-url-vsts.png new file mode 100644 index 00000000000..cfaaf34eafc Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-copy-url-vsts.png differ diff --git a/docs/work/backlogs/_img/wi-templates-markdown-widget-with-template-links.png b/docs/work/backlogs/_img/wi-templates-markdown-widget-with-template-links.png new file mode 100644 index 00000000000..f3427a9baf6 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-markdown-widget-with-template-links.png differ diff --git a/docs/work/backlogs/_img/wi-templates-new-template-save-as-te.png b/docs/work/backlogs/_img/wi-templates-new-template-save-as-te.png new file mode 100644 index 00000000000..a915568671e Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-new-template-save-as-te.png differ diff --git a/docs/work/backlogs/_img/wi-templates-new-template-te.png b/docs/work/backlogs/_img/wi-templates-new-template-te.png new file mode 100644 index 00000000000..b91c8b390cf Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-new-template-te.png differ diff --git a/docs/work/backlogs/_img/wi-templates-new-template.png b/docs/work/backlogs/_img/wi-templates-new-template.png new file mode 100644 index 00000000000..27423c99462 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-new-template.png differ diff --git a/docs/work/backlogs/_img/wi-templates-section-te.png b/docs/work/backlogs/_img/wi-templates-section-te.png new file mode 100644 index 00000000000..80b750afa2a Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-section-te.png differ diff --git a/docs/work/backlogs/_img/wi-templates-te-capture-wi-as-template.png b/docs/work/backlogs/_img/wi-templates-te-capture-wi-as-template.png new file mode 100644 index 00000000000..b3c1f204bb1 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-te-capture-wi-as-template.png differ diff --git a/docs/work/backlogs/_img/wi-templates-template-action-menu.png b/docs/work/backlogs/_img/wi-templates-template-action-menu.png new file mode 100644 index 00000000000..00bc6b51a5d Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-template-action-menu.png differ diff --git a/docs/work/backlogs/_img/wi-templates-user-stories-list.png b/docs/work/backlogs/_img/wi-templates-user-stories-list.png new file mode 100644 index 00000000000..0cbf4a99d69 Binary files /dev/null and b/docs/work/backlogs/_img/wi-templates-user-stories-list.png differ diff --git a/docs/work/backlogs/_img/wit-template-task-form-tfs-copy-url.png b/docs/work/backlogs/_img/wit-template-task-form-tfs-copy-url.png new file mode 100644 index 00000000000..a9eb32a01d4 Binary files /dev/null and b/docs/work/backlogs/_img/wit-template-task-form-tfs-copy-url.png differ diff --git a/docs/work/backlogs/_img/wit-template-task.png b/docs/work/backlogs/_img/wit-template-task.png new file mode 100644 index 00000000000..098ac714510 Binary files /dev/null and b/docs/work/backlogs/_img/wit-template-task.png differ diff --git a/docs/work/backlogs/_img/wit-templates-open-team-admin-context.png b/docs/work/backlogs/_img/wit-templates-open-team-admin-context.png new file mode 100644 index 00000000000..d30fb175684 Binary files /dev/null and b/docs/work/backlogs/_img/wit-templates-open-team-admin-context.png differ diff --git a/docs/work/backlogs/_img/wit-templates-work-templates-page.png b/docs/work/backlogs/_img/wit-templates-work-templates-page.png new file mode 100644 index 00000000000..223a475915a Binary files /dev/null and b/docs/work/backlogs/_img/wit-templates-work-templates-page.png differ diff --git a/docs/work/backlogs/_img/work-item-form-to-track-user-stories.png b/docs/work/backlogs/_img/work-item-form-to-track-user-stories.png new file mode 100644 index 00000000000..a95e1ab813a Binary files /dev/null and b/docs/work/backlogs/_img/work-item-form-to-track-user-stories.png differ diff --git a/docs/work/backlogs/_img/work-items-link-controls.png b/docs/work/backlogs/_img/work-items-link-controls.png new file mode 100644 index 00000000000..ea7ed259a69 Binary files /dev/null and b/docs/work/backlogs/_img/work-items-link-controls.png differ diff --git a/docs/work/backlogs/_img/work-items-pbi-form.png b/docs/work/backlogs/_img/work-items-pbi-form.png new file mode 100644 index 00000000000..e96d1fba738 Binary files /dev/null and b/docs/work/backlogs/_img/work-items-pbi-form.png differ diff --git a/docs/work/backlogs/_img/work-items-pbi-workflow.png b/docs/work/backlogs/_img/work-items-pbi-workflow.png new file mode 100644 index 00000000000..753e8d34b39 Binary files /dev/null and b/docs/work/backlogs/_img/work-items-pbi-workflow.png differ diff --git a/docs/work/backlogs/_img/work-items-tfs-team-home-page.png b/docs/work/backlogs/_img/work-items-tfs-team-home-page.png new file mode 100644 index 00000000000..6eae2bb94c6 Binary files /dev/null and b/docs/work/backlogs/_img/work-items-tfs-team-home-page.png differ diff --git a/docs/work/backlogs/_img/work-items-view-change-history.png b/docs/work/backlogs/_img/work-items-view-change-history.png new file mode 100644 index 00000000000..9b12cffc6af Binary files /dev/null and b/docs/work/backlogs/_img/work-items-view-change-history.png differ diff --git a/docs/work/backlogs/about-backlogs.md b/docs/work/backlogs/about-backlogs.md new file mode 100644 index 00000000000..c681df6ccfe --- /dev/null +++ b/docs/work/backlogs/about-backlogs.md @@ -0,0 +1,34 @@ +--- +title: About backlogs | VSTS & TFS +description: Use the web portal to build your backlog +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/07/2017 +--- + +# About backlogs + +**VSTS | TFS 2017 | TFS 2015 | TFS 2013** + +You plan and track your project using the suite of Agile tools you access from the web portal. Agile tools support the core Agile methods—Scrum and Kanban—used by software development teams today. Scrum tools support defining and managing work within sprints, setting capacity, and tracking tasks. Kanban tools allow you to manage a continuous flow of work via an interactive sign board. + +You access all Agile tools from the **Work** hub. If you're new to Agile, see [What is Agile?](https://www.visualstudio.com/learn/what-is-agile/) for an overview. + +<img src="../_img/plan-intro.png" alt="Work hub, product backlog page" style="border: 2px solid #C3C3C3;" /> + +Most Agile tools are [scoped to a team](/vsts/work/about-teams-and-settings?toc=/vsts/work/backlogs/toc.json). This supports team autonomy as well as scaling the system. + + +You build your project plan by creating a backlog of work items that represent the features, requirements, user stories, or other work to perform. Portfolio backlogs provide support for organizing work in a hierarchical fashion and tracking major product initiatives or scenarios that rely on many stories or requirements. Different types of work items help you track different types of work, such as user stories, tasks, bugs, issues, and more. + +[![Define stories](../_img/gs-planning-define-stories.png)](create-your-backlog.md)[![Organize backlog](../_img/gs-planning-organize-backlog.png)](organize-backlog.md) + +## Related notes + +You access tools provided by VSTS and TFS by connecting from a client to the server, either in the cloud or on-premises. Some web portal tools require additional Visual Studio Subscriptions or Advanced/VS Enterprise access. To learn more, see [Permissions and access for work tracking](../permissions-access-work-tracking.md). + +For an overview of all your customization options, see [Customize your work tracking experience](../customize/customize-work.md). + diff --git a/docs/work/backlogs/add-link.md b/docs/work/backlogs/add-link.md new file mode 100644 index 00000000000..fe2b1a0b443 --- /dev/null +++ b/docs/work/backlogs/add-link.md @@ -0,0 +1,197 @@ +--- +title: Add links to several work items | VSTS & TFS +description: Link several work items to other work items or to a new git branch in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 7130A14B-C760-4622-B97A-8DA27A1B3D02 +ms.manager: douge +ms.author: kaelli +ms.date: 07/25/2017 +ms.topic: get-started-article +--- + + +# Add link to work items + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can add a link to a work item from within the work item form or from a backlog or query results list. From a backlog or query results list, you can [select multiple work items](bulk-modify-work-items.md#multi-select) and then link them to a new or existing work item. In general, use the bulk edit to update several work items to link to the same work item, either new or existing. + + +Use this topic to learn how to: + +> [!div class="checklist"] +> * Link one or more work items to an existing work item +> * Link one or more work items to a new work item that you add when linking +> * Link several work items to a new git branch +> * Find work items that you want to link to +> * Other options for bulk modifying link relationships + +For a list of all link types and supported link relationships, see [Link work items to support traceability](../track/link-work-items-support-traceability.md). + + + + +<a id="link"> </a> +## Link several items to an existing or new work item + + +#### VSTS + +1. From the web portal, open a backlog or query results page, and [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to add a link to. + +2. Open the … context menu of one of the selected work items, choose **Add link**, and then choose **Existing item**… or **New item**…. + + Here we multi-select from the product backlog and choose **Existing item**…. + + <img src="_img/add-link-existing-backlog-ts.png" alt="VSTS, Query results page, multi-select items, open context menu, Add link, click Link to new item item" style="border: 2px solid #C3C3C3;" /> + +#### TFS 2017 + +1. From the web portal, open a backlog or query results page, and [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to add a link to. + +2. Open the … context menu of one of the selected work items, and then choose **Link to a new item**… or **Link to an existing item**…. + + Here we multi-select from the Queries page and choose <b>Link to a new item…</b>.</p> + + <img src="_img/add-link-query-new-work-item-2016.png" alt="TFS 2017, Query results page, multi-select items, open context menu, click Link to a new work item" style="border: 2px solid #C3C3C3;" /> + +#### TFS 2015 + +1. From the web portal, open a backlog or query results page, and [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to add a link to. + +2. Open the context menu of one of the selected work items, and then choose **Link selected item(s) to a new work item**… or **Link to an existing item**…. + + Here we multi-select from the Queries page and choose **Link selected item(s) to a new work item**…. + + <img src="_img/add-link-query-new-work-item-2015.png" alt="TFS 2015, Query results page, multi-select items, open context menu, click Link to a new work item" style="border: 2px solid #C3C3C3;" /> + +<a id="link-existing"> </a> +### Link to an existing work item + +When you link work items, you select a link type. In general, use the following link types as indicated. To learn more about each link type, see [Link work items to support traceability](../track/link-work-items-support-traceability.md#link-type-guidance). + +- Use the **Duplicate** link type when two work items have been created that essentially capture the same information; close one of the work items and keep the other one active +- Use the **Parent/Child** link types when you want to break down work items into smaller items—for example, break down features into stories, or stories into tasks +- Use **Predecessor-Successor** link types when you want to track tasks that must be completed before others can be started; this link type is most often used when you plan work using Project +- Use the **Related** link type when the work items being linked are at the same level—such as two user stories that define features that overlap one another—or to link work items that are defined in different team projects or managed by different teams. + +0. Select the link type, enter a work item ID, and then click OK. + + For example, here we use the Related link type to link three items to the bug with ID of *46*. The images illustrate the target work item is the bug. + +# [Browser](#tab/browser) + + <img src="_img/bulk-modify-link-new-ts.png" alt="TFS web portal, Add link dialog " style="border: 2px solid #C3C3C3;" /> + + +# [Visual Studio](#tab/visual-studio) + + <img src="_img/add-link-related-existing-item-vs.png" alt="Visual Studio, Add link dialog" style="border: 2px solid #C3C3C3;" /> + + To link to multiple work items, enter their IDs separated by commas or spaces. If you don't know the IDs or you want to link to an item in a different team project, you can click the … context menu or Browse button (Visual Studio) to open a dialogue that will support you in [choosing work items based on IDs, a query, or title keyword](#find-items). + +0. (VSTS only) To view the work items selected for linking, you can click the ![info icon](../_img/icons/info-icon.png). + + <img src="_img/add-link-related-specify-id.png" alt="Add link dialog" style="border: 2px solid #C3C3C3;" /> + + <img src="_img/add-link-info-icon-clicked.png" alt="Add link dialog, show the work items selected for linking" style="border: 2px solid #C3C3C3;" /> + +0. If you are working from the Query Results page (web portal or Visual Studio), you'll need to bulk save the work items you've modified. Work items are automatically saved when you work from a backlog page. + + <img src="_img/bulk-modify-link-existing-bulk-save-ts.png" alt="Query results page, multi-select items, bulk save modified work items" style="border: 2px solid #C3C3C3;" /> + +--- + +### Link to a new work item + +Here, we have selected to add a link to the selected work items. + +0. Specify the link type, work item type, and title of the new work item. Click OK. + + <img src="_img/add-link-related-new-item-issue.png" alt="Query results page, multi-select items, select Link to an existing work item" style="border: 2px solid #C3C3C3;" /> + <!---<img src="_img/bulk-modify-link-new-ts.png" alt="Query results page, multi-select items, select Link to an existing work item" style="border: 2px solid #C3C3C3;" /> --> + +0. A work item of the type selected opens. Specify any additional fields you want and then save it. + +0. If you are working from the Query Results page, you'll need to bulk save the work items you've modified as shown in the step 2 of the previous procedure. + +## Link several work items to a new git branch + +>[!NOTE] +>**Feature availability**: The **New branch…** option is available from VSTS and the web portal for TFS 2017 and later versions. + +You can add a new git branch and link them to existing work items at the same time. + +From a backlog or query results page, [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to link to a new git branch. + +<img src="_img/add-link-new-branch.png" alt="Query results page, multi-select items, select Link to a new work item" style="border: 2px solid #C3C3C3;" /> + +To learn more, see [Link work items to Git development objects](connect-work-items-to-git-dev-ops.md). + +<a id="find-items"> </a> +## Find work items to link to +From the Add link dialog you can open a secondary dialog to help you choose one or more work items to link to. If you are going to find and list work items to link to by using a saved query, first [define the query](../track/using-queries.md) that you want to use. + +0. From the Add link dialog, click the … context menu or Browse button (Visual Studio) to open the following dialog. + + <img src="_img/add-link-choose-linked-work-item-by-title.png" alt="Choose Linked work items" style="border: 2px solid #C3C3C3;" /> + + If the work items are defined in another team project, then first select the Project. Then, make your selections: + + - **Query**. Use this method when you have defined a query that you know contains the set or superset of the work items that you want. + - **IDs**. Use this method when you know the IDs of the work items that you want to link to. + In the **IDs** box, type the IDs of the work items that you want to find, separated by commas or spaces. + - **Title contains**. Use this method to find work items that have a common word or phrase in the title field. In the **and type** list, click the type of work item that you want to retrieve. + + > [!NOTE] + > To minimize the time required to run the query, narrow the filter criteria of the search. + +6. Click the **Find** button. + + Only those work items defined for the selected team project and specified work item type are listed. To sort on a column field, choose the column title. + + <!--- You can change the display of the work items that are listed by using one of the following user interface controls: + + To expand or collapse a tree view list, choose the + or signs. + To resize a column, point your cursor at the edge of a column header and drag it to a new location. + To sort on a column field, choose the column title. + To move a column field, choose the column title and drag to another location. --> + +7. In the list of returned work items, select one or more work items. + + - From the web portal: To select several items in a sequence, hold down the shift key. To select several non-sequential items, use the Ctrl key. + + - For Visual Studio, select each work item that should link to the current work item. You can also press the SHIFT key while clicking to select a range of work items, or press the CTRL key while clicking to select multiple work items. + + + +## Additional bulk-modify link options + +Additional features you can use to quickly link or change links that use the parent-child link type (some features are version dependent, see the linked topic for details): + +- To quickly link backlog items to portfolio backlog items with parent-child links, [use the mapping pane to organize your backlog](organize-backlog.md#mapping). Or, you can choose to Show Parents and [drag-and-drop items within the tree hierarchy](organize-backlog.md#reparent). + +- To create and link tasks to backlog items, [use the sprint backlog page](../scrum/sprint-planning.md). + +- To indent (![Indent](../track/_img/IC588323.png)), outdent (![Outdent](../track/_img/IC588324.png)), and change the tree hierarchy, use a tree query in Visual Studio. + +- To add or delete work items or change the link structure, you can use Excel or Project. See [Bulk add or modify work items with Excel](../office/bulk-add-modify-work-items-excel.md) and [Create your backlog and tasks using Project](../office/create-your-backlog-tasks-using-project.md). + + +## Related notes +To add fields or customize a work item form, see [Customize your work tracking experience](../customize/customize-work.md). The method you use depends on the process model that supports your team project. + +For additional information, see: + +- [Map backlog items to portfolio backlog items](organize-backlog.md) +- [Link work items to Git development objects](connect-work-items-to-git-dev-ops.md) +- [Use Excel to edit parent-child links](../office/bulk-add-modify-work-items-excel.md) +- [Use Project to edit parent-child and predecessor-successor links](../office/create-your-backlog-tasks-using-project.md) +- [Link work items to support traceability](../track/link-work-items-support-traceability.md) + + + +### Required permissions + +To add, modify, or remove a link between work items, you must have permission to view both of the work items and to modify at least one of them. You must be a member of the **Contributors** group or have your **View work items in this node**, and your **Edit work items in this node** permissions set to **Allow**. \ No newline at end of file diff --git a/docs/work/backlogs/add-work-items-tfs.md b/docs/work/backlogs/add-work-items-tfs.md new file mode 100644 index 00000000000..75915d91723 --- /dev/null +++ b/docs/work/backlogs/add-work-items-tfs.md @@ -0,0 +1,111 @@ +--- +title: Add work items | TFS +description: Add work items to plan and manage a software project when connected to a team project in Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 982891A4-A875-478D-AD37-5A0915D11E00 +ms.manager: douge +ms.author: kaelli +ms.date: 03/16/2017 +--- + +# Add work items to plan and track your project (TFS) + +**TFS 2015 | TFS 2013** + +>[!IMPORTANT] +><b>Feature availability: </b>The new web form provides many additional features. If you connect to VSTS or the web portal for TFS 2017 or later versions, see [Add work items to plan and track your project](add-work-items.md). + +You add work items to plan and manage your project. You use different types of work items to track different types of work - such as tasks, features or user stories, test cases and bugs, risks or issues, and more. You can describe the work to be done, assign work, track status, and coordinate efforts within your team. + +Different types of work items are used to track features, user experiences, code defects, tasks, and issues. You can link work items to one another, as well as to changesets and source code files. As the following image shows, each work item form comes with a number of controls, fields, and tabs. + +![Work item form to track features or user stories](_img/work-item-form-to-track-user-stories.png) + +>[!NOTE] +>Depending on the process you chose when creating your team project--[Scrum](../guidance/scrum-process.md), +[Agile](../guidance/agile-process.md), or [CMMI](../guidance/cmmi-process.md)--the types of work items you can create will differ. For example, backlog items may be called product backlog items (PBIs), user stories, or requirements. All three are similar: they describe the customer value to deliver and the work to be performed.<br/> +For an overview of all three processes, see [Choose a process](../guidance/choose-process.md). + + + +##Add work items to define new work +You can start adding work items once you connect to a team project. Here we show how to add work items from the web portal. For additional clients that you can use, see [Clients that support tracking work items](../work-items/about-work-items.md#clients). + +1. From a web browser, connect to the team project that you want to work in. For example, the Fabrikam, Inc. team navigates to ```http://fabrikamprime:8080/tfs/DefaultCollection/Fabrikam%20Fiber%20Website/```. + If you haven't been added as a team member, [get added now](../scale/multiple-teams.md#add-team-members). + +2. From a team home page, you can choose the type of work item you want to create. + + ![Home page - create work items](_img/work-items-tfs-team-home-page.png) + + Work items you add are automatically scoped to your [team's area and iteration paths](../scale/multiple-teams.md). To change the team context, see [Switch team project or team focus](../how-to/switch-team-context-work.md) + +3. Enter a title and then save the work item. Before you change the default State, you must save it. + + ![Product backlog item work item form](_img/work-items-pbi-form.png) + + You can [add tags to any work item to filter backlogs and queries](../track/add-tags-to-work-items.md). + +##Update work items as work progresses +As work progresses, team members can update the state and reassign it as needed. While the workflow states differ for different work item types, they usually follow a progression from New or Active to Completed or Done. The following image shows the work flow states for a product backlog item. If you want to discard a work item, change the state to Removed. + +<table> +<tbody valign="top"> +<tr> +<td> +<p><b>Typical workflow progression:</b> </p>  +<ul> +<li>Create a product backlog item in the default state, New.</li> +<li>Change the state from New to Approved.</li> +<li>Change the state from Approved to Committed.</li> +<li>Change the state from Committed to Done.</li> +</ul> +<p><b>Atypical transitions:</b> </p>  +<ul> +<li>Change the state from New to Removed.</li> +<li>Change the state from Removed to New.</li> +<li>Change the state from Approved to Removed.</li> +<li>Change the state from Committed to Approved.</li> +<li>Change the state from Done to Committed.</li> +</ul> +</td> +<td> +![User story workflow, Agile process](_img/work-items-pbi-workflow.png) +</td> +</tr> +</tbody> +</table> + + +Removed work items remain in the data store and can be reactivated by changing the State. + +With each update, changes are recorded in the History field which you can view through the **History** tab. + +![View change history](_img/work-items-view-change-history.png) + +To find work items based on their history, see [History & auditing](../track/history-and-auditing.md). + + +<a id="link-wi"> </a> +##Link items to manage dependencies +By linking work items using Related or Dependent link types, you can track work that is dependent on other work. Each work item contains one or more tabs with link controls. These controls support linking the work item to one or more objects. + +**Link control tab from the web portal** + +![Link controls provided in a work item form](_img/work-items-link-controls.png) + +Some work item types have two or more link control tabs. Each tab is designed to support specific types of links and restricts the types of link relationships made. To learn more, see [Manage dependencies, link work items to support traceability](../track/link-work-items-support-traceability.md). + + +## Get the URL for a work item +From the web portal, simply copy the URL from the web browser address or open the context menu for the work item ID hyperlink and choose the Copy shortcut. + +In Visual Studio, right-click the work item tab to copy the URL. The URL opens the work item in the web portal. + +![Email a hyperlink for a work item](_img/add-work-items-copy-url-for-a-work-item.png) + +## Related notes + +Once you've added several work items, you can use additional features to get notified of changes, create queries, define status and trend charts, plus more. To customize a work item type, see [Customize your work tracking experience](../customize/customize-work.md). + diff --git a/docs/work/backlogs/add-work-items.md b/docs/work/backlogs/add-work-items.md new file mode 100644 index 00000000000..a59bc7fdea5 --- /dev/null +++ b/docs/work/backlogs/add-work-items.md @@ -0,0 +1,99 @@ +--- +title: Add work items | VSTS & TFS +description: Add work items to plan and manage a software project using Agile tools, Scrum, or Kanban when connected to a team project in Visual Studio Team Services (VSTS). +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 9474A25E-A9D8-433D-8370-C94624B4ACD6 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/07/2017 +--- + +# Track work and issues, add and update a work item + +<b>VSTS | TFS 2018 | TFS 2017</b> + + +>[!IMPORTANT] +><b>Feature availability: </b>The new work item experience is currently available from VSTS and the web portal for TFS 2017. This topic describes how to track work using the new form. If you don't see the new form, [your admin may need to enable it](../customize/manage-new-form-rollout.md), or if it's enabled, [you may need to switch to use it](../process/new-work-item-experience.md#switch-new) +<!--- +>If you connect to TFS 2015 or earlier versions, see [Add work items to plan and track your project (TFS)](add-work-items-tfs.md). +--> + +You add work items to plan and manage your project. You use different types of work items to track different types of work—such as user stories or product backlog items, tasks, bugs, or issues. You can describe the work to be done, assign work, track status, and coordinate efforts within your team. + +<a id="define-new-work"> </a> +## Add a work item +You can start adding work items once you connect to a team project. If you don't have a team project yet, create one in [VSTS](../../accounts/set-up-vs.md)<!---or set one up in an [on-premises TFS](../../accounts/create-team-project.md)-->. + +Here we show how to add work items from the web portal. + +1. Open a browser window and click the **Work** hub. If you haven't been added as a team member, [get added now](../scale/multiple-teams.md#add-team-members). + + The URL follows this pattern: + - Visual Studio Team Services: ```https://{account name}.visualstudio.com/{project name}/_backlogs``` + - Team Foundation Server (on-premises): ```http://{server}:8080/tfs/DefaultCollection/{project name}/_backlogs``` + + If you don't see the team or team project you want, click the ![VSTS icon](../_img/icons/project-icon.png) VSTS icon to [browse all team projects and teams](../../connect/account-home-pages.md). + +2. From the Work hub, choose the work item type from the New Work Item list of options. Here, we choose to create a User Story. + + <img src="_img/add-work-items-choose-user-story.png" alt="VSTS, TFS 2017, Work hub, Add a work item" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >Depending on the process chosen when the team project was created—[Scrum](../guidance/scrum-process.md), + [Agile](../guidance/agile-process.md), or [CMMI](../guidance/cmmi-process.md)—the types of work items you can create will differ. For example, backlog items may be called product backlog items (Scrum), user stories (Agile), or requirements (CMMI). All three are similar: they describe the customer value to deliver and the work to be performed. + > + > For an overview of all three processes, see [Choose a process](../guidance/choose-process.md). + + Click the ![pin icon](../_img/icons/pin-icon.png) pin icon to have it show up within the Work hub drop down menu. +<!--- + Or, from the Queries page, click the New menu and select the work item type. + + <img src="_img/cyb-new-work-item-impediment-form.png" alt="Create a new impediment" style="border: 2px solid #C3C3C3;" /> +--> +3. Enter a title and then save the work item. Before you can change the State from its initial default, you must save it. + + <img src="_img/add-new-work-item-vsts-user-story.png" alt="Agile process, User story work item form" style="border: 2px solid #C3C3C3;" /> + + You can [add tags to any work item to filter backlogs and queries](../track/add-tags-to-work-items.md). + + Work items you add are automatically scoped to your [team's area and iteration paths](../scale/set-team-defaults.md). To change the team context, see [Switch team project or team focus](../how-to/switch-team-context-work.md). + +That's it! + +Create as many work items as you need of the type you need to track the work you want to manage. + +## Follow a work item + +When you want to track the progress of a single work item, click the ![Follow icon](../_img/icons/follow-icon.png) icon. This signals the system to notify you when changes are made to the work item. + +<img src="_img/follow-work-item.png" alt="VSTS Work item form, Follow icon control" style="border: 1px solid #CCCCCC;" /> + +You'll only receive notifications when other members of your team modifies the work item, such as adding to the discussion, changing a field value, or adding an attachment. + +Notifications are sent to your preferred email address, which you can change from your [account preferences](../../accounts/account-preferences.md). + +To stop following changes, click the ![Following icon](../../work/_img/icons/following-icon.png) icon. + +>[!IMPORTANT] +>For on-premises TFS, [you must configure an SMTP sever](../../tfs-server/admin/setup-customize-alerts.md) in order for team members to receive notifications. + +## Try this next + +From the **Work** hub you can add the most common types of work items. + +To quickly add backlog items, such as user stories or requirements, see these topics: +> [!div class="nextstepaction"] +> [Create your backlog](create-your-backlog.md) +> [Kanban quickstart](../kanban/kanban-quickstart.md) + + +For additional clients that you can use to add work items, see [Clients that support tracking work items](../../tools.md). + +Once you've added several work items, you can use additional features to get notified of changes, create queries, define status and trend charts, plus more. + +For descriptions of each field and work item form control, see [Work item field index](../guidance/work-item-field.md) and [Work item form controls](../concepts/work-item-form-controls.md). + + diff --git a/docs/work/backlogs/backlogs-overview.md b/docs/work/backlogs/backlogs-overview.md new file mode 100644 index 00000000000..bd8130c16a5 --- /dev/null +++ b/docs/work/backlogs/backlogs-overview.md @@ -0,0 +1,53 @@ +--- +title: Backlogs and work items | VSTS & TFS +description: Use the web portal to plan and track work +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 28C02AE8-CF8D-4B6E-8301-F46A5622E6C4 +ms.manager: douge +ms.author: kaelli +ms.date: 07/25/2017 +--- + +# Backlogs, work items, and Agile project management + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You plan and track your project using the suite of Agile tools you access from the web portal. Agile tools support the core Agile methods—Scrum and Kanban—used by software development teams today. Scrum tools support defining and managing work within sprints, setting capacity, and tracking tasks. Kanban tools allow you to manage a continuous flow of work via an interactive sign board. + +You access all Agile tools from the **Work** hub. If you're new to Agile, see [What is Agile?](https://www.visualstudio.com/learn/what-is-agile/) for an overview. + +<img src="../_img/plan-intro.png" alt="Work hub, product backlog page" style="border: 2px solid #C3C3C3;" /> + + +>[!NOTE] +>To understand the differences between backlogs, boards and Delivery plans, see [Backlogs, boards, and plans](../backlogs-boards-plans.md). + + +## Define work items and create your backlog + +You build your project plan by creating a backlog of work items that represent the features, requirements, user stories, or other work to perform. Portfolio backlogs provide support for organizing work in a hierarchical fashion and tracking major product initiatives or scenarios that rely on many stories or requirements. Different types of work items help you track different types of work, such as user stories, tasks, bugs, issues, and more. + +[![Define stories](../_img/gs-planning-define-stories.png)](create-your-backlog.md)[![Organize backlog](../_img/gs-planning-organize-backlog.png)](organize-backlog.md)[![Manage bugs](../_img/gs-planning-manage-bugs.png)](manage-bugs.md)[![Manage issues](../_img/gs-planning-manage-issues.png)](manage-issues-impediments.md) + + + +## Try this next + +Take these tools for a test run by [creating an account on VSTS for free](../../accounts/create-account-msa-or-work-student.md). From there, you're ready to [create your backlog](create-your-backlog.md). + +Once you've started tracking work, you'll want to monitor and track progress, identify trends, and share your plans. See [Charts, dashboards, and widgets](../../report/overview.md). + + +## Related notes + +You access tools provided by VSTS and TFS by connecting from a client to the server, either in the cloud or on-premises. Some web portal tools require additional Visual Studio Subscriptions or Advanced/VS Enterprise access. To learn more, see [Permissions and access for work tracking](../permissions-access-work-tracking.md). + + + +For an overview of all your customization options, see [Customize your work tracking experience](../customize/customize-work.md). + + + + + \ No newline at end of file diff --git a/docs/work/backlogs/best-practices-product-backlog.md b/docs/work/backlogs/best-practices-product-backlog.md new file mode 100644 index 00000000000..eb3c2c62ae3 --- /dev/null +++ b/docs/work/backlogs/best-practices-product-backlog.md @@ -0,0 +1,117 @@ +--- +title: Backlog best practices | VSTS & TFS +description: Best practices to manage your product backlog in Visual Studio Team Services (VSTS) and Team Foundation +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: CCAE5254-A5F9-41CC-967E-7104BD36B932 +ms.manager: douge +ms.author: kaelli +ms.date: 08/07/2017 +--- + +# Groom your backlog + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +A great backlog conveys customer needs and value. Over the course of the project, your team will add detailed +information to each backlog item, break them down into smaller items, prioritize and estimate them, and finally, +implement them and deliver the results to your customers. + +To get started, see [Create your backlog](create-your-backlog.md). + + +<a name="product-owner-role"></a> +## Role of the product owner +Product owners play an important role in Scrum, primarily as the interface between customers and the team. To enable product owners to perform the following responsibilities, they need to be added to the Contributors group. + +* Analyzing customer requirements and articulate them as user stories, features, or requirements +* Building, prioritizing, and refining the product backlog +* Representing customer and stakeholder requirements to the team and responding to questions your team has about them +* Meeting regularly with stakeholders to address their needs and keep them informed +* Helping stakeholders understand the decisions underlying the priority order of your backlog +* Responding to any and all requests from your team for more information concerning backlog priorities and requirements + +If they will also be responsible for configuring team settings, [add them as a team administrator](../scale/manage-team-assets.md). + +A product owner can reduce the need for detailed specifications by being more responsive to the team's questions about implementation details and clearly articulating acceptance criteria within each requirement. + + + +<a name="acceptance"></a> +## Acceptance criteria +Acceptance criteria define what "Done" means by describing the conditions that the team should use to verify whether a requirement or bug fix has been fully implemented. You can capture these criteria in the work item. Clear acceptance criteria help with estimating and developing requirements and with testing. + +Product owners are the ultimate deciders of the criteria that create customer value. + +<blockquote style="font-size: 13px"><p>**Tips from the trenches: Start to love and embrace acceptance criteria.**</p> <p>Ask 10 mature agile teams "How do you know when you're +'<a href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/done%20done%20agile">done done</a>'?" +and you'll get the same answer from each one. . . get serious about writing acceptance criteria.</p> +<p>Acceptance criteria are the handshake between the product owner and the team on what "done done" really means. +Until the acceptance criteria are met, the team isn't done with the story. Period. +However, the value of acceptance criteria only starts here. +</p><p> +Acceptance criteria provide the stage for some of most meaningful conversations and interactions +that can happen on an agile team. On my own team we routinely have some of our best interactions as +we start digging into the acceptance criteria for each story on our backlog. +Inevitably we all start with our own ideas about what "done" means for a given story. +</p> +<p>However, as we begin to discuss the acceptance criteria presented by the product owner what +ensues is a series of "<a href="http://www.bing.com/search?q=Ah-ha moments">ah-ha moments</a>." +A shared understanding of the story begins to emerge. A comment one team member might elicit +the following response from someone else. . . "Ah-ha, great point. . . I never thought of that." +</p><p>Regardless of who is being enlightened, the power is in the fact that the product owner and +the team are building together a shared understanding of what "done" means for each backlog item. +And, this is happening before the team has written a single line of code. . . before any work has been done. . . +before commitments have been made. . . and before the sprint has begun.</p> +<p>By collaborating on acceptance criteria the team is minimizing risk and greatly increasing the chance of delivering successfully. +I don't think it's a coincidence that the first bullet in the +<a href="http://agilemanifesto.org/">Agile Manifesto</a> states ". . . we have come to value +<b>individual and interactions</b> over processes and tools". +Agile teams work together. And by working together, they create better software.</p> +<p>Start learning to love acceptance criteria and see if your team isn't more successful delivering software.</p> + +<p>--Aaron Bjork, Principal Product Manager, Visual Studio Cloud Services, first published in the +blog post: <a href="http://blogs.msdn.com/b/aaronbjork/archive/2010/05/04/msf-agile-5-0-tip-5-learn-to-love-acceptance-criteria.aspx"> +Agile Tip #5 – Learn to Love Acceptance Criteria</a></p> + +</blockquote>   + +<a id="groom"> </a> +## Refine your backlog + +Backlog refinement supports your sprint planning efforts and helps minimize these often seen challenges: + +* Long, unfocused, and ineffective sprint planning meetings +* Insufficient thought given to design requirements +* Poor sprint planning and execution +* Defocus on the business value team wants to achieve +* Inability to forecast + +A meeting to refine the backlog should occur separate from the sprint planning meeting. Use this meeting to perform these activities: + +* Right-size backlog items by splitting larger items into smaller items. No backlog item should be larger than it will take to complete in a single sprint. + +* Identify and fill in gaps in the product backlog. Capture new ideas and stories, architecture and design requirements, and other spikes. + +* Reorder the backlog to represent today's priorities and business value focus. + +* Ensure well defined acceptance criteria has been added to each item. + +* Revisit estimates made to backlog items and adjust upwards or downwards based on recent understanding about scope and acceptance criteria. + +* Review all potential backlog items to consider for the upcoming sprint to make sure they are well understood and that any additional work required to support their development is well understood by both product owner and the team. + +You'll know that you've done a good job refining your backlog when your sprint planning meetings run smoothly and efficiently. Such meetings shouldn't contain a lot of surprises, and your team should feel they can contribute fullly. + +[Refining your Agile backlogs for success](http://www.batimes.com/robert-galen/grooming-your-agile-backlogs-for-success.html) provides a nice quality checklist to guide your backlog refinement efforts + + +<a name="spikes"></a> +## Capture and manage spikes +In addition to new features and requirements to build, you can capture non-feature work that still needs to be done for a healthy ecosystem of delivery. This work can include necessary research, design, exploration, or prototyping. Any work done that doesn't directly lead to shippable software can be considered and captured as a spike. + +As the need to perform this work arises, capture it along with other items on your backlog. To track that it is a spike, you can either preface the title with the word "[Spike]" or add the tag "Spike" to the work item. + +## Additional resources +- [What is Agile?](https://www.visualstudio.com/learn/what-is-agile/) +- [Building productive, customer focused teams](https://www.visualstudio.com/learn/productive-teams/) \ No newline at end of file diff --git a/docs/work/backlogs/breadcrumb/toc.yml b/docs/work/backlogs/breadcrumb/toc.yml new file mode 100644 index 00000000000..8599b7a67f2 --- /dev/null +++ b/docs/work/backlogs/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Agile + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=agile + items: + - name: "Backlogs" + tocHref: /vsts/ + topicHref: /vsts/work/backlogs/index \ No newline at end of file diff --git a/docs/work/backlogs/bulk-modify-work-items.md b/docs/work/backlogs/bulk-modify-work-items.md new file mode 100644 index 00000000000..db6cba05f08 --- /dev/null +++ b/docs/work/backlogs/bulk-modify-work-items.md @@ -0,0 +1,213 @@ +--- +title: Bulk modify work items | VSTS & TFS +description: Bulk edit/modify several/multiple work items (mass update), backlog items, tasks, or bugs or linked parent-child items-Visual Studio Team Services (VSTS)| Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 152CAFE0-2360-470A-98AC-F613A67C24D2 +ms.manager: douge +ms.author: kaelli +ms.date: 07/14/2017 +ms.topic: get-started-article +--- + +# Bulk modify work items + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +<!--- UPDATES REQUIRED FOR MULTI-VERSION TAGGING --> + +Use bulk modify when you need to quickly make the same change to a number of work items. For example, you might want to change the priority of several bugs or reassign several tasks to the same team member. Use the web portal to quickly modify one or more fields for work items that will contain the same value. Use [Excel](../office/bulk-add-modify-work-items-excel.md) to update multiple fields with different values. + +With bulk modify, you can edit fields, add or remove tags, reassign work, or move work to a specific sprint. You can also use bulk modify to change the work item type or move work items to other team projects. The options available to you depend on the platform you work from and the permissions you've been granted. + +In this topic you'll learn: + +> [!div class="checklist"] +> * How to multi-select work items from a list and open the context menu +> * Edit one or more fields of several work items +> * Add or remove tags from several work items +> * Assign work from a backlog to a sprint using drag-and-drop (TO BE ADDED) + + +>[!NOTE] +>**Feature availability:**  The following features are available from VSTS (cloud service) or from the web portal of the listed on-premises TFS version or a later version. Those not annotated are available from all platforms and versions. Visit the [Visual Studio Downloads page](https://www.visualstudio.com/downloads/download-visual-studio-vs) to get the latest TFS update. Additional resources may be required as annotated. To determine your platform or TFS version, see [Provide product and content feedback](../../provide-feedback.md#platform-version). + +All of the following actions can be performed by team members that belong to the Contributors group. Members provided with Stakeholder access can perform multi-select, bulk edit, change type, email, and copy as HTML/copy to clipboard actions. For details, see [Work as a stakeholder](../../quickstart/get-started-stakeholder.md). + + +> [!div class="mx-tdBreakAll"] +> |Multi-select work items|Bulk edit/update/delete|Copy, clone, change type,<br/>move, or email work items| +> |-------------|----------|---------| +> |- [Multi-select-query results](#multi-select)<br/>- [Multi-select-backlog](#multi-select) (TFS 2015.1)<br/>**Link work items**<br/><br/>- [Link to a new item](add-link.md#link)<br/>- [Link to an existing item](add-link.md#link)<br/>- [New branch](connect-work-items-to-git-dev-ops.md) (TFS 2017) <sup>1</sup>|- [Edit field(s)](#edit)<br/>- [Assign to](#assign-to)<br/>- [Move to iteration](#move-iteration)<br/>- [Change position](create-your-backlog.md#move-items-priority-order)<br/>- [Change parent](organize-backlog.md#reparent)<br/>- [Add/remove tags](#tags) (TFS 2017)<br/>- [Update from template](work-item-template.md) (VSTS) <sup>1</sup><br/>- [Delete](remove-delete-work-items.md#delete) <sup>1</sup>|- [Clone or copy a single item](copy-clone-work-items.md#copy-clone) <sup>2</sup><br/>- [Copy as HTML/Copy to clipboard](copy-clone-work-items.md#html)<br/>- [Email selected item(s)](../track/share-plans.md) <sup>3</sup><br/>- [Change work item type](remove-delete-work-items.md#change-type) (VSTS) <sup>1</sup><br/>- [Move items to another team project](remove-delete-work-items.md#move) (VSTS) <sup>1, 4</sup>| + + +**Notes:** +1. You can't perform certain functions on work items whose WITs belong to the [Hidden Types Category](../concepts/agile-glossary.md#hidden-types). This includes all work items that track tests—such as test cases, shared steps, and shared parameters—code review requests and responses, and feedback requests and responses. +2. You can choose to copy or clone a single work item from a query results list or from the [Actions menu of the work item form](remove-delete-work-items.md). You can only perform a clone or copy action for a single work item. Choose Copy work item when you want to create a copy of a work item and change its work item type. Choose Clone when you want to create another instance of the work item without changes to its work item type. +3. For on-premises TFS, you must have an [SMTP server configured for your deployment](../../tfs-server/admin/setup-customize-alerts.md). +4. You must be a member of the Project Administrators group or be [granted explicit permissions to move work items](../how-to/set-permissions-access-work-tracking.md#move-delete-permissions). + +[!INCLUDE [temp](../_shared/image-differences.md)] + + +<a id="multi-select"> </a> + +## Multi-select work items + +>[!NOTE] +><b>Feature availability: </b> Multi-select of work items on the backlog and sprint backlogs is supported from VSTS and TFS 2015 Update 1 or later version. This feature works in the same way as multi-select works within query results. + +You can use bulk modify by selecting work items from the backlog page or query results list. From the backlog page context menu, you can change the backlog priority of several items (Change position or Move to position), assign them to a team member, move them to a different sprint, or [map them to a feature](organize-backlog.md#mapping). + +The menu options available to you change depending on the platform you work from and whether you work from a backlog page or query results list. + +#### VSTS + +<table valign="top"> +<tr valign="top"> +<td> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Backlog menu </p> +<img src="_img/bulk-m-backlog-menu-options-ts.png" alt="Backlog multi-select menu" style="border: 2px solid #C3C3C3;" /> +</td> + +<td> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Query results multi-select menu </p> +<img src="_img/bulk-m-query-results-menu-options-ts.png" valign="top" alt="Query results multi-select menu" style="border: 2px solid #C3C3C3;" /> +</td> +</tr> +</table> + +#### TFS 2017 + +<table valign="top"> +<tr valign="top"> +<td> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Backlog multi-select menu </p> +<img src="_img/bulk-m-backlog-r-tfs-2016-menu-options.png" alt="Query results multi-select menu" style="border: 2px solid #C3C3C3;" /> +</td> + +<td> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Query results multi-select menu </p> +<img src="_img/bulk-m-query-r-tfs-2016-menu-options.png" alt="Query results multi-select menu, TFS-2015 " style="border: 2px solid #C3C3C3;" /> +</td> +</tr> +</table> + +#### TFS 2015 + +<table valign="top"> +<tr valign="top"> +<td> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Backlog multi-select menu</p> +<img src="_img/bulk-m-backlog-r-tfs-menu-options.png" alt="Backlog multi-select menu, TFS 2015" style="border: 2px solid #C3C3C3;" /> +</td> + +<td> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Query results multi-select menu</p> +<img src="_img/bulk-m-query-r-tfs-menu-options.png" alt="Query results multi-select menu, TFS 2015" style="border: 2px solid #C3C3C3;" /> +</td> +</tr> +</table> + + + +### To multi-select and open the context menu + +To select several items in a sequence, hold down the shift key. To select several non-sequential items, use the Ctrl key. Then, you can either drag the selected items to a new position within the backlog, to a different sprint. + +To open the context menu, click (![actions icon](../_img/icons/actions-icon.png)) or (![context icon](../_img/icons/context_menu.png)), and then choose the option from the menu. + +Here, we use the context menu to move several non-sequential items to the current sprint. + +#### VSTS and TFS 2017 + +<img src="_img/bulk-modify-multi-select-ts.png" alt="VSTS, Backlog page, multi-select items, Open context menu, Move to iteration, " style="border: 2px solid #C3C3C3;" /> + +#### TFS 2015 and TFS 2013 + +<img src="_img/backlog-multi-select-non-sequential-items.png" alt="TFS 2015, web portal, Backlog page, multi-select items, Open context menu, Move to iteration, " style="border: 2px solid #C3C3C3;" /> + + +>[!TIP] +>Use the backlog <b>Create Query</b> feature to create a query with the backlog items. You can then open the query within the web portal or [Excel](../office/bulk-add-modify-work-items-excel.md) to perform bulk updates. + + +<a id="edit"> </a> +## Bulk edit work items + +To start a bulk edit, begin by [multi-selecting](#multi-select) the work items you want to modify, either from the query results or the backlog. You can craft your query using the [query editor or search box](../track/using-queries.md). + +<!--- +Select the work items you want to modify. + +![Select the work items you want to modify](_img/IC686840.png) +--> + +<a id="move-iteration"> </a> +<a id="assign-to"> </a> +### Reassign work items or edit a field +With work items selected, open the context menu for any selected item, and reassign all of them. By doing this, you can quickly assign them to a member of your team or to another sprint or iteration. + +![Assign to link from work item context menu](_img/IC700157.png) + +To learn more about the Assign To and Iteration Path fields, see [Query by assignment, workflow or Kanban board changes](../track/query-by-workflow-changes.md#workflow-fields) and [Schedule sprints](../scrum/define-sprints.md). + +<a id="edit-fields"> </a> +### Edit fields + +To assign or modify several fields, choose Edit from the context menu of one of the selected work items. Enter a value for each field that you want to update. + + +#### VSTS and TFS 2017 + +1. For audit purposes, you can type a description for your bulk update task. To learn more about each field, see the [Work item field index](../guidance/work-item-field.md). + + <img src="_img/bulk-modify-edit-fields-ts.png" alt="VSTS and TFS 2017, Query results page, bulk edit fields" style="border: 2px solid #C3C3C3;" /> + +2. From the Query results page, you must save all work items that you bulk-modified. When you bulk modify items from the backlog, they are automatically saved. Work items shown in bold text indicate that local changes have not yet been saved to the data store. + + <img src="_img/bulk-modify-save-ts.png" alt="VSTS and TFS 2017, Query results page, save bulk modified items" style="border: 2px solid #C3C3C3;" /> + +#### TFS 2015 and TFS 2013 + +1. For audit purposes, you can type a description for your bulk update task. To learn more about each field, see the [Work item field index](../guidance/work-item-field.md). + + <img src="_img/IC666563.png" alt="TFS 2015, web portal, Query results page, Edit work items dialog, bulk modify fields" style="border: 2px solid #C3C3C3;" /> + +2. Save all work items that you bulk-modified. Work items shown in bold text indicate that local changes have not yet been saved to the data store. + + ![TFS 2015, web portal, query results page, Bulk modify save results](_img/IC677240.png) + + +<a id="tags"></a> +## Bulk modify tags + +>[!NOTE] +><b>Feature availability: </b> Bulk update of work items to add or remove tags from the web portal is currently supported only from VSTS and TFS 2015 Update 2 or later version. To bulk edit work items when connecting to TFS 2015 Update 1 or earlier versions, [use Excel](../office/bulk-add-modify-work-items-excel.md).  + +From the Edit work items dialog, select Tags (Add) or Tags (Remove). + +Here we choose to add the Beta tag to the selected work items. + +![Edit work items - Add tags](../track/_img/tags-bulk-add.png) + + +## Related notes + +To add fields or customize a work item form, see [Customize your work tracking experience](../customize/customize-work.md). The method you use depends on the process model that supports your team project. + + +### Migrate or change a large number of work items + +For large scale, organizational moves, use the REST API calls for [Work item batch operations](https://visualstudio.com/integrate/api/wit/batch.md). + +>[!NOTE] +>At this time, you can't move work items to a different VSTS account or TFS collection. You can only migrate work item information by exporting and then importing them using [Excel](../office/bulk-add-modify-work-items-excel.md). + +### Add multiple values to a field (TFS) +If you have implemented a [custom control that supports multiple values](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vsts-extensions-multivalue-control), you can use Excel to bulk edit the field, but you can't modify it using the web portal. In the web portal, you can only select a single value for the field. + + + + \ No newline at end of file diff --git a/docs/work/backlogs/connect-work-items-to-git-dev-ops.md b/docs/work/backlogs/connect-work-items-to-git-dev-ops.md new file mode 100644 index 00000000000..578d3cc7ad4 --- /dev/null +++ b/docs/work/backlogs/connect-work-items-to-git-dev-ops.md @@ -0,0 +1,182 @@ +--- +title: Drive Git or TFVC development from a work item | VSTS & TFS +description: Create a branch, create a pull request, and automatically link work items with source control branches, builds, commits, changesets, pull requests or other Git or TFVC supported operations +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: BD7CE3C1-9E15-4BD6-B9CD-F78569C74D0D +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +ms.topic: get-started-article +--- + +# Drive Git development from a work item + + +<b>VSTS | TFS 2018 | TFS 2017</b> + + +>[!NOTE] +><b>Feature availability: </b>The Development section appears in the work item web form for VSTS and TFS 2017 or later versions, configured with the [new work item tracking experience](../process/new-work-item-experience.md). It supports both Git and TFVC version control repositories. Go here to learn how to [add a Git repository for your existing team project](../../accounts/create-team-project.md#git-and-tfvs-repos).   + +One of the ways your team can drive their development and stay in sync is to link your work items to the objects created during development, such as branches, commits, pull requests, and builds. You can begin that linking by creating a branch from one or more work items. Later, you can create pull requests, quickly open commits, and maintain a record of development operations performed to complete specific work. + +<!--- +Review this topic to learn: + +> [!div class="checklist"] +> * How to create a new branch or pull request from a work item +> * Complete the pull request +> * Perform a squash merge +> * Create a branch for several work items +> * Link a work item to existing development and build objects +--> + +The Development section records all Git development processes that support completion of the work item. This section can show your team information needed to take the next development step and minimize navigational steps to accomplish common development tasks. It also supports traceability, providing visibility into all the branches, commits, pull requests, and builds related to the work item. + +<img src="_img/drive-git-development-dev-section.png" alt="Work item form, Development section" style="border: 2px solid #C3C3C3;" /> + +From it, you can quickly access branches, pull requests, and commits which are linked to the work item. Also, you can initiate a pull request for a branch you've created or linked to from the work item. + + +<a id="git-development"> </a> +## Workflow process to create a branch and pull request + +Consider creating a new branch when there are no linked code artifacts. If there is a branch but no pull requests, consider creating a pull request. Here's a typical workflow sequence when working with a Git repository. + +1. Start work on the work item by creating a branch. You can add a new Git branch from within the Development section... + + <img src="_img/git-dev-pr-create-branch.png" alt="User story work item form, Development section, create new branch" style="border: 2px solid #C3C3C3;" /> + + ... or, from the form's ![Actions icon](../_img/icons/actions-icon.png) Actions menu. + + <img src="_img/git-dev-pr-create-branch-from-action-menu.png" alt="User story work item form, Action menu, add new branch" style="border: 2px solid #C3C3C3;" /> + + Name the branch and select the repository on which it's based. + + <img src="_img/git-dev-create-branch.png" alt="Create a branch dialog box" style="border: 2px solid #C3C3C3;" /> + + Branches you create are automatically linked to the work item. + + >[!NOTE] + >You can only create a branch once you've added files to the main branch, which is always named ```master```. VSTS automatically adds a README file to the initial repo created with each new team project. + +2. The system will open to the repository and branch that you just created. + + You can edit a file within the web portal. + + Or, if you have extensive file edits or need to add files, then you'll need to work from Visual Studio or other supported IDE. You'll want to add a new local branch from the branch you just created. For details, see [Update code with fetch and pull, Download changes with fetch](../../git/tutorial/pulling.md#download-changes-with-fetch). (While any code editing and committing process will work, we work best with an edition of Visual Studio.) + +3. Add or modify files in the branch that you created. + + From Visual Studio or other supported IDE, commit and push changes from your local branch to the repository. + + ![Commit and push changes](_img/git-dev-commit-sync.png) + + If this is the first time pushing changes from a new branch, you'll need to publish the branch before pushing your changes. For more details, see [Share code with push](../../git/tutorial/pushing.md). + +4. <a id="create-pull-request"> </a> Create a [pull request](../../git/pull-requests.md) from the work item form. + + You create a pull request to merge the changes you made to a master branch and get your changes reviewed by other members of your team. + + <img src="_img/git-dev-pr-create-pull-request-b.png" alt="Work item form, create pull request" style="border: 2px solid #C3C3C3;" /> + +5. Your view will switch to the Code hub, Pull Requests page. Complete creating the pull request as shown. + + <img src="_img/git-dev-create-pull-request.png" alt="Pull Request page, Create pull request" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >Once you've created a pull request, you can't create a new pull request for the same branch until you complete the previous pull request. + + <img src="_img/git-dev-pr-complete.png" alt="Pull Request page, Create pull request" style="border: 2px solid #C3C3C3;" /> + + Check the box for **Squash changes when merging** and then complete the merge. + + <img src="_img/git-dev-complete-merge.png" alt="Complete pull request dialog box, check squash-merge" style="border: 2px solid #C3C3C3;" /> + +6. Upon completion, you should see a similar screen as follows. + + <img src="_img/git-dev-pr-completed.png" alt="Pull request, completed notification" style="border: 2px solid #C3C3C3;" /> + +7. Open the work item form or refresh the form, expand the Development section (click the ![full screen icon](../_img/icons/fullscreen_icon.png) icon), and you'll see the links that have been added to support the operations you just completed. + + <img src="_img/git-dev-development-section-completed-links.png" alt="Work item form, Development section, links added" style="border: 2px solid #C3C3C3;" /> + +   + + + +<a id="add-branch-multi-wi"> </a> +## Create a branch for several work items + +You can also add a new branch from the work item listed on the backlog or Kanban board without having to open the work item. Using [multi-select](bulk-modify-work-items.md), you can select several work items and create a new branch where they're all linked to the branch. + +For example, here we select the first five items to link to a new branch. + +<img src="_img/git-dev-multi-select-backlog-create-new-branch.png" alt="Select multiple items from backlog" style="border: 2px solid #C3C3C3;" /> + +And, we specify the name of the branch. + +<img src="_img/add-work-item-create-branch-multi-items.png" alt="Create new branch dialog" style="border: 2px solid #C3C3C3;" /> + + +<a id="link-objects"> </a> +## Link to existing development and build objects + +All items listed under the Development section also appear under the ![Links tab icon](_img/icon-links-tab-wi.png) Links tab. All development actions initiated from the Development section are also logged under the ![History tab icon](_img/icon-history-tab-wi.png) History tab. + +![Links tab, development links](_img/add-work-item-dev-links.png) + +To link a work item to an existing object, click the ![Add link](../_img/icons/add-link-icon.png) Add links icon and then choose the link type. + +![Select multiple items from backlog](_img/add-work-items-link-to-existing-branch.png) + +[Link work items to support traceability](../track/link-work-items-support-traceability.md). + + +### Remove a link +If you want to remove a link, you can do so from the Development section by highlighting it first and then click the ![delete icon](../_img/icons/delete_icon.png) delete icon. + +![Development section, delete a link](_img/add-work-item-remove-dev-link.png) + +Or, you can select it from the ![Links tab icon](_img/icon-links-tab-wi.png) Links tab and click the ![delete icon](../_img/icons/delete-link.png) remove link icon. + + + +## Related notes + +Learn more about tracking work with work items and developing with Git from these resources: + +- [Add work items](add-work-items.md) +- [Git overview](../../git/overview.md) +- [TFVC overview](../../tfvc/overview.md) +- [Create your backlog](create-your-backlog.md) + +> [!NOTE] +> To learn more or to customize the Development links control, see [LinksControlOptions elements, Development links control](../reference/linkscontroloptions-xml-elements.md#development-links-control).    + +Keep in mind that the Development section only appears when using the web portal for VSTS and TFS 2017 or later versions. The work item tracking experience and forms that appear in Visual Studio will be missing several of the features that the web portal makes available. + +### Associated work items in build + +With Git commits, any work items that have been linked to a commit will be listed under the Associated work items in the build summary page. + +<img src="_img/developer-associated-work-items-build.png" alt="Work item form, Development section" style="border: 2px solid #C3C3C3;" /> + +<!--- Add info about option to set build linking; link to release notes if needed --> + + +### Link types showing in the Development section +Links shown in this section appear as a result of these actions: +- Creating a branch, commit, or pull request from the work item +- Specifying the work item ID during a commit, pull request, or other supported Git or TFVC operation +- Specifically linking the work item from the Development section or ![Links tab icon](_img/icon-links-tab-wi.png) Links tab to a source code branch, build, or other supported Git or TFVC operation. + +Hovering over any entry listed under the Development section activates the hyperlink to the associated object. + +The link types you can add within the development section are Branch, Build, Changeset, Commit, Found in build, Integrated in build, Pull Request, and Versioned Item. + +>[!NOTE] +>The link types, **Found in build** and **Integrated in build** are only available from VSTS and only work with the current build processes (not XAML builds). + +<img src="../track/_img/link-tracking-artifact-to-artifact-link-types.png" alt="Artifact-to-artifact link types" style="border: 2px solid #C3C3C3;" /> diff --git a/docs/work/backlogs/copy-clone-work-items.md b/docs/work/backlogs/copy-clone-work-items.md new file mode 100644 index 00000000000..91e9e028045 --- /dev/null +++ b/docs/work/backlogs/copy-clone-work-items.md @@ -0,0 +1,152 @@ +--- +title: Copy work items +description: Copy or clone work items, copy the URL link, or copy a list of work items to the clipboard-Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 743A3914-CD86-403D-AA4F-42CDBBB69F95 +ms.manager: douge +ms.author: kaelli +ms.date: 07/25/2017 +ms.topic: get-started-article +--- + +# Copy or clone work items + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015** + +There are two types of copy functions you can use. The first is to duplicate a single work item, referred to as copy or clone. In addition, you can choose to change the team project or work item type when copying/cloning a work item. + +The second copy function is to copy a multi-selected list of work items to the clipboard, referred to as copy as HTML or copy to clipboard. + +Use this topic to learn how to: + +> [!div class="checklist"] +> * Copy or clone a work item, essentially making a duplicate of a work item +> * Change the work item type, for example from a bug to a user story +> * Copy a list of work items to email or share with others +> * Copy the URL of a work item + +[!INCLUDE [temp](../_shared/image-differences.md)] + +<a id="copy-clone"></a> +## Copy or clone a work item +Clone a work item when you want to create another instance of it. This action opens a form with all fields filled out. No history or attachments are copied. + +Copy a work item when you want to create another instance of it and optionally change its work item type. This action opens a form with all fields filled out except for the Title. A related link to the original work item is created. Also any parent link is copied over. No history or attachments are copied over from the original work item. + +#### VSTS + +1. From the web portal, open the work item you want to copy or clone, open the … context menu, and click **Create copy of work item**. + + <img src="_img/copy-wi-copy-clone-ts.png" alt="VSTS, web portal, user story work item form, open context menu, click Create copy of work item " style="border: 1px solid #CCCCCC;" /> + +2. Choose the team project and work item type if different from the copied work item. Optionally change the Title and provide additional details. To link the copied work item as a Related link type and maintain all other links (related links and external links) included in the copied work item, check the **Include existing links** checkbox. + + <img src="_img/copy-wi-copy-clone-ts-dialogue.png" alt="VSTS, web portal, user story work item form, open context menu, click Copy work item " style="border: 1px solid #CCCCCC;" /> + +#### TFS 2017 + +1. From the web portal, open the work item you want to copy or clone, open the … context menu, and click **Create copy of work item**. + + <img src="_img/copy-wi-copy-clone-2017.png" alt="TFS 2017, web portal, user story work item form, open context menu, click Create copy of work item " style="border: 1px solid #CCCCCC;" /> + +2. Choose the team project and work item type if different from the copied work item. Optionally change the Title and provide additional details. To link the copied work item as a Related link type and maintain all other links (related links and external links) included in the copied work item, check the **Include existing links** checkbox. + + <img src="_img/copy-wi-copy-clone-2017-dialogue.png" alt="TFS 2017, web portal, user story work item form, open context menu, click Copy work item " style="border: 1px solid #CCCCCC;" /> + +#### TFS 2015 + +1. From the web portal, open the work item you want to copy or clone, and click the copy/clone icon. The copied work item is automatically linked to the original work item through a Related link type. + + <img src="_img/copy-wi-copy-clone-2015.png" alt="TFS 2015, web portal, user story work item form, click copy-clone icon" style="border: 1px solid #CCCCCC;" /> + +2. Choose the team project (if copying to another project) and work item type if different from the copied work item. Optionally change the Title and provide additional details. The copied work item is automatically linked to the original work item through a Related link type. + +#### TFS 2013 + +1. From the web portal, open the work item you want to copy or clone, and click the copy/clone icon. The copied work item is automatically linked to the original work item through a Related link type. + + <img src="_img/IC712055.png" alt="TFS 2013, web portal, user story work item form, click copy-clone icon" style="border: 1px solid #CCCCCC;" /> + +2. Choose the team project (if copying to another project) and work item type if different from the copied work item. Optionally change the Title and provide additional details. The copied work item is automatically linked to the original work item through a Related link type. + + +## Change the work item type + +>[!NOTE] +>**Feature availability:**  The **Change the work item type** option is only available from VSTS. + +If you have a large number of work items whose type you want to change, use [Change work item type](../customize/add-modify-wit.md). If Change work item type isn't available to you, you can export a set of work items using Excel, copy them to a new Excel list, and re-import them by specifying a different work item type. See [Bulk add or modify work items with Excel](../office/bulk-add-modify-work-items-excel.md). + + +<a id="html"></a> +## Copy a list of work items + +With this option, you can copy an HTML formatted table of selected items from either a backlog page or query results list. You can then email this list using your choice of email client, or paste into a Word document, Excel spreadsheet, or other application. + +>[!NOTE] +>The data copied with **Copy as HTML** is the same as that copied when you select **Email selected work items**. If you don't have an SMTP server configured, you can work around this by using **Copy as HTML**. For on-premises TFS, all email actions require an [SMTP server to be configured](../../tfs-server/admin/setup-customize-alerts.md). + +### Copy work items + +#### VSTS + +1. From the web portal, open a backlog or query results page, and [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to copy to the clipboard. + +2. Open the … context menu of one of the selected work items, and then choose **Copy to clipboard** or **Copy as HTML**. + + Here we multi-select from the product backlog and choose <b>Copy to clipboard</b>. + + <img src="_img/copy-wi-copy-to-clipboard-ts-1.png" alt="VSTS, backlog page, multi-select items, open context menu, Copy to clipboard" style="border: 1px solid #CCCCCC;" /> + +#### TFS 2017 + +1. From the web portal, open a backlog or query results page, and [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to copy to the clipboard. + +2. Open the … context menu of one of the selected work items, and then choose **Copy as HTML**. + + Here we multi-select from the backlog page. + + <img src="_img/bulk-modify-copy-as-html.png" alt="TFS 2017, Backlog page, multi-select items, open context menu, click Copy as HTML menu option" style="border: 1px solid #CCCCCC;" /> + +#### TFS 2015 + +1. From the web portal, open a backlog or query results page, and [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to copy to the clipboard. + +2. Open the ![context icon](../_img/icons/context_menu.png) context menu of one of the selected work items, and then choose **Copy as HTML**. + + Here we multi-select from the backlog page. + + <img src="_img/copy-wi-copy-as-html-2015.png" alt="TFS 2015, Backlog page, multi-select items, open context menu, click Copy as HTML menu option" style="border: 1px solid #CCCCCC;" /> + + +### Paste the contents into your email client + +Paste the contents of the clipboard into your email client or other application. To open a linked work item, requires users to have read access to the team project or area node for those work items. + +The formatted table contains a link to each work item included in your selected results list. A link to a query that will open only those work items selected is also provided.</p> + +<img src="_img/bulk-modify-copy-as-html-table-results.png" alt=" Copy as HTML paste results" style="border: 1px solid #CCCCCC;" /> + + + +<a id="copy-url"> </a> +## Copy the URL +- From VSTS or the web portal for TFS 2017, simply copy the URL from the web browser address or hover over the title and then click the ![Copy to clipboard icon](_img/icon-copy-to-clipboard.png) copy-to-clipboard icon. + + <img src="_img/add-work-item-copy-URL.png" alt="Copy hyperlink for a work item from web portal" style="border: 1px solid #CCCCCC;" /> + +- From the web portal for TFS 2015, right click the link ID to open the browser copy link option. + + <img src="_img/copy-wi-url-2015.png" alt="Copy hyperlink for a work item from web portal" style="border: 1px solid #CCCCCC;" /> + +- In Visual Studio, right-click the work item tab to copy the URL. The URL opens the work item in the web portal. + + ![Copy full path hyperlink for a work item from Visual Studio](_img/add-work-items-copy-url-for-a-work-item.png) + +## Related topics + +- [Bulk modify work items](bulk-modify-work-items.md) +- [Move, change, or delete work items](remove-delete-work-items.md) +- [Pre-populate fields using work item templates](work-item-template.md) + diff --git a/docs/work/backlogs/copy-list.md b/docs/work/backlogs/copy-list.md new file mode 100644 index 00000000000..2881331abf7 --- /dev/null +++ b/docs/work/backlogs/copy-list.md @@ -0,0 +1,64 @@ +--- +title: Copy list of work items +description: Copy a list of backlog items or a query Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/24/2017 +--- + +# Copy a list of work items + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +<a id="html"></a> + + +You can copy an HTML formatted table of selected items from either a backlog page or query results list. You can then email this list using your choice of email client, or paste into a Word document, Excel spreadsheet, or other application. + +>[!TIP] +>The data copied with **Copy as HTML** is the same as that copied when you select **Email selected work items**. If you don't have an SMTP server configured, you can work around this by using **Copy as HTML**. For on-premises TFS, all email actions require an [SMTP server to be configured](../../tfs-server/admin/setup-customize-alerts.md). + + +## VSTS + +1. From the web portal, open a backlog or query results page, and [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to copy to the clipboard. + +2. Open the … context menu of one of the selected work items, and then choose **Copy to clipboard** or **Copy as HTML**. + + Here we multi-select from the product backlog and choose <b>Copy to clipboard</b>. + + <img src="_img/copy-wi-copy-to-clipboard-ts-1.png" alt="VSTS, backlog page, multi-select items, open context menu, Copy to clipboard" style="border: 1px solid #CCCCCC;" /> + +## TFS 2017 + +1. From the web portal, open a backlog or query results page, and [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to copy to the clipboard. + +2. Open the … context menu of one of the selected work items, and then choose **Copy as HTML**. + + Here we multi-select from the backlog page. + + <img src="_img/bulk-modify-copy-as-html.png" alt="TFS 2017, Backlog page, multi-select items, open context menu, click Copy as HTML menu option" style="border: 1px solid #CCCCCC;" /> + +## TFS 2015 + +1. From the web portal, open a backlog or query results page, and [multi-select the work items](bulk-modify-work-items.md#multi-select) you want to copy to the clipboard. + +2. Open the ![context icon](../_img/icons/context_menu.png) context menu of one of the selected work items, and then choose **Copy as HTML**. + + Here we multi-select from the backlog page. + + <img src="_img/copy-wi-copy-as-html-2015.png" alt="TFS 2015, Backlog page, multi-select items, open context menu, click Copy as HTML menu option" style="border: 1px solid #CCCCCC;" /> + + +## Paste the contents into your email client + +Once you've copied your list, you can optionally paste the contents of the clipboard into your email client or other application. To open a linked work item, requires users to have read access to the team project or area node for those work items. + +The formatted table contains a link to each work item included in your selected results list. A link to a query that will open only those work items selected is also provided.</p> + +<img src="_img/bulk-modify-copy-as-html-table-results.png" alt=" Copy as HTML paste results" style="border: 1px solid #CCCCCC;" /> + + \ No newline at end of file diff --git a/docs/work/backlogs/create-your-backlog.md b/docs/work/backlogs/create-your-backlog.md new file mode 100644 index 00000000000..b1571fcd43c --- /dev/null +++ b/docs/work/backlogs/create-your-backlog.md @@ -0,0 +1,181 @@ +--- +title: Create your backlog | VSTS & TFS +description: Add items, plan your project, order/prioritize, and estimate your backlog of deliverables - Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 04df6b31-ef6c-4285-81a6-96768f03ecf4 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/28/2017 +--- + +# Create your backlog + +<b>VSTS</b> + +Your product backlog corresponds to your project plan, the roadmap for what your team plans to deliver. +Once defined, you have a prioritized list of features and requirements to build. Your backlog also provides a +repository of all the information you need to track and share with your team. + +Your backlog consists of a list of [work items](add-work-items.md). +You use work items to share information, assign work to team members, track dependencies, organize work, +and more. Because the most important work appears at the top of the list, your team always knows what to work on next. + + +## Open your backlog from the web portal + +From your web browser, open your product backlog from the **Work** hub, **Backlogs** page. If you don't have a team project yet, create one in [VSTS](../../accounts/set-up-vs.md). + +<img src="../backlogs/_img/cyb-open-backlog-tfs-2017.png" alt="Web portal, choose Work hub, Backlogs" style="border: 2px solid #C3C3C3;" /> + +The URL follows this pattern: ```https://<account name>.visualstudio.com/DefaultCollection/<project name>/_backlogs``` + + +<!--- +### TFS +<img src="_img/cyb-open-backlog-tfs-2015.png" alt="Open the backlog" style="border: 2px solid #C3C3C3;" /> + +The URL follows this pattern: +```http://{server}:8080/tfs/DefaultCollection/{project name}/_backlogs``` + +If you don't see the team or team project you want, open the team project/team drop-down menu and select the team project/team that you've recently visited. If you don't see the team or team project you want, choose **Browse all** to browse all team projects and teams. + +<img src="../_shared/_img/switch-team-project-2.png" alt="Choose another team from the team project menu" style="border: 2px solid #C3C3C3;" /> + +If you don't have a team project yet, create one in [VSTS](../../accounts/set-up-vs.md) or set one up in an [on-premises TFS](../../accounts/create-team-project.md). + +Building your backlog starts by quickly capturing the requirements you want for your product. If you don't have a team project yet, create one in [VSTS](../../accounts/set-up-vs.md) or set one up in an [on-premises TFS](../../accounts/create-team-project.md). + +--> + +## Convert ideas into backlog items or stories +Begin building your backlog by entering a title and click Add. Repeat this step until you've captured all your main ideas. + +> [!TIP] +> Your backlog shows work that you are planning to do or have started working on. As soon as the State of a work item is set to Done or Completed, the work item no longer shows up on your backlog. You can use the [backlog controls](product-backlog-controls.md) to filter or change your view. + +<img src="_img/create-backlog-add-new-items-ts.png" alt="Add work items to the backlog" style="border: 2px solid #C3C3C3;" /> + +<a id="move-items-priority-order"> </a> +## Move items into priority order +After you've got some items on your backlog, you can order them and create a prioritized list of work. Frequently reviewing and prioritizing your backlog can help your team know what's most important to deliver next. + +Reorder your backlog by simply dragging work items. Or, if you prefer the keyboard, hold the Alt key and use the up and down arrows. + +<img src="_img/cyb-order-backlog.png" alt="Reorder work items" style="border: 2px solid #C3C3C3;" /> + + +>[!TIP] +>You can't sort your backlog on a column. If you want to view a sorted listed, click **Create query**, save and open the query, and then sort the query results. To learn more about queries, see [Use the query editor to list and manage queries](../track/using-queries.md). + + +<a id="estimates"> </a> +## Add details and estimates +Getting your backlog built and prioritized provides the high level roadmap. +However, before your team can actually start work on any item, they'll need +more details. You capture these details within the work item form. + +>[!TIP] +>To plan a sprint, at a minimum you should estimate the effort involved to implement each backlog item. You capture effort in the following fields within the work item form: Effort (Scrum), Story Points (Agile), or Size (CMMI) fields. + +Open each item (double-click, or press Enter to open the selected item) and add all the info you want to track. Enter as much detail as the team needs to understand the scope, estimate the work required, develop tests, and ensure that the end product meets acceptance criteria. + +<!--- + +>[!NOTE] +><b>Feature availability: </b>From the web portal for VSTS and TFS 2017, you'll have access to the [new form with the new work tracking experience](../backlogs/add-work-items.md). For TFS 2015 and earlier versions, the old form is supported. + + +<p>For details on adding work items using the new form, see [add work items](add-work-items.md).</p> + +<img src="_img/cyb-product-backlog-form-ts.png" alt="Product backlog item- VSTS - Add details to a work item" style="border: 2px solid #C3C3C3;" /> + +<p>For details on adding work items using the old form, see [add work items (TFS)](add-work-items.md).</p> + +<img src="_img/ALM_CB_CreateWorkItem.png" alt="Product backlog item - TFS - Add details to a work item" style="border: 2px solid #C3C3C3;" /> +--> + +<table valign="top" width="100%"> +<tbody valign="top" > +<tr> +<th width="16%">Field</th> +<th width="84%">Usage</th> +</tr> +<tr> +<td>[Effort](../track/query-numeric.md)<br/> +[Story Points](../track/query-numeric.md)<br/> +[Size](../track/query-numeric.md)</td> +<td> +<a name="estimates"></a> +<p>Provide a relative estimate of the amount of work required to complete a PBI. For user stories and requirements, you capture estimates in the Story Points and Size fields.</p> +<p>Most Agile methods recommend setting estimates for backlog items based on relative size of work. Such methods include powers of 2 (1, 2, 4, 8) and the Fibonacci sequence (1, 2, 3, 5, 8, etc.). Use any numeric unit of measurement your team prefers. </p> +<p>The estimates you set for Effort, Size, or Story Points are used in calculating [velocity](../../report/guidance/team-velocity.md) and [forecasting sprints](../scrum/forecast.md).</p> +</td> +</tr> + +<tr> +<td>[Business Value](../track/query-numeric.md)</td> +<td>Specify a priority that captures the relative value of a PBI compared to other PBIs. The higher the number, the greater the business value.<br />Use this field when you want to capture a priority separate from the changeable backlog stack ranking.</td> +</tr> + +<tr> +<td>[Description](../track/titles-ids-descriptions.md)</td> +<td>Provide enough detail to create shared understanding of scope and to support estimation efforts. Focus on the user, what they want to accomplish, and why. Don't describe how to develop the product. Do provide sufficient details so that your team can write tasks and test cases to implement the item.</td> +</tr> + +<tr> +<td>[Acceptance Criteria](../track/titles-ids-descriptions.md) </td> +<td><p>Define what "Done" means by describing the criteria that the team should use to verify whether the PBI or the bug fix has been fully implemented.</p> +<p>Before work begins on a PBI or bug, describe the [criteria for customer acceptance](#acceptance) as clearly as possible. Conversations between the team and customers to determine the acceptance criteria help ensure a common understanding within the team to meet customers' expectations. Also, this info provides the basis for acceptance testing.</p></td> +</tr> + +</tbody> +</table> + + +## Try this next +Now that you've got a working backlog in place, your team can begin work on the top priority items. From here, it's time to make the decision on how you want to work as a team: Scrum or Kanban? You can use these methods independently or together. + +> [!div class="nextstepaction"] +> [Scrum: Schedule sprints](../scrum/define-sprints.md) or [Kanban](../kanban/kanban-quickstart.md) + +Teams that want the least overhead in terms of tracking and estimating may prefer Kanban. Teams that like to work at a steady cadence and plot the details of their sprint plan may prefer Scrum and sprint planning. + +<!--- +With [Kanban](../kanban/kanban-basics.md), teams focus on the flow of work from start to finish - limiting work in progress in order to optimize flow and deliver the highest priority items as quickly as possible. + +With [Sprint planning](../scrum/sprint-planning.md), teams define a sprint schedule: a time-boxed set of periods for planning and developing. Using the sprint backlog, they plan their sprints by assigning items to the sprint and defining the tasks required to develop each item. Task boards, capacity charts, and sprint burndown charts all help to keep the team aware of progress throughout the sprint cycle. +--> + +>[!NOTE] +>Depending on the process chosen to create your team project—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md)— +the items in your backlog may be called product backlog items (PBIs), user stories, or requirements. All three are similar: they describe the customer value to be delivered and the work to be performed. +> +>By default, PBIs and bugs appear on Scrum backlogs, user stories on Agile backlogs, and requirements on CMMI backlogs. Each team can [choose how they want to treat bugs: either as requirements or tasks](../customize/show-bugs-on-backlog.md). + + +## Related notes + +- [Groom your backlog](best-practices-product-backlog.md) +- [Product backlog controls](product-backlog-controls.md) +- [Filter product and portfolio backlogs ](filter-backlogs.md) +- [Backlog priority or stack rank order](stack-rank-backlog-position.md) + +If you've already defined a long list of items, you don't have to reenter them one at a time. Instead, use [Microsoft Excel](../office/bulk-add-modify-work-items-excel.md) to quickly import them to your backlog. + +To contribute to the backlog, you must be a member of the Contributors group. If you don't have access to the team project, ask the account owner or project administrator to add you: [VSTS](../../accounts/add-account-users-assign-access-levels.md) or [TFS](../../accounts/add-users.md). + +If you don't see the team or team project you want, click the ![VSTS icon](../_img/icons/project-icon.png) VSTS icon to [browse all team projects and teams](../../connect/account-home-pages.md). + + +>[!NOTE] +>Your product backlog is one of three classes of backlogs available to you. For an overview of the features supported on each backlog and the two types of boards, see [Backlogs, boards, and plans](../backlogs-boards-plans.md). + +### Treat bugs like requirements or tasks +You have a choice as to how you want to manage bugs. Some teams like to track bugs along with requirements on the backlog. Other teams like to track bugs as tasks performed in support of a requirement, and have them appear on their [task board](../scrum/task-board.md). + +If you're using the Scrum process, your default setup is to track bugs along with PBIs. However, if you're working in a team project based on the [Agile or CMMI processes](../guidance/choose-process.md), bugs don't automatically appear on your backlog. + +Talk with your team to determine how they want to manage bugs and then [change your team settings](../customize/show-bugs-on-backlog.md) accordingly. + diff --git a/docs/work/backlogs/define-features-epics.md b/docs/work/backlogs/define-features-epics.md new file mode 100644 index 00000000000..ee42c62db51 --- /dev/null +++ b/docs/work/backlogs/define-features-epics.md @@ -0,0 +1,176 @@ +--- +title: Define features and epics | VSTS & TFS +description: Define features and epics to group backlog items and track high level items +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 9B517FEE-14FA-41FA-87CD-99D33168D01E +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 05/18/2017 +--- + +# Define features and epics + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + + +While many teams can work with a flat list of items, sometimes it helps to group related items into a hierarchical structure. +Perhaps you like to start with a big picture and break it down into smaller deliverables. +Or, you've got an existing backlog and now need to organize it. + +No matter your starting point, you can use portfolio backlogs to bring more order to your backlog. +Use your backlogs to plan your project and to: +* Manage a portfolio of features that are supported by different development and management teams +* Group items into a release train +* Minimize size variability of your deliverables by breaking down a large feature into smaller backlog items + +Use this topic to learn how to: +> [!div class="checklist"] +> * View a backlog or portfolio backlog +> * Add features and epics +> * Add child items + +With portfolio backlogs you can quickly add and group items into a hierarchy, drill up or down within the hierarchy, reorder and reparent items, and filter hierarchical views. Portfolio backlogs are one of three classes of backlogs available to you. For an overview of the features supported on each backlog and the two types of boards, see [Backlogs, boards, and plans](../backlogs-boards-plans.md). + +>[!NOTE] +>**Feature availability**: Epics are supported on VSTS and TFS 2015 and later versions. Each team can choose the backlog levels that are active as described in [Select backlog navigation levels for your team](../customize/select-backlog-navigation-levels.md). + + +<a id="view-portfolio-backlog" /> +## View a backlog or portfolio backlog +To focus on one level of a backlog at a time, click the name of the backlog you want to view. If you don't see all three backlog levels— +Epics, Features, and Backlog items— +you can [enable them for your team](../customize/select-backlog-navigation-levels.md). + +For example, when you click Epics, you'll see a list of all Epics in your team's active area paths. From there, you can drill down to see child features and backlog items. + +<img src="_img/org-backlog-epics-ts-new-nav.png" alt="Hierarchical view of backlogs" style="border: 2px solid #C3C3C3;" /> + +Click Features to see a list of all features in your team's active area paths. + + +<a name="add-features-epics"></a> +<a name="add-features"></a> +## Add features and epics +Just as you can [add items to your product backlog](create-your-backlog.md), you can add items to your features and epics backlogs. +Here, we've added six features. + +<img src="_img/org-backlog-features-ts-new-nav.png" alt="Features backlog" style="border: 2px solid #C3C3C3;" /> + +You can add epics in the same way. Simply open the Epics backlog. + +Open each item (double-click, or press Enter to open the selected item) and add all the info you want to track. Enter as much detail as the team needs to understand the scope, estimate the work required, develop tests, and ensure that the end product meets acceptance criteria. + +>[!NOTE] +>**Reminder:** The following screenshots illustrate the work item form for VSTS. Your forms may differ depending on what you have enabled, what process you chose when creating your team project—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md)—and what platform you're working from, VSTS and TFS. + +<img src="_img/org-backlog-feature-form-ts-new-nav.png" alt="Feature work item form, Agile process, Add details to a feature" style="border: 2px solid #C3C3C3;" /> + +<table> +<tbody valign="top"> +<tr> +<th>Field</th> +<th>Usage</th> +</tr> +<tr> +<td> +[Value Area](../track/planning-ranking-priorities.md) +</td> +<td>The area of customer value addressed by the epic, feature, or backlog item. Values include: +<ul> +<li><b>Architectural</b> – technical services to implement business features that deliver solution </li> +<li><b>Business</b> (Default) – services that fulfill customers or stakeholder needs that directly deliver customer value to support the business </li> +</ul> +</td> +</tr> +<tr> +<td> +[Effort](../track/query-numeric.md)<br/> +[Story Points](../track/query-numeric.md)<br/> +[Size](../track/query-numeric.md) +</td> +<td> +Provide a relative estimate of the amount of work required to complete a Feature or Epic. Use any numeric unit of measurement your team prefers. Some options are [story points, time, or other relative unit](create-your-backlog.md#estimates). + + + +</td> +</tr> + +<tr> +<td> + +[Business Value](../track/query-numeric.md) +</td> +<td> +Specify a priority that captures the relative value of an Epic, Feature, or backlog item compared to other items of the same type. The higher the number, the greater the business value.<br />Use this field when you want to capture a priority separate from the changeable backlog stack ranking. + +</td> +</tr> + +<tr> +<td> +[Time Criticality](../track/planning-ranking-priorities.md) +</td> +<td> +A subjective unit of measure that captures the how the business value decreases over time. Higher values indicate that the Epic or Feature is inherently more time critical than those items with lower values. +</td> +</tr> +<tr> + <td><p>[Target Date](../track/query-by-date-or-current-iteration.md)</p></td> + <td><p>Specify the date by which the feature should be implemented.</p></td></tr> + +</tbody> +</table> + + + + +## Add child items +With your features defined, you're ready to add child items to them. From any backlog, you can add child items. +You can add features to epics, and backlog items to features. + +Here we add a product backlog item as a child to the Customer Web - Phase 1 feature. + +<img src="_img/org-backlog-features-add-child-ts.png" alt="Add a child item to a backlog work item" style="border: 2px solid #C3C3C3;" /> + + +Whenever you see the plus ![plus icon](../_img/icons/green_plus_icon.png) , you can add a child item. +The work item always corresponds to the hierarchy of work item types that are defined for your team project. + +For Scrum team projects, your hierarchy is as shown: + +![Hierarchical view of backlogs](_img/ALM_OB_Scrum_WIT_Hier_C.png) + +Because [teams can also set bugs as tasks](../customize/show-bugs-on-backlog.md), bugs can be added as children of PBIs. + +The work item types you'll see depends on the [process you selected to create your team project](../guidance/choose-process.md). + +If you want bugs to show up on your backlog and you're not seeing them, [enable them for your team](../customize/show-bugs-on-backlog.md). + + +## Try this next + +Portfolio backlogs are not only a great way to organize your project plan, but also a great way to provide visibility of project plans across enterprise teams. With portfolio backlogs, management teams can gain insight into project status across all their development teams. + +> [!div class="nextstepaction"] +> [Organize your backlog](organize-backlog.md) + + +## Related notes + +- [Product backlog controls](product-backlog-controls.md) +- [Filter product and portfolio backlogs ](filter-backlogs.md) +- [Select backlog navigation levels for your team](../customize/select-backlog-navigation-levels.md) +- [Work with multi-team ownership of backlog items](work-multi-team-ownership-backlogs.md) + + + +> [!NOTE] +> To understand the features supported on each backlog and board, and how each display hierarchical items, see [Backlogs, boards, and plans](../backlogs-boards-plans.md). To learn how to track progress across teams, see [Visibility across teams](../scale/visibility-across-teams.md). + + + + + diff --git a/docs/work/backlogs/filter-backlogs.md b/docs/work/backlogs/filter-backlogs.md new file mode 100644 index 00000000000..aba072ed638 --- /dev/null +++ b/docs/work/backlogs/filter-backlogs.md @@ -0,0 +1,44 @@ +--- +title: Filter backlogs | VSTS & TFS +description: Filter your backlog based on keywords, tags, or other fields +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/28/2017 +--- + +<a id="filter"></a> + +# Filter product and portfolio backlogs + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +<!--- NEEDS UPDATING BASED ON FEATURES UNDER RELEASE --> + +If you have many items listed in your product or portfolio backlog—and you want to focus on a subset of them—you can filter the set. + +## Filter based on keywords +You can use keywords to filter your backlogs, Kanban boards, and query results. The filter function picks up work items based on any visible/displayed column or field, including tags, based on the keyword that you enter. Also, you can enter a value for an ID, whether or not the ID field is visible. + +Here, we filter the backlog to only show items that include 'Web' in any one of the displayed column fields. + +<img src="_img/cyb-filter-backlog.png" alt="Apply text filter" style="border: 2px solid #C3C3C3;" /> + +The filtered set is always a flat list, even if you've selected to show parents. + +The filter criteria ignores the following characters when the field value starts with the character: ```{, (, [, !, @, #, $, %, ^, &, *, ~, `, ', "```. + +## Filter based on tags +If you've [added tags to your work items](../track/add-tags-to-work-items.md), you can filter your backlogs, Kanban boards, and query results using the ![tag filter icon](../_img/icons/tag_filter_icon.png) tag filter. For backlogs and query results, add Tags as a column option prior to filtering on tags. + +To learn more about filtering using Tags, see [Add tags to work items to categorize and filter lists and boards, Filter lists using tags](../track/add-tags-to-work-items.md#filter) + + +## Related notes +- [Tags](../track/add-tags-to-work-items.md) +- [Set column options](../how-to/set-column-options.md) + + + diff --git a/docs/work/backlogs/index.md b/docs/work/backlogs/index.md new file mode 100644 index 00000000000..c2c9d5b8909 --- /dev/null +++ b/docs/work/backlogs/index.md @@ -0,0 +1,73 @@ +--- +title: Backlogs index to content for VSTS & TFS +description: Index to topics for planning and tracking work in VSTS and and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: D51EAF72-F73D-4012-97F9-6208232B91B7 +ms.manager: douge +ms.author: kaelli +ms.date: 08/03/2017 +--- + +# Backlogs + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Start planning your project by quickly adding user stories or requirements to your product backlog. + +<!--- +## Overview + +[Backlogs, boards, and plans](/vsts/work/backlogs-boards-plans?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +[About teams and Agile tools](/vsts/work/about-teams-and-settings?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +--> + + +## 5-Minute Quickstarts + +Build your backlog and then start driving your code development efforts. + +- [Create your backlog](create-your-backlog.md) +- [Drive Git development](connect-work-items-to-git-dev-ops.md) + +## Step-by-Step Tutorials + +- [Define features & epics](define-features-epics.md) +- [Organize backlogs](organize-backlog.md) + +## Concepts + +- [Groom your backlog](/vsts/work/backlogs/best-practices-product-backlog?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +- [About permissions and access](/vsts/work/permissions-access-work-tracking?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +- [Backlog items & multi-team ownership](work-multi-team-ownership-backlogs.md) +- [Share work plans](/vsts/work/track/share-plans?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) + +## How-to Guides + + +* [Filter backlogs, boards, & queries](/vsts/work/how-to/filter-backlog-or-board?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +* [Change column options](/vsts/work/how-to/set-column-options?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +* [Email/print work items](/vsts/work/how-to/email-work-items?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +* [Define area paths](/vsts/work/customize/set-area-paths?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +* [Define iteration paths](/vsts/work/customize/set-iteration-paths-sprints?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) + + +## Reference +- [Permissions and access for work tracking](/vsts/work/permissions-access-work-tracking?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) +- [Work item field index](/vsts/work/guidance/work-item-field?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json) + + +## Resources + +- [Kanban](../kanban/index.md) +- [Scrum](../scrum/index.md) +- [Work item queries](../track/index.md) +- [Work item customization](../customize/index.md) +- [What is Agile?](https://www.visualstudio.com/learn/what-is-agile/) +- [What is Agile development?](https://www.visualstudio.com/learn/what-is-agile-development/) +- [Agile culture](https://www.visualstudio.com/learn/agile-culture/) + + + + + diff --git a/docs/work/backlogs/manage-bugs.md b/docs/work/backlogs/manage-bugs.md new file mode 100644 index 00000000000..7ce6f528580 --- /dev/null +++ b/docs/work/backlogs/manage-bugs.md @@ -0,0 +1,366 @@ +--- +title: Manage bugs using Agile tools provided by VSTS & TFS +description: Manage technical debt and triage bugs using Agile tools and Scrum methods when working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 6E5710EE-21C8-4264-AD65-A827D186F134 +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +ms.topic: get-started-article +--- + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] +   + +How do you track and manage defects in your code? How do you make sure software problems and customer feedback get addressed in a timely manner to support high-quality software deployments? And, how do you do this while making good progress on new features? + +At a minimum, you need a way to capture your software issues, prioritize them, assign them, and track progress. Moreover, you'll want to manage your bugs in ways that align with your Agile practices. + +In a nutshell, you manage bugs through the following tasks: + +> [!div class="checklist"] +> * Capture information using the bug work item type +> * Triage bugs by assigning a priority +> * Update bug status throughout the bug lifecycle +> * Monitor bug assignments and trends + +<!--- TBD --> +In addition, you can: +- Capture bugs using test tools +- Configure how your team manages bugs—along with requirements or with tasks +- Define queries and create charts of bug status, assignments, and trends +- Manage duplicate bugs by linking and closing one of them +- Re-run test cases in the web runner using the Verify option +- Automatically capture bugs when using the Test & Feedback extension +- Customize the bug template +- Interface with UserVoice or Zendesk. + + +## Capture bugs +You can track bugs in much the same way that you track product backlog items (PBIs) or user stories. Using the bug work item form, you capture the code defect in the Title, Steps to Reproduce, and other fields. + +You can create bugs from the [web portal](add-work-items.md), Visual Studio/Team Explorer, a [work item template](work-item-template.md), or through one of the testing tools. + +### Bug work item form + +The bug work item form tracks similar information to the one shown for the Scrum process. + +>[!NOTE] +>The images you see from your web portal may differ from the images you see in this topic. These differences result from updates made to VSTSor your on-premises TFS, options that you or your admin have enabled, and which process was chosen when creating your team project—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md). + + +#### VSTS | TFS 2017 (new form enabled) + + +The new web form provides a number of experiences not provided with the old web form. To learn more, see [New work item experience](../process/new-work-item-experience.md). + +<img src="_img/manage-bugs-scrum-bug-from-ts.png" alt="Scrum bug work item form, VSTS" style="border: 2px solid #C3C3C3;" /> +</div> + +#### TFS 2015 | TFS 2013 (old web form) + +To learn more about working in the web form for TFS 2015 or earlier versions, see [Add work items to plan and track your project](add-work-items-tfs.md). + +<img src="_img/scrum-bug-wi-form.png" alt="Scrum bug work item form, TFS 2015 or earlier versions" style="border: 2px solid #C3C3C3;" /> + + +### Fields specific to bugs + +When defining a bug, use these fields to capture both the initial issue and ongoing discoveries made when triaging, investigating, fixing, and closing the bug. + +<table> +<tbody valign="top"> +<tr> +<th> +<p>Field/tab</p> +</th> +<th> +<p>Usage</p> +</th> +</tr> +<tr> +<td> +[Steps to Reproduce](../track/titles-ids-descriptions.md) (friendly name=Repro Steps) +</td> +<td> +<p>Capture enough information so that other team members can understand the full impact of the problem as well as whether they have fixed the bug. This includes actions taken to find or reproduce the bug and expected behavior. </p> +<p>Describe the criteria that the team should use to verify whether the code defect is fixed. </p> +</td> +</tr> + +<tr> +<td> +<p>[System Info](../track/titles-ids-descriptions.md)</p> +</td> +<td> +<p>Information about the software and system configuration that is relevant to the test.</p> +</td> +</tr> + +<tr> + <td><p>[Acceptance Criteria](../track/titles-ids-descriptions.md) </p></td> + <td><p>Provide the criteria to be met before the bug or user story can be closed. Before work begins, describe the customer acceptance criteria as clearly as possible. The acceptance criteria can be used as the basis for acceptance tests so that you can more effectively evaluate whether an item has been satisfactorily completed.</p> + +</td> +</tr> +<tr> +<td> +<p>[Found In Build](../track/build-test-integration.md)</p> +<p>[Integrated in Build](../track/build-test-integration.md)</p> +</td> +<td> +<p>When Test Manager creates bugs, it automatically populates **System Info** and **Found in Build** with information about the software environment and build where the bug occurred. To learn more about defining the software environments, see [Test different configurations](../../manual-test/test-different-configurations.md).</p> +<p>When you resolve the bug, use **Integrated in Build** to indicate the name of the build that incorporates the code that fixes the bug. </p> +<p>**On-premises TFS only:** To access a drop-down menu of all builds that have been run, you can update the ```FIELD``` definitions for Found in Build and Integrated in Build to reference a global list. The global list is automatically updated with each build that is run. To learn more, see [Query based on build and test integration fields](../track/build-test-integration.md)<. </p> +<p>For information about how to define build names, see [build number format options](../../build-release/concepts/definitions/build/options.md). </p> +</td> +</tr> + +<tr> +<td> +[Priority](../track/planning-ranking-priorities.md) <sup>1</sup> +</td> +<td> +<p>A subjective rating of the bug as it relates to the business or customer requirements. Priority indicates the order in which code defects should be fixed. You can specify the following values:</p> +<ul> + <li> + **1**: Product cannot ship without the successful resolution of the work item, and it should be addressed as soon as possible. + </li> + <li> + **2**: Product cannot ship without the successful resolution of the work item, but it does not need to be addressed immediately. + </li> + <li> + **3**: Resolution of the work item is optional based on resources, time, and risk. + </li> +</ul> +</td> +</tr> + +<tr> +<td> +[Severity](../track/planning-ranking-priorities.md) <sup>1</sup> +</td> +<td> +A subjective rating of the impact of a bug on the project or software system. For example: If clicking a remote link (a rare event) causes an application or web page to crash (a severe customer experience), you might specify Severity = 2 - High and Priority = 3. Allowed values and suggested guidelines are: +<ul> + <li> + **1 - Critical**: Must fix. A defect that causes termination of one or more system components or the complete system, or causes extensive data corruption. And, there are no acceptable alternative methods to achieve required results. + </li> + <li> + **2 - High**: Consider fix. A defect that causes termination of one or more system components or the complete system, or causes extensive data corruption. However, an acceptable alternative method exists to achieve required results. + </li> + <li> + **3 - Medium**: (Default) A defect that causes the system to produce incorrect, incomplete or inconsistent results. + </li> + <li> + **4 - Low**: A minor or cosmetic defect that has acceptable workarounds to achieve required results. + </li> +</ul> +</td> +</tr> + +</tbody> +</table> + +<sup>1</sup> To change the menu selection or pick list, see [Customize the work tracking experience](../customize/customize-work.md). The customization method depends on the process model used by your team project. + +For information about fields specific to the CMMI process, see [Bugs, issues, and risks field reference](../guidance/cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md). For information about all other fields, see [Work item field index](../guidance/work-item-field.md). + + +Add and review comments made about the work being performed by going to the discussion section. + + +>[!TIP] +>Use the [Discussion section](../concepts/work-item-form-controls.md#discussion) to add and review comments made about the work being performed to resolve the bug. This feature is only available from the new web form. + + +## Capture bugs using test tools + +You can create bugs during test sessions using one of the following tools: +- **Test & Feedback extension**: see [Exploratory testing with the Test & Feedback extension](../../manual-test/connected-mode-exploratory-testing.md) +- **Test Runner**: see [Update an existing bug while using Test Runner](https://msdn.microsoft.com/library/dd286731.aspx). + + +<a id="triage"> </a> +## Triage bugs + +Once you've started coding and testing, you'll want to hold periodic triage meetings to review and prioritize your bugs. How frequently you meet and for how long depends on your situation. Typically, the project owner runs the bug triage meetings, and team leads, business analysts and other stakeholders who can speak about specific project risks attend them. + +The project owner can create or open a shared query for new and reopened bugs to generate a list of bugs to be triaged. + +### Bug queries +Open a shared query or [use the query editor](../track/using-queries.md) to create useful bug queries, such as the following: +- Active bugs by priority (```State <> Done``` or ```State <> Closed```) +- In Progress bugs (```State = Committed``` or ```State = Active```) +- Bugs to fix for a target release (```Tags Contains RTM```) +- Recent bugs - bugs opened within the last 3 weeks (```Created Date > @Today-21```) + +Once you have the queries of interest to your team, you can [create status or trend charts](../../Report/charts.md) that you can also pin to a [team dashboard](../../Report/dashboards.md). + +### Triage mode in query results + +From the query results page, you can quickly move up and down within the list of bug work items using the up and down arrows. As you review each bug, you can assign it, add details, or set priority. + +<img src="_img/scrum-active-bug-triage-mode-co.png" alt="Triage query results" style="border: 2px solid #C3C3C3;" /> + + +<a id="track"> </a> +### Track bugs as requirements or tasks + +Many Scrum teams treat bugs the same as any backlog item or user story. Others see bugs as work that belongs to implementing a story, and therefore treat them as a task. + +Bugs, like PBIs and user stories, represent work that needs doing. So, should you track your bugs along with other items in the product backlog items or as tasks linked to those backlog items? How does your team estimate work? + +Based on how your team answers these questions, they can choose how they want to track bugs from one of these three choices. To change the team setting, see [Show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md). + +<table> +<tbody valign="top"> +<tr> +<th>Bug tracking options</th> +<th>Choose this option </th> +</tr> +<tr> +<td> +<p>**Bugs appear as part of the product backlog**</p> +<p>Bugs appear on backlogs and boards with requirements </p> +</td> +<td> +<p>When your team or product owner wants to manage bugs similar to requirements. Bugs can be added and prioritize along with PBIs or user stories on the [product backlog](create-your-backlog.md). </p> +<p>With this option, the team can estimate the effort or story points for bugs which are then included against team velocity and cumulative flow. </p> +</td> +</tr> +<tr> +<td> +<p>**Bug backlog is separate from the product backlog** </p> +<p>Bugs appear on backlogs and boards with tasks </p> +</td> +<td> +<p>When your team links bugs to PBIs or user stories, and manages them similar to tasks.</p> +<p>With this option, the team can estimate remaining work for bugs and track progress against the sprint capacity and sprint burndown.</p> +</td> +</tr> +<tr> +<td> +<p>**Bugs don't appear on backlogs and boards** </p> +</td> +<td> +<p>When your team manages bugs separate from requirements or tasks, or a different team is tasked with addressing bugs. </p> +</td> +</tr> +</tbody> +</table> + +### Assign bugs to a sprint +Once bugs have been triaged, it's time to assign them to a sprint to get fixed. By addressing a set of bugs to get fixed every sprint, your team can keep the total number of bugs to a reasonable size. + +When bugs appear on the product backlog, you can [assign bugs to sprints in the same way you do PBIs and user stories](../scrum/sprint-planning.md) during your sprint planning sessions. + +When bugs are treated as tasks, they're often automatically linked to a PBI or user story. So, assigning their parent PBI or user story to a sprint will [assign the linked bugs to the same sprint as the parent PBI or user story](../scrum/task-board.md) during your sprint planning sessions. + +Your team should consider fixing all bugs found during a sprint when testing a feature in development. + +>[!TIP] +>If you work from VSTS and TFS 2015.1 and later versions, you can +>[drag-and-drop work items onto a sprint from any backlog or board](../scrum/define-sprints.md#drag-drop-to-sprint). + + + +<a id="fix-resolve-close"> </a> +## Fix, resolve and close bugs (update status) + +Bug fixes that involve more than a single section of code may require significant regression testing and may involve other team members. Record any conversations that relate to assessing the risk of bug fixes in the bug work item history. + + +### Bug workflow lifecycle + +Once you fix a bug, you should update its workflow State. State choices vary depending on the process you use—[Scrum](../guidance/scrum-process.md), +[Agile](../guidance/agile-process.md), or [CMMI](../guidance/cmmi-process.md). The following images illustrate the workflow lifecycle defined for the default bug workflow for the Agile, Scrum, and CMMI processes. + +| Agile | Scrum | CMMI | +|------------|------------|-----------| +| ![Bug workflow states, Agile process template](../guidance/_img/ALM_PT_Agile_WF_Bug.png) | ![Bug workflow states, Scrum process template](../guidance/_img/ALM_PT_Scrum_WF_Bug.png) | ![Bug workflow states, CMMI process template](../guidance/_img/ALM_PT_CMMI_WF_Bug.png) | + +For Scrum bugs, you simply change the State from Committed (similar to Active) to Done. For Agile and CMMI, you first resolve the bug, indicating that the bug has been fixed. Typically, the person who created the bug then verifies the fix and updates the State from Resolved to Closed. If more work has been found after a bug has been resolved or closed, it can be reactivated by setting the State to Committed or Active. + + +### Verify a fix +To verify a fix, a developer or tester should attempt to reproduce the bug and look for additional unexpected behavior. If necessary, they should reactivate the bug. + +When verifying a bug resolution, you may find that the bug was not completely fixed or you may disagree with the resolution. In this case, discuss the bug with the person who resolved it, come to an agreement, and possibly reactivate the bug. If you reactivate a bug, include the reasons for reactivating the bug in the bug description. + +[!INCLUDE [temp](../_shared/verify-bug-test-runner.md)] + +<a id="close"> </a> +### Close a bug +You close a bug once it's verified as fixed. However, you may also close a bug for one of these reasons: + +- Deferred - deferring a fix until the next product release +- Duplicate - bug has already been reported, you can link each bug with the Duplicate/Duplicate of link type and close one of the bugs +- As Designed - feature works as designed +- Cannot Reproduce - tests prove that the bug can't be reproduced +- Obsolete - the bug's feature is no longer in the product +- Copied to Backlog - a PBI or user story has been opened to track the bug + +It's always a good idea to describe any additional details for closing a bug in the Discussion field (new web form) or the History field (old web form) to avoid future confusion as to why the bug was closed. + +## Monitor bug status, assignments, and trends + +You can track the bug status, assignments, and trends using queries which you can then chart and add to a dashboard. + +For example, here are two examples showing active bugs by priority trend and a snapshot of bugs by priority. + +![Bug trend chart from query](_img/manage-bugs-trend-chart.png) ![Bug snapshot by priority](_img/manage-bugs-priority-chart.png) + +To learn more about queries, charts, and dashboards; see [Create managed queries](../track/example-queries.md) and [Charts](../../report/charts.md), and [Dashboards](../../report/dashboards.md). + +### Pre-defined SQL Server bug reports (on-premises TFS only) + +<!--- +If you work from VSTS, you can use Power BI to access [bug reports and dashboards](../../report/powerbi/report-on-vso-with-power-bi-vs.md). +--> + +If you work from an on-premises TFS and you have SQL Server Analysis Services and SQL Server Reporting Services configured for your team project, you have access to the following reports (Agile and CMMI processes only). + +- [Bug Status](../../report/sql-reports/bug-status-report.md) +- [Bug Trends](../../report/sql-reports/bug-trends-report.md) +- [Reactivations](../../report/sql-reports/reactivations-report.md) + +To learn how to add SQL Server reports for a team project, see [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md). + +## Related topics + +To track your bugs and integrate with other resources available to you, see these topics: + +- [Scrum and working with sprints best practices](../scrum/best-practices-scrum.md) +- [Follow a work item or pull request](../../collaborate/follow-work-items.md) +- [Move, change type, or delete work items](remove-delete-work-items.md) +- [Pre-populate fields using a template](work-item-template.md) +- [Copy or clone a work item](copy-clone-work-items.md#copy-clone) + +### Integrate & Test resources +- [UserVoice](../../service-hooks/services/uservoice.md) +- [Zendesk](../../service-hooks/services/zendesk.md) +- [Developer testing tools scenarios and capabilities](https://docs.microsoft.com/visualstudio/test/developer-testing-scenarios) +- [Run tests for desktop apps](../../manual-test/getting-started/run-manual-tests.md#run-desktop) + +### Customize the bug form + +You can add fields, change the bug workflow, or customize the bug form. The method you use depends on the process model used by your team project. For details, see [Customize the work tracking experience](../customize/customize-work.md). + +<!--- +###Use SonarQube to help manage technical debt + +SonarQube provides a way of automatically measuring some technical debt. SonarQube finds important violations of best coding practices. You implement Sonar to ensure that developers follow important code metrics like appropriate class and method size or low cyclomatic complexity (a quantitative measure of the number of linearly independent paths through a program's source code). + +By integrating your on-premises TFS with a SonarQube server, you can get the following data: +Results of .Net and JavaScript code analysis +Code clone analysis +Code coverage data from tests +Metrics for .Net and JavaScript + +See [Technical Debt Management: Announcing SonarQube integration with MSBuild and Team Build](http://blogs.msdn.com/b/visualstudioalm/archive/2015/05/05/technical-debt-management-announcing-sonarqube-integration-with-msbuild-and-team-build.aspx) for details. + +--> + + diff --git a/docs/work/backlogs/manage-issues-impediments.md b/docs/work/backlogs/manage-issues-impediments.md new file mode 100644 index 00000000000..bd10852827d --- /dev/null +++ b/docs/work/backlogs/manage-issues-impediments.md @@ -0,0 +1,58 @@ +--- +title: Manage issues or impediments | VSTS & TFS +description: Add work items to track problems, risks, or other issues that may impeded your plans or schedule - Visual Studio Team Services (VSTS) and Team Foundation +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 5B126205-599D-40EB-BC95-23CF1444EF2A +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/15/2017 +--- + +# Manage issues or impediments + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +<a name="manage-impediments"></a> + +If you have known issues you want to track, you can do so by defining an impediment (Scrum) or issue (Agile or CMMI). Impediments and issues represent unplanned activities. Resolving them requires more work beyond what's tracked for actual requirements. Using the impediment work item type helps you track and manage these issues until you can resolve and close them. + +Don't confuse impediments with bugs. You track impediments that may cause problems with delivering one or more requirements. For example, you may have to address feature ambiguity, personnel or resource issues, problems with environments, or other risks that impact scope, quality, or schedule. Other issues that deserve tracking are decisions that require several stakeholders or product teams to weigh in on. + +In this topic you'll learn: + +> [!div class="checklist"] +> * How to capture issues or impediments as a work item + +## Add an issue or impediment + + +#### VSTS | TFS 2017 (new form enabled) + +From the **Work** hub, choose Impediment from the New Work Item list of options. Click the ![pin icon](../_img/icons/pin-icon.png) pin icon to have it show up within the Work hub drop down menu. + +<img src="_img/cyb-new-work-item-impediment.png" alt="VSTS, TFS 2017 - Add an impediment" style="border: 2px solid #C3C3C3;" /> + +Or, from the Queries page, you can add a new work item. + +<img src="_img/cyb-new-work-item-impediment-form.png" alt="Create a new impediment" style="border: 2px solid #C3C3C3;" /> + + +#### TFS 2015 | TFS 2013 (old web form) + +From the Queries page, choose Impediment from the **New** drop down menu. + +<img src="_img/ALM_CB_CreateImpediments.png" alt="TFS 2015, TFS 2013 - Add an impediment" style="border: 2px solid #C3C3C3;" /> + + +## Related notes +- [Add work items](add-work-items.md) +- [Work item form controls](../concepts/work-item-form-controls.md) +- [Manage bugs or code defects](manage-bugs.md) +- [Create your backlog](create-your-backlog.md) + +Impediments and issues don't appear on your backlog. Instead, you track them using [queries](../track/using-queries.md). If you want them to appear on your backlog, or you want to track other work item types on your backlog, see these topics for details: +- **Inheritance process model** (VSTS): [Customize your backlogs or boards](../process/customize-process-backlogs-boards.md) +- **Hosted XML process model** (VSTS): [Add a work item type to a backlog and board](../customize/add-wits-to-backlogs-and-boards.md) +- **On-premises XML process model** (TFS): [Add a work item type to a backlog and board](../customize/add-wits-to-backlogs-and-boards.md) diff --git a/docs/work/backlogs/organize-backlog.md b/docs/work/backlogs/organize-backlog.md new file mode 100644 index 00000000000..2ff8844c33c --- /dev/null +++ b/docs/work/backlogs/organize-backlog.md @@ -0,0 +1,93 @@ +--- +title: Organize your backlog using Agile tools provided by VSTS & TFS +description: Organize your backlog by mapping backlog items to features, and features to epics in VSTS or the web portal for Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: C294ACBD-00A3-4FCF-8777-B354BC0CC1EF +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 06/19/2017 +--- + +# Organize your backlog, map child work items to parents + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +After you've added [features or epics](define-features-epics.md) to your portfolio backlog, you can quickly organize your backlog by mapping backlog items to them. With features and epics, you can quickly add and group items into a hierarchy, drill up or down within the hierarchy, reorder and reparent items, and filter hierarchical views. + + +In this topic you'll learn: + +> [!div class="checklist"] +> * How to change the backlog view to show the tree hierarchy +> * How to group backlog items under a feature or epic using the Mapping pane +> * How to reparent items using drag-and-drop or the **Change parent** option + + + + +## Show parents and expand the tree hierarchy +From the product backlog page, set Parents to Show when you want to drill up or down within the hierarchy, set Parents to Show. You can also drag and drop items to reparent items from this view. + +<img src="_img/org-backlog-intro-show-parents-ts-new-nav.png" alt="Hierarchical view of backlogs" style="border: 2px solid #C3C3C3;" /> + +Use the expand ![expand icon](../_img/icons/expand_icon.png) and collapse ![collapse icon](../_img/icons/collapse_icon.png) icons to expand or collapse one level of the hierarchy. + +<img src="_img/org-backlog-collapse-backlog-ts-new-nav.png" alt="Collapsed hierachical view" style="border: 2px solid #C3C3C3;" /> + + +<a id="mapping"> </a> + +## Map items to group them under a feature or epic +If you've already created your backlog, and now you want to organize it, you can do that most easily by mapping them. + +To map a backlog item under a feature, you first turn mapping on from your backlog (Backlog items, Stories, or Requirements). Next, find the Unparented backlog items group by turning the Parents control to Show. Unparented backlog items will appear at the end of the parented set of backlog items. + +Drag items that are currently unparented to the feature under which they belong. Also, you can drag a backlog item to a different feature to change its parent. This mapping creates parent-child links from feature to user stories, which is captured in the ![Links tab icon](../backlogs/_img/icon-links-tab-wi.png) (links) tab. + +<img src="_img/org-backlog-map-pbi-to-feature-ts-new-nav.png" alt="Map a backlog item to a portfolio backlog work item" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +><b>Feature availability: </b> Multi-select of work items on the backlog and sprint backlogs is supported from VSTS and TFS 2015.1 or later versions. This feature works in the same way as [multi-select works within query results](../backlogs/bulk-modify-work-items.md).   + +It's the same process to map features to epics. From the Features backlog, drag features to an epic listed under the mapping pane. + +<a id="reparent"> </a> + +## Change parent (re-parent) and reorder items +When you need to change the order or grouping, simply drag the item to its new location. + +You can re-parent an item using the mapping pane, or simply drag it within the hierarchy to change its parent. + +<img src="_img/ALM_OB_ReparentAnItem.png" alt="Reparent or reorder work items on a backlog" style="border: 2px solid #C3C3C3;" /> + + You can only re-parent backlog items under other features, and features under other epics. + +Also, to change an item's priority within a group, you can drag the item up or down within its hierarchical group. +This works the same as when you [moved items into priority order on your product backlog](create-your-backlog.md). + + +<a id="change-parent-option"> </a> + +### Change parent of multiple backlog items + +>[!NOTE] +><b>Feature availability: </b> The **Change parent…** menu option from the backlog page is supported from VSTS. + +From the product backlog you can multi-select several work items and choose **Change parent…** to link the items to a parent work item item. + +<img src="_img/org-backlog-change-parent.png" alt="Change parent of several backlog items" style="border: 2px solid #C3C3C3;" /> + + +## Related topics + +- [Define features and epics](define-features-epics.md) +- [Work with multi-team ownership of backlog items](work-multi-team-ownership-backlogs.md) +- [Select backlog navigation levels for your team](../customize/select-backlog-navigation-levels.md) +- [Product backlog controls](product-backlog-controls.md) +- [Filter product and portfolio backlogs ](filter-backlogs.md) + + +[!INCLUDE [temp](../_shared/image-differences.md)] diff --git a/docs/work/backlogs/product-backlog-controls.md b/docs/work/backlogs/product-backlog-controls.md new file mode 100644 index 00000000000..52c242b385c --- /dev/null +++ b/docs/work/backlogs/product-backlog-controls.md @@ -0,0 +1,38 @@ +--- +title: Product backlog controls | VSTS & TFS +description: Switch views and switch controls on or off from your product backlog - Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/28/2017 +--- + + +<a id="backlog-controls"> </a> +# Product backlog controls + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Once you've defined your product backlog, you can use the following controls to change or filter the view. + +| Control | Function | +|--------------------------|-------------------------------| +| Backlog | [Switch to backlog view](create-your-backlog.md) | +| Board | [Switch to Kanban board view](../kanban/kanban-quickstart.md) | +| Forecast | [Turn forecasting Off/On](../scrum/forecast.md) | +| Mapping | [Turn mapping Off/On](organize-backlog.md) | +| Parents | [Show/Hide parents](organize-backlog.md) | +| In progress items | [Show/Hide in progress items](../scrum/forecast.md) | +| ![Settings icon](../_img/icons/team-settings-gear-icon.png) | [Configure team settings](../scale/manage-team-assets.md#team-settings) | +| ![full screen icon](../_img/icons/fullscreen_icon.png) / ![exit full screen icon](../_img/icons/exitfullscreen_icon.png) | Enter or exit full screen mode | +| ![expand icon](../_img/icons/expand_icon.png) / ![collapse icon](../_img/icons/collapse_icon.png) | Expand or collapse one level of the tree hierarchy | +| ![mail icon](../_img/icons/mail_icon.png) | Email a copy of your backlog | +| ![Filter](../_img/icons/tag_filter_icon.png) | [Turn tag filtering On/Off ](../track/add-tags-to-work-items.md) | + +> [!IMPORTANT] +> If you set the **In progress** control to **Hide**, then items that are no longer in the New, Approved, or Proposed states won't appear in the backlog. + +Even if you have show parents turned on, the **Create query** and mail ![mail icon](../_img/icons/mail_icon.png) controls will only list items at the currently selected level. + \ No newline at end of file diff --git a/docs/work/backlogs/remove-delete-work-items.md b/docs/work/backlogs/remove-delete-work-items.md new file mode 100644 index 00000000000..6b550fc86fe --- /dev/null +++ b/docs/work/backlogs/remove-delete-work-items.md @@ -0,0 +1,314 @@ +--- +title: Move, change, or delete work items | VSTS & TFS +description: Guide to removing/deleting working items and test artifacts from Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.topic: get-started-article +ms.prod: vs-devops-alm +ms.assetid: 306929CA-DB58-45E3-AD45-B774901789D3 +ms.manager: douge +ms.author: kaelli +ms.date: 03/29/2017 +--- + +# Move, change, or delete work items + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +Often times you find that someone created a work item of the wrong work item type (WIT) or within an incorrect team project. You can correct these issues for individual work items or bulk modify several work items. You can also remove work items added to your backlog or task board that aren't relevant anymore. + +In this topic you'll learn: + +> [!div class="checklist"] +> * How to change the work item type of one or more work items (VSTS) +> * How to move one or more work items to another team project (VSTS) +> * How to remove work items from the backlog by changing the State to Removed +> * How to delete work items and test artifacts +> * How to restore or permanently delete work items (web portal) +> * How to permanently delete work items (command-line tool) +> * What permissions are required to delete work items and test artifacts + +>[!NOTE] +>**Feature availability:** The following features are available from VSTS (cloud service) or from the web portal of the listed on-premises TFS version or a later version. Those not annotated are available from all platforms and versions. Visit the [Visual Studio Downloads page](https://www.visualstudio.com/downloads/download-visual-studio-vs) to get the latest TFS update. Additional resources may be required as annotated. To determine your platform or TFS version, see [Provide product and content feedback](../../provide-feedback.md#platform-version) + +You only have access to those actions that are supported on your platform and for which you have permissions. If you are a member of the Contributors group (anyone who has been added as a team member) or Project Administrators groups, you have access to the following features. For a simplified view of permissions assigned to built-in groups, see [Permissions and access](../../security/permissions-access.md). + + +> [!div class="mx-tdBreakAll"] +> |Contributors|Project Administrators| +> |-------------|----------|---------| +> |- [Change work item type](#change-type) <sup>1, 2</sup> (VSTS)<br/>- [Remove work items (change State)](#remove) <sup>2, 3</sup><br/>- [Delete work items](#delete) <sup>1, 2</sup> (VSTS, TFS 2015.2)<br/>- [Restore work items](#restore) <sup>1, 2, 5</sup> (VSTS, TFS 2015.2)|- [Move a work item to another team project](#move) <sup>1, 2, 4</sup><br/>- [Permanently delete work items (web portal)](#restore) <sup>1, 2, 5</sup> (VSTS, TFS 2015.2)<br/>- [Permanently delete work items (command-line tool)](#perm-delete) <sup>5</sup><br/>- [Permanently delete test artifacts](#delete-test) <sup>6</sup> (TFS 2017.1)| + + +**Notes:** + +<ol> +<li>You can't change type, move work items, or delete/restore work items whose WITs support test management or that belong to the [Hidden Types Category](../concepts/agile-glossary.md#hidden-types). This includes all work items that track tests—such as test cases, shared steps, and shared parameters—code review requests and responses, and feedback requests and responses. +</li> +<li>From the web portal, you can[ multi-select several work items](bulk-modify-work-items.md) from a backlog or query results page and perform a bulk update using the associated feature. </li> +<li>Changing the State to Remove causes work items to be removed from a backlog or board view (product, portfolio, and sprint backlogs, Kanban board, and task boards).</li> +<li>To move work items to another team project, you must be a member of the Project Administrators group or be [granted explicit permissions to move work items](../how-to/set-permissions-access-work-tracking.md#move-delete-permissions).</li> +<li>To permanently delete work items from the web portal, you must be a member of the Project Administrators group or be [granted explicit permissions to delete or restore work items](../how-to/set-permissions-access-work-tracking.md#move-delete-permissions).</li> +<li>To delete test artifacts, the following restrictions and operations apply: +<ul> +<li>You must be a member of the Project Administrators group or have the [**Delete test artifacts** permission set to **Allow**](../how-to/set-permissions-access-work-tracking.md#delete-test-permissions). You must also have permissions set to [manage test plans and test suites](../how-to/set-permissions-access-work-tracking.md#delete-test-permissions), and your [access level set to Advanced](../../security/change-access-levels.md), which provides access to the full Test feature set.</li> +<li>Users with Basic access and with permissions to permanently delete work items and manage test artifacts can only delete orphaned test cases. That is, they can delete test cases created from the work hub that aren't linked to any test plans or test suites. </li> +<li>When you delete a test plan, test suite, test case, shared steps, or shared parameters, you not only permanently delete them, you also delete all associated test artifacts such as test results.</li> +<li>You can't bulk delete test artifacts. If test artifacts are part of a bulk selection to be deleted, all other work items except the test artifact(s) will get deleted.</li> +</ul> +</li> +</ol> + + + +>[!TIP] +>To change, move, delete, or restore several work items at the same time, see [Bulk modify work items](bulk-modify-work-items.md). + + +[!INCLUDE [temp](../_shared/image-differences.md)] + +<a id="change-type"> </a> +## Change the work item type + +>[!NOTE] +><b>Feature availability: </b> The **Change type…** menu option is supported only from VSTS. You can't change the work item type of work items associated with test management. Both Contributors and users assigned Stakeholder access can change the work item type. + +Changing the work item type refreshes the work item form with the fields defined for the type selected. For example, you can change a bug to a task and the form will refresh with the fields defined for a task. + +You can change a single work item or several [multi-selected work items](bulk-modify-work-items.md) to a new type. + + +>[!TIP] +When you connect to TFS, you can't change the work item type for an existing work item, but you can [copy the work item and specify a new type](../backlogs/copy-clone-work-items.md#copy-clone). Also, if you have several work items with type changes you want to make, you can [export them using Excel](../office/bulk-add-modify-work-items-excel.md), and then re-add them as a new type. + +1. Select the ![Change team project icon](../_img/icons/change-type-icon.png) Change type... option from the work item form's ![Action icon](../_img/icons/actions-icon.png) Actions menu. + + ![Work item form, Change work item type menu option](_img/change-work-item-type.png) + + Or, from the backlog or query results page, multi-select several work items whose type you want to change. You can select several work items of the same type or different type so long as you want to change them all to the same work item type. + + Click ![actions icon](../_img/icons/actions-icon.png) to open the context menu of one of the selected work items, and choose the ![Change team project icon](../_img/icons/change-type-icon.png) **Change type…** option. + + >[!IMPORTANT] + >From the Query results page, the **Change type…** option becomes unavailable if you have checked the Query Editor's **Query across projects** checkbox. + + <img src="_img/bulk-modify-change-type-ts.png" alt="VSTS, backlog, multi-select, open menu, choose Change type option" style="border: 2px solid #C3C3C3;" /> + +2. Select the type and optionally enter a comment. + + ![Change work item type dialog](_img/change-work-item-type-dialog.png) + + Comments are automatically added to the [Discussion control](../concepts/work-item-form-controls.md#discussion). + +3. Save the work item to complete the change. + + > [!NOTE] + > The system automatically resets the State and Reason fields to the default initial values of the specified type. + + ![Work item form, changed type to bug](_img/changed-type-to-bug.png) + +4. From the Query results page, you must save all work items that you bulk-modified. When you bulk modify items from the backlog, they are automatically saved. Work items shown in bold text indicate that local changes have not yet been saved to the data store. The system automatically saves each work item. Refresh the page to reflect your changes. + + +<a id="move"> </a> +## Move a work item to another team project + +>[!NOTE] +><b>Feature availability: </b> The **Move to team project…** menu option is supported only from VSTS. You can only move work items from one team project to another team project within the account or collection. You can't move work items associated with test management. + +When you discover that a work item belongs to a different team project within your account or collection, you can move it where it belongs. You can move a single work item or several [multi-selected work items](bulk-modify-work-items.md). + +1. Open the work item and choose the ![Move work item icon](../_img/icons/change-team-project-icon.png) Move... option from the work item form's ![Action icon](../_img/icons/actions-icon.png) Actions menu. + + ![Work item form, Change team project menu option](_img/move-work-item.png) + + If you don't see the option, then you haven't been granted [permissions to move work items out of the project](../how-to/set-permissions-access-work-tracking.md#move-delete-permissions). + + Or, from the backlog or query results page, multi-select several work items whose type you want to change. You can select several work items of the same type or different type so long as you want to change them all to the same work item type. + + Click ![actions icon](../_img/icons/actions-icon.png) to open the context menu of one of the selected work items, and choose the ![Move work item icon](../_img/icons/change-team-project-icon.png) Move… option. + +2. Select the destination team project and optionally enter a comment. + + ![Work item form, Change team project menu option](_img/move-work-item-dialog.png) + + Comments are automatically added to the [Discussion control](../concepts/work-item-form-controls.md#discussion) and an entry is made to the History control. Also, the system automatically resets the State and Reason fields to the default initial values for the work item type that you move. + + +<a id="remove"> </a> +## Remove work items by changing the State + +By changing the State of a work item to Removed, you effectively remove it from all backlogs and boards. + +![Change State to Removed](_img/add-work-item-vsts-remove-state.png) + +To cause removed items to not show up in queries, you must add a clause that indicates which states you want the query to filter for. + +<a id="delete"> </a> +## Delete work items + +>[!NOTE] +><b>Feature availability: </b> The Delete and Recycle bin features are available from VSTS and from the web portal for TFS 2015.2 or later versions. + +Deleted work items won't appear in your backlogs, boards, or queries. Deleted items are moved to a recycle bin from which you can recover them if needed. To delete a test case, test plan, or test suite, or other test-related WITS, see [Delete test artifacts](#delete-test). + +1. You can delete a work item from within the work item form, or by multi-selecting work items from a backlog or query results page. + + ![Delete work item from the form](_img/delete-work-item.png) + + To delete work items, you must be a member of the Project Administrators group or have the **Delete work items in this project** set to Allow. By default, this permission is Not Set for Contributors. + - For VSTS and TFS 2015.2 and later versions, the Contributors group has **Delete and restore work items** at the project-level set to "Allow" by default.  + - For TFS 2015.1 and earlier versions, the Contributors group has **Delete work items in this project** at the project-level set to "Not set" by default. This setting causes the Contributors group to inherit the value from the closest parent that has it explicitly set.    + +2. Confirm you want to actually delete the item(s). + + <img src="_img/remove-delete-wi-confirm-delete.png" alt="Confirm delete dialog" style="border: 2px solid #C3C3C3;" /> + +3. Using multi-select from a backlog or query results list, you can delete several work items at once. + + ![Delete multiple items from backlog](_img/remove-work-items-delete-multiple-from-backlog.png) + +4. You can also delete work items from your Kanban or task board. + + ![Delete work item from Kanban board](_img/remove-wi-from-kanban-board.png) + + Or, you can drag them to the ![Recycle bin](_img/recycle-bin-icon.png) (Recycle bin). You can only access the (Recycle bin) from the Work hub. + + +<a id="restore"> </a> +## Restore or permanently delete work items + +# [Browser](#tab/browser) +>[!NOTE] +><b>Feature availability: </b>The Delete and Recycle bin features are available from VSTS and from the web portal for TFS 2015.2 or later versions. + +1. To restore deleted items, open the Recycle bin from the web portal. + + <img src="_img/remove-delete-recycle.png" alt="Open Recycle bin" style="border: 2px solid #C3C3C3;" /> + +2. Select the items you want to restore and then choose restore or to permanently delete the items. + + <img src="_img/remove-delete-restore.png" alt="Restore selected items" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >You'll only see the Permanently delete option if your [Permanently delete work items permission](../how-to/set-permissions-access-work-tracking.md#move-delete-permissions) is set to Allow. + +3. Confirm your selection. + +# [Command Line](#tab/command-line) + +<a id="perm-delete"> </a> + +Use the ```witadmin destroywi``` command to permanently remove work items from the data store. A permanent delete means all information in the WIT data store is deleted and cannot be restored nor reactivated. + +You can run ```witadmin destroywi``` against an on-premises TFS server or VSTS account. + +1. Open a Command Prompt window where the latest version of Visual Studio is installed and enter: + + ```cd %programfiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE``` + + On a 32-bit edition of Windows, replace %programfiles(x86)% with %programfiles%. + + The witadmin command-line tool installs with any version of Visual Studio. You can access this tool by installing the free version of Visual Studio Community. + +3. To delete several work items from an account hosted on VSTS, enter the following specifying the account name and separating the IDs with commas. + + ```witadmin destroywi /collection:http://AccountName/DefaultCollection /id:12,15,23``` + +3. To delete several work items from an on-premises collection, enter the server name and directory path to the collection. For example: + + ```witadmin destroywi /collection:http://TFSServerName:8080/tfs/DefaultCollection /id:12,15,23``` + +2. To delete a single work item, simply enter the ID as shown: + + ```witadmin destroywi /collection:http://TFSServerName:8080/tfs/DefaultCollection /id:2003``` + + >[!NOTE] + >**Required permissions:** For VSTS and TFS 2015.2 or later versions, you must have [Permanently delete work items permission set to Allow](../how-to/set-permissions-access-work-tracking.md#move-delete-permissions). For TFS 2015.1 or earlier versions, you must be a member of the Project Administrators group of have Edit project-level information permissions set to Allow.    + +--- + +<a id="delete-test"> </a> +## Delete test artifacts + +>[!IMPORTANT] +><b>Feature availability: </b> The permanently delete feature of test artifacts is available from the from the Test and Work hubs for VSTS and the web portal of TFS 2017.1 and later versions. +> +>We only support permanent deletion of test artifacts such as test plans, test suites, test cases, shared steps and shared parameters. Deleted test artifacts won't appear in the recycle bin and cannot be restored. Deletion of test artifacts not only deletes the selected test artifact but also all its associated child items such as child test suites, test points across all configurations, testers (the underlying test case work item doesn't get deleted), test results history, and other associated history. + +1. To delete a test case, open it from the web portal and choose the Permanently delete option from the actions menu. (Bulk deletion is not supported from a query results page.) + + <img src="_img/delete-test-artifacts-form.png" alt="Delete a test case and associated test artifacts from the web form" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >You'll only see the Permanently delete option if you have the necessary permissions and access. You must be a member of the Project Administrators group or have the [**Delete test artifacts** permission set to **Allow**](../how-to/set-permissions-access-work-tracking.md#delete-test-permissions). You must also have your [access level set to Advanced](../../security/change-access-levels.md), which provides access to the full Test feature set. Users with Basic access and with permissions to permanently delete work items and manage test artifacts can only delete orphaned test cases. That is, they can delete test cases created from the work hub that aren't linked to any test plans or test suites. + +2. Confirm you want to actually delete the item. + + <img src="_img/delete-test-artifacts-form-dialog-confirm.png" alt="Confirm delete" style="border: 2px solid #C3C3C3;" /> + +3. You can also delete test plans and test suites directly from the Test hub. + + <img src="_img/delete-test-plans.png" alt="Delete test artifacts from Test hub" style="border: 2px solid #C3C3C3;" /> + +4. To delete shared steps and shared parameters you need to first manually remove all references to them before you can delete them. + + <img src="_img/delete-test-shared-steps-remove-link.png" alt="Delete shared steps from form" style="border: 2px solid #C3C3C3;" /> + +## Related notes + +To add fields or customize a work item form, see [Customize your work tracking experience](../customize/customize-work.md). The method you use depends on the process model that supports your team project. + +To learn more about managing test artifacts, see: +- [Create a test plan](../../manual-test/getting-started/create-a-test-plan.md) +- [Control how long to keep test results](../../manual-test/getting-started/how-long-to-keep-test-results.md) + + + +### Delete and restore actions performed under the hood + +#### Delete work items +When you delete a work item, the following actions occur: + +- Generates a new revision of the work item +- Updates the Changed By/Changed Date fields to support traceability +- Preserves the work item completely, including all field assignments, attachments, tags, and links +- Causes work item to become non-queryable and therefore can't appear in any work tracking experience, query result, or report +- Updates charts accordingly, CFD, velocity, burndown and lightweight charts are updated to remove deleted work items +- Removes WIT extensions +- Preserves trend data except for the latest value +- Removes the work item from the data warehouse/cube similar to as if it was permanently removed. + +#### Restore work items +When you restore a work item, the following actions occur: + +- Causes a new revision of the work item to be made +- Updates the Changed By/Changed Date fields to support traceability +- Becomes queryable +- All fields remain unchanged +- History contains 2 new revisions, one for deletion, and one for restore +- Reattaches WIT extensions +- Updates charts accordingly, CFD, velocity, burndown and lightweight charts are updated to include the restored work items +- Restores trend data +- Adds the work item back to the data warehouse/cube similar +- Sets the area or iteration path fields to the root node if the previous area path or iteration paths were deleted. + +#### Delete test artifacts +1. Removes the deleted test artifact from the test case management (TCM) data store and deletes the underlying work item +2. Runs a job to delete all the child items both from the TCM side and the underlying work items. This action may take time (up to a few minutes) depending on the number of artifacts to be deleted. +3. Causes all information in the WIT data store and TCM data store to be deleted and cannot be reactivated nor restored. + +<!---   + +Adding a comment in the dialog, auto inputs the text into the Discussion control (ready to Save) +TCM and hidden categories are not supported in move or change type +On move, the work item(s) are set to their initial state in the destination project +We try to keep all field values on move/change type. Those that aren't available on the destination project/type are kept, but hidden. Therefore, if you move/change back…the field values will be retained. +You must have read/write permissions and the move permission to move to a destination project +There is no change type permission +If you are using the project-scoped Work item revisions API, the work item history will only return revisions from the specified project. +http://vssplatform/integrate/api/wit/reporting-work-item-revisions?branch=origin/features/witMove + + + +-->  + diff --git a/docs/work/backlogs/stack-rank-backlog-position.md b/docs/work/backlogs/stack-rank-backlog-position.md new file mode 100644 index 00000000000..6903baaec5d --- /dev/null +++ b/docs/work/backlogs/stack-rank-backlog-position.md @@ -0,0 +1,26 @@ +--- +title: Stack rank or backlog priority | VSTS & TFS +description: Understand how the stack rank or backlog priority fields determines the backlog position - Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 04df6b31-ef6c-4285-81a6-96768f03ecf4 +ms.manager: douge +ms.author: kaelli +ms.date: 08/28/2017 +--- + + + +<a id="change-position"> </a> +## Backlog priority or stack rank order + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +The sequence of items on the backlog page is determined according to where you have [added the items or moved the items on the page](create-your-backlog.md#move-items-priority-order). As you drag and drop items within the backlog list, a background process updates this field. + +You should refrain from using the bulk modify function to change the backlog priority of work items. While you can assign a value to the [Backlog Priority (Scrum)](../track/planning-ranking-priorities.md) or [Stack Rank (Agile and CMMI)](../track/planning-ranking-priorities.md) fields, you'll be assigning the same value to all items you've selected for bulk edit. These fields are used by the system to track the relative ranking of items on the product, feature, or epic backlogs. + +The preferred method for bulk edit is to use multi-select to move items to the top, bottom, or specific position within the page. If you must perform a bulk edit of one of the backlog order fields to get a large number of work items in the priority order you want, use [Excel](../office/bulk-add-modify-work-items-excel.md). You can export a query containing the backlog items, update either the Backlog Priority or Stack Rank fields, and then publish your changes. + +By default, the Backlog Priority and Stack Rank fields don't appear on the work item form. + diff --git a/docs/work/backlogs/toc.yml b/docs/work/backlogs/toc.yml new file mode 100644 index 00000000000..078e4745cf1 --- /dev/null +++ b/docs/work/backlogs/toc.yml @@ -0,0 +1,84 @@ +- name: Backlogs + href: index.md +- name: Overview + items: + - name: "Backlogs, boards, & plans" + href: /vsts/work/backlogs-boards-plans?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json + - name: About teams and Agile tools + href: /vsts/work/about-teams-and-settings?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json +- name: Quickstarts + items: + - name: Create your backlog + href: create-your-backlog.md +- name: Tutorials + items: + - name: "Define features & epics" + href: define-features-epics.md + - name: Organize your backlog (map or reparent) + href: organize-backlog.md + - name: Link work items + href: /vsts/work/backlogs/add-link?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json +- name: Concepts + items: + - name: Groom your backlog + href: best-practices-product-backlog.md + - name: "Backlog items & multi-team ownership" + href: work-multi-team-ownership-backlogs.md + - name: Backlog priority or stack rank order + href: stack-rank-backlog-position.md +- name: How-to Guides + items: + - name: Filter product and portfolio backlogs + href: filter-backlogs.md + - name: Copy list + href: copy-list.md + - name: Change column options + href: /vsts/work/how-to/set-column-options?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json + - name: Bulk add or modify (Excel) + href: /vsts/work/office/bulk-add-modify-work-items-excel?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json + - name: "Create backlog items & tasks (Project)" + href: /vsts/work/office/create-your-backlog-tasks-using-project?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json + - name: Storyboard your ideas + href: /vsts/work/office/storyboard-your-ideas-using-powerpoint?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json + - name: "Manage permissions & access" + href: /vsts/work/how-to/set-permissions-access-work-tracking?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json +- name: Troubleshooting + items: + - name: Fix "Ordering backlog items is disabled" + href: /vsts/work/troubleshoot/resolve-backlog-reorder-issues?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json + - name: Schedule projects using Project + href: /vsts/work/office/schedule-projects-using-microsoft-project.md + - name: "Rollup estimated & actual work using Project" + href: /vsts/work/office/rollup-estimated-and-actual-work-using-project?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json + - name: Resolve Excel data conflicts + href: /vsts/work/office/resolve-excel-data-conflicts-publish-refresh?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json + - name: Resolve Excel data validation errors + href: /vsts/work/office/resolve-excel-data-validation-errors?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json + - name: Resolve invalid links in an Excel tree list + href: /vsts/work/office/resolve-excel-invalid-links-tree-list?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json +- name: Reference + items: + - name: Product backlog controls + href: product-backlog-controls.md + - name: "Permissions & access for work tracking" + href: /vsts/work/permissions-access-work-tracking?toc=/vsts/work/backlogs/toc.json&bc=/vsts/work/backlogs/breadcrumb/toc.json +- name: Resources + items: + - name: Kanban + href: ../kanban/index.md + - name: Scrum + href: ../scrum/index.md + - name: Work item queries + href: ../track/index.md + - name: Customization + href: ../customize/index.md + - name: What is Agile? + href: https://www.visualstudio.com/learn/what-is-agile/ + - name: What is Agile development? + href: https://www.visualstudio.com/learn/what-is-agile-development/ + - name: Agile culture + href: https://www.visualstudio.com/learn/agile-culture/ + - name: Creating productive teams + href: https://www.visualstudio.com/learn/productive-teams/ + + diff --git a/docs/work/backlogs/work-item-template.md b/docs/work/backlogs/work-item-template.md new file mode 100644 index 00000000000..28e758d3dfe --- /dev/null +++ b/docs/work/backlogs/work-item-template.md @@ -0,0 +1,414 @@ +--- +title: Work item templates | VSTS & TFS +description: Increase productivity, add, manage, administrate work item templates to pre-populate fields in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 9b575c05-16f3-4027-aa5a-67b017a0089d +ms.manager: douge +ms.author: kaelli +ms.date: 08/24/2017 +--- + +# Use templates to add and update work items + +<!--- Supports FWLINK http://go.microsoft.com/fwlink/?LinkId=824070 --> + +<b>VSTS | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013 | Visual Studio 2015 | Visual Studio 2013 </b> + +With work item templates you can quickly create work items which have pre-populated values for your team's commonly used fields. For example, you can create a task template that will set the area path, iteration path, and discipline or activity whenever you use it to create a task. + +>[!NOTE] +>Work item templates are distinct from process templates. For information on process templates, see [Choose a process template](../guidance/choose-process.md) or these specific topics for the default process templates: [Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md). + +Based on the platform or version you use, you can perform the following tasks. + +<table width="85%"> +<tr> +<th width="30%">Task </th> +<th width="15%" align="center" valign="bottom">VSTS</th> +<th width="15%" align="center" valign="bottom">TFS 2013, TFS 2015<br/>(web portal)</th> +<th width="15%" align="center" valign="bottom">TFS 2017<br/>(web portal)</th> +<th width="20%" align="center" valign="bottom">VS 2013, VS 2015 <br/>(with power tools <sup>1</sup>) </th> +</tr> + +<tbody align="center" valign="top" style="font-size: 95%"> + +<tr> +<td align="left">[Capture a work item as a template](#capture)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + + +<tr> +<td align="left">[Add a work item using a template](#add-wi)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">[Apply templates to work items](#apply)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">[Manage work item templates](#manage)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> +</tbody> +</table> + + +1. If you want to manage work item templates in Visual Studio 2013 or Visual Studio 2015, you can by downloading [TFS Power Tools](https://visualstudiogallery.msdn.microsoft.com/898a828a-af00-42c6-bbb2-530dc7b8f2e1) for free. With the Work Item Templates power tool add-in, you can: + - Create and edit work item templates + - Create and update work items using a template + - Create a template from an existing work item + - Bulk-edit work items by applying a template + - Use templates created in Visual Studio to create work items through the Visual Studio client. + +>[!NOTE] +><b>Feature availability: </b>Visual Studio 2015 is the last version in which you can install TFS power tools. You can use the Work Item Templates tool whenever you connect to VSTS or an on-premises TFS that is at TFS 2015 version or earlier. Templates you define through the power tool are separate from those defined through VSTS or the web portal for TFS.   + + + +<a id="capture"> </a> +## Capture a work item as a template + +The steps to capture a work item differ based on the platform, version, and client you use. + +# [Browser](#tab/browser) + +<a id="team-services-capture" /> +### VSTS, TFS 2017 + +1. Open a work item with the fields defined that you want to capture, and click the ![Actions icon](../_img/icons/actions-icon.png) actions icon to open the menu. Choose Templates and then Capture. + + <img src="_img/wi-templates-capture-bug-vsts.png" alt="Capture work item field definitions as a template" style="border: 1px solid #CCCCCC;" /> + +2. Name the template and optionally add and remove fields. Save the template when finished. + + <img src="_img/wi-templates-capture-template-dialog.png" alt="Capture template dialog" style="border: 1px solid #CCCCCC;" /> + +3. Once you've saved the template, click Copy link to capture the URL for the template that you can use to add work items using the template. + + The URL identifies the team and template ID, for example: + + ``` + http://fabrikamfiber:8080/tfs/DefaultCollection/Fabrikam%20Fiber/Web/_workItems?_a=new&witd=Bug&templateId=15ffa521-7a1d-486e-9f71-a58c0b338d87 + ``` + +4. Use the URL whenever you want to add a work item of the type you've defined with its predefined values. + + You can save the URL as a text file or add the URL to a [dashboard](#markdown-widget) or web page as a hyperlink. + + +<a id="tfs-portal-capture" /> +### TFS 2015, TFS 2013 + + +If you connect to an on-premises TFS and primarily create work items working in the web portal, you can create a hyperlink that captures the default values you specify for a template. Click the hyperlink, and it opens the template in the web portal. + +1. From the web portal Queries page, open a new work item. + + ![Open a new work item from the web portal Work page ](_img/wit-template-task.png) + +2. Fill in the default values you want the template to specify. You can leave required fields empty, or place some text in them + + Here, we fill in several values, including tags, but leave the Title blank. When your done, copy the URL for the template. + + ![Define fields and choose Copy the URL](_img/wit-template-task-form-tfs-copy-url.png) + +3. The URL defines each predefined field, for example (line breaks added for clarity): + + ``` + http://fabrikamprime:8080/tfs/DefaultCollection/Fabrikam%20Fiber/_workItems/create/Task?%5B + System.AssignedTo%5D=Jamal+Hartnett&%5B + System.Description%5D=%3Cp%3EAlways+include+Remaining+Work+and+links+to+any+related+bugs+or+user+stories.%3C%2Fp%3E&%5B + System.Tags%5D=Web%3B+Phone%3B+Service&%5B + Microsoft.VSTS.Common.Activity%5D=Development&%5B + System.IterationPath%5D=Fabrikam+Fiber%5CIteration+1 + ``` + + > [!TIP] + > The URL won't contain defaults defined for the work item type. To specify a default field value, see [Add or modify a field](../customize/add-modify-field.md). Also, there's a 2000 character limit recognized by browsers. There's no work around to that limit. + +4. Use the URL whenever you want to add a work item of the type you've defined with its predefined values. + + You can save the URL as a text file or add the URL to a [dashboard](#markdown-widget) or web page as a hyperlink. + + +# [Visual Studio](#tab/visual-studio) + +<a id="team-explorer-capture" /> +If you primarily work in Visual Studio or Team Explorer, and want to create work items from templates that you can access from the Work Items page, you can create work item template files (extension .wt). + +You create these files using Work Item Templates, a power tool for Visual Studio, which you can download from [Microsoft Visual Studio Team Foundation Server 2015 Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power). + +1. Open or run a query that lists the work item whose fields you want to capture. + +2. Right-click the work item of the type and whose fields you want to capture, and select Capture Template from the context menu. + + <img src="_img/wi-templates-te-capture-wi-as-template.png" alt="Capture work item field definitions as a template from Visual Studio with Power Tools installed" style="border: 1px solid #CCCCCC;" /> + +3. In the dialog, use the checkboxes to select all the fields you want to save in the template, and add a name and (optionally) description to the template. + + <img src="_img/wi-templates-capture-template-dialog-te.png" alt="Capture template dialog from Visual Studio with Power Tools installed" style="border: 1px solid #CCCCCC;" /> + +4. Save the template and it will appear in the root of the Team Explorer pane under the Templates section. + +--- + +<a id="add-wi"> </a> +## Add a work item using a template + +The main method for adding a work item using a template is to open the template link within a browser window. You can then share these links through email, a network share, team portal, or a team dashboard or Welcome page. + +### Copy the link to a template + +# [Browser](#tab/browser) + +<a id="team-services-copy-link" /> + +#### VSTS, TFS 2017 + +1. Click the ![Actions icon](../_img/icons/actions-icon.png) actions icon and choose Copy link. + + <img src="_img/wi-templates-copy-url-vsts.png" alt="Copy link of a template" style="border: 1px solid #CCCCCC;" /> + +2. Copy the link to a shared network or send to your team via email. Also, consider [adding a link the team dashboard](#markdown-widget). + + The link is a URL to the web portal, for example:</p> + + ``` + http://fabrikamfiber:8080/tfs/DefaultCollection/Fabrikam%20Fiber/Web/_workItems?_a=new&witd=Bug&templateId=15ffa521-7a1d-486e-9f71-a58c0b338d87 + ``` + +3. Use the URL whenever you want to add a work item of the type you've defined with its predefined values. + + You can save the URL as a text file or add the URL to a web page as a hyperlink. + +<a id="tfs-portal-copy-link" /> +#### TFS 2015, TFS 2013 + +See [Capture a work item as a template for TFS web portal](#capture). + + +# [Visual Studio](#tab/visual-studio) +<a id="team-explorer-copy-link" /> + + +1. You can copy the link to a template which will open in the web portal, by opening the context menu for the template. + + <img src="_img/wi-templates-copy-URL-te.png" alt="Copy link to template from Visual Studio with Power Tools installed" style="border: 1px solid #CCCCCC;" /> + +2. Paste the copied link into a web browser to check that it works as expected. + +--- + +<a id="markdown-widget"> </a> +### Add a template link to the dashboard + +You can add links to a markdown widget that appear on your team dashboard in the web portal. These links open a work item with the template defined fields predefined. + +>[!NOTE] +>**Feature availability:**  Multiple team dashboards and the Markdown widget are available for VSTS and TFS 2015.2 and later versions. + +For example, the following widget contains links to three templates. + +<img src="_img/wi-templates-markdown-widget-with-template-links.png" alt="Markdown widget with links to templates" style="border: 1px solid #CCCCCC;" /> + +To learn more about the markdown widget see [Add Markdown to a dashboard, Markdown widgets](../../report/add-markdown-to-dashboard.md). + + +<a id="apply"> </a> +## Apply a template to existing work item(s) + +You can apply a template to a single work item or perform a bulk update of several work items. + + +<a id="team-services-apply" /> +# [Browser](#tab/browser) + +### Apply a template within a work item form (VSTS, TFS 2017) + +1. Open the work item that you want to update using the fields defined within a template, and click the ![sctions icon](../_img/icons/actions-icon.png) actions icon to access your menu. Click Templates and then click the name of a pre-defined template. + + <img src="_img/wi-templates-apply-user-story-template-vsts.png" alt="Apply a template to an existing work item within the form" style="border: 1px solid #CCCCCC;" /> + + > [!TIP] + > Refresh your browser to discover the latest templates that have been added. If you don't see any templates, it may be that there are none defined for the work item type. Click **Manage…** to open the team settings Templates admin page for your team to review or add templates. + +2. Save the work item for the changes to be applied. The fields changed are noted in the History field. </p> + +### Apply a template to several work items (bulk update) + +1. To bulk update several work items, first select them from the backlog or a query results list, and then open the actions menu for one of them. All work items you select must be of the same work item type. For example, all user stories or all bugs. + +2. Choose the template to apply. + + <img src="_img/wi-templates-bulk-update-list-vsts.png" alt="Bulk update several work items" style="border: 1px solid #CCCCCC;" /> + +3. Field changes are automatically applied and work items saved. To learn more about bulk updates, see [Bulk modify work items](../backlogs/bulk-modify-work-items.md). + + +# [Visual Studio](#tab/visual-studio) + +<a id="team-explorer-apply" /> + +### Apply a template to one or more work items + +1. Open or run a query that lists the work item(s) whose fields you want to capture. +2. Right-click the work items—which must be of the same type— and click Apply Template from the context menu. + + <img src="_img/wi-templates-apply-template-options-te.png" alt="Apply template to selected work item from Visual Studio with Power Tools installed" style="border: 1px solid #CCCCCC;" /> + +3. Select the template to use and click OK. + + <img src="_img/wi-templates-apply-template-dialog-te.png" alt="Apply template dialog from Visual Studio with Power Tools installed" style="border: 1px solid #CCCCCC;" /> + +4. Save the work item. + + <img src="_img/wi-templates-apply-save-work-items-te.png" alt="Save changes from Visual Studio with Power Tools installed" style="border: 1px solid #CCCCCC;" /> + +--- + +<a id="manage"> </a> +## Manage work item templates + +# [Browser](#tab/browser) + +For VSTS and TFS 2017 and later versions, you can view the list of templates defined for each work item type, and also add, edit, copy, delete, and copy the link of a template. All templates are defined and managed for a team. + +[!INCLUDE [temp](../_shared/learn-about-new-nav-experience.md)] + + +<a id="team-services-manage" /> + +You manage templates from the team admin context. All templates are defined for a team. + +### Open the admin context for your team + + +1. From a web browser, open the web portal administrative context for your team. Here we open the admin page for the Web team. + + <img src="_img/wit-templates-open-team-admin-context.png" alt="Open team admin context" style="border: 1px solid #CCCCCC;" /> + + If you're not a team administrator, [get added as one](../scale/add-team-administrator.md). Only team or project administrators can change team templates. + +2. Click Templates under the Work hub. + + <img src="_img/wit-templates-work-templates-page.png" alt="Open Work - Templates page for team" style="border: 1px solid #CCCCCC;" /> + + From here, you can click on any work item type to view or add templates for that type. + +### Manage templates for a work item type + +Click the work item type to view the templates defined for each type. + +For example, click User Story to view templates defined to capture user stories. + +<img src="_img/wi-templates-user-stories-list.png" alt="Manage user story templates" style="border: 1px solid #CCCCCC;" /> + +### Define a template from scratch + +1. From the work item type page, click ![green plus icon](../_img/icons/green_plus_icon.png) New template to create a template from scratch. + + <img src="_img/wi-templates-new-template.png" alt="Add a user story template" style="border: 1px solid #CCCCCC;" /> + +2. Name the template and optionally add and remove fields. Save the template when finished. + + Once you've saved the template, click Copy link to capture the URL for the template that you can use to add work items using the template. + +### Edit, delete, or copy link to a template + +From the work item type page, click ![actions icon](../_img/icons/actions-icon.png) the actions icon for an existing template to access the menu options to Edit, Delete, or Copy link. + +<img src="_img/wi-templates-template-action-menu.png" alt="Open template action menu" style="border: 1px solid #CCCCCC;" /> + +### Copy or duplicate a template + + +1. To duplicate an existing template, click ![actions icon](../_img/icons/actions-icon.png) the actions icon for an existing template and click Create copy. + + <img src="_img/wi-templates-copy-template.png" alt="Copy an existing template" style="border: 1px solid #CCCCCC;" /> + +2. Name the template and optionally add and remove fields. Save the template when finished. + + +# [Visual Studio](#tab/visual-studio) +<a id="team-explorer-manage" /> + +If Visual Studio with power tools installed, you can view the list of templates defined for each work item type, and also add, edit, copy, delete, and copy the link of a template. + +You manage templates from the Team Explorer pane. + +![Templates, Team Explorer with power tools installed](_img/wi-templates-section-te.png) + +The root Templates node represents the parent of all of your templates. You may create a directory structure underneath it by adding folders – right-click on the **Templates** node or a folder and select **New Folder** from the context menu. + +You can cut, copy, paste, rename, and delete templates and folders using the context menu. You may also drag and drop templates into folders. To edit multiple templates, use shift-click to select a range or ctrl-click to add individual templates to your selection, then right-click. + +### Define a template from scratch + +1. From the Templates section, right-click Templates and choosee to create a template from scratch. + + <img src="_img/wi-templates-new-template-te.png" alt="Add a new template, Visual Studio " style="border: 1px solid #CCCCCC;" /> + +2. Save the template, provide a Name in the dialog provided. + + <img src="_img/wi-templates-new-template-save-as-te.png" alt="Add a new template, Visual Studio " style="border: 1px solid #CCCCCC;" /> + + Once you've saved the template, click Copy link to capture the URL for the template that you can use to add work items using the template. + +### Edit, use, copy, or delete a template +To edit, delete, or perform another action on a template, open its context menu (right-click) and choose the option you want. + +<img src="_img/wi-templates-context-menu-te.png" alt="Open template action menu" style="border: 1px solid #CCCCCC;" /> + +To make frequently-used templates more accessible, you can set a default template for each work item type. To do so, right-click on a template in Team Explorer and click **Set As Default**. A checkmark will appear on the icon to indicate that it is now the default. + + +### Set your template directory +To change the directory where templates are stored, click the Configure link, or navigate to it via **Tools>Options>Microsoft Team Foundation Server>Work Item Templates**. Use this dialog to set your template store path. Place your templates in a network location to share them with your team. + +--- + + + +## Add or remove tags from templates + +>[!NOTE] +>**Feature availability**: The ability to add and remove tags from a template is supported from VSTS and TFS 2017 and later versions. + +You can add tags to a template and they'll be applied to the work item when you use the template. + +<img src="_img/wi-templates-add-remove-tags.png" alt="Edit bug template, add or remove tags" style="border: 1px solid #CCCCCC;" /> + +If you don't specify tags to remove, then all tags present in a work item will remain defined even when you apply a work item template to an existing work item. + + +## Related notes + +Using work item templates can help your team be more productive by predefining fields in advanced. Remember that within the browser context, work item templates are associated with a team. Only those templates defined for a team are accessible when working in a team context, either through a work item form or bulk update context menu. + +### Templates and links to other work items + +You can't create templates that contain default links to work items. + +However, you can quickly copy tasks, test cases, bugs, and other items using [Excel](../office/bulk-add-modify-work-items-excel.md) to apply parent-child links in a tree list. To learn more, see: +- [Add task checklists](../kanban/add-task-checklists.md) +- [Add, run, and update inline tests](../kanban/add-run-update-tests.md) +- [Add features and epics](../kanban/kanban-epics-features-stories.md) + +Another option is to use [Excel](../office/bulk-add-modify-work-items-excel.md) to apply parent-child links in a tree list. + diff --git a/docs/work/backlogs/work-multi-team-ownership-backlogs.md b/docs/work/backlogs/work-multi-team-ownership-backlogs.md new file mode 100644 index 00000000000..a8199d04aa9 --- /dev/null +++ b/docs/work/backlogs/work-multi-team-ownership-backlogs.md @@ -0,0 +1,51 @@ +--- +title: Organize your backlog | VSTS & TFS +description: Organize your backlog by mapping backlog items to features, and features to epics in VSTS or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: DD78C7B9-A6B5-4596-9ADB-281578E615E2 +ms.manager: douge +ms.author: kaelli +ms.date: 05/10/2017 +--- + +# Work with multi-team ownership of backlog items + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +<a id="multi-team"> </a> + +When you have several teams, your hierarchical views may show items that belong to other teams. + +Your team's product backlog lists only those items whose area path matches those your team has subscribed to. For details, see [Set team defaults](../scale/set-team-defaults.md). However, if you show parents, +you'll see the parent epic of the features and backlog items, even if the epic or feature is owned by another team. +Items that are owned by other teams appear with hollow-filled bars. + +<img src="_img/ALM_OB_CustServTeamBacklog.png" alt="Team backlog is filtered based on area path ownership" style="border: 2px solid #C3C3C3;" /> + +Here's another example that shows the Epics backlog for the Fabrikam Fiber team. +Drilling down, you can see all the backlog items and features, even though they +belong to one of three different teams - Customer Service, Phone, and Web. + +<img src="_img/ALM_OB_MutliTeamOwnershipEpics.png" alt="Drill-down of Epics showing features and backlog items owned by other teams" style="border: 2px solid #C3C3C3;" /> + +From these views, you can reparent items, both those that you own and those owned by other teams. +However, you can't reorder items that another team owns. + +This enables management teams to focus on high level features and epics, and development teams +to focus on just those backlog items they're responsible to deliver. + +To make this work for you, you'll need to [add teams and set their area paths](../scale/multiple-teams.md). +For example, you can create a team structure similar to this one with two management and three development teams. + +![Conceptual image of backlogs and multi-team ownership](_img/ALM_OB_MultiTeam_C.png) + +To learn more about hierarchical team and backlog structures, see [Portfolio management](../scale/portfolio-management.md). + + +##Related notes + +- [Define features and epics](define-features-epics.md) +- [Organize your backlog](organize-backlog.md) +- [Backlogs, boards, and plans](../backlogs-boards-plans.md) +- [Select backlog navigation levels for your team](../customize/select-backlog-navigation-levels.md) \ No newline at end of file diff --git a/docs/work/center.json b/docs/work/center.json new file mode 100644 index 00000000000..11f00f9e5b3 --- /dev/null +++ b/docs/work/center.json @@ -0,0 +1,5 @@ +{ + "Template": "API", + "TocFilePath": "/Library/vs/alm/Work/toc.csv", + "TocTitlesFilePath": "/Library/vs/alm/Work/containerNodeTitles.csv" +} \ No newline at end of file diff --git a/docs/work/concepts/agile-glossary.md b/docs/work/concepts/agile-glossary.md new file mode 100644 index 00000000000..0c76926fecd --- /dev/null +++ b/docs/work/concepts/agile-glossary.md @@ -0,0 +1,137 @@ +--- +title: Agile tools and terms defined for VSTS & TFS +description: Key definitions for objects and items used to track work - Visual Studio Team Services (VSTS) and Team Foundation +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 09/06/2017 +--- + +# Agile glossary + +The Microsoft Agile glossary is a short dictionary of terms used in tracking work using Agile tools on the Visual Studio Team Services (VSTS) and Team Foundation Server platforms. See also: +- [Work item field index](../guidance/work-item-field.md) + +<!--- +<a id="object-definitions"></a> +## Definitions of key work tracking objects + +Your work tracking experience is managed and customized primarily through the objects defined in the following table. +--> + +## Agile methods +A family of engineering best processes with a goal of enabling rapid delivery of high-quality software and a business approach that aligns development with customer needs and company goals. In this paradigm, frequent inspection and adaptation is necessary, with teamwork, self-organization, and accountability all critical to project success. + + +## Agile tools +A suite of web-based tools used to track work and support Agile methodologies. Agile tools support the core Agile methods—Scrum and Kanban—used by software development teams today. Learn more: [About Agile tools and Agile project management](../overview.md). + +## Area path +A node on the Common Structure Services hierarchy that represents a feature area. Area paths allow you to group work items by team, product, or feature area. Whereas, iteration paths allow you to group work into sprints, milestones, or other event-specific or time-related period. The area path allows you to define a hierarchy of paths. Learn more: [About area and iteration paths](../customize/about-areas-iterations.md). + +## Bug +A type of work item that records a potential source of dissatisfaction with the product. The common name of a work item type for tracking code defects. + +## Category +Defines groups that associate a type of work item with a category. Categories support the process configuration used by the web portal backlog and task board pages. For example, you can add custom work item types to the Requirements category and manage them using the product backlog and Kanban boards. To learn more, see [Use categories to group work item types](../reference/use-categories-to-group-work-item-types.md). + +## Delivery plan + +A configurable view that displays work from multiple teams and projects laid out within a calendar based on each team's iterations. Each row in the view represents the work from a team's product or portfolio backlog, with each card corresponding to a work item—user story, feature, or epic. Learn more: [Review team delivery plans](../scale/review-team-plans.md). + +## Field +Supports tracking a piece of information about the work to perform. Values you assign to a field are stored in the work tracking data store which you can query and generate charts to view status and trends. Your team project contains 100 or more data fields. You update data by [modifying the data field within a work item](../backlogs/add-work-items.md). Each work item is associated with a work item type (WIT), and the data you can track corresponds to the fields assigned to the WIT. For a definition of each predefined field, see [Work item field index](../guidance/work-item-field.md). + +## Global list +Defines a list of menu items or pick list items that are shared across WITs and team projects within a team project collection. Global lists help to minimize the work that is required to update lists. You can define global lists within WITs that you upload with your process template. Learn more: [Manage global lists for work item types](../reference/witadmin/manage-global-lists-for-work-item-types.md). (Only supported for Hosted XML and On-premises XML process models) + +## Global workflow +Specifies both work item fields and global lists that multiple team projects and types of work items can share. Learn more: [Manage global workflow](../reference/witadmin/witadmin-import-export-global-workflow.md) (Only supported for On-premises XML process model). + + + +<a id="hidden-types"> </a> +## Hidden types category +You can use [TFS Team Project Manager](https://github.com/jelledruyts/TfsTeamProjectManager), an open-source client available from github to quickly determine which WITs belong to the Hidden Types Category. Learn more: [Hidden Types Category](../reference/use-categories-to-group-work-item-types.md#hiddentypes). + + +## Iteration path +A node on the Common Structure Services hierarchy that represents a time period. Iteration paths allow you to group work into sprints, milestones, or other event-specific or time-related period. The iteration path allows you to define a hierarchy of paths. Learn more: [About area and iteration paths](../customize/about-areas-iterations.md). + +## Kanban board +An interactive, electronic sign board that supports visualization of the flow of work from concept to completion and lean methods. Learn more: [Kanban basics](../kanban/kanban-basics.md). + + +## Link type +Specifies an object used to form link relationships between different WITs. Learn more: [Link work items to support traceability and manage dependencies](../track/link-work-items-support-traceability.md) and [LinkTypes elements reference](../reference/link-type-element-reference.md). + +## Pick list + +Specifies an enumerated set of values that appear within a drop-down menu in a work item form and the **Value** column within the query editor. The method you use to customize a pick list varies depending on the field and the process model. + + +## Portfolio backlog +An interactive list of work items, similar to the product backlog, that supports organizing or grouping work under features, epics, or scenarios. Portfolio backlogs work similarly to product backlogs in that you can prioritize work and view the tree hierarchy of work. Learn more: [Define features and epics](../backlogs/define-features-epics.md). + +## Process + +Defines the building blocks of the work tracking system. To customize a process, you first create an inherited process from one of the default system processes—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md). Changes you make to a process are seen by all team projects that use it. (Only supported for Inheritance process model) + +## Process configuration +Specifies the default configuration and functional capabilities that your teams can access using the Agile tools. These web portal tools include the product backlog, sprint backlogs, Kanban board, and task board. (Only supported for Hosted XML and On-premises XML process models) + +## Process model +The work tracking customization method supported by your account or collection. One of three process models are supported, Inheritance and Hosted XML for VSTS and On-premises XML for on-premises TFS. Learn more: [Customize your work tracking experience](../customize/customize-work.md) + +## Process template +Specifies an inter-related set of files that contain the XML definitions for tracking work and defining the initial configuration of other functional areas. The system provides three default process templates—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md). You can create a team project and then customize it, or customize a process template that you then use to create a team project. (Only supported for Hosted XML and On-premises XML process models) + +## Product backlog +An interactive list of work items that corresponds to a team's project plan or roadmap for what the team plans to deliver. The product backlog supports prioritizing work, forecasting work by sprints, and quickly linking work to portfolio backlog items. You can define your backlog items and then manage their status using the Kanban board. + +Each product backlog can be customized by a team. Learn more: [Create your backlog](../backlogs/create-your-backlog.md). + +## Product backlog item +A type of work item that defines the applications, requirements, and elements that teams plan to create. Product owners typically define and stack rank product backlog items which are defined defined with the Scrum process. Learn more: [Scrum process work item types and workflow](../guidance/scrum-process-workflow.md). + + + +## Query + +A named set of criteria that supports finding and listing a list of work items. Learn more: [Define a work item query](../track/using-queries.md). + +## Sprint backlog +An interactive list of work items that have been assigned to the same sprint or iteration path for a team. The sprint backlog supports teams that use Scrum methodologies. Learn more: [Sprint planning](../scrum/sprint-planning.md). + +## Task board +An interactive board of work items that support reviewing and updating tasks defined for the sprint backlog. The task board supports teams that use Scrum methodologies. Learn more: [Task board](../scrum/task-board.md). + + +## Team +With teams, enterprises can sub-categorize work to better focus on all the work they're tracking within a team project. Each team gets access to a suite of Agile tools and team assets. These tools provide teams the ability to work autonomously and collaborate with other teams across the enterprise. Each team can configure and customize each tool to meet their work requirements. Learn more: [About teams and Agile tools](../about-teams-and-settings.md?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json). + +## Team project + +A repository for source code and a place for a group of developers and teams to plan, track progress, and collaborate on building software solutions. A team project resides within a VSTS account or TFS team project collection. It provides support for focusing on those objects defined within the team project. Learn more: [Create a team project](../../accounts/create-team-project.md). + +## User story +A type of work item that defines the applications, requirements, and elements that teams plan to create. Product owners typically define and stack rank user stories. User story is defined with the Agile process. Learn more: [Agile process work item types and workflow](../guidance/agile-process-workflow.md). + +## Work item type (WIT) + +Specifies the fields, workflow, and form used to track an item of work. Each WIT is associated with 30+ system fields and several more type-specific fields. You use work items to plan and track the work required to develop your project. For an overview of predefined WITs provided with the default processes, see [Choose a process](../guidance/choose-process.md). + +## Workflow + +Workflow is an integral aspect of a work item and is defined by it's corresponding work item type. The workflow determines the logical progression and regression of work items, tracking the status of work as it progresses from a New or Active state to Closed or Completed state. It also specifies the values that appear in the drop-down menus for the State and Reason fields. Learn more: [Workflow states and state categories](../concepts/workflow-and-state-categories.md). + + +<!--- SEE ALSO https://msdn.microsoft.com/en-us/library/ms243130(v=vs.100).aspx --> + + +<!--- +To add fields or customize a work item form, see [Customize your work tracking experience](../customize/customize-work.md). The method you use depends on the process model that supports your team project. + +--> \ No newline at end of file diff --git a/docs/work/concepts/work-item-form-controls.md b/docs/work/concepts/work-item-form-controls.md new file mode 100644 index 00000000000..d6f0255bfc8 --- /dev/null +++ b/docs/work/concepts/work-item-form-controls.md @@ -0,0 +1,197 @@ +--- +title: Use work item form controls to track your work +description: Use the controls provided in the work item form to update status, link work items, and more in Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: A9AB9B95-61B4-41E7-AE7A-B96CD4AF9B33 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# Use work item form controls + +<b>VSTS | TFS 2018 | TFS 2017</b> + +Different types of work items track different data. Each work item form contains some standard fields—such as title, assigned to, and area and iteration path—as well as fields specific to the type. You can link work items to one another, as well as to changesets and source code files. + +As the following image shows, each work item form comes with a number of controls, fields, and tabs. + +![Work item form to track features or user stories](../backlogs/_img/add-work-item-vsts-user-story-form.png) + +>[!NOTE] +>Depending on the process chosen when the team project was created—[Scrum](../guidance/scrum-process.md), +[Agile](../guidance/agile-process.md), or [CMMI](../guidance/cmmi-process.md)—the types of work items you can create will differ. For example, backlog items may be called product backlog items (Scrum), user stories (Agile), or requirements (CMMI). All three are similar: they describe the customer value to deliver and the work to be performed. +> +> For an overview of all three processes, see [Choose a process](../guidance/choose-process.md). + +<a id="wi-controls"></a> + +### Work item form controls + +| Control | Function | +|--------------------------|-------------------------------| +| ![Copy to clipboard icon](../backlogs/_img/icon-copy-to-clipboard.png) | Copy URL of work item to clipboard (appears on hover over work item title) | +| ![Discussions icon](../_img/icons/icon-discussions-wi.png) | Go to Discussions section | +| ![Actions icon](../_img/icons/actions-icon.png) | Open Actions menu for additional work item tasks | +| ![Refresh icon](../_img/icons/icon-refresh-wi.png) | Refresh work item with latest changes | +| ![Undo icon](../_img/icons/icon-undo-changes-wi.png) | Revert changes to work item | +| ![History tab icon](../_img/icons/icon-history-tab-wi.png) | Open History tab | +| ![Links tab icon](../_img/icons/icon-links-tab-wi.png) | Open Links tab | +| ![Attachment tab icon](../backlogs/_img/icon-attachments-tab-wi.png) | Open Attachments tab | +| ![full screen icon](../_img/icons/fullscreen_icon.png) / ![exit full screen icon](../_img/icons/exitfullscreen_icon.png) | Enter or exit full display mode of a section within the form | +|![Collapse section icon](../_img/icons/collapse-wi-section.png)/![Expand section icon](../_img/icons/expand-wi-section.png) | Collapse or expand a section within the form | +| ![New linked work icon icon](../_img/icons/new-linked-work-item.png) | Add new work item and link to existing work item (May appear under ![Actions icon](../_img/icons/actions-icon.png) Actions menu) | +| ![Change work item type icon](../_img/icons/change-type-icon.png) | [Change work item type](../backlogs/remove-delete-work-items.md) (Appears under ![Actions icon](../_img/icons/actions-icon.png) Actions menu) | +| ![Change team project icon](../_img/icons/change-team-project-icon.png) | [Move work item to a different team project](../backlogs/remove-delete-work-items.md) (Appears under ![Actions icon](../_img/icons/actions-icon.png) Actions menu) | +| ![Clone icon](../_img/icons/clone-icon.png) | [Copy work item and optionally change work item type](../backlogs/copy-clone-work-items.md#copy-clone) (Appears under ![Actions icon](../_img/icons/actions-icon.png) Actions menu) | +| ![Email icon](../_img/icons/email-icon.png) | [Email work item](../how-to/email-work-items.md) (Appears under ![Actions icon](../_img/icons/actions-icon.png) Actions menu) | +| ![Delete icon](../_img/icons/delete_icon.png) | [Recycle work item](../backlogs/remove-delete-work-items.md) (Appears under ![Actions icon](../_img/icons/actions-icon.png) Actions menu) | +| ![Storyboard icon](../_img/icons/storyboard-icon.png) | [Storyboard with PowerPoint](../office/storyboard-your-ideas-using-powerpoint.md) (Appears under ![Actions icon](../_img/icons/actions-icon.png) Actions menu) | + +<a id="update-work-status"> </a> +## Update work status +As work progresses, team members can update the state and reassign it as needed. + +<img src="../backlogs/_img/add-work-item-vsts-update-state.png" alt="Product backlog item workflow, Scrum process" style="border: 2px solid #C3C3C3;" /> + +While the workflow states differ for different work item types, they usually follow a progression from New or Active to Closed or Done. The following image shows the work flow states for the Agile process user story. If you want to discard a work item, change the state to Removed. + +<table> +<tbody valign="top"> +<tr> +<td> +<p><b>Typical workflow progression:</b> </p>  +<ul> +<li>Create a user story in the default state, New.</li> +<li>Change the state from New to Active.</li> +<li>Change the state from Active to Resolved.</li> +<li>Change the state from Resolved to Closed.</li> +</ul> +<br/> +<p><b>Atypical transitions:</b> </p>  +<ul> +<li>Change the state from New to Removed.</li> +<li>Change the state from Removed to New.</li> +<li>Change the state from Active to Removed.</li> +<li>Change the state from Resolved to Active.</li> +<li>Change the state from Closed to Resolved.</li> +</ul> +</td> +<td> +![Product backlog item workflow, Scrum process](../guidance/_img/ALM_PT_Agile_WF_UserStory.png) +</td> +</tr> +</tbody> +</table> + +Removed work items remain in the data store and can be reactivated by changing the State. If you want to permanently remove a work item, you can [delete it](../backlogs/remove-delete-work-items.md). + +With each update, the Reason field also updates and changes are recorded in the History field which you can view through the ![history tab icon](../_img/icons/icon-history-tab-wi.png) **History** tab. To find work items based on their history, see [History & auditing](../track/history-and-auditing.md). + +<img src="../backlogs/_img/add-work-item-history.png" alt="View change history" style="border: 2px solid #C3C3C3;" /> + + + +<a id="link-wi"> </a> + +## Link items to support traceability +By linking work items using Related or Dependent link types, you can track work that is dependent on other work. Each work item contains one or more tabs with link controls. These controls support linking the work item to one or more objects. + +There are three links controls provided on most forms. The Development and Related Work scoped links controls appear on the Details tab. The ![Links page icon](../_img/icons/icon-links-tab-wi.png) Links tab provides access to all links made to the work item. + +<img src="../reference/_img/linkscontrol-bug-form-dev-related-links.png" alt="Bug work item form, Agile process, Development and Related links controls" style="border: 2px solid #C3C3C3;" /> + + +## Add links + +From each links control, you can perform these actions: + +- To open an associated item or object, click the linked item +- To delete a link, highlight it and click the ![delete icon](../_img/icons/delete_icon.png) delete icon +- To link to an existing item, or create and link a new work item, select one of the menu options. + +<img src="../reference/_img/linkscontrol-related-work-menu-options.png" alt="Links control menu of options" style="border: 2px solid #C3C3C3;" /> + +To learn more, see [Add links to work items](../backlogs/add-link.md). + +<a id="git-development"> </a> +### Development scoped links control + +The Development links control displays all of your development links, whether based on a git or Team Foundation version control (TFVC) repository. It displays links in a set order, and provides calls-to-action that support users to [drive development from a work item](../backlogs/connect-work-items-to-git-dev-ops.md). + +Team Foundation version control (TFVC) lets you link work items to version control changesets or versioned source code files by using the Changeset and Versioned Item link types. When you check in pending changes or use My Work to check in changes, [work items are automatically linked to your changes](../../tfvc/check-your-work-team-codebase.md). + +Git lets you link work items to commits by using the Commit link type. To learn how, see [Manage and commit your changes](../../git/tutorial/commits.md). + +### Related scoped links control +The Related Work links control displays links to other work items in a set order on the front page of the form. It supports these link types: Duplicate/Duplicate of, Parent/Child, Predecessor/Successor, Related, and Tests/Tested by. To learn more about different link types, see [Link work items to support traceability and manage dependencies](../track/link-work-items-support-traceability.md). + +### Links control tab + +In addition, the Links control tab provides access to all links made to the work item—both work items and external objects. + +<img src="../backlogs/_img/add-work-item-links.png" alt="Agile process, User Story work item form, Links control tab" style="border: 2px solid #C3C3C3;" /> + +<a id="discussion"> </a> +## Add to the discussion + +Add and review comments made about the work being performed by going to the discussion section. + +Click the ![Discussions icon](../_img/icons/icon-discussions-wi.png) discussion icon, which indicates how many comments have been added, to move your focus to the discussion section. Click the ![full screen icon](../_img/icons/fullscreen_icon.png) full screen icon to expand the display of the discussion section within the form. + +<img src="../backlogs/_img/add-work-items-discussion.png" alt="Discussion section" style="border: 2px solid #C3C3C3;" /> + +Within the discussion section, you can use the [**@mention** control](../../notifications/at-mentions.md) to notify another team member about the discussion. Simply type **@** and their name. + +To reference a work item, use the [**#ID** control](../../notifications/add-links-to-work-items.md). Type **#** and a list of work items that you've recently referenced will appear from which you can select. + +>[!IMPORTANT] +>For on-premises TFS, [you must configure an SMTP sever](../../tfs-server/admin/setup-customize-alerts.md) in order for team members to receive notifications. + + +<a id="copy-url"> </a> +## Copy the URL +From the web portal, simply copy the URL from the web browser address or hover over the title and then click the ![Copy to clipboard icon](../backlogs/_img/icon-copy-to-clipboard.png) copy-to-clipboard icon. For other copy options, see [Copy or clone work items](../backlogs/copy-clone-work-items.md). + +<img src="../backlogs/_img/add-work-item-copy-URL.png" alt="Copy hyperlink for a work item from web portal" style="border: 2px solid #C3C3C3;" /> + + + +<a id="start-storyboarding"> </a> +## Start storyboarding + +>[!NOTE] +><b>Feature availability: </b>The Start storyboarding menu option is only available from the new web form. However, from TFS, you can click the Start Storyboarding link from the Storyboard tabs from a backlog item, or simply open PowerPoint. See [Storyboard your ideas using PowerPoint](../office/storyboard-your-ideas-using-powerpoint.md) for requirements and usage. + +You can storyboard your ideas using PowerPoint to bring your ideas to life with storyboard shapes, text, animation, and all the other features that PowerPoint Storyboarding provides. From any work item, you can open PowerPoint by choosing the Start storyboarding menu option. + +<img src="../backlogs/_img/add-work-item-start-storyboarding.png" alt="Work item form, Start storyboarding menu option" style="border: 2px solid #C3C3C3;" /> + + +##Find or list work items +Type an ID in the Search work items box and then choose the search icon. + +<img src="../backlogs/_img/add-work-items-search-box-id.png" alt="Search work items text box" style="border: 2px solid #C3C3C3;" /> + +Use the ![context menu icon](../_img/icons/context_menu.png) context menu to add a filter based on [assignment, status, a keyword, or a work item type](../track/example-queries.md). + +Or, using the ![context menu icon](../_img/icons/context_menu.png) context menu, add filters to find items based on assignment, status, a keyword, or a work item type. For example, enter **A=@Me T=Task** to list all tasks assigned to you. Use the **=**, **:**, and **–** operators to specify the operations: Equals, Contains, and Not, respectively. + +Once you have a results list, you can [modify the filter criteria to refine your search results](../track/using-queries.md). + +## Related notes + +Keep in mind that the work item tracking experience and forms that appear in Visual Studio won't show several of the features that the web portal makes available. To add a field or customize a work item type, see [Customize your work tracking experience](../customize/customize-work.md). + +<!--- + + +From the [New work item widget](../../Report/widget-catalog.md#new-work-item-widget) added to a [team dashboard](../../Report/dashboards.md), you can choose the type of work item you want to create. + +![Add work item from a New work item widget](../../_img/alm-feature-new-work-item-widget.png) + +If you have a number of product backlog items, user stories, requirements, or tasks that you want to bulk add, you can use [Excel](../office/bulk-add-modify-work-items-excel.md) or [Project](../office/create-your-backlog-tasks-using-project.md). + +If you are planning a product suite and managing a portfolio of projects across several teams, you'll want to read [Agile tools, Scale: Manage work across the enterprise](../overview.md#scale). +--> \ No newline at end of file diff --git a/docs/work/concepts/workflow-and-state-categories.md b/docs/work/concepts/workflow-and-state-categories.md new file mode 100644 index 00000000000..91541b61cb8 --- /dev/null +++ b/docs/work/concepts/workflow-and-state-categories.md @@ -0,0 +1,104 @@ +--- +title: Workflow states and state categories +description: Understand how workflow states map to state categories +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: C6FEEE5A-CD13-413E-8A3F-84A7D4F3A2C9 +ms.author: kaelli +ms.manager: douge +ms.date: 03/31/2017 +--- + +# Workflow states and state categories + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +All workflows consist of states, transitions, and reasons. A transition supports forward and backward movement among two states. When you add a custom state, the system automatically adds transitions from the custom state to all other inherited states (except for Removed). + +Each state belongs to a state category (previously referred to as a metastate). State categories support the Agile tool backlog and board views. + +<a id="workflow-states"> </a> +## Workflow states + +Workflow states define how a work item progresses upon its creation to closure. For example, the four main states defined for the User Story (Agile process) define a progression of four states, from New, Active, Resolved, to Closed. (The Removed state supports removing a work item from appearing on the backlog; to learn more, see [Move, change, or delete work items](../backlogs/remove-delete-work-items.md#remove).) + +The natural progressions and regressions of the user story, product backlog item, and requirement WITs are as shown. + +**Workflow states** + +> [!div class="mx-tdBreakAll"] +> |User Story, Agile process |Product backlog item, Scrum process |Requirement, CMMI process | +> |-------------|----------|---------| +> |<img src="../guidance/_img/ALM_PT_Agile_WF_UserStory.png" title="User Story workflow states, Agile process " alt="User Story workflow states, Agile process" />|<img src="../guidance/_img/ALM_PT_Scrum_WF_PBI.png" title="Product backlog item workflow states, Scrum process template" style="padding-left:20px;" alt="Product backlog item workflow states, Scrum process template" />|<img src="../guidance/_img/ALM_PT_CMMI_WF_Requirement.png" title="Requirement workflow states, CMMI process " style="padding-left:20px;" alt="Requirement workflow states, CMMI process " /> | + + +<a id="state-categories"> </a> +## State categories + +State categories, on the other hand, determine how Agile planning tools and select dashboard widgets treat each workflow state. The state categories used by the backlogs, boards and widgets are Proposed, In Progress, and Complete. + +Here's how the default, inherited states map to the state categories for all three system processes plus test case management WITs. The workflow states for Test Case, Test Design, and Test Suite are the same across all three system processes. + + +<table valign="top" width="100%"> +<tr> +<th width="30%">Categories</th> +<th width="14%">Agile</th> +<th width="14%">Scrum</th> +<th width="16%">CMMI</th> +<th width="16%">Test WITs </th> +</tr> +<tr valign="top" > +<td>**Proposed:** Assign to states associated with newly added work items that should appear on the backlog. The first column on the Kanban or task board maps to a Proposed state. </td> +<td>New</td> +<td>New<br/>Approved<br/>To Do (Task) </td> +<td>Proposed<br/></td> +<td>Design (Test Case)<br/></td> +</tr> +<tr valign="top" > +<td>**In Progress:** Assign to states that represent active work. Work items assigned to states mapped to this category will appear in the backlog (unless you choose to hide them) and make up the middle columns on the Kanban boards. </td> +<td>Active<br/>Resolved (Epic, Feature, User Story)</td> +<td>Committed<br/>Open (Impediment)</td> +<td>Active<br/>Resolved (Epic, Feature, Requirement, Task)</td> +<td>Active (Test Plan)<br/>In Planning (Test Suite)<br/>In Progress (Test Suite)<br/>Ready (Test Case)<br/></td> +</tr> +<tr valign="top" > +<td>**Resolved:** Assign to states that represent a solution has been implemented, but are not yet verified. Generally these states apply to bug WITs. Work items in a Resolved state appear on the backlog by default. The Agile tools treat the Resolved state category exactly the same as the In Progress state category. </td> +<td>Resolved (Bug)</td> +<td>n/a</td> +<td>Resolved (Bug, Issue, Review, Risk)</td> +<td>n/a </td> +</tr> +<tr valign="top" > +<td>**Completed:** Assigned to states that represent work has finished. Work items whose state is in this category don't appear on the backlog and do appear in the last column of the Kanban board. Note that you can't modify states in this category nor can you add states to this category.</td> +<td>Closed<br/></td> +<td>Done<br/></td> +<td>Closed<br/></td> +<td>Closed (Test Case)<br/>Completed (Test Suite)<br/>Inactive (Test Plan)</td> +</tr> +<tr valign="top" > +<td>**Removed:** Assigned to the Removed state. Work items in a state mapped to the Removed category are hidden from the backlog and board experiences. + +<blockquote>**Note:** You should avoid using the Removed state and Removed state category as they are in the process of being deprecated. Instead, you should [Delete work items](../backlogs/remove-delete-work-items.md) to remove them from the backlog. </td> +<td>Removed </td> +<td>Removed</td> +<td>n/a</td> +<td>n/a</td> +</tr> +</table> + +## When to add a State versus a Kanban column + +Both States and Kanban columns are used to track the status of work. Workflow states are shared across a team project while Kanban columns are shared within a team. Only project collection admins can add custom states, while team admins can add Kanban columns. + +Add custom states when you want all teams to track the status according to the business workflow adopted by the organization. By customizing the process, you automatically customize the team projects and WITs that reference that process. + +Also, by adding custom states to support those workflow states that several teams want to track, you avoid the confusion that can arise when team's create a query based on a Kanban column. Because each team can customize the Kanban board columns and swimlanes, the values assigned to work items which appear on different boards may not be the same. The primary work around for this issue is to maintain single ownership of work items by team area path. Another work around is to formalize the columns by adding custom states which can be shared across teams. + +##Related notes + +- [Lead Time and Cycle Time control charts (widgets)](../../report/guidance/cycle-time-and-lead-time.md) +- [Customize a workflow for a process (Inheritance process model)](../process/customize-process-workflow.md) +- [Change the workflow for a work item type](../reference/change-workflow-wit.md) +- [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md) +- [Customize your work tracking experience](../customize/customize-work.md) \ No newline at end of file diff --git a/docs/work/connect/_img/ALM_CAL_OpenAdminPage.png b/docs/work/connect/_img/ALM_CAL_OpenAdminPage.png new file mode 100644 index 00000000000..555043a0104 Binary files /dev/null and b/docs/work/connect/_img/ALM_CAL_OpenAdminPage.png differ diff --git a/docs/work/connect/_img/ALM_FB_FeedbackSubmit.png b/docs/work/connect/_img/ALM_FB_FeedbackSubmit.png new file mode 100644 index 00000000000..2f03f560e90 Binary files /dev/null and b/docs/work/connect/_img/ALM_FB_FeedbackSubmit.png differ diff --git a/docs/work/connect/_img/ALM_FB_InstallFBTool.png b/docs/work/connect/_img/ALM_FB_InstallFBTool.png new file mode 100644 index 00000000000..0be03276dba Binary files /dev/null and b/docs/work/connect/_img/ALM_FB_InstallFBTool.png differ diff --git a/docs/work/connect/_img/ALM_FB_LaunchApplication.png b/docs/work/connect/_img/ALM_FB_LaunchApplication.png new file mode 100644 index 00000000000..7f408e2f946 Binary files /dev/null and b/docs/work/connect/_img/ALM_FB_LaunchApplication.png differ diff --git a/docs/work/connect/_img/ALM_FB_ProvideFeedback.png b/docs/work/connect/_img/ALM_FB_ProvideFeedback.png new file mode 100644 index 00000000000..52695156a81 Binary files /dev/null and b/docs/work/connect/_img/ALM_FB_ProvideFeedback.png differ diff --git a/docs/work/connect/_img/ALM_FB_RatingstarsonProvidepage.png b/docs/work/connect/_img/ALM_FB_RatingstarsonProvidepage.png new file mode 100644 index 00000000000..5c6af70a2b6 Binary files /dev/null and b/docs/work/connect/_img/ALM_FB_RatingstarsonProvidepage.png differ diff --git a/docs/work/connect/_img/ALM_FB_SaveIcon.png b/docs/work/connect/_img/ALM_FB_SaveIcon.png new file mode 100644 index 00000000000..1a0205dc549 Binary files /dev/null and b/docs/work/connect/_img/ALM_FB_SaveIcon.png differ diff --git a/docs/work/connect/_img/ALM_FB_StartStopDeleteRecording.png b/docs/work/connect/_img/ALM_FB_StartStopDeleteRecording.png new file mode 100644 index 00000000000..ba16a5f357e Binary files /dev/null and b/docs/work/connect/_img/ALM_FB_StartStopDeleteRecording.png differ diff --git a/docs/work/connect/_img/ALM_GF_AddScreenshot.png b/docs/work/connect/_img/ALM_GF_AddScreenshot.png new file mode 100644 index 00000000000..aef5f4f106d Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_AddScreenshot.png differ diff --git a/docs/work/connect/_img/ALM_GF_FeedbackQuery.png b/docs/work/connect/_img/ALM_GF_FeedbackQuery.png new file mode 100644 index 00000000000..20d12bea0d4 Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_FeedbackQuery.png differ diff --git a/docs/work/connect/_img/ALM_GF_FeedbackQueryEditor.png b/docs/work/connect/_img/ALM_GF_FeedbackQueryEditor.png new file mode 100644 index 00000000000..d8df3fa0368 Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_FeedbackQueryEditor.png differ diff --git a/docs/work/connect/_img/ALM_GF_FeedbackQueryResults.png b/docs/work/connect/_img/ALM_GF_FeedbackQueryResults.png new file mode 100644 index 00000000000..9570015b794 Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_FeedbackQueryResults.png differ diff --git a/docs/work/connect/_img/ALM_GF_FeedbackReviewers.png b/docs/work/connect/_img/ALM_GF_FeedbackReviewers.png new file mode 100644 index 00000000000..e60d1cd83d7 Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_FeedbackReviewers.png differ diff --git a/docs/work/connect/_img/ALM_GF_FocusFeedback.png b/docs/work/connect/_img/ALM_GF_FocusFeedback.png new file mode 100644 index 00000000000..637b4ac7196 Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_FocusFeedback.png differ diff --git a/docs/work/connect/_img/ALM_GF_InstallFeedbackClient.png b/docs/work/connect/_img/ALM_GF_InstallFeedbackClient.png new file mode 100644 index 00000000000..3cfbf7b0f7a Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_InstallFeedbackClient.png differ diff --git a/docs/work/connect/_img/ALM_GF_LaunchFeedbackTool.png b/docs/work/connect/_img/ALM_GF_LaunchFeedbackTool.png new file mode 100644 index 00000000000..bfe0f8b3bc3 Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_LaunchFeedbackTool.png differ diff --git a/docs/work/connect/_img/ALM_GF_LinksTab.png b/docs/work/connect/_img/ALM_GF_LinksTab.png new file mode 100644 index 00000000000..43ff4c48805 Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_LinksTab.png differ diff --git a/docs/work/connect/_img/ALM_GF_ModifyFeedback.png b/docs/work/connect/_img/ALM_GF_ModifyFeedback.png new file mode 100644 index 00000000000..fad06a0424c Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_ModifyFeedback.png differ diff --git a/docs/work/connect/_img/ALM_GF_ProvideFeedback.png b/docs/work/connect/_img/ALM_GF_ProvideFeedback.png new file mode 100644 index 00000000000..4bca7d80f7d Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_ProvideFeedback.png differ diff --git a/docs/work/connect/_img/ALM_GF_SMTPServer.png b/docs/work/connect/_img/ALM_GF_SMTPServer.png new file mode 100644 index 00000000000..10fbec6950a Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_SMTPServer.png differ diff --git a/docs/work/connect/_img/ALM_GF_SendRequest.png b/docs/work/connect/_img/ALM_GF_SendRequest.png new file mode 100644 index 00000000000..8889ef6317d Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_SendRequest.png differ diff --git a/docs/work/connect/_img/ALM_GF_SessionRecording.png b/docs/work/connect/_img/ALM_GF_SessionRecording.png new file mode 100644 index 00000000000..890170d6bf6 Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_SessionRecording.png differ diff --git a/docs/work/connect/_img/ALM_GF_StartFeedbackSession.png b/docs/work/connect/_img/ALM_GF_StartFeedbackSession.png new file mode 100644 index 00000000000..496a3db7fee Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_StartFeedbackSession.png differ diff --git a/docs/work/connect/_img/ALM_GF_TellStakeholders.png b/docs/work/connect/_img/ALM_GF_TellStakeholders.png new file mode 100644 index 00000000000..47e1e9d6b0b Binary files /dev/null and b/docs/work/connect/_img/ALM_GF_TellStakeholders.png differ diff --git a/docs/work/connect/_img/ALM_GP_AddAccounts.png b/docs/work/connect/_img/ALM_GP_AddAccounts.png new file mode 100644 index 00000000000..98bcfd28aaf Binary files /dev/null and b/docs/work/connect/_img/ALM_GP_AddAccounts.png differ diff --git a/docs/work/connect/_img/ALM_GP_AddUser.png b/docs/work/connect/_img/ALM_GP_AddUser.png new file mode 100644 index 00000000000..31d6d85b1bd Binary files /dev/null and b/docs/work/connect/_img/ALM_GP_AddUser.png differ diff --git a/docs/work/connect/_img/ALM_GP_CreateTFSGroup.png b/docs/work/connect/_img/ALM_GP_CreateTFSGroup.png new file mode 100644 index 00000000000..3e7cb037abd Binary files /dev/null and b/docs/work/connect/_img/ALM_GP_CreateTFSGroup.png differ diff --git a/docs/work/connect/_img/ALM_GP_ModifyFeedback.png b/docs/work/connect/_img/ALM_GP_ModifyFeedback.png new file mode 100644 index 00000000000..4dc548240f6 Binary files /dev/null and b/docs/work/connect/_img/ALM_GP_ModifyFeedback.png differ diff --git a/docs/work/connect/_img/ALM_GP_NameGroup.png b/docs/work/connect/_img/ALM_GP_NameGroup.png new file mode 100644 index 00000000000..7653a50d745 Binary files /dev/null and b/docs/work/connect/_img/ALM_GP_NameGroup.png differ diff --git a/docs/work/connect/_img/ALM_GP_SetPermsModify_Add.png b/docs/work/connect/_img/ALM_GP_SetPermsModify_Add.png new file mode 100644 index 00000000000..dcfdf39461a Binary files /dev/null and b/docs/work/connect/_img/ALM_GP_SetPermsModify_Add.png differ diff --git a/docs/work/connect/_img/ALM_GP_SetPermsModify_Edit.png b/docs/work/connect/_img/ALM_GP_SetPermsModify_Edit.png new file mode 100644 index 00000000000..67aa0a338e4 Binary files /dev/null and b/docs/work/connect/_img/ALM_GP_SetPermsModify_Edit.png differ diff --git a/docs/work/connect/_img/ALM_GP_SetPermsModify_Open.png b/docs/work/connect/_img/ALM_GP_SetPermsModify_Open.png new file mode 100644 index 00000000000..8f1fb346eaf Binary files /dev/null and b/docs/work/connect/_img/ALM_GP_SetPermsModify_Open.png differ diff --git a/docs/work/connect/_img/ALM_GP_SetPermsProvide.png b/docs/work/connect/_img/ALM_GP_SetPermsProvide.png new file mode 100644 index 00000000000..c77829cb31f Binary files /dev/null and b/docs/work/connect/_img/ALM_GP_SetPermsProvide.png differ diff --git a/docs/work/connect/_img/access-levels-2015-advanced.png b/docs/work/connect/_img/access-levels-2015-advanced.png new file mode 100644 index 00000000000..a7578b19239 Binary files /dev/null and b/docs/work/connect/_img/access-levels-2015-advanced.png differ diff --git a/docs/work/connect/_img/access-levels-2017-basic.png b/docs/work/connect/_img/access-levels-2017-basic.png new file mode 100644 index 00000000000..f4bb2112d96 Binary files /dev/null and b/docs/work/connect/_img/access-levels-2017-basic.png differ diff --git a/docs/work/connect/_img/access-levels-2017-open-admin-context.png b/docs/work/connect/_img/access-levels-2017-open-admin-context.png new file mode 100644 index 00000000000..76bf75d39f5 Binary files /dev/null and b/docs/work/connect/_img/access-levels-2017-open-admin-context.png differ diff --git a/docs/work/connect/_img/access-levels-2017-stakeholder-acess.png b/docs/work/connect/_img/access-levels-2017-stakeholder-acess.png new file mode 100644 index 00000000000..1126fbe9859 Binary files /dev/null and b/docs/work/connect/_img/access-levels-2017-stakeholder-acess.png differ diff --git a/docs/work/connect/_img/access-levels-2017-stakeholder.png b/docs/work/connect/_img/access-levels-2017-stakeholder.png new file mode 100644 index 00000000000..1b6d27a6c46 Binary files /dev/null and b/docs/work/connect/_img/access-levels-2017-stakeholder.png differ diff --git a/docs/work/connect/_img/access-levels-2017-update2-vs-t.png b/docs/work/connect/_img/access-levels-2017-update2-vs-t.png new file mode 100644 index 00000000000..be9e01d84b4 Binary files /dev/null and b/docs/work/connect/_img/access-levels-2017-update2-vs-t.png differ diff --git a/docs/work/connect/_img/access-levels-2017-vs.png b/docs/work/connect/_img/access-levels-2017-vs.png new file mode 100644 index 00000000000..c110019f6a3 Binary files /dev/null and b/docs/work/connect/_img/access-levels-2017-vs.png differ diff --git a/docs/work/connect/_img/change-access-levels-export-audit-log.png b/docs/work/connect/_img/change-access-levels-export-audit-log.png new file mode 100644 index 00000000000..b3a739cfdda Binary files /dev/null and b/docs/work/connect/_img/change-access-levels-export-audit-log.png differ diff --git a/docs/work/connect/_img/change-access-levels-set-default.png b/docs/work/connect/_img/change-access-levels-set-default.png new file mode 100644 index 00000000000..91f46428d51 Binary files /dev/null and b/docs/work/connect/_img/change-access-levels-set-default.png differ diff --git a/docs/work/connect/_img/change-access-levels-stakeholder-add-user.png b/docs/work/connect/_img/change-access-levels-stakeholder-add-user.png new file mode 100644 index 00000000000..5b893aedfdd Binary files /dev/null and b/docs/work/connect/_img/change-access-levels-stakeholder-add-user.png differ diff --git a/docs/work/connect/_img/control-panel-contributors-group-permissions.png b/docs/work/connect/_img/control-panel-contributors-group-permissions.png new file mode 100644 index 00000000000..6b33fdc0b6e Binary files /dev/null and b/docs/work/connect/_img/control-panel-contributors-group-permissions.png differ diff --git a/docs/work/connect/_img/request-feedback-link.png b/docs/work/connect/_img/request-feedback-link.png new file mode 100644 index 00000000000..7b1307a9172 Binary files /dev/null and b/docs/work/connect/_img/request-feedback-link.png differ diff --git a/docs/work/connect/_img/stakholder-add-work-item-tfs-queries-page.png b/docs/work/connect/_img/stakholder-add-work-item-tfs-queries-page.png new file mode 100644 index 00000000000..fd22647a308 Binary files /dev/null and b/docs/work/connect/_img/stakholder-add-work-item-tfs-queries-page.png differ diff --git a/docs/work/connect/_img/work-as-a-stakeholder-add-pbi.png b/docs/work/connect/_img/work-as-a-stakeholder-add-pbi.png new file mode 100644 index 00000000000..b537d214cb3 Binary files /dev/null and b/docs/work/connect/_img/work-as-a-stakeholder-add-pbi.png differ diff --git a/docs/work/connect/_img/work-as-a-stakeholder-check-backlog.png b/docs/work/connect/_img/work-as-a-stakeholder-check-backlog.png new file mode 100644 index 00000000000..acd5ae0f7c1 Binary files /dev/null and b/docs/work/connect/_img/work-as-a-stakeholder-check-backlog.png differ diff --git a/docs/work/connect/_img/work-as-a-stakeholder-edit-query.png b/docs/work/connect/_img/work-as-a-stakeholder-edit-query.png new file mode 100644 index 00000000000..5bea3dd14c8 Binary files /dev/null and b/docs/work/connect/_img/work-as-a-stakeholder-edit-query.png differ diff --git a/docs/work/connect/_img/work-as-a-stakeholder-open-shared-query.png b/docs/work/connect/_img/work-as-a-stakeholder-open-shared-query.png new file mode 100644 index 00000000000..da7f8b23767 Binary files /dev/null and b/docs/work/connect/_img/work-as-a-stakeholder-open-shared-query.png differ diff --git a/docs/work/connect/_img/work-as-a-stakeholder-query.png b/docs/work/connect/_img/work-as-a-stakeholder-query.png new file mode 100644 index 00000000000..2bcf7667c0a Binary files /dev/null and b/docs/work/connect/_img/work-as-a-stakeholder-query.png differ diff --git a/docs/work/connect/_img/work-as-a-stakeholder-view-kanban-board.png b/docs/work/connect/_img/work-as-a-stakeholder-view-kanban-board.png new file mode 100644 index 00000000000..849e2d9b579 Binary files /dev/null and b/docs/work/connect/_img/work-as-a-stakeholder-view-kanban-board.png differ diff --git a/docs/work/connect/get-feedback.md b/docs/work/connect/get-feedback.md new file mode 100644 index 00000000000..81ec381523f --- /dev/null +++ b/docs/work/connect/get-feedback.md @@ -0,0 +1,112 @@ +--- +title: Request feedback using the work tracking feedback tool +description: Ask reviewers to provide videos, screenshots, type-written comments, and ratings on your application developed using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: b8fc1618-6501-41dd-86a6-78290bb84dcd +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +--- + +# Get feedback + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +>**Feature availability**: For Visual Studio Team Services (VSTS) and TFS 2015.1 or later versions, you can request feedback with a [Basic license](https://www.visualstudio.com/pricing/visual-studio-online-feature-matrix-vs) or [Basic access level](../../security/change-access-levels.md). For Team Foundation Server (TFS) 2015 or earlier versions, you need to belong to the [Advanced access level](../../security/change-access-levels.md) to request feedback. +> +>In addition, you can now [request feedback from stakeholders for web apps using the Test & Feedback extension](../../manual-test/stakeholder/request-stakeholder-feedback.md). For desktop apps, you must use the feedback request form documented in this topic and stakeholders must reply using the Microsoft Feedback Client. + +Once you have working software, you're ready to get feedback from your stakeholders. You can ask reviewers to provide videos, screenshots, type-written comments, and ratings. Their feedback is captured into work items that you can review and use to create a bug or suggest a new backlog item. + +Before requesting feedback, make sure that you [provide stakeholders who'll you request feedback from the necessary permissions](give-permissions-feedback.md). + +## Request feedback +To request feedback, you fill out a form that generates an email request to your stakeholders. + +1. From the web portal home page, start a feedback request. + + ![Request feedback link in Homepage](_img/request-feedback-link.png) + + <blockquote style="font-size: 13px"><b>Note: </b>If your on-premises TFS team project was upgraded from TFS 2010 or earlier version, you may have to update your team project using the [Configure Features wizard](../customize/configure-features-after-upgrade.md).</blockquote>   + + If the following message appears, you need to [configure an SMTP server](../../tfs-server/admin/setup-customize-alerts.md). + + ![Error message about email notifications not configured](_img/ALM_GF_SMTPServer.png) + +2. Add the feedback reviewers. If you don't see the names you want in the browse list, [grant them permissions to provide feedback](give-permissions-feedback.md). + + ![Select stakeholders on Request Feedback form](_img/ALM_GF_FeedbackReviewers.png) + +3. Tell your reviewers how to run the app they'll be reviewing. + + ![Launch application instructions rich-text area on Request Feedback form](_img/ALM_GF_TellStakeholders.png) + +4. For each area of interest, decide what type of feedback you want. Set the context for the reviewers by providing enough background information. Add up to four more areas of interest with the **add feedback item** link. + + ![Feedback focus textbox on Request Feedback form](_img/ALM_GF_FocusFeedback.png) + +5. Send the request. + + ![Send Button on Request Feedback form](_img/ALM_GF_SendRequest.png) + +## Provide Feedback +Reviewers launch your application and provide feedback through the free Microsoft Feedback Client. + +1. Reviewers who don't have a version of Visual Studio installed can download the feedback client directly from the feedback request they receive. + + ![Install the feedback tool link on the Feedback Request email](_img/ALM_GF_InstallFeedbackClient.png) + + Or, they can go to the [Visual Studio download site](https://www.microsoft.com/download/details.aspx?id=48142). + +2. Reviewers start the feedback session. + + ![Start your feedback session link on the Feedback Request email](_img/ALM_GF_StartFeedbackSession.png) + +3. They launch the app to review from the feedback tool. + + ![URL link on Feedback client start page](_img/ALM_GF_LaunchFeedbackTool.png) + +4. They begin providing feedback. + + ![Provide page on Feedback client](_img/ALM_GF_ProvideFeedback.png) + +5. Reviewers can add screenshots, comments, and file attachments, and even record the feedback session. Results show up on the lower part of the screen. In this case, you can see the comment that the stakeholder wrote after attaching the screenshot. + + ![Screenshot icon and Comment text box on Provide page](_img/ALM_GF_AddScreenshot.png) + + > [!NOTE] + > **Security Note:** Unless you stop recording, everything is recorded—all steps that you take as well as anything you say. If you provide sensitive data such as user names and passwords, you will capture this information in the recording. However, you can always delete a recording by deleting the image for the recording session that appears in the feedback tool's text box. </blockquote>   + +6. Reviewers can modify or even delete parts of their feedback, such as a recording, before they submit their feedback. + + ![Submit page on Feedback Client](_img/ALM_GF_ModifyFeedback.png) + +## Review feedback +1. Open the Feedback query. + + ![Feedback link on Queries page in the web portal](_img/ALM_GF_FeedbackQuery.png) + + Or, create a feedback query with the parameters, as shown. + + ![Editor view for flat-list feedback query](_img/ALM_GF_FeedbackQueryEditor.png) + + You should see a list of all active feedback responses for your team project. + + ![Results view of feedback responses](_img/ALM_GF_FeedbackQueryResults.png) + +2. Open a response item and play or save a recording. + + ![Play session recording link on Feedback Response work item form](_img/ALM_GF_SessionRecording.png) + +3. Or, you can create a bug or backlog item linked to the feedback. + + ![All Links tab on Feedback Response work item form](_img/ALM_GF_LinksTab.png) + + With the feedback experience, you can engage stakeholders frequently to provide continuous feedback. Interacting with your working apps, your stakeholders can record rich and actionable data that the system automatically stores in the form of video or audio recordings, comments, and annotated screenshots. You can then take action on each feedback response by assigning it to a team member or creating bugs or backlog items to the linked feedback. + +##Related feedback notes +- You can only request feedback from a team project hosted on VSTS or an on-premises TFS. If you don't have a team project yet, create one in [VSTS](../../accounts/set-up-vs.md) or set one up in an [on-premises TFS](../../accounts/create-team-project.md). +- You can [change the audio device or annotation tool](https://msdn.microsoft.com/library/hh561374.aspx) using the Settings icon change settings icon on the Microsoft Feedback Client. +- If you access the Microsoft Feedback Client from a remote machine, you can [enable remote audio](https://msdn.microsoft.com/library/hh420489.aspx). +- You can download the Feedback client from here: [Visual Studio download site](https://www.microsoft.com/download/details.aspx?id=48142). diff --git a/docs/work/connect/give-feedback.md b/docs/work/connect/give-feedback.md new file mode 100644 index 00000000000..f9383c0805a --- /dev/null +++ b/docs/work/connect/give-feedback.md @@ -0,0 +1,163 @@ +--- +title: Give feedback using Microsoft Feedback Client +description: Respond to a request for feedback using the Microsoft Feedback Client - Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 9C3231E4-FD2F-4F22-BEA0-C1AA0DE294C6 +ms.manager: douge +ms.author: kaelli +ms.date: 08/31/2017 +--- + +# Give feedback using Microsoft Feedback Client + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +You can respond to a request for feedback using the Microsoft Feedback Client. This tool allows you to launch an application, capture your interaction with it as video and capture your verbal or type-written comments as well. To support traceability, your feedback is stored in the data store for Visual Studio Team Services (VSTS) or an on-premises Team Foundation Server (TFS). + +The Microsoft Feedback Client is installed automatically with the latest versions of Visual Studio, or you can download for free from the following page on the Microsoft website: [Microsoft Feedback Client Download](https://www.microsoft.com/download/details.aspx?id=48142). + +## Initiate a feedback session + +When you receive an email request for feedback, it contains a link to launch Microsoft Feedback Client, and a link to install the feedback tool if it is not already installed. + +### To install Microsoft Feedback Client + +You can skip this procedure if you already have Microsoft Feedback Client installed or if you will access the feedback tool on a remote machine. + +1. Open your email request, and then choose the Install the feedback tool link to install Microsoft Feedback Client. + + ![Install the feedback tool](_img/ALM_FB_InstallFBTool.png) + + If you are viewing the email from an internet-based email client, you might need to copy the address behind the link and paste it into the address bar of your browser. + +2. Restart your computer. + + +### To initiate a feedback session from an email request + +1. Open your email request, and then choose the **Start your local feedback session** link + + <blockquote style="font-size: 13px"><b>Note: </b> If you are viewing the email from an internet-based email client, you might need to copy the address behind the link and paste it into the address bar of your browser.</blockquote> + + If you're accessing the feedback tool on a remote computer, open the shortcut menu for the **Start your local feedback session** link, and then choose **Copy Hyperlink**. On the remote computer, choose **Start**, choose **Run**, paste the hyperlink into the box, and then choose the **OK** button. + + The Feedback Client launches and the Windows Security dialog box appears. + +1. Enter the credentials provided to you for connecting with Team Foundation Server, and then choose the **OK** button. + + +## Launch the application + +The feedback tool opens to the Start page. Launch the application by following the instructions provided. + +![Launch feedback application](_img/ALM_FB_LaunchApplication.png) + +1. From the Start page, choose the **Application** link to open, start, or install the application for which you have been requested to provide feedback. + +3. Follow any additional instructions provided to login or access the application. + + For example, you would choose the **http://staging.fabrikamfiber.com/customer.aspx** link and then enter the user name and password provided. + +## Provide feedback on requested items + +You can record your interactions with the application, record verbal comments, enter text, clip and annotate a screen, or attach a file. Recordings appear as images within the feedback tool's text box. + +### To review descriptions of items submitted for feedback + +On the **Provide** page, one or more items appear for you to provide feedback. For each item, you can get context on what's being asked and then you can give feedback free form through video or audio recordings, text, screenshot, or file attachments. When finished with one item, choose the **Next** button to move to the next item. + +![Provide feedback](_img/ALM_FB_ProvideFeedback.png) + + +1. On the toolbar, choose the number of the ITEM that you want to review. + +1. Review the information provided. + +1. Interact with the application, and determine what feedback you want to provide, based on the instructions for each item's request. + +### To start, stop, or delete a screen or voice recording + +![Start or Stop Feedback](_img/ALM_FB_StartStopDeleteRecording.png) + +You can change settings defined for the audio device and annotation tool at any time. For more information, see Change the audio device or annotation tool. + +1. **To start recording:** Choose one of the icons:** Screen & Voice**, **Screen only**, or **Voice only**. + + > [!IMPORTANT] + > **Security Note:** Unless you stop recording, all steps that you take and remarks that you make while recording screen and voice will be recorded. If you provide sensitive data such as user names and passwords, you will capture this information in the recording. However, you can always delete a recording by deleting the image for the recording session that appears in the feedback tool's text box. + +1. **To stop recording**: Choose the **Stop** button. + + The recording stops, and an image appears in the text box that indicates the type of recording and the length of the recording session. + +1. **To delete a recording**: Choose the image for the recording that you want to delete, and then press the **Delete** key. + +###To add text, capture a screenshot, or attach a file + +You can add text, capture a screenshot, annotate a screenshot, or attach a file as part of your feedback. You can perform these operations while you continue to record your feedback. + +By annotating screenshots, you can indicate corrections or improvements by adding text or images to the screenshot that you captured. By default, Microsoft Paint opens automatically when you open a screenshot image that you captured within the feedback tool. You can also configure another annotation tool to open automatically whenever you capture a screenshot. For more information, see [Change the audio device or annotation tool](../reference/change-audio-device-annotation-tool.md). + +![Add Txt Screenshot or File](_img/ALM_FB_StartStopDeleteRecording.png) + + +1. **To add text**: In the tool's rich-text box, enter the information that you want to include when you submit your feedback. + + You can use the toolbar to format your comment, add a hyperlink, and insert an image. + +2. **To capture a screenshot**: Choose the camera icon, and then select the rectangular area that you want to capture. + + The image appears in the rich-text box. + +3. **To annotate the screenshot**: Double-click the image. + + Microsoft Paint, or whichever annotation tool you have configured, opens with the image displayed. To specify corrections or improvements, perform the following steps: + + a. Draw or enter text onto the image. + b. Choose the ![Save](_img/ALM_FB_SaveIcon.png) **Save** icon, and close the annotation tool. + + The image appears within the feedback tool with the changes that you made. + +4. **To attach a file**: Choose the attachment icon, and in the **Open** dialog box, browse to the file that you want to attach, and then choose the **Open** button. + +### To rate an item and move to the next item + +![Rating stars on Provide page](_img/ALM_FB_RatingstarsonProvidepage.png) + +1. (Optional) Choose one or more stars to indicate your overall rating of the item that you have just reviewed. + +3. Choose the **Next** button to move to the next item to review. + +## Review and submit your feedback + +After you enter your feedback for each item, you can review, make corrections or additions, and then submit your feedback. + +![Review Feedback Submit](_img/ALM_FB_FeedbackSubmit.png) + +1. Choose the **Submit** button, which also stops any recordings that you may have started. + +2. (Optional) On the **Submit** page, choose the **review feedback** link to return to the **Provide** page for the first feedback item. Review your feedback for each item and choose the **Next** button to advance to the next item. + + You can delete or modify any content within the text box for any item. + +3. On the **Submit** page, choose the **Submit and close** button. + + Microsoft Feedback Client closes, and the system creates a feedback response work item which contains the feedback that you submit with the title, "Feedback Response from *YourUserName* for *RequestFeedbackItemTitle*." + + +## Related notes + +- You [Initiate a feedback request](get-feedback.md) from the home page of your web portal or using the Other links widget from a team dashboard. +- You can [change the audio device or annotation tool](../reference/change-audio-device-annotation-tool.md) using the Settings icon change settings icon on the Microsoft Feedback Client. +- If you access the Microsoft Feedback Client from a remote machine, you can [enable remote audio](../reference/enable-remote-audio-capture.md). +- To record audio, you must have an audio recording device configured on your computer. If you access the feedback tool from a remote device, you might have to [enable remote audio capture](../reference/enable-remote-audio-capture.md). + + +### Requirements to provide feedback + +- To provide feedback using the Microsoft Feedback Client you must have security credentials that will allow you to connect to VSTS or an on-premises TFS and have the permissions described in [Give reviewers permissions to provide feedback](give-permissions-feedback.md). +- Your computer must meet the system requirements for installing Microsoft Feedback Client. For more information, see the following page on the Microsoft website: [Microsoft Feedback Client Download](https://www.microsoft.com/download/details.aspx?id=40768). + + diff --git a/docs/work/connect/give-permissions-feedback.md b/docs/work/connect/give-permissions-feedback.md new file mode 100644 index 00000000000..f4ba49a3173 --- /dev/null +++ b/docs/work/connect/give-permissions-feedback.md @@ -0,0 +1,84 @@ +--- +title: Give reviewers permission to provide feedback +description: Grant users access to provide feedback initiated from a team project in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: db5148e8-0dd2-4ddd-b563-d9b924356263 +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +--- + +# Give reviewers permissions to provide feedback + + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You provide feedback to users that you plan to [request feedback](get-feedback.md) from. Reviewers who aren't members of your team require special permissions to provide feedback using the Microsoft Feedback Client. + +## Add reviewers to your team project + +1. From the web portal of your team project home page, open the administration context. + + ![Open the administration page](_img/ALM_CAL_OpenAdminPage.png) + + If you aren't a member of the **Project Administrators** or **Team Foundation Administrators** group, get added. See [Add an administrator](../../security/set-project-collection-level-permissions.md). You'll need to be a member in order to add users and groups to a team project, change permissions, and grant them access to the web portal. + +2. Create a group for your reviewers. + + ![Create a VSO or TFS Group link on Security admin page ](_img/ALM_GP_CreateTFSGroup.png) + + ><b>Tip: </b> If you have a lot of reviewers, creating a Windows, VSO, or TFS group helps you manage permissions more efficiently. + +3. Name your group. + + ![Create the Reviewers TFS group ](_img/ALM_GP_NameGroup.png) + +4. Add accounts to your group. + + ![Open dialog to add members to TFS Group ](_img/ALM_GP_AddAccounts.png) + + ![Account names in Add a window or user group](_img/ALM_GP_AddUser.png) + +## Set permissions so reviewers can provide feedback + +Allow reviewers to **Create test runs**, **View project-level information**, and **View test runs**. + +![Permissions view, Reviewers group on Security page ](_img/ALM_GP_SetPermsProvide.png) + +## Set permissions so reviewers can modify work items + +Since feedback is captured in a feedback response work item, reviewers need to be able to modify work items in the product areas they will review. + +1. Open security for the team project. + + ![Security link on Area path context menu ](_img/ALM_GP_SetPermsModify_Open.png) + +2. Add the reviews group to the **VSO Groups** or **TFS Groups**. + + ![Add a group to the list of TFS Groups ](_img/ALM_GP_SetPermsModify_Add.png) + +3. Allow reviewers to Edit work items in this node and View work items in this node. + + ![Allow reviewers to view and modify work items ](_img/ALM_GP_SetPermsModify_Edit.png) + +## If you want, allow reviewers the ability to modify their feedback submissions + +Sometimes additional ideas occur after reviewers submit their feedback. By providing access to the web portal, reviewers can revisit and further annotate their feedback submissions. + +- **VSTS:** [Assign the **Stakeholder** license to accounts](../../accounts/add-account-users-assign-access-levels.md) that you add to your Reviewer group +- **On-premises TFS:** [Add your Reviewer group to the **Stakeholder** group on the **access levels** page](../../security/change-access-levels.md). If you don't see this tab, get administrative permissions. + +![Add reviewers to the Limited group](_img/ALM_GP_ModifyFeedback.png) + +Your reviewers will be able to view and modify only those work items that they create, which includes feedback responses. The [Stakeholder group provides limited access](../../quickstart/get-started-stakeholder.md) to features and data for those members of your organization who do not have a TFS client access license (CAL). + + +## Related feedback notes + +- [Initiate a feedback request](get-feedback.md) +- [Respond to a feedback request](give-feedback.md) +- [Work as a stakeholder](../../quickstart/get-started-stakeholder.md) + + + diff --git a/docs/work/customize/_img/ALM_AWB_AddTaskConfirm.png b/docs/work/customize/_img/ALM_AWB_AddTaskConfirm.png new file mode 100644 index 00000000000..17b8e4b46b7 Binary files /dev/null and b/docs/work/customize/_img/ALM_AWB_AddTaskConfirm.png differ diff --git a/docs/work/customize/_img/ALM_AWB_Intro.png b/docs/work/customize/_img/ALM_AWB_Intro.png new file mode 100644 index 00000000000..b7efc2174f1 Binary files /dev/null and b/docs/work/customize/_img/ALM_AWB_Intro.png differ diff --git a/docs/work/customize/_img/ALM_CC_KBCardOptions.png b/docs/work/customize/_img/ALM_CC_KBCardOptions.png new file mode 100644 index 00000000000..5819c24b6fa Binary files /dev/null and b/docs/work/customize/_img/ALM_CC_KBCardOptions.png differ diff --git a/docs/work/customize/_img/ALM_CC_MoveCard.png b/docs/work/customize/_img/ALM_CC_MoveCard.png new file mode 100644 index 00000000000..dbb00d89d94 Binary files /dev/null and b/docs/work/customize/_img/ALM_CC_MoveCard.png differ diff --git a/docs/work/customize/_img/ALM_CC_TaskCardOptions.png b/docs/work/customize/_img/ALM_CC_TaskCardOptions.png new file mode 100644 index 00000000000..560bbc53bc4 Binary files /dev/null and b/docs/work/customize/_img/ALM_CC_TaskCardOptions.png differ diff --git a/docs/work/customize/_img/ALM_CC_UpdateFieldOnCard.png b/docs/work/customize/_img/ALM_CC_UpdateFieldOnCard.png new file mode 100644 index 00000000000..9e25b08aa0d Binary files /dev/null and b/docs/work/customize/_img/ALM_CC_UpdateFieldOnCard.png differ diff --git a/docs/work/customize/_img/ALM_CFW_ConfigFeatures.png b/docs/work/customize/_img/ALM_CFW_ConfigFeatures.png new file mode 100644 index 00000000000..6414ca4cbee Binary files /dev/null and b/docs/work/customize/_img/ALM_CFW_ConfigFeatures.png differ diff --git a/docs/work/customize/_img/ALM_CF_AppFaultErrMsg.png b/docs/work/customize/_img/ALM_CF_AppFaultErrMsg.png new file mode 100644 index 00000000000..0770b065ae5 Binary files /dev/null and b/docs/work/customize/_img/ALM_CF_AppFaultErrMsg.png differ diff --git a/docs/work/customize/_img/ALM_CF_SuccessConfig.png b/docs/work/customize/_img/ALM_CF_SuccessConfig.png new file mode 100644 index 00000000000..5eefa0a2882 Binary files /dev/null and b/docs/work/customize/_img/ALM_CF_SuccessConfig.png differ diff --git a/docs/work/customize/_img/ALM_CF_UpdatedUnconfig.png b/docs/work/customize/_img/ALM_CF_UpdatedUnconfig.png new file mode 100644 index 00000000000..02f0005436c Binary files /dev/null and b/docs/work/customize/_img/ALM_CF_UpdatedUnconfig.png differ diff --git a/docs/work/customize/_img/ALM_CF_WizardErrorMsg.png b/docs/work/customize/_img/ALM_CF_WizardErrorMsg.png new file mode 100644 index 00000000000..d66fc41a45b Binary files /dev/null and b/docs/work/customize/_img/ALM_CF_WizardErrorMsg.png differ diff --git a/docs/work/customize/_img/ALM_CW_CreateArea.png b/docs/work/customize/_img/ALM_CW_CreateArea.png new file mode 100644 index 00000000000..4569eddddfc Binary files /dev/null and b/docs/work/customize/_img/ALM_CW_CreateArea.png differ diff --git a/docs/work/customize/_img/ALM_CW_IterationHierarchy-After.png b/docs/work/customize/_img/ALM_CW_IterationHierarchy-After.png new file mode 100644 index 00000000000..d230b231895 Binary files /dev/null and b/docs/work/customize/_img/ALM_CW_IterationHierarchy-After.png differ diff --git a/docs/work/customize/_img/ALM_CW_IterationHierarchy-Before.png b/docs/work/customize/_img/ALM_CW_IterationHierarchy-Before.png new file mode 100644 index 00000000000..835a853a364 Binary files /dev/null and b/docs/work/customize/_img/ALM_CW_IterationHierarchy-Before.png differ diff --git a/docs/work/customize/_img/ALM_CW_OpenAreas.png b/docs/work/customize/_img/ALM_CW_OpenAreas.png new file mode 100644 index 00000000000..9f3c2de7206 Binary files /dev/null and b/docs/work/customize/_img/ALM_CW_OpenAreas.png differ diff --git a/docs/work/customize/_img/ALM_CW_OpenIterations.png b/docs/work/customize/_img/ALM_CW_OpenIterations.png new file mode 100644 index 00000000000..84e07a7fa3e Binary files /dev/null and b/docs/work/customize/_img/ALM_CW_OpenIterations.png differ diff --git a/docs/work/customize/_img/ALM_CW_OpenSecurityDialog.png b/docs/work/customize/_img/ALM_CW_OpenSecurityDialog.png new file mode 100644 index 00000000000..ae1bc0bbcf7 Binary files /dev/null and b/docs/work/customize/_img/ALM_CW_OpenSecurityDialog.png differ diff --git a/docs/work/customize/_img/ALM_CW_PermisionsForArea.png b/docs/work/customize/_img/ALM_CW_PermisionsForArea.png new file mode 100644 index 00000000000..86d7f5037ff Binary files /dev/null and b/docs/work/customize/_img/ALM_CW_PermisionsForArea.png differ diff --git a/docs/work/customize/_img/ALM_CW_SetIterationDate.png b/docs/work/customize/_img/ALM_CW_SetIterationDate.png new file mode 100644 index 00000000000..784c65e0d3a Binary files /dev/null and b/docs/work/customize/_img/ALM_CW_SetIterationDate.png differ diff --git a/docs/work/customize/_img/ALM_CW_StackedBarChart.png b/docs/work/customize/_img/ALM_CW_StackedBarChart.png new file mode 100644 index 00000000000..40b83aec5a9 Binary files /dev/null and b/docs/work/customize/_img/ALM_CW_StackedBarChart.png differ diff --git a/docs/work/customize/_img/IC539047.png b/docs/work/customize/_img/IC539047.png new file mode 100644 index 00000000000..ba2899d6821 Binary files /dev/null and b/docs/work/customize/_img/IC539047.png differ diff --git a/docs/work/customize/_img/IC633020.png b/docs/work/customize/_img/IC633020.png new file mode 100644 index 00000000000..2d3ae7cca8e Binary files /dev/null and b/docs/work/customize/_img/IC633020.png differ diff --git a/docs/work/customize/_img/IC710198.png b/docs/work/customize/_img/IC710198.png new file mode 100644 index 00000000000..94f8e5cecfb Binary files /dev/null and b/docs/work/customize/_img/IC710198.png differ diff --git a/docs/work/customize/_img/IC714121.png b/docs/work/customize/_img/IC714121.png new file mode 100644 index 00000000000..3036d2e6cb4 Binary files /dev/null and b/docs/work/customize/_img/IC714121.png differ diff --git a/docs/work/customize/_img/IC729919.png b/docs/work/customize/_img/IC729919.png new file mode 100644 index 00000000000..2458006afe5 Binary files /dev/null and b/docs/work/customize/_img/IC729919.png differ diff --git a/docs/work/customize/_img/add-modify-field-tfs-summary.png b/docs/work/customize/_img/add-modify-field-tfs-summary.png new file mode 100644 index 00000000000..74707fab957 Binary files /dev/null and b/docs/work/customize/_img/add-modify-field-tfs-summary.png differ diff --git a/docs/work/customize/_img/add-modify-wit-quick-add-panel.png b/docs/work/customize/_img/add-modify-wit-quick-add-panel.png new file mode 100644 index 00000000000..f2976344756 Binary files /dev/null and b/docs/work/customize/_img/add-modify-wit-quick-add-panel.png differ diff --git a/docs/work/customize/_img/add-modiy-wit-color-icon-state-color.png b/docs/work/customize/_img/add-modiy-wit-color-icon-state-color.png new file mode 100644 index 00000000000..48ec08a8d1a Binary files /dev/null and b/docs/work/customize/_img/add-modiy-wit-color-icon-state-color.png differ diff --git a/docs/work/customize/_img/alm-feature-tags.png b/docs/work/customize/_img/alm-feature-tags.png new file mode 100644 index 00000000000..c17e91d5c7d Binary files /dev/null and b/docs/work/customize/_img/alm-feature-tags.png differ diff --git a/docs/work/customize/_img/annotate-none.png b/docs/work/customize/_img/annotate-none.png new file mode 100644 index 00000000000..c487b17c6ce Binary files /dev/null and b/docs/work/customize/_img/annotate-none.png differ diff --git a/docs/work/customize/_img/annotate-settings.png b/docs/work/customize/_img/annotate-settings.png new file mode 100644 index 00000000000..c705f2184f4 Binary files /dev/null and b/docs/work/customize/_img/annotate-settings.png differ diff --git a/docs/work/customize/_img/annotate-task.png b/docs/work/customize/_img/annotate-task.png new file mode 100644 index 00000000000..909228e7d9f Binary files /dev/null and b/docs/work/customize/_img/annotate-task.png differ diff --git a/docs/work/customize/_img/annotate-test.png b/docs/work/customize/_img/annotate-test.png new file mode 100644 index 00000000000..9b2bef8f89b Binary files /dev/null and b/docs/work/customize/_img/annotate-test.png differ diff --git a/docs/work/customize/_img/areas-iterations-areas-intro-ts-2016.png b/docs/work/customize/_img/areas-iterations-areas-intro-ts-2016.png new file mode 100644 index 00000000000..a6e28ce5ef9 Binary files /dev/null and b/docs/work/customize/_img/areas-iterations-areas-intro-ts-2016.png differ diff --git a/docs/work/customize/_img/areas-iterations-iterations-intro-ts-2016.png b/docs/work/customize/_img/areas-iterations-iterations-intro-ts-2016.png new file mode 100644 index 00000000000..e43d8fd5a3a Binary files /dev/null and b/docs/work/customize/_img/areas-iterations-iterations-intro-ts-2016.png differ diff --git a/docs/work/customize/_img/bugs-appear-on-backlog.png b/docs/work/customize/_img/bugs-appear-on-backlog.png new file mode 100644 index 00000000000..786c503471b Binary files /dev/null and b/docs/work/customize/_img/bugs-appear-on-backlog.png differ diff --git a/docs/work/customize/_img/bugs-appear-on-board.png b/docs/work/customize/_img/bugs-appear-on-board.png new file mode 100644 index 00000000000..b95365a5cb7 Binary files /dev/null and b/docs/work/customize/_img/bugs-appear-on-board.png differ diff --git a/docs/work/customize/_img/bugs-appear-on-taskboard.png b/docs/work/customize/_img/bugs-appear-on-taskboard.png new file mode 100644 index 00000000000..9889927be48 Binary files /dev/null and b/docs/work/customize/_img/bugs-appear-on-taskboard.png differ diff --git a/docs/work/customize/_img/c-cards-navigate-to-test-suite.png b/docs/work/customize/_img/c-cards-navigate-to-test-suite.png new file mode 100644 index 00000000000..c88ccda86e9 Binary files /dev/null and b/docs/work/customize/_img/c-cards-navigate-to-test-suite.png differ diff --git a/docs/work/customize/_img/c-cards-test-settings.png b/docs/work/customize/_img/c-cards-test-settings.png new file mode 100644 index 00000000000..4d2dca05cc1 Binary files /dev/null and b/docs/work/customize/_img/c-cards-test-settings.png differ diff --git a/docs/work/customize/_img/card-customize-example-bug-with-callouts.png b/docs/work/customize/_img/card-customize-example-bug-with-callouts.png new file mode 100644 index 00000000000..ae617fb3f4c Binary files /dev/null and b/docs/work/customize/_img/card-customize-example-bug-with-callouts.png differ diff --git a/docs/work/customize/_img/create-hierarchy-with-different-wits.png b/docs/work/customize/_img/create-hierarchy-with-different-wits.png new file mode 100644 index 00000000000..39b692b6e27 Binary files /dev/null and b/docs/work/customize/_img/create-hierarchy-with-different-wits.png differ diff --git a/docs/work/customize/_img/cust-wit-form-edit-def-file.png b/docs/work/customize/_img/cust-wit-form-edit-def-file.png new file mode 100644 index 00000000000..62067dba566 Binary files /dev/null and b/docs/work/customize/_img/cust-wit-form-edit-def-file.png differ diff --git a/docs/work/customize/_img/cust-wit-form-export-def-file.png b/docs/work/customize/_img/cust-wit-form-export-def-file.png new file mode 100644 index 00000000000..150caf1ef1a Binary files /dev/null and b/docs/work/customize/_img/cust-wit-form-export-def-file.png differ diff --git a/docs/work/customize/_img/cust-wit-form-export-process.png b/docs/work/customize/_img/cust-wit-form-export-process.png new file mode 100644 index 00000000000..e0b5d528c70 Binary files /dev/null and b/docs/work/customize/_img/cust-wit-form-export-process.png differ diff --git a/docs/work/customize/_img/cust-wit-form-import-def-file.png b/docs/work/customize/_img/cust-wit-form-import-def-file.png new file mode 100644 index 00000000000..68f0d3e6561 Binary files /dev/null and b/docs/work/customize/_img/cust-wit-form-import-def-file.png differ diff --git a/docs/work/customize/_img/cust-wit-form-import-process.png b/docs/work/customize/_img/cust-wit-form-import-process.png new file mode 100644 index 00000000000..c9d25ce6117 Binary files /dev/null and b/docs/work/customize/_img/cust-wit-form-import-process.png differ diff --git a/docs/work/customize/_img/cust-wit-form-refresh-verify.png b/docs/work/customize/_img/cust-wit-form-refresh-verify.png new file mode 100644 index 00000000000..8eae980f692 Binary files /dev/null and b/docs/work/customize/_img/cust-wit-form-refresh-verify.png differ diff --git a/docs/work/customize/_img/custom-pick-list.png b/docs/work/customize/_img/custom-pick-list.png new file mode 100644 index 00000000000..702347c05bb Binary files /dev/null and b/docs/work/customize/_img/custom-pick-list.png differ diff --git a/docs/work/customize/_img/customize-cards-add-fields.png b/docs/work/customize/_img/customize-cards-add-fields.png new file mode 100644 index 00000000000..32a5e546e98 Binary files /dev/null and b/docs/work/customize/_img/customize-cards-add-fields.png differ diff --git a/docs/work/customize/_img/customize-cards-three-fields-added.png b/docs/work/customize/_img/customize-cards-three-fields-added.png new file mode 100644 index 00000000000..236fbcc3fda Binary files /dev/null and b/docs/work/customize/_img/customize-cards-three-fields-added.png differ diff --git a/docs/work/customize/_img/customize-work-phase2-step1.png b/docs/work/customize/_img/customize-work-phase2-step1.png new file mode 100644 index 00000000000..c7c6055a241 Binary files /dev/null and b/docs/work/customize/_img/customize-work-phase2-step1.png differ diff --git a/docs/work/customize/_img/customize-work-phase2-step2.png b/docs/work/customize/_img/customize-work-phase2-step2.png new file mode 100644 index 00000000000..aa0870f4aa1 Binary files /dev/null and b/docs/work/customize/_img/customize-work-phase2-step2.png differ diff --git a/docs/work/customize/_img/customize-work-phase2-step3.png b/docs/work/customize/_img/customize-work-phase2-step3.png new file mode 100644 index 00000000000..fe41ec8465b Binary files /dev/null and b/docs/work/customize/_img/customize-work-phase2-step3.png differ diff --git a/docs/work/customize/_img/customize-work-phase2-step4.png b/docs/work/customize/_img/customize-work-phase2-step4.png new file mode 100644 index 00000000000..f81ecfb2639 Binary files /dev/null and b/docs/work/customize/_img/customize-work-phase2-step4.png differ diff --git a/docs/work/customize/_img/customize-work-shared-queries-min.png b/docs/work/customize/_img/customize-work-shared-queries-min.png new file mode 100644 index 00000000000..b5481a70ef6 Binary files /dev/null and b/docs/work/customize/_img/customize-work-shared-queries-min.png differ diff --git a/docs/work/customize/_img/five-levels-portfolio-backlogs.png b/docs/work/customize/_img/five-levels-portfolio-backlogs.png new file mode 100644 index 00000000000..d53a65cc21b Binary files /dev/null and b/docs/work/customize/_img/five-levels-portfolio-backlogs.png differ diff --git a/docs/work/customize/_img/kanban-board-card-style-rule-example.png b/docs/work/customize/_img/kanban-board-card-style-rule-example.png new file mode 100644 index 00000000000..4f662eeba3a Binary files /dev/null and b/docs/work/customize/_img/kanban-board-card-style-rule-example.png differ diff --git a/docs/work/customize/_img/kanban-card-customize-open-settings.png b/docs/work/customize/_img/kanban-card-customize-open-settings.png new file mode 100644 index 00000000000..967fe26ce5f Binary files /dev/null and b/docs/work/customize/_img/kanban-card-customize-open-settings.png differ diff --git a/docs/work/customize/_img/kanban-card-customize-tag-colors.png b/docs/work/customize/_img/kanban-card-customize-tag-colors.png new file mode 100644 index 00000000000..78afca132c1 Binary files /dev/null and b/docs/work/customize/_img/kanban-card-customize-tag-colors.png differ diff --git a/docs/work/customize/_img/m-areas-add-area-path.png b/docs/work/customize/_img/m-areas-add-area-path.png new file mode 100644 index 00000000000..60c82aa744c Binary files /dev/null and b/docs/work/customize/_img/m-areas-add-area-path.png differ diff --git a/docs/work/customize/_img/m-new-form-admin-enable.png b/docs/work/customize/_img/m-new-form-admin-enable.png new file mode 100644 index 00000000000..e604f82dbee Binary files /dev/null and b/docs/work/customize/_img/m-new-form-admin-enable.png differ diff --git a/docs/work/customize/_img/m-new-form-try-switch.png b/docs/work/customize/_img/m-new-form-try-switch.png new file mode 100644 index 00000000000..04121c689aa Binary files /dev/null and b/docs/work/customize/_img/m-new-form-try-switch.png differ diff --git a/docs/work/customize/_img/m-new-form-user-story-switch-to-old-form.png b/docs/work/customize/_img/m-new-form-user-story-switch-to-old-form.png new file mode 100644 index 00000000000..cd1e7e7cb29 Binary files /dev/null and b/docs/work/customize/_img/m-new-form-user-story-switch-to-old-form.png differ diff --git a/docs/work/customize/_img/m_new-form-enable.png b/docs/work/customize/_img/m_new-form-enable.png new file mode 100644 index 00000000000..3ece8a5a022 Binary files /dev/null and b/docs/work/customize/_img/m_new-form-enable.png differ diff --git a/docs/work/customize/_img/manage-new-form-choose-opt-in-dialog.png b/docs/work/customize/_img/manage-new-form-choose-opt-in-dialog.png new file mode 100644 index 00000000000..787bc1f2efc Binary files /dev/null and b/docs/work/customize/_img/manage-new-form-choose-opt-in-dialog.png differ diff --git a/docs/work/customize/_img/manage-new-form-disable-dialog.png b/docs/work/customize/_img/manage-new-form-disable-dialog.png new file mode 100644 index 00000000000..6352d664daa Binary files /dev/null and b/docs/work/customize/_img/manage-new-form-disable-dialog.png differ diff --git a/docs/work/customize/_img/manage-new-form-enable-new-form-dialog.png b/docs/work/customize/_img/manage-new-form-enable-new-form-dialog.png new file mode 100644 index 00000000000..f57abb737fd Binary files /dev/null and b/docs/work/customize/_img/manage-new-form-enable-new-form-dialog.png differ diff --git a/docs/work/customize/_img/manage-new-form-enable-new-form.png b/docs/work/customize/_img/manage-new-form-enable-new-form.png new file mode 100644 index 00000000000..4d42d156ae3 Binary files /dev/null and b/docs/work/customize/_img/manage-new-form-enable-new-form.png differ diff --git a/docs/work/customize/_img/manage-new-form-open-tcp-admin-context.png b/docs/work/customize/_img/manage-new-form-open-tcp-admin-context.png new file mode 100644 index 00000000000..d093c0ac67a Binary files /dev/null and b/docs/work/customize/_img/manage-new-form-open-tcp-admin-context.png differ diff --git a/docs/work/customize/_img/mareas-work-areas-admin-page.png b/docs/work/customize/_img/mareas-work-areas-admin-page.png new file mode 100644 index 00000000000..cd1e0993e14 Binary files /dev/null and b/docs/work/customize/_img/mareas-work-areas-admin-page.png differ diff --git a/docs/work/customize/_img/modify-areas-its-areas-ts.png b/docs/work/customize/_img/modify-areas-its-areas-ts.png new file mode 100644 index 00000000000..1b288b12611 Binary files /dev/null and b/docs/work/customize/_img/modify-areas-its-areas-ts.png differ diff --git a/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017-1.png b/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017-1.png new file mode 100644 index 00000000000..d69fbccecd7 Binary files /dev/null and b/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017-1.png differ diff --git a/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017.png b/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017.png new file mode 100644 index 00000000000..e8cd30f5a2d Binary files /dev/null and b/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017.png differ diff --git a/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017_v0.png b/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017_v0.png new file mode 100644 index 00000000000..55b9b14f954 Binary files /dev/null and b/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017_v0.png differ diff --git a/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-ts.png b/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-ts.png new file mode 100644 index 00000000000..0af40fe95ff Binary files /dev/null and b/docs/work/customize/_img/modify-areas-its-choose-project-settings-admin-context-ts.png differ diff --git a/docs/work/customize/_img/modify-areas-its-iterations-scheduled-ts.png b/docs/work/customize/_img/modify-areas-its-iterations-scheduled-ts.png new file mode 100644 index 00000000000..191f1c22913 Binary files /dev/null and b/docs/work/customize/_img/modify-areas-its-iterations-scheduled-ts.png differ diff --git a/docs/work/customize/_img/modify-areas-its-iterations-ts.png b/docs/work/customize/_img/modify-areas-its-iterations-ts.png new file mode 100644 index 00000000000..118edb3ecb6 Binary files /dev/null and b/docs/work/customize/_img/modify-areas-its-iterations-ts.png differ diff --git a/docs/work/customize/_img/modify-areas-its-open-admin-context-tfs-2017-1.png b/docs/work/customize/_img/modify-areas-its-open-admin-context-tfs-2017-1.png new file mode 100644 index 00000000000..89098c9b39c Binary files /dev/null and b/docs/work/customize/_img/modify-areas-its-open-admin-context-tfs-2017-1.png differ diff --git a/docs/work/customize/_img/modify-areas-its-open-admin-context-ts.png b/docs/work/customize/_img/modify-areas-its-open-admin-context-ts.png new file mode 100644 index 00000000000..174ff1c6e66 Binary files /dev/null and b/docs/work/customize/_img/modify-areas-its-open-admin-context-ts.png differ diff --git a/docs/work/customize/_img/new-form-user-story.png b/docs/work/customize/_img/new-form-user-story.png new file mode 100644 index 00000000000..e7393d3da7a Binary files /dev/null and b/docs/work/customize/_img/new-form-user-story.png differ diff --git a/docs/work/customize/_img/select-nav-backlog-levels-config-tfs-2017.png b/docs/work/customize/_img/select-nav-backlog-levels-config-tfs-2017.png new file mode 100644 index 00000000000..89a1982bb3f Binary files /dev/null and b/docs/work/customize/_img/select-nav-backlog-levels-config-tfs-2017.png differ diff --git a/docs/work/customize/_img/select-nav-backlog-levels-config-ts.png b/docs/work/customize/_img/select-nav-backlog-levels-config-ts.png new file mode 100644 index 00000000000..b97ccb4ce3a Binary files /dev/null and b/docs/work/customize/_img/select-nav-backlog-levels-config-ts.png differ diff --git a/docs/work/customize/_img/show-bugs-settings-2017.png b/docs/work/customize/_img/show-bugs-settings-2017.png new file mode 100644 index 00000000000..6282063cee9 Binary files /dev/null and b/docs/work/customize/_img/show-bugs-settings-2017.png differ diff --git a/docs/work/customize/_img/show-bugs-settings-ts.png b/docs/work/customize/_img/show-bugs-settings-ts.png new file mode 100644 index 00000000000..3590cea9cdd Binary files /dev/null and b/docs/work/customize/_img/show-bugs-settings-ts.png differ diff --git a/docs/work/customize/_img/sprint-backlog-hierarchy.png b/docs/work/customize/_img/sprint-backlog-hierarchy.png new file mode 100644 index 00000000000..24eae4e1087 Binary files /dev/null and b/docs/work/customize/_img/sprint-backlog-hierarchy.png differ diff --git a/docs/work/customize/_img/sprint-backlog-leaf-only.png b/docs/work/customize/_img/sprint-backlog-leaf-only.png new file mode 100644 index 00000000000..51fb41ef483 Binary files /dev/null and b/docs/work/customize/_img/sprint-backlog-leaf-only.png differ diff --git a/docs/work/customize/_img/task-board-card-style-rule-stale-tasks.png b/docs/work/customize/_img/task-board-card-style-rule-stale-tasks.png new file mode 100644 index 00000000000..98f78fcc690 Binary files /dev/null and b/docs/work/customize/_img/task-board-card-style-rule-stale-tasks.png differ diff --git a/docs/work/customize/_img/task-board-customize-open-settings.png b/docs/work/customize/_img/task-board-customize-open-settings.png new file mode 100644 index 00000000000..b2cfbea3773 Binary files /dev/null and b/docs/work/customize/_img/task-board-customize-open-settings.png differ diff --git a/docs/work/customize/_img/team-settings.png b/docs/work/customize/_img/team-settings.png new file mode 100644 index 00000000000..e9047c1050c Binary files /dev/null and b/docs/work/customize/_img/team-settings.png differ diff --git a/docs/work/customize/_img/three-level-portfolio-backlog.png b/docs/work/customize/_img/three-level-portfolio-backlog.png new file mode 100644 index 00000000000..6ad657f8691 Binary files /dev/null and b/docs/work/customize/_img/three-level-portfolio-backlog.png differ diff --git a/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC649971.png b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC649971.png new file mode 100644 index 00000000000..d1b219b80db Binary files /dev/null and b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC649971.png differ diff --git a/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686839.png b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686839.png new file mode 100644 index 00000000000..a50e3b0f33f Binary files /dev/null and b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686839.png differ diff --git a/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686842.png b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686842.png new file mode 100644 index 00000000000..3a315b687cf Binary files /dev/null and b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686842.png differ diff --git a/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686846.png b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686846.png new file mode 100644 index 00000000000..90480b2d24d Binary files /dev/null and b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686846.png differ diff --git a/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686847.png b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686847.png new file mode 100644 index 00000000000..77b40f0bd25 Binary files /dev/null and b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC686847.png differ diff --git a/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC757673.png b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC757673.png new file mode 100644 index 00000000000..6a35c4a4b99 Binary files /dev/null and b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC757673.png differ diff --git a/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC778365.png b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC778365.png new file mode 100644 index 00000000000..8db45b91c63 Binary files /dev/null and b/docs/work/customize/_img/use-team-fields-instead-area-paths-support-teams/IC778365.png differ diff --git a/docs/work/customize/_img/vso-card-styling.png b/docs/work/customize/_img/vso-card-styling.png new file mode 100644 index 00000000000..9eed5622b4c Binary files /dev/null and b/docs/work/customize/_img/vso-card-styling.png differ diff --git a/docs/work/customize/_img/vso-kanban-card-customize.png b/docs/work/customize/_img/vso-kanban-card-customize.png new file mode 100644 index 00000000000..96f4c1a13a2 Binary files /dev/null and b/docs/work/customize/_img/vso-kanban-card-customize.png differ diff --git a/docs/work/customize/_img/vso-task-board-card-customize.png b/docs/work/customize/_img/vso-task-board-card-customize.png new file mode 100644 index 00000000000..274e149f2e4 Binary files /dev/null and b/docs/work/customize/_img/vso-task-board-card-customize.png differ diff --git a/docs/work/customize/about-areas-iterations.md b/docs/work/customize/about-areas-iterations.md new file mode 100644 index 00000000000..9e39cf0dc7b --- /dev/null +++ b/docs/work/customize/about-areas-iterations.md @@ -0,0 +1,109 @@ +--- +title: About area and iteration paths | VSTS & TFS +description: Understand how areas and iterations are used in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/25/2017 +--- + + +# About area and iteration paths (aka sprints) + +<b>VSTS | TFS 2017 | TFS 2015 | TFS 2013</b> + +Area paths allow you to group work items by team, product, or feature area. Whereas, iteration paths allow you to group work into sprints, milestones, or other event-specific or time-related period. Both these fields allow you to define a hierarchy of paths. + +You define area and iteration paths for a team project. Teams can then choose which paths are used to support their backlog and other Agile tools. To understand how Agile tools use area and iteration paths, see [Agile tools that rely on areas and iterations](../about-teams-and-settings.md). + +The areas and iterations you see depend on the process you used to create your team project. Here we show the defaults defined for the Scrum process. No dates are set. You set dates to correspond to your sprint or release schedules. + +> [!div class="mx-tdBreakAll"]   +> |Areas|Iterations|  +> |-------------|----------|   +> |<img src="_img/areas-iterations-areas-intro-ts-2016.png" alt="A set of sample area paths" style="border: 2px solid #C3C3C3;" /> | <img src="_img/areas-iterations-iterations-intro-ts-2016.png" alt="Default iterations, Scrum process" style="border: 2px solid #C3C3C3;" /> | + +## How many areas should a team define? + +You add areas to support your team's trace-ability and security requirements. Use areas to represent logical or physical components, and then create child areas to represent specific features. + +Add areas when you have these requirements: +* Filter queries based on a product or feature area +* Organize or group work items by team or sub-teams +* Restrict access to work items based on their area. + +Each team can create a hierarchy of areas under which the team can organize their backlog items, user stories, requirements, tasks, and bugs. + +Avoid creating an area structure that is too complex. You can create areas to partition permissions on work items, but complex trees require significant overhead for permission management. You might find that it is too much work to duplicate the structure and permissions in other team projects. + +## How many iterations should a team define? + +You define as many child iterations as you need to reflect your project lifecycle. These paths represent a series of events, such as sprints, pre-beta and beta deliverables, and other release milestones. Teams typically leave work items assigned to the team's default iteration if they are not yet scheduled for work or for a release. + +Add iterations to support these requirements: +* Define sprints your Scrum teams use to [plan and execute their sprints](../scrum/sprint-planning.md) +* Set up more complex multi-release and sprint cycles +* Filter queries based on sprints, milestones, or cycle time for your project +* Support future work that you're not ready to assign to a target release cycle. + +In the following example, Backlog, Beta 1, Beta 2, Release 1.0, and Release 2.0 are defined for the MyApplication team project. + +<img src="_img/ALM_CW_IterationHierarchy-Before.png" alt="Flat iteration hierarchy" style="border: 2px solid #C3C3C3;" /> + +As you create the backlog of product features and tasks, you can start to assign them to the milestones by which you expect the team to finish the features and tasks. +As your needs change, you can add events under each major milestone that reflect how your team schedules and manages its work. + +As the following example shows, the Beta 1 iteration now contains three child nodes, one for each sprint in the Beta 1 time period. + +<img src="_img/ALM_CW_IterationHierarchy-After.png" alt="Hierarchical Iteration Hierarchy" style="border: 2px solid #C3C3C3;" /> + +Iterations do not enforce any rules. For example, you can assign a task to an iteration but not close or complete it during that iteration. At the end of an iteration, you should find all work items that remain active or have not been closed for that iteration and take appropriate action. You can, for example, move them to a different iteration or return them to the backlog. + +<a name="permissions"></a> +## Required permissions + +To create or modify areas or iterations, you must either be a member of the **Project Administrators** group, or your **Create and order child nodes**, **Delete this node**, and **Edit this node** permissions must be set to **Allow** for the area or iteration node that you want to modify. + + +<a name="name-restrictions"></a> +## Naming restrictions + +The **Area Path** and **Iteration Path** fields, [data type=TreePath](../reference/define-modify-work-item-fields.md), consist of multiple node items which are separated by the backslash (\) character. We recommend that you minimize the names of nodes, and make sure that you conform to the following restrictions when adding child nodes: + +| Restriction type | Restriction | +| -------------------------------- | ------------------------------------------- | +| Node length | Must not contain more than 255 characters | +| Special characters for nodes | Must not contain Unicode control characters<br/>Must not contain any of the following characters: \ / $ ? * : " & > < # % + ,<br/>Must not contain characters that the [local file system prohibits](https://msdn.microsoft.com/library/aa365247.aspx). | +| Reserved names | Must contain more than a period (.) or two periods (..)<br/>Must not be a [system-reserved name](https://msdn.microsoft.com/library/aa365247.aspx) such as PRN, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM10, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, NUL, CON, or AUX<br/>| +| Path length | Must contain fewer than 4,000 Unicode characters | +| Path hierarchy depth | Must be fewer than 14 levels deep | + +## Related notes +As you can see, areas and iterations play a major role in supporting Agile tools and managing work items. You can learn more about working with these fields from these topics: + +* [Set project-level area paths](set-area-paths.md) +* [Set project-level iteration paths](set-iteration-paths-sprints.md) +* [Set team defaults](../scale/set-team-defaults.md) +* [Agile tools and sprint definitions ](../scrum/define-sprints.md) +* [Query by date or current iteration](../track/query-by-date-or-current-iteration.md) + + +<a name="export"></a> +### Export tree structures + +You can't export the structure of tree paths for one team project to use with another team project. + +<a name="field-rules"></a> +### Supported field rules (TFS) + +You can [specify only a small subset of rules](../reference/apply-rule-work-item-field.md#system), such as ```HELPTEXT``` and ```READONLY``` to System.XXX fields. + + +<a name="team-field"></a> +### Team field versus team area path (TFS) +If your organization has several teams that work from a common backlog and across many product areas, you might want to change how teams are configured. By [adding a custom field to represent teams](use-team-fields-instead-area-paths.md) in your organization, you can reconfigure the agile planning tools and pages to support your teams and decouple assignment to teams and area paths. + + + diff --git a/docs/work/customize/add-custom-field.md b/docs/work/customize/add-custom-field.md new file mode 100644 index 00000000000..657aa12237e --- /dev/null +++ b/docs/work/customize/add-custom-field.md @@ -0,0 +1,16 @@ +--- +title: Add a custom field | VSTS & TFS +description: Add a custom work item field to support queries, reports, and workflow for Visual Studio Team Services (VSTS) and TFS +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 7F1F85D2-2AA3-4EC8-A8C8-099933DF634E +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# Add or modify a field + +<b>VSTS (Hosted XML) | TFS 2017 | TFS 2015 | TFS 2013</b> + +To be written \ No newline at end of file diff --git a/docs/work/customize/add-custom-wit.md b/docs/work/customize/add-custom-wit.md new file mode 100644 index 00000000000..c6ca4ed5b89 --- /dev/null +++ b/docs/work/customize/add-custom-wit.md @@ -0,0 +1,17 @@ +--- +title: Add a custom work item type | VSTS & TFS +description: Add a custom work item type to support work tracking Visual Studio Team Services (VSTS) and TFS +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 31ACDBB4-561D-4927-B7F0-C6A1BC8E44D6 +ms.manager: douge +ms.author: kaelli +ms.date: 06/23/2017 +--- + + +# Add a custom work item type + +<b>VSTS (Hosted XML) | TFS 2017 | TFS 2015 | TFS 2013</b> + +!!! WORK IN PROGRESS !!! \ No newline at end of file diff --git a/docs/work/customize/add-features-manually.md b/docs/work/customize/add-features-manually.md new file mode 100644 index 00000000000..839fdeb0862 --- /dev/null +++ b/docs/work/customize/add-features-manually.md @@ -0,0 +1,653 @@ +--- +title: Manually add features after an upgrade | TFS +description: Manually update an existing team project to access new features after upgrading an on-premises Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 21AB0EE7-FB48-43E6-89EA-EC438C5D4F21 +ms.manager: douge +ms.author: kaelli +ms.date: 03/16/2017 +--- + +#Add updates to team projects manually + +[!INCLUDE [temp](../_shared/version-header-tfs-only.md)] + +>[!IMPORTANT] +>This topic applies only to team projects defined on an on-premises Team Foundation Server (TFS). Team projects hosted on VSTS [update automatically with each service upgrade](/vsts/release-notes/index). +> +>For an overview of customization options, see [Customize your work tracking experience](../customize/customize-work.md) + +You can update team projects that were created in earlier versions of Team Foundation Server (TFS) to use new features added with the upgrade to TFS. You should update team projects by using the [Configure Features wizard](configure-features-after-upgrade.md). However, if the wizard is unable to add a feature, you can add it manually. + +>[!NOTE] +>If you're upgrading a team project that was based on a Microsoft Solutions Framework (MSF) version 4.2 process template, follow the procedures provided in [Update a team project based on a MSF v4.2 process template](../reference/update-a-team-project-v4-dot-2-process-template.md). If you have several team projects you need to update, see [apply updates programmatically](configure-features-after-upgrade.md#program-updates). + + +##Update a team project +Prior to manually adding or editing a work tracking object, first [download the latest process template](#download-latest-pt). You'll use the definition files from the process template that most closely matches your existing team project. + +Several features, such as Code Review and Feedback, simply require importing WITs from the process template that you download, and updating the Categories and ProcessConfiguration file. Other features, however, may require more extensive changes depending on the customizations you've made to your team project. + +>[!NOTE] +>Follow the links for each step to detail procedures provide later in this topic.  + + +<table> +<tbody valign="top"> +<tr> +<th width="18%"> +Feature +</th> +<th width="82%"> +Steps to manually add a new feature +</th> +</tr> + +<tr> +<td> +Code Review +</td> +<td> +<ol> +<li>[Download the latest process template](#download-latest-pt): Get the definitions you need to import or update</li> +<li>[Import WITs](#import-wit): Code Review Request and Code Review Response </li> +<li>[Update Categories](#update-categories): +<ul> +<li>Add the Code Review Request and Code Review Response Categories </li> +<li>Add the Code Review Request and Code Review Response Categories to the Hidden Types Category</li> +</ul> +</li> +<li>[Update ProcessConfiguration](#update-processconfig): Add work item colors for Code Review Request and Code Review Response</li> +<li>To verify, [create a code review request](https://msdn.microsoft.com/en-us/library/hh474795.aspx).</li> +</ol> + +</td> +</tr> + + +<tr> +<td> +My Work +</td> +<td> +<ol> +<li>[Download the latest process template](#download-latest-pt): Get the definitions you need to import or update</li> +<li>[Import WITs](#import-wit): Code Review Request and Code Review Response </li> +<li>[Update Categories](#update-categories): Verify Bugs Category is present and contains the Bug WITs you use to track bugs.</li> +<li>[Update ProcessConfiguration](#update-processconfig): Add the ```BugWorkItems``` section and verify or add custom state-to-metastate mappings to the ```BugWorkItems``` section</li> +<li>To verify, [check in a code fix and check that the bug state automatically updates](https://msdn.microsoft.com/library/hh474795.aspx#bug_investigate).</li> +</ol> +<blockquote style="font-size: 13px">**Note:** If you use other WITs to support bug tracking or you've customized the workflow for the WITs you include in the Bug Category, see [Support bug update status using My Work](../reference/support-bug-update-status-using-my-work.md).</blockquote> +</td> +</tr> +<tr> +<td> +Feedback +</td> +<td> +<ol> +<li>[Download the latest process template](#download-latest-pt): Get the definitions you need to import or update</li> +<li>[Import WITs](#import-wit): Add the Feedback Request and Feedback Response WITs </li> +<li>[Update Categories](#update-categories): +<ul> +<li>Add the Feedback Request and Feedback Response Categories </li> +<li>Add the Feedback Request and Feedback Response Categories to the Hidden Types Category</li> +</ul> +</li> +<li>[Update ProcessConfiguration](#update-processconfig) : +<ul> +<li>Add the Feedback Request and Feedback Response Categories </li> +<li>Add ```TypeField``` field mappings to support Feedback </li> +<li>Add work item colors for Feedback Request and Feedback Response to ProcessConfiguration</li> +</ul> +</li> +<li>To verify, [create a feedback request](../connect/get-feedback.md). </li> +</ol> + +</td> +</tr> + +<tr> +<td> +Planning Tools +</td> +<td> + +<ol> +<li>[Download the latest process template](#download-latest-pt): Get the definitions you need to import or update</li> +<li>[Edit WITs](#edit-wit): +<ul> +<li>Add fields that support planning tools to WITs that you include for the Requirement Category, Task Category, and Bug Category </li> +<li>Edit the workflow of WITs that you include for the Requirement Category, Task Category, and Bug Category to support any-to-any transitions; add Removed state if not present. <br/> +If you're upgrading a team project that was based on version 5.0 of the Microsoft Solutions Framework (MSF) Agile process template, follow the procedures provided in [Update the workflow for agile team projects](../reference/update-the-workflow-for-agile-team-projects.md). </li> +</ul> +</li> +<li>[Update Categories](#update-categories): +<ul> +<li>Add Categories if not present</li> +<li>Add custom WITs to the Requirement Category and Task Category</li> +</ul> +</li> +<li>[Update ProcessConfiguration](#update-processconfig): +<ul> +<li>Add ProcessConfiguration if not present. </li> +<li>Add ```RequirementBacklog``` and ```TaskBacklog``` if not present. </li> +<li>Verify or update the metastate mappings for the Requirement Category, Task Category, and Bug Category </li> +<li>Add ```TypeField``` field mappings to support planning tools </li> +<li>Add work item colors for those WITs that you include in the Requirement Category, Task Category, and Bug Category </li> +</ul> +</li> +<li>To verify, [start creating your backlog](../backlogs/create-your-backlog.md). </li> +</ol> +</td> +</tr> +<tr> +<td> +Storyboarding +</td> +<td> +<ol> +<li>[Edit WITs](#edit-wit): Add ```StoryboardsControl``` to the ```FORM``` section of those WITs you include in the Requirement Category; for example, add it to the User Story (Agile), Requirement (CMMI), or Product backlog item (Scrum) </li> +<li>To verify, [open Storyboarding from the WIT you updated](../office/storyboard-your-ideas-using-powerpoint.md). </li> +</ol> +</td> +</tr> +<tr> +<td> +Portfolio Backlogs +</td> +<td> +<ol> +<li>[Download the latest process template](#download-latest-pt): Get the definitions you need to import or update</li> +<li>[Import WITs](#import-wit): Add the Feature and Epic WITs </li> +<li>[Update Categories](#update-categories): Add the Feature and Epic Categories</li> +<li>[Update ProcessConfiguration](#update-processconfig): +<ul> +<li>Add ```PortfolioBacklogs``` section </li> +<li>Add work item colors for Feature and Epic to ProcessConfiguration </li> +<li>Add the ```HiddenBacklogs``` property to ProcessConfiguration </li> +</ul> +</li> +<li>To verify, [add some features and epics](../backlogs/organize-backlog.md).</li> +</ol> +<blockquote style="font-size: 13px">**Note:** To add additional portfolio backlogs or further customize your portfolio backlogs, see [Add a portfolio backlog level](add-portfolio-backlogs.md).</blockquote> +</td> +</tr> +<tr> +<td> +Shared Parameters +</td> +<td> +<ol> +<li>[Download the latest process template](#download-latest-pt): Get the definitions you need to import or update</li> +<li>[Import WITs](#import-wit): Add the Shared Parameter WIT </li> +<li>[Update Categories](#update-categories): +<ul> +<li>Add the Shared Parameter Category </li> +<li>Add the Shared Parameter Category to the Hidden Types Category</li> +</ul> +</li> +<li>[Update ProcessConfiguration](#update-processconfig): Add a work item color for the Shared Parameter to ProcessConfiguration</li> +<li>[Verify that you can add a shared parameter set or convert to shared parameters](../../manual-test/repeat-test-with-different-data.md). </li> +</ol> +</td> +</tr> +<tr> +<td> +Test Plan and Test Suite +</td> +<td> +<ol> +<li>[Download the latest process template](#download-latest-pt): Get the definitions you need to import or update</li> +<li>[Import WITs](#import-wit): Test Plan and Test Suite </li> +<li>[Update Categories](#update-categories): +<ul> +<li>Add the Test Plan and Test Suite Categories </li> +<li>Add the Test Plan and Test Suite Categories to the Hidden Types Category</li> +</ul> +</li> +<li>[Run the TfsConfig TCM](#run-tfsconfig): Migrate existing test plans and suites to work item based test plans and suites.</li> +<li>To verify, [create a test plan using the web portal](https://msdn.microsoft.com/library/dd380763.aspx) </li> +</ol> +</td> +</tr> + +<tr> +<td> +Bug Behavior +</td> +<td> + +<ol> +<li>[Download the latest process template](#download-latest-pt): Get the definitions you need to import or update</li> +<li>[Edit WITs](#edit-wit): +<ul> + <li>Agile Bug: + <ul> + <li> Add fields: ```Activity```, ```Story Points```, ```Original Work```, ```Completed Work```, ```Remaining Work```, ```Severity```, and ```Value Area``` </li> + <li>Add ```New``` state and corresponding workflow transitions</li> + <li>Add field rules to copy or set defaults during state transitions </li> + <li>Add ```Fixed and verified``` as a Resolved Reason </li> + </ul> + </li> + + <li>CMMI Bug: + <ul> + <li> Add fields: ```Size```, ```Discipline```, ```Original Work```, ```Completed Work```, and ```Value Area``` </li> + <li>Add ```New``` state and corresponding workflow transitions</li> + </ul> + </li> + + + <li>Scrum Bug: + <ul> + <li>Add fields: ```Activity```, ```Remaining Work```, ```Priority```, and ```Value Area```</li> + <li>Add rule to zero out ```Remaining Work``` when ```State=Done```</li> + </ul> + </li> +</ul> +</li> +<li>[Edit ProcessConfiguration](#edit-processconfig): Add the ```BugsBehavior``` property </li> +<li>To verify, [go to the team settings admin page to choose how the team tracks bugs](show-bugs-on-backlog.md).</li> +</ol> + +</td> +</tr> + +</tbody> +</table> + +<a id="download-latest-pt"> </a> + +##Get the latest version of the most compatible process template + +The quickest way to make many of these updates is to copy definition files from the latest process template and import them to your team project. + +1. Open the same version of Visual Studio or Team Explorer as the on-premises TFS that you connect to. For example, if you connect to a TFS 2015 instance, you must connect from Visual Studio 2015 or Team Explorer 2015. + You can always download a free version of Team Explorer from the [Visual Studio download site](https://www.visualstudio.com/downloads/download-visual-studio-vs). + + If you aren't a member of the Project Collection Administrators group, <a href="https://msdn.microsoft.com/en-us/library/dd547204(v=vs.140).aspx">get added as one</a>. + +2. Open the Process Template Manager from the **Team, Team Project Collection Settings** menu. + + ![Open Process Template Manager](../guidance/_img/open-process-template-manager.png) + + You'll see a list of each process template that has been uploaded to the team project collection. + + ![Select process template to work with](../guidance/_img/process-template-manager.png) + + The **Upload**, **Download**, **Make Default**, and **Delete** buttons are disabled when you don't have the necessary permissions to manage process templates. + +3. Download the process template to a local computer, select a folder where the process template will be downloaded. + + Choose the process that corresponds to the one you used previously to create your team project. For example, if you're updating a team project based on the Scrum process template, then select **Scrum**. Note that all version numbers have been removed from the process templates. If you don't see Agile, CMMI, or Scrum, then you need to [update TFS](https://www.visualstudio.com/downloads/download-visual-studio-vs). + +You can determine which process template to select based on the [work item types defined for your existing team project](../guidance/manage-process-templates.md#wit_correlation). + +To learn more about managing process templates, see, [Upload or download a process template](../guidance/manage-process-templates.md). + +<a id="import-wit"> </a> + +##Import a WIT +1. Open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ```cd %programfiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE``` + + On a 32-bit edition of Windows, replace ```%programfiles(x86)%``` with ```%programfiles%```. + + The version of Visual Studio or Team Explorer must match the same version as the on-premises TFS that you connect to. For example, if you connect to a TFS 2015 instance, you must connect from Visual Studio 2015 or Team Explorer 2015. + +2. Enter the ```witadmin importwitd``` command, substituting your data for the arguments that are shown. + + ```witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\WITDefinitionFile.xml"``` + + For *CollectionURL* specify the URL of a team project collection and for *ProjectName* specify the name of a team project defined within the collection. You must specify the URL in the following format: ```http://ServerName:Port/VirtualDirectoryName/CollectionName```. + + For *DirectoryPath*, specify the path to the ```WorkItem Tracking/TypeDefinitions``` folder that holds the process template that you downloaded. The directory path must follow this structure: ```Drive:\TemplateFolder\WorkItem Tracking\TypeDefinitions```. + + For example, import the Feedback Request WIT: + + ```witadmin importwitd /collection:"http://MyServer:8080/tfs/DefaultCollection"/p:MyProject /f:"C:\MyTemplates\WorkItem Tracking\TypeDefinitions\FeedbackRequest.xml"``` + +Here's a checklist of WITs to import to support new features: +- **Portfolio Backlogs**: Epic and Feature +- **Code Review**: Code Review Request and Code Review Response +- **Feedback**: Feedback Request and Feedback Response +- **Shared Parameters**: Shared Parameters +- **Test Plan and Test Suite**: Test Plan and Test Suite + +<a id="edit-wit"> </a> + +##Edit a WIT +Depending on the customizations that you've made and the features you want to enable, you may need to update one or more WIT definition files. If you haven't customized a WIT, simply import the latest version. Otherwise, you can copy XML syntax from the WIT files you've downloaded from the latest process template. + +1. Export the WITs that you have defined for the corresponding category. + + ```witadmin exportwitd /collection:CollectionURL /p:ProjectName /n:TypeName [/f:FileName]``` + +2. Make the updates required to support your team project and add new features. + + Here's a checklist of updates to make: + <table> + <tbody valign="top"> + <tr> + <th>Feature supported</th> + <th>WIT Category</th> + <th>Edits to make</th> + </tr> + <tr> + <td>Planning Tools</td> + <td>Requirement Category</td> + <td> + <p>For those WITs that you include in the Requirement Category, add or verify that the following fields are defined in the ```FIELDS``` section: </p> + <ul> + <li>Agile: Stack Rank<sup> 1</sup>, User Story, Area Path, Priority, Acceptance Criteria, and Value Area </li> + <li>CMMI: Stack Rank<sup> 1</sup>, Size, Area Path, and Value Area </li> + <li>Scrum: Backlog Priority<sup> 1</sup>, Effort, Area Path, and Value Area + <p>The fields you enter must correspond to the field values assigned in the ProcessConfiguration file for ```type=Order```, ```type=Effort```, and ```type=Team```. </p></li> + <li>All fields that are included in the ```RequirementBacklog``` -```AddPanel``` section of the ProcessConfiguration file </li> + <li>(Optional: All fields that are included in the ```RequirementBacklog``` -```AddPanel``` section of the ProcessConfiguration file </li> + <li>All fields that are included in the ```RequirementBacklog``` -```AddPanel``` section of the ProcessConfiguration file </li> + </ul> + <p>Update or verify the ```WORKFLOW``` section as follows: </p> + <ul> + <li>Agile, User Story: Add transitions from ```Active``` to ```Removed``` and ```Resolved``` to ```Removed```; remove rules that populate ```Activated By``` and ```Activated Date``` fields when state=```Resolved``` </li> + <li>Scrum, Product backlog item: Add transition from ```Committed``` to ```Removed``` </li> + </ul> + <p>If you've customized the ```WORKFLOW```, make sure to define the required state-to-metastate mappings in the [ProcessConfiguration ```RequirementBacklog``` section](#edit-processconfig). </p> + </td> + </tr> + <tr> + <td>Planning Tools and Bug Behavior</td> + <td>Bug Category</td> + <td> + <p>For Bug or those WITs that you include in the Bug Category, add or verify that the following fields are defined in the ```FIELDS``` section: </p> + <ul> + <li>Agile: Stack Rank<sup> 1</sup>, User Story, Activity, Area Path, Remaining Work, Original Work and Completed Work</li> + <li>CMMI: Stack Rank<sup> 1</sup>, Size, Area Path, Discipline, Remaining Work, Original Work and Completed Work</li> + <li>Scrum: Backlog Priority<sup> 1</sup>, Effort, Activity, Area Path, and Remaining Work + <p>The fields you enter must correspond to the field values assigned in the ProcessConfiguration file for ```type=Order```, ```type=Effort```, ```type=Team```, ```type=Activity```, and ```type=RemainingWork```. </p></li> + <li>All fields that are included in the ```BugWorkItems``` - ```AddPanel``` section of the ProcessConfiguration file</li> + </ul> + <p>Update or verify that the ```WORKFLOW``` section supports the following:</p> + <ul> + <li>Agile: ```New``` and ```Removed``` states and transitions from ```New``` and ```Removed``` to all other states </li> + <li>CMMI: Stack Rank<sup> 1</sup>, Size, Area Path, Discipline, Remaining Work, Original Work and Completed Work</li> + <li>Scrum: Backlog Priority<sup> 1</sup>, Effort, Activity, Area Path, and Remaining Work + <p>The fields you enter must correspond to the field values assigned in the ProcessConfiguration file for ```type=Order```, ```type=Effort```, ```type=Team```, ```type=Activity```, and ```type=RemainingWork```. </p></li> + <li>All fields that are included in the ```BugWorkItems``` - ```AddPanel``` section of the ProcessConfiguration file</li> + </ul> + <p>If you've customized the ```WORKFLOW```, make sure to define the required state-to-metastate mappings in the [ProcessConfiguration ```BugWorkItems``` section](#edit-processconfig). </p> + </td> + </tr> + <tr> + <td>Planning Tools</td> + <td>Task Category</td> + <td> + <p>For Task or those WITs that you include in the Task Category, add or verify that the following fields are defined in the ```FIELDS``` section: </p> + <ul> + <li>Agile: Stack Rank<sup> 1</sup>, User Story, Activity, Area Path, Remaining Work, Original Work and Completed Work</li> + <li>CMMI: Stack Rank<sup> 1</sup>, Size, Area Path, Discipline, Remaining Work, Original Work and Completed Work</li> + <li>Scrum: Backlog Priority<sup> 1</sup>, Effort, Activity, Area Path, and Remaining Work + <p>The fields you enter must correspond to the field values assigned in the ProcessConfiguration file for ```type=Order```, ```type=Effort```, ```type=Team```, ```type=Activity```, and ```type=RemainingWork```. </p></li> + <li>All fields that are included in the ```TaskBacklog``` -```AddPanel``` section of the ProcessConfiguration file </li> + </ul> + <p>Add a rule to the ```WORKFLOW``` section to empty the Remaining Work field when the ```State=Closed``` or ```State=Done```. For example: </p> + ```<STATE value="Closed"> ``` +    ```<FIELDS> ``` +       ``` <FIELD refname="Microsoft.VSTS.Common.ClosedDate"> ``` +          ```<REQUIRED /> ``` +          ```</FIELD> ``` +          ```<FIELD refname="Microsoft.VSTS.Scheduling.RemainingWork"> ``` +          ``` <EMPTY /> ``` +       ``` </FIELD> ``` +    ```</FIELDS> ``` + ```</STATE> ``` +<p>If you've customized the ```WORKFLOW```, make sure to define the required state-to-metastate mappings in the [ProcessConfiguration ```TaskBacklog``` section](#edit-processconfig). </p></td> +</tr> + <tr> + <td>Portfolio Backlog</td> + <td>Feature Category</td> + <td> + <p>Update the Feature WIT: </p> + <ul> + <li>Add the following fields to the ```FIELDS``` and ```FORM``` sections: Time Criticality, Effort, and Value Area</li> + <li>Add the ID to the ```FORM``` section </li> + <li>Add a Transition from ```Active``` to ```Removed``` in the ```WORKFLOW``` section</li> + </ul> +</td> +</tr> +</tbody> +</table> +<sup>1</sup> Don't add the Backlog Priority or Stack Rank fields to the ```FORM``` section. These fields support ordering of backlog items and aren't meant to be set manually. + +3. Import your WIT file. + ```witadmin importwitd /collection:CollectionURL [/p:Project] /f:FileName "``` + + + +<a id="update-categories"> </a> + +##Update Categories + +>[!TIP] +>See also [Use categories to group work items](../reference/use-categories-to-group-work-item-types.md) and [Import and export categories](../reference/witadmin/witadmin-import-export-categories.md). + +1. Export your categories file. + + ```witadmin exportcategories /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\categories.xml"``` + + If you don't have a categories file, then copy the one from a default process template. Categories were introduced with TFS 2012 to more easily manage multiple work item types (WITs) as a group. + +2. Make the updates required to support your team project and add new features. + Here's a checklist of categories to import to add or verify to support new features: + + - **Code Review**: Code Review Request Category and Code Review Response Category + - **Feedback**: Feedback Request Category and Feedback Response Category + - **Planning Tools**: Requirement Category, Task Category, Bug Category, and Hidden Types Category + - **Shared Parameters**: Shared Parameters Category + - **Portfolio Backlogs**: Epic Category and Feature Category + - **Test Plan and Test Suite**: Test Plan Category and Test Suite Category + + If you use custom WITs to support requirements or tasks, then you'll want to add or modify the Requirement Category and Task Category. For example, Fabrikam Fiber uses the following definitions to support their requirement tracking: +``` + <CATEGORY name="Requirement Category" refname="Microsoft.RequirementCategory"> + <DEFAULTWORKITEMTYPE name="Customer App" /> + <WORKITEMTYPE name="Service App" /> + </CATEGORY> +``` + +3. Import your categories file. + + ```witadmin importcategories /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\categories.xml"``` + +<blockquote style="font-size: 13px">**Additional resources:** [Use categories to group work items](../reference/use-categories-to-group-work-item-types.md), [Import and export categories](../reference/witadmin/witadmin-import-export-categories.md +)</blockquote>   + +<a id="update-processconfig"> </a> + +##Update ProcessConfiguration + +Agile planning tools and Portfolio Backlogs depend on the WITs, categories, and process configuration definitions that are made. These definitions are interdependent. Always add new WITs, update categories, and then update the ProcessConfiguration in that order. + +<ol> +<li>Export your ProcessConfiguration file. <br/> + +```witadmin exportprocessconfig /collection:CollectionURL /p:ProjectName /f:FileName```<br/> + +<p>If you don't have a ProcessConfiguration file, then copy the one from a default process template. ProcessConfiguration was introduced with TFS 2013 and replaced the CommonConfiguration and AgileConfiguration files.</p> +</li> +<li>Make the updates required to support your team project and add new features. If you've customized the workflow for WITs defined in the Requirement, Task, Bug, Epic, or Feature categories, review [Process configuration, Map workflow states to metastates](../reference/process-configuration-xml-element.md#map). <br/> + +<p>Here's a checklist of updates to make:</p> +<table> +<tbody valign="top" width="100%"> +<tr> +<th width="20%">Feature supported</th> +<th width="15%">Section </th> +<th width="65%">Edits to make</th> +</tr> +<tr> +<td>Planning Tools</td> +<td>```RequirementBacklog```</td> +<td> +Verify or update the state-to-metastate mappings for each WIT in the Requirement Category: <br/> +<ul> +<li>Map the start of each workflow state to ```type="Proposed"``` </li> +<li>Map each intermediate workflow state you want to have show up on the Kanban board to ```type="InProgress"``` </li> +<li>Map the end of each workflow state to ```type="Complete"``` </li> +<li>Make sure that you have only one State mapped to ```type="Complete"```</li> +</ul> +For example: <br/> +   ```<States> ``` +      ```<State value="New" type="Proposed" /> ``` +      ```<State value="Active" type="InProgress" /> ``` +      ```<State value="Resolved" type="InProgress" /> ``` +      ```<State value="Closed" type="Complete" /> ``` +   ```</States> ``` +</td> +</tr> +<tr> +<td>Planning Tools</td> +<td>```TaskBacklog```</td> +<td> +Verify or update the state-to-metastate mappings for each WIT in the Task Category: <br/> +<ul> +<li>Map the start of each workflow state to ```type="Proposed"``` </li> +<li>Map each intermediate workflow state you want to have show up on the Kanban board to ```type="InProgress"``` </li> +<li>Map the end of each workflow state to ```type="Complete"``` </li> +<li>Make sure that you have only one State mapped to ```type="Complete"```</li> +</ul> +</td> +</tr> +<tr> +<td>Planning Tools</td> +<td>```BugWorkItems```</td> +<td> +<p>Verify or update the state-to-metastate mappings for each WIT in the Bug Category: </p> +<ul> +<li>Map the start of each workflow state to ```type="Proposed"``` </li> +<li>Map each intermediate workflow state you want to have show up on the Kanban board to ```type="InProgress"``` </li> +<li>Map the end of each workflow state to ```type="Complete"``` </li> +<li>Make sure that you have only one State mapped to ```type="Complete"```</li> +</ul> +</td> +</tr> +<tr> +<td>Portfolio Backlogs</td> +<td>```PortfolioBacklogs```</td> +<td> +Add PortfolioBacklogs section and verify the following: +<ul> +<li>Each intermediate portfolio backlog specifies the next level portfolio backlog as its parent </li> +<li>The top portfolio backlog doesn't specify a parent portfolio backlog </li> +</ul> +For example:<br/> +```<PortfolioBacklog category="Microsoft.FeatureCategory" pluralName="Features" singularName="Feature" parent="Microsoft.EpicCategory" workItemCountLimit="1000">``` <br/> +```. . . ``` <br/> +```</PortfolioBacklog>``` <br/> +</td> +</tr> +<tr> +<td>Planning Tools</td> +<td>```WorkItemColors```</td> +<td> +Add primary and secondary HEX colors for each WIT defined for the team project. For example: +``` <WorkItemColor primary="FF009CCC" secondary="FFD6ECF2" name="User Story" /> ``` +``` <WorkItemColor primary="FF773B93" secondary="FFEEE2F2" name="Feature" /> ``` +``` <WorkItemColor primary="FFFF7B00" secondary="FFFFD7B5" name="Epic" /> ``` +</td> +</tr> +<tr> +<td>Planning Tools and Feedback</td> +<td>```TypeFields```</td> +<td> +<p>Make sure that the fields specified for each ```TypeField``` map to those in use for the WITs defined for the Requirement Category, Task Category, and Bug Category.<sup>1</sup> For example: </p> +``` <TypeField refname="System.AreaPath" type="Team" /> ``` +``` <TypeField refname="Microsoft.VSTS.Scheduling.RemainingWork" type="RemainingWork" format="{0} h" /> ``` +``` <TypeField refname="Microsoft.VSTS.Common.StackRank" type="Order" /> ``` +<br/> +</td> +</tr> +<tr> +<td>Portfolio Backlogs and Bug Behavior</td> +<td>```Properties```</td> +<td> +Add the ```Properties``` section. For example: <br/> +```<Properties> ``` +   ```<Property name="BugsBehavior" value="AsTasks" /> ``` +   ```<Property name="HiddenBacklogs" value="Microsoft.EpicCategory" /> ``` +```</Properties> ``` + +<br/> +</td> +</tr> +</tbody> +</table> +<p><sup>1</sup> Don't modify the ```TypeFieldValues``` for the ```Microsoft.VSTS.Feedback.ApplicationType```. </p> +</li> +<li>Import your ProcessConfiguration file.<br/> +```witadmin importprocessconfig /collection:CollectionURL /p:ProjectName /f:FileName```<br/> +</li> +</ol> + +>[!TIP] +>See also [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md). + + +<a id="run-tfsconfig"> </a> + +##Migrate existing test plans and suites + +Migrate existing test plans and suites to work item based test plans and suites. + +1. Open a Command Prompt window on the TFS application-tier server: + ```cd %programfiles%\TFS 14.0\Tools``` + +2. Run the ```TfsConfig TCM``` command. + ```TFSConfig TCM /upgradeTestPlans /CollectionName:CollectionName /TeamProject:TeamProjectName``` + + For example: + + ```TFSConfig TCM /upgradeTestPlans /CollectionName:"Fabrikam Fiber Collection" /TeamProject:"Fabrikam Fiber"``` + +3. Respond to the questions that appear. + ``` + Logging sent to file C:\ProgramData\Microsoft\Team Foundation\Server Configuration\Logs\TPC_UPG_AT_0515_143821.log + Microsoft (R) TfsConfig - Team Foundation Server Configuration Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + Command: tcm + Microsoft (R) TfsConfig - Team Foundation Server Configuration Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + In order to upgrade the test plans, you have to complete the following steps: + 1. Import the test plan work item definition into the project. Have you complete + d this step? (Yes/No) Yes + 2. Import the test plan category into the project. Have you completed this step? + (Yes/No) Yes + + Test plan migration job successfully scheduled. + ``` +4. If you're migrating a large quantity of test plans and test suites, you can run the following command to monitor the progress of data migration. + + ```TFSConfig TCM /upgradeStatus /collectionName:CollectionName /TeamProject:TeamProjectName``` + +After a successful data migration, all test management data should be available for use. For more information about this utility, go here. + +##Review and verify access to new features +After you update your team project manually, you have access to the latest features. However, you still might want to make some additional configurations or customizations to support your work tracking needs. + +See [Additional configuration options](additional-configuration-options.md) for information on how to verify or activate each feature. + + +##Related notes +You can learn more about the objects used to track work and support Agile tools from these topics: + +- [Choose a process](../guidance/choose-process.md) +- [Customize your work tracking experience](customize-work.md) +- [Customize a process template](../reference/process-templates/customize-process.md) +- [Overview of process template files](../reference/process-templates/overview-process-template-files.md) + +If you need to rename a WIT, use **witadmin renamewitd** command to change the name, and then update the Categories definition file. See [Add or modify a work item type](add-modify-wit.md). diff --git a/docs/work/customize/add-modify-field.md b/docs/work/customize/add-modify-field.md new file mode 100644 index 00000000000..0629bd1c43a --- /dev/null +++ b/docs/work/customize/add-modify-field.md @@ -0,0 +1,469 @@ +--- +title: Add or modify a field | VSTS & TFS +description: Modify or add a work item field to support queries, reports, and workflow for Visual Studio Team Services (VSTS) and TFS +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 32775755-CCC1-4859-95ED-0FF9FF8DBCD2 +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# Add or modify a field + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +Your team project contains 100 or more data fields, based on the process—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md)—used to create the team project. You update data by [modifying the data field within a work item](../backlogs/add-work-items.md). Each work item is associated with a work item type (WIT), and the data you can track corresponds to the fields assigned to the WIT. + +You can modify an existing field or add a custom field to support tracking additional data requirements. For example, you can customize the pick list within a drop-down menu, add a rule to specify a default value or restrict the value it can take, or change a field attribute. + +Not all pick lists are defined in the same way. Some lists are defined through the user interface, the workflow for a WIT, or by adding user accounts to a team project as indicated in the following table. + +>[!NOTE] +><b>Feature availability: </b>You can exercise some features only from an on-premises TFS and are noted as such. + + +> [!div class="mx-tdBreakAll"] +> |WIT definition |Command line change | +> |-------------|----------| +> |- [Customize a pick list](add-modify-field.md#picklist)<br/>- [Add rules to a field](add-modify-field.md#add-rules)<br/>- [Add a custom field](add-modify-field.md#add-custom-field)<br/>- [Change the field label on the form](add-modify-field.md#change-label)<br/>- [Add a custom control](add-modify-field.md#custom-control)<br/>- [Limit the Assigned To field list](add-modify-field.md#limit-account-names) |- [List fields](add-modify-field.md#list-fields)<br/>- [Change a field attribute](add-modify-field.md#change-attribute) (On-premises XML)<br/>- [Delete a field](add-modify-field.md#delete-field) (On-premises XML)<br/>- [Index a field](add-modify-field.md#index-field) (On-premises XML) | + + + +##Methods by which work item fields get added +You use work item fields to track data for a work item type and to define the filter criteria for queries as well as to generate reports. Any data element, except for system fields, that you want to track must be defined as a work item field. You can define work item fields within the definition of a work item type or global workflow. + +Work item fields are maintained for a team project collection. You add fields when you perform one of the following tasks: + +- **Create a team project**. All fields that are defined within the definitions for work item types or global workflow and that are defined for the selected process template are created. The core system fields are automatically defined for every work item type that is defined for a team project. For a list of these fields, see [Work item field index](../guidance/work-item-field.md). + +- **Import a WIT definition**. All new fields that are defined within the definition for a type of work item are added to the collection. For more information, see [All WITD XML elements reference](../reference/all-witd-xml-elements-reference.md). + +- **Import a global workflow definition**. All new fields that are defined within the global workflow are added to the collection. You define a global workflow when you want to maintain a set of work item fields that several types of work items share. For more information, see [Customize global workflow](../reference/global-workflow-xml-element-reference.md). + +- **Map a project collection to an instance of Project Web App (PWA)**. After you install the Team Foundation Server Extensions for Project Server, configure the integration by mapping various components of Team Foundation. When you map a collection, a global workflow definition that supports several fields in Project Server fields is imported. For more information, see [Project Server fields added to TFS to support data synchronization](../tfs-ps-sync/project-server-fields-added-to-tfs.md). + +All fields that are defined in all WITs and all global workflows for all team projects make up the complete set of fields defined within the collection. You can change the attribute of, rename, and delete existing fields. However, you incur certain costs when you make these kinds of changes, specifically for on-premises TFS and reporting. + +To add or customize a field for a collection, modify the XML content for the WIT definition. Define each field through a **FIELD** element within the **FIELDS** section of the WIT definition. For information about the structure and location of these files, see [All FIELD XML elements reference](../reference/all-field-xml-elements-reference.md). + +<a id="modify-field"> </a> +##Add a field, or apply a rule, or change an attribute + +To add a custom field, add field rules, or change the label of a field on a work item form, you modify the work item type (WIT) or types that use the field. Follow the [customization sequence](customize-work.md) that matches your process model. + +To change a field attribute or rename a field, use the **witadmin** command line tool. Otherwise, to modify a field, you add or modify the rules associated with the field within a WIT definition. + +![Summary of field attributes and field rules ](_img/add-modify-field-tfs-summary.png) + +<a id="edit"> </a> +### To edit a WIT definition file + +To add rules or add a custom field, export, edit, and then import the WIT definition file. + +[!INCLUDE [temp](../_shared/process-editor.md)] + +Any field that you want to use to track data must be added to the WIT definition file. This is true for all but system fields (fields whose reference name start with **System.**). All System fields are defined for all WITs, whether or not you include them in WIT definition. To learn more about each field, see [Work item field index](../guidance/work-item-field.md). + +<a id="boolean-field"> </a> +### Add a checkbox or Boolean field + +>[!NOTE] +><b>Feature availability:</b>The Boolean data type is supported for Hosted XML (VSTS) and for On-Premises XML, for TFS 2017.2 and later versions. + +Use the following syntax to add a Boolean field within the **FIELDS** section of the WIT definition. + +``` +<FIELD name="Triage" refname="Fabrikam.Triage" type="Boolean" > + <DEFAULT from="value" value="False" /> +        <HELPTEXT>Triage work item</HELPTEXT> +      </FIELD> +``` + +And then add the following syntax within the **FORM** section to have the field appear on the form. + +``` +<Control Label="Triage" Type="FieldControl" FieldName="Fabrikam.Triag" /> +``` + +The field will appear as a checkbox on the form. + + + +<a id="picklist"> </a> +### Customize a pick list + +Pick lists are the enumerated values that appear within a drop-down menu in a work item form and the **Value** column within the query editor. The method you use to customize a pick list varies depending on the field. + +To modify the pick list for most string or integer fields within a work item form, edit the WIT definition. For example, to add a custom Resolution field and pick-list, specify the XML code as shown. + +<table> +<tbody> +<tr> +<td>Custom field and pick list<br /><br /> +![Custom pick list](_img/custom-pick-list.png) +</td> +<td> +<pre><code><FIELD name="Resolution" refname="MyCompany.Resolution" type="String"> +<ALLOWEDVALUES> + <LISTITEM value="By Design" /> + <LISTITEM value="Duplicate" /> + <LISTITEM value="External" /> + <LISTITEM value="Fixed" /> + <LISTITEM value="Not Repro" /> + <LISTITEM value="Postponed" /> + <LISTITEM value="Won't Fix" /> +</ALLOWEDVALUES> +</FIELD></code></pre> +</td> +</tr> +</tbody> +</table> + + + +Rules support combining lists, restricting to whom a list applies, and setting conditions on when a list appears on the work item form. Rules control whether a distribution list is expanded to show its individual members or a list is filtered by using the optional **expanditems** and **filteritems** attributes. Use global lists to minimize the work that is required to update a list that is shared across WITs or team projects. + +When you use a list in several WITs or across several team projects, maintaining it as a global list minimizes your maintenance requirements. Also, if you need to have parts of lists show up as different across WITs or team projects, you can define a global list for part of a pick list. See see [Define pick lists](https://msdn.microsoft.com/library/ms194947.aspx) and [Define global lists](../reference/define-global-lists.md). + +<a id="add-rules"> </a> +### Add rules to a field + +To add a custom field or add rules to a field, edit the WIT definition. You can limit rules to apply to specific users or groups. Most rules support the **for** or **not** attributes to focus who the rule does and doesn't apply to. + +For example, with the following code snippet, you can enforce the rule that only members of the Management Team, a customer defined TFS group, can modify the Stack Rank field once a work item has been created. + +``` +<FIELD name="Stack Rank" refname="Microsoft.VSTS.Common.StackRank" type="Double" reportable="dimension"> + <FROZEN not="[project]\Management Team" /> + <HELPTEXT>Work first on items with lower-valued stack rank. Set in triage.</HELPTEXT> +</FIELD> +``` + +You apply rules to accomplish the following actions: + +| To accomplish this action: | Use this XML element: | +|---|---| +| Specify a tool-tip. | **HELPTEXT** | +| Qualify the value a field can have. | **CANNOTLOSEVALUE**, **EMPTY**, **FROZEN**, **NOTSAMEAS**, **READONLY**, and **REQUIRED** | +| Copy a value or specify a default. | **COPY**, **DEFAULT**, and **SERVERDEFAULT** | +| Restrict who can modify a field. | **VALIDUSER**, **for** and **not** field rule attributes | +| Enforce pattern matching on a string field. | **MATCH** | +| Conditionally apply rules based on values in other fields. | **WHEN**, **WHENNOT**, **WHENCHANGED**, and **WHENNOTCHANGED** | + + +System fields, whose names all start with the "System" prefix (for example, System.ID), are limited in terms of the rules you can apply to them. For example, you can't copy or set to empty fields used to track who created, changed, or closed a work item, or date-time fields used by the system. + +For more information about applying field rules and restrictions, see [Apply a rule to a work item field](../reference/apply-rule-work-item-field.md). + +<a id="add-custom-field"> </a> +### To add a custom field +To add a custom field, edit the WIT definition to add a **FIELD** element within the **FIELDS** section and a **Control** element within the **FORM** section. + +0. Export the WIT definition file [based on the process model you use](../customize/customize-work.md). + +0. Locate the section of the XML file that begins with ```FIELDS```. + +0. Add the ```FIELD``` element that specifies the name of the custom field to add. You must specify the following required attributes: friendly ```name```, ```refname``` (reference name), and ```type```. For more information, see [FIELD (Definition) element reference](https://msdn.microsoft.com/Library/aa337627.aspx). + + The following code specifies the custom field, Requestor, with a reference name of ```FabrikamFiber.MyTeam.Requestor``` and a pick list of allowed values, with the default value of Customer. + + ``` + <FIELD name="Requestor" refname="FabrikamFiber.MyTeam.Requestor" type="String" reportable="Dimension"> + <ALLOWEDVALUES> + <LISTITEM value="Customer" /> + <LISTITEM value="Executive Management" /> + <LISTITEM value="Other" /> + <LISTITEM value="Support" /> + <LISTITEM value="Team" /> + <LISTITEM value="Technicians" /> + <DEFAULTVALUE value="Customer" /> + </ALLOWEDVALUES> + </FIELD> + ``` + + >[!TIP] + >Elements within the list always appear in alphanumeric order, regardless of how you enter them in the XML definition file. The Reference Name, or `refname`, is the programmatic name for the field. All other rules should refer to the `refname`. For more information, see [Naming restrictions and conventions](../../reference/naming-restrictions.md#WorkItemFields). + +0. Add the `Control` element within the `FORM` section so that the custom field appears on the form within the group of elements where you want it to appear. + + For example, the following code snippet adds the Requestor field to appear below the Reason field on the work item form. + ``` + <Column PercentWidth="50"> +    <Group Label="Status"> +       <Column PercentWidth="100"> +          <Control FieldName="System.AssignedTo" Type="FieldControl" Label="Assi&gned To:" LabelPosition="Left" /> +          <Control FieldName="System.State" Type="FieldControl" Label="&State:" LabelPosition="Left" /> +          <Control FieldName="System.Reason" Type="FieldControl" Label="Reason:" LabelPosition="Left" ReadOnly="True" /> +          <Control FieldName="FabrikamFiber.MyTeam.Requestor" Type="FieldControl" Label="Requestor:" LabelPosition="Left" ReadOnly="True" /> +       </Column> +    </Group> + </Column> + ``` + + > [!TIP] + > The schema definition for work tracking defines all child elements of the `FORM` element as camel case and all other elements as all capitalized. If you encounter errors when validating your type definition files, check the case structure of your elements. Also, the case structure of opening and closing tags must match according to the rules for XML syntax. For more information, see [Control XML element reference](../reference/control-xml-element-reference.md). + +0. Import the WIT definition file according to the process model you use. + +0. Open either the web portal or Team Explorer to view the changes. If the client is already open, refresh the page. + + The following illustration shows that the work item form for the product backlog item now contains the new field. + + ![New field in form](_img/IC539047.png) + + + +<a id="change-label"> </a> + +### To change the field label on a work item form +To modify the field label, change the value assigned to the ```Control``` element ```Label``` attribute. To remove a field from the work item form, delete the ```Control``` element associated with the field. + +0. Export the WIT definition file according to your process model. + +0. In the `FORM` and `Layout` sections, find the definition of the field you want to modify. This example modifies the label for the **Title** field: + + ``` + <Column PercentWidth="70"> + <Control Type="FieldControl" FieldName="System.Title" Label="Title" LabelPosition="Left" /> + </Column> + ``` + +0. Change the label for the field so that the Portuguese branch office working on this particular team project can read the name of the **Title** field when they work with the work item form. Include the Portuguese word for title (Titulo) in the Title field. + + ``` + <Column PercentWidth="70"> + <Control Type="FieldControl" FieldName="System.Title" Label="Title (Título):" LabelPosition="Left" /> + </Column> + ``` + +0. Import the modified WIT definition. + + +<a id="custom-control"> </a> +## Add a custom control + +Using the [object model for tracking work items](../../tfs-server/architecture/extend-vs-for-alm.md), you can programmatically create, change, and find bugs, tasks, and other WITs. You can also create your own custom controls that add functionality to a work item form. + +Or, you can add a custom control which is available through the [Visual Studio Marketplace](https://marketplace.visualstudio.com/search?term=custom%20controls&target=VSTS&sortBy=Relevance). For example: + +- [Multi-value control](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.vsts-extensions-multivalue-control) that supports the input of multiple values for a field by showing a list of check boxes +- [Color picklist control](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.color-form-control) that supports adding color to pick list items +- [Work item form one click actions](https://marketplace.visualstudio.com/items?itemName=mohitbagra.witoneclickactions) that provides a group extension with a customizable set of rules which support one-click action. + + +To add a custom control to the new web form, see [WebLayout and Control elements](../reference/weblayout-xml-elements.md). + +<a id="limit-account-names"> </a> +## Limit the Assigned To field list of names + +By default, the drop-down menu for the Assigned To field displays all users who have been granted access to the team project. This is the default valid users group. The exception to this rule is the list that appears in the web portal--the context menus that support assigning work items are limited to members of the team. + +The most efficient way to apply security restrictions is to create custom groups that you manage either in Windows or a collection or team project group. + +1. Create the security group that you want to use and add the accounts to the group. For example, create a new group called **Team Contributors**. See [Add users to team projects](../../accounts/add-users.md). + +2. Modify the definition file for each work item type that you want to limit the user set. Add the **VALIDUSER** element to the **FIELD** element definition for the Assigned To field, and specify the TFS group. + + For example, the following code snippet can be added to the Task definition to limit the set of users for the Assigned To field to only those team members added to the TFS Team Task Group. + + <FIELD name="Assigned To" refname="System.AssignedTo" type="String" reportable="dimension" syncnamechanges="true"> +    <HELPTEXT>The person currently working on this task</HELPTEXT> +    <ALLOWEXISTINGVALUE /> +    <VALIDUSER group="Team Contributors" /> + </FIELD> + + By specifying the **ALLOWEXISTINGVALUE** element, you avoid validation errors that would otherwise occur when members leave the team and are no longer registered as project contributors. + +See also [Restrict access](../../accounts/restrict-access-tfs.md). + +<a id="change-attribute"> </a> +## Change an attribute of an existing field (On-premises XML) + +>[!NOTE] +>**Feature availability**: You can exercise this feature only from an on-premises TFS. + + +You use **witadmin changefield** to change the attributes of an existing field. For example, the following command changes the friendly name defined for MyCompany.Type to Evaluation Method. + +``` +witadmin changefield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:MyCompany.Type /name:"Evaluation Method" +``` + +The following table summarizes the attributes you can change using [witadmin changefield](../reference/witadmin/manage-work-item-fields.md). + +| Attribute | Description | +|---|---| +| Data type | Specifies the type of data that the field accepts. In general, you cannot change the field data type once it is defined. You can switch the field data type only for fields of type **HTML** or **PlainText**. | +| Friendly name | The friendly name appears in the drop-down menus of work item queries and it must be unique across all fields that are defined within a team project collection. The friendly name may differ from the form label that appears on the work item form. | +| Reporting attributes | You can change the name of the field as it appears in a report, the report reference name, and the reporting type. You can localize the reporting friendly name.<br /><br />The reporting type determines whether the field's data is written to the relational warehouse database, to both the relational warehouse database and to the OLAP cube, or to generate a pre-calculated sum of values when processing the OLAP cube.<br /><br />For a complete list of the default reportable fields, see [Reportable fields reference](../reference/reportable-fields-reference.md). For more information about reportable attributes, see [Field data type and reportable attributes](../reference/define-modify-work-item-fields.md). | +| Synchronization | You can enable or disable synchronization for person-name fields with Active Directory. | + + + +<a id="index-field"> </a> +## Change the index attribute of a field (On-premises XML) + +>[!NOTE] +>**Feature availability**: You can exercise this feature only from an on-premises TFS. + +You can enable indexing for a field to improve query response times when filtering on the field. By default, the following fields are indexed: Assigned To, Created Date, Changed By, State, Reason, Area ID, Iteration ID, and Work Item Type. + +To enable or disable indexing for a field, use the [**witadmin indexfield** command](../reference/witadmin/manage-work-item-fields.md). + +## Related notes + +This topic addressed how to add and customize fields for Hosted XML and On-premises XML process models. For information on adding and customizing WITs for Hosted XML and On-premises XML process models, see [Add or modify a work item type](add-modify-wit.md). For the Inheritance process model, see [Customize a process](../process/customize-process.md). + +Other related topics or resources: + +- [Work tracking object limits](../customize/object-limits.md) +- [Customize the work tracking experience](customize-work.md) +- [Field data type and field attributes](../reference/define-modify-work-item-fields.md) +- [WebLayout and Control elements](../reference/weblayout-xml-elements.md) +- [Guide to administrative tasks](../../accounts/account-management.md) +- [Import, export, and manage work item fields (witadmin)](../reference/witadmin/manage-work-item-fields.md). +- [Team Foundation Server - Project Management & Work Item forum](http://social.msdn.microsoft.com/Forums/vstudio/home?forum=tfsworkitemtracking) + + +### Required permissions + +- To list fields, you must have your **View project-level information** permission for the team project in the collection set to **Allow**. +- (TFS) To add or customize a field, you must be a member of the Project Administrators group or have your **Edit project-level information** permission set to Allow. +- (VSTS) To add or customize a field by customizing a process template, you must be a member of the Project Collection Administrators group or have your **Edit process** permission set to Allow +- (TFS) To delete or rename fields or change an attribute of a field, you must be a member of the **Team Foundation Administrators** security group or the **Project Collection Administrators** security group. + +To get added as an administrator, [Add administrators](../../security/set-project-collection-level-permissions.md). + +<a id="field-reference"></a> + +[!INCLUDE [temp](../_shared/field-reference.md)] + +<a id="list-fields"></a> +### List or review fields + +To list or review fields, you can use one of the following tools, depending on the process model—Inheritance, Hosted XML, or On-premises XML—you use. For an index of fields defined within the default processes, see [Work item field index](../guidance/work-item-field.md). + +<table> +<tr valign="bottom"> +<th>Tool</th> +<th>Inheritance</th> +<th>Hosted XML </th> +<th>On-premises XML </th> +</tr> + +<tbody valign="top" align="center"> + +<tr> +<td align="left">[Web portal: List inherited and custom-defined fields](../process/customize-process-field.md#review-fields)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)<sup>1</sup></td> +<td> </td> +</tr> + +<tr> +<td align="left">[Work item field explorer](#wi-explorer) <sup>2</sup> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">[witadmin listfields command line tool](../reference/witadmin/manage-work-item-fields.md)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +</tbody> +</table> + + +**Notes:** +1. Only supported for default processes (Agile, CMMI, Scrum). +2. For TFS 2017 and later versions, install the [TFS Process Template editor from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KarthikBalasubramanianMSFT.TFSProcessTemplateEditor). + For TFS 2015 and earlier versions, you access this tool from the Process Editor after installing the [Microsoft Visual Studio Team Foundation Server 2015 Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power). + + +<a id="wi-explorer"> </a> +**Work Item Field Explorer** + +In addition to the attributes that you can change for a work item field, there are several non-changeable and virtually hidden attributes for each field. You can look up the assignments of these fields using the Work Item Field Explorer tool. + +![](_img/IC633020.png) + +For a description of each attribute, see this post: [Work Item Field Attributes - What You Can and Can't Change](http://blogs.msdn.com/b/visualstudioalm/archive/2012/08/17/work-item-field-attributes-what-you-can-and-can-t-change.aspx). + + +<a id="integration-fields"> </a> +### Test, build, and version control fields (On-premises XML) + +>[!NOTE] +>**Feature availability**: You can exercise this feature only from an on-premises TFS. + +Several WITs contain fields that provide information that is generated by automated processes that integrate with Team Foundation Build, Microsoft Test Manager, and Team Foundation version control. To add one of these fields to your custom WITs, you [edit the WIT definition](#edit) according to the steps outlined previously in this topic. + +For example, you can add the **Found In** and **Integrated in Build** fields that appear in the type definitions for bugs. These fields associate bugs with the builds where they were found or fixed. You can use the following code snippet to add these fields to a work item type definition. + + <FIELD name="Found In" refname="Microsoft.VSTS.Build.FoundIn" type="String" reportable="dimension"> + <HELPTEXT>Product build number (revision) in which this item was found</HELPTEXT> + </FIELD> + <FIELD name="Integration Build" refname="Microsoft.VSTS.Build.IntegrationBuild" type="String" reportable="dimension"> + <HELPTEXT>Product build number this bug was fixed in</HELPTEXT> + </FIELD> + +For more information, see [Query based on build and test integration fields](../track/build-test-integration.md). + +### Field names and reporting (On-premises XML) + +>[!NOTE] +>**Feature availability**: You can change the reportable attributes for a field only from an on-premises TFS. + +You can add fields or change the attributes of existing fields to support reporting. When you add or change fields, you should name them systematically so that you can find the field in the Analysis Services cube because the fields are logically grouped into folders. To learn more, see [Add or modify work item fields to support reporting](../reference/add-or-modify-work-item-fields-to-support-reporting.md). + + +<a id="delete-field"> </a> +### Delete a field (On-premises XML) + +>[!NOTE] +>**Feature availability**: You can exercise the delete a field feature only from an on-premises TFS. + +When you remove a field from a specific type of work item, that field is not removed from the collection or the database server, even if it is no longer referenced by any WIT. To remove a field, follow these steps. + +1. Remove the `FIELD` definition from all WIT definitions and any global workflows that reference it. + +2. Verify the field is not in use. For example: + + witadmin listfields /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:MyCompany.CustomContact + + Field: MyCompany.CustomContact + Name: Custom Contact + Type: String + Reportable As: dimension + Use: Not In Use + Indexed: False + +3. Delete the field. For example: + + witadmin deletefield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:MyCompany.CustomContact + +4. If the deleted field was reportable, [rebuild the data warehouse to purge the old field and its values](../../Report/admin/rebuild-data-warehouse-and-cube.md). + +For more information, see [Manage work item fields](../reference/witadmin/manage-work-item-fields.md). + +<!--- +1. If you don't have project administrator permissions for your team project, [get them](../../security/set-project-collection-level-permissions.md). + +2. Open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ```cd %programfiles%\Microsoft Visual Studio 14.0\Common7\IDE``` + + On a 64-bit edition of Windows, replace ```%programfiles%``` with ```%programfiles(x86)%```. You can get access to Team Explorer by [downloading Visual Studio Community](https://go.microsoft.com/fwlink/?LinkId=691978&clcid=0x409) for free. + +3. Export the WIT definition. + + ```witadmin exportwitd /collection:CollectionURL /p:ProjectName /n:TypeName /f:"DirectoryPath/FileName.xml"```` + + An example of a *CollectionURL* is http://fabrikamprime:8080/tfs/DefaultCollection. + +--> \ No newline at end of file diff --git a/docs/work/customize/add-modify-wit.md b/docs/work/customize/add-modify-wit.md new file mode 100644 index 00000000000..ba9d2d3e961 --- /dev/null +++ b/docs/work/customize/add-modify-wit.md @@ -0,0 +1,302 @@ +--- +title: Add or modify a work item type (WIT) | VSTS & TFS +description: Modify or add a work item type (WIT) to support queries, reports, and workflow for Visual Studio Team Services (VSTS) and TFS +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 62c0168a-23b8-4a92-9ecf-b67926f7756f +ms.manager: douge +ms.author: kaelli +ms.date: 06/12/2017 +--- + +# Add or modify a work item type + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +Your team project contains 14 or more work item types (WITs), based on the process—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md)—used to create the team project. A WIT is the object you use to [track different types of work](../backlogs/add-work-items.md). + +You can modify an existing WIT or add a custom WIT based on your team's tracking requirements or workflow processes. The most common reasons to modify a WIT are to add or modify the set of fields or field rules, change the workflow, or customize the work item form. + +See [Add or modify a field](add-modify-field.md) if you want to add a custom field or modify the field rules or attributes of an existing field. + +Most WIT customizations are made to the WIT definition, however, other customization are made through the Process Configuration definition or via the **witadmin** command line tool. + +>[!NOTE] +><b>Feature availability: </b>You can exercise some features only from an on-premises TFS and are noted as such. + +> [!div class="mx-tdBreakAll"] +> |WIT definition |ProcessConfiguration definition |Command line change| +> |-------------|----------|----------| +> |- [Add or modify a field to an existing WIT](#modify-field)<br/>- [Add a custom WIT, modify a WIT](#add-wit)<br/>- [Change the workflow (states, reasons, transitions)](#modify-workflow)<br/>- [Modify the work item form](../reference/change-work-item-form-layout.md) |- [Specify the WIT color](#change-wit-color) <br/>- [Specify the WIT icon](#change-wit-color) (TFS 2017.2)<br/>- [Specify the workflow state color](#change-wit-color)<br/>- [Add or remove a WIT from the backlog or task board](#change-wit-backlog-board)<br/>- [Add a custom WIT to a backlog or board](add-wits-to-backlogs-and-boards.md) <br/>- [Add a portfolio backlog ](add-portfolio-backlogs.md)|- [List WITs](../reference/witadmin/witadmin-import-export-manage-wits.md)<br/>- [Deactivate or disable a WIT](#deactivate-wit)<br/>- [Rename a WIT](#Rename a WIT (On-premises XML)) (TFS only)<br/>- [Delete a WIT](#delete-wit) (TFS only) | + + +<a id="add-wit"> </a> +<a id="edit-wit"> </a> +<a id="modify-wit"> </a> +## Add or modify a WIT + +To add a custom WIT or modify an existing WIT, you define or modify the XML definition file for the WIT and then import it to your team project [based on the process model you use](../customize/customize-work.md). You modify a WIT by specifying the elements defined within the three main sections of the WIT definition file: **FIELDS**, **WORKFLOW**, and **FORM**. + +![Summary of WIT elements](_img/IC729919.png) + +The easiest way to add a new WIT is to copy an existing WIT and then modify the definition file. + + +<a id="modify-field"> </a> +## Add or modify a field, field rule, label, or empty text + +Any field that you want to use to track data must be added to the WIT definition file. This is true for all but system fields (fields whose reference name start with **System.**). All System fields are defined for all WITs, whether or not you include them in WIT definition. To learn more about each field, see [Work item field index](../guidance/work-item-field.md). + +You add fields and field rules to the **FIELDS** section. For the field to appear on the work item form, you must also add it to the **FORM** section of the WIT definition. + +For example, to add the work item ID to a form, specify the following XML syntax within the `FORM` section. + + <Control FieldName="System.ID" Type="FieldControl" Label="ID" LabelPosition="Left" /> + +To learn more about defining fields, see [Add or modify a field](add-modify-field.md). + +<a id="modify-workflow"> </a> +## Modify the workflow + +**STATES** and **REASONS** sections within the **WORKFLOW** specify the pick list values in the **State** and **Reason** fields. They track the status of work items. The **TRANSITIONS** section specifies the valid transitions between states, as shown in the following illustration. You specify both forward and regressive transitions. + +![Example workflow state diagram, Agile user story](../guidance/_img/ALM_PT_Agile_WF_UserStory.png) + +You change the workflow to accomplish the following objectives: + +- Add or remove a state, reason, or transition +- Specify a value for field to be applied during a change in state, reason, or transition +- Specify a custom **ACTION** to automate field assignments based on a change in state, reason, or transition. + +When you customize the workflow, follow these two steps: + +1. [Modify the WORKFLOW of the WIT definition](../reference/change-workflow-wit.md). + +2. [Modify the process configuration to map new workflow states to metastates](../reference/process-configuration-xml-element.md). + + This second step is required when you change the workflow for a WIT that appears on an Agile tool page. These WITs belong to either the Requirement or Task categories. + +<a id="workflow-rules"> </a> +### Workflow field rules +You can apply field rules when you change state, specify a reason, or during a workflow transition. + +For example, by adding the **EMPTY** rule when the state is set to Active, you can automatically nullify the Closed Date and Closed By fields and make them read-only. This is useful when reactivating a work item from a closed state. + +``` +<STATE value="Active"> + <FIELDS> +. . . + <FIELD refname="Microsoft.VSTS.Common.ClosedDate"><EMPTY/></FIELD> + <FIELD refname="Microsoft.VSTS.Common.ClosedBy"><EMPTY/></FIELD> + </FIELDS> +</STATE> +``` + +Apply workflow field rules to accomplish the following actions: + +- Qualify the value a field can have by specifying **CANNOTLOSEVALUE**, **EMPTY**, **FROZEN**, **NOTSAMEAS**, **READONLY**, and **REQUIRED** +- Copy a value into a field by using **COPY**, **DEFAULT**, and **SERVERDEFAULT** +- Restrict who can modify a field +- Enforce pattern matching on a string field by using **MATCH** +- Conditionally apply rules based on values in other fields using **WHEN**, **WHENNOT**, **WHENCHANGED**, and **WHENNOTCHANGED** +- Limit rules to apply to specific users or groups. Most rules support the **for** or **not** attributes to focus who the rule does and doesn't apply to. + +For more information about applying workflow field rules, see [FIELD (Workflow) element reference](https://msdn.microsoft.com/library/aa337626.aspx). + +<a id="modify-form"> </a> +## Customize the work item form + +The following illustrations highlight the most common elements on work item forms. You can customize all of them except the title area and form controls. The elements you use to customize the form depend on [whether or not the new form has been enabled by your admin](../customize/manage-new-form-rollout.md). + +**Web form with the new form enabled (VSTS, TFS 2017)** + +![Header element within web form](../reference/_img/weblayout-system-controls-details-page.png) + +**Old web form in use (TFS 2015, TFS 2013)** + +![WIT form controls ](_img/IC714121.png) + +You can customize the form to accomplish the following objectives: + + +> [!div class="mx-tdBreakAll"] +> | New form enabled |Old form in use | +> |-------------|----------| +> |- [Add or modify a field](../reference/weblayout-xml-elements.md)<br/>- [Change a field label](../reference/weblayout-xml-elements.md)<br/>- [Rearrange fields](../reference/weblayout-xml-elements.md)<br/>- [Add a group or page](../reference/weblayout-xml-elements.md)<br/>- [Add a group](../reference/weblayout-xml-elements.md)<br/>- [Add a custom control, group, or page](../reference/weblayout-xml-elements.md)<br/>- [Add informational text or hyperlinks](../reference/provide-help-text-hyperlinks-web-content-form.md)<br/>- [Embed HTML text or display dynamic reports](../reference/provide-help-text-hyperlinks-web-content-form.md) <br/>- [Add a links-control page](../reference/linkscontroloptions-xml-elements.md) |- [Add or modify a field](../reference/specify-work-item-form-controls.md)<br/>- [Change a field label](../reference/specify-work-item-form-controls.md)<br/>- [Rearrange fields](../reference/specify-work-item-form-controls.md)<br/>- [Add tabs, columns, or groups](../reference/design-work-item-form.md)<br/>- [Add informational text or hyperlinks](../reference/provide-help-text-hyperlinks-web-content-form.md)<br/>- [Embed HTML text or display dynamic reports](../reference/provide-help-text-hyperlinks-web-content-form.md) <br/>- [Add a links-control tab](../reference/define-link-controls.md)<br/>- [Add an attachment control](../reference/add-the-attachments-control.md) | + + +<a id="change-wit-backlog-board"> </a> +## Add or remove a WIT from the backlog or task board + +The Agile planning tools—product backlog, sprint backlog, and task board pages—display specific WITs based on the process template used to create your team project. You can add or remove WITs to appear on these pages. For example, if your team project uses Scrum WITs, both product backlog items and bugs appear on the backlog pages. However, if your team project was created using the Agile, CMMI, or other process template, bugs don't appear on your backlog or task board. + +For example, you can add bugs from the product backlog page. + +[!INCLUDE [temp](../_shared/image-differences.md)] + +![](_img/add-modify-wit-quick-add-panel.png) + + +To learn how to add or remove WITs from the backlog or task board, see [Add a work item type to a backlog and board](add-wits-to-backlogs-and-boards.md). To add a new WIT to support a portfolio backlog, see [Add a portfolio backlog level](add-portfolio-backlogs.md). + + +<a id="change-wit-color"> </a> +### Change the WIT color, icon, or workflow state color + +In the web portal, work items appear in query results and on the backlog and board pages of the Agile tools. To change the color or icon associated with an existing WIT or add the color to use for a new WIT, [edit the process configuration](../reference/process-configuration-xml-element.md#wit-colors). To change the color for a workflow state, you also [edit the process configuration](../reference/process-configuration-xml-element.md#state-colors). + +>[!NOTE] +>**Feature availability:** <!---For Hosted XML process model, you can customize the WIT color, icon, and workflow state color. -->For On-premises XML, you can customize the workflow state color for TFS 2015.2 or later versions, and you can customize the WIT icon for TFS 2017.2 and later versions. + +<img src="_img/add-modiy-wit-color-icon-state-color.png" alt="Query results showing wit color, icon, and state color" style="border: 2px solid #C3C3C3;" /> + +## Related notes + +This topic addressed how to add and customize WITs and process configuration for Hosted XML and On-premises XML process models. For information on adding and customizing fields for Hosted XML and On-premises XML process models, see [Add or modify a work item type](add-modify-wit.md). For the Inheritance process model , see [Customize a process](../process/customize-process.md). + +Other related topics or resources: + +- [Guide to administrative tasks](../../accounts/account-management.md) +- [ProcessConfiguration XML elements](../reference/process-configuration-xml-element.md) +- [**witadmin** command-line tools](../reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md) +- [Customize the work tracking experience](customize-work.md) +- [Customize cards on boards](customize-cards.md) +- [Team Foundation Server - Project Management & Work Item forum](http://social.msdn.microsoft.com/Forums/vstudio/home?forum=tfsworkitemtracking) + + +### Required permissions + +- To list work item types, you must have your **View project-level information** permission for the team project in the collection set to **Allow**. +- (TFS) To add or customize a WIT, you must be a member of the Project Administrators group or have your **Edit project-level information** permission set to Allow. +- (VSTS) To add or customize a WIT by customizing a process template, you must be a member of the Project Collection Administrators group or have your **Edit process** permission set to Allow + +To get added as an administrator, see [Add administrators](../../security/set-project-collection-level-permissions.md). + + +<a id="witadmin"> </a> +### Import and export WIT definition files (On-premises XML) + +>[!NOTE] +>If you use the Hosted XML process model, you need to import and export the process template used by your team project. For details, see [Customize the work item tracking web form](customize-wit-form.md). + +1. If you don't have administration permissions for your team project, [get them](../../security/set-project-collection-level-permissions.md). + +2. Open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + cd %programfiles%\Microsoft Visual Studio 12.0\Common7\IDE + + On a 64-bit edition of Windows, replace %programfiles% with %programfiles(x86)%. Go [here to download Visual Studio Community](https://go.microsoft.com/fwlink/?LinkId=691978&clcid=0x409) for free. + +3. Export the WIT definition file where you want to modify or add a field. Specify the name of the WIT and a name for the file. + + witadmin exportwitd /collection:CollectionURL /p:ProjectName /n:TypeName /f:"DirectoryPath/FileName.xml" + + An example of a *CollectionURL* is `http://MyServer:8080/tfs/TeamProjectCollectionName`. + +4. Edit the file. For details, see [Index to XML element definitions](../reference/xml-element-reference.md). + +5. Import the WIT definition file. + + witadmin importwitd /collection:CollectionURL /p:ProjectName /f:"DirectoryPath/FileName.xml" + +6. Open the web portal or refresh the page to view the changes. + + For more information about using **witadmin**, see [Import, export, and manage work item types](../reference/witadmin/witadmin-import-export-manage-wits.md). + + +### Enable features after upgrade (On-premises XML) + +>[!NOTE] +><b>Feature availability: </b>You can exercise the Configure Features Wizard only from an on-premises TFS. + +What customizations can you make and still use the Configure Features Wizard to update my team project after a TFS upgrade? + +You can add custom WITs and change the form layout. The [Configure Features Wizard](configure-features-after-upgrade.md) will update your team projects and you'll get access to the latest features. + +Changing the workflow or renaming a WIT might require you to perform some manual operations when updating your team project. To learn about other customizations that you can safely make and which you should avoid, see [Customize the work tracking experience: Before you customize, understand the maintenance and upgrade implications](on-premises-xml-process-model.md#before-you-customize). + +### Rename a WIT (On-premises XML) + +>[!NOTE] +><b>Feature availability: </b>You can exercise **witadmin renamewitd** only from an on-premises TFS. + +To rename an existing WIT use **witadmin renamewitd**. For example, you can rename a WIT labeled "QoS Item" to "Service Agreement." + +``` +witadmin renamewitd /collection:"http://FabrikamPrime:8080/tfs/DefaultCollection" /p:"Fabrikam Web Site" /n:"QoS Item" /new:"Service Agreement" +``` + +When you rename a WIT that belongs to a category, you have to update the categories definition for the team project to reflect the new name. In particular, the [backlogs and boards](../backlogs-boards-plans.md) will not work until you update the categories definition. + +For more information, see [Import, export, and manage work item types](../reference/witadmin/witadmin-import-export-manage-wits.md) and [Import and export categories](../reference/witadmin/witadmin-import-export-categories.md). + +<a id="deactivate-wit"> </a> +### Deactivate or disable a WIT (On-premises XML) + +How do you restrict users from creating work items of a certain type? + +If you have a WIT that you want to retire, but maintain the work items that have been created based on that type, you can add a rule that disables all valid users from saving the work item type. + +``` +<TRANSITION from=" " to="New"> + <FIELDS> + <FIELD refname="System.CreatedBy"> + <VALIDUSER not="[Team Project Name]Project Valid Users" /> + </FIELD> + </FIELDS> +</TRANSITION> +``` +If you want to restrict creation of a specific WIT to a group of users, there are two ways to restrict access: + +- [Add the WIT to the Hidden Categories group](../reference/use-categories-to-group-work-item-types.md) to prevent the majority of contributors from creating them. If you want to allow a group of users access, you [can create a hyperlink to a template](../backlogs/work-item-template.md) that opens the work item form and share that link with those team members who you do want to create them. + +- Add [a field rule to the workflow](../reference/apply-rule-work-item-field.md) for the System.CreatedBy field to effectively restrict a group of users from creating a work item of a specific type. As the following example shows, the user who creates the work item must belong to the `Allowed Group` in order to save the work item. + + <TRANSITION from=" " to="New"> + <FIELDS> + <FIELD refname="System.CreatedBy"> + <VALIDUSER for="Allowed Group" not="Disallowed Group" /> + </FIELD> + </FIELDS> + </TRANSITION> + +<a id="delete-wit"> </a> +### Delete a WIT (On-premises XML) + +To prevent team members from using a specific WIT to create a work item, you can remove it from the team project. When you use **witadmin destroywitd**, you permanently remove all work items that were created using that WIT as well as the WIT itself. For example, if your team doesn't use "Impediment", you can delete the WIT labeled "Impediment" from the Fabrikam Web Site project. + + witadmin destroywitd /collection:"http://FabrikamPrime:8080/tfs/DefaultCollection" /p:"Fabrikam Web Site" /n:"Impediment" + +When you delete a WIT that belongs to a category, you must update the categories definition for the team project to reflect the new name. For more information, see [Import, export, and manage work item types](../reference/witadmin/witadmin-import-export-manage-wits.md) and [Import and export categories](../reference/witadmin/witadmin-import-export-categories.md). + + +### How do WIT modifications affect existing work items? + +The following table summarizes the effect on existing work items when you modify fields or WIT definitions. + +|Action|Effect on existing work items| +|---|---| +|Remove fields from a WIT|Data for the removed fields remains in the data store. However, no new data can be added, because you've removed them from the WIT definition.| +|Rename a field|Data for the renamed fields remains in the data store under the new friendly name.| +|Delete fields|Data for the deleted fields is removed from the data store.| +|Rename a WIT|All data remains intact under the new name.| +|Delete a WIT|All data for work items created as the deleted WIT is permanently removed with no chance for recovery.| + +If you want to completely remove the fields from the data store, use [**witadmin deletefield** command line tool](../reference/witadmin/manage-work-item-fields.md). + +### Change the type of an existing work item + +See [Move, change, or delete work items](../backlogs/remove-delete-work-items.md) for the features available to you based on your platform. + +When you connect to TFS, you can't change the work item type for an existing work item, but you can [copy the work item and specify a new type](../backlogs/copy-clone-work-items.md#copy-clone). For instance, you can copy an existing product backlog item and change the type to bug, as shown in the following illustration. + +![Clone a WIT](_img/IC710198.png) + +Also, if you have several work items with type changes you want to make, you might want to [export them using Excel](../office/bulk-add-modify-work-items-excel.md), and then re-add them as a new type. + + +### Workflow changes and earlier versions of the Test Manager client + +When you change the workflow for the test plan or test suite—and you work from a Test Manager client provided with Visual Studio 2013.2 or earlier versions—these WITs became available when you updated your application-tier server to TFS 2013.3. that appears on an Agile planning tool page. + +If you encounter an **Application detected an unexpected fault** error when you connect to your team project after you changed the workflow, you can resolve it by mapping the new workflow states to metastates. To resolve this error, see [Import and export process configuration](../reference/witadmin/witadmin-import-export-process-configuration.md). diff --git a/docs/work/customize/add-portfolio-backlogs.md b/docs/work/customize/add-portfolio-backlogs.md new file mode 100644 index 00000000000..f081d78f639 --- /dev/null +++ b/docs/work/customize/add-portfolio-backlogs.md @@ -0,0 +1,292 @@ +--- +title: Add portfolio backlogs +description: Add up to two additional work item types and portfolio backlogs to Visual Studio Team Services (VSTS) or Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 764D98C3-9DAD-4F40-8D5D-D0C95E023485 +ms.manager: douge +ms.author: kaelli +ms.date: 05/16/2017 +--- + +# Add a portfolio backlog level + +[!INCLUDE [temp](../_shared/version-header-hosted-plus-tfs.md)] + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML process models. For the Inheritance process model, see [Customize your backlogs or boards for a process](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +Portfolio backlogs are useful for organizing your backlog under business initiatives. When you [organize your backlogs into portfolios](../backlogs/organize-backlog.md), you can gain a hierarchical view of the work defined in lower-level backlogs, including work in progress across several teams. Program managers can track the status of those backlog items of interest and drill down to ensure that all work is represented. + +Your team project comes equipped with two portfolio backlogs: Features and Epics. However, if you need one or more additional portfolio backlogs, you can add them. + +>[!NOTE] +>If you haven't yet enabled the Portfolio Backlogs feature for your on-premises TFS, [do that first](configure-features-after-upgrade.md). + +Here, we add a third portfolio backlog, Initiative. With it, the management team can set priorities and view progress of work belonging to initiatives. + +<a id="image-diff"></a> + +> [!NOTE] +> The images you see from your web portal may differ from the images you see in this topic. These differences result from updates made to your on-premises TFS, and the process template chosen when creating your team project—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md). However, the basic functionality available to you remains the same unless explicitly mentioned. + + +![A view of three portfolio backlogs enabled](_img/three-level-portfolio-backlog.png) + +You can add up to five levels of portfolio backlogs. And, each team can [choose which backlogs appear for them to work on](../customize/select-backlog-navigation-levels.md). + +<a id="overview"> </a> +##Process overview + +The process to add another portfolio backlog differs slightly depending on the [process model](customize-work.md) you use. +- For **Hosted XML**: You'll first export your process, add or update definition files, and then import that process to either update existing team projects or use it to create a team project. +- For **On-premises XML**: You'll first export your work tracking definition files, update them, and then import them to your team project. + +This topic walks you through adding a portfolio backlog to a team project based on the [Agile process](../guidance/agile-process.md) in these five steps: +1. [Export the files you need](#export-files) +2. [Create the Initiative work item type](#create-initiative) +3. [Update Categories with the Initiative Category](#update-categories) +4. [Update ProcessConfiguration to add the Initiative portfolio backlog](#update-processconfig) +5. [Update your team project and verify your changes](#update-team-project) + +You can apply the same steps if you work with a team project based on the [Scrum](../guidance/scrum-process.md) or [CMMI](../guidance/cmmi-process.md) process. When you're done, you'll get to manage your portfolio of projects by grouping work within these four levels: User Stories (or Product backlog items or Requirements), Features, Epics, and Initiatives. + +For an overview of the three system processes, see [Choose a process](../guidance/choose-process.md). For an overview of the three process models, see [Customize your work tracking experience](customize-work.md). + +<a id="export-files"> </a> +##1. Export the files you need +<ol> + +<li>If you aren't the account owner or a member of the Project Collection Administrator's group, [get added as an administrator](../../security/set-project-collection-level-permissions.md). You need these permissions to customize the team project.</li> +<li>Get the files you need: +<ul> +<li>For **Hosted XML**: [Export the process you want to update](../import-process/import-process.md)<br/> +Save the files to a folder that you'll use to update these files and folders: Categories, ProcessConfiguration, and WorkItemTypes</li> +<li> For **On-premises XML**: <br/> +<ul> +<li> If you haven't done so yet, update your team project to [enable the latest features](configure-features-after-upgrade.md) </li> +<li> [Export the definition files you'll need](#import-export): Epic, Categories, and ProcessConfiguration </li> +</ul> +</li> +</ul> +</li> +</ol> + + +<a id="create-initiative"> </a> +##2. Create a work item type named Initiative + +The easiest way to create a work item type (WIT) is to copy an existing one, rename it, and edit it to support your requirements. In this example, we copy the Epic WIT and label it Initiative. + +<ol> +<li>Copy the ```Epic``` WIT definition to an XML file labeled ```Initiative```. (The Epic.xml file is located in the WorkItem Tracking folder of the ProcessTemplate folder.)</li> + +<li>Edit the file named ```Initiative```. <br/> +<ol type="a"> +<li>Rename the WIT. Replace ```WORKITEMTYPE name="Epic"``` with ```WORKITEMTYPE name="Initiative"```, and update the description.<br/> +```<WORKITEMTYPE name="Initiative" >``` <br/> +   ```<DESCRIPTION>Initiatives help program managers to effectively manage and organize work across several teams >``` <br/> +   ```</DESCRIPTION>``` <br/> +```. . . ``` <br/> +```</WORKITEMTYPE>``` <br/> +</li> +<li>Add any [custom fields that you want to track](add-modify-field.md) using this WIT. </li> +<li>Rename the ```Tab``` section named ```Features``` to ```Epics``` and replace ```Filter WorkItemType="Feature" ``` with ```Filter WorkItemType="Epic" ```. <br/> +```<Tab Label="Epics">```<br/> +```<Control Type="LinksControl" Name="Hierarchy">```<br/> +   ```<LinksControlOptions>```<br/> +   ```<WorkItemLinkFilters FilterType="include">```<br/> +   ```<Filter LinkType="System.LinkTypes.Hierarchy" />```<br/> +   ```</WorkItemLinkFilters>```<br/> +   ```<WorkItemTypeFilters FilterType="include">```<br/> +      ```<Filter WorkItemType="Epic" />```<br/> +   ```</WorkItemTypeFilters>```<br/> +      ```<ExternalLinkFilters FilterType="excludeAll" />```<br/> +      ```<LinkColumns>```<br/> +          ``` <LinkColumn RefName="System.ID" />```<br/> +          ``` <LinkColumn RefName="System.Title" />```<br/> +          ``` <LinkColumn RefName="System.AssignedTo" />```<br/> +          ``` <LinkColumn RefName="System.State" />```<br/> +          ``` <LinkColumn LinkAttribute="System.Links.Comment" />```<br/> +          ```</LinkColumns>```<br/> +   ```</LinksControlOptions>```<br/> +```</Control>```<br/> +```</Tab>```<br/> +<p>With this change, you cause the tab control to exclusively show or link to epics as child work items of the initiative. </p> +</li> +</ol> +</li> +</ol> + + +<a id="update-categories"> </a> +##3. Update Categories with the Initiative Category +Now, add the Initiative Category. This adds the Initiative backlog to process configuration. The agile experience manages WITs according to categories. + +Add the Initiative Category to the Categories.xml file. (The Categories.xml file is located in the WorkItem Tracking folder.) + +``` + <CATEGORY name="Initiative Category" refname="FabrikamFiber.InitiativeCategory"> + <DEFAULTWORKITEMTYPE name="Initiative" /> + </CATEGORY> +``` + +You can add this category anywhere within the definition file. Since you are adding a custom category, label the category using your company name. + + +<a id="update-processconfig"> </a> + +##4. Update ProcessConfiguration to add the Initiative portfolio backlog +In this last step, you add the Initiative portfolio backlog to the process and modify the Feature portfolio backlog to reflect the hierarchy between Initiatives and Features. The process configuration determines the parent-child relationships among the portfolio backlogs. + +1. Edit the ProcessConfiguration file to add a new portfolio backlog within the ```PortfolioBacklogs``` section. (The ProcessConfiguration.xml file is located in the WorkItem Tracking/Processfolder of the ProcessTemplate folder.) + + Add the Initiative Category by adding the following syntax. Replace the names, workflow state values, and default column fields to match those that you use. + + ``` + <PortfolioBacklog category="FabrikamFiber.InitiativeCategory" pluralName="Initiatives" singularName="Initiative" workItemCountLimit="1000"> + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + <Columns> + <Column refname="System.WorkItemType" width="100" /> + <Column refname="System.Title" width="400" /> + <Column refname="System.State" width="100" /> + <Column refname="Microsoft.VSTS.Scheduling.Effort" width="50" /> + <Column refname="Microsoft.VSTS.Common.BusinessValue" width="50" /> + <Column refname="Microsoft.VSTS.Common.ValueArea" width="100" /> + <Column refname="System.Tags" width="200" /> + </Columns> + <AddPanel> + <Fields> + <Field refname="System.Title" /> + </Fields> + </AddPanel> + </PortfolioBacklog> + ``` + + If you have modified the workflow states, then verify that each work flow state is mapped to one of the metastates of ```Proposed```, ```InProgress```, and ```Complete```. The last state within the workflow must map to ```Complete```. + +2. Edit the ```PortfolioBacklog``` element for the Epic Category to point to ```Initiative``` as the parent backlog. + + ``` + <PortfolioBacklog category="Microsoft.EpicCategory" pluralName="Epics" + singularName="Epic" parent="FabrikamFiber.InitiativeCategory" + workItemCountLimit="1000"> + . . . + </PortfolioBacklog> + ``` + + Intermediate portfolio backlogs require specifying the parent category, which must be configured as a portfolio backlog. + +4. Add the color to use for Initiative to the ```WorkItemColors``` section. + ``` + <WorkItemColor primary="FFCC66FF" secondary="FFF0D1FF" name="Initiative" /> + ``` + + This assigns a bright pink as the primary color to use in list displays, and a paler pink for the secondary color (currently not used). + + +<a id="update-team-project"> </a> +##5. Update your team project and verify access to the new portfolio backlog + +1. Update your team project: + - For **Hosted XML:** [Import your process](../import-process/import-process.md). + - For **On-premises XML:** [Import the definition files you updated](#import-export) in this order: + a. Initiative.xml + b. Categories.xml + c. ProcessConfiguration.xml + +2. Open or refresh the web portal and confirm that Initiative appears as a portfolio backlog as expected. See [Organize your backlog](../backlogs/organize-backlog.md). +3. Grant [Advanced access](../../security/change-access-levels.md) to users who'll need to exercise all the features available with portfolio backlogs. + For **Hosted XML:** See [Assign licenses to users](../../accounts/add-account-users-assign-access-levels.md). + + +<a id="import-export"> </a> +## Import and export definition files (on-premises TFS only) + +If you're updating a team project that connects to an on-premises TFS, you'll use the **witadmin** commands to import and export definition files. You need to export the following files: +- Epic.xml +- Categories.xml (located in the WorkItem Tracking folder) +- ProcessConfiguration.xml (located in the WorkItem Tracking/Process folder) + +[!INCLUDE [temp](../_shared/process-editor.md)]   + +1. Open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ```cd %programfiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE``` + + On a 32-bit edition of Windows, replace ```%programfiles(x86)%``` with ```%programfiles%```. The version of Visual Studio or Team Explorer must be at the same version as the on-premises TFS. + +2. Enter the ```witadmin``` command, substituting your data for the arguments that are shown. For example, to import a WIT: + + ```witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\WITDefinitionFile.xml"``` + + For *CollectionURL* specify the URL of a team project collection and for *ProjectName* specify the name of a team project defined within the collection. You must specify the URL in the following format: ```http://ServerName:Port/VirtualDirectoryName/CollectionName```. + + For *DirectoryPath*, specify the path to the ```WorkItem Tracking/TypeDefinitions``` folder that holds the process template that you downloaded. The directory path must follow this structure: ```Drive:\TemplateFolder\WorkItem Tracking\TypeDefinitions```. + + For example, import the ServiceApp WIT: + + ```witadmin importwitd /collection:"http://MyServer:8080/tfs/DefaultCollection"/p:MyProject /f:"DirectoryPath/ServiceApp.xml"``` + +Use these commands to export and import categories and process configuration: + + witadmin exportwitd /collection:CollectionURL /p:"ProjectName" /n:TypeName /f:"DirectoryPath\WITDefinitionFile.xml" + + witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\WITDefinitionFile.xml" + + witadmin exportcategories /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath/categories.xml" + + witadmin importcategories /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath/categories.xml" + + witadmin exportprocessconfig /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath/ProcessConfiguration.xml" + + witadmin importprocessconfig /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath/ProcessConfiguration.xml" + + +##Related notes +We've just shown how to add another portfolio backlog level. You can add up to five portfolio backlogs. This includes the default backlogs of Feature and Epic. In total, this provides you with seven levels from the top-level portfolio backlog to task. + +![Conceptual image of 5 levels of portfolio backlog](_img/five-levels-portfolio-backlogs.png) + +If you want to add another WIT to your backlogs or boards, see [work item types to backlogs and boards](add-wits-to-backlogs-and-boards.md). + +To learn more about the syntax for a definition file or command line tool, see these topics: + +- [All WITD XML elements reference](../reference/all-witd-xml-elements-reference.md) +- [Categories XML element reference](../reference/categories-xml-element-reference.md) +- [Process configuration XML element reference](../reference/process-configuration-xml-element.md) +- [Import, export, and manage work item types](../reference/witadmin/witadmin-import-export-manage-wits.md) +- [Import and export categories](../reference/witadmin/witadmin-import-export-categories.md) +- [Import and export process configuration](../reference/witadmin/witadmin-import-export-process-configuration.md) + +Otherwise, see [Customize your work tracking experience](customize-work.md) to access other configuration and customization options available to you. + +If you have additional questions, see [Team Foundation Server - work tracking](http://social.msdn.microsoft.com/Forums/tfsworkitemtracking/threads) forum. + +###Portfolio backlog hierarchy + +What controls the hierarchy among portfolio backlogs? + +The process configuration determines the hierarchy through the assignment of parent categories to portfolio backlog categories. Only parent-child relationships are supported. The upper-most category within the hierarchy doesn't contain a parent assignment. + +###Portfolio backlogs and WIT categories + +Can I have more than one WIT defined in a category that I use for a portfolio backlog? + +Yes. For example, you can add Goal and Initiative WITs to a portfolio backlog category. The main restriction is to not add the same WIT to two different categories that are assigned to one of the following sections for process configuration: a ```PortfolioBacklog```, ```RequirementBacklog```, or ```TaskBacklog```. + +###Nesting of backlog items + +**Can you nest backlog items in addition to using portfolio backlogs?** + +While you can nest backlog items, we don't recommend you do. We don't support drag-and-drop linking of nested backlog items. Instead, we support [mapping of backlog items to portfolio items](../backlogs/organize-backlog.md). + +For examples of how hierarchically linked items that belong to the Requirements Category appear on the backlogs and boards, see [How backlogs and boards display hierarchical (nested) items](../troubleshoot/resolve-backlog-reorder-issues.md). + diff --git a/docs/work/customize/add-wits-to-backlogs-and-boards.md b/docs/work/customize/add-wits-to-backlogs-and-boards.md new file mode 100644 index 00000000000..e5dad4c0ff4 --- /dev/null +++ b/docs/work/customize/add-wits-to-backlogs-and-boards.md @@ -0,0 +1,486 @@ +--- +title: Add WITs to backlogs and boards +description: Add work item types to customize your tracking capabilities on product backlogs and Kanban, Scrum, Sprint, and task boards when working with team projects that connect to Visual Studio Team Services (VSTS) Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: f3e42cd4-912b-4fff-a6f2-cf584edc782a +ms.manager: douge +ms.author: kaelli +ms.date: 03/16/2017 +--- + +#Add a work item type to a backlog and board + +[!INCLUDE [temp](../_shared/version-header-hosted-plus-tfs.md)] + + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML process models. For the Inheritance process model, see [Customize your backlogs or boards for a process](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +To satisfy other business processes, your team may want to track additional work item types (WITs) as requirements or as tasks. This way, you can add them and track them within the product and sprint backlogs or Kanban and task boards. + +For example, you may want to track different types of requirements based on their target customer, or different types of bugs based on their source. Here the Fabrikam Fiber team has added the Service App WIT to track work that supports their customer service team. + +![Add a custom WIT, e.g., Service App, to the Requirement Category to track it like a requirement](_img/ALM_AWB_Intro.png) + +>[!TIP] +>If all you want to do is add bugs to your backlogs and boards, see [Show bugs on backlogs and boards](show-bugs-on-backlog.md) to make your team's selection. If you want to add another WIT and portfolio backlog, see [Add a portfolio backlog level](add-portfolio-backlogs.md).</p> + + +To add a WIT to track as requirements, tasks, or as bugs perform the corresponding steps: +- [Add a WIT to track as requirements](#wits-as-requirements) +- [Add a WIT to track as tasks](#wits-as-tasks) +- [Add a WIT to the Bug Category](#wits-as-bugs) + +>[!NOTE] +>We recommend that you add a WIT to one and only one of the following categories: Requirement Category, Task Category, or Bug Category. The system prevents you from adding the same WIT to both the Requirement Category and Task Category. WITs that you add to the Bug Category will follow the [bug behavior set for the team](show-bugs-on-backlog.md). + +<a id="first-steps"> </a> +##First steps + +###Hosted XML process model customization sequence +>[!NOTE] +>Use the following guidance if you customize your process through import/export of definition files. Otherwise, if you customize your process through the admin UI, see [Add or modify a custom work item type for a process](../process/customize-process-wit.md). + +You'll make your changes to your process definition files, and then import that process to either update existing team projects or use the process to create a team project. + +- If you aren't the account owner or a member of the Project Collection Administrator's group, [get added](../../security/set-project-collection-level-permissions.md). +- [Export the process you want to update](../import-process/import-process.md) +- If you're new to customizing a process, familiarize yourself with the following resources: + - [Customize a process for import to Team Services](../import-process/customize-process.md) + + + +###On-premises XML process model customization sequence +You'll first export your work tracking definition files, update them, and then import them to your team project. +- If you aren't a member of the Project Administrator or Project Collection Administrator's group, [get added](../../security/set-project-collection-level-permissions.md). +- Update your team project to [enable the latest features](configure-features-after-upgrade.md) +- [Export the following objects from your team project](#import-export): + - WIT you want to add to backlogs and boards (if you haven't created it, [do that now](https://msdn.microsoft.com/library/ms404855.aspx)) + - Categories definition + - ProcessConfiguration +- If you're new to customizing work tracking objects, familiarize yourself with the following resources: + - [Add or modify a field](add-modify-field.md) + - [Add or modify a work item type](add-modify-wit.md) + - [ProcessConfiguration XML reference](../reference/process-configuration-xml-element.md). + + +<a id="wits-as-requirements"> </a> +##Add a WIT to track it like a requirement + +WITs that you add to the Requirement Category show up on the product backlog and Kanban board. You must make sure that the WIT definition contains required fields to support the Agile planning tools. + + +1. Export your process (Hosted XML) or your definition files (On-premises XML) as indicated in [First steps](#first-steps). +2. Edit the WIT definition to support planning tools. + <table> + <tbody valign="top"> + <tr> + <th>Customize</th> + <th>Syntax to add or update</th> + </tr> + <tr> + <td> + Backlog priority field (Agile, CMMI) + </td> + <td> + ```<FIELD name="Stack Rank" refname="Microsoft.VSTS.Common.StackRank" type="Double" reportable="dimension"> ``` +    ```<HELPTEXT>Work first on items with lower-valued stack rank. Set in triage.</HELPTEXT> ``` + ```</FIELD> ``` + + </td> + </tr> + <tr> + <td> + Stack rank field (Scrum) + </td> + <td> + ```<FIELD name="Backlog Priority" refname="Microsoft.VSTS.Common.BacklogPriority" type="Double" reportable="detail" />``` + </td> + </tr> + <tr> + <td> + Value Area field + </td> + <td> + ```<FIELD name="Value Area" refname="Microsoft.VSTS.Common.ValueArea" type="String"> ``` +    ```<REQUIRED /> ``` +    ```<ALLOWEDVALUES> ``` +       ```<LISTITEM value="Architectural" /> ``` +       ```<LISTITEM value="Business" /> ``` +    ```</ALLOWEDVALUES> ``` +    ```<DEFAULT from="value" value="Business" /> ``` +    ```<HELPTEXT>Business = delivers value to a user or another system; Architectural = work to support other stories or components</HELPTEXT> ``` + ```</FIELD> ``` + </td> + </tr> + <tr> + <td> + Requirement Type field (CMMI) + </td> + <td> + ```<FIELD name="Requirement Type" refname="Microsoft.VSTS.CMMI.RequirementType" type="String" reportable="dimension"> ``` +    ```<REQUIRED /> ``` +    ```<ALLOWEDVALUES> ``` +       ```<LISTITEM value="Scenario" /> ``` +       ```<LISTITEM value="Quality of Service" /> ``` +       ```<LISTITEM value="Functional" /> ``` +       ```<LISTITEM value="Operational" /> ``` +       ```<LISTITEM value="Interface" /> ``` +       ```<LISTITEM value="Security" /> ``` +       ```<LISTITEM value="Safety" /> ``` +       ```<LISTITEM value="Business Objective" /> ``` +       ```<LISTITEM value="Feature" /> ``` +    ```</ALLOWEDVALUES> ``` +    ```<DEFAULT from="value" value="Functional" /> ``` + ```</FIELD> ``` + </td> + </tr> + <tr> + <td> + ```WORKFLOW``` section + </td> + <td> + <p>Update or verify the ```WORKFLOW``` section as follows: </p> + <ul> + <li>Agile, User Story: Add transitions from ```Active``` to ```Removed``` and ```Resolved``` to ```Removed```; remove rules that populate ```Activated By``` and ```Activated Date``` fields when state=```Resolved``` </li> + <li>Scrum, Product backlog item: Add transition from ```Committed``` to ```Removed``` </li> + </ul> + <p>If you've customized the ```WORKFLOW```, make sure to define the required state-to-metastate mappings in the [ProcessConfiguration ```RequirementBacklog``` section](#edit-processconfig). </p> + </td> + </tr> + <tr> + <td> + ```FORM``` section + </td> + <td> + <p>Add or verify the following fields have been added to the ```FORM``` section: </p> + <ul> + <li><p>Agile:</p> + ```<Control FieldName="Microsoft.VSTS.Scheduling.StoryPoints" Type="FieldControl" Label="Story Points" LabelPosition="Left" />``` + ```<Control FieldName="Microsoft.VSTS.Common.ValueArea" Type="FieldControl" Label="Value area" LabelPosition="Left" />``` + </li> + <li><p>CMMI:</p> + ```<Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.Size" Label="Size" LabelPosition="Left" />``` + ```<Control Type="FieldControl" FieldName="Microsoft.VSTS.CMMI.RequirementType" Label="Type" LabelPosition="Left" />``` + ```<Control FieldName="Microsoft.VSTS.Common.ValueArea" Type="FieldControl" Label="Value area" LabelPosition="Left" />``` + </li> + <li><p>Scrum:</p> + ```<Control FieldName="Microsoft.VSTS.Scheduling.Effort" Type="FieldControl" Label="Effort" LabelPosition="Left" />``` + ```<Control FieldName="Microsoft.VSTS.Common.ValueArea" Type="FieldControl" Label="Value area" LabelPosition="Left" />``` + </li> + </ul> + </td> + </tr> + </tbody> + </table> + +4. Edit the Categories definition. Add the WIT to the Requirement category. Here we add Service App. + + ``` + <CATEGORY name="Requirement Category" refname="Microsoft.RequirementCategory"> + <DEFAULTWORKITEMTYPE name="User Story" /> + <WORKITEMTYPE name="Service App" /> + </CATEGORY> + ``` + +4. Update or verify ProcessConfiguration definition: ```RequirementBacklog``` section for the WIT you're adding. Specifically, make sure that the following conditions are met: + <ul> + <li>Map the start of each workflow state to ```type="Proposed"``` </li> + <li>Map each intermediate workflow state you want to have show up on the Kanban board to ```type="InProgress"``` </li> + <li>Map the end of each workflow state to ```type="Complete"``` </li> + <li>Make sure that you have only one State mapped to ```type="Complete"```</li> + </ul> + For example, add the Pending workflow state: + ``` + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Pending" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + ``` +5. Add the WIT color definition to the ProcessConfiguration ```WorkItemColors``` section. For example: + ```<WorkItemColor primary="FF33CC33" secondary="FFD6F5D6" name="Service App" />``` + +6. Update your team project: + - **Hosted XML:** [Import your process](../import-process/import-process.md). + - **On-premises XML:** [Import the definition files you updated](#import-export) in this order: + a. WIT + b. Categories + c. ProcessConfiguration + + + + +<a id="wits-as-tasks"> </a> +##Add a WIT to track it like a task + +WITs that you add to the Task Category show up on the sprint backlogs and task boards. The WIT you add must specify required fields to support the Agile planning tools. + +1. Export your process (Hosted XML) or your definition files (On-premises XML) as indicated in [First steps](#first-steps). +2. Edit the WIT definition to support planning tools. + <table> + <tbody valign="top"> + <tr> + <th>Customize</th> + <th>Syntax to add or update</th> + </tr> + <tr> + <td> + Backlog priority field (Agile, CMMI) + </td> + <td> + ```<FIELD name="Stack Rank" refname="Microsoft.VSTS.Common.StackRank" type="Double" reportable="dimension"> ``` +    ```<HELPTEXT>Work first on items with lower-valued stack rank. Set in triage.</HELPTEXT> ``` + ```</FIELD> ``` + + </td> + </tr> + <tr> + <td> + Stack rank field (Scrum) + </td> + <td> + ```<FIELD name="Backlog Priority" refname="Microsoft.VSTS.Common.BacklogPriority" type="Double" reportable="detail" />``` + </td> + </tr> + <tr> + <td> + Activity field (Agile, Scrum) + </td> + <td> + ```<FIELD name="Backlog Priority" refname="Microsoft.VSTS.Common.BacklogPriority" type="Double" reportable="detail" />``` + </td> + </tr> + <tr> + <td> + Discipline field (CMMI) + </td> + <td> + ```<FIELD name="Discipline" refname="Microsoft.VSTS.Common.Discipline" type="String" reportable="dimension"> ``` +    ```<ALLOWEDVALUES> ``` +       ```<LISTITEM value="Analysis" /> ``` +       ```<LISTITEM value="User Experience" /> ``` +       ```<LISTITEM value="User Education" /> ``` +       ```<LISTITEM value="Development" /> ``` +       ```<LISTITEM value="Test" /> ``` +    ```</ALLOWEDVALUES> ``` +    ```<HELPTEXT>The discipline to which the task belongs</HELPTEXT> ``` + ```</FIELD> ``` + </td> + </tr> + <tr> + <td> + Remaining Work field (all) + </td> + <td> + ```<FIELD name="Remaining Work" refname="Microsoft.VSTS.Scheduling.RemainingWork" type="Double" reportable="measure" formula="sum"> ``` +    ```<HELPTEXT>An estimate of the work remaining to complete the task (in person hours)</HELPTEXT> ``` +    ```<HELPTEXT>The discipline to which the task belongs</HELPTEXT> ``` + ```</FIELD> ``` + </td> + </tr> + <tr> + <tr> + <td> + Additional scheduling fields (Agile, CMMI) + </td> + <td> + ```<FIELD name="Original Estimate" refname="Microsoft.VSTS.Scheduling.OriginalEstimate" type="Double" reportable="measure" formula="sum"> ``` +    ```<HELPTEXT>The original estimate of work required to complete the task (in person hours)</HELPTEXT> ``` + ```</FIELD> ``` + ```<FIELD name="Remaining Work" refname="Microsoft.VSTS.Scheduling.RemainingWork" type="Double" reportable="measure" formula="sum"> ``` +    ```<HELPTEXT>An estimate of the work remaining to complete the task (in person hours)</HELPTEXT> ``` + ```</FIELD> ``` + ```<FIELD name="Completed Work" refname="Microsoft.VSTS.Scheduling.CompletedWork" type="Double" reportable="measure" formula="sum"> ``` +    ```<HELPTEXT>The work that has been completed for this task (in person hours)</HELPTEXT> ``` + ```</FIELD> ``` + ```<FIELD name="Start Date" refname="Microsoft.VSTS.Scheduling.StartDate" type="DateTime" reportable="dimension" /> ``` + ```<FIELD name="Finish Date" refname="Microsoft.VSTS.Scheduling.FinishDate" type="DateTime" reportable="dimension" /> ``` + </td> + </tr> + <td> + ```WORKFLOW``` section + </td> + <td> + <p>Update or verify the ```WORKFLOW``` section as follows: </p> + <ul> + <li>Agile, User Story: Add transitions from ```Active``` to ```Removed``` and ```Resolved``` to ```Removed```; remove rules that populate ```Activated By``` and ```Activated Date``` fields when state=```Resolved``` </li> + <li>Scrum, Product backlog item: Add transition from ```Committed``` to ```Removed``` </li> + </ul> + <p>If you've customized the ```WORKFLOW```, make sure to define the required state-to-metastate mappings in the [ProcessConfiguration ```TaskBacklog``` section](#edit-processconfig). </p> + </td> + </tr> + <tr> + <td> + ```FORM``` section + </td> + <td> + <p>Add or verify the following fields have been added to the ```FORM``` section: </p> + <ul> + <li><p>Agile:</p> + ```<Control FieldName="Microsoft.VSTS.Scheduling.StoryPoints" Type="FieldControl" Label="Story Points" LabelPosition="Left" />``` + ```<Control FieldName="Microsoft.VSTS.Common.ValueArea" Type="FieldControl" Label="Value area" LabelPosition="Left" />``` + </li> + <li><p>CMMI:</p> + ```<Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.Size" Label="Size" LabelPosition="Left" />``` + ```<Control FieldName="Microsoft.VSTS.Common.ValueArea" Type="FieldControl" Label="Value area" LabelPosition="Left" />``` + </li> + <li><p>Scrum:</p> + ```<Control FieldName="Microsoft.VSTS.Scheduling.Effort" Type="FieldControl" Label="Effort" LabelPosition="Left" />``` + ```<Control FieldName="Microsoft.VSTS.Common.ValueArea" Type="FieldControl" Label="Value area" LabelPosition="Left" />``` + </li> + </ul> + </td> + </tr> + </tbody> + </table> + +4. Edit the Categories definition. Add the WIT to the Task category. Here we add Service Task. + + ``` + <CATEGORY name="Task Category" refname="Microsoft.TaskCategory"> + <DEFAULTWORKITEMTYPE name="Task" /> + <WORKITEMTYPE name="Service Task" /> + </CATEGORY> + ``` + +4. Update or verify ProcessConfiguration definition: ```TaskBacklog``` section for the WIT you're adding. + + Specifically, make sure that the following conditions are met: + <ul> + <li>Map the start of each workflow state to ```type="Proposed"``` </li> + <li>Map each intermediate workflow state you want to have show up on the task board to ```type="InProgress"``` </li> + <li>Map the end of each workflow state to ```type="Complete"``` </li> + <li>Make sure that you have only one State mapped to ```type="Complete"```</li> + </ul> + For example, add the Blocked workflow state: + ``` + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Blocked" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + ``` +5. Add the WIT color definition to the ProcessConfiguration ```WorkItemColors``` section. For example: + ```<WorkItemColor primary="FFF2CB1D" secondary="FFF6F5D2" name="Service Task" />``` + +6. Update your team project: + - **Hosted XML:** [Import your process](../import-process/import-process.md). + - **On-premises XML:** [Import the definition files you updated](#import-export) in this order: + a. WIT + b. Categories + c. ProcessConfiguration + +5. Confirm that you can add the WIT to the task board. Open the task board page, or refresh the page if it's already open. + You should be able to select either Task or Service Task as a linked work item to a user story. + ![Task board with Service Task work item type added](_img/ALM_AWB_AddTaskConfirm.png) + + On the task board, drag the work item to update its status. You'll notice that you can't drag an item to a column for which the state isn't valid. For example, you can't drag Task to the Blocked state, or a Task into a resolved state. If you want to use these states, then add them to the workflow definition for the corresponding WIT definition. + + +<a id="wits-as-bugs"> </a> +##Add a WIT to the Bug Category + +WITs that you add to the Bug Category will be treated based on the [team setting](show-bugs-on-backlog.md). Because these WITs may be treated either as requirements or tasks, they must meet Agile planning tool requirements for both requirements and tasks. +1. Export your process (Hosted XML) or your definition files (On-premises XML) as indicated in [First steps](#first-steps). +2. Edit the WIT definition to support planning tools by meeting the conditions listed for Step 2 of [Add a WIT to track as requirements](#wit-as-requirements) and [Add a WIT to track as tasks](#wit-as-tasks). + +3. Edit the Categories definition. Add the WIT to the Bug Category. Here we add two WITs. + + ``` + <CATEGORY name="Bug Category" refname="Microsoft.BugCategory"> + <DEFAULTWORKITEMTYPE name="Bug" /> + <WORKITEMTYPE name="Service Bug" /> + <WORKITEMTYPE name="Feedback" /> + </CATEGORY> + ``` + +4. Update or verify ProcessConfiguration definition: ```BugWorkItems``` section for the WIT you're adding. + + Specifically, make sure that the following conditions are met: + <ul> + <li>Map the start of each workflow state to ```type="Proposed"``` </li> + <li>Map each intermediate workflow state you want to have show up on the Kanban or task board to ```type="InProgress"``` </li> + <li>Map the end of each workflow state to ```type="Complete"``` </li> + <li>Make sure that you have only one State mapped to ```type="Complete"```</li> + </ul> + For example, add the Investigate workflow state: + ``` + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Investigate" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + ``` +5. Add the WIT color definition to the ProcessConfiguration ```WorkItemColors``` section. For example: + ```<WorkItemColor primary="FFF2CB1D" secondary="FFF6F5D2" name="Service Bug" />``` + ```<WorkItemColor primary="FFFF00FF" secondary="FFFFCCFF" name="Feedback" />``` + +6. Update your team project: + - **Hosted XML:** [Import your process](../import-process/import-process.md). + - **On-premises XML:** [Import the definition files you updated](#import-export) in this order: + a. WIT + b. Categories + c. ProcessConfiguration +7. [Choose your team setting](show-bugs-on-backlog.md). + +8. Confirm that the WIT appears on the backlogs and boards as expected and that you can add it through the backlogs as expected. + + +<a id="import-export"> </a> +##Import and export definition files (On-premises XML) +Use the **witadmin** commands to import and export definition files. For details, see [witAdmin: Customize and manage objects for tracking work](../reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md). + +[!INCLUDE [temp](../_shared/process-editor.md)] + + +1. Open a Command Prompt window where Visual Studio is installed and enter: + + ```cd %programfiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE``` + + On a 32-bit edition of Windows, replace ```%programfiles(x86)%``` with ```%programfiles%```. + + The version of Visual Studio must be at the same version as the on-premises TFS. + +2. Enter the ```witadmin``` command, substituting your data for the arguments that are shown. For example, to import a WIT: + + ```witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\WITDefinitionFile.xml"``` + + For *CollectionURL* specify the URL of a team project collection and for *ProjectName* specify the name of a team project defined within the collection. You must specify the URL in the following format: ```http://ServerName:Port/VirtualDirectoryName/CollectionName```. + + For *DirectoryPath*, specify the path to the ```WorkItem Tracking/TypeDefinitions``` folder that holds the process template that you downloaded. The directory path must follow this structure: ```Drive:\TemplateFolder\WorkItem Tracking\TypeDefinitions```. + + For example, import the ServiceApp WIT: + + ```witadmin importwitd /collection:"http://MyServer:8080/tfs/DefaultCollection"/p:MyProject /f:"DirectoryPath/ServiceApp.xml"``` + +Use these commands to export and import WITs, categories, and process configuration: + + witadmin exportwitd /collection:CollectionURL /p:"ProjectName" /n:TypeName /f:"DirectoryPath\WITDefinitionFile.xml" + + witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\WITDefinitionFile.xml" + + witadmin exportcategories /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath/categories.xml" + + witadmin importcategories /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath/categories.xml" + + witadmin exportprocessconfig /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath/ProcessConfiguration.xml" + + witadmin importprocessconfig /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath/ProcessConfiguration.xml" + + +##Related notes +We've just shown how to add another WIT to your backlogs or boards. However, if you want to add another WIT to act as a portfolio backlog, see [Add portfolio backlogs](add-portfolio-backlogs.md). + +See [Customize your work tracking experience](customize-work.md) for an overview of all the options available for customizing work tracking objects. + +To learn how hierarchical or nested elements are displayed on a backlog or board, see [How backlogs and boards display hierarchical (nested) items](../troubleshoot/resolve-backlog-reorder-issues.md). diff --git a/docs/work/customize/additional-configuration-options.md b/docs/work/customize/additional-configuration-options.md new file mode 100644 index 00000000000..fb762ef741a --- /dev/null +++ b/docs/work/customize/additional-configuration-options.md @@ -0,0 +1,223 @@ +--- +title: Additional configuration options | TFS +description: Options to configure or customize after you upgrade an on-premises Team Foundation Server to get full access to specific features +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: F89F5890-31E6-47EF-810F-AB75E1AE7E00 +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +<!--- +Supports the following FWLINK: Additional configuration options are available - changes: http://go.microsoft.com/fwlink/?LinkID=242982 - +--> + +#Additional configuration options post update + +[!INCLUDE [temp](../_shared/version-header-tfs-only.md)] + +>[!IMPORTANT] +>This topic applies only to team projects hosted on an on-premises Team Foundation Server (TFS). Team projects on VSTS [update automatically with each service upgrade](/vsts/release-notes/index). + + +After you update your team project with the Configure Features wizard, you have access to the latest features. However, you may need to make some additional configurations or customizations to support your work tracking needs. Also, you have access to some features based on the source control setting selected when your team project was created. + +<table> +<tbody valign="top"> +<tr> +<th width="15%">Feature</th> +<th width="35%">Usage</th> +<th width="50%">Configuration options</th> +</tr> +<tr> +<td> +Code Review +</td> +<td> +Adds the Code Review Request and Code Review Response work item types (WITs). With them, you can [request a code review and track code review responses](../../tfvc/get-code-reviewed-vs.md). +</td> +<td> +**Required:** [Configure an SMTP server for TFS](../../tfs-server/admin/setup-customize-alerts.md). <br/> +**Required:** Visual Studio (any version). +**Availability:** Only supported when your team project uses Team Foundation version control for source control. +</td></tr> +<tr> +<td> +My Work +</td> +<td> +Adds support for automatic update of bug status when using My Work. Use to automate some activities when [developing code and managing pending changes](../../tfvc/develop-code-manage-pending-changes.md). +</td> +<td> +**Required:** Visual Studio (any version). +**Availability:** Only supported when your team project uses Team Foundation version control for source control. +</td> +</tr> +<tr> +<td> +Feedback +</td> +<td> +You can [request feedback](../connect/get-feedback.md) from your stakeholders and capture their comments on your working software. Reviewer feedback--in the form of videos, screenshots, type-written comments, and ratings--is captured into work items that you can review and use to create a bug or suggest a new backlog item. +</td> +<td> +**Required:** Provide [Advanced access](../../security/change-access-levels.md) to users who'll request feedback.<br/> +**Required:** [Configure an SMTP server for TFS](../../tfs-server/admin/setup-customize-alerts.md). <br/> +**Required:** [Grant stakeholders permission](../connect/give-permissions-feedback.md). + +</td> +</tr> +<tr> +<td> +Planning Tools +</td> +<td> +These tools provide access to product and sprint backlogs, the Kanban board and task boards, and the ability to add teams. +<ul> +<li>[Create-your-backlog](../backlogs/create-your-backlog.md) </li> +<li>[Kanban basics](../kanban/kanban-basics.md) </li> +<li>[Plan a sprint](../scrum/sprint-planning.md)</li> +<li>[Work with the task board](../scrum/task-board.md).</li> +</ul> </td> +<td> +**Required:** To work with sprint backlogs and boards, you must [activate the sprints for each team](../scrum/define-sprints.md). <br/> +Additional options that you can configure:<br/> +<ul> +<li>[Add a team or set up a hierarchy of teams](../scale/multiple-teams.md) </li> +<li>[Set team working days off](../customize/set-working-days.md)</li> +<li>[Define additional sprints or releases](../scrum/define-sprints.md).</li> +</ul> +In addition, you can customize the following options by modifying the [ProcessConfiguration](../reference/process-configuration-xml-element.md) definition:<br/> +<ul> +<li>Add fields to the quick add panel of backlogs</li> +<li>Change the color used to display work items</li> +<li>Change the default columns and column sequence of backlogs</li> +<li>Map metastates to customized WIT workflow states</li> +<li>Change the fields used in Agile tools and charts </li> +</ul> + +For additional customization options, see [Customize work tracking objects](customize-work.md).<br/> + +If you've upgraded your TFS instance from [TFS 2010](#update-from-2010) or [TFS 2012](#update-from-2012), we recommend you update the workflow for select WITs to get the full functionality of your backlogs and boards. +</td> +</tr> +<tr> +<td> +Storyboarding +</td> +<td> +With this feature, you can [storyboard your ideas using the Storyboarding add-in to PowerPoint](../office/storyboard-your-ideas-using-powerpoint.md). +</td> +<td> +**Required:** [Office PowerPoint 2007 or later](http://www.microsoftstore.com/store/msstore/pd/PowerPoint-2010/productID.216564300)<br/> +**Required:** Visual Studio Community ([get your free download](https://www.visualstudio.com/free-developer-offers/)) or other Visual Studio version installed. +</td> +</tr> +<tr> +<td>Portfolio Backlogs</td> +<td>With Portfolio Backlogs enabled, you can use the Feature and Epic portfolio backlogs to [organize your backlog](../backlogs/organize-backlog.md) by grouping related items into a hierarchical structure. +</td> +<td> +Most of your team will be able to view and create Epics and Features once you've enabled the Portfolio Backlogs feature. However, you may need to enable one or more of these backlogs for a team as described in [Organize your backlogs](../backlogs/organize-backlog.md). <br/> + +All stakeholders and contributors to your team project can view and add items to a portfolio backlog. However, to reorder, reparent, and exercise other portfolio backlog features, you need to have [Advanced access](../../security/change-access-levels.md).<br/> + +<p>Other resources you may find useful to manage your teams and backlogs:</p> +<ul> +<li>[Set up a hierarchy of teams and backlogs - Portfolio management](../scale/portfolio-management.md)</li> +<li>[Implement the Scaled Agile Framework to support epics, release trains, and multiple backlogs](../scale/scaled-agile-framework.md)</li> +<li>[Add up to 5 levels of portfolio backlogs](add-portfolio-backlogs.md) </li> +</ul> +</td> +</tr> +<tr> +<td> +Shared Parameters +</td> +<td> +This feature adds the Shared Parameters work item type (WIT). With it [you can repeat a test with different data](../../manual-test/repeat-test-with-different-data.md). +</td> +<td> +No additional configurations or customizations required. +</td> +</tr> + + +<tr> +<td> +Test Plan and Test Suite +</td> +<td> +This feature adds the Test Plan and Test Suite WITs, and converts existing test plans and test suites to work items. With this feature enabled, you can now customize these WITs like other work items, and create queries to find test plans and test suites. +</td> +<td> +To fully manage web-based test plans, you need to have [Advanced access](../../security/change-access-levels.md).<br/> +You can customize the test plan and test suite WITs in the same way you can customize other WITs. See these topics to learn more: <br/> +<ul> +<li>[Field customizations](add-modify-field.md): Add a custom field, modify a pick list, or add a field rule.</li> +<li>[Work item form customizations](add-modify-wit.md) : Modify the form layout for the bug, test case, test plan, or test suite.</li> +<li>[Workflow customizations](add-modify-wit.md) : Modify the workflow definitions for the bug, test case, test plan, or test suite.</li> +<li>[Test failure types](../reference/witadmin/tcm-customize-manage-test-experience.md): Specifies the reasons why a test run failed. The default configuration includes: Regression, New Issue, Known Issue, and Unknown.</li> +<li>[Test resolution states](../reference/witadmin/tcm-customize-manage-test-experience.md): Specifies the action to take after a test run failure. The default configuration includes: Needs investigation, Test issue, Product issue, and Configuration issue.</li> +</ul> +If you add or change the workflow states for the test plan or test suite type definitions, review the [additional configuration requirements when working with Visual Studio 2013.2 or earlier versions](#test-case-management). +</td> + +</tr> + +<tr> +<td> +Bug Behavior +</td> +<td> +This feature allows teams to choose whether to track bugs like requirements or like tasks. +</td> +<td> +To get started, each team must choose their preference as described in [Show bugs on backlogs and boards feature](show-bugs-on-backlog.md). +</td> +</tr> +</tbody> +</table> + +##Related notes + +If you are the server administrator for TFS and don't actually contribute to a team, then you may want to [remove yourself as a member, and add a project lead as the team administrator](../../accounts/add-users.md). (When you ran the Configure Features wizard, the system automatically added your user account as a team administrator for the team project.) + +If you have updated a team project based on v5.0 of MSF for Agile, do the manual updates described in [Update the Workflow for Agile Team Projects](../reference/update-the-workflow-for-agile-team-projects.md). + +<a id="test-case-management"> </a> + +###Test case management and custom workflow states +If you add or change the workflow states for the test plan or test suite type definitions, and you work from a Test Manager client provided with Visual Studio 2013.2 or earlier versions, you must also update the process configuration for the team project as well. Otherwise, you'll encounter an **Application detected an unexpected fault** error when you connect to your team project. + +![Application fault error message after TFS upgrade](_img/ALM_CF_AppFaultErrMsg.png) + +To resolve this error, see [Import and export process configuration [witadmin]](../reference/witadmin/witadmin-import-export-process-configuration.md). + +<a id="update-from-2012"> </a> +###Recommended updates to team projects created from TFS 2012 process templates + +There are no additional required customizations to make after updating from TFS 2012 to TFS 2015. However, there are some recommended updates to make to the workflow of specific WITs. + +The updates bring your team project up to date with the workflow settings that are defined in the latest versions of the default process templates. + +You might want to update the workflow of specific WITs to support missing transitions, additional reasons, and field assignments. Making this update revises the workflow for the following WITs to the latest version of their process template workflow: + +* Scrum 2.0 to Scrum 2013: Product Backlog Item and Bug +* Agile 6.0 to Agile 2013: User Story +* CMMI 6.0 to CMMI 2013: Requirement + +For details, see [Upgrade your 2012 team project from RTM to Update 2](http://blogs.msdn.com/b/visualstudioalm/archive/2013/04/04/upgrade-your-2012-process-template-from-rtm-to-update-2.aspx). You can learn about additional changes made to enable features from [Changes made to process templates](../guidance/changes-to-process-templates.md). + + +If you haven't customized your work item types or process configuration, you can update the items quickly by using **witadmin**. Just [download the latest version of the process template](../guidance/manage-process-templates.md) that is compatible with the one used to create your team project and then [import the updated WITs](../reference/witadmin/witadmin-import-export-manage-wits.md). + +<a id="update-from-2010"> </a> +###Recommended updates to team projects created from TFS 2010 process templates + +If you've updated a team project that was created with an MSF v 5.0 Agile process template, then you'll also want to [manually update the user story and task workflow assignments](../reference/update-the-workflow-for-agile-team-projects.md). + +If you don't update the workflow, then the task board provides only two states, Active and Closed. This prevents you and your team from distinguishing between tasks that are in progress from those that haven't been started. + +Also, you might want to apply the workflow updates to the User Story as described in [Upgrade your 2012 team project from RTM to Update 2](http://blogs.msdn.com/b/visualstudioalm/archive/2013/04/04/upgrade-your-2012-process-template-from-rtm-to-update-2.aspx). diff --git a/docs/work/customize/breadcrumb/toc.yml b/docs/work/customize/breadcrumb/toc.yml new file mode 100644 index 00000000000..64463af42a8 --- /dev/null +++ b/docs/work/customize/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Agile + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=agile + items: + - name: Customization + tocHref: /vsts/ + topicHref: /vsts/work/customize/index \ No newline at end of file diff --git a/docs/work/customize/configure-features-after-upgrade.md b/docs/work/customize/configure-features-after-upgrade.md new file mode 100644 index 00000000000..abcd01ffeda --- /dev/null +++ b/docs/work/customize/configure-features-after-upgrade.md @@ -0,0 +1,158 @@ +--- +title: Configure features after an upgrade +description: Configure features after an upgrade to the application-tier server of Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: A71B6DD4-2780-4B61-B863-03BBE44AC953 +ms.manager: douge +ms.author: kaelli +ms.date: 03/16/2017 +--- + +# Configure features after an upgrade + +[!INCLUDE [temp](../_shared/version-header-tfs-only.md)] + +>[!IMPORTANT] +>**Feature availability**: This topic applies only to team projects hosted on an on-premises Team Foundation Server (TFS). Team projects on VSTS [update automatically with each service upgrade](/vsts/release-notes/index). + +After a TFS upgrade, you'll want to use the new features that were installed. Some of these features might require updates to your team project. The Configure Features wizard is the easiest way to make this happen. + +>[!NOTE] +>If you're upgrading from TFS 2010 or an earlier version, review the steps outlined in [When upgrading from TFS 2008 or TFS 2010](upgrade-tfs-2008-or-2010.md). <br/> +If you need to upgrade TFS, [go to the downloads page](https://www.visualstudio.com/downloads/). <br/> +If you have several team projects to update, you can [apply updates programmatically](#program-updates). + +<a id="RunConfigureFeaturesWizard"/> +##Run the Configure Features wizard + +1. From the web portal home page, open the administration context. + + ![Open the administration page](../connect/_img/ALM_CAL_OpenAdminPage.png) + + If you're not a team project administrator, [get added as one](../../accounts/add-users.md). Only project administrators or TFS administrators can run the wizard. + +3. If you see a **Configure Features link**, run the wizard. + + ![Configure features, list of features configured or not configured](_img/ALM_CFW_ConfigFeatures.png) + + <blockquote style="font-size: 13px"><b>Note: </b>If Portfolio Backlogs shows as **Not configured**, then the wizard will add the Feature and Epic WIT and categories to the team project and modify the process configuration to support portfolio backlogs. However, if it shows as **Previously configured (will be skipped)**, the wizard won't add the Epic WIT and portfolio backlog. To add he Epic portfolio backlog, you'll need to [add it manually](add-portfolio-backlogs.md). </blockquote>   + + The features listed depend on the TFS version of software installed. To get the latest features, upgrade your server to the latest version. + + If Test Plan and Test Suite are not configured, you'll need to [manually import the WIT definitions and migrate data](../reference/update-a-team-project-manually-to-support-test-management.md). + + If you don't see the **Configure Features** link, you can start using the [new features](new-features-added.md) as they're already enabled. + +4. If you receive a message similar to the one shown below, you can configure your team project. If more than one process template is available, accept the recommended version. + + ![Updated team project with unconfigured features](_img/ALM_CF_UpdatedUnconfig.png) + + If the dialog box doesn't contain a **Configure** option, then you'll need to [apply the updates manually](add-features-manually.md). + +5. In most cases, the wizard will configure all the new features and you'll receive a success message. + + ![Success message upon configuring features](_img/ALM_CF_SuccessConfig.png) + + Occasionally, the wizard will partially update your team project and return error messages that require resolution. Make a note of the errors that you receive and perform [manual updates to resolve each error](https://msdn.microsoft.com/library/hh913787.aspx). + +##Apply updates manually +<a id="ApplyUpdatesManually"> </a> + +When the wizard can't update a team project, it returns a message indicating that there are no process templates available to support the update. + + ![Configure features wizard returns error messages](_img/ALM_CF_WizardErrorMsg.png) + +When this occurs, you'll need to perform some manual updates according to one of the following options: + +* If your team project is based on a process template other than those that TFS provides, [update the customized process template used to create the team project](update-customized-process-template.md), and then run the Configure Features wizard. + + TFS process templates correspond to Scrum, Agile, and CMMI as described in [Choose a process](../guidance/choose-process.md). + +* If your team project has been heavily customized, but not the process template, [add the new features manually](add-features-manually.md). + +* If your team project was based on a v4.2 or earlier process template version, first [apply the updates to comply with TFS 2012 manually](../reference/update-a-team-project-v4-dot-2-process-template.md). Then run the Configure Features wizard. + +##Try this next +You'll be able to start using several of the new features after they've been enabled. However, a few features require [additional configuration, or provide configuration options](additional-configuration-options.md). + +In particular: + +- To view and work with Epic and Feature portfolio backlogs, you may need to [select them for your team](select-backlog-navigation-levels.md) +- To add the Epic portfolio backlog to your team project or additional portfolio backlog levels, you can [add them manually](add-portfolio-backlogs.md). +- To use Code Review and Feedback Request, you need to [configure an SMTP server for TFS](../../tfs-server/admin/setup-customize-alerts.md). +- To use Bugs Behavior, you must configure this option as described in [Show bugs on backlogs and boards feature](show-bugs-on-backlog.md). +- To fully manage Epic and Feature portfolio backlogs or web-based test plans, you need to have [Advanced access](../../security/change-access-levels.md). + +<a id="related-notes"> </a> +##Related upgrade notes + +The Configure Features wizard will work in most cases to update your team project. In the event that you are upgrading from a much earlier version of TFS or you've customized your team project, you'll need to make some manual updates. + +See the following resources as they relate to updating your team project: + +- [New features added when you update TFS](new-features-added.md) +- [Update a customized process template to access new features](update-customized-process-template.md) +- [Add features using a manual update process](add-features-manually.md) +- [Before you upgrade TFS](upgrade-tfs-2008-or-2010.md) +- [Additional configuration options](additional-configuration-options.md) +- [Changes made to process templates to support new features](../guidance/changes-to-process-templates.md) + +If you have additional questions, you can post one or search for answers in the [Team Foundation Server - work tracking](http://social.msdn.microsoft.com/Forums/tfsworkitemtracking/threads) forum. + + +<a id="program-updates"> </a> +###Programmatically update several team projects (TFS 2015, TFS 2013) + +If the team projects were created from the same process template, you should be able to modify the source process template, upload it, and then batch update all team projects defined for a team project collection. Review the following resources: +* [Update a customized process template to access new features](update-customized-process-template.md) +* [How to Configure Features for dozens of team projects](http://blogs.msdn.com/b/visualstudioalm/archive/2012/05/31/how-to-configure-features-for-dozens-of-team-projects.aspx) +* [Features4tfs CodePlex solution](https://features4tfs.codeplex.com/). + +###Resolve warning or error messages related to the update of test management artifacts + +See [Manual updates to support test plans and test suites](../reference/update-a-team-project-manually-to-support-test-management.md). + +###Understand how the Configure Features wizard works + +The Configure Features wizard adds new objects to your team project and might update a few existing objects, but does not change your data or the workflow. It adds the new objects based on the best match of settings defined within the installed process templates and your team project. The wizard references both updated customized process templates and the latest version of Microsoft process templates installed to your team project collection and added during the upgrade process. If the wizard determines that there is more than one process template that could be used to configure features, it selects the one that best matches your existing team project and that is the latest version. + +Here's what the Configure Features wizard does: + +1. Scans the definitions in the team project to determine which features are and aren't configured. +2. Determines which process template stored in the team project collection contains the best match of definitions to configure missing features. +3. For each feature that can be configured, uploads the definitions for new objects or modifies existing definitions. To learn how the wizard configures each specific feature, see [Changes made to process templates](../guidance/changes-to-process-templates.md). + + +###Required objects used by the Configure Features wizard + +The Configure Features wizard depends on the following objects to run and to successfully update your team projects: + +* The ProcessTemplate file must include the version statement. If the version statement is not present, the Configure Features wizard cannot select the process template for updating a team project. Also, the highest version number must be unique for each template ID. If more than one process template that specifies the same highest version number for the same template ID has been uploaded to TFS, then none of the process templates can be selected for updating a team project. + + + * For each field defined for a team project collection, the following attributes must match: + + * Friendly name + + * Data type + + * Assignment to synchronize personal names with Active Directory (syncnamechanges). + + * Reporting attributes: reporting reference name, reporting name, reporting type, and reporting format + + * Reference names assigned to fields and link types must be unique within a team project collection. + + + * Friendly names of the categories must be unique within a team project. + + * Certain work item types (WITs) and categories are required for the wizard to configure a feature. If you have renamed or deleted any of these WITs or categories, the wizard will return the following messages: + +       ```There are no process templates available with valid configuration settings for this team project.``` + +       ```Your team project cannot be configured automatically.``` + + You will have to rename or reinstate the missing WITs or categories to your team project, and then rerun the wizard. Or, you can modify the process templates to add the features and then rerun the wizard. + +If any conflicts occur, you will need to [resolve the error message you receive](https://msdn.microsoft.com/library/hh913787.aspx). + diff --git a/docs/work/customize/customize-cards.md b/docs/work/customize/customize-cards.md new file mode 100644 index 00000000000..1c84ee42163 --- /dev/null +++ b/docs/work/customize/customize-cards.md @@ -0,0 +1,344 @@ +--- +title: Customize cards | VSTS & TFS +description: Customize cards on the Kanban and Sprint/Scrum/Task boards for Agile planning tools in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 951A73EA-7411-4A2A-B3F0-ACBBC7EFC68F +ms.manager: douge +ms.author: kaelli +ms.date: 08/10/2017 +--- + + +# Customize cards + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +While many work tracking views show up as lists—such as your backlogs and queries—board views display cards. Information rich cards not only provide at-a-glance info of interest to you and your team, they also provide a way for you to update a field without opening the work item. And, with style rules, you can highlight those work items with select colors based on the criteria you set. + +Each card corresponds to a work item which you use to share information, track status, and assign work. + +In this example, the bug work item type (WIT) shows all the core fields, three additional fields, and tags. Also, To make severity 1 bugs stand out, a styling rule has been added to cause the card to display as yellow. + +<table> +<tbody valign="top"> +<tr> +<td> +In this example, the following customizations have been set for the bug work item type (WIT): +<ul> +<li>Show all core fields: ID, Assigned To, Story Points, Tags </li> +<li>Show three additional fields: State, Changed By, and Changed Date</li> +<li>Apply tag colors</li> +<li>Apply styling rule to display bugs with Severity=1 as yellow and bold and underline the Title field</li> +</ul> +</td> +<td width="460px"> +![Card customize to show additional fields, tags, and style rule ](_img/card-customize-example-bug-with-callouts.png) +</td> +</tr> +</tbody> +</table> + +You can either increase or simplify the information that displays on your cards. It all depends on what's of interest to your team. Does your team like to refer to work items by their ID? Do they want to see estimates? Do they want to highlight work items according to set criteria? Or, will just the bare bones of title and assignment suffice? + +Your best bet is to show fields on cards based on what your team frequently refers to or updates when using the Kanban and task boards. If you're new to working with these tools, see [Kanban basics](../../Work/kanban/kanban-basics.md) and [Sprint planning](../scrum/sprint-planning.md). + + +[!INCLUDE [temp](../_shared/feature-availability-simple.md)] + +<table width="80%"> +<tr> +<th width="20%">Option </th> +<th width="20%">Team Services</th> +<th width="20%">TFS 2015 </th> +<th width="20%">TFS 2015.1,2 </th> +<th width="20%">TFS 2017 </th> +</tr> + + +<tr> +<td align="left">[Fields](#fields)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">[Styles](#styles)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">[Tag colors](#color-tags)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">[Annotations](#annotations)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">[Tests](#tests)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + + +</table> + + +<a id="fields"></a> +## Add fields and update them from the board +Using the board views provides you with quick and easy ways to update work items as work progresses. Making daily or frequent updates helps everyone on your team stay in sync with what's been done and what needs doing next. + +To update status of a work item, you simply drag-and-drop cards to a different column. To change the order or stack ranking of a work item, you drag a card up or down within a column. + +For example, on the Kanban board, moving the card from Analyze to Develop updates the corresponding State field. In this case, the State field updates from Approved to Committed. + +![Kanban board, move a work item](_img/ALM_CC_MoveCard.png) + +Another handy feature is to simply update a field without having to open the work item. You can update most fields shown on the card. Here we reassign a requirement. + +![Kanban board, assign a work item](_img/ALM_CC_UpdateFieldOnCard.png) + +This quick update feature is particularly useful when you need to update a number of work items at once. For example, you can add estimates for backlog items on the Kanban board or update remaining work on the task board. + +To change the title, click the pencil icon in the upper-right corner. To add tags, double-click the work item to open it. And, just a reminder, you can't change the IDs for a work work item, not from the card and not from within the form. + +To customize cards on the Kanban board, see [Change how cards display on the Kanban board](#kanban-board). To customize task board cards, see [Change how cards display on the task board](#task-board). + +<a id="styles"></a> +## Highlight work items based on custom criteria + +>[!NOTE] +><b>Feature availability: </b>This feature is supported from VSTS or the web portal for TFS 2015.1 or later version. + +With styling rules, you can cause cards to change color when their corresponding work items meet criteria that you set. Here, we highlight severity 1 bugs by having the cards display as yellow. + +![Styling rule applied to bugs with Severity=1](_img/kanban-board-card-style-rule-example.png) + + +### Example styling rules +What rules should you apply to highlight work items? Here are a few examples and their associated criteria . + + +| Work items | Criteria | +|------------|------------| +| High priority items | ```Priority = 1``` | +| High effort items | ```Effort > 20 ``` or ```Story Points > 20 ``` | +| Stale items unchanged in the last 5 days | ```Changed Date > @Today-5``` | +|Title contains a key word | ```Title Contains Yes``` | +|Severity 1 bugs | ```Severity = 1 - Critical AND Work Item Type = Bug``` | +|High value business items | ```Business Value > 50``` | +|Items assigned to specific feature area | ```Area Path Under Fabrikam Fiber\Phone``` | +|Contains specific tag | ```Tags Contain RTM``` | +|Blocked tasks (Scrum process only) | ```Blocked = Yes``` | + + + +<a id="kanban-board"> </a> + +## Change how cards display on the Kanban board + +As a first step, you'll see that you can change the card display for each work item type (WIT) that shows up on your Kanban board. + +1. From your Kanban board, open Settings (for on-premises TFS, choose Cards). + + <img src="_img/kanban-card-customize-open-settings.png" alt="Kanban board, open card customizationd" style="border: 2px solid #C3C3C3;" /> + + If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can customize cards. Learn more about accessing and using your Kanban board from [Kanban basics](../kanban/kanban-basics.md). + +2. Select the WIT you want to customize. Different WITs may present different options for customization. + + Here we choose User Story. Your choices will vary based on the following: + <ul> + <li>You connect to VSTS or an on-premises TFS</li> + <li>[Process](../guidance/choose-process.md) used to create your team project</li> + <li>Whether your team has chosen to [treat bugs like requirements or like tasks](show-bugs-on-backlog.md) </li> + + **Card field options:** <br/> + <table> + <tbody valign="top"> + <tr> + <th>VSTS and TFS 2015 Update 1 options</th> + <th>TFS 2015 options</th> + </tr> + <tr><td>Select core fields—ID, Assigned to, Estimate, Tags—to display on the card</td> <td>Select core fields to display on the card</td> </tr> + <tr> + <td>Choose to show avatar, full name, or both for Assigned to field </td> <td>Choose to show avatar, full name, or both for Assigned to field</td> </tr> + <tr><td>Add and reorder fields that display on the card</td> <td>Add fields that display on the card (To change the order, you have to start over) </td> </tr> + <tr><td>Choose to show or hide fields that contain no data</td> <td>n/a</td> </tr> + </tbody> + </table> + + **VSTS and TFS 2015 Update 1 options:** + + <img src="_img/vso-kanban-card-customize.png" alt="Kanban board, VSTS card customization dialog" style="border: 2px solid #C3C3C3;" /> + + **TFS 2015 options:** + + ![Kanban board, card customization dialog](_img/ALM_CC_KBCardOptions.png) + +1. Once you've clicked a WIT, select all the options that you want for that work item type. + + If you want work estimates to show, check the Show Effort, Story Points, Size, or Cost option. Cost corresponds to these fields: Effort ([Scrum](../guidance/scrum-process.md)), Story Points ([Agile](../guidance/agile-process.md)), and Size ([CMMI](../guidance/cmmi-process.md)) field. + +2. To add a field to a card, click ![add icon](../_img/icons/add_icon.png) to select a field from the drop-down menu. <br/> + + <img src="_img/customize-cards-add-fields.png" alt="Kanban board, Add fields to a card" style="border: 2px solid #C3C3C3;" /> + +3. To add a custom field, you must first [add it to the WIT definition](add-modify-field.md). <br/> + + Here we've added three fields:<br/> + + <img src="_img/customize-cards-three-fields-added.png" alt="Kanban board, three fields added" style="border: 2px solid #C3C3C3;" /> + + You can edit a value in a field you add to a card, unless it's a read-only field, such as the Change By and Changed Date fields. + +You can also customize the cards that appear on the Kanban board for features and epics. You follow similar steps, however you start from the [corresponding portfolio backlog](../backlogs/define-features-epics.md). + + + +<a id="task-board"> </a> +## Change how cards display on the task board +Scrum teams use the task board to burn down work and report on progress during daily standups. Your task board shows cards that correspond to both requirements and tasks. If you want bugs to appear on the task board, change your team settings for [show bugs on the backlogs and boards](show-bugs-on-backlog.md). + +You change the way cards display on the task board the same way you change the Kanban cards display. Only here, you start from the task board. + +1. Open Settings from your task board (for on-premises TFS, choose Cards). + + <img src="_img/task-board-customize-open-settings.png" alt="Task board, open card customization dialog" style="border: 2px solid #C3C3C3;" /> + + Remember, only [team or project administrators](../scale/add-team-administrator.md) can customize the task board. + +2. Just as before, choose the WIT you want to customize, and then checkmark or select the options you want. + + **VSTS and TFS 2015 Update 1 options:** + + <img src="_img/vso-task-board-card-customize.png" alt="Task board, card customization dialog" style="border: 2px solid #C3C3C3;" /> + + **TFS 2015 options:** + + <img src="_img/ALM_CC_TaskCardOptions.png" alt="Task board, TFS card customization dialog" style="border: 2px solid #C3C3C3;" /> + +3. Repeat this step for each WIT you want to change. Don't be surprised if the options change when you click on a different WIT. For example, Show Remaining Work only applies to tasks and perhaps bugs, but not to PBIs or requirements. + +4. To add a field to a card, click the add field icon to select a field from the drop-down menu. + +<a id="style-rule"> </a> +## Add style rules to highlight work items with color + +>[!NOTE] +><b>Feature availability: </b>This feature is supported from VSTS or the web portal for TFS 2015.1 or later version.    + +1. To cause a card on the Kanban board to change color based on criteria you specify, open Styles. Add a styling rule and set the criteria for the rule. + + <img src="_img/vso-card-styling.png" alt="Kanban board, Style dialog" style="border: 2px solid #C3C3C3;" /> + + Follow these rules when creating and ordering your style rules: + - The criteria you specify works in a similar fashion as when [constructing a query](../track/using-queries.md) + - All clauses are considered AND clauses, grouping clauses isn't supported + - Card rules apply to all work items that meet the rule criteria + - Rule color applies to work items based on the order in which rules are listed. If you add more than one style rule, make sure that you move them in the order of most importance. Simply drag them into the order you want them applied. + - You can quickly enable and disable a style rule +<br/> +2. To highlight work items on the task board, open Styles from the task board Settings and add a styling rule. + Here we add a Stale tasks rule which highlights tasks that haven't changed in the last five days. + + ![Task board, Style dialog, example style rule](_img/task-board-card-style-rule-stale-tasks.png) + +<a id="color-tags"> </a> +## Add color to your tags + +>[!NOTE] +><b>Feature availability: </b>This feature is supported from VSTS or the web portal for TFS 2015.1 or later version. + +1. Prior to setting tag colors, first [add tags to backlog items](../track/add-tags-to-work-items.md) that you want to highlight with color. + +2. To add color to Kanban cards, open Tag colors and select a tag and the color you want it to display. + + <img src="_img/kanban-card-customize-tag-colors.png" alt="Kanban board, tag colors" style="border: 2px solid #C3C3C3;" /> + + If tags don't display on the cards, open Fields and make sure that you've checked Show Tags. + + +<a id="annotations"> </a> +## Annotations + +>[!NOTE] +><b>Feature availability: </b>This feature is supported from VSTS and TFS 2017. + +With the Kanban board, you gain a rich set of tools and a rich set of customization options. Annotations provide visual cues about work items, indicating the number of tasks or tests that have been defined for that work item. Click an annotation to expand the set or gain more information. + +As shown in the following examples, the Task and Test annotations indicate that two each of tasks and tests have been defined for the work item. If you find that there are some features you're not using, you can disable them from the Annotations tab. + +> [!div class="mx-tdBreakAll"] +> | Task annotations |Test annotations |No annotations | +> |-------------|----------|----------| +> |<img src="_img/annotate-task.png" alt="Task annotations enabled" style="border: 2px solid #C3C3C3;" /> | <img src="_img/annotate-test.png" alt="Test annotations enabled" style="border: 2px solid #C3C3C3;" /> | <img src="_img/annotate-none.png" alt="Annotations disabled" style="border: 2px solid #C3C3C3;" /> | + +To learn more about using these features, see [Add task checklists](../kanban/add-task-checklists.md) and [Add, run, and update inline tests](../kanban/add-run-update-tests.md). + +### Enable or disable an annotation + +1. To open, click the ![gear icon](../_img/icons/team-settings-gear-icon.png) gear icon from your team's Kanban board. + + <img src="../customize/_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + + If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can set team settings. + +2. From the Annotations tab, check those annotations that you want enabled. For example, to enable tasks but disable tests, check the following boxes. + + <img src="_img/annotate-settings.png" alt="Kanban board, Settings dialog, Annotations tab" style="border: 2px solid #C3C3C3;" /> + + The setting you choose applies to all active Kanban boards for your team, i.e., backlog, features, and epics. + + +<a id="tests"> </a> +## Configure inline tests + +>[!NOTE] +><b>Feature availability: </b>This feature is available from VSTS and TFS 2017. + +You can control the test plan under which inline tests you add through the Kanban board are created. You can choose to create a new test plan for each new test that you add, or add all new tests to a selected test plan going forward. + +1. To open, click the ![gear icon](../_img/icons/team-settings-gear-icon.png) gear icon from your team's Kanban board. + + If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can set team settings. + +2. From the Tests tab, choose the option you want. You must enable the Test annotation feature in order to configure tests. To select a test plan, click the ![Actions icon](../_img/icons/actions-icon.png) actions icon and select one test plan from the query provided. + + <img src="_img/c-cards-test-settings.png" alt="Kanban board, Settings dialog, Tests tab" style="border: 2px solid #C3C3C3;" /> + +3. Save your changes. + +###Open the test plan, test suite from a card + +From a card on the Kanban board, you can easily navigate to the underlying test plan and test suite under which the tests are created. Click the ![open icon](../_img/icons/open-icon.png) open icon to open another browser tab showing the Test hub and associated test plan and test suite that controls the inline tests. + +<img src="_img/c-cards-navigate-to-test-suite.png" alt="Kanban board, Card, Go to test plan" style="border: 2px solid #C3C3C3;" /> + + +## Related notes +That's all there is to card customization. See these choices for further options to customize the Kanban and task board: + +* [Add, rename, move, and delete columns](../kanban/add-columns.md) +* [Card reordering](reorder-cards.md) +* [Split columns](../kanban/split-columns.md) +* [Expedite work](../kanban/expedite-work.md) +* [Show bugs on backlogs and boards](show-bugs-on-backlog.md) + +For even more customization options for work tracking, start with [Customize your work tracking experience](customize-work.md). diff --git a/docs/work/customize/customize-wit-form.md b/docs/work/customize/customize-wit-form.md new file mode 100644 index 00000000000..fc4ad746c79 --- /dev/null +++ b/docs/work/customize/customize-wit-form.md @@ -0,0 +1,130 @@ +--- +title: Customize the layout | VSTS +description: Customize the web version of the work item form when connecting to a team project hosted on Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 4DE53686-3349-41B8-A361-814B2519E60F +ms.manager: douge +ms.author: kaelli +ms.date: 12/05/2016 +--- + +#Customize the work tracking web form + + +<b>VSTS | TFS 2018 | TFS 2017</b> + +>[!IMPORTANT] +><b>Feature availability: </b>This topic applies to customizations you can make when you use the Hosted XML process model, or you've update your application-tier server to Team Foundation Server 2017 (which uses the On-premises XML process model). For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +Just as you have been able to customize the form layout for your work item types, you can continue to do so with the new web form. The new form makes available several features that are not available with the old form. Your account or project collection administrator manages the [switch to the new form](manage-new-form-rollout.md). When the new form is enabled for the account or team project collection, the WebLayout section is added to the XML definition for each WIT defined in the collection. + + +>[!NOTE] +>Prior to customizing the web form, your account administrator must have [enabled the new form for your account on VSTS and TFS](manage-new-form-rollout.md). + + +You customize transformed WITs in much the same way as you have previously. The path is slightly different depending on your platform and previous customization choices. + +### Import/export XML definition files + +Use this sequence when you use the On-premises XML process model, i.e., you manage your TFS work tracking customization through import of individual XML definition files. + +[![Export WIT definition file](_img/cust-wit-form-export-def-file.png)](#witadmin)[![Edit XML definition file](_img/cust-wit-form-edit-def-file.png)](../reference/weblayout-xml-elements.md)[![Import WIT definition file](_img/cust-wit-form-import-def-file.png)](#witadmin)![Refresh and verify changes](_img/cust-wit-form-refresh-verify.png) + +### Import/export process zip files +Use this sequence when you use the Hosted XML process model, i.e., you manage your Team Services work tracking customization by importing a process or process template. + +[![Export process](_img/cust-wit-form-export-process.png)](../import-process/import-process.md#export-process)[![Edit XML definition file(s)](_img/cust-wit-form-edit-def-file.png)](../reference/weblayout-xml-elements.md)[![Import process](_img/cust-wit-form-import-process.png)](../import-process/import-process.md)![Refresh and verify changes](_img/cust-wit-form-refresh-verify.png) + + +The main difference is that there are now two main layout sections within the **FORM** node. The first section, contained within the **Layout** element, defines the form layout when viewed through a client such as Visual Studio. The second section, contained within the **WebLayout** element, defines the form layout when viewed through a web browser. + +``` +<FORM> + <Layout HideReadOnlyEmptyFields="true" HideControlBorders="true"> + . . . + </Layout> + <WebLayout> + . . . + </WebLayout> +</FORM> +``` + +See the following topics to make the indicated customizations: + +- To customize the form for the web portal (**WebLayout** node), see [WebLayout and Control XML elements](../reference/weblayout-xml-elements.md) +- To add a scoped links control to the form for the web portal (**LinksControlOptions**), see [LinksControlOptions XML elements](../reference/linkscontroloptions-xml-elements.md) +- To customize the client form (**Layout** node), see [Layout XML elements](../reference/layout-xml-element-reference.md). + + +<a id="witadmin"> </a> +### Import and export WIT definition files + +1. If you don't have administration permissions for your team project, [get them](../../security/set-project-collection-level-permissions.md). + +2. Open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + cd %programfiles%\Microsoft Visual Studio 12.0\Common7\IDE + + On a 64-bit edition of Windows, replace %programfiles% with %programfiles(x86)%. Go [here to download Visual Studio Community](https://go.microsoft.com/fwlink/?LinkId=691978&clcid=0x409) for free. + +3. Export the WIT definition file where you want to modify or add a field. Specify the name of the WIT and a name for the file. + + witadmin exportwitd /collection:CollectionURL /p:ProjectName /n:TypeName /f:"DirectoryPath/FileName.xml" + + An example of a *CollectionURL* for a VSTS account is https://*MyAccountName*.visualstudio.com/DefaultCollection. + +4. Edit the file. For details, see [WebLayout XML elements](../reference/weblayout-xml-elements.md). + +5. Import the WIT definition file. + + witadmin importwitd /collection:CollectionURL /p:ProjectName /f:"DirectoryPath/FileName.xml" + +6. Open either the web portal to view the changes. If the client is already open, refresh the page. + + The latest updates are downloaded from the server, including the changes that you just imported. Wait several seconds until the refresh completes. + + For more information about using **witadmin**, see [Import, export, and manage work item types](../reference/witadmin/witadmin-import-export-manage-wits.md). + +[!INCLUDE [temp](../_shared/process-editor.md)] + +<a id="resizing"> </a> +## Layout and resizing + +The new web form resizes depending on the width available and the number of sections defined. At maximum width, in most web browsers, each section within a page will display within its own column. As the display width decreases, each section resizes proportionally as follows: + +- For four sections: 40%, 20%, 20%, and 20% +- For three sections: 50%, 25%, and 25% +- For two Sections: 66% and 33% +- For one Section: 100%. + + +When the display width won't accommodate the columnar display of each section, sections appear stacked within a column. + + +## Related notes + +If you're new to WIT customization, see [Add and modify a WIT](add-modify-wit.md). + +- [Manage new form rollout](manage-new-form-rollout.md) +- [New work item experience](../process/new-work-item-experience.md) +- [WebLayout and Control XML elements](../reference/weblayout-xml-elements.md) + + +### Import warnings and errors + +You'll receive a warning when you import a modified WIT definition if you add a **Control** element for a required field in only the **WebLayout** or **Layout** node, but not the other. + +You'll receive an error if you enable the new form, and then modify a WIT definition in which you delete the **WebLayout** node. + +<!--- +### Extensibility + +TBD + + + (VSTS) or http://MyServer:8080/tfs/TeamProjectCollectionName (TFS) +-->  \ No newline at end of file diff --git a/docs/work/customize/customize-work.md b/docs/work/customize/customize-work.md new file mode 100644 index 00000000000..dc88f821f2b --- /dev/null +++ b/docs/work/customize/customize-work.md @@ -0,0 +1,254 @@ +--- +title: Customize your work tracking experience | VSTS & TFS +description: Guide to configuring and customizing work tracking features in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: D1B44480-F88B-4F35-927A-11ADFBCBAA23 +ms.manager: douge +ms.author: kaelli +ms.date: 08/10/2017 +ms.topic: get-started-article +--- + + +# Customize your work tracking experience + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +As you plan and track your project, you'll find you may want to configure a feature or customize your experience to meet your team's tracking needs. You configure teams and team Agile tools through the web portal administration context. The method you use to customize team projects, which impacts all teams, depends on the process model you use. + +Customizations you make occur at one of three levels: + +- **Team project level**: Add or modify work item types, data fields, backlog levels, and other objects shared across teams +- **Object level**: Grant or restrict access to work tracking tools, which includes setting permissions for objects and the team project and assigning users or groups to specific access levels. + +>[!NOTE] +>If you're new to tracking work in VSTS and TFS, see [Get started with Agile tools to plan and track work](../overview.md). + + + +<a id="shared-resources"></a> +## Shared resources + +Each team project provides a number of shared resources that support all teams added to the project. You configure these features through the user interface or the admin context of the web portal. To understand how the system uses area and iteration paths, see [About area and iteration paths](about-areas-iterations.md). + +|Area path pick lists | Sprint/iteration pick lists | +|-------------|----------| +|Change the [pick list of area paths](set-area-paths.md) to support grouping work items by team, product, or feature area.<br/>![Hierarchical area paths](../../_img/alm-feature-area-paths.png)|Change the [pick list of iteration paths](../scrum/define-sprints.md) to support grouping work into sprints, milestones, or other event-specific or time-related period. Activate sprints for each team.<br/> ![Iterations or sprints](../../_img/alm-feature-define-sprints.png) | + + + +|Shared queries | Tags | +|-------------|----------| +|Open shared queries or create your own<br/>query using the [query editor](../track/using-queries.md) to list work items<br/>or show hierarchical or dependent items.<br/> ![Shared queries](_img/customize-work-shared-queries-min.png) |[Add tags to work items](../track/add-tags-to-work-items.md) to filter backlogs and queries, or list items by tags<br/>![Add tags to filter backlogs, boards, and queries](_img/alm-feature-tags.png) | + + +<a id="process-models"></a> + +## Team projects and process customizations + +Your team project determines the objects available to tracking work and the configuration of Agile tools. Specifically, the team project determines the work item types (WITs)—user stories, tasks, bugs— and the data fields used to capture information. Customized objects are shared across teams added to the team project. + +>[!NOTE] +>The method you use to customize work tracking depends on the process model you subscribe to: +>- **Inheritance**: Supports WSIWIG customization, available for VSTS only +>- **Hosted XML**: Supports customization through import/export of process templates, available for VSTS only +>- **On-premises XML**: Supports customization through import/export of XML definition files for work tracking objects + +The following table summarizes the differences between the three supported process models. For definitions of the main work tracking objects, see [Agile glossary](../concepts/agile-glossary.md). + +<table width="90%"> +<tr valign="bottom"> +<th width="50%">Feature </th> +<th >[Inheritance](inheritance-process-model.md)</th> +<th >[Hosted XML](hosted-xml-process-model.md)</th> +<th >[On-premises XML](on-premises-xml-process-model.md)</th> +</tr> + +<tbody valign="top" align="center"> + +<tr> +<td align="left">WYSIWYG editing</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td> </td> +</tr> + +<tr> +<td align="left">Create inherited custom processes</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td></td> +<td> </td> +</tr> + +<tr> +<td align="left">Create custom process templates (see note 1)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Inherit changes in system processes (Agile, Scrum, CMMI)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td> </td> +</tr> + + +<tr> +<td align="left">Updated process changes automatically apply to team projects</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +</tr> + +<tr> +<td align="left">Basic customizations supported (fields, workflow, work item types, backlog levels)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Advanced customizations supported (custom link types, global lists, global workflow, team fields)</td> +<td> </td> +<td>(see note 2)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Update Microsoft field mappings using the [**TFSFieldMapping**](../reference/upload-or-download-the-microsoft-project-mapping-file.md) command-line tool</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Use the [**witadmin** command-line tools](../reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md) to edit team projects</td> +<td> </td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Use the **witadmin** command-line tools to list information about team projects</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">REST API (read)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">REST API (write)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td> </td> +</tr> + +</tbody> +</table> + +**Notes:** +1. A process determines the building blocks used to track work. A process template specifies an interdependent-related set of XML definition files that provide the building blocks and initial configuration for tracking work and other functional areas. +2. Hosted XML customization supports adding and updating global lists with a process update (subject to limits on maximum size of each list). To learn more, see [Work tracking object limits](object-limits.md). + + +<a id="access-permissions"></a> +## Grant or restrict access to work tracking tools + +You can grant or restrict access to select features and functions through the web portal. When you add user accounts to your team, they're automatically added to the Contributor group. They then have access to most of the features they'll need to contribute to code, work tracking, builds, and test. However, the Contributor group doesn't allow users to create shared queries or to add area or iteration paths. You have to grant these permissions separately. + +For a simplified view of the most common, default permissions and access assignments, see [Permissions and access](../../security/permissions-access.md). If you're new to managing permissions, see [Permissions and groups reference, Inheritance](../../security/about-permissions.md#inheritance). + +Otherwise, to grant or restrict access to select features or functions, review one of these topics: + +> [!div class="mx-tdBreakAll"] +> |Manage access |Permissions |Shared resources | +> |-------------|----------|---------| +> |- [Add team members (VSTS)](../../accounts/add-team-members-vs.md)<br/>- [Add team members (TFS)](../scale/multiple-teams.md#add-team-members)<br/>- [Stakeholder access](../../security/change-access-levels.md)<br/>- [VS Enterprise & Advanced access level](../../security/change-access-levels.md) |- [Area path permissions](../how-to/set-permissions-access-work-tracking.md#set-permissions-area-path)<br/>- [Process permissions](../process/manage-process.md#process-permissions)<br/>- [Work item query and folder permissions](../track/set-query-permissions.md)<br/>- [Dashboard permissions](../../report/dashboard-permissions.md#set-permissions)<br/>- [Plan permissions](../scale/review-team-plans.md#plan-permissions)<br/>- [Tagging permissions](../../security/permissions.md#tags)<br/>- [Test permissions](../../security/permissions.md#project_test)<br/>- [Restrict access](../../accounts/restrict-access-tfs.md) | - [Alerts](../track/alerts-and-notifications.md)<br/>- [Area paths](set-area-paths.md)<br/>- [Iteration paths](set-iteration-paths-sprints.md)<br/>- [Queries](../track/using-queries.md)<br/>- [Tags](../track/add-tags-to-work-items.md) | + + +<a id="test-experience"></a> +## Customize the test experience (TFS) + +Several WITs support the test experience within the web portal Test hub and Test Manager client. You can customize these WITs as you would any other WIT. The following image illustrates the support link relationships. + + ![Test management work item types](../guidance/_img/ALM_PT_WITS_TestExperience.png) + +See the following resources for additional usage and customization information: + +- [Test configurations and test variables](../../manual-test/test-different-configurations.md) +- [Test resolution states](../reference/witadmin/tcm-customize-manage-test-experience.md) (TFS) +- [Failure types](../reference/witadmin/tcm-customize-manage-test-experience.md) +- [Define the initial test management configuration (process template)](../reference/process-templates/define-initial-configuration-test-manager.md) +- [Query based on build and test integration fields](../track/build-test-integration.md) + +<a id="person-name-field"></a> +## Change the pick list for a person-name field +To add values for fields associated with user accounts such as **Assigned To** add users to a TFS security group or by restricting access to a group or set of users. By default, the list for the Assigned To field contains the account names for all users and groups that have been added to TFS. These accounts are often synchronized with Active Directory. See [Set up groups for use in TFS deployments](../../tfs-server/admin/setup-ad-groups.md). To limit the names of accounts in a list, see [Limit the number of names that appear in the Assigned To field](add-modify-field.md#limit-account-names). + +## Less common customizations +You can only perform the following customizations when working with the Hosted XML or On-premises XML process models. The customizations made to process configuration apply to all teams added to the team project. + +<a id="limits"> </a> +### Backlog and board limits (Hosted XML, On-premises XML) + +To limit the display load time to acceptable parameters, the task board is restricted to a maximum of 1000 work items. For details, see [Process configuration XML element reference](../reference/process-configuration-xml-element.md). + +You can increase this value up to a maximum of 1500 by specifying a value for the `workItemCountLimit` attribute of the **TaskBacklog** element. For details, see [Process configuration XML element reference](../reference/process-configuration-xml-element.md#backlog_page). + + <TaskBacklog category="Microsoft.TaskCategory" pluralName="Tasks" singularName="Task" workItemCountLimit="800" > + . . . + </TaskBacklog> + + +<a id="assign-fields"> </a> +### Change field assignments (Hosted XML, On-premises XML) + +You can change the work item fields that are used in calculating capacity, burndown charts, forecasting, and velocity. Any change you make to one of the default assignments should correspond to a change made to the WIT used to define and capture information for that value. + +For example, if you change the `refname` assigned to `type="Activity"` then you should include the same field in the WIT definition assigned to the Task Category which captures the activity information. For details, see [Process configuration XML element reference](../reference/process-configuration-xml-element.md#fields). + +The fields you assign are used by the following tools: + +| Tool | Field type | +| ----- | ---------- | +| Task board, capacity tools, sprint burndown | Remaining work | +| Product and portfolio backlogs | Backlog priority | +| Velocity and forecast | Effort (maps to Story Points, Effort, or Size) | +| Task board, capacity tools | Remaining work | +| Capacity tools | Activity (Task Activity or Discipline) | + + +## Additional options +Do you want to customize your tools in a way that's not supported? + +Here are a few options available to you: + +- Check out [Marketplace extensions](https://marketplace.visualstudio.com/VSTS) to see if there's a tool available for your purposes +- Determine if a [Service hook](../../service-hooks/index.md) will satisfy your needs +- Create your own tool using [REST APIs](https://visualstudio.com/integrate/api/overview) +- Add your feature request to our [Team Services user voice page](https://visualstudio.uservoice.com/forums/330519-team-services) page. + + + +[add-team-members]: ../scale/multiple-teams.md#add-team-members +[add-team-admin]: ../scale/add-team-administrator.md + + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] + +<!--- ADDRESS THESE VERBATIMS: +Configure bug reporting +Add a column to a board + +--> + diff --git a/docs/work/customize/hosted-xml-process-model.md b/docs/work/customize/hosted-xml-process-model.md new file mode 100644 index 00000000000..1a8263b7be1 --- /dev/null +++ b/docs/work/customize/hosted-xml-process-model.md @@ -0,0 +1,42 @@ +--- +title: Hosted XML process model | TFS +description: Guide to configuring and customizing work tracking features for the Hosted XML process model +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + + + +<a id="inheritance"> </a> +# Hosted XML process model + +**VSTS** + +<a id="hosted-xml-process-model"> </a> + +You can perform the following tasks with the Hosted XML process model. + +> [!div class="mx-tdBreakAll"] +> |Fields |Pick lists | Work item types | +> |-------------|----------|---------| +> |- [Add or modify a field](add-modify-field.md)<br/>- [Add a checkbox (Boolean) field](add-modify-field.md#boolean-field)<br/>- [Add rules to a field](add-modify-field.md#add-rules)<br/>- [Change a field label](add-modify-field.md#change-label)<br/>- [Add a custom control field](add-modify-field.md#custom-control)<br/>- [Remove a field from a form](add-modify-field.md#change-label) |-[Area paths](set-area-paths.md)<br/>- [Iteration paths](set-iteration-paths-sprints.md)<br/>- [State or Reason fields (customize workflow)](../reference/change-workflow-wit.md)<br/>- [Person-name field (add users)](../../accounts/add-users.md)<br/>- [Add a custom pick list](add-modify-field.md#picklist)<br/>- [Predefined field](add-modify-field.md#picklist)<br/>- [Resolution State or Failure Type](customize-work.md#test-experience)<br/>- [Define global lists](../reference/define-global-lists.md) |-[Add or modify a work item type](add-modify-wit.md)<br/>- [Change the workflow (States, Reasons, Transitions)](../reference/change-workflow-wit.md)<br/>- [Customize the form](../reference/change-work-item-form-layout.md)<br/>- [Specify the WIT color](../reference/process-configuration-xml-element.md#wit-colors)<br/>- [Specify the WIT icon](../reference/process-configuration-xml-element.md)<br/>- [Specify the workflow state color](../reference/process-configuration-xml-element.md#state-colors) | + + + + +> [!div class="mx-tdBreakAll"] +> | Backlogs and process configuration | Process template | +> |----------|---------| +> |- [Add WITs to backlogs or boards](add-wits-to-backlogs-and-boards.md)<br/>- [Add portfolio backlogs](add-portfolio-backlogs.md)<br/>- [Configure the quick add panel](../reference/process-configuration-xml-element.md#add)<br/>- [Configure the default backlog columns](../reference/process-configuration-xml-element.md#columns)<br/>- [Set maximum number of task board items](../reference/process-configuration-xml-element.md#number_items)<br/>- [Set default weekend days (Scrum)](../reference/process-configuration-xml-element.md#weekend_days) <br/>- [Set default bug management behavior](../reference/process-configuration-xml-element.md#behaviors)<br/>- [Set default hidden backlogs](../reference/process-configuration-xml-element.md#behaviors)<br/>- [Process configuration](../reference/process-configuration-xml-element.md)<br/>- [Categories](../reference/categories-xml-element-reference.md) |-[Import a process template](../import-process/import-process.md#import-from-TFS)<br/>- [Export a process template](../import-process/import-process.md#export-process)<br/>- [Customize a process template](../import-process/customize-process.md) | + + + +<a id="hosted-xml-sequence"></a> + +Use the following sequences when you manage your Team Services through the Hosted XML process model. This sequence requires you to update your team project by updating the process template that it uses. We recommend that you maintain your process templates in a repository for version control. + +[![Export process](_img/cust-wit-form-export-process.png)](../import-process/import-process.md#export-process)[![Edit XML definition file(s)](_img/cust-wit-form-edit-def-file.png)](../reference/weblayout-xml-elements.md)[![Import process](_img/cust-wit-form-import-process.png)](../import-process/import-process.md)![Refresh and verify changes](_img/cust-wit-form-refresh-verify.png) \ No newline at end of file diff --git a/docs/work/customize/index.md b/docs/work/customize/index.md new file mode 100644 index 00000000000..1a911e413b2 --- /dev/null +++ b/docs/work/customize/index.md @@ -0,0 +1,68 @@ +--- +title: Index to work item tracking customization topics in VSTS & TFS +description: Index to topics for customizing your work tracking experience in VSTS and and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: F6973385-2CEF-403A-B3AA-45DB7C436AF1 +ms.manager: douge +ms.author: kaelli +ms.date: 07/26/2017 +--- + +# Customization + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Add a custom field, a custom work item type (WIT) or modify an existing WIT. The method you use depends on whether you work in VSTS, which uses the Inheritance and Hosted XML process models, or an on-premises TFS, which uses the On-premises XML process model. + +## 5-Minute Quickstarts + +- [Define area paths](set-area-paths.md) +- [Define iteration paths or sprints](set-iteration-paths-sprints.md) + +## Concepts + +- [About areas and iterations](about-areas-iterations.md) +- [Inheritance process model](inheritance-process-model.md) +- [Hosted XML process model](hosted-xml-process-model.md) +- [On-premises XML process model](on-premises-xml-process-model.md) + + +## How-to Guides + +Use the guidance provided in the following topics based on the process model or process template that you want to customize. + +- **Inheritance process model** + - [Manage processes](/vsts/work/process/manage-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) + - [Customize a process](/vsts/work/process/customize-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) + +- **Hosted XML process model** + - [Customize a Hosted XML process](/vsts/work/import-process/customize-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json ) + - [Import a process](/vsts/work/import-process/import-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) + +- **On-premises XML process model** + - [Add or modify a field](add-modify-field.md) + - [Add or modify a work item type](add-modify-wit.md) + +- **Process templates** + - [Upload or download a process template](/vsts/work/guidance/manage-process-templates?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json ) + - [Customize a process template](/vsts/work/reference/process-templates/customize-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json ) + +## Reference + +- [Index to XML element reference](/vsts/work/reference/xml-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json ) +- [All WITD XML elements reference](/vsts/work/reference/all-witd-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +- [All FIELD XML elements reference](/vsts/work/reference/all-field-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +- [All WORKFLOW XML elements reference](/vsts/work/reference/all-workflow-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +- [WebLayout and Control elements](/vsts/work/reference/weblayout-xml-elements?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) +- [Process configuration XML element reference](/vsts/work/reference/process-configuration-xml-element?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json) + + +## Reference + +- [Work items](../../work/work-items/index.md) +- [Scale & configure teams](../../teams/index.md) +- [Account Management (VSTS)](../../accounts/index.md) +- [TFS Server Administration](../../tfs-server/index.md) +- [Marketplace extensions](../../marketplace/install-vsts-extension.md) +- [Extensibility and REST APIs](../../extend/overview.md) \ No newline at end of file diff --git a/docs/work/customize/inheritance-process-model.md b/docs/work/customize/inheritance-process-model.md new file mode 100644 index 00000000000..4d4dc905110 --- /dev/null +++ b/docs/work/customize/inheritance-process-model.md @@ -0,0 +1,42 @@ +--- +title: Inheritance process model | VSTS +description: Guide to configuring and customizing work tracking features in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + + + +<a id="inheritance"> </a> +# Inheritance process model + +**VSTS** + +You can perform the following tasks with the Inheritance process model. + +> [!div class="mx-tdBreakAll"] +> |Fields |Pick lists | Work item types | +> |-------------|----------|---------| +> |- [Add a custom field](../process/customize-process-field.md)<br/>- [Add a person-name or Identity field](../process/customize-process-field.md#identity)<br/>- [Add a rich-text field](../process/customize-process-field.md#html)<br/>- [Add a checkbox (Boolean) field](../process/customize-process-field.md#boolean-field)<br/>- [Add rules to a field](../process/custom-rules.md)<br/>- [Change a field label](../process/customize-process-field.md)<br/>- [Remove a field from a form](../process/customize-process-field.md)<br/>- [Add a custom control field](../process/custom-controls-process.md)<br/>- [Delete a field](../process/customize-process-field.md#delete-field)<br/>- [Review fields](../process/customize-process-field.md#review-fields)|- [Area paths](set-area-paths.md)<br/>- [iteration paths](set-iteration-paths-sprints.md)<br/>- [Person-name field (add team members)](../../accounts/add-team-members-vs.md)<br/>- [State or Reason fields](../process/customize-process-workflow.md)<br/>- [Add a custom pick list](../process/customize-process-form.md)|- [Add a custom field](../process/customize-process-field.md)<br/>- [Add a custom WIT](../process/customize-process-wit.md)<br/>- [Specify the WIT color](../process/customize-process-wit.md)<br/>- [Customize the workflow (States)](../process/customize-process-workflow.md)<br/>- [Customize the WIT form](../process/customize-process-form.md)<br/>- [Add a custom control](../process/custom-controls-process.md)| + + +> [!div class="mx-tdBreakAll"] +> | Backlogs | Process | +> |----------|---------| +> |- [Add custom backlog levels](add-portfolio-backlogs.md)<br/>- [Add a custom WIT to a backlog](../process/customize-process-backlogs-boards.md)<br/>- [Show bugs on backlogs/boards](show-bugs-on-backlog.md)|- [Create & manage an inherited process](../process/manage-process.md)<br/>- [Customize a process](../process/customize-process.md) | + + + +>[!NOTE] +>With the Inheritance process model, you can't modify the pick-lists of pre-defined fields—such as [Activity](../track/query-numeric.md), [Automation Status](../track/build-test-integration.md), [Discipline](../track/query-numeric.md), [Priority](../track/planning-ranking-priorities.md), plus others. + + +Use this sequence when you manage your VSTS customization through the Inherited process model. You belong to this phase when your Process user interface appears as shown under [Manage processes](../process/manage-process.md). + +[![Create an inherited process](_img/customize-work-phase2-step1.png)](../process/manage-process.md#create-inherited-process)[![Customize the inherited process](_img/customize-work-phase2-step2.png)](../process/customize-process.md)[![Apply inherited process to team project(s)](_img/customize-work-phase2-step3.png)](../process/manage-process.md#migrate)![Refresh and verify changes](_img/customize-work-phase2-step4.png) + + diff --git a/docs/work/customize/manage-new-form-rollout.md b/docs/work/customize/manage-new-form-rollout.md new file mode 100644 index 00000000000..01e8ba9e7d3 --- /dev/null +++ b/docs/work/customize/manage-new-form-rollout.md @@ -0,0 +1,179 @@ +--- +title: Manage new form roll out| VSTS +description: Enable and choose the roll out option of the new work item form for customizing the work tracking experience on the web portal when connecting to VSTS +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 51A6F894-9B45-4A07-9DDB-C359C8BB4DE1 +ms.manager: douge +ms.author: kaelli +ms.date: 03/16/2017 +--- + +# Manage roll out of the new web form + + +**VSTS | TFS 2018 | TFS 2017** + +>[!IMPORTANT] +>**Feature availability:**  The new form and its corresponding features are available from VSTS and the web portal for TFS 2017 and later versions.<br/> +> - For users of Team Services that use the [Inheritance process model](../process/manage-process.md), the switch to the new form is automatic.<br/> +> - For users of Team Services that use [Hosted XML process model](../import-process/import-process.md), an admin must [enable the new form](../customize/manage-new-form-rollout.md).<br/> +> - For on-premises TFS 2017 users, the new form is automatically available when you add team projects to a collection. For existing team projects, an admin is required to enable the new form as described in this topic. (The reason the new form isn't automatically enabled for existing team projects is to prevent overwriting customizations made to existing work item types.) <br/> +> - For TFS 2015 users, the new form isn't available. You must [upgrade to TFS 2017](https://www.visualstudio.com/downloads/#team-foundation-server-2017) to access the new form.    + +Enabling the new form initiates a transformation of the form definitions for all work item types (WITs) defined in your project collection. + +You start the rollout process by first enabling the new form. You can then review the transformed web form layouts and adjust as desired or add additional customizations. + +When you're ready to rollout the new form, you choose the opt-in model which enables your users to begin using the new form. Lastly, if you need to revert to the old web forms, you can do that. + + +<a id="enable"></a> +## Enable the new form + +You enable the new form from the project collection admin page. + +1. To start, click the ![gear icon](../_img/icons/gear_icon.png) gear Settings icon to open the admin context for the team project collection. + + <img src="_img/manage-new-form-open-tcp-admin-context.png" alt="TFS 2017, Web portal, Open project collection admin context" style="border: 2px solid #C3C3C3;" /> +<!---    + ![Open admin context](../_img/icons/ALM_OpenAdminContext.png) + --> + +2. From the collection admin page, click **Enable the new work item form**. + + <img src="_img/manage-new-form-enable-new-form.png" alt="TFS 2017, Web portal, Project collection admin context, Enable new form" style="border: 2px solid #C3C3C3;" /> + + If you don't see the option to enable, you aren't a member of the Project Collection Administrators group. To get added as one, see [Add an administrator](../../security/set-project-collection-level-permissions.md). + +4. Click **Create new layout** to initiate the process of transforming the WIT definitions. + + <img src="_img/manage-new-form-enable-new-form-dialog.png" alt="Enable the new work item form layout dialog" style="border: 2px solid #C3C3C3;" /> + + + +<!--- +You enable the new form from the project collection admin page. + +1. To start, open the admin context for the team project. + + ![Open admin context](../process/_img/team-services-open-admin-context.png) + +2. From the collection admin page, click **Enable the new work item form**. + + ![Process tab](_img/m-new-form-admin-enable.png) + + If you don't see the option to enable, you aren't a member of the Project Collection Administrators group. To get added as one, see [Add an administrator](../../security/set-project-collection-level-permissions.md). + +4. Click Create new layout to initiate the process of transforming the WIT definitions. + + ![Process tab](_img/m_new-form-enable.png) +--> + +<a id="review"></a> +## Review the new web forms + +The default opt-in model is to enable the new forms for members of the Project Administrators group for all team projects. Before you change the opt-in model, review the web forms to ensure they represent the fields and functions needed. + +Open a work item of each type to review the new form layout. Here, we open a user story. Switch to show the new form. + +![User story, Switch to New form](_img/m-new-form-try-switch.png) + +Once you switch, all work item types for this project will display in the new form (unless you decide to [switch back](../process/new-work-item-experience.md#switch-back)). + +![New form, user story](_img/new-form-user-story.png) + +If the work item is already open, refresh your browser to see the changes. + +To customize the layout, see [Customize the new form](customize-wit-form.md). + + +<a id="opt-in"></a> +## Choose the opt-in model for rollout +Once the new form layouts preview as expected, you can begin rollout. + +Choose the opt-in model that supports your needs. +- Choose **Enable opt-in for all users** when you want to enable the opt-in feature and allow users to switch back to the old form +- Choose the **New form only** option when you want all users to begin using the new form immediately. + +<img src="_img/manage-new-form-choose-opt-in-dialog.png" alt="Choose the opt-in mode for the new form dialog" style="border: 2px solid #C3C3C3;" /> + +If you choose **Enable opt-in for all users**, users will be able to choose when they convert to the new form view. + +![Old web form, user story, Try the new form option](_img/m-new-form-try-switch.png) + +As this switch is set on a per-user basis, other account users will continue to see the old form until they also choose to switch. After they make the switch, they can switch back. + +![New web form, user story, Back to old form menu option](_img/m-new-form-user-story-switch-to-old-form.png) + +All work items automatically display using the new web form layout. + +Share the [New work item experience](../process/new-work-item-experience.md) topic with your users so they can better understand the new controls and layout available to them. + +<a id="disable"></a> +## Disable the new form + +If you find that you need to revert to the old WIT forms, you can do so. + +<img src="_img/manage-new-form-disable-dialog.png" alt="Disable new form dialog" style="border: 2px solid #C3C3C3;" /> + +Disabling the new form will remove the **WebLayout** section from the XML definition files for all WITs defined within all team projects in the collection. + + +##Related notes + +- [New work item experience](../process/new-work-item-experience.md) +- [Customize the new form](customize-wit-form.md) +- [WebLayout XML elements reference](../reference/weblayout-xml-elements.md) + +### Best-effort transformation + +A best-effort transformation is made to maintain the field groupings and layout of your customized WIT definitions. The following types of transformations are made: + +**Transformed or added elements ** + +<ul> +<li>If you have a **Layout** with ```Target=Web```, it is transformed to the **WebLayout** definition</li> +<li>If you simply have a single **Layout** section, a new section with the **WebLayout** definition is added</li> +<li>All parent **Tabs** are converted to a **Page**</li> +<li>All non-nested **Groups** within a **Tab** are converted to a **Group**; if you have more than four of these groups, some are combined into a single **Group** </li> +<li>All nested **Groups** within a **Group** remain a **Group** </li> +<li>All **HTMLFieldControl** and **WebPageControl** elements are moved to the first **Section** within a **Page**. </li> +</ul> + +**Removed elements and attributes ** + +<ul> +<li>All **Splitter** elements are removed </li> +<li><p>All elements within the form header and **Control** elements with the following type designations are removed from the **WebLayout** section:</p> +<ul> +<li>```AttachmentsControl```   </li> +<li>```LinksControl``` </li> +<li>```WorkItemClassificationControl```   </li> +<li>```WorkItemLogControl```</li> +</ul> +<p>They aren't required as the system now manages these elements, automatically adding them to the header section area within each work item form</p> +</li> +<li><p>The following attributes are removed from each **Control** and **Group** elements:</p> +<ul> +<li>```ControlSpacing```   </li> +<li>```FixedWidth``` </li> +<li>```LabelSpacing```</li> +<li>```Margin``` </li> +<li>```MinimumSize```  </li> +<li>```Padding```</li> +<li>```PercentWidth``` </li> +</ul> +</li> +</ul> + + +### Revert process + +When you revert the process, the XML definitions for all WITs revert back to their original definitions. All users will only be able to see the old form layouts. + +<!--- +###Visual Studio work item forms + +Certain new controls are added to the Layout section, such as the Development and Discussion section controls. However, these do not display unless XXX. +--> \ No newline at end of file diff --git a/docs/work/customize/new-features-added.md b/docs/work/customize/new-features-added.md new file mode 100644 index 00000000000..2b36b67aaaf --- /dev/null +++ b/docs/work/customize/new-features-added.md @@ -0,0 +1,204 @@ +--- +title: New features enabled with upgrade | TFS +description: Features that you can enable through the Configure Features Wizard after you've upgraded the application tier server for Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 1A7B7A18-457F-4AFF-9151-FCF13B850907 +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +<!--- +Supports the following FWLINK: Learn more about these configuration changes: http://go.microsoft.com/fwlink/?LinkID=242985 - +--> + +# New features added through feature enablement + +<b>TFS 2017 | TFS 2015 | TFS 2013</b> + +>[!NOTE] +<b>Feature availability: </b>This topic applies only to team projects defined on an on-premises Team Foundation Server (TFS). Team projects hosted on VSTS [update automatically with each service upgrade](/vsts/release-notes/index). +   +The Configure Features Wizard detects which features have and haven't been configured. Most new features include additions or changes to work item types (WITs), categories, or process configuration. New features are introduced with different updates to Team Foundation Server (TFS). + + +<table> +<tbody valign="top"> +<tr> +<th width="18%"> +Feature +</th> +<th width="70%"> +Changes +</th> +<th width="12%"> +Update +</th> +</tr> +<tr> +<td> +New web form +</td> +<td> +<p>Adds the **WebLayout** section within the **FORM** section of all work item type (WIT) definitions. This section supports the [new work tracking experience in the web portal](../process/new-work-item-experience.md). It includes the **SystemControls** section and the new **LinksControlOptions** for managing link relationships. To learn more, see [WebLayout and Control elements](../reference/weblayout-xml-elements.md) and [LinksControlOptions XML elements (Web form)](../reference/linkscontroloptions-xml-elements.md).</p> +<p>**Note**: When you upgrade an on-premises TFS to TFS 2017, the new web form is automatically available when you add team projects to a collection. (You don't have to run the Configure Feature Wizard.) For existing team projects, an admin is required to [enable the new form](../customize/manage-new-form-rollout.md). The reason the new form isn't automatically enabled for existing team projects is to prevent overwriting customizations made to existing work item types.</p> +</td> +<td> +TFS 2017 +</td> +</tr> +<tr> +<td> +Code Review +</td> +<td> +Adds the Code Review Request and Code Review Response WITs and categories to the team project. These items support [code review requests and responses from the My Work page in Team Explorer](../../tfvc/get-code-reviewed-vs.md). My Work only appears when you have Visual Studio Premium or Visual Studio Ultimate installed.<br /> +To manually add them to a team project, see [Add features manually](add-features-manually.md). +</td> +<td> +TFS 2012 +</td> +</tr> +<tr> +<td> +My Work +</td> +<td> +Supports your ability to [develop code and manage pending changes](https://msdn.microsoft.com/library/ms245462.aspx#my_work) from the My Work page in Team Explorer. My Work only appears when you have Visual Studio Premium or Visual Studio Ultimate installed.<br /> +Adds the metastate-to-workflow state mapping in ProcessConfiguration for the Bug Category. If you need to manually update the bug workflow states and metastates, see [Support bug update status using My Work](../../tfvc/develop-code-manage-pending-changes.md). +</td> +<td> +TFS 2012 +</td> +</tr> + +<tr> +<td> +Feedback +</td> +<td> +Adds the Feedback Request and Feedback Response WITs and categories to the team project. These items support [feedback requests and responses](../connect/get-feedback.md). <br/> +To manually add them to a team project, see [Add features manually](add-features-manually.md). +</td> +<td> +TFS 2012 +</td> +</tr> + +<tr> +<td> +Planning Tools +</td> +<td> +Adds or updates process configuration that supports using the Agile tools: [product backlog](../backlogs/create-your-backlog.md), [plan sprints](../scrum/sprint-planning.md), [Kanban board](../kanban/kanban-basics.md), and [more](../scrum/define-sprints.md).<br/> + +Agile tools depend on the WITs, categories, and process configuration definitions that are made. Definitions are interdependent. <br/> + +See [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md) to learn more about defining the process configuration for your team project. +</td> +<td> +TFS 2012 +</td> +</tr> + +<tr> +<td> +Storyboarding +</td> +<td> +Adds the Storyboards control and tab to requirement WIT for the team project--such as Product backlog item for Scrum, User Story for Agile, and Requirement for CMMI. The Storyboards control [supports linking storyboards to the work item as well as launching the Storyboarding](../office/storyboard-your-ideas-using-powerpoint.md). <br/> +To manually add the tab to a WIT, see [Add features manually](add-features-manually.md). +</td> +<td> +TFS 2012 +</td> +</tr> + + +<tr> +<td> +Portfolio Backlogs +</td> +<td> +For first time updates, adds the Feature and Epic WIT and categories to the team project and modifies the process configuration to support portfolio backlogs. These features enable teams to [select the portfolio backlogs they work with to organize their backlogs](select-backlog-navigation-levels.md). <br/> + +<blockquote style="font-size: 13px"><b>Note: </b>If you have previously updated your team project to add the Feature WIT and portfolio backlog, then you'll need to add the Epic WIT, category, and portfolio backlog manually. If your team project doesn't have the Epic WIT, you can [add it manually](add-portfolio-backlogs.md). </blockquote> + +To manually add Feature and Epics portfolio backlogs to a team project, see [Add features manually](add-features-manually.md). + +</td> +<td> +TFS 2013, TFS 2015 +</td> +</tr> + + +<tr> +<td> +Shared Parameters +</td> +<td> +Adds the Shared Parameter WIT and category to the team project. You use Shared Parameter work items to [run tests with different data](../../manual-test/repeat-test-with-different-data.md).<br/> +To manually add them to a team project, see [Add features manually](add-features-manually.md). +</td> +<td> +TFS 2013.2 +</td> +</tr> + + +<tr> +<td> +Test Plan and Test Suite +</td> +<td> +Adds the Test Plan and Test Suite WITs and categories to the team project. These items support managing and customizing test plans and test suites similar to other WITs. See also [Create a test plan](../../manual-test/getting-started/create-a-test-plan.md). <br/> +To learn more about how this feature gets enabled, see [Test Plan and Test Suite features](#test-management). +</td> +<td> +TFS 2013.3 +</td> +</tr> + +<tr> +<td> +Bug Behavior +</td> +<td> +Adds the required fields to the Bug WIT definition so that they can be treated like requirements or like tasks. Teams can configure this option as described in [Show bugs on backlogs and boards feature](show-bugs-on-backlog.md).<br/> + +If you need to manually add them to a team project, see [Add features manually](add-features-manually.md). +</td> +<td> +TFS 2015 +</td> +</tr> + +</tbody> +</table> + +##Related notes + +Not all new features require feature enablement. + + +<a id="test-management" > </a> +###Test Plan and Test Suite features +The Test Plan and Test Suite WITs are added when you run the TFS Upgrade Wizard. They aren't enabled through the Configure Feature wizard. They support customization of test plans and test suites + +<p>The enhancements support:</p> + <ul> + <li> + <p>Test plans and test suites are now work item types (WITs). You can add fields, change the workflow, and [customize them like any other work item type](add-modify-wit.md). </p> + </li> + <li> + <p>The area path security model now contains permissions to <b>Manage test suites</b>. The <b>Manage test plans</b> permissions has been re-scoped to manage only test plans. Previously it covered permission management of both test plans and test suites.</p> + </li> + <li> + <p>The History field for test-related artifacts now provides a consolidated view of changes made to work item fields as well as changes to related artifacts such as test points and test configurations. A new field, the Test Suite Audit field, available in the test suite work item form, captures and displays these related artifact changes in the work item history.</p> + </li> + </ul> + <p>The server upgrade automatically converts existing test plans and test suites to WITs and migrates test data and links. If it encounters a problem, a warning message appears in the server log. To learn more, see [Update a team project manually to support test management](../reference/update-a-team-project-manually-to-support-test-management.md).</p> + <p>To learn about changes introduced to Test Manager and the web portal, see [Create a test plan](../../manual-test/getting-started/create-a-test-plan.md).</p> + diff --git a/docs/work/customize/object-limits.md b/docs/work/customize/object-limits.md new file mode 100644 index 00000000000..461414194c4 --- /dev/null +++ b/docs/work/customize/object-limits.md @@ -0,0 +1,50 @@ +--- +title: Work tracking object limits | VSTS +description: Limits placed on the number of objects that can be specified for the Inheritance and Hosted XML process models for Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: E5FABB7C-ECA8-4FA5-9488-4AD78C60869A +ms.manager: douge +ms.author: kaelli +ms.date: 06/02/2017 +--- + +# Work tracking object limits + +<b>VSTS</b> + +When customizing the work item types (WITs) defined in the Inheritance or Hosted XML process models, be aware of the limits placed on objects defined in this topic. To learn about process models, see [Customize your work tracking experience](customize-work.md). + +## Inheritance and Hosted XML process models + +Below you find maximum number of object in the Inheritance and Hosted XML process models. + +|Object | Inheritance |Hosted XML | +|-------|------------:|----------:| +| Work item types defined for a process | 64 | 64 | +| Fields defined for an account | 4096 | 4096 | +| Fields defined for a process | 2048 | 2048 | +| Fields defined for a work item type | 64 | 256 | +| Pick lists defined for an account or collection | 512 | - | +| Pick list items defined for a list | 128 | - | +| Pick list item character length | 256 | - | +| Workflow states defined for a work item type | 32 | 16 | +| Rules defined for a work item type | 1024 | 1024 | +| Portfolio backlog levels defined for a process| 5 | 5 | +| Categories defined for a process | - | 32 | +| Global lists defined for a process | - | 64 | +| List items defined within a global list | - | 512 | + +For additional restrictions and conformance requirements of the Hosted XML process model, see [Customize a process when using Hosted XML](../import-process/customize-process.md). + +>[!NOTE] +>For the Hosted XML process model, you can define an approximate total of 10K items for all global lists specified across all WITs. + +## Tags +- You can't assign more than 100 tags to a work item. + +## Related notes + +- [Customize a process when using Hosted XML](../import-process/customize-process.md) +- [Create an Inheritance process](../process/manage-process.md) +- [Customize your work tracking experience](customize-work.md) \ No newline at end of file diff --git a/docs/work/customize/on-premises-xml-process-model.md b/docs/work/customize/on-premises-xml-process-model.md new file mode 100644 index 00000000000..8fec1860942 --- /dev/null +++ b/docs/work/customize/on-premises-xml-process-model.md @@ -0,0 +1,117 @@ +--- +title: On-premises XML process model | TFS +description: Guide to configuring and customizing work tracking features for TFS and the on-premises process model +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + + + +<a id="on-prem-xml-process-model"></a> +# On-premises XML process model + +[!INCLUDE [temp](../_shared/version-header-tfs-only.md)] + + +You can perform the following tasks when you work with the On-prem XML process model. + + +> [!div class="mx-tdBreakAll"] +> |Fields |Pick lists | Work item types | +> |-------------|----------|---------| +> |- [Add or modify a field](add-modify-field.md)<br/>- [Add a checkbox (Boolean) field](add-modify-field.md#boolean-field) (TFS 2017.2)<br/>- [Add rules to a field](add-modify-field.md#add-rules)<br/>- [Change a field label](add-modify-field.md#change-label)<br/>- [Add a custom control field](add-modify-field.md#custom-control)<br/>- [Remove a field from a form](add-modify-field.md#change-label)<br/>- [Change a field attribute](add-modify-field.md#change-attribute)<br/>- [Add fields that integrate with test, build, and version control](add-modify-field.md#integration-fields)<br/>- [Delete a field](add-modify-field.md#delete-field) |- [Area paths](set-area-paths.md)<br/>- [Iteration paths](set-iteration-paths-sprints.md)<br/>- [Add a custom pick list](add-modify-field.md#picklist)<br/>- [Modify a pre-defined pick list](add-modify-field.md#picklist)<br/>- [State or Reason fields (customize workflow)](../reference/change-workflow-wit.md)<br/>- [Person-name field (add users)](../../accounts/add-users.md) <br/>- [Resolution State & Failure Type](customize-work.md#test-experience)<br/>- [Define global lists](../reference/define-global-lists.md) |- [Add or modify a work item type](add-modify-wit.md)<br/>- [Change the workflow (States, Reasons, Transitions)](../reference/change-workflow-wit.md)<br/>- [Customize the form](../reference/change-work-item-form-layout.md)<br/>- [Specify the WIT color](../reference/process-configuration-xml-element.md#wit-colors)<br/>- [Specify the WIT icon](../reference/process-configuration-xml-element.md)<br/>- [Specify the workflow state color](../reference/process-configuration-xml-element.md#state-colors) | + + +> [!div class="mx-tdBreakAll"] +> |Backlogs & Process configuration |Process templates | Link types | +> |-------------|----------|---------| +> |- [Add WITs to backlogs or boards](add-wits-to-backlogs-and-boards.md)<br/>- [Add portfolio backlogs](add-portfolio-backlogs.md)<br/>- [Configure the quick add panel](../reference/process-configuration-xml-element.md#add)<br/>- [Configure the default backlog columns](../reference/process-configuration-xml-element.md#columns)<br/>- [Set maximum number of task board items](../reference/process-configuration-xml-element.md#number_items)<br/>- [Set default weekend days (Scrum)](../reference/process-configuration-xml-element.md#weekend_days) <br/>- [Set default bug management behavior](../reference/process-configuration-xml-element.md#behaviors) <br/>- [Set default hidden backlogs](../reference/process-configuration-xml-element.md#behaviors) <br/>- [Process configuration](../reference/process-configuration-xml-element.md)<br/>- [Categories](../reference/categories-xml-element-reference.md) |- [Customize](../reference/process-templates/customize-process.md)<br/>- [Manage (upload/download)](../guidance/manage-process-templates.md)<br/>- [Maintenance and upgrade implications](#before-you-customize) |- [Add a custom link type](../reference/link-type-element-reference.md)<br/>- [Delete a custom link type](../reference/witadmin/manage-link-types.md)<br/>- [Deactivate/activate a custom link type](../reference/witadmin/manage-link-types.md) | + + +<a id="on-prem-xml-sequence"></a> + +When you manage an on-premises TFS, you perform most customizations using the following sequence. This sequence supports updating the XML definition for WIT, global lists, process configuration, and categories. This sequence supports individual updates through the import of their respective modified XML definition files. We recommend that you maintain your XML definition files in a repository for version control. + +[![Export XML definition file](_img/cust-wit-form-export-def-file.png)](customize-wit-form.md#witadmin)[![Edit XML definition file](_img/cust-wit-form-edit-def-file.png)](../reference/weblayout-xml-elements.md)[![Import WIT definition file](_img/cust-wit-form-import-def-file.png)](customize-wit-form.md#witadmin)![Refresh and verify changes](_img/cust-wit-form-refresh-verify.png) + +In addition, you can use the **witadmin** tool to list objects, rename WITs, permanently remove WITs, and more. + + +[!INCLUDE [temp](../_shared/process-editor.md)] + + + + +<a id="before-you-customize"></a> +## Maintenance and upgrade implications +Before you customize, you should understand how your customizations may impact your team project when you upgrade your application-tier server. + +Upgrades to an on-premises TFS can introduce new features that require updates to the objects used to track work. These objects include work item types, categories, and process configuration. Minimizing changes to the workflow for a WIT or the process configuration can help minimize the work you must do when you upgrade your TFS. + +To minimize the amount of manual work you'll need to do after a TFS upgrade, understand which customizations support an easy update path and which do not. + + + +### Compatible for quick updating + +With the following customizations, you can use the Configure Features Wizard to automatically apply any changes to your team project required for new features. + +<ul> +<li>Fields: Add custom fields, customize a pick list, add or modify area and iteration paths, add rules to a field </li> +<li>WITs: Add custom WITs, change the form layout</li> +<li>Categories: Add custom categories </li> +<li>Agile tools: Customize the columns on the Kanban board, customize the quick add panel </li> +<li>Office integration: Add or change how Project fields map to TFS fields </li> +</ul> + +To learn more about the Configure Features Wizard, see [Configure features after an upgrade](configure-features-after-upgrade.md). + + +### Compatible, but may require manual updates + +The Configure Features Wizard requires that specific work item types, workflow states, and fields exist in the team project. When you make the following customizations, you might need to modify your custom process for the wizard to run, or you might have to update your team project manually. + +<ul> +<li>Fields: Change attributes of an existing field, remove fields that are referenced in the process configuration </li> +<li>WITs: Change the workflow </li> +<li>Agile tools: Change the WITs defined for the Requirement Category, Task Category, or Feature Category.</li> +<li>Agile tools: Change the metastate mapping defined in the process configuration. </li> +<li>Agile tools: Change a field specified for a ```TypeField``` in the process configuration. </li> +</ul> + +In addition, changes you make to WITs or the workflow could require updates to other artifacts provided with your process, such as Excel or SQL Server Reporting Services reports. + + +### Customizations to avoid +You should avoid making the following customizations because they can result in schema conflicts in the data warehouse or cause problems when updating team projects after a TFS upgrade. + +* Fields: + * Change the friendly name of a field (a field specified within a WIT definition file) + * Change one or more reporting attributes, or the attribute to synchronize person names with Active Directory of a default field +* WITs: Rename or delete WITs +* Categories: Change the name of default categories, or change the WITs specified within default categories + +To learn more about reporting attributes, see [Add or modify work item fields to support reporting](http://msdn.microsoft.com/library/ee921481.aspx). + +### Recommended practices +* Identify the best options for customizing WITs that support your tracking requirements. When you change objects that track work items, you should identify how these changes will affect existing and future team projects. +* Put processes and all XML definition files under version control. Do not deploy objects that you define but have not stored in a repository. +* Test your customized objects just as you would test your software. +* Minimize the number of custom fields that you introduce. Minimize the number of fields that you make reportable. + + + +## Replace team area path with a team field (On-premises TFS) +The default configuration for team projects associates each team with an area path. If your organization has several teams that work from a common backlog and across many product areas, this configuration might not fit how you want to organize your work. By adding a custom field to represent teams in your organization, you can reconfigure the agile planning tools and pages to support your teams and decouple assignment to teams and area paths. + +[Use team fields instead of area paths to support teams](../customize/use-team-fields-instead-area-paths.md) describes how to change the default configuration. + +<!--- Add definitions for these +release +team + +--> \ No newline at end of file diff --git a/docs/work/customize/reorder-cards.md b/docs/work/customize/reorder-cards.md new file mode 100644 index 00000000000..8ab4e534636 --- /dev/null +++ b/docs/work/customize/reorder-cards.md @@ -0,0 +1,53 @@ +--- +title: Set Kanban board card reordering | VSTS & TFS +description: Use the Kanban board, process, and tools to plan and track work in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: BDB9CF5A-D83C-4823-BD53-29D49F797FB4 +ms.manager: douge +ms.author: kaelli +ms.date: 07/14/2017 +--- + + +# Reorder cards +<b>VSTS | TFS 2018 | TFS 2017 | TFS 2015</b> + +> [!NOTE] +> **Feature availability:** This feature is supported from VSTS or an on-premises TFS 2015.1 or later version.   + +<a id="reorder-cards"></a> +You can drag any work item to any column or swimlane on the Kanban board. You can even change the order of items as you move a card to a new column. + +![Reorder cards while changing columns](https://i3-vso.sec.s-msft.com/dynimg/IC822185.gif) + +> [!TIP] +> If you work from VSTS and TFS 2015.1 and later versions, you can +> [drag-and-drop work items onto a sprint from any backlog or board](../scrum/define-sprints.md). + +<a id="card-reorder-setting"></a> +## Set card reordering team preference + +> [!NOTE] +> **Feature availability:** This feature is currently supported only from VSTS or to an on-premises application server that's been upgraded to TFS 2015 Update 2 or later version. + +If you want to preserve the backlog priority when you move a card to a new column, you can change the Kanban board card reordering setting for your team. + +1. To open, click the ![gear icon](../_img/icons/team-settings-gear-icon.png) gear icon from your team's Kanban board. + + <img src="_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + + If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can set team settings. + +2. From the Card reordering page you can choose between the two supported behaviors. + <img src="../kanban/_img/kanban-card-reordering-up1.png" alt="Kanban board, Card reording configuration dialog" style="border: 2px solid #C3C3C3;" /> + + The setting you choose applies to all active Kanban boards for your team. + +<a id="card-reorder-note"></a> +> [!NOTE] +> The last column, typically the Closed or Done column, is always ordered by Closed Date with recently Closed showing at the top. In all other columns, cards are ordered by the backlog order or they are reorder based on the Card reordering setting selected. + + + + diff --git a/docs/work/customize/select-backlog-navigation-levels.md b/docs/work/customize/select-backlog-navigation-levels.md new file mode 100644 index 00000000000..d24c07701a1 --- /dev/null +++ b/docs/work/customize/select-backlog-navigation-levels.md @@ -0,0 +1,93 @@ +--- +title: Select backlog navigation levels | VSTS & TFS +description: Choose which backlog and portfolio backlogs are active for your team in Visual Studio Team Services (VSTS) or Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: BB1E56B6-988A-4D0A-AA56-560F2DF681DD +ms.manager: douge +ms.author: kaelli +ms.date: 03/20/2017 +--- + +# Select backlog navigation levels for your team + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015** + +>[!NOTE] +>**Feature availability**: The team setting for choosing which backlog levels are available is available from VSTS and TFS 2015 and later versions. For TFS 2013, the Feature portfolio backlog level is enabled for all teams. + +Each team can determine the backlog levels that they use. For example, feature teams may want to only focus on their product backlog, while a management team may choose to only show feature and epics (the two default portfolio backlogs). You configure which backlog levels appear from your team settings dialog. + +If you want additional portfolio backlogs, see the following topics based on the process model you use: +- **Inheritance**: [Customize your backlogs or boards for a process](../process/customize-process-backlogs-boards.md) +- **Hosted XML or On-premises XML**: [Add portfolio backlogs](add-portfolio-backlogs.md). + +For an overview of process models, see [Customize your work tracking experience](customize-work.md). + + + + +<a id="activate-backlogs"></a> + + +##Set your team's preferences for backlog levels + +>[!NOTE] +><b>Feature availability: </b>You can manage all your team settings from a common configuration dialog from VSTS or the web portal for TFS 2015 Update 1 or later version. + +Because this setting affects all team members' view of the team backlogs and boards, you must be a team administrator to change the setting. Changing the setting is disabled if you're not a team administrator. Go [here to get added as a team administrator](../scale/add-team-administrator.md). + + +**VSTS** + +1. From your team's backlog page, click the ![gear icon](../_img/icons/team-settings-gear-icon.png) (gear icon) to open the common configuration team settings. + + ![Backlog board, open team settings](../backlogs/_img/organize-backlog-open-ccdialog.png) + +2. Click the **Backlogs** tab and check the boxes of those backlog levels you want your team to manage. + + <img src="_img/select-nav-backlog-levels-config-ts.png" alt="VSTS, web portal, team settings dialog, Backlogs tab" style="border: 2px solid #C3C3C3;" /> + +3. To see the changes, open or refresh your team's backlog web page. + +**TFS 2017** + +1. From your team's backlog page, click the ![gear icon](../_img/icons/team-settings-gear-icon.png) (gear icon) to open the common configuration team settings. + + ![Backlog board, open team settings](../backlogs/_img/organize-backlog-open-ccdialog.png) + +2. Click the **Backlogs** tab and check the boxes of those backlog levels you want your team to manage. + + <img src="_img/select-nav-backlog-levels-config-tfs-2017.png" alt="TFS 2017, web portal, team settings dialog, Working with bugs tab" style="border: 2px solid #C3C3C3;" /> + +3. To see the changes, open or refresh your team's backlog web page. + + + +**TFS 2015.1** +1. From your web portal, click the ![gear icon](../_img/icons/team-settings-gear-icon.png), (gear icon) to open the administration page. + + ![Gear icon provides access to admin pages](../_img/icons/ALM_OpenAdminContext.png) + +2. From the Overview tab, choose the team whose settings you want to configure, and then click **Settings**. + + ![Backlog board, open team settings](../backlogs/_img/organize-backlog-open-ccdialog.png) + +3. Click the **Backlogs** tab and check the boxes of those backlog levels you want your team to manage. + + <img src="../backlogs/_img/ALM_OB_BacklogSettings.png" alt="TFS 2015.1 or later, web portal, team settings dialog, Backlogs tab" style="border: 2px solid #C3C3C3;" /> + +4. To see the changes, open or refresh your team's backlog web page. + + +## Related notes + +- [Get started with Agile tools to plan and track work](../overview.md) +- [Backlogs, boards, and plans](../backlogs-boards-plans.md) +- [Create your backlog](../backlogs/create-your-backlog.md) +- [Define features and epics](../backlogs/define-features-epics.md) +- [Organize your backlog](../backlogs/organize-backlog.md) +- [Portfolio management, setup a team hierarchy](../scale/portfolio-management.md) +- [Work with multi-team ownership of backlog items](../backlogs/work-multi-team-ownership-backlogs.md) +- [Visibility across teams](../scale/visibility-across-teams.md) + diff --git a/docs/work/customize/set-area-paths.md b/docs/work/customize/set-area-paths.md new file mode 100644 index 00000000000..857070dfd54 --- /dev/null +++ b/docs/work/customize/set-area-paths.md @@ -0,0 +1,163 @@ +--- +title: Customize area paths | VSTS & TFS +description: Group work items based on team, product, or feature area by defining area paths (VSTS and Team Foundation Server) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 97358022-AE19-4775-AE25-47BA24FF3C74 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/10/2017 +--- + + +# Define area paths + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +Newly created team projects contain a single, root area that corresponds to the team project name. You add area paths under this root. To understand how the system uses area paths, see [About area and iteration paths](about-areas-iterations.md). + + +[!INCLUDE [temp](../_shared/image-differences.md)] + +<a id="open-admin-context"> </a> +## Open the administration context for the team project + +From the web portal, open the admin page for the team project. + +You define both areas and iterations from the Work hub of the team project admin context. From the user context,you open the admin context by clicking the ![gear icon](../../connect/_img/work-tfs-web-portal/IC623347.png) gear Settings icon. The tabs and pages available differ depending on which admin context you access. + +[!INCLUDE [temp](../_shared/learn-about-new-nav-experience.md)] + +To manage areas and iterations you need to be a project administrator or have the **Create child nodes** permission for an area path. If you aren't a project administrator, [get added as one](../scale/add-team-administrator.md) or have someone provide you with explicit permissions to <b>Edit project-level information</b>. + +If you want to add area paths to support teams, you can do that when you [add teams to your team project](../scale/multiple-teams.md). + +Certain [restrictions](about-areas-iterations.md#name-restrictions) apply on names of areas. + + +<a id="admin-intro-team-services" /> + +**VSTS** + +1. From the web portal for the team project context, click the ![gear icon](../_img/icons/gear_icon.png) gear Settings. + + <img src="_img/modify-areas-its-open-admin-context-ts.png" alt="Web portal, VSTS, Open Admin context, team project level" style="border: 2px solid #C3C3C3;" /> + + If you're currently working from a team context, then hover over the ![gear icon](../_img/icons/gear_icon.png) and choose Project settings. + + <img src="_img/modify-areas-its-choose-project-settings-admin-context-ts.png" alt="Default Collection Overview, Projects reference processes" style="border: 2px solid #C3C3C3;" /> + +2. Open the **Work** hub. + +**TFS 2017.1** +<a id="admin-intro-tfs-2017-1" /> + +1. From the web portal for the team project context, click the ![gear icon](../_img/icons/gear_icon.png) gear Settings. + + <img src="_img/modify-areas-its-open-admin-context-tfs-2017-1.png" alt="Web portal, TFS 2017.1, Open Admin context, team project level" style="border: 2px solid #C3C3C3;" /> + + If you're currently working from a team context, then hover over the ![gear icon](../_img/icons/gear_icon.png) and choose Project settings. + + <img src="_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017-1.png" alt="Web portal, TFS 2017.1, Choose the gear icon to Open Project settings" style="border: 2px solid #C3C3C3;" /> + +2. Open the **Work** hub. + +**TFS 2017** +<a id="admin-intro-tfs-2017" /> + +1. From the web portal for the team project context, click the ![gear icon](../_img/icons/gear_icon.png) gear Settings. + + <img src="_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017.png" alt="Web portal, TFS 2017, Open Admin context, team project level" style="border: 2px solid #C3C3C3;" /> + + If you're currently working from a team context, then hover over the ![gear icon](../_img/icons/gear_icon.png) and choose Project settings. + + <img src="_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017_v0.png" alt="Web portal, TFS 2017, Choose the gear icon to Open Project settings" style="border: 2px solid #C3C3C3;" /> + +2. Open the **Work** hub. + + +**TFS 2015** +<a id="admin-intro-tfs-2015" /> + +1. From the web portal user context, click the ![gear icon](../_img/icons/gear_icon.png) gear Settings. + + <img src="../_img/icons/ALM_OpenAdminContext.png" alt="Open the project administration page" style="border: 2px solid #C3C3C3;" /> + +2. Open the **Work** hub. + +## Add an area + +<a id="add-areas-team-services"> </a> + +### Add area paths (VSTS) + +1. Open the **Work, Areas** page for the team project admin context. + + If you haven't added any areas or teams, you'll see that only one area is defined. + + <img src="_img/modify-areas-its-areas-ts.png" alt="Areas, defaults defined for team project" style="border: 2px solid #C3C3C3;" /> + +2. Add a new child node to the area you have selected. + + <img src="_img/m-areas-add-area-path.png" alt="TFS 15, Areas, Create a new area node" style="border: 2px solid #C3C3C3;" /> + +<a id="tfs-15-area-paths" /> + +### Add area paths (TFS 2017) + +1. Open the Work, Areas page for the team project context. + + If you haven't added any areas or teams, you'll see that only one area is defined. + + <img src="_img/modify-areas-its-areas-ts.png" alt="Areas, defaults defined for team project" style="border: 2px solid #C3C3C3;" /> + +2. Add a new child node to the area you have selected. + + <img src="_img/m-areas-add-area-path.png" alt="TFS 15, Areas, Create a new area node" style="border: 2px solid #C3C3C3;" /> + + + +<a id="tfs-2015-area-paths" /> + +### Add area paths (TFS 2015) + +1. Open the **Areas** tab. + + <img src="_img/ALM_CW_OpenAreas.png" alt="Open the areas page defined for team project" style="border: 2px solid #C3C3C3;" /> + + From the areas page, you can set the default area path used to filter the backlog. The default area path is also used when new work items a user creates new work items. + +2. Add a new child node to the area you have selected.</p> + + <img src="_img/ALM_CW_CreateArea.png" alt="Create a new area node" style="border: 2px solid #C3C3C3;" /> + + + +<a name="rename-delete"></a> +### Rename or delete an area or iteration node + +When you rename an area or an iteration, or move the node within the tree hierarchy, the system will automatically update the work items and queries that reference the existing path or paths. + +When you delete an area or an iteration node, the system automatically updates the existing work items with the node that you enter at the deletion prompt. + +## Chart progress by area or iteration + +You can quickly generate [queries](../track/using-queries.md) to view the progress for those areas and iterations. As an example, you can [visualize progress of work items assigned to sprints](../../report/charts.md) as shown in the following stacked bar chart. + +<img src="_img/ALM_CW_StackedBarChart.png" alt="Stacked bar chart by area" style="border: 2px solid #C3C3C3;" /> + + + +## Related notes +As you can see, areas play a major role in supporting Agile tools and managing work items. You can learn more about working with these fields from these topics: + +* [About areas and iterations](about-areas-iterations.md) +* [Add another team](../scale/multiple-teams.md) +* [Set team defaults](../scale/set-team-defaults.md) +* [Configure team settings and add team administrators](../scale/manage-team-assets.md) +* [Agile tools that rely on areas or iterations](../about-teams-and-settings.md) + + + diff --git a/docs/work/customize/set-iteration-paths-sprints.md b/docs/work/customize/set-iteration-paths-sprints.md new file mode 100644 index 00000000000..c931e0a6e59 --- /dev/null +++ b/docs/work/customize/set-iteration-paths-sprints.md @@ -0,0 +1,233 @@ +--- +title: Customize iteration paths, sprint schedules | VSTS & TFS +description: Define the iterations or sprints to use when assigning work items in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 27631A15-9EB1-4E79-814E-8145BB7707C8 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/25/2017 +--- + + +# Define iteration paths (aka sprints) + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +Newly created team projects contain a single, root area that corresponds to the team project name. Team projects typically specify a predefined set of iterations to help you get started tracking your work. All you need to do is specify the dates. + +You add iteration paths under this root. To understand how the system uses area paths, see [About area and iteration paths](about-areas-iterations.md). + + + +[!INCLUDE [temp](../_shared/image-differences.md)] + +<a id="open-admin-context"> </a> +## Open the administration context for the team project + +From the web portal, open the admin page for the team project. + +You define both areas and iterations from the Work hub of the team project admin context. From the user context,you open the admin context by clicking the ![gear icon](../../connect/_img/work-tfs-web-portal/IC623347.png) gear Settings icon. The tabs and pages available differ depending on which admin context you access. + +[!INCLUDE [temp](../_shared/learn-about-new-nav-experience.md)] + +To manage areas and iterations you need to be a project administrator or have the **Create child nodes** permission for an area path. If you aren't a project administrator, [get added as one](../scale/add-team-administrator.md) or have someone provide you with explicit permissions to <b>Edit project-level information</b>. + +If you want to add area paths to support teams, you can do that when you [add teams to your team project](../scale/multiple-teams.md). + +Certain [restrictions](about-areas-iterations.md#name-restrictions) apply on names of areas. + + +**VSTS** +<a id="admin-intro-team-services" /> + +1. From the web portal for the team project context, click the ![gear icon](../_img/icons/gear_icon.png) gear Settings. + + <img src="_img/modify-areas-its-open-admin-context-ts.png" alt="Web portal, VSTS, Open Admin context, team project level" style="border: 2px solid #C3C3C3;" /> + + If you're currently working from a team context, then hover over the ![gear icon](../_img/icons/gear_icon.png) and choose Project settings. + + <img src="_img/modify-areas-its-choose-project-settings-admin-context-ts.png" alt="Default Collection Overview, Projects reference processes" style="border: 2px solid #C3C3C3;" /> + +2. Open the **Work** hub. + + +<a id="admin-intro-tfs-2017-1" /> + +**TFS 2017.1** + +1. From the web portal for the team project context, click the ![gear icon](../_img/icons/gear_icon.png) gear Settings. + + <img src="_img/modify-areas-its-open-admin-context-tfs-2017-1.png" alt="Web portal, TFS 2017.1, Open Admin context, team project level" style="border: 2px solid #C3C3C3;" /> + + If you're currently working from a team context, then hover over the ![gear icon](../_img/icons/gear_icon.png) and choose Project settings. </p> + + <img src="_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017-1.png" alt="Web portal, TFS 2017.1, Choose the gear icon to Open Project settings" style="border: 2px solid #C3C3C3;" /> + +2. Open the **Work** hub. + + +<a id="admin-intro-tfs-2017" /> +**TFS 2017** + +1. From the web portal for the team project context, click the ![gear icon](../_img/icons/gear_icon.png) gear Settings. + + <img src="_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017.png" alt="Web portal, TFS 2017, Open Admin context, team project level" style="border: 2px solid #C3C3C3;" /> + + If you're currently working from a team context, then hover over the ![gear icon](../_img/icons/gear_icon.png) and choose Project settings. + + <img src="_img/modify-areas-its-choose-project-settings-admin-context-tfs-2017_v0.png" alt="Web portal, TFS 2017, Choose the gear icon to Open Project settings" style="border: 2px solid #C3C3C3;" /> + +2. Open the **Work** hub. + + + +<a id="admin-intro-tfs-2015" /> + **TFS 2015** + +1. From the web portal user context, click the ![gear icon](../_img/icons/gear_icon.png) gear Settings. + + <img src="../_img/icons/ALM_OpenAdminContext.png" alt="Open the project administration page" style="border: 2px solid #C3C3C3;" /> + +2. Open the **Work** hub. + + + +<a id="iterations"></a> +##Add iterations and set iteration dates +From the **Iterations** page, you can add and select the iterations that will be active for your team. You add iterations in the same way you add areas. For more information about working within a sprint cadence, see [Schedule sprints](../scrum/define-sprints.md). + + +<a id="define-sprints-team-services"> </a> +### Schedule sprints (VSTS) + +1. Open the Work, Iterations page for the team project context. + + For Scrum-based team projects, you'll see these set of sprints. + + <img src="_img/modify-areas-its-iterations-ts.png" alt="Work, Iterations page, VSTS platform" style="border: 2px solid #C3C3C3;" /> + + If you need to select another team project, go to the Overview page for the collection (click the DefaultCollection link). + +2. Schedule the start and end dates for each sprint your teams will use. Click Set dates or choose to edit the iteration from the ![Actions icon](../_img/icons/actions-icon.png) actions menu for the sprint. + + <img src="../scrum/_img/dsprints-edit-sprint-1-set-start-date.png" alt="Edit iteration, schedule start date, VSTS platform" style="border: 2px solid #C3C3C3;" /> + +3. When you're finished, you'll have a set of sprints scheduled - like this: + + <img src="_img/modify-areas-its-iterations-scheduled-ts.png" alt="Work, Iterations page, scheduled set of sprints, VSTS platform" style="border: 2px solid #C3C3C3;" /> + + Your next step is to [choose the sprints each team will use](../scale/set-team-defaults.md#activate-team-services). + + +<a id="tfs-2015-iteration-paths" /> +### Schedule sprints (TFS 2015) + +1. Open the Iterations tab for the team project context. + + For Scrum-based team projects, you'll see these set of sprints. + + <img src="../scrum/_img/activate-team-sprints.png" alt="Example Iterations for a Team" style="border: 2px solid #C3C3C3;" /> + + You can change the name, location within the tree hierarchy, or set dates for any sprint. Simply open it (double-click or press Enter key) and specify the info you want. + +2. Schedule the start and end dates for those sprints you plan to use. + + <img src="../scrum/_img/set-sprint-start-end-dates.png" alt="Define start and end dates for a sprint" style="border: 2px solid #C3C3C3;" /> + + After you set the start and end dates for one iteration, the calendar tool automatically attempts to set the next set of dates, based on the same iteration length you specified for the first. For example, if you set a three week sprint for Sprint 1, then when you select the start date for Sprint 2, the calendar tool automatically determines the start and end dates based on the next three weeks. You can accept or change these dates. + +3. To add another sprint, select <b>New child</b> and name it what you want. Here, we call it Sprint 7. + + <img src="../scrum/_img/create-new-child-under-sprint.png" alt="Iterations, defaults defined for Agile" style="border: 2px solid #C3C3C3;" /> + + Your next step is to [activate the sprints each team will use](../scale/set-team-defaults.md#activate-sprints-tfs). + + +<!--- +0. Teams can choose which iterations they work in by checking the check box next to each iteration. + + <img src="_img/ALM_CW_OpenIterations.png" alt="Open the iterations page" style="border: 2px solid #C3C3C3;" /> + +0. Each iteration can have a start and end date. After you set the start and end dates for one iteration, the calendar tool automatically defaults the next set of dates, based on the same iteration length you specified for the first. + + **Example:** if you set a 3 week sprint for Sprint 1, then when you select the start date for Sprint 2, the calendar tool automatically determines the start and end dates based on the next three weeks. + + <img src="_img/ALM_CW_SetIterationDate.png" alt="Define start and end dates for a sprint" style="border: 2px solid #C3C3C3;" /> + + ![Define start and end dates for a sprint](_img/ALM_CW_SetIterationDate.png) + +--> + +## Chart progress by area or iteration + +You can quickly generate [queries](../track/using-queries.md) to view the progress for those areas and iterations. As an example, you can [visualize progress of work items assigned to sprints](../../report/charts.md) as shown in the following stacked bar chart. + +<img src="_img/ALM_CW_StackedBarChart.png" alt="Stacked bar chart by area" style="border: 2px solid #C3C3C3;" /> + + +<a name="rename-delete"></a> +## Rename or delete an area or iteration node + +When you rename an area or an iteration, or move the node within the tree hierarchy, the system will automatically update the work items and queries that reference the existing path or paths. + +When you delete an area or an iteration node, the system automatically updates the existing work items with the node that you enter at the deletion prompt. + +## Related notes +As you can see, areas and iterations play a major role in supporting Agile tools and managing work items. You can learn more about working with these fields from these topics: + +* [Set team defaults](../scale/set-team-defaults.md) +* [Agile tools and sprint definitions ](../scrum/define-sprints.md) +* [Query by date or current iteration](../track/query-by-date-or-current-iteration.md) + +<a name="permissions"></a> +### Required permissions + +To create or modify areas or iterations, you must either be a member of the **Project Administrators** group, or your **Create and order child nodes**, **Delete this node**, and **Edit this node** permissions must be set to **Allow** for the area or iteration node that you want to modify. + + +### What kind and how many iterations should a team define? + +You define as many child iterations as you need to reflect your project lifecycle. These paths represent a series of events, such as sprints, pre-beta and beta deliverables, and other release milestones. Teams typically leave work items assigned to the team's default iteration if they are not yet scheduled for work or for a release. + +Add iterations to support these requirements: +* Define sprints your Scrum teams use to [plan and execute their sprints](../scrum/sprint-planning.md) +* Set up more complex multi-release and sprint cycles +* Filter queries based on sprints, milestones, or cycle time for your project +* Support future work that you're not ready to assign to a target release cycle. + +In the following example, Backlog, Beta 1, Beta 2, Release 1.0, and Release 2.0 are defined for the MyApplication team project. + +<img src="_img/ALM_CW_IterationHierarchy-Before.png" alt="Flat iteration hierarchy" style="border: 2px solid #C3C3C3;" /> + +As you create the backlog of product features and tasks, you can start to assign them to the milestones by which you expect the team to finish the features and tasks. +As your needs change, you can add events under each major milestone that reflect how your team schedules and manages its work. + +As the following example shows, the Beta 1 iteration now contains three child nodes, one for each sprint in the Beta 1 time period. + +<img src="_img/ALM_CW_IterationHierarchy-After.png" alt="Hierarchical Iteration Hierarchy" style="border: 2px solid #C3C3C3;" /> + +Iterations do not enforce any rules. For example, you can assign a task to an iteration but not close or complete it during that iteration. At the end of an iteration, you should find all work items that remain active or have not been closed for that iteration and take appropriate action. You can, for example, move them to a different iteration or return them to the backlog. + +<a name="name-restrictions"></a> +### Naming restrictions + +The **Area Path** and **Iteration Path** fields, [data type=TreePath](../reference/define-modify-work-item-fields.md), consist of multiple node items which are separated by the backslash (\) character. We recommend that you minimize the names of nodes, and make sure that you conform to the following restrictions when adding child nodes: + +| Restriction type | Restriction | +| -------------------------------- | ------------------------------------------- | +| Node length | Must not contain more than 255 characters | +| Special characters for nodes | Must not contain Unicode control characters<br/>Must not contain any of the following characters: \ / $ ? * : " & > < # % + ,<br/>Must not contain characters that the [local file system prohibits](https://msdn.microsoft.com/library/aa365247.aspx). | +| Reserved names | Must contain more than a period (.) or two periods (..)<br/>Must not be a [system-reserved name](https://msdn.microsoft.com/library/aa365247.aspx) such as PRN, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM10, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, NUL, CON, or AUX<br/>| +| Path length | Must contain fewer than 4,000 Unicode characters | +| Path hierarchy depth | Must be fewer than 14 levels deep | + + + +<a name="export"></a> +### Export tree structures + +You can't export the structure of tree paths for one team project to use with another team project. + \ No newline at end of file diff --git a/docs/work/customize/set-working-days.md b/docs/work/customize/set-working-days.md new file mode 100644 index 00000000000..ffc0319db21 --- /dev/null +++ b/docs/work/customize/set-working-days.md @@ -0,0 +1,49 @@ +--- +title: Set working days off | VSTS & TFS +description: Choose the days your team works for capacity planning purposes and when using sprint/scrum methods +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 02771DE7-1AF7-46B1-AE4A-219351C570DC +ms.manager: douge +ms.author: kaelli +ms.date: 05/22/2017 +--- + +# Set working days + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Your sprint planning and tracking tools automatically consider days off when calculating capacity and sprint burndown. Leave those days of the week that your team doesn't work unchecked in your team's Settings, Working days page. + +If you're not a team administrator, [get added as one](../scale/add-team-administrator.md). Only team and project admins can change team settings. + +### Team Services +<a id="team-services-work-days" /> + +Open the Settings dialog from the Capacity page to set Working days. + +<img src="../scale/_img/capacity-planning-open-team-settings-tfs-15.png" alt="VSTS, Capacity page, Settings, Working days" style="border: 2px solid #C3C3C3;" /> + + +### TFS 2015 +<a id="tfs-2015-work-days" /> + +Open your team settings from the Overview tab of your team's admin context. + +<img src="../scale/_img/ALM_DS_WorkingDaysOff.png" alt="Team settings page for default working days" style="border: 2px solid #C3C3C3;" /> +</div> + +<a id="tfs-2015-1-work-days" /> +### TFS 2015.1 + +Open the Settings dialog from the Capacity page to set Working days. + +<img src="../scale/_img/open-team-settings.png" alt="TFS 2015.1, Capacity page, Settings, Working days" style="border: 2px solid #C3C3C3;" /> + +### TFS 2015.1 +<a id="tfs-15-work-days" /> + +Open the Settings dialog from the Capacity page to set Working days. + +<img src="../scale/_img/capacity-planning-open-team-settings-tfs-15.png" alt="TFS '15', Set Capacity" style="border: 2px solid #C3C3C3;" /> + diff --git a/docs/work/customize/show-bugs-on-backlog.md b/docs/work/customize/show-bugs-on-backlog.md new file mode 100644 index 00000000000..3e66e0e3cb6 --- /dev/null +++ b/docs/work/customize/show-bugs-on-backlog.md @@ -0,0 +1,99 @@ +--- +title: Show bugs on backlogs and boards | VSTS & TFS +description: For your team, choose how bugs appear on Agile tool product, sprint/scrum backlogs, and Kanban and task boards +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 27DCB879-30F6-44F3-998A-755DF66D6E24 +ms.manager: douge +ms.author: kaelli +ms.date: 04/06/2017 +--- + +# Show bugs on backlogs and boards + +<b>VSTS | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013.4 </b> + +>[!NOTE] +>**Feature availability**: This feature is available from VSTS and the web portal for TFS 2013.4 and later versions. + +As your team identifies code defects or bugs, they can add them to the backlog and track them similar to requirements. Or, they can schedule them to be fixed within a sprint along with other tasks. + +When you track bugs as requirements, they'll show up on the product backlog and Kanban board. When you track bugs similar to tasks, they'll show up on the sprint backlogs and task boards. + +>[!NOTE] +>If you want to track custom WITs on your backlogs or boards, you can.<br/> +> - For Team Services and the Inheritance process model, see [Customize your backlogs or boards for a process](../process/customize-process-backlogs-boards.md). +> - For Hosted XML and On-premises XML process models, see [Add a work item type to a backlog and board](add-wits-to-backlogs-and-boards.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + + +## Set your team's preferences for tracking bugs + +>[!NOTE] +>**Feature availability**: You can manage all your team settings from a common configuration dialog from VSTS or the web portal for TFS 2015 Update 1 or later version. + +1. (VSTS and TFS 2015.1 and later versions) From your team's backlog page, click the ![gear icon](../_img/icons/team-settings-gear-icon.png) (gear icon) to open the common configuration team settings. + + ![Backlog board, open team settings](../backlogs/_img/organize-backlog-open-ccdialog.png) + + (TFS 2015 or TFS 2013.4) Click the ![gear icon](../_img/icons/team-settings-gear-icon.png), (gear icon) to open the administration page. + + ![Gear icon provides access to admin pages](../_img/icons/ALM_OpenAdminContext.png) + + From the Overview tab, choose the team whose settings you want to configure, and then click **Settings**. + +2. Click the **Working with bugs** tab and choose from the three options available. + + * Choose the first option when your team wants to manage bugs similar to requirements. Bugs can be estimated and tracked against team velocity and cumulative flow. Bugs will be associated with the Requirements category. + + * Choose the second option when your team wants to manage bugs similar to tasks. Remaining work can be tracked for bugs and tracked against the sprint capacity and burndown. Bugs will be associated with the Task category. + + * Choose the last option if your team manages bugs separate from requirements or tasks. Bugs will be associated with the Bugs category. + + >[!NOTE] + >Because this setting affects all team members' view of the team backlogs and boards, you must be a team administrator to change the setting. Changing the setting is disabled if you're not a team administrator. Go [here to get added as a team administrator](../scale/add-team-administrator.md). + + **VSTS** + + <img src="_img/show-bugs-settings-ts.png" alt="VSTS, web portal, team settings dialog, Working with bugs tab" style="border: 2px solid #C3C3C3;" /> + + **TFS 2017** + <img src="_img/show-bugs-settings-2017.png" alt="TFS, web portal, team settings dialog, Working with bugs tab" style="border: 2px solid #C3C3C3;" /> + + **TFS 2015, TFS 2013** + + <img src="_img/team-settings.png" alt="TFS 2015, web portal, team settings admin page, Working with bugs" style="border: 2px solid #C3C3C3;" /> + +3. To see the changes, open or refresh the team's [backlog](../backlogs/create-your-backlog.md), [sprint backlog pages](../scrum/sprint-planning.md), or [Kanban board](../kanban/kanban-basics.md). + +> [!TIP] +> If, after refreshing a backlog or board, and you don't see bugs where you expect them, review [How backlogs and boards display hierarchical (nested) items](../troubleshoot/resolve-backlog-reorder-issues.md). Only leaf nodes of nested items will appear on the Kanban or task boards. + +## Related notes + +Bugs are a common item that teams want to track, and choose how they track it. See [Manage bugs](../backlogs/manage-bugs.md) for more guidance. + +However, what if you want to track other work item types (WITs) on your backlogs and boards? + +You can add other WITs—such as change requests, issues, or impediments— by customizing your process or team project, based on the process model you use. For details, see [Customize your work tracking experience](customize-work.md). + +Other quickly configurable options you can make: +- [Customize cards on the Kanban board or task board](customize-cards.md) +- [Enable backlog levels of interest to your team](../customize/select-backlog-navigation-levels.md) +- [Configure team settings](../scale/manage-team-assets.md) + + +### Nested items +As indicated in this topic, bugs can appear alongside user stories (requirements or product backlog items) or tasks. You don't need to link bugs to one of these items in order to manage them. + +When you manage bugs with requirements or with tasks, they'll show up on one or more of your Agile tool backlogs and boards. However, if you nest items—create parent-child links of items that belong in either the Requirements or Task categories—then not all items may appear on your backlogs and boards. To learn more about how nested items are treated, see [How backlogs and boards display hierarchical (nested) items](../troubleshoot/resolve-backlog-reorder-issues.md). + +###Error TF400917 + +The following error indicates that there is a misconfiguration in either your ProcessConfiguration or Categories definition files. + +```TF400917: The current configuration is not valid for this feature. This feature cannot be used until you correct the configuration.``` + +To resolve the error, review the information provided in [Add bugs or other work item types to backlogs or boards](add-wits-to-backlogs-and-boards.md) to make sure that you have configured your XML definition files correctly. + diff --git a/docs/work/customize/toc.yml b/docs/work/customize/toc.yml new file mode 100644 index 00000000000..ce36f51f76f --- /dev/null +++ b/docs/work/customize/toc.yml @@ -0,0 +1,310 @@ +- name: Customization + href: index.md +- name: Overview + items: + - name: About work tracking customization + href: customize-work.md +- name: Quickstarts + items: + - name: Define area paths + href: set-area-paths.md + - name: Define iteration paths or sprints + href: set-iteration-paths-sprints.md +- name: Concepts + items: + - name: About areas and iterations + href: about-areas-iterations.md + - name: Inheritance process model + href: inheritance-process-model.md + - name: Hosted XML process model + href: hosted-xml-process-model.md + - name: On-premises XML process model + href: on-premises-xml-process-model.md + - name: Differences between cloud and on-premises process customizations + href: /vsts/work/import-process/differences?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Agile glossary + href: /vsts/work/concepts/agile-glossary?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json +- name: How-to Guides + items: + - name: Inheritance process model + items: + - name: Manage processes + href: /vsts/work/process/manage-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Customize a process + href: /vsts/work/process/customize-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Add a custom field + href: /vsts/work/process/customize-process-field?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Customize a web form + href: /vsts/work/process/customize-process-form?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Customize a workflow + href: /vsts/work/process/customize-process-workflow?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Customize a work item type + href: /vsts/work/process/customize-process-wit?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Add a custom rule + href: /vsts/work/process/custom-rules?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Add a custom control + href: /vsts/work/process/custom-controls-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Customize backlogs and boards + href: /vsts/work/process/customize-process-backlogs-boards?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Hosted XML + items: + - name: Customize a Hosted XML process + href: /vsts/work/import-process/customize-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Import a process + href: /vsts/work/import-process/import-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Resolve validation errors + href: /vsts/work/import-process/resolve-errors?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Customize form layout + href: customize-wit-form.md + - name: Fields + items: + - name: Add or modify a field + href: add-modify-field.md + - name: Apply a field rule + href: /vsts/work/reference/apply-rule-work-item-field?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define pick lists + href: /vsts/work/reference/define-pick-lists?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Expand list and exclude groups + href: /vsts/work/reference/expand-list-items-and-exclude-groups-from-lists?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Combine list types + href: /vsts/work/reference/combine-list-types?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Change reporting attributes (TFS) + href: /vsts/work/reference/add-or-modify-work-item-fields-to-support-reporting?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Change the workflow + href: /vsts/work/reference/change-workflow-wit?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Work item type or form + items: + - name: Add or modify a work item type + href: add-modify-wit.md + - name: Design the work item form + href: /vsts/work/reference/design-work-item-form?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Add the Attachments control + href: /vsts/work/reference/add-the-attachments-control?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: "Provide help text, hyperlinks, or web content" + href: /vsts/work/reference/provide-help-text-hyperlinks-web-content-form?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Add web content to a form + href: /vsts/work/reference/edit-wit-definition-add-web-content-form?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Change the work item form layout + href: /vsts/work/reference/change-work-item-form-layout?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Specify work item form controls + href: /vsts/work/reference/specify-work-item-form-controls?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define link controls + href: /vsts/work/reference/define-link-controls?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Backlogs and boards + items: + - name: Add work item types + href: add-wits-to-backlogs-and-boards.md + - name: Add portfolio backlogs + href: add-portfolio-backlogs.md + - name: Use categories to group work item types + href: /vsts/work/reference/use-categories-to-group-work-item-types?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Process templates + items: + - name: Upload/download process templates + href: /vsts/work/guidance/manage-process-templates?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Customize a process template + href: /vsts/work/reference/process-templates/customize-process?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: On-premises TFS only + items: + - name: Configure features after an upgrade + href: /vsts/work/customize/configure-features-after-upgrade + - name: Add features manually + href: add-features-manually.md + - name: Additional configuration options + href: additional-configuration-options.md + - name: New features added through feature enablement + href: new-features-added.md + - name: Update a customized process template to access new features + href: update-customized-process-template.md + - name: When upgrading from TFS 2008 or TFS 2010 + href: upgrade-tfs-2008-or-2010.md + - name: Define a custom link type + href: /vsts/work/reference/define-custom-link-type?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Change the maximum attachment size for work items + href: /vsts/work/reference/change-maximum-attachment-size-work-items?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Use team fields instead of area paths + href: use-team-fields-instead-area-paths.md +- name: Reference + items: + - name: Changes made to process templates + href: /vsts/work/guidance/changes-to-process-templates?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Work tracking object limits + href: object-limits.md + - name: Naming restrictions + href: /vsts/reference/naming-restrictions?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Work tracking XML element reference + items: + - name: XML element reference + href: /vsts/work/reference/xml-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: All WITD elements + href: /vsts/work/reference/all-witd-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Localization and globalization XML elements + href: /vsts/work/reference/localization-and-globalization-of-witd-child-elements?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: All FIELD (Definition) elements + href: /vsts/work/reference/all-field-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + items: + - name: FIELD (Definition) + href: /vsts/work/reference/field-definition-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: "COPY, DEFAULT, and SERVERDEFAULT" + href: /vsts/work/reference/define-default-copy-value-field?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: GLOBALLIST XML element reference + href: /vsts/work/reference/define-global-lists?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Global workflow XML element reference + href: /vsts/work/reference/global-workflow-xml-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Apply pattern matching + href: /vsts/work/reference/apply-pattern-matching-to-string-field?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Conditional rules + href: /vsts/work/reference/assign-conditional-based-values-and-rules?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: WORKFLOW elements + href: /vsts/work/reference/all-workflow-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + items: + - name: FIELD (Workflow) + href: /vsts/work/reference/field-workflow-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: ACTION + href: /vsts/work/reference/automate-field-assignments-state-transition-reason?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: TRANSITION + href: /vsts/work/reference/transition-xml-element?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: New web form layout + items: + - name: WebLayout and Control elements + href: /vsts/work/reference/weblayout-xml-elements?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: LinksControlOptions (web) + href: /vsts/work/reference/linkscontroloptions-xml-elements?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Old (web and client) form layout + items: + - name: All FORM elements + href: /vsts/work/reference/all-form-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Layout + href: /vsts/work/reference/layout-xml-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Control + href: /vsts/work/reference/control-xml-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Tab + href: /vsts/work/reference/tab-xml-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: LinksControlOptions (web/client) + href: /vsts/work/reference/linkscontroloptions-elements?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: LabelText and Text + href: /vsts/work/reference/labeltext-and-text-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Link and Param + href: /vsts/work/reference/link-param-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: WebpageControlOptions + href: /vsts/work/reference/webpagecontroloptions-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: LinkTypes elements reference + href: /vsts/work/reference/link-type-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: CATEGORIES XML reference + href: /vsts/work/reference/categories-xml-element-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: ProcessConfiguration XML reference + href: /vsts/work/reference/process-configuration-xml-element?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Process template + items: + - name: XML element index + href: /vsts/work/reference/process-templates/process-template-plug-ins-xml-elements-index?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Process template files + href: /vsts/work/reference/process-templates/overview-process-template-files?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define root tasks + href: /vsts/work/reference/process-templates/define-root-tasks-process-template-plug-in?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Process template XML elements + href: /vsts/work/reference/process-templates/process-template-xml-elements-reference?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define tasks and task group dependencies + href: /vsts/work/reference/process-templates/define-dependencies-plug-ins-groups-tasks?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define tasks to process + href: /vsts/work/reference/process-templates/define-tasks-to-process-a-plug-in?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define the Classification plug-in + href: /vsts/work/reference/process-templates/define-classification-plug-in?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define the Portal plug-in + href: /vsts/work/reference/process-templates/define-project-portal-plug-in?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define the Reporting plug-in + href: /vsts/work/reference/process-templates/add-reports-to-the-process-template?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: "Configure initial groups, teams, members, and permissions" + href: /vsts/work/reference/process-templates/configure-initial-groups-teams-members-permissions?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + items: + - name: Define the Groups and Permissions plug-in + href: /vsts/work/reference/process-templates/define-groups-teams-permissions-plug-in?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define the work item tracking plug-in + href: /vsts/work/reference/process-templates/define-objects-track-work-items-plug-in?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + items: + - name: Add work item types + href: /vsts/work/reference/process-templates/add-wit-definitions-process-template?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Add link types + href: /vsts/work/reference/process-templates/add-link-type-definitions-to-a-process-template?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Add categories + href: /vsts/work/reference/process-templates/add-type-wit-category-definitions-process-template?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Add work item queries + href: /vsts/work/reference/process-templates/add-work-item-queries-process-template?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define a work item query + href: /vsts/work/reference/process-templates/define-work-item-query-process-template?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Add a work item instance + href: /vsts/work/reference/process-templates/add-work-item-instance-process-template?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Control access to functional areas + href: /vsts/work/reference/process-templates/control-access-to-functional-areas?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + items: + - name: Define the TFVC plug-in + href: /vsts/work/reference/process-templates/define-initial-configuration-version-control?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define the Test Management plug-in + href: /vsts/work/reference/process-templates/define-initial-configuration-test-manager?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define the Build plug-in + href: /vsts/work/reference/process-templates/define-initial-configuration-build?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Define the Lab Management plug-in + href: /vsts/work/reference/process-templates/define-initial-configuration-lab-management?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: witAdmin command line reference + href: /vsts/work/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + items: + - name: Import and export categories + href: /vsts/work/reference/witadmin/witadmin-import-export-categories?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Import and export global workflow + href: /vsts/work/reference/witadmin/witadmin-import-export-global-workflow?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Import and export process configuration + href: /vsts/work/reference/witadmin/witadmin-import-export-process-configuration?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: "Import, export, and manage work item types" + href: /vsts/work/reference/witadmin/witadmin-import-export-manage-wits?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Manage global lists for work item types + href: /vsts/work/reference/witadmin/manage-global-lists-for-work-item-types?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Manage link types + href: /vsts/work/reference/witadmin/manage-link-types?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Manage work item fields + href: /vsts/work/reference/witadmin/manage-work-item-fields?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Rebuild the client cache + href: /vsts/work/reference/witadmin/rebuild-client-cache?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Remove work items permanently + href: /vsts/work/reference/witadmin/remove-work-items-permanently?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Project-to-TFS field mapping + items: + - name: Change how fields map + href: /vsts/work/reference/add-or-change-how-project-fields-map-to-tfs-fields?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Customize the Project field mapping + href: /vsts/work/reference/customize-project-field-mapping-file?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Map Project fields + href: /vsts/work/reference/map-microsoft-project-fields-to-tf-fields?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Project field mappings + href: /vsts/work/reference/field-mappings-in-microsoft-project?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Upload/download the Project mapping file + href: /vsts/work/reference/upload-or-download-the-microsoft-project-mapping-file?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: On-premises TFS Only + items: + - name: Support rollup (TFS) + href: /vsts/work/reference/support-rollup-of-work-and-other-fields?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Field data type and reportable attributes + href: /vsts/work/reference/define-modify-work-item-fields?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: Customize and manage the test experience + href: /vsts/work/reference/witadmin/tcm-customize-manage-test-experience?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: API SDK reference + items: + - name: IProcessTemplates.AddUpdateTemplate + href: /vsts/work/reference/api-ref/iprocess-templates-add-update-template?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: WorkItem.Open method + href: /vsts/work/reference/api-ref/open?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json + - name: WorkItem.PartialOpen method + href: /vsts/work/reference/api-ref/partialopen?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json +- name: Resources + items: + - name: Work items + href: /vsts/work/work-items/index + - name: "Scale & Configure Teams" + href: /vsts/teams/index + - name: Account Management (VSTS) + href: /vsts/accounts/index + - name: Server Administration (TFS) + href: /vsts/tfs-server/index + - name: Marketplace extensions + href: /vsts/marketplace/get-vsts-extensions + - name: Extensibility and REST APIs + href: /vsts/extend/overview diff --git a/docs/work/customize/update-customized-process-template.md b/docs/work/customize/update-customized-process-template.md new file mode 100644 index 00000000000..f5f94e1e524 --- /dev/null +++ b/docs/work/customize/update-customized-process-template.md @@ -0,0 +1,505 @@ +--- +title: Update a process template | TFS +description: To use the Configure Features Wizard to update existing team projects, you may need to update your custom process template when connecting to Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 09A88E62-F887-4139-923E-FACE6D759F92 +ms.manager: douge +ms.author: kaelli +ms.date: 03/02/2017 +--- + +# Update a customized process template to access new features + +[!INCLUDE [temp](../_shared/version-header-tfs-only.md)] + +>[!IMPORTANT] +>This topic applies only to team projects defined on an on-premises Team Foundation Server (TFS). Team projects hosted on VSTS [update automatically with each service upgrade](/vsts/release-notes/index). To update a team project that uses the Hosted XML process, see [Import process](../import-process/import-process.md). + +When the Configure Features wizard can't update your team project, it's because your team project was created from a process template other than those TFS provides, or you've customized your team project in ways that conflict with its ability to apply the updates. In these situations, you have these options to update your existing team projects: + + +* **Option A**: Add features to your customized process template, and then run the Configure Features wizard + + Do steps: ![Step 1](../_img/icons/ProcGuid_1.png), ![Step 2](../_img/icons/ProcGuid_2.png), ![Step 4](../_img/icons/ProcGuid_4.png), and ![Step 5](../_img/icons/ProcGuid_5.png) + + Choose this option when you have made extensive customizations to your process template. + +* **Option B**: Apply your customizations to the latest process template, and then run the Configure Features wizard + + Do steps: ![Step 1](../_img/icons/ProcGuid_1.png), ![Step 3](../_img/icons/ProcGuid_3.png), ![Step 4](../_img/icons/ProcGuid_4.png), and ![Step 5](../_img/icons/ProcGuid_5.png) + + Choose this option when you have made very few customizations to your process template. + +* **Option C**: [Manually update your team project to add features](add-features-manually.md) + + Choose this option when you've made customizations to your team project that aren't present in any of your process templates. + +* **Option D**: Programmatically update many team projects. First, choose **Option A** or **Option B** to update your customized process template. Then, batch update all team projects defined for a team project collection using the following information and resources: [How to Configure Features for dozens of team projects](http://blogs.msdn.com/b/visualstudioalm/archive/2012/05/31/how-to-configure-features-for-dozens-of-team-projects.aspx) and [Features4tfs CodePlex solution](https://features4tfs.codeplex.com/). + + Choose this option when you have dozens of team projects that were created from the same process template. + +><b>Tip: </b>Review [Changes made to process templates](../guidance/changes-to-process-templates.md) to learn about changes made to the default process templates to enable new features. + +## 1. Download the latest process template + +![Step 1](../_img/icons/ProcGuid_1.png) You will copy or add files from the folder of the latest version of process template that you download to the corresponding folder containing your customized process template definitions. + +1. If you're updating a process template based on a version earlier than MSF 6.0 or Visual Studio Scrum 2.0, first apply the updates provided in the [2012 version of this topic](https://msdn.microsoft.com/library/ms194972%28v=vs.110%29.aspx). + + You can check the **ProcessTemplate.xml** file for version information. + +1. If you haven't upgraded your application-tier server to the TFS version that contains the features you want, do that now. [Get the download](https://www.visualstudio.com/downloads/visual-studio-2015-downloads-vs.aspx) and [Upgrade Team Foundation Server](https://msdn.microsoft.com/library/jj620933.aspx). + +1. If you aren't a member of the Project Collection Administrators group, [get added](https://msdn.microsoft.com/library/dd547204.aspx). You need the **Manage process template permission** set to Allow to download and manage process templates. + +1. After TFS has been upgraded, [download the latest process template from TFS](../guidance/manage-process-templates.md) and choose the process template that most closely matches the one used to create your team project. + + To download or upload process templates, you must connect to TFS 2015 from either Visual Studio 2015 or Team Explorer 2015. + +1. Copy the process template to a new folder where you'll apply your customizations (Option B), or copy XML definitions to add new features to your existing process template (Option C). + +##2. Add features to your customized process template (Option A) + +![Step 2](../_img/icons/ProcGuid_2.png) Update your customized process template by adding or updating the WITs, Categories, and ProcessConfiguration as described in [Add features using a manual update process](add-features-manually.md). Instead of using **witadmin** to export and import definition files, simply make the changes directly to your process template files. + +Copy or add files from the folder of the latest version of process template that you download to the corresponding folder containing your customized process template definitions. + +Review [Changes made to process templates](../guidance/changes-to-process-templates.md) to learn about all the changes made to the default process templates to enable new features. + +###Add a WIT to a process template + +Perform the following steps for each WIT that you add to your process template. This example shows how to add the Epic WIT to your process template. + +1. Copy the **Epic.xml** file from the **WorkItem Tracking/TypeDefinitions** folder to the corresponding folder of your customized process template. + +1. Add the ```Epic Category``` to the **Categories** file located in the **WorkItem Tracking** folder. + + ``` + <CATEGORY name="Epic Category" refname="Microsoft.EpicCategory"> + <DEFAULTWORKITEMTYPE name="Epic" /> + </CATEGORY> + ``` + +1. Open the **WorkItems** plug-in file located in the **WorkItem Tracking** folder. + + 1. Add a task for uploading the Feature work item type to the ```<WORKITEMTYPES>``` section. + + ``` + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Epic.xml" /> + ``` + +1. Copy the ProcessConfiguration file from the **WorkItem Tracking/Process** folder of the downloaded process template to your customized template folder in the same location. + + Incorporate any customizations that you made to your ProcessConfiguration definition. For more information, see [Process Configuration XML Reference](../reference/process-configuration-xml-element.md). + + +## 3. Apply your customizations to the process template (Option B) + +![Step 3](../_img/icons/ProcGuid_3.png) With this option, you apply customizations you've made to your team project or process template to the latest process template that most closely matches the template used to create your team project. + + +1. Apply the customizations that you've made to the new process template folder: + * Apply customizations you've made to the default work item type (WIT) definitions. This could include additions of fields or modifications to the workflow or form. + + * Add custom WITs to the work tracking folder, and update the **WorkItems** definition file as needed. See [Add type definitions for work items to a process template](../reference/process-templates/add-wit-definitions-process-template.md). + + If you want to use a customized WIT that contains the same name as those in the default process template, then make sure that you swap out the WIT definition files. If you want to use a customized WIT with a different name that that provided in the default process template, then you'll need to modify the categories and process configuration definition files prior to import to reflect the different naming. + + * Apply customizations to the **Categories** definition file. + + * Apply customizations to the **ProcessConfiguration** definition file. Check that the WITs that you want are represented in the correct categories and that all workflow states are mapped to metastates. + + * Copy any additional process template files that you've customized to the appropriate process template folder. For a complete list of process template files and information about customizing them, see [Overview of process template files](../reference/process-templates/overview-process-template-files.md). + +1. Review your changes against this checklist to make sure that you have applied all the required customizations: + <table> + <tbody valign="top"> + <tr> + <th width="15%">Customization + </th> + <th width="25%">Update or verify the WIT definition + </th> + <th width="60%">Update or verify the process configuration definition + </th> + </tr> + <tr> + <td> + <p>Add a WIT to the Requirement Category </p> + <p>(A WIT can belong to the Requirement Category or the Task Category, but not both.)</p> + </td> + <td> + <p>To include the following fields: </p> + <ul> + <li> + <p>The field value assigned to ```type=Order``` in the process configuration file (Backlog Priority in Scrum, Stack Rank in Agile or CMMI)</p> + </li> + <li> + <p>The field value assigned to ```type=Effort``` in the process configuration file (Effort (Scrum), Story Points (Agile), or Size (CMMI))</p> + </li> + <li> + <p>The Area path or the field value assigned to ```type=Team``` in the process configuration file. </p> + </li> + <li> + <p>All fields that are included in the ```AddPanel``` section of the process configuration file (fields must be defined within the ```FIELDS``` section but don't have to be included within the ```FORM``` section.</p> + </li> + </ul> + </td> + <td> + <p>To contain the necessary metastate mappings under the ```RequirementBacklog``` section: </p> + <ul> + <li> + <p>Map the initial states of each WIT in the Requirement Category to ```type="Proposed"``` </p> + </li> + <li> + <p>Map each intermediate workflow state you want to have show up on the Kanban board to ```type="InProgress"``` </p> + </li> + <li> + <p>Map the end of each workflow state to ```type="Complete"``` </p> + <p>You can have more than one State mapped to ``` type="Complete"```</p> + </li> + </ul> + <p>To contain an entry to define the color codes associated with the WIT. For example: </p> + <p>```<WorkItemColor primary="FF009CCC" secondary="FFD6ECF2" name="Product Backlog Item" />```</p> + </td> + </tr> + <tr> + <td> + <p>Change the workflow of a WIT in the Requirement Category</p> + </td> + <td> + <p>N/A</p> + </td> + <td> + <p>To contain the necessary metastate mappings as described above for adding a WIT to the Requirement Category. </p> + </td> + </tr> + <tr> + <td> + <p>Add a WIT to the Task Category</p> + </td> + <td> + <p>To include the following fields:</p> + <ul> + <li> + <p>The field value assigned to ```type=Order``` in the process configuration file (Backlog Priority in Scrum, Stack Rank in Agile or CMMI)</p> + </li> + <li> + <p>The field value assigned to ```type=Activity``` in the process configuration file (Activity (Scrum or Agile) or Discipline (CMMI) ) </p> + </li> + <li> + <p>Area path or the field value assigned to ```type=Team``` in the process configuration file </p> + </li> + <li> + <p>The field value assigned to ```type=RemainingWork``` in the process configuration file (Remaining Work)</p> + </li> + <li> + <p>(Optional) Original Work and Completed Work (Agile and CMMI only) </p> + </li> + </ul> + </td> + <td> + <p>To contain the necessary metastate mappings under the ```TaskBacklog``` section: </p> + <ul> + <li> + <p>Map the initial states of each WIT in the Task Category to ```type="Proposed"``` </p> + </li> + <li> + <p>Map each intermediate workflow state that you want to have show up on the task board to ```type="InProgress"``` </p> + </li> + <li> + <p>Map the end of each workflow state to ```type="Complete"``` </p> + <p>You can have more than one State mapped to ``` type="Complete"```</p> + </li> + </ul> + <p>To contain an entry to define the color codes associated with the WIT. For example: </p> + <p>```<WorkItemColor primary="FFF2CB1D" secondary="FFF6F5D2" name="Task" />```</p> + </td> + </tr> + <tr> + <td> + <p>Change the workflow of a WIT in the Task Category</p> + </td> + <td> + <p>N/A</p> + </td> + <td> + <p>To contain the necessary metastate mappings as described above for adding a WIT to the Task Category. </p> + </td> + </tr> + <tr> + <td> + <p>Add a WIT to the Bug Category or change the workflow of a WIT in the Bug Category (Agile and CMMI only) </p> + </td> + <td> + <p>To support the team configurable setting to [show bugs on backlogs and boards](show-bugs-on-backlog.md), include the following fields:</p> + <ul> + <li> + <p>The field value assigned to ```type=Order``` in the process configuration file (Backlog Priority in Scrum, Stack Rank in Agile or CMMI)</p> + </li> + <li> + <p>The field value assigned to ```type=Effort``` in the process configuration file (Effort (Scrum), Story Points (Agile), or Size (CMMI))</p> + </li> + <li> + <p>The field value assigned to ```type=Activity``` in the process configuration file (Activity (Scrum or Agile) or Discipline (CMMI) ) </p> + </li> + <li> + <p>Area path or the field value assigned to ```type=Team``` in the process configuration file </p> + </li> + <li> + <p>The field value assigned to ```type=RemainingWork``` in the process configuration file (Remaining Work)</p> + </li> + <li> + <p>(Optional) Original Work and Completed Work (Agile and CMMI only) </p> + </li> + </ul> + </td> + <td> + <p>To contain the necessary metastate mappings under the ```BugWorkItems``` section: </p> + <ul> + <li> + <p>Map the initial state of each WIT in the Bug Category to ``` type="Proposed"```</p> + </li> + <li> + <p>Map each intermediate workflow state you want to have show up on the Kanban Board or for My Work to ``` type="InProgress"```</p> + </li> + <li> + <p>Map the end of each workflow state ``` type="Complete"```</p> + <p>You can have more than one State mapped to ```type="Complete"```</p> + </li> + </ul> + <p>To learn more, see <a href="https://msdn.microsoft.com/library/hh739067.aspx">Support bug update status using My Work</a>.</p> + </td> + </tr> + <tr> + <td> + <p>Remove a WIT from the Requirement Category or Task Category</p> + </td> + <td> + <p>N/A</p> + </td> + <td> + <p>To remove any metastate mappings that are only associated with that WIT</p> + </td> + </tr> + <tr> + <td> + <p>Remove a WIT </p> + </td> + <td> + <p>Remove the WIT from the categories file</p> + </td> + <td> + <p>To remove any metastate mappings that are only associated with the WIT that you removed and the ```WorkItemColor``` element that defines the color codes for the WIT you removed.</p> + </td> + </tr> + <tr> + <td> + <p>Rename a WIT</p> + </td> + <td> + <p>Update the categories file with the new names</p> + </td> + <td> + <p>Update the process configuration file with the new names</p> + </td> + </tr> + </tbody> + </table> + + +## 4. Rename and upload the process template to TFS + +![Step 4](../_img/icons/ProcGuid_4.png) For the Configure Features wizard to select the latest version of a process template, you must update the version statement to differentiate your updated process template ```version``` from previous versions. + +1. Open the **ProcessTemplate** plug-in file located in the top folder. + +1. Update the name to reflect the version changes you've made. For example: + + ``` + <name>MyCompany Custom Scrum </name> + ``` + +1. Update the code snippet after the ```description``` element. Increase the minor version to reflect that you've made updates to the existing process template and change the guid in the version to distinguish it from the default TFS process template. + + Your choice of code snippet is based on the template category that you are updating: + + <table> + <tbody> + <tr> + <th> + Category + </th> + <th> + Version statement + </th> + </tr> + <tr> + <td> + Agile + </td> + <td> + ``` + <version type="ADCC42AB-9882-485E-A3ED-7678F01F66BC" major="14" minor="1"/> + ``` + </td> + </tr> + <tr> + <td> + CMMI + </td> + <td> + ``` + <version type="27450541-8E31-4150-9947-DC59F998FC01" major="14" minor="1"/> + ``` + </td> + </tr> + <tr> + <td> + Scrum + </td> + <td> + ``` + <version type="6B724908-EF14-45CF-84F8-768B5384DA45" major="14" minor="1"/> + ``` + </td> + </tr> + </tbody> + </table> + + The Configure Features wizard uses the ```version``` statement to determine which process template within a category is the latest version and automatically selects that version. + + If the ```version``` statement isn't present, the Configure Features wizard can't select the process template for updating a team project. Also, if more than one process template has been uploaded that specifies the same highest version number, then none of these process templates can be selected for updating a team project. +1. [Upload the process template](../guidance/manage-process-templates.md). + + To verify your changes, create a test project. See [create a team project](../../accounts/create-team-project.md). + +## 5. Run the Configure Features wizard + +![Step 5](../_img/icons/ProcGuid_5.png) When you've verified that the process template supports your customizations, run the [Configure Features wizard to update your existing team projects](configure-features-after-upgrade.md). + +1. Verify the features you want work as expected by exercising them as described in the following topics: + <table> + <tbody valign="top" width="85%"> + <tr> + <th width="15%"> + Feature + </th> + <th width="75%"> + Changes + </th> + </tr> + <tr> + <td> + Code Review + </td> + <td> + [Request a code review from the My Work page in Team Explorer](/vsts/tfvc/get-code-reviewed-vs). My Work only appears when you have Visual Studio Premium or Visual Studio Ultimate installed. + </td> + </tr> + <tr> + <td> + My Work + </td> + <td> + [Develop code and manage pending changes](https://msdn.microsoft.com/library/ms245462.aspx#my_work) from the My Work page in Team Explorer. My Work only appears when you have Visual Studio Premium or Visual Studio Ultimate installed. + </td> + </tr> + <tr> + <td> + Feedback + </td> + <td>[Request feedback](../connect/get-feedback.md). <br/> + </td> + </tr> + <tr> + <td> + Planning Tools + </td> + <td> + [Create your backlog](../backlogs/create-your-backlog.md), [plan a sprint](../scrum/sprint-planning.md), [work with the Kanban board](../kanban/kanban-basics.md), and [more](../scrum/define-sprints.md). + </td> + </tr> + <tr> + <td> + Storyboarding + </td> + <td>[Launch Storyboarding or link a storyboard to a work item](../office/storyboard-your-ideas-using-powerpoint.md). + </td> + </tr> + <tr> + <td> + Portfolio Backlogs + </td> + <td>[Select the portfolio backlogs they work with to organize their backlogs](select-backlog-navigation-levels.md). + </td> + </tr> + <tr> + <td> + Shared Parameters + </td> + <td> + You use Shared Parameter work items to [run tests with different data](../../manual-test/repeat-test-with-different-data.md). + </td> + </tr> + <tr> + <td> + Test Plan and Test Suite + </td> + <td>[Plan and execute manual tests using the web portal](https://msdn.microsoft.com/library/dd380763.aspx). + </td> + </tr> + <tr> + <td> + Bug Behavior + </td> + <td> + Configure the option as described in [Show bugs on backlogs and boards feature](show-bugs-on-backlog.md). + </td> + </tr> + </tbody> + </table> + +2. Apply [additional configuration options](additional-configuration-options.md) based on those features of interest. + +##Related update notes + +Keep these tips in mind when modifying process template files: +* See [Overview of process template files](../reference/process-templates/overview-process-template-files.md) for information about each folder and file contained within the interdependent set of files. +* Don't remove a file or a task from the set unless you know what the file is and that you will have no use for it. +* To locate the customizations that you have made, you can perform a diff operation on comparable files that exist in the two templates. However, you could receive some false positives because the sequence of element definitions might have changed between two versions. +* You can search for the **dependency** element across all plug-in files to learn what tasks depend on other tasks that are being completed. For example, Microsoft Test Manager and Lab Management require the SharedSteps and TestCase work item types, the SharedSteps and TestedBy links types, and categories. See [Define dependencies for task groups and tasks in plug-in files](https://msdn.microsoft.com/library/ms243800.aspx). + +You can learn more about each process template definition files from these resources: + +* [Customize a process template](../reference/process-templates/customize-process.md) +* [All WITD XML Elements Reference](../reference/all-witd-xml-elements-reference.md) +* [Categories XML Element Reference](https://msdn.microsoft.com/library/dd286631.aspx) +* [Process Configuration XML Element Reference](../reference/process-configuration-xml-element.md) + +You can post a question or search for answers to your update questions in one of these forums: [Team Foundation Server - work tracking](http://social.msdn.microsoft.com/Forums/tfsworkitemtracking/threads) or [the web portal](http://go.microsoft.com/fwlink/?LinkId=257843). + + + +<a name="how_works"></a> + +### Customizations that interfere with smooth updates + +What types of customizations stop the Configure Features wizard from being able to update a team project? + +The following changes made to a process template can interfere with the Configure Features wizard's ability to run: + +* Renamed or removed WITs that belong to the Requirement Category or Task Category. +* Renamed states or customized workflow states defined for WITs that belong to the Requirement Category or Task Category. Metastates define how planning tools treat each workflow state. At least one workflow state must map to the **InProgress** and to the **Completed** metastates +* Removal of fields defined for WITs that belong to the Requirement Category or Task Category. These fields are defined in the ProcessConfiguration definition file and include the fields used to manage backlog priority, effort, task activity or discipline, and remaining work. + +To learn more, see [Process configuration XML element reference](../reference/process-configuration-xml-element.md). + +###Add portfolio backlog levels + +You can add up to five portfolio backlogs total. This includes the Feature and Epic portfolio backlogs. You can add this to a custom process template or after your team project is updated. To get started, see [Add a portfolio backlog](add-portfolio-backlogs.md). + +###Rename a work item type + +Use **witadmin renamewitd** command to change the name, and then update the Categories definition file. To learn more, see [Add or modify a work item type](add-modify-wit.md). + diff --git a/docs/work/customize/upgrade-tfs-2008-or-2010.md b/docs/work/customize/upgrade-tfs-2008-or-2010.md new file mode 100644 index 00000000000..8d928c7e26c --- /dev/null +++ b/docs/work/customize/upgrade-tfs-2008-or-2010.md @@ -0,0 +1,95 @@ +--- +title: Before you upgrade from TFS 2008 or TFS 2010 | TFS +description: Follow these steps to when you upgrade from TFS 2008 or TFS 2010 to TFS 2015 so that you can configure the new features. +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: F52E3DB7-4A62-4BD2-8C6F-CC44CC09464D +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2016 +--- + +# When upgrading from TFS 2008 or TFS 2010 + +<b>TFS 2015</b> + +<blockquote style="font-size: 13px"><b>Feature availability: </b>This topic applies only to team projects hosted on an on-premises Team Foundation Server (TFS). Team projects on VSTS [update automatically with each service upgrade](/vsts/release-notes/index). +</blockquote>   + +Each version of Team Foundation Server (TFS) typically introduces one or more changes to work tracking. To gain access to the new features that rely on these changes, your existing team projects must be updated. + +The Configure Features wizard is designed to make the update process pain free, however, customized team projects may prevent the wizard from being successful. +If you're upgrading from TFS 2008 or TFS 2010, you have some additional steps. + +**Option 1:** + +This option is simpler, but will result in more downtime, especially if your TFS databases are very large. It may not work if you have customized your team projects heavily. + +* [Upgrade your TFS instance to TFS 2012 by downloading the TFS 2012 ISO](http://go.microsoft.com/fwlink?linkid=255990). +* [Run the Configure Features Wizard for TFS 2012 on each team project](configure-features-after-upgrade.md). + You need to do this before you upgrade to TFS 2015 so that you'll be able to use the Confugure Features Wizard for TFS 2015. +* [Update a team project based on a MSF v4.2 process template](../reference/update-a-team-project-v4-dot-2-process-template.md). +* [Upgrade your TFS instance to TFS 2015](../../tfs-server/upgrade/get-started.md). +* [Run the Configure Features Wizard for TFS 2015 on each team project](configure-features-after-upgrade.md). + Each team project owner can do this when it makes sense. You don't have to configure features for all team projects at this time. +* [Perform additional configurations for each team project.](additional-configuration-options.md). + Each team project can make these configuration changes when it makes sense, too. + + +**Option 2:** + +This option is more work, but it will work with customized team projects and it reduces dowbtime because you don't have to upgrade twice. + +* [Upgrade your TFS instance to TFS 2015](../../tfs-server/upgrade/get-started.md). +* Manually update each team project: + * [Update a team project based on a MSF v4.2 process template](../reference/update-a-team-project-v4-dot-2-process-template.md). + * [Update the Workflow for Agile Team Projects](https://msdn.microsoft.com/library/hh500412.aspx). + * [Apply updates manually based on the features you want to enable](add-features-manually.md). +* [Perform additional configurations for each team project](additional-configuration-options.md). + +<a id="earlier-versions"> </a> + +##Updating team projects based on earlier versions of MSF process templates +If you upgrade your TFS instance to TFS 2015 and your existing team projects were created with MSF version 5.0 or earlier process templates, you may have to apply a few updates manually. Two specific problems can occur having to do with a missing field or workflow state. + +###Value Area field missing +The following message reported by the Configure Features wizard indicates that the Value Area field is missing from either the User Story or Requirement WIT definition: + +``` +[Error] TF400654: Unable to configure Planning Tools. The following element contains an error: RequirementBacklog/Columns. TF400529: This element defines the columns that appear on the backlog. You must set all values to fields that exist in at least one of the work item types belonging to the category. The following fields do not exist in any of the work item types: Microsoft.VSTS.Common.ValueArea. +``` + +You can resolve this error by (1) adding the following syntax to the ```FIELDS``` section of the User Story or Requirement definition: +``` +<FIELD name="Value Area" refname="Microsoft.VSTS.Common.ValueArea" type="String"> + <REQUIRED /> + <ALLOWEDVALUES> + <LISTITEM value="Architectural" /> + <LISTITEM value="Business" /> + </ALLOWEDVALUES> + <DEFAULT from="value" value="Business" /> + <HELPTEXT>Business = delivers value to a user or another system; Architectural = work to support other stories or components</HELPTEXT> +</FIELD> +``` + +and the following syntax to the ```FORM``` section: +``` +<Control FieldName="Microsoft.VSTS.Common.ValueArea" Type="FieldControl" Label="Value area" LabelPosition="Left" /> +``` + +Or (2) removing the following entry from the ProcessConfiguration ```RequirementBacklog``` section: +``` +<Column refname="Microsoft.VSTS.Common.ValueArea" width="100" /> +``` + +See [Add features using a manual update process](add-features-manually.md) for more information about updating these files manually. + + +###New workflow state missing +The following message reported by the Configure Features wizard indicates that the New workflow state is missing for the Bug WIT definition: + +**[Error] TF400654: Unable to configure Planning Tools.** The following element contains an error: BugWorkItems/BugWorkItems. TF400506: This element defines the states for work items that represent Bugs or Defects. Each state must exist in at least one of the work item types that are defined in: BugWorkItems. The following states do not exist in any of the work item types: New. + + +To resolve this error, you must add the New workflow state to the Bug definition as described in [Add features using a manual update process](add-features-manually.md). + diff --git a/docs/work/customize/use-team-fields-instead-area-paths.md b/docs/work/customize/use-team-fields-instead-area-paths.md new file mode 100644 index 00000000000..b2faa4708bd --- /dev/null +++ b/docs/work/customize/use-team-fields-instead-area-paths.md @@ -0,0 +1,252 @@ +--- +title: Use team fields instead of area paths to support teams | VSTS & TFS +description: Steps to modify the XML syntax to support using a team field for Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: d61dcfa8-e9ec-4b50-b79b-89512cf1e3ea +ms.manager: douge +ms.author: kaelli +ms.date: 04/14/2017 +--- + +# Use team fields instead of area paths to support teams + +[!INCLUDE [temp](../_shared/version-header-tfs-only.md)] + +>[!IMPORTANT] +>**Feature availability:**  Team fields are only supported for on-premises TFS. Team fields are not supported in VSTS. +> +>Also, you can use a Team field or Area Paths to configure Team-scoped tools, but not both. + +The default configuration for team projects configures each team as an area path. For information on adding a team, see [Multiple teams](../scale/multiple-teams.md). + +If your organization has several teams that work from a common backlog and across many product areas, this configuration might not fit how you want to organize your work. By adding a custom field to represent teams in your organization, you can reconfigure the agile planning tools and pages to support your teams and decouple assignment to teams and area paths. + +Many features available through the web portal for TFS are scoped to a team. Teams access their set of team-scoped features by choosing their team context. Each team gets access to a suite of Agile tools and team assets. These tools provide teams the ability to work autonomously and collaborate with other teams across the enterprise. To learn more, see [Configure team settings](../scale/manage-team-assets.md). + + + +When you customize your team project to support team fields, the Team field tab appears in the administration page for the team project and each team. + +[!INCLUDE [temp](../_shared/image-differences.md)] + +<img src="_img/use-team-fields-instead-area-paths-support-teams/IC686847.png" alt="Web portal, team project admin context, Team field page added" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +>This topic describes how to reconfigure a team project that is based on the Scrum process template. If your team project is based on another process template and that template is compatible with TFS 2013 or later version, you can make similar changes. Even if you've used the default configuration, you can reconfigure your team project. + + +<a id="globallist"> </a> +### 1. Create a global list to manage teams + +1. If you aren't a member of the **Project Administrators** group, [get those permissions](../../security/set-project-collection-level-permissions.md). + +2. Open a Command Prompt window where you've installed a version of Visual Studio (you can [download Visual Studio Community](https://www.visualstudio.com/downloads/) for free) and enter: + + **For Visual Studio 2017:** + ```cd %programfiles%\Microsoft Visual Studio 15.0\Common7\IDE``` + + **For Visual Studio 2015:** + ```cd %programfiles%\Microsoft Visual Studio 14.0\Common7\IDE``` + + **For Visual Studio 2013**: + ```cd %programfiles%\Microsoft Visual Studio 12.0\Common7\IDE``` + + On a 64-bit edition of Windows, replace %programfiles% with %programfiles(x86)%. + + [!INCLUDE [temp](../_shared/process-editor.md)] + +3. Export the global list for the team project collection. + + witadmin exportgloballist /collection:"http://MyServer:8080/tfs/DefaultCollection" /f:Directory/globallist.xml" + + Add the global list definition for your team. Include a value you'll want to use for items not yet assigned to a team. If your global list is empty, simply copy the following code, paste into the XML file, and modify to support your team labels. + + <?xml version="1.0" encoding="utf-8"?> + <gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists"> +    <GLOBALLIST name="Teams"> +       <LISTITEM value="Unassigned"/> +       <LISTITEM value="Team A"/> +       <LISTITEM value="Team B"/> +       <LISTITEM value="Team C"/> +       <LISTITEM value="Team D"/> +    </GLOBALLIST> + </gl:GLOBALLISTS> + +4. Import the global list definition. + + witadmin importgloballist /collection:"http://MyServer:8080/tfs/DefaultCollection" /f:Directory/globallist.xml" + + Note that global lists are defined for all team projects within a team project collection. + + + +<a id="addteamfield"> </a> +### 2. Add a custom team field to work item types + +Add a custom team field to all work item types (WITs) that are included in the Feature Category, Requirement Category, and Task Category. And, if you've upgraded to TFS 2013.3 or later version, add the custom team field to all WITs included in the Test Plan Category. + +1. Export the work item type definitions. For Scrum, export the type definitions for the feature, product backlog item, bug, and task. + + witadmin exportwitd /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /n:"Product Backlog Item" /f:Directory/pbi.xml + witadmin exportwitd /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /n:Bug /f:Directory/bug.xml + witadmin exportwitd /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /n:Task /f:Directory/task.xml + witadmin exportwitd /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /n:"Test Plan" /f:Directory/TestPlan.xml + +2. For each type, add a custom Team field that references the global list. + + <FIELDS> + . . .  +    <FIELD name="Team" refname="MyCompany.Team" type="String" reportable="dimension"> +       <HELPTEXT>Name of the team that will do the work.</HELPTEXT> +       <ALLOWEXISTINGVALUE /> +          <ALLOWEDVALUES > +             <GLOBALLIST name="Teams" /> +          </ALLOWEDVALUES > +          <DEFAULT from="value" value="Unassigned" /> +    </FIELD> + . . .  + </FIELDS> + + >[!TIP] + >Name your custom field to distinguish it from other system fields. Do not use "System" as a prefix for `refname`. And, keep the `name` and `refname` labels to 128 characters and 70, respectively. + +3. Add the **Team** field to the [Layout section](../reference/layout-xml-element-reference.md) of the work item form. If you are working in VSTS and TFS 2017, you'll also need to edit the [**WebLayout** section](../reference/weblayout-xml-elements.md) of the WIT definition. + + <FORM> + . . .  +    <Group Label="Status"> +       <Column PercentWidth="100"> +          <Control FieldName="MyCompany.Team" Type="FieldControl" Label="Team" LabelPosition="Left" EmptyText="<None>" /> +          <Control Type="FieldControl" FieldName="System.AssignedTo" Label="Assi&gned to:" LabelPosition="Left" /> +          <Control FieldName="System.State" Type="FieldControl" Label="Stat&e" LabelPosition="Left" /> +          <Control FieldName="System.Reason" Type="FieldControl" Label="Reason" LabelPosition="Left" ReadOnly="True" /> +          </Column> +    </Group> + . . .  + </FORM> + + Optionally, move the Area Path field to appear before or after the Iteration Path. + +4. Import the updated type definitions. + + witadmin importwitd /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /f:Directory/pbi.xml + witadmin importwitd /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /f:Directory/bug.xml + witadmin importwitd /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /f:Directory/task.xml + witadmin importwitd /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /f:Directory/TestPlan.xml + +<a id="processconfig"> </a> +### 3. Change process configuration to reference the team field + +1. Export the ProcessConfiguration XML definition. + + witadmin exportprocessconfig /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /f:Directory/ProcessConfiguration.xml + +2. Replace `System.AreaPath` for the field used to specify `type="Team"`. + + <TypeField refname="MyCompany.Team" type="Team" /> + +3. (Optional) Add the Team field to the quick add panel for the backlog page. + <RequirementBacklog category="Microsoft.RequirementCategory" parent="Microsoft.FeatureCategory" pluralName="Stories" singularName="User Story"> + <AddPanel> + <Fields> + <Field refname="System.Title" /> + <Field refname="MyCompany.Team " /> + </Fields> + </AddPanel> + . . . + +4. Import the definition file. + + witadmin importprocessconfig /collection:"http://MyServer:8080/tfs/DefaultCollection" /p:MyProject /f:Directory/ProcessConfiguration.xml + +<a id="config-teamfield"> </a> +### 4. Configure the Team field for each team + +Create and configure teams in the web portal to both match and reference the Team field. Each team, including the team project, Fabrikam Fiber Website, must be configured with a default value for the Team field. + +1. Refresh your web portal, and from the team project home page, open a product backlog item, PBI or user story. Verify that the changes appear as you expect and that you can select a team. + + <img src="_img/use-team-fields-instead-area-paths-support-teams/IC649971.png" alt="Open PBI and confirm the Team field" style="border: 2px solid #C3C3C3;" />  + +2. If you haven't yet created teams to match those that are in your global list, do that now. See [Multiple teams, Add another team](../scale/multiple-teams.md). + + ![Create teams](_img/use-team-fields-instead-area-paths-support-teams/IC757673.png) + + If you have previously created teams, they will continue to exist. You can rename them as needed. + +3. Open the product backlog or the task board for the team project. You'll see an error indicating you'll need to select a team area. + + ![Select team's areas link on Backlogs page in the web portal](_img/use-team-fields-instead-area-paths-support-teams/IC686839.png) + +4. On the administration page, open the **Team field** tab and select the value or values from the global list that you want to associate with the default team. + + ![Unconfigured Team field for a team project](_img/use-team-fields-instead-area-paths-support-teams/IC686842.png) + + To support rollup of all teams to the default team, all teams are selected. + + ![Team field page for team project admin context](_img/use-team-fields-instead-area-paths-support-teams/IC686846.png) + +5. Next, configure each team within the hierarchy of teams with the Team field value that matches their name. + + ![Configure team field for each team](_img/use-team-fields-instead-area-paths-support-teams/IC686847.png) + + Repeat this step for all sub teams within the hierarchy. + +### Assign work to teams using the Team field + +From the product backlog page for the team project, you can create backlog items and assign them to teams by opening each item and selecting the Team field. Assigned items will show up on the team's backlog, and they can then work with them using their sprint backlog and task board. + +<img src="_img/use-team-fields-instead-area-paths-support-teams/IC778365.png" alt="Work from a common backlog" style="border: 2px solid #C3C3C3;" />  + +For backlog items you create from a team's backlog page, TFS assigns the default value associated with the team to the Team field. + + +##Related notes + +- [Add a team, add team members](../scale/multiple-teams.md) +- [Customize a process template](../reference/process-templates/customize-process.md) +- [**witadmin** command-line tools](../reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md). +- [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md) + + +### Q: Why don't teams that I add to a team project show up in the Team field? + +**A:** Teams that you [add to a team project from the Overview page of the team project](../scale/multiple-teams.md), will not show up in the pick list of the custom field that you created to capture teams. You must update the global list that you created in [Create a global list to manage teams](#globallist) for new teams to appear. + +Use the global list to add new teams and then configure them as described in [Configure Team settings](#configteam). + +### Q: How do I configure features for an upgraded team project that has been customized to use team fields? + +**A:** Before you can [configure features for an upgraded team project](configure-features-after-upgrade.md) that you have customized to use team fields, you'll need to customize the latest process template with the same changes outlined in this topic. Here are the basic steps: + +1. Upgrade TFS [to the latest version](https://www.visualstudio.com/downloads/#team-foundation-server-2017). + +2. [Download the process template](../guidance/manage-process-templates.md) that corresponds to the template used to create your team project. + + >[!IMPORTANT] + >Make sure that you download the process template from the upgraded server. Also, the Visual Studio client version you use for both the download process and using **witadmin** must match the server version. For example, if you have upgraded to TFS 2015, you need to work from Visual Studio 2015. If you use an older version of Visuals Studio, you may get errors during the upload process. + +3. Modify the ProcessTemplate file, and update the process template name and version number. For example: + + <?xml version="1.0" encoding="utf-8"?> + <ProcessTemplate> + <metadata> + <name>Microsoft Visual Studio Scrum 2013.3 with Team Field</name> + <description>This template is for teams who follow the Scrum methodology and use Scrum terminology.</description> + <version type="6B724908-EF14-45CF-84F8-768B5384DA45" major="3" minor="60" /> + +4. As described earlier in this topic, [Add a custom team field to work item types](#addteamfield), update the WIT definitions for the work item types assigned to the Feature, Requirements, and Task categories. For the Scrum process template, this corresponds to the Feature, Product Backlog Item, Bug, Task, and Test Plan WITs. + +5. As described in [Change process configuration to reference the team field](#processconfig), update the ProcessConfiguration file to use the custom team field. + +6. [Upload the process template](../guidance/manage-process-templates.md) that you just modified. + +7. [Configure features](configure-features-after-upgrade.md) using the wizard. Upon verify, the wizard should select the process template that you uploaded in the previous step. + + + + +###Credits + +Guidance for [customizing teams decoupled from area paths](http://blog.hinshelwood.com/team-foundation-server-2012-teams-without-areas/) was developed in partnership with [Martin Hinshel](http://blog.hinshelwood.com), a senior devops consultant and Microsoft Visual Studio ALM MVP. diff --git a/docs/work/guidance/_img/ALM_MPT_WIT_Agile.png b/docs/work/guidance/_img/ALM_MPT_WIT_Agile.png new file mode 100644 index 00000000000..9fddb8e99f6 Binary files /dev/null and b/docs/work/guidance/_img/ALM_MPT_WIT_Agile.png differ diff --git a/docs/work/guidance/_img/ALM_MPT_WIT_CMMI.png b/docs/work/guidance/_img/ALM_MPT_WIT_CMMI.png new file mode 100644 index 00000000000..e6a6ed22519 Binary files /dev/null and b/docs/work/guidance/_img/ALM_MPT_WIT_CMMI.png differ diff --git a/docs/work/guidance/_img/ALM_MPT_WIT_Scrum.png b/docs/work/guidance/_img/ALM_MPT_WIT_Scrum.png new file mode 100644 index 00000000000..6250a32ff93 Binary files /dev/null and b/docs/work/guidance/_img/ALM_MPT_WIT_Scrum.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Agile_WF_Bug.png b/docs/work/guidance/_img/ALM_PT_Agile_WF_Bug.png new file mode 100644 index 00000000000..72bf4ea3398 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Agile_WF_Bug.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Agile_WF_Epic.png b/docs/work/guidance/_img/ALM_PT_Agile_WF_Epic.png new file mode 100644 index 00000000000..69cec3c8668 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Agile_WF_Epic.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Agile_WF_Feature.png b/docs/work/guidance/_img/ALM_PT_Agile_WF_Feature.png new file mode 100644 index 00000000000..2b1150b2e41 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Agile_WF_Feature.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Agile_WF_Task.png b/docs/work/guidance/_img/ALM_PT_Agile_WF_Task.png new file mode 100644 index 00000000000..9700a4bf39e Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Agile_WF_Task.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Agile_WF_UserStory.png b/docs/work/guidance/_img/ALM_PT_Agile_WF_UserStory.png new file mode 100644 index 00000000000..5608181f859 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Agile_WF_UserStory.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Agile_WIT_Artifacts.png b/docs/work/guidance/_img/ALM_PT_Agile_WIT_Artifacts.png new file mode 100644 index 00000000000..3d207969991 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Agile_WIT_Artifacts.png differ diff --git a/docs/work/guidance/_img/ALM_PT_CMMI_WF_Bug.png b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Bug.png new file mode 100644 index 00000000000..2fe5f24e019 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Bug.png differ diff --git a/docs/work/guidance/_img/ALM_PT_CMMI_WF_Epic.png b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Epic.png new file mode 100644 index 00000000000..a9aeda2aae7 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Epic.png differ diff --git a/docs/work/guidance/_img/ALM_PT_CMMI_WF_Feature.png b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Feature.png new file mode 100644 index 00000000000..c1459367640 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Feature.png differ diff --git a/docs/work/guidance/_img/ALM_PT_CMMI_WF_Requirement.png b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Requirement.png new file mode 100644 index 00000000000..7d82ac8dfd1 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Requirement.png differ diff --git a/docs/work/guidance/_img/ALM_PT_CMMI_WF_Task.png b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Task.png new file mode 100644 index 00000000000..09f57f3746e Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_CMMI_WF_Task.png differ diff --git a/docs/work/guidance/_img/ALM_PT_CMMI_WIT_Artifacts.png b/docs/work/guidance/_img/ALM_PT_CMMI_WIT_Artifacts.png new file mode 100644 index 00000000000..6f00401c82d Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_CMMI_WIT_Artifacts.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Scrum_WF_Bug.png b/docs/work/guidance/_img/ALM_PT_Scrum_WF_Bug.png new file mode 100644 index 00000000000..a537493819c Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Scrum_WF_Bug.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Scrum_WF_Epic.png b/docs/work/guidance/_img/ALM_PT_Scrum_WF_Epic.png new file mode 100644 index 00000000000..cd2aa7942ef Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Scrum_WF_Epic.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Scrum_WF_Feature.png b/docs/work/guidance/_img/ALM_PT_Scrum_WF_Feature.png new file mode 100644 index 00000000000..97db2313360 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Scrum_WF_Feature.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Scrum_WF_PBI.png b/docs/work/guidance/_img/ALM_PT_Scrum_WF_PBI.png new file mode 100644 index 00000000000..9b2a6a9ad0b Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Scrum_WF_PBI.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Scrum_WF_Task.png b/docs/work/guidance/_img/ALM_PT_Scrum_WF_Task.png new file mode 100644 index 00000000000..475c6a4ba6a Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Scrum_WF_Task.png differ diff --git a/docs/work/guidance/_img/ALM_PT_Scrum_WIT_Artifacts.png b/docs/work/guidance/_img/ALM_PT_Scrum_WIT_Artifacts.png new file mode 100644 index 00000000000..68d58908535 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_Scrum_WIT_Artifacts.png differ diff --git a/docs/work/guidance/_img/ALM_PT_WITS_Shared.png b/docs/work/guidance/_img/ALM_PT_WITS_Shared.png new file mode 100644 index 00000000000..64d62281cde Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_WITS_Shared.png differ diff --git a/docs/work/guidance/_img/ALM_PT_WITS_TestExperience.png b/docs/work/guidance/_img/ALM_PT_WITS_TestExperience.png new file mode 100644 index 00000000000..7107009d285 Binary files /dev/null and b/docs/work/guidance/_img/ALM_PT_WITS_TestExperience.png differ diff --git a/docs/work/guidance/_img/IC665405.png b/docs/work/guidance/_img/IC665405.png new file mode 100644 index 00000000000..721f1aedcb8 Binary files /dev/null and b/docs/work/guidance/_img/IC665405.png differ diff --git a/docs/work/guidance/_img/IC667909.png b/docs/work/guidance/_img/IC667909.png new file mode 100644 index 00000000000..0fc122a97b4 Binary files /dev/null and b/docs/work/guidance/_img/IC667909.png differ diff --git a/docs/work/guidance/_img/IC667910.png b/docs/work/guidance/_img/IC667910.png new file mode 100644 index 00000000000..7b21c68b2b1 Binary files /dev/null and b/docs/work/guidance/_img/IC667910.png differ diff --git a/docs/work/guidance/_img/IC675707.png b/docs/work/guidance/_img/IC675707.png new file mode 100644 index 00000000000..0ae93e4c0ee Binary files /dev/null and b/docs/work/guidance/_img/IC675707.png differ diff --git a/docs/work/guidance/_img/IC697755.png b/docs/work/guidance/_img/IC697755.png new file mode 100644 index 00000000000..e54e5a478c1 Binary files /dev/null and b/docs/work/guidance/_img/IC697755.png differ diff --git a/docs/work/guidance/_img/IC697757.png b/docs/work/guidance/_img/IC697757.png new file mode 100644 index 00000000000..4e50c784b6c Binary files /dev/null and b/docs/work/guidance/_img/IC697757.png differ diff --git a/docs/work/guidance/_img/IC697761.png b/docs/work/guidance/_img/IC697761.png new file mode 100644 index 00000000000..af8bad188c7 Binary files /dev/null and b/docs/work/guidance/_img/IC697761.png differ diff --git a/docs/work/guidance/_img/IC757081.png b/docs/work/guidance/_img/IC757081.png new file mode 100644 index 00000000000..bf4077cb2eb Binary files /dev/null and b/docs/work/guidance/_img/IC757081.png differ diff --git a/docs/work/guidance/_img/IC757084.png b/docs/work/guidance/_img/IC757084.png new file mode 100644 index 00000000000..a71fff4413e Binary files /dev/null and b/docs/work/guidance/_img/IC757084.png differ diff --git a/docs/work/guidance/_img/IC757087.png b/docs/work/guidance/_img/IC757087.png new file mode 100644 index 00000000000..44f2029e06b Binary files /dev/null and b/docs/work/guidance/_img/IC757087.png differ diff --git a/docs/work/guidance/_img/IC793453.png b/docs/work/guidance/_img/IC793453.png new file mode 100644 index 00000000000..1ae6ef85514 Binary files /dev/null and b/docs/work/guidance/_img/IC793453.png differ diff --git a/docs/work/guidance/_img/IC795962.png b/docs/work/guidance/_img/IC795962.png new file mode 100644 index 00000000000..3e276f273ad Binary files /dev/null and b/docs/work/guidance/_img/IC795962.png differ diff --git a/docs/work/guidance/_img/agile-bug-form-state-reason.png b/docs/work/guidance/_img/agile-bug-form-state-reason.png new file mode 100644 index 00000000000..a6c4f0fda7c Binary files /dev/null and b/docs/work/guidance/_img/agile-bug-form-state-reason.png differ diff --git a/docs/work/guidance/_img/agile-bug-workflow.png b/docs/work/guidance/_img/agile-bug-workflow.png new file mode 100644 index 00000000000..72bf4ea3398 Binary files /dev/null and b/docs/work/guidance/_img/agile-bug-workflow.png differ diff --git a/docs/work/guidance/_img/agile-process-plan-wits.png b/docs/work/guidance/_img/agile-process-plan-wits.png new file mode 100644 index 00000000000..d389dc56844 Binary files /dev/null and b/docs/work/guidance/_img/agile-process-plan-wits.png differ diff --git a/docs/work/guidance/_img/agile-process-work-tracking-wits.png b/docs/work/guidance/_img/agile-process-work-tracking-wits.png new file mode 100644 index 00000000000..6769fab75bd Binary files /dev/null and b/docs/work/guidance/_img/agile-process-work-tracking-wits.png differ diff --git a/docs/work/guidance/_img/agile-task-form.png b/docs/work/guidance/_img/agile-task-form.png new file mode 100644 index 00000000000..920f1febb8c Binary files /dev/null and b/docs/work/guidance/_img/agile-task-form.png differ diff --git a/docs/work/guidance/_img/agile-test-case-form.png b/docs/work/guidance/_img/agile-test-case-form.png new file mode 100644 index 00000000000..2dfef21a23d Binary files /dev/null and b/docs/work/guidance/_img/agile-test-case-form.png differ diff --git a/docs/work/guidance/_img/cmmi-new-work-item-widget.png b/docs/work/guidance/_img/cmmi-new-work-item-widget.png new file mode 100644 index 00000000000..9492a139ce5 Binary files /dev/null and b/docs/work/guidance/_img/cmmi-new-work-item-widget.png differ diff --git a/docs/work/guidance/_img/cmmi-process-plan-wits.png b/docs/work/guidance/_img/cmmi-process-plan-wits.png new file mode 100644 index 00000000000..472dde3b41c Binary files /dev/null and b/docs/work/guidance/_img/cmmi-process-plan-wits.png differ diff --git a/docs/work/guidance/_img/cmmi-process-work-tracking-wits.png b/docs/work/guidance/_img/cmmi-process-work-tracking-wits.png new file mode 100644 index 00000000000..04ebc780596 Binary files /dev/null and b/docs/work/guidance/_img/cmmi-process-work-tracking-wits.png differ diff --git a/docs/work/guidance/_img/cmmi-quick-add-panel.png b/docs/work/guidance/_img/cmmi-quick-add-panel.png new file mode 100644 index 00000000000..6b313392e7c Binary files /dev/null and b/docs/work/guidance/_img/cmmi-quick-add-panel.png differ diff --git a/docs/work/guidance/_img/cmmi-requirement-form.png b/docs/work/guidance/_img/cmmi-requirement-form.png new file mode 100644 index 00000000000..ae59eb29526 Binary files /dev/null and b/docs/work/guidance/_img/cmmi-requirement-form.png differ diff --git a/docs/work/guidance/_img/cmmi-task-form.png b/docs/work/guidance/_img/cmmi-task-form.png new file mode 100644 index 00000000000..8192a6b6201 Binary files /dev/null and b/docs/work/guidance/_img/cmmi-task-form.png differ diff --git a/docs/work/guidance/_img/new-form-product-backlog-item.png b/docs/work/guidance/_img/new-form-product-backlog-item.png new file mode 100644 index 00000000000..d8fda5fda6e Binary files /dev/null and b/docs/work/guidance/_img/new-form-product-backlog-item.png differ diff --git a/docs/work/guidance/_img/open-process-template-manager.png b/docs/work/guidance/_img/open-process-template-manager.png new file mode 100644 index 00000000000..16dc3117869 Binary files /dev/null and b/docs/work/guidance/_img/open-process-template-manager.png differ diff --git a/docs/work/guidance/_img/process-template-manager.png b/docs/work/guidance/_img/process-template-manager.png new file mode 100644 index 00000000000..c692888d3d5 Binary files /dev/null and b/docs/work/guidance/_img/process-template-manager.png differ diff --git a/docs/work/guidance/_img/scrum-bug-workflow-header-form.png b/docs/work/guidance/_img/scrum-bug-workflow-header-form.png new file mode 100644 index 00000000000..2944d3f04b1 Binary files /dev/null and b/docs/work/guidance/_img/scrum-bug-workflow-header-form.png differ diff --git a/docs/work/guidance/_img/scrum-new-work-item-widget.png b/docs/work/guidance/_img/scrum-new-work-item-widget.png new file mode 100644 index 00000000000..6d3dfc91318 Binary files /dev/null and b/docs/work/guidance/_img/scrum-new-work-item-widget.png differ diff --git a/docs/work/guidance/_img/scrum-process-plan-wits.png b/docs/work/guidance/_img/scrum-process-plan-wits.png new file mode 100644 index 00000000000..123f6207336 Binary files /dev/null and b/docs/work/guidance/_img/scrum-process-plan-wits.png differ diff --git a/docs/work/guidance/_img/scrum-process-work-tracking-wits.png b/docs/work/guidance/_img/scrum-process-work-tracking-wits.png new file mode 100644 index 00000000000..5aa8452b997 Binary files /dev/null and b/docs/work/guidance/_img/scrum-process-work-tracking-wits.png differ diff --git a/docs/work/guidance/_img/scrum-task-form.png b/docs/work/guidance/_img/scrum-task-form.png new file mode 100644 index 00000000000..62e22f55271 Binary files /dev/null and b/docs/work/guidance/_img/scrum-task-form.png differ diff --git a/docs/work/guidance/_img/scrum-test-case-form.png b/docs/work/guidance/_img/scrum-test-case-form.png new file mode 100644 index 00000000000..92d606f7701 Binary files /dev/null and b/docs/work/guidance/_img/scrum-test-case-form.png differ diff --git a/docs/work/guidance/_img/tfs-vso-state-diagram-product-backlog-item.png b/docs/work/guidance/_img/tfs-vso-state-diagram-product-backlog-item.png new file mode 100644 index 00000000000..138cf6f4003 Binary files /dev/null and b/docs/work/guidance/_img/tfs-vso-state-diagram-product-backlog-item.png differ diff --git a/docs/work/guidance/agile-process-workflow.md b/docs/work/guidance/agile-process-workflow.md new file mode 100644 index 00000000000..5bbb2091995 --- /dev/null +++ b/docs/work/guidance/agile-process-workflow.md @@ -0,0 +1,331 @@ +--- +title: Agile process workflow | VSTS & TFS +description: How to guide for using the Agile process to track work using its work item types working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: d16d04fd-c073-45c0-b1b9-3724f0a7519b +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# Agile process work item types and workflow + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Teams use the work item types (WITs) provided with the Agile process to plan and track progress of software projects. Teams define user stories to manage the backlog of work and then, using the Kanban board, track progress by updating the status of those stories. + +<img src="_img/agile-process-plan-wits.png" alt="Agile process, WITs used to plan and track" style="border: 2px solid #C3C3C3;" /> + +To gain insight into a portfolio of features, scenarios, or user experiences, product owners and program managers can map user stories to features. When teams work in sprints, they define tasks which automatically link to user stories. + +Using the web portal or Microsoft Test Manager, testers can create and run test cases. Bugs and issues are used to track code defects and blocking issues. + +>[!NOTE] +><b>Feature availability: </b> Work item tracking forms and features available to you differ depending on whether you connect to the cloud or an on-premises Team Foundation Server (TFS), and whether you open the form from the web portal or Visual Studio Team Explorer. Forms and guidance provided in this topic reflect those available with the [new form experience](../process/new-work-item-experience.md) (VSTS and the web portal for TFS 2017 and later versions). +> +>If you connect to TFS 2015 or earlier versions, or open the form from Visual Studio Team Explorer, see [Add work items (TFS)](../backlogs/add-work-items-tfs.md). + + + +## Define user stories + +User stories define the applications, requirements, and elements that teams need to create. Product owners typically define and stack rank user stories. The team then estimates the effort and work to deliver the highest priority items. + +Create user stories from the quick add panel on the [product backlog page](../backlogs/create-your-backlog.md). From that page, you can also drag-and-drop items to reorder them or [map them to features](../backlogs/organize-backlog.md). + +<img src="_img/IC697757.png" alt="Web portal, Agile process, Quick add panel " style="border: 2px solid #C3C3C3;" /> + +Later, you can open each user story to provide more details and estimate the story points. + +![User story work item form ](../backlogs/_img/add-work-item-vsts-user-story-form.png) + +By defining the **Story Points**, teams can use the forecast feature and velocity charts to estimate future sprints or work efforts. By prioritizing the user stories on the backlog page (which is captured in the Stack Rank field), product owners can indicate which items should be given higher priority. + +Use the following guidance and that provided for [fields used in common across work item types](#definitions-in-common) when filling out the form. + +<table> +<thead> +<tr><th><p>Field/tab</p></th><th><p>Usage</p></th></tr> +</thead> +<tbody valign="top"> +<tr> + <td><p>[Description](../track/titles-ids-descriptions.md) </p></td> + <td><p>For user stories, provide enough detail for estimating how much work will be required to implement the story. Focus on who the feature is for, what users want to accomplish, and why. Don't describe how the feature should be developed. Do provide sufficient details so that your team can write tasks and test cases to implement the item.</p> + </td> +</tr> +<tr> + <td><p>[Acceptance Criteria](../track/titles-ids-descriptions.md) </p></td> + <td><p>Provide the criteria to be met before the bug or user story can be closed. Before work begins, describe the customer acceptance criteria as clearly as possible. Conversations between the team and customers to define the acceptance criteria will help ensure that your team understands your customers' expectations. The acceptance criteria can be used as the basis for acceptance tests so that you can more effectively evaluate whether an item has been satisfactorily completed.</p> + +</td> +</tr> +<tr> + <td><p>[Value Area](../track/planning-ranking-priorities.md)</p></td> + <td><p>The area of customer value addressed by the epic, feature, requirement, or backlog item. Values include:</p> + <ul> + <li> + <p> + <strong>Architectural </strong>: Technical services to implement business features that deliver solution + </p> + </li> + <li> + <p> + <strong>Business</strong>: Services that fulfill customers or stakeholder needs that directly deliver customer value to support the business (Default) + </p> + </li> + </ul> +</td></tr> +<tr> + <td width="20%"><p>[Story Points](../track/query-numeric.md)</p></td> + <td><p>Estimate the amount of work required to complete a user story using any numeric unit of measurement your team prefers.</p><p>Agile [velocity charts](../../report/guidance/team-velocity.md) and [forecast](../scrum/forecast.md) tools reference the values in this field. For additional guidance, see the [Estimating](https://msdn.microsoft.com/library/hh765979) white paper.</p></td></tr> +<tr> + <td><p>[Priority](../track/planning-ranking-priorities.md)</p> +</td> + <td><p>A subjective rating of the user story, feature, or requirement as it relates to the business. Allowed values are:</p><ul><li><p><strong>1</strong>: Product cannot ship without the feature.</p></li><li><p><strong>2</strong>: Product cannot ship without the feature, but it doesn't have to be addressed immediately.</p></li><li><p><strong>3</strong>: Implementation of the feature is optional based on resources, time, and risk.</p></li> +</ul> +</td> +</tr> +<tr> + <td><p>[Risk](../track/planning-ranking-priorities.md)</p></td> + <td><p>A subjective rating of the relative uncertainty around the successful completion of a user story. Allowed values are:</p><ul><li><p><strong>1 - High</strong></p></li><li><p><strong>2 - Medium</strong></p></li><li><p><strong>3 - Low</strong></p></li></ul></td> +</tr> + + +</tbody> +</table> + + +>[!TIP] +>Use the [Discussion section](../concepts/work-item-form-controls.md#discussion) to add and review comments made about the work being performed. This feature is only available from VSTS.   + +## Track progress + +As work progresses, you change the State field to update the status. Optionally, you can specify a reason. The state and reason fields appear on the work item form in the header area. + +<img src="_img/agile-bug-form-state-reason.png" alt="Bug work item form, header area" style="border: 2px solid #C3C3C3;" /> + + +### Agile workflow states + +By updating the workflow, teams know which items are new, in progress, or completed. Most WITs support transition both forward and backward from each workflow state. These diagrams show the main progression and regression states of the user story, bug, and task WITs. + + +> [!div class="mx-tdBreakAll"] +> |User Story |Bug |Task | +> |-------------|----------|---------| +> |<img src="_img/ALM_PT_Agile_WF_UserStory.png" title="User Story workflow states, Agile process " alt="User Story workflow states, Agile process" /> |<img src="_img/agile-bug-workflow.png" title="Bug workflow states, Agile process" style="padding-left:20px;" alt="Bug workflow states, Agile process" /> |<img src="_img/ALM_PT_Agile_WF_Task.png" title="Task workflow states, Agile process " style="padding-left:20px;" alt="Task workflow states, Agile process" />| + + + +A typical workflow progression for a user story follows: + +- The product owner creates a user story in the **New** state with the default reason, **New user story** +- The team updates the status to **Active** when they decide to complete the work during the sprint +- A user story is moved to **Resolved** when the team has completed all its associated tasks and unit tests for the story pass +- A user story is moved to the **Closed** state when the product owner agrees that the story has been implemented according to the Acceptance Criteria and acceptance tests pass. + + +### Update status with Kanban or task boards + +Teams can use the [Kanban board](../kanban/kanban-basics.md) to update the status of requirements, and the [sprint task board](../scrum/task-board.md) to update the status of tasks. Dragging items to a new state column updates both the State and Reason fields. + +![Track progress on the Kanban board](../kanban/_img/ALM_CC_MoveCard.png) + +You can customize the Kanban board to support additional [swim lanes](../kanban/expedite-work.md) or [columns](../kanban/add-columns.md). For additional customization options, see [Customize your work tracking experience](#customize-work-tracking). + + + +## Map user stories to features + +When you manage a suite of products or user experiences, you might want to view the scope and progress of work across the product portfolio. You can do this by [defining features](../backlogs/define-features-epics.md) and [mapping user stories to features](../backlogs/organize-backlog.md). + +Using portfolio backlogs, you can [drill down from one backlog to another](../scale/portfolio-management.md) to view the level of detail you want. Also, you can use portfolio backlogs to view a rollup of work in progress across several teams when you [setup a hierarchy of teams](../scale/multiple-teams.md). + +## Define tasks + +When your team manages their work in sprints, they can use the [sprint backlog page](../scrum/sprint-planning.md) to break down the work to be accomplished into distinct tasks. + +![Sprint backlog, add task](_img/IC697761.png) + +Name the task and estimate the work it will take. + +<img src="_img/agile-task-form.png" alt="Agile task work item form" style="border: 2px solid #C3C3C3;" /> + +Using Agile processes, teams forecast work and define tasks at the start of each sprint, and each team member performs a subset of those tasks. Tasks can include development, testing, and other kinds of work. For example, a developer can define tasks to implement user stories, and a tester can define tasks to write and run test cases. + +When teams estimate work using hours or days, they define tasks and the **Remaining Work** and **Activity** (optional) fields. + +<table><thead> +<tr><th><p>Field/tab</p></th><th><p>Usage</p></th></tr></thead> +<tbody valign="top"> +<tr> + <td><p>[Original Estimate](../track/query-numeric.md)</p></td> + <td><p>The amount of estimated work required to complete a task. Typically, this field doesn't change after it is assigned.</p> +<p>You can specify work in hours or in days. There are no inherent time units associated with this field.</p> +</td> +</tr> + +<tr> + <td width="18%"><p>[Remaining Work](../track/query-numeric.md)</p></td> + <td><p>The amount of work remaining to complete a task. As work progresses, update this field. It's used to calculate [capacity charts](../scale/capacity-planning.md), the [sprint burndown chart](../scrum/sprint-burndown.md), and the following (TFS only) reports: [Burndown and Burn Rate](https://msdn.microsoft.com/library/dd380678.aspx), [Remaining Work](https://msdn.microsoft.com/library/dd380673.aspx), and [Status on All Iterations](https://msdn.microsoft.com/library/dd380706.aspx).</p><p>If you divide a task into subtasks, specify hours for the subtasks only. You can specify work in any unit of measurement your team chooses.</p></td></tr> + + + +<tr> + <td><p>[Completed Work](../track/query-numeric.md) </p></td> + <td><p>The amount of work spent implementing a task.</p></td></tr> +<tr> + <td><p>[Activity](../track/query-numeric.md) </p></td> + <td><p>Select the type of activity this task represents when your team estimates sprint capacity by activity.</p></td></tr> +<tr> + <td><p>[Integrated in Build](../track/build-test-integration.md)</p></td> + <td><p>Product build number that incorporates the code or fixes a bug.</p></td> + +</tr></tbody> +</table> + + +If you use [Microsoft Project](../office/create-your-backlog-tasks-using-project.md) to assign resources and track a schedule, you can update these fields using Project. + +## Track test progress + + +### Test user stories + +From the web portal or Test Manager, you can [create test cases that automatically link to a user story or bug](../../manual-test/getting-started/create-test-cases.md). Or, you can link a user story to a test case from the ![Links tab icon](../backlogs/_img/icon-links-tab-wi.png) (links tab). + +![Test plan web portal](_img/IC793453.png) + +The test case contains a number of fields, many of which are automated and integrated with Test Manager and the build process. For a description of each field, see [Query based on build and test integration fields](../track/build-test-integration.md). + +<img src="_img/agile-test-case-form.png" alt="Test case form" style="border: 2px solid #C3C3C3;" /> + +The ![Links tab icon](../backlogs/_img/icon-links-tab-wi.png) (links tab) captures the links to user stories and bugs in a test case. By linking user stories and bugs to test cases, the team can track the progress made in testing each item. By defining these links, you support information that appears in the [Stories Overview Report](../../report/sql-reports/stories-overview-report-agile.md) report. + +### Track code defects + +You can [create bugs from the web portal web portal, Visual Studio, or when testing with Test Manager](../backlogs/manage-bugs.md). + + +[!INCLUDE [temp](../_shared/common-work-item-fields.md)] + + +## Related notes + +[!INCLUDE [temp](../_shared/create-team-project-links.md)] + +[!INCLUDE [temp](../_shared/customize-work-tracking.md)] + + +### Track issues + +Issues are used to track events that may block progress or shipping a user story. Bugs, on the other hand, are used to track code defects. You can add an issue from the [New work item widget](../../report/widget-catalog.md#new-work-item-widget) added to a [team dashboard](../../report/dashboards.md), or from the **New** menu on the Queries page. + +![Add work item from a New work item widget](../../_img/alm-feature-new-work-item-widget.png) + +Work items you add from the widget are automatically scoped to your [team's default area and iteration paths](../scale/set-team-defaults.md). To change the team context, see [Switch team context](../how-to/switch-team-context-work.md). + +### Track business value +You can use the Priority field to differentiate the value of various stories. Or, you can add a custom field to the User Story WIT that tracks the relative value of stories. To learn how, see [Customize a field for a process](../process/customize-process-field.md). + + +### Backlog list order + +The [Stack Rank](../track/planning-ranking-priorities.md) field is used to track the relative ranking of user stories, however by default it doesn't appear on the work item form. The sequence of items on the backlog page is determined according to where you have [added the items or moved the items on the page](../backlogs/create-your-backlog.md#move-items-priority-order). As you drag items, a background process updates this field. + + + + +### Links control, client work item form + +Work item forms displayed in a client and the web portal for TFS 2015 and earlier versions display link tabs and link control restrictions as described in the following table. + +<table> +<thead> +<tr> +<th><p>Tab name</p></th> +<th><p>Work item type</p></th> +<th><p>Link restrictions</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>All Links</strong></p></td> +<td><p>User story</p> +<p>Bug</p> +<p>Feedback Request</p> +<p>Task</p> +<p>Test Case</p></td> +<td><ul> +<li><p>No restrictions.</p></li> +</ul> +<p></p></td> +</tr> +<tr> +<td><p><strong>Implementation</strong></p></td> +<td><p>User story</p> +<p>Task</p></td> +<td><ul> +<li><p>Allows only <strong>Parent</strong> and <strong>Child</strong> links between user stories and tasks.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul> +<p></p></td> +</tr> +<tr> +<td><p><strong>Links</strong></p></td> +<td><p>Issue</p> +<p>Shared steps</p> +<p></p></td> +<td><ul> +<li><p>No restrictions.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Links</strong></p></td> +<td><p>Code Review Request</p></td> +<td><ul> +<li><p>Allows only <strong>Parent</strong> and <strong>Child</strong> links to Code Review Response work items.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul> +<p></p></td> +</tr> +<tr> +<td><p><strong>Stories</strong></p></td> +<td><p>Feedback Response</p></td> +<td><ul> +<li><p>Allows only <strong>Related</strong> links to user stories.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Storyboards</strong></p></td> +<td><p>User Story</p></td> +<td><ul> +<li><p>Allows only <strong>Storyboard</strong> links.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Test Cases</strong></p></td> +<td><p>User story</p> +<p>Bug</p></td> +<td><ul> +<li><p>Allows only <strong>Tested By</strong> links.</p></li> +<li><p>Allows links only to test cases.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Tested User Stories</strong></p></td> +<td><p>Test case</p></td> +<td><ul> +<li><p>Allows only <strong>Tests</strong> links.</p></li> +<li><p>Allows links only to user stories.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +</tbody> +</table> + + + diff --git a/docs/work/guidance/agile-process.md b/docs/work/guidance/agile-process.md new file mode 100644 index 00000000000..8203e4234ae --- /dev/null +++ b/docs/work/guidance/agile-process.md @@ -0,0 +1,211 @@ +--- +title: Agile process template for VSTS & TFS +description: Agile process objects used to plan and track work, monitor progress, and trends when connecting to Visual Studio Team Services (VSTS) or Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 28e9cb42-f049-45eb-a2d8-f7a3b93471b8 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + + +# Agile process + +<b>VSTS | TFS 2017 | TFS 2015 | TFS 2013</b> + +The Agile process supports the following work item types (WITs) to plan and track work, tests, feedback, and code review. With different WITs you can track different types of work—such as features, user stories, and tasks. These artifacts are created when you create a team project using the Agile process. They are based on Agile principles and values. + +<img src="_img/agile-process-work-tracking-wits.png" alt="Agile process work item types" style="border: 2px solid #C3C3C3;" /> + +In addition to the WITs, teams have access to a set of shared work item queries to track information, analyze progress, and make decisions. + +>[!NOTE] +><b>Feature availability:</b> From the cloud-based VSTS, you'll always have access to the latest version of the Agile process, [which you can also customize](../process/customize-process.md). If you connect to an on-premises Team Foundation Server (TFS), the latest version of the Agile process uploads automatically when you install or upgrade to the latest version of TFS. You can [customize team projects](../customize/customize-work.md) and use the [Process Template Manager](manage-process-templates.md) to upload and download process templates. +> +>The following WITs are available as follows: Epic, TFS 2015 and later versions; +>Shared Parameters, TFS 2013.2 and later versions; +>and Test Plan and Test Suite, TFS 2013.3 and later versions. +> +>Additional artifacts, such as [SQL Server reports](#reports) and [SharePoint dashboards](#dashboards), are only available when you connect to a team project from an on-premises Team Foundation Server (TFS). Other resource requirements apply. + + +## Plan and track work + +You build your project plan by creating a backlog of user stories that represent the work you want to develop and ship. You track bugs, tasks, and blocking issues using the bug, task, and issue WITs. To support portfolio management, teams create features and epics to view a roll up of user stories within or across teams. For details about using Agile WITs, see [Agile process work item types and workflow](agile-process-workflow.md). + +The essential flow for getting started is as shown. To get started using Scrum or Kanban tools, see [Get started with Agile tools to plan and track work](../overview.md). + +[![Define stories](../_img/gs-planning-define-stories.png)](../backlogs/create-your-backlog.md)[![Organize backlog](../_img/gs-planning-organize-backlog.png)](../backlogs/organize-backlog.md)[![Manage bugs](../_img/gs-planning-manage-bugs.png)](../backlogs/manage-bugs.md)[![Manage issues](../_img/gs-planning-manage-issues.png)](../backlogs/manage-issues-impediments.md) + +>[!NOTE] +>A work item is a database record that contains the definition, assignment, priority, and state of work. Work item types define the template of fields, workflow, and form for each type. Work items can be linked to each other to support tracking dependencies, roll up of work, and reports. + + + +<a id="shared-queries"></a> +### List work items using queries + +You can manage your workload more effectively by frequently reviewing the status of user stories and tasks. You can use the shared work item queries to list work items for a current sprint or the product backlog. + +![Agile work item queries](_img/IC667910.png) + +[Descriptions of predefined queries](#predefined-queries) are listed later in this topic. + +You can open these queries from the **Work/Queries** page in the web portal or from the **Work Items** page in Team Explorer. You can modify a query using the [query editor to apply different filter criteria](../track/using-queries.md). Also, you can [add queries to team dashboards](../../report/dashboards.md). + +From Team Explorer, you can open any [work item query in Excel](../office/bulk-add-modify-work-items-excel.md) to perform bulk edits. + + +[!INCLUDE [temp](../_shared/quick-tips-shared-query.md)] + + +## Monitor progress + +All processes—Agile, Scrum, and CMMI—support [building status and trend charts and dashboards](../../report/overview.md). In addition, several charts are automatically built based on the Agile tools you use. These charts display within the web portal. + +### Create light-weight charts +To get started, you can open a shared query and create a chart based on your tracking interests. Chart types include status—pie, bar, column, stacked bar, and pivot—and trend—stacked area, line, and area—charts. + +[![Edit query](../../report/_img/gs-chart-query.png)](../track/using-queries.md)[![Create chart](../../report/_img/gs-chart-create.png)](../../report/charts.md)[![Manage bugs](../../report/_img/gs-chart-add-dashboard.png)](../../report/add-charts-to-dashboard.md) + +[!INCLUDE [temp](../_shared/powerbi-reports-links.md)] + +<a id="reports"></a> +###SQL Server reports (TFS) + +If you connect to an on-premises TFS, you can access the following Agile process reports. For these reports to be useful, [teams must perform certain activities,](../../report/admin/review-team-activities-for-useful-reports.md) such as define build processes, link work items, and update status or remaining work. + +To access these reports, your team project collection and the team project must be configured with SQL Server Analysis Services and Reporting Services. If you need to add reporting services or update reports to the latest versions, see [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md). + + +<a id="dashboards"></a> +### SharePoint portal dashboards (TFS) + +If you connect to an on-premises TFS, you can access Agile process dashboards displayed through SharePoint. These dashboards display project data, support investigation tasks, and help teams to perform common tasks quickly. The following dashboards support the display of web access parts for listing work items and reports that were built in the Analysis Services cube. + + +To use [dashboards](../../report/sharepoint-dashboards/project-portal-dashboards.md) your team project must have a [project portal configured and the project portal must point to a SharePoint site](../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md). + + +##Related notes + +[!INCLUDE [temp](../_shared/create-team-project-links.md)] + + +<a id="predefined-queries" /> +###Agile process predefined queries + +#### Product backlog and feedback queries + +Product owners can use the shared queries that are defined in the following table to plan and track user stories that compose the product backlog. + +<table> +<thead> +<tr> +<th><p>Shared query</p></th> +<th><p>Description</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>Product Backlog</p></td> +<td><p>Provides a tree list of all user stories that are in a New, Active or Resolved state and sorts them by rank.</p></td> +</tr> +<tr> +<td><p>Product Planning</p></td> +<td><p>Provides a flat list of all user stories that are not in a Removed state, and have not been closed in the last 90 days.</p></td> +</tr> +<tr> +<td><p>Feedback</p></td> +<td><p>Lists all feedback responses that are in an Active state.</p></td> +</tr> +</tbody> +</table> + +#### Iteration planning queries + +The following table describes the shared queries that are listed under the **Current Iteration** folder. These queries find work items that are assigned to a specified iteration. As you plan additional iterations, you can modify these queries to specify a different iteration and then save them to additional folders that you create, such as **Iteration 2** or **Iteration 3**. + +The project administrator for each team project [defines area and iteration paths](../customize/set-area-paths.md) for that project so that the team can track progress by those designations. + +<table> +<thead> +<tr> +<th><p>Shared query</p></th> +<th><p>Description</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>Active Bugs</p></td> +<td><p>Lists all active bugs and sorts them by rank, priority, and severity.</p></td> +</tr> +<tr> +<td><p>Active Tasks</p></td> +<td><p>Lists all active tasks and sorts them by rank, priority, and severity.</p></td> +</tr> +<tr> +<td><p>Bug Triage</p></td> +<td><p>Lists all active bugs that are not assigned to a team member.</p> +<p>The [Triage Workbook references](https://msdn.microsoft.com/library/dd380707.aspx) this query. </p></td> +</tr> +<tr> +<td><p>Completed Tasks</p></td> +<td><p>Lists all tasks that have been closed and sorts them by rank, priority, and severity.</p></td> +</tr> +<tr> +<td><p>Iteration Backlog</p></td> +<td><p>Lists all user stories and their linked tasks and sorts the stories by rank and priority.</p></td> +</tr> +<tr> +<td><p>Open Issues</p></td> +<td><p>Lists all issues under the specified iteration path that are not closed and any tasks that are linked to the issues and then sorts the issues by rank and priority.</p> +<p>The [Issues Workbook](https://msdn.microsoft.com/library/dd380707.aspx) references this query. </p></td> +</tr> +<tr> +<td><p>Open Test Cases</p></td> +<td><p>Lists all test cases that are not closed and sorts them by priority.</p></td> +</tr> +<tr> +<td><p>Open User Stories</p></td> +<td><p>Lists all active user stories and sorts them by their stack rank.</p></td> +</tr> +<tr> +<td><p>Resolved Bugs</p></td> +<td><p>Lists all resolved bugs and sorts them by rank, priority, and severity.</p></td> +</tr> +<tr> +<td><p>User Stories</p></td> +<td><p>Lists all user stories that are not closed and sorts them by priority and then ID,</p></td> +</tr> +<tr> +<td><p>User Stories without Test Cases</p></td> +<td><p>Lists all user stories that do not have a link to a test case. Stories are sorted by ID.</p></td> +</tr> +</tbody> +</table> + + +<blockquote style="font-size: 13px"><b>Tip: </b>Queries listed under the Current Iteration folder do not automatically update when a new iteration becomes current. The current iteration is based on the dates that you [assign to your sprint schedules](../scrum/define-sprints.md). You must manually update the iteration path of each query to have it point to the iteration path that corresponds to the current iteration. Or, you can edit the shared query to [use the **@CurrentIteration** macro](../track/query-by-date-or-current-iteration.md). </blockquote>   + + +#### Find tasks with summary values + +The **Work Items With Summary Values** shared query, which is located in the **Troubleshooting** folder, lists all tasks that have child tasks and that contain non-zero values in the Remaining Work or Completed Work fields. This query is designed to find tasks that report work effort that is already accounted for in their child tasks. For the hours to be counted only once, summary tasks should not be assigned any hours. For more information, see [Address inaccuracies published for summary values](https://msdn.microsoft.com/library/dd997572.aspx). + +### Workbooks (TFS) + +You can use the following Excel workbooks to review open issues and to rank and assign untriaged work items. Each workbook references a shared query. + +- The [Issues workbook](https://msdn.microsoft.com/library/dd380707.aspx) uses the Open Issues shared query. +- The [Triage workbook](https://msdn.microsoft.com/library/dd380707.aspx) uses the Bug Triage shared query. + +<blockquote style="font-size: 13px"><b>Feature availability: </b>Workbooks are only available when you connect to an on-premises TFS that's been configured with a SharePoint portal. +</blockquote>   + + +Because these queries support workbooks, if you change these queries, it will affect those workbooks that use them. + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] \ No newline at end of file diff --git a/docs/work/guidance/changes-to-process-templates.md b/docs/work/guidance/changes-to-process-templates.md new file mode 100644 index 00000000000..3a18d6b4083 --- /dev/null +++ b/docs/work/guidance/changes-to-process-templates.md @@ -0,0 +1,294 @@ +--- +title: Changes made to process templates | VSTS & TFS +description: Summary of changes made to Agile, Scrum, and CMMI process templates to support updating existing team projects after a TFS upgrade +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 1541C32C-FD7A-4415-A282-06DF14D1F688 +ms.manager: douge +ms.author: kaelli +ms.date: 02/21/2017 +--- + +#Changes made to process templates + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +>[!NOTE] +>This topic describes changes made to the core system processes—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md) with updates made to the on-premises Team Foundation Server (TFS). These processes are available from both VSTS and TFS. +> +>Team projects hosted on VSTS [update automatically with each service upgrade](/vsts/release-notes/index). Whereas, updates to team projects defined on an on-premises TFS may require running the Configure Feature Wizard after updating to a later version of TFS. + +To support the addition of new features, changes are introduced periodically to the core system processes or process template. A process—used by the Inheritance process model—determines the building blocks used to track work. A process template—used by the Hosted XML and On-premises XML process models—secifies an interdependent-related set of XML definition files that provide the building blocks and initial configuration for tracking work and other functional areas. For an overview of process models and customization options, see [Customize your work tracking experience](../customize/customize-work.md). + +If you've customized your team project and haven't upgraded TFS for a while, you may need to manually apply some changes to gain access to new features. Review the following table to determine which changes may apply to your situation. See [New features added when you update TFS](../customize/new-features-added.md) for a description of each feature added with the updates. + + + +<table> +<tbody valign="top"> +<tr> +<th width="15%"> +<p>TFS update</p> +</th> +<th> +<p>Changes introduced</p> +</th> +</tr> + +<tr> +<td> +<p>TFS 2017</p> +</td> +<td> +<p>Added the **WebLayout** section within the **FORM** section of all work item type (WIT) definitions. This section supports the new work item tracking experience in the web portal. It includes the **SystemControls** section and the new **LinksControlOptions** for managing link relationships. To learn more, see [New work item experience](../process/new-work-item-experience.md), [WebLayout and Control elements](../reference/weblayout-xml-elements.md), and [LinksControlOptions XML elements (Web form)](../reference/linkscontroloptions-xml-elements.md).</p> +<p>**Note**: When you upgrade an on-premises TFS to TFS 2017, the new web form is automatically available when you add team projects to a collection. For existing team projects, an admin is required to [enable the new form](../customize/manage-new-form-rollout.md). The reason the new form isn't automatically enabled for existing team projects is to prevent overwriting customizations made to existing WIT definitions.</p> +</td> +</tr> +<tr> +<td> +<p>TFS 2015</p> +</td> +<td> +<p>Added the Bugs Behavior feature, and enhancements to the Planning Tools and Portfolio Backlogs features. Several enhancements were made to support the [Scaled Agile Framework (SAFe)](../scale/scaled-agile-framework.md).</p> +<h4>The changes introduced support the following feature additions or enhancements:</h4> +<ul> +<li>Process template names have been changed to Agile, CMMI, and Scrum and have been repurposed as locked, system templates. You can export these templates for customization, but you can no longer overwrite these templates with your changes. </li> +<li>Second-level portfolio backlog, Epic, plus configurable option for teams to activate portfolio backlogs. </li> +<li>Team configurable option to choose which backlogs and portfolio backlogs are active. </li> +<li>Tracking Time Criticality of portfolio backlog items. Time Criticality captures how the business value decreases over time for a Feature or Epic. Higher values indicate that the item is inherently more time critical than those items with lower values. </li> +<li>Tracking the Value Area for portfolio backlog and backlog items. The Value Area differentiates items based on work performed to support Architectural requirements or Business needs. </li> +<li>Support [any-to-any workflow transitions](choose-process.md#workflow-states) on Agile boards. </li> +<li>Team configurable option to choose to track bugs on backlogs and boards either as requirements or as tasks. This necessitated adding fields to the bug WIT definition as well as adding a process configuration behavior. </li> +</ul> +<h4>The following changes were made to the default process templates: </h4> +<ul> +<li>WITs added: Epic</li> +<li>Miscellaneous WIT changes: +<ul> +<li>Feature: Added ```Time Criticality```, ```Effort```, and ```Value Area``` fields; added workflow transition from ```Active``` to ```Removed```</li> +<li>Bug: Added fields and workflow states to support the show bugs on backlog and boards team-configurable option</li> +<li>Minor layout changes to WIT forms to reflect additions of new fields; added ```ID``` field to all forms</li> +<li>Added WIT ```refname``` attribute to all WIT definitions</li> +</ul> +</li> +<li>Categories: Added Epic Category </li> +<li>Process configuration changes: +<ul> +<li>Added Epic portfolio backlog</li> +<li>Feature: Added ```Effort``` and ```Value Area``` fields to the default columns of the backlog </li> +<li>Requirement Category backlog: Added ```Value Area``` to the default columns of the backlog </li> +<li>Increased the default work item count limits on all boards to 1000</li> +<li>Added new properties to specify the default behavior for new teams </li> +</ul> </li> +<li>ProcessTemplate changes: Process template names no longer specify the version or year; Agile, CMMI, Scrum</li> +</ul> + +<h4>Changes made to Agile WIT definitions: </h4> +<ul> +<li>User Story: +<ul> +<li>Added ```Acceptance Criteria```, ```Priority``` and ```Value Area``` fields</li> +<li>Added transitions from ```Active``` to ```Removed``` and ```Resolved``` to ```Removed``` </li> +<li>Removed rules that populated ```Activated By``` and ```Activated Date``` fields when state=```Resolved``` </li> +</ul> +</li> +<li>Bug: +<ul> +<li> Added ```Activity```, ```Story Points```, ```Original Work```, ```Completed Work```, ```Remaining Work```, ```Severity```, and ```Value Area``` fields</li> +<li>Added ```New``` state and corresponding workflow transitions</li> +<li>Added several field rules to copy or set defaults during state transitions </li> +<li>Added ```Fixed and verified``` as a Resolved Reason </li> +</ul> +</li> +<li>Task: Added rule to empty ```Remaining Work``` field to support zeroing out the field when the State is set to ```Closed``` </li> +</ul> +<h4>Changes made to CMMI WIT definitions: </h4> +<ul> +<li>Requirement: +<ul> +<li>Added ```Acceptance Criteria```, ```Priority``` and ```Value Area``` fields</li> +<li>Added transitions from ```Active``` to ```Removed``` and ```Resolved``` to ```Removed``` </li> +<li>Removed rules that populated ```Activated By``` and ```Activated Date``` fields when state=```Resolved``` </li> +</ul> +</li> +<li>Bug: Added ```Size```, ```Discipline```, ```Original Work```, ```Completed Work```, and ```Value Area``` fields </li> +</ul> +<h4>Changes made to Scrum WIT definitions: </h4> +<ul> +<li>Product backlog item: Added ```Priority``` and ```Value Area``` fields; added transition from ```Committed``` to ```Removed``` </li> +<li>Bug: Added ```Activity```, ```Remaining Work```, ```Priority```, and ```Value Area``` fields; added rule to zero out ```Remaining Work``` when ```State=Done```. </li> +<li>Task: Added rule to require ```Remaining Work``` when ```State=In Progress```; removed ```Backlog Priority``` field from work item form </li> +</ul> + +</td> +</tr> + +<tr> +<td> +<p>TFS 2013.4</p> +</td> +<td> + +<h4>The following changes were made to the WIT definitions: </h4> +<ul> +<li>Scrum - Bug and Product backlog item: Removed the ```Backlog Priority``` field</li> +<li>Agile - Bug: Added the ```Story Points``` field; User Story: Removed the ```Stack Rank``` field </li> +<li>CMMI: Added the ```Size``` field to the Bug definition. Removed the ```Stack Rank``` field from the Requirement definition.</li> +</ul> +</td> +</tr> +<tr> +<td> +<p>TFS 2013.3</p> +</td> +<td> +<p>Added support for the Test Plan and Test Suite feature to support customization and tracking of these items similar to other work item types. </p> +<h4>The following changes were made to the default process templates: </h4> +<ul> +<li>WITs added: Test Plan and Test Suite </li> +<li>Categories added: Test Plan Category and Test Suite Category</li> +<li>Category updates: Added Test Plan and Test Suite to the Hidden Types Category</li> +</ul> +</td> +</tr> +<tr> +<td> +<p>TFS 2013.2</p> +</td> +<td> +<p>Added support for the Shared Parameters feature which allows you to [run tests with different data](../../manual-test/repeat-test-with-different-data.md). </p> +<h4>The following changes were made to the default process templates: </h4> +<ul> +<li>WITs added: Shared Parameter</li> +<li>Categories added: Shared Parameter Category </li> +<li>Category updates: Added Shared Parameter to the Hidden Types Category </li> +</ul> +</td> +</tr> +<tr> +<td> +<p>TFS 2013 RTM</p> +</td> +<td> +<p>Added the Portfolio Backlog feature and changes to simplify process configuration management. </p> +<h4>The following changes were made to the default process templates: </h4> +<ul> + +<li>WITs added: Feature</li> +<li>Categories added: Feature Category </li> +<li>Process configuration changes: Replaced AgileConfiguration and CommonConfiguration with a single file, [ProcessConfiguration](../reference/process-configuration-xml-element.md), supports these additional features: portfolio backlogs, color assignment to WITs, tags added to the default columns on all backlog pages. </li> +<li>Build changes: Removed the build templates from the build plug-in. You now access build templates through the user interface <a href="https://msdn.microsoft.com/library/dd647547(v=vs.120).aspx">Use the Default Template for your build process</a>. </li> +<li>Reporting Services updates: Backlog Overview (Scrum), <a href="https://msdn.microsoft.com/library/dd380648.aspx">Stories Overview</a> and <a href="https://msdn.microsoft.com/library/dd380641.aspx">Stories Progress</a> (Agile), and <a href="https://msdn.microsoft.com/library/ee461517.aspx">Requirements Overview</a> and <a href="https://msdn.microsoft.com/library/ee461582.aspx">Requirements Progress</a> (CMMI). These updates reflect changes required with the introduction of the Feature portfolio backlog work item type as described in this blog post: <a href="http://blogs.msdn.com/b/visualstudioalm/archive/2013/10/22/update-your-overview-and-progress-reports-to-support-the-portfolio-backlogs.aspx">Update your Overview and Progress reports to support the Portfolio backlogs</a>. +<p>To update your team project with the latest reports, see [Upload reports to a team project](../../Report/admin/upload-reports.md).</p> +</li> +</ul> +</td> +</tr> +<tr> +<td> +<p>TFS 2012.1</p> +</td> +<td> +<p>Added the Portfolio Backlog feature and introduced changes to support Planning Tools. </p> +<h4>Changes to WIT definitions to support status updates via Kanban and task boards</h4> +<p>Each of the default process templates that TFS provides was updated to support additional regressive transitions. These transitions, shown in red in the following illustration, support moving items back to the backlog when they were incorrectly set to done or resolved. Now when you inadvertently drag a work item on the Kanban board or the task board to a resolved or closed state, you can drag it back to an earlier workflow state.</p> +<p>The following work item types now support any-to-any workflow transitions:</p> + +<ul> +<li>Visual Studio Scrum 2.1: Bug, Product Backlog Item, Task</li> +<li>MSF Agile 6.1: Bug, Task, User Story</li> +<li>MSF Scrum 6.1: Bug, Task, Requirement</li> +</ul> + +![State diagram for Product Backlog Item](_img/tfs-vso-state-diagram-product-backlog-item.png) + +<p>To apply the changes to your existing team projects, you need to replace the <strong>WORKFLOW</strong> sections defined for each of the updated work item types with the new definitions. You can do this by modifying the work item type definition. See [Design the Workflow](../reference/change-workflow-wit.md) and [Import, export, and manage Work Item Types](../reference/witadmin/witadmin-import-export-manage-wits.md +) .</p> +</td> +</tr> +<tr> +<td> +<p>TFS 2012 RTM</p> +</td> +<td> +<p>Added the Code Review, My Work, Feedback, Storyboarding, and Planning Tools features. </p> +<h4>The following changes were added to all default process templates: </h4> +<ul> +<li>WITs added: Code Review Request, Code Review Response, Feedback Request, and Feedback Response</li> +<li>WIT form changes: +<ul> +<li>Many work item forms have been updated to display the larger font for the ```Title``` field and a two column layout of tab groups </li> +<li> +<p>Maintained mnemonic support only for the following fields: ```Area Path, Assigned To, History, Iteration Path, State,``` and ```Title```. Mnemonics have been removed from all other fields within the type definitions.</p> +</li> +</ul> +</li> + +<li>Categories added: Code Review Request Category, Code Review Response Category, Feedback Request Category, Feedback Response Category, and Hidden Types Category</li> +<li>Process configuration: Added CommonConfiguration and AgileConfiguration definition files to support Agile planning tools, code review, feedback, and My Work.</li> +<li>Build plug-in: Added a new build process template. When you upgrade from earlier versions of Team Foundation Server, you can continue to use [legacy build processes](https://msdn.microsoft.com/library/dd647548.aspx). +</li> +<li> +Process template plug-in: Added ```version``` element to support updating team projects when configuring new features. +</li> +<li> +Updated support files that contain forward links to process guidance content to point to the latest content. +</li> +</ul> + +<h4>The following changes were made to the Scrum process:</h4> +<ul> +<li> +Removed the Sprint type definition and All Sprints query, whose functionality has been replaced with the Agile planning tools. +</li> +<li> +<p>Removed the Backlog Priority field from the work item form for the Product Backlog type definition. This field is used in the background to track the relative priority of items displayed on the backlog pages. </p> +</li> +<li> +<p>The ```Removed``` state was added to the workflow state for the Bug, Product Backlog Item, and Task type definitions, which supports removing cut items from the backlog. </p> +</li> +<li> +<p>Added the ```Storyboards``` tab to the Product Backlog Item type definition.</p> +</li> +<li> +<p>Added the [Backlog Overview report](https://msdn.microsoft.com/library/dn641200.aspx) to the set of SQL Server Reporting Services reports, similar to the Agile [Stories Overview report](https://msdn.microsoft.com/library/dd380648.aspx).</p> +</li> +</ul> + +<h4>The following changes were made to the Agile process:</h4> +<ul> +<li> +<p>The ```New``` state was added as the initial state for User Stories and Tasks. This change was introduced to support transitioning User Stories and Tasks from a ```New``` state to an ```Active``` state. Without the ```New``` state, User Stories assigned to an iteration remain on the product backlog until they are resolved, which is not a desired or expected behavior. See <a href="https://msdn.microsoft.com/en-us/library/hh500412(v=vs.110).aspx">Update the Workflow for Agile Team Projects</a>. </p> +</li> +<li> +<p>To support removing cut work items from the backlog, the ```Removed``` state was added to the workflow state for the following work item types: User Story and Task. </p> +</li> +<li> +<p>Added the ```Storyboards``` tab to the User Story WIT.</p> +</li> +<li> +<p>The Product Planning and Iteration Backlog Excel workbooks have been removed. The Agile planning tools replace this functionality.</p> +</li> +</ul> +<h4>The following changes were made to the CMMI process:</h4> +<ul> +<li>Requirement: Added the ```Size``` field used in calculating team velocity and forecast; added the ```Storyboards``` tab </li> +<li>Shared queries: Added Corrective Action and Mitigation Action. </li> +</ul> +</td> +</tr> +</tbody> +</table> + + +##Related upgrade notes + +To update your existing team projects hosted on an on-premises TFS to access new features, [run the Configure Features wizard](../customize/configure-features-after-upgrade.md). In the event that you're upgrading from a much earlier version of TFS or you've customized your team project, you'll need to make some manual updates. + +See the following resources as they relate to updating your team project: + +- [Update a customized process template to access new features](../customize/update-customized-process-template.md) +- [Add features using a manual update process](../customize/add-features-manually.md) +- [Before you upgrade TFS](../customize/upgrade-tfs-2008-or-2010.md) +- [Additional configuration options](../customize/additional-configuration-options.md) +- [Upload reports to a team project](../../Report/admin/upload-reports.md) diff --git a/docs/work/guidance/choose-process.md b/docs/work/guidance/choose-process.md new file mode 100644 index 00000000000..2aad524c152 --- /dev/null +++ b/docs/work/guidance/choose-process.md @@ -0,0 +1,463 @@ +--- +title: Choose a process | VSTS & TFS +description: Choose a process or process template, work with team project artifacts in VSTS or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 702EE9E5-7AEA-49B6-9DB0-B12A882979C8 +ms.manager: douge +ms.author: kaelli +ms.date: 03/02/2017 +--- + +# Choose a process + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Anytime you create a team project, you must choose a process or process template based on the process model you use. +- A **process** defines the building blocks of the work item tracking system and supports the Inheritance process model for VSTS. This model supports customization of team projects through a WYSIWYG user interface. +- A **process template** defines the building blocks of the work item tracking system as well as other sub-systems you access through Team Services or an on-premises Team Foundation Server (TFS). It supports Hosted XML and On-premises XMl process models which support customization of team projects through the modification and import of XML definition files. + +To learn more about process models, see [Customize your work tracking experience](../customize/customize-work.md). + +[!INCLUDE [temp](../_shared/get-latest-process-templates.md)] + +The work tracking objects contained within the three default processes and process templates—Agile, CMMI, and Scrum—are the same and are summarized below. For simplicity, they are referred to as a "process." + + +<a id="template_intro"></a> + +## Agile, CMMI, and Scrum +The three default processes differ mainly in the work item types (WITs) they provide for planning and tracking work. +Scrum is the most light-weight and CMMI, which stands for Capability Maturity Model Integration, +provides the most support for formal processes and change management. + +Choose the process that provides the best fit for your team. + +>[!NOTE] +>**Feature availability**: Epics are supported on VSTS and TFS 2015 and later versions. Each team can choose the backlog levels that are active as described in [Select backlog navigation levels for your team](../customize/select-backlog-navigation-levels.md). + +<table valign="top" width="100%"> +<tbody> + <tr valign="top"> + <td width="40%"> + <p><b>Scrum</b></p> + <p> + Choose [Scrum](scrum-process.md) when your team practices Scrum. This process works great if you want to track product backlog items (PBIs) and + bugs on the Kanban board, or break PBIs and bugs down into tasks on the task board. + </p> + + <p>This process supports the Scrum methodology as defined by the [Scrum organization](https://www.scrum.org/).</p> + <p>Tasks support tracking remaining work only.</p> + </td> + + + <td width="60%"> + ![Scrum work item types](_img/ALM_PT_Scrum_WIT_Artifacts.png) + </td> + </tr> + <tr valign="top"> + <td> + <p><b>Agile</b></p> + <p>Choose [Agile](agile-process.md) when your team uses Agile planning methods, including Scrum, + and tracks development and test activities separately. This process works great if you want to track user stories and + (optionally) bugs on the Kanban board, or track bugs and tasks on the task board.</p> + + + + <p>You can learn more about Agile methodologies at the + <a href="http://www.agilealliance.org/">Agile Alliance</a>. + </p> + <p>Tasks support tracking Original Estimate, Remaining Work, and Completed Work.</p> + </td> + <td> + ![Agile work item types](_img/ALM_PT_Agile_WIT_Artifacts.png) + </td> + </tr> + + <tr valign="top"> + <td> + <p><b>CMMI</b></p> + <p>Choose [CMMI](cmmi-process.md) when your team follows more formal project methods + that require a framework for process improvement and an auditable record of decisions. With this process, + you can track requirements, change requests, risks, and reviews. + </p> + <p> + This process supports [formal change management activities](https://msdn.microsoft.com/library/ee461556.aspx). + Tasks support tracking Original Estimate, Remaining Work, and Completed Work. + </p> + </td> + <td> + ![CMMI work item types](_img/ALM_PT_CMMI_WIT_Artifacts.png) + </td> + </tr> +</tbody> +</table> + +If you need more than three backlog levels, you can add more based on the process model you use: +- **Inheritance**: [Customize your backlogs or boards for a process](../process/customize-process-backlogs-boards.md) +- **Hosted XML or On-premises XML**: [Add portfolio backlogs](../customize/add-portfolio-backlogs.md). + +<a id="main-distinctions"></a> +## Main distinctions among the default processes +The default processes are designed to meet the needs of most teams. +If your team has unusual needs and connects to an on-premises TFS, +you can customize a process and then create the team project. +Or, you can create a team project from a process and then customize the project. + +The following table summarizes the main distinctions between the WITs and states +used by the three default processes. + +<table valign="top"> +<tbody> + <tr> + <td width="31%"> + <b>Tracking area</b> + </td> + <td width="25%"> + <b>Scrum</b> + </td> + <td width="22%"> + <b>Agile</b> + </td> + <td width="22%"> + <b>CMMI</b> + </td> + </tr> + <tr> + <td> + Workflow states + </td> + <td> + <ul> + <li>New</li> + <li>Approved</li> + <li>Committed</li> + <li>Done</li> + <li>Removed</li> + </ul> + + </td> + <td> + <ul> + <li>New</li> + <li>Active</li> + <li>Resolved</li> + <li>Closed</li> + <li>Removed</li> + </ul> + + </td> + <td> + <ul> + <li>Proposed</li> + <li>Active</li> + <li>Resolved</li> + <li>Closed</li> + </ul> + + </td> + </tr> + <tr> + <td> + Product planning (see note 1) + </td> + <td> + <ul> + <li>Product backlog item</li> + <li>Bug (configurable)</li> + </ul> + </td> + <td> + <ul> + <li>User story</li> + <li>Bug (configurable)</li> + </ul> + + </td> + <td> + <ul> + <li>Requirement</li> + <li>Bug (configurable)</li> + </ul> + + </td> + </tr> + <tr> + <td> + Portfolio backlogs (2) + </td> + <td> + <ul> + <li>Epic</li> + <li>Feature</li> + </ul> + </td> + <td> + <ul> + <li>Epic</li> + <li>Feature</li> + </ul> + </td> + <td> + <ul> + <li>Epic</li> + <li>Feature</li> + </ul> + </td> + </tr> + <tr> + <td> + Task and sprint planning (3) + + </td> + <td> + <ul> + <li>Task</li> + </ul> + </td> + <td> + <ul> + <li>Task</li> + </ul> + </td> + <td> + <ul> + <li>Task</li> + </ul> + </td> + </tr> + <tr> + <td> + Bug backlog management (1) + </td> + <td> + <ul> + <li>Bug</li> + </ul> + </td> + <td> + <ul> + <li>Bug</li> + </ul> + </td> + <td> + <ul> + <li>Bug</li> + </ul> + </td> + </tr> + <tr> + <td> + Issue and risk management + </td> + <td> + <ul> + <li>Impediment</li> + </ul> + </td> + <td> + <ul> + <li>Issue</li> + </ul> + </td> + <td> + <ul> + <li>Issue</li> + <li>Risk</li> + <li>Review</li> + </ul> + </td> + </tr> +</tbody> +</table> + +**Notes:** + +1. You can add these WITs from the [product backlog](../backlogs/create-your-backlog.md) or [Kanban board](../kanban/kanban-basics.md). + The product backlog shows a single view of the current backlog of work that can be dynamically re-ordered and grouped. + Product owners can quickly prioritize work and outline dependencies and relationships. + + Also, each team can configure how they want [bugs to show up on their backlogs and boards](../customize/show-bugs-on-backlog.md). + +2. With portfolio backlogs you can define a hierarchy of backlogs to understand the scope of work across several teams and see how that work rolls up into broader initiatives. + Each team can configure which [portfolio backlogs appear for their use](../customize/select-backlog-navigation-levels.md). + +3. You can define tasks from the [sprint backlog and task board](../scrum/sprint-planning.md). + With capacity planning, teams can quickly determine if they are over or under capacity for a sprint. + + +<a id="workflow-states"></a> +### Workflow states, transitions, and reasons + +Workflow states support tracking the status of work as it moves from a new state to a closed or a done state. + +Each workflow consists of a set of states, the valid transitions between the states, and the reasons for transitioning the work item to the selected state. + +The following diagrams show the typical forward progression of +those WITs used to track work and code defects for the three default processes. +They also show some of the regressions to former states and transitions to removed states. +Each image shows only the default reason associated with the transition. + +<table valign="top"> +<tbody> + <tr > + <td width="33%"> + <b>Scrum</b> + </td> + <td width="33%"> + <b>Agile</b> + </td> + <td width="33%"> + <b>CMMI</b> + </td> + </tr> + <tr valign="top"> + <td> +<h4>Epic</h4> + ![Epic workflow states, Scrum process](_img/ALM_PT_Scrum_WF_Epic.png) + </td> + <td> +<h4>Epic</h4> + ![Epic workflow states, Agile process](_img/ALM_PT_Agile_WF_Epic.png) + + </td> + <td> +<h4>Epic</h4> + ![Epic workflow states, CMMI process](_img/ALM_PT_CMMI_WF_Epic.png) + + </td> + </tr> + <tr valign="top"> + <td> +<h4>Feature</h4> + ![Feature workflow states, Scrum process](_img/ALM_PT_Scrum_WF_Feature.png) + </td> + <td> +<h4>Feature</h4> + ![Feature workflow states, Agile process](_img/ALM_PT_Agile_WF_Feature.png) + + </td> + <td> +<h4>Feature</h4> + ![Feature workflow states, CMMI process](_img/ALM_PT_CMMI_WF_Feature.png) + + </td> + </tr> + <tr valign="top"> + <td> +<h4>Product backlog item</h4> + ![Product backlog item workflow states, Scrum process](_img/ALM_PT_Scrum_WF_PBI.png) + </td> + <td> +<h4>User story</h4> + ![User story workflow states, Agile process](_img/ALM_PT_Agile_WF_UserStory.png) + + </td> + <td> +<h4>Requirement</h4> + ![Requirement workflow states, CMMI process](_img/ALM_PT_CMMI_WF_Requirement.png) + + </td> + </tr> + <tr valign="top"> + <td> +<h4>Bug</h4> + ![Bug workflow states, Scrum process](_img/ALM_PT_Scrum_WF_Bug.png) + </td> + <td> +<h4>Bug</h4> + ![Bug workflow states, Agile process](_img/ALM_PT_Agile_WF_Bug.png) + + </td> + <td> +<h4>Bug</h4> + ![Bug workflow states, CMMI process](_img/ALM_PT_CMMI_WF_Bug.png) + + </td> + </tr> + <tr valign="top"> + <td> +<h4>Task</h4> + ![Task workflow states, Scrum process](_img/ALM_PT_Scrum_WF_Task.png) + </td> + <td> +<h4>Task</h4> + ![Task workflow states, Agile process](_img/ALM_PT_Agile_WF_Task.png) + </td> + <td> +<h4>Task</h4> + ![Task workflow states, CMMI process](_img/ALM_PT_CMMI_WF_Task.png) + </td> + </tr> +</tbody> +</table> + + +Most WITs used by Agile tools, ones that appear on backlogs and boards, support any-to-any transitions. You can update the status of a work item using the Kanban board or the task board by dragging it to its corresponding state column. + +You can change the workflow to support additional states, transitions, and reasons. To learn more, see [Customize your work tracking experience](../customize/customize-work.md). + + +<a id="removed-closed-done"></a> +### Removed, Closed, and Done states +When you change the state of a work item to Removed, Closed, or Done, the system responds like this: + +* **Closed** or **Done**: Work items in this state don't appear on the portfolio backlog and backlog pages. However, they do appear on the sprint backlog pages, Kanban board, and task board. Also, when you change the portfolio backlog view to show backlog items, for example, to view Features to Product Backlog Items, items in the closed and done state will appear. +* **Removed**: Work items in this state don't appear on any backlog or board. + +Work items are maintained in a team project as long as the team project is active. +Even if you set them to Closed, Done, or Removed, a record is kept in the data store. +You can use a record to create queries or reports. + +If you need to permanently delete work items, see [Remove or delete work items](../backlogs/remove-delete-work-items.md). + + +<a id="wits-all"></a> +## Work item types added to all processes +The following WITs are the same across all processes. + + ![Work item types used by MTM, My Work, and Feedback](_img/ALM_PT_WITS_Shared.png) + +Teams create and work with these types using the corresponding tool: + +* Test Plan, Test Suite, Test Case Shared Steps, and Shared Parameters: Microsoft Test Manger. +* Feedback Request and Feedback Response: Request feedback. +* Code Review Request and Code Review Response: My Work (from Team Explorer) and Code Review Request. + +Work items from these type definitions are not meant to be created manually and therefore are added to the Hidden Types category. +Work item types that are added to the Hidden Types category don't appear in the menus used to create new work items. + + +>[!NOTE] +>**Feature availability**: If you upgraded your team project from TFS 2013 or an earlier version to a later version of TFS, you might have to add WITs that didn't exist in the earlier versions. For more information, see [Configure features after a TFS upgrade](../customize/configure-features-after-upgrade.md). +> +>The following WITs were added with the indicated TFS version: +>- Shared Parameters added with TFS 2013.2 +>- Test Plan and Test Suite added with TFS 2013.3 + + +<a id="test-experience"></a> +### WITs that support the test experience +WITs that support the test experience and work with Test Manager and the TFS web portal are linked together using the link types shown in the following picture. + + ![Test management work item types](_img/ALM_PT_WITS_TestExperience.png) + +From the web portal or Test Manager, you can view which test cases are defined for a test suite, +and which test suites are defined for a test plan. +However, these objects aren't connected to each other through link types. +You can customize these WITs as you would any other WIT. +See [Customize work tracking objects to support your team's processes](../customize/customize-work.md). + +If you change the workflow for the test plan and test suite, you might need to update the process configuration as described here. For definitions of each test field, see [Query based on build and test integration fields](../track/build-test-integration.md). + +## Related notes +<a id="term-note"></a> + +You can customize a process before or after you create a team project that uses that project. The methods you use depend on the process model you use. To learn more, see [Customize your work tracking experience](../customize/customize-work.md). + +- [Upload/download process templates](manage-process-templates.md) +- [Changes made to process templates](changes-to-process-templates.md) +- [Configure features after a TFS upgrade](../customize/configure-features-after-upgrade.md) + + +If you have additional questions, search for answers or post a question in the [Team Foundation Server - Team Project and Work Item forum](http://social.msdn.microsoft.com/Forums/tfsworkitemtracking/threads). \ No newline at end of file diff --git a/docs/work/guidance/cmmi-process-workflow.md b/docs/work/guidance/cmmi-process-workflow.md new file mode 100644 index 00000000000..8e4c1f43bb8 --- /dev/null +++ b/docs/work/guidance/cmmi-process-workflow.md @@ -0,0 +1,552 @@ +--- +title: CMMI process work item and workflow | VSTS & TFS +description: How to guide for using the CMMI process work item types and workflow to track work in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: b5b7b488-3248-485c-b896-a2c6f824a219 +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# CMMI process work item types and workflow + + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Teams use the work item types (WITs) provided with the MSF for CMMI Process Improvement 2015 (CMMI) process to plan and track progress of software projects. Teams define requirements to manage the backlog of work and then, using the Kanban board, track progress by updating the status of requirements. + +<img src="_img/cmmi-process-plan-wits.png" alt="CMMI process, WITs used to plan and track" style="border: 2px solid #C3C3C3;" /> + +To gain insight into a portfolio of requirements, product owners can map requirements to features. When teams work in iterations, they define tasks that automatically link to requirements. + +Using Microsoft Test Manager and the web portal, testers create and run test cases and define bugs to track code defects. + +To support additional CMMI processes, teams can track change requests, risks, issues, and notes captured in review meetings. + +> [!NOTE] +> **Feature availability:** Work item tracking forms and features available to you differ depending on whether you connect to the cloud or an on-premises Team Foundation Server (TFS), and whether you open the form from the web portal or Visual Studio Team Explorer. Forms and guidance provided in this topic reflect those available with the [new form experience](../process/new-work-item-experience.md) (VSTS and the web portal for TFS 2017 and later versions). +> +> If you connect to TFS 2015 or earlier versions, or open the form from Visual Studio Team Explorer, see [Add work items (TFS)](../backlogs/add-work-items-tfs.md). + + +## Define requirements + +Create requirements from the quick add panel on the [product backlog page](../backlogs/create-your-backlog.md). Alternatively, you can bulk add requirements using [Excel](../office//bulk-add-modify-work-items-excel.md) or [Project](../office/create-your-backlog-tasks-using-project.md). + +<img src="_img/cmmi-quick-add-panel.png" alt="CMMI process, Quick add panel on the requirements backlog page" style="border: 2px solid #C3C3C3;" /> + + +Later, you can open each requirement to provide more details and estimate its size. + +![Requirement work item form](_img/cmmi-requirement-form.png) + +Requirements specify the functions and product elements that teams need to create. Product owners typically define and stack rank requirements on the product backlog page. The team then scopes the size of the effort to deliver the highest priority items. + +Use the following guidance and that provided for [fields used in common across work item types](#definitions-in-common) when filling out the form. For additional guidance, see [Plan a project](cmmi/guidance-plan-a-project-cmmi.md). + +<table> +<tbody valign="top"> + <tr> + <th width="22%">Field</th> + <th>Usage</th> + </tr> + <tr> + <td> + <p> + [Description](../track/titles-ids-descriptions.md) + </p> + </td> + <td> + <p>Provide enough detail for estimating how much work will be required to implement the requirement. Focus on who the requirement is for, what users want to accomplish, and why. Don't describe how the requirement should be developed. Do provide sufficient details so that your team can write tasks and test cases to implement the item.</p> + <p>In HTML fields, you can add rich text and images. </p> + <p> + + </p> + </td> + </tr> + <tr> + <td> + <p>[Impact Assessment](cmmi/guidance-requirements-field-reference-cmmi.md)</p> + </td> + <td> + <p>The customer impact of not implementing this requirement. You might include details from the Kano model about whether this requirement is in the surprise, required, or obvious categories. You capture this information in the rich-text HTML field which corresponds to Impact Assessment.</p> + <p> + + </p> + </td> + </tr> + <tr> + <td> + <p>[Requirement Type](cmmi/guidance-requirements-field-reference-cmmi.md) (Required) </p> + </td> + <td> + <p>The kind of requirement to implement. You can specify one of the following values: </p> + <ul> + <li> + <p> + <strong>Business Objective </strong> + </p> + </li> + <li> + <p> + <strong>Feature</strong> (default)</p> + </li> + <li> + <p> + <strong>Functional</strong> + </p> + </li> + <li> + <p> + <strong>Interface </strong> + </p> + </li> + <li> + <p> + <strong>Operational </strong> + </p> + </li> + <li> + <p> + <strong>Quality of Service </strong> + </p> + </li> + <li> + <p> + <strong>Safety </strong> + </p> + </li> + <li> + <p> + <strong>Scenario </strong> + </p> + </li> + <li> + <p> + <strong>Security</strong> + </p> + </li> + </ul> + </td> + </tr> + + +<tr> + <td><p>[Value area](../track/planning-ranking-priorities.md)</p></td> + <td><p>The area of customer value addressed by the epic, feature, requirement, or backlog item. Values include:</p> + <ul> + <li> + <p> + <strong>Architectural </strong>: Technical services to implement business features that deliver solution + </p> + </li> + <li> + <p> + <strong>Business</strong>: Services that fulfill customers or stakeholder needs that directly deliver customer value to support the business (Default) + </p> + </li> + </ul> +</td></tr> + + <tr> + <td> + <p> + [Size](../track/query-numeric.md) </p> + </td> + <td> + + + + <p>Estimate the amount of work required to complete a requirement using any numeric unit of measurement your team prefers. </p><p> By defining the **Size** for requirements, teams can use the Agile [velocity charts](../../report/guidance/team-velocity.md) and [forecast](../scrum/forecast.md) tools to estimate future iterations or work efforts. The Kanban [Cumulative Flow Diagram](../kanban/kanban-basics.md) references the values in this field. For additional guidance, see the [Estimating](https://msdn.microsoft.com/library/hh765979) white paper.</p> + </td> + </tr> +<tr> + <td><p>[Original Estimate](../track/query-numeric.md) </p></td> + <td><p>The amount of estimated work required to complete a task. Typically, this field doesn't change after it is assigned.</p> +<p>You can specify work in hours or in days. There are no inherent time units associated with this field.</p> +</td> +</tr> + +<tr> + <td><p>[Start Date/Finish Date](../track/query-by-date-or-current-iteration.md) </p></td> + <td><p>The target dates for when the work will start or finish. These fields are filled in by [Microsoft Project](../office/create-your-backlog-tasks-using-project.md) when you use it for scheduling.</p> +<p>You can specify work in hours or in days. There are no inherent time units associated with this field.</p> +</td> +</tr> + + + <tr> + <td> + <p> + [Priority](../track/planning-ranking-priorities.md) (Required)</p> + </td> + <td> + <p>A subjective rating of the requirement as it relates to the business. Allowed values are:</p> + <ul> + <li> + <p> + <strong>1</strong>: Product cannot ship without the item.</p> + </li> + <li> + <p> + <strong>2</strong>: (default) Product cannot ship without the item, but it doesn't have to be addressed immediately. </p> + </li> + <li> + <p> + <strong>3</strong>: Implementation of the item is optional based on resources, time, and risk. </p> + </li> + </ul> + <p> + + </p> + </td> + </tr> + <tr> + <td> + <p> + [Triage](../track/planning-ranking-priorities.md) (Required) </p> + </td> + <td> + <p>Indicates the type of triage decision that is pending for the work item. Use this field when the work item is in the Proposed state and specify one of the following values: <strong>Pending</strong> (default), <strong>More Info</strong>, <strong>Info Received</strong>, and <strong>Triaged</strong>.</p> + </td> + </tr> + <tr> + <td> + <p> + [Blocked](../track/planning-ranking-priorities.md)</p> + </td> + <td> + <p>Indicates whether a team member is prevented from making progress toward implementing a requirement or task or resolving a bug, change request, or risk. If an issue has been opened to track a blocking problem, you can create a link to the issue. You can specify <strong>Yes</strong> of <strong>No</strong>.</p> + </td> + </tr> + <tr> + <td> + <p> + [Committed](../track/planning-ranking-priorities.md) (Required) </p> + </td> + <td> + <p>Indicates whether the requirement is committed in the project or not. You can specify <strong>Yes</strong> or <strong>No</strong> (default).</p> + </td> + </tr> + + <tr> + <td> + <p> + [Integrated In](../track/build-test-integration.md) </p> + </td> + <td> + <p>Product build number that incorporates the requirement, change request, or fixes a bug.</p> + </td> + </tr> + + <tr> + <td> + <p> + [User Acceptance Test](cmmi/guidance-requirements-field-reference-cmmi.md) (Required) </p> + </td> + <td> + <p>The status of the user acceptance test for a requirement. You can specify one of the following values: </p> + <ul> + <li> +<p> + <strong>Pass</strong> +</p> + </li> + <li> +<p> + <strong>Fail</strong> +</p> + </li> + <li> +<p> + <strong>Not Ready</strong> (default)</p> + </li> + <li> +<p> + <strong>Ready</strong> +</p> + </li> + <li> +<p> + <strong>Skipped</strong> +</p> + </li> + <li> +<p> + <strong>Info Received</strong> +</p> + </li> + </ul> + <p>You specify Not Ready when the requirement is in the Active state, and you specify Ready when the requirement is in the Resolved state.</p> + </td> + </tr> + + + <tr> + <td> + <p> + [Subject Matter Experts](cmmi/guidance-requirements-field-reference-cmmi.md) + </p> + </td> + <td> + <p>The names of team members who are familiar with the customer area that this requirement represents.</p> + </td> + </tr> +</tbody> +</table> + + +>[!TIP] +>Use the [Discussion section](../concepts/work-item-form-controls.md#discussion) to add and review comments made about the work being performed. This feature is only available from VSTS. + + +## Track progress + +As work progresses, you change the State field to update the status. Optionally, you can specify a reason. The state and reason fields appear on the work item form in the header area. + +<img src="_img/agile-bug-form-state-reason.png" alt="Bug work item form, header area" style="border: 2px solid #C3C3C3;" /> + +### CMMI workflow states + +These diagrams show the main progression and regression states for the Requirement, Bug, and Task WITs. + +> [!div class="mx-tdBreakAll"] +> |Requirement |Bug |Task | +> |-------------|----------|---------| +> |<img src="_img/IC757081.png" title="Requirement workflow states, CMMI process" alt="Requirement workflow states, CMMI process" /> |<img src="_img/IC757084.png" title="Bug workflow states, CMMI process" alt="Bug workflow states, CMMI process" /> |<img src="_img/IC757087.png" title="Task workflow states, CMMI process" alt="Task workflow states, CMMI process" /> | + +The typical workflow progression for a requirement is: +- The product owner creates a requirement in the **Proposed** state with the default reason, **New requirement**. +- The product owner updates the status to **Active** when they begin work to implement it. +- The team updates the status to **Resolved** when code development is finished and system tests have passed. +- Lastly, the team or product owner moves the requirement to **Closed** when the product owner agrees that it has been implemented according to the Acceptance Criteria and passed all validation tests. + +### Update status with Kanban or task boards + +Teams can use the [Kanban board](../kanban/kanban-basics.md) to update the status of requirements, and the [sprint task board](../scrum/task-board.md) to update the status of tasks. Dragging items to a new state column updates both the State and Reason fields. + +<img src="../kanban/_img/ALM_CC_MoveCard.png" alt="Web portal, Track progress on the Kanban board" style="border: 2px solid #C3C3C3;" /> + +You can customize the Kanban board to support additional [swim lanes](../kanban/expedite-work.md) or [columns](../kanban/add-columns.md). For additional customization options, see [Customize your work tracking experience](#customize-work-tracking). + +## Map requirements to features + +hen you manage a suite of products or user experiences, you might want to view the scope and progress of work across the product portfolio. You can do this by [defining features](../backlogs/define-features-epics.md) and [mapping requirements to features](../backlogs/organize-backlog.md). + +Using portfolio backlogs, you can [drill down from one backlog to another](../scale/portfolio-management.md) to view the level of detail you want. Also, you can use portfolio backlogs to view a rollup of work in progress across several teams when you [setup a hierarchy of teams](../scale/multiple-teams.md). + +The feature work item contains similar fields provided for requirements and includes additional fields, as the following table describes. + + +## Define tasks + + +When your team manages their work in sprints, they can use the [sprint backlog page](../scrum/sprint-planning.md) to break down the work to be accomplished into distinct tasks. + +<img src="_img/IC697755.png" alt="Web portal, Add task link on a sprint backlog page" style="border: 2px solid #C3C3C3;" /> + +Name the task and estimate the work it will take. + +![CMMI Task work item form](_img/cmmi-task-form.png) + +When teams estimate work they define tasks and estimate the hours or days to complete tasks. Teams forecast work and define tasks at the start of an iteration, and each team member performs a subset of those tasks. Tasks can include development, testing, and other kinds of work. For example, a developer can define tasks to implement requirements, and a tester can define tasks to write and run test cases. By linking tasks to requirements and bugs, they see the progress made on these items. For additional guidance, see [Iteration activities](cmmi/guidance-iteration-activities.md). + +<table> +<thead> +<tr> +<th><p>Field</p></th> +<th><p>Usage</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p>[Task Type](cmmi/guidance-requirements-field-reference-cmmi.md) </p></td> +<td><p>Select the kind of task to implement from the allowed values:</p> +<ul> +<li><p><strong>Corrective Action</strong></p></li> +<li><p><strong>Mitigation Action</strong></p></li> +<li><p><strong>Planned</strong></p></li> +</ul></td> +</tr> +<tr> +<td><p>[Discipline](../track/query-numeric.md)</p></td> +<td><p>Select the discipline this task represents when your team estimates sprint capacity by activity.</p> +<ul> +<li><p><strong>Analysis</strong></p></li> +<li><p><strong>Development</strong></p></li> +<li><p><strong>Test</strong></p></li> +<li><p><strong>User Education</strong></p></li> +<li><p><strong>User Experience</strong></p></li> +</ul> +<p>This field is also used to calculate capacity by discipline. It is assigned to `type="Activity"` in the ProcessConfiguration file. (2)</p> +<p>For additional guidance, see [Implement development tasks](cmmi/guidance-implement-development-tasks.md).</p></td> +</tr> +<tr> +<td><p>[Original Estimate](../track/query-numeric.md) </p></td> +<td><p>The amount of estimated work required to complete a task. Typically, this field doesn't change after it is assigned.</p></td> +</tr> +<tr> +<td><p>[Remaining Work](../track/query-numeric.md)</p></td> +<td><p>Indicate how many hours or days of work remain to complete a task. As work progresses, update this field. It's used to calculate capacity charts, the sprint burndown chart, and the [Burndown and Burn Rate Report](https://msdn.microsoft.com/library/dd380678.aspx).</p> +<p>If you divide a task into subtasks, specify hours for the subtasks only. You can specify work in any unit of measurement your team chooses.</p> + +<p>The amount of work remaining to complete a task. As work progresses, update this field. It's used to calculate [capacity charts](../scale/capacity-planning.md), the [sprint burndown chart](../scrum/sprint-burndown.md), and the [Sprint Burndown](https://msdn.microsoft.com/library/ff731588.aspx) report. </p><p>If you divide a task into subtasks, specify hours for the subtasks only. You can specify work in any unit of measurement your team chooses.</p> + +</td> +</tr> +<tr> +<td><p>[Completed Work](../track/query-numeric.md)</p></td> +<td><p>The amount of work that has been spent implementing a task.</p></td> +</tr> +</tbody> +</table> + + +## Track test progress + +### Test requirements + +From the web portal or Test Manager, you can [create test cases that automatically link to a requirement or bug](../../manual-test/getting-started/create-test-cases.md). Or, you can link a requirement to a test case from the ![Links tab icon](../backlogs/_img/icon-links-tab-wi.png) (links tab). + +![Select the test suite and add a test case](_img/IC793453.png) + +The test case contains a number of fields, many of which are automated and integrated with Test Manager and the build process. For a description of each field, see [Query based on build and test integration fields](../track/build-test-integration.md). + +<img src="_img/agile-test-case-form.png" alt="Web portal, Test case work item form" style="border: 2px solid #C3C3C3;" /> + +The ![Links tab icon](../backlogs/_img/icon-links-tab-wi.png) (links tab) lists all the requirements and bugs in a test case. By using linking, the team can track the progress made in testing each item and supports information that appears in the [Requirements Overview Report](../../report/sql-reports/requirements-overview-report-cmmi.md) report. + +### Track code defects + +You can [create bugs from the web portal web portal, Visual Studio, or when testing with Test Manager](../backlogs/manage-bugs.md). + + +## Track change requests, risks, issues, and notes captured in review meetings + +In addition to the requirement, feature, task, and bug WITs, you can track information recommended by the CMMI process with the following WITS. + +- [Change request](cmmi/guidance-change-request-field-reference-cmmi.md) to [manage proposed changes](cmmi/guidance-manage-change.md) to any work product that is under change control. +- [Issue](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) to track an event or situation that might block work or is blocking work on the product. [Issues differ from risks](cmmi/guidance-manage-issues-cmmi.md) in that teams identify issues spontaneously, generally during daily team meetings. +- [Risk](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) to track the probability and degree of variance between actual and desired outcomes. When you [manage risks](cmmi/guidance-manage-risks.md), you strategically minimize the variance between the outcome that you want and the actual outcome. +- [Review](cmmi/guidance-review-meeting-field-reference-cmmi.md) to document the results of a design or code review. Team members can [capture the details of how the design or code meets standards](cmmi/guidance-implement-development-tasks.md) in areas of name correctness, code relevance, extensibility, code complexity, algorithmic complexity, and code security. +<br/> +You can add an issue from the [New work item widget](../../Report/widget-catalog.md#new-work-item-widget) added to a [team dashboard](../../Report/dashboards.md), or from the **New** menu on the Queries page. + +![Add work item from a New work item widget](_img/cmmi-new-work-item-widget.png) + +Work items you add from the widget are automatically scoped to your [team's default area and iteration paths](../scale/set-team-defaults.md). To change the team context, see [Switch team context](#../how-to/switch-team-context-work.md). + + +[!INCLUDE [temp](../_shared/common-work-item-fields.md)] + + +## Related notes + +[!INCLUDE [temp](../_shared/create-team-project-links.md)] + +[!INCLUDE [temp](../_shared/customize-work-tracking.md)] + + +### Backlog list order + +The [Stack Rank](../track/planning-ranking-priorities.md) field is used to track the relative ranking of requirements, features, or epics. However, by default it doesn't appear on the work item form. The sequence of items on the backlog page is determined according to where you have [added the items or moved the items on the page](../backlogs/create-your-backlog.md#move-items-priority-order). As you drag items, a background process updates this field. + +This field doesn't appear on the work item form. + + + + +### Links control, client work item form + +Work item forms displayed in a client and the web portal for TFS 2015 and earlier versions display link tabs and link control restrictions as described in the following table. + +<table> +<thead> +<tr> +<th><p>Tab name</p></th> +<th><p>Work item type</p></th> +<th><p>Link restrictions</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>All Links</strong></p></td> +<td><p>Requirement</p> +<p>Bug</p> +<p>Change Request</p> +<p>Feedback Request</p> +<p>Issue</p> +<p>Review</p> +<p>Risk</p> +<p>Shared Steps</p> +<p>Task</p> +<p>Test Case</p></td> +<td><ul> +<li><p>No restrictions.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Implementation</strong></p></td> +<td><p>Task</p></td> +<td><ul> +<li><p>Allows only <strong>Parent</strong> and <strong>Child</strong> links between requirements and tasks.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Links</strong></p></td> +<td><p>Code Review Request</p></td> +<td><ul> +<li><p>Allows only <strong>Parent</strong> and <strong>Child</strong> links to Code Review Response work items.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Requirements</strong></p></td> +<td><p>Change Request</p></td> +<td><ul> +<li><p>Allows only <strong>Affects</strong> link type to link change requests to requirements.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Stories</strong></p></td> +<td><p>Feedback Response</p></td> +<td><ul> +<li><p>Allows only <strong>Related</strong> links to requirements.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Storyboards</strong></p></td> +<td><p>Requirement</p></td> +<td><ul> +<li><p>Allows only <strong>Storyboard</strong> links.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Test Cases</strong></p></td> +<td><p>Requirement</p> +<p>Bug</p></td> +<td><ul> +<li><p>Allows only <strong>Tested By</strong> links.</p></li> +<li><p>Allows links only to test cases.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Tested Requirements</strong></p></td> +<td><p>Test case</p></td> +<td><ul> +<li><p>Allows only <strong>Tests</strong> links.</p></li> +<li><p>Allows links only to requirements.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +</tbody> +</table> + + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] diff --git a/docs/work/guidance/cmmi-process.md b/docs/work/guidance/cmmi-process.md new file mode 100644 index 00000000000..7e33986063d --- /dev/null +++ b/docs/work/guidance/cmmi-process.md @@ -0,0 +1,188 @@ +--- +title: CMMI process template for VSTS & TFS +description: CMMI process objects used to plan and track work, monitor progress, and trends when connecting to Visual Studio Team Services (VSTS) or Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 212e3d0f-65f8-47af-b95a-ce9e320e16db +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# CMMI process +<meta name="keywords" content="CMMI tools" /> +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +The CMMI process supports the following work item types (WITs) to plan and track work, tests, feedback, and code review. With different WITs you can track different types of work—such as product backlog items, tasks, bugs and more. These artifacts are created when you create a team project using the CMMI process. They are based on the [Capability Maturity Model Integration (CMMI)](https://msdn.microsoft.com/library/ee461556.aspx) process. + +<img src="_img/cmmi-process-work-tracking-wits.png" alt="Agile process work item types" style="border: 2px solid #C3C3C3;" /> + +In addition to the WITs, teams have access to a set of shared work item queries to track information, analyze progress, and make decisions. If you work from an on-premises TFS, you also have access to additional . + +>[!NOTE] +><b>Feature availability:</b> From the cloud-based VSTS, you'll always have access to the latest version of the CMMI process, [which you can also customize](../process/customize-process.md). If you connect to an on-premises Team Foundation Server (TFS), the latest version of the CMMI process uploads automatically when you install or upgrade to the latest version of TFS. You can [customize team projects](../customize/customize-work.md) and use the [Process Template Manager](manage-process-templates.md) to upload and download process templates. +> +>The following WITs are available as follows: Epic, TFS 2015 and later versions; +>Shared Parameters, TFS 2013.2 and later versions; +>and Test Plan and Test Suite, TFS 2013.3 and later versions. +> +>Additional artifacts, such as [SQL Server reports](#reports) and [SharePoint dashboards](#dashboards), are only available when you connect to a team project from an on-premises Team Foundation Server (TFS). Other resource requirements apply. + + +## Plan and track work +<meta name="description" content="CMMI project management" /> +Teams plan their project by capturing features and requirements. When teams work in sprints, they define tasks and link them to requirements. To gain insight into a rollup of requirements across teams, program managers link requirements to a feature. Blocking issues are tracked using issues. For details on using these WITs, see [CMMI process work item types and workflow](cmmi-process-workflow.md) + +The essential flow for getting started is as shown. To get started using Scrum or Kanban tools, see [Get started with Agile tools to plan and track work](../overview.md). + +[![Define stories](../_img/gs-planning-define-stories.png)](../backlogs/create-your-backlog.md)[![Organize backlog](../_img/gs-planning-organize-backlog.png)](../backlogs/organize-backlog.md)[![Manage bugs](../_img/gs-planning-manage-bugs.png)](../backlogs/manage-bugs.md)[![Manage issues](../_img/gs-planning-manage-issues.png)](../backlogs/manage-issues-impediments.md) + +>[!NOTE] +>A work item is a database record that contains the definition, assignment, priority, and state of work. Work item types define the template of fields, workflow, and form for each type. Work items can be linked to each other to support tracking dependencies, roll up of work, and reports. + + +<a id="shared-queries"></a> +## List work items +You can use shared work item queries to list work items based on their type, such as change requests, bugs, tasks, and requirements. + +![CMMI shared queries](_img/IC667909.png) + +[Descriptions of predefined queries](#predefined-queries) are listed later in this topic. + +You can open a query from the work items page and then use the [query editor to apply different filter criteria](../track/using-queries.md). Also, you can [add queries to team dashboards](../../report/dashboards.md). + + +>[!TIP] +>Queries listed under the Current Iteration folder do not automatically update when a new iteration becomes current. The current iteration is based on the dates that you [assign to your sprint schedules](../scrum/define-sprints.md). You must manually update the iteration path of each query to have it point to the iteration path that corresponds to the current iteration. Or, you can edit the shared query to [use the **@CurrentIteration** macro](../track/query-by-date-or-current-iteration.md). + + +From Team Explorer, you can open any [work item query in Excel](../office/bulk-add-modify-work-items-excel.md) to perform bulk edits. + +[!INCLUDE [temp](../_shared/quick-tips-shared-query.md)] + +## Monitor progress + +<meta name="description" content="CMMI monitor progress" /> +All processes—Agile, Scrum, and CMMI—support [building status and trend charts and dashboards](../../report/overview.md). In addition, several charts are automatically built based on the Agile tools you use. These charts display within the web portal. + +### Create light-weight charts +To get started, you can open a shared query and create a chart based on your tracking interests. Chart types include status—pie, bar, column, stacked bar, and pivot—and trend—stacked area, line, and area—charts. + +[![Edit query](../../report/_img/gs-chart-query.png)](../track/using-queries.md)[![Create chart](../../report/_img/gs-chart-create.png)](../../report/charts.md)[![Manage bugs](../../report/_img/gs-chart-add-dashboard.png)](../../report/add-charts-to-dashboard.md) + +[!INCLUDE [temp](../_shared/powerbi-reports-links.md)] + +<a id="reports"></a> +###SQL Server reports (TFS) + +If you connect to an on-premises TFS, you can access the following CMMI process reports. For these reports to be useful, [teams must perform certain activities](../../report/admin/review-team-activities-for-useful-reports.md), such as define build processes, link work items, and update status or remaining work. + +To access these reports, your team project collection and the team project must be configured with SQL Server Analysis Services and Reporting Services. If you need to add reporting services or update reports to the latest versions, see [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md). + + +<a id="dashboards"></a> +### SharePoint portal dashboards (TFS) + +If you connect to an on-premises TFS, you can access CMMI process dashboards displayed through SharePoint. These dashboards display project data, support investigation tasks, and help teams to perform common tasks quickly. The following dashboards support the display of web access parts for listing work items and reports that were built in the Analysis Services cube. + +To use [dashboards](../../report/sharepoint-dashboards/project-portal-dashboards.md) your team project must have a [project portal configured and the project portal must point to a SharePoint site](../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md). + +## Related notes + +[!INCLUDE [temp](../_shared/create-team-project-links.md)] + +### Additional CMMI guidance + +The situations and working practices of development teams vary widely, and most companies will have their own well-established processes. For these reasons, the guidance given here does not attempt to prescribe a development process in full. Instead, we describe just the activities that are relevant to making best use of the CMMI process. + +- [Background to CMMI](cmmi/guidance-background-to-cmmi.md) : Provides an overview of CMMI and the six capability levels that are intrinsic to the model. + +- [Project management](cmmi/guidance-project-management.md) : Provides guidance to help you better understand how to manage, plan, and coordinate the development and maintenance of software products working with the CMMI model. + +- [Engineering](cmmi/guidance-engineering.md) : Addresses the value-added activities for discovering the information that is required to design and build software products + +Using the CMMI template and guidance can help you achieve the aims of CMMI if you use it as part of a process improvement program. You should adapt this guidance to your own situation, which will depend on the type and history of the product that you are developing, the project's scale, the background of the team members, and accepted practices in your organization. + + This guidance was developed in partnership with David Anderson. For more information, see the following Web page: [David J Anderson & Associates](http://go.microsoft.com/fwlink/?LinkId=178527). + + +<a id="predefined-queries" /> +### CMMI process predefined queries + +#### Query for items assigned to you + +You can find the work items that are assigned to you by using one of the shared queries that the following table describes. + +| Shared query | Description | +|---|---| +| My Test Cases | Lists all test cases that are not closed and that are assigned to the team member who is running the query. Test cases are sorted by priority and then ID. | +| My Work Items | Lists all work items, excluding shared steps, that are not closed and that are assigned to the team member who is running the query. Work items are sorted by rank, priority, type, and ID. | + +#### Development and test queries + +Team members can use the shared queries that are described in the following table to track the status of development and test tasks and active and resolved bugs. + +| Shared query | Description | +|---|---| +| Active Bugs | Lists all active bugs and sorts them by rank, priority, and severity. | +| Development Tasks | Lists all tasks whose **Discipline** is set to **Development**. Tasks are sorted by ID. | +| My Test Cases | Lists all test cases that are not closed and that are assigned to the team member who is running the query. Test cases are sorted by priority and then ID. | +| Open Tasks | Lists all tasks that are not closed, sorted by rank, priority, and then ID. | +| Open Test Cases | Lists all test cases that are not closed, sorted by priority and then ID. | +| Resolved Bugs | Lists all resolved bugs that are defined for the team project, sorted by rank, priority, and severity. | +| Test Tasks | Lists all tasks whose **Discipline** is set to **Test**, sorted by ID. | + +#### Backlog management queries + +Product owners can use the shared queries that are described in the following table to track the status of requirements and untriaged work. + +| Shared query | Description | +|---|---| +| Customer Requirements | Lists all requirements, sorted by ID, that have been identified as Scenario or Quality of Service work items. | +| Product Requirements | Lists all requirements, sorted by ID, that have been identified as Functional, Operational, Security, Safety, or a Feature. | +| Open Requirements | Lists all requirements that are not closed, sorted by iteration ID, priority, and then work item ID. | +| Open Requirements without Test Cases | Lists all requirements that are not closed and that do not have a Tested By link to a test case, sorted by work item ID. | +| Open Work Items | Lists all work items except shared steps that are not closed. Work items are sorted by rank, priority, type, and then ID. | +| Proposed Work Items | Lists all proposed work items, sorted by rank, priority, iteration, area, triage, and then work item ID. | +| Reviews | Lists all reviews, sorted by work item ID. | +| Untriaged Work Items | Lists all requirements, tasks, change requests, bugs, and issues that have not been closed or triaged. The Triage field for these work items is set to Pending, More Info, or Info Received.<br /><br />Work items are sorted by state, triage, rank, priority, iteration, and area. | +| Work Breakdown | Lists all requirements that are not closed and their child requirements or tasks. | +| Work Items With Summary Values | Lists all tasks that have child tasks and that contain non-zero values for the Remaining Work or Completed Work fields. This query is designed to find tasks that report work effort that is already accounted for in their child tasks. For the hours to be counted only once, summary tasks should not be assigned any hours.<br /><br />For more information, see [Address inaccuracies published for summary values](https://msdn.microsoft.com/library/dd997572). | + +#### Change management queries + +Product owners can use the shared queries that are described in the following table to track change requests and dependencies that have been identified between change requests and requirements. + +| Shared query | Description | +|---|---| +| Change Requests | Lists all change requests, sorted by ID. | +| Open Change Requests with Requirements | Lists change requests that are not closed and their linked requirements, sorted by ID. Only change requests that are linked to a requirement with a link type of Affects appears in the list. | +| Requirements with Open Change Requests | Lists requirements and the change requests that are not closed and that depend on them, sorted by ID. Only requirements that are linked to a change request with a link type of Affected By are listed. | + +#### Troubleshooting queries + +Product owners can use the shared queries that are described in the following table to troubleshoot issues and risks to the product schedule. + +| Shared query | Lists | +|---|---| +| Blocked Work Items | Lists all work items where the **Blocked** field is set to **Yes**.<br /><br />Only requirements, tasks, bugs, issues, and change requests can be blocked. | +| Corrective Action Status | Lists all tasks whose **Task Type** is set to **Corrective Action**. | +| Mitigation Actions | Lists all tasks whose **Task Type** is set to **Mitigation Action**. | +| Open Issues | Lists all issues that are not closed.<br /><br />The [Issues workbook](https://msdn.microsoft.com/library/ee461548) references this query. | +| Risks | Lists all risks, sorted by ID. | + +### Workbooks (TFS) + +>[!NOTE] +><b>Feature availability: </b>Workbooks are only available when you connect to an on-premises TFS that's been configured with a SharePoint portal. + + +You can use the following Excel workbooks to review open issues and to rank and assign untriaged work items. Each workbook references a shared query. + +- The [Issues workbook](https://msdn.microsoft.com/library/ee461548.aspx) uses the Open Issues shared query +- The [Triage workbook](https://msdn.microsoft.com/library/ee461525.aspx) uses the Untriaged Work Items shared query + +Because these queries support workbooks, if you change these queries, it will affect those workbooks that use them. + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] \ No newline at end of file diff --git a/docs/work/guidance/cmmi/_img/cmmi_contrepresentation.png b/docs/work/guidance/cmmi/_img/cmmi_contrepresentation.png new file mode 100644 index 00000000000..6eb4e878873 Binary files /dev/null and b/docs/work/guidance/cmmi/_img/cmmi_contrepresentation.png differ diff --git a/docs/work/guidance/cmmi/_img/cmmi_detailcontrep.png b/docs/work/guidance/cmmi/_img/cmmi_detailcontrep.png new file mode 100644 index 00000000000..f9026a5f749 Binary files /dev/null and b/docs/work/guidance/cmmi/_img/cmmi_detailcontrep.png differ diff --git a/docs/work/guidance/cmmi/_img/cmmi_detailstagedrep.png b/docs/work/guidance/cmmi/_img/cmmi_detailstagedrep.png new file mode 100644 index 00000000000..37538ffbc48 Binary files /dev/null and b/docs/work/guidance/cmmi/_img/cmmi_detailstagedrep.png differ diff --git a/docs/work/guidance/cmmi/_img/cmmi_stagedrep_1.png b/docs/work/guidance/cmmi/_img/cmmi_stagedrep_1.png new file mode 100644 index 00000000000..af768bb5f2d Binary files /dev/null and b/docs/work/guidance/cmmi/_img/cmmi_stagedrep_1.png differ diff --git a/docs/work/guidance/cmmi/_img/msf_cmmi_cycles.png b/docs/work/guidance/cmmi/_img/msf_cmmi_cycles.png new file mode 100644 index 00000000000..5732fb3d7b7 Binary files /dev/null and b/docs/work/guidance/cmmi/_img/msf_cmmi_cycles.png differ diff --git a/docs/work/guidance/cmmi/_img/msf_cmmi_iterations.png b/docs/work/guidance/cmmi/_img/msf_cmmi_iterations.png new file mode 100644 index 00000000000..509dd387ebb Binary files /dev/null and b/docs/work/guidance/cmmi/_img/msf_cmmi_iterations.png differ diff --git a/docs/work/guidance/cmmi/_img/procguid_cmmi_form.png b/docs/work/guidance/cmmi/_img/procguid_cmmi_form.png new file mode 100644 index 00000000000..dea4aef7981 Binary files /dev/null and b/docs/work/guidance/cmmi/_img/procguid_cmmi_form.png differ diff --git a/docs/work/guidance/cmmi/_img/procguid_cmmi_wform.png b/docs/work/guidance/cmmi/_img/procguid_cmmi_wform.png new file mode 100644 index 00000000000..3becd7d251b Binary files /dev/null and b/docs/work/guidance/cmmi/_img/procguid_cmmi_wform.png differ diff --git a/docs/work/guidance/cmmi/_img/procguid_cmmi_wtask.png b/docs/work/guidance/cmmi/_img/procguid_cmmi_wtask.png new file mode 100644 index 00000000000..2c046891acf Binary files /dev/null and b/docs/work/guidance/cmmi/_img/procguid_cmmi_wtask.png differ diff --git a/docs/work/guidance/cmmi/_img/procguid_cmmiform.png b/docs/work/guidance/cmmi/_img/procguid_cmmiform.png new file mode 100644 index 00000000000..320371b557d Binary files /dev/null and b/docs/work/guidance/cmmi/_img/procguid_cmmiform.png differ diff --git a/docs/work/guidance/cmmi/_img/procguid_cmmiriskform.png b/docs/work/guidance/cmmi/_img/procguid_cmmiriskform.png new file mode 100644 index 00000000000..0fefedf77a7 Binary files /dev/null and b/docs/work/guidance/cmmi/_img/procguid_cmmiriskform.png differ diff --git a/docs/work/guidance/cmmi/_img/procguid_cmmiwitform.png b/docs/work/guidance/cmmi/_img/procguid_cmmiwitform.png new file mode 100644 index 00000000000..2e2c2689d1a Binary files /dev/null and b/docs/work/guidance/cmmi/_img/procguid_cmmiwitform.png differ diff --git a/docs/work/guidance/cmmi/_img/uc_reqmwfact.png b/docs/work/guidance/cmmi/_img/uc_reqmwfact.png new file mode 100644 index 00000000000..0ebf95e867f Binary files /dev/null and b/docs/work/guidance/cmmi/_img/uc_reqmwfact.png differ diff --git a/docs/work/guidance/cmmi/_img/uml_reqmcd2.png b/docs/work/guidance/cmmi/_img/uml_reqmcd2.png new file mode 100644 index 00000000000..1cc24736d31 Binary files /dev/null and b/docs/work/guidance/cmmi/_img/uml_reqmcd2.png differ diff --git a/docs/work/guidance/cmmi/_img/uml_reqmwfuc.png b/docs/work/guidance/cmmi/_img/uml_reqmwfuc.png new file mode 100644 index 00000000000..e4804c95eeb Binary files /dev/null and b/docs/work/guidance/cmmi/_img/uml_reqmwfuc.png differ diff --git a/docs/work/guidance/cmmi/arrange-requirements-into-a-product-plan.md b/docs/work/guidance/cmmi/arrange-requirements-into-a-product-plan.md new file mode 100644 index 00000000000..5b1df2acf72 --- /dev/null +++ b/docs/work/guidance/cmmi/arrange-requirements-into-a-product-plan.md @@ -0,0 +1,168 @@ +--- +title: Arrange requirements into a product plan | VSTS & TFS +description: Obtain and arrange a plan, starting from a set of requirements - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 83ade2b1-dd94-489e-bf6d-42391eea6171 +ms.author: kaelli +ms.manager: douge +ms.date: 01/20/2017 +--- + +# Arrange requirements into a product plan + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +After you analyze your customer requirements sufficiently to understand what the product should do, you must work out a plan to implement the product. Or, for an existing product, you must work out what functionality is missing and work out a plan for making the changes. But the requirements do not automatically tell you the plan. + + This topic outlines a method of obtaining a plan, starting from a set of requirements. This is just one method among a variety that will work on Visual Studio, and you should adapt it so that it suits your needs. + + You can use the [backlog](../../backlogs/create-your-backlog.md) and [portfolio backlogs](../../backlogs/organize-backlog.md) to define and map requirements and features. + +## <a name="ReqFeature"></a> Requirements and features + There are two kinds of requirement in this method: customer requirements and features. Customer requirements are what you get by analyzing what the customer wants from the product. Features are items in the product plan, which correspond to small subsets of the customer requirements. Each feature may include pieces of the customer requirements that come from different parts of the user experience and different functional areas. + + **Customer requirements** + +- Customer requirements are determined by discussion with the prospective users and other stakeholders. + +- To help analyze these requirements, you will typically create storyboards and models, and you decompose the scenarios into smaller steps, forming a tree. You can link modeling elements such as use cases and activities to scenario work items. + +- There are two kinds of customer requirement: + + - Scenarios, also known as use cases, represent sequences of interactions between the users and product, in pursuit of specific goals. An example scenario might have the title "User buys a book." + + - Quality of Service requirements include performance, security, usability, and other criteria. + +- You can represent these requirements as work items of type requirement, with the Requirement Type field set to Scenario or Quality of Service. For more information, see [Develop requirements](guidance-develop-requirements.md). + +- These requirement work items should be linked to system tests so that you can ensure that all the requirements are tested. See [Create a test plan](../../../manual-test/getting-started/create-a-test-plan.md). + +- [View the backlog](../../backlogs/create-your-backlog.md) or open the Customer Requirement query to list these requirement work items. + +- Use the [Requirements Progress](https://msdn.microsoft.com/library/ee461582.aspx) report to monitor which requirements have been satisfied. + + **Features** + +- A feature is an item in a product plan that represents a group of tasks. In product planning, representatives of the development team and stakeholders assign features to iterations. For more information, see [Plan a project](guidance-plan-a-project-cmmi.md). + +- Enter features as requirement work items with the Requirements Type field set to Feature. + +- The feature's title states, in users' terms, what the users will be able to do with the product, that they could not do in previous iterations. There are no items, or very few items, on the plan that do not deliver new user value. + + For example, this sequence of features could form an implementation plan: + + - "A buyer can pick a book from a list and add it to a wish list." + + - "The book list displays prices. In the wish list, the total price is displayed." + + - "Vendors can attach tags to books. Buyers can filter the book list by tag." + + Notice that no feature touches just one step in the user experience, and no feature involves just one part of the product architecture. Instead, as the features are implemented, several functions are revisited and augmented with new user value. + +- A feature is assigned to an iteration during product planning. All the tasks under a feature must be assigned to the same iteration. + +- A feature describes a partial realization of the customer requirements. It is a subset of the customer requirements, and it might implement each customer requirement to a limited extent. + +- Every feature can be linked to one or more test cases that test the part of the requirements that the feature represents. These test cases are a subset of the system tests that are linked to the customer requirements. + +- The feature's state must not be marked complete until its tests are fully defined and pass. + +- Every feature is a group of development and test tasks. It is the root of a tree of tasks. The development tasks implement the partial requirements that the feature describes. The test tasks design and execute the appropriate test cases. + +- You use the Product Requirements query to list features. + +### Finding features + Separating requirements into incremental features is a creative task that must involve developers, analysts, and stakeholders. A feature defines a piece of the product's functionality that can sensibly be implemented separately from the surrounding functions. Therefore, a workable set of feature definitions and an ordering into a plan depends partly on the architecture of the system. + + For this reason, planning and the initial design of the product must work in parallel, particularly in Iteration 0 where the bulk of the plan is being sketched. + +## <a name="Decomp"></a> Scenario decomposition + To help you arrange the requirements into features, it helps to decompose the scenarios into smaller steps. + + Storyboards often help with this activity. A storyboard is a sequence of pictures that illustrate the scenario. UML activity diagrams are useful for showing alternative paths, and UML sequence diagrams can help you discuss interactions between several actors. After you use these tools to analyze a scenario, you can enter the decomposed scenarios into Team Explorer. This lets you link test cases to the scenarios and thereby ensure that the requirements have been satisfied. For more information, see [UML Activity Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409465.aspx) and [UML Sequence Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409465.aspx). + +## <a name="Features"></a> Features - requirements fulfilled in each iteration + A feature is a requirement that summarizes what the users can do at the completion of each iteration. You can create more than one feature for each iteration. Enter them as requirement work items, setting the Requirement Type to Feature. + + Use your assignments of scenarios to work items to help you define the features. The following example feature plan is derived from the assignments of scenarios to iterations in the previous section: + +- Iteration 1 + + - Customer chooses items from a menu, adds them to an order, and adds a delivery address. + +- Iteration 2 + + - Customers start by displaying a list of restaurants and then choose one. + + - When the customer completes an order, the order appears on the chosen restaurant's screen. + + - The prices of items and the total price are displayed on the order. + +- Iteration 3 + + - Restaurant marks the order as "Done" when the prepared meal has been dispatched. The meal is logged against the restaurant. + + - Each restaurant can enter and update its menu. + + - Customer can browse the menu of every restaurant before selecting one. + +- Iteration 4 + + - Customer enters payment details on completing an order. Customer's card is charged when the restaurant marks the order as Done. + + - Restaurant is paid for orders that are marked as Done. + +- Iteration 5 + + - Restaurants can set their delivery area. Customer enters postal code at start of session. The Web site displays only restaurants that can deliver to the local area. + +### Partly implemented scenarios + Decomposing the scenarios into small steps helps you to separate some steps that can be implemented earlier from others that can be implemented later. + + But sometimes you can separate out other aspects of the scenarios. In this example, the team might implement a basic version of the user experience in early iterations and then improve it later. So you might add the following feature: + +- Iteration 6 - Restaurant can choose the color scheme and font of its menu and upload its own logo and pictures of meals. + + This type of feature does not emerge directly from the decomposition into steps, but it usually emerges in discussion of storyboards. User experience features are good candidates for later iterations. + +### Entering and inspecting features + Create work items with work item type of requirement, and set the Requirement Type field to Feature. Set the feature title to the short description. + +### Tracing features to requirements + You can link features to requirements in the following ways: + +- Link feature work items to the leaf scenario requirements of their iterations. You must link them by using Related Item links because the leaf scenarios already have parents. + +- Link test case work items to the scenarios and quality of service requirements that they test. Link features to the subset of test cases that should pass when the feature has been developed. In this manner, the test cases act as the link between features and customer requirements. + +## <a name="QofS"></a> Quality of service features + Quality of service requirements are usually pervasive with regard to the software design. For example, security requirements are generally not related to a particular development task. + + Nevertheless, for each quality of service requirement, you should create a feature work item whose children are mainly testing tasks that ensure that a quality of service criterion is met. These work items are called quality of service features. + + Some quality of service features can have development tasks. For example, in an early iteration, you might implement a version of the system that can handle only a few users, as a proof of concept. For a later iteration, you might add a feature that specifies the target capacity as stated in the customer requirements. + +## <a name="ProdPlan"></a> Product planning + Before the start of every iteration, hold a meeting to review the product plan. The first product planning meeting creates the plan, and subsequent meetings review it based on earlier iterations. For more information, see [Plan a project](guidance-plan-a-project-cmmi.md). + + In a product plan review, discuss the features with business stakeholders, and be prepared to reprioritize them and arrange them into different iterations. The meeting should include business stakeholders and representatives of the development team. + + The meeting discusses the sequence in which features will be developed. This can be done by projecting or screen-sharing the Office Excel view of the Product Requirements query and ordering the features by iteration. + + An alternative technique is to place the features in a specific sequence and then consider how much can be done in each iteration. For example, the developers might discuss whether "Customer can display the prices" should be moved from Iteration 2 to Iteration 3, without moving it in the sequence. To place the items in a sequence, add an extra column that is named Rank to the spreadsheet, and insert integers that denote the sequence. Order the spreadsheet by this column. The ranks will not be stored in Team Foundation Server, but you can save the spreadsheet. When you open the spreadsheet again, click any cell in the work item table, and then click Refresh on the Team tab. + + Product planning considers the priorities of the features and the development costs. Priorities come from the business stakeholders, with some guidance about risk from the developers. Cost estimates come from the developers. To get an accurate idea of the costs, the development team must have already done some work on the architecture of the product and might need some experience from the early iterations. For this reason, the cost estimates should be refined at every product plan review. + +## <a name="IterPlan"></a> Iteration planning + After the product plan review, plan the iteration. The product plan determines the features that will be delivered by the end of the iteration. The iteration plan determines what work the team will do to implement and test the features. + + The following activities are part of iteration planning: + +- Create tasks for development and testing, and link them as children to the feature requirements. + +- Create test cases for the aspects of the customer requirements that are to be developed in each feature. The test cases should be linked to the customer requirements so that you can monitor how complete the requirements are. + + You can also link test cases to the features so that you can track the correspondence between features and requirements. The feature should not be marked complete until the linked test cases pass. + + For more information, see [Plan an iteration](guidance-plan-an-iteration-cmmi.md). diff --git a/docs/work/guidance/cmmi/guidance-background-to-cmmi.md b/docs/work/guidance/cmmi/guidance-background-to-cmmi.md new file mode 100644 index 00000000000..fe14a29fe5f --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-background-to-cmmi.md @@ -0,0 +1,109 @@ +--- +title: Background to CMMI | VSTS & TFS +description: Guide to the Capability Maturity Model Integration (CMMI) for Development - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 77e18a8c-e101-4210-9755-33a7c99b2593 +ms.author: kaelli +ms.manager: douge +ms.date: 01/20/2017 +--- + +# Background to CMMI + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +The definitive guide to the Capability Maturity Model Integration (CMMI) for Development is published by the Software Engineering Institute as "CMMI: Guidelines for Process Integration and Product Improvement." This book specifically describes the CMMI for Development (CMMI-DEV) version 1.3, which is one of the models within the current CMMI product suite at the time of this writing. This model is extremely stable and should continue to be current well beyond 2010. You may also find "CMMI Distilled: A Practical Introduction to Integrated Process Improvement" to be a useful and accessible book about the topic. For more information about both of these books, see [Additional resources](#resources) later in this topic. + + The CMMI started life in 1987 as the Capability Maturity Model (CMM), a project at the Software Engineering Institute, which is a research center at Carnegie-Mellon University. This center was established and funded by the United States Department of Defense. The CMM for Software was first published in 1991 and is based on a checklist of critical success factors in software development projects during the late 70s and early 80s. The model is also informed by research at International Business Machines (IBM) Corporation and 20th-century quality assurance leaders Philip Crosby and W. Edwards Deming. Both the name, Capability Maturity Model, and the five levels in the Staged Representation (as discussed later in this topic) were inspired by Crosby's Manufacturing Maturity Model. Applied mainly to defense programs, CMM has achieved considerable adoption and undergone several revisions and iterations. Its success led to the development of CMMs for a variety of subjects beyond software. The proliferation of new models was confusing, so the government funded a two-year project that involved more than 200 industry and academic experts to create a single, extensible framework that integrated systems engineering, software engineering, and product development. The result was CMMI. + + The most important thing to understand about the CMMI-DEV is that it is a model. It is not a process or a prescription to be followed. It is a set of organizational behaviors that have proven to be of merit in software development and systems engineering. Why use such a model? What is its purpose? And how best should it be used? These are critical questions and are perhaps the most misunderstood issues with CMMI. + +## <a name="Why"></a> Why use a model? + Without a model of how our organizations work, which functions they need, and how those functions interact, it is difficult to lead efforts to improve. A model gives us an understanding of discrete elements in our organizations and helps us formulate language and discussion of what needs to be improved and how such improvement might be achieved. A model offers the following benefits: + +- provides a common framework and language to help communicate + +- leverages years of experience + +- helps users keep the big picture in mind while focusing specifically on improvement + +- is often supported by trainers and consultants + +- can provide a standard to help solve disagreements + +## <a name="What"></a> What is the purpose of the CMMI model? + The textbook will tell you that the purpose of the model is to assess the maturity of an organization's processes and to provide guidance on improving processes that will lead to improved products. When talking directly with people from the Software Engineering Institute, you might hear them say that the CMMI is a model for risk management and indicates an organization's ability to manage risk. This indication is evidence for the likelihood that the organization can deliver on its promises or deliver products of high quality that are attractive to the market. Another way to think of this is that the model provides a good indicator of how an organization will perform under stress. A high maturity, high capability organization will take unexpected, stressful events in its stride, react, change, and proceed forward. A low maturity and lower capability organization will tend to panic under stress, blindly follow obviated procedures, or throw out all process altogether and retrench back to chaos. + + The CMMI has not proven a good indicator of the economic performance of an organization. Although higher maturity organizations may manage risk better and be more predictable, there is evidence of risk aversion among higher maturity firms. This aversion can lead to a lack of innovation or evidence of greater bureaucracy that results in long lead times and a lack of competitiveness. Lower maturity firms tend to be more innovative and creative but chaotic and unpredictable. When results are achieved, they are often the result of heroic effort by individuals or managers. + +## <a name="How"></a> What's the best way to use the CMMI model? + The model was designed to be used as the basis for a process improvement initiative, with its use in assessment only a support system for measuring improvement. There has been mixed success with this usage. It is all too easy to mistake the model for a process definition and try to follow it, instead of a map that identifies gaps in existing processes that may need to be filled. The fundamental building block of CMMI is a process area that defines goals and several activities that are often used to meet them. One example of a process area is Process and Product Quality Assurance. Another is Configuration Management. It is important to understand that a process area is not a process. A single process may cross multiple process areas, and an individual process area may involve multiple processes. + + The CMMI-DEV is really two models that share the same underlying elements. The first and most familiar is the Staged Representation, which presents the 22 process areas mapped into one of five organizational maturity levels. An appraisal of an organization would assess the level at which it was operating, and this level would be an indicator of its ability to manage risk and, therefore, deliver on its promises. + + ![CMMI Staged Representation](_img/cmmi_stagedrep_1.png "CMMI_StagedRep_1") + + Levels 4 and 5 are often referred to as higher maturity levels. There is often a clear difference between higher maturity organizations, which exhibit the quantitative management and optimizing behaviors, and lower maturity organizations, which are merely managed or following defined processes. Higher maturity organizations exhibit lower variability in processes and often use leading indicators as part of a statistically defensible management method. As a result, higher maturity organizations tend to be both more predictable and faster at responding to new information, assuming that other bureaucracy does not get in the way. Where low maturity organizations tend to exhibit heroic effort, high maturity organizations may blindly follow processes when under stress and fail to recognize that a process change may be a more appropriate response. + + The second, the Continuous Representation, models process capability within each of the 22 process areas individually, allowing the organization to tailor their improvement efforts to the processes that offer the highest business value. This representation is more in line with Crosby's original model. Appraisals against this model result in profiles of capability rather than a single number. Of course, because the organizational maturity level is the level that most managers and executives understand, there are ways of mapping the results of a continuous model assessment into the five stages. + + ![CMMI Continous Representation](_img/cmmi_contrepresentation.png "CMMI_ContRepresentation") + + Using the staged model as a basis for a process improvement program can be dangerous because implementers may forget that the CMMI is not a process or workflow model but provides goals for process and workflow to achieve. Meeting those goals will improve the maturity of the organization and the likelihood that events unfold as planned. Perhaps the biggest failure mode is making achieving a level the goal and then creating processes and infrastructure simply to pass the appraisal. The goal of any process improvement activity should be measurable improvement, not a number. + + The Continuous model seems to have some greater success as a guide to process improvement, and some consulting firms choose only to offer guidance around the Continuous model. The most obvious difference is that a process improvement program that is designed around the Continuous model does not have artificial goals that are determined by maturity levels. The Continuous model also more naturally lends itself to applying process improvement in the areas where it is most likely to leverage an economic benefit for the organization. Therefore, those who follow the Continuous model are more likely to receive positive feedback from an initiative that is based on the CMMI model. Moreover, positive feedback is more likely to lead to the development of a virtuous cycle of improvements. + +## <a name="Elements"></a> Elements of the CMMI model + The CMMI model is divided into 22 process areas, which are listed in the following table: + +|Acronym|Process Area| +|-------------|------------------| +|CAR|Causal Analysis & Resolution| +|CM|Configuration Management| +|DAR|Decision Analysis & Resolution| +|IPM|Integrated Project Management| +|MA|Measurement & Analysis| +|OID|Organizational Innovation & Deployment| +|OPD|Organizational Process Definition| +|OPF|Organizational Process Focus| +|OPP|Organizational Process Performance| +|OT|Organizational Training| +|PI|Product Integration| +|PMC|Project Monitoring & Control| +|PP|Project Planning| +|PPQA|Process & Product Quality Assurance| +|QPM|Quantitative Project Management| +|RD|Requirements Definition| +|REQM|Requirements Management| +|RSKM|Risk Management| +|SAM|Supplier Agreement Management| +|TS|Technical Solution| +|VER|Verification| +|VAL|Validation| + + In the Staged Representation, the process areas are mapped against each stage, as shown in the following illustration. + + ![Stage representation showing process areas](_img/cmmi_detailstagedrep.png "CMMI_DetailStagedRep") + + In the Continuous Representation, the process areas are mapped into functional groupings, as shown in the following illustration. + + ![Continuous Representation showing Process Areas](_img/cmmi_detailcontrep.png "CMMI_DetailContRep") + + Each process area is made up of required, expected, and informative components. Only the required components are actually required to satisfy an appraisal against the model. The required components are the specific and generic goals for each process area. The expected components are the specific and generic practices for each specific or generic goal. Note that, because an expected component is merely expected and not required, this indicates that a specific or generic practice can be replaced by an equivalent practice. The expected practices are there to guide implementers and appraisers. If an alternative practice is chosen, it will be up to the implementer to advise an appraiser and justify why an alternative practice is appropriate. Informative components provide details that help implementers get started with a process improvement initiative that is guided by the CMMI model. Informative components include sub-practices of generic and specific practices and typical work products. + + It is very important that we understand that only generic and specific goals are required. Everything else is provided as a guide. The examples of the expected and informative components that are given in the CMMI literature are very often pulled from large space and defense-systems integration projects. These projects are run by companies that sponsor and support the Software Engineering Institute at Carnegie-Mellon University. These projects may not reflect the type of projects that are undertaken in your organization, nor may they reflect more recent trends in the industry, such as the emergence of agile software development methods. + +## <a name="resources"></a> Additional resources + For more information, see the following web resources: + +- [CMMI for Development, Version 1.3, Improving processes for developing better products and services](http://www.sei.cmu.edu/reports/10tr033.pdf) Software Engineering Process Management Program + +- [CMMI Institute](http://whatis.cmmiinstitute.com/get-started) + +- [CMMI: Guidelines for Process Integration and Product Improvement](http://go.microsoft.com/fwlink/?LinkId=178999) (2nd Edition), Mary Beth Chrissis, Mike Konrad, and Sandy Shrum; Addison-Wesley Professional, 2006. + +- [CMMI Distilled: A Practical Introduction to Integrated Process Improvement](http://go.microsoft.com/fwlink/?LinkId=179000) (3rd Edition), Dennis M. Ahren, Aaron Clause, and Richard Turner; Addison-Wesley Professional, 2008. + +## Related notes + [CMMI process](../cmmi-process.md) \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md b/docs/work/guidance/cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md new file mode 100644 index 00000000000..7b88c39353b --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md @@ -0,0 +1,50 @@ +--- +title: Bugs, issues, and risks field reference (CMMI) | VSTS & TFS +description: Tracks the information with regards to bugs, issues, and risks - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 66d150ac-736f-4dde-8a2b-382c50d9e4f4 +ms.author: kaelli +ms.manager: douge +ms.date: 01/20/2017 +--- + +# Bugs, issues, and risks field reference (CMMI) + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +The following fields track information about bugs, issues, and risks. These work item types are defined within the process template for the [CMMI process](../cmmi-process.md). + +## <a name="bugs"></a> Bug tracking fields + These fields are neither reported nor indexed. + +|**Field name**|**Description**|**Data type**| +|--------------------|---------------------|-------------------| +|**Symptom**|The unexpected behavior.<br/>Reference name=Microsoft.VSTS.CMMI.Symptom|HTML| +|**Proposed Fix**|The proposed change to fix the reported problem.<br/>Reference name=Microsoft.VSTS.CMMI.ProposedFix|HTML| +|**Found in Environment**|The software setup and configuration where the bug was found.<br/>Reference name=Microsoft.VSTS.CMMI.FoundInEnvironment|String| +|**Root Cause**|The cause of the error. You can specify one of the following values:<br /><br /> - **Coding Error**<br />- **Design Error**<br />- **Specification Error**<br />- **Communication Error**<br />- **Unknown**<br /><br /> To change the menu selection, see [Customize a pick list](../../customize/add-modify-field.md).<br/>Reference name=Microsoft.VSTS.CMMI.RootCause|String| +|**How Found**|How the bug was found. For example, a bug might have been found during a customer review or through ad hoc testing.<br/>Reference name=Microsoft.VSTS.CMMI.HowFound|String| + +## <a name="issues"></a> Issue tracking fields + These fields are neither reported nor indexed. + +|**Field name**|**Description**|**Data type**| +|--------------------|---------------------|-------------------------| +|**Analysis**|The root cause of the issue and one or more solutions that might resolve it.<br/>Reference name=Microsoft.VSTS.CMMI.Analysis|HTML| +|**Corrective Action Actual Resolution**|What the team actually did to correct the issue.<br/>Reference name=Microsoft.VSTS.CMMI.CorrectiveActionActualResolution|HTML| +|**Corrective Action Plan**|The proposed corrective action on which the team has agreed.<br/>Reference name=Microsoft.VSTS.CMMI.CorrectiveActionPlan|HTML| +|**Target Resolve Date**|The date when the issue becomes critical and starts to affect the critical path of the project plan.<br/>Reference name=Microsoft.VSTS.CMMI.TargetResolveDate|DateTime| + +## <a name="risks"></a> Risk tracking fields + These fields are neither reported nor indexed. + +|**Field name**|**Description**|**Data type**| +|--------------------|---------------------|-------------------| +|**Contingency Plan**|The actions to take if the risk occurs.<br /><br /> You can create and link tasks to the Risk work item to track the work that the team must complete to implement the contingency plan. Also, you can create an Issue work item to track one or more issues on which the risk has an impact.<br/>Reference name=Microsoft.VSTS.CMMI.ContingencyPlan|HTML| +|**Mitigation Plan**|The actions to take to reduce the probability or impact of the risk.<br /><br /> You can create and link tasks to the Risk work item to track the work that the team must complete to implement the mitigation plan.<br/>Reference name=Microsoft.VSTS.CMMI.MitigationPlan|HTML| +|**Mitigation Triggers**|The conditions or events that determine how the team might mitigate a risk. For example, the triage team might authorize and obtain a reserve generator if the weather forecast is predicting an ice storm or hurricane to hit within 50 miles of the office within the next four days.<br/>Reference name=Microsoft.VSTS.CMMI.MitigationTriggers|HTML| +|**Probability**|A number that indicates the chance that the risk will occur. A valid probability number is between 1 and 99, where 99 indicates that the risk is almost certain to occur.<br/>Reference name=Microsoft.VSTS.CMMI.Probability|Integer| + +## Related notes + [Index of work item fields](../work-item-field.md) \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-build-product.md b/docs/work/guidance/cmmi/guidance-build-product.md new file mode 100644 index 00000000000..2a5f992839f --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-build-product.md @@ -0,0 +1,18 @@ +--- +title: Building a product | VSTS & TFS +description: Build the integrated code to integrate development work into a component, a sub-system, a system, or a finished product - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: a3b1291c-ff51-45a9-9f3d-485361705eae +ms.author: kaelli +ms.manager: douge +ms.date: 01/20/2017 +--- + +# Building a product + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +To integrate development work into a component, a sub-system, a system, or a finished product, you must build the integrated code. Visual Studio Team Foundation Server provides visibility into the code base and the tools to control and manage builds and code integration. The Capability Maturity Model Integration (CMMI) model requires a basic understanding of product integration for configuration management at model level 2. However, the Product Integration process area at model level 3 requires a full product-integration strategy and management system. Team Foundation Server creates the evidence that you need for a Standard CMMI Appraisal Method for Process Improvement (SCAMPI) appraisal. + + Continuous integration is a good approach to product integration that will work for many project risk profiles. For more information, see [Set up CI](/vsts/build-release/apps/windows/dot-net). If this strategy is not appropriate for your project, you should convene a meeting of technical stakeholders to discuss an appropriate plan for product integration. The meeting should include the architect, lead developers, testers, configuration management engineers, process engineers, and a change or release manager. The team should create tasks to create appropriate build scripts. diff --git a/docs/work/guidance/cmmi/guidance-change-request-field-reference-cmmi.md b/docs/work/guidance/cmmi/guidance-change-request-field-reference-cmmi.md new file mode 100644 index 00000000000..9359e3c1bc7 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-change-request-field-reference-cmmi.md @@ -0,0 +1,32 @@ +--- +title: Change request field reference (CMMI) | VSTS & TFS +description: Track change requests for CMMI work items, provide description and reference name - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 1b95abfa-a1cb-4ebd-aff2-843cf6eec333 +ms.author: kaelli +ms.manager: douge +ms.date: 01/20/2017 +--- + +# Change request field reference (CMMI) + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +You can track change requests for CMMI work items by using these six fields: Justification, Impact on Architecture, Impact on User Experience, Impact on Test, Impact on Development, and Impact on Technical Publications. A description and a reference name for each of the change request fields are provided in the following table. When you open a work item form for a change request, the **Justification** field appears on the **Justification** tab, and all other fields appear on the **Analysis** tab. + + The Change Request work item type is provided only with the [CMMI process](../cmmi-process.md). + + None of these fields are reportable or indexed. They all have a data type of HTML. + +|**Field name**|**Description**|**Reference name**| +|--------------------|---------------------|------------------------| +|**Justification**|Why the change has been proposed and what value it would bring to the product and the customer.|Microsoft.VSTS.CMMI.Justification| +|**Impact on Architecture**|The impact that the change would have on architecture. You can use this field to describe in detail which sections of the architecture would be affected and how much the change would cost to implement.|Microsoft.VSTS.CMMI.ImpactOnArchitecture| +|**Impact on User Experience**|The impact that the change would have on the user experience. You can use this field to describe in detail which sections of the user interface would be affected and how much the change would cost to implement.|Microsoft.VSTS.CMMI.ImpactOnUserExperience| +|**Impact on Test**|The impact that the change would have on testing. You can use this field to describe in detail which tests would be affected and how much the change would cost to implement.|Microsoft.VSTS.CMMI.ImpactOnTest| +|**Impact on Development**|The impact that the change would have on development and product designs. You can use this field to describe in detail which development areas and designs would be affected and how much the change would cost to implement.|Microsoft.VSTS.CMMI.ImpactOnDevelopment| +|**Impact on Technical Publications**|The impact that the change would have on product documentation. You can use this field to describe in detail which sections of documentation would be affected and how much the change would cost to implement.|Microsoft.VSTS.CMMI.ImpactOnTechnicalPublications| + +## Related notes + [Index of work item fields](../work-item-field.md) \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-create-solution-architecture.md b/docs/work/guidance/cmmi/guidance-create-solution-architecture.md new file mode 100644 index 00000000000..36ca85f8851 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-create-solution-architecture.md @@ -0,0 +1,123 @@ +--- +title: Create a solution architecture | VSTS & TFS +description: Investigate alternative architectural strategies to creat good architecture - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 77707311-8835-4bc8-9b28-17534d7a7d9c +ms.author: kaelli +ms.manager: douge +ms.date: 01/20/2017 +--- + +# Create a solution architecture + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + + +Part of creating a good architecture is investigating alternative architectural strategies. Alternative strategies have different benefits that are based on platform selection, technologies that are used, and code reuse. Each strategy is designed and proofs of concept are built to further investigate the costs and benefits of each strategy. The strategies are assessed against product and quality requirements, and ultimately a strategy is chosen to be used to implement the product. Finally, security and performance are architectural concerns for which work must be done over the entire product. + + + +## <a name="CreateAlternative"></a> Create Alternative Architecture Partitioning Designs + The problem is analyzed, and different approaches are considered. A group of requirements are selected that represent key business and technological challenges. Examine the characteristics of these challenges, such as integration of legacy systems, and predict future needs based on current needs, reusability of code, and maintenance costs. + +### Create an Application Diagram + Using the domain model and requirements as input, create an application diagram that represents the core logical elements of the system. This will later be partitioned into system diagrams. Alternative partitioning schemes will be considered and evaluated. + + One way to represent an application diagram is as a Unified Modeling Language (UML) use case diagram. This type of diagram can show the major subsystems and their dependencies. In addition, you can place use cases in each subsystem to show which subsystem manages each user scenario. + +### Establish Evaluation Criteria + Determine which criteria to use to identify requirements and scenarios that represent significant architectural challenges. Consult the existing enterprise architecture documents for criteria. Review any business requirements, technical requirements, and enterprise standards that must be applied to new applications. Capture additional criteria that are known to be architecturally significant, such as integration with legacy systems, reusability of code, reusing existing vendor libraries and platforms, and controlling maintenance costs. Capture additional criteria that represent risks and cost when implementing a technical solution. + +### Select a Candidate Group of Requirements + Evaluate each quality of service requirement and product requirement against the evaluation criteria. If a requirement represents an architectural challenge, consider it a candidate for modeling. For example, a requirement that the new product must support older customer databases meets the criteria of integrating with legacy systems. Such a requirement is a candidate for modeling how the integration would work. + +### Select a Candidate Group of Scenarios + Evaluate each scenario against the evaluation criteria. If a scenario represents an architectural challenge, consider it a candidate for modeling. For example, a scenario in which the user downloads a client update meets the criteria that concerns maintenance costs. Such a scenario is a candidate for modeling how best to handle client updates. + +### Reduce the Candidate Group + Review the candidate scenarios and requirements. Remove scenarios and requirements that duplicate the evaluation criteria or are better represented by other scenarios and requirements. Trim the candidate group to a core group that represents the key architectural challenges, risks, and costs of the new application. Keep the scenarios and requirements that best represent the evaluation criteria, that present the most risk, and that present the most potential cost when architecting a technical solution. Keep the scenarios and the requirements that are the most comprehensive or key parts of the application. + +### Create Partitioning Criteria + Using the requirements as motivation, analyze established architectural patterns (such as façade or model-view-controller), and identify potential candidates for implementation. Identify candidate patterns through their motivation, and consider their design tradeoffs with regard to coupling, cohesion, extensibility, adaptability, and flexibility. Select a set of candidates for implementation as alternatives for assessment. + +## <a name="Design"></a> Design System Architecture and Deployment + The system architecture defines the groupings and configurations of elements that are identified in the application diagram. System diagrams are created that capture the system architecture for each possible architecture approach. Deployment diagrams show the deployment steps that are based on dependencies and core functionality. An infrastructure architect creates a logical datacenter diagram that describes the logical structure of the datacenter where the application will be deployed. The deployment diagrams are validated against the logical datacenter diagram to ensure that the systems can be deployed. + +### Create a System Model + The architect and the lead developer create system diagrams from the application diagram. Through system diagrams, you can design reusable application systems as units of deployment by composing them from elements on the application diagram. You can also design larger and more complex systems that contain other systems so that you can use them in distributed system scenarios and abstract the details of applications in those systems. Check in each new diagram file to version control. + + You can represent system diagrams in Visual Studio in the following ways: + +- Use case diagrams. The main user scenarios are represented as use cases, and the major components of the system are shown as subsystems. Each use case can be placed inside the subsystem that deals with it. For more information, see [UML Use Case Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409432.aspx). + +- UML component diagrams. These diagrams let you show communications channels between the components, in addition to dependencies. You might also want to create class diagrams to describe the types that are visible at the interfaces to the components, and you can create sequence diagrams to show their interactions. For more information, see [UML Component Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409432.aspx), [UML Class Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409432.aspx), and [UML Sequence Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409432.aspx). + +- [Layer diagrams](https://msdn.microsoft.com/en-us/library/dd418995). A layer diagram describes the block structure of the application. It shows only components and the dependencies between them. It has the benefit that, after the code is written, you can validate the code and the dependencies against the diagram. For more information, see [Layer Diagrams: Guidelines](https://msdn.microsoft.com/en-us/library/dd418995). + + For each subsystem, you can create a package that describes its types and behavior in more detail. For more information, see [Define packages and namespaces](https://msdn.microsoft.com/en-us/library/dd465144). + +## <a name="CreateProofs"></a> Create Proofs of Concept + Significant risks to the project can be mitigated by creating an architectural proof of concept. It is important to address risk as early as possible in the project so that key strategic and architectural decisions can be made while it is still easy to modify fundamental pieces of the architecture. Creating early proofs of concept reduces overall project risk and unknowns. Lower project risk and fewer unknowns make planning and estimating in later iterations more accurate. Proofs of concept can be temporary and discarded after the issues have been addressed, or they can be built as the foundation of the core architecture. + +### Examine Risk + Understand the elements that lead to the identification of the risk or architectural decisions. Examine related scenarios and quality of service requirements. Check for any target environment implications. + +### Plan the Approach + Determine the form of the proof of concept that is needed. Use the application and system diagrams to help plan. Solve only the architectural problem that is identified by the risk. Look for the simplest resolution. + +### Build and Run the Proof of Concepts + Build the proof of concept. You can implement the proof of concept from the application diagram. Maintain focus on the problem to be solved. Deploy the proof of concept to a physical environment that is congruent to the logical datacenter diagram. The physical environment should match the settings of the logical datacenter diagram as closely as possible. Test the proof of concept against the high-risk issues. + +## <a name="Assess"></a> Assess Alternatives + The Lightweight Architecture Alternative Analysis Method (LAAAM) is used to help decide between different architectural strategies for building an application. The LAAAM typically takes one day to complete. Start by building a utility tree that describes key quality and functional drivers of the application that are based on requirements. Each driver is written as a scenario that takes the form of a statement that is written as context, stimulus, and response. Use an assessment matrix to evaluate how well each strategy addresses each scenario. + +### Create a Utility Tree + Examine quality of service requirements and product requirements to determine the key drivers of quality and function in the application. Construct a utility tree that represents the overall quality of the application. The root node in the tree is labeled Utility. Subsequent nodes are typically labeled in standard quality terms such as modifiability, availability, and security. The tree should represent the hierarchical nature of the qualities and provide a basis for prioritization. Each level in the tree is a further refinement of the qualities. Ultimately, these qualities become scenarios. + +### Construct an Assessment Matrix + For each leaf in the utility tree, write a scenario. The scenario is in the form of context, stimulus, and response (for example, "Under typical operation, perform a database transaction in fewer than 100 milliseconds"). + + Create a spreadsheet or a table, and enter each scenario as a row in this assessment matrix. Enter each architectural strategy as a column. At each intersection of strategies and scenarios, enter a rating on a scale between 1 and 4. + + The rating should take into account the following factors: + +- **Development cost** Is this solution easy or difficult to implement? What is its impact on other areas? + +- **Operational cost** At run time, will this solution work easily, or will it adversely affect usability, performance, and so on? + +- **Risk** Is this solution certain to address the scenario well, or are there unknown costs? Could this solution have an adverse impact on the team's ability to accommodate future enhancements in the requirements? + + If a proof of concept has been built for a strategy, use information from that proof of concept to help determine the values. + + At the bottom of the table, sum the values from the scenarios. Use these figures as an input to the discussion that leads to decisions on the alternative architectures. + + Upload the completed assessment matrix to the project portal. + +## <a name="Select"></a> Select the Architecture + After the assessment matrix is created, a review meeting is held to determine which architecture to use in the next iteration. The assessment matrix and information that is discovered from creating the proofs of concept is used to help make a decision. After the architecture is selected, diagrams for the architecture are checked in as the reference solution, and a justification document is created that captures the reasons behind the selection. + +### Prepare for Review + The architect and the lead developer identify the appropriate reviewers for reviewing the proposed architectures and circulate documentation for the architectures to each participant. + +### Review System Architecture and Deployment Architecture + During the review meeting, the system diagrams, the deployment report, and the logical datacenter diagram are reviewed. The goal is to choose an architecture to implement in the next iteration. + + Consider the assessment matrix rankings for each architecture to help evaluate the suitability of each architecture. Consider any information that is discovered from the proofs of concept such as cost or complexity that is involved with implementing the different architectures. If the logical datacenter diagram represents an existing datacenter that cannot be modified, do not review it. If a datacenter is being created, review the diagram for deployment considerations. Select the architecture to be used. Review the architectural concept against the scenarios to validate that the solution meets the customer needs and is complete. + +### Create a Reference Solution + Create a justification document that captures the decisions of the meeting. Upload it to the project portal. For the selected architecture, check in any application, system, or logical datacenter diagrams as the reference solution to use for implementing features in the next iteration. Communicate to the entire team and any dependent teams the decision on what architecture is selected for the next iteration. + +## <a name="Develop"></a> Develop a Performance Model + Performance modeling is used to identify and address potential performance issues in the application. A performance model is developed from a quality of service requirement, which is then broken into development tasks. Each development task is assigned a performance budget for implementation. + + Identify the scenarios that are linked to the performance quality of service requirement. Map the development tasks to the scenarios. From the quality of service requirements list, determine the workload for the application. Using the workload estimates and the quality of service requirements list, identify the performance objectives for each key scenario. These include objectives such as response time, throughput, and resource use. Identify the performance-related resources that have been budgeted to meet the performance objectives. Some examples of performance-related resources are execution time and network bandwidth. Determine the maximum allowable allocation of each resource. + + Spread the budgeted resources across the processing steps for each scenario. When not sure of how to allocate the budget, make best guesses, or divide the resources evenly among the steps. Budgeting is refined during validation. Attach or write the allocation on the appropriate development task. + + Find budget allocations that pose a risk to meeting performance objectives. Consider tradeoffs that help meet performance objectives such as design and deployment alternatives. Reevaluate quality of service requirements if necessary. + + Identify the scenarios that do not meet budget allocations. Measure the performance of the scenarios. Use prototyping in early iterations if code is not available. Repeat the budgeting, evaluation, and validation steps as necessary by using data that is acquired during validation. + +## Develop a Threat Model + For more information, see the following page on the Microsoft Web site: [Security Developer Center](http://go.microsoft.com/fwlink/?LinkId=158810). \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-develop-requirements.md b/docs/work/guidance/cmmi/guidance-develop-requirements.md new file mode 100644 index 00000000000..a0a1c994ba1 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-develop-requirements.md @@ -0,0 +1,240 @@ +--- +title: Develop requirements | VSTS & TFS +description: Describes the requirements what the stakeholders expect from the product and allowing them to be easily discussed with the business stakeholders, using the vocabulary and concepts of the business domain - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 4947c45a-c6a4-4865-9e3a-677740a0a1bc +ms.manager: douge +ms.author: kaelli +ms.date: 04/28/2017 +--- + +# Develop requirements + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +Requirements describe what the stakeholders expect from the product. You should express your requirements in terms that allow them to be easily discussed with the business stakeholders, using the vocabulary and concepts of the business domain. Requirements should neither discuss nor depend on the implementation. Requirements include not only the behavioral and quality of service expectations of the users but also statutory constraints and commercial standards. + + By creating requirements in TFS, you gain the following benefits: + +- Verify that requirements have been satisfied by linking them to test cases. + +- Monitor progress toward implementing the requirements by linking them to task work items. + +- Structure the requirements into overall and more detailed requirements so that you can manage them more easily and so that progress reports can summarize the information. + +- Model the requirements in Visual Studio Ultimate, linking model elements to requirements in Team Foundation Server. + + This topic does not attempt to replicate the very large body of literature that is available on the subject of determining requirements. Instead, it focuses on the aspects that are important for using the Visual Studio tools in a manner that conforms to CMMI. For more information about CMMI, see [Background to CMMI](guidance-background-to-cmmi.md). + + The activities that are described in this topic, like any development activities, should not be performed in strict order. Develop a domain model while you are writing scenarios because one activity will help you improve the other activity. Develop the scenarios as the time for coding them approaches. Feed the experience with code that has been written and demonstrated back to the scenarios that have yet to be implemented. + +## <a name="When"></a> When to develop requirements + TFS supports iterative working, and this practice is most effective when the early iterations are used to gain feedback from prospective users and other stakeholders. This feedback can be used to improve the requirements that have been stated for future iterations. This results in a product that is much more effective in its ultimate installation than a product that is developed over the same period without any user trial. If your project is one component among many in a larger program, early integration with other components allows the program architects to improve the overall product. + + This flexibility must be balanced against the need to give firm commitments to your customer or to partners in parallel projects. + + To a controlled extent, therefore, requirements are developed and refined throughout the project. Because the detailed requirements are likely to change during the project, determining them in full before the appropriate implementation is likely to result in wasted effort. + +- In Iteration 0, develop a set of requirements that describe of the main features, with just enough detail to form a product plan. The product plan assigns requirements to iterations and states what requirement will be fulfilled at the end of each iteration. Create a domain model of the major concepts and activities, and define the vocabulary that will be used for those concepts both in discussion with the users and in the implementation. Determine broad requirements that pervade every feature, such as security and other quality of service requirements. + +- At or near the start of each iteration, develop the requirements for those features in more detail. Determine the steps that the users will follow, defining them with the help of activity or sequence diagrams. Define what happens in exceptional cases. + +- Verify as often as possible all the requirements that have been implemented. Pervasive requirements, such as security, must be verified with tests that are extended for each new feature. If possible, automate the tests because automatic tests can be performed continuously. + +### Managing requirements changes + The following guidelines let you operate an incremental process while monitoring it to satisfy CMMI requirements. + +- Do not change the requirements that are set for an iteration. In the rare case of an abrupt change in circumstances, you might have to cancel an iteration, review the product plan, and start a new iteration. + +- Look for uncertainties in the requirements. Try to arrange the plan so that user experience with early iterations yields information that reduces the uncertainties. + +- Use change request work items to record requests to change behavior that has already been implemented, unless the requested improvement is already part of the plan. Link each change request to the appropriate requirement work items. + +- Review change requests when you review the product before each iteration. Examine the impact of the request on dependent projects and users, and estimate the cost with regard to changes in your code. If a change request is accepted, update the requirement. + +- Update the tests to conform to every requirements change. + +- Designate a cut-off date (for example, after iteration 2 or 3) after which requirements changes must be much more strongly justified. If your project is for a paying customer, this is the date to have the customer approve a baseline set of requirements and switch from hourly payment to fixed price. + +- Use bug work items to record implemented behavior that does not perform according to the explicit or implicit requirements. Where practical, create a new test that would have caught the bug. + +## <a name="Vision"></a> Write a vision statement + Discuss a vision statement with the team, and display it on the project's Web portal for Team Foundation Server. + + A vision statement is a short summary of what benefit the product will bring. What will the users be able to do that they could not do before? The vision statement helps clarify the scope of the product. + + If the product already exists, write a vision statement for this version. What will the product's users be able to do that they could not do before? + +## <a name="Scenarios"></a> Write scenarios + Work with your customer and other stakeholders to create scenarios, and enter them as requirement work items, with the Requirement Type field set to Scenario. + + A scenario or use case is a narrative that describes a sequence of events, shows how a particular goal is achieved, and usually involves interaction between people or organizations and computers. + + Give it a descriptive title that clearly distinguishes it from others when viewed in a list. Make sure that the principal actor or actors are stated and that their goal is clear. For example, this would be a good title: + + Customer buys a meal. + + You can write a scenario in the following forms. Sometimes it can help to use more than one form: + +- One or two sentences in the work item description: + + A customer orders a meal on a Web site and pays with a credit card. The order is passed to a restaurant, which prepares and delivers the meal. + +- Numbered steps in the work item description: + + 1. A customer visits the Web site and creates an order for a meal. + 2. The Web site redirects the customer to a payment site to make payment. + 3. The order is added to the restaurant's work list. + 4. The restaurant prepares and delivers the meal. + +- Storyboard. A storyboard is essentially a cartoon strip that tells the story. You can draw it in PowerPoint. Attach the storyboard file to the requirement work item, or upload the file to the team portal, and add a hyperlink to the work item. + + A storyboard is especially useful for showing user interactions. But for a business scenario, it is recommended to use a sketch style that makes it clear that this is not the final design for the user interface. + +- Requirement documents. Requirement documents give you the freedom to provide the appropriate level of detail for each requirement. If you decide to use documents, create a Word document for each requirement, and attach the document to the requirement work item, or upload the file to the team portal and add a hyperlink to the work item. + +- Unified Markup Language (UML) sequence diagram. A sequence diagram is especially useful where several parties interact. For example, ordering the meal requires the customer, the DinnerNow Web site, the payment system, and the restaurant to interact in a specific sequence. Draw the sequence diagram in a UML model, check it into Team Foundation Server, and enter a link in the requirement work item. For more information, see [UML Sequence Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409389). + +### Specific scenarios + Start by writing specific scenarios, which follow a particular set of actors through a specific sequence. For example, "Carlos orders a pizza and garlic bread at the DinnerNow Web site. The Web site redirects Carlos to Woodgrove Bank's payment service. Fourth Coffee prepares the pizza and delivers it." + + Specific scenarios help you envisage the system in use and are most useful when you first explore a feature. + + It can also be useful to create named personas that describe the backgrounds and other activities of people and organizations. Carlos sleeps rough and uses an Internet café; Wendy lives in a gated community; Sanjay orders meals for his wife at her work; Contoso runs a chain of 2,000 restaurants worldwide; Fourth Coffee is run by a couple who deliver by bicycle. + + More generic scenarios that are written in terms of "a customer," "a menu item," and so on can be more convenient but are less likely to lead to the discovery of useful features. + +### Levels of detail + In Iteration 0, write a few important scenarios in some detail, but write most scenarios in outline. When an iteration approaches in which a particular scenario is to be fully or partly implemented, add more detail. + + When you first consider a scenario, it can be useful to describe the business context, even aspects in which the product takes no part. For example, describe the DinnerNow method of delivery: Does each restaurant organize its own deliveries, or does DinnerNow run a delivery service? The answers to such questions provide useful context for the development team. + + The more detailed scenarios that you develop at the start of an iteration can describe user interface interactions, and storyboards can show user interface layout. + +### Organizing the scenarios + You can organize scenarios by using the following methods: + +- Draw use case diagrams that show each scenario as a use case. This method is recommended because it makes the scenarios very easy to present and discuss. For more information, see [UML Use Case Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409432). + + - Link each use case to the work item that defines the scenario. For more information, see [Link model elements and work items](https://msdn.microsoft.com/library/dd465152). + + - Draw Extends relationships to show that one scenario is a variation of another. For example, "Customer specifies separate payment and delivery addresses" is an extension of the basic "Customer makes an order" use case. Extensions are particularly useful to separate out scenarios that will be implemented in a later iteration. + + - Draw Includes relationships to separate a procedure such as "Customer logs on," which is common to several use cases. + + - Draw generalization relationships between general scenarios such as "Customer pays" and specific variants such as "Customer pays by card." + +- Create parent-child links between scenario work items. You can view the hierarchy in Team Explorer. For more information, see [Arrange requirements into a product plan](arrange-requirements-into-a-product-plan.md). + +## <a name="Model"></a> Model the business domain + Create a UML model that describes the principal activities and concepts that are involved in the use of your product. Use the terms that are defined in this model as a "ubiquitous language," in the scenarios, in discussions with the stakeholders, in the user interface and any user manuals, and in the code itself. + + Many requirements are not explicitly stated by your customer, and comprehending the implied requirements depends on an understanding of the business domain, that is, the context in which the product will work. Some of the work of requirements gathering in an unfamiliar domain is, therefore, about gaining knowledge of that context. After this kind of knowledge has been established, it can be used on more than one project. + + Save the model in version control. + + For more information, see [Model user requirements](https://msdn.microsoft.com/library/dd409376). + +### Modeling behaviors + Draw activity diagrams to summarize scenarios. Use swimlanes to group the actions that are performed by different actors. For more information, see [UML Activity Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409389). + + Although a scenario usually describes a specific sequence of events, an activity diagram shows all the possibilities. Drawing an activity diagram can prompt you to think about alternative sequences and to ask your business clients what should happen in those cases. + + The following illustration shows a simple example of an activity diagram. + + ![Activity with three actions and a loop.](_img/uc_reqmwfact.png "UC_ReqmWFAct") + + Where the interchange of messages is important, it might be more effective to use a sequence diagram that includes a lifeline for each actor and major product component. + + Use case diagrams let you summarize the different flows of activity that your product supports. Each node on the diagram represents a series of interactions between the users and the application in pursuit of a particular user goal. You can also factor common sequences and optional extensions into separate use case nodes. For more information, see [UML Use Case Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409389.aspx). + + The following illustration shows a simple example of a use case diagram. + + ![Use cases for previous actions](_img/uml_reqmwfuc.png "UML_ReqmWFUC") + +### Modeling concepts + Draw domain class diagrams to describe the important entities and their relationships that are mentioned in the scenarios. For example, the DinnerNow model shows Restaurant, Menu, Order, Menu Item, and so on. For more information, see [UML Class Diagrams: Guidelines](https://msdn.microsoft.com/library/dd409389). + + Label the roles (ends) of the relationships with names and cardinalities. + + In a domain class diagram, you do not typically attach operations to the classes. In the domain model, the activity diagrams describe the behavior. Assigning responsibilities to program classes is part of the development work. + + The following illustration shows a simple example of a class diagram. + + ![Rule in Comment attached to Order class.](_img/uml_reqmcd2.png "UML_ReqmCD2") + +### Static constraints + Add to the class diagrams constraints that govern the attributes and relationships. For example, the items on an order must all come from the same restaurant. These types of rules are important for the design of the product. + +### Model consistency + Ensure that the model and scenarios are consistent. One of the most powerful uses for a model is to resolve ambiguities. + +- The scenario descriptions use the terms that are defined in the model and are consistent with the relations that it defines. If the model defines menu items, the scenarios should not refer to the same thing as products. If the class diagram shows that a menu item belongs to exactly one menu, the scenarios should not talk of sharing an item between menus. + +- Every scenario describes a series of steps that are allowed by the activity diagrams. + +- Scenarios or activities describe how each class and relationship in the class diagram is created and destroyed. For example, what scenario creates a menu item? When is an order destroyed? + +## <a name="QofS"></a> Develop Quality of Service Requirements + Create work items that specify quality of service requirements. Set the Requirement Type field to Quality of Service. + + Quality of service or non-functional requirements include performance, usability, reliability, availability, data integrity, security, afford-ability, service-ability and upgrade-ability, deliver-ability, maintainability, design, and fit and finish. + + Consider each of these categories for each scenario. + + The title of each quality of service requirement should capture its definition by presenting a context, an action, and a measurement. For example, you might create the following requirement: "During a catalog search, return the search results in less than three seconds." + + In addition, it is useful to capture more detail that explains why the requirement is necessary. Describe why the persona would value the requirement and why this level of service is required. Provide context and justification. This explanation may include useful risk management information such as data from a market survey, a customer focus group, or a usability study; help desk reports/tickets; or other anecdotal evidence. + + Link the quality of service requirement to any scenario (requirement work item) that is affected by the quality of service. Linking related work items allows users of Team Foundation Server to keep track of dependent requirements. Queries and reports can show how quality of service requirements affect the functional requirements that are captured as scenarios. + +## <a name="Review"></a> Review requirements + When the requirements have been written or updated, they should be reviewed by the appropriate stakeholders to ensure that they adequately describe all user interactions with the product. Common stakeholders might include a subject matter expert, a business analyst, and a user experience architect. The scenarios are also reviewed to ensure that they can be implemented in the project without any confusion or problems. If any problems are spotted, the scenarios must be fixed so that they are valid at the conclusion of this activity. + + Create a review work item to track the review. This item provides important evidence for a Standard CMMI Appraisal Method for Process Improvement (SCAMPI) appraisal and may provide a good source of information for root cause analysis in the future. + + Review each scenario for the following characteristics: + +- The scenario is written in the context of what task users must perform, what they already know, and how they expect to interact with the product. + +- The scenario outlines a problem and is not obscured by proposed solutions to the problem. + +- All relevant user interactions with the product are identified. + +- The subject matter expert, the business analyst, and the user experience architect review each scenario in the context of the project to validate that all scenarios can be implemented successfully. If a scenario is not valid, it is revised so that it is valid. + +- The scenario can be implemented with the available techniques, tools, and resources and within budget and schedule. + +- The scenario has a single interpretation that is easily understood. + +- The scenario does not conflict with another scenario. + +- The scenario is testable. + +## <a name="Validate"></a> Validation + Plan to deploy beta versions of the product into its working environment before its final release. Plan to update the requirements, based on stakeholder feedback from that deployment. + + Validation means ensuring that the product fulfills its intended use in its operating environment. In MSF for CMMI, validation is achieved by demonstrating working software to the stakeholders at the end of every iteration throughout the project. The schedule is arranged in such a way that concerns that are fed back to the developers from early demonstrations can be dealt with in the plan for the remaining iterations. + + To achieve true validation, the product must not only be run in a demonstration or simulated context. As far is as practicable, it should be tested in real conditions. + +## <a name="Inspect"></a> Inspecting and editing the requirements + The scenario and quality of service requirements, which lead to most development tasks, can be inspected by using the customer requirements query. If you prefer to display all requirements, you can [write a query](../../track/using-queries.md) that returns all work items of the requirement work item type. Set the columns of the result to show the iteration path. + + Your team should create most requirements in the early iterations of the project. New requirements will be added and others adjusted as feedback is gained from early versions. + +## Additional resources + For more information, see the following Web resources: + +- [Modern Requirements Suite 4TFS](http://www.modernrequirements.com/), a requirement management software platform that bi-directionally connects Microsoft Office technologies with VSTS and TFS to increase stakeholder engagement and provide end-to-end traceability. + +- [A Practical Guide to Feature Driven Development](http://go.microsoft.com/fwlink/?LinkId=179031), Stephen R. Palmer and Malcolm J. Felsing; Prentice-Hall PTR, 2002. + +- [Streamlined Object Modeling: Patterns, Rules and Implementation](http://go.microsoft.com/fwlink/?LinkId=179032), Jill Nicola, Mark Mayfield, and Mike Abney; Prentice Hall PTR, 2001. + +- [Agile Modeling: Effective Practices for Extreme Programming and the Unified Process, Scott Ambler](http://go.microsoft.com/fwlink/?LinkId=179033); Wiley, 2002. + +- [Domain Driven Design: Tackling Complexity in the Heart of Software](http://go.microsoft.com/fwlink/?LinkId=179034), Eric Evans; Addison Wesley Professional, 2003. + +- [Object Design: Roles, Responsibilities and Collaborations, Rebecca Wirfs-Brock and Alan McKean](http://go.microsoft.com/fwlink/?LinkId=179035); Addison Wesley Professional, 2002. \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-engineering.md b/docs/work/guidance/cmmi/guidance-engineering.md new file mode 100644 index 00000000000..f58e74463df --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-engineering.md @@ -0,0 +1,24 @@ +--- +title: Engineering | VSTS & TFS +description: Reads the Engineering section of the MSF for CMMI Process Improvement guidance covers the value-added activities for discovering the information that is required to design and build software products - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 53c52c0e-da53-4f9c-afc4-6c6260d32ccc +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Engineering + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +The Engineering section of the MSF for CMMI Process Improvement guidance covers the value-added activities for discovering the information that is required to design and build software products. The Engineering grouping of process areas in the CMMI includes Requirements Development, Requirements Management, Technical Solution, Product Integration, Verification, and Validation. All of these are model level 2 or 3 process areas. + + For more information about CMMI see [Background to CMMI](guidance-background-to-cmmi.md). + + +|**Vision and Requirements:** Capture the product vision and requirements.|[Develop requirements](guidance-develop-requirements.md)<br />[Arrange requirements into a product plan](arrange-requirements-into-a-product-plan.md)| +|**Architecture:** Define or capture the architecture of your solution.|[Create a solution architecture](guidance-create-solution-architecture.md)| +|**Develop:** Implement and build your solution.|[Implement development tasks](guidance-implement-development-tasks.md)<br />[Building a product](guidance-build-product.md)| +|**Verify and Validate:** Verify your solution.|[Track bugs](track-bugs.md)| \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-implement-development-tasks.md b/docs/work/guidance/cmmi/guidance-implement-development-tasks.md new file mode 100644 index 00000000000..e6223162b22 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-implement-development-tasks.md @@ -0,0 +1,100 @@ +--- +title: Implement development tasks | VSTS & TFS +description: Implements the development task that involves adding the appropriate new functionality to your software - VSTS & TFS +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: e3345668-394d-419a-b813-8fa68b6b1bfc +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Implement development tasks + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +A development task is a small piece of development work that stems from a requirement. Implementing a development task involves adding the appropriate new functionality to your software. After you complete a development task, it should be unit tested, reviewed, code analyzed, and integrated into the existing code base. + + +## <a name="Estimate"></a> Estimate + Estimating the cost of development tasks helps control the scope of features and schedule development work. Cost estimates for all development tasks should be completed and any issues should be resolved before the iteration planning meeting. If the total cost of the development tasks is more than can be done in an iteration, a task must be deferred or reassigned. After a development task is chosen, it is the responsibility of the developer to cost the task. + + Create a task work item for each development task that is chosen, and link it to the requirement from which it was created. This is accomplished from the Implementation tab on either the task or the requirement work item. Base your estimates on the time that was required to complete similar tasks, and be sure to factor in the cost of writing unit tests. For each task, enter the estimate into the Original Estimate field of the task work item. + + The form for task work items stores data in the fields and tabs that the following illustrations show: + + ![CMMI Task work item form](_img/procguid_cmmi_wtask.png "ProcGuid_CMMI_WTask") + + After tasks have been created and estimated, use the Work Breakdown query to view the breakdown of all your requirements and tasks. For more information, see [CMMi process, List work items](../cmmi-process.md). + +## <a name="Design"></a> Design Documents + Your design documents should include enough information to describe to a developer how to write code to implement the requirement in the product. + + Design documents can be a collection of specifications, requirement work items, and other documents, depending on your team process. + + Consider using design patterns, object-oriented design, structural models, modeling languages, entity relationship models, and other techniques in the guidelines for the design that is determined for your team. It is also a good idea to document the rationale for key decisions that were made. For example, if there is a significant effect on cost, schedule, or technical performance, document the reason for the decisions behind these effects, and include that information in your design. + + After you create the necessary design documents, store them where your team members can share them. For more information, see [Manage documents and document libraries](../../../report/sharepoint-dashboards/manage-documents-and-document-libraries.md). + +## <a name="DesignReview"></a> Design Review + A design review is used to ensure that the new or revised design is technically accurate, complete, testable, and of high quality and that it implements the requirement correctly. Design reviews are a key method of guaranteeing quality early by identifying problems before they appear in the code. Design reviews also provide additional insight about the design from other developers. + + The developer who is responsible for creating the design should organize the design review by identifying reviewers, scheduling the review, and distributing the design to all the reviewers. + + Any stakeholders who are involved or affected by the design should participate in the review. Typically this might include the project manager, the lead developer, and the tester for the design area. All developers who are on the same team as the developer whose code is being reviewed should also participate in the review. + + Schedule the review meeting, and distribute the design documents early enough to give each reviewer sufficient time to read them. Plan the length of the review meeting to correspond to how many technical details must be reviewed. + +### Verify Quality + Ensure that the design is testable. Does it build code that cannot be verified or validated in a reasonable manner? If so, you cannot ensure the quality of the code, and the design must be reworked. Examine the design documents for problems that will lead to code errors. Look for incorrect interface descriptions, design mistakes, or naming confusion. Compare the design documents against existing criteria, such as operator interface standards, safety standards, production constraints, design tolerances, or parts standards. Create bug work items that describe any flaws that are found in the design documents, and assign them to the responsible developer. + +### Create a Review Work Item for the Design + A review work item is created to document the results of the design review. The review team must decide the next steps for the design, which depend on the magnitude of the changes necessary. If no changes are necessary, set the State of the work item to Closed, set the Reason to Accepted (as is), and note that coding can start on the design. If minor changes are necessary, set the State of the work item to Resolved, and set the Reason to Accepted with Minor Changes. This indicates that coding can start after the minor changes have been implemented in the design. If major changes are necessary, set the State of the work item to Resolved, and set the Reason to Accepted with Major Changes. The design must be reworked and another design review must be performed before coding can start on the design. + +## <a name="Unit"></a> Unit Tests + Unit tests verify the correct implementation of a unit of code. Writing and performing unit tests identifies bugs before testing starts and, therefore, helps reduce the cost of quality control. Developers must write unit tests for all code that will be written as part of implementing a development task or fixing a bug. For more information, see [Unit Test Your Code](https://msdn.microsoft.com/library/dd264975). + +## <a name="Analysis"></a> Code Analysis + Code analysis checks code against a set of rules that help enforce development guidelines. The goal of code analysis is to have no code analysis violations or warnings. Code analysis can inspect your code for more than 200 potential issues in naming conventions, library design, localization, security, and performance. + + If you start to run code analysis early in your development cycle, you can minimize violations and warnings on an ongoing basis. + + However, if you run code analysis on existing code that has not been checked before, you may have many rule violations. If this is the case, you might want to create a baseline set of critical rules that the code must pass and then expand the rule set as the more critical issues are resolved. That way, a team can move forward on new functionality as it improves its existing code base. + + For more information, see [Analyzing Application Quality by Using Code Analysis Tools](https://msdn.microsoft.com/library/dd264897) and [Enhancing Code Quality with Team Project Check-in Policies](https://msdn.microsoft.com/library/dd264876). + +## <a name="PrepareForCodeReview"></a> Code Review Process + The lead developer should organize the code review by identifying the reviewers, scheduling the code review, and sending the code for review to all reviewers. To prepare for the code review, take the following steps: + +1. Create a review work item to track the decisions that are made in the review. If no changes are necessary, set the State of the work item to Closed, set the Reason to Accepted (as is), and note that coding can start on the design. If minor changes are necessary, set the State of the work item to Resolved, and set the Reason to Accepted with Minor Changes, which indicates that coding can start after the minor changes have been implemented. If major changes are necessary, set the State of the work item to Resolved, and set the Reason to Accepted with Major Changes. The design must be reworked and another design review must be performed before coding can start on the design. + +2. Determine who will participate in the code review. Typically, at least the lead developer and the architect who is responsible for the code area should participate in the review. + +3. Schedule a review meeting with the reviewers, and allow sufficient time for each reviewer to read and understand the code before the meeting. Plan the length of the review meeting to correspond to how much code must be reviewed. + +### Code Review + A code review is used to ensure that new or changed code meets an established quality bar before it is integrated into the daily build. Quality considerations are coding standards, conformance to architecture and design, performance, readability, and security. Code reviews also provide additional insight from other developers about how code should be written. + +||| +|-|-| +|Verify Code Relevance|The code that is being reviewed is relevant to the task for which the code is written. No code changes should be allowed that do not address the functionality that is implemented or corrected.| +|Verify Extensibility|The code is written so that it can be extended, if that is the intent, or reused in other areas of the system.<br /><br /> String constants that are used in the code are correctly put in resources that can be internationalized.| +|Verify Minimal Code Complexity|Repeated code can be simplified into common functions.<br /><br /> Similar functionality is put in a common procedure or function.| +|Verify Algorithmic Complexity|The number of execution paths in the code that is reviewed is minimized.| +|Verify Code Security|The code is checked for the protection of assets, privilege levels, and the use of data at entry points.| + +## <a name="Refactor"></a> Refactor Code + Code is refactored after a code review has determined that changes must be made to address code quality, performance, or architecture. + + Read the code review work item notes to determine how you will refactor the code. + + Apply the refactoring incrementally, one change at a time. Change the code and all references to the modified area as necessary. + + Perform unit tests so that the area remains semantically equivalent after the refactoring. Fix any unit tests that do not work. Perform code analysis, and fix any warnings. Perform unit tests again if code changes are made as a result of code analysis. + +## <a name="Integrate"></a> Integrate Changes + The final step is to integrate the changes by checking them in to version control. Before code is checked in, any tests that are required by your process should be performed. For more information about how to check code for problems before it is checked in, see [Enhancing Code Quality with Team Project Check-in Policies](https://msdn.microsoft.com/library/dd264876). + + If the work item that is associated with the changes is a scenario or a quality of service requirement of which you are not the owner, notify the owner that the changes are complete. Set the task work item to Resolved, and assign it to one of the testers who created the test cases for the work item. + + If the work item that is associated with the changes is a bug, set the bug work item to Resolved, and assign it to the original person who created it. \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-iteration-activities.md b/docs/work/guidance/cmmi/guidance-iteration-activities.md new file mode 100644 index 00000000000..ce8d07de6d9 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-iteration-activities.md @@ -0,0 +1,103 @@ +--- +title: Iteration activities | VSTS & TFS +description: Specify the set of requirements, review the requirements that are assigned to the iteration and create task work items for the work that must be performed to implement and test each requirement - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 085a4bc1-e4f3-4105-bf29-add86b2dfd80 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Iteration activities + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +In MSF for CMMI Process Improvement, you plan a project as a series of iterations. Each iteration is typically four to six weeks long, during which the development team implements a specified set of requirements. + +## At the start of an iteration + Iteration planning takes place at or before the start of each iteration. It includes the following tasks: + +- Review the requirements that are assigned to the iteration, and define them in more detail. + +- Create task work items for the work that must be performed to implement and test each requirement. Link the tasks to the requirement work item by using the parent link type. + +- Set the Original Estimate field of each task. Divide tasks that have estimates that are longer than a few days. + +- Compare the estimates with the time that is available for the iteration. If the estimate total is too long, simplify some of the requirements, or defer them to later iterations. + + For more information, see [Plan an iteration](guidance-plan-an-iteration-cmmi.md). + +## During an iteration + +### Task execution + Team members start and complete tasks, recording these events in work items. Completion of a task might include checking in program code and other artifacts. Each task should last no more than a few days; larger tasks are split during iteration planning. For more information, see and [Day in the life of a Developer: Suspend work, fix a bug, and conduct a code review](../../../tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md). + + If a team member encounters any obstacle to their work that cannot be resolved immediately, they should log an issue work item. + +### Tests + Manual or automatic tests should be developed, and test cases should be linked to the product requirements. A product requirement cannot be considered completed until the work item is linked to test cases that pass and that demonstrate that it is working. + + Development work for the tests should be included in the tasks that are linked to the product requirement. + +### Rolling and nightly builds + The build system builds the product from recently checked-in updates and runs automated tests. You can set principal tests to run on a continuous basis, and you can set a full suite to run every night. This practice helps to ensure that multiple increments do not create an accumulation of bugs. For more information see [Continuous integration & delivery](/vsts/build-release/index). + +### Stand-up meeting + The whole team conducts a brief daily review of progress on the tasks of the iteration. Team members can use the [task board](../../scrum/task-board.md) or project the [Progress Dashboard](../../../report/sharepoint-dashboards/progress-dashboard-agile-cmmi.md) on the wall, share it by using Office Live Meeting, or both. + +- Each team member briefly reports recent progress, work in hand for the day, and any blocking issues. + +- The project manager or team leader reports on progress toward resolving issues. For more information, see [Manage issues](guidance-manage-issues-cmmi.md). + +- The bug count is reviewed. Bugs should be given priority over new development. Aim to keep the bug count low throughout the project. If the number of bugs increases, discuss the causes and the possible impact on development work. + +- The burndown rate is reviewed. + +### Scope adjustments + The Burndown Chart might indicate that the tasks will not be completed by the end of the iteration. In that case, the project manager or team leader initiates a discussion about how requirements can be simplified so that tasks can be cut. For more information, see [Burndown and Burn Rate](../../../report/sql-reports/burndown-and-burn-rate-report.md). + + The requirements and corresponding tests are adjusted. A new requirement feature is put on the project plan for the missing functionality. In the project plan review that is held toward the end of the iteration, the feature might be assigned to a future iteration or cut. + + Change requests and risks are not considered during an iteration. + +### Triage + Some team members (usually not the whole team) meet regularly to review bugs. Every team member must log a bug when they discover a defect. A logged bug starts in the Proposed state, and the purpose of the triage meeting is to decide whether to fix it, postpone it to a later iteration, or reject it. + + For more information, see [Track bugs](track-bugs.md). + +## At the end of an iteration + +### Verification +The requirements are considered completed only if the associated tests pass. + +### Retrospective + Process improvement is an important CMMI goal. + + An iteration retrospective reflects on what went well or badly in the iteration and considers improvements to the process and tools that are used by the team. A significant volume of material about retrospectives is available on the Web. + + Team members should avoid any assignment of blame. Try to improve the process so that mistakes that are made by individuals are less likely to have an effect. + + When you introduce a change in your process, make sure that the team agrees on the following decisions: + +- How you will know whether it was an improvement. + +- When you will make that assessment. + +- What you will do as a result. + +### Integration + If this project is part of a larger program, each team performs its work in a branch of the version control system. The Main branch is reserved for integrating the work of the teams. At the end of an iteration, the team might perform an integration with the main branch. For more information, see [Use branches](../../../tfvc/use-branches-isolate-risk-team-foundation-version-control.md). + + The integration consists of two steps: + +- A forward integration, to merge the newer code from the main branch into the local project branch. After performing the merge, automatic and manual tests are run. This will create some defects. The defects are fixed at high priority. + +- A reverse integration. The local branch code is merged into the main branch, and the build and full test suite on the main branch runs. The changes are reversed if any errors occur. Introducing errors to the main branch is frowned upon. If no errors occur, the integration is declared completed. + + We recommend that you perform an integration at the end of each iteration. If you delay it, the list of bugs to be fixed after forward integration is longer. If it takes a long time to fix the bugs, the main branch will have new material, and you will have to perform another forward integration. + +### Preparing for the Next Iteration + Toward or at the end of an iteration, several project management activities are performed. These include reviewing risks and reviewing the plan with regard to change requests and changed development estimates. + + For more information, see [Project activities](guidance-project-activities.md). \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-manage-change.md b/docs/work/guidance/cmmi/guidance-manage-change.md new file mode 100644 index 00000000000..b872cbbe006 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-manage-change.md @@ -0,0 +1,41 @@ +--- +title: Manage change | VSTS & TFS +description: Use the change request work items to track and control all changes to the product and supporting systems - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 9c6fde5a-fdbd-4ac4-bd29-8049ff316351 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Manage change + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +You can use change request work items to track and control all changes to the product and supporting systems. All change requests are initiated as the result of a deviation from the baseline, which consists of the original requirements that were identified for the project. For example, if a meeting with a user uncovers new requirements, a change request should be created to propose updating the requirements baseline. For more information about CMMI see [Background to CMMI](guidance-background-to-cmmi.md). + +## <a name="Creating"></a> Create a change request + When you realize that an original requirement must change, you create a change request work item and link it to the old requirement work item by using an Affects link type. A requirement work item that has details of what is new or has changed should also be created and linked to the change request. All change requests are extensively analyzed for impact on the user, product, and teams. During this analysis, tasks may be broken out for estimation. These new task work items should be linked to the new requirement work item to provide traceability. This is accomplished by adding the tasks on the Implementation tab of the work item form. + + The change request and resultant new work items must contain details of all new work that is required and all existing work that is to be removed, modified, or obviated. You can create a change request from the home page of the web portal or from the Work page in Team Explorer as described in [Get started using work items](http://msdn.microsoft.com/en-us/aa03a20b-c017-4af2-9052-14f5e499f5de). You can specify the change that you are requesting in the Title field, the team member who owns the change, and other information about the request. + + ![Change Request Work Item Form](_img/procguid_cmmi_form.png "ProcGuid_CMMI_form") + + For more information about how to complete the work item, see [CMMI work items and workflow](http://msdn.microsoft.com/en-us/b5b7b488-3248-485c-b896-a2c6f824a219). + +## <a name="Analyzing"></a> Analyze a change request + Before a change request is analyzed, it should be triaged by a configuration control board. A configuration control board is a group of people who are responsible for approving and denying change requests and who ensure that changes are implemented correctly. You can indicate that a request must be triaged by setting the Triage field in the work item to Pending. For more information, see [Change request fields (CMMI)](guidance-change-request-field-reference-cmmi.md). Analysis of change requests can be a drain on resources, and it is important that the change request queue does not put undue demands on the team and affect the project timeline. + + A change request should be analyzed to determine the scope of its impact on existing and planned work. The effect must be known so that it can be used to estimate the cost in person-hours to implement the change. + + Analyze the risk of accepting the change. Are external teams dependent upon the code or feature that would be changed, and could their schedules be adversely affected? Could assignment of resources to this change adversely affect other important feature areas or requirements of the product? + + As part of your analysis, request input from stakeholders and add that input to the change request work item. If the change requires changes to other planning documents, note that in the change request, and change those documents as appropriate. This will maintain the revision history and enable everyone to see the details. This mitigates risk from bad communication and provides important evidence for a Standard CMMI Appraisal Method for Process Improvement (SCAMPI) appraisal. + + If a change request is accepted, change the State from Proposed (the default for new change requests) to Active. + +## <a name="Monitoring"></a> Monitor change requests + While a change request is active, you can monitor it by viewing the Open Change Requests With Requirements query. Also, you can [create an email alert](../../track/alerts-and-notifications.md) for when a Change Request is created. Change requests should be processed in a reasonable amount of time. + + If a change request does not receive the attention that it requires, escalate the matter by creating an issue work item. Link the new issue to the change request, and escalate the issue to get the change request impact assessment on track. \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-manage-issues-cmmi.md b/docs/work/guidance/cmmi/guidance-manage-issues-cmmi.md new file mode 100644 index 00000000000..babbadf1992 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-manage-issues-cmmi.md @@ -0,0 +1,57 @@ +--- +title: Manage issues (CMMI) | VSTS & TFS +description: Use the issue work item to help you to track problems with the project plan and its activities and tasks - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 4f90afe9-9748-42e9-9117-e98ee6543417 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Manage issues (CMMI) + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +You can use the issue work item to help you track problems with the project plan and its activities and tasks. Issues are not to be confused with bugs. The bug work item type is provided to track problems with the code and specific failing tests. The issue work item type is provided to help you track all other problems with the project. Some examples are ambiguity in the requirements, unavailability of personnel or other resources, problems with environments, other project risks that are occurring, and, in general, anything that puts successful delivery of the project at risk. + + What makes issues different is that they represent unplanned activities. Resolving issues is not normal project work. Therefore, it must be tracked and given special attention. Tracking these project problems with issue work items and using the reporting and queries helps to develop a core capability to manage and resolve issues quickly and effectively. + +## <a name="Create"></a> Create an issue work item + When an issue occurs, create an issue work item, describe the problem, and describe suggested resolutions, if any are known. The issue work items for the project create a significant body of evidence for a Standard CMMI Appraisal Method for Process Improvement (SCAMPI) appraisal. For more information about CMMI, see Background to [Background to CMMI](guidance-background-to-cmmi.md). + + The work item form for an issue stores data in the fields and tabs that appear in the following illustrations: + + ![CMMI Issue work item form](_img/procguid_cmmi_wform.png "ProcGuid_CMMI_Wform") + +## <a name="Review"></a> Review the issues + The open issues on the project should be reviewed regularly. + + To view the issues, run the Open Issues query that is provided with the template. Sort the issues by status using "proposed" to triage any new issues. + +## <a name="Analyze"></a> Analyze issues + Each new issue should be analyzed for both its symptoms and root cause. A plan of corrective action should be made to address the symptoms or (preferably) the root cause. Record the plan on the Corrective Action tab of the issue. The decision to work around the issue or try to fix the root cause should reflect the project risks. These decisions should be documented in the issue work item. They will provide evidence for a SCAMPI appraisal and demonstrate a level of capability at risk management that is important for level 3 appraisal. + + Working around symptoms is a lower-maturity behavior that shows a level of capability that is adequate for a CMMI model level 2 or 3 appraisal. Root cause analysis and resolution implies that the organization intends that the issue should not recur. This is a higher-maturity behavior. It demonstrates a level of capability in issue resolution and process improvement that is typical of an organization that achieves a level 4 or 5 appraisal. + + Record the action plan, and then break the work into task work items, linked to the issue work item as children. Tasks should be assigned to individual team members for resolution. Each task should be created together with a task type of "corrective action." + + ![CMMI Task work item form](_img/procguid_cmmi_wtask.png "ProcGuid_CMMI_WTask") + +## <a name="Verify"></a> Verify Resolved Issues + During your regular review of open issues, it's a good idea to review issues that have been marked as resolved. If a consensus accepts the documented resolution, mark the issue as "closed," and set its reason to "resolved." Use the open issues query, and filter for state equals "resolved." + +## <a name="Resolution"></a> Review issues for resolution + After all tasks under an issue have been completed, the stakeholders should decide whether the issue has been resolved. + + Open the issue work item and any blocked work items. You can refer to the Corrective Actions tab to view the original plan for action and what action was taken. You can also see the task work items that are associated with the issue by displaying the All Links tab for the Child links. Has the corrective action successfully unblocked the work items and resolved the issue? If not, rework the corrective actions, and reassign them to team members. Was the corrective action performed promptly? Was an unexpected external (or special cause) event and impact on the schedule critical path avoided? Are the project commitments safe, or must they be renegotiated? Record all this detail in the work item. This generates valuable evidence for a CMMI appraisal. + + If the stakeholders are satisfied that the issue has been resolved successfully, mark the issue as "resolved." It can then be formally closed. + + If the issue has not been successfully resolved, rework the corrective action tasks, and assign them to suitable personnel for resolution. Reconsider the priority of the issue, and consider raising it to expedite resolution and to avoid additional delay. + +## Additional resources + For more information about SCAMPI appraisals, see the following Web page: [Software Engineering Institute](http://go.microsoft.com/fwlink/?LinkId=179026). + +## Related notes + [Fields that track bugs, issues, and risks (CMMI)](guidance-bugs-issues-risks-field-reference-cmmi.md) \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-manage-risks.md b/docs/work/guidance/cmmi/guidance-manage-risks.md new file mode 100644 index 00000000000..3f70bdf4b54 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-manage-risks.md @@ -0,0 +1,57 @@ +--- +title: Manage risks | VSTS & TFS +description: Understand how Risk implies the actual outcomes may vary, sometimes significantly, from desired outcomes - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 8df2e7de-3a67-4f3d-9abb-3067fa3ddd75 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Manage risks + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +Risk implies that actual outcomes may vary, sometimes significantly, from desired outcomes. Both the probability of this variance and the degree of variance between actual and desired outcomes is encapsulated in the term "risk." When you manage risk, you strategically minimize the variance between the outcome that you want and the actual outcome. + + The ability to identify, classify, analyze, and manage risks is an organizational capability that is required to achieve a Standard CMMI Appraisal Method for Process Improvement (SCAMPI) appraisal at level 3. For more information about CMMI, see [Background to CMMI](guidance-background-to-cmmi.md). + + By managing these event-driven risks, a significant contribution is made to the overall goal of managing risk at the project, portfolio, and organizational levels. Good event-driven risk management contributes to an outcome that is satisfactory to all stakeholders and that deviates little from the initially desired outcome. It contributes to an expectation of "no surprises!" + +## <a name="Defining"></a> Define risks + Thinking of risks in this manner is sometimes referred to as the event-driven risk model. This implies that a list of risks is a list of potential future events. Each risk describes some event that may occur in the future. It may include some information about the probability of occurrence. It should include a description of the impact that such an occurrence would have on the project plan. It may also include a description of ways to reduce the probability of occurrence and ways to mitigate the impact of occurrence. It may also include suggested forms of recovery after an occurrence. + + For each risk that is identified, create a risk work item in the team project. + +## <a name="WorkItem"></a> The risk work item + The Risk Management (RSKM) process area in the CMMI focuses on the management of these event-related risks. MSF for CMMI Process Improvement and Visual Studio Team Foundation Server make this easier by providing the risk work item type. By using the risk work item type, you can define and track a list of risks. It provides fields to describe the risk, the probability of occurrence. It also provides fields for actions that can be taken to reduce the probability of occurrence, mitigate the impact, and implement contingency plans for recovery in the event of an occurrence. + + The initial project risks should be identified during project planning. The risk list should be revisited during iteration planning at the start of each project iteration. + + The work item form for a risk stores data in the fields that the following illustration shows: + + ![Risk work item form](_img/procguid_cmmiriskform.png "ProcGuid_CMMIriskform") + +## <a name="SelectActions"></a> Select actions to be taken + After you create a list of risks and they have been sufficiently analyzed, it is time to decide what, if any, actions will be taken to manage these risks. Are there any actions that will reduce the probability of occurrence that you want to take now or describe in an iteration plan? Are there any actions that would mitigate the impact of occurrence that you want to take now or describe in an iteration plan? Taking actions to reduce or mitigate risks costs time and resources. This must be traded against using those resources and the available time to move the project work forward and turn the scope into working software. Document the risk reduction and mitigation actions that you plan on the Mitigation tab of the risk. + + The overall risk profile for the project must be considered when you decide when to take action to reduce the probability or mitigate the impact of risks. If the risk profile says "any loss of life is unacceptable," any risk that might cause a loss of life must be managed, and reduction and mitigation actions must be planned and taken. + + You should ensure that risks are managed in line with project governance constraints and in an appropriate balance with the need to achieve delivery of all value-added work within the available time and budget. + + If a risk is selected for reduction of probability or mitigation of its impact, plan this activity by breaking it into task work items and link each to a risk work item. + +## <a name="Monitor"></a> Monitor risks + Project risks should be monitored regularly. + + Use the risks query to monitor risks. Scan each active risk on the list, and consider whether the probability of occurrence has increased, whether the potential impact has changed, and whether any mitigation trigger events have occurred. If there is any material change in the information that is captured for a risk, update the work item. Also, consider whether further action needs to be taken to reduce the risk or to mitigate its impact. + + The current risk status of the project should be communicated. Reports should include information about any risks that were recently uncovered, any reduction or mitigation actions that are in progress, and any change in status that would cause a change in the earlier assessment of the risk. + +## <a name="Contingency"></a> Make contingency plans + For risks where a recovery action was defined, a plan should be made to implement the contingency if the event of occurs. For example, if there is a risk that a server might fail and the contingency is to borrow hardware from another department, you should have a plan to enact this if the server fails. Making plans in advance reduces the coordination challenge if the event occurs. A higher maturity organization with a greater capability for risk management makes contingency plans and knows how to enact them without significant impact to other project activities. Lower maturity organizations suffer panic and chaos while trying to recover from unexpected events. An organization that seeks a SCAMPI appraisal at level 3 should have documented evidence to show that contingency plans were made and, when appropriate, followed. + + Break out the contingency plan into a series of tasks or actions to be taken. Estimate each task. Create a schedule and a recommended list of assigned personnel. Describe all the resources that will be required to execute the contingency plan. + + Add the contingency plan to the risk work item on the Contingency Plan tab, or add the plan as an attachment. \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-plan-a-project-cmmi.md b/docs/work/guidance/cmmi/guidance-plan-a-project-cmmi.md new file mode 100644 index 00000000000..b8c8e12c423 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-plan-a-project-cmmi.md @@ -0,0 +1,111 @@ +--- +title: Plan a project (CMMI) | VSTS & TFS +description: Understand the desired outcome of planning a project is a plan that includes a scope, a schedule, a budget, a risk management plan, and a commitment and approval from all stakeholders - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 26f38202-a173-4d10-9d56-03c9ff69546d +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Plan a project (CMMI) + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +The desired outcome of planning a project is a plan that includes a scope, a schedule, a budget, a risk management plan, and a commitment and approval from all stakeholders. With an agreed-upon project plan, you want to progress with analysis, design, development, testing, and eventually delivery. + + You can reduce risk by using an iterative development method. Iterations let you demonstrate a partly working product at the end of each iteration and act on feedback from that demonstration. Therefore, the plan provides an overall shape and is subject to review and refinement before the start of each iteration. + +## <a name="Gathering"></a> Gathering and modeling the requirements + This activity is about discussing what the system should do, with business stakeholders, prospective users, and subject matter experts. It is important to understand the business context. If you have been asked to write an application for police officers, it helps to understand their jargon, procedures, and rules. + + UML models are a useful tool for expressing and thinking about complex relationships. You can draw them in Visual Studio and link them to other documents and to Team Foundation work items. For more information see [Model user requirements](https://msdn.microsoft.com/en-us/library/dd409376). + + Update and refine the requirements model throughout the project. As each iteration approaches, add more detail to the aspects of the model that are relevant to that iteration. From the model, you can derive verification tests. + + For more information, see [Develop requirements](guidance-develop-requirements.md) and [Develop tests from a model](https://msdn.microsoft.com/en-us/library/dd409381). + +## <a name="Features"></a> Creating incremental product requirements + The requirements as you have gathered them from your customers are not directly appropriate for the purpose of scheduling incremental development. For example, to clarify the procedure when a user buys something from a Web site, you might have written a detailed series of steps: customer browses catalog, adds item to cart, checks out cart, supplies address, and pays; warehouse schedules delivery; and so on. These steps, or an equivalent activity diagram, are not incremental requirements. + + Instead, the first increment of your system might offer only one item for sale, deliver to only one address, and perform only a test transaction with the payment service. The second increment might provide a catalog that consists of a simple list. Later increments might add the option of gift wrapping the purchase or of requesting catalogs that are provided by different vendors. Some increments might be about quality of service, such as the ability to handle 1,000 customers instead of only one. + + In other words, the early increments should exercise the major use cases end-to-end and gradually add functionality throughout. + + If you work with an existing product, the principle is the same, but you start from the existing functionality. If you are unfamiliar with its internal design, the cost of updates can be difficult to estimate. It is worth being liberal with your estimates for the earlier changes. + + For more information, see [Develop requirements](guidance-develop-requirements.md). + +## <a name="EnterProductReqs"></a> Entering and editing product requirements + Record the incremental product requirements as requirement work items in Team Foundation, and set the requirements type to Feature. You can create a [backlog of requirements](http://msdn.microsoft.com/en-us/70a01e94-2dc9-4090-823c-71ee8e156e74) using TWA or Team Explorer. If you have several work items that you want to create at the same time, you can use the [Excel](http://msdn.microsoft.com/en-us/67595fec-a872-43e3-b934-9dd1a766218c). + +## <a name="Estimate"></a> Estimating the product requirements + The development team should estimate the work that is required to develop each product requirement. The estimate should be entered in hours, in the Original Estimate field of the work item. + + Early in the project, a rough estimate is all that is needed. + + Break large product requirements into smaller ones. Ideally, each product requirement will take only a few days of development time. + +## <a name="Map"></a> Assigning product requirements to iterations + Representatives of the business stakeholders and the development team should work together to assign product requirements to iterations. Typically, you do this in a meeting, where you share or project the Office Excel view of the Product Requirements query. + + The assignment is completed by using the following pieces of information: + +- The priority of the requirement. See the notes in the following subsection. + +- The estimated cost. Given the number of team members and the length of the iteration, each iteration has only a fixed number of hours that are available for development. Furthermore, a significant number of those hours will be used for iteration planning and other tasks that do not directly involve development. + +- Dependencies among the product requirements. In an incremental series of requirements, the simplest requirements must be tackled before enhancements in the same area. + + You can define the requirement in a work item by specifying a variety of information, as the following illustrations show: + + ![Requirement work item form](_img/procguid_cmmiform.png "ProcGuid_CMMIform") + +### Some guidelines on prioritization + Many detailed schemes exist for prioritization. We will examine some of these when we consider iteration planning. For now, at the project level, we include some guidelines that may be useful to help manage risk and optimize added value. + +1. Prioritize minimal end-to-end scenarios. + + Aim to achieve a simple end-to-end scenario as early in the project as possible. Later, add more features to the different parts of the scenario. This practice ensures that the principal functions of the platform and the principal ideas in the requirements are tried early. + + By contrast, do not divide the schedule according to the architecture. A schedule that completes the database, then the business logic, and then the user interface will probably require a great deal of rework to integrate the parts at the end. In the same manner, a horizontal split such as {sales component; warehouse component; payment component} is not recommended. It would probably produce a wonderful system for selling on the Web but run out of time before the business has a means of getting money from its customers. Complete components can be scheduled for later iterations only if they are truly optional add-ons. + +2. Prioritize technical risk. + + If a scenario includes a technically risky element, develop it early in the schedule. Take a "fail early" approach to risk. If something cannot be accomplished, you want to know this early in the project so that it can be canceled or replaced with an alternative approach. So prioritize technically risky requirements into early iterations. + +3. Prioritize reduction of uncertainty. + + The business stakeholders will not be sure about some requirements. It is difficult to predict what product behavior will work best in the business context. Prioritize work that is likely to reduce the uncertainties. This can often be achieved by developing a simpler version of the scenario with which users can experiment. Defer the full scenario to a later iteration, in which the results of these experiments can be considered. + +4. Prioritize highly valuable requirements. + + If possible, try to establish an opportunity-cost-of-delay function for each scenario. Use these to determine the requirements that can potentially bring more value to the customers earlier. Prioritize these requirements into earlier iterations. This may buy you the option of releasing a partial product early + +5. Group scenarios that are common to multiple personas. + + If you have scenarios that have utility for two or more personas, group these together. Rank them by the number of personas that require the scenario. Prioritize the scenarios that apply to a larger number of personas into early iterations. + +6. Rank personas. + + Personas represent market segments or user groups. Marketing people or business owners should be able to articulate the priority of such segments or groups based on utility to be delivered or the value of the segment. If segments or user groups can be ranked in priority, show this by listing the personas for each segment by rank. Identify the scenarios for the highest ranked personas, and prioritize these into earlier iterations in the schedule. + + In general, we want to prioritize the reduction of risk because of the possibility of failure. We want to prioritize common functionality because it is likely to be required and unlikely to change. We want to prioritize more valuable requirements. We want to enable the option for early release of the product to a subset of personas by prioritizing all scenarios that are required to satisfy the needs of any one persona. + +## <a name="PlanTests"></a> Planning tests + The work estimate for each requirement must include the effort that is required to test the requirement, either manually or by creating an automated test. + + Before it is considered completed, each product requirement must be linked to a set of test case work items that together demonstrate whether the requirement has been met, and the tests must pass. + + When you create or revise product requirements, the corresponding test plan must be updated. + +## <a name="ReviseProductReqs"></a> Revising the product requirements + Revisit this activity before each iteration to consider revised and new requirements, revised priorities, and revised estimates. There will be more revisions in the first few iterations. + + After the first few iterations, members of the development team will be more confident about the estimates. They should go through the estimates for the next one or two iterations and revise the Original Estimates fields of the requirements that are assigned to those iterations. + + +## Related notes +- [Background to CMMI](guidance-background-to-cmmi.md) +- [CMMI process](../cmmi-process.md) \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-plan-an-iteration-cmmi.md b/docs/work/guidance/cmmi/guidance-plan-an-iteration-cmmi.md new file mode 100644 index 00000000000..891445d6386 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-plan-an-iteration-cmmi.md @@ -0,0 +1,60 @@ +--- +title: Plan an iteration (CMMI) | VSTS & TFS +description: Understand the planning iterations to decide how long you want your iterations to be, determining how much work your team can get done in that time, and planning what work should be included in each iteration - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 63b93130-06bf-474c-883f-9514e3e92db0 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Plan an iteration (CMMI) + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +Developing software in iterations means that you divide your work into incremental stages such that you have software with progressively more working features at the end of each iteration. Ideally, you have something to show the customer after even the first iteration. Iterations let you receive feedback early so that you can make course corrections early. + + The matter of planning iterations comes down to deciding how long you want your iterations to be, determining how much work your team can get done in that time, and planning what work should be included in each iteration. + + The MSF for CMMI Process Improvement template supplies an Iteration Path field in each work item to help you track your work by iteration. You can customize that path to reflect the iterations that you plan to perform. For more information about CMMI, see [Background to CMMI](guidance-background-to-cmmi.md). + +## Create tasks to implement and test each requirement + The iteration plan is represented by the list of tasks that are scheduled for the iteration. Each task is linked to the product requirement that it implements. + + The task list is visible in the [task board](http://msdn.microsoft.com/en-us/f13e32ae-fe77-421a-b524-43b6bcd1a0f3), Work Breakdown query, and on the [Progress Dashboard](http://msdn.microsoft.com/en-us/4aa21c4a-651b-4cec-a204-59524abdae82). + + At the start of the iteration, the team reviews the requirements that are scheduled for this iteration and creates task work items. The task work items describe the work (such as design, development, and testing) that is required to complete the requirement. + + During the iteration, team members update the completion status and work remaining fields of the tasks. If the team keeps this information current, the Progress dashboard and other reports indicate how much work remains and the slope of the burndown chart indicates whether the work is likely to be completed on time. + +## <a name="PlanningTimeBound"></a> Estimate the appropriate work load for the iteration + It's most likely that, during project planning, it was agreed that product increments should be developed in a series of time-bound iterations. Typically, these iterations vary from one week to four weeks. + + The template provides the following reports, which are useful when estimating how much work to plan for an iteration. + +- **Status on All Iterations** This report helps you track team performance over successive iterations. Use the report to see how many requirements and how many hours were completed in an iteration. + +- **Requirements Overview** This report lists all requirements, filtered by area and iteration and sorted in order of importance. This report can show you how much work was completed by the team in an iteration. + +- **Burndown and Burn Rate** Burndown shows the trend of completed and remaining work over a specified time period. The burn rate shows the completed and required rate of work based on the length of the iteration. + +## <a name="Handoff"></a> Schedule an iteration demonstration and handoff + You should plan time to demonstrate the incremental functionality to stakeholders, to gather the team for a retrospective, and to hand off the completed work for validation tests. + + Typically, you should allocate time on the last day of the iteration to demonstrate the working functionality to stakeholders. + + Record the feedback, and save it on the project portal. If the demonstration brings new tasks or requirements to light, create work items as necessary. These should then be fed into future iteration plans. + +## <a name="Launch"></a> Launch an iteration + Kick off the iteration with a mini-version of the project launch. Bring the team together. Outline the goals and the scope of the iteration. Discuss and present the plan and any targets. Ensure that all team members have enough context to continue with the work in a self-organizing manner. Make time and space for questions from team members, and record any issues or risks that are brought up during the meeting. Store these as minutes in the project portal. As a project manager, follow up by creating risk and issue work items, as appropriate. + +## <a name="Tracking"></a> Track an iteration + Throughout the iteration, you can monitor its progress daily by using the burndown chart shown on the task board, or the reports that are provided with the template. You will want to pay extra attention to the [Remaining Work](https://msdn.microsoft.com/library/dd380673.aspx), [Unplanned Work](https://msdn.microsoft.com/library/ee707132.aspx), and [Requirements Overview](https://msdn.microsoft.com/library/ee461517.aspx) to make sure that the iteration is tracking against expectations. + +## <a name="AdditionalResources"></a> Additional resources + For more information, see the following Web resources: + + [Project Retrospectives: A Handbook for Team Reviews](http://go.microsoft.com/fwlink/?LinkId=179023), Norman Kerth; Dorset House, 2001. + + [Agile Retrospectives: Making Good Teams Great](http://go.microsoft.com/fwlink/?LinkId=179024), Esther Derby and Diana Larsen; Pragmatic Bookshelf, 2006. \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-project-activities.md b/docs/work/guidance/cmmi/guidance-project-activities.md new file mode 100644 index 00000000000..af2abb7530a --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-project-activities.md @@ -0,0 +1,102 @@ +--- +title: Project activities | VSTS & TFS +description: Helps you reduce the risks to your project that stem from shifting requirements and implementation costs. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 078d2b8e-e0a7-4c17-8f00-e830c78d338c +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# Project activities +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +To make the most effective use of MSF for [CMMI Process Improvement](guidance-background-to-cmmi.md), you should organize your project into a series of iterations, typically between four and eight weeks long. This helps you reduce the risks to your project that stem from shifting requirements and implementation costs. Iterative project structure is an important contribution to meeting the risk management requirements of CMMI. + +## At the start of the project + +### Project inception + Inception includes defining the project vision, which states what users will be able to do when the project releases its product. + + It also includes setting up the team, the infrastructure, and other resources and determining the development process. + + For more information, see [Project inception](guidance-project-inception.md). + +### Initial project planning + Project planning includes the following activities: + +- Analyzing the requirements in sufficient detail to enable you to form a plan. This analysis can include the use of requirements models, storyboards, and other tools that help envisage the working system. + +- Devising an overall design or architecture for the system. If this involves working on a platform that is new to team members, some time must be assigned to experimenting with it. Development will be slow in the earlier iterations. + +- Casting the requirements as a set of incremental product requirements whose development can be approximately estimated. The difference between general requirements and product requirements is an important one, and this is a significant activity. For more information, see [Develop requirements](guidance-develop-requirements.md). + +- Making an initial assignment of product requirements to iterations. + +- Setting dates for releases. + + The plan and requirements models will be revisited and refined throughout the project. Part of the purpose of iterative development is to allow improvements in the requirements that stem from demonstrating working software at an early stage. + + Initial project planning is done in Iteration 0. + + For more information, see [Plan a project](guidance-plan-a-project-cmmi.md). + +### Exploring an existing product + The goal of your project might be to update a product that already exists. In this case, if the team is unfamiliar with the product, exploration of the code is an activity for Iteration 0. Each development task in subsequent iterations will also involve understanding the code in a particular locality and tracing the consequences of changing it. + + For more information, see [Visualize code](https://msdn.microsoft.com/library/dd409365). + +## During the project + The plan is reviewed and subject to change throughout the project. + + Several activities that are related to the project plan are performed regularly throughout the project, usually toward the end of an iteration. + +### Validation + Demonstrate to your customers or business stakeholders the software that has been developed during the iteration. Where feasible, release it to them so that they can experiment with it or use it to a degree in a practical context. + + After a sufficient interval, arrange a meeting to review user feedback. The feedback should be used to generate change requests. + + +### Risk management + Review the probability and impact of potential adverse events, and take steps to reduce the risks. For more information, see [Manage risks](guidance-manage-risks.md). + +### Change management + You can use change request work items to record changes in the requirements that are stated by the business stakeholders. They can stem from changes in the business context but also from demonstration and trials of early versions of the product. These changes should be welcomed because they improve the fitness of your product to its business purpose. This effect is part of the objective of incremental development. + + Some project teams adjust the product requirements work items when changes are requested, without using a separate work item. But the advantage of the change request work item is that, in the later part of the project, you can review the number and nature of the changes that were made. You can use that information to improve your process or architecture for the future. + + Change requests should be used as input to the Product Plan Review. + + For more information, see [Manage change](guidance-manage-change.md). + +### Product plan review + Hold a Product Plan Review before you plan each iteration. The project plan assigns product requirements to iterations. + + The plan will change for two principal reasons: + +- Changes in requirements. + +- Changes in the estimates that the developers made. As the project progresses, the development team can make more reliable estimates of the work that will be required to implement future features. In some cases, some functionality might have been postponed from a previous iteration, which adds a feature to the plan. + + Both types of change become less frequent in later iterations. + + Revise the requirements models from which the product requirements are derived. + + Revise the assignment of requirements to iterations. Just as in the initial planning activity, the business stakeholders provide the priorities, the development team provides the estimates, and the meeting juggles the features between iterations. + + For more information, see [Plan a project](guidance-plan-a-project-cmmi.md). + +## Before major releases of the product + The activities that are involved in deployment of a product vary according to its type and are not dealt with here. + + Consider the following points in respect to the later iterations of software development: + +- Exclude major changes to the design to avoid the chance of unforeseen problems. + +- Raise the bar for changes and bugs in triage meetings. Proposed changes and bug fixes should be rejected unless they have significant effects on the usability and fitness for purpose of the product. + +- Devote resources to increasing test coverage and to performing manual tests. + +## Related notes +- [Background to CMMI](guidance-background-to-cmmi.md) +- [CMMI process](../cmmi-process.md) \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-project-inception.md b/docs/work/guidance/cmmi/guidance-project-inception.md new file mode 100644 index 00000000000..fdebd7089c0 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-project-inception.md @@ -0,0 +1,81 @@ +--- +title: Project inception | VSTS & TFS +description: Arrange the basic resources of the project in an initial stage. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 193eee36-7d2a-4652-b905-7759cc60321e +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# Project inception +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +You arrange the basic resources of the project in an initial stage that is named Project Inception. + +## <a name="PlanningMeeting"></a> Planning meeting + At an early stage in the project, several stakeholders and subject matter experts should be convened to discuss the project and make the product plan. You should choose stakeholders based on the nature and complexity of the project and its product deliverable. + + Depending on the size of the project and its complexity, the meeting may take several days or weeks. + +## <a name="Iterative"></a> Iterative development + An important technique in risk management is planning your project in iterations, typically of four to six weeks. An iteration plan is a list of features that the project team will develop and test. Each feature specifies a task or an improved variant of a task that the user will be able to perform by using the product. At the end of each iteration, the planned features are demonstrated. At the end of some iterations, the partly completed product is released for trial by a limited set of users. + + The feedback from those demonstrations and trials is used to review the plan. + + The product plan is arranged so that the principal user scenarios and the main components of the system are exercised at an early stage, even if only in a simplified manner. + + One of the most significant risks in most projects is misunderstood requirements. Requirements can be misunderstood not only by the development team but also by the end users and stakeholders. They can find it difficult to envisage how their business activities will be affected by the installation of the new system. + + In addition, the business context may change during the lifespan of the project, leading to a change in the product requirements. + + An iterative process provides assurance that any adjustment in the requirements that is found by demonstrating the product can be accommodated before the end of the project, without incurring the costs of substantial rework. + + Another significant risk is poorly estimated development costs. It can be difficult for developers who work in a new area, and perhaps on a new platform, to make accurate estimates of development costs in advance of the project. In some cases, it can be difficult to determine whether a particular implementation strategy will perform sufficiently well. But by reviewing the plan at the end of each iteration, the team can consider the experience of the previous iterations. This is one reason why a good product plan schedules some work on every principal component at an early stage. + +## <a name="ScopeOrDateDriven"></a> Is this a scope-driven or date-driven project? + Some projects require that all the requirements must function before delivery. These kinds of projects are unusual in a software context. A real-world example might be building a bridge. A half-finished span is useless. On the other hand, a half-completed but properly planned software project should be deployable and usable for a limited set of users. It can then be completed incrementally over the course of several upgrades. + + First determine whether your project is truly scope-driven. If it is, you must wait to determine an end date until you have detailed estimates and a detailed plan. You pay a price for this. Planning overhead is increased, and schedule buffering as a contingency against poor estimation will push the delivery date out more, which increases costs. Therefore, before you decide that you have a scope-driven project, be absolutely sure. It is more probable in a complex systems-engineering environment than in a pure software product or service situation. + + Most software projects are date-driven because they can be delivered incrementally. For example, if a computer game is to be released for the holiday season in the United States, it must be ready by October. Failure to deliver in October will severely affect sales between Halloween and Christmas, and, if the schedule slips by two months, the window of opportunity may be lost altogether. + +## <a name="PlanProjectResources"></a> Plan project resources + A project should be staffed so that it can be delivered by the desired date. Historical data from previous projects should be used to inform a discussion about sufficient resources. + + After you understand your staff requirements, create a project organization chart that clearly identifies the project team structure, resourcing levels, and geographic distribution, if appropriate. Save all staffing information to your project portal. + +## <a name="DefineRolesAndResponsibilities"></a> Define roles and responsibilities + Describe each project role and its responsibilities, and publish them in the project plan. Each person who joins the project should understand their role and responsibilities in the project. + +## <a name="DefineCommunicationPlan"></a> Define a communication plan + It is important to define a communication plan for the project. Paths of communication help manage the coordination costs on the project. It is important to define who should attend meetings, how often meetings are held, paths of communication, and how to escalate issues that cannot be resolved by the usual attendees of any one meeting. + + The objective of a good communication plan is to make sure that coordination activities on the project run as smoothly as possible and to avoid wasted effort through miscommunication. + + The communication plan should be published to the project portal and maintained as it is required. A communication plan is a useful tool for all staff, particularly new members. It helps them understand how a larger team works and how to get things done by communicating appropriately in different ways, with different team members, and for different purposes. + +## <a name="IdentifyStakeHolders"></a> Identify stakeholders + Identify all relevant project stakeholders. In addition to the core team members, the list should include business people and technical people who have an interest in the successful implementation of the project or the effect that the product might have after it enters service. These stakeholders may be upstream or downstream of the software engineering activity. + +## <a name="Outline"></a> Outline the project plan + Create a sketch version of the first project plan, which can be revised when development starts. The purpose of this version is to help discuss resources and timescales with project sponsors. It should outline the major features and their estimated delivery dates. For more information, see [Plan a project](guidance-plan-a-project-cmmi.md). + +## <a name="ReviewProjectPlan"></a> Review the project plan + Publish the outline of the project plan on the project portal. Although much work has gone into the plan, it is still a high-level plan that defers many detailed scheduling decisions. This is intentional. Too much detail now will generate waste later. + + Where requirements are uncertain, plan them in outline only, and detail should be deferred until more information is available. Plan to obtain that information. + + Schedule a review meeting with all stakeholders. Face-to-face meetings are always best for this kind of activity. Be sure to schedule enough time to enable a full review and to allow dissenting opinions to be heard. + +## <a name="ObtainProjectCommitments"></a> Obtain Project Commitments + Now that the project plan is agreed upon with the project stakeholders, obtain commitments from each stakeholder to approve the project plan. + + Collect the commitments, and archive the details in the project portal. + +## <a name="AdditionalResources"></a> Additional Resources + For more information, see the following Web resources: + +- [A Practical Guide to Feature Driven Development](http://go.microsoft.com/fwlink/?LinkId=179021), Stephen R. Palmer and John Malcolm Felsing; Prentice Hall PTR, 2002. + +- [The IT Measurement Compendium: Estimating and Benchmarking Success with Functional Size Measurement](http://go.microsoft.com/fwlink/?LinkId=179022), Manfred Bundschuh and Carol Dekkers; Springer, 2008. \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-project-management.md b/docs/work/guidance/cmmi/guidance-project-management.md new file mode 100644 index 00000000000..726a1c9abdb --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-project-management.md @@ -0,0 +1,69 @@ +--- +title: Project management | VSTS & TFS +description: Use to understand how to manage, plan, and coordinate the development and maintenance of software products. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 9079e8f8-ce21-4b26-96a1-3f28f9cfa90c +ms.manager: douge +ms.author: kaelli +ms.date: 03/16/2017 +--- + +# Project management (CMMI) + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +You can use the Project Management section of the MSF for CMMI process improvement guidance to better understand how to manage, plan, and coordinate the development and maintenance of software products. For more information about CMMI, see [Background to CMMI](guidance-background-to-cmmi.md). + + The Project Management grouping of process areas in the CMMI includes Project Planning, Project Monitoring and Control, Supplier Agreement Management, Integrated Project Management, Risk Management, and Quantitative Project Management. All but Quantitative Project Management are part of model levels 2 or 3. Quantitative Project Management is a model level 4 activity that reflects how high-maturity organizations use quantitative, statistically defensive, objective data to make management decisions and to steer projects to a successful and predictable outcome. + + The project management activities represent economic costs on value-added engineering activities. These activities are necessary and important to manage risk, coordinate successful engineering efforts, and set customer expectations appropriately. However, you should minimize the effort that is expended on these activities. "Little and often" is a good mantra. Smaller batches reduce complexity and coordination costs. When you define and tailor your process definition, you should keep in mind that your project management activities should be as minimal as possible while satisfying the risk profile of your project. + +## Iterative development + Team Foundation together with the MSF for CMMI process template supports iterative work. Iterative development manages risk by delivering demonstrable and tested software at set intervals throughout the project. + + ![Successive iterations](_img/msf_cmmi_iterations.png "MSF_CMMI_Iterations") + + The project schedule is organized into a series of iterations that are typically four to six weeks long. Each iteration ends with a demonstration of usable, tested software. To schedule sprints, see [Schedule sprints](../../scrum/define-sprints.md). + +- The *project plan* states what feature requirements will be developed in each iteration. The project plan is developed in Iteration 0 and reviewed at the start of each iteration. To create and view the project plan, see [Create backlog](../../backlogs/create-your-backlog.md). + +- Each *iteration plan* states what tasks will be performed during that iteration. Most tasks are development and test work that is needed to fulfill the feature requirements that are scheduled for that iteration. The iteration plan can be viewed through the [sprint backlog page](../../scrum/sprint-planning.md). + + Iterative work does not automatically manage risks. To minimize risk, you must arrange the project plan in increments. Early iterations should provide an "end-to-end thin slice," that is, a minimal version of the most important behaviors of the product. Later iterations add more functionality. + + By contrast, it would be much less useful to schedule all of the sales part of a shopping Web site for the first third of the project, all of the warehouse system in the second third, and all of the payments system in the last third. This schedule would risk producing an attractive and feature-rich sales Web site that has no means for the business to take money from its customers. It is iterative without being incremental. + + Incremental development has the following benefits: + +- Meets the true requirements. Stakeholders have the opportunity to try out the product, which always results in improvements to their stated requirements. + +- Tunes the architecture. Allows the development team to discover and address any difficulties that occur with their platform or potential improvements to their design. + +- Ensures results. Stakeholders know that, even if project resources are cut part-way through, the expenditure to date has not been not wasted. The same is true if the development estimates prove to have been optimistic and you must drop the less important features. + + For more information about how to express the requirements in an appropriate form for incremental development, see [Develop requirements](guidance-develop-requirements.md). + +## Larger and smaller cycles + The project and the iteration are not the only cyclic aspects of software development. For example, in an iteration, team members start and complete tasks and check in code. The build system builds the product on a continuous or nightly basis. The team holds a brief daily review of progress on the iteration tasks. + + ![Check-in, daily build, iteration, project, program](_img/msf_cmmi_cycles.png "MSF_CMMI_Cycles") + +### Large projects + A project in which a team works through a series of iterations may be part of a larger project or program. A large project has several teams that work in parallel. Each team typically has four to 16 people. + + Open a separate version control branch for each team. Each team should integrate with the main branch at the end of each iteration. For more information, see [Use branches](../../../tfvc/use-branches-isolate-risk-team-foundation-version-control.md). + + Reserve the main branch for integration and tests. The build machine should perform a complete set of tests after an integration. + + Assign an area to each team so that its work items can be easily separated from the others. For more information, see [Customize area and iteration paths](../../customize/set-area-paths.md). + + The teams can share a series of integrations, but this is not always necessary. If the teams do not synchronize integrations, each team must have its own prefix for its iteration names. + + + + +## Related notes +- **The Project Cycle/[Project activities](guidance-project-activities.md):** Start the project, gather requirements, create a project plan, divide it into iterations, and deliver releases. Manage risks, and manage changes to the plan. +- **The Iteration Cycle/[Iteration activities](guidance-iteration-activities.md):** Review and update requirements, plan the tasks to implement requirements, and manage issues as they occur. +- [CMMI process](../cmmi-process.md) \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-requirements-field-reference-cmmi.md b/docs/work/guidance/cmmi/guidance-requirements-field-reference-cmmi.md new file mode 100644 index 00000000000..ca3e52ef278 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-requirements-field-reference-cmmi.md @@ -0,0 +1,30 @@ +--- +title: Requirements field reference (CMMI) | VSTS & TFS +description: Definition of fields used to track requirements in the CMMI process for Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: c2c4f0c8-0d7f-4087-b115-2ca10cf3c998 +ms.manager: douge +ms.author: kaelli +ms.date: 01/24/2017 +--- +# Requirements field reference (CMMI) +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +When you create a team project using the [CMMI process](../cmmi-process.md), you can define fields to track requirements to be developed and their importance to the overall product. + + For more information about data types and field attributes, see [Define and modify work item fields](../../reference/define-modify-work-item-fields.md). + +|**Field name**|**Description**|**Data type**|**Reportable type**|**Index**| +|--------------------|---------------------|-------------------|--------------------------------------------------------|----------------------------------------------| +|**Requirement Type**|The kind of requirement to implement. You can specify one of the following values (see note 1):<br /> - **Business Objective**<br />- **Feature** (default)<br />- **Functional**<br />- **Interface**<br />- **Operational**<br />- **Quality of Service**<br />- **Safety**<br />- **Scenario**<br />- **Security**<br />Reference Name=Microsoft.VSTS.CMMI.RequirementType|String|Dimension|False| +|**Impact Assessment**|The customer impact of not implementing this requirement. You might include details from the Kano model about whether this requirement is in the surprise, required, or obvious categories.<br />Reference Name=Microsoft.VSTS.CMMI.ImpactAssessmentHtml|HTML|None|False| +|**User Acceptance Test**|The status of the user acceptance test for a requirement. You can specify one of the following values (1):<br /><br /> - **Pass** (default)<br />- **Fail**<br />- **Not Ready**<br />- **Ready**<br />- **Skipped**<br />- **Info Received**<br /><br /> You specify **Not Ready** when the requirement is in the **Active** state, and you specify **Ready** when the requirement is in the **Resolved** state.<br />Reference Name=Microsoft.VSTS.CMMI.UserAcceptanceTest|String|None|False| +|**Subject matter experts**|The names of one to three team members who are familiar with the customer area that this requirement represents.<br/><br /> You can specify the names of valid team members only.<br />Reference Name=Microsoft.VSTS.CMMI.SubjectMatterExpert1 …Microsoft.VSTS.CMMI.SubjectMatterExpert3|String|None|False| + + **Notes:** + +1. To change the menu selection, see [Customize a pick list](../../customize/add-modify-field.md). + +## Related notes + [Index of work item fields](../work-item-field.md) \ No newline at end of file diff --git a/docs/work/guidance/cmmi/guidance-review-meeting-field-reference-cmmi.md b/docs/work/guidance/cmmi/guidance-review-meeting-field-reference-cmmi.md new file mode 100644 index 00000000000..04d89ffafe8 --- /dev/null +++ b/docs/work/guidance/cmmi/guidance-review-meeting-field-reference-cmmi.md @@ -0,0 +1,31 @@ +--- +title: Review meeting field reference (CMMI) | VSTS & TFS +description: Definition of fields used to track review meetings in the CMMI process for Visual Studio Team Services (VSTS) and Team Foundation Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 35b045a4-1332-499d-97a6-f7797033990d +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# Review meeting field reference (CMMI) +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +The following fields track information and changes for review meetings. Your team can specify this kind of information by using the Review type of work item that is provided with the [CMMI process](../cmmi-process.md). + + None of these fields are reportable or indexed. For more information about data types, see [Define and modify work item fields](../../reference/define-modify-work-item-fields.md). + +|**Field name**|**Description**|**Data type**| +|--------------------|---------------------|------------------------ +|**Purpose**|The purpose and focus of the meeting.<br/>Reference name=Microsoft.VSTS.CMMI.Purpose|HTML| +|**Comments**|Additional information that you want to record.<br/>Reference name=Microsoft.VSTS.CMMI.Comments|HTML| +|**Minutes**|The details of what the team discussed and agreed upon during the meeting. You can use this field to record what the team reviewed, what criteria the team applied, and what problems the team identified.<br/>Reference name=Microsoft.VSTS.CMMI.Minutes|HTML| +|**Meeting Type**|The meeting venue. You can specify one of the following values:<br /> - Meeting<br />- Offline<br/>Reference name=Microsoft.VSTS.CMMI.MeetingType|String| +|**Called Date**|The date and time when the meeting is scheduled.<br/>Reference name=Microsoft.VSTS.CMMI.CalledDate|DateTime| +|**Called By**|The name of the team member who scheduled the meeting.<br/>Reference name=Microsoft.VSTS.CMMI.CalledBy|String| +|**Required Attendee 1**<br />**…**<br />**Required Attendee 8**|The names of each team member who is required to attend the meeting.<br/>Reference name=Microsoft.VSTS.CMMI.RequiredAttendee1 … Microsoft.VSTS.CMMI.RequiredAttendee8|String| +|**Optional Attendee 1**<br />**…**<br />**Optional Attendee 8**|The name of each team member who is invited but not required to attend the meeting.<br/>Reference name=Microsoft.VSTS.CMMI.OptionalAttendee1 … Microsoft.VSTS.CMMI.OptionalAttendee8|String| +|**Actual Attendee 1**<br />**…**<br />**Actual Attendee 8**|The name of each team member who attended the meeting.<br/>Reference name=Microsoft.VSTS.CMMI.ActualAttendee1 … Microsoft.VSTS.CMMI.ActuallAttendee8|String| + +## Related notes + [Index of work item fields](../work-item-field.md) \ No newline at end of file diff --git a/docs/work/guidance/cmmi/track-bugs.md b/docs/work/guidance/cmmi/track-bugs.md new file mode 100644 index 00000000000..15f99f2d2ed --- /dev/null +++ b/docs/work/guidance/cmmi/track-bugs.md @@ -0,0 +1,64 @@ +--- +title: Track bugs using CMMI process in VSTS & TFS +description: Use the bug work item to describe and track progress for each bug that you find. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 87247b22-4919-4507-af64-372f4cc9bd2f +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# Track bugs +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +As you run tests to verify your requirements, you are bound to find bugs. Use the bug work item to describe and track progress for each bug that you find. + + ![Bug for CMMI team project (work item form)](_img/procguid_cmmiwitform.png "ProcGuid_CMMIwitForm") + + For more information about how to create bug work items, see [Run manual tests](../../../manual-test/getting-started/run-manual-tests.md). As bugs are found, follow the process in this topic to prioritize them, to make sure that they get fixed, and to make sure that you have a record of the work and the decisions that were involved. + +## <a name="Triage"></a> Triage bugs + Triage meetings should be held at set intervals after the development work and testing have started on the project. How often you hold the meetings and how long they should be depends on your situation. + + Typically, bug triage meetings are run by a project manager and attended by team leads and perhaps business analysts and stakeholders who can speak about specific project risks. The project manager can use the Active Bugs query for new and reopened bugs to generate a list of bugs to be triaged. + + Before triage starts, devise a set of criteria to determine which bugs should be fixed and in what priority. The criteria will typically identify the severity of bugs, bugs that are associated with features of significant value (or significant opportunity cost of delay), or other project risks. + + The triage criteria should be stored in the Documents folder of your team project. Over time, the document will be updated. It is assumed that your project has version control turned on and that the specific criteria that are being used at any given time on the project can be retrieved for audit and appraisal evidence purposes. + + Early in the project, you will likely decide to fix most of the bugs that you triage. However, as the project proceeds, the triage criteria (or bar) may be raised to reduce the number of bugs that are fixed. + + Raising the triage criteria bar and allowing reported bugs to remain unfixed is a trade-off. It is a trade-off that says that fixing the bug is less important than meeting the project scope, budget, and schedule. + + Use your criteria to determine which bugs to fix and how to set their State, Priority, Severity, and other fields. By default, the template provides four priorities: 1 for "must fix" through 4 for "unimportant." If you change the definitions in the process template, you should update the guidance, the help text, and any criteria documents accordingly. + +## <a name="Fix"></a> Fix bugs + After a bug has passed triage and has been prioritized, it should be assigned to a developer for additional investigation. + + The bug work item has a tab for repro steps, which should provide what you need to reproduce the bug. However, you may also be able to use IntelliTrace help you reproduce difficult bugs. For more information about IntelliTrace, see [Tracking test results](../../../manual-test/getting-started/track-test-status.md). + + After the developer decides on a course of action, they should note their decisions in the bug work item. + +### Decide on the fix + Working with other team members, the developer may recommend a fix that has implications for other sections of the code and that may require significant regression testing. Any conversations that relate to assessing the risk of such a fix should be recorded in the bug work item history because it documents useful decision analysis and risk management evidence for an audit or Standard CMMI Appraisal Method for Process Improvement (SCAMPI) appraisal. For more information about CMMI see [Background to CMMI](guidance-background-to-cmmi.md). + +### Update and run unit tests for fixing the bug + Unit tests verify the correct implementation of a unit of code. Writing and performing unit tests identifies bugs before testing starts and, therefore, helps reduce the cost of quality control. Developers must write unit tests for all code that will be written as part of implementing a development task or implementing a fix for the bug. For more information, see [Unit Test Your Code](https://msdn.microsoft.com/library/dd264975). + + You may prefer to write the unit test before making any code fixes in a test-first development strategy. This type of strategy is preferred by agile software developers. The CMMI does not require that unit tests are written in a particular sequence, only that effective verification of functionality is achieved. + + Evidence that unit tests were both written and run is required for a CMMI appraisal. Be sure to link the tests to the task work items for the code fix, and link those tasks to the bug work item. This provides the traceability of evidence that a SCAMPI lead appraiser will look for. + +### Review and refactor the code for fixing the bug + A code review is used to ensure that new or changed code meets an established quality bar before the code is integrated into the daily build. Quality considerations are coding standards, conformance to architecture and design, performance, readability, and security. Code reviews also provide additional insight from other developers about how code should be written. For more information about how to review and refactor code, see [Implement development tasks](guidance-implement-development-tasks.md). + +## <a name="Close"></a> Close bugs + After a bug is fixed, it should be assigned to a tester to verify that the problem is solved before the bug work item is closed. + +### Verifying a fix + To verify a fix, the tester should attempt to reproduce bug, look for additional unexpected behavior, and, if necessary, reactivate the bug. + + When verifying a bug resolution, you may find that the bug was not completely fixed or you may disagree with the resolution. In this case, you discuss the bug with the person who resolved it, come to an agreement, and possibly reactivate the bug. If you do reactivate a bug, make sure that you include the reasons for reactivating the bug in the bug description so that information is preserved. + +### Closing the bug work item + A bug is closed for many reasons. In a simple case, the bug was verified as fixed and can also be closed. However, a bug can be deferred to the next version of the product, proven not to be reproducible, or confirmed as a duplicate. Each of these reasons must be documented, and the bug must be closed correctly to ensure that there is no confusion about why it is closed. diff --git a/docs/work/guidance/guidance-code-review-feedback-field-reference.md b/docs/work/guidance/guidance-code-review-feedback-field-reference.md new file mode 100644 index 00000000000..334b39b00fb --- /dev/null +++ b/docs/work/guidance/guidance-code-review-feedback-field-reference.md @@ -0,0 +1,53 @@ +--- +title: Code review and feedback field reference | VSTS & TFS +description: Definition of fields used to track code review and feedback requests and responses for Visual Studio Team Services (VSTS) and Team Foundation Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 4182c1c5-a768-4f4d-b6cb-862fc57e6ab4 +ms.author: kaelli +ms.manager: douge +ms.date: 01/20/2017 +--- + +# Code review and feedback field reference + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + + +You can use the code review and feedback fields to create queries and reports that track the status of these processes. The fields appear in the following work item types, which are included with the default processes for VSTS and TFS: Code Review Request, Code Review Response, Feedback Request, and Feedback Response. + +> [!NOTE] +> If your TFS application server has been upgraded from an earlier version you might need to update your team project to get access to these work item types. See [Configure features after an upgrade](../customize/configure-features-after-upgrade.md) + +## <a name="codereviews"></a> Fields used to track code reviews + The following fields are used to track code review requests and responses. You can only make a Code Review request against code maintained in a [Team Foundation version control (TFVC) repository](../../tfvc/overview.md). A code review response is created for each person who's been requested to provide review comments. See [Day in the life of a Developer: Suspend work, fix a bug, and conduct a code review](../../tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md). + +|**Field name**|**Description**|**Data type**| +|--------------|---------------|-------------| +|**Accepted By**|The name of the code reviewer.<br/>Reference name=Microsoft.VSTS.CodeReview.AcceptedBy|String| +|**Accepted Date**|The date and time when the code-reviewer responded.<br/>Reference name=Microsoft.VSTS.CodeReview.AcceptedDate|DateTime| +|**Associated Context**|The name assigned to the code work requested for review.<br/>Reference name=Microsoft.VSTS.CodeReview.Context|String| +|**Associated Context Code**|An integer value that captures whether the code review is for **1** (shelveset) or **2** (changeset).<br/>Reference name=Microsoft.VSTS.CodeReview.ContextCode|Integer| +|**Associated Context Owner**|The GUID assigned to the shelveset owner who requested the code review.<br/>Reference name=Microsoft.VSTS.CodeReview.ContextOwner|String| +|**Associated Context Type**|The type of code work requested for review: **Shelveset** or **Changeset**.<br/>Reference name=Microsoft.VSTS.CodeReview.ContextType|String| +|**Closed Status**|The status selected by the reviewer when closing the code review request. The number is stored in the system and written to the data warehouse as follows:<br /><br /> - **0 – Not Reviewed**<br />- **1 - Looks Good**<br />- **2 - With Comments**<br />- **3- Needs Work**<br />- **4 - Declined**<br />- **5 - Removed**<br/>Reference name=Microsoft.VSTS.CodeReview.ClosedStatus|String| +|**Closed Status Code**|A value ranging from 0 to 5 that corresponds to the status selected by the reviewer when closing the code review request.<br/>Reference name=Microsoft.VSTS.CodeReview.ClosedStatusCode|Integer| +|**Closing Comments**|The comment entered by the reviewer when closing the review request.<br/>Reference name=Microsoft.VSTS.CodeReview.ClosingComment|String| +|**Reviewed By**|The name of the team member who reviewed the code. The State transitions to Reviewed when the code reviewer responds. (Code Review Response)<br/>Reference name=Microsoft.VSTS.Common.ReviewedBy|String| +|**Reviewed Date**|The date-time stamp when the reviewer closed the request. (Code Review Response)<br/>Reference name=Microsoft.VSTS.Common.ReviewedDate|Date-Time| +|**State Code**|Mirror field used to track the current state in code.<br/>Reference name=Microsoft.VSTS.Common.StateCode|Integer| + +## <a name="feedback"></a> Fields used to track feedback + The following fields track feedback requests and responses. You complete the first three fields in the feedback request form. A feedback response is created for each person and for each item for which feedback is requested. See [Get feedback](../connect/get-feedback.md). + +|**Field name**|**Description**|**Data type**| +|--------------------|---------------------|-------------------| +|**Application Launch Instructions**|Instructions to stakeholders on how to start the application.<br/>Reference name=Microsoft.VSTS.Feedback.ApplicationLaunchInstructions|HTML| +|**Application Start Information**|Guidelines to direct stakeholder feedback.<br/>Reference name=Microsoft.VSTS.Feedback.ApplicationStartInformation|PlainText| +|**Application Type**|The type of application that stakeholders will provide feedback on. The valid types are specified in the process configuration file, ProcessConfiguration. The default values are **Web Application**, **Remote Machine**, and **Client Application**.<br/>Reference name=Microsoft.VSTS.Feedback.ApplicationType|String| +|**Rating**|The number of stars that an item receives from a reviewer in a star-based ranking system. (Feedback Response)<br /> The number is stored in the system and written to the data warehouse as follows:<br /><br /> - **0 – Not Rated**<br />- **1 - Poor**<br />- **2 - Fair**<br />- **3- Good**<br />- **4- Very Good**<br />- **5 - Excellent**<br/>Reference name=Microsoft.VSTS.Common.Rating|String| + +## Related notes +- [Index of work item fields](work-item-field.md) +- [Get feedback](../connect/get-feedback.md) +- [Day in the life of a Developer: Suspend work, fix a bug, and conduct a code review](../../tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md) \ No newline at end of file diff --git a/docs/work/guidance/manage-process-templates.md b/docs/work/guidance/manage-process-templates.md new file mode 100644 index 00000000000..01795fc629a --- /dev/null +++ b/docs/work/guidance/manage-process-templates.md @@ -0,0 +1,162 @@ +--- +title: Upload, download, or delete a process template | VSTS & TFS +description: Upload, download, delete, or make default a process template for a team project collection +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 5D5AF176-B3C6-47AD-87FF-5FAFE1BA4AAE +ms.manager: douge +ms.author: kaelli +ms.date: 04/13/2017 +--- + +#Upload or download a process template + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +>[!NOTE] +><b>Feature availability: </b>From an on-premises Team Foundation Server (TFS), you can upload, download, and delete process templates. From VSTS, you can download process templates. For the Hosted XML and On-premises XML process models, you work with process templates to customize a process template to either update a team project or create a team project. To learn more, see [Customize your work tracking experience](../customize/customize-work.md).   + +When you choose to create a team project, the Project Creation Wizard (PCW) reads the process template to configure initial settings and upload artifacts and template files. Each process template defines the building blocks of the work item tracking system as well as other sub-systems you access through Team Services or an on-premises TFS. It supports Hosted XML and On-premises XMl process models which support customization of team projects through the modification and import of XML definition files. + + +>[!IMPORTANT] +>When you create a team project from the web portal, several process template files are ignored. Specifically, the files that would create a Report Manager site and a SharePoint project portal aren't supported. These features aren't supported for VSTS. +> +>If you want these features to be created for a team project on your on-premises TFS, then create your team project from Visual Studio or Team Explorer. For details, see [Process template and plug-in files, Client support for project creation](../reference/process-templates/overview-process-template-files.md#client-support). + + +For a comparison of the default process templates—Agile, CMMI, and Scrum—see [Choose a process](choose-process.md). + +You can upload, download, and delete process templates for a team project collection. Also, you can mark a template to appear as the default when you add team projects. + +[!INCLUDE [temp](../_shared/get-latest-process-templates.md)] + +## To manage a process template + +1. Open the same version of Visual Studio, Visual Studio Community, or Team Explorer as the on-premises TFS that you connect to. For example, if you connect to a TFS 2015 instance, you must connect from Visual Studio 2015 or Visual Studio Community 2015. If you connect to VSTS, choose the latest version supported. + + You can always download a free version of Visual Studio Community from the [Visual Studio download site](https://www.visualstudio.com/downloads/#visual-studio-community-2015-with-update-3-free). + + If you aren't a member of the Project Collection Administrators group, [get added as one](../../accounts/add-administrator-project-collection.md). + +2. From, Visual Studio, open the Process Template Manager from the **Team, Team Project Collection Settings** menu. + + ![Open Process Template Manager](_img/open-process-template-manager.png) + + You'll see a list of each process template that has been uploaded to the team project collection. + + ![Select process template to work with](_img/process-template-manager.png) + + The <b>Upload</b>, <b>Download</b>, <b>Make Default</b>, and <b>Delete</b> buttons are disabled when you don't have the necessary permissions to manage process templates. + +3. Select the process template that you want to work with and then choose from the following actions. + + <table> + <tbody valign="top"> + <tr> + <td width="15%"> + **Upload** + </td> + <td>To upload a process template.<br/> + <p>In the **Upload Process Template** dialog box, choose the folder that contains the root file, ProcessTemplate.xml, for the process template that you want to upload. See also [Process template restrictions and validation checks](#restrictions).</p> + </td> + </tr> + + <tr> + <td> + **Download** + </td> + <td>To download the process template to a local computer.<br/> + <p>In the **Download Process Template** dialog box, select a folder where the process template will be downloaded.</p> + <p>If you're downloading a process template to use to [configure new features](../customize/configure-features-after-upgrade.md), [manually add new features](../customize/add-features-manually.md) or [update a custom process template to enable new features](../customize/update-customized-process-template.md)--choose the process that corresponds to the one you used previously to create your team project. For example, if you're updating a team project based on the Scrum process template, then select **Scrum**. Note that all version numbers have been removed from the process templates. If you don't see Agile, CMMI, or Scrum, then you need to [update TFS](https://www.visualstudio.com/downloads/download-visual-studio-vs). </p> + <p>You can determine which process template to select based on the [work item types defined for your existing team project](#wit_correlation).</p> + </td> + </tr> + + <tr> + <td> + **Make Default** + </td> + <td> + To cause the selected process template to appear as the default selection in the **New Team Project Wizard**. + </td> + </tr> + + <tr> + <td> + **Delete** + </td> + <td> + To permanently remove the selected process template from the collection. + </td> + </tr> + + </tbody> + </table> + + +<a id="wit_correlation"> </a> + +##Process template correlation with an existing team project +<p>To determine the type of process template that was used to create your team project, review the work item types that appear in the <b>New Work Item</b> menu for Team Explorer and then compare them with the work item types in the following chart. If your work item types differ from those shown listed, then a custom process template might have been used.</p> + +<table> +<tbody valign="top"> +<tr> +<th>Scrum</th> +<th>Agile</th> +<th>CMMI</th> +</tr> +<tr> +<td> +![Scrum work item types](_img/ALM_MPT_WIT_Scrum.png) +</td> +<td> +![Agile work item types](_img/ALM_MPT_WIT_Agile.png) +</td> +<td> +![CMMI work item types](_img/ALM_MPT_WIT_CMMI.png) +</td> +</tr> +</tbody> +</table> + +<a id="restrictions"> </a> + +##Process template restrictions and validation checks +Uploading a process template requires that it pass the following validation checks: + +- Process template names must be unique and 256 Unicode characters or less. Same-named templates will overwrite existing templates.<br/> +Also, names cannot contain the following characters: . , ; ' ` : / \ * | ? " & % $ ! + = ( ) [ ] { } < ><br/> +For additional restrictions, see [Naming restrictions](../../reference/naming-restrictions.md). +- Process template folders can't contain any .exe files. If they do, the process template may upload successfully, however project creation will fail. +- Process template total size should be 2 GB or less, or project creation will fail. +- The upload process performs a partial verification check to make sure that the XML of each process template XML file is valid. If you receive any errors when you try to upload the process template, review the XML to determine the cause of the error. Note that duplicate tags in an XML file can cause errors. If there is no error in the XML, check to make sure all the appropriate files are included in your process template in the correct folder locations. + +>[!IMPORTANT] +>The schema definition for process templates uses a mix of camel-case and all capitalized elements. If you encounter errors when validating your type definition files, check the case structure of your elements. Also, the case structure of opening and closing tags must match according to the rules for XML syntax. +> +>See [Process template plug-ins: Index to XML element definitions](../reference/process-templates/process-template-plug-ins-xml-elements-index.md).    + +## Related notes + +Periodically, updates are made to the process templates to support new features. For details, see [Changes made to process templates](changes-to-process-templates.md). + +- [Create a team project](../../accounts/create-team-project.md) +- [Customize a process template](../reference/process-templates/customize-process.md) +- [Process template and plug-in files](../reference/process-templates/overview-process-template-files.md) +- [Import and update a process (Hosted XML)](../import-process/import-process.md) +- [Customize a process (Inheritance process model)](../process/customize-process.md) +- [Customize your work tracking experience](../customize/customize-work.md) + + +### Update a process template to enable new features +When you upgrade your on-premises TFS to a later version, new features may become available. [To gain access to these new features](../customize/configure-features-after-upgrade.md), you may need to [update a customized process template](../customize/update-customized-process-template.md). + +### Add another team project +You can add a team project from the web portal or Visual Studio/Team Explorer. Some process template files are ignored when you create a team project from the web portal. For details, see [Process template and plug-in files, Client support for project creation](../reference/process-templates/overview-process-template-files.md#client-support). + + + + diff --git a/docs/work/guidance/scrum-process-workflow.md b/docs/work/guidance/scrum-process-workflow.md new file mode 100644 index 00000000000..8b450326482 --- /dev/null +++ b/docs/work/guidance/scrum-process-workflow.md @@ -0,0 +1,287 @@ +--- +title: Scrum process work items and workflow | VSTS & TFS +description: How to guide for using the Scrum process work item types and workflow to track work in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 34c866ea-a130-4371-bfc4-a3d9f87dccca +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# Scrum process work item types and workflow + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +To plan a software project and track software defects using Scrum, teams use the product backlog item (PBI) and bug work item types (WITs). To gain insight into a portfolio of features, scenarios, or user experiences, product owners and program managers can map PBIs and bugs to features. When teams work in sprints, they define tasks which automatically link to PBIs and bugs. + +<img src="_img/scrum-process-plan-wits.png" alt="Scrum process, WITs used to plan and track" style="border: 2px solid #C3C3C3;" /> + +Using the web portal or Microsoft Test Manager, testers can create and run test cases and create bugs to track code defects. Impediments track blocking issues. + +>[!NOTE] +><b>Feature availability: </b> Work item tracking forms and features available to you differ depending on whether you connect to the cloud or an on-premises Team Foundation Server (TFS), and whether you open the form from the web portal or Visual Studio Team Explorer. Forms and guidance provided in this topic reflect those available with the [new form experience](../process/new-work-item-experience.md) (VSTS and the web portal for TFS 2017 and later versions). +> +>If you connect to TFS 2015 or earlier versions, or open the form from Visual Studio Team Explorer, see [Add work items (TFS)](../backlogs/add-work-items-tfs.md). + +## Define PBIs and bugs + +When you define a product backlog item, you want to focus on the value that your customers will receive and avoid descriptions of how your team will develop the feature. The product owner can prioritize your product backlog based on each item's business value, effort, and relative dependency on other backlog items. As your business requirements evolve, so does your product backlog. Typically, teams specify details only for the highest priority items, or those items assigned to the current and next sprint. + +You can create PBIs and bugs from the [quick add panel on the product backlog page](../backlogs/create-your-backlog.md). + +<img src="_img/IC675707.png" alt="Web portal, Agile process, Quick add panel " style="border: 2px solid #C3C3C3;" /> + +Later, you can open each PBI or bug to provide more details and estimate the effort. Also, by prioritizing the PBIs and bugs on the backlog page (which is captured in the Backlog Priority field), product owners can indicate which items should be given higher priority. + +![Product backlog item work item form](_img/new-form-product-backlog-item.png) + + +By defining the **Effort** for PBIs and bugs, teams can use the forecast feature and velocity charts to estimate future sprints or work efforts. By defining the **Business Value**, product owners can specify priorities separate from the changeable backlog stack ranking. + +Use the following guidance and that provided for [fields used in common across work item types](#definitions-in-common) when filling out the form. For details about creating bugs, see [Manage bugs](../backlogs/manage-bugs.md). + +<table> +<thead> +<tr><th><p>Field/tab</p></th><th><p>Usage</p></th></tr> +</thead> +<tbody valign="top"> +<tr> + <td width="20%"><p>[Effort](../track/query-numeric.md)</p></td> + <td><p>Estimate the amount of work required to complete a PBI using any unit of measurement your team prefers, such as story points or time. A numeric value is required. </p><p>Agile [velocity charts](../../report/guidance/team-velocity.md) and [forecast](../scrum/forecast.md) tools reference the values in this field. For additional guidance, see the [Estimating](https://msdn.microsoft.com/library/hh765979) white paper.</p></td></tr> +<tr> + <td><p>[Business Value](../track/query-numeric.md)</p></td> + <td><p>Specify a number that captures the relative value of a PBI compared to other PBIs. The higher the number, the greater the business value.</p></td> + +</tr> +<tr> + <td><p>[Description](../track/titles-ids-descriptions.md) </p></td> + <td><p>Provide enough detail for estimating how much work will be required to implement the item. Focus on who the feature is for, what users want to accomplish, and why. Don't describe how the feature should be developed. Do provide sufficient details so that your team can write tasks and test cases to implement the item. </p> + </td> +</tr> +<tr> + <td><p>[Acceptance Criteria](../track/titles-ids-descriptions.md) </p></td> + <td><p>Define what "Done" means by describing the criteria that the team should use to verify whether the PBI or the bug fix has been fully implemented.<br /><br />Before work begins on a PBI or bug, describe the criteria for customer acceptance as clearly as possible. Conversations between the team and customers to determine the acceptance criteria helps ensure a common understanding within the team to meet customers' expectations. The acceptance criteria can be used as the basis for acceptance tests so that the team can more effectively evaluate whether an item has been satisfactorily completed.</p> + +</td> +</tr> + +</tbody> +</table> + + +<blockquote style="font-size: 13px"><b>Tip: </b>Use the [Discussion section](../concepts/work-item-form-controls.md#discussion) to add and review comments made about the work being performed. This feature is only available from VSTS. </blockquote>    + +## Track progress + + +As work progresses, you change the State field to update the status. Optionally, you can specify a reason. The state and reason fields appear on the work item form in the header area. + +<img src="_img/scrum-bug-workflow-header-form.png" alt="Bug work item form, header area" style="border: 2px solid #C3C3C3;" /> + + +### Scrum workflow states + +By updating the State, teams know which items are new, in progress, or completed. Most WITs support transition both forward and backward from each workflow state. These diagrams show the main progression and regression states of the PBI, bug, and task WITs. + +> [!div class="mx-tdBreakAll"] +> |Product Backlog Item |Bug |Task | +> |-------------|----------|---------| +> |<img src="_img/ALM_PT_Scrum_WF_PBI.png" title="Product Backlog Item workflow states, Scrum process " alt="Product Backlog Item workflow states, Scrum process" /> |<img src="_img/ALM_PT_Scrum_WF_Bug.png" title="Bug workflow states, Scrum process" style="padding-left:20px;" alt="Bug workflow states, Scrum process" /> |<img src="_img/ALM_PT_Scrum_WF_Task.png" title="Task workflow states, Scrum process " style="padding-left:30px;" alt="Task workflow states, Scrum process" /> | + +PBIs and bugs follow this typical workflow progression: + +- The product owner creates a PBI or a tester creates a bug in the **New** state with the default reason, **New backlog item** +- The product owner moves the item to **Approved** after it is sufficiently described and ready for the team to estimate the level of effort. Most of the time, items near the top of the Product Backlog are in the Approved state, while items toward the middle and bottom are in a New state +- The team updates the status to **Committed** when they decide to complete the work during the sprint +- The item is moved to the **Done** state when the team has completed all its associated tasks and the product owner agrees that it has been implemented according to the Acceptance Criteria. + + +### Update status with Kanban or task boards + +Teams can use the [Kanban board](../kanban/kanban-basics.md) to update the status of PBIs, and the [sprint task board](../scrum/task-board.md) to update the status of tasks. Dragging items to a new state column updates both the State and Reason fields. + +![Track progress on the Kanban board](../kanban/_img/ALM_CC_MoveCard.png) + +You can customize the Kanban board to support additional [swim lanes](../kanban/expedite-work.md) or [columns](../kanban/add-columns.md). For additional customization options, see [Customize your work tracking experience](#customize-work-tracking). + + +## Map PBIs to features + +When you manage a suite of products or user experiences, you might want to view the scope and progress of work across the product portfolio. You can do this by [defining features](../backlogs/define-features-epics.md) and [mapping PBIs to features](../backlogs/organize-backlog.md). + +Using portfolio backlogs, you can [drill down from one backlog to another](../scale/portfolio-management.md) to view the level of detail you want. Also, you can use portfolio backlogs to view a rollup of work in progress across several teams when you [setup a hierarchy of teams](../scale/multiple-teams.md). + +## Define tasks + +When your team manages their work in sprints, they can use the sprint backlog page to break down the work to be accomplished into distinct tasks. + +![Add a task to an item in the sprint backlog](_img/IC795962.png) + +Name the task and estimate the work it will take. + +<img src="_img/scrum-task-form.png" alt="Scrum process, Task work item form" style="border: 2px solid #C3C3C3;" /> + +Using Scrum, teams forecast work and define tasks at the start of each sprint, and each team member performs a subset of those tasks. Tasks can include development, testing, and other kinds of work. For example, a developer can define tasks to implement PBIs, and a tester can define tasks to write and run test cases. + +When teams estimate work using hours or days, they define tasks and the **Remaining Work** and **Activity** (optional) fields. + +<table><thead> +<tr><th><p>Field/tab</p></th><th><p>Usage</p></th></tr></thead> +<tbody valign="top"> +<tr> + <td width="18%"><p>[Remaining Work](../track/query-numeric.md) </p></td> + <td><p>Indicate how many hours or days of work remain to complete a task. As work progresses, update this field. It's used to calculate capacity charts, the sprint burndown chart, and the [Sprint Burndown (Scrum)](../../report/sql-reports/sprint-burndown-scrum.md) report.<br />If you divide a task into subtasks, specify Remaining Work for the subtasks only. You can specify work in any unit of measurement your team chooses.</p></td> +</tr> + + +<tr> + <td><p>[Activity](../track/query-numeric.md) </p></td> + <td><p>Select the type of activity this task represents when your team estimates sprint capacity by activity.</p></td></tr> +</tbody> +</table> + + +## Track test progress + +### Test PBIs + +From the web portal or Test Manager, you can [create test cases that automatically link to a PBI or bug](../../manual-test/getting-started/create-test-cases.md). Or, you can link a PBI or bug to a test case from the ![Links tab icon](../backlogs/_img/icon-links-tab-wi.png) (links tab). + + +<img src="_img/IC793453.png" alt="Web portal, Select the test suite and add a test case" style="border: 2px solid #C3C3C3;" /> + + +The test case contains a number of fields, many of which are automated and integrated with Test Manager and the build process. For a description of each field, see [Query based on build and test integration fields](../track/build-test-integration.md). + +![Scrum Test case work item form](_img/scrum-test-case-form.png) + +The ![Links tab icon](../backlogs/_img/icon-links-tab-wi.png) (links tab) captures the links to all the PBIs and bugs in a test case. By linking PBIs and bugs to test cases, the team can track the progress made in testing each item. + +### Track code defects + +You can [create bugs from the web portal web portal, Visual Studio, or when testing with Test Manager](../backlogs/manage-bugs.md). + +[!INCLUDE [temp](../_shared/common-work-item-fields.md)] + + +## Related notes + +[!INCLUDE [temp](../_shared/create-team-project-links.md)] + +[!INCLUDE [temp](../_shared/customize-work-tracking.md)] + + +### Track impediments + +Use the impediment WIT to track events that may block progress or ship a PBI. Use the Bug WIT exclusively to track code defects. + +You can add an impediment from the [New work item widget](../../Report/widget-catalog.md#new-work-item-widget) added to a [team dashboard](../../Report/dashboards.md), or from the **New** menu on the Queries page. + +![Add work item from a New work item widget](_img/scrum-new-work-item-widget.png) + +Work items you add from the widget are automatically scoped to your [team's default area and iteration paths](../scale/set-team-defaults.md). To change the team context, see [Switch team context](../how-to/switch-team-context-work.md). + + +### Backlog list order + +The [Backlog Priority](../track/planning-ranking-priorities.md) field is used to track the relative ranking of PBIs, bugs, features, or epics. However, by default it doesn't appear on the work item form. The sequence of items on the backlog page is determined according to where you have [added the items or moved the items on the page](../backlogs/create-your-backlog.md#move-items-priority-order). As you drag items, a background process updates this field. + + + + + +### Links control, client work item form + +Work item forms displayed in a client and the web portal for TFS 2015 and earlier versions display link tabs and link control restrictions as described in the following table. + +<table> +<thead> +<tr> +<th><p>Tab name</p></th> +<th><p>Work item type</p></th> +<th><p>Link restrictions</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>All Links</strong></p></td> +<td><p>Feedback Request</p> +<p>Feedback Response</p></td> +<td><ul> +<li><p>No restrictions.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Links</strong></p></td> +<td><p>Product Backlog Item</p> +<p>Bug</p> +<p>Impediment</p> +<p>Shared steps</p> +<p>Task</p> +<p>Test Case</p> +<p></p></td> +<td><ul> +<li><p>No restrictions.</p></li> +</ul> +<p></p></td> +</tr> +<tr> +<td><p><strong>Links</strong></p></td> +<td><p>Code Review Request</p></td> +<td><ul> +<li><p>Allows only <strong>Parent</strong> and <strong>Child</strong> links to Code Review Response work items.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul> +<p></p></td> +</tr> +<tr> +<td><p><strong>Stories</strong></p></td> +<td><p>Feedback Response</p></td> +<td><ul> +<li><p>Allows only <strong>Related</strong> links.</p></li> +<li><p>Allows links to Bug and Product Backlog Items.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul> +<p></p></td> +</tr> +<tr> +<td><p><strong>Storyboards</strong></p></td> +<td><p>Product Backlog Item</p></td> +<td><ul> +<li><p>Allows only <strong>Storyboard</strong> links.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Tasks</strong></p></td> +<td><p>Product Backlog Item</p></td> +<td><ul> +<li><p>Allows only <strong>Child</strong> links to Tasks.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Test Cases</strong></p></td> +<td><p>Product Backlog Item</p> +<p>Bug</p></td> +<td><ul> +<li><p>Allows only <strong>Tested By</strong> links.</p></li> +<li><p>Allows links only to test cases.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>Tested Backlog Items</strong></p></td> +<td><p>Test case</p></td> +<td><ul> +<li><p>Allows only <strong>Tests</strong> links.</p></li> +<li><p>Allows links to Bug and Product Backlog Items.</p></li> +<li><p>Excludes links to work items in other team projects.</p></li> +</ul></td> +</tr> +</tbody> +</table> + + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] diff --git a/docs/work/guidance/scrum-process.md b/docs/work/guidance/scrum-process.md new file mode 100644 index 00000000000..4dd6b9a0127 --- /dev/null +++ b/docs/work/guidance/scrum-process.md @@ -0,0 +1,114 @@ +--- +title: Scrum process template for VSTS & TFS +description: Scrum process objects used to plan and track work, monitor progress, and trends when connecting to Visual Studio Team Services (VSTS) or Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: f4e77db3-e54c-472a-ba60-92ceb8331882 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + + +# Scrum process + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +The Scrum process supports the following work item types (WITs) to plan and track work, tests, feedback, and code review. With different WITs you can track different types of work—such as product backlog items, tasks, bugs, and more. These artifacts are created when you create a team project using the Scrum process. They are based on [Scrum principles and values](https://www.scrum.org/). + +<img src="_img/scrum-process-work-tracking-wits.png" alt="Agile process work item types" style="border: 2px solid #C3C3C3;" /> + +In addition to the WITs, teams have access to a set of shared work item queries to track information, analyze progress, and make decisions. If you work from an on-premises TFS, you also have access to additional [SQL Server reports](#reports) and [SharePoint dashboards](#dashboards). + + +>[!NOTE] +><b>Feature availability:</b> From the cloud-based VSTS, you'll always have access to the latest version of the Scrum process, [which you can also customize](../process/customize-process.md). If you connect to an on-premises Team Foundation Server (TFS), the latest version of the Scrum process uploads automatically when you install or upgrade to the latest version of TFS. You can [customize team projects](../customize/customize-work.md) and use the [Process Template Manager](manage-process-templates.md) to upload and download process templates. +> +>The following WITs are available as follows: Epic, TFS 2015 and later versions; +>Shared Parameters, TFS 2013.2 and later versions; +>and Test Plan and Test Suite, TFS 2013.3 and later versions. +> +>Additional artifacts, such as [SQL Server reports](#reports) and [SharePoint dashboards](#dashboards), are only available when you connect to a team project from an on-premises Team Foundation Server (TFS). Other resource requirements apply. + + +In addition to WITs, reports, and dashboards, teams have access to a set of shared work item queries to track information, analyze progress, and make decisions. + +## Plan and track work with Scrum + +You build your project plan by creating a backlog of work items that represent the features, requirements, user stories, or other work to perform. You track bugs, tasks, and blocking issues using the bug, task, and impediment WITs. To support portfolio management, teams create features and epics to view a roll up of their product backlog items within or across teams. For details about using Scrum WITs, see [Scrum process work item types and workflow](scrum-process-workflow.md). + +The essential flow for getting started is as shown. To get started using Scrum or Kanban tools, see [Get started with Agile tools to plan and track work](../overview.md). + +[![Define stories](../_img/gs-planning-define-stories.png)](../backlogs/create-your-backlog.md)[![Organize backlog](../_img/gs-planning-organize-backlog.png)](../backlogs/organize-backlog.md)[![Manage bugs](../_img/gs-planning-manage-bugs.png)](../backlogs/manage-bugs.md)[![Manage issues](../_img/gs-planning-manage-issues.png)](../backlogs/manage-issues-impediments.md) + +> [!NOTE] +> A work item is a database record that contains the definition, assignment, priority, and state of work. Work item types define the template of fields, workflow, and form for each type. Work items can be linked to each other to support tracking dependencies, roll up of work, and reports. +   + + +[Scrum work item types and workflow](scrum-process-workflow.md) provides more details about using these WITs. + +<a id="shared-queries"></a> +###List work items + +To list work items for a current sprint or the product backlog, use the shared queries that the Scrum process provides. + +![Shared queries (Scrum process)](_img/IC665405.png) + +[Descriptions of predefined queries](#predefined-queries) are listed later in this topic. + +You can open a query from the work items page and then use the [query editor to apply different filter criteria](../track/using-queries.md). Also, you can [add queries to team dashboards](../../report/dashboards.md). From Team Explorer, you can open any [work item query in Excel](../office/bulk-add-modify-work-items-excel.md) to perform bulk edits. + +<blockquote style="font-size: 13px"><b>Tip: </b>Queries listed under the Current Iteration folder do not automatically update when a new iteration becomes current. The current iteration is based on the dates that you [assign to your sprint schedules](../scrum/define-sprints.md). You must manually update the iteration path of each query to have it point to the iteration path that corresponds to the current iteration. Or, you can edit the shared query to [use the **@CurrentIteration** macro](../track/query-by-date-or-current-iteration.md). </blockquote>   + +[!INCLUDE [temp](../_shared/quick-tips-shared-query.md)] + +## Monitor progress + +All processes—Agile, Scrum, and CMMI—support [building status and trend charts and dashboards](../../report/overview.md). In addition, several charts are automatically built based on the Agile tools you use. These charts display within the web portal. + +### Scrum process and light-weight charts +To get started, you can open a shared query and create a chart based on your tracking interests. Chart types include status—pie, bar, column, stacked bar, and pivot—and trend—stacked area, line, and area—charts. + +[![Edit query](../../report/_img/gs-chart-query.png)](../track/using-queries.md)[![Create chart](../../report/_img/gs-chart-create.png)](../../report/charts.md)[![Manage bugs](../../report/_img/gs-chart-add-dashboard.png)](../../report/add-charts-to-dashboard.md) + +[!INCLUDE [temp](../_shared/powerbi-reports-links.md)] + +<a id="reports"></a> +###Scrum process and SQL Server reports (TFS) + +If you connect to an on-premises TFS, you can access the following Scrum process reports. For these reports to be useful, [teams must perform certain activities,](../../report/admin/review-team-activities-for-useful-reports.md) such as define build processes, link work items, and update status or remaining work. + +To access these reports, your team project collection and the team project must be configured with SQL Server Analysis Services and Reporting Services. If you need to add reporting services or update reports to the latest versions, see [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md). + + +<a id="dashboards"></a> +### SharePoint portal dashboards (TFS) + +If you connect to an on-premises TFS, you can access the [Release](../../report/sharepoint-dashboards/release-scrum.md) dashboard displayed through the SharePoint project portal. This dashboard displays project data, support investigation tasks, and help teams to perform common tasks quickly. + +To access this dashboard, your team project must have a [project portal configured and the project portal must point to a SharePoint site](../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md). + + +## Related notes + +[!INCLUDE [temp](../_shared/create-team-project-links.md)] + +<a id="predefined-queries" /> +### Scrum process predefined queries + +Your product owner can plan and track product backlog items and bugs in the product backlog by using the **Product Backlog** query. You can find work items that are assigned to the current sprint by using the shared queries that are listed under the **Current Sprint** folder. These queries find work items that are assigned to a specified iteration or sprint. As you plan additional sprints, you can modify these queries to specify the latest sprint and save them to additional folders that you create, such as **Sprint 2** or **Sprint 3**. + +The project administrator for each team project [defines area paths](../customize/set-area-paths.md) and [iteration paths](../customize/set-iteration-paths-sprints.md) for that project so that the team can track progress by those designations. + +|Shared queries|Description| +|---|---| +|Blocked Tasks | Lists all tasks in the current sprint that have been marked as Blocked.| +|Open Impediments |Lists all open impediment work items in the current sprint.| +|Sprint Backlog |Lists all product backlog items, bugs, and their linked tasks that your team has committed to complete in the current sprint.| +|Test Cases |Lists all test cases in the current sprint and sorts them by priority.| +|Unfinished Work |Lists all product backlog items, bugs, and their linked tasks that have not been marked as Done in the current sprint.| +|Work in Progress |Lists all tasks in the current sprint that are marked as In Progress.| +|Feedback | Lists all feedback responses that are in an Active state. | +|Product Backlog |Lists all product backlog items and bugs that are assigned to the root iteration. Product backlog items and bugs are sorted by backlog priority.| + diff --git a/docs/work/guidance/work-item-field.md b/docs/work/guidance/work-item-field.md new file mode 100644 index 00000000000..683f765a846 --- /dev/null +++ b/docs/work/guidance/work-item-field.md @@ -0,0 +1,102 @@ +--- +title: System and default fields index | VSTS & TFS +description: Index to all fields used in the Agile, Scrum, and CMMI processes and process templates for Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 9720b88e-474c-451b-b3fe-5253ba24a653 +ms.manager: douge +ms.author: kaelli +ms.date: 05/26/2017 +--- + +# Work item field index + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Use this index to look up a description of each field used to track work items. This reference includes all fields defined within the core system processes/process templates: [Agile](agile-process.md), [Scrum](scrum-process.md), and [CMMI](cmmi-process.md). The fields and work item types (WITs) available to you depend on the process you chose when you [created your team project](../../accounts/create-team-project.md). + +To support additional tracking needs, you can define your own custom work item fields. For more information, see: +- **VSTS**: [Customize process](../process/customize-process.md) +- **TFS**: [Modify or add a custom field](../customize/add-modify-field.md) + + +## Alphabetical index +Values in parenthesis indicate the following: + +- **System**: Core system field assigned to all work item types for all processes +- **Agile**: Used only by the [Agile process](agile-process.md) +- **CMMI**: Used only by the [CMMI process](cmmi-process.md) +- **Scrum**: Used only by the [Scrum process](scrum-process.md) +- **TCM**: Used to support Test case management + + +> [!div class="mx-tdBreakAll"] +> | A through C | D through Q| R through W | +> |-------------|----------|---------|---------| +> |**A**<br/>- [Acceptance Criteria](../track/titles-ids-descriptions.md) (Scrum)<br/>- [Accepted By](guidance-code-review-feedback-field-reference.md) <br/>- [Accepted Date](guidance-code-review-feedback-field-reference.md)<br/>- [Activated By](../track/query-by-workflow-changes.md)<br/>- [Activated Date](../track/query-by-workflow-changes.md)<br/>- [Activity](../track/query-numeric.md)<br/>- [Actual Attendee 1-8](cmmi/guidance-review-meeting-field-reference-cmmi.md) (CMMI)<br/>- [Analysis](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/> - [Application Launch Instructions](guidance-code-review-feedback-field-reference.md)<br/> - [Application Start Information](guidance-code-review-feedback-field-reference.md) <br/>- [Application Type](guidance-code-review-feedback-field-reference.md) <br/>- [Area ID](../track/query-by-area-iteration-path.md) (System)<br/>- [Area Path](../track/query-by-area-iteration-path.md) (System)<br/>- [Assigned To](../track/query-by-workflow-changes.md)<br/>- [Associated Context](guidance-code-review-feedback-field-reference.md)<br/>- [Associated Context Code](guidance-code-review-feedback-field-reference.md)<br/>- [Associated Context Owner](guidance-code-review-feedback-field-reference.md)<br/>- [Associated Context Type](guidance-code-review-feedback-field-reference.md)<br/> - [Attached File Count](../track/linking-attachments.md)<br/>- Authorized As (Not used)<br/>- [Automated Test Id](../track/build-test-integration.md) (TCM)<br/>- [Automated Test Name](../track/build-test-integration.md) (TCM) <br/>- [Automated Test Storage](../track/build-test-integration.md) (TCM)<br/> - [Automated Test Type](../track/build-test-integration.md) (TCM) <br/>- [AutomatedTestId](../track/build-test-integration.md) (TCM) <br/>- [AutomatedTestName](../track/build-test-integration.md) (TCM)<br/> -[Automation Status](../track/build-test-integration.md) (TCM)<br/>**B**<br/> - [Backlog Priority](../track/planning-ranking-priorities.md) (Scrum)<br/>- [Blocked](../track/planning-ranking-priorities.md)<br/>- [Board Column](../track/query-by-workflow-changes.md)<br/>- [Board Column Done](../track/query-by-workflow-changes.md)<br/>- [Board Lane](../track/query-by-workflow-changes.md)<br/>- [Business Value](../track/query-numeric.md)<br/>**C**<br/>- [Called By](cmmi/guidance-review-meeting-field-reference-cmmi.md) (CMMI)<br/> - [Called Date](cmmi/guidance-review-meeting-field-reference-cmmi.md) (CMMI)<br/>- [Changed By](../track/history-and-auditing.md) (System)<br/>- [Changed Date](../track/history-and-auditing.md) (System)<br/>- [Closed By](../track/query-by-workflow-changes.md) (System)<br/>- [Closed Date](../track/query-by-workflow-changes.md) (System) <br/> - [Closed Status](guidance-code-review-feedback-field-reference.md)<br/> - [Closed Status Code](guidance-code-review-feedback-field-reference.md) <br/> - [Closing Comment](guidance-code-review-feedback-field-reference.md) <br/>- [Comments](cmmi/guidance-review-meeting-field-reference-cmmi.md) (CMMI)<br/>- [Committed](../track/planning-ranking-priorities.md) (CMMI)<br/>- [Completed Work](../track/query-numeric.md)<br/>- [Contingency Plan](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/> - [Corrective Action Actual Resolution](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/>- [Corrective Action Plan](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/>- [Created By](../track/query-by-workflow-changes.md) (System)<br/>- [Created Date](../track/query-by-workflow-changes.md) (System)|**D**<br/>- [Discipline](../track/query-numeric.md) (CMMI)<br/>- [Description](../track/titles-ids-descriptions.md) (System)<br/>- [Due Date](../track/query-by-date-or-current-iteration.md) (Agile)<br/>**E**<br/> - [Effort](../track/query-numeric.md) (Scrum) <br/> - [Escalate](../track/planning-ranking-priorities.md) (CMMI)<br/>- [External Link Count](../track/linking-attachments.md) <br/>**F**<br/>- [Finish Date](../track/query-by-date-or-current-iteration.md)<br/> - [Found In Build](../track/build-test-integration.md) (TCM)<br/> - [Found In Environment](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/>**H**<br/> - [History](../track/history-and-auditing.md) (System)<br/>- [How Found](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/>- [Hyperlink Count](../track/linking-attachments.md)<br/>**I**<br/>- [ID](../track/titles-ids-descriptions.md) (System)<br/>- [Impact Assessment](cmmi/guidance-requirements-field-reference-cmmi.md) (CMMI)<br/>- [Impact on Architecture](cmmi/guidance-change-request-field-reference-cmmi.md) (CMMI)<br/> - [Impact on Development](cmmi/guidance-change-request-field-reference-cmmi.md) (CMMI)<br/>- [Impact on Technical Publications](cmmi/guidance-change-request-field-reference-cmmi.md) (CMMI)<br/>- [Impact on Test](cmmi/guidance-change-request-field-reference-cmmi.md) (CMMI)<br/>- [Impact on User Experience](cmmi/guidance-change-request-field-reference-cmmi.md) (CMMI)<br/>- [Integrated in Build](../track/build-test-integration.md) (TCM)<br/>- [Issue](../track/build-test-integration.md) (TCM)<br/>- [Iteration Id](../track/query-by-area-iteration-path.md) (System)<br/>- [Iteration Path](../track/query-by-area-iteration-path.md) (System)<br/>**J**<br/>- [Justification](cmmi/guidance-change-request-field-reference-cmmi.md) (CMMI)<br/>**L**<br/>- [Link Comment](../track/linking-attachments.md) (System)<br/>- [Link Description](../track/linking-attachments.md) (System)<br/>- [Local Data Source](../track/build-test-integration.md) (TCM)<br/>**M**<br/>- [Meeting Type](cmmi/guidance-review-meeting-field-reference-cmmi.md) (CMMI)<br/>- [Minutes](cmmi/guidance-review-meeting-field-reference-cmmi.md) (CMMI) <br/>- [Mitigation Plan](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI) <br/>- [Mitigation Triggers](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/>**N**<br/>- [Node Name](../track/query-by-area-iteration-path.md) (System)<br/>**O - P -Q**<br/>- [Optional Attendee 1-8](cmmi/guidance-review-meeting-field-reference-cmmi.md) (CMMI)<br/>- [Original Estimate](../track/query-numeric.md)<br/>- [Parameters](../track/build-test-integration.md) (TCM)<br/>- [Priority](../track/planning-ranking-priorities.md) <br/>- [Probability](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/>- [Proposed Fix](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI) <br/>- [Purpose](cmmi/guidance-review-meeting-field-reference-cmmi.md) (CMMI)<br/>- [Query Text](../track/build-test-integration.md) (TCM)|**R**<br/>- [Rating](guidance-code-review-feedback-field-reference.md)<br/>- [Reason](../track/query-by-workflow-changes.md) (System)<br/>- [Related Link Count](../track/linking-attachments.md) (System)<br/>- [Remaining Work](../track/query-numeric.md) <br/>- [Repro Steps](../track/titles-ids-descriptions.md)<br/>- [Required Attendee 1-8](cmmi/guidance-review-meeting-field-reference-cmmi.md) (CMMI)<br/>- [Requirement Type](cmmi/guidance-requirements-field-reference-cmmi.md) (CMMI)<br/> - [Requires Review](../track/query-numeric.md) (CMMI)<br/>- [Requires Test](../track/query-numeric.md) (CMMI)<br/>- [Resolution]](../track/titles-ids-descriptions.md) (Scrum)<br/>- [Resolved By](../track/query-by-workflow-changes.md)<br/>- [Resolved Date](../track/query-by-workflow-changes.md) <br/> - [Resolved Reason](../track/query-by-workflow-changes.md)<br/>- [Reviewed By](guidance-code-review-feedback-field-reference.md)<br/> - [Reviewed Date](guidance-code-review-feedback-field-reference.md)<br/>- [Rev](../track/history-and-auditing.md) (System) <br/> - [Risk](../track/planning-ranking-priorities.md) (Agile)<br/>- [Root Cause](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI) <br/>**S**<br/>- [Severity](../track/planning-ranking-priorities.md)<br/>- [Size](../track/query-numeric.md) (CMMI)<br/> - [Stack Rank](../track/planning-ranking-priorities.md)<br/>- [Start Date](../track/query-by-date-or-current-iteration.md)<br/> - [State](../track/query-by-workflow-changes.md) (System)<br/>- [State Change Date](../track/query-by-workflow-changes.md)<br/> - [State Code](guidance-code-review-feedback-field-reference.md)<br/>- [Steps](../track/build-test-integration.md) (TCM)<br/> - [Steps to Reproduce](../track/titles-ids-descriptions.md) (TCM)<br/>- [Story Points](../track/query-numeric.md) (Agile)<br/> - [Subject Matter Expert 1-3](cmmi/guidance-requirements-field-reference-cmmi.md) (CMMI)<br/>- [Symptom](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/>- [System Info](../track/titles-ids-descriptions.md) (TCM) <br/>**T**<br/> - [Tags](../track/add-tags-to-work-items.md)<br/>- [Target Date](../track/query-by-date-or-current-iteration.md)<br/>- [Target Resolve Date](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) (CMMI)<br/>- [Task Type](../track/query-numeric.md) (CMMI)<br/> - [Team Project](../track/titles-ids-descriptions.md) (System) <br/>- [Test Suite Audit](../track/build-test-integration.md) (TCM)<br/>- [Test Suite Type](../track/build-test-integration.md) (TCM)<br/>- [Test Suite Type ID](../track/build-test-integration.md) (TCM)<br/>- [Time Criticality](../track/planning-ranking-priorities.md)<br/>- [Title](../track/titles-ids-descriptions.md) (System)<br/>- [Triage](../track/planning-ranking-priorities.md) (CMMI)<br/>**U - V - W**<br/>- [User Acceptance Test](cmmi/guidance-requirements-field-reference-cmmi.md) (CMMI)<br/>- [Value Area](../track/planning-ranking-priorities.md)<br/>- [Work Item Type](../track/titles-ids-descriptions.md) (System) | + + +By using the system fields or other fields you have added to your project collection, you can enable meaningful cross-team project reports and queries. In addition, any non-system field that is referenced in the workflow or forms section of the work item type definition must have a **FIELD** element that defines it in the **FIELDS** section of the work item type definition XML file. Also, you must specify any non-system field that you might want to use to generate a query or report in the **FIELDS** section. + + +### Field reference topics + +The following topics describe fields that are used in common by several WITs, or those that are functionally specific to just one or a few WITs. + +> [!div class="mx-tdBreakAll"] +> |Fields common<br/>to many work types|Fields used<br/>by specific work item types|Fields used<br/>to track CMMI work items| +> |-----------------------------|------------------------|------------------------| +> |-[Titles, IDs, and descriptive fields](../track/titles-ids-descriptions.md)<br/>- [History and revision changes](../track/history-and-auditing.md)<br/>- [Areas and iterations](../customize/set-area-paths.md)<br/> - [Assignments and account-specific fields](../track/query-by-workflow-changes.md)<br/> - [Planning, ranking, and priorities](../track/planning-ranking-priorities.md)<br/>- [Work estimates, activity, and other numeric fields](../track/query-numeric.md)<br/>- [Build and test integration fields](../track/build-test-integration.md)<br/>- [Links and attachment related fields](../track/linking-attachments.md) |- [Code Review Request](guidance-code-review-feedback-field-reference.md)<br/>- [Code Review Response](guidance-code-review-feedback-field-reference.md)<br/>- [Feedback Request](guidance-code-review-feedback-field-reference.md)<br/>- [Feedback Response](guidance-code-review-feedback-field-reference.md)<br/>- [Shared Steps](../track/build-test-integration.md)<br/>- [Test Case](../track/build-test-integration.md)|- [Requirements](cmmi/guidance-requirements-field-reference-cmmi.md)<br/>- [Bugs](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md)<br/>- [Change Requests](cmmi/guidance-change-request-field-reference-cmmi.md)<br/>- [Issues](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md)<br/>- [Review Meetings](cmmi/guidance-review-meeting-field-reference-cmmi.md)<br/>- [Risks](cmmi/guidance-bugs-issues-risks-field-reference-cmmi.md) | + + + +<a id="field-reference"> </a> +## What is a field? How are field names used? + +A work item field name uniquely identifies each work item field. Make sure your field names fall within these guidelines: + +- Field names must be unique within the account/project collection +- Field names must be 128 or fewer Unicode characters +- Field names can't contain any leading or trailing spaces, nor two or more consecutive spaces +- Field names must contain at least one alphabetic character +- Field names can't contain the following characters: ```.,;'`:~\/\*|?"&%$!+=()[]{}<>```. + +Because custom fields are defined for the account collection, you can't add a custom field to a process with the same field name that you add to another inherited process. + +When adding custom fields, note the following limits: +* A maximum of 256 fields can be defined for each WIT +* A maximum of 512 fields can be defined per process + +<a id="wi-explorer"> </a> +## Hidden field attributes and the Work Item Field Explorer + +There are several non-changeable and virtually hidden attributes for each field. You can look up the assignments of these fields using the Work Item Field Explorer tool. + +![Work item field explorer](../customize/_img/IC633020.png) + +For a description of each attribute, see this post: [Work Item Field Attributes - What You Can and Can't Change](http://blogs.msdn.com/b/visualstudioalm/archive/2012/08/17/work-item-field-attributes-what-you-can-and-can-t-change.aspx). + +To access the Work Item Field Explorer, you must install the Process Editor (requires that you have installed a version of Visual Studio): + - For TFS 2017 and later versions, [install the TFS Process Template editor from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KarthikBalasubramanianMSFT.TFSProcessTemplateEditor). You can use this version of the Process Editor to modify the old-style work item forms. You can't use it to edit forms associated with the [new web forms](../process/new-work-item-experience.md). + - For TFS 2015 and earlier versions, install [TFS Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power). + + + +## Related notes + +- [Create managed queries](../track/example-queries.md) +- [Define a query](../track/using-queries.md) +- [Choose a process](choose-process.md) +- [Reportable fields reference](../reference/reportable-fields-reference.md) (on-premises TFS only) + +You can list the attributes of fields using the [**witadmin listfields** command](../reference/witadmin/manage-work-item-fields.md). + +### VSTS and the Inheritance process model +To add fields to a process, modify select field attributes, and review fields added to a process, see [Customize a process](../process/customize-process.md). + +Also, you can [view the list of fields defined for a process](../process/customize-process.md) and the WITs which reference them. + + +### TFS +You can change the field name, the index, and the report attributes for any field except system fields by using the **witadmin** command-line tool. For more information, see [Manage work item fields-witadmin](../reference/witadmin/manage-work-item-fields.md). + diff --git a/docs/work/how-to/_img/checkmark.png b/docs/work/how-to/_img/checkmark.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/work/how-to/_img/checkmark.png differ diff --git a/docs/work/how-to/_img/set-permissions-area-node-dialog.png b/docs/work/how-to/_img/set-permissions-area-node-dialog.png new file mode 100644 index 00000000000..019f02400c9 Binary files /dev/null and b/docs/work/how-to/_img/set-permissions-area-node-dialog.png differ diff --git a/docs/work/how-to/_img/set-permissions-area-node-open.png b/docs/work/how-to/_img/set-permissions-area-node-open.png new file mode 100644 index 00000000000..f06dc425dd6 Binary files /dev/null and b/docs/work/how-to/_img/set-permissions-area-node-open.png differ diff --git a/docs/work/how-to/_img/switch-team-focus-account-project-page-icon.png b/docs/work/how-to/_img/switch-team-focus-account-project-page-icon.png new file mode 100644 index 00000000000..806ceb3f6b7 Binary files /dev/null and b/docs/work/how-to/_img/switch-team-focus-account-project-page-icon.png differ diff --git a/docs/work/how-to/email-work-items.md b/docs/work/how-to/email-work-items.md new file mode 100644 index 00000000000..146ddb80974 --- /dev/null +++ b/docs/work/how-to/email-work-items.md @@ -0,0 +1,315 @@ +--- +title: Email or print work items | VSTS & TFS +description: Email links, Copy URL, and share information about work items, queries, and more - Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: B2E9B082-15BE-448C-96D8-3EF048A15560 +ms.manager: douge +ms.author: kaelli +ms.date: 06/19/2017 +--- + +# Email or print work items + +**VSTS | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013 | Visual Studio 2015 | Team Explorer Everywhere** + + +Using work items to track your work provides a host of benefits, including the ability to easily share information. You can capture most information within the work item Description or other rich-text formatted field. If you need to maintain the information in a different format, you can easily link to or attach a file. + +Here's a list of the most common ways in which teams share information and plans using work item tracking. + +>[!NOTE] +><b>Feature availability: </b>Some features are only available from the web portal or a Team Foundation client such as Visual Studio or the Eclipse plug-in, Team Explorer Everywhere (TEE). + +<table > +<thead align="center"> +<tr > +<th align="left" width="46%">Task/feature </th> +<th align="center" width="15%">Web portal</th> +<th align="center" width="15%">Visual Studio</th> +<th align="center" width="24%">TEE (Eclipse plug-in)</th> + +</tr> +</thead> +<tbody align="center" > + + +<tr> +<td align="left">[Email summary list with links to work item(s)](#email-summary-lists)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">[Print work item(s)](#print-items)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> + +</tr> +<tr> +<td align="left">[Email link to a work item query](#copy-url) </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> + +</tr> + + + +<tr> +<td align="left">[Email query results list](#email-summary-lists) </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> + +</tr> + + +<tr> +<td align="left">[Release summary (VSTS)](#release-summary) </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td> </td> + +</tr> + +</tbody> +</table> + +In addition, if you have stakeholders who don't contribute code but want to contribute to the discussion and review progress, make sure you provide them [stakeholder access](../../quickstart/get-started-stakeholder.md) so that they can view work items and dashboards. + + +<a id="email-print-send-links"></a> + +Some of the most common ways information is shared within a team or across teams is by emailing lists or links to work items. + +<a id="email-item"></a> +## Email a single item + +You can quickly email a summary of one or more work items. Summaries include the values assigned to these fields: work item ID, title, work item type, assigned to, state, and tags. + +>[!NOTE] +>You can only send the email to addresses that are recognized by the system, that is accounts of team members or stakeholders. If you add an email account that the system doesn't recognize, you receive a message that one or more recipients of your email don't permissions to read the mailed work items. + +# [Browser](#tab/browser) + +### Team Services +<a id="team-services-email" /> +**From the web portal**, open the ![Actions icon](../_img/icons/actions-icon.png) Actions menu and choose the email option. + +![Email work item from VSTS](../track/_img/share-plans-email-work-item-ts.png) + +### TFS, Web Portal +<a id="tfs-portal-email" /> + +**From the web portal**, open the work item and click the ![mail icon](../_img/icons/mail_icon.png) mail icon. + +![Email work item from on-prem TFS](../track/_img/share-plans-email-work-item-tfs.png) + +> [!NOTE] +> If you connect to an on-premises TFS, your TFS admin must have [configured an SMTP server](../../tfs-server/admin/setup-customize-alerts.md) for the email feature to work. + + +# [Visual Studio](#tab/visual-studio) + +<a id="team-explorer-email" /> + +From Visual Studio or Team Explorer, choose ![Send work item to Microsoft Outlook](../track/_img/IC764665.png). This option requires that you configure Office Outlook on your client computer. + +![Email work item from on-prem TFS](../track/_img/share-plans-email-work-item-te.png) + +# [Team Explorer Everywhere](#tab/tee) + +<a id="tee-email" /> + +**From Eclipse**, open the work item and click the ![mail icon](../_img/icons/mail_icon.png) mail icon. + +![Email work item from TEE](../track/_img/share-plans-email-work-item-tfs.png) + +--- + +<a id="email-summary-lists"></a> +## Email summary lists with links to items + +Another way to share items is by emailing summary lists, such as a sprint summary plan or active bugs list. You can do this from a backlog or query results list. + +Depending on the option and client you choose, summary lists may or may not include a hyperlink to the work item ID. + + +# [Browser](#tab/browser) + +### Team Services, TFS 2017 + +<a id="team-services-email-list" /> +<a id="email-list-web-portal" > </a> + +**To email items from the web portal**: Open a backlog or query and highlight the items from the list. Open the context menu for one of the selected items and select to email them. + +![Email selected items from a list](../track/_img/share-plans-email-selected-work-items-tfs-15.png) + +If you want to mail a list of all items in the backlog or query, simply click the ![mail icon](../_img/icons/mail_icon.png) mail icon. + +![Email full backlog or query results list](../track/_img/share-plans-email-summary-list-web-portal.png) + +### TFS 2015 +<a id="tfs-portal-email-list" /> + +> [!NOTE] +> Your TFS admin must have [configured an SMTP server](../../tfs-server/admin/setup-customize-alerts.md) for the email feature to work. + +**To email items from the web portal for TFS 2015**: Open a backlog or query and highlight the items from the list. Open the context menu for one of the selected items and select to email them. + +![Email selected items from a list](../track/_img/share-plans-email-summary-list-ts.png) + +If you want to mail a list of all items in the backlog or query, simply click the ![mail icon](../_img/icons/mail_icon.png) mail icon. + +![Email full backlog or query results list](../track/_img/share-plans-email-summary-list-web-portal.png) + + +# [Visual Studio](#tab/visual-studio) +<a id="team-explorer-email-list" /> + +**To email items from Visual Studio**: Open a query, highlight the items from the list, and then choose the Send selection to Microsoft Outlook from the context menu. This option requires that you configure Office Outlook on your client computer. + +![Email selected items from Visual Studio query result list ](../track/_img/share-plans-email-work-item-list.png) + + +# [Team Explorer Everywhere](#tab/tee) + +<a id="tee-email-list" /> + +**From Eclipse**: Open a query, highlight the items from the list, and then choose the Copy selected items to the clipboard from the context menu. Paste the clipboard contents to your email application. + +![Email selected items from Eclipse query result list](../track/_img/share-plans-email-work-item-list-eclipse.png) + +--- + +<a id="copy-formatted-list"></a> +## Copy formatted list of work items + +With this option, you can copy an HTML formatted table of selected items. You can then email this list using your choice of email client. + +1. From the web portal, open a backlog or a list of query results. + +2. Select the work items you want to copy. + + ![Copy as HTML selected work items](../track/_img/IC777601.png) + + The formatted table contains a link to each work item included in your selected results list. + +3. Paste the contents of the clipboard into your email client or other application. To open a linked work item, requires users to have read access to the team project or area node for those work items. + +<a id="print-items"></a> +## Print items + +To print the details of a work item, open a query in Visual Studio that contains the work item(s) you want to print, and select or highlight those items that you want to print. Then, choose the print option from the context menu. + +![Print work items from Team Explorer](../track/_img/share-plans-print-work-item-details.png) + + +<a id="copy-url"> </a> +## Copy the URL to a single work item + +> [!NOTE] +> All URLs you copy, regardless of the client you use to copy them, opens the work item in the web portal. + +# [Browser](#tab/browser) +### Team Services, TFS 2017 +<a id="team-services-copy-url" /> + +**From the web portal**, simply copy the URL from the web browser address or hover over the title and then click the ![Copy to clipboard icon](../backlogs/_img/icon-copy-to-clipboard.png) copy-to-clipboard icon. + +<img src="../backlogs/_img/add-work-item-copy-URL.png" alt="Copy hyperlink for a work item from web portal" style="border: 2px solid #C3C3C3;" /> + +### TFS 2015, TFS 2013 + +<s id="tfs-portal-copy-url" /> + +**From the web portal for an on-premises TFS**, open the work item and then from the context menu for the browser, choose the copy link option. + +![Copy hyperlink for a work item from web portal for TFS item](../track/_img/share-plans-copy-URL-wi-tfs.png) + + +# [Visual Studio](#tab/visual-studio) +<a id="team-explorer-copy-url" /> + +**From Visual Studio**, right-click the work item tab to copy the URL. The URL opens the work item in the web portal. + +![Copy full path hyperlink for a work item from Visual Studio](../backlogs/_img/add-work-items-copy-url-for-a-work-item.png) + +# [Team Explorer Everywhere](#tab/tee) + +<a id="tee-copy-url" /> + +**From Eclipse**, open a query that contains the work item, and then open the context menu to Copy the URL for the selected work item. + +![Copy full path hyperlink for a work item from Eclipse](../track/_img/share-plans-copy-URL-wi-eclipse.png) + +--- + +<a id="release-summary"></a> +## Email release summary + +From the Release hub, [choose a specific release](../../build-release/actions/view-manage-releases.md) and click the ![email](../_img/icons/email-icon.png) Send Email icon to share the results of that release. + + +>[!NOTE] +><b>Feature availability: </b>This feature is currently available only from VSTS. + + +![Release summary, send email](../track/_img/share-plans-email-release-definition.png) + +In the To box, start typing the name of the team member you want to send the summary mail to. + +![Email of a release summary](../track/_img/share-plans-email-release-definition-send.png) + +Optionally, enter a note about the release or un-check any section you don't want included. The default is to include all details, environmental summary, issues, and work items associated with the release. + + + +## Related notes + +As you can see, there are many ways to share information using work items alone. + + +### Work item hyperlink format +How do you define a hyperlink that opens a work item? Specify a URL that conforms to the following syntax: + +**VSTS**: + +   <b>https://</b>*AccountName.visualstudio.com/ProjectName/*<b>_workitems?id=</b>*WorkItemNumber*<b>&_a=edit</b> + +   Example: `https://fabrikam/DefaultCollection/Phone%20Saver/_workitems?id=133&_a=edit` + +**For TFS 2017, TFS 2015**: + +   <b>http://</b>*ServerName:Port*/<b>tfs/</b>*CollectionName/TeamProjectName*/<b>_workitems?id=</b>*WorkItemNumber*<b>&_a=edit</b> + +   Example: `http://fabrikamprime:8080/tfs/DefaultCollection/Phone%20Saver/_workitems/133&_a=edit` + +**For TFS 2013.2**: + +   <b>http://</b>*ServerName:Port*/<b>tfs/</b>*CollectionName/TeamProjectName*/<b>_workitems/edit/</b>*WorkItemNumber* + +   Example: `http://fabrikamprime:8080/tfs/DefaultCollection/Phone%20Saver/_workitems/edit/133` + +**For on-premises TFS 2013.1 and earlier versions**: +   <b>http://</b>*ServerName:Port*/<b>tfs/</b>*CollectionName/TeamProjectName*/<b>_workitems#_a=edit&id=</b>*WorkItemNumber* + +   Example: `http://fabrikamprime:8080/tfs/DefaultCollection/Phone%20Saver/_workitems#_a=edit&id=133` + + +**where**: + +- *AccountName* specifies the name of the VSTS account +- *ServerName* specifies the name of the TFS application tier server +- *Port* specifies the port, default=8080 +- *CollectionName* specifies the name of the team project collection. +- *TeamProjectName* specifies the team project name +- *WorkItemNumber* specifies the ID of the bug, task, or other work item. + + + + \ No newline at end of file diff --git a/docs/work/how-to/filter-backlog-or-board.md b/docs/work/how-to/filter-backlog-or-board.md new file mode 100644 index 00000000000..82c186c55a8 --- /dev/null +++ b/docs/work/how-to/filter-backlog-or-board.md @@ -0,0 +1,181 @@ +--- +title: Filter backlogs and boards | VSTS & TFS +description: Filter your backlog or board based on work item type, assigned to, iteration or sprint, tags, or parent work items +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 07115349-C78A-4BF4-9037-38EB54A38036 +ms.manager: douge +ms.author: kaelli +ms.date: 07/24/2017 +--- + +<a id="filter"></a> + +# Filter backlogs, boards, and queries + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +<!--- NEEDS UPDATING BASED ON FEATURES UNDER RELEASE --> + +If you have many items listed in your product or portfolio backlog, Kanban board, or query results—and you want to focus on a subset of them—you can filter the set. + +## Filter based on keywords +You can use keywords to filter your backlogs, Kanban boards, and query results. The filter function picks up work items based on any visible/displayed column or field, including tags, based on the keyword that you enter. Also, you can enter a value for an ID, whether or not the ID field is visible. + +Here, we filter the backlog to only show items that include 'Web' in any one of the displayed column fields. + +<img src="../backlogs/_img/cyb-filter-backlog.png" alt="Apply text filter" style="border: 2px solid #C3C3C3;" /> + +The filtered set is always a flat list, even if you've selected to show parents. + +The filter criteria ignores the following characters when the field value starts with the character: ```{, (, [, !, @, #, $, %, ^, &, *, ~, `, ', "```. + +## Filter based on tags +If you've [added tags to your work items](../track/add-tags-to-work-items.md), you can filter your backlogs, Kanban boards, and query results using the ![tag filter icon](../_img/icons/tag_filter_icon.png) tag filter. For backlogs and query results, add Tags as a column option prior to filtering on tags. + +To filter the Kanban board using tags, make sure that you first [customize cards to Show tags](../customize/customize-cards.md). + +To learn more about filtering using Tags, see [Add tags to work items to categorize and filter lists and boards, Filter lists using tags](../track/add-tags-to-work-items.md#filter) + + +## Filter your Kanban board + +Depending on the size of your team and the number of stories in progress, your Kanban board can get a bit crowded. With filtering, you can selectively choose what cards display to focus on what's of interest in the moment. With parent work item filters, you can focus on one or more select features or epics. + +<table width="70%"> +<tr> +<th width="40%">Filter options </th> +<th width="20%">Team Services</th> +<th width="20%">TFS 2015 </th> +<th width="20%">TFS 2017 </th> +</tr> + + +<tr> +<td align="left">[Filter by keyword and tags](#text-filter)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + + +<tr> +<td align="left"> +[Filter by select field values](#field-filter) +</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left"> +[Filter by parent work items](#parent-filter) +</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +</table> + + + +<a id="text-filter"></a> + +## Filter your Kanban board using keywords and tags + +>[!NOTE] +><b>Feature availability: </b>Filter by keywords and tags is available from VSTS and TFS 2015 and later versions. + +To filter the Kanban board, first customize the board settings so that the cards display the fields or tags that contain keywords that you want to filter on. Otherwise, the keywords you enter will filter work items based on title. + +For example, to filter by Assign To, Iteration Path, or Work Item Type—or the contents of any other field—you add those fields to show on the cards. For details, see [Customize cards](../customize/customize-cards.md). + +![Kanban board, customize card fields](../kanban/_img/filter-kb-card-field-settings.png) + +The filter function displays work items based on any visible/displayed column or field, including tags, based on the keyword that you enter. + +For example, here we filter the backlog to only show items that include 'Web' in any one of the displayed column fields. + +![Kanban board, Filter using keyword search](../kanban/_img/filter-kb-filter-text-web.png) + +>[!TIP] +>Type <span style="color:purple; font-family:Courier new; font-size:1.1em; font-weight:bold">f</span> to move your cursor to the filter box. To move the focus up or down within a column, enter the ![Up/Down arrow](../_img/icons/Arrow_Up.png)![ ](../_img/icons/Arrow_Down.png) up/down arrows. +>For more tips, see [Keyboard shortcuts](../../reference/keyboard-shortcuts.md). + +If you want to filter for a specific work item ID, you must choose to show IDs on the cards. + +The filter criteria ignores the following characters when the field value starts with the character: ```{, (, [, !, @, #, $, %, ^, &, *, ~, `, ', "```. + + +<a id="field-filter"></a> +## Filter your Kanban board using select field values + +>[!NOTE] +><b>Feature availability: </b>Filter by select fields is available from VSTS and TFS 2017 and later versions. + +You can filter by select field values using the Kanban board for your product backlog (Stories, Product Backlog Items, or Requirements) or a portfolio backlog (Features or Epics). + +To start filtering, click the ![Kanban filter icon](../_img/icons/kanban-filter-icon.png) Kanban board filter icon. + +<img src="../kanban/_img/filter-kb-choose-filter.png" alt="Enable kanban field-based filtering" style="border: 2px solid #C3C3C3;" /> + +Choose one or more values from the multi-select drop-down menu for each field. The values for these fields are populated as follows: +- **Assigned To**: All users who are currently assigned to work items on the board plus Unassigned +- **Iteration**: All Iteration Paths [activated for the current team](../scrum/define-sprints.md) +- **Work item type**: Work item types defined for the Requirements Category (product backlog) or Features or Epic categories (feature or epic portfolio backlogs) +- **Tags**: All tags assigned to work items on the board +- **Parent Work Items**: All features defined for the team, or all epics defined for the team when viewing the Features board (The Parent Work Items field doesn't appear when viewing the Epic or top-level Kanban board) + +For example, here we filter for all items assigned to Jamal and Raisa. + +<img src="../kanban/_img/filter-kb-filters-chosen.png" alt="Kanban board, Filter on assignment field" style="border: 2px solid #C3C3C3;" /> + +Filters remain in place until you explicitly clear them by clicking <span style="color:blue">Clear filters</span>. When you refresh your Kanban board or log in from another browser, filters remain set to your previous values. + +Once the board is filtered, you can click the filter icon to hide the drop downs and view the applied filters on the board. The filter icon also turns opaque to signify a filtered board. + + +<a id="parent-filter"></a> +## Filter your Kanban board by specifying parent work items +>[!NOTE] +><b>Feature availability: </b>The **Filter by parent** feature is available from VSTS and TFS 2017 and later versions. + +You can use the **Filter by parent** feature to filter by select parent work items using the Kanban board for your product backlog (Stories, Product Backlog Items, or Requirements) or a portfolio backlog (Features). + +You can use this feature only when you've created features or epics and linked them to user stories or features, respectively. A quick and easy way to create the links is to [map them using drag-and-drop](../backlogs/organize-backlog.md). Mapping creates parent-child links between the work items. + +>[!NOTE] +>The **Filter by parent** feature doesn't support filtering of parent work items of the same work item type. For example, you can't filter the Stories backlog by specifying user stories that are parents of nested user stories. + +To start filtering, click the ![Kanban filter icon](../_img/icons/kanban-filter-icon.png) Kanban board filter icon. Choose one or more values from the multi-select drop-down menu for the Parent Work Item. These values are derived from the [Features](../kanban/kanban-epics-features-stories.md) you've defined. + +Here, we choose two features on which to filter the board. + +<img src="../kanban/_img/filter-kb-choose-parent-work-items.png" alt="Kanban board, Filter on parent work items" style="border: 2px solid #C3C3C3;" /> + +The final board displays just those stories linked as child work items to the selected features. + +## Related notes +- [Tags](../track/add-tags-to-work-items.md) +- [Managed queries](../track/using-queries.md) +- [Set column options](set-column-options.md) +- [Customize cards](../customize/customize-cards.md) + +<a id="filter-logic"></a> +### Filter logic +Work item cards are filtered based on the assignments made in the following order and logic: + +1. **Assigned to**: Show all cards that are assigned to user 1 ```OR``` user 2 + ```AND``` +2. **Iteration**: Show all cards that are assigned to Iteration 1 ```OR``` Iteration 2 + ```AND``` +3. **Work Item type**: Show all cards that are work item type 1 ```OR``` work item type 2 + ```AND``` +4. **Tags**: Show all cards that have tag 1 ```AND``` or ```OR``` tags 2, based on your selection of ```AND | OR```. + ```AND``` +5. **Parent Work Items**: Show all cards that have Parent Work Item 1 ```OR``` Parent Work Item 2. + + + diff --git a/docs/work/how-to/set-column-options.md b/docs/work/how-to/set-column-options.md new file mode 100644 index 00000000000..b9912d6ce30 --- /dev/null +++ b/docs/work/how-to/set-column-options.md @@ -0,0 +1,29 @@ +--- +title: Set column options | VSTS & TFS +description: Show fields in a column for a backlog or query in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 823CC1FD-74A9-4123-92E1-506A505DEC8D +ms.manager: douge +ms.author: kaelli +ms.date: 06/01/2017 +--- + + +<a id="column-options"> </a> +# Change column options + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +From each backlog page or query, you can add or remove columns. Or, you can drag a column to a new position. + +Start by opening the Column Options. Unlike a query result, you can't sort a backlog by column. However, you can use the Create Query option on each backlog to create a query that you can sort on any field column you choose. + +Each user can set their own column options which persist for each product or portfolio backlog across user sessions. + +<img src="../_img/b-vs-b-column-options.png" alt="Open column options" style="border: 2px solid #C3C3C3;" /> + + +## Related notes +- [Backlogs, boards, and plans](../backlogs-boards-plans.md) +- [Use the query editor to create managed queries](../track/using-queries.md) diff --git a/docs/work/how-to/set-permissions-access-work-tracking.md b/docs/work/how-to/set-permissions-access-work-tracking.md new file mode 100644 index 00000000000..93253ab18fe --- /dev/null +++ b/docs/work/how-to/set-permissions-access-work-tracking.md @@ -0,0 +1,107 @@ +--- +title: Set permissions and access for tracking | VSTS & TFS +description: How to guide for setting permissions and access levels to support work tracking tasks (VSTS and Team Foundation Server) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 5AD0BF62-C91E-46DD-8C1A-C8D1F8F8D05F +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + +# Set permissions and access for work tracking + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can grant or restrict access to various work tracking features. You do this by granting users or groups specific permissions for the team project or at the object-level. + +**Project-level permissions** +- Restrict ability to create work item tags +- Restrict ability to delete and restore work items +- Restrict ability to move work items out of a team project +- Grant ability to permanently delete work items +- Customize a team project + - Create and modify work item types, link types, categories, and process configuration + - Add teams and team administrators + - Edit project level permissions + +**Object-level permissions** +- Restrict access to view or modify work items under an area path +- Grant access to define or modify queries or query folders +- Grant access to create and manage area paths or iteration paths + +**Role-based permissions** +- Add a user as a team administrator to allow them to configure team settings + +Add users to the Contributors group to provide access to most features as listed in [Permissions and access for work tracking](../permissions-access-work-tracking.md) + +<a id="set-permissions-area-path" > </a> + +## Set permissions to restrict access to edit or modify work items + +Permissions you set on an area path allow you to permit or restrict access to edit or modify work items, test cases, or test plans assigned to those areas. You can restrict access to users or groups. You can also set permissions for who can add or modify areas or iterations for the team project. + +1. From the web portal admin context, open the **Work>Areas** page, and then click the context menu for the node you want to manage. + + <img src="_img/set-permissions-area-node-open.png" alt="Open the security dialog" style="border: 2px solid #C3C3C3;" />  +<!--- + <img src="../customize/_img/ALM_CW_OpenSecurityDialog.png" alt="Open the security dialog" style="border: 2px solid #C3C3C3;" /> --> + +2. Select the group or team member, and then change the permission settings. If you don't see the group you want, try adding it first. + + For example, here we've added the Disallow Access Group, and disallowed members of this group the ability to view, modify, or edit work items in the Customer Service area path. + + <img src="_img/set-permissions-area-node-dialog.png" alt="Permissions for an area node" style="border: 2px solid #C3C3C3;" /> + +<!--- <img src=".../customize/_img/ALM_CW_PermisionsForArea.png" alt="Permissions for an area node" style="border: 2px solid #C3C3C3;" />--> + +You can specify two explicit authorization states for permissions: **Deny** and **Allow**. In addition, permissions can exist in one of three additional states. + +| Permission | Authorization | +| ----------------- | ------------- | +| Allow | Explicitly grants users to perform the task associated with the specific permission. For users to access a task, the associated permission must be set to **Allow** or **Inherited allow**. | +| Deny | Explicitly prevents users from performing the task associated with the specific permission. **Deny** takes precedence over **Allow**. <br/>For exceptions to these rules, see [Permissions reference](../../security/about-permissions.md#inheritance)| +| Inherited allow/Inherited deny | Allows or denies a user to perform the task associated with the permission based on the permission set for a group to which the user belongs. | +| Not set | Implicitly prevents users from performing the action associated with the permission. <br/>Because the permission is neither explicitly set to **Deny** nor explicitly set to **Allow**, authorization for that permission can be inherited from other groups of which the user or group is a member. <br/>By default, most permissions are not set to either **Deny** or **Allow**, the permissions are left **Not set**. | + + +For additional ways to restrict modifications to work items, see [Restrict who can create or modify a work item](../reference/apply-rule-work-item-field.md). + + + +<a id="move-delete-permissions"></a> +## Set permissions to delete work items + +By default, Project Administrators and Contributors can change the work item type and delete work items by moving them to the Recycle bin. Only Project Administrators can permanently delete work items and test artifacts. Project admins can grant permissions to other team members as needed. + +For example, as a project admin you can grant a user, team group, or other group you've created to have these permissions. Open the Security page for the team project and choose the user or group you want to grant permissions. (To learn how to access the admin pages, see [Work in the web portal](../../connect/work-web-portal.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json).) + +In this example, we grant the Team Admins group permissions to move work items to another team project and to permanently delete work items. + +<img src="../backlogs/_img/delete-test-project-permissions.png" alt="Set Team Admin permissions" style="border: 2px solid #C3C3C3;" /> + +<a id="restrict-delete-permissions"></a> +## Restrict users from deleting work items +You can restrict users from deleting work items by changing their permissions to Delete work items in this project. For more information about restricting permissions, see [Restrict access to resources, Work items](../../accounts/restrict-access-tfs.md#work-items). + +<a id="delete-test-permissions"></a> +## Additional permissions and access level required to delete test artifacts + +In addition to the project-level permissions set in the previous section, team members need permissions to manage test artifacts which are set for an area path. + +Open the Security page for the area path and choose the user or group you want to grant permissions. + +<img src="../backlogs/_img/delete-test-artifacts-open-area-permissions.png" alt="Open Area path permissions for the team project" style="border: 2px solid #C3C3C3;" /> + +Set the permissions for **Manage test plans** and **Manage test suites** to **Allow**. + +<img src="../backlogs/_img/delete-test-artifacts-area-path-permissions.png" alt="Set Area path permissions for the team project" style="border: 2px solid #C3C3C3;" /> + +To have full access to the Test feature set, your [access level must be set to Advanced](../../security/change-access-levels.md). Users with Basic access and with permissions to permanently delete work items and manage test artifacts can only delete orphaned test cases. + +## Related notes + +* [Set permissions on queries and query folders](../track/set-query-permissions.md) +* [Set permissions on delivery plans](../scale/review-team-plans.md#plan-permissions) +* [Permissions and access for work tracking](../permissions-access-work-tracking.md) +* [Permissions and groups reference](../../security/permissions.md) diff --git a/docs/work/how-to/switch-team-context-work.md b/docs/work/how-to/switch-team-context-work.md new file mode 100644 index 00000000000..e1d353c0f5d --- /dev/null +++ b/docs/work/how-to/switch-team-context-work.md @@ -0,0 +1,84 @@ +--- +title: Switch team project or team context | VSTS & TFS +description: Change the focus of your view to another team project or team Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 2C0977AB-91A4-477C-870E-FA5540E76F4B +ms.manager: douge +ms.author: kaelli +ms.date: 06/01/2017 +--- +<a id="switch-team-context"> </a> + +# Switch team project or team focus + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Several features depend on the team project or team that you have selected. For example, dashboards, backlogs, and board views will change depending on the context selected. + +For example, when you add a work item, the system references the default area and iteration paths defined for the team context. Work items you add from the team dashboard (new work item widget) and queries page are assigned the team default iteration. Work items you add from a team backlog or board, are assigned the team default backlog iteration. To change team defaults, see [Set team defaults](../scale/set-team-defaults.md). + +You navigate to your team context from the top navigation bar. The method changes slightly depending on the platform/version you work from. + +## View teams + +To view a list of teams defined for a team project, open the admin context for the team project, and choose **Overview**. + +>[!NOTE] +>**Feature availability**: The **Change process** link is only supported for team projects that use the [Inheritance process model](../customize/inheritance-process-model.md). + +<img src="../scale/_img/multiple-teams-view-teams.png" alt="Web portal, admin context, team project, Overview page" style="border: 2px solid #C3C3C3;" /> + +## Switch to a different team + +>[!NOTE] +>**Feature availability**: The Account Landing Page feature is in preview mode for VSTS and enabled for all users from web portal for TFS 2017.1 and later versions. To learn more about this feature, see [Work effectively from your account hub](/vsts/connect/account-home-pages). To enable or disable the feature, see [Enable preview features](/vsts/collaborate/preview-features). + + + + +### Team Services +<a id="switch-context-team-services" /> + +You can switch your team focus to a team project or team you've recently viewed from the team project/team drop-down menu. If you don't see the team or team project you want, click **Browse…** to [browse all team projects and teams](/vsts/connect/account-home-pages). To access your [account hub](/vsts/connect/account-home-pages), click the ![VSTS icon](../../_shared/_img/switch-team-focus-account-project-page-icon.png) VSTS icon. If you haven't yet enabled the Account Landing Page, you'll be taken to the account home page. + +To go directly to the [project vision and status page](/vsts/collaborate/project-vision-status), choose the project home icon from the drop-down menu, for example, ![project home icon](../../_shared/_img/work-web-portal-home-page-icon.png). + +<img src="../../_shared/_img/work-web-portal-ts-switch-team-focus.png" alt="Choose another team from the team project menu" style="border: 2px solid #C3C3C3;" /> + +### TFS 2017.1 +<a id="switch-context-tfs-2017-1" /> + +To switch your team focus to a team project or team you've recently viewed, hover over the ![VSTS icon](_img/switch-team-focus-account-project-page-icon.png) VSTS icon and choose from the drop-down menu of options. If you don't see the team or team project you want, choose **Browse…** to [browse all team projects and teams](/vsts/connect/account-home-pages). Your selection will open the [project vision and status page](/vsts/collaborate/project-vision-status) for the team project. + +To access your [account hub](/vsts/connect/account-home-pages), click the ![VSTS icon](_img/switch-team-focus-account-project-page-icon.png) VSTS icon. If you haven't yet enabled the Account Landing Page, you'll be taken to the account home page. + +To go directly to the [project vision and status page](/vsts/collaborate/project-vision-status), choose the project home icon from the drop-down menu, for example, ![project home icon](../../_shared/_img/work-web-portal-home-page-icon.png). + +<img src="../../_shared/_img/work-web-portal-tfs-2017-1-switch-team-focus.png" alt="Choose another team from the team project menu" style="border: 2px solid #C3C3C3;" /> + + +### TFS 2017 +<a id="tfs-2017-switch-context" /> + +Open the team project/team drop-down menu and select the team project/team that you've recently visited. If you don't see the team or team project you want, choose **Browse all** to browse all team projects and teams. + +<img src="../_shared/_img/switch-context-tfs-2017.png" alt="Choose another team from the team project menu" style="border: 2px solid #C3C3C3;" /> + + +### TFS 2015 +<a id="tfs-2015-switch-context" /> + +Open the team project/team drop-down menu and select the team project/team that you've recently visited. If you don't see the team or team project you want, choose **Browse all** to browse all team projects and teams. + +<img src="../_shared/_img/switch-team-project-2.png" alt="Choose another team from the team project menu" style="border: 2px solid #C3C3C3;" /> + + +## Switch to a team project or team from the account hub +If you work in VSTS and TFS 2017.1, you can use your account hub to view and quickly navigate to teams, team projects, branches, work items, pull requests and other objects that are relevant to you. For details, see [Work effectively from your account hub](../../connect/account-home-pages.md). + + + +## Related notes +- [Work effectively from your account hub](../../connect/account-home-pages.md) +- [Add teams and team members](../scale/multiple-teams.md) \ No newline at end of file diff --git a/docs/work/import-process/_img/ALM_IP_AddNewProcessSuccess.png b/docs/work/import-process/_img/ALM_IP_AddNewProcessSuccess.png new file mode 100644 index 00000000000..91fd6096661 Binary files /dev/null and b/docs/work/import-process/_img/ALM_IP_AddNewProcessSuccess.png differ diff --git a/docs/work/import-process/_img/ALM_IP_ApplyProcessChanges.png b/docs/work/import-process/_img/ALM_IP_ApplyProcessChanges.png new file mode 100644 index 00000000000..912bb1f751f Binary files /dev/null and b/docs/work/import-process/_img/ALM_IP_ApplyProcessChanges.png differ diff --git a/docs/work/import-process/_img/ALM_IP_ImportAndUpdateSuccess.png b/docs/work/import-process/_img/ALM_IP_ImportAndUpdateSuccess.png new file mode 100644 index 00000000000..739075aa514 Binary files /dev/null and b/docs/work/import-process/_img/ALM_IP_ImportAndUpdateSuccess.png differ diff --git a/docs/work/import-process/_img/ALM_IP_InfoMessage.png b/docs/work/import-process/_img/ALM_IP_InfoMessage.png new file mode 100644 index 00000000000..4f7dedbd99e Binary files /dev/null and b/docs/work/import-process/_img/ALM_IP_InfoMessage.png differ diff --git a/docs/work/import-process/_img/ALM_IP_ProcessUse.png b/docs/work/import-process/_img/ALM_IP_ProcessUse.png new file mode 100644 index 00000000000..81e6569ba66 Binary files /dev/null and b/docs/work/import-process/_img/ALM_IP_ProcessUse.png differ diff --git a/docs/work/import-process/_img/ALM_IP_SupportedPlugins.png b/docs/work/import-process/_img/ALM_IP_SupportedPlugins.png new file mode 100644 index 00000000000..30e848d44f0 Binary files /dev/null and b/docs/work/import-process/_img/ALM_IP_SupportedPlugins.png differ diff --git a/docs/work/import-process/_img/ALM_IP_UpdateProcessConfirm.png b/docs/work/import-process/_img/ALM_IP_UpdateProcessConfirm.png new file mode 100644 index 00000000000..8ff80840025 Binary files /dev/null and b/docs/work/import-process/_img/ALM_IP_UpdateProcessConfirm.png differ diff --git a/docs/work/import-process/_img/ALM_IP_ValidationErrors_list_775.png b/docs/work/import-process/_img/ALM_IP_ValidationErrors_list_775.png new file mode 100644 index 00000000000..76aaf6cbbb3 Binary files /dev/null and b/docs/work/import-process/_img/ALM_IP_ValidationErrors_list_775.png differ diff --git a/docs/work/import-process/_img/customize-process-export-template.png b/docs/work/import-process/_img/customize-process-export-template.png new file mode 100644 index 00000000000..94a0083dd8f Binary files /dev/null and b/docs/work/import-process/_img/customize-process-export-template.png differ diff --git a/docs/work/import-process/_img/import-process-dialog.png b/docs/work/import-process/_img/import-process-dialog.png new file mode 100644 index 00000000000..aa73a9a512e Binary files /dev/null and b/docs/work/import-process/_img/import-process-dialog.png differ diff --git a/docs/work/import-process/_img/import-process-import.png b/docs/work/import-process/_img/import-process-import.png new file mode 100644 index 00000000000..de4931c7204 Binary files /dev/null and b/docs/work/import-process/_img/import-process-import.png differ diff --git a/docs/work/import-process/_img/import-process-new-team-project.png b/docs/work/import-process/_img/import-process-new-team-project.png new file mode 100644 index 00000000000..10c7151a30f Binary files /dev/null and b/docs/work/import-process/_img/import-process-new-team-project.png differ diff --git a/docs/work/import-process/_img/import-process-set-default.png b/docs/work/import-process/_img/import-process-set-default.png new file mode 100644 index 00000000000..c675562c67c Binary files /dev/null and b/docs/work/import-process/_img/import-process-set-default.png differ diff --git a/docs/work/import-process/customize-process.md b/docs/work/import-process/customize-process.md new file mode 100644 index 00000000000..9c72a20b904 --- /dev/null +++ b/docs/work/import-process/customize-process.md @@ -0,0 +1,301 @@ +--- +title: Customize a process to import using Hosted XML | VSTS +description: Customize a Hosted XML process to support custom fields, work item types, global lists, and process configuration +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: AA5B592D-8F76-4974-9918-B8B523A6F23F +ms.manager: douge +ms.author: kaelli +ms.date: 05/23/2017 +--- + +# Customize a process when using Hosted XML + +<b>VSTS (Hosted XML)</b> + +>[!IMPORTANT] +>**Feature availability:**  Import process supports the Hosted XML process model which allows you to manage customizations through updating select XML definition files of a process template. This feature is only available for accounts that have been migrated to VSTSusing the [TFS Data Import Service](https://aka.ms/TFSDataImport). [Contact us](mailto:vsocustpt@microsoft.com) if you have any questions about Team Services process customization. +> +>If you use the Inheritance process model, you can customize your work tracking through the user interface by [creating an inherited process](../process/manage-process.md). If you use the On-premises XML process model, you can customize a process template, see [Upload or download a process template](../guidance/manage-process-templates.md) and [Customize a process template](../reference/process-templates/customize-process.md). +> +>To learn more about process models, see [Customize work tracking](../customize/customize-work.md). + +VSTS supports adding and updating processes through a web based [import process](import-process.md) administrative experience. +Once you add a process, you can create one or more team projects from it. +You can update the process at any time by importing the process again and confirming that you want to update it. +The changes made to the process template are then applied to all team projects using that process. + +A process is a zip file containing a set of interdependent files used to define the building blocks of the work item tracking system as well as other sub-systems in VSTS. + +While your custom process may contain the entire set of template files-plug-ins and object definition files-only a subset are validated upon import and then used to inform the process and update existing team projects. Specifically, the system performs the following actions on each of the plug-ins and objects defined within the process you choose for import. + +<table> +<tbody> +<tr> +<th>Used when importing/updating a process </th> +<th>Used when creating a new team project</th> +<th>Replaced by system defaults</th> +<th>Ignored </th> +</tr> +<tr valign="top"> +<td> +<p>Work Item Tracking</p> +<p>WITs</p> +<p>Categories</p> +<p>Process Configuration</p> +</td> +<td> +<p>Areas and Iterations</p> +<p>Test Management</p> +<p>Work items</p> +<p>Work item queries</p> +</td> +<td> +<p>Build</p> +<p>Lab Management</p> +<p>Version Control</p> +</td> +<td> +<p>Microsoft Project mappings</p> +<p>Reports</p> +<p>Portal (SharePoint Products) </p> +</td> +</tr> +</tbody> +</table> + + +![Supported process plug-ins and objects for process import](_img/ALM_IP_SupportedPlugins.png) + +For a summary of differences between what's supported in Team Services versus an on-premises TFS, see [Differences between VSTS and TFS process template customizations](differences.md). + +## How to customize a process +It's easiest to customize a process by starting with a well-defined process rather than building one from scratch. +While you can update an existing process you've used with an on-premises TFS, you'll need +to make sure it conforms to the [constraints placed on templates for import](#rule-summary). + +<a id="open-process-wit"> </a> +### Open Process in the admin context + +[!INCLUDE [temp](../_shared/open-process-admin-context-ts.md)] + + +### Export and import a process + +1. From the Process tab, click the open the … context menu for the process that you want to export. + + <img src="_img/customize-process-export-template.png" alt="Account settings admin context, Export a process" style="border: 2px solid #C3C3C3;" />   + + Save the zip file and extract all files. + +2. Rename the process in the ProcessTemplate.xml file located in the root folder. + + Name the process to distinguish it from existing ones. + + ```<name>MyCompany Agile Process </name>``` + + Change the version type, and major and minor numbers. Provide a distinct GUID for the type. For example: + + ```<version type="F50EFC58-C2FC-4C66-9814-E395D90778A3" major="1" minor="1"/>``` + +3. Apply [supported customizations](#supported-customizations). + +4. Create a zip file of all files and folders in the root directory. + +5. [Import the zip file of your custom process](import-process.md). + +<a id="supported-customizations"></a> + +## Supported customizations +You can apply the following customizations to your process + +* [Add, remove, or modify a WIT](../customize/add-modify-wit.md) +* [Add or modify a field](../customize/add-modify-wit.md) +* [Add up to five portfolio backlogs](../customize/add-portfolio-backlogs.md) +* [Add categories](../reference/use-categories-to-group-work-item-types.md) that you'll use in your process configuration +* [Modify process configuration](../reference/process-configuration-xml-element.md) +* [Add global lists](../reference/define-global-lists.md) + +Refer to the [restrictions](#restrictions) below for a list of limitations imposed by the system. + +<a id="restrictions"></a> +## Restrictions +You can import up to 32 processes to VSTS. Your custom process must conform to all rules summarized below, otherwise a validation error message may occur upon import. +* [Process](#process) + * [Process configuration](#process-configuration) + * [Categories](#categories) + * [Work item types](#work-item-types) + * [Fields](#work-item-fields) + * [Limits](#limits) + * [Required fields](#required-fields) + * [Rule restrictions](#rule-restrictions) + * [Consistent names and attributes](#consistent-names-attributes) + * [Identity fields](#identity-fields) + * [Workflow](resolve-errors.md#wit-workflow-definitions) + * [Global lists](#wit-global-list-definitions) + * [Workflow](#work-item-workflow) + * [Form layout](#work-item-form-layout) + +<a id="process"></a> +### Process +Your ProcessTemplate.xml file must conform to the syntax and rules described in [ProcessTemplate XML element reference](../reference/process-templates/process-template-xml-elements-reference.md). In addition, it must meet the following conditions: +* Limit the number of WITs defined to 64 +* Contain only one Categories.xml definition file +* Contain only one ProcessConfiguration.xml definition file +* Friendly names must be unique across all fields and WIT definitions + +In addition, your process must pass the following validation checks: +* Process names must be unique and 155 Unicode characters or less. + * Templates with the same name and version GUID will overwrite existing processes. + * Templates with the same name but a different version GUID will generate an error. + * Process names cannot contain the following special characters: + ```. , ; ' ` : / \ * | ? " & % $ ! + = ( ) [ ] { } < > ``` + See [Naming restrictions](../../reference/naming-restrictions.md) for additional constraints. +* Process folders can't contain any .exe files. While you may be able to import the process that contains a .exe file, project creation will fail. +* Process total size should be 2 GB or less, or project creation will fail. + +<a id="process-configuration"></a> +### Process configuration +The ProcessConfiguration.xml definition file must conform to the syntax and rules described in [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md). In additon, it must meet the following conditions: +* Specify all ```TypeFields``` +* Limit definition to five portfolio backlogs +* Contain only one unparented portfolio backlog +* Specify only one parent portfolio backlog for each subordinate portfolio backlog. +* Contain required workflow state-to-metastate mappings, and not reference unsupported metastates + +<a id="categories"></a> +### Categories +The Categories.xml definition file must conform to the syntax and rules described in [Categories XML element reference](../reference/categories-xml-element-reference.md). In addition it must meet the following conditions: +* Limit definition to 32 categories +* Define all categories referenced in the ProcessConfiguration.xml file + +<a id="work-item-types"></a> +### Work item types +The ```WITD``` element and its child elements must conform to the syntax and rules described in [WITD XML element reference](../reference/all-witd-xml-elements-reference.md). In addition, it must meet the following conditions: +* Limit definition of 256 fields within a single WIT, and 512 fields across all WITs +* The friendly name and required refname assigned to a WIT must be unique within the set of WIT definition files +* The required refname attribute value can't contain disallowed characters nor use a disallowed namespace: System.*Name* and Microsoft.*Name* + Reference names must contain only letters, no spaces, and at least one period (.). +* Contain a `WebLayout` section within the `FORM` section that conforms to the syntax specified in [WebLayout and Control elements](../reference/weblayout-xml-elements.md). + + + +<a id="work-item-fields"></a> +### Work item fields +The ```FIELDS``` section and its child elements must conform to the syntax and rules described in [FIELD XML element reference](../reference/field-definition-element-reference.md). In addition, it must meet the following conditions: +* ```FIELD``` element and child elements can contain a ```GLOBALLIST``` element +* The friendly name and required refname assigned to a WIT must be unique within the set of WIT definition files +* The required refname attribute value can't contain disallowed characters nor use a disallowed namespace: System.*Name* and Microsoft.*Name* + Reference names must contain only letters, no spaces, and at least one period (.). + +<a id="limits"></a> +#### Limit restrictions +* Limit definition to 512 fields +* Limit definition of person-name fields, ones with an attribute of ```syncnamechange=true```, to 64 per work item type +* Limit definition of ```LISTITEM```elements within an ```ALLOWEDVALUES``` or ```SUGGESTEDVALUES``` element for a field to 128 +* Limit definition of allowed rules to 1024 for a field. + +<a id="required-fields"></a> +#### Required fields +* For all WITs that belong to a category used to define a process configuration backlog, specify the field used for ```type=Team``` in the ProcessConfiguration.xml file +* For all WITs that belong to a category used to define a process configuration backlog, specify the field used for ```type=Order``` in the ProcessConfiguration.xml file +* For all WITs that belong to a category used to define a regular backlog or portfolio backlog, specify the field used for ```type=Effort``` in the ProcessConfiguration.xml file +* For all WITs that belong to the category used to define the ```TaskBacklog```, specify the field used for ```type=RemainingWork``` in the ProcessConfiguration.xml file +* For all WITs that belong to the category used to define the ```TaskBacklog```, specify the field used for ```type=Activity``` in the ProcessConfiguration.xml file +* For all WITs that belong to the category used to define the ```TaskBacklog```, specify the ```ALLOWEDVALUES``` rule for the field used for ```type=Activity``` in the ProcessConfiguration.xml file + +<a id="rule-restrictions"></a> +#### Rule restrictions +In addition to the standard [field rule restrictions](../reference/apply-rule-work-item-field.md), the following restrictions are enforced: +* Field rule elements can't specify the *for* and *not* attributes +* ```FIELD``` elements can't contain the following child rule elements: ```CANNOTLOSEVALUE```, ```NOTSAMEAS```, ```MATCH```, ```PROHIBITEDVALUES``` +* ```FIELD``` definitions for System.*Name* fields can't contain field rules, except for the following fields: + * System.Title can contain the rules: ```REQUIRED``` and ```DEFAULT``` + * System.Description can contain the rules: ```REQUIRED``` and ```DEFAULT``` + * System.AssignedTo can contain the rules: ```REQUIRED```, ```DEFAULT```, ```ALLOWEXISTINGVALUE``` and ```VALIDUSER``` + * System.ChangedBy can contain the rules: ```REQUIRED```, ```DEFAULT```, ```ALLOWEXISTINGVALUE``` and ```VALIDUSER```. + +<a id="consistent-names-attributes"></a> +#### Consistent names and attributes +* Within the process: ```name```, ```type```, and other attributes defined within a ```FIELD``` element must be the same across all WIT definitions +* Within a project collection: ```name```, ```type```, and other attributes defined within a ```FIELD``` element must be the same across all WIT definitions + +<a id="identity-fields"></a> +#### Identity fields +Identity fields correspond to fields used to contain account, user, or group names. +The following core system fields are hard-coded as identity fields: +* Assigned To (System.AssignedTo) +* Authorized As (System.AuthorizedAs) +* Changed By (System.ChangedBy) +* Created By (System.CreatedBy) + +The following fields are only considered identity fields if an identity rule is applied to their ```FIELD``` definition. +* Activated By (Microsoft.VSTS.Common.ActivatedBy) +* Closed By (Microsoft.VSTS.Common.ClosedBy) +* Resolved By (Microsoft.VSTS.Common.ResolvedBy) + +**Rules that cause a string field to be considered an identity field** +A string field is recognized as an identity field when you specify one of the following rule elements within its ```FIELD``` definition: +* ```ALLOWEDVALUES``` +* ```PROHIBITEDVALUES``` +* ```VALIDUSER``` + +**Rule restrictions on identity fields** +For the current release of import process, the following restrictions are in effect: +1. Don't specify any of the following rules within the ```FIELD``` definition of an identity field: + * ```ALLOWEDVALUES``` + * ```PROHIBITEDVALUES``` + * ```SUGGESTEDVALUES``` +2. Don't specify any rules that contain non-identity values within the ```FIELD``` definition of an identity field. + +**Correct example** +To limit the account names that are valid within an identity field, specify the ```VALIDUSER``` with a group name attribute. +``` + <FIELD name="Project Manager" refname="Fabrikam.ProgramManager" type="String" reportable="dimension" syncnamechanges="true"> + <ALLOWEXISTINGVALUE /> + <VALIDUSER group="[PROJECT]\Program Manager Group" /> + <HELPTEXT>The program manager responsible for signing off on the user story.</HELPTEXT> + </FIELD> +``` +Prior to importing the process, make sure that you've created the group in the team project(s) that the process will update. + + +**Incorrect example** +The following example isn't valid as it specifies the ```ALLOWEDVALUES``` element and the ```DEFAULT``` element which specifies ```value="Not Assigned"```, a non-identity string. +``` + <FIELD name="Project Manager" refname="Fabrikam.ProgramManager" type="String" reportable="dimension" syncnamechanges="true"> + <ALLOWEXISTINGVALUE /> + <ALLOWEDVALUES> + <LISTITEM value="[PROJECT]\Program Manager Group" /> + <LISTITEM value="Not Assigned" /> + </ALLOWEDVALUES> + <DEFAULT from="value" value="Not Assigned" /> + <VALIDUSER /> + <HELPTEXT>The program manager responsible for signing off on the user story.</HELPTEXT> + </FIELD> +``` +<a id="work-item-workflow"></a> +### Workflow +The ```WORKFLOW``` element and its child elements must conform to the syntax and rules described in [WORKFLOW XML element reference](../reference/all-workflow-xml-elements-reference.md). In addition, it must meet the following conditions: +* Limit definition of workflow states to 16 for each WIT +* Must define all workflow states that are mapped to a metastate in the ProcessConfiguration definition file +* Must define a transition between all workflow states that are mapped to the ```Proposed``` state category and workflow states mapped to the ```InProgress``` state category +* Must define a transition between all workflow states that are mapped to the ```InProgress``` state category and workflow states mapped to the ```Complete``` state category. + +For a description of state category and mappings, see [Workflow states and state categories](../concepts/workflow-and-state-categories.md). + + +<a id="wit-global-list-definitions"></a> +### Global lists + +For the Hosted XMl process model, the following limits are placed on global list import: +- Total of 64 global lists +- Total of 512 items per list +- Approximately 10K items can be defined total within all global lists specified across all WITs. + + +<a id="work-item-form-layout"></a> +### Form layout +The ```FORM``` element and its child elements must conform to the syntax and rules described in [FORM XML element reference](../reference/all-form-xml-elements-reference.md). +The ```Control``` element can't specify a custom control. Custom controls aren't supported. + diff --git a/docs/work/import-process/differences.md b/docs/work/import-process/differences.md new file mode 100644 index 00000000000..d21eced9a12 --- /dev/null +++ b/docs/work/import-process/differences.md @@ -0,0 +1,78 @@ +--- +title: Differences between cloud and on-premises process customizations | VSTS +description: Summary of what you can and can't customize in a process template to support customized work tracking in Visual Studio Team Services (VSTS). +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 2B500AEA-165C-428D-B580-C9C0A8D01635 +ms.manager: douge +ms.author: kaelli +ms.date: 05/23/2017 +--- + +# Differences between VSTS and TFS process template customizations + +<b>VSTS (Hosted XML)</b> + +>[!IMPORTANT] +>**Feature availability:**  Import process supports the Hosted XML process model which allows you to manage customizations through updating select XML definition files of a process template. This feature is only available for accounts that have been migrated to VSTSusing the [TFS Data Import Service](https://aka.ms/TFSDataImport). [Contact us](mailto:vsocustpt@microsoft.com) if you have any questions about Team Services process customization. +> +>If you use the Inheritance process model, you can customize your work tracking through the user interface by [creating an Inheritance process](../process/manage-process.md). If you use the On-premises XML process model, you can customize a process template, see [Upload or download a process template](../guidance/manage-process-templates.md) and [Customize a process template](../reference/process-templates/customize-process.md). +> +>To learn more about process models, see [Customize work tracking](../customize/customize-work.md). + +Team Services uses a different model than Team Foundation Server (TFS) for relating projects and process. +* In TFS, process templates are used as starting points for projects and once a project is created, the project is the scope you customize. +* In VSTS, process is shared across multiple projects and is the scope you customize. + +The structure and overall syntax used in defining process templates remains the same, with only a few minor differences existing between templates you customize for import into VSTSand those you upload to support an on-premises TFS. + +## Unsupported customizations and unreferenced plug-in files + + +Any reference to the following objects in any of the XML definition files will result in a validation error upon import. +* Custom controls on work item forms <!--- TBD --> +* Custom link types +* Global workflow <!--- TBD --> +* Team field support + +The following plug-ins and their associated files aren't used in defining a process, nor used to update existing team projects. +However, they are used to create objects or artifacts when you create a new team project. +* Classification +* Work item queries (defined using the WIQL syntax) +* Test Management +* Work items <!--- TBD --> + +>[!NOTE] +>The WIQL length must not exceed 32K characters. The system won't allow you to create or run queries that exceed that length. + +The following plug-ins and their associated files are replaced by system defaults. +* Build +* Groups and Permissions +* Lab +* Version Control + +The following plug-ins and their associated files are ignored. +* Microsoft Project Mappings +* Reports +* Windows SharePoint Services + +Custom plug-ins aren't supported. + +## Object limits +When customizing a process template for import, limit the number of the objects you define as specified in [Work tracking object limits](../customize/object-limits.md). + + +## Tools with limited support +When you connect to VSTS, you can use the following tools subject to limitations: + +- [Visual Studio Process Template Manager](../guidance/manage-process-templates.md): You can download a process template, but all other functions are disabled. +- Process Editor: You can use select functions to view or export a WIT definition or global list, or use the Work Item Field Explorer. Access is denied to save modified WIT and global list definitions. +- **witadmin** command line tool: Select commands, such as export and list commands, work when connected to VSTS. Review [witAdmin: Customize and manage objects for tracking work](../reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md) for which commands are supported. + +[!INCLUDE [temp](../_shared/process-editor.md)] + + +## Related notes + +- [Work tracking object limits](../customize/object-limits.md) +- [Customize work tracking](../customize/customize-work.md) \ No newline at end of file diff --git a/docs/work/import-process/import-process.md b/docs/work/import-process/import-process.md new file mode 100644 index 00000000000..d92bf9a2e09 --- /dev/null +++ b/docs/work/import-process/import-process.md @@ -0,0 +1,150 @@ +--- +title: Import a process | VSTS +description: Add or update a process by importing a process to support customization of tracking work in Visual Studio Team Services (VSTS). +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: AF7ABA0F-D3E8-48CA-9164-ABC966BAAA77 +ms.manager: douge +ms.author: kaelli +ms.date: 05/23/2017 +--- + +# Process and team projects + +<b>VSTS (Hosted XML)</b> + +>[!IMPORTANT] +>**Feature availability:**  Import process supports the Hosted XML process model which allows you to manage customizations through updating the WIT definition of a process template. This feature is only available for accounts that have been migrated to VSTSusing the [TFS Data Import Service](https://aka.ms/TFSDataImport). [Contact us](mailto:vsocustpt@microsoft.com) if you have any questions about Team Services process customization. +> +>If you use the Inheritance process model, you can customize your work tracking through the user interface by [creating an inherited process](../process/manage-process.md). If you use the On-premises XML process model, you can customize a process template, see [Upload or download a process template](../guidance/manage-process-templates.md) and [Customize a process template](../reference/process-templates/customize-process.md). +> +>To learn more about process models, see [Customize work tracking](../customize/customize-work.md). + +In VSTS, you manage customization of work tracking objects through a process. +Processes are imported and exported through a web based administration experience. + +When you import a new process, you're able to create new team projects using it. +When you import an existing process, all team projects that use that process are updated to reflect the changes. + +For example, updates made to any of the custom processes listed below automatically update the two team projects that use the process. + +![Custom processes mapped to projects](_img/ALM_IP_ProcessUse.png) + +As you discover additional customizations that you need to make, you can export the existing process, update the process XML definition files, +zip the result and re-import the newly updated process. Your changes will be applied to all your existing team projects that use that process. + +Import process supports the following scenarios: +* [Import an existing process from an on-premises Team Foundation Server (TFS)](#import-from-TFS) +* [Import a new process created from an existing exported process](#import-process) +* [Import an update to an existing process, and have all projects using that process be updated](#update-process) + + + +<a id="import-from-TFS"> </a> +## Import a process from an on-premises TFS + +Your first step in migrating team projects that contain custom work tracking objects is to import the process to VSTS. +In Team Foundation Server, each project has its own copy of process so careful consideration needs to be made as to which processes should exist for your organization. +Migration to VSTSis a great time to think about process alignment across your organization and reducing the number of variants of that centralized process. + +1. Run the [process export script](customize-process.md#open-process-wit) to generate a process for a given team project. + +2. (Optional) Edit the ProcessTemplate.xml file name and description. Ensure it conforms to the rules and constraints outlined in [Customize a process](customize-process.md). + +3. Create a zip file of the process folder and files. + +4. [Import the zip file of your custom process by following the steps in the next section](#import-process). + +5. Repeat the above process for each process you want to import to VSTS. + +6. Using the imported process(es), create team projects on VSTS for each you want to migrate. + + With the project created, you can now migrate the project data to VSTS using the [TFS Database Import Service](/vsts/articles/migration-overview). + + + + +<a id="open-process-wit"> </a> +### Open Process in the admin context + +[!INCLUDE [temp](../_shared/open-process-admin-context-ts.md)] + + + +<a id="import-process"> </a> +## Import a process + +Prior to importing a process, you'll want to [customize it to support your work tracking needs](customize-process.md). +Name your process something other than Scrum, Agile, or CMMI. These system processes are locked and you're prevented from overwriting them. + +1. Only administrators can import process so if you aren't the account owner or a member of the Project Collection Administrator's group, [get added](../../accounts/add-administrator-project-collection.md). + +2. From the Process tab, choose import and then browse to the zip file of the process you've customized. + + >[!NOTE] + >If you don't see the **Import process** link, then your account isn't set up to support the Hosted XML process model. You should work with the [Inheritance process model](../process/manage-process.md) for your customization needs. The Hosted XML process model is only supported if your account was created through the [Data Import Service](https://aka.ms/TFSDataImport). + + <img src="_img/import-process-import.png" alt="Import Process, choose process file to import" style="border: 2px solid #C3C3C3;" />  + +3. Choose the file to upload. Your [custom process must meet specific constraints](customize-process.md) in order to pass validation checks during import. + + <img src="_img/import-process-dialog.png" alt="Import Process, choose process file to import" style="border: 2px solid #C3C3C3;" />  + + >[!IMPORTANT] + >You can't update one of the locked processes: Agile, CMMI, and Scrum. + +3. Upon successful import, you'll see the following messsage. + + <img src="_img/ALM_IP_AddNewProcessSuccess.png" alt="Import process dialog, Process file successfully imported" style="border: 2px solid #C3C3C3;" />  + + If the process doesn't pass the validation checks performed on import, you'll receive a list of error messages. + [Correct each error](resolve-errors.md) and then retry the import. + +4. You can immediately create a team project using the newly imported process. + + <img src="_img/import-process-new-team-project.png" alt="Create team project from imported process" style="border: 2px solid #C3C3C3;" />  + +<a id="update-process"> </a> +## Update an existing process + +Once you've added a process, you can update it by importing a zip file where you've modified one or more files within the process template. + +>[!NOTE] +>It's a best practice to [Export a process](#export-process) before making changes so that you don't accidentally overwrite changes made by other users. + +1. Import the process according to steps 2 and 3 from the previous procedure. + +2. Confirm that you want to update the existing process. + + <img src="_img/ALM_IP_UpdateProcessConfirm.png" alt="Import process confirmation dialog" style="border: 2px solid #C3C3C3;" />  + +3. You'll see the following dialog while the system updates all team projects that were created using the updated process. + + <img src="_img/ALM_IP_ApplyProcessChanges.png" alt="Apply process changes dialog" style="border: 2px solid #C3C3C3;" />  + +4. Upon successful import, you'll see the following messsage. All team projects that were created with the process are updated with the modifications. + + <img src="_img/ALM_IP_ImportAndUpdateSuccess.png" alt="Process page, Process template file successfully imported and team projects updated" style="border: 2px solid #C3C3C3;" />  + +5. If you renamed or deleted fields or work item types, you will receive a confirmation message. + Go ahead and check the box and proceed with the import. To learn more about each message, click the forward link provided. + [Information messages](resolve-errors.md#info-only) don't require any action on your part. + + <img src="_img/ALM_IP_InfoMessage.png" alt="Deleted field confirmation dialog" style="border: 2px solid #C3C3C3;" />  + + + +<a id="default-process"> </a> +## Set the default process + +Set a process as the default to have it preselected for all new team projects you plan to create. + +<img src="_img/import-process-set-default.png" alt="Process page, Set default process" style="border: 2px solid #C3C3C3;" />  + +<a id="export-process"> </a> +## Export a process +Export a process when you want to update it or use it as the basis for creating another process. + +The system exports a zip file containing an XML representation of the process. This can be modified and later imported. + + diff --git a/docs/work/import-process/resolve-errors.md b/docs/work/import-process/resolve-errors.md new file mode 100644 index 00000000000..2ed965d3b33 --- /dev/null +++ b/docs/work/import-process/resolve-errors.md @@ -0,0 +1,1693 @@ +--- +title: Resolve validation errors | VSTS +description: Fix errors reported upon importing a process to support customization of tracking work in VSTS. +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 2407FB2B-FAE6-4BBB-99CB-B88904293A43 +ms.manager: douge +ms.author: kaelli +ms.date: 05/23/2017 +--- + +# Resolve validation errors for process import + +<b>VSTS (Hosted XML)</b> + +>[!IMPORTANT] +>**Feature availability:**  Import process supports the Hosted XML process model which allows you to manage customizations through updating the WIT definition of a process template. This feature is only available for accounts that have been migrated to VSTSusing the [TFS Data Import Service](https://aka.ms/TFSDataImport). [Contact us](mailto:vsocustpt@microsoft.com) if you have any questions about Team Services process customization. +> +>If you use the Inheritance process model, you can customize your work tracking through the user interface by [creating an inherited process](../process/manage-process.md). If you use the On-premises XML process model, you can customize a process template, see [Upload or download a process template](../guidance/manage-process-templates.md) and [Customize a process template](../reference/process-templates/customize-process.md). +> +>To learn more about process models, see [Customize work tracking](../customize/customize-work.md). + + +During process import, the process is validated to ensure the system will work as expected for the custom process. +You'll receive a list of error messages if the process fails validation. + +![Process successfully imported](_img/ALM_IP_ValidationErrors_list_775.png) + +If you've received a validation error when you tried [import process](import-process.md), you'll need to resolve the error before retrying the import. +Each error has a link to learn more about the specific validation failure and guidance on how to correct it. +Apply the resolution fix(es) provided for the message(s) that you received, zip up the updated files, and retry the import operation. + +If you're just starting your customization, [review the validation rules provided](customize-process.md). + + +<a id="info-only"></a> +## Information messages - no action required + +<a id="TF402555"></a> +### TF402555: Field *[refName]* will be deleted. +The process that you're importing doesn't include the named field in the process being updated, therefore it is removed as part of the update operation. + +#### Scenario example + +1. Add custom field to Bug.xml work item +``` + <FIELD name="Foo" refname="MyCompany.CustomFields.Foo" type="String" reportable="dimension" /> +``` +2. [Import process](import-process.md) +3. Remove field from Bug.xml +4. [Import updated process](import-process.md) + +The system displays an information message about the field to be deleted. + ``` TF402555: Field MyCompany.CustomFields.Foo will be deleted ``` + +<a id="TF402591"></a> +### TF402591: Field with reference name *[refName]* cannot be renamed to '*[name1]*' from '*[name2]*' in existing processes *[processName]*. +The process that you're importing contains a renamed field that uses the same ```refname``` in the current process(es). + +Field names cannot be renamed. + +<a id="TF402598"></a> +### TF402598: Work item type *[refName]* will be deleted. +The process that you're updating doesn't include the named WIT that exists in the current process. A[name1s part of updating the existing process, the system will delete the named WIT from the current process. . + +#### Scenerio example +1. [Create](../customize/customize-wit-form.md) new work item type called "LSI" +``` + <WORKITEMTYPE name="LSI" refname="My.LSI"> +``` +2. [Import process](import-process.md) +3. Remove the LSI work item type from the process +4. [Import updated process](import-process.md) + +The system displays an information message about the deletion. + ``` TF402598: Work item type My.LSI will be deleted ``` + +<a id="TF402601"></a> +### TF402601: Work item type *[witName]* will be renamed to *[name1]* from *[name2]*. +The process contains a renamed WIT. The WIT will be renamed in the existing process. +The process that you're updating contains a WIT that's been renamed from the name in the current process. +As part of updating the existing process, the system will rename the WIT in the current process. All work items in existing team projects that reference the process are also renamed. + +#### Scenario example +1. [Create](../customize/customize-wit-form.md) new work item type called "LSI" +``` + <WORKITEMTYPE name="LSI" refname="My.LSI"> +``` +2. [Import process](import-process.md) +3. Rename the LSI work item type to Live Site Incident +``` + <WORKITEMTYPE name="Live Site Incident" refname="My.LSI"> +``` +4. [Import updated process](import-process.md) + +The system displays an information message about the WIT to be renamed. + ``` TF402601: Work item type My.LSI will be renamed to 'Live Site Incident' from 'LSI' ``` + + +<a id="file-errors"></a> +## Miscellaneous file errors + +<a id="TF402586"></a> +### TF402586: Error parsing file: *[Error message]* +Malformed XML syntax can cause parsing file errors. Missing closing tags, missing quotes, missing open or close brackets (< or >) can cause a parsing file error. + +From the error message, determine and correct the source of the malformed XML. + +<a id="TF402594"></a> +### TF402594: File violates the schema with the following error: *[Error message]* +Each XML file in the process zip file must conform to the given schema. Schema violation errors are caused by custom XML tags or attributes within the XML file. Read the error message to determine the source of schema violation and fix accordingly. + +The schema definition for work item tracking defines all child elements within the ```FORM``` element as camel case and all other elements as all capitalized. If you encounter errors when validating your type definition files, +check the case structure of your elements. Also, the case structure of opening and closing tags must match according to the rules for XML syntax. + + +#### Error examples +Custom XML tag: +``` + <WORKITEMTYPE name="Bug" refname="My.Bug"> + <FOO>Hello World</FOO> + ... +``` +Extra attribute added to XML element: +``` + <WORKITEMTYPE name="Bug" refname="My.Bug" foo="hello world"> +``` + +<a id="VS412450"></a> +### VS412450: Xml schema validation error in *[fileName]*. *[Error message]* +Correct the schema error in the named file. + +<a id="process-templates"></a> +## Process template plug-in errors +The ProcessTemplate.xml is the root file that defines the entire process and all XML definition files that +will be imported to add or update a process. This file contains all of the plug-ins and task groups that are referenced +when creating a team project. Each task group references a subordinate XML file (often in a subfolder) where +the specific tasks are defined. In general, you specify one task group for each plug-in. + +The ProcessTemplate.xml definition file must conform to the syntax and rules described in [ProcessTemplate XML element reference](../reference/process-templates/process-template-xml-elements-reference.md). + +<a id="VS412457"></a> +### VS412457: Specified file '*[fileName]*' could not be found in the process package. +Correct the process zip package to include the named file. + +<a id="VS402452"></a> +### VS402452: The process template did not specify a version, or specified an invalid version. +Edit the ProcessTemplate.xml file to specify a version. + +#### Error example +ProcessTemplate.xml file specifies the same ```version``` GUID as for the Agile process, which is a locked process. +``` +<ProcessTemplate> + <metadata> + <name>Fabrikam Agile</name> + <description>Use this template to support Fabrikam Agile planning methods.</description> + <version type="ADCC42AB-9882-485E-A3ED-7678F01F66BC" major="7" minor="36" /> +``` +#### Resolution example +A different GUID is specified. +``` +<ProcessTemplate> + <metadata> + <name>Fabrikam Agile</name> + <description>Use this template to support Fabrikam Agile planning methods.</description> + <version type="7710F7A4-1F19-4054-9FBC-D94A5935221E" major="7" minor="1" /> +``` + + + +<a id="VS412453"></a> +### VS412453: Process template zip file doesn't contain required plugin *[pluginName]*. +All files listed within the ProcessTemplate.xml file and its supported plug-in files must be present within the process zip file. + +Use a search tool to find all instances of filename=value within the set of process files and folders. +Then, either update the plug-in to remove the missing named file, or add the named file to the process folder where it belongs. + + <taskList filename="WorkItem Tracking\WorkItems.xml" /> + +#### Error example +The WorkItemTracking plug-in specifies ```fileName="WorkItem Tracking\TypeDefinitions\Epic.xml```, +however it hasn't been added to the WorkItem Tracking\TypeDefinitions folder. + +``` + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Epic.xml" /> +``` +#### Resolution example +Add the Epic.xml file to the WorkItem Tracking\TypeDefinitions folder. + +<a id="VS412454"></a> +### VS412454: Plug-in *[pluginName]* contains several ```taskList``` {1}, {2}. Only one ```taskList``` per plugin is allowed. +Correct the ProcessTemplate.xml file for the named plug-in to reduce the number of ```tasklist`````` elements defined. + +#### Error example +The WorkItemTracking plug-in contains two ```tasklist``` statements. + ``` + <group id="WorkItemTracking" description="Workitem definitions uploading." completionMessage="Work item tracking tasks completed."> + <dependencies> + <dependency groupId="Classification" /> + <dependency groupId="Groups" /> + </dependencies> + <taskList filename="WorkItem Tracking\WorkItems.xml" /> + <taskList filename="WorkItem Tracking\FabrikamWorkItems.xml" /> + </group> +``` +#### Resolution example + ``` + <group id="WorkItemTracking" description="Workitem definitions uploading." completionMessage="Work item tracking tasks completed."> + <dependencies> + <dependency groupId="Classification" /> + <dependency groupId="Groups" /> + </dependencies> + <taskList filename="WorkItem Tracking\FabrikamWorkItems.xml" /> + </group> + ``` + +<a id="TF402575"></a> +### TF402575: You can only include one Category definition file in your process. + +#### Error example +The WorkItems.xml file contains two ```CATEGORIES``` statements. + ``` + <task id="Categories" name="Categories definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item type categories created"> + <dependencies> + <dependency taskId="WITs" /> + </dependencies> + <taskXml> + <CATEGORIES fileName="WorkItem Tracking\Categories.xml" /> + <CATEGORIES fileName="WorkItem Tracking\Custom_Categories.xml" /> + </taskXml> + </task> +``` +#### Resolution example +The WorkItems.xml file has been updated to contain only one ```CATEGORIES``` statement. + ``` + <task id="Categories" name="Categories definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item type categories created"> + <dependencies> + <dependency taskId="WITs" /> + </dependencies> + <taskXml> + <CATEGORIES fileName="WorkItem Tracking\Custom_Categories.xml" /> + </taskXml> + </task> + ``` + +<a id="TF402576"></a> +### TF402576: You can only include one ProcessConfiguration definition file in your process. + +#### Error example +The WorkItems.xml file contains duplicate ```ProjectConfiguration``` statements. + ``` + <taskXml> + <PROCESSCONFIGURATION> + <ProjectConfiguration fileName="WorkItem Tracking\Process\ProcessConfiguration.xml"/> + </PROCESSCONFIGURATION> + </taskXml> + <taskXml> + <PROCESSCONFIGURATION> + <ProjectConfiguration fileName="WorkItem Tracking\Process\ProcessConfiguration.xml"/> + </PROCESSCONFIGURATION> + </taskXml> + ``` +#### Resolution example +The WorkItems.xml file has been updated to contain only one ```ProjectConfiguration``` statement. + ``` + <taskXml> + <PROCESSCONFIGURATION> + <ProjectConfiguration fileName="WorkItem Tracking\Process\ProcessConfiguration.xml"/> + </PROCESSCONFIGURATION> + </taskXml> + ``` + +<a id="TF402587"></a> +### TF402587: Required ProcessConfiguration file missing. +The WorkItems.xml file specifies the ProcessConfiguration file to upload. +Either the file isn't specified, contains an out-of-date specification, the specified file is missing from the template, or the folder/file name isn't correct. + +#### Error example +The configuration specified is out-of-date and specifies two files that aren't contained in the Process folder. +``` + <taskXml> + <PROCESSCONFIGURATION> + <CommonConfiguration fileName="WorkItem Tracking\Process\CommonConfiguration.xml"/> + <AgileConfiguration fileName="WorkItem Tracking\Process\AgileConfiguration.xml"/> + </PROCESSCONFIGURATION> + </taskXml> +``` +#### Resolution example +The WorkItems.xml file has been updated to contain the correct configuration ```ProjectConfiguration``` statement. + ``` + <taskXml> + <PROCESSCONFIGURATION> + <ProjectConfiguration fileName="WorkItem Tracking\Process\ProcessConfiguration.xml"/> + </PROCESSCONFIGURATION> + </taskXml> + ``` + + +<a id="TF402577"></a> +### TF402577: Field *[refName]* specifies friendly name *[friendlyName]* which is already in use by fields *[refName]* in processes *[processNames]*. +Friendly names must be unique across all field definitions for all WIT definitions specified for all processes imported to VSTS. + +The named processes contain WITs that define a field that uses the friendly name. + +Modify the WIT definition in your process zip file that contains *[refName]* and specify a different friendly name or make it match an existing field in use. + +#### Error example +The UserStory WIT definition contains ```FIELD``` element for Fabrikam.Product.Family with friendly name Product. +``` + <FIELD name="Product" refname="Fabrikam.Product.Family" type="String" reportable="dimension"> + <HELPTEXT>Enter the name of the product family for this story or feature.</HELPTEXT> + </FIELD> +``` + +However, in an existing process, Fabrikam.Product.Versions uses the friendly name *Product*. +``` + <FIELD name="Product" refname="Fabrikam.Product.Versions" type="String" reportable="dimension"> + <HELPTEXT>Enter the name of the product version for this story or feature.</HELPTEXT> + </FIELD> +``` +#### Resolution example +Update the UserStory WIT definition to match the existing field. + ``` + <FIELD name="Product" refname="Fabrikam.Product.Versions" type="String" reportable="dimension"> + <HELPTEXT>Enter the name of the product version for this story or feature.</HELPTEXT> + </FIELD> +``` + +<a id="TF402585"></a> +### TF402585: Required WorkItemTracking plug-in reference missing from the process template. +You must specify the ```Microsoft.ProjectCreationWizard.WorkItemTracking``` plug-in in the ```metadata``` section of the ProcessTemplate.xml file: + +#### Error example +The ```Microsoft.ProjectCreationWizard.WorkItemTracking``` plug-in is missing from the ```plugins``` section of the ProcessTemplate.xml file. + ``` + <plugins> + <plugin name="Microsoft.ProjectCreationWizard.Classification" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Reporting" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Portal" wizardPage="true" /> + <plugin name="Microsoft.ProjectCreationWizard.Groups" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.VersionControl" wizardPage="true" /> + <plugin name="Microsoft.ProjectCreationWizard.TestManagement" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Build" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Lab" wizardPage="false" /> + </plugins> +``` +#### Resolution example + ``` + <plugins> + <plugin name="Microsoft.ProjectCreationWizard.Classification" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Reporting" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Portal" wizardPage="true" /> + <plugin name="Microsoft.ProjectCreationWizard.Groups" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.WorkItemTracking" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.VersionControl" wizardPage="true" /> + <plugin name="Microsoft.ProjectCreationWizard.TestManagement" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Build" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Lab" wizardPage="false" /> + </plugins> +``` + +<a id="categories"></a> +## Categories +The Categories.xml definition file must conform to the syntax and rules described in [Categories XML element reference](../reference/categories-xml-element-reference.md). + +<a id="TF402546"></a> +### TF402546: Category *[categoryName]* is missing from the categories file. +All categories that are referenced in the ProcessConfiguration.xml file must be defined in the Categories.xml file. +In addition, the system requires that the Categories.xml file contain definitions for the following categories: +* Bug Category +* Code Review Request Category +* Code Review Response Category +* Feedback Request Category +* Feedback Response Category +* Hidden Types Category +* Requirement Category +* Shared Step Category +* Shared Parameter Category +* Task Category +* Test Case Category +* Test Plan Category +* Test Suite Category + +Update your Categories.xml file to define the missing *[name]* category. + +#### Error example +ProcessConfiguration references the Epic Category, however it is missing from the Categories.xml definition file. + +#### Resolution example +Epic Category is added to the Categories file. +``` + <CATEGORY name="Epic Category" refname="Microsoft.EpicCategory"> + <DEFAULTWORKITEMTYPE name="Epic" /> + </CATEGORY> +``` + +<a id="TF402553"></a> +### TF402553: Element *[name]* references category *[categoryName]* which isn't defined in the categories file. +Update your Categories.xml file to define the missing *[categoryName]* category. + +<a id="TF402560"></a> +### TF402560: You've defined *[n]* categories. Only *[nn]* are allowed. +Review your Categories.xml file for all ```CATEGORY``` element statements and determine which ones you can delete so as not exceed the allowed limit. +Then, review your ProcessConfiguration.xml file to replace values that reference deleted categories. + +<a id="TF402596"></a> +### TF402596: Category *[categoryName]* doesn't define work Item type *[witName]*. +Categories must reference WITs that are defined in the /WorkItem Tracking/TypeDefinitions folder and listed as a task for upload in the WorkItems.xml plug-in file. +Review your Categories.xml file for references to a WIT that isn't included in the /WorkItem Tracking/TypeDefinitions folder. + +#### Error example +The name of the WIT referenced for Microsoft.EpicCategory is misspelled. +``` + <CATEGORY name="Epic Category" refname="Microsoft.EpicCategory"> + <DEFAULTWORKITEMTYPE name="EpicABC" /> + </CATEGORY> +``` +#### Resolution example +``` + <CATEGORY name="Epic Category" refname="Microsoft.EpicCategory"> + <DEFAULTWORKITEMTYPE name="Epic" /> + </CATEGORY> +``` + +<a id="TF402597"></a> +### TF402597: Custom category *[categoryName]* isn't supported because ProcessConfiguration doesn't reference it. + +You can only specify custom categories that you use to configure an Agile tool feature in the ProcessConfiguration. +Review your ProcessConfiguration.xml file and determine if you've missed adding support for a category. Otherwise, remove *[categoryName]* from the Categories.xml file. + +#### Error example +ProcessConfiguration doesn't reference Microsoft.EpicCategory, although it's defined in the Categories.xml definition file. + +#### Resolution example +Add ```PortfolioBacklog``` to ProcessConfiguration to reference Microsoft.EpicCategory. +``` + <PortfolioBacklog category="Microsoft.EpicCategory" pluralName="Epics" singularName="Epic" workItemCountLimit="1000"> + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + <Columns> + <Column refname="System.WorkItemType" width="100" /> + <Column refname="System.Title" width="400" /> + <Column refname="System.State" width="100" /> + <Column refname="Microsoft.VSTS.Scheduling.Effort" width="50" /> + <Column refname="Microsoft.VSTS.Common.BusinessValue" width="50" /> + <Column refname="Microsoft.VSTS.CMMI.RequirementType" width="100" /> + <Column refname="System.Tags" width="200" /> + </Columns> + <AddPanel> + <Fields> + <Field refname="System.Title" /> + </Fields> + </AddPanel> + </PortfolioBacklog> +``` +Reference topics: +* [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md) +* [Categories XML element reference](../reference/categories-xml-element-reference.md) + + +<a id="classification"></a> +## Classification plug-in errors +The Classification.xml definition file must conform to the syntax and rules described in [Classification plug-in](../reference/process-templates/define-classification-plug-in.md). + +<a id="TF402511"></a> +### TF402511: The Classification plug-in contains duplicate property name: *[propertyName]*. + +#### Error example +Classification.xml file contains a second ```property name="MSPROJ"``` statement under the ```properties``` container element. +``` + <properties> + <property name="MSPROJ" value="Classification\FileMapping.xml" isFile="true" /> + <property name="MSPROJ" value="Classification\Fabrikam_FileMapping.xml" isFile="true" /> + <property name="Process Template" value="Fabrikam Agile"/> + </properties> +``` +#### Resolution example +Remove the duplicate statement. +``` + <properties> + <property name="MSPROJ" value="Classification\Fabrikam_FileMapping.xml" isFile="true" /> + <property name="Process Template" value="Fabrikam Agile"/> + </properties> +``` + +<a id="TF402512"></a> +### TF402512: File *[fileName]* does not exist. +The file specified in the Classification.xml file isn't present in the specified path or the path is misspelled. + +#### Error example +The Classification folder path is misspelled. +``` + <properties> + <property name="MSPROJ" value="Calssification\Fabrikam_FileMapping.xml" isFile="true" /> + <property name="Process Template" value="Agile"/> + </properties> +``` +#### Resolution example +``` + <properties> + <property name="MSPROJ" value="Classification\Fabrikam_FileMapping.xml" isFile="true" /> + <property name="Process Template" value="Fabrikam Agile"/> + </properties> +``` + +<a id="TF402513"></a> +### TF402513: Name *[pathName]* in the Classification plug-in doesn't conform to TreePath naming restrictions. +Review the ```Node``` elements you've specified and change the names to conform to supporting naming conventions. +Reference: [Add and modify area and iteration paths](../customize/set-area-paths.md). + +#### Error example +The Path names include the # character which is not allowed. +``` + <Node StructureType="ProjectLifecycle" Name="Iteration" xmlns=""> + <Children> + <Node StructureType="ProjectLifecycle" Name="Sprint #1" /> + <Node StructureType="ProjectLifecycle" Name="Sprint #2" /> + <Node StructureType="ProjectLifecycle" Name="Sprint #3" /> + </Children> + </Node> +``` +#### Resolution example +The Path names have been corrected. +``` + <Node StructureType="ProjectLifecycle" Name="Iteration" xmlns=""> + <Children> + <Node StructureType="ProjectLifecycle" Name="Sprint 1" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 2" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 3" /> + </Children> + </Node> +``` + + +<a id="TF402514"></a> +### TF402514: Node StructureType *[structureTypeName]* in the Classification plug-in is not supported. + +The ```StructureType``` attribute only allows the following values: ```ProjectModelHierarchy``` and ```ProjectLifecycle```. +Review the ```Node``` elements that you've specified and remove any unsupported attributes. + +#### Error example +```ProjectLifecycle``` has been misspelled. +``` + <Node StructureType="ProjectLifecylce" Name="Iteration" xmlns=""> + <Children> + <Node StructureType="ProjectLifecycle" Name="Sprint 1" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 2" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 3" /> + </Children> + </Node> +``` +#### Resolution example +Misspelled name has been corrected. +``` + <Node StructureType="ProjectLifecycle" Name="Iteration" xmlns=""> + <Children> + <Node StructureType="ProjectLifecycle" Name="Sprint 1" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 2" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 3" /> + </Children> + </Node> +``` + + +<a id="TF402515"></a> +### TF402515: A property attribute in the Classification plug-in is either missing or not supported. + +The ```property``` element only allows the following attributes: ```name``` , ```value``` , and ```isFile```. +Review the ```property``` elements you've specified and remove any unsupported attributes. + +#### Error example +The ```value``` attribute is misspelled. +``` + <properties> + <property name="MSPROJ" vaule="Classification\Fabrikam_FileMapping.xml" isFile="true" /> + <property name="Process Template" value="Agile" /> + </properties> +``` +#### Resolution example +Misspelled attribute has been corrected. +``` + <properties> + <property name="MSPROJ" value="Classification\Fabrikam_FileMapping.xml" isFile="true" /> + <property name="Process Template" value="Fabrikam Agile"/> + </properties> +``` +<a id="TF402516"></a> +### TF402516: The Classification plug-in contains more than two root level Nodes, which is not supported. +Review the ```Node``` elements you've specified and remove extra root level nodes. +#### Error example +Classification.xml file contains a second ```Node StructureType="ProjectLifecycle" ``` statement under the ```Nodes``` container element. +``` + <Nodes> + <Node StructureType="ProjectLifecycle" Name="Iteration" xmlns=""> + <Children> + <Node StructureType="ProjectLifecycle" Name="Sprint 1" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 2" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 3" /> + </Children> + </Node> + <Node StructureType="ProjectLifecycle" Name="Iteration" xmlns=""> + <Node StructureType="ProjectModelHierarchy" Name="Area" xmlns="" /> + </Nodes> +``` +#### Resolution example +Remove the second statement. +``` + <Nodes> + <Node StructureType="ProjectLifecycle" Name="Iteration" xmlns=""> + <Children> + <Node StructureType="ProjectLifecycle" Name="Sprint 1" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 2" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 3" /> + </Children> + </Node> + <Node StructureType="ProjectModelHierarchy" Name="Area" xmlns="" /> + </Nodes> +``` +<a id="TF402523"></a> +### TF402523: Area or Iteration path '*[pathName]*' in the GroupsandPermissions plug-is missing from the Classification plug-in. +Add the missing *[pathName]* to the Classification.xml file or remove it from the GroupsandPermissions.xml file. +#### Error example +Classification.xml file specfies sprints, not iterations. + +**GroupsandPermissions.xml** ```teamSettings``` specifies Iterations. +``` + <teamSettings areaPath="Area"> + <iterationPaths backlogPath="Iteration"> + <iterationPath path="Iteration 1" /> + <iterationPath path="Iteration 2" /> + <iterationPath path="Iteration 3" /> + </iterationPaths> + </teamSettings> +``` +However, the Classification.xml specifies sprints. +``` + <Node StructureType="ProjectLifecycle" Name="Iteration" xmlns=""> + <Children> + <Node StructureType="ProjectLifecycle" Name="Sprint 1" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 2" /> + <Node StructureType="ProjectLifecycle" Name="Sprint 3" /> + </Children> + </Node> +``` + +#### Resolution example +Update GroupsandPermissions.xml to use sprints. +``` + <teamSettings areaPath="Area"> + <iterationPaths backlogPath="Iteration"> + <iterationPath path="Sprint 1" /> + <iterationPath path="Sprint 2" /> + <iterationPath path="Sprint 3" /> + </iterationPaths> + </teamSettings> +``` + +<a id="link-types"></a> +## Link types +<span style="color:red; font-size:1.1em;">*Custom link types aren't supported in the current import process feature.*</span> +<a id="TF402561"></a> +### TF402561: You've defined *[n]* custom link types. Only *[nn]* are allowed. +Review your WorkItems.xml plug-in file for all ```LINKTYPE``` element statements. +Remove statements associated with custom link types so as not exceed the allowed limit. +And then, remove the corresponding link type definition file from the LinkTypes folder. + +Also, remove any references to the custom link types that you've added to a WIT definition within a ```LinksControlOptions``` section under the ```FORM``` section. + + +<a id="TF402583"></a> +### TF402583: Custom link type *[name]* is invalid because custom link types aren't supported. + +Review your WorkItems.xml plug-in file for all ```LINKTYPE``` element statements. Remove any statements that specify a custom link type. +And then, remove the corresponding link type definition file from the LinkTypes folder. + +The following ```LINKTYPE``` element statements within the WorkItems.xml plug-in file are valid: +``` + <LINKTYPES> + <LINKTYPE fileName="WorkItem Tracking\LinkTypes\Affects.xml" /> + <LINKTYPE fileName="WorkItem Tracking\LinkTypes\SharedStep.xml" /> + <LINKTYPE fileName="WorkItem Tracking\LinkTypes\TestedBy.xml" /> + <LINKTYPE fileName="WorkItem Tracking\LinkTypes\SharedParameterLink.xml" /> + </LINKTYPES> +``` + +<a id="global-lists"></a> +## Global lists + +<span style="color:red; font-size:1.1em;">*Global lists aren't supported in the current import process feature.*</span> + +<a id="TF402564"></a> +### TF402564: You've defined *[n]* global lists. Only *[nn]* are allowed. +One or more WITs defined in the custom process template contain a ```GLOBALLIST``` element. +Search through your WIT definition files and replace any ```GLOBALLIST``` elements with ```ALLOWEDVALUES``` or ```SUGGESTEDVALUES``` elements. +For reference syntax, see [Define pick lists](../reference/define-pick-lists.md). + +<a id="TF402565"></a> +### TF402565: You've defined *[n]* items in global list *[globalListName]*. A maximum of *[nn]* is allowed. +The named ```GLOBALLIST``` element contains more items than allowed. Either reduce the number of list items contained in the ```GLOBALLIST``` element, +or segment the global list into two or more elements so that neither list exceeds the maximum number of allowed items. + +For reference syntax, see [Define pick lists](../reference/define-pick-lists.md). + +<a id="process-configuration"></a> +## Process configuration +The ProcessConfiguration.xml definition file must conform to the syntax and rules described in [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md). + +<a id="TF402543"></a> +### TF402543: Element *[elementName]* requires that you map exactly one workflow state to metastate *[metastateName]*. + +Update the ```States``` section within the named element in the ProcessConfiguration.xml file to provide the missing metastate mapping or remove extra mappings. +#### Error example +ProcessConfiguration.xml ```RequirementBacklog``` element is missing a metastate mapping for ```type="Proposed"```. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Backlog items" singularName="Backlog item"> + <States> + <State value="Committed" type="InProgress" /> + <State value="Done" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` +#### Resolution example +Missing metastate mappings have been added. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Backlog items" singularName="Backlog item"> + <States> + <State value="New" type="Proposed" /> + <State value="Committed" type="InProgress" /> + <State value="Done" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` + + +<a id="TF402547"></a> +### TF402547: Element *[elementName]* requires that for work item type *[witName]* you map at least one state to metastate *[metastateName]*. +Review the ```WORKFLOW``` states defined for the named WIT and then update the ```States``` section within the +named element in the ProcessConfiguration.xml file to provide the missing metastate mapping for the named WIT. + +<a id="TF402548"></a> +### TF402548: Element *[elementName]* requires that you map at least one state to metastate *[metastateName]*. + +Update the ```States``` section within the named element in the ProcessConfiguration.xml file to provide the missing metastate mapping. +#### Error example +ProcessConfiguration.xml ```RequirementBacklog``` element is missing a metastate mapping for ```type="InProgress"```. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Backlog items" singularName="Backlog item"> + <States> + <State value="New" type="Proposed" /> + <State value="Done" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` +#### Resolution example +Missing metastate mappings have been added. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Backlog items" singularName="Backlog item"> + <States> + <State value="New" type="Proposed" /> + <State value="Committed" type="InProgress" /> + <State value="Done" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` + +<a id="TF402550"></a> +### TF402550: Element *[elementName]* includes more than one metastate mapping for workflow state *[stateName]*. +Metastate value cannot be mapped to more than one workflow state. + +#### Error example +ProcessConfiguration.xml ```RequirementBacklog``` element contains two metastate mappings for ```value="Active"```. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="Story"> + <States> + <State value="Active" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` +#### Resolution example +Metastate mappings have been corrected. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="Story"> + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` + +<a id="TF402551"></a> +### TF402551: Work item type *[witName]* doesn't define workflow state *[stateName]*, which is required because ProcessConfiguration maps it to a metastate for element *[elementName]*. +Either correct the ProcessConfiguration.xml file or the ```WORKFLOW``` section of the named WIT to add the missing ```STATE``` and ```TRANSITION``` elements. + + +#### Error example +ProcessConfiguration.xml ```RequirementBacklog``` element specifies ```value="Committed"```, however UserStory.xml doesn't define Committed as a State. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="Story"> + <States> + <State value="New" type="Proposed" /> + <State value="Committed" type="InProgress" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` +#### Resolution example +Removed the ```State``` element for Committed. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="Story"> + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` + +<a id="TF402552"></a> +### TF402552: Element *[elementName]* requires that for work item type *[witName]* you map exactly one state to metastate *[metastateName]* for the following states: *[stateNames]*. + +Review the ```STATES``` section in the ProcessConfiguration.xml file for the named element and ensure that each sate listed in the error message is present and mapped to a metastate. + +#### Error example +ProcessConfiguration.xml ```RequirementBacklog``` element is missing the state ```New``` which exists on the ```User Story``` work item type. It should be in the ```STATES``` list mapped to ```type=Proposed"```. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="Story"> + <States> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` +#### Resolution example +Metastate mapping has been corrected. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="Story"> + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` + +<a id="TF402554"></a> +### TF402554: Element *[elementName]* specifies an unsupported metastate *[metastateName]*. +Review the ```STATES``` section in the ProcessConfiguration.xml file for the named element and remove or correct the named metastate. + +#### Error example +ProcessConfiguration.xml ```RequirementBacklog``` element contains a misspelled metastate mapping for ```type=Proposed"```. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="Story"> + <States> + <State value="New" type="Propsed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` +#### Resolution example +Metastate mapping has been corrected. +``` +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="Story"> + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + . . . +</RequirementBacklog > +``` +<a id="TF402571"></a> +### TF402571: Required element *[elementName]* is missing from Process Configuration. +Edit the ProcessConfiguration.xml file to add the missing named element. + +Review [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md) for required elements. + +<a id="TF402572"></a> +### TF402572: Cannot find specified file in the process template package. +A file specified in a plug-in file for upload is missing from the zip file. Review all files specified for upload and make sure they are included in the process zip file. + +Review [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md) for required elements. + +<a id="TF402574"></a> +### TF402574: ProcessConfiguration doesn't specify required ```TypeField``` *[typeField]*. +Edit the ProcessConfiguration.xml file to add the missing named ```TypeField``` element. + +Review [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md) for required ```TypeField``` elements. +#### Example +The Scrum process specifies the following ```TypeField``` elements. If any of these are missing, you'll receive error TF402574. +``` +<TypeFields> + <TypeField refname="System.AreaPath" type="Team" /> + <TypeField refname="Microsoft.VSTS.Scheduling.RemainingWork" type="RemainingWork" format="format h" /> + <TypeField refname=" Microsoft.VSTS.Common.BacklogPriority" type="Order" /> + <TypeField refname="Microsoft.VSTS.Scheduling.Effort" type="Effort" /> + <TypeField refname="Microsoft.VSTS.Common.Activity" type="Activity" /> + <TypeField refname="Microsoft.VSTS.Feedback.ApplicationStartInformation" type="ApplicationStartInformation" /> + <TypeField refname="Microsoft.VSTS.Feedback.ApplicationLaunchInstructions" type="ApplicationLaunchInstructions" /> + <TypeField refname="Microsoft.VSTS.Feedback.ApplicationType" type="ApplicationType"> + <TypeFieldValues> + <TypeFieldValue value="Web application" type="WebApp" /> + <TypeFieldValue value="Remote machine" type="RemoteMachine" /> + <TypeFieldValue value="Client application" type="ClientApp" /> + </TypeFieldValues> + </TypeField> +</TypeFields> +``` + + + +<a id="TF402588"></a> +### TF402588: Several portfolio backlogs *[backlogNames]* have defined *[backlogName]* as their parent. A parent backlog may have only one child backlog. +Only one child portfolio backlog can map to a single parent backlog. + +Edit ProcessConfiguration to correct the parent-child backlog specifications. + +#### Error example +``` + <PortfolioBacklog category="Microsoft.EpicCategory" parent="Microsoft.InitiativeCategory" pluralName="Epics" singularName="Epic"> + ... + </PortfolioBacklog> + + <PortfolioBacklog category="Microsoft.FeatureCategory" parent="Microsoft.InitiativeCategory" pluralName="Features" singularName="Feature"> + ... + </PortfolioBacklog> +``` + +#### Resolution example +Change the parent on the Feature backlog to point to the Epic backlog. +``` + <PortfolioBacklog category="Microsoft.EpicCategory" parent="Microsoft.InitiativeCategory" pluralName="Epics" singularName="Epic"> + ... + </PortfolioBacklog> + + <PortfolioBacklog category="Microsoft.FeatureCategory" parent="Microsoft.EpicCategory" pluralName="Features" singularName="Feature"> + ... + </PortfolioBacklog> +``` + +<a id="TF402589"></a> +### TF402589: Portfolio backlog *[backlogName]* references undefined parent portfolio backlog *[backlogName]*. +The ProcessConfiguration.xml definition contains a ```parent``` value that references an undefined portfolio backlog. + +#### Error example +``` + <PortfolioBacklog category="Microsoft.FeatureCategory" parent="Microsoft.EpicCategory" pluralName="Features" singularName="Feature"> +``` + +#### Resolution example +Add the Epic ```PortfioloBacklog``` to the ProcessConfiguration.xml file. +``` + <PortfolioBacklog category="Microsoft.EpicCategory" pluralName="Epics" singularName="Epic"> + <States> + <State value="New" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="InProgress" /> + <State value="Closed" type="Complete" /> + </States> + <Columns> + <Column refname="System.WorkItemType" width="100" /> + <Column refname="System.Title" width="400" /> + <Column refname="System.State" width="100" /> + <Column refname="Microsoft.VSTS.Common.BusinessValue" width="50" /> + <Column refname="Microsoft.VSTS.CMMI.RequirementType" width="100" /> + <Column refname="System.Tags" width="200" /> + </Columns> + </PortfolioBacklog> +``` + +<a id="TF402590"></a> +### TF402590: Several portfolio backlogs *[Backlog 1, Backlog 2]* don't define their parent. +Only one portfolio backlog, the top backlog, may be unparented. All other backlogs must include a ``` parent="Microsoft.FooCategory" ``` attribute and value. + +#### Resolution example +``` + <PortfolioBacklog category="Microsoft.FeatureCategory" parent="Microsoft.EpicCategory" pluralName="Features" singularName="Feature"> +``` + +<a id="402595"></a> +### 402595: Too many portfolio backlogs are defined. A maximum of 5 are allowed. + +Edit the ProcessConfiguration.xml file to remove the extra ```PortfolioBacklog``` elements from the ```PortfolioBacklogs``` section. + +Review [ProcessConfiguration XML element reference](../reference/process-configuration-xml-element.md) for more information. + +<a id="TF400572"></a> +### TF400572: The Project Process Settings must be configured for this feature to be used. + +This is caused by templates that are from TFS 2010 or earlier, before the Project Process Settings existed. Try running [Configure features after an upgrade](../customize/configure-features-after-upgrade.md) to resolve. + +<a id="wit-definitions"></a> +## Work item types + +<a id="TF402570"></a> +### TF402570: You've defined *[n]* work item types. A maximum of *[witLimit]* is allowed. + +You've defined more WITs that are allowed in the process. Review your WorkItems.xml file and reduce the number of ```WORKITEMTYPE``` statements it contains and remove the associated WIT definition files from the process. + +<a id="TF402573"></a> +### TF402573: Work item type WIT doesn't specify required ```refname``` attribute. + +Work item types (Bug, User Story, Task, etc.) require the ```refname``` attribute. The refname value must be unique and cannot contain any reserved namespaces. +The namespaces-System.*XXX* and Microsoft.VSTS.*XXX*-are reserved by VSTS. + +See [All WITD XML elements reference](../reference/all-witd-xml-elements-reference.md) for more information. + +#### Error example +``` +<WORKITEMTYPE name="Bug"> +``` +#### Resolution example +``` +<WORKITEMTYPE name="Bug" refname="MyCompany.Bug"> +``` + +<a id="TF402599"></a> +### TF402599: The work item type refname *[refName]* isn't valid as it uses a disallowed namespace [namespace]. + +Reference names of custom fields and WITs can't use reserved namespaces: System.*XXX* and Microsoft.VSTS.*XXX*. + +Edit the ```refname``` attribute of the named WIT. + +#### Error example +``` +<FIELD name="Custom Field" refname="Microsoft.VSTS.CustomField" type="String" /> +``` +#### Resolution example +``` +<FIELD name="Custom Field" refname="*CustomNamespace.CustomField*" type="String" /> +``` + +<a id="TF402600"></a> +### TF402600: The work item type reference name *[refName]* isn't valid. Work item type reference names must contain only letters, no spaces, and at least one period (.) +WIT reference names must adhere to established naming conventions: only letters, no spaces, and at least one period (.) + +Edit the ```refname``` attribute of the named WIT to meet naming requirements.. + +#### Error example +``` +<WORKITEMTYPE name="Bug" refname="MyCompanyBug32"> +``` +#### Resolution example +``` +<WORKITEMTYPE name="Bug" refname="MyCompany.Bug"> +``` + +<a id="wit-fields"></a> +## Work item fields + +<a id="TF402538"></a> +### TF402538: Field rule *[ruleName]* isn't supported. + +Edit your WIT definitions to remove the named rule. +The following rules are **not** supported for import to VSTS: +```MATCH```, ```CANNOTLOSEVALUE```, ```PROHIBITED VALUES```, and ```NOTSAMEAS```. + +<a id="TF402539"></a> +### TF402539: Field *[refName]* only allows the following rules: *[ruleNames]*. + +Edit your WIT definitions for the named field and remove any non-allowed rule(s). Review both the ```FIELDS``` and ```WORKFLOW``` sections. +Most system fields do not allow specifying rules. + +#### Valid rules to use with System fields + +| Name | Allowed rules | +|----------------------|---------------------------------------------------------------------------------------------------------------------------------------------| +| System.Title | ```REQUIRED```, ```DEFAULT``` | +| System.Description | ```REQUIRED```, ```DEFAULT``` | +| System.AssignedTo | ```REQUIRED```, ```DEFAULT```, ```ALLOWEXISTINGVALUE```, ```VALIDUSER``` | +| System.ChangedBy | ```REQUIRED```, ```DEFAULT```, ```ALLOWEXISTINGVALUE```, ```VALIDUSER``` | + +<a id="TF402540"></a> +### TF402540: Work item type *[witName]* isn't valid because it specifies global list *[GLOBALLIST]*. Global lists aren't supported. + +Global lists are not supported in VSTS. +Replace all instances of ```GLOBALLIST``` elements with +```ALLOWEDVALUES``` and ```LISTITEM``` elements in all WIT definition files. +Reference: [Define pick lists](../reference/define-pick-lists.md). + +#### Error example +``` +<FIELD name="CustomField" refname="MyCompany.CustomField" type="String"> + <ALLOWEDVALUES> + <GLOBALLIST name="Disciplines" /> + </ALLOWEDVALUES> +</FIELD> +``` +#### Resolution example +``` +<FIELD name="CustomField" refname="MyCompany.CustomField" type="String"> + <ALLOWEDVALUES> + <LISTITEM value="Architecture" /> + <LISTITEM value="Requirements" /> + <LISTITEM value="Development" /> + <LISTITEM value="Release Management" /> + <LISTITEM value="Project Management" /> + <LISTITEM value="Test" /> + </ALLOWEDVALUES> +</FIELD> +``` + +<a id="TF402541"></a> +### TF402541: Work item type *[witName]* isn't valid because it references global list *[globalListName]*. Global lists aren't supported. + +Global lists are not supported in VSTS. Replace all instances of ```GLOBALLIST``` elements with +```ALLOWEDVALUES``` and ```LISTITEM``` elements in all WIT definition files. +Reference: [Define pick lists](../reference/define-pick-lists.md). + +#### Error example +``` +<FIELD name="CustomField" refname="MyCompany.CustomField" type="String"> + <ALLOWEDVALUES> + <GLOBALLIST name="Disciplines" /> + </ALLOWEDVALUES> +</FIELD> +``` +#### Resolution example +``` +<FIELD name="CustomField" refname="MyCompany.CustomField" type="String"> + <ALLOWEDVALUES> + <LISTITEM value="Architecture" /> + <LISTITEM value="Requirements" /> + <LISTITEM value="Development" /> + <LISTITEM value="Release Management" /> + <LISTITEM value="Project Management" /> + <LISTITEM value="Test" /> + </ALLOWEDVALUES> +</FIELD> +``` +<a id="TF402542"></a> +### TF402542: The custom field refname *[refName]* isn't valid as it uses disallowed namespace *[namespace]*. + +The namespaces-System.*XXX* and Microsoft.VSTS.*XXX*-are reserved in VSTS. +Reference names of custom fields and types can't use these namespaces. + +To fix this error, simply rename the ```refname``` attribute for the named field in the WIT definition files where it appears. + +#### Error example +``` +<FIELD name="CustomField" refname="System.CustomField" type="String" /> + + - OR - + +<FIELD name="CustomField" refname="Microsoft.VSTS.CustomField" type="String" /> + +``` +#### Resolution example +``` +<FIELD name="CustomField" refname="MyCompany.CustomField" type="String" /> +``` +<a id="TF402544"></a> +### TF402544: Field *[refName]*, defined in work item type *[witName]*, requires an ```ALLOWEDVALUES``` rule that contains values to support element *[elementName]* specified in ProcessConfiguration. + +Edit the named field in the named WIT to provide the missing ```ALLOWEDVALUES``` rule, referencing the named element for more details. + +The ProcessConfiguration.xml file element, ```TypeField refname="Microsoft.VSTS.Common.Activity" type="Activity"```, +requires a pick list is defined for the Microsoft.VSTS.Common.Activity field in all WITs that belong to the Task Category. + +<TypeField refname="Microsoft.VSTS.Common.Activity" type="Activity" /> + +If you have added bugs to the Task Category, you must ensure that the Bug.xml file contains the +named field and specifies the same pick list as is defined for it in the Task.xml file. + +#### Error example +Bug.xml has the field defined, but not the pick list. +``` + <FIELD name="Activity" refname="Microsoft.VSTS.Common.Activity" type="String" reportable="dimension"> + <HELPTEXT>Type of work involved</HELPTEXT> + </FIELD> +``` + +#### Resolution example +Corrected Bug.xml +``` + <FIELD name="Activity" refname="Microsoft.VSTS.Common.Activity" type="String" reportable="dimension"> + <HELPTEXT>Type of work involved</HELPTEXT> + <SUGGESTEDVALUES> + <LISTITEM value="Development"/> + <LISTITEM value="Testing"/> + <LISTITEM value="Requirements"/> + <LISTITEM value="Design"/> + <LISTITEM value="Deployment"/> + <LISTITEM value="Documentation"/> + </SUGGESTEDVALUES> + </FIELD> +``` + +<a id="TF402545"></a> +### TF402545: Element *[elementName]* requires that you include field *[fieldName]* in the definition of work item type *[witName]*. +You should include a corresponding ```FIELD``` element in the named WIT definition for each ```field``` that you specify within the ```AddPanel``` section of the ProcessConfiguration.xml file. \ +You should also include a ```Control``` element within the ```FORM``` section of the named WIT. + +#### Error example +ProcessConfiguration.xml specifies two custom fields. However, these fields aren't defined in the UserStory.xml file. +``` +<AddPanel> + <Fields> + <Field refname="System.Title" /> + <Field refname="Fabrikam.Product" /> + <Field refname="Fabrikam.Technology" /> + </Fields> +</AddPanel> +``` +#### Resolution example +Missing ```FIELD``` elements added to the UserStory.xml file. +``` + <FIELD name="Product" refname="Fabrikam.Product" type="String" reportable="dimension"> + <FIELD name="Technology" refname="Fabrikam.Technology" type="String" reportable="dimension"> +``` + +<a id="TF402549"></a> +### To support ProcessConfiguration element *[elementName]*, work item type *[witName]* must define TypeField *[typeField]* (field refname [refName]). + +In the ProcessConfiguration you created a ```TypeField``` with ```TypeFieldValues```. In your work item type you have to reference that same ```TypeField```. + + +#### Error example +ProcessConfiguration.xml +``` + <TypeField refname="Custom.ApplicationType" type="ApplicationType"> + <TypeFieldValues> + <TypeFieldValue value="Web application" type="WebApp" /> + <TypeFieldValue value="Remote machine" type="RemoteMachine" /> + <TypeFieldValue value="Client application" type="ClientApp" /> + </TypeFieldValues> + </TypeField> +``` +FeedbackRequest.xml is using the Microsoft.VSTS.Feedback.ApplicationType field when it should be using the Custom.ApplicationType field. +``` + <FIELD name="Application Type" refname="Microsoft.VSTS.Feedback.ApplicationType" type="String"> + ... + </FIELD> +``` + +#### Resolution example +FeedbackRequest.xml +``` + <FIELD name="Application Type" refname="Custom.ApplicationType" type="String"> + ... + </FIELD> +``` + +<a id="TF402556"></a> +### TF402556: For field *[refName]* to be well defined, you must name it *[fieldName]* and set its type to *[fieldType]*. + +If you are on TFS and running tfsMigrator, this error is usually generated when your process is out-of-date and a system field is not properly defined. In the majority of those cases you need to use the ```witadmin /changefield``` command to properly rename the field. + +#### Examples of Reserved Fields +Reserved System.*XXX* and Microsoft.VSTS.*XXX* fields have required name and type values. + +| Field | Name | Type | +|----------------------------------------------------------|-----------------------------|------------------| +| System.Id | ID | Integer | +| System.Title | Title | String | +| Microsoft.VSTS.Scheduling.StoryPoints | Story Points | Double | +| Microsoft.VSTS.Scheduling.RemainingWork | Remaining Work | Double | +| Microsoft.VSTS.Scheduling.OriginalEstimate | Original Estimate | Double | +| Microsoft.VSTS.Scheduling.CompletedWork | Completed Work | Double | + +#### Error example +In Bug.xml, the friendly field name has been changed to "My Repro Steps". +``` + <FIELD name="My Repro Steps" refname="Microsoft.VSTS.TCM.ReproSteps" type="HTML"> + <HELPTEXT>How to see the bug. End by contrasting expected with actual behavior.</HELPTEXT> + </FIELD> +``` +#### Resolution example +Bug.xml +``` + <FIELD name="Repro Steps" refname="Microsoft.VSTS.TCM.ReproSteps" type="HTML"> + <HELPTEXT>How to see the bug. End by contrasting expected with actual behavior.</HELPTEXT> + </FIELD> +``` + +<a id="TF402557"></a> +### TF402557: Inconsistent definitions exist for field *[refName]* in the following work item types: *[witName]*. Ensure that all references to a field have the same *RefName*, *Name*, and *Type*. +```FIELD``` element definitions for fields with the same friendly name must be consistent across WITs. +Check to ensure that the ```refName```, ```name```, and ```type``` attributes are the same in each of your WIT definitions for the named field. + +#### Error example +Bug.xml +``` + <FIELD name="Hair Color" refname="MyCompany.CustomFields.HairColor" type="String" reportable="dimension" /> +``` + +UserStory.xml +``` + <FIELD name="Hair Color 2" refname="MyCompany.CustomFields.HairColor" type="Double" reportable="dimension" /> +``` +Notice that the ```name``` and ```type``` attributes differ from that in the Bug.xml work item type + +#### Resolution example +Bug.xml +``` + <FIELD name="Hair Color" refname="MyCompany.CustomFields.HairColor" type="String" reportable="dimension" /> +``` +UserStory.xml +``` + <FIELD name="Hair Color" refname="MyCompany.CustomFields.HairColor" type="String" reportable="dimension" /> +``` + +<a id="TF402558"></a> +### TF402558: The definition of field *[refName]* is inconsistent with the existing definition of the field in the following templates: *[templateNames]*. +Fields must be defined consistently across processes that have been or that you plan to import to VSTS. +The system will not allow you to import a process that contains a ```FIELD``` element which is defined +one way in Process A and another way in Process B. All ```FIELD``` element attributes must match. + +#### Example +Process A, Bug.xml +``` + <FIELDS> + ... + <FIELD name="Foo" refname="MyCompany.CustomFields.Foo" type="String" reportable="dimension" /> + ... + </FIELDS> +``` + +Process B, Bug.xml + +``` + <FIELDS> + ... + <FIELD name="Bar" refname="MyCompany.CustomFields.Foo" type="Double" reportable="dimension" /> + ... + </FIELDS> +``` +Notice how different values are specified for ```name``` and ```type``` attributes. + +### Resolution +Ensure that fields of the same ```refname``` are defined the same across all processes that +have been imported or that you plan to import to VSTS. + +<a id="TF402559"></a> +### TF402559: The definition for field *[refName]* is inconsistent with an existing field. The ```type``` is *[typeName]* but should be *[typeName]*. +Edit the WIT file(s) that contains the named field to ensure the specified ```type``` attribute value is consistent across all WITs. + +<a id="TF402562"></a> +### TF402562: You've defined *[n]* fields for work item type *[witName]*. Only *[fieldLimit]* are allowed. +You've defined *[n]* fields for work item type *[witName]*. Only *[fieldLimit]* are allowed. Within a single WIT, you can specify only the specified number of fields. + +Edit the named WIT and remove the extra custom fields to reduce the total number of fields to be within the allowed limit. + +<a id="TF402563"></a> +### TF402563: You've defined a total of *[n]* fields for all work item types. Only *[fieldLimit]* are allowed. +You've defined *[n]* fields for all WITs defined in the process. Only *[fieldLimit]* are allowed. This includes System.*XXX* and Microsoft.VSTS.*XXX* namespace fields as well as custom fields. + +Review the ```FIELDS``` and ```WORKFLOW``` sections and determine which custom fields to remove. + +<a id="TF402566"></a> +### TF402566: You've defined *[n]* field rules for work item type *[witName]*. A maximum of *[ruleLimit]* is allowed. +You've defined *[n]* field rules for the named WIT which exceeds the allowed number of field rules for any one WIT. + +Edit the named WIT and remove the extra field rules to reduce the total number of fields to be within the allowed limit. + +<a id="TF402568"></a> +### TF402568: You've defined *[n]* fields with ```syncnamechanges="true"``` for work item type *[witName]*. A maximum of 64 is allowed. + +The number of fields with ```syncnamechanges="true"``` defined for the named WIT exceeds the allowed limit. This includes System.*XXX* and Microsoft.VSTS.*XXX* namespace fields as well as custom fields. + +Review the ```FIELDS``` section of the named WIT and determine which custom fields to remove or modify. + +#### Example +``` + <FIELD name="Assigned To" refname="System.AssignedTo" type="String" reportable="dimension" syncnamechanges="true" > + ... + </FIELD> +``` + +<a id="TF402569"></a> +### TF402569: You've defined *[n]* values for field *[fieldName]* in work item type *[witName]*. A maximum of *[listLimit]* is allowed. + +The number of ```LISTITEM``` elements defined for the named field in the named WIT exceeds the allowed limit. + +Edit the named WIT to reduce the number of```LISTITEM``` elements so as not to exceed the allowed maximum. + +#### Example +``` + <FIELD name="Favorite Color" refname="MyCompany.CustomFields.FavColor" type="String" reportable="dimension"> + <ALLOWEDVALUES> + <LISTITEM value="Color1" /> + <LISTITEM value="Color2" /> + <LISTITEM value="Color3" /> + . . . + </ALLOWEDVALUES> + </FIELD> +``` + +notice the bug and user story ```refname``` values are different + +<a id="TF402584"></a> +### TF402584: Field rule attributes "for" or "not" aren't supported. +The ```"for"``` and ```"not"``` attributes are not supported at all for any field rule for import to VSTS. +Review the ```FIELDS``` and ```WORKFLOW``` sections for the presence of ```"for"``` and ```"not"``` attributes and remove them. +#### Error example +``` +<FIELD name="Title"> + <READONLY for="Dev Team" not="Test Team" /> +</FIELD> +``` + +#### Resolution example +``` +<FIELD name="Title"> + <READONLY /> +</FIELD> +``` + +<a id="TF402593"></a> +### TF402593: Field rules aren't supported for field *[fieldName]*. + +Most System and Microsoft.VSTS fields do not support rules. +See [Customize a process](customize-process.md#required-fields) +for complete list of supported field rules. + +Edit the WIT definition files that contain the named field and remove the field rules specified for it. + +<a id="TF402602"></a> +### TF402602: The field *[refName]* must have exactly these values *[values]*. + +All fields defined by VSTS in the reserved namespaces-System.*XXX* and Microsoft.VSTS.*XXX*-must not be altered. If you wish to have a different list of values in these pick list fields, define your own custom field. + +#### Error example +Bug.xml has the priority field defined, but has a different list of values than expected. +``` + <FIELD name="Priority" refname="Microsoft.VSTS.Common.Priority" type="Integer" reportable="dimension"> + <ALLOWEDVALUES expanditems="true"> + <LISTITEM value="0"/> + <LISTITEM value="1"/> + <LISTITEM value="2"/> + </ALLOWEDVALUES> + <DEFAULT from="value" value="2" /> + </FIELD> +``` + +#### Resolution example +Corrected Bug.xml including a new field +``` + <FIELD name="Priority" refname="Microsoft.VSTS.Common.Priority" type="Integer" reportable="dimension"> + <HELPTEXT>Business importance. 1=must fix; 4=unimportant.</HELPTEXT> + <ALLOWEDVALUES expanditems="true"> + <LISTITEM value="1"/> + <LISTITEM value="2"/> + <LISTITEM value="3"/> + <LISTITEM value="4"/> + </ALLOWEDVALUES> + <DEFAULT from="value" value="2" /> + </FIELD> + + <FIELD name="Custom Priority" refname="Custom.Priority" type="Integer" reportable="dimension"> + <HELPTEXT>Business importance. 1=must fix; 4=unimportant.</HELPTEXT> + <ALLOWEDVALUES expanditems="true"> + <LISTITEM value="0"/> + <LISTITEM value="1"/> + <LISTITEM value="2"/> + </ALLOWEDVALUES> + <DEFAULT from="value" value="2" /> + </FIELD> +``` + +<a id="VS402504"></a> +### VS402504: User or group cannot be found *[project]\Group Name*. Verify that the users and groups used in your work item type definition exist. + +Custom project scoped groups are not supported. You can only reference account level scoped groups. + +#### Error example +Bug.xml is referencing a project scoped group. +``` +... "[project]\Organization Leaders" +``` + +#### Resolution example +Create a new account (collection) level group "Organization Leaders" and reference it accordingly in the XML. +``` +... "[global]\Organization Leaders" +``` + +<a id="TF237094"></a> +### TF237094: Field name '[fieldName]' is used by the field '[refName]', so it cannot be used by the field '[refName]'. + +Field name already exist with that same name on a different field. Change the name of the field. + +#### Error example +```TF237094: Field name 'External ID' is used by the field 'Custom.ExistingField.ExternalID', so it cannot be used by the field 'Custom.NewField.ExternalID'.``` + +#### Resolution example +Change the field name of Custom.NewField.ExternalID +``` +<FIELD name="External ID" refname="Custom.NewField.ExternalID" type="string" reportable="dimension" /> +``` + +<a id="wit-work-item-layout"></a> +## Work item layout + +<a id="VS403104"></a> +### VS403104: Work item type *[witName]* references the required field *[refName]* which is not included in all layouts. + +This warning is generated if you have a required field in a work item type that is referenced in the ```<Layout>``` node but not the ```<WebLayout>```. The ```<WebLayout>``` is used to modify the layout of the new form. See [WebLayout xml reference](../reference/weblayout-xml-elements.md) for details. + +<a id="TF402594"></a> +### TF402594: File violates the schema with the following error: The element 'Control' cannot contain child element 'Link' because the parent element's content model is empty. + +#### Error example +``` + <Control Type="FieldControl" FieldName="customfield.foo" Label="Foo" LabelPosition="Left"> + <Link UrlRoot="http://www.visualstudio.com/team-services" /> + </Control> +``` + +#### Resolution example +``` + <Control Type="FieldControl" FieldName="System.Title" LabelPosition="Left" Label="Title 1" + <LabelText> + <Text> + <Link UrlRoot="http://www.visualstudio.com/team-services" /> + Title 2 + </Text> + </LabelText> + </Control> +``` + +<a id="wit-workflow-definitions"></a> +## Workflow definitions + +<a id="TF402567"></a> +### TF402567: You've defined *[n]* workflow states for work item type *[witName]*. A maximum of *[stateLimit]* is allowed. + +You've defined *[n]* workflow states for the named WIT which exceeds the allowed number of workflow states for any one WIT. + +Edit the ```WORKFLOW``` section of the named WIT and remove the extra ```STATE``` elements to reduce the total number of states to be within the allowed limit. + +<a id="TF402578"></a> +### TF402578: Field *[refName]* specifies friendly name *[friendlyName]* which is already in use by field *[refName]*. Friendly names must be unique across all field definitions. +Field names must be unique within the work item type. + +#### Error example +``` + <FIELD name="Foo" refname="MyCompany.CustomFields.Foo" type="String" reportable="dimension" /> + <FIELD name="Foo" refname="MyCompany.CustomFields.Bar" type="String" reportable="dimension" /> +``` +Notice there are two fields with the name ``` <FIELD name="Foo" ``` + +#### Resolution example +``` + <FIELD name="Foo" refname="MyCompany.CustomFields.Foo" type="String" reportable="dimension" /> + <FIELD name="Bar" refname="MyCompany.CustomFields.Bar" type="String" reportable="dimension" /> +``` + +<a id="TF402579"></a> +### TF402579: Name *[friendlyName]* is used multiple times on different fields across the following work item types: *[witNames]*. Name for fields must be unique across the project collection. + +Fields referencing the same ```refname="MyCompany.FieldName"``` must have the same friendly name ```FIELD name="fieldname"``` value. + +#### Error example +Process A, Bug.xml +``` + <FIELD name="Foo" refname="MyCompany.CustomFields.Foo" type="String" reportable="dimension" /> +``` + +Process B, Bug.xml +``` + <FIELD name="Bar" refname="MyCompany.CustomFields.Foo" type="String" reportable="dimension" /> +``` +Because both fields share the same reference name, ```refname="MyCompany.CustomFields.Foo" ```, +they must also specify the same friendly name ``` <FIELD name="Foo" ``` across all processes +that have been imported or will be imported to VSTS. + +<a id="TF402580"></a> +### TF402580: You can only use the name *[witName]* for a single work item type. +WIT friendly names ```WORKITEMTYPE name="Name" ``` must be unique within the process. + +#### Error example +My Work Item A.xml +``` + <WORKITEMTYPE name="My Work Item" refname="My.MyWorkItemA"> +``` + +My Work Item B.xml +``` + <WORKITEMTYPE name="My Work Item" refname="My.MyWorkItemB"> +``` +Notice how the ```WORKITEMTYPE name=``` is the same across both work item types. + +#### Resolution example +My Work Item A.xml +``` + <WORKITEMTYPE name="My Work Item A" refname="My.MyWorkItemA"> +``` + +My Work Item B.xml +``` + <WORKITEMTYPE name="My Work Item B" refname="My.MyWorkItemB"> +``` + +<a id="TF402581"></a> +### TF402581: You can only use the refname *[refName]* for a single work item type. +WIT reference names ```refname="value" ``` must be unique within the process. + +#### Error example +Bug.xml +``` + <WORKITEMTYPE name="Bug" refname="MyCompany.Name"> +``` +UserStory.xml +``` + <WORKITEMTYPE name="User Story" refname="MyCompany.Name"> +``` +notice both ```refname``` values equal "MyCompany.Name" + +#### Resolution example +Bug.xml +``` + <WORKITEMTYPE name="Bug" refname="MyCompany.Bug"> +``` +UserStory.xml +``` + <WORKITEMTYPE name="User Story" refname="MyCompany.UserStory"> +``` + + +<a id="TF402582"></a> +### TF402582: Work item type *[witName]* contains custom control *[controlName]* which is not supported. +Custom controls are not supported in VSTS. Review the ```FORM``` section for the named WIT and remove any custom controls that are defined. + +#### Error example +```Type="OneViewMultiValueControl"``` specifies a custom control. This must be removed or replaced to a supported control. +``` + <Group Label="Engineering Alignment"> + <Column PercentWidth="100"> + <Control FieldName="Fabrikam.Content.Product" Type="FieldControl" Label="Product" LabelPosition="Left" /> + <Control FieldName="Fabrikam.Content.Release" Type="FieldControl" Label="Milestone" LabelPosition="Left" /> + <Control FieldName="Fabrikam.Content.Technology" Type="FabrikamMultiValueControl" Label="Technology" LabelPosition="Left" /> + </Column> + </Group> +``` + + +<a id="test-management"></a> +## Test management plug-in errors +The TestManagement.xml file, located in the Test Management folder, +must conform to the syntax and rules described in [Define the initial configuration of Test Manager](../reference/process-templates/define-initial-configuration-test-manager.md). + + +<a id="TF402533"></a> +### TF402533: Element '*[elementName]*' in TestManagement plug-in is missing the ```'fileName'``` attribute. +Add the missing attribute to the named element in the TestManagement.xml file. + +<a id="TF402534"></a> +### TF402534: TestManagement plug-in contains an unsupported task '*[taskName]*' + +Correct the named tasked in your TestManagement.xml file. + +#### Error example +The ```TestResolutionStates``` element has been misspelled. +``` + <taskXml> + <TestResolutionSattes fileName="Test Management\TestResolutionState.xml" /> + </taskXml> +``` +#### Resolution example +Corrected misspellings. +``` + <taskXml> + <TestResolutionStates fileName="Test Management\TestResolutionState.xml" /> + </taskXml> +``` \ No newline at end of file diff --git a/docs/work/kanban/_img/ALM_AC_ChangePriorities.png b/docs/work/kanban/_img/ALM_AC_ChangePriorities.png new file mode 100644 index 00000000000..98198e524bf Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_ChangePriorities.png differ diff --git a/docs/work/kanban/_img/ALM_AC_CustomizeColumns.png b/docs/work/kanban/_img/ALM_AC_CustomizeColumns.png new file mode 100644 index 00000000000..0e17cfe7e51 Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_CustomizeColumns.png differ diff --git a/docs/work/kanban/_img/ALM_AC_CustomizeColumnsDetailed.png b/docs/work/kanban/_img/ALM_AC_CustomizeColumnsDetailed.png new file mode 100644 index 00000000000..1ff4830ab30 Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_CustomizeColumnsDetailed.png differ diff --git a/docs/work/kanban/_img/ALM_AC_DragItem.png b/docs/work/kanban/_img/ALM_AC_DragItem.png new file mode 100644 index 00000000000..63c17412f90 Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_DragItem.png differ diff --git a/docs/work/kanban/_img/ALM_AC_History.png b/docs/work/kanban/_img/ALM_AC_History.png new file mode 100644 index 00000000000..6e7b8c91df7 Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_History.png differ diff --git a/docs/work/kanban/_img/ALM_AC_KanbanIntro.png b/docs/work/kanban/_img/ALM_AC_KanbanIntro.png new file mode 100644 index 00000000000..b42855c957e Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_KanbanIntro.png differ diff --git a/docs/work/kanban/_img/ALM_AC_LeftIcon.png b/docs/work/kanban/_img/ALM_AC_LeftIcon.png new file mode 100644 index 00000000000..ce37c9c3e77 Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_LeftIcon.png differ diff --git a/docs/work/kanban/_img/ALM_AC_Reassign.png b/docs/work/kanban/_img/ALM_AC_Reassign.png new file mode 100644 index 00000000000..98d2394d7a8 Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_Reassign.png differ diff --git a/docs/work/kanban/_img/ALM_AC_RightIcon.png b/docs/work/kanban/_img/ALM_AC_RightIcon.png new file mode 100644 index 00000000000..65920506ad0 Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_RightIcon.png differ diff --git a/docs/work/kanban/_img/ALM_AC_State.png b/docs/work/kanban/_img/ALM_AC_State.png new file mode 100644 index 00000000000..8d6ae132de6 Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_State.png differ diff --git a/docs/work/kanban/_img/ALM_AC_Update.png b/docs/work/kanban/_img/ALM_AC_Update.png new file mode 100644 index 00000000000..4c78d87d840 Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_Update.png differ diff --git a/docs/work/kanban/_img/ALM_AC_Workflow.png b/docs/work/kanban/_img/ALM_AC_Workflow.png new file mode 100644 index 00000000000..3b9667caa6b Binary files /dev/null and b/docs/work/kanban/_img/ALM_AC_Workflow.png differ diff --git a/docs/work/kanban/_img/ALM_CC_MoveCard.png b/docs/work/kanban/_img/ALM_CC_MoveCard.png new file mode 100644 index 00000000000..dbb00d89d94 Binary files /dev/null and b/docs/work/kanban/_img/ALM_CC_MoveCard.png differ diff --git a/docs/work/kanban/_img/ALM_CC_UpdateFieldOnCard.png b/docs/work/kanban/_img/ALM_CC_UpdateFieldOnCard.png new file mode 100644 index 00000000000..3036344a9ca Binary files /dev/null and b/docs/work/kanban/_img/ALM_CC_UpdateFieldOnCard.png differ diff --git a/docs/work/kanban/_img/ALM_DD_DefinitionText.png b/docs/work/kanban/_img/ALM_DD_DefinitionText.png new file mode 100644 index 00000000000..f826a40a938 Binary files /dev/null and b/docs/work/kanban/_img/ALM_DD_DefinitionText.png differ diff --git a/docs/work/kanban/_img/ALM_DD_EditDefinition.png b/docs/work/kanban/_img/ALM_DD_EditDefinition.png new file mode 100644 index 00000000000..4b9c31fe624 Binary files /dev/null and b/docs/work/kanban/_img/ALM_DD_EditDefinition.png differ diff --git a/docs/work/kanban/_img/ALM_DD_InfoIcon.png b/docs/work/kanban/_img/ALM_DD_InfoIcon.png new file mode 100644 index 00000000000..d47b22beae7 Binary files /dev/null and b/docs/work/kanban/_img/ALM_DD_InfoIcon.png differ diff --git a/docs/work/kanban/_img/ALM_DD_IntroImage.png b/docs/work/kanban/_img/ALM_DD_IntroImage.png new file mode 100644 index 00000000000..cbb830b9ede Binary files /dev/null and b/docs/work/kanban/_img/ALM_DD_IntroImage.png differ diff --git a/docs/work/kanban/_img/ALM_EW_CollapseLanes.png b/docs/work/kanban/_img/ALM_EW_CollapseLanes.png new file mode 100644 index 00000000000..12332b658ea Binary files /dev/null and b/docs/work/kanban/_img/ALM_EW_CollapseLanes.png differ diff --git a/docs/work/kanban/_img/ALM_EW_DeleteLane.png b/docs/work/kanban/_img/ALM_EW_DeleteLane.png new file mode 100644 index 00000000000..382d8cf1554 Binary files /dev/null and b/docs/work/kanban/_img/ALM_EW_DeleteLane.png differ diff --git a/docs/work/kanban/_img/ALM_EW_HistorySwimLanes.png b/docs/work/kanban/_img/ALM_EW_HistorySwimLanes.png new file mode 100644 index 00000000000..48e9aacb746 Binary files /dev/null and b/docs/work/kanban/_img/ALM_EW_HistorySwimLanes.png differ diff --git a/docs/work/kanban/_img/ALM_EW_IntroChart_3C.png b/docs/work/kanban/_img/ALM_EW_IntroChart_3C.png new file mode 100644 index 00000000000..696a059f211 Binary files /dev/null and b/docs/work/kanban/_img/ALM_EW_IntroChart_3C.png differ diff --git a/docs/work/kanban/_img/ALM_EW_MoveToNewLane.png b/docs/work/kanban/_img/ALM_EW_MoveToNewLane.png new file mode 100644 index 00000000000..5d573b0e8c8 Binary files /dev/null and b/docs/work/kanban/_img/ALM_EW_MoveToNewLane.png differ diff --git a/docs/work/kanban/_img/ALM_EW_ReorderLanes.png b/docs/work/kanban/_img/ALM_EW_ReorderLanes.png new file mode 100644 index 00000000000..3e79847044a Binary files /dev/null and b/docs/work/kanban/_img/ALM_EW_ReorderLanes.png differ diff --git a/docs/work/kanban/_img/ALM_KB_Board2.png b/docs/work/kanban/_img/ALM_KB_Board2.png new file mode 100644 index 00000000000..1178b3517bd Binary files /dev/null and b/docs/work/kanban/_img/ALM_KB_Board2.png differ diff --git a/docs/work/kanban/_img/ALM_KB_Board5.png b/docs/work/kanban/_img/ALM_KB_Board5.png new file mode 100644 index 00000000000..3042fd54c18 Binary files /dev/null and b/docs/work/kanban/_img/ALM_KB_Board5.png differ diff --git a/docs/work/kanban/_img/ALM_KB_CumulativeFlow.png b/docs/work/kanban/_img/ALM_KB_CumulativeFlow.png new file mode 100644 index 00000000000..dfc2c6450ff Binary files /dev/null and b/docs/work/kanban/_img/ALM_KB_CumulativeFlow.png differ diff --git a/docs/work/kanban/_img/ALM_KB_Empty.png b/docs/work/kanban/_img/ALM_KB_Empty.png new file mode 100644 index 00000000000..1ed647613f2 Binary files /dev/null and b/docs/work/kanban/_img/ALM_KB_Empty.png differ diff --git a/docs/work/kanban/_img/ALM_KB_UpdateFieldOnCard.png b/docs/work/kanban/_img/ALM_KB_UpdateFieldOnCard.png new file mode 100644 index 00000000000..c4befb7ba6b Binary files /dev/null and b/docs/work/kanban/_img/ALM_KB_UpdateFieldOnCard.png differ diff --git a/docs/work/kanban/_img/ALM_KB_WipLimits.png b/docs/work/kanban/_img/ALM_KB_WipLimits.png new file mode 100644 index 00000000000..aa76ebe1ed1 Binary files /dev/null and b/docs/work/kanban/_img/ALM_KB_WipLimits.png differ diff --git a/docs/work/kanban/_img/ALM_KB_Workflow.png b/docs/work/kanban/_img/ALM_KB_Workflow.png new file mode 100644 index 00000000000..ab512231e99 Binary files /dev/null and b/docs/work/kanban/_img/ALM_KB_Workflow.png differ diff --git a/docs/work/kanban/_img/ALM_SW.AddLane.png b/docs/work/kanban/_img/ALM_SW.AddLane.png new file mode 100644 index 00000000000..0f8e968e702 Binary files /dev/null and b/docs/work/kanban/_img/ALM_SW.AddLane.png differ diff --git a/docs/work/kanban/_img/WIP_1.png b/docs/work/kanban/_img/WIP_1.png new file mode 100644 index 00000000000..ad61229e050 Binary files /dev/null and b/docs/work/kanban/_img/WIP_1.png differ diff --git a/docs/work/kanban/_img/WIP_2.png b/docs/work/kanban/_img/WIP_2.png new file mode 100644 index 00000000000..5833fdd8040 Binary files /dev/null and b/docs/work/kanban/_img/WIP_2.png differ diff --git a/docs/work/kanban/_img/WIP_3.png b/docs/work/kanban/_img/WIP_3.png new file mode 100644 index 00000000000..b092f42acdc Binary files /dev/null and b/docs/work/kanban/_img/WIP_3.png differ diff --git a/docs/work/kanban/_img/WIP_5.png b/docs/work/kanban/_img/WIP_5.png new file mode 100644 index 00000000000..7da30e8ed60 Binary files /dev/null and b/docs/work/kanban/_img/WIP_5.png differ diff --git a/docs/work/kanban/_img/add-columns-active-agile-update-1.png b/docs/work/kanban/_img/add-columns-active-agile-update-1.png new file mode 100644 index 00000000000..070d4e004b3 Binary files /dev/null and b/docs/work/kanban/_img/add-columns-active-agile-update-1.png differ diff --git a/docs/work/kanban/_img/add-columns-custom-states-mapping.png b/docs/work/kanban/_img/add-columns-custom-states-mapping.png new file mode 100644 index 00000000000..d6238ba9a92 Binary files /dev/null and b/docs/work/kanban/_img/add-columns-custom-states-mapping.png differ diff --git a/docs/work/kanban/_img/add-columns-open-settings-ts.png b/docs/work/kanban/_img/add-columns-open-settings-ts.png new file mode 100644 index 00000000000..08be551cf83 Binary files /dev/null and b/docs/work/kanban/_img/add-columns-open-settings-ts.png differ diff --git a/docs/work/kanban/_img/add-columns-settings-dialog-add-test-ts.png b/docs/work/kanban/_img/add-columns-settings-dialog-add-test-ts.png new file mode 100644 index 00000000000..826e4e5a71d Binary files /dev/null and b/docs/work/kanban/_img/add-columns-settings-dialog-add-test-ts.png differ diff --git a/docs/work/kanban/_img/add-columns-settings-dialog-ts.png b/docs/work/kanban/_img/add-columns-settings-dialog-ts.png new file mode 100644 index 00000000000..6ee4704b1ec Binary files /dev/null and b/docs/work/kanban/_img/add-columns-settings-dialog-ts.png differ diff --git a/docs/work/kanban/_img/add-task-checklist-open-task.png b/docs/work/kanban/_img/add-task-checklist-open-task.png new file mode 100644 index 00000000000..e37ff4169f1 Binary files /dev/null and b/docs/work/kanban/_img/add-task-checklist-open-task.png differ diff --git a/docs/work/kanban/_img/add-tasks-menu-options-vs-ts.png b/docs/work/kanban/_img/add-tasks-menu-options-vs-ts.png new file mode 100644 index 00000000000..aec6c341497 Binary files /dev/null and b/docs/work/kanban/_img/add-tasks-menu-options-vs-ts.png differ diff --git a/docs/work/kanban/_img/features-add-story.png b/docs/work/kanban/_img/features-add-story.png new file mode 100644 index 00000000000..80755fd31d2 Binary files /dev/null and b/docs/work/kanban/_img/features-add-story.png differ diff --git a/docs/work/kanban/_img/features-with-stories.png b/docs/work/kanban/_img/features-with-stories.png new file mode 100644 index 00000000000..d763da185e3 Binary files /dev/null and b/docs/work/kanban/_img/features-with-stories.png differ diff --git a/docs/work/kanban/_img/filter-kb-card-field-settings.png b/docs/work/kanban/_img/filter-kb-card-field-settings.png new file mode 100644 index 00000000000..3c63108d00d Binary files /dev/null and b/docs/work/kanban/_img/filter-kb-card-field-settings.png differ diff --git a/docs/work/kanban/_img/filter-kb-choose-filter.png b/docs/work/kanban/_img/filter-kb-choose-filter.png new file mode 100644 index 00000000000..5e53a6ccd0a Binary files /dev/null and b/docs/work/kanban/_img/filter-kb-choose-filter.png differ diff --git a/docs/work/kanban/_img/filter-kb-choose-parent-work-items.png b/docs/work/kanban/_img/filter-kb-choose-parent-work-items.png new file mode 100644 index 00000000000..b277bc56f21 Binary files /dev/null and b/docs/work/kanban/_img/filter-kb-choose-parent-work-items.png differ diff --git a/docs/work/kanban/_img/filter-kb-filter-text-web.png b/docs/work/kanban/_img/filter-kb-filter-text-web.png new file mode 100644 index 00000000000..e733b356e0e Binary files /dev/null and b/docs/work/kanban/_img/filter-kb-filter-text-web.png differ diff --git a/docs/work/kanban/_img/filter-kb-filters-chosen.png b/docs/work/kanban/_img/filter-kb-filters-chosen.png new file mode 100644 index 00000000000..99af962d8e2 Binary files /dev/null and b/docs/work/kanban/_img/filter-kb-filters-chosen.png differ diff --git a/docs/work/kanban/_img/i-test-add-test.png b/docs/work/kanban/_img/i-test-add-test.png new file mode 100644 index 00000000000..26bcb074ebe Binary files /dev/null and b/docs/work/kanban/_img/i-test-add-test.png differ diff --git a/docs/work/kanban/_img/i-test-board-intro.png b/docs/work/kanban/_img/i-test-board-intro.png new file mode 100644 index 00000000000..82f55bfd9f8 Binary files /dev/null and b/docs/work/kanban/_img/i-test-board-intro.png differ diff --git a/docs/work/kanban/_img/i-test-case-form.png b/docs/work/kanban/_img/i-test-case-form.png new file mode 100644 index 00000000000..c39356cdcfa Binary files /dev/null and b/docs/work/kanban/_img/i-test-case-form.png differ diff --git a/docs/work/kanban/_img/i-test-drag-reparent.png b/docs/work/kanban/_img/i-test-drag-reparent.png new file mode 100644 index 00000000000..4f4d2e7846a Binary files /dev/null and b/docs/work/kanban/_img/i-test-drag-reparent.png differ diff --git a/docs/work/kanban/_img/i-test-expanded-test-list.png b/docs/work/kanban/_img/i-test-expanded-test-list.png new file mode 100644 index 00000000000..beccd4ee480 Binary files /dev/null and b/docs/work/kanban/_img/i-test-expanded-test-list.png differ diff --git a/docs/work/kanban/_img/i-test-open-board-collapsed-tests.png b/docs/work/kanban/_img/i-test-open-board-collapsed-tests.png new file mode 100644 index 00000000000..37585b83570 Binary files /dev/null and b/docs/work/kanban/_img/i-test-open-board-collapsed-tests.png differ diff --git a/docs/work/kanban/_img/i-test-plan-suite.png b/docs/work/kanban/_img/i-test-plan-suite.png new file mode 100644 index 00000000000..c23193ed10d Binary files /dev/null and b/docs/work/kanban/_img/i-test-plan-suite.png differ diff --git a/docs/work/kanban/_img/i-test-run-test.png b/docs/work/kanban/_img/i-test-run-test.png new file mode 100644 index 00000000000..cacde575ba5 Binary files /dev/null and b/docs/work/kanban/_img/i-test-run-test.png differ diff --git a/docs/work/kanban/_img/i-test-story-with-3-inline-tests.png b/docs/work/kanban/_img/i-test-story-with-3-inline-tests.png new file mode 100644 index 00000000000..3546eb263de Binary files /dev/null and b/docs/work/kanban/_img/i-test-story-with-3-inline-tests.png differ diff --git a/docs/work/kanban/_img/i-test-update-status.png b/docs/work/kanban/_img/i-test-update-status.png new file mode 100644 index 00000000000..c54be9dd2d6 Binary files /dev/null and b/docs/work/kanban/_img/i-test-update-status.png differ diff --git a/docs/work/kanban/_img/kanban-basics-intro.png b/docs/work/kanban/_img/kanban-basics-intro.png new file mode 100644 index 00000000000..1de513e29dd Binary files /dev/null and b/docs/work/kanban/_img/kanban-basics-intro.png differ diff --git a/docs/work/kanban/_img/kanban-board-add-swimlane.png b/docs/work/kanban/_img/kanban-board-add-swimlane.png new file mode 100644 index 00000000000..c9e563d400d Binary files /dev/null and b/docs/work/kanban/_img/kanban-board-add-swimlane.png differ diff --git a/docs/work/kanban/_img/kanban-board-add-task-checklist.png b/docs/work/kanban/_img/kanban-board-add-task-checklist.png new file mode 100644 index 00000000000..056571fb962 Binary files /dev/null and b/docs/work/kanban/_img/kanban-board-add-task-checklist.png differ diff --git a/docs/work/kanban/_img/kanban-board-configure-split-columns.png b/docs/work/kanban/_img/kanban-board-configure-split-columns.png new file mode 100644 index 00000000000..06c04e63ca7 Binary files /dev/null and b/docs/work/kanban/_img/kanban-board-configure-split-columns.png differ diff --git a/docs/work/kanban/_img/kanban-board-first-open-collapsed-checklists.png b/docs/work/kanban/_img/kanban-board-first-open-collapsed-checklists.png new file mode 100644 index 00000000000..bc3dce01f40 Binary files /dev/null and b/docs/work/kanban/_img/kanban-board-first-open-collapsed-checklists.png differ diff --git a/docs/work/kanban/_img/kanban-board-identify-bottlenecks.png b/docs/work/kanban/_img/kanban-board-identify-bottlenecks.png new file mode 100644 index 00000000000..52f18c87464 Binary files /dev/null and b/docs/work/kanban/_img/kanban-board-identify-bottlenecks.png differ diff --git a/docs/work/kanban/_img/kanban-board-open-task-form.png b/docs/work/kanban/_img/kanban-board-open-task-form.png new file mode 100644 index 00000000000..18fe069fc43 Binary files /dev/null and b/docs/work/kanban/_img/kanban-board-open-task-form.png differ diff --git a/docs/work/kanban/_img/kanban-board-split-columns-example-chart.png b/docs/work/kanban/_img/kanban-board-split-columns-example-chart.png new file mode 100644 index 00000000000..65b6b277cf4 Binary files /dev/null and b/docs/work/kanban/_img/kanban-board-split-columns-example-chart.png differ diff --git a/docs/work/kanban/_img/kanban-board-split-columns-moving-doing-to-done.png b/docs/work/kanban/_img/kanban-board-split-columns-moving-doing-to-done.png new file mode 100644 index 00000000000..6fbd3f98671 Binary files /dev/null and b/docs/work/kanban/_img/kanban-board-split-columns-moving-doing-to-done.png differ diff --git a/docs/work/kanban/_img/kanban-board-task-checklists-added.png b/docs/work/kanban/_img/kanban-board-task-checklists-added.png new file mode 100644 index 00000000000..8d0c6b057b8 Binary files /dev/null and b/docs/work/kanban/_img/kanban-board-task-checklists-added.png differ diff --git a/docs/work/kanban/_img/kanban-card-reordering-up1.png b/docs/work/kanban/_img/kanban-card-reordering-up1.png new file mode 100644 index 00000000000..f61835783e0 Binary files /dev/null and b/docs/work/kanban/_img/kanban-card-reordering-up1.png differ diff --git a/docs/work/kanban/_img/kanban-check-done-tasks.png b/docs/work/kanban/_img/kanban-check-done-tasks.png new file mode 100644 index 00000000000..5f9f8b9a988 Binary files /dev/null and b/docs/work/kanban/_img/kanban-check-done-tasks.png differ diff --git a/docs/work/kanban/_img/kanban-delete-column-ts.png b/docs/work/kanban/_img/kanban-delete-column-ts.png new file mode 100644 index 00000000000..30a3cd7d05d Binary files /dev/null and b/docs/work/kanban/_img/kanban-delete-column-ts.png differ diff --git a/docs/work/kanban/_img/kanban-delete-column.png b/docs/work/kanban/_img/kanban-delete-column.png new file mode 100644 index 00000000000..05ababb1b74 Binary files /dev/null and b/docs/work/kanban/_img/kanban-delete-column.png differ diff --git a/docs/work/kanban/_img/kanban-live-updates.gif b/docs/work/kanban/_img/kanban-live-updates.gif new file mode 100644 index 00000000000..6ee9eeab689 Binary files /dev/null and b/docs/work/kanban/_img/kanban-live-updates.gif differ diff --git a/docs/work/kanban/_img/kanban-qs-add-new-item.png b/docs/work/kanban/_img/kanban-qs-add-new-item.png new file mode 100644 index 00000000000..5126c944415 Binary files /dev/null and b/docs/work/kanban/_img/kanban-qs-add-new-item.png differ diff --git a/docs/work/kanban/_img/kanban-shortcuts_up1.png b/docs/work/kanban/_img/kanban-shortcuts_up1.png new file mode 100644 index 00000000000..23cc2db629c Binary files /dev/null and b/docs/work/kanban/_img/kanban-shortcuts_up1.png differ diff --git a/docs/work/kanban/_img/kanban-task-checklists.png b/docs/work/kanban/_img/kanban-task-checklists.png new file mode 100644 index 00000000000..debceda0192 Binary files /dev/null and b/docs/work/kanban/_img/kanban-task-checklists.png differ diff --git a/docs/work/kanban/_img/rename-kanban-columns-direct-ts.png b/docs/work/kanban/_img/rename-kanban-columns-direct-ts.png new file mode 100644 index 00000000000..c8777772189 Binary files /dev/null and b/docs/work/kanban/_img/rename-kanban-columns-direct-ts.png differ diff --git a/docs/work/kanban/_img/rename-kanban-columns-direct.png b/docs/work/kanban/_img/rename-kanban-columns-direct.png new file mode 100644 index 00000000000..a934562af32 Binary files /dev/null and b/docs/work/kanban/_img/rename-kanban-columns-direct.png differ diff --git a/docs/work/kanban/_img/task-checklist-reorder-tasks.png b/docs/work/kanban/_img/task-checklist-reorder-tasks.png new file mode 100644 index 00000000000..f2f0ebd74f6 Binary files /dev/null and b/docs/work/kanban/_img/task-checklist-reorder-tasks.png differ diff --git a/docs/work/kanban/_img/vso-column-settings-add-rename-columns-no-tags.png b/docs/work/kanban/_img/vso-column-settings-add-rename-columns-no-tags.png new file mode 100644 index 00000000000..b55d395ebb5 Binary files /dev/null and b/docs/work/kanban/_img/vso-column-settings-add-rename-columns-no-tags.png differ diff --git a/docs/work/kanban/_img/vso-kanban-board-definition-of-done-no-tags.png b/docs/work/kanban/_img/vso-kanban-board-definition-of-done-no-tags.png new file mode 100644 index 00000000000..e6a8a6ce024 Binary files /dev/null and b/docs/work/kanban/_img/vso-kanban-board-definition-of-done-no-tags.png differ diff --git a/docs/work/kanban/_img/vso-kanban-split-columns-settings-analyze-no-tags.png b/docs/work/kanban/_img/vso-kanban-split-columns-settings-analyze-no-tags.png new file mode 100644 index 00000000000..c36351b41aa Binary files /dev/null and b/docs/work/kanban/_img/vso-kanban-split-columns-settings-analyze-no-tags.png differ diff --git a/docs/work/kanban/_img/vso-product-backlog-work-item-form-acceptance-criteria.png b/docs/work/kanban/_img/vso-product-backlog-work-item-form-acceptance-criteria.png new file mode 100644 index 00000000000..4295357304e Binary files /dev/null and b/docs/work/kanban/_img/vso-product-backlog-work-item-form-acceptance-criteria.png differ diff --git a/docs/work/kanban/_img/wip-columns-settings.png b/docs/work/kanban/_img/wip-columns-settings.png new file mode 100644 index 00000000000..f5345c4a233 Binary files /dev/null and b/docs/work/kanban/_img/wip-columns-settings.png differ diff --git a/docs/work/kanban/add-columns.md b/docs/work/kanban/add-columns.md new file mode 100644 index 00000000000..e1fb5562f9d --- /dev/null +++ b/docs/work/kanban/add-columns.md @@ -0,0 +1,325 @@ +--- +title: Add columns on your Kanban board for VSTS & TFS +description: Map your Kanban board to follow the flow of how your team works by adding columns that map to a stage in your process - Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 8afd3481-6fab-401d-90ff-0dd443da0f0e +ms.manager: douge +ms.author: kaelli +ms.date: 07/20/2017 +--- + +# Add columns + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +Kanban's number one practice is to visualize the flow of work. Accordingly, your number one task is to visualize your team's workflow. You do this by identifying the types of work and handoffs that occur regularly as your team moves items off the backlog and into a shippable state. + +After you identify your team's workflow stages, you're ready to [configure your Kanban board to map to them](add-columns.md#add-or-rename-columns). Once configured, you use your Kanban board to update status, reassign work, and reorder items to reflect changing priorities. + +For example, the main workflow stages performed by our example dev team are captured here as Analyze, Develop, and Test. Each column corresponds to a work stage the team performs on each item before it can be considered done. + +![Kanban board, columns customized ](_img/ALM_AC_KanbanIntro.png) + +If you're just getting started, review [Kanban basics](kanban-basics.md) to get an overview of how to access your board and implement Kanban. + + +>[!NOTE] +>If you're looking at how to add columns to a task board, you need to customize the workflow. For details, see [Customize your work flow (Inheritance process model](../customize/customize-work.md) or [Add or modify a work item type (Hosted XML or On-premises XML process models](../customize/add-modify-wit.md). To add columns to a backlog or query results, see [Change column options](../how-to/set-column-options.md). +> +>For an overview of the features supported on each backlog and board, see [Backlog, board, and plan views](../backlogs-boards-plans.md). + +<a id="map-the-flow-of-work"> </a> + +##Map the flow of work +It's best if you involve the entire team to identify an initial set of workflow stages. Each team member provides useful perspectives to capture and further deepen team understanding of the end-to-end processes. + +To get started, ask your team these questions: + +* What types of activities do we regularly perform? + +* What natural handoffs occur within our team? Or, from our team to other teams? + +* What activities will help reinforce our team policies, such as analysis, code review, or design acceptance? + +* What work needs to occur at each stage? + + +Our example dev team came up with these stages as essential to their process: + +![Example workflow stages ](_img/ALM_AC_Workflow.png) + +* **Backlog**: Prioritized list of items which aren't yet ready to work on + +* **Analyze**: Well understood and shared acceptance criteria identified and overall work required to develop and test item + +* **Develop**: Code and run unit tests for the item + +* **Test**: Perform exploratory, automated, integration, and other tests + +* **Done**: Item ready to handoff to production. + + +You can always revisit these initial stages later and adjust. + +Another idea, capture the list of items your team identifies as critical-to-complete for each stage. You can use that later to fill out the [Definition of Done](http://msdn.microsoft.com/library/dn914589.aspx) for each column. + +## Update status and handoff items + +Using your Kanban board couldn't be simpler. Using drag-and-drop operations you update the status or change priorities. + +For example, to signal when work can start in a downstream stage, simply drag items into the next column. + +![Kanban board, move an item](_img/ALM_AC_DragItem.png) + +You'll notice that you can move an item from one column to any other column on the board. That way, if you discover more work is needed at an earlier stage, you can simply move the item backward, for example from Test into Analyze or Develop. + +Also, to handoff work to another team member, simply reassign it directly from the board. + +![Kanban board, assign item](_img/ALM_AC_Reassign.png) + +And, team members receiving the handoff can [set alerts](../track/alerts-and-notifications.md) to receive immediate email notifications of their newly assigned work. + +## Change priorities + +To keep teams working on the highest priority items, you'll want to react quickly when a change in priority occurs even after work starts. With your Kanban board it's a snap. Simply drag an item up or down within a column. + +![Kanban column, reorder within column ](_img/ALM_AC_ChangePriorities.png) + +<a id="add-or-rename-columns"> </a> + +##Add or rename columns + +Now that you've got the essentials of how to work with your Kanban board, here's how you get it to look like what you need it to. + +You'll see different column titles and choices based on the following: + +- You connect to VSTS, TFS 2015 Update 1, or TFS 2015 +- The [Process](../guidance/choose-process.md) you used to create your team project +- Whether your team has chosen to [treat bugs like requirements or like tasks](../customize/show-bugs-on-backlog.md). +<br/> + +First, open the Kanban portal for your team project. Click the **Board** link from the **Work>Backlogs** page. + +<img src="_img/kanban-basics-intro.png" alt="Kanban board, Agile template" style="border: 2px solid #C3C3C3;" /> + +#### VSTS, TFS 2017 + +1. To open, click ![gear icon](../_img/icons/team-settings-gear-icon.png), the gear icon, to open the team settings dialog and then click Columns. + + <img src="_img/add-columns-open-settings-ts.png" alt="VSTS, Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + + If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can customize columns. + +2. Click a column tab to see all the settings you can modify. Your initial column settings will look something like this. + + <img src="_img/add-columns-settings-dialog-ts.png" alt="VSTS, Kanban board, Customize columns, default columns, Agile process" style="border: 2px solid #C3C3C3;" /> + +3. Change your column titles to map to your workflow stages. You can add, rename, and move columns to support more stages. + + Here, we rename the first, second, and third columns to Backlog, Analyze, and Develop. We then add a column and label it Test. + + You can rename a column directly form the Kanban board. + + <img src="_img/rename-kanban-columns-direct-ts.png" alt="Kanban board, rename a column directly" style="border: 2px solid #C3C3C3;" /> + + Or, you can open the dialog and change one or more settings for a Kanban column. + + <img src="_img/add-columns-settings-dialog-add-test-ts.png" alt="VSTS, Kanban board, Settings, Columns, Add and rename columns, Agile process" style="border: 2px solid #C3C3C3;" /> + +4. To change the column order, simply drag the column tab to the position you want. + +5. To delete a column, first make sure that the column doesn't contain any work items. If it does, move the items to another column. Then, click Delete on the column tab menu. + + ![Kanban board, delete a column](_img/kanban-delete-column-ts.png) + +6. [Change State mappings as needed](#state-mappings) for added columns, added workflow states, or added work item types (WITs). + + Usually you need to do this when you change the [Working with bugs](../customize/show-bugs-on-backlog.md) setting, add [WITs to the Requirement Category](../customize/add-wits-to-backlogs-and-boards.md), or [customize the workflow](../process/customize-process-workflow.md). + +#### TFS 2015.1 + +1. To open, click ![gear icon](../_img/icons/team-settings-gear-icon.png), the gear icon, to open the team settings dialog and then click Columns. + + <img src="../customize/_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + + If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can customize columns. + +2. Click a column tab to see all the settings you can modify. Your initial column settings will look something like this. + + ![Kanban board, Customize columns, default columns, Agile process](_img/add-columns-active-agile-update-1.png) + +3. Change your column titles to map to your workflow stages. You can add, rename, and move columns to support more stages. + + Here, we rename the first, second, and third columns to Backlog, Analyze, and Develop. We then add a column and label it Test. + + You can rename a column directly form the Kanban board. + + ![Kanban board, rename a column directly](_img/rename-kanban-columns-direct.png) + + Or, you can open the dialog and change one or more settings for a Kanban column. + + ![Kanban board, add and rename columns](_img/vso-column-settings-add-rename-columns-no-tags.png) + +4. To change the column order, simply drag the column tab to the position you want.</p> + +5. To delete a column, first make sure that the column doesn't contain any work items. If it does, move the items to another column. Then, click Delete on the column tab menu. + + ![Kanban board, delete a column](_img/kanban-delete-column.png) + +6. [Change State mappings as needed](#state-mappings) for added columns, added workflow states, or added work item types (WITs). + + Usually you need to do this when you change the [Working with bugs](../customize/show-bugs-on-backlog.md) setting or add [WITs to the Requirement Category](../customize/add-wits-to-backlogs-and-boards.md).</p> + + +#### TFS 2015, TFS 2013 + +<ol> +<li><p>To open, click ![gear icon](../_img/icons/team-settings-gear-icon.png), the gear icon, to open Customize Columns.</p> +<img src="../customize/_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + +<p>If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can customize columns.</p> + +![Kanban board, Customize columns, default columns, Agile process ](_img/ALM_AC_CustomizeColumns.png) +</li> +<li> +<p>Change your column titles to map to your workflow stages. You can add, rename, and move columns to support more stages.</p> +<p>Here, we rename the first, second, and third columns to Backlog, Analyze, and Develop. We then add a column and label it Test.</p> +![Customize columns, add column](_img/ALM_AC_CustomizeColumnsDetailed.png) +<p>Rename column titles to best reflect each stage of work. Keep the column titles as simple as possible.</p> +</li> +<li> +<p>To change the column order, use the left ![left arrow](_img/ALM_AC_LeftIcon.png) or right ![right arrow](_img/ALM_AC_RightIcon.png) arrow icons.</p> +</li> +<li> +<p>To delete a column, first make sure that the column doesn't contain any work items. If it does, move the items to another column. Then, click X at the top of the column.</p> +</li> +<li> +<p>[Change State mappings as needed](#state-mappings) for added columns, added workflow states, or added work item types (WITs).</p> +<p>Usually you need to do this when you change the [Working with bugs](../customize/show-bugs-on-backlog.md) setting or add [WITs to the Requirement Category](../customize/add-wits-to-backlogs-and-boards.md).</p> +</li> +</ol> + +<!--- +1. To open, click ![gear icon](../_img/icons/team-settings-gear-icon.png), the gear icon, to open the team settings dialog and then click Columns. + + <img src="../customize/_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + + If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can customize columns. + + You'll see different column titles and choices based on the following: + + - You connect to VSTS, TFS 2015 Update 1, or TFS 2015 + - The [Process](../guidance/choose-process.md) you used to create your team project + - Whether your team has chosen to [treat bugs like requirements or like tasks](../customize/show-bugs-on-backlog.md) + + **VSTS and TFS 2015 Update 1 options:** + + Click a column tab to see all the settings you can modify. Your initial column settings will look something like this. + + ![Kanban board, Customize columns, default columns, Agile process](_img/add-columns-active-agile-update-1.png) + + **TFS 2015 options:** + ![Kanban board, Customize columns, default columns, Agile process ](_img/ALM_AC_CustomizeColumns.png) + +3. Change your column titles to map to your workflow stages. You can add, rename, and move columns to support more stages. + + Here, we rename the first, second, and third columns to Backlog, Analyze, and Develop. We then add a column and label it Test. + + **VSTS and TFS 2015 Update 1 :** + You can rename a column directly form the Kanban board. + + ![Kanban board, rename a column directly](_img/rename-kanban-columns-direct.png) + + Or, you can open the dialog and change one or more settings for a Kanban column. + + ![Kanban board, add and rename columns](_img/vso-column-settings-add-rename-columns-no-tags.png) + + **TFS:** + ![Customize columns, add column](_img/ALM_AC_CustomizeColumnsDetailed.png) + + Rename column titles to best reflect each stage of work. Keep the column titles as simple as possible. + +4. To change the column order: + - **VSTS and TFS 2015 Update 1 :** Simply drag the column tab to the position you want. + - **TFS 2015:** use the left ![left arrow](_img/ALM_AC_LeftIcon.png) or right ![right arrow](_img/ALM_AC_RightIcon.png) arrow icons. + +5. To delete a column, first make sure that the column doesn't contain any work items. If it does, move the items to another column. + + **VSTS and TFS 2015 Update 1 :** Click Delete on the column tab menu. + ![Kanban board, delete a column](_img/kanban-delete-column.png) + + **TFS 2015:** Click X at the top of the column. + +6. [Change State mappings as needed](#state-mappings) for added columns, added workflow states, or added work item types (WITs). + + Usually you need to do this when you change the [Working with bugs](../customize/show-bugs-on-backlog.md) setting or add [WITs to the Requirement Category](../customize/add-wits-to-backlogs-and-boards.md). + +--> + + +<a id="when-to-update-the-kanban-column-to-state-mappings"></a> +## Update Kanban column-to-State mappings + +Another "under the hood" item that impacts Kanban column-to-State mappings is categories. The Kanban board and other Agile tools uses categories to group WITs that they want to treat the same. + +What does this mean for Kanban board users? First, only work items whose WITs belong to the Requirement Category show up on the Kanban board. Second, if you add bugs or other WITs to appear on the Kanban board, you potentially introduce additional workflow states. This means that you may need to adjust the Kanban column-to-State mappings when you perform one of these additional customizations: + +* Your team admin chooses to [show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md) +* Your project admin [adds WITs to backlogs and boards](../customize/add-wits-to-backlogs-and-boards.md) +* Your project collection or project admin customizes the workflow for a WIT in the Requirement Category: [VSTS](../process/customize-process-workflow.md) or [TFS](../reference/change-workflow-wit.md) + +For example, if you change the team setting and add bugs to the Requirements Category, the bug WIT will now appear in the Columns dialog. You'll want to make sure that the Kanban column-to-State mappings match what you want. + + +**VSTS** +In this example two new states have been added, Triaged for bug, and Investigate for user story. Each needs to be mapped to an existing or new column in order for the Kanban board to display work items assigned to these states. + +<img src="_img/add-columns-custom-states-mapping.png" alt="Kanban board settings, Columns" style="border: 2px solid #C3C3C3;" /> + +**TFS 2015** + +In this example, bugs have been added to show on the Kanban board. You need to map the bug state for each column on the Kanban board. + +![Kanban column to State mappings with bugs ](_img/ALM_AC_Update.png) + + +## Related notes + +That's about all you need to know about working with Kanban columns. Here are a few more options you have for customizing the look and feel of the board. + +* [Work in Progress limits ](wip-limits.md) +* [Add swimlanes, expedite work](expedite-work.md) +* [Split columns](split-columns.md) +* [Definition of Done](definition-of-done.md) +* [Customize cards](../customize/customize-cards.md) +* [Cumulative flow diagram](../../report/guidance/cumulative-flow.md) + + +<a id="state-mappings" > </a> +### Track Kanban column status + +Your Kanban board is one of several tools you have for tracking work. The [query tool](../track/using-queries.md) allows you to list a subset of work items for the purposes of review, triage, update, or chart generation. For example, you can create a query to list all active user stories (specify two clauses: Work Item Type=User Story; State=Active). + +But what if you want to list items based on their Kanban column assignment? Can you do that? Yes, from VSTS or from TFS 2015 Update 1 or later version. No, if you work from TFS 2015 or earlier versions. + +**VSTS and TFS 2015 Update 1 :** + +You can track Kanban board column moves using the [Board Column and Board Column Done fields](../track/query-by-workflow-changes.md#kanban_query_fields). + +**TFS 2015:** + +What you can do is view the history of changes made to a work item. The [History field](../track/history-and-auditing.md) captures all updates made to an item, including column moves. You can view this by opening the card (double-click to open). + +For example, the following History shows two updates made by dragging the item into a different Kanban column. The first (revision 8) involved a column move, from Analyze to Develop; and a State change, New to Active. However, the second (revision 9) only involved a column move, from Develop to Test; the State remains at Active. + +![History field updates with Kanban column moves ](_img/ALM_AC_History.png) + +As an item's card moves from one Kanban column to the next, the item's workflow state updates based on the Kanban column-to-State mapping. You can see and set these mappings from the Customize Columns dialog. For example, here's the default mapping for the Agile user story. + +![Kanban column to State mappings ](_img/ALM_AC_State.png) + +Kanban columns may correspond to an actual workflow state or a pseudo state. For example, Develop, Test, and Verify columns may all map to the Active state. In this case, when you move an item from Develop to Test or from Test to Verify, the item's State doesn't change. + +###REST API resources +To programmatically interact with the Kanban board and other team settings, see the [Work API reference](https://www.visualstudio.com/integrate/api/work/overview). diff --git a/docs/work/kanban/add-run-update-tests.md b/docs/work/kanban/add-run-update-tests.md new file mode 100644 index 00000000000..fc4222c49fa --- /dev/null +++ b/docs/work/kanban/add-run-update-tests.md @@ -0,0 +1,121 @@ +--- +title: Add, run, and update inline tests | VSTS +description: Add, run, and update manual test cases via the inline test feature on your Kanban board for lightweight tracking and traceability when working in Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: ED3CC394-EE6C-4E12-A2BC-F43A0EE17318 +ms.manager: douge +ms.author: kaelli +ms.date: 07/14/2017 +ms.topic: get-started-article +--- + +#Add, run, and update inline tests + +[!INCLUDE [temp](../_shared/dev15-and-ts-version-header.md)] + +>[!NOTE] +><b>Feature availability: </b>The Kanban board inline tests feature is supported from VSTS and TFS 2017.   + +Similar to [task checklists](add-task-checklists.md), you can quickly define inline tests, or a set of manual tests, for a backlog item from your Kanban board. Not only can you add tests, you can run them and update their status. If you're new to working with the Kanban board, see [Kanban basics](kanban-basics.md). + + +In this topic, you'll learn: +> [!div class="checklist"] +> * How to add inline tests to a backlog item from your Kanban board +> * How to run tests and update the status of tests +> * How to expand or collapse inline tests +> * How to reorder or reparent inline tests + +<img src="_img/i-test-board-intro.png" alt="Web portal, Kanban board with several inline tests defined" style="border: 2px solid #C3C3C3;" /> + +Tests you create from the Kanban board are automatically linked to the user story or backlog item. + +## Add tests + +1. To start adding tests, open the menu for the work item. + + <img src="_img/i-test-add-test.png" alt="Open the context menu of a backlog item to add inline test case" style="border: 2px solid #C3C3C3;" /> + + Adding inline tests is the same as adding test cases to a test suite. A default test plan and test suite are automatically created under which the manual test cases are grouped. + + For example, a test suite is created for each user story, and all inline tests are added to that suite. Below, user story 152 is highlighted which has three manual tests defined with IDs of 153, 155, and 161. + + <img src="_img/i-test-plan-suite.png" alt="Inline test cases get added to test suites and test plans" style="border: 2px solid #C3C3C3;" /> + + To learn more about test plans and test suites, see [Plan your tests](../../manual-test/getting-started/create-a-test-plan.md). + +2. If you have a number of tests to add, simply keep typing each title and click Enter. + + <img src="_img/i-test-story-with-3-inline-tests.png" alt="Work item with several test cases added" style="border: 2px solid #C3C3C3;" /> + + To add details to the test case, open it. You can click the title, double-click the inline item, or open the context menu and choose Open. + + <img src="_img/i-test-case-form.png" alt="Open test case form from Kanban board" style="border: 2px solid #C3C3C3;" /> + +See [Create manual tests](../../manual-test/getting-started/create-test-cases.md) to learn more about defining tests. + +Prior to running the test, you must add details. + +## Run test + +Run the test by selecting ![Run icon](../_img/icons/run_query.png) Run test from the ![Actions icon](../_img/icons/actions-icon.png) actions menu for the inline test. + +<img src="_img/i-test-run-test.png" alt="Run a test" style="border: 2px solid #C3C3C3;" /> + +Microsoft Test Runner starts in a new browser instance. For details on running a test, see [Run manual tests](../../manual-test/getting-started/run-manual-tests.md). + + +## Update the status of a test + +You can update the status of the test from the ![Actions icon](../_img/icons/actions-icon.png) actions menu . + +<img src="_img/i-test-update-status.png" alt="Check tasks that are complete" style="border: 2px solid #C3C3C3;" /> + +Updating the status of tests enable you to [track test results](../../manual-test/getting-started/track-test-status.md). + +[Why doesn't the Kanban board show the status for test suites and plans already created in the Test hub?](#test-status-kanban) + +## Expand or collapse inline tests + +Upon first opening the Kanban board, you'll see an unexpanded view of checklists. + +![Inline tests collapsed](_img/i-test-open-board-collapsed-tests.png) + +Simply click the inline test summary to expand a collapsed set of tests. Click the same summary to collapse an expanded list. + +![Inline tests expanded](_img/i-test-expanded-test-list.png) + +## Copy or reparent a test + +To reparent a test, drag and drop the test onto a different user story. + +![Drag tests to reassign them to a different user story ](_img/i-test-drag-reparent.png) + +This action automatically changes the linked relationship of the test to point to the new user story. + +To create a copy of a test to add to a different user story, select the test, press the CTRL key and then drag and drop the test onto the card of the user story. + + +## Related notes + +Use inline tests for lightweight traceability and to manage manual tests for user stories or other backlog items that they support. To learn more about test case management, see [Create manual tests](../../manual-test/getting-started/create-test-cases.md). + +If you find that you don't use this feature, you can disable it from the [common configurations dialog](../customize/customize-cards.md#annotations). + +Additional ways you can quickly add linked items and objects to user stories from the Kanban board: +- [Add inline tasks](add-task-checklists.md) +- [Create a new branch, drive Git development](../backlogs/connect-work-items-to-git-dev-ops.md) + +To initate web-based exploratory testing for a user story, you need to install the Exploratory testing , see [Exploratory test your web app directly in your browser](../../manual-test/getting-started/perform-exploratory-tests.md). + +<a name="test-status-kanban"></a> +### Test status in the Kanban board + +Test integration with the Kanban board makes it easy for teams to get started with manual testing and then take advantage of the full testing capabilities in Test Manager later, when required. When test cases are created from the Kanban board and updated afterwards in Test Manager, the Kanban board shows the correct status. However, integration is not optimized to work in the other direction; for example, when users create requirement-based suites with Test Manager instead of in the Kanban board. We intend to make some major performance improvements to this integration in future releases. + + +### REST API resources +To programmatically create test cases, see the [Test management (REST API reference)](/vsts/extend/overview). + + diff --git a/docs/work/kanban/add-task-checklists.md b/docs/work/kanban/add-task-checklists.md new file mode 100644 index 00000000000..edfce94a6af --- /dev/null +++ b/docs/work/kanban/add-task-checklists.md @@ -0,0 +1,114 @@ +--- +title: Add task checklists | VSTS & TFS +description: Add task checklists to your Kanban board for lightweight tracking of to do lists when working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: D4CE68D6-8056-4CB7-ACFA-1FCD05223040 +ms.manager: douge +ms.author: kaelli +ms.date: 07/20/2017 +ms.topic: get-started-article +--- + +#Add task checklists + +<b>VSTS | TFS 2017 | TFS 2015.1</b> + + +> [!NOTE] +> **Feature availability:** Task checklists on the Kanban board are supported from VSTS and the web portal for TFS 2015.1 and later versions. + +Many teams find Kanban ideal for tracking work as it supports visualizing the flow of work in progress. And, you can quickly add new items and update status. If you're new to working with the Kanban board, see [Kanban basics](kanban-basics.md). + +With task checklists, you continue to enjoy lightweight tracking, while gaining visibility into which tasks are still to be completed and those that are done. Task checklists provide a quick and easy way to track elements of work which are important to support completing a backlog item. Here we see several tasks for work in progress, both yet to do and those completed. + +In this topic, you'll learn: +> [!div class="checklist"] +> * How to add a task or set of tasks to a backlog item from your Kanban board +> * How to mark a task as done +> * How to expand or collapse the task checklist +> * How to reorder and reparent tasks or reassign them to a sprint +> * Keyboard shortcuts for working with the Kanban board + +<img src="_img/kanban-task-checklists.png" alt="Kanban board with several task checklists defined" style="border: 2px solid #C3C3C3;" /> + + +[!INCLUDE [temp](../_shared/image-differences.md)] + + +## Add a task or set of tasks + +1. To start adding tasks, open the menu for the work item. + + <img src="_img/kanban-board-add-task-checklist.png" alt="Open the context menu of a backlog item to add a task" style="border: 2px solid #C3C3C3;" /> + + For users of VSTS and TFS 2017 or later versions, you'll see several additional menu options: + + <img src="_img/add-tasks-menu-options-vs-ts.png" alt="Open the context menu of a backlog item to add a task" style="border: 2px solid #C3C3C3;" /> + +2. If you have a number of tasks to add, simply keep typing your task titles and click Enter. + + <img src="_img/kanban-board-task-checklists-added.png" alt="Work item with several tasks added" style="border: 2px solid #C3C3C3;" /> + +3. If you have details you want to add about a task, open the parent work item and then click the ![links icon](../_img/icons/icon-links-tab-wi.png) links tab. + + <img src="_img/add-task-checklist-open-task.png" alt="Open parent work item, Links tab" style="border: 2px solid #C3C3C3;" /> + +4. Double-click the task, or select and press the Enter key, to open it. + + <img src="_img/kanban-board-open-task-form.png" alt="Open task work item form from task checklist" style="border: 2px solid #C3C3C3;" /> + + Tasks that you create from the Kanban board will show up on your sprint task board. Also, tasks that you create from the [sprint backlog](../scrum/sprint-planning.md) or [taskboard](../scrum/task-board.md) will show up within tasks checklists on the Kanban board. + +## Mark a task as done + +When you complete a task, simply click the checkbox to change its status to Done or Closed. + +<img src="_img/kanban-check-done-tasks.png" alt="Check tasks that are complete" style="border: 2px solid #C3C3C3;" /> + +The State of the work item is updated from To Do to Done for Scrum projects, and from Active to Closed for Agile and CMMI projects. + +## Expand or collapse the task checklist + +Upon first opening the Kanban board, you'll see an unexpanded view of checklists. + +<img src="_img/kanban-board-first-open-collapsed-checklists.png" alt="Expand task checklist for a work item" style="border: 2px solid #C3C3C3;" /> + +Simply click the task checklist summary to expand a collapsed task checklist. Click the same summary to collapse an expanded checklist. + + +## Reorder and reparent tasks or reassign them to a sprint + +Tasks that you create from the Kanban board are automatically assigned to the sprint/iteration path of the parent work item under which you define them. + +You can drag a task within a work item to reorder it. Or, you can drag the task to another work item on the Kanban board to reparent it. + +![Drag tasks to reorder them within the list](_img/task-checklist-reorder-tasks.png) + +To reassign a task to a different sprint, you must open the sprint backlog where it's currently defined and then drag it to the new sprint. + + +## Related notes +Use your task checklist for lightweight tracking of to-do lists. If you find that you don't use this feature, you can disable it from the [common configurations dialog](../customize/customize-cards.md#annotations). + +You can also [add tags and show tags and fields on cards](../customize/customize-cards.md) to support other tracking needs. + +In addition, you can: + +- [Add, run, update manual tests](add-run-update-tests.md) +- [Create a new branch, drive Git development](../backlogs/connect-work-items-to-git-dev-ops.md) +- [Kanban board controls](kanban-board-controls.md) + +### Customize the Kanban board +To customize or change the layout of the board, see one of these topics. + +* [Add columns](add-columns.md) +* [WIP limits](wip-limits.md) +* [Add swimlanes, expedite work](expedite-work.md) +* [Customize cards](../customize/customize-cards.md) +* [Split columns](split-columns.md) +* [Definition of Done](definition-of-done.md) + + +### REST API resources +To programmatically create tasks, see the [Work API reference](https://www.visualstudio.com/en-us/integrate/api/wit/batch). diff --git a/docs/work/kanban/best-practices-kanban.md b/docs/work/kanban/best-practices-kanban.md new file mode 100644 index 00000000000..22a49215537 --- /dev/null +++ b/docs/work/kanban/best-practices-kanban.md @@ -0,0 +1,150 @@ +--- +title: Kanban best practices | VSTS & TFS +description: Best practices when implementing Kanban in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: F7E22503-8E8F-4AD0-9E0E-AFE9F24D72B5 +ms.manager: douge +ms.author: kaelli +ms.date: 05/16/2017 +--- + +# Kanban best practices + +Having worked through the four configuration steps provided in [Kanban basics](../kanban/kanban-basics.md), you're well on your way to implementing most of Kanban's six core practices. + +1. **Visualize your workflow**. Teams track their work using a Kanban board that maps to how they work. Teams discuss how to best focus their resources to deliver the most important work. +2. **Limit work in progress**. Teams set and adhere to WIP limits they set for each stage of work. They use WIP limits to maintain focus on completing what they started and to identify bottlenecks occurring in their processes. +3. **Manage flow**. Teams monitor the overall work in progress and lead time, which gives them an idea of the speed of their delivery. +4. **Make policies explicit**. Teams spell out the standards and processes they agree to follow and make them readily accessible. For example, by making the team's Definition of Done for each work stage explicit, they can avoid wasted time and effort. +5. **Create opportunities for feedback**. Teams meet periodically to reflect on what's working and what needs improvement. +6. **Improve collaboratively, evolve experimentally**. Teams determine how to improve the continuous flow of delivery over time based of key metrics. They involve the entire team to gather insights and ideas. And, when persistent bottlenecks arise, they determine the changes that will alleviate them. + +Over time, Kanban can provide your team insight as to how well their current processes work end-to-end and how to improve them. Incremental adoption of Kanban practices tends to yield greater success and builds on the sixth practice, to evolve experimentally. These practices arose from principles of Lean Manufacturing and Systems Thinking. + + +<a id="practices" /> + +##WIP limits, challenges, and solutions + +Teams occasionally exceed WIP limits by 1 or 2 items. However, if your team frequently exceeds the limits, and exceeds them by 3 or more items, they should review processes or adjust the limits. + +After a team has worked with WIP limits for several weeks, discuss the challenges team members have, solutions they'd like to try, and adjust the limits as needed. The following list, although not exhaustive, indicates some of the common challenges encountered and proven solutions used by teams who've implemented Kanban successfully. + +###Challenges +* **Social dynamics.** When it comes to following rules, team members can feel challenged. Some naturally want to rebel, others don't see that the rule applies to them, or don't see what they do as breaking the rules. Some team members may take on extra work that's outside the scope of what's been agreed to. And, still others don't want to give up multitasking as they believe it's the key to their productivity and individual achievement. + +* **Variability of work in progress.** Wide variability in the size of work items─users stories and bugs─ can negatively impact the overall workflow. For example, items with estimates that vary in size from 4 hours to 14 days, or 2 to 55 story points, can't be counted the same when it comes to constraining work in progress. + +* **Ignoring systemic problems.** Instead of addressing workflow problems when bottlenecks occur, teams soldier on, putting in more time to overcome the bottleneck. + +* **Culture change.** Adopting WIP limits introduces changes to the system, culture, and team. + +###Solutions +* **Build a culture of team productivity.** Address the natural tension that exists between individual productivity versus team productivity. Identify ways in which team members can enhance the overall productivity of the team and workflow process. + +* **Size work to minimize variability.** Before work starts on any item, the team should discuss the overall size of work required and determine if it can be broken down into smaller tasks. + +* **Focus on the flow of high priority items.** When idle, team members ask how they can help move an upstream item forward. When blocked or challenged to deliver an item on time, team members ask for help to complete an item. + +* **Resource team capacity for each work stage.** Bottlenecks can occur when there aren't enough specialists who work in a particular stage. Determine ways to either increase team skills within each work stage, or add resources as needed to meet an understaffed work stage. + +* **Build shared understanding.** Continuously strive to increase the team's understanding of how to work using Kanban practices. Take actions that allow team members to contribute to process changes. Consider scheduling regular retrospectives or team meetings to discuss what works well and what needs changing. Document team policies to limit ambiguity. + +* **Use metrics to adjust processes.** Periodically check Kanban metrics of work in progress and lead time to determine when changes need to be made. + +* **Manage culture changes mindfully.** People want to do their best work─a core tenant underlying Kanban and its associated disciplines. Apply change management principles as you adopt new practices. Create greater ownership within the team for the success of implementing WIP limits. + + +## Your team, working software and the Definition of Done + +One of the [12 principles of Agile software development](http://agilemanifesto.org/principles.html) is to “deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.” + +> *All agile teams must establish what they mean when they say "working software," which is frequently known as the definition of done. At a high level, a piece of functionality is complete only when its features pass all tests and can be operated by an end user. At a minimum, teams must go beyond the unit test level and test at the system level. The best teams also include integration testing, performance testing, and customer acceptance testing in their definition of what it means to be done with a piece of functionality.* ─ Jeff Sutherland + +One of the major causes of teams failing to implement Agile is they lack good definitions of done. + +Each stage indicates a handoff to someone else who will do work. What information does the next person in the flow sequence need to quickly succeed. Incomplete work or uncommunicated information can lead to delays and wasted effort. + +As a starting point, consider some of the following criteria as you work with your team to decide what done means throughout the development process. + +<table valign="top" width="100%"> + <tr> + <th width="35%">Stage</th> + <th width="65%">Done criteria</th> + </tr> + <tr valign="top"> + <td>Before work starts on a feature, user story, or requirement</td> + <td style="padding:100"> +<ol> +<li>User story is properly scoped and estimated.</li> +<li>Acceptance criteria is well defined.</li> +<li>Customer needs are understood by the team.</li> +<li>Dependencies have been identified and are tracked.</li> +</ol> + </td> + </tr> + <tr valign="top"> + <td>Bug filing</td> + <td> +<ol> +<li>Bug title identifies the issue clearly.</li> +<li>Repro steps are clear and minimal.</li> +<li>Bug specifies a single issue.</li> +<li>Related issues are linked to as related.</li> +<li>Terms used are clearly understood within the team.</li> +</ol> + </td> + </tr> + <tr valign="top"> + <td>Code complete, ready for testing</td> + <td> +<ol> +<li>Code complete, commented, and run against current version.</li> +<li>Code peer reviewed and meets team standards.</li> +<li>Builds without error.</li> +<li>Passes unit and system tests.</li> +<li>Remaining hours for tasks set to zero and task closed.</li> +</ol> + </td> + </tr> + <tr valign="top"> + <td>Test complete, ready for release</td> + <td> +<ol> +<li>Unit tests implemented for all new features or functions.</li> +<li>Unit tests are all passing.</li> +<li>Acceptance/story tests are written and passing. </li> +<li>Regression tests are green with known failures. </li> +<li>Sufficient exploratory testing has been done.</li> +<li>Feature/function works correctly as expected. </li> +<li>Unsolved defects have been logged as bugs. </li> +<li>Code coverage is stable or improving.</li> +</ol> + </td> + </tr> +</table> + +As your team makes progress, revisit your Definition of Done criteria. + +> *A development team's Definition of Done is meant to expand over time. A newly formed team will invariably have a less stringent and smaller Definition of Done than a more mature team with a shared history of improving. Expanding a team's Definition of Done lies at the very core of Kaizen, a Japanese term meaning a mindful and constant focus on improvement. While a team may initially require only that code build before being checked in, over time they should evolve more exacting standards like the need for unit tests to accompany new code*. ─ David Starr + +### Acceptance Criteria versus Definition of Done +Acceptance criteria corresponds to what a customer should expect when a user story, feature, or requirement has been implemented. Conversations between the team and customers to determine the acceptance criteria helps ensure a common understanding within the team to meet customers' expectations. The acceptance criteria can be used as the basis for acceptance tests so that the team can more effectively evaluate whether an item has been satisfactorily completed. + +Acceptance criteria defines when a feature is shippable. Capture the criteria for each backlog item in the Acceptance Criteria field (for Scrum product backlog items) or the Description field (for Agile user stories and CMMI requirements). + +<img src="_img/vso-product-backlog-work-item-form-acceptance-criteria.png" alt="Acceptance criteria field on work item form]" style="border: 1px solid #C3C3C3;" /> + +The Definition of Done, on the other hand, is about delivering an incremental piece of a feature as it moves from not started to complete. Agile teams meet with greater success when each handoff made is in a ready state for the recipient to begin their work. + +> *Agility requires delivering done, ready-to-use increments of working software each Sprint. Yet most Scrum and agile teams generate partially done, incomplete Increments. When a Scrum Team is asked why Product Backlog requirements were not completely done in a Sprint, team members often reply, "We didn't have time."* ─ Ken Schwaber and David Starr + + +## Additional resources +- [DoD Goes Agile](https://www.scruminc.com/dod-goes-agile/) +- [Walking Through a Definition of Done](https://www.scrum.org/resources/blog/walking-through-definition-done) +- [Agile Culture](https://www.visualstudio.com/learn/agile-culture/) +- [What is Kanban?](http://kanbanblog.com/explained/) +- [Kanban: Successful Evolutionary Change for Your Technology Business by David J. Anderson](http://www.amazon.com/Kanban-Successful-Evolutionary-Technology-Business/dp/0984521402/) +- [Agile Project Management with Kanban by Eric Brechner](http://www.amazon.com/Project-Management-Kanban-Developer-Practices/dp/0735698953/) diff --git a/docs/work/kanban/breadcrumb/toc.yml b/docs/work/kanban/breadcrumb/toc.yml new file mode 100644 index 00000000000..bba894f487a --- /dev/null +++ b/docs/work/kanban/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Agile + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=agile + items: + - name: Kanban + tocHref: /vsts/ + topicHref: /vsts/work/kanban/index \ No newline at end of file diff --git a/docs/work/kanban/definition-of-done.md b/docs/work/kanban/definition-of-done.md new file mode 100644 index 00000000000..bcb8e863773 --- /dev/null +++ b/docs/work/kanban/definition-of-done.md @@ -0,0 +1,62 @@ +--- +title: Definition of Done | VSTS & TFS +description: Support teams shared understanding by providing a definition for what "done" means for each column of the Kanban board when working in VSTS or Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: f5b9223e-5be2-4df7-a735-02f0cb59a46b +ms.manager: douge +ms.author: kaelli +ms.date: 04/03/2017 +--- + + +# Definition of Done + +<b>VSTS | TFS 2017 | TFS 2015</b> + +As your team updates the status of work as it progresses from one stage to the next, it helps that they agree on what “done” means. By specifying the Definition of Done criteria for each Kanban column, you help share the essential tasks to complete before moving an item into a downstream stage. + +Also, you'll have implemented one of the core Kanban tenets: **make processes and policies explicit.** + +When set, team members can quickly double-check the done criteria. + +![Definition of Done](_img/ALM_DD_IntroImage.png) + +If you're just getting started, review [Kanban basics](kanban-basics.md) to get an overview of how to access your board and implement Kanban. + +## Specify the Definition of Done for a column + +1. From your Kanban board, click ![settings icon](../_img/icons/team-settings-gear-icon.png) and as needed, click Columns. + + <img src="../customize/_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + + If you're not a team administrator, [get added as one](../scale/add-team-administrator.md). Only team or project administrators can customize the Kanban board. + +2. Open the Definition of Done for the column that applies to the criteria you'll enter. You can specify the Definition of Done for each intermediate column on your team's Kanban board. + + **VSTS and TFS 2015.1 and later versions** + Click a column tab and enter the Definition of Done for that column. Enter text that defines your [team's Definition of Done](#definition-of-done). + + <img src="_img/vso-kanban-board-definition-of-done-no-tags.png" alt="Kanban board, Coding column tab, Definition of done]" style="border: 2px solid #C3C3C3;" /> + + **TFS 2015** + + ![Edit Definition](_img/ALM_DD_EditDefinition.png) + + Enter text that defines your [team's Definition of Done](#definition-of-done). + + ![Definition Text](_img/ALM_DD_DefinitionText.png) + +4. Team members can quickly check that they have met the criteria by clicking the Information tooltip ![Info Icon](_img/ALM_DD_InfoIcon.png) icon. + + +## Related Kanban notes +See these choices for further options to customize the Kanban board: + +- [Add, rename, move, and delete columns ](add-columns.md) +- [Work in Progress limits](wip-limits.md) +- [Add swimlanes, expedite work](expedite-work.md) +- [Split columns](split-columns.md) +- [Customize cards ](../customize/customize-cards.md) + + diff --git a/docs/work/kanban/expedite-work.md b/docs/work/kanban/expedite-work.md new file mode 100644 index 00000000000..a8637d32ad9 --- /dev/null +++ b/docs/work/kanban/expedite-work.md @@ -0,0 +1,105 @@ +--- +title: Use swimlanes to expedite work | VSTS & TFS +description: Use swimlanes to differentiate different types of work you track on the Kanban board in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 0BBD90C3-7156-4027-B100-9E46F5BD53FB +ms.manager: douge +ms.author: kaelli +ms.date: 04/14/2017 +--- + +# Expedite work + +<b>VSTS | TFS 2017 | TFS 2015</b> + +Your Kanban board supports your ability to visualize the flow of work as it moves from new to done. When you add swimlanes, you can also visualize the status of work that supports different service-level classes. You can create a swimlane to represent any other dimension that supports your tracking needs. + +For example, you can create three swimlanes—Expedite, Standard, and Park—to track high-priority work, standard work, and work that's currently blocked. + +<img src="_img/ALM_EW_IntroChart_3C.png" alt="Kanban board showing three swimlanes" style="border: 2px solid #C3C3C3;" />  + +>[!TIP] +>Type <span style="color:purple; font-family:Courier new; font-size:1.1em; font-weight:bold">o</span> to expand all swimlanes and <span style="color:purple; font-family:Courier new; font-size:1.1em; font-weight:bold">u</span> to collapse all swimlanes. To move the focus up or down, enter the ![Up/Down arrow](../_img/icons/Arrow_Up.png)![ ](../_img/icons/Arrow_Down.png) up/down arrows. For more tips, see [Keyboard shortcuts](../../reference/keyboard-shortcuts.md). + + +## Types of swimlanes +You can use swimlanes to sort work on your Kanban board to track items that you differentiate as follows: +* High priority items +* Service-level class +* Date-driven requirement +* Dependency for or from another team +* Blocked items +* Technical debt or other engineering work that's not a specific user story + + +## Track work in swimlanes +Once you've set up your swimlanes, you can drag items into a swimlane as well as reorder them within the lane. + +<img src="_img/ALM_EW_MoveToNewLane.png" alt="Kanban board, Drag items into a swimlane" style="border: 2px solid #C3C3C3;" />  + +You can also focus on a single swimlane by collapsing all other lanes. + +<img src="_img/ALM_EW_CollapseLanes.png" alt="Kanban board, Collapsed swimlanes" style="border: 2px solid #C3C3C3;" />  + +## Configure swimlanes +So, what swimlanes will support your tracking needs? + +Once you've identified one or two, add them to your working Kanban board. + +1. From your Kanban board, click ![settings icon](../_img/icons/team-settings-gear-icon.png) and as needed, click Swimlanes. + + <img src="../customize/_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + + If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can customize the Kanban board. + +2. Click ![add icon](../_img/icons/add_icon.png) and enter the name of the swimlane you want to add. + + **VSTS and TFS 2015.1:** + + <img src="_img/kanban-board-add-swimlane.png" alt="Kanban board, Add a swimlane" style="border: 2px solid #C3C3C3;" />  + + The default lane appears unlabeled on the Kanban board. You can rename it to anything you like, however, you can't delete it. Also, you can rename it directly from the Kanban board. + + **TFS 2015:** + + ![Add a swimlane](_img/ALM_SW.AddLane.png) + + The default lane is automatically renamed to Standard when you add a second lane. You can rename it to anything you like, however, you can't delete it. + +3. To reorder your swimlanes, simply grab the lane and move it up or down. + + <img src="_img/ALM_EW_ReorderLanes.png" alt="Kanban board, Open swimlanes" style="border: 2px solid #C3C3C3;" /> + +4. If you need to delete a lane, first move all items out of the lane, and then click Delete from the lane's context menu. + + <img src="_img/ALM_EW_DeleteLane.png" alt="Kanban board, Delete a swimlane" style="border: 2px solid #C3C3C3;" /> + +## Related Kanban notes + +As you can see, swimlanes provides another way to organize and visualize the flow of work using [Kanban](kanban-basics.md). Here are a few more options you have for customizing the look and feel of your Kanban board. + +* [Add columns](add-columns.md) +* [Work in Progress limits](wip-limits.md) +* [Split columns](split-columns.md) +* [Definition of Done](definition-of-done.md) +* [Customize cards](../customize/customize-cards.md) +* [Show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md) + +### Tracking lane moves + + +**VSTS and TFS 2015.1 and later versions** + +You can track Kanban board swimlane moves using the [Board Lane field](../track/query-by-workflow-changes.md#kanban_query_fields). + +**TFS 2015** + +Similar to the way [column moves are tracked](add-columns.md), swimlane moves are captured in the history field. + +<img src="_img/ALM_EW_HistorySwimLanes.png" alt="Work item form, History tab, History of a swimlane move" style="border: 2px solid #C3C3C3;" /> + +For TFS 2015 and earlier versions, you can't [query](../track/using-queries.md) for all items in a particular swimlane. To perform such a query, you'd have to assign a value to a field, such as the Priority field, or [tag](../track/add-tags-to-work-items.md) each item in a similar way. + +###REST API resources +To programmatically interact with Kanban board and other team settings, see the [Work API reference](https://www.visualstudio.com/en-us/integrate/api/work/overview). diff --git a/docs/work/kanban/filter-kanban-board.md b/docs/work/kanban/filter-kanban-board.md new file mode 100644 index 00000000000..d7a24551a0d --- /dev/null +++ b/docs/work/kanban/filter-kanban-board.md @@ -0,0 +1,153 @@ +--- +title: Filter Kanban board | VSTS & TFS +description: Filter your Kanban board based on work item type, assigned to, iteration or sprint, tags, or parent work items +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/28/2017 +--- + +<a id="filter"></a> + +# Filter your Kanban board + +<b>VSTS | TFS 2017 | TFS 2015</b> + +<!--- NEEDS UPDATING BASED ON FEATURES UNDER RELEASE --> + +Depending on the size of your team and the number of stories in progress, your Kanban board can get a bit crowded. With filtering, you can selectively choose what cards display to focus on what's of interest in the moment. With parent work item filters, you can focus on one or more select features or epics. + +<table width="70%"> +<tr> +<th width="40%">Filter options </th> +<th width="20%">Team Services</th> +<th width="20%">TFS 2015 </th> +<th width="20%">TFS 2017 </th> +</tr> + + +<tr> +<td align="left">[Filter by keyword and tags](#text-filter)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + + +<tr> +<td align="left"> +[Filter by select field values](#field-filter) +</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left"> +[Filter by parent work items](#parent-filter) +</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td> </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +</tr> + +</table> + + + +<a id="text-filter"></a> + +## Filter your Kanban board using keywords and tags + +To filter the Kanban board, first customize the board settings so that the cards display the fields or tags that contain keywords that you want to filter on. Otherwise, the keywords you enter will filter work items based on title. + +For example, to filter by Assign To, Iteration Path, or Work Item Type—or the contents of any other field—you add those fields to show on the cards. For details, see [Customize cards](../customize/customize-cards.md). + +![Kanban board, customize card fields](_img/filter-kb-card-field-settings.png) + +The filter function displays work items based on any visible/displayed column or field, including tags, based on the keyword that you enter. + +For example, here we filter the backlog to only show items that include 'Web' in any one of the displayed column fields. + +![Kanban board, Filter using keyword search](../kanban/_img/filter-kb-filter-text-web.png) + +>[!TIP] +>Type <span style="color:purple; font-family:Courier new; font-size:1.1em; font-weight:bold">f</span> to move your cursor to the filter box. To move the focus up or down within a column, enter the ![Up/Down arrow](../_img/icons/Arrow_Up.png)![ ](../_img/icons/Arrow_Down.png) up/down arrows. +>For more tips, see [Keyboard shortcuts](../../reference/keyboard-shortcuts.md). + +If you want to filter for a specific work item ID, you must choose to show IDs on the cards. + +The filter criteria ignores the following characters when the field value starts with the character: ```{, (, [, !, @, #, $, %, ^, &, *, ~, `, ', "```. + + +<a id="field-filter"></a> +## Filter your Kanban board using select field values + +>[!NOTE] +><b>Feature availability: </b>Filter by select fields is available from VSTS and TFS 2017 and later versions. + +You can filter by select field values using the Kanban board for your product backlog (Stories, Product Backlog Items, or Requirements) or a portfolio backlog (Features or Epics). + +To start filtering, click the ![Kanban filter icon](../_img/icons/kanban-filter-icon.png) Kanban board filter icon. + +<img src="_img/filter-kb-choose-filter.png" alt="Enable kanban field-based filtering" style="border: 2px solid #C3C3C3;" /> + +Choose one or more values from the multi-select drop-down menu for each field. The values for these fields are populated as follows: +- **Assigned To**: All users who are currently assigned to work items on the board plus Unassigned +- **Iteration**: All Iteration Paths [activated for the current team](../scrum/define-sprints.md) +- **Work item type**: Work item types defined for the Requirements Category (product backlog) or Features or Epic categories (feature or epic portfolio backlogs) +- **Tags**: All tags assigned to work items on the board +- **Parent Work Items**: All features defined for the team, or all epics defined for the team when viewing the Features board (The Parent Work Items field doesn't appear when viewing the Epic or top-level Kanban board) + +For example, here we filter for all items assigned to Jamal and Raisa. + +<img src="../kanban/_img/filter-kb-filters-chosen.png" alt="Kanban board, Filter on assignment field" style="border: 2px solid #C3C3C3;" /> + +Filters remain in place until you explicitly clear them by clicking <span style="color:blue">Clear filters</span>. When you refresh your Kanban board or log in from another browser, filters remain set to your previous values. + +Once the board is filtered, you can click the filter icon to hide the drop downs and view the applied filters on the board. The filter icon also turns opaque to signify a filtered board. + + +<a id="parent-filter"></a> +## Filter your Kanban board by specifying parent work items +>[!NOTE] +><b>Feature availability: </b>The **Filter by parent** feature is available from VSTS and TFS 2017 and later versions. + +You can use the **Filter by parent** feature to filter by select parent work items using the Kanban board for your product backlog (Stories, Product Backlog Items, or Requirements) or a portfolio backlog (Features). + +You can use this feature only when you've created features or epics and linked them to user stories or features, respectively. A quick and easy way to create the links is to [map them using drag-and-drop](../backlogs/organize-backlog.md). Mapping creates parent-child links between the work items. + +>[!NOTE] +>The **Filter by parent** feature doesn't support filtering of parent work items of the same work item type. For example, you can't filter the Stories backlog by specifying user stories that are parents of nested user stories. + +To start filtering, click the ![Kanban filter icon](../_img/icons/kanban-filter-icon.png) Kanban board filter icon. Choose one or more values from the multi-select drop-down menu for the Parent Work Item. These values are derived from the [Features](kanban-epics-features-stories.md) you've defined. + +Here, we choose two features on which to filter the board. + +<img src="_img/filter-kb-choose-parent-work-items.png" alt="Kanban board, Filter on parent work items" style="border: 2px solid #C3C3C3;" /> + +The final board displays just those stories linked as child work items to the selected features. + +## Related notes +- [Tags](../track/add-tags-to-work-items.md) +- [Customize cards](../customize/customize-cards.md) + +<a id="filter-logic"></a> +### Filter logic +Cards are filtered based on the assignments made in the following order and logic: + +1. **Assigned to**: Show all cards that are assigned to user 1 ```OR``` user 2 + ```AND``` +2. **Iteration**: Show all cards that are assigned to Iteration 1 ```OR``` Iteration 2 + ```AND``` +3. **Work Item type**: Show all cards that are work item type 1 ```OR``` work item type 2 + ```AND``` +4. **Tags**: Show all cards that have tag 1 ```AND``` or ```OR``` tags 2, based on your selection of ```AND | OR```. + ```AND``` +5. **Parent Work Items**: Show all cards that have Parent Work Item 1 ```OR``` Parent Work Item 2. + + + diff --git a/docs/work/kanban/index.md b/docs/work/kanban/index.md new file mode 100644 index 00000000000..e2c8e7e8087 --- /dev/null +++ b/docs/work/kanban/index.md @@ -0,0 +1,70 @@ +--- +title: Kanban board for VSTS & TFS content +description: Index to topics for working with Kanban in VSTS and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 07/25/2017 +--- + +# Kanban + +Get collaboration going by adding to, updating, and then reviewing your Kanban board with others. + +<!--- +## Overview +[About Kanban and Agile project management](kanban-overview.md) +[Backlogs, boards, & plans](/vsts/work/backlogs-boards-plans?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json) +--> + +## 5-Minute Quickstarts + +- [Kanban quickstart](kanban-quickstart.md) + +## Step-by-Step Tutorials + +- [Kanban basics](kanban-basics.md) +- [Task checklists](add-task-checklists.md) +- [Epics & features](kanban-epics-features-stories.md) +- [Add inline tests](add-run-update-tests.md) +- [Cumulative flow](/vsts/report/guidance/cumulative-flow?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json) + + +## Concepts + +- [Kanban best practices](best-practices-kanban.md) +- [About teams and Agile tools](../about-teams-and-settings.md?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json) + + +## How-to Guides + +- [Filter your Kanban board](filter-kanban-board.md) +- [Add columns](add-columns.md) +- [WIP limits](wip-limits.md) +- [Split columns](split-columns.md) +- [Expedite work (swimlanes)](expedite-work.md) +- [Definition of done](definition-of-done.md) +- [Customize cards](/vsts/work/customize/customize-cards?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json) +- [Card reordering](/vsts/work/customize/reorder-cards?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json) +- [Use work item form controls](/vsts/work/concepts/work-item-form-controls?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json) + +## Reference +- [Permissions and access for work tracking](/vsts/work/permissions-access-work-tracking?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json) +- [Work item field index](/vsts/work/guidance/work-item-field?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json) + + +## Resources + +- [Backlogs](../backlogs/index.md) +- [Scrum](../scrum/index.md) +- [Work item queries](../track/index.md) +- [Work item customization](../customize/index.md) +- [What is Agile?](https://www.visualstudio.com/learn/what-is-agile/) +- [What is Agile development?](https://www.visualstudio.com/learn/what-is-agile-development/) + + +<!--- +Add Q&A about Can I add another Kanban board? +--> \ No newline at end of file diff --git a/docs/work/kanban/kanban-basics.md b/docs/work/kanban/kanban-basics.md new file mode 100644 index 00000000000..1c56ce0f713 --- /dev/null +++ b/docs/work/kanban/kanban-basics.md @@ -0,0 +1,146 @@ +--- +title: Understand and configure your Kanban board provided by VSTS & TFS +description: Use the Kanban board, process, and tools to plan and track work in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.topic: get-started-article +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 92395eeb-6372-49b3-935d-dab5feef1d54 +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +--- + +# Kanban basics + +<b>VSTS | TFS 2017 | TFS 2015 | TFS 2013</b> + +To maximize a team's ability to consistently deliver high quality software, Kanban emphasize two main practices. The first, visualize the flow of work, requires you to map your team's workflow stages and configure your Kanban board to match. The second, constrain the amount of work in progress, requires you to set work-in-progress (WIP) limits. You're then ready to track progress on your Kanban board and monitor key metrics to reduce lead or cycle time. + +Your Kanban board turns your backlog into an interactive signboard, providing a visual flow of work. As work progresses from idea to completion, you update the items on the board. Each column represents a work stage, and each card represents a user story (blue cards) or a bug (red cards) at that stage of work. + +Review this topic to gain an understanding of how to configure and start working with your Kanban boards: + +> [!div class="checklist"] +> * View your Kanban board +> * Customize the columns shown on your Kanban board to support how your team works +> * Set WIP limits to constrain work in progress +> * Update the status of work via drag-and-drop +> * View the Cumulative flow chart +> * How to turn live updates on or off + + +To view your Kanban board, click the **Board** link from the **Work>Backlogs** page. + +<img src="_img/kanban-basics-intro.png" alt="Kanban board, Agile template" style="border: 2px solid #C3C3C3;" /> + + +[!INCLUDE [temp](../_shared/image-differences.md)] + + +User stories and bugs correspond to types of work items. You use [work items](../backlogs/add-work-items.md) to share information, assign work to team members, update status, track dependencies, and more. + +You open your Kanban board using one of these URLs that connects you to your team project: + +**VSTS**: ```http://AccountName/DefaultCollection/TeamProjectName/_backlogs/board/ ``` +**On-premises TFS**: ```http://ServerName:8080/tfs/DefaultCollection/TeamProjectName/_backlogs/board/``` + +If you don't have a team project yet, create one in [VSTS](../../accounts/set-up-vs.md) or set one up in an [on-premises TFS](../../accounts/create-team-project.md). If you don't have access to the team project, ask the account owner or project administrator to add you: [VSTS](../../accounts/add-account-users-assign-access-levels.md) or [TFS](../../accounts/add-users.md). + +## 1. Map the flow of how your team works +<meta name="description" content="Kanban workflow" /> +Kanban literally means signboard or billboard. As a first step, you customize your board to map to how your team works. + +When you first open your Kanban board, you'll see one column for each [workflow state](../guidance/choose-process.md#workflow-states). Your actual columns vary based on the [process](../guidance/choose-process.md) used to create your team project. + +For user stories, the New, Active, Resolved, and Closed states track progress from idea to completion. +<table> +<tbody> +<tr valign="top"> +<td> +![User story workflow states](_img/ALM_KB_Workflow.png) + + +</td> +<td> +![Default kanboard boward, Agile template](_img/ALM_KB_Empty.png) + + + +</td> +</tr> +</tbody> +</table> + +However, your team's workflow stages most likely don't map to these default states. For your team to have a functional board they must identify the stages of their workflow process and then configure the board to match. + +For example, you can change your Kanban columns to map to the following five workflow stages. + +![Kanban board, Columns customized](_img/ALM_KB_Board2.png) + +[Once you've identified your stages, simply add and rename columns](add-columns.md) to map to them. Keep the number of columns to a minimum while still representing the key handoffs that occur for your team. + +## 2. Set WIP limits to constrain work in progress +<meta name="description" content="Kanban WIP limits" /> +In this next step, your team sets WIP limits for each workflow stage. While setting WIP limits is easy, adhering to them takes a team commitment. Teams new to Kanban may find WIP limits counterintuitive and uncomfortable. However, this single practice has helped teams identify bottlenecks, improve their process, and increase the quality of software they ship. + +What limits should you set? Start with numbers that don't exceed 2 or 3 items per team member working within a stage. Respecting WIP limits means teams don't pull items into a column if doing so causes the number of items in the column to exceed the WIP limit. + +When they do exceed the limit, the column count displays red. Teams can use this as a signal to focus immediately on activities to bring the number of items in the column down. + +![Exceeded WIP Limits](_img/ALM_KB_WipLimits.png) + +[Set WIP limits](wip-limits.md) based on team discussions and revisit as your team identifies ways to improve their processes. Use WIP limits to identify bottlenecks and eliminate waste from your work flow processes. + +<a id="track-work"> </a> +## 3. Track work in progress +<meta name="description" content="Kanban tools track progress" /> +Once you've configured your Kanban board to match how your team works, you're ready to use it. + +Here are a few things you can do. See at a glance the estimated size of work for each item which displays at the bottom right of each card. Add items to your backlog in the first column. When priorities change, move items up and down within a column. And, as work completes in one stage, update the status of an item by moving it to a downstream stage. + +![Kanban board, move an item](_img/ALM_CC_MoveCard.png) + +> [!NOTE] +> ** Feature availability:** You can [reorder items within a column](../customize/reorder-cards.md#reorder-cards) from VSTS and the web portal for TFS 2015.1 and later versions.   + +Also, you can quickly update a field or reassign ownership directly from the board. + +![Kanban, assign items](_img/ALM_CC_UpdateFieldOnCard.png) + +Updating your Kanban board as work progresses helps keep you and your team in sync. Also, you'll be able to see and share the value stream your team is delivering to customers. + +## 4. Monitor metrics and fine tune +As with most Agile practices, Kanban encourages monitoring key metrics to fine tune your processes. After your team has used the Kanban board for several weeks, check out your Cumulative Flow Diagram (CFD). + +<img src="_img/ALM_KB_Board5.png" alt="Open the cumulative flow diagram" style="border: 2px solid #C3C3C3;" /> + +The CFD shows the count of items in each Kanban column for the past 30 weeks or less. From this chart you can gain an idea of the amount of work in progress and lead time. Work in progress counts unfinished requirements. Lead time indicates the amount of time it takes to complete a requirement once work has started. + +<img src="_img/ALM_KB_CumulativeFlow.png" alt="Kanban board, cumulative flow diagram" style="border: 2px solid #C3C3C3;" /> + +By monitoring these metrics, you can gain insight into how to optimize your processes and minimize lead time. For additional guidance, see [Cumulative Flow](../../report/guidance/cumulative-flow.md) +  +>[!NOTE] +><b>Feature availability: </b>From VSTS, you can also add the [Cumulative Flow Diagram (CFD)](../../report/guidance/cumulative-flow.md), [Lead Time and Cycle Time](../../report/guidance/cycle-time-and-lead-time.md), and [Velocity](../../report/guidance/team-velocity.md) widgets to a team dashboard. + +## Try this next + +Here are some useful tips when working with the Kanban board: +- To focus on select work items, [filter your Kanban board](../how-to/filter-backlog-or-board.md) +- To quickly assign items to a team member, add the Assign To field to display on the cards (see [Customize cards](../customize/customize-cards.md)) +- Add a swimlane to track high-priority work or track work which falls into different service level agreements (see [Swimlanes](expedite-work.md)) +- Highlight specific work items by color coding cards based on a field value or tag (see [Customize cards](../customize/customize-cards.md)) +- If you use Scrumban, drag-and-drop cards onto a sprint to quickly assign them to a sprint. + + +> [!NOTE] +> Your Kanban board is one of two types of boards available to you. For an overview of the features supported on each backlog and board, see [Backlogs, boards, and plans](../backlogs-boards-plans.md). To switch to the [product backlog](../backlogs/create-your-backlog.md), click **Backlog**. And, to switch to the [Task board](../scrum/task-board.md), click on the current iteration or other sprint of interest. If no sprints appear, see [Schedule sprints](../scrum/define-sprints.md). + +Each team can manage their backlog and customize their Kanban board. [Add teams](../scale/multiple-teams.md) when you assign specific feature areas to different teams for development. Each team can then manage their backlog and focus on how they will develop their deliverables. + + +If you're new to VSTS and TFS and want to understand what you can customize, see [Customize your work tracking experience](../customize/customize-work.md). + + +[!INCLUDE [temp](../_shared/live-updates.md)] + diff --git a/docs/work/kanban/kanban-board-controls.md b/docs/work/kanban/kanban-board-controls.md new file mode 100644 index 00000000000..5275f167fe8 --- /dev/null +++ b/docs/work/kanban/kanban-board-controls.md @@ -0,0 +1,36 @@ +--- +title: Kanban board controls +description: Understand the board controls available with your Kanban board in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: D4CE68D6-8056-4CB7-ACFA-1FCD05223040 +ms.manager: douge +ms.author: kaelli +ms.date: 07/20/2017 +ms.topic: get-started-article +--- + +# Kanban board controls + +<b>VSTS | TFS 2017 | TFS 2015.1</b> + + +| Control | Function | +|--------------------------|-------------------------------| +| Backlog | [Switch to backlog view](../backlogs/create-your-backlog.md) | +| Board | [Switch to Kanban board view](kanban-quickstart.md) | +| ![Search filter](../_img/icons/search_filter_icon.png) | [Filter by keyword or tag](filter-kanban-board.md) | +| ![Kanban filter icon](../_img/icons/kanban-filter-icon.png) | [Filter by field](filter-kanban-board.md) | +| ![Live updates icon](../_img/icons/live-updates-icon.png) | [Enable live updates](kanban-basics.md#live-updates) | +| ![Settings icon](../_img/icons/team-settings-gear-icon.png) | Customize the board and configure team settings:<br/>[Cards](../customize/customize-cards.md) | [Card reordering](../customize/reorder-cards.md) | [Columns](add-columns.md) | [Swimlanes](expedite-work.md) | [CFD chart](../../report/guidance/cumulative-flow.md) | [Backlogs](../customize/select-backlog-navigation-levels.md) | [Working days](../customize/set-working-days.md) | [Working with bugs](../customize/show-bugs-on-backlog.md) | +| ![full screen icon](../_img/icons/fullscreen_icon.png) / ![exit full screen icon](../_img/icons/exitfullscreen_icon.png) | Enter or exit full screen mode | +<br/> + +Enter **?** to open the Kanban board keyboard shortcuts. + +>[!NOTE] +><b>Feature availability: </b>Global keyboard shortcuts are available from VSTS and the web portal for TFS 2015.2 and later versions. + +<img src="../_shared/_img/kanban-board-keyboard-shortcuts-ts-jul.png" alt="Kanban keyboard shortcuts" style="border: 2px solid #C3C3C3;" /> + + diff --git a/docs/work/kanban/kanban-epics-features-stories.md b/docs/work/kanban/kanban-epics-features-stories.md new file mode 100644 index 00000000000..2531ded7c22 --- /dev/null +++ b/docs/work/kanban/kanban-epics-features-stories.md @@ -0,0 +1,63 @@ +--- +title: Kanban features & epics | VSTS +description: Quickly define and view the status of child features, user stories, or product backlog items when working in the Kanban features or epic boards in Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 489C612D-983E-47D3-BD1A-F13C5DCD74E2 +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +ms.topic: get-started-article +--- + + +# Kanban board features and epics + + +<b>VSTS | TFS 2017 | TFS 2015</b> + + +If you use Kanban to track progress on your backlog, you can also use Kanban boards to track epics and features. + +And, just as with [child task checklists for backlog items](add-task-checklists.md), you can quickly define and track the progress of child items for your features or epics. Here we see several stories defined for features, both in progress and those completed. + +In this topic, you'll learn: +> [!div class="checklist"] +> * How to add epics and features using your portfolio backlogs +> * Keyboard shortcuts for working with the Kanban board + + +<img src="_img/features-with-stories.png" alt="Web portal, Features Kanban board with several user stories defined" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +><b>Feature availability: </b>Child checklists for feature and epic Kanban boards are supported from VSTS and TFS 2017. + +## Add epics or features + +Add new items to a feature or epic through the item's ![actions icon](../_img/icons/actions-icon.png) Action menu. For descriptions of fields used to support features and epics, see [Define features and epics](../backlogs/define-features-epics.md). + +<img src="_img/features-add-story.png" alt="Web portal, Feature Kanban board, Open the context menu of a feature to add a story" style="border: 2px solid #C3C3C3;" /> + + +If you have a number of items to add, simply keep typing your task titles and click Enter. If you have details you want to add about to a work item, hover over the item and press Enter. + + +## Related notes + +If you're new to working with the Kanban board, see [Kanban basics](kanban-basics.md) + +For additional guidance on working with a checklist on a Kanban board, see [Add task checklists](add-task-checklists.md). You can perform the same operations for the features and epics Kanban boards as you do with the Kanban board for the product backlog. This includes: + +- Mark an item as done +- Reorder and reparent work items +- Assign work items to sprints + +To customize the columns, swimlanes, or cards for each Kanban board, make sure you first select the board and then click the gear icon to open the Settings dialog. See these topics for details: + +* [Add columns](add-columns.md) +* [Add swimlanes, expedite work](expedite-work.md) +* [Customize cards](../customize/customize-cards.md) + + +### REST API resources +To programmatically create work items, see the [Work API reference](https://www.visualstudio.com/en-us/integrate/api/wit/batch). diff --git a/docs/work/kanban/kanban-overview.md b/docs/work/kanban/kanban-overview.md new file mode 100644 index 00000000000..e2e2cad5540 --- /dev/null +++ b/docs/work/kanban/kanban-overview.md @@ -0,0 +1,48 @@ +--- +title: About Kanban and Agile project management | VSTS & TFS +description: Use the web portal to implement your Kanban process, plan and track work, and monitor progress and trends +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/15/2017 +--- + +# About Kanban and Agile project management + +<b>VSTS | TFS 2017 | TFS 2015 | TFS 2013</b> + +Your Kanban board provides you with a visual interactive space for you and your team to plan and show progress. With it, your team can track the critical information they need by seeing which work items are in progress, where the bottlenecks are, who work is assigned to, and more. + +Each card on the board corresponds to a user story or work item the team is tracking. + +<img src="_img/kanban-basics-intro.png" alt="Kanban board, Agile template" style="border: 2px solid #C3C3C3;" /> + +Your Kanban board is fully customizable to support your team's workflow. + +The main steps you'll typically want to follow are outlined below. + +[![Configure Kanban board](../_img/gs-planning-configure-kanban.png)](kanban-basics.md)[![Update the Kanban board](../_img/gs-planning-track-kanban.png)](kanban-basics.md)[![Monitor progress](../_img/gs-planning-monitor-kanban.png)](../../report/guidance/cumulative-flow.md) + +Once you've configured your Kanban board, you can add work items directly to the board. You then update the status of work by dragging a card to another column on the Kanban board. You can even change the order of items as you move a card to a new column. + +![Reorder cards while changing columns](https://i3-vso.sec.s-msft.com/dynimg/IC822185.gif) + + +## Try this next + +Take these tools for a test run by [creating an account on VSTS for free](../../accounts/create-account-msa-or-work-student.md). From there, you're ready to add items to your Kanban board and customize it. + +> [!div class="nextstepaction"] +> [Kanban quickstart](kanban-quickstart.md) + + + + + + + + + \ No newline at end of file diff --git a/docs/work/kanban/kanban-quickstart.md b/docs/work/kanban/kanban-quickstart.md new file mode 100644 index 00000000000..ee8580944e4 --- /dev/null +++ b/docs/work/kanban/kanban-quickstart.md @@ -0,0 +1,131 @@ +--- +title: Kanban quickstart | VSTS & TFS +description: Plan and track your work using the Kanban board in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.topic: get-started-article +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 4942A638-9888-461E-969D-0BB9B1FE1736 +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +--- + +# Get started using your Kanban board + +<b>Team Services | TFS 2017</b> + +Your Kanban board turns your backlog into an interactive signboard, providing a visual flow of work. As work progresses from idea to completion, you update the items on the board. Each column represents a work stage, and each card represents a backlog item, user story, or bug at that stage of work. + +User stories and bugs correspond to types of work items. You use [work items](../backlogs/add-work-items.md) to share information, assign work to team members, update status, track dependencies, and more. + +## Open your Kanban board from the web portal + +You access your Kanban board from the from the **Work** hub, **Backlogs** page. You then click **Board**. If you don't have a team project yet, create one in [VSTS](../../accounts/set-up-vs.md) or set one up in an [on-premises TFS](../../accounts/create-team-project.md). + +<img src="../backlogs/_img/cyb-open-backlog-tfs-2017.png" alt="Web portal, choose Work hub, Backlogs" style="border: 2px solid #C3C3C3;" /> + +The URL follows this pattern: +- **VSTS**: ```https://<account-name>.visualstudio.com/DefaultCollection/<project name>/_backlogs``` +- **On-premises TFS**: ```http://serverName:8080/tfs/DefaultCollection/projectName/_backlogs``` + +If you don't see the team or team project you want, click the ![VSTS icon](../_img/icons/project-icon.png) VSTS icon to [browse all team projects and teams](../../connect/account-home-pages.md). + +To contribute to the Kanban board, you must be a member of the Contributors group. To configure the Kanban board, you must be [added as a team administrator](../scale/add-team-administrator.md) or be a member of the Project Administrators group. If you're the account owner or creator of the team project, then you'll have these permissions. + +If you don't have access to the team project, ask the account owner or project administrator to add you. + + +<!--- +### TFS 2015, TFS 2013 + +<img src="../backlogs/_img/cyb-open-backlog-tfs-2015.png" alt="Open the backlog" style="border: 2px solid #C3C3C3;" /> + +The URL follows this pattern: +```http://serverName:8080/tfs/DefaultCollection/projectName/_backlogs``` + +If you don't see the team or team project you want, open the team project/team drop-down menu and select the team project/team that you've recently visited. If you don't see the team or team project you want, choose **Browse all** to browse all team projects and teams. + +<img src="../_shared/_img/switch-team-project-2.png" alt="Choose another team from the team project menu" style="border: 2px solid #C3C3C3;" /> + +To view your Kanban board, click the **Board** link from the **Work>Backlogs** page. + +<img src="_img/kanban-basics-intro.png" alt="Kanban board, Agile template" style="border: 2px solid #C3C3C3;" /> +--> + + +<a id="add-work-items"> </a> +## Add work items + +To add a work item, simply click the ![plus icon](../_img/icons/add_icon.png) and enter a title for the item. + +<img src="_img/kanban-qs-add-new-item.png" alt="Kanban board, Agile template, add a work item" style="border: 2px solid #C3C3C3;" /> + +<a id="update-status"> </a> +## Update the status of work items via drag-and-drop + +<meta name="description" content="Kanban tools track progress" /> + +As work completes in one stage, update the status of an item by dragging and dropping it to a downstream stage. + +<img src="_img/ALM_CC_MoveCard.png" alt="Kanban board, Agile template, update status of work item" style="border: 2px solid #C3C3C3;" /> + +## Update fields from the card + +Also, you can quickly update a field or reassign ownership directly from the board. + +![Kanban, assign items](_img/ALM_CC_UpdateFieldOnCard.png) + +If the field you want to update isn't showing, then [customize the card to show it](../customize/customize-cards.md). + +## Invite others to work on your Kanban board + +All members of a team project will be able to view and contribute to your Kanban board. To invite users to start contributing, email them the URL of your Kanban board. + +To add users to your team project, see these topics: +- **VSTS**: [Add and manage users](../../accounts/add-account-users-assign-access-levels.md) +- **On-premises TFS**: [Add users to a team project](../../accounts/add-users.md) + + +## Try this next + +To get the full power of the Kanban board working for you, you'll want to configure it to map the flow of work and set WIP limits for your team. + +> [!div class="nextstepaction"] +> [Kanban basics](kanban-basics.md) + + +If you're new to VSTS or TFS and want to understand what you can customize, see [Customize your work tracking experience](../customize/customize-work.md). + +> [!NOTE] +> Your Kanban board is one of two types of boards available to you. For an overview of the features supported on each backlog and board, see [Backlogs, boards, and plans](../backlogs-boards-plans.md). To switch to the [product backlog](../backlogs/create-your-backlog.md), click **Backlog**. And, to switch to the [Task board](../scrum/task-board.md), click on the current iteration or other sprint of interest. If no sprints appear, see [Schedule sprints](../scrum/define-sprints.md). + +<!--- +Here are a few things you can do. See at a glance the estimated size of work for each item which displays at the bottom right of each card. Add items to your backlog in the first column. When priorities change, move items up and down within a column. And, as work completes in one stage, update the status of an item by dragging and dropping it to a downstream stage. + +Each team can manage their backlog and customize their Kanban board. [Add teams](../scale/multiple-teams.md) when you assign specific feature areas to different teams for development. Each team can then manage their backlog and focus on how they will develop their deliverables. + +Here are some useful tips when working with the Kanban board: +- To quickly assign items to a team member, add the Assign To field to display on the cards (see [Customize cards](../customize/customize-cards.md)) +- Customize cards to show the fields you most care about +- Add a swimlane to track high-priority work or track work which falls into different service level agreements (see [Swimlanes](expedite-work.md)) +- Highlight specific work items by color coding cards based on a field value or tag (see [Customize cards](../customize/customize-cards.md)) +- If you use Scrumban, drag-and-drop cards onto a sprint to quickly assign them to a sprint. + + + + +## Related notes + +>[!NOTE] +><b>Feature availability: </b> You can [reorder items within a column](#reorder-cards) from VSTS and the web portal for TFS 2015.1 and later versions.   + +Updating your Kanban board as work progresses helps keep you and your team in sync. Also, you'll be able to see and share the value stream your team is delivering to customers. + +--> + + + + + + + diff --git a/docs/work/kanban/split-columns.md b/docs/work/kanban/split-columns.md new file mode 100644 index 00000000000..bc86244f30f --- /dev/null +++ b/docs/work/kanban/split-columns.md @@ -0,0 +1,88 @@ +--- +title: Split columns on your Kanban board for VSTS & TFS +description: Implement Kanban pull model by dividing each column into Doing and Done when working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: BD18A2A1-56C4-40F8-983C-012A407AC7BB +ms.manager: douge +ms.author: kaelli +ms.date: 04/03/2017 +--- + +# Split columns + +<b>VSTS | TFS 2017 | TFS 2015 </b> + +You use your Kanban board to visualize the flow of work, and monitor how items are or aren't progressing. Because each column corresponds to a stage of work, you can quickly see the number of items in progress at any each stage. + +However, a lag often exists between when work gets moved into a column and when work actually starts. To counter that lag and reveal the actual state of work in progress, you can turn on split columns. + +When split, each column contains two sub-columns, Doing and Done. + + +![Kanban with split columns](_img/kanban-board-split-columns-example-chart.png) + +Split columns lets your team to implement a pull model. Without split columns, teams push work forward, to signal that they've completed their stage of work. However, pushing it to the next stage doesn't necessarily mean that a team member immediately starts work on that item. + +By contrast, with split columns, your team knows exactly how many items sit idle, waiting for work to begin. You now have greater visibility into the quantity of items that sit idle at each stage throughout your workflow process. + +##Push items into Done, pull items into Doing + +With split columns turned on, you update status of items on the Kanban board in the same way you have before. However, now when you've completed work on an item, you move it into Done, instead of a downstream column. When the next team member becomes free to work on the next high priority item, she pulls it into Doing and reassigns it to herself. + +For example, as a team member completes his coding task, he moves the item into Done under the Develop column. When the tester is ready to test the item, she pulls it into Doing under the Test column. + +![Kanban board showing split column](_img/kanban-board-split-columns-moving-doing-to-done.png) + + +<p>If you're new to Kanban, review [Kanban basics](kanban-basics.md) to get an overview of how to access your board and implement Kanban.</p> + + +##Identify bottlenecks, drive toward a perfect flow scenario +How can you use split columns to improve workflow? + +Split columns provides you even greater insight into how many items sit idle in a Done column. Your team can readily see when items pile up, which signal a potential bottleneck. + +![Kanban board, split columns showing stacked items](_img/kanban-board-identify-bottlenecks.png) + +By reviewing the frequency of pile ups and where they occur, your team can adjust their processes to eliminate the bottlenecks. Workflow processes that incur no or very few bottlenecks correspond to perfect flows. No item sits in a queue for any substantial period of time. + + +##Choose which columns you want to split +Now that you understand how your team can use split columns, here's how to turn them on. + +1. From your Kanban board, click ![settings icon](../_img/icons/team-settings-gear-icon.png) and as needed, click Columns. + + <img src="../customize/_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + + Go to [Kanban basics](kanban-basics.md) to learn how to access your Kanban board. And, if you aren't a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can customize columns. + + You'll see different column titles and choices based on the following: + + - You connect to VSTS or an on-premises TFS + - The [Process](../guidance/choose-process.md) you used to create your team project + - Whether your team has chosen to [treat bugs like requirements or like tasks](../customize/show-bugs-on-backlog.md) + +2. Select each column that you want to split. Before you split columns, you'll want to have [mapped each stage of your team's process to a Kanban column](add-columns.md). + + **VSTS:** Click the column tab that you want to set. + + ![Kanban board, Customize columns, split columns, Agile process](_img/vso-kanban-split-columns-settings-analyze-no-tags.png) + + <blockquote><b>Note:</b> When you connect to VSTS, you can can filter queries and create charts using the [Board Column Done field](../track/query-by-workflow-changes.md#kanban_query_fields).</blockquote> + + **On-premises TFS options:** + + ![Customize Kanban board with split columns](_img/kanban-board-configure-split-columns.png) + + Only split columns where clear hand-offs exist and you want teams to pull the item into the next stage. + +##Related Kanban notes +For more ways to implement Kanban and customize your board: + +* [Add columns](add-columns.md) +* [Work in Progress limits ](wip-limits.md) +* [Add swimlanes, expedite work](expedite-work.md) +* [Definition of Done](definition-of-done.md) +* [Customize cards](../customize/customize-cards.md) + diff --git a/docs/work/kanban/toc.yml b/docs/work/kanban/toc.yml new file mode 100644 index 00000000000..b7bd842c22a --- /dev/null +++ b/docs/work/kanban/toc.yml @@ -0,0 +1,72 @@ +- name: Kanban + href: index.md +- name: Overview + items: + - name: About Kanban and Agile project management + href: kanban-overview.md + - name: "Backlogs, boards, & plans" + href: ../backlogs-boards-plans.md?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json +- name: Quickstarts + items: + - name: Kanban + href: kanban-quickstart.md +- name: Tutorials + items: + - name: Kanban basics + href: kanban-basics.md + - name: Add task checklists + href: add-task-checklists.md + - name: "Add, run, & update inline tests" + href: add-run-update-tests.md + - name: "Define features & epics" + href: kanban-epics-features-stories.md +- name: Concepts + items: + - name: Kanban best practices + href: best-practices-kanban.md + - name: Kanban board controls + href: kanban-board-controls.md + - name: "Workflow states & state categories" + href: ../concepts/workflow-and-state-categories.md?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json + - name: About teams and Agile tools + href: ../about-teams-and-settings.md?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json +- name: How-to guides + items: + - name: Filter your Kanban board + href: filter-kanban-board.md + - name: Add or edit columns + href: add-columns.md + - name: Customize cards + href: ../customize/customize-cards.md?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json + - name: WIP limits + href: wip-limits.md + - name: Expedite work + href: expedite-work.md + - name: Split columns + href: split-columns.md + - name: Definition of done + href: definition-of-done.md + - name: Reorder cards + href: ../customize/reorder-cards.md?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json + - name: "Manage permissions & access" + href: ../how-to/set-permissions-access-work-tracking.md?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json +- name: Reference + items: + - name: "Permissions & access for work tracking" + href: ../permissions-access-work-tracking.md?toc=/vsts/work/kanban/toc.json&bc=/vsts/work/kanban/breadcrumb/toc.json +- name: Resources + items: + - name: Backlogs + href: ../backlogs/index.md + - name: Scrum + href: ../scrum/index.md + - name: Queries + href: ../track/index.md + - name: Customization + href: ../customize/index.md + - name: "Scale & Configure Teams" + href: ../../teams/index.md + - name: "What is Agile?" + href: https://www.visualstudio.com/learn/what-is-agile/ + - name: "What is Agile development?" + href: https://www.visualstudio.com/learn/what-is-agile-development/ \ No newline at end of file diff --git a/docs/work/kanban/wip-limits.md b/docs/work/kanban/wip-limits.md new file mode 100644 index 00000000000..8666f2d1956 --- /dev/null +++ b/docs/work/kanban/wip-limits.md @@ -0,0 +1,154 @@ +--- +title: Configure WIP limits for Kanban board in VSTS & TFS +description: Set Work In Progress Limits on the Kanban board and use to improve your Kanban process - Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: d18351c1-e9e1-4c16-869d-e15ca478c748 +ms.manager: douge +ms.author: kaelli +ms.date: 04/03/2017 +--- + + +# Work in Progress limits + +<b>VSTS | TFS 2017 | TFS 2015 | TFS 2013 </b> + +An essential Kanban practice─Work in Progress limits, aka “WIP limits”─constrains the amount of work your team undertakes at each work stage. It's designed to focus your team on completing items before starting new work. While counter-intuitive at first, many teams find WIP limits helps them increase their productivity and improve their software quality. + +You define WIP limits for each work stage, corresponding to each intermediate column. The limit sets a soft constraint on the number of items allowed within the column. Nothing actually prevents you from moving more items into the column and exceeding the limit. Your Kanban board shows the count of items at each stage next to each limit. + +<img src="_img/WIP_1.png" alt="Kanban board columns with WIP limits" style="border: 2px solid #C3C3C3;" /> + +While [setting WIP limits](#Set) is simple, adhering to the limits takes a team commitment. Successful adoption of WIP limits involves a culture change. It moves teams from a focus on individual productivity to one of team productivity. + + +<a id="Initial WIP" /> + +##Determine initial WIP limits + +To get started, have your team determine the initial WIP limits to set and how they'll use and monitor them. Beyond that, few rules apply to what numbers to set as they can vary based on several factors. Here are two guidelines to help you determine what limits to set: + +* Set limits based on current works in progress. Count the items present in your existing Kanban columns. + +* Set limits that don't exceed 2 or 3 items per team member that works within a stage. For example, if you have three team members and each team member can work on no more than two tasks at a time, the resulting WIP limit is 6 (= 3 developers X 2 tasks/developer). + +Starting low may help your team discover bottlenecks more quickly and identify process issues to address. + +After you've defined an initial set of WIP limits, you'll likely want to fine tune them as your project progresses. + +If you're new to Kanban, review [Kanban basics](kanban-basics.md) to get an overview of how to access your board and implement Kanban. + + +<a id="Keep within WIP" /> + +##Keep within WIP limits + +After you've set your WIP limits, you'll want to track how well your team keeps within the limits. + +Respecting WIP limits means teams don't pull items into a column if doing so causes the number of items in the column to exceed the column limit. When they do, your Kanban board provides immediate feedback. This feedback should act as a signal to the team to focus immediately on activities to reduce the number of items in the column. + +<img src="_img/WIP_2.png" alt="Kanban board showing a column over the WIP limit" style="border: 2px solid #C3C3C3;" /> + +Although simple in theory, keeping within WIP limits can force individuals, teams, and organizations out of their comfort zone. Team members who like to multitask might feel unnecessarily constrained. Others might find themselves without work as they wait for work to complete at an upstream stage. + +To gain the advantages of constraining work-in-progress, have your team meet frequently to discuss the process changes taking place. As a starting point, consider hosting discussions around some of the [challenges and solutions to support successful implementation of WIP limits](best-practices-kanban.md#practices) provided below. + + +<a id="Keep within WIP" /> + +##Identify bottlenecks + +To optimize the flow of value, you naturally want to identify and eliminate bottlenecks. Bottlenecks indicate waste exists in the overall workflow process. + +By monitoring your Kanban board over time, you can learn where bottlenecks occur. When several items sit in a column unworked for several days, a bottleneck has occurred. Bottlenecks typically occur when WIP limits are too high. On the other hand, no bottlenecks could indicate that WIP limits are too low. + +The free eBook, [Kanban and Scrum - making the most of both](http://www.infoq.com/minibooks/kanban-scrum-minibook), provides this guidance: + +*Too low WIP limit => idle people => bad productivity* + +*Too high WIP limit => idle tasks => bad lead time* + +Taking periodic snapshots of your Kanban board can visually catalog where work flows smoothly and where bottlenecks appear. + +![Snapshots](_img/WIP_3.png) + +Such snapshots can show your team: + +* How many items on average reside within a workflow stage/column + +* How many items are being worked versus team members who work within a workflow stage/column + +* How many and which items remained in a workflow stage/column for long periods of time + +* How many items did the team complete at the end of a one, two, or three week period? + + +<a id="Eliminate waste" /> + +##Eliminate waste + +Because bottlenecks signal waste in your workflow process, you'll want to identify the source of the waste. Kanban defines waste as anything not strictly needed to produce desired outcomes. + +Common wastes in software development include: + +* Unused code or features +* Defects that lead to re-work +* Delays or time spent waiting for something +* Handoffs from one person, team, or business process to another +* Insufficient requirements +* Slow or poor communication + +Eliminating waste calls for team discussions to identify causes and solutions acceptable to the team. In addition to addressing the [challenges and solutions posed by WIP limits](best-practices-kanban.md#practices), the team may decide to adjust their workflow process or WIP limits. + + +<a id="Set" /> + +##Set WIP limits + +With an understanding of how you'll use WIT limits, here's how you set them. +1. From your Kanban board, click ![settings icon](../_img/icons/team-settings-gear-icon.png) and as needed, click Columns. + + <img src="../customize/_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /> + + If you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can customize columns. + + You'll see different column titles and choices based on the following: + + - You connect to VSTS or an on-premises TFS + - The [Process](../guidance/choose-process.md) you used to create your team project + - Whether your team has chosen to [treat bugs like requirements or like tasks](../customize/show-bugs-on-backlog.md) + + **VSTS and TFS 2015.1 and later versions** +2. Click a column tab to set the WIP limit for that column. + + <img src="_img/wip-columns-settings.png" alt="Kanban board, Customize columns, default columns, Agile process, set WIP limits" style="border: 2px solid #C3C3C3;" /> + + Go to [Kanban basics](kanban-basics.md) for information about accessing your Kanban board. And, if you're not a team admin, [get added as one](../scale/add-team-administrator.md). Only team and project admins can customize columns. + + **TFS 2015** + Set the WIP limits for each intermediate column. + + ![Customize WIP limits](_img/WIP_5.png) + +If you haven't yet [mapped your team's work flow to Kanban columns](add-columns.md), do that first. + + +<a id="Related notes" /> + +## Related notes + +Here are some additional ways your team can implement Kanban practices and customize the board: + +* [Split columns](split-columns.md) +* [Expedite work](expedite-work.md) +* [Definition of Done](definition-of-done.md) +* [Customize cards](../customize/customize-cards.md) +* [Show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md) + + +<!--- +>[!NOTE] +><b>Feature availability: </b>If you connect to VSTS, you can [add and configure the Cumulative Flow Diagram (CFD) widget to a team dashboard](../../report/guidance/cumulative-flow.md). + +--> diff --git a/docs/work/office/_img/IC354953.png b/docs/work/office/_img/IC354953.png new file mode 100644 index 00000000000..ed773e52927 Binary files /dev/null and b/docs/work/office/_img/IC354953.png differ diff --git a/docs/work/office/_img/IC652012.png b/docs/work/office/_img/IC652012.png new file mode 100644 index 00000000000..6c065831bb8 Binary files /dev/null and b/docs/work/office/_img/IC652012.png differ diff --git a/docs/work/office/_img/IC652013.png b/docs/work/office/_img/IC652013.png new file mode 100644 index 00000000000..5014a012fe1 Binary files /dev/null and b/docs/work/office/_img/IC652013.png differ diff --git a/docs/work/office/_img/IC652014.png b/docs/work/office/_img/IC652014.png new file mode 100644 index 00000000000..16f3adc7070 Binary files /dev/null and b/docs/work/office/_img/IC652014.png differ diff --git a/docs/work/office/_img/IC652016.png b/docs/work/office/_img/IC652016.png new file mode 100644 index 00000000000..45110d0936a Binary files /dev/null and b/docs/work/office/_img/IC652016.png differ diff --git a/docs/work/office/_img/IC652017.png b/docs/work/office/_img/IC652017.png new file mode 100644 index 00000000000..5fd3c2cf3e5 Binary files /dev/null and b/docs/work/office/_img/IC652017.png differ diff --git a/docs/work/office/_img/IC652018.png b/docs/work/office/_img/IC652018.png new file mode 100644 index 00000000000..9e909eb17b7 Binary files /dev/null and b/docs/work/office/_img/IC652018.png differ diff --git a/docs/work/office/_img/IC652019.png b/docs/work/office/_img/IC652019.png new file mode 100644 index 00000000000..1548be557c3 Binary files /dev/null and b/docs/work/office/_img/IC652019.png differ diff --git a/docs/work/office/_img/IC652020.png b/docs/work/office/_img/IC652020.png new file mode 100644 index 00000000000..7fd29decfdc Binary files /dev/null and b/docs/work/office/_img/IC652020.png differ diff --git a/docs/work/office/_img/IC652022.png b/docs/work/office/_img/IC652022.png new file mode 100644 index 00000000000..bac25ba28b8 Binary files /dev/null and b/docs/work/office/_img/IC652022.png differ diff --git a/docs/work/office/_img/IC652597.png b/docs/work/office/_img/IC652597.png new file mode 100644 index 00000000000..2306ec6eb99 Binary files /dev/null and b/docs/work/office/_img/IC652597.png differ diff --git a/docs/work/office/_img/IC652599.png b/docs/work/office/_img/IC652599.png new file mode 100644 index 00000000000..97c96561f2b Binary files /dev/null and b/docs/work/office/_img/IC652599.png differ diff --git a/docs/work/office/_img/IC654069.png b/docs/work/office/_img/IC654069.png new file mode 100644 index 00000000000..cf884bb122e Binary files /dev/null and b/docs/work/office/_img/IC654069.png differ diff --git a/docs/work/office/_img/IC657080.png b/docs/work/office/_img/IC657080.png new file mode 100644 index 00000000000..4530e807175 Binary files /dev/null and b/docs/work/office/_img/IC657080.png differ diff --git a/docs/work/office/_img/IC658167.png b/docs/work/office/_img/IC658167.png new file mode 100644 index 00000000000..81223ef0e14 Binary files /dev/null and b/docs/work/office/_img/IC658167.png differ diff --git a/docs/work/office/_img/IC680074.png b/docs/work/office/_img/IC680074.png new file mode 100644 index 00000000000..abdaae54a8a Binary files /dev/null and b/docs/work/office/_img/IC680074.png differ diff --git a/docs/work/office/_img/alm_prj_chooseteamproject.png b/docs/work/office/_img/alm_prj_chooseteamproject.png new file mode 100644 index 00000000000..97c17bcc1ac Binary files /dev/null and b/docs/work/office/_img/alm_prj_chooseteamproject.png differ diff --git a/docs/work/office/_img/alm_prj_viewcolumnmappings.png b/docs/work/office/_img/alm_prj_viewcolumnmappings.png new file mode 100644 index 00000000000..1e2c703b741 Binary files /dev/null and b/docs/work/office/_img/alm_prj_viewcolumnmappings.png differ diff --git a/docs/work/office/_img/alm_rup_createquery.png b/docs/work/office/_img/alm_rup_createquery.png new file mode 100644 index 00000000000..4352ef3ebfe Binary files /dev/null and b/docs/work/office/_img/alm_rup_createquery.png differ diff --git a/docs/work/office/_img/alm_rup_publish.png b/docs/work/office/_img/alm_rup_publish.png new file mode 100644 index 00000000000..a6518558a66 Binary files /dev/null and b/docs/work/office/_img/alm_rup_publish.png differ diff --git a/docs/work/office/_img/alm_rup_roundtriprollup.png b/docs/work/office/_img/alm_rup_roundtriprollup.png new file mode 100644 index 00000000000..aa00dc3ac27 Binary files /dev/null and b/docs/work/office/_img/alm_rup_roundtriprollup.png differ diff --git a/docs/work/office/_img/alm_rup_scheduleoptions.png b/docs/work/office/_img/alm_rup_scheduleoptions.png new file mode 100644 index 00000000000..d544deff1fd Binary files /dev/null and b/docs/work/office/_img/alm_rup_scheduleoptions.png differ diff --git a/docs/work/office/_img/alm_rup_setbaseline_1.png b/docs/work/office/_img/alm_rup_setbaseline_1.png new file mode 100644 index 00000000000..d4bc5435af0 Binary files /dev/null and b/docs/work/office/_img/alm_rup_setbaseline_1.png differ diff --git a/docs/work/office/_img/alm_rup_setbaseline_2.png b/docs/work/office/_img/alm_rup_setbaseline_2.png new file mode 100644 index 00000000000..43243feea6b Binary files /dev/null and b/docs/work/office/_img/alm_rup_setbaseline_2.png differ diff --git a/docs/work/office/_img/alm_sb_shp_addtomyshapes.png b/docs/work/office/_img/alm_sb_shp_addtomyshapes.png new file mode 100644 index 00000000000..97b08a3965d Binary files /dev/null and b/docs/work/office/_img/alm_sb_shp_addtomyshapes.png differ diff --git a/docs/work/office/_img/alm_sb_shp_contribute.png b/docs/work/office/_img/alm_sb_shp_contribute.png new file mode 100644 index 00000000000..20a4d7c7dc8 Binary files /dev/null and b/docs/work/office/_img/alm_sb_shp_contribute.png differ diff --git a/docs/work/office/_img/alm_sb_shp_export.png b/docs/work/office/_img/alm_sb_shp_export.png new file mode 100644 index 00000000000..331b2fb4f7e Binary files /dev/null and b/docs/work/office/_img/alm_sb_shp_export.png differ diff --git a/docs/work/office/_img/alm_sb_shp_stellingcommon.png b/docs/work/office/_img/alm_sb_shp_stellingcommon.png new file mode 100644 index 00000000000..056ec0d4b28 Binary files /dev/null and b/docs/work/office/_img/alm_sb_shp_stellingcommon.png differ diff --git a/docs/work/office/_img/alm_sb_shp_upload.png b/docs/work/office/_img/alm_sb_shp_upload.png new file mode 100644 index 00000000000..e5acd733dcf Binary files /dev/null and b/docs/work/office/_img/alm_sb_shp_upload.png differ diff --git a/docs/work/office/_img/bulk-add-excel-assign-to-field.png b/docs/work/office/_img/bulk-add-excel-assign-to-field.png new file mode 100644 index 00000000000..f9733c92735 Binary files /dev/null and b/docs/work/office/_img/bulk-add-excel-assign-to-field.png differ diff --git a/docs/work/office/_img/bulk-add-excel-assign-user.png b/docs/work/office/_img/bulk-add-excel-assign-user.png new file mode 100644 index 00000000000..f6bbcdbc5d5 Binary files /dev/null and b/docs/work/office/_img/bulk-add-excel-assign-user.png differ diff --git a/docs/work/office/_img/bulk-add-excel-select-user-team-ribbon.png b/docs/work/office/_img/bulk-add-excel-select-user-team-ribbon.png new file mode 100644 index 00000000000..fb962f54b3c Binary files /dev/null and b/docs/work/office/_img/bulk-add-excel-select-user-team-ribbon.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-blank-list.png b/docs/work/office/_img/bulk-modify-excel-blank-list.png new file mode 100644 index 00000000000..6306655ad1f Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-blank-list.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-choose-columns-inline.png b/docs/work/office/_img/bulk-modify-excel-choose-columns-inline.png new file mode 100644 index 00000000000..be5e1e13adc Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-choose-columns-inline.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-connected-list-user-stories.png b/docs/work/office/_img/bulk-modify-excel-connected-list-user-stories.png new file mode 100644 index 00000000000..0b6034bd909 Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-connected-list-user-stories.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-connected-list.png b/docs/work/office/_img/bulk-modify-excel-connected-list.png new file mode 100644 index 00000000000..b90cf35ce39 Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-connected-list.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-convert-to-tree-composite.png b/docs/work/office/_img/bulk-modify-excel-convert-to-tree-composite.png new file mode 100644 index 00000000000..2217cef7a6b Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-convert-to-tree-composite.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-get-work-items-inline.png b/docs/work/office/_img/bulk-modify-excel-get-work-items-inline.png new file mode 100644 index 00000000000..1f202b727c4 Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-get-work-items-inline.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-indent-inline.png b/docs/work/office/_img/bulk-modify-excel-indent-inline.png new file mode 100644 index 00000000000..3840786d43c Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-indent-inline.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-new-input-list.png b/docs/work/office/_img/bulk-modify-excel-new-input-list.png new file mode 100644 index 00000000000..1bdab87b319 Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-new-input-list.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-notice-ids.png b/docs/work/office/_img/bulk-modify-excel-notice-ids.png new file mode 100644 index 00000000000..7ea0604f761 Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-notice-ids.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-open-web-access.png b/docs/work/office/_img/bulk-modify-excel-open-web-access.png new file mode 100644 index 00000000000..45644984dbc Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-open-web-access.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-outdent-inline.png b/docs/work/office/_img/bulk-modify-excel-outdent-inline.png new file mode 100644 index 00000000000..72b11e53ccd Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-outdent-inline.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-pointer-icon.png b/docs/work/office/_img/bulk-modify-excel-pointer-icon.png new file mode 100644 index 00000000000..27bd6651ae5 Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-pointer-icon.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-publish.png b/docs/work/office/_img/bulk-modify-excel-publish.png new file mode 100644 index 00000000000..39ef42630d6 Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-publish.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-published-tree-list.png b/docs/work/office/_img/bulk-modify-excel-published-tree-list.png new file mode 100644 index 00000000000..4d32680fc65 Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-published-tree-list.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-refresh-inline.png b/docs/work/office/_img/bulk-modify-excel-refresh-inline.png new file mode 100644 index 00000000000..9e23c54a7ed Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-refresh-inline.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-tree-list-type.png b/docs/work/office/_img/bulk-modify-excel-tree-list-type.png new file mode 100644 index 00000000000..1d3aa061c18 Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-tree-list-type.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-tree-list-with-tasks.png b/docs/work/office/_img/bulk-modify-excel-tree-list-with-tasks.png new file mode 100644 index 00000000000..5aed49238dd Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-tree-list-with-tasks.png differ diff --git a/docs/work/office/_img/bulk-modify-excel-user-story-web-access.png b/docs/work/office/_img/bulk-modify-excel-user-story-web-access.png new file mode 100644 index 00000000000..9d7c61d4fab Binary files /dev/null and b/docs/work/office/_img/bulk-modify-excel-user-story-web-access.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC413649.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC413649.png new file mode 100644 index 00000000000..0d0ca6091e4 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC413649.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC413651.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC413651.png new file mode 100644 index 00000000000..6c78ca7f1b4 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC413651.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC652594.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC652594.png new file mode 100644 index 00000000000..8cef18ec2e6 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC652594.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC657981.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC657981.png new file mode 100644 index 00000000000..45d19e2570d Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC657981.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658167.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658167.png new file mode 100644 index 00000000000..81223ef0e14 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658167.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658311.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658311.png new file mode 100644 index 00000000000..97c17bcc1ac Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658311.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658312.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658312.png new file mode 100644 index 00000000000..1d51a680e81 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658312.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658313.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658313.png new file mode 100644 index 00000000000..210af3b07ea Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658313.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658911.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658911.png new file mode 100644 index 00000000000..f96e2a670e9 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658911.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658912.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658912.png new file mode 100644 index 00000000000..93f366569f4 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658912.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658913.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658913.png new file mode 100644 index 00000000000..f512c28677a Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658913.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658914.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658914.png new file mode 100644 index 00000000000..38a2a0448be Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658914.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658915.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658915.png new file mode 100644 index 00000000000..1e2c703b741 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC658915.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC660421.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC660421.png new file mode 100644 index 00000000000..fc504b3195d Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC660421.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC660422.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC660422.png new file mode 100644 index 00000000000..d90e0306682 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC660422.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC680074.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC680074.png new file mode 100644 index 00000000000..abdaae54a8a Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC680074.png differ diff --git a/docs/work/office/_img/create-your-backlog-tasks-using-project/IC697756.png b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC697756.png new file mode 100644 index 00000000000..2ed81c68ee8 Binary files /dev/null and b/docs/work/office/_img/create-your-backlog-tasks-using-project/IC697756.png differ diff --git a/docs/work/office/_img/excelseq_1.png b/docs/work/office/_img/excelseq_1.png new file mode 100644 index 00000000000..40d3199bbe0 Binary files /dev/null and b/docs/work/office/_img/excelseq_1.png differ diff --git a/docs/work/office/_img/icon_lockedlink.png b/docs/work/office/_img/icon_lockedlink.png new file mode 100644 index 00000000000..130f601c481 Binary files /dev/null and b/docs/work/office/_img/icon_lockedlink.png differ diff --git a/docs/work/office/_img/officeprojseq_1.png b/docs/work/office/_img/officeprojseq_1.png new file mode 100644 index 00000000000..07a159d675d Binary files /dev/null and b/docs/work/office/_img/officeprojseq_1.png differ diff --git a/docs/work/office/_img/ps-tfs-integ-delete-custom-fields-from-lookup-table.png b/docs/work/office/_img/ps-tfs-integ-delete-custom-fields-from-lookup-table.png new file mode 100644 index 00000000000..14c0daf2d24 Binary files /dev/null and b/docs/work/office/_img/ps-tfs-integ-delete-custom-fields-from-lookup-table.png differ diff --git a/docs/work/office/_img/ps-tfs-integ-enterprise-custom-fields.png b/docs/work/office/_img/ps-tfs-integ-enterprise-custom-fields.png new file mode 100644 index 00000000000..5e2625194f0 Binary files /dev/null and b/docs/work/office/_img/ps-tfs-integ-enterprise-custom-fields.png differ diff --git a/docs/work/office/_img/ps-tfs-integ-error-message.png b/docs/work/office/_img/ps-tfs-integ-error-message.png new file mode 100644 index 00000000000..a32c07cf0ea Binary files /dev/null and b/docs/work/office/_img/ps-tfs-integ-error-message.png differ diff --git a/docs/work/office/_img/tfs-office-issues-excel-open-com-add-ins.png b/docs/work/office/_img/tfs-office-issues-excel-open-com-add-ins.png new file mode 100644 index 00000000000..fe68df11190 Binary files /dev/null and b/docs/work/office/_img/tfs-office-issues-excel-open-com-add-ins.png differ diff --git a/docs/work/office/_img/tfs-office-issues-excel-team-ribbon.png b/docs/work/office/_img/tfs-office-issues-excel-team-ribbon.png new file mode 100644 index 00000000000..00aa3ba6c42 Binary files /dev/null and b/docs/work/office/_img/tfs-office-issues-excel-team-ribbon.png differ diff --git a/docs/work/office/_img/tfs-office-issues-excel-tfs-add-in-checkbox.png b/docs/work/office/_img/tfs-office-issues-excel-tfs-add-in-checkbox.png new file mode 100644 index 00000000000..e3a502d05ce Binary files /dev/null and b/docs/work/office/_img/tfs-office-issues-excel-tfs-add-in-checkbox.png differ diff --git a/docs/work/office/_img/tfs-office-issues-regedit-loadbehavior-key.png b/docs/work/office/_img/tfs-office-issues-regedit-loadbehavior-key.png new file mode 100644 index 00000000000..dbf8b288412 Binary files /dev/null and b/docs/work/office/_img/tfs-office-issues-regedit-loadbehavior-key.png differ diff --git a/docs/work/office/_img/tfs-office-issues-run-developer-cmd-prompt.png b/docs/work/office/_img/tfs-office-issues-run-developer-cmd-prompt.png new file mode 100644 index 00000000000..fc9654545c8 Binary files /dev/null and b/docs/work/office/_img/tfs-office-issues-run-developer-cmd-prompt.png differ diff --git a/docs/work/office/_img/tfs-office-issues-run-regedit.png b/docs/work/office/_img/tfs-office-issues-run-regedit.png new file mode 100644 index 00000000000..41ae2b63940 Binary files /dev/null and b/docs/work/office/_img/tfs-office-issues-run-regedit.png differ diff --git a/docs/work/office/_img/tfs-office-issues-tf86001.png b/docs/work/office/_img/tfs-office-issues-tf86001.png new file mode 100644 index 00000000000..aa2b0c11561 Binary files /dev/null and b/docs/work/office/_img/tfs-office-issues-tf86001.png differ diff --git a/docs/work/office/_img/tfs-ps-sync-go2group-logo.png b/docs/work/office/_img/tfs-ps-sync-go2group-logo.png new file mode 100644 index 00000000000..fa0fae806b0 Binary files /dev/null and b/docs/work/office/_img/tfs-ps-sync-go2group-logo.png differ diff --git a/docs/work/office/_img/tfs-ps-sync-tas-logo.png b/docs/work/office/_img/tfs-ps-sync-tas-logo.png new file mode 100644 index 00000000000..56e2f960e80 Binary files /dev/null and b/docs/work/office/_img/tfs-ps-sync-tas-logo.png differ diff --git a/docs/work/office/_img/tfs_oiproj_autoupdate_icon.gif b/docs/work/office/_img/tfs_oiproj_autoupdate_icon.gif new file mode 100644 index 00000000000..e9386cc5cc1 Binary files /dev/null and b/docs/work/office/_img/tfs_oiproj_autoupdate_icon.gif differ diff --git a/docs/work/office/_img/tfs_oiproj_autoupdate_icon.png b/docs/work/office/_img/tfs_oiproj_autoupdate_icon.png new file mode 100644 index 00000000000..6c78ca7f1b4 Binary files /dev/null and b/docs/work/office/_img/tfs_oiproj_autoupdate_icon.png differ diff --git a/docs/work/office/_img/tfs_oiproj_pintask_icon.gif b/docs/work/office/_img/tfs_oiproj_pintask_icon.gif new file mode 100644 index 00000000000..99759a447b6 Binary files /dev/null and b/docs/work/office/_img/tfs_oiproj_pintask_icon.gif differ diff --git a/docs/work/office/_img/tfs_oiproj_pintask_icon.png b/docs/work/office/_img/tfs_oiproj_pintask_icon.png new file mode 100644 index 00000000000..0d0ca6091e4 Binary files /dev/null and b/docs/work/office/_img/tfs_oiproj_pintask_icon.png differ diff --git a/docs/work/office/_img/tfs_oiproj_ribbon.png b/docs/work/office/_img/tfs_oiproj_ribbon.png new file mode 100644 index 00000000000..b478209fb59 Binary files /dev/null and b/docs/work/office/_img/tfs_oiproj_ribbon.png differ diff --git a/docs/work/office/_img/tfs_oiproj_ribbon_proicon.png b/docs/work/office/_img/tfs_oiproj_ribbon_proicon.png new file mode 100644 index 00000000000..41c427ffe9d Binary files /dev/null and b/docs/work/office/_img/tfs_oiproj_ribbon_proicon.png differ diff --git a/docs/work/office/_img/tfs_oiproj_taskmode_menu.png b/docs/work/office/_img/tfs_oiproj_taskmode_menu.png new file mode 100644 index 00000000000..91ecde18cb0 Binary files /dev/null and b/docs/work/office/_img/tfs_oiproj_taskmode_menu.png differ diff --git a/docs/work/office/_img/tivitie-blue2.png b/docs/work/office/_img/tivitie-blue2.png new file mode 100644 index 00000000000..2b224cb6b6a Binary files /dev/null and b/docs/work/office/_img/tivitie-blue2.png differ diff --git a/docs/work/office/add-share-storyboard-shapes.md b/docs/work/office/add-share-storyboard-shapes.md new file mode 100644 index 00000000000..b0b0ee12e49 --- /dev/null +++ b/docs/work/office/add-share-storyboard-shapes.md @@ -0,0 +1,72 @@ +--- +title: Add and share storyboard shapes | VSTS & TFS +description: Add and share storyboard shapes with members of your team - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: c8f3136e-a560-4ea5-83fd-602f89c74155 +ms.author: kaelli +ms.manager: douge +ms.date: 02/22/2017 +--- + +# Add and share storyboard shapes + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +Adding to your gallery of storyboard shapes can boost your ability to [storyboard your ideas using PowerPoint Storyboarding](storyboard-your-ideas-using-powerpoint.md). You can import storyboard shapes created by other members of your team. To share custom shapes that you've created, you can export them to a storyboard shapes file. + +>[!IMPORTANT] +>The Visual Studio Gallery for PowerPoint Storyboarding has been deprecated. You may find storyboard shapes from the links provided in this blog post, [Storyboard shapes extensions being deprecated from Visual Studio Marketplace](https://blogs.msdn.microsoft.com/visualstudioalm/2016/11/16/storyboard-shapes-extensions-being-deprecated-from-visual-studio-marketplace/). + +## Find storyboard shapes and import them + +0. If you're interfacing with TFS 2017 or VSTS, you must have [Office PowerPoint 2010 or later version installed](https://www.microsoftstore.com/store/msusa/en_US/pdp/productID.323024400). For version compatibility, see [Requirements and compatibility, Office](../../accounts/requirements.md#office). If you're interfacing with TFS 2013 or TFS 2015, you must have Office PowerPoint 2007 or later version installed. + +0. If you haven't installed Visual Studio, you'll need to [install Visual Studio Community or other version](https://www.visualstudio.com/downloads/) or [Team Foundation Server Office® Integration](https://go.microsoft.com/fwlink/?LinkId=832492&clcid=0x409) to install the Storyboarding add-in to PowerPoint. + +0. Open the [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/11/16/storyboard-shapes-extensions-being-deprecated-from-visual-studio-marketplace/) and click a link to download the corresponding storyboard shapes file. For example, download the [Windows 8 shapes and icons](https://visualstudiogallery.msdn.microsoft.com/7d745871-cf6a-47cd-a614-8453fa91f608/file/79318/1/Misc%20Windows%208%20storyboard.sbsx) + +0. Save the file to the Shapes folder (*Drive*:Program Files\Common Files\microsoft shared\Team Foundation Server\14.0\PowerPoint\Shapes). + +0. Close and reopen PowerPoint. + + > [!TIP] + > If you save the download file to a location other than the Shapes folder, you can import the file using **Import Shapes** from the Storyboarding tab. If you don't see the Storyboarding tab, you don't have the Team Foundation add-in for PowerPoint Storyboarding. See step 2. + +0. Start using the Misc Windows 8 shapes. + + ![Expand the Storytelling Common category of shapes](_img/alm_sb_shp_stellingcommon.png "ALM_SB_SHP_STellingCommon") + +## Share shapes that you create with your team + At any time, you can export custom storyboard shapes that you've created and share them with your team. You can create storyboard shapes with any combination of PowerPoint shapes, screenshots, inserted images, or storyboard shapes. + +1. Add each of your storyboard shapes to the **My Shapes** category and name it. If you don't see the Storyboarding tab, you don't have the Team Foundation add-in for PowerPoint Storyboarding. See step 2 in the previous procedure. + + ![Save a custom shape to MyShapes category](_img/alm_sb_shp_addtomyshapes.png "ALM_SB_SHP_AddToMyShapes") + + > [!TIP] + > To update the shape, highlight it, open the context menu, and then choose **Update My Shape**. + +2. Export your shapes to a storyboard shapes file (.sbsx) and share it with other team members who use PowerPoint Storyboarding. + + ![Export your custom shapes](_img/alm_sb_shp_export.png "ALM_SB_SHP_Export") + +<!--- +## You can share your shapes with the Visual Studio community, too + Sell or share your custom storyboard shapes through the Visual Studio gallery. + +1. Open the [Visual Studio Extensions Upload](http://visualstudiogallery.msdn.microsoft.com/site/upload) page. + + ![Agree to contribution terms and contribute](_img/alm_sb_shp_contribute.png "ALM_SB_SHP_Contribute") + +2. Specify the storyboard shapes extension type. + + ![Upload a storyboard shapes file](_img/alm_sb_shp_upload.png "ALM_SB_SHP_Upload") + +3. Complete the next two steps and add your contribution. + + In addition, you can author storyboard shapes with custom resize logic using the Storyboard Shapes Authoring Tool. To get this tool, download [Visual Studio Team Foundation Server Power Tools](http://go.microsoft.com/fwlink/?LinkId=248625). +--> +## Related notes +- [Storyboard your ideas using PowerPoint Storyboarding](storyboard-your-ideas-using-powerpoint.md). \ No newline at end of file diff --git a/docs/work/office/bulk-add-modify-work-items-excel.md b/docs/work/office/bulk-add-modify-work-items-excel.md new file mode 100644 index 00000000000..7ee28905e7a --- /dev/null +++ b/docs/work/office/bulk-add-modify-work-items-excel.md @@ -0,0 +1,311 @@ +--- +title: Bulk modify using Excel | VSTS & TFS +description: Use Excel to save you time to bulk add or modify several types of work items at once, such as backlog items, tasks, bugs, or issues +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 1399B4B1-72AE-4328-AAD8-3AAF0B808761 +ms.manager: douge +ms.author: kaelli +ms.date: 07/14/2017 +--- + +# Bulk add or modify work items with Excel + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +When you have a lot of work items to add or modify, using Excel can save you time. [Use a flat list](../track/using-queries.md#flat-list-query) to bulk add or modify several types of work items at once, such as backlog items, tasks, bugs, or issues. [Use a tree list](../track/using-queries.md#tree-query) to bulk add or modify work items and their parent-child links. + +You can also bulk add and modify work items using [Microsoft Project](create-your-backlog-tasks-using-project.md). + +In this topic you'll learn: + +> [!div class="checklist"] +> * Connect to a team project from Excel +> * Add or edit work items and publish your changes to TFS or Team Services +> * Refresh your Excel worksheet with the latest changes made to the work tracking data store +> * Select user accounts +> * Add hierachically linked backlog items and tasks +> * Work with different list types + + +>[!NOTE] +>You can't use Office Project 365 to connect to VSTS and TFS. + +<a id="add-work-items"> </a> +## Add work items + +1. If you don't have Office Excel 2007 or a more recent version, [install it](https://products.office.com/excel). For VSTS and TFS 2017, you'll need Project 2010 or a later version. + +2. If you haven't installed a version of [Visual Studio (2010 or later)](https://www.visualstudio.com/downloads/download-visual-studio-vs) or the [Team Foundation Server Standalone Office Integration 2015 (free)](https://www.visualstudio.com/downloads/#team-foundation-server-office-integration-2015-update-3-1), you'll need to install one of these versions to connect to a team project hosted on VSTS or an on-premises TFS. + + >[!NOTE] + >The only way to get the Team Foundation plug-in is by installing one of the latest editions of Visual Studio or the TFS Standalone Office Integration installer. TFS Office Integration 2015 supports connection to VSTS and TFS from Excel, Project, and the PowerPoint-based storyboarding tool. + +3. In Excel, start with a blank worksheet. If you don't see the **Team** ribbon (or the **Team** menu if you use Excel 2007), see step 2 or [TFS-Office integration issues](tfs-office-integration-issues.md). + + ![Create a list connection between Excel and the data store](_img/bulk-modify-excel-blank-list.png) + + >[!TIP] + >If the **Team** ribbon no longer appears, you might need to [re-enable it](https://msdn.microsoft.com/library/ms268871.aspx). + +4. Connect to your team project hosted in VSTS or an on-premises TFS where you want to add work items. If you can't connect, [get added as a team member](../scale/multiple-teams.md#add-team-members). + + ![ALM\_EXL\_Connect](_img/IC680074.png) + + If it is your first time connecting from Excel, you might have to add your VSTS account or on-premises TFS to the list of recognized servers. + + ![ALM\_EXL\_AddServer](_img/IC658167.png) + + ![Select input list](_img/bulk-modify-excel-new-input-list.png) + +5. Your worksheet is now bound to your team project as a flat list. What this means is that you can add work items to the team project from the worksheet or add work items to the worksheet from the team project. + + ![Empty flat list connected to a team project](_img/bulk-modify-excel-connected-list.png) + +6. Specify the titles of the work items you want to add and their work item type. + + ![Add work items to Excel](_img/bulk-modify-excel-connected-list-user-stories.png) + + Notice how the **State** and **Reason** fields automatically fill in with default values once your select the work item type. + +7. Publish your worksheet. + + ![Publish work items from Excel to the data store](_img/bulk-modify-excel-publish.png) + + Make sure your cursor is in a cell that contains data. Otherwise, the **Publish** button might appear disabled. + + Notice how IDs are now assigned to your work items. + + ![Published work item IDs show in Excel](_img/bulk-modify-excel-notice-ids.png) + +8. Also, note how you can open a work item in the web portal to add more information. + + ![Open a work item in the web portal from Excel](_img/bulk-modify-excel-open-web-access.png) + + ![Work item displayed in the web portal](_img/bulk-modify-excel-user-story-web-access.png) + +You can make changes to work items in Excel, Project, the web portal, or Visual Studio, or Team Explorer Everywhere. + +>[!TIP] +>**Follow these tips to keep your work in sync:** +>- When you first open a saved worksheet, use ![Refresh icon in Excel on Team ribbon](_img/bulk-modify-excel-refresh-inline.png) (**Refresh**) to download the latest data from the data store. +>- Enter data for additional fields by adding columns to the worksheet using ![Choose Column icon in Excel on Team ribbon](_img/bulk-modify-excel-choose-columns-inline.png) <strong>Choose Columns</strong>. +>- To avoid data conflicts, publish your additions and modifications often. +>- To prevent loss of data before you publish or refresh, save your workbook periodically. + + +<a id="select-user"></a> +## Select user accounts + +>[!NOTE] +><b>Feature availability: </b> To access the [Select User](#select-user) feature, you need to install [Visual Studio (at least VS 2015.1 or later version](https://www.visualstudio.com/downloads/) or [Team Foundation Server Office Integration 2015 Update 2 or later version](https://go.microsoft.com/fwlink/?LinkId=832491). You can download the free version of Visual Studio Community. Get this feature to avoid data validation errors by mispelling user names and when you must assign user names from a large group of user accounts. + +You can use the Select User feature to find user accounts and assign values to person named fields. Also, this feature provides access to the most recently used (MRU) values. If your team contains several hundreds or thousands of user accounts, you'll want to use this feature. + +1. If you haven't installed or updated to the latest version of [Visual Studio (at least VS 2015.1 or later version](https://www.visualstudio.com/downloads/), do that now. You need the latest update in order to access the Select User feature. + +2. Click a person-named field to activate the Select User feature in the team ribbon. + + ![Team ribbon, Select User](_img/bulk-add-excel-select-user-team-ribbon.png) + + A person-named field is any field whose ```syncnamechanges``` attribute has been set to [synchronize with Active Directory, Azure Active Directory, or a Workgroup](https://msdn.microsoft.com/library/aa337627.aspx). + +3. Begin typing the name of the user account and the Assign User dialog will automatically filter the results until you can select the account of interest. + + ![Assign User dialog](_img/bulk-add-excel-assign-user.png) + + Enter a letter to tab to the start of names beginning with that letter. Enter only user names as account aliases aren't recognized. + + You'll notice that as you select user names, Excel remembers your recent selections and you can select those user accounts directly from the field. + + ![Assigned to field, Drop-dowm menu shows most recently used values](_img/bulk-add-excel-assign-to-field.png) + +>[!TIP] +>Without the Select User feature active, you must enter user names exactly as they are in the database, or you'll receive data validation errors upon trying to publish. + +<a id="tree-list"></a> +## Add linked backlog items and tasks + +You can bulk add a nested list of work items, such as a work break down structure or a hierarchical set of user stories and customer experiences. For example, you can add a nested list of tasks, subtasks, and bugs, as shown in the following illustration, or linked tasks to product backlog items, as described in the following steps. + +Here's how a three-level nested tree of items appears in Excel: + +![Tree list of work items](_img/IC354953.png) + +1. Follow steps 1 through 6 from the previous procedure. + +2. Convert your flat list to a tree list by adding a tree level. + + ![Convert flat list to tree list](_img/bulk-modify-excel-convert-to-tree-composite.png) + + Notice how the list type is now labeled **Tree**, and an additional **Title 2** column has been inserted. + + ![Empty tree list connected to data store](_img/bulk-modify-excel-tree-list-type.png) + +3. Enter titles for backlog items under **Title 1** and for tasks, under **Title 2**. Also, select the corresponding work item type for each. Here we specify Task. + + ![Tree list of work items to publish](_img/bulk-modify-excel-tree-list-with-tasks.png) + +4. Just as before, publish your worksheet and notice how IDs are assigned to the new work items. + + ![Publish a tree list of work items](_img/bulk-modify-excel-published-tree-list.png) + + In the background, parent-child links are created for each task listed under a user story. + + +<blockquote style="font-size: 13px">**Useful tips when working with a tree list:** + +<ul> +<li><p style="font-size: 13px">The plug-in interprets the data in the <strong>Title</strong> columns to determine the pattern of links between work items. When you publish changes, any of the following conditions can result in an error, an invalid link, or a tree link to be created between incorrect work items:</p> +<ul> +<li><p style="font-size: 13px">A row between parent and child work items is blank.</p></li> +<li><p style="font-size: 13px">The Title of a work item is in the wrong column. Make sure you enter a title for each child work item.</p></li> +<li><p style="font-size: 13px">Within a row, multiple <strong>Title</strong> columns contain data. Enter text in only one of the title columns within each row.</p></li> +<li><p style="font-size: 13px">The list was sorted. Don't sort a tree list. Sorting a tree list can change the hierarchical link relationships. If you do sort a tree list, you can recover from this operation by immediately refreshing.</p></li> +</ul> +<p style="font-size: 13px">To resolve an error, see <a href="https://msdn.microsoft.com/library/dd293544">Resolve invalid links in an Excel tree list</a>.</p></li> +<li><p style="font-size: 13px">You can use <img src="_img/bulk-modify-excel-indent-inline.png" title="item in tree" alt="item in tree" /> or <img src="_img/bulk-modify-excel-outdent-inline.png" title="Outdent item in tree" alt="Outdent item in tree" /> to demote or promote a work item within the tree hierarchy. Verify that the column to the left or right of the parent work item's title is a <strong>Title</strong> column. The header at the top of the column should read <strong>Title</strong> <number>, if it does not, add a tree level.</p></li> +<li><p style="font-size: 13px">A parent-child linked work item can only have one parent. You can't add the same work item task to two backlog items. Instead, you need to define distinct work item tasks.</p></li> +<li><p style="font-size: 13px">If you receive error TF208104, changes you made to the fields are published, but all changes you made to the link hierarchy are not published. At least one of the link relationships defined for the work item is locked by another process, such as Project Server integration. For more information, see [Addressing Error TF208104: Hierarchical Link Relationship Is Locked](https://msdn.microsoft.com/library/dd293544#tf208104).</p></li> +<li><p style="font-size: 13px">When you move a work item, make sure that you select the entire table row.</p></li> +</ul> + +</blockquote>   + +## Work with different list types + +Select your list structure based on these guidelines. + +<table> +<thead> +<tr> +<th width="60%"><p>Task</p></th> +<th width="15%"><p>List structure</p></th> +<th width="15%"><p>List refresh</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>Create and publish many unrelated work items</p></td> +<td><p>Flat list</p></td> +<td><p>Input list</p></td> +</tr> +<tr> +<td><p>Perform bulk edits on many unrelated work items</p></td> +<td><p>Flat list</p></td> +<td><p>Query list or input list</p></td> +</tr> +<tr> +<td><p>Perform bulk edits on many work items and their dependent or related work items</p></td> +<td><p>Tree list</p></td> +<td><p>Query list</p></td> +</tr> +<tr> +<td><p>Perform top down planning and publish parent-child linked work items</p></td> +<td><p>Tree list</p></td> +<td><p>Input list</p></td> +</tr> +<tr> +<td><p>View and modify the hierarchy and parent-child link relationships of many work items</p></td> +<td><p>Tree list</p></td> +<td><p>Query list</p></td> +</tr> +<tr> +<td><p>Review reports based on a filtered set of work items that change over time</p></td> +<td><p>Flat or tree list</p></td> +<td><p>Query list</p></td> +</tr> +</tbody> +</table> + +### Enable the Tree commands + +If the Tree group commands are not available, your worksheet is configured as a flat list. You can convert the flat list to a tree list as described in step 2 in [Add backlog items and tasks and their parent-child links using a tree list](#tree-list). + +### Convert a tree to a flat list + +First, publish whatever changes you have made. Then, on the **Team** ribbon, choose **Configure**, **List**, and then choose **Refresh work items only**. This will flatten the tree structure and change the query list to an input list. + +### Remove a tree level + +Remove any content entered under the tree-level **Title** *number* column you want to remove—the highest numbered column—and, then **Refresh** your worksheet. + +>[!TIP] +>Always publish changes that you have made to work items before you remove a tree level. Removing a tree level requires a refresh, which overwrites data in the work item list. You will lose any data you have not published. + + +### Convert from an input list to a query + +On the **Team** ribbon, choose **Configure**, **List**, and then select the query you want to use. The worksheet will refresh with only those work items returned by the query. Also, if you select a tree query, then the list becomes a tree list. + +### Add existing work items to a list + +If you're working with a non-query input list, you can add work items by choosing ![Get work items icon](_img/bulk-modify-excel-get-work-items-inline.png) from the Team ribbon. If you're working from a query, then you need to [modify your query](../track/using-queries.md) to contain the work items you want. Then refresh your list. + + +## Related notes + +While the examples shown here represent connecting to an on-premises TFS, you can connect to VSTS and bulk add and modify work items. Once you've connected to the cloud server, you use the same procedures to work in Excel. + +If you're just getting started, review these topics for more information about work item tracking and using Excel: + +- [Bulk modify work items (web portal)](../backlogs/bulk-modify-work-items.md) +- [Basic Excel tasks](https://support.office.com/Article/Basic-tasks-in-Excel-2013-363600c5-55be-4d6e-82cf-b0a41e294054) + +To bulk edit links, you can use these clients: +- Use Excel to edit parent-child or hierarchical links. +- Use [Project](../office/create-your-backlog-tasks-using-project.md) to edit parent-child and predecessor-successor link relationships. +- Use the web portal, to [map backlog items to portfolio backlog items](../backlogs/organize-backlog.md) which creates parent-child links. +- Use either the web portal or Team Explorer, to modify parent-child links by [dragging items within a hierarchical backlog page](../backlogs/organize-backlog.md#reparent) or within a tree query. + +To bulk modify test cases with shared steps, use the [web portal Test grid view](../../manual-test/getting-started/create-test-cases.md). + +To resolve publishing errors, see one of these topics: + +- [Data conflicts](resolve-excel-data-conflicts-publish-refresh.md) +- [Data validation errors](resolve-excel-data-validation-errors.md) +- [Invalid links](resolve-excel-invalid-links-tree-list.md) + +### Delete work items +You can't delete work items from Excel. The only way to delete work items is from the web portal or the **witadmin** command line tool. For details, see [Move, change, or delete work items ](../backlogs/remove-delete-work-items.md). + +### Direct link query converts to flat list + +When you open a direct links query in Excel, the Team Foundation add-in converts the list to a flat list. While you can modify values for the fields and add work items, you can't view nor modify link relationships. + + +### Multiple worksheets + +Each worksheet in Excel can contain a different input list or query. However, all worksheets within the workbook must connect to the same team project within a project collection. + +To bulk add or modify work items in a different team project, open a new Excel workbook. + +### Use Excel cut and paste functions + +You can use many Excel features, such as cut, paste, automatic fill, format, sort (flat list only), filter, and add formulas. You can cut and paste rows to re-sequence items within a list and change link relationships among work items. + +To drag a work item, select the work item or contiguous set of work items that you want to move, open the context menu and choose **Select**, **Table Row**, point to the border of the selection, and—when the pointer becomes a move pointer ![Move Pointer](_img/bulk-modify-excel-pointer-icon.png)—drag the row to another location. + +> [!TIP] +> When you refresh the work item list, not all formats may be retained. For example, date formats are set by the server data store. Any changes you make to a date format field will be overwritten with the date format used by the server.    + + +### Web portal and Excel access + +While you can't open a query from the web portal, you can open the query from Excel. To use Excel, you must get the Team Foundation add-in, which installs when you install Visual Studio or Team Explorer. If you don't have one of these versions installed, [install it now](https://www.visualstudio.com/downloads/download-visual-studio-vs). You can install Visual Studio Community for free. + +Once you've installed Visual Studio, open Excel and look for the Team ribbon. + +### Disable the Team Foundation Add-in + +If you want to disable the add-in, see [Add or remove an add-in](https://support.office.com/en-sg/article/Add-or-remove-add-ins-0af570c4-5cf3-4fa9-9b88-403625a0b460). + +### Enable the Developer tab + +See [Show the Developer Tab on the Ribbon](https://msdn.microsoft.com/library/bb608625.aspx). + +### Excel for Mac + +Support for a Mac OS is not supported. You need to use Excel on the same computer where you have installed Visual Studio or Team Explorer in order to get the Team Foundation add-in. These applications require a Windows OS. + + diff --git a/docs/work/office/create-your-backlog-tasks-using-project.md b/docs/work/office/create-your-backlog-tasks-using-project.md new file mode 100644 index 00000000000..d9abcd26761 --- /dev/null +++ b/docs/work/office/create-your-backlog-tasks-using-project.md @@ -0,0 +1,186 @@ +--- +title: Create your backlog and tasks using Project | VSTS & TFS +description: Add items, plan, order, and estimate your backlog of deliverables - VSTS and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: be5cef4f-755f-4ffe-8dd7-876d1e02c330 +ms.manager: douge +ms.author: kaelli +ms.date: 07/21/2017 +--- + +# Create your backlog and tasks using Project + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +If Office Project is your preferred tool for tacking projects, you can use it to create your backlog, schedule tasks, assign resources, and track work that is also tracked in Team Services or Team Foundation Server (TFS). You can use Project while your development team uses the tools they prefer, all while sharing information transparently. + +Working in Project is similar to publishing and refreshing work items using [Office Excel](bulk-add-modify-work-items-excel.md), with a few differences as described [later in this topic](#Differences working in Project versus Excel). + +Use this topic to learn how to: + +> [!div class="checklist"] +> * Connect a Project plan to a team project +> * Add tasks to Project and publish them as work items to VSTS or TFS +> * Indent tasks to create parent-child links +> * Link tasks to create predecessor-successor links +> * View how Project columns map to work item fields + + +>[!NOTE] +>You can also manage projects using Project Professional and [Project Server synchronized with TFS](../tfs-ps-sync/synchronize-tfs-project-server.md) , but you can't use Project Professional to both publish and refresh to TFS and synchronize with TFS. + +## Add tasks and publish work items + +1. If you don't have Office Project 2007 or a more recent version, [install it](https://products.office.com/project). For VSTS and TFS 2017, you'll need Project 2010 or later version. + + >[!NOTE] + >You can't use Office Project 365 to connect to VSTS and TFS. + +2. If you haven't installed a version of [Visual Studio (2010 or later)](https://www.visualstudio.com/downloads/download-visual-studio-vs) or the [Team Foundation Server Standalone Office Integration 2015 (free)](https://www.visualstudio.com/downloads/#team-foundation-server-office-integration-2015-update-3-1), you'll need to install one of these versions to connect to a team project hosted on VSTS or an on-premises TFS. + + >[!NOTE] + >The only way to get the Team Foundation plug-in is by installing one of the latest editions of Visual Studio or the TFS Standalone Office Integration installer. TFS Office Integration 2015 supports connection to VSTS and TFS from Excel, Project, and the PowerPoint-based storyboarding tool.  + +3. In Project, start with a blank worksheet. If you don't see the **Team** ribbon (or the **Team** menu if you use Project 2007) see step 2 or [TFS-Office integration issues](tfs-office-integration-issues.md). + + >[!TIP] + >If you want to first import a list or tree of work items you've already defined, follow steps 3 and 4 under [Bulk add or modify work items with Excel, Add work items](bulk-add-modify-work-items-excel.md#add-work-items). In the New list dialog, select the **Query** that contains the work items you want to import. + + ![Connect to a team project from Microsoft Project](_img/create-your-backlog-tasks-using-project/IC658311.png) + + Another way to start is to open a backlog query in Team Explorer and from the context menu, choose **Open Query in Microsoft Project**. + + >**Tip:** If the **Team** ribbon no longer appears, you might need to [re-enable it](https://msdn.microsoft.com/library/vstudio/ms268871.aspx). + +4. Connect to TFS and the team project that you want to plan. If you can't connect, [get added as a team member](../scale/multiple-teams.md). + + ![ALM\_EXL\_Connect](_img/create-your-backlog-tasks-using-project/IC680074.png) + + If it's your first time connecting to TFS from Project, you might have to add the name of your TFS to the list of recognized servers. + + ![ALM\_EXL\_AddServer](_img/create-your-backlog-tasks-using-project/IC658167.png) + + Project is now bound to your team project. The Team Foundation Gantt view supports entry and display of several TFS fields. + + ![Project plan bound to a team project in TFS](_img/create-your-backlog-tasks-using-project/IC658312.png) + +5. Add task information and then publish the project. To add a work item, specify the **Title**, **Work Item Type**, **Publish and Refresh**, and any other required fields. Resize and move columns using standard [Project methods](http://office.microsoft.com/client/helppreview14.aspx?AssetId=HP010351693&lcid=1033&NS=WINPROJ&Version=14&tl=2&pid=CH010359308&CTT=4). + + >**Tip:** Set the **Publish and Refresh** field for a task to **Yes** if you want to have a work item created for it in TFS. For example, set user stories, backlog items, and tasks to be published and refreshed. However, any summary tasks that you create to group tasks or to assign milestones, set **Publish and Refresh** to **No**. + + ![Enter task data](_img/create-your-backlog-tasks-using-project/IC658911.png) + + Notice how IDs are now assigned to your work items. + + ![Published tasks become work items](_img/create-your-backlog-tasks-using-project/IC658912.png) + + Optionally, you can use ![Get work items icon](_img/create-your-backlog-tasks-using-project/IC657981.png), select a work item query, and add work items from TFS to your project plan. + +6. Assign resources to tasks. Or, leave that field blank for the development team to assign. + + ![Assign resources in project defined in TFS and AD](_img/create-your-backlog-tasks-using-project/IC658313.png) + + >**Tip:** Although Project supports allocation of more than one resource to a task, TFS does not. If a task requires more than one resource to complete, divide the task into subtasks and assign one resource to each subtask. Only assign a TFS team member as a resource to those tasks that you will publish. + > + >Specify resources by their display names from Active Directory Domain Services (AD DS). If you assign a resource by its alias or other name, you risk incurring validation errors. + +7. Save your project plan to retain scheduling and other data that TFS doesn't store. + +## Indent tasks to create parent-child links + +When you indent tasks and then publish your plan, you create parent-child links between work items. Tasks will show up on the [task board](../scrum/task-board.md) when they are assigned to the current sprint. + +![Link tasks to create parent-child links](_img/create-your-backlog-tasks-using-project/IC658913.png) + +To see the parent-child links that you just created, open **Links and Attachments**. + +![Subordinate tasks create predecessor-successor lnk](_img/create-your-backlog-tasks-using-project/IC658914.png) + +## Link tasks to create predecessor-successor links + +When you link two tasks and publish your plan, TFS creates predecessor-successor links between the two work items. + +![Create predecessor-successor links in Project](_img/create-your-backlog-tasks-using-project/IC660421.png) + +Although the work tracking system tracks predecessor-successor dependencies as work item links, it does not track dependency types, lead and lag time, or other constraints that Project does. + +## Specify data for other Team Services/TFS fields + +To enter data into other Team Services/TFS fields, switch to the Team Foundation Task Sheet. + +![Open Team Foundation Task View in Project](_img/create-your-backlog-tasks-using-project/IC660422.png) + +This view displays all the Team Services/TFS fields that have been mapped to Project. + +![Team Foundation Task Sheet view](_img/create-your-backlog-tasks-using-project/IC697756.png) + +Optionally, you can add a mapped TFS field as a column to the Team Foundation Gantt view. To see which TFS fields are mapped, open **Column Mappings**. + +![View which Team Services/TFS fields are mapped to project fields](_img/create-your-backlog-tasks-using-project/IC658915.png) + +To add more TFS fields or change the way fields are mapped, see [Customize the Microsoft Project field mapping file](https://msdn.microsoft.com/en-us/library/ms404686.aspx). This feature is available for on-premises TFS only. + +## Tips for working in Project and other Team Foundation clients + +You can manage your project plan using Project and all the features that Project provides. Because you and other team members can modify TFS work items from the web portal, Excel, Project, and Team Explorer, follow these tips to manage your work effectively: + +<table> +<tbody> +<tr> +<td><ul> +<li><p>When you first open a project plan, use <img src="_img/create-your-backlog-tasks-using-project/IC652594.png" title="Refresh icon in Excel on Team ribbon" alt="Refresh icon in Excel on Team ribbon" /> (<strong>Refresh</strong>) to download the latest data from TFS.</p></li> +<li><p>Publish your changes and refresh your plan periodically while you work. Otherwise, you can encounter data conflicts between plan data and the TFS data store.</p></li> +<li><p>Save your project plan to maintain scheduling data and other information that TFS doesn't store.</p></li> +<li><p>When defining areas and iterations, keep in mind that Project and Excel restrict the length of the area and iteration path field to 256 characters.</p></li> +<li><p>In Project 2010 and later versions, when you choose <img src="_img/create-your-backlog-tasks-using-project/IC413649.png" title="Pinned task icon" alt="Pinned task icon" /> (Manually scheduled tasks), team members can place a manually scheduled task anywhere in their schedules, and Project will not move it. In order for team members to manually schedule their tasks, you will have to add the necessary project fields to TFS task definitions.</p> +<p>Start and finish dates for autoscheduled tasks (<img src="_img/create-your-backlog-tasks-using-project/IC413651.png" title="Auto Update Task Mode icon" alt="Auto Update Task Mode icon" />) are determined by the scheduling engine based on task dependencies and the project calendar, as in previous releases of Project.</p></li> +</ul></td> +<td><ul> +<li><p>Use Project to manage and update changes to these fields:</p> +<ul> +<li><p>Finish Date</p></li> +<li><p>Start Date</p></li> +<li><p>Calculated fields for completed and remaining work</p></li> +</ul> +<p>Although TFS can store estimated, completed, and remaining work, and start and finish dates, TFS does not recalculate the fields when updates to these fields are made.</p> +<p>When you publish to TFS, start and finish times are read-only in TFS by default. Project does not download start and finish times when you refresh the plan. </p></li> +<li><p>If you see that hours are counted twice in reports that contain task hours, <a href="https://msdn.microsoft.com/library/dd997572">correct the problem</a>.</p> +<p>Project assigns parent tasks the rollup of hours that are assigned to all its child tasks. Rollup hours are not published to TFS to prevent hours within reports from being counted twice. The Microsoft Project mapping file attribute, IfSummaryRefreshOnly, suppresses the hours that are assigned to summary tasks.</p></li> +</ul></td> +</tr> +</tbody> +</table> + +## Related notes + +- [Bulk modify work items using Excel](bulk-add-modify-work-items-excel.md) +- [Create your backlog](../backlogs/create-your-backlog.md) +- [Requirements and compatibility](../../accounts/requirements.md) + +If the Team ribbon fails to appear, see [TFS-Office integration issues](tfs-office-integration-issues.md). + +### Delete work items +You can't delete work items from Excel. The only way to delete work items is from the web portal or the **witadmin** command line tool. For details, see [Move, change, or delete work items ](../backlogs/remove-delete-work-items.md). + +### Differences working in Project versus Excel + +|Area|Project|Excel| +|---|---|---| +|Adding TFS fields|You can only add fields to your Project plan that are defined in the Microsoft Project mapping file.|You can add any TFS field to your Excel worksheet that is listed in the Choose Columns dialog, subject to Excel limitations on text length.| +|Publish/Refresh|You specify the **Publish or Refresh** field for individual tasks. Also, field attributes defined in the Microsoft Project mapping file affect how fields are published and refreshed.|All work items are subject to publish and refresh.| +|Linking|You can create and modify parent-child links or predecessor-successor links between work items.|Using the tree list view, you can create and modify parent-child links.| + + +### Do you want to add Project fields to TFS work items? + +For team members to be able to view or modify Project fields from a Team Foundation client, you must customize both the definition file for the task work item type and update the Microsoft Project Mapping file. For resources, see [Schedule projects using Microsoft Project 2010](https://msdn.microsoft.com/library/ff731586.aspx). + +### Do you want to map additional TFS fields to Project, or change how fields are mapped? + +You can change how Team Foundation fields map to fields in Microsoft Project, and you can change how specific fields are published. See [The Microsoft Project Field Mapping File](https://msdn.microsoft.com/library/ms404686.aspx). + +### Project for Mac + +Support for a Mac OS is not supported. You need to use Project on the same computer where you have installed Visual Studio or the Team Foundation Server Standalone Office Integration 2015 in order to get the Team Foundation add-in. These applications require a Windows OS. + diff --git a/docs/work/office/remove-tfs-ps-integration.md b/docs/work/office/remove-tfs-ps-integration.md new file mode 100644 index 00000000000..919dbb163e7 --- /dev/null +++ b/docs/work/office/remove-tfs-ps-integration.md @@ -0,0 +1,274 @@ +--- +title: Remove PS-TFS integration | TFS +description: Remove the integration of TFS with Project Server from an on-premises Team Foundation Server upgraded to TFS 2017 +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: B7FD5B66-CECC-48F6-B8A8-FF5D11B19D8B +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# Remove integration of TFS with Project Server + +**TFS 2017** + +As described in [Synchronize TFS with Project Server](sync-ps-tfs.md), integration between TFS and Microsoft Project Server is now available through our partner, [Tivitie](http://www.tivitie.com/projectconnect). + +When you upgrade TFS 2015 or earlier version which has the native TFS-Project Server integration configured, some functions are automatically removed, however some elements of the integration remain. You may choose to ignore them, or you can follow the instructions provided in this topic to remove them. + +### Before you upgrade, perform this procedure: +1. List mapped elements + +### After you upgrade, follow these procedures: + +<ol start="2"> +<li>Uninstall TFS extensions for Project Server</li> +<li>Remove the Project Server tab and synchronizing fields from TFS work item types (WITs)</li> +<li>Delete the TFS-PS category from mapped team projects</li> +<li>Delete TFS-PS global workflow rules from team projects and project collections</li> +<li>Delete all TFS-PS related fields from project collections</li> +<li>Delete TFS tables from the Project Server database</li> +<li>Delete enterprise fields and look-up tables from Project Server</li> +<li>(Optional) Delete TFS database catalog mappings.</li> +</ol> + +###Required permissions + +To run the **TFSAdmin** commands, your **Administer Project Server integration** permission for the team project collection must be set to **Allow**. Also, the service account for Team Foundation Server must be granted the necessary permissions to interact with the instance of PWA that will participate in data synchronization. For more information, see [Assign permissions to support TFS-Project Server integration](https://msdn.microsoft.com/library/gg412654.aspx). + +To run the **witadmin** commands you must be a member of the Team Foundation Administrators security group or the Project Collection Administrators security group. + +<a id="list"> </a> +## 1. List mapped elements (before you upgrade) + +>[!NOTE] +>Upgrading to TFS 2017 removes the **TFSAdmin** command line tool. In order to have a list of all mapped elements to remove in procedures 3 through 6, you'll want to perform the following steps. + +1. To get a list of all mapped collections, run this command on the application tier server for TFS: + ```TfsAdmin ProjectServer /GetMappedCollections /tfs:tfsUrl ``` + +2. To get a list of all mapped team projects, run this command on each mapped collection: + ```TfsAdmin ProjectServer /GetMappedProjects /collection:tpcUrl ``` + +3. To get a list of all mapped WITs, run this command on each mapped team project: + ```TfsAdmin ProjectServer /GetMappedWorkItemTypes /collection:tpcUrl teamProject:TeamProjectName``` + +4. To get a list of all mapped fields, download the field mapping file: + ```TfsAdmin ProjectServer /DownloadFieldMappings /collection:tpcUrl /filepath:mappingFile``` + +<a id="uninstall"> </a> +## 2. Uninstall TFS extensions for Project Server + +**Where:**  Each instance of Project Server where the TFS extensions for Project Server were installed and is no longer actively synchronizing with TFS. + +From Project Server, open your control panel **Settings>Programs and Features** and uninstall the TFS extensions for Project Server. + +If you don't remove the extensions, users will receive error messages when they open a mapped Project. + +<a id="remove"> </a> +## 3. Remove the Project Server tab and synchronizing fields from WITs + +**Where:**  From all mapped WITs in all mapped team projects in each mapped team project collection. You should have a list of all mapped elements from step [1. List mapped elements](#list). + +To remove the Project Server tab and associated fields, run **witadmin** to export and then import the mapped WIT XML definition file. This will remove the Project Server integration for specific fields from the WIT and its work item form. + +1. For each mapped WIT, export the WIT XML definition file. For example here we export task: + + ```witadmin exportwitd /collection:http://fabrikam:8080/tfs/defaultcollection /p:PsAgile1 /f:task.xml /n:task``` + +2. Edit the task.xml file to remove from the **FIELDS** section each `<FIELD>` element with ref name <i>Microsoft.Sync.ProjSrv.*</i> or <i>Mirror.*</i> + +3. From the **FORM** section, remove the `<Tab Label="Project Server">` element and its child elements. + +4. If you have enabled the new work item form on the collection post upgrade, also remove the following elements and their child elements: + + a. `<Group Label="Publish">` + b. `<Group Label="Mapped Fields (Project Plan)">` + c. `<Group Label="Mapped Fields (Project Plan : Work Item)">` + d. Remaining `<Control>` elements with `FieldName="Microsoft.Sync.ProjSrv.*" or FieldName="Mirror.*" ` + +5. Import the updated WIT xml file. + + ```witadmin importwitd /collection:http://fabrikam:8080/tfs/defaultcollection /p:PsAgile1 /f:task.xml``` + + +## 4. Delete the TFS-PS category from mapped team projects + +**Where**: From all mapped team projects. You should have a list of all mapped elements from step [1. List mapped elements](#list). + +Work item types that were mapped to Project Server will appear in the WIT category "Microsoft.Sync.ProjSrv.WorkitemCategory"? that indicates they are mapped to Project Server. You need to use the **witadmin** command to export the categories in the Team Project, remove this particular category and re-import using **witadmin**. + +>[!NOTE] +>Remember the list of Work Item Types defined within the category as you'll need them later. + +Example steps: + +1. Export categories for a mapped team project collection: + + ```witadmin exportcategories /collection:http://fabrikam:8080/tfs/defaultcollection /p:PsAgile1 /f:categories.xml``` + +2. Remove the following section from the XML definition and then save the categories.xml file: + ``` + <CATEGORY refname="Microsoft.Sync.ProjSrv.WorkitemCategory" name="Provisioned Work Item types"> + <DEFAULTWORKITEMTYPE name="Task" /> + <WORKITEMTYPE name="User Story" /> + </CATEGORY> + ``` +3. Import the updated categories.xml file. + + ```witadmin importglobalworkflow /collection:http://fabrikam:8080/tfs/defaultcollection /p:PsAgile1 /f:categories.xml``` + + +## 5. Delete TFS-PS global workflow rules from team projects and project collections + +**Where**:  From all mapped team projects and mapped team project collections. You should have a list of all mapped elements from step [1. List mapped elements](#list). +  +Doing this doesn't remove any fields but does remove rules that were defined at the team project-level and collection-level for those fields. In most cases you shouldn't have manually modified the global workflow rules. If so, simply export and import with a default content below. If you have made customization you would need to determine the customizations you made and which you want to keep, and then simply remove those rules associated with TFS-PS integration. + +Example steps: + +1. Export the global workflow XML definition file for a mapped team project: + + ```witadmin exportglobalworkflow /collection:http://fabrikam:8080/tfs/defaultcollection /p:PsAgile1 /f:tpgf.xml``` + +2. Remove all TFS-PS integration definitions, preserving any customizations not related to TFS-PS integration. An uncustomized file should contain only the following: + ``` + <?xml version="1.0" encoding="utf-8"?> + <GLOBALWORKFLOW> + </GLOBALWORKFLOW> + ``` + +3. Import the updated XML file. + + ```witadmin importcategories /collection:http://fabrikam:8080/tfs/defaultcollection /p:PsAgile1 /f:tpgf.xml``` + +4. Repeat steps 1 through 3 for each mapped team project collection using these commands: + ```witadmin exportglobalworkflow /collection:http://fabrikam:8080/tfs/defaultcollection /f:tpgf.xml``` + + ```witadmin importglobalworkflow /collection:http://fabrikam:8080/tfs/defaultcollection /f:tpgf.xml``` + +<!--- +A copy of global workflow with default mapping fields would help. +--> + +## 6. Delete all TFS-PS related fields + +**Where**: From each mapped team project collection. You should have a list of all mapped elements from step [1. List mapped elements](#list). +  +Several work item fields were added to your team project collection when they were mapped for TFS-PS integration. These fields store both data and metadata related to the synchronization. In previous steps, we removed usage of these fields from the WITs and global workflow. With those steps completed, you are ready to delete these fields. +  +1. Delete all fields that begin with *Microsoft.Sync.ProjSrv.**. + + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.ApprovalWatermark /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.AssignmentData /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.IsLinkedToProjSrv /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.IsSummaryInProjSvr /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.LastReviewedDate /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.LastReviewStatus /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.LastSubmitStatus /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.LastSubmittedDate /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.LastSubmittedRevision /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.LastSyncRevision /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.LastSyncType /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.ProjectName /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.ProjGuid /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.QueueFlags /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.RequestedAssnGuid /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.RequestedProjGuid /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.Submit /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.SubmitTag /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.TaskGuid /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Microsoft.Sync.ProjSrv.TaskModifiedRevCounter /noprompt``` + +2. Depending on the field mapping, you might have additional *Mirror* fields to delete. Use **witadmin listfields** to retrieve a list of all mirror fields. If you used default mapping, then you'll want to delete the following set of fields: + + ```witadmin deletefield /collection:<your collection URL> /n:Mirror.Microsoft.VSTS.Scheduling.CompletedWork /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Mirror.Microsoft.VSTS.Scheduling.FinishDate /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Mirror.Microsoft.VSTS.Scheduling.OriginalEstimate /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Mirror.Microsoft.VSTS.Scheduling.RemainingWork /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Mirror.Microsoft.VSTS.Scheduling.StartDate /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Mirror.System.AssignedTo /noprompt``` + ```witadmin deletefield /collection:<your collection URL> /n:Mirror.System.Title /noprompt``` + +<!--- +What if we delete fields and don't update the global workflow? Would we get an error? +--> + +## 7. Delete TFS tables from Project Server + +**Where**: +- For Project Server 2010: Delete from the PWA Reporting Database +- For Project Server 2013: Delete from the PWA Database (There's only one database for Project Server 2013) + +Use the following commands to delete the TFS tables: + +`DROP TABLE [dbo].[TFS_mapped_projects]` +`DROP TABLE [dbo].[TFS_status_approvals]` + +>**Note:** If you don't delete the TFS tables and uninstall the TFS extensions for Project Server, you'll receive an error similar to the one shown below when using Microsoft Project with your formerly mapped team projects. The 'Team' ribbon needed to publish and refresh Project (not Project Server) with TFS won't be available. +> +>![Sample screenshot of error message](_img/ps-tfs-integ-error-message.png) + + +## 8. Delete enterprise fields and look-up tables from Project Server + +From Project Server, remove all fields that end in `(TFS)`. + +**Where**: +- From Project Server 2010, go to: **PWA Home Page>Server Settings>Enterprise Custom Fields and Lookup Tables** +- From Project Server 2013, go to: PWA home page, click the 'gear' button and then choose **PWA Settings>Enterprise Custom Fields and Lookup Tables** +  +<ol><li>Remove all TFS fields, those ending in `(TFS)`, for example: +<ul><li>Active Assignment (TFS)</li> +<li>IsTaskTypeInitialized (TFS)</li> +<li>Submitted Revision (TFS)</li> +<li>Work Item Id (TFS)</li> +<li>Work Item Type (TFS)</li> +</ul> +<p>For example, delete the `IsTaskTypeInitialized (TFS)` field:</p> +![Enterprise custom fields](_img/ps-tfs-integ-enterprise-custom-fields.png) +</li> +<li>Also, delete all lookup tables that start with `Microsoft.VSTS`, for example: +<ul><li>Microsoft.VSTS.ProjSrv.SubmittedRevLT.DoNotDelete</li> +<li>Microsoft.VSTS.ProjSrv.SyncToTFSLT.DoNotDelete</li> +<li>Microsoft.VSTS.ProjSrv.TfsAssnLT.DoNotDelete</li> +<li>Microsoft.VSTS.ProjSrv.TFSMapLT.DoNotDelete </li> +<li>Microsoft.VSTS.ProjSrv.WITypeLT.DoNotDelete </li> +<li>Microsoft.VSTS.ProjSrv.WorkItemIdLT.DoNotDelete</li> +</ul> +<p>For example, here we delete the `Microsoft.VSTS.ProjSrv.TfsAssnLT.DoNotDelete` field:</p> +![Enterprise custom fields](_img/ps-tfs-integ-delete-custom-fields-from-lookup-table.png) +</li> +</ol> + + +## 9. (Optional) Delete TFS database catalog mappings + +**Where**:  From the TFS data-tier. + +The final elements which remain correspond to entries in the TFS_Configuration database that define the mappings of team projects and project collections. These entries can remain as they are without causing any problems. + +If you choose to remove these entries, run the following commands on the data-tier server in the order provided: + +``` +DELETE FROM <TFS Configuration Database>.[dbo].[tbl_CatalogNode] + WHERE PartitionId>=0 AND ResourceIdentifier IN + (SELECT [Identifier] FROM <TFS Configuration Database>.dbo.tbl_CatalogResource + WHERE resourcetype = '289DD275-CECA-4698-8042-38D2E86FC682' and PartitionId>=0) +``` +  +``` +DELETE FROM <TFS Configuration Database>.dbo.tbl_CatalogResource + WHERE resourcetype = '289DD275-CECA-4698-8042-38D2E86FC682' and PartitionId>=0 +``` + +## Related notes + +- [Synchronize TFS with Project Server, third party support](sync-ps-tfs.md) +- [Synchronize TFS with Project Server (TFS 2015 | TFS 2013)](../tfs-ps-sync/synchronize-tfs-project-server.md) +- [witAdmin: Customize and manage objects for tracking work](../reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md) +- [Map integration components (TFSAdmin command line tool)](../tfs-ps-sync/map-integration-components.md) +- [Microsoft discontinuing Project Server/TFS Integration. Partner to provide solution](https://blogs.msdn.microsoft.com/visualstudioalm/2016/09/16/microsoft-discontinuing-project-server-tfs-integration/) + diff --git a/docs/work/office/resolve-excel-data-conflicts-publish-refresh.md b/docs/work/office/resolve-excel-data-conflicts-publish-refresh.md new file mode 100644 index 00000000000..7ce2b018591 --- /dev/null +++ b/docs/work/office/resolve-excel-data-conflicts-publish-refresh.md @@ -0,0 +1,53 @@ +--- +title: Resolve data conflicts (publish and refresh) | VSTS & TFS +description: Resolves data conflicts from publishing a work item. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: d43d6f68-bcef-42af-857c-50c2ff6ea79b +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# Resolve data conflicts (publish and refresh) + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +A data conflict occurs when you try to publish a work item from [Excel](bulk-add-modify-work-items-excel.md) or [Project](create-your-backlog-tasks-using-project.md) and the version of that work item differs from the version in the work item database. The following example shows how two team members can create such a conflict. + +1. A team member opens a copy of a work item in a work item list in Excel or Project. + +2. Team member A edits the work item and makes one set of changes. + +3. Team member B edits that same work item and makes a different set of changes, and publishes those changes. + +4. Team member A finishes editing the work item and tries to publish the changes to the work item. + +5. Excel or Project displays the **Work Item Publishing Errors** dialog box, which shows items that it could not publish. + +### To resolve a data conflict + +1. In the **Work Item Publishing Errors** dialog box, for each work item in the **Unpublished work items** box that has **Conflict** in the **Issue** column, follow these steps. + + 1. In the **Unpublished work items** box, click the work item. + + The **Details** area shows a list of conflicts for the selected work item. The **Conflicting field** column shows the name of the field in which the conflict occurs. The **Local version** and **Server version** columns show the local and server data, respectively, and a check box appears next to the data in each of these columns. + + 2. For each row in the **Details** box, select the check box next to the correct value. + + If you select the local version, the data in Office Excel or Office Project overwrites the data on the server. If you select the server version, the server data overwrites the data in Office Excel or Office Project. + +2. Click **Publish**. + + > [!NOTE] + > This step publishes only the work items that you corrected. If you do not resolve all data validation errors related to a work item, that work item is not published. + +## Related notes +- [Resolve invalid links](resolve-excel-invalid-links-tree-list.md) +- [Resolve data validation errors](resolve-excel-data-validation-errors.md) +- [Work in Excel and Project](track-work-vsts-tfs.md) + + +###Required permissions + +To update work items, you must be a member of the **Contributors** group or have your **View work items in this node** and your **Edit work items in this node** permissions set to **Allow**. For more information, see [Permission reference](../../security/permissions.md). \ No newline at end of file diff --git a/docs/work/office/resolve-excel-data-validation-errors.md b/docs/work/office/resolve-excel-data-validation-errors.md new file mode 100644 index 00000000000..1e1539d1afc --- /dev/null +++ b/docs/work/office/resolve-excel-data-validation-errors.md @@ -0,0 +1,80 @@ +--- +title: Resolve data validation errors | VSTS & TFS +description: Address rule errors that occur when publishing a list from Excel or Project to VSTSor Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 4c72c12f-bd10-48a5-b71c-7c296feec71e +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# Resolve data validation errors (publish and refresh) + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +A data validation error occurs when a change in the work item list or project plan violates a rule of the work item type. The following examples show common data validation errors: + +- Someone assigns a work item to a team member whose name is not included in the list of allowed values +- Someone creates a work item but forgets to complete a required field, such as the work item type. + + If a data validation error occurs when you try to publish changes, the **Work Item Publishing Errors** dialog box appears, and in the **Unpublished work items** list the **Issue** column shows **Validation error** or another phrase that contains **Invalid**. + + + + +## <a name="ResolveDataValidationError"></a> +##Resolve a data validation error + You can use the **Work Item Publishing Errors** dialog box to resolve a data validation error. + +1. In the **Work Item Publishing Errors** dialog box, for each work item that appears with a data validation error, follow these steps. + + > [!NOTE] + > If the data validation error is an invalid work item type, the **Edit Work Item** button is not visible, and a work item form does not appear. You must correct the error in the Office Excel worksheet or the Office Project plan. For information about how to resolve an error in Office Excel, see the next procedure in this topic. + + 1. In the **Unpublished work items** box, click the work item, and then click **Edit Work Item**. + + A work item form appears. + + 2. In the work item form, review the information and correct the value. + + 3. Click **Close** to save your changes and close the work item form. + +2. After you correct the data validation errors, click **Publish** to publish the corrected work items. + + > [!NOTE] + > This step publishes only the work items that you corrected. If you do not resolve a data validation error, that work item is not published. + +3. Click **Close** to close the **Work Item Publishing Errors** dialog box. + +<a name="ResolveDataValidationErrorChecking2007"></a> +##Resolve a data validation error by using error checking in Excel + You can use the Office Excel tools to find and resolve an error in a work item list. For more information about how to use Office Excel error checking tools, see the Office Excel Help. + +#### To resolve a data validation error by using error checking in Excel 2007 + +1. Start Excel, and click the **Formulas** tab. + +2. In the **Formula Auditing** group, click **Error Checking**. + + If the error checking tool finds an error, the **Error Checking** dialog box appears. + +3. For basic information about the error, see the text that describes the error in the **Error Checking** dialog box. For more information about the error, click **Help on this error**. + +4. In the work item list, click the cell that contains the error, and then correct the value. + +5. In the **Error Checking** dialog box, click **Resume** to find the next data validation error. + + - If the **Error Checking** dialog box shows another error, repeat the previous two steps to resolve the error. + + - If a message appears that indicates error checking has completed, click **OK** to close both this message and the **Error Checking** dialog box. + +## Related notes +- [Resolve data conflicts](resolve-excel-data-conflicts-publish-refresh.md) +- [Resolve invalid links](resolve-excel-invalid-links-tree-list.md) +- [Work in Excel and Project](track-work-vsts-tfs.md) + + +###Required permissions + +To update work items, you must be a member of the **Contributors** group or have your **View work items in this node** and your **Edit work items in this node** permissions set to **Allow**. For more information, see [Permission reference](../../security/permissions.md). \ No newline at end of file diff --git a/docs/work/office/resolve-excel-invalid-links-tree-list.md b/docs/work/office/resolve-excel-invalid-links-tree-list.md new file mode 100644 index 00000000000..076210a7495 --- /dev/null +++ b/docs/work/office/resolve-excel-invalid-links-tree-list.md @@ -0,0 +1,143 @@ +--- +title: Resolve invalid links | VSTS & TFS +description: Address invalid link error messages that occur when publishing an Excel tree list to VSTSor Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: f2250e37-5150-4546-81b8-4ec8023046c2 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- +# Resolve invalid links in an Excel tree list + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +If you try to publish a tree list that contains an invalid link, the **Work Item Publishing Errors** dialog box appears and displays an error message that states why the tree is invalid. When you work with work items in a tree in Excel, the tree must be in a valid state before it can be published. In Excel, an invalid link occurs in a tree list of work items if the title of a work item title is missing or occurs in the wrong title column. + +You can resolve most errors using the procedures provided in this topic. + + + +<a name="tf208000"></a> +##TF208000: Duplicate titles + +If you add a value to multiple Title columns of a work item, when you try to publish the tree, the error message **TF208000** appears in the **Work Item Publishing Errors** dialog box. The error message specifies the row number of the invalid link. + +1. Note the row number that appears in the dialog box. + +2. Close the **Work Item Publishing Errors** dialog box. + +3. In the work item list, find the row that the error message specified. + +4. Delete the duplicate title or titles so that only one title column has a value. + +5. On the **Team** tab, in the **Work Items** group, choose **Publish**. + +<a name="TF208001"></a> + +## TF208001: Child work item disconnected from parent + +If you remove the title of a child work item, when you try to publish the work item list the error message **TF208001** appears in the **Work Item Publishing Errors** dialog box. The error message specifies the row number of the invalid link. This error message also appears if you create an invalid link structure by putting the title of a child work item into the wrong column. + +> [!NOTE] +> If you put a title in the wrong column, the resulting tree structure might be valid but not match your intent. The system cannot detect this problem, therefore, an error message does not appear. + +#### To resolve an orphaned work item + +1. Note the row number that appears in the dialog box. + +2. Close the **Work Item Publishing Errors** dialog box. + +3. Find the row that the error message specified. + + > [!NOTE] + > The misplaced title might be in this row, or it might be in the next row. + +4. Move the title to the correct column to fix the invalid link. + +5. On the **Team** tab, in the **Work Items** group, choose **Publish**. + +<a name="tf208017"></a> +## TF208017: Missing Title 1 in the first row + +If the first work item in the list has no value in the **Title 1** column, the error message **TF208017** appears in the **Work Item Publishing Errors** dialog box when you try to publish the work item list. + + +1. Close the **Work Item Publishing Errors** dialog box. + +2. Determine why the first work item lacks a **Title 1** value. + + The analysis of the cause of the error determines what you must do to repair the work item list. + + 1. If the first work item should be at the top of the list, move its title value into the **Title 1** column. + + 2. If the first work item should be lower in the list, move the correct work item to the top of the list. + + For more information about how to move work items, see [Bulk add work items with Excel](http://msdn.microsoft.com/en-us/67595fec-a872-43e3-b934-9dd1a766218c). + +3. On the **Team** tab, in the **Work Items** group, choose **Publish**. + +<a name="tf208022"></a> +## TF208022: Sorted tree list + +If you have not installed Service Pack 1 for Visual Studio 2010 or later version, the following error message appears when you choose **Publish** after you have sorted the work items in a tree list: + +>TF208022: Cannot publish a sorted tree list. Before you can publish, you must clear any sort criteria applied to this work item list. Be aware that the order of work items has changed. Removing sort criteria will not return the list to its original order. Verify that all of the parent-child relationships in the tree are correct before you publish. + +You cannot publish your changes until you re-establish the tree hierarchy. You can resolve this error either by discarding your changes and refreshing the list or by manually restoring the hierarchy and then publishing the list. + +#### To resolve sorted tree list issues + +- Choose **Refresh** to discard your changes and restore the tree hierarchy. + + > [!NOTE] + > If you refresh the tree list, you remove all your changes other than the sort. To refresh the tree list, on the **Team** tab, in the **Work Items** group, choose **Refresh**. + +- Manually restore the tree hierarchy by moving the row entries of child items under their parent items. Then, on the **Team** tab, in the **Work Items** group, choose **Publish**. + +<a name="tf208102"></a> +## TF208102: Excel sort on a tree list + +The following error message appears if you sort the work items in a tree list in Excel: + +>TF208102: You have performed an Excel sort on a tree list. This action removed the modified or newly introduced hierarchical link relationships of the tree. +> +> You can still publish the changes you have made to individual work items. After you publish, the list will restore to previous hierarchy. +> +>In general, you should not sort a tree list whose hierarchy has been modified.| + + +This message indicates that you can publish the changes that you made to the fields, but all changes that you made to the link hierarchy have been discarded. The tree hierarchy automatically reverts to its original structure. + +#### To publish changes and retrieve the tree hierarchy + +1. On the **Team** tab, in the **Work Items** group, choose **Publish**. + +2. Choose **Refresh**. + +<a name="tf208104"></a> +## TF208104: Hierarchical link Rrlationship is locked + If you publish a worksheet that contains work items that are synchronized with Project Server and whose hierarchical link relationships are locked (![Locked link icon](_img/icon_lockedlink.png "Icon_lockedLink")), the following error message may appear: + +>TF208104: You have modified one or more hierarchical link relationships that may have been locked by other processes, such as Project Server. +> +>Changes that you made to individual work items were published. Changes that you made to locked links were auto-corrected. + + This error appears when you change the link hierarchy that contains locked links. This message indicates that the changes that you made to the fields are published, but all changes that you made to the link hierarchy, whether locked or not locked, are not published and were reverted to their original assignments. + + To modify hierarchical links that are locked, make your changes in the enterprise project plan that is mapped to the team project. For more information, see [Manage project details](../tfs-ps-sync/manage-project-details.md). + +#### To publish changes to links that are not locked + +- For work items that are not synchronized, you can modify the hierarchical link relationship from Team Explorer or the web portal. For more information, see [Bulk add or modify work items with Excel](bulk-add-modify-work-items-excel.md). + +- To modify hierarchical link relationships that are not locked in Excel, revise the query that you use to export the work items to exclude all work items whose links are locked. For example, you can add a clause to the filter criteria to omit items whose **Project Server Is Linked** field is set to **Yes**. + +## Related notes +- [Resolve data validation errors](resolve-excel-data-validation-errors.md) +- [Resolve data conflicts](resolve-excel-data-conflicts-publish-refresh.md) +- [Work in Excel or Project](track-work-vsts-tfs.md) + +###Required permissions + +To update work items, you must be a member of the **Contributors** group or have your **View work items in this node** and your **Edit work items in this node** permissions set to **Allow**. For more information, see [Permission reference](../../security/permissions.md). \ No newline at end of file diff --git a/docs/work/office/resolve-problems-excel-workbooks-sharepoint.md b/docs/work/office/resolve-problems-excel-workbooks-sharepoint.md new file mode 100644 index 00000000000..11bda65dc5f --- /dev/null +++ b/docs/work/office/resolve-problems-excel-workbooks-sharepoint.md @@ -0,0 +1,41 @@ +--- +title: Resolve problems working with Excel workbooks or SharePoint Server | TFS +description: Resolve an error that occurs with the integration of SharePoint, TFS, and Excel workbooks +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: fdb0f881-7ead-45f5-85c0-189a86d29d7a +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- +# Resolve problems working with Excel workbooks and SharePoint server + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Before you use Excel 2010 to publish a workbook to a server that is running Microsoft Office SharePoint Server 2007, you must first install MSOLAP.4 on the server that is running SharePoint Products. To install MSOLAP.4, you add it to the list of approved providers in Excel Services. + +####Required permissions + +To perform this procedure, you must be a member of the Administrators group on the server that hosts the SharePoint web application. For more information about permissions, see [Permission reference](../../security/permissions.md). + +### To install MSOLAP.4 + +1. On the server that is running SharePoint Products, click **Start**, point to **Administrative Tools**, and then click **SharePoint Central Administration**. + +2. Click **Shared Services Administration**, click **Excel Services**, and then click **Trusted Data Providers**. + +3. Click **Add Trusted Data Provider**. + +4. In the **Provider ID** box, type the following code: + + ``` + Provider ID = MSOLAP.4 + Data Provider Type = OLE DB + Description = Microsoft OLE DB Provider for OLAP Services 10.0. + ``` + +5. Click **OK**. + +## Related notes + +- [Verify SharePoint products for Team Foundation Server](../../tfs-server/install/sharepoint/verify-sharepoint.md) \ No newline at end of file diff --git a/docs/work/office/rollup-estimated-and-actual-work-using-project.md b/docs/work/office/rollup-estimated-and-actual-work-using-project.md new file mode 100644 index 00000000000..b0e8da60ba1 --- /dev/null +++ b/docs/work/office/rollup-estimated-and-actual-work-using-project.md @@ -0,0 +1,159 @@ +--- +title: Rollup estimated and actual work using Project | VSTS & TFS +description: Provides summed values of select fields for all child work items of a parent. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 502d6c76-36a0-4448-b73c-9af43703b562 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- +# Rollup estimated and actual work using Project +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +Because Microsoft Project has a scheduling engine, it automatically will generate a rollup of summary tasks. Rollup provides summed values of select fields for all child work items of a parent. + + There are a few items to be aware of, however, to make it work correctly. You may have to add fields to work item types (WITs) and update the Microsoft Project Mapping file. You can work in Project or TFS to structure the breakdown of work items and move seamlessly back and forth from each tool by publishing and refreshing data. After setting a baseline schedule in Project, you publish your rollup values to TFS. + + With Project, you can rollup estimated, completed work or remaining work, and effort, size, or story points. By publishing the rollup values back to TFS, you can view them in work item forms, queries or on the backlog pages. + + ![Task board displays round-trip rollup from Project](_img/alm_rup_roundtriprollup.png "ALM_RUP_RoundTripRollup") + + To learn about other methods that support rollup, see [Support rollup of work and other fields](../reference/support-rollup-of-work-and-other-fields.md). + +## Add fields to work item types + The following default fields used to schedule work are only present on the task work item. + +- Original Estimate (Microsoft.VSTS.Scheduling.OriginalEstimate): The amount of work required to complete a task. (Agile and CMMI) + +- Completed Work (Microsoft.VSTS.Scheduling.CompletedWork): The amount of work that has been spent implementing a task. (Agile and CMMI) + +- Remaining Work (Microsoft.VSTS.Scheduling.RemainingWork): This field is used to support burndown charts. + + If your team project was created using the Visual Studio Scrum process template, only Remaining Work is defined in the task. + +1. Add required fields to the WITs that will capture the rollup values. + + For example, to rollup Original Estimate or Completed Work for user stories, add the following fields to the WIT definition for user story: + + ``` + <FIELD name="Original Estimate" refname="Microsoft.VSTS.Scheduling.OriginalEstimate" type="Double" reportable="measure" formula="sum"> + <HELPTEXT>Initial value for Remaining Work - set once, when work begins</HELPTEXT> + </FIELD> + <FIELD name="Completed Work" refname="Microsoft.VSTS.Scheduling.CompletedWork" type="Double" reportable="measure" formula="sum"> + <HELPTEXT>The number of units of work that have been spent on this task</HELPTEXT> + </FIELD> + ``` + + To learn more about adding fields, see [Modify a field or add a custom field](../customize/add-modify-field.md). + +2. Determine if you want to make rollup values read-only on the work item form. + + By making them read-only you prevent users from introducing data inaccuracies into TFS. You make fields read-only using the `Control` field `Readonly` attribute. + +## <a name="project"></a> Update the Microsoft Project Mapping file + +1. Update the Microsoft Project Mapping file to contain the field mappings you need to support rollup. For details, see [Upload or download the Microsoft Project Mapping file](../reference/upload-or-download-the-microsoft-project-mapping-file.md). + + Depending on the process template used to create your team project, some of these mappings may be there already. Here's an example of fields to include: + + ``` + <Mapping WorkItemTrackingFieldReferenceName=" Microsoft.VSTS.Scheduling.OriginalEstimate" ProjectField="pjTaskBaselineWork" ProjectUnits="pjHour" PublishOnly="false" IfSummaryRefreshOnly="false" /> + <Mapping WorkItemTrackingFieldReferenceName=" Microsoft.VSTS.Scheduling.CompletedWork" ProjectField="pjTaskActualWork" ProjectUnits="pjHour" PublishOnly="false" IfSummaryRefreshOnly="false" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.RemainingWork" ProjectField="pjTaskRemainingWork" ProjectUnits="pjHour" PublishOnly="false" IfSummaryRefreshOnly="false" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.StartDate" ProjectField="pjTaskStart" PublishOnly="true" IfSummaryRefreshOnly="false" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.FinishDate" ProjectField="pjTaskFinish" PublishOnly="true" IfSummaryRefreshOnly="false" /> + ``` + + Don't map Original Estimate or any other field to pjTaskDuration. This mapping is not supported. + +2. If you want to map Effort, Story Points, or Size, use a pjTaskNumber field, for example: + + ``` + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.StoryPoints" ProjectField="pjTaskNumber12" PublishOnly="false" IfSummaryRefreshOnly="false" /> + ``` + +3. Assign `PublishOnly="false"` and `IfSummaryRefreshOnly="false"` in the mapping file so that the rollup summary values are published to the TFS database. + +## <a name="requirements"></a> Structure your work items to support rollup + +1. Link all work items that should support rollup using parent-child links. For example, create tasks that link to user stories. + + You can do this easily by [creating tasks from the task board](http://msdn.microsoft.com/en-us/f13e32ae-fe77-421a-b524-43b6bcd1a0f3), or you can [create your schedule in Project](create-your-backlog-tasks-using-project.md). + +2. Determine the unit of time used to track work and make sure it is used consistently across your team or organization. For example, you can track tasks using hours or days. + +3. Specify values for Original Estimate (Agile and CMMI only) and Remaining Work for each task. + + If you work in Project, specify the Duration for each task. + +4. If you want to roll up to a feature level, link user stories, or other backlog items, to features using parent-child links. + + You can quickly link items [using the mapping pane](http://msdn.microsoft.com/en-us/658f5e1c-ccdd-48da-bd88-4637273c666d). + +## Create a query of the work items you want to rollup + If you've created your work items in Project, then you can proceed to creating your schedule in Project. + + However, if you've created your work items in TFS, your next step is to create a tree query. By viewing backlog items to tasks, you can create the query from the backlog page. + + ![Create query from backlog page](_img/alm_rup_createquery.png "ALM_RUP_CreateQuery") + + For more information, about tree queries, see [Use the query editor to list and manage queries](http://msdn.microsoft.com/en-us/c9b6d41c-47ce-4a29-8a1c-ba44d8c4809a) + +## Create your schedule in Project + +1. If you've created your work items in Project, then skip to step 2. + + To get rollup of work items you've defined in TFS, open Project, connect to the team project, and open the query you created in the last procedure. + + ![Connect to a team project from Microsoft Project](_img/alm_prj_chooseteamproject.png "ALM_PRJ_ChooseTeamProject") + + Project is now bound to your team project. The Team Foundation Gantt view supports entry and display of several TFS fields. + + If you don't see the **Team** ribbon (or the **Team** menu if you use Project 2007) see [Create your backlog and tasks using Project](create-your-backlog-tasks-using-project.md). To get the Team Foundation add-in, you need to have Team Explorer installed if you don't have Visual Studio installed. + +2. From the Schedule page (**File>Options>Schedule**) set those options that need to match with how you track work in TFS. For example, if you track work in hours, make sure that Project is set to track hours. To automate scheduling of tasks, choose **Auto Scheduled**. + + ![Schedule options](_img/alm_rup_scheduleoptions.png "ALM_RUP_ScheduleOptions") + +3. Add columns to display fields that you need. For example, you might need to add columns to display Original Estimate and Completed Work. These TFS fields correspond to the Baseline Work and Actual Work fields in Project. + + To see which TFS fields are mapped, open **Column Mappings**. + + ![View which TFS fields are mapped to project fields](_img/alm_prj_viewcolumnmappings.png "ALM_PRJ_ViewColumnMappings") + +4. Enter your work estimates in the Duration column, not in the Baseline Work. + +## Set a baseline and publish changes and rollup values to TFS + When you use Microsoft Project to create parent and child tasks, it assigns parent or summary tasks the rollup of hours or days that are defined for all its child tasks. + +1. When you have a schedule that meets your needs, set the Project Baseline to copy the values in the Duration field to the Original Estimate field. + + ![Set baseline option](_img/alm_rup_setbaseline_1.png "ALM_RUP_SetBaseline_1") + + ![Set baseline](_img/alm_rup_setbaseline_2.png "ALM_RUP_SetBaseline_2") + +2. To publish changes you make in Project to TFS, make sure that the **Publish and Refresh** field is set to Yes. Set this field to No if you create milestone tasks or other tasks that aren't work item related. + +3. Publish your changes and rollup values to TFS. + + ![Publish](_img/alm_rup_publish.png "ALM_RUP_Publish") + +4. As changes occur to the schedule, you can refresh your Project plan, clear and set a new baseline, and republish the rollup values. + +## Q & A + +### Q: Where can I learn more about customizing the Microsoft Project Field Mapping file? + **A:** See [Customize the Microsoft Project field mapping file](../reference/customize-project-field-mapping-file.md). + +### Q: What's the difference between manual and automated task scheduling? + **A:** By using Task Mode, which is accessed through the following Ribbon menu, you have more flexibility in the way you and team members schedule tasks. + + ![Task mode scheduling ribbon menu options](_img/tfs_oiproj_taskmode_menu.png "TFS_OIProj_TaskMode_Menu") + + By using manually scheduled tasks, which are indicated by the ![Pinned task icon](_img/tfs_oiproj_pintask_icon.png "TFS_OIProj_PinTask_Icon") icon, you can manually schedule the duration and the start and finish dates for a task. Team members can place a manually scheduled task anywhere in their schedules, and Project will not move it. + + Start and finish dates for auto scheduled tasks (![Auto Update Task Mode icon](_img/tfs_oiproj_autoupdate_icon.png "TFS_OIProj_AutoUpdate_Icon")) are determined by the scheduling engine based on task dependencies and the project calendar, as in previous releases of Project. Project managers who are accustomed to automatic scheduling with past versions of Project can turn the new manual scheduling feature off for specific tasks or the entire project. + +### Q: Can I get a rollup of team capacity? + **A:** No. The data entered for team capacity isn't stored in the regular data stores. \ No newline at end of file diff --git a/docs/work/office/schedule-projects-using-microsoft-project.md b/docs/work/office/schedule-projects-using-microsoft-project.md new file mode 100644 index 00000000000..6ae2ad53f19 --- /dev/null +++ b/docs/work/office/schedule-projects-using-microsoft-project.md @@ -0,0 +1,104 @@ +--- +title: Schedule projects using Microsoft Project | VSTS & TFS +description: Uses Microsoft Project 2010 to plan team projects, schedule tasks, assign resources, and track changes to data. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: c8d9ea81-ebde-47e5-b813-473018177aa9 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# Schedule projects using Microsoft Project + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +>[!IMPORTANT] +>You can use [Project to plan and schedule work items](create-your-backlog-tasks-using-project.md) that you define in Team Services or Team Foundation Server (TFS). Some features may require customizing the Microsoft Project Mapping file which is only supported for the On-Premises XML process model. For an overview of process models and supported customizations, see [Customize your work tracking experience](../customize/customize-work.md). + +You can use Project 2010 or later versions to plan team projects, schedule tasks, assign resources, and track changes to data that is stored in VSTS and TFS. By using Project, you can access many tools and functions through the simplified graphical menus and Office Ribbon. The Team tab menu, as shown in the following illustration, displays the same functions that are available from the Team tab in Excel. + +>[!NOTE] +>For version compatibility between Team Services/TFS and Office clients, see [Requirements and compatibility, Office](../../accounts/requirements.md#office). + +**Project team tab ribbon** + +![Team Menu ribbon](_img/tfs_oiproj_ribbon.png "TFS_OIProj_Ribbon") + + +Project 2010 and later versions support several new project fields and functions. Depending on how you use Project to schedule team tasks, you may want to update the task work item form to display some of the new fields. To maintain new Project fields in both your project plan and in TFS, you have to customize the task work item type and the Microsoft Project Field mapping file for the team project. + +>[!NOTE] +>Customizing the Project Field mapping file is only support for on-premises TFS and the On-premises XML process model. + +<a name="NewFeatures"></a> +## New task-related features in Project 2010 and Project 2013 + +### Schedule tasks manually or automatically +By using Task Mode, which is accessed through the following Ribbon menu, you have more flexibility in the way you and team members schedule tasks. + +![Task mode scheduling ribbon menu options](_img/tfs_oiproj_taskmode_menu.png "TFS_OIProj_TaskMode_Menu") + +By using manually scheduled tasks, which are indicated by the ![Pinned task icon](_img/tfs_oiproj_pintask_icon.png "TFS_OIProj_PinTask_Icon") icon, you can manually schedule the duration and the start and finish dates for a task. Team members can place a manually scheduled task anywhere in their schedules, and Project will not move it. + +>[!IMPORTANT] +>In order for team members to manually schedule their tasks, you'll have to [add the necessary project fields to the task work item](#download). You can only modify the task WIT definition for the On-premises XML process model. + +Start and finish dates for autoscheduled tasks (![Auto Update Task Mode icon](_img/tfs_oiproj_autoupdate_icon.png "TFS_OIProj_AutoUpdate_Icon")) are determined by the scheduling engine based on task dependencies and the project calendar, as in previous releases of Project. Project managers who are accustomed to automatic scheduling with past versions of Project can turn the new manual scheduling feature off for specific tasks or the entire project. + +To learn more, see [Changes in Project 2010](http://go.microsoft.com/fwlink/?LinkId=194857). + + +### Perform what-if analysis by inactivating select tasks (![Project 2010 Professional Edition](_img/tfs_oiproj_ribbon_proicon.png "TFS_OIProj_Ribbon_ProIcon") **Project Professional only**). + +By using Active Mode, you can determine the impact to the schedule when you specify some tasks as inactive. When you mark a task as inactive, you maintain all the data that is associated with the task, but you remove it from consideration in the schedule and resource allocation. + +>[!IMPORTANT] +>When you inactivate a task in Project, you do not inactivate the task in VSTS and TFS. Inactive tasks are published and refreshed according to their **Publish and Refresh** assignment in the Project plan. + +**Scalable 64-bit support**. With 64-bit compatibility, Project provides performance improvements to support creation of very large and complex projects. + +To learn more, see [Compatibility Between the 32-bit and 64-bit Versions of Office 2010](http://go.microsoft.com/fwlink/?LinkId=194863). + +<a name="download"></a> +## Add Project fields to TFS (On-premises XML) + +For team members to be able to view or modify new Project fields from the web portal or Team Foundation client, you must customize both the task WIT definition and update the Microsoft Project Mapping file. By making these changes, you maintain the data fields in both the Project plan and in the work tracking database. You can make these fields read-only or modifiable. You can use them to find work items by using queries and construct reports. Specifically, you can add fields that enable team members to specify their start and end dates for pinned tasks. By adding these fields to the task work item form, you can view and modify the start and end dates using a Team Foundation client. + +The following table provides the sequence of tasks to perform and related topics for completing these tasks. + +### Determine the Project fields to add to your team project + +If you want team members to schedule tasks manually from a Team Foundation client, you must add the Project fields that store the manual date and duration for tasks to the work item form and project mapping file. You can use the following information to determine which of these Project scheduling fields to add: +- To support manually scheduled tasks, add one or more of the pjTaskStartText, pjTaskFinishText, or pjTaskDurationText fields to the mapping file. You must map pj\*Text fields to String fields in Team Foundation. These fields accept text strings only. +- The pjTaskStart, pjTaskFinish, and pjTaskDuration fields contain the scheduled committed dates and duration of a task. + + >[!TIP] + >By default, these fields are mapped based on the process template that was used to create your team project. + +- The scheduling engine uses the pjTaskScheduledStart, pjTaskScheduledFinish, and pjTaskScheduledDuration fields to store the calculated dates and duration of an autoscheduled task. +- The pjTaskManual, pjTaskPlaceholder, and pjTaskWarning fields indicate whether a task is scheduled manually or automatically, whether a manual task has insufficient information to be scheduled, and whether a Project has identified a potential scheduling conflict with the start date, finish date, or duration, respectively, of a manually scheduled task. + +To learn more, see: +- [Available Fields](https://support.office.com/en-us/article/Available-fields-reference-615a4563-1cc3-40f4-b66f-1b17e793a460) +- [Customize the Microsoft Project field mapping file](../reference/customize-project-field-mapping-file.md) + + +###Add fields to the task work item type +To update a work item type, you add a `FIELD` element for each new field you want to track and a `CONTROL` element for each field you want to display on the work item form. You use the `witadmin` command line tool to export and import the definition file for each work item type. + +[!INCLUDE [temp](../_shared/process-editor.md)] + +For more information, see: +- [Add or modify a work item field](../customize/add-modify-field.md) +- [Add or modify work item fields to support reporting](../reference/add-or-modify-work-item-fields-to-support-reporting.md) + + +###Update the Microsoft Project Mapping File +The project mapping file determines how the fields in each task are mapped to fields in Team Foundation and how each field is published and refreshed. Each team project is associated with its own mapping file. You use the `TFSFieldMapping` command-line tool to download and upload the project mapping XML file. + +To learn more, see [TFSFieldMapping](../reference/upload-or-download-the-microsoft-project-mapping-file.md). + +## Related notes +- [Create your backlog and tasks using Project](create-your-backlog-tasks-using-project.md) \ No newline at end of file diff --git a/docs/work/office/storyboard-your-ideas-using-powerpoint.md b/docs/work/office/storyboard-your-ideas-using-powerpoint.md new file mode 100644 index 00000000000..3325c1dcb81 --- /dev/null +++ b/docs/work/office/storyboard-your-ideas-using-powerpoint.md @@ -0,0 +1,117 @@ +--- +title: Storyboard your ideas | VSTS & TFS +description: Turn your ideas and goals into something visual using the TFS Storypoint add-in to PowerPoint +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 432016A2-61E7-4863-99AB-61E4D74E28E7 +ms.manager: douge +ms.author: kaelli +ms.date: 05/10/2017 +--- + +# Storyboard your ideas using PowerPoint + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +With storyboarding, you turn your ideas and goals into something visual. Your ideas are easier for other people to understand, so they can give you constructive feedback, sooner. You can bring your ideas to life with storyboard shapes, text, animation, and all the other features that PowerPoint Storyboarding provides. + +## Use storyboard shapes and PowerPoint features + +1. If you're interfacing with TFS 2017 or VSTS, you must have [Office PowerPoint 2010 or later version installed](https://www.microsoftstore.com/store/msusa/en_US/pdp/productID.323024400). For version compatibility, see [Requirements and compatibility, Office](../../accounts/requirements.md#office). If you're interfacing with TFS 2013 or TFS 2015, you must have Office PowerPoint 2007 or later version installed. + +2. If you haven't installed a version of [Visual Studio (2013 or later)](https://www.visualstudio.com/downloads/download-visual-studio-vs) or the [Team Foundation Server Standalone Office Integration 2015 (free)](https://www.visualstudio.com/downloads/#team-foundation-server-office-integration-2015-update-3-1), you'll need to install one of these versions to create and modify storyboards. + + >[!NOTE] + >The only way to get the Team Foundation plug-in is by installing one of the latest editions of Visual Studio or the TFS Standalone Office Integration installer. TFS Office Integration 2015 supports connection to VSTS and TFS from Excel, Project, and the PowerPoint-based storyboarding tool.  + +3. Open Power Point Storyboarding and start with a blank slide. You should see the **Storyboarding** ribbon and **Storyboard Shapes** library. If you don't see the Storyboarding ribbon, see step 2. + + <img src="_img/IC652597.png" alt="Open PowerPoint Storyboarding" style="border: 2px solid #C3C3C3;" /> + + Or, you can open PowerPoint Storyboarding from the work item **Storyboarding** tab. + + <img src="_img/IC652012.png" alt="Start PowerPoint Storyboarding from work item" style="border: 2px solid #C3C3C3;" /> + + Or, from the web portal and the new work item form, click the **Start storyboarding** menu option from any valid work item. + + <img src="../backlogs/_img/add-work-item-start-storyboarding.png" alt="Work item form, Start storyboarding menu option" style="border: 2px solid #C3C3C3;" /> + +4. Add a background shape that's appropriate for your app. To add a shape, just drag it onto the slide. + + <img src="_img/IC652013.png" alt="Drag a shape onto the slide" style="border: 2px solid #C3C3C3;" /> + +5. Search for more shapes to complete your design. + + <img src="_img/IC652014.png" alt="Search for shapes" style="border: 2px solid #C3C3C3;" /> + +6. Create mores slides to show the flow of your app. Share them with your team to get early feedback on the design. + + <img src="_img/IC652599.png" alt="Develop your storyboard with multiple slides" style="border: 2px solid #C3C3C3;" /> + +>[!TIP] +>- Use animation to bring your user interface flow to life. +>- Take screenshots of your apps. For example, add a screenshot as the background of a master slide. +>- Use [Office MIX](https://mix.office.com/gallery/category/how-to) to create a demo of your feature. + +<a id="link-storyboard"> </a> +## Link your storyboard to a backlog item + +When you share your storyboards to a shared network location, you can link the storyboards to a backlog item. That way, your team members will be able to open the storyboards from the work items and annotate them with their suggestions. + +1. Save or upload your storyboard to a shared location that everyone on your team can access. + +2. If you started Power Point Storyboarding from a backlog item, then you are already linked to the initial item and you are done. + + Otherwise, open the **Links** tab or the **Storyboard Links** tab. + + <img src="_img/IC654069.png" alt="Open Storyboard Links to link to a work item" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >The **Storyboards** tab is no longer supported in the web form from VSTS or TFS 2017 with the new web form enabled. However, you can link to a storyboard from the **Links** tab using the Storyboard link. + +3. If you're not already connected to a team project, [connect now](../../connect/connect-team-projects.md). If you can't connect, [get added as a team member](../scale/multiple-teams.md#add-team-members). + + ![Connect to TFS](_img/IC652016.png) + +4. Then, link to a work item. + + ![Choose to link to a work item](_img/IC652017.png) + +5. Select a work item to link to. The next screenshot shows how to do that using a saved query. You can also do a simple search on the title, or just provide the ID. + + ![Select query to find work items](_img/IC652018.png) + + ![Find work items from the query to link to](_img/IC652019.png) + + ![Choose the work item to link to](_img/IC652020.png) + +6. Now the storyboard is linked to the work item. + + <img src="_img/IC657080.png" alt="Linked work item in Storyboard links dialog box" style="border: 2px solid #C3C3C3;" /> + +7. And, whoever views the work item can also access the storyboard. + + <img src="_img/IC652022.png" alt="Storyboard tab with linked storyboard" style="border: 2px solid #C3C3C3;" /> + +With PowerPoint Storyboarding, you can illustrate a new or a modified interface. You can capture existing user interfaces and build a storyboard from a collection of predefined storyboard shapes. Also, you can customize the slide layouts for your web, client, or phone applications. And, by linking the storyboard to the product backlog item or user story, you automatically share it with your team. + +## Related notes + +Start using Storyboarding with PowerPoint today by downloading the free plug-in to PowerPoint: +- [Team Foundation Server Office® Integration 2017](https://go.microsoft.com/fwlink/?LinkId=832491&clcid=0x409) + + +### Custom shapes +You can create your own shapes using [My Shapes](add-share-storyboard-shapes.md), which get saved to the following folder in a .sbsx file: + +<code><i>Drive</i>:\Users\<i>UserName</i>\AppData\Local\Microsoft\Team Foundation\6.0\PowerPoint\Shapes</code> + +<!--- +You can then share your custom shapes or import custom shapes developed by others in the Visual Studio community. +--> + + +### PowerPoint for Mac + +Support for a Mac OS is not supported. You need to use PowerPoint on the same computer where you have installed Visual Studio or the Team Foundation Server Standalone Office Integration 2015 in order to get the Team Foundation add-in. These applications require a Windows OS. + diff --git a/docs/work/office/sync-ps-tfs.md b/docs/work/office/sync-ps-tfs.md new file mode 100644 index 00000000000..235a89e35c5 --- /dev/null +++ b/docs/work/office/sync-ps-tfs.md @@ -0,0 +1,62 @@ +--- +title: Synchronize TFS-PS integration, third-party support | TFS +description: Synchronize work items in TFS with tasks in Project Server using a third-party solution +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 0CDB65B6-FA2D-41D1-8E1E-41E38F235762 +toc: show +ms.manager: douge +ms.author: kaelli +ms.date: 04/20/2017 +ms.topic: get-started-article +--- + +# Synchronize TFS with Project Server, third-party support + +<b>TFS 2017 | [TFS 2015 | TFS 2013](../tfs-ps-sync/synchronize-tfs-project-server.md)</b> + +>[!IMPORTANT] +>TFS 2017 and later versions no longer support native integration with Office Project Server. If you're working with an on-premises TFS 2015 or TFS 2013, see [Synchronize TFS with Project Server](../tfs-ps-sync/synchronize-tfs-project-server.md). + +If you are on a prior version of Team Foundation Server with the native integration installed and configured, the native integration will no longer work +once you upgrade to TFS 2017 or later version. + +For more information on why we no longer support this integration, please read this blog post, [Microsoft discontinuing Project Server/TFS Integration. Partner to provide solution](http://go.microsoft.com/fwlink/?LinkID=823693). + +## Synchronization support for TFS 2017 and Project Server + +If you are on TFS 2017 and want to integrate with Microsoft Project Server, you can do so by working with one of the following partners and their solutions. + +<h3 style="color:white">[![Tivitie](_img/tivitie-Blue2.png)](http://www.tivitie.com/projectconnect) Project Connect from Tivitie</h3> + +Keep your agile teams working in VSTS and TFS, the tool they are accustomed to, while providing portfolio and program leaders a broad view of the project portfolio with Project Connect. A unified PPM solution bridges gaps that are impacting productivity and the bottom line. Connecting Project Online with VSTS drives enhanced visibility & alignment - making sure the projects that the teams are working so hard on - are the right projects and deliver value to the organization. + +[Project Connect](http://www.tivitie.com/projectconnect) for VSTS offers a seamless approach to exchange critical information between development teams and project teams using Project Online and VSTS. + +**Marketplace extension**: [Project Connect](https://marketplace.visualstudio.com/items?itemName=TVT.TVT-PjO). + + +<h3 style="color:white">[![Go2Group](_img/tfs-ps-sync-go2group-logo.png)](https://www.go2group.com/connectall/)ConnectALL from Go2Group</h3> + +ConnectALL is an application integration solution that connects multiple tools and applications, enabling a company's development and management teams to collaborate efficiently and flawlessly across multiple development platforms. Easy to buy, easy to install, and easy to use, ConnectALL meets strict enterprise governance requirements. It leverages Enterprise Service Bus (ESB) technology to achieve an enterprise-grade infrastructure with clustering, multi-tenancy architecture, multiple server support both in the cloud and on-premises, traceability, and audit trails. This type of deployment yields the highest operational efficiency and lowest ongoing maintenance efforts through a single server instance. The architecture encourages collaboration-at-scale between departments while ensuring secure communication. + +The [ConnectALL integration platform](https://www.go2group.com/connectall/) offers a simple licensing model and affordable pricing for small to large installations. It is priced per application server instance, with unlimited users and unlimited projects accessing that application service. + +ConnectALL is from Go2Group, a global provider of IT delivery solutions that help enterprises achieve businesses agility. Founded in 2002, the company provides products and services for ALM (Application Lifecycle Management), DevOps, cloud, and agile practices. It specializes in complex integration projects involving multiple platforms and multiple teams. + +**Marketplace extension**: [ConnectALL](https://marketplace.visualstudio.com/items?itemName=go2group.ConnectALL). + +<h3 style="color:white">[![Tasktop](_img/tfs-ps-sync-tas-logo.png)](http://www.tasktop.com/product-overview)Tasktop</h3> + +Tasktop provides enterprise-grade integration between Microsoft Project Server and TFS/Visual Studio VSTS, as well as to most other popular Agile, DevOps and Systems Development Lifecycle (SDLC) tools. This integration automates the flow of artifacts (such as work items and tasks) across these tools, eliminating wasted time and bottlenecks while increasing velocity, collaboration and even employee satisfaction! In addition, Tasktop can automatically collect the activity data into a central database, enabling the creation of consolidated dashboards and reports, allowing for greater project visibility and artifact traceability. + +[Tasktop's unique model-based integration approach](https://www.tasktop.com/product-overview) dramatically reduces the time and effort it takes to integrate tools; this is particularly important for larger organizations with many tools (and tool instances), hundreds of projects within those tools, thousands of users, and millions of work items and tasks. + +**Marketplace extension**: [Tasktop Integration Hub](https://marketplace.visualstudio.com/items?itemName=tasktop.tasktop-integration-hub). + + +## Remove TFS-Project Server integration for a TFS instance upgraded to TFS 2017 + +When you upgrade TFS 2015 or earlier version which has the native TFS-Project Server integration configured, remnants of the integration remain. You may choose to ignore them, or you can remove them to avoid receiving error messages. See [Remove integration of TFS with Project Server](remove-tfs-ps-integration.md). + + diff --git a/docs/work/office/tfs-office-integration-issues.md b/docs/work/office/tfs-office-integration-issues.md new file mode 100644 index 00000000000..3bc7adfe242 --- /dev/null +++ b/docs/work/office/tfs-office-integration-issues.md @@ -0,0 +1,106 @@ +--- +title: TFS-Office integration issues | VSTS & TFS +description: Resolve common integration issues that occur with TFS Office integration, resolve TF86001 +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 819EA180-2BAC-46DB-A17E-A5179E6BEADC +ms.manager: douge +ms.author: kaelli +ms.date: 03/28/2017 +--- + +# TFS-Office integration issues + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +If you don't see the Team ribbon in Excel, as shown in the image below, you may be able to resolve the issue with the procedures provided in this topic. + +<img src="_img/tfs-office-issues-excel-team-ribbon.png" alt="Excel TFS-Office integration Team ribbon" style="border: 2px solid #C3C3C3;" /> + + +## Enable the Team Foundation Add-in + +1. From the Excel **File** menu, choose **Options**. +2. Choose Add-ins and from the **Manage** pick list, choose **COM Add-ins**, and then choose **Go**. + + <img src="_img/tfs-office-issues-excel-open-com-add-ins.png" alt="Excel Options, Add-ins, Choose Com Add-ins" style="border: 2px solid #C3C3C3;" /> + +3. Make sure that a check is placed in the **Team Foundation Add-in** checkbox. + + <img src="_img/tfs-office-issues-excel-tfs-add-in-checkbox.png" alt="COM Add-ins dialog, Team Foundation Add-in checked" style="border: 2px solid #C3C3C3;" /> + +4. Restart Excel. You should now see the Team ribbon. + +If the Team ribbon does not appear at next launch, the load behavior of the add-in may have changed and you will need to complete the following steps: + +### Update the Registry +1. Launch the Registry Editor from your Windows Start Menu by typing regedit in the Search or Run box. + + <img src="_img/tfs-office-issues-run-regedit.png" alt="Run regedit command" style="border: 2px solid #C3C3C3;" /> + +2. Navigate to one of the following paths containing the **TFCOfficeShim.Connect.[version]** folder: + + >[!NOTE] + >If there are multiple folders with the same name, select the one with the highest version number. + + - HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\Excel\Addins (if this key does not exist, try one of the options below) + - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\Excel\Addins + - HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Office\Excel\Addins + + <img src="_img/tfs-office-issues-regedit-loadbehavior-key.png" alt="LoadBehavior entry" style="border: 2px solid #C3C3C3;" /> + + +3. Double click to open **LoadBehavior** and set the value data field to **3** (if the value is **0**, the Team ribbon will not load). + +4. Press **OK** and restart Excel. + + To learn more about the LoadBehavior entry, see [Registry Entries for VSTO Add-ins, LoadBehavior values](https://msdn.microsoft.com/library/bb386106.aspx#LoadBehavior). + +##Office Add-in doesn't load or “Open in Excel” from Visual Studio fails + +To connect to TFS, go to the Team ribbon and choose **New List**. If the New List dialog fails to open, or you receive TF86001 or similar error message, follow the steps below to ensure that policy redirection is configured. + +<img src="_img/tfs-office-issues-tf86001.png" alt="TF86001 error message, Team Foundation was unable to load the Office Add-in" style="border: 2px solid #C3C3C3;" /> + +This error is typically caused when you install Visual Studio before you install Office Excel or Project. In this instance, the Visual Studio Tools for Office Run Time are not correctly configured. To correct this error, you must repair Visual Studio. + + +### Prerequisites +Install Visual Studio to ensure that you have access to the Visual Studio Command Prompt and the [Gacutil.exe (Global Assembly Cache Tool)](https://msdn.microsoft.com/library/ex0ss12c.aspx). If you do not have Visual Studio, you can install the [Visual Studio Community edition for free](https://www.visualstudio.com/downloads/). + +### Run the Gacutil tool + +0. Open the Visual Studio Command Prompt and choose to run it as an administrator. + + <img src="_img/tfs-office-issues-run-developer-cmd-prompt.png" alt="Deve;p[er Cp,,[amd {rp,[t fpr Vosia; Stidop, Run as administrator" style="border: 2px solid #C3C3C3;" /> + +0. **For Office 2016 and Office 2013**, run the following commands: + + ``` + GACUTIL /I C:\Windows\assembly\GAC_MSIL\Policy.12.0.Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Policy.12.0.Microsoft.Office.Interop.Excel.dll + ``` + + ``` + GACUTIL /I C:\Windows\assembly\GAC_MSIL\Policy.12.0.office\15.0.0.0__71e9bce111e9429c\Policy.12.0.Office.dll + ``` + + **For Office 2010**, run the following commands: + + ``` + GACUTIL /I C:\Windows\assembly\GAC_MSIL\Policy.12.0.Microsoft.Office.Interop.Excel\14.0.0.0__71e9bce111e9429c\Policy.12.0.Microsoft.Office.Interop.Excel.dll + ``` + + ``` + GACUTIL /I C:\Windows\assembly\GAC_MSIL\Policy.12.0.office\14.0.0.0__71e9bce111e9429c\Policy.12.0.Office.dll + ``` +0. Once you've successfully run the `GACUTIL` commands, restart Excel and look for the Team Foundation Add-in. + +If the above steps are unsuccessful, try the following steps: +1. Perform a full [repair of Office](https://support.office.com/article/Repair-an-Office-application-7821d4b6-7c1d-4205-aa0e-a6b40c5bb88b?ui=en-US&rs=en-US&ad=US). +2. Uninstall Office and Reinstall Office. +3. Contact the Microsoft support team. + + +## Related notes + +- [Add or remove add-ins](https://support.office.com/article/Add-or-remove-add-ins-0af570c4-5cf3-4fa9-9b88-403625a0b460) diff --git a/docs/work/office/track-work-vsts-tfs.md b/docs/work/office/track-work-vsts-tfs.md new file mode 100644 index 00000000000..6f57d3f596b --- /dev/null +++ b/docs/work/office/track-work-vsts-tfs.md @@ -0,0 +1,119 @@ +--- +title: Work in Excel or Project | VSTS & TFS +description: Use Office Excel or Project to track work and plan projects in conjuction with work item tracking in VSTS & TFS +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: fbd7b5e1-e4c4-4976-9596-236e980fdb3b +ms.manager: douge +ms.author: kaelli +ms.date: 03/31/2017 +--- +# Work in Excel or Project + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +You can communicate with Team Foundation Server by using Office Excel and Office Project. You can decide to either work in an online mode where you are connected to the server that hosts the team project that you have accessed, or in an offline mode where you are accessing the local computer and document. + +> [!IMPORTANT] +> You may receive the following error if you install Office 2010 on the same computer as a previous version of Office. +> +> **Team Foundation Error** +> +> **Interface not registered (Exception from HRESULT: 0x80040155)** +> +> You may be able to resolve this error by repairing Office. You can access the Repair option by opening the **Control Panel**, choose **Uninstall or change a program**, open the context menu for Office 2010, and then choose **Change**. See also, [TFS-Office integration issues](tfs-office-integration-issues.md). + +You can start work from Excel, Project, or Team Explorer. Your worksheet or project plan can be tied to a list of work items or a work item query. + +To work in Excel, see [Bulk add work items with Excel](bulk-add-modify-work-items-excel.md). + +![Open Query Results in Office Excel](_img/excelseq_1.png "ExcelSeq_1") + +To work in Project, see [Create your backlog and tasks using Project](create-your-backlog-tasks-using-project.md). + +![Exporting Work Items to Office Project](_img/officeprojseq_1.png "OfficeProjSeq_1") + + + + When you import work items into Excel or Project, local copies of your work items are created. The data in the local document at first matches the data in the database, but you or other team members can change the data about work items and cause the two to differ. To view the most recent changes from the database, refresh the document. This downloads the latest values in the data store to your local document. To write changes from the document to the database, publish the changes. Publishing uploads the changes you made to the work item tracking data store. + +## Work offline and reconnect to VSTS and TFS +One advantage of working in Excel or Project is that you can work offline and add or modify work items. The following procedures show you how to disconnect an Excel work item list or a Project plan from VSTS and TFS and later reconnect to synchronize the document with the work item database. + +> [!NOTE] +> If the team project that contains work items for your Excel or Project document is moved to a different account, project collection or TFS instance, you must reconfigure the server to which the document connects. For more information, see [Connect to team projects, Connect to Excel or Project](../../connect/connect-team-projects.md#excel-project). + + +<a name="WorkingOffline"></a> +## Disconnect a document file from the network + +To disconnect a an Excel or Project document file from the network: + +1. Open the document that you want to change while you are offline. + +2. Refresh the work item list to retrieve the latest information from the work item database. + - If you are using Excel, on the **Team** ribbon, in the **Work Items** group, choose **Refresh**. + - If you are using Project, on the **Team** menu, choose **Refresh**. + +3. If you are using Excel, add to the work item list the columns for all fields that you want to modify. + + You can't add columns when the work item list is disconnected from the server. + +4. Disconnect your computer from the network, or save the work item list file and copy it to another computer. + + An error message might appear that tells you that the Office program could not establish a connection with Team Foundation Server. + +5. Modify or update the work item list as needed. + + > [!NOTE] + > You can't create most types of links between work items when the work item document is disconnected from the system. The exceptions are parent-child links in an Excel tree list, and both parent-child and predecessor-successor links in a Project plan. + +<a name="ReconnectingToTFS"></a> +### Reconnect a file to VSTS and TFS + +To reconnect an Excel or Project document file: + +1. Reconnect your computer to the network, or copy the file to a computer that is connected to VSTS and TFS. + +2. If you changed the document while you were offline, follow one of these steps: + - If you are using Excel, on the **Team** ribbon, in the **Work Items** group, choose **Publish**. + - If you are using Project, on the **Team** menu, choose **Publish Changes**. + +3. If you didn't change the document while you were offline, follow one of these steps: + - If you are using Excel, on the **Team** ribbon, in the **Work Items** group, choose **Refresh**. + - If you are using Project, on the **Team** menu, choose **Refresh**. + +4. Resolve any data validation errors or conflicts that occur. + +## Related notes + +- [Connect to team projects, Connect to Excel or Project](../../connect/connect-team-projects.md#excel-project) +- [Bulk add or modify work items with Excel](bulk-add-modify-work-items-excel.md) +- [Create your backlog and tasks using Project](create-your-backlog-tasks-using-project.md) +- [Create your backlog](../backlogs/create-your-backlog.md) +- [Requirements and compatibility](../../accounts/requirements.md) + + +### Can I open a query in Excel or Project from the web portal? + +To open Excel from the web portal, install the [VSTS Open in Excel](https://marketplace.visualstudio.com/items?itemName=blueprint.vsts-open-work-items-in-excel) Marketplace extension. Otherwise, you can open [Excel](bulk-add-modify-work-items-excel.md) or [Project](create-your-backlog-tasks-using-project.md) and then open a query that you've created in the web portal. + +<a name="CT_ResolvingPublishErrors"></a> +## Resolve publishing errors +To resolve publishing errors that arise when working in Excel or Project, see the following topics: + +- [Resolve data conflicts](resolve-excel-data-conflicts-publish-refresh.md): + A data conflict occurs when one team member changes a field value in either Microsoft Project or Microsoft Excel at the same time another team member changes the same field in Team Foundation Server. + +- [Resolve data validation errors](resolve-excel-data-validation-errors.md): + A data validation error occurs if a team member changes a work item in a way that violates the rules for that type of work item. + +- [Resolve invalid links in a tree hierarchy](resolve-excel-invalid-links-tree-list.md): + An invalid link occurs if a team member views work items in Excel as a hierarchy or tree list, and moves a work item or sorts the list so that it breaks the dependencies between work items. You can resolve this error by reviewing the error message and repositioning work items to reflect the work item structure. + +- [Address inaccuracies published for summary values](../../report/address-inaccuracies-published-for-summary-values.md): + If you determine that hours are counted twice in reports that contain task hours, you can correct the problem by using the Work Items With Summary Values team query. + + + diff --git a/docs/work/overview.md b/docs/work/overview.md new file mode 100644 index 00000000000..cdecfef40ba --- /dev/null +++ b/docs/work/overview.md @@ -0,0 +1,76 @@ +--- +title: Agile tools - Scrum, Kanban, and more | VSTS & TFS +description: Use the web portal to implement your Scrum or Kanban process, plan and track work, and monitor progress and trends +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 28C02AE8-CF8D-4B6E-8301-F46A5622E6C4 +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +--- + +# About Agile tools and Agile project management + +[!INCLUDE [temp](_shared/version-vsts-tfs-all-versions.md)] + +You plan and track your project using the suite of Agile tools you access from the web portal. Agile tools support the core Agile methods—Scrum and Kanban—used by software development teams today. Scrum tools support defining and managing work within sprints, setting capacity, and tracking tasks. Kanban tools allow you to manage a continuous flow of work via an interactive sign board. + +You access all Agile tools from the **Work** hub. If you're new to Agile, see [What is Agile?](https://www.visualstudio.com/learn/what-is-agile/) for an overview. + +<img src="_img/plan-intro.png" alt="Work hub, product backlog page" style="border: 2px solid #C3C3C3;" /> + +Most Agile tools are [scoped to a team](about-teams-and-settings.md). This supports team autonomy as well as scaling the system. + +> [!div class="mx-tdBreakAll"] +> |Backlogs |Task boards |Kanban boards | Other | +> |-------------|----------|---------|---------| +> |- [Product backlog](backlogs/create-your-backlog.md)<br/>- [Portfolio (Epics, Features) backlogs](backlogs/define-features-epics.md)<br/>- [Sprint backlogs](scrum/sprint-planning.md)|- [Task boards](scrum/task-board.md)<br/>- [Sprint burndown](scrum/sprint-burndown.md) <br/>- [Capacity planning](scale/capacity-planning.md) |- [Kanban board](kanban/kanban-basics.md)<br/>- [Task checklists](kanban/add-task-checklists.md)<br/>- [Epics & Features boards](kanban/kanban-epics-features-stories.md) |- [Delivery plans](scale/review-team-plans.md)<br/>- [Forecast](scrum/forecast.md)<br/>- [Velocity](../report/guidance/team-velocity.md)<br/>| + +>[!NOTE] +>To understand the differences between backlogs, boards and Delivery plans, see [Backlogs, boards, and plans](backlogs-boards-plans.md). + + +## Kanban method and tools +Kanban uses a visual interactive board to plan and show progress using cards. Your Kanban board is fully customizable to support the workflow used by your team. + +[![Configure Kanban board](_img/gs-planning-configure-kanban.png)](./kanban/kanban-basics.md)[![Update the Kanban board](_img/gs-planning-track-kanban.png)](./kanban/kanban-basics.md)[![Monitor progress](_img/gs-planning-monitor-kanban.png)](../Report/guidance/cumulative-flow.md) + +You update the status of work by dragging card to another column on the Kanban board. You can even change the order of items as you move a card to a new column. + +![Reorder cards while changing columns](https://i3-vso.sec.s-msft.com/dynimg/IC822185.gif) + +## Define work items and create your backlog + +You build your project plan by creating a backlog of work items that represent the features, requirements, user stories, or other work to perform. Portfolio backlogs provide support for organizing work in a hierarchical fashion and tracking major product initiatives or scenarios that rely on many stories or requirements. Different types of work items help you track different types of work, such as user stories, tasks, bugs, issues, and more. + +[![Define stories](_img/gs-planning-define-stories.png)](./backlogs/create-your-backlog.md)[![Organize backlog](_img/gs-planning-organize-backlog.png)](./backlogs/organize-backlog.md)[![Manage bugs](_img/gs-planning-manage-bugs.png)](./backlogs/manage-bugs.md)[![Manage issues](_img/gs-planning-manage-issues.png)](./backlogs/manage-issues-impediments.md) + + +## Scrum method and tools +The Scrum method uses sprints to plan work to perform by a team within a specific time period and cadence. To get started, several sprints are predefined for your team. If you're new to Scrum, get an overview from [What is Scrum?](https://www.visualstudio.com/learn/what-is-scrum/). + +[![Schedule sprints](_img/gs-planning-define-sprints.png)](./scrum/define-sprints.md)[![Plan a sprint](_img/gs-planning-plan-sprint.png)](./scrum/sprint-planning.md)[![Monitor sprint progress](_img/gs-planning-monitor-sprint.png)](./scrum/task-board.md)[![Forecast](_img/gs-planning-forecast.png)](./scrum/forecast.md) + +You can quickly assign work items to a sprint by dragging and dropping them from the product backlog to the sprint. + + +## Try this next + +Take these tools for a test run by [creating an account on VSTS for free](../accounts/create-account-msa-or-work-student.md). From there, you're ready to [create your backlog](backlogs/create-your-backlog.md). + +Once you've started tracking work, you'll want to monitor and track progress, identify trends, and share your plans. See [Charts, dashboards, and widgets](../report/overview.md). + + +## Related notes + +You access tools provided by VSTS and TFS by connecting from a client to the server, either in the cloud or on-premises. Some web portal tools require additional Visual Studio Subscriptions or Advanced/VS Enterprise access. To learn more, see [Permissions and access for work tracking](permissions-access-work-tracking.md). + +For an overview of all your customization options, see [Customize your work tracking experience](./customize/customize-work.md). + + +### Work across team projects + +If you work in VSTS and TFS 2017.1 or later version, you can use your account hub to view and quickly navigate to teams, team projects, branches, work items, pull requests and other objects that are relevant to you. For details, see [Work effectively from your account hub](../connect/account-home-pages.md). + + + \ No newline at end of file diff --git a/docs/work/permissions-access-work-tracking.md b/docs/work/permissions-access-work-tracking.md new file mode 100644 index 00000000000..82ec1bedf7e --- /dev/null +++ b/docs/work/permissions-access-work-tracking.md @@ -0,0 +1,355 @@ +--- +title: Set permissions and access for tracking +description: How to guide for setting permissions and access levels to support work tracking tasks (VSTS and Team Foundation Server) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 5AD0BF62-C91E-46DD-8C1A-C8D1F8F8D05F +ms.manager: douge +ms.author: kaelli +ms.date: 07/13/2017 +--- + + +# Permissions and access for work tracking + +[!INCLUDE [temp](_shared/version-vsts-tfs-all-versions.md)] + +You can use the majority of work tracking functions and features that Team Services or TFS provides if you are added as a team member, which adds you to the Contributors group. The most common built-in groups include Readers, Contributors, and Project Administrators. These groups are assigned the default permissions for tracking work as listed below. + +In addition to permissions, access to premium features are controlled by one of three access levels: Basic, Stakeholder, Advanced or VS Enterprise. Contributors and administrators should be added to Basic access. Stakeholder access is available to support free access to a limited set of features by an unlimited set of stakeholders. For more details on Stakeholder access, jump to [Stakeholder access](#stakeholder-access). + +The team administrator role supports configuration of team settings. To be added as a team administrator, see [Add team administrators](scale/add-team-administrator.md). + +<table> +<tr valign="bottom"> +<th width="310px">Task</th> +<th>Stakeholders</th> +<th>Readers</th> +<th>Contributors</th> +<th>Team Admins</th> +<th width="16%">Account Owner/<br/>Project Admins</th> +</tr> +<tbody valign="top" align="center"> +<tr> +<td align="left">View work items, including bugs, requirements, and tasks</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + + +<tr> +<td align="left">Create and edit work items, follow a work item</td> +<td>![checkmark](_img/checkmark.png)</td> +<td> </td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Change work item type </td> +<td>![checkmark](_img/checkmark.png)</td> +<td> </td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Move or delete work items </td> +<td> </td> +<td> </td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Search and query work items, save work item queries +</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>Can't save queries</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +<tr> +<td align="left">View backlogs, boards, and plans +</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Provide feedback +</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Request feedback +</td> +<td> </td> +<td> </td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Agile tools (Kanban boards, backlogs, sprint planning, portfolio management) +</td> +<td> limited interactions </td> +<td> view only</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Configure Agile tools, set team defaults +</td> +<td> </td> +<td> </td> +<td> </td> +<td>![checkmark](_img/checkmark.png)</td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +<tr> +<td align="left">[Create and add tags](./track/add-tags-to-work-items.md)</td> +<td>Can assign existing tags</td> +<td> </td> +<td>![check mark](_img/checkmark.png)</td> +<td>![check mark](_img/checkmark.png)</td> +<td>![check mark](_img/checkmark.png)</td> + +</tr> + + +<tr> +<td align="left">View, add, and configure Delivery Plans</td> +<td> </td> +<td>view only</td> +<td>![check mark](_img/checkmark.png)</td> +<td>![check mark](_img/checkmark.png)</td> +<td>![check mark](_img/checkmark.png)</td> + +</tr> + + + +<tr> +<td align="left">Customize project information (area paths, iteration paths, and work tracking processes) +</td> +<td> </td> +<td> </td> +<td> </td> +<td> </td> +<td>![checkmark](_img/checkmark.png)</td> +</tr> + +</tbody> +</table> + + +## Team administrator role and permissions + +The following table summarizes a subset of the default permissions assigned to the team project Readers, Contributors and Project Administrators groups and the Team Administrator role. Team admin permissions extend only to the team for which they're an administrator. Project administrator permissions extend across all teams defined for the team project. + + +<table> + +<tr valign="bottom"> +<th width="38%">Permission</th> +<th width="10%">Readers</th> +<th width="16%">Contributors</th> +<th width="18%">Team Administrators</th> +<th width="18%">Project Administrators</th> +</tr> +<tbody valign="top" align="center"> +<tr> + +<td align="left">[Add a team administrator](scale/add-team-administrator.md) </p> +</td> +<td><p>  </p></td> +<td><p>  </p></td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +</tr> +<tr> + +<td align="left"> +[Add team members](scale/multiple-teams.md) </p> +</td> +<td><p>  </p></td> +<td><p>  </p></td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +</tr> +<tr> + +<td align="left">[View shared work item queries](track/using-queries.md)</p> +</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +</tr> +<tr> + +<td align="left"> +[Manage shared query and query folder permissions](track/set-query-permissions.md)<br/>(Contribute, Delete, Manage Permissions) +</p> +</td> +<td><p>  </p></td> +<td><p>  </p></td> +<td><p>  </p></td> +<td>![checkmark](_img/icons/checkmark.png)</td> +</tr> + + + +</tbody> +</table> + + +## Test management permissions + +Area permissions for web-based test case management and test execution control access to the following actions. + +The **Manage test suites** permission enables users to: +- Create and modify test suites +- Add or remove test cases to/from test suites +- Change test configurations associated with test suites +- Modify the suite hierarchy by moving a test suite + +The **Manage test plans** permission enables users to: +- Create and modify test plans +- Add or remove test suites to or from test plans +- Change test plan properties such as build and test settings + +Additional test management permissions are assigned at the team project level and include the ability to create, delete, and view test runs, and manage test configurations and environments. See [Project, object, and test-level permissions](../security/permissions.md#project_test). + + + +## Modify shared team project resources + +<table> +<tr valign="bottom"> +<th width="38%">Permission</th> +<th width="10%">Readers</th> +<th width="16%">Contributors</th> +<th width="18%">Team Administrators</th> +<th width="18%">Project Administrators</th> +</tr> +<tbody valign="top" align="center"> +<tr> +<td align="left">Area node: [Edit work items under the node](customize/set-area-paths.md) +</td> +<td align="left"><p>  </p></td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +</tr> +<tr> +<td align="left">[Area nodes and Iteration nodes: Create, delete, edit child nodes](customize/set-iteration-paths-sprints.md) +</td> +<td><p>  </p></td> +<td><p>  </p></td> +<td><p>  </p></td> +<td>![checkmark](_img/icons/checkmark.png)</td> +</tr> +<tr> +<td align="left">View project-level information +</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +<td>![checkmark](_img/icons/checkmark.png)</td> +</tr> + +<tr> +<td align="left">Edit project-level information <br/>(This permission grants users access to all team administration tasks across all teams defined for the team project.) +</td> +<td><p>  </p></td> +<td><p>  </p></td> +<td><p>  </p></td> +<td>![checkmark](_img/icons/checkmark.png)</td> +</tr> + + +</tbody> +</table> +**Edit project-level information** includes the ability to perform these tasks for the team project: +- Add and administer teams and all team-related features +- Create and modify areas and iterations +- Edit check-in policies +- Edit shared work item queries +- Edit team project level permission ACLs +- Create and modify global lists +- Edit [event subscriptions](../security/permissions.md#alerts) (email or SOAP) on team project level events. + + +<a id="stakeholder-access"></a> +## Stakeholder access + +Stakeholder access supports business owners and analysts and other team members who don't contribute to code, build, and test activities. They contribute by adding ideas to the backlog, adding context and information to work items, and reviewing status and progress. All members of an organization who don't use Visual Studio but want to contribute to work item tracking and monitor progress can be assigned as a stakeholder. + +Stakeholder access provides free access to VSTS and to on-premises TFS team projects. Stakeholders don't have to have a client access license (CAL). This view restricts functionality so that your organization complies with the end-user license agreement for Team Foundation Server. For more information, see [Visual Studio licensing white paper](http://go.microsoft.com/fwlink/?LinkId=255102). + +Only account owners or members of the [Team Foundation Server Administration group](../security/set-project-collection-level-permissions.md) can add accounts to get Stakeholder access. For information on adding stakeholder accounts: + + **VSTS:**  [Add users in Visual Studio Team Services](../accounts/add-account-users-assign-access-levels.md) + **On-premises TFS:**  [Change access levels](../security/change-access-levels.md) + +With stakeholder access, anyone on your team can check project status and provide feedback. Stakeholders can track project priorities and provide direction, feature ideas, and business alignment to a team. They can contribute to project plans by adding and modifying work items. + +Stakeholders contribute to team projects through the web portal using any supported browser. Within a team project, stakeholders can perform the following primary tasks by navigating to a hub/page or their account profile. For a comparison chart of stakeholder versus basic access, see the [Feature Matrix](https://www.visualstudio.com/vsts/compare-features/). + +To learn more about stakeholder access, see [Work as a stakeholder](../quickstart/get-started-stakeholder.md). + + +<a id="grant-add-permissions"></a> + +## Grant team members additional permissions + +For teams to work autonomously, you may want to provide them with permissions that they don't have by default. Suggested tasks include providing team administrators or team leads permissions to: + +- [Create and edit child nodes under their default area path](how-to/set-permissions-access-work-tracking.md) +- [Create and edit child nodes under an existing iteration node](how-to/set-permissions-access-work-tracking.md) +- [Create shared queries and folders under the Shared Queries folder](track/set-query-permissions.md). + +By default, team members inherit the permissions afforded to members of the team project Contributors group. Members of this group can add and modify source code, create and delete test runs, and create and modify work items. They can collaborate with other team members and [check in work to the team's code base (TFVC)](../tfvc/check-your-work-team-codebase.md) or [collaborate on a Git team project](../git/gitquickstart.md). + +![Default permissions assigned to team contributors](scale/_img/default-permissions-assigned-to-team-contributors.png) + +If your on-premises TFS deployment includes reporting or SharePoint Products, add users to those resources. See [Add users to a team project](../accounts/add-users.md). + + +## Related notes + +For a simplified view of permissions assigned to built-in groups, see [Permissions and access](../security/permissions-access.md). For a comprehensive list of all permissions and default groups, see the [Permissions reference for TFS](../security/permissions.md). + +* [Set permissions and access for work tracking](how-to/set-permissions-access-work-tracking.md) +* [Get started as a Stakeholder](../quickstart/get-started-stakeholder.md) +* [Add another team](scale/multiple-teams.md) +* [Configure team settings](scale/manage-team-assets.md) + +For a complete reference of all built-in groups and permissions, see [Permissions and groups](../security/permissions.md). + +For information about assigning access levels and supporting stakeholder access, see: +- **VSTS**: [Add users and assign licenses in Visual Studio Team Services](../accounts/add-account-users-assign-access-levels.md) +- **TFS**: [Change access levels](../security/change-access-levels.md) + diff --git a/docs/work/process/_img/add-a-field-pick-list-options.png b/docs/work/process/_img/add-a-field-pick-list-options.png new file mode 100644 index 00000000000..2ab9064ae28 Binary files /dev/null and b/docs/work/process/_img/add-a-field-pick-list-options.png differ diff --git a/docs/work/process/_img/add-a-field-pick-list-up1.png b/docs/work/process/_img/add-a-field-pick-list-up1.png new file mode 100644 index 00000000000..201e4b968b4 Binary files /dev/null and b/docs/work/process/_img/add-a-field-pick-list-up1.png differ diff --git a/docs/work/process/_img/admin-process-select-process.png b/docs/work/process/_img/admin-process-select-process.png new file mode 100644 index 00000000000..bd356b4cf25 Binary files /dev/null and b/docs/work/process/_img/admin-process-select-process.png differ diff --git a/docs/work/process/_img/boolean-checkbox.png b/docs/work/process/_img/boolean-checkbox.png new file mode 100644 index 00000000000..e40a3916b44 Binary files /dev/null and b/docs/work/process/_img/boolean-checkbox.png differ diff --git a/docs/work/process/_img/boolean-toggle.png b/docs/work/process/_img/boolean-toggle.png new file mode 100644 index 00000000000..dc0c5fc5f03 Binary files /dev/null and b/docs/work/process/_img/boolean-toggle.png differ diff --git a/docs/work/process/_img/cpcontrols-add-custom-control.png b/docs/work/process/_img/cpcontrols-add-custom-control.png new file mode 100644 index 00000000000..be5678e10b4 Binary files /dev/null and b/docs/work/process/_img/cpcontrols-add-custom-control.png differ diff --git a/docs/work/process/_img/cpfield-add-boolean-field-to-bug.png b/docs/work/process/_img/cpfield-add-boolean-field-to-bug.png new file mode 100644 index 00000000000..55d75940a64 Binary files /dev/null and b/docs/work/process/_img/cpfield-add-boolean-field-to-bug.png differ diff --git a/docs/work/process/_img/cpfield-add-existing-field.png b/docs/work/process/_img/cpfield-add-existing-field.png new file mode 100644 index 00000000000..112f35d6279 Binary files /dev/null and b/docs/work/process/_img/cpfield-add-existing-field.png differ diff --git a/docs/work/process/_img/cpfield-add-field-to-bug-type-integer-up1.png b/docs/work/process/_img/cpfield-add-field-to-bug-type-integer-up1.png new file mode 100644 index 00000000000..e67e610c06b Binary files /dev/null and b/docs/work/process/_img/cpfield-add-field-to-bug-type-integer-up1.png differ diff --git a/docs/work/process/_img/cpfield-add-html-field-to-bug.png b/docs/work/process/_img/cpfield-add-html-field-to-bug.png new file mode 100644 index 00000000000..6b09ffdced4 Binary files /dev/null and b/docs/work/process/_img/cpfield-add-html-field-to-bug.png differ diff --git a/docs/work/process/_img/cpfield-bug-customer-ticket-options.png b/docs/work/process/_img/cpfield-bug-customer-ticket-options.png new file mode 100644 index 00000000000..d1c73b287eb Binary files /dev/null and b/docs/work/process/_img/cpfield-bug-customer-ticket-options.png differ diff --git a/docs/work/process/_img/cpfield-bug-form-customized-customer-ticket.png b/docs/work/process/_img/cpfield-bug-form-customized-customer-ticket.png new file mode 100644 index 00000000000..fe0182c0b6a Binary files /dev/null and b/docs/work/process/_img/cpfield-bug-form-customized-customer-ticket.png differ diff --git a/docs/work/process/_img/cpfield-bug-new-field.png b/docs/work/process/_img/cpfield-bug-new-field.png new file mode 100644 index 00000000000..ab10c8efbcc Binary files /dev/null and b/docs/work/process/_img/cpfield-bug-new-field.png differ diff --git a/docs/work/process/_img/cpfield-choose-select-process.png b/docs/work/process/_img/cpfield-choose-select-process.png new file mode 100644 index 00000000000..3d935296f1c Binary files /dev/null and b/docs/work/process/_img/cpfield-choose-select-process.png differ diff --git a/docs/work/process/_img/cpfield-choose-wit.png b/docs/work/process/_img/cpfield-choose-wit.png new file mode 100644 index 00000000000..2553768c23a Binary files /dev/null and b/docs/work/process/_img/cpfield-choose-wit.png differ diff --git a/docs/work/process/_img/cpfield-customer-ticket-layout.png b/docs/work/process/_img/cpfield-customer-ticket-layout.png new file mode 100644 index 00000000000..a7a7d288ce9 Binary files /dev/null and b/docs/work/process/_img/cpfield-customer-ticket-layout.png differ diff --git a/docs/work/process/_img/cpfield-delete-confirmation.png b/docs/work/process/_img/cpfield-delete-confirmation.png new file mode 100644 index 00000000000..cff6c2e6f31 Binary files /dev/null and b/docs/work/process/_img/cpfield-delete-confirmation.png differ diff --git a/docs/work/process/_img/cpfield-delete-field.png b/docs/work/process/_img/cpfield-delete-field.png new file mode 100644 index 00000000000..66d0c3cf5fc Binary files /dev/null and b/docs/work/process/_img/cpfield-delete-field.png differ diff --git a/docs/work/process/_img/cpfield-edit-boolean-field-options-up1.png b/docs/work/process/_img/cpfield-edit-boolean-field-options-up1.png new file mode 100644 index 00000000000..606807f2144 Binary files /dev/null and b/docs/work/process/_img/cpfield-edit-boolean-field-options-up1.png differ diff --git a/docs/work/process/_img/cpfield-hide-inherited-field.png b/docs/work/process/_img/cpfield-hide-inherited-field.png new file mode 100644 index 00000000000..61e82e94691 Binary files /dev/null and b/docs/work/process/_img/cpfield-hide-inherited-field.png differ diff --git a/docs/work/process/_img/cpfield-identity.png b/docs/work/process/_img/cpfield-identity.png new file mode 100644 index 00000000000..765d09018e3 Binary files /dev/null and b/docs/work/process/_img/cpfield-identity.png differ diff --git a/docs/work/process/_img/cpfield-relabel-customer-ticket.png b/docs/work/process/_img/cpfield-relabel-customer-ticket.png new file mode 100644 index 00000000000..666983cb6d2 Binary files /dev/null and b/docs/work/process/_img/cpfield-relabel-customer-ticket.png differ diff --git a/docs/work/process/_img/cpfield-remove-customer-ticket.png b/docs/work/process/_img/cpfield-remove-customer-ticket.png new file mode 100644 index 00000000000..ff097921e53 Binary files /dev/null and b/docs/work/process/_img/cpfield-remove-customer-ticket.png differ diff --git a/docs/work/process/_img/cpfields-list-fields-all-processes.png b/docs/work/process/_img/cpfields-list-fields-all-processes.png new file mode 100644 index 00000000000..678a3a080c3 Binary files /dev/null and b/docs/work/process/_img/cpfields-list-fields-all-processes.png differ diff --git a/docs/work/process/_img/cpform-3-column-layout.png b/docs/work/process/_img/cpform-3-column-layout.png new file mode 100644 index 00000000000..27f0e3d6552 Binary files /dev/null and b/docs/work/process/_img/cpform-3-column-layout.png differ diff --git a/docs/work/process/_img/cpform-add-group-dialog.png b/docs/work/process/_img/cpform-add-group-dialog.png new file mode 100644 index 00000000000..62e3ee1ecf1 Binary files /dev/null and b/docs/work/process/_img/cpform-add-group-dialog.png differ diff --git a/docs/work/process/_img/cpform-add-page-dialog.png b/docs/work/process/_img/cpform-add-page-dialog.png new file mode 100644 index 00000000000..28e6c4d5446 Binary files /dev/null and b/docs/work/process/_img/cpform-add-page-dialog.png differ diff --git a/docs/work/process/_img/cpform-add-page.png b/docs/work/process/_img/cpform-add-page.png new file mode 100644 index 00000000000..6ec5bd5991e Binary files /dev/null and b/docs/work/process/_img/cpform-add-page.png differ diff --git a/docs/work/process/_img/cpform-custom-page-in-form.png b/docs/work/process/_img/cpform-custom-page-in-form.png new file mode 100644 index 00000000000..a24ce7c71e8 Binary files /dev/null and b/docs/work/process/_img/cpform-custom-page-in-form.png differ diff --git a/docs/work/process/_img/cpform-customized-form-intro.png b/docs/work/process/_img/cpform-customized-form-intro.png new file mode 100644 index 00000000000..d8e5b6c676e Binary files /dev/null and b/docs/work/process/_img/cpform-customized-form-intro.png differ diff --git a/docs/work/process/_img/cpform-hide-layout.png b/docs/work/process/_img/cpform-hide-layout.png new file mode 100644 index 00000000000..6c0e8bdba1f Binary files /dev/null and b/docs/work/process/_img/cpform-hide-layout.png differ diff --git a/docs/work/process/_img/cpform-move-field-to-custom-group.png b/docs/work/process/_img/cpform-move-field-to-custom-group.png new file mode 100644 index 00000000000..a3fc837e237 Binary files /dev/null and b/docs/work/process/_img/cpform-move-field-to-custom-group.png differ diff --git a/docs/work/process/_img/cpform-new-group.png b/docs/work/process/_img/cpform-new-group.png new file mode 100644 index 00000000000..75dd37d8eaa Binary files /dev/null and b/docs/work/process/_img/cpform-new-group.png differ diff --git a/docs/work/process/_img/cpform-re-sequence-page.png b/docs/work/process/_img/cpform-re-sequence-page.png new file mode 100644 index 00000000000..29d26048a2c Binary files /dev/null and b/docs/work/process/_img/cpform-re-sequence-page.png differ diff --git a/docs/work/process/_img/cpit-destroy-wit-confirm.png b/docs/work/process/_img/cpit-destroy-wit-confirm.png new file mode 100644 index 00000000000..4ccba1b7013 Binary files /dev/null and b/docs/work/process/_img/cpit-destroy-wit-confirm.png differ diff --git a/docs/work/process/_img/cprocess-choose-inherited-process.png b/docs/work/process/_img/cprocess-choose-inherited-process.png new file mode 100644 index 00000000000..d1e5d445123 Binary files /dev/null and b/docs/work/process/_img/cprocess-choose-inherited-process.png differ diff --git a/docs/work/process/_img/cprocess-intro.png b/docs/work/process/_img/cprocess-intro.png new file mode 100644 index 00000000000..959809c9b2f Binary files /dev/null and b/docs/work/process/_img/cprocess-intro.png differ diff --git a/docs/work/process/_img/cprocess-myagile-user-story-layout.png b/docs/work/process/_img/cprocess-myagile-user-story-layout.png new file mode 100644 index 00000000000..443ea17e77d Binary files /dev/null and b/docs/work/process/_img/cprocess-myagile-user-story-layout.png differ diff --git a/docs/work/process/_img/cprocess-open-all-processes.png b/docs/work/process/_img/cprocess-open-all-processes.png new file mode 100644 index 00000000000..75d7d66a6ae Binary files /dev/null and b/docs/work/process/_img/cprocess-open-all-processes.png differ diff --git a/docs/work/process/_img/cprocess-web-form-user-story-choose-customize.png b/docs/work/process/_img/cprocess-web-form-user-story-choose-customize.png new file mode 100644 index 00000000000..716b959201c Binary files /dev/null and b/docs/work/process/_img/cprocess-web-form-user-story-choose-customize.png differ diff --git a/docs/work/process/_img/cpw-added-triage-state-in-form.png b/docs/work/process/_img/cpw-added-triage-state-in-form.png new file mode 100644 index 00000000000..3d77baa15c0 Binary files /dev/null and b/docs/work/process/_img/cpw-added-triage-state-in-form.png differ diff --git a/docs/work/process/_img/cpw-new-state-triaged.png b/docs/work/process/_img/cpw-new-state-triaged.png new file mode 100644 index 00000000000..be9e6754747 Binary files /dev/null and b/docs/work/process/_img/cpw-new-state-triaged.png differ diff --git a/docs/work/process/_img/cpwit-add-new-wit.png b/docs/work/process/_img/cpwit-add-new-wit.png new file mode 100644 index 00000000000..17785efbd3b Binary files /dev/null and b/docs/work/process/_img/cpwit-add-new-wit.png differ diff --git a/docs/work/process/_img/cpwit-edit-color-description.png b/docs/work/process/_img/cpwit-edit-color-description.png new file mode 100644 index 00000000000..d62607f748d Binary files /dev/null and b/docs/work/process/_img/cpwit-edit-color-description.png differ diff --git a/docs/work/process/_img/cpwit-new-custom-work-item-ticket.png b/docs/work/process/_img/cpwit-new-custom-work-item-ticket.png new file mode 100644 index 00000000000..612c2597f44 Binary files /dev/null and b/docs/work/process/_img/cpwit-new-custom-work-item-ticket.png differ diff --git a/docs/work/process/_img/cpwit-new-ticket-define.png b/docs/work/process/_img/cpwit-new-ticket-define.png new file mode 100644 index 00000000000..77fbdbb4172 Binary files /dev/null and b/docs/work/process/_img/cpwit-new-ticket-define.png differ diff --git a/docs/work/process/_img/cpwit-new-wit-ticket-define.png b/docs/work/process/_img/cpwit-new-wit-ticket-define.png new file mode 100644 index 00000000000..290e58a0b79 Binary files /dev/null and b/docs/work/process/_img/cpwit-new-wit-ticket-define.png differ diff --git a/docs/work/process/_img/cpworkflow-add-state.png b/docs/work/process/_img/cpworkflow-add-state.png new file mode 100644 index 00000000000..afd1ec37eca Binary files /dev/null and b/docs/work/process/_img/cpworkflow-add-state.png differ diff --git a/docs/work/process/_img/cpworkflow-edit-state.png b/docs/work/process/_img/cpworkflow-edit-state.png new file mode 100644 index 00000000000..90813e59e8c Binary files /dev/null and b/docs/work/process/_img/cpworkflow-edit-state.png differ diff --git a/docs/work/process/_img/cpworkflow-hide-state.png b/docs/work/process/_img/cpworkflow-hide-state.png new file mode 100644 index 00000000000..cb04bec4e83 Binary files /dev/null and b/docs/work/process/_img/cpworkflow-hide-state.png differ diff --git a/docs/work/process/_img/cust-workflow-form-triage-header.png b/docs/work/process/_img/cust-workflow-form-triage-header.png new file mode 100644 index 00000000000..0a3ca09dbd0 Binary files /dev/null and b/docs/work/process/_img/cust-workflow-form-triage-header.png differ diff --git a/docs/work/process/_img/custom-control-add-field-level-control-to-bug-options-tab.png b/docs/work/process/_img/custom-control-add-field-level-control-to-bug-options-tab.png new file mode 100644 index 00000000000..afc833cf897 Binary files /dev/null and b/docs/work/process/_img/custom-control-add-field-level-control-to-bug-options-tab.png differ diff --git a/docs/work/process/_img/custom-control-add-field-level-control-to-bug.png b/docs/work/process/_img/custom-control-add-field-level-control-to-bug.png new file mode 100644 index 00000000000..511a7920784 Binary files /dev/null and b/docs/work/process/_img/custom-control-add-field-level-control-to-bug.png differ diff --git a/docs/work/process/_img/custom-control-web-form-user-story-action-level-menu-options.png b/docs/work/process/_img/custom-control-web-form-user-story-action-level-menu-options.png new file mode 100644 index 00000000000..090ccd0e590 Binary files /dev/null and b/docs/work/process/_img/custom-control-web-form-user-story-action-level-menu-options.png differ diff --git a/docs/work/process/_img/custom-controls-extensions-admin-page-ts.png b/docs/work/process/_img/custom-controls-extensions-admin-page-ts.png new file mode 100644 index 00000000000..341de917d86 Binary files /dev/null and b/docs/work/process/_img/custom-controls-extensions-admin-page-ts.png differ diff --git a/docs/work/process/_img/custom-controls-field-extension-dialog.png b/docs/work/process/_img/custom-controls-field-extension-dialog.png new file mode 100644 index 00000000000..197eabbbbcb Binary files /dev/null and b/docs/work/process/_img/custom-controls-field-extension-dialog.png differ diff --git a/docs/work/process/_img/custom-controls-group-extension-example-who-recently-viewed.png b/docs/work/process/_img/custom-controls-group-extension-example-who-recently-viewed.png new file mode 100644 index 00000000000..c68d63e0400 Binary files /dev/null and b/docs/work/process/_img/custom-controls-group-extension-example-who-recently-viewed.png differ diff --git a/docs/work/process/_img/custom-controls-refresh_extensions.png b/docs/work/process/_img/custom-controls-refresh_extensions.png new file mode 100644 index 00000000000..0184fa96a7c Binary files /dev/null and b/docs/work/process/_img/custom-controls-refresh_extensions.png differ diff --git a/docs/work/process/_img/custom-rule-create-rule-form.png b/docs/work/process/_img/custom-rule-create-rule-form.png new file mode 100644 index 00000000000..d1f22663ccb Binary files /dev/null and b/docs/work/process/_img/custom-rule-create-rule-form.png differ diff --git a/docs/work/process/_img/custom-rule-create-rule.png b/docs/work/process/_img/custom-rule-create-rule.png new file mode 100644 index 00000000000..12fef6a37a3 Binary files /dev/null and b/docs/work/process/_img/custom-rule-create-rule.png differ diff --git a/docs/work/process/_img/custom-rule-delete-disable-rule.png b/docs/work/process/_img/custom-rule-delete-disable-rule.png new file mode 100644 index 00000000000..c1f520f7744 Binary files /dev/null and b/docs/work/process/_img/custom-rule-delete-disable-rule.png differ diff --git a/docs/work/process/_img/custom-wit-new-ticket-form.png b/docs/work/process/_img/custom-wit-new-ticket-form.png new file mode 100644 index 00000000000..045796ffc4a Binary files /dev/null and b/docs/work/process/_img/custom-wit-new-ticket-form.png differ diff --git a/docs/work/process/_img/customize-field-reorder-list.png b/docs/work/process/_img/customize-field-reorder-list.png new file mode 100644 index 00000000000..53c3c15ce51 Binary files /dev/null and b/docs/work/process/_img/customize-field-reorder-list.png differ diff --git a/docs/work/process/_img/customize-process-field-show-custom-html-field-up1.png b/docs/work/process/_img/customize-process-field-show-custom-html-field-up1.png new file mode 100644 index 00000000000..035bf05e6ee Binary files /dev/null and b/docs/work/process/_img/customize-process-field-show-custom-html-field-up1.png differ diff --git a/docs/work/process/_img/customize-process-remove-field-confirm.png b/docs/work/process/_img/customize-process-remove-field-confirm.png new file mode 100644 index 00000000000..04e2ad9b2cc Binary files /dev/null and b/docs/work/process/_img/customize-process-remove-field-confirm.png differ diff --git a/docs/work/process/_img/cwit-create-wit-ticket.png b/docs/work/process/_img/cwit-create-wit-ticket.png new file mode 100644 index 00000000000..290e58a0b79 Binary files /dev/null and b/docs/work/process/_img/cwit-create-wit-ticket.png differ diff --git a/docs/work/process/_img/cwit-open-process-wits.png b/docs/work/process/_img/cwit-open-process-wits.png new file mode 100644 index 00000000000..a592db21f7d Binary files /dev/null and b/docs/work/process/_img/cwit-open-process-wits.png differ diff --git a/docs/work/process/_img/inherited-icon.png b/docs/work/process/_img/inherited-icon.png new file mode 100644 index 00000000000..bb8ec080167 Binary files /dev/null and b/docs/work/process/_img/inherited-icon.png differ diff --git a/docs/work/process/_img/inherited-process-icon.png b/docs/work/process/_img/inherited-process-icon.png new file mode 100644 index 00000000000..731bdded2b1 Binary files /dev/null and b/docs/work/process/_img/inherited-process-icon.png differ diff --git a/docs/work/process/_img/locked-icon.png b/docs/work/process/_img/locked-icon.png new file mode 100644 index 00000000000..6cac95eb830 Binary files /dev/null and b/docs/work/process/_img/locked-icon.png differ diff --git a/docs/work/process/_img/manage-process-default-collection-processes-up1.png b/docs/work/process/_img/manage-process-default-collection-processes-up1.png new file mode 100644 index 00000000000..5e629621dc6 Binary files /dev/null and b/docs/work/process/_img/manage-process-default-collection-processes-up1.png differ diff --git a/docs/work/process/_img/manage-process-migrate-a-team-project.png b/docs/work/process/_img/manage-process-migrate-a-team-project.png new file mode 100644 index 00000000000..18dd962652b Binary files /dev/null and b/docs/work/process/_img/manage-process-migrate-a-team-project.png differ diff --git a/docs/work/process/_img/manage-process-migrate-team-project-to-inherited-process.png b/docs/work/process/_img/manage-process-migrate-team-project-to-inherited-process.png new file mode 100644 index 00000000000..6d832150f7b Binary files /dev/null and b/docs/work/process/_img/manage-process-migrate-team-project-to-inherited-process.png differ diff --git a/docs/work/process/_img/manage-process-open-account-settings.png b/docs/work/process/_img/manage-process-open-account-settings.png new file mode 100644 index 00000000000..04c18d97619 Binary files /dev/null and b/docs/work/process/_img/manage-process-open-account-settings.png differ diff --git a/docs/work/process/_img/mprocess-change-process-dialog-to-agile.png b/docs/work/process/_img/mprocess-change-process-dialog-to-agile.png new file mode 100644 index 00000000000..cc541a92f64 Binary files /dev/null and b/docs/work/process/_img/mprocess-change-process-dialog-to-agile.png differ diff --git a/docs/work/process/_img/mprocess-change-process-to-core-process-agile.png b/docs/work/process/_img/mprocess-change-process-to-core-process-agile.png new file mode 100644 index 00000000000..b42b9f7be5b Binary files /dev/null and b/docs/work/process/_img/mprocess-change-process-to-core-process-agile.png differ diff --git a/docs/work/process/_img/mprocess-create-inherited-process-dialog.png b/docs/work/process/_img/mprocess-create-inherited-process-dialog.png new file mode 100644 index 00000000000..9ab41737ffa Binary files /dev/null and b/docs/work/process/_img/mprocess-create-inherited-process-dialog.png differ diff --git a/docs/work/process/_img/mprocess-create-inherited-process.png b/docs/work/process/_img/mprocess-create-inherited-process.png new file mode 100644 index 00000000000..54b961dc573 Binary files /dev/null and b/docs/work/process/_img/mprocess-create-inherited-process.png differ diff --git a/docs/work/process/_img/mprocess-create-team-project.png b/docs/work/process/_img/mprocess-create-team-project.png new file mode 100644 index 00000000000..d1348222731 Binary files /dev/null and b/docs/work/process/_img/mprocess-create-team-project.png differ diff --git a/docs/work/process/_img/mprocess-open-security-dialog-inherited.png b/docs/work/process/_img/mprocess-open-security-dialog-inherited.png new file mode 100644 index 00000000000..0ad947a4eb6 Binary files /dev/null and b/docs/work/process/_img/mprocess-open-security-dialog-inherited.png differ diff --git a/docs/work/process/_img/mprocess-overview-project-list.png b/docs/work/process/_img/mprocess-overview-project-list.png new file mode 100644 index 00000000000..ba852639c56 Binary files /dev/null and b/docs/work/process/_img/mprocess-overview-project-list.png differ diff --git a/docs/work/process/_img/mprocess-security-dialog-inherited.png b/docs/work/process/_img/mprocess-security-dialog-inherited.png new file mode 100644 index 00000000000..92d0cf97818 Binary files /dev/null and b/docs/work/process/_img/mprocess-security-dialog-inherited.png differ diff --git a/docs/work/process/_img/new-field-icon.png b/docs/work/process/_img/new-field-icon.png new file mode 100644 index 00000000000..e57b5402c30 Binary files /dev/null and b/docs/work/process/_img/new-field-icon.png differ diff --git a/docs/work/process/_img/process-add-portfolio-backlog-dialog-save.png b/docs/work/process/_img/process-add-portfolio-backlog-dialog-save.png new file mode 100644 index 00000000000..80d8602d6f4 Binary files /dev/null and b/docs/work/process/_img/process-add-portfolio-backlog-dialog-save.png differ diff --git a/docs/work/process/_img/process-add-portfolio-backlog-dialog.png b/docs/work/process/_img/process-add-portfolio-backlog-dialog.png new file mode 100644 index 00000000000..947885665da Binary files /dev/null and b/docs/work/process/_img/process-add-portfolio-backlog-dialog.png differ diff --git a/docs/work/process/_img/process-backlog-boards-intro.png b/docs/work/process/_img/process-backlog-boards-intro.png new file mode 100644 index 00000000000..0734baa4cde Binary files /dev/null and b/docs/work/process/_img/process-backlog-boards-intro.png differ diff --git a/docs/work/process/_img/process-backlog-boards-quick-add-panel.png b/docs/work/process/_img/process-backlog-boards-quick-add-panel.png new file mode 100644 index 00000000000..020de3f9585 Binary files /dev/null and b/docs/work/process/_img/process-backlog-boards-quick-add-panel.png differ diff --git a/docs/work/process/_img/process-backlog-levels-open.png b/docs/work/process/_img/process-backlog-levels-open.png new file mode 100644 index 00000000000..6d512d01981 Binary files /dev/null and b/docs/work/process/_img/process-backlog-levels-open.png differ diff --git a/docs/work/process/_img/process-edit-backlog-dialog-modified.png b/docs/work/process/_img/process-edit-backlog-dialog-modified.png new file mode 100644 index 00000000000..816811ac34e Binary files /dev/null and b/docs/work/process/_img/process-edit-backlog-dialog-modified.png differ diff --git a/docs/work/process/_img/process-edit-iteration-backlog-dialog-modified.png b/docs/work/process/_img/process-edit-iteration-backlog-dialog-modified.png new file mode 100644 index 00000000000..85e03b150c4 Binary files /dev/null and b/docs/work/process/_img/process-edit-iteration-backlog-dialog-modified.png differ diff --git a/docs/work/process/_img/process-edit-portfolio-backlog-dialog.png b/docs/work/process/_img/process-edit-portfolio-backlog-dialog.png new file mode 100644 index 00000000000..00a31f32f40 Binary files /dev/null and b/docs/work/process/_img/process-edit-portfolio-backlog-dialog.png differ diff --git a/docs/work/process/_img/process-new-portfolio-backlog.png b/docs/work/process/_img/process-new-portfolio-backlog.png new file mode 100644 index 00000000000..002cbcde086 Binary files /dev/null and b/docs/work/process/_img/process-new-portfolio-backlog.png differ diff --git a/docs/work/process/_img/process-open-account-settings-via-menu.png b/docs/work/process/_img/process-open-account-settings-via-menu.png new file mode 100644 index 00000000000..82b684e77a8 Binary files /dev/null and b/docs/work/process/_img/process-open-account-settings-via-menu.png differ diff --git a/docs/work/process/_img/process-portfolio-backlog-context-menu.png b/docs/work/process/_img/process-portfolio-backlog-context-menu.png new file mode 100644 index 00000000000..5e42f801561 Binary files /dev/null and b/docs/work/process/_img/process-portfolio-backlog-context-menu.png differ diff --git a/docs/work/process/_img/team-services-open-admin-context.png b/docs/work/process/_img/team-services-open-admin-context.png new file mode 100644 index 00000000000..129cc9d3ca5 Binary files /dev/null and b/docs/work/process/_img/team-services-open-admin-context.png differ diff --git a/docs/work/process/_img/workflow-remove-state-warning.png b/docs/work/process/_img/workflow-remove-state-warning.png new file mode 100644 index 00000000000..d78f985bef8 Binary files /dev/null and b/docs/work/process/_img/workflow-remove-state-warning.png differ diff --git a/docs/work/process/custom-controls-process.md b/docs/work/process/custom-controls-process.md new file mode 100644 index 00000000000..2c6375a96a1 --- /dev/null +++ b/docs/work/process/custom-controls-process.md @@ -0,0 +1,152 @@ +--- +title: Add a custom control to a WIT | VSTS +description: Customize a process by adding or modifying a custom control for work item type when working in Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 7FC3CF0F-1E2B-4AAE-876C-5E358E7B2B72 +ms.manager: douge +ms.author: kaelli +ms.date: 03/29/2017 +--- + +# Add a custom control to a work item type (Inheritance process model) + +[!INCLUDE [temp](../_shared/process-feature-availability.md)] + +With custom controls, you can add rich functionality to your work item forms. A custom control comes in four flavors, or contribution types. The first three in the following list appear on the web form layout for all inherited and customizable work item types (WITs): +- Field-level contribution +- Group-level contribution +- Page-level contribution +- Action-level contribution (appears in the context menu of the web form) + +You add all custom controls by installing its extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/vsts). Or, you can [create your own custom control](../../extend/get-started/node.md). + +For example, you can add the [**Who recently viewed a work item?** extension](https://marketplace.visualstudio.com/items?itemName=mmanela.vsts-workitem-recentlyviewed). This group-level control appears in your work item form as shown. + +<img src="_img/custom-controls-group-extension-example-who-recently-viewed.png" alt="Work item form, group extension example, Who viewed this" style="border: 2px solid #C3C3C3;" /> + + +<a id="add-extension"> </a> +## Add a Marketplace extension + +Browse the Marketplace to determine what extension(s) you want to add. To install an extension, see these topics: +- [Get extensions for VSTS](../../marketplace/install-vsts-extension.md) +- [Get extensions for TFS](../../marketplace/get-tfs-extensions.md) + +From the admin context, Extensions hub, you can view the extensions that are already installed. + +<img src="_img/custom-controls-extensions-admin-page-ts.png" alt="Account settings, Extensions page, VSTS" style="border: 2px solid #C3C3C3;" /> + +You may need to click ![Refresh](_img/custom-controls-refresh_extensions.png) to refresh the page to show newly installed extensions. + + +<a id="add-field-control"></a> +##Add a field-level contribution + +1. Install the [field-level extension](#add-extension) as discussed in the previous section. + +0. Open the admin context Process hub from a work item form or by choosing the Account Settings option from the gear option. For details, see [Customize a process, Start customizing](customize-process.md#start-customizing). + +2. (Optional) [Add a field](customize-process-field.md#add-custom-field) to associate with the field-level contribution. Alternatively, you can specify an existing field, inherited or custom. + +3. With the WIT selected, click **Add custom control**. + + <img src="_img/cpcontrols-add-custom-control.png" alt="Process, WIT, Bug, Layout, New custom control" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >If you don't see the **Add custom control** option, then you haven't installed a field-level extension. Or, you may need to refresh your browser to cause your browser to register any new extensions that have been installed. + +4. Choose the field-level control you want from the menu of options. + + For example, here we choose the Toggle control that you can associate with a Boolean field. + + <img src="_img/custom-control-add-field-level-control-to-bug.png" alt="Add a custom control dialog, Definition tab" style="border: 2px solid #C3C3C3;" /> + +4. Click the Options tab and fill out the dialog box. The options you need to specify will depend on the extension you've selected. + + For example, here we specify the custom field, Triaged, and indicate the toggle labels to appear on the form. + + <img src="_img/custom-control-add-field-level-control-to-bug-options-tab.png" alt="Custom control dialog" style="border: 2px solid #C3C3C3;" /> + +5. (Optional) Open the Layout tab and specify the label for the field. + + Fill in any additional required fields. Review the extension description for guidance. + +5. Verify the working of the custom control by opening a work item of the type you modified. You may need to refresh your browser to see your changes. + + Here, we show how the control appears by default with the checkbox and then with the toggle control. + + <table> + <tr><th>Boolean field with checkbox</th> + <th>Boolean field with toggle control</th></tr> + <tr><td>![Boolean field with checkbox](_img/boolean-checkbox.png)</td> + <td>![Boolean field with toggle control](_img/boolean-toggle.png)</td> + </tr> + </table> + + + + +## Group-level and page-level contributions + +When you add group-level and page-level extensions, they are automatically added to all WITs defined for all processes, both inherited and custom. You can choose to [hide these contributions from appearing on the form](customize-process-field.md#show-hide-field) for a specific WIT, or move it within the form from it's default location. + +If you've installed a group or page extension, refresh your browser, and then open a work item to view the placement of the control on the form. To move or hide the control, [follow the guidance provided for the Layout tab](customize-process-form.md). + + +## Action-level contributions + +Action-level extensions are added to the context menu of inherited and customizable WITs for both system and inherited processes. All action-level extensions are added to all work item types and cannot be hidden or removed without [uninstalling or disabling the extension](../../marketplace/uninstall-disable-vsts-extensions.md). + +For example, the following image shows nine action-level contributions have been added and appear in the context menu for the user story. + +<img src="_img/custom-control-web-form-user-story-action-level-menu-options.png" alt="User story web form, context menu, Action-level options" style="border: 2px solid #C3C3C3;" /> + + + +## Related notes + +As you add custom controls, keep in mind that all team projects that reference the inherited process that you're customizing will automatically update to contain the new fields. To view your customizations, refresh your web browser. + +Additional topics of interest: + +- [Add a custom field to a work item type](customize-process-field.md) +- [Customize a work item type](customize-process-wit.md) +- [Customize the web form](customize-process-form.md) +- [Customize a process](customize-process.md) +- [WebLayout XML elements](../reference/weblayout-xml-elements.md) +- [VSTS Marketplace](https://marketplace.visualstudio.com/search?target=VSTS&category=Plan%20and%20track&sortBy=Downloads) + +### Required permissions + +To add extensions or edit a process, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + +<a id="process-rest-api"> </a> +### Programmatically add custom controls +You can use these REST APIs to work with custom controls: +- [Extend the work item form](../../extend/develop/add-workitem-extension.md) +- [Add a custom control to the work item form](../../extend/develop/custom-control.md) + +<!--- NOTES +For on-premises TFS, you can also click Browse local extensions to install a custom extensions you've created but not published to the Marketplace. + +"inherited controls" that are added to all WITS which you can then hide or move from their default positions within the form. THis includes groups and pages. + +Custom field controls that you can add to an inherited or custom WIT. + +Prior to adding a custom control, you must add it as an extension. + +<a id="add-custom-field-control"></a> +### Add a custom field control +o add a custom control, you begin by adding it first through the Extensions page. + +0. To open the admin context from the user context, click the ![](../_img/icons/gear_icon.png) gear Settings icon and choose Account settings. + + >[!IMPORTANT] + >If you don't see the Account settings option, then you are working from an on-premises TFS. The Process page isn't supported. You must use the features supported for the On-premises XMl process model as described in [Customize your work tracking experience](../customize/customize-work.md). + + <img src="../process/_img/manage-process-open-account-settings.png" alt="Default Collection Overview, Projects reference processes" style="border: 2px solid #C3C3C3;" /> + + <img src="_img/custom-controls-field-extension-dialog.png" alt="Custom control dialog" style="border: 2px solid #C3C3C3;" /> + +--> \ No newline at end of file diff --git a/docs/work/process/custom-rules.md b/docs/work/process/custom-rules.md new file mode 100644 index 00000000000..c6428489da6 --- /dev/null +++ b/docs/work/process/custom-rules.md @@ -0,0 +1,127 @@ +--- +title: Add a custom rule to a work item type | VSTS +description: Add a custom rule to a process for a work item type for Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 17A6AF2C-81E9-4717-971E-2621613AEB31 +ms.manager: douge +ms.author: kaelli +ms.date: 09/01/2017 +--- + +# Add a rule to a work item type (Inheritance process model) + +>[!IMPORTANT] +>This topic applies to process customization for the Inheritance process model, which supports customization of team project(s) through a shared process model. +> +>For the Hosted XML process model, you customize your team projects by importing a custom process template; and for the On-premises XML process model, you customize a team project by importing modified XML definition files. For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md#process-models). + + +Custom rules provide support for a number of business use cases, allowing you to go beyond setting a default value for a field or make it required. Rules allow you to clear the value of a field, copy a value into a field, and apply values based on dependencies between different fields' values. + +With a custom rule, you can define a number of actions based on one or two conditions. For example, you can apply a rule to support these types of scenarios: + +- When a value is defined for Priority, then make Risk a required field +- When a change is made to the value of Release, then clear the value of "Milestone" +- When a change was made to the value of Remaining Work, then make Completed Work a required field +- When the value of Approved is True, then make Approved By a required field +- When a user story is created, make make the following fields required: Priority, Risk, and Effort + + +## Rule composition + +Each rule consists of two parts: Conditions and Actions. Conditions define the circumstances which must be met in order for the rule to be applied. Actions define the operations to perform. You can specify a maximum of two conditions and 10 actions per rule. All custom rules require all conditions to be met in order to be run. + +As an example, you can make a field required based on value assignments made to two other fields. In this case, you would specify two conditions and one action. For example: + + (Condition) When the value of Reason = Verified Fixed + (Condition) And when the value of the Tech Lead = Jamal Hartnett + (Action) Then make the Integration Build field required + +> [!div class="mx-tdBreakAll"] +> |Supported conditions |Supported actions | +> |-------------|----------| +> |- A work item state changes to a selected state<br/>- A work item state changes from one state to another state<br/>- A work item is created<br/>- A work item state is in a selected state<br/>- The value of a field equals a specified value<br/>- The value of a field does not equal a specified value<br/>- A value is defined for a field<br/>- No value is defined for a field<br/>- A change was made to the value of a field<br/>- No change was made to the value of a field |- Clear the value of a field<br/>- Copy the value of a field to another field <br/>- Make a field required<br/>- Set the value of a field<br/>- Set the value of a field to the current date-time<br/>- Set the value of a field to the current user | + + +>[!NOTE] +>You make a field required and specify a field default through the [**Options** tab for the field](customize-process-field.md#options). + +## Add a custom rule + +You add fields to a selected work item type. To add custom rules, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + +0. Open the admin context Process hub from a work item form or by choosing the Account Settings option from the gear option. For details, see [Customize a process, Start customizing](customize-process.md#start-customizing). + + >[!IMPORTANT] + >If you don't see the Account settings option, then you are working from an on-premises TFS. The Process page isn't supported. You must use the features supported for the On-premises XML process model as described in [Customize your work tracking experience](../customize/customize-work.md). + +0. Select the WIT to which you want to add a rule, click **Rules** and then click ![plu sign](../_img/icons/add-light-icon.png) Create rule. + + <img src="_img/custom-rule-create-rule.png" alt="Process Work Item Types page, User Story, Create rule" style="border: 2px solid #C3C3C3;" /> + +0. Name the rule and select the condition(s) and action(s) from the dropdown menus. + + >[!TIP] + >Specify a name that builds off the field(s) you're acting on, or the conditions you're setting. + + Here we define that the Acceptance Criteria field is required when the State changes to Active and it is currently empty. + + <img src="_img/custom-rule-create-rule-form.png" alt="New rule form" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >The sequence of actions you specify doesn't impact the behavior of the rule itself or its behavior with respect to other rules defined for the same WIT. + + +<a id="delete-disable"> </a> +### Delete or disable a rule + +You can temporarily disable a rule or delete it altogether. + +You delete or disable the rule from the actions menu of the rule. + +<img src="_img/custom-rule-delete-disable-rule.png" alt="Delete or disable a rule" style="border: 2px solid #C3C3C3;" /> + +<!--- +<a id="system-rules"> </a> +## System rules + +Each work item type—bug, task, user story, etc.—has several system rules already defined. Some are simple, like making the Title field required or setting a default for the Value Area field. In addition, a number of system rules define actions to take when a workflow state changes. + +For example, several rules exist to copy the current user identity under the following conditions: +- When a work item is modified, copy the user identity to the Changed By field +- When a work item is modified, copy the user identity to the Changed By field +- When the workflow state changes to Closed or Done, copy the user identity to the Closed By field. + +>[!IMPORTANT] +>Predefined system rules will take precedent over any custom rule that you define which would overwrite it. + +--> + +## Related notes + +Once you've added a custom rule, open a work item and verify that the rule works as you intended. + +Additional topics of interest: +- [Add or modify a custom work item type](customize-process-wit.md) +- [Customize the form](customize-process-form.md) +- [Customize a process](customize-process.md) + + +>[!TIP] +>You can't calculate or set formulas using a rule. However, you may find a solution that fits your needs via the [TFS Aggregrator (Web Service) Marketplace extension](https://marketplace.visualstudio.com/items?itemName=tfsaggregatorteam.tfs-aggregator-web-service). + + +<!--- +### Unsupported XML element rules +If you're familiar with the [XML elements for applying rules to fields](../reference/apply-rule-work-item-field.md), then note that the following rules and rule attributes aren't supported: + +- The *for* and *not* attributes aren't supported - you can't apply or restrict a rule based on a group, specific user, or the account collection +- The following XML value rule elements aren't supported: + - **CANNOTLOSEVALUE** + - **FROZEN** + - **MATCH** + - **NOTSAMEAS** + - **EMPTY** + +--> \ No newline at end of file diff --git a/docs/work/process/customize-process-backlogs-boards.md b/docs/work/process/customize-process-backlogs-boards.md new file mode 100644 index 00000000000..4e167c557bd --- /dev/null +++ b/docs/work/process/customize-process-backlogs-boards.md @@ -0,0 +1,191 @@ +--- +title: Customize backlogs and boards | VSTS +description: Modify the work item types that appear on backlogs and boards, add portfolio backlogs for the Inheritance process model for Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 4B6014AA-5CD8-47B9-A1E3-BFB0CCA721AF +ms.manager: douge +ms.author: kaelli +ms.date: 03/07/2017 +--- + +# Customize your backlogs or boards (Inheritance process model) + +<b>VSTS (Inheritance)</b> + +>[!IMPORTANT] +>This topic applies to process customization for the Inheritance process model, which supports customization of team project(s) through a shared process model. +> +>To customize your backlogs or bpards for the Hosted XML or On-premises XML process models, see [Add a work item type to a backlog and board](../customize/add-wits-to-backlogs-and-boards.md) or [Add a portfolio backlog level](../customize/add-portfolio-backlogs.md). For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +You can customize your backlogs to add more levels or add custom work item types (WITs) to them. As shown below, we've added a third level portfolio backlog labeled *Initiatives* which tracks the custom *Initiative* WIT, and we've renamed the product backlog to *Stories and Tickets* to indicate that we not only track *User Stories*, but also *Customer Tickets* on the product backlog. + +<img src="_img/process-backlog-boards-intro.png" alt="Changes made to the backlog levels" style="border: 2px solid #C3C3C3;" /> + +Your team project comes equipped with two portfolio backlogs: Features and Epics. However, if you need one or more additional portfolio backlogs, you can add them. + +Portfolio backlogs are useful for organizing your backlog under various business initiatives and user scenarios. When you [organize your backlogs into portfolios](../backlogs/organize-backlog.md), you can gain a hierarchical view of the work defined in lower-level backlogs, including work in progress across several teams. Program managers can track the status of those backlog items of interest and drill down to ensure that all work is represented. + + + +##What you can customize + +You customize the backlogs and boards for an inherited process in the following ways: + +- Add a custom WIT to appear on any backlog—product, portfolio, iteration and task board +- Add a portfolio backlog level which displays custom WITs +- Change the default WIT for any backlog level +- Rename or change the color of any portfolio or product backlog +- Delete the top-level portfolio backlog (but not Epics nor Features) + +To perform any of these actions, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + +When you change the default WIT for a backlog level, it causes that WIT to appear by default in the quick add panel. For example, *Customer Ticket* appears by default in the following quick add panel for the product backlog. + +<img src="_img/process-backlog-boards-quick-add-panel.png" alt="Product backlog, Quick Add Panel, Displays Default WIT for a backlog level" style="border: 2px solid #C3C3C3;" /> + + +**What you can't customize** +- You can't add or remove an inherited WIT to or from a backlog +- You can't remove an inherited portfolio level from the product (but you can rename them) +- You can't insert a backlog level within the existing set of defined backlogs +- You can't reorder the backlog levels +- You can't create a custom task level, although you can add custom WITs to the iteration backlog +- You can't add the *Bug* work item type to any backlog level. Instead, the system allows each team to decide how they want to manage bugs. To learn more, see [Show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md). + +<a id="open-process-wit"> </a> +## Open Process>Backlog levels in the admin context + +To get started, you'll want to open the Backlog levels page of your custom inherited process. If you haven't created an inherited process yet, [do that now](manage-process.md#create-inherited-process). + +0. Open the admin context Process hub from a work item form or by choosing the Account Settings option from the gear option. For details, see [Customize a process, Start customizing](customize-process.md#start-customizing). + + >[!IMPORTANT] + >If you don't see the Account settings option, then you are working from an on-premises TFS. The Process page isn't supported. You must use the features supported for the On-premises XML process model as described in [Customize your work tracking experience](../customize/customize-work.md). + + <!--- <img src="_img/process-open-account-settings-via-menu.png" alt="Web portal, open account settings" style="border: 2px solid #C3C3C3;" /> --> + +0. Click Process, and then click the inherited process that you've created previously. + + <!--- <img src="_img/admin-process-select-process.png" alt="Web portal, Admin context, Process page, select Process" style="border: 2px solid #C3C3C3;" /> --> + +0. Open the Backlog levels page. + + <img src="_img/process-backlog-levels-open.png" alt="Web portal, Admin context, Process page, open Backlog levels" style="border: 2px solid #C3C3C3;" /> + + +<a id="portfolio-backlogs"> </a> +## Add or edit portfolio backlogs + +Each process defines two default portfolio backlogs, Epics and Features; each is associated with their corresponding work item types, epics and features. + +You can add a custom work item type when adding or editing a portfolio backlog, or you can choose a work item type you've previously added. Only those work item types that don't belong to another backlog level will appear for selection. + + +<a id="add-portfolio-backlog"> </a> +### Add a portfolio backlog + +0. From the Backlog levels page, open the Add portfolio backlog dialog. + + <img src="_img/process-new-portfolio-backlog.png" alt="Web portal, Admin context, Process page, select Process" style="border: 2px solid #C3C3C3;" /> + +0. Name the backlog level, select the backlog level color, and add the work item type to associate with this level. Click Add. + + <img src="_img/process-add-portfolio-backlog-dialog.png" alt="Web portal, Add a portfolio backlog dialog, Add new work item type" style="border: 2px solid #C3C3C3;" /> + +0. If you are associating only one work type with the backlog, then click Save to save your changes. Otherwise, you can add more work item types as needed. + + <img src="_img/process-add-portfolio-backlog-dialog-save.png" alt="Web portal, Add a portfolio backlog dialog, Save changes" style="border: 2px solid #C3C3C3;" /> + + +<a id="edit-portfolio-backlog"> </a> +### Edit, rename, or delete a portfolio backlog + +Open the context menu of a portfolio backlog that you've added to edit, rename, or delete it. From the Backlog levels page, open the Add portfolio backlog dialog. + +<img src="_img/process-portfolio-backlog-context-menu.png" alt="Web portal, Add a portfolio backlog dialog, Save changes" style="border: 2px solid #C3C3C3;" /> + +Deleting the backlog level only removes the backlog and board associated with this level. The work items defined with the associated work item types are not deleted or affected in any way. + +<img src="_img/process-edit-portfolio-backlog-dialog.png" alt="Web portal, Add a portfolio backlog dialog, Save changes" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +>You can't remove the default, inherited WIT from the Epics or Features portfolio backlogs. + + + +<a id="edit-product-backlog"> </a> +## Edit or rename the requirement backlog +The Requirement backlog, also referred to as the product backlog, defines the WITs that appear on the product backlog and Kanban board. The default WIT for Agile is User Story; for Scrum, Product Backlog Item; and for CMMI, Requirement. + +You can rename the backlog, change the color, add WITs, and change the default WIT. Open the Edit backlog dialog from the context menu for the Requirements backlog. + +Here, we've renamed the backlog, added *Customer Ticket*, and changed the default type to *Customer Ticket*. + +<img src="_img/process-edit-backlog-dialog-modified.png" alt="Web portal, Add a portfolio backlog dialog, Save changes" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +>You can't remove the default, inherited WIT from the Requirements backlog. + + +<a id="edit-iteration-backlog"> </a> +## Edit the iteration backlog +The Iteration backlog, also referred to as the sprint backlogs, defines the WITs that are displayed on the sprint backlogs and task boards. The default WIT for all processes is Task. + +For the iteration backlog, you can add WITs and change the default WIT. Open the Edit backlog dialog from the context menu for the Iteration backlog. + +Here, we've added the *Ticket* WIT which will be tracked along with tasks. + +<img src="_img/process-edit-iteration-backlog-dialog-modified.png" alt="Web portal, Add a portfolio backlog dialog, Save changes" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +>You can't remove the default, inherited WIT from the Iteration backlog. + + +## Related notes + +As you customize the backlog levels, all team projects that reference the inherited process that you're customizing will automatically update to reflect the changes you made to your inherited process. To view your changes, open the backlog page for the team project and refresh your web browser. + +To customize a single team project, always start by [creating an inherited process and migrating the team project to that process](manage-process.md). Then, all the customizations that you make to the inherited process automatically appear for the team project you migrated. + +Additional topics of interest: + +- [Add or modify a custom work item type](customize-process-wit.md) +- [Customize a process](customize-process-field.md) +- [Backlogs, boards, and plans](../backlogs-boards-plans.md) +- [Create your backlog](../backlogs/create-your-backlog.md) +- [Organize your backlog, work with portfolio backlogs](../backlogs/organize-backlog.md) + + +### Fields added to WITs associated with a backlog level + +When you add a field to a backlog level, the following fields are added to support select Agile tool features. + +| Backlog level | Fields added | +|---------------|--------------| +| Portfolio backlog | - Stack rank (Agile, CMMI)<br/>- Backlog Priority (Scrum) | +| Requirement backlog | - Stack Rank, Story Points (Agile)<br/>- Stack Rank, Size (CMMI)<br/>- Backlog Priority, Effort (Scrum) | +| Iteration backlog | - Activity, Remaining Work, Stack Rank (Agile)<br/>- Discipline, Remaining Work, Stack Rank (CMMI)<br/>- Activity, Remaining Work, Backlog Priority (Scrum) | + +The Stack Rank and Backlog Priority fields capture the relative priority of work items as they are reordered on a backlog or board. + +The Story Points, Size, and Effort fields capture the relative work required to complete a WIT assigned to the Requirement backlog. This value is used to compute [velocity](../../report/guidance/team-velocity.md). + +And, lastly, Remaining Work is used [Sprint burndown and capacity charts](../scrum/define-sprints.md). + +<!--- +###About Categories +The system defines 13 categories for use, and at least one WIT is assigned to each category. You can't add a WIT that already belongs to an existing category to a backlog. + +The Bug category is a special category that is designed to allow teams to manage their bugs as requirements or tasks. To learn more, see [Show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md) + +--> + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] + +[!INCLUDE [temp](../_shared/custom-help.md)] + + + + diff --git a/docs/work/process/customize-process-field.md b/docs/work/process/customize-process-field.md new file mode 100644 index 00000000000..d87b5e2b5c0 --- /dev/null +++ b/docs/work/process/customize-process-field.md @@ -0,0 +1,276 @@ +--- +title: Add a custom field | VSTS +description: Add a custom field to the web form of a work item type for an Inheritance process model for Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: D6616411-43D4-4A81-8951-772D98BD1569 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# Add a custom field to a work item type (Inheritance process model) + +[!INCLUDE [temp](../_shared/process-feature-availability.md)] + +Each ![locked icon](_img/locked-icon.png) system process—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md)—contains 100 or more work item fields. You can add a custom field to support tracking additional data requirements or modify select attributes of an ![inherited icon](_img/inherited-icon.png) inherited field. For example, you can add a custom field and pick list or change the label that appears in the work item form for an inherited field. + +For a list of all fields defined for your account—which includes all fields defined for system and inherited processes—see [Review fields](#review-fields). + +## What you can customize + +Locked and inherited fields correspond to fields inherited from a system process. You can't customize locked fields. You can customize some options for inherited fields. + + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited fields |Custom fields |   | +> |-------------|----------|---------| +> |- [Change the field label](#rename-field)<br/>- [Show/Hide field on form](#show-hide-field) |- [Add a custom field](#add-field)<br/>- [Add pick list (drop-down menu)](#pick-list)<br/>- [Add person-name/Identity](#identity)<br/>- [Add a rich-text (HTML) field](#html) <br/>- [Add a checkbox (Boolean) field](#boolean-field)<br/>- [Add a custom control](custom-controls-process.md) | - [Add custom rules to a field](custom-rules.md)<br/>- [Change the field label](#rename-field)<br/>- [Set Required/Default options](#options)<br/>- [Move the field within the layout](customize-process-form.md#move-field)<br/>- [Remove field from form](#remove-field)<br/>- [Delete field](#delete-field) | + +When adding custom fields, note the following limits: +* A maximum of 64 fields can be defined for each WIT +* A maximum of 512 fields can be defined per process + +In addition, you can [add an existing inherited or custom field](#add-existing-field) to another WIT within the process. For example, you can add Due Date to the user story or bug WITs. + +To perform any of these actions, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + +**What you can't customize** +- You can't change the field name or data type once you've defined it +- With regards to pick lists, you currently can't perform these operations: + - Change the pick list of an inherited field, such as the Activity or Discipline field + - Change the pick list order, pick lists display in alphabetic order +- Import or define a global list + + +<a id="open-process-wit"> </a> +<a id="add-field"> </a> +<a id="add-custom-field"> </a> +## Add a custom field + +You can add fields and specify the group and page where they should appear. Also, once you've added a field, you can drag-and-drop it within a page to relocated it on the form. If you have several fields you want to add to a custom page or group, then you may want to [add those elements first](customize-process-form.md) and then add your fields. + +0. Open the admin context Process hub from a work item form or by choosing the Account Settings option from the gear option. For details, see [Customize a process, Start customizing](customize-process.md#start-customizing). + + >[!IMPORTANT] + >If you don't see the Account settings option, then you are working from an on-premises TFS. The Process page isn't supported. You must use the features supported for the On-premises XML process model as described in [Customize your work tracking experience](../customize/customize-work.md). + +0. With the WIT selected, click the ![add new field icon](_img/new-field-icon.png) (New Field icon). + + <img src="_img/cpfield-bug-new-field.png" alt="Process Work Item Types page, Add a field to a WIT" style="border: 2px solid #C3C3C3;" /> + +0. Name the field and select the field type from one of the supported data types. Optionally, add a description. + + >[!NOTE] + >You must specify a field name that is unique within the account. A custom field defined for one process cannot be the same as the name defined for another process. For more information on field names, see [What is a field? How are field names used?](#field-reference) + + Here we add an Integer field labeled Customer Ticket. + + <img src="_img/cpfield-add-field-to-bug-type-integer-up1.png" alt="Add a field to Bug, choose field type" style="border: 2px solid #C3C3C3;" /> + + <a id="options"> </a> +0. (Optional) On the Options tab, indicate if the field is required and specify a default value. Or leave these blank. By making a field Required, users must specify a value for the field in order to save it. The default value you specified is set when you create a work item as well as every time a work item is opened and the field is empty. + + <img src="_img/cpfield-bug-customer-ticket-options.png" alt="Add a field to Use story, specify options" style="border: 2px solid #C3C3C3;" /> + + <a id="layout"> </a> +0. (Optional) On the Layout tab, you can enter a different form label than the name of the field. Also, you can choose the page and group where the field will appear on the form. + + Here, we add the Customer Ticket field to a new group labeled Customer focus. + + <img src="_img/cpfield-customer-ticket-layout.png" alt="Add a field to Use story, specify layout" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >While you can change the form label, you must use the field name when adding fields to cards ([Kanban](../customize/customize-cards.md#fields), [task board](../customize/customize-cards.md#task-board)) or [creating queries](../track/using-queries.md) based on the field. + +0. Click **Add field** to complete adding the field. If you haven't specified it's layout location, it will be added to the first group of fields on the layout form. + +0. When you've completed making all your changes, open a work item of the type you've just customized. + + Here, we show the Customer Ticket field has been added to the Status group. You may need to refresh your browser to see the changes. + + <img src="_img/cpfield-bug-form-customized-customer-ticket.png" alt="Bug form, Customer Ticket field added to Details group" style="border: 2px solid #C3C3C3;" /> + + + +<a id="pick-list"> </a> +### Add a pick list + +1. Start by clicking ![add new field icon](_img/new-field-icon.png) (New Field), then specify the pick list type—integer or string—and then add the items to appear in the pick list. You can simply add an item and then press Enter to add another item. + + <img src="_img/add-a-field-pick-list-up1.png" alt="Add a custom pick list" style="border: 2px solid #C3C3C3;" /> + + To delete an item in the list, highlight the item and then click the ![Delete icon](../_img/icons/delete_icon.png) delete icon. + +2. (Optional) Click the Options tab to define the field as required, specify a default, or allow users to enter their own values. + + <img src="_img/add-a-field-pick-list-options.png" alt="Allow values in a custom pick list" style="border: 2px solid #C3C3C3;" /> + +3. (Optional) See previous [step 5](#layout) to specify where you want the field to appear on the form (Layout tab). + +<!--- +2. To reorder the list, simply drag the item to where you want it in the list. + + ![Add a custom pick list](../process/_img/customize-field-reorder-list.png) +--> + + +<a id="identity"> </a> +### Add an Identity field + +Use the Identity field to add a field similar to the Assigned To field. Identity fields act in the same way as the Assigned To field, providing a search and identity picker function. If your account manages users with Azure Active Directory (AAD), then the system synchronizes Identity fields with the names defined in AAD and are valid users of the team project. + +1. Start by clicking ![add new field icon](_img/new-field-icon.png) (New Field), then the field name, Identity type, and optionally a description. + + <img src="_img/cpfield-identity.png" alt="Add a custom pick list" style="border: 2px solid #C3C3C3;" /> + +3. (Optional) See previous [step 5](#layout) to specify where you want the field to appear on the form (Layout tab). + + +<a id="html"> </a> +### Add a rich-text, HTML field + +1. Just as before, choose the WIT you want to add the field to and then click the ![add new field icon](_img/new-field-icon.png) (New Field icon). + +2. Choose Text (multiple lines) as the type. Here we label the field as Customer request to capture customer verbatims. + + <img src="_img/cpfield-add-html-field-to-bug.png" alt="Process Work Item Types page, Add a rich-text field to the Bug form" style="border: 2px solid #C3C3C3;" /> + +2. The field is added to the first column under all system-defined rich-text fields, but before the Discussion control. + + <img src="_img/customize-process-field-show-custom-html-field-up1.png" alt="Bug form, Customer request field added to first column in form" style="border: 2px solid #C3C3C3;" /> + +<a id="boolean-field"> </a> +### Add a checkbox field + +1. Just as before, choose the WIT you want to add the field to and then click ![add icon](../_img/icons/green_plus_icon.png) New Field. + +2. Choose Boolean as the type, and give it a label. Here we label the field as Triaged to track the triage state of the bug. + + <img src="_img/cpfield-add-boolean-field-to-bug.png" alt="Add a boolean field" style="border: 2px solid #C3C3C3;" /> + +3. (Optional) Open the Options tab and specify if the field should be required. + + <img src="_img/cpfield-edit-boolean-field-options-up1.png" alt="Set options for boolean field" style="border: 2px solid #C3C3C3;" /> + +4. By default, the field is added to the last group defined in the second column. Open the Layout tab to drag and drop the field to another group on the form. + + >[!NOTE] + >The field will appear as a checkbox in the work item form. Check the box to indicate a True value. If you display the field on the Kanban or Task board, then the field values of True and False display (not a checkbox). + +<a id="add-existing-field"> </a> +## Add an existing field to another WIT + +Existing fields correspond to any inherited field and custom field defined within the collection. Once you've added a custom field to one WIT, you can add it to others from the form menu. Simply open the work item and choose the existing field. + +For a list of all work item fields defined for all WITs and processes, see the [Work item field index](../guidance/work-item-field.md). + +Here we add the Customer Ticket field to the User Story WIT. + +<img src="_img/cpfield-add-existing-field.png" alt="Add existing field to bug" style="border: 2px solid #C3C3C3;" /> + + + +Optionally, specify the [Required/Default values](#options) and [placement within the form](#layout) for the field. + +<a id="show-hide-remove-field"> </a> +## Show, hide, or remove a field + +You can choose to show or hide an inherited field or a custom control from appearing on a form. For custom fields, you can remove it from the form. If you want to reinstate it later, you can add it back to the form. These actions differ from the [**Delete**](#delete-field) option, which deletes the field from the account. + +>[!NOTE] +>Data defined for an inherited field, even if you hide it, is maintained in the data store and work item history. You can view a record of it by viewing the history tab for a work item. +> +>Data defined for a custom field is deleted when you remove it from the form. To delete a custom field from a project collection, see [Delete a field](#delete-field). + +<a id="show-hide-field"> </a> +### Hide an inherited field or custom control + +0. Open the context menu for the inherited field and choose Hide from layout. + + <img src="_img/cpfield-hide-inherited-field.png" alt="Bug layout, inherited field, open context menu, choose Hide from layout" style="border: 2px solid #C3C3C3;" /> + +0. To add a hidden field to the form, choose **Show on layout**. + +<a id="remove-field"> </a> +### Remove a custom field from a form +1. Choose Remove from the context menu of the field you want to remove. + + <img src="_img/cpfield-remove-customer-ticket.png" alt="Remove field from bug work item type" style="border: 2px solid #C3C3C3;" /> + +2. Confirm that you want to remove the field. + + <img src="_img/customize-process-remove-field-confirm.png" alt="Confirm to remove field from the bug work item form" style="border: 2px solid #C3C3C3;" /> + +0. To add a custom field that's been removed, choose **New field** and select **Use an existing field**. + + +<a id="review-fields"></a> +## Review fields + +To review the list of fields defined for all processes and the WITs which reference them, click the **Process** hub and then the **Fields** page. + +Fields listed correspond to all those defined for the account. For descriptions and usage of each field, see [Work item field index](../guidance/work-item-field.md). + +<img src="_img/cpfields-list-fields-all-processes.png" alt="All Processes, Fields list" style="border: 2px solid #C3C3C3;" /> + + +## Related notes + +Once you've added a custom field, you can create [queries](../track/using-queries.md) or [charts](../../Report/charts.md) to track data related to it. <!---Note, however, that you can't access custom field data from [Power BI reports](https://www.visualstudio.com/en-us/get-started/report/connect-vso-pbi-vs). --> + +As you add custom fields, keep in mind that all team projects that reference the inherited process that you're customizing will automatically update to contain the new fields. Remember to refresh your web browser to view your latest changes. + +Additional topics of interest: + +- [Add or modify a custom work item type](customize-process-wit.md) +- [Customize the form](customize-process-form.md) +- [Customize a process](customize-process.md) +- [Customize cards on boards](../customize/customize-cards.md) +- [Show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md) + +If you are working with test plans or test cases, see these topics: +- [Create a test plan](../../manual-test/getting-started/create-a-test-plan.md) +- [Create manual test cases](../../manual-test/getting-started/create-test-cases.md) + + + + +<!--- +<a id="revert"> </a> +### Revert field to preset defaults +If you've made changes to an inherited field, and now want to discard those changes, you can do that by choosing the revert option for the field from the Layout page of the modified WIT. +--> + +<a id="delete-field"> </a> +### Delete a field +Deleting a field will delete all data associated with that field, including historical values. Once deleted, you can't recover the data. + +Prior to deleting a field, you must first remove it from the form for each WIT that it's been added to. + +1. You delete the field from a collection from the **Fields** page for all processes. + + <img src="_img/cpfield-delete-field.png" alt="Delete field" style="border: 2px solid #C3C3C3;" /> + + To delete fields, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + +2. To complete the delete operation, you must type the name of the field as shown. + + <img src="_img/cpfield-delete-confirmation.png" alt="Delete field, confirmation dialog" style="border: 2px solid #C3C3C3;" /> + +<a id="rename-field"> </a> +### Can a field be renamed or its field type changed? +Renaming a field or changing the field type aren't supported actions. + +However, you can change the label that appears for a field on the work item form from the Layout tab. When selecting the field in a query you need to select the field name and not the field label. + +Here, we relabel the Customer Ticket field to Ticket Number. + +<img src="_img/cpfield-relabel-customer-ticket.png" alt="Layout tab, Relabel a field" style="border: 2px solid #C3C3C3;" /> + + +[!INCLUDE [temp](../_shared/field-reference.md)] + +[!INCLUDE [temp](../_shared/help-support-shared.md)] + +[!INCLUDE [temp](../_shared/custom-help.md)] diff --git a/docs/work/process/customize-process-form.md b/docs/work/process/customize-process-form.md new file mode 100644 index 00000000000..0de60f43465 --- /dev/null +++ b/docs/work/process/customize-process-form.md @@ -0,0 +1,208 @@ +--- +title: Customize the web form | VSTS +description: Customize the web form for a work item type and Inheritance process model for Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: E0AACC40-9A9E-4A48-A1D7-1CE70D53EEA8 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# Customize the web form for a work item type (Inheritance process model) + +[!INCLUDE [temp](../_shared/process-feature-availability.md)] + +Work items are the backbone for planning and tracking work. As such, you'll want to make sure that each work item type (WIT) is tracking the data that your team needs. + +To support your work tracking requirements, you can customize each WIT to add custom groups to collect custom fields that you add under a common section. You can organize your forms by placing logically related groups and HTML fields on separate pages within a form to minimize clutter on any one page within the form. + +For example, the following form shows that two custom pages have been added, **Impact** and **Mitigation**. In addition, several new groups and fields have been added to the Details page. + +<img src="_img/cpform-customized-form-intro.png" alt="Customized user story form" style="border: 2px solid #C3C3C3;" /> + +##What you can customize + +You customize the web form for a WIT to which you want to add fields, groups, or pages. Each web form consists of a non-editable header, and a single inherited page labeled *Details*. + +A custom page appears on the form as a tab to the right of the Details page. Groups are used to organize a set of fields within a page. You can specify the column within a page where a custom group or field should appear. + +Here are your customization options for inherited groups and pages. For information on field customization options, see [Customize a field for a process](customize-process-field.md). + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited groups |Custom groups |   | +> |-------------|----------|---------| +> |- [Relabel](#groups)<br/>- [Add/remove custom fields](customize-process-field.md)<br/>- [Show/hide fields](customize-process-field.md#remove-field) |- [Add, modify, re-sequence, delete](#groups)<br/>- [Add/remove custom fields](customize-process-field.md)<br/>- [Add/Hide a group extension](custom-controls-process.md) | + + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited pages |Custom pages | +> |-------------|----------| +> |- [Relabel](#pages)<br/>- [Add/remove custom fields](customize-process-field.md)<br/>- [Add/remove a custom group](#groups) |- [Add, modify, re-sequence, delete](#pages)<br/>- [Add/delete custom fields](customize-process-field.md)<br/>- [Add/Hide a page extension](custom-controls-process.md) | + + +To perform any of these actions, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + + +**What you can't customize** +You can't modify the layout or field options assigned to these WITs: +- Shared Steps and Shared Parameters +- Code Review Request and Code Review Response +- Feedback Request and Feedback Response + +<a id="resizing"> </a> +## Layout and resizing + +The web form layout is organized into three columns as shown in the image below. + +![3 column page layout](_img/cpform-3-column-layout.png) + +If you only add groups and fields to the first two columns, then the layout reflects a two column layout. Likewise, if you only add groups and fields to the first column, then the layout reflects a one column layout. + +The web form resizes depending on the width available and the number of columns in the layout. At maximum width, in most web browsers, each column within a page will display within its own column. As the display width decreases, each column resizes proportionally as follows: + +- For three columns: 50%, 25%, and 25% +- For two columns: 66% and 33% +- For one column: 100%. + +When the display width won't accommodate all columns, columns appear stacked within the column to the left. + +<a id="open-process-wit"> </a> +## Open Process>Work Item Types in the admin context + +To customize the web form, you must work from the admin context Process hub. + +You can open the admin context Process hub from a work item form or by choosing the Account Settings option from the gear option. For details, see [Customize a process, Start customizing](customize-process.md#start-customizing). + +>[!IMPORTANT] +>If you don't see the Account settings option, then you are working from an on-premises TFS. The Process page isn't supported. You must use the features supported for the On-premises XML process model as described in [Customize your work tracking experience](../customize/customize-work.md). + + +<a id="groups"></a> +## Groups + +You can add your own custom groups to both inherited pages and custom pages. + +<a id="add-group"></a> +### Add a custom group + +1. From the Layout page, choose New group. + + <img src="_img/cpform-new-group.png" alt="Process>Work Item Types>Bug>Layout>Add new group" style="border: 2px solid #C3C3C3;" /> + +2. Label the group and choose the column it should appear in. + + <img src="_img/cpform-add-group-dialog.png" alt="Add custom group dialog" style="border: 2px solid #C3C3C3;" /> + + <a id="edit-group"></a> +3. (Optional) Once you've added the group, you can drag and drop the group into any column or within the column, or select the Move Up or Move Down options from the group's … context menu. + +<a id="change-layout"></a> +<a id="remove-group"></a> +### Delete or remove a custom group + +Before you remove a group, first move all fields defined in that group to another group or remove them from the form. + +>[!TIP] +>You must remove all fields from a group for the Remove option to appear. + +Choose the ![Delete icon](../_img/icons/delete_icon.png) Remove option from the custom group … context menu. + +>[!NOTE] +>When all fields in an inherited group are hidden, the inherited group itself will not appear on the form. + +<a id="move-field"></a> +### Move a field + +Within a page, you can quickly drag-and-drop a field to a new group or section within the page. + +To move a field to another page, choose Edit from the field's … context menu and then choose the Page from the menu. Optionally, select an existing group or create a new group. + +Here we move the Customer ticket field to the Details page and the Customer focus group. + +<img src="_img/cpform-move-field-to-custom-group.png" alt="Edit field dialog, Move field to custom group" style="border: 2px solid #C3C3C3;" /> + + +<a id="show-hide-remove-field"></a> +### Remove a field from a form + +You can only remove custom fields from a form. For inherited fields, you can hide them from showing on the form. To learn more, see [Customize a field for a process, Show, hide, or remove a field](customize-process-field.md#show-hide-remove-field). + +<!--- +For a custom field, open the field's … context menu, and then choose the ![Delete icon](../_img/icons/delete_icon.png) **Remove** option. + +For an inherited field, open the field's … context menu, and then choose the **Hide from layout** option. + +Here we remove the Severity inherited field from appearing on the Bug form. + +<img src="_img/cpform-hide-layout.png" alt="Layout, Inherited Field, Context Menu, Hide from layout" style="border: 2px solid #C3C3C3;" /> + +Removing a custom field from a form removes tracking data for the WIT. You can re-add a custom field to a WIT by adding it to a form as an existing field. + +Removing an inherited field from a form simply hides the field from displaying on the form; it remains defined for the WIT. Hidden fields display on the admin layout page with a strikethrough. You can re-add these fields to the form through their context menu. + +--> + +<a id="pages"></a> +##Pages + +Add a custom page when you have several custom fields that you want to group within that page. You can add and reorder custom pages. + +<a id="add-page"></a> +### Add a custom page + +0. From the Layout page of the WIT you've selected, click New page. + + <img src="_img/cpform-add-page.png" alt="Process, Work Item Types, Bug: Layout, New page option" style="border: 2px solid #C3C3C3;" /> + +0. Label the page. + + <img src="_img/cpform-add-page-dialog.png" alt="Process, Work Item Types, Bug: Layout, Add a page to bug dialog" style="border: 2px solid #C3C3C3;" /> + + <a id="edit-page"></a> +0. Edit the page to add [fields](customize-process-field.md) or [groups](#groups). + +0. When you've finished adding groups and fields to the page, verify your layout is as expected. Refresh your browser and open a work item of the type you just customized. + + <img src="_img/cpform-custom-page-in-form.png" alt="Bug work item form, Custom page" style="border: 2px solid #C3C3C3;" /> + + +<a id="reorder-page"></a> +### Reorder pages + +You can reorder custom pages using drag and drop, or choose the move operation from the custom page … context menu. You can't move the inherited Details page. + +<img src="_img/cpform-re-sequence-page.png" alt="Re-order custom pages" style="border: 2px solid #C3C3C3;" /> + +<a id="delete-page"></a> +### Delete a page + +Before you delete a page, you'll want to move any fields that your team still uses to another page. + +Choose the ![Delete icon](../_img/icons/delete_icon.png) Delete option from the custom page … context menu. + + +>[!NOTE] +>Deleting a page doesn't delete any data. Once data has been defined for a field, it's maintained in the data store and work item history, even if you remove it from the form. You can always choose to re-add the field by choosing **New field** and selecting **Use an existing field**. + + +## Related notes + +Once you've added a custom page or group, you can add [custom fields to those pages or groups](customize-process-field.md). + +As you add custom pages or groups, all team projects that reference the inherited process that you're customizing will automatically update to contain the new pages or groups. + +Additional topics of interest: + +- [Add or modify a custom work item type](customize-process-wit.md) +- [Customize a field](customize-process-field.md) +- [Add or modify a custom control](custom-controls-process.md) +- [Customize a process](customize-process.md) +- [Customize cards on boards](../customize/customize-cards.md) + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] + +[!INCLUDE [temp](../_shared/custom-help.md)] + + diff --git a/docs/work/process/customize-process-wit.md b/docs/work/process/customize-process-wit.md new file mode 100644 index 00000000000..893938ff81b --- /dev/null +++ b/docs/work/process/customize-process-wit.md @@ -0,0 +1,160 @@ +--- +title: Add custom work item type | VSTS +description: Customize a process by adding or modifying a work item type for Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: DBF41880-62A4-43A9-9A31-8DB701EB888E +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# Customize a work item type (Inheritance process model) + +[!INCLUDE [temp](../_shared/process-feature-availability.md)] + +You use different work item types (WITs) to plan and track different types of work. Your team project contains 9 or more WITs that you can customize, based on the process—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md)—used to create your team project. Also, you can add a custom WIT to support additional tracking requirements. + +For example, you may want to capture customer issues in a custom Ticket WIT. + +<img src="_img/custom-wit-new-ticket-form.png" alt="Custom Ticket work item form" style="border: 2px solid #C3C3C3;" /> + + +##What you can customize + +Each process you create inherits the WITs provided with the parent system process—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md). For example, the Agile process provides bug, task, user story, feature, epic, issue and test-related WITs. + +You can add fields and modify the workflow and form for all inherited WITs that display on the Work Item Types page. If you don't want users to use a WIT, you can disable it. In addition, you can add custom WITs. + +>[!NOTE] +>For a list of limits placed on the number of fields, work item types, backlog levels, and other objects you can customize, see [Work tracking object limits](../customize/object-limits.md). + + +Here are your customization options for inherited and custom WITs. + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited WITs | Custom WITs |   | +> |-------------|----------|---------| +> |- [Add/remove custom fields](customize-process-field.md)<br/>- [Add/remove custom groups](customize-process-form.md#groups)<br/>- [Add/delete custom pages](customize-process-form.md#pages)<br/>- [Add/remove a custom control](custom-controls-process.md) <br/>- [Enable/disable](#enable-disable) |- [Add custom WIT](#add-wit)<br/>- [Change color or description](#overview)<br/>- [Add/remove custom fields](customize-process-field.md)<br/>- [Add/remove custom groups](customize-process-form.md#groups)<br/>- [Add/delete custom pages](customize-process-form.md#pages)<br/>- [Add/remove a custom control](custom-controls-process.md) |- [Add, edit, or remove a workflow state](customize-process-workflow.md#states)<br/>- [Enable/disable](#enable-disable)<br/>- [Delete](#destroy) | + + +To perform any of these actions, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + +**What you can't customize** +- You can't add or remove an inherited WIT to or from a backlog +- You can't change the position of an inherited field within the form layout +- You can't remove the inherited portfolio level from the product (but you can rename them) +- You can't change the name of a custom WIT. + + +<a id="open-process-wit"> </a> +## Open Process>Work Item Types in the admin context + +To customize the web form, you must work from the admin context Process hub. + +You can open the admin context Process hub from a work item form or by choosing the Account Settings option from the gear option. For details, see [Customize a process, Start customizing](customize-process.md#start-customizing). + +>[!IMPORTANT] +>If you don't see the Account settings option, then you are working from an on-premises TFS. The Process page isn't supported. You must use the features supported for the On-premises XML process model as described in [Customize your work tracking experience](../customize/customize-work.md). + +<a id="add-wit"> </a> +## Add a work item type + +0. From the Work Item Types page, click ![green plus icon](../_img/icons/green-plus-new-field-icon.png) New work item type. + + <img src="_img/cpwit-add-new-wit.png" alt="Process hub, Inherited process, Work Item Types, Add new work item type" style="border: 2px solid #C3C3C3;" /> + +0. Name the WIT and optionally specify a description, icon and color. The icon and color you specify will appear throughout the web portal, including on the work item form and when associated work items appear on a backlog, boards, query results, and more. Click Create to save. + + <img src="_img/cwit-create-wit-ticket.png" alt="Create new work item type dialog" style="border: 2px solid #C3C3C3;" /> + + Each new WIT comes predefined with a Details page with the Description field, and Discussion, Development, and Related Work groups. Also added, but not shown nor editable, are the standard elements included with the header of the form as shown in the following image, as well as the history, links, and attachment pages. + + <img src="../reference/_img/weblayout-system-controls-details-page.png" alt="WIT header details" style="border: 2px solid #C3C3C3;" /> + +0. From the Layout page, you can add fields, groups, or pages to specify the form and fields you want to track. For details, see [Customize a field](customize-process-field.md) or [Customize a web form for a process](customize-process-form.md). + + <img src="_img/cpwit-new-ticket-define.png" alt="New WIT, customize layout" style="border: 2px solid #C3C3C3;" /> + +0. Open the States page to view the default workflow states. Optionally, [customize the workflow states](customize-process-workflow.md). + +0. <a id="backlog"> </a> Optional. To add the WIT to a backlog, see [Customize your backlogs or boards for a process](customize-process-backlogs-boards.md). By default, custom WITs aren't added to any backlog. To learn more about different backlog levels, see [Backlogs, boards, and plans](../backlogs-boards-plans.md). + +0. Verify the custom work item type appears as expected. Either navigate to the backlog or board to which you added the custom WIT, or open the Work hub menu and open a new work item of the type you added. + + <img src="_img/cpwit-new-custom-work-item-ticket.png" alt="stories Kanban board, add new custom ticket work item" style="border: 2px solid #C3C3C3;" /> + + If you don't see the custom WIT, refresh your browser to make sure it registers all the custom changes you've made. + +<a id="overview"> </a> +## Change description, icon or color of a custom WIT + +To change the description, icon or color of a custom WIT, choose Edit from the WIT context menu. + +Here we change the description, icon and color for the Ticket custom WIT. + +<img src="_img/cpwit-edit-color-description.png" alt="Overview page, edit custom ticket description, icon and color" style="border: 2px solid #C3C3C3;" /> + +<a id="enable-disable"></a> +## Enable or disable a custom WIT + +You can disable a custom WIT which will prevent users from being able to add new work items using it. However, all existing work items defined using the custom WIT remain in the data store. + +You may want to disable a custom WIT until you have defined all the fields, workflow, and form layout that you have planned. + +To disable a custom WIT, choose Disable from the WIT context menu. + +To re-enable the WIT, choose Enable from the WIT context menu. + +>[!NOTE] +>Disabling a WIT will remove the work item type from the New drop down and add experiences. Creating a work item of that WIT will also be blocked via REST APIs. +> +>No changes are made to existing work items of that type. You can update or delete them and they will continue to appear on backlogs and boards. Also, you can change the work item type of disabled WITs to an enabled type, but you can't change the type to a disabled WIT. + + +## Related notes + +As you customize a WIT, all team projects that reference the inherited process that you're customizing will automatically update to reflect the custom WITs you've added. To view your customizations, refresh your web browser. + +To customize a single team project, always start by [creating an inherited process and migrating the team project to that process](manage-process.md). Then, all the customizations that you make to the inherited process automatically appear for the team project you migrated. + +Additional topics of interest: + +- [Customize a field](../process/customize-process-field.md) +- [Customize a form](../process/customize-process-field.md) +- [Customize a workflow for a work item type](../process/customize-process-field.md) +- [Customize a process](../process/customize-process-field.md) +- [Customize your backlogs or boards for a process](customize-process-backlogs-boards.md) +- [Backlogs, boards, and plans](../backlogs-boards-plans.md) +- [Work tracking object limits](../customize/object-limits.md) + +<a id="destroy"> </a> +### Delete or destroy a custom WIT + +>[!IMPORTANT] +>Destroying a WIT will delete all work items and data associated with that WIT, including historical values. Once destroyed, you can't recover the data. + +1. To completely remove a custom WIT and all work items based on that WIT, click the Destroy option from the WIT context menu. + + To destroy a WIT, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + +2. To complete the delete operation, you must type the name of the WIT as shown. + + <img src="_img/cpit-destroy-wit-confirm.png" alt="Delete field, confirmation dialog" style="border: 2px solid #C3C3C3;" /> + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] + +[!INCLUDE [temp](../_shared/custom-help.md)] + + +<!--- +### WIT extensibility + +Using REST APIs you can add .... + +--> + + + + diff --git a/docs/work/process/customize-process-workflow.md b/docs/work/process/customize-process-workflow.md new file mode 100644 index 00000000000..177a983ceda --- /dev/null +++ b/docs/work/process/customize-process-workflow.md @@ -0,0 +1,172 @@ +--- +title: Customize the workflow | VSTS +description: Add workflow states to a work item type for an inherited process for Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 35971F8F-26EF-4C99-9825-4AC072A6EBE4 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# Customize the workflow (Inheritance process model) + +[!INCLUDE [temp](../_shared/process-feature-availability.md)] + +Each work item type is associated with a workflow that supports tracking the status of work as it moves from creation to completion. To support your business and team processes, you can add custom states to most work item types (WITs). For example, you may want to insert a Triaged state for bugs, or a Design state for features or user stories. + +Here, the Bug WIT has been customized to support a Triaged state. The state and reason fields appear on the work item form in the header area. + +<img src="_img/cust-workflow-form-triage-header.png" alt="Bug work item form, header area" style="border: 2px solid #C3C3C3;" /> + +##What you can customize + +You customize the workflow for a WIT by adding a custom state. Each customizable WIT consists of three or more inherited states. Inherited states differ based on the system process —[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md)—you chose from which to create your custom process. + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited states |Custom states | +> |-------------|----------| +> |- [View workflow states](#hide-state)<br/>- [Hide a state](#hide-state) |- [Add a state](#add-states)<br/>- [Edit a state (change color or category)](#edit-state)<br/>- [Remove a state](customize-process-workflow.md#remove-state) | + +To perform any of these actions, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + +**What you can't customize** +- You can't modify an inherited state (you can't change its name, color, or category) +- You can't hide an inherited state if it's the only one in its state category +- You can't change the name of a custom state +- You can't add a custom state to the Completed category +- You can't change the order of states (states are listed in the order you add them within the States page, and they're listed alphabetically within the drop down list of a work item form) +- You can't apply a field rule to a state (for example, make a field required) +- You can't specify a Reason for a state, instead, default reasons are defined such as Moved to state Triaged, Moved out of state Triaged +- You can't specify allowed transitions, all transitions are defined from any state to another state (except to the Removed state). + + +<a id="states"> </a> +## Add a workflow state + +States you add will appear in the pick list for the States field shown in work item forms and the query editor. A transition to and from the State you add is created to every other State, except not to a Removed state. Also, default reasons are defined, such as Moved to state Triaged, Moved out of state Triaged. + +>[!NOTE] +>Before adding a workflow state, review [Workflow states and state categories](../concepts/workflow-and-state-categories.md) to learn how workflow states map to state categories. + +<a id="open-process-wit"> </a> +### Open Process>Work Item Types in the admin context + +To customize the workflow for a WIT, you must work from the admin context Process hub. + +You can open the admin context Process hub from a work item form or by choosing the Account Settings option from the gear option. For details, see [Customize a process, Start customizing](customize-process.md#start-customizing). + +>[!IMPORTANT] +>If you don't see the Account settings option, then you are working from an on-premises TFS. The Process page isn't supported. You must use the features supported for the On-premises XML process model as described in [Customize your work tracking experience](../customize/customize-work.md). + +<a id="add-states"></a> +### Add a state + +>[!NOTE] +>States that you add to the task WIT will add columns to the task board. If you [track bugs along with tasks](../customize/show-bugs-on-backlog.md), then states you add to the bug WIT will also add columns to the task board. You don't have to add the same states to each of these WITs, however, you may want to do so in order to update the status in the same way and to minimize the number of columns that get added. +> +>If you add a state to a WIT which you is associated with a backlog level, each team will need to update their [Kanban board columm settings](../kanban/add-columns.md) in order to view and use the affected Kanban board. + +0. From the Work Item Types tab, choose the work item type you want to modify, choose States, and then choose New State. + + <img src="_img/cpworkflow-add-state.png" alt="Process page, Bug WIT, States tab, Add state" style="border: 2px solid #C3C3C3;" /> + +0. Enter the name of the State, choose its category and color, and then click Save. The color you specify will appear throughout the product including on the work item form and when the State field appears on a backlog, boards, query results, and more. + + <img src="_img/cpw-new-state-triaged.png" alt="State dialog box" style="border: 2px solid #C3C3C3;" /> + +0. When you've finished adding states for the WIT, verify your changes by refreshing your browser and open a work item of the type you just customized. + + Here we show the state drop down field with Triaged selected. + + <img src="_img/cpw-added-triage-state-in-form.png" alt="Bug form, Triaged state added" style="border: 2px solid #C3C3C3;" /> + +0. Remember, when you add a state to a WIT which is associated with a backlog level, each team that uses the Kanban board will need to [update their column settings](../kanban/add-columns.md). + +<a id="edit-state"></a> +### Edit a state + +You can edit the category or the color of a custom state. However, you can't change the name of the custom state. + +0. Choose Edit from the … context menu for the state you want to modify. + + <img src="_img/cpworkflow-edit-state.png" alt="Bug WIT, Edit custom state" style="border: 2px solid #C3C3C3;" /> + +0. Modify the category or color, and then click Save. + +0. If you change the category, teams that use the Kanban board to update their status will need to update their [column settings](../kanban/add-columns.md). + +<a id="remove-state"></a> +## Hide or remove a state + +When you hide or remove a state: +- The state no longer appears in the State pick list for the WIT +- No changes occur to the work item history +- Existing work items maintain their state value, but are in an invalid state. If you want to make a change to the work item, you must first update the state values. You may want to create a query and do a bulk update to move the affected work items into a valid state. If you add the state back to the work item type, the work items revert to a valid state. + + +<a id="hide-state"></a> +### Hide or unhide an inherited state + +You can hide an inherited state that your team doesn't use in its workflow process. However, you must have at least one state defined for each category. + +0. Open the … context menu for the state you want to hide and choose the **Hide** option. + + Here we hide the Resolved state for the Bug WIT. + + <img src="_img/cpworkflow-hide-state.png" alt="Hide an inherited state" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >If you hide the state of a WIT tracked on a Kanban board, each team that uses the Kanban board will need to [update their column settings](../kanban/add-columns.md). + +0. To unhide, open the … context menu and choose the **Unhide** option. + + +<a id="remove-state"></a> +### Remove a custom state +0. Open the … context menu for the state you want to remove, and choose **Remove**. You can only remove a custom state. + +0. From the Remove State dialog, click Remove. + + <img src="_img/workflow-remove-state-warning.png" alt="Remove state warning dialog box" style="border: 2px solid #C3C3C3;" /> + +0. If teams use the Kanban board to update their status, each team will need to update their [column settings](../kanban/add-columns.md). + + +## Related notes + +As you customize a workflow, all team projects that reference the inherited process that you're customizing will automatically update to reflect the customized workflow states. To view your customizations, refresh your web browser. + +Additional topics of interest: + +- [Add or modify a work item type](customize-process-wit.md) +- [Customize a field](customize-process-field.md) +- [Customize a form](customize-process-form.md) +- [Customize a process](customize-process-field.md) +- [Add or edit Kanban columns](../kanban/add-columns.md) +- [Query by workflow or Kanban board changes](../track/query-by-workflow-changes.md) + +[!INCLUDE [temp](../_shared/help-support-shared.md)] + +[!INCLUDE [temp](../_shared/custom-help.md)] + +<!--- +UPDATE CONTENT FOR THIS FWLINK: http://go.microsoft.com/fwlink/?LinkId=286303. + +Requested and Accepted States - Code Review Request and Code Review Response + +Rules governing States +All work item types need at least 2 statesone Proposed/In Progress state and one Completed state. + +--> + + + + + + + + + + + diff --git a/docs/work/process/customize-process.md b/docs/work/process/customize-process.md new file mode 100644 index 00000000000..1e720dc7ee9 --- /dev/null +++ b/docs/work/process/customize-process.md @@ -0,0 +1,170 @@ +--- +title: Customize a process | VSTS +description: Your guide to configuring and customizing work tracking processes when connecting to Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 31CA1DCB-8E3E-4B9E-A64A-D47DF23490A3 +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +# Customize a process + +[!INCLUDE [temp](../_shared/process-feature-availability.md)] + +Your process provides the building blocks for tracking work. For each work item type (WIT) you want to customize, you do so from the WIT's **Process>Layout** page. If you haven't [created an inherited process](manage-process.md) yet, do that now. You can only customize inherited processes. + +Any changes you make to the inherited process will automatically show up in the team projects that use that process. + +For example, the following image shows the work item form layout for the Bug WIT. From this page, you can add fields, groups, pages, and custom controls. To modify the workflow, you click **States**. + +<img src="_img/cprocess-intro.png" alt="Admin context, Process, Work item types, bug type, layout tab" style="border: 2px solid #C3C3C3;" /> + + +<a id="what-you-can-customize"> </a> +## What you can customize + +You can customize the elements listed below. Some options of inherited elements are locked and can't be customized. To perform any of these actions, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit a specific process](manage-process.md#process-permissions). + +>[!NOTE] +>For a list of limits placed on the number of fields, work item types, backlog levels, and other objects you can customize, see [Work tracking object limits](../customize/object-limits.md). + + +### Fields + +Choose your inherited process, the work item type and then add and edit fields from the **Layout** page. Customizations are subject to the guidelines and limitations outlined under [What is a field?](customize-process-field.md#field-reference). + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited fields |Custom fields |   | +> |-------------|----------|---------| +> |- [Change the field label](customize-process-field.md#rename-field)<br/>- [Show/Hide field on form](customize-process-field.md#show-hide-field) |- [Add a custom field](customize-process-field.md#add-field)<br/>- [Add pick list (drop-down menu)](customize-process-field.md#pick-list)<br/>- [Add person-name/Identity](customize-process-field.md#identity)<br/>- [Add a rich-text (HTML) field](customize-process-field.md#html) <br/>- [Add a checkbox (Boolean) field](customize-process-field.md#boolean-field)<br/>- [Add a custom control](custom-controls-process.md) |- [Add custom rules to a field](custom-rules.md)<br/>- [Change the field label](customize-process-field.md#rename-field)<br/>- [Set Required/Default options](customize-process-field.md#options)<br/>- [Move the field within the layout](customize-process-form.md#move-field)<br/>- [Remove field from form](customize-process-field.md#remove-field)<br/>- [Delete field](customize-process-field.md#delete-field) | + + + +### Work item types + +Choose your inherited process, and then add or edit a work item type from the **Work item types** page. + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited WITs | Custom WITs |   | +> |-------------|----------|---------| +> |- [Add/remove custom fields](customize-process-field.md)<br/>- [Add/remove custom groups](customize-process-form.md#groups)<br/>- [Add/delete custom pages](customize-process-form.md#pages)<br/>- [Add/remove a custom control](custom-controls-process.md) <br/>- [Enable/disable](customize-process-wit.md#enable-disable) |- [Add custom WIT](customize-process-wit.md#add-wit)<br/>- [Change color or description](customize-process-wit.md#overview)<br/>- [Add/remove custom fields](customize-process-field.md)<br/>- [Add/remove custom groups](customize-process-form.md#groups)<br/>- [Add/delete custom pages](customize-process-form.md#pages)<br/>- [Add/remove a custom control](custom-controls-process.md) |- [Add, edit, or remove a workflow state](customize-process-workflow.md#states)<br/>- [Enable/disable](customize-process-wit.md#enable-disable)<br/>- [Delete](customize-process-wit.md#destroy) | + + + +### Web form layout + +Choose your inherited process and the work item type, and then modify the form from the **Layout** page. + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited groups |Custom groups |   | +> |-------------|----------|---------| +> |- [Relabel](customize-process-form.md#groups)<br/>- [Add/remove custom fields](customize-process-field.md)<br/>- [Show/hide fields](customize-process-field.md#remove-field)<br/>![Inherited field](_img/inherited-icon.png) **Inherited pages**<br/>- [Relabel](customize-process-form.md#pages)<br/>- [Add/remove custom fields](customize-process-field.md)<br/>- [Add/remove a custom group](customize-process-form.md#groups) |- [Add, modify, re-sequence, delete](customize-process-form.md#groups)<br/>- [Add/remove custom fields](customize-process-field.md)<br/>- [Add/Hide a group extension](custom-controls-process.md)<br/>**Custom pages**<br/> - [Add, modify, re-sequence, delete](customize-process-form.md#pages)<br/>- [Add/delete custom fields](customize-process-field.md)<br/>- [Add/Hide a page extension](custom-controls-process.md) | + + +### Workflow states + +Choose your inherited process, the work item type, and then modify the workflow from the **States** page. + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited states |Custom states | +> |-------------|----------| +> |- [View workflow states](customize-process-workflow.md#hide-state)<br/>- [Hide a state](customize-process-workflow.md#hide-state) |- [Add a state](customize-process-workflow.md#add-states)<br/>- [Edit a state (change color or category)](customize-process-workflow.md#edit-state)<br/>- [Remove a state](customize-process-workflow.md#remove-state) | + +### Backlogs +Choose your inherited process, and then modify the backlogs configuration from the **Backlog levels** page. Inherited backlogs aren't locked. + + +> [!div class="mx-tdBreakAll"] +> |![Inherited field](_img/inherited-icon.png) Inherited backlogs |Custom backlogs | +> |-------------|----------| +> |- [Add a custom WIT](customize-process-backlogs-boards.md)<br/>- [Change the default WIT](customize-process-backlogs-boards.md)<br/>- [Rename the requirement backlog](customize-process-backlogs-boards.md#edit-product-backlog)<br/>- [Rename a portfolio backlog](customize-process-backlogs-boards.md#edit-portfolio-backlog) |- [Add a portfolio backlog which displays custom WITs](customize-process-backlogs-boards.md#portfolio-backlogs)<br/>- [Edit or rename a portfolio backlog](customize-process-backlogs-boards.md#edit-portfolio-backlog)<br/>- [Delete the top-level custom portfolio backlog](customize-process-backlogs-boards.md#edit-portfolio-backlog) | + + +<a id="start-customizing"> </a> +## Start customizing +The easiest way to start customizing a process is to start from the work item of the type you want to customize. + +0. From the web portal, open the WIT you want to customize, open the context menu, and choose the Customize. + + <img src="_img/cprocess-web-form-user-story-choose-customize.png" alt="Web portal, web form, open context menu, choose Customizee" style="border: 2px solid #C3C3C3;" /> + + - If the team project already uses an inherited process, then the **Layout** page for the corresponding WIT will open. + + For example, the MyAgile process, User Story WIT, Layout page appears. + + <img src="_img/cprocess-myagile-user-story-layout.png" alt="Web portal, web form, open context menu, choose Customize" style="border: 2px solid #C3C3C3;" /> + + >[!NOTE] + >The **Add custom control** option only appears when [qualifying extensions have been added from the Marketplace](custom-controls-process.md). + + - If the team project uses a system process, but a valid inherited process has been defined, then you have the option to select which inherited process you want the team project to use. + + <img src="_img/cprocess-choose-inherited-process.png" alt="Web portal, Choose process dialoge" style="border: 2px solid #C3C3C3;" /> + + Upon choosing, the Layout page for the corresponding process and WIT opens. + + - If the team project uses a system process, and no valid inherited process have been defined, then the system will automatically create an inherited process, labeling it *AccountName_ParentProcessName*—for example, *fabrikam Agile*—and automatically update the team project to use the process. You can later [rename the process](manage-process.md#process-naming). + + After which, the Layout page for the corresponding process and WIT opens. + +0. From the Layout page, you can customize the WIT. Review the next section for a summary of all the customizations you can make. + +<a id="open-process"> </a> +###Open the Process hub from the user context + +You can also start customizing an inherited process by navigating to the inherited process from the user context. + +0. To open the admin context from the user context, click the ![](../_img/icons/gear_icon.png) gear Settings icon and choose Account settings. + + >[!IMPORTANT] + >If you don't see the Account settings option, then you are working from an on-premises TFS. The Process page isn't supported. You must use the features supported for the On-premises XMl process model as described in [Customize your work tracking experience](../customize/customize-work.md). + + <img src="../process/_img/manage-process-open-account-settings.png" alt="Default Collection Overview, Projects reference processes" style="border: 2px solid #C3C3C3;" /> + +0. Click Process and then select the inherited process you want to customize. If you haven't yet created an inherited process, do that now. See [Create an inherited process](../process/manage-process.md#create-inherited-process). + + <img src="../process/_img/cpfield-choose-select-process.png" alt="Web portal, Account menu, Turn on new navigation selection" style="border: 2px solid #C3C3C3;" /> + +0. From the Work Item Types page, choose the WIT that you want to customize. + + Here we open Bug for the MyAgile process.</p> + + <img src="../process/_img/cpfield-choose-wit.png" alt="Process page, WITs" style="border: 2px solid #C3C3C3;" /> + +### Web versus Visual Studio form layouts + +The customizations you make only impact the work item forms displayed in a web browser. The work item forms displayed in Visual Studio or other [supported clients](../../tools.md) won't reflect any process customizations you make. + + +<a id="return-process-overview"> </a> +## Return to the process list +To return to the Process page, simply click the Process hub or the **All processes** breadcrumb link. + +<img src="_img/cprocess-open-all-processes.png" alt="Return to process overview page" style="border: 2px solid #C3C3C3;" /> + +To return to a specific process and choose another WIT to customize, click the process name from the breadcrumb link. + +## Related notes + +Keep in mind that all team projects that reference the inherited process that you're customizing will automatically update to contain the modifications you make. + +To customize a single team project, always start by [creating an inherited process and changing the team project to use that process](manage-process.md). Then, all the customizations that you make to the inherited process automatically appear for the team project you migrated. + +See also: +- [Work tracking object limits](../customize/object-limits.md) +- [Customize the work tracking experience](../customize/customize-work.md) + +<a id="process-rest-api"> </a> +### Programmatically query for processes + +You can determine the processes defined for an account using the REST API: [Processes](https://visualstudio.com/integrate/api/tfs/processes.md). + +[!INCLUDE [temp](../_shared/help-support-shared.md)] + +[!INCLUDE [temp](../_shared/custom-help.md)] + + + + diff --git a/docs/work/process/manage-process.md b/docs/work/process/manage-process.md new file mode 100644 index 00000000000..12fe96995ea --- /dev/null +++ b/docs/work/process/manage-process.md @@ -0,0 +1,176 @@ +--- +title: Manage processes | VSTS +description: Create and apply a process to a team project working in Visual Studio Team Services (VSTS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 6EB45080-22E2-43AD-92F9-77D03D5C136F +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + +<!-- supports the FWLink: http://go.microsoft.com/fwlink/?LinkID=616878 -->  + + +# Manage processes + +[!INCLUDE [temp](../_shared/process-feature-availability.md)] + +In VSTS, you customize your team project through a process. (You configure your [Agile tools—Scrum and Kanban—through the web UI](../about-teams-and-settings.md).) A process defines the building blocks of the work tracking system. Whenever you create a team project, you select the process you want your team project to use. + +VSTS supports two types of processes. + +- ![locked icon](_img/locked-icon.png) System processes —[Scrum, Agile, and CMMI](../guidance/choose-process.md)—which are locked from being changed except by VSTS. +- ![inherited process icon](_img/inherited-process-icon.png) Inherited processes, which you can customize, are so named as they inherit from the system process from which they were created. Any updates Team Services makes to the parent system process will automatically update your custom inherited process. + +In addition, all processes are shared. That is, one or more team projects can use a single process. Instead of customizing a single team project, you customize a process. Changes made to the process automatically update all team projects that use that process. + +Once you've created an inherited process, you can customize it, create team projects based on it, and change existing team projects to use it. + +For example, as shown in the picture below, you see a list of team projects defined for the *fabrikam* account. The second column shows the process used by each team project. To update the *Fabrikam Fiber* team project, you need to update the *MyAgile* process (which inherits from the Agile system process). Any changes you make to the *MyAgile* process will also update the *Test Agile* team project. You can't customize the *Scrum project*, on the other hand, until you change it to a Scrum inherited process. + +<img src="_img/mprocess-overview-project-list.png" alt="Admin context, Account settings, Overview, Project list and the process they use" style="border: 2px solid #C3C3C3;" /> + +To perform any of the following actions, you must be a member of the Project Collection Administrators group or be [granted explicit permissions to edit or create a specific process](#process-permissions). To get added to an admin group, see [Add administrators](../../accounts/add-administrator-project-collection.md). +- Import Process (only supported for accounts that use the [Hosted XML process model](../customize/hosted-xml-process-model.md)) +- Create an inherited process +- Customize a process +- Change team projects to use an inherited process or a system process +- Add a new team project based on a process +- Enable or disable a process +- Set a process as the default when creating a team project + + +<a id="open-process-wit"> </a> +## Open Process in the admin context + +[!INCLUDE [temp](../_shared/open-process-admin-context-ts.md)] + +<a id="create-inherited-process"></a> +##Create an inherited process +You can create an inherited process from any one of the three system processes: [Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md). + +0. From the Process page, open the … context menu of the process you'll use to create an inherited process, and then choose **Create inherited process**. + + Here, we create an inherited process from the Agile system process. + + <img src="_img/mprocess-create-inherited-process.png" alt="Process, choose Create inherited process" style="border: 2px solid #C3C3C3;" /> + + If you don't have access to these options, ask your project collection admin to [grant you permissions](#process-permissions). + +0. Enter a name for your process and optionally a description. (For naming restrictions, see [Process name restrictions](#process-naming) later in this topic.) + + <img src="_img/mprocess-create-inherited-process-dialog.png" alt="Create inherited process dialog" style="border: 2px solid #C3C3C3;" /> + +Once you've defined the inherited process, you can perform these actions: +- [Customize a process](customize-process.md) +- [Create a team project](#create-team-project) that uses the inherited process +- [Change team projects to use the inherited process](#migrate) + +<a id="migrate"></a> +##Change the process used by team projects + +>[!IMPORTANT] +>When you change a team project to use an inherited process, you may find one or more Agile tools or work items appear in an invalid state. For example: +> +> - If you make a field required, work items with that field undefined will show an error message. You'll need to resolve the errors to make additional changes and save the work item. +> - If you add or remove/hide workflow states of a WIT that appears on the Kanban board, you'll need to update the Kanban board column configurations for all teams defined in the team project. + +You can change the process a team project uses from a system process or inherited process to an inherited process. You can only change team projects to use another process that inherits from the same system process. That is, you can change an Agile-based team project to any process you created from the Agile system process as well as to the Agile process. Whereas, you can't change a Scrum-based team project to an Agile-derived inherited process. + +>[!NOTE] +>You can change the process of a team project as long as you don't have any undeleted work items of a custom work item type that isn't also defined in the target process. +> +>Also, if you change a team project to a system process or other inherited process that doesn't contain the same custom fields, data is still maintained. However, the custom fields that aren't represented in the current process won't appear on the work item form. You can still access the field data through a query or REST APIs. These fields are essentially locked from changes and appear as read-only values. + +0. Open the … context menu for the process and choose the **Change team projects**… option. + + Here we open the menu for the Agile system process: + + <img src="_img/mprocess-change-process-to-core-process-agile.png" alt="Agile process context menu, Choose Change team projects to use Agile" style="border: 2px solid #C3C3C3;" /> + + The system lists only those team projects that are valid for the current process. + +0. Click the checkbox of those team projects you want to change to use the Agile process. + + Here we choose to use the Agile process for the team projects Fabrikam Fiber A and Fabrikam Fiber. Only those projects created from the Agile process or one that inherits from Agile will appear under the Available projects column. + + <img src="_img/mprocess-change-process-dialog-to-agile.png" alt="Change process to a system process dialog" style="border: 2px solid #C3C3C3;" /> + +0. After you've confirmed that the projects you want to change are correct, click Ok. + + + +<a id="create-team-project"> </a> +## Create a team project from a process + +0. Open the … context menu for the process you want to use and choose **New team project**. + + <img src="_img/mprocess-create-team-project.png" alt="Create a team project from the selected process" style="border: 2px solid #C3C3C3;" /> + +0. The Create new project page opens. For details, see [Create your team project](../../accounts/create-team-project.md). + +##Related notes + +An inherited process supports team projects defined in accounts that use the Inherited process models. For an overview of all process models, see [Customize the work tracking experience](../customize/customize-work.md). + +For an overview of what you can customize, see [Customize a process](customize-process.md). + + +<a id="process-permissions"></a> +###Grant or restrict permissions to create and modify an inherited process + +By default, only Project Collection Administrators can create and edit processes. However, these admins can grant permissions to other team members by explicitly setting the **Create process**, **Delete process**, or **Edit process** permissions at the collection level for a specific user. + +To customize a process, you need to grant **Edit process** permissions to a user account for the specific process. + +1. Open the … context menu for the inherited process and choose Security. + + <img src="_img/mprocess-open-security-dialog-inherited.png" alt="Open security dialog" style="border: 2px solid #C3C3C3;" /> + +2. Add the account name of the person you want to grant permissions to, set the permissions to **Allow** that you want them to have, and then click Save changes. For more information about setting permissions, see [Restrict access](../../accounts/restrict-access-tfs.md). + + Here we add Christie Church and allow her to edit the process. + + <img src="_img/mprocess-security-dialog-inherited.png" alt="Permissions for a process dialogue" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +> Each process is a securable unit and has individual access control lists (ACLs) that govern creating, editing, and deleting inherited processes. At the collection level, team project collection administrators can choose which processes can be inherited from and by whom. When you create a new inherited process, the process creator as well as team project collection administrators have full control of the process and can also set individual ACLs for other users and groups to edit and delete the process. + + +<a id="enable-process"> </a> +###Enable/disable a process + +To prevent team projects being created from a process, you disable it. You might choose this option when you want to apply several customizations and don't want the process used until they are complete. Or, you might want to retire use of a process in favor of moving team projects to a new process. + +All system processes and newly created inherited processes are enabled by default. + +1. To disable a process, open the … context menu for the process and choose **Disable process**. + +2. To enable a process, open the … context menu for the process and choose **Enable process**. + + +<a id="default-process"> </a> +###Set the default process + +Set a process as the default to have it pre-selected for any additional team projects you plan to create. + +To set a process as the default, open the … context menu for the process and choose **Set as default process**. + +Account owners and Project Collection Administrators can add team projects from the admin Overview page or the [account My Projects page](../../connect/account-home-pages.md). VSTS will automatically preselect the default selection. + +<a id="process-naming"></a> +###Process name restrictions +Process names must be unique and 128 Unicode characters or less. Also, names can't contain the following characters: ```.,;'`:~\/\*|?"&%$!+=()[]{}<>```. + +To rename a process, open the … context menu for the process and choose **Edit**. + +<a id="process-rest-api"> </a> +### Programmatically query for processes +You can determine the processes defined for an account using the REST API: [Processes](https://www.visualstudio.com/en-us/docs/integrate/api/tfs/processes). + + +[!INCLUDE [temp](../_shared/help-support-shared.md)] + +[!INCLUDE [temp](../_shared/custom-help.md)] + diff --git a/docs/work/process/new-work-item-experience.md b/docs/work/process/new-work-item-experience.md new file mode 100644 index 00000000000..9a8a9bf0be6 --- /dev/null +++ b/docs/work/process/new-work-item-experience.md @@ -0,0 +1,128 @@ +--- +title: New work item web form | TFS +description: The new web form and work item tracking experience supports more integrated and collaborative experiences +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: B4CE99F5-BF4C-4B93-89DC-20C5BD9FB54E +ms.manager: douge +ms.author: kaelli +ms.date: 06/11/2017 +--- + +# New work item tracking experience + +**TFS 2017** + +> [!IMPORTANT] +> **Feature availability:**  The new form and its corresponding features are available from VSTS and the web portal for TFS 2017.<br/> +> - For TFS 2017 users, the new form is automatically available when you add team projects to a new collection. For existing team projects, an admin is required to [enable the new form](../customize/manage-new-form-rollout.md).<br/> +> - For TFS 2015 users, the new form isn't available. You must [upgrade to TFS 2017](https://www.visualstudio.com/downloads/#team-foundation-server-2017) to access the new form.   + +Work items have received a facelift. To provide a fresher, more modern experience to tracking work, we've replaced our "old and clunky" form. Along with the noticeable responsive form layout, with the nre form you now have access to these features: + +- **Discussion control** with a discussion indicator in the banner that summarizes the number of comments in the discussion and from which you can quickly jump to the discussion and add your comments; this control also supports: + - **@mention** which allows you to quickly add team members to receive an email notification with your comments and a link to the work item in which you mentioned them. + - **#ID** which provides a quick way to create links to other work items within the Discussion control +- **Related Work control** that provides a quick method to link to and view linked work items +- **Development control** where you're able to engage with code changes, pull requests, and builds through interactive experiences as described in [Drive Git development for a work item](../backlogs/connect-work-items-to-git-dev-ops.md) +- **History page** with improved readability and with indicators for important changes such as reassignment, change of state, discussion comment, and more +- **Attachment control** that supports drag-and-drop of attachments and attachment preview. +- **Custom control support** that enables adding custom field, group, and page extensions such as multi-value control and toggle control +- Easy copy to clipboard functionality. + +Here's what you'll see when you preview the new form. + +<img src="../_shared/_img/new-form-user-story-3-col.png" alt="New form for user story" style="border: 2px solid #C3C3C3;" /> + +For guidance in using the new form features, see [Add work items to plan and track your project](../backlogs/add-work-items.md). + +## New form features + +### Consistent look and feel + +First off, you'll notice that the form reflects the color of your work item type—bug, user story, or task. And, we've done away with duplicate titles to cut down on clutter. Whether you're working from a backlog, board, or query—your experience remains the same. + +<img src="../_shared/_img/new-form-bug-header.png" alt="New form, bug, header" style="border: 2px solid #C3C3C3;" /> + +### Great consumption experience + +Your data has more structure and organization. Plus, you can focus more easily on areas of interest by collapsing groups to hide details you don't care about. And as you resize the form, it quickly responds to provide you with a great viewing experience even within a limited screen width. + +<img src="../_shared/_img/new-form-exp-resized-user-story-form.png" alt="New form, collapsible groups, responsive form" style="border: 2px solid #C3C3C3;" /> + + +### More viewing area to support core experiences + +All the core tabs—Details, History, Links, and Attachments—now have more screen space. See [History and auditing](../track/history-and-auditing.md) for details on the new History tab. + +<img src="../backlogs/_img/add-work-item-history.png" alt="New form, history tab" style="border: 2px solid #C3C3C3;" /> + +<a id="discussion"> </a> +### Discussion + +Use the new Discussion section to add and review comments made about the work being performed. + +Click the ![Discussions icon](../_img/icons/icon-discussions-wi.png) discussion icon, which indicates how many comments have been added, to move your focus to the discussion section. Click the ![full screen icon](../_img/icons/fullscreen_icon.png) full screen icon to expand the display of the discussion section within the form. + +Within the discussion section, you can use the [**@mention** control](../../notifications/at-mentions.md) to notify another team member about the discussion. Simply type **@** and their name. To reference a work item, use the [**#ID** control](../../notifications/add-links-to-work-items.md). Type **#** and a list of work items that you've recently referenced will appear from which you can select. + +<img src="../backlogs/_img/add-work-items-discussion.png" alt="Discussion section" style="border: 2px solid #C3C3C3;" /> + +> [!IMPORTANT] +> For on-premises TFS, [you must configure an SMTP sever](../../tfs-server/admin/setup-customize-alerts.md) in order for team members to receive notifications. + +### Access to other tasks + +Looking for the toolbar task options? You access them now through the ![Actions icon](../_img/icons/actions-icon.png) Actions icon. + +<img src="../backlogs/_img/new-form-action-menu.png" alt="New form, User story, Actions menu" style="border: 2px solid #C3C3C3;" /> + +<a id="switch-new"> </a> +## Switch to the new experience + +Depending on the [opt-in mode your admin selected](../customize/manage-new-form-rollout.md#opt-in), you'll either automatically see the new web form when you open a work item, or you'll have the choice to switch to the new form. + +When you switch, all forms displayed through the web portal for all work item types will now display with the new experiences. + +![User story, Switch to New form](../customize/_img/m-new-form-try-switch.png) + +As this switch is set on a per-user basis, other account users will continue to see the old form until they also choose to switch. + +<a id="switch-back"> </a> +###Switch back to the old form + +If your admin has enabled opt-in to support switch back. Simply click the ![Actions icon](../_img/icons/actions-icon.png) to open the context menu to switch back to the old layouts. + +![New web form, user story, Back to old form menu option](../customize/_img/m-new-form-user-story-switch-to-old-form.png) + +If you don't see this option, then the new form has been enabled for all users, and switching back is managed by your admin. + +When you switch back, all forms revert to the layout they had previously. If you do choose to switch back, we'd appreciate hearing what didn't work for you with the new form layout. + +## Related notes + +The new form also supports customization through the user interface with the Inheritance process model. To learn more about process models and what's supported with each, see [Customize your work tracking experience](../customize/customize-work.md). + +To manage the rollout of the new form or customize it, see: +- [Manage new form rollout](../customize/manage-new-form-rollout.md) +- [Customize the new form](../customize/customize-wit-form.md) (On-premises XML process model) + +For guidance in using the new form, see: +- [Add work items to plan and track your project](../backlogs/add-work-items.md) +- [Drive Git development for a work item](../backlogs/connect-work-items-to-git-dev-ops.md) + +For news of upcoming features, or extending the work tracking experience, see these resources: +- [VSTS Features Timeline](/vsts/release-notes/index) +- [VSTS REST API Reference](https://visualstudio.com/integrate/api/overview) + + +### Will the new work item experience become permanent? + +Yes, however, we're always interested in how to improve the experience. What do you like or don't like about the new form layout and experience? + +Send your suggestions via **[UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services)** + + +### Will this impact Visual Studio work item forms? + +Not at this time. \ No newline at end of file diff --git a/docs/work/reference/_img/IC268535.png b/docs/work/reference/_img/IC268535.png new file mode 100644 index 00000000000..fdcba9d15b4 Binary files /dev/null and b/docs/work/reference/_img/IC268535.png differ diff --git a/docs/work/reference/_img/IC268536.png b/docs/work/reference/_img/IC268536.png new file mode 100644 index 00000000000..174d8c9aad0 Binary files /dev/null and b/docs/work/reference/_img/IC268536.png differ diff --git a/docs/work/reference/_img/IC268537.png b/docs/work/reference/_img/IC268537.png new file mode 100644 index 00000000000..06563f8e6d0 Binary files /dev/null and b/docs/work/reference/_img/IC268537.png differ diff --git a/docs/work/reference/_img/IC268538.png b/docs/work/reference/_img/IC268538.png new file mode 100644 index 00000000000..bb5b63ef0fe Binary files /dev/null and b/docs/work/reference/_img/IC268538.png differ diff --git a/docs/work/reference/_img/alm_rm_remoteaudio.png b/docs/work/reference/_img/alm_rm_remoteaudio.png new file mode 100644 index 00000000000..4b5a1d2ebdf Binary files /dev/null and b/docs/work/reference/_img/alm_rm_remoteaudio.png differ diff --git a/docs/work/reference/_img/alm_rup_remworkiteration.png b/docs/work/reference/_img/alm_rup_remworkiteration.png new file mode 100644 index 00000000000..9745f913394 Binary files /dev/null and b/docs/work/reference/_img/alm_rup_remworkiteration.png differ diff --git a/docs/work/reference/_img/alm_rup_roundtriprollup.png b/docs/work/reference/_img/alm_rup_roundtriprollup.png new file mode 100644 index 00000000000..aa00dc3ac27 Binary files /dev/null and b/docs/work/reference/_img/alm_rup_roundtriprollup.png differ diff --git a/docs/work/reference/_img/alm_twa_storyboard_linkscontrol.png b/docs/work/reference/_img/alm_twa_storyboard_linkscontrol.png new file mode 100644 index 00000000000..2ebdb62ea03 Binary files /dev/null and b/docs/work/reference/_img/alm_twa_storyboard_linkscontrol.png differ diff --git a/docs/work/reference/_img/alm_upg_errortestmanagement.png b/docs/work/reference/_img/alm_upg_errortestmanagement.png new file mode 100644 index 00000000000..59ec8ae2ba2 Binary files /dev/null and b/docs/work/reference/_img/alm_upg_errortestmanagement.png differ diff --git a/docs/work/reference/_img/alm_vrf_taskboard_agile_v5.png b/docs/work/reference/_img/alm_vrf_taskboard_agile_v5.png new file mode 100644 index 00000000000..5377d47aab1 Binary files /dev/null and b/docs/work/reference/_img/alm_vrf_taskboard_agile_v5.png differ diff --git a/docs/work/reference/_img/alm_vrf_taskboard_agile_v6.png b/docs/work/reference/_img/alm_vrf_taskboard_agile_v6.png new file mode 100644 index 00000000000..3672df408d3 Binary files /dev/null and b/docs/work/reference/_img/alm_vrf_taskboard_agile_v6.png differ diff --git a/docs/work/reference/_img/alm_wit_attachsize.png b/docs/work/reference/_img/alm_wit_attachsize.png new file mode 100644 index 00000000000..abc9aca508f Binary files /dev/null and b/docs/work/reference/_img/alm_wit_attachsize.png differ diff --git a/docs/work/reference/_img/alm_wit_custom_3columns.png b/docs/work/reference/_img/alm_wit_custom_3columns.png new file mode 100644 index 00000000000..9992b60ab8a Binary files /dev/null and b/docs/work/reference/_img/alm_wit_custom_3columns.png differ diff --git a/docs/work/reference/_img/alm_wit_custom_calendarfield.png b/docs/work/reference/_img/alm_wit_custom_calendarfield.png new file mode 100644 index 00000000000..9f261e69c2a Binary files /dev/null and b/docs/work/reference/_img/alm_wit_custom_calendarfield.png differ diff --git a/docs/work/reference/_img/alm_wit_custom_form.png b/docs/work/reference/_img/alm_wit_custom_form.png new file mode 100644 index 00000000000..f50c37efd48 Binary files /dev/null and b/docs/work/reference/_img/alm_wit_custom_form.png differ diff --git a/docs/work/reference/_img/alm_wit_custom_group.png b/docs/work/reference/_img/alm_wit_custom_group.png new file mode 100644 index 00000000000..74473dd24e0 Binary files /dev/null and b/docs/work/reference/_img/alm_wit_custom_group.png differ diff --git a/docs/work/reference/_img/alm_wit_custom_htmlfield.png b/docs/work/reference/_img/alm_wit_custom_htmlfield.png new file mode 100644 index 00000000000..a0654d1fe38 Binary files /dev/null and b/docs/work/reference/_img/alm_wit_custom_htmlfield.png differ diff --git a/docs/work/reference/_img/alm_wit_custom_splitter.png b/docs/work/reference/_img/alm_wit_custom_splitter.png new file mode 100644 index 00000000000..d776c32f39c Binary files /dev/null and b/docs/work/reference/_img/alm_wit_custom_splitter.png differ diff --git a/docs/work/reference/_img/alm_wit_custom_tabs.png b/docs/work/reference/_img/alm_wit_custom_tabs.png new file mode 100644 index 00000000000..6b895a5ab6b Binary files /dev/null and b/docs/work/reference/_img/alm_wit_custom_tabs.png differ diff --git a/docs/work/reference/_img/alm_wit_history.png b/docs/work/reference/_img/alm_wit_history.png new file mode 100644 index 00000000000..811227417aa Binary files /dev/null and b/docs/work/reference/_img/alm_wit_history.png differ diff --git a/docs/work/reference/_img/apply-rule-work-item-field/IC757527.png b/docs/work/reference/_img/apply-rule-work-item-field/IC757527.png new file mode 100644 index 00000000000..295e1d12319 Binary files /dev/null and b/docs/work/reference/_img/apply-rule-work-item-field/IC757527.png differ diff --git a/docs/work/reference/_img/date-time-control.png b/docs/work/reference/_img/date-time-control.png new file mode 100644 index 00000000000..c10a547e9e3 Binary files /dev/null and b/docs/work/reference/_img/date-time-control.png differ diff --git a/docs/work/reference/_img/define-modify-work-item-fields/IC633020.png b/docs/work/reference/_img/define-modify-work-item-fields/IC633020.png new file mode 100644 index 00000000000..2d3ae7cca8e Binary files /dev/null and b/docs/work/reference/_img/define-modify-work-item-fields/IC633020.png differ diff --git a/docs/work/reference/_img/export-process-step-1.png b/docs/work/reference/_img/export-process-step-1.png new file mode 100644 index 00000000000..fc5463a4e97 Binary files /dev/null and b/docs/work/reference/_img/export-process-step-1.png differ diff --git a/docs/work/reference/_img/export-process-step-2.png b/docs/work/reference/_img/export-process-step-2.png new file mode 100644 index 00000000000..de676f92cee Binary files /dev/null and b/docs/work/reference/_img/export-process-step-2.png differ diff --git a/docs/work/reference/_img/export-process-step-3.png b/docs/work/reference/_img/export-process-step-3.png new file mode 100644 index 00000000000..d068858491e Binary files /dev/null and b/docs/work/reference/_img/export-process-step-3.png differ diff --git a/docs/work/reference/_img/export-process-step-4.png b/docs/work/reference/_img/export-process-step-4.png new file mode 100644 index 00000000000..aef09f7f574 Binary files /dev/null and b/docs/work/reference/_img/export-process-step-4.png differ diff --git a/docs/work/reference/_img/html-field-control.png b/docs/work/reference/_img/html-field-control.png new file mode 100644 index 00000000000..25f9e0e11b3 Binary files /dev/null and b/docs/work/reference/_img/html-field-control.png differ diff --git a/docs/work/reference/_img/icon_addnewlinkedworkitem.png b/docs/work/reference/_img/icon_addnewlinkedworkitem.png new file mode 100644 index 00000000000..53f050302cc Binary files /dev/null and b/docs/work/reference/_img/icon_addnewlinkedworkitem.png differ diff --git a/docs/work/reference/_img/icon_deleteredxwit.png b/docs/work/reference/_img/icon_deleteredxwit.png new file mode 100644 index 00000000000..778c7660e65 Binary files /dev/null and b/docs/work/reference/_img/icon_deleteredxwit.png differ diff --git a/docs/work/reference/_img/icon_openattachment.png b/docs/work/reference/_img/icon_openattachment.png new file mode 100644 index 00000000000..029a4b52574 Binary files /dev/null and b/docs/work/reference/_img/icon_openattachment.png differ diff --git a/docs/work/reference/_img/icon_openinquery.png b/docs/work/reference/_img/icon_openinquery.png new file mode 100644 index 00000000000..0629c5f8901 Binary files /dev/null and b/docs/work/reference/_img/icon_openinquery.png differ diff --git a/docs/work/reference/_img/icon_openworkitem.png b/docs/work/reference/_img/icon_openworkitem.png new file mode 100644 index 00000000000..029a4b52574 Binary files /dev/null and b/docs/work/reference/_img/icon_openworkitem.png differ diff --git a/docs/work/reference/_img/icon_refreshnode.png b/docs/work/reference/_img/icon_refreshnode.png new file mode 100644 index 00000000000..4c615ec523d Binary files /dev/null and b/docs/work/reference/_img/icon_refreshnode.png differ diff --git a/docs/work/reference/_img/icon_savewit.png b/docs/work/reference/_img/icon_savewit.png new file mode 100644 index 00000000000..1a0205dc549 Binary files /dev/null and b/docs/work/reference/_img/icon_savewit.png differ diff --git a/docs/work/reference/_img/icon_witcheckgreen.png b/docs/work/reference/_img/icon_witcheckgreen.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/work/reference/_img/icon_witcheckgreen.png differ diff --git a/docs/work/reference/_img/icon_witerror.png b/docs/work/reference/_img/icon_witerror.png new file mode 100644 index 00000000000..2564169e737 Binary files /dev/null and b/docs/work/reference/_img/icon_witerror.png differ diff --git a/docs/work/reference/_img/icon_witlinkdelete.png b/docs/work/reference/_img/icon_witlinkdelete.png new file mode 100644 index 00000000000..6d9d7651934 Binary files /dev/null and b/docs/work/reference/_img/icon_witlinkdelete.png differ diff --git a/docs/work/reference/_img/icon_witlinkedit.png b/docs/work/reference/_img/icon_witlinkedit.png new file mode 100644 index 00000000000..345205661a0 Binary files /dev/null and b/docs/work/reference/_img/icon_witlinkedit.png differ diff --git a/docs/work/reference/_img/linkscontrol-bug-form-dev-related-links.png b/docs/work/reference/_img/linkscontrol-bug-form-dev-related-links.png new file mode 100644 index 00000000000..9b55d4ba53f Binary files /dev/null and b/docs/work/reference/_img/linkscontrol-bug-form-dev-related-links.png differ diff --git a/docs/work/reference/_img/linkscontrol-composite-field.png b/docs/work/reference/_img/linkscontrol-composite-field.png new file mode 100644 index 00000000000..3ee4cd83ce7 Binary files /dev/null and b/docs/work/reference/_img/linkscontrol-composite-field.png differ diff --git a/docs/work/reference/_img/linkscontrol-external-link-types.png b/docs/work/reference/_img/linkscontrol-external-link-types.png new file mode 100644 index 00000000000..95c5949a94c Binary files /dev/null and b/docs/work/reference/_img/linkscontrol-external-link-types.png differ diff --git a/docs/work/reference/_img/linkscontrol-related-work-menu-options.png b/docs/work/reference/_img/linkscontrol-related-work-menu-options.png new file mode 100644 index 00000000000..6989118404a Binary files /dev/null and b/docs/work/reference/_img/linkscontrol-related-work-menu-options.png differ diff --git a/docs/work/reference/_img/linkscontrol-test-related-links.png b/docs/work/reference/_img/linkscontrol-test-related-links.png new file mode 100644 index 00000000000..79a60518ee2 Binary files /dev/null and b/docs/work/reference/_img/linkscontrol-test-related-links.png differ diff --git a/docs/work/reference/_img/linkscontrol-work-item-link-types.png b/docs/work/reference/_img/linkscontrol-work-item-link-types.png new file mode 100644 index 00000000000..a04684abac4 Binary files /dev/null and b/docs/work/reference/_img/linkscontrol-work-item-link-types.png differ diff --git a/docs/work/reference/_img/pnt_wit_objects.png b/docs/work/reference/_img/pnt_wit_objects.png new file mode 100644 index 00000000000..fc341cc1a43 Binary files /dev/null and b/docs/work/reference/_img/pnt_wit_objects.png differ diff --git a/docs/work/reference/_img/process-config-bug-form-header-bug-icon.png b/docs/work/reference/_img/process-config-bug-form-header-bug-icon.png new file mode 100644 index 00000000000..486c42a07b3 Binary files /dev/null and b/docs/work/reference/_img/process-config-bug-form-header-bug-icon.png differ diff --git a/docs/work/reference/_img/process-config-bug-form-header-state-colors.png b/docs/work/reference/_img/process-config-bug-form-header-state-colors.png new file mode 100644 index 00000000000..97b910a0973 Binary files /dev/null and b/docs/work/reference/_img/process-config-bug-form-header-state-colors.png differ diff --git a/docs/work/reference/_img/process-config-xml-element-groups.png b/docs/work/reference/_img/process-config-xml-element-groups.png new file mode 100644 index 00000000000..071e8d1767d Binary files /dev/null and b/docs/work/reference/_img/process-config-xml-element-groups.png differ diff --git a/docs/work/reference/_img/process-configuration-xml-element-reference/IC660915.png b/docs/work/reference/_img/process-configuration-xml-element-reference/IC660915.png new file mode 100644 index 00000000000..205348a2f28 Binary files /dev/null and b/docs/work/reference/_img/process-configuration-xml-element-reference/IC660915.png differ diff --git a/docs/work/reference/_img/process-configuration-xml-element-reference/IC660916.png b/docs/work/reference/_img/process-configuration-xml-element-reference/IC660916.png new file mode 100644 index 00000000000..b4fd8bb9940 Binary files /dev/null and b/docs/work/reference/_img/process-configuration-xml-element-reference/IC660916.png differ diff --git a/docs/work/reference/_img/processconfig-list-wi-with-icons.png b/docs/work/reference/_img/processconfig-list-wi-with-icons.png new file mode 100644 index 00000000000..5039d1374f4 Binary files /dev/null and b/docs/work/reference/_img/processconfig-list-wi-with-icons.png differ diff --git a/docs/work/reference/_img/processconfig-wit-icons-four.png b/docs/work/reference/_img/processconfig-wit-icons-four.png new file mode 100644 index 00000000000..e7e29d52a65 Binary files /dev/null and b/docs/work/reference/_img/processconfig-wit-icons-four.png differ diff --git a/docs/work/reference/_img/processconfig-wit-icons-one.png b/docs/work/reference/_img/processconfig-wit-icons-one.png new file mode 100644 index 00000000000..91a883d57b3 Binary files /dev/null and b/docs/work/reference/_img/processconfig-wit-icons-one.png differ diff --git a/docs/work/reference/_img/processconfig-wit-icons-three.png b/docs/work/reference/_img/processconfig-wit-icons-three.png new file mode 100644 index 00000000000..4d96025c2e7 Binary files /dev/null and b/docs/work/reference/_img/processconfig-wit-icons-three.png differ diff --git a/docs/work/reference/_img/processconfig-wit-icons-two.png b/docs/work/reference/_img/processconfig-wit-icons-two.png new file mode 100644 index 00000000000..d8c838d0626 Binary files /dev/null and b/docs/work/reference/_img/processconfig-wit-icons-two.png differ diff --git a/docs/work/reference/_img/procguid_agilereports.png b/docs/work/reference/_img/procguid_agilereports.png new file mode 100644 index 00000000000..9d1f0cf3f4f Binary files /dev/null and b/docs/work/reference/_img/procguid_agilereports.png differ diff --git a/docs/work/reference/_img/procguid_attachment.png b/docs/work/reference/_img/procguid_attachment.png new file mode 100644 index 00000000000..8aa269e3ba4 Binary files /dev/null and b/docs/work/reference/_img/procguid_attachment.png differ diff --git a/docs/work/reference/_img/procguid_linktoolbar.png b/docs/work/reference/_img/procguid_linktoolbar.png new file mode 100644 index 00000000000..c6ac31b38e2 Binary files /dev/null and b/docs/work/reference/_img/procguid_linktoolbar.png differ diff --git a/docs/work/reference/_img/procguide_bugworkflow.png b/docs/work/reference/_img/procguide_bugworkflow.png new file mode 100644 index 00000000000..f93588e613b Binary files /dev/null and b/docs/work/reference/_img/procguide_bugworkflow.png differ diff --git a/docs/work/reference/_img/rpt_workitem_folders.png b/docs/work/reference/_img/rpt_workitem_folders.png new file mode 100644 index 00000000000..e713987632c Binary files /dev/null and b/docs/work/reference/_img/rpt_workitem_folders.png differ diff --git a/docs/work/reference/_img/scrum_pbistate.png b/docs/work/reference/_img/scrum_pbistate.png new file mode 100644 index 00000000000..753e8d34b39 Binary files /dev/null and b/docs/work/reference/_img/scrum_pbistate.png differ diff --git a/docs/work/reference/_img/weblayout-ref-checkbox-control-boolean-field.png b/docs/work/reference/_img/weblayout-ref-checkbox-control-boolean-field.png new file mode 100644 index 00000000000..da973fd0211 Binary files /dev/null and b/docs/work/reference/_img/weblayout-ref-checkbox-control-boolean-field.png differ diff --git a/docs/work/reference/_img/weblayout-system-controls-details-page.png b/docs/work/reference/_img/weblayout-system-controls-details-page.png new file mode 100644 index 00000000000..980d45c2bb7 Binary files /dev/null and b/docs/work/reference/_img/weblayout-system-controls-details-page.png differ diff --git a/docs/work/reference/_img/wit_iconoffice.png b/docs/work/reference/_img/wit_iconoffice.png new file mode 100644 index 00000000000..8dc210c2d72 Binary files /dev/null and b/docs/work/reference/_img/wit_iconoffice.png differ diff --git a/docs/work/reference/_img/wit_ss_hyperlinkcombolabel.png b/docs/work/reference/_img/wit_ss_hyperlinkcombolabel.png new file mode 100644 index 00000000000..24d9e2f223a Binary files /dev/null and b/docs/work/reference/_img/wit_ss_hyperlinkcombolabel.png differ diff --git a/docs/work/reference/_img/wit_ss_hyperlinklabel.png b/docs/work/reference/_img/wit_ss_hyperlinklabel.png new file mode 100644 index 00000000000..c98fc7ad01d Binary files /dev/null and b/docs/work/reference/_img/wit_ss_hyperlinklabel.png differ diff --git a/docs/work/reference/_img/wit_ss_linkscontrol.png b/docs/work/reference/_img/wit_ss_linkscontrol.png new file mode 100644 index 00000000000..ba87304c57f Binary files /dev/null and b/docs/work/reference/_img/wit_ss_linkscontrol.png differ diff --git a/docs/work/reference/add-or-change-how-project-fields-map-to-tfs-fields.md b/docs/work/reference/add-or-change-how-project-fields-map-to-tfs-fields.md new file mode 100644 index 00000000000..2b70279cefa --- /dev/null +++ b/docs/work/reference/add-or-change-how-project-fields-map-to-tfs-fields.md @@ -0,0 +1,41 @@ +--- +title: Change how Project fields map to TFS fields | TFS +description: Customize how data is published and refreshed by modifying the Microsoft Project mapping file for Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 0d7ae7ad-a329-4356-a0b2-57d31a96f16f +ms.author: kaelli +ms.manager: douge +ms.date: 02/22/2017 +--- +# Add or change how Project fields map to TFS fields + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can customize how data is published and refreshed by modifying the Microsoft Project mapping file. When publishing or refreshing tasks in Project, the mapping file determines how Project task fields map to Team Foundation Server (TFS) work item fields. Also, the mapping file controls the publishing behavior. + +> [!IMPORTANT] +> If you are using Project Professional to synchronize tasks with TFS work item data, then you must [Customize the field mapping between TFS and Project Server](../tfs-ps-sync/customize-field-mapping-tfs-project-server.md). + + You can customize the behavior when tasks are published or refreshed. You can change which fields in Team Foundation are mapped to Microsoft Project fields. You can control if fields are only published, or both published and refreshed. + +- [Customize the Microsoft Project field mapping file](customize-project-field-mapping-file.md) + + **Change the way Project fields map and are published or refreshed in Team Foundation.** You can customize the way in which fields are defined for work items that are stored in Team Foundation and that are mapped to fields that are defined for Microsoft Project. You can change the way specific fields are published and designate the default link type to use when you create hierarchical or tree links and dependency links. + +- [Field mappings in Microsoft Project](field-mappings-in-microsoft-project.md) + + **Review the types of Office Project fields that can be mapped to Team Foundation**. You can find specific support information about how to map Team Foundation fields and Microsoft Project fields. + +- [Create your backlog and tasks using Project](../office/create-your-backlog-tasks-using-project.md) + + **Understand how fields map between Project and TFS**. You can understand how data in your office project plan maps to work items in Team Foundation by viewing the Microsoft Project column mappings. The mappings identify which Microsoft Project column maps to a field in Team Foundation. + +- [TFSFieldMapping](upload-or-download-the-microsoft-project-mapping-file.md) + + **Use the TFSFieldMapping command**. To modify the Microsoft Project field mapping file for a team project, you must first download the file. + +## Related notes +- [Address inaccuracies published for summary values](../../report/address-inaccuracies-published-for-summary-values.md) +- [Work in Excel and Project](../office/track-work-vsts-tfs.md) +- [Create your backlog and tasks using Project](../office/create-your-backlog-tasks-using-project.md) \ No newline at end of file diff --git a/docs/work/reference/add-or-modify-work-item-fields-to-support-reporting.md b/docs/work/reference/add-or-modify-work-item-fields-to-support-reporting.md new file mode 100644 index 00000000000..b2a3af6008b --- /dev/null +++ b/docs/work/reference/add-or-modify-work-item-fields-to-support-reporting.md @@ -0,0 +1,241 @@ +--- +title: Change reporting attributes | TFS +description: Customize which fields appear in the relational warehouse or cube to support reporting - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 8b963584-88fd-423a-8f88-61cadf9e1373 +ms.author: kaelli +ms.manager: douge +ms.date: 02/10/2017 +--- +# Add or modify work item fields to support reporting + + +<b> TFS 2017 | TFS 2015 </b> + +>[!IMPORTANT] +>This topic applies to team project customization for On-premises XML process models. For you to view reports, you must have configured your TFS and team project to support reporting. See [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md). +> +>For an overview of process models and customization options, see [Customize your work tracking experience](../customize/customize-work.md). + + +You use work item fields to track data for a work item type, to define the filter criteria for queries, and to use in reports. Any field, except system fields, that you want to appear in a report must be defined in the definition file for the types of work items that the field will track. System fields are automatically defined for every work item type. However, they must be included in the work item form to support data entry. + + To support reporting, you can add fields or change the attributes of existing fields. When you add or modify fields, you should apply systematic naming conventions to make sure that data is logically grouped into folders in the SQL Server Analysis Services cube. + + + For a list of reportable fields defined in the default process templates, see [Reportable fields reference](reportable-fields-reference.md). + +<a name="best_practices"></a> + +### Best practices + Before you add or modify a field, review the following best practices: + +- Determine whether you can use a field that is already defined in the team project collection that contains your team project. Use of an existing field supports cross-project reporting. + +- Determine whether you can use a field that is already defined in another project collection in the deployment of Visual Studio Team Foundation Server. Use of an existing field supports cross-project reporting. + +- You can have no more than 1,024 fields in each project collection and no more than 1,024 unique reportable fields in all project collections throughout a deployment of Team Foundation Server. Merged fields count as one reportable field. + +- Institute a standard procedure and review process to add and modify fields in process templates, team projects, or project collections. + +- Use systematic naming conventions when you label fields for reporting. When you assign reference names in a systematic manner across all team project collections in a deployment of Team Foundation Server, you guarantee a more consistent and usable warehouse and cube schema, and you avoid schema conflicts in the warehouse. For more information, see [Resolve data warehouse schema conflicts](../../report/admin/resolve-schema-conflicts.md). + + You can assign up to four label attributes to a work item field: + + > [!NOTE] + > Fields that are defined in the process templates for Microsoft Solutions Framework are not assigned a reporting name or a reporting reference name. By default, the reference name and name attributes are used. + + - `name`. The friendly name of the field that appears in the drop-down menus of work item queries. The friendly name must be unique across all fields that are defined in a team project. Also, the friendly name may be different from the displayed label that is assigned to the field on the work item form. For more information, see [Control](control-xml-element-reference.md). + + - `refname`. The unique label that is assigned to the field that distinguishes it from all other fields that are defined in the team project collection. The value that is assigned to the `refname` cannot be changed. + + For requirements of and restrictions on friendly names and reference names for fields, see [Naming conventions for work item tracking objects](../../reference/naming-restrictions.md#ProjectNames). + + - `reportingname`. Optional attribute. The name that is used to identify a field in reports. When not explicitly set, the value that is assigned to the `name` attribute is used. + + - `reportingrefname`. Optional attribute. The unique label that is assigned to a reportable field that distinguishes it from all other reportable fields that are defined in all team project collections. When not explicitly set, the value that is assigned to the `refname` attribute is used. For recommended naming conventions, see [Best Practices when Assigning Reporting Reference Names](#bp_labels) later in this topic. + + > [!NOTE] + > The reporting reference names are visible only from a PivotTable report or the Analysis Services cube. + + + +<a name="use_field"></a> +## Use an existing field + You should use a field that is already defined if that field matches the information that you want to track and report on. To use an existing field, perform the following steps: + +- Identify the field that you want to use. Use the **witadmin listfields** command to identify the fields and their attributes that are defined for all project collections. For more information, see [List fields that are defined for a team project collection](#list_fields) later in this topic. + +- Determine whether the field is reportable and whether the reportable attributes meet your reporting needs. + +- If it is not reportable, use the **witadmin changefield** to change the reportable attribute for the project collections in which it is used. For more information, see [Change a reportable attribute for a field](#change_attribute) later in this topic. + +- For the project collection where the field is not defined, add it to the XML definition files for the work item types that you want to use to track data. For more information, see [Add fields to support reporting](#add_a_field) later in this topic. + +<a name="list_fields"></a> +## List fields that are defined for a team project collection + You can use the **witadmin listfields** command to list fields and their attributes. You can list a specified field or all fields that are defined in a project collection. The **witadmin listfields** command has the following syntax: + +``` +witadmin listfields /collection:CollectionURL /n:RefName +``` + + For more information, see [Manage work item fields](witadmin/manage-work-item-fields.md). + +<a name="reportable"></a> +## Reportable field attributes + Reportable fields have a `reportable` attribute value of `Detail`, `Dimension`, or `Measure`. The following attributes determine how work item fields are exported and processed to the data warehouse databases: + +- `reportingtype`. To include a field in reports, you must assign one of the following values to the `reportable` attribute: + + - Assign `Detail` to export the field to the relational warehouse database but not to the cube. As the following example shows, use the `Detail` type only for Integer, Double, String, or DateTime fields: + + ``` + <FIELD refname="MyCorp.Summary" name="Summary" type="String" reportable="detail"> + ``` + + - Assign `Dimension` to export the field to both the relational warehouse database and the cube. As the following example shows, use `Dimension` only for Integer, String, or DateTime fields. This value is useful to include fields that are used to filter reports (for example, fields that have lists of valid values). + + ``` + <FIELD refname="MyCorp.Category" name="Category" type="String" reportable="dimension"> + ``` + + - Assign `Measure` to support the processing of precalculated values in the cube. Use the `Measure` type only for Integer and Double fields. + + When you assign Measure as the `reportingtype`, you must assign `sum` as the `formula`, as the following example shows: + + ``` + <FIELD refname="MyCorp.Cost" name="Cost" type="Integer" reportable="measure" formula="sum"> + ``` + +- `reportingrefname`. You can assign a different reference name to a field that is marked as reportable. If no value is specified, the value that is assigned to the `refname` attribute is used. + + You can use this attribute to either merge or diverge fields that are included in reports. To merge two fields that have distinct reference names and that are defined in different project collections, you assign the same `reportingrefname` to both. To diverge two fields that have the same reference name but that are defined in different project collections, you assign a different `reportingrefname` to each field. + + You should merge fields whenever possible to minimize the number of fields in the warehouse and to keep under the maximum limit of 1024 reportable fields. You can generate cross-group reports with merged fields. + +- `reportingname`. You can assign a different label to a field that is used to display data in reports. If no value is specified, the friendly name that is assigned for the `name` attribute is used. The value that is assigned to the `reportingname` appears in the cube. The value that is assigned to the `reportingrefname` does not appear. + + > [!IMPORTANT] + > You should use best practices to label reporting fields so that they are grouped together in the PivotTable reports. For more information, see [Best Practices when Assigning Reporting Reference Names](#bp_labels). + + +<a name="change_attribute"></a> +## Change a reportable attribute for a work item field + + You can make an existing field reportable by changing the attribute assignments of the field that are defined for a project collection. An existing field is defined in one or more work item type definitions. Also, you can change all attributes that determine how a field is processed in the data warehouses. + + You can use the following sequence of steps to change the attribute assignment of a field: + +1. You can use the **witadmin changefield** command to change an attribute assignment to a field. You exercise this command for a team project collection. Use the following syntax: + + ``` + witadmin changefield /collection:CollectionURL /n:RefName [/name:NewName] [/syncnamechanges:true | false] [/reportingname:ReportingName] [/reportingrefname:ReportingRefName] [/reportingtype:Type] [/reportingformula:Formula] [/noprompt] + ``` + + To make an existing field reportable, change the reportingtype. For example, to make the AW.Common.TeamPriority field available for filtering of reports, assign the Dimension value to it: + + ``` + witadmin changefield /collection:http://AdventureWorksServer:8080/AWTeam/Collection1 /n:AW.Common.TeamPriority /reportingtype:dimension + ``` + + For more information, see [Manage work item fields](witadmin/manage-work-item-fields.md). + +2. (Optional) If you have more than one project collection, you may want to make similar changes to the work item field that is defined in that collection. To avoid schema conflicts when you export and process data to the data warehouse databases, you must assign the same values to these attributes across all collections: + + - Field type (the value for this field cannot be changed for an existing field). + + - Reporting type. + + - Reporting name. + + For more information, see [Resolve data warehouse schema conflicts](../../report/admin/resolve-schema-conflicts.md). + +3. After you have made all changes to the work item fields that you want to use for reporting, you must process the data warehouse databases. You can use the **ProcessWarehouse** and **ProcessAnalysis** Web services, which are available through the **WarehouseControlWebService**. + + This step makes sure that people who use reports do not see an error when you change the field attributes. + + For more information, see [Manage work item fields](witadmin/manage-work-item-fields.md). + +<a name="add_a_field"></a> +## Add fields to support reporting + You can add fields to the definition of a work item type or types. When you add the field, you should add the same field element definition to all types of work items for which the field will support reporting. If you want the field to support cross-project reporting, the field should be added to all work item types in all team projects that will be reported on. + + For more information, see [Define and modify work item fields](define-modify-work-item-fields.md). + +<a name="verify"></a> +## Verify changes made to reportable field attributes + You can verify the changes that you made to reportable field attributes by processing the data warehouses on demand and then checking the reports to verify that they are updated. Or you can wait until the warehouse adapter jobs run. By default, the relational database is processed every few minutes. However, the cube is processed every two hours by default. + +> [!NOTE] +> For more information about the **WarehouseControlWebService**, see [Manually process the TFS data warehouse and analysis services cube](../../report/admin/manually-process-data-warehouse-and-cube.md). + +1. Process the relational data warehouse on demand by using the **ProcessWarehouse WarehouseControlWebService**. + +2. Process the cube on demand by using the **ProcessAnalysisDatabase WarehouseControlWebService**. + +3. Verify that the reports are being updated. View a report through the dashboard or Report Manager. + +<a name="bp_labels"></a> +## Best practices when assigning reporting reference names + For reporting reference names, you want to assign labels so that you can easily find the fields in the PivotTable report and the cube. You can achieve this by applying systematic naming conventions so that fields are grouped in a logical sequence. In addition, if the fields are not grouped in a useful manner, you can change the reporting reference name of a field. + + Applying a systematic naming convention becomes increasingly important because all reportable data from all team projects that are defined in all project collections is written to a single relational data warehouse. Data from that warehouse is then processed and written to the cube. Because work item fields are managed distinctly for each project collection, different labels may be applied and may lead to a set of fields that is not well organized to support authoring reports. + + Work item fields that have a reportable type of dimension correspond to dimension attributes in the cube. Dimension attributes are organized into folders that are based on the reporting reference name that is assigned in the process template or work item type definition. The following types of mapping occur: + +- Fields that have the "System" prefix are intrinsic and listed directly under the Work Item dimension, with "Work Item" prepended. + +- Other fields are put under folders whose names correspond to the prefixes in their reference names. For example, fields that have the "Microsoft.VSTS.Common" prefix are listed under the folder that is labeled "Microsoft VSTS Common." + + As the following illustration shows, a folder is added for each prefix group of fields that share a common prefix: + + ![Folder structure in OLAP data cube](_img/rpt_workitem_folders.png "RPT_WorkItem_Folders") + + The following table lists the fields whose reference names begin with "System" and that are listed in the PivotTable report with the prefix of "Work Item." These fields are put directly under the Work Item dimension. All other fields are put under folders whose names correspond to the prefixes in their reference names. + +> [!NOTE] +> Deployments that do not use the Enterprise version of SQL Server Analysis Services do not have access to the translation features that are provided by that version. In these deployments, fields are identified by their full reference name in the cube, with ‘.' replaced by ‘_' (for example, "System_Id" and "System_Title"). + +|Name in PivotTable report and cube|Reference name|Data type| +|----------------------------------------|--------------------|---------------| +|Work Item.Area Path|System.AreaPath|TreeType| +|Work Item.Assigned To|System.AssignedTo|String| +|Work Item.Changed By|System.ChangedBy|String| +|Work Item.Changed Date|System.ChangedDate|DateTime| +|Work Item.Created By|System.Created By|String| +|Work Item.Created Date|System.CreatedDate|DateTime| +|Work Item.ID|System.Id|Integer| +|Work Item.Iteration Path|System.IterationPath|TreeType| +|Work Item.Previous State|System.PreviousState|String| +|Work Item.Reason|System.Reason|String| +|Work Item.Rev|System.Rev|Integer| +|Work Item.State|System.State|String| +|Work Item.Title|System.Title|String| +|Work Item.Work Item Type|System.WorkItemType|String| + + The following table lists the fields that appear in the PivotTable report in the folder that is labeled "Microsoft.VSTS.Common" under the Work Item dimension. These fields have reference names that start with "Microsoft.VSTS.Common." + +|Name in PivotTable report and cube|Reference name|Data type| +|----------------------------------------|--------------------|---------------| +|Work Item.Activated By|Microsoft.VSTS.Common.ActivatedBy|String| +|Work Item.Activated Date|Microsoft.VSTS.Common.ActivatedDate|DateTime| +|Work Item.Closed By|Microsoft.VSTS.Common.ClosedBy|String| +|Work Item.Closed Date|Microsoft.VSTS.Common.ClosedDate|DateTime| +|Work Item.Created By|Microsoft.VSTS.Common.CreatedBy|String| +|Work Item.Created Date|Microsoft.VSTS.Common.CreatedDate|DateTime| +|Work Item.Resolved By|Microsoft.VSTS.Common.ResolvedBy|String| +|Work Item.Resolved Date|Microsoft.VSTS.Common.ResolvedDate|DateTime| +|Work Item.Resolved Reason|Microsoft.VSTS.Common.ResolvedReason|String| +|Work Item.Priority|Microsoft.VSTS.Common.Priority|Integer| +|Work Item.Severity|Microsoft.VSTS.Common.Severity|String| +|Work Item.Stack Rank|Microsoft.VSTS.Common.StackRank|Double| + +## Related notes +- [Manage work item fields](witadmin/manage-work-item-fields.md) +- [Resolve data warehouse schema conflicts](../../report/admin/resolve-schema-conflicts.md) +- [Modify a field or add a custom field](../customize/add-modify-field.md) +- [Index of work item fields](../guidance/work-item-field.md) +- [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md) +- [Dashboards and reports](../../report/overview.md) \ No newline at end of file diff --git a/docs/work/reference/add-the-attachments-control.md b/docs/work/reference/add-the-attachments-control.md new file mode 100644 index 00000000000..d2b00060a8e --- /dev/null +++ b/docs/work/reference/add-the-attachments-control.md @@ -0,0 +1,50 @@ +--- +title: Add the Attachments control | VSTS & TFS +description: Lets you enable users to see and manage the file attachments of a work item - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: ff6ce2b2-1062-4b53-93ac-c226366281af +ms.author: kaelli +ms.manager: douge +ms.date: 05/10/2017 +--- + +# Add the Attachments control + +<p><b>TFS 2017 (Hosted XML) | TFS 2015 </b></p> + +>[!IMPORTANT] +>This topic applies to team project customization for the On-premises XML process model using the old form layout. For the Hosted XML process model and the new form layout, see [WebLayout and Control elements](weblayout-xml-elements.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +If you are designing a work item form from the ground up, you might want to add the control to attach files to the work item. In general, each work item form contains a tab that supports the attachment of files, such as an email thread, a document, an image, a log file, or another type of file. + + The `Control` element `AttachmentsControl``Type` attribute lets you enable users to see and manage the file attachments of a work item. By adding this control to a work item form, you can open, add, and remove file attachments. In the following example, a tab that is labeled "Attachments" is added to a work item form by using all the controls that are shown. + +**Attachments control** + +``` +<Tab Label="Attachments"> +   <Control Type="AttachmentsControl" LabelPosition="Top" /> +</Tab> +``` + + ![Attach files to a work item](_img/procguid_attachment.png "ProcGuid_Attachment") + + + You must choose or attach a file before the buttons to open an attachment (![Open Attachment](_img/icon_openattachment.png "Icon_openAttachment")), save a copy (![Save](_img/icon_savewit.png "Icon_saveWIT") Save Copy), and delete an attachment (![Delete Item](_img/icon_deleteredxwit.png "Icon_deleteRedXWIT")) become available. For more information, see [Attachment control and fields](../track/linking-attachments.md). + + You can control the spacing and size of the attachment control by specifying the attributes in the following table. + +|Attribute|Description|Pattern value example| +|---------------|-----------------|---------------------------| +|`MinimumSize`|Optional. String of the form (*Width*, *Height)*. This value specifies the minimum size for the form itself. When the container control is smaller than this size, horizontal and vertical scrollbars appear.|(100,100)| +|`Margin`|Optional. String of the form *(left, top, right, bottom)* that specifies, in pixels, the amount of space around the control and between the control and its neighbors. You can vary the amount of space on each side.|(2,0,2,0)| +|`Padding`|Optional. String of the form *(left, top, right, bottom)* that specifies, in pixels, the amount of space around the outside border of the control and around the inside border. You can vary the amount of space on each side.|(2,0,2,0)| +|`Label`|Optional. Specifies the visible text on the form that identifies the control.<br /><br /> You can leave the label unspecified when the attachment control is the only control on a tab. The tab label is sufficient to identify the control.|Specify a string of no more than 80 characters.| + +## Related notes +- [Customize your work tracking experience](../customize/customize-work.md) +- [Control](control-xml-element-reference.md) +- [WebLayout and Control elements](weblayout-xml-elements.md) \ No newline at end of file diff --git a/docs/work/reference/all-field-xml-elements-reference.md b/docs/work/reference/all-field-xml-elements-reference.md new file mode 100644 index 00000000000..ecfe0638f89 --- /dev/null +++ b/docs/work/reference/all-field-xml-elements-reference.md @@ -0,0 +1,257 @@ +--- +title: All FIELD XML elements reference | VSTS & TFS +description: Syntax for FIELD definition and it's child elements - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 552c2ada-2186-4b89-848c-34f54dfe0823 +ms.author: kaelli +ms.manager: douge +ms.date: 06/16/2017 +--- + +# All FIELD XML elements reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +Use this topic to look up the syntax of the `FIELD` element or one of its child elements. + + You specify these elements in the **FIELD** (Definition) element container. You add a field for a work item type (WIT) by specifying a **FIELD** (Definition) element within the **FIELDS** (Definition) element. You can specify these elements within the definition of a WIT or as part of a global workflow. + + You can add child elements to specify the behavior of a field, define default values, or define a pick list of values. You can use field rule elements in combination with each other. You can scope most rules to apply to one or more users or groups or to be ignored for one or more users or groups. + +## <a name="FIELD"></a> FIELD (Definition) container element + You use the following syntax to define the data fields for a type of work item. This example shows the format of the **FIELD** (Definition) element and all optional child elements. For more information, see [FIELD (Definition) element reference](field-definition-element-reference.md). + +>[!NOTE] +><b>Feature availability:</b>The Boolean data type is supported for Hosted XML (VSTS) and for On-Premises XML, for TFS 2017.2 and later versions. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD name="fieldDisplayName" refname="fieldReferenceName" type="String | Integer | Double | DateTime | PlainText | HTML | History | TreePath | GUID | Boolean" +syncnamechanges="true | false" reportingname="reportingDisplayName" reportingrefname="reportingReferenceName" +reportable="Dimension | Detail | Measure" formula="avg" > +   <ALLOWEDVALUES> . . . </ALLOWEDVALUES> +   <ALLOWEXISTINGVALUE /> +   <CANNOTLOSEVALUE /> +   <COPY /> +   <DEFAULT /> +   <EMPTY /> +   <FROZEN /> +   <HELPTEXT> . . . </HELPTEXT> +   <MATCH /> +   <NOTSAMEAS /> +   <PROHIBITEDVALUES /> . . . </PROHIBITEDVALUES> +   <READONLY /> +   <REQUIRED /> +   <SERVERDEFAULT /> +   <SUGGESTEDVALUES /> . . . </SUGGESTEDVALUES> +   <VALIDUSER /> +   <WHEN>> . . . </WHEN> +   <WHENNOT> . . . </WHENNOT> +   <WHENCHANGED> . . . </WHENCHANGED> +   <WHENNOTCHANGED> . . . </WHENNOTCHANGED> +</FIELD> +``` + +<a name="CHILDElements"></a> +## FIELD child elements +Use child elements to set various restrictions on what data can be entered into a field. You can specify values for a pick list (drop-down menu), set default values, clear entries, or restrict changes. The following table provides the syntax structure for each child element. + +To learn how to use these elements, see [Apply a field rule](apply-rule-work-item-field.md). Restrictions exist on applying most rules to system fields. All child elements are optional. + +<table Responsive="true" summary="table"> +<tr Responsive="true"><th scope="col"><p>Element</p></th><th scope="col"><p>Description and syntax</p></th> +</tr> +<tbody valign="top"> +<tr> +<td><p><strong>ALLOWEDVALUES</strong></p></td> +<td><p>Defines a list of values that users can specify in a field list on work item forms and in the query editor. Users must specify one of the values that you list.</p> +<pre><code><ALLOWEDVALUES for="userGroupName" not="userGroupName" +expanditems="true | false" filteritems="excludegroups"> + <GLOBALLIST name="globalListName"> + <LISTITEM value="Name" /> +. . . + </GLOBALLIST> +</ALLOWEDVALUES> +</code></pre> +<p>For more information, see [Define pick lists](define-pick-lists.md) .</p> +</td> +</tr> +<tr><td data-th="Element"><p><strong>ALLOWEXISTINGVALUE</strong></p></td><td data-th="Description and syntax"><p>Specifies that a field can retain an existing value, even if it is no longer in a pick list. All new field values must be in the list.</p> + +<pre><code><ALLOWEXISTINGVALUE /></code></pre> + +<p>For more information, see [Define pick lists](define-pick-lists.md) .</p></td></tr><tr><td data-th="Element"><p><strong>CANNOTLOSEVALUE</strong></p></td><td data-th="Description and syntax"><p>Specifies that users cannot clear a field of all values after a value has been specified. After the field contains a value, that field must always contain a non-NULL value.</p> +<pre><code><CANNOTLOSEVALUE for="userGroupName" not="userGroupName" /></code></pre> +<p>For more information, see [Apply a field rule](apply-rule-work-item-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>COPY</strong></p></td><td data-th="Description and syntax"><p>Copies a specified value to a field when a user creates or modifies a work item.</p> +<pre><code><COPY for="userGroupName" not="userGroupName" +from="value | field | clock | currentuser" +value="valueToCopy" field="fieldReferenceName" /></code></pre> +<p>For more information, see [Define a default value or copy a value to a field](define-default-copy-value-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>DEFAULT</strong></p></td><td data-th="Description and syntax"><p>Specifies a value for a field that is empty when a user creates or modifies a work item. If a field already has a value, the default rule is ignored.</p> +<pre><code><DEFAULT for="userGroupName" not="userGroupName" +from="value | field | clock | currentuser" +value="value to copy" field="field reference name" /></code></pre> +<p>For more information, see [Define a default value or copy a value to a field](define-default-copy-value-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>EMPTY</strong></p></td><td data-th="Description and syntax"><p>Clears the field of any value that it contains. The <strong>EMPTY</strong> rule also makes a field read-only, and you should not be use it with the <strong>READONLY</strong> rule.</p><p>The field value is cleared when a user saves the work item, and you cannot specify any value. This rule is primarily used during state transition to clear fields that apply to the state to which the item is transitioning.</p> +<pre><code><EMPTY for="userGroupName" not=" userGroupName" /></code></pre> +<p>For more information, see [Apply a field rule](apply-rule-work-item-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>FROZEN</strong></p></td><td data-th="Description and syntax"><p>Specifies that you cannot change the field to a non-empty value after changes are committed. As soon as a user saves the work item with a value in that field, the value can no longer be modified.</p> + +<pre><code><FROZEN for="userGroupName" not="userGroupName" /></code></pre> + +<p>For more information, see [Apply a field rule](apply-rule-work-item-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>HELPTEXT</strong></p></td><td data-th="Description and syntax"><p>Defines the text to appear when a user points to the field in the work item form. </p><p><em>tooltipText</em>: A string of text that contains between 1 and 255 characters.</p> + +<pre><code><HELPTEXT>tooltipText </HELPTEXT></code></pre> + +<p>For more information, see [Apply a field rule](apply-rule-work-item-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>MATCH</strong></p></td><td data-th="Description and syntax"><p>Defines a pattern that values of String type fields must match.</p> +<pre><code><MATCH pattern="patternValue" for="userGroupName" not="userGroupName" /> +</code></pre> +<p>For more information, see [Apply pattern matching to a string field](apply-pattern-matching-to-string-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>NOTSAMEAS</strong></p></td><td data-th="Description and syntax"><p>Specifies that a field is not assigned the same value as that to which another specified field is assigned. The value of the <strong>field</strong> attribute must be a valid reference name of a field.</p> +<pre><code><NOTSAMEAS field="fieldReferenceName" for="userGroupName" not="userGroupName" /> +</code></pre> +<p>For more information, see [Apply a field rule](apply-rule-work-item-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>PROHIBITEDVALUES</strong></p></td><td data-th="Description and syntax"><p>Defines a list of values that a field cannot contain. Users cannot save a work item if the field contains a prohibited value.</p> +<pre><code><PROHIBITEDVALUES for="userGroupName" not="userGroupName" +expanditems="true | false" filteritems="excludegroups"> + <GLOBALLIST name="globalListName"> + <LISTITEM value="Name" /> +. . . + </GLOBALLIST> +</PROHIBITEDVALUES> +</code></pre> +<p>For more information, see [Define pick lists](define-pick-lists.md).</p></td></tr><tr><td data-th="Element"><p><strong>READONLY</strong></p></td><td data-th="Description and syntax"><p>Specifies that you cannot modify the value to which the field is assigned.</p> +<pre><code><READONLY for="userGroupName" not="userGroupName" /> +</code></pre> +<p>**Note:** Do not use this element together with the <strong>EMPTY</strong> element because <strong>EMPTY</strong> also makes a field read-only. If you combine these elements, results will be inconsistent.</p> +<p>For more information, see [Apply a field rule](apply-rule-work-item-field.md).</p></td></tr> +<tr><td data-th="Element"><p><strong>REQUIRED</strong></p></td><td data-th="Description and syntax"><p>Specifies that users must specify a value for the field. Required fields cannot be empty. Users cannot save a work item until they have assigned values to all required fields.</p> +<pre><code><REQUIRED for="userGroupName" not="userGroupName" /></code></pre> + +<p>For more information, see [Apply a field rule](apply-rule-work-item-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>SERVERDEFAULT</strong></p></td><td data-th="Description and syntax"><p>Copies a specified server value to a field when a user saves a work item. These fields usually appear as read-only on the form.</p> +<pre><code><SERVERDEFAULT for="userGroupName" not="userGroupName" +from="clock | currentuser" /> +</code></pre> +<p>For more information, see [Define a default value or copy a value to a field](define-default-copy-value-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>SUGGESTEDVALUES</strong></p></td><td data-th="Description and syntax"><p>Defines a suggested list of values that users can specify in a field list on work item forms and in the query editor. Users can specify values other than those that you suggest.</p> +<pre><code><SUGGESTEDVALUES for="userGroupName" not="userGroupName" +expanditems="true | false" filteritems="excludegroups"> + <GLOBALLIST name="globalListName"> + <LISTITEM value="Name" /> +. . . + </GLOBALLIST> +</SUGGESTEDVALUES> +</code></pre> +<p>For more information, see [Define pick lists](define-pick-lists.md).</p></td></tr><tr><td data-th="Element"><p><strong>VALIDUSER</strong></p></td><td data-th="Description and syntax"><p>Restricts work items from being modified by users who belong to the group that you specify. The default group is the Team Foundation Valid Users group. </p><p>All attributes are optional. All attributes must consist of a string of text that contains between 1 and 255 characters. You can use tokens to specify groups. </p> +<pre><code>< VALIDUSER group="groupName" for="userName" not="userName" /></code></pre> +<p>For more information, see [Apply a field rule](apply-rule-work-item-field.md).</p></td></tr><tr><td data-th="Element"><p><strong>WHEN</strong></p></td><td data-th="Description and syntax"><p>Specifies one or more rules to apply to the current field when another field has a specific value. The parent <strong>FIELD</strong> element defines the current field.</p> +<pre><code><WHEN field="fieldReferenceName" value="value"> + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE> + <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE> + <COPY> . . . </COPY> + <DEFAULT> . . . </DEFAULT> + <EMPTY> . . . </EMPTY> + <FROZEN> . . . </FROZEN> + <MATCH> . . . </MATCH> + <NOTSAMEAS> . . . </NOTSAMEAS> + <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES> + <READONLY> . . . </READONLY> + <REQUIRED> . . . </REQUIRED> + <SERVERDEFAULT> . . . </SERVERDEFAULT> + <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES> + <VALIDUSER> . . . </VALIDUSER> +</WHEN></code></pre> + +<p>For more information, see [Assign conditional-based values and rules](assign-conditional-based-values-and-rules.md).</p></td></tr><tr><td data-th="Element"><p><strong>WHENNOT</strong></p></td><td data-th="Description and syntax"><p>Specifies one or more rules to apply to the current field when another field does not have a specific value. The parent <strong>FIELD</strong> element defines the current field.</p> +<pre><code><WHENNOT field="fieldReferenceName" value="value"> + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE> + <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE> + <COPY> . . . </COPY> + <DEFAULT> . . . </DEFAULT> + <EMPTY> . . . </EMPTY> + <FROZEN> . . . </FROZEN> + <MATCH> . . . </MATCH> + <NOTSAMEAS> . . . </NOTSAMEAS> + <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES> + <READONLY> . . . </READONLY> + <REQUIRED> . . . </REQUIRED> + <SERVERDEFAULT> . . . </SERVERDEFAULT> + <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES> + <VALIDUSER> . . . </VALIDUSER> +</WHENNOT></code></pre> + +<p>For more information, see [Assign conditional-based values and rules](assign-conditional-based-values-and-rules.md).</p></td></tr><tr><td data-th="Element"><p><strong>WHENCHANGED</strong></p></td><td data-th="Description and syntax"><p>Specifies one or more rules to apply to the current field when another field is changed during the revision of the work item. The parent <strong>FIELD</strong> element defines the current field.</p> +<pre><code><WHENCHANGED field="fieldReferenceName" > + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE> + <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE> + <COPY> . . . </COPY> + <DEFAULT> . . . </DEFAULT> + <EMPTY> . . . </EMPTY> + <FROZEN> . . . </FROZEN> + <MATCH> . . . </MATCH> + <NOTSAMEAS> . . . </NOTSAMEAS> + <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES> + <READONLY> . . . </READONLY> + <REQUIRED> . . . </REQUIRED> + <SERVERDEFAULT> . . . </SERVERDEFAULT> + <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES> + <VALIDUSER> . . . </VALIDUSER> +</WHENCHANGED></code></pre> +<p>For more information, see [Assign conditional-based values and rules](assign-conditional-based-values-and-rules.md).</p></td></tr><tr><td data-th="Element"><p><strong>WHENNOTCHANGED</strong></p></td><td data-th="Description and syntax"><p>Specifies one or more rules to apply to the current field when another field is not changed during the revision of the work item. The parent element defines the current field.</p> +<pre><code><WHENNOTCHANGED field="fieldReferenceName"> + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE> + <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE> + <COPY> . . . </COPY> + <DEFAULT> . . . </DEFAULT> + <EMPTY> . . . </EMPTY> + <FROZEN> . . . </FROZEN> + <MATCH> . . . </MATCH> + <NOTSAMEAS> . . . </NOTSAMEAS> + <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES> + <READONLY> . . . </READONLY> + <REQUIRED> . . . </REQUIRED> + <SERVERDEFAULT> . . . </SERVERDEFAULT> + <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES> + <VALIDUSER> . . . </VALIDUSER> +</WHENNOTCHANGED></code></pre> +<p>For more information, see [Assign conditional-based values and rules](assign-conditional-based-values-and-rules.md).</p></td></tr> +</tbody> +</table> + +<a name="LISTElements"></a> +## GLOBALLIST and LISTITEM child elements + + You specify the **GLOBALLIST** and **LISTITEM** elements as child elements of the `ALLOWEDVALUES`, `SUGGESTEDVALUES`, and `PROHIBITEDVALUES` elements. You can use these elements to enumerate a list of values that appears. Users select values from a pick list or a drop-down menu. For more information, see [GLOBALLIST XML element reference](define-global-lists.md). + +<table Responsive="true" summary="table"> +<tr Responsive="true"><th scope="col"><p>Element</p></th><th scope="col"><p>Description</p></th></tr> +<tbody valign="top"> +<tr><td data-th="Element"><p><strong>GLOBALIST</strong></p></td><td data-th="Description"><p>Defines a set of <strong>LISTITEM</strong> elements that is stored for a team project collection and that all team projects in a collection can use.</p> +<pre><code><GLOBALLIST name="globalListName"> + <LISTITEM> . . . </LISTITEM> +</GLOBALLIST> </code></pre> +<p><em>globalListName</em>: A string of text that contains between 1 and 255 characters.</p><p><strong>GLOBALLIST</strong> is a required child element of the <strong>GLOBALLISTS</strong> element and an optional child element of the <strong>ALLOWEDVALUES</strong>, <strong>SUGGESTEDVALUES</strong>, and <strong>PROHIBITEDVALUES</strong> elements. You can define a global list within a work item definition, a global list definition, or a global workflow. </p></td></tr><tr><td data-th="Element"><p><strong>LISTITEM</strong></p></td><td data-th="Description"><p>Defines a valid list value.</p> +<pre><code><LISTITEM value="listName" /></code></pre> +<p><strong>LISTITEM</strong> is a required child element of <strong>GLOBALLIST</strong> and an optional child element of the <strong>ALLOWEDVALUES</strong>, <strong>SUGGESTEDVALUES</strong>, and <strong>PROHIBITEDVALUES</strong> elements.</p></td></tr> +</tbody> +</table> + +<a name="Attributes"> </a> + +## Attributes specified by FIELD child elements + You can qualify most **FIELD** rules to apply or not apply to a set of groups or users by including the `for` or `not` attributes. For more information, see [Apply a field rule](apply-rule-work-item-field.md). + +|Attribute|Syntax|Description| +|---------------|------------|-----------------| +|`expanditems`|expanditems="true | false"|Optional. Specifies whether a group that the **LISTITEM** element identifies should be expanded to include subordinate groups in the list. The default value of this attribute is `true`.| +|`filteritems`|filteritems="*excludegroups*"|Optional. Specifies that only the members of groups, and not group names, are included in the list. The only allowed value for this attribute is `excludegroups`.| +|`for`|for="*userGroupName*"|Optional. Specifies the name of a user or group in Team Foundation to whom the rule applies. Valid values consist of a string of text that contains between 1 and 255 characters.| +|`not`|not="*userGroupName*"|Optional. Specifies the name of a user or group in Team Foundation to whom the rule does not apply. Valid values consist of a string of text that contains between 1 and 255 characters.| +|`from`|from="value | field | clock | currentuser"|Required. Specifies the source of the value from which to copy a value or specify a default value. The following values are valid:<br /><br /> - `clock`: Copies the current date and time from the system clock to DateTime fields. No additional attributes are required. For **COPY** and **DEFAULT** rules, this value comes from the local computer clock time. For **SERVERDEFAULT**, the value comes from the server clock when a user saves the work item.<br /><br /> - `currentuser`: Copies the name of the user who is currently logged on. Use the short username of the current user as the value. No additional attributes are required. Used for string fields.<br /><br /> - `field`: Copies the value of the `field` attribute that you specify. Requires a `field="abc"` attribute. By default, if the specified "from" field is empty, nothing is performed. The `field` attribute is used only for \<COPY> and \<DEFAULT> rules.<br / - `value`: Copies the value of the `value` attribute that you specify. Use the value of a string constant that you specify. Requires a `value="abc"` attribute. `value` is used only for \<COPY> and \<DEFAULT> rules.<br /><br /> If you specify "value" or "field," you must also include the value or field attribute, respectively.| +|`field`|field="*fieldReferenceName*"|Optional. Specifies the name of the field whose value is to be copied into the field when `field` is specified for the `from` attribute.| +|`pattern`|pattern="*patternValue*"|Required. Enforces basic pattern matching for strings only. *patternValue* is a string that consists of between 1 and 255 characters, inclusive. That string must not contain a backslash character (\\). Each character in the string is interpreted as a literal, unless it is one of the following six metacharacters:<br /><br /> - "A" or "a" represent a single alphabetical character.<br /> - "N" or "n" represent a single numeric character.<br /> - "X" or "x" represent a single alphanumeric character.<br /><br /> Pattern value: ^[^\\\\]*$<br /><br /> For example, `pattern="xxxxx.nn.nn"` matches any five alphanumeric characters, then a period, then two numeric characters, then a period, then two more numeric characters.| +|`value`|value="*valueToCopy*"|Optional. Specifies the value to be copied into the field when `value` is specified for the `from` attribute.| + +## Related notes +- [Define and modify work item fields](define-modify-work-item-fields.md) +- [Change the workflow](change-workflow-wit.md) +- [Customize your work tracking experience](../customize/customize-work.md) \ No newline at end of file diff --git a/docs/work/reference/all-form-xml-elements-reference.md b/docs/work/reference/all-form-xml-elements-reference.md new file mode 100644 index 00000000000..1407c683c9c --- /dev/null +++ b/docs/work/reference/all-form-xml-elements-reference.md @@ -0,0 +1,244 @@ +--- +title: All FORM XML elements reference | VSTS & TFS +description: Use the information in this topic as quick reference to all the elements and main attributes - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 07E12386-621F-4749-BF75-F753B710393B +ms.author: kaelli +ms.manager: douge +ms.date: 03/02/2017 +--- + +# All FORM XML elements reference (TFS 2015) + +<p><b>TFS 2017 | TFS 2015 | TFS 2013</b></p> + +>[!IMPORTANT] +>This topic applies to team project customization for the On-premises XML process model. For the Hosted XML process model, see [WebLayout and Control elements](weblayout-xml-elements.md). For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +You can use the information in this topic as a quick reference to all the elements and main attributes that control the form for a type of work item. You specify these elements in the `FORM` element container, the third and final major section of the definition of a type of work item. Many elements are nested within others to form groups, sections, or tabs in a work item form. For more information about how to group these elements, see [Design the work item form](design-work-item-form.md). + + +<a name="FORM"></a> +##FORM example +The following example shows the overall structure of the **FORM** element. You specify the layout of a form by using the **Layout** element. You can specify different layouts that target different clients. For example, you can specify one layout for Windows clients and a different layout for the web portal. A layout typically consists of the top of the form and then a group of tabs. The sequence in which you define the elements within the layout determines the sequence in which the elements appear on the form. + +You group elements to appear within columns by using the **Group** and **Column** elements. You use a **Control** element to define each field that you want to appear on the form. You use the **Tab** element to support different functional areas of field groups. + +> [!div class="tabbedCodeSnippets"] +```XML +<FORM> + <Layout> + <Group> + <Column PercentWidth="70"> + <Group> + <Column PercentWidth="100"> + <Control FieldName="System.Title" Type="FieldControl" Label="Title" LabelPosition="Left" /> + <Control FieldName="System.AreaPath" Type="WorkItemClassificationControl" Label="Area Path" LabelPosition="Left" /> + <Control FieldName="System.IterationPath" Type="WorkItemClassificationControl" Label="&Iteration Path:" LabelPosition="Left" /> + <Group> + <Column PercentWidth="50"> + <Control FieldName="Microsoft.VSTS.Common.ProductUnit" Type="FieldControl" Label="PU (Use Area Path)" LabelPosition="Left" /> + </Column> + <Column PercentWidth="50"> + <Control FieldName="Microsoft.VSTS.Common.Priority" Type="FieldControl" Label="Priority" LabelPosition="Left" /> + </Column> + </Group> + </Column> + </Group> + </Column> + <Column PercentWidth="30"> + <Group Label="Status"> + <Column PercentWidth="100"> + <Control FieldName="System.Id" Type="FieldControl" Label="Id" LabelPosition="Left" /> + <Control FieldName="System.State" Type="FieldControl" Label="State" LabelPosition="Left" /> + <Control FieldName="System.AssignedTo" Type="FieldControl" Label="Assigned To" LabelPosition="Left" /> + </Column> + </Group> + </Column> + </Group> +. . . +</Layout> +</FORM> +``` + +<a name="FormElements"></a> +##Form elements +You can specify how information and work item fields are grouped and appear in a work item form using the elements that are described in the following table. + +> [!NOTE] +> For best results, you should nest `Control` elements in a `Group`, and you should nest `Group` elements in a `Column`, even if the column spans the full width of the form. Also, you should nest every `Column` section in a `Group`, even if the group has no visible label or boundary. + + +<table Responsive="true" summary="table"> +<tr Responsive="true"><th scope="col"><p>Element</p></th><th scope="col"><p>Description</p></th><th scope="col"><p>Required?</p></th> +</tr> +<tr><td data-th="Element"><p><strong>Column</strong></p></td><td data-th="Description"><p>Divides a form's regions into columns.</p> +<code> +<Column PercentWidth="WidthPerceOfContainingElement" FixedWidth="WidthInPixels"> +   <Group> . . . </Group +   <Control> . . . </Control> +   <TabGroup> . . . </TabGroup> +   <Splitter> . . . </Splitter> +</Column > +</code> +</td><td data-th="Required?"><p>Recommended</p></td> +</tr> + +<tr><td data-th="Element"><p><strong>Control</strong></p></td> +<td data-th="Description"><p>Defines a field, text, hyperlink, or other control element to appear on the work item form.</p> +<code> +<Control FieldName="FieldName" Type="AttachmentsControl | DateTimeControl | FieldControl | + HtmlFieldControl | LabelControl | LinksControl | WebpageControl | WorkItemClassificationControl | + WorkItemLogControl" Label="LabelText" LabelPosition="Top | Bottom | Left | Right" + Padding="(top, bottom, left, right)" + Margin="( top, bottom, left, right)" + ReadOnly="True | False" MinimumSize="(Width,Height)" + Name="InstanceName" /> +</code> +<p>For more information, see [Control XML element reference](control-xml-element-reference.md).</p></td><td data-th="Required?"><p>Required</p></td> +</tr> +<tr><td data-th="Element"><p><strong>FORM</strong></p></td><td data-th="Description"><p>Defines the top-level form element.</p> +<code> +<FORM> +   <Layout> . . . </Layout> +</FORM> +</code> +</td><td data-th="Required?"><p>Required</p></td> +</tr> +<tr><td data-th="Element"><p><strong>Group</strong></p></td><td data-th="Description"><p>Provides a visual grouping of elements, similar to the Windows GroupBox.</p> +<code> +<Group Label="LabelText" Padding="(top, bottom, left, right)" Margin="(top, bottom, left, right)"> + <Column> . . . </Column> +</Group > +</code> +</td><td data-th="Required?"><p>Recommended</p></td> +</tr> +<tr><td data-th="Element"><p><strong>Layout</strong></p></td><td data-th="Description"><p>Defines the layout of the work item form.</p> +<code> +<Layout Target="ClientName" MinimumSize="(width,height)" Padding="(top, bottom, left, right)" +Margin="(left, top, right, bottom)" ControlSpacing="Distance" LabelSpacing="Distance"> +   <Group> . . . </Group> +   <Control> . . . </Control> +   <TabGroup> . . . </TabGroup> +   <Splitter> . . . </Splitter> +</Layout> +</code> +</td><td data-th="Required?"><p>Required</p></td> +</tr> +<tr><td data-th="Element"><p><strong>Splitter</strong></p></td><td data-th="Description"><p>Divides a form into two areas to support the layout of two sibling form elements.</p> +<code> +<Splitter /> +</code> +</td><td data-th="Required?"><p>Optional</p></td> +</tr> +<tr><td data-th="Element"><p><strong>Tab</strong></p></td><td data-th="Description"><p>Defines the layout of a single tab in a tab group.</p> +<code> +<Tab Label="LabelText" Padding="(top, bottom, left, right)" Margin="(top, bottom, left, right)"> +   <Group> . . . </Group +   <Control> . . . </Control> +   <TabGroup> . . . </TabGroup> +   <Splitter> . . . </Splitter> +</Tab> +</code> +</td><td data-th="Required?"><p>Optional</p></td> +</tr> +<tr> +<td data-th="Element"><p><strong>TabGroup</strong></p></td><td data-th="Description"><p>Defines one or more tabs for the form.</p> +<code> +<TabGroup Padding="( top, bottom, left, right)" Margin="(top, bottom, left, right)"> +   <Tab> . . . </Tab> +</TabGroup> +</code> +</td><td data-th="Required?"><p>Optional</p></td> +</tr> +</table> + + +<a name="FormAttributes"></a> +##Attributes that are used to format FORM elements +You can control the spacing and size of many elements on a work item form by specifying the attributes that the following table describes. For more information, see [Design the work item form](design-work-item-form.md). + +|**Attribute**|**Description**|**Applicable Elements**| +|-------------------|---------------------|-----------------------------| +|`ControlSpacing`|Optional. Specifies the vertical offset of controls. Integer.|`Layout`| +|`FixedWidth`|Optional. The column width in pixels. `PercentWidth` and `FixedWidth` are mutually exclusive.|`Column`| +|`Label`|Optional. Text to appear for a control or group. If a label is specified, it overrides any label that is associated with the field in the metadata for the control.<br /> Required for the **Tab** element. Text to appear for a tab.<br /> *LabelText* is a text string that contains between 1 and 80 characters.|`Control`<br /> `Group`<br /> `Tab`| +|`LabelPosition`|Optional. The label position relative to the field data. Possible values are Top, Bottom, Left, and Right.|`Control`| +|`LabelSpacing`|Optional. Specifies the number of pixels between the label and the edit region of the control.|`Layout`| +|`Margin`|Optional. String of the form (left, top, right, bottom) that specifies, in pixels, the amount of space around the control and between the control and its neighbors. You can vary the amount of space on each side.<br /> Pattern value: ^\\(\d+\\,\d+\\,\d+\\,\d+\\)$<br /> Pattern value example: (2,0,2,0)|`Control`<br /> `Group`<br /> `Layout`<br /> `Tab`<br /> `TabGroup`| +|`MinimumSize`|Optional. String of the form (*width*, *height)*. This value specifies the minimum size for the form itself. When the container control smaller than this size, horizontal and vertical scrollbars appear.|`Control`<br /> `Layout`| +|`Name`|Optional. Name for the control. If unspecified, the name is the same as the `FieldName`.|`Control`| +|`Padding`|Optional. String of the form (top, bottom, left, right) that specifies, in pixels, the amount of room around the outside border of the control and around the inside border. You can vary the amount of space on each side.|`Control`<br /> `Group`<br /> `Layout`<br /> `Tab`<br /> `TabGroup`| +|`PercentWidth`|Optional. The column width as a percentage of the containing element's width. `PercentWidth` and `FixedWidth` are mutually exclusive.|`Column`| +|`ReadOnly`|Optional. You can display a read-only field in a control. Different controls respond to this attribute in slightly different ways.|`Control`| +|`Target`|Optional. String that specifies to which client this layout applies. Visual Studio displays this work item type in this layout if the `Target` attribute is omitted or set to Windows Forms. External clients can specify additional layouts by using custom `Target` attributes that Visual Studio ignores.<br /> The following values are valid:<br /> `WinForms`: Applies the form to Team Explorer and Team Explorer Everywhere.<br /> `Web`: Applies the form to the web portal.|`Layout`| +|`Type`|Required. The type of the control. For more information, see [Control](control-xml-element-reference.md).|`Control`| + +<a name="LabelElements"></a> +##Elements that specify stand-alone Labels, Hyperlinks, Web Pages, or HTML Content + The `WebpageControlOptions` element and its child elements have the following syntax structure: + +> [!div class="tabbedCodeSnippets"] +```XML +<WebpageControlOptions AllowScript="true | false" ReloadOnParamChange="true | false" > +   <Link UrlRoot="UrlRoot" UrlPath ="UrlPathWithParameters"> +      <Param index="IndexValue" value="ParamValue" type ="Original | Current"/> +   </Link> +   <Content> +      <![CDATA[Contents of HTML]]> +   </Content> +</WebpageControlOptions> +``` + + You use the elements that are described in the following table to define plain text or hyperlinked labels, add hyperlinks to a field, or display Web page content in a work item form. For more information, see [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md). + +|Element|Required?|Description| +|-------------|---------------|-----------------| +|`Content`|Optional `WebpageControlOptions` element.|Specifies the CDATA HTML-based content to appear in a work item form.<br /><br /> `<Content> <![CDATA[Contents of HTML]]> </Content>`<br /><br /> For more information, see [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md).| +|`LabelText`|Optional `Control` element when `type="LabelControl"`.|Defines either a plain or hyperlinked label.<br /><br /> For more information, see [LabelText and Text](labeltext-and-text-xml-elements-reference.md).| +|`Link`|Optional `Control` element when `type="FieldControl"`.<br /><br /> Optional `Text` element.<br /><br /> Optional `WebpageControl` element.<br /><br /> Optional `WebpageControlOptions` element.|Defines the hyperlink for a field, label, or Web browser content to appear in a work item form.<br /><br /> `<Link URLRoot="URLRoot" URLPath ="URLPathWithParameters"> <Param /> </Link>`<br /><br /> For more information, see [Link and Param](link-param-xml-elements-reference.md).| +|`Param`|Optional `Link` element.|Specifies a value to determine the URL of the hyperlink when `URLPath` is specified for the `Link` element.<br /><br /> `<Param index="IndexValue " value="ParamValue " type ="Original | Current"/>`<br /><br /> For more information, see [Link and Param](link-param-xml-elements-reference.md).| +|`Text`|Optional `LabelText` element.|Container element for the information or label to appear on the work item form.<br /><br /> `<Text> <Link > <Param /> </Link>LabelText </Text>`<br /><br /> For more information, see [LabelText and Text](labeltext-and-text-xml-elements-reference.md).| +|`WebpageControlOptions`|Optional `Control` element when `type="WebpageControl"`|Container element that specifies the options for the Web page control.<br /><br /> For more information, see [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md).| + +## <a name="LinkElements"></a> Elements that filter and display link relationships + You use the `LinksControlOptions` element to define the options for controlling what links can be added to a work item and the default columns that you want to appear for the list of links in a work item. When you add link control to a work item form, you can specify filters that restrict the types of links that users can create and the types of work items between which users can create links. The `LinksControlOptions` element and its child elements have the following structure: + +> [!div class="tabbedCodeSnippets"] +```XML +<LinksControlOptions> + <WorkItemLinkFilters FilterType="include | exclude | includeAll | excludeAll"> + <Filter LinkType="linkTypeRefName" FilterOn="reverseName | forwardName" /> + </WorkItemLinkFilters> + <ExternalLinkFilters FilterType ="include | exclude | includeAll | excludeAll"> + <Filter LinkType="externalLinkName"/> + </ExternalLinkFilters> + <WorkItemTypeFilters Scope=" project | all" FilterType=" include | exclude | includeAll" /> + <Filter WorkItemType="workItemTypeReferenceName"/> + </WorkItemTypeFilters> + <LinkColumns> + <LinkColumn RefName="referenceName" | LinkAttribute="linkAttributeName"/> + </LinkColumns> +</LinksControlOptions> +``` + + Specifically, you use the elements that are summarized in the following table. For more information about how to use these elements, see [Define link controls to restrict link relationships](define-link-controls.md) and [LinksControlOptions](linkscontroloptions-xml-elements.md). + +|Element|Required?|Description| +|-------------|---------------|-----------------| +|`LinksControlOptions`|Optional `Control` element when `type="LinksControl"`|Provides a container for elements that define the options for controlling what links can be added to a work item and the default columns that you want to appear for the list of links in a work item.| +|`WorkItemLinkFilters`|Optional `LinksControlOptions` element|Provides a container for one or more `Filter` elements that specify the link filter criteria to use for link types that are defined for the team project collection.| +|`ExternalLinkFilters`|Optional `LinksControlOptions` element|Provides a container for one or more `Filter` elements that specify the filter criteria to use for link types that are defined in other team projects.| +|`WorkItemTypeFilters`|Optional `LinksControlOptions` element|Provides a container for one or more `Filter` elements that specify the filter criteria to apply to work item types.| +|`Filter` (link types)|Required `WorkItemLinkFilters` element when the `FilterType` attribute is `exclude` or `include`.<br /><br /> Required `ExternalLinkFilters` element when the `FilterType` attribute is `exclude` or `include`.|Specifies the types of links to include or exclude from the set of links that can be created for the work item.| +|`Filter` (work item types)|Optional `WorkItemTypeFilters` element when the `FilterType` attribute is `exclude` or `include`.|Specifies the types of work items to include or exclude from the set of work item types between which users can link.| +|`LinkColumns`|Optional `LinksControlOptions` element|Provides a container for one or more `LinkColumn` tags.| +|`LinkColumn`|Required `LinkColumns` element|Specifies the work item fields and link type attributes to appear on the work item form for the list of links.| + +## Related notes +- [Customize the work tracking experience](../customize/customize-work.md) +- [Design the work item form](design-work-item-form.md) + \ No newline at end of file diff --git a/docs/work/reference/all-witd-xml-elements-reference.md b/docs/work/reference/all-witd-xml-elements-reference.md new file mode 100644 index 00000000000..9ffb140890c --- /dev/null +++ b/docs/work/reference/all-witd-xml-elements-reference.md @@ -0,0 +1,164 @@ +--- +title: All WITD XML elements reference | VSTS & TFS +description: Customize an existing work item type (WIT) or create a WIT to meet your project tracking requirements - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: d125917c-9e67-49e6-8274-8b169e76639a +ms.author: kaelli +ms.manager: douge +ms.date: 02/14/2017 +--- + +# All WITD XML elements reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can customize an existing work item type (WIT) or create a WIT to meet your project tracking requirements. A WIT defines the fields, rules, and workflow states and transitions for an item of work that will be tracked for a team project, such as a bug, requirement, or risk. You create a team project either in [VSTS](../../accounts/create-account-msa-or-work-student.md) or on an [on-premises Team Foundation Server (TFS)](../../accounts/create-team-project.md). + + The root element in each definition of a WIT is the `WITD` element, which must have only one `WORKITEMTYPE` element defined. The name of each WIT must be unique in a team project, and each type name must be no more than 128 Unicode characters long. + + To customize or create a WIT definition, you modify the type definition XML file. WITs are scoped to a team project within a project collection. + +<a name="SyntaxStructure"></a> +## WITD syntax structure + The following example shows the high-level structure of a WIT definition. + +> [!div class="tabbedCodeSnippets"] +```XML +<witd:WITD application="Work item type editor" version="1.0" xmlns:witd="http://schemas.microsoft.com/VisualStudio/2008/workitemtracking/typedef"> +    <WORKITEMTYPE name="bug" refname="Microsoft.VSTS.WorkItemTypes.Bug"> +        <DESCRIPTION> Describes a divergence between required and actual behavior, and tracks the work done to correct the defect and verify the correction.</DESCRIPTION> +        <GLOBALLISTS> . . . </GLOBALLISTS> +        <FIELDS> . . . </FIELDS> +        <WORKFLOW> . . . </WORKFLOW> +        <FORM> . . . </FORM> +    </WORKITEMTYPE> +</witd:WITD> +``` + +<a name="ChildElements"></a> +##WITD child elements + +The structural elements used in the previous example are described in the following table: + + +<table Responsive="true" summary="table"> +<tr Responsive="true"> +<th scope="col"><p>Element</p></th><th scope="col"><p>Description</p></th> +</tr> +<tr> +<td><p>**WITD**</p></td> +<td><p>The complete WIT definition is wrapped by the tag <strong>WITD</strong>. You can use any name for the application name. The version identifies the WIT schema that may change from one release to the next. Use "1.0".</p> +<code> +<witd:WITD application="Work item type editor" version="1.0" +xmlns:witd="http://schemas.microsoft.com/VisualStudio/2008/workitemtracking/typedef"> + <WORKITEMTYPE> +   . . . +</WORKITEMTYPE> +</witd:WITD> +</code> +</td> +</tr> +<tr> +<td data-th="Element"><p>**WORKITEMTYPE**</p></td><td data-th="Description"><p>Names of WITs must be unique in a specific team project. At run time, you use the name specified by this element. For example, the name can appear as a menu option. In this case, a user could choose <strong>Bug</strong> on the <strong>New Work Item</strong> menu. </p> +<pre><code> +<WORKITEMTYPE name="WorkItemTypeName" refname="WITReferenceName" > +   <DESCRIPTION>Text</DESCRIPTION> +   <GLOBALLISTS> . . .</GLOBALLISTS> +   <FIELDS> . . . </FIELDS> +   <WORKFLOW> . . . </WORKFLOW> +   <FORM> . . .</FORM> +</WORKITEMTYPE> +</code></pre> +<p>Friendly name (*name*): Appears in the drop-down menus of work item queries. The friendly name must be unique across all WIT names that are defined within a team project. Specify a name no longer than 128 Unicode characters that uses alphanumeric, underscore, and hyphen characters. </p> +<p>Reference name (*refname*): Specify a name no longer than 70 Unicode characters that uses alphanumeric, underscore, and hyphen characters. The reference name must contain at least one period (.), but no period can appear at the start or end of a name. Also, the reference name cannot start with a number or an underscore, and it cannot have multiple consecutive hyphens, such as (--).</p><p>Do not specify a name that overlaps with the reserved System. <em>XXX</em> and Microsoft. <em>XXX</em> namespaces. </p></td></tr> +<tr><td data-th="Element"><p>**DESCRIPTION**</p></td> +<td data-th="Description"><p>Specifies a string that describes the type of work item that you are defining. The description should help any user who is customizing the WIT.</p> +<blockquote> +**Note**: You can view the description only in the XML definition. You cannot view the description anywhere in the user interface, and it has no relationship to the field <strong>System.Definition</strong>. +</blockquote> + +<code> +<DESCRIPTION> DescriptionOfWorkItemType</DESCRIPTION> +</code> +<p>You specify a string of text that describes the type of work item that you are defining. </p></td></tr><tr><td data-th="Element"><p>**GLOBALLISTS**</p></td><td data-th="Description"><p>Contains the global list definitions that are used by the WIT. You use global lists to share pick lists among multiple WITs defined for a team project collection. [Define global lists](define-global-lists.md) supports cross-group collaboration and ease of maintenance. </p> +<code> +<GLOBALLIST name="globalListName"> +   <LISTITEM> . . . </LISTITEM> +</GLOBALLIST> +</code> +<p /></td></tr><tr><td data-th="Element"><p>**FIELDS**</p></td><td data-th="Description"><p>Defines the fields used to track data for the WITWithin the <strong>FIELDS</strong> element, you [define all the fields](define-modify-work-item-fields.md) that you want to use to track data. This includes fields that you will use to run queries and generate reports. </p> +<code> +<FIELDS> +   <FIELD> . . . </FIELD> +</FIELDS> +</code> +</td></tr> +<tr> +<td data-th="Element"><p>**FORM**</p></td><td data-th="Description"><p>Specifies the [design of the work item form](design-work-item-form.md) by defining the fields and controls that appear on the form and in what order.</p> + +<p>**For TFS 2015 and earlier versions**, the **FORM** element contains <strong>Layout</strong>, <strong>Control</strong>, <strong>Group</strong>, <strong>TAB</strong>, <strong>TabGroup</strong>, <strong>Splitter</strong>, and other elements. </p> +<code> +<FORM> +   <Layout> . . . </Layout> +</FORM> +</code> +<p>**For the Hosted XML and On-premises XML (TFS 2017 and later versions) process models**, the **FORM** element contains <strong>WebLayout</strong>, <strong>Control</strong>, <strong>SystemControls</strong>, <strong>Section</strong>, <strong>Page</strong>, and other elements. </p> +<pre><code><WebLayout> +   <Page> +    <Section> +    <Group> +    <Control> . . . </Control> +    <Control> . . . </Control> +    </Group> +    </Section> +   </Page> +. . . +</WebLayout></code></pre> + +<blockquote>**Important**: +For the Hosted XML and On-premises XML process models (TFS 2017 and later versions), see [WebLayout and Control elements](weblayout-xml-elements.md). +</blockquote> + + + +</td> +</tr> +<tr><td>**WORKFLOW**</td> +<td><p>Defines the workflow elements that help track the work item status as it moves from a new state to closed or done. This element contains the set of <strong>STATE</strong> and <strong>TRANSITION</strong> elements that define the workflow. The workflow is a set of valid transitions from one state to another and the specific conditions associated with each transition.</p> +<code> +<WORKFLOW> +   <STATES> . . . </STATES> +   <TRANSITIONS> . . . </TRANSITIONS> +</WORKFLOW> +</code> +</td> +</tr> + +</table> + + +<a name="PredefinedWITs"></a> +## Process template work item types + +Upon installing or upgrading an instance of an on-premises TFS, the [default process templates](../guidance/choose-process.md) are downloaded to the following directory: + +**For TFS 2017**: +``` +%programfiles%/TFS 15.0/Tools/Deploy/ProcessTemplateManagerFiles/1033 +``` + +**For TFS 2015**: +``` +%programfiles%/TFS 14.0/Tools/Deploy/ProcessTemplateManagerFiles/1033 +``` + +WIT definition files are stored in the WorkItem Tracking\TypeDefinitions folder. + +To learn how to create or customize a WIT, see [Modify or add a custom work item type](../customize/add-modify-wit.md). + +## Related notes + +- [Customize the work tracking experience](../customize/customize-work.md) +- [witAdmin: Customize and manage objects for tracking work](witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md) +- [Naming restrictions, Work item tracking objects](../../reference/naming-restrictions.md) \ No newline at end of file diff --git a/docs/work/reference/all-workflow-xml-elements-reference.md b/docs/work/reference/all-workflow-xml-elements-reference.md new file mode 100644 index 00000000000..eb93568e18c --- /dev/null +++ b/docs/work/reference/all-workflow-xml-elements-reference.md @@ -0,0 +1,361 @@ +--- +title: All WORKFLOW XML elements reference | VSTS & TFS +description: Use the information in this topic as a quick reference to all the elemetns and main attributes - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 59689226-f7f1-4046-866e-3030aad806ae +ms.author: kaelli +ms.manager: douge +ms.date: 02/10/2017 +--- + +# All WORKFLOW XML elements reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + + +You can use the information in this topic as a quick reference to all the elements and main attributes that control the workflow for a type of work item. You specify these elements in the `WORKFLOW` element container, which is the second major section of the definition of a work item type. You use the **STATES** and **TRANSITIONS** child elements to define the different states that a user can specify for a type of work item and which transitions are allowed between states. For more information about how to define these elements, see [Change the workflow](change-workflow-wit.md) + +To modify the workflow, you modify the definition for a work item type. See [Modify or add a custom work item type](../customize/add-modify-wit.md). + +## WORKFLOW example +The following example shows the overall structure of the **WORKFLOW** element. You specify all the states to which a user can first assign a work item type within a **STATES** container. Next, you specify all the transitions that are allowed from one state to another. Each state corresponds to a **STATE** element, and each transition corresponds to a **TRANSITION** element. Within each **STATES** and **TRANSITIONS** container element, you can define the states and transitions in any sequence that you want. + +For each transition, you specify a set of reasons for changing the state of the work item, including a default reason. You can assign values for each state, transition, or reason, and you can place conditions on the values of one or more fields by using the **FIELD** (Workflow) element. In addition, you can trigger an action to occur during a transition by specifying the **ACTION** element. + +> [!div class="tabbedCodeSnippets"] +```XML +<WORKFLOW> +<STATES> + <STATE value="Active"> + <FIELDS> . . . </FIELDS> + </STATE> + <STATE value="Resolved"> + <FIELDS> . . . </FIELDS> + </STATE> + <STATE value="Closed" /> +</STATES> +<TRANSITIONS> + <TRANSITION from="" to="Active"> + <REASONS> + <DEFAULTREASON value="New" /> + </REASONS> + <FIELDS> . . . </FIELDS> + </TRANSITION> + <TRANSITION from="Active" to="Resolved"> + <REASONS> . . . </REASONS> + <FIELDS> . . . </FIELDS> + <ACTIONS > . . . </ACTIONS > +</TRANSITION> +<TRANSITION from="Resolved" to="Closed"> + <REASONS> . . . </REASONS> + <FIELDS> . . . </FIELDS> + <ACTIONS > . . . </ACTIONS > +</TRANSITION> +<TRANSITION from="Resolved" to="Active"> + <REASONS> . . . </REASONS> + <FIELDS> . . . </FIELDS> +</TRANSITION> +<TRANSITION from="Active" to="Closed "> + <REASONS> . . . </REASONS> + <FIELDS> . . . </FIELDS> +</TRANSITION> +<TRANSITION from="Closed" to="Active"> + <REASONS> . . . </REASONS> + <FIELDS> . . . </FIELDS> +</TRANSITION> +</TRANSITIONS> +</WORKFLOW> +``` + +## <a name="WORKFLOW"></a> Syntax structure + By using the elements that the following table describes, you can specify to which states a team member can set a work item of a particular type. In the `WORKFLOW` section of the definition, you define states first, and then you define transitions. For more information, see [Change the workflow](change-workflow-wit.md). + + +<table Responsive="true" summary="table"> +<tr Responsive="true"><th scope="col"><p>Element</p></th><th scope="col"><p>Description and syntax</p></th><th scope="col"><p>Required?</p></th></tr><tr><td data-th="Element"><p><strong>ACTION</strong></p></td><td data-th="Description and syntax"><p>Defines a text string that corresponds to an action to be performed when the system for tracking work items calls the <strong>WorkItem.GetNextState</strong> method to get the post-action state of the work item.</p> +<div id="code-snippet-2" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_ea8fa7d3-fd75-48a6-8458-6754c2ebf670');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_ea8fa7d3-fd75-48a6-8458-6754c2ebf670" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<ACTION value="NameOfAction" /> +</pre></div> + + </div> + </div> +</div> +<p>For more information, see [Automate field assignments based on State, Transition, or Reason](automate-field-assignments-state-transition-reason.md) </p></td><td data-th="Required?"><p>Optional</p></td></tr><tr><td data-th="Element"><p><strong>ACTIONS</strong></p></td><td data-th="Description and syntax"><p>Defines a collection of <strong>ACTION</strong> elements.</p> +<div id="code-snippet-3" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_a67406ee-e8ed-45cc-ae69-f503b94bfc8b');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_a67406ee-e8ed-45cc-ae69-f503b94bfc8b" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<ACTIONS> + <ACTION>. . . </ACTION> +</ACTIONS> + +</pre></div> + + </div> + </div> +</div> +</td><td data-th="Required?"><p>Optional</p></td></tr><tr><td data-th="Element"><p><strong>DEFAULTREASON</strong></p></td><td data-th="Description and syntax"><p>Defines the most common cause of a team member changing a work item from one particular state to another particular state.</p> +<div id="code-snippet-4" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_a3016f2f-b3a5-4d96-95ea-688903488f3e');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_a3016f2f-b3a5-4d96-95ea-688903488f3e" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<DEFAULTREASON value="ValueOfDefaultReason"> + <FIELDS>. . . </FIELDS> +</DEFAULTREASON> + +</pre></div> + + </div> + </div> +</div> +</td><td data-th="Required?"><p>Required</p></td></tr><tr><td data-th="Element"><p><strong>FIELD</strong></p></td><td data-th="Description and syntax"><p>Specifies a field for a type of work item and the rules and conditions that will be applied to that field when a team member changes the state of a work item of that type and specifies a reason for the change.</p> +<div id="code-snippet-5" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_5bfe69d3-cc4e-49ce-9dce-05bf06c35c66');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_5bfe69d3-cc4e-49ce-9dce-05bf06c35c66" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<FIELD refname="FieldReferenceName"> + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE /> + <CANNOTLOSEVALUE /> + <COPY /> + <DEFAULT /> + <EMPTY /> + <FROZEN /> + <MATCH /> + <NOTSAMEAS /> + <PROHIBITEDVALUES /> . . . </PROHIBITEDVALUES> + <READONLY /> + <SERVERDEFAULT /> + <SUGGESTEDVALUES /> . . . </SUGGESTEDVALUES> + <VALIDUSER /> + <WHEN>> . . . </WHEN> + <WHENNOT> . . . </WHENNOT> + <WHENCHANGED> . . . </WHENCHANGED> + <WHENNOTCHANGED> . . . </WHENNOTCHANGED> +<FIELD> + +</pre></div> + + </div> + </div> +</div> +<p>For more information, see [FIELD (Workflow) element reference](all-workflow-xml-elements-reference.md).</p></td><td data-th="Required?"><p>Optional</p></td></tr><tr><td data-th="Element"><p><strong>FIELDS</strong></p></td><td data-th="Description and syntax"><p>Specifies a collection of <strong>FIELD</strong> elements.</p> +<div id="code-snippet-6" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_79ee0cfa-a182-4124-b346-6d6a0c21e299');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_79ee0cfa-a182-4124-b346-6d6a0c21e299" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<FIELDS> + <FIELD . . . </FIELD> +</FIELDS> + +</pre></div> + + </div> + </div> +</div> +</td><td data-th="Required?"><p>Optional</p></td></tr><tr><td data-th="Element"><p><strong>REASON</strong></p></td><td data-th="Description and syntax"><p>Defines an additional explanation for why a team member changed the state of a work item. </p> +<div id="code-snippet-7" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_09de314c-53da-4d00-b66a-d73ffead7103');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_09de314c-53da-4d00-b66a-d73ffead7103" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<REASON value="NameOfReason"> + <FIELDS>. . . </FIELDS> +</REASON> +</pre></div> + + </div> + </div> +</div> +</td><td data-th="Required?"><p>Optional</p></td></tr><tr><td data-th="Element"><p><strong>REASONS</strong></p></td><td data-th="Description and syntax"><p>A collection of one <strong>DEFAULTREASON</strong> and optional <strong>REASON</strong> elements that explain why a team member changed the state of a work item.</p> +<div id="code-snippet-8" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_fd80dc88-d1d2-43e0-ad3f-b195f6918212');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_fd80dc88-d1d2-43e0-ad3f-b195f6918212" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<REASONS> + <DEFAULTREASON>. . . </DEFAULTREASON> + <REASON>. . . </REASON> +</REASONS> +</pre></div> + + </div> + </div> +</div> +</td><td data-th="Required?"><p /></td></tr><tr><td data-th="Element"><p><strong>STATE</strong></p></td><td data-th="Description and syntax"><p>Defines a valid state for the work item type. This element can contain a <strong>FIELDS</strong> element, which references rules and conditions that will be applied to a specific field when a team member changes the state of a work item of that type.</p> +<div id="code-snippet-9" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_ca12d7fc-d7f9-42e2-bf7b-780c62b61752');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_ca12d7fc-d7f9-42e2-bf7b-780c62b61752" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<STATE value="NameOfState"> + <FIELDS>. . . </FIELDS> +</STATE> +</pre></div> + + </div> + </div> +</div> +</td><td data-th="Required?"><p>Required</p></td></tr><tr><td data-th="Element"><p><strong>STATES</strong></p></td><td data-th="Description and syntax"><p>Specifies a collection of <strong>STATE</strong> elements that define the valid states to which a user can assign a work item of that type.</p> +<div id="code-snippet-10" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_fb7bcd4f-45e4-4338-a922-1661cf58329f');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_fb7bcd4f-45e4-4338-a922-1661cf58329f" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<STATES> + <STATE>. . . </STATE> +</STATES> + +</pre></div> + + </div> + </div> +</div> +</td><td data-th="Required?"><p>Required</p></td></tr><tr><td data-th="Element"><p><strong>TRANSITION</strong></p></td><td data-th="Description and syntax"><p>Specifies a valid progression or regression from one state to another for work items of a particular type.</p> +<div id="code-snippet-11" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_b0b031dd-6540-409b-8d68-76a1aa760371');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_b0b031dd-6540-409b-8d68-76a1aa760371" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<TRANSITION from="NameOfStartingState" + to="NameOfEndingState" + for="UserOrGroupName" + not="UserOrGroupName"> + <ACTIONS>. . . </ACTIONS> + <REASONS>. . . </REASONS> + <FIELDS>. . . </FIELDS> +</TRANSITION> +</pre></div> + + </div> + </div> +</div> +<p>For more information, see [TRANSITION element](transition-xml-element.md).</p></td><td data-th="Required?"><p>Required</p></td></tr><tr><td data-th="Element"><p><strong>TRANSITIONS</strong></p></td><td data-th="Description and syntax"><p>Specifies a collection of <strong>TRANSITION</strong> elements.</p> +<div id="code-snippet-12" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_603b68f6-52f8-4db7-81f1-629022482a2f');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_603b68f6-52f8-4db7-81f1-629022482a2f" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<TRANSITIONS> + <TRANSITION>. . . </TRANSITION> +</TRANSITIONS> +</pre></div> + + </div> + </div> +</div> +</td><td data-th="Required?"><p>Required</p></td></tr><tr><td data-th="Element"><p><strong>WORKFLOW</strong></p></td><td data-th="Description and syntax"><p>Specifies the collection of <strong>STATES</strong> and <strong>TRANSITIONS</strong> container elements that together define the workflow for the type of work item. </p> +<div id="code-snippet-13" class="codeSnippetContainer" xmlns=""> + <div class="codeSnippetContainerTabs"> + + </div> + <div class="codeSnippetContainerCodeContainer"> + <div class="codeSnippetToolBar"> + <div class="codeSnippetToolBarText"> + <a name="CodeSnippetCopyLink" style="display: none;" title="Copy to clipboard." href="javascript:if (window.epx.codeSnippet)window.epx.codeSnippet.copyCode('CodeSnippetContainerCode_5005fcd8-443c-4a7d-ba26-56ecaeabc632');" ms.cmptyp="CodeSnippet">Copy</a> + </div> + </div> + <div id="CodeSnippetContainerCode_5005fcd8-443c-4a7d-ba26-56ecaeabc632" class="codeSnippetContainerCode" dir="ltr"> + <div style="color:Black;"><pre> +<WORKFLOW> + <STATES>. . . </STATES> + <TRANSITIONS>. . . </TRANSITIONS> +</WORKFLOW> +</pre></div> + + </div> + </div> +</div> +</td><td data-th="Required?"><p>Required</p></td></tr></table> + + +## Related notes +- [FIELD (Workflow)](field-workflow-element-reference.md) +- [Change the workflow](change-workflow-wit.md) +- [Customize the work tracking experience](../customize/customize-work.md) \ No newline at end of file diff --git a/docs/work/reference/api-ref/iprocess-templates-add-update-template.md b/docs/work/reference/api-ref/iprocess-templates-add-update-template.md new file mode 100644 index 00000000000..298b53e4941 --- /dev/null +++ b/docs/work/reference/api-ref/iprocess-templates-add-update-template.md @@ -0,0 +1,148 @@ +--- +title: IProcessTemplates.AddUpdateTemplate method | VSTS & TFS +description: Syntax and usage for the IProcessTemplates.AddUpdateTemplate method to add or update a process template when working with Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: d99e9d10-9629-4782-9c2c-3b5fdf2550a6 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2016 +--- + + +# IProcessTemplates.AddUpdateTemplate method (String, String, String, String, String) + +**VSTS | TFS 2017 | TFS 2015 | [Previous versions](https://msdn.microsoft.com/library/microsoft.teamfoundation.server.iprocesstemplates.addupdatetemplate%28v=vs.120%29.aspx)** + + + +Add or update a process template with the given properties. + + +**Namespace**: [Microsoft.TeamFoundation.Server](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.server(v=vs.120).aspx) +**Assembly**: Microsoft.TeamFoundation.Client (in Microsoft.TeamFoundation.Client.dll) + + +## Syntax + +<table> +<tr> +<td width="75px"> +<h4>C#</h4> +</td> +<td width="250px"> +``` +void AddUpdateTemplate( ```<br/>``` + string name, ```<br/>``` + string description, ```<br/>``` + string metadata, ```<br/>``` + string state, ```<br/>``` + string zipFileName ```<br/>``` +) +``` +</td> +</tr> + +<tr> +<td> +<h4>C++</h4> +</td> +<td> +```void AddUpdateTemplate(```<br/>``` + String^ name,```<br/>``` + String^ description,```<br/>``` + String^ metadata,```<br/>``` + String^ state,```<br/>``` + String^ zipFileName```<br/>``` +)``` +</td> +</tr> + +<tr> +<td> +<h4>F#</h4> +</td> +<td> +``` +abstract AddUpdateTemplate : ```<br/>``` + name:string * ```<br/>``` + description:string * ```<br/>``` + metadata:string * ```<br/>``` + state:string * ```<br/>``` + zipFileName:string -> unit ``` +</td> +</tr> + +<tr> +<td> +<h4>VB</h4> +</td> +<td> +```'Sub AddUpdateTemplate (```<br/>``` + name As String,```<br/>``` + description As String,```<br/>``` + metadata As String,```<br/>``` + state As String,```<br/>``` + zipFileName As String```<br/>``` +)``` +</td> +</tr> +</table> + + +## Parameters + +*name* + +     Type: [System.String](https://msdn.microsoft.com/en-us/library/system.string.aspx) +     This value is no longer used and will be ignored + +*description* + +     Type: [System.String](https://msdn.microsoft.com/en-us/library/system.string.aspx) +     This value is no longer used and will be ignored + +*metadata* + +     Type: [System.String](https://msdn.microsoft.com/en-us/library/system.string.aspx) +     This value is no longer used and will be ignored + +*state* + +     Type: [System.String](https://msdn.microsoft.com/en-us/library/system.string.aspx) +     This value is no longer used and will be ignored + +*zipFileName* + +     Type: [System.String](https://msdn.microsoft.com/en-us/library/system.string.aspx) +     The name of the zip file that contains the process template resources + + +## Remarks + + +**Change in API Behavior for TFS 2015** + +API values for the name, description and metadata arguments are now overridden by the process template data specified in the *zipFileName*. This change was required to avoid conflicts between the ZIP file contents and parameters passed through the API. + +These properties are defined in the [ProcessTemplate.xml file](https://msdn.microsoft.com/library/aa395261.aspx). + +``` +<?xml version="1.0" encoding="utf-8"?> +<ProcessTemplate> + <metadata> + <name>Agile</name> + <description>This template is flexible and will work great for most teams using Agile planning methods, including those practicing Scrum.</description> + <version type="ADCC42AB-9882-485E-A3ED-7678F01F66BC" major="14" minor="1" /> + <plugins> + . . . + </plugins> + </metadata> + <groups> + +``` + +##Related notes + +[IProcessTemplates Interface](https://msdn.microsoft.com/library/microsoft.teamfoundation.server.iprocesstemplates.aspx) +[Microsoft.TeamFoundation.Server Namespace](https://msdn.microsoft.com/library/microsoft.teamfoundation.server.aspx) diff --git a/docs/work/reference/api-ref/open.md b/docs/work/reference/api-ref/open.md new file mode 100644 index 00000000000..0d00788f853 --- /dev/null +++ b/docs/work/reference/api-ref/open.md @@ -0,0 +1,121 @@ +--- +title: WorkItem.Open method | VSTS & TFS +description: Syntax and usage for the Open method to open a work item for modification when working with Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 38195423-A9B7-4C5B-8FA2-F9DA5C97DB1F +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2016 +--- + + +# WorkItem.Open Method + +**VSTS | TFS 2017 | TFS 2015 | TFS 2013** + +Opens a work item for modification. This method is [rate limited](../../../reference/rate-limits.md) for VSTS customers. For better performance and to work around the rate limits, use [PartialOpen](partialopen.md). + +**Namespace:** [Microsoft.TeamFoundation.WorkItemTracking.Client](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client%28v=vs.120%29.aspx) +**Assembly:** Microsoft.TeamFoundation.WorkItemTracking.Client (in Microsoft.TeamFoundation.WorkItemTracking.Client.dll) + +## Syntax + +<table> +<tr> +<td width="75px"> +<h4>C#</h4> +</td> +<td> +```public void Open()``` +</td> +</tr> + +<tr> +<td> +<h4>C++</h4> +</td> +<td> +```public:```<br/> +```void Open()``` +</td> +</tr> + +<tr> +<td> +<h4>F#</h4> +</td> +<td> +```member Open : unit -> unit``` +</td> +</tr> + +<tr> +<td> +<h4>JScript</h4> +</td> +<td> +```public void Open()``` +</td> +</tr> + +<tr> +<td> +<h4>VB</h4> +</td> +<td> +```'Declaration```<br/> +```Public Sub Open``` +</td> +</tr> +</table> + + +<!--- +<a data-toggle="collapse" href="#expando-agent-pools">C# ▼</a> +<div class="collapse" id="expando-queues"> +```public void PartialOpen()``` +</div> + +<a data-toggle="collapse" href="#expando-agent-pools">C++ ▼</a> +<div class="collapse" id="expando-queues"> +```public: +void Open()``` +</div> + + +<a data-toggle="collapse" href="#expando-agent-pools">F# ▼</a> +<div class="collapse" id="expando-queues"> +```member Open : unit -> unit``` +</div> + + +<a data-toggle="collapse" href="#expando-agent-pools">JScript ▼</a> +<div class="collapse" id="expando-queues"> +```public function Open()``` +</div> + +<a data-toggle="collapse" href="#expando-agent-pools">VB ▼</a> +<div class="collapse" id="expando-queues"> +```'Declaration +Public Sub Open``` +</div> +---> + + +## Remarks + +This method should be used only if you require historical data, attachments, links or other non-field data. If you want to work only with the latest revision of the work item, use the [PartialOpen](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem.partialopen%28v=vs.120%29.aspx) method. + +Using Open requires a round trip to the server for each work item and consumes local resources to store revision history and non-field data. + +This method does nothing if [IsOpen](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem.isopen%28v=vs.120%29.aspx) or [IsNew](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem.isnew%28v=vs.120%29.aspx) are true. + +## .NET Framework Security + +- Full trust for the immediate caller. This member cannot be used by partially trusted code. For more information, see [Using Libraries from Partially Trusted Code](https://msdn.microsoft.com/en-us/library/8skskf63%28v=vs.120%29.aspx). + +## Related notes + +- [WorkItem Class](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem%28v=vs.120%29.aspx) +- [Microsoft.TeamFoundation.WorkItemTracking.Client Namespace](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client%28v=vs.120%29.aspx) diff --git a/docs/work/reference/api-ref/partialopen.md b/docs/work/reference/api-ref/partialopen.md new file mode 100644 index 00000000000..0a81371c446 --- /dev/null +++ b/docs/work/reference/api-ref/partialopen.md @@ -0,0 +1,214 @@ +--- +title: WorkItem.PartialOpen method | VSTS & TFS +description: Syntax and usage for the PartialOpen method to open a work item for modification when working with Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 82920422-FCC2-4FF6-BDFB-E8E992736A5A +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2016 +--- +38195423-A9B7-4C5B-8FA2-F9DA5C97DB1F + +# WorkItem.PartialOpen Method + + +**VSTS | TFS 2017 | TFS 2015 | TFS 2013** + +Opens this work item for modification by loading only the latest revision of this WorkItem. Whenever possible, use this method instead of [Open](open.md) because PartialOpen provides better performance. + +**Namespace: ** [Microsoft.TeamFoundation.WorkItemTracking.Client](https://msdn.microsoft.com/library/microsoft.teamfoundation.workitemtracking.client%28v=vs.120%29.aspx) +**Assembly:** Microsoft.TeamFoundation.WorkItemTracking.Client (in Microsoft.TeamFoundation.WorkItemTracking.Client.dll) + + +## Syntax + +<table> +<tr> +<td width="75px"> +<h4>C#</h4> +</td> +<td> +```public void PartialOpen()``` +</td> +</tr> + +<tr> +<td> +<h4>C++</h4> +</td> +<td> +```public:```<br/> +```void PartialOpen()``` +</td> +</tr> + +<tr> +<td> +<h4>F#</h4> +</td> +<td> +```member PartialOpen : unit -> unit``` +</td> +</tr> + +<tr> +<td> +<h4>JScript</h4> +</td> +<td> +```public void PartialOpen()``` +</td> +</tr> + +<tr> +<td> +<h4>VB</h4> +</td> +<td> +```'Declaration```<br/> +```Public Sub PartialOpen``` +</td> +</tr> +</table> + + +<!--- + +<a data-toggle="collapse" href="#expando-agent-pools">C# ▼</a> +<div class="collapse" id="expando-queues"> +```public void PartialOpen()``` +</div> + +<a data-toggle="collapse" href="#expando-agent-pools">C++ ▼</a> +<div class="collapse" id="expando-queues"> +```public: +void PartialOpen()``` +</div> + + +<a data-toggle="collapse" href="#expando-agent-pools">F# ▼</a> +<div class="collapse" id="expando-queues"> +```member PartialOpen : unit -> unit``` +</div> + + +<a data-toggle="collapse" href="#expando-agent-pools">JScript ▼</a> +<div class="collapse" id="expando-queues"> +```public function PartialOpen()``` +</div> + +<a data-toggle="collapse" href="#expando-agent-pools">VB ▼</a> +<div class="collapse" id="expando-queues"> +```'Declaration +Public Sub PartialOpen``` +</div> + +---> + +## Exceptions + +| **Exception** | **Condition** | +| --- | --- | +| [ValidationException](https://msdn.microsoft.com/library/microsoft.teamfoundation.workitemtracking.client.validationexception%28v=vs.120%29.aspx) | This WorkItem instance does not belong to a [WorkItemCollection](https://msdn.microsoft.com/library/microsoft.teamfoundation.workitemtracking.client.workitemcollection%28v=vs.120%29.aspx). | +| [DeniedOrNotExistException](https://msdn.microsoft.com/library/microsoft.teamfoundation.workitemtracking.client.deniedornotexistexception%28v=vs.120%29.aspx) | This WorkItem instance could not be opened for edit correctly. | + +## Remarks + +The PartialOpen method loads the field data for only the latest revision of the work item. It does not load non-field data such as links, attachments, and historical revisions. Use this method instead of [Open](open.md) if you only need to work with the latest field data for a work item. + +PartialOpen is designed for use within a paging context. When you call PartialOpen on one work item, the entire page of work items will be fetched in a single round-trip to the server. This makes PartialOpen ideal for use in a paging context, such as when displaying and editing pages of work items. If you use [Open](open.md), it will only fetch one work item in a single round-trip, which is less efficient when working with pages of data. + +There are two modes of fetching used by PartialOpen, which the caller can use to determine which fields to fetch. These two modes correspond to whether the [DefaultProjectHint](https://msdn.microsoft.com/library/microsoft.teamfoundation.workitemtracking.client.workitemcollection.defaultprojecthint%28v=vs.120%29.aspx) is specified or unset in the owning [WorkItemCollection](https://msdn.microsoft.com/library/microsoft.teamfoundation.workitemtracking.client.workitemcollection%28v=vs.120%29.aspx) object. + +(Mode 1) Default - Fetch all the fields of the work item, when project hint is unset. + +(Mode 2) Optimized - Fetch only the fields relevant to a particular project, when project hint is specified. This is most optimal and recommended when all workitems are from the same project. + +By using PartialOpen, you can save bandwidth, resources, and time by paging in data for multiple work item fields up to the page size that is specified in [WorkItemCollection.PageSize](https://msdn.microsoft.com/library/microsoft.teamfoundation.workitemtracking.client.workitemcollection.pagesize%28v=vs.120%29.aspx). For VSTS customers, the Open method is rate limited whereas PartialOpen is not. + +This method does nothing if [IsPartialOpen](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem.ispartialopen%28v=vs.120%29.aspx), [IsOpen](https://msdn.microsoft.com/library/microsoft.teamfoundation.workitemtracking.client.workitem.isopen%28v=vs.120%29.aspx) or [IsNew](https://msdn.microsoft.com/library/microsoft.teamfoundation.workitemtracking.client.workitem.isnew%28v=vs.120%29.aspx) are true. + +## Sample Code + +The following code snippet shows how to use PartialOpen to update a list of work items returned from a query. + +```CS +private static void UpdateWorkItemsUsingPartialOpen() +{ + + // create TfsTeamProjectCollection instance using default credentials + var collectionUri = "http://localhost:8080/tfs/DefaultCollection"; + + using (TfsTeamProjectCollection tpc = newTfsTeamProjectCollection(newUri(collectionUri))) + { + // get the WorkItemStore service + var workItemStore = tpc.GetService<WorkItemStore>(); + + // get the project context for the work item store + + var teamProjectName = "My Favorite Project"; + + Project workItemProject = workItemStore.Projects[teamProjectName]; + + // search for the 'My Queries' folder + + var queryFolder = workItemProject.QueryHierarchy.FirstOrDefault(qh => qh isQueryFolder && qh.IsPersonal) asQueryFolder; + + if (queryFolder != null) + { + + // Search for the saved query. + var queryName = "PartialOpen Sample"; + var newBugsQuery = queryFolder.FirstOrDefault(qi => qi isQueryDefinition && qi.Name.Equals(queryName)) asQueryDefinition; + + if (newBugsQuery == null) + { + // If the query does not exist, create it. + var queryString = string.Format("SELECT [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] FROM WorkItems WHERE [System.TeamProject] = '{0}' AND [System.WorkItemType] = 'Bug' AND [System.State] = 'New'", teamProjectName); + newBugsQuery = newQueryDefinition(queryName, queryString); + queryFolder.Add(newBugsQuery); + workItemProject.QueryHierarchy.Save(); + } + + // Run the query. + WorkItemCollection workItems = workItemStore.Query(newBugsQuery.QueryText); + + // Supply the project hint to only fetch necessary data for the project. + workItemCollection.DefaultProjectHint = workItemProject.Id; + + var newAssignee = "John Smith"; + + foreach (WorkItem workItem in workItems) + { + // PartialOpen to fetch fields without underlying lists for entire query page. + // Using Open() here will fetch too much unnecessary data, and hence is undesirable. + workItem.PartialOpen(); + + // Edit the fields as needed. + workItem["System.AssignedTo"] = newAssignee; + + // Save your changes. + workItem.Save(); + + // Write work item to console. + Console.WriteLine("Assigned {0} {1} to {2}", workItem.Id, workItem.Fields["System.Title"].Value, newAssignee); + + // Free memory. + workItem.Close(); + } + } + } +} +``` + +## .NET Framework Security + +- Full trust for the immediate caller. This member cannot be used by partially trusted code. For more information, see [Using Libraries from Partially Trusted Code](https://msdn.microsoft.com/en-us/library/8skskf63%28v=vs.120%29.aspx). + + +## Related notes + + +- [WorkItem Class](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.workitem%28v=vs.120%29.aspx) +- [Microsoft.TeamFoundation.WorkItemTracking.Client Namespace](https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client%28v=vs.120%29.aspx) diff --git a/docs/work/reference/apply-pattern-matching-to-string-field.md b/docs/work/reference/apply-pattern-matching-to-string-field.md new file mode 100644 index 00000000000..d4d6a7b32ea --- /dev/null +++ b/docs/work/reference/apply-pattern-matching-to-string-field.md @@ -0,0 +1,71 @@ +--- +title: Apply pattern matching to a string field | VSTS & TFS +description: Syntax and usage for the MATCH element to force values in a field of String type to follow specified pattern - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 1134a153-0133-4404-8690-d25e934a45f7 +ms.author: kaelli +ms.manager: douge +ms.date: 02/10/2017 +--- +# Apply pattern matching to a string field + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can use the **MATCH** element to force values in a field of String type to follow a pattern that you specify. If you define multiple **MATCH** elements, the value will be valid if it matches any of the patterns that you specify for the field. If at least one element succeeds, the field has a valid value. + +> [!NOTE] +> To add a rule to a `FIELD` definition, use the **witadmin** command-line tool to import and export the definition for the work item type. See [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md). + +## MATCH Element Syntax Structure + You use the **MATCH** element to enforce basic pattern matching by defining a pattern that values in String type fields must match. + +``` +<MATCH pattern="patternValue" for="userGroupName" not="userGroupName" /> + +``` + +## Attributes + You can specify to which users the **MATCH** rule applies. If you do not define any optional attributes, all valid users and groups in Team Foundation Server must specify a value that matches the pattern. + +|Attribute|Description| +|---------------|-----------------| +|`pattern`|Required. Enforces basic pattern matching for strings only, and only for strings whose `syncnamechanges="false"`.<br /><br /> Valid values for the *patternValue* are "A", "N", and "X", which denote the following types of characters:<br /><br /> - "A" represents an alphabetical character.<br />- "N" represents a numeric character.<br />- "X" represents any alphanumeric character.<br /><br /> All other values are taken as literals. Minimum length: 1; maximum length: 255.<br /><br /> Pattern value: ^[^\\\\]*$<br /><br /> Pattern value example: xxxxx.nn.nn| +|`for`|Optional. Specifies the name of a user or group in Team Foundation to whom the rule applies. Valid names consist of a string of text that contains between 1 and 255 characters.<br /><br /> Pattern value: ^[^\\\\]+\\\\[^\\\\]+$<br /><br /> Pattern value example: *Domain*\\*UserID*| +|`not`|Optional. Specifies the name of a user or group in Team Foundation to whom the rule does not apply. Valid names consist of a string of text that contains between 1 and 255 characters.<br /><br /> Pattern value: ^[^\\\\]+\\\\[^\\\\]+$<br /><br /> Pattern value example: *Domain*\\*UserID*| + + + +## Pattern Matching Examples + The following examples illustrate successful and unsuccessful pattern matches for a variety of field uses. + +### Release Number + Pattern: ANN.NN.NN + +||| +|-|-| +|Validates|R01.03.04 or V05.08.99| +|Fails validation|1.3.4 or V5.8.99 or v1.3| + +### A Flexible Identifier + Pattern: XXX-XXX + +||| +|-|-| +|Validates|001-abc or a00-b02| +|Fails validation|1-abc or 001.abc| + +### Priority + Pattern: PN + +||| +|-|-| +|Validates|P1 or P5 or P9| +|Fails validation|1 or P10| + + Match tags are case-insensitive. Therefore, "PN" matches both P1 and p1. + + + +## Related notes + [Apply a field rule](apply-rule-work-item-field.md) \ No newline at end of file diff --git a/docs/work/reference/apply-rule-work-item-field.md b/docs/work/reference/apply-rule-work-item-field.md new file mode 100644 index 00000000000..57ff3c41f58 --- /dev/null +++ b/docs/work/reference/apply-rule-work-item-field.md @@ -0,0 +1,474 @@ +--- +title: Apply a field rule | TFS +description: Overview of XML elements you can use to modify field settings, such as pick lists, default value, copy value, or conditional rules +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 6dd08cfa-d039-4946-8528-b8c40d12c800 +ms.manager: douge +ms.author: kaelli +ms.date: 05/10/2017 +--- + + +# Apply a rule to a work item field + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +Depending on a field's data type, you can set various restrictions on what data can be entered into that field. You can specify values for a pick list (drop-down menu), set default values, clear entries, or restrict changes. With conditional rules, you can apply rules to a field based on dependencies between different fields' values. You can also restrict who can modify a field or scope a rule to only apply to a group. + +All of these rule elements can be defined within the **FIELD** definition of a work item type (WIT) definition, subject to some [restrictions for System fields](#system). And, with the exception of **HELPTEXT**, you can specify these rules to take affect during a workflow transition or as child elements within a **FIELD** (Global workflow) element. + +![Work item tracking XML element field rules](_img/apply-rule-work-item-field/IC757527.png) + +You can define any combination of rules to a field, subject to the constraints as described in this topic. + +- [Help text](#help-text): Use to specify tool-tip text to appear in a work item form for a field +- [Pick list](#pick-list): Use to specify a drop-down menu or pick list of allowed, suggested, or prohibited values +- [Assign value](#assign-value-rules): Use to define run-time behaviors and constraints that clear field values, copy values, match a pattern, make a field read-only and more +- [Conditional](#conditional-rules): Use to specify when a set of rules will be applied to a parent field. + + +Field rules are one component you have to customize work item tracking. To learn more, see [Customize work tracking objects to support your team's processes](../customize/customize-work.md). + +For information on modifying fields or adding field rules to a WIT definition file, see [Add or modify a field](../customize/add-modify-field.md). + + +[!INCLUDE [temp](../_shared/update-xml-wit.md)] + +<a id="help-text" /> +## Help text + +You can customize the help text or tooltip text that appears when a user points to a field that appears on a work item form. You can customize and localize the Help text for the same field that appears in different WITs and different team projects. Help text is restricted to 255 Unicode characters. + +The following example shows the assignment of Help text to a custom Business Justification field: + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD name="Business Justification" refname="Fabrikam.BusinessJustification" type="String"> + <HELPTEXT>Only required when you set the Urgencyfield to Need Immediately. </HELPTEXT> +</FIELD> +``` + +To provide users guidance that exceeds the 255 characters limit, see [Provide help text, hyperlinks, or web content on a work item form](provide-help-text-hyperlinks-web-content-form.md). + +>[!NOTE] +>The presence of `HELPTEXT` adds to the size of your data store and can impact scalability. If you support several hundreds of team projects within a single TFS collection or instance, be conservative in your use of `HELPTEXT` rules. + +<a id="pick-list" /> +## Pick list rules + +Pick list rules define the values that a user can or can't choose for a String field. Values defined in a pick list appear on a work item form and the query editor. You can combine lists, and expand or contract lists. You can also use the **for** and **not** attributes to [apply or ignore these rules](#scope), based on who is modifying the work item. + +<table> +<thead> +<tr> +<th><p>Rule</p></th> +<th><p>Usage</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>ALLOWEDVALUES</strong></p></td> +<td><p>Limits the values a user can choose based on the specified values.</p></td> +</tr> +<tr> +<td><p><strong>ALLOWEXISTINGVALUE</strong></p></td> +<td><p>Allows a field to retain an existing value, even if it is no longer in a pick list. Including this rule is recommended when you change the field values in a pick list or for pick lists that contain person names.</p> +<p></p></td> +</tr> +<tr> +<td><p><strong>GLOBALLIST</strong></p></td> +<td><p>Specifies the name of a global list that contains values maintained for a team project or project collection.</p></td> +</tr> +<tr> +<td><p><strong>PROHIBITEDVALUES</strong></p></td> +<td><p>Prevents specified values from being assigned. The work item can't be saved if the field contains a prohibited value.</p> +<p></p></td> +</tr> +<tr> +<td><p><strong>SUGGESTEDVALUES</strong></p></td> +<td><p>Defines a list of values that users can choose from, but are not restricted to selecting. Users can specify values other than those in this list.</p></td> +</tr> +</tbody> +</table> + +For examples of using pick lists, see [Define pick lists](define-pick-lists.md). + + +<a id="value-rules" /> +## Assign value rules + +Assign value rules define runtime behavior and constraints, such as specifying default values, clearing fields, requiring fields to be defined, and more. You can [apply or ignore these rules](#scope) based on who is modifying the work item using the **for** and **not** attributes. + +<a id="clear" /> +### Clear, set defaults, copy, or match a pattern + +These rules support setting defaults, copying values from one field to another, or enforcing a field value to match a prescribed pattern. + +<table> +<thead> +<tr> +<th><p>Rule</p></th> +<th><p>Usage</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>COPY</strong></p></td> +<td><p>Copies a specified value to a field when a user creates or modifies a work item.</p></td> +</tr> +<tr> +<td><p><strong>DEFAULT</strong></p></td> +<td><p>Specifies a value for a field that is empty when a user creates or modifies a work item. If a field already has a value, the <strong>DEFAULT</strong> rule is ignored.</p></td> +</tr> +<tr> +<td><p><strong>EMPTY</strong></p></td> +<td><p>Clears the field of any value that it contains and then makes the field read-only when a user saves the work item. You shouldn't use <strong>EMPTY</strong> with <strong>READONLY</strong>.</p> +<p><strong>EMPTY</strong> is primarily used [during state transition](transition-xml-element.md) to clear fields that apply to the state to which the item is transitioning.</p></td> +</tr> +<tr> +<td><p><strong>MATCH</strong></p></td> +<td><p>Forces entries made to a String field to conform to a [specified pattern of characters or numbers](apply-pattern-matching-to-string-field.md).</p></td> +</tr> +<tr> +<td><p><strong>SERVERDEFAULT</strong></p></td> +<td><p>Copies either the current user name or the server clock value to a field when a user saves a work item. These fields usually appear as read-only on the form.</p></td> +</tr> +</tbody> +</table> + +For the syntax structure and examples, see [Define a default value or copy a value to a field](define-default-copy-value-field.md). + +>[!NOTE] +>Field rules don't support assigning values that are the sum of two other fields or performing other mathematical calculations. + + + +<a id="require" /> +### Require, read-only, and restrict values + +These rules specify restrictions on specifying or changing the value of a field. + +<table> +<thead> +<tr> +<th><p>Rule</p></th> +<th><p>Usage</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>CANNOTLOSEVALUE</strong></p></td> +<td><p>Prevents users from clearing a field of a value once a value has been specified.</p></td> +</tr> +<tr> +<td><p><strong>FROZEN</strong></p></td> +<td><p>Prevents users from changing the value of a field once it contains a value. As soon as a user saves the work item with a value in that field, the value can no longer be modified.</p></td> +</tr> +<tr> +<td><p><strong>NOTSAMEAS</strong></p></td> +<td><p>Prevents a field from being assigned the same value as that which was assigned to another field.</p></td> +</tr> +<tr> +<td><p><strong>READONLY</strong></p></td> +<td><p>Prevents a field from being modified at all. You might want to apply this rule under certain conditions. For example, after a work item is closed, you want to make a field read-only to preserve the data for reporting purposes.</p> +<p>Do not use <strong>READONLY</strong> with the <strong>EMPTY</strong> element because <strong>EMPTY</strong> also makes a field read-only. If you combine these elements, results will be inconsistent.</p> +<p>In addition, you can make a field appear as read-only from the work item form using the `Control` element `ReadOnly` attribute. The field can be written to by other clients, but not through the work item form.</p></td> +</tr> +<tr> +<td><p><strong>REQUIRED</strong></p></td> +<td><p>Requires a user to specify a value for the field. Users cannot save a work item until they have assigned values to all required fields.</p></td> +</tr> +</tbody> +</table> + +For the syntax structure, see [All FIELD XML elements reference](field-definition-element-reference.md). + +<a id="scope" /> +### Restrict who can create or modify a work item + +You can control who can create or modify a work item by applying the **VALIDUSER** element to person-name fields. When you specify this element, you indicate which user or group of users can be assigned as a value for the field. You can set this element to support the optional **group** attribute, which requires that the person who is assigned to the field must be a direct or indirect member of the group that you specify. By default, all members of the **Team Foundation Valid Users** group can be specified in the field. + +The **VALIDUSER** element is valid only for String field types. You can [allow or restrict whether the rule applies to the user who is modifying the work item](#scope) by specifying a user or group for the **for** or **not** attributes, respectively. + + <VALIDUSER group="groupName" for="userName" not="userName" /> + +You can use the **VALIDUSER** rule only when you refer to person-name fields. The following system fields are examples of person-named fields: + +- Activated By (System.ActivatedBy) +- Assigned To (System.AssignedTo) +- Authorized As (System.AuthorizedAs) +- Changed By (System.ChangedBy) +- Closed By (System.ClosedBy) +- Created By (System.CreatedBy) + +In addition to the system fields, you can create a custom string field and use it as a person-named field. Also, you can synchronize custom person-named fields with Active Directory (specify syncnamechanges="true"). + +Work item fields do not distinguish between user identities in different domains. Therefore, "Fabrikam\\ctsoapo" and "Contoso\\ctsoapo" are treated as the same user when they are entered into a field that uses the **VALIDUSER** rule. + +<a id="conditional-rules" /> +## Conditional rules + +Conditional rules let you specify when a set of rules will be applied to a parent field. You can set conditions based on whether another field is assigned (or not assigned) a specified value or when another field changes (or doesn't change). You can include pick list and assign value rules within a conditional rule element. + +<table> +<thead> +<tr> +<th width="22%"><p>Rule</p></th> +<th width="78%"><p>Usage</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p><strong>WHEN</strong></p></td> +<td><p>Specifies the rules to apply to the parent field when another field is assigned a specified value.</p></td> +</tr> +<tr> +<td><p><strong>WHENNOT</strong></p></td> +<td><p>Specifies the rules to apply to the parent field when another field isn't assigned a specified value.</p></td> +</tr> +<tr> +<td><p><strong>WHENCHANGED</strong></p></td> +<td><p>Specifies the rules to apply to the parent field when a specified field's value changes.</p></td> +</tr> +<tr> +<td><p><strong>WHENNOTCHANGED</strong></p></td> +<td><p>Specifies the rules to apply to the parent field when a specified field's value doesn't change.</p></td> +</tr> +</tbody> +</table> + +You can specify multiple conditional rules per field. However, you can only specify a single driving field per conditional rule. You can't nest conditional rules. For the syntax structure and examples, see [Assign conditional-based values and rules](assign-conditional-based-values-and-rules.md). + +<a id="apply-ignore" /> +## Apply or ignore rules based on user or group +You can make a pick list or assign value rule to apply or not apply to a group of users by using the **for** or **not** attributes. Scope the rule to a group. To have the rule scoped to multiple groups, you must create a parent TFS group that includes the set of groups that you want to use. + +- **Make a field required only for a specified group:** + + Use **for** to apply a rule to a group. This example requires any user in the Junior Analysts group to complete the Second Approver field. + + <FIELD name="Second Approver"> + <REQUIRED for="Example1\Junior Analysts"/> + </FIELD> + +- **Restrict modification of a field to a group of users:** + + Use **not** to exclude a group from a rule. This example defines the Triage Description field as read-only for everyone except those users in the Triage Committee group. + + <FIELD name="Triage Description"> + <READONLY not="[Project]\Triage Committee" /> + </FIELD> + +- **Make a field required for some users and not for others:** + + Use a combination of **for** and **not** to simultaneously apply a rule to some and not for others. This example defines Severity as a required field for users in the Project Members group, but not for those in the Project Admins group. + + <FIELD name="Severity"> + <REQUIRED for="[Project]\Project Members" not="[Global]\Project Admins"/> + </FIELD> + + If a user is in both groups, the "for" statement would be enforced, and the field would be required. + +<a id="tokens" /> +### Use tokens to reference groups + +When you restrict a rule to a group, you must indicate the domain or scope of the group. For some values, you can use tokens. + +Person-name fields can accept values that reference both users and groups. Field attributes, for and not, apply to groups. You can use the following tokens when specifying values for these items. + +- **Scope to a group within a team project – [Project]:** + + The [Project] token is used to specify a group that is defined for a team project. This could correspond to a team, built-in TFS group, such as the [Project]\Contributors group, a custom TFS group you create at the project level, or a Windows group that you added to a TFS group. + + >[!NOTE] + >[Project] is used as is. You don't replace it with the name of your team project. + + Some examples: + + - Team: `[Project]\Fabrikam Team` + + When you create a team, a TFS group is created that contains the members assigned to the team. + + - Team project group: `[Project]\Contributors` + + - Windows group added to a team project: `[Project]\Triage Committee` + + >[!TIP] + >You can view a list of valid groups by [opening the Security page](../../security/set-project-collection-level-permissions.md) in the web portal administration context. + +- **Scope to a project collection – [GLOBAL]:** + + Use [GLOBAL] to reference a collection-scoped TFS group, such as the Project Collection Administrators group or a Windows group you add to a collection. For example: + + <FIELD name="Title"> + <READONLY for="[GLOBAL]\Project Collection Valid Users"/> + </FIELD> + +- **Scope to a server instance – [Team Foundation]:** + + Use the [Team Foundation] token to reference a server-scoped TFS group, such as a built-in group or a Windows group you add to a server-level group. For example: + + <FIELD name="Title"> + <READONLY for="[Team Foundation]\Team Foundation Valid Users"/> + </FIELD> + +- **Specify a domain qualified account or group:** + + Domain-qualified account name, such as the one shown in the following example, can be used to reference a domain user or group. Note that some rules only support groups and do not support referencing domain users. + + <LISTITEM value="FABRIKAM\Christie Church's Direct Reports"/> + +All users and groups must be qualified by one of these tokens. For example, the following XML isn't valid because it doesn't qualify the specified group with a valid token. + + <FIELD name="Title"> + <READONLY for="Dev Team"/> + </FIELD> + +To learn more about built-in groups, see [Permissions and groups](../../security/permissions.md) + +## Related notes + +- [Add or modify a field](../customize/add-modify-field.md) +- [All WITD XML elements reference](all-witd-xml-elements-reference.md) + +<a name="system"></a> +###System field rules + +System fields have System.*Name* reference names, for example System.Title and System.State. TFS restricts customization of these fields, except for these instances: + +- **HELPTEXT** rule can be assigned to all fields. + +- **READONLY** rule can be assigned to the State and Reason fields. + +- Most rules can be assigned to the Title, Assigned To, Description or Changed By System fields. + +### Person-named fields and validation errors + +To avoid validation errors that would otherwise occur when members leave the team and are no longer registered as project contributors, include the **ALLOWEXISTINGVALUE** element for the Assigned To field. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD name="Assigned To" refname="System.AssignedTo" type="String" syncnamechanges="true" reportable="dimension"> +   <HELPTEXT>The user who is working on this work item</HELPTEXT> +   <ALLOWEXISTINGVALUE /> +   <VALIDUSER /> +   <ALLOWEDVALUES expanditems="true" filteritems="excludegroups"> +      <LISTITEM value="Active" /> +      <LISTITEM value="[project]\Contributors" /> +   </ALLOWEDVALUES> +   <DEFAULT from="field" field="System.CreatedBy" /> +</FIELD> +``` + +### Apply rules to State and Reason fields + +The State and Reason fields are defined within the `WORKFLOW` section of the WIT definition. You can specify most field rules to apply to a field during a change of state, selection of a reason, or for a specific transition. To learn more, see [Change the workflow for a work item type](../customize/add-modify-wit.md). + + +### Where to apply a field rule + +When you want a rule to apply to a field throughout the life of the work item, specify it within the **FIELD** definition. For example, a field that is required for a bug that is new and active remains required until the bug is closed. + +Otherwise, specify a rule to be evaluated only during a change in state. These rules are defined within the **WORKFLOW** section under the **STATE**, **REASON**, or **TRANSITION** elements. All rules, except for **HELPTEXT**, can be applied within a **FIELD** (Workflow) element. + +Field rules are additive. That is, you can specify four sets of rules for the same field which will all be evaluated by the rule-engine. + +- **Work item type-specific** rules apply regardless of the location of a work item in its state model. For example, a `<REQUIRED \>` rule performs the following check: + + `"MyField Value" != NULL` + +- **State-specific** rules are scoped to a work item instance when it is in a certain state. A state-specific rule is enforced when the following condition is true: + + `State field value == "MyState" && "MyField Value" != NULL` + +- **Transition-specific** rules that you specify for a specific transition are scoped to a work item that is undergoing a certain transition. These rules are enforced when the following conditions are true: + + `State field value == "ToState"  && ` + + `"Previous State Before Edit/New" == "FromState" ` + + `&& "MyField Value" != NULL` + +- **Reason-specific** rules that you specify for a specific reason are scoped to a particular reason for a particular transition. They are processed when the following conditions are true: + + `Reason field == "MyReason" &&` + + `State field value == "ToState"  && ` + + `"Previous State Before Edit/New" == "FromState" && "MyField Value" != NULL` + +The following example restricts modification of the customer severity field when the work item is in the Active state. + +> [!div class="tabbedCodeSnippets"] +```XML +<STATE name="Active"> +   <FIELDS> +      <FIELD refname="MyCorp.Severity" > +         <READONLY /> +      </FIELD> +   </FIELDS> +</STATE> +``` + + +### Order in which rules are evaluated + +Rules are typically processed in the sequence in which they are listed. However, when you use the **WHEN**, **DEFAULT**, and **COPY** elements, additional behaviors may apply. + +You can gain some idea of how rules are evaluated when you apply multiple rules to a field. How rules are evaluated is not completely deterministic. This section describes the expected behavior and interactions when you are using the **WHEN**, **DEFAULT**, and **COPY** rules. + +The following steps show, in the correct sequence, the interactions that TFS performs and by the user of a work-item form. Only steps 1, 8, and 13 are performed by the user. + +1. From a Team Foundation client─such as the web portal, Visual Studio, Team Explorer, or Team Explorer Everywhere─ a user creates a new work item or edits an existing work item. + +2. Fill in field defaults. For all fields, use any **DEFAULT** rules that are outside **WHEN** rules. + +3. Copy field values. For all fields, use any **COPY** rules that are outside **WHEN** clauses. + +4. For all fields with a **WHEN** rule that matches, first do **DEFAULT** and then **COPY** rules inside. + +5. For all fields with a **WHENNOT** rule that matches, first do **DEFAULT** and then **COPY** rules inside. + + The system always processes **WHEN** rules before **WHENNOT** rules. + +6. For all fields that have had their values changed since step 1 and that contain **WHENCHANGED** rules, first do **DEFAULT** and then **COPY** rules inside. + +7. Allow the user to start editing. + +8. The user changes a field value and then moves focus from the field. + +9. Raise any **WHEN** rules for that field that match the new value. + +10. Raise any **WHENNOT** rules for that field that match the new value. + +11. Raise any **WHENCHANGED** rules for that field that match the new value. + +12. Return editing ability to the user. + +13. The user saves the changes to the database. + +14. For all fields, perform **SERVERDEFAULT** operations that are defined for the field either directly or indirectly under a **WHEN** or a **WHENNOT** rule. + +### Keystroke entries and rule evaluation + +The system sets a new value for a field every time a user enters a keystroke within a field through the UI work item form. This means that a conditional rule can occur unexpectedly whenever the rule's prerequisite conditions are met. + +In the following XML example, SubStatus will be emptied as you type "Approved Again" into the Status field because the **WHEN** rule occurs as soon as the user types the letter "e" in Approved, even if the intended final value is not "Approve". For this reason, think carefully when you are using conditional rules. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="MyCorp.SubStatus" /> + <WHEN field="MyCorp.Status" value="Approve" > + <EMPTY /> + </WHEN> +</FIELD> +``` + +<!--- +#### Q: When would I define field rules using global workflow? + +**A:** Use global workflow only when you are tasked with maintaining many fields with the same definitions and rules across multiple team projects. Similar to global lists, using global workflow can minimize the work required when you have to update field definitions. For more information, see [Customize global workflow](global-workflow-xml-element-reference.md). + + +--> \ No newline at end of file diff --git a/docs/work/reference/assign-conditional-based-values-and-rules.md b/docs/work/reference/assign-conditional-based-values-and-rules.md new file mode 100644 index 00000000000..6156327ae3e --- /dev/null +++ b/docs/work/reference/assign-conditional-based-values-and-rules.md @@ -0,0 +1,226 @@ +--- +title: Assign conditional-based values and rules | VSTS & TFS +description: Syntax and usage for WHEN, WHENNOT, WHENCHANGED, and WHENNOTCHANGED elements that define rules and values that are run conditionally - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 7975a8a3-6fa1-43c1-b32b-0bbb9bb336af +ms.author: kaelli +ms.manager: douge +ms.date: 01/20/2017 +--- + +# Assign conditional-based values and rules + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can define rules that are run conditionally by using the **WHEN**, **WHENNOT**, **WHENCHANGED**, and **WHENNOTCHANGED** elements. You use these rules to define which elements are run when the defined clause is `True`. You can define conditions that are based on what value is assigned to a specific field or whether a user modifies a specific field. For example, you can create a dependent pick list to provide detailed security or custom behavior. + +Field conditions are additional elements that you list inside a `FIELD` (Definition) element or the `FIELD` (Workflow) element. For more information about these elements, see [FIELD (Definition) element reference](field-definition-element-reference.md) and [FIELD (Workflow)](field-workflow-element-reference.md). + + The following code is a simple example of the **WHEN** clause: + + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD . . . > +<WHEN field="referenceName" value="yyy"> +</FIELD> +``` + + This clause means that anything within this FIELD element is applicable as long as the field `refname` has the value "yyy". The field must be a valid field reference name. For more information, see [Naming conventions for work item tracking objects](../../reference/naming-restrictions.md#ProjectNames). + +> [!NOTE] +> The value attribute is case-insensitive. Therefore, if the field reference name holds "YYY", matches include the values "yyy" and "YYY". + +<a name="Syntax"></a> +## Syntax structure for conditional elements + The following table describes conditional rules that you can specify as child elements of the `FIELD` (Definition) element or `FIELD` (Workflow) element. These elements accept one or more of the following attributes: + +- `field`: A string that describes the field. Must contain 1 to 255 characters. +- `value`: When the specified field has this value, the rules in the `WHEN` and `WHENNOT` elements are applied to the current field. + +<table Responsive="true" summary="table"> +<tr Responsive="true"> +<th scope="col" width="10%"><p>Element</p></th><th scope="col" width="40%"><p>Syntax</p></th><th scope="col"><p>Description</p></th></tr> +<tbody valign="top"> +<tr><td data-th="Element"><p><strong>WHEN</strong></p></td><td data-th="Syntax"> +<pre><code> +<WHEN field="fieldReferenceName" value="value"> + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE> + <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE> + <COPY> . . . </COPY> + <DEFAULT> . . . </DEFAULT> + <EMPTY> . . . </EMPTY> + <FROZEN> . . . </FROZEN> + <MATCH> . . . </MATCH> + <NOTSAMEAS> . . . </NOTSAMEAS> + <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES> + <READONLY> . . . </READONLY> + <REQUIRED> . . . </REQUIRED> + <SERVERDEFAULT> . . . </SERVERDEFAULT> + <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES> + <VALIDUSER> . . . </VALIDUSER> +</WHEN> +</code></pre> +</td><td data-th="Description"><p>Specifies one or more rules to apply to the current field when another field has a specific value. The parent element defines the current field.</p><p>When the specified field has the specified value, the rules in this element are applied to the current field.</p></td></tr><tr><td data-th="Element"><p><strong>WHENNOT</strong></p></td><td data-th="Syntax"> +<pre><code> +<WHENNOT field="fieldReferenceName" value="value"> + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE> + <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE> + <COPY> . . . </COPY> + <DEFAULT> . . . </DEFAULT> + <EMPTY> . . . </EMPTY> + <FROZEN> . . . </FROZEN> + <MATCH> . . . </MATCH> + <NOTSAMEAS> . . . </NOTSAMEAS> + <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES> + <READONLY> . . . </READONLY> + <REQUIRED> . . . </REQUIRED> + <SERVERDEFAULT> . . . </SERVERDEFAULT> + <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES> + <VALIDUSER> . . . </VALIDUSER> +</WHENNOT> + +</code></pre> +</td><td data-th="Description"><p>Specifies a condition under which to apply one or more rules to the current field. The rules apply to the current field when the value of another field changes. The parent element defines the current field.</p><p>When the specified field does not contain the specified value, the rules in this element are applied to the current field.</p></td></tr><tr><td data-th="Element"><p><strong>WHENCHANGED</strong></p></td><td data-th="Syntax"> +<pre><code> +<WHENCHANGED field="fieldReferenceName" > + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE> + <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE> + <COPY> . . . </COPY> + <DEFAULT> . . . </DEFAULT> + <EMPTY> . . . </EMPTY> + <FROZEN> . . . </FROZEN> + <MATCH> . . . </MATCH> + <NOTSAMEAS> . . . </NOTSAMEAS> + <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES> + <READONLY> . . . </READONLY> + <REQUIRED> . . . </REQUIRED> + <SERVERDEFAULT> . . . </SERVERDEFAULT> + <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES> + <VALIDUSER> . . . </VALIDUSER> +</WHENCHANGED> +</code></pre> +</td><td data-th="Description"><p>Specifies a condition under which to apply one or more rules to the current field. The rules apply to the current field when the value of another field is changed in a revision to a work item. The parent element defines the current field.</p></td></tr><tr><td data-th="Element"><p><strong>WHENNOTCHANGED</strong></p></td><td data-th="Syntax"> +<pre><code> +<WHENNOTCHANGED field="fieldReferenceName"> + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE> + <CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE> + <COPY> . . . </COPY> + <DEFAULT> . . . </DEFAULT> + <EMPTY> . . . </EMPTY> + <FROZEN> . . . </FROZEN> + <MATCH> . . . </MATCH> + <NOTSAMEAS> . . . </NOTSAMEAS> + <PROHIBITEDVALUES> . . . </PROHIBITEDVALUES> + <READONLY> . . . </READONLY> + <REQUIRED> . . . </REQUIRED> + <SERVERDEFAULT> . . . </SERVERDEFAULT> + <SUGGESTEDVALUES> . . . </SUGGESTEDVALUES> + <VALIDUSER> . . . </VALIDUSER> +</WHENNOTCHANGED> + +</code></pre> +</td><td data-th="Description"><p>Specifies a condition under which to apply one or more rules to the current field. The rules apply to the current field when the value of another field is not changed in a revision to a work item. The parent element defines the current field.</p></td></tr></table> + + + The following table describes how each optional, conditional-based rule is applied to the parent field when the conditional clause that you specify by using a **WHEN**, **WHENNOT**, **WHENCHANGED**, or **WHENNOTCHANGED** element is true. For more information, see [Apply a field rule](apply-rule-work-item-field.md). + +|Element|Description| +|-------------|-----------------| +|[ALLOWEDVALUES](define-pick-lists.md)|The parent field must have a value that comes from the specified list of values.| +|[ALLOWEXISTINGVALUE](define-pick-lists.md)|The value of the parent field that already exists will be allowed, even if it violates other rules. This element is not applicable if the value of the parent field is changed.| +|[CANNOTLOSEVALUE](apply-rule-work-item-field.md)|Users can change the value of the parent field to NULL, but they cannot change it to any other value.| +|[COPY](define-default-copy-value-field.md)|The value of a third field is automatically copied into the parent field. You specify the third field in the **COPY** element.| +|[DEFAULT](define-default-copy-value-field.md)|This element specifies the default value of the parent field.| +|[EMPTY](apply-rule-work-item-field.md)|The parent field must not contain a value.| +|[FROZEN](apply-rule-work-item-field.md)|The parent field is frozen. When a field is frozen, you can change its value to NULL, but you cannot change it to any other value.| +|[MATCH](apply-pattern-matching-to-string-field.md)|The value of the parent field must match the pattern that you specify.| +|[NOTSAMEAS](apply-rule-work-item-field.md)|The value of the parent field cannot match the value of a third field. You specify the third field in the **NOTSAMEAS** element.| +|[PROHIBITEDVALUES](define-pick-lists.md)|The parent field cannot contain any values in the enumerated list.| +|[READONLY](apply-rule-work-item-field.md)|The parent field is read-only.| +|[REQUIRED](apply-rule-work-item-field.md)|The parent field must contain a value that is not NULL.| +|[SERVERDEFAULT](define-default-copy-value-field.md)|The parent field takes its value from the specified server component. The valid server components are **clock**, which is the time when the work item is updated, and **currentuser**, which is the identity of the user who updated the work item.| +|[SUGGESTEDVALUES](define-pick-lists.md)|The enumerated list contains suggested values for the parent field.| +|[VALIDUSER](apply-rule-work-item-field.md)|Only the users whom you specify can modify the parent field.| + + +<a name="DependentRequired"></a> +## Define a dependent required field + You can specify that a field is required only when another field contains a specific value. In the following example, when a customer reports a bug, a customer severity must be specified. If the bug was not reported by a customer, a customer severity is not required. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="MyCorp.Severity" name="Customer Severity" type="String"> +    <ALLOWEDVALUES> +        <LISTITEM value="Blocking" /> +        <LISTITEM value="Major" /> +        <LISTITEM value="Minor" /> +    </ALLOWEDVALUES> +    <WHEN field="MyCorp.CustomerReported" value="true"> +        <REQUIRED /> +    </WHEN> +</FIELD> +``` +<a name="DependentPickList"></a> + +## Define a conditional pick list + The following example demonstrates a conditional pick list in which the allowed values for the Problem Type field are limited, based on whether the value of the ProblemCharacteristic field is set to Documentation. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="MyCorp.ProblemType" name="Problem Type" type="String"> +    <WHEN field="MyCorp.ProblemCharacteristic" value="Documentation"> +        <ALLOWEDVALUES> +            <LISTITEM value="Spelling Error" /> +            <LISTITEM value="Bad Format" /> +            <LISTITEM value="Missing Info" /> +        </ALLOWEDVALUES> +    </WHEN> +</FIELD> +``` + +<a name="WhenChanged"></a> +## Define a field when the user changes another field (WHENCHANGED) + In the following example, when a user changes the value of the MyCorp.State field, the MyCorp.StateDate field is set to the current date and time, as the server clock shows. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="MyCorp.StateDate" name="Date Of Last State Change" type="DateTime"> +    <WHENCHANGED field="MyCorp.State"> +        <COPY from="clock" /> +    </WHENCHANGED> +</FIELD> +``` + + In the following example, when a user changes the value of the MyCorp.State field, the value of the MyCorp.Status field is cleared. + +> [!div class="tabbedCodeSnippets"] +```XML +<!-- Clear the status field whenever someone changes the state --> +<FIELD refname="MyCorp.Status" name="Status" type="String"> +    <WHENCHANGED field="MyCorp.State"> +        <COPY from="value" value=""> +    </WHENCHANGED> +</FIELD> +``` + <a name="WhenNotChanged"></a> +## Define a field value based on a user not modifying a field (WHENNOTCHANGED) + In the following example, when a user does not change the value of the MyCorp.State field, the MyCorp.StateDate field becomes read-only. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="MyCorp.StateDate" name="Date Of Last State Change" type="DateTime"> +<!-- Make the StateDate field read-only when the State field is not changed --> +    <WHENNOTCHANGED field="MyCorp.State"> +        <READONLY /> +    </WHENNOTCHANGED> +</FIELD> +``` + +## Related notes +- [Apply a field rule](apply-rule-work-item-field.md) diff --git a/docs/work/reference/automate-field-assignments-state-transition-reason.md b/docs/work/reference/automate-field-assignments-state-transition-reason.md new file mode 100644 index 00000000000..f8c16ee8fb4 --- /dev/null +++ b/docs/work/reference/automate-field-assignments-state-transition-reason.md @@ -0,0 +1,127 @@ +--- +title: Automate field assignments | VSTS & TFS +description: Transition work items from one state to another state based on an event that occurs elsewhere when working in Team Services or Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: f4c6c550-ed55-4bff-a5a7-0e25e87249a5 +ms.author: kaelli +ms.manager: douge +ms.date: 02/14/2017 +--- + +# Automate field assignments based on State, Transition, or Reason + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You may want to automatically transition work items from one state to another state based on an event that occurs within or external to your VSTS and TFS team project. For example, you may want to automate the transition of a bug from one state to another based on what occurs in a call tracking tool. The work item type model and the Work Item Tracking API are extended to support automatic transitioning of work items by other systems. + + If you have code that changes the state of a work item, you can generalize that code by associating your action with the appropriate state transition by using the **ACTION** element. You can pass the value of your action to the [WorkItem.GetNextState](assetId:///WorkItem.GetNextState?qualifyHint=False&autoUpgrade=True) method to get the post-action state of that work item. The version control check-in dialog box uses this method to resolve bugs and close tasks that are associated with the check-in. + + `ACTION` is an optional child element of `ACTIONS`. + +> [!NOTE] +> The Work Item Tracking API is part of the Visual Studio ALM SDK, as described by the following page on the Microsoft website: [Extending Team Foundation](http://go.microsoft.com/fwlink/?LinkId=121098). + + For example, a tool is preset to automatically transition a work item to "Resolved" after the user checks in a change. However, as an integration provider, you do not know what state the work item type author has declared as "Resolved". The author might mean Resolved, Closed, Completed, Ready For Test, Include In Build, and so on. One option would be to require all work item type authors to include a state explicitly named "Resolved". + + That solution is too restrictive. It is also poor from an international perspective because it does not enable localization of states. Instead, system integrators can declare an action such as "Check-in" or "Complete" that induces an automatic transition for work items. The work item type author would then declare this action on the appropriate transition. + + <a name="Syntax"></a> +## Syntax for the ACTION element + The following syntax is used for the **ACTION** element. The value attribute specifies the name of the action and is required. You should follow the same naming conventions for actions as for field reference names. For example, Team Foundation version control uses Microsoft.VSTS.Actions.CheckIn to identify the transition that is appropriate for work items that are associated with the check-in. For more information, see [Naming conventions for work item tracking objects](../../reference/naming-restrictions.md). + +> [!div class="tabbedCodeSnippets"] +```XML +<ACTION value="NameOfAction" /> +``` + + +<a name="RequiredSteps"></a> +## Required steps to support automation + To integrate a tool with Work Item Tracking, the tool must perform the following steps: + +1. Determine what state the work item should be transitioned to when the action is performed. + +2. Set the work item to the "to" state. + + The Work Item Tracking API provides methods for performing these steps. The Work Item Tracking API is part of the Visual Studio ALM SDK. For more information, see the following page on the Microsoft website: [Team Foundation Server SDK](http://go.microsoft.com/fwlink/?LinkId=121098). + + > [!NOTE] + > The transaction action that caused a particular state transition to occur is not recorded. If you must track which action caused a transition, you can specify an additional work item field to track it, or you can define a Reason value. + + +<a name="AssociatingState"></a> +## Associate a State transition with an Action + You can use state transition actions to automate transitions of work items at various points in their workflow. For example, a Team Foundation Server version control system must support automatic transitions of work items at check-in time. To support this, a `microsoft.vsts.actions.checkin` action has been defined. + + A work item type author can define a "Defect" work item type that has a state called "Working" and use this work item when a developer is making changes. The work item type author can define another state called "Ready To Build," which means that the developer has declared the code that was affected by the defect to be ready for the nightly build. + + The author can automatically transition the work item from the "Working" state to the "Ready To Build" state during a check-in operation by declaring the following: + +> [!div class="tabbedCodeSnippets"] +```XML +<TRANSITION from="Working" to="Ready To Build"> + <REASONS> + ... + </REASONS> +   <ACTIONS> +      <ACTION value="microsoft.vsts.actions.checkin"/> +   </ACTIONS> +</TRANSITION> +``` + + +<a name="TransactionDetails"></a> +## Transition action details + Use state transition actions to automate transitions of work items at various points in their workflow. You might consider the following usage details about transition actions: + +- Transition actions are optional. If the current state of the work item instance has an action entry for the specified action, it returns the "to" state. If not, the return value is Null. Integrations should handle Null return values gracefully. That is: + + - Do not fail. + + - Leave a trace or log that indicates that the integration did not auto-transition because it required an action that was not found. + +- For each work item type, actions must be unique for From State/Action pairs. This means that work item type authors cannot specify multiple "to" states for the same action. + +- However, multiple actions on the same transition are supported to allow for multiple auto-transition integrations as shown in the following example: + + > [!div class="tabbedCodeSnippets"] + ```XML + <TRANSITION from="Working" to="Ready To Build"> + <REASONS> + <DEFAULTREASON value="Fixed" /> + </REASONS> +    <ACTIONS> +       <ACTION value="Microsoft.VSTS.Actions.Checkin"/> +       <ACTION value="ADatum.Actions.Complete"/> +    </ACTIONS> + </TRANSITION> + ``` + +- Action names are programmatic names for which you can use only English characters. + +- Action names should follow the same reference namespace convention as field reference names, to avoid action name conflicts between vendors and customers. However, this convention is not enforced by the tool. Visual Studio ALM uses **Microsoft.VSTS.Actions.\<your action>**. + +<a name="ErrorChecking"></a> +## Auto-transition error checking + Integrators can try two types of auto-transitions. The first is an auto-transition that occurs because of a user action. The second is an auto-transition that occurs by unattended automation, such as a nightly build. + +- **User action auto-transitions** For this kind of auto-transition, a user is present to react to any rule-related issues that appear. You must make sure that you support the situation that occurs when the author of a work item type adds a required field that the integration does not recognize. To support this situation, perform the auto-transition and then inspect the work item type for rule violations. If you find any, display the form for the user to resolve. + +- **Unattended automation auto-transitions** You must assume that no user is present to resolve these issues. In this case, the integration should fail gracefully. An error log should state that the auto-transition was tried, and it should give a reason for the failure. + + When defining either type of auto-transition, define the transition so that each work item reaches a valid state at the end of the transition without requiring user intervention. In other words, all the rules that are defined for the state being transitioned to are met by providing defaults or copied values for all fields. If any field becomes invalid after the transition, the state transition will fail. + + In order to keep fields from becoming invalid, do the following: + +- Define a **DEFAULTREASON** for the state transition. + +- For fields that would become required after the state transition, use the **DEFAULT** or **COPY** rule elements to specify a value for the field. + + For example, you have created the transition action Check-In, which transitions the state of a work item from "Working" to "Ready to Build". The work item's rules for "Ready to Build" require that the "Resolved By" field be set. You would then define a **DEFAULT** or **COPY** rule element for "ResolvedBy" in the **TRANSITION** section. Additionally, you would define a **DEFAULTREASON** to make sure that the required field can be set without user intervention. + +## Related notes +- [Customize your work tracking experience](../customize/customize-work.md) +- [Control](control-xml-element-reference.md) +- [Apply a field rule](apply-rule-work-item-field.md) +- [Change the workflow](change-workflow-wit.md) diff --git a/docs/work/reference/categories-xml-element-reference.md b/docs/work/reference/categories-xml-element-reference.md new file mode 100644 index 00000000000..463b707aa41 --- /dev/null +++ b/docs/work/reference/categories-xml-element-reference.md @@ -0,0 +1,138 @@ +--- +title: Categories XML element reference | VSTS & TFS +description: Shows a description of each of the default categories used by Visual Studio Team Services (VSTS) and Team Foundation Server (TFS). +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: d4b02c7c-a7ac-4c7a-b4c5-cbf9af74d489 +ms.author: kaelli +ms.manager: douge +ms.date: 02/14/2017 +--- + +# Categories XML element reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You use the `CATEGORIES` element to group work item types (WITs). [Use categories to group work item types](use-categories-to-group-work-item-types.md) provides a description of each of the default categories used by Team Services and Team Foundation Server (TFS). + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<CATEGORIES> +   <CATEGORY name="category display name" refname="category reference name"> +      <DEFAULTWORKITEMTYPE name="work item type reference name" /> +      <WORKITEMTYPE name="work item type reference name" /> +   </CATEGORY> +</CATEGORIES> +``` + +## Attributes and elements + +|Element|Attribute|Description| +|-------------|---------------|-----------------| +|`CATEGORIES`||Required element within the XML categories file.<br /><br /> Container element for specifying one or more `CATEGORY` elements that are defined for a team project.| +|`CATEGORY`||Required `CATEGORIES` child element.<br /><br /> Specifies a named category group that contains one default `DEFAULTWORKITEMTYPE` element and zero or more `WORKITEMTYPE` elements.| +||`name`|Required `CATEGORY` attribute.<br /><br /> The attribute type is `typelib:FriendlyName`.<br /><br /> Specifies the display name of the category. Must be between 1 to 254 characters and unique within the team project.| +||`refname`|Required `CATEGORY` attribute.<br /><br /> The attribute type is `typelib:ReferenceName`.<br /><br /> Specify a name no longer than 70 Unicode characters that uses alphanumeric, underscore, and hyphen characters. The reference name must contain at least one period (.), but no period can appear at the start or end of a name. Also, the reference name cannot start with a number or an underscore, and it cannot have multiple consecutive hyphens, such as (--).<br /><br /> Do not specify a name that overlaps with the reserved System. *XXX* and Microsoft. *XXX* namespaces. See [Naming restrictions, Work item tracking objects](../../reference/naming-restrictions.md).| +|`DEFAULTWORKITEMTYPE`||Required `CATEGORY` element.<br /><br /> Specifies a work item type to be tagged as belonging to the named category and to be used as the default type for the category.| +||`name`|Required `DEFAULTWORKITEMTYPE` attribute.<br /><br /> The attribute type is `WorkItemTypeRef`.<br /><br /> Specifies the reference name of a valid work item type for the team project that will be used as the default type for the category.| +|`WORKITEMTYPE`||Optional `CATEGORY` element.<br /><br /> Specifies a work item type to be tagged as belonging to the named category.| +||`name`|Required `WORKITEMTYPE` attribute.<br /><br /> The attribute type is `WorkItemTypeRef`.<br /><br /> Specifies the reference name of a valid work item type for the team project that will belong to the named category.| + +## Remarks + `CATEGORIES` is the root element of the categories schema. + + A category is defined within the `CATEGORIES` set of `CATEGORY` elements that is stored and used by a team project. Each `CATEGORIES` element must have at least one `CATEGORY` element defined. + + A category cannot be empty. Each `CATEGORY` element must have at least one `DEFAULTWORKITEMTYPE` or `WORKITEMTYPE` element defined. + + Each category has a friendly name and a reference name that must be unique within the team project. Each category friendly name must meet the following requirements: + +- Names can have up to 254 Unicode characters. +- Names must not be empty. +- Names cannot have leading or trailing white spaces. +- Names cannot contain backslash (\\) characters. +- Names cannot contain two consecutive white spaces. + + Category friendly names are not localized and cannot be made into a token, whereas the names for work item types are localized and can be made into a token. + +## Agile tools, category requirements, and restrictions + When assigning WITs to categories, consider the following operational notes: + +- To use the [backlog](http://msdn.microsoft.com/en-us/70a01e94-2dc9-4090-823c-71ee8e156e74) and [task](http://msdn.microsoft.com/en-us/f13e32ae-fe77-421a-b524-43b6bcd1a0f3) boards, you must assign at least one WIT to the Requirements Category and one WIT to the Task Category. + +- You cannot assign the same WIT to both the Requirements Category and to the Task Category. +- If you include more than one WIT in the Requirements Category or the Task Category, the type assigned to the `DEFAULTWORKITEMTYPE` element appears as the default type on the Agile backlog and board pages. +- WITs that belong to a category which defines a backlog in the ProcessConfiguration file must have start, closing, and at least one intermediate workflow state napped to a valid metastate as described in [Process Configuration XML element reference](process-configuration-xml-element.md). +- WITs that you assign to the Bug Category can be configured to [show up on backlogs and boards for each team](http://msdn.microsoft.com/en-us/49b374e0-1700-4650-bacf-759e7eee4580). You set the default behavior by [defining the property for BugsBehavior in the ProcessConfiguration file](process-configuration-xml-element.md). + +## Example + The following example lists the default categories XML file for the Scrum process template. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<cat:CATEGORIES xmlns:cat="http://schemas.microsoft.com/VisualStudio/2008/workitemtracking/categories"> + <!-- Usage: for resilience in Test system. Even if WITs have different name, they can be referred to by the category --> + <CATEGORY name="Bug Category" refname="Microsoft.BugCategory"> + <DEFAULTWORKITEMTYPE name="Bug" /> + </CATEGORY> + <CATEGORY name="Epic Category" refname="Microsoft.EpicCategory"> + <DEFAULTWORKITEMTYPE name="Epic" /> + </CATEGORY> + <CATEGORY name="Feature Category" refname="Microsoft.FeatureCategory"> + <DEFAULTWORKITEMTYPE name="Feature" /> + </CATEGORY> + <CATEGORY name="Requirement Category" refname="Microsoft.RequirementCategory"> + <DEFAULTWORKITEMTYPE name="Product Backlog Item" /> + <WORKITEMTYPE name="Bug" /> + </CATEGORY> + <CATEGORY name="Test Case Category" refname="Microsoft.TestCaseCategory"> + <DEFAULTWORKITEMTYPE name="Test Case" /> + </CATEGORY> + <CATEGORY name="Shared Step Category" refname="Microsoft.SharedStepCategory"> + <DEFAULTWORKITEMTYPE name="Shared Steps" /> + </CATEGORY> + <CATEGORY name="Shared Parameter Category" refname="Microsoft.SharedParameterCategory"> + <DEFAULTWORKITEMTYPE name="Shared Parameter" /> + </CATEGORY> + <CATEGORY name="Code Review Request Category" refname="Microsoft.CodeReviewRequestCategory"> + <DEFAULTWORKITEMTYPE name="Code Review Request" /> + </CATEGORY> + <CATEGORY name="Code Review Response Category" refname="Microsoft.CodeReviewResponseCategory"> + <DEFAULTWORKITEMTYPE name="Code Review Response" /> + </CATEGORY> + <CATEGORY name="Feedback Request Category" refname="Microsoft.FeedbackRequestCategory"> + <DEFAULTWORKITEMTYPE name="Feedback Request" /> + </CATEGORY> + <CATEGORY name="Feedback Response Category" refname="Microsoft.FeedbackResponseCategory"> + <DEFAULTWORKITEMTYPE name="Feedback Response" /> + </CATEGORY> + <CATEGORY name="Test Plan Category" refname="Microsoft.TestPlanCategory"> + <DEFAULTWORKITEMTYPE name="Test Plan" /> + </CATEGORY> + <CATEGORY name="Test Suite Category" refname="Microsoft.TestSuiteCategory"> + <DEFAULTWORKITEMTYPE name="Test Suite" /> + </CATEGORY> + <CATEGORY name="Task Category" refname="Microsoft.TaskCategory"> + <DEFAULTWORKITEMTYPE name="Task" /> + </CATEGORY> + <CATEGORY name="Hidden Types Category" refname="Microsoft.HiddenCategory"> + <DEFAULTWORKITEMTYPE name="Code Review Request" /> + <WORKITEMTYPE name="Code Review Response" /> + <WORKITEMTYPE name="Feedback Request" /> + <WORKITEMTYPE name="Feedback Response" /> + <WORKITEMTYPE name="Shared Steps" /> + <WORKITEMTYPE name="Shared Parameter" /> + <WORKITEMTYPE name="Test Plan" /> + <WORKITEMTYPE name="Test Suite" /> + </CATEGORY> +</cat:CATEGORIES> +``` + +## Related notes +- [Customize your work tracking experience](../customize/customize-work.md) +- [Change the workflow for a work item type](change-workflow-wit.md) +- [ProcessConfiguration XML element reference](process-configuration-xml-element.md) +- [Use categories to group work item types](use-categories-to-group-work-item-types.md) \ No newline at end of file diff --git a/docs/work/reference/change-audio-device-annotation-tool.md b/docs/work/reference/change-audio-device-annotation-tool.md new file mode 100644 index 00000000000..1ee8c5ea593 --- /dev/null +++ b/docs/work/reference/change-audio-device-annotation-tool.md @@ -0,0 +1,48 @@ +--- +title: Change the audio device or annotation tool | VSTS & TFS +description: Change the default settings used for the annotation tool or audio device - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: f0f5bd2d-5a9a-48e0-a5aa-6ac93453b2bc +ms.author: kaelli +ms.manager: douge +ms.date: 02/22/2017 +--- + + +# Change the audio device or annotation tool + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +You can change the default settings used by Microsoft Feedback Client for the annotation tool or audio device. The annotation tool that you set automatically opens when you double-click an image within the feedback tool, and the audio device is used when you start a **Screen & Voice** or a **Voice only** recording. You might want to make a change if you do not have the default tools available on the computer that you use to provide feedback. + + To change a setting, first launch Microsoft Feedback Client. For more information, see [Provide feedback](../connect/give-feedback.md). + +### To change the annotation tool or annotation settings + +1. On the toolbar at the top of Microsoft Feedback Client, choose the **Change settings** button. + +2. In the **Change settings** dialog box, choose the **Browse** button. + +3. In the **Open** dialog box, navigate to the annotation tool and executable file that you want, and then choose the **Open** button. + +4. (Optional) Enter any arguments that can be passed to the annotation tool. + + For example, **%f** represents the file name to pass to the tool. + +5. (Optional) Select the **After taking screenshot, immediately open in the specified annotation tool** check box to enable the annotation tool to open automatic. + +6. Choose the **Save** button. + +### To change the audio device + +1. On the toolbar at the bottom of Microsoft Feedback Client, choose the **Change settings** icon. + +2. In the **Change settings** dialog box, choose the **Change** button to change the default audio device. + +3. In the **Open** dialog box, navigate to the audio device that you want, select the **Default audio device** check box, and then choose the **Open** button. + +4. Choose the **Save** button. + +## Related notes +- [Provide feedback](../connect/give-feedback.md) \ No newline at end of file diff --git a/docs/work/reference/change-maximum-attachment-size-work-items.md b/docs/work/reference/change-maximum-attachment-size-work-items.md new file mode 100644 index 00000000000..9faf0a8aefe --- /dev/null +++ b/docs/work/reference/change-maximum-attachment-size-work-items.md @@ -0,0 +1,48 @@ +--- +title: Change the maximum attachment size for work items | VSTS & TFS +description: Use the TFS web service to increase the size of files you attach to up to 2GB - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: a37734d7-8db0-44e5-9e4a-31ddf9261e9e +ms.author: kaelli +ms.manager: douge +ms.date: 05/10/2017 +--- + +# Change the maximum attachment size for work items + +<p><b>TFS 2017 | TFS 2015 </b></p> + +>[!IMPORTANT] +>This topic applies to team project customization for the On-premises XML process model. +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + + +By default, Team Foundation Server (TFS) limits the size of work item attachments to 4 MB. For on-premises deployments, you can use the TFS web service to increase the size of files you attach to up to 2GB. + +1. If you're not a member of the TFS **Administrators** group, [get added as one](../../security/set-project-collection-level-permissions.md). + +2. Log on to the application-tier server for TFS. + +3. In a supported web browser, open the following URL: + + `http://localhost:8080/tfs/DefaultCollection/WorkItemTracking/v1.0/ConfigurationSettingsService.asmx?op=SetMaxAttachmentSize` + + If the team project resides on a different project collection, specify the name of the collection in place of *DefaultCollection*. + +4. Enter the size in bytes, and then choose **Invoke**. + + ![SetMaxAttachmentSize, ConfigurationSettingsService](_img/alm_wit_attachsize.png "ALM_WIT_AttachSize") + + The maximum size you can specify is 2 gigabytes (or `2000000000`). + +## Related notes + +- [Requirements and compatibility, Supported web browsers](../../accounts/requirements.md#supported-browsers) + +### Alternative solutions to increasing the attachment size + +Increasing the attachment size increases the amount of data in storage and the time it takes to save a work item. To work around the size limit, add the attachment to source control and [add a link in the work item to the source control file](../track/link-work-items-support-traceability.md) using the *Versioned Item* link type. + + \ No newline at end of file diff --git a/docs/work/reference/change-work-item-form-layout.md b/docs/work/reference/change-work-item-form-layout.md new file mode 100644 index 00000000000..7b8615cb184 --- /dev/null +++ b/docs/work/reference/change-work-item-form-layout.md @@ -0,0 +1,186 @@ +--- +title: Change the work item form layout | VSTS & TFS +description: Change the work item form layout be exporting the XML file and modifying the contents of the section - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 73869d51-eaa2-4aad-90f4-3081b8d26963 +ms.author: kaelli +ms.manager: douge +ms.date: 03/31/2017 +--- + +# Change the work item form layout + +<p><b>TFS 2017 (Hosted XML) | TFS 2015 </b></p> + +> [!IMPORTANT] +> This topic applies to team project customization for the On-premises XML process model. For the Hosted XML process model, see [WebLayout and Control elements](weblayout-xml-elements.md). For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +> For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +You can change the work item form layout by exporting the XML file and modifying the contents of the `FORM` section. After you modify and import the XML file, you can verify the changes you made in the updated work item type. Types of layout changes you can make include but are not limited to the following: + +- Change the label or placement of a field on the form +- Move groups of fields from one tab to another +- Add new tabs or columns + +For an overview of the controls you can place in a work item form, see [Specify work item form controls](specify-work-item-form-controls.md). For an overview of the top-level structural elements for the `FORM` section, see. [Design the work item form](design-work-item-form.md). + + +[!INCLUDE [temp](../_shared/update-xml-wit.md)] + + +<a name="Export"></a> +## Export and open the WIT definition file + +Perform one of the following steps based on the scope of the customization you are making: + +**If you are modifying a work item type for a single project**: + +1. Run **witadmin exportwitd** to export the XML file for the work item type you want to modify. For more information, see [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md). + +2. Open the file in Visual Studio. + +**If you are modifying a WIT to customize a process template**: + +1. Move to the location where you downloaded the process template. + +2. Open the WIT XML file. + +<a name="ChangeForm"></a> +## Change the layout of the FORM section + +1. Find the `<TabGroup>` section of the XML file. Notice that there are `<Tab>` elements for items such as Links and File Attachments in which each `<Tab>` element contains a `<Control>` element that renders the respective control. + + ``` + <Tab Label="Links"> +   <Control Type="LinksControl" /> + </Tab> + <Tab Label="File Attachments"> +   <Control Type="AttachmentsControl" /> + </Tab> + ``` + +2. Merge the two `<Tab>` elements into a single Links and Attachments `<Tab>` element that contains both controls by replacing the XML shown in the previous step with the new XML shown in the following example: + + ``` + <Tab Label="Links and Attachments"> +   <Control Type="LinksControl" Label="Links" LabelPosition="Top" /> +   <Control Type="AttachmentsControl" Label="Attachments" LabelPosition="Top" /> + </Tab> + ``` + +3. Find the section of the `<FORM>`, `<Layout>` definition that describes the group you want to modify, such as the Classification group. + + ``` + <Group Label="Classification"> +   <Column PercentWidth="100"> +     <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" /> +     <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" /> +   </Column> + </Group> + ``` + + > [!NOTE] + > For best results, every control or group should display in a column even if the column spans the full width of the form. In turn, every column should display in a group even if the group has no visible label or boundary. + +4. Select and copy the following lines to the clipboard for later use. + + ``` + + <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" /> <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" /> + + ``` + +5. Delete the lines starting with `<Group Label="Classification">` and ending with `<Group>` in the following XML, to remove the Classification group from its current position on the form. + + ``` + <Layout> +   <Group> +     <Column PercentWidth="70"> +       <Control Type="FieldControl" FieldName="System.Title" Label="&Title:" LabelPosition="Left" /> +     </Column> +     <Column PercentWidth="30"> +       <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Discipline" Label="&Discipline:" LabelPosition="Left" /> +     </Column> +   </Group> +   <Group Label="Classification">    <Column PercentWidth="100">      <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="&Area:" LabelPosition="Left" />      <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="&Iteration:" LabelPosition="Left" />    </Column>  </Group> + ``` + +6. In the `<TabGroup>` section, find the following lines that define the **Details** tab: + + ``` + <Tab Label="Details"> +   <Group> +     <Column PercentWidth="50"> +       <Group Label="General"> +         <Column PercentWidth="100"> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Issue" Label="Iss&ue:" LabelPosition="Left" /> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.ExitCriteria" Label="E&xit criteria:" LabelPosition="Left" /> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Build.IntegrationBuild" Label="Integration &build:" LabelPosition="Left" /> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.TaskHierarchy" Label="Task C&ontext:" LabelPosition="Left" ReadOnly="True" /> +         </Column> +       </Group> +     </Column> +     <Column PercentWidth="50"> +       <Group Label="Schedule"> +         <Column PercentWidth="100"> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.RemainingWork" Label="Remaining &work (hours):" LabelPosition="Left" /> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.CompletedWork" Label="Com&pleted work (hours):" LabelPosition="Left" /> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.StartDate" Label="Start Dat&e:" LabelPosition="Left" ReadOnly="True" /> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.FinishDate" Label="&Finish Date:" LabelPosition="Left" ReadOnly="True" /> +         </Column> +       </Group> +     </Column> +   </Group> + </Tab> + ``` + +7. To move these controls to the **Details** tab, paste the contents of your clipboard below the `<Tab Label="Details">` element. + + ``` + <Tab Label="Details"> +   <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" />  <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" /> +   <Group> +     <Column PercentWidth="50"> +       <Group Label="General"> +         <Column PercentWidth="100"> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Issue" Label="Iss&ue:" LabelPosition="Left" /> + ... + ``` + +8. Make the following changes to create a grouping around the moved fields and to divide the fields into two columns: + + ``` + <Tab Label="Details"> +   <Group Label="Classification">    <Column PercentWidth="50">      <Group>        <Column PercentWidth="100">          <Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area" LabelPosition="Left" /> +           <Control Type="WorkItemClassificationControl" FieldName="System.IterationPath" Label="Iteration" LabelPosition="Left" /> +         </Column>      </Group>    </Column>    <Column PercentWidth="50">      <Group>        <Column PercentWidth="100">          <Control Type="FieldControl" FieldName="MyCompany.MyProcess.Category" Label="Category" LabelPosition="Left" /> +         </Column>      </Group>    </Column>  </Group> +   <Group> +     <Column PercentWidth="50"> +       <Group Label="General"> +         <Column PercentWidth="100"> +           <Control Type="FieldControl" FieldName="Microsoft.VSTS.Common.Issue" Label="Iss&ue:" LabelPosition="Left" /> + ... + ``` + +9. Save your changes. + +10. To import the new work item type to a single project, see [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md). To add the work item type to your process template, see [Add type definitions for work items](define-modify-work-item-fields.md). + +<a name="Verify"></a> +## Verify the Web page or HTML content appears in the work item form + +1. In Team Explorer, choose **Refresh** to download the latest updates from the server. + + These updates include the changes that you just imported. Wait several seconds until the Work Items node is loaded. Nodes that are still loading display the word **working**. + +2. Create a new work item by using the work item type you modified. + + Notice that the Classification group is no longer on the main form. On the **Links and Attachments** tab choose the **Details** tab to see the results of the changes that you made. + +## Related notes +- [Design the work item form](design-work-item-form.md) +- [Specify work item form controls](specify-work-item-form-controls.md) +- [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md) \ No newline at end of file diff --git a/docs/work/reference/change-workflow-wit.md b/docs/work/reference/change-workflow-wit.md new file mode 100644 index 00000000000..29a18545fc9 --- /dev/null +++ b/docs/work/reference/change-workflow-wit.md @@ -0,0 +1,297 @@ +--- +title: Change the workflow for a work item type | VSTS & TFS +description: Add States, Transitions, Reasons, or Actions to customize the workflow for a WIT in Team Foundation Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: ca8dff64-7ece-46cf-b985-2751480dff32 +ms.author: kaelli +ms.manager: douge +ms.date: 03/31/2017 +--- + +# Change the workflow for a work item type + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can change the workflow for a work item type (WIT) to support your business and team processes. WITs support tracking all types of work─requirements, tasks, code defects─to support software development. + +The workflow determines the logical progression and regression of work that team members will perform. It also specifies the values that appear in the drop-down menus for the State and Reason fields. For an overview of the default workflow states supported in the default process templates, see [Choose a process](../guidance/choose-process.md). + +**Workflow for Product Backlog Item (Scrum process template)** + +![Product backlog item workflow, Scrum process](_img/scrum_pbistate.png "Scrum_PBIstate") + + +> [!NOTE] +> This topic describes how to customize a workflow state. If instead, you want to change the State assigned to a specific work item, see one of the following topics: [Add work items, Update work status](../concepts/work-item-form-controls.md#update-work-status), [Kanban board, Track work in progress](../kanban/kanban-basics.md#track-work), or [Task board, Update task status](../scrum/task-board.md#update-task-status). You can also perform a [bulk update of the State for many work items](../backlogs/bulk-modify-work-items.md). +> +> For information about build definition workflows, see [Get started with CI/CD](../../build-release/actions/ci-cd-part-1.md). + + +[!INCLUDE [temp](../_shared/update-xml-wit.md)] + + +To customize the workflow, follow these two steps: + +1. Modify the `WORKFLOW` section of the WIT definition as described in this topic. + +2. [Modify the process configuration to map new workflow states to metastates](process-configuration-xml-element.md). + + This second step is required when you change the workflow for a WIT that appears on an Agile tool page. These WITs belong to either the Requirement or Task categories. To learn more about state categories, see [Workflow states and state categories](../concepts/workflow-and-state-categories.md). + + +<a name="DesignGuidelines"></a> + +## Workflow design guidelines +You define the workflow by first identifying the states and the valid transitions between them. The `WORKFLOW` section of the WIT definition specifies the valid states, transitions, reasons for the transitions, and optional actions that will be performed when a team member changes the state of a work item. + +In general, you associate each state with a team member role and a task that a person in that role must perform to process the work item before changing its state. Transitions define the valid progressions and regressions between states. Reasons identify why a team member changes a work item from one state to another, and actions support automation of the transition of a work item at a point in the workflow. + +For example, the State is set to **New** when a tester opens a new bug that is based on the default Agile process. The developer changes the State to **Active** when fixing the bug, and once fixed, the developer changes its state to **Resolved** and sets the value of the Reason field to **Fixed**. After verifying the fix, the tester changes the state of the bug to **Closed** and the Reason field changes to **Verified**. If the tester determined that the developer had not fixed the bug, the tester would change the state of the bug to **Active** and specify the Reason as **Not Fixed** or **Test Failed**. + +As you design or modify a workflow, consider the following guidelines: + +- Use the `STATE` element to define a unique state for each team member role that will take a specific action on a work item. The more states you define, the more transitions you must define. Regardless of the sequence in which you define the states, they are listed in alphanumeric order in the drop-down menu for the **State** field. + + If you add a state to a work item type that appears on the backlog or board pages in the web portal, you must also map the state to a state category. To learn more, review [Workflow states and state categories](../concepts/workflow-and-state-categories.md). + +- Use the `TRANSITION` element to define a transition for each valid progression and regression from one state to another. + + At a minimum, you must define one transition for each state, and the transition from the null state to the initial state. + + You can define only one transition from unassigned (null) to the initial state. When you save a new work item, it is automatically assigned to the initial state. + + When a team member changes the state of a work item, that change triggers the transition and the actions that you define to be performed for the selected state and the transition. Users can specify only those states that are valid based on the transitions that you define for the current state. In addition, an `ACTION` element, which is a child element of `TRANSITION`, can change the state of a work item. + +- For each transition, you define a default reason by using the `DEFAULTREASON` element. You can define as many optional reasons as you want by using the `REASON` element. These values appear in the drop-down menu of the **Reason** field. + +- You can specify rules that will be applied when the work item changes state, when it transitions, or when a user selects a specific reason. Many of these rules supplement the conditional rules that you can apply when you define the fields in the `FIELDS` section under the `WORKITEMTYPE` definition. For more information, see [Update fields during a workflow change](#fields) later in this topic. + +- The names that you assign to states and reasons are case insensitive. + + The drop-down menus for the State and Reason fields within the work item form or query editor display the values assigned in the `WORKFLOW` section of the work item type. + +<a name="ExampleWorkflow"></a> +## Workflow diagram and code example + +The following code example shows the `WORKFLOW` for the Bug WIT definition for the Agile process template. This example defines three states and five transitions. The `STATE` elements specify the Active, Resolved, and Closed states. All possible combinations for progression and regression transitions are defined for the three states, except one. The transition from Closed to Resolved is not defined. Therefore, team members cannot resolve a work item of this type if the work item is closed. + +This example doesn't list all the elements for `DEFAULTREASON`, `REASON`, `ACTION`, and `FIELD`. + +**Example Workflow State Diagram – Agile Bug WIT** + +![Bug workflow states, Agile process template](_img/procguide_bugworkflow.png "ProcGuide_BugWorkflow") + +``` +<WORKFLOW> + <STATES> + <STATE value="Active"> + <FIELDS> . . . </FIELDS> + </STATE> + <STATE value="Resolved"> + <FIELDS> . . . </FIELDS> + </STATE> + <STATE value="Closed"> + <FIELDS> . . . </FIELDS> + </STATE> + </STATES> + <TRANSITIONS> + <TRANSITION from="" to="Active"> + <REASONS> + <REASON value="Build Failure" /> + <DEFAULTREASON value="New" /> + </REASONS> + <FIELDS> . . . </FIELDS> + </TRANSITION> + <TRANSITION from="Active" to="Resolved"> + <ACTIONS> . . . </ACTIONS> + <REASONS> . . . </REASONS> + </TRANSITION> + <TRANSITION from="Resolved" to="Active"> + <REASONS> . . . </REASONS> + </TRANSITION> + <TRANSITION from="Resolved" to="Closed"> + <REASONS> + <DEFAULTREASON value="Verified" /> + </REASONS> + <FIELDS> . . . </FIELDS> + </TRANSITION> + <TRANSITION from="Closed" to="Active"> + <REASONS> + <REASON value="Reactivated" /> + <DEFAULTREASON value="Regression" /> + </REASONS> + <FIELDS> . . . </FIELDS> + </TRANSITION> + </TRANSITIONS> + </WORKFLOW> +``` + + +## <a name="NumberStates"></a> Determine the number and types of states + You determine the number and types of valid states based on the number of distinct logical states in which you want the work items of that type to exist. Also, if different team members perform different actions, then you can consider defining a state based on a member role. Each state corresponds to an action that a team member must perform on the work item to move it to the next state. For each state, you should define the specific actions and the team members who are allowed to perform those actions. + + The following table provides an example of four states that are defined to track the progress of a feature and the valid users who must perform the indicated actions: + +|State|Valid user|Action to perform| +|-----------|----------------|-----------------------| +|Proposed|Project manager|Anyone can create a feature work item. However, only project managers can approve or disapprove the work item. If a project manager approves a feature, the project manager changes the status of the work item to Active; otherwise, a team member closes it.| +|Active|Development lead|The development lead oversees the development of the feature. When the feature is completed, the development lead changes the status of the feature work item to Review.| +|Review|Project manager|The project manager reviews the feature that the team implemented and changes the status of the work item to Closed if the implementation is satisfactory.| +|Closed|Project manager|No additional action is expected to occur on work items that are closed. These items remain in the database for archival and reporting purposes.| + +> [!NOTE] +> All states appear in alphabetical order in the list on the form for a work item of a particular type, regardless of the sequence in which you specify them. + + <a name="Transitions"></a> +## Define transitions + +You control the states to and from which team members can change a work item if you define the valid state progressions and regressions. If you do not define a transition from one state to another state, team members cannot change a work item of a particular type from a particular state to another particular state. + + The following table defines the valid transitions for each of the four states that were described earlier in this topic, together with the default reason for each. + +|State|Transition to state|Default reason| +|-----------|-------------------------|--------------------| +|Proposed|Active (progression)|Approved for development| +||Closed (progression)|Not approved| +|Active|Review (progression)|Acceptance criteria met| +|Review|Closed (progression)|Feature complete| +||Active (regression)|Does not meet requirements| +|Closed|Proposed (regression)|Reconsider for approval| +||Active (regression)|Closed in error| + + You can restrict who is allowed to make a transition from one state to another by using the *for* and *not* attributes of the `TRANSITION` element. As the following example shows, testers can reopen a bug but developers cannot. + +``` +<TRANSITION from="Closed" to="Active" +     for="[Project]\Testers" +      not="[Project]\Developers"> +    . . . +</TRANSITION> +``` + +<a name="Reasons"></a> +### Specify the reasons + When a team member changes the State field, that user can retain the default reason for that transition or specify a different reason if you define additional options. You must use the `DEFAULTREASON` element to specify one and only one default reason. You should specify additional reasons only if they help the team track or report data. + + For example, a developer can specify one of the following reasons when they resolve a bug: Fixed (Default), Deferred, Duplicate, As Designed, Cannot Reproduce, or Obsolete. Each reason specifies a particular action for the tester to perform with regard to the bug. + +> [!NOTE] +> All reasons appear in alphabetical order in the list on the work form for work items of a particular type, regardless of the sequence in which you specify the `REASON` elements. + + The following example shows the elements that define the reasons why a member of the team might resolve a bug: + +``` +<TRANSITION from="Active" to="Resolved"> +   . . . +   <REASONS> +      <DEFAULTREASON value="Fixed"/> +      <REASON value="Deferred"/> +      <REASON value="Duplicate"/> +      <REASON value="As Designed"/> +      <REASON value="Unable to Reproduce"/> +      <REASON value="Obsolete"/> +   </REASONS> +   . . . +</TRANSITION> + +``` + +<a name="Actions"></a> +### Specify actions + In general, team members change the state of a work item by specifying a different value for the **State** field and then saving the work item. However, you can also define an `ACTION` element that automatically changes the state of a work item when that transition occurs. As the following example shows, you can specify that bug work items should be resolved automatically if they are associated with files that a developer checks into version control: + +``` +<TRANSITION from="Active" to="Resolved"> +   <ACTIONS> +   <ACTION value="Microsoft.VSTS.Actions.Checkin"/> +   </ACTIONS> +. . . +</TRANSITION> +``` + + You can use the `ACTION` element to automatically change the state of work items of a particular type when events occur elsewhere in Microsoft Visual Studio Application Lifecycle Management or outside Visual Studio Application Lifecycle Management (for example, from a tool that tracks calls). For more information, see [ACTION](automate-field-assignments-state-transition-reason.md). + +<a name="fields"></a> +## Update a field during a workflow change + You can define rules that update fields whenever the following events occur: + +- Assign a field rule under `STATE` when you want the rule to apply for all transitions to and reasons for entering that state. + +- Assign a field rule under `TRANSITION` when you want the rule to apply for that transition and all reasons for making that transition. + +- Assign a field rule under `DEFAULTREASON` or `REASON` when you want the rules to apply only for that specific reason. + + If a field should always contain the same value, you define the rule under the `FIELD` element that defines that field. To learn more about rule usage, see [Apply a field rule](apply-rule-work-item-field.md). + + You should try to minimize the number of conditions that you define for any one type of work item. With each conditional rule that you add, you increase the complexity of the validation process that occurs every time that a team member saves a work item. Complex rule sets might increase the time that is required to save the work item. + + The following examples show some of the rules that are applied to system fields in the process template for MSF Agile Software Development. + +<a name="DefineField"></a> +### Change the value of a field when the state changes + When the value of the **State** field for a work item is set to Active and the work item is saved, the values of the **Activated By** and **Assigned To** fields are automatically set to the name of the current user. That user must be a member of the Team Foundation Server Valid Users group. The value of the **Activated Date** field is also set automatically. The following example shows the elements that enforce this rule: + +``` +<STATE value="Active"> +<FIELDS> +   <FIELD refname="Microsoft.VSTS.Common.ActivatedBy"> +      <COPY from="currentuser"/> +      <VALIDUSER/> +      <REQUIRED/> +   </FIELD> +   <FIELD refname="Microsoft.VSTS.Common.ActivatedDate"> +      <SERVERDEFAULT from="clock"/></FIELD> +   <FIELD refname="System.AssignedTo"> +      <DEFAULT from="currentuser"/> +   </FIELD> +. . . +</FIELDS> +</STATE> +``` + +<a name="ClearField"></a> +### Clear the value of a field when the value of another field changes + When the value of the **State** field for a work item is set to Active and the work item is saved, the Closed Date and Closed By fields are automatically set to null and made read-only if you use the `EMPTY` element, as the following example shows. + +``` +<STATE value="Active"> +   <FIELDS> +. . . +      <FIELD refname="Microsoft.VSTS.Common.ClosedDate"><EMPTY/></FIELD> +      <FIELD refname="Microsoft.VSTS.Common.ClosedBy"><EMPTY/></FIELD> +   </FIELDS> +</STATE> +``` + +<a name="CopyField"></a> +### Define a field based on the contents of another field + When the value of the **State** field for a work item changes to Resolved and the work item is saved, the value of the **Resolved Reason** field is set to the value that the user specified in the **Reason** field. The following example shows the elements that enforce this rule: + +``` +<STATE value="Resolved"> +   <FIELDS> +. . . +      <FIELD refname="Microsoft.VSTS.Common.ResolvedReason"> +         <COPY from="field" field="System.Reason"/> +      </FIELD> +   </FIELDS> +</STATE> +``` + +## Related notes + +- [Workflow states and state categories](../concepts/workflow-and-state-categories.md) +- [Customize your work tracking experience](../customize/customize-work.md) +- [Query by assignment, workflow or Kanban board changes](../track/query-by-workflow-changes.md) +- [Design the work item form](design-work-item-form.md) +- [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md) + + + +<a name="tools"></a> +### Tool support + +You can change the workflow or view the workflow state diagram that you are defining by using the Process Editor, available for TFS 2015 and earlier versions. You install it from [Microsoft Visual Studio Team Foundation Server 2015 Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power). + +You can support your users to visualize the workflow by installing the [State Model Visualization extension](https://marketplace.visualstudio.com/items?itemName=taavi-koosaar.StateModelVisualization) from the Visual Studio Marketplace. This tool supports both TFS and VSTS. \ No newline at end of file diff --git a/docs/work/reference/combine-list-types.md b/docs/work/reference/combine-list-types.md new file mode 100644 index 00000000000..00311c75ff6 --- /dev/null +++ b/docs/work/reference/combine-list-types.md @@ -0,0 +1,58 @@ +--- +title: Combine pick list types | VSTS & TFS +description: Examples that show how to create pick lists or drop-down menus by combining different types. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 04f1daff-fe12-4c1f-8625-e884f0fb2c7c +ms.author: kaelli +ms.manager: douge +ms.date: 04/05/2017 +--- + +# Combine list types + +<b>VSTS (Hosted XML) | TFS 2017 | TFS 2015 | TFS 2013</b> + + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML process models. For an overview of process models and supported customizations, see [Customize your work tracking experience](../customize/customize-work.md). + +You can specify multiple types of lists for a single field. This topic defines how the resulting list of items is determined. + + The following descriptions use these conventions: + +- All values for an `ALLOWEDVALUES` list are identified as {set A}. +- All values for a `SUGGESTEDVALUES` list are identified as {set S}. +- All values for a `PROHIBITEDVALUES` list are identified as {set P}. + +## Valid value determination + The valid values allowed for a field are obtained by subtracting {set P} from {set A}. If {set A} has no entries, {set A} is considered to be all possible values. This is because no allowed values have been defined; everything is allowed except those values specifically identified in {set P}. + + {Set S} plays no role in determining valid values for a field, but it does help determine the values that display in the drop-down list. + +## Populating a drop-down list with list values + The following rules use the content of the ALLOWEDVALUES, SUGGESTEDVALUES, and PROHIBITEDVALUES sets to determine the values that populate a drop-down list. + +``` +If {set S} AND {set A} have no entries +        Result: Empty list +If {set S} has entries and {set A} has no entries +        Result: The values are obtained by subtracting {set P} from {set S} +If {set S} AND {set A} have entries +        Result: The list of values are obtained by: +                a. Intersecting {set A} with {set S} to get {intermediate set I} +                b. Subtracting {set P} from {intermediate set I} +If {set S} has no entries and {set A} has entries +        Result: The list of values are obtained by subtracting {set P} from {set A} +``` + +## Specify multiple lists + If you specify multiple `<ALLOWEDVALUE>` sets at a particular point in time (for example, a work item type-wide `<ALLOWEDVALUE>` set plus a state-scoped `<ALLOWEDVALUE>` set), the intersection of these multiple sets is used as the final set, {set A}. + + If you specify multiple `<SUGGESTEDVALUES>` sets or `<PROHIBITEDVALUES>` sets, the union of each of these multiple sets is taken as the final set, {set S} or {set P}, respectively. + +## Related notes +- [Define pick lists](define-pick-lists.md) +- [Expand list items and exclude groups from lists](expand-list-items-and-exclude-groups-from-lists.md) + + diff --git a/docs/work/reference/configure-network-adapter-automatically-adjust-speed.md b/docs/work/reference/configure-network-adapter-automatically-adjust-speed.md new file mode 100644 index 00000000000..3c25f730e9a --- /dev/null +++ b/docs/work/reference/configure-network-adapter-automatically-adjust-speed.md @@ -0,0 +1,52 @@ +--- +title: Configure a network adapter to automatically adjust speed | VSTS & TFS +description: Configure to automatically adjust the link speed of its network adapter - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 26b43d25-a60e-4d8d-b12b-890d152b0d14 +ms.author: kaelli +ms.manager: douge +ms.date: 02/22/2017 +--- + + +# Configure a network adapter to automatically adjust speed + +**TFS 2013** + +When a client computer is not configured to automatically adjust the link speed of its network adapter, some functions might take a long time to finish. Such functions include creating team projects, saving work items, or merging code changes. In some cases, these functions might never finish, and an error message might appear that contains the phrase "The underlying connection was closed." + +The speed with which a function finishes depends, in part, on the speed of the computer network. The configuration of network switches and your computers' network adapters can affect the network throughput. For example, "autosense mode" or "auto-negotiation" might be turned on, and information might be transmitted in either full-duplex mode or half-duplex mode. + +To minimize the time required for a function to finish, you should confirm that these settings are set appropriately for maximum throughput. For more information about how full-duplex mode differs from half-duplex mode, contact your network administrator. + + +**Required Permissions** + +To perform these procedures, you must be a member of the **Administrators** security group on your local computer. + +### To configure a computer to automatically adjust the link speed of its network adapter in Windows Server 2008 + +1. On the **Start** menu, click **Control Panel**. + +2. Click **Network and Internet**. + +3. Click **Network and Sharing Center**, and then click **Manage network connections**. + + The **Network Connections** folder opens. + +4. Right-click the relevant network connection (by default, **Local Area Connection**), and then click **Properties**. + + The **Local Area Connection Properties** dialog box opens. + +5. Click **Configure**. + + The properties dialog box for the adapter opens. + +6. Click the **Advanced** tab. + +7. In the **Property** list, click the property that corresponds to the connection type, such as **Connection Type**, **Duplex Mode**, **Media**, **Media Type**, or **Link Speed & Duplex**, depending on the adapter's attributes. + +8. In the **Value** list, click **Autosense**. + +9. Click **OK**. \ No newline at end of file diff --git a/docs/work/reference/control-xml-element-reference.md b/docs/work/reference/control-xml-element-reference.md new file mode 100644 index 00000000000..42b2c81b485 --- /dev/null +++ b/docs/work/reference/control-xml-element-reference.md @@ -0,0 +1,103 @@ +--- +title: Control XML element reference | VSTS & TFS +description: Use the control element to define a work item field, text, hyperlink, or other element to display in a work item form - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 5fe3a3ce-6dc5-4e58-9c20-2885f38c6f13 +ms.author: kaelli +ms.manager: douge +ms.date: 06/16/2017 +--- + +# Control XML element reference + +**TFS 2015 | TFS 2013** + +>[!IMPORTANT] +>This topic applies to team project customization for the On-premises XML process model and the old work item form. For the Hosted XML process model and TFS 2017 and later versions that use the new work item form, see [WebLayout and Control elements](weblayout-xml-elements.md). For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +You use the `Control` element to define a work item field, text, hyperlink, or other control element to display in a work item form. For examples of how to use this element, see [Specify work item form controls](specify-work-item-form-controls.md) and [Design the work item form](design-work-item-form.md). + + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<Control FieldName="FieldName" Type="AttachmentsControl | DateTimeControl | FieldControl | +HtmlFieldControl | LabelControl | LinksControl | WebpageControl | WorkItemClassificationControl | +WorkItemLogControl" ControlFontSize="FontSize" EmptyText="TextString" +Label="LabelText" LabelPosition="Top | Bottom | Left | Right" +Padding="(top, bottom, left, right)" +Margin="(top, bottom, left, right)" ReadOnly="True | False" MinimumSize="(width,height)" +Name="InstanceName" > +<LabelText> . . . </LabelText> +<Link> . . . </Link> +<LinksControlOptions> . . . </LinksControlOptions> +<WebpageControlOptions> . . . </WebpageControlOptions> +</Control> +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Attributes + +|Attribute|Description| +|---------------|-----------------| +|`FieldName`|Optional `Control` attribute.<br /><br /> Specifies the work item field with which the control is associated. The attribute type is `typelib:ReferenceFieldName`. Minimum length: 1; maximum length: 70.<br /><br /> Pattern value: ^[a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z0-9_]+)+$<br /><br /> Pattern value example: Company.Division.IssueType| +|`Type`|Required `Control` attribute.<br /><br /> Specifies the data type of the control. The attribute type is `ValidControlsType` Simple Type. Specify a string from one of the following built-in types:<br /><br /> - `AttachmentControl`: Use to display work item attachments. This control does not have an associated field or field type.<br />- `DateTimeControl`: Use to display formatted date fields with a field type of `DateTime`.<br />- `FieldControl`: Use to display plain text, numeric, boolean, or pick list fields with a field type of `Boolean`, `String`, `Identity`, `Integer`, `Double`, and `PlainText`. **Note**: For on-premises TFS, the Boolean data type requires that you upgrade to TFS 2017.2 or later version.<br />- `HtmlFieldControl`: Use to display multi-line, rich-text format of fields with a field type of `HTML`.<br />- `LabelControl`: Use to display text that is not associated with a field. The text can be plain or hyperlinked. You can specify additional controls using the `LabelText`, `Link` and `Text` elements. See [LabelText and Text](labeltext-and-text-xml-elements-reference.md) and [Link and Param](link-param-xml-elements-reference.md).<br />- `LinksControl`: Use to display the links control toolbar and manage link relationships between work items and storyboards. This control does not have an associated field or field type. You specify the types of links to filter and other control options using the `LinksControlOptions` element. See [LinksControlOptions](linkscontroloptions-xml-elements.md).<br />- `WebpageControl`: Use to display HTML-based content defined by a URI or embedded within a CDATA tag. This control does not have an associated field or field type. . You specify the content and links to display using the `WebpageControlOptions` element. See [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md).<br />- `WorkItemClassificationControl` Use to display the hierarchical path fields with a field type of `TreePath`. **Note:** The `System.AreaPath` and `System.IterationPath` fields are the only fields that use this data type. You cannot define a custom field using this data type.<br />- `WorkItemLogControl`: Use to display work item history information and fields with a field type of `History`. **Note:** The `System.History` field is the only field that uses this data type. You cannot define a custom field using this data type.<br /><br /> For more information, see [Specify work item form controls](specify-work-item-form-controls.md). **Note:** You can use a custom control by setting the `Type` attribute to a custom value. Any control whose `Type` value does not match the name of a built-in type is considered a custom control. For more information, see the Microsoft Web site: [Work Item Tracking Custom Controls](http://go.microsoft.com/fwlink/?LinkId=150556).| +|`ControlFontSize`|Optional `Control` attribute.<br /><br /> Specifies the font size of the field name or label on the form. Valid values of `FontSize`: `small`, `normal`, `large`, `xlarge`, and `xxlarge`.| +|`EmptyText`|Optional `Control` attribute.<br /><br /> Specifies a text string between 1 and 255 characters in length that appears when a field is empty.| +|`Label`|Optional `Control` attribute.<br /><br /> Specifies the visible text on the form that identifies the control. Specify a string of no more than 80 characters.| +|`LabelFontSize`|Specifies the font size of the label on the form. Valid values for `FontSize`: `small`, `normal`, `large`, `xlarge`, and `xxlarge`.| +|`LabelPosition`|Optional `Control` attribute.<br /><br /> Specifies the position of the label relative to the control data. Specify a string from one of the following values:<br /><br /> - `Top`: Places the label above the control data.<br />- `Bottom`: Places the label below the control data.<br />- `Left`: Places the label to the left of the control data.<br />- `Right`: Places the label to the right of the control data.| +|`Padding`|Optional `Control` attribute.<br /><br /> Specifies the amount of space in pixels around the inside border of the control which corresponds to the top, bottom, left, and right spaces. The attribute type is `SizeType`.<br /><br /> Pattern value: ^\\(\d+\\,\d+\\,\d+\\,\d+\\)$<br /><br /> Pattern value example: (2,0,2,0)| +|`Margin`|Optional `Control` attribute.<br /><br /> Specifies the amount of space in pixels around the outside border of the control which corresponds to the top, bottom, left, and right spaces. The attribute type is `SizeType`.<br /><br /> Pattern value: ^\\(\d+\\,\d+\\,\d+\\,\d+\\)$<br /><br /> Pattern value example: (2,0,2,0)| +|`ReadOnly`|Optional `Control` attribute.<br /><br /> Specifies that the field is read-only. The attribute type is `ReadOnlyType`. Specify a string from one of the following values:<br /><br /> - `True`: Specifies that the control data is read-only.<br />- `False`: Specifies that the control data is not read-only.| +|`MinimumSize`|Optional `Control` attribute.<br /><br /> Specifies the minimum size in pixels that the control should occupy in the form. The syntax is specified in (`width,height`). The attribute type is `SizeType`.<br /><br /> Pattern value: ^\\(\d+\\,\d+\\)$<br /><br /> Pattern value example: (100,100) **Note:** If you do not have sufficient vertical space, then a scrollbar appears to keep its minimum size. Without this attribute, the controls are drawn with their default sizes, unless controls in other tabs take more space. The overall size of any one form control depends on the size of the largest form area or tab.| +|`Name`|Optional `Control` attribute.<br /><br /> Identifies a control uniquely. The `Name` is important if more than one control on the form is associated with the same work item field. The attribute type is `xs:string`. **Note:** You use the `Name` attribute when you want to have the same field displayed in more than one location on the form. You specify a unique value for the `Name` attribute for both control entries so that the system identifies each control uniquely. It is useful to show the same control in various locations based on the context of tabs.| +|`NumberFormat`|Optional `Control` attribute that is valid only when it is used with `FieldControl`.<br /><br /> Specifies the characters that you can enter in the field control. Valid values that you can use are as follows:<br /><br /> - `WholeNumbers`: Specifies that whole numbers are allowed.<br />- `SignedWholeNumbers`: Specifies that signed whole numbers are allowed.<br />- `DecimalNumbers`: Specifies that decimal numbers are allowed.<br />- `SignedDecimalNumbers`: Specifies that signed decimal numbers are allowed.| +|`MaxLength`|Optional `Control` attribute that is valid only when it is used with `FieldControl`.<br /><br /> Specifies the maximum length of allowed characters for a field control. The attribute type is `xs:integer`.| +|`Format`|Optional `Control` attribute that is valid only when it is used with `DateTimeControl`.<br /><br /> Specifies the format for the date-time field corresponding to one of the values of the DateTimePickerFormat enum. Valid values that you can use are as follows:<br /><br /> - `Custom`: Displays the date/time value in a custom format. The Custom format can be set by specifying 'Custom' as the value for the Format attribute, and setting another attribute named CustomFormat with a custom format string. For example:<br /> Format="Custom"<br /> CustomFormat = "MMM dd, 'of the year' yyyy "<br /> For more information, see the Microsoft Web site: [DateTimePicker.CustomFormat Property](http://go.microsoft.com/fwlink/?LinkId=148757).<br />- `Long`: Displays the date/time value in the long date format set by the user's operating system.<br />- `Short`: Displays the date/time value in the short date format set by the user's operating system.<br />- `Time`: Displays the date/time value in the time format set by the user's operating system.<br /><br /> For more information, see the Microsoft Web site: [DateTimePickerFormat Enumeration](http://go.microsoft.com/fwlink/?LinkId=148760).| +|`CustomFormat`|Optional `Control` attribute that is valid only when it is used with `DateTimeControl` and the `Format` attribute.<br /><br /> Specifies the custom format for the date-time field corresponding to the syntax defined for the DateTimePicker.CustomFormat property. For more information, see the Microsoft Web site: [DateTimePicker.CustomFormat Property](http://go.microsoft.com/fwlink/?LinkId=148757).| + +### Child elements + +|Element|Description| +|-------------|-----------------| +|[LabelText](labeltext-and-text-xml-elements-reference.md)|Optional element. You can specify this element when the `Type` attribute is specified as `FieldControl` or `LabelControl`.<br /><br /> Container element for specifying the text, hyperlink, and position of a field or label whose text is partly associated with a hyperlink.<br /><br /> For more information, see [LabelText and Text](labeltext-and-text-xml-elements-reference.md) and [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md).| +|[Link](link-param-xml-elements-reference.md)|Optional element. You can specify this element when the `Type` attribute is specified as `FieldControl` or `LabelControl`.<br /><br /> Defines the hyperlink for a field or label.<br /><br /> For more information, see [Link and Param](link-param-xml-elements-reference.md) and [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md).| +|[LinksControlOptions](linkscontroloptions-xml-elements.md)|Optional element. You can specify this element when the `Type` attribute is specified as `LinksControl`.<br /><br /> Defines the link filters and layout of column fields to display the list of links.<br /><br /> For more information, see [Define link controls to restrict link relationships](define-link-controls.md).| +|[WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md)|Optional element. You can specify this element when the `Type` attribute is `WebpageControl`.<br /><br /> Specifies the controls that govern loading the Web page target in the work item form.<br /><br /> For more information, see [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md) and [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md).| +|`anyAttribute`|Optional element.<br /><br /> Optional. `Control` is extensible through use of the `anyAttribute` element.| + +### Parent elements + +|Element|Description| +|-------------|-----------------| +|[Layout](layout-xml-element-reference.md)|Required. Defines how to display the elements on the work item form.| +|[Column](all-form-xml-elements-reference.md) |Required. Defines columns for the form.| +|[Tab](all-form-xml-elements-reference.md) |Required. Defines a tab for the form.| + +## Remarks +`Control` is an optional child element of `Layout`, `Column`, and `Tab`. + +To implement a custom control, you must specify the name of the control for the `Type` attribute. For more information, see the Microsoft Web site: [Work item tracking custom controls](http://go.microsoft.com/fwlink/?LinkId=150556). + +For an example of each control type, see [Specify work item form controls](specify-work-item-form-controls.md). + +## Example + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Type=" WorkItemClassificationControl " FieldName="System.AreaPath" + Label="Area" LabelPosition="Left" Padding="(2,0,2,0)" Margin="(2,2,2,2)" /> +``` + +## Related notes + +- [All FORM elements](all-form-xml-elements-reference.md) +- [Specify work item form controls](specify-work-item-form-controls.md) +- [Naming restrictions, Work item tracking objects](../../reference/naming-restrictions.md) \ No newline at end of file diff --git a/docs/work/reference/customize-project-field-mapping-file.md b/docs/work/reference/customize-project-field-mapping-file.md new file mode 100644 index 00000000000..fee7c631073 --- /dev/null +++ b/docs/work/reference/customize-project-field-mapping-file.md @@ -0,0 +1,167 @@ +--- +title: Customize the Project field mapping file | TFS +description: Change how specific fields are published from Project to Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: b10f8b41-b790-4793-bfe7-a64f935b20fc +ms.author: kaelli +ms.manager: douge +ms.date: 09/08/2017 +--- + + +# Customize the Microsoft Project field mapping file + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can customize how work item fields that are defined in Team Foundation map to fields in Microsoft Project, and you can change how specific fields are published. Microsoft Project includes predefined fields, such as Task Name, and custom fields. When you publish or refresh work item data in Microsoft Project, the field map determines which fields in the work item database match the fields in Microsoft Project. + + For information on using Project and TFS to track work, see [Create your backlog and tasks using Project](../office/create-your-backlog-tasks-using-project.md). + + To modify the field mappings for a team project, you [export and then import the Microsoft Project Mapping File using the TFSFieldMapping command line tool](upload-or-download-the-microsoft-project-mapping-file.md). + +<a name="FieldMappings"></a> +##Mapping element + To specify a mapping between a work item field and a project column, you use the `Mapping` element. + + You use the following XML syntax to specify a mapping between a work item type field and an Microsoft Project field. The `Mapping` element is then used to specify a field mapping. + +> [!div class="tabbedCodeSnippets"] +```XML +<Mapping WorkItemTrackingFieldReferenceName="" + ProjectField="" + ProjectName="" + ProjectUnits="" + PublishOnly=""> + IfSummaryRefreshOnly=""/> +``` + +### Attributes + The following table describes the attributes that can be used with the `Mapping` element. + +|**Attribute**|**Description**| +|-------------------|---------------------| +|WorkItemTrackingFieldReferenceName|Required. Specifies the reference name of a field in a work item type.| +|ProjectField|Required. Specifies the name of a field in Microsoft Project. Specify predefined field names by prefixing "pj" to the name, such as pjTaskName for the Task Name column. Specify custom fields as pjTaskText followed by a number, such as pjTaskText11.| +|ProjectName|Optional. Specifies the name to appear as the column name in Microsoft Project. If you do not specify this attribute, the field name of the work item type is used.| +|ProjectUnits|Optional. Specifies the type of units to use when you map a field type to Microsoft Project. You can specify the following values: `pjMinute`, `pjHour`, `pjDay`, `pjWeek`, and `pjMonthUnit`. **Note:** You can specify ProjectUnits only for fields that specify time duration or other time units.| +|PublishOnly|Optional. If set to `true`, indicates that the field is published to the work item database but is not refreshed. This value is typically used for calculated fields that should not be updated in Team Explorer. If set to `false`, indicates that the field is both published and refreshed. The default value is `false`.<br /><br /> In the default mapping file, the two fields whose **PublishOnly** attribute is set to `true` are the **Start Date** and **Finish Date**.| +|IfSummaryRefreshOnly|Optional. If set to `true`, indicates that the field is never published to the work item database but is refreshed from the work item database when the following are also true:<br /><br /> - The row for the field is a summary task in Office Project.<br />- The summary task has the Publish and Refresh values set to `Yes`.<br />- The summary task contains at least one child task that is bound to Team Foundation Server.<br /><br /> Any updates or calculations that Microsoft Project makes can overwrite the value that is refreshed from the work item database in the project plan. However, the modified value is never saved to the work item database. This attribute is typically used for summary fields that, if published to the work item database, lead to data inconsistencies.<br /><br /> If set to `false`, indicates that the field may be both published and refreshed. The default value when not specified is `false`. **Note:** The value that is assigned to the `IfSummaryRefreshOnly` attribute supersedes the value that is assigned to `PublishOnly`. For more information, see [Fields that Affect Publishing and Refreshing](#PublishRefresh) later in this topic. <br /><br /> In the default mapping file, the **IfSummaryRefreshOnly** attribute is set to `true` for the **Original Estimate**, **Remaining Work**, and **Completed Work** fields.| + + The following example shows how to map the work item type field that contains the title to the task name Microsoft Project field: + + +> [!div class="tabbedCodeSnippets"] +```XML +<Mapping WorkItemTrackingFieldReferenceName="System.Title" + ProjectField="pjTaskName"/> +``` + + The following XML syntax shows a more complex example of how to map the work item type field that has the start date to the start date Microsoft Project field. Because the field is calculated, it is specified to publish and not refresh in order to prevent errors from being introduced by Team Explorer updates. + + +> [!div class="tabbedCodeSnippets"] +```XML +<Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.StartDate" ProjectField="pjTaskStart" PublishOnly="true"/> +``` + +> [!NOTE] +> As a best practice, you should map calculated fields in Project to read-only fields in Team Foundation. This helps avoid confusion so that team members do not try to change calculated fields. + +<a name="Reserved"></a> +##ReservedField element + The `ReservedField` element works to support hierarchical links defined between tasks and is an optional element. + + If this element is not specified in the mapping, then Microsoft Project uses the default `pjNumber20` field. + +<a name="Synchronization"></a> +## SyncField element + The synchronization field enables you to control the publish and refresh behavior of each task. The field displays as a column with the title **Publish and Refresh** when you use the **Team System Task Sheet** view. + + You must specify a synchronization field in the Microsoft Project field mapping file. Use the following XML syntax to specify which field is the synchronization field. To specify a synchronization field, use the `SyncField` element. The `ProjectField` attribute must be set to a valid Office Project field. + +> [!div class="tabbedCodeSnippets"] +```XML +<SyncField ProjectField="" /> +``` + + The following example shows how to specify **pjTaskText25** as the synchronization field: + +> [!div class="tabbedCodeSnippets"] +```XML +<SyncField ProjectField="pjTaskText25" /> +``` + +For more information about how to use the synchronization field in Project, see [Create your backlog and tasks using Project](../office/create-your-backlog-tasks-using-project.md). + +## <a name="ResourceNameSeparator"></a> ResourceNameSeparator Element + You can use the `ResourceNameSeparator` to define the character that will distinguish resource names that are in a string. Team Foundation users and resources are synchronized with the users of the Active Directory directory service. The names for users and resources may include a delimiter, such as a comma, to separate the last name, first name, and middle initial of a resource. + + This is an optional element. If this element is not specified in the mapping, then Microsoft Project separates resource names by using the default mappings that are defined in the following table: + +|If Active Directory and the team project list separator is|Then in Office Project replace with| +|----------------------------------------------------------------|-----------------------------------------| +|,|;| +|;|:| +|.|:| + + If you want to specify a different character than those listed in the above table, then you can define the `ResourceNameSeparator` by using the following syntax: + +> [!div class="tabbedCodeSnippets"] +```XML +<ResourceNameSeparator WorkItemTrackingCharacter="" ProjectCharacter=""/> +``` + + The following example shows how to specify the character "**\***" as the separator to use in Office Project when the Team Foundation character is "**-**": + +> [!div class="tabbedCodeSnippets"] +```XML +<ResourceNameSeparator WorkItemTrackingCharacter="-" ProjectCharacter="*"/> +``` +<a name="Hierarchy"></a> +## Hierarchy link type + When you create summary tasks in Project, a tree link is created between the summary task, the parent, and the subordinate or child tasks. Office Project uses the default System.LinkTypes.Hierarchy to create these links. + +<a name="Dependency"></a> +## Dependency link type + When you create links between tasks in Microsoft Project, you create a dependent link between the tasks. The predecessor task is assigned a Predecessor link and the successor task is assigned a Successor link. These are the default designations that are defined for the System.LinkTypes.Dependency link type. + +<a name="PublishRefresh"></a> +##Mapping attributes that affect publishing and refreshing + The following mapping fields and Microsoft Project field values determine whether a value for a work item is published or refreshed: + +- The value of the **Publish and Refresh** value for each work item. +- The value of the **PublishOnly** attribute for a specific mapping field. +- The value of the **IfSummaryRefreshOnly** for a specific mapping field. +- The classification of the task as a summary or parent task. + + A parent task is a task that has at least one child task that is published to Team Foundation Server. + +**For work items that are not summary tasks** + +The following table indicates whether a work item that is not a summary or parent task is published or refreshed based on the mapping field attributes and the assignment that is made to the **Publish and Refresh** value of the item. + +|Publish and Refresh<br />(task level)|PublishOnly attribute|Field is Published?|Field is Refreshed?| +|--------------------------------------------|---------------------------|-------------------------|-------------------------| +|No|True or False|No|No| +|Refresh Only|True or False|No|Yes| +|Yes|True|Yes|No| +|Yes|False|Yes|Yes| + + **For work items that are summary tasks** + + If the summary task criteria are met and **IfSummaryRefreshOnly** is `true`, its value supersedes the **PublishOnly** value. The following table indicates whether a summary or parent task is published or refreshed based on the assignment that is made to its **Publish and Refresh** value and the mapping field attributes. + +|Publish and Refresh<br />(task level)|PublishOnly Attribute|IfSummaryRefreshOnly<br />Attribute|Field is Published?|Field is Refreshed?| +|--------------------------------------------|---------------------------|----------------------------------------|-------------------------|-------------------------| +|No|True or False|True or False|No|No| +|Refresh Only|True|True|No|Yes| +|Refresh Only|True|False|No|Yes| +|Refresh Only|False|True or False|No|Yes| +|Yes|True or False|True|No|Yes| +|Yes|True|False|Yes|No| +|Yes|False|False|Yes|Yes| + +## Related notes +- [LinkTypes](link-type-element-reference.md) +- [Add or change Project-to-TFS field mapping](add-or-change-how-project-fields-map-to-tfs-fields.md) \ No newline at end of file diff --git a/docs/work/reference/define-custom-link-type.md b/docs/work/reference/define-custom-link-type.md new file mode 100644 index 00000000000..3c65bfc86e1 --- /dev/null +++ b/docs/work/reference/define-custom-link-type.md @@ -0,0 +1,44 @@ +--- +title: Define a custom link type | VSTS & TFS +description: Add a custom link type to meet your project tracking requirements - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 0d0d51f7-b8d0-4e5d-82b9-766ee12690ba +ms.author: kaelli +ms.manager: douge +ms.date: 02/10/2017 +--- + +# Define a custom link type + + +<b> TFS 2017 | TFS 2015 </b> + +>[!IMPORTANT] +>This topic applies to team project customization for On-premises XML process models. Custom link types are not supported for Hosted XML or Inheritance process models. For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + + +You can customize an existing link type or create a link type to meet your project tracking requirements. You use a link type to define the link labels, topology type, and restrictions that are used when creating relationships between work items. You can customize an existing link type or create a link type to meet your project tracking requirements. + +Before you start to add or modify a link type, you should assess the link types available and how they are used in your team project. See [Manage dependencies, link work items](../track/link-work-items-support-traceability.md). + +> [!NOTE] +> You cannot customize the system-defined link types that correspond to the Related, Parent-Child, and Successor-Predecessor links. + +You may want to modify or create a link type for one of the following reasons: + +- Change the link labels that are used to match your team's naming conventions. +- Add a link type to track a particular relationship that is unique to your team's process. + + +The link type is specified in a type definition XML file that you import to a team project collection. See [LinkTypes](link-type-element-reference.md). + +With the `witadmin` command-line utility, you can deactivate, delete, export, import, list, and reactivate link types. See [Manage link types](witadmin/manage-link-types.md). + +Links are added through the work item form, which contains the links control. See [Link controls, restrictions, and fields](../track/linking-attachments.md). + +In addition to defining link types, you can customize the work item type definition to accept or prohibit specific links based on link type. You use the `LinksControlOptions` element to define the options that control what links can be added to a work item and to which work item types. Also, you can specify the default columns that you want to appear for the list of links in a work item. For more information, see [Define link controls to restrict link relationships](define-link-controls.md). + +## Related notes +- [Link work items to track dependencies](../track/link-work-items-support-traceability.md) +- [Customize your work tracking experience](../customize/customize-work.md) \ No newline at end of file diff --git a/docs/work/reference/define-default-copy-value-field.md b/docs/work/reference/define-default-copy-value-field.md new file mode 100644 index 00000000000..6b9d780fb6e --- /dev/null +++ b/docs/work/reference/define-default-copy-value-field.md @@ -0,0 +1,120 @@ +--- +title: Define default value or copy a value | VSTS & TFS +description: Syntax and usage for the COPY, DEFAULT, and SERVERDEFAULT elements +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 35c3fcdb-8399-406d-bb8b-179bb543c9ba +ms.author: kaelli +ms.manager: douge +ms.date: 04/05/2017 +--- + +# Define a default value or copy a value to a field + + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + + +You can specify a default value for a field, or you can copy the value from another field or system-defined value. Field defaults are rules that control how field values are automatically assigned. You can assign a field default by using one of the following elements: `COPY`, `DEFAULT`, and `SERVERDEFAULT`. You can specify these elements as child elements of the `FIELD` (Definition) element or the `FIELD` (Workflow) element. + + You add these elements to the definition for a work item type (WIT). To learn more, see [Modify or add a custom work item type](../customize/add-modify-wit.md). + + The `COPY` and `DEFAULT` elements fill in values at the start of editing, but the `SERVERDEFAULT` rule fills in a value when the work item is committed to the database. This action occurs when a user saves changes to a work item, and the user cannot override the value. Such fields usually appear as read-only on the work item form. The `SERVERDEFAULT` rule is used for fields such as "Last Changed By" and "Last Changed On" to support secure audit trails. + +## <a name="Syntax"></a> Syntax + You can use the `COPY`, `DEFAULT`, and `SERVERDEFAULT` elements to copy a value from one field to another, copy a server value into a field, or specify a default value to be defined for a field. + +> [!NOTE] +> If the work item is being changed, the **COPY** or **DEFAULT** elements rule may select either the current or previous value from the source field. + +- You can specify a value to copy from another field, the value of the clock, or the name of the current user. If you specify `value` or `field` for the `from` attribute, you must specify the `value` or `field` attribute. When a user changes or creates a work item, the `COPY` rule fills in a field value regardless of any value that is already in the field. + + > [!div class="tabbedCodeSnippets"] + ```XML + <COPY for="userGroupName" not="userGroupName" from="value | field | clock | currentuser" value="valueToCopy" field="fieldReferenceName/> + ``` + +- You can specify a default value for a field by using the **DEFAULT** rule. When a user creates or edits a work item, the **DEFAULT** rule fills in a value if that field is empty. You can specify a value to copy from another field, the date-time stamp that the server clock records, or the name of the current user. If a field already has a value, this rule is ignored. + + > [!div class="tabbedCodeSnippets"] + ```XML + <DEFAULT for="userGroupName" not="userGroupName" from="value | field | clock | currentuser" value="defaultValue" field="fieldReferenceName" /> + ``` + +- You can specify a value to copy from the server into a field when the work item is saved. When a user changes the state of a work item, the `SERVERDEFAULT` rule specifies a value to be copied into the current field from a value that is derived from a server component. The `DEFAULT` and `COPY` elements fill in values when a user opens a work item to modify it, but the `SERVERDEFAULT` rule fills in a value when the work item is committed to the database. This action occurs when the user saves the work item. The user cannot override the value. These fields usually appear as read-only on the form. The `SERVERDEFAULT` rule is used for fields such as "Last Changed By" and "Last Changed On" to support secure audit trails. + + > [!div class="tabbedCodeSnippets"] + ```XML + <SERVERDEFAULT for="userGroupName" not="userGroupName" from="clock | currentuser" /> + ``` + + Each of these rule elements specifies a `from`="*fromType*" attribute that identifies the source of the value. Depending on the *fromType* value, additional attributes may be required. The following table describes all of the attributes that the `COPY`, `DEFAULT`, and `SERVERDEFAULT` rule elements reference. + +|Attribute|Description| +|---------------|-----------------| +|`for`|Optional. Specifies the name of a user or group in Team Foundation to whom the rule applies. Valid names consist of a string of text that contains between 1 and 255 characters.<br /><br /> Pattern value: ^[^\\\\]+\\\\[^\\\\]+$<br /><br /> Pattern value example: *Domain*\\*UserID*| +|`not`|Optional. Specifies the name of a user or group in Team Foundation to whom the rule does not apply. Valid names consist of a string of text that contains between 1 and 255 characters.<br /><br /> Pattern value: ^[^\\\\]+\\\\[^\\\\]+$<br /><br /> Pattern value example: *Domain*\\*UserID*| +|`from`|Required. Specifies whether to copy the default value from the `value` attribute, the `field` attribute, the system clock, or the current user. If you specify `value` or `field` for the `from` attribute, you must specify the `value` or `field` attribute, respectively. You can specify the following values:<br /><br /> - `clock`: Copies the time from the system clock. Uses the current date and time as the value. No additional attributes are required. For the **COPY** and **DEFAULT** rules, the value is taken from the local computer clock. For the **SERVERDEFAULT** rule, the value is taken from the server clock at commit time. Valid only for DateTime fields.<br />- `currentuser`: Copies name of the user who is logged on. Use the short user name of the current user as the value. No additional attributes are required. Valid only for string fields.<br />- `field`: Copies the value that is defined for the `field` attribute that you specify. Requires a `field="abc"` attribute. By default, if the specified "from" field is empty, nothing is performed. The `field` attribute is used only for the **COPY** and **DEFAULT** rules.<br />- `value`: Copies the value of the specified `value` attribute.| +|`value`|Optional. Specifies the value to be copied into the field when `value` is specified for the `from` attribute. Valid values consist of a string of text that contains between 1 and 255 characters.<br /><br /> The value to copy can be empty.| +|`field`|Optional. Specifies the name of the field whose value is to be copied into the field when `field` is specified for the `from` attribute. You must define this attribute if the `from` attribute has "field" as its value.<br /><br /> The reference name of the field to copy. The reference name must match the reference name as defined in the `FIELD` (Definition) element. For more information, see [FIELD (Definition) element reference](field-definition-element-reference.md).<br /><br /> Pattern value: ^[a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z0-9_]+)+$<br /><br /> Pattern value example: Company.Division.IssueType| + + + +## <a name="DefineDefault"></a> Define a default value + The following example sets P3 as the default for the Priority field. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="MyCorp.Priority" name="Priority" type="String"> +<HELPTEXT>Specify the severity of the problem</HELPTEXT> +    <ALLOWEDVALUES> +        <LISTITEM value="P1"/> +        <LISTITEM value="P2"/> +        <LISTITEM value="P3"/> +    </ALLOWEDVALUES> +<DEFAULT from="value" value="P3"/> +</FIELD> +``` + +## <a name="ClearField"></a> Clear a field automatically + In the following example, the status field is cleared. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="MyCorp.Status" name="Status" type="String"> +    <COPY from="value" value="" /> +</FIELD> +``` + +## <a name="SaveValue"></a> Save a field value + In the following example, the name of the user who changed a work item most recently is saved. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="System.Last Changed By" name="Last Changed By" type="String"> +    <HELPTEXT>The name of the user who most recently modified this bug</HELPTEXT> +    <VALIDUSER group="[Project]\MyProjectMembers" /> +    <SERVERDEFAULT from="currentuser" /> +</FIELD> +``` + +## <a name="Clock"></a> Specify the clock as a default + In the following example, the value of a field uses the current date but users can change that value. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="MyCorp.FoundOn" name="Found On" type="DateTime"> +    <HELPTEXT>Defines when a bug was found.</HELPTEXT> +    <DEFAULT from="clock" /> +</FIELD> +``` + +> [!NOTE] +> For values that contain an apostrophe, such as "Won't Fix", you must use double quotation marks in the XML, as the following example shows: +> +> `<LISTITEM value="Won't Fix"/>` + +## Related notes +- [All FIELD elements](all-field-xml-elements-reference.md) +- [Apply a field rule](apply-rule-work-item-field.md) +- [Modify a field or add a custom field](../customize/add-modify-field.md) \ No newline at end of file diff --git a/docs/work/reference/define-global-lists.md b/docs/work/reference/define-global-lists.md new file mode 100644 index 00000000000..3cb7364ab03 --- /dev/null +++ b/docs/work/reference/define-global-lists.md @@ -0,0 +1,171 @@ +--- +title: Define global lists | TFS +description: Syntax and usage for the GLOBALLIST elements for defining pick lists used across several team projects and work item types +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: b113865c-c68f-48fa-a467-4a94a8445078 +author: kaelli +ms.author: kaelli +ms.manager: douge +ms.date: 05/23/2017 +--- + + + +# Define global lists + +<b>VSTS (Hosted XML) | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013</b> + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML process models. Hosted XML customization supports adding and updating global lists with a process update. To learn more, see [Differences between VSTS and TFS process template customizations](../import-process/differences.md). +> +>The Inheritance process model doesn't support global lists. For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +By using global lists, you can minimize the work that is required to update a list that appears in the definitions of several work item types (WITs). Global lists are pick lists that you can include within one or more fields and WIT definitions. + +You can share list items among several WITs for a collection by including the list items in one or more `GLOBALLIST` elements. + + As you define WITs, you might find that some fields share the same values. Frequently, you can share across several WITs and even across several team projects. Some of these values, such as the build number of nightly builds, change frequently, which requires an administrator to frequently update these lists in many locations. Global lists can be especially useful when a list must be derived from an external system. For example, suppose a company maintains a separate customer database. When you file a bug that a customer discovered, the customer's name is entered into a custom `Found By Customer` field. + + You can manage global lists for a collection as an XML file that you can list, import, export, and delete. The name of each global list can have up to 254 Unicode characters and must be unique within a collection. + +>[!NOTE] +>There are no system-defined nor predefined global lists specified in the default processes or process templates provides. + +**Requirements** + +For the team project collection where the global lists are defined, you must have the following permissions set: + +- To export or list global lists, you must be a member of the **Project Collection Valid Users** group or have your **View collection-level information** permission set to **Allow**. + +- To import global lists, you must be a member of the **Project Collection Administrators** security group. + +To add or modify a global list, use the **witadmin** command-line tool to import and export the definition for global lists. See [Manage global lists](witadmin/manage-global-lists-for-work-item-types.md). To use a global list, add it to the `FIELD` definition within a work item type. See [All FIELD elements](field-definition-element-reference.md). + +<a name="add-manage"></a> +## Add and manage global lists + +A global list is a set of `LISTITEM` elements that is stored and used globally by all team projects in a collection. Global lists are useful for fields that are defined within several types of work items, such as Operating System, Found in Build, and Fixed in Build. + +You can define one or more global lists and their items by using one of the following methods in the following ways based on the process model you use: +- Within a WIT XML definition that you add to a team project or process template (Hosted XML and On-premises XML) +- Within a global list XML definition file that you import to a team project collection (On-premises XML) +- Within a [global workflow XML definition file](global-workflow-xml-element-reference.md) that you import to a team project collection (On-premises XML). + + +>[!NOTE] +>For the Hosted XML process model, the following limits are placed on global list import: +>- Total of 64 global lists +>- Total of 512 items per list +>- Approximately 10K items can be defined total within all global lists specified across all WITs. + + +<a name="SyntaxDefine"></a> + +## Syntax structure + +The following table describes the **GLOBALLIST** and **LISTITEM** elements. You can use these elements to enumerate a list of values that is presented to the user as a pick list or drop-down menu of items. + +<table width="80%"> +<thead> +<tr> +<th width="15%"><p>Element</p></th> +<th width="95%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>GLOBALLIST</strong></p></td> +<td><p>Defines a set of **LISTITEM** elements that are stored for a collection and that all team projects in a collection can use.</p> + +<code> +<GLOBALLIST name="globalListName"> + <LISTITEM> . . . </LISTITEM> +</GLOBALLIST> +</code> + +<p>*globalListName*: A string of text that contains between 1 and 255 characters.</p> +<p>**GLOBALLIST** is a required child element of the **GLOBALLISTS** element and an optional child element of the `ALLOWEDVALUES`, `SUGGESTEDVALUES`, and `PROHIBITEDVALUES` elements. For more information, see [ALLOWEDVALUES, SUGGESTEDVALUES, and PROHIBITEDVALUES XML elements](define-pick-lists.md).</p> + +</td> +</tr> +<tr> +<td><p><strong>LISTITEM</strong></p></td> +<td><p>Defines a valid list value. Global lists must not include project-scoped groups because they are not scoped to a project.</p> + +<code><LISTITEM value="Name" /> +</code> + +<p>**LISTITEM** is a required child element of **GLOBALLIST** and an optional child element of the `ALLOWEDVALUES`, `SUGGESTEDVALUES`, and `PROHIBITEDVALUES` elements.</p> + +</td> +</tr> +</tbody> +</table> + +<a name="SyntaxWITD"></a> + +##Sample global list + + By adding the following syntax, you can define a global list within an XML definition file for a type of work item or a global workflow: + +> [!div class="tabbedCodeSnippets"] +```XML +<GLOBALLISTS> +    <GLOBALLIST name="name of global list"> +        <LISTITEM value="List item 1" /> +        <LISTITEM value="List item 2" /> +        <LISTITEM value="List item 3" /> +        <LISTITEM value="List item 4" /> +        . . . +        <LISTITEM value="List item n" /> +    </GLOBALLIST> +</GLOBALLISTS> +``` + + By using the following syntax, you can reference a global list within an XML definition file for a type of work item: + +> [!div class="tabbedCodeSnippets"] +```XML +<GLOBALLISTS> +   <GLOBALLIST name=" name of global list 1" /> +   <GLOBALLIST name=" name of global list 2" /> +   . . . +   <GLOBALLIST name=" name of global list n" /> +</GLOBALLISTS> +``` + +For information about the structure and location of definition files for types of work items or global workflow, see [All WITD elements](all-witd-xml-elements-reference.md) or [GLOBALWORKFLOW](global-workflow-xml-element-reference.md), respectively. + +<a name="project-collection"></a> +## Sample global list maintained for a project collection + +To add a global list to a project collection, you can import the following syntax by using the **witadmin importgloballist** command: + +> [!div class="tabbedCodeSnippets"] +```XML +<gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2008/workitemtracking/globallists"> +    <GLOBALLIST name="NameOfGlobalList"> +        <LISTITEM value="ListItem1" /> +        <LISTITEM value="ListItem2" /> +        <LISTITEM value="ListItem3" /> +        <LISTITEM value="ListItem4" /> +        . . . +        <LISTITEM value="ListItemN" /> +    </GLOBALLIST> +</gl:GLOBALLISTS> +``` + + A global list cannot be empty. Each `GLOBALLIST` element must have at least one `LISTITEM` element defined. + +## Related notes + +- [Manage global lists](witadmin/manage-global-lists-for-work-item-types.md) +- [Customize work tracking](../customize/customize-work.md) + +### Are any global lists auto-populated with data? +Yes for on-premises TFS. The global list named **Builds**–*TeamProjectName* gets appended each time a build is run. Over time, the list can become very long. Best practice is to routinely remove unused items from the list. + +To learn more about using this list, see [Query based on build and test integration fields](../track/build-test-integration.md). + + diff --git a/docs/work/reference/define-link-controls.md b/docs/work/reference/define-link-controls.md new file mode 100644 index 00000000000..e9f0bc9fb9e --- /dev/null +++ b/docs/work/reference/define-link-controls.md @@ -0,0 +1,208 @@ +--- +title: Define link controls, restrict link relationships | VSTS & TFS +description: Controls and restrict the link relationships that the team members can view and make from that control to include only links to other features - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 994c90ad-e61c-41ca-ae78-96fdb59c7312 +ms.manager: douge +ms.author: kaelli +ms.date: 02/14/2017 +--- + +# Define link controls to restrict link relationships + +<b>TFS 2017 (Hosted XML) | TFS 2015 | TFS 2013</b> + +>[!IMPORTANT] +>This topic applies to team project customization for the On-premises XML process model. For the Hosted XML process model, see [LinksControlOptions XML elements](linkscontroloptions-xml-elements.md). (Customizing the link controls isn't a supported feature For the Inheritance process model.) +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +You can control which work items link to each other by customizing the work form. Specifically, you can control the types of links and work items that users can view and add in a links control. For example, you may want to add a tab to your form that helps you manage dependent features. On that tab, you can add the links control and restrict the link relationships that team members can view and make from that control to include only links to other features. + +You use the `Control` element `LinksControl``Type` attribute to enable users to create link relationships between work items and other objects in the Team Foundation database. You can then use the `LinksControlOptions` child elements to define the options for controlling what links team members can add to a work item and to what work item types or objects they can link. Also, you can define the default columns that you want to appear for the list of links in that control. + +For a summary of the link restrictions that are defined within the process templates, see: +- For TFS 2017 and later versions, see [LinksControlOptions XML elements (Web form)](linkscontroloptions-xml-elements.md) +- For TFS 2015 and earlier versions, see [LinksControlOptions XML elements (Client and web, TFS 2015)](linkscontroloptions-elements.md). + + +<a name="LinksControl"></a> +## Specify the LinksControl + You use the `LinksControl` option to enable users to add, view, and manage link relationships in a work item form. By using this control, you can open, edit, add, and remove links. + + You can customize a form so that one tab displays only parent and child links and another tab displays all other link types. In the following example, a tab that is labeled "All Links" is created that team members can use to add all link types. Also, the default columns that appear for the links display are ID, Work Item Type, Title, Assigned To, State, and the Link Comment field. + +**Links control** + + ![Example of links control added to a work item form](_img/wit_ss_linkscontrol.png "WIT_SS_LinksControl") + + +``` +<Tab Label="All Links"> +   <Control Type="LinksControl" Name="All" > +      <LinksControlOptions> +         <LinkColumns> +            <LinkColumn RefName="System.ID" /> +            <LinkColumn RefName="System.WorkItemType" /> +            <LinkColumn RefName="System.Title" /> +            <LinkColumn RefName="System.AssignedTo" /> +            <LinkColumn RefName="System.State" /> +            <LinkColumn LinkAttribute="System.Links.Comment" /> +         </LinkColumns> +      </LinksControlOptions> +   </Control> +</Tab> +``` + +<a name="ControllingLinks"></a> +## Control link relationships +When you add a link control to a work item form, you can specify filters that restrict the types of links and work items that team members can add when they use the control. The following table describes the optional child elements that control link relationships. + +|Element|Description| +|-------------|-----------------| +|`WorkItemLinkFilters`|Restricts the types of links that can be used to link to work items.| +|`ExternalLinkFilters`|Restricts the types of links that can be used to link to an object that is not a work item type, such as a changeset, hyperlink, or version control item.| +|`WorkItemTypeFilters`|Restricts the types of work items to which a user can link, and the team projects in which those work items are defined.| +|`Filter`|Specifies the link types or work item types that you want to include or exclude.| + + +## <a name="WILinks"></a> Restricting Link Relationships to Work Items + You use the `WorkItemLinkFilters` and the `Filter` child elements to define which link types the links control should include or exclude. You use this element to restrict the types of links that can be selected by the links control to form relationships to work items that are defined in the same project. The syntax for these elements is as follows. + +``` +<WorkItemLinkFilters FilterType="include | exclude | includeAll | excludeAll"> +   <Filter LinkType="linkTypeRefName" FilterOn="reversename | forwardname" /> +</WorkItemLinkFilters> +``` + +|Attribute|Description| +|---------------|-----------------| +|`FilterType`|Required `WorkItemLinkFilters` attribute.<br /><br /> Defines the method that is used to filter the set of link types that is provided in the set of `Filter` elements. You can use the following valid values:<br /><br /> - `exclude`: Use to prevent the creation of links from those link types that are listed in the `Filter` elements.<br />- `excludeAll`: Use to disallow all link types.<br />- `include`: Use to allow only those link types that are listed in the `Filter` elements.<br />- `includeAll`: Use to allow the creation of links from all link types.| +|`LinkType`|Required `Filter` attribute.<br /><br /> Specifies the reference name for a type of link. For more information, see [LinksControlOptions](linkscontroloptions-xml-elements.md).| +|`FilterOn`|Optional `Filter` attribute.<br /><br /> Specifies the type of filter to apply to the link type. You can use the following valid values:<br /><br /> - `forwardname`: Use to filter on the forward name that is defined for a type of link.<br />- `reversename`: Use to filter on the reverse name that is defined for a type of link.<br /><br /> If unspecified, both the forward and reverse names are used to filter the link type. If the link type topology is Network, the forward and reverse names are the same. For more information, see [LinksControlOptions](linkscontroloptions-xml-elements.md).| + + **Example: Excluding Two Work Item Link Types** + + You can define a links control that allows link relationships for all link types except a custom requirement link type and the system hierarchy link type by using the following code example. + +``` +<Control Type="LinksControl" Name="UniqueName"> +   <LinksControlOptions> +      <WorkItemLinkFilters FilterType="exclude"> +         <Filter LinkType="MyLinks.LinkTypes.Requirement" /> +         <Filter LinkType="System.LinkTypes.Hierarchy" /> +      </WorkItemLinkFilters> +      <ExternalLinkFilters FilterType="excludeAll" /> +   </LinksControlOptions> +. . . +</Control> +``` + +<a name="NonWILinks"></a> +## Restrict link relationships to external objects (not work items) + You use the `ExternalLinkFilters` and the `Filter` child elements to define which link types to items that are external to the team project the links control should include or exclude. These objects correpond to changesets, hyperlinks, commits, and other objects. The syntax for these elements is as follows. + +``` +<ExternalLinkFilters FilterType="include | exclude | includeAll | excludeAll"> +   <Filter LinkType="externalLinkName" /> +</ExternalLinkFilters> +``` + +|Attribute|Description| +|---------------|-----------------| +|`FilterType`|Optional `ExternalLinkFilters` attribute.<br /><br /> Defines the method that is used to filter the set of link types that are provided in the set of `Filter` elements. You can use the following valid values:<br /><br /> - `exclude`: Use to disallow the creation of links from those link types that are listed in the `Filter` elements.<br />- `excludeAll`: Use to disallow all link types.<br />- `include`: Use to allow only those link types that are listed in the `Filter` elements.<br />- `includeAll`: Use to allow the creation of links from all link types.<br /><br /> If unspecified, all links to external work items are excluded.| +|`LinkType`|Required `Filter` attribute.<br /><br /> Specifies the reference name for a type of link to exclude or include. You can specify the following link types:<br /><br /> - Fixed in Changeset<br />- Result Attachment<br />- Source Code File<br />- Test Result<br />- Workitem Hyperlink| + + **Example: Exclude All Non-Work Item Links** + + The following example defines a links control that includes all link types to work items, such as related and parent/child, but excludes link types to non-work items, such as changesets, hyperlinks, and test results. + +``` +<Control Type="LinksControl" Name="UniqueName"> +   <LinksControlOptions> +      <WorkItemLinkFilters FilterType="includeAll" /> +      <ExternalLinkFilters FilterType="excludeAll" /> +   </LinksControlOptions> +</Control> +``` + + The following example defines a link control that allows users to specify only the changeset link type and link only to changesets. + +``` +<Control Type="LinksControl" Name="UniqueName"> +   <LinksControlOptions> +      <WorkItemLinkFilters FilterType="excludeAll"/> +      <ExternalLinkFilters FilterType="include" /> +         <Filter LinkType="Fixed in Changeset" /> +      </ExternalLinkFilters> + </LinksControlOptions> +. . . +</Control> + +``` + +## <a name="WorkItemTypes"></a> Restricting Link Relationships to Types of Work Items + You use the `WorkItemTypeFilters` and `Filter` child elements to restrict the types of work items to which a links control can link. You can restrict link relationships to the team project or by work item type. The syntax for these elements is as follows. + +``` +<WorkItemTypeFilters Scope=" project | all" FilterType=" include | exclude | includeAll" > +   <Filter WorkItemType="workItemTypeReferenceName" /> +</WorkItemTypeFilters> +``` + +|Attribute|Description| +|---------------|-----------------| +|`Scope`|Optional `WorkItemTypeFilters` attribute.<br /><br /> Defines the scope of the filter that is applied to the set of work item types that is provided in the set of `Filter` elements. You can use the following valid values:<br /><br /> - `all`: Use to allow the creation of links to all work item types that are specified in the `Filter` elements.<br />- `project`: Use to allow the creation of links only to those work item types that are defined for the current project.<br /><br /> If unspecified, links to all work item types are allowed.| +|`FilterType`|Required `WorkItemTypeFilters` attribute.<br /><br /> Defines the method that is used to filter the set of link types that is provided in the set of `Filter` elements. You can use the following valid values:<br /><br /> - `exclude`: Use to disallow the work item types that are listed in the `Filter` elements.<br />- `excludeAll`: Use to disallow all work item types.<br />- `include`: Use to allow the work item types that are listed in the `Filter` elements.<br />- `includeAll`: Use to allow all work item types.| +|`WorkItemType`|Required `Filter` attribute.<br /><br /> Specifies the reference name for a work item type.| + + **Example: Limiting Link Relations to Task Work Items** + + The following example defines a links control that allows only hierarchical relationships to be formed to tasks that are defined in the team project. + +``` +<Control Type="LinksControl" Name="UniqueName"> +   <LinksControlOptions> +      <WorkItemLinkFilters FilterType="include"> +         <Filter LinkType="System.LinkTypes.Hierarchy" /> +      </WorkItemLinkFilters> +      <ExternalLinkFilters FilterType="excludeAll"/> +      <WorkItemTypeFilters Scope ="project" FilterType="include" /> +         <Filter WorkItemType="Task" /> +      </WorkItemTypeFilters> +   </LinksControlOptions> +. . . +</Control> + +``` + +## <a name="DefaultColumns"></a> Specifying the Default Columns to Display + You use the `LinkColumns` and `LinkColumn` child elements to specify the default columns to display in the links control. You can specify either the reference name for a work item field or a link attribute. The syntax for these elements is as follows. + +``` +<LinkColumns> +   <LinkColumn RefName="reference name" | LinkAttribute=" link attribute name" /> +</LinkColumns> +``` + + The order in which the elements are listed defines the order in which the column fields are displayed in the work item form. For a list of reference names and link attributes, see [Work item field index](../guidance/work-item-field.md). The following syntax defines the display of four columns: ID, State, Title, and the link attribute Comment. + +``` +<Control Type="LinksControl"> +. . . +   <LinksControlOptions> +      <LinkColumns> +         <LinkColumn RefName="System.ID" /> +         <LinkColumn RefName="System.State" /> +         <LinkColumn RefName="System.Title" /> +         <LinkColumn LinkAttribute="System.Links.Comment" /> +      </LinkColumns> +   </LinksControlOptions> +</Control> + +``` + +## Related notes +- [Link controls, restrictions, and fields](../track/linking-attachments.md) +- [LinksControlOptions XML element reference](linkscontroloptions-xml-elements.md) diff --git a/docs/work/reference/define-modify-work-item-fields.md b/docs/work/reference/define-modify-work-item-fields.md new file mode 100644 index 00000000000..2b0e8bde92a --- /dev/null +++ b/docs/work/reference/define-modify-work-item-fields.md @@ -0,0 +1,185 @@ +--- +title: Field data types and field attributes | VSTS & TFS +description: Data types supported by work item fields to support queries, reports, and workflow for Visual Studio Team Services (VSTS) and TFS +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: c735a582-954a-418e-8b12-1b5c0b9857b9 +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + + + +# Field data types and attributes + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +The field data type determines the kind and size of data that you can store in the field. A field can have only one type defined within a team project collection. This restriction encourages organizations to use common fields across projects and work item types. + +Reportable attributes determine which fields show up in the data warehouse. Reportable attributes are only valid for on-premises TFS. + +The index attribute determines whether a field is indexed to support managed query searches. + +## Data types + +The following list shows the supported data types: + +<table valign="top"><thead> +<tr> +<th width="10%"><p>Data type</p></th> +<th width="90%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> + <td><p><strong>Boolean</strong> </p></td> + <td><p>Specifies a field that takes on a True/False value. Add a **Boolean** field to a work item form by using the **FieldControl** attribute. </p> + +<blockquote><b>Feature availability:</b> The Boolean data type field is only supported for VSTS and TFS 2017.2 and later versions.</blockquote>    + +</td></tr> +<tr> + <td><p><strong>DateTime</strong> </p></td> + <td><p>Specifies a date according to Coordinated Universal Time (UTC) moment in time. Add a **DateTime** field to a work item form by using either the **FieldControl** or **DateTimeControl** **type** attributes. For query examples, see [Query by date or@CurrentIteration](../track/query-by-date-or-current-iteration.md). </p></td></tr> +<tr> + <td><p><strong>Double</strong> </p></td> + <td><p>Specifies a floating-point value, such as 0.2 or 3.5. Double fields are frequently used in query filters and results lists.Add a **Double** field to a work item form by using the **FieldControl** **type** attribute. For query examples, see [Query by numeric fields](../track/query-numeric.md). </p></td></tr> +<tr> + <td><p><strong>GUID</strong> </p></td> + <td><p>A character string that represents a unique ID.</p> +<blockquote><b>Note:</b> You cannot add a **GUID** field to a work item form.</blockquote> +</td></tr> +<tr> + <td><p><strong>History</strong> </p></td> + <td><p>Custom formatted field used to track historical information. This data type is only used to support the <strong>History</strong> field. This field is automatically indexed for full-text search when full-text search is available. See [Full-Text and partial word searches](../track/query-operators-variables.md#full-text) described later in this topic. For query examples, see [History and auditing](../track/history-and-auditing.md). </p> + +<blockquote><b>Note:</b> The **System.History** field is the only field that uses this data type. You cannot define a custom field using this data type. For the client work item form, you add the **System.History** field by using the **WorkItemLogControl** **type** attribute which supports rich text format controls.</blockquote> + +</td></tr> +<tr> + <td><p> <strong>HTML</strong> </p></td> + <td><p>Supports the ability to capture rich-text data and to use longer text descriptions such as the <strong>Description</strong> or <strong>Repro Steps</strong> fields. An HTML field differs from a PlainText field in that an HTML field is strongly typed to HTML for richer displays of information. HTML fields are automatically indexed for full-text search when full-text search is available. See [Full-Text and partial word searches](../track/query-operators-variables.md#full-text).</p> + +<p>Add an **HTML** field to a work item form by using the **HTMLControl** **type** attribute. To query rich-text fields, see [Query by titles, IDs, and rich-text fields](../track/titles-ids-descriptions.md). </p> +</td> +</tr> +<tr> + <td><p> <strong>Integer</strong> </p></td> + <td><p>Specifies a 32-bit signed integer value, such as 0, 1, 2, 34. Integer fields are frequently used in query filters and results lists. Add an **Integer** field to a work item form by using the **FieldControl** **type** attribute.</p> + +</td></tr> +<tr> + <td><p> <strong>PlainText</strong> </p></td> + <td><p>Supports entry of a text string that can contain more than 255 Unicode characters, such as the <strong>Title</strong> field. These fields are automatically indexed for full-text search, when full-text search is available. See [Full-Text and partial word searches](../track/query-operators-variables.md#full-text).</p> +<p>Add a **PlainText** field to a work item form by using either the **FieldControl** type attribute. To query plain-text fields, see [Query by titles, IDs, and rich-text fields](../track/titles-ids-descriptions.md).</p> + +</td></tr> +<tr> + <td><p> <strong>String</strong> </p></td> + <td><p>Supports entry of a text string that can contain up to 255 Unicode characters. String text fields are often used to support pick lists or drop-down menus. String fields are frequently used in query filters and results lists. Add a **String** field to a work item form by using the **FieldControl** **type** attribute. </p> + + +</td></tr> +<tr> + <td><p> <strong>TreePath</strong> </p></td> + <td><p>Specifies a field that displays entries in a hierarchical or tree structure, such as the requirements to display area and iteration paths for a product. For more information, see [Add and modify area and iteration paths](../customize/set-area-paths.md).</p> + +<blockquote><b>Note:</b> The **System.AreaPath** and **System.IterationPath** fields are the only fields that use this data type. You cannot define a custom field using this data type. For the client work item form, you add the **System.AreaPath** and **System.IterationPath** fields to a work item form by using the **WorkItemClassificationControl type** attribute. </blockquote> +</td></tr> +</tbody> +</table> + + +## Reportable attributes + +Some field values are especially useful for reporting. By using the work item type definition language, you can specify the following optional attributes. + + +>[!NOTE] +>**Feature availability**: Reportable attributes are only supported for the On-premises XML process model. These attributes aren't referenced and aren't subject to modification when you use the Hosted XML process model. + +- **reportable**: Set the reportable attribute to **None**, **Detail**, **Dimension**, or **Measure**, depending on whether and how you want the field to be included in reports. Data from fields that have a value other than **None** for this attribute are exported to the data warehouse and can be included in reports. + + When you add an existing field to a work item type, the current value for the **reportable** attribute is used. When you add a field to a work item type, reporting is disabled unless you explicitly specify it by using the **reportable** attribute. + +- **reportingname**: Assign a different label to a field that is used when data appears in reports. If you do not specify a value, the friendly name that is assigned for the **name** attribute is used. + +- **reportingrefname**: Assign a different reference name to a field that is used when data is exported to the relational data warehouse. If you do not specify a value, the value that is assigned to the **refname** attribute is used. + + Use this attribute to either merge or diverge fields that are included in reports. To merge two fields that have distinct reference names and that are defined in different project collections, you assign the same **reportingrefname** to both fields. To diverge two fields that have the same reference name and that are defined in different project collections, you assign a different **reportingrefname** to each field. + +After you define a field, you can use the **witadmin changefield** command at a command prompt to change the value of all attributes except for the **refname** attribute. + +For information about best practices in labeling fields for reporting purposes, see [Add or modify work item fields to support reporting](add-or-modify-work-item-fields-to-support-reporting.md). + +### Attribute values + +As the following table describes, you can assign one of the following values to the **reportable** attribute: none, dimension, detail, and measure. + +>[!NOTE] +>You can make a field reportable after it has been used for a work item. After you set the reportable value, new revisions of the work item that are copied to the warehouse will contain the field value. However, the revisions that are already in the warehouse will not be backfilled with the existing values. + + +|Attribute value|Description| +|---|---| +| **Detail** |Use the **Detail** type only for Integer, Double, String, or DateTime fields.<br /><br />The data in this field is moved into the relational warehouse database in the Work Item and Current Work Item tables but not into the SQL Server Analysis Services cube. By using this type for unrestricted text fields, you can use them in reports without making the cube significantly larger.| +| **Dimension** |Use the **Dimension** type only for Integer, String, or DateTime fields.<br /><br />The data in this field enters the relational warehouse database and the Analysis Services cube as an attribute of the Work Item dimension so that the data can be used to filter reports. Use this type for fields that have lists of valid values. Work Item Type and State are good examples of a dimension.| +| **Measure** |Use the **Measure** type only for Integer and Double fields. Measures are the numeric values in your reports.<br /><br />During processing of the Analysis Services cube, data is precalculated on fields that are set to **Measure**. For example, the Work Item and Current Work Item measure groups contain cumulative data for the following fields: Original Estimate, Remaining Hours, and Completed Hours. For more information about measure groups, see [Perspectives and measure groups provided in the Analysis Services cube](../../report/sql-reports/perspective-measure-groups-cube.md).<br /><br />When you specify **Measure**, you must specify **sum** for the **formula** attribute, which returns the sum of each measure referenced in the query.| +| **None** |Specify **None** when you do not want to include the field in reports. This value is the default assignment.| + +### Syntax examples + +**Detail Example** + +`<FIELD refname="MyCorp.Summary" name="Summary" type="String" reportable="detail">` + +**Dimension Example** + +`<FIELD refname="MyCorp.Category" name="Category" type="String" reportable="dimension">` + +**Measure Example** + +`<FIELD refname="MyCorp.Cost" name="Cost" type="Integer" reportable="measure" formula="sum">` + +## Indexed fields + +You can enable or disable indexing for a work item field by using the **witadmin indexfield** command. When you enable indexing for a field, you may increase the performance of finding work items whose queries specify that field. If you add a custom field that you use in many of your work item queries, you may want to enable indexing for that field. For more information, see [Manage work item fields (witadmin)](../reference/witadmin/manage-work-item-fields.md). + + +## System and predefined fields + +All system defined fields have reference names that begin with System, for example, System.AreaPath, System.AssignedTo, and continue in that pattern. + +Predefined fields defined by the default process templates that TFS provides begin with Microsoft.VSTS and then further differ based on their usage. Examples of predefined fields that are used in common, for scheduling purposes and integration with Microsoft Project, for integration with Team Foundation Build, and integration with Team Foundation are as follows: + +- Microsoft.VSTS.Common.Priority +- Microsoft.VSTS.Scheduling.DueDate +- Microsoft.VSTS.Build.FoundIn +- Microsoft.VSTS.TCM.Steps + +For an overview of all system and predefined fields that are defined for the default processes/process templates, see [Work item field index](../guidance/work-item-field.md). For more information about specifying field names, see [Naming restrictions](../../reference/naming-restrictions.md). + + +## Related notes +- [Add or modify a field](../customize/add-modify-field.md) +- [Manage work item fields (witadmin)](../reference/witadmin/manage-work-item-fields.md) +- [Apply a field rule](apply-rule-work-item-field.md) +- [All FIELD XML elements reference](field-definition-element-reference.md) + + +### Hidden and non-changeable attributes + +In addition to the attributes that you can change for a work item field, there are a number of non-changeable and virtually hidden attributes for each field. You can look up the assignments of these fields using the Work Item Field Explorer tool. Access the Work Item Field Explorer tool from the Process Editor tool. + +To access this tool: +- For TFS 2017 and later versions, install the [TFS Process Template editor from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KarthikBalasubramanianMSFT.TFSProcessTemplateEditor). +- For TFS 2015 and earlier versions, install [TFS Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power). + +#### Work Item Field Explorer + +With the Work Item Field Explorer, you can view the work item fields and their attributes that are defined for a collection. + +![Work item field explorer](_img/define-modify-work-item-fields/IC633020.png) + + diff --git a/docs/work/reference/define-pick-lists.md b/docs/work/reference/define-pick-lists.md new file mode 100644 index 00000000000..d17e354d76b --- /dev/null +++ b/docs/work/reference/define-pick-lists.md @@ -0,0 +1,200 @@ +--- +title: Define pick lists | VSTS & TFS +description: Syntax and Usage for the ALLOWEDVALUES, SUGGESTEDVALUES, and PROHIBITEDVALUES elements to enumerate the drop-down menu for a field - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 309c8545-249a-4d7a-8c91-fc10227fa0ba +ms.manager: douge +ms.author: kaelli +ms.date: 05/10/2017 +--- + +# Define pick lists +<b>VSTS (Hosted XML) | TFS 2017 | TFS 2015 </b> + + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML process models. For defining custom pick lists for the Inheritance process model, see [Customize a field for a process](../process/customize-process-field.md). +> +>For an overview of process models and supported customizations, see [Customize your work tracking experience](../customize/customize-work.md). + +You can enumerate a set of values for a field by defining a pick list as part of its definition or at some point during the workflow. You can specify that the list can contain only allowed values, cannot contain prohibited values, or can suggest values. If you suggest values, users can specify a value other those in the pick list. + + You can also define dependent pick lists, in which you define two or more lists for a field but only one list appears at run time based on the evaluation of a conditional rule. + +> [!NOTE] +> To add or modify a pick list for a `FIELD` definition, use the **witadmin** command-line tool to import and export the definition for the work item type. See [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md). + +<a name="Syntax"></a> + +## Syntax structure + You can use the `ALLOWEDVALUES`, `SUGGESTEDVALUES`, and `PROHIBITEDVALUES` elements to specify a list of values that a user must specify, may specify, or must not specify as a value for a field. If you use each of these elements, you can enumerate a list of items or specify a global list. You can use the `ALLOWEXISTINGVALUE` to allow a field to store an existing value if you remove an item from the pick list. + + You can specify these elements as child elements of the `FIELD` (Definition) or `FIELD` (Workflow) element. + +- You use `ALLOWEDVALUES` to define a list of values that users can specify in a work item form or the query editor. Users must specify one of the values in the `GLOBALLIST` or the set of `LISTITEM` entries. + + ``` + <ALLOWEDVALUES for="userGroupName" not="userGroupName" expanditems="true | false" filteritems="excludegroups"> +    <GLOBALLIST name="globalListName" /> +    <LISTITEM value="Name1" /> +    <LISTITEM value="Name2" /> +    <LISTITEM value="Name3" /> + . . . + </ALLOWEDVALUES> + ``` + +- You use `PROHIBITEDVALUES` to define a list of values that a field cannot contain. Users cannot save a work item if the field contains a prohibited value. You use this element if you want to restrict the use of a value that was previously allowed but is no longer valid. + + ``` + <PROHIBITEDVALUES for="userGroupName" not="userGroupName" expanditems="true | false" filteritems="excludegroups"> +    <GLOBALLIST name="globalListName" /> +    <LISTITEM value="Name1" /> +    <LISTITEM value="Name2" /> +    <LISTITEM value="Name3" /> + . . . + </PROHIBITEDVALUES> + ``` + +- You use `SUGGESTEDVALUES` to define a list of values that a field can contain. Users can specify other values in addition to those that you suggest. + + ``` + <SUGGESTEDVALUES for="userGroupName" not="userGroupName" expanditems="true | false" filteritems="excludegroups"> +    <GLOBALLIST name="globalListName" /> +    <LISTITEM value="Name1" /> +    <LISTITEM value="Name2" /> +    <LISTITEM value="Name3" /> + . . . + </SUGGESTEDVALUES> + + ``` + + For each of these elements, you can specify one or more of the attributes that the following table describes: + +|Attribute|Description| +|---------------|-----------------| +|`for`|Optional. Specifies the name of a user or group in Team Foundation to whom the rule applies. Valid names consist of a string of text that contains between 1 and 255 characters.<br /><br /> Pattern value: ^[^\\\\]+\\\\[^\\\\]+$<br /><br /> Pattern value example: *Domain*\\*UserID*| +|`not`|Optional. Specifies the name of a user or group in Team Foundation to whom the rule does not apply. Valid names consist of a string of text that contains between 1 and 255 characters.<br /><br /> Pattern value: ^[^\\\\]+\\\\[^\\\\]+$<br /><br /> Pattern value example: *Domain*\\*UserID*| +|`expanditems`|Optional. Specifies whether a group identified in the **LISTITEM** element should be expanded to include subordinate groups in the list. The default value is `true`.| +|`filteritems`|Optional. Specifies that the list includes only the members of groups, not group names. The only valid value of this attribute is `excludegroups`.| + + For more information, see [Expand list items and exclude groups from lists](expand-list-items-and-exclude-groups-from-lists.md). + + +>[!NOTE] +>For the Hosted XML process model, the following limits are placed on global list import: +>- Total of 64 global lists +>- Total of 512 items per list +>- Approximately 10K items can be defined total within all global lists specified across all WITs. + + +## <a name="GLOBALLIST"></a> Syntax structure for GLOBALLIST and LISTITEM elements + You can use the `GLOBALLIST` and `LISTITEM` elements to enumerate a list of items that can be updated globally or that are specific to a single field. + +- You use **GLOBALLIST** to define a set of **LISTITEM** elements that is stored for a team project collection and that all team projects in that collection can use. **GLOBALLIST** is a required child element of the **GLOBALLISTS** element and an optional child element of the `ALLOWEDVALUES`, `SUGGESTEDVALUES`, and `PROHIBITEDVALUES` elements. You can define a global list within a work item definition, a global list definition, or a global workflow. + + ``` + <GLOBALLIST name="globalListName"> +    <LISTITEM value="Name1" /> +    <LISTITEM value="Name2" /> +    <LISTITEM value="Name3" /> + . . . + </GLOBALLIST> + ``` + + *globalListName*: A string of text that contains between 1 and 255 characters. + + > [!IMPORTANT] + > If you define a global list in an XML file that defines a type of work item, you must give the list a unique name. Otherwise, you might overwrite an existing list that was defined for the collection. + +- You use **LISTITEM** to enumerate a set of values. **LISTITEM** is a required child element of **GLOBALLIST** and an optional child element of the `ALLOWEDVALUES`, `SUGGESTEDVALUES`, and `PROHIBITEDVALUES` elements. + + ``` + <LISTITEM value="listName" /> + ``` + + *listName*: A string of text that contains between 1 and 255 characters. + +## <a name="Allow"></a> Allow an existing value + You can use the `ALLOWEXISTINGVALUE` element to allow a field to maintain existing values, after you specify a pick list of items by using the `ALLOWEDVALUES` element. If you do not specify the `ALLOWEXISTINGVALUE` element, you force the user, at edit time, to specify one of the current valid values for that field. The `ALLOWEXISTINGVALUE` element modifies only those elements in the same block. + +``` +<ALLOWEXISTINGVALUE /> + +``` + + You specify this element under the **FIELD** (Workflow) element to apply it to the rules that are defined for the field. This application includes the rules that the **STATE**, **TRANSITION**, **DEFAULTREASON**, and **REASON** elements of the field specify. You specify this element under the **STATE** element to apply it not only to the rules that are defined in the state for the field but also to the rules that are defined for the field for all transitions into the state. + + You specify this element under the **TRANSITION** element to apply it not only to the rules that are defined in the transition for the field but also to the rules that are defined for the field in the **REASON** and **DEFAULTREASON** elements. + +## Specify a list + Field lists are composed of individual list items. Each field list must contain at least one item. + +> [!NOTE] +> Global lists must not include project-scoped groups because they are not scoped to a project. + + To specify items in a field list, use the `<LISTITEM value="">` element. You can specify a string, a user name, or a group name. + +``` +<LISTITEM value="Emergency"/> +<LISTITEM value="Major"/> +<LISTITEM value="Minor"/> +<LISTITEM value="Domain\joe"/> +<LISTITEM value="[Global]\GlobalGroup" /> +<LISTITEM value="[Project]\ProjectGroup" /> +``` + +> [!NOTE] +> At run time, items within a list appear alphabetically based on the language of the server that is running Visual Studio Team Foundation Server. + +## <a name="Allowed"></a> Specify a set of allowed values + In this example, the Customer Severity field can have any one of three values: Emergency, Major, and Minor. The field is defined as required with a default value of Minor. At run time, users can specify one of the values in a drop-down list. + +``` +<FIELD refname="System.Title" name="Title" type="String"> +<HELPTEXT>Provide a brief description of the work item</HELPTEXT> +<REQUIRED/> +</FIELD> +<FIELD refname="MyCorp.CusSeverity" name="Customer Severity" type="String"> +<HELPTEXT>Indicate the severity of the problem</HELPTEXT> +    <ALLOWEDVALUES> +        <LISTITEM value="Emergency"> +        <LISTITEM value="Major"> +        <LISTITEM value="Minor"> +    </ALLOWEDVALUES> +<DEFAULT from="value" value="Minor"/> +</FIELD> +``` + +<a name="Dependent"></a> +## Define dependent pick lists + You can define a pick list that is active only when its parent conditional clause is true. In the following example, two sets of picks list are defined for My Field. At run time, only one list appears based on whether Requirements is assigned to the `MyCompany.MyTeam.Discipline` field. + +> [!NOTE] +> The **WHEN** and **WHENNOT** rules in this example can also apply to other rules to specify when those rules should be evaluated. For more information, see [WHEN, WHENNOT, WHENCHANGED, and WHENNOTCHANGED XML elements](assign-conditional-based-values-and-rules.md). + +``` +<FIELD name="My Field" refname="MyCompany.MyProcess.MyField" type="String" reportable="dimension"> + <WHEN field="MyCompany.MyTeam.Discipline" value="Requirements"> + <ALLOWEDVALUES> + <LISTITEM value="Planning" /> + <LISTITEM value="Review" /> + </ALLOWEDVALUES> + </WHEN> + <WHENNOT field=" MyCompany.MyTeam.Discipline" value="Requirements"> + <ALLOWEDVALUES> + <LISTITEM value="Process Management" /> + <LISTITEM value="Planning" /> + <LISTITEM value="Review" /> + </ALLOWEDVALUES> + </WHENNOT> +</FIELD> +``` + +## Related notes + +- [Apply a field rule](apply-rule-work-item-field.md) +- [Modify a field or add a custom field](../customize/add-modify-field.md) +- [Customize a process for import into VSTS(Hosted XML)](../import-process/customize-process.md) +- [Manage global lists for work item types](witadmin/manage-global-lists-for-work-item-types.md) +- [Index to XML elements](xml-element-reference.md) \ No newline at end of file diff --git a/docs/work/reference/design-work-item-form.md b/docs/work/reference/design-work-item-form.md new file mode 100644 index 00000000000..6eae4973fb6 --- /dev/null +++ b/docs/work/reference/design-work-item-form.md @@ -0,0 +1,355 @@ +--- +title: Design the work item form | VSTS & TFS +description: Place and group fields on the form so that they can support the data entry and workflow processes that will be followed by team members - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 51acfaa1-3c2c-4371-b5da-e43d458bb1f7 +ms.manager: douge +ms.author: kaelli +ms.date: 06/16/2017 +--- + +# Design the work item form + +<p><b>TFS 2017 (Hosted XML) | TFS 2015 | TFS 2013 </b></p> + +> [!IMPORTANT] +> This topic applies to team project customization for the On-premises XML process model. For the Hosted XML process model, see [WebLayout and Control elements](weblayout-xml-elements.md). For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +> For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +When you design a work item form, you want to position fields on the form so that they support the data entry and workflow processes that will be followed by team members. If you are adding just a few fields to an existing form, you must determine where you want to add them on the form. If you are adding several fields to support a new collection of data to track, you may want to add a new tab just for these fields. To minimize the need to scroll a form, you can group fields into several columns in the top of the form or in a tab. + + If you are adding a new work item type, you may want to copy an existing type and modify it to display the fields and workflow process that support the new type. + + When you design the layout, consider the following tips to get the best results: + +- Place fields at the top of the form that team members must reference or update frequently. + +- Place fields on a tab that only a few team members must reference or update infrequently. For example, controls that link work items or attach files are typically positioned on separate tabs. + +- Group fields into columns to maximize the display of data fields. You can use columns in the top of the form or on a tab. You can also display tabs in a multicolumn format. + +- Use one or more link controls on separate tabs or on the same tab to restrict the types of links that can be created between work item types fields. + + For information about how to export, import, and verify work item form changes, see [Change the work item form layout](change-work-item-form-layout.md). + + +[!INCLUDE [temp](../_shared/update-xml-wit.md)] + + +<a name="LayoutElements"></a> +## Segment the form into areas + You use layout elements to segment your work item form into different areas, grouping related fields and allocating space on the form according to the data entry requirements. The following table describes the elements that are used to segment the form into different areas. + +|Element|Description| +|-------------|-----------------| +|`FORM`|Contains the `Layout` elements that specify the display of fields and controls for the work item type.| +|`Layout`|Contains all elements that specify the display of fields and controls for a specific target. You can specify different layouts for different targets, such as Visual Studio or the web portal. Child elements that you can specify in a `Layout` element include `Control`, `Group`, `TabGroup`, and `Splitter` elements.| +|`Group`|Clusters child elements on the form. A group is visually separated by a border and an optional label. Groups that are defined in an adjacent position in the XML stack are split vertically in the displayed form. You can specify the `Column` element as a child of a `Group` element.| +|`Column`|Keeps all child elements in a vertical column or splits a form vertically. Columns must appear in a `Group`. `Group` elements in `Column` elements can be used to create nested areas. By default, columns split a `Group` evenly. You can specify an optional percentage width attribute to allocate more space to one or more columns.<br /><br /> Child elements that you can specify in a `Column` element include `Control`, `Group`, `TabGroup`, and `Splitter` elements.| +|`Splitter`|Allows users to resize the width that is allocated to two columns in a form.| +|`Tab`|Adds different tabs to a form to support the display of additional fields and controls. Child elements that you can specify in a `Tab` element include `Control`, `Group`, `TabGroup`, and `Splitter` elements.| +|`TabGroup`|Contains a group of `TAB` elements. In general, you add tabs to a single tab group. However, you could stack two or more tab groups vertically in a form.| + + The following illustration shows a form whose upper area displays eight fields that are arranged roughly into two columns. The lower portion displays two sets of three tabs that are arranged in a two-column layout. + + ![Custom work item form](_img/alm_wit_custom_form.png "ALM_WIT_Custom_Form") +Custom Form with Three Tabs in a Two Column Layout + + **Top of the Form** + + The following code defines the top of the form. You can introduce columns as needed. As shown in this example, the first column, which is sized at 70 percent of the width of the form, contains two groups of fields. The second group of fields, which contains the **PU (Use Area Path)** and **Priority** fields, is defined in a two-column layout. The second column spans the remaining 30-percent width of the form. As the form is resized, the areas that are allocated to the columns vary proportionally. + +``` +<FORM> + <Layout> + <Group> + <Column PercentWidth="70"> + <Group> + <Column PercentWidth="100"> + <Control FieldName="System.Title" Type="FieldControl" Label="Title" LabelPosition="Left" /> + <Control FieldName="System.AreaPath" Type="WorkItemClassificationControl" Label="Area Path" LabelPosition="Left" /> + <Control FieldName="System.IterationPath" Type="WorkItemClassificationControl" Label="&Iteration Path:" LabelPosition="Left" /> + <Group> + <Column PercentWidth="50"> + <Control FieldName="Microsoft.VSTS.Common.ProductUnit" Type="FieldControl" Label="PU (Use Area Path)" LabelPosition="Left" /> + </Column> + <Column PercentWidth="50"> + <Control FieldName="Microsoft.VSTS.Common.Priority" Type="FieldControl" Label="Priority" LabelPosition="Left" /> + </Column> + </Group> + </Column> + </Group> + </Column> + <Column PercentWidth="30"> + <Group Label="Status"> + <Column PercentWidth="100"> + <Control FieldName="System.Id" Type="FieldControl" Label="Id" LabelPosition="Left" /> + <Control FieldName="System.State" Type="FieldControl" Label="State" LabelPosition="Left" /> + <Control FieldName="System.AssignedTo" Type="FieldControl" Label="Assigned To" LabelPosition="Left" /> + </Column> + </Group> + </Column> + </Group> + <Group Label=""> + <Column PercentWidth="60"> +. . . +</Layout> +</FORM> +``` + +## <a name="WorkingTabs"></a> Work with tabs + You use tabs to cluster a group of fields or to support one or more special controls, such as the controls that link work items, link work item history, or attach files. Several definitions of work item types for the Microsoft Solutions Framework (MSF) process templates use several tabs to control the types of links that can be created, based on the link type. For more information, see [Work Items and Workflow (Agile)](http://msdn.microsoft.com/en-us/d16d04fd-c073-45c0-b1b9-3724f0a7519b) or [Work Items and Workflow (CMMI)](http://msdn.microsoft.com/en-us/b5b7b488-3248-485c-b896-a2c6f824a219). + + For more information about how to use special controls, see the following topics: + +- [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md) + +- [Add the Attachments control](add-the-attachments-control.md) + +- [Define link controls to restrict link relationships](define-link-controls.md) + + By using the attributes that are described in the following table, you can label the tab and specify padding and margins that control the number of pixels inside and outside the border of the tab control. + +|Attribute|Description| +|---------------|-----------------| +|`Label`|Required. Text that specifies the name of the tab page.| +|`Margin`|Optional. Specifies, in pixels, the amount of space around the tab.| +|`Padding`|Optional. Specifies, in pixels, the amount of space around the outside and inside border of the tab.| + + ![Custom form showing two groups of 6 tabs](_img/alm_wit_custom_tabs.png "ALM_WIT_Custom_Tabs") +Six Tabs Arranged in a Side by Side by Layout + + The following code lists the syntax that is used to create the layout that is shown in the previous illustration. + +``` +<FORM> + <Layout> + . . . + <TabGroup> + <Tab Label="Planning"> + <Group Label="Status" Padding="(0,0,0,3)"> + <Column PercentWidth="50"> + <Control FieldName="Microsoft.DevDiv.Importance" Type="FieldControl" Label="Importance" LabelPosition="Left" /> + <Control FieldName="Microsoft.DevDiv.Commitment" Type="FieldControl" Label="Commitment / Confidence" LabelPosition="Left" /> + . . . + </Column> + <Column PercentWidth="50" /> + </Group> + <Group> + <Column PercentWidth="100"> + <Control FieldName="Microsoft.DevDiv.Story" Type="HtmlFieldControl" Label="Story Board" LabelPosition="Top" /> + </Column> + </Group> + <Group> + <Column PercentWidth="100"> + <Control FieldName="System.Description" Type="HtmlFieldControl" Label="Value Proposition Description" LabelPosition="Top" /> + </Column> + </Group> + </Tab> + <Tab Label="Marketing"> + <Group> + <Column PercentWidth="100"> + <Control FieldName="Microsoft.DevDiv.MarketingOwner" Type="FieldControl" Label="Marketing Owner" LabelPosition="Top" /> + <Control FieldName="Microsoft.DevDiv.MarketingDescription" Type="HtmlFieldControl" Label="Marketing Description" LabelPosition="Top" /> + </Column> + </Group> + </Tab> + <Tab Label="Relationships"> + <Control Type="LinksControl" Label="Pillars" LabelPosition="Top" Name="Pillars"> + . . . + </Control> + <Control Type="LinksControl" Label="Experiences - Feature Groups" LabelPosition="Top" Name="Experiences"> + . . . + </Control> + <Control Type="LinksControl" Label="Flags / Associations" LabelPosition="Top" Name="Flags"> + . . . + </Control> + </Tab> + </TabGroup> + </Column> + <Column PercentWidth="40"> + <TabGroup> + <Tab Label="History"> + <Control FieldName="System.History" Type="WorkItemLogControl" Label="Detailed Description and History" LabelPosition="Top" /> + </Tab> + <Tab Label="Links"> + <Control Type="LinksControl" LabelPosition="Top" > + . . . + </Control> + </Tab> + <Tab Label="File Attachments"> + <Control Type="AttachmentsControl" LabelPosition="Top" /> + </Tab> + </TabGroup> + </Column> + </Group> + </Layout> +</FORM> + +``` + +## <a name="GroupingFields"></a> Group fields + You use the `Group` element to visually group elements, similar to the Windows GroupBox. By using the attributes that are described in the following table, you can label each group and specify padding and margins that control the number of pixels inside and outside the border of the group area. The `Group` element should always be followed by a `Column` element, even if the group has only one column. + + You should use the `Group` element as a container for fields in a column and as a container for columns in a segmented area on the form. You can specify the `Column` element only as a child element in a `Group` element. + + You can control the spacing and size of the overall form layout by specifying the attributes that are described in the following table. + +|Attribute|Description| +|---------------|-----------------| +|`Label`|Optional. Text that specifies the name of the group.| +|`Margin`|Optional. Specifies, in pixels, the amount of space around the group and between the control and its neighbors. You can vary the amount of space on each side.| +|`Padding`|Optional. Specifies, in pixels, the amount of space around the outside border of the group. You can vary the amount of space on each side.| + + ![Group of several fields](_img/alm_wit_custom_group.png "ALM_WIT_Custom_Group") + Group of Fields Arranged on a Tab + + The following code lists the syntax that is used to create the group of fields that is shown in the previous illustration. For more information about how to specify the fields by using the `Control` element, see [Specify work item form controls](specify-work-item-form-controls.md). + +``` +<TabGroup> +<Tab Label="Planning"> +<Group Label="Status" Padding="(0,0,0,3)"> +   <Column PercentWidth="5100"> +      <Control FieldName="Microsoft.DevDiv.Importance" Type="FieldControl" Label="Importance" LabelPosition="Left" /> +      <Control FieldName="Microsoft.DevDiv.Commitment" Type="FieldControl" Label="Commitment / Confidence" LabelPosition="Left" /> +      <Control FieldName="Microsoft.DevDiv.VisionDoc" Type="FieldControl" Label="Vision Doc" LabelPosition="Left" /> +      <Control FieldName="Microsoft.DeveloperDivision.Features.EstimatedCost" Type="FieldControl" Label="Estimated Cost" LabelPosition="Left" /> +      <Control FieldName="Microsoft.DevDiv.BusinessUnit" Type="FieldControl" Label="BU (Use Area Path)" LabelPosition="Left" /> +      <Control FieldName="Microsoft.DevDiv.Website" Type="FieldControl" Label="Website" LabelPosition="Left" /> +   </Column> +</Group> +   . . . +</Tab> +</TabGroup> + +``` + +## <a name="WorkingColumns"></a> Size columns + You can design an area in a form that has two or more columns. You can specify the column width as fixed or as a percentage of the width of the containing element by using the `FixedWidth` or `PercentWidth` attributes, respectively. These two `Column` attributes are mutually exclusive. To allow a user to resize the column, you can specify a `Splitter` control, as [Use a splitter to support variable column sizing](#UsingSplitter) describes. + + ![3-Column Display](_img/alm_wit_custom_3columns.png "ALM_WIT_Custom_3Columns") +Three-Column Layout + + The following code produced the previous three-column layout of fields. When you organize groups of fields into columns, use the **Group** element to contain each column of fields. Optionally, you can label the groups of fields. + +``` +<FORM> +   <Layout> +      <Group> + <Column PercentWidth="36"> +            <Group> + <Control FieldName="System.Title" Type="FieldControl" Label="Title" LabelPosition="Left" /> + <Control FieldName="System.AreaPath" Type="WorkItemClassificationControl" Label="Area" LabelPosition="Left" /> + <Control FieldName="Microsoft.VSTS.Common.ProductUnit" Type="FieldControl" Label="Product Unit" LabelPosition="Left" /> + <Control FieldName="Microsoft.DevDiv.BusinessUnit" Type="FieldControl" Label="Business Unit" LabelPosition="Left" /> +            </Group> + </Column> + <Column PercentWidth="33"> +            <Group> + <Control FieldName="Microsoft.DevDiv.SubTitle" Type="FieldControl" Label="Sub Title" LabelPosition="Left" /> + <Control FieldName="System.IterationPath" Type="WorkItemClassificationControl" Label="Iteration" LabelPosition="Left" /> + <Control FieldName="Microsoft.DevDiv.Other" Type="FieldControl" Label="Other" LabelPosition="Left" /> +            </Group> + </Column> + <Column PercentWidth="31"> +            <Group> + <Control FieldName="Microsoft.DevDiv.Type" Type="FieldControl" Label="Type" LabelPosition="Left" /> + <Control FieldName="System.AssignedTo" Type="FieldControl" Label="Assigned To" LabelPosition="Left" /> + <Control FieldName="System.State" Type="FieldControl" Label="State" LabelPosition="Left" /> +            </Group> + </Column> +      </Group> +. . . +   </Layout> +</FORM> +``` + +## <a name="UsingSplitter"></a> Use a splitter to support variable column sizing + You use the **Splitter** element when you want to allow the viewer of the form to dynamically resize the columns. The splitter appears as a dotted line on the form, as shown in the following illustration. You cannot specify any child elements in the **Splitter** element. + + ![2 Column Layout with Splitter](_img/alm_wit_custom_splitter.png "ALM_WIT_Custom_Splitter") +2-Column Layout with Splitter + + A **Group** element that contains **Splitter** and **Column** elements must specify exactly three **Column** elements in the following sequence: + +1. a **Column** to the left of the splitter + +2. a **Column** that contains only the `Splitter` element + +3. a **Column** to the right of the splitter + + See the following example for more information. + +``` +<Group> +   <Column PercentWidth="50"> +      <Group Label="First Group Left "> +         <Column PercentWidth="50"> +            <Control FieldName="Microsoft.VSTS.Common.Priority" Type="FieldControl" Name="Pri2" Label="Priority:" /> +            <Control FieldName="Microsoft.VSTS.Common.Rank" Type="FieldControl" Label="Stack Rank:" /> +            <Control FieldName="Microsoft.VSTS.Scheduling.BaselineWork" Type="FieldControl" Label="Original Estimate:" /> +            <Control FieldName="Microsoft.VSTS.Scheduling.RemainingWork" Type="FieldControl" Label="Remaining:" /> +   </Column> +   <Column> +      <Splitter> +   </Column> +   <Column PercentWidth="50"> +      <Group Label="Second Group Right"> +            <Control Type="DateTimeControl" FieldName="ABC_Company.Project.Manual.ChangeDate" Label="Change Date" Format="Short" LabelPosition="Right" /> +            <Control Type="DateTimeControl" FieldName="ABC_Company.Project.Manual.EstimateStartDate" Label="Estimated Start Date" Format="Short" LabelPosition="Right" /> +            <Control Type="DateTimeControl" FieldName="ABC_Company.Project.Manual.ActualStartDate" Label="Actual Start Date" Format="Short" LabelPosition="Right" /> +            <Control Type="DateTimeControl" FieldName="ABC_Company.Project.Manual.FinishDate" Label="Finish Date" Format="Short" LabelPosition="Right" /> +      </Group> +   </Column> +</Group> +``` + +## <a name="ControllingFormSize"></a> Control the size of the form and form elements + You can specify the minimum horizontal and vertical size of each form layout by using the `MinimumSize` attribute for the layout. However, the form is resized according to the combined dimensions when the combined horizontal and vertical sizes of the field controls and layouts that are defined for each form are larger than the specified minimum dimensions. In addition, the vertical size of all tabs conforms to the dimension that is required to size the tab with the maximum vertical layout. The last field control on each tab may be resized accordingly to fill in the vertical dimension. + + Scrollbars appear when the container that is displaying the form layout is smaller than the minimum horizontal or vertical size of the form. If this occurs, double-scroll problem might occur. With double-scroll, users may have to scroll both the form itself and the field control to find the information that they want. To avoid the double-scroll problem, you may want to place field controls that are subject to scrolling, such as HTML and History fields, on their own tab. + +### Control the size of the layout + You can control the spacing and size of the overall form layout by specifying the attributes that are described in the following table. + +|Attribute|Description|Pattern value example| +|---------------|-----------------|---------------------------| +|`MinimumSize`|Optional. String of the form (*Width*, *Height)*. This value specifies the minimum size for the form itself. When the container that displays the form layout is smaller than this size, horizontal and vertical scrollbars appear. When the combined size of the field controls on the layout form is larger than that set by the `MinimumSize` attribute, the attribute is ignored.|(100,100)| +|`Margin`|Optional. String of the form *(Left, Top, Right, Bottom)* that specifies, in pixels, the amount of space around the layout. You can vary the amount of space on each side.|(2,0,2,0)| +|`Padding`|Optional. String of the form (*(Left, Top, Right, Bottom)* that specifies, in pixels, the amount of space between the outside border of the layout and the inside border. You can vary the amount of space on each side.|(2,0,2,0)| +|`ControlSpacing`|Optional. Specifies the vertical spacing between controls on the form. Integer.|N/A| + +### Control the size of form elements + You use the `Control` element `MinimumSize` attribute to specify the minimum width and height that each form element should occupy. If you do not have sufficient vertical space, a scrollbar appears to keep its minimum size. Without this attribute, the controls are drawn by using their default sizes, unless controls in other tabs take more space that increases the size of the tab. You can use other attributes, such as `Margin` and `Padding`, to align or stretch the control and define the size of the border around the control. For more information, see the following topics: + +- [Specify work item form controls](specify-work-item-form-controls.md) +- [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md) +- [Add the Attachments control](add-the-attachments-control.md) +- [Define link controls to restrict link relationships](define-link-controls.md) + +<a name="SpecifyingLayouts"> +## </a> Specify different layouts for different targets + You can specify different layouts for different targets by using the `Layout` element `Target` attribute. To target Visual Studio or Team Explorer Everywhere, you specify `WinForms`, and to target the web portal, you specify `Web`. + +``` +<FORM> +   <Layout Target="WinForms" > +      . . . +   </Layout> +   <Layout Target="Web" > +      . . . +   </Layout > +</FORM> + +``` + +## Related notes +- [Change the work item form layout](change-work-item-form-layout.md) +- [Customize your work tracking experience](../customize/customize-work.md) +- [Specify work item form controls](specify-work-item-form-controls.md) +- [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md) +- [Link and Param](link-param-xml-elements-reference.md) +- [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md) diff --git a/docs/work/reference/edit-wit-definition-add-web-content-form.md b/docs/work/reference/edit-wit-definition-add-web-content-form.md new file mode 100644 index 00000000000..5b2d2eb649d --- /dev/null +++ b/docs/work/reference/edit-wit-definition-add-web-content-form.md @@ -0,0 +1,155 @@ +--- +title: Edit a WIT definition to add web content to a work item form | VSTS & TFS +description: Adds a Web content or HTML content to a work item form by exporting the type definition XML file and adding a WebpageControl in the FORM section - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 212ce627-db5c-4d19-a6c5-68f10cb6ca1c +ms.manager: douge +ms.author: kaelli +ms.date: 02/14/2017 +--- + +# Edit a WIT definition to add web content to a work item form + +<p><b>TFS 2017 (Hosted XML) | TFS 2015 </b></p> + +> [!IMPORTANT] +> This topic applies to team project customization for the On-premises XML process model. For the Hosted XML process model, see [WebLayout and Control elements](weblayout-xml-elements.md). For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +> For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +You can add web content or HTML content to a work item form by exporting the type definition XML file and adding a `WebpageControl` in the `FORM` section. After you modify and import the XML file, you can verify the display of the Web content in the updated work item type. + +The Web content that you display can be specified in one of the following ways: + +- URL of a Web page + +- A URL path that is dynamically determined at run time based on one or more field values defined for the work item + +- HTML content + +For information about the syntax structure of the elements used to add Web content to a work item type (WIT), see [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md) and [Link and Param](link-param-xml-elements-reference.md). + + +[!INCLUDE [temp](../_shared/update-xml-wit.md)] + + +<a name="Export"></a> +##Export and open the WIT definition file + +1. Perform one of the following steps based on the scope of the customization that you want to perform: + + **If you are modifying a work item type for a single project**: + + 1. Run **witadmin exportwitd** to export the XML file for the work item type that you want to modify. For more information, see [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md). + + 2. In Visual Studio, choose **File**, **Open**, **File**. + + 3. Under **Look in**, move to the location where you exported the file. + + **If you are modifying a work item type to customize a process template**: + + 1. Find the location where you downloaded the process template. + + 2. Select the work item type XML file that you want to update, and then choose **Open**. When you are prompted about line endings, click **No**. + +<a name="AddWebContent"></a> +## Add Web content to the FORM section of the definition file + +1. Find the `<TabGroup>` section of the XML file. Notice that there are `<Tab>` elements for items such as Links and File Attachments in which each `<Tab>` element contains a `<Control>` element that renders the respective control. + + ``` + <Tab Label="Links"> +   <Control Type="LinksControl" /> + </Tab> + <Tab Label="File Attachments"> +   <Control Type="AttachmentsControl" /> + </Tab> + ``` + +2. Add a new `<Tab>` element that will contain the Web or HTML content that you want to display in the work item form. Copy the following code into the `<TabGroup>` section of the file based on how you are defining the Web content. + + - **To specify the URL of a Web page**: + + ``` + <Tab Label="Tab Label"> +    <Group> +       <Column PercentWidth="100"> +          <Control Type="WebpageControl" Name="Webpage" Label=" Name of Web Page" LabelPosition="Top" > +             <WebpageControlOptions AllowScript="false"> +                <Link UrlRoot="URL of Web Page" /> +             </WebpageControlOptions> +          </Control> +       </Column> +    </Group> + </Tab> + ``` + + Replace *Tab Label* and *URL of Web Page* with the information that you want to appear on the work item form. + + - **To specify a dynamic URL to be determined at run time**: + + ``` + <Tab Label="Tab Label"> +    <Group> +       <Column PercentWidth="100"> +          <Control Type="WebpageControl" Name="Webpage" Label=" Name of Web Page" LabelPosition="Top" > +             <WebpageControlOptions AllowScript="false"> +                <Link UrlRoot="URL of Web Page" URLPath="URL path with parameters > +       <Param Index="0" Value="Param Value 0"/> +       <Param Index="1" Value="Param Value 1"/> +       <Param Index="2" Value="Param Value 2"/> +                </Link> +             </WebpageControlOptions> +          </Control> +       </Column> +    </Group> + </Tab> + ``` + + Replace *Tab Label*, *URL of Web Page, URL path with parameters*, and *Param Value 1, 2, and 3* with the information that you want to appear on the work item form. + + - **To specify HTML content**: + + ``` + <Tab Label="Tab Label"> +    <Group> +       <Column PercentWidth="100"> +          <Control Type="WebpageControl"> +             <Content> +                <![CDATA[HTML Content]]> +             </Content> +          </Control> +       </Column> +    </Group> + </Tab> + ``` + + Replace *Tab Label* and *HTML Content* with the information that you want to appear on the work item form. + + > [!NOTE] + > For best results, every control or group should display in a column even if the column spans the full width of the form. In turn, every column should display in a group even if the group has no visible label or boundary. + +3. Save your changes to the XML file. + +4. Use `witadmin importwitd` to import the new work item type to a single project. To add the work item type to your process template, see [Add type definitions for work items](process-templates/add-wit-definitions-process-template.md). + +<a name="Verify"></a> +## Verify the Web page or HTML content appears in the form + +1. In Team Explorer, open Work Items for the team project that contains the WIT definition that you modified, and choose ![Refresh](_img/icon_refreshnode.png "Icon_refreshNode") **Refresh**. + + The latest updates are downloaded from the server, including the changes that you just imported. Wait several seconds until the **Work Items** node is refreshed. Nodes that are still loading display the word **working**. + +2. Create a work item using the WIT that you modified. + + Verify that the Web page or HTML content appears on the form as expected. + +3. Choose **Close** to close the new work item. + +## Related notes +- [Customize your work tracking experience](../customize/customize-work.md) +- [Specify work item form controls](specify-work-item-form-controls.md) +- [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md) +- [Link and Param](link-param-xml-elements-reference.md) +- [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md) \ No newline at end of file diff --git a/docs/work/reference/enable-remote-audio-capture.md b/docs/work/reference/enable-remote-audio-capture.md new file mode 100644 index 00000000000..d97c93dd51d --- /dev/null +++ b/docs/work/reference/enable-remote-audio-capture.md @@ -0,0 +1,66 @@ +--- +title: Enable remote audio capture | VSTS & TFS +description: Configures audio redirection settings to record audio as part of a feedback or testing session on a remote machine that is running Microsoft Feedback Client, Test Runner, or Exploratory Testing window - VSTS & TFS +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 98e82b7a-768a-4fee-8259-0d8a578c0026 +ms.author: kaelli +ms.manager: douge +ms.date: 02/22/2017 +--- + +# Enable remote audio capture + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +To record audio, you must have an audio recording device configured on your computer, or on a remote machine if you access Microsoft Feedback Client, Test Runner, or Exploratory Testing from a remote device. + +To record audio as part of a feedback or testing session on a remote machine that is running Microsoft Feedback Client, Test Runner, or Exploratory Testing window, you must configure audio redirection settings on the remote machine. You must also enable record from this computer when you connect to the remote machine. You can perform this procedure only if your local computer is running Windows 7 or Windows Server 2008 R2. + +> [!IMPORTANT] +> We recommend that you open Microsoft Feedback Client on your local computer. Redirection will decrease audio quality. Microsoft Feedback Client does not require you to record audio as part of the feedback session. + +## To set a default microphone on your local computer + To record audio from your local computer, you must set a microphone device as the default device. + +1. Choose **Start, Control Panel**. + +2. In the Control Panel window, choose the **Hardware and Sound** link, and then choose **Sound**. + +3. In the Sound window, choose the **Recording** tab. + +4. Select a recording device from the list provided and then choose **Set Default**. + +## To enable remote audio capture + +> [!IMPORTANT] +> If you edit the registry incorrectly, you might severely damage your system. Before you make any changes to the registry, you should back up any valued data on the computer. + +1. Choose **Start**, choose **Run**, enter **regedit**, choose the **OK** button, and then set the value of the following registry key to **0**. + + `HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp\fDisableAudioCapture` + + For more information about how to set values of registry keys, see the following page on the Microsoft website: [How to add, modify, or delete registry subkeys and values by using a registration entries (.reg) file](http://go.microsoft.com/fwlink/?LinkId=227171). + +2. To connect to the remote machine, choose **Start**, choose **Run**, enter `mstsc`, and then choose the **OK** button. + + The **Remote Desktop Connection** dialog box opens. + + ![Enable remote audio](_img/alm_rm_remoteaudio.png "ALM_RM_RemoteAudio") + +3. In the **Computer** list, choose or enter the name of the computer to which you want to connect, and, in the **User name** box, enter your user name. + +4. On the **Local Resources** tab, choose the **Settings** button. + +5. Under **Remote audio recording**, choose the **Record from this computer** option button, and then choose the **OK** button. + +6. Choose the **Connect** button. + +7. Exit and restart whichever client tool that you are using, for example Microsoft Feedback Client, Test Runner, or Exploratory Testing. + + You must restart you client in order for it to register the audio settings. + +## Related notes + [Exploratory testing](../../manual-test/getting-started/perform-exploratory-tests.md) + [Run your tests](../../manual-test/getting-started/run-manual-tests.md) + [Provide feedback using the Microsoft Feedback Manager](../connect/give-feedback.md) diff --git a/docs/work/reference/error/_img/alm_cnt_runas.png b/docs/work/reference/error/_img/alm_cnt_runas.png new file mode 100644 index 00000000000..428d9176ccf Binary files /dev/null and b/docs/work/reference/error/_img/alm_cnt_runas.png differ diff --git a/docs/work/reference/error/_img/alm_em_netprogsupport.png b/docs/work/reference/error/_img/alm_em_netprogsupport.png new file mode 100644 index 00000000000..7bbcb53bfd7 Binary files /dev/null and b/docs/work/reference/error/_img/alm_em_netprogsupport.png differ diff --git a/docs/work/reference/error/attachment-upload-failed.md b/docs/work/reference/error/attachment-upload-failed.md new file mode 100644 index 00000000000..ee1d9462a9a --- /dev/null +++ b/docs/work/reference/error/attachment-upload-failed.md @@ -0,0 +1,24 @@ +--- +title: Attachment upload failed with the error: The underlying connection was closed: An unexpected error occurred on a receive | VSTS & TFS +description: This message might appear in a dialog box when you save a work item that has attachments +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 5d0e19c4-69fc-469e-93a0-f6d1ebd96777 +ms.author: kaelli +ms.manager: douge +ms.date: 02/22/2017 +--- + +# Attachment upload failed with the error: The underlying connection was closed: An unexpected error occurred on a receive + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +This message might appear in a dialog box when you save a work item that has attachments. The problem might be intermittent and difficult to reproduce. + +**Possible Causes** + +The client computer might not be configured to automatically detect the link speed of its network adapter. This setting might decrease performance between the client computer and Visual Studio Team Foundation Server. + +**Solutions** + +On the client computer, enable automatic detection of the link speed for the network adapter. For more information, see [Configure a network adapter to automatically adjust speed](../configure-network-adapter-automatically-adjust-speed.md). \ No newline at end of file diff --git a/docs/work/reference/error/tf237002-cannot-open-document-excel-not-installed.md b/docs/work/reference/error/tf237002-cannot-open-document-excel-not-installed.md new file mode 100644 index 00000000000..ec7bf88371b --- /dev/null +++ b/docs/work/reference/error/tf237002-cannot-open-document-excel-not-installed.md @@ -0,0 +1,41 @@ +--- +title: TF237002-Cannot open the document because Microsoft Excel 2007 or later, or one of its components is not installed | VSTS & TFS +description: Appears when a Team Foundation add-in has been disabled in an Office client. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: e10dc22d-2d09-40d8-8a90-37f6f54412ee +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF237002: Cannot open the document because Microsoft Excel 2007 or later, or one of its components is not installed + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +Error message TF237002 or TF400593 appears when a Team Foundation add-in has been disabled in an Office client, or Office Primary Interop Assemblies are not installed or were damaged after they were installed. + + The **Team** menu or **Team** ribbon appears when you install Visual Studio. You can install Visual Studio Community for free [from the Visual Studio download page](http://www.visualstudio.com/downloads/download-visual-studio-vs). + + If the **Team** menu or **Team** ribbon doesn't appear in your Office client, try re-enabling the Team Foundation add-in. If you continue to have problems, verify that the .NET Programmability Support option is configured correctly. As a final solution, try repairing your Office client. + +### To re-enable the Team Foundation Add-in in an Office client + +See [How to: Re-enable an Add-in That Has Been Disabled](http://msdn.microsoft.com/library/ms268871.aspx). + +> [!TIP] +> Usually you re-enable an add-in by choosing **COM add-ins**. However, if you don't see it there, choose the **Disabled Items** option. + +### To add a missing component in an Office client + +1. See [Install or remove individual Office programs and components](http://office.microsoft.com/access-help/install-or-remove-individual-office-programs-and-components-HA010354261.aspx?CTT=1). + +2. Verify or configure the .NET Programmability Support option to **Run from My Computer**. + + Locate the .NET Programmability Support option under Microsoft Excel or other client in the Office suite. + + ![Install .NET Programmability Support option](_img/alm_em_netprogsupport.png "ALM_EM_NetProgSupport") + +### To repair your Office client + +- See [How to use the repair process in the 2007 Office programs](http://support.microsoft.com/kb/924614). \ No newline at end of file diff --git a/docs/work/reference/error/tf24023-tfs-configuration-failure.md b/docs/work/reference/error/tf24023-tfs-configuration-failure.md new file mode 100644 index 00000000000..65996af4efe --- /dev/null +++ b/docs/work/reference/error/tf24023-tfs-configuration-failure.md @@ -0,0 +1,55 @@ +--- +title: TF24023-Team Foundation Server configuration failure | TFS +description: Occurs when the New Team Project Wizard is unable to connect to the Team Foundation Server (TFS) while creating a team project +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 83546f98-1ca6-4b07-afe5-134df7f291bf +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# TF24023: Team Foundation Server Configuration Failure. The New Team Project Wizard work item component could not connect to the Team Foundation Server {0}. + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the New Team Project Wizard is unable to connect to the Team Foundation Server {*name*} while creating a team project. Possible causes of this error include: + +- A server in the Team Foundation deployment is incorrectly configured. This problem is especially common after a server move, failover, or other maintenance activity. + +- The server that hosts Team Foundation Server is offline. + +- A critical file is missing from the server. + + Because the wizard could not connect to the Team Foundation server, the wizard was unable to create the required directory on the server. + +### To correct this error + +1. Confirm that your local computer is connected to the network and can access network resources. + +2. Contact your Team Foundation Server administrator to verify that the server configuration is correct. + +3. Contact the administrator for the Team Foundation Server {*name*} to confirm the availability of the server on the network. + +4. If the server is available on the network, review the team project creation log, and follow any instructions provided. + + The log shows each action taken by the wizard at the time of the failure and may include additional details about the error. To open the log: + + 1. Start Notepad. + + 2. On the **File** menu, click **Open**. + + 3. Navigate to $:\Documents and Settings\\*user name*\Local Settings\Temp\Team Services_TeamProjectCreation_yyyy_mm_dd_hh_mm_ss.log. + + 4. Click **Open**. + + 5. On the **Edit** menu, click **Find**. + + 6. In the **Find what** dialog box, type **Exception** or **Error**, and then click **Find Next**. + + 7. Review the log entries to find network or file related issues. + +5. If the problem persists, contact your Team Foundation Server administrator. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30004-ntpw-encountered-error-initializing-plug-in.md b/docs/work/reference/error/tf30004-ntpw-encountered-error-initializing-plug-in.md new file mode 100644 index 00000000000..c3e8a713e9c --- /dev/null +++ b/docs/work/reference/error/tf30004-ntpw-encountered-error-initializing-plug-in.md @@ -0,0 +1,24 @@ +--- +title: TF30004-The New Team Project Wizard encountered an unexpected error while initializing the {0} plug-in. | VSTS & TFS +description: The Wizard was not able to initialize the plug-in after an attempt to create the team project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 40cfd0f7-87fb-451e-a49d-7ffea4011e24 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + + +# TF30004: The New Team Project Wizard encountered an unexpected error while initializing the {0} plug-in + + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +When the New Team Project Wizard used the plug-in {*name*} to create the team project, the Wizard was not able to initialize the plug-in. This error usually occurs when the plug-in is corrupted or the XML is malformed. + +### To correct this error + +1. Contact the developer or vendor who created the plug-in. + +2. If the problem persists, re-install Team Foundation Server. \ No newline at end of file diff --git a/docs/work/reference/error/tf30005-ntpw-group-security-component-cannot-connect-tfs.md b/docs/work/reference/error/tf30005-ntpw-group-security-component-cannot-connect-tfs.md new file mode 100644 index 00000000000..81725d2dc96 --- /dev/null +++ b/docs/work/reference/error/tf30005-ntpw-group-security-component-cannot-connect-tfs.md @@ -0,0 +1,51 @@ +--- +title: TF30005-The New Team Project Wizard group security component could not connect | TFS +description: Occurs when the New Team Project Wizard is unable to connect to the application-tier server {name} while creating a team project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: eecc6e96-3c39-4cff-aad4-5ab57582ba2e +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# TF30005: The New Team Project Wizard group security component could not connect to the Team Foundation Server {0} + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the New Team Project Wizard is unable to connect to the application-tier server {*name*} while creating a team project. An active connection cannot be made due to one of the following conditions: + +- A server in the Team Foundation deployment is incorrectly configured. This problem is especially common after a server move, failover, or other maintenance activity. + +- The server {name} that hosts SharePoint Products is offline. + +- A critical file from the server {name} is missing. + + Because the connection to Team Foundation Server failed, the wizard could not create security groups and assign permissions on the server. + +### To correct this error + +1. Contact your Team Foundation Server administrator to verify that the server configuration is correct. + +2. If the server configuration is correct, review the team project creation log and follow any instructions provided. + + The log shows each action taken by the wizard at the time of the failure and may include additional details about the error. To open the log: + + 1. Start Notepad. + + 2. On the **File** menu, click **Open**. + + 3. Navigate to $:\Documents and Settings\\*user name*\Local Settings\Temp\Team Services_TeamProjectCreation_yyyy_mm_dd_hh_mm_ss.log. + + 4. Click **Open**. + + 5. On the **Edit** menu, click **Find**. + + 6. In the **Find what** dialog box, type **Exception** or **Error**, and then click **Find Next**. + + 7. Review the log entries to find network or file related issues. + +3. If the problem persists, contact your Team Foundation Server administrator. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30015-ntpw-no-connect-sql-server-reporting-server.md b/docs/work/reference/error/tf30015-ntpw-no-connect-sql-server-reporting-server.md new file mode 100644 index 00000000000..77181919e5b --- /dev/null +++ b/docs/work/reference/error/tf30015-ntpw-no-connect-sql-server-reporting-server.md @@ -0,0 +1,59 @@ +--- +title: TF30015-The New Team Project Wizard could not connect to the specified SQL Server Reporting Services server | TFS +description: The New Team Project Wizard was unable to connect to {name}. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 97f7dbf0-20f4-4e8d-94d2-403ca581d0a2 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# TF30015: The New Team Project Wizard could not connect to the specified SQL Server Reporting Services server {0}. + + +**TFS 2017 | TFS 2015 | TFS 2013** + + +The New Team Project Wizard was unable to connect to {*name*}, the server that hosts SQL Server Reporting Services. The reason for the failed connection cannot be determined at this time. + + Possible causes of this error include: + +- You do not have the required permissions to create a team project. + +- A server in the Team Foundation deployment is incorrectly configured. This problem is especially common after a server move, failover, or other maintenance activity. + +- The server that hosts SQL Server Reporting Services is offline. + + Because the wizard could not connect to the server that hosts SQL Server Reporting Services, the wizard was unable to create the SQL Server Reporting Services site on that server. + +### To correct this error + +1. Confirm that you have the required permissions to create a team project. This includes the required permissions on each server that hosts Team Foundation Server, SharePoint Products, and SQL Server Reporting Services. For more information, see [Create a team project](../../../accounts/create-team-project.md). + +2. Contact your Team Foundation Server administrator to verify that the server configuration is correct. + +3. Contact the administrator for the SQL Server Reporting Services server {*name*} to confirm that the server is available on the network. + +4. If the server shows available on the network, review the team project creation log and follow any instructions provided. + + The log shows each action taken by the wizard at the time of the failure and may include additional details about the error. To open the log: + + 1. Start Notepad. + + 2. On the **File** menu, click **Open**. + + 3. Navigate to $:\Documents and Settings\\*user name*\Local Settings\Temp\Team Services_TeamProjectCreation_yyyy_mm_dd_hh_mm_ss.log. + + 4. Click **Open**. + + 5. On the **Edit** menu, click **Find**. + + 6. In the **Find what** dialog box, type **Exception** or **Error**, and then click **Find Next**. + + 7. Review the log entries to find network or file related issues. + +5. If the problem persists, contact your Team Foundation Server administrator. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30016-no-permission-to-create-sql-server-reporting-site.md b/docs/work/reference/error/tf30016-no-permission-to-create-sql-server-reporting-site.md new file mode 100644 index 00000000000..8c4881611ed --- /dev/null +++ b/docs/work/reference/error/tf30016-no-permission-to-create-sql-server-reporting-site.md @@ -0,0 +1,26 @@ +--- +title: TF30016-No permissions to create a SQL Server Reporting Services site | TFS +description: Occurs when the permissions granted to the user account are not sufficient to enable to create the reporting site. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: edb242fd-5839-440d-9ee1-f24e0b279137 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# TF30016: You do not have permission to create a new SQL Server Reporting Services site on the server {0}. + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the permissions granted to your user account on the SQL Server Reporting Services server {*name*} are not sufficient to enable you to create the reporting site. You use the reporting site as the team project Report site. You must be granted specific permission by the SQL Server Reporting Services administrator. + +### To correct this error + +- Contact the administrator for the SQL Server Reporting Services server {*name*} and ask that your user account be assigned the role of **Content Manager**. See also [Grant permissions to view or create reports](../../../report/admin/grant-permissions-to-reports.md) + +You must also have the **Full Control** permission set on the server that hosts SharePoint Products. Your Team Foundation Server administrator may also be able to grant you the required permissions. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) +- [Grant permissions to view or create reports](../../../report/admin/grant-permissions-to-reports.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30017-tea-explorer-cannot-connect-tfs-expired-credentials.md b/docs/work/reference/error/tf30017-tea-explorer-cannot-connect-tfs-expired-credentials.md new file mode 100644 index 00000000000..bd17eeb1b29 --- /dev/null +++ b/docs/work/reference/error/tf30017-tea-explorer-cannot-connect-tfs-expired-credentials.md @@ -0,0 +1,69 @@ +--- +title: TF30017-Team Explorer cannot connect to TFS | VSTS & TFS +description: Team Explorer will not connect to a server that does not have a valid CA certificate. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: eb239d52-9b7b-41c9-98c6-118fb2f2173e +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + + +# TF30017: Team Explorer cannot connect to Team Foundation Server {0}. The security certificate is either not installed, misconfigured, or expired. + +**TFS 2017 | TFS 2015 | TFS 2013** + +A security certificate associates an identity with a public key, and only the owner of the certificate knows the corresponding private key. The private key enables the owner to make a digital signature or decrypt information encrypted with the corresponding public key. A certification authority (CA) issues server and client authentication certificates to the servers and clients that request them. + +Team Explorer will not connect to a server that does not have a valid CA certificate. This error indicates there is a problem with the CA certificate on the application-tier server. When Team Explorer connects with the application-tier server, it reads the CA certificate on the server to determine whether the server is authentic and is safe to connect to. There are at least three conditions that can cause Team Explorer to avoid connecting to the server: + +- The CA certificate is not from a trusted authority, is not installed correctly, or is missing. + +- The CA certificate has expired and the certificate must be re-issued with an unexpired date. + +- The name on the CA certificate is not correct or does not match the URL of the page used by Team Explorer. For example, if the certificate is issued to AdventureWorks.com, but the URL used by Team Explorer is www.AdventureWorks.com, the mismatch will cause this error. The certificate must be reissued using the correct name, or the URL must be changed to match the name on the certificate. + +### To determine the specific cause of this error + +1. On the **Start** menu, click **Internet Explorer**. + +2. In the **Address** bar, type **https://servername:portnumber/bisserver/** + +3. In the **Security Alert** dialog box, click the **Content** tab, and then click **Certificates**. + +4. On the **Certificate** dialog box, click the **Untrusted Publishers** tab, select the publisher, and then click **View**. + +5. Look for a yellow warning icon in front of one of the following messages: + + 1. **The security certificate was issued by a company you have not chosen to trust. View the certificate to determine whether you want to trust the certifying authority.** + + 2. **The security certificate has expired.** + + 3. **The security certificate name does not match the name of the page you are trying to view.** + +6. If the red **X** appears before a. and you have Administrator permissions set on the client computer, follow the steps in the next set of procedures later in this document. + + -or - + + If the red **X** appears before b. or c. or you do not have Administrator permissions set on the client computer, contact the system administrator for the server and ask them to reconfigure or renew the CA certificate. + +### To correct this error if the CA certificate is not installed or from a trusted authority + +1. In the **Security Alert** dialog box, click **View Certificate**. + +2. In the **Certificate** dialog box, click the **Certification Path** tab. + +3. On the **Certification Path** tab, click the top node (with the red icon in front of the node name), and then click **View Certificate**. + +4. In the **Certificate** dialog box, click **Install Certificate**. + +5. In the **Certificate Import Wizard**, click **Next**. + +6. On the **Certificate Store** wizard page, click **Next**. + +7. On the **Completing the Certificate Import Wizard** page, click **Finish**. + +8. In the **Security Warning** dialog box, click **Yes**. + +9. Close Internet Explorer and try connecting to Team Foundation Server again. \ No newline at end of file diff --git a/docs/work/reference/error/tf30022-ntpw-no-connect-sharepoint.md b/docs/work/reference/error/tf30022-ntpw-no-connect-sharepoint.md new file mode 100644 index 00000000000..4e66f19200c --- /dev/null +++ b/docs/work/reference/error/tf30022-ntpw-no-connect-sharepoint.md @@ -0,0 +1,52 @@ +--- +title: TF30022-The New Team Project Wizard could not connect to the Windows SharePoint Services | VSTS & TFS +description: The New Team Project Wizard is unable to connect to the server {name} that hosts SharePoint Products while creating a team project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: dd798fbb-8e24-4a33-91f6-7167138d7414 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30022: The New Team Project Wizard could not connect to the Windows SharePoint Services server {0}. + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the New Team Project Wizard is unable to connect to the server {*name*} that hosts SharePoint Products while creating a team project. An active connection cannot be made due to one of the following conditions: + +- The local computer is not connected to the network. + +- The network is not operational. + +- The server {name} that hosts SharePoint Products is offline. + +- A critical file from the server {name} is missing. + + Because the connection to Team Foundation Server failed, the wizard could not create the SharePoint site on the server. + +### To correct this error + +1. Confirm that your local computer is connected to the network and can access network resources. + +2. Contact the administrator for server {*name*} that hosts SharePoint Products to confirm availability of the server on the network. + +3. If the server shows available on the network, review the team project creation log and follow any instructions provided. + + The log shows each action taken by the wizard at the time of the failure and may include additional details about the error. To open the log: + + 1. Open Notepad. + + 2. On the **File** menu, click **Open**. + + 3. Navigate to $:\Documents and Settings\\*user name*\Local Settings\Temp\Team Services_TeamProjectCreation_yyyy_mm_dd_hh_mm_ss.log. + + 4. Click **Open**. + + 5. On the **Edit** menu, click **Find**. + + 6. In the **Find what** dialog box, type **Exception** or **Error**, and then click **Find Next**. + + 7. Review the log entries to find network or file related issues. + +4. If the problem persists, contact your Team Foundation Server administrator. \ No newline at end of file diff --git a/docs/work/reference/error/tf30026-cannot-change-file-name-extension.md b/docs/work/reference/error/tf30026-cannot-change-file-name-extension.md new file mode 100644 index 00000000000..3910908bbdc --- /dev/null +++ b/docs/work/reference/error/tf30026-cannot-change-file-name-extension.md @@ -0,0 +1,29 @@ +--- +title: TF30026-You cannot change the file name extension | TFS +description: Occurs when you try to change the file extension on a file stored on a server that hosts SharePoint Products. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 71f64811-274b-4274-a430-b3ef4b33bb20 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# TF30026: You cannot change the file name extension using Team Explorer. Do you want to continue? + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when you try to change the file extension on a file stored on a server that hosts SharePoint Products. SharePoint Products does not support changing file extensions after a file has been checked into SharePoint Products. If you continue with the name change, the characters you type will be made a part of the filename instead of the extension. + + To change the file extension, you must copy the file to your local computer, rename the file, and then upload the renamed file to the document library. You can delete the file with the old extension if the file is no longer required. + +### To correct this error + +1. Expand the **Documents** node, right-click the document that you want, and then click **Open**. + +2. Save the document to a location on your local computer. + +3. Rename the file extension on your local computer. + +4. Under the **Documents** node, right-click the folder where the renamed file is to be stored, and then click **Upload Document**. + +5. In the **Open** dialog box, locate the renamed file on your local computer, click the file, and then click **Open**. \ No newline at end of file diff --git a/docs/work/reference/error/tf30030-team-explorer-could-not-connect-to-tfs.md b/docs/work/reference/error/tf30030-team-explorer-could-not-connect-to-tfs.md new file mode 100644 index 00000000000..5e2bc4cb369 --- /dev/null +++ b/docs/work/reference/error/tf30030-team-explorer-could-not-connect-to-tfs.md @@ -0,0 +1,52 @@ +--- +title: TF30030-Team Explorer could not connect to Team Foundation Server | TFS +description: Occurs when Team Explorer is not synchronized with or cannot establish a connection to the server that hosts SharePoint Products. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: c93d61bf-718f-4dc0-b77a-6c596c9fff1d +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# TF30030: Team Explorer could not connect to Team Foundation Server. + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when Team Explorer is not synchronized with or cannot establish a connection to the server that hosts SharePoint Products. This error may occur under the following conditions, listed in the most likely order of occurrence: + +- Team Explorer that is running on the local computer has not been refreshed to reflect recent changes. + +- You do not have sufficient user permissions to connect to the server that hosts SharePoint Products. + +- The network is not operational. + +- The application-tier server is offline. + + You can use the procedures in the following table to correct the problem. + +### To correct this error when Team Explorer has not been refreshed + +1. In Team Explorer, click the **Documents** node. + +2. Under the **View** menu,click **Refresh**. + +3. Retry the action that you were performing when you encountered this error. + +### To correct this error when caused by insufficient permissions + +- Contact your Team Foundation Server administrator and request that they add the necessary permissions to your user account. + +### To correct this error when caused by network problems + +1. Confirm that your network cable is securely connected to the network port on your computer. + +2. If the problem persists, contact your network administrator. + +### To correct this error when caused by Team Foundation Server being offline + +- Contact the Team Foundation Server administrator and ask that the application-tier server be restarted. + +## Related notes +- [Add an administrator](../../../security/set-project-collection-level-permissions.md) +- [Connect to team projects](../../../connect/connect-team-projects.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30031-team-explorer-no-open-document-service-no-run.md b/docs/work/reference/error/tf30031-team-explorer-no-open-document-service-no-run.md new file mode 100644 index 00000000000..211f54a3ada --- /dev/null +++ b/docs/work/reference/error/tf30031-team-explorer-no-open-document-service-no-run.md @@ -0,0 +1,37 @@ +--- +title: TF30031-Team Explorer can't open a document because the WebClient service isn't running | TFS +description: Occurs when Team Explorer tries to open a document stored in the document library for a team project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 80812479-89ac-41e8-8f6f-21bd4254f863 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30031: Team Explorer cannot open the document because the WebClient service is not running. + + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when Team Explorer tries to open a document stored in the document library for a team project. The WebClient service is not running on the local computer. You can use the procedure below to help you correct the problem. + +### To restart the WebClient service + +1. On the local computer where Team Explorer is installed, click **Start**, and then click **Control Panel**. + +2. In Control Panel, double-click **Administrative Tools**. + +3. On the **Administrative Tools** dialog box, double-click **Services**. + +4. Select **WebClient** from the list. + +5. On the **Action** menu, click **Properties**. + +6. Click the **General** tab of the **WebClient Properties** dialog box. + +7. In the **Startup type** drop-down list, select **Automatic**, and then click **OK**. + +8. Restart your computer. + +9. Retry the action you were performing when you encountered this error. \ No newline at end of file diff --git a/docs/work/reference/error/tf30032-ntpw-common-structure-component-no-connect-tfs.md b/docs/work/reference/error/tf30032-ntpw-common-structure-component-no-connect-tfs.md new file mode 100644 index 00000000000..62af68a5777 --- /dev/null +++ b/docs/work/reference/error/tf30032-ntpw-common-structure-component-no-connect-tfs.md @@ -0,0 +1,50 @@ +--- +title: TF30032-The New Team Project Wizard can't connect to TFS | TFS +description: Occurs when the New Team Project Wizard is unable to connect to the application-tier {name} when creating a team project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 889f7f5e-9610-47f4-b6a0-592325b75151 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30032: The New Team Project Wizard common structure component could not connect to the Team Foundation Server {0}. + + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the New Team Project Wizard is unable to connect to the application-tier {*name*} when creating a team project. An active connection cannot be made because of one of the following conditions: + +- A server in the Team Foundation deployment is incorrectly configured. This problem is especially common after a server move, failover, or other maintenance activity. + +- A critical file from the server {name} is missing. + + Because the connection to Team Foundation Server failed, the wizard could not create the team project data objects on the application-tier server. + +### To correct this error + +1. Contact your Team Foundation Server administrator to verify that the server configuration is correct. Your administrator can verify by using the **/view** option of the **TfsAdmin ConfigureConnections** command to. For more information, see [Settings Command](http://msdn.microsoft.com/en-us/2b96fbbf-34c8-4500-82d8-724cc65dc9a4). + +2. If the server configuration is correct, review the team project creation log and follow any instructions provided. + + The log shows each action taken by the wizard at the time of the failure and may include additional details about the error. To open the log: + + 1. Start Notepad. + + 2. On the **File** menu, click **Open**. + + 3. Navigate to $:\Documents and Settings\\*user name*\Local Settings\Temp\Team Services_TeamProjectCreation_yyyy_mm_dd_hh_mm_ss.log. + + 4. Click **Open**. + + 5. On the **Edit** menu, click **Find**. + + 6. In the **Find what** dialog box, type **Exception** or **Error**, and then click **Find Next**. + + 7. Review the log entries to find network or file related issues. + +3. If the problem persists, contact your Team Foundation Server administrator. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30034-you-do-not-have-permission-to-create-team-project.md b/docs/work/reference/error/tf30034-you-do-not-have-permission-to-create-team-project.md new file mode 100644 index 00000000000..62a8dd451ea --- /dev/null +++ b/docs/work/reference/error/tf30034-you-do-not-have-permission-to-create-team-project.md @@ -0,0 +1,30 @@ +--- +title: TF30034-No permissions to create a new team project | VSTS & TFS +description: Occurs when a user tries to create a team project and doesn't have the required permissions +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 885f02d8-c070-4709-a34d-c891cad30493 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + + +# TF30034: You do not have permission to create a new team project + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +This error may occur under the following conditions: + +- When the New Team Project Wizard connects to Team Foundation Server to determine whether your user account has been granted permission to create a team project. + +- The wizard, while creating a team project, encounters another server component (for example, the virtual directory used by Internet Information Services) and does not find the required permissions set on your user account. + + To create a team project, you must have the required permissions set on each server that hosts Team Foundation Server, SharePoint Products, and SQL Server Reporting Services. For more information, see [Create a team project](../../../accounts/create-team-project.md) . + +### To correct this error + +- Contact your Team Foundation Server or project collection administrator and ask that the required permissions be added to your user account. This includes the required permissions on each server that hosts Team Foundation Server, SharePoint Products, and SQL Server Reporting Services. + +For more information, see [Add accounts to administer project collections](../../../security/set-project-collection-level-permissions.md). + \ No newline at end of file diff --git a/docs/work/reference/error/tf30082-team-explorer-error-launching-document.md b/docs/work/reference/error/tf30082-team-explorer-error-launching-document.md new file mode 100644 index 00000000000..47684dbb28c --- /dev/null +++ b/docs/work/reference/error/tf30082-team-explorer-error-launching-document.md @@ -0,0 +1,45 @@ +--- +title: TF30082-Team Explorer encountered the following error while launching a document: {0}. | TFS +description: Occurs when Team Explorer tries to open a document for editing with another application. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 99ee70ef-3389-4f78-a600-3772b70c0022 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# TF30082: Team Explorer encountered the following error while launching a document: {0} + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when Team Explorer tries to open a document for editing with another application, but the other application is not available on the local computer. + + When you use the **Open** command to read a team project document, Team Explorer calls Internet Explorer (or some other Internet browser) to open and display the document. When you use the **Edit** command to make changes in a team project document, Team Explorer calls the Web Client service to open the application associated with the document file type. When using the **Edit** command, one of the following conditions can cause this error: + +- There is no application configured in Windows Explorer (or File Explorer) to handle the file name extension of the document that you are trying to open. + +- The associated application is not installed or is not available on the computer. + +### To correct this error when there is no application associated with the file type + +1. On the **Start** menu, click **Control Panel**, and then double-click **Folder Options**. + +2. In the **Folder Options** dialog box, click the **File Types** tab, and then click **New**. + +3. In the **File Extension** text box, type the **file** name **extension**, and then click **Advanced>>**. + +4. In the **Associated File Type** drop-down list, select the file type, and then click **OK**. + +5. On the File Types tab of the **Folder Options** dialog box, select the extension and file type to be associated with an application, and then click **Change**. + +6. In the **Windows** dialog box, select **Select the program from a list**, and then click **OK**. + +7. In the **Open With** dialog box, select the program that you want to use to open this file, and then click **OK**. + +### To correct this error when the associated application is missing + +1. If you are an Administrator on your computer, install the missing program. + +2. Follow the steps in the section earlier to associate the file type with the application. + +3. If the problem persists, contact your team project administrator. \ No newline at end of file diff --git a/docs/work/reference/error/tf30147-ntpw-no-retrieve-confirmation-value-error.md b/docs/work/reference/error/tf30147-ntpw-no-retrieve-confirmation-value-error.md new file mode 100644 index 00000000000..07d27f0b268 --- /dev/null +++ b/docs/work/reference/error/tf30147-ntpw-no-retrieve-confirmation-value-error.md @@ -0,0 +1,41 @@ +--- +title: TF30147-The New Team Project Wizard could not retrieve the confirmation values because of the error: {0} | TFS +description: Occurs when the New Team Project Wizard is building the wizard page that summarizes all the selections you made and text you typed up to that point. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 6347fdd8-cac5-4614-91b4-ef4d5f4dc06d +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# TF30147: The New Team Project Wizard could not retrieve the confirmation values because of the error: {0} + + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the New Team Project Wizard is building the **Confirm Team Project Settings** wizard page that summarizes all the selections you made and text you typed up to that point. Each wizard page contributes text to the confirmation page, and if the contributing wizard page encounters an unexpected error while passing the text, this error is displayed. The procedures below will help you correct this error. + +### To correct this error + +1. Close the New Team Project Wizard and try running the wizard again. + +2. If you get this error message again, review the team project creation error log to identify the name of the plug-in. + + 1. Open Notepad. + + 2. On the **File** menu, click **Open**. + + 3. Navigate to $:\Documents and Settings\\*user name*\Local Settings\Temp\Team Services_TeamProjectCreation_yyyy_mm_dd_hh_mm_ss.log. + + 4. Click **Open**. + + 5. On the **Edit** menu, click **Find**. + + 6. In the **Find what** dialog box, type **Exception**, and then click **Find Next**. + + 7. Review the log entry and note the name of the plug-in and the vendor. + +3. Contact the vendor who created or supplied the plug-in. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30167-new-team-project-wizard-could-not-finish-creating-the-project.md b/docs/work/reference/error/tf30167-new-team-project-wizard-could-not-finish-creating-the-project.md new file mode 100644 index 00000000000..8d14bc118df --- /dev/null +++ b/docs/work/reference/error/tf30167-new-team-project-wizard-could-not-finish-creating-the-project.md @@ -0,0 +1,25 @@ +--- +title: TF30167-The New Team Project Wizard could not finish creating the project {0}. | TFS +description: Occurs when the wizard uses a third-party plug-in while creating the team project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: be5da2f1-eaa7-4a13-8c60-09a13cb65d1c +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30167: The New Team Project Wizard could not finish creating the project {0}. + +**TFS 2017 | TFS 2015 | TFS 2013** + +The New Team Project Wizard encountered an unexpected error while creating the team project {*name*}. This problem can occur when the wizard uses a third-party plug-in while creating the team project, and the third-party plug-in encounters a critical error such as a stack overflow or running out of memory. + +### To correct this error + +1. Restart Team Explorer and run the New Team Project Wizard again. + +2. If the problem persists, contact your Team Foundation Server administrator. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30168-ntpw-failure-check-permission-create-projects.md b/docs/work/reference/error/tf30168-ntpw-failure-check-permission-create-projects.md new file mode 100644 index 00000000000..eef9cb39ac0 --- /dev/null +++ b/docs/work/reference/error/tf30168-ntpw-failure-check-permission-create-projects.md @@ -0,0 +1,52 @@ +--- +title: TF30168-The New Team Project Wizard experienced a failure checking your permissions to create projects | TFS +description: Occurs when the New Team Project Wizard starts and then checks to see whether your user account has permission set to create a team project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 5ec922a9-9b7a-4ccc-b1c5-5f8432e0c385 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30168: The New Team Project Wizard experienced a failure checking your permissions to create projects. + + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the New Team Project Wizard starts and then checks to see whether your user account has permission set to create a team project. An active connection cannot be made because of one of the following conditions: + +- A server in the Team Foundation deployment is incorrectly configured. This problem is especially common after a server move, failover, or other maintenance activity. + +- A critical file from the server {name} is missing. + +- The server that hosts Team Foundation Server is offline. + + The following procedures will help you correct the problem. + +### To correct this error + +1. Contact your Team Foundation Server administrator to verify that the server configuration is correct. + +2. If the server configuration is correct, review the team project creation log and follow any instructions provided. + + The log shows each action taken by the wizard at the time of the failure and may include additional details about the error. To open the log: + + 1. Start Notepad. + + 2. On the **File** menu, click **Open**. + + 3. Navigate to $:\Documents and Settings\\*user name*\Local Settings\Temp\Team Services_TeamProjectCreation_yyyy_mm_dd_hh_mm_ss.log. + + 4. Click **Open**. + + 5. On the **Edit** menu, click **Find**. + + 6. In the **Find what** dialog box, type **Exception** or **Error**, and then click **Find Next**. + + 7. Review the log entries to find network or file related issues. + +3. If the problem persists, contact your Team Foundation Server administrator. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30169-ntpw-no-download-process-template.md b/docs/work/reference/error/tf30169-ntpw-no-download-process-template.md new file mode 100644 index 00000000000..9a4cbba3bf1 --- /dev/null +++ b/docs/work/reference/error/tf30169-ntpw-no-download-process-template.md @@ -0,0 +1,41 @@ +--- +title: TF30169-The New Team Project Wizard was unable to download the process template {0}. | TFS +description: Provides the list of errors when the New Team Project Wizard unable to download the process template. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 6fda9d67-bbdc-432d-949a-2814e499b2c3 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# TF30169: The New Team Project Wizard was unable to download the process template {0}. + + +**TFS 2015 | TFS 2013** + +The New Team Project Wizard encountered a problem downloading or extracting the process template {*name*} selected to create the team project. This error can occur due to one of the following conditions: + +- Process templates are not available on the server that hosts SharePoint Products. + +- The server {name} that hosts SharePoint Products is offline. + +- The local computer does not have sufficient space in the temporary storage on the hard disk to store the entire process template file. A process template file can be up to 100 megabytes, which may be more space than is available on the local hard disk. + +- Your user account does not have sufficient permission to write data to the temporary storage directory on the local computer. + +- The hard disk on the local computer is not available. + + Because the connection to Team Foundation Server failed, the wizard could not download the process template. + +### To correct this error + +1. Confirm that your local computer is connected to the network and can access network resources. + +2. Contact the administrator for the server that hosts SharePoint Products to confirm the availability of the server on the network and request that the process templates be added to the server. For more information, see [Retrieve and Restore Missing Site Templates](https://msdn.microsoft.com/library/bb909677.aspx). + +3. If the server is available on the network and the process templates are available on the server, review the amount of available storage space for program downloads onto your local hard disk. For information about how to increase the available download space, see the online Help for your operating system. + +4. Contact the administrator for the local computer to confirm that your user account has sufficient permissions to write data to the storage area for local program downloads and that the local hard disk is functioning correctly. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30170-the-plug-in-failed-during-task-from-group.md b/docs/work/reference/error/tf30170-the-plug-in-failed-during-task-from-group.md new file mode 100644 index 00000000000..a5f6426bee1 --- /dev/null +++ b/docs/work/reference/error/tf30170-the-plug-in-failed-during-task-from-group.md @@ -0,0 +1,27 @@ +--- +title: TF30170-The plug-in {0} failed | VSTS & TFS +description: Occurs an error when a third-party plug-in does not operate in the manner the New Team Project Wizard expected it to operate. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 47085404-d5ec-4811-9fbd-84da3be422e6 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30170: The plug-in {0} failed during task {1} from group {2} + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +This error occurs when a third-party plug-in does not operate in the manner the New Team Project Wizard expected it to operate, and the plug-in does not return a meaningful error message about the problem. + + The error message displayed by the New Team Project Wizard provides the name of the plug-in, the name of the Task in the process template XML file the wizard was attempting to perform, and the name of the Group in the process template XML file where you can find the Task. + +### To correct this error + +1. Contact the developer or vendor that provided the plug-in. + +2. If the problem persists, reinstall the third-party plug-in. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30172-you-do-not-have-permission-to-create-team-project.md b/docs/work/reference/error/tf30172-you-do-not-have-permission-to-create-team-project.md new file mode 100644 index 00000000000..2217fa6461a --- /dev/null +++ b/docs/work/reference/error/tf30172-you-do-not-have-permission-to-create-team-project.md @@ -0,0 +1,29 @@ +--- +title: TF30172-You do not have permission to create a new team project. | VSTS & TFS +description: Display the error when you run the New Team Project Wizard. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 86cab4b8-7988-4cb7-b553-2cbb3ac70b29 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# TF30172: You do not have permission to create a new team project + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +You receive this error when your run the New Team Project Wizard under the following conditions: + +- Your **Create team project** permission isn't set to Allow. + + Correct this error by contacting your administrator and ask that the permission **Create new projects** be added to your user account. + + If your on-premises TFS supports SharePoint Products or SQL Server Reporting Services, you might need to have permissions set for those products as well. See [Add accounts to administer project collections](../../../security/set-project-collection-level-permissions.md). + +- You're client version isn't compatible with the TFS version where you're trying to create a team project. + + To create a team project or manage process templates on an on-premises TFS, you must connect using the same version level of Visual Studio or Team Explorer. That is, to create a team project for an on-premises TFS 2015, you must connect from Team Explorer 2015. You can [download and install released versions of Visual Studio Community](http://www.visualstudio.com/downloads/download-visual-studio-vs) in a side by side configuration for free. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) +- [Permission reference](../../../security/permissions.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30247-ntpw-no-load-plug-in.md b/docs/work/reference/error/tf30247-ntpw-no-load-plug-in.md new file mode 100644 index 00000000000..f8a78cec526 --- /dev/null +++ b/docs/work/reference/error/tf30247-ntpw-no-load-plug-in.md @@ -0,0 +1,41 @@ +--- +title: TF30247-The New Team Project Wizard could not load the plug-in | TFS +description: Occurs an error when a required plug-in is missing from the process template being used by the New Team Project Wizard to create a team project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 900b529d-989b-455e-960a-2553829b953f +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30247: The New Team Project Wizard could not load the plug-in "{0}" for process template "{1}". Select another process template or see the log file for more details + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when a required plug-in is missing from the process template being used by the New Team Project Wizard to [create a team project](../../../accounts/create-team-project.md). Two conditions can cause this error: + +- The name of the plug-in is missing or misspelled in the XML process template file. + +- The plug-in is not installed on the local computer. + + The following procedures will help you correct the error. + +### To correct this error if it is caused by an incorrect reference in the process template file + +1. Perform one of the following steps: + + - If you are using a TFS default process template, ask your administrator to repair the installation of TFS. + + - If the process template is provided by another company, [download the process template](../../guidance/manage-process-templates.md). + +2. Open the process template, and examine the names of the plug-ins. If possible, find the plug-in that is named in the error message. Confirm that it is intact, or correct any errors that you find. + +3. Upload the corrected process template to Team Foundation Server. + +4. Run the New Team Project Wizard again. + +### To correct this error if it is caused by a missing plug-in + +- Contact your Team Foundation Server administrator to have the plug-in installed on your computer, or select a different process template and try again. + diff --git a/docs/work/reference/error/tf30249-ntpw-no-retrieve-process-template-info.md b/docs/work/reference/error/tf30249-ntpw-no-retrieve-process-template-info.md new file mode 100644 index 00000000000..c124df6d38f --- /dev/null +++ b/docs/work/reference/error/tf30249-ntpw-no-retrieve-process-template-info.md @@ -0,0 +1,32 @@ +--- +title: TF30249-The New Team Project Wizard could not retrieve the process template | Team TFS +description: Occurs an error when the New Team Project Wizard cannot download the process template header information. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 3bdffbfa-9b0d-4222-8630-5e76330a511e +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30249: The New Team Project Wizard could not retrieve the process template information. + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the New Team Project Wizard cannot download the process template header information so the Wizard can display a list of the process templates available on the server. Because the actual process template XML files can be very large (up to 100 megabytes), the wizard downloads the smaller XML header file to save time. + + There are two likely causes for this error: + +- The network is not available. + +- Your user account does not have sufficient permissions to access and download the process template files. + + The following procedures will help you correct the problem. + +### To correct this error + +1. Confirm that your local computer is plugged into the network and can access network resources. + +2. Contact your Team Foundation Server administrator to confirm that the server is available on the network. + +3. Contact your Team Foundation Server administrator and ask that the required permission be added to your user account. \ No newline at end of file diff --git a/docs/work/reference/error/tf30277-insufficient-permissions-to-add-sharepoint-site.md b/docs/work/reference/error/tf30277-insufficient-permissions-to-add-sharepoint-site.md new file mode 100644 index 00000000000..e9b40e436e9 --- /dev/null +++ b/docs/work/reference/error/tf30277-insufficient-permissions-to-add-sharepoint-site.md @@ -0,0 +1,22 @@ +--- +title: TF30277-You do not have sufficient permissions on the Windows SharePoint Services at {0} to create a new site | TFS +description: Occurs when the permissions are not sufficient to allow the user to create a new SharePoint Services site. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: d78a08a0-5dfc-4152-abf4-32b02ba51d36 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + + +# TF30277: You do not have sufficient permissions on the Windows SharePoint Services at {0} to create a new site + + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the permissions granted your user account on the Windows SharePoint Services server {*name*} are not sufficient to allow you to create the new SharePoint Services site. A SharePoint site is used as the project portal. You must be granted specific permission by the Windows SharePoint Services administrator. + +### To correct this error + +Contact the administrator for the Windows SharePoint Services server {*name*} and ask that your user account be added to the Site Administrator group. Your Team Foundation Server administrator may also be able to grant you the required permission. \ No newline at end of file diff --git a/docs/work/reference/error/tf30320-ntpw-no-retrieve-list-team-projects-tfs.md b/docs/work/reference/error/tf30320-ntpw-no-retrieve-list-team-projects-tfs.md new file mode 100644 index 00000000000..ccf97807f99 --- /dev/null +++ b/docs/work/reference/error/tf30320-ntpw-no-retrieve-list-team-projects-tfs.md @@ -0,0 +1,32 @@ +--- +title: TF30320-The New Team Project Wizard could not retrieve the list of team projects | TFS +description: Display an error when the New Team Project Wizard could not retrieve the list of team projects on the Team Foundation Server. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 252752a7-ec21-465e-878c-1d303ee60284 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30320: The New Team Project Wizard could not retrieve the list of team projects on the Team Foundation Server {0}. + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when the New Team Project Wizard attempts to check the Team Foundation Server {*name*} to determine if there is already a team project with the name you typed. The wizard has already established a connection with the server, but the connection is no longer working. + + The likely causes of this problem are: + +- The network is not available +- The Team Foundation server is not available +- There is an unexpected problem with the CommonStructureService Web service. + + The procedures below will help you correct the cause. + +### To correct this error + +1. Confirm that your local computer is plugged into the network and can access network resources. + +2. Contact the administrator for the Team Foundation Server *name* to confirm that the server is available on the network. + +3. Contact the administrator for the Team Foundation Server *name* for further instructions. \ No newline at end of file diff --git a/docs/work/reference/error/tf30321-name-in-use-team-project.md b/docs/work/reference/error/tf30321-name-in-use-team-project.md new file mode 100644 index 00000000000..dbb226409cf --- /dev/null +++ b/docs/work/reference/error/tf30321-name-in-use-team-project.md @@ -0,0 +1,31 @@ +--- +title: TF30321-The name you typed is already used for another team project | VSTS & TFS +description: Display an error when you type a name for the new team project that duplicates the name already being used by another team project on the same server. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 9cd0bc58-3c58-4129-8099-d8849cece6fc +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + + +# TF30321: The name you typed is already used for another team project on the Team Foundation Server. + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +This error occurs when you type a name for the new team project that duplicates the name already being used by another team project in the same collection. There are two likely causes for this problem: + +- There is actually a team project with the same name. + +- Someone previously attempted to create a team project with the same name, but the wizard did not complete the creation and failed to remove all records of that team project. + +### To correct this error + +- Type a different name for the new team project. + +> [!NOTE] +> If you are sure that the name you typed is not being used by a team project on Team Foundation Server, contact your administrator for the server and ask him or her to run the **TFSDeleteProject** command-line utility to free the name. + +## Related notes +- [Create a team project](../../../accounts/create-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf30323-ntpw-no-retrieve-wizard-page-plug-in.md b/docs/work/reference/error/tf30323-ntpw-no-retrieve-wizard-page-plug-in.md new file mode 100644 index 00000000000..b57a45cb2c9 --- /dev/null +++ b/docs/work/reference/error/tf30323-ntpw-no-retrieve-wizard-page-plug-in.md @@ -0,0 +1,22 @@ +--- +title: TF30323-The New Team Project Wizard could not retrieve the wizard page from the plug-in {0}. | VSTS & TFS +description: Display an error when the New Team Project Wizard could not retrieve the wizard page from the plug-in. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 7dd4174c-171a-4e3f-8470-e1a8089b93af +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF30323: The New Team Project Wizard could not retrieve the wizard page from the plug-in {0}. + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +This error occurs when the New Team Project Wizard attempts to use the process template you selected and encounters a problem with either the XML in the process template file or the plug-in {*name*}. The plug-in code indicates there is a wizard page, but the call to the designated wizard page returns either an error or a null value. + + If you're receiving this error and you haven't customized the process template file, or it doesn't reference any third-party plug-ins, report your issue in the [Team Foundation Server - Process Templates forum](http://social.msdn.microsoft.com/Forums/home?forum=tfsprocess). + +### To correct this error + +- Contact the third-party developer or vendor that provided the process template and plug-in. \ No newline at end of file diff --git a/docs/work/reference/error/tf30330-team-explorer-no-write-project-list-configuration-file.md b/docs/work/reference/error/tf30330-team-explorer-no-write-project-list-configuration-file.md new file mode 100644 index 00000000000..3c7c57c0ed8 --- /dev/null +++ b/docs/work/reference/error/tf30330-team-explorer-no-write-project-list-configuration-file.md @@ -0,0 +1,36 @@ +--- +title: TF30330-Team Explorer cannot write to the project list configuration file. Free up space on the local hard disk. | TFS +description: Display an error when Team Explorer cannot establish read/write access to the project list configuration file. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 656c2e1d-3a52-4f1e-a41f-7a794a32ac94 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + + +# TF30330: Team Explorer cannot write to the project list configuration file. Free up space on the local hard disk. + + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when Team Explorer can't establish read/write access to the project list configuration file. There are at least three possible conditions that can cause this error: + +- The local hard disk is full and has no additional space for writing to the file +- You do not have sufficient user permissions to write to the file +- The folder containing the configuration file is set to read-only. + +These causes are listed in the most likely order of occurrence, and the procedures below will help you correct the cause. + +### To correct this error when the disk is full + +- Delete files from the local hard disk and try the operation again. + +### To correct this error when you do not have the appropriate permissions + +- Contact the Team Foundation Server administrator and ask him or her to add the necessary permissions to your user account. + +### To correct this error when the folder is read-only + +- Contact the administrator for the local computer and ask that the attribute on the folder be set to read/write. \ No newline at end of file diff --git a/docs/work/reference/error/tf31001-tfs-no-retrieve-team-projects.md b/docs/work/reference/error/tf31001-tfs-no-retrieve-team-projects.md new file mode 100644 index 00000000000..ec123dec925 --- /dev/null +++ b/docs/work/reference/error/tf31001-tfs-no-retrieve-team-projects.md @@ -0,0 +1,68 @@ +--- +title: TF31001-Team Foundation cannot retrieve the list of team projects | TFS +description: Occurs when Team Explorer can't display the list of team projects defined on a Team Foundation Server. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: a8f6ad82-e1e0-4659-8e97-c88ece4c23f5 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF31001: Team Foundation cannot retrieve the list of team projects from Team Foundation Server {0} + +**TFS 2017 | TFS 2015 | TFS 2013** + +This error occurs when Team Explorer can't display the list of team projects defined in the collection. The specific error message that TFS returns should help you determine the cause of the problem. + + As a first step, determine whether this problem occurs on one or multiple computers.is local to your computer, or if other team members are experiencing this error condition. If the problem occurs on more than one computer,, you should contact the administrator for Team Foundation Server to confirm whether the server is operational and available on the network. + + **When the problem occurs on only one computer** + + You may be able to resolve the problem if you review and address the following likely causes: + +|Symptom|Problem/Resolution| +|-------------|-------------------------| +|When configuration information changes for a deployment of Team Foundation Server, the cache on client computers must be cleared.|Follow the steps in “To clear the cache on client computers for Team Foundation" later in this topic.| +|An error appears that resembles the following text:<br /><br /> TF31001: Team Foundation cannot retrieve the list of team projects from Team Foundation Server*ServerName*. Team Foundation Server returned the following error: Access to the temp directory is denied.|Antivirus or firewall software on your client computer may be blocking services for Team Foundation Server. Disable the antivirus software or firewall to determine whether that change corrects the problem.| + + **When the problem occurs on multiple computers** + +As an administrator, you should check the event logs for the application-tier server to try to pinpoint the problem. Also, you can use the following table to determine whether the server is misconfigured. + +> [!IMPORTANT] +> If a TF31002 error appears in addition to one or more TF31001 errors, you should also review the information in [TF31002: Unable to connect to this Team Foundation Server {0}. Team Foundation Server URL: {1}.](tf31002-unable-connect-tfs.md). + +|Problem|Resolution| +|-------------|----------------| +|An error appears that resembles the following text:<br /><br /> TF31001: Team Foundation cannot retrieve the list of team projects from Team Foundation Server*ServerName*. Team Foundation Serverreturned the following error: The request failed with HTTP status 403: Forbidden.|This error may occur when IP restrictions are enabled on the website for Team Foundation Server. You should remove these restrictions. For more information, see [Verify or Correct IP Address and Domain Name Restrictions](https://msdn.microsoft.com/library/bb909653.aspx). **Note:** By default, Team Foundation Server is configured to grant all computers access to all Web sites for Team Foundation. Before you revert any settings to the default value, you should investigate why the settings were changed. Many organizations deny access to match their infrastructure requirements or security policies.| +|TF31001: Team Foundation cannot retrieve the list of team projects from Team Foundation Server*ServerName*. The Team Foundation Server returned the following error: The request failed with HTTP status 503: service unavailable.|Required application pools and services might not be running. For more information, see [Stop and start services, application pools, and websites](../../../tfs-server/admin/stop-start-stuff.md).| +|An error appears that resembles the following text:<br /><br /> TF31001: Team Foundation cannot retrieve the list of team projects from Team Foundation Server*ServerName*. Team Foundation Server returned the following error: The request failed with HTTP status 503: TF30059: Fatal error when initializing web service.|The TCP/IP protocol for SQL Server is disabled. For information about how to enable the TCP/IP protocol, see [Enable TCP/IP Network Protocol for SQL Server](https://technet.microsoft.com/library/hh231672%28v=sql.110%29.aspx).| + + If the previous resolutions do not solve the problem, check the forum for administering Team Foundation Server. For more information, see the following page on the Microsoft website: [MSDN Forums - Visual Studio Team System – Team Foundation Server - Administration](http://go.microsoft.com/fwlink/?LinkId=54490). + +<a name="clearcache"></a> +## To clear the cache on your client computer + +1. Log on to your client computer for Team Foundation by using the credentials of the user whose cache you want to clear. + +2. Close any open instances of Visual Studio. + +3. Open a browser, and browse to one of the following folders, depending on the operating system that is running on the client computer: + + - **Windows 8** + + *Drive* **:\Users\\** *UserName* **\AppData\Local\Microsoft\Team Foundation\4.0\Cache** + + - **Windows Vista or Windows 7** + + *Drive* **:\Users\\** *UserName* **\AppData\Local\Microsoft\Team Foundation\2.0\Cache** + + - **Windows XP or Windows Server 2003** + + *Drive* **:\Documents and Settings\\** *UserName* **\Local Settings\Application Data\Microsoft\Team Foundation\2.0\Cache** + +4. Delete the contents of the Cache directory, including all subfolders. + +## Related notes + [TF31002: Unable to connect to this Team Foundation Server {0}. Team Foundation Server URL: {1}.](tf31002-unable-connect-tfs.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf31002-unable-connect-tfs.md b/docs/work/reference/error/tf31002-unable-connect-tfs.md new file mode 100644 index 00000000000..14651b2ed46 --- /dev/null +++ b/docs/work/reference/error/tf31002-unable-connect-tfs.md @@ -0,0 +1,57 @@ +--- +title: TF31002-Unable to connect to VSTS or TFS | VSTS & TFS +description: Receive the error when you try to connect to VSTS to Team services or an on-premises Team Foundation Server. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: b5566a0b-55f8-4c76-aea2-6d1581a2c90d +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# TF31002: Unable to connect to this Team Foundation Server {0}. Team Foundation Server URL: {1} + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +You might receive this error when you try to connect to VSTS or an on-premises Team Foundation Server (TFS) from Visual Studio. + +##You receive this error when you try to connect to Team Services + +|Problem|Resolution| +|-------------|----------------| +|You don't have an active account or license.|Check with your account administrator that you're a member of the account and have an active, valid license. See [Assign licenses to users](../../../accounts/add-account-users-assign-access-levels.md) for details.| +|Your Team Services account is connected to the Azure Active Directory.|When your Team Services account is connected to a directory that is associated with an Office 365 or Microsoft Azure subscription, only members in the directory can access the account.<br /><br /> Check with your directory administrator to have them [create an organizational account for you or add your account to the directory as external member](https://docs.microsoft.com/azure/active-directory/active-directory-create-users).| +|You can't switch between different organizational accounts.|If you work with several Team Services accounts that connect to different directories, such as accounts that are created from the Microsoft Azure Preview Portal, the sign-out function might not work as expected. For example, you can't switch between different organizational accounts to connect to multiple accounts that are linked to directory tenants.<br /><br /> When this problem occurs, you see a flashing blank sign in dialog box several times. Then, you receive either TF31002 or TF31003 error after you connect to or add a new connection in "Connect to Team Foundation Server" dialog box.<br /><br /> To resolve this problem, apply the most recent [Visual Studio update](http://www.visualstudio.com/downloads) .<br /><br /> To learn more, see [KB Article ID 2958966, You can't switch between different organizational accounts in Visual Studio Online](https://support.microsoft.com/en-us/help/2958966/you-can-t-switch-between-different-organizational-accounts-in-visual-studio-online).| +|You want to log into VSTS forrom Visual Studio using a different account.|See [Connect to team projects, Change accounts when you connect to Team Services](../../../connect/connect-team-projects.md).| + +### You receive this error when you try to connect to an on-premises TFS from your client computer + + If you determine that you're receiving this error from one computer but not others, or others aren't receiving this error, then check the problem resolutions outlined below. + +|Problem|Resolution| +|-------------|----------------| +|Your password has expired.|Verify that you typed your user account and password correctly, and that your password hasn't expired.| +|You've entered an incorrect server URL.|Verify that you have typed the server URL correctly including the server name, port number, and protocol (http/https). See [Connect to team projects](../../../connect/connect-team-projects.md) to learn more.| +|The TFS configuration has changed.|If the configuration for the on-premises TFS has changed, you must create a new connection. You might also need to [clear the client cache](../../../connect/connect-team-projects.md).| +|You work remotely and need to connect to a TFS Proxy server to check in files to Team Foundation version control.|You need to [configure Visual Studio to connect to TFS Proxy](../../../connect/connect-team-projects.md).| +|You're connecting to a later version of TFS than your Visual Studio client version.|Your version of Visual Studio or Team Explorer might be incompatible with Team Foundation Server. You might need to install one or more GDR packs. See [Requirements and compatibility](../../../accounts/requirements.md) for details.| +|Your firewall is blocking TFS services.|See [Allow a program to communicate through Windows Firewall](https://technet.microsoft.com/en-us/library/cc766312.aspx).| +|Visual Studio stops responding when you run a query in Visual Studio.|Your computer might be configured to bypass the proxy server. You should verify the configuration of the BypassProxyOnLocal setting on your computer. For more information, see [BypassProxyOnLocal Configuration](https://msdn.microsoft.com/library/ee248646.aspx).| + +### Several users receive this error when they try to connect to an on-premises TFS + + If the problem occurs on more than one computer, you should contact your TFS administrator to confirm whether the server is operational and available on the network. + + As an administrator, you should check the event logs for the application-tier server to try to pinpoint the problem. Also, you can use the following table to determine whether the server is misconfigured. In the table, problems that are more likely to occur appear first. Therefore, you should try the resolutions in the order in which they appear so that you increase the chance that you can solve the problem quickly. + +|Problem|Resolution| +|-------------|----------------| +|The *TFSService* account password has expired or is incorrect.|Many services for Team Foundation Server will stop running when the service account for Team Foundation has expired. For more information, see [Change the service account or password for Team Foundation Server](../../../tfs-server/admin/change-service-account-password.md).| +|The application-tier server for Team Foundation is unavailable.|You should verify whether each required service is running. If a required service is not running, you must restart it. If necessary, set it to start automatically. For more information, see [Stop and start services, application pools, and websites](../../../tfs-server/admin/stop-start-stuff.md).| +|The network is unavailable.|You should verify whether your network is operational.| +|A website identity for Team Foundation is configured incorrectly.|You should verify or correct the server binding assignments that are made to websites for Team Foundation. | +|Access to a website for Team Foundation has been restricted.|You should verify or correct restrictions that are made to those websites that are based on IP addresses and domain names. | +|The firewall or ports are configured incorrectly.|You should verify or correct port binding assignments for websites and port assignments for the firewall. First, you should open the administration console for Team Foundation, display the Application Tier page, and review the URL assignments. If necessary, you can click **Change URL** to modify the URL of a website. Next, you should verify the port assignments for Internet Information Services (IIS) and the ports that are allowed through the firewall. For more information, see [Review Server Status and Settings](../../../tfs-server/admin/stop-start-stuff.md) and [Verify or Correct Port Assignments](../../../tfs-server/architecture/required-ports.md).| +|Trust relationships between domains are not configured correctly.|If a group of users cannot access Team Foundation Server, you might have trust issues between domains.| +|When users connect to different versions of TFS from Visual Studio, for example, they connect to TFS 2012 and then TFS 2008, they can get the TF31002 error.|This can occur because the GUIDs for the TFS 2012 collection are the same as that for TFS 2008. This confuses the local client cache because it tries to maintain the same GUID based local cache for both the 2008 server and the new Project Collection in 2012.<br /><br /> To fix this, you need to run the **TFSConfig ChangeServerID** command. See [TFSConfig ChangeServerID command](../../../tfs-server/command-line/tfsconfig-cmd.md#changeserverid).| + + If the previous resolutions do not solve the problem, go to the [MSDN Forums - Visual Studio Team System – Team Foundation Server - Administration](http://go.microsoft.com/fwlink/?LinkId=54490). \ No newline at end of file diff --git a/docs/work/reference/error/tf31003-user-account-no-permission-connect-tfs.md b/docs/work/reference/error/tf31003-user-account-no-permission-connect-tfs.md new file mode 100644 index 00000000000..10654295673 --- /dev/null +++ b/docs/work/reference/error/tf31003-user-account-no-permission-connect-tfs.md @@ -0,0 +1,29 @@ +--- +title: TF31003-Your user account does not have permission to connect to TFS | VSTS & TFS +description: Receive the error when you try to connect to Team Services or Team Foundation Server (TFS). +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: bfec0879-44e7-4cf1-825b-c9e6520f4d56 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# TF31003: Your user account does not have permission to connect to the Team Foundation Server {0} + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +You might receive this error when you try to connect to Visual Studio Team Services (Team Services) or an on-premises Team Foundation Server (TFS). + +|Problem|Resolution| +|-------------|----------------| +|You can't switch between different organizational accounts.|If you work with several Team Services accounts that connect to different directories, such as accounts that are created from the Microsoft Azure Preview Portal, the sign-out function might not work as expected. For example, you can't switch between different organizational accounts to connect to multiple accounts that are linked to directory tenants.<br /><br /> When this problem occurs, you see a flashing blank sign in dialog box several times. Then, you receive either TF31002 or TF31003 error after you connect to or add a new connection in "Connect to Team Foundation Server" dialog box.<br /><br /> To resolve this problem, apply the most recent [Visual Studio update](http://www.visualstudio.com/downloads).<br /><br /> To learn more, see [KB Article ID 2958966](http://support.microsoft.com/kb/2958966).| +|You have multiple Microsoft accounts that you use to connect to VSTS. You may have used another account for one purpose and it was cached.|To run Visual Studio under an account that is different from your logged on Windows account, open the context menu for `devenv.exe` to access your run as options.<br /><br /> ![Context menu for Visual Studio devenv.exe](_img/alm_cnt_runas.png "ALM_CNT_RunAs")<br /><br /> <br /><br /> The executable is in this folder: *Drive*:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\\.| +|Your web browser has cached a cookie based on old, different, or out of date credentials.|Try clearing the cookies for your browser, or try logging off your client computer or workstation and logging back on.| +|Your password in Active Directory or [Azure Active Directory](http://azure.microsoft.com/services/active-directory) has expired.|Verify that your password is active.<br /><br /> If you didn't log off after your password expired, you might still be able to use your account on your machine, but not authenticate with other systems. Try changing your password.<br /><br /> Or, if you recently changed your password, but still have some service using your old credentials, it might be causing your account to lock for some period of time. Try logging off your client computer and logging back on.| +|Your user account doesn't have sufficient permissions to connect.|Check with your Team Services account administrator or TFS administrator or that you have the necessary permissions to connect. For VSTS, you must have an active, valid license. See [Assign licenses to users of Team Services](../../../accounts/add-account-users-assign-access-levels.md) for details.| + +## Related notes +- [Add users to team projects (TFS)](../../../accounts/add-users.md) +- [Assign licenses to users of Team Services](../../../accounts/add-account-users-assign-access-levels.md) +- [Permission reference](../../../security/permissions.md) \ No newline at end of file diff --git a/docs/work/reference/error/tf31004-tf-error-connecting-tfs.md b/docs/work/reference/error/tf31004-tf-error-connecting-tfs.md new file mode 100644 index 00000000000..370d1466fb2 --- /dev/null +++ b/docs/work/reference/error/tf31004-tf-error-connecting-tfs.md @@ -0,0 +1,30 @@ +--- +title: TF31004-Team Foundation encountered an unexpected error while connecting to TFS | TFS +description: Occurs when the instance of Team Foundation on the local computer cannot connect to the application-tier server for Team Foundation Server. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: f0bcc998-859f-4b75-bb3d-3976cd8578f6 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# TF31004: Team Foundation encountered an unexpected error while connecting to Team Foundation Server {0} + +**TFS 2017 | TFS 2015 | TFS 2013** + +This is a generic error message displayed when the instance of Team Foundation on the local computer cannot connect to a Team Foundation Server and no error message was returned by a specific component within Team Foundation Server. + + The likely causes of this problem are: + +- The version of Team Foundation running on the local computer does not match the version running on the Team Foundation Server server {name}. + +- The server returned HTML content instead of XML content. + +- The required Web service on the server could not be found. + + The procedure below will help you correct the cause. + +### To correct this error + +- Contact your Team Foundation Server administrator for the server {*name*} for further instructions. \ No newline at end of file diff --git a/docs/work/reference/error/underlying-connection-was-closed.md b/docs/work/reference/error/underlying-connection-was-closed.md new file mode 100644 index 00000000000..2869a496da2 --- /dev/null +++ b/docs/work/reference/error/underlying-connection-was-closed.md @@ -0,0 +1,24 @@ +--- +title: Underlying connection was closed | VSTS & TFS +description: Occurs when users save work items, check in code merges, or perform other operations on a large number of files. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 31712682-bbb2-4821-b5a4-dd5eb215d18a +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Underlying connection was closed + +[!INCLUDE [temp](../../_shared/dev15-version-header.md)] + +When users save work items, check in code merges, or perform other Team Foundation operations on a large number of files, a dialog box might appear that contains the phrase "The underlying connection was closed." The problem might be intermittent and difficult to reproduce. + +**Possible Causes** + +The client computer might not be configured to automatically detect the link speed of its network adapter. This setting can decrease performance between the client computer and Visual Studio Team Foundation Server. + +**Solutions** + +On the client computer, enable automatic detection of the link speed for the network adapter. For more information, see [Configure a network adapter to automatically adjust speed](../configure-network-adapter-automatically-adjust-speed.md). \ No newline at end of file diff --git a/docs/work/reference/expand-list-items-and-exclude-groups-from-lists.md b/docs/work/reference/expand-list-items-and-exclude-groups-from-lists.md new file mode 100644 index 00000000000..490c1b057ea --- /dev/null +++ b/docs/work/reference/expand-list-items-and-exclude-groups-from-lists.md @@ -0,0 +1,243 @@ +--- +title: Expand list items and exclude groups from lists | VSTS & TFS +description: Examples for expanding pick list items and restricting items using expanditems and filteritems attributes - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 860a4118-f155-4c6b-9d80-d8a72a8b219f +ms.manager: douge +ms.author: kaelli +ms.date: 05/10/2017 +--- + +# Expand list items and exclude groups from lists + +<b>VSTS (Hosted XML) | TFS 2017 | TFS 2015 </b> + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML process models. For an overview of process models and supported customizations, see [Customize your work tracking experience](../customize/customize-work.md). + +You can expand and filter lists by using the `expanditems` and `filteritems` attributes. You can apply these attributes to these list type elements: `ALLOWEDVALUES`, `SUGGESTEDVALUES`, and `PROHIBITEDVALUES`. + +To better understand how these attributes are used to populate a field's drop-down menu, review the examples provided below. + +<a name="ExpandListsAndGroups"></a> + +## Expand lists and groups + You can assign the values `true` and `false` to `expanditems`; its value is `true` by default. When `expanditems` has the value of `true`, list items that represent groups or global lists are expanded recursively. A group's subgroups are expanded; the subgroups of those subgroups are also expanded, and continues in this pattern. After expansion, list items that represented groups include both groups and users as list item values. If `expanditems` is set to `false`, no group or global list expansion is performed. + +<a name="FilterListsAndGroups"></a> + +## Exclude groups + You can assign only the value `excludegroups` to the `filteritems` attribute. When this attribute appears, all the list items are evaluated and any groups are removed. Use the `filteritems` attribute to show only users, not groups. + +<a name="ContentsOfListsAndGroups"></a> + +## Contents of lists and groups used in the examples + The examples provided in this topic use the following values: + +<table Responsive="true" summary="table"> +<tbody valign="top"> +<tr Responsive="true"> +<th scope="col"><p>Group name and list</p></th> +<th scope="col"><p>Description</p></th> +</tr> +<tr> +<td> +[Project]\Business Analysts</p> +<ul style="list-style: none;margin-bottom:0px"> +<li style="margin-bottom:0px">JayHamlin</li> +<li style="margin-bottom:0px">PilarAckerman</li> +<li style="margin-bottom:0px">ReshmaPatel</li> +</ul> +</td> +<td> +<p>A team project group that contains the names of three business analyst team members.</p> + +<p>**Note:** Use the literal prefix [Project] instead of using the actual name of the team project.</p> +</td> +</tr> +<tr> +<td> +<p>Example1\MyReports</p> +<ul style="list-style: none;margin-bottom:0px"> +<li style="margin-bottom:0px">Development</li> +<li style="margin-bottom:0px">devuser</li> +<li style="margin-bottom:0px">Test</li> +<li style="margin-bottom:0px">Test user</li> +<li style="margin-bottom:0px">Program Management</li> +<li style="margin-bottom:0px">pmuser</li> +<li style="margin-bottom:0px">juser</li> +</ul> +</td> +<td> +<p>A team project group that contains one team member, juser, and three subgroups, where each subgroup contains the name of one team member.</p> +</td> +</tr> +<tr> +<td> +<p>Example1\MyReports</p> +<ul style="list-style: none;margin-bottom:0px"> +<li style="margin-bottom:0px">Userone</li> +<li style="margin-bottom:0px">Usertwo</li> +<li style="margin-bottom:0px">Userthree</li> +<li style="margin-bottom:0px">MyRemotes</li> +<li style="margin-bottom:0px">Userfour</li> +<li style="margin-bottom:0px">Userfive</li> +</ul> +</td> +<td> +<p>A team project group that contains the names of three team members and one subgroup which contains the names of two team members.</p> +</td> +</tr> +<tr> +<td> +<p>BoolValues</p> +<ul style="list-style: none;margin-bottom:0px"> +<li style="margin-bottom:0px">true</li> +<li style="margin-bottom:0px">false</li> +</ul> +</td> +<td> +<p>A global list with two entries.</p> +</td> +</tr> +</tbody> +</table> + +##Example: Expand lists and exclude groups + +In this example, the field contains a string value, a group, and a global list. At the time it is run, the list is expanded and groups are excluded. + +<table Responsive="true" summary="table"> +<thead> +<tr Responsive="true"> +<th ><p>Example</p></th> +<th ><p>Drop down list values</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td> + +<pre><code><ALLOWEDVALUES expanditems="true" filteritems="excludegroups"> + <LISTITEM value="string" /> + <LISTITEM value="[Project]\Business Analysts" /> + <GLOBALLIST name="BoolValues" /> </code></pre> + + +</td> + +<td data-th="Drop-down list values"> + +<ul style="list-style: none;margin-bottom:0px"> +<li style="margin-bottom:0px">string</li> +<li style="margin-bottom:0px">true</li> +<li style="margin-bottom:0px">false</li> +<li style="margin-bottom:0px">JayHamlin</li> +<li style="margin-bottom:0px">PilarAckerman</li> +<li style="margin-bottom:0px">ReshmaPatel</li> +</ul> +</td> +</tr> +</table> + + +<a id="Example2"></a> +## Example: Expand lists and groups and do not filter + +In this example, the field contains a string value, two groups, and a global list. At the time it is run the list is expanded and groups are not excluded. + +<table Responsive="true" summary="table"> +<tr Responsive="true"> +<th scope="col"><p>Example</p></th> +<th scope="col"><p>Drop-down list values</p></th> +</tr> + +<tr valign="top"> +<td data-th="Example"> + +<pre><code><ALLOWEDVALUES expanditems="true"> + <LISTITEM value="string" /> + <LISTITEM value="Example1\MyReports"/> + <LISTITEM value="Example1\MyTeam" /> + <GLOBALLIST name="BoolValues" /> +</ALLOWEDVALUES> +</code></pre> +</td><td data-th="Drop-down list values"> + +<ul style="list-style: none;margin-bottom:0px"> +<li style="margin-bottom:0px">string</li> +<li style="margin-bottom:0px">true</li> +<li style="margin-bottom:0px">false</li> +<li style="margin-bottom:0px">juser</li> +<li style="margin-bottom:0px">juser2</li> +<li style="margin-bottom:0px">devuser</li> +<li style="margin-bottom:0px">testuser</li> +<li style="margin-bottom:0px">pmuser</li> +<li style="margin-bottom:0px">Development</li> +<li style="margin-bottom:0px">Test</li> +<li style="margin-bottom:0px">Program Management</li> +</ul> +</td></tr> +</table> + + + +##Example: Do not expand lists or groups, and do not filter + +In this example, the field contains a string value, two groups, and a global list. At run time, the list is not expanded and groups are not filtered out. This means that group names are displayed, but not the users within those groups. + +[!NOTE] +The global list name and contents are not displayed. + + +<table Responsive="true" summary="table"> +<tr Responsive="true"> +<th scope="col"><p>Example</p></th> +<th scope="col"><p>Drop-down list values</p></th> +</tr> + +<tr valign="top"> +<td data-th="Example"> + +<pre><code><ALLOWEDVALUES expanditems="false"> + <LISTITEM value="string" /> + <LISTITEM value="Example1\MyReports"/> + <LISTITEM value="Example1\MyTeam" /> + <GLOBALLIST name="BoolValues" /> +</ALLOWEDVALUES> +</code></pre> +</td> +<td data-th="Drop-down list values"> + +<ul style="list-style: none;margin-bottom:0px"> +<li style="margin-bottom:0px">string</li> +<li style="margin-bottom:0px">MyTeam</li> +<li style="margin-bottom:0px">MyReports</li> +</ul> +</td> +</tr></table> + + +## Example: Expand lists and exclude groups and global lists +In this example, the field contains a string value, one group, and a global list. At run time, the list is expanded and groups are filtered out. + +>[!NOTE] +>*MyTeam* is a group that is excluded and not expanded, and *BoolValue*s is a global list, so neither one is expanded or shown. + +<table Responsive="true" summary="table"><tr Responsive="true"><th scope="col"><p>Example</p></th><th scope="col"><p>Drop-down list values</p></th></tr><tr><td data-th="Example"> + + +<pre><code><ALLOWEDVALUES expanditems="true" filteritems="excludegroups"> + <LISTITEM value="string" /> + <LISTITEM value="Example\MyTeam" /> + <GLOBALLIST name="BoolValues" /> +</ALLOWEDVALUES> +</code></pre> +</td><td data-th="Drop-down list values"><p>String</p></td></tr></table> + + +## Related notes +- [ALLOWEDVALUES, SUGGESTEDVALUES, and PROHIBITEDVALUES XML elements](define-pick-lists.md) +- [GLOBALLIST XML element reference](define-global-lists.md) +- [Apply a field rule](apply-rule-work-item-field.md) \ No newline at end of file diff --git a/docs/work/reference/field-definition-element-reference.md b/docs/work/reference/field-definition-element-reference.md new file mode 100644 index 00000000000..c354c5123d5 --- /dev/null +++ b/docs/work/reference/field-definition-element-reference.md @@ -0,0 +1,149 @@ +--- +title: FIELD (Definition) element reference | VSTS & TFS +description: Syntax and usage of the FIELD element used to specify data fields within a work item type +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 67560004-04d6-411c-97fb-07f66303ef11 +ms.manager: douge +ms.author: kaelli +ms.date: 06/16/2017 +--- + +# FIELD (Definition) element reference + + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You use the **FIELD** (Definition) element to define a work item field and specify the rules and conditions that apply to it. The attributes that you assign to a field determines its data type and whether it is available for inclusion in reports. + +> [!NOTE] +> For information about the **FIELD** (Workflow) element, which you use to specify rules and conditions to fields during a state change or workflow transition, see [FIELD (Workflow)](field-workflow-element-reference.md). + +## Syntax + +>[!NOTE] +><b>Feature availability:</b> The Boolean data type is supported for VSTS and for on-Premises TFS, for TFS 2017.2 and later versions. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD name="fieldDisplayName" refname="fieldReferenceName" type="String | Integer | Double | DateTime | PlainText | HTML | History | TreePath | GUID | Boolean" +syncnamechanges ="true | false" reportable="Dimension | Detail | Measure"formula="sum" +reportingname="ReportingDisplayName" reportingrefname="ReportingReferenceName" > + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE /> + <CANNOTLOSEVALUE /> + <COPY /> + <DEFAULT /> + <EMPTY /> + <FROZEN /> + <HELPTEXT> . . . </HELPTEXT> + <MATCH /> + <NOTSAMEAS /> + <PROHIBITEDVALUES /> . . . </PROHIBITEDVALUES> + <READONLY /> + <REQUIRED /> + <SERVERDEFAULT /> + <SUGGESTEDVALUES /> . . . </SUGGESTEDVALUES> + <VALIDUSER /> + <WHEN> . . . </WHEN> + <WHENNOT> . . . </WHENNOT> + <WHENCHANGED> . . . </WHENCHANGED> + <WHENNOTCHANGED> . . . </WHENNOTCHANGED> +</FIELD> +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Attributes + +|Attribute|Description| +|---------------|-----------------| +|**name**|Required. The friendly name of the field that appears in the drop-down menus of work item queries. The friendly name must be unique across all fields that are defined within a team project. Also, the friendly name may differ from the label that appears next to the field on the work item form. For more information, see [Control](control-xml-element-reference.md).<br /><br /> The attribute type is `typelib:FieldName`. Minimum length: 1; maximum length: 128.<br /><br /> Pattern value: ^[^\\.\\[\\]]+$<br /><br /> Pattern value example: Assigned To| +|**refname**|Required. The unique label that distinguishes a field from all other fields that are defined in the team project collection.<br /><br /> For additional requirements and restrictions on friendly names and reference names, see [Naming conventions for work item tracking objects](../../reference/naming-restrictions.md#ProjectNames).<br /><br /> The attribute type is `typelib:ReferenceFieldName`. Minimum length: 1; maximum length: 70.<br /><br /> Pattern value: ^[a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z0-9_]+)+$<br /><br /> Pattern value example: Company.IssueType| +|**type**|Required. Specifies the type of data that the field accepts.<br /><br /> **Note**: Fields in different project collections that have the same `reportingrefname` must be assigned the same value for `type`. If the values differ, data conflicts can occur when the data warehouse is processed. For more information, see [Resolve Data Conflicts That Are Occurring in the Data Warehouse](../../report/admin/resolve-schema-conflicts.md).<br /><br /> The following table lists valid values for this attribute:<br /><br /> - `Boolean`: Adds a True/False or Yes/No field. **Note**: For on-premises TFS, the Boolean data type requires that you upgrade to TFS 2017.2 or later version.<br /><br /> - `DateTime`: Specifies a date according to Coordinated Universal Time (UTC) moment in time.<br /><br /> - `Double`: Specifies a floating-point value.<br /><br /> - `GUID`: Specifies a field that will contain a unique identifier.<br /><br /> - `History`: Supports discussion threads and keeps track of other historical information. **Note**: The `System.History` field is the only field that uses this data type. You cannot define a custom field using this data type.<br /><br /> - `HTML`: Supports capture of rich-text data and is used for longer text descriptions such as a work item description.<br /><br /> - `Integer`: Specifies a 32-bit signed integer value.<br /><br /> - `PlainText`: Supports entry of a text string that can contain more than 255 Unicode characters.<br /><br /> - `String`: Supports entry of a text string that can contain up to 255 Unicode characters. Use a String field for a label or other short text string up to one line long.<br /><br /> - `TreePath`: Specifies a field that displays entries in a hierarchical or tree structure, such as what is required to display the area and iteration paths for a product. To define child nodes, see [Create and Modify Areas and Iterations](../customize/set-area-paths.md). **Note**: The `System.AreaPath` and `System.IterationPath` fields are the only fields that use this data type. You cannot define a custom field using this data type.| +|**syncnamechanges**|Optional. Specifies whether the work item field is used to store names that you want to be updated as changes are made in Active Directory or a Workgroup. This option is only valid when `type="String"`. The attribute type is `xs:boolean`.<br /><br /> Specify `true` to enable synchronization for the data field, specify `false` to disable synchronization for the data field.| +|**reportable**|Optional. Specifies whether data from the field is available for inclusion in reports. Fields with the default value of `None` are neither exported to the relational data warehouse nor processed for the SQL Server Analysis Services cube. For more information about reportable fields, see [Add or modify work item fields to support reporting](add-or-modify-work-item-fields-to-support-reporting.md).<br /><br /> **Note**: Fields in different project collections that have the same value for the `reportingrefname` must be assigned the same value for `reportable`. If the values differ, data conflicts can occur when the data warehouse is processed. For more information, see [Resolve Data Conflicts That Are Occurring in the Data Warehouse](../../report/admin/resolve-schema-conflicts.md).<br /><br /> The following table lists valid values for this attribute:<br /><br /> - `Detail`: Can be specified for fields of type DateTime, Double, Integer, or String. The data in this field is moved into the relational warehouse database in the Work Item and Current Work Item tables but not into the Analysis Services cube. This type is a good choice for unrestricted text fields because you can use them in reports without making the cube significantly larger.<br /><br /> - `Dimension`: Can be specified for fields of type DateTime, Integer, String, or TreePath. The data in this field enters the relational warehouse database and the Analysis Services cube as an attribute of the Work Item dimension so that the data can be used to filter reports. Use this type for fields that have lists of valid values. Work Item Type and State are good examples of a dimension.<br /><br /> - `Measure`: Use the measure type only for Integer and Double fields. Measures are the numeric values in your reports. When the Analysis Services cube is processed, data is precalculated on fields whose `reportable` attributes are set to measure. For example, the Work Item and Current Work Item measure groups contain cumulative data for the following fields: Original Estimate, Remaining Hours, and Completed Hours.<br /><br /> When you specify measure, you must specify the `formula` attribute.<br /><br /> - `None`: Specify `None` when you do not want to use the field for inclusion in reports. This is the default assignment.| +|**formula**|Optional. The aggregation type for the `measure` reportable type. The only valid value is `sum`, which returns the sum of all values over the set.| +|**reportingname**|Optional. Specifies the name that appears in reports. If you do not specify a value, the value that is assigned to the `name` attribute is used.<br /><br /> **Note**: Fields in different project collections that have the same `reportingrefname` must be assigned the same value for the `reportingname`. If the values differ, data conflicts can occur when the data warehouse is processed. For more information, see [Resolve Data Conflicts That Are Occurring in the Data Warehouse](../../report/admin/resolve-schema-conflicts.md).<br /><br /> The attribute type is `typelib:FieldName`. Minimum length: 1; maximum length: 128.<br /><br /> Pattern value: ^[^\\.\\[\\]]+$<br /><br /> Pattern value example: Assigned To| +|**reportingrefname**|Optional. Specifies the reference name that is used when a reportable field is processed. If you do not specify a value, the value that is assigned to the `refname` attribute is used.<br /><br /> You can use this attribute to either merge or diverge fields that are processed to the data warehouse. To merge two fields that have distinct reference names and that are defined in different project collections, you assign the same `reportingrefname` to both of them. To diverge two fields that have the same reference name but that are defined in different project collections, you assign a different **reportingrefname** to each field.<br /><br /> You should merge fields whenever possible to minimize the number of fields in the warehouse and to keep under the maximum limit of 1024 reportable fields. You can generate cross-group reports with merged fields.<br /><br /> The attribute type is `typelib:ReferenceFieldName`. Minimum length: 1; maximum length: 70.<br /><br /> Pattern value: ^[a-zA-Z_][a-zA-Z0-9_]*(\\.[a-zA-Z0-9_]+)+$<br /><br /> Pattern value example: Company.IssueType| + +### Child elements + +|Element|Description| +|-------------|-----------------| +|[ALLOWEDVALUES](define-pick-lists.md)|Optional. Defines a list of allowed values for the field. Allowed values are values that are available for selection in a field list on work item forms and in the query builder. You must select from one of these values.| +|[ALLOWEXISTINGVALUE](define-pick-lists.md)|Optional. Defines the field to allow existing values. This element allows the field values that already exist to be used, even if they are not valid. All new field values must be valid.| +|[CANNOTLOSEVALUE](apply-rule-work-item-field.md)|Optional. Defines the field as cannot lose value. This element keeps the current field value and it cannot be cleared or made empty.| +|[COPY](define-default-copy-value-field.md)|Optional. Specifies another field that contains a value to be copied into the current field.| +|[DEFAULT](define-default-copy-value-field.md)|Optional. Defines a default value for the field.| +|[EMPTY](apply-rule-work-item-field.md)|Optional. Defines the field as empty.| +|[FROZEN](apply-rule-work-item-field.md)|Optional. Defines the field as frozen. A frozen field cannot be changed to any non-empty value after changes are committed. However, you can manually clear the field, save the work item, and then specify a different value.| +|[HELPTEXT](apply-rule-work-item-field.md)|Optional. Defines the text displayed in the ToolTip for the field.| +|[MATCH](apply-pattern-matching-to-string-field.md)|Optional. Defines a pattern for the field that the field value must match.| +|[NOTSAMEAS](apply-rule-work-item-field.md)|Optional. Specifies another field, the value of which cannot be identical to the value of the current field.| +|[PROHIBITEDVALUES](define-pick-lists.md)|Optional. Defines a list of prohibited values for the field.| +|[READONLY](apply-rule-work-item-field.md)|Optional. Defines the field as read-only.| +|[REQUIRED](apply-rule-work-item-field.md)|Optional. Defines the field as required.| +|[SERVERDEFAULT](define-default-copy-value-field.md)|Optional. Specifies a server component that will provide the value for the field.| +|[SUGGESTEDVALUES](define-pick-lists.md)|Optional. Defines a list of suggested values for the field. Suggested values are values that are available for selection in a field list on work item forms and in the query builder. You can enter other values additionally to the ones in the list.| +|[VALIDUSER](apply-rule-work-item-field.md)|Optional. Specifies that the list of allowed values must consist only of valid users of the system.| +|[WHEN](assign-conditional-based-values-and-rules.md)|Optional. Specifies one or more rules to apply to the current field when another field has a specific value.| +|[WHENCHANGED](assign-conditional-based-values-and-rules.md)|Optional. Applies one or more rules to the current field when a specific field's value is changed.| +|[WHENNOT](assign-conditional-based-values-and-rules.md)|Optional. Applies one or more rules to the current field when another field does not have a specific value.| +|[WHENNOTCHANGED](assign-conditional-based-values-and-rules.md)|Optional. Applies one or more rules to the current field when a specific field's value is not changed.| + +### Parent elements + +|Element|Description| +|-------------|-----------------| +|[FIELDS](all-witd-xml-elements-reference.md)|Required. Contains the work item type field definitions.| + +## Remarks + +1. `FIELD` (Definition) is a required child element of `FIELDS` (Definition). + +2. For an overview of all system and predefined fields that are defined for the TFS process templates, see [Index of work item fields](../guidance/work-item-field.md). + +3. You cannot define a custom field that starts with the `System.` prefix. You can define a field by using the `Microsoft.` prefix, however, this practice is strongly discouraged because it might impede Team Foundation Server functionality. + + For additional requirements and restrictions on field-friendly names and reference names, see [Naming conventions for work item tracking objects](../../reference/naming-restrictions.md#ProjectNames). + +4. While you can rename a field's friendly name, you can't rename the field's reference names. You can list fields and change several field attributes using the **witadmin** command-line toolSee [Manage work item fields](witadmin/manage-work-item-fields.md). + +5. You can define no more than 1,024 work item fields in the same team project collection, and you can set no more than 1,024 fields to reportable in all team project collections. + + All fields defined within all work item types (WITs) for all team projects defined for a project collection are for a team project collection. Therefore, attributes that you assign to fields that are defined in one WIT must match across all WITs for all team projects in a collection. In addition, all reportable fields from all collections are exported to the data warehouse databases. + +6. For information about how to label fields for reporting purposes, see [Add or modify work item fields to support reporting](add-or-modify-work-item-fields-to-support-reporting.md). + +7. When you add an existing field to a different WIT, either explicity set the reporting attributes to be the same as the current field definition, or let them default to these values. + + Schema conflicts can occur if different reporting attributes are assigned to the same field in different WITs or the same WITs in different team projects. To fix these conflicts, see [Resolve Data Conflicts That Are Occurring in the Data Warehouse](../../report/admin/resolve-schema-conflicts.md). + +8. To understand how fields are used to support queries, reports, and work item tracking, see [Modify a field or add a custom field](../customize/add-modify-field.md). + +9. For an overview of how to apply constraints or conditions on a `FIELD` by using child elements, see [Apply a field rule](apply-rule-work-item-field.md). + +## Example + +``` +<FIELD name="Activity" refname="Microsoft.VSTS.Common.Activity" type="String" reportable="dimension"> + <HELPTEXT>Type of work involved</HELPTEXT> + <SUGGESTEDVALUES> + <LISTITEM value="Development"/> + <LISTITEM value="Testing"/> + <LISTITEM value="Requirements"/> + <LISTITEM value="Design"/> + <LISTITEM value="Deployment"/> + <LISTITEM value="Documentation"/> + </SUGGESTEDVALUES> +</FIELD> +``` + +## Related notes +- [Naming restrictions and conventions](../../reference/naming-restrictions.md) +- [Index of work item fields](../guidance/work-item-field.md) +- [Customize your work tracking experience](../customize/customize-work.md) +- [Manage work item fields](witadmin/manage-work-item-fields.md) +- [Define and modify work item fields](define-modify-work-item-fields.md) diff --git a/docs/work/reference/field-mappings-in-microsoft-project.md b/docs/work/reference/field-mappings-in-microsoft-project.md new file mode 100644 index 00000000000..b3fcd098916 --- /dev/null +++ b/docs/work/reference/field-mappings-in-microsoft-project.md @@ -0,0 +1,63 @@ +--- +title: Project field mappings | TFS +description: Understand how data is mapped between Project and Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 0da29778-11c2-42e1-8876-e51abbc799f6 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- + +# Field mappings in Microsoft Project + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can customize how data is mapped between Microsoft Project and Team Foundation Server (TFS) by modifying the Microsoft Project Field Mapping File. The mapping file associates the reference name of a work item tracking field with a Project field. Before you change the Microsoft Project field mappings, you should review the information provided later in this topic to understand how TFS copies data from Project to the work item tracking database. + +> [!NOTE] +> The supported set of Project field names may be different for different versions of Project. + +<a name="CalculatedFields"></a> +## Calculated fields + Generally, you do not want to refresh calculated fields from the work item database. For example, start and finish dates are typically calculated based on task duration and dependencies. If a team member were to change the start date of a task in Team Explorer, the change could introduce errors in Office Project when the field is refreshed. + +Therefore you can configure calculated fields so that they are publish only, meaning that Project will publish changes for those fields to the work tracking data store, but not update them. For more information about how to configure fields as publish only, see [TFSFieldMapping](upload-or-download-the-microsoft-project-mapping-file.md). + +You can also prevent team members from changing calculated field values in Team Explorer by using the **READONLY** attribute in the work item form definition. For more information about the **READONLY** attribute, see [Apply a field rule](apply-rule-work-item-field.md). + +> [!NOTE] +> The Agile and CMMI process templates already configure the start and finish dates as publish only mappings, and read-only in Team Explorer. + +<a name="MappingFieldTypes"></a> +## Mapping field types + When you publish tasks from Project to TFS, Team Foundation copies the data to the work item database. Also, when tasks are refreshed, the field data is copied from the work item database to your Project plan. For the field data to be copied correctly, the field types in TFS and Project must be compatible. The following table lists which Project field types are compatible with TFS field types: + +|**TFS work item field type**|**Microsoft Project field type**| +|----------------------------------|--------------------------------------| +|DateTime|Datetime.| +|Double|Work, units, percentages, fractions, and any field type with a range of ±5.0 × 10<sup>−324</sup> to ±1.7 × 10<sup>308</sup>.| +|History|Not Supported.| +|Html|Not Supported.| +|Integer|Work, units, numbers, and any field type with a range of -2,147,483,648 to 2,147,483,647.| +|PlainText|Not Supported.| +|String|Text (maximum of 255 characters.)| +|TreePath|Custom outline codes.| + + +>[!IMPORTANT] +>Office Project does not populate the Resource Names field list with names of team members. Therefore, you must manually add names to the list. When you assign a work item to a resource in Office Project, you should specify the resource by its display name from Active Directory or the Address Book. If you assign a work item to a resource by alias or other shortened form of the name, you introduce an inconsistency that can cause validation errors. + + For more information about work item field types, see [Add or modify work item fields](../customize/add-modify-field.md). For more information about Project field types, see the help about the pjField constant in the [Project 2013 developer documentation](http://msdn.microsoft.com/library/office/ms512767.aspx). + +<a name="OfficeProjectFieldNames"></a> +## Project field names + In Project you can map any field name that starts with **pjtask** to a field in TFS. For example, you can map **pjTaskText10** to a TFS String field. These field names are used in the `ProjectField` attribute when you specify which TFS work item field maps to a Project field. For a complete list of the Microsoft Project field names, see the help about the pjField constant in the Microsoft Office 2003 Software Development Kit. + +> [!NOTE] +> If you are using Project Server, there are additional fields that have "Enterprise" in the name, such as **pjTaskEnterpriseCost1**. TFS does not publish or refresh data to Project Server, unless you integrate it as described in [Synchronize TFS with Project Server](../tfs-ps-sync/synchronize-tfs-project-server.md). Therefore, these field names are not supported with the Team Foundation add-in to Project. + +## Related notes +- [Create your backlog and tasks using Project](../office/create-your-backlog-tasks-using-project.md) +- [TFSFieldMapping](upload-or-download-the-microsoft-project-mapping-file.md) +- [Add or change Project-to-TFS field mapping](add-or-change-how-project-fields-map-to-tfs-fields.md) \ No newline at end of file diff --git a/docs/work/reference/field-workflow-element-reference.md b/docs/work/reference/field-workflow-element-reference.md new file mode 100644 index 00000000000..b299ff0183f --- /dev/null +++ b/docs/work/reference/field-workflow-element-reference.md @@ -0,0 +1,96 @@ +--- +title: FIELD (Workflow) element reference | VSTS & TFS +description: Syntax and usage of the FIELD element used to specify rules and conditions on fields within the workflow of a work item type +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 62ee6ea1-bb55-4462-93ff-224ad799812a +ms.manager: douge +ms.author: kaelli +ms.date: 02/10/2017 +--- + +# FIELD (Workflow) element reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You use the **FIELD** (Workflow) element to specify the rules and conditions that apply to a field during a state change or workflow transition. The rule is applied based on where the **FIELD** (Workflow) element appears under the `STATE`, `TRANSITION`, `DEFAULTREASON`, or `REASON` element of which its parent `FIELDS` element is a child. To learn more, see [Q: Where should I apply a field rule?](https://msdn.microsoft.com/en-us/vstudio/ms404857(v=vs.98).aspx) + +> [!NOTE] +> For information about the **FIELD** (Definition) element, which you use to define fields for a type of work item, see [FIELD (Definition) element reference](field-definition-element-reference.md). + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD refname="fieldReferenceName"> + <ALLOWEDVALUES> . . . </ALLOWEDVALUES> + <ALLOWEXISTINGVALUE /> + <CANNOTLOSEVALUE /> + <COPY /> + <DEFAULT /> + <EMPTY /> + <FROZEN /> + <MATCH /> + <NOTSAMEAS /> + <PROHIBITEDVALUES /> . . . </PROHIBITEDVALUES> + <READONLY /> + <REQUIRED /> + <SERVERDEFAULT /> + <SUGGESTEDVALUES /> . . . </SUGGESTEDVALUES> + <VALIDUSER /> + <WHEN> . . . </WHEN> + <WHENNOT> . . . </WHENNOT> + <WHENCHANGED> . . . </WHENCHANGED> + <WHENNOTCHANGED> . . . </WHENNOTCHANGED> +<FIELD> +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Attributes + +|Attribute|Description| +|---------------|-----------------| +|`refname`|Required. The reference name of the field where the rules and conditions are applied. The reference name must match the reference name defined in the field definition's `FIELD` (Definition) element. For more information, see [FIELD (Definition) element reference](field-definition-element-reference.md).| + +### Child elements + +|Element|Description| +|-------------|-----------------| +|[ALLOWEDVALUES](define-pick-lists.md)|Optional. Defines a list of allowed values for the field. Allowed values are values that are available for selection in a field list on work item forms and in the query builder. You must select from one of these values.| +|[ALLOWEXISTINGVALUE](define-pick-lists.md)|Optional. Defines the field to allow existing values. This element allows the field values that already exist to be used, even if they are not valid. All new field values must be valid.| +|[CANNOTLOSEVALUE](apply-rule-work-item-field.md)|Optional. Defines the field as cannot lose value. This element keeps the current field value and it cannot be cleared or made empty.| +|[COPY](define-default-copy-value-field.md)|Optional. Specifies another field that contains a value to be copied into the current field.| +|[DEFAULT](define-default-copy-value-field.md)|Optional. Defines a default value for the field.| +|[EMPTY](apply-rule-work-item-field.md)|Optional. Defines the field as empty.| +|[FROZEN](apply-rule-work-item-field.md)|Optional. Defines the field as frozen. A frozen field cannot be changed to any non-empty value after changes are committed. However, you can manually clear the field, save the work item, and then specify a different value.| +|[MATCH](apply-pattern-matching-to-string-field.md)|Optional. Defines a pattern for the field that the field value must match.| +|[NOTSAMEAS](apply-rule-work-item-field.md)|Optional. Specifies another field, the value of which cannot be identical to the value of the current field.| +|[PROHIBITEDVALUES](define-pick-lists.md)|Optional. Defines a list of prohibited values for the field.| +|[READONLY](apply-rule-work-item-field.md)|Optional. Defines the field as read-only.| +|[REQUIRED](apply-rule-work-item-field.md)|Optional. Defines the field as required.| +|[SERVERDEFAULT](define-default-copy-value-field.md)|Optional. Specifies a server component that will provide the value for the field.| +|[SUGGESTEDVALUES](define-pick-lists.md)|Optional. Defines a list of suggested values for the field. Suggested values are values that are available for selection in a field list on work item forms and in the query builder. You can enter other values additionally to the ones in the list.| +|[VALIDUSER](apply-rule-work-item-field.md)|Optional. Specifies that the list of allowed values must consist only of valid users of the system.| +|[WHEN](assign-conditional-based-values-and-rules.md)|Optional. Specifies one or more rules to apply to the current field when another field has a specific value.| +|[WHENCHANGED](assign-conditional-based-values-and-rules.md)|Optional. Applies one or more rules to the current field when a specific field's value is changed.| +|[WHENNOT](assign-conditional-based-values-and-rules.md)|Optional. Applies one or more rules to the current field when another field does not have a specific value.| +|[WHENNOTCHANGED](assign-conditional-based-values-and-rules.md)|Optional. Applies one or more rules to the current field when a specific field's value is not changed.| + +### Parent elements + +|Element|Description| +|-------------|-----------------| +|[FIELDS](all-workflow-xml-elements-reference.md)|A collection of `FIELD` (Workflow) elements that reference a field that is defined for a type of work item and that specify the rules and conditions that apply to the field. The reference is based on the **STATE**, **TRANSITION**, **DEFAULTREASON**, or **REASON** element of which its parent **FIELDS** element is a child.| + +## Remarks + You must define at least one child element for the `FIELD` (Workflow) element. + + `FIELD` (Workflow) is a required child element of `FIELDS` (Workflow). + + +## Related notes +- [Change the workflow](change-workflow-wit.md) +- [Customize your work tracking experience](../customize/customize-work.md) + diff --git a/docs/work/reference/global-workflow-xml-element-reference.md b/docs/work/reference/global-workflow-xml-element-reference.md new file mode 100644 index 00000000000..91d794f1b2b --- /dev/null +++ b/docs/work/reference/global-workflow-xml-element-reference.md @@ -0,0 +1,98 @@ +--- +title: Global Workflow XML element reference | VSTS & TFS +description: Syntax and usage of the global workflow elements to define data fields and global lists to be shared across several team projects +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 9e96bf19-6ba8-4686-91e3-b4aa2a57f6ac +ms.manager: douge +ms.author: kaelli +ms.date: 09/10/2017 +--- + +# Global workflow XML element reference + +[!INCLUDE [temp](../_shared/version-header-tfs-only.md)] + +>[!IMPORTANT] +>This topic applies to team project customization for On-premises XML process models. The Inheritance and Hosted XML process models don't support global workflow. For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + + +By using global workflow, you can minimize the work that is required to define and update work item fields and global lists that many types of work items and team projects share. With global workflow, you can define and update fields and global lists that apply to all types of work items in a team project or a team project collection. + + If you want only to manage global lists for a collection, see [GLOBALLIST XML element reference](define-global-lists.md). + +<a name="GLOBAL"></a> + +## Global workflow syntax structure + You define the global workflow by using the `GLOBALWORKFLOW` element, which supports **FIELDS** (Definition) or **GLOBALLISTS** elements as children, but not both. + + **Specify FIELDS**: + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<GLOBALWORKFLOW> +   <FIELDS> +      <FIELD> . . . </FIELD> +   </FIELDS> +</GLOBALWORKFLOW> +``` + + **Specify GLOBALLISTS**: + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<GLOBALWORKFLOW> +   <GLOBALLISTS> +      <GLOBALLIST> . . . </GLOBALLIST> +   </GLOBALLISTS> +</GLOBALWORKFLOW> +``` + +<a name="FIELD"></a> +## FIELD (Definition) element + You use the following syntax to define the data fields within a global workflow. This syntax shows the **FIELD** (Definition) element format and all optional child elements. For more information, see [FIELD (Definition) element reference](field-definition-element-reference.md) and [All FIELD elements](all-field-xml-elements-reference.md). + +> [!NOTE] +> You cannot specify the **HELPTEXT** element for a field that you define in a global workflow. + +> [!div class="tabbedCodeSnippets"] +```XML +<FIELD name="fieldDisplayName" refname="fieldReferenceName" type="String | Integer | Double | DateTime | PlainText | HTML | History | TreePath | GUID " +syncnamechanges="true | false" reportingname="reportingDisplayName" reportingrefname="reportingReferenceName" +reportable="Dimension | Detail | Measure" formula="avg" > +   <ALLOWEDVALUES> . . . </ALLOWEDVALUES> +   <ALLOWEXISTINGVALUE /> +   <CANNOTLOSEVALUE /> +   <COPY /> +   <DEFAULT /> +   <EMPTY /> +   <FROZEN />   <MATCH /> +   <NOTSAMEAS /> +   <PROHIBITEDVALUES /> . . . </PROHIBITEDVALUES> +   <READONLY /> +   <REQUIRED /> +   <SERVERDEFAULT /> +   <SUGGESTEDVALUES /> . . . </SUGGESTEDVALUES> +   <VALIDUSER /> +   <WHEN>> . . . </WHEN> +   <WHENNOT> . . . </WHENNOT> +   <WHENCHANGED> . . . </WHENCHANGED> +   <WHENNOTCHANGED> . . . </WHENNOTCHANGED> +</FIELD> +``` + + + <a name="LISTElements"></a> +## GLOBALLIST and LISTITEM Child Elements + The following table describes the **GLOBALLIST** and **LISTITEM** elements. You specify these elements as child elements of the `GLOBALWORKFLOW` element. You can use these elements to enumerate a list of values that appears to the user as a pick list or a drop-down menu of items. For more information, see [ALLOWEDVALUES, SUGGESTEDVALUES, and PROHIBITEDVALUES XML elements](define-pick-lists.md). + +|Element|Description and Syntax| +|-------------|----------------------------| +|**GLOBALIST**|Defines a set of **LISTITEM** elements that are stored for a team project collection or a team project.<br /><br /> *globalListName*: A string of text that contains between 1 and 255 characters.<br /><br /> `<GLOBALLIST name="` *globalListName* `">`<br /><br /> `<LISTITEM> . . . </LISTITEM>`<br /><br /> `</GLOBALLIST>`<br /><br /> **GLOBALLIST** is a required child element of the **GLOBALLISTS** element.| +|**LISTITEM**|Defines a valid value that appears in the list.<br /><br /> `<LISTITEM value="` *listName* `" />`<br /><br /> **LISTITEM** is a required child element of **GLOBALLIST**.| + +## Related notes +- [FIELD (Definition) element reference](field-definition-element-reference.md) +- [Customize your work tracking experience](../customize/customize-work.md) \ No newline at end of file diff --git a/docs/work/reference/labeltext-and-text-xml-elements-reference.md b/docs/work/reference/labeltext-and-text-xml-elements-reference.md new file mode 100644 index 00000000000..5c0f6c66e4e --- /dev/null +++ b/docs/work/reference/labeltext-and-text-xml-elements-reference.md @@ -0,0 +1,108 @@ +--- +title: LabelText and Text XML elements reference | VSTS & TFS +description: Adds a standalone label or informational text to a work item form by using the LabelText element - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 6ff20e50-cef6-4278-96c4-9fd69f7e2d3a +ms.manager: douge +ms.author: kaelli +ms.date: 02/14/2017 +--- + +# LabelText and Text XML elements reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can add a standalone label or informational text to a work item form by using the `LabelText` element. The label is not associated with any work item field. Optionally, you can add a hyperlink to some or all of the text. + +To add elements to a form, you modify a work item type. See [Modify or add a custom work item type](../customize/add-modify-wit.md). + +The `LabelText` element is a child element of the `Control` element. + + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<LabelText> + <Text> + <Link OpenInNewWindow="true | false" UrlPath="URLLinkWithParameters"> + <Param index="IndexValue " value="ParamValue " type ="Original | Current"/> + </Link> + LabelText + </Text> +</LabelText> +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Child elements and attributes + +|Element|Description| +|-------------|-----------------| +|`LabelText`|Required `Control` element when `type="LabelControl"`.<br /> Container element for a standalone label or informational text. The element type is complex type: [LabelElementType](#LabelElementType).<br /><br /> This element overwrites the value specified by the `Label` attribute specified by the `Control` element.| +|`Text`|Required `LabelText` element.<br /><br /> Container element for the information or label to appear on the work item form. If the `Link` element is specified within the label, the portion of the text within the element is hyperlinked. If the `Link` element is not specified, the text is rendered without a hyperlink.<br /><br /> Different parts of the label text can be hyperlinked with different URLs. Multiple text element values can be specified in a series.<br /> The element type is complex type: [TextElementType](#TextElementType).<br /><br /> If the `Text` element is not specified, then the `Control` element `Label` attribute text appears on the work item form.| +|`Link`|Optional `Text` element.<br /><br /> Container element for the hyperlink to be applied to a field or standalone label that appears on the work item form. The element type is `HyperLinkType`. **Note:** You must specify the `Label` attribute in a `Control` element when you specify a child `Link` element. <br /> For more information, see [Link and Param](link-param-xml-elements-reference.md).| + +### Parent elements + +|Element|Description| +|-------------|-----------------| +|[Control](control-xml-element-reference.md)|Required. Defines a field, text, hyperlink, or other control element to appear on the work item form.| + +## Remarks +You can combine plain and hyperlinked text by adding multiple `Text`elements in a `LabelText` element. + +The `LabelText` element is only recognized by clients that are running the latest version of Team Explorer. Therefore, you must specify the `Label` attribute in a `Control` element. For clients that are running the latest version of Team Explorer, the text provided by the `LabelText` element appears in the work item form. For clients that are running earlier versions of Team Explorer, the text specified by the `Control` element `Label` attribute appears in the work item form. + +### Example: Standalone label + +The following example adds the plain text "Enter details about how to reproduce the bug in the space below:" to a work item form. + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Type="LabelControl" Label=" Enter details about how to reproduce the bug in the space below:"> +   <LabelText> +      <Text>Enter details about how to reproduce the bug in the space below: +      </Text> +   </LabelText> +</Control> +``` + +### Example: Standalone Label with Hyperlink + +The following example adds a hyperlink which is labeled "How do I use this work item?" to a work item form. + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Type="LabelControl" Label="How do I use this work item?"> +   <LabelText> +      <Text> +   <Link UrlRoot="http://www.live.com"></Link> +      How do I use this work item? +      </Text> +   </LabelText> +</Control> +``` + +### Example: Hyperlink Applied to Portions of Text + +The following example adds a two-part label to a work item form. The first part, "Iteration Path", is associated with a hyperlink. The second part, "(must be 3 levels deep)" appears on the work item form as plain text. + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Type="FieldControl" FieldName="System.IterationPath" LabelPosition="Left"> +   <LabelText> +      <Text> +         <Link UrlRoot="@WssSiteUrl/render.aspx?wit=bug&topic=Iteration"> +         </Link> +      Iteration Path +      </Text> +      <Text> (must be 3 levels deep)</Text> +   </LabelText> +</Control> +``` + +## Related notes +- [Specify work item form controls](specify-work-item-form-controls.md) \ No newline at end of file diff --git a/docs/work/reference/layout-xml-element-reference.md b/docs/work/reference/layout-xml-element-reference.md new file mode 100644 index 00000000000..c14dc623839 --- /dev/null +++ b/docs/work/reference/layout-xml-element-reference.md @@ -0,0 +1,115 @@ +--- +title: Layout XML element reference | VSTS & TFS +description: Use the Layout element to define how the elements on the work item form appear - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 8898c116-62f8-416f-af33-90c389a038bb +ms.manager: douge +ms.author: kaelli +ms.date: 02/14/2017 +--- + +# Layout XML element reference + +**TFS 2015 | TFS 2013** + +>[!IMPORTANT] +>This topic applies to team project customization for the On-premises XML process model and the old work item form. For the Hosted XML process model and TFS 2017 and later versions that use the new work item form, see [WebLayout and Control elements](weblayout-xml-elements.md). For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + + +You can use the `Layout` element to define how the elements on the work item form appear. You can define more than one layout to support different clients, such as the Windows client for Visual Studio or the the web portal layout. + +To add elements to a form, you modify the definition for a work item type. See [Modify or add a custom work item type](../customize/add-modify-wit.md). + +The **Layout** element is a required child element of the **FORM** element. For more information about how to use the **Layout** element, see [Design the work item form](design-work-item-form.md). + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<Layout Target="ClientName" MinimumSize="(width,height)" Padding="(left, top, right, bottom)" +Margin="(left, top, right, bottom)" ControlSpacing="distance" LabelSpacing="distance" HideControlBorders="True | False"HideReadOnlyEmptyFields="True | False"> +    <Group> . . . </Group> +    <Control> . . . </Control> +    <TabGroup> . . . </TabGroup> +    <Splitter> . . . </Splitter> +</Layout > +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Attributes + +|Attribute|Description| +|---------------|-----------------| +|`Target`|Optional `Layout` attribute.<br /> Specifies the name of the client to which the layout applies. The type is xs:string. Specify one of the following strings:<br /> - `WinForms`: Applies the form to Team Explorer and Team Explorer Everywhere.<br />- `Web`: Applies the form to the web portal.| +|`MinimumSize`|Optional `Layout` attribute.<br /> Specifies the minimum size in pixels for the form. The syntax is specified in (*width, height*). The attribute type is `SizeType`.<br />Pattern value: ^\\(\d+\\,\d+\\)$<br /> Pattern value example: (100,100)| +|`Padding`|Optional `Layout` attribute.<br />Specifies the amount of space in pixels around the inside border of the form. The attribute type is `SizeType`.<br /> Pattern value: ^\\(\d+\\,\d+\\,\d+\\,\d+\\)$<br />Pattern value example: (2,0,2,0)| +|`Margin`|Optional `Layout` attribute.<br />Specifies the amount of space in pixels around the outside border of the form. The attribute type is `SizeType`.<br /> Pattern value: ^\\(\d+\\,\d+\\,\d+\\,\d+\\)$<br /> Pattern value example: (2,0,2,0)| +|`ControlSpacing`|Optional `Layout` attribute.<br />Specifies the vertical offset of controls defined in the form.| +|`LabelSpacing`|Optional `Layout` attribute.<br />Specifies the number of pixels between the label and the edit region of the control.| +|`HideControlBorders`|Optional `Layout` attribute.<br />Specify a value of `True` to hide control borders, and `False` to display control borders.| +|`HideReadOnlyEmptyFields`|Optional `Layout` attribute.<br />Specify a value of `True` to hide read-only and empty fields, and `False` to display these fields.| + +### Child elements + +|Element|Description| +|-------------|-----------------| +|[Group](all-form-xml-elements-reference.md)|Optional. Defines a group of elements to display together on the form.| +|[Control](control-xml-element-reference.md)|Optional. Defines a work item field, text, hyperlink, or other control element to display in a work item form.| +|[TabGroup](all-form-xml-elements-reference.md)|Optional. Contains one or more `Tab` elements.| +|[Splitter](all-form-xml-elements-reference.md)|Optional. Defines a splitter and its orientation on the form between sibling form elements.| + +### Parent elements + +|Element|Description| +|-------------|-----------------| +|[FORM](all-form-xml-elements-reference.md)|Required. Contains the `Layout` element that defines how the elements on the work item type form are displayed.| + +## Remarks + The `Layout` element is a required child element of `FORM`. The `Layout` element specifies a choice, and at least one of the child elements must be defined: `Group`, `Control`, `TabGroup`, or `Splitter`. You can define more than one child element. + +## Example + +> [!div class="tabbedCodeSnippets"] +```XML +<FORM> + <Layout> + <Group> + <Column PercentWidth="36"> + <Group> + <Control FieldName="System.Title" Type="FieldControl" Label="Title" LabelPosition="Left" /> + <Control FieldName="System.AreaPath" Type="WorkItemClassificationControl" Label="Area" LabelPosition="Left" /> + <Control FieldName="Microsoft.VSTS.Common.ProductUnit" Type="FieldControl" Label="Product Unit" LabelPosition="Left" /> + <Control FieldName="Microsoft.DevDiv.BusinessUnit" Type="FieldControl" Label="Business Unit" LabelPosition="Left" /> + </Group> + </Column> + <Column PercentWidth="33"> + <Group> + <Control FieldName="Microsoft.DevDiv.SubTitle" Type="FieldControl" Label="Sub Title" LabelPosition="Left" /> + <Control FieldName="System.IterationPath" Type="WorkItemClassificationControl" Label="Iteration" LabelPosition="Left" /> + <Control FieldName="Microsoft.DevDiv.Other" Type="FieldControl" Label="Other" LabelPosition="Left" /> + </Group> + </Column> + <Column PercentWidth="31"> + <Group> + <Control FieldName="Microsoft.DevDiv.Type" Type="FieldControl" Label="Type" LabelPosition="Left" /> + <Control FieldName="System.AssignedTo" Type="FieldControl" Label="Assigned To" LabelPosition="Left" /> + <Control FieldName="System.State" Type="FieldControl" Label="State" LabelPosition="Left" /> + </Group> + </Column> + </Group> +. . . + </Layout> +</FORM> +``` + + +## Related notes +- [Control](control-xml-element-reference.md) +- [Specify work item form controls](specify-work-item-form-controls.md) +- [All FORM elements](all-form-xml-elements-reference.md) +- [Design the work item form](design-work-item-form.md) \ No newline at end of file diff --git a/docs/work/reference/link-param-xml-elements-reference.md b/docs/work/reference/link-param-xml-elements-reference.md new file mode 100644 index 00000000000..4e9f484387d --- /dev/null +++ b/docs/work/reference/link-param-xml-elements-reference.md @@ -0,0 +1,118 @@ +--- +title: Link and Param XML elements reference | VSTS & TFS +description: Adds a hyperlink to a field or a standalone label on a work item form by using the Link element - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 6651e599-52d4-4edc-87cf-264d64befbac +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# Link and Param XML elements reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can add a hyperlink to a field or a standalone label on a work item form by using the `Link` element. You use the `Link` element in the following instances to: + +- Add a hyperlink to a field label +- Add a hyperlink to a standalone label or portions of informational text +- Specify the URL for content to be displayed within a work item form + +To add elements to a form, you modify the definition for a work item type. See [Modify or add a custom work item type](../customize/add-modify-wit.md). + +The `Link` element is either a child element of the `Control` element, or a child element of the `WebpageControlTarget` or `WebpageControlOptions` elements. For more information about these elements, see [Control](control-xml-element-reference.md) and [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md). + + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<Link URLRoot="URLRoot" URLPath ="URLPathWithParameters"> +   <Param Index="IndexValue " Value="ParamValue " Type ="Original | Current"/> +</Link> +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Child elements and attributes + +|Element|Attribute|Description| +|-------------|---------------|-----------------| +|`Link`| |Optional `Control` element when `type="FieldControl"`.<br /> Optional `LabelText` element.<br />Optional `Text` element.<br /> Optional `WebpageControlOptions` element.<br />Container element for defining a hyperlink or URL. | +| |`UrlRoot`|Required `Link` attribute.<br /> Specifies the protocol and the server name of the URL to which the label links. Supported protocols are HTTP, HTTPS and MAILTO.<br /> You can either hardcode the specified server name , or you can use one of the following macros and optionally append additional address information to a macro: **Note:** Each macro links to the URL that is defined and enabled for the team project of the work item form for which the `Link` element is defined. If any of the resources are not provisioned or enabled for the team project, a "page not found" error will appear. <br />- `@PortalPage`: The URL of the SharePoint site for the current team project (for example, http://*serverName*/sites/*collectionName/TeamProjectName*).<br />- `@ProcessGuidance`: The URL of the SharePoint site for the process guidance for a team project.<br />- `@ReportManagerUrl`: The URL of the server that hosts Report Manager for the current team project. This provides a link to the folder view for the reports (for example, `http://serverName/Reports/Pages/Folder.aspx?ItemPath=/*collectionName/teamProjectName*`).<br />- `@ReportServiceSiteUrl`: The URL of the server that hosts SQL Server Reporting Services for the current team project plus the base path for the team project (for example, http://*serverName*/Reports/Pages/reportservice.asmx?ItemPath=/*collectionName/teamProjectName*).<br /> To determine the hardcoded value for the first two macros, you can open the project portal settings for a team project. For more information, see [Configure or redirect process guidance](../../report/sharepoint-dashboards/configure-or-redirect-process-guidance.md). | +| |`UrlPath`|Optional `Link` attribute.<br /> Specifies a URL path for the hyperlink. You use this attribute to specify variable parameters that are determined at run time. | +|`Param`| |Optional `Link` element. Required when `UrlPath` is specified.<br /> Specifies a value to be used to determine the URL of the hyperlink when `UrlPath` is specified.<br /> | +| |`Index`|Required `Param` attribute.<br /> Specifies the index of the parameter where the value must be formatted into the URL string. It is not required to order the Index values sequentially; however, they must match the number of the index in the `URLPath` string. The first index number should be 0.| +| |`Value`|Required `Param` attribute.<br /> Specifies the number associated with the value for a URL path for the hyperlink.<br /> Specifies a value that must be formatted into the `URLPath` string. Values must be valid reference names of fields used in the work item type definition.<br /> The `@Me` variable is supported. It is replaced with the name of the current team member that is viewing the work item form. Value entries are not case sensitive<br />| +| |`Type`|Optional `Param` attribute.<br /> Specifies that the original value of the field must be used for the parameter. <br /> Valid values are as follows:<br /> - `Original`: Specifies to use the original parameter value to determine the URL path.<br />- `Current`: Specifies to use the current parameter value to determine the URL path.<br /> If this attribute is not specified, the current value of the field is used as a parameter| + +### Parent elements + +|Element|Description| +|-------------|-----------------| +|[Control](control-xml-element-reference.md)|Required. Defines a field, text, hyperlink, or other control element to appear on the work item form.| +|[LabelText](labeltext-and-text-xml-elements-reference.md)|Optional `Control` element.<br />Container element for a label to appear on the work item form.| +|[Text](labeltext-and-text-xml-elements-reference.md)|Optional `LabelText` element.<br /> Container element for the information or label to appear on the work item form.| +|[WebpageControlOptions](control-xml-element-reference.md)|Optional `Control` element.<br /> Container element that specifies the options for the Web page control.<br />For more information, see [Displaying Web Content within a Work Item Form](http://msdn.microsoft.com/en-us/25857829-d83e-4213-b4ec-63ec5c7b0afa).| + +## Remarks +The default behavior of the `Link` element is to open the hyperlink in the work item form or Web page. If the hyperlink is authored to open in a new window (target="_blank"), then an external browser is opened. + +You can combine plain and hyperlinked text by adding multiple `Text` elements in a `LabelText` element. + +The `LabelText` element is only recognized by clients that are running the latest version of Team Explorer. Therefore, you must specify the `Label` attribute in a `Control` element when you specify a child `Link` element. For clients that are running the latest version of Team Explorer, the text provided by the a `LabelText` element appears in the work item form. For clients that are running previous versions of Team Explorer, the text specified by the `Control` element `Label` attribute appears in the work item form. + +### Example: Specify a hyperlink with parameters + +The following example shows how you can define a hyperlink that links to the process guidance for the Iteration topic. + +> [!div class="tabbedCodeSnippets"] +```XML +http://ServerName/sites/CollectionName/ProjectName/render.aspx?wit=bug&topic=Iteration +``` + +The name of the project is derived from the value assigned to the System.Project field. + +> [!div class="tabbedCodeSnippets"] +```XML +<Link UrlRoot="http://serverName" UrlPath="sites/{0}/render.aspx?wit=bug&topic=Iteration"> + <Param Index="0" Value="System.Project" /> +</Link> +``` + +### Example: Add a hyperlink to a standalone label +The following example shows how you can assign a hyperlink to the text "work item guidance" on a work item form. + +> [!div class="tabbedCodeSnippets"] +```XML +<Control type="LabelControl"> + <LabelText> + <Text> + <Link UrlRoot="http://www.msn.com" /> + work item guidance + </Text> + </LabelText> +</Control> +``` +## Example: Add a hyperlink to a field + +The following example shows how you can add a hyperlink to the label for a field on a work item form. + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Type="FieldControl" FieldName="System.Title" LabelPosition="Left" Label="This text comes from the Label attribute:"> + <LabelText> + <Text> + <Link UrlRoot="http://www.live.com/" /> + This text comes from the inner Label Text + </Text> + </LabelText> +</Control> +``` + + +## Related notes +- [Specify work item form controls](specify-work-item-form-controls.md) +- [Design the work item form](design-work-item-form.md) \ No newline at end of file diff --git a/docs/work/reference/link-type-element-reference.md b/docs/work/reference/link-type-element-reference.md new file mode 100644 index 00000000000..340fbed2eee --- /dev/null +++ b/docs/work/reference/link-type-element-reference.md @@ -0,0 +1,346 @@ +--- +title: Link type element reference | VSTS & TFS +description: Synxtax and usage for the LinkType element used to define custom link types to form link relationships between different work item types in Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: db4e74f7-9c0f-4653-88d4-3805ae34f439 +ms.manager: douge +ms.author: kaelli +ms.date: 02/10/2017 +--- + +# LinkTypes elements reference + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +>[!IMPORTANT] +>This topic provides a reference of link types defined for VSTS and TFS. For the On-premises XML process model, you can add custom link types. Custom link types are not supported for Hosted XML or Inheritance process models. For an overview of process models and supported cusomizations, see [Customize your work tracking experience](../customize/customize-work.md). + +You use different link types to form link relationships between different work item types (WITs). There are three categories of link types: system-defined, process-defined, and user-defined or custom. The link types defined in the default processes support link relationships among the test management WITs. + +Each link type defines the link labels, topology type, and restrictions that are used when links between work items are constructed. For example, the parent-child link type defines two labels (Parent and Child), supports a hierarchical or tree topology, and prevents circular references from being created between work items. + +You can customize an existing link type or create a link type to meet your project tracking requirements. Before you start to add or modify a link type, you should assess the link types available and how they are used in your team project. See [Manage dependencies, link work items](../track/link-work-items-support-traceability.md). Links are added through the work item form, which contains the links control. See [Link controls, restrictions, and fields](../track/linking-attachments.md). + +> [!NOTE] +> You cannot customize the system-defined link types that correspond to the Related, Parent-Child, and Successor-Predecessor links. + +You may want to modify or create a link type for one of the following reasons: + +- Change the link labels that are used to match your team's naming conventions. +- Add a link type to track a particular relationship that is unique to your team's process. + + +The link type is specified in a type definition XML file that you import to a team project collection. To customize or create a link type, use **witadmin importlinktype** to import the link type definition file to the project collection that hosts your team project. With the **witadmin** command-line tool, you can deactivate, delete, export, import, list, and reactivate link types. See [Manage link types](witadmin/manage-link-types.md). + +<a name="SyntaxStructure"></a> +## Syntax structure +You can define additional link types by adding them to the link types that are defined for a team project collection. + +You can define valid link types for use in your process based on the structure that the link type definition schema provides. A link type is defined by the following XML syntax in the link types XML file. + +> [!div class="tabbedCodeSnippets"] +```XML +<LinkTypes> +   <LinkType ReferenceName="LinkTypeName" ForwardName="ForwardName" ReverseName="ReverseName" Topology="TopologyType" /> +</LinkTypes> +``` + +The descriptions in the following table apply to the previous syntax: + +|Attribute | Description | +|---|---| +|*ReferenceName*    |Name of the link type. This name is used internally when you create a link between two work items.| +|*ForwardName*|Name of the link at the source work item. This name appears when you add links to the source work item.| +|*ReverseName*|Name of the link at the target work item. This name appears when a listing of the links at the target work item appears.| +|*TopologyType*|Specifies the **DirectedNetwork**, **Network**, **Tree**, or **Dependency** [topology](#topology). The first three topologies are directional, and you use them to define subordinate or sequential relationships. You use **Network** to define relationships between peers or where no implied subordination exists.| + +Link directionality is determined by the assignments made to the **ForwardName** and **ReverseName** attributes. If you create a custom link and assign the same name to the forward and reverse names, you should set the link type to **Network** because it is the only non-directional topology. + +<a name="Requirements"></a> +### Requirements + +Each link type has a reference name and two optional friendly names, or name labels, which must be unique within the project collection. Each link type name must meet the following requirements: + +- Names can have up to 254 Unicode characters +- Names must not be empty +- Names cannot have leading or trailing white spaces +- Names cannot contain backslash (\\) characters +- Names cannot contain two consecutive white spaces. + + +<a id="link-types"> </a> +##Link types + +Link types come in two flavors. Work item link types support creating relationships among work items. External link types support connecting a work item to an external object, such as a code object, build, or hyperlink. You can't create a custom link type that links to an external (non-work item) object. + + +<a id="work-link-types"> </a> +### Work item link types +Work item link types are system-defined, process-defined, or user-defined (custom). Most links are system defined. Each link type defines the link labels, topology type, and restrictions that are used when links between work items are constructed. For example, the parent-child link type defines two labels (Parent and Child), supports a hierarchical or tree topology, and prevents circular references from being created between work items. + + +<img src="_img/linkscontrol-work-item-link-types.png" alt="Work item link types, conceptual mapping" style="border: 2px solid #C3C3C3;" /> + +The following table lists the work item link types you can specify within the **WorkItemLinksFilter** element. + +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="16%">Link type</th> +<th width="35%">Reference name</th> +<th width="49%">Description</th> +</tr> + + +<tr> +<td>Affects<br/>Affected By</td> +<td><p>Microsoft.VSTS.Common.Affects.Forward<br/> +Microsoft.VSTS.Common.Affects.Reverse</p> +<p>Topology type: Dependency<br/> +Link category: Process-defined</p> +</td> +<td>Use to track change requests to requirements. (CMMI process) +</tr> + +<tr> +<td>Duplicate<br/>Duplicate Of <sup>1</sup></td> +<td><p>System.LinkTypes.Duplicate-Forward<br/> +System.LinkTypes.Duplicate-Reverse</p> +<p>Topology type: Tree<br/> +Link category: System-defined</p> +</td> +<td>Used to link duplicate work items.</td> +</tr> + + +<tr> +<td>Parent<br/>Child </td> +<td><p>System.LinkTypes.Hierarchy-Forward<br/> +System.LinkTypes.Hierarchy-Reverse</p> +<p>Topology type: Tree<br/> +Link category: System-defined</p></td> +<td>Use to organize work item within a hierarchy. You can quickly create this hierarchy among backlog items using the [mapping function](../backlogs/organize-backlog.md) or among backlog items and tasks using the [sprint backlog](../scrum/sprint-planning.md) or [task board](../scrum/task-board.md). +</td> +</tr> + + + +<tr> +<td>References<br/>Referenced By</td> +<td><p>Microsoft.VSTS.TestCase.SharedParameterReferencedBy</p> +<p>Topology type: Dependency<br/> +Link category: Process-defined</p></td> +<td>Use to link Test Cases to Shared Parameters to support the ability to [repeat a test with different data](../../manual-test/repeat-test-with-different-data.md). In general, you wouldn't add this link type to a scoped links control. +</td> +</tr> + + + +<tr> +<td>Related</td> +<td><p>System.LinkTypes.Related</p> +<p>Topology type: Network<br/> +Link category: System-defined</p></td> +<td>Use to link work items that are at the same level, such as two user stories that define features that overlap one another. The Related link type creates simple relationships with few restrictions. +</td> +</tr> +<tr> +<td>Successor<br/>Predecessor</td> +<td><p>System.LinkTypes.Dependency</p> +<p>Topology type: Dependency<br/> +Link category: System-defined</p></td> +<td>Use to track tasks that must be completed before others can be started. When you plan work using Project, linked tasks are represented as predecessor-successor links in TFS. +</td> +</tr> + +<tr> +<td>Tested By<br/>Tests</td> +<td><p>Microsoft.VSTS.Common.TestedBy-Forward<br/> +Microsoft.VSTS.Common.TestedBy-Reverse</p> +<p>Topology type: Dependency<br/> +Link category: Process-defined</p></td> +<td>Use to track test cases that test user stories (Agile), product backlog items (Scrum), or requirements (CMMI). Can also link to other work item types such as bugs, issues, or tasks. </td> +</tr> + +<tr> +<td>Test Case<br/>Shared Steps</td> +<td><p>Microsoft.VSTS.TestCase.SharedStepReferencedBy</p> +<p>Topology type: Dependency<br/> +Link category: Process-defined</p></td> +<td>Use to link test cases with shared steps. You [share steps between test cases](../../manual-test/mtm/share-steps-between-test-cases.md) to avoid having to create multiple entries of the same sequence of steps. </td> +</tr> + +</tbody> +</table> + +Notes: +1. Available only from VSTS and TFS 2017 and later versions. + +<a id="test-plan-links"> </a> +### Test plan and test suite links + +What link type is used to link test cases to test suites and test suites to test plans? + +Test related link types link test case management work items to one another, or to other work items. From the web portal or Microsoft Test Manager, you can view which test cases are defined for a test suite, and which test suites are defined for a test plan. However, these objects aren't linked to each other through link types. + +<img src="_img/linkscontrol-test-related-links.png" alt="Test-related link types, conceptual mapping" style="border: 2px solid #C3C3C3;" /> + + +<a id="external-link-types"> </a> +### External link types + +External link types are all system-defined and support linking work items to other objects as shown in the following image. + +<img src="_img/linkscontrol-external-link-types.png" alt="External link types, conceptual mapping" style="border: 2px solid #C3C3C3;" /> + + +The following table describes the external link types you can specify to scope a links control using the **ExternalLinksFilter** element. + + +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="25%">External link type</th> +<th width="75%">Description</th> + +</tr> + + +<tr> +<td>Branch</td> +<td>Used to link a work item to a build.</td> +</tr> + +<tr> +<td>Build</td> +<td>Used to link a work item to a branch.</td> +</tr> + +<tr> +<td>Fixed in Changeset</td> +<td>Used to link a work item to a changeset. </td> +</tr> + +<tr> +<td>Fixed in Commit</td> +<td>Used to link a work item to a commit.</td> +</tr> + +<tr> +<td>Hyperlink</td> +<td>Used to link a work item to a URL. </td> +</tr> + +<tr> +<td>Pull Request</td> +<td>Used to link a work item to a pull request. </td> +</tr> + +<tr> +<td>Model Link</td> +<td>(Not supported within the web portal) Used to link a work item to a diagram—such as an Activity, Component, Layer, Use Case, or other diagram—stored within the system. You can link diagrams to work items only from the Visual Studio client. </td> +</tr> + +<tr> +<td>Result attachment </td> +<td>Used to link a work item to an attachment associated with a test result. These links appear when you associate a work item with a test result from the Test hub or Microsoft Test Manager. </td> +</tr> + +<tr> +<td>Storyboard</td> +<td>Used to link a work item to a file on a network. See [Storyboard your ideas using PowerPoint](../office/storyboard-your-ideas-using-powerpoint.md#link-storyboard) for details. </td> +</tr> + +<tr> +<td>Tag</td> +<td>Used to link a work item to a tag that's been defined for a git commit or git repository. See [Work from the Git command prompt](../../git/command-prompt.md) for more information. </td> +</tr> +<tr> +<td>Test Result </td> +<td>Used to link a work item to a test result. These links appear when you associate a work item with a test result from the Test hub or Microsoft Test Manager. </td> +</tr> + +<tr> +<td>Versioned item</td> +<td>Used to link a work item to a file or changeset defined within a TFVC repository. </td> +</tr> +</tbody> +</table> + +<a id="topology"></a> +### Link type topologies and restrictions + +The topology types described in the following table determine the restrictions placed on the usage of each link type. + + +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="55%">Topology type</th> +<th width="45%">Illustration</th> + +</tr> +<tr> +<td><p>**Dependency**: You can use dependency links to create relationships between work items that have directionality and to restrict circular relationships. The link name is different at the end points.</p><p>**Example usage**: Use a dependency link to record the features that must be completed to deliver a user requirement. You can't create a dependent link between two work items that are linked to the same work items via dependent links. </p></td> +<td>![Dependency topology](_img/IC268537.png) </td> +</tr> + + +<tr> +<td><p>**Directed Network**: You can use directed network links to create relationships between work items that indicate directionality. The link name is different at the end points. Circular relationships are allowed.</p> +<p>**Example usage**: Use a directed network link to record a relationship between two features that might share dependencies and which you want to distinguish from each other in some way. </p></td> +<td>![Directed network topology](_img/IC268536.png)</td> +</tr> + +<tr> +<td><p>**Network**: You can use network links to create basic relationships between work items that are non-restrictive. The link is the same at both end points. Circular relationships are allowed.</p> +<p>**Example usage**: Use a network link, such as Related, to record a relationship between two features that might share dependencies.</p></td> +<td>![Network topology](_img/IC268535.png)</td> +</tr> + +<tr> +<td><p>**Tree**: You can use tree links to create hierarchical relationships among work items. Tree links support multi-level hierarchical views, have directionality, and restrict circular relationships. The link name is different at the end points. Tree links are the only type of link that is supported by the **Tree of Work Items** query. With Parent/Child links, you can't assign two parents to a child.</p> +<p>**Example usage**: Use a tree link to record tasks and subtasks from your team that must be completed to deliver a user story or backlog item. Or, [map backlog items to features, and features to epics](../backlogs/organize-backlog.md). </p></td> +<td>![Tree topology](_img/IC268538.png)</td> +</tr> + +</tbody> +</table> + + +<a id="custom-link-type"></a> +## Create a custom link type (TFS) + +>[!NOTE] +>**Feature availability**: Creating a custom link type is only supported for the On-premises XML process model. You can't add custom link types when you use the Hosted XML process model. + +To create a custom link type, define the link type XML definition file according to the syntax provided earlier in this topic, and then import it using [**witadmin importlinktype**](../reference/witadmin/manage-link-types.md). Each process-defined link type is associated with an XML definition file. These files are defined in the ```WorkItem Tracking\LinkTypes``` folder of the [process set of files and folders](../reference/process-templates/customize-process.md). + +For example, the following syntax defines the Microsoft.VSTS.Common.TestedBy link type provided via the TestedBy.xml file: + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<LinkTypes> + <LinkType ReferenceName="Microsoft.VSTS.Common.TestedBy" ForwardName="Tested By" ReverseName="Tests" Topology="Dependency" /> +</LinkTypes> +``` + +When you create or update a team project, the link type definitions defined for the reference process are imported into the project collection. + + +##Customize the links control + +In addition to defining link types, you can customize the work item type definition to accept or prohibit specific links based on link type. You use the `LinksControlOptions` element to define the options that control what links can be added to a work item and to which work item types. Also, you can specify the default columns that you want to appear for the list of links in a work item. For more information, see [Define link controls to restrict link relationships](define-link-controls.md). + +## Related notes +- [Link work items to track dependencies](../track/link-work-items-support-traceability.md) +- [Customizing your work tracking experience](../customize/customize-work.md) + + +### Test management links +Using the web portal or Test Manager, you can view which test cases are defined for a test suite, and which test suites are defined for a test plan. However, these objects aren't linked to each other through link types. + + + diff --git a/docs/work/reference/linkscontroloptions-elements.md b/docs/work/reference/linkscontroloptions-elements.md new file mode 100644 index 00000000000..25965e46801 --- /dev/null +++ b/docs/work/reference/linkscontroloptions-elements.md @@ -0,0 +1,143 @@ +--- +title: LinksControlOptions XML elements (client) | TFS +description: XML syntax to scope the allowed links within a links control element used in the client and web forms for Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: b43e4e57-3a42-4705-9e52-eec2f8fb5f72 +ms.manager: douge +ms.author: kaelli +ms.date: 02/14/2017 +--- + +# LinksControlOptions elements (Client and web, TFS 2015) + +**TFS 2015 | TFS 2013** + +>[!IMPORTANT] +>This topic applies to team project customization for the On-premises XML process model for TFS 2015 and earlier versions. For the Hosted XML process model and TFS 2017 and later versions, see [LinksControlOptions XML elements](linkscontroloptions-xml-elements.md). +> +>Customizing link control options is not a supported feature for the Hosted XML process model. For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + + +You use the `LinksControlOptions` element to define the options for controlling what links can be added to a work item and the default columns that you want to appear for the list of links in a work item. When you add a links control to a work item form, you can specify filters that restrict the types of links that users can be view and create and the types of work items to which users can create links. Specifically, you use the following elements as indicated: + +- `WorkItemLinkFilters`: Use to restrict the types of links between work items in the current team project. + +- `ExternalLinkFilters`: Use to restrict the types of links that can be created between work items and other objects, such as changesets, hyperlinks, or version controlled files. + +- `WorkItemTypeFilters`: Use to restrict the link relationships that users can create based on work item type and whether the work item is defined in the current team project. + +In each of these elements, you can specify `Filter` elements to specify the link types or work item types that you want to include or exclude. For more information about how to use these elements, see [Define link controls to restrict link relationships](define-link-controls.md). + +The `LinksControlOptions` element is a child element of the `CONTROL` element. + + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<LinksControlOptions> + <WorkItemLinkFilters FilterType="include | exclude | includeAll | excludeAll"> + <Filter LinkType="linkTypeRefName" FilterOn="reversename | forwardname" /> + </WorkItemLinkFilters> + <ExternalLinkFilters FilterType ="include | exclude | includeAll | excludeAll"> + <Filter LinkType="externalLinkName"/> + </ExternalLinkFilters> + <WorkItemTypeFilters Scope=" project | all" FilterType=" include | exclude | includeAll" /> + <Filter WorkItemType="workItemTypeReferenceName"/> + </WorkItemTypeFilters> + <LinkColumns> + <LinkColumn RefName="reference name" | LinkAttribute="link attribute name"/> + </LinkColumns> +</LinksControlOptions> +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Child elements and attributes + +|Element|Attribute|Description| +|-------------|---------------|-----------------| +|`LinksControlOptions`||Optional `Control` element when `type="LinksControl"`.<br /><br /> Provides a container for elements that define what links can be added to a work item and the default columns to appear for the list of link relationships in a work item.<br /><br /> The element type is complex type: [LinksControlOptionsType](#LinksControlOptionsType).| +|`WorkItemLinkFilters`||Optional `LinksControlOptions` element.<br /><br /> Provides a container for one or more `Filter` elements that specify the link filter criteria to use for link types that are defined for the team project collection and that create relationships between work items.<br /><br /> The element type is complex type: [WorkItemLinkFiltersType](#WorkItemLinkFiltersType).| +||`FilterType`|Required `WorkItemLinkFilters` attribute.<br /><br /> Defines the method used to filter the set of link types provided in the set of `Filter` elements. The element type is simple type: [LinksControlFilterKind](#LinksControlFilterKind).<br /><br /> Valid values that you can use are:<br /><br /> - `exclude`: Use to disallow links to be created from those link types listed in the `Filter` elements.<br />- `excludeAll`: Use to disallow all link types.<br />- `include`: Use to allow only those link types listed in the `Filter` elements.<br />- `includeAll`: Use to allow links to be created from all link types.| +|`Filter`||Required `WorkItemLinkFilters` element when the `FilterType` is `exclude` or `include`.<br /><br /> When the `FilterType` is `excludeAll` or `includeAll`, no `Filter` elements should be specified.<br /><br /> Specifies the types of links that are to be included or excluded from the set of links that can be created for the work item. The element type is simple type: [WorkItemLinkFilterElementType](#WorkItemLinkFilterElementType).| +||`LinkType`|Required `Filter` attribute.<br /><br /> Specifies the reference name for a type of link. Valid types include the following system defined link types:<br /><br /> - `Storyboard`<br />- System.LinkTypes.Dependency<br />- System.LinkTypes.Hierarchy<br />- System.LinkTypes.Related<br /><br /> In addition, you can specify the reference name for custom link types defined for the team project collection. For more information, see [LinkTypes](link-type-element-reference.md).| +||`FilterOn`|Optional `Filter` attribute.<br /><br /> Specifies the type of filter to apply to the link type. The element type is simple type: [LinksControlFilterOnKind](#LinksControlFilterOnKind).<br /><br /> Valid values are:<br /><br /> - `forwardname`: Use to filter on the forward name defined for a type of link.<br />- `reversename`: Use to filter on the reverse name defined for a type of link.<br /><br /> If unspecified, then both the forward and reverse names are used to filter the link type. **Note:** If the link type topology is Network, the forward and reverse names are the same. For more information, see [LinkTypes](link-type-element-reference.md).| +|`ExternalLinkFilters`||Optional `LinksControlOptions` element.<br /><br /> Provides a container for one or more `Filter` elements that specify the link types that users can specify to create relationships to objects that are not work items, such as changesets, hyperlinks, and files under version control. The element type is complex: [ExternalLinkFiltersType](#ExternalLinkFiltersType).| +||`FilterType`|Optional `ExternalLinkFilters` attribute.<br /><br /> Defines the method that is used to filter the list of link types provided in the set of `Filter` elements. The element type is simple: [LinksControlFilterKind](#LinksControlFilterKind).<br /><br /> You can use the following values:<br /><br /> - `exclude`: Use to disallow links to be created from those link types that appear in the `Filter` elements.<br />- `excludeAll`: Use to disallow all link types.<br />- `include`: Use to allow only those link types listed in the `Filter` elements.<br />- `includeAll`: Use to allow links to be created from all link types.<br /><br /> If unspecified, all links to external work items are excluded.| +|`Filter`||Required `ExternalLinkFilters` element when the `FilterType` is `exclude` or `include`.<br /><br /> When the `FilterType` is `excludeAll` or `includeAll`, no `Filter` elements should be specified.<br /><br /> The element type is complex: [ExternalLinkFilterElementType](#ExternalLinkFilterElementType).<br /><br /> Specifies the name of the link types that will be included or excluded from the set of links that users can create for the work item.| +||`LinkType`|Required `Filter` attribute.<br /><br /> Specifies the reference name for a type of link to exclude or include. The attribute type is simple: [ExternalLinkTypeName](#ExternalLinkTypeName). You can specify the following link types:<br /><br /> - Fixed in Changeset<br />- Result Attachment<br />- Source Code File<br />- Test Result<br />- Workitem Hyperlink| +|`WorkItemTypeFilters`||Optional `LinksControlOptions` element.<br /><br /> Provides a container for one or more `Filter` elements that specify the filter criteria to apply to work item types.<br /><br /> The element type is complex: [LinksControlWorkItemTypeFiltersElementType](#LinksControlWorkItemTypeFiltersElementType).| +| |`Scope`|Optional `WorkItemTypeFilters` attribute.<br /><br /> Defines the scope of the filter applied to the set of work item types provided in the set of `Filter` elements. The element type is simple type: [LinksControlWorkItemTypeFilterScopeKind](#LinksControlWorkItemTypeFilterScopeKind).<br /><br /> Valid values that you can use are:<br /><br /> - `all`: Use to allow links to be created to all work item types specified in the `Filter` tags.<br />- `project`: Use to allow links to be created only to those work item types that are defined for the current project.<br /><br /> If unspecified, links to all types of work items are allowed.| +| |`FilterType`|Required `WorkItemTypeFilters` attribute.<br /><br /> Defines the method that is used to filter the set of work item types provided in the set of `Filter` elements. The element type is simple: [LinksControlWorkItemTypeFilterKind](#LinksControlWorkItemTypeFilterKind).<br /><br /> You can use the following values:<br /><br /> - `exclude`: Use to disallow the work item types in the `Filter` elements.<br />- `excludeAll`: Use to disallow all work item types.<br />- `include`: Use to allow the work item types in the `Filter` elements.<br />- `includeAll`: Use to allow all work item types.<br /><br /> If you do not specify any of these values, links to all work item types are allowed.| +|`Filter`||Optional `WorkItemTypeFilters` element when the `FilterType` is `exclude` or `include`.<br /><br /> When the `FilterType` is `excludeAll` or `includeAll`, you should not specify any `Filter` elements.<br /><br /> Specifies the types of work items that are to be included or excluded from the set of work item types that can be linked to. The element type is complex type: [LinksControlWorkItemTypeFilterElementType](#LinksControlWorkItemTypeFilterElementType).| +||`WorkItemType`|Required `Filter` attribute.<br /><br /> Specifies the reference name of a work item type to be filtered. The attribute type is: `typelib:NonEmptyPlainConstant`.<br /><br /> Minimum length: 1; maximum length: 255.<br /><br /> Pattern value: ^[^\\\\]*$<br /><br /> Pattern value example: Task| +|`LinkColumns`||Optional `LinksControlOptions` element.<br /><br /> Provides a container for one or more `LinkColumn` elements. The element type is complex type: [LinkColumnsType](#LinkColumnsType).| +|`LinkColumn`||Required `LinkColumns` element.<br /><br /> Specifies the work item fields and link type attributes displayed for the list of links defined for a work item. The element type is complex type: [LinkColumnType](#LinkColumnType).<br /><br /> This column list is the default display. The user can add and remove columns from the link list.<br /><br /> The order in which the `LinkColumn` elements are listed defines the order in which the column fields are displayed in the work item form.| +||`RefName`|Optional `LinkColumn` attribute. Specify `RefName` or `LinkAttribute`, but not both.<br /><br /> Specifies the reference name corresponding to a valid work item field for the team project collection. The attribute type is `typelib:ReferenceFieldName`.| +||`LinkAttribute`|Optional `LinkColumn` attribute. Specify `RefName` or `LinkAttribute`, but not both.<br /><br /> Specifies the reference name corresponding to any attribute for a valid link type for the team project collection. The attribute type is `typelib:ReferenceFieldName`.| + +### Parent Elements + +|Element|Description| +|-------------|-----------------| +|[Control](control-xml-element-reference.md)|Required. Defines a field, text, hyperlink, or other control element to appear on the work item form.| + +## Remarks +`LinksControlOptions` is an optional child element of `Control` element where `ControlType="LinksControl"`. You can use the `LinksControlOptions` element to support the following actions: +- Specify the restrictions that govern the creation of relationships to other work items based on the link type and, optionally, the forward and reverse names of the link types. +- Specify the restrictions that govern the creation of relationships to objects other than work items, such as changeset, hyperlink, and so on, based on external link types. +- Specify the restrictions that govern the creation of relationships to other work items based on work item type and, optionally, the team project where those work items are defined. +- Specify the default column fields that you want to display information for the link list. + +## Example + The following example specifies how to enable the creation of links whose type is `Microsoft.VSTS.Common.TestedBy` and show the `Forward Name` for this link type. The filter options disallow creation of links to all external link types. In addition, displayed default column fields for the listed links correspond to the following friendly names: ID, Work Item Type, Title, Assigned To, State, and the Comment field defined for the link. For more examples, see [Define link controls to restrict link relationships](define-link-controls.md). + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Type="LinksControl" Name="TestedBy" Label="&Work items testing this bug:" LabelPosition="Top"> + <LinksControlOptions> + <WorkItemLinkFilters FilterType="include"> + <Filter LinkType="Microsoft.VSTS.Common.TestedBy" FilterOn="forwardname" /> + </WorkItemLinkFilters> + <WorkItemTypeFilters FilterType="include"> + <Filter WorkItemType="Test Case" /> + </WorkItemTypeFilters> + <ExternalLinkFilters FilterType="excludeAll"/> + <LinkColumns> + <LinkColumn RefName="System.ID" /> + <LinkColumn RefName="System.WorkItemType" /> + <LinkColumn RefName="System.Title" /> + <LinkColumn RefName="System.AssignedTo" /> + <LinkColumn RefName="System.State" /> + <LinkColumn LinkAttribute="System.Links.Comment" /> + </LinkColumns> + </LinksControlOptions> +</Control> +``` + +<a name="Toolbar"></a> +## LinksControl toolbar buttons +Each `Control` element of Type=LinksControl provides a toolbar, which contains the buttons shown in the next illustration: + +![Work item form link toolbar controls](_img/procguid_linktoolbar.png "ProcGuid_LinkToolbar") + +These buttons become available only after you perform a specific action: + +- The button to create a work item that is linked to the open work item (![Add New Linked Work Item icon](_img/icon_addnewlinkedworkitem.png "Icon_addNewLinkedWorkItem")) becomes available only after you save the open work item. +- The buttons to open the list of work items in a query (![Open in Query](_img/icon_openinquery.png "Icon_openInQuery")) and in a Microsoft Office client (![Open in Office](_img/wit_iconoffice.png "WIT_IconOffice")) become available only when at least one work item is listed in the links control tab. +- The buttons to open a work item (![Open Work Item](_img/icon_openworkitem.png "Icon_openWorkItem")), edit a link (![Edit link](_img/icon_witlinkedit.png "Icon_WITLinkEdit")), and delete a link (![Delete link](_img/icon_witlinkdelete.png "Icon_WITLinkDelete")) become available only after you click one or more work items listed in the links control tab. + +The links control that is displayed is the same for both the web portal and Team Explorer, except when it is configured to only render `Storyboard` links. In that case, the toolbar only contains those controls to add a new link, open the linked item, and delete the link. Also, the the web portal version displays the **Start Storyboarding** link within the control menu. + +![Storyboard links control](_img/alm_twa_storyboard_linkscontrol.png "ALM_TWA_Storyboard_LinksControl") + + + +## Related notes +- [LinkTypes elements reference, Define a custom link type ](link-type-element-reference.md) +- [Define link controls to restrict link relationships](define-link-controls.md) +- [Specify work item form controls](specify-work-item-form-controls.md) + diff --git a/docs/work/reference/linkscontroloptions-xml-elements.md b/docs/work/reference/linkscontroloptions-xml-elements.md new file mode 100644 index 00000000000..2c6df328681 --- /dev/null +++ b/docs/work/reference/linkscontroloptions-xml-elements.md @@ -0,0 +1,479 @@ +--- +title: LinksControlOptions XML elements reference | VSTS & TFS +description: XML syntax to scope the allowed links within a links control element used in the new web form layout +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: FA2BB293-5AC9-4861-B9B1-1033E4E078D4 +ms.manager: douge +ms.author: kaelli +ms.date: 04/14/2017 +--- + +# LinksControlOptions XML elements (Web form) + +<b>VSTS (Hosted XML) | TFS 2018 | TFS 2017 | [Previous versions](linkscontroloptions-elements.md)</b> + + +>[!IMPORTANT] +>This topic applies to team project customization for Hosted XML and On-premises XML (TFS 2017 and later versions) process models. For TFS 2015, see [LinksControlOptions elements (Client and web, TFS 2015) ](linkscontroloptions-elements.md). <br/><br/> +>Customizing the links control is not a supported feature For the Inheritance process model. For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +By linking work items to other objects, you can track related work, dependencies, and changes made over time. With the updated [**Control** element](weblayout-xml-elements.md), you can specify a scoped links control within the work item form for the web portal by setting **type="LinksControl"**. + +The **LinksControlOptions** element is a child element of the **Control** element. With a scoped links control, you can specify filters that restrict the types of links that users can add and the types of work items to which users can create links. Specifically, you use the following child elements to scope the control: + +- **LinkFilters**: Use to specify the types of links that appear in the control: + - Add a **WorkItemLinkFilter** to select links that may be created to other work items + - Add an **ExternalLinkFilter** to select links to other objects, such as changesets, hyperlinks, or version controlled files +- **WorkItemTypeFilters**: Use to restrict the types of work items you can link to from the links control +- **Column**: Use to specify the work item fields and link type attributes listed within the links control + +<blockquote style="font-size: 13px"><b>Note: </b>The standard ![Links page icon](../_img/icons/icon-links-tab-wi.png) [Links page](../concepts/work-item-form-controls.md#link-wi) provides a non-customizable control that displays all link types. From this control, you may view all links associated with the work item, and link the work item to other work items or external objects. +</blockquote>   + +## Summary of what's changed + +The updated **LinksControlOptions** element introduces several new elements and deprecates several elements that are still in use with the [client **LinksControlOptions** element version](https://msdn.microsoft.com/library/aa337625.aspx). Overall, it's a much simpler syntax structure than its predecessor. + + +> [!div class="mx-tdBreakAll"] +> |New elements |Maintained elements |Deprecated elements | +> |-------------------------|--------------------|----------------------| +> |- ListViewOptions<br/>- LinkFilters<br/>- ExternalLinkFilter<br/>- WorkItemLinkFilter<br/>- Columns<br/>- Column |- Filter<br/>- LinksControlOptions<br/>- WorkItemTypeFilters |- ExternalLinkFilters<br/>- WorkItemLinkFilters<br/>- LinkColumns<br/>- LinkColumn | + + +### Differences between web and client links controls + +The following table summarizes the differences between the **LinksControlOptions** elements used within the **WebLayout** section and those that are used within the **Layout** section. The **WebLayout** section supports display of work item forms through the web portal, while the **Layout** section supports display of work item forms from the web portal for TFS 2015 and clients such as Visual Studio. + +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="20%">Control option</th> +<th width="30%">Web portal elements (WebLayout)</th> +<th width="30%">Client elements (Layout)</th> +</tr> +<tr> +<td>Restrict link relationships to other objects (non work items) </td> +<td>Specify to include an external link type using the **ExternalLinkFilter** element within the **LinkFilters** container element<br/> +When ```ListViewOptions GroupLinks="true"```, links are grouped within the web form by type in the order they are listed within the **LinkFilters** container element</td> +<td>Specify to include or exclude external link types using **ExternalLinkFilters**</td> +</tr> + +<tr> +<td>Restrict link relationships to other work items </td> +<td>Specify to include a work link type using the **WorkItemLinkFilter** element within the **LinkFilters** container element, specifying a link type reference name<br/> +When ```ListViewOptions GroupLinks="true"```, links are grouped within the web form by type in the order they are listed within the **LinkFilters** container element</td> +<td>Specify to include or exclude work link types using **WorkItemLinkFilters**, specify a link type reference category </td> +</tr> + + +<tr> +<td>Restrict links allowed based on work item type </td> +<td>Specify to include a work item type using the **Filter** element within the **WorkItemTypeFilters** container element</td> +<td>Specify to include or exclude work item types using **WorkItemTypeFilters**</td> +</tr> + +<tr> +<td>Link order and grouping</td> +<td>When ```ListViewOptions GroupLinks="true"```, linked items are grouped by their link type and work items are arranged by work item type, owner, and title (a user can change this order by clicking a column field in the control's grid display) +</td> +<td>All links grouped by type and listed alphabetically or ordered by column field </td> +</tr> + +<tr> +<td>Composite display of link information</td> +<td>For each listed item, the links control displays the Work Item Type, ID, Title, and Assigned To as a composite field called *Link* as shown: + +<img src="_img/linkscontrol-composite-field.png" alt="Composite field" style="border: 2px solid #C3C3C3;" /> +<p>When the links control width is less than 460 pixels, the field also displays the item's State and the time of its Latest Update (the creation or latest modification of the item). See [Responsive design and dynamic resizing](#dynamic-sizing) for details. +</td> +<td>Not supported</td> +</tr> + +<tr> +<td>Field and attribute display </td> +<td>Specify the fields to display within the link control's grid using a **Column** element within the **Columns** container element </td> +<td>Specify the default fields to display using **LinkColumn** elements, users can change the column options through the client form </td> +</tr> + +</tbody> +</table> + +### Add links through a scoped links control + +From the scoped links control, you can perform the same actions provided from the standard ![Links page icon](../_img/icons/icon-links-tab-wi.png) Links page—you simply do them from a menu rather than a tool bar. + +- To open an associated item or object, click the linked item +- To delete a link, highlight it and click the ![delete icon](../_img/icons/delete_icon.png) delete icon +- To link to an existing item, or create and link a new work item, select one of the menu options. + +<img src="_img/linkscontrol-related-work-menu-options.png" alt="Links control menu of options" style="border: 2px solid #C3C3C3;" /> + + +<a id="dynamic-sizing"></a> +### Responsive design and dynamic resizing +By default, the scoped links control displays dynamically (`ViewMode=Dynamic`) based on the form's width and the space allocated to the links control. The links control width expands and shrinks proportionally based on the overall form width. +- When the links control width is less than 460 pixels, the control displays as a *List*. Only the composite field called *Link* (consisting of Work Item Type, ID, Title, and Changed By fields) +- When the links control width equals or exceeds 460 pixels, the control displays information within a *Grid* according to the fields specified within the **Column** elements. The number of columns that appear is space-dependent, starting at a minimum of 4, and increasing by one column for every 100 pixels until the width is sufficient to display all defined columns. + +You can specify whether the links display as a list, grid, or dynamically by setting the `ViewMode` in the [LinksControlOptions](#links-control-options). + +## Sample code for default scoped link controls + +Core system processes—[Agile, Scrum, CMMI](../guidance/choose-process.md)—have been updated to include the Development and Related Work scoped links control. + + +<img src="_img/linkscontrol-bug-form-dev-related-links.png" alt="Bug work item form, Agile process, Development and Related links controls" style="border: 2px solid #C3C3C3;" /> + +These controls appear on all default work item types, except the following: +- Code Review Request/Code Review Response +- Feedback Request/Feedback Response +- Shared Steps/Shared Parameter (these items have specific controls that list Test Case items). + + + +<a id="development-links-control"> </a> + +### Development links control + +The Development links control displays all of your development links, whether based on a git or Team Foundation version control (TFVC) repository. It displays links in a set order, and provides calls-to-action that support users to [drive development from a work item](../backlogs/connect-work-items-to-git-dev-ops.md). + +The following code sample specifies the syntax used to code the Development link control. This control supports adding external links of the specified types— pull requests, builds, branches, commits, and other development-related links— and grouping them according to the Development experience. + +>[!NOTE] +>The link types, `Found in build` and `Integrated in build` are valid for VSTS. + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Type="LinksControl" Label="Development"> + <LinksControlOptions ViewMode="Dynamic" ZeroDataExperience="Development" ShowCallToAction="true"> + <ListViewOptions GroupLinks="false"> + </ListViewOptions> + <LinkFilters> +            <ExternalLinkFilter Type="Build" /> +            <ExternalLinkFilter Type="Integrated in build" /> +            <ExternalLinkFilter Type="Pull Request" /> +            <ExternalLinkFilter Type="Branch" /> +            <ExternalLinkFilter Type="Fixed in Commit" /> +            <ExternalLinkFilter Type="Fixed in Changeset" /> +            <ExternalLinkFilter Type="Source Code File" /> +            <ExternalLinkFilter Type="Found in build" /> + </LinkFilters> + </LinksControlOptions> +</Control> +``` + +### Related Work links control + +The Related Work links control displays links to other work items in a set order on the front page of the form. It supports these link types: Duplicate/Duplicate of, Parent/Child, Predecessor/Successor, Related, and Tests/Tested by. + +The following code sample specifies the syntax used to support the Related Work links control. + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Type="LinksControl" Name="Related Work"> + <LinksControlOptions> + <LinkFilters> + <WorkItemLinkFilter Type="System.LinkTypes.Duplicate-Forward" /> + <WorkItemLinkFilter Type="System.LinkTypes.Duplicate-Reverse" /> + <WorkItemLinkFilter Type="System.LinkTypes.Hierarchy-Forward" /> + <WorkItemLinkFilter Type="System.LinkTypes.Hierarchy-Reverse" /> + <WorkItemLinkFilter Type="System.LinkTypes.Dependency" /> + <WorkItemLinkFilter Type="System.LinkTypes.Related" /> + <WorkItemLinkFilter Type="Microsoft.VSTS.Common.TestedBy-Forward" /> + <WorkItemLinkFilter Type="Microsoft.VSTS.Common.TestedBy-Reverse" /> + </LinkFilters> + <Columns> + <Column Name="System.State" /> + <Column Name="System.ChangedDate" /> + <Column Name="System.Links.Comment" /> + </Columns> + </LinksControlOptions> +</Control> +``` +For Test Case items, this control also displays Shared Steps and Shared Parameter links. + +## Sample code to showcase test-related work + +You can include work and external links together in a single control, while also filtering specific work item types to display. This powerful range of scoping allows you to create link controls that satisfy any number of scenarios. + +For example, the syntax below would create a control specifically designed to display test results and testing work items. + + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Name="Test" Type=""LinksControl""> + <LinksControlOptions> + <ListViewOptions GroupLinks="true"> + </ListViewOptions> + <LinkFilters> + <ExternalLinkFilter Type="Result attachment"/> + <ExternalLinkFilter Type="Test Result "/> + <WorkItemLinkFilter Type="Microsoft.VSTS.Common.TestedBy-Forward" /> + <WorkItemLinkFilter Type="Microsoft.VSTS.Common.TestedBy-Reverse" /> + <WorkItemLinkFilter Type="Microsoft.VSTS.TestCase.SharedStepReferencedBy" /> + </LinkFilters> + <WorkItemTypeFilters> + <Filter WorkItemType="Test Case" /> + <Filter WorkItemType="Test Suite" /> + <Filter WorkItemType="Test Plan" /> + <Filter WorkItemType="Shared Steps" /> + </WorkItemTypeFilters> + </LinksControlOptions> +</Control> +``` + +<a id="customize"> </a> +## Create a scoped links control + +To add or modify a scoped links control, use the information provided in this topic to modify the XML definition file for a specific work item type. Each links control must be added as a **Control** of **type="LinksControl"** within the **WebLayou**t section, specifying the appropriate **LinksControlOptions**. + +To import and export your changes, see [Customize the work item tracking web form](../customize/customize-wit-form.md). + +## LinksControlOptions element syntax + +The following table describes the **LinksControlOptions** element and its child elements. The syntax for the **LinksControlOptions** element is: + +> [!div class="tabbedCodeSnippets"] +```XML +<LinksControlOptions ViewMode="Static | Dynamic" ZeroDataExperience="Development" ShowCallToAction="true | false" WorkItemFiltersScope="Project" > + <ListViewOptions GroupLinks="true | false" /> + <LinkFilters> + <ExternalLinkFilter Type="ExternalLinkName" /> + <WorkItemLinkFilter Type="WorkItemLinkName" /> + </LinkFilters> + <WorkItemTypeFilters> + <Filter WorkItemType="WorkItemTypeName" /> + </WorkItemTypeFilters> + <Columns> + <Column RefName="FieldReferenceName"/> + </Columns> +</LinksControlOptions> +``` + +<table width="100%" > +<thead> +<tr> +<th width="22%"><p>Element</p></th> +<th width="78%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top" > + + +<tr> +<td><p> <strong>Column</strong> </p></td> +<td><p>Required <strong>Columns</strong> element used to specify the work item and link-related fields to display within the links control. </p> +<p>The order in which the <strong>Column</strong> elements are listed defines the order in which the column fields display in the control's grid.</p> +<pre><code><Column Name="FieldName" /></code></pre> +<p>To determine the reference name for a field, see [Work item field index](../guidance/work-item-field.md).</p> +<p>Link-related fields include: ```System.ExternalLinkCount, System.HyperLinkCount, System.Links.Comment, System.Links.LinkType,``` and ```System.Related.LinkCount```.</p> +</td> +</tr> +<tr> +<td><p> <strong>Columns</strong> </p></td> +<td><p>Optional child element of the <strong>LinksControlOptions</strong> element.</p> +<p>Container element for one or more <strong>Column</strong> elements you use to specify the fields that dispaly in the control's grid. </p> +<pre><code><Columns > + <Column Name="FieldName" /> +</Columns ></code></pre> +</td> +</tr> +<tr> +<td><p> <strong>ExternalLinkFilter</strong> </p></td> +<td><p>Optional <strong>LinkFilters</strong> element used to specify an external link type. With an external link type, users can create a link relationship to objects that are not work items, such as changesets, hyperlinks, and files under version control. </p> +<pre><code><ExternalLinkFilter Type="ExternalLinkName" /></code></pre> +<p>Examples of external link types you can specify include: ```Fixed in Changeset```, ```Fixed in Commit```, ```Source Code File```, ```Pull Request```, and ```Hyperlink```. See [External link types](link-type-element-reference.md#external-link-types) for a complete list. </p> + +<p>Specify ```System.IncludeAllExternalLinks``` to include all external link types.</p> +<blockquote><b>Note: </b>When you specify ```System.IncludeAllExternalLinks```, the system displays all links in alphabetical order by external link type. +</blockquote> + +</td> +</tr> + +<tr> +<td><p> <strong>Filter</strong> </p></td> +<td><p>Required child element of the <strong>WorkItemTypeFilters</strong> container element. Specifies the name of a work item type to include as an allowed type that users can link to from the links control. </p> +<pre><code><Filter WorkItemType="WorkItemTypeName" /></code></pre> +<p>You can specify any work item type defined within the team project or project collection, including custom work item types. Typically, the work item types you specify depend on the process used to create your team project. See [Choose a process](../guidance/choose-process.md) for details.</p> +<p>The following lists the default work item types available based on the default system processes:</p> +<div style="float:left;width:120px;margin:3px;font-size:100%"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Agile</p> +<ul style="list-style-type:none;padding-left:10px"> +<li style="margin-bottom:0px">Bug</li> +<li style="margin-bottom:0px">Epic</li> +<li style="margin-bottom:0px">Feature</li> +<li style="margin-bottom:0px">Issue</li> +<li style="margin-bottom:0px">Task</li> +<li style="margin-bottom:0px">Test Case</li> +<li style="margin-bottom:0px">User Story</li> +</ul> +</div> + +<div style="float:left;width:180px;margin:3px;font-size:100%"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Scrum</p> +<ul style="list-style-type:none;padding-left:20px"> +<li style="margin-bottom:0px">Bug</li> +<li style="margin-bottom:0px">Epic</li> +<li style="margin-bottom:0px">Feature</li> +<li style="margin-bottom:0px">Impediment</li> +<li style="margin-bottom:0px">Product Backlog Item</li> +<li style="margin-bottom:0px">Task</li> +<li style="margin-bottom:0px">Test Case</li> +</ul> +</div> + +<div style="float:left;width:120px;margin:3px;font-size:100%"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">CMMI</p> +<ul style="list-style-type:none;padding-left:30px"> +<li style="margin-bottom:0px">Bug</li> +<li style="margin-bottom:0px">Change Request</li> +<li style="margin-bottom:0px">Epic</li> +<li style="margin-bottom:0px">Feature</li> +<li style="margin-bottom:0px">Issue</li> +<li style="margin-bottom:0px">Review</li> +<li style="margin-bottom:0px">Requirement</li> +<li style="margin-bottom:0px">Risk</li> +<li style="margin-bottom:0px">Task</li> +<li style="margin-bottom:0px">Test Case</li> +</ul> +</div> + +<div style="clear:left;font-size:100%"> +</div> + +</td> +</tr> +<tr> +<td><a id="links-control-options"> </a> +<p><strong>LinksControlOptions</strong> </p></td> +<td><p>Required container child element of <strong>Control</strong> element when <strong>type="LinksControl"</strong> and when used within the **WebLayout** element.</p> +<p>Use to scope the link types and work item types that users can add to a work item and the columns to appear for the list of link relationships in the work item form.</p> +<pre><code><LinksControlOptions ViewMode="Dynamic | Grid | List" +ZeroDataExperience="Development" ShowCallToAction="true | false" +WorkItemFiltersScope="Project" > + . . . +</LinksControlOptions></code></pre> +<p>All attributes are optional. Supported attributes include: </p> +<ul> +<li><strong>ViewMode</strong>: Can be set to ```Dynamic``` (changing with size), `Grid`, or `List`. Default is ```Dynamic```. These view modes correspond to those described earlier in this topic in [Responsive design and dynamic resizing](#dynamic-sizing).</li> +<li><strong>ZeroDataExperience</strong>: Currently, only option is ```Development```. This option causes the call-to-action links to appear for development, such as *Create branch, Create a pull request,* and more. To learn more, see [Drive Git development](../backlogs/connect-work-items-to-git-dev-ops.md).</li> +<li><strong>ShowCallToAction</strong>: Can be set to ```true```, normally is ```false```. Determines whether call-to-actions appear below linked artifacts. +<blockquote><b>Note: </b>Currently, the only supported call-to-action experience occurs when ```ZeroDataExperience="Development"```. +</blockquote></li> +<li><strong>WorkItemFiltersScope</strong>: Can be set to ```Project```. When set to ```Project```, users can only link to work items within the current team project scope. </li> +</ul> +</td> +</tr> + +<tr> +<td><p><strong>LinkFilters</strong> </p></td> +<td><p>Optional <strong>LinksControlOptions</strong> child element.</p> +<p>Use this container element to specify which link types are used to scope the control. List one or more <strong>ExternalLinkFilter</strong> or <strong>WorkItemLinkFilter</strong> elements to specify the link types to use to filter the links control.</p> +<pre><code><LinkFilters> + <ExternalLinkFilter Type="ExternalLinkName" /> + <WorkItemLinkFilter Type="WorkLinkTypeName" /> +</LinkFilters></code></pre> +</td> +</tr> + +<tr> +<td><p> <strong>ListViewOptions</strong> </p></td> +<td><p>Optional <strong>LinksControlOptions</strong> child element.</p> +<p>Specifies whether or not to group links according to their type. If ```GroupLinks="false"``` (default), links are not grouped by their link type.</p> +<pre><code><ListViewOptions GroupLinks="true | false" /></code></pre> +</td> +</tr> + +<tr> +<td><p><strong>WorkItemLinkFilter</strong> </p></td> +<td><p>Optional <strong>LinkFilters</strong> child element.</p> +<p>Specifies a work-specific link type which is included within the links control. Users can create relationships to other work items only for those link types included in the links control.</p> +<pre><code><WorkItemLinkFilter Type="WorkLinkTypeName" /> +</code></pre> +<p>Examples of work item link types you can specify include: ```System.LinkTypes.Dependency```, ```System.LinkTypes.Hierarchy-Forward```, ```System.LinkTypes.Hierarchy-Reverse```, and ```System.LinkTypes.Related```. </p> +<p>For a complete list, see [work item link type](link-type-element-reference.md#work-link-types). In addition, you can specify the reference name for a custom link type. </p> +<p>Specify ```System.IncludeAllWorkItemLinks``` to include all work link types.</p> +<blockquote><b>Note: </b>When you specify ```System.IncludeAllWorkItemLinks```, the system displays all links in alphabetical order by link type. +</blockquote> +</td> +</tr> + + +<tr> +<td><p> <strong>WorkItemTypeFilters</strong> </p></td> +<td><p>Optional container child element of the <strong>LinkFilters</strong> element. Use this element to specify the set of work item types to include in the links control. This element restricts the work item types that users can create links to and those that will appear in the linked list. Specification of this element depends on specifying at least one **WorkItemLinkFilter** element. +</p> +<pre><code><WorkItemTypeFilters > + <Filter WorkItemType="WorkItemTypeName" /> +</WorkItemTypeFilters > +</code> +</pre> + +</td> +</tr> + +</tbody> +</table> + + + +## Related notes + +You use scoped links controls to support your team and business needs. You [link work items to support traceability and manage dependencies](../track/link-work-items-support-traceability.md). To learn more about customizing the web form, see these topics: + +- [WebLayout and Control elements](weblayout-xml-elements.md) +- [Manage new form rollout](../customize/manage-new-form-rollout.md) +- [New work item experience](../process/new-work-item-experience.md) +- [Customize the new form](../customize/customize-wit-form.md) + + +<!--- + +<div style="float:left;width:120px;margin:3px;font-size:100%"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Agile</p> +<ul style="list-style-type:none;padding-left:10px"> +<li>Bug</li> +<li>Epic</li> +<li>Feature</li> +<li>Issue</li> +<li>Task</li> +<li>Test Case</li> +<li>User Story</li> +</ul> +</div> + +<div style="float:left;width:120px;margin:3px;font-size:100%"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">Scrum</p> +<ul style="list-style-type:none;padding-left:20px"> +<li>Bug</li> +<li>Epic</li> +<li>Feature</li> +<li>Impediment</li> +<li>Product Backlog Item</li> +<li>Task</li> +<li>Test Case</li> +</ul> +</div> + +<div style="float:left;width:120px;margin:3px;font-size:100%"> +<p style="font-weight:bold;padding-bottom:0px;text-align:center;">CMMI</p> +<ul style="list-style-type:none;padding-left:30px"> +<li>Bug</li> +<li>Change Request</li> +<li>Epic</li> +<li>Feature</li> +<li>Issue</li> +<li>Review</li> +<li>Requirement</li> +<li>Risk</li> +<li>Task</li> +<li>Test Case</li> +</ul> +</div> + +<div style="clear:left;font-size:100%"> +</div> +--> \ No newline at end of file diff --git a/docs/work/reference/localization-and-globalization-of-witd-child-elements.md b/docs/work/reference/localization-and-globalization-of-witd-child-elements.md new file mode 100644 index 00000000000..8c913a2185c --- /dev/null +++ b/docs/work/reference/localization-and-globalization-of-witd-child-elements.md @@ -0,0 +1,35 @@ +--- +title: Localization and globalization of WITD child elements | VSTS & TFS +description: Understand how to change some parts of the work item type definition so that they appear in your native language - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 85408917-99ad-4153-8377-661801c85b14 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + + +# Localization and globalization of WITD child elements + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can change some parts of the work item type definition so that they appear in your native language. + + When you design a work item, keep in mind that work item settings reside on the server for the team project collection and do not recognize the language preferences of team members. + + The following table summarizes what elements can and cannot be localized. Any element that is not explicitly listed in the following table cannot be localized. + +|**Examples of elements that can be localized**|**Element attributes that you can localize**| +|----------------------------------------------------|--------------------------------------------------| +|`<WORKITEMTYPE name="bug">`|The name of the work item type. Must be 1 to 255 Unicode characters.| +|`<DESCRIPTION>Work item descriptive text here</DESCRIPTION>`|The work item type description. Supports entry of a text string that can contain more than 255 Unicode characters.| +|`<FIELD refname="System.Title" name="Title" type="String">`|The name of the work item field. Must be 1 to 128 Unicode characters long.<br /><br /> The name that you specify for a field is used in all Team Foundation clients. Field names are also used by team members to create work item type queries.<br /><br /> The field reference name and type are not localizable.| +|`<HELPTEXT>This is a work item for bugs</HELPTEXT>`|The Help text for work item fields. Supports entry of a text string that can contain more than 255 Unicode characters.<br /><br /> You can define custom text strings for each work item type within each team project.| +|`<LISTITEM value="My Value">`|The string text for the `value` attribute that appears in a pick list or global list.| +|`<STATE value="Active" />`<br /><br /> `<STATE value="Complete" />`<br /><br /> `<TRANSITION from="Active" to="Complete">`<br /><br /> `<REASON value="No Plans to Fix"/>`|The `value` attribute that specifies the name for the `STATE` and `REASON` elements. Must be 1 to 255 Unicode characters.| +|`<GROUP Label="label text"`<br /><br /> `<Tab Label="label text">`<br /><br /> `<CONTROL FieldName="Found In Build" Label="Found In">`|The `Label` attribute specified by a `GROUP`, `TAB`, or `CONTROL` element. Label text appears on work item forms. Must be 1 to 80 Unicode characters when specified.<br /><br /> The `Label` attribute is optional except for the `TAB` element.<br /><br /> You can customize the name of a field by specifying the `Label` for a field that appears on a work item form by using the `CONTROL` element.| + +## Related notes +- [All WITD XML elements reference](all-witd-xml-elements-reference.md) +- [Customize your work tracking experience](../customize/customize-work.md) \ No newline at end of file diff --git a/docs/work/reference/map-microsoft-project-fields-to-tf-fields.md b/docs/work/reference/map-microsoft-project-fields-to-tf-fields.md new file mode 100644 index 00000000000..1b2b5cae9c7 --- /dev/null +++ b/docs/work/reference/map-microsoft-project-fields-to-tf-fields.md @@ -0,0 +1,114 @@ +--- +title: Map Project fields to TFS fields | TFS +description: Customize how work item fields map to Project fields for Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 8c6550d9-9239-4dac-832b-5634924ec77b +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + +# Map Project fields to TFS fields + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can customize the way in which work item fields that are stored in Team Foundation are mapped to fields that are defined for Office Project. You can change the way specific fields are published and designate the default link type to use when you create hierarchical or tree links and dependency links. + + Unlike Office Excel, Office Project uses a limited set of columns, which include predefined columns, such as Task Name, and custom fields. When a user publishes or refreshes work item data in a Project file, the field map determines which fields in the work item database match the columns in Project. + + You can customize the mappings, for example, to support a field that you created or to map fields to predefined columns instead of to custom columns. For complete documentation on the field mapping file for Microsoft Project, see [Add or change Project-to-TFS field mapping](add-or-change-how-project-fields-map-to-tfs-fields.md). + + You customize the mapping by modifying the FileMapping.xml file. The following table summarizes the names of the file, the folder, and the plug-in for the default process templates. The plug-in contains the definition of the task that uploads the file to the team projection collection. + +- File name: FileMapping.xml +- Folder name: Classification +- Plug-in name: Microsoft.ProjectCreationWizard.Classification + +For more information, see [Define initial areas, iterations, and Project mapping file](process-templates/define-classification-plug-in.md). + + +<a name="MappingE"></a> +## Specify how fields are mapped + You specify mapped fields by using the **Mapping** element and the following syntax structure: + +> [!div class="tabbedCodeSnippets"] +```XML +<Mappings> + <Mapping WorkItemTrackingFieldReferenceName="System.Id" + ProjectField="" + ProjectName="" + ProjectUnits="" + PublishOnly="" + IfSummaryRefreshOnly=""/> +</Mappings> +``` + + The following table describes the attributes of the **Mapping** element. + +|**Attribute**|**Description**| +|-------------------|---------------------| +|**WorkItemTrackingFieldReferenceName**|Required. Specifies the reference name of a field in a type of work item.| +|**ProjectField**|Required. Specifies the name of a column in Microsoft Project. Specify predefined column names by prefixing "pj" to the name, such as pjTaskName for the Task Name column. Specify custom fields as pjTaskText followed by a number, such as pjTaskText11.| +|**ProjectName**|Optional. Specifies the name to display as the column name to the user. If this attribute is not specified, the name of the field in the type of work item is used.| +|**ProjectUnits**|Optional. Specifies the type of units to use when you map a type of field to Microsoft Project. Valid values are `pjMinute`, `pjHour`, `pjDay`, `pjWeek`, and `pjMonthUnit`.| +|**PublishOnly**|Optional. If set to `true`, indicates that the field is published to the work item database but not refreshed. This value is typically used for calculated fields that should not be updated in Team Explorer. If set to `false`, indicates that the field is both published and refreshed. By default, this attribute is set to `false`.<br /><br /> By default, only **Start Date** and **Finish Date** have this attribute set to **true**.| +|**IfSummaryRefreshOnly**|Optional. If set to `true`, indicates that the field is never published to the work item database but is refreshed from the work item database when the following conditions are also true:<br /><br /> - The row for the field is a summary task in Microsoft Project.<br />- The summary task has the values of Publish and Refresh set to `Yes`.<br />- The summary task contains at least one child task that is bound to Team Foundation Server.<br /><br /> Any updates or calculations that Microsoft Project makes can overwrite the value that is refreshed from the work item database in the project plan. However, the modified value is never saved to the work item database. This attribute is typically used for summary fields that, if published to the work item database, lead to data inconsistencies.<br /><br /> If set to `false`, indicates that the field may be both published and refreshed. By default, this attribute is set to `false`. **Note:** The `IfSummaryRefreshOnly` attribute supersedes the `PublishOnly` attribute. For more information, see [Customize the Microsoft Project field mapping file](customize-project-field-mapping-file.md). <br /><br /> By default, the **IfSummaryRefreshOnly** attribute is set to `true` for the **Original Estimate**, **Remaining Work**, and **Completed Work** fields.| + +<a name="OtherE"></a> +## Specify the fields for synchronization, links, and attachments + In addition to the **Mapping** element, two other elements determine how fields will synchronize and which field will support links and attachments. + + The **SyncField** element specifies which column serves as the synchronization field. The synchronization field is titled "Publish and Refresh" and allows the user to indicate whether a task row is published or refreshed only. + + You use the following XML syntax to specify which column maps to the synchronization field. You set the ProjectField attribute to a valid column in Microsoft Project. + +> [!div class="tabbedCodeSnippets"] +```XML +<SyncField ProjectField="" /> +``` + + The **LinksField** element specifies the links and attachments column. By using the links and attachments column, users can indicate whether a particular task row has links or attachments. + + You use the following XML syntax to specify which column maps to the links and attachments field. You set the ProjectField attribute to a valid column in Microsoft Project. + +> [!div class="tabbedCodeSnippets"] +```XML +<LinksField ProjectField="" /> +``` + +<a name="DefaultFM"></a> +##Default field mappings + The following example shows how the MSF for Agile Software Development process template maps fields in work items to columns in Microsoft Project. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<MSProject> + <Mappings> + <Mapping WorkItemTrackingFieldReferenceName="System.AreaPath" ProjectField="pjTaskOutlineCode9" /> + <Mapping WorkItemTrackingFieldReferenceName="System.AssignedTo" ProjectField="pjTaskResourceNames" /> + <Mapping WorkItemTrackingFieldReferenceName="System.Id" ProjectField="pjTaskText10" ProjectName="Work Item ID" /> + <Mapping WorkItemTrackingFieldReferenceName="System.IterationPath" ProjectField="pjTaskOutlineCode10" /> + <Mapping WorkItemTrackingFieldReferenceName="System.Reason" ProjectField="pjTaskText14" /> + <Mapping WorkItemTrackingFieldReferenceName="System.Rev" ProjectField="pjTaskText23" /> + <Mapping WorkItemTrackingFieldReferenceName="System.State" ProjectField="pjTaskText13" ProjectName="State" /> + <Mapping WorkItemTrackingFieldReferenceName="System.Title" ProjectField="pjTaskName" /> + <Mapping WorkItemTrackingFieldReferenceName="System.WorkItemType" ProjectField="pjTaskText24" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Common.Priority" ProjectField="pjTaskText19" ProjectName="Work Item Priority" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Common.StackRank" ProjectField="pjTaskNumber1" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.CompletedWork" ProjectField="pjTaskActualWork" ProjectUnits="pjHour" IfSummaryRefreshOnly="true" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.FinishDate" ProjectField="pjTaskFinish" PublishOnly="true" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.OriginalEstimate" ProjectField="pjTaskBaselineWork" ProjectUnits="pjHour" IfSummaryRefreshOnly="true" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.RemainingWork" ProjectField="pjTaskRemainingWork" ProjectUnits="pjHour" IfSummaryRefreshOnly="true" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.StartDate" ProjectField="pjTaskStart" PublishOnly="true" /> + <LinksField ProjectField="pjTaskText26" /> + <SyncField ProjectField="pjTaskText25" /> + </Mappings> +</MSProject> +``` + +## Related notes + +- [Customize the Microsoft Project field mapping file](customize-project-field-mapping-file.md) +- [Add or change Project-to-TFS field mapping](add-or-change-how-project-fields-map-to-tfs-fields.md) \ No newline at end of file diff --git a/docs/work/reference/process-configuration-xml-element.md b/docs/work/reference/process-configuration-xml-element.md new file mode 100644 index 00000000000..44128659155 --- /dev/null +++ b/docs/work/reference/process-configuration-xml-element.md @@ -0,0 +1,813 @@ +--- +title: ProcessConfiguration syntax | VSTS & TFS +description: XML syntax and usage for all ProcessConfiguration elements to support customization of work item types and Agile tool backlogs and boards +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 4314c6ad-d6ca-4cf2-a3c8-46e4e8ed759a +ms.manager: douge +ms.author: kaelli +ms.date: 09/01/2017 +--- + +# Process configuration XML element reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +Process configuration defines the default configuration and functional capabilities that your teams can access using the web portal Agile tools. These tools, include the product backlog, sprint backlogs, Kanban board, and task board and are customizable for each team you add to team project. + +Configuration elements specify the work item types (WITs), default columns, fields used by the tools, and other elements. The main configurations made determine which items will display for the portfolio, product, and sprint backlogs by defining the **PortfolioBacklog**, **RequirementBacklog**, and **TaskBacklog** sections of the process configuration XML definition file. In addition, process configuration defines the workflow mapping of state-to-state category for all WITs that require mapping. + +<img src="_img/process-config-xml-element-groups.png" alt="Process configuration XML elements" style="border: 2px solid #C3C3C3;" /> + +For a summary of what you can configure through the user interface, see [Customize work tracking, Add teams and configure their Scrum and Kanban tools](../customize/customize-work.md). + +<a id="areas-to-customize"> </a> + +Areas that you can customize through ProcessConfiguration: + + +> [!div class="mx-tdBreakAll"] +> |Backlogs |Work item types (WITs) |Other tools | +> |-------------|----------|---------| +> |- [Configure the quick add panel](#add) <br/>- [Define default columns](#columns) <br/>- [Map state categories for a WIT category](#map)<br/>- [Set number of task board items](#number_items)<br/>- [Set weekend days (Scrum)](#weekend_days) <sup>1</sup><br/>- [Set default Show bugs on backlogs](#behaviors) <sup>1</sup><br/>- [Set default hidden backlogs](#behaviors) <sup>1</sup> |- [Specify the WIT color](#wit-colors)<br/>- [Specify the workflow state color](#state-colors) <sup>2</sup><br/>- [Specify the WIT icon](#wit-icons) <sup>3</sup> |- [Assign Agile tool fields](#fields)<br/>- [Map tool-specific state categories](#tool_wits) <br/>- [Specify properties](#behaviors) | + +**Notes:** +1. Items noted with an asterisk set a default for the team project. These items can be changed for each team through [team settings](../scale/manage-team-assets.md). +2. Supported for Hosted XML, and for On-premises XML for TFS 2015.2 or later version. +3. Supported for Hosted XML, and for On-premises XML for TFS 2017.2 or later version. + +>[!IMPORTANT] +>If you want to customize your team project to add custom work item types to appear on your backlogs or boards or add custom portfolio backlogs, see [Add a work item type to a backlog and board](../customize/add-wits-to-backlogs-and-boards.md) and [Add portfolio backlogs](../customize/add-portfolio-backlogs.md). + +### Update the process configuration + +>[!NOTE] +>To access the latest version of the process templates, install the latest version of TFS and download the templates using the [Process Template Manager](../guidance/manage-process-templates.md). + +To update the process configuration for a team project, you export the XML definition file, edit it, and then import the file. You export these files either by [exporting a process](../import-process/import-process.md#export-a-process) or [exporting the process configuration definition file](../reference/witadmin/witadmin-import-export-process-configuration.md). + +[![Export ProcessConfig definition file](_img/export-process-step-1.png)](../reference/witadmin/witadmin-import-export-process-configuration.md)[![Edit XML definition file](_img/export-process-step-2.png)](#areas-to-customize)[![Import WIT definition file](_img/export-process-step-3.png)](../reference/witadmin/witadmin-import-export-process-configuration.md)![Refresh and verify changes](_img/export-process-step-4.png) + +[!INCLUDE [temp](../_shared/process-editor.md)] + +<a id="backlog_page"> </a> + +## Configure a backlog + +You can customize the following elements for the product backlog, sprint backlogs, and portfolio backlogs: + +- **State category mappings**:  Map workflow states to state categories (previously referred to as a metastate). These mappings support the display of all Agile planning tools, including the Kanban and task boards. + +- **Quick add panel**:  Specify the WITs and work item fields that appear for quickly adding items to the backlog. + + To change the types of work items that are considered backlog items or tasks, you add them to the corresponding category. For an example, see [Add bugs to the task board or backlog](../customize/add-wits-to-backlogs-and-boards.md). + +- **Column fields**: Define the default fields and column sequence. + +You configure backlogs within the XML sections that appear in the following sample: + +> [!div class="tabbedCodeSnippets"] +```XML +<PortfolioBacklogs> +   <PortfolioBacklog category="Microsoft.EpicCategory" pluralName="Epics" singularName="Epic" workItemCountLimit="1000"> +. . . +   </PortfolioBacklog> +   <PortfolioBacklog category="Microsoft.FeatureCategory" pluralName="Features" singularName="Feature" parent="Microsoft.EpicCategory" workItemCountLimit="1000"> +. . . +   </PortfolioBacklog> +</PortfolioBacklogs> +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Stories" singularName="User Story" workItemCountLimit="1000"> +. . . +</RequirementBacklog> +<TaskBacklog category="Microsoft.TaskCategory" pluralName="Tasks" singularName="Task" workItemCountLimit="1000"> +. . . +</TaskBacklog> +``` + + +> [!NOTE] +> Depending on the process associated with your ProcessConfiguration file—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md)—the `pluralName` for the `RequirementCategory` will correspond to `Stories` (Agile), `Backlog Items` (Scrum), or `Requirements` (CMMI). All three are similar: they describe the customer value to delivered and the work to be performed. + + +#### Syntax for PortfolioBacklogs elements + +<table> +<thead> +<tr> +<th width="15%"><p>Element</p></th> +<th width="85%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>PortfolioBacklogs</strong></p></td> +<td><p>Optional. Container element for portfolio backlogs.</p></td> +</tr> +<tr> +<td><p><strong>PortfolioBacklog</strong></p></td> +<td><p>Optional. Up to five instances.</p> +<p>Container element that defines the state category mappings, default columns, and quick add panel for a portfolio backlog.</p> +<pre><code><PortfolioBacklog category="PortfolioCategory" parent="ParentCategory" +      pluralName="PluralName" singularName="SingleName" workItemCountLimit="MaximumLimit> +   <States> . . . </States> +   <Columns> . . . </Columns> +   <AddPanel> . . . </ AddPanel> +</PortfolioBacklog > +</code></pre> + +<p>Assign values to the attributes as described:</p> +<ul> +<li><p><strong>category</strong>: Specify the name of a category that you have defined in the categories definition file for the team project that contains the WITs to be associated with this backlog type.</p></li> +<li><p><strong>parent</strong>: Specify the name of the category that represents the parent portfolio backlog within the hierarchy.</p></li> +<li><p><strong>pluralName</strong>: Specify the plural label to use when referring to the WITs associated with this backlog type. For example, Stories, Goals, Initiatives, or Epics.</p></li> +<li><p><strong>singularName</strong>: Specify the singular label to use when referring to the WITs associated with this backlog type. For example, Story, Goal, Initiative, or Epic.</p></li> +<li><p><strong>workItemCountLimit</strong>: Specify an integer. Default is 1000. Backlogs and boards will limit the count of items displayed based on this limit.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>RequirementBacklog</strong></p></td> +<td><p>Required. One instance only.</p> +<p>Container element that defines the state category mappings, default columns, and quick add panel for the product backlog. The product backlog displays all active items in the team's backlog.</p> +<pre><code><RequirementBacklog category="RequirementCategory" +      pluralName="PluralName" singularName="SingleName" +      workItemCountLimit="MaximumLimit" > +   <States> . . . </States> +   <Columns> . . . </Columns> +   <AddPanel> . . . </ AddPanel> +</RequirementBacklog > +</code></pre> +</td> +</tr> +<tr> +<td><p><strong>TaskBacklog</strong></p></td> +<td><p>Required. One instance only.</p> +<p>Container element used to customize the layout of sprint backlogs.</p> +<pre><code><TaskBacklog category="Microsoft.TaskCategory" pluralName="Tasks" +singularName="Task workItemCountLimit="MaximumLimit"> +. . .  +</TaskBacklog > +</code></pre> +</td> +</tr> +</tbody> +</table> + +#### Implementation notes +- By default, each backlog is restricted to a total of 1000 work items. You can change this limit by specifying a value for the `workItemCountLimit` attribute. +- The values assigned to *CategoryName* must correspond to a category group defined for the team project. You [specify category groups in the definition file for Categories](categories-xml-element-reference.md). +- You use [portfolio backlogs](../backlogs/organize-backlog.md) to organize your backlog, view the rollup of backlog items at lower levels, and to view progress across several teams. New and upgraded team projects contain two portfolio backlog levels: Features and Epics. You can add up to three additional levels. Only the top level portfolio backlog doesn't specify a parent category. +- Your [product backlog](../backlogs/create-your-backlog.md) corresponds to your project plan, the roadmap for what your team plans to deliver. It lists work items whose WITs belong to the Requirements Category. In order to manage different WITs than those provided by your default team project, you can add WITs to the Requirements Category and map the workflow states to state categories. +- Your [sprint or iteration backlogs](https://msdn.microsoft.com/library/ee191595) display both the set of requirements that you and your team have committed to in a specific sprint cycle and the tasks that you have linked to those requirements. You link tasks to requirements using the parent-child link type. Because the WITs that appear on these backlogs correspond to the same types that appear on the product backlog, much of the customization work that you do for the product backlog will define the functionality of the sprint backlog. + +<a id="map"> </a> +### Map WIT category workflow states to state categories +Several WITs require their workflow states to be mapped to a state category. Workflow states define how a work item progresses from first activation or creation to closed or complete. For example, the states defined for the Scrum product backlog item define a progression of four states, from **New**, **Approved**, **Committed**, to **Done**, and also includes a fifth state, **Removed**, to account for a state removed from the backlog without being implemented. Workflow states are associated with the `value` attribute. + +State categories, on the other hand, determine how the Agile planning tools treat each workflow state. The primary state categories used by the backlog and task board are **Proposed**, **InProgress**, and **Complete**. State categories are associated with the `type` attribute. To learn more, see [Workflow states and state categories](../concepts/workflow-and-state-categories.md). + +By associating each workflow state to a state category, the background operations performed to display the backlog and task boards know how to correctly interpret the status of each work item. For example, the following mappings are defined for the Scrum product backlog. + +> [!div class="tabbedCodeSnippets"] +```XML +<RequirementBacklog category="Microsoft.RequirementCategory" pluralName="Backlog items" singularName="Backlog item"> +   <States> +      <State value="New" type="Proposed" /> +      <State value="Approved" type="Proposed" /> +      <State value="Committed" type="InProgress" /> +      <State value="Done" type="Complete" /> +   </States> + . . . +</RequirementBacklog> +``` + +There are three groups of state categories: Agile, Bug, and Feedback. The following table describes the mapping attributes and values. + +#### Syntax for States elements (WIT category) + +<table> +<thead> +<tr> +<th width="15%"><p>Element</p></th> +<th width="85%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>State</strong></p></td> +<td><p>Required. Assigns a workflow state to a state category.</p> + +<pre><code><State value="ValueName" type="TypeName" /></code></pre> + +<p>Valid values for <i>ValueName</i> correspond to a value assigned to a <strong>STATE</strong> within the <strong>WORKFLOW</strong> section of those WITs assigned to the category group.</p> +<p>Valid values for <i>TypeName</i> correspond to one of the following enumerated values:</p> +<ul> +<li><p>Agile: Use for all work item types.</p> +<ul> +<li><p><strong>Proposed</strong>: Indicates work items that are new, not yet committed, or not yet being worked on.</p></li> +<li><p><strong>InProgress</strong>: Indicates work items that have been committed or are actively being worked on.</p></li> +<li><p><strong>Complete</strong>: Indicates work items that have been implemented. For the [Kanban board](../kanban/kanban-basics.md) to be valid, at least one workflow state must be mapped to the <strong>Complete</strong> state category.</p> +<p>Once a workflow state transitions to a state that is associated with the <strong>Complete</strong> metastate, the associated work item will fall off the product backlog. However, it will continue to be listed on the Kanban board.</p></li> +</ul> +<p>Work items in a workflow state that aren't mapped to one of the state categories don't appear on the backlog or board.</p></li> +<li><p>Bug: Use only for work item types grouped within the Bug Category. In addition to the Agile state categories, includes the <strong>Resolved</strong> state category which indicates bugs that have been resolved.</p> +<blockquote>**NOTE:**<br/> +You can only assign the <strong>Resolved</strong> state category to a workflow state specified under the <strong>BugWorkItems</strong> element.</blockquote> + +</li> +<li><p>Feedback: Use only for work item types grouped within the Feedback Request or Feedback Response categories. <strong>Requested</strong>, <strong>Received</strong>, <strong>Reviewed</strong>, and <strong>Declined</strong>.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>States</strong></p></td> +<td><p>Specifies a collection of <strong>State</strong> elements that associate WIT workflow states with state categories.</p> +<p>Required element for the following parent elements:</p> +<ul> +<li><strong>BugWorkItems</strong></li> +<li><strong>PortfolioBacklog</strong></li> +<li><strong>RequirementBacklog</strong></li> +<li><strong>TaskBacklog</strong></li> +<li><strong>TestPlanWorkItems</strong></li> +<li><strong>TestSuiteWorkItems</strong></li> +<li><strong>FeedbackRequestWorkItems</strong></li> +<li><strong>FeedbackResponseWorkItems</strong></li> +</ul> +</td> +</tr> +</tbody> +</table> + +<a id="columns"> </a> +### Set default columns +Specify which fields you want displayed on each backlog within the **Columns** section. Changes you make through the **Column Options** dialog persist until you change them again. + +![Default columns and sequence for backlog page](_img/process-configuration-xml-element-reference/IC660915.png) + +Here's the default configuration defined by the Scrum process template for the product backlog. + +> [!div class="tabbedCodeSnippets"] +```XML +<Columns> +   <Column refname="Microsoft.VSTS.Common.Priority" width="400" /> +   <Column refname="System.Title" width="400" /> +   <Column refname="System.State" width="100" /> +   <Column refname="Microsoft.VSTS.Scheduling.Effort" width="50" /> +   <Column refname="System.IterationPath" width="200" /> +</Columns> +``` + + +#### Syntax for Columns elements +<table> +<thead> +<tr> +<th width="15%"><p>Element</p></th> +<th width="85%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>Columns</strong></p></td> +<td><p>Specifies a collection of <strong>Column</strong> elements. Required element for the backlog elements: <strong>PortfolioBacklog</strong>, <strong>RequirementBacklog</strong>, and <strong>TaskBacklog</strong>.</p></td> +</tr> +<tr> +<td><p><strong>Column</strong></p></td> +<td><p>Specifies a field to appear as a column on a backlog.</p> + +<pre><code><Column refname="FieldReferenceName" width="FieldWidth" /></code></pre> +</td> +</tr> +</tbody> +</table> + +**Task board column headings** + +The column headings that appear on the task board correspond to the workflow states assigned to the default WIT assigned to the Task Category. The column sequence corresponds to the natural progression of the workflow transitions, moving from left to right. To modify the column layout, you modify the workflow for the WIT assigned to the Task Category. The workflow states defined for the default task type in the Task Category must be assigned to a valid state category as described in [Map state categories for a category of work item types](#map). + +<a id="add"> </a> + +### Customize the quick add panel +You can add fields for any quick add panel. For example, the following example adds **Business Value** to the product backlog panel. + +![Backlog panel with Business Value field added](_img/process-configuration-xml-element-reference/IC660916.png) + +The panel only displays fields that are included in the **FIELDS** section of the WIT definition for the WIT selected. For example, if you select the bug WIT, then only Title displays, because Business Value isn't defined for bugs. To add another WIT to the panel, you add it to the Requirements Category as described in [Add a work item type to a backlog and board](../customize/add-wits-to-backlogs-and-boards.md). + +The following code corresponds to the default assignments defined in the Visual Studio Scrum and MSF for Agile process templates. + +> [!div class="tabbedCodeSnippets"] +```XML +<AddPanel> +   <Fields> +      <Field refname="System.Title" /> +   </Fields> +</AddPanel> +``` + + +#### Syntax for AddPanel elements +<table> +<thead> +<tr> +<th width="15%"><p>Element</p></th> +<th width="85%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>AddPanel</strong></p></td> +<td><p>Container element used to specify the "quick add" experience, the fields to appear within the panel area where new backlog items are defined.</p></td> +</tr> +<tr> +<td><p><strong>Fields</strong></p></td> +<td><p>Specifies a collection of <strong>Field</strong> elements.</p></td> +</tr> +<tr> +<td><p><strong>Field</strong></p></td> +<td><p>Specifies a work item field to appear within the panel for the product backlog.</p> + +<pre><code><Field refname="FieldReferenceName"/></code></pre> + +<p>The same field should appear on the work item form of each WIT included in the category for the backlog.</p></td> +</tr> +</tbody> +</table> + +<a id="number_items"> </a> + +### Set task board number of work items +For performance reasons, the task board is restricted to display a maximum of 1000 work items. When you open the task board, all work items are loaded into cache. Limiting the number of work items may yield quicker load times. You can change this limit by specifying a value for the `workItemCountLimit` attribute of the **TaskBacklog** element. + +For example, you can decrease the limit by specifying `workItemCountLimit="800"`: + +> [!div class="tabbedCodeSnippets"] +```XML +<TaskBacklog category="Microsoft.TaskCategory" pluralName="Tasks" singularName="Task" workItemCountLimit="800" > +. . . +</TaskBacklog> +``` + +<a id="tool_wits"> </a> + +## Map state categories for tool-specific work item types + +State category mappings are defined for additional WIT categories. For the Scrum process template, this includes mappings for the feedback request and response categories. For the MSF Agile and CMMI process templates, it also includes mappings for the bug category. (Scrum includes bugs in the Requirement Category and therefore defines the state category mappings within the **RequirementBacklog** section.) + +> [!div class="tabbedCodeSnippets"] +```XML +<FeedbackRequestWorkItems category="Microsoft.FeedbackRequestCategory" pluralName="Feedback Requests" singularName="Feedback Request"> +   <States> +      <State value="Active" type="InProgress" /> +      <State value="Closed" type="Complete" /> +   </States> +</FeedbackRequestWorkItems> +<FeedbackResponseWorkItems category="Microsoft.FeedbackResponseCategory" pluralName="Feedback Responses" singularName="Feedback Response"> +   <States> +   <State value="Active" type="InProgress" /> +   <State value="Closed" type="Complete" /> +   </States> +</FeedbackResponseWorkItems> +``` + + +The following table describes the additional elements used to define the state category mappings for tool-specific work item types. See [Map state categories for a category of work item types](#map) for information about assigning the actual state values and types. The *CategoryName* must correspond to a category defined for the team project. + +#### Syntax for tool-specific state category mapping elements + +<table> +<thead> +<tr> +<th width="20%"><p>Element</p></th> +<th width="80%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>BugWorkItems</strong></p></td> +<td><p>Optional. Container element that defines the state category mappings for work item types assigned to the Bug Category. In addition to how these mappings are used in the display of Agile tools, they also control how the <strong>My Work</strong> feature in Team Explorer updates the bug state as developers move bugs using <strong>My Work</strong>. To learn more, see [Get your code reviewed (TFVC)](../../tfvc/get-code-reviewed-vs.md).</p> + +<pre><code><BugWorkItems category="CategoryName" +      pluralName="PluralName" singularName="SingleName"> +   <States> +. . . +   </States> +</BugWorkItems></code></pre> +</td> +</tr> +<tr> +<td><p><strong>FeedbackRequestWorkItems</strong></p></td> +<td><p>Required. Do not customize. Container element that defines the state category mappings for work item types assigned to the feedback request category.</p> + +<pre><code><FeedbackResponseWorkItems category="CategoryName" +      pluralName="PluralName" singularName="SingleName"> +   <States> +. . . +   </States> +</FeedbackRequestWorkItems></code></pre> +</td> +</tr> +<tr> +<td><p><strong>FeedbackResponseWorkItems</strong></p></td> +<td><p>Required. Do not customize. Container element that defines the state category mappings for work item types assigned to the feedback response category.</p> + +<pre><code><FeedbackResponseWorkItems category="CategoryName" +      pluralName="PluralName" singularName="SingleName"> +   <States> +. . . +   </States> +</FeedbackResponseWorkItems></code></pre> +</td> +</tr> +<tr> +<td><p><strong>TestPlanWorkItems</strong></p></td> +<td><p>Only required when you customize the workflow state for Test Plan and you support connections to the team project from versions of Test Manager installed with Visual Studio 2013.2 or earlier versions.</p> +<p>Container element that defines the state category mappings for work item types assigned to the Test Plan Category. For example:</p> + +<pre><code><TestPlanWorkItems category="Microsoft.TestPlanCategory" +      pluralName="Test Plans" singularName="Test Plan"> +    <States> +      <State type="InProgress" value="Design" /> +      <State type="InProgress" value="Testing" /> +      <State type="Complete" value="Signed Off" /> +    </States> +  </TestPlanWorkItems></code></pre> +</td> +</tr> +<tr> +<td><p><strong>TestSuiteWorkItems</strong></p></td> +<td><p>Only required when you customize the workflow state for Test Suite and you support connections to the team project from versions of Test Manager installed with Visual Studio 2013.2 or earlier versions.</p> +<p>Container element that defines the state category mappings for work item types assigned to the Test Suite Category. For example:</p> + +<pre><code><TestSuiteWorkItems +      category="Microsoft.TestSuiteCategory" +      pluralName="Test Suites" singularName="Test Suite"> +    <States> +      <State type="Proposed" value="Authoring" /> +      <State type="InProgress" value="Testing" /> +      <State type="Complete" value="Completed" /> +    </States> +  </TestSuiteWorkItems></code></pre> + +<p></p></td> +</tr> +</tbody> +</table> + +>[!NOTE] +><b>Feature availability: </b>To map state categories for `TestPlanWorkItems` or `TestSuiteWorkItems`, you must upgrade your application-tier server to TFS 2013.3 or later version. Afterwards, you can customize the workflow state of test plans and test suites. To learn more, see [Test Plan and Test Suite features](../customize/new-features-added.md#test-management). + + +<a id="fields"> </a> +## Assign Agile tool fields + +You can change the work item fields that are used in calculating capacity, burndown charts, forecasting, and velocity. Any change you make to one of the default assignments should correspond to a change made to the WIT used to define and capture information for that value. + +For example, if you change the `refname` assigned to `type="Activity"` then you should include the same field in the WIT definition assigned to the Task Category which captures the activity information. + +> [!div class="tabbedCodeSnippets"] +```XML +<TypeFields> + <TypeField refname="System.AreaPath" type="Team" /> + <TypeField refname="Microsoft.VSTS.Scheduling.RemainingWork" type="RemainingWork" format="format h" /> + <TypeField refname=" Microsoft.VSTS.Common.BacklogPriority" type="Order" /> + <TypeField refname="Microsoft.VSTS.Scheduling.Effort" type="Effort" /> + <TypeField refname="Microsoft.VSTS.Common.Activity" type="Activity" /> + <TypeField refname="Microsoft.VSTS.Feedback.ApplicationStartInformation" type="ApplicationStartInformation" /> + <TypeField refname="Microsoft.VSTS.Feedback.ApplicationLaunchInstructions" type="ApplicationLaunchInstructions" /> + <TypeField refname="Microsoft.VSTS.Feedback.ApplicationType" type="ApplicationType"> + <TypeFieldValues> + <TypeFieldValue value="Web application" type="WebApp" /> + <TypeFieldValue value="Remote machine" type="RemoteMachine" /> + <TypeFieldValue value="Client application" type="ClientApp" /> + </TypeFieldValues> + </TypeField> +</TypeFields> +``` + +#### Syntax for TypeFields elements +<table> +<thead> +<tr> +<th width="15%"><p>Element</p></th> +<th width="85%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>TypeFields</strong></p></td> +<td><p>Required. Specifies a collection of <strong>TypeField</strong> elements.</p></td> +</tr> +<tr> +<td><p><strong>TypeField</strong></p></td> +<td><p>Required. Specifies the reference name of a field whose value supports a type of activity for a feature area. The fields you specify should correspond to the fields that you use within the WITs used to capture the feature information.</p> + +<pre><code><TypeField refname="FieldReferenceName" + type="NameOfType" [format="{0} TimeUnitString"] / ></code></pre> + +<p>Specify the format only when `type="RemainingWork"`. You can specify any text string for the <i>TimeUnitString</i> that you want to have appear on the capacity bars on the current sprint backlog and on the task board.</p> +<p><strong>For Agile tools:</strong></p> +<ul> +<li><p><strong>Activity</strong>: Used to support the capacity-by-activity feature. Specify the same field used in the WIT assigned to the Task Category.</p> +<p><strong>Note</strong>: The values displayed by the Capacity tool reflect a union of all values defined for the field in all team projects within the project collection instance. Therefore, to restrict the values that appear for sprint Capacity, you must make the values match in all the team projects for the field assigned to `type="Activity"`.</p></li> +<li><p><strong>Effort</strong>: Used to calculate the team velocity. Specify the same field used in the WIT assigned to the Requirement Category that you use to capture the estimated level of effort, story points, or size for the amount of work that a backlog item requires to implement.</p></li> +<li><p><strong>Order</strong>: Used to define the sort order for items on the backlogs and boards. The system lists work items according to their ascending order as defined by the field for this type.</p> + +<blockquote>**NOTE:**<br/> +You can move items by dragging them up or down the list on a backlog or board. As you move items, a background process updates the field assigned to the `type="Order"`.</blockquote> + +</li> +<li><p><strong>RemainingWork</strong>: Used to calculate remaining work and burndown charts. Specify the same field used in the WIT assigned to the Task Category which you use to capture the hours, days, or other unit of measurement that remain to finish a task.</p> +<p>The value that you specify for <strong>format</strong> is used on the sprint backlogs and task boards wherever remaining work is reported. For example, when reporting capacity-by-activity or capacity per team member, or next to the column heading for the task states on the task board.</p> +<p>For <i>TimeUnitString</i>, specify any text string that you want to use to reflect the time value, such as hours or days.</p> +<p>For example, the following values are all valid:</p> +<p>`format="{0} h"`</p> +<p>`format="{0} hours"`</p> +<p>`format="hours {0}"`</p> +<p>`format="time {0}"`</p></li> +<li><p><strong>Team</strong>: Used to associate the backlogs with a team. The default value is System.AreaPath. To decouple teams from area paths, you can specify a different field, as described in [Use team fields instead of area paths to support teams](../customize/use-team-fields-instead-area-paths.md).</p></li> +</ul> +<p><strong>For the feedback request form:</strong></p> + +<blockquote>**NOTE:**<br/> +You should not have to change the default assignments made for the following <strong>TypeField</strong> elements. These assignments correspond to the fields used to capture the corresponding information in the WIT assigned to the Feedback Request Category.</blockquote> + +<ul> +<li><p><strong>ApplicationStartInformation</strong>: Used to capture the path to execute the application.</p></li> +<li><p><strong>ApplicationLaunchInstructions</strong>: Used to capture launch instructions.</p></li> +<li><p><strong>ApplicationType</strong>: Used to capture the type of application. The types listed correspond to the allowed values specified in the WIT definition for the feedback request.</p></li> +</ul></td> +</tr> +<tr> +<td><p><strong>TypeFieldValues</strong></p></td> +<td><p>Required for the <strong>TypeFieldValue</strong> when `type="ApplicationType"`.</p> +<p>Specifies a collection of <strong>TypeFieldValue</strong> elements which are used in the feedback request form.</p></td> +</tr> +<tr> +<td><p><strong>TypeFieldValue</strong></p></td> +<td><p>Required. Do not customize.</p> +<p>Specifies the name of an application type to appear on the feedback request form.</p> +<pre><code><TypeFieldValue value="ApplicationTypeName" type="TypeApp"/></code></pre> +<p>The default assignments correspond to the allowed values specified in the type definition for the feedback request form.</p> +<pre><code><TypeFieldValues> +   <TypeFieldValue value="Web application" type="WebApp" /> +   <TypeFieldValue value="Remote machine" type="RemoteMachine" /> +   <TypeFieldValue value="Client application" type="ClientApp" /> +</TypeFieldValues></code></pre> +</td> +</tr> +</tbody> +</table> + +#### Implementation notes +- If you change a field within the **TypeFields** section, you should make the corresponding change in the WIT definition. For example, if you change the fields assigned to capture work **Effort**, then you should make the same change in the WIT definitions for the product backlog item and bug (for Scrum). + +- You can look up the reference name for a field using this [index](../guidance/work-item-field.md). + +<a id="weekend_days"> </a> +## Set non-working days + +Non-working days are removed from calculations made by the [capacity planning tool](../scale/capacity-planning.md) and [burndown charts](../scrum/sprint-burndown.md). Default processes—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md)—specify Saturday and Sunday as non-working days. After you create a team project, [each team can set their specific non-working days](../customize/set-working-days.md). + +> [!div class="tabbedCodeSnippets"] +```XML +<Weekends> + <DayOfWeek>Saturday</DayOfWeek> + <DayOfWeek>Sunday</DayOfWeek> +</Weekends> +``` + +#### Syntax for Weekends elements +<table> +<thead> +<tr> +<th width="15%"><p>Element</p></th> +<th width="85%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>DayOfWeek</strong></p></td> +<td><p>Required child of the <strong>Weekends</strong> element.</p> +<p>Specifies a day of the week that corresponds to a non-working day.</p> +<pre><code><DayOfWeek>NameOfADay</DayOfWeek></code></pre> +<p>Valid names correspond to the English days of the week: <strong>Sunday</strong>, <strong>Monday</strong>, <strong>Tuesday</strong>, <strong>Wednesday</strong>, <strong>Thursday</strong>, <strong>Friday</strong>, and <strong>Saturday</strong>.</p> + +<blockquote>**NOTE:**<br/> +You must specify the day of a week in English, regardless of the installed language of your on-premises TFS.</blockquote> +</td> +</tr> +<tr> +<td><p><strong>Weekends</strong></p></td> +<td><p>Optional. Container element used to specify non-working days.</p> +<p>Specify non-working days when you want to account for non-working days in the calculation of capacity and burndown charts.</p></td> +</tr> +</tbody> +</table> + +<a id="wit-colors"> </a> +## Change the color for a work item type + +At a glance, you can differentiate WITs when viewing a query result or backlog based on the color and icon assigned to the WIT. The system applies the color defined for the work item type to the [icon specified for the WIT](#wit-icons). + +<img src="../customize/_img/add-modiy-wit-color-icon-state-color.png" alt="Query results showing wit color, icon, and state color" style="border: 2px solid #C3C3C3;" /> + +The Scrum process template defines the following color assignments. Similar ones are made for the Agile and CMMI templates. + +> [!div class="tabbedCodeSnippets"] +```XML +<WorkItemColors> +   <WorkItemColor primary="FF009CCC" secondary="FFD6ECF2" name="ProductBacklogItem" /> +   <WorkItemColor primary="FF773B93" secondary="FFEEE2F2" name="Feature" /> + <WorkItemColor primary="FFFF7B00" secondary="FFFFD7B5" name="Epic" /> +   <WorkItemColor primary="FFF2CB1D" secondary="FFF6F5D2" name="Task" /> +   <WorkItemColor primary="FFCC293D" secondary="FFFAEAE5" name="Bug" /> +   <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Code Review Request" /> +   <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Code Review Response" /> +   <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Feedback Request" /> +   <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Feedback Response" /> +   <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Impediment" /> +   <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Shared Step" /> +   <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Test Case" /> + <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Test Plan" /> + <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Test Suite" /> + <WorkItemColor primary="FFFF9D00" secondary="FFFCEECF" name="Shared Parameter" /> +</WorkItemColors> +``` + + +#### Syntax for WorkItemColors elements +<table> +<thead> +<tr> +<th width="15%"><p>Element</p></th> +<th width="85%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>WorkItemColors</strong></p></td> +<td><p>Optional. Container element for specifying colors for work item types.</p></td> +</tr> +<tr> +<td><p><strong>WorkItemColor</strong></p></td> +<td><p>Specifies the colors used to display a WIT within the web portal. The primary color is used in list displays. The secondary color is no longer referenced, however you must specify it for the syntax to validate.</p> + +<p>When specifying the color, always prefix the six-digit Hex color code with **FF** which denotes that the color should be fully visible. </p> + +<pre><code><WorkItemColor primary="HexColorCode" secondary="HexColorCode" + name="witName" /></code></pre> + +</td> +</tr> +</tbody> +</table> + +<a id="properties"> </a> +<a id="behaviors"> </a> +## Specify properties and behaviors + +The first two properties that you can set, `BugsBehavior` and `HiddenBacklogs` set the default value for a team project. However, each team can change the behavior through their team settings. The third property `StateColors` defines the colors associated with the workflow states for all WITs. The values you set are used for all teams across a team project. + +Example `Properties` configuration: + +> [!div class="tabbedCodeSnippets"] +```XML + <Properties> + <Property name="BugsBehavior" value="AsTasks" /> + <Property name="HiddenBacklogs" value="Microsoft.EpicCategory" /> + <Property name="StateColors" value="Active=#FF00FF00,Resolved=#FFFF0000" /> + <Property name="WorkItemTypeIcons" value="Epic=Icon_Crown,Feature=Icon_Trophy,User Story=icon_book, + Task=icon_clipboard,Bug=icon_insect,Issue=icon_traffic_cone, + Test Plan=icon_test_plan,Test Suite=icon_test_suite,Test Case=icon_test_case,Shared Steps=icon_test_step, + Shared Parameter=icon_test_parameter" /> + </Properties> +``` + +The `BugsBehavior` property determines how bugs, and other WITs defined in the Bug Category, show up on backlogs and boards. Basically, you can configure whether bugs are treated as requirements, as tasks, or not appear on backlogs and boards. For details, see [Show bugs on backlogs and board](../customize/show-bugs-on-backlog.md). + +The `HiddenBacklogs` property determines which backlogs/portfolio backlogs appear by default. The default is to show just the product backlog and one level of portfolio backlog, the Features backlog. Teams can determine if they want to activate the Epics backlog, or make other changes. For details, see [Organize your backlog, Activate backlog levels for your team](../customize/select-backlog-navigation-levels.md). + +#### Syntax for Properties elements +<table> +<thead> +<tr> +<th width="15%"><p>Element</p></th> +<th width="85%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p><strong>Properties</strong></p></td> +<td><p>Optional. Container element for specifying default properties and behaviors.</p></td> +</tr> +<tr> +<td><p><strong>Property</strong></p></td> +<td><p>Specifies the default assignment made to new teams or existing teams when updating a team project with new features. Teams can choose the behavior they want through their team settings.</p> +<p>Valid property names are:</p> +<ul> +<li><p><strong>BugsBehavior</strong> sets the default for the [Show bugs on backlogs and board](../customize/show-bugs-on-backlog.md). Allowed values correspond to:</p> +<p></p> +<ul> +<li><p><strong>AsRequirements</strong> – Bugs appear on backlogs and boards similar to requirements (default for Scrum process)</p></li> +<li><p><strong>AsTasks</strong> – Bugs appear on backlogs and boards similar to tasks (default for Agile and CMMI processes)</p></li> +<li><p><strong>Off</strong> – Bugs don't appear on backlogs or boards</p></li> +</ul> +</li> +<li><p><strong>HiddenBacklogs</strong> specifies the [backlog that's inactive by default](../customize/select-backlog-navigation-levels.md).</p></li> + +<li><p><strong>StateColors</strong> sets the color values for workflow states. (Requires TFS 2017 or later version) </p> +<a id="state-colors"> </a> +<p>The value for the property is a comma-separated list of state names and hex colors. Prefix the six-digit Hex color code with FF which denotes that the color should be fully visible.</p> +``` +<Property name="StateColors" value="stateName1=color1, +stateName2=color2,..." /> +``` +<blockquote>**NOTE:**<br/> +<b>Feature availability: </b>You can specify workflow state colors if you use Hosted XML or, for On-premises XML, you have upgraded to TFS 2015.2 or later version. +</blockquote>  +<p>For additional details, see the next section, [Specify workflow state colors](#workflow-colors).</p></li> +</li> +<a id="wit-icons"> </a> +<li> +<p><strong>WorkItemTypeIcons</strong> defines the icon to display for each work item type. The icon displays in lists of work items and in work item forms. The default entry for the Agile process is as shown. You can only specify an icon from the [supported list of icons](#supported-icons). </p> +<pre><code><Property name="WorkItemTypeIcons" + value="Epic=Icon_Crown,Feature=Icon_Trophy, + User Story=icon_book,Task=icon_clipboard,Bug=icon_insect, + Issue=icon_traffic_cone,Test Plan=icon_test_plan,Test Suite=icon_test_suite, + Test Case=icon_test_beaker,Shared Steps=icon_test_step,Shared Parameter=icon_test_parameter" /></code></pre> +<blockquote>**NOTE:**<br/> +<b>Feature availability: </b> You can customize the icons used for work item types if you use Hosted XML or, for On-premises XML, you have upgraded to TFS 2017.2 or later version. +</blockquote>  +</li> +</ul> +</td> +</tr> +</tbody> +</table> + + + +<a id="workflow-colors"> </a> +### Specify workflow state colors + +>[!NOTE] +><b>Feature availability: </b> To specify workflow state colors, you must upgrade to TFS 2015.2 or later version. + + +The color you associate with your work item states will appear across the product. This includes the following areas: + +- Work item form (web portal, see [New work item experience](../process/new-work-item-experience.md)) +- Work item form links control (web portal, see [LinksControlOptions XML elements referen](linkscontroloptions-xml-elements.md)) +- Cards displayed on the [Kanban board](../kanban/kanban-basics.md) and [task boards](../scrum/task-board.md) (For settings, see [Customize cards](../customize/customize-cards.md)) +- All backlogs (add State via column options) +- Query results (add State via column options) + +Here we show how it appears in the work item form: + +<img src="_img/process-config-bug-form-header-state-colors.png" alt="Bug work item form header, State color shown" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +>No colors are displayed in the client work item forms or within the old links control within the client form. + +**Details:** +- You must specify the color as an eight-digit hexidecimal value, similar to that used for the color defined for a WIT +- To add or edit colors, simply reimport your process configuration with the updated property +- State colors are defined by name across all work item types, i.e., there is no way to have “Active" be one color for User Story and a different color for Bug +- Unmapped colors are defaulted at runtime based on their meta-state mapping +- States with no color defined, and no meta-state mapping will show an empty circle. + + +<a id="supported-icons"> </a> +### Specify WIT icons + +> [!NOTE] +> <b>Feature availability: </b> You can customize the icons used for work item types if you use Hosted XML or, for On-premises XML, you have upgraded to TFS 2017.2 or later version. + +The supported set of icons you can specify for a work item type are shown below. + +![icon_airplane, icon_asterisk, icon_book, icon_car, icon_chart, icon_chat_bubble, icon_check_box, icon_clipboard, icon_code_response, icon_code_review](_img/processconfig-wit-icons-one.png) ![icon_color_palette, icon_crown, icon_database_storage, icon_diamond, icon_flame, icon_gavel, icon_gear, icon_gift, icon_government, icon_headphone](_img/processconfig-wit-icons-two.png) ![icon_insect, icon_key, icon_list, icon_megaphone, icon_paint_brush, icon_parachute, icon_response, icon_review, icon_ribbon, icon_sticky_note](_img/processconfig-wit-icons-three.png) ![icon_star, icon_test_beaker, icon_test_parameter, icon_test_plan, icon_test_step, icon_test_suite, icon_traffic_cone, icon_trophy](_img/processconfig-wit-icons-four.png) + +>[!NOTE] +>Icons noted with an asterisk are supported on VSTS and TFS 2017.3 and later versions. + + +The system applies the color defined for the work item type to the icon. Colors and icons appear in the web portal where ever work items are displayed. This includes under **Related work** in PRs, list of links, the account work item pages as well as the work hub backlogs, boards, queries, and plans. + +For example, here you see a list view… + +<img src="_img/processconfig-list-wi-with-icons.png" alt="Web portal, list of work items with icons" style="border: 2px solid #C3C3C3;" /> + +and, here the icon is shown within the work item form. + +<img src="_img/process-config-bug-form-header-bug-icon.png" alt="Bug work item form header, Work item type icon shown" style="border: 2px solid #C3C3C3;" /> + + +## Related notes + +Learn more about the web work item form and how to customize it from these additional topics: + +- [Add or modify a work item type](../customize/add-modify-wit.md) +- [Customize the new form](../customize/customize-wit-form.md) +- [WebLayout and Control elements](../backlogs/add-work-items.md) +- [On-premises XML process model](../customize/on-premises-xml-process-model.md) + +If you've added a custom WIT and want to add that to either the backlog or task board, you can. You just can't have them appear in both places. Learn how by reading [Add work item types to backlogs and boards](../customize/add-wits-to-backlogs-and-boards.md). \ No newline at end of file diff --git a/docs/work/reference/process-templates/_img/alm_pg_agile_pt.png b/docs/work/reference/process-templates/_img/alm_pg_agile_pt.png new file mode 100644 index 00000000000..aa92c5fbcd5 Binary files /dev/null and b/docs/work/reference/process-templates/_img/alm_pg_agile_pt.png differ diff --git a/docs/work/reference/process-templates/_img/aml_proj_bluefield_whitecheckmark.png b/docs/work/reference/process-templates/_img/aml_proj_bluefield_whitecheckmark.png new file mode 100644 index 00000000000..e670072ed06 Binary files /dev/null and b/docs/work/reference/process-templates/_img/aml_proj_bluefield_whitecheckmark.png differ diff --git a/docs/work/reference/process-templates/_img/icon_reportte.png b/docs/work/reference/process-templates/_img/icon_reportte.png new file mode 100644 index 00000000000..da09a927414 Binary files /dev/null and b/docs/work/reference/process-templates/_img/icon_reportte.png differ diff --git a/docs/work/reference/process-templates/_img/icon_witcheckgreen.png b/docs/work/reference/process-templates/_img/icon_witcheckgreen.png new file mode 100644 index 00000000000..e81f7c70e3e Binary files /dev/null and b/docs/work/reference/process-templates/_img/icon_witcheckgreen.png differ diff --git a/docs/work/reference/process-templates/_img/processguidance_wi_icon.png b/docs/work/reference/process-templates/_img/processguidance_wi_icon.png new file mode 100644 index 00000000000..06353ab7480 Binary files /dev/null and b/docs/work/reference/process-templates/_img/processguidance_wi_icon.png differ diff --git a/docs/work/reference/process-templates/_img/procguid_1.png b/docs/work/reference/process-templates/_img/procguid_1.png new file mode 100644 index 00000000000..6bc00571363 Binary files /dev/null and b/docs/work/reference/process-templates/_img/procguid_1.png differ diff --git a/docs/work/reference/process-templates/_img/procguid_2.png b/docs/work/reference/process-templates/_img/procguid_2.png new file mode 100644 index 00000000000..4dd3ac4b9d6 Binary files /dev/null and b/docs/work/reference/process-templates/_img/procguid_2.png differ diff --git a/docs/work/reference/process-templates/_img/procguid_3.png b/docs/work/reference/process-templates/_img/procguid_3.png new file mode 100644 index 00000000000..18a2082dd73 Binary files /dev/null and b/docs/work/reference/process-templates/_img/procguid_3.png differ diff --git a/docs/work/reference/process-templates/_img/procguid_4.png b/docs/work/reference/process-templates/_img/procguid_4.png new file mode 100644 index 00000000000..97f4bd09f23 Binary files /dev/null and b/docs/work/reference/process-templates/_img/procguid_4.png differ diff --git a/docs/work/reference/process-templates/_img/procguid_6.png b/docs/work/reference/process-templates/_img/procguid_6.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/work/reference/process-templates/_img/procguid_6.png differ diff --git a/docs/work/reference/process-templates/_img/tfs_pt_customflow.png b/docs/work/reference/process-templates/_img/tfs_pt_customflow.png new file mode 100644 index 00000000000..5d11c431672 Binary files /dev/null and b/docs/work/reference/process-templates/_img/tfs_pt_customflow.png differ diff --git a/docs/work/reference/process-templates/_img/tfs_pt_dependencies.png b/docs/work/reference/process-templates/_img/tfs_pt_dependencies.png new file mode 100644 index 00000000000..7e0dd290259 Binary files /dev/null and b/docs/work/reference/process-templates/_img/tfs_pt_dependencies.png differ diff --git a/docs/work/reference/process-templates/_img/tfs_pt_plugins.png b/docs/work/reference/process-templates/_img/tfs_pt_plugins.png new file mode 100644 index 00000000000..8ebe0c52e61 Binary files /dev/null and b/docs/work/reference/process-templates/_img/tfs_pt_plugins.png differ diff --git a/docs/work/reference/process-templates/add-link-type-definitions-to-a-process-template.md b/docs/work/reference/process-templates/add-link-type-definitions-to-a-process-template.md new file mode 100644 index 00000000000..09f6be51fad --- /dev/null +++ b/docs/work/reference/process-templates/add-link-type-definitions-to-a-process-template.md @@ -0,0 +1,85 @@ +--- +title: Add link type definitions to a process template | VSTS & TFS +description: Define additional types of links that team members can create between work items for a team project - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 803dbff8-fa50-4288-9bfb-dc807f4522bf +ms.author: kaelli +ms.manager: douge +ms.date: 09/08/2017 +--- + + +# Add link type definitions to a process template + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can define additional link types that team members can create between work items for a team project. A link type defines the labels and rules that govern the relationships or links between work items of that type. The link types that you specify supplement the default types for hierarchical, dependent, and related links. + +You specify the definition file for each link type in a separate file, or you can specify them all in one file. You then add entries to the **taskxml** element of the WorkItemTracking plug-in for each definition file to upload. + + The [default process templates](../../guidance/choose-process.md) defines several link types that the work item type (WIT) definitions reference. These are in addition to the system-defined link types. For more information, see [LinkTypes](../link-type-element-reference.md). + + The type definitions for links must be uploaded before the type definitions for work items. For more information, see [Define dependencies for task groups and tasks](define-dependencies-plug-ins-groups-tasks.md). + + After a team project is created, you can add, remove, rename, and change the types of links for a team project collection by using the **witadmin** command-line tool. For more information, see [Manage link types](../witadmin/manage-link-types.md). + +<a name="create"></a> +## Define link types + You specify a link type using the **LinkType** element. + +The following example shows the syntax structure that defines the **TestedBy** link type. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<LinkTypes> + <LinkType ReferenceName="Microsoft.VSTS.Common.TestedBy" ForwardName="Tested By" ReverseName="Tests" Topology="Dependency" /> +</LinkTypes> +``` + +You can customize or add a link type definition in the LinkTypes folder. For more information about how to define a type of link, see [Define a custom link type](../define-custom-link-type.md). + + +<a name="upload"></a> +## Specify link type definitions to upload + To upload a link type definition in the process template, you specify the **LINKTYPE** element within the **taskxml** element. The filename attribute is a relative path of the definition file for the link type. For example, the following syntax specifies that the TestedBy.xml file will be uploaded. + +> [!div class="tabbedCodeSnippets"] +```XML +<LINKTYPE fileName="WorkItem Tracking\LinkTypes\TestedBy.xml" /> +``` + +The following example shows how to specify a task that creates the two types of links that are defined in the Agile process template. These types correspond to the **SharedStep** and **TestedBy** link types. + +> [!div class="tabbedCodeSnippets"] +```XML +<task id="LinkTypes" name="LinkType definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item link types created"> +   <taskXml> +      <LINKTYPES> +         <LINKTYPE fileName="WorkItem Tracking\LinkTypes\SharedStep.xml" /> +         <LINKTYPE fileName="WorkItem Tracking\LinkTypes\TestedBy.xml" /> +      </LINKTYPES> +   </taskXml> +</task> +``` + +<a name="elements"></a> + +## LINKTYPES element reference + The following table describes the elements that you use to upload link type definitions. You specify these elements within a **taskXml** container element in the WorkItemTracking plug-in file. + +> [!NOTE] +> You specify the file that defines link types to upload by using the **LINKTYPE** (WorkItemTracking) element. You specify the name of a link type to define by using the **LinkType** (Definition) element. + +|Element|Description and syntax| +|-------------|------------| +|**LINKTYPE**|Required child element of **LINKTYPES**.Specifies the path and name of a file that contains a link type definition to upload.<br />`<LINKTYPE fileName="LinkTypeFilePathName" />`<br /> | +|**LINKTYPES**|Optional child element of the WorkItemTracking plug-in. Contains a collection of **LINKTYPE** elements that each specify a definition file to upload.<br/><code><LINKTYPES> <br/>   <LINKTYPE /> . . . <br/></LINKTYPES> </code> | + + + +## Related notes +- [Manage link types](../witadmin/manage-link-types.md) +- [Define a custom link type](../define-custom-link-type.md) +- [Define objects for tracking work items](define-objects-track-work-items-plug-in.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/add-reports-to-the-process-template.md b/docs/work/reference/process-templates/add-reports-to-the-process-template.md new file mode 100644 index 00000000000..d5503685dd9 --- /dev/null +++ b/docs/work/reference/process-templates/add-reports-to-the-process-template.md @@ -0,0 +1,318 @@ +--- +title: Add reports to the process template | VSTS & TFS +description: You can specify the folder structure and set of reports that will appear by using the Reporting plugin - - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: f7efa9a7-5de0-4bf2-9a9d-c53234b0513b +ms.author: kaelli +ms.manager: douge +ms.date: 09/08/2017 +--- + + +# Add reports to the process template + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + + +When you create a team project, the Reporting plug-in creates a Report site and specifies the folder structure and set of reports that will appear under the ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports** node in Team Explorer. + +> [!IMPORTANT] +> The Reporting plug-in requires that the team project collection where you will create a team project has been configured with SQL Server Analysis Services and SQL Server Reporting Services. For more information, see [Add reports to a team project](../../../report/admin/add-reports-to-a-team-project.md). +> +>When you create a team project from the web portal, several process template files are ignored. Specifically, the ReportsTasks.xml plug-in file that would create the Report site is ignored. +> +>For VSTS, the Report site isn't supported. If you want to add it for your on-premises TFS, then create your team project from Visual Studio or Team Explorer. For details, see [Process template and plug-in files, Client support for project creation](overview-process-template-files.md#client-support). + +You specify two main tasks by using the Reporting plug-in. First, you create the reporting site by using the **site** element. Second, you specify the folder structure and the reports to be uploaded to the site by using the **folder** and **report** elements. The reports that you upload have an .rdl extension and are designed for use with Reporting Services. For an overview of the reports that the TFS process templates provide, see [Reporting Services Reports](../../../report/sql-reports/reporting-services-reports.md). + +After a team project is created from the process template, you can add, remove, rename, and change the folder structure for reports. For more information, see [View, upload, and organize reports](../../../report/admin/view-upload-organize-reporting-services-reports.md). + +<a name="name"></a> +## Reporting plug-in name and location +The following table summarizes the names of the file, the folder, and the plug-in for the Agile and CMMI process templates. + + +**File name**: ReportsTasks.xml <br> +**Folder name**: Reports <br> +**Plug-in name**: Microsoft.ProjectCreationWizard.Reporting + +> [!NOTE] +> You can change the names of the XML file and the folder but not the plug-in. TFS doesn't include a mechanism for the deployment of client-side plug-ins, policies, or other modifications. If you want to deploy this kind of functionality, you must use your own distribution and installation program. + +In the XML file, you specify one or more tasks and their dependencies. For an example of a task that specifies a set of reports, see the ReportsTasks.xml file in the Agile process template. + +<a name="syntax"></a> +## Reporting plug-in syntax structure + The Reporting plug-in file must conform to the schema definition for ReportingServices, which is defined in the Rosetta.xsd file, and be specified in its own file. + + The following syntax shows the structure of the Reporting plug-in. For a description of each element, see [ReportingServices child elements](#child_elements) later in this topic. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<tasks> + <task id="Site" plugin="Microsoft.ProjectCreationWizard.Reporting" completionMessage="Project Reporting site created."> + <dependencies /> + <taskXml> + <ReportingServices> + <site> </site> + </ReportingServices> + </taskXml> + </task> + <task id="Populate Reports" plugin="Microsoft.ProjectCreationWizard.Reporting" completionMessage="Project reports uploaded."> + <dependencies> + <dependency taskId="Site" /> + </dependencies> + <taskXml> + <ReportingServices> + <folders> . . . </folders> + <reports> . . . </reports> + </ReportingServices> + </taskXml> + </task> +</tasks> +``` + +<a name="site"></a> +## Create the Reports site +The first task is to create the reporting site. The reporting site will have a link to it on the project portal home page, and the link will be labeled ![Report](_img/icon_reportte.png "Icon_reportTE")**Reports**. Use the **site** element to create the site, as the following example shows: + +> [!div class="tabbedCodeSnippets"] +```XML +<taskXml> +   <ReportingServices> + <site></site> +   </ReportingServices> +</taskXml> +``` + +<a name="Folders"></a> +## Define the reporting folders +You use the **folder** element to create folders on the reporting site. Use the path attribute to specify the relative path name of the new folder. The folder appears on the project site and under the **Reports** folder in Team Explorer. + +The following example creates four top-level folders and two sub-folders on the reporting site. The top-level folders are labeled Bugs, Builds, Project Management, and Tests. The two sub-folders are located under Project Management and are labeled Visual Studio and Visual Studio ALM. + +> [!div class="tabbedCodeSnippets"] +```XML +<taskXml> +   <ReportingServices> +      <folders> +         <folder path="Bugs" /> + <folder path="Builds" /> + <folder path="Project Management" /> + <folder path="Project Management/Visual Studio" /> + <folder path="Project Management/Visual Studio ALM" /> + <folder path="Tests" /> +      </folders> +   </ReportingServices> +</taskXml> +``` + +<a name="reports"></a> +## Specify the reports to upload +To add the .rdl reports to the reporting site, copy each .rdl files into a folder under the Reports folder in the process template. Then use the report element to describe the necessary properties and data sources for the report. + +The following example specifies that the Remaining Work.rdl file will be uploaded to the Project Management folder. You must specify the **ExplicitProject** parameter and the data sources for each report. The data sources in the following example correspond to the names that are automatically assigned to the Analysis Services cube and data warehouse relational database. + +> [!NOTE] +> The names of the reporting services data sources are `Tfs2010ReportsDS` and `Tfs2010OlapReportsDS`. Even though you might have installed or upgraded to a later version of TFS, these names, which were assigned to the data sources for a TFS 2010 installation, continue to be used. + +> [!div class="tabbedCodeSnippets"] +```XML +<taskXml> +   <ReportingServices> +     <reports> +        <report name="Remaining Work" filename="Reports\Remaining Work.rdl" folder="Project Management" cacheExpiration="30"> +       <parameters> +          <parameter name="ExplicitProject" value="" /> +       </parameters> +       <datasources> +          <reference name="/Tfs2010OlapReportDS" dsname="TfsOlapReportDS" /> +          <reference name="/Tfs2010ReportDS" dsname="TfsReportDS" /> +       </datasources> +    </report> + . . . +     </reports> +   </ReportingServices> +</taskXml> +``` + +<a name="child_elements"></a> + +## ReportingServices elements + +The following syntax shows the structure of the **ReportingServices** element and its child elements. You specify these elements within the **taskXml** container element and only for the Reporting plug-in. + +> [!div class="tabbedCodeSnippets"] +```XML +<ReportingServices> +   <folders> +      <folder /> + . . . +   </folders> +   <reports> +      <report> +         <parameters> +            <parameter /> +         </parameters> +         <datasources> +            <reference /> +         </datasources> +      </report> + . . . +   </reports> +</ReportingServices> +``` + + +The following table describes the elements that you use to specify a report to upload to a team project and that can be accessed through SQL Server Reporting Services. + +<table> +<tr> +<th width="15%">Element</th> +<th width="85%">Description and syntax</th> +</tr> +<tbody valign="top"> +<tr> +<td>**datasources**</td> +<td>Required child element of **report**. Contains a collection of **reference** elements that each specify a data source that the report uses. +<pre><code><datasources> +   <reference /> +</datasources> +</code></pre> +</td> +</tr> + +<tr> +<td >**folder**</td> +<td>Required child element of **folders**. Defines the name of a folder to create under the **Reports** node for a team project.<br/> +<pre><code><folder path="FolderName" /> +</code></pre> +</td> +</tr> + +<tr> +<td >**folders**</td> +<td>Optional child element of **ReportingServices**. Contains a collection of **folder** elements that each specify the name of a folder to create. +<pre><code><folders> +   <folder path="FolderName" /> +</folders> +</code></pre> +</td> +</tr> +<tr> +<td>**parameter**</td> +<td>Required child element of **parameters**. Specifies the name of a report parameter and the value to assign to it. +<pre><code><parameter name="ParameterName" value="ParameterValue" /> +</code></pre> +<p>Where each attribute has the following definition:</p> +<ul><li>**name**: The name of a parameter that you want to specify.</li> +<li>**value**: The value to assign to the parameter. At a minimum, you must define the following parameter to make your report automatically use the project that contains your report: `<parameter name="ExplicitProject" value="" />`.</li> +</ul> +</td> +</tr> +<tr> +<td >**parameters**</td> +<td>Required child element of **report**. Defines a collection of **parameter** elements for a report. +<pre><code><parameters> +   <parameter /> +</parameters> +</code></pre> +</td> +</tr> +<tr> +<td >**properties**</td> +<td>Optional child element of **report**. Provides the container element for **property**. +<pre><code><properties> +   <property /> +</properties> +</code></pre> + +</td> +</tr> +<tr> +<td >**property**</td> +<td>Required child element of **properties**. +<pre><code><property name="PropertyName" value="PropertyValue" /> +</code></pre> +<p>Where each attribute has the following definition:</p> +<ul><li>**name**: The name of a property that you want to specify. For more information, see [View, organize, and configure reports using Report Manager](../../../report/admin/view-upload-organize-reporting-services-reports.md).</li> +<li>**value**: The value to assign to the property..</li> +</ul></td> +</tr> + +<tr> +<td >**reference**</td> +<td>Required child element of **datasources**. Specifies the names that are assigned in Team Foundation Server for the data warehouse relational database and the Analysis Services cube.<br /> +<pre><code><reference name="RelationalDBName" dsname="OLAPDBName" /> +</code></pre> + +Where each attribute has the following definition:<br /> +<ul><li>**name**: The name of the TFS data source. For Team Foundation Server 2010 and later versions, this value is Tfs2010OlapReportDS for the Analysis Services cube or Tfs2010ReportsDS for the relational data warehouse.</li> +<li>**dsname**: The name of the database resource. Specify TfsOlapReportDS for the Analysis Services cube, and TfsReportsDS for the relational data warehouse.</li> +</ul> +For more information about the names of reporting data sources, see [Locate reports after the upgrade to TFS 2010](../../../report/admin/locate-reports-after-upgrade.md). + +</td> +</tr> + +<tr> +<td >**report**</td> +<td>Required child element of **reports**. Specifies the name of the report, the file that contains the .rdl definition, and folder to which the report is uploaded. +<pre><code><report name="ReportName" filename="ReportFilePathName" folder="FolderName" +cacheExpiration="CacheDuration"> +   <parameters> . . . </parameters> +   <datasources> . . . </datasources> +   <properties> . . . </properties> +</report> +</code></pre> + +Where each attribute has the following definition: +<ul> +<li>**name**: The name of the report to display on the reporting site and in Team Explorer. </li> +<li>**filename**: A relative path under the local Reports folder from where to get the .rdl report file. </li> +<li>**cacheExpiration**: The default number of minutes for which the report is cached. </li> +</ul> +</td> +</tr> + +<tr> +<td >**reports**</td> +<td>Required child element of **ReportingServices**. Contains a collection of **report** elements that each specify the name of a report file to upload. +<pre><code><reports> +   <report /> +</reports> +</code></pre> +</td> +</tr> + +<tr> +<td >**ReportingServices**</td> +<td>Required child element of the **taskXml** element for the Reporting plug-in. Describes the tasks that are required to define the reports and folders for SQL Server Reporting Services. +<pre><code><ReportingServices> +   <folders> . . . </folders> +   <reports> . . . </reports> +   <properties> . . . </properties> +</ReportingServices> +</code></pre> +</td> +</tr> + +<tr> +<td >**site**</td> +<td>Required element for the Reporting plug-in. Specifies that a reporting site for the team project will be created. +<pre><code><site> +   . . . +</site> +</code></pre> +</td> +</tr> + +</tbody> +</table> + + +## Related notes +- [Customize a process template](customize-process.md) +- [Process template and plug-in files](overview-process-template-files.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/add-type-wit-category-definitions-process-template.md b/docs/work/reference/process-templates/add-type-wit-category-definitions-process-template.md new file mode 100644 index 00000000000..20f9a60d05a --- /dev/null +++ b/docs/work/reference/process-templates/add-type-wit-category-definitions-process-template.md @@ -0,0 +1,78 @@ +--- +title: Add type definitions for work item categories to a process template | VSTS & TFS +description: Add categories for your process template - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 93f146df-8424-4183-89f7-298943eb8c0f +ms.author: kaelli +ms.manager: douge +ms.date: 09/08/2017 +--- + +# Add type definitions for work item categories to a process template + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can add categories to your process template. A category associates a group label with one or more work item types (WITs). Categories are useful when your team projects contain similar WITs that are named differently. You specify the category definitions in one file, and then you specify that file to upload within the **taskxml** element of the WorkItemTracking plug-in. + +The default process templates define over ten categories that are used to support Agile tools, test case management, and other features. You can customize or create a category definition file. The category file is defined in the WorkItem Tracking folder. For more information, see [Use categories to group work item types](../use-categories-to-group-work-item-types.md). + +After a team project is created from the process template, you can [export and import categories](../witadmin/witadmin-import-export-categories.md) for a team project collection by using the **witadmin** command-line tool. + + +<a name="create"></a> +## Define categories + +The file that defines the categories must conform to the schema definition for categories, defined in the categories-01.xsd file, and must be specified in its own file in the **WITD** container element. + +The following example shows the syntax structure that defines a category that is named **Requirement Category** and that is associated with the **User Story** work item type. + +> [!div class="tabbedCodeSnippets"] +```XML +<CATEGORIES> +   <CATEGORY refname="Microsoft.RequirementCategory" name="Requirement Category"> +      <DEFAULTWORKITEMTYPE name="User Story" /> +   </CATEGORY> +   . . . +</CATEGORIES> +``` + +<a name="upload"></a> +## Specify a category definition file to upload + To upload a set of category definitions, you specify the **CATEGORIES** element within the **taskxml** element. The filename attribute is a relative path of the category definition file. For example, the following syntax specifies that the categories.xml file will be uploaded. + +> [!div class="tabbedCodeSnippets"] +```XML +<CATEGORIES fileName="WorkItem Tracking\categories.xml" /> +``` + + The following example shows how to specify a task that uploads a categories file. Because each category specifies a default work item type, the task to upload the category definition file depends on the successful completion of the **WITs** task which uploads the type definitions for work items. + +> [!div class="tabbedCodeSnippets"] +```XML +<task id="Categories" name="Categories definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item type categories created"> +   <dependencies> +      <dependency taskId="WITs" /> +   </dependencies> +   <taskXml> +      <CATEGORIES fileName="WorkItem Tracking\Categories.xml" /> +   </taskXml> +</task> +``` + +<a name="elements"></a> +## CATEGORIES element reference + The following table describes the **CATEGORIES** element that you use to upload the category definition file. You specify this element within a **taskXml** container element in the WorkItemTracking plug-in file. + +> [!NOTE] +> You specify a definition file to upload using the **CATEGORIES** (WorkItemTracking) element. You specify the set of categories to define using the **CATEGORIES** (Definition) element. + +|Element|Description and syntax| +|-------------|-----------------| +|**CATEGORIES**|Optional child element of the WorkItemTracking plug-in. Specifies the path and name of the file that contains the category definitions to be uploaded when the WorkItemTracking plug-in task is processed. <br />`<CATEGORIES fileName="CategoriesFilePathName" />`| + +## Related notes +- [Use categories to group work item types](../use-categories-to-group-work-item-types.md) +- [CATEGORIES XML reference](../categories-xml-element-reference.md) +- [Import and export categories](../witadmin/witadmin-import-export-categories.md) +- [Define objects for tracking work items](define-objects-track-work-items-plug-in.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/add-wit-definitions-process-template.md b/docs/work/reference/process-templates/add-wit-definitions-process-template.md new file mode 100644 index 00000000000..c12efead400 --- /dev/null +++ b/docs/work/reference/process-templates/add-wit-definitions-process-template.md @@ -0,0 +1,108 @@ +--- +title: Add type definitions for work items to a process template | VSTS & TFS +description: Specify the type definitions for a process template for several work items as a task within the WorkItemTracking plug-in - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: c0cec71f-89ad-43f5-960e-6008e3f9d975 +ms.author: kaelli +ms.manager: douge +ms.date: 02/24/2017 +--- + + +# Add type definitions for work items to a process template + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +Work item types (WITs) provide the foundation for all tracking, monitoring, and reporting on the development of a product and its features. A WIT defines the data fields, the workflow, and the work item form for an item of work that you will track. Types of work items include bugs, user stories, and tasks. + +When you customize a process template, you can make the following WIT customizations: +- Add fields +- Customize the workflow +- Modify the work item form +- Add or remove WITs + +You specify the type definitions for a process template for several work items as a task within the WorkItemTracking plug-in. This task is required because work item types support tracking and reporting work. You specify each type definition file to upload within the **taskXml** element. The plug-ins for test management, reports, and the portal depend on the successful upload of the definitions for WITs. + +The [default process templates](../../guidance/choose-process.md) define several WITs. The types and the fields that are defined within them are referenced in the definitions of categories, work item queries, and reports. Therefore, the task to upload the WIT definitions must successfully complete before the tasks to upload categories, work item queries, and reports. + +Also, the task to upload the definition files for link types must precede the task to upload the type definitions for WITs. For more information, see [Define dependencies for task groups and tasks](define-dependencies-plug-ins-groups-tasks.md). + +After a team project is created using the process template, you can add, remove, rename, and change the definitions of WITs by using the **witadmin** command-line tool. For more information, see [Import, export, and manage work item types](../witadmin/witadmin-import-export-manage-wits.md). + +<a name="create"></a> +## Define a WIT +Each WIT definition must be specified in its own file in the **WITD** container element. Each definition must also conform to the schema definition for work item types. + +The following example shows the high-level syntax structure that defines a work item type. + +> [!div class="tabbedCodeSnippets"] +```XML +<WITD application="work item type editor" version="1.0"> + <WORKITEMTYPE name="Bug"> + <DESCRIPTION>Bug work items are used to track defects in the code.</DESCRIPTION> + <GLOBALLISTS> . . . </GLOBALLISTS> + <FIELDS> . . . </FIELDS> + <WORKFLOW> . . . </WORKFLOW> + <FORM> . . . </FORM> + </WORKITEMTYPE> +</WITD> +``` + + You can customize or create type definition files in the TypeDefinitions folder. For more information about how to define a type of work item, see [All WITD elements](../all-witd-xml-elements-reference.md). + +<a name="upload"></a> +## Specify WIT definition files to upload + To upload a WIT definition, you specify the **WORKITEMTYPE** element. The filename attribute is a relative path of the type definition file. For example, the following syntax specifies that the Bug.xml file will be uploaded. + +> [!div class="tabbedCodeSnippets"] +```XML +<WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\filename.xml"/> +``` + +The following example shows how to specify a task that creates the following WITS: bug, issue, shared steps, task, test case, and user story. Because the definitions for several WITs contain filters for the **TestedBy** link type, the **LinkTypes** task must be completed before the **WITs** task can be completed. + +> [!div class="tabbedCodeSnippets"] +```XML +<task id="WITs" name="WorkItemType definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item types created"> +   <dependencies> +      <dependency taskId="LinkTypes" /> +   </dependencies> +   <taskXml> +      <WORKITEMTYPES> +        <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Bug.xml" /> +        <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Issue.xml" /> +        <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\CodeReviewRequest.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\CodeReviewResponse.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Feature.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\FeedbackRequest.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\FeedbackResponse.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\SharedStep.xml" /> +        <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Task.xml" /> +        <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\TestCase.xml" /> +        <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\UserStory.xml" /> +      </WORKITEMTYPES> +   </taskXml> +</task> +``` + +<a name="elements"></a> +## WORKITEMTYPES element reference + The following table describes the elements that you use to upload the type definitions for work items. You specify these elements within a **taskXml** container element in the WorkItemTracking plug-in file. + +> [!NOTE] +> By using the **WORKITEMTYPE** (WorkItemTracking) element, you specify a type definition file to upload. By using the **WORKITEMTYPE** (WITD) element, you specify the name of a type to define. For more information, see [All WITD elements](../all-witd-xml-elements-reference.md). + +|Element| Description and syntax| +|-------------|------------| +|**WORKITEMTYPE**|Required child element of **WORKITEMTYPES**. Specifies the path and name of the file that contains a type definition to upload.<br /> `<WORKITEMTYPE fileName="WITFilePathName" />`| +|**WORKITEMTYPES**|Required child element of the WorkItemTracking plug-in. Contains a collection of **WORKITEMTYPE** elements that each specify a definition file to upload. <br/><code><WORKITEMTYPES> <br/>   <WORKITEMTYPE /> . . . <br/></WORKITEMTYPES> </code> | + +## Related notes +- [All WITD elements](../all-witd-xml-elements-reference.md) +- [Modify a field or add a custom field](../../customize/add-modify-field.md) +- [Add or modify a work item type ](../../customize/add-modify-wit.md) +- [Import, export, and manage work item types](../witadmin/witadmin-import-export-manage-wits.md) +- [Define objects for tracking work items](define-objects-track-work-items-plug-in.md) + + diff --git a/docs/work/reference/process-templates/add-work-item-instance-process-template.md b/docs/work/reference/process-templates/add-work-item-instance-process-template.md new file mode 100644 index 00000000000..2274ba2e4e0 --- /dev/null +++ b/docs/work/reference/process-templates/add-work-item-instance-process-template.md @@ -0,0 +1,78 @@ +--- +title: Add a work item instance to a process template | VSTS & TFS +description: Define set of task or other items that act as reminders for each project manager to perform after the team project is created - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 7cc17cb2-d854-469b-b45f-060e94baca71 +ms.author: kaelli +ms.manager: douge +ms.date: 04/13/2017 +--- + + +# Add a work item instance to a process template + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +By adding work items to your process template, you define a set of tasks or other items that act as reminders for each project manager to perform after the team project is created. For example, you can create one task each to assign permissions to team members, define product areas and milestones, set up build definitions, and determine the branch strategy for version control. + +> [!NOTE] +> Defining work item instances is optional. The default process templates don't contain any work item instances. Support for work item instances is not supported for Hosted XML. + +<a name="defining"></a> +##Define a work item instance +To define a work item instance, you specify the work item type along with field values for those work items. You use the **WI** and **FIELD** elements that are contained within the **WORKITEMS** element. You specify the set of work item instances within a **taskXml** element in the WorkItemTracking plug-in file. + +The type attribute for the **WI** element specifies which work item type is being created, such as task, user story, or issue. You must assign values to each required field based on the type of work item. + +The following example specifies a work item task that reminds project administrators to assign team members to one or more security groups. Values are assigned to all required fields. Because work item instances depend on the type definitions for work items, you must specify the task for creating work item instances after the task for creating work item types. + +> [!div class="tabbedCodeSnippets"] +```XML +<task id="WIT_Instances" name="Work Item tasks definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item instances created"> + <dependencies> + <dependency taskId="WITs" /> + </dependencies> + <taskXml> + <WORKITEMS> + <WI type="Task"> + <FIELD refname="System.Title" value="Setup: Set Permissions" /> + <FIELD refname="System.IterationPath" value="$$PROJECTNAME$$\Iteration 0" /> + <FIELD refname="System.State" value="Active" /> + <FIELD refname="System.Reason" value="New" /> + <FIELD refname="System.Description" value="Using the admin UI in Visual Studio adds team members to one of the three groups: Project administrators, Contributors, or Readers." /> + </WI> + </WORKITEMS> + </taskXml> +</task> +``` + + +<a name="elements"></a> +###WORKITEMS elements + The following syntax shows the structure of the **WORKITEMS** element and its child elements. You specify these elements within a **taskXml** element in the WorkItemTracking plug-in file. + +> [!div class="tabbedCodeSnippets"] +```XML +<WORKITEMS> +   <WI type="TypeA"> +      <FIELD refname="Field1" value="Value1" /> +      <FIELD refname="Field2" value="Value2" /> +      . . . +      <FIELD refname="FieldN" value="ValueN" /> +   </WI> +   . . . +</WORKITEMS> +``` + +|Element| Description and syntax| +|-------------|-----------------| +|**FIELD**|Required child element of **WI**. Specifies the reference name of a field and the value to assign to that field.<br />`<FIELD refname="FieldReferenceName" value="Value" />`| +|**HYPERLINK**|Optional child element of **WI**. Defines a hyperlink for the work item instance. You can specify **true** or **false** for the relative path.<br />`<HYPERLINK URL="URL" relativePath="false" />`| +|**WI**|Required child element of **WORKITEMS**. Defines the type of work item to create and the values to assign to specific fields.<br/><code><WI type="WorkItemType"> <br/>   <FIELD /> . . . </FIELD><br/>   <HYPERLINK /> . . . </HYPERLINK><br/></WI> </code> | +|**WORKITEMS**|Optional child element of the **taskXml** element for the WorkItemTracking plug-in.Contains a collection of **WI** elements that each define a work item instance.<br/><code><WORKITEMS"> <br/>   <WI> . . . </WI><br/></WORKITEMS> </code> | + + +## Related notes +- [Customize a process](customize-process.md) +- [Define objects for tracking work items](define-objects-track-work-items-plug-in.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/add-work-item-queries-process-template.md b/docs/work/reference/process-templates/add-work-item-queries-process-template.md new file mode 100644 index 00000000000..2c54d107f0b --- /dev/null +++ b/docs/work/reference/process-templates/add-work-item-queries-process-template.md @@ -0,0 +1,112 @@ +--- +title: Add work item queries to a process template | VSTS & TFS +description: Define the initial set of shared queries and query folder structure for a team project - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 74f21c5c-76a0-4b0f-9cdf-d599f7a08eeb +ms.author: kaelli +ms.manager: douge +ms.date: 02/24/2017 +--- + + +# Add work item queries to a process template + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +By adding work item queries to your process template, you can define the initial set of shared queries and query folder structure for a team project. All team members use queries to find the bugs, tasks, and other work items on which they must take action. + + Work item queries specify criteria for generating a list of work items, such as a list of active bugs or closed tasks. Files for work item queries have a .wiq extension and are stored in the Queries subfolder of the WorkItem Tracking folder for the default process templates. + +> [!IMPORTANT] +> The default process templates define several queries which differ based on the process—[Agile](../../guidance/agile-process.md), [Scrum](../../guidance/scrum-process.md), or [CMMI](../../guidance/cmmi-process.md). Query definitions depend on the fields and work item types defined in the process template. Also, some workbooks that are uploaded within the Portal plug-in depend on the query definitions. + + You specify the query definitions to upload as a task within the WorkItemTracking plug-in. This task may be required because several artifacts in a process template may depend on a query. In addition, the task to upload queries depends on the successful completion of the task for uploading work item types. You specify each query file to upload within the **taskXml** element. + + After a team project is created from the process template, you can add, remove, and change queries by using the Query Editor. For more information, see [Use the query editor to list and manage queries](../../track/using-queries.md). + + For information about how to assign query permissions to groups, see [Control access to functional areas](control-access-to-functional-areas.md). For information about how to create query folders, see [Define objects for tracking work items](define-objects-track-work-items-plug-in.md). + +<a name="create"></a> +## Create a work item query (.wiq) file + Each query definition must be specified in its own file with an extension of .wiq, using the **WorkItemQuery** parent element, and conform to the schema that is defined in the wiq.xsd file. + + The following example shows the high-level syntax structure that defines a work item query: + +> [!div class="tabbedCodeSnippets"] +```XML +<WorkItemQuery Version="1"> +<TeamFoundationServer>collectionURL</TeamFoundationServer> +<TeamProject>TeamProjectName</TeamProject> + <Wiql> +      WorkItemQueryLanguage + </Wiql> +</WorkItemQuery> +``` + + For more information about how to create a work item query to add to a process template, see [Define a work item query](define-work-item-query-process-template.md). + +<a name="upload"></a> +## Specify queries to upload + To include the work item queries in the process template, create one or more tasks in the workitems.xml file, which you can find in the \WorkItem Tracking folder, which is in the folder to which you downloaded your process template. Use the **Query** element to specify the file for the work item query. For example, the following XML specifies the query that is defined in the ActiveBugs.wiq file to be uploaded and named Active Bugs. + +> [!div class="tabbedCodeSnippets"] +```XML +<Query name="Active Bugs" fileName="WorkItem Tracking\Queries\ActiveBugs.wiq" /> +``` + + You add the set of queries to upload as a task in the WorkItemTracking plug-in. + + The following example shows how to specify a task to create a query folder that is named Product Management and upload a query that is named All User Stories to that folder. + +> [!div class="tabbedCodeSnippets"] +```XML +<task id="Queries" name="Stored Query Definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage=" Work item queries uploaded" /> + <dependencies> + <dependency taskId="WITs" /> + </dependencies> + <taskXml> + <QUERIES> + <QueryFolder name="Product Management" > +    <Query name="All User Stories" fileName="WorkItem Tracking\Queries\AllUserStories.wiq" /> + </QueryFolder> + . . . + </QUERIES> + </taskXml> +</task> +``` + + For more information, see [Define objects for tracking work items](define-objects-track-work-items-plug-in.md). + +<a name="elements"></a> +## QUERY elements + The following syntax shows the structure of the **QUERIES** element and its child elements. + +> [!div class="tabbedCodeSnippets"] +```XML +<QUERIES> +   <Permission /> +   <QueryFolder > +      <Query /> +   </QueryFolder> +</QUERIES> +``` + + The following table describes the elements that you use to specify the query folder structure, permissions, and queries to upload. You specify these elements within a **taskXml** container element in the WorkItemTracking plug-in file. + +|Element|Description and syntax| +|-------------|------------| +|**Permission**|Optional child element of **Query**. Specifies the default permissions that are assigned to shared queries. For more information, see [Assign permissions for work item queries](control-access-to-functional-areas.md#Queries).<br />`<permission allow="ListOfPermissions" identity="GroupName" />` | +|**Query**|Required child element of **QUERIES**. Specifies the name and the path of the .wiq file that defines a query to upload.<br />`<Query name="QueryName" fileName="QueryFilePathName" />`<br /><br /> As the following example shows, you can upload the query that is labeled “Active Bugs? and that is defined in the ActiveBugs.wiq file:<br /><br />```<Query name="Active Bugs" fileName="WorkItem Tracking\Queries\ActiveBugs.wiq" />```<br /> | +|**QueryFolder**|Optional child element of **QUERIES**. Specifies the name of a query folder.<br/><code><QueryFolder name="FolderName"> <br/>   <Query /> <br/></QueryFolder> </code> | +|**QUERIES**|Optional child element of the **taskXml** element for the WorkItemTracking plug-in. Specifies which query definition files to use to create default queries.<br/><code><QUERIES> <br/>    . . . <br/></QUERIES> </code> | + +<br/><code><QueryFolder name="FolderName"> <br/>   <Query /> <br/></QueryFolder> </code> + + +<br/><code><QUERIES> <br/>    . . . <br/></QUERIES> </code> + + +## Related notes +- [Use the query editor to list and manage queries](../../track/using-queries.md) +- [Define objects for tracking work items](define-objects-track-work-items-plug-in.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/configure-initial-groups-teams-members-permissions.md b/docs/work/reference/process-templates/configure-initial-groups-teams-members-permissions.md new file mode 100644 index 00000000000..4a90d29b02f --- /dev/null +++ b/docs/work/reference/process-templates/configure-initial-groups-teams-members-permissions.md @@ -0,0 +1,275 @@ +--- +title: Configure initial groups, teams, members, and permissions | VSTS & TFS +description: Configure the initial security settings for a team project using the plug-in file for Groups and Permissions - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 518b3c00-0587-45fe-8cbb-43f6a2760ea0 +ms.author: kaelli +ms.manager: douge +ms.date: 09/08/2017 +--- + +# Configure initial groups, teams, members, and permissions + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +By using the plug-in file for Groups and Permissions, you can configure the initial security settings for a team project. You accomplish this by defining tasks that create security groups, nest groups, define groups as teams, configure initial team settings, assign members to groups, and allow or deny specific permissions to each group. In addition to performing these tasks, you can specify the initial security settings for collection-level, project-level, and project-classification areas. + + Microsoft process templates assign several permissions to default groups. You can modify these assignments by customizing the plug-in file for Groups and Permissions. For more information about this plug-in, see [Define groups, teams, and permissions](define-groups-teams-permissions-plug-in.md). + + For information about how to configure the initial security settings for a team project's functional areas, such as Team Foundation Build, Team Foundation version control, and Visual Studio Lab Management, see [Control access to functional areas](control-access-to-functional-areas.md). + + For information about how to customize types of work items to allow or deny access to groups or users, see [Apply a field rule](../apply-rule-work-item-field.md). + + For more information about how to administer users and groups and control access for Visual Studio Application Lifecycle Management (ALM), see [Set up groups for use in TFS deployments](../../../tfs-server/admin/setup-ad-groups.md). + +<a name="ElementsGroups"></a> +## Define and assign permissions to groups + You can use the **group** and **member** elements to specify a new security group in Team Foundation Server and add members to that group. You can use the group **permission** element to assign permissions to a group and to members of that group. You must encapsulate each of these elements within their corresponding container elements: **groups**, **permissions**, and **members**. You use the following the syntax structure for each of these elements: + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="Group Name" description="Description of Group"></group> +<permission name="PermissionName" class="ClassName" allow="True | False"/> +<member name="MemberName"></member> +``` + +The following table describes the attributes for the **group**, **member**, and group **permission** elements. You use these elements only in the Groups and Permissions plug-in file. + +|**Element**|**Attribute**|**Description**| +|-----------------|-------------------|---------------------| +|**group**|**name**|Specifies the name of the group that you are creating.| +||**isTeam**|Indicates if the group is a team (**true**) or not (`false`).| +||**description**|Describes the purpose of the group to other users.| +|**member**|**name**|Specifies the name of a group that you are adding as a member of another group. You can create groups and pre-populate them with any of the following types of members:<br /><br /> <ul><li>Default groups that are defined in Team Foundation Server</li><li>Project groups that have been previously created in the groupsandpermissions.xml file (for example, [$$PROJECTNAME$$]\Contributors)</li><li>Groups and users who are defined in Active Directory, which you specify by using the following format:<br /><br /> <ul><li>DOMAIN\USERNAME</li><li>DOMAIN\GROUPNAME</li></ul></li></ul><br /> For information about the format to use when you specify default groups, see [Group macros and default groups](#group-macros) later in this topic.<br /><br /> The **permissions** container element must precede the **members** container element.| +|**permission**|**name**|Identifies which permission is being applied. For a list of the supported permissions, see the following sections later in this topic:<br /><br /> - [Assign collection-level permissions](#CollectionLevel)<br />- [Assign project-level permissions](#Project)<br />- [Assign permissions to control area paths](#AreaPaths)<br />- [Assign permissions to control iteration paths](#IterationPaths)<br /><br /> The **permissions** container element must precede the **members** container element.| +||**class**|Identifies the class, or area, where the group permission is granted. The following values are valid:<br /><br /> - **NAMESPACE**: Specifies collection-level permissions.<br />- **PROJECT**: Specifies project-level permissions.<br />- **CSS_NODE**: Specifies permissions for viewing and managing area paths for a team project.<br />- **ITERATION_NODE**: Specifies permissions for viewing and managing iteration paths for a team project.<br />-| +||**allow**|Uses a **true** or **false** value to indicate whether the permission is allowed or denied.| +||**path**|Identifies the node of the area path or iteration path where the permission is being applied. This attribute is valid only when **class** is set to CSS_NODE or ITERATION_NODE.| + +<a name="group-macros"></a> +##Group macros and default groups + The following table lists the macros that you can use to specify a default group that is defined in Team Foundation Server. + +> [!NOTE] +> You can specify the macros in the following table only in the plug-in for Groups and Permissions. You cannot specify these macros when you assign permissions by using the plug-ins for build, version control, or lab management. + +|Default groups|Macro| +|--------------------|-----------| +|Project Collection Administrators|[SERVER]\\$$PROJECTCOLLECTIONADMINGROUP$$<br /><br /> [SERVER]\\$$TEAMFOUNDATIONADMINGROUP$$<br /><br /> $$COLLECTIONADMINGROUP$$| +|Project Collection Service Accounts|[SERVER]\\$$PROJECTCOLLECTIONSERVICESGROUP$$| +|Project Collection Build Service Accounts|[SERVER]\\$$PROJECTCOLLECTIONBUILDSERVICESGROUP$$<br /><br /> $$COLLECTIONBUILDSERVICESGROUP$$| +|Project Collection Build Administrators|[SERVER]\\$$PROJECTCOLLECTIONBUILDADMINSGROUP$$<br /><br /> $$COLLECTIONBUILDADMINISTRATORSGROUP$$| +|Project Administrators|$$PROJECTADMINGROUP$$<br /><br /> [$$PROJECTNAME$$]\\$$PROJECTADMINGROUP$$<br /><br /> [$$PROJECTNAME$$]\Builders| +|Project creator|$$CREATOR_OWNER$$<br /><br /> @creator| +|Default team|@defaultTeam| + +<a name="NestingGroups"></a> +###Example: Nest groups and assign members to groups + The following example shows how to configure groups that are named TestGroup1, TestGroup2, and TestGroup3. In this example, you add TestGroup1 as a member of TestGroup2. For this code to be valid, you must define TestGroup1 before you define TestGroup2. + +> [!div class="tabbedCodeSnippets"] +```XML +<task id="GroupCreation1"> + <taskXml> + <groups> + <group name="TestGroup1" description="Test group 1. Contains no members out of the box."> + <permissions> + <permission name="GENERIC_READ" class="PROJECT" allow="true" /> + </permissions> + </group> + <group name="TestGroup2" description="Test group 2. Contains TestGroup1 and Project Administrators."> + <permissions> + <permission name="GENERIC_READ" class="PROJECT" allow="true" /> + </permissions> + <members> + <member name="TestGroup1" /> + <member name="$$PROJECTADMINGROUP$$" /> + </members> + </group> + <group name="TestGroup3" description="Test group 3. Contains DOMAIN\USER, DOMAIN\GROUP, Project Administrators, and Project Collection Build Service Accounts."> + <permissions> + <permission name="GENERIC_READ" class="PROJECT" allow="true" /> + </permissions> + <members> + <member name="DOMAIN\USER" /> + <member name="DOMAIN\GROUP" /> + <member name="[$$PROJECTNAME$$]\$$PROJECTADMINGROUP$$" /> + <member name="[SERVER]\$$PROJECTCOLLECTIONBUILDSERVICESGROUP$$" /> + </members> + </group> + </groups> + </taskXml> +</task> +``` + +<a name="team"></a> +##Define a team + In addition to creating groups, you can assign a group as a team. Creating a team project also creates a default team. If you have several teams that want to organize their work separately from the other teams, then you can either define these teams within the Groups and Permissions plug-in file, or you can configure them after you create the team project. See [Add another team](../../scale/multiple-teams.md). + + The following example shows how to configure a group as a team. In this example, you specify the group, Dream Team, as a team and add the team project creator as a member of the team. Whatever iteration paths that you specify for the team must be defined in the Classifications plug-in file. See [Define initial areas, iterations, and Project mapping file](define-classification-plug-in.md). + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="Dream Team" isTeam="true" description="Next generation work"> +   <permissions> +      <permission name="GENERIC_READ" class="PROJECT" allow="true" /> +   </permissions> +   <members> +      <member name="@creator"/> +   </members> +   <teamSettings areaPath="Area"> +      <iterationPaths backlogPath="Iteration"> +         <iterationPath path="Release 1\Sprint 1" /> +         <iterationPath path="Release 1\Sprint 2" /> +         <iterationPath path="Release 1\Sprint 3" /> +         <iterationPath path="Release 1\Sprint 4" /> +         <iterationPath path="Release 1\Sprint 5" /> +         <iterationPath path="Release 1\Sprint 6" /> +      </iterationPaths> +   </teamSettings> +</group> +``` + +<a name="CollectionLevel"></a> +## Assign collection-level permissions +You can assign collection-level permissions by using the group **permission** element and the NAMESPACE class. These permissions control access to resources that are available across team projects. You can set collection-level permissions for only the following categories of users: + +- Collection-level users and groups, such as Project Collection Administrators +- Project-level groups that have been added to the collection level on your server that is running Team Foundation +- Custom groups that you create and add to the collection level + +For the format to use when you specify groups, see [Group macros and default groups](#group-macros) earlier in this topic. + +The following example shows how to grant collection-level permissions to the project administrators for a team project. + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="PROJECTADMINGROUP" description="Members of this group can add, modify, and delete items within the team project."> + <permissions> + <permission name="GENERIC_READ" class="NAMESPACE" allow="true" /> + <permission name="WORK_ITEM_WRITE" class="NAMESPACE" allow="true" /> + <permission name="MANAGE_TEMPLATE" class="NAMESPACE" allow="true" /> + <permission name="MANAGE_TEST_CONTROLLERS" class="NAMESPACE" allow="true" /> + </permissions> +</group> +``` + +The following table describes the collection-level permissions that you can assign. + +> [!NOTE] +> By default, no collection-level permissions are assigned in the default process templates. + +|**Permission**|**Description**| +|--------------------|---------------------| +|**DIAGNOSTIC_TRACE**|**Alter trace settings**. Can change the trace settings for gathering more detailed diagnostic information about Web services for Team Foundation Server.| +|**CREATE_PROJECTS**|**Create new projects**. Can create projects in the team project collection.| +|**GENERIC_WRITE**|**Edit collection-level information**. Can edit collection-level permissions for users and groups in the team project collection. Users who have this permission can perform the following tasks:<br /><br /> - Add, remove, or rename a collection-level application group from the collection in Team Foundation Server. **Note:** You cannot remove default collection-level groups, such as Project Collection Administrators.<br />- Add or remove a user or group in Windows user or another application group in Team Foundation Server (at the server level).<br />- Change collection-level permissions for users and groups.<br /><br /> Additionally, users who have this permission can modify permissions for version control, and they have write access to all files in version control unless their access is explicitly denied by other permissions.| +|**MANAGE_TEMPLATE**|**Manage process templates**. Can download, create, edit, and upload process templates to the team project collection.| +|**MANAGE_TEST_CONTROLLERS**|**Manage test controllers**. Can register and de-register test controllers for the team project collection.| +|**GENERIC_READ**|**View collection-level information**. Can view membership of collection-level groups and the permissions of those users.| + +<a name="Project"></a> +##Assign project-level permissions + You can assign project-level permissions in the Groups and Permissions plug-in file. You assign these permissions by using the group **permission** element and the PROJECT class. These permissions control access to a single project's resources. You can grant access to users and groups in Windows, groups in Team Foundation, and groups that you have previously defined in the Groups and Permissions plug-in file. For the format to use when you specify groups, see [Group macros and default groups](#group-macros) earlier in this topic. + + The following example shows how to grant several permissions to the Contributors group for a team project. + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="Contributors" description="Members of this group can add, modify, and delete items within the team project."> + <permissions> + <permission name="GENERIC_READ" class="PROJECT" allow="true" /> + <permission name="DELETE_TEST_RESULTS" class="PROJECT" allow="true" /> + <permission name="PUBLISH_TEST_RESULTS" class="PROJECT" allow="true" /> + <permission name="VIEW_TEST_RESULTS" class="PROJECT" allow="true" /> + <permission name="MANAGE_TEST_ENVIRONMENTS" class="PROJECT" allow="true" /> + <permission name="MANAGE_TEST_CONFIGURATIONS" class="PROJECT" allow="true" /> + </permissions> +</group> +``` + +The following table describes the project-level permissions that you can assign and indicates the default assignments that are made in the default process templates. + +|**Permission**|**Description**|Readers|Contributors|Build Administrators| +|--------------------|---------------------|-------------|------------------|--------------------------| +|**GENERIC_READ**|**View project-level information**. Can view membership of project-level groups and the permissions of those members.|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**VIEW_TEST_RESULTS**|**View test runs**. Can view test plans in this node.|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**MANAGE_TEST_CONFIGURATIONS**|**Manage test configurations**. Can create and delete test configurations for the team project.||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**MANAGE_TEST_ENVIRONMENTS**|**Manage test environments**. Can create and delete test environments for the team project.||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**PUBLISH_TEST_RESULTS**|**Create test runs**. Can add and remove test results and add or modify test runs for the team project.||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**DELETE_TEST_RESULTS**|**Delete test runs**. Can delete a scheduled test for the team project.||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**DELETE**|**Delete team project**. Can delete from Team Foundation Server the project for which the user has this permission.|||| +|**GENERIC_WRITE**|**Edit project-level information**. Can edit project-level permissions for users and groups in Team Foundation Server.|||| + +<a name="AreaPaths"></a> +##Assign permissions to control area paths + You can assign permissions that control access to area definitions by using the group **permission** element and the CSS_NODE class. These permissions control access to a single project's classification structure. You can grant access to users and groups in Windows, groups in Team Foundation, and groups that you have previously defined in the Groups and Permissions plug-in file. For information about the format to use when you specify groups, see [Group macros and default groups](#group-macros) earlier in this topic. + + The following example shows how to grant several permissions to the Contributors group for a team project. + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="Contributors" description="Members of this group can add, modify, and delete items within the team project."> + <permissions> + <permission name="GENERIC_READ" class="CSS_NODE" allow="true" /> + <permission name="WORK_ITEM_READ" class="CSS_NODE" allow="true" /> + <permission name="WORK_ITEM_WRITE" class="CSS_NODE" allow="true" /> + <permission name="MANAGE_TEST_PLANS" class="CSS_NODE" allow="true" /> + </permissions> +</group> +``` + + The following table describes the permissions that you can assign to control access to the hierarchical structure for the project's area and iteration nodes. The table also indicates the default assignments that are made in the default process templates. + +> [!NOTE] +> Some operations for tracking work items require multiple permissions. For example, you need multiple permissions to delete a node. + +|**Permission**|**Description**|Readers|Contributors|Build Administrators| +|--------------------|---------------------|-------------|------------------|--------------------------| +|**GENERIC_READ**|**View this node**. Can view the security settings for an area node.|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**WORK_ITEM_READ**|**View work items in this node**. Can view, but not change, work items that are assigned to an area node.|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**WORK_ITEM_WRITE**|**Edit work items in this node**. Can edit work items that are assigned to an area node.||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**MANAGE_TEST_PLANS**|**Manage test plans**. Can create and edit test plans that are assigned to an area node. If test plans have not been run, you can also delete them.||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**CREATE_CHILDREN**|**Create and order child nodes**. Can create area nodes. Users who have both this permission and the GENERIC_WRITE permission can move or re-order any child area node.|||| +|**DELETE**|**Delete this node**. Can delete area nodes.<br /><br /> Users who have both this permission and the GENERIC_WRITE permission for another node can delete area nodes and reclassify existing work items from the deleted node. If the deleted node has child nodes, those nodes are also deleted.|||| +|**GENERIC_WRITE**|**Edit this node**. Can set permissions for and rename area nodes.|||| + +<a name="IterationPaths"></a> +##Assign permissions to control iteration paths + +You assign permissions that control access to iteration paths by using the group **permission** element and the **ITERATION_NODE** class. These permissions control access to the milestone releases or iterations for a single project. You can grant access to users and groups in Windows, default TFS groups, and groups that you have previously defined in the Groups and Permissions plug-in file. For information about the format to use when you specify groups, see [Group macros and default groups](#group-macros) earlier in this topic. + + The following example shows how to grant several permissions to the Contributors group for a team project: + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="Contributors" description="Members of this group can add, modify, and delete items within the team project."> + <permissions> + <permission name="GENERIC_READ" class="ITERATION_NODE" allow="true" /> + <permission name="GENERIC_WRITE" class="ITERATION_NODE" allow="true" /> + <permission name="CREATE_CHILDREN" class="ITERATION_NODE" allow="true" /> + </permissions> +</group> +``` + +The following table describes the permissions that you can assign to control access to the hierarchical structure for the project's iteration nodes. Because the default process templates do not specify any `ITERATION_NODE` permissions, all team members can create, view, and delete iteration nodes. + +> [!NOTE] +> Some operations for tracking work items require multiple permissions. For example, you need multiple permissions to delete a node. + +|**Permission**|**Description**| +|--------------------|---------------------| +|**GENERIC_READ**|**View this node**. Can view the security settings for a node.| +|**CREATE_CHILDREN**|**Create and order child nodes**. Can create iteration nodes. Users who have both this permission and the GENERIC_WRITE permission can move or re-order any iteration node.| +|**DELETE**|**Delete this node**. Can delete iteration nodes.<br /><br /> Users who have both this permission and the GENERIC_WRITE permission for another node can delete iteration nodes and reclassify existing work items from the deleted node. If the deleted node has child nodes, those nodes are also deleted.| +|**GENERIC_WRITE**|**Edit this node**. Can set permissions for iteration nodes and rename nodes.| + +## Related notes +- [Define groups, teams, and permissions](define-groups-teams-permissions-plug-in.md) +- [Control access to functional areas](control-access-to-functional-areas.md) +- [Set up groups for use in TFS deployments](../../../tfs-server/admin/setup-ad-groups.md) +- [Permission reference](/vsts/tfvc/permission-command) +- [Change groups and permissions with TFSSecurity](../../../tfs-server/command-line/tfssecurity-cmd.md) +- [tf permission Command](../../../tfvc/permission-command.md). + diff --git a/docs/work/reference/process-templates/control-access-to-functional-areas.md b/docs/work/reference/process-templates/control-access-to-functional-areas.md new file mode 100644 index 00000000000..aa46a704670 --- /dev/null +++ b/docs/work/reference/process-templates/control-access-to-functional-areas.md @@ -0,0 +1,109 @@ +--- +title: Control access to functional areas | VSTS & TFS +description: Configure the initial security settings for the following functional areas for a team project - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 6c967b40-4842-41db-9350-bb3320f3e57c +ms.author: kaelli +ms.manager: douge +ms.date: 09/08/2017 +--- + +# Control access to functional areas + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can configure the initial security settings for the following functional areas for a team project: +- Work item queries +- Team Foundation version control (TFVC) +- Team Foundation Build +- Visual Studio Lab Management. + +The default process templates assign several permissions to default security groups. You can modify these assignments by customizing the plug-in file for the corresponding functional area. + +For information about how to configure initial security groups, see [Configure initial groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md). For information about how to administer users and groups, see [Set up groups for use in TFS](../../../tfs-server/admin/setup-ad-groups.md). + +<a name="ElementsFunctionalArea"></a> +##Assign permissions to functional areas + You can use the functional **permission** element to allow or deny permissions for functional areas to a security group in Team Foundation Server, a Windows group, or a Windows identity. You use this element in the plug-in files for work item tracking, Team Foundation version control, Team Foundation Build, and Lab Management. You must encapsulate the permission element within its corresponding container: the **permissions** element. You use the following syntax structure for the functional **permission** element: + +> [!div class="tabbedCodeSnippets"] +```XML +<permission allow="PermissionName" identity="GroupName"/> +<permission deny="PermissionName" identity="GroupName"/> +<permission allow="PermissionName" deny="PermissionName" identity="GroupName"/> +``` + +The following example shows how to grant permissions to allow the **Contributors** group to view builds and build definitions and to queue builds and edit build quality. + +> [!div class="tabbedCodeSnippets"] +```XML +<taskXml> + <permission allow="Read, PendChange, Checkin, Label, Lock" identity="[$$PROJECTNAME$$]\Contributors"/> +</taskXml> +``` + +> [!NOTE] +> During runtime, if a permission can't be found for an identity, the permission is searched for in any other groups to which the identity belongs. If the permission cannot be found, the permission is denied by default. + +<a name="Queries"></a> +## Assign permissions for work item queries +In the workitems plug-in file, you can assign permissions that control access to team query folders. Query folder permissions are specific to queries and query folders. You can grant access to users and groups in Windows or to default TFS groups. + + You assign these permissions by using the functional **permission** element, as the following example shows: + +> [!div class="tabbedCodeSnippets"] +```XML +<Permission allow="Read, Contribute, Delete, ManagePermissions, FullControl" identity="="[$$PROJECTNAME$$]\$$PROJECTADMINGROUP$$" /> +``` + +> [!NOTE] +> After the team project is created, you can set permissions by right-clicking a query folder or query. For details, see [Set permissions on queries](../../track/set-query-permissions.md). + + +<a name="VersionControl"></a> +## Assign TFVC permissions +You can assign permissions that control access to source code files and folders by changing the plug-in file for version control. Version control permissions are specific to source code files and folders. You can grant access to users and groups in Windows or TFS default groups. + +You assign these permissions by using the functional **permission** element, as the following example shows: + +> [!div class="tabbedCodeSnippets"] +```XML +<permission allow="Read, PendChange, Checkin, Label, Lock, Merge" identity="[$$PROJECTNAME$$]\@@Contributors@@" /> +``` + + +<a name="Build"></a> +## Assign Build permissions +You can assign permissions that control access to build activities by changing the Build plug-in file. You can grant access to users and groups in Windows and groups in Team Foundation Server. For information about the format to use when you specify groups, see [Group macros and default groups ](configure-initial-groups-teams-members-permissions.md#group-macros). + + You assign these permissions by using the functional **permission** element, as the following example shows: + +> [!div class="tabbedCodeSnippets"] +```XML +<Permission allow="ViewBuildDefinition, QueueBuilds, ViewBuilds, EditBuildQuality" identity="[$$PROJECTNAME$$]\@@Contributors@@" /> +``` + + +> [!NOTE] +> The **Override check-in validation by build** permission should be assigned only to service accounts for build services and to build administrators who are responsible for the quality of the code. For more information, see [Perform a gated check-in](../../../tfvc/check-folder-controlled-by-gated-check-build-process.md). + + +<a name="LabManagement"></a> +##Assign Lab Management permissions + +You can control access to activities in Lab Management by changing the Lab plug-in file. Permissions for Lab Management are specific to virtual machines, environments, and other resources. You can grant access to users and groups in Windows and TFS groups. You assign these permissions by using the functional **permission** element, as the following example shows: + +> [!div class="tabbedCodeSnippets"] +```XML +<permission allow="Read, Create, Write, Edit, Start, Stop, ManageSnapshots, Pause" identity="[$$PROJECTNAME$$]\@@Contributors@@" /> +``` + + + +## Related notes +- [Configure initial groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md) +- [Permission reference](../../../security/permissions.md) +- [Configure Lab Management with TFSLabConfig, Permissions](../../../tfs-server/command-line/tfslabconfig-cmd.md#permissions) + + \ No newline at end of file diff --git a/docs/work/reference/process-templates/customize-process.md b/docs/work/reference/process-templates/customize-process.md new file mode 100644 index 00000000000..ab66ee57f76 --- /dev/null +++ b/docs/work/reference/process-templates/customize-process.md @@ -0,0 +1,230 @@ +--- +title: Customize a process template | VSTS & TFS +description: Define the objects and processes available to you when you create a team project - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 3122f0e7-2ad9-46a1-a65f-32af37c0f444 +ms.author: kaelli +ms.manager: douge +ms.date: 09/08/2017 +--- + + +# Customize a process template + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] +**** +Process templates define the objects and processes available to you when you create a team project. By customizing a process template, you customize one of more objects. Common types of customizations you can make include: + +- Add a new field to an existing work item type (WIT) +- Modify the pick list of values for a field +- Change the workflow—States, Reasons, Transitions, Actions—of an existing WIT +- Edit the layout of a work item form +- Add or remove a work item type +- Change the process configuration or defaults associated with Agile tools + + +>[!NOTE] +>If you're looking for **project templates** for software development, see [Creating Visual Studio templates](https://msdn.microsoft.com/library/ms247121.aspx). This topic describes process templates used to create team projects on VSTS and TFS. + +Default process templates define default configurations as well as the following artifacts that your team uses to plan and track work, collaborate, and share information. + +For example, the Agile process template defines the set of artifacts shown in the following image. + +**Agile process template artifacts** + +![Agile process template artifacts](_img/alm_pg_agile_pt.png "ALM_PG_Agile_PT") + +Many of these artifacts depend on WITs which are used to track work. For example, data fields defined in the definition of WITs─such as, Feature, Bug, User Story, or Task─are also used to define work item queries and reports. In addition to these artifacts, you can also define the initial project areas and milestones, security configuration, and other default settings that support version control and test management. + + After you create a team project, you can change configurations and customize artifacts. However, by customizing the process template before you create your team projects, all resulting team projects that you create from it will match a standard set of team processes. The main reasons you might want to customize a process template include: + +- You plan to create several team projects and you want to minimize repetitive tasks that you'll have to implement later in each team project that you create. + +- You want to make sure all teams adhere to certain standards by providing the templates and structures within the toolset your software development teams will use. + +- You need to update a custom process template to support using the Configure Features wizard after a TFS upgrade + +If you work with only a single team project, then you might consider simply creating the team project and customizing one or more objects later. + +## How are process templates used? +The primary use of process templates is to create a team project. For the Hosted XML process model, it is also used to update a team project. A team project provides the set of objects, artifacts, and configurations defined in the interdependent set of template files. You use your team project to organize source code, track work and information, build software, and support test activities. + + **Hosted XML process model** +- Create a team project +- [Add or refresh a process](../../import-process/import-process.md) (limited availability) + +**On-premises XML process model** +- Create a team project + + +## Where should I start? + Before you start customizing a process template, you'll want to become familiar with what you can configure and customize and then plan your changes accordingly. + +- If you're new to process templates, first [review the three default process templates](../../guidance/choose-process.md). + +- If you want to become familiar with the file structure of a process template, [review a description for each file](overview-process-template-files.md) or [download a process template](../../guidance/manage-process-templates.md). + + You can modify the processes for your team project after it is created. As you work with a team project, the initial settings that the process template defined may no longer meet your needs. + +- If you're most interested in customizing objects used to track work, which includes test plans, test suites, and test cases, review [Customize your work tracking experience](../../customize/customize-work.md). The customizations you make by modifying an XML definition file for a team project are the same types of customizations you make in a process template file. + + If you want to [add or modify types of work items](../../customize/add-modify-wit.md), you can achieve this without changing the whole process template. You can make and test changes by using an existing team project. For the On-premises XML process model, you can use the **witadmin exportwit** and **importwitd** command-line tools to download and upload the XML definition files for work item types. + +- If you need to update a custom process template to support using the Configure Features wizard after a TFS upgrade, see [Configure features after an upgrade](../../customize/configure-features-after-upgrade.md). + + Upgrading TFS to a later version uploads the latest versions of the default TFS process templates. To use the available updated templates and to access customizations that you made previously, you may need to add customizations provided with the new templates. + +- If you're considering making extensive customizations, [review how the changes you make will impact maintenance and upgrade of your team projects](../../customize/on-premises-xml-process-model.md#before-you-customize). + +<a name="plan"></a> +## Process template files and functional areas you can customize +Process templates consist of nine plug-ins. Each plug-in defines a set of tasks that will be run and the screens that appear when you launch the New Team Project wizard. Tasks set permissions, create folders, upload files, activate sites, or set other configurable variables. Plug-ins also specify the dependencies that a task has on the successful completion of other tasks. + +![Process Template Plugins](_img/tfs_pt_plugins.png "TFS_PT_Plugins") + +>[!IMPORTANT] +>When you create a team project from the web portal, several process template files are ignored. Specifically, the files that would create a Report Manager site and a SharePoint project portal aren't supported. These features aren't supported for VSTS. +> +>If you want these features to be created for a team project on your on-premises TFS, then create your team project from Visual Studio or Team Explorer. For details, see [Process template and plug-in files, Client support for project creation](overview-process-template-files.md#client-support). + +The Build, Portal, and Reporting plug-ins require the following resources have been installed and configured. + +|Plug-in|Team Foundation Build|SharePoint Products|SQL Server Analysis Services|SQL Server Reporting Services| +|--------------|---------------------------------------------------------------|-------------------------------------------------------------|----------------------------------|-----------------------------------| +|Build|![Required](_img/aml_proj_bluefield_whitecheckmark.png "AML_Proj_BlueField_WhiteCheckmark")|||| +|Portal||![Required](_img/aml_proj_bluefield_whitecheckmark.png "AML_Proj_BlueField_WhiteCheckmark")|![Required](_img/aml_proj_bluefield_whitecheckmark.png "AML_Proj_BlueField_WhiteCheckmark") Recommended|Only required to support basic dashboards| +|Reporting|||![Required](_img/aml_proj_bluefield_whitecheckmark.png "AML_Proj_BlueField_WhiteCheckmark")|![Required](_img/aml_proj_bluefield_whitecheckmark.png "AML_Proj_BlueField_WhiteCheckmark")| + + +To customize a process template, you customize one or more files associated with a functional area. While customizing any one object is fairly simple, you'll want to make sure that you don't break any interdependencies when you customize. The [ProcessTemplate.xml plug-in file](define-root-tasks-process-template-plug-in.md) defines which plug-ins to include in the template. This file contains all the task groups that you want to run to create a team project. Each task group references a subordinate XML plug-in file where the specific tasks for that plug-in are defined. + + +#### Teams, groups, permissions, & area and iteration paths +<ul style="padding-left:20px;font-size:90%"> + <li style="margin-bottom:2px">[Area and iteration paths](define-classification-plug-in.md)</li> + <li style="margin-bottom:2px">[Groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md)</li> + <li style="margin-bottom:2px">[Microsoft Project mapping file](../map-microsoft-project-fields-to-tf-fields.md)</li> +</ul> + +#### Work item tracking + <li style="margin-bottom:2px">[WIT definitions](add-wit-definitions-process-template.md)</li> + <li style="margin-bottom:2px">[Categories](add-type-wit-category-definitions-process-template.md)</li> + <li style="margin-bottom:2px">[Process configuration](../process-configuration-xml-element.md)</li> + <li style="margin-bottom:2px">[Link types](add-link-type-definitions-to-a-process-template.md)</li> + <li style="margin-bottom:2px">[Work items](add-work-item-instance-process-template.md) or [work item queries](add-work-item-queries-process-template.md)</li> +</ul> + + +#### Version control, build, lab and test management +<ul style="padding-left:20px;font-size:90%"> +<li style="margin-bottom:2px">[Group permissions](control-access-to-functional-areas.md)</li> +<li style="margin-bottom:2px">[Check-in policies](define-initial-configuration-version-control.md)</li> +<li style="margin-bottom:2px">[Test environments, configurations, resolution states, and settings](define-initial-configuration-test-manager.md)</li> +</ul> + +#### Reports and project portal +<ul style="padding-left:20px;font-size:90%"> +<li style="margin-bottom:2px">[Upload reports](add-reports-to-the-process-template.md)</li> +<li style="margin-bottom:2px">[Upload documents to the project portal](define-project-portal-plug-in.md)</li> +</ul> + + +Because the process template touches on many components of a team's process, you may want to plan, coordinate, and track the changes that you will make. In particular, you may want to check with project leads, test leads, development leads, and release managers before you change the default configuration of any one area. + + +### Plug-in dependencies +Many objects rely on the definition of other objects within a process template. + + For example, work item queries defined for the Agile process template use the iteration nodes that are defined in the Classification.xml file. If you change the iteration node definitions, you must modify the work item queries on which they rely. You can find these queries by searching for the following macros in the .wiq files: + +- Iteration 1 = @@Iteration%201@@ +- Iteration 2 = @@Iteration%202@@ +- Iteration 3 = @@Iteration%203@@ + +For an overview of required plug-ins and plug-in dependencies, see [Define dependencies for task groups and tasks](define-dependencies-plug-ins-groups-tasks.md). + +### Plug-in and naming restrictions +When you add objects to a process template, you will want to make sure that you label them correctly so that you avoid XML validation errors. + +- Restrictions are put on the names or labels of most Team Foundation objects. For an overview of naming restrictions that apply to process templates, security groups, area and iteration nodes, work item types, and work item fields, see [Naming restrictions](../../../reference/naming-restrictions.md). + +- Most process template components that you customize will affect only the team project that you create by using the process template. The exceptions to this rule are global lists, link types, and work item fields. These objects are defined for a team project collection. + +- Each work item field has an associated field reference name that uniquely identifies each field. The reference name cannot be changed after it is assigned. + + In addition, a work item field can have a reporting name that is assigned to it. The reporting name must match across all work item types that are defined for a team project collection. If they do not, validation errors might occur when you upload the process template, or conflicts might occur in the data warehouse databases. + + Work item field names, link type names, and global lists are scoped to a team project collection. If you customize any of these objects, the change will be reflected in all team projects that are defined in the collection and in the work item types that contain that work item field. + +- The maximum size of a process template is two gigabytes. When you customize a process template, make sure that your changes do not increase its size beyond that value. + + +<a name="pt_workflow"></a> +## Steps to customize a process template + Customizing a process template is an iterative process. You will need a team project collection that is defined on a server that is running Team Foundation Server where you can test your process template to make sure that it was customized correctly. + + To customize a process template, you first download an existing process template, modify or add files, upload the process template files, and then verify your changes. + + ![Process Template Customization Workflow](_img/tfs_pt_customflow.png "TFS_PT_CustomFlow") + +|Step|Task| +|----------|----------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|[Download a process template](../../guidance/manage-process-templates.md). Before you can customize a process template, you must download it to your local computer.<br /><br /> To minimize the modifications that you must make, [select a template](../../guidance/choose-process.md) that most closely matches your team processes. In general, you choose a process template based on types of work items and workflow.| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|**Modify or add files**. You customize a process template by modifying, deleting, or adding files that are defined for a process template. You customize a plug-in or definition file by modifying its XML content. Each plug-in file and type definition file must conform to its XML schema definition.<br /><br /> The first time that you customize a process template, make a small change. If you make many changes without a good understanding of how the changes may affect your template, you risk encountering multiple mistakes that will be difficult to debug.<br /><br /> Make sure that the name of your process template is unique. If you download a process template, make changes, and upload it, you must change its name or it will over-write the existing process template from the project collection.| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|[Upload a process template](../../guidance/manage-process-templates.md). After you have customized your template, upload it to the team project collection where you will create the team project.<br /><br /> Ideally, you should use a team project collection that is not used by other team projects. By working in a test-bed project collection, you avoid introducing a change that might collide with existing team processes that are still under development. Also, you will want the team project collection to support the same resources that you want team members to access, such as a project portal and a reporting site.<br /><br /> Make sure that the name of your process template is unique. If you downloaded a process template from a team project collection, made a change, and are now uploading the template, you must change its name or delete the existing process template from the team project collection.<br /><br /> The upload process performs a verification check to make sure that the XML is valid. If you receive any errors when you try to upload the process template, the changes that you made will have caused the error. Review your changes, and correct any XML syntax errors that you find.| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|[Create a team project](../../../accounts/create-team-project.md). To test new process templates, you must create a team project. You create a team project by accessing the New Team Project Wizard from Team Explorer.<br /><br /> If any errors occur, view the log for team project creation. It contains a list of the tasks that it tried to run and shows which tasks failed. You can map failed tasks back to the XML to determine the cause of the errors.<br /><br /> You can clean up unnecessary team projects by using the [TFSDeleteProject command-line tool](../../../accounts/delete-team-project.md).| +|![Step 5](_img/procguid_6.png "ProcGuid_6")|**Verify changes to process templates**. Before you put your process template in production mode and use it as the basis for several team projects, you should verify that it is well-defined. You perform this task by systematically verifying that each object and artifact works as expected.<br /><br /> If you added a report, make sure that it appears in Team Explorer. If you added a field, make sure that you didn't introduce any schema conflicts.| + +<a name="add_resources"></a> +##Related notes + +- [Process template and plug-in files](overview-process-template-files.md) +- [Configure features after an upgrade](../../customize/configure-features-after-upgrade.md) +- [Process template plug-ins: Index to XML elements](process-template-plug-ins-xml-elements-index.md) +- [XML element reference](../xml-element-reference.md) +- [Forum: Team Foundation Server – Process Templates](http://go.microsoft.com/fwlink/?LinkId=216461) + +Sometimes third parties make available process templates that they've created. You may need to do extra work after a TFS upgrade when using a process template provided by a third-party as described [Customize your work tracking experience, Maintenance and upgrade implications (TFS)](../../customize/on-premises-xml-process-model.md#before-you-customize). + + +### Required permissions +To download or upload process templates, you must either be a member of the **Project Collection Administrators** group, or your **Manage process template** permission must be set to **Allow**. See [Add accounts to administer project collections](../../../security/set-project-collection-level-permissions.md). + +### Tools that support customizing a process template +You can use any text editor or XML editor to modify XML files. Or, you can use the Process Editor which requires that you have installed a version of Visual Studio): +- For TFS 2017 and later versions, [install the TFS Process Template editor from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KarthikBalasubramanianMSFT.TFSProcessTemplateEditor). You can use this version of the Process Editor to modify the old-style work item forms. You can't use it to edit forms associated with the [new web forms](../../process/new-work-item-experience.md). +- For TFS 2015 and earlier versions, install [TFS Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power). + +Or, you can use the [TFS Team Project Manager](https://github.com/jelledruyts/TfsTeamProjectManager), an open-source client available from github. + +The Process Editor provides a user interface that you can use to customize the following areas: + +- **Work item tracking**: + - Create and edit WIT definitions, including adding fields, changing workflows, and modifying work item forms + - Add or edit categories for grouping work item types + - Edit the process configuration for Agile planning tools + - Create and edit work item queries, and organize queries into query folders + - Create and edit link types + +- **Project classifications and hierarchies**: + - Create and edit product area paths + - Create and edit milestone releases or iteration paths + - Modify the mapping file for Microsoft Project + +- **Security groups**: Create and edit TFS groups and their permissions + +- **Version control**: + + - Edit check-out settings + - Create and edit check-in notes + - Create and edit TFS groups and their permissions + +- **Portal and reports**: + - Review files to be uploaded and their folder structure + - Add files to be uploaded. + +You can't customize Office Excel reports and dashboards through the process template files. These artifacts are created for a team project depending on the selections that you make in the New Team Project wizard. For more information, see [Customizing TFS Project Portals](http://msdn.microsoft.com/80a9c78f-f495-4f54-99a1-b5e907afa319). + + + \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-classification-plug-in.md b/docs/work/reference/process-templates/define-classification-plug-in.md new file mode 100644 index 00000000000..b9bc51cd258 --- /dev/null +++ b/docs/work/reference/process-templates/define-classification-plug-in.md @@ -0,0 +1,209 @@ +--- +title: Define the classification plug-in +description: Define areas to organize work items into logical, physical, or functional categories-Team Foundation Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 7c1284c6-9c03-41e9-94c1-923db90957be +ms.author: kaelli +ms.manager: douge +ms.date: 09/08/2017 +--- + + +# Define the classification plug-in + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +Classifications facilitate tracking, grouping, and reporting on work based on useful categories, such as related product features and project milestones. You define areas to organize work items into logical, physical, or functional categories. You define iterations to group work items into milestones or time cycle categories. For example, a team could organize the product work into a client area, a server area, and an extensibility area. Iterations that you define determine how many times the team will repeat a particular set of major activities, such as plan, develop, and test. + +The classifications that you define appear on the **Areas** and **Iterations** pages, as the following illustration shows and described in [Set project-level area paths](../../customize/set-area-paths.md) and [Set project-level iteration paths](../../customize/set-iteration-paths-sprints.md). You access this page from the administration web portal. + +[!INCLUDE [temp](../../_shared/image-differences.md)] + +<img src="../../customize/_img/mareas-work-areas-admin-page.png" alt="Areas, defaults defined for team project" style="border: 2px solid #C3C3C3;" /> + +For an overview of using the web portal, see [Work in the web portal](../../../connect/work-web-portal.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json). + + After a team project has been created, you [modify the areas](../../customize/set-area-paths.md) and [iterations](../../customize/set-iteration-paths-sprints.md) from the web portal. You can also define permissions to control access to a project area or iteration. + + In addition to areas and iterations, you specify the mapping file for Microsoft Project to upload within the Classification plug-in and the process template property. + +<a name="name"></a> +##Classification plug-in name and location +The name of the file, folder, and plug-in are: + +**File name**: Classification.xml +**Folder name**: Classification +**Plug-in name**: Microsoft.ProjectCreationWizard.Classification + +> [!NOTE] +> You can change the names of the XML file and the folder but not the plug-in. TFS does not include a mechanism for the deployment of client-side plug-ins, policies, or other modifications. If you want to deploy this kind of functionality, you must use your own distribution and installation program. + +<a name="tasks"></a> +##Classification tasks and dependencies + The Classification plug-in file must conform to its schema definition, as specified in the Css.xsd file, and the plug-in must be specified in its own file. + + In the XML file, specify one or more tasks and their dependencies. In general, you only need one task to specify all the iterations and nodes that a team project requires. + +> [!NOTE] +> If you modify a process template's areas or iterations, make sure that you do not break any assignments that are used for work item queries or work items that are defined in the process template. For example, the Iteration1Backlog.wiq work item query for the Agile process template references Iteration 1. For more information, see [Add work item queries](add-work-item-queries-process-template.md). + +<a name="areas"></a> +##Specify the initial area paths +Specify the root node of areas by using the following syntax: + +> [!div class="tabbedCodeSnippets"] +```XML +<Node StructureType="ProjectModelHierarchy" Name="Area" xmlns=""> +``` + +Specify zero or more children nodes for as many areas as you want for your process. Use the `Node` element to specify each area and set the `StructureType` attribute to `ProjectModelHierarchy`. + +> [!div class="tabbedCodeSnippets"] +```XML +<Node StructureType="ProjectModelHierarchy" Name="NodeName" xmlns=""></Node> +``` + +The following example shows how to specify two areas, Client and Server: + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8" ?> +<tasks> + <task + id="UploadStructure" + name="Creating project structure" + plugin="Microsoft.ProjectCreationWizard.Classification" + completionMessage="Portfolio project structure created."> + <taskXml> + <Nodes> + <Node StructureType="ProjectModelHierarchy" Name="Teams" xmlns=""> + <Children> + <Node StructureType="ProjectModelHierarchy" Name="Client"></Node> + <Node StructureType="ProjectModelHierarchy" Name="Server"></Node> + </Children> + </Node> + </Nodes> + </taskXml> + </task> +</tasks> +``` + +<a name="iterations"></a> +##Specify the initial iteration paths + Specify the root node for iterations by using the following syntax: + +> [!div class="tabbedCodeSnippets"] +```XML +<Node StructureType="ProjectLifecycle" Name="NodeName" xmlns=""> +``` + +Specify zero or more children nodes for as many iterations as you want for your process. Use the **Node** element to specify each iteration and set the `StructureType` attribute to `ProjectLifecycle`. + +Default process templates don't specify any area nodes, but do specify iteration nodes, which are named Iteration 1, Iteration 2, and Iteration 3. The iteration nodes are referenced in the definition of work item queries, and the tasks are defined in the WorkItemTracking and Portal plug-ins. + +The following example shows how to specify four iterations: Milestone 1, Milestone 2, Beta, and RTM. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8" ?> +<tasks> + <task + id="UploadStructure" + name="Creating project structure" + plugin="Microsoft.ProjectCreationWizard.Classification" + completionMessage="Team project structure created."> + <taskXml> + <Nodes> + <Node StructureType="ProjectLifecycle" Name="Iteration" xmlns=""> + <Children> + <Node StructureType="ProjectLifecycle" Name="Sprint 1"></Node> + <Node StructureType="ProjectLifecycle" Name="Sprint 2"></Node> + <Node StructureType="ProjectLifecycle" Name="Sprint 3"></Node> + <Node StructureType="ProjectLifecycle" Name="Sprint 4"></Node> + </Children> + </Node> + </Nodes> + </taskXml> + </task> +</tasks> +``` + +## <a name="msproj"></a> Specifying process template properties + This section specifies two properties: the Project-to-TFS field mapping file and the process template. The mapping file specifies how fields in TFS map to fields defined in Project. The second property associates the process template with a unique value. The following example shows the syntax structure for this entry: + +> [!div class="tabbedCodeSnippets"] +```XML +<properties> + <property name="MSPROJ" + value="Classification\FileMapping.xml" + isFile="true" /> + <property name="Process Template" value="Agile"/> +</properties> +``` + + To customize the FileMapping.xml file, see [Map Microsoft Project fields](../map-microsoft-project-fields-to-tf-fields.md). + +## <a name="elements"></a> Classification plug-in element reference + You specify the following elements within a `taskXml` container element in the Classification plug-in file. , See [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md) for information about `taskXml`. + + Define areas and iterations by specifying a tree path of nested nodes and children nodes. For more information, see [Customize your area and iteration paths](../../customize/set-area-paths.md). + +<table> +<tr><th>Element</th><th>Description and syntax</th></tr> +<tbody valign="top"> +<tr> +<td><strong>Children</strong></td> +<td>Optional child element of **Node**. Contains the definitions for children areas or iterations.<br /> +<pre><code><Children /> + <Node> . . . </Node> +</Children> +</code></pre> +</td> +</tr> +<tr><td><strong>Node</strong></td> +<td>Optional child element of **Nodes** and **Children**. Defines the structure of the tree. Use `ProjectLifecycle` for iterations and `ProjectModelHierarchy` for areas. Node names should not exceed 255 characters. +<pre><code><Node StructureType="ProjectLifecycle | ProjectModelHierarchy" Name="NodeName"> + <Node> . . . </Node> + <Children> . . . </Children> +</Node> +</code></pre> +</td> +</tr> +<tr> +<td><strong>Nodes</strong></td> +<td>Required child element of **taskXml** for the Classification plug-in. Contains the area and iteration definitions. +<pre><code><Nodes> + <Node> . . . </Node> +</Nodes> +</code></pre> +</td></tr> +<tr> +<td><strong>properties</strong></td> +<td>Optional child element of **taskXml** for the Classification plug-in. +<pre><code><properties> + <property /> +</properties> +</code></pre> +</td></tr><tr> +<td><strong>property</strong> +</td> +<td> +Required child element of **properties**. Defines project-related data such as the XML mapping data for Microsoft Project. +<pre><code><property name="property name" value="Classification | FileName" isFile="true | false" /> +</code></pre> +<p>Where the following definitions apply for each attribute:</p> +<ul><li>`name`: Required. Defines the name of the property. The only valid names are `MSPROJ` and `Process Template`.</li> +<li>`value`: Required. For `MSPROJ`, defines the relative path to the field mapping file. For `Process Template`, contains the name of the process that's associated with the process template. This property is added to the classification file when you [import a process to VSTS](../../import-process/import-process.md).</li> +<li>`isFile`: Optional. Specifies whether the property is defined in a file. If the value is true, the file must exist, or process template validation fails.</li> +</ul> +</td> +</tr> +</tbody> +</table> + + +## Related notes +* [Set project-level area paths](../../customize/set-area-paths.md) +* [Set project-level iteration paths](../../customize/set-iteration-paths-sprints.md) + \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-dependencies-plug-ins-groups-tasks.md b/docs/work/reference/process-templates/define-dependencies-plug-ins-groups-tasks.md new file mode 100644 index 00000000000..3116e5d43d2 --- /dev/null +++ b/docs/work/reference/process-templates/define-dependencies-plug-ins-groups-tasks.md @@ -0,0 +1,93 @@ +--- +title: Define dependencies for task groups and tasks in plug-in files | VSTS & TFS +description: Adds a task group or a task to a plug-in file to correct the sequence and declare any dependencies that the group or task has on the successful completion of other task groups or tasks - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 235eaf03-7012-4c7d-8b16-138f3467a168 +ms.manager: douge +ms.author: kaelli +ms.date: 02/24/2017 +--- + + +# Define dependencies for task groups and tasks in plug-in files + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + + +When you add a task group or a task to a plug-in file, you must add them in the correct sequence and declare any dependencies that the group or task has on the successful completion of other task groups or tasks. A task can depend on other tasks, requiring other tasks to complete before primary task can run. For example, the task to create work item queries cannot run until all the tasks to create work item types have successfully completed. Therefore, the task to upload work item queries depends on the task to upload the types of work items. + +<a name="required"></a> +## Required plug-ins and plug-in dependencies + +The following illustration shows the dependent relationships that are defined for the Team Foundation Server (TFS) [process templates](../../guidance/choose-process.md). As the illustration shows, the plug-in for Work Item Tracking depends on the successful completion of the plug-in for Groups and Permissions, which depends on the successful completion of the plug-in for Classifications. The plug-ins for both Test Management and Version Control depend on the completion of the first three plug-ins. The plug-ins for Build, Lab, Reports, and Portal depend on the completion of the plug-in for Version Control. + + ![Process Template Plug-in Dependencies](_img/tfs_pt_dependencies.png "TFS_PT_Dependencies") + +> [!TIP] +> If you define your task groups and tasks in each plug-in file in the same order as their dependencies, you make reading the file and eliminating dependency problems easier. + +Dependencies can be used to indicate the order in which plug-ins run in the **New Team Project Wizard**. Some plug-ins are always dependent on other plug-ins. Also, not all plug-ins are required for a process template. + +The following table identifies which plug-ins depend on other plug-ins. Only the plug-in for Classifications is required. All other plug-ins are optional. For more information about each plug-in, see [Overview of process template files](overview-process-template-files.md). + +|**Plug-in**|**Dependent Plug-ins**| +|------------------|-----------------------------| +|Build|Groups, VersionControl| +|Classifications|None| +|Groups|Classifications| +|Lab|Build, Classifications, Groups, WorkItemTracking| +|Portal|Classifications, Reporting, VersionControl, and WorkItemTracking| +|Reporting|Classifications, VersionControl, and WorkItemTracking| +|TestManagement|Classifications, Groups, and WorkItemTracking| +|VersionControl|Classifications, Groups, and WorkItemTracking| +|WorkItemTracking|Classifications and Groups| + +<a name="task_group"></a> +## Define task group dependencies + Use the dependency element in tasks and groups to indicate when a dependency exists. The following example shows how to use the dependency element to specify that the WorkItemTracking task group depends on the Classification and Groups task groups. + +> [!div class="tabbedCodeSnippets"] +```XML +<group id="WorkItemTracking" description="Workitem definitions uploading." completionMessage="Workitem definitions uploaded."> + <dependencies> + <dependency groupId="Classification"/> + <dependency groupId="Groups"/> + </dependencies> + <taskList filename="WorkItem Tracking\WorkItems.xml"/> +</group> +``` + +> [!NOTE] +> The **groupId** element references the **id** element value in the other group. + +The following table describes the elements that you use to define task group dependencies. For more information about how to define task groups, see [Process template XML elements reference](process-template-xml-elements-reference.md). + +|Element| Description and syntax| +|-------------|-----------------| +|**dependencies**|Required child element of **group**. Specifies the other groups on which a group depends.<br />`<dependencies>`<br />   `<dependency>. . . </dependency>`<br />`</dependencies>`| +|**dependency**|Optional child element of **dependencies**. Specifies the ID of another task group on which this group depends. The other group must complete its tasks before this task group can start.<br /> `<dependency groupId="groupId" />`| + +<a name="task"></a> +## Defining task dependencies + The following example shows how to use the **dependency** element to specify that the WorkItems task depends on the task with an ID of "WITs." + +> [!div class="tabbedCodeSnippets"] +```XML +<task id="WIs" name="WorkItems" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work items uploaded" completionDescription="Processing the actual work items used by work item tracking"> + <dependencies> + <dependency taskId="WITs" /> + </dependencies> +``` + + The following table describes the elements that you use to define task dependencies. For more information about how to define tasks, see [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md). + +|Element|Description and syntax| +|-------------|------------| +|**dependencies**|Optional child element of **task**. Specifies the other tasks on which a task depends.<br /> `<dependencies>`<br />   `<dependency>. . . </dependency>`<br />`</dependencies>`| +|**dependency**|Optional child element of **dependencies**. Specifies the ID of another task on which this task depends. The other task must complete its tasks before this task can start.<br />`<dependency taskId="taskId" />`| + +## Related notes +- [Customize a process](customize-process.md) +- [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md) +- [Define the root tasks](define-root-tasks-process-template-plug-in.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-groups-teams-permissions-plug-in.md b/docs/work/reference/process-templates/define-groups-teams-permissions-plug-in.md new file mode 100644 index 00000000000..8851a9feaf6 --- /dev/null +++ b/docs/work/reference/process-templates/define-groups-teams-permissions-plug-in.md @@ -0,0 +1,198 @@ +--- +title: Define groups, teams, and permissions using the Groups and Permissions Plug-in | VSTS & TFS +description: Customizes Groups and Permission plug-in to have access to groups, teams, add groups and users as members to groups, and grant permissions to the groups - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 322a80cc-0396-43d7-8be3-63d5cce058d3 +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + +# Define groups, teams, and permissions using the Groups and Permissions Plug-in + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can define security groups to control access to functional areas within a team project. In addition to the [default security groups](../../../security/permissions.md), you can configure a team project's initial groups, group members, and security permissions by customizing the Groups and Permissions plug-in. With this plug-in, you can define groups, teams, add groups and users as members to groups, and grant permissions to the groups. + +This topic describes the syntax structure of the **groups**, **iterationPath**, **members**, **permissions**, and **teamsettings** elements that are used in the file for the Groups and Permissions plug-in. For more information about how to use these elements, see [Configure initial groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md). + +<a name="name"></a> +##Name and location of Groups plug-in +The Groups and Permission plug-in is defined by the GroupsandPermissions.xml plug-in file, which must conform to the schema definition that is defined in the Gss.xsd file. + +The file, folder, and plug-in names are: + +**File name**: GroupsandPermissions.xml +**Folder name**: Groups and Permissions +**Plug-in name**:| Microsoft.ProjectCreationWizard.Groups + +> [!NOTE] +> You can change the names of the XML file and the folder but not the plug-in. TFS doesn't include a mechanism for the deployment of client-side plug-ins, policies, or other modifications. If you want to deploy this kind of functionality, you must use your own distribution and installation program. + + In the Groups and Permissions plug-in, you specify one or more tasks and their dependencies within the `taskXml` element. Generally, you specify one task per security group to create for your process. For more information about how to specify tasks, see [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md). + +<a name="groups"></a> +##Define groups + You use the **group** element to specify a new security group in Team Foundation Server. + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="GroupName" description="GroupDescription"></group> +``` + +The following example shows how to create a group that is named Reader: + +> [!div class="tabbedCodeSnippets"] +```XML +<task id="GroupCreation1" + name="Create Groups and Permissions" + plugin="Microsoft.ProjectCreationWizard.Groups" + completionMessage="Groups and Permissions created."> + <taskXml> + <groups> + <group name="Readers" + description="A group for users who have read access across the project"> + <permissions> + <!-- permissions --> + </permissions> + </group> + </groups> + </taskXml> +</task> +``` + +<a name="members"></a> +##Define members + You use the **member** element to assign a group as a member of a security group in Team Foundation Server. + +> [!div class="tabbedCodeSnippets"] +```XML +<member name="MemberName" ></member> +``` + +> [!NOTE] +> A group that is a team (**isTeam="true"**) can't be a member of a group. Also, the **permissions** container element must precede the **members** container element. + + The following example shows how to add TestGroup1 as a member of TestGroup2. + +> [!div class="tabbedCodeSnippets"] +```XML +<task id="GroupCreation1" + <taskXml> + <groups> + <group name="TestGroup1" description="Test group 1. Contains no members out of the box."> + <permissions> + <permission name="GENERIC_READ" class="PROJECT" allow="true" /> + </permissions> + </group> + <group name="TestGroup2" description="Test group 2. Contains TestGroup1 and Project Administrators."> + <permissions> + <permission name="GENERIC_READ" class="PROJECT" allow="true" /> + </permissions> + <members> + <member name="TestGroup1" /> + <member name="$$PROJECTADMINGROUP$$" /> + </members> + </group> + </groups> + </taskXml> +</task> +``` + +<a name="team_settings"></a> +##Define teams and team settings + Within the default Groups and Permissions plug-in file, the `@defaultTeam` macro creates the default team at the root area path. You can change this structure by including additional area paths within the Classification plug-in file. By using the **teamsettings** element, you can pre-configure the iterations assigned to a team. The plug-in uses the following code snippet. In this example, three iterations are defined for the default team. + +> [!IMPORTANT] +> You must assign iteration paths that correspond to paths defined in the Classification plug-in file. See [Define initial areas, iterations, and Project mapping file](define-classification-plug-in.md). + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="@defaultTeam"> +   <permissions> +      <permission name="GENERIC_READ" class="PROJECT" allow="true" /> +   </permissions> +   <members> +      <member name="@creator"/> +   </members> +   <teamSettings areaPath="Area"> +      <iterationPaths backlogPath="Iteration"> +         <iterationPath path="Iteration 1" /> +         <iterationPath path="Iteration 2" /> +         <iterationPath path="Iteration 3" /> +      </iterationPaths> +   </teamSettings> +</group> +``` + + You can also define additional teams within a team project. You do this by defining a group and assigning the `isTeam` attribute to `true`. The following example shows how to define a team and its permissions, members, and initial sprint assignments. Specify the default team settings for a team project. + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="Dream Team" isTeam="true" description="Next generation work"> + <permissions> + <permission name="GENERIC_READ" class="PROJECT" allow="true" /> + </permissions> + <members> + <member name="@creator"/> + </members> +   <teamSettings areaPath="Area"> +      <iterationPaths backlogPath="Iteration"> +         <iterationPath path="Iteration 1" /> +         <iterationPath path="Iteration 2" /> +         <iterationPath path="Iteration 3" /> +      </iterationPaths> +   </teamSettings> +</group> +``` + +<a name="permissions"></a> +##Define permissions +You must specify permissions for each group that you create. You use the **permission** element for this purpose. + +> [!div class="tabbedCodeSnippets"] +```XML +<permission name="PermissionName" class="ClassName" allow="true | false"/> +``` + + The following example shows how to grant permissions to the Reader security group so that members can view information about a team project, but they cannot modify that information. + +> [!div class="tabbedCodeSnippets"] +```XML +<group name="Readers" description="A group for users who have read access across the project"> + <permissions> + <permission name="GENERIC_READ" class="PROJECT" allow="true" /> + <permission name="GENERIC_READ" class="CSS_NODE" allow="true" /> + <permission name="WORK_ITEM_READ" class="CSS_NODE" allow="true" /> + </permissions> +</group> +``` + +<a name="elements"></a> +##Groups element reference + The following table describes the elements that you use to define the initial groups and permissions for a team project. You specify these elements within a `taskXml` container element in the Groups and Permissions plug-in file. For information about this element, see [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md). + +> [!WARNING] +> The Gss.xsd schema file does not define the `property` or `properties` elements. When you upload the process template, the Process Template Manager validates these elements before storing them. +> +> The `groups` and `group` (Groups and Permission) elements are distinct from the `groups` and `group` (Process Template) elements. For information on the latter pair of elements, see [Process template XML elements reference](process-template-xml-elements-reference.md). + +|Element|Description and syntax| +|-------------|-----------------| +|**group**|Optional child element of **groups** and **Children**. Defines a group or a team and its permissions and members.<br />`<group name="GroupName" isTeam="true | false" description="GroupDescription"> <permissions> . . . </permissions> <members> . . . </members> </group>`<br />The following definitions apply for each attribute:<br />- `name`: Required. Specifies the name of the group. The name of the group must be 1 to 255 characters long.<br />- `isTeam`: Optional. Identifies the group as a team, which supports small groups to organize their work within a team project.<br />- `description`: Required when the group is not a team. Specifies a description of the group. The description is displayed within the security pages of Team Web Access.| +|**groups**|Required child element of **taskXml** for the Groups and Permissions plug-in. Contains the group and permission definitions.<br />`<groups>`<br />   `<group> . . . </group>`<br />`</groups>`| +|**iterationPath**|Required child element of **iterationPaths**. Specifies a team milestone.<br /> `<iterationPath path="IterationName" />`| +|**iterationPaths**|Optional child element of **teamsettings**. Specifies team milestones.<br />`<iterationPaths backlogPath="BacklogPathName">`<br />   `. . .`<br />`</iterationPaths>`| +|**member**|Required child element of **members**. Specifies the name of a group that you are adding as a member of another group. You can create groups and automatically populate them with TFS default groups, previously defined project groups, and groups and users in Active Directory.<br />`<member name="MemberName" >`<br />`</member>`<br />For information about how to specify default groups, see [Group macros and default groups](configure-initial-groups-teams-members-permissions.md#group-macros).| +|**members**|Optional child element of **group** and specifies the collection of members to add to the group. The **members** container element must follow the **permissions** container element.<br />`<members>`<br />   `<member> . . . </member>`<br />`</members>`| +|**permission**|Required child element of **permissions**. Specifies the permission to apply to the group.<br />`<permission name="PermissionName" class="ClassName" allow="true | false" />`<br /> Where the following definitions apply for each attribute:<br />- `name`: Required. Specifies the name of the permission. For more information, see the table in [Configure initial groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md) that describes each class and name combination you can specify as a permission.<br />- `class`: Required. Identifies the class, or area, where the group permission is granted. The following values are valid: `NAMESPACE` (collection-level), `PROJECT` (project-level), `CSS_NODE` (area node) and `ITERATION_NODE` (iteration node).<br />- `allow`: Optional. Specifies a true or false value that indicates whether you are allowing the permission.| +|**permissions**|Required child element of **group** and specifies the collection of permissions to apply to the group. The **permissions** container element must precede the **members** container element.<br />`<permissions>`<br />   ` <permission> . . . </permissions>`<br />`</permissions >`| +|**teamsettings**|Optional child element of **group**. Configures the team project as the default team, and optionally specifies team milestones with the **iterationPath** element. <br /> `<teamSettings areaPath="Area">`<br />   `. . .`<br />`</teamSettings>`| + +## Related notes +- [Configure initial groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md) +- [Control access to functional areas](control-access-to-functional-areas.md) +- [Apply a field rule](../apply-rule-work-item-field.md) +- [Set up groups for use in TFS deployments](../../../tfs-server/admin/setup-ad-groups.md) +- [Customize a process](customize-process.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-initial-configuration-build.md b/docs/work/reference/process-templates/define-initial-configuration-build.md new file mode 100644 index 00000000000..6ae99a56b22 --- /dev/null +++ b/docs/work/reference/process-templates/define-initial-configuration-build.md @@ -0,0 +1,59 @@ +--- +title: Define the initial configuration of Team Foundation Build | VSTS & TFS +description: Customize the security permissions for build activities of all team projects that are created with the same process template - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 93d86d59-dd49-43de-9bab-f4a9e17071a1 +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + + +# Define the initial configuration of Team Foundation Build + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can customize a team project's initial build permissions that are used by Team Foundation Build. The build.xml plug-in file specifies the security permissions for build activities of all team projects that are created with the same process template. The following template files are uploaded to the team project database: + +> [!NOTE] +> Starting with TFS 2013, the build.xml plug-in no longer uploads build template files. + + +The names of the file, the folder, and the plug-in for the default process templates are as follows: + +**File name**: Build.xml +**Folder name**: Build +**Plug-in name**: Microsoft.ProjectCreationWizard.Build + + +> [!NOTE] +> You can change the name of the XML file and the folder name but not the name of the plug-in. The system doesn't include a mechanism for the deployment of client-side plug-ins, policies, or other modifications. If you want to deploy this kind of functionality, you must use your own distribution and installation program. + + In the Build.xml file, you specify one or more tasks and their dependencies. The TSF plug-in file specifies the permissions that are assigned to specific TFS default groups. For information about how to customize the initial security configuration for Lab Management, see [Control access to functional areas](control-access-to-functional-areas.md). For more information about the **task**, **taskXml**, and **dependency** elements, see [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md) and [Define dependencies for task groups and tasks](define-dependencies-plug-ins-groups-tasks.md). + + The following code represents the default build.xml file that is defined for the TFS process templates: + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<tasks> + <task id="BuildTask" name="Add Build Permissions" plugin="Microsoft.ProjectCreationWizard.Build" completionMessage="Build tasks completed."> + <dependencies /> + <taskXml> + <!-- Project-level groups --> + <Permission allow="ViewBuilds, ViewBuildDefinition" identity="[$$PROJECTNAME$$]\Readers" /> + <Permission allow="EditBuildQuality, ViewBuilds, QueueBuilds, ViewBuildDefinition" identity="[$$PROJECTNAME$$]\Contributors" /> + <Permission allow="DeleteBuilds, DestroyBuilds, EditBuildQuality, ManageBuildQualities, RetainIndefinitely, ViewBuilds, ManageBuildQueue, QueueBuilds, StopBuilds, DeleteBuildDefinition, EditBuildDefinition, ViewBuildDefinition, AdministerBuildPermissions" identity="[$$PROJECTNAME$$]\Build Administrators" /> + <Permission allow="DeleteBuilds, DestroyBuilds, EditBuildQuality, ManageBuildQualities, RetainIndefinitely, ViewBuilds, ManageBuildQueue, QueueBuilds, StopBuilds, DeleteBuildDefinition, EditBuildDefinition, ViewBuildDefinition, AdministerBuildPermissions" identity="[$$PROJECTNAME$$]\$$PROJECTADMINGROUP$$" /> + <!-- Collection-level groups --> + <Permission allow="EditBuildQuality, ManageBuildQueue, OverrideBuildCheckInValidation, QueueBuilds, UpdateBuildInformation, ViewBuildDefinition, ViewBuilds" identity="$$PROJECTCOLLECTIONBUILDSERVICESGROUP$$" /> + <Permission allow="ViewBuildDefinition, EditBuildDefinition, DeleteBuildDefinition, QueueBuilds, ManageBuildQueue, StopBuilds, ViewBuilds, EditBuildQuality, RetainIndefinitely, DeleteBuilds, ManageBuildQualities, DestroyBuilds, AdministerBuildPermissions" identity="$$PROJECTCOLLECTIONBUILDADMINSGROUP$$" /> + <Permission allow="DeleteBuilds, DestroyBuilds, EditBuildQuality, ManageBuildQualities, RetainIndefinitely, ViewBuilds, ManageBuildQueue, QueueBuilds, StopBuilds, DeleteBuildDefinition, EditBuildDefinition, ViewBuildDefinition, AdministerBuildPermissions, OverrideBuildCheckInValidation" identity="$$PROJECTCOLLECTIONADMINGROUP$$" /> + </taskXml> + </task> +</tasks> +``` + +## Related notes +- [Control access to functional areas](control-access-to-functional-areas.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-initial-configuration-lab-management.md b/docs/work/reference/process-templates/define-initial-configuration-lab-management.md new file mode 100644 index 00000000000..dc09e50b3b9 --- /dev/null +++ b/docs/work/reference/process-templates/define-initial-configuration-lab-management.md @@ -0,0 +1,52 @@ +--- +title: Define the initial configuration of Lab Management | VSTS & TFS +description: Customizes the team project's initial security configuration for activities that are performed by using Visual Studio Lab Management - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: cd34554f-1ab8-450d-b997-942e7a2352cf +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + + +# Define the initial configuration of Lab Management + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can customize a team project's initial security configuration for activities that are performed by using Visual Studio Lab Management. The lab.xml plug-in file specifies the security permissions for lab management activities of all team projects that are created with the same process template. It also specifies the task to upload the default template file for Lab Management, which is named LabDefaultTemplate.xaml. This file is uploaded to the database for the team project. + +The names of the file, the folder, and the plug-in for the default process templates are as follows: + +**File name**: Lab.xml +**Folder name**: Lab +**Plug-in name**: Microsoft.ProjectCreationWizard.Lab + +> [!NOTE] +> You can change the name of the XML file and the folder name but not the name of the plug-in. The system doesn't include a mechanism for the deployment of client-side plug-ins, policies, or other modifications. If you want to deploy this kind of functionality, you must use your own distribution and installation program. + + In the Lab.xml file, you specify one or more tasks and their dependencies. The plug-in file specifies one task, which uploads the lab management file, and the permissions that are assigned to specific default groups for Team Foundation. To customize the initial security configuration for Lab Management, see [Control access to functional areas](control-access-to-functional-areas.md). For more information about the **task**, **taskXml**, and **dependency** elements, see [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md) and [Define dependencies for task groups and tasks](define-dependencies-plug-ins-groups-tasks.md). + + The following code represents the default lab.xml file that is defined for the default process templates: + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<tasks> + <task id="LabTask" name="Create Lab area" plugin="Microsoft.ProjectCreationWizard.Lab" completionMessage="Lab Task completed."> + <dependencies /> + <taskXml> + <ProcessTemplate Type="Custom" Filename="Lab\Templates\LabDefaultTemplate.xaml" Description="This is the default Lab process template for this Team Project." ServerPath="$/$$PROJECTNAME$$/BuildProcessTemplates" /> + <permission allow="Read, Create, Write, Edit, Delete, ManagePermissions, ManageChildPermissions, Start, Stop, ManageSnapshots, Pause, ManageLocation, DeleteLocation" identity="$$PROJECTCOLLECTIONADMINGROUP$$" /> + <permission allow="Read, Create, Write, Edit, Delete, ManageChildPermissions, Start, Stop, ManageSnapshots, Pause, ManageLocation, DeleteLocation" identity="[$$PROJECTNAME$$]\$$PROJECTADMINGROUP$$" /> + <permission allow="Read, Create, Write, Edit, Start, Stop, ManageSnapshots, Pause" identity="[$$PROJECTNAME$$]\@@Contributors@@" /> + <permission allow="Read" identity="[$$PROJECTNAME$$]\@@Readers@@" /> + <permission allow="Read, Write, Edit, Start, Stop, ManageSnapshots, Pause" identity="$$BUILDSERVICEGROUP$$" /> + </taskXml> + </task> +</tasks> +``` + +## Related notes +- [Configure and administer Lab Management](https://msdn.microsoft.com/en-us/library/dd936084.aspx) +- [Control access to functional areas](control-access-to-functional-areas.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-initial-configuration-test-manager.md b/docs/work/reference/process-templates/define-initial-configuration-test-manager.md new file mode 100644 index 00000000000..f036c21344a --- /dev/null +++ b/docs/work/reference/process-templates/define-initial-configuration-test-manager.md @@ -0,0 +1,215 @@ +--- +title: Define the initial configuration of Test Manager | VSTS & TFS +description: Use the plug-in for Microsoft Test Manager to define the team project's initial test management setup - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: a72625e1-afa2-4707-9a20-bb7927a0aeaf +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + + +# Define the initial configuration of Test Manager + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +By using the plug-in for Microsoft Test Manager, you can define a team project's initial test management setup. You can define settings such as test variables and test configurations that combine test variables. For example, you can define the hardware platform, the operating system, the browser version, or another type of hardware or software to be used for testing, and then you can define test configurations that combine these variables. In addition, you can customize the default test settings and the list of valid test resolution states. After you create a team project, you can modify each test configuration through Microsoft Test Manager except for test resolution states. + + The test management plug-in file is provided with the default process templates. Microsoft Test Manager is available with Visual Studio Ultimate (2015), Visual Studio Enterprise, and Visual Studio Test Professional. For more information, see [Testing overview](../../../manual-test/index.md). + +> [!NOTE] +> You can customize the initial security configuration for test activities by assigning them in the GroupsandPermissions.xml plug-in file. For more information, see [Configure initial groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md). + +The names of the file, the folder, and the plug-in for the default process templates are as follows: + +**File name**: testmanagement.xml +**Folder name**: Test Management +**Plug-in name**: Microsoft.ProjectCreationWizard.TestManagement + + +> [!NOTE] +> You can change the name of the XML file and the folder name but not the name of the plug-in. The system doesn't include a mechanism for the deployment of client-side plug-ins, policies, or other modifications. If you want to deploy plug-ins, policies, or other modifications to Team Explorer, you must use your own distribution and installation program. + +<a name="Tasks"></a> +## Test Management tasks and dependencies + In the testmanagement.xml file, you specify one or more tasks and their dependencies. The plug-in file specifies four tasks, and each task uploads a test management file. The testconfiguration.xml file depends on the information that is specified in the testvariable.xml file. For more information about the **task**, **taskXml**, and **dependency** elements, see [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md) and [Define dependencies for task groups and tasks](define-dependencies-plug-ins-groups-tasks.md). + + The following syntax represents the default testmanagement.xml file that is defined for the default process templates: + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<tasks> + <task id="TestVariable" name="Default test variables" plugin="Microsoft.ProjectCreationWizard.TestManagement" completionMessage="Default test variables created"> + <taskXml> + <TestVariables fileName="Test Management\TestVariable.xml" /> + </taskXml> + </task> + <task id="TestConfiguration" name="Default test configurations" plugin="Microsoft.ProjectCreationWizard.TestManagement" completionMessage="Default test configurations created"> + <dependencies> + <dependency taskId="TestVariable" /> + </dependencies> + <taskXml> + <TestConfigurations fileName="Test Management\TestConfiguration.xml" /> + </taskXml> + </task> + <task id="TestSettings" name="Default test settings" plugin="Microsoft.ProjectCreationWizard.TestManagement" completionMessage="Default test settings created"> + <taskXml> + <TestSettings fileName="Test Management\TestSettings.xml" /> + </taskXml> + </task> + <task id="TestResolutionState" name="Default test resolution states" plugin="Microsoft.ProjectCreationWizard.TestManagement" completionMessage="Default test resolution states created"> + <taskXml> + <TestResolutionStates fileName="Test Management\TestResolutionState.xml" /> + </taskXml> + </task> +</tasks> +``` + +<a name="TestEnvironments"></a> +## Define test configuration variables + You use the **TestVariable** and **AllowedValue** elements to define test configuration variables. You can define any number of test configuration variables and their valid values. The following values are defined in the testvariable.xml file in the default process templates: + +- Operating systems: + - Windows Vista + - Windows XP + +- Default browsers: + - Internet Explorer 7.0 + - Internet Explorer 8.0 + - Firefox 3.0 + + After the project is created, you can modify these variables and create other variables. For more information, see [Test configurations: specifying test platforms](../../../manual-test/test-different-configurations.md). + + The **TestVariable** element must be encapsulated within its corresponding container element: **TestVariables**. You use the following syntax structure for these elements: + +> [!div class="tabbedCodeSnippets"] +```XML +<TestVariables> + <TestVariable name="VariableName" name="Operating System" description="Description of VariableName"> + <AllowedValue value ="Name of Allowed Value"/> + </TestVariable> +</TestVariables> +``` + + You use the following syntax for the test variables that are defined in the default process templates: + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8" ?> +<TestVariables> + <TestVariable + name="Operating System" description="Default operating systems"> + <AllowedValue value ="Windows 8" /> + <AllowedValue value ="Windows 7" /> + <AllowedValue value ="Windows Vista" /> + <AllowedValue value ="Windows XP" /> + </TestVariable> + <TestVariable + name="Browser" description="Default browsers"> + <AllowedValue value ="Internet Explorer 9.0" /> + <AllowedValue value ="Internet Explorer 8.0" /> + <AllowedValue value ="Internet Explorer 7.0" /> + <AllowedValue value ="FireFox 3.0" /> + <AllowedValue value ="Internet Explorer 10.0" /> + </TestVariable> +</TestVariables> +``` + +<a name="TestConfigurations"></a> +## Define test configurations + You use the **TestConfiguration** and **TestVariable** elements to define test configurations that combine one or more test configuration variables. One default configuration is defined in the testconfiguration.xml file: Windows Vista and Internet Explorer 7.0. After the project is created, you can delete these configurations and create other configurations. For more information, see [Test configurations: specifying test platforms](../../../manual-test/test-different-configurations.md). + + You must enscapsulate the **TestConfiguration** element within its corresponding container element: **TestConfigurations**. You use the following syntax structure for these elements: + +> [!div class="tabbedCodeSnippets"] +```XML +<TestConfigurations> + <TestConfiguration name="Test Configuration Name" description=" Test Configuration Description " state="active" isdefault="true | false"> + <TestVariable name="VariableName" value="Variable Value" /> + <TestVariable name="VariableName" value="Variable Value" /> + </TestConfiguration> +</TestConfigurations> +``` + + The following table describes the attributes for the **TestConfiguration** element. + +|**Attribute**|**Description**| +|-------------------|---------------------| +|state|Identifies the test configuration as active or inactive.| +|isdefault|Identifies the test configuration as a default configuration.| + + You use the following syntax for the test configurations that are defined in the default process templates. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8" ?> +<TestConfigurations> + <TestConfiguration name="Windows 8" + description="Default operating system for testing" state="active" isdefault="true"> + <TestVariable + name="Operating System" value="Windows 8" /> + </TestConfiguration> +</TestConfigurations> +``` + +<a name="ResolutionStates"></a> +## Define test resolution states + +You use the **TestResolutionState** element to specify the reasons why a test failed. The following states are defined in the testresolutionstate.xml: Needs investigation, Test issue, Product issue, and Configuration issue. + +> [!NOTE] +> For on-premises TFS, you can change the resolution states using the [tcm command line tool](../witadmin/tcm-customize-manage-test-experience.md). + +You must encapsulate the **TestResolutionState** element within its corresponding container element: **TestResolutionStates**. + +You use the following syntax structure for these elements: + +> [!div class="tabbedCodeSnippets"] +```XML +<TestResolutionStates> + <TestResolutionState name="ResolutionName" /> +</TestResolutionStates> +``` + +You use the following syntax for the resolution states that are defined in the default process templates. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8" ?> +<TestResolutionStates> + <TestResolutionState name="Needs investigation" /> + <TestResolutionState name="Test issue" /> + <TestResolutionState name="Product issue" /> + <TestResolutionState name="Configuration issue" /> +</TestResolutionStates> +``` + +<a name="TestSettings"></a> +## Define the default test settings for a local test run + +You use the **TestSetting** element to specify the name of the file to use when a test is run. The following file is defined in the testsettings.xml: localrun.testsettings. For more information, see [Setting Up Test Machines to Run Tests or Collect Data](https://msdn.microsoft.com/library/dd293551.aspx). + +You must encapsulate the **TestSetting** element within its corresponding container element: **TestSettings**. You use the following syntax structure for these elements: + +> [!div class="tabbedCodeSnippets"] +```XML +<TestSettings> + <TestSetting name="Name of Test Setting " filename="FileName" /> +</TestSettings> +``` + + You use the following syntax for the testsettings.xml file that is defined in the default process templates. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8" ?> +<TestSettings> + <TestSetting name="Local Test Run" filename="localrun.testsettings" /> +</TestSettings> +``` + +## Related notes +- [Testing overview](../../../manual-test/index.md) +- [Customize and manage the test experience](../witadmin/tcm-customize-manage-test-experience.md) diff --git a/docs/work/reference/process-templates/define-initial-configuration-version-control.md b/docs/work/reference/process-templates/define-initial-configuration-version-control.md new file mode 100644 index 00000000000..c24ff8b1470 --- /dev/null +++ b/docs/work/reference/process-templates/define-initial-configuration-version-control.md @@ -0,0 +1,103 @@ +--- +title: Define the initial configuration of Team Foundation version control | VSTS & TFS +description: Use the plug-in for version control to configure the team project's initial security permissions, check-out policies, and check-in notes - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: a7dff64f-4bb7-4083-bcf5-12d70e4915ea +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + + +# Define the initial configuration of Team Foundation version control + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +By using the plug-in for version control, you can configure a team project's initial security permissions, check-out policies, and check-in notes. + + In the XML file, you specify one or more tasks and their dependencies. Generally, you need only one task to configure settings for version control. For an example of a task that specifies these settings, see the VersionControl.xml file that is defined for the default process templates. + +The names of the file, the folder, and the plug-in for the default process templates are as follows: + +**File name**: VersionControl.xml +**Folder name**: Version Control +**Plug-in name**: Microsoft.ProjectCreationWizard.VersionControl + +> [!NOTE] +> You can change the name of the XML file and the folder name but not the name of the plug-in. The system doesn't include a mechanism for the deployment of client-side plug-ins, policies, or other modifications. If you want to deploy this kind of functionality, you must use your own distribution and installation program. + +## <a name="Exclusive"></a> Exclusive Check Out + You can control whether multiple people can check out a file at the same time by specifying the **exclusive_checkout** element. + + +> [!div class="tabbedCodeSnippets"] +```XML +<exclusive_checkout required=""/> +``` + + If the **required** attribute is set to **true**, only one person can check out a file at a time. If this attribute set to **false**, multiple people can check out a file at the same time, and they must reconcile changes when they check in the file. + + The following example shows how to require exclusive check-out: + +> [!div class="tabbedCodeSnippets"] +```XML +<exclusive_checkout required="true"/> +``` + +## <a name="Latest"></a> Get Latest on Check Out + You use the **get_latest_on_checkout** element to configure the default behavior when a user checks out a file for a team project. + +> [!div class="tabbedCodeSnippets"] +```XML +<get_latest_on_checkout required=""/> +``` + + If the **required** attribute is set to **true**, the most recent version of an item, or tip, is downloaded every time that a user checks it out. This behavior resembles the check-out behavior in Visual SourceSafe. + + If the **required** attribute is set to **false**, the check-out operation will check out the local version in your workspace. By default, this attribute is set to false. + + The following example shows how to specify that the default check-out behavior is to get the most recent version of an item when a user checks it out. + +> [!div class="tabbedCodeSnippets"] +```XML +<get_latest_on_checkout required="true"/> +``` + +## <a name="Notes"></a> Check-in Notes + The developer provides check-in notes when he or she checks in code. These notes describe whether the code changes are related to team processes and, if they are, how. For example, a check-in note can indicate whether the change was made because of a security review, and the note can include details about the changes relative to the security review. + + You use the following syntax for a checkin_note element + +> [!div class="tabbedCodeSnippets"] +```XML +<checkin_note label="" required="" order=""/> +``` + + The following table describes the attributes of the checkin_note element. + +|**Attribute**|**Description**| +|-------------------|---------------------| +|label|The label that describes the check-in note. The label appears in the **Pending Check-ins** dialog box when a user checks in a change.| +|required|Specifies whether the check-in note is required to have a value. If this attribute is set to true, the check-in note must have a value. If this attribute is set to false, a value is optional.| +|order|Specifies an ordinal number to indicate in what order to display the check-in notes. This attribute is optional.| + +The following example shows how to create an additional check-in note labeled "Documentation Impact" which isn't required to have a value. + +> [!div class="tabbedCodeSnippets"] +```XML +<taskXml> + <checkin_note label="Code Reviewer" required="false" order="1"/> + <checkin_note label="Security Reviewer" required="false" order="2"/> + <checkin_note label="Performance Reviewer" required="false" order="3"/> + <checkin_note label="Documentation Impact" required="false"/> +</taskXml> +``` + +<a name="Permissions"></a> +## Permissions +Version control has a specific set of permissions that you can configure for a process template. By specifying permissions, you define what actions security groups and individuals can perform on items that are under version control. For more information, see [Control access to functional areas](control-access-to-functional-areas.md). + +## Related notes +- [Configure initial groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md) +- [Code](../../../git/overview.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-objects-track-work-items-plug-in.md b/docs/work/reference/process-templates/define-objects-track-work-items-plug-in.md new file mode 100644 index 00000000000..956616754a0 --- /dev/null +++ b/docs/work/reference/process-templates/define-objects-track-work-items-plug-in.md @@ -0,0 +1,124 @@ +--- +title: Define objects for tracking work items using the work Item tracking plug-in | VSTS & TFS +description: Use the plug-in for tracking work items and defining a team project's initial objects for tracking work - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 6d6103d6-2558-460c-b022-9eda2ffe4023 +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + +# Define objects for tracking work items using the work Item tracking plug-in + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +By using the plug-in for tracking work items, you define a team project's initial objects for tracking work. These objects include types of work items, work item queries, categories, link types, and instances of work items. After you create a team project, you can modify these objects by using the **witadmin** command-line tool. + + In the plug-in file, you specify one or more tasks and their dependencies. In general, you specify one task for each major upload activity, such as link types, work item types, queries, and categories. + +> [!IMPORTANT] +> You must specify the tasks to upload files and define queries in a specific sequence: link types first, then work item types, and then queries. Each definition file for these objects depends on the definitions that are specified in the tasks that precede them. In general, you should maintain the task sequence that is defined in the process template that you are customizing. For more information, see [Define dependencies for task groups and tasks](define-dependencies-plug-ins-groups-tasks.md). + +<a name="plugin"></a> +##Plug-in name and location + +The names of the file, the folder, and the plug-in for the default process templates are as follows: + +**File name**: WorkItems.xml +**Folder name**: WorkItem Tracking folder +**Plug-in name**: Microsoft.ProjectCreationWizard.WorkItemTracking + + +> [!NOTE] +> You can change the name of the XML file and the folder name but not the name of the plug-in. The system doesn't include a mechanism for the deployment of client-side plug-ins, policies, or other modifications. If you want to deploy this kind of functionality, you must use your own distribution and installation program. + + For specific information about each type of object that you can define, see one of the following topics: + +- [Add type definitions for work items](add-wit-definitions-process-template.md) +- [Add link type definitions](add-link-type-definitions-to-a-process-template.md) +- [Add type definitions for work item categories](add-type-wit-category-definitions-process-template.md) +- [Add work item queries](add-work-item-queries-process-template.md) +- [Add work items](add-work-item-instance-process-template.md) + +<a name="syntax"></a> +## Work item tracking plug-in syntax structure + The plug-in file for work item tracking must conform to the schema definition that is defined in the WorkItemMethodology.xsd file, and the plug-in must be specified in its own file. + + The following syntax shows the high-level structure of the WorkItemTracking plug-in. Four tasks are specified, one each to upload the definitions for link types, types of work items, queries, and categories. If you were to add definitions work item instances, you would specify an additional task for each. + + For a description of each element, see [Element reference](#elements) later in this topic. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<tasks> + <task id="LinkTypes" name="LinkType definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item link types created"> + <taskXml> + <LINKTYPES> + <LINKTYPE /> +   . . . + </LINKTYPES> + </taskXml> + </task> + <task id="WITs" name="WorkItemType definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item types created"> + <dependencies> + <dependency taskId="LinkTypes" /> + </dependencies> + <taskXml> + <WORKITEMTYPES> + <WORKITEMTYPE /> +   . . . + </WORKITEMTYPES> + </taskXml> + </task> + <task id="Queries" name="Stored Query Definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item queries uploaded"> + <dependencies> + <dependency taskId="WITs" /> + </dependencies> + <taskXml> + <QUERIES> + <Permission /> +   . . . + <QueryFolder > + <Query /> +   . . . + </QueryFolder> +   . . . + </QUERIES> + </taskXml> + </task> + <task id="Categories" name="Categories definitions" plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" completionMessage="Work item type categories created"> + <dependencies> + <dependency taskId="WITs" /> + </dependencies> + <taskXml> + <CATEGORIES fileName="WorkItem Tracking\Categories.xml" /> + </taskXml> + </task> +</tasks> +``` + +## <a name="elements"></a> Element reference + The following table describes the elements that you use to upload work item tracking objects. You specify these elements within a **taskXml** container element in the WorkItemTracking plug-in file. For information about the task, dependency, and taskXml elements, see [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md). + +|Element|Syntax|Description| +|-------------|------------|-----------------| +|**CATEGORIES**|`<CATEGORIES fileName="CategoriesFilePathName" />`|Optional child element of the **taskXml** element for the WorkItemTracking plug-in.<br /><br /> Specifies the path and name of the file that contains the category definitions to be uploaded when the WorkItemTracking plug-in task is processed.| +|**FIELD**|`<FIELD refname="FieldReferenceName" value="Value" />`|Required child element of **WI**.<br /><br /> Defines a value for a field in the work item instance.| +|**HYPERLINK**|`<HYPERLINK URL="URL" relativePath="false" />`|Optional child element of **WI**.<br /><br /> Defines a hyperlink for the work item instance.| +|**LINKTYPE**|`<LINKTYPE fileName="LinkTypeFilePathName" />`|Required child element of **LINKTYPES**.<br /><br /> Specifies the path and name of a file that contains a link type definition to upload.| +|**LINKTYPES**|`<LINKTYPES> <LINKTYPE /> . . . </LINKTYPES>`|Optional child element of the **taskXml** element for the WorkItemTracking plug-in.<br /><br /> Contains a collection of **LINKTYPE** elements that each specify a definition file to upload.| +|**Permission**|`<permission allow="ListOfPermissions" identity="GroupName" />`|Optional child element of **Query**.<br /><br /> Specifies the default permissions that are assigned to team queries. For more information, see [Assign permissions for work item queries](control-access-to-functional-areas.md#Queries).| +|**Query**|`<Query name="QueryName" fileName="QueryFilePathName" />`|Required child element of **QUERIES**.<br /><br /> Specifies the name and the path of the .wiq file that defines a query to upload.| +|**QueryFolder**|`<QueryFolder name=" FolderName ">`|Optional child element of **QUERIES**.<br /><br /> Specifies the name of a query folder.| +|**QUERIES**|`<QUERIES> . . . </QUERIES>`|Optional child element of the **taskXml** element for the WorkItemTracking plug-in.<br /><br /> Specifies which query definition files to use to create default queries.| +|**WI**|`<WI type="WorkItemType"> <FIELD> . . .</FIELD> <HYPERLINK> . . .</HYPERLINK> </WI>`|Required child element of **WORKITEMS**.<br /><br /> Defines a type of work item to create and the values to assign to specific fields.| +|**WORKITEMS**|`WORKITEMS> <WI> <FIELD> . . .</FIELD> <HYPERLINK> . . .</HYPERLINK> </WI> </WORKITEMS >`|Optional child element of the **taskXml** element for the WorkItemTracking plug-in.<br /><br /> Contains a collection of **WI** elements that each define a work item instance.| +|**WORKITEMTYPE**|`<WORKITEMTYPE fileName="WITFilePathName" />`|Required child element of **WORKITEMTYPES**.<br /><br /> Specifies the path and name of the file that contains a type definition to upload.| +|**WORKITEMTYPES**|`<WORKITEMTYPES> <WORKITEMTYPE /> . . . </WORKITEMTYPES>`|Required child element of the WorkItemTracking plug-in.<br /><br /> Contains a collection of **WORKITEMTYPE** elements that each specify a definition file to upload.| + +## Related notes + [Customize a process](customize-process.md) + [Customize your work tracking experience](../../customize/customize-work.md) + [Overview of process template files](overview-process-template-files.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-project-portal-plug-in.md b/docs/work/reference/process-templates/define-project-portal-plug-in.md new file mode 100644 index 00000000000..8892b99a467 --- /dev/null +++ b/docs/work/reference/process-templates/define-project-portal-plug-in.md @@ -0,0 +1,288 @@ +--- +title: Define the project portal plug-in for a process template | VSTS & TFS +description: Use the portal plug-in to define the initial document libraries, library structure, and documents of a team project's portal - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 3351a292-1ce5-4573-ac88-b86ad7482ac0 +ms.manager: douge +ms.author: kaelli +ms.date: 04/12/2017 +--- + + +# Define the project portal plug-in for a process template + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +When you create a team project, the project portal plug-in creates a SharePoint site and uploads several files contained within the process template. These files will appear under the specifies the folder structure and set of reports that will appear under the **Documents** node in Team Explorer. + +By using the portal plug-in, you can define the initial document libraries, library structure, and documents of a [team project's portal](../../../report/sharepoint-dashboards/share-information-using-the-project-portal.md). You can also include the tasks that create dashboards and Excel reports that are designed to work with the default [process templates](../../guidance/choose-process.md). + +The tasks that you specify in the plug-in for SharePoint Products are run only when you create a SharePoint site when you [create a team project](../../../accounts/create-team-project.md). For more information about site requirements and administration, see [SharePoint Products requirements for Team Foundation Server](../../../accounts/requirements.md#sharepoint). + +>[!IMPORTANT] +>When you create a team project from the web portal, several process template files are ignored. Specifically, the WssTasks.xml plug-in file that would create a SharePoint site is ignored. +> +>For VSTS, the SharePoint site isn't supported. If you want to add a SharePoint site for your on-premises TFS, then create your team project from Visual Studio or Team Explorer. For details, see [Process template and plug-in files, Client support for project creation](overview-process-template-files.md#client-support). + + +<a name="name"></a> +## Portal plug-in name and location + +The names of the file, the folder, and the plug-in for the default process templates are as follows: + +**File name**: WssTasks.xml +**Folder name**: Windows SharePoint Services +**Plug-in name**: Microsoft.ProjectCreationWizard.Portal + + +> [!NOTE] +> You can change the names of the XML file and the folder but not the plug-in. The system doesn't include a mechanism for the deployment of client-side plug-ins, policies, or other modifications. If you want to deploy this kind of functionality, you must use your own distribution and installation program. + +<a name="Tasks"></a> +## Portal creation tasks and dependencies + In the portal plug-in file, specify one or more tasks and their dependencies. You specify the following key tasks: + +- Create the site by using a specified site template +- Create document libraries +- Create folders, and upload files to the document libraries +- Activate dashboard features + +For an example of a task that specifies a simple project portal, see the WssTasks.xml file in one of the default process templates. You can [download the latest process templates](../../guidance/manage-process-templates.md). + +<a name="SiteTemplate"></a> +## Create the site and specify the site template + You must specify a site template on which the project portal is based. The site template also must be available on the Team Foundation Server SharePoint portal. Site templates are not included in the process template. + + Specify the site template using the site element. + +``` +<site template="" language=""/> +``` + + The following table describes the attributes for the **site** element. + +|**Attribute**|**Description**| +|-------------------|---------------------| +|template|Specifies which template to use. You must specify a template that is defined on the server that hosts SharePoint Products for the team projects that will be created.<br />To use the features that are available with the current version of the process templates, specify the following string: `Team Foundation Server Project Portal`.<br />| +|language|Specifies a locale ID to indicate which language version of the site template to use. The English version is 1033.| + +The following example shows how to reference the English version of the Agile process template, which supports dashboards. + +> [!div class="tabbedCodeSnippets"] +```XML +<tasks> + <task id="SharePointPortal" name="Create Sharepoint Portal" plugin="Microsoft.ProjectCreationWizard.Portal" completionMessage="Project portal site created."> + <dependencies /> + <taskXml> + <Portal> + <site template="Team Foundation Server Project Portal" language="1033" /> + . . . + </Portal> +``` + +> [!NOTE] +> All other tasks defined within the portal plug-in depend on the site creation task because the project portal must be created before you can create additional document libraries or copy files. + +### Process template performance + The files that you specify in WssTasks.xml are included as part of the process template when it is uploaded. The size of the process template affects how long it takes to create a new team project. Larger process templates take longer to create new team projects. Therefore you should consider alternate strategies to provide files when process template performance degrades. + +### Use the site template + You can include files as part of the SharePoint site template. This moves files out of the process template and into the site template and improves performance when creating new team projects. + + However, there is a benefit to listing files in WssTasks.xml. You can bind Microsoft Project and Microsoft Excel files to a query using the queryid attribute described previously. This assists team members when they open the files because they will already be connected to the correct Team Foundation Server and query. + +### Use an alternate website + If you have a large collection of files that are shared amongst multiple team projects, you can use an alternate Web site to host the files and link to the files from the project portal or Web pages. This strategy also increases performance when creating team projects since the files do not need to be copied to the project portal. For more information, see [Configure or add a project portal](../../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md). + +<a name="DocLibraries"></a> +## Create document libraries + After the project portal is created, you can specify that additional document libraries be created. Use the **documentLibrary** element to specify a document library. + +> [!div class="tabbedCodeSnippets"] +```XML +<documentLibraries> + <documentLibrary name="" description="" isProcessGuidance="true | false" /> +</documentLibraries> +``` + +> [!NOTE] +> Versioning for a document library cannot be enabled or disabled in the process template. You can enable or disable versioning via the Windows SharePoint Services site template, or after project creation. + + The following table describes the attributes for the documentLibrary element. + +|**Attribute**|**Description**| +|-------------------|---------------------| +|name|Specifies the name of the document library that appears on the project portal.| +|description|Provides a description of the document library that appears on the project portal.| +|isProcessGuidance|Specifies whether the document library is used to support process guidance content.| + + The following example shows how to create a document library named Development that the development team can use to store documents. + +> [!div class="tabbedCodeSnippets"] +```XML +<documentLibraries> +. . . + <documentLibrary name="Process Guidance" description="How to make best use of the Team Foundation Server tools and process" isProcessGuidance="true" /> +. . . +</documentLibraries> +``` + +<a name="Folders"></a> +## Create the folder structure of a document library + After the project portal is created, you can specify additional folders to create. You can also specify files to copy such as template files. + + Use the **folder** element to create a new folder. + +> [!div class="tabbedCodeSnippets"] +```XML +<folders> + <folder documentLibrary="" name=""/> +</folders> +``` + + The following table describes the attributes for the folder element. + +|**Attribute**|**Description**| +|-------------------|---------------------| +|documentLibrary|Identifies which document library to create the folder in.| +|name|Specifies the name of the folder.| + + The following example shows how to create a folder named Trip Reports in the Development document library where developers can store trip reports from conferences or customer visits. + +> [!div class="tabbedCodeSnippets"] +```XML +<folders> + <folder documentLibrary="Development" + name="Trip Reports"/> +</folders> +``` + +<a name="Files"></a> +## Specify files to upload to document libraries + You must also copy files into document libraries and folders. The source files are located under the Windows SharePoint Services folder. You must specify a target on the project portal. + +> [!div class="tabbedCodeSnippets"] +```XML +<files> + <file source="" documentLibrary="" target="" queryId="" /> +</files> +``` + + The following table describes the attributes for the file element. + +|**Attribute**|**Description**| +|-------------------|---------------------| +|source|A relative path to the local copy of the file. Generally, the source path name always begins with Windows SharePoint Services, which is the name of the folder where the portal plug-in is defined.| +|documentLibrary|The name of the document library into which the file will be copied.| +|target|A relative path to the target on the project portal where the file is copied.| +|queryId|Specifies the name of a work item query that is bound to the file. When the file is opened for the first time, it is populated with the results of running the query. This attribute is optional, and the specified query must exist in the workitems.xml file. **Note:** queryId only applies to .xls files.| + + The following example shows how to copy a template file named Project Checklist into the Project Management folder. This example also specifies that when the file is first open, it should be populated with the results of the Project Checklist work item query. + +> [!div class="tabbedCodeSnippets"] +```XML +<files> + <file source="Windows SharePoint Services\Templates\Project Checklist.xls" + documentLibrary="Project Management" + target="Project Checklist.xls" + queryId="Project Checklist" /> +</files> +``` + +> [!NOTE] +> You could include folders and files as part of the site template, and you would not have to list them in the XML. If you specify .exe files and the SharePoint site does not support .exe files, you will not be able to create a team project successfully by using the process template. + + + +### Process guidance content and support files +Process guidance is content that documents the processes to be followed by team members who work on a software project. Work items, reports, and queries can all change during the lifecycle of a team project, and they can be different between team projects. Process guidance content provides details about a team project, such as information about how to complete work item fields, examples of healthy and unhealthy reports, and descriptions of the queries. Process guidance also provides details about the process to follow on a team project, such as roles to assume and activities to complete. + +To support access to process guidance from the work item forms in Team Explorer, a set of .htm files are uploaded to the Process Guidance folder within the Documents SharePoint library. These files specify URLs to the visualstudio.com content that is opened when a team member chooses the process guidance ![Open process guidance for work item](_img/processguidance_wi_icon.png "ProcessGuidance_WI_Icon") icon within a work item form. These files are uploaded based on the `file` tasks defined within the portal plug-in. For example, the Agile process template defines the following `file` tasks: + +> [!div class="tabbedCodeSnippets"] +```XML +<!-- Process Guidance --> + <file source="Windows SharePoint Services\Process Guidance\ProcessGuidance.html" documentLibrary="Process Guidance" target="ProcessGuidance.html" /> + <file source="Windows SharePoint Services\Process Guidance\ProcessGuidance.html" documentLibrary="Process Guidance" target="ProcessGuidance.aspx" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\AboutWorkItems.htm" documentLibrary="Process Guidance" target="Supporting Files/AboutWorkItems.htm" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\AboutWorkItems.htm" documentLibrary="Process Guidance" target="Supporting Files/AboutWorkItems.aspx" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\Bug.htm" documentLibrary="Process Guidance" target="Supporting Files/Bug.htm" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\Bug.htm" documentLibrary="Process Guidance" target="Supporting Files/Bug.aspx" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\Issue.htm" documentLibrary="Process Guidance" target="Supporting Files/Issue.htm" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\Issue.htm" documentLibrary="Process Guidance" target="Supporting Files/Issue.aspx" /> + <file source="Windows SharePoint Services\Process Guidance\ProcessGuidance.html" documentLibrary="Process Guidance" target="Supporting Files/ProcessGuidance.htm" /> + <file source="Windows SharePoint Services\Process Guidance\ProcessGuidance.html" documentLibrary="Process Guidance" target="Supporting Files/ProcessGuidance.aspx" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\SharedSteps.htm" documentLibrary="Process Guidance" target="Supporting Files/Shared Steps.htm" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\SharedSteps.htm" documentLibrary="Process Guidance" target="Supporting Files/Shared Steps.aspx" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\Task.htm" documentLibrary="Process Guidance" target="Supporting Files/Task.htm" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\Task.htm" documentLibrary="Process Guidance" target="Supporting Files/Task.aspx" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\TestCase.htm" documentLibrary="Process Guidance" target="Supporting Files/Test Case.htm" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\TestCase.htm" documentLibrary="Process Guidance" target="Supporting Files/Test Case.aspx" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\UserStory.htm" documentLibrary="Process Guidance" target="Supporting Files/User Story.htm" /> + <file source="Windows SharePoint Services\Process Guidance\Supporting Files\UserStory.htm" documentLibrary="Process Guidance" target="Supporting Files/User Story.aspx" /> +``` + +You can customize these files to point to other resources for process guidance. You can also add files to support access to other process guidance that you have created for your team. For more information, see [Configure or add a project portal](../../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md). + +<a name="Activate"></a> +## Activating dashboard features +Dashboards show project data, support investigation, and help teams quickly perform common tasks. Dashboards display several Excel reports and Team Web Access Web parts. + +You use the **activateFeatures** element to cause the creation of the dashboards and Excel reports. You must include the following code in the portal plug-in file, within the **Portal** element, to activate the creation of the dashboards and Excel reports for a team project. + +**To activate dashboard features that are designed for use with the process template for Scrum**: + +> [!div class="tabbedCodeSnippets"] +```XML +<Portal> + . . . +<activateFeatures> + <!-- TfsDashboardScrumWss --> + <feature featureId="71EC0D67-21AB-4560-A825-9D976DA09D04" /> + <!-- TfsDashboardAgileQuickLaunch --> + <feature featureId="1D363A6D-D9BA-4498-AD1A-9874ACA5F827" /> + </activateFeatures> + . . . +</Portal> +``` + +**To activate dashboard features that are designed for use with the process template for Agile**: + +> [!div class="tabbedCodeSnippets"] +```XML +<Portal> +. . . + <activateFeatures> + <!-- TfsDashboardAgileMoss --> + <feature featureId="0D953EE4-B77D-485b-A43C-F5FBB9367207" /> + <!-- TfsDashboardAgileQuickLaunch --> + <feature featureId="1D363A6D-D9BA-4498-AD1A-9874ACA5F827" /> + </activateFeatures> +. . . +</Portal> +``` + +**To activate dashboard features that are designed for use with the process template for CMMI**: + +> [!div class="tabbedCodeSnippets"] +```XML +<Portal> + . . . +<activateFeatures> + <!-- TfsDashboardCmmiMoss --> + <feature featureId="3D0BA288-BF8E-47F0-9680-7556EDEF6318" /> + <!-- TfsDashboardCmmiProcessDocLibraries --> + <feature featureId="8610B95B-063F-4FB5-837C-BCF2FE9423C6" /> + </activateFeatures> + . . . +</Portal> +``` + +## Related notes +- [Customize a process](customize-process.md) +- [Process template and plug-in files](overview-process-template-files.md) +- [Scrum](../../guidance/scrum-process.md) +- [Agile](../../guidance/agile-process.md) +- [CMMI](../../guidance/cmmi-process.md) +- [Configure or add a project portal](../../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-root-tasks-process-template-plug-in.md b/docs/work/reference/process-templates/define-root-tasks-process-template-plug-in.md new file mode 100644 index 00000000000..b64018d095e --- /dev/null +++ b/docs/work/reference/process-templates/define-root-tasks-process-template-plug-in.md @@ -0,0 +1,231 @@ +--- +title: Define the root process template tasks | VSTS & TFS +description: Add, remove, define, or change the sequence in which process template plug-in files are processed +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: ac935b0b-09b3-4aed-9f3a-08190feb92e2 +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + +# Define the root tasks using the process template plug-in file File + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +<a name="top"></a> By customizing ProcessTemplate.xml, you can add, remove, or change the sequence in which process template plug-in files are processed. The ProcessTemplate.xml is the root file that defines the entire process template and all subordinate XML files. This file contains all of the task groups that must run to successfully create a team project. Each task group references a subordinate XML file (often in a subfolder) where the specific tasks are defined. In general, you specify one task group for each plug-in. + +To learn more about the default process templates, see [Choose a process](../../guidance/choose-process.md). To learn about process template plug-in files, see [Overview of process template files](overview-process-template-files.md) + + +<a name="structure"></a> +##Structure of the ProcessTemplate.xml file + In each ProcessTemplate.xml file, you define metadata and task groups. The metadata describes the template and specifies the plug-ins to be processed, as the following example shows + +> [!div class="tabbedCodeSnippets"] +```XML +<metadata> + <name>MSF for Agile Software Development 2013</name> + <description>This template is flexible and will work great for most teams using Agile planning methods, including those practicing Scrum.</description> + <plugins> + <plugin name="Microsoft.ProjectCreationWizard.Classification" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Reporting" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Portal" wizardPage="true" /> +. . . + </plugins> +</metadata> +``` + + The task groups specify the dependencies and tasks to be performed for each plug-in, as the following example shows: + +> [!div class="tabbedCodeSnippets"] +```XML +<groups> + <group id="Classification" description="Structure definition for the project." completionMessage="Project Structure uploaded."> + <dependencies></dependencies> + <taskList filename="Classification\Classification.xml" /> + </group> + <group id="Groups" description="Create groups and assign permissions." completionMessage="Groups created and permissions assigned."> + <dependencies> + <dependency groupId="Classification" /> + </dependencies> + <taskList filename="Groups and Permissions\GroupsandPermissions.xml" /> + </group> +. . . +</groups> +``` + +<a name="defining"></a> +## Define the plug-ins and task groups + You customize the ProcessTemplate.xml file by using the **ProcessTemplate** element and its child elements. For more information about the syntax of each element, see [Process template XML elements reference](process-template-xml-elements-reference.md). + + You define the plug-ins and root tasks to be processed by specifying the following information in the indicated sequence: + +1. **name**. You use this element to assign a label to the process template. In the New Team Project Wizard, you specify the process template based on its name, as the following example shows: + + > [!div class="tabbedCodeSnippets"] + ```XML + <name>Simplified Process</name> + ``` + + This element is required. The name appears not only in the process template list in the New Team Project Wizard but also in the Process Template Manager dialog box. The name of each process template must be unique within a team project collection, and each template name must contain no more than 254 Unicode characters. If you upload a template that is the same name as an existing template, the existing template will be overwritten. + +2. **description**. You use this element to define the text that describes the process template in the New Team Project Wizard, as the following example shows: + + > [!div class="tabbedCodeSnippets"] + ```XML + <description>Choose the simple process for projects that require little or no overhead and have very low cost.</description> + ``` + + This text appears on the **Select a Process Template** screen in the New Team Project Wizard when a project lead or administrator is deciding which process template to use. In general, try to describe what kinds of projects for which the process template is useful in terms of team size, length, cost, and other factors. + +3. **Plug-ins**. You use the **plugins** and **plugin** elements to define the set of plug-ins that the process template uses. You must make sure that if any subordinate XML file references a plug-in, that plug-in appears in this list. You must also specify the wizardPage attribute (a true or false value) to indicate whether the plug-in requires a page on the New Team Project Wizard. You must specify the set of a plug-ins that will be processed when you create a team project and whether the plug-in should have a visible page in the New Team Project Wizard. + + >[!IMPORTANT] + >When you create a team project from the web portal, several process template files are ignored. Specifically, the files that would create a Report Manager site and a SharePoint project portal aren't supported. These features aren't supported for VSTS. + > + >If you want these features to be available on your on-premises TFS, then create your team project from Visual Studio or Team Explorer. For details, see [Process template and plug-in files, Client support for project creation](overview-process-template-files.md#client-support). + + The following XML shows the correct values to use for each of the nine plug-ins that Visual Studio Application Lifecycle Management (ALM) includes. + + > [!div class="tabbedCodeSnippets"] + ```XML + <plugins> + <plugin name="Microsoft.ProjectCreationWizard.Classification" wizardPage="false"/> + <plugin name="Microsoft.ProjectCreationWizard.Reporting" wizardPage="false"/> + <plugin name="Microsoft.ProjectCreationWizard.Portal" wizardPage="true"/> + <plugin name="Microsoft.ProjectCreationWizard.Groups" wizardPage="false"/> + <plugin name="Microsoft.ProjectCreationWizard.WorkItemTracking" wizardPage="false"/> + <plugin name="Microsoft.ProjectCreationWizard.VersionControl" wizardPage="true"/> + <plugin name="Microsoft.ProjectCreationWizard.TestManagement" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Build" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Lab" wizardPage="false" /> + </plugins> + ``` + +4. **Task Groups**. You use the **groups** and **group** elements to define task groups. Each task group defines information that is necessary to process each plug-in. Each task group specifies the file that contains the set of tasks to process and optional dependencies that the group has on other task groups. The most common and easiest strategy is to create one **taskList** element per group per plug-in. + + The following example shows how a task group creates the default groups and permissions. The specific tasks are defined in the referenced file (GroupsandPermissions.xml). This task group has a dependency that the tasks in the Classification group successfully complete. + + > [!div class="tabbedCodeSnippets"] + ```XML + <group id="Groups" description="Create groups and assign permissions." completionMessage="Groups created and permissions assigned."> +    <dependencies> +       <dependency groupId="Classification" /> +    </dependencies> +    <taskList filename="Groups and Permissions\GroupsandPermissions.xml" /> + </group> + ``` + + For each task group, you define the following information: + + 1. **ID**. A unique identification that is assigned to the plug-in. + + 2. **Description**. The text that describes the plug-in tasks in the New Team Project Wizard. + + 3. **Completion message**. The message to appear in the New Team Project Wizard when all tasks for the plug-in successfully complete. + + 4. (Optional) **Failure message**. The message to appear in the New Team Project Wizard when one or more tasks for the plug-in fails to complete. + + 5. (Optional) **Plug-in dependencies**. You use the **dependencies** and **dependency** elements to define the set of dependencies for a plug-in to be processed. A dependency corresponds to a plug-in that must successfully complete before the current plug-in tasks can be processed. + + 6. **Task file**. You use the **tasklist** element to specify the file that contains the set of tasks to process the plug-in. + +<a name="example"></a> +## Example ProcessTemplate file + The following syntax lists the contents of the Scrum ProcessTemplate.xml file. + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<ProcessTemplate> + <metadata> + <name>Microsoft Visual Studio Scrum 2013</name> + <description>This template is for teams who follow the Scrum methodology and use Scrum terminology.</description> +<version type="6B724908-EF14-45CF-84F8-768B5384DA45" major="3" minor="6" /> + <plugins> + <plugin name="Microsoft.ProjectCreationWizard.Classification" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Reporting" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Portal" wizardPage="true" /> + <plugin name="Microsoft.ProjectCreationWizard.Groups" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.WorkItemTracking" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.VersionControl" wizardPage="true" /> + <plugin name="Microsoft.ProjectCreationWizard.TestManagement" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Build" wizardPage="false" /> + <plugin name="Microsoft.ProjectCreationWizard.Lab" wizardPage="false" /> + </plugins> + </metadata> + <groups> + <group id="Classification" description="Structure definition for the project." completionMessage="Project structure uploaded."> + <dependencies> +</dependencies> + <taskList filename="Classification\Classification.xml" /> + </group> + <group id="Groups" description="Create groups and assign permissions." completionMessage="Groups created and permissions assigned."> + <dependencies> + <dependency groupId="Classification" /> + </dependencies> + <taskList filename="Groups and Permissions\GroupsAndPermissions.xml" /> + </group> + <group id="WorkItemTracking" description="Work item definitions uploading." completionMessage="Work item tracking tasks completed."> + <dependencies> + <dependency groupId="Classification" /> + <dependency groupId="Groups" /> + </dependencies> + <taskList filename="WorkItem Tracking\WorkItems.xml" /> + </group> + <group id="VersionControl" description="Creating version control." completionMessage="Version control task completed."> + <dependencies> + <dependency groupId="Classification" /> + <dependency groupId="Groups" /> + <dependency groupId="WorkItemTracking" /> + </dependencies> + <taskList filename="Version Control\VersionControl.xml" /> + </group> + <group id="Build" description="Build default processes uploading." completionMessage="Build default processes uploaded."> + <dependencies> + <dependency groupId="VersionControl" /> + <dependency groupId="Groups" /> + </dependencies> + <taskList filename="Build\Build.xml" /> + </group> + <group id="Lab" description="Creating Lab." completionMessage="Lab task completed."> + <dependencies> + <dependency groupId="Classification" /> + <dependency groupId="Groups" /> + <dependency groupId="WorkItemTracking" /> + <dependency groupId="Build" /> + </dependencies> + <taskList filename="Lab\Lab.xml" /> + </group> + <group id="TestManagement" description="Test Management default configurations uploading." completionMessage="Test Management default configurations uploaded."> + <dependencies> + <dependency groupId="Classification" /> + <dependency groupId="Groups" /> + <dependency groupId="WorkItemTracking" /> + </dependencies> + <taskList filename="Test Management\TestManagement.xml" /> + </group> + <group id="Reporting" description="Project reports uploading." completionMessage="Project reporting tasks completed."> + <dependencies> + <dependency groupId="Classification" /> + <dependency groupId="WorkItemTracking" /> + <dependency groupId="VersionControl" /> + </dependencies> + <taskList filename="Reports\ReportsTasks.xml" /> + </group> + <group id="Portal" description="Creating project portal site" completionMessage="Project portal tasks completed."> + <dependencies> + <dependency groupId="Classification" /> + <dependency groupId="Reporting" /> + </dependencies> + <taskList filename="Windows SharePoint Services\WssTasks.xml" /> + </group> + </groups> +</ProcessTemplate> +``` + +## Related notes + [Process template XML elements reference](process-template-xml-elements-reference.md) + [Overview of process template files](overview-process-template-files.md) + [Customize a process](customize-process.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-tasks-to-process-a-plug-in.md b/docs/work/reference/process-templates/define-tasks-to-process-a-plug-in.md new file mode 100644 index 00000000000..03669aa6be9 --- /dev/null +++ b/docs/work/reference/process-templates/define-tasks-to-process-a-plug-in.md @@ -0,0 +1,162 @@ +--- +title: Define the tasks to process a plug-in | VSTS & TFS +description: Use the tasks element and its child elements to define the artifacts to be uploaded or specific elements to be created for a plug-in - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: af1b9f73-b930-49b6-b6f2-68d691b152aa +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + +# Define the tasks to process a plug-in + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +<a name="top"></a> You use the **tasks** element and its child elements to define the artifacts to be uploaded or specific elements to be created for a plug-in. A task specifies work that must occur to configure something specific to the process in a new team project. A number of the tasks that you define upload the work item types, work item queries, documents, and reports for a team project. Other tasks that you can define configure other areas of Visual Studio Application Lifecycle Management, such as Team Foundation Build, Visual Studio Lab Management, Test Manager, and Team Foundation version control. + +## <a name="syntax"></a> Tasks Syntax Structure + You can specify several tasks within a plug-in, and these tasks may have dependencies on one another. The tasks that you define for each plug-in must conform to the schema definition for **tasks**, defined in the Tasks.xsd file, and be specified in its own file using the **tasks** container element. + + The following syntax shows the high-level structure of the **tasks** element and its child elements. + +> [!div class="tabbedCodeSnippets"] +```XML +<tasks> +   <task> +      <dependencies> +        <dependency /> +        . . .    +      </dependencies /> +      <taskXml> +        . . .    +      </taskXml> +   <task/> +</tasks> +``` + +<a name="elements"></a> + +## Tasks element reference + The following table describes each element that can define the tasks for a plug-in. + + +<table> +<tr><th>Element</th><th>Description and syntax</th></tr> +<tbody valign="top"> +<tr> +<td><strong>dependencies</strong></td> +<td>Optional child element of **task**. Specifies other groups on which a group depends. +<pre><code><dependencies> + <dependency>. . . </dependency> +</dependencies/> +</code></pre> +</td> +</tr> +<tr><td><strong>dependency</strong></td> +<td>Optional child element of **dependencies**. Specifies the ID of another task on which this task depends. The other task must complete before this task can start. +<pre><code><dependency taskId="taskId" /> +</code></pre> +</td> +</tr> + +<tr><td><strong>ProcessTemplate</strong></td> +<td>Optional child element of **taskXml** element for the Build and Lab plug-ins. Specifies the name, location, and destination of a file to upload to support build processes for a team project. +<pre><code><ProcessTemplate Type="FileType" Filename="LocalPathAndFileName" +Description="FileDescription" ServerPath="UploadLocation" /> +</code></pre> +<p>Where each attribute is defined as follows:</p> +<ul> +<li>**Type**: The type of file that is being uploaded. The following values are valid: `Default` and `Upgrade` for build template files and `Custom` for lab template files.</li> +<li>**Filename**: The local directory path and name of the file to upload.</li> +<li>**Description**: A short text string that describes the file to upload.</li> +<li>**ServerPath**: The path of the server that is running Team Foundation Server where the file should be uploaded. The only valid upload location is `$/$$PROJECTNAME$$/BuildProcessTemplates`.</li></ul> +</td> +</tr> + +<tr><td><strong>task</strong></td> +<td>Required child element of **tasks**. Specifies work that must occur to configure something specific to the process in a new team project. + +<pre><code><task id="task id" name="name of task" plugin="Microsoft.ProjectCreationWizard.PluginName" +completionMessage="SuccessfulCompletionMessage" +completionDescription="InProcessMessage"> + <dependencies> . . . </dependencies> + <taskXml> . . . </taskXml> +</task/> +</code></pre> +<p>Where each attribute is defined as follows:</p> +<ul> +<li>**Type**: **id**: Specifies a name that identifies the task. If another task depends on this task, it references this ID. You must assign a unique value for the ID within the plug-in file.</li> +<li>**name**: Describes what the task does.</li> +<li>**plugin**: Identifies which plug-in must run this task.</li> +<li>**completionMessage**: Specifies the message to display during team project creation to indicate that the task completed successfully. Maximum length is 256 characters.</li> +<li>**completionDescription**: Specifies the message to display during team project creation to indicate that the task is being processed. Minimum length is 1 character.</li> +</ul> + +</td> +</tr> + +<tr><td><strong>tasks</strong></td> +<td>Required child element of **taskXml**. Contains a collection of **task** elements that each specify work that must occur to configure something specific to the process in a new team project. +<pre><code><tasks> + <task/>. . . </task> +</tasks /> +</code></pre> +</td> +</tr> + +<tr><td><strong>taskXml</strong></td> +<td>Required root element for a plug-in file. Describes the work that is required to complete this task. The XML inside this element block varies and is specific to each plug-in. +<blockquote>**Note:** The XML processor does not try to validate the content within the element. +</blockquote> +<pre><code><taskXml> . . . </taskXml> +</code></pre> +</td> +</tr> +</tbody> +</table> + + +<a name="index"></a> +## Index to taskXML Elements by Function + For more information about the specifics of the XML markup elements that you can specify for each plug-in, see one of the following topics: + +- Build: [Define the initial configuration of Team Foundation Build](define-initial-configuration-build.md) +- Classifications: [Define initial areas, iterations, and Project mapping file](define-classification-plug-in.md) +- Groups and Permissions: [Configure initial groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md) +- Lab: [Define the initial configuration of Lab Management](define-initial-configuration-lab-management.md) +- Portal: [Define the project portal](define-project-portal-plug-in.md) +- Reports: [Add reports](add-reports-to-the-process-template.md) +- Test Management: [Define the initial configuration of Test Manager](define-initial-configuration-test-manager.md) +- Version Control: [Define the initial configuration of Team Foundation version control](define-initial-configuration-version-control.md) +- Work Item Tracking: [Define objects for tracking work items](define-objects-track-work-items-plug-in.md) + + +<a name="example"></a> +## Example: Define work item types + The following example shows a task that creates six types of work items by referencing the definition files for each type. + +> [!div class="tabbedCodeSnippets"] +```XML +<task + id="WITs" + name="WorkItemType definitions" + plugin="Microsoft.ProjectCreationWizard.WorkItemTracking" + completionMessage="WorkItemTypes created" + completionDescription = "Processing work item types used by work item tracking"> + <taskXml> + <WORKITEMTYPES> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Bug.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\SharedStep.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Task.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\TestCase.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\UserStory.xml" /> + <WORKITEMTYPE fileName="WorkItem Tracking\TypeDefinitions\Issue.xml" /> + </WORKITEMTYPES> + </taskXml> +</task> +``` + +## Related notes +- [Define dependencies for task groups and tasks](define-dependencies-plug-ins-groups-tasks.md) +- [Overview of process template files](overview-process-template-files.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/define-work-item-query-process-template.md b/docs/work/reference/process-templates/define-work-item-query-process-template.md new file mode 100644 index 00000000000..48353e0912d --- /dev/null +++ b/docs/work/reference/process-templates/define-work-item-query-process-template.md @@ -0,0 +1,129 @@ +--- +title: Define a work item query to add to a process template | VSTS & TFS +description: Use Team Explorer to create awork item query, save as a .wiq file, and add to a process template +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 2e035f4a-c542-487f-96f9-d730e4700af2 +ms.manager: douge +ms.author: kaelli +ms.date: 02/24/2017 +--- + +# Define a work item query to add to a process template + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +<a name="top"></a> You can create a work item query (.wiq) file most easily in Team Explorer. In an existing team project, you can use Team Explorer to create all work item queries that you want to add to your process template and then follow the steps in this topic to save each query as a .wiq file. For more information about how to create work item queries, see [Use the query editor to list and manage queries](../../track/using-queries.md). + + **Requirements** + +- To create a query, you must be a member of the **Readers** group, or your **View work items in this node** permission must be set to **Allow** for each team project in the query. + +- To save a query as a team query, you must have the appropriate permissions described in [Set permissions on queries](../../track/set-query-permissions.md). + +<a name="create"></a> +## Save a work item query as a .wiq file + +1. In Team Explorer, open the query that you want to save. +2. On the **File** menu, choose **Save \<name of query> [Query] As**. +3. In the **Save Query As** dialog box, choose **File**, and specify a location and file name for the .wiq file. As an alternative, choose **Browse**, specify a file name, browse to the location to save the file, and then choose **Save**. +4. Copy the file to the **\WorkItem Tracking\Queries** folder, which is in the folder to which you downloaded your process template. +5. Open the .wiq file in a text editor. +6. Remove the `<TeamFoundationServer>` and `<TeamProject>` elements that associate the query with a specific server that is running Visual Studio Team Foundation Server and a specific team project, as the following example shows: + + > [!div class="tabbedCodeSnippets"] + ```XML + <TeamFoundationServer>CollectionURL</TeamFoundationServer> + <TeamProject>ProjectName</TeamProject> + ``` + + > [!NOTE] + > You must edit the .wiq file in a text editor and remove the `<TeamFoundationServer>` and `<TeamProject>` elements that associate the query with a specific server and team project. Otherwise, the query will not work correctly if the process template is uploaded to a different server. As an alternative, use macros where you can so that your query does not contain the explicit name of the current team project or any other values that are specific to a certain environment. + +7. Remove any additional elements that are specific to a user. + + +<a name="path"></a> +## Create a work item query that references an iteration path + You can define a query that references a specific iteration path by including the macro for the team project, $$PROJECTNAME$$, and the name of an iteration path that is defined in the Classification plug-in file. For example, the following syntax specifies a query that includes only those work items whose iteration path is under Iteration 1. + +> [!div class="tabbedCodeSnippets"] +```XML +AND [Source].[System.IterationPath] UNDER '$$PROJECTNAME$$\Iteration 1' +``` + + When the team project is created, the macro is replaced with the name of the team project. + + By using this macro, you can define workbooks that reference specific iteration paths. The Agile process template contains an iteration-specific query, Iteration1Backlog.wiq, that supports the iteration-specific workbook, Iteration Backlog.xlsm. + + When you upload iteration-specific queries, the task to process the Classification.xml file must complete before the task to process the query files. For more information, see [Define initial areas, iterations, and Project mapping file](define-classification-plug-in.md) and [Define the root tasks](define-root-tasks-process-template-plug-in.md). + +<a name="iterationspecific"></a> +### Example of an iteration-specific work item query + The following example shows the Iteration1Backlog work item query, which supports the Iteration Backlog workbook. For details on WIQL, see [Work Item Query Language](../../../reference/wiql-syntax.md). + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<WorkItemQuery Version="1"> + <Wiql> + SELECT [System.Id], + [System.WorkItemType], + [System.Title], + [System.State], + [System.AssignedTo], + [Microsoft.VSTS.Scheduling.RemainingWork], + [Microsoft.VSTS.Scheduling.CompletedWork], + [Microsoft.VSTS.Scheduling.StoryPoints], + [Microsoft.VSTS.Common.StackRank], + [Microsoft.VSTS.Common.Priority], + [Microsoft.VSTS.Common.Activity], + [System.IterationPath], + [System.AreaPath] + FROM WorkItemLinks + WHERE (Source.[System.TeamProject] = @project + AND [Source].[System.AreaPath] UNDER @project + AND [Source].[System.IterationPath] UNDER '$$PROJECTNAME$$\Iteration 1' + AND ( + Source.[System.WorkItemType] = 'User Story' + OR Source.[System.WorkItemType] = 'Task' + ) + ) + AND [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward' + AND [Target].[System.WorkItemType] = 'Task' + ORDER BY [Microsoft.VSTS.Common.StackRank], [Microsoft.VSTS.Common.Priority] + mode(Recursive) + </Wiql> +</WorkItemQuery> +``` + +<a name="elements"></a> +## WorkItemQuery element reference + The following syntax shows the structure of the **WorkItemQuery** element and its child elements. + +> [!div class="tabbedCodeSnippets"] +```XML +<WorkItemQuery Version="1"> +   <TeamFoundationServer>collectionURL </TeamFoundatonServer> +   <TeamProject>TeamProjectName </TeamProject> +   <Wiql> +      WorkItemQueryLanguage +   </Wiql> +</WorkItemQuery> +``` + +>[!NOTE] +>For queries made against VSTS, the WIQL length must not exceed 32K characters. The system won't allow you to create or run queries that exceed that length. + +|Element|Syntax|Description| +|-------------|------------|-----------------| +|**TeamFoundationServer**|`<TeamFoundationServer>`<br />   ` collectionURL`<br /> `</TeamFoundatonServer>`|Optional child element of **WorkItemQuery**.<br /><br /> **Important:** In general, you remove this element from queries that you add to process templates.<br /><br /> Specifies the URI of the team project collection in the following format:<br /><br /> **http://** *ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If no virtual directory is used, use the following format for the URI:<br /><br /> **http://** *ServerName:Port/CollectionName*<br /><br /> The attribute type is **ServerNameType** with a maximum length of 2047.| +|**TeamProject**|`<TeamProject>`<br />   `TeamProjectName`<br /> `</TeamProject>`|Optional child element of **WorkItemQuery**.<br /><br /> **Important:** In general, you remove this element from queries that you add to process templates.<br /><br /> Specifies the team project against which to run the query.<br /><br /> The attribute type is **ProjectNameType** with a maximum length of 255 characters.| +|**Wiql**|`<Wiql>`<br />   `WorkItemQueryLanguage`<br /> `</Wiql>`|Required child element of **WorkItemQuery**.<br /><br /> Specifies a sequence of Structured Query Language (SQL) commands that act as filter criteria to find a set of work items in a team project and return the values that are assigned to a set number of fields. For details, see [Work Item Query Language](../../../reference/wiql-syntax.md). <br /><br /> The default process templates provide several examples of the SQL commands that the **Wiql** element supports. These files are located in the Queries folder of the WorkItem Tracking folder. | + +## Related notes +- [Create managed queries](../../track/example-queries.md) +- [Use the query editor to list and manage queries](../../track/using-queries.md) +- [Define objects for tracking work items](define-objects-track-work-items-plug-in.md) +- [Work Item Query Language](../../../reference/wiql-syntax.md) +- [Wiql Editor, a Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ottostreifel.wiql-editor) \ No newline at end of file diff --git a/docs/work/reference/process-templates/overview-process-template-files.md b/docs/work/reference/process-templates/overview-process-template-files.md new file mode 100644 index 00000000000..6964cc40f79 --- /dev/null +++ b/docs/work/reference/process-templates/overview-process-template-files.md @@ -0,0 +1,233 @@ +--- +title: Process template and plug-in files | VSTS & TFS +description: Describes each process template and plug-in file and what is supported when you create a team project via Visual Studio or the web portal +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 5a0b9512-d663-4a5e-99d5-f5454fb986f7 +ms.manager: douge +ms.author: kaelli +ms.date: 04/13/2017 +--- + + +# Process template and plug-in files + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You customize the initial configuration of team projects by customizing one or more process template files. You can customize several types of template files, which include the root XML file, plug-in files, and XML definition files. By customizing these files, you can define the initial configuration of all team projects that are created from the process template. + +For information about the default process templates, see [Choose a process](../../guidance/choose-process.md). To learn about customizing a process template, see [Customize a process template](customize-process.md). + + +<a name="client-support"></a> +## Client support for team project creation + +When you choose to create a team project, the Project Creation Wizard (PCW) reads the root process template file and its specified plug-in files defined within the process or process template you select. These files define the tasks and the screens that appear when the PCW is run. (No screens appear when you create a team project from the web portal.) + +For example, if a process template includes the plug-in for Windows SharePoint Services, then a screen appears that requests information about the project portal. + +Depending on whether you work from the cloud or an on-premises server, you can create a team project from one of the following clients. + +| Client | VSTS | On-premises TFS | +|--------|---------------|-----------------| +|Visual Studio| ![not supported](../../_img/icons/delete_icon.png) | ![supported](../../_img/icons/checkmark.png)| +|Team Explorer| ![not supported](../../_img/icons/delete_icon.png) | ![supported](../../_img/icons/checkmark.png) | +|Web portal | ![supported](../../_img/icons/checkmark.png)| ![supported](../../_img/icons/checkmark.png) | + +(![supported](../../_img/icons/checkmark.png)- Supported; ![not supported](../../_img/icons/delete_icon.png) - Not supported) + +>[!NOTE] +>For VSTS, even if you initiate creating a team project from Visual Studio or Team Explorer, you'll be taken to the web portal to complete the operation. + +When you create a team project from the web portal, there are several plug-ins that aren't supported. They are simply ignored by the PCW. For details, review [Plug-in file descriptions and PCW support](#PlugInFiles). + + +<a name="Root"></a> +## The root process template file + You customize the root XML file, ProcessTemplate.xml, to define the sequence of plug-in files to be processed and the dependencies of each plug-in. The ProcessTemplate.xml file contains all task groups that must run to successfully create a team project. Each task group references a subordinate XML plug-in file (often in a subfolder) where the specific tasks are defined. For more information, see [Define the root tasks](define-root-tasks-process-template-plug-in.md). + + +<a name="PlugInFiles"></a> +## Plug-in files + +Each plug-in file configures a specific functional area by defining one or more tasks. Tasks specify to upload a file, set permissions for a group, or configure some other functional area. + +For example, the Work Item Tracking plug-in configures the work item types, queries, categories, and process configuration for a new team project. + +## Plug-in file descriptions and PCW support + +Each default process template includes the plug-in files described in the following table. The order in which the plug-ins are called is determined by the root process template file. Except for the Classification plug-in, plug-ins can also be deleted from the process template. + +All plug-ins are supported (![supported](../../_img/icons/checkmark.png)) when you create your team project from a supported client. However, when you create the team project from the cloud or the web portal for an on-premises TFS, several plug-ins are ignored or not supported (![not supported](../../_img/icons/delete_icon.png)) as indicated in the following table. + +<table> + +<tr valign="bottom"> +<th width="20%">Plug-in folder and file</th> +<th width="10%">Client</th> +<th width="10%">Web portal</th> +<th width="60%">Description</th> +</tr> + +<tbody valign="top"> + + +<tr> +<td>Build<br/> +   [Build.xml](define-initial-configuration-build.md)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>Defines the initial security permissions used by Team Foundation Build and uploads build template files. </td> +</tr> + + +<tr> +<td>Classifications <br/> +   [Classification.xml](define-classification-plug-in.md)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>Configures the initial area and iteration or sprint paths. Also uploads the [Microsoft Project Mapping (FileMapping.xml) file](../map-microsoft-project-fields-to-tf-fields.md) that defines how work tracking fields map to Office Project fields.</td> +</tr> + + +<tr> +<td>Groups and Permissions<br/> +   [GroupsandPermissions.xml](define-groups-teams-permissions-plug-in.md)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>Defines the initial security groups, teams, team members, and their permissions.</td> +</tr> + + +<tr> +<td>Lab Management<br/> +   [Lab.xml](define-initial-configuration-lab-management.md)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>![not supported](../../_img/icons/delete_icon.png)</td> +<td>Defines the initial security permissions that are assigned to identities for Visual Studio Lab Management. <!---[Learn more about Lab Management](https://docs.microsoft.com/visualstudio/test/lab-management/using-a-lab-environment-for-your-application-lifecycle).--> + +<blockquote> +![](../../_img/icons/note-icon.png)<br/> +Going forward, native build and release management tools replace the previous lab management tools. To learn more, see [Use Build and Release Management instead of Lab Management for automated testing](https://docs.microsoft.com/visualstudio/test/lab-management/use-build-or-rm-instead-of-lab-management). +</blockquote> + +</td> +</tr> + + + +<tr> +<td>Reports<br/> +   [ReportsTasks.xml](add-reports-to-the-process-template.md)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>![not supported](../../_img/icons/delete_icon.png)</td> +<td>Creates the Report Manager site for the team project and uploads the Reporting Services reports. Only supported for on-premises TFS. + +<p> +To add reports after creating a team project, see [Add reports to a team project](../../../report/admin/add-reports-to-a-team-project.md).</p> +</td> +</tr> + + +<tr> +<td> +<a name="XMLFiles"></a> +Test Management<br/> +   [TestManagement.xml](define-initial-configuration-test-manager.md)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>Defines the initial test variables, configurations, settings, and resolution states of a team project. This plug-in also uploads the information contained in the following files: +<ul> +<li>**localrun.testsettings**: Defines the default test settings for a local test run.</li> +<li>**testconfiguration**: Configures the default test configurations (hardware and software) that are defined for a team project. After the project is created, you can delete these configurations and create other configurations.</li> +<li>**testresolutionstate**: Defines the test resolution states that are used by Test Runner, Microsoft Test Manager, and the web portal Test hub. You can't change these states after the team project is created. To change the resolution states after you've created a team project for an on-premises TFS, see [Customize and manage the test experience](../witadmin/tcm-customize-manage-test-experience.md).</li> +<li>**testsettings**: Specifies the initial test settings files. Only one file is specified, localrun.testsettings.</li> +<li>**testvariable**: Defines the initial test variables. After the project is created, you can modify these variables and create other variables.</li> +</ul> + + +</td> +</tr> + + +<tr> +<td>Version Control<br/> +   [VersionControl.xml](define-initial-configuration-version-control.md)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>Defines the initial security permissions for Git or Team Foundation version control (TFVC),l and for TFVC, tcheck-in notes and whether exclusive check-out is required. + +</td> +</tr> + + +<tr> +<td><a name="ProcGuidance"></a> +Windows SharePoint Services<br/> +   [WssTasks.xml](define-project-portal-plug-in.md)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>![not supported](../../_img/icons/delete_icon.png)</td> +<td>Defines the project portal based on a template for a SharePoint site. Only supported for on-premises TFS. This plug-in also uploads the information contained in the following files and folders: +<ul> +<li>**Process Guidance**: Uploads a set of .htm files which contain a URL that opens process guidance topics when a user clicks the ![Open process guidance for work item](_img/processguidance_wi_icon.png "ProcessGuidance_WI_Icon") help icon from the client version of a work item form. These files can be customized to point to other resources for process guidance. </li> +<li>**Samples and Templates**: Uploads one or more Excel workbooks (.xslx files) to support bug triage and track issues. </li> +<li>**Shared Documents**: Uploads one or more sample document and template files as a starting point for creating work products.</li> +</ul> +<p> +To add a project portal site after creating a team project, see [Configure or add a project portal](../../../report/sharepoint-dashboards/configure-or-add-a-project-portal.md).</p> + +<blockquote> +![](../../_img/icons/note-icon.png)<br/>Process template files do not include dashboards or Microsoft Excel reports. These files are added to the team project, depending on selections that are made when a team project is created. If no SharePoint site is provisioned for the team project, no dashboards or Office Excel reports are available. For more information about these artifacts, see the following topics: [Project portal dashboards](../../../report/sharepoint-dashboards/project-portal-dashboards.md), [Excel reports (Agile)](../../../report/excel/excel-reports.md), and [Excel reports (CMMI)](../../../report/excel/excel-reports-cmmi.md). +</blockquote> + + +</td> +</tr> + + +<tr> +<td><a name="WIT"></a> +Work Item Tracking <br/> +   [WorkItems.xml](define-objects-track-work-items-plug-in.md)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>![supported](../../_img/icons/checkmark.png)</td> +<td>Defines the initial work item types, queries, and work item instances of a team project. Team members use work items to track work. A *work item type* defines the fields, workflow, and form used to track work. To customize any of these objects after you create a team project, see [Customize your work tracking experience](../../customize/customize-work.md). + +<p>This plug-in also uploads the information contained in the following files and folders: </p> +<ul> +<li>**[Categories.xml](add-type-wit-category-definitions-process-template.md)**: Defines the XML definition file for the categories used to group work item types. </li> +<li>**[LinkTypes](add-link-type-definitions-to-a-process-template.md)**: +<ul> +<li>**SharedParameterLink.xml**: Defines the link type that supports linking shared parameters to test cases.</li> +<li>**SharedSteps**: Defines the link type that supports linking shared steps to test cases.</li> +<li>**TestedBy**: Defines the link type that supports linking test cases to work items such as product backlog items, user stories, requirements, and bugs.</li> +</ul> +<p>Additional link types may be defined based on the process template. For a description of all link types, see [Link work items to support traceability and manage dependencies](../../track/link-work-items-support-traceability.md). </p> +</li> + +<li>**Process**: Defines the [ProcessConfiguration.xml file](../process-configuration-xml-element.md) that specifies the default configuration for the Agile tool backlogs and boards. </li> +<li>**[Queries](add-work-item-queries-process-template.md)**: Defines several work item queries (defined as .wiq files) within the Queries folder. </li> +<li>**[TypeDefinitions](add-wit-definitions-process-template.md)**: Defines the 15 or more work item type XML definition files contained within the TypeDefinition folder. The definitions differ depending on the process template selected. </li> +<li>**[Work items](add-work-item-instance-process-template.md)**: Defines one or more work items. No definitions are defined within the default process templates. +<blockquote> +Support for work item instances isn't supported for Hosted XML.</blockquote></li> +</ul> + +</td> +</tr> + + +</tbody> +</table> + + + + +## Related notes + +The schema definition for process templates uses a mix of camel-case and all capitalized elements. If you encounter errors when validating your type definition files, check the case structure of your elements. Also, the case structure of opening and closing tags must match according to the rules for XML syntax. See [Process template plug-ins: Index to XML element definitions](process-template-plug-ins-xml-elements-index.md). + +- [Choose a process or process template](../../guidance/choose-process.md) +- [Customize a process template](customize-process.md) +- [Customize your work tracking experience](../../customize/customize-work.md) +- [Testing overview](/vsts/manual-test/index) diff --git a/docs/work/reference/process-templates/process-template-plug-ins-xml-elements-index.md b/docs/work/reference/process-templates/process-template-plug-ins-xml-elements-index.md new file mode 100644 index 00000000000..47b20044f4f --- /dev/null +++ b/docs/work/reference/process-templates/process-template-plug-ins-xml-elements-index.md @@ -0,0 +1,154 @@ +--- +title: Process template plug-ins index | VSTS & TFS +description: Uses to look up the syntax structure and find examples of how to use each element. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: ea3c836a-438b-4d28-9fa4-e29281a96db6 +ms.manager: douge +ms.author: kaelli +ms.date: 02/24/2017 +--- + + +# Process template plug-ins: Index to XML element definitions + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +By using the index of elements in this topic, you can look up the syntax structure and find examples of how to use each element of the schema definition for process templates. + +> [!IMPORTANT] +> The schema definition for process templates uses a mix of camel-case and all capitalized elements. If you encounter errors when validating your type definition files, check the case structure of your elements. Also, the case structure of opening and closing tags must match according to the rules for XML syntax. + +## Alphabetical index + + +<table> +<tr> +<td> +- [activateFeatures](define-project-portal-plug-in.md) +- [CATEGORIES](../use-categories-to-group-work-item-types.md) +- [CATEGORY](../use-categories-to-group-work-item-types.md) +- [checkin_note](define-initial-configuration-version-control.md) +- [Children](define-classification-plug-in.md) +- [Datasources](add-reports-to-the-process-template.md) +- [DEFAULTWORKITEMTYPE](../categories-xml-element-reference.md) (category) +- [Dependencies](process-template-xml-elements-reference.md) (ProcessTemplate) +- [dependencies](define-tasks-to-process-a-plug-in.md) (task) +- [dependency](process-template-xml-elements-reference.md) (ProcessTemplate) +- [dependency](define-tasks-to-process-a-plug-in.md) (task) +- [description](process-template-xml-elements-reference.md) +- [documentLibraries](define-project-portal-plug-in.md) +- [documentLibrary](define-project-portal-plug-in.md) +- [exclusive_checkout](define-initial-configuration-version-control.md) +- [feature](define-project-portal-plug-in.md) +- [FIELD](add-work-item-instance-process-template.md) (work item instance) +- [FIELD](../all-field-xml-elements-reference.md) +- [FIELDS](../all-field-xml-elements-reference.md) +</td> +<td> +- [File](define-project-portal-plug-in.md) +- [files](define-project-portal-plug-in.md) +- [folder](define-project-portal-plug-in.md) (portal) +- [folder](add-reports-to-the-process-template.md) (reporting) +- [folders](define-project-portal-plug-in.md) (portal) +- [folders](add-reports-to-the-process-template.md) (reporting) +- [get_latest_on_checkout](define-initial-configuration-version-control.md) +- [Group](define-groups-teams-permissions-plug-in.md) +- [group](process-template-xml-elements-reference.md) (ProcessTemplate) +- [Groups](define-groups-teams-permissions-plug-in.md) (groups) +- [groups](process-template-xml-elements-reference.md) (ProcessTemplate) +- [HYPERLINK](add-work-item-instance-process-template.md) +- [LINKTYPE](add-link-type-definitions-to-a-process-template.md) +- [LINKTYPES](add-link-type-definitions-to-a-process-template.md) +- [member](define-groups-teams-permissions-plug-in.md) +- [members](define-groups-teams-permissions-plug-in.md) +- [Metadata](process-template-xml-elements-reference.md) +- [name](../apply-rule-work-item-field.md) +- [Node](define-classification-plug-in.md) +- [Nodes](define-classification-plug-in.md) +</td> +<td> +- [parameter](add-reports-to-the-process-template.md) +- [parameters](add-reports-to-the-process-template.md) +- [permission](define-groups-teams-permissions-plug-in.md) +- [Permission](add-work-item-queries-process-template.md) (query) +- [permissions](define-groups-teams-permissions-plug-in.md) +- [plugin](process-template-xml-elements-reference.md) +- [plugins](process-template-xml-elements-reference.md) +- [Portal](../define-default-copy-value-field.md) +- [ProcessTemplate](../all-form-xml-elements-reference.md) (root) +- [ProcessTemplate](define-tasks-to-process-a-plug-in.md) (taskXml) +- [Properties](define-classification-plug-in.md) (classification) +- [properties](add-reports-to-the-process-template.md) (reporting) +- [property](define-classification-plug-in.md) (classification) +- [property](add-reports-to-the-process-template.md) (reporting) +- [QUERIES](add-work-item-queries-process-template.md) +- [Query](add-work-item-queries-process-template.md) +- [QueryFolder](add-work-item-queries-process-template.md) +- [Reference](add-reports-to-the-process-template.md) +- [report](add-reports-to-the-process-template.md) +</td> +<td> +- [ReportingServices](add-reports-to-the-process-template.md) +- [reports](add-reports-to-the-process-template.md) +- [site](add-reports-to-the-process-template.md) (reporting) +- [site](define-project-portal-plug-in.md) (portal) +- [task](define-tasks-to-process-a-plug-in.md) +- [tasklist](process-template-xml-elements-reference.md) +- [taskXml](define-tasks-to-process-a-plug-in.md) +- [TeamFoundationServer](define-work-item-query-process-template.md) +- [TeamProject](define-work-item-query-process-template.md) +- [TestConfigurations](define-initial-configuration-test-manager.md) +- [TestResolutionStates](define-initial-configuration-test-manager.md) +- [TestSettings](define-initial-configuration-test-manager.md) +- [TestVariables](define-initial-configuration-test-manager.md) +- [WI](add-work-item-instance-process-template.md) +- [Wiql](define-work-item-query-process-template.md) +- [WorkItemQuery](define-work-item-query-process-template.md) +- [WORKITEMS](add-work-item-instance-process-template.md) +- [WORKITEMTYPE](../use-categories-to-group-work-item-types.md) (category) +- [WORKITEMTYPE](../all-witd-xml-elements-reference.md) (definition) +</td> +</tr> +</table> + + +<a name="pt"></a> +## Elements that define the root plug-in for process templates + The ProcessTemplate file contains two main parent elements within the **ProcessTemplate** root element: **metadata** and **groups**. The syntax for each of the following elements and their child elements is described in [Process template XML elements reference](process-template-xml-elements-reference.md). + +- **metadata**: **description, nnname, plugin, plugins** +- **groups: dependencies, dependency, group, tasklist** + +<a name="tasks"></a> +## Elements that define plug-in tasks + You use the **tasks** element and its child elements to define the artifacts to be uploaded or specific elements to be created for each plug-in. You can access the topic that provides detailed information and examples for each plug-in and element in the following table. + +|Plug-in|Related topic|Elements| +|--------------|-------------------|--------------| +|All|[Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md)|**dependencies, dependency, ProcessTemplate, task, tasks, taskXml**| +|Build|[Define the initial configuration of Team Foundation Build](define-initial-configuration-build.md)|**Permission, ProcessTemplate**| +|Classification|[Define initial areas, iterations, and Project mapping file](define-classification-plug-in.md)|**Children, Node, Nodes, properties, property**| +|Groups and Permissions|[Configure initial groups, teams, members, and permissions](configure-initial-groups-teams-members-permissions.md)|**group, groups, member, members, permission, permissions**| +|Lab|[Define the initial configuration of Lab Management](define-initial-configuration-lab-management.md)|**Permission, ProcessTemplate**| +|Portal|[Define the project portal](define-project-portal-plug-in.md)|**activateFeatures, documentLibraries, documentLibrary, feature, file, files, folder, folders, Portal, site**| +|Reports|[Add reports](add-reports-to-the-process-template.md)|**datasources, folder, folders, parameter, parameters, properties, property, reference, report, reports, ReportingServices, site**| +|Test Management|[Define the initial configuration of Test Manager](define-initial-configuration-test-manager.md)|**dependencies, dependency, TestConfigurations, TestResolutionState, TestSettings, TestVariables**| +|Version Control|[Define the initial configuration of Team Foundation version control](define-initial-configuration-version-control.md)|**checkin_note, exclusive_checkout, get_latest_on_checkout, permission**| +|Work Item Tracking|[Define objects for tracking work items](define-objects-track-work-items-plug-in.md)|**CATEGORIES, FIELD, GLOBALLISTS, HYPERLINK, LINKTYPE, LINKTYPES, Permission, Query, QueryFolder, QUERIES, WI, WORKITEMS, WORKITEMTYPE, WORKITEMTYPES**| + +## <a name="typedefinitions"></a> Type definition elements that define objects for tracking work + In the Work Item Tracking plug-in, you can specify several type definition files and query definition files to upload. You can access the topic that provides detailed information and examples for each object and element in the following table: + +|Object|Related topic|Elements| +|------------|-------------------|--------------| +|Categories|[Categories XML element reference](../categories-xml-element-reference.md)|**CATEGORIES, CATEGORY**| +|Global lists|[GLOBALLIST XML element reference](../define-global-lists.md)|**GLOBALLIST, GLOBALLISTS, LISTITEM**| +|Link types|[Define a custom link type](../define-custom-link-type.md)|**LinkType, LinkTypes**| +|Work item queries|[Define a work item query](define-work-item-query-process-template.md)|**TeamFoundationServer, TeamProject, Wiql, WorkItemQuery**| +|Work item types|[All WITD elements](../all-witd-xml-elements-reference.md)|Top level elements only: **DESCRIPTION, FIELDS (Definition), FORM, GLOBALLISTS, WITD, WORKFLOW, WORKITEMTYPE**| + +## Related notes +- [Support global teams](../localization-and-globalization-of-witd-child-elements.md) +- [All WITD elements](../all-witd-xml-elements-reference.md) +- [Customize your work tracking experience](../../customize/customize-work.md) \ No newline at end of file diff --git a/docs/work/reference/process-templates/process-template-xml-elements-reference.md b/docs/work/reference/process-templates/process-template-xml-elements-reference.md new file mode 100644 index 00000000000..2d4b0dfd0c8 --- /dev/null +++ b/docs/work/reference/process-templates/process-template-xml-elements-reference.md @@ -0,0 +1,95 @@ +--- +title: Process template XML elements reference | VSTS & TFS +description: Processes the template for adding or removing plug-in files. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 68ae0569-a8b6-48c8-ba91-0c18372a2c64 +ms.manager: douge +ms.author: kaelli +ms.date: 02/24/2017 +--- + +# Process template XML elements reference + +[!INCLUDE [temp](../../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can customize the root file for a process template to add or remove plug-in files. The root file defines all the plug-ins and tasks used to create a team project in Visual Studio Team Services (VSTS) or an on-premises Team Foundation Server (TFS). The root file, named ProcessTemplate, is located in the container folder for the process template files. For more information, see [Overview of process template files](overview-process-template-files.md). + + The parent element of the root plug-in file is the **ProcessTemplate** element, which must have only one **metadata** and one **groups** element defined. You must assign a unique name to each process template within a team project collection, and the name cannot be longer than 124 Unicode characters. + +> [!NOTE] +> For Hosted XML process model: If you import a process template with the same name and GUID as an existing process, the existing process is updated along with all team projects that reference that process. +> +> For On-premises XML process model: If you upload a process template with the same name as an existing template, the existing template will be overwritten. + +<a name="template"></a> +## ProcessTemplate syntax structure + The root plug-in for process templates must be specified in its own file in the **ProcessTemplate** container element and conform to the schema for process templates. + + The following example shows the structure of the root **ProcessTemplate** element. For a more extensive example, see [Define the root tasks](define-root-tasks-process-template-plug-in.md). + +> [!div class="tabbedCodeSnippets"] +```XML +<?xml version="1.0" encoding="utf-8"?> +<ProcessTemplate> +   <metadata> . . . </metadata> +   <groups> . . .</groups> +</ProcessTemplate> +``` + +## <a name="metadata"></a> Metadata element reference + The following syntax shows the structure of the **metadata** element and its child elements. + +> [!div class="tabbedCodeSnippets"] +```XML +<metadata> + <name>ProcessTemplateName</name> + <description>ProcessTemplateDescription </description> + <version type="ID" major="Number1" minor="Number2" /> + <plugins> + <plugin name="Microsoft.ProjectCreationWizard.pluginID" wizardPage="true | false" /> +. . . + </plugins> +</metadata> +``` + +|Element|Description and syntax| +|-------------|------------| +|**description**|Required child element of **metadata**. Defines the text of the description that appears in the New Team Project Wizard for the process template. <br />`<description>ProcessTemplateDescription</description>`| +|**metadata**|Required child element of **ProcessTemplate**. Container element for specifying required information for the plug-in to be processed by the New Team Project Wizard.<br />`<metadata>`<br />   `<name> . . . </name>`<br />   `<description> . . . </description>`<br />   `<version type="ID" major="Number1" minor="Number2/>`<br />   `<plugins> . . . </plugins>`<br />`</metadata>`| +|**name**|Required child element of **metadata**. Defines the name of the process template, which must be unique across the team project collection. The maximum length of the name is 124 characters.<br />`<name>ProcessTemplateName</name>`| +|**plugin**|Required child element of **plugins**. Specifies the name of a plug-in file to include in the process template creation and specifies whether the plug-in should have a visible page in the New Team Project Wizard.<br />`<plugin name="Microsoft.ProjectCreationWizard.PluginName wizardPage="true | false" />`| +|**plugins**|Required child element of **metadata**. Container element that defines the plug-ins for the process template.<br />`<plugins>`<br />   `<plugin> . . . </plugin>`<br />`</plugins>`| +|**version**|Required child element of **metadata**.< Specifies a unique ID and major and minor revision numbers to identify the version of the process template.<br />`<version type="ID" major="Number1" minor="Number2 " />`| + +## <a name="groups"></a> Groups element reference + The following syntax shows the structure of the **groups** element and its child elements. + +> [!div class="tabbedCodeSnippets"] +```XML +<groups> +   <group id="groupId" description="GroupDescription" completionMessage="SuccessMessage"> +      <dependencies> +         <dependency groupId="dependentGroupId" /> +. . . +      </dependencies> + <taskList filename="RelativePathAndFileName" /> +   </group> +. . . +</groups> +``` + +|Element|Description and syntax| +|-------------|------------| +|**dependencies**|Required child element of **group**. Specifies dependencies that the group has on other groups.<br />`<dependencies>`<br />   `<dependency>. . . </dependency>`<br />`</dependencies>`| +|**dependency**|Optional child element of **dependencies**. Specifies the ID of another task group on which this group depends. The other group must complete its tasks before this task group can start.<br />`<dependency groupId="groupId" />`| +|**group**|Required child element of **groups**. Identifies a set of tasks for a plug-in to run during project creation. The following values are valid for each attribute:<br />- **id**: Specifies a name that identifies the task group. If another task group depends on this group, it references this ID. You must assign a unique value for the ID within the plug-in file.<br /> - **description**: Specifies the message to indicate, during team project creation, that the task group is being processed.<br />- **completionMessage**: Specifies the message to indicate, during team project creation, that the task group completed successfully. Maximum length is 256 characters.<br />- **failureMessage**: Specifies the message to indicate, during team project creation, that the task group failed to complete successfully.<br /><br />`<group id="TaskGroupId" description="TaskGroupDescription" completionMessage="SuccessMessage" failureMessage="FailureMessage">`<br />   `<dependencies> . . . <dependencies>`<br />   `<taskList> . . . </taskList>`<br />`</group>`| +|**groups**|Required child element of **ProcessTemplate**. Container element that defines the set of task groups that will run during project creation.<br />`<groups>`<br />   `<group> . . . </group>`<br />`</groups>`| +|**tasklist**|Specifies an XML file that contains the list of tasks to run. The list of tasks for a group must always be in a separate XML file. For more information about how to specify these files, see [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md).<br />`<taskList filename="filePath" />`| + +## Related notes +- [Overview of process template files](overview-process-template-files.md) +- [Define the tasks to process a plug-in](define-tasks-to-process-a-plug-in.md) +- [Define dependencies for task groups and tasks](define-dependencies-plug-ins-groups-tasks.md) +- [Customize a process](customize-process.md) +- [Define the root tasks](define-root-tasks-process-template-plug-in.md) \ No newline at end of file diff --git a/docs/work/reference/provide-help-text-hyperlinks-web-content-form.md b/docs/work/reference/provide-help-text-hyperlinks-web-content-form.md new file mode 100644 index 00000000000..8e84834d260 --- /dev/null +++ b/docs/work/reference/provide-help-text-hyperlinks-web-content-form.md @@ -0,0 +1,211 @@ +--- +title: Help text, hyperlinks, web content | VSTS & TFS +description: Customize your work item form to provide information or links to content. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: b6409e94-7e59-47a9-8a62-afdeeac8ad86 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Provide help text, hyperlinks, or web content on a work item form + +<b>VSTS (Hosted XML) | TFS 2017 | TFS 2015 </b> + +>[!IMPORTANT] +><b>Feature availability: </b>This topic applies to customizations you can make when you use the Hosted XML or On-premises process models. The customizations addressed in this topic aren't available for the [Inheritance process model](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +When you customize your work item form, you may want to provide information or links to content that helps your team define the fields in the form. If you embed information in the form or make it easily available, team members will be better able to track useful data. + +By using the form controls that are described in this topic, you can add tooltip text for individual fields, stand-alone text, or hyperlinks to Web pages, or embed HTML content or Web content in the form. + +To modify an existing WIT, you modify the XML definition file for the WIT and then import it to your team project [based on the process model you use](../customize/customize-work.md). + + +[!INCLUDE [temp](../_shared/process-editor.md)] + +## <a name="HelpTextA"></a> Provide help text or tooltip text + You can provide Help text in one of two ways. In the first method, you add the `HELPTEXT` element as a child to the `FIELD` element in the `FIELDS` section of the type definition. By using `HELPTEXT`, you create the tooltip for the field. You are limited to 255 characters with this method. + +``` +<FIELD name="Sub-Title" refname="ACME.ACE.ImpactStatement" type="HTML" > +<HELPTEXT>Provide information about the impact to the ACE organization. </HELPTEXT> +</FIELD> +``` + + In the second method, you specify stand-alone text by using the `LabelText` and `Text` child elements. In this method, you can add as much information as you want, and the text is always present on the form. No user action is required. You can also add an optional link by using the `Link` element to more information, as shown in the following example. + +``` +<Control FieldName=" ACME.ACE.ImpactStatement" Type="HTMLControl" Label="Impact" LabelPosition="Left"> +   <LabelText> +      <Text>Provide information about the impact to the ACE organization. Specifically address the following: customer segment, target strategic opportunity, resources required, and time dependencies. For more detailed information, see the Impact Statement specification at: +         <Link OpenInNewWindow="true" UrlRoot=http://ACE.ImpactStatement.aspx /> +      </Text> +   </LabelText> +</Control> + +``` + +## <a name="LabelControl"></a> Add stand-alone text and hyperlink field labels + You can add text to a work item form that is not associated with any work item field by using the `Type` attribute `LabelControl` option of the `Control` element. The text can be plain or provide a hyperlink. Also, you can attach a hyperlink to an added field label by using the `FieldControl` option. + +#### Example: plain text label + The following example adds the plain text "Fill in the details of the bug here. Fields that are not required are recommended to be filled in." to the work item field. + +``` +<Control Type="LabelControl" Label="Fill in the details of the bug here. Fields that are not required are recommended to be filled in." /> +``` + +#### Example: hyperlink field label + The following example illustrates how to add a hyperlink to a field label. + +``` +<Control Type="FieldControl" FieldName="System.Title" LabelPosition="Left" Label="Title 1" +   <LabelText> +      <Text> +         <Link UrlRoot="http://www.live.com/" /> +            Title 2 +      </Text> +   </LabelText> +</Control> +``` + +> [!NOTE] +> For Team Foundation clients who have not upgraded to the latest version, the `Label` attribute text appears. For Visual Studio 2012 clients, the Text tag is displayed as a hyperlink in which the URL is defined by the `Link` tag. + +#### Example: field label with hyperlink for part of the text + The following example illustrates how to add a hyperlink to part of a field label. In this example, the URL is determined by the values that are assigned to the `Param` elements based on the specific work item. + +``` +<Control Type="FieldControl" FieldName="System.IterationPath"> +   <LabelText LabelPosition="Left"> +      <Text> +         <Link UrlRoot="@ProcessGuidance" UrlPath="{0}.html"> +            <Param Index="0" vValue"System.WorkItemType"/>         </Link> +            Iteration Path +      </Text> +      <Text> (must be 3 levels deep)</Text> +   </LabelText> +</Control> +``` + +#### Example: hyperlink text label + ![Example of hyperlink applied to a standalone label](_img/wit_ss_hyperlinklabel.png "WIT_SS_HyperlinkLabel") +Hyperlink Text Label + + The following example illustrates how to add a hyperlink to displayed text in a work item form. + +``` +<Group> +   <Column PercentWidth="100"> +      <!-- Standalone label control 2 --> +      <Control Type="LabelControl" Label="How do I use this work item?"> +         <Link UrlRoot="http://www.live.com"></Link> +      </Control> +   </Column> +</Group> +``` + +#### Example: combining text and hyperlinks in a single label + ![Example of two hyperlinks applied to text](_img/wit_ss_hyperlinkcombolabel.png "WIT_SS_HyperlinkComboLabel") +Combining Text and Hyperlinks in a Single Label + + The following example illustrates how to add two hyperlinks to parts of a label on a work item form. + +``` +<Group> +   <Column PercentWidth="100"> +   <!-- Standalone label control 3 --> +      <Control Type="LabelControl" Name="Microsoft.VSTS.Common.GuidanceLabel3"> +         <LabelText> +            <Text>Click here for </Text> +            <Text> +               <Link UrlRoot="http://www.msn.com"></Link> +               work item guidance</Text> +            <Text> or here for </Text> +            <Text> +               <Link UrlRoot="http://www.msdn.com"></Link> +               process guidance +            </Text> +         </LabelText> +      </Control> +   </Column> +</Group> +``` + +#### Example: parameter-generated hyperlink field label + The following example illustrates how to add a hyperlink to a field label that is generated from parameter values that are evaluated for the open work item. + +``` +<Control Type="FieldControl" FieldName="System.State" Label="&State:" LabelPosition="Left"> +   <Link OpenInNewWindow="true" UrlRoot="http://" UrlPath="myserver.com:8080/tfs/myproject/{0}/_workItems#_a=edit&id=">      <Param Index="0" Value="System.State" Type ="Original"/> +   </Link> +</Control> +``` + +## <a name="WebBrowserControl"></a> Displaying web content + You can use the `Type` attribute `WebpageControl` option to display Web content in the work item form as a control instead of linking to a separate Web page. This display can be useful for providing metrics that support team members in viewing the contents of a report, dashboard, or other HTML-based content. You can provide a link to the content or embed the raw HTML content in a CDATA tag. + +### Example: display content provided by a URI + The following example shows how you can embed the content from a Web page by providing the URL to the page by using the `WebpageControlOptions` and `Link` elements. + +``` +<Tab Label="Web"> +   <Group> +      <Column PercentWidth="100"> +         <Control Type="WebpageControl" Name="WssPortalPage" Label="WssPortalPage" LabelPosition="Top" > +            < WebpageControlOptions AllowScript="true"> +               <Link UrlRoot="http://www.msdn.com" /> +            </WebpageControlOptions > +         </Control> +      </Column> +   </Group> +</Tab> +``` + +### Example: display content provided in a CDATA tag + The following example shows how you can add HTML content to a work item form that is contained in a `CDATA` tag. + +``` +<Control Type="WebpageControl"> +   <WebpageControlOptions> +      <Content> +      <![CDATA[Place HTML Formatted Content Here ]] +   </Content> +   </WebpageControlOptions > +</Control> +``` + +## <a name="ProcGuidance"></a> Embed process guidance + To make process guidance available on the work item form, you may want to add a tab that contains information about the workflow and usage of the work item type. You can do this by using the `Type` attribute `WebpageControl` option. This option provides support for embedding rich formatted text and images into the form by using the `WebpageControlOptions` and `Content` child elements. + +``` +<FORM> +. . . +<TabGroup> +. . . +   <Tab Label="Process Guidance"> +      <Group> +         <Column PercentWidth="100"> +            <Control Type="WebpageControl"> +            <WebpageControlOptions > +            <Content> +               <![CDATA[Place HTML Formatted Process Guidance Content Here ]]> +            </Content> +            </WebpageControlOptions> +            </Control> +         </Column> +      </Group> +   </Tab> +. . . +</TabGroup> +. . . +</FORM> +``` + +## Related notes + [Design the work item form](design-work-item-form.md) + [Customizing Project Tracking Data, Forms, Workflow, and Other Objects](../customize/customize-work.md) \ No newline at end of file diff --git a/docs/work/reference/reportable-fields-reference.md b/docs/work/reference/reportable-fields-reference.md new file mode 100644 index 00000000000..285c75fbab4 --- /dev/null +++ b/docs/work/reference/reportable-fields-reference.md @@ -0,0 +1,94 @@ +--- +title: Reportable fields reference| TFS +description: Default set of fields that appear in the relational warehouse database or the cube +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 06284b8a-d780-471e-b6d8-f100400eebfa +ms.manager: douge +ms.author: kaelli +ms.date: 02/17/2017 +--- +# Reportable fields reference for Visual Studio ALM + + +>[!IMPORTANT] +>This topic applies to team project customization for On-premises XML process models. For you to view reports, you must have configured your TFS and team project to support reporting. See [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md). +> +>For an overview of process models and customization options, see [Customize your work tracking experience](../customize/customize-work.md). + + +A default set of fields appears in the relational warehouse database or the cube. The following tables list those reportable fields defined in the default process templates provided with the current release of Team Foundation Server. These fields have a `reportable` attribute value of `Detail`, `Dimension`, or `Measure`. See [Add or modify work item fields to support reporting](add-or-modify-work-item-fields-to-support-reporting.md). + + For a complete list of fields that are defined in the default process templates, see [Work item field index](../guidance/work-item-field.md). + +## <a name="detail"></a> Detail fields + Detail fields are written to the relational warehouse database, but not to the cube. + +||||| +|-|-|-|-| +|**Field name**|**Description**|**Reference name**|**Data type**| +|Backlog Priority|A number that represents the relative priority for a bug, product backlog item, or task. (Scrum process template only.)|Microsoft.VSTS.Common.BacklogPriority|Double| +|Revised Date|The date and time stamp when a test case or shared step is revised. **Note:** This field is not included in the work item form and is not populated with any data.|System.RevisedDate|DateTime| + +## <a name="dimension"></a> Dimension fields + Dimension fields are written both to the relational warehouse database and to the cube. + +||||| +|-|-|-|-| +|**Field name**|**Description**|**Reference name**|**Data type**| +|Accepted By|The name of the person who responded to the code review.|Microsoft.VSTS.CodeReview.AcceptedBy|String| +|Accepted Date|The date and time when the person responded to the code review.|Microsoft.VSTS.CodeReview.AcceptedDate|DateTime| +|Activated By|The name of the team member who activated or reactivated the work item.|Microsoft.VSTS.Common.ActivatedBy|String| +|Activated Date|The date and time when the work item was activated or reactivated.|Microsoft.VSTS.Common.ActivatedDate|DateTime| +|Activity|The type of activity that is required to perform a task.|Microsoft.VSTS.Common.Activity|String| +|Area Path|Groups the work items into product feature or team areas. The area must be a valid node in the project hierarchy.|System.AreaPath|TreePath| +|Assigned To|The name of the team member who currently owns the work item.|System.AssignedTo|String| +|Automation Status|The status of a test case. You can specify the following values:<br /><br /> - **Not Automated**<br />- **Planned**|Microsoft.VSTS.TCM.AutomationStatus|String| +|Blocked|Indicates that progress toward resolving a bug, change request, requirement, or risk is suspended. Allowed values are **Yes** and **No**. (CMMI process template only)|Microsoft.VSTS.CMMI.Blocked|String| +|Changed By|The name of the team member who modified the work item most recently.|System.ChangedBy|String| +|Changed Date|The date and time when the work item was modified.|System.ChangedDate|DateTime| +|Closed By|The name of the person who closed a work item.|Microsoft.VSTS.Common.ClosedBy|String| +|Closed Date|The date and time when a work item was closed.|Microsoft.VSTS.Common.ClosedDate|DateTime| +|Closed Status|The status selected by the reviewer when closing the code review request. The number is stored in the system and written to the data warehouse as follows:<br /><br /> - **0 – Not Reviewed**<br />- **1 - Looks Good**<br />- **2 - With Comments**<br />- **3- Needs Work**<br />- **4 - Declined**<br />- **5 - Removed**|Microsoft.VSTS.CodeReview.ClosedStatus|String| +|Created By|The name of the team member who created the work item.|Microsoft.VSTS.Common.CreatedBy|String| +|Created Date|The date and time when a work item was created.|Microsoft.VSTS.Common.CreatedDate|DateTime| +|Due Date|The forecasted due date by which an issue will be resolved. (Agile process template only)|Microsoft.VSTS.Scheduling.DueDate|DateTime| +|Finish Date|The date and time when the schedule indicates that the task will be completed.|Microsoft.VSTS.Scheduling.FinishDate|DateTime| +|Found In|The product build number, also known as a revision, in which a bug was found.|Microsoft.VSTS.Build.FoundIn|String| +|ID|The unique identifier that is assigned to a work item. Work item IDs are unique across all team projects and work items that are defined in a team project collection.|System.Id|Integer| +|Integration Build|The product build number that incorporates the code or fixes a bug.|Microsoft.VSTS.Build.IntegrationBuild|String| +|Issue|Indicates that the shared step is associated with an expected result. Allowed values are **Yes** and **No**. **Note:** This field is not included in the work item form and is not populated with any data.|Microsoft.VSTS.Common.Issue|String| +|Iteration Path|Groups the work items by named sprints or time periods. The iteration must be a valid node in the project hierarchy.|System.IterationPath|TreePath| +|Priority|A subjective rating of the bug, issue, task, or test case as it relates to the business. You can specify the following values:<br /><br /> - **1**: Product cannot ship without the successful resolution of the work item, and it should be addressed as soon as possible.<br />- **2**: Product cannot ship without the successful resolution of the work item, but it does not have to be addressed immediately.<br />- **3**: Resolution of the work item is optional, based on resources, time, and risk.|Microsoft.VSTS.Common.Priority|Integer| +|Rating|The number of stars that an item receives from a reviewer in a star-based ranking system. (Feedback Response)<br /><br /> The number is stored in the system and written to the data warehouse as follows:<br /><br /> - **0 – Not Rated**<br />- **1 - Poor**<br />- **2 - Fair**<br />- **3- Good**<br />- **4- Very Good**<br />- **5 - Excellent**|Microsoft.VSTS.Common.Rating|String| +|Reason|The reason that the work item is in the current state. Values are specific to both the state and the type of work item. The field is not tracked for test cases or shared steps.|System.Reason|String| +|Resolved By|The name of the team member who resolved the bug or user story.|Microsoft.VSTS.Common.ResolvedBy|String| +|Resolved Date|The date and time when the bug or user story was resolved.|Microsoft.VSTS.Common.ResolvedDate|DateTime| +|Resolved Reason|The reason that the bug was resolved (for example, it was fixed).|Microsoft.VSTS.Common.ResolvedReason|String| +|Rev|A number that is assigned to the historical revision of a work item.|System.Rev|Integer| +|Risk|A subjective rating of the relative uncertainty about the successful completion of the user story. You can specify the following values:<br /><br /> - **1 - High**<br />- **2 - Medium**<br />- **3 - Low**|Microsoft.VSTS.Common.Risk|String| +|Severity|A subjective rating of the effect of a bug, issue, or risk on the project. You can specify the following values:<br /><br /> - **1 - Critical**<br />- **2 - High**<br />- **3 - Medium**<br />- **4 - Low**|Microsoft.VSTS.Common.Severity|String| +|Stack Rank|A subjective rating of the user story, task, issue, or bug compared to other work items of the same type. An item that is assigned a lower number should be fixed before an item that is assigned a higher number.|Microsoft.VSTS.Common.Rank|Double| +|Start Date|The date and time when the schedule indicates that the task will start.|Microsoft.VSTS.Scheduling.StartDate|DateTime| +|State|The current state of the work item. The valid values for state are specific to each type of work item.|System.State|String| +|Team Project|The team project to which this work item belongs.|System.TeamProject|String| +|Title|A short description that summarizes what the work item is and helps users to distinguish it from other work items in a list.|System.Title|String| +|Work Item Type|The name of the work item type.|System.WorkItemType|String| + +## <a name="measure"></a> Measure fields + Measure fields are written to the data warehouse and contain pre-calculated sum values. + +||||| +|-|-|-|-| +|**Field name**|**Description**|**Reference name**|**Data type**| +|Business Value|A subjective unit of measure that captures the relative business value of a product backlog item (Scrum process template only) or feature compared to other items of the same type. An item that is assigned a higher number should be considered as having more business value than an item that is assigned a lower number.|Microsoft.VSTS.Common.BusinessValue|Integer| +|Completed Work|A measure of the amount of work spent on a task.|Microsoft.VSTS.Scheduling.CompletedWork|Double| +|Effort|The relative rating for the amount of work that a product backlog item will require to implement. (Scrum process template only)|Microsoft.VSTS.Scheduling.Effort|Double| +|Original Estimate|A measure of the amount of work that is required to complete a task.|Microsoft.VSTS.Scheduling.OriginalEstimate|Double| +|Remaining Work|A measure of the amount of work that remains to finish a task.|Microsoft.VSTS.Scheduling.RemainingWork|Double| +|Size|The relative rating for the amount of work that a requirement will require to implement. (CMMI process template only)|Microsoft.VSTS.Scheduling.Size|Double| +|Story Points|A subjective unit of measure that captures the size of a user story. If you assign more points to a user story, you indicate that more work is required to implement it. (Agile process template only)|Microsoft.VSTS.Scheduling.StoryPoints|Double| + +## Related notes +- [Index of work item fields](../guidance/work-item-field.md) +- [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md) \ No newline at end of file diff --git a/docs/work/reference/resolve-errors-received-when-configuring-features.md b/docs/work/reference/resolve-errors-received-when-configuring-features.md new file mode 100644 index 00000000000..c296d61f22a --- /dev/null +++ b/docs/work/reference/resolve-errors-received-when-configuring-features.md @@ -0,0 +1,160 @@ +--- +title: Resolve errors received when configuring features | VSTS & TFS +description: Occurs when definitions in the team project conflict with definitions in the process templates uploaded to your team project collection. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: abab1c67-6aa8-494b-86ee-3bc97c650429 +ms.manager: douge +ms.author: kaelli +ms.date: 04/04/2017 +--- + + +# Resolve errors received when configuring features + +<b>TFS 2017 | TFS 2015 | TFS 2013</b> + +>[!IMPORTANT] +>This topic applies only to team projects defined on an on-premises Team Foundation Server (TFS). + +You may be able to resolve errors and warnings that the [Configure Features](http://msdn.microsoft.com/en-us/86ecc9d6-5175-4fa4-9da7-00b83ef14e17) wizard displays. These problems occur because definitions in the team project conflict with definitions in the process templates uploaded to your team project collection. You should change the process template to resolve the error and rerun the wizard. Or, you can change your team project and then rerun the wizard. + +> [!NOTE] +> If you encounter problems while performing the following procedures, you might find solutions in one of the TFS forums: [Work Item Tracking](http://go.microsoft.com/fwlink/?LinkId=248070) and [Process Templates](http://go.microsoft.com/fwlink/?LinkId=248071). + + **Required permissions** + +- To download and upload process templates, you must be a member of the **Project Collection Administrators** group. If security permissions are set explicitly, your **Manage process template** permission for the team project collection must be set to **Allow**. + +- To run the **witadmin** command-line tool, you must be a member of one of the following groups: **Team Foundation Administrators**, **Project Collection Administrators**, or **Project Administrators** for the team project. + + For more information, see [Permission reference](../../security/permissions.md). + +## <a name="errors"></a> Resolve errors reported by the Configure Features wizard + You can resolve an error by modifying the process template used to configure the new features, or by modifying your team project. After you've corrected the error, rerun the wizard. + +### <a name="process_template"></a> Resolve errors by modifying a process template + You modify a process template by performing these steps: + +1. Download the process template from Team Foundation Server. See [Download the latest process template](../guidance/manage-process-templates.md). + +2. Modify a definition file for a work item type (WIT), categories, or process configuration. See [Customize your work tracking experience](../customize/customize-work.md). + +3. Upload the process template to Team Foundation Server. See [Upload, download, and delete process templates](../guidance/manage-process-templates.md). + + See also [Update a customized process template to access new features](../customize/update-customized-process-template.md). + +### <a name="team_project"></a> Resolve errors by modifying your team project or team project collection + To resolve an error or warning, you may choose to modify the team project or team project collection using the **witadmin** command. See [witAdmin: Customize and manage objects for tracking work](witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md). + + You can export a type definition, make changes to field definitions, and then import the type definition as needed. See [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md). + +### <a name="issues"></a> Issues and resolutions + To resolve the errors listed in the following table, take the corresponding corrective actions, either to the process template or the team project, and then re-run the wizard. + +|Error|Issue|Process template resolution|Team project resolution| +|-----------|-----------|---------------------------------|-----------------------------| +|**TF400613: The work item type '{1}' specified in category '{0}' does not exist**.|A required WIT is missing from your team project because it was renamed, was removed, or was not added. Either rename the specified WIT definition, or import the missing WIT from the latest version of the process templates installed with the TFS upgrade.|Change the WIT defined in the specified category to specify an existing WIT.|To rename a WIT, use `witadmin renamewitd`. To add a missing WIT, locate it in the latest process template, and import it using `witadmin importwitd`. See [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md).| +|**TF400614: Category '{0}' does not exist**.|A required category is missing from the categories definition file in the process template that was selected to update your team project. Add the missing category.|Add the missing category to the process template. See [Use categories to group work item types](use-categories-to-group-work-item-types.md).|Add the missing category to the team project using `witadmin importcategories`. See [Import and export categories](witadmin/witadmin-import-export-categories.md)| +|**TF400617: The type of field '{0}' in work item type '{1}' conflicts with the type of the existing field**.|The data type of the field defined in the WIT being added does not match the data type defined in the team project collection. Correct the assignment in the WIT definition and then rerun the wizard. **Note:** The upgrade Visual Studio Team Foundation Server 2012 changes the **Description** field (System.Description) from a field type of plain text to HTML, in order to support text formatting and insertion of images and hyperlinks. In the latest version of Team Foundation Server, you can switch the data type between `PlainText` and `HTML`.|Download the process template, open the type definition, locate the `FIELD` assignment, modify the `type` attribute to match that defined for the collection, and then, upload the process template. See [FIELD (Definition) element reference](field-definition-element-reference.md), **Tip:** To determine the type assigned to a field, run `witadmin listsfields`.|Use **witadmin changefield** and specify the `type` attribute. See [Manage work item fields](witadmin/manage-work-item-fields.md). **Note:** You can change the type definition for the team project collection only when the type is `PlainText` or `HTML`.| +|**TF400618: The reporting type of field '{0}' in work item type '{1}' conflicts with the reporting type of the existing field**.|A reporting attribute assigned to a field in a WIT definition does not match the attribute defined in the team project collection.|Download the process template, open the type definition, locate the `FIELD` assignment and modify the `reportable` attribute to match that defined for the collection. Then, upload the process template. See [FIELD (Definition) element reference](field-definition-element-reference.md),|Use `witadmin changefield` and specify the `reportingtype` attribute. See [Manage work item fields](witadmin/manage-work-item-fields.md).| +|**TF400619: The** `SyncNameChanges` **of field '{0}' in work item type '{1}' conflicts with the SyncNameChanges of the existing field**.|The `syncnamechanges` attribute assigned to a field in a WIT definition does not match the attribute defined in the team project collection. This attribute specifies whether to update a person name field when that name changes in Active Directory.|Download the process template, open the type definition, locate the `FIELD` assignment, modify it to match the definition in the collection, and then, upload the process template. See [FIELD (Definition) element reference](field-definition-element-reference.md).|Use **witadmin changefield** command and specify the `/syncnamechanges` parameter. See [Manage work item fields](witadmin/manage-work-item-fields.md).| +|**TF400620: The friendly name of field '{0}' in work item type '{1}' conflicts with the friendly name of an existing field**.|The friendly name assigned to a field in a WIT definition must match that defined in the team project collection.|Download the process template, open the type definition, locate the `FIELD` assignment, and modify it to match that defined for the collection. Then, upload the process template.|To change the friendly name for the team project collection, use **witadmin changefield** command and specify the `/name` parameter. See [Manage work item fields](witadmin/manage-work-item-fields.md).| +|**TF400621: The reference name of field '{0}' in work item type '{1}' is already in use by a link type**.|Each reference name assigned to fields and link types must be unique within a team project collection.|If the link type is active and in use linking work items, download the process template, open the type definition, locate the `FIELD` assignment, and modify the `refname` assignment to match that defined for the collection. Then, upload the process template. **Tip:** To determine if a link type is in use, create a direct links query, and then filter for all work items that are linked to another work item using that link type.|If the link type is not active nor in use linking work items within the team project collection, delete it. You can use **witadmin deletelinktype** to delete a link type. See [Manage link types](witadmin/manage-link-types.md).| +|**TF400624: The friendly name of category '{0}' conflicts with category '{1}'**.|You must assign a unique reference name and friendly name to each category of a team project. You can resolve this error by renaming the existing category '{1}' either in the process template or in your team project.|Download the process template, modify the categories file to rename the category, and then upload the process template. See [Use categories to group work item types](use-categories-to-group-work-item-types.md).|Export the category file using `witadmin exportcategories`, modify the friendly name assigned to category '{1}', and import the file. See [Import and export categories](witadmin/witadmin-import-export-categories.md).| +|**TF400654: Unable to configure Planning Tools**.|A mapping defined in the ProcessConfiguration file specifies a field or state that does not exist in the WIT defined for the team project.<br /><br /> For example, if ProcessConfiguration contains a column mapping for a field that's not defined for any WIT within the corresponding category, then you'll receive this error.|Download the process template, modify the ProcessConfiguration file to correct the mapping, and then upload the process template. See [Process configuration](process-configuration-xml-element.md). |Export the WIT using `witadmin exportwitd`, add the missing field or state, and then import the WIT. See [Import, export, and manage work item types](witadmin/witadmin-import-export-manage-wits.md).| + + To learn more, see the following topics: + +- [Overview of process template files](../reference/process-templates/overview-process-template-files.md) +- [Define and modify work item fields](define-modify-work-item-fields.md) +- [Change the workflow](change-workflow-wit.md) +- [Add or modify work item fields to support reporting](add-or-modify-work-item-fields-to-support-reporting.md) + +## <a name="warnings"></a> Resolve warnings reported by the Configure Features wizard + To resolve the warnings listed in the following table, follow the resolution steps, and then re-run the wizard. + +|Warning|Issue|Resolution| +|-------------|-----------|----------------| +|**TF400609: Cannot add the action '{0}' to the work item type '{1}' because the state '{2}' does not exist.**|A required `STATE` is missing.|See [Resolve errors adding an ACTION statement to a work item type](#resolve_action).| +|**TF400610: Cannot add the action '{0}' to the work item type '{1}' because the transition from state '{2}' to '{3}' does not exist.**|A required `TRANSITION` statement is missing.|See [Resolve errors adding an ACTION statement to a work item type](#resolve_action).| +|**Storyboarding: Unable to insert tab to work item type '{1}' in category '{2}'.**|The `TabGroup` element is missing in the type definition.|See [Add the Storyboard links control](#storyboard).| + +<a name="resolve_action"></a> +### Resolve warnings about adding an ACTION statement to a work item type + To support the My Work feature, the Configure Features wizard inserts two `ACTION` statements into the workflow transition section of the definition for task WITs. If either the states or the transitions for moving from a new to an active state, or from an active to a new state are missing, you will receive a warning. + + To resolve the warnings, review the workflow for the indicated WIT. As needed, modify the workflow to match the workflow states and transitions that are defined for the latest version of the process template installed on the upgraded TFS that matches the one used to create your team project. Then, rerun the wizard. For team projects based on the Agile process template, see [Update the workflow for agile team projects](update-the-workflow-for-agile-team-projects.md). + + To learn more, see the following topics: + +- [Export and import work item types](witadmin/witadmin-import-export-manage-wits.md) +- [Change the workflow](change-workflow-wit.md) +- [Download the latest process template](../guidance/manage-process-templates.md) +- [Support bug update status using My Work](support-bug-update-status-using-my-work.md) + +### <a name="storyboard"></a> Add the Storyboard links control tab + With the addition of [Storyboarding](../office/storyboard-your-ideas-using-powerpoint.md), you can now link work items to storyboards. To do this, you add the **Storyboard** links control tab to the definition of the WIT. If the Configure Features wizard didn't or wasn't able to add the tab, then you can add it manually. In the latest versions of the process templates installed on the upgraded TFS, the **Storyboard** links control tab appears on all backlog WITs, such as Product Backlog, User Story, and Requirement. + +> [!NOTE] +> The Configure Features wizard cannot add the **Storyboard** links control tab if the `TabGroup` element is missing from the work item `FORM` section. The following procedure adds just the **Storyboard** tab. If you want to add the standard set of tabs for your backlog WIT, see the type definition in the latest version of the process template for your team project. See [Download the latest process template](../guidance/manage-process-templates.md). + +1. To run the **witadmin** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ``` + cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + +2. Export the type definition file for the backlog item by substituting your data for the arguments shown: + + ``` + witadmin exportwitd /collection:CollectionURL /p:"ProjectName" /n:"TypeName" /f:"DirectoryPath\FileName.xml" + + Where: +    CollectionURL specifies the URL of the team project collection +    ProjectName specifies the name of your team project defined within the collection +    TypeName specifies the name of your backlog item, for example User Story or Product Backlog Item. + + Use the following format for CollectionURL:  http://ServerName:Port/VirtualDirectoryName/CollectionName + For example: http://srvalm:8080/tfs/DefaultCollection. + + ``` + +3. Open the file using a text editor, such as Notepad. + +4. Add this code snippet just before the `</Layout>` end-tag of your backlog type: + + ``` + <TabGroup> + <Tab Label="Storyboards"> +    <Control Name="StoryboardsControl" Type="LinksControl"> +       <LinksControlOptions> +          <WorkItemLinkFilters FilterType="excludeAll" /> +          <ExternalLinkFilters FilterType="include"> +             <Filter LinkType="Storyboard" /> +          </ExternalLinkFilters> +          <LinkColumns> +             <LinkColumn RefName="System.Title" /> +             <LinkColumn LinkAttribute="System.Links.Comment" /> +          </LinkColumns> +       </LinksControlOptions> +    </Control> + </Tab> + </TabGroup> + ``` + +5. Save and close the file. + +6. Import the type definition file by typing this command, substituting your data for the arguments that are shown: + + ``` + witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\FileName.xml" + ``` + +7. Verify that the tab shows up in the backlog item. + +## Related notes + +- [Update a customized process template to access new features](../customize/update-customized-process-template.md) \ No newline at end of file diff --git a/docs/work/reference/specify-work-item-form-controls.md b/docs/work/reference/specify-work-item-form-controls.md new file mode 100644 index 00000000000..7c798ab6fb2 --- /dev/null +++ b/docs/work/reference/specify-work-item-form-controls.md @@ -0,0 +1,293 @@ +--- +title: Specify work item form controls | VSTS & TFS +description: Provides a quick reference to the Control element, its child elements, and attributes. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: eb87afdf-66f4-4607-94c9-3909fd208079 +ms.manager: douge +ms.author: kaelli +ms.date: 06/16/2017 +--- + + +# Specify work item form controls + +<p><b>TFS 2017 | TFS 2015 | TFS 2013 </b></p> + +>[!IMPORTANT] +>This topic applies to team project customization for the On-premises XML process model. For the Hosted XML process model, see [WebLayout and Control elements](weblayout-xml-elements.md). For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +For each field or form control that you want to display on a work item form, you add a `Control` element. You can customize a work item form to display information to help your team use the form correctly. You can add the work item fields and controls that enable you to enter and view the data that you want to track. + + The `Control` element provides several data-type values for the `Type` attribute that you can use to add fields or to display plain or hyperlinked text or fields. In addition, you can define special controls to add links and attachments, display Web-based content, or create your own control and add it to a work item form. + +You can control the label name, position, size of text box, and other display controls of plain text, integer, number, date, and tree path work item fields on your work item form. To display these fields, you must specify the correct `Control` element `Type` attribute, from the following options: + +- `FieldControl`: Used to display plain textual or numeric fields and lists of values for fields that have a field type of `Boolean`, `String`, `Identity`, `Integer`, `Double`, and `PlainText`. + +- `HtmlFieldControl`: Used to display multiline, rich-text format of fields that have a field data type of `HTML`. + +- `DateTimeControl`: Used to display formatted date fields that have a field type of `DateTime`. + +- `WorkItemClassificationControl` Used to display the hierarchical path fields that have a field type of `TreePath`. + + +<a name="fields"></a> +##Add work item fields + When you customize your work item form, you typically add a subset of the work item fields that are defined for the work item type that you want to appear on the form. The field definitions control many aspects of which data displays or which data that you can enter into the form. For more information, see [Modify a field or add a custom field](../customize/add-modify-field.md). + + Each work item field is associated with a data type. Use the `Label` attribute to specify the text that displays next to the control. Use the related `LabelPosition` attribute to specify where the label appears relative to the control. + +> [!NOTE] +> You can't change the values of system fields, which are updated automatically. For example, the Created Date and Created By fields are defined when a work item is first saved. However, you can use these fields in search criteria. For a description of each system field, see [Work item field index](../guidance/work-item-field.md). + + +## Add a numeric field + +Use `FieldControl` to provide a control field for an Integer field. + +``` +<Control FieldName="System.Id" Type="FieldControl" Label="Id" LabelPosition="Left" /> +``` + +Use `FieldControl` to provide a text field for the input or display of Double fields. + +``` +<Control FieldName="ABC_Company.Statistics.Analysis" Type="FieldControl" Label="Analysis %" LabelPosition="Left" /> +``` + +## Add a plain text or string field + +Specify the `String` control when you want to add a string field, such as used in pick lists or short text, that is limited to 255 characters. + +``` +<Control FieldName="Microsoft.VSTS.DocName" Type="FieldControl" Label="Vision Doc Location" LabelPosition="Left" /> +``` + +Specify the `PlainText` control when you want to capture text that that contains descriptions that may be larger than 255 characters. + +``` +<Control FieldName="System.Title" Type="FieldControl" Label="Title" LabelPosition="Left" /> +``` + + +<a id="boolean-field"> </a> +### Add a checkbox or Boolean field + +>[!NOTE] +><b>Feature availability:</b>The Boolean data type is supported for Hosted XML (VSTS) and for On-Premises XML, for TFS 2017.2 and later versions. + +Use the following syntax to add a Boolean field within the **FIELDS** section of the WIT definition. + +``` +<FIELD name="Triage" refname="Fabrikam.Triage" type="Boolean" > + <DEFAULT from="value" value="False" /> +        <HELPTEXT>Triage work item</HELPTEXT> +      </FIELD> +``` + +And then add the following syntax within the **FORM** section to have the field appear on the form. + +``` +<Control Label="Triage" Type="FieldControl" FieldName="Fabrikam.Triag" /> +``` + +The field will appear as a checkbox on the form. + + + +<a name="Date"></a> +##Add Date or Calendar fields +You use the `DateTimeControl` type to give users a calendar picker to select a date for a `DateTime` field. By using this control, you can quickly select a date and time for the field. + +**Calendar Field with Format="Short"** +![Calendar field](_img/alm_wit_custom_calendarfield.png "ALM_WIT_Custom_CalendarField") + +For example, you can specify a preferred start date or a review date that is in the future. + +``` +<Control Type="DateTimeControl" FieldName="MyCompany.EnvironmentCR.PreferredStart" +Label="Preferred Start Date:" LabelPosition="Left" Format="Short" /> +<Control Type="DateTimeControl" FieldName="MyCompany.EnvironmentCR.PreferredStartTime" +Label="Preferred Start Time:" LabelPosition="Left" Format="Time" /> +``` + + You can control the format of the `DateTime` field by using the optional attributes that are described in the following table. + +|Attribute|Description| +|---------------|-----------------| +|`Format`|Specifies the format for the date-time field that corresponds to one value of the DateTimePickerFormat enum. Valid values are as follows: `Custom`, `Long`, `Short`, `Time`.<br /><br /> When you specify `Custom`, you must also set the `CustomFormat` attribute.| +|`CustomFormat`|Specifies the custom format that is used for the date-time field that corresponds to the syntax that is defined for the DateTimePicker.CustomFormat property. For example:<br /><br /> Format="Custom"<br /><br /> CustomFormat = "MMM dd, 'of the year' yyyy"<br /><br /> For more information, see the Microsoft Web site: [DateTimePicker.CustomFormat Property](http://go.microsoft.com/fwlink/?LinkId=148757).| + + +## Add a rich-text (HTML) field + +Specify the `HTMLControl` to add an `HTML` field to capture rich-text formatting, as shown in the following illustration. + +`<Control Type="HtmlFieldControl" FieldName="Microsoft.VSTS.Notes" Label="Notes" Dock="Fill" />` + +![HTML field shown on work item form](_img/alm_wit_custom_htmlfield.png "ALM_WIT_Custom_HTMLField") + +> [!TIP] +> When you add several `HTMLFieldControl` elements on a form that will be stacked vertically, you should specify the `MinimumSize` attribute for each field control. In this manner, you can make the text boxes all a similar size. Otherwise, the last HTML control element is sized to fill the form, and the previous elements appear together with smaller text boxes. + +## Add a plain or hyperlinked text control + +Use the `LabelControl` to display plain or hyperlinked text that is not associated with a field, as shown in the following illustration. + +You use the `LabelText` and `Link` child and container elements to specify the text, hyperlink, and position of a field or label whose text is partly associated with a hyperlink. For more information, see [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md), [LabelText and Text](labeltext-and-text-xml-elements-reference.md), and [Link and Param](link-param-xml-elements-reference.md). + +![Example of two hyperlinks applied to text](_img/wit_ss_hyperlinkcombolabel.png "WIT_SS_HyperlinkComboLabel") + + + +## Add a web page control +Use `WebpageControl`to display Web content in a work item form. This control is usually contained in its own tab group. You use the `WebpageControlOptions` and `Link` child elements to specify the controls that are required to load the Web page target in the work item form. + +For more information, see [Edit a WIT definition to add web content to a work item form](edit-wit-definition-add-web-content-form.md), [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md), and [Link and Param](link-param-xml-elements-reference.md). + + +## Add a links control + +You use `LinksControl` to create and manage links between work items. This control is usually contained in its own tab group, as shown in the following illustration. + +![Example of links control added to a work item form](_img/wit_ss_linkscontrol.png "WIT_SS_LinksControl") + +You can also use the `LinksControlOptions` to define the link filters and layout of column fields that are used to display the list of links. For more information, see [Define link controls to restrict link relationships](define-link-controls.md) and [LinksControlOptions](linkscontroloptions-xml-elements.md). + +## Add a Storyboards control + +Use the `StoryboardsControl` to open PowerPoint Storyboarding from a work item and link to Storyboard files saved to a network share. This control is usually contained in its own tab group, as shown in the following illustration. + +![Storyboard links control](_img/alm_twa_storyboard_linkscontrol.png "ALM_TWA_Storyboard_LinksControl") + +To add the `StoryboardsControl` to the `FORM` section, add the following code snippet: + +``` +<Tab Label="Storyboards"> + <Control Name="StoryboardsControl" Type="LinksControl"> + <LinksControlOptions> + <WorkItemLinkFilters FilterType="excludeAll" /> + <ExternalLinkFilters FilterType="include"> + <Filter LinkType="Storyboard" /> + </ExternalLinkFilters> + <LinkColumns> + <LinkColumn RefName="System.Title" /> + <LinkColumn LinkAttribute="System.Links.Comment" /> + </LinkColumns> + </LinksControlOptions> + </Control> + </Tab> +``` + + +<a name="AreaIteration"></a> +## Add area and iteration paths (TreePath control) + +You use the `WorkItemClassificationControl` type to add fields whose data type is `TreePath`. This control provides support to display area path fields and iteration path fields in a hierarchical, nested tree format. The tree shows hierarchical nodes that you can expand and collapse. + +``` +<Control Type="WorkItemClassificationControl" FieldName="System.AreaPath" Label="Area"LabelPosition="Left" /> +``` + +> [!NOTE] +> You can use the `WorkItemClassificationControl` to display the `System.AreaPath` and `System.IterationPath` fields. You cannot display any other type of field or custom field by using this control. + + +## Add the history control + +You use the `WorkItemLogControl` to provide a control field for the History field that tracks discussion threads and other historical information, as shown in the following illustration. + +![History tab and field on work item form](_img/alm_wit_history.png "ALM_WIT_History") + +You can use this control only to support the display of the history field of a work item, the System.History work item field. By using this control, you can expand and collapse details about historical revisions to a work item. You can also format text that you add to the history field. + +``` +<Control Type="WorkItemLogControl" FieldName="System.History" Label="Detailed Description and History" LabelPosition="Top" Dock="Fill" /> +``` + +## Add the attachment control + +Use the `AttachmentsControl` to attach files to a work item form. This control is usually contained in its own tab group, as shown in the following illustration. + +![Attach files to a work item](_img/procguid_attachment.png "ProcGuid_Attachment") + +For more information, see [Add the Attachments control](add-the-attachments-control.md). + + +## Related notes + +<a name="custom"></a> +In addition to the built-in controls provided, you may find additional controls you can use from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/search?target=VSTS&category=Plan%20and%20track&sortBy=Downloads). Or, you can create your own control. See [Extend the work item form](../../extend/develop/add-workitem-extension.md). + +- [Control XML element reference](control-xml-element-reference.md) +- [WebLayout and Control elements](weblayout-xml-elements.md) +- [Change the work item form layout](change-work-item-form-layout.md) +- [Edit a WIT definition to add web content to a work item form](edit-wit-definition-add-web-content-form.md) +- [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md) +- [Define link controls to restrict link relationships](define-link-controls.md) +- [Add the Attachments control](add-the-attachments-control.md) + + + +<a name="Labeling"> </a> +### Label fields and add fields in two places on the form + For each form control, you can specify an optional label and the position of the label by using the `Label` and `LabelPosition` attributes. The label can specify a different name than the friendly name that is assigned by the `FIELD` element. If you do not specify a label, the friendly name is used. However, note that the friendly name is always used when a team member runs a query to search for work items. The maximum label size is 80 characters. + +> [!NOTE] +> You must define the same label position to all controls that are defined in the same group. + +If you want to add the field in more than one area of the form, such as on the top of the form and on a tab, you can do so by using the `Name` attribute. The `Name` attribute just identifies the control as distinct from the other control that is added to the form. + +<a name="ReadOnly"></a> +### Make a field Read-Only +You can mark a field as read-only in one of two ways. In the first method, you add the `READONLY` element as a child to the `FIELD` element in the `FIELDS` section of the type definition. By using the `READONLY` element, you can specify whether certain users can modify the field. As shown in the following example, only program managers can modify a Sub-Title field. + +``` +<FIELD name="Sub-Title" refname="ACME.ACE.SubTitle" type="String" > +<READONLY for="[Global]\Team Foundation Valid Users" not="Program Managers"/> +</FIELD> + +``` + +In the second method, you specify the `ReadOnly` attribute for the `CONTROL` element. In this method, all users are restricted from modifying the field. + +``` +Control FieldName=" ACME.ACE.SubTitle" Type="FieldControl" Label="Sub-Title" LabelPosition="Left" ReadOnly="True" /> + +``` + +<a name="Size"></a> + +### Optional control element field attributes for all control types + The following optional attributes can be specified only for those control types that are listed. + +> [!NOTE] +> The overall size of each data entry field is determined by several factors: the attributes that are assigned to the field, the size of the container, and the area that is allocated to other fields on the form. Default values are assigned to fields when you do not specify a minimum size. However, attributes that are assigned to other fields in the form can affect the size of fields. The number of columns and the horizontal size that you allocate to the largest field in each column determine the horizontal dimension of a form. The number of fields that you specify in a vertical group and the vertical size that you allocate to each field determine the size of the top of the form and also the size of the bottom of the form. + + +|Attribute|Description| +|---------------|-----------------| +|`Field`|Specifies the control that is associated with the work item field.| +|`Label`|Specifies the visible text on the form that identifies the control. Specify a string of no more than 80 characters.<br /><br /> **Note:** You can attach a hyperlink to the label of a field that is added to the work item form by using `FieldControl`. This control is useful for providing a link to information about how the field is used. For more information, see [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md).| +|`LabelPosition`|Specifies the position of the label that is relative to the control data. Specify a string from one of the following values: `Top`, `Bottom`, `Left`, and `Right`.| +|`Dock`|Specifies the alignment of the label with the specified side of the container, or stretches the field to fill the container. Specify a string from one of the following values: `Fill`, `Top`, `Bottom`, `Left`, and `Right`.| +|`Padding`|Specifies the amount of space, in pixels, around the inside border of the control. Four values are provided that correspond to the top, bottom, left, and right. For example: (2,0,2,0).| +|`Margin`|Specifies the amount of space, in pixels, around the outside border of the control. Four values are provided that correspond to the top, bottom, left, and right. For example: (2,0,2,0).| +|`ReadOnly`|Specifies that the field is read-only. Specify `True` or `False`.| +|`MinimumSize`|Specifies the minimum size, in pixels, that the control should occupy in the form. Two values are specified that correspond to the width and height. For example: (100,100).| +|`Name`|Uniquely identifies a control. The `Name` attribute is required if more than one control on the form is associated with the same work item field.<br /><br /> **Note:** You use the `Name` attribute to display the same field in more than one area on the form. You specify a unique value for the `Name` attribute for both control entries so that the system identifies each control uniquely. It is useful to show the same control in various locations based on the context of tabs.| + +### Optional control element field attributes for specific control types + The following optional attributes can be specified only for those control types that are listed. + +|Attribute|Control types|Description| +|---------------|-------------------|-----------------| +|`NumberFormat`|`FieldControl`|Specifies the characters that you can enter in the field control. The following values are valid: `WholeNumbers`, `SignedWholeNumbers`, `DecimalNumbers`, and `SignedDecimalNumbers`.| +|`MaxLength`|`FieldControl`|Specifies the maximum length of characters that you can use for a field control.| +|`Format`|`DateTimeControl`|Specifies the format for the date-time field that corresponds to one value of the DateTimePickerFormat enum. The following values are valid: `Custom`, `Long`, `Short`, `Time`.| +|`CustomFormat`|`DateTimeControl`|Specifies the custom format that is used for the date-time field that corresponds to the syntax that is defined for the DateTimePicker.CustomFormat property.| + + diff --git a/docs/work/reference/support-bug-update-status-using-my-work.md b/docs/work/reference/support-bug-update-status-using-my-work.md new file mode 100644 index 00000000000..391e6729319 --- /dev/null +++ b/docs/work/reference/support-bug-update-status-using-my-work.md @@ -0,0 +1,141 @@ +--- +title: Support bug update status using My Work | VSTS & TFS +description: Update the ProcessConfiguration bug category states to support code review requests working from Visual Studio +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 355d8fb4-d8fa-49ad-b1a2-7baaec3556cc +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# Support bug update status using My Work + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +With My Work in Team Explorer you can conduct and respond to code reviews. If you have customized the workflow states for work item types (WITs) that you use to track bugs, you may need to update the process configuration state-to-metastate mappings. **My Work** uses these mappings to update the bug state as developers update the bug status using My Work. **My Work** allows developers to manage their work in progress, suspend and resume work, and request code reviews. See [Day in the life of a Developer: Suspend work, fix a bug, and conduct a code review](../../tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md). + + You specify all the WITs that you use to track bugs in the definition for the Bug Category, and you define state-to-metatstates mappings in the ProcessConfiguration. Changes that you make to the definition files apply for all teams that work in the team project that you customize. + + **Requirements** + +- To access **My Work**, you must use Team Foundation Version Control (TFVC) for your source control. + +- To run the **witadmin** command-line tool, you must be a member of the **Team Foundation Administrators** group or a member of the **Project Administrators** group for the team project. For more information, see [Add an administrator](../../security/set-project-collection-level-permissions.md). + +<a name="default"></a> +##Default metastate assignments made to workflow states for bugs + The following table lists the default metastates assigned to the bug workflow states for the Agile and CMMI process templates. You only need to assign a metastate to a workflow state that you want to show up on the task board or for My Work to recognize. The default assignments include the typical workflow progression from **Active** or **Proposed** to **Closed**. If your bugs contain workflow states outside this progression, such as a Removed state, then you exclude those states in your metastate assignments. + +**Agile** + +``` +<BugWorkItems category="Microsoft.BugCategory"> + <States> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="Resolved" /> + <State value="Closed" type="Complete" /> + </States> +</BugWorkItems> +``` + +**CMMI** +``` +<BugWorkItems category="Microsoft.BugCategory"> + <States> + <State value="Proposed" type="Proposed" /> + <State value="Active" type="InProgress" /> + <State value="Resolved" type="Resolved" /> + <State value="Closed" type="Complete" /> + </States> +</BugWorkItems> +``` + +<a name="add"></a> + +##Add WITs to the Bug category +You add WITs to a category by updating the [Categories definition file](categories-xml-element-reference.md) and importing it to your team project. Follow the [customization sequence](../customize/customize-work.md) that matches your process model. + +<!--- +1. To run the **witadmin** command-line tool, open a Command Prompt window where either Visual Studio or Team Explore is installed and enter: + + ``` + cd %programfiles%\Microsoft Visual Studio 14.0\Common7\IDE + ``` + + On a 64-bit edition of Windows, replace **%programfiles%** with **%programfiles(x86)%**. + +2. Type the following command, and substitute your data for the arguments that are shown here, where *CollectionURL* specifies the URL of a team project collection, *ProjectName* specifies the name of a team project defined within the collection, and *DirectoryPath* specifies the name and location for the file to export. Then choose Enter. + + ``` + witadmin exportcategories /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\categories.xml" + ``` +--> +0. Open the categories file in Notepad and locate the `CATEGORY` element for the `"Bug Category"`. + +0. To add a new type of work item, add a `WORKITEMTYPE` element that specifies the reference name of a work item type that you want to add. + + For example, the following syntax adds the work item type of "Performance Bug" to the bug category. + + ``` + <CATEGORY name="Bug Category" refname="Microsoft.BugCategory"> +    <DEFAULTWORKITEMTYPE name="Bug" /> +    <WORKITEMTYPE name="Performance Bug" /> + </CATEGORY> + ``` + +0. Import the modified definition file. + +<!--- + ``` + witadmin importcategories /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\categories.xml" + ``` + +--> + +<a name="assign"></a> +##Assign metastates to workflow states defined for bugs + You assign metastates to the workflow states of bugs within the `BugWorkItems` element in the definition for ProcessConfiguration. Follow the [customization sequence](../customize/customize-work.md) that matches your process model. + +<!--- +1. From the Command Prompt window for **witadmin**, type the following command and substitute your data for the arguments that are shown here, where *CollectionURL* specifies the URL of a team project collection, *ProjectName* specifies the name of a team project defined within the collection, and *DirectoryPath* specifies the name and location for the file to export. Then choose Enter. + + ``` + witadmin exportprocessconfig /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\ProcessConfiguration.xml" + ``` +--> +2. Open ProcessConfigurations in Notepad and locate the `BugWorkItems` element. + +3. Update the values assigned to the `State` elements to match the values used in the workflow for the types of work items that you use to track bugs. + +4. (Optional) To add another state that is present within the workflow, specify another `State` element that maps to the workflow state of the work item type included within the Bug Category. + + For example, the following syntax adds the state value of `"Investigating"`, to `"inProgress"`. + + ``` + <BugWorkItems category="Microsoft.BugCategory"> +    <States> +       <State value="Active" type="InProgress" /> +       <State value="Investigating" type="InProgress" /> +       <State value="Resolved" type="Resolved" /> +       <State value="Closed" type="Complete" /> +    </States> + </BugWorkItems> + ``` + + > [!IMPORTANT] + > You must specify a value for the `State` element that corresponds to a valid workflow state. A valid workflow state is one that has been defined for a work item type that is included in Bug Category for your team project. Also, you must assign a metastate type within the Agile or Bug group, that is `Proposed`, `InProgress`, `Resolved`, or `Complete`. + +5. Import the modified definition file. + +<!--- + ``` + witadmin importprocessconfig /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\ProcessConfiguration.xml" + ``` + +--> + +## Related notes +- [ProcessConfiguration](process-configuration-xml-element.md) +- [Use categories to group work item types](use-categories-to-group-work-item-types.md) +- [Import and export process configuration](../reference/witadmin/witadmin-import-export-process-configuration.md) +- [Import and export categories](../reference/witadmin/witadmin-import-export-categories.md) \ No newline at end of file diff --git a/docs/work/reference/support-rollup-of-work-and-other-fields.md b/docs/work/reference/support-rollup-of-work-and-other-fields.md new file mode 100644 index 00000000000..d917027bbb7 --- /dev/null +++ b/docs/work/reference/support-rollup-of-work-and-other-fields.md @@ -0,0 +1,111 @@ +--- +title: Support rollup of work and other fields | VSTS & TFS +description: Provides summed values of select fields for all child work items of a parent. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 03d26ae1-cbfa-4156-82e3-1d2fc27f48f3 +ms.manager: douge +ms.author: kaelli +ms.date: 06/01/2017 +--- + + +# Support rollup of work and other fields + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +Rollup provides summed values of select fields for all child work items of a parent. Because Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) support multiple levels of nesting, when you perform rollup, you want to make sure you don't double-count values. Most project managers are interested in getting rollup of estimated or completed work, effort, size, or story points. + +>[!NOTE] +>The system doesn't support rollup of the Effort, Story Points, or Size fields across product backlogs and portfolio backlogs. + +## Native support of rollup within the web portal + +You can view rollup of Remaining Work from a sprint backlog or task board. + +From the sprint backlog, the sum of all Remaining Work defined for all tasks is displayed for the parent work item. This value will also display on the parent work item card when you view the task board. + +![Sprint backlog displays rollup of Remaining Work](_img/alm_rup_remworkiteration.png "ALM_RUP_RemWorkIteration") + +From a sprint task board, there are three types of rollup: +- The rollup of Remaining Work displays on the card for the parent work item +- The sum of all Remaining Work defined for all tasks within a column displays at the top of each column +- The sum of all Remaining Work defined for all tasks for a backlog item displays within each row, grouped by column. + +<img src="../scrum/_img/ALM_TB_Intro.png" alt="Task board, collapsed backlog items" style="border: 2px solid #C3C3C3;" /> + +When you update the status of a task as Completed, the system automatically zeros out the Remaining Work for that task. To learn more, see [Task board](../scrum/task-board.md). + + +## Other tools that support rollup + +You can obtain rollup of additional data fields in VSTS or TFS data by using one of the following methods: + +|Method|Team Services|On-premises TFS| +|------------|----------|----------------------| +|Microsoft Project|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|Microsoft Excel|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|SQL Server Reporting Services report|![Not supported](_img/icon_witerror.png "Icon_WITerror")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|TFS-Project Server integration|![Not supported](_img/icon_witerror.png "Icon_WITerror")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|Custom plug-in or extension|![Not supported](_img/icon_witerror.png "Icon_WITerror")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| + + +### Microsoft Project + Project natively supports rollup of summary tasks. With Project, you can round trip TFS data to obtain rollup values. + + ![Task board displays round-trip rollup from Project](_img/alm_rup_roundtriprollup.png "ALM_RUP_RoundTripRollup") + + To learn how, see [Rollup estimated and actual work](../office/rollup-estimated-and-actual-work-using-project.md). + +### Microsoft Excel + You can export a query to Excel that contains the work items you want to provide rollup. You can then write an Excel macro to get the sums and publish data back to TFS. To learn more about Excel and TFS integration, see [Bulk add or modify work items with Excel](http://msdn.microsoft.com/en-us/67595fec-a872-43e3-b934-9dd1a766218c). + + To learn more about Excel macros, see [Automate tasks with the Macro Recorder](https://support.office.com/article/Automate-tasks-with-the-Macro-Recorder-974ef220-f716-4e01-b015-3ea70e64937b). + +### SQL Server Reporting Services report + Several OOB reports provide rollup. Here's an example of rollup of completed and remaining work that the Stories Overview report provides. This report is part of the default TFS Agile process template. + + ![Stories Overview example report](_img/procguid_agilereports.png "ProcGuid_AgileReports") + + If you have SQL Server Analysis Services deployed, you can get rollup for backlog items from these reports. The refresh frequency for these reports is 2 hours. + +- [Backlog Overview](../../report/sql-reports/backlog-overview-scrum.md) + +- [Stories Overview](../../report/sql-reports/stories-overview-report-agile.md) + +- [Requirements Overview](../../report/sql-reports/requirements-overview-report-cmmi.md) + + If you need to add reports to your on-premises TFS deployment, see [Add reports to a team project](../../report/admin/add-reports-to-a-team-project.md). + +### TFS-Project Server integration + Like Project, Project Server natively supports rollup of summary tasks. If you have TFS-Project Server integration deployed, then you have rollup. To learn about how fields are synchronized, see [Understand how updates to specific fields are managed](../tfs-ps-sync/understand-how-updates-to-specific-fields-managed.md). If you need to add fields or change how fields are mapped, see [Customize the field mapping](../tfs-ps-sync/customize-field-mapping-tfs-project-server.md). + +### Custom control or plug-in + You can write an extension using the [REST API for work tracking](https://visualstudio.com/integrate/api/wit/overview.md) to get rollup. A code sample available on github that can get you started is [TFS Aggregrator](https://tfsaggregator.github.io/). + +<a name="requirements"></a> +## Rollup requirements + To support rollup, structure your work items according to the following recommendations: + +- Use parent-child links to link work items that contain values that you want to rollup. + +- Add required fields to the WITs that will capture the rollup values. Default fields used to schedule work are only present on the task work item. These fields are: + + - Original Estimate (Microsoft.VSTS.Scheduling.OriginalEstimate): The amount of work required to complete a task. (Agile and CMMI) + + - Completed Work (Microsoft.VSTS.Scheduling.CompletedWork): The amount of work that has been spent implementing a task. (Agile and CMMI) + + - Remaining Work (Microsoft.VSTS.Scheduling.RemainingWork): This field is used to support burndown charts. + + If your team project was created using the Visual Studio Scrum process template, only Remaining Work is defined in the task. + + To learn more about adding fields, see [Modify a field or add a custom field](../customize/add-modify-field.md). + +- Determine the unit of time used to track work and make sure it is used consistently across your team or organization. For example, you can track tasks using hours or days. + +- Determine if you want to make rollup values read-only on the work item form. By making them read-only you prevent users from entering inaccurate data. You make fields read-only using the `Control` field `Readonly` attribute. + +## Q & A + +### Q: Can I get rollup of team capacity? + **A:** No. The data entered for team capacity isn't stored in the regular data stores. \ No newline at end of file diff --git a/docs/work/reference/tab-xml-element-reference.md b/docs/work/reference/tab-xml-element-reference.md new file mode 100644 index 00000000000..1ffc109becf --- /dev/null +++ b/docs/work/reference/tab-xml-element-reference.md @@ -0,0 +1,102 @@ +--- +title: Tab XML element reference | VSTS & TFS +description: Uses to cluster a group of fields or to support one or more special controls. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: fe932d65-20d4-46ab-aca0-f4a8423929b4 +ms.manager: douge +ms.author: kaelli +ms.date: 02/14/2017 +--- + +# Tab XML element reference + + +**TFS 2015 | TFS 2013** + +>[!IMPORTANT] +>This topic applies to team project customization for the On-premises XML process model and the old work item form. For the Hosted XML process model and TFS 2017 and later versions that use the new work item form, see [WebLayout and Control elements](weblayout-xml-elements.md). For the Inheritance process model, see [Customize a process](../process/customize-process.md). +> +>For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + + +You use the **Tab** element to cluster a group of fields or to support one or more special controls, such as the controls that link work items, display the work item history, or to attach files. + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<Tab Label="LabelText" Padding="(left, top, right, bottom)" Margin="(left, top, right, bottom)"> + <Group> . . . </Group> + <Control> . . . </Control> + <TabGroup> . . . </TabGroup> + <Splitter> . . . </Splitter> +</Tab> +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Attributes + +|Attribute|Description| +|---------------|-----------------| +|`Label`|Required `TabType` attribute.<br /><br /> The label for a set of grouped elements.| +|`Padding`|Optional `TabType` attribute.<br /><br /> The amount of space in pixels around the inside border of the control.| +|`Margin`|Optional `TabType` attribute.<br /><br /> The amount of space in pixels around the outside border of the control.| + +### Child elements + +|Element|Description| +|-------------|-----------------| +|[Group](all-form-xml-elements-reference.md)|Optional. Defines a group of elements to display together on the form.| +|[Control](control-xml-element-reference.md)|Optional. Defines a field that is to appear on the form.| +|[TabGroup](all-form-xml-elements-reference.md)|Optional. Contains one or more `Tab` elements.| +|[Splitter](all-form-xml-elements-reference.md)|Optional. Defines a splitter and its orientation on the form between sibling form elements.| + +### Parent elements + +|Element|Description| +|-------------|-----------------| +|[TabGroup](all-form-xml-elements-reference.md)|Optional. Contains one or more `Tab` elements.| + +## Remarks + `Tab` is a required child element of `TabGroup`. + +## Example + +> [!div class="tabbedCodeSnippets"] +```XML +<FORM> + <Layout> + . . . + <TabGroup> + <Tab Label="Planning"> + <Group Label="Status" Padding="(0,0,0,3)"> + <Column PercentWidth="100"> + <Control FieldName="Microsoft.DevDiv.Importance" Type="FieldControl" Label="Importance" LabelPosition="Left" /> + <Control FieldName="Microsoft.DevDiv.Commitment" Type="FieldControl" Label="Commitment / Confidence" LabelPosition="Left" /> + . . . + </Column> + </Group> + </Tab> + <Tab Label="Description"> + <Group> + <Column PercentWidth="100"> + <Control FieldName="System.Description" Type="HtmlFieldControl" Label="Value Proposition Description" LabelPosition="Top" /> + </Column > + </Group> + </Tab> + . . . + </TabGroup> + </Layout> +</FORM> +``` + + +## Related notes + +- [Control](control-xml-element-reference.md) +- [Specify work item form controls](specify-work-item-form-controls.md) +- [Design the work item form](design-work-item-form.md) +- [All FORM elements](all-form-xml-elements-reference.md) \ No newline at end of file diff --git a/docs/work/reference/transition-xml-element.md b/docs/work/reference/transition-xml-element.md new file mode 100644 index 00000000000..a841696cc4c --- /dev/null +++ b/docs/work/reference/transition-xml-element.md @@ -0,0 +1,101 @@ +--- +title: TRANSITION XML element | VSTS & TFS +description: Syntax and usage of the TRANSITION element used to specify a valid progression or regression from one state to another for a work item type +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: bb4ced9a-bebb-4011-8646-4beb94655afa +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# TRANSITION XML element + +<b>VSTS (Hosted XML) | TFS 2017 | TFS 2015 </b> + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You use the **TRANSITION** element to specify a valid progression or regression from one state to another for a type of work item. The **TRANSITION** element is a required child element of the **TRANSITIONS** element. + +To modify the workflow, you modify the definition for a work item type. See [Modify or add a custom work item type](../customize/add-modify-wit.md). + + + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<TRANSITION from="NameOfStartingState" to="NameOfEndingState" for="UserGroupName" not="UserGroupName"> +    <ACTIONS> . . . </ACTIONS> +    <REASONS> . . . </REASONS> +    <FIELDS> . . . </FIELDS> +</TRANSITION> +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Attributes + +|Attribute|Description| +|---------------|-----------------| +|`from`|Required. The name of the state from which the work item is transitioning.| +|`to`|Required. The name of the state to which the work item is transitioning.| +|`for`|`Transition` attribute.<br /><br /> Optional. The name of a user or group who is allowed to perform the transition.| +|`not`|`Transition` attribute.<br /><br /> Optional. The name of a user or group who is restricted from performing the transition.| + +### Child elements + +|Element|Description| +|-------------|-----------------| +|[ACTIONS](all-workflow-xml-elements-reference.md)|Optional. Defines a collection of `ACTION` elements that each define an action string that can be used when calling the `WorkItem.GetNextState` method to get the post-action state of the work item.| +|[REASONS](all-workflow-xml-elements-reference.md)|Required. A collection of `DEFAULTREASON` and `REASON` elements that define valid reasons the work item can complete the transition.| +|[FIELDS (Workflow)](all-workflow-xml-elements-reference.md)|Optional. A collection of `FIELD` (Workflow) elements that reference the field definitions that are defined for the type of work item.| + +### Parent elements + +|Element|Description| +|-------------|-----------------| +|[TRANSITIONS](all-workflow-xml-elements-reference.md)|Required. A collection of `TRANSITION` elements that define the valid state transitions for the work item type.| + +## Remarks + `TRANSITION` is a required child element of `TRANSITIONS`. + + You must define exactly one transition to move the work item from nothing (`from`="") to a named state such as Active. This transition identifies the default state for a new work item. + + All valid transitions between two states must be specified. If no transition is specified, then by default no transition is allowed. + + Additionally, you can optionally use the attributes `for` and `not` in the transition element of workflow to refine who is and who is not able to perform a transition. When you do this, `denies` takes precedence over `allows`. If neither of these attributes is specified, anyone can modify the work item. + + Multiple groups are supported only by creating a parent group and specifying that parent group in the `TRANSITION` element. To learn more about the for and not attributes, see [Apply a field rule](apply-rule-work-item-field.md). + +## Example + In the following example, the reasons are defined for the transition from the **Active** to the **Resolved** workflow state. + +> [!div class="tabbedCodeSnippets"] +```XML +<TRANSITION from="Active" to="Resolved"> + . . . + <REASONS> + <DEFAULTREASON value="Fixed"/> + <REASON value="Deferred"/> + <REASON value="Duplicate"/> + <REASON value="As Designed"/> + <REASON value="Unable to Reproduce"/> + <REASON value="Obsolete"/> + </REASONS> + . . . +</TRANSITION> +``` + +## Example + In the following rule, the ability to transition a work item from the **Resolved** to the **Completed** state is restricted to all project testers, except for new testers who have just joined the team. + +> [!div class="tabbedCodeSnippets"] +```XML +<TRANSITION from="Resolved" to="Complete" for="[project]\AllTesters" not="[project]\NewTesters"> +</TRANSITION> +``` + +## Related notes +- [Change the workflow](change-workflow-wit.md) +- [Customize your work tracking experience](../customize/customize-work.md) diff --git a/docs/work/reference/update-a-team-project-manually-to-support-test-management.md b/docs/work/reference/update-a-team-project-manually-to-support-test-management.md new file mode 100644 index 00000000000..8b89da68379 --- /dev/null +++ b/docs/work/reference/update-a-team-project-manually-to-support-test-management.md @@ -0,0 +1,158 @@ +--- +title: Update a team project manually to support test management | VSTS & TFS +description: Update a team project manually to support test management. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: edbe689d-7863-4273-916f-b7e93b7f00b3 +ms.manager: douge +ms.author: kaelli +ms.date: 03/16/2017 +--- + + +# Update a team project manually to support test management + +**TFS 2017 | TFS 2015 | TFS 2013** + +>[!IMPORTANT] +>This topic applies to a team project that is defined on an on-premises Team Foundation Server (TFS)and was created using a process template that doesn't have test plans and test suites work item types. + +When you upgrade your existing on-premises deployment to Team Foundation Server (TFS) 2013.3, you have the ability to customize test plans and test suites because these objects are now remodeled as work item types (WITs). + + To accomplish this transformation, the TFS Upgrade Wizard automatically updates the team projects defined for all collections on the application tier and migrates existing test data and objects. Behind the scenes, it performs two activities: + +1. Imports the WIT definitions for test plan and test suite, and updates the categories definition for team projects to include test plan and test suite categories. + +2. Migrates existing test management data. Work items are created from existing test plan and test suites, and links between the other existing test artifacts—such as test points, test runs, and test results—are fixed to point to the work item-based test plans and test suites. + + Data migration depends on a successful import of WIT definitions and updates. If the first activity fails, the second one will not occur. In the event that either activity is unsuccessful, the wizard logs one or more warnings or errors. + + ![TFS Upgrade Wizard showing Test Management error](_img/alm_upg_errortestmanagement.png "ALM_UPG_ErrorTestManagement") + + When this occurs, you'll need to manually update your team project. You won't be able to access existing test plans and test suites until you perform the manual updates. + + Errors might occur if your team project already contains WITs labeled Test Plan or Test Suite, or you've upgraded from TFS 2005 and 2008 and you haven't added the necessary work tracking objects to support test management. See [Update a team project based on an MSF v4.2 process template](update-a-team-project-v4-dot-2-process-template.md). + +## Manually update your team project to support the test experience + +The following steps provide support for the test experience available with TFS 2013.3 or later versions. + +1. **Import the test plan and test suite WIT definitions**. + + 1. If you don't have administrative permissions, [get them](../../security/set-project-collection-level-permissions.md). To perform all the update steps, you need to be a member of the **Team Foundation Administrators** security group, and an administrator on the application-tier server. + + 2. [Download the latest process template](../guidance/manage-process-templates.md). + + 3. Open a Command Prompt window where either Visual Studio (you can [download Visual Studio Community](http://www.visualstudio.com/downloads) for free) is installed and enter: + + ``` + cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 32-bit edition of Windows, replace %programfiles(x86)% with %programfiles%. + + 4. Import the test plan and test suite WIT definitions. Specify the *DirectoryPath* to the WorkItem Tracking/TypeDefinitions folder that contains the process template that you downloaded. + + ``` + witadmin importwitd /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath\TestPlan.xml" + witadmin importwitd /collection:"CollectionURL" /p:"ProjectName" /f:"DirectoryPath\TestSuite.xml" + ``` + + An example of *CollectionURL* is http://MyServer:8080/tfs/DefaultCollection. + + The *DirectoryPath* must follow this structure: *Drive:TemplateFolder*WorkItem TrackingTypeDefinitions. For example: + + `C:Process TemplateMicrosoft Visual Studio Scrum 2013.3WorkItem TrackingTypeDefinitions` + +2. **Update your category definitions**. + + 1. Export your categories definition file. + + ``` + witadmin exportcategories /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\Categories.xml" + ``` + + 2. Add the following categories. + + ``` + <CATEGORY name="Test Plan Category" refname="Microsoft.TestPlanCategory"> +     <DEFAULTWORKITEMTYPE name="Test Plan" /> +   </CATEGORY> +   <CATEGORY name="Test Suite Category" refname="Microsoft.TestSuiteCategory"> +     <DEFAULTWORKITEMTYPE name="Test Suite" /> +   </CATEGORY> + + ``` + + 3. Add the new WITs to the hidden categories. + + ``` + <CATEGORY name="Hidden Types Category" refname="Microsoft.HiddenCategory"> + <DEFAULTWORKITEMTYPE name="Code Review Request" /> + <WORKITEMTYPE name="Code Review Response" /> + <WORKITEMTYPE name="Feedback Request" /> + <WORKITEMTYPE name="Feedback Response" /> + <WORKITEMTYPE name="Shared Steps" /> + <WORKITEMTYPE name="Shared Parameter" /> + <WORKITEMTYPE name="Test Plan" /> + <WORKITEMTYPE name="Test Suite" /> + </CATEGORY> + ``` + + 4. Import the updated file. + + ``` + witadmin importcategories /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\Categories.xml" + ``` + +3. **Migrate existing test plans and suites to work item based test plans and suites**. + + 1. Open a Command Prompt window on the TFS application-tier server: + + ``` + cd %programfiles%\TFS 12.0\Tools + ``` + + 2. Run the **TfsConfig TCM** command. + + ``` + TFSConfig TCM /upgradeTestPlans /CollectionName:CollectionName /TeamProject:TeamProjectName + ``` + + For example: + + `TFSConfig TCM /upgradeTestPlans /CollectionName:"Fabrikam Fiber Collection" /TeamProject:"Fabrikam Fiber"` + + Respond to the questions that appear. + + ``` + Logging sent to file C:\ProgramData\Microsoft\Team Foundation\Server Configuration\Logs\TPC_UPG_AT_0515_143821.log + Microsoft (R) TfsConfig - Team Foundation Server Configuration Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + Command: tcm + Microsoft (R) TfsConfig - Team Foundation Server Configuration Tool + Copyright (c) Microsoft Corporation. All rights reserved. + + In order to upgrade the test plans, you have to complete the following steps: + 1. Import the test plan work item definition into the project. Have you complete + d this step? (Yes/No) Yes + 2. Import the test plan category into the project. Have you completed this step? + (Yes/No) Yes + + Test plan migration job successfully scheduled. + + ``` + + 3. If you're migrating a large quantity of test plans and test suites, you can run the following command to monitor the progress of data migration. + + ``` + TFSConfig TCM /upgradeStatus /collectionName:CollectionName /TeamProject:TeamProjectName + ``` + + After a successful data migration, all test management data should be available for use. For more information about this utility, see [TFSConfig command, TCM](../../tfs-server/command-line/tfsconfig-cmd.md#tcm). + + For information about how to access the new WIT-based test plans and test suites in the web portal, see [Create a test plan](../../manual-test/getting-started/create-a-test-plan.md). + +## Related notes +- [Manage TFS server configuration with TFSConfig](../../tfs-server/command-line/tfsconfig-cmd.md) diff --git a/docs/work/reference/update-a-team-project-v4-dot-2-process-template.md b/docs/work/reference/update-a-team-project-v4-dot-2-process-template.md new file mode 100644 index 00000000000..efb589bad0d --- /dev/null +++ b/docs/work/reference/update-a-team-project-v4-dot-2-process-template.md @@ -0,0 +1,271 @@ +--- +title: Update a team project | TFS +description: Update a team project based on a Microsoft Solutions Framework (MSF) version 4.2 process template. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: d2a264e1-7dd3-4cbd-ab50-735290a1ea74 +ms.manager: douge +ms.author: kaelli +ms.date: 04/04/2017 +--- + +# Update a team project based on a MSF v4.2 process template + +**TFS 2017 | TFS 2015 | TFS 2013** + +> [!IMPORTANT] +> This topic applies to team project that was created using a Microsoft Solutions Framework (MSF) version 4.2 process template and is defined on an on-premises Team Foundation Server (TFS). You only have to follow the procedures in this topic if you are upgrading a team project that you created with a process template provided with Visual Studio Team System 2008 Team Foundation Server, or one that does not contain the work item types Test Cases and Shared Steps. + +If you have upgraded from Visual Studio Team System 2008 Team Foundation Server to TFS 2013, you can update your team project manually. If your team project was based on a MSF version 4.2 process template, follow the procedures in this topic. After you apply these updates, you'll be able to access the new features described in [Configure features after an upgrade](../customize/configure-features-after-upgrade.md) as well as interface with Microsoft Test Manager. + +These procedures will only support access to new features available with TFS 2012 and later versions. Additional work is required to add new queries or the latest reports, update customized reports, or access dashboards. For more information, see [Additional information about changes made when upgrading TFS](#additional_info). + +**Update tasks required to access new features**: +1. [Rename system fields](#1-rename-system-fields) +2. [(Agile only) Rename Scenario to User Story](#2-agile-only-rename-the-scenario-work-item-type) +3. [Download the latest version of MSF process template](#3-download-the-latest-version-of-msf-process-template) +4. [Import link types](#4-import-link-types) +5. [(Optional) Apply as needed customizations](#5-optional-apply-customizations-to-the-latest-versions-of-work-item-types) +6. [Import work item types](#6-import-work-item-types) +7. [Import the category file](#7-import-the-categories-file) +8. [Import the process configuration files](#8-import-configure) +9. [Verify access to new features](#9-verify-access-to-new-features) + +**Additional tasks required to interface with Microsoft Test Manager**: +1. [Specify the bug type to be created in Microsoft Test Manager](#map_bug_type) +2. [Grant permissions to test team members](#grant_permissions) +3. [Launch Microsoft Test Manager](#launch_mtm) + +**Requirements** + +- To download a process template, you must be a member of the **Project Collection Administrators** group. If the required security permissions are set explicitly, your **Manage process template** permission for the team project collection must be set to **Allow**. + +- To run the **witadmin** and **tcm** command-line tools, you must be a member of one of the following groups: **Team Foundation Administrators**, **Project Collection Administrators**, or **Project Administrators** for the team project. + +- To grant permissions, you must be a member of the administrative group at the level of the group that you want to change. For example, if you want to change permissions for a group or user at the team project collection level, you must be a member of the **Project Collection Administrators** group for that collection, or your **Edit Collection-Level Information** permission must be set to **Allow**. + +For more information, see [Permission reference](../../security/permissions.md). + +## 1. Rename system fields + Because the friendly names of several system fields were renamed in Visual Studio Team Foundation Server 2010, you need to manually rename these fields in your team project collection. System fields that were renamed include System.AreaID, System.IterationID, System.HyperLinkCount, System.ExternalLinkCount, and System.AttachedFileCount. + + Perform this task for each team project collection defined on the application-tier server you've upgraded. + +1. Open a Command Prompt window where either Visual Studio 2012 or Team Explorer 2012 is installed and type: + + ``` + cd %programfiles%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 64-bit edition of Windows, replace **%programfiles%** with **%programfiles(x86)%**. + +2. Type each of the following commands, substituting your data for the arguments that are shown, and then choose the **ENTER** key. + + ``` + witadmin changefield /collection:CollectionURL /n:System.AreaId /name:"Area Id" + witadmin changefield /collection:CollectionURL /n:System.AttachedFileCount /name:"Attached File Count" + witadmin changefield /collection:CollectionURL /n:System.ExternalLinkCount /name:"External Link Count" + witadmin changefield /collection:CollectionURL /n:System.HyperLinkCount /name:"Hyperlink Count" + witadmin changefield /collection:CollectionURL /n:System.RelatedLinkCount /name:"Related Link Count" + ``` + + Use this format for *CollectionURL*: **http://ServerName:Port/VirtualDirectoryName/CollectionName**, for example: **http://srvalm:8080/tfs/DefaultCollection**. + + +## 2. (Agile only) Rename the Scenario work item type + To minimize the amount of customizations you need to make, and to comply with future updates to the Agile process template, you should rename the Scenario work item type to User Story. + +> [!NOTE] +> Of course, renaming the Scenario work item type will require you to update existing reports and queries that reference the Scenario work item type. However, because of the schema changes made to the data warehouse with the upgrade to TFS 2010, the pre-existing or pre-upgrade reports need to be rewritten to work with the new schema. See [Locating reports after the upgrade to TFS 2010](http://msdn.microsoft.com/en-us/library/ff452588%28v=vs.100%29.aspx). + + Perform this task for each team project that you want to update. + +- Type the following command, substituting your data for the arguments that are shown, and then choose the **ENTER** key. + + ``` + witadmin renamewitd /collection:CollectionURL /p:projectName /n:Scenario /new:"User Story" + ``` + + > [!TIP] + > Enclose a parameter in quotes when it contains spaces. For example, specify `/p:"My Project X"` when your project name contains spaces. + + [Back to top](#top) + +## 3. Download the latest version of MSF process template + +- See [Download the latest process template](../guidance/manage-process-templates.md). + +> [!TIP] +> To get access to the latest versions of the default process templates, install the latest update for TFS. TFS 2012.1 provided significant updates that were made to the workflow for several work item types. These changes support backward transitions so that when you inadvertently drag a work item on the Kanban board or the task board to a resolved or closed state, you can drag it back to an earlier workflow state. +> +> You can obtain the upgrade for TFS 2012 from the Microsoft download site: [Quarterly Update for Microsoft Visual Studio Team Foundation Server 2012](http://go.microsoft.com/fwlink/?LinkId=272181). + +## 4. Import link types + Import the link types, SharedSteps and TestedBy, located in the LinkTypes folder in the process template that you downloaded in task 3. + + Perform this task for each team project collection defined on your upgraded application-tier server. + +- Type the following two commands, substituting your data for the arguments that are shown, and then choose the **ENTER** key. + + ``` + witadmin importlinktype /collection:CollectionURL /f:"DirectoryPath\TestedBy.xml" + witadmin importlinktype /collection:CollectionURL /f:"DirectoryPath\SharedStep.xml" + ``` + + For *DirectoryPath*, specify the location of the LinkTypes folder for the process template that you downloaded. The directory path should follow this structure: *Drive*:\\*MSFTemplateFolder*\WorkItem Tracking\LinkTypes. + +## 5. (Optional) Apply customizations to the latest versions of work item types + If you have customized any of the following work item types, you should update the latest version of these types with your customizations. The following tables summarize the fields removed and added in the latest versions of each process template. + +### Agile work item types + +|Work item type|Removed fields|Added fields| +|--------------------|--------------------|------------------| +|Bug|- Issue (Microsoft.VSTS.Common.Issue)<br />- Rank (Microsoft.VSTS.Common.Rank), replaced with Stack Rank<br />- Test Name (Microsoft.VSTS.Test.TestName)<br />- Test Id (Microsoft.VSTS.Test.TestId)<br />- Test Path (Microsoft.VSTS.Test.TestPath)<br />- Triage (Microsoft.VSTS.Common.Triage)|- [Repro steps (Microsoft.VSTS.TCM.ReproSteps)](../track/build-test-integration.md)<br />- [Severity (Microsoft.VSTS.Common.Severity)](../track/planning-ranking-priorities.md)<br />- [Stack Rank (Microsoft.VSTS.Common.StackRank)](../track/planning-ranking-priorities.md)<br />- [System Info (Microsoft.VSTS.TCM.SystemInfo)](../track/build-test-integration.md)| +|Task|- Baseline Work (Microsoft.VSTS.Scheduling.BaselineWork), replaced with Original Estimate<br />- Discipline (Microsoft.VSTS.Common.Discipline), replaced with Activity<br />- Exit Criteria (Microsoft.VSTS.Common.ExitCriteria)<br />- Issue (Microsoft.VSTS.Common.Issue)<br />- Rank (Microsoft.VSTS.Common.Rank), replaced with Stack Rank<br />- Task Hierarchy (Microsoft.VSTS.Scheduling.TaskHierarchy)|- [Activity (Microsoft.VSTS.Common.Activity)](../track/query-numeric.md)<br />- [Original Estimate (Microsoft.VSTS.Scheduling.OriginalEstimate)](../track/query-numeric.md)<br />- [Stack Rank (Microsoft.VSTS.Common.StackRank)](../track/planning-ranking-priorities.md)| +|User Story (previously named Scenario)|- Exit Criteria (Microsoft.VSTS.Common.ExitCriteria)<br />- Issue (Microsoft.VSTS.Common.Issue)<br />- Rough Order of Magnitude (Microsoft.VSTS.Common.RoughOrderOfMagnitude), replaced with Story Points|- [Risk (Microsoft.VSTS.Common.Risk)](../track/planning-ranking-priorities.md)<br />- [Stack Rank (Microsoft.VSTS.Common.StackRank)](../track/planning-ranking-priorities.md)<br />- [Story Points (Microsoft.VSTS.Scheduling.StoryPoints)](../track/query-numeric.md)| + +### CMMI work item types + +|Work item type|Removed fields|Added fields| +|--------------------|--------------------|------------------| +|Bug|- Baseline Work (Microsoft.VSTS.Scheduling.BaselineWork), replaced with Original Estimate<br />- Estimate (Microsoft.VSTS.CMMI.Estimate)<br />- Issue (Microsoft.VSTS.Common.Issue)<br />- Rank (Microsoft.VSTS.Common.Rank), replaced with Stack Rank<br />- Steps to Reproduce (Microsoft.VSTS.CMMI.StepsToReproduce), replaced with Repro Steps<br />- Test Name (Microsoft.VSTS.Test.TestName)<br />- Test Id (Microsoft.VSTS.Test.TestId)<br />- Test Path (Microsoft.VSTS.Test.TestPath)|- [Original Estimate (Microsoft.VSTS.Scheduling.OriginalEstimate)](../track/query-numeric.md)<br />- [Severity (Microsoft.VSTS.Common.Severity)](../track/planning-ranking-priorities.md)<br />- [Stack Rank (Microsoft.VSTS.Common.StackRank)](../track/planning-ranking-priorities.md)<br />- [System Info (Microsoft.VSTS.TCM.SystemInfo)](../track/build-test-integration.md)<br />- [Repro steps (Microsoft.VSTS.TCM.ReproSteps)](../track/build-test-integration.md)| +|Task|- Baseline Work (Microsoft.VSTS.Scheduling.BaselineWork), replaced with Original Estimate<br />- Estimate (Microsoft.VSTS.CMMI.Estimate)<br />- Exit Criteria (Microsoft.VSTS.Common.ExitCriteria)<br />- Issue (Microsoft.VSTS.Common.Issue)<br />- Rank (Microsoft.VSTS.Common.Rank), replaced with Stack Rank<br />- Task Hierarchy (Microsoft.VSTS.Scheduling.TaskHierarchy)<br />- Test Name (Microsoft.VSTS.Test.TestName)<br />- Test Id (Microsoft.VSTS.Test.TestId)<br />- Test Path (Microsoft.VSTS.Test.TestPath)|- [Original Estimate (Microsoft.VSTS.Scheduling.OriginalEstimate)](../track/query-numeric.md)<br />- [Stack Rank (Microsoft.VSTS.Common.StackRank)](../track/planning-ranking-priorities.md)| +|Requirement|- Baseline Work (Microsoft.VSTS.Scheduling.BaselineWork), replaced with Original Estimate<br />- Completed Work (Microsoft.VSTS.Scheduling.CompletedWork)<br />- Estimate (Microsoft.VSTS.CMMI.Estimate), replaced with Scheduling Size<br />- Exit Criteria (Microsoft.VSTS.Common.ExitCriteria)<br />- Issue (Microsoft.VSTS.Common.Issue)<br />- Rank (Microsoft.VSTS.Common.Rank), replaced with Stack Rank<br />- Remaining Work (Microsoft.VSTS.Scheduling.RemainingWork)|- [Original Estimate (Microsoft.VSTS.Scheduling.OriginalEstimate)](../track/query-numeric.md)<br />- [Stack Rank (Microsoft.VSTS.Common.StackRank)](../track/planning-ranking-priorities.md)<br />- [Scheduling Size (Microsoft.VSTS.Scheduling.Size)](../track/query-numeric.md)| + + The types of customizations you might apply include field additions, additions or changes to pick lists, or additions to workflow reasons. Do not change the workflow states as these are used in process configuration and the Agile planning tools. If you must change the workflow, change it after you have finished the update and follow the guidance about state category mappings described in [Process configuration](../reference/process-configuration-xml-element.md). + + If you use other work item types defined in the process template, and want to update them to the latest versions, then apply any customizations you have made for them as well. Also, if you have defined a custom work item type that you use to track test cases, you should apply customizations from that type to the Test Case work item type provided with the latest process template. + + To learn more about working with the artifacts that these process templates provide, see [Agile process](../guidance/agile-process.md) or [CMMI process](../guidance/cmmi-process.md). + + +## 6. Import work item types + Import the following work item types based on the process template you are working with. + +- **Agile**: Bug, Task, User Story, Test Case, Shared Steps, Code Review Request, Code Review Response, Feedback Request, Feedback Response + +- **CMMI**: Bug, Task, Requirement, Test Case, Shared Steps, Code Review Request, Code Review Response, Feedback Request, Feedback Response + + Perform this task for each team project that you want to update. + +- Type the following command for each work item type that you need to import, substituting your data for the arguments that are shown, and then choose the **ENTER** key. + + ``` + witadmin importwitd /collection:CollectionURL /p:projectName /f:"DirectoryPath\WITName" + + ``` + + > [!TIP] + > Specify the name of the xml file and not the friendly name of the work item type. For example, specify CodeReviewRequest.xml for the Code Review Request work item type. + + For *DirectoryPath*, specify the directory location of the TypeDefinitions folder for the process template that you downloaded. The directory path should follow this structure: *Drive*:*MSFTemplateFolder* WorkItem TrackingTypeDefinitions. + +- (Optional) Verify the work item types are accessible by opening Team Explorer or the web portal. You might have to [refresh the cache](../../connect/work-web-portal.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json#refresh-web-portal) to see the changes. + +## 7. Import the categories file + Import the category file located in the WorkItem Tracking folder of the process template that you downloaded. Categories support intelligent grouping of work item types. To learn more, see [Use categories to group work item types](use-categories-to-group-work-item-types.md). + +- In the Command Prompt window, type the following command, substituting your data for the arguments that are shown, and then choose the **ENTER** key. + + ``` + witadmin importcategories /collection:CollectionURL /p:projectName /f:"DirectoryPath\categories.xml" + ``` + + For *DirectoryPath*, specify the path to the WorkItem Tracking folder for the process template that you downloaded. The directory path should follow this structure: *Drive*:\\*MSFTemplateFolder*\WorkItem Tracking. + + +## 8. Import the process configuration file + The process configuration file determines the layout and features available through the backlog and board pages of the web portal. To use these pages, you must import the process configuration file. + +- Import the definition file for process configuration. + + ``` + witadmin importprocessconfig /collection:CollectionURL /p:" ProjectName" /f:"DirectoryPath\ProcessConfiguration.xml" + + ``` + + For *DirectoryPath*, specify the path to the Process folder for the process template that you downloaded. The directory path should follow this structure: *Drive*:\\*TemplateFolder*\WorkItem Tracking\Process. + +## 9. Verify access to new features +Open a web portal and [determine if all features are available to you](../customize/new-features-added.md). + +> [!NOTE] +> You will not have to perform the additional steps to update the workflow for Agile team projects as described here: [Update the workflow for agile team projects](update-the-workflow-for-agile-team-projects.md). By following the procedures in this topic, you will have applied these changes already. + +## Additional tasks to interface with Microsoft Test Manager + Perform the following tasks to complete the updates required to interface with Test Manager. + +### 1. Specify the bug type to be created in Microsoft Test Manager + To support the automatic creation of a work item to track code defects or bugs that are found when a test team member uses Test Manager, you must specify the bug type to be used for your existing team project. The **tcm bugfieldmapping** command supports the import and export of a mapping file to the team project. The mapping file defines the type of work item to create and the three data fields to be filled by Test Manager. The three fields are reproducible steps, system information, and the build in which the defect was found. When a tester runs a test and finds a defect, they can create a bug in which the three fields are automatically filled. + +1. Open Notepad or a text editor, and copy the following code into the file: + + ``` + <?xml version="1.0" encoding="utf-16"? + <BugFilerMappings workitemtypetocreate="Bug"> +    <ReproSteps>Microsoft.VSTS.TCM.ReproSteps</ReproSteps> +    <SystemInformation>Microsoft.VSTS.TCM.SystemInfo</SystemInformation> +    <BuildFoundIn>Microsoft.VSTS.Build.FoundIn</BuildFoundIn> + </BugFilerMappings> + ``` + + > [!NOTE] + > If the work item type that you use to create code defects is labeled something other than "Bug," replace "Bug" in the previous example with the name of that work item type. + +2. Save the file, and label it bugfieldmappings.xml. + +3. In the Command Prompt window, type the following command, substituting your data for the arguments that are shown, and then choose the **ENTER** key. + + ``` + tcm bugfieldmapping /import /mappingfile:"DirectoryPath\bugfieldmappings.xml" /collection:CollectionURL /teamproject:projectName + ``` + + For *DirectoryPath*, specify the folder where you saved the bugfieldmappings.xml file. + + For more information, see [tcm: Customize and manage the test experience](witadmin/tcm-customize-manage-test-experience.md). + + + +### 2. Grant permissions to test team members + You must grant permissions to team members who will manage test environments and test configurations, create and view test runs, and perform other tasks. + + The following table describes the permissions that control access to test functions and support interfacing with the team project for testing. It also indicates the default assignments that are made in version 5.0 of the Agile and CMMI process templates, in addition to the recommended permissions to grant manual testers and test leads. + +|**Permission**|**Description**|Scope|Readers|Contributors|Builders|Recommended for manual testers|Recommended for test leads| +|--------------------|---------------------|-----------|-------------|------------------|--------------|------------------------------------|--------------------------------| +|**View project-level information**|Can view membership of project-level groups and the permissions of those members.|Project-level|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**View test runs**|Can view test plans in this node.|Project-level|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Create test runs**|Can add and remove test results and add or modify test runs for the team project.|Project-level||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Manage test configurations**|Can create and delete test configurations for the team project.|Project-level||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Manage test environments**|Can create and delete test environments for the team project.|Project-level||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Delete test runs**|Can delete a scheduled test for the team project.|Project-level||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**View this node**|Can view the security settings for an area node.|Area node|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Manage test plans**|Can create and edit test plans that are assigned to an area node. If test plans have not been run, you can also delete them.|Area node||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")|![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| +|**Manage test controllers**|Can register and unregister test controllers for the team project collection.|Project collection|||||![check mark](_img/icon_witcheckgreen.png "Icon_WITcheckgreen")| + + You can grant permissions by following the procedures that are indicated for the specific scope area: + +- You can set project-level permissions or area node permissions from the administration page of web portal. See [Permissions reference](../../security/permissions.md) and [Customize your area or iteration paths](../customize/set-area-paths.md). update-a-team-project-manually-to-support-test-management.md + +- You can set project collection permissions from Team Explorer by choosing **Team, Team Project Collection Settings, Security**, by opening and using the administration console for Team Foundation, or by using the **TFSSecurity** and **tf** command-line tools. For more information, see [Add an administrator](../../security/set-project-collection-level-permissions.md). + +## 3. Launch Microsoft Test Manager +After you have completed the upgrade tasks that are described earlier in this topic, you can start Microsoft Test Manager, connect to your project, and start to plan your test efforts. + +>[!NOTE] +>Microsoft Test Manager is in the process of being deprecated. The web portal Test hub for TFS 2017 and later versions is a fully featured Test management solution which works across all platforms and with all browsers, we recommend you use the Test hub over Microsoft Test Manager for all your test management requirements. You can use Microsoft Test Manager to test your desktop applications by launching the Microsoft Test Runner (client) from the Test hub. To learn more, see [Guidance on Microsoft Test Manager usage](../../manual-test/mtm/guidance-mtm-usage.md). + +## Additional information about changes made when upgrading TFS + + When you upgrade from Visual Studio Team System 2008 Team Foundation Server to TFS 2012, you receive updates made to both TFS 2010 and TFS 2012. There were a number of architectural changes made with the release of TFS 2010. To learn more about the changes made by upgrading to the latest version of TFS from Visual Studio Team System 2008 Team Foundation Server, see the following resources: + +- [Team Foundation Server 2010 Key Concepts](http://blogs.msdn.com/b/bharry/archive/2009/04/19/team-foundation-server-2010-key-concepts.aspx) (blog post) +- [Update a customized process template to access new features](../customize/update-customized-process-template.md) +- [Locating reports after the upgrade to TFS 2010](http://msdn.microsoft.com/en-us/library/ff452588%28v=vs.100%29.aspx) +- [Changes and Additions to the Schema for the Analysis Services Cube](http://msdn.microsoft.com/library/ff472574%28v=vs.100%29.aspx) +- [Changes made to process templates](../guidance/changes-to-process-templates.md) + +## Related notes +- [witAdmin: Customize and manage objects for tracking work](witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md) +- [Configure features after an upgrade](../customize/configure-features-after-upgrade.md) diff --git a/docs/work/reference/update-the-workflow-for-agile-team-projects.md b/docs/work/reference/update-the-workflow-for-agile-team-projects.md new file mode 100644 index 00000000000..78b85a9dde6 --- /dev/null +++ b/docs/work/reference/update-the-workflow-for-agile-team-projects.md @@ -0,0 +1,366 @@ +--- +title: Update the workflow for agile team projects | VSTS & TFS +description: Update the workflow for agile team projects to manually update the user story and task workflow assignments. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 88e33e19-20f5-403d-b106-b0057ebe6a19 +ms.manager: douge +ms.author: kaelli +ms.date: 02/22/2017 +--- +# Update the workflow for agile team projects + +**TFS 2017 | TFS 2015 | TFS 2013** + +>[!IMPORTANT] +>This topic applies to team project that was created using a Microsoft Solutions Framework (MSF) version 5.0 process template and is defined on an on-premises Team Foundation Server (TFS). + + +After you have configured features for your upgraded team project, which was created with a process template based on Microsoft Solutions Framework (MSF) for Agile Software Development v5.0, you should manually update the user story and task workflow assignments. If you don't update the workflow, then the task board provides only two states, **Active** and **Closed**, as shown in the following illustration. This prevents you and your team from distinguishing between tasks that are in progress from those that haven't been started. + +![Task board for non-updated Agile team project](_img/alm_vrf_taskboard_agile_v5.png "ALM_VRF_TaskBoard_Agile_V5") + + +Task board for an Agile team project without the recommended manual updates + + Updates made by the Configure Features wizard were made to match the existing workflow that is defined for your team project. For Agile version 5.0, this means the **New** and **Removed** states introduced with the latest version are not present. These states support transitioning user stories from a **New** state to an **Active** state. Without the **New** state defined, a User Story assigned to an iteration remains on the product backlog until it is resolved, which is not the desired or expected behavior. + + In the same way, adding the **New** state to the Task workflow lets users move tasks from **New**, to **Active**, to **Closed** using the task board. In addition, by adding the **Removed** state to both the User Story and Task type definitions you enable users to cut stories and tasks using the planning tools. + + To support the desired behaviors, you must add the **New** and **Removed** states to the user story and task work item types, and update the metastate mappings assigned in the process configuration. + + +**Requirements** + +To run the **witadmin** command-line tool, you must be a member of one of the following groups: **Team Foundation Administrators**, **Project Collection Administrators**, or **Project Administrators** group for the team project. See [Permission reference](../../security/permissions.md). + +<a name="agile_updates"></a> +##Update the workflow and metastates + +> [!IMPORTANT] +> The procedures in this topic were written based on the Agile v6.0 process. To update your team project to support the latest workflow defined for Agile v6.1 process, you can adapt these procedures to instead copy the `WORKFLOW` sections of the latest Agile process template. Significant updates were made to the [workflow for several work item types in the TFS 2012.1 update](../guidance/changes-to-process-templates.md). These changes support backward transitions so that when you inadvertently drag a work item on the Kanban board or the task board to a resolved or closed state, you can drag it back to an earlier workflow state. + + You will need to perform the following steps: + +- Export the definitions for the User Story and Task types and for process configuration. + +- Insert code snippets to the workflow section for both User Story and Task. + +- Update the metastate mappings for the process configuration. + +- Import the updated definitions for the work item types and process configuration. + +- Verify that the changes appear on the task board. + +> [!IMPORTANT] +> For the following procedures to work, the **Active** state must be specified in the workflow defined for the User Story and Task types of work items. + +#### To update the workflow states and transitions for User Story + +1. To run the **witadmin** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and type: + + ``` + cd %programfiles%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 64-bit edition of Windows, replace **%programfiles%** with **%programfiles(x86)%**. + +2. To export the type definition for **User Story**, enter the following command, substituting your data for the arguments that are shown here, where *CollectionURL* specifies the URL of a team project collection, *ProjectName* specifies the name of a team project defined within the collection, and "*DirectoryPath*\\*FileName*.xml" specifies the name and location for the file to export. Then press Enter. + + ``` + witadmin exportwitd /collection:CollectionURL /p:"ProjectName" /n:"User Story" /f:"DirectoryPath\FileName.xml" + ``` + + Use this format for the URL: **http://***ServerName:Port/VirtualDirectoryName/CollectionName*, for example: `http://srvalm:8080/tfs/DefaultCollection`. + +3. In a text editor or in Visual Studio, open the file you exported. + +4. Add this code snippet between the lines `<STATES>` and `<STATE value="Active">`: + + ``` + <STATE value="New"> +    <FIELDS> +       <FIELD refname="Microsoft.VSTS.Common.ResolvedDate"> +          <EMPTY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ResolvedBy"> +          <EMPTY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ClosedDate"> +          <EMPTY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ClosedBy"> +          <EMPTY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedDate"> +          <EMPTY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedBy"> +          <EMPTY /> +       </FIELD> +    </FIELDS> + </STATE> + <STATE value="Removed" /> + ``` + +5. Replace the section that begins with `<TRANSITION from=" " to="Active">` and ends with `<TRANSITION>` with this code snippet: + + ``` + <TRANSITION from="" to="New"> +    <REASONS> +       <DEFAULTREASON value="New" /> +    </REASONS> +    <FIELDS> +       <FIELD refname="System.Description"> +          <DEFAULT from="value" value="As a <type of user> I want <some goal> so that <some reason>" /> +       </FIELD> +    </FIELDS> + </TRANSITION> + <TRANSITION from="New" to="Active"> +    <REASONS> +       <DEFAULTREASON value="Implementation started" /> +    </REASONS> +    <FIELDS> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedBy"> +          <COPY from="currentuser" /> +          <VALIDUSER /> +          <REQUIRED /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedDate"> +          <SERVERDEFAULT from="clock" /> +       </FIELD> +       <FIELD refname="System.AssignedTo"> +          <DEFAULT from="currentuser" /> +       </FIELD> +    </FIELDS> + </TRANSITION> + <TRANSITION from="New" to="Removed"> +    <REASONS> +       <DEFAULTREASON value="Removed from the backlog" /> +    </REASONS> + </TRANSITION> + <TRANSITION from="Active" to="New"> +    <REASONS> +       <DEFAULTREASON value="Implementation halted" /> +    </REASONS> + </TRANSITION> + <TRANSITION from="Removed" to="New"> +    <REASONS> +       <DEFAULTREASON value="Reconsidering the User Story" /> +    </REASONS> + </TRANSITION> + ``` + +6. Save and close the file. + +7. Import the file, substituting your data for the arguments that are shown. + + ``` + witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\FileName.xml" + ``` + +#### To update the workflow states and transitions for Task + +1. Export the type definition for **Task**, substituting your data for the arguments that are shown. + + ``` + witadmin exportwitd /collection:CollectionURL /p:"ProjectName" /n:"Task" /f:"DirectoryPath\FileName.xml" + ``` + +2. In a text editor or in Visual Studio, open the file you exported. + +3. Add this code snippet between the lines `<STATES>` and `<STATE value="Active">`: + + ``` + <STATE value="New"> +    <FIELDS> +       <FIELD refname="Microsoft.VSTS.Common.ClosedDate"> +          <EMPTY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ClosedBy"> +          <EMPTY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedDate"> +          <EMPTY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedBy"> +          <EMPTY /> +       </FIELD> +    </FIELDS> + </STATE> + <STATE value="Removed" /> + ``` + +4. Replace the first transition block, corresponding to the lines that fall between `<TRANSITION from="" to="Active">` and its closing `</TRANSITION>` tag, with this code snippet: + + ``` + <TRANSITION from="" to="New"> +    <REASONS> +       <DEFAULTREASON value="New" /> +    </REASONS> + </TRANSITION> + <TRANSITION from="New" to="Active"> +    <ACTIONS> +       <ACTION value="Microsoft.VSTS.Actions.StartWork" /> +    </ACTIONS> +    <REASONS> +       <DEFAULTREASON value="Work started" /> +    </REASONS> +    <FIELDS> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedBy"> +          <COPY from="currentuser" /> +          <VALIDUSER /> +          <REQUIRED /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedDate"> +          <SERVERDEFAULT from="clock" /> +       </FIELD> +       <FIELD refname="System.AssignedTo"> +          <DEFAULT from="currentuser" /> +       </FIELD> +    </FIELDS> + </TRANSITION> + <TRANSITION from="Active" to="New"> +    <ACTIONS> +       <ACTION value="Microsoft.VSTS.Actions.StopWork" /> +    </ACTIONS> +    <REASONS> +       <DEFAULTREASON value="Work halted" /> +    </REASONS> + </TRANSITION> + <TRANSITION from="New" to="Closed"> +    <ACTIONS> +       <ACTION value="Microsoft.VSTS.Actions.Checkin" /> +    </ACTIONS> +    <REASONS> +       <DEFAULTREASON value="Completed" /> +       <REASON value="Cut" /> +       <REASON value="Deferred" /> +    <REASON value="Obsolete" /> +    </REASONS> +    <FIELDS> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedDate"> +          <READONLY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ActivatedBy"> +          <READONLY /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ClosedDate"> +          <SERVERDEFAULT from="clock" /> +       </FIELD> +       <FIELD refname="Microsoft.VSTS.Common.ClosedBy"> +       <COPY from="currentuser" /> +          <VALIDUSER /> +          <REQUIRED /> +       </FIELD> +    </FIELDS> + </TRANSITION> + <TRANSITION from="Closed" to="New"> +    <REASONS> +       <DEFAULTREASON value="Reactivated" /> +    </REASONS> +    <FIELDS> +       <FIELD refname="System.AssignedTo"> +          <COPY from="field" field="Microsoft.VSTS.Common.ClosedBy" /> +       </FIELD> +    </FIELDS> + </TRANSITION> + <TRANSITION from="New" to="Removed"> +    <REASONS> +       <DEFAULTREASON value="Removed from the backlog" /> +    </REASONS> + </TRANSITION> + <TRANSITION from="Active" to="Removed"> +    <REASONS> +       <DEFAULTREASON value="Removed from the backlog" /> +    </REASONS> + </TRANSITION> + <TRANSITION from="Removed" to="New"> +    <REASONS> +       <DEFAULTREASON value="Reconsidering the Task" /> +    </REASONS> + </TRANSITION> + ``` + +5. Save and close the file. + +6. Import the file, substituting your data for the arguments that are shown. + + ``` + witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\FileName.xml" + ``` + +#### To update the metastate mappings for process configuration + +1. Type the following command to export the ProcessConfiguration file, substituting your data for the arguments that are shown. + + ``` + witadmin exportprocessconfig /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\ ProcessConfiguration.xml" + ``` + + Where, *CollectionURL* specifies the URL of the team project collection and *ProjectName* specifies the name of your team project. Use this format for the URL: **http://***ServerName:Port/VirtualDirectoryName/CollectionName*, for example: `http://srvalm:8080/tfs/DefaultCollection`. + +2. In Notepad or in another text editor, open the ProcessConfiguration.xml file. + +3. Locate the tag `<RequirementWorkItems category="Microsoft.RequirementCategory" plural="Stories">`. + +4. Replace the line `<State type="Proposed" value="Active" />` with these lines: + + ``` + <State type="Proposed" value="New" /> + <State type="InProgress" value="Active" /> + + ``` + +5. Locate the tag `<TaskWorkItems category="Microsoft.TaskCategory">`, and replace the line `<State type="Proposed" value="Active" />` with these lines: + + ``` + <State type="Proposed" value="New" /> + <State type="InProgress" value="Active" /> + ``` + +6. Verify that you have the following mappings: + + ``` + <RequirementWorkItems category="Microsoft.RequirementCategory" plural="Stories"> +    <States> +       <State type="Proposed" value="New"/> +       <State type="InProgress value="Active" /> +       <State type="InProgress value="Resolved" /> +       <State type="Complete" value="Closed" /> +    </States> + </RequirementWorkItems> + <TaskWorkItems category="Microsoft.TaskCategory"> +    <States> +       <State type="Proposed" value="New" /> +       <State type="InProgress" value="Active" /> +       <State type="Complete" value="Closed" /> +    </States> + </TaskWorkItems> + ``` + +7. Save and close the file. + +8. Import the configuration file. + + ``` + witadmin importprocessconfig /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\ProcessConfiguration.xml" + + ``` + +#### To verify that the changes appear on the task board + +1. Open the web portal and then connect to your team project using a URL that has the following format: + + ``` + http://MyServer:8080/tfs/TeamProjectCollectionName/MyProject + ``` + + If TWA is already open, then refresh your browser to refresh the cache. + +2. Verify that the task board columns now display **New**, **Active**, and **Closed**. + + ![Agile task board with updated workflow](_img/alm_vrf_taskboard_agile_v6.png "ALM_VRF_TaskBoard_Agile_V6") +Task board for an Agile team project with the updated workflow states + + To learn more about using the task board, see [Sprint planning](../scrum/sprint-planning.md). \ No newline at end of file diff --git a/docs/work/reference/upload-or-download-the-microsoft-project-mapping-file.md b/docs/work/reference/upload-or-download-the-microsoft-project-mapping-file.md new file mode 100644 index 00000000000..a58123b2f51 --- /dev/null +++ b/docs/work/reference/upload-or-download-the-microsoft-project-mapping-file.md @@ -0,0 +1,118 @@ +--- +title: Upload/download the Microsoft Project Mapping file | TFS +description: Upload or download the Microsoft Project mapping file using the TFSFieldMapping command +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 43474098-a23a-49c2-bfa8-2f4beb0e5399 +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + + +# Upload or download the Microsoft Project Mapping file + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Use **TFSFieldMapping** to upload and download the Microsoft Project mapping file. This file controls how Microsoft Project publishes tasks to a team project that connects to an on-premises Team Foundation Server (TFS). For example, you can modify the file to support fields you added to work item types or modify the way in which existing fields are published and refreshed. + + You can specify which work tracking fields map to Project fields. You can also control publishing behavior through the **PublishOnly** attribute, and designate special fields such as the context field. For the complete XML syntax of the mapping file, see [Customize the Microsoft Project field mapping file](customize-project-field-mapping-file.md). This file is the same file that was defined in the process template that was used to create the team project. See [Map Microsoft Project fields](map-microsoft-project-fields-to-tf-fields.md) + +The **TFSFieldMapping** command-line tool only works when run against an on-premises TFS. To run the tool, open a Command Prompt window where Visual Studio is installed. The **TFSFieldMapping** command installs with any version of Visual Studio. You can access this tool by installing the free version of [Visual Studio Community](https://www.visualstudio.com/downloads/download-visual-studio-vs). + +|Version | Change directory | +|--------|-----------| +|TFS 2018|`cd %programfiles(x86)%\Common Files\microsoft shared\Team Foundation Server\16.0 ` | +|TFS 2017|`cd %programfiles(x86)%\Common Files\microsoft shared\Team Foundation Server\15.0 ` | +|TFS 2015|`cd %programfiles(x86)%\Common Files\microsoft shared\Team Foundation Server\14.0 ` | +|TFS 2013|`cd %programfiles(x86)%\Common Files\microsoft shared\Team Foundation Server\12.0 ` | + + +On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + + +> [!NOTE] +> Even if you are logged on with administrative permissions, you must open an elevated Command Prompt to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt, choose **Start**, open the context menu for **Command Prompt**, and then choose **Run as Administrator**. For more information, see the [User Account Control](http://technet.microsoft.com/library/cc772207.aspx). + + **Requirements** + + To use the **TFSFieldMapping** command, you must be a member of the **Team Foundation Administrators** or the **Project Administrators** security group. For more information, see [Permission reference](../../security/permissions.md). + +## Syntax + +``` +TFSFieldMapping upload | download /collection:CollectionURL /teamproject:ProjectName /mappingfile:MappingFile +``` + +#### Parameters + +|**Argument**|**Description**| +|------------------|---------------------| +|**upload | download**|Specifies whether to download or upload the field mapping file.| +|**/collection**:<i>CollectionURL</i>|Specifies the URI of the team project collection in the following format: **http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If you do not specify a virtual directory is used, you must use the following format:<br /><br /> **http**://*ServerName:Port/CollectionName*<br /><br /> If you have previously connected to the server, you can specify the friendly name for the server instead of the URI.| +|**/teamproject:**<i>ProjectName</i>|Specfies the name of the team project whose mapping parameters you want to modify. If the name contains spaces, enclose it in quotation marks.| +|**/mappingfile:**<i>MappingFile</i>|Specifies the name and file path of the mapping file.| + +## To change how work item fields are mapped to Project + +1. Open a Command Prompt window where you have installed Project and either Team Explorer or TFS and enter: + + ``` + cd %programfiles%\Common Files\microsoft shared\Team Foundation Server\12.0 + ``` + + > [!TIP] + > Project isn't required to download the mapping file, however, it is required to upload it. + +2. Download the mapping file by entering the following command: + + ``` + TFSFieldMapping download /collection:CollectionURL /teamproject:ProjectName /mappingfile:MappingFile + ``` + + > [!TIP] + > If a name contains spaces, enclose the name in quotes. + +3. Open the mapping file in a text editor or XML editor. + +4. Add new mappings or edit existing mappings in the following format: + + > [!div class="tabbedCodeSnippets"] + ```XML + <Mapping WorkItemTrackingFieldReferenceName="System.Id" + ProjectField="" + ProjectName="" + ProjectUnits="" + PublishOnly="" + IfSummaryRefreshOnly=""/> + ``` + + For example, to add additional scheduling fields to a team project created using the Scrum process template, add the following mappings: + + > [!div class="tabbedCodeSnippets"] + ```XML + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.StartDate" ProjectField="pjTaskStart" PublishOnly="true" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.FinishDate" ProjectField="pjTaskFinish" PublishOnly="true" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.OriginalEstimate" ProjectField="pjTaskBaselineWork" ProjectUnits="pjHour" IfSummaryRefreshOnly="true" /> + <Mapping WorkItemTrackingFieldReferenceName="Microsoft.VSTS.Scheduling.CompletedWork" ProjectField="pjTaskActualWork" ProjectUnits="pjHour" IfSummaryRefreshOnly="true" /> + ``` + + The default Scrum template only maps the Remaining Work field to Project. + + > [!NOTE] + > For a full list of all the Office Project field values for the ProjectField attribute, see [Field mappings in Microsoft Project](field-mappings-in-microsoft-project.md). + +5. (Optional) Indicate if the field is to be published but not refreshed. Add the `PublishOnly` attribute to the mapping section for that field and set the attribute to `true`. This attribute can be used to allow for team members to see a field value but not be able to change it in Team Foundation. + +6. (Optional) Indicate how summary tasks are to be refreshed in Project. Add `fSummaryRefreshOnly="true"` attribute to indicate that the field is never published to the work item database but is refreshed from the work item database when the row for the field is a summary task in Project, the summary task has **Publish and Refresh=Yes**, and the summary task contains at least one child task that is published to TFS. + +7. Save and upload the file: + + > [!div class="tabbedCodeSnippets"] + ```XML + TFSFieldMapping upload /collection:CollectionURL /teamproject:ProjectName /mappingfile:MappingFile + ``` + +## Related notes +- [Customize the Microsoft Project field mapping file](customize-project-field-mapping-file.md) +- [Field mappings in Microsoft Project](field-mappings-in-microsoft-project.md) \ No newline at end of file diff --git a/docs/work/reference/use-categories-to-group-work-item-types.md b/docs/work/reference/use-categories-to-group-work-item-types.md new file mode 100644 index 00000000000..f0d969c40cf --- /dev/null +++ b/docs/work/reference/use-categories-to-group-work-item-types.md @@ -0,0 +1,110 @@ +--- +title: Use categories to group work item types | VSTS & TFS +description: Generate flexible reports, and support increased integration across team projects using categories +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 2fc6c411-89a9-4af5-8dd3-b2d4c2ecf540 +ms.manager: douge +ms.author: kaelli +ms.date: 04/04/2017 +--- + +# Use categories to group work item types + +[!INCLUDE [temp](../_shared/version-header-hosted-plus-tfs.md)] + + +By using categories, you can generate flexible reports, and support increased integration across team projects. You can more easily manage multiple work item types (WITs) as a group as well as WITs that are named differently. Also, you can use the **In Group** query operator to filter a list of work items based on the category to which they belong. + +Categories associate one or more WITs as belonging to the same category. The [Agile tools](../about-teams-and-settings.md) rely on the default category definitions, many of which specify a single WIT per category. + +Here's an example of the feature and bug category entries within the Categories XML definition file: + +``` +<CATEGORY name="Bug Category" refname="Microsoft.BugCategory"> + <DEFAULTWORKITEMTYPE name="Bug" /> + </CATEGORY> + <CATEGORY name="Feature Category" refname="Microsoft.FeatureCategory"> + <DEFAULTWORKITEMTYPE name="Feature" /> + </CATEGORY> +``` + +You use categories to accomplish the following operations: + +- To add WITs to appear on the backlog page, you add them to the Requirement Category. To add WITs to appear on the task board page, add them to the Task Category. See [Add bugs to the task board or backlog](../customize/add-wits-to-backlogs-and-boards.md). + +- To add WITs that you use in similar ways that the Bug type is used, add them to the Bug Category. See [Support bug update status using My Work](support-bug-update-status-using-my-work.md). + +- To support portfolio backlogs. A category is defined for each WIT that supports a portfolio backlog, such as the Feature Category and Epic Category. See [Add a backlog to Agile portfolio management](../customize/add-portfolio-backlogs.md). + +- To prevent users from creating WITs that should be created through a form or a tool, and not manually, add them to the [Hidden Types Category](#hiddentypes). + +- To query for different WITs that have different names based on locale, assign them to the same category and use the **In Group** operator. + +<a name="process"></a> +##Default categories and process configuration + Process configuration references the default categories defined for a team project. Here are the default categories that are defined in the (default process template)(../guidance/choose-process.md): + +- Bug Category +- Code Review Request Category and Code Review Response Category +- Epic Category (Controls which WITs appear on the Epic portfolio backlog and Kanban board) +- Feature Category (Controls which WITs appear on the Feature portfolio backlog and Kanban board) +- Feedback Request Category and Feedback Response Category +- Requirement Category (Controls which WITs appear on the product backlog, sprint backlogs, and Kanban board) +- Shared Step Category +- Shared Parameter Category +- Task Category (Controls which WITs appear on the task board) +- Test Case Category +- Test Plan Category +- Test Suite Category +- Hidden Types Category + +Most of these categories are self-explanatory, and most only contain one WIT within the category. The exception to this rule is the Hidden Types Category. + +If you have created WITs that act in similar ways and you want to treat them in similar ways as those defined by the above categories, then you will want to add them to the category. For example, if you have defined one or more types of bugs, then you might want to add those types to the Bug Category. In this way, the process configuration will automatically treat these bug types as they do the standard bug WIT. Or, you can customize the Requirement Category to include two or more WITs which will then appear on the product backlog. + +<a name="hiddentypes"></a> +###Hidden Types category + The Hidden Types Category specifies the set of WITs that you do not want users to create manually. By default this set includes: + +- [Code Review Request and Code Review Response](../../tfvc/day-life-alm-developer-suspend-work-fix-bug-conduct-code-review.md ) +- [Feedback Request and Feedback Response](../connect/get-feedback.md) +- [Shared Steps and Shared Parameter](../../manual-test/getting-started/create-test-cases.md) +- [Test Plan and Test Suite](../../manual-test/getting-started/create-a-test-plan.md) + +### Process configuration +Process configuration defines the layout and fields used in the display of the product backlog, sprint backlogs, and portfolio backlogs. You view these pages through the web portal. Process configuration uses categories to [configure and customize these functions](../reference/process-configuration-xml-element.md). Also, note the following restrictions: + +- To use the backlog and task boards, you must assign at least one WIT to the Requirement Category and one WIT to the Task Category. +- You cannot assign the same WIT to both the Requirement Category and to the Task Category. +- If you include more than one WIT in the Requirement Category or the Task Category, the type assigned to the `DEFAULTWORKITEMTYPE` element appears as the default type on the Agile backlog and board pages. + +- For all WITs that you assign to a category that is referenced in the ProcessConfiguration file, you must assign the workflow states to a valid metastate as described in [Process Configuration XML element reference](process-configuration-xml-element.md). + +##Related notes +- [Categories XML element reference](categories-xml-element-reference.md) +- [Import and export categories](witadmin/witadmin-import-export-categories.md) +- [Visual Studio TFS forum for Project Management and Work item tracking](http://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=tfsworkitemtracking). + +### Category names +Each category has a friendly name and a reference name that must be unique within the team project. For more information, see [Categories XML element reference](categories-xml-element-reference.md). + +### Add or remove a category +To modify the categories defined for a team project and the On-premises XML process model, you export the XML definition file, make changes, and then import it using the **witadmin** command line tool. See [Import and export categories](witadmin/witadmin-import-export-categories.md). We recommend that you don't remove any of the categories defined for the default process templates. + +The system overwrites the categories file upon import. + +### Add a WIT to only one category +WITs that you add to the Requirement Category or the Task Category must belong to one or the other, but not both. To learn more, see [Add bugs to the task board or backlog](../customize/add-wits-to-backlogs-and-boards.md). + +For WITs that you add to the Bug Category, you can add it to the Bug Category as well as others. + +<a name="query"></a> +### Filter a query based on a category + **A:** Yes. Use the **In Group** operator along with the **Work Item Type** field. For example, the following filter criteria will return all work items that are in the current team project, assigned to the team member, and defined as belonging to the Bug Category: + +|**And/Or**|**Field**|**Operator**|**Value**| +|-----------------|---------------|------------------|---------------| +||**Team Project**|**=**|**@Project**| +|And|**Assigned To**|**=**|**@Me**| +|And|**Work Item Type**|**In Group**|**Bug Category**| diff --git a/docs/work/reference/weblayout-xml-elements.md b/docs/work/reference/weblayout-xml-elements.md new file mode 100644 index 00000000000..ed5561561df --- /dev/null +++ b/docs/work/reference/weblayout-xml-elements.md @@ -0,0 +1,613 @@ +--- +title: WebLayout XML elements reference | VSTS & TFS +description: Syntax and usage of all elements used in the new web form layout for Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 67ed8539-61b8-42c7-9d0f-95b124cf5ed8 +ms.manager: douge +ms.author: kaelli +ms.date: 09/08/2017 +--- + +# WebLayout and Control elements + +[!INCLUDE [temp](../_shared/version-header-hosted-plus-tfs.md)] + +> [!IMPORTANT] +> This topic applies to team project customization for Hosted XML and On-premises XML (TFS 2017 and later versions) process models. For TFS 2015 and earlier versions, see [Layout XML element reference](layout-xml-element-reference.md). +> +>For the Inheritance process model, see [Customize a process](../process/customize-process.md). For an overview of process models, see [Customize your work tracking experience](../customize/customize-work.md). + +You use the **WebLayout** element to define the layout and controls that appear on work item forms displayed through the web portal. It supports the [new work item experience](../process/new-work-item-experience.md). It is in addition to the [**Layout** element](../reference/all-form-xml-elements-reference.md) which defines the form elements that appear when viewed through Visual Studio and other non-web clients. + +The **WebLayout** element is a required child element of the **FORM** element. + +[!INCLUDE [temp](../_shared/new-form-xml-elements-availability.md)] + +##Summary of new and deprecated elements and attributes + +The **WebLayout** and updated **Control** elements introduce several new elements and deprecate several elements and attributes. Overall, it's a much simpler syntax structure than its predecessor. + + +> [!div class="mx-tdBreakAll"] +> |New elements |Maintained elements |Deprecated elements |Deprecated attributes | +> |-------------------------|--------------------|----------------------|----------------------| +> |- ControlContribution<br/>- GroupContribution<br/>- Input<br/>- Inputs<br/>- Page<br/>- PageContribution<br/>- Section<br/>- SystemControls<br/>- WebLayout|- FORM<br/>- Layout<br/>- Group<br/>- Control |- Column<br/>- Splitter<br/>- Tab<br/>- TabGroup |- ControlSpacing<br/>- FixedWidth<br/>- LabelPosition<br/>- LabelSpacing<br/>- Margin<br/>- MinimumSize<br/>- Padding<br/>- PercentWidth | + + +In the new web form layout, the system manages the header elements shown below. These include the display of the work item ID, Title, State, Assigned To, Area and Iteration fields, tags, as well as the pages to display ![History page icon](../_img/icons/icon-history-tab-wi.png) History, ![Links page icon](../_img/icons/icon-links-tab-wi.png) Links, and ![Attachments page icon](../_img/icons/icon-attachments-tab-wi.png) Attachments. + +<img src="_img/weblayout-system-controls-details-page.png" alt="Header element within web form" style="border: 2px solid #C3C3C3;" />  + +When you export a WIT definition, you'll see a **SystemControls** section at the beginning of the **WebLayout** section, similar to the following: + +> [!div class="tabbedCodeSnippets"] +```XML +<WebLayout> + <SystemControls> + <Control Type="FieldControl" FieldName="System.Title" EmptyText="Enter title" /> + <Control Label="Assi&gned To" Type="FieldControl" FieldName="System.AssignedTo" /> + <Control Label="Stat&e" Type="FieldControl" FieldName="System.State" /> + <Control Label="Reason" Type="FieldControl" FieldName="System.Reason" /> + <Control Label="&Area" Type="WorkItemClassificationControl" FieldName="System.AreaPath" /> + <Control Label="Ite&ration" Type="WorkItemClassificationControl" FieldName="System.IterationPath" /> + <Control Label="History" Type="WorkItemLogControl" FieldName="System.History" /> + <Control Label="Links" Type="LinksControl" Name="Links" /> + <Control Label="Attachments" Type="AttachmentsControl" Name="Attachments" /> + </SystemControls> +... +``` + +You can modify select elements within the **SystemControls** section, such as changing the *EmptyText* attribute value for the System.Title field. In general, we recommend you don't customize this section much more than that. + +The other layout elements that you can customize are those associated with a page, such as the Details page, or other custom pages that you add. + + +> [!TIP] +> The **Page** element is similar to the deprecated **Tab** element. However, a **Page** element can't be grouped or nested. One page defines one tab within the web form. + +This topic provides you with a quick reference to the **WebLayout** element and it's child elements. Use this as a guide to further customize a WIT definition that's been transformed and contains the new **WebLayout** section. + +To customize the windows client layout, the [Layout XML element](layout-xml-element-reference.md). + +## WebLayout example + +The following example shows the overall structure of the **WebLayout** section within the **FORM** section. The **WebLayout** specifies a **Control** element for each field you want to have appear on the form. + +You group elements to appear within a **Page** by using the **Section** and **Group** elements. You use a **Control** element to define each field or control that you want to appear on the form. + +The following example specifies the syntax for the Details page shown previously in this topic. + +> [!div class="tabbedCodeSnippets"] +```XML +<FORM> +. . . + <WebLayout> + <SystemControls> + <Control Type="FieldControl" FieldName="System.Title" EmptyText="Enter title" /> + <Control Label="Assi&gned To" Type="FieldControl" FieldName="System.AssignedTo" /> + <Control Label="Stat&e" Type="FieldControl" FieldName="System.State" /> + <Control Label="Reason" Type="FieldControl" FieldName="System.Reason" /> + <Control Label="&Area" Type="WorkItemClassificationControl" FieldName="System.AreaPath" /> + <Control Label="Ite&ration" Type="WorkItemClassificationControl" FieldName="System.IterationPath" /> + <Control Label="History" Type="WorkItemLogControl" FieldName="System.History" /> + <Control Label="Links" Type="LinksControl" Name="Links" /> + <Control Label="Attachments" Type="AttachmentsControl" Name="Attachments" /> + </SystemControls> + <Page Label="Details" LayoutMode="FirstColumnWide"> + <Section> + <Group Label="Description"> + <Control Label="Description" Type="HtmlFieldControl" FieldName="System.Description" /> + </Group> + </Section> + <Section> + <Group Label="Planning"> + <Control Label="Story Points" Type="FieldControl" FieldName="Microsoft.VSTS.Scheduling.StoryPoints" /> + <Control Label="Priority" Type="FieldControl" FieldName="Microsoft.VSTS.Common.Priority" /> + </Group> + <Group Label="Classification"> + <Control Label="Value area" Type="FieldControl" FieldName="Microsoft.VSTS.Common.ValueArea" /> + </Group> + </Section> + <Section> + <Group Label="Development"> + <Control Type="LinksControl" Name="Development"> + <LinksControlOptions ViewMode="Dynamic" ZeroDataExperience="Development" ShowCallToAction="true"> + <ListViewOptions GroupLinks="false"> + </ListViewOptions> + <LinkFilters> + <ExternalLinkFilter Type="Build" /> + <ExternalLinkFilter Type="Pull Request" /> + <ExternalLinkFilter Type="Branch" /> + <ExternalLinkFilter Type="Fixed in Commit" /> + <ExternalLinkFilter Type="Fixed in Changeset" /> + <ExternalLinkFilter Type="Source Code File" /> + </LinkFilters> + </LinksControlOptions> + </Control> + </Group> + <Group Label="Related Work"> + <Control Type="LinksControl" Name="Related Work"> + <LinksControlOptions> + <LinkFilters> + <WorkItemLinkFilter Type="System.LinkTypes.Hierarchy-Reverse" /> + <WorkItemLinkFilter Type="System.LinkTypes.Hierarchy-Forward" /> + <WorkItemLinkFilter Type="System.LinkTypes.Related" /> + </LinkFilters> + <Columns> + <Column Name="System.State" /> + <Column Name="System.ChangedDate" /> + <Column Name="System.Links.Comment" /> + </Columns> + </LinksControlOptions> + </Control> + </Group> + </Section> + </Page> + </WebLayout> +</FORM> +``` + +<a id="customize"> </a> +## Customize the web layout + +To modify the web layout, use the information provided in this topic to modify the XML definition file for a specific work item type. To import and export your changes, see [Customize the work item tracking web form](../customize/customize-wit-form.md). + + +<a id="weblayout-element"> </a> + +## WebLayout element syntax + +You can specify how information and work item fields are grouped and appear in a work item form using the elements that are described in the following table. + + +>[!NOTE] +>For **WebLayout**, you no longer add controls for attachments, links, and history. The system automatically addes these controls (```AttachmentControl```, ```LinksControl```, ```WorkItemClassificationControl``` and ```WorkItemLogControl```) are automatically added to the web form of each WIT. + + + +### Nest elements + +You nest the following elements: + +- ```Page``` elements within a single ```WebLayout``` element +- ```Section``` elements within a ```Page``` element, limit the number of ```Section``` elements to four within a ```Page``` +- ```Group``` elements within a ```Section``` element +- ```Control``` elements within a ```Group``` element. + + +>[!TIP] +>The schema definition for work item tracking defines all **FORM** child elements as camel case and all other elements as all capitalized. If you encounter errors when validating your type definition files, check the case structure of your elements. Also, the case structure of opening and closing tags must match according to the rules for XML syntax. For more information, see [Control XML element reference](control-xml-element-reference.md). + +<table width="100%" > +<thead> +<tr> +<th width=20%"><p>Element</p></th> +<th width=80%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top" > +<tr> + <td><p>**Control**</p></td> + <td><p>Optional child element for a **Group** within **WebLayout**. Defines a field, text, hyperlink, or other control element to appear on the work item form.</p> +<pre><code><Control FieldName="FieldName" Type="DateTimeControl | ExtensionsControl | +FieldControl | HtmlFieldControl | LabelControl | WebpageControl" Label="LabelText" EmptyText="TextString" +ReadOnly="True | False" Name="InstanceName" /> +</code></pre> + +<p>See [Control element attributes](#control-attributes) and [control type](#control-types) for information about each attribute.</p></td> +</tr> + + +<tr> + <td><p>**ControlContribution**</p></td> + <td><p>Optional child element of **Group** within **WebLayout** used to secify a field-level work item extension to appear on the form. </p> +<pre><code><ControlContribution Id="ContributionId" Label="Name" > + <Inputs> + <Input Id="FieldName" Value="Value" /> + </Inputs> +</ControlContribution> +</code></pre> +<p>The *ContributionId* you specify must be installed on the account or team project collection. The WIT definition files that you export contain a [list of installed contributions](#extensions).</p> +</td> +</tr> + +<tr> + <td><p>**Extension**</p></td> + <td><p>Required child element for **Extensions**. Use to specify an extension ID of a work item control extension to display in the work item form. You must specify each extension that is used in the layout for a **ControlContribution**, **GroupContribution**, or **PageContribution** element. </p> +<pre><code><Extension Id="ExtensionId" /> +</code></pre> + +<p>The *ExtensionId* you specify must be installed on the account or team project collection. The WIT definition files that you export contain a [list of installed extensions](#extensions).</p> +<p> </p> + +</td> +</tr> + +<tr> + <td><p>**Extensions**</p></td> + <td><p>Optional container child element of **WebLayout** used to support specifying one or more **Extension** elements. If extensions are used in the form, specify them prior to a **Page** element. </p> +<pre><code><WebLayout > + <Extensions > + <Extension Id="ExtensionId" /> + . . . + </Extensions > +. . . +</WebLayout > +</code></pre> + +</td> +</tr> + +<tr> +<td><p>**FORM**</p></td> +<td><p>Required child element of **WITD** used to specify the layout and controls to appear on the work item form. Parent element for both the **Layout** (client form layout) and **WebLayout** (web form layout) elements. </p> +<pre><code><FORM> +   <Layout> . . . </Layout> +   <WebLayout> . . . </WebLayout> +</FORM></code></pre></td> +</tr> + + +<tr> +<td><p>**Group** </p></td> +<td><p>Required child element of **Section**. Provides a visual grouping of elements within a section which you can label. </p> +<pre><code><Group Label="LabelText" + <Control> . . . </Control> +</Group ></code></pre></td> +</tr> + +<tr> + <td><p>**GroupContribution**</p></td> + <td><p>Optional child element of **Section** within **WebLayout** used to specify a group-level work item extension to appear on the form. The extension will appear as a group within the form. </p> +<pre><code><GroupContribution Id="ContributionId" Label="Name" /> +</code></pre> +<p>The *ContributionId* you specify must be installed on the account or team project collection. The WIT definition files that you export contain a [list of installed contributions](#extensions).</p> +</td> +</tr> + +<tr> + <td><p>**Input**</p></td> + <td><p>Required child element for **Inputs** that specifies input data for an extension. </p> +<pre><code><Input Id="FieldName" Value="Value" /> +</code></pre> +</td> +</tr> + + +<tr> + <td><p>**Inputs**</p></td> + <td><p>Optional container child element for **ControlContribution** used to support specification of input data for an extension. </p> +<pre><code><Inputs> + <Input Id="FieldName" Value="Value" /> +</Inputs> +</code></pre> +</td> +</tr> + +<tr> + <td><p>**Page**</p></td> + <td><p>Required child element of **WebLayout**. Defines the layout of a page within the web form. </p> +<p>Specify the name of the page and the layout to use. +<pre><code><Page Label="PageName" LayoutMode="FirstColumnWide | EqualColumns "> +   <Section> +    <Group> . . . +    <Control> . . . </Control> +    <Control> . . . </Control> +    </Group> +   </Section> +</Page></code></pre> +</td> +</tr> + +<tr> + <td><p>**PageContribution**</p></td> + <td><p>Optional child element of **WebLayout** used to specify a page-level work item extension to appear on the form. The extension will appear as a page within the form. </p> +<pre><code><PageContribution Id="ContributionId" Label="Name" /> +</code></pre> +<p>The *ContributionId* you specify must be installed on the account or team project collection. The WIT definition files that you export contain a [list of installed contributions](#extensions).</p> +</td> +</tr> + +<tr> + <td><p>**Section**</p></td> + <td><p>Required child element of **Page**. Defines the layout of a section within a page of the web form. Sections form groups that [support variable resizing](../customize/customize-wit-form.md#resizing). A limit of four sections can be defined within a **Page**. </p> +<pre><code><Page> +   <Section> +    <Group> . . . +    <Control> . . . </Control> +    <Control> . . . </Control> +    </Group> +   </Section> +</Page></code></pre> +</td> +</tr> + + +<tr> +<td>**SystemControls**</td> +<td><p>Optional child element for **WebLayout**. Allows you to define the labels and empty text values for controls present in the header of the new work item form (built-in controls). This also includes, the labels for the History, Links, and Attachments tabs.</p> +<pre><code><SystemControls> + <Control Type="FieldControl" FieldName="System.Title" EmptyText="Enter title" /> + <Control Label="Assi&gned To" Type="FieldControl" FieldName="System.AssignedTo" /> + <Control Label="Stat&e" Type="FieldControl" FieldName="System.State" /> + <Control Label="Reason" Type="FieldControl" FieldName="System.Reason" /> + <Control Label="&Area" Type="WorkItemClassificationControl" FieldName="System.AreaPath" /> + <Control Label="Ite&ration" Type="WorkItemClassificationControl" FieldName="System.IterationPath" /> + <Control Label="History" Type="WorkItemLogControl" FieldName="System.History" /> + <Control Label="Links" Type="LinksControl" Name="Links" /> + <Control Label="Attachments" Type="AttachmentsControl" Name="Attachments" /> +</SystemControls></code></pre> + +</td> +</tr> +<tr> + <td><p>**WebLayout**</p></td> + <td><p>Required child element of **FORM**. Defines the layout of the work item form displayed in the web portal. Includes one or more **Page** elements.</p> +<pre><code><WebLayout> +   <Page> +    <Section> +    <Group> . . . +    <Control> . . . </Control> +    <Control> . . . </Control> +    </Group> +    </Section> +   </Page> +. . . +</WebLayout></code></pre> +</td> +</tr> +</tbody> +</table> + +<a id="control-element"> </a> +### Control element syntax + +You use the **Control** element to define a work item field, text, hyperlink, or other form type to display in a work item form. The **Control** element you specify within the **WebLayout** section should conform to the following syntax: + +> [!div class="tabbedCodeSnippets"] +```XML +<Control FieldName="FieldName" Type="DateTimeControl | FieldControl | HtmlFieldControl | +LabelControl | WebpageControl" Label="LabelText" LabelPosition="Top | Bottom | Left | Right" +EmptyText="TextString" ReadOnly="True | False" Name="InstanceName" /> +``` + + +<a id="control-attributes"> </a> +### Control element attribute syntax + +<table width="100%" > +<tbody valign="top" > +<tr> +<th width=16%">Attribute</th> +<th width=84%">Description</th> +</tr> +<tr> +<td><p><strong>FieldName</strong> </p></td> +<td> +<p>Optional. Specifies the work item field with which the control is associated. Specify the reference name of the field which should be between 1 an 70 characters. </p> +</td> +</tr> +<tr> +<td><p> <strong>Type</strong> </p></td> +<td><p>Required. Specifies the data type of the control. Specify a string from one of these built-in types: </p> +<ul> +<li><strong>DateTimeControl</strong>: Use to display formatted date fields with a field type of <strong>DateTime</strong>.</li> +<li><strong>FieldControl</strong>: Use to display Boolean, plain text, numeric fields, person-name fields, and pick lists. Supports fields with a data type of <strong>Boolean</strong>, <strong>Double</strong>, <strong>Identity</strong>, <strong>Integer</strong>,<strong>PlainText</strong>m and <strong>String</strong>. +<blockquote><b>Feature availability:</b> The Boolean data type field is only supported for VSTS and TFS 2017 and later versions. +</blockquote></li> +<li><strong>HtmlFieldControl</strong>: Use to display multi-line, rich-text format of fields with a field type of <strong>HTML</strong>.</li> +<li><strong>LabelControl</strong>: Use to display text that is not associated with a field. The text can be plain or hyperlinked. You can specify additional controls using the <strong>LabelText</strong>, <strong>Link</strong> and <strong>Text</strong> elements.</li> +<li><strong>WebpageControl</strong>: Use to display HTML-based content defined by a URI or embedded within a CDATA tag. This control does not have an associated field or field type. You specify the content and links to display using the <strong>WebpageControlOptions</strong> element.</li> +</ul> +</td> +</tr> + +<tr> +<td><p><strong>EmptyText</strong> </p></td> +<td> +<p>Optional. Specifies a text string between 1 and 255 characters in length that appears when a field is empty.</p></td> +</tr> +<tr> +<td><strong>Label</strong></td> +<td>Optional. Specifies the visible text on the form that identifies the control. Specify a string of no more than 80 characters. If unspecified, the friendly name of the ```FieldName``` is used. </td> +</tr> +<tr> +</tr> + +<tr> +<td><strong>ReadOnly</strong></td> +<td>Optional. Specifies that the field is read-only: +<ul> +<li><strong>True</strong>: Control field is read-only.</li> +<li><strong>False</strong>: Control field isn't read-only.</li> +</ul> +</td> +</tr> +<tr> +<td><p><strong>Name</strong> </p></td> +<td><p>Optional. Identifies a control uniquely. The <strong>Name</strong> is important if more than one control on the form is associated with the same work item field. </p> +<blockquote><b>Note:</b> You use the <strong>Name</strong> attribute when you want to have the same field displayed on more than one **Page** on the form. You specify a unique value for the <strong>Name</strong> attribute for both control entries so that the system identifies each control uniquely. +</blockquote>   +</td> +</tr> +</tbody> +</table> + +### Control element Type attribute syntax +<table width="100%"> +<tbody valign="top"> +<tr> +<th width=20%">Type</th> +<th width=80%">Description</th> +</tr> + +<tr> +<td>**DateTimeControl**</td> +<td>Use to display formatted date fields with a data type of DateTime. + +<p>Use ```FieldControl``` to provide a text field for the input or display of a DateTime data type field.</p> +<pre><code><Control FieldName=" MyCompany.Group1.StartDate " Type="FieldControl" +Label="Start Date" LabelPosition="Left" /> +</code></pre> +<p>Use ```DateTimeControl``` to provide a calendar picker to select a date for a field, as shown in the following illustration.</p> +![Date-Time control, Calendar field](_img/date-time-control.png) +<pre><code><Control Type="DateTimeControl" FieldName="FabrikamFiber.Schedule.SubmittedDate" +Label="Submitted Date:" LabelPosition="Left" Format="Short" /></code></pre> +</td></tr> + +<tr> +<td>**FieldControl**</td> +<td>Use to display fields with a data type of Boolean, String, Identity, Integer, Double, and PlainText. + +For example: +<pre><code><Control Type="FieldControl" FieldName="FabrikamFiber.Milestone" +Label="Milestone" Name="Milestone" LabelPosition="Left" /> +</code></pre> +<blockquote> +<b>Feature availability:</b> The Boolean data type field is only supported for VSTS and TFS 2017 and later versions. Within a client work item form, such as Visual Studio or Eclipse, a value of True or False will display.</blockquote> +<p>A Boolean field displays as a checkbox within the web work item form.</p> +![Boolean field display in web work item form](_img/weblayout-ref-checkbox-control-boolean-field.png) + +</td> +</tr> + +<tr> +<td>**HTMLFieldControl**</td> +<td>Use to display multi-line, rich-text formatted control. Specify this control type for fields of ```Type=HTML```. + +![HTML field shown on work item form](_img/html-field-control.png) + +For example: +<pre><code><Control Type="HtmlFieldControl" FieldName="FabrikamFiber.ReleaseNotes" +Label="Release Notes" Dock="Fill" /> +</code></pre> + +</td></tr> + +<tr> +<td>**LabelControl**</td> +<td>Use to display text that is not associated with a field. The text can be plain or hyperlinked. You can specify additional controls using the LabelText, Link and Text elements. See [LabelText and Text XML elements reference](../reference/labeltext-and-text-xml-elements-reference.md +) and [Link and Param XML elements reference](../reference/link-param-xml-elements-reference.md).</td> +</tr + + +<tr> +<td>**WebpageControlOptions**</td> +<td><p>Use to display HTML-based content defined by a URI or embedded within a CDATA tag. This control does not have an associated field or field type. You specify the content and links to display using the WebpageControlOptions element.</p> +<p>The **WebpageControlOptions** element and its child elements have the following syntax structure:</p> + +<pre><code><WebpageControlOptions AllowScript="true | false" ReloadOnParamChange="true | false" > +   <Link UrlRoot="UrlRoot" UrlPath ="UrlPathWithParameters" > +      <Param index="IndexValue" value="ParamValue" type ="Original | Current"> +   </Link> +   <Content> +      <![CDATA[Contents of HTML]]/> +   <Content/> +<WebpageControlOptions/></code></pre> + +<p>You use the ```Content```, ```LabelText```, and ```Link```elements to define plain text or hyperlinked labels, add hyperlinks to a field, or display Web page content in a work item form. See [Provide help text, hyperlinks, or web content on a work item form](provide-help-text-hyperlinks-web-content-form.md) for details about the syntax.</p> + + </td> +</tr> +</tbody> +</table> + + +## Related notes +If you're just getting started with the new form, see these additional topics to manage the roll out or customize it: +- [Manage new form rollout](../customize/manage-new-form-rollout.md) +- [New work item experience](../process/new-work-item-experience.md) +- [Customize a web form for a process](../process/customize-process-form.md) (Inheritance process model) +- [Customize the new form](../customize/customize-wit-form.md) (Hosted XML and On-premises XML process models) +- [LinksControlOptions elements](linkscontroloptions-xml-elements.md) + +To learn more about process models and what's supported with each, see [Customize your work tracking experience](../customize/customize-work.md). + +<a id="marketplace-extensions"> </a> +### Marketplace extensions + +Visit the [VSTS Marketplace](https://marketplace.visualstudio.com/search?target=VSTS&category=Plan%20and%20track&sortBy=Downloads) to find extensions you can start using. + +<a id="extensions"> </a> +### Form extensions + +The **ControlContribution**, **GroupContribution**, and **PageContribution** elements reference the ```Id``` of contributions from the extensions that have been installed for a project collection or account. You install an extension from [Visual Studio Marketplace](https://marketplace.visualstudio.com/vsts). To create an extension, see [Create your first extension](../../extend/get-started/node.md). + +Once the extensions have been installed, you add the <b>Contribution</b> element to the XML definition for a work item type. You export these files either by [exporting a process](../import-process/import-process.md#export-a-process) or [exporting a WIT definition file](../customize/customize-wit-form.md#witadmin). + +When you export the XML definition, it will contain a comment section that lists the installed extensions, their IDs, and any required inputs. For example: + +> [!div class="tabbedCodeSnippets"] +```XML +<!--**********************Work Item Extensions********************** +Extension: + Name: color-control-dev + Id: mariamclaughlin.color-control-dev + Control contribution: + Id: mariamclaughlin.color-control-dev.color-control-contribution + Description: + Inputs: + Id: FieldName + Description: The field associated with the control. + Type: Field + IsRequired: true + Id: Labels + Description: The list of values to select from. + Type: String + IsRequired: false + Id: Colors + Description: The field associated with the control. + Type: String + IsRequired: false +Extension: + Name: vsts-workitem-recentlyviewed + Id: mmanela.vsts-workitem-recentlyviewed + Group contribution: + Id: mmanela.vsts-workitem-recentlyviewed.recently-viewed-form-group + Description: Recently viewed work item form group +Extension: + Name: vsts-extensions-multi-values-control + Id: ms-devlabs.vsts-extensions-multi-values-control + Control contribution: + Id: ms-devlabs.vsts-extensions-multi-values-control.multi-values-form-control + Description: Multi Values Selection Control. + Inputs: + Id: FieldName + Description: The field associated with the control. + Type: Field + IsRequired: true + Id: Values + Description: The list of values to select from. + Type: String + IsRequired: false +Extension: + Name: vsts-extension-workitem-activities + Id: ms-devlabs.vsts-extension-workitem-activities +Extension: + Name: vsts-uservoice-ui + Id: ms-devlabs.vsts-uservoice-ui + Group contribution: + Id: ms-devlabs.vsts-uservoice-ui.vsts-uservoice-ui-wi-group + Description: Shows User Voice details on the work item form +--> +``` + + +Given the above example, you can add the following code snippet to your work item type definition to turn on the user voice group ```vsts-uservoice-ui``` extension by specifying the extension Id: + +> [!div class="tabbedCodeSnippets"] +```XML +<WebLayout> +... + <Extensions> +     <Extension Id="ms-devlabs.vsts-uservoice-ui" />  + </Extensions> +... +</WebLayout> +``` + +Upon import of the updated WIT definition, the group extension will automatically appear on your work item form. + +The next time you export your WIT definition, you'll see that a ```GroupContribution``` element has been added. You can move this element within the ```WebLayout``` section just as you would any other control. + \ No newline at end of file diff --git a/docs/work/reference/webpagecontroloptions-xml-elements-reference.md b/docs/work/reference/webpagecontroloptions-xml-elements-reference.md new file mode 100644 index 00000000000..30fa41c65ee --- /dev/null +++ b/docs/work/reference/webpagecontroloptions-xml-elements-reference.md @@ -0,0 +1,90 @@ +--- +title: WebpageControlOptions XML elements reference | VSTS & TFS +description: Syntax and usage for the WebpageControlOptions to display content defined for a Web page or within a CDATA tag on a work item form. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: affebf93-892c-4bce-9ad0-cbdc98410d61 +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +--- + +# WebpageControlOptions XML elements reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can display content defined for a Web page or within a CDATA tag on a work item form by using the `WebpageControlOptions` element. You can include either the **Link** or the **Content** child elements to specify either a URL or HTML for the content to appear in the form. + +To add elements to a form, you modify a work item type. See [Modify or add a custom work item type](../customize/add-modify-wit.md). + +The `WebpageControlOptions` element is a child element of the **CONTROL** element. + + +## Syntax + +> [!div class="tabbedCodeSnippets"] +```XML +<WebpageControlOptions AllowScript="true | false" ReloadOnParamChange="true | false" > +   <Link UrlRoot="UrlRoot" UrlPath="UrlPathWithParameters"> +      <Param Index="IndexValue " Value="Param Value " Type="Original | Current" /> +   </Link> +   <Content> +      <![CDATA[Contents of HTML]]> +   </Content> +</WebpageControlOptions> +``` + +## Attributes and elements + The following sections describe attributes, child elements, and parent elements. + +### Child elements and attributes + +|Element|Attribute|Description| +|-------------|---------------|-----------------| +|`WebpageControlOptions`| |Optional `Control` element when `type="WebpageControl"`.<br /> Container element for defining a URL whose contents will be rendered in the work item form.<br /> Optional `Link` element. Required when `UrlPath` is specified.<br /> Specifies a value to be used to determine the URL of the hyperlink when `UrlPath` is specified.<br /> The element type is complex type: [WebpageControlOptionsType](#WebpageControlOptionsType).| +| |`AllowScript`|Optional `WebpageControlOptions` attribute.<br /> Specifies whether JavaScript within the Web page is allowed to run (`true`) or not (`false`). The attribute type is `xs:boolean`.<br /> All other settings such as ActiveX are based on the Internet Explorer settings defined for the client.| +| |`ReloadOnParamChange`|Optional `WebpageControlOptions` attribute.<br /> Specifies whether to reload (`true`) the contents of the Web page when a parameter in the work item form is changed (`true`) or not (`false`). The attribute type is `xs:boolean`.<br /> The default value is `true`.| +|`Link`| |Optional `WebpageControlOptions` element. This element is mutually exclusive with the `Content` element.<br /> Specifies the URL for the Web page to be rendered in the work item form.<br /> For more information, see [Link and Param](link-param-xml-elements-reference.md).| +|`Content`| |Optional `WebpageControlOptions` element.<br /><br /> This element is mutually exclusive with the `Link` element.<br /> Specifies the HTML content that is to be rendered by the Web page control. The content is specified within a CDATA tag. For example:<br /><br /> `<![CDATA[Click here for detailed <b><a href="http://www.microsoft.com">Process Guidance</a></b>]]>`<br /> The element type is `xs:string`. **Note:** The HTML content is not validated prior to rendering it in the work item form.| + +### Parent Elements + +|Element|Description| +|-------------|-----------------| +|[Control](control-xml-element-reference.md)|Required parent element. Defines a field, text, hyperlink, or other control element to appear on the work item form.| +|[Text](labeltext-and-text-xml-elements-reference.md)|Optional `LabelText` element.<br /> Container element for the information or label to appear on the work item form.<br /> For more information, see [LabelText and Text](labeltext-and-text-xml-elements-reference.md).| + +## Remarks +The `Link` and `Content` elements are mutually exclusive. + +The `AllowScript` and `ReloadOnParamChange` attributes are not allowed when you use the `Content` element. + +When the Web page control is configured to display raw HTML, all scripting is disabled. Any hyperlinks in the content that are clicked are opened in the Visual Studio Web browser if the work item form is shown in Visual Studio or in Internet Explorer. +Several toolbar buttons are added to the work item form for a tab that contains `WebpageControl`. These options include the following functions: + +- Back and forward navigation +- Stop content loading and refresh content +- Return to content home page +- Open the content in a new window or in an external browser + +In addition, if the Web page to be loaded contains untrusted content, then the icon is blocked and the blocked icon appears. + +The `WebpageControlOptions` element is only recognized by clients that are running the latest version of Team Explorer. For previous versions, a red area is displayed and a message appears indicating that the control could not be found. For more information, see [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md). + +### Example +The following example shows how to load a work item form with HTML defined in a CDATA tag. + +> [!div class="tabbedCodeSnippets"] +```XML +<Control Type="WebpageControl"> + <WebpageControlOptions> + <Content> + <![CDATA[Click here for detailed <b><a href="http://www.microsoft.com">Process Guidance</a></b>]]> + </Content> + </WebpageControlOptions> +``` + +## Related notes +- [Specify work item form controls](specify-work-item-form-controls.md) +- [Provide help text, hyperlinks, or web content](provide-help-text-hyperlinks-web-content-form.md) +- [Design the work item form](design-work-item-form.md) \ No newline at end of file diff --git a/docs/work/reference/witadmin/_img/Thumbs.db b/docs/work/reference/witadmin/_img/Thumbs.db new file mode 100644 index 00000000000..26aa8d7498b Binary files /dev/null and b/docs/work/reference/witadmin/_img/Thumbs.db differ diff --git a/docs/work/reference/witadmin/_img/alm_pc_colorconfig.png b/docs/work/reference/witadmin/_img/alm_pc_colorconfig.png new file mode 100644 index 00000000000..96d04f78beb Binary files /dev/null and b/docs/work/reference/witadmin/_img/alm_pc_colorconfig.png differ diff --git a/docs/work/reference/witadmin/_img/alm_upg_addpanel.png b/docs/work/reference/witadmin/_img/alm_upg_addpanel.png new file mode 100644 index 00000000000..b4fd8bb9940 Binary files /dev/null and b/docs/work/reference/witadmin/_img/alm_upg_addpanel.png differ diff --git a/docs/work/reference/witadmin/_img/alm_upg_testcenterfaulterror.png b/docs/work/reference/witadmin/_img/alm_upg_testcenterfaulterror.png new file mode 100644 index 00000000000..0770b065ae5 Binary files /dev/null and b/docs/work/reference/witadmin/_img/alm_upg_testcenterfaulterror.png differ diff --git a/docs/work/reference/witadmin/_img/almt_wsa11analysetest.png b/docs/work/reference/witadmin/_img/almt_wsa11analysetest.png new file mode 100644 index 00000000000..e7277ac8b4d Binary files /dev/null and b/docs/work/reference/witadmin/_img/almt_wsa11analysetest.png differ diff --git a/docs/work/reference/witadmin/_img/icon_refreshnode.png b/docs/work/reference/witadmin/_img/icon_refreshnode.png new file mode 100644 index 00000000000..a3a89e21ef6 Binary files /dev/null and b/docs/work/reference/witadmin/_img/icon_refreshnode.png differ diff --git a/docs/work/reference/witadmin/_img/icon_runquery.png b/docs/work/reference/witadmin/_img/icon_runquery.png new file mode 100644 index 00000000000..2b435212f88 Binary files /dev/null and b/docs/work/reference/witadmin/_img/icon_runquery.png differ diff --git a/docs/work/reference/witadmin/_img/pnt_wit_objects.png b/docs/work/reference/witadmin/_img/pnt_wit_objects.png new file mode 100644 index 00000000000..fc341cc1a43 Binary files /dev/null and b/docs/work/reference/witadmin/_img/pnt_wit_objects.png differ diff --git a/docs/work/reference/witadmin/manage-global-lists-for-work-item-types.md b/docs/work/reference/witadmin/manage-global-lists-for-work-item-types.md new file mode 100644 index 00000000000..ed35840fb7c --- /dev/null +++ b/docs/work/reference/witadmin/manage-global-lists-for-work-item-types.md @@ -0,0 +1,134 @@ +--- +title: Import and export global lists | TFS +description: Customize or update a global list by export/import using witadmin - Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 64725cfe-72f8-4ac5-8946-95e808e035f9 +ms.author: kaelli +ms.manager: douge +ms.date: 05/10/2017 +--- + +# Manage global lists for work item types + + +[!INCLUDE [temp](../../_shared/customization-witadmin-plus-version-header.md)] + +Global lists are pick lists that you can include in one or more fields and types of work items. Use them to minimize the work that is required to update a list that is shared by multiple types of work items. Because global lists are defined for a team project collection, they can be included in work item types for all team projects within the collection. + +>[!NOTE] +>**Feature availability:** Hosted XML customization for VSTS supports adding and updating global lists with a process update. To learn more, see [Differences between VSTS and TFS process template customizations](../../import-process/differences.md). + +You can define a global list within its own definition file, in the definition file for a type of work item, or in global workflow. The global-list definition manages the global lists that are defined for a collection. The global-list definition uses the following commands in the **witadmin** command-line tool: +- **destroygloballist**: Destroys a global list. +- **exportgloballist**: Exports the global lists to an XML file, or to the Command Prompt window. It exports a single file, which contains all global lists that have been defined for the team project collection. (can run against Visual Studio Team Services (VSTS)) +- **importgloballist**: Imports global lists from an XML file. If you try to import a global list that already exists on the server, a warning asks if you want to overwrite the global list that is on the server. If you try to import a global list that does not already exist, the command creates a new global list. +- **listgloballist**: Displays the name of each global list defined on the server. (can run against VSTS) + + See [GLOBALLIST XML element reference](../define-global-lists.md). + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + +[!INCLUDE [temp](../../_shared/process-editor.md)] + +**Requirements** + +For the team project collection where the global lists are defined, you must have the following permissions set: + +- To export or list global lists, you must be a member of the **Project Collection Valid Users** group or have your **View collection-level information** permission set to **Allow**. +- To import global lists, you must be a member of the **Project Collection Administrators** security group. +- To destroy a global list using **witadmin destroygloballist**, you must be a member of the **Project Collection Administrators** security group. + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the **Command Prompt** shortcut window, and choose **Run as Administrator**. For more information, see this page on the Microsoft Web site: [User Access Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +## Syntax + +``` +witadmin destroygloballist /collection:CollectionURL /n:GlobalListName [/noprompt] [/force] +witadmin exportgloballist /collection:CollectionURL [/f:FileName] [/e:Encoding] +witadmin importgloballist /collection:CollectionURL /f:FileName [/e:Encoding] +witadmin listgloballist /collection:CollectionURL +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`CollectionURL`|Specifies the URI of the team project collection or VSTS account. For example:<br /><br /> **On-premises TFS format: http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If no virtual directory is used, then the format for the URI is the following: **http**://*ServerName:Port/CollectionName*.<br /><br /> **VSTS format: http://** *AccountName*.visualstudio.com.DefaultCollection| +|**/n**:`GlobalListName`|The name of the global list to destroy.| +|**/f**:`FileName`|The path and the name of the global list XML definition file to export or import. **Note:** If the client computer runs Windows Vista, you might not have permissions to certain folders. If you try to export the global list to a location where you do not have permissions, the registry virtualization technology automatically redirects the exported file and saves it to the virtual store. For more information, see the following pages on the Microsoft Web site: [Registry Virtualization](http://go.microsoft.com/fwlink/?LinkId=92325) and [Common file and registry virtualization issues in Windows Vista](http://go.microsoft.com/fwlink/?LinkId=92323). To avoid this redirection, you can export the file to a location where you have permissions.| +|**/e**:`Encoding`|The name of a .NET Framework 2.0 encoding format. The specified encoding will be used to export or import the XML data. For example, `/e utf-7` specifies Unicode (UTF-7) encoding. If you omit this parameter, **witadmin** attempts to detect the encoding, and if detection fails, **witadmin** uses UTF-8.| +|**/noprompt**|Disables the prompt for confirmation.| +|**/?** or **help**|Displays help about the command in the Command Prompt window.| + +## Remarks +Importing a global list creates a list if one does not exist. If the list already exists, the **witadmin importgloballist** command will warn you that the current list will be overwritten. You can write your own program to update an existing global list, or you can update the global list yourself with the new data. + +To create a new global list, start with the following code and modify it as needed. This example defines a global list of disciplines that you can assign to tasks. + +``` +<?xml version="1.0" encoding="utf-8"?> +<gl:GLOBALLISTS xmlns:gl="http://schemas.microsoft.com/VisualStudio/2005/workitemtracking/globallists"> <GLOBALLIST name="Disciplines"> <LISTITEM value="Architecture" /> <LISTITEM value="Requirements" /> <LISTITEM value="Development" /> <LISTITEM value="Release Management" /> <LISTITEM value="Project Management" /> <LISTITEM value="Test" /> </GLOBALLIST></gl:GLOBALLISTS> +``` + + Don't include project-scoped security groups within a global list, because global lists are scoped to a collection and not a project. + + To add a global list to a field, export the definition for the work item type that contains the field and add it to the field definition, as shown in the following example: + +``` +<FIELD name="Discipline" refname="Microsoft.VSTS.Common.Discipline" type="String"> + <HELPTEXT>The discipline to which the task belongs</HELPTEXT> + <ALLOWEDVALUES> + <GLOBALLIST name="Disciplines" /> + </ALLOWEDVALUES> +</FIELD> +``` + + To view the changes, import the type definition and refresh your browser or client cache. You might need to close any work items that reference the field and reopen them. + + For information about export and import of type definitions, see [Import, export, and manage work item types](witadmin-import-export-manage-wits.md). + +## Examples +Unless otherwise specified, the following values apply in each example: + +- URI for the team project collection: http://AdventureWorksServer:8080/tfs/DefaultCollection +- Server Web site port number: 8080 + +### Display the names of global lists +The following example shows the global lists defined on the server. The example exports the global lists using the default UTF-8 encoding: + +``` +witadmin listgloballist /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection +``` + +### Export the definition of global lists +The following example exports the global lists: + +``` +witadmin exportgloballist /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /f:C:mygloballists.xml +``` + +The following example exports the same global lists to the same server, but uses Unicode (UTF-7) encoding: + +``` +witadmin exportgloballist /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /f:C:mygloballists.xml /e:utf-7 +``` + +### Import the definition of global lists +The following example imports global lists: + +``` +witadmin importgloballist /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /f:C:mygloballists.xml +``` + +The following example imports the same global lists to the same server, but uses Unicode (UTF-7) encoding: + +``` +witadmin importgloballist /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /f:C:mygloballists.xml /e utf-7 +``` + +## Related notes +- [GLOBALLIST XML element reference](../define-global-lists.md) +- [Customize global workflow](../global-workflow-xml-element-reference.md) +- [witAdmin: Customize and manage objects for tracking work](witadmin-customize-and-manage-objects-for-tracking-work.md) \ No newline at end of file diff --git a/docs/work/reference/witadmin/manage-link-types.md b/docs/work/reference/witadmin/manage-link-types.md new file mode 100644 index 00000000000..573573bf3a4 --- /dev/null +++ b/docs/work/reference/witadmin/manage-link-types.md @@ -0,0 +1,117 @@ +--- +title: Manage link types | VSTS & TFS +description: Customize the link types to track related work, dependencies, and changes made over time - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: bf160228-16db-45f2-9f4f-3cda82c62a88 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Manage link types + +[!INCLUDE [temp](../../_shared/customization-witadmin-plus-version-header.md)] + +Similar to work item types, you can define and modify custom link types. However, you can't make any changes to system-defined link types. Before you add a new link type to your team project collection, review the link types available for your use. See [Manage dependencies, link work items](../../track/link-work-items-support-traceability.md). + +You manage the link types defined for a team project collection by using the following **witadmin** commands: +- **deactivatelinktype**: Deactivates the specified link type. Users will no longer be able to create links of this type. Existing links of this type will continue to function correctly. +- **deletelinktype**: Permanently removes the specified link type from the database. All links defined with this link type are also removed. +- **exportlinktype**: Exports the definitions of link types. You can export the definition of a single link type or all link types defined for the server. (can run against Visual Studio Team Services (VSTS)) +- **importlinktype**: Imports the definitions of link types from an XML file. If a link type with the same reference name already exists, it will be updated to match the imported link type. If the link type does not already exist, a new link type will be created. +- **listlinktypes**: Lists the available set of link types on a server. (can run against VSTS) +- **reactivatelinktype**: Reactivates the specified link type, and optionally assigns it a new name. + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + + **Requirements** + + For the team project collection where the link types are defined, you must have the following permissions set: + +- To list or export link types, you must have your **View project-level information** permission for a team project in the collection set to **Allow**. +- To delete, import, or reactive link types, you must be a member of the **Project Collection Administrators** security group or have your **Manage work item link types** permission set to **Allow**. + +For more information, see [Add an administrator](../../../security/set-project-collection-level-permissions.md). + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the **Command Prompt** shortcut menu, and then choose **Run as Administrator**. For more information, see the Microsoft Web site: [User Access Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +## Syntax + +``` +witadmin deactivatelinktype /collection:CollectionURL /n:LinkName +witadmin deletelinktype /collection:CollectionURL /n:LinkName [/noprompt] +witadmin exportlinktype /collection:CollectionURL [/n:LinkName] [/f:FileName] [/e:Encoding] +witadmin importlinktype /collection:CollectionURL /f:FileName [/e:Encoding] [/v] +witadmin listlinktypes /collection:CollectionURL +witadmin reactivatelinktype /collection:CollectionURL /n:LinkName +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`CollectionURL`|Specifies the URI of the team project collection or VSTS account. For example:<br /><br /> **On-premises TFS format: http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If no virtual directory is used, then the format for the URI is the following: **http**://*ServerName:Port/CollectionName*.<br /><br /> **VSTS format: http://** *AccountName*.visualstudio.com.DefaultCollection| +|**/n:** `LinkName`|The name or the reference name of the link type to deactivate or delete.| +|**/f:** `FileName`|The XML file of link types. Required for import, optional for export. If you omit this parameter, the command output appears on the display.| +|**/e:** `encoding`|The name of a .NET Framework 2.0 encoding format. The specified encoding will be used to export or import the XML data. For example, `/e:utf-7` specifies Unicode (UTF-7) encoding. If you omit this parameter, **witadmin** attempts to detect the encoding, and if detection fails, **witadmin** uses UTF-8.| +|**/v**|Validates the link type XML without importing it.| +|**/noprompt**|Disables the prompt for confirmation.| +|**/?** or **help**|Displays help about the command in the Command Prompt window.| + +## Remarks + +For the structure of the link type definition schema or information about how you can restrict the types of link relationships that team members can make, see [LinksControlOptions](../linkscontroloptions-xml-elements.md). + +## Examples + Unless otherwise specified, the following values apply in each example: + +- URI for the team project collection: http://AdventureWorksServer:8080/tfs/DefaultCollection +- Server name: AdventureWorksServer +- Input or output file name: myLinkTypes.xml +- Link type name: mylinktype +- Default encoding: UTF-8 + +### List Link Types + The following command displays the custom link types defined for Team Foundation AdventureWorksServer. + +``` +witadmin listlinktypes /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection +``` + +### List the definition of a link type + The following example displays the definition of the link type in the Command Prompt window: + +``` +witadmin exportlinktype /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection +``` + +### Deactivate and then reactivate a link type + The following examples deactivate the link type, mylinktype, and then reactivate it: + +``` +witadmin deactivatelinktype /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:mylinktype +witadmin activatelinktype /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:mylinktype +``` + +### Export the definition of a link type + The following command exports the definition of all link types to the file, mylinktype.xml: + +``` +witadmin exportlinktype /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /f:mylinktype.xml +``` + +### Import the definition of link types + The following example imports the definition of the link types defined in the XML file: + +``` +witadmin importlinktype /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /f:mylinktype.xml +``` + +## Related notes +- [Customize your work tracking experience](../../customize/customize-work.md) +- [LinksControlOptions](../linkscontroloptions-xml-elements.md) +- [Link controls, restrictions, and fields](../../track/linking-attachments.md) +- [Manage dependencies, link work items](../../track/link-work-items-support-traceability.md) +- [witAdmin: Customize and manage objects for tracking work](witadmin-customize-and-manage-objects-for-tracking-work.md) \ No newline at end of file diff --git a/docs/work/reference/witadmin/manage-work-item-fields.md b/docs/work/reference/witadmin/manage-work-item-fields.md new file mode 100644 index 00000000000..1ae915e2614 --- /dev/null +++ b/docs/work/reference/witadmin/manage-work-item-fields.md @@ -0,0 +1,335 @@ +--- +title: Manage work item fields using witadmin | VSTS & TFS +description: +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 445d9c20-2e7d-420b-9bdc-2448e8883cd6 +ms.manager: douge +ms.author: kaelli +ms.date: 03/30/2017 +--- + +# Manage work item fields + +[!INCLUDE [temp](../../_shared/customization-witadmin-plus-version-header.md)] + +You can manage the fields defined for work item types (WITs) that are defined for a team project collection (On-premises XML) by using the following **witadmin** commands. If you want to add a global field (valid for On-premises XML) you can do so by [modifying the global workflow file](../global-workflow-xml-element-reference.md) and [importing it to the collection](witadmin-import-export-global-workflow.md). + +- **changefield**: Changes one or more attributes of a field. When you change one of the following attributes, you change it for all work item types and team projects within the team project collection: + - **Data type** for `PlainText` or `HTML` fields. + > [!IMPORTANT] + > When you upgrade Team Foundation Server from an earlier version to the current version, the type assignment for the **Description** (System.Description) field is automatically converted from `PlainText` to `HTML`. With the `changefield` command, you can restore the content of this field to display plain text. + + - **Friendly name** that displays in the work item query. This name may differ from that displayed on the work item form. + - **Reporting attributes** which includes the name of the field as it appears in a report, the reference report name, and the reporting type. + - **Synchronization** with Active Directory - you can enable/disable synchronization of person name fields. +- **deletefield**: Deletes the specified field. +- **indexfield**: Turns indexing on or off for the specified field. When you enable indexing for a field, you may increase the performance of finding work items whose queries specify that field. If you add a custom field that you use in many of your work item queries, you may want to enable indexing for that field. +- **listfields**: Lists the attributes for all fields or a specified field. (can run against Visual Studio Team Services) + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + +For an overview of the fields defined within a default process template, see [Work item field index](../../guidance/work-item-field.md). + +[!INCLUDE [temp](../../_shared/process-editor.md)] + + + **Requirements** + +- To list fields, you must have your **View project-level information** permission for the team project in the collection set to **Allow**. +- To delete or rename fields or change an attribute of a field, you must be a member of the **Team Foundation Administrators** security group or the **Project Collection Administrators** security group. + +For more information, see [Add an administrator](../../../security/set-project-collection-level-permissions.md). + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the **Command Prompt** shortcut menu, and then choose **Run as Administrator**. For more information, see the Microsoft Web site: [User Access Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +## Syntax + +``` +witadmin changefield /collection:CollectionURL /n:RefName [/name:NewName] [/syncnamechanges:true | false] [/reportingname:ReportingName] [/reportingrefname:ReportingRefName] [/reportingtype:Type] [/reportingformula:Formula] [/type:PlainText | HTML] [/noprompt] + +witadmin deletefield /collection:CollectionURL /n:RefName [/noprompt] + +witadmin indexfield /collection:CollectionURL /n:Name /index:on|off + +witadmin listfields /collection:CollectionURL /n:RefName [/unused] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`CollectionURL`|Specifies the URI of the team project collection or VSTS account. For example:<br /><br /> **On-premises TFS format: http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If no virtual directory is used, then the format for the URI is the following: **http**://*ServerName:Port/CollectionName*.<br /><br /> **VSTS format: http://** *AccountName*.visualstudio.com.DefaultCollection| +|**/n**:`RefName`<br />**/n**:`Name`|The reference name of a work item type field.| +|**/index**|Specifies to enable or disable indexing for the specified field. Specify **on** to enable indexing and **off** to disable indexing.| +|**/name:** `NewName`|Specifies the new name for the field.| +|**/syncnamechanges**|Specifies to use the work item field to store names and to update as changes are made in Active Directory or a workgroup. This option is valid only when a field with the data type of String is specified for the `typename`.<br /><br /> Specify `true` to enable synchronization for the data field, specify `false` to disable synchronization for the data field.| +|**/reportingname**:`ReportingName`|Specifies the name of the field in the data warehouse to be used for reporting.| +|**/reportingrefname**:`ReportingRefName`|Specifies the reference name of the field in the data warehouse to be used for reporting.| +|**/reportingtype:** `Type`|Specifies how the field is used in the warehouse for reporting. The following values are valid:<br /><br /> - **dimension:** Used for the Integer, String, or DateTime fields.<br />- **detail:** Used for the Integer, Double, String, or DateTime fields.<br />- **measure:** Used for the Integer and Double fields. The default aggregation type is sum. You can specify another aggregation type by using the **formula** parameter.<br />- **none:** Used to disable reportability on the field.<br /><br /> For more information, see [Define and modify work item fields](../define-modify-work-item-fields.md).| +|**/reportingformula:** `Formula`|Specifies the aggregation formula to be used when the field is reported as a `measure`. The only supported formula is `sum`.| +|**/type:** `HTML` | `PlainText`|Specifies to convert the contents of the field from `PlainText` to `HTML` or from `HTML` to `PlainText`. You can specify this option only for fields whose type assignment is `PlainText` or `HTML`. See [FIELD (Definition) element reference](../field-definition-element-reference.md).| +|**/unused**|Lists all fields that are not used by any team project defined in the team project collection.| +|**/noprompt**|Disables prompt for confirmation.| +|**/? or help**|Displays help about the command in the Command Prompt window.| + + +### Indexed fields + A query index is created based on those fields that have indexing enabled. This index improves the response time when running queries that include indexed fields. + + By default, the following fields are indexed: Assigned To, Created Date, Changed By, State, Reason, Area ID, Iteration ID, and Work Item Type. If there are other fields that your team frequently uses in their queries, you can add them to the query index. + +### Synchronizing person names with Active Directory + You must manually enable synchronization of any custom work item fields that are used to assign person names that reference Active Directory. You must enable synchronization for each field for each team project collection that contains the custom fields. + + All system reference fields that show person-names have the attribute `syncnamechanges` set to `true`. Such fields include System.AuthorizedAs, System.AssignedTo, System.ChangedBy and System.CreatedBy. Synchronization in enabled for each person name field that is defined in one of the default process templates. For more information, see [Assignments and workflow fields](../../track/query-by-workflow-changes.md). + + After synchronization is enabled, the field no longer shows a static string. Instead, the field shows the name associated with a user account. When you change the user name in Active Directory or in Workgroup, a field with `syncnamechanges` set to `true` automatically shows the new name. + + When you assign the `syncnamechanges` attribute to a String field, the field always accepts valid user names. However, the field does not allow group names that are stored in Team Foundation Server or in Active Directory if any one of the following conditions is `true`: + +- The `VALIDUSER` rule is specified across all work item types +- The `VALIDUSER` rule is specified for a work item type +- The `ALLOWEDVALUES` rule is specified for a work item type, and that rule has a filter criteria that excludes groups + + For more information, see [All FIELD elements](../field-definition-element-reference.md). + +### Attributes that you can change for each work item type + You change the following attributes or values defined for a field by changing the work item type definition in which the field appears: + +- **Name** that displays on the work item form. See [Control](../control-xml-element-reference.md) +- **Help text**. See [Apply a field rule](/vsts/work/reference/apply-rule-work-item-field). +- **Allowed values** or items within a pick list or drop-down menu. See [ALLOWEDVALUES, SUGGESTEDVALUES, and PROHIBITEDVALUES XML elements](../define-pick-lists.md). + +## Examples + Unless otherwise specified, the following values apply in each example: + +- URI for the team project collection: http://AdventureWorksServer:8080/tfs/DefaultCollection +- Work item field name: AdventureWorks.Field +- Default encoding: UTF-8 + +### List fields + Use **witadmin listfields** to see the set of fields in use, to select one to add to a work item type. Also, you can list the attribute assignments defined for a specific field and determine which fields are used by which team projects. + +### View the attributes of a work item field + +- Enter the following command to list the attributes defined for a specified field, such as Microsoft.VSTS.Common.Issue. + + ``` + witadmin listfields /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:Microsoft.VSTS.Common.Issue + ``` + + Field and attribute information appears for the named field, as shown in this example. + + ``` + Field: Microsoft.VSTS.Common.Issue + Name: Issue + Type: String + Reportable As: dimension + Use: Adventure Works (Shared Steps), AW Future (Shared Steps), AW Current (Shared Steps) + Indexed: False + ``` + + The **Use** parameter indicates the name of each project and the work item type where the field is used. For more information about field attributes, see [Index of work item fields](/vsts/work/guidance/work-item-field). + +### List all fields in a team project collection + +- Enter the following command to list all fields defined for a team project collection. + + ``` + witadmin listfields /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection + ``` + + Field information for all the fields for the named project collection appears. See [Index of work item fields](/vsts/work/guidance/work-item-field). + +### List fields that are not being used + +- Enter the following command to list the fields that are no longer being used in the team project collection by any work item type. + + ``` + witadmin listfields /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /unused + ``` + + Field and attribute information appears for each field that is not being used, as shown in this example. + + ``` + Field: Microsoft.VSTS.CMMI.TaskType + Name: Task Type + Type: String + Reportable As: dimension + Use: Not In Use + Indexed: False + + Field: Microsoft.VSTSUE.Common.Flag + Name: Flag + Type: String + Reportable As: dimension + Use: Not In Use + Indexed: False + + Field: Microsoft.VSTSUE.Common.Progress + Name: Progress + Type: String + Reportable As: dimension + Use: Not In Use + Indexed: False + ``` + +### Rename a field + You can change the friendly name of a work item field to meet the naming conventions that your team uses. Note that the new name is applied to all work item types that reference the changed field in all team projects in the project collection. The friendly name displays when you define filter criteria in a work item query. The name that appears on a work item form may be different than the friendly name defined for the field. + +#### To rename a work item field + +1. Enter the following command to rename the friendly name assigned to `Microsoft.VSTS.Common.Rank` to **Important Rank**. + + ``` + witadmin changefield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:Microsoft.VSTS.Common.Rank /name:"Important Rank" + ``` + +2. At the confirmation prompt type **y** and then press ENTER. Wait until you receive the following message: + + **Field renamed.** + +#### To verify changes imported to a single project + +1. In Team Explorer, choose ![Refresh](_img/icon_refreshnode.png "Icon_refreshNode") **Refresh**. + + The latest updates are downloaded from the server, which include the changes that you just made to the field name. Wait several seconds for the refresh to finish. + +2. Choose **New Query** to create a query. + +3. In the Query Editor, choose the **Click here to add a clause** link to add a row, select the blank **Field** cell, and in the cell, type **Rank**. The following message that appears above the results list. This message indicates that the Rank cannot be found. + + **Run the query to see the query results.** TF51005: The query references a field that does not exist. The error is caused by <\<Rank>>. + +4. Delete the value **Rank** from the **Field** cell, and type **Important Rank** into the cell. + +5. Select **<>** in the **Operator** cell, and type **1** into the **Value** cell. + +6. On the **Query** toolbar, choose ![Run Query](_img/icon_runquery.png "Icon_runQuery")**Run**. + +7. Open the shortcut menu for any row in the results and select **Column Options**. Scroll down in the **Availablecolumns** list. Notice that the **Rank** field is no longer present but the **Important Rank** field is present. + +8. Select **Important Rank** in the **Available columns** box, and then choose the **>** button (add selected columns). Choose **OK**. + + Notice that the friendly name for Microsoft.VSTS.Common.Rank has been renamed from **Rank** to **Important Rank** throughout the query builder and results list. + +9. Close the query. Choose **No** when you are prompted to save the query. + +10. Create a new Task work item. Choose the **New Work Items** link, and then choose **Task**. + + This work item is created from the work item type that you changed and imported. + +11. Notice, in the **Status** box, that the label for the renamed field, **Rank**, has not changed. This is because the field labels on the work item forms are scoped to the parent team project and are independent of the server-wide field name just specified. + + > [!NOTE] + > For more information about how to change field labels on work item forms, see [ Control XML element reference](../control-xml-element-reference.md). + +12. Close the new Task and choose **No** when you are prompted to save the work item. + +### Change the report as value for a field + The following command specifies the ability to report the type of the DateTime field AdventureWorks.CreatedOn to dimension. This field's data enters the warehouse and Analysis Services databases so that it can be used to filter reports. + +``` +witadmin changefield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:AdventureWorks.CreatedOn /reportingtype:dimension +``` + + The following command specifies the ability to report the type of the Double field AdventureWorks.Field to measure. All measures are aggregated by sum. + +``` +witadmin reportfield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:AdventureWorks.Field /reportingtype:measure +``` + +### Enable synchronization of a custom person-name field + The following command enables synchronization for the work item field AW.CustomerName defined for Collection1 on the AdventureWorksServer. + +#### Verify the data type of the field that you want to convert + +1. Verify the data type assigned to the field, such as MyCompany.CustomerName, that you want to synchronize by entering the following command: + + ``` + witadmin listfields /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:MyCompany.CustomerName + ``` + +#### Enable synchronization + +1. To enable synchronization for a person-named field, type the following command, substituting your data for the arguments that are shown here: + + ``` + witadmin changefield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:MyCompany.CustomerName /syncnamechanges:true + ``` + +2. The following confirmation prompt appears: + + **This will change properties for field {0} on the Team Foundation Server. Do you want to continue?** + +3. Type **0** to confirm that you want to change the field, or **1** to cancel the request. + + If the change request succeeds, the following confirmation message appears: + + **The field was updated.** + + If the change request fails, an error message appears. The most common mistakes that can be made are trying to change a system reference field, or trying to change a field of a data type other than String. These operations are not supported. + +### Delete a field + Before you delete a field, verify that the field is not in use. If the field is in use, you must first remove the field from the work item types that use it prior to deleting it from the team project collection. The following command deletes the field AdventureWorks.Field from Collection1: + +``` +witadmin deletefield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:AdventureWorks.Field +``` + +#### Verify a field is not in use + +1. Enter the following command, specifying the reference name for the work item field, such as MyCompany.MyProcess.MyField. + + ``` + witadmin listfields /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:MyCompany.MyProcess.MyField + ``` + + In the information displayed for the field, verify that the value for **Use** is "**Not In Use**" as follows in this example. + + ``` + Field: MyCompany.MyProcess.MyField + Name: MyField + Type: String + Reportable As: dimension + Use: Not In Use + Indexed: False + ``` + +2. If the **Use** field indicates that the field is in use, then you must delete it from each work item type for each team project that is listed. For example, the Microsoft.VSTS.TCM.SystemInfo field indicates that it is being used by the Bug and Code Defect work item types for four projects: Arroyo, Desert, Palm, and Springs. + + ``` + Field: Microsoft.VSTS.TCM.SystemInfo + Name: System Info + Type: Html + Reportable As: None + Use: Arroyo (Bug), Desert (Bug), Palm (Bug), Springs (Bug, Code Defect) + Indexed: False + ``` + + Before you can delete this field, you must remove it from each of the work item types listed for each team project for which it is defined. To remove the field, you modify the definition for the work item type by deleting the `FIELD` and `Control` elements that contain the field reference name. See [Import, export, and manage work item types](witadmin-import-export-manage-wits.md), [FIELD (Definition) element reference](../field-definition-element-reference.md), and [Control](../control-xml-element-reference.md). + +#### Delete a field from a team project collection + +Enter the following command to delete the MyCompany.MyProcess.MyField field, and then choose Enter. + +``` +witadmin deletefield /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /n:RefName +``` +Enter **y** at the confirmation prompt to complete this step. + +## Q & A + +### Q: What customizations can I make and still use the Configure Features Wizard to update my team project after a TFS upgrade? + **A:** You can add custom fields, customize a pick list, and add rules to a field. The [Configure Features Wizard](../../customize/configure-features-after-upgrade.md) will update your team projects and you'll get access to the latest features. + + Changing field attributes is not recommended. To learn about which customizations you can safely make and which you should avoid, see [On-premises XML process model, Maintenance and upgrade implications](../../customize/on-premises-xml-process-model.md#before-you-customize). + +## Related notes + +- [Customizing your work tracking experience](../../customize/customize-work.md) +- [Work item field index](../../guidance/work-item-field.md) +- [witAdmin: Customize and manage objects for tracking work](witadmin-customize-and-manage-objects-for-tracking-work.md) + \ No newline at end of file diff --git a/docs/work/reference/witadmin/rebuild-client-cache.md b/docs/work/reference/witadmin/rebuild-client-cache.md new file mode 100644 index 00000000000..de79f672f96 --- /dev/null +++ b/docs/work/reference/witadmin/rebuild-client-cache.md @@ -0,0 +1,61 @@ +--- +title: Rebuild the client cache | VSTS & TFS +description: Update the data cache on client computers after certain maintenance operations. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: e110852a-ab93-4259-957e-47c2076c20bb +ms.manager: douge +ms.author: kaelli +ms.date: 02/14/2017 +--- +# Rebuild the client cache + +[!INCLUDE [temp](../../_shared/version-header-tfs-only.md)] + + +>[!NOTE] +>This topic applies to team project customization for the On-premises XML process model. You can't exercise the **witadmin rebuildcache** command against a VSTS account. <br/><br/> +>For an overview of what features are supported for all three process models, see [Customize your work tracking experience](../../customize/customize-work.md). + +You can force a rebuild of the cache on each client computer the next time it connects to a team project collection by using the **witadmin rebuildcache** command. + +To prevent workspace errors from occurring during version control or build operations in Team Foundation, the data cache on client computers must be updated after certain maintenance operations. After you move, restore, rename, or fail over a data-tier or application-tier server, you must refresh the cache for tracking work items and users must refresh the version control cache on client computers. + +> [!IMPORTANT] +> To avoid server performance issues, you should not run this command during normal operating hours. + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + + **Requirements** + +- To use the **witadmin rebuildcache** command, you must be a member of the **Team Foundation Administrators** security group or the **Project Administrators** security group for the project collection that you want to manage. See [Add an administrator](../../../security/set-project-collection-level-permissions.md). + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the shortcut menu for **Command Prompt**, and choose **Run as Administrator**. For more information, see the [Microsoft Web site](http://go.microsoft.com/fwlink/?LinkId=111235). + +## Syntax + +``` +witadmin rebuildcache /collection:CollectionURL [/noprompt] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`CollectionURL`|Specifies the URI of the team project collection or Visual Studio Team Services (VSTS) account. For example:<br /> **On-premises TFS format: http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If no virtual directory is used, then the format for the URI is the following: **http**://*ServerName:Port/CollectionName*.<br /> **VSTS format: http://** *AccountName*.visualstudio.com.DefaultCollection| +|**/noprompt**|Disables the prompt for confirmation.| +|**/?** or **help**|Displays help about the command in the Command Prompt window.| + +## Remarks + The **witadmin rebuildcache** command invalidates cached data on all clients for a specified team project collection. This causes the cache for each client to be refreshed the next time the client connects to the project collection. + +## Example + The following command invalidates the metadata cache for all clients that connect to DefaultCollection that is defined on the server that is named AdventureWorksServer. The client caches are updated the next time they connect to the project collection. + +``` +witadmin rebuildcache /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection +``` + +## Related notes +- [witAdmin: Customize and manage objects for tracking work](witadmin-customize-and-manage-objects-for-tracking-work.md) \ No newline at end of file diff --git a/docs/work/reference/witadmin/remove-work-items-permanently.md b/docs/work/reference/witadmin/remove-work-items-permanently.md new file mode 100644 index 00000000000..b3c49dd2dcd --- /dev/null +++ b/docs/work/reference/witadmin/remove-work-items-permanently.md @@ -0,0 +1,63 @@ +--- +title: Remove work items permanently | VSTS & TFS +description: Correct issues for individual work items or bluk modify or remove work items added to the task board. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 345641a1-0c8d-4af8-84ce-37a449627a52 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# Remove work items permanently + +[!INCLUDE [temp](../../_shared/version-header-tfs-only.md)] + +You can permanently remove one or more work items from the on-premises Team Foundation database for a team project collection by using the **witadmin destroywi** command. Work items whose state is set to Closed remain in the database and can be reactivated. Permanently removed work items are removed from the database and cannot be restored nor reactivated. + + Each work item represents an object that is stored in the Team Foundation database and that is assigned a unique identifier, which is referred to as a work item ID. Work item IDs are unique within a project collection. + + You can run **witadmin destroywi** against an on-premises TFS only. + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + + **Requirements** + +- You must be a member of the **Team Foundation Administrators** security group or the **Project Administrators** security group for the team project collection. See [Permission reference](../../../security/permissions.md). + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the shortcut menu for **Command Prompt**, and choose **Run as Administrator**. For more information, see the [Microsoft Web site](http://go.microsoft.com/fwlink/?LinkId=111235). + +## Syntax + +``` +witadmin destroywi /collection:CollectionURL /id:id [/noprompt] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`CollectionURL`|Specifies the URI of the team project collection or VSTS account. For example:<br /><br /> **On-premises TFS format: http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /> If no virtual directory is used, then the format for the URI is the following: **http**://*ServerName:Port/CollectionName*.<br /> **VSTS format: http://** *AccountName*.visualstudio.com.DefaultCollection| +|**/id**:`id`|The ID of a work item to destroy. To specify multiple work items, separate IDs using only commas, without whitespace.| +|**/noprompt**|Disables the prompt for confirmation.| +|**/?** or **help**|Displays help about the command in the Command Prompt window.| + + +## Permanently remove work items from the database + +The following example deletes the work item 2003 from the database for Collection1 on the AdventureWorksServer server: + +``` +witadmin destroywi /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /id:2003 +``` + +The following example deletes the work items with IDs, 12, 15, and 23 from the database for Collection1 on the AdventureWorksServer server: + +``` +witadmin destroywi /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /id:12,15,23 +``` + +## Related notes +- [Move, change, or delete work items](../../backlogs/remove-delete-work-items.md) +- [Add work items](../../backlogs/add-work-items.md) +- [witAdmin: Customize and manage objects for tracking work](witadmin-customize-and-manage-objects-for-tracking-work.md) \ No newline at end of file diff --git a/docs/work/reference/witadmin/tcm-customize-manage-test-experience.md b/docs/work/reference/witadmin/tcm-customize-manage-test-experience.md new file mode 100644 index 00000000000..3e1c3280be0 --- /dev/null +++ b/docs/work/reference/witadmin/tcm-customize-manage-test-experience.md @@ -0,0 +1,130 @@ +--- +title: Customize and manage the test experience | VSTS & TFS +description: Customize three of the features that are supported - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: a4820ed4-9213-4cfc-99e6-f974382036f8 +ms.author: kaelli +ms.manager: douge +ms.date: 09/08/2017 +--- + + +# Customize and manage the test experience + +[!INCLUDE [temp](../../_shared/version-header-tfs-only.md)] + + +>[!IMPORTANT] +>**Feature availability**: You can only exercise the tcm commands against an on-premises TFS. + +You can customize three of the features that are supported in Microsoft Test Manager using the `tcm fieldmapping` command. This command allows you to change the bug type used to automatically file bugs in Test Manager, and to customize the drop-down menu or pick lists for resolution states and failure types. + +The **tcm** command-line tool only works when run against an on-premises Team Foundation Server. + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)][!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + + +Also, you can use `tcm` command options to [copy and clone test suites and test cases](../../../manual-test/mtm/copying-and-cloning-test-suites-and-test-cases.md). + + **Requirements** + + For the team project where the work item types are defined, you must be a member of the **Team Foundation Administrators** security group or the **Project Administrators** security group. See [Add accounts to administer project collections](../../../security/set-project-collection-level-permissions.md). + +## Syntax + +``` +tcm fieldmapping /export /collection:CollectionURL /teamproject:Project /type:resolutiontype|bug|failuretype /mappingfile:path [/login:username,[password]] + +tcm fieldmapping /import /collection:CollectionURL /teamproject:Project /type:resolutiontype|bug|failuretype /mappingfile:path [/login:username,[password]] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/export**|Specifies export of the field mapping file of the type specified. For the syntax of supported file types, see the Remarks section.| +|**/import**|Specifies import of the field mapping file.| +|**/mappingfile**:`Path`|The path and file name of the XML definition file that contains the field mappings.| +|**/collection**:`CollectionURL`|Specifies the uniform resource identifier (URI) of the team project collection. The format for the URI is as follows: **http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If no virtual directory is used, the format for the URI is as follows:<br /><br /> **http**://*ServerName:Port/CollectionName*| +|**/teamproject:** *Project*|Specifies the name of the team project for which the field mappings are to be applied. This team project must be defined in the team project collection that is specified by the **/collection** parameter.| +|**/type:**resolutiontype | bug | failuretype|The type of file to import or export. For the syntax structure of each file type, see [bug](#bug), [resolution states](#resolution), and [failure types](#failure).| +|**/login:** `UserName,Password`|Optional. Specifies the name and password of a user who is logged on to the application-tier server for Team Foundation and who has permissions to run the command.<br /><br /> You would use this option when your Windows credentials do not have the appropriate permissions, you are using basic authentication, or you are not on a domain.| +|**/?** or **help**|Displays help about the command in the Command Prompt window.| + +## Remarks + Each time that you run the **tcm fieldmapping import** command, the contents of the existing field mapping file are replaced with the contents that you import. + +## <a name="bug"></a> Mapping file for bug work item type + When Test Manager creates a bug, the mapping file defines the type of work item to create and fills in three data fields: reproducible steps, system information, and the build in which the defect was found. When a tester runs a test and finds a defect, they can create a bug in which these three fields are automatically filled in. + + If your team project was created with one of the default process templates provided with Team Foundation Server, the bug work item type is already enabled. However, if you're adding another type of work item to the bug category or you're working with a customized process template, you might have to use the **tcm** command. + + You can define only one type of work item to be created when you run tests that use Test Manager. + + The following XML syntax lists the default contents of the bug field mappings file. All three fields must be specified when you import a bug field mappings file. + +``` +<?xml version="1.0" encoding="utf-16"?> +<BugFilerMappings workitemtypetocreate="Bug"> +   <ReproSteps>Microsoft.VSTS.TCM.ReproSteps</ReproSteps> +   <SystemInformation>Microsoft.VSTS.TCM.SystemInfo</SystemInformation> +   <BuildFoundIn>Microsoft.VSTS.Build.FoundIn</BuildFoundIn> +</BugFilerMappings> +``` + + For more information about fields that are used to track information that Test Manager finds, see [Build and test integration fields](../../track/build-test-integration.md). + +## <a name="resolution"></a> Mapping file for resolution states + The following XML syntax lists the default contents of the resolution states defined for the default process templates. + +``` +<?xml version="1.0" encoding="utf-8"?> +<TestResolutionStates> + <TestResolutionState name="Needs investigation" /> + <TestResolutionState name="Test issue" /> + <TestResolutionState name="Product issue" /> + <TestResolutionState name="Configuration issue" /> +</TestResolutionStates> +``` + + Before you create a team project, you can [customize the resolution states defined in the process template](../process-templates/define-initial-configuration-test-manager.md). + + [When you analyze failed tests](https://msdn.microsoft.com/en-us/library/dd286731), you assign the failure type and resolution state. + + ![Analyse test run page in MTM](_img/almt_wsa11analysetest.png "ALMT_wsa11analyseTest") + +## <a name="failure"></a> Mapping file for failure types + The following XML syntax lists the default failure types defined for a team project. + +``` +<?xml version="1.0" encoding="utf-16"?> +<TestFailureTypes> + <TestFailureType name="Regression" /> + <TestFailureType name="New Issue" /> + <TestFailureType name="Known Issue" /> + <TestFailureType name="Unknown" /> +</TestFailureTypes> + +``` + +## Examples + Unless otherwise specified, the following values apply in each example: + +- URI for the team project collection: http://AdventureWorksServer:8080/tfs/Collection1 + +- Project name: AdventureWorks + +- Bug field mapping file name: bugfieldmappings.xml + +- Folder location: "C:\Users\AdminUser\Documents\\" + +### Import the bug field mappings file + The following command imports the contents of the bugfieldmappings.xml file to the AdventureWorks team project that is defined in Collection1 on the server that is named AdventureWorksServer. + +``` +tcm fieldmapping /import /type:bug /mappingfile:"C:\Users\AdminUser\Documents\bugfieldmappings.xml" /collection:http://AdventureWorksServer:8080/tfs/Collection1 /teamproject:AdventureWorks +``` + +## Related notes +- [Using TCM from the command line](https://msdn.microsoft.com/library/jj155799.aspx) diff --git a/docs/work/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md b/docs/work/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md new file mode 100644 index 00000000000..21356a8fe41 --- /dev/null +++ b/docs/work/reference/witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md @@ -0,0 +1,110 @@ +--- +title: witAdmin:Customize and manage objects for tracking work | VSTS & TFS +description: Tracks your team's progress by creating and customizing objects that track work items. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 7853f6db-98c9-4012-b6a5-51618c41d58c +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + + +# witAdmin: Customize and manage objects for tracking work + +[!INCLUDE [temp](../../_shared/customization-witadmin-plus-version-header.md)] + +You can change how you track your team's progress by creating and customizing objects that track work items. By using the **witadmin** command-line tool, you can create, delete, import, and export objects such as categories, global lists, global workflow, types of links, and types of work items. You can also permanently delete types of work item types, and you can delete, list, or change the attributes of fields in work item. + +As the following illustration shows, you manage categories and types of and work items for each team project. You manage global lists, types of links, and fields in work item for each team project collection. You can customize global workflow for a team project or a collection. + +![Work Item Tracking Objects](_img/pnt_wit_objects.png "PNT_WIT_Objects") + +[!INCLUDE [temp](../../_shared/process-editor.md)] + + +## How to run the witadmin command-line tool + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + +For most commands, you must be a member of the Project Administrators or Project Collection Administrators groups. For more information, see [Add an administrator](../../../security/set-project-collection-level-permissions.md). + +<a name="global"></a> +## Global parameters + You can use the following parameters to display help text for **witadmin**. + +|Parameter|Description| +|---------------|-----------------| +|**/help**<br />or<br />**/?**|Displays the syntax and parameters for the **witadmin** command-line tool.| +|**command /help**<br />or<br /> **command /?**|Displays the syntax and parameters for the **witadmin** command that you specify.| + +<a name="index"></a> +##witadmin commands + +All work tracking objects—such as, work item types (WITs), process configuration, global lists— are customized by their XML definitions. + +All **witadmin** commands can be run against an on-premises TFS. You can run list and export **witadmin** commands against a VSTS account. If you are new to work tracking customization and for definitions of the work tracking objects your can customize, see [Customize your work tracking experience](../../customize/customize-work.md). + +##[Work item types](witadmin-import-export-manage-wits.md) + +- **destroywitd**: Delete a WIT +- **exportwitd**: Export a WIT file +- **importwitd**: Import a WIT file +- **listwitd**: List WIT names +- **renamewitd**: Change a WIT display name + + +##[Fields](manage-work-item-fields.md)</p> + +- **deletefield**: Delete a field +- **listfields**: List field attributes +- **indexfield**: Turn field indexing on/off +- **changefield**: Change a field attribute + +##[Process configuration](witadmin-import-export-process-configuration.md)</p> + +- **exportprocessconfig**: Export the ProcessConfiguration file +- **importprocessconfig**: Import the ProcessConfiguration file + +##[Link types](manage-link-types.md)</p> + +- **deletelinktype**: Delete a link type +- **exportlinktype**: Export a link type file +- **importlinktype**: Import a link type file +- **listlinktypes**: List the defined link types +- **reactivatelinktype**: Reactivate or rename a link type + + +##[Global lists](manage-global-lists-for-work-item-types.md)</p> + +- **destroygloballist**: Delete a global list +- **exportgloballist**: Export the global list +- **importgloballist**: Import the global list +- **listgloballist**: List all global list names + + +##[Global workflow](witadmin-import-export-global-workflow.md)</p> + +- **exportglobalworkflow**: Export the global workflow file +- **importglobalworkflow**: Import the global workflow file + + +##[Work items](remove-work-items-permanently.md) + +- **witadmin destroywi**: Permanently delete work items + + +##[Client cache](rebuild-client-cache.md)</p> + +- **rebuildcache**: Rebuild the client cache + + +##[Categories](witadmin-import-export-categories.md)</p> + +- **exportcategories**: Export the Categories file +- **importcategories**: Import the Categories file + + +## Related notes +- [Customize your work tracking experience](../../customize/customize-work.md) +- [On-premises XML process model](../../customize/on-premises-xml-process-model.md) \ No newline at end of file diff --git a/docs/work/reference/witadmin/witadmin-import-export-categories.md b/docs/work/reference/witadmin/witadmin-import-export-categories.md new file mode 100644 index 00000000000..4068f78b896 --- /dev/null +++ b/docs/work/reference/witadmin/witadmin-import-export-categories.md @@ -0,0 +1,123 @@ +--- +title: Import and export categories | VSTS & TFS +description: Use the witadmin commands to import and export categories defined for a team project - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: da37f5a5-1a52-457c-b0fc-c91fee134788 +ms.manager: douge +ms.author: kaelli +ms.date: 04/03/2017 +--- + + +# Import and export categories + +[!INCLUDE [temp](../../_shared/customization-witadmin-plus-version-header.md)] + +You can import and export categories defined for a team project by using the following **witadmin** commands: +- **exportcategories**: Exports the XML definition of categories defined on a server that runs Team Foundation Server. (can run against Visual Studio Team Services (VSTS)) +- **importcategories**: Imports a work item type XML definition file into a team project on a server that runs TFS. If a category with the same name already exists, this command overwrites the existing definition. If the work item type does not already exist, this command creates a new category. + +To learn about the default categories and how they are used, see [Use categories to group work item types](../use-categories-to-group-work-item-types.md). + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + +[!INCLUDE [temp](../../_shared/process-editor.md)] + + **Requirements** + +For the team project for which the categories are defined, you must have the following permissions set: +- To export categories of work item types, you must have your **View project-level information** permission set to **Allow**. +- To import categories of work item types, you must be a member of the **Project Administrators** security group or have the **Edit project-level information** permission set to **Allow**. + +For more information, see [Add an administrator](../../../security/set-project-collection-level-permissions.md). + +## Syntax + +``` +witadmin exportcategories /collection:CollectionURL /p:Project [/f:FileName] [/e:Encoding] + +witadmin importcategories /collection:CollectionURL /p:Project /f:FileName [/e:Encoding] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`CollectionURL`|Specifies the URI of the team project collection or VSTS account. For example:<br /><br /> **On-premises TFS format: http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If no virtual directory is used, then the format for the URI is the following: **http**://*ServerName:Port/CollectionName*.<br /><br /> **VSTS format: http://** *AccountName*.visualstudio.com.DefaultCollection| +|**/p**:`Project`|The name of the team project from which the categories are exported or to which the categories are imported.| +|**/f**:*FileName*|The path and file name of the XML definition file that contains the categories to be exported or imported. If you omit this parameter when you use the **exportcategories** command, the command lists the categories in the Command Prompt window.| +|**/e**:*Encoding*|The name of a .NET Framework 2.0 encoding format. The specified encoding will be used to export or import the XML data. For example, `/e`:`utf-7` specifies Unicode (UTF-7) encoding. If you omit this parameter, **witadmin** attempts to detect the encoding, and if detection fails, **witadmin** uses UTF-8.| +|**/?** or **help**|Displays help about the command in the Command Prompt window.| + +## Remarks + Importing a categories file creates the categories if they do not already exist. If categories already exist, the **witadmin importcategories** command will warn you that the current list will be overwritten. You can write your own program to update an existing set of categories, or you can update the categories yourself with new data. + +> [!IMPORTANT] +> Changes you make to categories can impact process configuration. See [ProcessConfiguration XML elements](../process-configuration-xml-element.md). + + For information about the categories XML file structure, see [Categories XML element reference](../categories-xml-element-reference.md). + +## Examples + Unless otherwise specified, the following values apply in each example: + +- URI for the team project collection: http://AdventureWorksServer:8080/tfs/DefaultCollection +- Project name: AdventureWorks +- Input or output file name: myCategories.xml +- Default encoding: UTF-8 + +### List categories + The following command lists the work item type categories defined for the AdventureWorks project. + +``` +witadmin exportcategories /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /p:AdventureWorks +``` + +### Add a category to the Hidden Types categories + You add a category to the Hidden Types categories to remove support for users to create work item types in that category. + +1. Export the definition file for categories for your team project. + + ``` + witadmin exportcategories /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /p:AdventureWorks /f:myCategories.xml + ``` + +2. Open the Categories file in your preferred text editor, and locate the `CATEGORY` element for the `"Hidden Types Category"`. + + > [!div class="tabbedCodeSnippets"] + ```XML + <CATEGORY name="Hidden Types Category" refname="Microsoft.HiddenCategory"> +    <DEFAULTWORKITEMTYPE name="Code Review Request" /> +    <WORKITEMTYPE name="Code Review Response" /> +    <WORKITEMTYPE name="Feedback Request" /> +    <WORKITEMTYPE name="Feedback Response" /> +    <WORKITEMTYPE name="Shared Steps" /> + </CATEGORY> + ``` + +3. Add a `WORKITEMTYPE` element that specifies the friendly name of the work item type that you want to add. + + For example, the following syntax adds the custom work item type of "Integration Build" to the Hidden Types Category. + + > [!div class="tabbedCodeSnippets"] + ```XML + <CATEGORY name="Hidden Types Category" refname="Microsoft.HiddenCategory"> +    <DEFAULTWORKITEMTYPE name="Code Review Request" /> +    <WORKITEMTYPE name="Code Review Response" /> +    <WORKITEMTYPE name="Feedback Request" /> +    <WORKITEMTYPE name="Feedback Response" /> +    <WORKITEMTYPE name="Shared Steps" /> +    <WORKITEMTYPE name="Integration Build" /> + </CATEGORY> + ``` + +4. Import the definition file for categories to your team project. + + ``` + witadmin importcategories /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /p:AdventureWorks /f:myCategories.xml + ``` + +## Related notes +- [ProcessConfiguration XML elements](../process-configuration-xml-element.md) +- [Customize your work tracking experience](../../customize/customize-work.md) +- [Use categories to group work item types](../use-categories-to-group-work-item-types.md) diff --git a/docs/work/reference/witadmin/witadmin-import-export-global-workflow.md b/docs/work/reference/witadmin/witadmin-import-export-global-workflow.md new file mode 100644 index 00000000000..a8632c3409e --- /dev/null +++ b/docs/work/reference/witadmin/witadmin-import-export-global-workflow.md @@ -0,0 +1,87 @@ +--- +title: Import and export global workflow using witadmin| VSTS & TFS +description: Manage the global workflow to minimize the work required by defining and updating the work item fields and global lists that multiple team projects and types of work items share - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: ac1a2973-6c8f-439d-bb7d-e141aaadc124 +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- + +# Import and export global workflow + +[!INCLUDE [temp](../../_shared/customization-witadmin-plus-version-header.md)] + +By using global workflow, you can minimize the work required to define and update work item fields and global lists that multiple team projects and types of work items share. With global workflow, you can define and update fields and global lists. You can manage the global workflow for a team project collection or a team project by using the following commands in the **witadmin** command-line tool: + +- **exportglobalworkflow**: Exports the global workflow to an XML file or the Command Prompt window. +- **importglobalworkflow**: Imports global workflow from an XML file. + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + + + **Requirements** + +- To export a global workflow, you must be a valid user of the team project or team project collection. +- To import a global workflow to a team project, you must be a member of the following security groups: **Team Foundation Administrators**, **Project Collection Administrators**, or **Project Administrators**. +- To import a global workflow to a team project collection, you must be a member of either the **Team Foundation Administrators** or **Project Collection Administrators**. + +See [Permission reference](../../../security/permissions.md). + +>[!NOTE] +>Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the **Command Prompt** shortcut menu, and then choose **Run as Administrator**. For more information, see the following page on the Microsoft website: [User Access Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +## Syntax + +``` +witadmin exportglobalworkflow /collection:CollectionURL [/p:ProjectName] [/f:FileName] [/e:Encoding] [/exportgloballists] + +witadmin importglobalworkflow /collection:CollectionURL [/p:ProjectName] /f:FileName [/e:Encoding] [/v] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`CollectionURL`|Specifies the URI of the collection. You must specify the URI in the following format: **http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If you do not specify a virtual directory, you must specify the URI in the following format:<br /><br /> **http**://*ServerName:Port/CollectionName*.| +|**/p**:`ProjectName`|Optional. The team project for which you want to export or import the global workflow. This team project must be defined in the collection that you specified by using the /collection parameter. If you do not specify a team project, the global workflow is imported or exported for the collection.| +|**/f**:`FileName`|The path and the name of the XML definition file for global workflow to export or import. **Note:** If the client computer is running Windows Vista, you might not have permissions to certain folders. If you try to export the global list to a location where you do not have permissions, the registry virtualization technology automatically redirects the exported file and saves it to the virtual store. For more information, see the following pages on the Microsoft web site: [Registry Virtualization](http://go.microsoft.com/fwlink/?LinkId=92325) and [Common file and registry virtualization issues in Windows Vista](http://go.microsoft.com/fwlink/?LinkId=92323). To avoid this redirection, you can export the file to a location where you have permissions.| +|**/e**:`Encoding`|Optional. The name of a .NET Framework 2.0 encoding format. The specified encoding will be used to export or import the XML data. For example, `/e utf-7` specifies Unicode (UTF-7) encoding. If you omit this parameter, **witadmin** attempts to detect the encoding and uses UTF-8 if detection fails.| +|**/v**|Optional. Validates the XML that defines the global workflow but does not import the definition file.| +|**/exportgloballists**|Optional. Exports the definitions of global lists that the global workflow references. The definitions for global lists will be embedded into the XML definition of the global workflow. If you do not specify this parameter, the definitions for global lists are omitted.| +|**/?** or **help**|Displays help about the command in the Command Prompt window.| + +## Remarks + You can define work item fields by importing them through a global workflow. However, you cannot change the properties of existing fields by using global workflow. If you import a global workflow that does not contain a **FIELDS** element, all previously imported rules for global workflow will be deleted. Field definitions will not be affected. + +## Examples + Unless otherwise specified, the following values apply in each example: + +- URI for the collection: http://AdventureWorksServer:8080/tfs/DefaultCollection +- Team project: Contoso +- Port number for the server website: 8080 + +### Export the definition of a global workflow for a team project + The following example exports the global workflow for a team project: + +``` +witadmin exportglobalworkflow /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /p:Contoso /f:C:myGlobalWorkflow.xml +``` + +### Import the definition of a global workflow to a team project + The following example imports the global workflow to the Contoso team project: + +``` +witadmin importglobalworkflow /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /p:Contoso /f:C:collectionGlobalWorkflow.xml +``` + +### Import the definition of a global workflow to a collection + The following example imports the global workflow to the collection: + +``` +witadmin importglobalworkflow /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /f:C:collectionGlobalWorkflow.xml +``` + +## Related notes +- [witAdmin: Customize and manage objects for tracking work](witadmin-customize-and-manage-objects-for-tracking-work.md) \ No newline at end of file diff --git a/docs/work/reference/witadmin/witadmin-import-export-manage-wits.md b/docs/work/reference/witadmin/witadmin-import-export-manage-wits.md new file mode 100644 index 00000000000..7c4c47be6ab --- /dev/null +++ b/docs/work/reference/witadmin/witadmin-import-export-manage-wits.md @@ -0,0 +1,181 @@ +--- +title: Import, export, and manage work item types | VSTS & TFS +description: Understand how to use the witadmin commands and to manage work item types for a team project - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 97d7ea1c-df1f-4999-adc9-b38dd2a6cca6 +ms.manager: douge +ms.author: kaelli +ms.date: 04/03/2017 +--- + +# Import, export, and manage work item types + +[!INCLUDE [temp](../../_shared/customization-witadmin-plus-version-header.md)] + +You can manage work item types for a team project by using the following **witadmin** commands: +- **destroywitd**: Destroys a work item type, and destroys every work item of that type permanently without recovery. +- **exportwitd**: Exports the definition of a work item type to an XML file, or to the Command Prompt window. +- **importwitd**: Imports work item types from an XML definition file into a team project on a server that runs Team Foundation Server. If a work item type with the same name already exists, the new work item type definition overwrites the existing one. If the work item type does not already exist, this command creates a new work item type. To validate the XML that defines a work item type, but not import the file, you use the **/v** option. +- **listwitd**: Displays the names of the work item types in the specified project in the Command Prompt window. (can run against Visual Studio Team Services) +- **renamewitd**: Changes the display name of a work item type within a specific project. After you run this command, work items of this type show the new name. + + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + +[!INCLUDE [temp](../../_shared/process-editor.md)] + + +**Requirements** + +For the team project where the work item types are defined, you must have the following permissions set: +- To export or list work item types, you must be a member of the **Project Administrators** group or have your **View project-level information** permission set to **Allow**. +- To destroy, import, or rename work item types, you must be a member of the **Team Foundation Administrators** security group or the **Project Administrators** security group. + +For more information, see [Add an administrator](../../../security/set-project-collection-level-permissions.md). + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the shortcut menu for the **Command Prompt**, and then choose **Run as Administrator**. For more information, see the Microsoft Web site: [User Access Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +## Syntax + +``` +witadmin destroywitd /collection:CollectionURL /p:Project /n:TypeName [/noprompt] +witadmin exportwitd /collection:CollectionURL /p:Project /n:TypeName [/f:FileName] [/e:Encoding] [/exportgloballists] +witadmin importwitd /collection:CollectionURL [/p:Project] /f:FileName [/e:Encoding] [/v] +witadmin listwitd /collection:CollectionURL /p:Project +witadmin renamewitd /collection:CollectionURL /p:Project /n:TypeName /new:NewName [/noprompt] +``` + + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`CollectionURL`|Specifies the URI of the team project collection. The format for the URI is the following: **http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If no virtual directory is used, then the format for the URI is the following:<br /><br /> **http**://*ServerName:Port/CollectionName*| +|**/p:** *Project*|The team project for which the types of work items are to be managed. This team project must be defined in the project collection specified by the **/collection** parameter.<br /><br /> The **/p** parameter is required unless you run the **importwitd** command with the **/v** option.| +|**/n:** `TypeName`|The name of the work item type to destroy, export, import, or rename.| +|**/f:** `FileName`|The path and file name of the XML definition file that contains the types of work items to be exported or imported. If you omit this parameter when you use the **exportwitd** command, the XML appears in the Command Prompt window. **Note:** If you are using Windows Vista you might not have permissions to certain folders. If you try to export the work item type to a location where you do not have permissions, the registry virtualization technology automatically redirects the exported file and saves it to the virtual store. To avoid this redirection, you can export the file to a location where you have permissions. For more information about registry virtualization, see the Microsoft Web site: [Registry Virtualization](http://go.microsoft.com/fwlink/?LinkId=92325) and [Common file and registry virtualization issues in Windows Vista](http://go.microsoft.com/fwlink/?LinkId=92323).| +|**/e:** *Encoding*|The name of a .NET Framework 2.0 encoding format. The command uses the specified encoding to export or import the XML data. For example, `/e:utf-7` specifies Unicode (UTF-7) encoding. If you omit this parameter, **witadmin** tries to detect the encoding, and if detection fails, **witadmin** uses UTF-8.| +|**/exportgloballists**|Exports the definitions of global lists referenced by the work item type. The definitions for global lists will be embedded into the work item type definition XML. When not specified, the definitions for global lists are omitted.| +|**/v**|Validates the XML that defines the work item type, but does not import the XML definition file. **Note:** You can validate the type definition without specifying a team project. References to project-scoped groups is ignored.| +|**/new:** *NewName*|The new name of the work item type.| +|**/noprompt**|Disables the prompt for confirmation.| +|**/?** or **help**|Displays help about the command in the Command Prompt window.| + +## Remarks + When you use the **destroywitd** command, it destroys all the following objects: + +- The work item type +- All work items of that type +- Corresponding entries in the work item tables, the long text tables, and the link tables +- Objects in the work item type metadata cache + +## Examples + Unless otherwise specified, the following values apply in each example: + +- URI for the team project collection: http://AdventureWorksServer:8080/tfs/DefaultCollection +- Project name: AdventureWorks +- Input or output file name: myworkitems.xml +- Work item type name: myworkitem +- Default encoding: UTF-8 + +### Export the definition of a WIT + The following command exports the definition for myworkitem to the file, myworkitems.xml. + +``` +witadmin exportwitd /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /p:AdventureWorks /f:myworkitems.xml /n:myworkitem +``` + + The following example exports the work item by using Unicode (UTF-7) encoding. + +``` +witadmin exportwitd /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /p:AdventureWorks /f:myworkitems.xml /n:myworkitem /e:utf-7 +``` + +### Export the definition of a WIT and its referenced global lists + The following example exports the work item type and its referenced global lists. + +``` +witadmin exportwitd /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /p:AdventureWorks /f:myworkitems.xml /n:myworkitem /exportgloballists +``` + +### List the definition of a WIT + The following example displays the definition of the work item type the Command Prompt window. + +``` +witadmin exportwitd /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /p:AdventureWorks /n:myworkitem +``` + +### Import the definition of WITs + The following example imports the work item definition from the XML file. + +``` +witadmin importwitd /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /f:myworkitem.xml /p:AdventureWorks +``` + +### Validate the XML definition of a WIT + The following example validates the XML that defines the work item type but does not import the definition. + +``` +witadmin importwitd /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /f:myworkitem.xml /p:AdventureWorks /v +``` + +## Q & A + +### Q: What customizations can I make and still use the Configure Features Wizard to update my team project after a TFS upgrade? + **A:** You can add custom WITs and change the form layout. The [Configure Features Wizard](../../customize/configure-features-after-upgrade.md) will update your team projects and you'll get access to the latest features. + + Changing the workflow or renaming a WIT might require you to perform some manual operations when updating your team project. To learn about which customizations you can safely make and which you should avoid, see [Customize the work tracking experience: Before you customize, understand the maintenance and upgrade implications](../../customize/on-premises-xml-process-model.md#before-you-customize). + +<a name="color"></a> +### Q: How do I change the color associated with a WIT? + **A:** In the web portal, work items appear in query results and on the backlog and board pages of the Agile planning tools. To change the color associated with an existing WIT or add the color to use for a new WIT, [edit the process configuration](../process-configuration-xml-element.md). + + ![Color assignments to different work item types](_img/alm_pc_colorconfig.png "ALM_PC_ColorConfig") + +### Q: How do I deactivate or disable a WIT? How do I restrict users from creating work items of a certain type? +**A:** If you have a WIT that you want to retire, but maintain the work items that have been created based on that type, you can add a rule that disables all valid users from saving the work item type. + +> [!div class="tabbedCodeSnippets"] +```XML + <TRANSITION from=" " to="New"> + <FIELDS> + <FIELD refname="System.CreatedBy"> + <VALIDUSER not="[Team Project Name]Project Valid Users" /> + </FIELD> + </FIELDS> + </TRANSITION> +``` + +If you want to restrict creation of a specific WIT to a group of users, there are two ways to restrict access: + +- [Add the WIT to the Hidden Categories group](../use-categories-to-group-work-item-types.md) to prevent the majority of contributors from creating them. If you want to allow a group of users access, you [can create a hyperlink to a template](../../backlogs/work-item-template.md) that opens the work item form and share that link with those team members who you do want to create them. +- Add [a field rule to the workflow](../apply-rule-work-item-field.md) for the System.CreatedBy field to effectively restrict a group of users from creating a work item of a specific type. As the following example shows, the user who creates the work item must belong to the `Allowed Group` in order to save the work item. + +> [!div class="tabbedCodeSnippets"] +```XML +<TRANSITION from=" " to="New"> + <FIELDS> + <FIELD refname="System.CreatedBy"> + <VALIDUSER for="Allowed Group" not="Disallowed Group" /> + </FIELD> + </FIELDS> +</TRANSITION> +``` + + +<a name="delete"></a> +### Q: How do I delete a WIT? + **A:** To prevent team members from using a specific WIT to create a work item, you can remove it from the team project. When you use `witadmin destroywitd`, you permanently remove all work items that were created using that WIT as well as the WIT itself. For example, if your team doesn't use Impediment you can delete the WIT labeled Impediment from the Fabrikam Web Site project. + +``` +witadmin destroywitd /collection:"http://FabrikamPrime:8080/tfs/DefaultCollection" /p:"Fabrikam Web Site" /n:"Impediment" +``` + +When you delete a WIT that belongs to a category, you must update the categories definition for the team project to reflect the new name. In particular, the [Agile planning tools](../../overview.md) will not work until you update the categories definition. + +For more information, see [Import and export categories](witadmin-import-export-categories.md). + +## Related notes +- [Customize your work tracking experience](../../customize/customize-work.md) diff --git a/docs/work/reference/witadmin/witadmin-import-export-process-configuration.md b/docs/work/reference/witadmin/witadmin-import-export-process-configuration.md new file mode 100644 index 00000000000..21ec513edf4 --- /dev/null +++ b/docs/work/reference/witadmin/witadmin-import-export-process-configuration.md @@ -0,0 +1,244 @@ +--- +title: Import and export process configuration | VSTS & TFS +description: Customize the process configuration to modify the display of the Agile planning tool pages that you view through the web portal for VSTS or Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 95fd448f-d702-4399-b9c2-d61cdce33c02 +ms.manager: douge +ms.author: kaelli +ms.date: 04/03/2017 +--- + + +# Import and export process configuration + +[!INCLUDE [temp](../../_shared/customization-witadmin-plus-version-header.md)] + +You customize the process configuration to modify the display of the web portal Agile tools. A few additional tools require that you map workflow states to metastate mappings. + +> [!NOTE] +> If you receive error message TF400917, an invalid configuration has occurred. Re-import the process configuration file to your team project using **witadmin importprocessconfig**. You'll get the messages you need to resolve the error. + +To manage the process configuration for a team project, use the **witadmin** command line tool to export and import the process configuration XML definition file. To learn about process configuration, see [ProcessConfiguration](../process-configuration-xml-element.md). +- **exportprocessconfig**: Exports the process configuration definition to an XML file or the Command Prompt window. (can run against Team Services) +- **importprocessconfig**: Imports the process configuration definition XML file. + +[!INCLUDE [temp](../../_shared/witadmin-run-tool.md)] + +[!INCLUDE [temp](../../_shared/process-editor.md)] + +**Requirements** + +- To export process configuration definitions, you must be a valid user of the team project or collection. +- To import process configuration definitions, you must be a member of the following security groups: **Team Foundation Administrators** or **Project Administrators**. + +For more information, see [Add an administrator](../../../security/set-project-collection-level-permissions.md). + +## Syntax + +``` +witadmin exportprocessconfig /collection:CollectionURL /p:ProjectName [/f:FileName] [/e:encoding] +witadmin importprocessconfig /collection:CollectionURL [/p:ProjectName] /f:FileName [/e:encoding] [/v] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`CollectionURLx`|Specifies the URI of the team project collection or VSTS account. For example:<br /><br /> **On-premises TFS format: http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If no virtual directory is used, then the format for the URI is the following: **http**://*ServerName:Port/CollectionName*.<br /><br /> **VSTS format: http://** *AccountName*.visualstudio.com.DefaultCollection| +|**/p**:`ProjectName`|Required. Specifies the team project for which you want to export or import the process configuration. This team project must be defined in the collection that you specified by using the /collection parameter. You do not need to specify a team project when you specify the `/v` switch.| +|**/f**:`FileName`|The path and the name of the XML definition file for the process configuration to export or import.<br /><br /> **Note:** If the client computer is running Windows Vista, you might not have permissions to certain folders. If you try to export the global list to a location where you do not have permissions, the registry virtualization technology automatically redirects the exported file and saves it to the virtual store. For more information, see the following pages on the Microsoft website: [Registry Virtualization](http://go.microsoft.com/fwlink/?LinkId=92325) and [Common file and registry virtualization issues in Windows Vista](http://go.microsoft.com/fwlink/?LinkId=92323). To avoid this redirection, you can export the file to a location where you have permissions.| +|**/e**:`Encoding`|Optional. The name of a .NET Framework 2.0 encoding format. The specified encoding will be used to export or import the XML data. For example, `/e utf-7` specifies Unicode (UTF-7) encoding. If you omit this parameter, **witadmin** attempts to detect the encoding and uses UTF-8 if detection fails.| +|**/v**|Optional. Validates the XML that defines the process configuration but does not import the definition file.| +|**/?** or **help**|Displays help about the command in the Command Prompt window.| + +## Remarks + Installing the latest version of TFS upgrades existing team projects. If you are updating an upgraded team project, see [Configure features after an upgrade](../../customize/configure-features-after-upgrade.md). + + If you encounter problems accessing existing test plans or test suites after an upgrade, see [Manual updates to support test management](../update-a-team-project-manually-to-support-test-management.md). + +## Examples +The following values apply in each example: + +- URL for the collection: http://AdventureWorksServer:8080/tfs/DefaultCollection +- Team project: Contoso +- Port number for the server website: 8080 + +<a name="quick_add"></a> +### To add a field to the quick add panel + +You can add fields for any quick add panel. For example, the following example adds **Business Value** to the product backlog panel. + +![Backlog panel with Business Value field added](_img/alm_upg_addpanel.png "ALM_UPG_AddPanel") + +The panel only displays fields that are included in the `FIELDS` section of the WIT definition for the WIT selected. For example, if you select the bug WIT, then only Title displays, as Business Value isn't defined for bugs. To add another WIT to the panel, you add it to the Requirements Category. See [Add a work item type to a backlog and board](../../customize/add-wits-to-backlogs-and-boards.md). + +1. If you don't have administrative permissions for your team project, [get them](../../../security/set-project-collection-level-permissions.md). + +2. Open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ``` + cd %programfiles(x86)%\Microsoft Visual Studio 14.0\Common7\IDE + ``` + + On a 32-bit edition of Windows, replace %programfiles(x86)% with %programfiles%. You can [install Visual Studio Community (which provides access to Team Explorer](https://www.visualstudio.com/downloads/download-visual-studio-vs) for free. + +3. Export the process configuration file. + + ``` + witadmin exportprocessconfig /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\ProcessConfiguration.xml" + ``` + + An example of a *CollectionURL* is http://MyServer:8080/tfs/TeamProjectCollectionName. + +4. Add the field reference name to the `AddPanel` section. + + For example, the following syntax adds the **Priority** element to the panel. + + ``` + <AddPanel> +    <Fields> +       <Field refname="System.Title" /> +       <Field refname="Microsoft.VSTS.Common.BusinessValue" /> +    </Fields> + </AddPanel> + ``` + + **Tips**: + + - You can look up the reference name for a field using this [index](../../guidance/work-item-field.md). + + - Add all required fields for work item types defined for the Requirements Category. That way, you avoid having to open the work item form to fill them in when you add backlog items through the panel. + +5. Import the process configuration file. + + ``` + witadmin importprocessconfig /collection:CollectionURL /p:ProjectName /f:"DirectoryPath\ProcessConfiguration.xml" + ``` + +6. Refresh your backlog page to view the updated panel. + +<a name="test_manager"></a> +###Update metastate mappings to support Test Manager + If you customize the `WORKFLOW` section of the test plan or test suite, you must map the states to metastates. + + In the following example, the test plan workflow has been updated to use the Design, Testing, and Signed Off states. To support backward compatibility, the `TestPlanWorkItems` is added to the `ProjectProcessConfiguration` section of the process configuration definition. + + +**Workflow** + +> [!div class="tabbedCodeSnippets"] +```XML +<WORKFLOW> + <STATES> + <STATE value="Design" /> + <STATE value="Testing" /> + <STATE value="Signed Off" /> + </STATES> + <TRANSITIONS> + <TRANSITION from="" to="Design"> + <REASONS> + <DEFAULTREASON value="New test plan" /> + </REASONS> + </TRANSITION> + <TRANSITION from="Design" to="Testing"> + <REASONS> + <DEFAULTREASON value="Authoring complete" /> + </REASONS> + </TRANSITION> + <TRANSITION from="Testing" to="Signed Off"> + <REASONS> + <DEFAULTREASON value="Signed Off testing" /> + </REASONS> + </TRANSITION> + <TRANSITION from="Signed Off" to="Design"> + <REASONS> + <DEFAULTREASON value="Reactivating to authoring phase" /> + </REASONS> + </TRANSITION> + <TRANSITION from="Signed Off" to="Testing"> + <REASONS> + <DEFAULTREASON value="Reactivating to run tests" /> + </REASONS> + </TRANSITION> + <TRANSITION from="Testing" to="Design"> + <REASONS> + <DEFAULTREASON value="Back to authoring" /> + </REASONS> + </TRANSITION> + </TRANSITIONS> + </WORKFLOW> +``` + +**Metastate mappings** +``` +<TestPlanWorkItems category="Microsoft.TestPlanCategory" pluralName="Test Plans" singularName="Test Plan"> + <States> + <State type="InProgress" value="Design" /> + <State type="InProgress" value="Testing" /> + <State type="Complete" value="Signed Off" /> + </States> + </TestPlanWorkItems> +<TestSuiteWorkItems category="Microsoft.TestSuiteCategory" pluralName="Test Suites" singularName="Test Suite"> + <States> + <State type="Proposed" value="In Planning" /> + <State type="InProgress" value="In Progress" /> + <State type="Complete" value="Completed" /> + </States> + </TestSuiteWorkItems> +``` + +If you modify the test suite workflow, then you have to make a similar update if you want to map new states. You would add it within a `TestSuiteWorkItems` section. See [ProcessConfiguration](../process-configuration-xml-element.md). + +## Related notes +- [Control XML element reference](../control-xml-element-reference.md) +- [Change the work item form layout](../change-work-item-form-layout.md) +- [Edit a WIT definition to add web content to a work item form](../edit-wit-definition-add-web-content-form.md) + + +## Q & A + +### Q: What customizations can I make and still use the Configure Features Wizard to update my team project after a TFS upgrade? + **A:** You can customize the quick add panel. The [Configure Features Wizard](../../customize/configure-features-after-upgrade.md) will update your team projects and you'll get access to the latest features. + + Other changes might require you to perform some manual operations when updating your team project. To learn about which customizations you can safely make and which you should avoid, see [Customize the work tracking experience: Before you customize, understand the maintenance and upgrade implications](../../customize/customize-work.md). + +### Q: When do I need to map workflow states to metastates? + **A:** When you add or remove workflow states to the following WITs, you should consider updating the process configuration to add or remove corresponding metastate mappings. + +- **WITs that belong to the Requirement Category or Task Category**: Metastate mappings support the display of the Agile planning tools. + +- **WITs that belong to the Bug Category**: Metastate mappings to support **My Work** tool (Agile and CMMI-based team projects). + +- **Test Plan and Test Suite**: Updates to the workflow of these WITs must be mapped only when you support team members connecting to TFS from a version of Test Manager that is based on Visual Studio 2013.2 or earlier version. + + Update the metastate mappings if you receive an **Application detected an unexpected fault** error when you connect to your team project. + + ![Application fault error message after TFS upgrade](_img/alm_upg_testcenterfaulterror.png "ALM_UPG_TestCenterFaultError") + +### How do I resolve process configuration errors? + **A:** When you make one of the following changes to a team project, you'll need to update the definitions for the WIT, categories, or process configuration. To avoid errors, always make your changes in this order: (1) WITs, (2) categories, and (3) process configuration. + +<table><tr><th><p>Customization</p></th><th><p>Update or verify the WIT definition</p></th><th scope="col"><p>Update or verify the process configuration definition</p></th> +</tr> +<tbody valign="top"> +<tr><td><p>Add a WIT to the Requirements Category </p><p>(A WIT can belong to the Requirements Category or the Task Category, but not both.)</p></td><td data-th="Update or verify the WIT definition"><p>To include the following fields: </p><ul class="unordered"><li><p>Backlog Priority (Scrum) or Stack Rank (Agile or CMMI) </p><p>(must match the field value assigned to type=Order in the process configuration file)</p></li><li><p>Effort (Scrum), Story Points (Agile), or Size (CMMI)</p><p>(must match the field value assigned to `type=Effort` in the process configuration file)</p></li><li><p>Area path or the field value assigned to `type=Team` in the process configuration file </p></li> +<li><p>All fields that are included in the `AddPanel` section of the process configuration file (fields must be defined within the `FIELDS` section but don't have to be included within the `FORM` section.</p></li> +</ul> +</td><td data-th="Update or verify the process configuration definition"><p>To contain the necessary metastate mappings: </p><ul class="unordered"><li><p>Map the start of each workflow state to `type="Proposed"` </p></li><li><p>Map each intermediate workflow state you want to have show up on the Kanban board to `type="InProgress"` </p></li><li><p>Map the end of each workflow state to `type="Complete"` </p><p>You can have only one State mapped to `type="Complete"`</p></li></ul><p>To contain an entry to define the color codes associated with the WIT. For example: </p> +<code><WorkItemColor primary="FF009CCC" secondary="FFD6ECF2" +name="Product Backlog Item" /></code></td></tr> +<tr><td data-th="Customization"><p>Change the workflow of a WIT in the Requirements Category</p></td><td data-th="Update or verify the WIT definition"><p>N/A</p></td><td data-th="Update or verify the process configuration definition"><p>To contain the necessary metastate mappings as described above for adding a WIT to the Requirements Category. </p></td></tr><tr><td data-th="Customization"><p>Add a WIT to the Task Category</p></td><td data-th="Update or verify the WIT definition"><p>To include the following fields:</p><ul class="unordered"><li><p>Backlog Priority (Scrum) or Stack Rank (Agile or CMMI)</p></li><li><p>Activity (Scrum or Agile) or Discipline (CMMI) </p><p>(must match the field value assigned to `type=Activity` in the process configuration file)</p></li><li><p>Remaining Work</p><p>(must match the field value assigned to `type=RemainingWork` in the process configuration file)</p></li><li><p>Area path or the field value assigned to `type=Team` in the process configuration file </p></li><li><p>(Optional) Original Work and Completed Work (Agile and CMMI only) </p></li></ul></td><td data-th="Update or verify the process configuration definition"><p>To contain the necessary metastate mappings: </p><ul class="unordered"><li><p>Map the start of each workflow state to type="Proposed" </p></li><li><p>Map each intermediate workflow state that you want to have show up on the task board to `type="InProgress"` </p></li><li><p>Map the end of each workflow state to `type="Complete`" </p><p>You can have only one State mapped to `type="Complete"`</p></li></ul><p>To contain an entry to define the color codes associated with the WIT. For example: </p> +<code><WorkItemColor primary="FFF2CB1D" secondary="FFF6F5D2" +name="Task" /></code></td></tr><tr><td data-th="Customization"><p>Change the workflow of a WIT in the Task Category</p></td><td data-th="Update or verify the WIT definition"><p>N/A</p></td><td data-th="Update or verify the process configuration definition"><p>To contain the necessary metastate mappings as described above for adding a WIT to the Task Category. </p></td></tr><tr><td data-th="Customization"><p>Add a WIT to the Bug Category (Agile and CMMI only)</p><p>Change the workflow of a WIT in the Bug Category (Agile and CMMI only)</p></td><td data-th="Update or verify the WIT definition"><p>N/A</p></td><td data-th="Update or verify the process configuration definition"><p>To contain the necessary metastate mappings: </p><ul class="unordered"><li><p>Map the start of each workflow state to `type="Proposed"`</p></li><li><p>Map each intermediate workflow state you want to have show up for My Work to `type="InProgress"`</p></li><li><p>Map the end of each workflow state type="Complete"</p><p>You can have only one State mapped to `type="Complete"`</p></li></ul><p>To learn more, see [Support bug update status using My Work](../support-bug-update-status-using-my-work.md)</a>.</p></td></tr><tr><td><p>Remove a WIT from the Requirements Category or Task Category</p></td><td><p>N/A</p></td> +<td><p>To remove any metastate mappings that are only associated with that WIT</p></td></tr><tr><td data-th="Customization"><p>Remove a WIT from a team project</p></td><td data-th="Update or verify the WIT definition"><p>To remove the WIT from the categories file.</p></td> +<td><p>To remove any metastate mappings that are only associated with the WIT that you removed and the `WorkItemColor` element that defines the color codes for the WIT you removed.</p></td></tr> +</tbody> +</table> + + +### Q: Do you want to work with two or more portfolio backlogs? + **A:** The default experience supports one level of portfolio backlog. You can add up to five levels as described in [Add portfolio backlogs to Agile tools](../../customize/add-portfolio-backlogs.md). + +### Q: Do you want to add or change the WITs that appear on your task board or product backlog? + **A:** If you've added a custom WIT and want to add that to either the backlog or task board, you can. You just can't have them appear in both places. Learn how by reading [Add work item types to backlogs and boards](../..//customize/add-wits-to-backlogs-and-boards.md). \ No newline at end of file diff --git a/docs/work/reference/work-item-save-is-slow-to-complete.md b/docs/work/reference/work-item-save-is-slow-to-complete.md new file mode 100644 index 00000000000..30f00a83d36 --- /dev/null +++ b/docs/work/reference/work-item-save-is-slow-to-complete.md @@ -0,0 +1,22 @@ +--- +title: Work item save is slow to complete | VSTS & TFS +description: Occurs when you save a work item. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 367d2f3d-8dcd-4311-a411-7ba93217aabf +ms.manager: douge +ms.author: kaelli +ms.date: 01/20/2017 +--- +# Work item save is slow to complete +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +This problem might occur when you save a work item. The problem might be intermittent and difficult to reproduce. + + **Possible Causes** + + The client computer might not be configured to automatically detect the link speed of its network adapter. This setting might decrease performance between the client computer and Visual Studio Team Foundation Server. + + **Solutions** + + On the client computer, enable automatic detection of the link speed for the network adapter. For more information, see [Configure a network adapter to automatically adjust speed](configure-network-adapter-automatically-adjust-speed.md). \ No newline at end of file diff --git a/docs/work/reference/xml-element-reference.md b/docs/work/reference/xml-element-reference.md new file mode 100644 index 00000000000..ddd986e4c7b --- /dev/null +++ b/docs/work/reference/xml-element-reference.md @@ -0,0 +1,251 @@ +--- +title: XML element index | VSTS & TFS +description: Index of XML elements used to customize the work tracking experience for Hosted XML and On-premises XML process models for Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: f65e3ae0-817a-413e-b5c3-0ebadc3ba944 +ms.manager: douge +ms.author: kaelli +ms.date: 04/04/2017 +--- + +# XML element reference + +[!INCLUDE [temp](../_shared/customization-phase-0-and-1-plus-version-header.md)] + +You can customize your team project to support specific processes and practices that your team uses, and to design your workflow, work item forms, and data fields. Customization requires modifying one or more XML definition files. Each file corresponds to a work item tracking object. You can look up the syntax structure of each XML element from the topics provided in this section. + + This illustration shows that you can create or customize eight types of objects. For team projects, you can customize categories, work item types, and process configuration. For team project collections, you can customize global lists, link types, and work item fields. You can customize global workflow for a team project or for a team project collection. For a description of these objects and other customization options, see [Agile glossary](../concepts/agile-glossary.md)and [Customize your work tracking experience](../customize/customize-work.md). + + ![Work Item Tracking Objects](_img/pnt_wit_objects.png "PNT_WIT_Objects") + +By using the index of elements in this topic, you can look up the syntax structure and find examples of how to use each element of the schema type definition for work item tracking. Elements are organized alphabetically and by the following four major groups: + +- **WITD**: The root element of the definition schema for types of work items. + +- **FIELD** (Definition): You use this element and its child elements to define a work item field and to specify the rules and conditions that apply to it. See [Modify a field or add a custom field](../customize/add-modify-field.md). To access descriptions for all fields defined within the default process templates, including system fields, see [Index of work item fields](../guidance/work-item-field.md). + +- **WORKFLOW**: You use this element and its child elements to define the states, transitions, and reasons that compose the workflow of a type of work item. In addition to the following elements, you can use most of the elements listed under [FIELD Definition Elements](#index_b) later in this topic to reference a field and apply conditions to it when a user changes its state. For more information, see [Change the workflow](change-workflow-wit.md). + + >[!NOTE] + >Changes you make to the workflow can affect the operation of the Agile planning tools, the backlog and task board pages, and other tools. You might need to customize the process configuration. See [Process configuration](../reference/process-configuration-xml-element.md). + +- **FORM**: You use this element and its child elements to specify the fields that appear on the work item form and the layout or design of the form. For more information, see [Design the work item form](design-work-item-form.md). + + + +<a name="index_witd"></a> +## Index of WITD XML elements + + The following table provides an index to the reference topics for all child elements of the parent container element. Also, you can access the topic that provides detailed information and examples for each child element. + +>[!NOTE] +>**Feature availability:**  The new form elements (**FORM-WebLayout**) and its corresponding features are available from VSTS and the web portal for TFS 2017. To learn more about the new for, see [enable the new form](../process/new-work-item-experience.md)<br/> +> - For users of Team Services working with [hosted XML customization](../import-process/import-process.md), an admin is required to [enable the new form](../customize/manage-new-form-rollout.md).<br/> +> - For TFS 2017 users, the new form is automatically available when you add team projects to a new collection. For existing team projects, an admin is required to [enable the new form](../customize/manage-new-form-rollout.md).<br/> +> - For TFS 2015 users, the new form isn't available. Use the (**FORM-Layout**) elements to customize your WIT definitions. You must [upgrade to TFS 2017 or later version](https://www.visualstudio.com/downloads/#team-foundation-server-2017) to access the new form.   + + +<table> +<tr> +<td> +<h3>WITD</h3> +- [DESCRIPTION](all-witd-xml-elements-reference.md) +- [FIELDS](define-modify-work-item-fields.md) (Definition) +- [FORM](all-form-xml-elements-reference.md) +- [GLOBALISTS](define-global-lists.md) +- [WITD](all-witd-xml-elements-reference.md) +- [WORKFLOW](all-workflow-xml-elements-reference.md) +- [WORKITEMTYPE](all-witd-xml-elements-reference.md) + +<h3 style="margin-bottom:8px">WORKFLOW</h3> +- [ACTION](automate-field-assignments-state-transition-reason.md) +- [ACTIONS](automate-field-assignments-state-transition-reason.md) +- [DEFAULTREASON](all-workflow-xml-elements-reference.md) +- [FIELD (Workflow)](field-workflow-element-reference.md) +- [FIELDS (Workflow)](define-default-copy-value-field.md) +- [REASON](all-workflow-xml-elements-reference.md) +- [REASONS](all-workflow-xml-elements-reference.md) +- [STATE](all-workflow-xml-elements-reference.md) +- [STATES](all-workflow-xml-elements-reference.md) +- [TRANSITION](transition-xml-element.md) +- [TRANSITIONS](all-workflow-xml-elements-reference.md) +- [WORKFLOW](all-workflow-xml-elements-reference.md) +</td> +<td> +<h3 style="margin-bottom:8px">FIELD</h3> +- [ALLOWEDVALUES](define-pick-lists.md) +- [ALLOWEXISTINGVALUE](define-pick-lists.md) +- [CANNOTLOSEVALUE](apply-rule-work-item-field.md) +- [COPY](define-default-copy-value-field.md) +- [DEFAULT](define-default-copy-value-field.md) +- [EMPTY](apply-rule-work-item-field.md) +- [FIELD (Definition)](field-definition-element-reference.md) +- [FROZEN](apply-rule-work-item-field.md) +- [HELPTEXT](provide-help-text-hyperlinks-web-content-form.md) +- [GLOBALISTS](define-global-lists.md) +- [LISTITEM (Global Lists)](define-global-lists.md) +- [LISTITEM (Pick Lists)](define-pick-lists.md) +- [MATCH](apply-pattern-matching-to-string-field.md) +- [NOTSAMEAS](apply-rule-work-item-field.md) +- [PROHIBITEDVALUES](define-pick-lists.md) +- [READONLY](apply-rule-work-item-field.md) +- [REQUIRED](apply-rule-work-item-field.md) +- [SERVERDEFAULT](define-default-copy-value-field.md) +- [SUGGESTEDVALUES](define-pick-lists.md) +- [VALIDUSER](apply-rule-work-item-field.md) +- [WHEN](assign-conditional-based-values-and-rules.md) +- [WHENNOT](assign-conditional-based-values-and-rules.md) +- [WHENCHANGED](assign-conditional-based-values-and-rules.md) +- [WHENNOTCHANGED](assign-conditional-based-values-and-rules.md) +</td> +<td> +<h3 style="margin-bottom:8px">FORM-Layout</h3> +- [Column](all-form-xml-elements-reference.md) +- [Content](webpagecontroloptions-xml-elements-reference.md) +- [Control](control-xml-element-reference.md) +- [ExternalLinkFilters](linkscontroloptions-elements.md) +- [Filter](linkscontroloptions-elements.md) +- [FORM](all-form-xml-elements-reference.md) +- [Group](all-form-xml-elements-reference.md) +- [LabelText](labeltext-and-text-xml-elements-reference.md) +- [Layout](layout-xml-element-reference.md) +- [Link (Label Text)](labeltext-and-text-xml-elements-reference.md) +- [Link (Hyperlink)](link-param-xml-elements-reference.md) +- [Link (Web page)](webpagecontroloptions-xml-elements-reference.md) +- [LinkColumn](linkscontroloptions-elements.md) +- [LinkColumns](linkscontroloptions-elements.md) +- [LinksControlOptions](linkscontroloptions-elements.md) +- [Param](link-param-xml-elements-reference.md) +- [Splitter](all-form-xml-elements-reference.md) +- [Tab](tab-xml-element-reference.md) +- [TabGroup](all-form-xml-elements-reference.md) +- [Text](labeltext-and-text-xml-elements-reference.md) +- [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md) +- [WorkItemLinkFilters](linkscontroloptions-elements.md) +- [WorkItemTypeFilters](linkscontroloptions-elements.md) +</td> +<td> +<h3 style="margin-bottom:8px">FORM-WebLayout</h3> +- [Column](linkscontroloptions-xml-elements.md) +- [Columns](linkscontroloptions-xml-elements.md) +- [Content](webpagecontroloptions-xml-elements-reference.md)      +- [Control](weblayout-xml-elements.md)    +- [ControlContribution](weblayout-xml-elements.md) +- [ExternalLinkFilter](linkscontroloptions-xml-elements.md) +- [ExternalLinkFilters](apply-rule-work-item-field.md) +- [Extension](weblayout-xml-elements.md) +- [Extensions](weblayout-xml-elements.md)       +- [Filter](linkscontroloptions-elements.md)      +- [FORM](weblayout-xml-elements.md)        +- [Group](weblayout-xml-elements.md)  +- [GroupContribution](weblayout-xml-elements.md)   +- [Input](weblayout-xml-elements.md)    +- [Inputs](weblayout-xml-elements.md)        +- [LabelText](labeltext-and-text-xml-elements-reference.md)      +- [Layout](layout-xml-element-reference.md)      +- [Link (Hyperlink)](link-param-xml-elements-reference.md)      +- [Link (Label Text)](labeltext-and-text-xml-elements-reference.md)      +- [Link (Web page)](webpagecontroloptions-xml-elements-reference.md)      +- [LinkColumn](linkscontroloptions-elements.md)      +- [LinkColumns](linkscontroloptions-elements.md)      +- [LinkFilters](linkscontroloptions-xml-elements.md) +- [LinksControlOptions](linkscontroloptions-elements.md)      +- [ListViewOptions](linkscontroloptions-xml-elements.md) +- [Page](weblayout-xml-elements.md) +- [PageContribution](weblayout-xml-elements.md) +- [Param](link-param-xml-elements-reference.md)            +- [Section](weblayout-xml-elements.md) +- [SystemControls](weblayout-xml-elements.md) +- [Text](labeltext-and-text-xml-elements-reference.md)       +- [WebLayout](weblayout-xml-elements.md) +- [WebpageControlOptions](webpagecontroloptions-xml-elements-reference.md)   +- [WorkItemLinkFilter](linkscontroloptions-xml-elements.md) +- [WorkItemLinkFilters](linkscontroloptions-elements.md)      +- [WorkItemTypeFilters](linkscontroloptions-elements.md) +</td> +</tr> +</table> + +<a name="index_objects"></a> + +## Index of other work tracking object XML elements + +The following table provides an index to the reference topics for the elements used to define categories, global lists, link types, and process configuration. + +<table> +<tr> +<td> +<h3>[Categories](categories-xml-element-reference.md)</h3> +- CATEGORIES +- CATEGORY +- DEFAULTWORKITEMTYPE +- WORKITEMTYPE + +<h3 style="margin-bottom:8px">[Global lists](define-global-lists.md)</h3> +- GLOBALLISTS +- GLOBALLIST +- LISTITEM + +<h3 style="margin-bottom:8px">[Link types](link-type-element-reference.md)</h3> +- LinkTypes +- LinkType +</td> +<td> +<h3 style="margin-bottom:8px">[ProcessConfiguration](process-configuration-xml-element.md)</h3> +- AddPanel +- BugWorkItems +- Column +- Columns +- DayOfWeek +- FeedbackRequestWorkItems +- FeedbackResponseWorkItems +- Field +- Fields +- PortfolioBacklog +- PortfolioBacklogs +- ProjectProcessConfiguration +- Properties +- Property +- RequirementBacklog +- State +- States +- TaskBacklog +- TestPlanWorkItems +- TestSuiteWorkItems +- TypeField +- TypeFields +- TypeFieldValue +- TypeFieldValues +- Weekends +- WorkItemColor +- WorkItemColors +</td> +</tr> +</table> + +<!--- +## Objects used to track work + +For descriptions of the + + +|Object|Description|| +|------------|-----------------|-| +|**Category**|[Use categories to group work item types](use-categories-to-group-work-item-types.md)<br /><br /> A category defines a group of work item types that track similar items of work but are referred to by different names. You can group one or more work item types in the same team project into a category. You define categories to support running queries, generating reports, and setting default work item types in specific instances. You use the **In Group** operator to find work items that belong to a category. For more information, see [Track](../track/query-operators-variables.md).|| +|**Field**|[Modify a field or add a custom field](../customize/add-modify-field.md)<br /><br /> A field defines a type of data that is used to track work. You use work item fields to track data for a work item type, to define the filter criteria for queries, and to generate reports. You must define each data element that is not built in, that the process template does not provide, and that you want to track, use to define the workflow, or appear on the form for a work item type. You define a data element using the **FIELD** element.<br /><br /> Each field is defined by one or more attributes, which include what type of data it can contain, whether it is used in reporting, and whether it is indexed. You can also specify optional elements that restrict, auto-populate, or specify conditions for the values to which users can set the field by using a work item form.<br /><br /> You can add a field, remove it, or customize how you use it to track data.|| +|**Global list**|[GLOBALLIST XML element reference](define-global-lists.md)<br /><br /> A global list defines a list of values, when is known as a pick list, that you can use across work item types to control the value or values to which users can set a field in a work item. You use global lists to quickly update the contents of pick lists that are used for many types of work items.<br /><br /> You can define global lists within a type of work item type, but this practice is not recommended because the definition of the work item type will overwrite changes that are defined elsewhere if that definition is imported. A best practice is to define and import global lists through a definition file for global lists or global workflow.|| +|**Global workflow**|[Customize global workflow](customize-global-workflow.md)<br /><br /> A global workflow defines fields and global lists that are available to all types of work items for either a team project or a collection.|| +|**Link type**|[Define a custom link type](link-type-element-reference.md)<br /><br /> A link type defines the rules and restrictions that control the relationships that users can make between work items. In addition to the built-in types of links, you can create link types to support your project-tracking requirements. Before you start to create links between work items, you should analyze how you might use links to plan your project and track the status of work items.|| +|**Process configuration**|[Process configuration](../reference/process-configuration-xml-element.md)<br /><br /> Process configuration elements control the layout and functions of the backlog and task board Agile tools provided with the web portal.<br /><br /> If your team project was created using a process template other than those provided by Visual Studio ALM or you have customized the type definitions for work items, you may need to customize the definition files that support process configuration. Also, if you have customized or added types of work items and want to use those fields, then you will want to determine how to modify the process configuration elements to match other objects that you have customized.|| +|**Work item type**|[Modify or add a custom work item type](../customize/add-modify-wit.md)<br /><br /> A type of work item defines an object, such as a bug, a requirement, or a risk, that is used to track work for a team project. A work item type defines the fields, workflow, and form for tracking work.|| + +--> + +## Related notes +- [Customize your work tracking experience](../customize/customize-work.md) +- [All FIELD XML elements](all-field-xml-elements-reference.md) +- [All FORM XML elements](all-form-xml-elements-reference.md) +- [All WITD elements](all-witd-xml-elements-reference.md) +- [All WORKFLOW XML elements](all-workflow-xml-elements-reference.md) +- [witAdmin: Customize objects for tracking work](witadmin/witadmin-customize-and-manage-objects-for-tracking-work.md) diff --git a/docs/work/scale/_img/ALM_DS_WorkingDaysOff.png b/docs/work/scale/_img/ALM_DS_WorkingDaysOff.png new file mode 100644 index 00000000000..2612391cbe2 Binary files /dev/null and b/docs/work/scale/_img/ALM_DS_WorkingDaysOff.png differ diff --git a/docs/work/scale/_img/add-account-as-team-admin.png b/docs/work/scale/_img/add-account-as-team-admin.png new file mode 100644 index 00000000000..0cccde1b81c Binary files /dev/null and b/docs/work/scale/_img/add-account-as-team-admin.png differ diff --git a/docs/work/scale/_img/add-activity-to-capacity-planning.png b/docs/work/scale/_img/add-activity-to-capacity-planning.png new file mode 100644 index 00000000000..7dada639808 Binary files /dev/null and b/docs/work/scale/_img/add-activity-to-capacity-planning.png differ diff --git a/docs/work/scale/_img/add-admin-dialog.png b/docs/work/scale/_img/add-admin-dialog.png new file mode 100644 index 00000000000..709dfb105d1 Binary files /dev/null and b/docs/work/scale/_img/add-admin-dialog.png differ diff --git a/docs/work/scale/_img/add-team-admin-dialog.png b/docs/work/scale/_img/add-team-admin-dialog.png new file mode 100644 index 00000000000..84ce46cfb4e Binary files /dev/null and b/docs/work/scale/_img/add-team-admin-dialog.png differ diff --git a/docs/work/scale/_img/add-team-admin-link.png b/docs/work/scale/_img/add-team-admin-link.png new file mode 100644 index 00000000000..3a95dce75f3 Binary files /dev/null and b/docs/work/scale/_img/add-team-admin-link.png differ diff --git a/docs/work/scale/_img/add-teams-create-team-dialog.png b/docs/work/scale/_img/add-teams-create-team-dialog.png new file mode 100644 index 00000000000..7173c50b156 Binary files /dev/null and b/docs/work/scale/_img/add-teams-create-team-dialog.png differ diff --git a/docs/work/scale/_img/add-teams-open-admin-context-tfs-2017.png b/docs/work/scale/_img/add-teams-open-admin-context-tfs-2017.png new file mode 100644 index 00000000000..8e83de39bd5 Binary files /dev/null and b/docs/work/scale/_img/add-teams-open-admin-context-tfs-2017.png differ diff --git a/docs/work/scale/_img/add-teams-overview-vsts.png b/docs/work/scale/_img/add-teams-overview-vsts.png new file mode 100644 index 00000000000..fe02c5b5ea4 Binary files /dev/null and b/docs/work/scale/_img/add-teams-overview-vsts.png differ diff --git a/docs/work/scale/_img/add-teams-select-team-tfs-2017.png b/docs/work/scale/_img/add-teams-select-team-tfs-2017.png new file mode 100644 index 00000000000..b0bbb71c769 Binary files /dev/null and b/docs/work/scale/_img/add-teams-select-team-tfs-2017.png differ diff --git a/docs/work/scale/_img/add-teams-team-members-added.png b/docs/work/scale/_img/add-teams-team-members-added.png new file mode 100644 index 00000000000..312a9af3afc Binary files /dev/null and b/docs/work/scale/_img/add-teams-team-members-added.png differ diff --git a/docs/work/scale/_img/add-teams-team-members-dialog-tfs-2017.png b/docs/work/scale/_img/add-teams-team-members-dialog-tfs-2017.png new file mode 100644 index 00000000000..d3f115e7c14 Binary files /dev/null and b/docs/work/scale/_img/add-teams-team-members-dialog-tfs-2017.png differ diff --git a/docs/work/scale/_img/add-teams-team-members-tfs-2017.png b/docs/work/scale/_img/add-teams-team-members-tfs-2017.png new file mode 100644 index 00000000000..43334bba0c2 Binary files /dev/null and b/docs/work/scale/_img/add-teams-team-members-tfs-2017.png differ diff --git a/docs/work/scale/_img/agile-scale-manage-team-members.png b/docs/work/scale/_img/agile-scale-manage-team-members.png new file mode 100644 index 00000000000..0a02b087910 Binary files /dev/null and b/docs/work/scale/_img/agile-scale-manage-team-members.png differ diff --git a/docs/work/scale/_img/agile-tools-team-assets.png b/docs/work/scale/_img/agile-tools-team-assets.png new file mode 100644 index 00000000000..2b75f29cd97 Binary files /dev/null and b/docs/work/scale/_img/agile-tools-team-assets.png differ diff --git a/docs/work/scale/_img/alignment-enables-autonomy_725.png b/docs/work/scale/_img/alignment-enables-autonomy_725.png new file mode 100644 index 00000000000..cb82bcb7d83 Binary files /dev/null and b/docs/work/scale/_img/alignment-enables-autonomy_725.png differ diff --git a/docs/work/scale/_img/capacity-planning-add-missing-team-members.png b/docs/work/scale/_img/capacity-planning-add-missing-team-members.png new file mode 100644 index 00000000000..d23c0de3d59 Binary files /dev/null and b/docs/work/scale/_img/capacity-planning-add-missing-team-members.png differ diff --git a/docs/work/scale/_img/capacity-planning-add-missing-users-icon.png b/docs/work/scale/_img/capacity-planning-add-missing-users-icon.png new file mode 100644 index 00000000000..d76fb2d4d3d Binary files /dev/null and b/docs/work/scale/_img/capacity-planning-add-missing-users-icon.png differ diff --git a/docs/work/scale/_img/capacity-planning-add-user-icon.png b/docs/work/scale/_img/capacity-planning-add-user-icon.png new file mode 100644 index 00000000000..7216b851da8 Binary files /dev/null and b/docs/work/scale/_img/capacity-planning-add-user-icon.png differ diff --git a/docs/work/scale/_img/capacity-planning-open-team-settings-tfs-15.png b/docs/work/scale/_img/capacity-planning-open-team-settings-tfs-15.png new file mode 100644 index 00000000000..dbeb8bdd159 Binary files /dev/null and b/docs/work/scale/_img/capacity-planning-open-team-settings-tfs-15.png differ diff --git a/docs/work/scale/_img/capacity-planning-remove-user.png b/docs/work/scale/_img/capacity-planning-remove-user.png new file mode 100644 index 00000000000..3ed3535a095 Binary files /dev/null and b/docs/work/scale/_img/capacity-planning-remove-user.png differ diff --git a/docs/work/scale/_img/capacity-planning-set-capacity-tfs-15.png b/docs/work/scale/_img/capacity-planning-set-capacity-tfs-15.png new file mode 100644 index 00000000000..978d1810dff Binary files /dev/null and b/docs/work/scale/_img/capacity-planning-set-capacity-tfs-15.png differ diff --git a/docs/work/scale/_img/capacity-planning-set-capacity-tfs-2015.1.png b/docs/work/scale/_img/capacity-planning-set-capacity-tfs-2015.1.png new file mode 100644 index 00000000000..6ee7160ea48 Binary files /dev/null and b/docs/work/scale/_img/capacity-planning-set-capacity-tfs-2015.1.png differ diff --git a/docs/work/scale/_img/copy-capacity-from-previous-sprint.png b/docs/work/scale/_img/copy-capacity-from-previous-sprint.png new file mode 100644 index 00000000000..ac6a037d0b3 Binary files /dev/null and b/docs/work/scale/_img/copy-capacity-from-previous-sprint.png differ diff --git a/docs/work/scale/_img/default-permissions-assigned-to-team-contributors.png b/docs/work/scale/_img/default-permissions-assigned-to-team-contributors.png new file mode 100644 index 00000000000..5229828a3c2 Binary files /dev/null and b/docs/work/scale/_img/default-permissions-assigned-to-team-contributors.png differ diff --git a/docs/work/scale/_img/horizontal-vs-vertical-teams.png b/docs/work/scale/_img/horizontal-vs-vertical-teams.png new file mode 100644 index 00000000000..c8f755e9731 Binary files /dev/null and b/docs/work/scale/_img/horizontal-vs-vertical-teams.png differ diff --git a/docs/work/scale/_img/manage-team-assets-common-configuration-dialog.png b/docs/work/scale/_img/manage-team-assets-common-configuration-dialog.png new file mode 100644 index 00000000000..04d6f54fa84 Binary files /dev/null and b/docs/work/scale/_img/manage-team-assets-common-configuration-dialog.png differ diff --git a/docs/work/scale/_img/multiple-teams-delete-team-confirmation-dialog.png b/docs/work/scale/_img/multiple-teams-delete-team-confirmation-dialog.png new file mode 100644 index 00000000000..f26516d40c9 Binary files /dev/null and b/docs/work/scale/_img/multiple-teams-delete-team-confirmation-dialog.png differ diff --git a/docs/work/scale/_img/multiple-teams-delete-team.png b/docs/work/scale/_img/multiple-teams-delete-team.png new file mode 100644 index 00000000000..5cbe085395d Binary files /dev/null and b/docs/work/scale/_img/multiple-teams-delete-team.png differ diff --git a/docs/work/scale/_img/multiple-teams-exclude-sub-area-paths.png b/docs/work/scale/_img/multiple-teams-exclude-sub-area-paths.png new file mode 100644 index 00000000000..7cc5a927956 Binary files /dev/null and b/docs/work/scale/_img/multiple-teams-exclude-sub-area-paths.png differ diff --git a/docs/work/scale/_img/multiple-teams-product-backlog-default-team.png b/docs/work/scale/_img/multiple-teams-product-backlog-default-team.png new file mode 100644 index 00000000000..35a11440bda Binary files /dev/null and b/docs/work/scale/_img/multiple-teams-product-backlog-default-team.png differ diff --git a/docs/work/scale/_img/multiple-teams-view-teams.png b/docs/work/scale/_img/multiple-teams-view-teams.png new file mode 100644 index 00000000000..fccca41983b Binary files /dev/null and b/docs/work/scale/_img/multiple-teams-view-teams.png differ diff --git a/docs/work/scale/_img/open-security-team-room.png b/docs/work/scale/_img/open-security-team-room.png new file mode 100644 index 00000000000..b7673c706a8 Binary files /dev/null and b/docs/work/scale/_img/open-security-team-room.png differ diff --git a/docs/work/scale/_img/open-team-settings.png b/docs/work/scale/_img/open-team-settings.png new file mode 100644 index 00000000000..ecddf93982b Binary files /dev/null and b/docs/work/scale/_img/open-team-settings.png differ diff --git a/docs/work/scale/_img/plans-keyboard-shortcuts.png b/docs/work/scale/_img/plans-keyboard-shortcuts.png new file mode 100644 index 00000000000..4be8e57b6ba Binary files /dev/null and b/docs/work/scale/_img/plans-keyboard-shortcuts.png differ diff --git a/docs/work/scale/_img/plans_move1.png b/docs/work/scale/_img/plans_move1.png new file mode 100644 index 00000000000..5c6cb094d03 Binary files /dev/null and b/docs/work/scale/_img/plans_move1.png differ diff --git a/docs/work/scale/_img/plans_view2.png b/docs/work/scale/_img/plans_view2.png new file mode 100644 index 00000000000..9ef5906513c Binary files /dev/null and b/docs/work/scale/_img/plans_view2.png differ diff --git a/docs/work/scale/_img/plans_view4.png b/docs/work/scale/_img/plans_view4.png new file mode 100644 index 00000000000..51ea68ff40d Binary files /dev/null and b/docs/work/scale/_img/plans_view4.png differ diff --git a/docs/work/scale/_img/plans_view5.png b/docs/work/scale/_img/plans_view5.png new file mode 100644 index 00000000000..563695b349b Binary files /dev/null and b/docs/work/scale/_img/plans_view5.png differ diff --git a/docs/work/scale/_img/pm-6-3-week-sprints.png b/docs/work/scale/_img/pm-6-3-week-sprints.png new file mode 100644 index 00000000000..ecaa13663ef Binary files /dev/null and b/docs/work/scale/_img/pm-6-3-week-sprints.png differ diff --git a/docs/work/scale/_img/pm-account-management-backlog-view.png b/docs/work/scale/_img/pm-account-management-backlog-view.png new file mode 100644 index 00000000000..d3d0cc1345f Binary files /dev/null and b/docs/work/scale/_img/pm-account-management-backlog-view.png differ diff --git a/docs/work/scale/_img/pm-add-team-admins.png b/docs/work/scale/_img/pm-add-team-admins.png new file mode 100644 index 00000000000..d6b002aa447 Binary files /dev/null and b/docs/work/scale/_img/pm-add-team-admins.png differ diff --git a/docs/work/scale/_img/pm-add-teams.png b/docs/work/scale/_img/pm-add-teams.png new file mode 100644 index 00000000000..b195d7a77ff Binary files /dev/null and b/docs/work/scale/_img/pm-add-teams.png differ diff --git a/docs/work/scale/_img/pm-assign-items-from-common-backlog.png b/docs/work/scale/_img/pm-assign-items-from-common-backlog.png new file mode 100644 index 00000000000..1a4ab62186e Binary files /dev/null and b/docs/work/scale/_img/pm-assign-items-from-common-backlog.png differ diff --git a/docs/work/scale/_img/pm-customer-profile-backlog-view.png b/docs/work/scale/_img/pm-customer-profile-backlog-view.png new file mode 100644 index 00000000000..150f750fbe6 Binary files /dev/null and b/docs/work/scale/_img/pm-customer-profile-backlog-view.png differ diff --git a/docs/work/scale/_img/pm-flat-area-structure.png b/docs/work/scale/_img/pm-flat-area-structure.png new file mode 100644 index 00000000000..7c7a42c6c37 Binary files /dev/null and b/docs/work/scale/_img/pm-flat-area-structure.png differ diff --git a/docs/work/scale/_img/pm-hierarchical-area-structure.png b/docs/work/scale/_img/pm-hierarchical-area-structure.png new file mode 100644 index 00000000000..e5efc131dc2 Binary files /dev/null and b/docs/work/scale/_img/pm-hierarchical-area-structure.png differ diff --git a/docs/work/scale/_img/pm-include-sub-area-paths.png b/docs/work/scale/_img/pm-include-sub-area-paths.png new file mode 100644 index 00000000000..7ef10fe0e8e Binary files /dev/null and b/docs/work/scale/_img/pm-include-sub-area-paths.png differ diff --git a/docs/work/scale/_img/pm-items-assigned-from-common-backlog.png b/docs/work/scale/_img/pm-items-assigned-from-common-backlog.png new file mode 100644 index 00000000000..17698a889c0 Binary files /dev/null and b/docs/work/scale/_img/pm-items-assigned-from-common-backlog.png differ diff --git a/docs/work/scale/_img/pm-open-and-edit-area-path.png b/docs/work/scale/_img/pm-open-and-edit-area-path.png new file mode 100644 index 00000000000..dc512fd7c0f Binary files /dev/null and b/docs/work/scale/_img/pm-open-and-edit-area-path.png differ diff --git a/docs/work/scale/_img/pm-team-structure.png b/docs/work/scale/_img/pm-team-structure.png new file mode 100644 index 00000000000..244f66627e5 Binary files /dev/null and b/docs/work/scale/_img/pm-team-structure.png differ diff --git a/docs/work/scale/_img/query-in-group-email-team-work-in-progress.png b/docs/work/scale/_img/query-in-group-email-team-work-in-progress.png new file mode 100644 index 00000000000..522579509d9 Binary files /dev/null and b/docs/work/scale/_img/query-in-group-email-team-work-in-progress.png differ diff --git a/docs/work/scale/_img/review-team-plans-new-plan.png b/docs/work/scale/_img/review-team-plans-new-plan.png new file mode 100644 index 00000000000..d04e1b8b4db Binary files /dev/null and b/docs/work/scale/_img/review-team-plans-new-plan.png differ diff --git a/docs/work/scale/_img/review-team-plans-no-plans-defined.png b/docs/work/scale/_img/review-team-plans-no-plans-defined.png new file mode 100644 index 00000000000..691802f9d10 Binary files /dev/null and b/docs/work/scale/_img/review-team-plans-no-plans-defined.png differ diff --git a/docs/work/scale/_img/review-team-plans-open-plans.png b/docs/work/scale/_img/review-team-plans-open-plans.png new file mode 100644 index 00000000000..612e0e95b04 Binary files /dev/null and b/docs/work/scale/_img/review-team-plans-open-plans.png differ diff --git a/docs/work/scale/_img/review-team-plans-set-field-criteria.png b/docs/work/scale/_img/review-team-plans-set-field-criteria.png new file mode 100644 index 00000000000..e4ac857980b Binary files /dev/null and b/docs/work/scale/_img/review-team-plans-set-field-criteria.png differ diff --git a/docs/work/scale/_img/review-team-plans-set-markers.png b/docs/work/scale/_img/review-team-plans-set-markers.png new file mode 100644 index 00000000000..763788262f3 Binary files /dev/null and b/docs/work/scale/_img/review-team-plans-set-markers.png differ diff --git a/docs/work/scale/_img/review-team-plans-show-markers.png b/docs/work/scale/_img/review-team-plans-show-markers.png new file mode 100644 index 00000000000..b287c8e88d6 Binary files /dev/null and b/docs/work/scale/_img/review-team-plans-show-markers.png differ diff --git a/docs/work/scale/_img/review-team-plans-view-plans.png b/docs/work/scale/_img/review-team-plans-view-plans.png new file mode 100644 index 00000000000..bbe65910822 Binary files /dev/null and b/docs/work/scale/_img/review-team-plans-view-plans.png differ diff --git a/docs/work/scale/_img/review-tp-open-security-dialog.png b/docs/work/scale/_img/review-tp-open-security-dialog.png new file mode 100644 index 00000000000..6aebaea66f8 Binary files /dev/null and b/docs/work/scale/_img/review-tp-open-security-dialog.png differ diff --git a/docs/work/scale/_img/review-tp-security-dialog.png b/docs/work/scale/_img/review-tp-security-dialog.png new file mode 100644 index 00000000000..69d91ac781a Binary files /dev/null and b/docs/work/scale/_img/review-tp-security-dialog.png differ diff --git a/docs/work/scale/_img/review-tp-show-team-1.png b/docs/work/scale/_img/review-tp-show-team-1.png new file mode 100644 index 00000000000..03f00f4b368 Binary files /dev/null and b/docs/work/scale/_img/review-tp-show-team-1.png differ diff --git a/docs/work/scale/_img/safe-PMO_Iterations-cleared.png b/docs/work/scale/_img/safe-PMO_Iterations-cleared.png new file mode 100644 index 00000000000..e20add0ec1e Binary files /dev/null and b/docs/work/scale/_img/safe-PMO_Iterations-cleared.png differ diff --git a/docs/work/scale/_img/safe-add-area-path.png b/docs/work/scale/_img/safe-add-area-path.png new file mode 100644 index 00000000000..1bcc05984c5 Binary files /dev/null and b/docs/work/scale/_img/safe-add-area-path.png differ diff --git a/docs/work/scale/_img/safe-add-epics.png b/docs/work/scale/_img/safe-add-epics.png new file mode 100644 index 00000000000..57e71adfc90 Binary files /dev/null and b/docs/work/scale/_img/safe-add-epics.png differ diff --git a/docs/work/scale/_img/safe-add-migrate-team-members.png b/docs/work/scale/_img/safe-add-migrate-team-members.png new file mode 100644 index 00000000000..606895e6de8 Binary files /dev/null and b/docs/work/scale/_img/safe-add-migrate-team-members.png differ diff --git a/docs/work/scale/_img/safe-add-tags-to-epic.png b/docs/work/scale/_img/safe-add-tags-to-epic.png new file mode 100644 index 00000000000..9aac47ea43d Binary files /dev/null and b/docs/work/scale/_img/safe-add-tags-to-epic.png differ diff --git a/docs/work/scale/_img/safe-add-team-members.png b/docs/work/scale/_img/safe-add-team-members.png new file mode 100644 index 00000000000..8cad001fcfe Binary files /dev/null and b/docs/work/scale/_img/safe-add-team-members.png differ diff --git a/docs/work/scale/_img/safe-bulk-modify-area-paths-bulk-save.png b/docs/work/scale/_img/safe-bulk-modify-area-paths-bulk-save.png new file mode 100644 index 00000000000..2cba7d39ee6 Binary files /dev/null and b/docs/work/scale/_img/safe-bulk-modify-area-paths-bulk-save.png differ diff --git a/docs/work/scale/_img/safe-bulk-modify-area-paths-edit-dialog.png b/docs/work/scale/_img/safe-bulk-modify-area-paths-edit-dialog.png new file mode 100644 index 00000000000..609a64eb32e Binary files /dev/null and b/docs/work/scale/_img/safe-bulk-modify-area-paths-edit-dialog.png differ diff --git a/docs/work/scale/_img/safe-bulk-modify-area-paths.png b/docs/work/scale/_img/safe-bulk-modify-area-paths.png new file mode 100644 index 00000000000..758bbf7fac5 Binary files /dev/null and b/docs/work/scale/_img/safe-bulk-modify-area-paths.png differ diff --git a/docs/work/scale/_img/safe-concepts-poster-v4.0.png b/docs/work/scale/_img/safe-concepts-poster-v4.0.png new file mode 100644 index 00000000000..6ecef114b1d Binary files /dev/null and b/docs/work/scale/_img/safe-concepts-poster-v4.0.png differ diff --git a/docs/work/scale/_img/safe-config-teams.png b/docs/work/scale/_img/safe-config-teams.png new file mode 100644 index 00000000000..fd0b2d6ee6c Binary files /dev/null and b/docs/work/scale/_img/safe-config-teams.png differ diff --git a/docs/work/scale/_img/safe-configure-migrate-team-area-path.png b/docs/work/scale/_img/safe-configure-migrate-team-area-path.png new file mode 100644 index 00000000000..c64c37139ad Binary files /dev/null and b/docs/work/scale/_img/safe-configure-migrate-team-area-path.png differ diff --git a/docs/work/scale/_img/safe-configure-migrate-team-iterations.png b/docs/work/scale/_img/safe-configure-migrate-team-iterations.png new file mode 100644 index 00000000000..d79b9fd6ba0 Binary files /dev/null and b/docs/work/scale/_img/safe-configure-migrate-team-iterations.png differ diff --git a/docs/work/scale/_img/safe-create-another-team.png b/docs/work/scale/_img/safe-create-another-team.png new file mode 100644 index 00000000000..399075c0de2 Binary files /dev/null and b/docs/work/scale/_img/safe-create-another-team.png differ diff --git a/docs/work/scale/_img/safe-create-iterations.png b/docs/work/scale/_img/safe-create-iterations.png new file mode 100644 index 00000000000..4e2bdf988e4 Binary files /dev/null and b/docs/work/scale/_img/safe-create-iterations.png differ diff --git a/docs/work/scale/_img/safe-create-team.png b/docs/work/scale/_img/safe-create-team.png new file mode 100644 index 00000000000..ebc812673f2 Binary files /dev/null and b/docs/work/scale/_img/safe-create-team.png differ diff --git a/docs/work/scale/_img/safe-epic-form.png b/docs/work/scale/_img/safe-epic-form.png new file mode 100644 index 00000000000..f56fa6ba36d Binary files /dev/null and b/docs/work/scale/_img/safe-epic-form.png differ diff --git a/docs/work/scale/_img/safe-epic-to-stories-map-to-value-area.png b/docs/work/scale/_img/safe-epic-to-stories-map-to-value-area.png new file mode 100644 index 00000000000..5a93978253a Binary files /dev/null and b/docs/work/scale/_img/safe-epic-to-stories-map-to-value-area.png differ diff --git a/docs/work/scale/_img/safe-epics-kanan-board.png b/docs/work/scale/_img/safe-epics-kanan-board.png new file mode 100644 index 00000000000..2dd1f859256 Binary files /dev/null and b/docs/work/scale/_img/safe-epics-kanan-board.png differ diff --git a/docs/work/scale/_img/safe-epics-to-stories-value-area.png b/docs/work/scale/_img/safe-epics-to-stories-value-area.png new file mode 100644 index 00000000000..53cff8a3b82 Binary files /dev/null and b/docs/work/scale/_img/safe-epics-to-stories-value-area.png differ diff --git a/docs/work/scale/_img/safe-exclude-sub-areas-for-fabrikam-fiber-suite.png b/docs/work/scale/_img/safe-exclude-sub-areas-for-fabrikam-fiber-suite.png new file mode 100644 index 00000000000..d07b1179206 Binary files /dev/null and b/docs/work/scale/_img/safe-exclude-sub-areas-for-fabrikam-fiber-suite.png differ diff --git a/docs/work/scale/_img/safe-exclude-sub-areas-for-portfolio-team.png b/docs/work/scale/_img/safe-exclude-sub-areas-for-portfolio-team.png new file mode 100644 index 00000000000..22b478fe12f Binary files /dev/null and b/docs/work/scale/_img/safe-exclude-sub-areas-for-portfolio-team.png differ diff --git a/docs/work/scale/_img/safe-feature-team-active-bug-charts.png b/docs/work/scale/_img/safe-feature-team-active-bug-charts.png new file mode 100644 index 00000000000..a4ccb4bd699 Binary files /dev/null and b/docs/work/scale/_img/safe-feature-team-active-bug-charts.png differ diff --git a/docs/work/scale/_img/safe-fiber-suite-features-to-stories.png b/docs/work/scale/_img/safe-fiber-suite-features-to-stories.png new file mode 100644 index 00000000000..c4f00e49199 Binary files /dev/null and b/docs/work/scale/_img/safe-fiber-suite-features-to-stories.png differ diff --git a/docs/work/scale/_img/safe-kanban-custom-columns.png b/docs/work/scale/_img/safe-kanban-custom-columns.png new file mode 100644 index 00000000000..de7b7d0682e Binary files /dev/null and b/docs/work/scale/_img/safe-kanban-custom-columns.png differ diff --git a/docs/work/scale/_img/safe-map-features-to-epics.png b/docs/work/scale/_img/safe-map-features-to-epics.png new file mode 100644 index 00000000000..11e7fbde191 Binary files /dev/null and b/docs/work/scale/_img/safe-map-features-to-epics.png differ diff --git a/docs/work/scale/_img/safe-map-team-iterations.png b/docs/work/scale/_img/safe-map-team-iterations.png new file mode 100644 index 00000000000..60ae2ba0af2 Binary files /dev/null and b/docs/work/scale/_img/safe-map-team-iterations.png differ diff --git a/docs/work/scale/_img/safe-map-team-to-area.png b/docs/work/scale/_img/safe-map-team-to-area.png new file mode 100644 index 00000000000..544c3c45fc5 Binary files /dev/null and b/docs/work/scale/_img/safe-map-team-to-area.png differ diff --git a/docs/work/scale/_img/safe-migrate-feature-team-stories.png b/docs/work/scale/_img/safe-migrate-feature-team-stories.png new file mode 100644 index 00000000000..2c5025b0be8 Binary files /dev/null and b/docs/work/scale/_img/safe-migrate-feature-team-stories.png differ diff --git a/docs/work/scale/_img/safe-migrate-sprint3-task-board.png b/docs/work/scale/_img/safe-migrate-sprint3-task-board.png new file mode 100644 index 00000000000..81ad44d2459 Binary files /dev/null and b/docs/work/scale/_img/safe-migrate-sprint3-task-board.png differ diff --git a/docs/work/scale/_img/safe-migrate-team-stories-to-epics.png b/docs/work/scale/_img/safe-migrate-team-stories-to-epics.png new file mode 100644 index 00000000000..fb7a3b4560e Binary files /dev/null and b/docs/work/scale/_img/safe-migrate-team-stories-to-epics.png differ diff --git a/docs/work/scale/_img/safe-objects-map-to-vso-objects.png b/docs/work/scale/_img/safe-objects-map-to-vso-objects.png new file mode 100644 index 00000000000..e356ba96dd0 Binary files /dev/null and b/docs/work/scale/_img/safe-objects-map-to-vso-objects.png differ diff --git a/docs/work/scale/_img/safe-overview-portfolio-team-members.png b/docs/work/scale/_img/safe-overview-portfolio-team-members.png new file mode 100644 index 00000000000..b3c1021ab67 Binary files /dev/null and b/docs/work/scale/_img/safe-overview-portfolio-team-members.png differ diff --git a/docs/work/scale/_img/safe-overview-teams.png b/docs/work/scale/_img/safe-overview-teams.png new file mode 100644 index 00000000000..d0098b0cedf Binary files /dev/null and b/docs/work/scale/_img/safe-overview-teams.png differ diff --git a/docs/work/scale/_img/safe-portfolio-progress-view-epics-to-stories-any-team.png b/docs/work/scale/_img/safe-portfolio-progress-view-epics-to-stories-any-team.png new file mode 100644 index 00000000000..b8305dddcdc Binary files /dev/null and b/docs/work/scale/_img/safe-portfolio-progress-view-epics-to-stories-any-team.png differ diff --git a/docs/work/scale/_img/safe-release-trains-map.png b/docs/work/scale/_img/safe-release-trains-map.png new file mode 100644 index 00000000000..be7413db995 Binary files /dev/null and b/docs/work/scale/_img/safe-release-trains-map.png differ diff --git a/docs/work/scale/_img/safe-reorder-epics.png b/docs/work/scale/_img/safe-reorder-epics.png new file mode 100644 index 00000000000..7bf04b636f5 Binary files /dev/null and b/docs/work/scale/_img/safe-reorder-epics.png differ diff --git a/docs/work/scale/_img/safe-roles-to-vso-roles.png b/docs/work/scale/_img/safe-roles-to-vso-roles.png new file mode 100644 index 00000000000..25ad462d113 Binary files /dev/null and b/docs/work/scale/_img/safe-roles-to-vso-roles.png differ diff --git a/docs/work/scale/_img/safe-team-area-paths-added.png b/docs/work/scale/_img/safe-team-area-paths-added.png new file mode 100644 index 00000000000..6b01b71458f Binary files /dev/null and b/docs/work/scale/_img/safe-team-area-paths-added.png differ diff --git a/docs/work/scale/_img/safe-team-dashboard.png b/docs/work/scale/_img/safe-team-dashboard.png new file mode 100644 index 00000000000..f8a1bb9c335 Binary files /dev/null and b/docs/work/scale/_img/safe-team-dashboard.png differ diff --git a/docs/work/scale/_img/safe-teams-track-deliverables.png b/docs/work/scale/_img/safe-teams-track-deliverables.png new file mode 100644 index 00000000000..ac0c397c3c0 Binary files /dev/null and b/docs/work/scale/_img/safe-teams-track-deliverables.png differ diff --git a/docs/work/scale/_img/safe-user-story-new-form.png b/docs/work/scale/_img/safe-user-story-new-form.png new file mode 100644 index 00000000000..a39dea5d7c4 Binary files /dev/null and b/docs/work/scale/_img/safe-user-story-new-form.png differ diff --git a/docs/work/scale/_img/safe-view-of-iterations.png b/docs/work/scale/_img/safe-view-of-iterations.png new file mode 100644 index 00000000000..e120eef537c Binary files /dev/null and b/docs/work/scale/_img/safe-view-of-iterations.png differ diff --git a/docs/work/scale/_img/save-epics-value-stream-tags.png b/docs/work/scale/_img/save-epics-value-stream-tags.png new file mode 100644 index 00000000000..11ae510acaf Binary files /dev/null and b/docs/work/scale/_img/save-epics-value-stream-tags.png differ diff --git a/docs/work/scale/_img/scale-agile-add-new-team-co.png b/docs/work/scale/_img/scale-agile-add-new-team-co.png new file mode 100644 index 00000000000..609e7e6d3b1 Binary files /dev/null and b/docs/work/scale/_img/scale-agile-add-new-team-co.png differ diff --git a/docs/work/scale/_img/scale-agile-add-team-account.png b/docs/work/scale/_img/scale-agile-add-team-account.png new file mode 100644 index 00000000000..de27d3ca403 Binary files /dev/null and b/docs/work/scale/_img/scale-agile-add-team-account.png differ diff --git a/docs/work/scale/_img/scale-agile-add-team-members-user-accounts.png b/docs/work/scale/_img/scale-agile-add-team-members-user-accounts.png new file mode 100644 index 00000000000..428550fe8c7 Binary files /dev/null and b/docs/work/scale/_img/scale-agile-add-team-members-user-accounts.png differ diff --git a/docs/work/scale/_img/scale-agile-bulk-modify-area-path-co.png b/docs/work/scale/_img/scale-agile-bulk-modify-area-path-co.png new file mode 100644 index 00000000000..c937c10566a Binary files /dev/null and b/docs/work/scale/_img/scale-agile-bulk-modify-area-path-co.png differ diff --git a/docs/work/scale/_img/scale-agile-bulk-save-area-path-co.png b/docs/work/scale/_img/scale-agile-bulk-save-area-path-co.png new file mode 100644 index 00000000000..23bc7513876 Binary files /dev/null and b/docs/work/scale/_img/scale-agile-bulk-save-area-path-co.png differ diff --git a/docs/work/scale/_img/scale-agile-select-team-to-configure-it-co.png b/docs/work/scale/_img/scale-agile-select-team-to-configure-it-co.png new file mode 100644 index 00000000000..ab0750f4218 Binary files /dev/null and b/docs/work/scale/_img/scale-agile-select-team-to-configure-it-co.png differ diff --git a/docs/work/scale/_img/set-capacity-phone-team.png b/docs/work/scale/_img/set-capacity-phone-team.png new file mode 100644 index 00000000000..3716528abfb Binary files /dev/null and b/docs/work/scale/_img/set-capacity-phone-team.png differ diff --git a/docs/work/scale/_img/set-capacity-web-team.png b/docs/work/scale/_img/set-capacity-web-team.png new file mode 100644 index 00000000000..b23e36ce0a6 Binary files /dev/null and b/docs/work/scale/_img/set-capacity-web-team.png differ diff --git a/docs/work/scale/_img/set-sprint1-capacity.png b/docs/work/scale/_img/set-sprint1-capacity.png new file mode 100644 index 00000000000..d2643babb21 Binary files /dev/null and b/docs/work/scale/_img/set-sprint1-capacity.png differ diff --git a/docs/work/scale/_img/setup-sprint-schedule.png b/docs/work/scale/_img/setup-sprint-schedule.png new file mode 100644 index 00000000000..b97031abbde Binary files /dev/null and b/docs/work/scale/_img/setup-sprint-schedule.png differ diff --git a/docs/work/scale/_img/seven-feature-teams.png b/docs/work/scale/_img/seven-feature-teams.png new file mode 100644 index 00000000000..afcc723280b Binary files /dev/null and b/docs/work/scale/_img/seven-feature-teams.png differ diff --git a/docs/work/scale/_img/stdefaults-add-area-paths.png b/docs/work/scale/_img/stdefaults-add-area-paths.png new file mode 100644 index 00000000000..eb3be7aeff6 Binary files /dev/null and b/docs/work/scale/_img/stdefaults-add-area-paths.png differ diff --git a/docs/work/scale/_img/stdefaults-backlog-management-team-team-services-list.png b/docs/work/scale/_img/stdefaults-backlog-management-team-team-services-list.png new file mode 100644 index 00000000000..c06443307b9 Binary files /dev/null and b/docs/work/scale/_img/stdefaults-backlog-management-team-team-services-list.png differ diff --git a/docs/work/scale/_img/stdefaults-backlog-web-team-list.png b/docs/work/scale/_img/stdefaults-backlog-web-team-list.png new file mode 100644 index 00000000000..d5df33e187f Binary files /dev/null and b/docs/work/scale/_img/stdefaults-backlog-web-team-list.png differ diff --git a/docs/work/scale/_img/stdefaults-open-team-admin-context.png b/docs/work/scale/_img/stdefaults-open-team-admin-context.png new file mode 100644 index 00000000000..7df561930c0 Binary files /dev/null and b/docs/work/scale/_img/stdefaults-open-team-admin-context.png differ diff --git a/docs/work/scale/_img/stdefaults-open-team-admin-iteration-tfs.png b/docs/work/scale/_img/stdefaults-open-team-admin-iteration-tfs.png new file mode 100644 index 00000000000..cbf331ec519 Binary files /dev/null and b/docs/work/scale/_img/stdefaults-open-team-admin-iteration-tfs.png differ diff --git a/docs/work/scale/_img/stdefaults-open-team-area-page-tfs.png b/docs/work/scale/_img/stdefaults-open-team-area-page-tfs.png new file mode 100644 index 00000000000..992b353a3ef Binary files /dev/null and b/docs/work/scale/_img/stdefaults-open-team-area-page-tfs.png differ diff --git a/docs/work/scale/_img/stdefaults-open-team-work-area-page.png b/docs/work/scale/_img/stdefaults-open-team-work-area-page.png new file mode 100644 index 00000000000..e0d38247547 Binary files /dev/null and b/docs/work/scale/_img/stdefaults-open-team-work-area-page.png differ diff --git a/docs/work/scale/_img/stdefaults-set-default-iteration-tfs.png b/docs/work/scale/_img/stdefaults-set-default-iteration-tfs.png new file mode 100644 index 00000000000..46352898be6 Binary files /dev/null and b/docs/work/scale/_img/stdefaults-set-default-iteration-tfs.png differ diff --git a/docs/work/scale/_img/stdefaults-set-team-area-paths-management-team-team-services-list.png b/docs/work/scale/_img/stdefaults-set-team-area-paths-management-team-team-services-list.png new file mode 100644 index 00000000000..975491f2eae Binary files /dev/null and b/docs/work/scale/_img/stdefaults-set-team-area-paths-management-team-team-services-list.png differ diff --git a/docs/work/scale/_img/stdefaults-team-active-sprints-tfs.png b/docs/work/scale/_img/stdefaults-team-active-sprints-tfs.png new file mode 100644 index 00000000000..bc292f07d40 Binary files /dev/null and b/docs/work/scale/_img/stdefaults-team-active-sprints-tfs.png differ diff --git a/docs/work/scale/_img/stdefaults-team-backlog-iteration.png b/docs/work/scale/_img/stdefaults-team-backlog-iteration.png new file mode 100644 index 00000000000..9166ad9c186 Binary files /dev/null and b/docs/work/scale/_img/stdefaults-team-backlog-iteration.png differ diff --git a/docs/work/scale/_img/stdefaults-team-default-iteration.png b/docs/work/scale/_img/stdefaults-team-default-iteration.png new file mode 100644 index 00000000000..1a843c15db1 Binary files /dev/null and b/docs/work/scale/_img/stdefaults-team-default-iteration.png differ diff --git a/docs/work/scale/_img/visibility-bug-debt-email-team.png b/docs/work/scale/_img/visibility-bug-debt-email-team.png new file mode 100644 index 00000000000..07f422d511b Binary files /dev/null and b/docs/work/scale/_img/visibility-bug-debt-email-team.png differ diff --git a/docs/work/scale/_img/visibility-bug-debt-voice-team.png b/docs/work/scale/_img/visibility-bug-debt-voice-team.png new file mode 100644 index 00000000000..4e46a6a04e4 Binary files /dev/null and b/docs/work/scale/_img/visibility-bug-debt-voice-team.png differ diff --git a/docs/work/scale/_img/visibility-bug-debt-web-team.png b/docs/work/scale/_img/visibility-bug-debt-web-team.png new file mode 100644 index 00000000000..26d28a8cd6f Binary files /dev/null and b/docs/work/scale/_img/visibility-bug-debt-web-team.png differ diff --git a/docs/work/scale/_img/visibility-feature-team-backlog-show-parents.png b/docs/work/scale/_img/visibility-feature-team-backlog-show-parents.png new file mode 100644 index 00000000000..b97dadc695d Binary files /dev/null and b/docs/work/scale/_img/visibility-feature-team-backlog-show-parents.png differ diff --git a/docs/work/scale/_img/visibility-management-team-epics.png b/docs/work/scale/_img/visibility-management-team-epics.png new file mode 100644 index 00000000000..64dd639673c Binary files /dev/null and b/docs/work/scale/_img/visibility-management-team-epics.png differ diff --git a/docs/work/scale/_img/visibility-multi-team-kanban-board-features.png b/docs/work/scale/_img/visibility-multi-team-kanban-board-features.png new file mode 100644 index 00000000000..9263e706ab2 Binary files /dev/null and b/docs/work/scale/_img/visibility-multi-team-kanban-board-features.png differ diff --git a/docs/work/scale/_img/visibility-rollup-remaining-work.jpeg b/docs/work/scale/_img/visibility-rollup-remaining-work.jpeg new file mode 100644 index 00000000000..9745f913394 Binary files /dev/null and b/docs/work/scale/_img/visibility-rollup-remaining-work.jpeg differ diff --git a/docs/work/scale/_img/visibility-rollup-remaining-work.png b/docs/work/scale/_img/visibility-rollup-remaining-work.png new file mode 100644 index 00000000000..9744d6b346e Binary files /dev/null and b/docs/work/scale/_img/visibility-rollup-remaining-work.png differ diff --git a/docs/work/scale/_img/vso-team-selector.png b/docs/work/scale/_img/vso-team-selector.png new file mode 100644 index 00000000000..2c88249be41 Binary files /dev/null and b/docs/work/scale/_img/vso-team-selector.png differ diff --git a/docs/work/scale/_img/wit-templates-open-team-admin-context.png b/docs/work/scale/_img/wit-templates-open-team-admin-context.png new file mode 100644 index 00000000000..d30fb175684 Binary files /dev/null and b/docs/work/scale/_img/wit-templates-open-team-admin-context.png differ diff --git a/docs/work/scale/add-team-administrator.md b/docs/work/scale/add-team-administrator.md new file mode 100644 index 00000000000..ad3761630cb --- /dev/null +++ b/docs/work/scale/add-team-administrator.md @@ -0,0 +1,53 @@ +--- +title: Add a team administrator | VSTS & TFS +description: Add a user account to the team administrator role-VSTS and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 843D5E56-D24E-4DEA-9915-19B1F76E9A56 +ms.manager: douge +ms.author: kaelli +ms.date: 07/21/2017 +ms.topic: get-started-article +--- + +# Add a team administrator + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +<a id="add-team-admin"> </a> + +It's always a good idea to have more than one person with administration permissions for an area. You need to be a team administrator to [configure team settings](manage-team-assets.md). + +As a team administrator, you can configure, customize, and manage all team-related activities for your team. These include being able to add team members, add team admins, and configure Agile tools and team assets. + +To get added as a team administrator, ask another team admin, the account owner, or a member of the [Project Administrators group](../../security/set-project-collection-level-permissions.md) to add you. + + +1. From the web portal, click the ![gear settings icon](../_img/icons/gear_icon.png) icon to open the administration page for the team project. + + If you don't have a team project yet, create one in [VSTS](../../accounts/set-up-vs.md)<!---or set one up in an [on-premises TFS](../../accounts/create-team-project.md)-->. If you need to add a team, see [Add teams and team members](multiple-teams.md). + +2. From a web browser, open the team admin context. Click the ![gear icon](../_img/icons/gear_icon.png) gear icon from your team home page. + +3. Click the **Add** link to open the dialog for adding user identities. +<!--- **VSTS and TFS 2017** --> + <img src="_img/add-team-admin-link.png" alt="Web portal, VSTS & TFS 2017, Open team administrator context" style="border: 2px solid #C3C3C3;" /> +<!--- ***TFS 2015** + + <img src="_img/add-account-as-team-admin.png" alt="Web portal, TFS 2015, Open team administration context" style="border: 2px solid #C3C3C3;" /> --> + +4. Enter the identities you want to add to the team administrator role. +<!--- **VSTS and TFS 2017** --> + + <img src="_img/add-admin-dialog.png" alt="VSTS, TFS 2017, Add team administrator dialog" style="border: 2px solid #C3C3C3;" /> + +<!--- **TFS 2015** + + ![Add account as a team administrator](_img/add-team-admin-dialog.png) --> + +## Try this next + +> [!div class="nextstepaction"] +> [Configure team settings](manage-team-assets.md) + diff --git a/docs/work/scale/agile-culture.md b/docs/work/scale/agile-culture.md new file mode 100644 index 00000000000..1b4aa312209 --- /dev/null +++ b/docs/work/scale/agile-culture.md @@ -0,0 +1,187 @@ +--- +title: Agile culture | VSTS & TFS +description: Create an Agile culture of autonomous teams and an aligned enterprise using Agile tools when working in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 3C43B829-3514-4493-8D5A-896375835FE7 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2016 +--- + +# Agile culture + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +> [!NOTE] +> Are you new to Agile? Learn more about [Agile Culture] (https://www.visualstudio.com/learn/agile-culture/) and [Scaling Agile to Large Teams] (https://www.visualstudio.com/learn/scale-agile-large-teams/). + +As your team grows, you want your tools to grow with it. And, if you're an enterprise adopting Agile methodologies, you want your Agile tools to support the business objectives of your enterprise. + +However, to successfully scale Agile requires addressing both the culture and tools within your organization. + + +##Alignment enables autonomy +<meta name="keywords" content="Agile culture,alignment,autonomy" /> +Organizations that aspire to be agile need to consider the twin obligations of creating alignment across the enterprise and supporting team autonomy. Teams need autonomy to be efficient. And, enterprises need alignment across teams and the organization to be efficient. + +Too much alignment with insufficient team autonomy leads doesn't support innovation or agility of teams to get things done. Too little alignment with each team running their own program as they want doesn't provide the insight and coordination required to meet business objectives. + +![Alignment enables autonomy](_img/alignment-enables-autonomy_725.png) + +With the right level of alignment across the organization and team autonomy, individuals are empowered to innovate and inspired to collaborate to meet business objectives. + +##7 areas to create alignment and support autonomy + +As you plan how you want to grow your Agile tool set, consider the following areas that are key to creating enterprise alignment while developing team autonomy. + +<table> +<tbody valign="top"> +<tr> +<th width="20%">Area</th> +<th width="40%">Create alignment</th> +<th width="40%">Support autonomy</th> +</tr> + + +<tr> +<td>Product vision</td> +<td>The organization defines the goals and roadmap for the organization. Goals can be defined as epics and features which show up on the [portfolio backlog](portfolio-management.md). </td> + +<td>Teams determine how to best meet the roadmap. Teams break down goals into user stories or product backlog items using their [team backlogs](portfolio-management.md#feature-team-backlog). +</td> +</tr> + +<tr> +<td>Team structure</td> +<td>Based on business objectives, organizations determine the number and size of teams. [Vertically structured feature teams](#horizontal-vs-vertical) lead to greater autonomy and efficiency. </td> + +<td>With teams, there should be some established roles, such as product owner and development leads, but also room to rotate roles. For example, team members can take turns acting as scrum master, developing sprint demos, running sprint retrospectives, or crafting sprint emails. +</td> +</tr> + + +<tr> +<td>Development cadence</td> +<td>Agile organizations need to release products and feature updates at regular intervals. Establishing regular release and sprint schedules promotes the rhythm of the business. + +<p>Each sprint--a time boxed iteration of constant duration between two and four weeks--includes planning, executing, delivering value, reflecting, and engaging in continuous improvement.</p> +</td> + +<td> +All teams manage their work within the set sprint cadence. Teams provide input into the length of sprint that works best for them. + +<p>Teams choose the Agile methods that work for them, [Scrum](https://www.visualstudio.com/get-started/work/work-in-sprints-vs), [Kanban](https://www.visualstudio.com/get-started/work/work-from-the-kanban-board-vs), or a mix of both. Teams also take ownership of initiating and acting on their own set of continuous improvement practices.</p> + +<p>It's possible for some teams to execute in shorter sprints. For example, if an organization sets a 2 week sprint cadence, some teams may choose to operate in 1 week sprints, while still aligning with the organizational schedule. </p> + +</td> +</tr> + + +<tr> +<td>Communication cadence</td> +<td>Just as sprints bring a natural rhythm to the flow of work, so too do regular communications. By setting expectations for the types of communications they want to see to stay aligned and how often they occur, organizations naturally create alignment across teams and the enterprise. + +<p>Team sprint emails, bug bar status, and release team feature delivery status are examples of such regular communications. </p> +</td> +<td>Teams determine the details that they communicate and who'll develop the communication. Their sprint emails may contain a summary of previous sprint accomplishments and next sprint plans or include a demo of recently completed features. +</td> +</tr> + +<tr> +<td>Quality</td> +<td>Each organization needs to set the criteria and standards by which they assess quality and set expectations for quality standards. A few ways they can do this is to set exit criteria for new feature development, standards to manage technical debt, and bug caps for teams or individuals. + +<p>Also, they can monitor bug status and trends by creating bug dashboards. </p> +</td> +<td>Teams choose how they meet the quality standards. They may stage bug bashes for new features or at the end of each sprint. They may designate an individual to act as a bug shield on a rotating basis. </td> +</tr> + +<tr> +<td>Manage risk, track work</td> +<td>The organization determines how each functional unit will communicate status and risk. They establish a "contract of communication" as to the minimum required information the organization needs. + +<p>Also, the organization provides the infrastructure to reduce risks. The organization owes the teams anything they can do to reduce risks that are common across teams. </p> + </td> +<td> +Beyond meeting the needs set by the organization, teams determine any additional details they need to manage and track to reduce their risks. Whether they use a white board with stickie notes or a full Gantt chart, they manage the details. + +<p>For example, teams may add a backlog item to track a dependency they have on another team. Or, they may track their risks via a list of issues or impediments. </p> + +<p>Also, teams regularly contribute to improving the process and infrastructure to support the organizations ability to manage risk and gain insights.</p> +</td> +</tr> + +</tbody> +</table> + +<a id="horizontal-vs-vertical"> </a> +##Feature teams +<meta name="keywords" content="Agile culture,feature teams,agile teams, horizontal team structure" /> +As you scale, one of the most important tasks to consider is how you structure your teams. Traditionally, horizontal team structures divide teams according to the software architecture: user interface, service-oriented architecture, and data teams. + + +![Horizontal vs vertical teams](_img/horizontal-vs-vertical-teams.png) + +However, with the adoption of Agile practices, vertical team structures that span the architecture have been shown to provide greater team autonomy. Vertical teams have the ability to deliver on the features they own by working across the software architecture. They also spread the knowledge needed to work at all architecture levels throughout all the teams. + +Configure your teams along the value streams your organization wants to deliver. For example, Fabrikam Fiber, organizes their teams into the following seven feature teams. + +![Seven feature teams: Shopping cart, Customer profile, Service status, Email, Voice, Internet, and TV](_img/seven-feature-teams.png) + + +Each team plans the features they'll deliver. They have the autonomy to determine how they'll structure the data, architect the services, and design of the web and mobile user interfaces. Of course, they do this in adherence with the quality standards set by the organization and to which all teams contribute. + + +##Configure your Agile tools to scale +<meta name="keywords" content="Agile culture,scaling agile" /> +As your organization grows, you can scale your Agile tools in the following ways. + +- **[Add teams and filtered backlog views](multiple-teams.md):** You add teams to support team autonomy and provide them with the tools they can configure and manage that supports how they want to work. These tools include product backlogs, Kanban boards, sprint backlogs and task boards, and many others. + + In addition, you can configure teams to support a hierarchy of backlogs and portfolio backlogs so that portfolio managers can review priority and progress across several teams. + +- **[Set up sprints and releases](../scrum/define-sprints.md):** You can structure your iterations to support a flat set of sprints, or a set of sprints embedded within scheduled releases. Each team activates the set of sprints and releases that they need to participate in. + +- **[Manage portfolios](portfolio-management.md):** by setting up a hierarchy of teams and backlogs and [activating portfolio backlogs](../customize/select-backlog-navigation-levels.md). Feature teams focused on a subset of the product backlog can remain focused on just their backlog. Portfolio managers who want to view and organize backlogs to track progress and dependencies can manage portfolio backlogs of Features and Epics. + + If additional portfolio backlogs are needed --for example, Scenarios or Initiatives--you can [add them as well](../customize/add-portfolio-backlogs.md). + +- **[Configure dashboards](../../Report/dashboards.md):** With team dashboards, you can configure a number of charts that track progress within a team or across teams. Specifically, you can add status and trend charts based on queries you create. + +- **Group or categorize work:** There are several ways to group work that you want to track. Backlogs filter work items based on team area assignments. And, portfolio backlogs allow you to [group backlog items under Features and Epics](../backlogs/organize-backlog.md). + + However, if you want to track and report on work items based on other groupings, you can. You can [add tags to work items and then filter backlogs or queries based on tags](../track/add-tags-to-work-items.md). Also, you can [add sub-area paths](../customize/set-area-paths.md) to represent more granular feature areas. + +- **Add folders and use team favorites:** As your teams grow, you'll see a growing list of work item queries, build definitions, and source code folders. By using folders, sub-folders, and team favorites, you can manage many of these lists more easily. You can add team favorites for shared queries, source code, and build definitions. + +## Related notes + +Before you can create or work with any of the Agile tools, you need a team project. If you don't have one yet, you can [create one in Visual Studio Team Services](../../connect/connect-team-projects.md) or on an [on-premises TFS](../../accounts/create-team-project.md). + +If you're ready to move from one team to two teams, or configure several teams, see [Multiple teams](multiple-teams.md). To add a team administrator or configure team assets, see [Configure team settings](manage-team-assets.md). + +For addtional guidance, see these topics: +- [Practices that scale](practices-that-scale.md) +- [Visibility across teams](visibility-across-teams.md) +- [Review team delivery plans](review-team-plans.md) +- [Implement Scaled Agile Framework® to support epics, release trains, and multiple backlogs](scaled-agile-framework.md). + +###Agile culture industry resources + +- [Nexus, the Exoskeleton of Scaled Scrum](https://www.scrum.org/resources/nexus-guide) +- [Culture over process](http://blog.crisp.se/wp-content/uploads/2013/09/culture-over-process.pdf) by Henrik Kniberg +- [The Culture Game - Tools for the Agile Manager](http://www.amazon.com/The-Culture-Game-Tools-Manager/dp/0984875301) by Daniel Mezick +- [Scaled Agile Framework (SAFe)](http://www.scaledagileframework.com/) +- [Scaling Agile Software Development, - Disciplined Agility at Scale (White Paper)](http://disciplinedagileconsortium.org/Resources/Documents/ScalingAgileSoftwareDevelopment.pdf) + +### Scale with teams and not team projects +Often times, organizations look at adding a team project for each software development project. + +Adding teams to scale your tools rather than adding team projects is recommended for the following reasons: +- **Visibility:** It's much easier to view progress across all teams +- **Tracking and auditing:** It's easier to [link work items and other objects](../track/link-work-items-support-traceability.md) for tracking and auditing purposes +- **Maintainability:** You minimize the maintenance of security groups and process updates. + +[Why You Should use a Single (Giant) TFS Team Project](http://geekswithblogs.net/Optikal/archive/2013/09/05/153944.aspx) provides a more detailed discussion as to the pros and cons of going with a single team project. diff --git a/docs/work/scale/breadcrumb/toc.yml b/docs/work/scale/breadcrumb/toc.yml new file mode 100644 index 00000000000..2177c0ef102 --- /dev/null +++ b/docs/work/scale/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Agile + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=agile + items: + - name: Agile at Scale + tocHref: /vsts/ + topicHref: /vsts/work/scale/index \ No newline at end of file diff --git a/docs/work/scale/capacity-planning.md b/docs/work/scale/capacity-planning.md new file mode 100644 index 00000000000..f8dc0ad84b8 --- /dev/null +++ b/docs/work/scale/capacity-planning.md @@ -0,0 +1,156 @@ +--- +title: Capacity planning | VSTS & TFS +description: Set or copy team member capacity to plan your Scrum sprints when when working from Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: F9DC4D34-36D6-42D6-AA8F-E7FE1CC60676 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 07/21/2017 +--- + +# Capacity planning + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +How much work can your team accomplish in a sprint? Using the capacity planning tools, your team can estimate both the amount of work and types of work required to complete their sprint plan. Then, during the sprint, you can [monitor the capacity bars](../scrum/sprint-planning.md#adjust-work) to determine when an individual team member or a team area of activity is on target to finish, or needs help from other team members to finish. + +[Sprint planning](../scrum/sprint-planning.md#set-capacity) introduced the basics of setting your team capacity. Here, we go into more detail to address how to: + +> [!div class="checklist"] +> * Copy capacity from the previous sprint to the current sprint +> * Track capacity when performing multiple activities +> * Add or remove user accounts from capacity planning for a sprint +> * Track capacity when working on more than one team + + +<a id="set-capacity"> </a> + +##Set team capacity and activity + +Capacity correlates to actual task time - either hours or days. Capacity takes into account variation in work hours by team members as well as holidays, vacation days, and non-working days. + +Because days off and time available for each team member can vary from sprint to sprint, you set capacity for each sprint. The capacity tool helps you make sure your team isn't over or under committed for the sprint. Also, as you work day-to-day, you'll be able to see if your team is on track. + +From the Capacity page, enter the capacity and days off for each member of your team. If your team tracks capacity by activity, then also select the Activity for each team member. + +>[!NOTE] +>The user interface is slightly different depending on the platform and version you work from. + +For example, Christie Church's capacity is 6 hours/day for design work. + +#### VSTS and TFS 2017 +<img src="_img/capacity-planning-set-capacity-tfs-15.png" alt="VSTS, Set Capacity" style="border: 2px solid #C3C3C3;" /> + + +#### TFS 2015.1 +<img src="_img/capacity-planning-set-capacity-tfs-2015.1.png" alt="TFS 2015.1, Set Capacity" style="border: 2px solid #C3C3C3;" /> + + +#### TFS 2015 +<img src="_img/set-sprint1-capacity.png" alt="TFS '15', Set Capacity" style="border: 2px solid #C3C3C3;" /> + + +Most teams specify capacity in terms of hours, however, you can also specify it in days. For example, .5 days would correspond to 4 hours for a typical 8 hour day. Choose the same unit you will use to estimate the time a task will take to complete. + + +>[!NOTE] +>For VSTS, the task board always shows "h" for hours. For TFS, you can modify the ProcessConfiguration file for the Remaining Work type field to specify "d" for days, or other preferred label. For details, see [Process configuration XML element reference, Agile tool fields](../reference/process-configuration-xml-element.md#fields). + + +If you haven't set up sprints yet for your team, go [here to do that now](../scrum/define-sprints.md). + +If you don't see a team member listed, you need to [add them to the team](../scale/multiple-teams.md#add-team-members). Also, you only have to indicate planned days off for the team. You [set weekend days or other recurring days off](#team_settings) under team settings. + +<a id="copy-capacity"> </a> +##Copy capacity planning from the previous sprint + +>[!NOTE] +><b>Feature availability: </b>This feature is available from VSTS and the web portal for TFS 2015.1 and later versions. + +By copying the capacity from the previous sprint, you save time. With the basics defined, all you have to do is adjust the capacity based on individual and team days off and capacity allocation per activity. + +For example, here we choose Sprint 2 and copy the capacity set for Sprint 1. + +<img src="_img/copy-capacity-from-previous-sprint.png" alt="Copy capacity from the previous iteration" style="border: 2px solid #C3C3C3;" /> + +Notice that only the capacity per day and activity are copied over. Individual and team days off remain unset. The copy operation always copies the latest updates made to the previous sprint. So you can repeat the copy operation if you've made changes to the previous sprint that you want to copy to the latest sprint. + + +<a id="add-remove-users"> </a> +##Add or remove users + +>[!NOTE] +><b>Feature availability: </b>These features are available from VSTS and the web portal for TFS 2015.1 and later versions. + +Click ![Add user icon](_img/capacity-planning-add-user-icon.png) to add a specific account to your capacity planning, or ![Add missing team members](_img/capacity-planning-add-missing-users-icon.png) to add all missing team members. + +<img src="_img/capacity-planning-add-missing-team-members.png" alt="Capacity planning, Add missing team members" style="border: 2px solid #C3C3C3;" /> + + +To remove a user, click the option from the users Action menu. + +<img src="_img/capacity-planning-remove-user.png" alt="Capacity planning, Remove a user" style="border: 2px solid #C3C3C3;" /> + +<a id="track-multiple-activities"> </a> +##Track capacity when performing multiple activities + +>[!NOTE] +><b>Feature availability: </b>This feature is currently supported only from the web portal for VSTS and TFS 2015 Update 1 or later version. + +Because individual team members have different sets of skills and duties, you can track their activity and capacity for each activity and for each sprint. + +Here, Jamal divides his time between Deployment and Development. + +<img src="_img/add-activity-to-capacity-planning.png" alt="Add activity to capacity tracking for an individual" style="border: 2px solid #C3C3C3;" /> + + +<a id="track-capacity-per-team"> </a> +##Track capacity when working on more than one team +If you work on more than one team, you'll want to switch between teams easily and specify your sprint capacity to support each team's sprint activities. + +###Switch your team view +Switch to another team when you work on items for that team. From the web portal, choose Browse All if the name you want doesn't appear. + + +<img src="_img/vso-team-selector.png" alt="Choose another team from the team project menu" style="border: 2px solid #C3C3C3;" /> + +###Specify sprint capacity for each team you work on +If you work on more than one team during a sprint cycle, you'll probably allocate some percentage of your time to each team. + +For example, both Christie and Raisa split their time between the Web and Phone teams. They therefore allocate 3 hours a day to the Web team, and 3 hours a day to the Phone team. + +<img src="_img/set-capacity-web-team.png" alt="Allocate capacity for team Web" style="border: 2px solid #C3C3C3;" /> +<br/> +<img src="_img/set-capacity-phone-team.png" alt="Allocate capacity for team Phone" style="border: 2px solid #C3C3C3;" /> + +If your name isn't listed in the capacity view, you need to be added as a team member. + +## Related Scrum notes +Setting capacity and [estimating remaining work for each task](../scrum/sprint-planning.md#define-tasks) provides you with the tools you need to track the amount of work and resources you have allocated sprint over sprint. You can learn more about working with your Scrum tools from these topics: + +- [Set working days](../customize/set-working-days.md) +- [Task board](../scrum/task-board.md) +- [Sprint burndown](../scrum/sprint-burndown.md) +- [Velocity](../../report/guidance/team-velocity.md) +- [Forecasting](../scrum/forecast.md) +- [Configure team settings](../scale/manage-team-assets.md) + +<a id="customize-activity-list"> </a> +###Customize the pick list of activities or discipline + +>[!NOTE] +>**Feature availability**: You can customize the pick list of the Activity or Discipline fields if you use the Hosted XML or On-premises process models. To learn more about process models, see [Customize your work tracking experience](../customize/customize-work.md). + +You can add to or modify the items listed for the [Activity](../track/query-numeric.md)(Agile or Scrum) or [Discipline](../track/query-numeric.md) (CMMI) field by [customizing its pick list](../customize/add-modify-field.md). + +>[!NOTE] +>The set of values listed corresponds to the combined set of all values defined for the field across all team projects in the collection. + +<a id="team_settings"> </a> + +### Set recurring days off +Your sprint planning and tracking tools automatically consider days off when calculating capacity and sprint burndown. Leave those days of the week that your team doesn't work unchecked in your team's Settings, [Working days](../customize/set-working-days.md) page. + + \ No newline at end of file diff --git a/docs/work/scale/index.md b/docs/work/scale/index.md new file mode 100644 index 00000000000..eadb9c2da6b --- /dev/null +++ b/docs/work/scale/index.md @@ -0,0 +1,43 @@ +--- +title: Agile at Scale index to content for VSTS & TFS +description: Index to topics for how to scale Agile tools in VSTS and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/28/2017 +--- + +# Agile at Scale + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Manage portfolios and gain visibility across teams. + +## Step-by-Step Tutorials + +- [Manage portfolios](portfolio-management.md) +- [Review delivery plans](review-team-plans.md) +- [Set team favorites](/vsts/collaborate/set-favorites?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json) + +## Concepts + +- [Visibility across teams](visibility-across-teams.md) +- [Agile culture and scale](agile-culture.md) +- [Practices that scale](practices-that-scale.md) +- [Team administrator role and permissions](team-administrator-permissions.md) + +## How-to Guides +- [Scaled Agile Framework](scaled-agile-framework.md) +- [Define a work item template](/vsts/work/backlogs/work-item-template?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json) +- [Configure team settings](manage-team-assets.md) +- [Set team defaults](set-team-defaults.md) + + +## Resources +- [Scale & Configure Teams](../../teams/index.md) +- [Customization](../customize/index.md) +- [Agile culture](https://www.visualstudio.com/learn/agile-culture/) +- [Scale Agile to large teams](https://www.visualstudio.com/learn/scale-agile-large-teams/) +- [Creating productive teams](https://www.visualstudio.com/learn/productive-teams/) diff --git a/docs/work/scale/manage-team-assets.md b/docs/work/scale/manage-team-assets.md new file mode 100644 index 00000000000..12cf6f63be8 --- /dev/null +++ b/docs/work/scale/manage-team-assets.md @@ -0,0 +1,67 @@ +--- +title: Configure team settings | VSTS & TFS +description: Manage team-specific tools such as sprint settings, backlogs, Kanban boards, and more as well as add team administrators +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 6BF2B72D-9160-4140-B8DE-B2C7C42AC338 +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + +# Configure team settings + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +<!--- Still needs work, versioning, and other team settings from the admin context, add something about something, team-specific widgets--> + +<a id="team-settings"></a> + +Within a team project, you [add teams](multiple-teams.md) to support the needs of several feature teams, or an enterprise organized to deliver different products. Each team is then able to configure the Agile tools the way that works for their team, supporting each team to collaborate most effectively in planning and managing their work. + +As a team administrator, you can configure, customize, and manage all team-related activities for your team. These include being able to add team members, add team admins, and configure Agile tools and team assets. + +Team admin permissions are role-based, unlike project admin permissions which are set through the user interface. Also, because team administrators are members of the Contributor role they have permissions assigned to that role. + +You can configure most of your team settings from the common configuration dialog. + +> [!NOTE] +> **Feature availability:** The common configuration dialog is available from VSTS and the web portal for TFS 2015.1 and later versions. + +1. To open, click ![gear icon](../_img/icons/team-settings-gear-icon.png), the gear icon, from any team backlog or board to set one or more team settings. + + For example, from the Kanban board ... + + <img src="../customize/_img/kanban-card-customize-open-settings.png" alt="Kanban board, open common configuration settings" style="border: 2px solid #C3C3C3;" /><br/> + +2. Click a tab under Cards or Board to configure card and Kanban board settings. + + ![Common configuration dialog team settings](_img/manage-team-assets-common-configuration-dialog.png) + + For details on each configuration option, see one of these topics: + + +> [!div class="mx-tdBreakAll"] +> |Cards | Board | Charts & widgets | General | +> |-------------|----------|---------|---------| +> |- [Fields](../customize/customize-cards.md)<br/>- [Styles](../customize/customize-cards.md#style-rule)<br/>- [Tag colors](../customize/customize-cards.md#color-tags)<br/>- [Annotations](../customize/customize-cards.md#annotations)<br/>- [Tests](../customize/customize-cards.md#tests) |- [Columns](../kanban/add-columns.md)<br/>- [Swimlanes](../kanban/expedite-work.md)<br/>- [Card reordering](../customize/reorder-cards.md) |- [Cumulative flow chart & widget](../../report/guidance/cumulative-flow.md#configure)<br/> -[Lead & Cycle time widgets](../../report/guidance/cycle-time-and-lead-time.md)<br/> -[Velocity chart and widget](../../report/guidance/team-velocity.md) |-[Backlogs](../customize/select-backlog-navigation-levels.md)<br/>- [Working days](../kanban/expedite-work.md)<br/>- [Working with bugs](../customize/show-bugs-on-backlog.md) | + + +## Related notes + +To create additional teams, see [Add teams and team members](multiple-teams.md). + +If team members don't have access to all the features they want, check that they have [the access level needed for those features](../../security/change-access-levels.md). + +You can also [restrict access to select features and functions](../../accounts/restrict-access-tfs.md). + + +### Team name, description, and picture + +Team settings also include the team name, description, and team profile image. + +To add a team picture. Open the team administration page and choose the picture icon under Team Profile. The maximum file size is 4 MB. + + + + diff --git a/docs/work/scale/multiple-teams.md b/docs/work/scale/multiple-teams.md new file mode 100644 index 00000000000..d0e1162ef5b --- /dev/null +++ b/docs/work/scale/multiple-teams.md @@ -0,0 +1,231 @@ +--- +title: Add a team, add team members | VSTS & TFS +description: Add another team or a hierarchy of teams to scale your Agile tools-product and sprint backlogs, Kanban and task boards +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 9F1D0A0F-02D5-4E06-A5EC-C220472A0F66 +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +ms.topic: get-started-article +--- + +# Add teams and team members + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +As your organization grows, you'll want to make sure that you configure your Agile tools to support that growth. To enable each feature team the autonomy it needs to manage their backlog and plan their sprints, they need their own set of team tools. + +>[!NOTE] +>This topic describes how to add a team or team members to VSTS and TFS. To learn about Microsoft Teams, see the Marketplace extension, [Microsoft Teams Integration](https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-teams). +> +>For a good understanding on how to remain Agile as you add teams, review the [Scale Agile to Large Teams](https://www.visualstudio.com/learn/scale-agile-large-teams/) article. + +<!--- +In this topic you'll learn: + +> [!div class="checklist"] +> * How to add a team, moving from one team to two teams +> * How to add team members +> * How to move work items assigned to one team to another team +> * How to delete a team +> * Additional permissions you may want to grant team members +--> + +<a id="add-team"> </a> +## Move from one team to two teams +As your team grows, you can easily move from one team to two. In this example, we add two feature teams, Email and Voice, and maintain the Fabrikam Fiber team with visibility across each of these two teams. + +If you're not a project administrator, [get added as one](../../security/set-project-collection-level-permissions.md). Only project administrators can add teams. + +### Add two feature teams + +Add and configure two teams, Email and Voice. Here we show you how to add and configure the Email team. + +<!--- +#### VSTS, TFS 2017 +--> + +<a id="add-team-team-services" /> + +1. From the web portal, click the ![gear settings icon](../_img/icons/gear_icon.png) icon to open the administration page for the team project. If you don't have a team project yet, create one in [VSTS](../../accounts/set-up-vs.md)<!---or set one up in an [on-premises TFS](../../accounts/create-team-project.md)-->. + + <img src="_img/add-teams-open-admin-context-tfs-2017.png" alt="Open team project admin page" style="border: 2px solid #C3C3C3;" /> + +2. Create a new team. Give the team a name, and make sure to select **Create an area path with the name of the team**. + + If you do not select this option, you will have to set the default area path for the team once you create it. You can choose an existing area path or create a new one at that time. Team tools aren't available until the team's default area path is set. + + <img src="_img/add-teams-create-team-dialog.png" alt="Create a sub-team with its own area path" style="border: 2px solid #C3C3C3;" /> + +3. Select the team from the Overview tab to configure it. + + <img src="_img/add-teams-select-team-tfs-2017.png" alt="Web portal, team project admin context, Overview page, Select a team to configure it" style="border: 2px solid #C3C3C3;" /> + +4. To select the set of sprints the team will use, open the **Work>Iterations** page for the team. See [Set team defaults, Select team sprints and default iteration path](set-team-defaults.md#activate). + +5. To change the area paths that the team will reference, open the **Work>Areas** page. See [Set team defaults, Set team default area path(s)](set-team-defaults.md#team-area-paths). + +<!--- +#### TFS 2015, TFS 2013 +<a id="add-team-tfs-2015" /> + +1. From the web portal, click the ![gear settings icon](../_img/icons/gear_icon.png) icon to open the administration page for the team project. + + <img src="../connect/_img/ALM_CAL_OpenAdminPage.png" alt="Open team project admin page" style="border: 2px solid #C3C3C3;" /> + +2. Create a new team. Give the team a name, and make sure to select **Create an area path with the name of the team**. + + If you do not select this option, you will have to set the default area path for the team once you create it. You can choose an existing area path or create a new one at that time. Team tools aren't available until the team's default area path is set. + + <img src="_img/scale-agile-add-new-team-co.png" alt="Create a sub-team with its own area path" style="border: 2px solid #C3C3C3;" /> + +3. Select the team from the Overview tab to configure it. + + <img src="_img/scale-agile-select-team-to-configure-it-co.png" alt="Web portal, admin context, team project, Overview page, Select a sub-team to configure it" style="border: 2px solid #C3C3C3;" /> + +4. To select the set of sprints the team will use, open the **Iterations** page for the team. See [Set team defaults, Select team sprints and default iteration path](set-team-defaults.md#activate). + +5. To change the area paths that the team will reference, open the **Areas** page. See [Set team defaults, Set team default area path(s)](set-team-defaults.md#team-area-paths). + +--> + +<a id="add-team-members"> </a> + +## Add team members +If you're moving from one team to two teams, team members already have access to the team project. If you're setting up a team structure for the first time, adding user accounts as team members provides them access to the team project and team assets. Access to the team project is required to support sharing code and planning and tracking work. + +Several Agile tools, like capacity planning and team alerts, and dashboard widgets are team-scoped. That is, they automatically reference the user accounts of team members to support planning activities or sending alerts. + +> [!NOTE] +> If you use VSTS, you must first [add user accounts to the team project](../../accounts/add-account-users-assign-access-levels.md) or [setup your account to work with Azure AD](../../accounts/access-with-azure-ad.md). This way user accounts will be available to add to a team. +> +>For TFS, the first time you add an account you must enter the full domain name and the alias. Afterwards, you can browse for that name by display name as well as account name. To learn more, see [Set up groups for use in TFS deployments](../../tfs-server/admin/setup-ad-groups.md). + +<!--- +#### VSTS, TFS 2017 +--> + +<a id="add-team-members-team-services" /> + +1. From the Overview tab for your team, add a user account. + + <img src="_img/add-teams-team-members-tfs-2017.png" alt="Web portal, team admin context, Overview page, Add a Windows user or group account" style="border: 2px solid #C3C3C3;" /> + +2. Enter the sign-in addresses or display name for each account you want to add. Add them one at a time or all at the same time. + + <img src="_img/add-teams-team-members-dialog-tfs-2017.png" alt="Add users and groups dialog, Type the account aliases and check name" style="border: 2px solid #C3C3C3;" /> + + > [!TIP] + > You must enter user and group names one at a time. However, after entering a name, the account is added to the list, and you can type another name in the Identities text box before choosing to save your changes. + +3. Now these users are members of the Email team. You can always return to this page to add or remove members. + + <img src="_img/add-teams-team-members-added.png" alt="Web portal, team admin context, Overview page, Team members added" style="border: 2px solid #C3C3C3;" /> + +4. To add an account as a team administrator, click **Add** located in the Team Profile page. For details, see [Configure team settings and add team administrators](manage-team-assets.md). + +5. As a last step, send the team URL to newly added team members so they can start contributing to the team. + For example: + Email team: ```http://vs-2016-test:8080/tfs/DefaultCollection/Fabrikam%20Fiber/Email/_dashboards``` + Voice team: ```http://fabrikamfiber:8080/tfs/DefaultCollection/Fabrikam%20Fiber/Voice/_dashboards``` + +<!--- +#### TFS 2015, TFS 2013 +<a id="add-team-members-tfs-2015" /> + +1. From the Overview tab for your team, add a user account. + + <img src="_img/scale-agile-add-team-account.png" alt="Web portal, admin context, team project, Overview page, Add a Windows user or group account" style="border: 2px solid #C3C3C3;" /> + +2. Enter the sign-in addresses or display name for each account you want to add. Add them one at a time or all at the same time. + + The first time an account is added to TFS, you must enter the full domain name and the alias. Afterwards, you can browse for that name by display name as well as account name. To learn more, see [Set up groups for use in TFS deployments](../../tfs-server/admin/setup-ad-groups.md). </p> + + <img src="_img/scale-agile-add-team-members-user-accounts.png" alt="Type the account aliases and check name" style="border: 2px solid #C3C3C3;" /> + + > [!TIP] + > You must enter user and group names one at a time. However, after entering a name, the account is added to the list, and you can type another name in the Identities text box before choosing to save your changes. + +3. Now these users are members of the Email team. You can always return to this page to add or remove members. + + <img src="_img/agile-scale-manage-team-members.png" alt="Web portal, admin context, team project, Overview page, Manage team members" style="border: 2px solid #C3C3C3;" /> + +4. To add an account as a team administrator, click **Add** located in the Team Profile page. For details, see [Configure team settings and add team administrators](manage-team-assets.md).</p> + +5. As a last step, send the team URL to newly added team members so they can start contributing to the team. + + For example: + Email team: ```http://fabrikamfiber:8080/tfs/DefaultCollection/Fabrikam%20Fiber/Email``` + Voice team: ```http://fabrikamfiber:8080/tfs/DefaultCollection/Fabrikam%20Fiber/Voice``` + + --> + +## Move work items under teams +Now that your two feature teams are configured, you'll want to move existing work items from their current assignments to the team's default area path. This way, the work items will show up on each feature team's backlog. + +1. The quickest way to do this, is to [create a query](../track/using-queries.md) of all work items you want to reassign, multi-select those items belonging to each team, and [bulk edit the area path](../backlogs/bulk-modify-work-items.md). + + <img src="_img/scale-agile-bulk-modify-area-path-co.png" alt="Web portal, Queries page, Bulk modify select work items" style="border: 2px solid #C3C3C3;" /> + +2. After you bulk modify, do a bulk save. + + <img src="_img/scale-agile-bulk-save-area-path-co.png" alt="Web portal, Queries page, Bulk save selected work items" style="border: 2px solid #C3C3C3;" /> + +<a id="include-area-paths"> </a> + +## Configure the default team project +One last step in moving from one team to two teams requires configuring the default team project to exclude sub-areas. + +1. Open the Areas tab administration page for the team project, and change the setting as shown. + + <img src="_img/multiple-teams-exclude-sub-area-paths.png" alt="Web portal, Admin context, default team project, Exclude work items defined in sub-area paths" style="border: 2px solid #C3C3C3;" /> + +2. Refresh the product backlog page for the team, and you'll see only those work items assigned to the Fabrikam\Account Management area path. + + <img src="_img/multiple-teams-product-backlog-default-team.png" alt="Web portal, Backlog view of default team" style="border: 2px solid #C3C3C3;" /> + +## Delete a team + +1. To delete a team, open the team project admin context, open the … context menu for the team you want to delete, and choose the **Delete** option. + + <img src="_img/multiple-teams-delete-team.png" alt="Web portal, admin context-team project level, Delete team" style="border: 2px solid #C3C3C3;" /> + + You must be a member of the Project Administrators group or be [granted explicit permissions to edit project information](../../security/permissions.md#edit-team-project-level-information-permission) to delete a team project. + + >[!IMPORTANT] + >Deleting a team deletes all team configuration settings, including team dashboards, backlogs, and boards. Data defined for work items assigned to the team are left unchanged. Once deleted, you can't recover the team configurations. + +2. To complete the delete operation, you must type the name of the WIT as shown. + + <img src="_img/multiple-teams-delete-team-confirmation-dialog.png" alt="Delete team confirmation dialog" style="border: 2px solid #C3C3C3;" /> + + +<a id="grant-add-permissions"></a> + +## Grant team members additional permissions + +For teams to work autonomously, you may want to provide them with permissions that they don't have by default. Suggested tasks include providing team administrators or team leads permissions to: + +- [Create and edit child nodes under their default area path](../customize/set-area-paths.md) +- [Create and edit child nodes under an existing iteration node](../customize/set-area-paths.md) +- [Create shared queries and folders under the Shared Queries folder](../track/set-query-permissions.md). + +By default, team members inherit the permissions afforded to members of the team project Contributors group. Members of this group can add and modify source code, create and delete test runs, and create and modify work items. They can collaborate with other team members and [check in work to the team's code base](https://msdn.microsoft.com/library/ms181407.aspx) or [collaborate on a Git team project](../../git/gitquickstart.md). + +![Default permissions assigned to team contributors](_img/default-permissions-assigned-to-team-contributors.png) + +If your on-premises TFS deployment includes reporting or SharePoint Products, add users to those resources. See [Add users to a team project](../../accounts/add-users.md). + + +## Try this next + +Once you've created a team, you'll want to configure your Agile tools to support how your team works. Also, consider adding one or more accounts as team administrators. Team admins have the necessary permissions to add team members, add a team picture, and configure and manage all team assets. + +> [!div class="nextstepaction"] +> [Add team administrator](add-team-administrator.md) +> or +> [Configure team settings](manage-team-assets.md) + +[!INCLUDE [temp](../_shared/image-differences.md)] + diff --git a/docs/work/scale/portfolio-management.md b/docs/work/scale/portfolio-management.md new file mode 100644 index 00000000000..7a0f59bcedf --- /dev/null +++ b/docs/work/scale/portfolio-management.md @@ -0,0 +1,195 @@ +--- +title: Portfolio management | VSTS & TFS +description: Configure teams to support portfolio backlogs to track progress across teams in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: F6FF6E6B-C9AA-4681-9205-D48C8F29D94B +ms.manager: douge +ms.author: kaelli +ms.date: 05/26/2017 +ms.topic: get-started-article +--- + +# Portfolio management + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Portfolio backlogs provide product owners insight into the work performed by several agile feature teams. Product owners can define the high-level goals as Epics or Features, and feature teams can break these down into the user stories they'll prioritize and develop. + +In this topic you'll learn: + +> [!div class="checklist"] +> * How to support a management view of multiple team progress +> * How feature teams can focus on their team backlog progress +> * How to assign work from a common backlog +> * How to set up a hierarchical set of teams and backlogs + + +By setting up a team structure like the one shown, you provide each feature team with their distinct backlog to plan, prioritize, and track their work. And, portfolio or product owners can create their vision, roadmap, and goals for each release, monitor progress across their portfolio of projects, and manage risks and dependencies. + +![Each team has its own view of the work](_img/pm-team-structure.png) + +[Set up a hierarchical team and backlog structure](#set_up) when you want to support: + +- Autonomous feature teams that can organize and manage their backlog of work +- Portfolio management views for planning epics and features and monitoring progress of subordinate feature teams +- Assign backlog items to feature teams from a common backlog + + +[!INCLUDE [image differences](../_shared/image-differences.md)] + + +## Management view of team progress + +The Fabrikam Account Management portfolio owner has several campaigns to initiate and deliver in the coming year. He creates an epic for each campaign and then breaks each epic down into various features that contribute to each campaign. + +With the hierarchical structure implemented, portfolio owners working in Account Management can view the epic, feature, and product backlogs for their area. + +<img src="_img/pm-account-management-backlog-view.png" alt="Epic backlog of account management team" style="border: 2px solid #C3C3C3;" /> + +All work items under the Fabrikam/Account Management area path appear in their backlog view. You can expand a single item or use the expand ![expand icon](../_img/icons/expand_icon.png) and collapse ![collapse icon](../_img/icons/collapse_icon.png) icons to expand or collapse one level of the hierarchy. + +>[!NOTE] +>Program managers can gain insight into progress across teams using [Delivery plans](review-team-plans.md). See also [Visibility across teams](visibility-across-teams.md). + + +<a id="feature-team-backlog"> </a> +## Feature team backlog ownership and view of progress + +The Customer Profile feature team's view of the backlog only includes those work items assigned to their area path, Fabrikam/Account Management/Customer Profile. Here we show parents which provides a few of the features and epics to which the backlog items belong. Items that are owned by other teams appear with hollow-filled bars. For example, Mobile feedback and Text alerts belong to the Account Management team. + +<img src="_img/pm-customer-profile-backlog-view.png" alt="Backlog view of Customer profile feature team" style="border: 2px solid #C3C3C3;" /> + +>[!TIP] +>Add **Node Name** to the column options to show the team assigned to the work item. + +Each feature team has its own team home page, backlog, Kanban board, and task board. These pages only show work relevant to each team, based on assignments made to the work item area and iteration paths. + +## Assign work from a common backlog +While the hierarchical team and backlog structure works well to support autonomous teams to take ownership of their backlog, it also supports assigning work to teams from a common backlog. During a sprint or product planning meeting, product owners and development leads can review the backlog and assign select items to various teams. + +In this Account Management view, all Product Backlog Items still under Account Management have yet to be assigned. + +<img src="_img/pm-assign-items-from-common-backlog.png" alt="Backlog view-Assign items from a common backlog" style="border: 2px solid #C3C3C3;" /> + +During the planning meeting, you can open each item, make notes, and assign the item to the team to work on it. + +Here, all backlog items have been assigned to feature teams. While all features and epics remain owned by Account Management. + +<img src="_img/pm-items-assigned-from-common-backlog.png" alt="Backlog view-Items assigned from a common backlog" style="border: 2px solid #C3C3C3;" /> + +>[!TIP] +>You can multi-select work items and perform a bulk edit of the area path. In VSTS you can do this from any backlog. From on-premises TFS, you can create a backlog query and [perform bulk updates from the query results](../backlogs/bulk-modify-work-items.md).   + + +<a id="set_up"></a> +##Set up hierarchical teams and backlogs + +The first step is to add a team for each feature team and management area. When you finish, you'll have a set of teams similar to the ones shown. + +<img src="_img/pm-add-teams.png" alt="Project admin context, Add teams" style="border: 2px solid #C3C3C3;" /> + +You'll need to be a [project administrator](../../security/set-project-collection-level-permissions.md) to perform these steps. + +1. To add a team, give the team a name, and make sure to select **Create an area path with the name of the team**. + + ![Create a sub-team with its own area path](_img/scale-agile-add-new-team-co.png) + + To access this page, choose the ![gear icon](../_img/icons/gear_icon.png) gear icon from your team home page. + + Repeat this step for all teams and management areas. + +2. In this next step, you want to move the areas paths associated with feature teams from a flat structure to a hierarchical structure. For details on this step, see [Set team default area paths](set-team-defaults.md#team-area-paths) + <table> + <tbody valign="top"> + <tr> + <th>Flat area structure</th> + <th>Hierarchical area structure</th> + </tr> + <tr> + <td>![Flat area structure](_img/pm-flat-area-structure.png) </td> + <td>![Hierarchical area structure](_img/pm-hierarchical-area-structure.png)</td> + </tr> + </tbody> + </table> + + You do this by opening each area path associated with a feature team and change its location to be under the management area path. For example, here we move the Customer Profile area path to under Account Management + + <img src="_img/pm-open-and-edit-area-path.png" alt="Team admin context, Open and edit area paths for feature teams" style="border: 2px solid #C3C3C3;" /> + + Repeat this step for all feature team area paths. + +3. Next, you want to change the area path setting for management areas to include sub-area paths. The default setting for all teams is to exclude sub- area paths. + + Here we choose to include sub-area paths for the Account Management area. + + <img src="_img/pm-include-sub-area-paths.png" alt="Team admin context, Open and edit area paths for feature teams" style="border: 2px solid #C3C3C3;" /> + + Repeat this step for all your management areas. Also, if you want to enable rollup across all feature teams and management areas to the top level area, repeat this step for the default team. In our example, that corresponds to Fabrikam. + +4. Add team administrators for each feature team and management area. You do this from the Overview page of the team admin context. + + <img src="_img/pm-add-team-admins.png" alt="Open team administration context" style="border: 2px solid #C3C3C3;" /> + + Add the account identity, for example the product owner, development lead, or other team member who has primary responsibility for planning and reporting progress. + + <img src="_img/add-team-admin-dialog.png" alt="Add account as a team administrator" style="border: 2px solid #C3C3C3;" /> + + In this way, the team administrators can add additional team admins and team members. They can also configure their team settings and manage their Agile tools and team assets. + + Optionally, [grant team administrators additional permissions](multiple-teams.md#grant-add-permissions). + + +### Define a single sprint cadence for all teams + +If your feature teams use Scrum and work in sprints, you'll want to set up a series of sprints that all teams can use. By default, you'll see a set of predefined sprints. Add more sprints and set their sprint dates as described in [Add iterations and set iteration dates](../customize/set-iteration-paths-sprints.md). + +You do this from the team project admin context. + +<img src="_img/setup-sprint-schedule.png" alt="Setup sprint schedule" style="border: 2px solid #C3C3C3;" /> + +Here we've defined the start and end dates of the first 6 sprints corresponding to a 3-week cadence. + +<img src="_img/pm-6-3-week-sprints.png" alt="Sprint schedule selected sprints" style="border: 2px solid #C3C3C3;" /> + +###Customize Agile tools and configure team settings + +These next set of steps can be performed by a team administrator. +- [Add team members](multiple-teams.md#add-team-members) +- [Select sprints for the team](../scale/set-team-defaults.md#activate) +- [Activate backlog levels](../customize/select-backlog-navigation-levels.md) +- [Show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md) + +See [Configure team settings](manage-team-assets.md) for an overview of all Agile tools and team assets. + + +## Try this next +With the hierarchical set of teams in place, you're well positioned to start planning and using the Agile tools available. To take the next steps in planning your portfolio of projects, see these articles: + +- [Review team plans](review-team-plans.md) +- [Add management dashboards with multi-team views](visibility-across-teams.md#add-management-dashboards-with-multi-team-views). +- [Work with multi-team ownership of backlog items](../backlogs/work-multi-team-ownership-backlogs.md) +- [Select backlog navigation levels for your team](../customize/select-backlog-navigation-levels.md) +- [Track capacity when working on more than one team](capacity-planning.md#track-capacity-per-team) + +## Related notes + +- [Create your backlog](../backlogs/create-your-backlog.md) +- [Kanban](../kanban/kanban-basics.md) +- [Sprint-planning](../scrum/sprint-planning.md) +- [Organize your backlog](../backlogs/organize-backlog.md) +- [Customize your work tracking experience](../customize/customize-work.md) + +If you need additional portfolio backlogs—for example, Scenarios or Initiatives—you can [add them as well](../customize/add-portfolio-backlogs.md). + +### Track dependencies across teams + +The simplest way to track dependencies is to link work items using the Related link type. You can then create queries that find work items containing these relationships. + +Additionally, you can use the Predecessor and Successor links when time dependencies factor in. + +See [Manage dependencies, link work items to support traceability](../track/link-work-items-support-traceability.md) to learn more. + + + + \ No newline at end of file diff --git a/docs/work/scale/practices-that-scale.md b/docs/work/scale/practices-that-scale.md new file mode 100644 index 00000000000..3dce89913ba --- /dev/null +++ b/docs/work/scale/practices-that-scale.md @@ -0,0 +1,130 @@ +--- +title: Practices that scale | VSTS & TFS +description: Scaling Agile recommended practices for working in Visual Studio Team Services (VSTS) or Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 46F7A310-B6BD-46FA-88E2-91521BEE3BC4 +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + +#Scaling Agile - Practices that scale + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Enterprise organizations adopt Agile practices for a number of reasons. Prime among these include: + +- Decrease time-to-market, accelerate product delivery +- Improve organizational effectiveness to manage changing priorities +- Enhance software quality and delivery predictability +- Improve project visibility and reduce project risk <br/> + +As your organization grows, you'll want to scale your practices to remain agile and meet changing goals. To do that, consider these two guiding principles: +- **What does success look like** to you, your teams, and your organization? What's of most interest: On-time delivery? Product quality? Predictability? Customer satisfaction? +- **Return to first principles**, return to the principles and shared values enumerated in the [Agile manifesto](http://www.agilemanifesto.org/principles.html) As noted by [Ken Schwaber](https://kenschwaber.wordpress.com), one of the founders of Scrum: + - "Values and principles scale, but practices are context sensitive." + - "Keep the values, keep the principles, think for yourself. A core premise of Agile is that the people doing the work are the people who can best figure out how to do it." + +##Create rhythm and flow +<meta name="keywords" content="Agile culture,scaling agile,Agile tools" /> +By adopting a shared cadence and set of periodic communications, you create a constant flow of activity throughout the organization. Practices that help create rhythm and flow within larger organizations include: + +- **Shared cadence**: [Regular sprints and releases](../scrum/define-sprints.md) establish the rhythm of the business. Having all teams work to a shared cadence helps with all coordination and collaboration activities. +- **Sprint emails**: To keep the organization and all teams informed about the progress and plans of feature teams, each feature team can email a summary of their previous sprint results and current sprint plans. +- **Sprint demos**: A quick--2 to 3 minute--video that illustrates a new feature the team produced. Links to such videos can be included within sprint emails. +- **Showcase meetings**: To inform other teams and elicit feedback about software under development, teams showcase the work they've done. Conduct these meetings at regular intervals throughout the project lifecycle, and open them to all interested parties. +- **Bug summary emails**: To support insight into product quality and to encourage maintaining bug discipline, periodically share quality metrics with the organization. These metrics may include active bugs per feature team, bug trends, and bugs per engineer. +- **Coordination meetings**: Hold meetings that coordinate teams at either regular intervals or as often as needed to address overlapping goals, dependencies, and risks. + +##Enthusiastic customers + +Engaging customers throughout your product lifecycle is a primary Agile principle. Empower each team to interact directly with customers on the feature sets they own. + +- **Continuous feedback**: Build in customer feedback loops. These can take many forms: + - **Customer voice**: Make it easy for customers to give feedback, add ideas, and vote on next generation features. This is often done through a dedicated website similar to [Visual studio User Voice](https://visualstudio.uservoice.com/forums/330519-team-services). + - **Product feedback**: In-product feedback buttons are another way to solicit feedback about the product experience or specific features. + - **Customer demos**: Regularly scheduled demos that solicit feedback from your customers can help shape next generation products and keep you on track to build applications your customers want to consume. +- **Early adopter programs**: Such programs should be developed with the idea that all teams may want to participate as some point. Early adopters gain access to early versions of working software which they then can provide feedback. Oftentimes, these programs work by turning select [feature flags](#feature-flags) on for an early adopter list. +- **Data-driven decisions**: Find ways to instrument your product to obtain useful data and that can test various hypotheses. Help drive to an experiment-friendly culture that celebrates learning. + + +##Improve project visibility +<meta name="keywords" content="Agile culture,Agile project management,Agile tools" /> +The more insight you and your teams have into the goal, vision, and progress of the work being done, the better enabled you'll be to reduce risks and manage dependencies. + +- **Team structure**: No matter how large your organization gets, structuring your organization around small teams of 6 to 9 scales. Create [vertical, autonomous feature teams](agile-culture.md#horizontal-vs-vertical) grouped under portfolio management areas. +- **Work breakdown structure**: Breaking down large goals, features, or requirements into smaller ones remains a stable of project management. By breaking down work into similar-sized tasks, teams can make better estimates and identify risks and dependencies. +- **Consolidated views**: Use your online tracking tools to aggregate work to gain knowledge across teams. Build dashboards to show progress and trends. +-**Experience reviews**: These meetings, held before development begins on a feature, are used to educate leadership on scenarios and priorities, collect feedback, set expectations, and surface any cross-team issues about the feature. + +## Productive workforce + +Some specific Agile practices that scale well and lead to happier, engaged, and productive employees include: + +- **Embedded leadership**: Empower teams and leaders within the organization to self-organize and self-manage as much as possible. Team autonomy increases organizational agility team effectiveness. Ensure teams have the corporate sponsorship needed to succeed. +- **Daily stand-ups**: Or, [Scrum meetings](../scrum/best-practices-scrum.md#daily-scrum-meetings) help keeps teams focused on what they need to do daily to maximize their ability to meet their sprint commitments. As organizations grow, they should consider staggering these meetings so that cross-team participation can occur as needed. +- **[Scrum of scrums](http://guide.agilealliance.org/guide/scrumofscrums.html)**: Daily standups of members from different Agile teams meet daily to report work completed, next steps, and issues or blocks occurring within their representative teams. +- **Team communications**: Provide and encourage teams to share their practices and guidance, which they and other teams can access through the corporate network. Common tools used for this purpose include team wikis, OneNotes, or markdown sites. +- **Collaboration**: Encourage informal team-to-team communications as well as collaboration within the team. Institutionalizing practices such as code reviews, design reviews, spec reviews not only increase team collaboration but help develop individual as well as overall corporate competence. + +##Organizational culture + +You improve organizational effectiveness by attending to the culture you want to build. Culture changes occur when individuals, teams, and organizations adopt one or more continuous improvement practices. Several scalable Agile practices include: + +- **Retrospectives**: By asking questions such as: “What went well?”, “What should we do differently?”, and “What should we stop doing?” help teams reflect on how they can improve on their processes and practices. Retrospectives help teams surface what is working well and what needs improvement. Retrospectives can be conducted anytime and anywhere. However, institutionalizing certain retrospectives at a regular cadence help institutionalize continuous improvement practices. For example: + - **[Sprint retrospectives](../scrum/best-practices-scrum.md#sprint-retrospective-meeting)** can help teams identify areas to improve at a regular cadence. + - **Release retrospectives** can help organizations identify areas to improve communications and internal practices and fuel improvement for the next release. + - **Operational reviews**: are typically held monthly and include representatives from a whole value stream. Spanning a portfolio of projects and other initiatives and using objective, quantitative data, design these retrospectives to provoke discussions about the dynamics affecting performance between teams. + + See the [Agile Retrospective Resource Wiki](http://retrospectivewiki.org/index.php?title=Main_Page) for ideas, tips, and tools for planning and conducting retrospectives. +- **Improvement tracking board**: Good ideas to improve processes can arise from any one at any time. Capturing those ideas in order to discuss and decide on how to act on them in a timely manner is a key to support process improvement efforts. + + A white board provides any easy and visual means with which to capture ideas. Also, you can create an Improvement tracking team and capture ideas that you track on an electronic [Kanban board](../kanban/kanban-basics.md). + +- **Institutionalize sharing**: Sharing best practices and communicating ideas helps all teams within an organization grow and improve. Developing a culture of learning is key to supporting this and other continuous improvement activities. Some ideas to consider: + - In-house wikis + - In-house distribution lists + - Hackathon weeks or 10% hack time + - Internal Agile support team to support teams adopt Agile practices + + [The Culture Game](http://www.amazon.com/The-Culture-Game-Tools-Manager/dp/0984875301) provides a good resource for Agile managers to help teams adopt Agile and share best practices. + +- **Communities of practice**: Support internal common disciplines (e.g., DBAs, SW Architects, UX design) + + +##Working software + +><p align="center" style="font-size: 13px">"Deliver working software frequently, from a couple of weeks to a couple of months, <br/>with a preference to the shorter timescale." <br/> +"Working software is the primary measure of progress."</p> +<p align="right" style="font-size: 13px"> - [Agile manifesto](http://www.agilemanifesto.org/principles.html)</p>   + +As the amount of software, features, and complexity increase, you'll need to adopt practices that help you produce consumable solutions. + +<a id="feature-flags"></a> +- **Feature flags**: Use feature flags to enable or disable access to different features. Provide support for turning features on to early adopters to get working feedback. +- **Release trains**: Provide another type of cadence to deliver one or more features. Feature teams understand the pre-planned schedule of pushing out new features, and plan accordingly. Release trains can correspond to the same sprint cadence establish for the organization, or occur at a different cadence. See [Scaled Agile Framework](scaled-agile-framework.md) for how to setup sprints and release trains. +- **Continuous integration**: Adopt processes that eliminate manual work and instead automate the flow of software through the test, build, and deploy cycles. +- **Internal Open Source**: Bring the value and ethos that's developed in the Open Source Software community to your internal development teams. + + +##Related notes + +In addition to the above practices, you'll find additional guidance around scaling your Agile tools in the following topics: + +- [Agile culture](agile-culture.md) +- [Multiple teams](multiple-teams.md) +- [Portfolio management](portfolio-management.md) +- [Visibility across teams](visibility-across-teams.md) +- [Scaled Agile Framework](scaled-agile-framework.md) +- [Scaling Agile to large teams] (https://www.visualstudio.com/learn/scale-agile-large-teams/) + +###Industry resources +- [Agile manifesto](http://agilemanifesto.org) +- [Agile Alliance](http://guide.agilealliance.org/) +- [Scaled Agile Lean Development - The Principles](http://scaledprinciples.org/) + +###Practices that don't scale +- **Estimating large initiatives**: Part of waterfall project methods involved estimating resources and schedules. The larger the initiatives, the less likely these estimates were of any value. As projects grow, risks and unforeseen issues and impediments can arise, invalidating many estimates. +- **Velocity**: While [team velocity](../../report/guidance/team-velocity.md) can provide a useful metric for gaining insight into how much work each team can complete during a sprint cycle, you can't add team velocities to gain meaningful or useful metrics. Also, using velocity gained from a number of teams to reliably perform long range forecasts is problematic. Teams vary in the way they estimate their work, and those variations increase over time. +- **Top-down prescriptive solutions**: One size does not fit all, and one solution typically does not fit all teams. Supporting team autonomy means letting teams find their own solutions.  diff --git a/docs/work/scale/review-team-plans.md b/docs/work/scale/review-team-plans.md new file mode 100644 index 00000000000..ebcb6852646 --- /dev/null +++ b/docs/work/scale/review-team-plans.md @@ -0,0 +1,222 @@ +--- +title: Review team delivery plans | VSTS & TFS +description: Install the Delivery Plans extension, add & use plans to review scheduled multi-team deliverables in Visual Studio Team Services (VSTS, VS Online) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 3B41D55E-B7B1-41B1-B68F-7A83BA2890A5 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 06/13/2017 +--- + + +# Review team Delivery Plans + +<b>VSTS | TFS 2018 | TFS 2017.2</b> + +> [!NOTE] +> **Feature availability**: [Delivery Plans, a Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-plans), is available for VSTS and TFS 2017.2 and later versions. All users with [basic access](../../security/change-access-levels.md) can view, add, and configure Delivery Plans. (Accounts assigned to [Stakeholder access](../../quickstart/get-started-stakeholder.md), however, don’t have access to Delivery Plans.) + +In this topic you'll learn: + +> [!div class="checklist"]    +> - How to review a plan with your teams +> - How to add and edit a plan +> - How to add field criteria, customize cards, and add markers +> - How to open a plan from the list of defined plans +> - How to work with the interactive elements of plans and change the plan view +> - What permissions are required to create and view plans + +Use the visualization options provided by Delivery Plans to review the schedule of stories or features your teams plan to deliver. Delivery Plans show the scheduled work items by sprint (iteration path) of selected teams against a calendar view. + +![Moving a card to a different iteration](_img/plans_move1.png) + +Use Delivery Plans to ensure your teams are aligned with your organizational goals. You can view multiple backlogs and multiple teams across your whole account. You can interact with the plan with simple drag-and-drop operations to update or modify the schedule. + +## Review a plan with your teams + +It takes several teams to develop large software projects. Very large projects require multiple autonomous teams (review [Agile culture](agile-culture.md) for a discussion of autonomous teams and organizational alignment). Autonomous teams manage their own backlog and priority which contributes to a unified direction for that project. + +Regular reviews of the project schedule with these teams help ensure that the teams are working toward common goals. Delivery Plans provide the needed multi-team view of your project schedule. + +Some questions you might address during the review: +- *How confident are the teams in meeting the deliverables scheduled for each sprint?* +- *Are dependencies across teams adequately addressed via the planned deliverables?* +- *Are their gaps in the schedule, where no deliverables are scheduled? What's the cause? Can this be mitigated?* + +For example, we use Delivery Plans internally to share the schedule of Features that we add to VSTS. By seeing the work many teams have planned for the next 3 sprints, we can easily discuss whether these are the right priorities and if dependencies exist. + +In this way, a Delivery Plan is a driver of alignment while allowing each team to retain a strong sense of autonomy. Individual teams can work to different sprint cadences, if needed, and manage different work item types—stories, features, or epics. Their work is all visible with the same plan view. Teams can even be part of different team projects if they use different processes. You can also customize the card fields so that you only see the data fields of interest and applicable per work item type. + + + +### Pre-requisites +In order to add and configure a plan, you must have the following in place: +- [Installed the Plans extension](#install-plans) +- Be granted Basic access or greater in [VSTS](../../accounts/add-account-users-assign-access-levels.md) or [TFS](../../security/change-access-levels.md) (Users with Stakeholder access can't add or view plans) +- [Defined iteration paths](../customize/set-area-paths.md) for the team project +- [Configured teams](multiple-teams.md) and [set team defaults and team sprints](set-team-defaults.md) +- Teams have defined [user stories](../backlogs/create-your-backlog.md), features, or other product or portfolio backlogs and assigned them to iterations + +## Add a plan  + +Once you have [installed Delivery Plans](#install-plans), the Plans page appears under the Work hub. + +<img src="_img/review-team-plans-open-plans.png" alt="Plans menu item" style="border: 2px solid #C3C3C3;" /> + +0. To add a plan, click New Plan from the Plans page. + + <img src="_img/review-team-plans-no-plans-defined.png" alt="Create new plan" style="border: 2px solid #C3C3C3;" /> + + All users, except users [assigned Stakeholder access](../../security/change-access-levels.md), have permissions to create a plan and manage the plans they create. To manage permissions for a plan, see [Permissions to create and edit plans](#plan-permissions). + +0. Fill in the form to name, describe, and specify the team backlogs that you want to appear within your plan. + + <img src="_img/review-team-plans-new-plan.png" alt="Plans wizard" style="border: 2px solid #C3C3C3;" /> + + When defining a plan, note the following: + - Use the name and description field to clearly identify your plan within the project + - You can choose one or more teams from any team project defined in the account or collection + - You can choose one or more [active backlogs for a team](../customize/select-backlog-navigation-levels.md) + - The order in which you enter the teams and team backlogs defines the order in which they'll appear in the plan + - To limit the number or types of work items, specify the field criteria. + +<a id="card-settings"> </a> +## Edit a plan, add field criteria, customize cards, and add markers + +Once you've defined a plan, you can further customize it. + +1. Click the ![Settings gear icon](../_img/icons/team-settings-gear-icon.png) gear icon to open the Settings dialog. + +2. Then, click the page you want to edit. You can customize the plan in the following ways: + - Edit the teams you've selected and their backlog level + - Set field criteria to further limit the work items that will appear on the plan + - Add markers to show important upcoming events on your timeline + - Customize the fields that display on the cards, similar to how you [customize them for your Kanban or task board](../customize/customize-cards.md). + + Here, we add the Tags field criteria. Only work items that contain the *RC Review* tag will appear in the Delivery Plan. + + <img src="_img/review-team-plans-set-field-criteria.png" alt="Settings dialog, Fields page" style="border: 2px solid #C3C3C3;" /> + +3. To set a marker, open the Markers page, specify a date and select a color. + + <img src="_img/review-team-plans-set-markers.png" alt="Settings dialog, Fields page" style="border: 2px solid #C3C3C3;" /> + + Markers appear on the plan as shown: + + <img src="_img/review-team-plans-show-markers.png" alt="Plans, Markers appear on calendar slide" style="border: 2px solid #C3C3C3;" /> + + +## View the list of plans, open a plan + +Once you've defined a few plans, you'll see them listed from the Plans page under All, or the ones you've clicked a Favorite star under Favorites. You can see their title, description and their most recent creator/editor. + +Use the favorite's star to favorite a plan so that you can quickly return to that plan. You can also search for other plans in the project. + +To open a plan, simply click the plan name. + +<img src="_img/review-team-plans-view-plans.png" alt="Plan Favorites" style="border: 2px solid #C3C3C3;" /> + +## Interactive elements of plans, change the plan view + +Each team's backlog specified in a Delivery Plan appears as a row within the plan view. When collapsed, a roll-up of the backlog items shows. When expanded, a card for each backlog item appears, organized by their assigned iteration. + +<img src="_img/plans_view2.png" alt="Interactive plan elements" style="border: 2px solid #C3C3C3;" /> + +You can interact with the plan in the following ways: +- Scale the size of the cards (enter **+** or **-** to also scale) +- Scroll the view horizontally via the calendar to view previous months or future months (Enter **Shift-left** or **Shift-right** to scroll) +- You can also scroll the plan via click and dragging your mouse. +- Scroll the view vertically to view teams that appear lower within the plan view +- Click a card to view the details of a backlog item +- Expand or collapse a single team row to view details for that team by clicking the team name or team sprint +- Expand and collapse all team rows (Enter **u** to collapse, **o** to expand all rows) +- Enter **t** to quickly toggle fields shown on cards to just the Title or all other card field settings +- Click the ![Settings gear icon](../_img/icons/team-settings-gear-icon.png) settings gear to edit the plan and [change the fields displayed on the cards](#card-settings). + +For a list of all keyboard shortcuts, see [Plan view keyboard shortcuts](#plans-keyboard-shortcuts). + +<!--- QUESTION: What determines the order of team rows? --> + +In the following example, Team 1 features expanded, two items are scheduled for delivery in Sprint 50. + +<img src="_img/review-tp-show-team-1.png" alt="Team rows in plans" style="border: 2px solid #C3C3C3;" /> + +You can also quickly see that: +* Team 1 is currently working on Sprint 50 deliverables +* Sprint 50 began on December 14th and is scheduled to end December 25th. +* The team expects to deliver the two features shown by the cards. + + +A benefit of Delivery Plans is to view multiple teams across your projects that you care about. Two main ways to view more teams within the plan view is to collapse all teams to focus on summary data and to minimize the number of fields displayed on cards. + +### Collapse teams for summary information + +To gain a summary view of work that is schedule, collapse all teams. You can then more easily look for gaps in the forward forecast. + +For example, here you can see the count of Features for Team 1 for the next 3 sprints. You can collapse/expand team rows by clicking the team name or the sprint name. + +<img src="_img/plans_view4.png" alt="Collapse click targets" style="border: 2px solid #C3C3C3;" /> + + +### Minimize the fields displayed on cards + +To quickly change the cards to only show their Title, enter the keyboard shortcut 't'. This will hide all other fields, as shown in the following image, the Assigned to field no longer appears. To persist this view, edit the [plan's settings for card fields](#card-settings). + +<img src="_img/plans_view5.png" alt="Cards showing the Title only" style="border: 2px solid #C3C3C3;" /> + +### Update the iteration for a backlog item + +As changes occur to the schedule, you you can update the iteration for a backlog item by moving a card to a different iteration. This will help to drive alignment across your organization. + +![Move a card to a different iteration](_img/plans_move1.png) + + +## Related notes + +So now you've got an idea of how to use plans to create a project schedule view across multiple teams. From the settings dialog, you can also + +For additional resources for working with multiple teams, see these additional topics: + +- [Backlogs, boards, and plans](../backlogs-boards-plans.md) +- [Multiple teams](multiple-teams.md) +- [Portfolio management](portfolio-management.md) +- [Configure team settings](manage-team-assets.md) + +<a id="configure-plan-permissions"> </a> +<a id="plan-permissions"> </a> +### Permissions to create and edit plans + +The creator of a plan as well as all members of the Project Collection Administrators and Project Administrators groups have permissions to edit, manage, and delete plans. + +Plans are an object within a team project. You manage plan permissions for each plan similar to the way you [manage permissions for shared queries or query folders](../track/set-query-permissions.md). + +0. To grant permissions to a group or user to manage or edit a specific plan, click the ![actions icon](../_img/icons/actions-icon.png) actions icon to open the Security dialog for the plan. + +<img src="_img/review-tp-open-security-dialog.png" alt="Open the Permissions dialog for a plan" style="border: 2px solid #C3C3C3;" /> + +0. Add a user or group who you want to grant permissions to or restrict access. By default, non-administrators can't delete or edit a plan that you create. + +0. With the user or group selected, set the permission you want them to have to Allow. + + For example, here we grant permission to Raisa to edit the plan. + + <img src="_img/review-tp-security-dialog.png" alt="Permissions dialog for a query" style="border: 2px solid #C3C3C3;" /> + +<a id="plans-keyboard-shortcuts"> </a> +### Plans view, keyboard shortcuts + +From a Delivery Plan page, enter **?** to open the keyboard shortcuts pane. For additional shortcuts, see [hotkeys and keyboard shortcuts](../../reference/keyboard-shortcuts.md). + +<img src="_img/plans-keyboard-shortcuts.png" alt="Plans page, keyboard shortcuts" style="border: 2px solid #C3C3C3;" /> + + +<a id="install-plans"> </a> +### Install the Plans page extension + +The Delivery Plans extension is free to install from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.vss-plans). To provide feedback, visit our[Uservoice page](https://visualstudio.uservoice.com/forums/330519-team-services). + +<a id="plans-rest-api"> </a> +### Programmatically manage Delivery Plans +You can manage plans programmatically using the [Plans REST API](https://visualstudio.com/integrate/api/work/plans.md). diff --git a/docs/work/scale/scale-teams.md b/docs/work/scale/scale-teams.md new file mode 100644 index 00000000000..607b40696da --- /dev/null +++ b/docs/work/scale/scale-teams.md @@ -0,0 +1,56 @@ +--- +title: Scale and manage work across the enterprise | VSTS & TFS +description: Scale your team project by adding teams +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/15/2017 +--- + + +<a id="scale"> </a> +<a id="collection-project-team-structure"> </a> +## Support a growing organization, manage work across the enterprise + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +How do you manage work across the enterprise using Agile tools? How will you scale your Agile tools to support your growing enterprise? + +When you connect to VSTSor an on-premises TFS, you connect to an account or team project collection. Within that collection, one or more team projects may be defined. At a minimum, at least one team project must be created in order to use the system. + +When you create your team project, a team of the same name is automatically created. For small teams, this is sufficient. + +However, for enterprise-level organizations, it may be necessary to scale up, to create additional teams and/or team projects. These can be created within the single account or collection. + +You can scale your system as needed by adding teams and/or team projects. These can be created within the single account or collection. As your organization grows, your tools can grow to support a [culture of team autonomy as well as organizational alignment](agile-culture.md). + + +<table width="100%"> +<tbody valign="top"> +<tr> +<td width="40%"> +**Single team project, team defined within an account/collection** +![Single collection-project-team conceptual image](../../connect/_img/web-portal-account-project-team-concept.png) +</td> + +<td width="60%"> +**Multiple team projects and teams defined within an account/collection** +![Scaled collection-project-team conceptual image](../../connect/_img/web-portal-account-project-team-scale-concept.png) + +</td> +</tr> +</tbody> +</table> + + +To learn more, see the following topics: + +- [Scale Agile to large teams](https://www.visualstudio.com/learn/scale-agile-large-teams/) +- [About teams and Agile tools](../about-teams-and-settings.md) +- Manage a [portfolio of backlogs](portfolio-management.md) and gain insight into each team's progress as well as the progress of all programs. +- Use [Delivery plans](review-team-plans.md) to review the schedule of stories or features your teams plan to deliver. Delivery plans show the scheduled work items by sprint (iteration path) of selected teams against a calendar view. +- Incrementally adopt [practices that scale](practices-that-scale.md) to create greater rhythm and flow within your organization, engage customers, improve project visibility, and develop a productive workforce. +- Structure team projects to gain [visibility across teams](visibility-across-teams.md) or to support [epics, release trains, and multiple backlogs to support the Scaled Agile Framework](scaled-agile-framework.md). \ No newline at end of file diff --git a/docs/work/scale/scaled-agile-framework.md b/docs/work/scale/scaled-agile-framework.md new file mode 100644 index 00000000000..d895eb1dee8 --- /dev/null +++ b/docs/work/scale/scaled-agile-framework.md @@ -0,0 +1,354 @@ +--- +title: Scaled Agile Framework | VSTS & TFS +description: How to implement the Scaled Agile Framework to support epics, release trains, and multiple backlogs when working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: C8E9CFD2-F08A-4FB8-AC53-B9B6B49A22A3 +ms.manager: douge +ms.author: kaelli +ms.date: 07/22/2017 +--- + + +# Implement Scaled Agile Framework® to support epics, release trains, and multiple backlogs + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +As enterprises are benefiting from individual agile teams, the question now is how do we scale these practices across teams and gain a portfolio view of the progress of agile teams throughout the enterprise? To address these needs, many businesses are using the Scaled Agile Framework® (SAFe®). + +If you're interested in using SAFe, you can configure projects created with the [Scrum](../guidance/scrum-process.md), [Agile](../guidance/agile-process.md), or [CMMI](../guidance/cmmi-process.md) processes to track SAFe criteria. Moreover, just as your Agile tools support Scrum and Agile practices, it can support SAFe and large numbers of teams to work together on epics that span releases. + +In this article you'll learn how SAFe concepts map to your Agile tools, how to plan and track SAFe projects using your Agile tools, and how to configure your Agile tools to support SAFe. + +If you're familiar with Scrum but not familiar with SAFe, [these videos at Scaled Agile Framework Foundations ](http://scaledagileframework.com/foundations) from Inbar Oren, the Lean Samurai, are a good way to orient yourself. + +SAFe and Scaled Agile Framework are registered trademarks of [Scaled Agile Inc.](http://www.scaledagile.com/) + +##Map SAFe® concepts to Agile tool concepts + +The SAFe big picture addresses how a portfolio vision is met by a hierarchy of teams, all concerned with specific objectives. This framework breaks down epics into features and stories, which teams work on in Sprints and deliver through Program Increments (PIs) and Release Trains. Also, the portfolio backlog can track how deliverables map to value streams and associated budgets. + +![SAFe architectural overview © D. Leffing..](_img/safe-concepts-poster-v4.0.png) + + +Reproduced with permission from © 2011-2016 [Scaled Agile Inc.](http://www.scaledagile.com/). All rights reserved. + +Examples provided below illustrate how to configure a three-level team hierarchy and map teams to their respective area and iteration paths. The examples build from the [Agile process](../guidance/agile-process.md), However, the changes can be applied to any team project hosted on Visual Studio Team Services (VSTS) or an on-premises TFS. + +![Agile tool structure to support SAFe](_img/safe-objects-map-to-vso-objects.png) + +##SAFe® portfolios, programs, and teams map to Agile tool teams and projects + +Because your Agile tools support a hierarchical team structure, each team has its own view of their work which rolls up to the next level within the team hierarchy. + +![SAFe roles to Agile tool teams](_img/safe-roles-to-vso-roles.png) + +To support SAFe teams, you reconfigure the default team as the Portfolio team to manage your epics. You then create sub-teams for program-level work and team-level work. Work can be tracked across teams and throughout each of the levels. + +###SAFe® backlogs map to your Agile tools backlogs +Out of the box, the Agile process supports user story, feature, and epic backlog levels. The hierarchical backlog structure shows work done to support features and user stories in the progress of an epic. + +![Hierarchical backlog: epics, features, and stories](_img/safe-epics-to-stories-value-area.png) + +###SAFe® releases, iterations, and sprints map to iterations + +SAFe Release Trains, Releases, Iterations, Program Increments (PIs), and Sprints map easily to your iteration paths. By sharing iterations across the team hierarchy, you manage the releases in a cohesive manner. + + +![SAFe release trains map to Agile tool iterations](_img/safe-release-trains-map.png) + +Because epics can span several release trains, the Portfolio team isn't associated with any specific iterations. Program teams track their Feature deliverables, which ship with a PI. And Feature teams work in Sprints to complete several stories. Each team chooses which iterations will support them to track their focused set of deliverables. + + +![Teams track deliverables using iterations](_img/safe-teams-track-deliverables.png) + +###SAFe® value streams and budgets map to tags and the Value Area field +You can use tags for a quick and easy way to map epics to their Value Streams, strategic themes, and associated budgets. + +![Tags can track value streams or associated budgets](_img/save-epics-value-stream-tags.png) + +With tags that you add to work items, you can: + +- Filter any backlog or Kanban board +- Create queries based on tags, and filter query results by tags +- Create progress and trend charts or reports based on tags + +For a more robust mapping of work to architecture or business features, you can specify the Value Area for each epic, feature, or story. + +![Value Area tracks Business or Architectural work](_img/safe-epic-to-stories-map-to-value-area.png) + +##Plan and track SAFe® projects using your Agile tools + +Once you've configured your Agile tools to support SAFe, trace relationships can be created from stories all the way up to epics. Additionally, you can view progress from the portfolio, program, and feature team levels. + +###Map features to epics and stories to features +The program team can map features to epics using the mapping pane. Feature teams can use the same experience to map their stories to features. + + +![Map features to epics](_img/safe-map-features-to-epics.png) + +###Portfolio team's view of progress + +To track the progress of epics that span Releases, the Portfolio team's backlog shows epics. Each epic can be expanded to show the features and user stories that support it. + + +![Hierarchy of epics, features, and stories](_img/safe-portfolio-progress-view-epics-to-stories-any-team.png) + +The Portfolio team can also view the progress of epics on their Kanban board. + +![Epic Kanban board](_img/safe-epics-kanan-board.png) + + +>[!TIP] +>You can also [customize the card color based on various criteria](../customize/customize-cards.md#style-rule), such as the Value Area=Architectural, by applying styling rules. + +###Program teams' progress view +Program teams, primarily concerned with Release Trains, can see the features in their backlog, along with the PIs with which they're associated. + +![Program team backlog of features and stories](_img/safe-fiber-suite-features-to-stories.png) + +Just like the Portfolio team, they can also toggle their view to see which epics their features support, or the user stories that support their features, or both. + +Another view available to program teams shows query-based graphs of release train progress, backlog items, or active tasks during a shipping sprint. A customizable home page view is available to each team. + +![Team dashboard](_img/safe-team-dashboard.png) + +Since so much of a program team's work revolves around PIs and Release Trains, a custom report showing the scheduled shipping dates and what is projected to be on any given train might be useful. In addition, you can take advantage of the rich reporting options and the built-in reports the following services have to offer: + +- VSTS or TFS: [Dashboards, charts, and widgets](../../report/overview.md) +- When connecting to VSTS: [Power BI integration overview](../../report/powerbi/overview.md) +- On-premises TFS: [SQL Server Reports](../../report/sql-reports/reporting-services-reports.md) + +###Feature teams' view of progress +For individual feature teams, their backlog view shows the Stories that they're working on. + +![Migrate feature team backlog of stories](_img/safe-migrate-feature-team-stories.png) + +Because feature teams don't own epics or features, epics and features don't appear in their team-level backlog views. However, if the team wants to know which epics and features their stories support, they can turn on those views from their backlog. + +![Migrate team backlog of stories to epics](_img/safe-migrate-team-stories-to-epics.png) + +They can also break down their work into tasks and use the task board to keep themselves on track during specific sprints. + +![Migrate team Sprint 3 task board](_img/safe-migrate-sprint3-task-board.png) + +The chart view of queries becomes very useful in the Innovation and Planning (IP) sprint, when feature teams work together to stabilize the features scheduled for a Release. + +![Bug charts](_img/safe-feature-team-active-bug-charts.png) + +For everything else, it is very much business as usual for individual feature teams. They can sprint in their usual cadences, use their Kanban board and task board to track progress and break down work into manageable chunks. + +However, now their progress on individual stories is visible to their program and portfolio management teams. The management view reflects what they do. + +##Configure your Agile tools to support SAFe® +In this section, we'll go from having one project, named "Fabrikam" and one team, which shares the name of the project, to the following structure of three levels and nine teams. The area path hierarchy and configuring each team's area path supports each team's backlog view and rollup of views within the hierarchy. + +![Hierarchical areas support 3 levels of 9 teams](_img/safe-config-teams.png) + +Each team project has a default team. You can configure additional teams for program-level and feature team-level work. And, you can also redefine the default team as the portfolio team that manages epics. + +In this way, all teams can manage their own workload and priorities while clearly understanding how their work supports those epics managed in the portfolio team's backlog. At the same time, the portfolio team can monitor progress of its backlog on their own Kanban board, prioritize the items on their backlog, and view progress across release trains. + +All this might sound complicated, but it actually takes very little configuration to set up the teams and get started. +In order to go from one project with one default team, area, and set of iterations, we'll first configure an area path structure to support the hierarchy of teams we want. Then we'll make sure that the iteration paths support the release structure we want and the program and feature teams to use. Finally, we'll create, configure, and populate the membership of teams. + +You'll need to be a [member of the Project Administrators group](../../accounts/add-users.md) to make these configurations. + +###Create areas to support your team hierarchy + +1. Connect to the team project you want to configure to support SAFe, and use the gear icon ![Settings icon](../_img/icons/gear_icon.png) to open the administration page for the default team. +2. On the **Areas** page, create a child under the top-level area path and name it to correspond to one of the program teams you'll create. + + ![Create child area](_img/safe-add-area-path.png) + +3. Next, create a second area at the same child level, and name it after the second program team. + +4. Under each program area, create a child area for each feature team that will support their respective program team. You should end up with a 3-level area path hierarchy. + + ![Areas page, 9 area paths defined](_img/safe-team-area-paths-added.png) + +###Create iterations to support your release trains and sprints +To track progress towards Releases, create your iteration path structure. Unlike area paths, multiple teams can share the same iteration path structure. Sharing the iteration structure lets multiple teams work in the same sprint cadence towards the same release trains. + +If you already have iterations for your default team, you can rename them. You'll want to create an iteration structure that supports your entire team structure, not just one team. + +1. Under the default iteration, which shares the same name as the project, create a child iteration that will represent your first program increment (PI). Optionally, add a start and end date for the PI, but keep in mind that the iteration will be broken down further into sprints. + + ![Create iterations](_img/safe-create-iterations.png) + +2. Next, create a child iteration for each Sprint within the PI. Set dates for these sprints to correspond your feature teams' cadences. + ![Iterations page, create IP Sprint iteration](_img/safe-view-of-iterations.png) + + +###Create and configure your teams +In this section, we'll show how to configure a hierarchical team structure which maps to the hierarchical area paths we created previously. +This structure maps the following SAFe teams to your Agile tools' teams: +- Portfolio team -> default top-level team, the Fabrikam team +- Program teams -> secondary-level teams, Fiber Suite and Service Suite +- Feature teams -> tertiary-level teams defined under Fiber Suite and Service Suite. +- +If you need more-detailed guidance, see [Portfolio management](portfolio-management.md). + +You'll need to be a [project administrator](../../accounts/add-users.md) to perform these steps. +####Create and configure each Program team + +1. From the Overview page for the team project, create a new team. Make sure that you clear the checkbox for Create an area path with the name of the team. + + ![Create team](_img/safe-create-team.png) + +2. Choose the team from the list, go to the Areas page, and select the check box next to the area path that you previously created for that team. + + ![Areas page, Program team, set default areas](_img/safe-map-team-to-area.png) + +3. Use the context menu to exclude sub-areas. By excluding sub-areas, the team's backlog only includes those items whose Area Path matches the team's default area path. + + ![Areas page for Program team, Exclude sub-areas](_img/safe-exclude-sub-areas-for-fabrikam-fiber-suite.png) + +4. Next, configure the iterations that will be active for the program team. In this example, we have configured three PIs, each with five two-week sprints. Four of the sprints are regular sprints and the last sprint is an Innovation and Planning (IP) sprint. + ![Iterations page, Program team](_img/safe-map-team-iterations.png) + + Because the Fiber Suite program team is concerned with Release Trains, we choose PI 1, 2, and 3, but we don't choose the individual sprints. + +6. Once you've selected which iterations are active for the team, add users to the new team. Ideally, you would add the scrum masters for each feature team, product owners, as well as the Release Train Engineers (RTEs) to the program teams, such as Fiber Suite. + + ![Add team members](_img/safe-add-team-members.png) + +6. If you've more than one team at the program level, repeat steps 1 through 4 for each program team. + + + +####Create and configure each Feature team +Next, we'll create some feature teams to get work done at the third level of the team hierarchy. Each feature team will contribute sprint work that rolls up into the PI. The number of teams you create will depend on the size of your organization. + +1. Create a new team from the administration page for the original team, and name the team. Just like before, make sure you clear the check box next to **Create an area path with the name of the team**. + + ![Create another team](_img/safe-create-another-team.png) + +2. Just as before, choose the team from the list, go to the Areas page, and select the check box next to the area path that you previously created for that team. + + ![Set default area path for Migrate feature team](_img/safe-configure-migrate-team-area-path.png) + +3. Configure iterations for the team, using the PIs and sprints you created earlier. Unlike the program teams, this time select the individual sprints as the working iterations for the feature team. + + ![Migrate team iterations](_img/safe-configure-migrate-team-iterations.png) + +4. Lastly, add the accounts for the developers, testers, and the scrum master for the team. Your Agile tools support assigning a scrum master to multiple teams. The scrum master can track work across multiple teams. + + ![Migrate team members](_img/safe-add-migrate-team-members.png) + +5. Repeat steps 1 through 4 for each feature team in your organization. Make sure that the default area path you configure for the team is sub-area path under its corresponding program-level area path. This ensures rollup from feature teams to program teams. + + +####Configure the Portfolio team +Now that your sub-team structure is configured, we reconfigure the default team to act as the Portfolio team. While this team will continue to have the name of the project, the changes you make to this top-level team will help ensure that it effectively tracks epics across PIs at the highest level. + +1. On the Areas page for the team project, change the settings so that sub-areas are not included. Make sure you choose the team project and not the default team, Fabrikam. + + ![Areas page for Portfolio team, Exclude sub areas](_img/safe-exclude-sub-areas-for-portfolio-team.png) + +2. On the Iterations page, clear the check boxes next to all iterations except for the root level, which cannot be cleared. Because the Portfolio team is only concerned with epics that span PIs, it only uses the root iteration and not the PIs or sprints. Portfolio teams don't work in sprints. + + ![Iterations page, Portfolio team](_img/safe-PMO_Iterations-cleared.png) + +3. Lastly, add and remove users from the Portfolio team appropriate to this level. From the Overview page, choose the default team. + + ![Overview tab, choose default team](_img/safe-overview-teams.png) + + If you're following SAFe, you'll probably want to add portfolio managers, enterprise-level architects, and Release Train Engineers (RTEs) at this level and remove everyone else. + + ![Overview page, Portfolio team members](_img/safe-overview-portfolio-team-members.png) + + +###Update the Area Path for existing work items +For any existing work items to show up on a team's backlog, you must update the Area path of each work item to the team's default area path. You can use the bulk edit feature from your web browser or you can use Excel. + +1. Create a query that contains the work items you want to edit, select the ones you want to edit, and then open the context menu from any one of the selected items. + + ![Query results context menu](_img/safe-bulk-modify-area-paths.png) + +2. Select the area path that corresponds to the team's default area path. + + ![Edit work items](_img/safe-bulk-modify-area-paths-edit-dialog.png) + +3. Bulk save all work items that you modified. + + ![Bulk save edited work items](_img/safe-bulk-modify-area-paths-bulk-save.png) + + For more info on bulk modifying work items, see [Bulk modify work items](../backlogs/bulk-modify-work-items.md). + +###Add epics and map epics to features +You add epics in the same way you add user stories and features. From the Portfolio team's backlog page for epics, add an epic backlog item. + +![Epic backlog, add an epic using quick add panel](_img/safe-add-epics.png) + +Add as many epics as you need. Drag them to reorder them and have them listed in their order of importance. + +![Epic backlog, reorder items](_img/safe-reorder-epics.png) + +The default Business Value for epics is Business, but you can change this to Architectural by opening the form. + +![Epic work item form](_img/safe-epic-form.png) + +You can also add tags to your epics, to help you track the investment themes each epic supports. + +![Epic work item form, add tags](_img/safe-add-tags-to-epic.png) + +Now view your epics on the Kanban board. To get this view, you need to [customize the Kanban columns to rename and add intermediate workflow states](../kanban/add-columns.md). For a description of these states—Funnel, Review, Analysis, Portfolio Backlog, and Implementing (not shown)—see [Business Epic Kanban Abstract](http://scaledagileframework.com/business-epic-kanban/). + +![Epic kanban board with custom columns](_img/safe-kanban-custom-columns.png) + +However, this is not very interesting yet. Nothing is in progress, and you can't drill down to see which features support your epics. You'll want to map existing features to the epics you just created, and map user stories to those features, if they're not already mapped. + +###Map multiple items if you've an existing backlog +Mapping work items is easy using the mapping pane. First, turn on the mapping pane from the features or stories backlog page. Here, we choose the Fiber Suite team and turn on both the mapping pane and the view to see the hierarchy of features mapped to epics. + +![Map features to epics](_img/safe-map-features-to-epics.png) + +Note that if you've already changed the area path of all your features to the appropriate program-level team, the features list will be empty, because the Portfolio team does not own any features! In that case, switch to one of the program teams. + +Drag items from the backlog onto the item you want to associate as a parent. Keep in mind that you can only map features to epics. Similarly, you can only map the third level of backlog item (whether that is user story, backlog item, or requirement) to features. + +Repeat this process at each backlog level until you've created the hierarchy you want. + +![Epics-to-stories view](_img/safe-portfolio-progress-view-epics-to-stories-any-team.png) + +What about features already in progress? They definitely won't appear on the Portfolio team's backlog. They are the responsibility of the program teams, so they appear on that team's backlog. (This is actually a function of the area path set for the work item; a work item will only appear on a team's backlog if you assign it to the area path you created for that team.) You can map them from there. + +You can also [bulk edit work items and manage their hierarchy in Microsoft Excel](../office/bulk-add-modify-work-items-excel.md). + +Since an important aspect of SAFe is to map work to business or architecture goals, you'll want to make sure to set the Value Area=Architectural for any feature mapped to an architecture epic. (Because the default choice is Business, you don't have to change the field for any item that supports a business epic.) You can also add tags to track the investment. + +The same principles apply to user stories in progress. You can map them to features, change the requirement type to Architecture for work that you do to support architectural epics, and add tags for tracking themes. + +![User Story work item form](_img/safe-user-story-new-form.png) + + +##Related notes + +There's no customization required to implement SAFe when working in VSTS or an on-premises TFS 2015 deployment. However, if you're working with TFS 2013, see the [Upgrade/Publish TFS 2013 Process Templates with PowerShell: blog post by Gordon Beeming](http://31og.com/post/upgradepublish-tfs-2013-process-templates-with-powershell). This post provides a PowerShell script which you can use to apply the customizations documented in the TFS 2013 version of this article. + + +###Resources +Resources mentioned earlier in this article and a few more are provided here for convenient reference. +- SAFe enabled processes: Link to a download of the three Agile tool processes: [Scrum](../guidance/scrum-process.md), [Agile](../guidance/agile-process.md), and [CMMI](../guidance/cmmi-process.md). + +- [Scaled Agile Framework](http://scaledagileframework.com/): SAFe resource site. +- [SAFe in 7 minutes](http://www.youtube.com/watch?feature=player_embedded&v=RXzurBazN-I): video from Inbar Oren, the Lean Samurai (also viewable from the [Scaled Agile Framework Foundations](http://scaledagileframework.com/foundations/)). +- [Scaling Agile and SAFe Metrics with TFS](http://www.incyclesoftware.com/2014/08/scaling-agile-and-safe-metrics-with-tfs/): Blog post that illustrates a SQL Server report developed by InCycle to illustrate how TFS can be used to support scaled agile or SAFe. +- Agile Portfolio Management: Using TFS to support backlogs across multiple teams : white paper that shows how to configure TFS to support multiple teams and multiple backlogs. +- [Support rollup of work and other fields](../reference/support-rollup-of-work-and-other-fields.md): Describes how to configure TFS to support rollup, the summed values of select fields for all child work items of a parent. Because TFS supports multiple levels of nesting, when you perform rollup, you want to make sure you don't double-count values. +- [Out of the box Reports (SQL Server Reporting Services)](../../report/sql-reports/reporting-services-reports.md): Summarizes the reports TFS provides to monitor progress and code quality. +- [Synchronize Team Foundation Server with Project Server](../tfs-ps-sync/synchronize-tfs-project-server.md): Describes how project managers and development teams can use the tools that they prefer and share information transparently by enabling data to flow from work items in TFS to tasks in enterprise project plans in Project Server. +- [Track your work when assigned to two or more teams](capacity-planning.md): Shows how a developer or tester can track work when they support more than one feature team. + +###About the authors +This article has been updated from the previous white paper developed in collaboration with the following authors: +- Gordon Beeming is a Software Developer at Derivco in the sunny city of Durban, South Africa. He spends most his time hacking away at the keyboard in Visual Studio or with his family relaxing. His blog is at [31og.com](http://31og.com) and you can follow him on Twitter at [twitter.com/gordonbeeming](http://twitter.com/gordonbeeming). +- Brian Blackman is a principal consultant with Microsoft Premier Developer, focusing on affecting ISV partners and Enterprises success in engineering and the marketplace. He has an MBA, and is a CSM, CSP, MCSD (C++), and MCTS and is a Visual Studio ALM Ranger. When he is not Ruck Mastering and contributing to Visual Studio ALM Ranger projects, he spends his time writing code, creating and delivering workshops, and consulting in various concentrations, especially helping organizations in their quest for business agility. +- Gregg Boer is a principal program manager at Microsoft. Gregg is the product owner for the Agile management experience provided by VSTS and on-premises TFS. +- Kathryn Elliott is a senior technical writer at Microsoft. +- Susan Ferrell is a senior technical writer and a Visual Studio ALM Ranger. +- Willy-Peter Schaub is a program manager with the Visual Studio ALM Rangers at the Microsoft Canada Development Center. Since the mid-'80s, he has been striving for simplicity and maintainability in software engineering. His blog is at [blogs.msdn.com/b/willy-peter_schaub](http://blogs.msdn.com/b/willy-peter_schaub) and you can follow him on Twitter at [twitter.com/wpschaub](http://twitter.com/wpschaub). +- Special thanks to the following technical experts for reviewing this article: Mike Douglas (independent consultant, ALM Ranger), Richard Hundhausen (independent consultant, ALM Ranger) and Bill Heys (independent consultant, ALM Ranger), Hosam Kamel (technology solution professional for Microsoft and ALM Ranger). + + diff --git a/docs/work/scale/set-team-defaults.md b/docs/work/scale/set-team-defaults.md new file mode 100644 index 00000000000..dd417a94da1 --- /dev/null +++ b/docs/work/scale/set-team-defaults.md @@ -0,0 +1,174 @@ +--- +title: Set team defaults | VSTS & TFS +description: Configure the default area and iteration paths/sprints for a team when working in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 3CEBA118-34EB-4277-B810-418FEC56C860 +ms.manager: douge +ms.author: kaelli +ms.date: 06/28/2017 +--- + + +# Set team defaults + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +Each team has access to a number of Agile tools as described in [About teams and Agile tools](../about-teams-and-settings.md). Each tool references the team's default area path(s). Several tools reference the team's default and active iteration paths or sprints. Most teams choose one area path and several iteration paths to support their work tracking activities. However, to support other scenarios, it's possible for teams to choose several area paths to appear on their backlogs and boards. + +Prior to setting team defaults, [add the teams](multiple-teams.md) you want and [schedule your shared sprint schedule](../scrum/define-sprints.md). Optionally, [add area paths](../customize/set-area-paths.md) you want to use to group work items. + +<a id="default_path"> </a> +## Backlog iteration versus default iteration + +For TFS 2015 and earlier versions, the default iteration is the same as the backlog iteration. The one value selected both filters items that appear on the team's backlogs and boards, and is assigned to work items created from the team context. + +For VSTS, teams can now set a default iteration different from the backlog iteration. The backlog iteration determines which items appear on the team's backlogs and boards. And, the default iteration determines what value is assigned to work items created from the team context. + +For both platforms, all work items that you create from your team context are automatically assigned both the team's default area path and default iteration path. + +You navigate to your team context from the top navigation bar. + +<img src="../_shared/_img/switch-team-project-2.png" alt="Choose another team from the team project menu" style="border: 2px solid #C3C3C3;" /> + +## Open the admin context for your team + +You set team defaults from the team admin context. + +[!INCLUDE [temp](../_shared/learn-about-new-nav-experience.md)] + +From a web browser, open the web portal administrative context for your team. + +<img src="_img/wit-templates-open-team-admin-context.png" alt="Open team admin context" style="border: 2px solid #C3C3C3;" /> + +If you're not a team administrator, [get added as one](../scale/add-team-administrator.md). Only team or project administrators can change team settings. + +<a id="team-area-paths"> </a> +## Set team default area path(s) + +All work items assigned to the area paths selected for a team appear on the backlogs and boards for that team. + +- From VSTS, you can select one or more area paths and optionally include their sub-area paths. +- From TFS, you can select a single area path, and optionally include their sub-area paths. +The default area path determines the default area path assigned to work items that are created from the team context. + +Choose to include sub-area paths when you want to support rollup views of work performed across several teams or areas. + +> [!IMPORTANT] +> Work items that appear on more then one team's Kanban board can yield query results that don't meet your expectations. Because each team can customize the Kanban board [columns](../kanban/add-columns.md) and [swimlanes](../kanban/expedite-work.md), the values assigned to work items which appear on different boards may not be the same. The primary work around for this issue is to maintain single ownership of work items by team area path. + + +### VSTS and TFS 2017 and later versions + +1. Open the Work, Areas admin page for the team context. + + Here, we navigate to the Fabrikam Fiber Team, the default team for the team project. + + <img src="_img/stdefaults-open-team-work-area-page.png" alt="Work, Area page for team, VSTS platform" style="border: 2px solid #C3C3C3;" /> + +<a id="default-iteration"> </a> +2. Choose the area path(s) to be active for each team. In general, feature teams set a single area path as their default. + + <img src="_img/stdefaults-add-area-paths.png" alt="Work, Iterations page for team, VSTS platform" style="border: 2px solid #C3C3C3;" /> + + In this instance, we choose to activate all three sub-area paths for the team project. This allows the management team to track progress across all three teams. + + <img src="_img/stdefaults-set-team-area-paths-management-team-team-services-list.png" alt="Multiple area paths assigned to team, VSTS platform" style="border: 2px solid #C3C3C3;" /> + +3. When you've finished, refresh the product backlog page for the team, and you'll see those work items assigned to the team. Add Area Path to the columns shown to see the assignments made to work items. + + <img src="_img/stdefaults-backlog-management-team-team-services-list.png" alt="Product backlog of team with multiple area paths assigned, VSTS platform" style="border: 2px solid #C3C3C3;" /> + +### For TFS 2015 and earlier versions + +1. Open the Areas admin page for the team context. + + Here, we navigate to the Web team. The checked box indicates the area paths selected for the team. To exclude sub-areas, select the option from the area path context menu. + + <img src="_img/stdefaults-open-team-area-page-tfs.png" alt="Work, Area page forWeb team, VSTS platform" style="border: 2px solid #C3C3C3;" /> + +2. Refresh the product backlog page for the team, and you'll see only those work items assigned to the Fabrikam Fiber\Web area path. + + <img src="_img/stdefaults-backlog-web-team-list.png" alt="Backlog for Web team" style="border: 2px solid #C3C3C3;" /> + +<a id="activate"> </a> +## Select team sprints and default iteration path + +You [define sprints for the team project](../scrum/define-sprints.md) and then activate them for each team. You assign the default iteration to use when creating new work items. + +You activate sprints for each team from the admin pages for each team context. The steps differ slightly depending on your platform. + +<a id="activate-team-services"> </a> +### For VSTS and TFS 2017 and later versions + +1. Open the Work, Iterations page for the team context. + + Here, we navigate to the Fabrikam Fiber Team. + + <img src="../scrum/_img/dsprints-team-work-iterations-page.png" alt="Work, Iterations page for team, VSTS platform" style="border: 2px solid #C3C3C3;" /> +<a id="set-backlog-iteration"> </a> +2. **Backlog iteration**. Only work items assigned to an iteration equal to or under this backlog iteration appear in the team's backlogs and boards. + + <img src="_img/stdefaults-team-backlog-iteration.png" alt="Work, Iterations page for team, set team backlog iteration for backlogs and boards" style="border: 2px solid #C3C3C3;" /> + + Also, all work items added through a team's backlog or board are assigned the backlog iteration. + +3. **Default iteration**. The default iteration defines the iteration used when a work item is created from the team dashboard (new work item widget) and queries page. You can use an explicit value or use @CurrentIteration to assign new work items to the team's current iteration. This is the same macro used in [queries to list work items assigned to the currently active iteration assigned to the team](../track/query-by-date-or-current-iteration.md#current-iteration). + + For example, you might want all new work items to be added to a future iteration path which you use to triage and assign to specific sprints at periodic intervals. + + <img src="_img/stdefaults-team-default-iteration.png" alt="Work, Iterations page for team, set team default for new work items" style="border: 2px solid #C3C3C3;" /> + +4. **Active sprints**. Add an iteration for each sprint backlog you want active for the team. Add each sprint, one by one, by selecting it from the menu. + + <img src="../scrum/_img/dsprints-add-sprints-to-team-iterations-page.png" alt="Work, Iterations page for team, select sprint to activate, VSTS platform" style="border: 2px solid #C3C3C3;" /> + + When you're done, you should see a list of sprints, similar to the following. + + <img src="../scrum/_img/dsprints-selected-active-sprints.png" alt="Work, Iterations page for team, activates sprint list, VSTS platform" style="border: 2px solid #C3C3C3;" /> + + If you don't see the sprints you need, or the dates aren't set, then [return to the team project admin context and define them there](../customize/set-iteration-paths-sprints.md#define-sprints-team-services). + +3. To see the newly activated sprint backlogs, refresh your team's [product backlog page](../backlogs/create-your-backlog.md). + +<a id="activate-sprints-tfs"> </a> +### For TFS 2015 and earlier versions + +1. Open the Iterations page for the team context. + + Here we open the Iterations page for the Web team. + + <img src="_img/stdefaults-open-team-admin-iteration-tfs.png" alt="Open team admin iterations page" style="border: 2px solid #C3C3C3;" /> + + If your team isn't listed in the navigation row, open the Overview tab, select your team, and then return to the Iterations tab. + +2. **Default iteration**. Only work items assigned to an iteration equal to or under the default iteration appear in the team's backlogs and boards. Also, the default iteration defines the iteration used when a work item is created from the team dashboard (new work item widget) and queries page. + + Open the context menu for the iteration path you want. + + Here we set the P1 1 path. Only child iterations of the backlog iteration can be active for a team. + + <img src="_img/stdefaults-set-default-iteration-tfs.png" alt="Set team default iteration path" style="border: 2px solid #C3C3C3;" /> + + This path determines which work items appear in your team backlogs and boards, and [the default assigned to](#default_path) work items created from any area under your team's context. + +3. **Active sprints**. Check each box under the default iteration that you want active for the team. + + Here, the Fabrikam Fiber Web team activates Sprints 1 through 7. + + <img src="_img/stdefaults-team-active-sprints-tfs.png" alt="Select team active sprints" style="border: 2px solid #C3C3C3;" /> + + Check boxes only appear for sprints defined under the default iteration path. + +4. To see the newly activated sprint backlogs, refresh your team's [product backlog page](../backlogs/create-your-backlog.md). + +##Related notes + +- [Schedule sprints](../scrum/define-sprints.md) +- [Customize area and iteration paths](../customize/set-area-paths.md) +- [Query by date or current iteration](../track/query-by-date-or-current-iteration.md) +- [Multiple teams](multiple-teams.md) +- [Configure team settings](manage-team-assets.md) +- [Portfolio management](portfolio-management.md) + + diff --git a/docs/work/scale/team-administrator-permissions.md b/docs/work/scale/team-administrator-permissions.md new file mode 100644 index 00000000000..fc715acce15 --- /dev/null +++ b/docs/work/scale/team-administrator-permissions.md @@ -0,0 +1,88 @@ +--- +title: Team administrator permissions | VSTS & TFS +description: Understand what permissions are granted to team administrators +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/15/2017 +--- + +# Permissions granted to the team administrator role + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +While most permissions are governed by belonging to a security group or defined at the object level, team settings are managed by the team administrator role. + +For each team that you add, you can assign one or more team members as administrators. The team admin role isn't a group with a set of defined permissions. Instead, the team admin role is tasked with managing and configuring [team assets](../about-teams-and-settings.md). + +In addition to team administrators, all members of the Project Administrators and Project Collection Administrators groups can manage settings for all teams as well as add team administors. + +## Set team defaults + +Team administrators can select the area paths and iteration paths associated with their team. These settings affect a number of Agile tools available to the team. + +These include the following associations made for each team: + +- The default area path +- The area path(s) +- The default iteration path +- The selected iteration paths + +For details, see [Set team defaults](set-team-defaults.md). + +## Enable team backlogs and configure how bugs are managed on backlogs and boards + +Team administrators can choose which backlog levels are active for a team. For example, a feature team may choose to show only the product backlog and a management team may choose to show only the feature and epic backlogs. + +Also, they can choose whether bugs are treated similar to user stories and requirements or as tasks. + +For details, see these topics: +- [Select backlog levels for your team](../customize/select-backlog-navigation-levels.md) +- [Set your team's preferences for tracking bugs](../customize/show-bugs-on-backlog.md). + +## Customize Kanban boards + +Team administrators can fully customize the team's Kanban boards associate with the product and portfolio backlogs. This includes the following elements: + * [Cards: Fields](../customize/customize-cards.md#kanban-board) + * [Cards: Styles](../customize/customize-cards.md#style-rule) + * [Cards: Tag colors](../customize/customize-cards.md#color-tags) + * [Cards: Annotations](../customize/customize-cards.md#annotations) + * [Cards: Tests](../customize/customize-cards.md#tests) + * [Board: Columns](..//kanban/add-columns.md) + * [Board: WIP limits](../kanban/wip-limits.md) + * [Board: Split columns](../kanban/split-columns.md) + * [Board: Swimlanes](../kanban/expedite-work.md) + * [Board: Card reordering](../customize/reorder-cards.md) + * [Board: Definition of Done](../kanban/definition-of-done.md) + * [Charts: Cumulative flow](../../report/guidance/cumulative-flow.md#configure) + +## Add and manage team dashboards + +Team administrators can add, configure, and manage permissions (VSTS and TFS 2017) for team dashboards. For details, see [Add and manage dashboards](../../report/dashboard-permissions.md#set-permissions). + + +## Set working days off + +Sprint planning and tracking tools automatically consider days off when calculating capacity and sprint burndown. Team admins can choose which days are non-working days through the team's Settings dialog. For details, see [Set working days](../customize/set-working-days.md). + + +## Manage team alerts + +Team administrators can add and modify alerts so that the team can receive email notifications as changes occur to work items, code reviews, source control files, and builds. For details, see [Manage team alerts](../../collaborate/manage-team-notifications.md). + +> [!NOTE] +> There is no UI associated with managing alert permissions. Instead, you can use **TFSSecurity** to manage alerts in TFS. + + +<a id="team-rooms" /> +## Create and manage team rooms + +Team administrators can add users and events to team rooms, and add team rooms. Team rooms are chat rooms limited to team members. For details, see [Collaborate in a team room](../../collaborate/collaborate-in-a-team-room.md). + +## Related notes + +- [Permissions and access for work tracking](../permissions-access-work-tracking.md) +- [Add teams and team members](multiple-teams.md) +- [Add a team administrator](add-team-administrator.md) \ No newline at end of file diff --git a/docs/work/scale/toc.yml b/docs/work/scale/toc.yml new file mode 100644 index 00000000000..88aeb3b44e6 --- /dev/null +++ b/docs/work/scale/toc.yml @@ -0,0 +1,64 @@ +- name: Agile at Scale + href: index.md +- name: Overview + items: + - name: "About teams & Agile tools" + href: /vsts/work/about-teams-and-settings?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json +- name: Tutorials + items: + - name: Manage portfolios + href: portfolio-management.md + - name: Review team delivery plans + href: /vsts/work/scale/review-team-plans?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json + - name: Set team favorites + href: /vsts/collaborate/set-favorites?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json +- name: Concepts + items: + - name: Visibility across teams + href: visibility-across-teams.md + - name: Agile culture + href: agile-culture.md + - name: Practices that scale + href: practices-that-scale.md + - name: Team administrator role and permissions + href: team-administrator-permissions.md +- name: How-to Guides + items: + - name: Scaled Agile Framework + href: scaled-agile-framework.md + - name: Configure team settings + href: manage-team-assets.md + items: + - name: Set team defaults + href: set-team-defaults.md + - name: Select backlog levels + href: /vsts/work/customize/select-backlog-navigation-levels?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json + - name: "Show bugs on backlogs & boards" + href: /vsts/work/customize/show-bugs-on-backlog?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json + - name: Set working days + href: /vsts/work/customize/set-working-days?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json + - name: Set team favorites + href: /vsts/collaborate/set-favorites?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json + - name: Manage team notifications + href: /vsts/collaborate/manage-team-notifications?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json + - name: Switch project or team focus + href: /vsts/work/how-to/switch-team-context-work?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json + - name: "Manage permissions & access" + href: /vsts/work/how-to/set-permissions-access-work-tracking?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json +- name: Reference + items: + - name: "Permissions & access for work tracking" + href: /vsts/work/permissions-access-work-tracking?toc=/vsts/work/scale/toc.json&bc=/vsts/work/scale/breadcrumb/toc.json +- name: Resources + items: + - name: "Scale & Configure Teams" + href: ../../teams/index.md + - name: Customization + href: ../customize/index.md + - name: Agile culture + href: https://www.visualstudio.com/learn/agile-culture/ + - name: Scale Agile to large teams + href: https://www.visualstudio.com/learn/scale-agile-large-teams/ + - name: Creating productive teams + href: https://www.visualstudio.com/learn/productive-teams/ + diff --git a/docs/work/scale/visibility-across-teams.md b/docs/work/scale/visibility-across-teams.md new file mode 100644 index 00000000000..c8cf850ae71 --- /dev/null +++ b/docs/work/scale/visibility-across-teams.md @@ -0,0 +1,213 @@ +--- +title: Visibility across teams | VSTS & TFS +description: Determine which methods best support your ability to monitor status and progress across several teams in Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: C9F129A7-97F9-4C1A-91E2-F59D6EFABE2E +ms.manager: douge +ms.author: kaelli +ms.date: 07/12/2017 +--- + + +# Visibility across teams + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +Agile tools provide each team a wealth of ways to gain visibility into their work—to manage priorities and status and to monitor progress and trends. However, how do you gain visibility across several teams? What tools should you use? + +You have three main ways to track progress across several teams. + +- Management teams can define [Delivery Plans](#plans) that provide visibility into the deliverables several teams have scheduled +- Each management team can use their Agile tools, and in particular [portfolio backlogs](#portfolio-backlogs), to gain visibility of the feature teams defined under their area path +- Management teams can create [dashboards](#dashboards) that monitor status, progress, and trends across several teams. + +For an overview of all team tools, see [Configure team settings](manage-team-assets.md). + +<a id="plans"> </a> +## Delivery Plans support a view of team backlogs on a calendar timeline + +With a Delivery Plan, you gain a tailor-made view across several teams and their development backlogs—stories, features, or epics. You can use these views to drive alignment across teams by overlaying several backlogs onto your delivery schedule. + +> [!NOTE] +> **Feature availability**: Delivery Plans, a [Visual Studio Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-plans), is available for VSTS and TFS 2017.2 and later versions. All users with [basic access](../../security/change-access-levels.md) can view, add, and configure Delivery Plans. Stakeholders, however, don’t have access to Delivery Plans. + +When you configure a Delivery Plan, you select the teams and backlog levels of interest. You can then interact with the plan to update it and drill into more details. To learn more about Delivery Plans, see [Review team plans](review-team-plans.md). + +<img src="_img/plans_move1.png" alt="Interactive plan elements" style="border: 2px solid #C3C3C3;" /> + +<a id="portfolio-backlogs"> </a> +## Use portfolio backlogs to track features and epics + +The first level of gaining visibility across several teams is to configure your teams and backlogs to support the views you want. + +We recommend that you structure your teams as follows: + +- Add a management team for a group of feature teams; these teams own epics and turn on only the Epic portfolio backlog level +- Add feature teams to manage features, stories and tasks, and turn on the stories and features backlog levels + +The management team creates the epics, and then they or their feature teams break the epics down into features and then [map their features to the epics](../backlogs/organize-backlog.md) on the management backlog. + +>[!TIP] +>By breaking down large goals, epics, scenarios, or features into smaller ones, teams can make better estimates and identify risks and dependencies. + +Limiting the backlog levels for each team—Epics for management teams and Features and Stories for feature teams—helps each team to stay focused on monitoring the progress of their work. For details on managing team backlog levels, see [Select backlog navigation levels](../customize/select-backlog-navigation-levels.md). + +With the multi-team portfolio backlog view, you can: +- Review priorities with your team and reorder features to support current priorities +- You can drill down to see the status of each feature's child user stories or PBIs +- Filter the backlog based on keyword or tag to focus on specific teams or categorized items +- (Optional) You can use the [mapping feature](../backlogs/organize-backlog.md) to map user stories or PBIs to features + +Management teams can drill down from their portfolio backlog to see how epics are progressing. + +<img src="_img/visibility-management-team-epics.png" alt="Management teams, Epic portfolio backlog expanded" style="border: 2px solid #C3C3C3;" /> + +And, feature teams can turn on Show parents on their backlogs to see context and even those stories + +<img src="_img/visibility-feature-team-backlog-show-parents.png" alt="Feature teams, Portfolio backlog with show parents" style="border: 2px solid #C3C3C3;" /> + +>[!TIP] +>When estimating stories or product backlog items, start with one story point per person per day. Feature teams can later calibrate and adjust those estimates as needed. For example, the [velocity](../../report/guidance/team-velocity.md) of a seasoned team will be higher than a new team. The size of the work stays the same, but a seasoned team can just deliver faster. + +To learn more about this configuration, see [Portfolio management](portfolio-management.md), [Multiple teams](multiple-teams.md), and [Organize your backlog](../backlogs/organize-backlog.md). + + + + +<a id="dashboards"> </a> +## Add management dashboards with multi-team views + +A second method for gaining visibility across teams is to define multi-team focused dashboards that let you view progress, status, and trends. You do this primarily by defining queries that either capture the progress of a single team or several teams. You can then create charts and view trends for each team or for several teams. + +The two areas of most interest to management teams is project health and bug debt. The widget catalog provides 10+ widgets you can add to a dashboard to track the status, progress, and health of your project and teams. Also, you can find additional widgets in the [Visual Studio Marketplace](https://marketplace.visualstudio.com/search?term=widgets&target=VSTS&sortBy=Relevance). + +For example, here we've added three query-based charts, one for each team, to a dashboard that shows the active and resolved bugs over the previous 4 weeks. + +<img src="_img/visibility-bug-debt-email-team.png" alt="Bug debt, Email team" style="border: 2px solid #C3C3C3;" /> <img src="_img/visibility-bug-debt-voice-team.png" alt="Bug debt, Voice team" style="border: 2px solid #C3C3C3;" /> <img src="_img/visibility-bug-debt-web-team.png" alt="Bug debt, Web team" style="border: 2px solid #C3C3C3;" /> + + +When defining multi-team dashboards, consider the following: +- What are you wanting to learn and how will it drive your organization's actions +- What time frame is of interest. + +Review [Agile culture](agile-culture.md) and [Practices that scale](practices-that-scale.md) for guidance on team autonomy and organizational alignment. + + +#### Project health and progress against goals dashboard +Use the [Query Results widget](../../report/widget-catalog.md#query-results-widget) to provide a list of features by state: + +- Completed features (Done or Closed) +- New features (New or Proposed) +- Features being actively worked (In Progress or Active) + +Use the [Chart for work items widget](../../report/widget-catalog.md#chart-wit-widget) to add query-based charts. To learn more about creating query-based charts, see [Charts](../../report/charts.md). + + +<!---TIPS +consider the time frame you want to monitor +snapshot or trends +what's shipping when? +Track bug debt, progress +Active bugs +Stale bugs +Hi priority bugs +Triage bugs +Active bug trends +- +--> + +#### Technical debt, bug debt and activity dashboard +Another measure of project health and the health of the teams is to monitor bug activity and bug debt. Consider the charts you can create that will help you answer these questions: + +- Are bugs getting fixed? at a rate that's acceptable? +- How stale are bugs? +- Is the bug debt per team being maintained? +- Is the ratio of high priority bugs being kept within organizational goals? + +For tips on creating queries based on counts or numeric fields, see [Query by numeric field](../track/query-numeric.md). + + +<!--- +## Use Power BI to gain visibility across team projects +--> + + +## Related notes + +As you can see, there are a number of ways you can monitor progress and trends across several teams. The methods you choose will depend on your focus and organizational goals. + +Here are some additional topics that address working with multiple teams: + +- [Backlogs, boards, and plans](../backlogs-boards-plans.md) +- [Review team plans](review-team-plans.md) +- [Multiple teams](multiple-teams.md) +- [Portfolio management](portfolio-management.md) +- [Configure team settings](manage-team-assets.md) +- [Practices that scale](practices-that-scale.md) + + +### Limitations of multi-team Kanban board views + +While the management teams you configure can use the Kanban board to monitor feature progress by turning on the Features backlog, there are limitations inherent within these views. Even if the management team and the feature teams configure their Feature [Kanban board columns](../kanban/add-columns.md) with identical workflow mapping, updating the Features on one team's Kanban board won't be reflected on another team's Kanban board. + Only when the work item state changes does the card column reflect the same on all boards. + +>[!IMPORTANT] +>Work items that appear on more then one team's Kanban board can yield query results that don't meet your expectations. Because each team can customize the Kanban board columns and swimlanes, the values assigned to work items which appear on different boards may not be the same. The primary work around for this issue is to maintain single ownership of work items by [team area path](../scale/set-team-defaults.md). Another option is to add custom workflow states which all teams can use. FOr details, see [Customize your work tracking experience](../customize/customize-work.md).</blockquote> + +<!--- +![Multi-team Kanban board view](_img/visibility-multi-team-kanban-board-features.png) + +With the multi-team Kanban board view, you can: +- View and update the status of work items +- Drill down to see the status of child user stories or PBIs +- [Filter the board by keyword or select fields](../how-to/filter-backlog-or-board.md) to view items by feature team, feature owner, tag, or expected delivery date +- Monitor the [cumulative flow](../../report/guidance/cumulative-flow.md) of all features being worked on by your teams +- Organize features into swimlanes to track work that you want to expedite + + + + +### Rollup of estimates and remaining work across multiple teams + +Many project managers are interested in getting numeric rollup of estimates—Story Points or Effort— or the Remaining Work field. Rollup provides summed values of select fields for all child work items of a parent. + +Natively, VSTS and TFS provide rollup of Remaining Work for tasks on the task board. + +![Rollup of remaining work](_img/visibility-rollup-remaining-work.png) + +To learn about other methods available to you to support rollup, see [Support rollup of work and other fields](https://msdn.microsoft.com/library/dn217871.aspx). + +Waterfall - corresponding method with Project and Project Professional +Dashboards, and suggestions for dashboard development (drawing from how Agile team uses dashboards) +Plans - for visibility across time and teams +Account pages - quick access to your work + +Progress against an agreed upon goal +Issues and Risks +Customer value prop +Key metrics and how they are changing + Velocity + Bug debt trends + +Overall project health +Agile – Team's Velocity any changes over time +Waterfall – completeness of milestone delivery +Dependencies status +Different metrics than VP – code coverage, % complete, burndown +Code coverage +% Complete +Burndown + +For example, a manager with five teams tracks the features across teams using the Features Kanban board. Each team tracks and prioritizes their user stories using their own backlogs and boards. + +To accomplish this, the following configurations are made: +6 teams are defined, one for each feature team and one for the management team +The management team configures its backlogs to only view Features and Epics +Feature teams configure their backlogs to view User Stories and Features + +This configuration supports management's ability to monitor progress across the five teams at the level they need to monitor, and allow each individual feature team to stay focused on their product backlog of user stories. + +You can replicate this further for program managers who want to monitor progress across broad initiatives by setting up a program management team that monitors Epics. +--> + diff --git a/docs/work/scrum/_img/ALM_DS_CapacityBars_S.png b/docs/work/scrum/_img/ALM_DS_CapacityBars_S.png new file mode 100644 index 00000000000..696642672b4 Binary files /dev/null and b/docs/work/scrum/_img/ALM_DS_CapacityBars_S.png differ diff --git a/docs/work/scrum/_img/ALM_DS_Forecast_Chrt_S.png b/docs/work/scrum/_img/ALM_DS_Forecast_Chrt_S.png new file mode 100644 index 00000000000..c380c144eeb Binary files /dev/null and b/docs/work/scrum/_img/ALM_DS_Forecast_Chrt_S.png differ diff --git a/docs/work/scrum/_img/ALM_DS_PastSprints.png b/docs/work/scrum/_img/ALM_DS_PastSprints.png new file mode 100644 index 00000000000..05fe4d37a5e Binary files /dev/null and b/docs/work/scrum/_img/ALM_DS_PastSprints.png differ diff --git a/docs/work/scrum/_img/ALM_DS_SprntBD_Chrt_S.png b/docs/work/scrum/_img/ALM_DS_SprntBD_Chrt_S.png new file mode 100644 index 00000000000..f7e903b050a Binary files /dev/null and b/docs/work/scrum/_img/ALM_DS_SprntBD_Chrt_S.png differ diff --git a/docs/work/scrum/_img/ALM_DS_Task_board_S.png b/docs/work/scrum/_img/ALM_DS_Task_board_S.png new file mode 100644 index 00000000000..4e95e5c2e4b Binary files /dev/null and b/docs/work/scrum/_img/ALM_DS_Task_board_S.png differ diff --git a/docs/work/scrum/_img/ALM_DS_Velocity_Chrt_S.png b/docs/work/scrum/_img/ALM_DS_Velocity_Chrt_S.png new file mode 100644 index 00000000000..15cf779334f Binary files /dev/null and b/docs/work/scrum/_img/ALM_DS_Velocity_Chrt_S.png differ diff --git a/docs/work/scrum/_img/ALM_OB_ReparentAnItem.png b/docs/work/scrum/_img/ALM_OB_ReparentAnItem.png new file mode 100644 index 00000000000..72cc2323ea2 Binary files /dev/null and b/docs/work/scrum/_img/ALM_OB_ReparentAnItem.png differ diff --git a/docs/work/scrum/_img/ALM_SB_Chart_S1_225.png b/docs/work/scrum/_img/ALM_SB_Chart_S1_225.png new file mode 100644 index 00000000000..85fdbf72b23 Binary files /dev/null and b/docs/work/scrum/_img/ALM_SB_Chart_S1_225.png differ diff --git a/docs/work/scrum/_img/ALM_SB_Chart_S2_225.png b/docs/work/scrum/_img/ALM_SB_Chart_S2_225.png new file mode 100644 index 00000000000..4e305d3d489 Binary files /dev/null and b/docs/work/scrum/_img/ALM_SB_Chart_S2_225.png differ diff --git a/docs/work/scrum/_img/ALM_SB_Chart_S3_225.png b/docs/work/scrum/_img/ALM_SB_Chart_S3_225.png new file mode 100644 index 00000000000..786e8f5ac97 Binary files /dev/null and b/docs/work/scrum/_img/ALM_SB_Chart_S3_225.png differ diff --git a/docs/work/scrum/_img/ALM_SB_IntroHealthyChart.png b/docs/work/scrum/_img/ALM_SB_IntroHealthyChart.png new file mode 100644 index 00000000000..b34fab6f7be Binary files /dev/null and b/docs/work/scrum/_img/ALM_SB_IntroHealthyChart.png differ diff --git a/docs/work/scrum/_img/ALM_SB_RiskMitigation.png b/docs/work/scrum/_img/ALM_SB_RiskMitigation.png new file mode 100644 index 00000000000..b4b192ccb7c Binary files /dev/null and b/docs/work/scrum/_img/ALM_SB_RiskMitigation.png differ diff --git a/docs/work/scrum/_img/ALM_SB_ScopeCreep_75.png b/docs/work/scrum/_img/ALM_SB_ScopeCreep_75.png new file mode 100644 index 00000000000..adb4dac534b Binary files /dev/null and b/docs/work/scrum/_img/ALM_SB_ScopeCreep_75.png differ diff --git a/docs/work/scrum/_img/ALM_SCRM_IntroChart.png b/docs/work/scrum/_img/ALM_SCRM_IntroChart.png new file mode 100644 index 00000000000..8a517a58a06 Binary files /dev/null and b/docs/work/scrum/_img/ALM_SCRM_IntroChart.png differ diff --git a/docs/work/scrum/_img/ALM_TB_GRP_ItemsAll.png b/docs/work/scrum/_img/ALM_TB_GRP_ItemsAll.png new file mode 100644 index 00000000000..288ecdaf911 Binary files /dev/null and b/docs/work/scrum/_img/ALM_TB_GRP_ItemsAll.png differ diff --git a/docs/work/scrum/_img/ALM_TB_GRP_Items_CC.png b/docs/work/scrum/_img/ALM_TB_GRP_Items_CC.png new file mode 100644 index 00000000000..54a7fdce06f Binary files /dev/null and b/docs/work/scrum/_img/ALM_TB_GRP_Items_CC.png differ diff --git a/docs/work/scrum/_img/ALM_TB_GRP_People_All.png b/docs/work/scrum/_img/ALM_TB_GRP_People_All.png new file mode 100644 index 00000000000..ffb9a0a9546 Binary files /dev/null and b/docs/work/scrum/_img/ALM_TB_GRP_People_All.png differ diff --git a/docs/work/scrum/_img/ALM_TB_Intro.png b/docs/work/scrum/_img/ALM_TB_Intro.png new file mode 100644 index 00000000000..ce42bc20356 Binary files /dev/null and b/docs/work/scrum/_img/ALM_TB_Intro.png differ diff --git a/docs/work/scrum/_img/ALM_TB_Move_To_Done.png b/docs/work/scrum/_img/ALM_TB_Move_To_Done.png new file mode 100644 index 00000000000..ab6b8611b37 Binary files /dev/null and b/docs/work/scrum/_img/ALM_TB_Move_To_Done.png differ diff --git a/docs/work/scrum/_img/ALM_TB_UnparentedTasks_CO.png b/docs/work/scrum/_img/ALM_TB_UnparentedTasks_CO.png new file mode 100644 index 00000000000..3f2c70e23da Binary files /dev/null and b/docs/work/scrum/_img/ALM_TB_UnparentedTasks_CO.png differ diff --git a/docs/work/scrum/_img/ALM_TB_UpdateRWork.png b/docs/work/scrum/_img/ALM_TB_UpdateRWork.png new file mode 100644 index 00000000000..1bf71de51af Binary files /dev/null and b/docs/work/scrum/_img/ALM_TB_UpdateRWork.png differ diff --git a/docs/work/scrum/_img/ALM_VF_Forecast_1.png b/docs/work/scrum/_img/ALM_VF_Forecast_1.png new file mode 100644 index 00000000000..930bb20654f Binary files /dev/null and b/docs/work/scrum/_img/ALM_VF_Forecast_1.png differ diff --git a/docs/work/scrum/_img/ALM_VF_VelocityChart.png b/docs/work/scrum/_img/ALM_VF_VelocityChart.png new file mode 100644 index 00000000000..38d8eef5d36 Binary files /dev/null and b/docs/work/scrum/_img/ALM_VF_VelocityChart.png differ diff --git a/docs/work/scrum/_img/ALM_VF_VelocityCountItems.png b/docs/work/scrum/_img/ALM_VF_VelocityCountItems.png new file mode 100644 index 00000000000..6a8bb638421 Binary files /dev/null and b/docs/work/scrum/_img/ALM_VF_VelocityCountItems.png differ diff --git a/docs/work/scrum/_img/IC795962.png b/docs/work/scrum/_img/IC795962.png new file mode 100644 index 00000000000..3e276f273ad Binary files /dev/null and b/docs/work/scrum/_img/IC795962.png differ diff --git a/docs/work/scrum/_img/IC795969.png b/docs/work/scrum/_img/IC795969.png new file mode 100644 index 00000000000..8c08044f406 Binary files /dev/null and b/docs/work/scrum/_img/IC795969.png differ diff --git a/docs/work/scrum/_img/IC795975.png b/docs/work/scrum/_img/IC795975.png new file mode 100644 index 00000000000..836a831d9e1 Binary files /dev/null and b/docs/work/scrum/_img/IC795975.png differ diff --git a/docs/work/scrum/_img/IC797606.png b/docs/work/scrum/_img/IC797606.png new file mode 100644 index 00000000000..6416c1dde28 Binary files /dev/null and b/docs/work/scrum/_img/IC797606.png differ diff --git a/docs/work/scrum/_img/IC797613.png b/docs/work/scrum/_img/IC797613.png new file mode 100644 index 00000000000..242b4d21e52 Binary files /dev/null and b/docs/work/scrum/_img/IC797613.png differ diff --git a/docs/work/scrum/_img/IC797744.png b/docs/work/scrum/_img/IC797744.png new file mode 100644 index 00000000000..b064148548d Binary files /dev/null and b/docs/work/scrum/_img/IC797744.png differ diff --git a/docs/work/scrum/_img/IC797745.png b/docs/work/scrum/_img/IC797745.png new file mode 100644 index 00000000000..026e8d6ef39 Binary files /dev/null and b/docs/work/scrum/_img/IC797745.png differ diff --git a/docs/work/scrum/_img/IC797838.png b/docs/work/scrum/_img/IC797838.png new file mode 100644 index 00000000000..a777517389f Binary files /dev/null and b/docs/work/scrum/_img/IC797838.png differ diff --git a/docs/work/scrum/_img/activate-team-sprints.png b/docs/work/scrum/_img/activate-team-sprints.png new file mode 100644 index 00000000000..3902297e47f Binary files /dev/null and b/docs/work/scrum/_img/activate-team-sprints.png differ diff --git a/docs/work/scrum/_img/assign-to-sprint-from-kanban-animated.gif b/docs/work/scrum/_img/assign-to-sprint-from-kanban-animated.gif new file mode 100644 index 00000000000..d659ab32283 Binary files /dev/null and b/docs/work/scrum/_img/assign-to-sprint-from-kanban-animated.gif differ diff --git a/docs/work/scrum/_img/capacity-planning-tool-color-chart.png b/docs/work/scrum/_img/capacity-planning-tool-color-chart.png new file mode 100644 index 00000000000..1cd1e1853ad Binary files /dev/null and b/docs/work/scrum/_img/capacity-planning-tool-color-chart.png differ diff --git a/docs/work/scrum/_img/create-new-child-under-sprint.png b/docs/work/scrum/_img/create-new-child-under-sprint.png new file mode 100644 index 00000000000..728f899464f Binary files /dev/null and b/docs/work/scrum/_img/create-new-child-under-sprint.png differ diff --git a/docs/work/scrum/_img/define-sprints-2-week-cadence.png b/docs/work/scrum/_img/define-sprints-2-week-cadence.png new file mode 100644 index 00000000000..7a1c81df5d5 Binary files /dev/null and b/docs/work/scrum/_img/define-sprints-2-week-cadence.png differ diff --git a/docs/work/scrum/_img/define-sprints-3-week-cadence.png b/docs/work/scrum/_img/define-sprints-3-week-cadence.png new file mode 100644 index 00000000000..d8ef3dbbd4f Binary files /dev/null and b/docs/work/scrum/_img/define-sprints-3-week-cadence.png differ diff --git a/docs/work/scrum/_img/define-sprints-edit-iteration-set-sprint-dates.png b/docs/work/scrum/_img/define-sprints-edit-iteration-set-sprint-dates.png new file mode 100644 index 00000000000..66741bcba8f Binary files /dev/null and b/docs/work/scrum/_img/define-sprints-edit-iteration-set-sprint-dates.png differ diff --git a/docs/work/scrum/_img/define-sprints-monthly-cadence.png b/docs/work/scrum/_img/define-sprints-monthly-cadence.png new file mode 100644 index 00000000000..89803d9ccc1 Binary files /dev/null and b/docs/work/scrum/_img/define-sprints-monthly-cadence.png differ diff --git a/docs/work/scrum/_img/define-sprints-project-level.png b/docs/work/scrum/_img/define-sprints-project-level.png new file mode 100644 index 00000000000..062b20cf9a4 Binary files /dev/null and b/docs/work/scrum/_img/define-sprints-project-level.png differ diff --git a/docs/work/scrum/_img/define-sprints-releases-ts.png b/docs/work/scrum/_img/define-sprints-releases-ts.png new file mode 100644 index 00000000000..891cc17f458 Binary files /dev/null and b/docs/work/scrum/_img/define-sprints-releases-ts.png differ diff --git a/docs/work/scrum/_img/define-sprints-selected-team-iterations-vsts.png b/docs/work/scrum/_img/define-sprints-selected-team-iterations-vsts.png new file mode 100644 index 00000000000..ea22bbbda53 Binary files /dev/null and b/docs/work/scrum/_img/define-sprints-selected-team-iterations-vsts.png differ diff --git a/docs/work/scrum/_img/define-sprints-set-sprint-dates.png b/docs/work/scrum/_img/define-sprints-set-sprint-dates.png new file mode 100644 index 00000000000..8df2bc59e38 Binary files /dev/null and b/docs/work/scrum/_img/define-sprints-set-sprint-dates.png differ diff --git a/docs/work/scrum/_img/define-sprints-team-level.png b/docs/work/scrum/_img/define-sprints-team-level.png new file mode 100644 index 00000000000..0c945e14720 Binary files /dev/null and b/docs/work/scrum/_img/define-sprints-team-level.png differ diff --git a/docs/work/scrum/_img/dsprints-add-sprints-to-team-iterations-page.png b/docs/work/scrum/_img/dsprints-add-sprints-to-team-iterations-page.png new file mode 100644 index 00000000000..3ad5076ef92 Binary files /dev/null and b/docs/work/scrum/_img/dsprints-add-sprints-to-team-iterations-page.png differ diff --git a/docs/work/scrum/_img/dsprints-edit-sprint-1-set-start-date.png b/docs/work/scrum/_img/dsprints-edit-sprint-1-set-start-date.png new file mode 100644 index 00000000000..b84ee52e6c7 Binary files /dev/null and b/docs/work/scrum/_img/dsprints-edit-sprint-1-set-start-date.png differ diff --git a/docs/work/scrum/_img/dsprints-selected-active-sprints.png b/docs/work/scrum/_img/dsprints-selected-active-sprints.png new file mode 100644 index 00000000000..2ede8553e29 Binary files /dev/null and b/docs/work/scrum/_img/dsprints-selected-active-sprints.png differ diff --git a/docs/work/scrum/_img/dsprints-team-work-iterations-page.png b/docs/work/scrum/_img/dsprints-team-work-iterations-page.png new file mode 100644 index 00000000000..a55a8945f4f Binary files /dev/null and b/docs/work/scrum/_img/dsprints-team-work-iterations-page.png differ diff --git a/docs/work/scrum/_img/forecast-tool.png b/docs/work/scrum/_img/forecast-tool.png new file mode 100644 index 00000000000..10faed606d6 Binary files /dev/null and b/docs/work/scrum/_img/forecast-tool.png differ diff --git a/docs/work/scrum/_img/nested_info.png b/docs/work/scrum/_img/nested_info.png new file mode 100644 index 00000000000..baf45686f02 Binary files /dev/null and b/docs/work/scrum/_img/nested_info.png differ diff --git a/docs/work/scrum/_img/past-sprints-historical-record.png b/docs/work/scrum/_img/past-sprints-historical-record.png new file mode 100644 index 00000000000..26e06c1d703 Binary files /dev/null and b/docs/work/scrum/_img/past-sprints-historical-record.png differ diff --git a/docs/work/scrum/_img/selected-iterations-generate-sprint-backlogs.png b/docs/work/scrum/_img/selected-iterations-generate-sprint-backlogs.png new file mode 100644 index 00000000000..f08f034b71f Binary files /dev/null and b/docs/work/scrum/_img/selected-iterations-generate-sprint-backlogs.png differ diff --git a/docs/work/scrum/_img/set-sprint-start-end-dates.png b/docs/work/scrum/_img/set-sprint-start-end-dates.png new file mode 100644 index 00000000000..c699ae34b21 Binary files /dev/null and b/docs/work/scrum/_img/set-sprint-start-end-dates.png differ diff --git a/docs/work/scrum/_img/sp-add-tasks.png b/docs/work/scrum/_img/sp-add-tasks.png new file mode 100644 index 00000000000..1e04f9ad6c8 Binary files /dev/null and b/docs/work/scrum/_img/sp-add-tasks.png differ diff --git a/docs/work/scrum/_img/sp-assign-to-sprints.png b/docs/work/scrum/_img/sp-assign-to-sprints.png new file mode 100644 index 00000000000..f02f186d485 Binary files /dev/null and b/docs/work/scrum/_img/sp-assign-to-sprints.png differ diff --git a/docs/work/scrum/_img/sp-check-total-effort-level.png b/docs/work/scrum/_img/sp-check-total-effort-level.png new file mode 100644 index 00000000000..a56d884fb73 Binary files /dev/null and b/docs/work/scrum/_img/sp-check-total-effort-level.png differ diff --git a/docs/work/scrum/_img/sp-intro.png b/docs/work/scrum/_img/sp-intro.png new file mode 100644 index 00000000000..613c45ee725 Binary files /dev/null and b/docs/work/scrum/_img/sp-intro.png differ diff --git a/docs/work/scrum/_img/sp-scrum-task-form.png b/docs/work/scrum/_img/sp-scrum-task-form.png new file mode 100644 index 00000000000..1b94a1315a3 Binary files /dev/null and b/docs/work/scrum/_img/sp-scrum-task-form.png differ diff --git a/docs/work/scrum/_img/sprint-backlog-multi-select-non-sequential-items.png b/docs/work/scrum/_img/sprint-backlog-multi-select-non-sequential-items.png new file mode 100644 index 00000000000..eaa8c190909 Binary files /dev/null and b/docs/work/scrum/_img/sprint-backlog-multi-select-non-sequential-items.png differ diff --git a/docs/work/scrum/_img/sprint-burndown-open-chart.png b/docs/work/scrum/_img/sprint-burndown-open-chart.png new file mode 100644 index 00000000000..57a295ccb10 Binary files /dev/null and b/docs/work/scrum/_img/sprint-burndown-open-chart.png differ diff --git a/docs/work/scrum/_img/sprint-planning-task-form-ts.png b/docs/work/scrum/_img/sprint-planning-task-form-ts.png new file mode 100644 index 00000000000..906875d6112 Binary files /dev/null and b/docs/work/scrum/_img/sprint-planning-task-form-ts.png differ diff --git a/docs/work/scrum/_img/switch-team-context.png b/docs/work/scrum/_img/switch-team-context.png new file mode 100644 index 00000000000..634562d1d00 Binary files /dev/null and b/docs/work/scrum/_img/switch-team-context.png differ diff --git a/docs/work/scrum/_img/team-capacity-planning-tool.png b/docs/work/scrum/_img/team-capacity-planning-tool.png new file mode 100644 index 00000000000..31b39a469bc Binary files /dev/null and b/docs/work/scrum/_img/team-capacity-planning-tool.png differ diff --git a/docs/work/scrum/_img/vel-forecast-forecast-ts.png b/docs/work/scrum/_img/vel-forecast-forecast-ts.png new file mode 100644 index 00000000000..3987a6a4d29 Binary files /dev/null and b/docs/work/scrum/_img/vel-forecast-forecast-ts.png differ diff --git a/docs/work/scrum/_img/velocity-chart.png b/docs/work/scrum/_img/velocity-chart.png new file mode 100644 index 00000000000..b82f3aafad8 Binary files /dev/null and b/docs/work/scrum/_img/velocity-chart.png differ diff --git a/docs/work/scrum/_img/velocity-forecast-open-chart.png b/docs/work/scrum/_img/velocity-forecast-open-chart.png new file mode 100644 index 00000000000..18f42bab8e2 Binary files /dev/null and b/docs/work/scrum/_img/velocity-forecast-open-chart.png differ diff --git a/docs/work/scrum/best-practices-scrum.md b/docs/work/scrum/best-practices-scrum.md new file mode 100644 index 00000000000..2e091ca75fa --- /dev/null +++ b/docs/work/scrum/best-practices-scrum.md @@ -0,0 +1,193 @@ +--- +title: Sprint and scrum best practices | VSTS & TFS +description: Best practice guidance to implement scrum and use sprint tools in Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 1E2F0BDC-C267-4724-86E8-E4BBD75B50B2 +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + + +# Scrum and best practices + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +<a id="sprint-planning-meeting"> </a> +## Sprint planning meetings + +Much of sprint planning involves a negotiation between the product owner and the team to determine the focus and work to tackle in the upcoming sprint. It's useful to time-box the planning meeting, restricting it to 4 hours or less. + +In the first part of the meeting, your product owner meets with your team to discuss the user stories that might be included in the sprint. Your product owner will share information and answer any questions that your team has about those stories. This conversation might reveal details such as data sources, user interface layout, response time expectations, and considerations for security and usability. Your team should capture these details within the backlog items form. During this part of the meeting, your team learns what it must build. + +As you plan your sprints, you may discover additional requirements that you should capture and add to your backlog. Before your sprint planning meeting, you'll want to [groom and refine your backlog](../backlogs/best-practices-product-backlog.md#groom) to make sure that it is well defined and in priority order. + +Also, setting a sprint goal as part of your planning efforts can help the team stay focused on what's most important for each sprint. + +After you've planned your sprint, you may want to [share the plan](../scrum/sprint-planning.md#share) with key stakeholders. + +You can learn more about conducting your sprint planning meeting from these resources: +* [What is Scrum?](https://www.visualstudio.com/learn/what-is-scrum/) +* [Sprint planning](https://msdn.microsoft.com/library/hh765982.aspx) white paper +* [The Scrum Guide](http://www.scrumguides.org/scrum-guide.html) +* [Build and manage the product backlog](https://msdn.microsoft.com/library/hh765982.aspx) white paper + + +<a id="set-sprint-goals"> </a> +## Set sprint goals + +Scrum teams use sprint goals to focus their sprint activities. They often set this goal during their sprint planning meeting. The goal summarizes what the team wants to accomplish by the end of the sprint. By explicitly stating the goal, you create shared understanding within the team of the core objective. The sprint goal can also help guide the team when conflicts arise around priorities. +<a id="tips-from-trenches" /> + +## Tips from the trenches: Define sprint goals +The sprint goal defines what the product owner and the team consider as the ultimate target to accomplish that sprint. +It's not a random selection of backlog items that don't really have a relationship, but a short piece of text that captures +what the team should try to accomplish. Normally the product owner comes up with the sprint goal before selecting a +number of items for the next sprint. The items for that sprint should all fit that common goal. + +Sprint goals can be feature oriented, but might also have a large process component such as deployment automation or test automation. + +For example: +- This sprint we will focus on a very simple user story and we will use it to prove that the proposed solution will work. +- This sprint will revolve around implementing the security features that will properly secure the administration section of the website. +- This sprint will be about integrating the most important payment gateways so that we can start collecting money. + +Setting the sprint goals helps the team to stay focused. +It will make it easier to define priority of tasks within a sprint and it will probably +help limit the number of stakeholders and end-users that are involved. + +During the sprint review the most important question you should ask yourself is whether you managed to achieve the sprint goal. +How many stories you actually completed comes second. If the goal is accomplished, the sprint succeeds, even if not all stories were finished. + +*Contributed by [Jesse Houwing](http://blog.jessehouwing.nl/), Visual Studio devops Ranger and a senior consultant working for Avanade Netherlands.* + +## Tips for successful triage meetings +Fixing bugs represents a trade-off with regards to other work. Use your triage meeting to determine how important fixing each bug is against other priorities related to meeting the project scope, budget, and schedule. + +- Establish the team's criteria for evaluating which bugs to fix and how to assign priority and severity. Bugs associated with features of significant value (or significant opportunity cost of delay), or other project risks, should be assigned higher priority and severity. Store your triage criteria with other team documents and update as needed. +- Use your triage criteria to determine which bugs to fix and how to set their State, Priority, Severity, and other fields. +- Adjust your triage criteria based on where you are in your development cycle. Early on, you may decide to fix most of the bugs that you triage. However, later in the cycle, you may raise the triage criteria (or bug bar) to reduce the number of bugs that you need to fix. +- Once you've triaged and prioritized a bug, assign it to a developer for further investigation and to determine how to implement a fix. + + + +## Manage your technical debt + +Consider managing your bug bar and technical debt as part of your team's overall set of continuous improvement activities. You may find these additional resources of interest: + +- [Good and Bad Technical Debt (and how TDD helps)](http://blog.crisp.se/2013/10/11/henrikkniberg/good-and-bad-technical-debt) by Henrik Kniberg +- [Managing Technical Debt](http://www.infoq.com/articles/managing-technical-debt) posted by Sven Johann & Eberhard Wolff + + + +##Tips from the trenches: [Agile Bug Management: Not an Oxymoron](https://visualstudiomagazine.com/articles/2012/10/12/agile-bug-management.aspx) +*by Gregg Boer, Principal Program Manager, Visual Studio Cloud Services at Microsoft* +### Every Sprint, Address any Known Bug Debt +Every sprint, the team looks at any bugs remaining in the bug backlog and allocates capacity to get that known set of bugs down to zero, or near-zero. Whether this is one day, one week or the entire sprint, they fix the bugs first. Bugs found later, within the sprint, are not considered part of that initial commitment. Unless they're very high priority, they're put on the bug backlog for the next sprint. + +Many teams work in a commitment-based organization, where management places a high value on a team's ability to meet their commitments. Doing capacity planning against a known set of bugs makes sprint planning more deterministic, increasing their chance to meet commitments. Any new bugs discovered during the sprint are not a part of the initial commitment, and will be tackled next sprint.> + +### Managing Bug Debt across an Enterprise +An organization transitioning to a culture where debt is continually eliminated likely is dealing with the following question: How do you get teams to reduce their bug count without telling them exactly what to do? Leadership wants the team to change, yet gives the team autonomy to determine how they change. One option is to use a bug cap. + +For example, consider a bug cap of three bugs per engineer. This means a team of 10 people should not have more than 30 bugs in its bug backlog. If the team is over its cap, it's expected to stop work on new features and get under the bug cap. A team is expected to be under its cap at all times, but the team decides how it wants to do that. The bug cap ensures that bug debt is never carried for too long, and the team can learn from the mistakes that causes the bugs to be injected in the first place. + +Remember that the bug cap represents the bugs in the bug backlog. It does not include bugs found and fixed within the sprint in which a feature is developed. Those bugs are considered undone work, not debt. + +While bugs contribute to technical debt, they may not represent all debt. + +Poor software design, poorly written code, or short-term fixes in place of best, well-designed solutions can all contribute to technical debt. Technical debt reflects extra development work that arises from all these problems. + +You need to track work to address technical debt as PBIs, user stories, or bugs. To track a team's progress in incurring and addressing technical debt, you'll want to consider how to categorize the work item and the details you want to track. You can [add tags to any work item to group it into a category of your choosing](../track/add-tags-to-work-items.md). + + +<a id="scrum-master-role"> </a> +## Role of the Scrum Master + +Scrum Masters help build and maintain healthy teams by employing Scrum processes. They guide, coach, teach, and assist Scrum teams in the proper employment of Scrum methods. Scrum Masters also act as change agents to help teams overcome impediments and to drive the team toward significant productivity increases. + +Core responsibilities of Scrum Masters include: +* Support the team to adopt and follow Scrum processes. + For example, you should not let the daily Scrum meeting become an open discussion that lasts 45 minutes. +* Guard against the product owner or team members from adding work after the sprint begins. + +* Clear blocking issues that prevent the team from making forward progress. + This might require you to perform small tasks, such as approving a purchase order for a new build computer or resolving a conflict within your team. +* Help the team work to resolve conflicts and issues that arise and learn from the process. +* Ask questions that reveal hidden issues and confirm that what people are communicating is well understood by the entire team. +* Identify and safeguard the team from potential issues becoming major issues. Just as it's cheaper to fix a bug soon after it's discovered, it's also easier and less disruptive to fix a team issue when it's small and manageable. +* Prevent the team from presenting incomplete user stories during a [sprint review meeting](#sprint-review-meeting). +* Gather, analyze, and present data to business stakeholders in a way that + demonstrates how the team is improving and growing. For example, if your team has significantly increased the amount of value that it has delivered while generating fewer bugs, make the value visible through regular communications to business stakeholders. + +Good Scrum Masters possess or develop excellent communication, negotiation, and conflict resolution skills. They actively listen to not only the words that people say and write but also how they deliver their messages (their body language, facial expressions, vocal pace, and other nonverbal communication). + +Just as it's cheaper to fix a bug soon after it's discovered, it's also easier and less disruptive to fix a team issue when it's small and manageable before it grows into a major issue. + +<a id="daily-scrum-meetings"> </a> +## Daily Scrum meetings +Daily Scrum meetings help keep a team focused on what it needs to do the next day to maximize the team's ability to meet its sprint commitments. Your Scrum Master should enforce the structure of the meeting and ensure that it starts on time and finishes in 15 minutes or less. + +Three aspects of successful Scrum meetings are: + + +* Everyone stands up (this helps to keep the meetings focused and short) +* They start and end on time and occur at the same time in the same location each day +* Everyone participates, each team member answers the three Scrum questions: + * *What have I accomplished since the most recent Scrum?* + * *What will I accomplish before the next Scrum?* + * *What blocking issues or impediments might affect my work?* + +Team members should strive to answer their questions quickly and concisely. For example: + +>*"Yesterday, I updated the class to reflect the new data element that we pull from the database, and I got it to appear in the interface. This task is complete. Today, I will ensure that the new data element is correctly calculating with the stored procedure and the other data elements in the table. I believe I will accomplish this task today. I will need someone to review my calculations. I have no impediments or blocking issues."* + +This response conveys what was accomplished, what will be accomplished, and that the team member would like some help looking at the code. + +Contrast with this next example: + +>*"Yesterday, I worked on the class, and it works. Today, I will work on the interface. No blocking issues."*   + +Here, the team member doesn't provide enough detail about what class they worked on nor which interface components they'll complete. In fact, the word accomplished never came up. + +It's important that no one interrupts during report outs. Each person must have sufficient time to answer the three questions. + +More in-depth and follow-up discussions should take place after the meeting, as people return to their desks or, if a significant amount of conversation is necessary, in a follow-up meeting. + +Many teams delay discussions by using the "virtual parking lot" method. As topics come up that a team member believes warrants further discussion, they can quietly walk to a whiteboard or flipchart and list the topic in the parking lot. At the end of the meeting, the team determines how they'll handle the listed items. + + +<a id="sprint-review-meeting"> </a> +## Sprint review meetings +Conduct your sprint review meetings on the last day of the sprint. Your team demonstrates each product backlog item that it completed in the sprint. The product owner, customers, and stakeholders accept the user stories that meet their expectations and identify any new requirements. Customers often understand their additional needs more fully after seeing the demonstrations and may identify changes that they want to see. + +Based on this meeting, some user stories will be accepted as complete. Incomplete user stories will remain in the product backlog, and new user stories will be added to the backlog. Both sets of stories will be ranked and either estimated or re-estimated in the next sprint planning meeting. + +After this meeting and the retrospective meeting, your team will plan the next sprint. Because business needs change quickly, you can take advantage of this meeting with your product owner, customers, and stakeholders to review the priorities of the product backlog again. + +<a id="sprint-retrospective-meeting"> </a> +## Sprint retrospective meetings +Retrospectives, when conducted well and at regular intervals, support continuous improvement. + +The sprint retrospective meeting typically occurs on the last day of the sprint, after the sprint review meeting. In this meeting, your team explores its execution of Scrum and what might need tweaking. + +Based on discussions, your team might decide to change one or more processes to improve its own effectiveness, productivity, quality, and satisfaction. This meeting and the resulting improvements are critical to the agile principle of self-organization. + +Look to address these areas during your team sprint retrospectives: + +* Issues that affected your team's general effectiveness, productivity, and quality. +* Elements that impacted your team's overall satisfaction and project flow. +* What happened to cause incomplete backlog items? What actions will the team take to prevent these issues in the future? + + For example, consider a team that had several tasks that only one individual on the team could perform. The isolated expertise created a critical path that threatened the sprint's success. The individual team member put in extra hours while other team members were frustrated that they could not do more to help. Going forward, the team decided to practice [eXtreme Programming](http://www.extremeprogramming.org) to help correct this problem over time. + +As a team, work to determine whether to adapt one or more processes to minimize the occurrence of problems during the sprint. + +In some cases, your team may need to do some work to implement an improvement. For example, a team that found themselves negatively impacted by too many failed builds decided to implement continuous integration. Because they didn't want to disrupt process, they allocated a few hours to set up a trial build before turning it on in their production build. To represent this work, they created a spike and prioritized that work against the rest of the product backlog. + +## Related notes + +For additional guidance, see: +* [What is Scrum?](https://www.visualstudio.com/learn/what-is-scrum/) +* [Agile Retrospectives: Making Good Teams Great](http://www.amazon.com/Agile-Retrospectives-Making-Teams-Great/dp/0977616649/) \ No newline at end of file diff --git a/docs/work/scrum/breadcrumb/toc.yml b/docs/work/scrum/breadcrumb/toc.yml new file mode 100644 index 00000000000..ecc3fc9ad91 --- /dev/null +++ b/docs/work/scrum/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Agile + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=agile + items: + - name: Scrum + tocHref: /vsts/ + topicHref: /vsts/work/scrum/index \ No newline at end of file diff --git a/docs/work/scrum/define-sprints.md b/docs/work/scrum/define-sprints.md new file mode 100644 index 00000000000..bb7b7e9d212 --- /dev/null +++ b/docs/work/scrum/define-sprints.md @@ -0,0 +1,78 @@ +--- +title: Schedule sprints | VSTS & TFS +description: Add and set dates for sprints, releases, or iterations to implement Scrum and also to gain access to several built-in charts and widgets +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 1DB81E71-36D7-43A5-9C9A-38AA1777715A +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/19/2017 +--- + + +# Schedule sprints + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +With Scrum, teams plan and track work at regular time intervals, referred to as a sprint cadence. +You define sprints to correspond to the cadence your team uses. + +Many teams choose a two or three week cadence. However, you can specify shorter or longer sprint cycles. Also, you can create a release schedule which encompasses several sprints. + +<a id="quick-start-schedule"> </a> +## Quick start guide to scheduling sprints + +To quickly get started, you can use the default sprints, also referred to as iterations, that were added when your team project was created. Note, you must be a [member of the Project Administrators group](../../security/set-project-collection-level-permissions.md) in order to add sprints and schedule sprint dates. (If you created the team project, you're a member.) + +[!INCLUDE [temp](../_shared/image-differences.md)] + +1. Choose the sprint listed under Current and then click **Set dates**. + + <img src="_img/define-sprints-set-sprint-dates.png" alt="Sprint 1 backlog, Set dates" style="border: 2px solid #C3C3C3;" /> + +2. Click the calendar icon to choose the date for the start and then the end of the sprint. + + <img src="_img/define-sprints-edit-iteration-set-sprint-dates.png" alt="Sprint 1 backlog, Set dates" style="border: 2px solid #C3C3C3;" /> + +That's it! You can now start [planning your first sprint](sprint-planning.md). + +Of course, if you have several teams or more complex release and sprint cadences to accomodate, then you'll need to read further. + +>[!NOTE] +>**Terminology note:** Your set of Agile tools uses the Iteration Path field to track sprints and releases. When you define sprints, you define the pick list of values available for the [Iteration Path](../customize/set-area-paths.md) field. You use iterations to group work into sprints, milestones, or releases in which they'll be worked on or shipped. + +<a id="drag-drop-to-sprint"> </a> +## Assign work to a sprint using drag-and-drop + +<!--- NOTE FEATURE AVAILABILITY --> +You can quickly assign work items to a sprint by dragging and dropping them from the product backlog to the sprint. + +<!--- +![Assign work items to a sprint](_img/assign-to-sprint-from-kanban-animated.gif)--> + +<a id="schedule"> </a> +## Define and schedule sprints for several teams and release cadences + +>[!NOTE] +>Your sprint backlog and task board are designed to support your Scrum processes. In addition, you have access to product and portfolio backlogs and Kanban boards. For an overview of the features supported on each backlog and board, see [Backlogs, boards, and plans](../backlogs-boards-plans.md). + +Your team project comes with several sprints predefined. However, they aren't associated with any dates. For Scrum and sprint planning, you'll want to assign start and end dates for the sprints your team will use. + +Defining additional sprints is a two-step process. You first define the sprints for your team project—[Define project iterations](../customize/set-area-paths.md)—and then you select the sprints that each team will use—[Select team sprints](../scale/set-team-defaults.md). In this way, the system supports teams that work on different sprint cadences. + +[![Define team project sprints](_img/define-sprints-project-level.png)](../customize/set-area-paths.md)[![Select team sprints](_img/define-sprints-team-level.png)](../scale/set-team-defaults.md) + +Each sprint that you select for your team provides access to a [sprint backlog, task board, and other sprint planning tools](scrum-sprint-planning-tools.md) for planning and tracking work. + +For example, by selecting Sprints 1 thru 6, the Fabrikam Fiber team gets access to six sprint backlogs. They also get access to capacity planning tools and a task board for each sprint. + +![VSTS, sprints](_img/define-sprints-selected-team-iterations-vsts.png) + + +## Try this next +> [!div class="nextstepaction"] +> [Plan a sprint](sprint-planning.md) + +## Related notes +If you work with several teams, and each team wants their own backlog view, you can [create additional teams](../scale/multiple-teams.md). Each team then gets access to their own set of Agile tools. Each Agile tool filters work items to only include those assigned values under the team's [default area path and iteration path](../scale/set-team-defaults.md). diff --git a/docs/work/scrum/forecast.md b/docs/work/scrum/forecast.md new file mode 100644 index 00000000000..66873dfa551 --- /dev/null +++ b/docs/work/scrum/forecast.md @@ -0,0 +1,118 @@ +--- +title: Velocity and forecasting | VSTS & TFS +description: Use the velocity chart and forecast tool to determine how much work your team can deliver across several sprints +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: C46ED4AA-4B8F-4D5D-BC51-52F6D67BF8C6 +ms.manager: douge +ms.author: kaelli +ms.date: 04/11/2017 +ms.topic: get-started-article +--- + +# Forecasting + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Teams use the forecast tool to help in their sprint planning efforts. By plugging in a value for the [team velocity](../../report/guidance/team-velocity.md), the forecast tool will show which items in the backlog can be completed within future sprints. Both tools are team-specific tools that rely on the team's ability to estimate backlog items. Once your team has completed a sprint or two, they can use the team velocity to forecast how much of the backlog they can finish within the upcoming sprints. + + +Use this topic to learn: + +> [!div class="checklist"] +> * How to forecast upcoming sprints +> * Tips for using the forecast tool +> * Required and recommended team activities to support forecasting + +[!INCLUDE [temp](../_shared/image-differences.md)] + + +<a id="forecasting"> </a> + +## Forecast upcoming sprints + +You can use the forecast tool to get an idea of how many items you can complete within a sprint. By plugging in a velocity, you can see which items are within scope for the set of sprints the team has activated. + +To forecast your sprint, turn forecasting on and enter your team's predicted velocity. If Forecast doesn't appear, set Parents to Hide. Also, make sure that you're on the product backlog page. You can only forecast the product backlog of Stories, Backlog items, or Requirements. + +The tool draws lines for each future sprint selected by the team. The Forecast lines show how much work your team should be able to complete in future sprints. Typically, items above the first line are already in progress for the current sprint. Items that fall between the first and second forecast lines indicate what can be completed in the named sprint. + +>[!NOTE] +>The forecast logic has changed for VSTS. Previously, the forecast tool limited the number of items shown between the forecast lines to those that could be completed within the sprint or using unused Effort points from the previous sprint. +> +>Now, all items listed between the lines can be started in the sprint labeled by the first line, but may not be completed within the sprint. The velocity points that can't be completed in one sprint is carried over to the next sprint. For example, for a velocity of 15, if Item 1 has 35 story points, 20 velocity points are carried over to next sprint, then again 5 velocity points are carried over to sprint after that. + +### VSTS and TFS 2017.2 + +In this example, a Velocity of 15 is used. The forecast tool shows between two and four items can be worked on during the first five sprints based on the amount of Effort assigned to each work item. The forecast logic carries over velocity points from one sprint to the next. + +- Sprint 1: 19 Effort points, items 1 and 2 can be completed and item 3 can be started; 4 velocity points are carried over to the next sprint +- Sprint 2: 13 Effort points, item 3 from the previous sprint can be completed and the next 2 items can be started; 2 velocity points are carried over to the next sprint +- Sprint 3: 15 Effort points, item 5 from the previous sprint can be completed and 4 new items can be started; 2 velocity points are carried over to the next sprint +- Sprint 4: 13 Effort points, item 9 from the previous sprint can be completed, 2 new items can be started and completed +- Sprint 5: 19 Effort points, 3 items can be started + + +<img src="_img/vel-forecast-forecast-ts.png" alt="Web portal, Backlog, Forecast On" style="border: 2px solid #C3C3C3;" /> + +### TFS 2013 - TFS 2017.1 + +The forecast tool shows only those work items that can be completed within a sprint between the forecast lines. Unused velocity points from one sprint are considered in the forecast of the following sprint. + +The forecasted sprint is listed along with the last item that can be completed during that sprint. For example, The first two items with a total of 13 Effort points can be completed in Sprint 2. + +In summary: +- Sprint 2: 13 Effort points, which reflects 7 unused velocity points +- Sprint 3: 24 Effort points, which uses 4 of the 7 unused velocity points from Sprint 1 +- Sprint 4: 21 Effort points, which uses 1 of the 3 unused velocity points from Sprint 1 +- Sprint 5: 16 Effort points, which reflects 4 unused velocity points +- Sprint 6: 19 Effort points + +<img src="_img/ALM_VF_Forecast_1.png" alt="Web portal, Enter a velocity to show forecast lines" style="border: 2px solid #C3C3C3;" /> + +## Tips for using the forecast tool + +* Set **In progress** items to **Hide** to hide those items that that won't be counted in the forecast. The forecast tool ignores Scrum items set to Committed or Done and Agile and CMMI items set to Active, Resolved, or Completed. +* Select enough future sprints for your team to forecast your entire product backlog +* Check the results manually to understand discrepancies in what you expect and what the forecast tool displays +* Check the amount of effort (story points or size) forecasted per sprint +* Question forecast results where the effort of an item is near to, or greater than, team velocity + +## Determine the velocity needed to complete all items in the backlog +Another way to use the forecast tool is to enter different velocity values until all the backlog items are complete within a given set of sprints. This provides an estimate of what velocity is required to complete your backlog of items. + +You can then assess the delta between the current team's velocity and the required velocity to determine what additional resources are required to meet production demands within a required time. + +## Required and recommended activities + +Here's what needs to happen for you and your team to gain the greatest utility from the velocity chart and forecast tool. + +**Required:** +* [Define sprints for the team project](../customize/set-iteration-paths-sprints.md) - Sprints should be of the same duration. +* [Select sprints for each team](../scale/set-team-defaults.md#activate) +* [Define and estimate backlog items](../backlogs/create-your-backlog.md#estimates). If you work from your team's backlog, the items you create will automatically be assigned to the current sprint (Iteration) and to your team's default Area Path. +* Update the status of backlog items once work starts and when completed. Only backlog items whose State maps to a metastate of In Progress or Done show up on the velocity chart. + +**Recommended:** +* Define and size backlog items to [minimize variability](../../report/guidance/velocity-guidance.md#minimize-variability). +* Determine how your team wants to [treat bugs](../customize/show-bugs-on-backlog.md). If your team chooses to treat bugs like requirements, bugs will show up on the backlog and be counted within the Velocity chart and forecasting. +* [Set your team's area path](../scale/set-team-defaults.md). The forecast tool will forecast those items based on your team's default settings. These settings can specify to include items in area paths under the team's default or exclude them. +* Don't create a hierarchy of backlog items and bugs. The Kanban board, sprint backlog, and task board only show the last node in a hierarchy, called the leaf node. For example, if you link items within a hierarchy that is four levels deep, only the items at the fourth level appear on the Kanban board, sprint backlog, and task board. <br/>Instead of nesting requirements, bugs, and tasks, we recommend that you maintain a flat list─only creating parent-child links one level deep between items. Use [Features to group requirements or user stories](../backlogs/organize-backlog.md). You can quickly map stories to features, which creates parent-child links in the background. +* At the end of the sprint, update the status of those backlog items that the team has fully completed. Incomplete items should be moved back to the product backlog and considered in a future sprint planning meeting. + +## Try this next +Now that you understand how to work with forecasting, you can use this tool to support your team's [sprint planning activities](sprint-planning.md). + +## Related notes + +* [Team velocity](../../report/guidance/team-velocity.md) +* [Define sprints for the team project](../customize/set-iteration-paths-sprints.md) +* [Select sprints for a team](../scale/set-team-defaults.md) +* Use the [task board](task-board.md) to track work during your sprint +* Monitor the [sprint burndown chart](task-board.md) to determine if your team is on track to complete the sprint plan + +### Add other teams +If you work with several teams, and each team wants to work with their own backlog, velocity chart, and forecast tool, you can [create additional teams](../scale/multiple-teams.md). Each team then gets access to their own set of Agile tools. Each Agile tool filters work items to only include those whose assigned area paths and iteration paths meet those [set for the team](../scale/set-team-defaults.md). + + + \ No newline at end of file diff --git a/docs/work/scrum/index.md b/docs/work/scrum/index.md new file mode 100644 index 00000000000..582181388e9 --- /dev/null +++ b/docs/work/scrum/index.md @@ -0,0 +1,68 @@ +--- +title: Scrum index of topics for VSTS & TFS +description: Index to topics for working in Scrum using VSTS or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 07/14/2017 +--- + +# Scrum + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +With Scrum, you can schedule and plan sprints, update your task board, and monitor your sprint burndown. + +<!--- +## Overview +[About Scrum](scrum-overview.md) +[About teams and Agile tools](/vsts/work/about-teams-and-settings?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) +--> + +## 5-Minute Quickstarts + +Start tracking work by adding work items, creating your backlog, or scheduling sprints. + +- [Schedule sprints](define-sprints.md) + +## Step-by-Step Tutorials + +Whether you use scrum, Kanban, or a combination of Agile methods, you can get started tracking bugs, driving your Git development, and more using the Agile tools available to you. + +- [Plan a sprint](sprint-planning.md) +- [Add and update tasks](task-board.md) +- [Plan capacity](/vsts/work/scale/capacity-planning?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) +- [Sprint burndown](sprint-burndown.md) +- [Forecast](forecast.md) +- [Velocity](/vsts/report/guidance/team-velocity?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) + + +## Concepts +- [Scrum best practices](best-practices-scrum.md) +- [Scrum and sprint planning tools](scrum-sprint-planning-tools.md) +- [About permissions and access](/vsts/work/permissions-access-work-tracking?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) +- [Share work plans](/vsts/work/track/share-plans?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) + + +## How-to Guides + +* [Filter backlogs & queries](/vsts/work/backlogs/filter-backlogs?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) +* [Copy list of work items](/vsts/work/backlogs/copy-list?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) +* [Bulk add or modify (Web)](/vsts/work/backlogs/bulk-modify-work-items?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) + + +## Reference +- [Permissions and access for work tracking](/vsts/work/permissions-access-work-tracking?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) +- [Work item field index](/vsts/work/guidance/work-item-field?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json) + + +## Resources +- [Backlogs](../backlogs/index.md) +- [Kanban](../kanban/index.md) +- [Work item queries](../track/index.md) +- [Work item customization](../customize/index.md) +- [What is Scrum?](https://www.visualstudio.com/learn/what-is-scrum/) +- [What is Agile development?](https://www.visualstudio.com/learn/what-is-agile-development/) + diff --git a/docs/work/scrum/scrum-overview.md b/docs/work/scrum/scrum-overview.md new file mode 100644 index 00000000000..7373e3a20d2 --- /dev/null +++ b/docs/work/scrum/scrum-overview.md @@ -0,0 +1,26 @@ +--- +title: Scrum overview | VSTS & TFS +description: Use the web portal to implement your Scrum process, plan and track work, and monitor progress and trends +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 07/25/2017 +--- + +# About Scrum and project management + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +The Scrum method uses sprints to plan work to perform by a team within a specific time period and cadence. To get started, several sprints are predefined for your team. If you're new to Scrum, get an overview from [What is Scrum?](https://www.visualstudio.com/learn/what-is-scrum/). + +[![Schedule sprints](../_img/gs-planning-define-sprints.png)](define-sprints.md)[![Plan a sprint](../_img/gs-planning-plan-sprint.png)](sprint-planning.md)[![Monitor sprint progress](../_img/gs-planning-monitor-sprint.png)](task-board.md)[![Forecast](../_img/gs-planning-forecast.png)](forecast.md) + +You can quickly assign work items to a sprint by dragging and dropping them from the product backlog to the sprint. + +<!--- +![Assign work items to a sprint](_img/assign-to-sprint-from-kanban-animated.gif) +--> + diff --git a/docs/work/scrum/scrum-sprint-planning-tools.md b/docs/work/scrum/scrum-sprint-planning-tools.md new file mode 100644 index 00000000000..b4f6a11b8e5 --- /dev/null +++ b/docs/work/scrum/scrum-sprint-planning-tools.md @@ -0,0 +1,158 @@ +--- +title: Scrum and sprint planning tools | VSTS & TFS +description: Understand the tools available to you to support Scrum and working in sprints in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/19/2017 +--- + + +# Scrum and sprint planning tools + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +<!--- ADD WIDGET INFO AS WELL --> + +<a id="sprint-tools"> </a> + +Once you've [defined and selected the sprints for your team](../scale/set-team-defaults.md), you can start using the following tools to plan your sprint. + + +## Track team capacity + +At the start of each sprint, you'll want to plan the work that your team can commit to. The three Agile tools that support this work include the sprint backlog, capacity planning, and capacity bars. The sprint backlog contains a filtered subset of backlog items whose iteration path corresponds to the current sprint. + +<table valign="top" > +<tr valign="top" > +<td width="35%"> +<p> +<b>Team capacity planning tool</b> +</p> +<p>By setting team capacity, the team knows exactly the total number of work hours or days the team has for each sprint. With this tool, you set individual team member capacity as well as days off. And, conveniently, you can set holidays or shared days off taken by the entire team. </p> +<p>Setting capacity for each team member working during a sprint causes the capacity bar for that individual to appear. </p> +<p>You [set recurring days off](../scale/capacity-planning.md#team_settings), such as weekends, through team settings.</p> +</td> +<td> +![Team capacity planning tool](_img/team-capacity-planning-tool.png) +</td> +</tr> +<tr valign="top" > +<td> +<p> +<b>Individual and team capacity bars</b> +</p> +<p>With capacity bars, you can quickly see who is over, at, or under capacity. Capacity bars update with each of these activities: </p> +<ul> +<li> +<p>Tasks are assigned with non-zero remaining work</p> +</li> +<li> +<p>Change in remaining work</p> +</li> +<li> +<p>Date change within the sprint cycle. Individual and team capacity always reflects their capacity from the current day till the end of the sprint. </p> +</li> +</ul> +<p>Here's how to interpret the capacity colors:</p> +![These colors help you distinguish capacity](_img/capacity-planning-tool-color-chart.png) +</td> +<td width="455px"> +![Capacity bars](_img/ALM_DS_CapacityBars_S.png) +</td> +</tr> +</table> + + +## Update tasks, monitor burndown +During a sprint, your team can use the task board and sprint burndown chart to track their progress. Your sprint burndown chart provides you with an at-a-glance visual to determine if your team is on track to meet their sprint plan. + +<table valign="top"> +<tr valign="top" > +<td width="35%"> +<p> +<b>Task board</b> +</p> +<p>Your [task board](task-board.md) provides an interactive progress board for work required to complete the sprint backlog. During your sprint you'll want to update the status of tasks and the remaining work for each task. </p> +<p>Updating tasks daily or several times a week yields a smoother burndown chart. </p> +</td> +<td width="520px"> +![Task board](_img/ALM_DS_Task_board_S.png) +</td> +</tr> +<tr valign="top" > +<td> +<p> +<b>Sprint burndown chart</b> +</p> +<p>You use the [sprint burndown chart](sprint-burndown.md) to mitigate risk and check for scope creep throughout your sprint cycle. The burndown chart reflects the progress made by your team in completing all the work they estimated during their sprint planning meeting. </p> +<p>The ideal trend line always indicates a smooth and steady burndown. The blue area, however, represents what's actually going on. It shows the buildup of work as team members add tasks and the reduction of work as team members complete those tasks.</p> +</td> +<td> +![Sprint burndown chart](_img/ALM_DS_SprntBD_Chrt_S.png) +</td> +</tr> +</table> + + +<a id="velocity-forecast"> </a> +## Velocity and forecast +<p>While you use sprint planning and tracking tools for each sprint, you use the velocity and forecast tools to estimate work that can be completed in future sprints. </p> +<p>Velocity provides a useful metric for gaining insight into how much work your team can complete during a sprint cycle. And, the forecast tool provides a means for determining how much work your team can complete within a sprint based on a specified team velocity. </p> +<p>After your team has worked several sprints, they can use the [velocity chart](../../report/guidance/team-velocity.md) and [forecast](forecast.md) tool to estimate work that can be accomplished in future sprints. </p> + +<table valign="top" > +<tr valign="top" > +<td> +<p> +<b>Velocity chart</b> +</p> +<p>Each team is associated with one and only one velocity chart. The green bar within the chart indicates the total estimated effort (story points or size) of backlog items (user stories or requirements) completed within the sprint. (Blue corresponds to the estimated effort of items not yet completed.) </p> +<p>Velocity will vary depending on team capacity, sprint over sprint. However, over time, the velocity should indicate a reliable average that can be used to forecast the full backlog. </p> +<p>By minimizing the variability of backlog item size─effort or story points─you gain more reliable velocity metrics.</p> +</td> +<td width="500px"> +![Velocity chart](_img/velocity-chart.png) +</td> +</tr> +<tr valign="top" > +<td> +<p> +<b>Forecast tool</b> +</p> +<p>You can use the forecast tool to get an idea of how many and which items you can complete within a sprint. </p> +<p>By plugging in a velocity, you can see which items are within scope for the set of sprints the team has selected. As shown here, a velocity of 15 indicates that it will take three sprints to complete the work shown. </p> +</td> +<td> +![Forecast tool](_img/forecast-tool.png) +</td> +</tr> +</table> + +## How selected sprints show up on the backlog +Each sprint that you select for your team provides access to a sprint backlog, task board, and other Agile tools for planning and tracking work. + +<a id="ts-sprints" /> +**VSTS, TFS 2017** + +For example, by selecting Sprints 1 thru 6, the Fabrikam Fiber team gets access to six sprint backlogs. They also get access to capacity planning tools and a task board for each sprint. + +<img src="_img/define-sprints-selected-team-iterations-vsts.png" alt="VSTS and TFS 2017, Selected iterations generate sprint backlogs" style="border: 2px solid #C3C3C3;" />  + +**TFS 2015** +<a id="tfs2015-sprints" /> + +For example, by selecting Sprints 1 thru 4, the Fabrikam Fiber team gets access to four sprint backlogs. They also get access to capacity planning tools and a task board for each sprint. + +<img src="_img/selected-iterations-generate-sprint-backlogs.png" alt="TFS 2015 and TFS 2013, Selected iterations generate sprint backlogs" style="border: 2px solid #C3C3C3;" />  + +## Related notes +If you work with several teams, and each team wants their own backlog view, you can [create additional teams](../scale/multiple-teams.md). Each team then gets access to their own set of Agile tools. Each Agile tool filters work items to only include those assigned values under the team's default area path and iteration path, which you configure via the [Set team defaults](../scale/set-team-defaults.md) . + +- [What is Scrum?](https://www.visualstudio.com/learn/what-is-scrum/) +- [Add teams and team members](../scale/multiple-teams.md) +- [Define iterations for a project](../customize/set-iteration-paths-sprints.md) +- [Configure team settings](../scale/manage-team-assets.md) + diff --git a/docs/work/scrum/sprint-burndown.md b/docs/work/scrum/sprint-burndown.md new file mode 100644 index 00000000000..a2d331e20ff --- /dev/null +++ b/docs/work/scrum/sprint-burndown.md @@ -0,0 +1,129 @@ +--- +title: Sprint burndown | VSTS & TFS +description: Review Scrum progress during and at the end of a sprint when working in Visual Studio Team Services (VSTS) and Team Foundation Server +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 706331A0-3758-4575-9B51-AC828F57161B +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/02/2017 +--- + + +# Sprint burndown + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Throughout your sprint, you can monitor the sprint burndown chart to determine if your team is on track to complete its [sprint plan](sprint-planning.md). + +Use this topic to learn + +> [!div class="checklist"] +> * How to view current and past sprint burndowns +> * Required and recommended activities to support sprint burndown + +For usage guidance, see [Burndown guidance](../../report/guidance/burndown-guidance.md). + + +>[!NOTE] +>The system automatically builds a sprint burndown chart based on the tasks and Remaining Work estimates you define and update throughout the sprint cycle. For details, see [Sprint planning](sprint-planning.md) and [Task board](task-board.md). To open the sprint burndown chart, jump to the section [Open sprint burndown chart](#open-chart). + +<table> +<tr valign="top"> +<td width="35%"> + +<p>A healthy sprint burndown chart will look something like this. The *Ideal Trend* line connects the two points: </p> +- **(1)** Team's total capacity at the start of the sprint +- **(2)** 0 Remaining Work at the end of the sprint. + +<p>The slope represents the rate at which the team needs to burn down work to finish the sprint on time. </p> + +<p>The actual graph, the blue area, represents the total amount of planned sprint work and how it changes throughout the course of the sprint. The blue area corresponds to the sum of all Remaining Work set for all sprint tasks, and possibly bugs, that have the current sprint as their iteration path. </p> +</td> +<td> +![Healthy sprint burndown chart](_img/ALM_SB_IntroHealthyChart.png) +</td> +</tr> +</table> + + + +<a id="open-chart"> </a> +###Open sprint burndown chart +Click the chart to display it in a larger view. + +![Open sprint burndown chart](_img/sprint-burndown-open-chart.png) + +>[!NOTE] +>You can't add the system-generated sprint burndown chart to a dashboard. However, you can add the [Sprint burndown widget](../../report/widget-catalog.md#sprint-burndown-widget), which captures the same information for the current sprint, to a dashboard. + + +In particular you can review your sprint burndown charts to show the team patterns in execution. The burndown charts maintain a record of the team's ability to plan and estimate. + +| Sprint 1 | Sprint 2 | Sprint 3 | +|------------|------------|----------| +|![Sprint 1](_img/ALM_SB_Chart_S1_225.png) |![Sprint 2](_img/ALM_SB_Chart_S2_225.png) |![Sprint 3](_img/ALM_SB_Chart_S3_225.png) | + +Teams may find it useful to review this record periodically during their sprint retrospectives. It may spark useful discussions and lead to setting one or more sprint goals, such as: +* How does our projected velocity match up to our actual velocity? +* How can we more accurately determine how much we will be able to accomplish in a sprint? +* How can we complete work at a more regular pace throughout the sprint? + + +## Required and recommended activities + +In order to access the sprint burndown chart and use it to monitor your sprint progress, your team must perform the following actions. + +**Required:** +* [Schedule sprints for your team](define-sprints.md). +* [Define and estimate tasks](sprint-planning.md#define-tasks) for each product backlog item you're working on in the sprint. If you work from your team's backlog and task board, the items you create will automatically be assigned to the current sprint (Iteration) and to your team's default Area Path. +* [Update Remaining Work for each sprint task](task-board.md#update-tasks) as work progresses. + +**Recommended:** +* Define tasks that take a day or less to complete to lessen the impact of poor estimates. +* Don't divide tasks into subtasks. If you divide a task into subtasks, specify hours only for the subtasks. These hours are rolled up as summary values for the parent task. +* Update Remaining Work daily or several times within a week to support monitoring and achieve a smoother burndown chart. +* At the end of the sprint, update the task status of completed tasks and determine how to handle incomplete tasks. + +<a id="past-sprints"> </a> +##Current and past sprint burndown charts +As you complete each sprint, the system maintains a history of your activity. You can always review past sprints and sprint burndown charts by choosing the sprint listed under the Past section. + +<img src="_img/ALM_DS_PastSprints.png" alt="Past sprints provide historical record" style="border: 2px solid #C3C3C3;" />  + +##Try this next +In addition to the sprint burndown chart, teams can review the velocity at which they work sprint over sprint. The velocity chart tracks how many backlog items your team works on in a sprint. + +You can use your team [velocity](../../report/guidance/team-velocity.md) as input into the [forecast](forecast.md) tool to help plan your sprints. + + +##Related notes + +You can learn more about defining, planning, and executing your sprints from these topics: +* [Schedule sprints](define-sprints.md) +* [Sprint planning](sprint-planning.md) +* [Task board](task-board.md) + + +And, from these industry resources: +* [Understanding the Scrum Burndown Chart](http://www.methodsandtools.com/archive/scrumburndown.php) +* [Task sizing in Agile software development](http://www.solutionsiq.com/task-sizing-in-agile-software-development/) + +<!--- +[//]: TBD - when have more time and when dashboards become more evident +[//]: # ###Other types of burndown charts +[//]: # Release burndown +--> + +For on-premises TFS deployments, you can [specify the format that appears—**h** for hours or **d** for days—for the remaining work field](../reference/process-configuration-xml-element.md#fields). + +<a id="empty-chart"> </a> +### Empty sprint burndown chart +If your sprint burndown chart appears empty, check the following: +- Have you assigned tasks to the sprint associated with the chart? +- Have you assigned remaining work to the tasks assigned to the sprint? +- Are the parent work items of the tasks assigned to the same sprint? If not, the tasks may appear in another sprint associated with the parent item. + + + \ No newline at end of file diff --git a/docs/work/scrum/sprint-planning.md b/docs/work/scrum/sprint-planning.md new file mode 100644 index 00000000000..ae1ab943d7f --- /dev/null +++ b/docs/work/scrum/sprint-planning.md @@ -0,0 +1,227 @@ +--- +title: Sprint planning | VSTS & TFS +description: Plan a sprint or iteration working with Scrum methods in Visual Studio Team Services (VSTS) or the web portal for Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: AD107B7C-D0AA-44B1-8288-2AB046194439 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 07/21/2017 +--- + + +# Sprint planning + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Your team builds the sprint backlog during the sprint planning meeting, typically held on the first day of the sprint. +Each sprint corresponds to a time-boxed interval which supports your team's ability to work using Agile processes and tools. +During the planning meeting, your product owner works with your team to identify those stories or backlog items to complete in the sprint. + +Planning meetings typically consist of two parts. In the first part, the team and product owner identify the +backlog items that the team feels it can commit to completing in the sprint, based on experience with previous sprints. +These items get added to the sprint backlog. In the second part, your team determines how it will develop and test each item. +They then define and estimate the tasks required to complete each item. Finally, your team commits to implementing +some or all of the items based on these estimates. + +In this topic you'll learn how to: + +> [!div class="checklist"] +> * Assign backlog items to a sprint +> * Set your team's capacity +> * Add tasks to backlog items +> * Adjust work to fit team capacity +> * Share your sprint plan + +>[!NOTE] +>Your sprint backlogs are one of three classes of backlogs available to you. For an overview of the features supported on each backlog and the two types of boards, see [Backlogs, boards, and plans](../backlogs-boards-plans.md). +> +>For a beginner's guide to planning and tracking work, see [Get started with Agile tools](../overview.md). + +Here's an example of a sprint plan that consists of backlog items and the tasks required to complete each item. +By setting team capacity and estimating tasks, the team can see when the team or a team member is at, under, or over capacity. + + +<img src="_img/sp-intro.png" alt="Sprint planning" style="border: 2px solid #C3C3C3;" /> + + +>[!NOTE] +>Sprint planning doesn't need to be challenging. It can be fun and a time for the entire Scrum team to build camaraderie by working together to answer the question of "What can we commit to?" For examples and strategies to keep your sprint planning focused and effective, check out the [Sprint Planning white paper](https://msdn.microsoft.com/library/hh765982.aspx). +> +>When you've completed your sprint plant, your sprint backlog should contain all the information your team needs to successfully complete work within the time allotted without having to rush at the end. + + +##First pass: identify an initial set of work to complete + +[!INCLUDE [temp](../_shared/image-differences.md)] + +To plan sprints, you should be a member of the team and belong to the Contributors group. If you don't have access to the team project, [get invited to the team](../scale/multiple-teams.md#add-team-members). + +1. Before you start planning your sprint, you'll want to have [created, prioritized, and estimated your backlog](../backlogs/create-your-backlog.md). + +2. Also, you'll want to have [set the start and end dates for your sprint](define-sprints.md#quick-start-schedule). + +3. Begin your planning efforts by moving items from your backlog to your current sprint, one item at a time. Simply drag each item from the product backlog onto the sprint. + + <img src="_img/sp-assign-to-sprints.png" alt="Product backlog page, drag work items to sprint or assign to sprint through the context menu" style="border: 2px solid #C3C3C3;" /> + + If you don't see any links listed under Current or Future, your team admin needs to [select your team's sprints](../scale/set-team-defaults.md#activate). + + That's your initial guess at what you'll be able to do in the sprint. Next, you'll define tasks, estimate that work, and use your team's capacity to make sure it fits in the sprint. + +2. Next, check the total level of effort of your sprint items. For example, the Fabrikam Fiber team has four members with a total velocity of 40 effort points per three week sprint cycle. So, they're in good shape to commit to the 6 items in the Sprint 1 backlog. + + <img src="_img/sp-check-total-effort-level.png" alt="Sprint backlog page, determine total level of effort" style="border: 2px solid #C3C3C3;" /> + + If you don't see the Effort, Story Points, or Size fields, you can add them by clicking [Column Options](../how-to/set-column-options.md). For a description of how these fields are used, see [Create your backlog, Add details and estimates](../backlogs/create-your-backlog.md#estimates). + + Your initial plan should identify the subset of requirements that's within your team's capacity based on estimated effort and team velocity. Velocity corresponds to the total Effort or Story Points a team can complete within the sprint time period. + +<a id="set-capacity"> </a> + +##Set your team's capacity + +As a next step, you'll want to determine your team's actual capacity. Whereas velocity correlates to how your team estimates requirements, capacity correlates to actual task time - either hours or days. Capacity takes into account variation in work hours by team members as well as holidays, vacation days, and non-working days. + +Because days off and time available for each team member can vary from sprint to sprint, you set capacity for each sprint. The capacity tool helps you make sure your team isn't over or under committed for the sprint. Also, as you work day-to-day, you'll be able to see if your team is on track. + +From the Capacity page, enter the capacity and days off for each member of your team. For details on setting capacity, see [Capacity planning](../scale/capacity-planning.md). + +Most teams specify capacity in terms of hours, however, you can also specify it in days. For example, .5 days would correspond to 4 hours for a typical 8 hour day. Choose the same unit you will use to estimate the time a task will take to complete. You only have to indicate planned days off. You [manage weekend days or other recurring days off](../customize/set-working-days.md) under team settings. + + +<a id="define-tasks"> </a> +## Define tasks to complete each item + +The capacity tool tells you how much work your team can commit to. However, to compare capacity with actually planned work, you need to define and estimate tasks for each backlog item. + +Add as many tasks as needed to capture the work required to complete each item. Tasks can represent different work to be performed - such as design, code, test, content, signoff. Usually, each team member adds their own tasks and sets estimates for the work. However, a development lead could define the initial tasks for a requirement. + +1. In the sprint backlog, add a task. + + <img src="_img/sp-add-tasks.png" alt="Sprint backlog page, add task" style="border: 2px solid #C3C3C3;" /> + + Creating tasks from the sprint backlog automatically links the task to its parent backlog item. + +2. Name the task and enter an estimate for Remaining Work. Also, if you know who'll perform the work, go ahead and assign the task to that team member. + + > [!NOTE] + > **Feature availability:** From the web portal for VSTS and TFS 2017, you'll have access to the [new form with the new work tracking experience](../backlogs/add-work-items.md). For TFS 2015 and ealier versions, the old form is supported. + + <a id="task-form-team-services" /> + #### Task form, new form + + <img src="_img/sp-scrum-task-form.png" alt="New task form" style="border: 2px solid #C3C3C3;" /> + + + <a id="task-form-tfs-2015-13" class="tab-pane fade"> + #### Task form, old form + + <img src="_img/IC797606.png" alt="Web portal, Task form, oldform" style="border: 2px solid #C3C3C3;" /> + + At the planning stage, Remaining Work corresponds to an estimate of how long it will take to complete the task. + + A good rule of thumb is to size tasks to take no more than a day to complete. If a task is too large, the team should break it down. In some cases, you may not be able to estimate some tasks effectively until other tasks have been completed. Create the task now, but estimate it when you have enough information. + + During the sprint, team members update remaining work to continually reflect the time required to complete the task. This value can actually increase after work begins. For example, after working 4 hours on a task that was estimated to take 8 hours, the team member realizes he needs 16 hours over what he estimated. He would update the Remaining Work field with 20 (8-4+16). As you perform a task, you might find that more time is required. Always update the task with your best estimate of remaining work. That way, you help accurately reflect the total amount of work remaining in the sprint. + +3. As you define tasks and estimate the work, you'll see capacity charts start to fill in for each team member. Capacity bars track the remaining work against the capacity for each team member as well as the entire team. + + You'll also see a roll-up of the remaining work required to complete each requirement or bug. + + ![Capacity charts](_img/IC797744.png) + + From this view, you can easily see which individuals are at or near capacity. Teams can determine if work needs to be moved out of the sprint or to reassign tasks. + + >[!TIP] + >Define tasks that take a day or less to complete. This helps mitigate the risks that come from poor estimates. + > + >Also, don't divide tasks into subtasks as the [task board will only show leaf node tasks](../troubleshoot/resolve-backlog-reorder-issues.md#bugs-as-tasks). If you do divide a task into subtasks, specify Remaining Work only for the subtasks, as the system rolls up summary values to the parent task. + + +<a id="adjust-work"> </a> +## Second pass: adjust work to fit team capacity + +After you've defined all the tasks for all the items, check whether your team is at or over capacity. If under capacity, you can consider adding more items onto the sprint. If over capacity, you'll want to remove items out of the backlog. + +Next, check whether any team member is under, at, or over capacity. Or, if someone hasn't even been assigned any work. Use the capacity bars to make these determinations. + +![Over capacity](_img/IC795969.png) + +###Team over capacity: move items out of the sprint + +If your team's over capacity, drag items from the bottom of the list onto Backlog items. This will reset the Iteration Path to the default set for your team. Or, you can move the item into the next sprint your team will work in. All the tasks that you've defined for that item will move with it. + +![Drag items back to product backlog](_img/IC797613.png) + +> [!TIP] +> Dragging a backlog item to the backlog or another sprint reassigns all child tasks to the same iteration path. +> Also, you can multi-select several items and drag them to the backlog or another sprint. + +### Load balance work across the team + +To quickly reassign tasks, drag the task onto the new assignee's capacity bar. As you reassign tasks, capacity bars automatically update. + +![Reassign tasks](_img/IC797838.png) + + +[!INCLUDE [temp](../_shared/multi-select-bulk-modify.md)] + +## Try this next + +Now that you've defined your sprint plan, your team's ready to begin work on the sprint tasks. Use your [task board during your daily scrum meetings](task-board.md) to perform these tasks: + +- Update task status and remaining work (daily updates of remaining work leads to smoother burndown charts) +- Review progress with the team during the daily Scrum meetings +- Update items and address uncompleted work at the close of the sprint + +Also, you can [monitor your burndown chart](sprint-burndown.md) to make sure your team remains on track throughout the sprint. + +You can use [hotkeys and keyboard shortcuts](../../reference/keyboard-shortcuts.md) to navigate within the backlog list. + +## Related notes + +If you need to add or rename the sprints your team uses, you must first define them at the project level and then select them for your team. See [Define and + +To copy, clone, or delete work items, or to quickly create work items using a template, see these topics: + +- [Copy or clone a work item](../backlogs/copy-clone-work-items.md#copy-clone) +- [Remove, delete, or recycle a work item](../backlogs/remove-delete-work-items.md) +- [Create a work item template](../backlogs/work-item-template.md) + + +<a id="share" > </a> +### Share your sprint plan + +Any stakeholder on your team (someone with permissions to connect to your team project) can view your sprint plan. +Simply send them the URL of your sprint backlog page. But also, you can share it with them through email or print a version. + +To email it, create and save the query for the sprint backlog. + +![Share plan](_img/IC797745.png) + +Then, open the query and click the email icon. + +<img src="_img/IC795975.png" alt="Email query" style="border: 2px solid #C3C3C3;" /> + + +In the form that appears, enter the name(s) of valid users (ones who have access to the team project). + +Or, you can select all the items in the list, choose **Copy as HTML**, and paste the formatted list into an email form or Word document. See [Email or print work items](../how-to/email-work-items.md) for more ways to share work with your team. + + +<a id="order"> </a> +### Order, re-parent, and reassign items to different sprints +When you need to change the order of an item, simply drag the item to its new location. Also, you can [re-parent an item using the mapping pane](../backlogs/organize-backlog.md), or simply drag it within the hierarchy to change its parent. + +![Hierarchical view of backlogs](_img/ALM_OB_ReparentAnItem.png) + +Ordering and re-parenting backlog items requires that you don't nest items of the same type within each other. That is, you don't create product backlog items that are children of other product backlog items, or tasks that are children of tasks. You can only re-parent tasks under backlog items, backlog items under features, and features under epics. + +If you receive the following message, [you can fix it by removing nested child items](../troubleshoot/resolve-backlog-reorder-issues.md). + +![Can't reorder with nested backlog items message](_img/nested_info.png) + + + diff --git a/docs/work/scrum/task-board.md b/docs/work/scrum/task-board.md new file mode 100644 index 00000000000..1fa24565417 --- /dev/null +++ b/docs/work/scrum/task-board.md @@ -0,0 +1,182 @@ +--- +title: Scrum task board usage in VSTS & TFS +description: How to implement Scrum when working with the sprint task board in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 278BF8D9-E34F-4D14-BACC-D3BA704C2C47 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/18/2017 +--- + + +# Task board + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +Once you have your [sprint plan](sprint-planning.md) in place, you'll execute that plan for the duration of the sprint. In your daily Scrum meetings, your team can view progress made to backlog items and tasks from the sprint task board. + +Your task board provides a visualization of flow and status of each sprint task. With it, you can focus on the status of backlog items as well as work assigned to each team member. It also summarizes the total amount of remaining work to complete for a task or within a column. + +In this topic you'll learn how to: + +> [!div class="checklist"] +> * Use your task board to review progress during daily scrum meetings +> * Filter and group work items on your task board +> * Update the status of tasks through drag-and-drop +> * Update remaining work +> * Close out a sprint +> * Customize your task board + + +<img src="_img/ALM_TB_Intro.png" alt="Task board, collapsed backlog items" style="border: 2px solid #C3C3C3;" /> + + +>[!NOTE] +>Your task board is one of two types of boards available to you. For an overview of the features supported on each backlog and board, see [Backlog, board, and plan views](../backlogs-boards-plans.md). To customize the task board to include more or different columns, you need to customize the workflow. For details, see [Customize your work tracking experience](../customize/customize-work.md). +> +>In addition, if you're wondering why the task board items don't match your query list of items for a sprint, see [Task board items versus query list items](../backlogs-boards-plans.md#task-board-items). + + +<a id="review-progress"> </a> +##Review progress in daily scrum meetings +During your daily Scrum, you can filter your task board to help focus on items of interest. +* Group by Backlog items or Group by stories to monitor progress of your product backlog items, stories, requirements, or bugs. +* Group by People when you want to monitor progress of individual team members. + +Use the Person filter when you want to focus on work assigned to individual team members. + +>[!TIP] +>If you're seeing tasks that don't belong to your team, check that you've [selected the correct team](../how-to/switch-team-context-work.md). + + + +<a id="show-item-progress"> </a> +###Show progress on items +With this view, you can quickly see which items are nearing completion and which have yet to be started. You can expand ![expand icon](../_img/icons/expand_row_icon.png) and collapse ![collapse icon](../_img/icons/collapse_row_icon.png) a row to focus on a particular item and its tasks. + +![Group by backlog items, show All team members](_img/ALM_TB_GRP_ItemsAll.png) + + +<a id="show-individual-progress"> </a> +###Show progress of individuals +With this view, you can focus on the work completed and the work remaining for each individual team member. You can quickly see who may need help to complete their sprint tasks. This view shows items and tasks assigned to the selected team member. + +![Group by Backlog items, show Christie Church team member](_img/ALM_TB_GRP_Items_CC.png) + + +<a id="group-by-team"> </a> +###Group by team members +With this view, you can quickly see all the tasks associated with each team member. Backlog items don't appear in this view, only the tasks associated with each individual. + +![Group by People, show All team member](_img/ALM_TB_GRP_People_All.png) + + +<a id="update-tasks"> </a> +##Update tasks during the sprint cycle +The task board makes quick work of updating both task status and remaining work. + +<a id="update-task-status"> </a> +###Update task status +Simply drag tasks to a downstream column to reflect if they are in progress or completed. + +![Task board, update task status](_img/ALM_TB_Move_To_Done.png) + +When you move a task to the Done or Completed column, the system automatically updates the Remaining Work field to 0. If you discover more work is remaining, change the State back to In progress or To do and enter a value for the remaining work. + +###Update remaining work +Updating Remaining Work, preferably prior to the daily Scrum meeting, helps the team stay informed of the progress being made. It also ensures a smoother burndown chart. + +Each team member can review the tasks they've worked on and estimate the work remaining. If they've discovered that it's taking longer than expected to complete, they should increase the remaining work for the task. Remaining work should always reflect exactly how much work the team member estimates is remaining to complete the task. + +![Task board, update task remaining work](_img/ALM_TB_UpdateRWork.png) + + +<a id="unparented-tasks"> </a> +###Unparented tasks +Tasks without links to parent backlog items or user stories appear at the top of the task board. You can track unparented tasks in similar ways to other tasks, or drag them to an existing backlog item to parent them. The Unparented card tracks the total of remaining work defined for all unparented tasks, however, it isn't associated with any work item. + +![Unparented tasks](_img/ALM_TB_UnparentedTasks_CO.png) + + +<a id="close-sprint"> </a> +##Close out a sprint, update your task board +At the end of the sprint, you'll want to perform these final tasks: +* Zero out remaining work of all completed tasks +* Update the status of all completed backlog items +* Move incomplete tasks or backlog items to the next sprint or back to the product backlog. + +Dragging an incomplete item to the product backlog or to a future sprint updates the Iteration Path of all uncompleted child tasks to correspond to the product backlog iteration path or future sprint. + +>[!TIP] +>If you work from VSTS and TFS 2015.1 and later versions, you can +>[drag-and-drop work items onto a sprint from any backlog or board](define-sprints.md#drag-drop-to-sprint). + +##Try this next + +Work with [sprint burndown](sprint-burndown.md) charts to monitor progress, manage scope creep, and mitigate risks. + + +## Related notes +As you can see, the task board provides a lot of support for your Scrum activities. For related topics, see: + +* [Scrum best practices](best-practices-scrum.md) +* [Sprint planning](sprint-planning.md) +* [Schedule sprints](define-sprints.md) +* [Customize cards on the task board](../customize/customize-cards.md#task-board) +* [Capacity planning](../scale/capacity-planning.md) + + +<a id="task-board-controls"> </a> +###Task board controls + +| Control | Function | +|-----------------------|---------------------------------------------| +| Backlog | [Switch to sprint backlog view](sprint-planning.md) | +| Board | Switch to task board view | +| Capacity | [Switch to Capacity planning](sprint-planning.md#set-capacity) | +| Group by Stories/People | Switch grouping of cards based on backlog items or team members | +| Person | Filter tasks to show items assigned to All or a selected team member | +| ![Settings icon](../_img/icons/team-settings-gear-icon.png) | [Open board settings](../customize/customize-cards.md) | +| ![full screen icon](../_img/icons/fullscreen_icon.png)/![exit full screen icon](../_img/icons/exitfullscreen_icon.png) | Enter or exit full screen mode | + +See also [Keyboard shortcuts](../../reference/keyboard-shortcuts.md). + + +### Customize the task board +Each team can customize their task board in the following ways: +- [Customize cards](../customize/customize-cards.md) that appear on the task board to show additional fields. +- [Show bugs on the task board](../customize/show-bugs-on-backlog.md), your team can choose to manage bugs similar to product backlog items, as shown in this topic, or manage them similar to tasks. When you track bugs similar to tasks, they'll show up on your sprint backlogs and task boards at the same level as tasks. + +An administrator can customize the task board for all teams in the following ways: +- [Add a custom workflow state to the task WIT for a process (Inheritance process model)](../process/customize-process-workflow.md), or [modify the workflow for the task WIT definition] (Hosted and On-premises XML process models)](../reference/change-workflow-wit.md). +- [Add a custom work item type to the task board for a process (Inheritance process model)](../process/customize-process-backlogs-boards.md), or [add a work item type to a backlog and board] (Hosted and On-premises XML process models)](../customize/add-wits-to-backlogs-and-boards.md). + + +<a id="reduce-task-board-items"> </a> +## Reduce the number of items on the task board + +If you exceed the number of items allowed on your task board, you'll receive a message indicating that you need to reduce the number of items or [increase the maximum number of allowed items (TFS only)](../customize/customize-work.md#limits). The maximum number of items includes work item types included in the Requirement and Task categories. + +You can reduce the number of items on the task board by moving them to the backlog or another sprint. When you move a parent PBI or user story, all active child tasks (State not equal to Done or Closed) automatically move with the parent item. + +**VSTS and TFS 2015.1 and later versions:** + +- From the task board, drag the PBI or user story from the first column onto the backlog or future sprint. All child tasks automatically move with the parent item. +- From the sprint backlog, multi-select the items to move and then click the context menu for an item and select the iteration to move them to. + + <img src="_img/sprint-backlog-multi-select-non-sequential-items.png" alt="multi-select items from the sprint backlog" style="border: 2px solid #C3C3C3;" /> + +**TFS 2015 and earlier versions:** +- From the task board, drag the PBI or user story from the first column onto the backlog or future sprint. + +- From the sprint backlog, drag an item back to the backlog or to another sprint. + + <img src="_img/IC797613.png" alt="Drag items back to product backlog" style="border: 2px solid #C3C3C3;" /> + +- If you need to move several items, you can create a query from the sprint backlog and then use the query to [bulk modify the iteration path](../backlogs/bulk-modify-work-items.md). + + + + diff --git a/docs/work/scrum/toc.yml b/docs/work/scrum/toc.yml new file mode 100644 index 00000000000..8cd92fdaff7 --- /dev/null +++ b/docs/work/scrum/toc.yml @@ -0,0 +1,70 @@ +- name: Scrum + href: index.md +- name: Overview + items: + - name: About Scrum + href: scrum-overview.md + - name: "Backlogs, boards, & plans" + href: /vsts/work/backlogs-boards-plans?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json +- name: Quickstarts + items: + - name: Schedule sprints + href: define-sprints.md +- name: Tutorials + items: + - name: Plan a sprint + href: sprint-planning.md + - name: "Add & update tasks (Task board)" + href: task-board.md + - name: Plan capacity + href: /vsts/work/scale/capacity-planning?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json + - name: Sprint burndown + href: sprint-burndown.md + - name: Forecast + href: forecast.md + - name: Velocity + href: /vsts/report/guidance/team-velocity?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json +- name: Concepts + items: + - name: Scrum best practices + href: best-practices-scrum.md + - name: Scrum and sprint planning tools + href: scrum-sprint-planning-tools.md + - name: "Workflow states & state categories" + href: /vsts/work/concepts/workflow-and-state-categories?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json + - name: About teams and Agile tools + href: /vsts/work/about-teams-and-settings?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json +- name: How-to Guides + items: + - name: "Filter backlogs & queries" + href: /vsts/work/backlogs/filter-backlogs?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json + - name: Copy list + href: /vsts/work/backlogs/copy-list?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json + - name: Bulk add or modify (Web) + href: /vsts/work/backlogs/bulk-modify-work-items?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json + - name: Change column options + href: /vsts/work/how-to/set-column-options?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json + - name: "Manage permissions & access" + href: /vsts/work/how-to/set-permissions-access-work-tracking?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json + - name: Switch project or team focus + href: /vsts/work/how-to/switch-team-context-work?toc +- name: Reference + items: + - name: "Permissions & access for work tracking" + href: /vsts/work/permissions-access-work-tracking?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json + - name: Work item field index + href: /vsts/work/guidance/work-item-field?toc=/vsts/work/scrum/toc.json&bc=/vsts/work/scrum/breadcrumb/toc.json +- name: Resources + items: + - name: Backlogs + href: ../backlogs/index.md + - name: Queries + href: ../track/index.md + - name: Customization + href: ../customize/index.md + - name: What is Scrum? + href: https://www.visualstudio.com/learn/what-is-scrum/ + - name: What is Agile development? + href: https://www.visualstudio.com/learn/what-is-agile-development/ + + diff --git a/docs/work/tfs-ps-sync/_img/ProcGuid_1.png b/docs/work/tfs-ps-sync/_img/ProcGuid_1.png new file mode 100644 index 00000000000..6bc00571363 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/ProcGuid_1.png differ diff --git a/docs/work/tfs-ps-sync/_img/ProcGuid_2.png b/docs/work/tfs-ps-sync/_img/ProcGuid_2.png new file mode 100644 index 00000000000..4dd3ac4b9d6 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/ProcGuid_2.png differ diff --git a/docs/work/tfs-ps-sync/_img/ProcGuid_3.png b/docs/work/tfs-ps-sync/_img/ProcGuid_3.png new file mode 100644 index 00000000000..18a2082dd73 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/ProcGuid_3.png differ diff --git a/docs/work/tfs-ps-sync/_img/ProcGuid_4.png b/docs/work/tfs-ps-sync/_img/ProcGuid_4.png new file mode 100644 index 00000000000..97f4bd09f23 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/ProcGuid_4.png differ diff --git a/docs/work/tfs-ps-sync/_img/ProcGuid_5.png b/docs/work/tfs-ps-sync/_img/ProcGuid_5.png new file mode 100644 index 00000000000..164c477255e Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/ProcGuid_5.png differ diff --git a/docs/work/tfs-ps-sync/_img/ProcGuid_6.png b/docs/work/tfs-ps-sync/_img/ProcGuid_6.png new file mode 100644 index 00000000000..9a2775815db Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/ProcGuid_6.png differ diff --git a/docs/work/tfs-ps-sync/_img/addausertoateamprojectgroup.png b/docs/work/tfs-ps-sync/_img/addausertoateamprojectgroup.png new file mode 100644 index 00000000000..3fc618927ea Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/addausertoateamprojectgroup.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_alm_sp_msa_selectpermissions.png b/docs/work/tfs-ps-sync/_img/alm_alm_sp_msa_selectpermissions.png new file mode 100644 index 00000000000..6b2a3ad8746 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_alm_sp_msa_selectpermissions.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_alm_sql_2012_adduser.png b/docs/work/tfs-ps-sync/_img/alm_alm_sql_2012_adduser.png new file mode 100644 index 00000000000..8b9e9c00d55 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_alm_sql_2012_adduser.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_iis_findapppoolguid.png b/docs/work/tfs-ps-sync/_img/alm_iis_findapppoolguid.png new file mode 100644 index 00000000000..7476411ade8 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_iis_findapppoolguid.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_iis_findapppoolguid_2.png b/docs/work/tfs-ps-sync/_img/alm_iis_findapppoolguid_2.png new file mode 100644 index 00000000000..d983baceba0 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_iis_findapppoolguid_2.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_pwa_activatesyncgroup.png b/docs/work/tfs-ps-sync/_img/alm_pwa_activatesyncgroup.png new file mode 100644 index 00000000000..8f6759cbbea Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_pwa_activatesyncgroup.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_pwa_addcategoriesteammembers.png b/docs/work/tfs-ps-sync/_img/alm_pwa_addcategoriesteammembers.png new file mode 100644 index 00000000000..e80f3ac1a94 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_pwa_addcategoriesteammembers.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_pwa_setactivedirectresouce.png b/docs/work/tfs-ps-sync/_img/alm_pwa_setactivedirectresouce.png new file mode 100644 index 00000000000..98dc9f2037a Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_pwa_setactivedirectresouce.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_pwa_tfsserviceaccntcategory.png b/docs/work/tfs-ps-sync/_img/alm_pwa_tfsserviceaccntcategory.png new file mode 100644 index 00000000000..140d9c7a781 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_pwa_tfsserviceaccntcategory.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_sp_manageserviceapps.png b/docs/work/tfs-ps-sync/_img/alm_sp_manageserviceapps.png new file mode 100644 index 00000000000..acb48e22a5d Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_sp_manageserviceapps.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_sp_msa_fullcontrol.png b/docs/work/tfs-ps-sync/_img/alm_sp_msa_fullcontrol.png new file mode 100644 index 00000000000..74271feb116 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_sp_msa_fullcontrol.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_sql_grantpermissions.png b/docs/work/tfs-ps-sync/_img/alm_sql_grantpermissions.png new file mode 100644 index 00000000000..ba65c51f525 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_sql_grantpermissions.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tac_addwindowsaccount.png b/docs/work/tfs-ps-sync/_img/alm_tac_addwindowsaccount.png new file mode 100644 index 00000000000..60e385816fb Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tac_addwindowsaccount.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tac_checkname.png b/docs/work/tfs-ps-sync/_img/alm_tac_checkname.png new file mode 100644 index 00000000000..ff184712b9c Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tac_checkname.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tac_groupmembership.png b/docs/work/tfs-ps-sync/_img/alm_tac_groupmembership.png new file mode 100644 index 00000000000..a281a1d932c Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tac_groupmembership.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfs-ps_classicmode.png b/docs/work/tfs-ps-sync/_img/alm_tfs-ps_classicmode.png new file mode 100644 index 00000000000..a02cce830c3 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfs-ps_classicmode.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfs-ps_permmode.png b/docs/work/tfs-ps-sync/_img/alm_tfs-ps_permmode.png new file mode 100644 index 00000000000..8068415454d Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfs-ps_permmode.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfs-ps_spmode.png b/docs/work/tfs-ps-sync/_img/alm_tfs-ps_spmode.png new file mode 100644 index 00000000000..10bb9e29946 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfs-ps_spmode.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_2010_authentication.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_2010_authentication.png new file mode 100644 index 00000000000..597c8a569be Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_2010_authentication.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_addaccount.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_addaccount.png new file mode 100644 index 00000000000..be98eb7c6bb Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_addaccount.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_categorypermissions.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_categorypermissions.png new file mode 100644 index 00000000000..9b7e9463a04 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_categorypermissions.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_pm_settings.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_pm_settings.png new file mode 100644 index 00000000000..0ac454fe26d Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_pm_settings.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_pwasettings.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_pwasettings.png new file mode 100644 index 00000000000..d1c52528227 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_pwasettings.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_sp_settings.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_sp_settings.png new file mode 100644 index 00000000000..35bcaef3d84 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwa_sp_settings.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_pwapandg_team.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwapandg_team.png new file mode 100644 index 00000000000..f942b6d6bdb Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwapandg_team.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_pwapeopleandgroups.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwapeopleandgroups.png new file mode 100644 index 00000000000..11334a0be0a Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwapeopleandgroups.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_pwasitesettings.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwasitesettings.png new file mode 100644 index 00000000000..29182ad71a0 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_pwasitesettings.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_sitecollectionadmin.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_sitecollectionadmin.png new file mode 100644 index 00000000000..2c7cf278fbb Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_sitecollectionadmin.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_sitesettings.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_sitesettings.png new file mode 100644 index 00000000000..11acda6c3c3 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_sitesettings.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_tfsps_twa_setadminpsinteg.png b/docs/work/tfs-ps-sync/_img/alm_tfsps_twa_setadminpsinteg.png new file mode 100644 index 00000000000..3ed6e3a3688 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_tfsps_twa_setadminpsinteg.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_twa_addtask_icon.png b/docs/work/tfs-ps-sync/_img/alm_twa_addtask_icon.png new file mode 100644 index 00000000000..eef7b02e802 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_twa_addtask_icon.png differ diff --git a/docs/work/tfs-ps-sync/_img/alm_twa_saveresults_icon.png b/docs/work/tfs-ps-sync/_img/alm_twa_saveresults_icon.png new file mode 100644 index 00000000000..e6239aac80a Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/alm_twa_saveresults_icon.png differ diff --git a/docs/work/tfs-ps-sync/_img/aml_proj_greenfield_whitecheckmark.png b/docs/work/tfs-ps-sync/_img/aml_proj_greenfield_whitecheckmark.png new file mode 100644 index 00000000000..38dbfe17d4b Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/aml_proj_greenfield_whitecheckmark.png differ diff --git a/docs/work/tfs-ps-sync/_img/icon_lockedlink.png b/docs/work/tfs-ps-sync/_img/icon_lockedlink.png new file mode 100644 index 00000000000..130f601c481 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/icon_lockedlink.png differ diff --git a/docs/work/tfs-ps-sync/_img/procguid_10.png b/docs/work/tfs-ps-sync/_img/procguid_10.png new file mode 100644 index 00000000000..c6493b576a4 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/procguid_10.png differ diff --git a/docs/work/tfs-ps-sync/_img/procguid_6a.png b/docs/work/tfs-ps-sync/_img/procguid_6a.png new file mode 100644 index 00000000000..9a2775815db Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/procguid_6a.png differ diff --git a/docs/work/tfs-ps-sync/_img/procguid_7.png b/docs/work/tfs-ps-sync/_img/procguid_7.png new file mode 100644 index 00000000000..3ea6b1a2433 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/procguid_7.png differ diff --git a/docs/work/tfs-ps-sync/_img/procguid_8.png b/docs/work/tfs-ps-sync/_img/procguid_8.png new file mode 100644 index 00000000000..ad0c180c458 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/procguid_8.png differ diff --git a/docs/work/tfs-ps-sync/_img/procguid_9.png b/docs/work/tfs-ps-sync/_img/procguid_9.png new file mode 100644 index 00000000000..452bdd8235a Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/procguid_9.png differ diff --git a/docs/work/tfs-ps-sync/_img/ps-tfs_proj_validresolut.png b/docs/work/tfs-ps-sync/_img/ps-tfs_proj_validresolut.png new file mode 100644 index 00000000000..f40ceb2d9f5 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/ps-tfs_proj_validresolut.png differ diff --git a/docs/work/tfs-ps-sync/_img/ps-tfs_pwa_asswrkavailability.png b/docs/work/tfs-ps-sync/_img/ps-tfs_pwa_asswrkavailability.png new file mode 100644 index 00000000000..a2587fcc696 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/ps-tfs_pwa_asswrkavailability.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_agile_workflow.png b/docs/work/tfs-ps-sync/_img/pstfs_agile_workflow.png new file mode 100644 index 00000000000..b65c951e07a Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_agile_workflow.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_associateeptotp.png b/docs/work/tfs-ps-sync/_img/pstfs_associateeptotp.png new file mode 100644 index 00000000000..3bede324b70 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_associateeptotp.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_fieldmapping_workflow.png b/docs/work/tfs-ps-sync/_img/pstfs_fieldmapping_workflow.png new file mode 100644 index 00000000000..697897e31e0 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_fieldmapping_workflow.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_mappwas.png b/docs/work/tfs-ps-sync/_img/pstfs_mappwas.png new file mode 100644 index 00000000000..81ea1c5f45e Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_mappwas.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_pmdetailed_workflow.png b/docs/work/tfs-ps-sync/_img/pstfs_pmdetailed_workflow.png new file mode 100644 index 00000000000..a525f79592b Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_pmdetailed_workflow.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_projectservertab.png b/docs/work/tfs-ps-sync/_img/pstfs_projectservertab.png new file mode 100644 index 00000000000..3d611119810 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_projectservertab.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_provisioning.png b/docs/work/tfs-ps-sync/_img/pstfs_provisioning.png new file mode 100644 index 00000000000..1ea2fa9533a Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_provisioning.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_registerpwas.png b/docs/work/tfs-ps-sync/_img/pstfs_registerpwas.png new file mode 100644 index 00000000000..5fe4b7c645e Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_registerpwas.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_rollup_workflow.png b/docs/work/tfs-ps-sync/_img/pstfs_rollup_workflow.png new file mode 100644 index 00000000000..66db8471a53 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_rollup_workflow.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_syncprocess.png b/docs/work/tfs-ps-sync/_img/pstfs_syncprocess.png new file mode 100644 index 00000000000..2fc13c4e948 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_syncprocess.png differ diff --git a/docs/work/tfs-ps-sync/_img/pstfs_unmap_workflow.png b/docs/work/tfs-ps-sync/_img/pstfs_unmap_workflow.png new file mode 100644 index 00000000000..d1904ea4ad2 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/pstfs_unmap_workflow.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_agile_bulkedit.png b/docs/work/tfs-ps-sync/_img/tfs-ps_agile_bulkedit.png new file mode 100644 index 00000000000..c53dc92ed99 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_agile_bulkedit.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_excel_capacity_agileplan.png b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_capacity_agileplan.png new file mode 100644 index 00000000000..c5b01c634cc Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_capacity_agileplan.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_excel_itbacklog_agileplan.png b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_itbacklog_agileplan.png new file mode 100644 index 00000000000..8f756396d76 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_itbacklog_agileplan.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_excel_itbacklog_agileplanupd.png b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_itbacklog_agileplanupd.png new file mode 100644 index 00000000000..b679ab9e243 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_itbacklog_agileplanupd.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_excel_prodbcklog_agileplan.png b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_prodbcklog_agileplan.png new file mode 100644 index 00000000000..4d1696e8164 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_prodbcklog_agileplan.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_excel_wrkbrk_taskplan.png b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_wrkbrk_taskplan.png new file mode 100644 index 00000000000..2c31b66482f Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_excel_wrkbrk_taskplan.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_fieldupdates.png b/docs/work/tfs-ps-sync/_img/tfs-ps_fieldupdates.png new file mode 100644 index 00000000000..d6b366a0f85 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_fieldupdates.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pp_detailed.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_detailed.png new file mode 100644 index 00000000000..9ac54219500 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_detailed.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pp_detailedplan_reqtasksb.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_detailedplan_reqtasksb.png new file mode 100644 index 00000000000..aaf9f3bf7f0 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_detailedplan_reqtasksb.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pp_detailedplan_schedule.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_detailedplan_schedule.png new file mode 100644 index 00000000000..3bd60cda13e Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_detailedplan_schedule.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pp_history.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_history.png new file mode 100644 index 00000000000..826086292c8 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_history.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pp_published.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_published.png new file mode 100644 index 00000000000..5a34c7e92c0 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_published.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pp_rollup.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_rollup.png new file mode 100644 index 00000000000..dbfcdd7eaf1 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_rollup.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pp_taskdetails_pwa.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_taskdetails_pwa.png new file mode 100644 index 00000000000..7408e7fe4af Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pp_taskdetails_pwa.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_proj_it1plan_agileplan.png b/docs/work/tfs-ps-sync/_img/tfs-ps_proj_it1plan_agileplan.png new file mode 100644 index 00000000000..fa73f5ab74e Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_proj_it1plan_agileplan.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_proj_it1plan_agileplanupd.png b/docs/work/tfs-ps-sync/_img/tfs-ps_proj_it1plan_agileplanupd.png new file mode 100644 index 00000000000..b9ab24383f9 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_proj_it1plan_agileplanupd.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_proj_userstories_agileplan.png b/docs/work/tfs-ps-sync/_img/tfs-ps_proj_userstories_agileplan.png new file mode 100644 index 00000000000..1abd73c059c Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_proj_userstories_agileplan.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pwa_approvalcenter.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pwa_approvalcenter.png new file mode 100644 index 00000000000..2cb019189a5 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pwa_approvalcenter.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pwa_detailedplan_updates.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pwa_detailedplan_updates.png new file mode 100644 index 00000000000..922cd739e8b Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pwa_detailedplan_updates.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_pwa_portfolio_agile.png b/docs/work/tfs-ps-sync/_img/tfs-ps_pwa_portfolio_agile.png new file mode 100644 index 00000000000..06acdcdf4b8 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_pwa_portfolio_agile.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_te_addlinkedtasks_wb.png b/docs/work/tfs-ps-sync/_img/tfs-ps_te_addlinkedtasks_wb.png new file mode 100644 index 00000000000..bcf567ee8a4 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_te_addlinkedtasks_wb.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_te_addnewlinkedwit.png b/docs/work/tfs-ps-sync/_img/tfs-ps_te_addnewlinkedwit.png new file mode 100644 index 00000000000..b5b6852a234 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_te_addnewlinkedwit.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_te_detailedplan_originalestimate.png b/docs/work/tfs-ps-sync/_img/tfs-ps_te_detailedplan_originalestimate.png new file mode 100644 index 00000000000..7a82820162f Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_te_detailedplan_originalestimate.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_te_detailedplan_workbreakdown.png b/docs/work/tfs-ps-sync/_img/tfs-ps_te_detailedplan_workbreakdown.png new file mode 100644 index 00000000000..8c56b7e9323 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_te_detailedplan_workbreakdown.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_te_wrkbrk_newreq.png b/docs/work/tfs-ps-sync/_img/tfs-ps_te_wrkbrk_newreq.png new file mode 100644 index 00000000000..6ccf519c75f Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_te_wrkbrk_newreq.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_twa-taskboard_managedetails.png b/docs/work/tfs-ps-sync/_img/tfs-ps_twa-taskboard_managedetails.png new file mode 100644 index 00000000000..19a6ff304f9 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_twa-taskboard_managedetails.png differ diff --git a/docs/work/tfs-ps-sync/_img/tfs-ps_twa_contextmenu.png b/docs/work/tfs-ps-sync/_img/tfs-ps_twa_contextmenu.png new file mode 100644 index 00000000000..59c62a80e09 Binary files /dev/null and b/docs/work/tfs-ps-sync/_img/tfs-ps_twa_contextmenu.png differ diff --git a/docs/work/tfs-ps-sync/administrate-integration-tfs-project-server.md b/docs/work/tfs-ps-sync/administrate-integration-tfs-project-server.md new file mode 100644 index 00000000000..2dd676acf32 --- /dev/null +++ b/docs/work/tfs-ps-sync/administrate-integration-tfs-project-server.md @@ -0,0 +1,42 @@ +--- +title: Administrate the integration of TFS and Project Server | TFS +description: Manage the configuration of TFS and Project Server to support data synchronization - Team Foundation Server (TFS). +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 529c5a49-31d7-4080-b3b5-1bcc95c8a102 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Administrate the integration of TFS and Project Server +<a name="Top"></a> As an administrator for the integration of Visual Studio Team Foundation Server (TFS) and Microsoft Project Server, you must configure the integration of the two server products. When you configure this integration, you define what components participate in data synchronization and what data flows from team projects to enterprise project plans. The initial configuration requires that you install software, grant permissions, register instances of Project Web Access or Project Web App (PWA), and map Project Server components to Team Foundation components. You might also need to customize the types of work items and how fields are mapped to participate in data synchronization. After you configure the integration, you might need to monitor and troubleshoot it. + +> [!NOTE] +> You can download a virtual machine that demonstrates how you can integrate TFS and Project Server 2010 so that teams can share data between the two server products. This virtual machine includes enterprise project plans in Project Server that are mapped to team projects in Team Foundation Server, along with sample data to highlight key integration scenarios. The walkthrough documents illustrate four scenarios that simulate the interactions between the project manager, who is working in Project Server, and members of the software development team, who are working in TFS. For more information, see the following page on the Microsoft website: [TFS 2010 and Microsoft Project Server 2010 Integration Hyper-V Virtual Machine](http://go.microsoft.com/fwlink/?LinkID=196413). + +## <a name="Setup"></a> Setup and configuration + +|Task|Related topics| +|----------|--------------------| +|**Plan the integration of the two server products**. To synchronize data between TFS and Project Server, you must install Team Foundation Server Extensions for Project Server on those machines that will participate in managing projects by using Project Professional. To understand how you will configure the integration of the two server products, you should understand how Project Server components map to TFS components.|[System and setup requirements](system-and-setup-requirements.md)<br /><br /> [Map components](map-project-server-components.md)| +|**Configure the integration to support a test or evaluation environment**. You can use this topic as a quick reference to install software, assign permissions, configure integration, and verify data synchronization.|[Configuration quick reference](configuration-quick-reference.md)| +|**Configure the integration to support a production environment**. You can use this topic to collect the information that is required for configuration, permissions that you must grant, and configuration tasks that you must perform to support a customized integration of the two server products.|[Configure TFS-Project Server integration](configure-tfs-project-server-integration.md)| +|**Grant permissions to support configuration and data synchronization**. You must grant permissions to administrators, service accounts, and team members.|[Assign permissions](assign-permissions-support-tfs-project-server-integration.md)| +|**Map and unmap enterprise project plans to team projects**. You define which project plans synchronize data with Team Foundation by defining the association or mappings between project plans and team projects. You can map multiple plans to a team project, but you can map each plan to only one team project.|[Associate enterprise projects and team projects](manage-associations-enterprise-projects.md)| +|**Manage which work item types participate in data synchronization**. To support synchronization of data between an enterprise project plan and a team project, you must specify the types of work items that you want to participate in synchronization. You can define the types when you associate a project plan to a team project, and then you can add or remove types later.|[Specify work item types](specify-wits-to-synchronize.md)| +|**Manage which fields participate in data synchronization**. To synchronize data between an enterprise project plan and a team project, you must associate the TFS work-item fields with Project Server fields. You can add fields and specify how they synchronize by customizing the field mapping file.<br /><br /> You can map fields that are associated with pick lists in Team Foundation. However, you must create lookup tables in Project Server to match the pick lists. You cannot automatically synchronize pick lists and lookup tables.|[Customize the field mapping](customize-field-mapping-tfs-project-server.md)| + +## <a name="Admin"></a> Administer and troubleshoot + +|Task|Related topics| +|----------|--------------------| +|**Manage and modify the integration of synchronized components**. You can change how components are mapped or list the current mappings by using the `TfsAdmin ProjectServer` command-line tool. You can review the options and parameters that are provided with this tool and learn about the operations that specific options perform.|[Map integration components](map-integration-components.md)| +|**Understand how synchronization occurs**. The synchronization engine captures and maintains task-related and resource-related data in both TFS and Project Server while respecting the ownership of data by the project manager in the project plan.|[Understand how updates to specific fields are managed](understand-how-updates-to-specific-fields-managed.md)<br /><br /> [Synchronization process overview](synchronization-process-overview.md)| +|**Change the configuration or shut down synchronization**. You can remove components that you have configured to participate in data synchronization, or you can permanently shut down synchronization. You should always follow the recommended reconfiguration sequence when you remove components from participating in synchronization.|[Remove a component](remove-component-from-synchronization.md)| +|**Re-map or re-configure the integration**. After you have configured the two server products to support data synchronization, you might need to reconfigure a component before or after you move or delete a team project, project collection, or an application-tier server.|[Change your deployment configuration](change-deployment-configuration.md)| +|**Retrieve the latest synchronization error messages**. To help troubleshoot the integration of the two server products, you can display a list of recent synchronization errors. You can display the most recent errors that were logged for a team project collection if you use the `/GetSyncMessages` option of the `TfsAdmin ProjectServer` command-line tool.|[View error messages](view-synch-error-messages.md)| +|**Troubleshoot synchronization and configuration issues**. You can use these topics to resolve problems that can occur during configuration of the two server products or during the synchronization process.|[Verify synchronization](verify-synch-process.md)<br /><br /> [Known issues and workarounds](known-issues-and-workarounds.md)| + +## Related notes + [Manage projects](manage-projects.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/assign-permissions-support-tfs-project-server-integration.md b/docs/work/tfs-ps-sync/assign-permissions-support-tfs-project-server-integration.md new file mode 100644 index 00000000000..ffa96a7261b --- /dev/null +++ b/docs/work/tfs-ps-sync/assign-permissions-support-tfs-project-server-integration.md @@ -0,0 +1,456 @@ +--- +title: Assign permissions to support TFS-Project Server integration | TFS +description: Assign permissions to support configuration and working with TFS- Project Server data synchronization +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: d71eb502-00d0-4904-ac79-23195a707dc9 +ms.manager: douge +ms.author: kaelli +ms.date: 03/16/2017 +--- + +# Assign permissions to support TFS-Project Server integration + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> Assigning permissions is the first step in configuring Team Foundation Server and Project Server to support data synchronization. You must grant permissions to several accounts—administrators, service accounts, and team members. You must also make sure that specific service accounts have access as a Shared Services Provider (SSP) for the server that hosts SharePoint Products for Project Server. + + You should grant permissions after you have installed Team Foundation Server Extensions for Project Server Integration. For more information, see [System and setup requirements](system-and-setup-requirements.md). + +## Before you begin + Before you begin, you'll want to know which PWA instances and TFS team project collections will participate in data synchronization. You'll also want to have answers to the following questions. + +### <a name="assign_perm"></a> Do you have all the permissions you need to assign permissions? + Make sure you belong to the following groups: + +- **Team Foundation Administrators** group, required to grant TFS permissions. You must also have access to the **Team Foundation Administration Console**. [Add accounts to administer TFS](../../security/set-project-collection-level-permissions.md). + +- **Administrator for Project Web App** for each instance of Project Web Access or Project Web App (PWA), required to grant Project Server permissions. You must also have access to Project Server through PWA. + +- **Administrators** security group for the SQL Server databases for Project Server, required to grant permissions to the PWA Reporting and Publishing databases. + +- **Farm Administrators** group, the administrators group for the Web application that supports Project Server, or the **SharePoint Administration** group, required to grant SSP permissions. Group membership will depend on the security architecture of your deployment. + +- Administrator on the local computer, required to use `stsadm.exe`. + +### <a name="auth_mode"></a> Is the authentication mode set correctly for your version of Project Server? + +- **For Project Server 2010**: + + The SharePoint web application for the instance of PWA must be set to **Classic Mode Authentication**. Classic Mode Authentication uses Windows authentication. User accounts are treated by SharePoint Server 2010 as Active Directory Domain Services (AD DS) accounts. + + You will not be able to register the PWA if its authentication is set to Claims Based Authentication. If you're not sure which authentication mode is set, or you need to switch authentication modes, [jump to this section](#auth2010). + +- **For Project Server 2013**: + + Two permissions are supported: SharePoint Permission mode and Project Permission mode. Both these modes use Claims Based authorization. The permissions that you need to assign differ, depending on the permission mode that is set. + + SharePoint permissions mode creates SharePoint groups that directly correspond to the default security groups found in Project Server permission mode. These groups are used to grant users varying levels of access to projects and Project Server functionality. SharePoint permission mode is new for Project Server 2013. + + New Project Web App instances use the SharePoint permission mode by default. In an on-premises installation, the mode can be changed for a given instance of Project Web App by using the **Set-SPProjectPermissionModeWindows** PowerShell cmdlet. + + Project Server permission mode provides a set of customizable security groups and other functionality that is distinct from SharePoint groups. This security platform operates independent from the SharePoint permissions in the farm and allows you to fine tune the permission levels for Project Web App users. This is the same permission mode that was available in Project Server 2010. + + For a comparison of features supported in each security mode, see [Plan user access in Project Server 2013](http://technet.microsoft.com/library/fp161361\(v=office.15\).aspx). + + If you're not sure which Permission mode is set, or you need to switch Permission modes, [jump to this section](#perm2013). + +### <a name="windows_groups"></a> Have you created Windows groups to effectively manage user accounts? + To minimize manually adding users to TFS and Project Server, create Windows or Active Directory groups. You can then add these groups to TFS groups, Project Server, and SharePoint sites which have pre-defined permissions. Also, you can synchronize resources with Active Directory across multiple domains and forests. + + For more information, see [Manage security group synchronization with Active Directory in Project Server 2013](http://technet.microsoft.com/library/gg750243.aspx). + +## <a name="accounts"></a> 1. Identify all the service and user accounts that you need to assign permissions to + Identify the service accounts, user accounts, or Active Directory groups that have been configured and will need access to the resources that support data synchronization between TFS and Project Server. + +### <a name="service_accounts"></a> Service accounts + Identify the following service accounts: + +- **Service account for TFS** + + [Open the Team Foundation Administration console](../../tfs-server/command-line/open-admin-console.md). If a Network Service account is used, [change it to a domain account](../../tfs-server/admin/change-service-account-password.md). + +- **Service account for the Project Server Event Handler** + + On the machine where Project Server is installed, open **Computer>Manage Services** and find **Microsoft Project Server Events Service**. + +- **Service account(s) that run the Project server web application pool(s)** + + There might be more than one service account, depending on the number of PWA instances that will participate in TFS data synchronization. You need to identify both the SharePoint appPool hosting PWA and the PSI service appPool. A GUID appPool name could be associated with the PSI service appPool. + + 1. Open SharePoint Central Site Administration, Application Management, Manage Service Application, Project Server Application. + + Find the SharePoint site that hosts the PWA instance. Make a note of the number. It might be under one or more ports, for example, SharePoint 80, or SharePoint web app. + + 2. Open IIS manager, expand sites, and find the SharePoint websites that correspond to the PWA that you identified. + + - **For Project Server 2010**: Open Advanced settings for the application Pool and you'll find the account identity for the AppPool. + + - **For Project Server 2013**: Expand SharePoint web services and expand each GUID until you find the one that contains project PSI service. In Advanced settings, identify the Application Pool, which is a GUID pool name. + + ![Find GUID of PSI app pools](_img/alm_iis_findapppoolguid.png "ALM_IIS_FindAppPoolGUID") + + Under IIS, AppPools, find the account used to run this GUID application pool. + + ![Find service accounts of PSI app pools](_img/alm_iis_findapppoolguid_2.png "ALM_IIS_FindAppPoolGUID_2") + +### User accounts + Identify the following user accounts or groups: + +- User account(s) who will run the `TFSProjectServer registerPWA` command + +- User account(s) who will map components to support TFS-Project Server integration, but not register PWAs + +- Users of Project Professional + +- Users assigned as project resources or have TFS work items assigned to them + + These users submit status updates that flow into the status queue for the project manager + + Depending on the role, you grant permissions to each PWA instance that participates in data synchronization to the SharePoint server, to the enterprise resource pool, and to TFS. + +## <a name="grant_pwa_permissions"></a> 2. Grant permissions to access each PWA instance + Do the following tasks, based on the version and permission mode used in your deployment. You must add accounts for each PWA instance that you will register and map to a team project. + +|Task|Set for these configuration:| +|----------|----------------------------------| +|[2-1. Grant Global permissions to the TFS Service account](#global)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode") ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")| +|[2-2. Grant Category permissions to the TFS Service account](#category)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode") ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")| +|[2-3. Add accounts to a PWA security group](#pwa):<br /><br /> - TFS Service account<br />- Service account(s) for the Project Server web application pool<br />- User accounts that configure the integration<br />- Accounts of users of Project Professional: **Project Manager** or **Portfolio Managers**<br />- User accounts assigned as resources in the project plan: **Team Members**|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode") ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")| +|[2-4. Add accounts to a PWA security group (SharePoint mode)](#pwa_sp)<br /><br /> - TFS Service account<br />- Service account(s) for the Project Server web application pool<br />- Service account for the Project Server Event Handler, add to Administrators for PWA<br />- User accounts that configure the integration<br />- Accounts of users of Project Professional: **Project Manager** or **Portfolio Managers**<br />- User accounts assigned as resources in the project plan: **Team Members**|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")| +|[2-5. Add user accounts to the Active Directory Enterprise Resource Pool](#pool)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode") ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode") ![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")| + +### <a name="global"></a> 2-1 Grant Global permissions + **Required for:** ![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode") and ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode") + +1. From the PWA Settings page, open Manage Users, and then New User. + +2. Add the TFS service account. + +3. Type the required information in each field. Note the following: + + 1. Clear the check box for **User can be assigned as a resource** because the account is a service account. + + 2. For **User Authentication**, type the name of the service account for TFS. + + 3. Assign the following **Global** permissions: + + - Admin: Manage Enterprise Custom Fields, Manage Server Events, Manage Site Services, and Manage Users and Groups. + + - General: Log On, New Task Assignment, and Reassign Task. + + - Project: Build Team on New Project. + + - Views: View Approvals, View Project Center, View Resource Center, and View Task Center. + +4. Save your changes. + +### <a name="category"></a> 2-2 Grant Category permissions + **Required for:** ![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode") and ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode") + +1. From the home page for PWA, in the Quick Launch area, choose **Server Settings**. + +2. Next, choose **Manage Categories** and then **New Category**. + +3. Type a name for the service account category, for example, type **Servicing Account**. + +4. Under **Available Users**, choose the name of the service account for Team Foundation Server, and then choose **Add**. + + ![Create TFS Service account category](_img/alm_pwa_tfsserviceaccntcategory.png "ALM_PWA_TFSServiceAccntCategory") + +5. Under Projects, choose **All current and future projects in Project Server database**, and then click **Save**. + +6. Add the TFS service account and select the checkboxes for these **Category** permissions: + + - Project: Open Project and View Project Site + + - Resource: View Enterprise Resource Data + + ![Category permissions for TFS service account](_img/alm_tfsps_pwa_categorypermissions.png "ALM_TFSPS_PWA_CategoryPermissions") + +### <a name="pwa"></a> 2-3 Add accounts to a PWA security group + **Required for:** ![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode") and ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode") + +1. From the PWA Settings page, open Manage Users, New User, and then type the required information in each field: + + - Clear the check box for **User can be assigned as a resource** if the account is a service account. + + - For **User Authentication**, type the account name of the user or service account for TFS. + + - Clear the check box for **Resource can be leveled** if the account is an administrator or a service account. + +2. For **Security Groups**, add the account or group to one of the default groups: + + 1. **Administrators**: TFS service account and the accounts of users who configure the integration, ones who register or unregister PWAs. + + 2. **Project Managers**: users who work with Project Professional and PWA. + + 3. **Team Members**: users who are assigned as a resource and who are assigned to TFS work items. + +3. If you have customized Category permissions, verify that team members have the following Security Categories: **Create New Task or Assignment**, **Create Object Links**, **Open Project**, **View Project Site**, and **View Project Schedule in Project Web App**(Project Server 2010). + + ![Security categories, My Projects for team members](_img/alm_pwa_addcategoriesteammembers.png "ALM_PWA_AddCategoriesTeamMembers") + + For Project Server 2013, Permission mode, select: Open Project, View Project Site, and View Project Schedule in Project Web App. + + To modify the category permissions for a selected user in a category, select the category in the **Selected Categories** list, and then select **Allow** for the permissions that you want to allow. + +4. Save your changes. + + For more information, see [Add a user account in Project Server 2010](http://go.microsoft.com/fwlink/?LinkId=207279) or [Plan user access in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262117).. + +### <a name="pwa_sp"></a> 2-4 Add accounts to a PWA security group (SharePoint mode) + **Required for:** ![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode") + +1. From the PWA home page, open **Site settings** from the gear icon. + + ![Open site settings for PWA (PS 2013)](_img/alm_tfsps_pwasitesettings.png "ALM_TFSPS_PWASiteSettings") + +2. Open Site Collection Administrators and add the TFS service account. + +3. Open **People and groups**. + + ![Open People and Groups for PWA (PS 2013)](_img/alm_tfsps_pwapeopleandgroups.png "ALM_TFSPS_PWAPeopleAndGroups") + +4. Choose the group to which you want to add accounts. + + ![Choose the group in PWA to add accounts (PS 2013)](_img/alm_tfsps_pwapandg_team.png "ALM_TFSPS_PWAPAndG_Team") + + 1. **Team Members for Project Web App**: accounts assigned as resources in the project plan or to the Assigned To field for a work item. Or, add the Active Directory group used to manage these resources. + + 2. **Administrators for Project Web App**: the service accounts for Team Foundation Server, the Project Server web application pool, and Project Server Event Handler. Also, add the accounts of users who configure the integration by running the **TfsAdmin ProjectServer RegisterPWA/UnRegisterPWA** commands + + 3. **PWA Site Collection Administrators** : the accounts of users who configure the integration by running the **TfsAdmin ProjectServer RegisterPWA/UnRegisterPWA** commands + + 4. **Project Managers for Project Web App**: accounts of users of Project Professional. + + > [!TIP] + > To view all the default groups, choose **More**. To view permissions assigned to each group, choose **Settings, View Group Permissions**. To learn more, see [Plan user access in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262117). + +5. On the group page, choose **New, Add users**. + +6. Type the name of each account or Active Directory group to add to the selected group. + + ![Add accounts to a group for PWA (PS 2013)](_img/alm_tfsps_pwa_addaccount.png "ALM_TFSPS_PWA_AddAccount") + +7. Choose **Share**. + +### <a name="pool"></a> 2-5 Add user accounts to the Active Directory Enterprise Resource Pool + **Required for:** ![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode"), ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode"), and ![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode") + +1. From the PWA settings page, under Operational policies, choose Active Directory resource pool synchronization. + + ![Open Active Directory Resource Pool Sync](_img/alm_pwa_setactivedirectresouce.png "ALM_PWA_SetActiveDirectResouce") + +2. Add the Active Directory group of TFS team members to the enterprise resource pool. + + ![Active Directory Enterprise Resource Pool](_img/alm_pwa_activatesyncgroup.png "ALM_PWA_ActivateSyncGroup") + +## <a name="grant_sharepoint_permissions"></a> 3. Grant SharePoint Server permissions + Grant the specified permissions using SharePoint Central Administration. Or, you can use Windows PowerShell. + +|Task|Set for these configurations:| +|----------|-----------------------------------| +|[3-1. Grant Full Control Connect permissions to start the Project Server Service Application](#full_control)<br /><br /> - TFS service account<br />- Service account for the Project Server Event Handler|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode") ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")| +|[3-2. Add TFS service account to the Site Collection Administrators for the SharePoint site](#site_collection)|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")| + +### <a name="full_control"></a> 3-1 Grant Full Control Connect permissions to start the Project Server Service Application + **Required for:** ![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode") and ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode") + +1. On to the SharePoint server for Project Server, open **SharePoint Central Administration**, and under **Application Management**, choose **Manage service applications**. + + ![Choose Manage service applications](_img/alm_sp_manageserviceapps.png "ALM_SP_ManageServiceApps") + +2. Highlight the row for **Project Server Service Application** by clicking within the row but not the name of the application. In the ribbon, choose **Permissions**. + + ![Select permissions](_img/alm_alm_sp_msa_selectpermissions.png "ALM_ALM_SP_MSA_SelectPermissions") + +3. Type the name of the service account for TFS, and then choose **Add**. + +4. Make sure that the name of the newly added service account is highlighted, and then select the **Full Control** check box. Choose **OK**. + + ![Connection permissions full control](_img/alm_sp_msa_fullcontrol.png "ALM_SP_MSA_FullControl") + +5. Repeat steps 3 and 4, this time add the service account for Service account for the Project Server Event Handler. If there is more than one service account, make sure you add it. + + For more information, see [Restrict or enable access to a service application](http://technet.microsoft.com/library/ff463596.aspx). + +### <a name="site_collection"></a> 3-2. Add TFS service account to the Site Collection Administrators group + **Required for:** ![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode") + +1. On to the SharePoint server for Project Server, open **SharePoint 2013 Central Administration**, and choose **Site settings** from the gear icon. + + ![Open SharePoint Site Settings for PS 2013](_img/alm_tfsps_sitesettings.png "ALM_TFSPS_SiteSettings") + +2. Choose **Site collection administrators**. + + ![Open Site Collection Administrators for PS 2013](_img/alm_tfsps_sitecollectionadmin.png "ALM_TFSPS_SiteCollectionAdmin") + +3. Type the name of the TFS service account, and choose OK when done. + +## <a name="grant_db_permissions"></a> 4. Grant Project Server database permissions + **Required for:** ![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode"), ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode"), and ![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode") + + Grant permissions to both the service account for TFS and the service account for the Project Server web application pool to update the database or databases for each PWA instance. This step is required for all deployments, both Project Server 2010 and Project Server 2013. + +1. On the data-tier server for Project Server, open **SQL Server Management Studio**. + +2. In the **Server type** list, select **Database Engine**. + +3. In **Server name**, type the name of the server that hosts the databases for Project Server, and then choose **Connect**. + + > [!NOTE] + > If SQL Server is installed on a cluster, type the name of the cluster, not the computer name. If you have specified a named instance, type the server and instance name in the following format: *DatabaseServer\InstanceName*. + + SQL Server Management Studio opens. + +4. Expand **Databases**, right-click or open the context menu for the database for the instance of PWA, and then choose **Properties**: + + - For Project Server 2010: **PWA_Reporting** or **PWA_Publishing** + + - For Project Server 2013: **ProjectWebApp** + +5. On the **Permissions** page. add the service account for TFS, (required for Project Server 2010 and Project Server 2013, Permission mode). + + For SQL Server 2008: Choose **Add** to add an account. + + For SQL Server 2012: Choose **Search** to add an account. + + ![Add user (SQL Server 2012)](_img/alm_alm_sql_2012_adduser.png "ALM_ALM_SQL_2012_AddUser") + +6. Grant these permissions based on the database you've selected: + + - For Project Server 2010: **PWA_Reporting**: **Alter any Schema**, **Create Table**, **Delete** , **Execute**, **Insert**, **Select**, and **Update**. + + - For Project Server 2010: **PWA_Publishing**: **Select** + + - For Project Server 2013: **ProjectWebAppAlter any Schema**, **Create Table**, **Delete** , **Execute**, **Insert**, **Select**, and **Update**. + + ![Check permissions](_img/alm_sql_grantpermissions.png "ALM_SQL_GrantPermissions") + +7. Repeat steps 5 through 6, this time add the service account of the Project Server web application pool. This is required for all deployments. + +8. Repeat steps 4 through 7 for each instance of PWA that will participate in data synchronization with TFS. + +## <a name="add_tfadmingroup"></a> 5. Add user accounts to Team Foundation Administrators group + **Required for:** ![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode"), ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode"), and ![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode") + +1. On the application-tier server, [Open the Team Foundation Administration Console](../../tfs-server/command-line/open-admin-console.md), and open **Group Membership**. + + ![Application tier, choose Group Membership](_img/alm_tac_groupmembership.png "ALM_TAC_GroupMembership") + +2. Open **Team Foundation Administrators**. + +3. Choose Windows User or Group and then choose Add. + + ![Add Windows account](_img/alm_tac_addwindowsaccount.png "ALM_TAC_AddWindowsAccount") + +4. Enter the name of the accounts of users who configure the integration by running the **TfsAdmin ProjectServer RegisterPWA/UnRegisterPWA** commands. + + ![Check name](_img/alm_tac_checkname.png "ALM_TAC_CheckName") + +## <a name="twa_apsi"></a> 6. Grant Administer Project Server integration permissions + **Required for:** ![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode"), ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode"), and ![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode") + + Accounts of users who configure the TFS-Project Server integration require Administer Project Server Integration permission set to allow. Set this for each project collection that you map to a PWA. + + From the Security page for the project collection, either open the permissions for a user account or a Windows account that you've added to TFS for administering project server integration. Set the permissions for Administer Project Server Integration to Allow. + + ![Set Administer Project Server Integration perm](_img/alm_tfsps_twa_setadminpsinteg.png "ALM_TFSPS_TWA_SetAdminPSInteg") + +## <a name="add_twa"></a> 7. Add accounts to Team Foundation groups + **Required for:** ![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode"), ![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode"), and ![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode") + + Accounts of users who work in Project Professional or TFS require permissions to view or contribute to TFS. + + From the TFS web portal administration Security page for the team project, you can add accounts to either the project collection or each team project. Add accounts or the Active Directory groups to the appropriate roles. + + ![Choose the team project group and add members](_img/addausertoateamprojectgroup.png "Addausertoateamprojectgroup") + + Verify that user accounts or groups have been added to the following TFS groups for each team project that will participate in data synchronization: + +- **Contributor** role: Team members who work in a TFS project that is integrated with Project Server. This includes all user accounts assigned as resources in the project plan or to the Assigned To field for a work item. These users submit status updates that flow into the status queue for the project manager. + +- **Reader** role: Users who modify enterprise project plans that are mapped to a team project. + + For more info, see [Add users to team projects](../../accounts/add-users.md). + +## Permission checklist + Use the following checklist to review that all permissions have been set according to your version and authentication mode. Remember that permissions must be granted to accounts for all PWA instances, team projects, and project collections that will participate in data synchronization between TFS and Project Server. If you customize a role or security categories for a role, you might inadvertently remove required permissions. + +|Account|Permissions|Project Server 2010|Project Server 2013 (Permission mode)|Project Server 2013 (SharePoint mode)|Application| +|-------------|-----------------|-------------------------|---------------------------------------------|---------------------------------------------|-----------------| +|Service Account for TFS|[Global](#global) and [Category](#category) permissions|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")||PWA| +||[Administrators for Project Web App group](#pwa)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|PWA||PWA| +||[Site Collection Administrators group](#site_collection)|||![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|SharePoint Central Administration| +||[Connect permissions to the Project Server Service Application (Full Control)](#full_control)||![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")||SharePoint Central Administration| +||[PWA_Reporting and PWA_Publishing databases](#grant_db_permissions)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|||SQL Server Management Studio| +||[ProjectWebApp database](#grant_db_permissions)||![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|SQL Server Management Studio| +|Service account for the Project Server web application pool (Note 1)|[Administrators for PWA group](#pwa)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|PWA| +||[PWA_Reporting and PWA_Publishing databases](#grant_db_permissions)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|||SQL Server Management Studio| +||[ProjectWebApp database](#grant_db_permissions)||![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|SQL Server Management Studio| +vice account for the Project Server Event Handler|[Connect permissions to the Project Server Service Application (Full Control)](#full_control)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")||SharePoint Central Administration| +||[Administrators for PWA group](#pwa)||![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|PWA| +|User accounts who will configure the integration and run the **TFSProjectServer registerPWA** command|[Administrators for PWA group](#pwa)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|PWA| +||[Site Collection Administrators group](#site_collection)|||![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|SharePoint Central Administration| +||[Team Foundation Administrators group](#add_tfadmingroup)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|Team Foundation Administration Console| +||[Administer Project Server integration](#twa_apsi)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|TFS web portal | +|User accounts who will map components to support TFS-Project Server integration, but not register PWAs|[Administer Project Server integration](#twa_apsi)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|TFS web portal | +rs of Project Professional|[Project Manager group for each PWA instance](#pwa)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|PWA| +||[TFS Readers group](#add_twa)||![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|TFS web portal | +|Users assigned as project resources or have TFS work items assigned to them|[Team Members for the PWA App group](#pwa)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|PWA| +||[Plan groups, categories, and RBS in Project Server 2013 (Note 2)](http://msdn.microsoft.com/library/cc197354.aspx) (Note 2)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")||PWA| +||[Enterprise project pool and to the project resource pool for the project plan](#pool)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|PWA| +||[TFS Contributors group](#add_twa)|![Project Server 2010 Classic Mode](_img/alm_tfs-ps_classicmode.png "ALM_TFS-PS_ClassicMode")|![Project Server 2013 Permission Mode](_img/alm_tfs-ps_permmode.png "ALM_TFS-PS_PermMode")|![Project Server 2013 SharePoint Mode](_img/alm_tfs-ps_spmode.png "ALM_TFS-PS_SPMode")|TFS web portal | + + **Notes:** + +1. Some deployments might have more than one service account for the Project Server Web Application Pool. See [Service accounts](#service_accounts) to determine the service accounts for these application pools. + +2. The Security Categories assigned to Team Members by default are sufficient; however, if these categories have been customized, then some permissions might have been removed. The following categories are required: **Create New Task or Assignment**, **Create Object Links**, **Open Project**, **View Project Site**, and **View Project Schedule in Project Web App** (Project Server 2010), and **Open Project**, **View Project Site**, and **View Project Schedule in Project Web App** (Project Server 2013, Project permission mode). + +## Q & A + +<a name="auth2010"></a> +### Q: How do I determine or change the Authentication mode in SharePoint 2010? + **A:** From SharePoint 2010 Central Administration site, open Manage web applications from the Application Management section, and then open the PWA application. + + Verify that Classic Mode Authentication is selected. + + ![PWA 2010 Authentication](_img/alm_tfsps_pwa_2010_authentication.png "ALM_TFSPS_PWA_2010_Authentication") + + If it isn't, you'll need to [create a new PWA instance that uses Windows-Classic authentication](http://technet.microsoft.com/library/gg276326.aspx). + +<a name="perm2013"></a> +### Q: How do I determine the Permission mode in SharePoint 2013? + **A:** From the PWA home page, use the gear icon to open **PWA settings**. + + ![PWA page, select PWA settings](_img/alm_tfsps_pwa_pwasettings.png "ALM_TFSPS_PWA_PWASettings") + + If SharePoint Permissions mode is set, you'll see this page: + + ![PWA Settings when SharePoint Permission mode](_img/alm_tfsps_pwa_sp_settings.png "ALM_TFSPS_PWA_SP_Settings") + + If Project Permissions mode is set, you'll see this page, which includes a section titled **Security**. You'll also see additional links: + + ![PWA Settings when Project Permission mode](_img/alm_tfsps_pwa_pm_settings.png "ALM_TFSPS_PWA_PM_Settings") + +### Q: How do I switch permission modes in Project Server 2013? + **A:** By default, PWA apps are created using SharePoint permission mode. + + If you switch from SharePoint permission mode to classic Project Server permission mode, you have to manually configure your security permissions structure in Project Server 2013. Switching between SharePoint permission mode and Project Server permission mode deletes all security-related settings. + + To switch permission mode, see [Set-SPProjectPermissionMode](http://technet.microsoft.com/library/jj219486.aspx). + +### Q: What other resources are available? + **A**: You might find answers to additional questions from the following resources: + +|Project Server 2010|Microsoft Project Server 2013| +|-------------------------|-----------------------------------| +|- [Manage users in Project Server 2010](http://go.microsoft.com/fwlink/?LinkId=207275)<br />- [Plan for administrative and service accounts (Project Server 2010)](http://go.microsoft.com/fwlink/?LinkId=207273)<br />- [Plan groups, categories, and RBS in Project Server 2010](http://technet.microsoft.com/library/cc197354.aspx)<br />- [Manage security groups in Project Server 2010](http://go.microsoft.com/fwlink/?LinkId=207274)<br />- [Project Server 2010 global permissions](http://go.microsoft.com/fwlink/?LinkId=207276)<br />- [Project Server 2010 default group permissions](http://go.microsoft.com/fwlink/?LinkId=207277)<br />- [Add resources to the enterprise resource pool](http://go.microsoft.com/fwlink/?LinkId=203356)<br />- [Active Directory Resource Pool Synchronization (Project Server 2010 settings)](http://technet.microsoft.com/library/gg982985.aspx)|- [Plan user access in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262117)<br />- [Plan for administrative and service accounts (Project Server 2013)](http://go.microsoft.com/fwlink/?LinkId=262110)<br />- [Plan groups, categories, and RBS in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262111)<br />- [Manage security groups in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262112)<br />- [Manage security group synchronization with Active Directory in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262113)<br />- [Manage users in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262114)<br />- [Manage Active Directory Resource Pool synchronization in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262115)<br />- [Default group permissions in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262116)| + +## Related notes + [Configuration quick reference](configuration-quick-reference.md) + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) + [Synchronization process overview](synchronization-process-overview.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/change-deployment-configuration.md b/docs/work/tfs-ps-sync/change-deployment-configuration.md new file mode 100644 index 00000000000..387ae001e6d --- /dev/null +++ b/docs/work/tfs-ps-sync/change-deployment-configuration.md @@ -0,0 +1,138 @@ +--- +title: Change your deployment configuration | TFS +description: Understand how you might need to perform additional administrative task when you change your settings - Team Foundation Server (TFS). +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 962eba84-0c28-4c94-8abc-3cdb9f1df53a +ms.author: kaelli +ms.manager: douge +ms.date: 01/12/2017 +--- +# Change your deployment configuration + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> After you have configured Visual Studio Team Foundation Server (TFS) and Microsoft Project Server to support data synchronization, you might need to perform additional administrative tasks when you change your deployment. For example, you might need to remove, re-register, or re-map a component before or after you move or delete a team project, a team project collection, or an application-tier server. Before you change your deployment or perform maintenance operations, you should consider the impact that these operations have on the synchronization process. + + Review the following notes and resources before you change a deployment where you have integrated TFS and Project Server. + + + +## <a name="deleting"></a> Delete components + Whenever you delete a mapped component, you should unmap it and review the following guidelines: + +- **Delete an enterprise project plan or a team project**. Before you delete a mapped project plan or a mapped team project, you must first unmap all project plans that are mapped to the team project. For more information, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). + +- **Delete an instance of Project Web Access or Project Web App (PWA)**. Before you delete an instance of PWA, you must first remove all associations of team project collections that are mapped to the instance and then unregister it. For more information, see [Remove a component](remove-component-from-synchronization.md) and [Remove an Instance of PWA from participating in synchronization](remove-component-from-synchronization.md#removepwa). + +- **Delete a team project collection**. Before you delete a mapped collection, you should unmap it by following the procedure in [Remove a component](remove-component-from-synchronization.md). + + > [!NOTE] + > If you delete not only a mapped project collection but also all instances of PWA that were mapped to it, you will remove all mappings of work items that have been synchronized. However, the instance of PWA that is registered to Team Foundation Server remains registered. + +## <a name="tpc"></a> Move or split a project collection + To move a mapped collection to another instance of TFS and continue to synchronize data on the new application-tier server, you must perform several steps, based on the following choices: + +- All collections move to a different instance of TFS but remain mapped to the same instance of PWA. A recommended practice is to move or split all collections that are mapped to the same instance of PWA at the same time. + +- Some collections move to a different instance of TFS, but some collections remain with the same instance. In this case, you must unmap the collections that are split and remap them to the same or to a different instance of PWA that will then be registered with the second instance of TFS. An instance of PWA can be registered to only one instance of TFS. + +#### To move all mapped collections to a different instance of TFS + +1. Move or split the collection. + + For more information, see [Manage team project collections](../../tfs-server/admin/manage-team-project-collections.md). + +2. Grant required permissions to the service account for the second instance of Team Foundation Server. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +3. Add the **Administer Project Server integration** permission to those accounts that will run the `TfsAdmin ProjectServer` command-line tool for the second project collection. + +4. Add the accounts of users who will configure and register instances of PWA to the **Team Foundation Administrators** group for the second project collection. + +5. Register the instance of PWA with the second application-tier server by using the **/RegisterPWA** and `/force` command options. + +6. Wait until the synchronization engine runs through one cycle of updates and updates the instance of PWA. + +7. Unregister the instance of PWA from the first application-tier server by using the **/UnRegisterPWA** command option. + +#### To move some collections to a different instance of TFS and a different instance of PWA + +1. Use the **/UnmapPwaFromCollection** command option with the **/force** switch to unmap each collection that you are moving. + + > [!WARNING] + > By using the **/force** switch, you break all associations between enterprise project plans and team projects that are defined for the collection. + +2. Move or split the collection. + + For more information, see [Manage team project collections](../../tfs-server/admin/manage-team-project-collections.md). + +3. Assign all required permissions. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +4. Use the **/RegisterPWA** command option to register the second instance of PWA with the second application-tier server. + +5. Use the **/MapPwaToCollection** command option to map each collection that you moved to the second instance of PWA. + +6. Use the **/MapPlapToTeamProject** command option to map each plan to the team project that was moved to a different collection. + + For more information, see the following topics: + +- [Move or clone TFS](../../tfs-server/admin/move-across-domains.md) + +- [Move TFS to a new domain ( environment move)](../../tfs-server/admin/move-across-domains.md) + +- [Register an instance of PWA](register-pwa.md) + +- [Map a team project collection](map-team-project-collection-to-pwa.md) + +- [Manage mappings](manage-mappings-enterprise-project-team-project.md) + +## <a name="tfs"></a> Move a Team Foundation Server to a new machine or environment + You must re-register each instance of PWA that is registered with the current machine. + +#### To move an instance of Team Foundation Server to which an instance of PWA is mapped + +1. Move the instance of Team Foundation Server. + + For more information, see [Move or clone TFS](../../tfs-server/admin/move-clone-hardware.md). + +2. Assign all required permissions. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +3. Use the **/RegisterPWA** command option to register the instance of PWA with the second application-tier server. + +4. Wait until the synchronization engine runs through one cycle of updates and updates the instance of PWA. + +5. Use the **/UnRegisterPWA** command option to unregister the instance of PWA from the first application-tier server. + +> [!NOTE] +> You must specify the **/force** switch when you move the project collection to a different instance of Team Foundation Server. If the instance identifier has not changed, you do not have to specify the **/force** switch. + +## <a name="upgrading"></a> Upgrade from Project Server 2007 to Project Server 2010 + If you have an instance of Project Web Access that is registered to TFS and the synchronization process is running for a collection, you must perform the following procedures before you upgrade the instance from Project Server 2007 to Project Server 2010: + +1. Perform the steps on the following page of the Microsoft website: [Database-attach full upgrade to Project Server 2010](http://go.microsoft.com/fwlink/?LinkId=211859) + +2. To enable the synchronization after the upgrade, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ``` + cd %programfiles(x86)%%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles**. + +3. Enter the following command: + + ``` + TfsAdmin ProjectServer /RegisterPwa /tfs:TfsURL /previousPWA:URLFor2007 /PWA:URLFor2010 + ``` + + For more information, see [Register an instance of PWA](register-pwa.md). + +## Related notes + [Remove a component](remove-component-from-synchronization.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/change-synchronization-retry-or-resubmit-interval.md b/docs/work/tfs-ps-sync/change-synchronization-retry-or-resubmit-interval.md new file mode 100644 index 00000000000..f9d055c8192 --- /dev/null +++ b/docs/work/tfs-ps-sync/change-synchronization-retry-or-resubmit-interval.md @@ -0,0 +1,30 @@ +--- +title: Change the synchronization retry or resubmit interval | TFS +description: Understand how a conflict or failed synchronization occurs while in the synchronization process - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: ce1d4951-e460-43d3-8852-a0f170012142 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Change the synchronization retry or resubmit interval + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +When a conflict or failed submission occurs during the synchronization process, the most recent submit status for a work item is set to **Failed**. The synchronization engine automatically tries to resubmit the work item in case the issue has been resolved. By default, the retry or resubmit interval is one hour, and you can set it in the Team Foundation Server registry. + + You can change the resubmit interval for a team project collection by modifying the value in the collection hive using Powershell as described in the following page on the Microsoft website: [Updating the TF Registry using Powershell](http://go.microsoft.com/fwlink/?LinkId=207285). You use the following path to specify the configuration setting: + +``` +$collectionHive.SetValue("/Configuration/ProjectServer/StatusingResubmitInterval", "IntervalValue") +``` + + You replace *IntervalValue* with the resubmit interval expressed in seconds. For example, you specify 600 to define a resubmit interval of 10 minutes. + +> [!NOTE] +> If you specify a resubmit interval value of 0, you disable resubmissions. + +## Related notes + [Synchronization process overview](synchronization-process-overview.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/configuration-quick-reference.md b/docs/work/tfs-ps-sync/configuration-quick-reference.md new file mode 100644 index 00000000000..d8abf5baaef --- /dev/null +++ b/docs/work/tfs-ps-sync/configuration-quick-reference.md @@ -0,0 +1,105 @@ +--- +title: Configuration quick reference | TFS +description: Install and configure the Team Foundation Server Extensions for the Project Server and the two server products - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 55197d77-ff30-4534-8f59-7cf8cc329806 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Configuration quick reference + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> Before you can synchronize data between Visual Studio Team Foundation Server and Microsoft Project Server, you must first install the Team Foundation Server Extensions for Project Server and configure the two server products. You can use this topic as a quick reference to install software, assign permissions, configure integration, and verify data synchronization. To perform more customized configurations or for more detailed procedures, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + +> [!NOTE] +> To ask a question of the community, see the following forum post on the Microsoft website: [Team Foundation Server and Project Server Integration](http://go.microsoft.com/fwlink/?LinkId=207282). + + + **Requirements** + + To follow the procedures in this topic, you must belong to the following groups or have the following permissions: + +- To register an instance of Project Web Access or Project Web App (PWA), you must belong to the **Team Foundation Administrators** group and to the Administrators group for each instance of PWA that you will register. + +- To grant Team Foundation permissions: you must belong to the **Team Foundation Administrators** group or your **View instance-level information** and **Edit instance-level information** permissions must be set to **Allow**. You must also have access to the **Team Foundation Administration Console** or the **Group Membership** dialog box for a team project collection by using Team Explorer. + +- To grant Project Server permissions: you must have **Manage users and groups global permission** for an instance of PWA. You must also have access to Project Server through PWA. + +- To grant SSP permissions: you must belong to the **Farm Administrators** group, the **SharePoint Administration** group, or the administrators group for the Web application that supports Project Server. Group membership will depend on the security architecture of your deployment. + +- To use `stsadm.exe`: you must be an administrator on the local computer. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="prerequisites"></a> Prerequisite software + The following table summarizes the prerequisite software that you must install and configure before you install Team Foundation Server Extensions for Project Server. + +> [!IMPORTANT] +> Installing or upgrading to Visual Studio Team Foundation Server 2012 requires 64-bit machines. Also, to install Team Foundation Server Extensions for Project Server requires that Project Server is installed on 64-bit machines. + +|Step|Task|Machine|Notes| +|----------|----------|-------------|-----------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|Install one of the following versions of Project Server:<br /><br /> - Project Server 2010 with SP1.<br /><br /> - Project Server 2013.|On each web-tier and application-tier server that hosts Project Server 2010 or Project Server 2013 and that will participate in data synchronization.|**Important:** For Project Server 2010, the SharePoint web application for the instance of PWA must be set to **Classic Mode Authentication**. You will not be able to register the instance of PWA if it is set to **Claims Based Authentication**.<br /><br /> For Project Server 2013, you can configure the SharePoint web application for the instance of PWA to either **Classic Mode Authentication** or **Claims Based Authentication**.| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|Install one of the following versions of Office Project:<br /><br /> - Project Professional 2007 with SP2 and the update that you can download from the following page on the Microsoft website: [Description of the Office Project 2007 hotfix package (Project-x-none.msp): February 23, 2010](http://go.microsoft.com/fwlink/?LinkId=211633).<br /><br /> - Project Professional 2007 with SP3.<br /><br /> - Project Professional 2010.<br /><br /> - Project Professional 2013.|Each client machine on which Project Professional will be used to synchronize data between enterprise project plans and team projects.|You must install Visual Studio 2012 or Team Explorer 2012 on each client machine to get the plug-in that supports integration between Team Foundation Server and Project Server.| + +> [!NOTE] +> You do not need to deploy Active Directory, but it is highly recommended so that you can more easily synchronize the accounts of users, groups, and services that are valid within Team Foundation Server and Project Server. + +## <a name="install"></a> Install software + The following table summarizes the installation steps that you must perform. To install software, you must have administrative permissions on the machine where the software is installed. + +|Step|Task|Machine|Notes| +|----------|----------|-------------|-----------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|Install Visual Studio Team Foundation Server 2013.|Each application-tier server for Team Foundation Server that will participate in data synchronization with Project Server.|The software that supports data synchronization is automatically installed with Team Foundation Server. For more information, see [Install](../../tfs-server/install/get-started.md).| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|Install Team Foundation Server Extensions for Project Server.|On each Web tier and App tier server that hosts Project Server 2010 or Project Server 2013 and that will participate in data synchronization.|Only those machines that have Team Foundation Server Extensions for Project Server installed can participate in data synchronization between the two products.<br /><br /> For more information, see [How to: Add Project Server to Team Foundation Server](https://msdn.microsoft.com/library/hh548139.aspx).| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|Install Visual Studio 2013 or Team Explorer 2013.<br /><br /> For downloads, see: [Visual Studio 2013 downloads](http://go.microsoft.com/fwlink/?LinkId=262122)|Each client machine on which Project Professional will be used to synchronize data between enterprise project plans and team projects.<br /><br /> Each client machine or server that you will use to configure and administer the integration of the two products.<br /><br /> **Important:** You must install Visual Studio 2012 to obtain the add-in for Project Professional, but you do not require a client access license (CAL) to interface with the integration of Team Foundation Server and Project Server.|Each project manager who will manage enterprise project plans that will participate in data synchronization with Team Foundation must install the add-in to Project Professional. Also, each administrator who will configure the integration of the two server products requires the software that is installed with Visual Studio 2012. This software configures the add-in to Project for the integration.| + + +## <a name="assign"></a> Assign permissions + To assign permissions, you must have administrative permissions for the software elements that you are configuring. You must assign administrative permissions for Team Foundation Server and an instance of Project Web Access or Project Web App (PWA) to the user who will configure the integration of these products. The following table summarizes the permissions that you must assign. You should make these assignments after you have installed Team Foundation Server Extensions for Project Server. You assign most permissions through the Team Foundation administration console for a project collection, the **Project Security** dialog box for a team project, or through the Manage Users or Manage Groups web pages for an instance of PWA. + + To assign permissions, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="configure"></a> Configure integration + The following table summarizes the minimum set of steps that you must take to configure integration of the two products. Each step uses the `TfsAdmin` command-line tool, which you can access by opening a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + +``` +cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE +``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + + To perform more customized configurations, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to run the `TfsAdmin` command-line tool on a server that is running Windows Server 2008. To open an elevated Command Prompt window, click **Start**, right-click **Command Prompt**, and then click **Run as Administrator**. For more information, see the following page on the Microsoft website: [User Access Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +|Step|Task| +|----------|----------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|**Register an instance of PWA**. You must register each instance of PWA that supports the enterprise project plans with the application-tier server that hosts the team projects that will participate in data synchronization. You should register all instances of PWA that are used by enterprise project plans that must synchronize their data with a team project.<br /><br /> `TfsAdmin ProjectServer /RegisterPWA /pwa:pwaUrl /tfs:tfsUrl`<br /><br /> Replace *pwaUrl* with the Uniform Resource Locator (URL) of the instance of PWA and *tfsUrl* with the URL of the application-tier server.<br /><br /> The following example registers *PWAInstance* to AdventureWorksServer:<br /><br /> **TfsAdmin ProjectServer /RegisterPWA /pwa:http://PWAServerName/PWAInstance /tfs:http://AdventureWorksServer:8080/tfs/**<br /><br /> **Note:** The default port for Team Foundation Server is 8080. For more information, see [Verify or Correct Port Assignments](../../tfs-server/architecture/required-ports.md).| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|**Map the PWA instance with a team project collection**. You must map each instance of PWA that supports an enterprise project plan. You should map all instances of PWA that are used by enterprise project plans that must synchronize data with team projects.<br /><br /> `TfsAdmin ProjectServer /MapPWAtoCollection /pwa:pwaUrl /collection:tpcUrl`<br /><br /> Replace *tpcUrl* with the URL of the team project collection.<br /><br /> The following example maps DefaultCollection to PWAInstance, which is defined on AdventureWorksServer:<br /><br /> **TfsAdmin ProjectServer /MapPWAToCollection /pwa:http://PWAServerName/PWAInstance /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection**| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|**Upload default field mappings**. You must define the field mappings for each project collection that you have mapped to an instance of PWA. You can use the default field mappings as a starting place and customize them only if necessary.<br /><br /> `TfsAdmin ProjectServer /UploadFieldMappings /collection:tpcUrl /useDefaultFieldMappings`<br /><br /> The following example uploads the default field mappings to DefaultCollection on the AdventureWorksServer:<br /><br /> **TfsAdmin ProjectServer /UploadFieldMappings /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /useDefaultFieldMappings**<br /><br /> For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md).| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|**Associate an enterprise project plan with a team project**. Before you can map a project plan, you must first publish it to Project Server, and the team project must be defined in the collection. You must map each enterprise project plan to the team project that contains data that you want to synchronize. You also must indicate which types of work items you want to participate in synchronization.<br /><br /> `TfsAdmin ProjectServer /MapPlanToTeamProject /collection:tpcUrl /enterpriseproject:PlanName /teamproject:ProjectName /workitemtypes:ListOfTypes`<br /><br /> Replace *PlanName* with the name of the enterprise project plan, *ProjectName* with the name of the team project, and *ListOfTypes* with the names of the types of work items. For example, you can specify the following types of work items to support an agile process as "*User Story,Task*" or *"User Story", Task*. If your project is based on a formal (CMMI) process template, you can specify "*Requirement,Task*". Do not include a space after the comma.<br /><br /> The following example maps MyEnterpriseProjA to MyTeamProjB in DefaultCollection on AdventureWorksServer and specifies that user stories and tasks will participate in synchronization:<br /><br /> **TfsAdmin ProjectServer /MapPlanToTeamProject /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection/ enterpriseproject:MyEnterpriseProjA /teamproject:MyTeamProjB /workitemtypes:"User Story,Task"**<br /><br /> **Note:** The `/nofixedwork` flag is optional. Specify this flag only if you want Project Server tasks that are mapped to work items in Team Foundation not to be assigned to the **Fixed Work** task type.<br /><br /> If you mapped your project plan while it was open, you should close and re-open it for the changes to register. When you open the plan, you should verify whether the **Publish to Team Project** and **Work Item Type** (Text30) columns appear. The presence of these columns indicates that the project plan has been mapped to a team project.| +|![Step 5](_img/procguid_6.png "ProcGuid_6")|**Add team members to the enterprise resource pool**. For each task that is published to the team project, you must assign a valid contributor of the team project as a resource. You must also identify as a valid contributor any team member who submits work items that are synchronized with Project Server. To identify valid contributors, you must add team members from the enterprise resource pool to the resources for the enterprise project plan. For more information, see [Add resources to the enterprise resource pool](http://go.microsoft.com/fwlink/?LinkId=203356).| + +## <a name="verify"></a> Verify data synchronization + You can verify that data is being synchronized by performing the steps that the following table summarizes. Perform these steps by using the enterprise project plan and the team project that you mapped when you configured the integration. + +|Step|Task|Procedure| +|----------|----------|---------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|**Program Manager**: Add a task, and set it to synchronize with Team Foundation Server.|**Important:** Make sure that you close the project plan after it was mapped and then re-open it.<br /><br /> In a mapped enterprise project plan, define a user story, task, or requirement. Make sure that you assign the following fields: **Resource Names**, **Publish to Team Project**, and **Work Item Type (TFS)**. Save the plan, and then publish it to Project Server.<br /><br /> You can verify that the plan has been published if you check the status bar in your project plan.| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|**Team Lead**: Verify that the tasks that were added in step 1 appear as work items in Team Foundation.|In Team Explorer, run the Product Backlog or Work Breakdown query. The new work items should appear within a few minutes of the plan being published to Project Server.<br /><br /> Open the work item, and verify that the **Project Server Sync** message has been added to the history field.| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|**Team Lead**: Change one of the work items that was replicated in Team Foundation. Add a work item, and set it to publish to Project Server.|Open the replicated work item, click the **Project Server** tab, and modify a field. For example, you can modify the **Remaining Work** field.<br /><br /> Create a work item, set the **Submit to Project Server** field to **Yes**, and save the work item.<br /><br /> **Note:** You can submit only those work items that are types that were configured to participate in data synchronization.| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|**Program Manager**: Review and approve the updated status for the submitted work items.|From a web browser, open your Approval Center, and verify that a status update appears for the updated work item and the newly created work item. You should expect the status update to appear after a few minutes. Accept the status updates, and add a comment.<br /><br /> **Note:** If your integration is with Project Server 2010, you can verify whether the comments that you add to a status update appear in the History field of the work item.<br /><br /> To update your enterprise project plan with the changes that were submitted from Team Foundation, you must accept the updates.| +|![Step 5](_img/procguid_5.png "ProcGuid_5")|**Program Manager**: Verify that the approved work items appear in the enterprise project plan.|Open the enterprise project plan, and confirm that the approved work items appear. You may have to close the project plan and reopen it to view the updates.| +|![Step 6](_img/procguid_6.png "ProcGuid_6")|**Team Lead**: Review the Project Server Sync messages and the status of the submitted work items.|In Team Explorer, refresh your team project. Open the work items that were submitted to Project Server, and review the message that was added to the **History** field. Click the **Project Server** tab, and review the values that were assigned to the status fields for Project Server. You should expect the updates to appear after a few minutes.| + +## Related notes + [System and setup requirements](system-and-setup-requirements.md) + [Map integration components](map-integration-components.md) + [Synchronization process overview](synchronization-process-overview.md) + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/configure-tfs-project-server-integration.md b/docs/work/tfs-ps-sync/configure-tfs-project-server-integration.md new file mode 100644 index 00000000000..15c1652b35a --- /dev/null +++ b/docs/work/tfs-ps-sync/configure-tfs-project-server-integration.md @@ -0,0 +1,208 @@ +--- +title: Configure TFS-Project Server integration | TFS +description: Configure several points of integration between them before you can synchronize - Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-wit +ms.assetid: 809f7eb3-f336-4f7d-b7a8-2b67366f3915 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Configure TFS-Project Server integration + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> Before you can synchronize data between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server, you must first configure several points of integration between them. + + As the following illustration shows, you integrate these products in six steps. + + ![Provisioning Project Server-Team Foundation Server](_img/pstfs_provisioning.png "PSTFS_Provisioning") +Configuring the Integration of Team Foundation Server and Project Server + +> [!NOTE] +> To ask a question of the community, see the following forum post on the Microsoft website: [Team Foundation Server and Project Server Integration](http://go.microsoft.com/fwlink/?LinkId=207282). + + **Requirements** + + To perform the procedures in this topic, you must belong to the following groups or have the following permissions: + +- Before you can configure the integration of the two server products, you must install the Team Foundation Server Extensions for Project Server. Before you install the extensions, make sure that all [prerequisite software has been installed and configured](system-and-setup-requirements.md). + +- To grant permissions in Team Foundation: **Team Foundation Administrators** group or your **View instance-level information** and **Edit instance-level information** permissions must be set to **Allow**. You must also have access to the **Team Foundation Administration Console** or the **Group Membership** dialog box for a team project collection by using Team Explorer. + +- To grant permissions in Project Server: **Manage users and groups global permission** for an instance of Project Web Access or Project Web App (PWA). You must also have access to Project Server through PWA. + +- To grant SSP permissions: the **Farm Administrators** group, the administrators group for the Web application that supports Project Server, or the **SharePoint Administration** group. Group membership will depend on the security architecture of your deployment. + +- To use `stsadm.exe`: you must be an administrator on the local computer. + +## <a name="CollectInformation"></a> Collect information + The following table summarizes the information that you need to configure synchronization of data in enterprise project plans with team projects. + +|Parameter or information|Example|Notes| +|------------------------------|-------------|-----------| +|Uniform Resource Locator (URL) for the application-tier server for Team Foundation Server|**http**://*ServerName:Port/VirtualDirectoryName*<br /><br /> If you do not specify a virtual directory, specify the URL in the following format:<br /><br /> **http**://*ServerName:Port*|You register an instance of PWA with a TFS application-tier server with Visual Studio Team Foundation Server 2013 installed. For more information, see [System and setup requirements](system-and-setup-requirements.md).| +|URL for each instance of PWA that supports an enterprise project plan that contains data to synchronize.|**http**://*PWAServerName/PWA*<br /><br /> To determine the URL for a PWA:<br /><br /> 1. Open SharePoint Central Administration on the server that hosts the instance.<br />2. Under **Application Management**, choose **Manage service applications**.<br />3. On the Service Applications page, choose **Project Server Service Applications**.<br />4. Choose the URL that corresponds to the instance that you want to access.|You must register each instance of PWA with the application-tier server that hosts the team project collection and team projects that have data that you want to synchronize. Also, you can register an instance of PWA only if Team Foundation Server Extensions for Project Server is installed on the App Tiers for Project Server.| +|URL for each team project collection that hosts team projects that contain data to synchronize.|**http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If you do not specify a virtual directory, specify the URL in the following format:<br /><br /> **http**://*ServerName:Port/CollectionName*|You must map each team project collection that hosts team projects that contain data that you want to synchronize with an enterprise project.| +|Names of the enterprise project plans to synchronize.|MyEnterpriseProject or "My Enterprise Project"|You must associate each enterprise project plan with a team project.| +|Names of the team projects that contain work items to synchronize with an enterprise project plan.|MyTeamProject or "My Team Project"|You may associate multiple enterprise project plans with the same team project.| +|Names of the types of work items to synchronize.|You can specify any type of work item that is defined in your team project to synchronize with tasks in the project plan. If you have customized any field that is required to support synchronization, you must customize the field mappings to reflect your changes. For more information, see [Field mapping reference](field-mapping-xml-element-reference.md).<br /><br /> User stories and tasks are most often synchronized in team projects that are based on the process template for agile projects from the Microsoft Solutions Framework (MSF). Requirements and tasks are most often synchronized in team projects that are based on the process template for Capability Maturity Model Integration (CMMI) from MSF.|For each enterprise project plan that you map to a team project, you can specify the types of work items to synchronize. Tasks in Project Server are synchronized with types of work items in Team Foundation.<br /><br /> After you have made your initial configuration, you can change the types that are mapped. For more information, see [Specify work item types](specify-wits-to-synchronize.md).| +|(Optional) Name of the field in PWA to display the name of the work item type.|pjTaskText10|The default value is pjTaskText30. You can specify a different field to display the name of the work item type.| +|(Optional) Support for fixed work.|`/noFixedWork` option|When you associate an enterprise project plan with a team project, you can allow or restrict the assignment of **Fixed Work** to tasks in Project Professional that are synchronized to Team Foundation. Fixed work is one of three types of tasks that you can use in Project. For more information, see [Change the task type Project uses to calculate task duration](http://go.microsoft.com/fwlink/?LinkId=203354).| +|(Optional) Additional fields to synchronize.|For example, you can add fields such a cost center, team name, or health status.|By default, the following seven fields in Team Foundation are synchronized:<br /><br /> 1. Title<br />2. Assigned To<br />3. Completed Work<br />4. Remaining Work<br />5. Original Estimate<br />6. Start Date<br />7. Finish Date<br /><br /> Only mapped fields are synchronized. To synchronize additional fields, you must customize the field mappings. For more information, see [Field mapping reference](field-mapping-xml-element-reference.md).| +|Accounts to grant administrative permissions|Names of administrators who will synchronize data from their plans with data in team projects|You must grant **Administer Project Server integration** permissions to administrators who will use the `TFSAdmin` command-line tool to manage the mappings of enterprise project plans to team projects.| +|Team Foundation users|User names or security distribution groups|You must add members of team projects who are assigned to tasks in Team Foundation to the enterprise resource pool and to the resource pool of each enterprise project plan. You must also grant these users permission to log on to Project Server.| + +### <a name="DeterminePWAURL"></a> + +## <a name="GrantPermissions"></a> Grant permissions + After you have installed the Team Foundation Server Extensions for Project Server, you must grant permissions to service accounts and user accounts. + +- See [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="RegisteringPWA"></a> Register an instance of PWA + +> [!IMPORTANT] +> If you are integrating Team Foundation Server with Project Server 2010, make sure that you have first installed all cumulative updates and then run the SharePoint Configuration Wizard. If you skip these steps, the integration between Team Foundation Server and Project Server 2010 will fail. For more information, see [Prerequisite software](configuration-quick-reference.md#prerequisites). + + As the first step in configuring integration, you must register each instance of PWA that supports the project plans with the application-tier server that hosts the project collection that hosts the team project. You should register all instances of PWA that are used by enterprise projects that must synchronize their data with TFS. As the following illustration shows, you can register multiple instances of PWA to the same server that is running TFS. + + ![Register PWAs to Team Foundation Server](_img/pstfs_registerpwas.png "PSTFS_RegisterPWAs") + +#### To register an instance of PWA + +1. Open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ``` + cd %programfiles%\Microsoft Visual Studio 11.0\Common7\IDE + ``` + + On a 64-bit edition of Windows, replace **%programfiles%** with **%programfiles(x86)%**. + +2. Enter the following command, and then choose the ENTER key: + + ``` + TfsAdmin ProjectServer /RegisterPWA /pwa:pwaUrl /tfs:tfsUrl + ``` + + Replace *pwaUrl* with the URL of the instance of PWA and *tfsUrl* with the URL of the application-tier server. + + Wait until the following messages appear: + + **Registering PWA** *pwaUrl*. + + **You have successfully registered PWA** *pwaUrl*. + +3. Repeat step 2 for each instance of PWA that supports enterprise project plans that you want to synchronize with Team Foundation. + +## <a name="MapCollection"></a> Map a team project collection to an instance of PWA + As the second step in configuring integration, you must map each instance of PWA that supports an enterprise project plan. You should map all instances of PWA that are used by enterprise projects that must synchronize data with team projects. + +#### To map an instance of PWA to a team project collection + +- At a command prompt, enter the following command, and then choose the ENTER key: + + ``` + TfsAdmin ProjectServer /MapPWAtoCollection /pwa:pwaUrl /collection:tpcUrl + ``` + + Replace *pwaUrl* with the URL of the instance of PWA and *tpcUrl* with the URI of the team project collection. + + Wait until the following messages appear: + + **Mapping team project collection** *tpcUrl* **to PWA** *pwaUrl*. + + **You have successfully mapped team project collection** *tpcUrl* **to PWA** *pwaUrl*. + +## <a name="FieldMapping"></a> Map TFS fields to Project Server fields + You must map fields for each team project collection that you have mapped to an instance of PWA. You can use the default mappings, or you can customize and upload a mapping file. For more information about the default mappings, see [Field mapping reference](field-mapping-xml-element-reference.md). + + You can define additional fields whose data you want to synchronize. You can add Project fields to data that Team Foundation stores, and you can add Team Foundation fields to data that Project Server stores and displays in an enterprise project plan. + +#### To use the default mappings + +1. At a command prompt, enter the following command, and then choose the ENTER key: + + ``` + TfsAdmin ProjectServer /UploadFieldMappings /collection:tpcUrl /useDefaultFieldMappings + ``` + + Replace *tpcUrl* with the URL of the team project collection. + +2. Wait until the following messages appear: + + **Uploading field mappings to team project collection** *tpcUrl*. + + **You have uploaded field mappings to team project collection** *tpcUrl*. + +3. Repeat steps 1 and 2 for each collection that you have mapped to an instance of PWA. + +#### To customize the mapping + +1. Identify the fields in Project Server and their reference field names to add to the data store in Team Foundation. + +2. Identify the fields in Team Foundation and their reference field names to add to Project Server. + + For more information, see [Index of work item fields](../../work/guidance/work-item-field.md). + +3. Modify the file that maps fields in Project Server. + + For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md). + +4. (Optional) Add a column to display the fields in the enterprise project plan. + +## <a name="EnterpriseProject"></a> Associate an enterprise project with a team project + As the third step in configuring integration, you must map each enterprise project to the team project that contains data that you want to synchronize. As the following illustration shows, you can associate multiple enterprise projects with the same team project. + + ![Associate enterprise projects with a team project](_img/pstfs_associateeptotp.png "PSTFS_AssociateEPtoTP") + +#### To associate an enterprise project plan with a team project + +1. At a command prompt, enter the following command, and then choose the ENTER key: + + ``` + TfsAdmin ProjectServer /MapPlanToTeamProject /collection:tpcUrl /enterpriseProject:EnterpriseProjectName /teamproject:TeamProjectName /workItemTypes:ListOfWorkItemTypes /projectFieldForWorkItemType:ProjectFieldName + ``` + + Replace *tpcUrl* with the URL of the team project collection, *EnterpriseProjectName* with the name of the enterprise project plan, *TeamProjectName* with the name of the team project, and *ListOfWorkItemTypes* with the names of the types of work items. For example, you can specify the following types of work items to support an agile process as “*User Story,Task* or *“User Story,Task*. Do not include a space after the comma. + + Specify **/nofixedWork** if you want to prohibit fixed task type assignments. You can also specify the **/projectFieldForWorkItemType** argument and the name of a field in Project to store the type of work item. + + Wait until the following messages appear: + + **Mapping enterprise project** *EnterpriseProjectName* **to team project** *TeamProjectName*. + + **You have successfully mapped enterprise project** *EnterpriseProjectName* **to team project** *TeamProjectName*. + +2. Repeat step 1 for each enterprise project that you want to associate with a team project. + + If you mapped your project plan while it was open, you should close and re-open it for the changes to register. When you open the plan, you should verify whether the **Publish to Team Project** and **Work Item Type** (Text30) columns appear. The presence of these fields indicates that the project plan has been mapped to a team project. + +> [!NOTE] +> After you map your enterprise project plan with a team project, you can change the types of work items that are mapped. For more information, see [Specify work item types](specify-wits-to-synchronize.md). + +## <a name="ResourcePool"></a> Add Team Foundation users to the enterprise resource pool + To assign and manage Team Foundation users as resources in Project, you must add them to the enterprise resource pool. To make this process easier, you can configure PWA to automatically synchronize the security groups with groups of the same name in Active Directory. Also, you can synchronize users and resources in Project Server with the users in Active Directory across multiple domains and forests. + +#### For information about how to add users to the enterprise resource pool, see the following pages on the Microsoft website: + +- **For Project Server 2013**: + + - [Manage Active Directory Resource Pool synchronization in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262115) + + - [Manage security group synchronization with Active Directory in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262113) + + - [Manage users in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262114) + +- **For Project Server 2010**: + + - [Active Directory Resource Pool Synchronization (Project Server 2010 settings)](http://technet.microsoft.com/library/gg982985.aspx) + + - [Manage Enterprise Resource Pool synchronization with Active Directory in Project Server 2010](http://go.microsoft.com/fwlink/?LinkId=203359) + + - [Add resources to the enterprise resource pool](http://go.microsoft.com/fwlink/?LinkId=203356) (Project Server 2010) + +## Related notes + [Map integration components](map-integration-components.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/customize-field-mapping-tfs-project-server.md b/docs/work/tfs-ps-sync/customize-field-mapping-tfs-project-server.md new file mode 100644 index 00000000000..6753341af9e --- /dev/null +++ b/docs/work/tfs-ps-sync/customize-field-mapping-tfs-project-server.md @@ -0,0 +1,295 @@ +--- +title: Customize the field mapping between TFS and Project Server |TFS +description: Associate the fields in Visual Studio Team Foundation Server (TFS) with the one in Project Server to Synchronize data between the Project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: e2785458-f618-42b4-ab77-fbe4cb41c493 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Customize the field mapping between TFS and Project Server + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> To synchronize data between an enterprise project plan and a team project, you must associate the work-item fields in Visual Studio Team Foundation Server (TFS) with the fields in Microsoft Project Server. You can add fields and specify how they synchronize by customizing the field mappings. You can map both built-in and custom fields in Project. For example, you can share data that does not relate to schedules (such as cost centers, team names, or health status) if you add the fields that store these types of data to the mappings. + + You maintain one set of field mappings for each team project collection that hosts team projects that you want to synchronize with Project Server. You must define the field mappings for each team project collection that you have mapped to an instance of Project Web Access or Project Web App (PWA). You can upload the default mappings, or you can customize a mapping file and upload it. To upload the default mappings, see [Upload Mappings](#upload) later in this topic. + +> [!NOTE] +> The mappings for the integration of TFS and Project Server are distinct from the mapping file for Microsoft Project. For more information, see [Customize the Microsoft Project field mapping file](https://msdn.microsoft.com/library/ms404686.aspx). + + As the following illustration shows, you customize the mappings in five steps: + + ![Workflow for Customizing PS-TFS Field Mapping](_img/pstfs_fieldmapping_workflow.png "PSTFS_FieldMapping_Workflow") +Customizing the Field Mappings Between Team Foundation Server and Project Server + +> [!NOTE] +> You can update the mapping file as often as you want. The fields that appear on the **Project Server** tab are updated for each type of work item that participates in data synchronization. You must not manually change the definitions for the **Project Server** tab. For more information, see [Customize the Project Server Tab](#customizetab) later in this topic. + + +> [!NOTE] +> For a demonstration video, see the following page on the Microsoft website: [Managing Field Mappings for Integration of Team Foundation Server and Project Server](http://go.microsoft.com/fwlink/?LinkId=222613). + + **Requirements** + + To complete the procedures in this topic, you must have the **Administer Project Server integration** permission set to **Allow**. In addition, the TFS service account must be granted the **Administer Project Server integration**. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="dmappings"></a> Default mappings + The mappings determine which fields get synchronized when a user updates information in TFS or Project Server. Each of the following synchronization types has its own set of mappings: + +- For **publish synchronization**, the data in Project Server updates the data in TFS. You use the **targetToTfs** element to specify the field in Project Server that updates the field in TFS. + +- For **status synchronization**, the data in TFS is submitted to the status queue in Project Server. You use the **tfsToTarget** element to specify the field that updates the status queue field in Project Server. + + For more information about these two types of synchronization, see [Synchronization process overview](synchronization-process-overview.md). + + The following table lists the default set of fields that are mapped between TFS and Project Server. The table also indicates which types of work items use the fields based on the default process templates that TFS provides. You should not modify these mappings if you are mapping to a team project that was created from a process template that is based on Agile Software Development or Capability Maturity Model Integration (CMMI) Process Improvement. If you are mapping to a team project that was created from the Scrum process template, you will need to make some modifications as [Required Changes to Make When Mapping to a Team Project That Was Created From the Scrum Process Template](#scrummodifications) describes later in this topic. + + For more information about mappings and the synchronization process, see [Field mapping reference](field-mapping-xml-element-reference.md). + +|Team Foundation field|Project Server field|Status Queue field|Work item types in Agile|Work item types in CMMI|Work item types in Scrum| +|---------------------------------------------------------------------|--------------------------|------------------------|------------------------------|-----------------------------|------------------------------| +|Title|Task Name|Title|All|All|All| +|Assigned To|Resources|Resources|All|All|All| +|Completed Work|Task Actual Work|Resource Actual Work|Task|Task|None| +|Remaining Work|Task Remaining Work|Resource Remaining Work|Task|Task|Task| +|Original Estimate|Baseline Work||Task|Bug, Change Request, Issue, Requirement, Risk, and Task|None| +|Start Date|Task Start|Resource Start|Task and User Story|Task and Requirement|None| +|Finish Date|Task Finish|Resource Finish|Task and User Story|Task and Requirement|None| + +### <a name="scrummodifications"></a> Required changes to make when mapping to a team project that was created from the Scrum process template + There are two changes you must make to enable data flow from a team project created from a [Scrum process](../guidance/scrum-process.md) process template. You must add the Completed Work and Original Estimate fields to the Task work item type, and you must remove the elements that require the Remaining Work field to be empty when a team member changes the state to **Done** or **Removed**. + +##### To update the Scrum task type definition + +1. Open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ``` + cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + +2. To export the type definition for Task, type the following command, substituting your data for the arguments that are shown here, where *CollectionURL* specifies the URL of a team project collection, *ProjectName* specifies the name of a team project defined within the collection, and "*DirectoryPath\FileName.xml*" specifies the name and location for the file to export. Then choose **Enter**. + + ``` + witadmin exportwitd /collection:CollectionURL /p:"ProjectName" /n:"Task" /f:"DirectoryPath\FileName.xml" + ``` + +3. In a text editor or in Visual Studio, open the file you exported. + +4. Within the `FIELDS` definition section, add this code snippet before the element for Remaining Work: + + ``` + <FIELD name="Completed Work" refname="Microsoft.VSTS.Scheduling.CompletedWork" type="Double" reportable="measure" formula="sum"> +    <HELPTEXT>The number of units of work that have been spent on this task</HELPTEXT> + </FIELD> + <FIELD name="Original Estimate" refname="Microsoft.VSTS.Scheduling.OriginalEstimate" type="Double" reportable="measure" formula="sum"> +    <HELPTEXT>Initial value for Remaining Work - set once, when work begins. </HELPTEXT> + </FIELD> + ``` + +5. Within the `<WORKFLOW>` section, remove the following code snippet from both `<STATE value="Done">` and `<STATE value="Removed">` definitions: + + ``` + <FIELD refname="Microsoft.VSTS.Scheduling.RemainingWork"> + <EMPTY /> + </FIELD> + ``` + +6. Within the `<FORM>` section, add the following `Control` elements: + + ``` + <Control FieldName="Microsoft.VSTS.Scheduling.OriginalEstimate" Type="FieldControl" Label="Original Estimate:" LabelPosition="Left" /> + <Control FieldName="Microsoft.VSTS.Scheduling.CompletedWork" Type="FieldControl" Label="Completed:" LabelPosition="Left" /> + ``` + +7. Save and close the file. + +8. Import the file, substituting your data for the arguments that are shown. + + ``` + witadmin importwitd /collection:CollectionURL /p:"ProjectName" /f:"DirectoryPath\FileName.xml" + ``` + +9. Refresh your team project or work items page to verify the changes. + + For more information, see [Export and import work item types](https://msdn.microsoft.com/library/ms404856.aspx), [Modify a field or add a custom field](../customize/add-modify-field.md), and [Design and customize a work item form](../reference/design-work-item-form.md). + +## <a name="dadditional"></a> Determine additional fields to map + Determine the following information for each field that you want to synchronize in addition to the default fields: + +- The reference name of the TFS field. If you want to synchronize a field in Project Server with a field that you must create in TFS, first create the field in each type of work item that you are synchronizing. For more information, see [Index of work item fields](..//guidance/work-item-field.md) and [Modify a field or add a custom field](../customize/add-modify-field.md). + +- The name of the field in Project Server that will update the TFS field. For a list of available fields, see [Restrictions on mapping fields](restrictions-mapping-ps-fields.md). + +- The name of the TFS field to be updated in Project Server and the name of the field in Project Server that will update the mirror field in TFS. + +- Whether to display the fields on the work item form. You set the value of the `displayTfsField` attribute to `true` for fields that you want to appear on the work-item form. You set the value of the `displayTfsMirror` attribute to `true` for work-item form. + +- Whether to resolve data conflicts by allowing the value of the TFS field to overwrite the value of the field in Project Server or to maintain both values. This decision determines the value of the `onConflict` attribute. When **onConflict=PsWins** is set, the value of the field in Project Server overwrites the value of the field in Team Foundation. For more information, see [Field Elements and Attributes](field-mapping-xml-element-reference.md#feandattributes). + +- Additional values that you must define to support pick lists or custom lookup tables in Project Server. + +### Restrictions on data that you can map + After you determine which fields you want to map, note the following restrictions: + +- You can send only task-level information, pjTask* fields, from Project Server to TFS. + +- You can send only resource-level information, pjResource* fields, from TFS to the status queue of Project Server. + +- The Title field is the only field that you can send both to TFS and to the status queue. + +- Rollup is automatically calculated for the Assigned To, Completed Work, and Remaining Work fields. You cannot map additional fields and have rollup calculated for them. For more information, see [Work with resource rollup](work-with-resource-rollup.md). + +- You must make sure that the data types or units of each field that you map conform to the field mapping criteria for standard and custom enterprise fields. For more information, see “Data Types and Field Mapping Criteria in [Restrictions on mapping fields](restrictions-mapping-ps-fields.md). + +- You can map fields that are associated with pick lists in TFS. However, you must create lookup tables in Project Server to match the pick lists. You cannot automatically synchronize pick lists and lookup tables. + + For more information, see [Restrictions on mapping fields](restrictions-mapping-ps-fields.md). + +### Example: mapping the team name to appear in Project + In the following example, the custom string field in TFS, MyCompany.MyOrg.DevTeamName, is mapped to an enterprise custom text field in Project Server, My Company Team Name. You can use this example to display in Project Professional the name of the team that is associated with a task. + +``` +<field tfsName="MyCompany.MyOrg.DevTeamName" tfsMirrorName="Mirror.MyCompany.MyOrg.DevTeamName" displayTfsField="false" displayTfsMirror="false" onConflict="DoNothing"> +   <tfsToTarget> +   <target provider="ProjectServerStatusQueue" name=" My Company Team Name" /> +   </tfsToTarget> +   <targetToTfs> +      <target provider="ProjectServerPublished" name=" My Company Team Name" /> +   </targetToTfs> +</field> +``` + + Neither field appears on the work item form. Also, if the values do not match, each field retains its own value. + +### Example: displaying the area and iteration paths in Project + You can map the **Area** (System.AreaPath) and **Iteration** (System.IterationPath) fields in TFS so that they appear in your project plans. Because these tree path fields change frequently, you should map them as text fields in Project. Project managers who use these fields must manually enter the full area path or iteration path. + +> [!IMPORTANT] +> The current implementation of TFS and Project Server integration does not support automatic synchronization of allowed value lists, pick lists, global lists, or tree path lists that are defined for mapped fields between the two server products. For the best experience, you must make manual entries in the project plan that match those in TFS. If you specify an entry that is not valid, a validation dialog box will appear when you publish the plan. + + To add the Area and Iteration fields to a project plan, perform the following actions: + +1. Add two customer enterprise fields to Project Server, and label them as **Area (TFS)** and **Iteration (TFS)**. + + For more information, see the following page on the Microsoft website: [Creating Lookup Tables and Enterprise Custom Fields](http://go.microsoft.com/fwlink/?LinkId=209696). + +2. Export the field mappings from the team project collection where the team projects are defined. + + For more information, see [Download Mappings to a File](#downloadmappings) later in this topic. + +3. Add the following code to the file: + + ``` + <field tfsName="System.AreaPath" tfsMirrorName="Mirror.System.AreaPath" displayTfsField="true" displayTfsMirror="true"> +         <tfsToTarget> +           <target provider="ProjectServerStatusQueue" name="Area (TFS)" /> +         </tfsToTarget> +         <targetToTfs> +           <target provider="ProjectServerPublished" name="Area (TFS)" /> +         </targetToTfs> +       </field> +       <field tfsName="System.IterationPath" tfsMirrorName="Mirror.System.IterationPath" displayTfsField="true" displayTfsMirror="true"> +         <tfsToTarget> +           <target provider="ProjectServerStatusQueue" name="Iteration (TFS)" /> +         </tfsToTarget> +         <targetToTfs> +           <target provider="ProjectServerPublished" name="Iteration (TFS)" /> +         </targetToTfs> +       </field> + + ``` + +4. Import the updated field mappings file as [Upload Mappings](#upload) describes later in this topic. + +5. Synchronize your project plan with Project Server. + +6. Add the two new columns for the new fields, Area (TFS) and Iteration (TFS), to your project plan + + Changes made to the **Area** and **Iteration** fields in Team Foundation will be synchronized with these fields in your project plan. Also, you can update these fields in Project and publish your changes to Team Foundation if you specify values that have been defined in Team Foundation. + +## <a name="downloadmappings"></a> Download the mappings to a file + +> [!NOTE] +> You can download mappings only from a team project collection to which they have been uploaded. If you want to download the default mappings to a file, you must first upload the default mappings, as described in [To upload the default mappings](#upload) later in this topic. As an alternative, you can copy the contents of the default mappings. For more information, see [Field mapping reference](field-mapping-xml-element-reference.md). + +#### To download the mappings to a file + +1. To run the **TfsAdmin** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ``` + cd %programfiles%\Microsoft Visual Studio 11.0\Common7\IDE + ``` + + On a 64-bit edition of Windows, replace **%programfiles%** with **%programfiles(x86)%.**. + +2. Type the following command, and then choose Enter. + + ``` + TfsAdmin ProjectServer /DownloadFieldMappings /collection:tpcUrl /filePath:MappingFile + ``` + + Replace *tpcUrl* with the uniform resource locator (URL) of the team project collection, and replace *MappingFile* with the path and name of the file that you will customize. + +3. Wait until the following messages appear: + + **Downloading** *MappingFile* **to Team Project Collection** *tpcUrl*. + + **You have successfully downloaded field mapping file** *MappingFile* **to Team Project Collection** *tpcUrl*. + +## <a name="updatemappings"></a> Update the mappings + For each field that you want to add to the mapping file, you specify the `field` element and its subelements and attributes. For more information, see [Field mapping reference](field-mapping-xml-element-reference.md). + +## <a name="upload"></a> Upload the mappings + You upload mappings by using the **UploadFieldMappings** command. You can upload the default mappings by using the `/usedefaultfieldmapping` option. Otherwise, you must specify a file that contains the mapping elements. + +#### To upload the default mappings + +1. At the command prompt, type the following command, and then choose ENTER. + + ``` + TfsAdmin ProjectServer /UploadFieldMappings /collection:tpcUrl /usedefaultfieldmappings + ``` + + Replace *tpcUrl* with the URL of the team project collection. + +2. Wait until the following messages appear: + + **Uploading default field mappings to** *CollectionUri*. + + **You have successfully uploaded field mappings to collection** *CollectionUri*. + +#### To upload the mappings from a file + +1. At the command prompt, type the following command, and then choose ENTER. + + ``` + TfsAdmin ProjectServer /UploadFieldMappings /collection:tpcUrl /filePath:MappingFile /force + ``` + + Replace *tpcUrl* with the URL of the team project collection, and replace *MappingFile* with the path and name of your custom mapping file. Specify **/force** if you are updating the existing mappings. + +2. Wait until the following messages appear: + + **Uploading** *MappingFile* **to Team Project Collection** *tpcUrl*. + + **You have successfully uploaded field mapping file** *MappingFile* **to Team Project Collection** *tpcUrl*. + +## <a name="customizetab"></a> Customize the Project Server tab + When you associate an enterprise project plan with a team project, the Project Server tab is added to the work item form, as the following illustration shows. The tab is added to only those types of work items that you specify to participate in data synchronization. You customize this tab by setting the `displayTfsField` or `displayTfsMirror` attributes to `true` for those fields that you want to have appear on the form. + + ![Project Server Tab default fields](_img/pstfs_projectservertab.png "PSTFS_ProjectServerTab") +Project Server tab + +> [!IMPORTANT] +> The field mappings that are defined for the team project collection determine the fields that appear on the **Project Server** tab. After this tab has been added to a work item type for a team project, you can update it by modifying the field mappings for the collection. If you manually customize the work item form by adding fields to the **Project Server** tab or changing its location on the form, the tab may not get automatically updated with future changes that you make to the field mappings. If this condition occurs, you can modify the tab manually. For more information, see [Added elements to WIT definitions](xml-elements-added-to-wit-definition.md). + + For more information about each default field that appears on the **Project Server** tab, see [Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md). + +## Related notes + [Specify work item types](specify-wits-to-synchronize.md) + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/define-work-item-types-available-synchronization.md b/docs/work/tfs-ps-sync/define-work-item-types-available-synchronization.md new file mode 100644 index 00000000000..3d382664a6b --- /dev/null +++ b/docs/work/tfs-ps-sync/define-work-item-types-available-synchronization.md @@ -0,0 +1,121 @@ +--- +title: Define the work item types available for synchronization | TFS +description: Configure the two server products before you synchronize data between Visual Studio Team Foundation Server (TFS) and Project Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: dd8f80c2-3faa-45a2-9941-1382a8b5c910 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Define the work item types available for synchronization + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> Before you can synchronize data between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server, you must configure the integration of the two server products. As part of the configuration tasks, you must associate an enterprise project plan with a team project, and you must specify the types of work items that will participate in synchronization. After you make your initial configurations and mapping, you can change the types of work items that are mapped. + + You can manage the types of work items that participate in synchronization by using the following options of the **TfsAdmin ProjectServer** command-line tool: + +- **/MapWorkItemTypes**: Defines the types of work items that can participate in synchronization for a team project. Although you can map several types, only those work items that are submitted for publishing are synchronized. + +- **/GetMappedWorkItemTypes**: Returns the list of work item types that are configured to participate in synchronization for a team project. + +- **/UnmapWorkItemTypes**: Removes work item types from participating in synchronization for a team project. + + For an overview of how to integrate the two server products, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). For an overview of how to associate an enterprise project with a team project, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). + + To use the **TfsAdmin ProjectServer** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + +``` +cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE +``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%.**. + + **Requirements** + + To use these commands, your **Administer Project Server integration** permission must be set to **Allow**. Also, the service account for Team Foundation Server must be granted the necessary permissions to interact with the instance of PWA that will participate in data synchronization. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + + +## Syntax + +``` +TfsAdmin ProjectServer /GetMappedWorkItemTypes /collection:tpcUrl teamProject:TeamProjectName +``` + +``` +TfsAdmin ProjectServer /MapWorkItemTypes /collection:tcpUrl /teamProject:TeamProjectName /workItemTypes:ListOfWorkItemTypes [/skipUIChanges] +``` + +``` +TfsAdmin ProjectServer /UnmapWorkItemTypes /collection:tpcUrl /teamProject:TeamProjectName /workItemTypes:ListOfWorkItemTypes [/force] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`tpcUrl`|Specifies the uniform resource locator (URL) of a team project collection. You specify the URL in the following format:<br /><br /> **http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If you do not specify a virtual directory, you specify the URL in the following format:<br /><br /> **http**://*ServerName:Port/CollectionName*| +|**/teamProject:** *TeamProjectName*|Specifies the name of a team project that is defined in the project collection.| +|**/workItemTypes**:`ListofWorkItemTypes`|Specifies, in a comma-delimited list, the reference names of one or more types of work items. You should specify only those types of work items whose data you want to track in Project Professional. For example, you can specify the following types of work items to support an Agile process as *“User Story,Task?* or *“User Story,Task*. Do not include a space after the comma.| +|**/skipUIChanges**|Specifies that the **Project Server** tab in the work item form should not be changed for the types that you specify. You should include this flag if you have customized the **Project Server** tab for the affected types or the `MapWorkItemTypes` command cannot complete. You can manually update a type definition. For more information, see [Added elements to WIT definitions](xml-elements-added-to-wit-definition.md).| +|**/force**|Removes all links that bind work items of the types that you specify to tasks in Project. If you use this option, you can remove types of work items from participating in data synchronization, even if one or more work items of that type that are currently being synchronized.| +|**/?** or **help**|Displays information about the command.| + +## Remarks + When you run a command, a message appears that indicates what action is being performed on what object. For example, the following message states that user stories and tasks are being configured to participate in data synchronization. + +``` +Configuring synchronization for the following work item types for team project ProjA: User Story, Task. . . +``` + + Another message appears after the command finishes. For example, the following message indicates that user stories and tasks have successfully been configured. + +``` +You have successfully configured the following work item types for team project ProjA: User Story, Task. +``` + + In addition to configuring the types of work items that can participate in synchronization, the **/MapWorkItemTypes** command performs the following operations: + +- Adds the types of work items that you specify to the set of types that participate in data synchronization. That is, the command does not unmap any existing mapped types. + +- Adds the **Project Server** tab to the forms for the types of work items that you specify. + + If a **Project Server** tab is already defined for a type of work item that you specify, that type is ignored, and no changes are made to the forms for work items of that type. + + If you try to map work item types for a team project that is not associated with an enterprise project plan, an error appears. You can map work item types only for team projects that are configured to participate in synchronization. For more information, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). + + If you remove the mapping for a work item type, the **Project Server** tab is removed from the form for that type for the team project that you unmapped. + + Before you unmap a work item type for a team project, you should delete the tasks from the enterprise project plan to remove all associations between them and work items in Team Foundation. After you delete the tasks from the enterprise project plan, you must publish it and wait for synchronization to complete. As an alternative, you can specify the `/force` flag to remove all links that bind work items to tasks for the team project. Only those work items that are of the types that you specify are removed from participating in synchronization. + +> [!TIP] +> If you delete the tasks, you may want to first copy them to another plan to maintain a record of them. + +## Examples + +### List work item types that are mapped + The following example retrieves the types of work items that are configured to participate in synchronization for the Contoso team project in DefaultCollection on AdventureWorksServer. + +``` +TfsAdmin ProjectServer /GetMappedWorkItemTypes /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection /teamproject:Contoso +``` + +### Map a work item type for a team project + The following example configures user stories and tasks to participate in data synchronization for the Contoso project. + +``` +TfsAdmin ProjectServer /MapWorkItemTypes /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection/ /teamProject:Contoso /workitemtypes:User Story, Task +``` + +### Remove mapping of a work item type for a team project + The following example removes tasks from participating in data synchronization for the Contoso project. + +``` +TfsAdmin ProjectServer /UnmapWorkItemTypes /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection/ /teamProject:Contoso /workitemtypes:Task +``` + +## Related notes + [Customize the field mapping](customize-field-mapping-tfs-project-server.md) + [Specify work item types](specify-wits-to-synchronize.md) + [Map integration components](map-integration-components.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/field-mapping-xml-element-reference.md b/docs/work/tfs-ps-sync/field-mapping-xml-element-reference.md new file mode 100644 index 00000000000..5195fc2d88c --- /dev/null +++ b/docs/work/tfs-ps-sync/field-mapping-xml-element-reference.md @@ -0,0 +1,212 @@ +--- +title: Field mapping XML element reference for TFS-Project Server integration | TFS +description: Customize the field mappings to define which fields in the Visual Studio Team Foundation Server (TFS) and Project Server to be kept synchronized +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: dfd7bc62-dd68-4412-a86d-5f82c3ad9af3 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Field mapping XML element reference for TFS-Project Server integration + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> By customizing the field mappings, you can define which fields in Visual Studio Team Foundation Server (TFS) and Microsoft Project Server should be kept synchronized and which fields are updated in the status queue for Project Server and in Team Foundation. + +> [!NOTE] +> The field mappings for integration of TFS with Project Server are distinct from the mapping file for Microsoft Project. For information about the latter file, see [Customize the Microsoft Project field mapping file](https://msdn.microsoft.com/library/ms404686.aspx). + + You maintain one set of field mappings for each team project collection that hosts team projects that you want to synchronize with Project Server. To retrieve the field mappings, you can download them to a file from the collection. After you modify the file, you can upload it to the collection, and the changes will apply to all team projects that are defined for that collection. For more information about how to download or upload field mappings, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md). + + + +## <a name="requiredfields"></a> Required Fields + The following fields must be mapped to support data synchronization. If you have customized the fields that are used to schedule work, you must customize the field mappings to reference the fields that you use. + +- System.Title must be mapped to pjTaskName. + +- System.AssignedTo must be mapped to pjResourceNames. + +- The field that you use to track the start of work in Team Foundation must be mapped to pjTaskStart. By default, this field is Microsoft.VSTS.Scheduling.StartDate. + +- The field that you use to track completed work in Team Foundation must be mapped to pjTaskFinish. By default, this field is Microsoft.VSTS.Scheduling.FinishDate. + +## <a name="defaultfields"></a> Default Fields That Are Mapped + For each TFS field, you can specify two mappings. In the first mapping, you specify the field in Project that the field in TFS updates in the status queue. In the second mapping, you specify the field in Project that updates the field in TFS. In addition, you can specify whether the TFS field appears on the work item form and how updates are made to reference and mirrored fields. + + By default, all Project fields that are mapped are also mirrored, which means that their values are stored in TFS. + +> [!IMPORTANT] +> In most configurations, you should not remove the default field mappings because the synchronization process requires them. For example, do not remove the default mappings if your enterprise project plan maps to a team project that was created from a process template that is based on either the Microsoft Solutions Framework (MSF) for Agile Software Development or the Capability Maturity Model Integration (CMMI) Process Improvement. +> +> However, if your plan maps to a team project that was created using the Visual Studio Scrum process template, you may need to remove some of the default mappings. If your project collection contains only team projects that were created using the Scrum template, you may receive an error when you configure the two server products. For best results, add Completed Work (Microsoft.VSTS.Scheduling.CompletedWork) and Original Estimate (Microsoft.VSTS.Scheduling.OriginalEstimate) to the work items that you intend to map. Also, you will need to to remove the `<EMPTY />` workflow statements from the task type definition. For more information, see [Required Changes to Make When Mapping to a Team Project That Was Created From the Scrum Process Template](customize-field-mapping-tfs-project-server.md). + + The following table describes the default mappings that are assigned to fields in Team Foundation. You can specify how you want reference and mirror fields to be updated. You can set `OnConflict` to `PSWins` to overwrite the value in Team Foundation with the value from Project Server. If you leave the `OnConflict` attribute unspecified, the fields maintain different values. For more information, review the [Field Elements and Attributes](#feandattributes) table later in this topic. + + For more information about mirrored fields and the synchronization process, see [Understand how updates to specific fields are managed](understand-how-updates-to-specific-fields-managed.md). + +|Team Foundation field|Project field|Display field on Project Server tab of work item form (`displayTfsField`)|Display mirrored field on Project Server tab of work item form (`displayTfsMirror`)|Field updates (`OnConflict`)| +|---------------------------------------------------------------------|-------------------|---------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------|------------------------------------| +|Title|Task Name|No|No|The value in Project Server replaces the value in Team Foundation.| +|Assigned To|Resources|No|No|The value in Project Server replaces the value in Team Foundation.| +|Remaining Work|Resource Remaining Work (Status Queue)<br /><br /> Task Remaining Work (Project Server)|Yes|Yes|Each value is maintained.| +|Completed Work|Resource Actual Work (Status Queue)<br /><br /> Task Actual Work (Project Server)|Yes|Yes|Each value is maintained.| +|Original Estimate|Baseline Work|No|Yes|The value in Project Server replaces the value in Team Foundation.| +|Start Date|Resource Start (Status Queue)<br /><br /> Task Start (Project Server)|No|No|The value in Project Server replaces the value in Team Foundation.| +|End Date|Resource Finish (Status Queue)<br /><br /> Task Finish (Project Server)|No|No|The value in Project Server replaces the value in Team Foundation.| + + You can display more Project fields on the **Project Server** tab of a work item form in Team Foundation if you add them to the field mappings. For more information about this tab, see [Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md). + +## <a name="elements"></a> Mapping Elements and Attributes + You use a `field` element to specify a reference field in Team Foundation to synchronize. All `field` elements are contained in the `mappingFile`, `persistables`, and `Microsoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping` container elements. + +> [!IMPORTANT] +> When you map a field from TFS to Project Server, make sure that you match the data types of those fields. Otherwise, the following error might appear when you try to upload the field mappings: +> +> **Index (zero based) must be greater than or equal to zero and less than the size of the argument list**. +> +> For more information, see [Restrictions on mapping fields](restrictions-mapping-ps-fields.md). + + The following example shows the nesting structure of XML elements. To view the default mappings, see [Default Mapping File](#default_file) later in this topic. + +``` +<mappingFile> +   <persistables> +      <Microsoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping> +         <field tfsName="System.Title" tfsMirrorName="Mirror.System.Title" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin"> +            <tfsToTarget> +               <target provider="ProjectServerStatusQueue" name="pjTaskName" /> +            </tfsToTarget> +            <targetToTfs> +               <target provider="ProjectServerPublished" name="pjTaskName" /> +            </targetToTfs> +         </targetToTfs> + </field> + +         . . . + + </Microsoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping> + </persistables> +</mappingFile> + +``` + +### Field Element Syntax + The following syntax defines the attributes of the `field` element: + +``` +<field tfsName="FieldName" tfsMirrorName="FieldMirrorName" displayTfsField="true | false" displayTfsMirror=" true | false" onConflict="PSWin"> +``` + +### Target Element Syntax + The following syntax defines the attributes of the `target` element: + +``` +<target provider="ProviderName" name="ProjectFieldName" /> +``` + + To determine the field name, prefix the concatenated friendly name with "pj". For example, the field name for Status Manager is pjStatusManager, and the field name for Custom 01 is pjCustom01. + +### <a name="feandattributes"></a> Field Elements and Attributes + The following table describes the subelements and attributes of the `field` element. You map a Team Foundation field to a Project resource field whose value you want to update during status synchronization. You map a Team Foundation field to a Project task field whose value will update Team Foundation Server during publish synchronization. Also, the units of fields that you map must conform to established criteria. For more information, see [Restrictions on mapping fields](restrictions-mapping-ps-fields.md). + +|Element|Attribute|Description| +|-------------|---------------|-----------------| +|`field`||Specifies the field in Team Foundation to be mapped and how the field should be mapped.| +||`tfsName`|Specifies the reference name of the field in Team Foundation to synchronize. You must specify a field that is defined in the team project collection. You can list all fields in a collection by running the **witadmin listfields** command. For more information, see [Manage work item fields](../reference/witadmin/manage-work-item-fields.md) +).| +||`tfsMirrorName`|Required. Specifies the reference name under which to store the value of the Project Server field in Team Foundation Server. You can prefix the reference name with "Mirror." For example, you can specify Mirror.System.Title for System.Title. **Note:** Mirror fields that you specify are created automatically. You do not have to add mirror fields to the type definition of a work item.| +||`displayTfsField`|Optional. By default, this attribute is set to **true**. If this attribute is set to **true**, the field appears on the **Project Server** tab of the work item form in Team Foundation. If this attribute is set to `false`, the field does not appear on the form. By default, only the Completed Work and Remaining Work fields appear on the form.| +||`displayTfsMirror`|Optional. By default, this attribute is set to **true**. If this attribute is set to **true**, the field appears on the **Project Server** tab of the work item form in Team Foundation. If this attribute is set to `false`, the field does not appear on the form.| +||`onConflict`|Optional. Specifies how the synchronization engine updates the reference field. The only valid value is `PSWin`.<br /><br /> When this attribute is set to `PSWin`, the value of the reference field is updated when the current value that is published from Project Server differs from the value in the mirror.<br /><br /> If you do not define this attribute, you indicate that two sets of books should be maintained. In other words, the value in Project can differ from the value in Team Foundation. By default, the values in Project always replace the values of the Title, Assigned To, Start Date, and End Date fields. By default, only the Completed Work and Remaining Work fields are maintained with two sets of books. For more information, see [Updates to Fields that Contain Hours](understand-how-updates-to-specific-fields-managed.md#updates_hours).| +|`tfsToTarget`||Specifies the name of the field in Project that Team Foundation will update.| +|`target`||Specifies the target to receive updates from Team Foundation.| +||`provider`|Specifies the name of the update provider. For `tfsToTarget`, the only valid value is `ProjectServerStatusQueue`.| +||`name`|Specifies the name of the Project field that will be updated with the value in Team Foundation. You can map only built-in or enterprise custom fields in Project Server. For a list of available fields, see [Restrictions on mapping fields](restrictions-mapping-ps-fields.md).| +|`targetToTfs`||Specifies the field mapping to synchronize updates in Project Server with Team Foundation Server.| +|`target`||Specifies the target to receive updates from Project Server.| +||`provider`|Specifies the name of the update provider. For `targetToTfs`, the only valid value is `ProjectServerPublished`.| +||`name`|Specifies the name of the field in Project that will update the field in Team Foundation. You can map only built-in or enterprise custom fields. For a list of available fields, see [Restrictions on mapping fields](restrictions-mapping-ps-fields.md).| +|`transforms`||Optional. Container element for the `transform` element.| +|`transform`|`transformType`|Specifies the type of transform to apply to the field. You can only specify the `transformType` for a `targetToTfs` and only for numeric field types. The only valid value is `ClearValueIfParent`.<br /><br /> When the synchronization engine detects a hierarchy under a work item that is synchronized with Project Server, it performs a roll-up for the work and assignments to send to Project Server. However, with the `transformType` set to `ClearValueIfParent`, the synchronization engine clears the work fields on the parent work item in Team Foundation Server to avoid incorrect data in standard Team Foundation Server reports.| + +## <a name="default_file"></a> Default Mappings + The following code lists the default field mappings that are defined when you run the `TfsAdmin ProjectServer /UploadFieldMappings` command and specify the `/useDefaultFieldMappings` option. You can download these mappings to a file and then add elements to it or modify the attributes of the listed fields. + + For a list of all fields that are added to a type of work item when you add that type to participate in data synchronization, see [Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md). + +``` +<mappingFile> + <persistables> + <Microsoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping> + <field tfsName="System.Title" tfsMirrorName="Mirror.System.Title" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin"> + <tfsToTarget> + <target provider="ProjectServerStatusQueue" name="pjTaskName" /> + </tfsToTarget> + <targetToTfs> + <target provider="ProjectServerPublished" name="pjTaskName" /> + </targetToTfs> + </field> + <field tfsName="System.AssignedTo" tfsMirrorName="Mirror.System.AssignedTo" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin"> + <tfsToTarget> + <target provider="ProjectServerStatusQueue" name="pjTaskResourceNames" /> + </tfsToTarget> + <targetToTfs> + <target provider="ProjectServerPublished" name="pjTaskResourceNames" /> + </targetToTfs> + </field> + <field tfsName="Microsoft.VSTS.Scheduling.CompletedWork" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.CompletedWork" displayTfsField="true" displayTfsMirror="true"> + <tfsToTarget> + <target provider="ProjectServerStatusQueue" name="pjResourceActualWork" /> + </tfsToTarget> + <targetToTfs> + <target provider="ProjectServerPublished" name="pjTaskActualWork" /> +            <transforms> +               <transform transformType="clearValueIfParent"> +            </transforms> + </targetToTfs> + </field> + <field tfsName="Microsoft.VSTS.Scheduling.RemainingWork" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.RemainingWork" displayTfsField="true" displayTfsMirror="true"> + <tfsToTarget> + <target provider="ProjectServerStatusQueue" name="pjResourceRemainingWork" /> + </tfsToTarget> + <targetToTfs> + <target provider="ProjectServerPublished" name="pjTaskRemainingWork" /> +            <transforms> +               <transform transformType="clearValueIfParent"> +            </transforms> + </targetToTfs> + </field> + <field tfsName="Microsoft.VSTS.Scheduling.OriginalEstimate" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.OriginalEstimate" displayTfsField="false" displayTfsMirror="true" onConflict="PSWin"> + <targetToTfs> + <target provider="ProjectServerPublished" name="pjTaskBaselineWork" /> + </targetToTfs> + </field> + <field tfsName="Microsoft.VSTS.Scheduling.StartDate" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.StartDate" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin"> + <tfsToTarget> + <target provider="ProjectServerStatusQueue" name="pjResourceStart" /> + </tfsToTarget> + <targetToTfs> + <target provider="ProjectServerPublished" name="pjTaskStart" /> + </targetToTfs> + </field> + <field tfsName="Microsoft.VSTS.Scheduling.FinishDate" tfsMirrorName="Mirror.Microsoft.VSTS.Scheduling.FinishDate" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin"> + <tfsToTarget> + <target provider="ProjectServerStatusQueue" name="pjResourceFinish" /> + </tfsToTarget> + <targetToTfs> + <target provider="ProjectServerPublished" name="pjTaskFinish" /> + </targetToTfs> + </field> + </Microsoft.TeamFoundation.Sync.Mapping.Impls.FieldMapping> + </persistables> +</mappingFile> +``` + +## Related notes + [Restrictions on mapping fields](restrictions-mapping-ps-fields.md) + [Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md) + [Upload or download field mappings](manage-field-mappings.md) + [Customize the field mapping](customize-field-mapping-tfs-project-server.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/index.md b/docs/work/tfs-ps-sync/index.md new file mode 100644 index 00000000000..af5a6733ce8 --- /dev/null +++ b/docs/work/tfs-ps-sync/index.md @@ -0,0 +1,46 @@ +--- +title: TFS-Project Server Integration index | VSTS & TFS +description: Index to topics for working with TFS-Project Server synchronization +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: D51EAF72-F73D-4012-97F9-6208232B91B7 +ms.manager: douge +ms.author: kaelli +ms.date: 07/14/2017 +--- + +# TFS-Project Server Integration + +> [!IMPORTANT] +> TFS 2017 and later versions no longer support native integration with Office Project Server. If you're working with an on-premises TFS 2015 or TFS 2013, see [Synchronize TFS with Project Server](../tfs-ps-sync/synchronize-tfs-project-server.md). + + +## Overview +- [Third-party support for synchronization](../office/sync-ps-tfs.md) +- [Native synchronization support](synchronize-tfs-project-server.md) +- [Synchronization overview](synchronization-process-overview.md) +- [Overview of integration features](overview-tfs-project-server-integration.md) + + +## Concepts + +- [Operational differences in managing projects using TFS and Project](operational-differences.md) +- [Work with resource rollup](work-with-resource-rollup.md) +- [Understand how updates to specific fields are managed](understand-how-updates-to-specific-fields-managed.md) +- [Manage projects overview](manage-projects.md) +- [Map integration components](map-integration-components.md) + +## How-to Guides + +- [Top-down planning of business requirements](top-down-plan-mapped-team-project.md) +- [Manage project details](manage-project-details.md) +- [Make Agile team progress visible](make-agile-team-progress-visible-to-the-pmo.md) + +## Reference +- [Configuration quick reference](configuration-quick-reference.md) +- [System and setup requirements](system-and-setup-requirements.md) + +## Resources + +- [Project Connect Marketplace extension](https://marketplace.visualstudio.com/items?itemName=TVT.TVT-PjO) + diff --git a/docs/work/tfs-ps-sync/known-issues-and-workarounds.md b/docs/work/tfs-ps-sync/known-issues-and-workarounds.md new file mode 100644 index 00000000000..2ab16f82013 --- /dev/null +++ b/docs/work/tfs-ps-sync/known-issues-and-workarounds.md @@ -0,0 +1,123 @@ +--- +title: Known issues and workarounds to support TFS-Project Server integration | TFS +description: Describe the known issues with the integration of Visual Studio Team Foundation Server (TFS) and Project Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 45423e0a-63f7-4fc4-8319-9344a43abed3 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Known issues and workarounds to support TFS-Project Server integration + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> This topic describes known issues with the integration between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server. To support this integration, you must have installed Team Foundation Server Extensions for Project Server on the App Tiers for Project Server. For more information, see [System and setup requirements](system-and-setup-requirements.md). + + You can resolve most issues by performing the recommended actions. + +> [!NOTE] +> For more information, see the following forum post on the Microsoft website: [Team Foundation Server and Project Server Integration](http://go.microsoft.com/fwlink/?LinkId=207282). + +## <a name="summary"></a> Summary tasks with mapped child tasks are not updated in the project plan + By design, Team Foundation Server (TFS) does not update the Project fields for summary tasks, that is, tasks that have subtasks that are mapped to work items in TFS. The synchronization process skips updates of summary tasks because the project plan calculates the work on summary tasks. Changes to non-work fields, such as Title, are also not updated for summary tasks. This behavior is a known limitation of the integration of the two server products. + +## <a name="empty"></a> Remaining Work Field Must Be Empty + When you update a task in Project whose state has been set to Done or Removed in TFS, you might receive the following validation error message: + + **The value for field 'Remaining Work' must be empty.** + + This message indicates that the `<EMPTY />` workflow statements have not been removed from the task type definition for the team project. Project sets the field to 0, while TFS expects the field to contain a null value. To resolve this issue, see [Required Changes to Make When Mapping to a Team Project That Was Created From the Scrum Process Template](customize-field-mapping-tfs-project-server.md#scrummodifications). + +## <a name="resolveerrors"></a> Resolving Specific Error Conditions + The following table provides corrective actions to specific errors that can occur when you integrate the two server products: + +|Error Condition|Resolution| +|---------------------|----------------| +|TF80070: Team Foundation encountered an error while performing the operation. It is recommended that you save your work and restart the application.|This error might appear if you specify numbers that are larger than what Project Server allows. You cannot specify a date that is later than 12/31/2049 or a number that is larger than 100,000,000,000,000 (10 to the 14th power). Project Server imposes these restrictions on DateTime and Integer fields.<br /><br /> To resolve this error condition, modify the field that exceeds the specified limits.| +|TF244069: An error occurred while checking the provisioning status of the reporting database scheme for a PWA instance.Project Server returned the following error: "TF289004: An error occurred while communicating with Project Server. Contact your Project Server administrator."|You must set the permissions for the account that is used by the application pool for the web application that hosts Project Server. Set this account as db_owner for the reporting database for Project Server. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md).<br /><br /> In addition, for Project Server 2010, the instance of PWA must be set to **Classic Mode Authentication**, not **Claims Based Authentication**. You will not be able to register the instance of PWA if it is set to **Claims Based Authentication**.| +|TF244069: An error occurred while checking the provisioning status of the reporting database schema for a PWA instance.Project Server returned the following error: "Server was unable to process request. -INVALID USE OF SYMBOLS The request failed with HTTP status 502: Proxy Error (No data record is available.)."|You will need to change the setting of the **autoDetect** attribute for the default proxy in the web.config file for the instance of Project Web Access or Project Web App (PWA) for which the error appeared. You can find the web.config file in *Drive*:\inetpub\wwwroot\wss\VirtualDirectories\80\web.config. Add the following element tags to the \<system.net> section:<br /><br /> `<defaultProxy> <proxy autoDetect="false" /> </defaultProxy>`| +|TF244069: An error occurred while checking the provisioning status of the reporting database scheme for a PWA instance.Project Server returned the following error: "TF289004: An error occurred while communicating with Project Server. Contact your Project Server administrator."|Verify that you have permissions correctly set. You must set the permissions for the account that is used by the application pool for the web application that hosts the reporting database for Project Server. Grant the account db_owner permission for the reporting database. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md).| +|TF244079: An error occurred while retrieving the URL for shared services.|You must install the two updates that are required to support Project Server 2010.After you install the updates, you must run the SharePoint Configuration Wizard. For more information, see [System and setup requirements](system-and-setup-requirements.md).| +|TF244087: The TFS Extensions for Project Server must be installed on those machines that host Project Server. See [How to: Add Project Server to Team Foundation Server](https://msdn.microsoft.com/library/hh548139.aspx).|You must install Team Foundation Server Extensions for Project Server on the following machines:<br /><br /> - For Project Server 2010: Each web-tier and application-tier server that will participate in synchronizing data with Team Foundation Server.<br /><br /> For more information, see [System and setup requirements](system-and-setup-requirements.md).| +|TF208104: You have modified one or more hierarchical link relationships that may have been locked by other processes, such as Project Server.<br /><br /> Changes that you made to individual work items were published. Changes that you made to locked links were auto-corrected.|This error can occur when you make a change in Excel to the hierarchical link relationships of work items that are synchronized and also whose task hierarchy is locked (![Locked link icon](_img/icon_lockedlink.png "Icon_lockedLink")). This message indicates that the changes that you made to the fields are published, but all changes that you made to the link hierarchy, whether the links are locked or not locked, are not published. The tree hierarchy automatically reverts to its original structure. For more information, see [Addressing Error TF208104: Hierarchical Link Relationship Is Locked](https://msdn.microsoft.com/library/dd293544.aspx).| +|TF285019: Could not submit request for user '{0}'. Contact your Project Server administrator to verify that Project Server permissions have been granted to the service account used by the synchronization engine.|After a work item has been created or updated, this error will appear in its History field when the synchronization engine attempts to submit it to Project Server. To resolve this error, you must provide additional permissions to the service account under which the synchronization engine runs. For Project Server 2010, you must provide Full Control permissions to invoke the Project Server Service Application for the SharePoint web application. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md).| +|TF287030: An error was returned while trying to synchronize a task with ID: *TaskID*. Error = "TF287035: Cannot find the following work item types for team project 'Project': . The work item types may have been deleted or renamed. The administrator for Team Foundation Server should restore the named work item type for the mapped team project, or the project manager should update the project plan with the name of the new work item type.". Contact your administrator for Team Foundation Server to verify that the required permissions to perform this operation are assigned, and that the work item type and team project exist.|Verify that all project managers have installed Visual Studio 2013.<br /><br /> If Project Server is set up to require Secure Sockets Layer (SSL) certification, you should make sure that you have correctly configured SSL for the SharePoint web Applications that support the instances of PWA that participate in data synchronization.| +|TF291011: An unsupported field type '{0}' is assigned to Project Server field: '{1}'.|When you map a field in Team Foundation to a field in Project Server, the data types of those fields must conform to the field mapping criteria. For more information, see [Data Types and Field Mapping Criteria](restrictions-mapping-ps-fields.md#datatypes).| +|TF294003: Cannot access the following PWA instance: *pwaUrl*. Project Server returned this error: "The request failed with HTTP status 401: Unauthorized." Verify that the PWA instance exists, and that the necessary permissions have been granted to the service account for the team project collection to access the PWA.|You must grant the service account for Team Foundation Server permissions to access the instance of PWA. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md).| +|TF294026: The following work item field does not exist: Microsoft.VSTS.Scheduling.CompletedWork. Contact your administrator for Team Foundation Server to add this work item field.|This error might appear under the following conditions:<br /><br /> - You try to upload the default field mappings to a team project collection that only contains team projects that were created from the Visual Studio Scrum process template. This template does not contain the **Completed Work** or **Original Estimate** fields in Team Foundation fields. You must map these fields.<br /><br /> - You can resolve this error by downloading the contents of the default field mappings, deleting the unsupported mappings, and then uploading the modified field mappings. For more information, see [Required Changes to Make When Mapping to a Team Project That Was Created From the Scrum Process Template](customize-field-mapping-tfs-project-server.md#scrummodifications).| +|TF400651: Team Foundation Server cannot be integrated with the following project because it is a SharePoint Tasks List Project: {0}. Convert the project to an Enterprise Project or select a different project.|This message appears when the project plan has been configured as a SharePoint Tasks Lists Project. To resolve this issue, see [Change a SharePoint task list into an enterprise project](http://officepreview.microsoft.com/project-server-help/change-a-sharepoint-task-list-into-an-enterprise-project-HA102848144.aspx?CTT=5&origin=HA102848179).| + +## <a name="resourcenames"></a> Resource names cannot contain special characters + Several characters, such as square brackets or corner brackets, can cause problems when you synchronize user names between Active Directory and Project Server. For more information, see [Active Directory Resource Pool Synchronization (Project Server 2013)](http://technet.microsoft.com/library/jj819320.aspx). + +## <a name="witall"></a> Work item type field lists all work item types + Text30 is the default Project field that is associated with the **Work Item Type** column that is used in synchronizing tasks with work items. If you ever connect the project plan to Team Foundation Server by using the **Choose Team Project** option on the Team ribbon menu, an additional Project field, which is labeled **Work Item Type**, becomes available. This field, with a default Project field of Text24, supports mapping of project plans that are bound to Team Foundation but does not support synchronizing plans. The Text24-based field contains the full list of work item types for the team project. You can verify that you have the correct field by pointing to it and verifying that **Text30** appears. + +## <a name="errormessages"></a> Error messages for administration commands do not identify the missing permission + When you run the `TfsAdmin` command-line tool, the following error message might appear: + + **The request failed with HTTP status 401: Unauthorized.** + + The message does not indicate which permission is required on which server. You must review the required permissions for the specific command that you tried to run. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="definingqueries"></a> Defining queries that specify null or empty field values + You can find undefined work item fields in Team Foundation by creating a work item query where the **Value** is left undefined. Corresponding Project Server fields that are mapped may contain a value of 0. For example, you can specifying the following clauses in a query to exclude work items that contain undefined or zero work: + +- And Completed Work <> (leave Value undefined) + +- Or Project Server Completed Work <> 0 + +- And Remaining Work \< > (leave Value undefined) + +- Or Project Server Remaining Work <> 0 + + For more information, see [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md). + +## <a name="changingname"></a> Changing the Name of a Mapped Enterprise Project Plan Requires You to Refresh the Mapped Team Project + If you save a mapped enterprise project under a different name and then publish the project to Project Server, you must refresh the mapped team project. Otherwise, the new name will not appear in the **Enterprise Project** field on the **Project Server** tab. For more information, see [Refresh your Team Foundation client](../../connect/work-web-portal.md?toc=/vsts/user-guide/toc.json&bc=/vsts/user-guide/breadcrumb/toc.json#refresh-the-web-portal). + +## <a name="StressError"></a> Multiple errors and deadlock conditions may be reported under stress conditions + Under certain load conditions, multiple errors and deadlock conditions may be reported in the Windows event log and in the synchronization messages. For example, these messages might appear if multiple team project collections are mapped to a single instance of PWA. No user action is required. + + The following types of errors may appear: + + **Error_GeneralServerErrorSql|Transaction (Process ID 156) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.** + + **Error_GeneralServerErrorSql|Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.** + +## <a name="accessdenied"></a> Access Denied issues occur with a network load balancing configuration + If you have administrative permissions on Project Server, a 401 Access denied message might appear after you configure the integration of the two server products. This message can appear when the deployment of Project Server contains the following components: + +- Two or more web front ends. + +- Windows Network Load Balancing (NLB) to balance them. + +- A single static IP as the NLB front end with a name that is registered with the Domain Name Service (DNS). + + To work around this problem, you must set one of two registry keys. For more information, see the following page on the Microsoft website: [You receive error 401.1 when you browse a Web site that uses Integrated Authentication and is hosted on IIS 5.1 or a later version](http://go.microsoft.com/fwlink/?LinkId=207283). + +## <a name="unsupportedconfig"></a> Multiple errors might occur when updating subprojects with the master project open + You can synchronize data between a team project and an enterprise project plan that is a subproject. You cannot manage or update any data from a master project that contains mapped subprojects. You can have a master plan that includes subprojects that are mapped to Team Foundation Server, but the Team Foundation client add-in for Project Professional blocks editing of mapped subprojects from a master plan. Specifically, the add-in prevents you from modifying or deleting a task that is scheduled to synchronize with Team Foundation from the master plan + + Several errors can appear if you open a subproject and its master project at the same time. For example, one or more of the following error messages may appear: + +- The view Team Foundation Gantt (Project Server) does not exist in this version of Project. Please choose a different view. + +- The following field that you selected for tracking the Work Item Type is already in use by the project: pjTaskText30. If you continue, the existing data would be overwritten. + + Choose 'Cancel' to prevent data from being overwritten or deleted, and then copy the data in pjTaskText30 to unused fields in the project, or contact the Administrator to change the local field. + + Do you want to proceed? + +- TF82041: Team Foundation does not support editing tasks in a subproject from within the master project. Open the subproject to edit, publish, or refresh tasks. + +- TF80069: Team Foundation encountered an error while updating data in the application. + + To resolve these errors, close the master project whenever you are modifying a mapped subproject. + +## Related notes + [Synchronization process overview](synchronization-process-overview.md) + [Remove a component](remove-component-from-synchronization.md) + [Change your deployment configuration](change-deployment-configuration.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/make-agile-team-progress-visible-to-the-pmo.md b/docs/work/tfs-ps-sync/make-agile-team-progress-visible-to-the-pmo.md new file mode 100644 index 00000000000..1cb0c039e1c --- /dev/null +++ b/docs/work/tfs-ps-sync/make-agile-team-progress-visible-to-the-pmo.md @@ -0,0 +1,161 @@ +--- +title: Make Agile team progress visible to the Program Management Office | TFS +description: Use the Project Server in order to view the work progress and resource usage - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 865f7e20-cc67-4279-b625-a27ac3f1e88f +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Make Agile team progress visible to the Program Management Office + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> As a project manager, you can view work progress and resource usage by using Microsoft Project Server while the agile development team manages their user stories and tasks in Visual Studio Team Foundation Server (TFS). You and the Project Management Office (PMO) can view schedules, progress on user stories, and rollup of resources. Meanwhile, the development team members can define, plan, and update their work in TFS. The synchronization engine for TFS and Project Server maintains scheduling data and resource usage for user stories in the mapped enterprise project plan and team project. + + Before you can view the progress of your agile team, you must first associate your enterprise project plan with their team project. For more information, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). Before you associate the plan with the project, you should review [Recommended Configurations to Support Agile Development and PMO Visibility](#Requirements) later in this topic. + +> [!NOTE] +> The process and activities that this topic describes require that your deployment of Team Foundation Server has been configured to integrate with Project Server 2010 or Project Server 2013. For more information, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + + + +> [!NOTE] +> For a demonstration video, see the following page on the Microsoft website: [Making Agile Team Progress Visible to the Project Management Office](http://go.microsoft.com/fwlink/?LinkId=222612). Some details may differ between the procedures demonstrated in the video and those described here because this video was made for the previous release of Team Foundation Server. + + **Requirements** + + To perform the procedures in this topic, the following permissions must be assigned: + +- To publish tasks from an enterprise project plan to Team Foundation, Team Foundation users must be members of the **Contributors** group for the team project. + +- To update work items in Team Foundation and submit them to Project Server, Team Foundation users must be members of the **Team Members** group for Project Web Access or Project Web App (PWA) or those users must have the Open Project and View Project Site permissions in Project. Those users must also be added to the enterprise resource pool for Project Server and the resource pool for the enterprise project plan. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="Overview"></a> Process overview of Agile development and PMO visibility + As the following illustration shows, the team lead initiates the process by planning the user stories and tasks in Team Foundation Server. The synchronization engine creates status updates for each user story that is submitted to Project Server. Because the project manager has enabled automatic approvals for the enterprise project plan, Project Server automatically updates the plan with changes that were made in Team Foundation. The project manager can review the plan for implementing new user stories and track their progress in the project plan. + + ![PS-TFS Agile wokflow process](_img/pstfs_agile_workflow.png "PSTFS_Agile_Workflow") + + Team Foundation automatically calculates the rollup of remaining and completed work by resource based on the tasks that are linked to each user story. As team members update tasks, the roll-up values are automatically updated for the user stories in the mapped project plan. The project manager must add team members to the enterprise resource pool for Project Server in addition to the resource pool for the enterprise project plan. + + The following table summarizes the tasks that are performed: + +||| +|-|-| +|**Team Lead**|In Team Foundation, the team lead and team members perform the following activities:<br /><br /> ![Step 1](_img/procguid_1.png "ProcGuid_1") Define user stories and tasks in Team Foundation, and plan iterations by using the backlog page in the web portal. Balance the work that is assigned to team members by using the capacity bars.<br /><br /> ![Step 2](_img/procguid_2.png "ProcGuid_2") Set the **Submit to Project Server** status of those user stories that will be implemented by using the web portal bulk edit feature or opening the Product Backlog query in Excel.<br /><br /> ![Step 3](_img/procguid_3.png "ProcGuid_3") As work progresses, update the **Remaining Work** and **Completed Work** for each task by using individual work items, the task board page in the web portal, or a customized Iteration Backlog query.| +|**Synchronization Engine**|![Step 4](_img/procguid_4.png "ProcGuid_4") For each user story that is submitted to Project Server, the synchronization engine creates a status update as changes occur in Team Foundation for each mapped field for each published user story.<br /><br /> When you set a rule to automatically approve all status updates, Project Server automatically updates the enterprise project plan as changes occur in Team Foundation. Otherwise, status updates appear in the approval queue for the project manager to review.| +|**Project Manager**|As a member of the PMO, you can perform the following tasks in Project Professional or your instance of PWA:<br /><br /> ![Step 6](_img/procguid_6a.png "ProcGuid_6a") View the schedule of user stories that are being implemented, and move user stories to iterations that are defined in your project plan.<br /><br /> ![Step 7](_img/procguid_7.png "ProcGuid_7") Track progress of user stories, and review progress against the portfolio of projects that you or the PMO manage.<br /><br /> ![Step 5](_img/procguid_6.png "ProcGuid_6") Review the workload that is assigned to each resource.| + +## <a name="Requirements"></a> Recommended configurations to support Agile development and PMO visibility + To support the process that was outlined in the previous section, you must map the enterprise project plan to the team project. The following table describes the recommended configurations for both the enterprise project plan and team project. For more information, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). + +|Area to configure|Recommended configuration|Notes| +|-----------------------|-------------------------------|-----------| +|Process template for team project|Microsoft Solutions Framework (MSF) for Agile Software Development|The Agile process template provides user story and task types of work items. You can use the web portal **Backlog** and **Board** pages to manage your backlog and plan and run your sprints **Note:** You can also use a customized process template.| +|Project mapping|`/workItemTypes:User Story`|When you map the enterprise project plan to the team project, specify the user story as the work item type. You can also disallow fixed work for tasks. Fixed work is one of three types of tasks that you can use in Project. For more information, see [Change the task type Project uses to calculate task duration](http://go.microsoft.com/fwlink/?LinkId=203354).| +|Field mappings|`/useDefaultFieldMappings`|You can use the default field mappings. No additional field mappings are required.| +|Resource Names|You must add team members to the Team Members group for each instance of PWA, or you must grant them the Open Project and View Project Site permissions in Project. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md).<br /><br /> Also, you must add all team leads and other team members to the enterprise resource pool for Project Server and the resource pool for the enterprise project plan.|You must grant permissions to all user accounts that are assigned as resources in the project plan or that are named in the Assigned To field for a work item. These users submit status updates that flow into the status queue for the instance of PWA.<br /><br /> All names that are assigned to the **Resource Names** field must be recognized as valid contributors of the team project.| +|Project managers|Accounts of users of Project Professional must be granted **View Project-level information** or assigned as members of the **Reader** group in Team Foundation for team projects to which they will publish.|You must grant project managers permissions to modify work items in those team projects that are mapped to their enterprise project plans.| +|Automatic approvals|Define a rule to automatically approve all updates that are submitted from Team Foundation Server to Project Server.|As a project manager, you can define approval rules by using the instance of PWA for your project plan. For more information, see [Approve or reject task updates](http://go.microsoft.com/fwlink/?LinkId=203361).| + + +<a name="ActionsAgileTeam"></a> +## Tasks and recommended practices for the Agile development team + +As a team lead, you can use the backlog, task board, and work item pages in the web portal to perform the following tasks: + +- [Define User Stories and Tasks](#DefineStories) +- [Plan an Iteration](#PlanIteration) +- [Submit User Stories to Project Server](#SubmitStories) +- [Update Remaining and Completed Work](#UpdateWork) + +You can also export a shared query to Excel to perform bulk updates of user stories and tasks. See [Bulk add or modify work items with Excel](../office/bulk-add-modify-work-items-excel.md). + +<a name="DefineStories"></a> +### Define user stories and tasks + You can use the sprint backlog page to [plan a sprint or iteration](../scrum/sprint-planning.md). This page calculates individual and team capacity based on the estimated and remaining effort that is defined for tasks. + + As the following illustration shows, you can use the backlog page to define user stories and the tasks that are required to implement them. Tasks are automatically linked to user stories. This association supports the rollup of work hours from all tasks to the user story. + + ![Iteration Backlog Agile Planning](_img/tfs-ps_excel_itbacklog_agileplan.png "TFS-PS_Excel_ItBacklog_AgilePlan") + +### <a name="PlanIteration"></a> Plan an iteration + As the following illustration shows, you can use the capacity bars to balance the workload across your team resources. Before you balance the workload, make sure that you have assigned values to the **Remaining Work** field for each task. Also, make sure that you have specified the time off for each team member and the team on the **Capacity** tab. + + ![Capacity Load Balancing](_img/tfs-ps_excel_capacity_agileplan.png "TFS-PS_Excel_Capacity_AgilePlan") + +<a name="SubmitStories"></a> +### Submit user stories to Project Server + As a team lead, you determine when you want to submit user stories to the PMO. You can use the bulk edit feature available in the web portal to assign user stories and to update the value assigned to **Project Server Submit** for several user stories. + +##### To bulk update several fields + +1. From the TFS web portal, choose the **Work Items** tab within the **Work** context. + +2. Expand **Shared Queries** and choose the **Product Backlog** query. + +3. Select the work items from the Query Results view that you want to update. + +4. Open the shortcut menu for one of the selected items and choose **Edit selected work items**. + +5. Select the fields you want to update, and enter a value for each field that you select. Remember that all the selected work items will be updated with the new values. + + For example, to assign the user stories and submit them to Project Server, choose the **Assign To** and **Project Server Submit** fields as shown in the following illustration. + + ![Bulk modify to assign and submit to Project Server](_img/tfs-ps_agile_bulkedit.png "TFS-PS_Agile_BulkEdit") +Edit Work Items dialog box + +6. Enter a description for your bulk modification task under the **Notes for History**, and then choose **OK**. + +7. To commit the updates to the data store, choose ![Save results (TWA)](_img/alm_twa_saveresults_icon.png "ALM_TWA_SaveResults_Icon") (**Save Results**). + + > [!NOTE] + > Work Items shown in bold text indicate that the modifications are not yet published to the data store. Work items shown in bold red text indicate that you have not assigned values to all required fields to support submission to Project Server. + + ![Save bulk edit updates](_img/tfs-ps_excel_prodbcklog_agileplan.png "TFS-PS_Excel_ProdBcklog_AgilePlan") + +### <a name="UpdateWork"></a> Update remaining and completed work + Team members can update their work by using the web portal task board or work item forms in Team Explorer. To update both **Remaining Work** and **Completed Work**, you must open each task and update the fields. The value shown in the lower-left corner of each task corresponds to the **Remaining Work**. See [Task board](../scrum/task-board.md). + + ![Update tasks using the task board](_img/tfs-ps_excel_itbacklog_agileplanupd.png "TFS-PS_Excel_ItBacklog_AgilePlanUpd") + +## <a name="ActionsProgramManagers"></a> Tasks and recommended practices for the program office + As a member of the program office, you can engage in the following activities to monitor the work that the agile development team is performing: + +- [Review User Stories, and Plan Project Schedule](#ReviewStories) +- [Review Progress to Your Plan](#ReviewProgress) +- [Review Progress for Project Portfolio](#ReviewPortfolio) + + In addition, you can also view the assignment of work to resources. For more information, see [Work with resource rollup](work-with-resource-rollup.md). + +### <a name="ReviewStories"></a> Review user stories, and plan project schedule + As new user stories are submitted to Project Server, they automatically appear in your enterprise project plan. As the following illustration shows, the three user stories that were submitted by the agile team in [Submit User Stories to Project Server](#SubmitStories) are added to the project plan. + + ![User Stories Added to Project Plan](_img/tfs-ps_proj_userstories_agileplan.png "TFS-PS_Proj_UserStories_AgilePlan") + + You can group these stories to support your planning view. As the following illustration shows, the three user stories have been moved to occur under Iteration 1 in the plan. You can see the rollup of the three user stories, and in this example, the implementation of Iteration 1 stories requires 10 days. + + ![User Stories added to iteration](_img/tfs-ps_proj_it1plan_agileplan.png "TFS-PS_Proj_It1Plan_AgilePlan") + +> [!IMPORTANT] +> Text30 is the default Project field that is associated with the **Work Item Type** column that is used in synchronizing tasks with work items. If you ever connect the project plan to Team Foundation Server by using the **Choose Team Project** option on the Team ribbon menu, an additional Project field, which is labeled **Work Item Type**, becomes available. This field, with a default Project field of Text24, supports mapping of project plans that are bound to Team Foundation but does not support synchronizing plans. The Text24-based field contains the full list of work item types for the team project. You can verify that you have the correct field by pointing to it and verifying that **Text30** appears. + +### <a name="ReviewProgress"></a> Review progress to your plan + As the members of the development team update the amount of work for their tasks, the information automatically flows into the project plan. As the following illustration shows, work has been completed on the first two stories, and the team must complete only the remaining third story. + +> [!TIP] +> To view updates to the plan, you may have to close and reopen it. + + ![Project Plan with Agile Plan Updates](_img/tfs-ps_proj_it1plan_agileplanupd.png "TFS-PS_Proj_It1Plan_AgilePlanUpd") + +### <a name="ReviewPortfolio"></a> Review progress of the project portfolio + You can review the progress of a portfolio of projects with the PMO by using the Project Center view that PWA provides. As the following illustration shows, you can easily track the progress of several agile development projects. + + ![Project Portfolio with Agile Plan Updates](_img/tfs-ps_pwa_portfolio_agile.png "TFS-PS_PWA_Portfolio_Agile") + +## Related notes + [Understand how updates to specific fields are managed](understand-how-updates-to-specific-fields-managed.md) + [Resolve validation errors](resolve-validation-errors.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/manage-associations-enterprise-projects.md b/docs/work/tfs-ps-sync/manage-associations-enterprise-projects.md new file mode 100644 index 00000000000..eb83b827933 --- /dev/null +++ b/docs/work/tfs-ps-sync/manage-associations-enterprise-projects.md @@ -0,0 +1,124 @@ +--- +title: Manage the association of enterprise projects to team projects | TFS +description: Understand how to map enterprise project, must have registered and mapped the instance of the project that is associated with the enterprise project to a team project collection - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: b759773e-1c79-4e2e-abdf-522e1a34fdfb +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Manage the association of enterprise projects to team projects + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> To support synchronization of data between an enterprise project plan and a team project, you must map the plan to the team project. You can map multiple plans to the same team project. To map enterprise projects, you must have registered and mapped the instance of Project Web Access or Project Web App (PWA) that is associated with the enterprise project to a team project collection. + + **Requirements** + + Before you can map an enterprise project plan to a team project, you must have [configured the integration](configure-tfs-project-server-integration.md) of Visual Studio Team Foundation Server and Microsoft Project Server. After you have performed the initial configuration, you can map and unmap plans to team projects as needed. + + To perform these procedures, you must have the **Administer Project Server integration** permission for a team project collection, or you must belong to the **Team Foundation Administrators** group. Also, the service account for Visual Studio Team Foundation Server must have administrative permissions to the instances of PWA that will participate in data synchronization. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="GetRegisteredPWAs"></a> Retrieve the instances of PWA that are registered + By using the following command, you can list the instances of PWA that have been registered with an application-tier server and are available to be mapped to a team project collection. + +#### To list registered instances of PWA + +1. Open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ``` + cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles**. + +2. Type the following command, and then choose the **ENTER** key. + + ``` + TfsAdmin ProjectServer /GetRegisteredPWA /tfs:tfsUrl + ``` + + Replace *tfsUrl* with the uniform resource locator (URL) of the application-tier server. + + The following message appears: + + **The following PWA instances are registered:** *pwaUrl*. + + For more information, see [Register an instance of PWA](register-pwa.md). + +## <a name="GetMappedPWAs"></a> Retrieve the project collections that are mapped to an instance of PWA + By using the following command, you can determine which collections are mapped to an instance of PWA and available to participate in data synchronization. You can associate an enterprise project plan only with a team project that is hosted on a collection that has been mapped to the instance of PWA that supports your plan. + +#### To list the mapped collections + +1. At a command prompt, type the following command, and then choose the **ENTER** key: + + ``` + TfsAdmin ProjectServer /GetMappedCollections /tfs:tfsUrl + ``` + + Replace *tfsUrl* with the URL of the application-tier server. + + The following message appears: + + **The following collections are mapped:** *tpcUrl* **to Project Web Access** *pwaUrl*. + +## <a name="MapPlanToProject"></a> Associate an enterprise project plan with a team project + You can map an enterprise project plan to a team project that contains data that you want to synchronize. As the following illustration shows, you can associate multiple enterprise projects with the same team project. + + ![Associate enterprise projects with a team project](_img/pstfs_associateeptotp.png "PSTFS_AssociateEPtoTP") + +#### To map an enterprise project plan to a team project + +1. At a command prompt, type the following command, and then choose the **ENTER** key + + ``` + TfsAdmin ProjectServer /MapPlanToTeamProject /collection:tpcUrl /enterpriseProject:EnterpriseProjectName /teamProject:TeamProjectName /workItemTypes:ListOfWorkItemTypes /nofixedwork /projectFieldForWorkItemType:ProjectFieldName + ``` + + Replace *tpcUrl* with the URL of the team project collection, *EnterpriseProjectName* with the name of the enterprise project plan, and *TeamProjectName* with the name of the team project. Replace *ListOfWorkItemTypes* with the names of the types of work items that you want to participate in data synchronization. Specify **/noFixedWork** if you want to prevent fixed-task-type assignments. You can also specify the **/projectFieldForWorkItemType** argument and the name of a field in Project to store the type of work item. + + The following messages appear: + + Mapping enterprise project *EnterpriseProjectName***to team project***TeamProjectName*. + + **You have successfully mapped enterprise project** *EnterpriseProjectName* **to team project** *TeamProjectName*. + +2. Repeat step 1 for each enterprise project plan that you want to associate with a team project. + +## <a name="UnmapPlanFromProject"></a> Remove the association between an enterprise project plan and a team project + Before you can remove the association between an enterprise project plan and a team project, you must first delete all tasks that are linked to work items in the mapped team project. + +#### To unmap an enterprise project plan from a team project + +1. At a command prompt, type the following command, and then press ENTER. + + ``` + TfsAdmin ProjectServer /UnmapPlanFromTeamProject/collection:tpcUrl /enterpriseProject:EnterpriseProjectName /teamProject:TeamProjectName + ``` + + Replace *tpcUrl* with the URL of the team project collection, *EnterpriseProjectName* with the name of the enterprise project plan, and *TeamProjectName* with the name of the team project. + + The following messages appear: + + **Unmapping enterprise project** *EnterpriseProjectName* **from team project** *TeamProjectName*. + + **Enterprise project** *EnterpriseProjectName* **was successfully unmapped from team project** *TeamProjectName*. + +## <a name="ResourcePool"></a> Add TFS resources to the resource pool for Project Server + To assign users in Team Foundation as resources in Project, you must add them to the enterprise resource pool and to the resource pool for the enterprise project plan. To make this process easier, you can configure PWA to automatically synchronize the security groups with groups of the same name in Active Directory. Also, you can synchronize users and resources in Project Server with users in Active Directory across multiple domains and forests. + +#### For information about how to add users to the enterprise resource pool, see the following pages on the Microsoft website: + +- [Add resources to the enterprise resource pool](http://go.microsoft.com/fwlink/?LinkId=203356) + +- [Manage Enterprise Resource Pool synchronization with Active Directory in Project Server 2010](http://go.microsoft.com/fwlink/?LinkId=203359) + + In addition, you must grant users in Team Foundation access to log on to Project Server. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## Related notes + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) + [Manage mappings](manage-mappings-enterprise-project-team-project.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/manage-field-mappings.md b/docs/work/tfs-ps-sync/manage-field-mappings.md new file mode 100644 index 00000000000..c4e51e14b04 --- /dev/null +++ b/docs/work/tfs-ps-sync/manage-field-mappings.md @@ -0,0 +1,114 @@ +--- +title: Manage field mappings for TFS-Project Server integration | TFS +description: Modify how fields are mapped and synchronized to support the TFS-Project Server integration - Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 67b6ad0e-923f-4a31-baf3-64beff2d4080 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Manage field mappings for TFS-Project Server integration + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="BackToTop"></a> You can customize how you synchronize data between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server by modifying the field mapping file. This file defines the data fields that are synchronized and how they are synchronized to support the integration of TFS and Project Server. You can manage this file by using the following options of the **TfsAdmin ProjectServer** command-line tool: + +- **/DownloadFieldMappings**: Downloads the field mapping file that is defined for a team project collection. + +- **/UploadFieldMappings**: Validates the XML syntax of the field mapping file, and uploads it to a collection. To validate the syntax but not upload the file, you can use the `/validateonly` option. + +> [!NOTE] +> The field mapping file for the integration of Team Foundation Server and Project Server is distinct from the field mapping file for Microsoft Project. For information about how to download or upload the second file, see [TFSFieldMapping](https://msdn.microsoft.com/library/ms252493.aspx). + + For more information about the contents of the field mapping file and how to customize it, see [Field mapping reference](field-mapping-xml-element-reference.md) and [Customize the field mapping](customize-field-mapping-tfs-project-server.md). + + To use the **TfsAdmin ProjectServer** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + +``` +cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE +``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + + **Requirements** + + To use these commands, your **Administer Project Server integration** permission must be set to **Allow** for the team project collection. Also, the service account for Team Foundation Server must be granted the necessary permissions to interact with the instance of Project Web Access or Project Web App (PWA) that will participate in data synchronization. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + + + +## Syntax + +``` +TfsAdmin ProjectServer /DownloadFieldMappings /collection:tpcUrl /filepath:mappingFile [/encoding:encoding] +``` + +``` +TfsAdmin ProjectServer /UploadFieldMappings /collection:tpcUrl /filePath:mappingFile [/encoding:encoding] [/validateOnly] [/useDefaultFieldMappings] [/force] +``` + +#### Parameters + +|Parameter|Description| +|---------------|-----------------| +|**/collection**:`tpcURL`|Specifies the uniform resource locator (URL) of a team project collection. You specify the URL in the following format:<br /><br /> **http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If you do not specify a virtual directory, you specify the URI in the following format:<br /><br /> **http**://*ServerName:Port/CollectionName*| +|**/filePath**:`mappingFile`|Specifies the path and file name of the XML definition file that contains the field mappings. **Note:** If you are using Windows Vista, you might not have permissions to access certain folders. If you try to export the work item type to a location where you do not have permissions, the registry virtualization technology automatically redirects the exported file and saves it to the virtual store. To avoid this redirection, you can export the file to a location where you have permissions. For more information, see the following pages on the Microsoft website: [Registry Virtualization](http://go.microsoft.com/fwlink/?LinkId=92325) and [Common file and registry virtualization issues in Windows Vista](http://go.microsoft.com/fwlink/?LinkId=92323).| +|**/encoding**:`encoding`|Specifies the name of an encoding format for the .NET Framework 2.0. The command exports or imports the XML data in the encoding format that you specify. For example, /e:utf-7 specifies Unicode (UTF-7) encoding. If you do not specify this parameter, the command tries to detect the encoding and uses UTF-8 if detection fails.| +|**/validateOnly**|Validates the mapping file but does not upload it.| +|**/useDefaultFieldMappings**|Uploads the default field mappings instead of a custom mapping file. For more information, see [Field mapping reference](field-mapping-xml-element-reference.md).| +|**/force**|Overwrites the existing mapping file. You must specify this option if you specify the **/useDefaultFieldMappings** switch when you replace the existing mappings with different mappings.| + +## Remarks + You can map only enterprise custom fields or fields that are built in to Project Server. You must specify the name of a valid field in Project. To determine the name of a built-in field, remove any spaces from the friendly name, and prefix the result with "pj". For example, the field name for Status Manager is pjStatusManager, and the field name for Custom 01 is pjCustom01. Restrictions exist on how you can map built-in and custom fields, and you must match the data types of fields. For more information, see [Restrictions on mapping fields](restrictions-mapping-ps-fields.md). + + When you run a **TFSAdmin ProjectServer** command, a message indicates the action that is being performed and the affected object. For example, the following message shows that the field mapping file is being downloaded: + +``` +Download field mappings from DefaultCollection +``` + + Another message appears after the command actions are completed. For example, the following message appears when the field mapping file has been downloaded: + +``` +You have downloaded field mappings to C:MappingFile. . . Done. +``` + +### Notes about uploading field mappings + If a field mapping file is uploaded successfully, the following changes are made: + +- Each mirror field in Team Foundation is configured to comply with the mapped fields. + +- For work item types that have been mapped for a collection or a team project, the new mappings appear on the **Project Server** tab of the work item form. + +> [!IMPORTANT] +> When you map a field from Team Foundation Server to Project Server, make sure that you match the data types of those fields. Otherwise, the following error might appear when you try to upload the field mappings: +> +> **Index (zero based) must be greater than or equal to zero and less than the size of the argument list**. +> +> For more information, see [Data Types and Field Mapping Criteria](restrictions-mapping-ps-fields.md#datatypes). + +## Examples + +### Download the field mapping file that is defined for a team project collection + The following example downloads the field mappings that are defined for AdventureWorksCollection to AWMappingFile.xml. + +``` +TfsAdmin ProjectServer /DownloadFieldMappings /collection:http://AdventureWorksServer:8080/AdventureWorksCollection /filePath:"C:AWMappingFile.xml" + +``` + +### Upload the field mapping file for a team project collection + The following example uploads AWMappingFile.xml to AdventureWorksCollection. + +``` +TfsAdmin ProjectServer /UploadFieldMappings /collection:http://AdventureWorksServer:8080/AdventureWorksCollection /filePath:"C:AWMappingFile.xml" + +``` + +## Related notes + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) + [Customize the field mapping](customize-field-mapping-tfs-project-server.md) + [Field mapping reference](field-mapping-xml-element-reference.md) + [Restrictions on mapping fields](restrictions-mapping-ps-fields.md) + [Map integration components](map-integration-components.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/manage-mappings-enterprise-project-team-project.md b/docs/work/tfs-ps-sync/manage-mappings-enterprise-project-team-project.md new file mode 100644 index 00000000000..5b67f4c578c --- /dev/null +++ b/docs/work/tfs-ps-sync/manage-mappings-enterprise-project-team-project.md @@ -0,0 +1,128 @@ +--- +title: Manage mappings between an enterprise project and a team project | TFS +description: Understand how to manage mappings between an enterprise project and a team project by performing several tasks that include associating the project plan - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 05c10281-e873-43ea-80a3-23050438c379 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Manage mappings between an enterprise project and a team project + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> Before you can synchronize data between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server, you must perform several tasks that include associating an enterprise project plan with a team project. For an overview of how to integrate these two products, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + + You can manage the association of enterprise project plans with team projects in TFS by using the following commands in the **TfsAdmin ProjectServer** command-line tool: + +- **/MapPlanToTeamProject**: Maps an enterprise project plan to a team project. You can map multiple plans to the same team project, but you can map each plan to only one team project. + +- **/GetMappedProjects**: Returns the list of enterprise project plans that are mapped to any team project in the team project collection that you specify. + +- **/UnmapPlanFromTeamProject**: Removes the mapping between an enterprise project plan and a team project. + +> [!NOTE] +> After you map an enterprise project plan to a team project, you can change the types of work items that will be synchronized. For more information, see [Define the work item types to synchronize](define-work-item-types-available-synchronization.md). + + To use the **TFSAdmin** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + +``` +cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE +``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%.**. + + **Requirements** + + To use these commands, your **Administer Project Server integration** permission must be set to **Allow** for the team project collection. Also, the service account for Team Foundation Server must be granted the necessary permissions to interact with the instance of PWA that will participate in data synchronization. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + + + +## Syntax + +``` +TfsAdmin ProjectServer /GetMappedProjects /collection:tpcUrl +``` + +``` +TfsAdmin ProjectServer /MapPlanToTeamProject /collection:tpcUrl /enterpriseProject:EnterpriseProjectName /teamProject:TeamProjectName [/workItemTypes:ListOfWorkItemTypes] [/noFixedWork] [/projectFieldForWorkItemType:ProjectFieldName] [/skipUIChanges] +``` + +``` +TfsAdmin ProjectServer /UnmapPlanFromTeamProject /collection:tpcUrl /enterpriseProject:EnterpriseProjectName /teamProject:TeamProjectName [/force] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**:`tpcUrl`|Specifies the uniform resource locator (URL) of a team project collection. You specify the URL in the following format: **http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If you do not specify a virtual directory is used, you specify the URL in the following format:<br /><br /> **http**://*ServerName:Port/CollectionName*| +|**/enterpriseProject**:`EnterpriseProjectName`|Specifies the name of an enterprise project plan. The plan must be stored and published on Project Server, and the instance of PWA must be registered with the deployment of Team Foundation Server where the project collection is stored.| +|**/teamProject:** *TeamProjectName*|Specifies the name of a team project that is defined in the project collection.| +|**/workItemTypes**:`ListofWorkItemTypes`|Specifies, in a comma-delimited list, the reference names of one or more types of work items. You should specify only those types of work items whose data you want to track in Project Professional. For example, you can specify the following types of work item to support an Agile process as *"User Story,Task"* or *"User Story",Task* Do not include a space after the comma.| +|**/noFixedWork**|Specifies that the task type in Project Professional should not be automatically set to Fixed Work for tasks that are mapped to work items in Team Foundation. By default, as part of the integration between the two server products, tasks in the enterprise project plan that are mapped to work items in Team Foundation have their task type set to **Fixed Work**. You can override this behavior by using this switch. Fixed work is one of three types of tasks that you can use in Project. For more information, see [Change the task type Project uses to calculate task duration](http://go.microsoft.com/fwlink/?LinkId=203354).| +|**/projectFieldForWorkItemType**: `ProjectFieldName`|Specifies the name of the Microsoft Project field in which to display the value for the work item type that is defined in Team Foundation. You should specify a value between pjTaskText1 and pjTaskText30. By default, the value is pjTaskText30.| +|**/force**|Removes all mappings for all work items that are defined in the team project and currently linked to a project plan. An unmapped team project cannot contain any linked work items. You should specify this option only if you are sure that you no longer want any work items in the team project to continue to participate in data synchronization.| +|**/skipUIChanges**|Specifies that the **Project Server** tab in the work item form should not be changed for the types that you specify. You should include this flag if you have customized the **Project Server** tab for the affected types.| +|**/?** or **help**|Displays information about the command.| + +## Remarks + When you run a command, a message appears and indicates the action that is being performed and the object that is being acted upon. For example, the following message states that the enterprise project plan is being mapped: + +``` +Mapping enterprise project EntProjA . . . Done. +``` + + Another message appears after the command finishes. For example, the following message indicates that the enterprise project plan has been mapped to the team project: + +``` +Mapping enterprise project EntProjA to team project MyTeamProj . . . Done. +``` + + In addition to associating the enterprise project plan with the team project, the **/MapPlantoTeamProject** option adds the **Project Server** tab to the work item forms for the types of work items that you specify. + + If you try to map an enterprise project to a team project for which no fields have been mapped, a message indicates that a mapping is required, and no more operations are performed. For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md). + + If you remove the mapping between an enterprise project and a team project to which no other enterprise projects are mapped, the **Project Server** tab is removed from the forms for all work item types in the team project that you unmapped. + + Before you unmap a team project, you must remove the association between tasks in the enterprise project plan and work items in Team Foundation. You can remove this association by deleting the tasks from the enterprise project plan, publishing the plan, and waiting for synchronization to complete. As an alternative, you can use the `/force` flag to remove the association between project tasks and work items. + +> [!TIP] +> Before you delete the tasks, you might want to copy them to another plan to record the tasks that you are deleting. + +## Examples + Unless otherwise specified, the following values apply in each example: + +- URL for the instance of PWA: http://MyPWAServer/MyPWAInstance/ + +- URL for Team Foundation Server: http://AdventureWorksServer:8080/tfs/ + +- URL for the team project collection: http://AdventureWorksServer:8080/tfs/DefaultCollection + +### List enterprise projects that are mapped + The following example lists the enterprise projects that are mapped to a team project in Collection0 on AdventureWorksServer. + +``` +TfsAdmin ProjectServer /GetMappedProjects /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection + +``` + +### Map an enterprise project to a team project + The following example maps MyEnterpriseProjA to MyTeamProjB in DefaultCollection on AdventureWorksServer and specifies that user stories and tasks will participate in synchronization. + +``` +TfsAdmin ProjectServer /MapPlanToTeamProject /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection/ enterpriseProject:MyEnterpriseProjA /teamProject:MyTeamProjB /workItemTypes:"User Story, Task" +``` + +### Remove mapping of an enterprise project to a team project + The following example removes the association of MyEnterpriseProjA to MyTeamProjB in DefaultCollection on AdventureWorksServer. + +``` +TfsAdmin ProjectServer /UnmapPlanFromTeamProject /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection/ enterpriseProject:MyEnterpriseProjA /teamProject:MyTeamProjB +``` + +## Related notes + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) + [Map integration components](map-integration-components.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/manage-project-details.md b/docs/work/tfs-ps-sync/manage-project-details.md new file mode 100644 index 00000000000..cceeea55cee --- /dev/null +++ b/docs/work/tfs-ps-sync/manage-project-details.md @@ -0,0 +1,177 @@ +--- +title: Manage project details in an enterprise project plan mapped to a team project | TFS +description: Understand how project managers and development teams can manage their workflows independently while collaborating fully and communicating more easily when changes that affect the schedule occur - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: ff9499ea-cd5b-4ede-aa1a-de8ef3d9e704 +ms.author: kaelli +ms.manager: douge +ms.date: 01/12/2017 +--- + +# Manage project details in an enterprise project plan mapped to a team project + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> As a project manager, you can manage both business requirements and implementation tasks in Microsoft Project Professional. As work progresses, development teams can update their tasks as they work in Team Foundation. Both project managers and development teams can manage their workflows independently while collaborating fully and communicating more easily when changes that affect the schedule occur. The synchronization engine for Visual Studio Team Foundation Server and Microsoft Project Server maintains scheduling data for the requirements and tasks in the mapped enterprise project plan and team project. + +> [!NOTE] +> If you want to manage only deliverables by using Project Server, see [Top-down planning of business requirements](top-down-plan-mapped-team-project.md). + + Before you can synchronize data between your project plan and a team project, you must first associate them. For more information, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). Before you associate the plan with the project, you should review [Recommended Configurations to Support Managing Project Details](#Requirements), which is provided later in this topic. + +> [!NOTE] +> The process and activities that this topic describes require that your deployment of Team Foundation Server has been configured to integrate with Project Server 2010 or Project Server 2013. For more information, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + + +> [!NOTE] +> For a demonstration video, see the following page on the Microsoft website: [Top-Down Planning of Business Requirements within an Enterprise Project using Team Foundation Server and Project Server](http://go.microsoft.com/fwlink/?LinkId=222611). Some details may differ between the procedures demonstrated in the video and those described here because this video was made for the previous release of Team Foundation Server + + **Requirements** + + To perform the procedures in this topic, the following permissions must be assigned: + +- To publish tasks from an enterprise project plan to Team Foundation, the resource who is assigned to the task must be a member of the **Contributors** group for the team project. + +- To update work items in Team Foundation and submit them to Project Server, Team Foundation users must be members of the **Contributors** group for the team project. Those users must also be members of the **Team Members** group for Project Web Access or Project Web App (PWA) or must have the Open Project and View Project Site permissions in Project. They must also be added to the enterprise resource pool for Project Server and the resource pool for the enterprise project plan. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="Workflow"></a> Process overview + As the following illustration shows, the project manager initiates the process by planning the requirements and tasks in Project Professional. The synchronization engine creates corresponding work items in Team Foundation for each submitted task. The team lead reviews the plan together with the development team and updates work estimates. Each team member can update their work effort as they complete tasks. + + ![PS-TFS Project Manager Driven workflow](_img/pstfs_pmdetailed_workflow.png "PSTFS_PMDetailed_Workflow") + + Project automatically calculates the rollup of remaining and completed work based on the tasks that are linked to each requirement. As team members update tasks, status updates are submitted for approval, and when the project manager approves them, flow into Project. Project then automatically calculates the rollup for the requirements in the team project. The status updates for these rollups then appear in the instance of PWA for the approval of the project manager. + + The following table summarizes the tasks that are performed. + +||| +|-|-| +|**Project Manager**|As a project manager, you perform the following tasks in Project Professional or your instance of PWA:<br /><br /> ![Step 1](_img/procguid_1.png "ProcGuid_1") Define the project plan that contains both deliverables and tasks. Deliverables may correspond to requirements or user stories, depending on the process template that your product team used to create the team project.<br /><br /> ![Step 2](_img/procguid_2.png "ProcGuid_2") Save and publish your plan to Project Server.<br /><br /> ![Step 7](_img/procguid_7.png "ProcGuid_7") Approve or reject status updates as work progresses.<br /><br /> ![9](_img/procguid_9.png "ProcGuid_9") Continuously publish updates to the plan on Project Server.| +|**Synchronization Engine**|For each deliverable or task that is set to publish in the plan, the synchronization engine performs the following actions:<br /><br /> ![Step 3](_img/procguid_3.png "ProcGuid_3") Updates the team project by creating a work item for each task that is published in the mapped project plan. The engine also creates a link that binds the task in Project Server to the work item in Team Foundation.<br /><br /> ![Step 6](_img/procguid_6a.png "ProcGuid_6a") Creates a status update for each mapped field in each published task as changes occur in Team Foundation. These updates appear in the approval queue for the project manager to review.<br /><br /> ![Step 8](_img/procguid_8.png "ProcGuid_8") Updates work items in the team project based on whether the project manager approved or rejected the status update.| +|**Team Lead**|In Team Foundation, the team lead and team members perform the following tasks:<br /><br /> ![Step 4](_img/procguid_4.png "ProcGuid_4") Review the work items that are added to the team project.<br /><br /> ![Step 5](_img/procguid_6.png "ProcGuid_6") Update the work items as work progresses by changing the **Remaining Work** and **Completed Work** fields for each task.<br /><br /> ![10](_img/procguid_10.png "ProcGuid_10") Respond to work items with a rejected status by modifying work items and resubmitting to Project Server.| + +## <a name="Requirements"></a> Recommended configurations + To support the process that was outlined in the previous section, you must map the enterprise project plan to the team project. The following table describes the recommended configurations for both the team project and mapping. For more information, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). + +|Area to configure|Recommended configuration|Notes| +|-----------------------|-------------------------------|-----------| +|Process template for team project|Microsoft Solutions Framework (MSF) for Capability Maturity Model Integration (CMMI) Process Improvement|The CMMI template provides requirement and task types of work items. You can use the backlog and board pages to manage your backlog and plan and run your sprints. Or, you can use shared queries that you open in Excel to quickly define and link requirements and tasks. **Note:** You can also use a customized CMMI process template or other template and customize it to meet your needs.| +|Project mapping|`/workItemTypes:Requirement,Task`|When you map the enterprise project plan to the team project, specify requirement and task as the work item type items to participate in synchronization. You can also disallow fixed work for tasks. Fixed work is one of three types of tasks that you can use in Project. For more information, see [Change the task type Project uses to calculate task duration](http://go.microsoft.com/fwlink/?LinkId=203354).| +|Field mappings|`/useDefaultFieldMappings`|You can use default field mappings. No additional field mappings are required.| +|Resource Names|You must add team members to the Team Members group for each instance of PWA, or you must grant them the Open Project and View Project Site permissions in Project. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md).<br /><br /> Also, you must add all valid users in Team Foundation who are assigned requirements, deliverables or tasks in Project to the enterprise resource pool for Project Server and the resource pool for the enterprise project plan.|You must grant permissions to all user accounts that are assigned as resources in the project plan or that are named in the Assigned To field for a work item. These users submit status updates that flow into the status queue for the instance of PWA.<br /><br /> All names that are assigned to the **Resource Names** field must be recognized as valid contributors of the team project.| +|Project managers|Accounts of users of Project Professional must be granted the **View Project-level information** permission or assigned as members of the **Reader** group in Team Foundation for team projects to which they will publish.|You must grant project managers permissions to modify work items for those team projects that are mapped to their enterprise project plans.| + +## <a name="pm_tasks"></a> Project manager tasks + As a project manager, you can define, schedule, and monitor progress on your project by engaging in the following activities: + +- [Define requirements and tasks, and set a baseline](#DefineRequirementsTasks) + +- [Approve or reject status updates](#ApproveStatus) + +- [Review detail updates and progress](#ReviewProgress) + + You can also view the assignment of work to resources. For more information, see [Work with resource rollup](work-with-resource-rollup.md). + +### <a name="DefineRequirementsTasks"></a> Define requirements and tasks, and set a baseline + When you define your project plan, you will want to define parent requirements and child tasks. As the following illustration shows, two requirements are defined, and each has several tasks. For each requirement and task, you must assign one value for **Resource Names**, set **Work Item Type** to **Requirement** or to **Task**, and set **Publish to Team Project** to **Yes**. + +> [!NOTE] +> In Team Foundation, you can assign only one person to a work item at a time. The **Assigned To** field can contain only one person name. In Project Professional, you can assign multiple resources to a task. However, tasks that you publish to Team Foundation Server can contain only one active assignment. For more information, see [Work with resource rollup](work-with-resource-rollup.md). + + ![Detailed project plan](_img/tfs-ps_pp_detailedplan_reqtasksb.png "TFS-PS_PP_DetailedPlan_ReqTasksB") + +> [!IMPORTANT] +> Text30 is the default Project field that is associated with the **Work Item Type** column that is used in synchronizing tasks with work items. If you ever connect the project plan to Team Foundation Server by using the **Choose Team Project** option on the Team ribbon menu, an additional Project field, which is labeled **Work Item Type**, becomes available. This field, with a default Project field of Text24, supports mapping of project plans that are bound to Team Foundation but does not support synchronizing plans. The Text24-based field contains the full list of work item types for the team project. You can verify that you have the correct field by pointing to it and verifying that **Text30** appears. + + After you publish your project plan, you cannot change the value that is assigned to **Publish to Team Project**. That is, all tasks that you publish to Team Foundation must continue to be published, or you must delete them from the project plan. In addition, you maintain the assignments of work to resources and the task hierarchy in your project plan. You cannot modify the task hierarchy in Team Foundation, but you can reassign tasks to team members in the team project. + + You should publish only those tasks that you want to have tracked in Team Foundation. For example, you should not publish the summary tasks **Project Schedule** and **Development**, which the previous illustration shows, to Team Foundation because they have no work to track. + + To maintain control of your schedule, you can set a baseline to track the team progress against the target schedule. For more information, see the following page on the Microsoft website: [Create or update a baseline or an interim plan](http://go.microsoft.com/fwlink/?LinkId=203362). + + After you have set the baseline, you can save and publish the project plan to Project Server. The baseline value appears as the **Original Estimate** for a work item in Team Foundation. As the following illustration shows, a status notification in the lower-left corner indicates when publishing is completed. + + ![Publishing progress appears in status bar](_img/tfs-ps_pp_published.png "TFS-PS_PP_Published") + +> [!NOTE] +> When you publish your plan, the Team Foundation add-in to Project Professional checks whether all data that is required to the work item in Team Foundation satisfies the validation rules for the type of work item. If a required field is not defined or if a value is not allowed, you must resolve those errors. For more information, see [Resolve validation errors](resolve-validation-errors.md). + +### <a name="ApproveStatus"></a> Approve or reject status updates + As the team makes progress, status updates appear in your approval queue. At a glance, you can see which requirements and tasks have been updated and the details of each update. As the following illustration shows, you can click a status update to review its details. + + ![Status updates](_img/tfs-ps_pwa_detailedplan_updates.png "TFS-PS_PWA_DetailedPlan_Updates") + + When you click a status update, the Task Details window opens, as the following illustration shows. You can review the changed values for each field that is mapped for synchronization. + + ![Task details](_img/tfs-ps_pp_taskdetails_pwa.png "TFS-PS_PP_TaskDetails_PWA") + +> [!NOTE] +> To update your enterprise project plan with the changes that are submitted from Team Foundation, you must accept the updates. + + You can accept or reject an update and, if you are using Project Server 2010, add a comment. For example, you may reject an update because you disagree with an estimate, a team member specified an inaccurate value, or you want to request that tasks be reassigned so that the work will be accomplished more quickly. + +### <a name="ReviewProgress"></a> Review detail updates and progress + As team members make progress, they update the **Remaining Work** and **Completed Work** fields for each task. These values appear as **Remaining Work** and **Actual Work** in your project plan for each requirement and task that you published to Team Foundation. After you approve the status updates, you can view the updates to your project schedule. As the following illustration shows, two tasks have been completed, and several tasks have not yet been started. + + ![Detailed plan schedule](_img/tfs-ps_pp_detailedplan_schedule.png "TFS-PS_PP_DetailedPlan_Schedule") + + When a task takes longer than was first estimated, you can determine whether changes to estimates affect the critical path. You can alert the team lead if an adverse effect to the schedule has occurred and the team project tasks must be adjusted. + +## <a name="DevTeamTasks"></a> Development team tasks + You can use the task board page in the TFS web portal or the Work Breakdown shared query to review and update work that is assigned to your team. Because the project manager owns the project plan and schedule, you and your team are required to perform the following tasks: + +- [Review work breakdown](#ReviewWorkBreakdown) +- [Add and estimate additional tasks](#AddWork) +- [Update remaining and completed work](#UpdateWork) +- [Address rejected updates](#AddressUpdates) + + If you open a work item in Team Explorer, the **History** field shows when the synchronization engine created the work item, as the following illustration shows. + + ![History and Project Server synch message](_img/tfs-ps_pp_history.png "TFS-PS_PP_History") + +### <a name="ReviewWorkBreakdown"></a> Review the work breakdown + In the web portal or Team Explorer, you can open the Work Breakdown query, and review the work items that have been added to your team project from Project Server. This query lists all requirements that are not closed and their child requirements or tasks. As the following illustration shows, tasks are listed under their requirements, and the parent-child hierarchical link relationships are locked (![Locked link icon](_img/icon_lockedlink.png "Icon_lockedLink")). That is, you cannot modify how tasks are grouped under requirements. Only the project manager from the project plan can modify the task hierarchy. + + ![Work breakdown schedule in Team Explorer](_img/tfs-ps_te_detailedplan_workbreakdown.png "TFS-PS_TE_DetailedPlan_WorkBreakdown") + + Because the project manager set a baseline, values appear for both **Remaining Work** and **Original Estimate**, as the following illustration shows. + + ![Work estimates](_img/tfs-ps_te_detailedplan_originalestimate.png "TFS-PS_TE_DetailedPlan_OriginalEstimate") + +### <a name="AddWork"></a> Add and estimate additional tasks + If you require additional tasks to implement a requirement, you can quickly define and estimate them by using the Work Breakdown query, by working in the work item form for the requirement, or exporting the list to Excel. As the following illustration shows, you can open the shortcut menu for a requirement and then choose **Link selected items to a new work item**. + + ![Link selected item(s) in work item context menu](_img/tfs-ps_twa_contextmenu.png "TFS-PS_TWA_ContextMenu") +Shortcut menu for a work item (TFS web portal) + + ![Add New Linked Work Item](_img/tfs-ps_te_addlinkedtasks_wb.png "TFS-PS_TE_AddLinkedTasks_WB") + + In the **Add New Linked Work Item to Requirement** window, select **Child** for the **Link type**, select **Task** for the **Work item type**, type a **Title** for the task, and then choose **OK**. + + ![Add New Linked Work Item to Requirement](_img/tfs-ps_te_addnewlinkedwit.png "TFS-PS_TE_AddNewLinkedWIT") + + The work item form for the task appears and is automatically linked to the requirement. In the form, for **Assigned To**, select the team member who will work on the task, and then type the estimated work for **Remaining Work**. + + As an alternative, you can use the sprint task board in the web portal as described in [Task board](../scrum/task-board.md). Or, you can open the Work Breakdown query in Excel and quickly define linked tasks and estimate work. For more information, see [Bulk add or modify work items with Excel](../office/bulk-add-modify-work-items-excel.md). + + After you have added missing tasks for the requirement, you can refresh the Work Breakdown query. Make sure that you set the **Submit to Project Server** field to **Yes**. The next status update for the requirement will transmit new requirements and tasks to the enterprise project plan. You can bulk edit several tasks to define select fields. See [Submit user stories to Project Server](make-agile-team-progress-visible-to-the-pmo.md#SubmitStories). + +> [!IMPORTANT] +> When you submit multiple levels of work items to Project Server, the first level must be approved and published to Project Server before the next level can be submitted. For example, you can submit a batch of new work items that includes three levels of child items. In that case, the project manager would need to publish the project plan four times for all work items to be synchronized with Project Server. + +### <a name="UpdateWork"></a> Update remaining and completed work + As work progresses, each team member should update **Remaining Work** and **Completed Work** for each of their tasks. They can do this using the task board in the TFS web portal or by using Team Explorer. If more time is required to complete a task, the team member can add more time to the remaining work. Updates to these fields automatically appear in the approval queue for the project manager and are reflected in the rollup of the parent requirement. + + ![Task board to update work (the web portal)](_img/tfs-ps_twa-taskboard_managedetails.png "TFS-PS_TWA-TaskBoard_ManageDetails") + + As an alternative, as team lead, you can open the Work Breakdown query in Excel and update several tasks at the same time. + +### <a name="AddressUpdates"></a> Address rejected updates + When a project manager rejects a status update to either a requirement or a task, the information appears in the **History** field, and the **Last Approval Status** field on the **Project Server** tab indicates **rejected**. After an update to a work item has been rejected, the work item can no longer be synchronized. You must address the rejection status to resume synchronization of the work item. You can create a query to find work items whose update status was rejected. For more information, see [Monitor work item submissions and resolve rejections](monitor-submissions-resolve-rejections.md). + +## Related notes + [Understand how updates to specific fields are managed](understand-how-updates-to-specific-fields-managed.md) + [Resolve validation errors](resolve-validation-errors.md) + [Manage projects](manage-projects.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/manage-projects.md b/docs/work/tfs-ps-sync/manage-projects.md new file mode 100644 index 00000000000..ab15f9696a4 --- /dev/null +++ b/docs/work/tfs-ps-sync/manage-projects.md @@ -0,0 +1,68 @@ +--- +title: Manage projects using TFS-Project Server integration | TFS +description: Integrate the two server products that provides flexibility in how the projects are managed - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: e5cf789c-2edb-4d84-aecd-f4d09fc854da +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Manage projects using TFS-Project Server integration + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> Project managers and software development teams can use the tools they prefer, work at the granularity that supports their needs, and share information transparently between Visual Studio Team Foundation Server and Microsoft Project Server. When the two server products are configured, the synchronization engine maintains scheduling data and resource usage for the configured data in the mapped enterprise project plan and the team project. + + The integration of the two server products provides flexibility in how projects are managed. As a project manager, you can manage your project by using one or a combination of the following three methods: + +- **Define and track deliverables**. You define the requirements and features to be delivered, and the development team defines the implementation tasks. For more information, see [Top-down planning of business requirements](top-down-plan-mapped-team-project.md). + +- **Define and track both deliverables and tasks**. You define the project details, and the development team reports status updates. For more information, see [Manage project details](manage-project-details.md). + +- **Review progress of agile teams**. You review progress of work submitted to Project Server, and the development team manages both project deliverables and tasks. For more information, see [Make Agile team progress visible](make-agile-team-progress-visible-to-the-pmo.md). + + For each of these methods, resource managers can accurately plan and manage resources, project managers can balance workload across resources for multiple software projects, and the program management office (PMO) can view up-to-date status and track the overall health of the software portfolio that is under development. In addition, business analysts have access to quality metrics over time. + +> [!IMPORTANT] +> This topic applies to Microsoft Project Professional 2007, Project Professional 2010, or Project Professional 2013 from a client computer that has Visual Studio 2013 installed. Also, the integration of Visual Studio Team Foundation Server 2013 and Project Server [must be configured](system-and-setup-requirements.md). +> +> You can manage work items in Team Foundation by using Microsoft Project or Project Professional if you use the Team Foundation plug-in as [Create your backlog and tasks using Project](../../work/office/create-your-backlog-tasks-using-project.md) describes. The plug-in connects a project plan to a team project but does not synchronize work items. This plug-in is disabled when an enterprise project plan is mapped to a team project. For more information about how to manage work items by using Project, see [Operational differences in managing projects using TFS and Project](operational-differences.md). + +## <a name="TasksToManage"></a> Tasks for project managers to manage projects and track progress + +|Task|Related topic| +|----------|-------------------| +|**Define deliverables**. You can define business requirements and specific deliverables, and you can leave the definition of specific tasks to the development team. You can view the rollup of resources and effort, and you can view the impact to the schedule as the development team defines, estimates, and updates its detailed tasks.|[Top-down planning of business requirements](top-down-plan-mapped-team-project.md)| +|**Define both deliverables and tasks**. You can manage both business requirements and implementation tasks. You can manage your workflow independent of the development team while you stay informed as work progresses.|[Manage project details](manage-project-details.md)| +|**Review progress of agile teams**. You can view work progress and resource usage as the agile development team manages the definition and schedule of user stories and tasks. You and the PMO can view schedules, progress on user stories, and rollup of resources.|[Make Agile team progress visible](make-agile-team-progress-visible-to-the-pmo.md)| +|**Review how fields are updated**. If you suspect that the synchronization engine is not working as expected, you should verify how specific fields are updated. The data type of the affected field or fields, the `OnConflict` attribute for mapping fields, and the task hierarchy affect how the synchronization engine updates specific fields. Tasks will not update correctly if the project manager rejects one or more submission updates or if the project plan was not published.|[Understand how updates to specific fields are managed](understand-how-updates-to-specific-fields-managed.md)| +|**Assign resources and view resource utilization**. When the development team breaks down requirements and tasks into child tasks, as a project manager, you can see the rollup of work and resources. You can use resource rollup to view resource allocation and work estimates, perform resource leveling, and determine whether a common resource to multiple projects is over-allocated.|[Work with resource rollup](work-with-resource-rollup.md)| +|**Resolve errors when you publish tasks to Team Foundation Server**. You must resolve all data validation errors that may occur when you publish an enterprise project plan that is mapped to a team project. A data validation error occurs if you define a value that violates a rule that is defined for the work item type that is associated with the task.|[Resolve validation errors](resolve-validation-errors.md)| + +## <a name="TasksForDevTeams"></a> Tasks for development leads and teams + +|Task|Related topic| +|----------|-------------------| +|**Review deliverables, define tasks, and estimate work**. For each deliverable that is submitted to Project Server, you define and estimate the tasks that are required to implement the deliverable. As work progresses, team members update their task hours, which are automatically submitted to Project Server and the project manager for review.|[Top-down planning of business requirements](top-down-plan-mapped-team-project.md)| +|**Review work breakdown and update work**. As a development lead, you can use the backlog and board pages or the Work Breakdown query to review the work items that a project manager submits. As work progresses, team members update their task hours, which are automatically submitted to Project Server and the project manager for review.|[Manage project details](manage-project-details.md)| +|**Define and submit user stories to Project Server**. As a development lead, you provide visibility into the project schedule and resource utilization if you set the **Project Server Submit** field to **Yes** for those user stories on which your team is working. You can set the value of this field quickly using the bulk edit feature of the TFS web portal or opening the Product Backlog query in Excel.|[Make Agile team progress visible](make-agile-team-progress-visible-to-the-pmo.md)| +|**Find and address rejected work item submissions**. When the project manager rejects an update to a work item, you must address the reason for the rejection and resubmit it to Project Server. Until you resubmit the update, the work item can no longer participate in data synchronization.|[Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md)| +|**Remove tasks and work items that no longer need to be tracked**. When you delete a task from your project plan that has been synchronized with a work item in Team Foundation, you remove the association between the task and the work item. This removal occurs after you publish the plan to Project Server and the synchronization process completes updating the published changes. However, you must use the **witadmin destroywi** command to permanently remove the work items from the team project|[Remove items that aren't synchronizing](remove-items-not-synching.md)| + +## <a name="TasksToConfigure"></a> Tasks to configure, map, and customize data synchronization + +|Task|Related topics| +|----------|--------------------| +|**Obtain permission to map your enterprise project plans to a team project**. To map your project plans, you must have the **Administer Project Server integration** permission for a team project collection that is assigned to you.|[Assign permissions](assign-permissions-support-tfs-project-server-integration.md)| +|**Map an enterprise project plan to a team project**. To support synchronization of data between an enterprise project plan and a team project, you must map the plan to the team project. You can map multiple plans to the same team project, but you cannot map one plan to multiple team projects.|[Associate enterprise projects and team projects](manage-associations-enterprise-projects.md)| +|**Add or remove a work item type from participating in data synchronization**. You can define the types of work items when you associate a project plan to a team project, and you can later add or remove types. You can also list the types of work items that are mapped for a team project.|[Specify work item types](specify-wits-to-synchronize.md)| +|**Add fields to or remove fields from participating in data synchronization**. You can add fields and specify how they synchronize by customizing the field mapping file. For example, you can share data that does not relate to schedules (such as cost centers, team names, or health status) if you add the fields that store these types of data to the mapping file.<br /><br /> You can map fields that are associated with pick lists in Team Foundation. However, you must create lookup tables in Project Server to match the pick lists. You cannot automatically synchronize pick lists and lookup tables.|[Customize the field mapping](customize-field-mapping-tfs-project-server.md)| +|**Change the configuration for synchronization**. You can remove components that you have configured to participate in data synchronization. However, you should always follow the recommended reconfiguration sequence when you remove such components.|[Remove a component](remove-component-from-synchronization.md)| +|**Add team project members to the enterprise resource pools**. To assign and manage Team Foundation users as resources in Project, you must add them to the enterprise resource pool. To make this process easier, you can configure Project Server to automatically synchronize the security groups with groups that have the same name in Active Directory. Also, you can synchronize users and resources in Project Server with the users in Active Directory across multiple domains and forests.|See the following pages on the Microsoft website:<br /><br /> - [Add resources to the enterprise resource pool](http://go.microsoft.com/fwlink/?LinkId=203356) (Project Server 2010)<br />- [Active Directory Resource Pool Synchronization (Project Server 2013)](http://msdn.microsoft.com/library/jj819320.aspx)<br />- [Manage users, groups, and categories in Project Server 2013](http://msdn.microsoft.com/library/cc197571.aspx)| + +## Related notes + [Overview of integration features](overview-tfs-project-server-integration.md) + [Synchronization process overview](synchronization-process-overview.md) + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/map-integration-components.md b/docs/work/tfs-ps-sync/map-integration-components.md new file mode 100644 index 00000000000..9d4151871be --- /dev/null +++ b/docs/work/tfs-ps-sync/map-integration-components.md @@ -0,0 +1,50 @@ +--- +title: Map integration components | TFS +description: Configure several points of integration using TFSAdmin ProjectServer command-line tool to synchronize data - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: ddac3deb-bb59-4536-9d4a-ecd389ceb265 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Map integration components + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +You can synchronize data between Visual Studio Team Foundation Server 2013 and Microsoft Project Server if you first configure several points of integration between them. To configure this integration, you use the **TFSAdmin ProjectServer** command-line tool. To access this tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + +``` +cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE +``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%.**. + +> [!NOTE] +> For an overview of this configuration, see [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md). + +## Global parameters + You can use the parameters in the following table to display information about **TfsAdmin ProjectServer**. + +|Parameter|Description| +|---------------|-----------------| +|**/help**<br /><br /> or<br /><br /> **/?**|Displays the syntax and parameters for the command-line tool.| +|*Command* **/help**<br /><br /> or<br /><br /> *Command* **/?**|Displays the syntax and parameters for the **TfsAdmin ProjectServer** command that you specify.| + +## Commands that support TFS-Project Server integration + +|Tasks|Related content| +|-----------|---------------------| +|**Manage the registration of Project Server to Team Foundation Server**. To integrate Project Server and Team Foundation Server, you must first register an instance of Project Web Access or Project Web App (PWA) to Team Foundation Server. To manage this type of registration, you use the following command options:<br /><br /> - **/RegisterPWA**: Registers an instance of Project Web Access to Team Foundation Server.<br />- **/GetRegisteredPWA**: Returns the list of registered instances.<br />- **/UnregisterPWA**: Removes the registration of an instance.|[Register an instance of PWA](register-pwa.md)| +|**Manage the association of team project collections to an instance of PWA**. You manage the association of team project collections to an instance by using the following command options:<br /><br /> - **/MapPWAToCollection**: Maps a team project collection to an instance of Project Web Access. Before you can map a collection to an instance, you must register the instance.<br />- **/GetMappedCollections**: Returns the list of mapped collections.<br />- **/UnMapPWAFromCollection**: Removes the mapping between a collection and an instance.|[Map a team project collection](map-team-project-collection-to-pwa.md)| +|**Manage the association of enterprise project plans to team projects**. To synchronize tasks in an enterprise project with work items in a team project, you must map the project plan to the team project. You can manage this type of mapping by using the following command options:<br /><br /> - **/MapPlanToTeamProject**: Maps an enterprise project to a team project. Before you create this type of mapping, you must map the instance of PWA instance that is associated with the enterprise team project.<br />- **/GetMappedProjects**: Returns the list of enterprise projects that are mapped to team projects.<br />- **/UnmapPlanFromTeamProject**: Removes a mapping between a team project and an enterprise project.|[Manage mappings](manage-mappings-enterprise-project-team-project.md)| +|**Manage which types of work items participate in data synchronization**. After you have made your initial configurations and mapping, you can change the types of work items that are mapped. You can manage the types of work items that participate in synchronization by using the following command options:<br /><br /> - **/MapWorkItemTypes**: Defines the types of work items that can participate in synchronization for a team project. Regardless of whether you map a given type of work item, work items of that type will not be synchronized unless a user submits them for publishing.<br />- **/GetMappedWorkItemTypes**: Returns the list of work item types that are configured to participate in synchronization for a team project.<br />- **/UnmapWorkItemTypes**: Removes types of work items from participating in synchronization for a team project.|[Define the work item types to synchronize](define-work-item-types-available-synchronization.md)| +|**Customize how fields are mapped between Team Foundation Server and Project Server**. You must map fields between the two server products and define how the data is synchronized. You can either upload the default mappings or add mappings and customize how fields are synchronized. You maintain the field mappings by using the following command options:<br /><br /> - **/DownloadFieldMappings**: Downloads the field mappings to a file.<br />- **/UploadFieldMappings**: Uploads the field mappings that are defined in a file.|[Upload or download field mappings](manage-field-mappings.md)| +|**Retrieve recent error messages that occurred when data was synchronized**. To support your troubleshooting efforts, you can retrieve information about the most recent errors that were logged for a team project collection if you use the `/GetSyncMessages` command option.|[View error messages](view-synch-error-messages.md)| + +## Related notes + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) + [Remove a component](remove-component-from-synchronization.md) + [Change your deployment configuration](change-deployment-configuration.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/map-project-plan-previously-bound.md b/docs/work/tfs-ps-sync/map-project-plan-previously-bound.md new file mode 100644 index 00000000000..a1712daad2f --- /dev/null +++ b/docs/work/tfs-ps-sync/map-project-plan-previously-bound.md @@ -0,0 +1,243 @@ +--- +title: Map a project plan that was previously bound to a team project | TFS +description: Specify work items that you want to synchronize, and then the migration process automatically creates additional tasks that are based on those work items - Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: df29e319-c1f7-4c90-bc27-42975158a0a1 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Map a project plan that was previously bound to a team project + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> You can map a project plan that you have been publishing to and refreshing from Visual Studio Team Foundation Server (TFS) to switch to synchronizing with TFS. You can then obtain the benefits of synchronization over those that the Team Foundation add-in to Microsoft Project Professional provides. Before you perform this mapping, you should review the differences in how you manage projects based on these two methods. For more information, see [Operational differences in managing projects using TFS and Project](operational-differences.md). + + When you map a project plan that was previously bound to Team Foundation Server, you replace the tasks in your project plan with new tasks that the synchronization engine creates. The integration of Team Foundation Server and Microsoft Project Server does not support mapping the existing tasks in a project plan in Project Server to the work items to which they are bound in Team Foundation Server. Instead, you specify work items that you want to synchronize, and then the migration process automatically creates additional tasks that are based on those work items. You can then copy from the old tasks to the new tasks any information that Team Foundation Server does not store, and then delete the old tasks. The synchronization engine then maintains data between the new tasks and the work items from which they were created. + + To perform the migration, you will use Excel, Project Professional, Project Web App or Project Web Access (PWA), and the `TfsAdmin` command-line tool. + +> [!IMPORTANT] +> Before you can perform the procedures in this topic, you must first configure the integration of the two server products. For more information, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). +> +> If you have customized the field-mapping file for Microsoft Project, you may need to customize the field mapping between Project Server and Team Foundation Server. To perform this configuration, you first register the instance of PWA, then you map the instance to a team project collection, and then you upload field mappings. For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md). + + + **Required Permissions** + + To perform these procedures, you must have the following permissions: + +- To map a project plan to a team project, you must have the **Administer Project Server integration** permission for a team project collection, or you must belong to the **Team Foundation Administrators** group. Also, the service account for Team Foundation Server must have administrative permissions to the instances of PWA that will participate in data synchronization. + +- To publish and refresh work items in Excel and to set work items to be synchronized, you must be a member of the **Contributors** group for the team project that is mapped in Team Foundation Server. + +- To approve and publish updates, you must be a member of the **Project Manager** group on Project Server. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="capture_ids"></a> Record IDs of Work Items That You Want to Synchronize + You must record the IDs of all work items that you will want to synchronize after you map your project plan to the team project. You will use these IDs to perform a later step in the process. + +#### To record the IDs of work items that you want to synchronize + +1. Open the project plan that you plan to map. + +2. On the **Team** ribbon, choose **Refresh**. + +3. Choose **Publish** to make sure that the most recent data in the plan is published to Team Foundation. + +4. In Project, make sure that the **Work Item ID** and **Publish and Refresh** columns appear. + + By default, these columns appear in both the **Team Foundation Gantt** and **Team Foundation Task Sheet** views. + +5. To capture the IDs of the work items, highlight the **Work Item ID** column, open the shortcut menu, and then choose **Copy**. + +6. In a text editor such as Notepad, open the shortcut menu, and then choose **Paste**. + +7. Delete the IDs of any work items that you do not want to synchronize with Team Foundation Server, and then create a comma-delimited list of the remaining IDs. + +8. Save the list to a file, and record the types of work items that you want to map. + +## <a name="save_publish"></a> Save and Publish the Project Plan to Project Server + You must perform this step only if you have been working with a local project plan. If you have already published the project plan to Project Server, you can skip this procedure. + +#### To save and publish your project plan to Project Server + +1. Open your project plan in Project Professional. + +2. Save the plan, publish it to Project Server, and then close the plan. + +## <a name="map"></a> Map the Project Plan to the Team Project + You map your project plan to a team project by using the **TfsAdmin ProjectServer** command-line tool. + +#### To map an enterprise project plan to a team project + +1. Open a Command Prompt window where either Visual Studio 2013 or Team Explorer 2013 is installed and enter: + + ``` + cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + +2. Enter the following command, and then choose the ENTER key: + + ``` + TfsAdmin ProjectServer /MapPlanToTeamProject /collection:tpcUrl /enterpriseProject:EnterpriseProjectName /teamProject:TeamProjectName /workItemTypes:ListOfWorkItemTypes /nofixedwork /projectFieldForWorkItemType:ProjectFieldName + ``` + + Make the following replacements and specifications: + + - Replace *tpcUrl* with the URL of the team project collection. + + - Replace *EnterpriseProjectName* with the name of the enterprise project plan. + + - Replace *TeamProjectName* with the name of the team project. + + - Replace *ListOfWorkItemTypes* with the names of the types of work items that you want to participate in data synchronization. This list should correspond to the types of work items whose IDs you recorded in the first procedure in this topic, [Record the IDs of Work Items That You Want to Synchronize](#capture_ids). + + > [!IMPORTANT] + > Map all work item types that you want to synchronize with the team project. + + - (Optional) Specify the **/noFixedWork** argument if you want to prevent fixed-task-type assignments. + + - (Optional) Specify the **/projectFieldForWorkItemType** argument and the name of a field in Project to store the type of work item. If you do not specify this argument, the default value of pjTaskText30 is used. + + The following messages appear: + + **Mapping enterprise project** *EnterpriseProjectName* **to team project** *TeamProjectName* + + **You have successfully mapped enterprise project** *EnterpriseProjectName* **to team project** *TeamProjectName* + +3. If your project plan is open, close it, and then close Project Professional. + +## <a name="set_synch"></a> Bulk Edit Work Items to Be Synchronized + In this procedure, you bulk edit the work items that correspond to the IDs that you recorded in the first procedure in this topic, [Record Work-Item IDs That You Want to Synchronize](#capture_ids). You can bulk edit work items mostly easily by using Microsoft Excel. + +#### To bulk edit the synchronization fields + +1. Start Microsoft Excel, and then choose the **Team** tab. + +2. In the **Work Items Group**, choose the **New List** button. + +3. In the **Connect to Team Project** dialog box, choose the name of the server that contains the team project that you have mapped to the project plan. + +4. In the **Select a Team Foundation Server** list, choose the name of the server that contains the team project to which your enterprise project plan is mapped. + +5. Under **Team Project Collections**, choose the name of the project collection that hosts the team project. + +6. In the **Team Projects** list, choose the name of the team project that contains the work items that you want, and then choose **OK**. + +7. In the **New List** dialog box, choose the **Input List** option button, and then choose the **OK** button. + + The worksheet data is refreshed and includes the name of the team project and project collection. + +8. Choose a cell within the table area, and then, on the **Team** ribbon, choose the **Get Work Items** button. + +9. In the **Get Work Items** dialog box, choose the **IDs** option button, paste the comma-delimited list that you created in [Record Work Item IDs That You Want to Synchronize](#capture_ids) earlier in this topic, and then choose the **Find** button. + +10. Choose the **Select All** button, and then choose the **OK** button. + + The worksheet data is refreshed and shows the fields for each work item that you specified. + +11. Choose the **Choose Columns** button. + + In the **Choose Columns** dialog box, under **Available Columns**, highlight the **Submit to Project Server** field, and then choose the **>** button. + + > [!NOTE] + > The **Submit to Project Server** column will be available only if you have performed the [Map Project Plan to the Team Project](#map) procedure from earlier in this topic. + +12. Choose the **Project Server Enterprise Project** field, choose the **>** button, and then choose the **OK** button. + + The **Submit to Project Server** and **Project Server Enterprise Project** columns are added to the worksheet. + +13. In the **Submit to Project Server** column, enter **Yes** in the row for the first work item. Copy and paste **Yes** into the rows for all remaining work items that you want to synchronize. + +14. In the **Project Server Enterprise Project** column, enter the name of your enterprise project plan in the row for the first work item. Copy and paste the plan name into the rows for all remaining work items. + +15. On the **Team** ribbon, choose **Publish** to update Team Foundation Server. + + After a few minutes, notification of tasks to approve will appear in the approval queue for the project manager who owns the project plan. + +## <a name="approve_updates"></a> Approve Updates, and Publish the Project Plan + You must approve the updates that appear in your project queue before they will appear in your project plan. Also, when you migrate a nested tree of tasks, you must approve updates and then publish your project plan for each level of nesting. You must approve and publish the first level to Project Server before the next level can be submitted from Team Foundation Server to Project Server. For example, if your plan includes three levels of child items, you must publish the project plan four times for all work items to be synchronized with Project Server. + + Perform the following two procedures as many times as necessary until all work items that you selected for synchronization appear in your project plan: + +- Approve updates to the project plan + +- Publish the plan and update Project Server + +### <a name="approve_updates_a"></a> To approve updates to the project plan + +1. Open the instance of PWA that supports the project plan, and then choose the **Approval Center** link. + + A list of status updates that require your approval should appear, similar to the following illustration: + + ![Approval Center with Status Update](_img/tfs-ps_pwa_approvalcenter.png "TFS-PS_PWA_ApprovalCenter") + +2. For each work item that you want to accept into your plan, select the check box in the column next to the **Approval Type** column. + + To select all work items, choose the header field next to the **Approval Type** column header, open the shortcut menu, and then choose **Select All**. + +### <a name="publish_plan"></a> To publish the plan and update Project Server + +1. Open your project plan, and review the tasks that have been added to it. + + > [!NOTE] + > Make sure that you close the project plan and close Project Professional after the plan was mapped. + + Duplicate tasks should be added to your project plan. You will remove the duplicate tasks in the final step of migration, as [Verify Migration, and Delete Non-Synchronized Tasks](#verify) describes later in this topic. + +2. Save and publish your project plan to Project Server + +3. If all work items that you want to have synchronized have been added, close your project plan, and skip to [Verify Migration and Delete Duplicate Tasks](#verify) later in this topic. + + If some work items still must be synchronized, return to the first step in the first procedure, “To approve updates to the project plan. + + As you approve and publish the updates, the synchronization process locks the hierarchy of synchronized work items in Team Foundation. + +## <a name="verify"></a> Verify Migration, and Delete Non-Synchronized Tasks + Open and review your project plan. If you have synchronized all tasks that you were previously publishing and refreshing, a duplicate set of tasks will appear with the replicated hierarchy. The set of synchronized tasks will appear after the set of non-synchronized tasks. You can add any information that the non-synchronized tasks contain to those tasks that are now synchronized before you delete the non-synchronized tasks from your project plan. + + Perform the following procedures to complete the migration process. You add the previous Work Item ID column to make sure that you are deleting the non-synchronized tasks. + +#### Verify the Migration to a Mapped Project Plan + +1. Verify that the **Team** ribbon no longer appears. + +2. Verify that the default view is **Team Foundation Gantt (Project Server)**. + + Change the view if **Team Foundation Gantt** continues to appear. + +3. Choose the **Work Item ID** column heading, open the shortcut menu, choose **Field Settings**, and verify that **Work Item Id (TFS)** appears as the field name. + +4. Verify that the task hierarchy and structure of the set of synchronized tasks matches the hierarchy of the set of non-synchronized tasks. + +5. Make any adjustments that you want to the new task set, and copy any information that you want to maintain from the old set to the new set. + + Because the new synchronized tasks have been created from information in Team Foundation Server, any information that the original task contained but that is not stored in Team Foundation must be copied over to the new tasks. For example, you must copy over the following types of information: calendar dates, predecessor-successor dependencies, lead and lag time, work item constraints, and text that is entered or fields that are defined in the **Task Information** dialog box. Before you delete the non-synchronized tasks, copy any information that they contain and that you want to maintain to the replicated synchronized task. + +#### Delete Non-Synchronized Tasks + +1. In Project Professional, choose the **Work Item ID** column, open the shortcut menu, and then choose **Insert Column**. + +2. In the list, choose **Text10 (Work Item ID**. + +3. A second **Work Item ID** column appears, and a value appears in it for non-synchronized tasks. + +4. (Optional) Copy any information that you have defined for a non-synchronized task to its equivalent synchronized task. + +5. Highlight all non-synchronized tasks, and then choose **Cut** on the Task ribbon or choose **Delete Tasks** on the shortcut menu. + + Verify that only synchronized tasks remain in the project plan. + +6. Choose the **Work Item ID** column that you added in step 1, open the shortcut menu, and then choose **Hide Column**. + +7. Save and publish your project plan to Project Server. + +## Related notes + [Operational differences in managing projects using TFS and Project](operational-differences.md) + [Synchronization process overview](synchronization-process-overview.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/map-project-server-components.md b/docs/work/tfs-ps-sync/map-project-server-components.md new file mode 100644 index 00000000000..c881022977a --- /dev/null +++ b/docs/work/tfs-ps-sync/map-project-server-components.md @@ -0,0 +1,50 @@ +--- +title: Map Project Server components to Team Foundation components | TFS +description: Define each point of integration by mappings server products, project plans, and team projects in Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: e4ae6a70-0e75-4387-a466-a2b882d23ed2 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Map Project Server components to Team Foundation components + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> Before you can synchronize data between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server, you must first configure several points of integration between the two server products. You define each point of integration by defining the association or mappings between server products, project plans, and team projects. Each association that you define adds software logic and processes to support the data synchronization between the two servers. + + You can register multiple instances of Project Web Access or Project Web App (PWA) to TFS, and you can map multiple team project collections to an instance of PWA. + + For an end-to-end overview of how to integrate these products, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + + In addition to the mappings that this topic describes, you can also define how fields and types of work items participate in data synchronization. You define how fields are mapped for a collection and which types of work items can be synchronized for a team project. You map only fields in Team Foundation to fields in Project Server whose data you want to synchronize, and you map types of work items that you want to synchronize with tasks in a project plan. For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md) and [Specify work item types](specify-wits-to-synchronize.md). + +## <a name="MapTFS"></a> Mapping Multiple Instances of PWA to Team Foundation Server + You can register multiple instances of PWA to a single deployment of Team Foundation Server. The most common configuration will be the mapping of a single PWA to a single deployment of Team Foundation Server. However, if your Project Server deployment consists of multiple instances of PWA that must connect to Team Foundation Server, you can register each instance, as the following illustration shows: + + ![Register PWAs to Team Foundation Server](_img/pstfs_registerpwas.png "PSTFS_RegisterPWAs") + + Before you register an instance, you must install the required software on each application-tier server that hosts Project Server and each application-tier server for Team Foundation that will participate in data synchronization. For more information, see [System and setup requirements](system-and-setup-requirements.md). + + When you register an instance, Team Foundation Server is updated with the information about the instance. In addition, the instance is updated with the custom fields and lookup tables that integration requires. + +## <a name="MapTPCs"></a> Mapping Multiple Team Project Collections to an Instance of PWA + For each instance of PWA that you have registered, you can map a team project collection that is defined on the application-tier server with which it is registered. You can map multiple collections to a single instance of PWA as the following illustration shows. However, you cannot map a collection to more than one instance of PWA. + + ![Map PWAs to Team Project Collection](_img/pstfs_mappwas.png "PSTFS_MapPWAs") + + When you map a collection to an instance, information is added to Team Foundation Server about the instance, global fields, rules, and processes that are used by the synchronization engine for that collection. + +## <a name="MapProjects"></a> Mapping Multiple Project Plans to Team Projects + After you have mapped the collection to an instance of PWA and added field mappings to the collection, you can map an enterprise project plan to a team project. Before you can map a project plan, you must first publish the plan to Project Server. As the following illustration shows, you can map multiple enterprise projects to the same team project. + + ![Associate enterprise projects with a team project](_img/pstfs_associateeptotp.png "PSTFS_AssociateEPtoTP") + + The **Project Server** tab and fields are added to the work item form for those types of work items that you have specified to participate in synchronization. For more information, see [Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md). + +## Related notes + [System and setup requirements](system-and-setup-requirements.md) + [Synchronization process overview](synchronization-process-overview.md) + [Remove a component](remove-component-from-synchronization.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/map-team-project-collection-to-pwa.md b/docs/work/tfs-ps-sync/map-team-project-collection-to-pwa.md new file mode 100644 index 00000000000..dfcf2ac4dc4 --- /dev/null +++ b/docs/work/tfs-ps-sync/map-team-project-collection-to-pwa.md @@ -0,0 +1,127 @@ +--- +title: Map a team project collection to an instance of PWA | TFS +description: Map a team project collection to an instance of Project Web Access or Project Web App to synchronize data with Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: d873f68e-3e88-4daa-9c28-a192dab86765 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Map a team project collection to an instance of PWA + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> Before you can synchronize data between Visual Studio Team Foundation Server and Microsoft Project Server, you must perform several tasks that include mapping a team project collection to an instance of Project Web Access or Project Web App (PWA). You can manage this mapping by using the following options of the **TFSAdmin** command-line tool: + +- **/MapPWAToCollection**: Maps a team project collection to an instance of PWA. You can map multiple collections to an instance, but you can map each collection to only one instance. Before you can map a collection to an instance, you must register the instance. + +- **/GetMappedCollections**: Returns the list of team project collections that have been mapped to an instance of PWA. + +- **/UnmapPWAFromCollection**: Removes the mapping of a team project collection from an instance of PWA. + + For an end-to-end overview of how to integrate these products, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + + To use the **TFSAdmin** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + +``` +cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE +``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + + **Requirements** + + To use these commands, your **Administer Project Server integration** permission for the team project collection must be set to **Allow**. Also, the service account for Team Foundation Server must be granted the necessary permissions to interact with the instance of PWA that will participate in data synchronization. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the context menu for the **Command Prompt**, and then choose **Run as Administrator**. For more information, see the following page on the Microsoft website: [User Access Control](http://go.microsoft.com/fwlink/?LinkId=111235). + + + +## Syntax + +``` +TfsAdmin ProjectServer /GetMappedCollections /tfs:tfsUrl +``` + +``` +TfsAdmin ProjectServer /MapPWAToCollection /pwa:pwaUrl /collection:tpcUrl +``` + +``` +TfsAdmin ProjectServer /UnmapPWAFromCollection /pwa:pwaUrl /collection:tpcUrl [/force] +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/tfs**:`tfsUrl`|Specifies the uniform resource locator (URL) of an application-tier server for Team Foundation. You specify the URL in the following format:<br /><br /> **http**://*ServerName:Port/VirtualDirectoryName*<br /><br /> If you do not specify a virtual directory, you specify the URI in the following format:<br /><br /> **http**://*ServerName:Port*| +|**/pwa:** *pwaUrl*|Specifies the URL of an instance of PWA. You specify the URL in the following format:<br /><br /> **http**://*PWAServerName/PWA*| +|**/collection**:`tpcUrl`|Specifies the URL of a team project collection. You specify the URL in the following format:<br /><br /> **http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If you do not specify a virtual directory, you specify the URI in the following format:<br /><br /> **http**://*ServerName:Port/CollectionName*| +|**/force**|Optional. Available for the **/UnmapPWAFromCollection** option only. Removes all mappings for all team projects in the collection. You should specify this option only if you are sure that you no longer want any team projects in the collection to continue to participate in data synchronization.| +|**/?** or **help**|Displays information about the command.| + +## Remarks + When you run a command, a message appears and confirms the action that is being performed and the object of the action. For example, the following message states that the specified instance of PWA is being mapped: + +``` +Mapping Project Web Access:http://MyPWAServer/MyPWAInstance/ . . . Done. +``` + + Another message appears after the command finishes. For example, the following message indicates that the instance of PWA has been registered with Team Foundation Server: + +``` +Mapping team project collection http://MyTFSServer:8080/tfs/Collection0 to PWA http://MyPWAServer/MyPWAInstance/. +``` + + The following operations are performed when you map a team project collection: + +- The location service for the collection is updated with the mapping. + +- Global rules and fields on the collection are created. + +- The synchronization engine is registered with the job service. + + Before you can unmap a collection from an instance of PWA, you must first unmap all team projects and enterprise project plans that are mapped for the team project collection. If projects are mapped when you run the **/UnmapPWAFromCollection** option, a message notifies you that you must first use the `/UnmapPlanFromProject` option. As an alternative, you can use the `/force` flag to remove all mappings for all team projects in the collection. + + You can display a list of mapped projects by running the **/GetMappedProjects** option. For more information, see [Manage mappings](manage-mappings-enterprise-project-team-project.md). + + If you run **/UnmapPWAFromCollection** on a collection to which no projects are mapped, the command removes not only the mapping but also the global rules. + +## Examples + The following values apply in each example: + +- URL for the instance of PWA: http:// *PWAServerName*/*PWAInstance*/ + +- URL for Team Foundation Server: http://AdventureWorksServer:8080/tfs/ + +- URL for the team project collection: http://AdventureWorksServer:8080/tfs/DefulatCollection + +### List Project Collections That Are Mapped + The following example lists the team project collections that are defined on AdventureWorksServer and that are mapped to an instance of PWA. + +``` +TfsAdmin ProjectServer /GetMappedCollections /tfs:http://AdventureWorksServer:8080/tfs/ + +``` + +### Map a Team Project Collection to an Instance of PWA + The following example maps DefaultCollection to PWAInstance, which is defined on AdventureWorksServer. + +``` +TfsAdmin ProjectServer /MapPWAToCollection /pwa:http://PWAServerName/PWAInstance /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection +``` + +### Remove the Mapping of a Collection + The following example removes the mapping of DefaultCollection from PWAInstance. + +``` +TfsAdmin ProjectServer /UnmapPWAFromCollection /pwa:http://PWAServerName/PWAInstance /collection:http://AdventureWorksServer:8080/tfs/DefaultCollection +``` + +## Related notes + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) + [Remove a component](remove-component-from-synchronization.md) + [Map integration components](map-integration-components.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/monitor-submissions-resolve-rejections.md b/docs/work/tfs-ps-sync/monitor-submissions-resolve-rejections.md new file mode 100644 index 00000000000..d3e05bce5e1 --- /dev/null +++ b/docs/work/tfs-ps-sync/monitor-submissions-resolve-rejections.md @@ -0,0 +1,104 @@ +--- +title: Monitor work item submissions and resolve rejections | TFS +description: Resolve blocks and rejections by monitoring the status of work items submitted to Project Server for participation in data synchronization with Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 13d38542-a0e8-411b-80ac-e8bb2b5c5f61 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Monitor work item submissions and resolve rejections + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> As a team lead, you may want to create several work item queries to monitor the status of work items that were submitted to Microsoft Project Server for participation in data synchronization. You can use the queries that are described in this topic to list blocked or rejected work items and then perform the corrective actions to resolve the blocks and rejections. + + In addition to the work item fields that appear on the **Project Server** tab for a work item, you can use several more to find work items. + + **Required Permissions** + + To perform these procedures, you must be a member of the **Readers** group or your **View work items in this node** permission must be set to **Allow**. For more information, see [Permission reference](../../security/permissions.md). + +## <a name="FindBlockedWIs"></a> Find and Resolve Work Items That Are Blocked from Being Submitted to Project Server + To find work items that were previously submitted to Project Server but are now blocked, you can create the following query. This query finds all work items for which the **Project Server Last Submit Status** field is set to **Failure**. You can filter the list by **Area** or **Iteration**. + +|And/Or|Field|Operator|Value| +|-------------|-----------|--------------|-----------| +||**Team Project**|**=**|**@Project**| +|**And**|**Project Server Last Submit Status**|**=**|**Failure**| + + To resolve the failure condition, review the history of the failed work items to determine the specific error that is keeping them from being submitted. Correct the error, and save the work item. During the next synchronization interval, the corrected work items should be submitted. You can verify that they have been submitted by waiting a few moments and running the query again. + +## <a name="FindRejectedWIs"></a> Find Submitted Work Items That the Project Manager Rejected + To find work items that the project manager rejected, you can create the following query. This query finds all work items for which the **Project Server Last Review Status** field is set to **Rejected**. You can filter the list by **Area** or **Iteration**. + +|And/Or|Field|Operator|Value| +|-------------|-----------|--------------|-----------| +||**Team Project**|**=**|**@Project**| +|**And**|**Project Server Last Review Status**|**=**|**Rejected**| + + To resolve the rejected status, review the history of the rejected work items to see the comments that the project manager used to outline the reason for rejection. To resubmit the work item with changes, perform the following sequence of steps: + +1. Update the work item to address the project manager's comments. + +2. On the **Project Server** tab, change **Submit to Project Server** to **Yes** for the appropriate enterprise project plan. + +3. If the team project is mapped to more than one project plan, in **Enterprise Project**, click the plan that corresponds to the project manager's comments. + +4. Save the work item. + + You can verify that an individual work item was successfully submitted by viewing its **History** or by verifying that the **Project Server Last Submitted Date** field has been updated or is more recent than the **Last Approval Date** since a previous rejection. + +## <a name="FindDiffWorkWIs"></a> Find Work Items Where the Work in Team Foundation Differs from that in Project Server + To find work items that contain work values that differ from those in Project Server, you can create the following query. This query finds all work items whose **Completed Work** does not equal **Project Completed Work** or whose **Remaining Work** does not equal **Project Remaining Work**. You must group each **And** clause with the **Or** clause that follows it. The last two clauses filter the work items that contain empty or zero values for work. + +> [!TIP] +> To find work items that contain a null or empty string, leave the **Value** field empty. + +|And/Or|Field|Operator|Value| +|-------------|-----------|--------------|-----------| +||**Team Project**|**=**|**@Project**| +|**And**<br /><br /> **Or**|**Completed Work**<br /><br /> **Remaining Work**|**\< > [Field]**<br /><br /> **\< > [Field]**|**Project Completed Work**<br /><br /> **Project Remaining Work**| +|**And**<br /><br /> **Or**|**Completed Work**<br /><br /> **Project Completed Work**|**\< >**<br /><br /> **\< >**|**0**| +|**And**<br /><br /> **Or**|**Remaining Work**<br /><br /> **Project Remaining Work**|**\< >**<br /><br /> **\< >**|**0**| + + To compare work values, click **Column Options**, and add **Completed Work**, **Project Completed Work**, **Remaining Work**, and **Project Remaining Work** to the list of columns that appear in the results. + + You can verify whether an individual work item was successfully submitted by viewing its **History** or by checking that the **Project Server Last Submit Status** field is set to **Success**. + +## <a name="FindSynchedWIs"></a> Find Work Items That Are Being Synchronized With Project Server + To find work items that are being synchronized to a specific enterprise project plan, you can create the following query. This query finds all non-closed tasks for a specific plan. You can filter the list by **Area** or **Iteration**. + +|And/Or|Field|Operator|Value| +|-------------|-----------|--------------|-----------| +||**Team Project**|**=**|**@Project**| +|**And**|**Work Item Type**|**=**|**Task**| +|**And**|**State**|**<>**|**Closed**| +|**And**|**Project Server Enterprise Project**|**=**|*PlanName*| + + To view which work items have and have not been submitted, click **Column Options**, and add **Project Server Submit** to the list of columns that appear in the results. You can filter the query to find only those tasks that have not been submitted by adding a clause with **Project Server Submit <> Yes**. + +> [!NOTE] +> By default, **Project Server Submit** is set to **No** for each work item that you create. However, any work items that you created before the project plan was mapped to the team project may contain an empty value for the **Project Server Submit** field. + +## <a name="FieldsAvailable"></a> Fields That Support Queries That Relate to Data Synchronization + When you specify a type of work item to participate in data synchronization, more than 25 fields are added to the work item type and are available to support queries. All fields start with "Project Server. Most fields are read-only. The following table indicates the label of the field on the **Project Server** tab and the friendly name of the field, which you use to specify it in the Query Editor. For information about more fields that you can use to support queries, see [Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md). + +|Label on Project Server tab|Name in Query Editor| +|---------------------------------|--------------------------| +|**Enterprise Project**|**Project Server Enterprise Project**| +|**Last Approval Date**|**Project Server Last Reviewed Date**| +|**Last Approval Status**|**Project Server Last Review Status**| +|**Last Submit Status**|**Project Server Last Submit Status**| +|**Last Submitted Date**|**Project Server Last Submitted Date**| +|**Linked to Project Server**|**Project Server Is Linked**| +|**Completed Work**|**Project Server Completed Work**| +|**Remaining Work**|**Project Server Remaining Work**| + +## Related notes + [Synchronization process overview](synchronization-process-overview.md) + [Top-down planning of business requirements](top-down-plan-mapped-team-project.md) + [Manage project details](manage-project-details.md) + [Manage projects](manage-projects.md) diff --git a/docs/work/tfs-ps-sync/operational-differences.md b/docs/work/tfs-ps-sync/operational-differences.md new file mode 100644 index 00000000000..113664f74bb --- /dev/null +++ b/docs/work/tfs-ps-sync/operational-differences.md @@ -0,0 +1,63 @@ +--- +title: Operational differences in managing projects using TFS and Project | TFS +description: Understand how using the Team Foundation plug-in to Project differs from Project Server-TFS integration +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 786a9a22-0e34-4a70-b589-ae2def789e06 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Operational differences in managing projects using TFS and Project + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> You can schedule projects by using the features that are available in Microsoft Project or Microsoft Project Professional, while maintaining the data and tracking work in Visual Studio Team Foundation Server (TFS). If you have Project Server deployed, you can best manage your enterprise project plans by installing Team Foundation Server Extensions for Project Server. + + In this topic, you can learn about the benefits and operational differences of using the Team Foundation plug-in to Microsoft Project compared to integrating the two server products. For more information about Project Server, see [Microsoft Project](http://go.microsoft.com/fwlink/?LinkId=211790). + +<a name="Integration"></a> +## Benefits of integrating TFS with Project Server + Integration between TFS and Project Server can become a considerable advantage for organizations that want to bridge the collaboration gap between their project management offices and their software development teams. By integrating the two server products, teams can work together more effectively in the following ways: + +- Acquire up-to-date insight into portfolio execution, alignment with strategic objectives, and resource usage of software development projects by leveraging the quantitative data in different systems. + +- Automate the sharing of project information across teams, and improve coordination between teams that use disparate methodologies, such as waterfall and agile, through common data and agreed-upon metrics. + +- Enable development and project-management teams to collaborate and communicate project timelines and progress by using familiar tools such as Visual Studio, Microsoft Project, and SharePoint Products. + + If Project Server is not deployed, you can use the Team Foundation plug-in to Microsoft Project to manage projects based on work items in Team Foundation. When you install Visual Studio or Team Explorer, the Team Foundation plug-in to Microsoft Project is installed. By using the plug-in, you can add and change TFS work item data. You can [plan projects, schedule tasks, assign resources, and track changes](../../work/office/create-your-backlog-tasks-using-project.md). Different users can update work items from different project plans. + + The following table compares the main tasks that you can perform by using the Team Foundation plug-in to Microsoft Project with those that require integration of the two server products. You can use the plug-in with all editions of Project 2007, Project 2010, and Project 2013. To integrate TFS and Project Server, you must install Project Professional 2007, Project Professional 2010, or Project Professional 2013. + +|Feature|Team Foundation plug-in to Microsoft Project|TFS and Project Server Integration| +|-------------|--------------------------------------|----------------------------------------| +|Directly connect to TFS, and change work items and their dependencies.|![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")|| +|Initiate project planning, schedule work, and manage project calendars.|![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")|![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")| +|Manage and synchronize dependency links.|![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")|| +|View project status, schedule, and resource allocation.|![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")|![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")| +|Work with subprojects, standard projects, and enterprise projects.|![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")|![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")| +|Control the level of collaboration and synchronization.||![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")| +|View and leverage enterprise resource pools.||![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")| +|View resource allocation across multiple enterprise project plans.||![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")| +|Leverage portfolio optimization, demand management, and reporting (features available only with Project Server)||![Advanced access](_img/aml_proj_greenfield_whitecheckmark.png "AML_Proj_GreenField_WhiteCheckmark")| + +## <a name="OperationalDifferences"></a> + +Operational differences between using the Team Foundation plug-in to Project and integrating TFS with Project Server + The following table summarizes the operational differences between using Project to publish and refresh TFS work items and synchronizing data between TFS and Project Server. + +|Operational area|Team Foundation plug-in to Microsoft Project|TFS and Project Server Integration| +|----------------------|---------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------| +|**Synchronization model**|Supports a synchronization process in which project managers can directly publish to or refresh from Team Foundation on demand.<br /><br /> - Supports mapping a task field in Project to a field in Team Foundation.<br />- Tasks are not bound to work items.<br />- Project plans are bound to Team Foundation Server.|Supports a synchronization process in which project managers can control plan updates.<br /><br /> - Publish from Project Server to Team Foundation, submit updates from Team Foundation to a status queue, and send updates to Team Foundation based on approvals or rejections made by project managers.<br /> This model is designed to support the project plan as the default master so that project managers have full control of what gets added to the project plan.<br />- Supports mapping task and resource fields in Project to fields in Team Foundation.<br />- After synchronization, each task in Project is bound to a work item in Team Foundation.<br />- Project plans are mapped to team projects until they are unmapped.| +|**Publish and refresh process**|- You manage which tasks you want to publish to or refresh from Team Foundation.<br />- In Project, you set the **Publish and Refresh** value to **No**, **Refresh Only**, or **Yes**.<br />- Different project plans and different tasks can synchronize to the same work item.<br />- You can assign only one resource per task.<br />- You can display Project fields in a work item form, and you can display Team Foundation fields in a project plan.<br />- Updates are traced through the History field in each work item.|- You manage which types of work items participate in data synchronization and which specific tasks or work items are synchronized.<br />- In Project Professional, you set the **Publish to Team Project** value to **Yes** or **No**. In Team Foundation, you set the **Submit to Enterprise Project** to **Yes** or **No**.<br />- Only one task in one project plan can synchronize to a work item.<br />- You can assign only one resource to each task. However, the Resource field will show the rollup of resources that are assigned to child tasks.<br />- You can display Project fields in a work item form, and you can display Team Foundation fields in a project plan.<br />- Conflicts may require resolution. For more information, see [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md).<br />- Provides robust traceability and history of each field and work item that was synchronized.| +|**Rollup of work and resources**|- In work items that contain child tasks, the values in the Remaining Work and Completed Work fields are calculated and rolled up automatically.<br />- Hours are rolled up in Project but not in Team Foundation.<br />- Resources are not rolled up.|- In work items that contain child tasks and that are synchronized, the values in the Remaining Work and Completed Work fields are calculated and rolled up automatically.<br />- Hours are rolled up in Project and Team Foundation mirror fields.<br />- Resources and resource allocation are rolled up within Project Professional and Project Server.| +|**Setup and configuration**|- Requires Team Foundation Plug-in for Microsoft Project, which is installed with Visual Studio 2012.<br />- Publish and refresh tasks based on a list of work items.<br />- Publish and refresh all types of work items without any mapping or setup.<br />- Control which fields get published and refreshed by customizing the mapping file for each collection.<br />- Exert granular control over how fields are published and refreshed based on the assignment of the `PublishOnly` and `IfSummaryRefreshOnly` attributes.|- Requires Team Foundation Server Extensions for Project Server, Project Server, and Project Professional with Team Foundation Plug-in. For more information, see [System and setup requirements](system-and-setup-requirements.md).<br />- Configure the team projects and types of work items that participate in synchronization.<br />- Control which fields get published and refreshed by customizing the mappings for a project collection.<br />- Exert granular control over how fields are published and updated based on the fields that are assigned to the **tfsToTarget** and **targetToTfs** elements.| + +## <a name="Publishing"></a> Publishing from Project Professional versus Project + When you publish tasks from Project Professional, you open the **File** menu, and then you choose **Publish** to publish the project plan to Project Server. After Project Server is updated, the synchronization engine pulls data from Project Server and determines what data to update in Team Foundation based on the data that is configured for synchronization. Only those team projects, work items, and fields that are configured for synchronization are updated. + + When you publish tasks from Project, you choose **Publish** on the **Team** ribbon or the **Team** menu. + +## Related notes +- [Synchronize TFS with Project Server](synchronize-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/overview-tfs-project-server-integration.md b/docs/work/tfs-ps-sync/overview-tfs-project-server-integration.md new file mode 100644 index 00000000000..21d2b2ccc1c --- /dev/null +++ b/docs/work/tfs-ps-sync/overview-tfs-project-server-integration.md @@ -0,0 +1,49 @@ +--- +title: Overview of TFS-Project Server integration features | TFS +description: Understand how to customize data synchronization between Team Foundation Server (TFS) and Project Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 4ee48675-b05f-49fc-847f-bfd47398c598 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +ms.topic: get-started-article +--- +# Overview of TFS-Project Server integration features + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> How is data synchronized between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server? What are the differences in how TFS integrates with Project Server 2010 and Project Server 2013? This topic addresses these questions. + +## <a name="SyncSummary"></a> Synchronization feature summary + The following table describes the main features that support data synchronization between Team Foundation and Project Server. + +|Feature|Description| +|-------------|-----------------| +|Three types of synchronization|[Synchronization process overview](synchronization-process-overview.md)<br /><br /> The synchronization engine performs three types of synchronization. This process captures and maintains data that relates to tasks and resources in both Team Foundation and Project Server while respecting the ownership of data by the project manager in the project plan.| +|*n*-to-1 mapping of components|[Map components](map-project-server-components.md)<br /><br /> You control what participates in synchronization by configuring and customizing the integration of the two server products. The data synchronization engine supports an *n*-to-1 mapping from Project Server to Team Foundation. You can register multiple instances of Project Web Access or Project Web App (PWA) to Team Foundation Server and you can map multiple team project collections to an instance of PWA.| +|Tasks and work items that are synchronized|[Specify work item types](specify-wits-to-synchronize.md)<br /><br /> You can manage which types of work items participate in data synchronization and which specific tasks or work items are synchronized. In Project Professional, you set the **Publish to Team Project** value to **Yes** or **No**. In Team Foundation, you set the **Submit to Enterprise Project** to **Yes** or **No**.| +|Data fields that are synchronized|[Customize the field mapping](customize-field-mapping-tfs-project-server.md)<br /><br /> To synchronize data between an enterprise project plan and a team project, you must associate the work-item fields in Team Foundation with the fields in Project Server. You can add fields and specify how they synchronize. For example, you can share data that does not relate to schedules (such as cost centers, team names, or health status) if you add the fields that store these types of data to the mapping file.<br /><br /> You can add fields or just use the default set of fields that are required to support synchronization.| +|Traceability, update status, submissions, and rejections|[Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md)<br /><br /> As work items and tasks are created, updated, and synchronized, a record is written to the History field for work items in Team Foundation. In addition, you can find status information in the following fields on the **Project Server** tab for each work item: Last Submit Status, Last Submitted Date, Last Approval Status, Last Approval Date.| +|Submissions, approvals, and automatic approvals|[Top-down planning of business requirements](top-down-plan-mapped-team-project.md)<br /><br /> Updates to work items are submitted to Project Server and remain in the status update queue until you approve or reject them. As a project manager, you can define a rule to automatically approve all updates that are submitted from Team Foundation Server to Project Server.| +|Resource rollup|[Work with resource rollup](work-with-resource-rollup.md)<br /><br /> In Team Foundation, rollup values are automatically calculated for Completed Work and Remaining Work of parent work items that contain child items. In addition, resources that are assigned to individual tasks appear as resources for the rollup of the task in Project.| +|Conflict resolution|[Field mapping reference](field-mapping-xml-element-reference.md)<br /><br /> A conflict can occur when team members change the value of a mapped field in both Team Foundation and Project Server at the same time. You can choose whether you want to always accept the value in Project Server or to maintain two distinct values, which is referred to as maintaining “two sets of books." If you choose the latter option, data synchronization is suspended for those fields until they are assigned the same values manually.| +|Assigning resources|[Work with resource rollup](work-with-resource-rollup.md)<br /><br /> In Team Foundation, you can assign only one resource to a work item. You can assign multiple resources to a task in Project Professional and synchronize data for that task if you assign a primary owner or active resource to the task.<br /><br /> In addition, parent tasks that contain the rollup calculations of child tasks also contain the rollup of work that are assigned to the owners of each task. This rollup of owners appears as multiple resources in Project Professional for the summary task.| +|Mirrored fields|[Field mapping reference](field-mapping-xml-element-reference.md)<br /><br /> [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md)<br /><br /> In Team Foundation, you can store the values of Project fields and display them on the work item form. You can also find work items that contain one or more fields whose values differ from the values in the project plan.| + +## <a name="OpDiff"></a> Operational differences among Project Server editions + The following table indicates some of the operational differences to be aware of when you integrate TFS with the various editions of Project Server. + +|Operational area|Project Server 2010|Project Server 2013| +|--------------|---------------------|-------------------------| +|Setup|You must install the Team Foundation Server Extensions for Project Server on all Web Tiers and on all App Tiers in the server farm.<br /><br /> You must install the cumulative updates or modify the web.config file.|You must install the Team Foundation Server Extensions for Project Server on all Web Tiers and on all App Tiers in the server farm.| +|Security|See [Assign permissions](assign-permissions-support-tfs-project-server-integration.md).|See [Assign permissions](assign-permissions-support-tfs-project-server-integration.md).| +|Authentication|Instance of PWA must be set to **Classic Mode Authentication**.|Instance of PWA can be set to either **Classic Mode Authentication** or **Claims Based Authentication**.| +|Security mode|You manage Project Server security through customizable security groups and other functionality that is distinct from SharePoint groups.|You can choose between SharePoint or Project Server Permission Modes to control user access to sites and projects. To learn more, see [Plan user access in Project Server 2013](http://go.microsoft.com/fwlink/?LinkId=262117).| +|Approval comments|Approval comments that the project manager specifies in PWA are recorded in the History field for the work item.|Approval comments that the project manager specifies in PWA are recorded in the History field for the work item.| +|Automatic approvals|You can automatically approve changes that occur when data is synchronized.|You can automatically approve changes that occur when data is synchronized.| +|SharePoint tasks list|Not applicable.|Projects that synchronize with TFS must be configured as an Enterprise Project and not as a SharePoint tasks list.| + +## Related notes + [Synchronization process overview](synchronization-process-overview.md) + [Manage projects](manage-projects.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/project-server-fields-added-to-tfs.md b/docs/work/tfs-ps-sync/project-server-fields-added-to-tfs.md new file mode 100644 index 00000000000..94db41430d5 --- /dev/null +++ b/docs/work/tfs-ps-sync/project-server-fields-added-to-tfs.md @@ -0,0 +1,98 @@ +--- +title: Project Server fields added to TFS | TFS +description: Add fields to a work item form through export, modify, and import of the XML definition file +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 05912b54-10f4-4ba2-947d-0c856daafdf0 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Project Server fields added to TFS to support data synchronization +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> When you specify a type of work item to participate in data synchronization between Visual Studio Team Foundation Server and Microsoft Project Server, more than 25 fields are added to the work item type. Several of these fields are also added to the work item form and appear on the **Project Server** tab. You can use these fields to build reports or to specify queries that find work items. For more information, see [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md). + + You typically add or remove fields from a work item form by exporting the definition file for the work item type, modifying the file, and then importing it for the team project. However, for types of work items that participate in data synchronization, you add or remove fields from the **Project Server** tab by downloading the field mappings to a file, modifying it, and then uploading it to the team project collection. For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md). + +> [!IMPORTANT] +> Fields are mapped for a team project collection. All fields that are mapped for one type of work item are the same for all other types of work items that participate in data synchronization. For more information, see [Specify work item types](specify-wits-to-synchronize.md). + +## <a name="defaulttab"></a> Default Project Server Tab + When you associate an enterprise project with a team project, the **Project Server** tab, similar to the one in the following illustration, is added to the work item form. The tab is added only to those types of work items that you specify to participate in data synchronization. Fields are added only if their `displayTfsField` or `displayTfsMirror` attribute in the field mapping file is set to `true`. + + ![Project Server Tab default fields](_img/pstfs_projectservertab.png "PSTFS_ProjectServerTab") + + You can add or remove fields by customizing the field mappings for the team project collection. For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md) and [Field mapping reference](field-mapping-xml-element-reference.md). + +## <a name="defaultfields"></a> Default Project Server Fields + The following table describes each field that is added to the work item types to support data synchronization. Most of these fields are read-only and are used exclusively by the synchronization engine to track submissions, updates, and re-submissions. Mirrored fields are added to the **Project Server** tab when an enterprise project is mapped to a team project or a type of work item is mapped. + +> [!NOTE] +> The fields listed in the following table are imported to a team project collection from a global workflow definition file when the collection is mapped to an instance of PWA. For more information about global workflow, see [Customize global workflow](https://msdn.microsoft.com/library/gg534720.aspx). + +|Field|Reference name and data type|Description| +|-----------|----------------------------------|-----------------| +|Project Server Assigned To|Mirror.System.AssignedTo (String)|Read-only. Stores the value of the resource that is assigned to the work item in the project plan.| +|Project Server Completed Work|Mirror.Microsoft.VSTS.Scheduling.CompletedWork (Double)|Read-only. Stores the value of the Task Actual Work field that is assigned to the corresponding task in the project plan.| +|Project Server Enterprise Project|Microsoft.Sync.ProjSrv.ProjectName (String)|Read-write or Read-only. Specifies the name of the enterprise project plan whose task will synchronize with the work item.<br /><br /> When you submit a new work item from a team project that is mapped to multiple project plans, you must specify the plan with which you want the work item to synchronize. If the team project is mapped to only one project plan, this field is read-only and contains the name of the mapped project plan. **Note:** If you are logged on as a member of the service account group, the field always appears as read-write because the synchronization engine requires special access to this field.| +|Project Server Finish Date|Mirror.Microsoft.VSTS.Scheduling.FinishDate (DateTime)|Read-only. Stores the value of the Finish Date field that is assigned to the corresponding task in the project plan. **Note:** You can add the **Finish Date** (pjFinishDate) field to the mappings, but any value that you set in Team Foundation is not sent to Project Server. This restriction is by design. The Finish Date is always defined by the value in the enterprise project plan.| +|Project Server Is Linked (**Linked to Project Server**)|Microsoft.Sync.ProjSrv.IsLinkedToProjSrv (String)|Read-only. Specifies whether the work item is currently linked to a task in Project Server. Work items become linked after the task is published to Project Server. Valid values are Yes and No.| +|Project Server Last Review Status (**Last Approval Status**)|Microsoft.Sync.ProjSrv.LastReviewStatus (String)|Read-only. Specifies the state of the most recent approval made by the project manager as **Approved** or **Rejected**.| +|Project Server Last Reviewed Date (**Last Approval Date**)|Microsoft.Sync.ProjSrv.LastReviewedDate (DateTime)|Specifies the date and time when the project manager most recently approved status updates for the work item.| +|Project Server **Last Submit Status**|Microsoft.Sync.ProjSrv.LastSubmitStatus (String)|Read-only. Stores the result of the most recent submission to Project Server as **Success** or **Failure**.| +|Project Server **Last Submitted Date**|Microsoft.Sync.ProjSrv.LastSubmittedDate (DateTime)|Read-only. Stores the date and time when the work item was most recently saved and that corresponds to the version that was most recently submitted to Project Server.| +|Project Server Original Estimate|Mirror.Microsoft.VSTS.Scheduling.OriginalEstimate (Double)|Read-only. Stores the value of the Baseline Work field that is assigned to the corresponding task in the project plan.| +|Project Server Remaining Work|Mirror.Microsoft.VSTS.Scheduling.RemainingWork (Double)|Read-only. Stores the value of the Task Remaining Work field that is assigned to the corresponding task in the project plan.| +|Project Server Start Date|Mirror.Microsoft.VSTS.Scheduling.StartDate (DateTime)|Read-only. Stores the start date that is defined for the corresponding task in the project plan. **Note:** You can add the **Start Date** (pjStartDate) field to the mappings, any value that you set in Team Foundation is sent only the first time that you submit the work item to Project Server. This restriction is by design. The synchronization engine never sends updates on date-related fields to Project Server. Dates are defined by the values in the enterprise project plan.| +|Project Server Submit (Required)|Microsoft.Sync.ProjSrv.Submit (String)|Specifies whether the work item participates in data synchronization.| +|Project Server Title|Mirror.System.Title (String)|Read-only. Stores the title that is assigned to the corresponding task in the project plan.| + +### <a name="synconly"></a> Fields Used Exclusively to Support the Synchronization Process + The following table lists read-only fields that are used to support the synchronization process. + +> [!NOTE] +> The following information is provided for reference purposes only. + +|Field|Reference name and data type| +|-----------|----------------------------------| +|Project Server Sync Approval Watermark|Microsoft.Sync.ProjSrv.ApprovalWatermark (String)| +|Project Server Sync Assignment Data|Microsoft.Sync.ProjSrv.AssignmentData (PlainText)| +|Project Server Sync Is Summary in Project Server|Microsoft.Sync.ProjSrv.IsSummaryInProjSvr (Integer)| +|Project Server Sync Last Submitted Revision|Microsoft.Sync.ProjSrv.LastSubmittedRevision (Integer)| +|Project Server Sync Last Sync Revision|Microsoft.Sync.ProjSrv.LastSyncRevision (Integer)| +|Project Server Sync Last Sync Type|Microsoft.Sync.ProjSrv.LastSyncType (Integer)| +|Project Server Sync Project GUID|Microsoft.Sync.ProjSrv.ProjGuid (GUID)| +|Project Server Sync Queue Flags|Microsoft.Sync.ProjSrv.QueueFlags (Integer)| +|Project Server Sync Requested Assignment GUID|Microsoft.Sync.ProjSrv.RequestedAssnGuid (GUID)| +|Project Server Sync Requested Project GUID|Microsoft.Sync.ProjSrv.RequestedProjGuid (GUID)| +|Project Server Sync Submit Tag|Microsoft.Sync.ProjSrv.SubmitTag (String)| +|Project Server Sync Task GUID|Microsoft.Sync.ProjSrv.TaskGuid (GUID)| +|Project Server Sync Task Modified Revision Counter|Microsoft.Sync.ProjSrv.TaskModifiedRevCounter (Integer)| + +### <a name="psassigndata"></a> Project Server Assignment Data + The following code sample illustrates the markup language that is used to store the rollup of work for summary tasks in the **Project Server Sync Assignment Data** field. The `IsPrimary` attribute can be true for only one `Assignment`, the primary or active owner for the summary work item. + +> [!NOTE] +> The following information is provided for reference purposes only. + +``` +<Assignments> +   <Assignment IsPrimary="true" Succeeded="true"> +      <Field RefName="System.AssignedTo">Eduard Dell</Field> +      <Field RefName="Microsoft.VSTS.Scheduling.CompletedWork">0.000000</Field> +      <Field RefName="Microsoft.VSTS.Scheduling.RemainingWork">32.000000</Field> +   </Assignment> +   <Assignment IsPrimary="false" Succeeded="true"> +      <Field RefName="System.AssignedTo">Sanjay Patel</Field> +      <Field RefName="Microsoft.VSTS.Scheduling.CompletedWork">8.000000</Field> +      <Field RefName="Microsoft.VSTS.Scheduling.RemainingWork">16.000000</Field> +   </Assignment> +</Assignments> +``` + +## Related notes + [Synchronization process overview](synchronization-process-overview.md) + [Specify work item types](specify-wits-to-synchronize.md) + [Field mapping reference](field-mapping-xml-element-reference.md) + [Customize the field mapping](customize-field-mapping-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/register-pwa.md b/docs/work/tfs-ps-sync/register-pwa.md new file mode 100644 index 00000000000..7c409f4297e --- /dev/null +++ b/docs/work/tfs-ps-sync/register-pwa.md @@ -0,0 +1,131 @@ +--- +title: Register an instance of PWA to TFS | TFS +description: Register the instance of Project Web Access or Project Web App (PWA) to the Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 4093f721-e8ed-439b-9882-00fbb2ea430f +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Register an instance of PWA to TFS +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> Before you can synchronize data between Visual Studio Team Foundation Server 2013 and Microsoft Project Server, you must configure several points of integration between them. First, you must register the instance of Project Web Access or Project Web App (PWA) that supports an enterprise project plan with the application-tier server that hosts the team project collection that contains a team project. You can manage the registration of these instances of PWA by using the following options of the **TfsAdmin ProjectServer** command-line tool: + +- **/RegisterPWA**: Registers an instance of PWA to Team Foundation Server. + + > [!IMPORTANT] + > When connecting to Project Server 2010, the SharePoint web application for the instance of PWA must be set to **Classic Mode Authentication**. You will not be able to register the instance of PWA if it is set to **Claims Based Authentication**. + +- **/GetRegisteredPWA**: Lists the registered instances of PWA and the names of servers that are running Team Foundation Server to which the instances are registered. + +- **/UnregisterPWA**: Removes the registered association between an instance of PWA and Team Foundation Server. When you move a team project collection or a deployment of Team Foundation Server, you can remove the registered instances of PWA and then re-register them after the move. + + For more information about the configuration and integration of Project Server and Team Foundation Server, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + + To use the **TfsAdmin** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + +``` +cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE +``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%.**. + + **Requirements** + + To use these commands, you must belong to the **Team Foundation Administrators** group. To register or unregister an instance of PWA, you must also belong to the Administrators group for the instance. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to perform this function on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the context menu for **Command Prompt**, and then choose **Run as Administrator**. For more information, see the following page on the Microsoft website: [User Access Control](http://go.microsoft.com/fwlink/?LinkId=111235). + + + +## Syntax + +``` +TfsAdmin ProjectServer /GetRegisteredPWA /tfs:tfsUrl +``` + +``` +TfsAdmin ProjectServer /RegisterPWA /pwa:pwaUrl /tfs:tfsUrl [/previousPwa:pwaUrl] [/force] +``` + +``` +TfsAdmin ProjectServer /UnregisterPWA /pwa:pwaUrl /tfs:tfsUrl +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/tfs**:`tfsUrl`|Specifies the uniform resource locator (URL) of an application-tier server for Team Foundation. You specify the URI in the following format:<br /><br /> **http**://*ServerName:Port/VirtualDirectoryName*<br /><br /> If you do not specify a virtual directory, specify the URL in the following format:<br /><br /> **http**://*ServerName:Port*| +|**/pwa:** *pwaUrl*|Specifies the URL of an instance of PWA. You specify the URL in the following format:<br /><br /> **http**://*PWAServerName/PWAInstance*| +|**/previousPwa:** *pwaUrl*|Specifies the URL that was most recently registered for an instance of PWA. When the URL changes for a registered PWA, you can use this switch to re-register the PWA. You specify the URL in the following format:<br /><br /> **http**://*PWAServerName/PWAInstance*| +|**/force**|Registers an instance of PWA with a different server that is running Team Foundation Server, and unregisters the instance from the server to which it was most recently registered. For example, when you move a project collection to another application-tier server, you must re-register the PWA for the collection with the new server.| +|**/?** or **help**|Displays information about the command.| + +## Remarks + When you run a **TFSAdmin ProjectServer** command, a message appears and confirms that the command is running. For example, the following message states that the instance of Project Web Access is being registered: + +``` +Registering PWA http:// PWAServerName/PWAInstance/ +``` + + Another message appears after the command finishes. For example, the following message states that the instance of Project Web Access has been registered with Team Foundation Server: + +``` +You have successfully registered PWA http://PWAServerName/PWAInstance/ +``` + + You can register an instance of PWA with only one application-tier server for Team Foundation. You must register an instance before you can associate it with a team project collection. When you register an instance, the location service for Team Foundation Server is updated with that information. In addition, the instance of PWA is updated with the custom fields and lookup tables that integration requires. + + When you run a registration command, the following operations occur: + +- If you run `/RegisterPWA` more than once and a record of the registration already exists, the following message appears: + + `The following PWA instance has already been registered: <PWAInstance>.` + +- When you run `/GetRegisteredPWA`, the following information appears: + + ``` + The following PWA instances are registered: + PWA URL 1 + PWA URL 2 + ``` + +- When you run the `/UnRegisterPWA` option, the command removes not only the mapped association but also the custom fields and lookup tables from the instance of PWA. + +## Examples + The following values apply in each example: + +- URL for the instance of PWA: http://*PWAServerName*/*PWAInstance*/ + +- URL for Team Foundation Server: http://AdventureWorksServer:8080/tfs/ + +### List the registered instances of PWA + The following example lists the instances of PWA that are registered to AdventureWorksServer: + +``` +TfsAdmin ProjectServer /GetRegisteredPWA /tfs:http://AdventureWorksServer:8080/tfs/ + +``` + +### Register an instance of PWA + The following example registers *PWAInstance* to AdventureWorksServer: + +``` +TfsAdmin ProjectServer /RegisterPWA /pwa:http://PWAServerName/PWAInstance /tfs:http://AdventureWorksServer:8080/tfs/ +``` + +### Remove registration of an instance of PWA + The following example removes the registration of *PWAInstance* from AdventureWorksServer: + +``` +TfsAdmin ProjectServer /UnregisterPWA /pwa:http://PWAServerName/PWAInstance/ /tfs:http://AdventureWorksServer:8080/tfs/ +``` + + +## Related notes + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) + [Map integration components](map-integration-components.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/remove-component-from-synchronization.md b/docs/work/tfs-ps-sync/remove-component-from-synchronization.md new file mode 100644 index 00000000000..473ea4dd571 --- /dev/null +++ b/docs/work/tfs-ps-sync/remove-component-from-synchronization.md @@ -0,0 +1,139 @@ +--- +title: Remove a component from participating in data synchronization | TFS +description: Remove components that is configured to participate in data synchronization between Visual Studio Team Foundation Server (TFS) and Project Server. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 6e0dbfd4-e830-4b5a-a42f-536e744665fa +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Remove a component from participating in data synchronization +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> You can remove components that you have configured to participate in data synchronization between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server. To permanently shut down synchronization, you must unmap each team project collection that is mapped and unregister each instance of Project Web Access or Project Web App (PWA) that is registered to TFS. + + **Components you can remove from participating in synchronization:** + +- [All components](#removeintegration) +- [An enterprise project plan](#removeplan) +- [Team project collection](#remove_tpc) +- [An instance of PWA](#removepwa) +- [A work item type](#removewit) +- [A work item field](#removefield) + +When you move servers or collections, you do not need to shut down synchronization, but you must perform some additional administrative tasks. For more information, see [Change your deployment configuration](change-deployment-configuration.md). + +When you delete a task from Project Server that has been synchronized with a work item in Team Foundation, you remove the association between the task and the work item. Work items remain in the database for Team Foundation. If you want to delete these work items, you must use the **witadmin destroywi** command. For more information, see [Remove items that aren't synchronizing](remove-items-not-synching.md). + + **Requirements** + + To use these commands, your **Administer Project Server integration** permission must be set to **Allow**. Also, the service account for Team Foundation Server must be granted the necessary permissions to interact with the instance of PWA that will participate in data synchronization. To register or unregister an instance of PWA, you must also belong to the Administrators group for the instance. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +> [!NOTE] +> Even if you log on with administrative permissions, you must open an elevated Command Prompt window to run the `TfsAdmin` command-line tool on a server that is running Windows Server 2008. To open an elevated Command Prompt window, choose **Start**, open the shortcut menu for **Command Prompt**, and then choose **Run as Administrator**. For more information, see the following page on the Microsoft website: [User Access Control](http://go.microsoft.com/fwlink/?LinkId=111235). + +## <a name="removeintegration"></a> Remove integration and shut down synchronization + The following illustration shows the systematic sequence of steps that you take to shut down the synchronization engine and remove the integration of Team Foundation Server and Project Server. You can perform the sequence of steps as shown, or you can use the **/force** switch when you perform step 3 using the `TfsAdmin ProjectServer /UnMapPWAFromCollection` command option. + + ![Workflow for removing mapping between PS and TFS](_img/pstfs_unmap_workflow.png "PSTFS_UnMap_Workflow") + +> [!NOTE] +> If you delete not only a mapped project collection but also all instances of PWA that were mapped to it, you will remove all mappings of work items that have been synchronized. However, the instance of PWA to Team Foundation Server will still be registered. + + The **/force** switch automatically removes mapped or linked components. If you use this switch, you must run only one command for each collection and instance of PWA that you want to remove from participating in synchronization. To shut down the synchronization engine by using the **/force** switch, perform the following actions in the indicated sequence: + +1. Remove mapping for each collection as [Removing a Team Project Collection from Participating in Synchronization](#remove_tpc) describes later in this topic. + +2. Unregister each instance of PWA as [Removing an Instance of PWA from Participating in Synchronization](#removepwa) describes later in this topic. + + The synchronization engine runs under a job service that the Team Foundation Background Job Agent manages. A synchronization engine is registered for each collection that is mapped to an instance of PWA. When you remove the integration of Project Server and Team Foundation Server, you shut down synchronization and cause the following actions to occur: + +- Remove the association between tasks in Project and work items in the team project. + +- Remove the association between enterprise project plans and team projects. This change includes the removal of the **Project Server** tab from the forms for all types of work items in the team project that are no longer mapped, if no other plan is mapped to the team project. + +- Remove the association between collections and an instance of PWA. + +- Remove the association between the instance of PWA and Team Foundation Server. + +## <a name="removeplan"></a> Remove an enterprise project plan from participating in synchronization + You remove a plan from participating in synchronization by unmapping it from the team project. Before you can unmap the plan, you must first delete all tasks that are linked to work items in the mapped team project. As an alternative, you can use the `/force` flag to remove these links. + +#### To unmap an enterprise project plan from a team project + +1. Open a Command Prompt window where either Visual Studio 2013 or Team Explorer 2013 is installed and enter: + + ``` + cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + +2. Type the following command, and then choose the **ENTER** key. + + ``` + TfsAdmin ProjectServer /UnmapPlanFromTeamProject /collection:tpcUrl /enterpriseProject:EnterpriseProjectName /teamProject:TeamProjectName /force + ``` + + Replace *tpcUrl* with the URL of the team project collection, *EnterpriseProjectName* with the name of the enterprise project plan, and *TeamProjectName* with the name of the team project. + +3. Wait until you see the following messages: + + **Unmapping enterprise project** *EnterpriseProjectName* **from team project** *TeamProjectName*. + + **Enterprise project** *EnterpriseProjectName* **was successfully unmapped from team project** *TeamProjectName*. + +## <a name="remove_tpc"></a> Remove a team project collection from participating in synchronization + You remove a collection from participating in synchronization by unmapping it from the instance of PWA. Before you can unmap the collection, you must first unmap all project plans that are mapped to team projects in the collection. As an alternative, you can use the `/force` flag to unmap all team projects. + +#### To unmap a collection and all team projects from an instance of PWA + +1. Open a Command Prompt window, type the following command, and then choose the **ENTER** key. + + ``` + TfsAdmin ProjectServer /UnMapPWAFromCollection /pwa:pwaUrl /collection:tpcUrl /force + ``` + + Replace *pwaUrl* with the URL of the instance of PWA and *tpcUrl* with the URL of the collection. + +2. Wait until you see the following messages: + + **Unmapping team project collection** *tpcUrl* **from PWA** *pwaUrl*. + + **You have successfully unmapped team project collection** *tpcUrl* **from PWA** *pwaUrl*. + +## <a name="removepwa"></a> Remove an Instance of PWA from participating in synchronization + As the final step in removing the integration, you must unregister each instance of PWA that was registered with Team Foundation Server. You should unregister all instances of PWA that no longer contain any enterprise projects that must synchronize their data with Team Foundation. + +#### To unregister an instance of PWA + +1. Open a Command Prompt window, enter the following command, and then choose the **ENTER** key: + + ``` + TfsAdmin ProjectServer /UnregisterPWA /pwa:pwaUrl /tfs:tfsUrl + ``` + + Replace *pwaUrl* with the URL of the instance of PWA and *tfsUrl* with the URL of the application-tier server. + + Wait until the following messages appear: + + **Unregistering PWA** *pwaUrl*. + + **You have successfully unregistered PWA** *pwaUrl*. + +2. Repeat step 2 for each instance of PWA that supports enterprise project plans that you want to remove from participating in synchronization with Team Foundation. + +## <a name="removewit"></a> Remove a type of work item from participating in synchronization + You can remove one or more types of work items from participating in data synchronization for a team project by using the **TfsAdmin ProjectServer /UnmapWorkItemTypes** command. If any work items of the type that you want to remove are being synchronized, you can specify the **/force** switch to remove the links that bind them to their corresponding tasks in Project. + + For more information, see [Specify work item types](specify-wits-to-synchronize.md). + +## <a name="removefield"></a> Remove a field from participating in synchronization + You can remove one or more fields from participating in data synchronization for a team project collection. You remove a field from synchronization by removing its mappings. You must not remove fields that are required for synchronization. For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md) and [Upload or download field mappings](manage-field-mappings.md). + +## Related notes + [Map integration components](map-integration-components.md) + [Configure and manage TFS resources](../../accounts/account-management.md) + [Remove items that aren't synchronizing](remove-items-not-synching.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/remove-items-not-synching.md b/docs/work/tfs-ps-sync/remove-items-not-synching.md new file mode 100644 index 00000000000..a7310a88685 --- /dev/null +++ b/docs/work/tfs-ps-sync/remove-items-not-synching.md @@ -0,0 +1,30 @@ +--- +title: Delete tasks and remove work items that are no longer participating in synchronization | TFS +description: Remove the work items in the synchronization that are no longer participating -Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 18f3e8d1-12ae-4cc6-a95b-357450a9ba81 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Delete tasks and remove work items that are no longer participating in synchronization + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +When you delete a task from Microsoft Project Professional that has been synchronized with a work item in Team Foundation, you remove the association between the task and the work item. This removal occurs after you publish the plan to Microsoft Project Server and the synchronization process completes to update the changes. However, the synchronization process does not delete the corresponding work item from the team project. Work items remain stored in the database for Team Foundation. Team members can set the state of the work item to Closed. + + If you want to completely remove from Team Foundation work items whose tasks have been deleted from Project, you can use the **witadmin destroywi** command. For more information, see [Remove work items permanently](../../work/backlogs/remove-delete-work-items.md). + + To permanently remove work items, you must first determine the work item IDs that are assigned to each item. You can create a query that finds these items. To find items that are no longer synchronized with Project Server, you can create the query in the following table. This query finds all work items for which the **Linked to Project Server** field is set to **No** but that used to be set to **Yes**. The query does not find items that have not changed in the last 60 days. + +|And/Or|Field|Operator|Value| +|-------------|-----------|--------------|-----------| +||**Team Project**|**=**|**@Project**| +|**And**|**Project Server Is Linked**|**=**|**No**| +|**And**|**Project Server Is Linked**|**Was Ever**|**Yes**| +|**And**|**Changed Date**|**>=**|**@Today - 60**| + +## Related notes + [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md) + [Manage projects](manage-projects.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/resolve-validation-errors.md b/docs/work/tfs-ps-sync/resolve-validation-errors.md new file mode 100644 index 00000000000..0875886017a --- /dev/null +++ b/docs/work/tfs-ps-sync/resolve-validation-errors.md @@ -0,0 +1,71 @@ +--- +title: Resolve validation errors | TFS +description: Use the Validation Resolution dialog box to resolve the data validation errors that appear in the Unpublished work items list. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 72c1dd06-a3a1-499c-b2a3-4d7f884033fd +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Resolve validation errors for data synchronization + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +When you publish an enterprise project plan that is mapped to a team project, the Team Foundation add-in for Microsoft Project Professional performs several data validation checks. A data validation error occurs if you define or modify the values for a task that is set to publish to Team Foundation Server (TFS) and one or more values violate a rule that is defined for the type of work item that is associated with the task. + +> [!NOTE] +> For information about how to resolve data validation errors in Microsoft Project for a non-enterprise project plan that is bound to a team project, see [Resolve data validation errors](https://msdn.microsoft.com/library/ms181670.aspx). + + Validation rules are added to the enterprise project plan when it is mapped to a team project. If a data validation error occurs, the **Validation Resolution** dialog box appears. In the **Unpublished work items** list, the Issue column indicates the type of error that has occurred. The Status column indicates whether you must take a corrective action, Project has corrected it automatically, or you have corrected it. For issues that Project corrected automatically, you can choose the entry to display the reason for the correction in the lower part of the dialog box. + + The following table summarizes the types of errors that data validation identifies. + +|Issue|Status|Corrective action| +|-----------|------------|-----------------------| +|One Team Foundation Owner Required|Action Required|In the **Resource Names** field, you must specify a valid contributor for a team project. **Note:** You can assign only one active user to a task that is published to Team Foundation Server. However, multiple resources appear in Project for summary tasks that contain the rollup of child work items.| +|Invalid Value|Action Required|You must specify a valid value for each field that is required for the work item type to which the task is linked. In some instances, you must choose **Correct this error** to access the work item form in which to make the corrections.| +|Invalid Work Item Type|Action Required|You must specify a work item type that has been configured to participate in synchronization for the enterprise project plan and the mapped team project. **Note:** Project automatically corrects the field if only one work item type is mapped for the project plan and team project. <br /><br /> If you want to specify a type of work item that is valid for the mapped team project but not for the enterprise project plan, you can add it to the list of mapped types. For more information, see [Specify work item types](specify-wits-to-synchronize.md). **Important:** Text30 is the default Project field that is associated with the **Work Item Type** column that is used in synchronizing tasks with work items. If you ever connect the project plan to Team Foundation Server by using the **Choose Team Project** option on the Team ribbon menu, an additional Project field, which is labeled **Work Item Type**, becomes available. This field, with a default Project field of Text24, supports mapping of project plans that are bound to Team Foundation but does not support synchronizing plans. The Text24-based field contains the full list of work item types for the team project. You can verify that you have the correct field by hovering over it and verifying that **Text30** appears.| +|Invalid Work Item Type|Automatically Corrected|If you change the value that is assigned to the **Work Item Type**, Project reassigns the value that was defined when the task was first published. You cannot change the value of the work item type for a task after it has been published to Team Foundation Server.| +|Link error in Publish to Team Project|Automatically Corrected|Project changes the value of the **Publish to Team Project** field to **Yes** in the following instances:<br /><br /> - After a work item has been submitted from Team Foundation Server, approved, and accepted into the plan, it must continue to be published.<br />- After a task has been published to Team Foundation Server, it must continue to be published. You must delete a task from the project plan to stop publishing it.<br />- If any child tasks of a published parent task are set to publish, all child tasks must be set to publish.| + + In addition to the errors that the previous table describes, you must resolve the following errors before you can publish the enterprise project plan. + +- When a field that is required to support data synchronization is not defined in Project Server, you must contact your administrator to correct the field mapping file. For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md). + +- When the resource pool does not contain any valid contributors for the team project that is mapped, you must add these users to the resource pool. For more information, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). + +## <a name="ResolveDataValidationError"></a> Resolving a Data Validation Error + You can use the **Validation Resolution** dialog box to resolve the data validation errors that appear in the **Unpublished work items** list. + +#### To correct an invalid work item type + +1. Choose the row that contains the **Invalid Work Item Type** issue, choose **Choose Values**, and then specify the type of work item that you want to associate with the task. + + ![Choose a valid work item type](_img/ps-tfs_proj_validresolut.png "PS-TFS_Proj_ValidResolut") + + > [!NOTE] + > The add-in for Project Server Integration validates the task field assignments against the work item type rules when they are published. + +2. If no more issues occur, choose **Save and Publish**. + +#### To correct other data validation issues + +1. In the **Unpublished work items** list, choose the row for each work item that you want to correct. + + 1. Review the information that appears under **Details**, and then choose **Correct this error**. + + 2. In the work item form that appears, review the information, and correct the value. + + 3. Choose **Close** to save your changes and close the work item form. + +2. After you correct all data validation errors, choose **Save and Publish**. + + > [!NOTE] + > This step publishes only the work items that you corrected. You cannot publish a plan until you resolve each data validation error. + +3. Choose **Close**. + +## Related notes + [Remove items that aren't synchronizing](remove-items-not-synching.md) + [Manage projects](manage-projects.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/restrictions-mapping-ps-fields.md b/docs/work/tfs-ps-sync/restrictions-mapping-ps-fields.md new file mode 100644 index 00000000000..022df9d7716 --- /dev/null +++ b/docs/work/tfs-ps-sync/restrictions-mapping-ps-fields.md @@ -0,0 +1,117 @@ +--- +title: Restrictions on mapping Project Server fields in TFS-Project Server integration | TFS +description: Add restriction on mapping Project Server in Team Foundation Server. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: f839c9c9-078b-4a96-93a3-132055edfb76 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Restrictions on mapping Project Server fields in TFS-Project Server integration +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> When you add fields to participate in data synchronization between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server, make sure that you do not map fields that are restricted. You map fields by customizing the field mappings for a team project collection. You can map both built-in and custom fields in Project. You can map some of those fields only to the status queue and some fields only to TFS. In general, you should map resource-level information, pjResource\* fields, from Team Foundation Server to Project Server within the **tfsToTarget** element and only task-level information, pjTask\* fields, from Project Server to TFS within the **targetToTfs** element. For more information, see [Field mapping reference](field-mapping-xml-element-reference.md). + + You must also match the data types of mapped fields, both built-in and custom, according to the criteria that this topic describes. For more information about built-in fields, see [Available fields reference](http://go.microsoft.com/fwlink/?LinkId=203358). + + +## <a name="renaming"></a> Restrictions on units of measurement and renaming + The following restrictions apply to the mapping of fields that participate in data synchronization: + +- You cannot customize the units of mapped fields. For example, when you add the `pjResourceAssignmentUnits` to the field mappings, it is added using the unit of percentage, and you cannot change that measure. + +- Although you can add the **Finish Date** (pjFinishDate) field to the mappings, any value that you set in Team Foundation is not sent to Project Server. This restriction is by design. The project manager must set the Finish Date in the enterprise project plan. + +- If you rename the `ActiveTfsAssignment(TFS)` field in Project and try to publish your enterprise project plan, the **Validation Resolution** dialog box will appear. To resolve this condition, you must rename the field to its original name. + +## <a name="taskname"></a> Task name and work item title field + Project **Name** (pjTaskName) is the only field that is mapped from Project Server to Team Foundation and the status queue. This field maps to the Title (System.Title) field in Team Foundation. No other fields can be mapped to both Team Foundation Server and the status queue. The two-way mapping allows changes in both the enterprise project plan and team project to flow in both directions. + + This mapping is represented in the following code of the field mappings: + +``` +<field tfsName="System.Title" tfsMirrorName="Mirror.System.Title" displayTfsField="false" displayTfsMirror="false" onConflict="PSWin"> +   <tfsToTarget> +      <target provider="ProjectServerStatusQueue" name="pjTaskName" /> +   </tfsToTarget> +   <targetToTfs> +      <target provider="ProjectServerPublished" name="pjTaskName" /> +   </targetToTfs> +</field> +``` + +## <a name="statusqueue"></a> Fields available for mapping to the status queue + You can map the following resource-related fields from Project Server to the Status queue. You can add these fields to the field mapping within the **tfsToTarget** element to send status updates to Project Server. + +||||| +|-|-|-|-| +|- pjResourceActualFinish<br />- pjResourceActualOvertimeWork<br />- pjResourceActualStart<br />- pjResourceActualWork|- pjResourceAssignmentUnits<br />- pjResourceConfirmed<br />- pjResourceFinish<br />- pjResourceOvertimeWork|- pjResourcePercentWorkComplete<br />- pjResourceRegularWork<br />- pjResourceRemainingOvertimeWork<br />- pjResourceRemainingWork|- pjResourceStart<br />- pjResourceUpdatesNeeded<br />- pjResourceWork| + + In the following example, the Project Server Resource Work field is mapped to the MSFT.MappedTopjResourceWork field in Team Foundation for the status queue target. + +``` +<field tfsName="MSFT.MappedTopjResourceWork" tfsMirrorName="Mirror.MSFT.MappedTopjResourceWork" displayTfsField="true" displayTfsMirror="true"> +   <tfsToTarget> +       <target provider="ProjectServerStatusQueue" name="pjResourceWork" /> +   </tfsToTarget> +</field> + +``` + + You can also combine the mapping of a resource-specific field with a task-specific field to form a full mapping. In the following example, the pjTaskWork field is mapped within the **targetToTfs** element to provide a complete round-trip mapping. + +``` +<field tfsName="MSFT.MappedTopjResourceWork" tfsMirrorName="Mirror.MSFT.MappedTopjResourceWork" displayTfsField="true" displayTfsMirror="true"> +   <tfsToTarget> +       <target provider="ProjectServerStatusQueue" name="pjResourceWork" /> +   </tfsToTarget> +   <targetToTfs> +       <target provider=" ProjectServerPublished" name="pjTaskWork"/> +   </targetToTfs> +</field> + +``` + +## <a name="pstotf"></a> Fields available for mapping from Project Server to Team Foundation only + You can map the following task-specific fields from Project Server to Team Foundation Server. You can also combine the mapping of a task-specific field with a resource-specific field to form a full mapping. + +||||| +|-|-|-|-| +|- pjTaskActualCost<br />- pjTaskActualDuration<br />- pjTaskActualFinish<br />- pjTaskActualOvertimeCost<br />- pjTaskActualOvertimeWork<br />- pjTaskActualStart<br />- pjTaskActualWork<br />- pjTaskACWP<br />- pjTaskBCWP<br />- pjTaskBCWS<br />- pjTaskBudgetCost<br />- pjTaskBudgetWork<br />- pjTaskCost<br />- pjTaskCPI<br />- pjTaskCreated<br />- pjTaskCV<br />- pjTaskCVPercent<br />- pjTaskDeadline<br />- pjTaskDuration<br />- pjTaskDuration1|- pjTaskDurationVariance<br />- pjTaskEAC<br />- pjTaskEarlyFinish<br />- pjTaskEarlyStart<br />- pjTaskExternalTask<br />- pjTaskFinish<br />- pjTaskFinishVariance<br />- pjTaskFixedCost<br />- pjTaskFreeSlack<br />- pjTaskHyperlink<br />- pjTaskHyperlinkAddress<br />- pjTaskHyperlinkSubAddress<br />- pjTaskIgnoreResourceCalendar<br />- pjTaskLateFinish<br />- pjTaskLateStart<br />- pjTaskOverallocated<br />- pjTaskOvertimeCost<br />- pjTaskOvertimeWork<br />- pjTaskPercentComplete<br />- pjTaskPercentWorkComplete|- pjTaskPhysicalPercentComplete<br />- pjTaskPriority<br />- pjTaskRecurring<br />- pjTaskRegularWork<br />- pjTaskRemainingCost<br />- pjTaskRemainingOvertimeCost<br />- pjTaskRemainingOvertimeWork<br />- pjTaskRemainingWork<br />- pjTaskSPI<br />- pjTaskStart<br />- pjTaskStartVariance<br />- pjTaskSummary<br />- pjTaskSV<br />- pjTaskSVPercent<br />- pjTaskTCPI<br />- pjTaskTotalSlack<br />- pjTaskVAC<br />- pjTaskWork<br />- pjTaskWorkVariance|- pjTaskBaselineCost<br />- pjTaskBaselineWork<br />- pjTaskBaselineBudgetCost<br />- pjTaskBaselineBudgetWork<br />- pjTaskBaselineDuration<br />- pjTaskBaselineStart<br />- pjTaskBaselineFinish<br />- pjTaskBaseline1Cost<br />- pjTaskBaseline1Work<br />- pjTaskBaseline1BudgetCost<br />- pjTaskBaseline1BudgetWork<br />- pjTaskBaseline1Duration<br />- pjTaskBaseline1Start<br />- pjTaskBaseline1Finish<br /> . . .<br />- pjTaskBaseline10Cost<br />- pjTaskBaseline10Work<br />- pjTaskBaseline10BudgetCost<br />- pjTaskBaseline10BudgetWork<br />- pjTaskBaseline10Duration<br />- pjTaskBaseline10Start<br />- pjTaskBaseline10Finish| + + In the following example, the Project Server Resource Work field is mapped to the MSFT.MappedTopjTaskBaseline1Start field in Team Foundation for the Team Foundation Server target. + +``` +<field tfsName="MSFT.MappedTopjTaskBaseline1Start" tfsMirrorName="Mirror.MSFT.MappedTopjTaskBaseline1Start" displayTfsField="true" displayTfsMirror="true"> +   <targetToTfs> +       <target provider="ProjectServerPublished" name="pjTaskBaseline1Start" /> +   </targetToTfs> +</field> + +``` + +## <a name="restricted"></a> Fields restricted from mapping + The following Project Server fields are restricted from mapping. Do not add these fields to the field mapping between Team Foundation and Project Server. + +||||| +|-|-|-|-| +|- pjResourceID<br />- pjResourceNotes<br />- pjTaskCalendar<br />- pjTaskCalendarGUID<br />- pjTaskCommitmentFinish<br />- pjTaskCommitmentGuid<br />- pjTaskCommitmentStart<br />- pjTaskCommitmentType|- pjTaskConfirmed<br />- pjTaskConstraintDate<br />- pjTaskConstraintType<br />- pjTaskContact<br />- pjTaskCritical<br />- pjTaskDelay<br />- pjTaskHyperlinkScreenTip<br />- pjTaskID|- pjTaskLevelCanSplit<br />- pjTaskLevelDelay<br />- pjTaskNotes<br />- pjTaskParentTask<br />- pjTaskPreleveledFinish<br />- pjTaskPreleveledStart<br />- pjTaskProject<br />- pjTaskResume|- pjTaskRollup<br />- pjTaskStartSlack<br />- pjTaskStop<br />- pjTaskSubproject<br />- pjTaskSubprojectReadOnly<br />- pjTaskSuccessors<br />- pjTaskUniqueID<br />- pjTaskWBS| + +## <a name="datatypes"></a> Data types and field mapping criteria + When you map a field from Team Foundation Server to Project Server, make sure that you match the data type of the Project Server field with that defined for the Team Foundation field according to the criteria that the following table outlines. In addition to the built-in fields that are listed earlier in this topic, you can create custom enterprise task-type fields and map them to support synchronization in either or both directions. For custom fields, make sure that you match the data types of fields as the third column of the table indicates. For more information, see [Creating Lookup Tables and Enterprise Custom Fields](http://go.microsoft.com/fwlink/?LinkId=209696). + +> [!NOTE] +> The units for work and task duration are specified in hours. You cannot customize the units. + +|Team Foundation Server|Fields that are built in to Project Server|Custom enterprise fields in Project Server| +|------------------------------------------------------------------|------------------------------------------------|------------------------------------------------| +|DateTime|Date|Date| +|Double|Work, Cost, Duration, Count, Percentage|Number, Cost, Duration| +|Integer|Count, Percentage|Number| +|String|Text|Text| +|TreePath|Text|Text| + +## Related notes + [Field mapping reference](field-mapping-xml-element-reference.md) + [Customize the field mapping](customize-field-mapping-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/specify-wits-to-synchronize.md b/docs/work/tfs-ps-sync/specify-wits-to-synchronize.md new file mode 100644 index 00000000000..0f38eef994c --- /dev/null +++ b/docs/work/tfs-ps-sync/specify-wits-to-synchronize.md @@ -0,0 +1,105 @@ +--- +title: Specify the work item types to synchronize | TFS +description: Specifiy the types of work items that you want to participate in synchronization. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: fc034114-fce1-48ca-a4e9-df41081a4bbb +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Specify the work item types to synchronize +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> To support synchronization of data between an enterprise project plan and a team project, you must specify the types of work items that you want to participate in synchronization. You can define the types when you associate a project plan to a team project, and you can add or remove types later. + +> [!NOTE] +> All types of work items that are mapped for a team project are available to participate in data synchronization with all enterprise project plans that you have currently mapped to that team project or that you may map later. + + Before you can manage the types of work items that participate in synchronization, you must have configured the integration of Visual Studio Team Foundation Server and Microsoft Project Server, and you must have mapped an enterprise project plan with the team project. For more information, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + + **Requirements** + + To perform these procedures, your **Administer Project Server integration** permission must be set to **Allow** for a team project collection. Also, the service account for Team Foundation Server must be granted the necessary permissions to interact with the instances of PWA that will participate in data synchronization. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="GetList"></a> List the types of work items that are configured to participate in data synchronization + By using the following command, you can determine which types for a team project are already mapped and available to use with an enterprise project plan. + +#### To list types of work items that are mapped for a team project + +1. To run the **TfsAdmin** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + + ``` + cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE + ``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%**. + +2. Specify the following command, and then choose the **Enter** key. + + ``` + TfsAdmin ProjectServer /GetMappedWorkItemTypes /collection:tpcUrl /teamProject: TeamProjectName + ``` + + Replace *tpcUrl* with the URL of the project collection and *TeamProjectName* with the name of the team project. + + The following message appears: + + **The following types of work items are configured for synchronization:** + + *List of Work Item Types* + +## <a name="MapTypes"></a> Specify the types of work items that can participate in data synchronization + You can configure one or more types of work items for a team project to participate in data synchronization with tasks in project plans. The project plans may be currently mapped to the team project, or you can configure them later to synchronize data with the team project. + +#### To map types of work items for a team project + +- At the command prompt, type the following command, and then choose the **Enter** key. + + ``` + TfsAdmin ProjectServer /MapWorkItemTypes /collection:tpcUrl /teamProject:TeamProjectName /workItemTypes:ListOfWorkItemTypes + ``` + + Replace *tpcUrl* with the URL of the team project collection and *TeamProjectName* with the name of the team project. Replace *ListOfWorkItemTypes* with the names of the types of work items that you want to participate in data synchronization. For example, you can specify the following types of work items to support an agile process as “*User Story,Task*" or *“User Story",Task*. Do not include a space after the comma. + + You can specify the optional `/skipUIChanges` flag to indicate that no modifications should be made to the **Project Server** tab for the work item forms of the types that you specify. + + > [!IMPORTANT] + > You should include the `/skipUIChanges` flag only if a message indicates an error occurred when the system tried to add a **Project Server** tab. If this message appears, you will need to add the **Project Server** tab to the work item type definition manually. For more information, see [Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md). + + The following messages appear: + + **Configuring synchronization for the following work item types for team project** *TeamProjectName*: *List of Work Item Types*`.` + + **You have successfully configured the following work item types for team project** *TeamProjectName*: *List of Work Item Types*`.` + + If you have added a type and did not specify the `/skipUIChanges` flag, you can verify that the type has been modified by refreshing the team project in Team Explorer and then opening a work item of the type that you added. The **Project Server** tab should appear in the work item form. + +## <a name="UnmapTypes"></a> Remove a work item type from participating in data synchronization + Before you can remove a type of work item from participating in data synchronization, you should remove the links that bind the work items of that type to tasks that are defined in an enterprise project plan. As an alternative, you can use the `/force` flag to force the removal of these links and then remove the type. + +#### To unmap a work item type from a team project + +- At the command prompt, type the following command, and then choose the **Enter** key. + + ``` + TfsAdmin ProjectServer /UnmapWorkItemTypes /collection:tpcUrl /teamProject:TeamProjectName /workItemTypes:ListOfWorkItemTypes + ``` + + Replace *tpcUrl* with the URL of the team project collection, *TeamProjectName* with the name of the team project, and *ListOfWorkItemTypes* with the name or names of the types of work items to unmap. + + You can specify the optional `/force` flag to remove links that bind work items to Project tasks. By using this option, you can remove types of work item from participating in data synchronization, even if work items of that type are currently being synchronized. + + The following messages appear: + + **Removing the following work item types from participating in synchronization of data for team project** *TeamProjectName* **:** *List of Work Item Types* **.** + + **The following work item types have been successfully removed from participating in synchronization for team project** *TeamProjectName* **:** *List of Work Item Types* **.** + + You can verify whether the type has been removed by refreshing the team project in Team Explorer and then opening a work item of the type that you removed. The **Project Server** tab should be removed from the work item form. + +## Related notes + [Define the work item types to synchronize](define-work-item-types-available-synchronization.md) + [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) + [Manage mappings](manage-mappings-enterprise-project-team-project.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/synchronization-process-overview.md b/docs/work/tfs-ps-sync/synchronization-process-overview.md new file mode 100644 index 00000000000..bcbd6969ca2 --- /dev/null +++ b/docs/work/tfs-ps-sync/synchronization-process-overview.md @@ -0,0 +1,184 @@ +--- +title: TFS-Project Server synchronization process overview | TFS +description: Understand how the synchronization engine manages the flow of data between the two server products. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: a34c054a-1361-43ce-962e-bf29ce04ffb2 +ms.manager: douge +ms.author: kaelli +ms.date: 04/05/2017 +ms.topic: get-started-article +--- +# Synchronization process overview for TFS-Project Server integration + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +You can manage the integration of Visual Studio Team Foundation Server 2013 and Microsoft Project Server more effectively if you understand how the synchronization engine manages the flow of data between the two server products. The synchronization engine supports the independent workflows of project managers who work in Project Professional and team leads and team members who work in Team Foundation. Deliverables and tasks can evolve independently in each area. + + +## <a name="Three-WaySync"></a> Three types of synchronization + The synchronization engine performs three types of synchronization. This process captures and updates task-related and resource-related data in both TFS and Project Server while respecting the ownership of data by the project manager in the project plan. Project managers make changes by using Microsoft Project Professional and approve updates through Project Web Access or Project Web App (PWA). Development team members submit updates to Project Server by using a client of Team Foundation. + + As the following illustration shows, data synchronization consists of seven main steps. + + ![PS-TFS Synchronization process](_img/pstfs_syncprocess.png "PSTFS_SyncProcess") +Synchronization Process for Team Foundation Server and Project Server Integration + + The synchronization engine consists of a single job service that runs on a regular schedule and not when each work item is updated. The synchronization job performs the following three processes in the order indicated: + + +<table> +<tbody valign="top"> +<tr> +<td>**Publish synchronization**:</td> +<td>![Step 1](_img/procguid_1.png "ProcGuid_1") A project manager defines or updates tasks or deliverables and sets the **Publish to Team Project** value to **Yes** for each task that they want to synchronize.<br /><br /> ![Step 2](_img/procguid_2.png "ProcGuid_2") The project manager publishes the enterprise project plan by using Microsoft Project Professional. Changes are automatically saved to the database for Project Server.<br /><br /> ![Step 3](_img/procguid_3.png "ProcGuid_3") The synchronization engine pulls data from Project Server and determines what data to update based on the data that is configured for synchronization. Only those objects, tasks, and work items that are configured for synchronization are updated.<br /><br /> ![Step 4](_img/procguid_4.png "ProcGuid_4") The synchronization engine either creates or updates work items in Team Foundation and defines a link that binds the task in Project to the work item in Team Foundation.</td> +</tr> +<tr> +<td>**Status synchronization**::</td> +<td>![Step 5](_img/procguid_5.png "ProcGuid_5") A team lead or team member either modifies a work item in Team Foundation that is linked to a task in an enterprise project or creates a work item and sets the **Submit to Project Server** value to **Yes**. The synchronization engine queries the changes that are made for mapped team projects and sends requests to the approval queue or queues in Project Web Access or Project Web App (PWA).</td> +</tr> +<tr> +<td>**Approval synchronization**:</td> +<td>![Step 6](_img/procguid_6.png "ProcGuid_6") Each project manager reviews their approval queue and either approves or rejects each status update request.<br /><br /> After updates are approved, the project manager must publish the project plan before the updates will appear in Project Server. **Important:** When the synchronization engine submits multiple levels of work items to Project Server, the first level must be approved and published to Project Server before the next level can be submitted. For example, you can submit a batch of new work items that includes three levels of child items. In that case, the project manager must publish the project plan four times for all work items to be synchronized with Project Server. <br /><br /> ![Step 7](_img/procguid_7.png "ProcGuid_7") The event handler for approvals in Project Server transmits the approval decisions to the synchronization engine, which then updates the work items in Team Foundation Server based on the approval status.</td> +</tr> +</tbody> +</table> + + + + +### Managing approvals and rejections + All changes to work items that are linked to Project Server must be submitted for approval to the project manager of the enterprise project plan that is mapped to the team project. You can set up automatic approval so that all updates from Team Foundation are automatically approved. For more information, see [Approve or reject task updates](http://go.microsoft.com/fwlink/?LinkId=203361). + + Approved work items typically get rolled back into the enterprise project plan. Rejected work items require resolution and resubmission. + + For rejected updates, a message appears in the History field for the work item. The message indicates the value that was rejected and who rejected it. For team projects that map to project plans that are hosted on Project Server 2010, the message also contains any comments that the project manager provided about why the item was rejected. Team members must either reconcile the work item and resubmit it or remove it from being submitted to the enterprise project. Also, team members can create a work item query that finds all rejected items based on the **Project Server Last Submit Status**. For more information, see [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md). + +### Synchronization and retry intervals + Data synchronization occurs on a schedule and not when each work item is updated. The synchronization job service runs every 30 seconds. During that time, it queries for the relevant work items and fields that have been modified in Project Server or Team Foundation Server or that the project manager has approved. + + Every hour, the synchronization engine resubmits work items that failed to update previously. For more information, see [Change the retry or resubmit interval](change-synchronization-retry-or-resubmit-interval.md). + + + +## <a name="DataSynced"></a> Data that is subject to synchronization + Two levels of configuration determine which objects can participate in synchronization and what data becomes synchronized. Administrators for Team Foundation perform several levels of mapping to configure the objects that can participate in synchronization. At the second level, project managers and users of Team Foundation control which specific tasks and work items are synchronized. + + +### Objects that are configured to participate in synchronization + The following configurations determine which objects participate in the synchronization process. Administrators for Team Foundation generally perform these configurations. However, project managers may also map their enterprise project plans to team projects. + +- **PWA Instance That Is Mapped to a Team Project Collection**: This mapping configures the team project collection to support synchronization and determines which instances of PWA can synchronize with a collection. + +- **Enterprise Project Plan That Is Mapped to a Team Project**: This mapping configures both the enterprise project plan and the team project to participate in synchronization. This mapping also determines which enterprise projects can synchronize with a team project. + +- **Work Item Types That Are Mapped for Synchronization**: When you map an enterprise project plan to a team project, you specify the types of work items that can be synchronized. This mapping adds the **Project Server** tab to the work item form and adds validation rules for each work item type to the enterprise project plan. + +- **Work Item Fields That Are Mapped to Project Server Fields**: By default, the synchronization engine synchronizes the following fields in Team Foundation: Title, Assigned To, Completed Work, Remaining Work, Original Estimate, Start Date, and End Date. You can add fields and set parameters that determine how fields synchronize. For example, you can determine which fields appear on the work item form and whether to allow separate values for a specific field. + + For more information, see [Map components](map-project-server-components.md) and [Specify work item types](specify-wits-to-synchronize.md). + +### Individual task and work items that are configured for synchronization + Project managers determine the tasks in an enterprise project plan that they want to publish to TFS. Team members determine the work items in a team project that they want to submit to Project Server. Project managers can publish detailed breakdowns of deliverables and tasks to TFS or publish and manage only summary task elements. Some restrictions apply to the publishing of subordinate tasks or parent-child work items, as [Data Validation Performed During Updates and Upon Submission](#DataValidation) describes later in this topic. + + For more information, see [Manage project details](manage-project-details.md) and [Top-down planning of business requirements](top-down-plan-mapped-team-project.md). + +> [!NOTE] +> You can map multiple enterprise project plans to one team project, but you can map or link only one task in a project plan to a work item in Team Foundation. Each task in an enterprise project plan is distinct in Project Server. Tasks that are submitted to Project Server update only one work item in Team Foundation. Also, work items that are created in Team Foundation and submitted to Project Server update only one enterprise project plan. + +<a name="DataValidation"></a> + +## Data validation performed during updates and upon submission + The synchronization process validates tasks and work items that have been tagged for synchronization before they are published to Project Server. Data validation is enforced in both the enterprise project plan and the team project. + +### When project managers publish an enterprise project plan + When a project manager who is working in Project Professional publishes an enterprise project plan that is mapped to a team project, specific validation checks are performed. The Team Foundation add-in performs the following validation checks on those tasks that are set to publish to Team Foundation (that is, **Publish to Team Project=Yes**): + +- The value that is set for the **Work Item Type** field must match a type of work item that has been configured to participate in synchronization for the target team project. + + > [!IMPORTANT] + > **Text30** is the default Project field that is associated with the **Work Item Type** column that is used in synchronizing tasks with work items. If you ever connect the project plan to Team Foundation Server by using the **Choose Team Project** option on the Team ribbon menu, an additional Project field, which is also labeled **Work Item Type**, becomes available. This field, with a default Project field of Text24, supports mapping of project plans that are bound to Team Foundation but does not support synchronizing plans. The Text24-based field contains the full list of work item types for the team project. You can verify whether you have the correct field by pointing to it and verifying that **Text30** appears. + +- All values for mapped Project fields must pass specific checks to make sure that their values do not violate a rule that was set for the target work item type. These rules are added to the enterprise project plan when it is mapped to a team project. + +- After a task is published, the values that are set for **Publish to Team Project** and **Work Item Type** cannot change. If you do not want to continue to synchronize a task, you must delete it. + +- If a task and one of its subordinate tasks are both marked for synchronization, all tasks between them must also be marked for synchronization. + +- The value of the **Resource Name** field for a task must match the name of a valid contributor for the target team project. + +- If multiple resources are assigned to the same task, only one resource assignment must be selected as active. For more information, see [Make Agile team progress visible](make-agile-team-progress-visible-to-the-pmo.md). + +- All values must conform to the rules that Project Server applies to the specific field definition. For example, an error can occur if you assign a value to a mapped field that is associated with a look-up table but that is not in the look-up table. + + The **Validation Resolution** dialog box appears whenever one or more rules are violated. Project managers must resolve each error before publishing the changes. + +### When developers submit new or updated work items from Team Foundation + When a developer who is working in Team Foundation creates or updates a work item and saves the changes, the following validation checks are performed on those work items that are set to publish to Project Server (that is, **Submit to Project Server=Yes**): + +- The value of the **Assigned To** field must correspond to a team member who also has been added to the enterprise resource pool and the project resources in the project plan. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +- If only one enterprise project plan is mapped to a team project, its name automatically appears for the **Enterprise Project** field on the **Project Server** tab for newly created work items. + +- If more than one enterprise project is mapped to the team project, you must specify a value for the **Enterprise Project** field for new work items that are created and whose **Submit to Project Server** value is set to **Yes**. + +- You cannot change the hierarchical structure of work items after they have been linked to Project tasks. For more information, see [Summary Tasks, Task Hierarchy, and Submissions of Work Items that Are Nested at Multiple Levels](understand-how-updates-to-specific-fields-managed.md#updates_nested_tasks). + +- Rules that have been added to a mapped work item type can result in validation errors when you publish the project plan. For example, a conditional rule can restrict what values users can assign to a field. For more information, see [Apply a field rule](../../work/reference/apply-rule-work-item-field.md). + +- Basic rules, such as lookup tables, that correspond to definitions of fields in Project Server can cause errors during status synchronization. For example, an error will result if you use a lookup table to define valid values for a field in Project, map that field to a field in Team Foundation, and then set the field in Team Foundation to a value that is not in the lookup table. + + After a work item is published to Project Server, the item is bound to a task in the target enterprise project plan. This binding is also referred to as a link. The links are locked during synchronization. To remove the link, you must delete the corresponding task in Project, or you must use the `/force` option when you remove the mapping of the project plan or work item type. For more information, see [Remove a component](remove-component-from-synchronization.md). + + +<a name="ConflictResolution"></a> + +## Mirror fields and "Two Sets of Books" + Because the synchronization engine performs three types of synchronization and communicates with two databases in a scheduled negotiation, no data merging occurs. Instead, data synchronization occurs in a two-step sequence, and the engine allows for divergence between the two products. For each synchronized field in Team Foundation, you define a mirror field that stores the value in Project Server for the corresponding mapped field. During regular synchronization operations, the values for the two fields will differ from the time when a value is updated in Team Foundation Server until the project manager approves the update and publishes the project plan. + + For each field that you map, you specify one of the following choices for how you want the synchronization engine to update the reference field in Team Foundation: + +- Always update the reference field in Team Foundation Server with the value from Project Server (`PSWins`). + +- Allow the value for the reference field in Team Foundation Server to differ from the value assigned in Project Server. This strategy is referred to as "two sets of books". + + When you maintain two sets of books, you can create a query to find those work items where the two values differ. For more information, see [Understand how updates to specific fields are managed](understand-how-updates-to-specific-fields-managed.md) and [Find Work Items Where the Work in Team Foundation Differs from that in Project Server](monitor-submissions-resolve-rejections.md#FindDiffWorkWIs). + + For more information, see [Field mapping reference](field-mapping-xml-element-reference.md). + +<a name="PermissionsRequired"></a> +## Permissions that are required to support synchronization + For data to be synchronized between Team Foundation Server and Project Server, the following permissions must be granted: + +- For Project Server 2010, you must grant Full Control permissions to the service account under which the TfsJobAgent runs so that the Project Server Service Application can be accessed. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +- You must grant the service account under which the TfsJobAgent runs the permissions that are required to access each mapped instance of PWA. + +- Users who are assigned to tasks in Project Professional or work items in Team Foundation must be recognized as Contributors in the team project. Those users must also be recognized as resources of the enterprise project plan and granted permission to log on to the instances of PWA that participate in the synchronization process. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +<a name="ErrorNotification"></a> +## Error notification, event logging, and traceability + The synchronization engine processes project updates that are published to Project Server, then status updates, and then approval updates. When you publish, you update Project Server, adding tasks and task details to the enterprise project plan. Publishing synchronization pulls the data from Project Server into Team Foundation Server. Status synchronization pulls data from Team Foundation to update the project manager's approval queue, and approval synchronization publishes updates on fields such as remaining work and completed work to Project Server, which initiates a new cycle of synchronization. + + Each type of synchronization enables the display of relevant status and error messages to the project manager in either Project Professional or the instance of PWA. Also, status and error messages that are associated with the synchronization engine and its configuration can also be written to the appropriate administration interfaces for Team Foundation Server and Project Server. + + Project managers, team members, and administrators can all view and diagnose synchronization-related messages as they occur. Messages are written to the following locations: + +- In Project Professional, the status bar in the enterprise project plan shows publishing progress. + +- In the instance of PWA, the Approval Center shows the queue of updated tasks. + +- In the work item form for Team Foundation, the **Project Server** tab indicates the status and time when the work item was synchronized most recently. + +- In the work item form for Team Foundation, the History field records synchronization status and error messages after each update of the work item. When you integrate with Project Server 2010, comments that project managers write when they approve or reject a status update are also recorded in the History field. + +- The event log for the application-tier server that participates in the data synchronization maintains a record of all synchronization events and errors. + + Administrators can retrieve the most recent event messages by using the `TfsAdmin ProjectServer /GetSyncMessages` command. For more information, see [View error messages](view-synch-error-messages.md). To gather even more detailed information, you can enable detailed tracing for the Team Foundation Background Job Agent that runs the services. For more information, see [Team Foundation Background Job Agent](../../tfs-server/architecture/background-job-agent.md). + + +## Related notes +- [Manage projects](manage-projects.md) +- [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/synchronize-tfs-project-server.md b/docs/work/tfs-ps-sync/synchronize-tfs-project-server.md new file mode 100644 index 00000000000..8d1947d9b51 --- /dev/null +++ b/docs/work/tfs-ps-sync/synchronize-tfs-project-server.md @@ -0,0 +1,129 @@ +--- +title: Synchronize Team Foundation Server with Project Server | TFS +description: Enable the data to flow from work items in Team Foundation Server to tasks in enterprise project plans in Project Server. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 4ec7be08-78e4-40be-81ae-4d2d81c49cd0 +ms.manager: douge +ms.author: kaelli +ms.date: 05/18/2017 +ms.topic: get-started-article +--- + + +# Synchronize Team Foundation Server with Project Server + +<b>TFS 2015 | TFS 2013</b> + +>[!IMPORTANT] +>TFS 2017 and later versions no longer support native integration with Office Project Server. If you upgrade to TFS 2017 or want to use a third party option, see [Synchronize TFS with Project Server](../office/sync-ps-tfs.md). + +By installing Team Foundation Server Extensions for Project Server, project managers can use Microsoft Project Server to access up-to-date project status and resource availability across agile and formal software teams who work in Team Foundation. This integration enables data to flow from work items in Team Foundation Server (TFS) to tasks in enterprise project plans in Project Server. Project managers and software development teams can use the tools that they prefer, work at the level of precision that supports their needs, and share information transparently. After the two server products are configured, the synchronization engine maintains scheduling data and resource usage for the configured data in the mapped enterprise project plan and team project. + + To enable this flow of data, you must install Team Foundation Server Extensions for Project Server on the application-tier or web-tier servers that run Project Server that will participate in data synchronization. For more information, see [How to: Add Project Server to Team Foundation Server](https://msdn.microsoft.com/library/hh548139.aspx). Project managers that use Project Professional must install Visual Studio 2013 or Team Explorer 2013 on their client computers. + +> [!NOTE] +> You can download a virtual machine that demonstrates how to integrate TFS and Project Server 2010 to allow teams to share data between the two server products. This virtual machine includes enterprise project plans in Project Server that are mapped to team projects in TFS, along with sample data to highlight key integration scenarios. The walkthrough documents illustrate four scenarios that simulate the interactions between the project manager, who is working in Project Server, and members of the software development team, who are working in TFS. +> +> For more information, see the following page on the Microsoft website: [TFS 2010 and Microsoft Project Server 2010 Integration Hyper-V Virtual Machine](http://go.microsoft.com/fwlink/?LinkID=196413). Some details might differ between the procedures demonstrated in the video and those described here because this video was made for the previous release of Team Foundation Server. + +<a name="admintasks"></a> + +## Administrator tasks + + +### Review setup, configuration, and administration tasks + +As an administrator for the integration of TFS and Project Server, you must configure the integration of the two server products to support the flow of data from team projects to enterprise project plans. For the initial configuration, you must install software, grant permissions, register instances of Project Web Access or Project Web App (PWA), and map components of Project Server to components of Team Foundation. + +Review these topics: +- [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) +- [Overview of integration features](overview-tfs-project-server-integration.md) +- [Operational differences in managing projects using TFS and Project](operational-differences.md) + +### Plan the integration of the two server products +To synchronize data between TFS and Project Server, you must install Team Foundation Server Extensions for Project Server. To understand how you will configure the integration of the two server products, you should understand how components in Project Server map to components in Team Foundation. + +For details, see: +- [System and setup requirements](system-and-setup-requirements.md) +- [Map components](map-project-server-components.md). + +### Upgrade an existing deployment +Refer to these topics for the recommended sequence and instructions for upgrading servers with a more recent version of the software. +- [Update an existing installation](update-version-compatibility-requirements.md) +- [Upgrade Microsoft Project Server 2010 to Microsoft Project Server 2013](upgrade-ps-2010-to-ps-2013.md). + +### Configure the integration +To support a test or evaluation environment, see [Configuration quick reference](configuration-quick-reference.md) to install software, assign permissions, configure integration, and verify data synchronization. + +To support a production environment, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md) to collect the information that you require for configuration, permissions that you must grant, and configuration tasks that you must perform to support a customized integration of the two server products. + +### Grant permissions +You must grant permissions to administrators, service accounts, and team members. See [Assign permissions](assign-permissions-support-tfs-project-server-integration.md) + +### Manage the integration of synchronized components + +You can change how components are mapped or list the current mappings by using the `TfsAdmin` command-line tool. You can review the options and parameters that this tool provides and learn about the operations that specific options perform. See [Map integration components](map-integration-components.md) + +### Understand the three types of synchronization +The synchronization engine performs three types of synchronization: publishing, status, and approval. This process captures and maintains task-related and resource-related data in both TFS and Project Server while respecting the ownership of data by the project manager in the project plan. + +For more information, see [Synchronization process overview](synchronization-process-overview.md). + +<a name="pmtasks"></a> +## Project manager tasks + +### Choose how you want to manage projects +You can configure the integration to support the specific manner in which you want to manage projects. You can define high-level deliverables or both deliverables and tasks, you can just review progress that the development team reports, or you can combine these methods. + +For details, see [Manage projects](manage-projects.md). + +### Understand the synchronization process and features +You can manage the project plans that map to team projects and the tasks that are synchronized with work items in Team Foundation. See these topics: +- [Synchronization process overview](synchronization-process-overview.md) +- [Overview of integration features](overview-tfs-project-server-integration.md) + +### Create resource assignments, and view resource utilization +When the development team breaks down requirements and tasks into child tasks, you can see how work and resources roll up through the project. You can use this information to view resource allocation and work estimates, perform resource leveling, and determine whether a resource is over-allocated within a project or across multiple projects. + +See [Work with resource rollup](work-with-resource-rollup.md). + +<a name="devteam"></a> +## Development team tasks + +### Review deliverables, define tasks, and estimate work +For each deliverable that is submitted to Project Server, you define and estimate the tasks that are required to implement that deliverable. As you perform work, you update your task hours, which are automatically submitted to Project Server and the project manager for review. + +For details, see [Top-down planning of business requirements](top-down-plan-mapped-team-project.md). + +### Review work breakdown, and update work +As a development lead, you can use the Work Breakdown query to review the work items that a project manager submits. As work progresses, team members update their task hours, which are automatically submitted to Project Server and the project manager for review. + +For details, see [Manage project details](manage-project-details.md). + +### Define and submit user stories or requirements to Project Server +As a development lead, you provide visibility into the project schedule and resource utilization by setting the **Project Server Submit** field to **Yes** for those user stories or requirements on which your team is working. + +For details, see [Make Agile team progress visible](make-agile-team-progress-visible-to-the-pmo.md). + +### Find and address rejected work item submissions +When the project manager rejects an update to a work item, you must address the reason for the rejection and resubmit it to Project Server. Until you complete this task, the work item can no longer participate in data synchronization. For details, see [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md). + + +## Related notes +- [Agile tools and work tracking](../overview.md) + +<a name="demos"></a> +### Demonstration videos +The following videos, which are available from the Microsoft website, illustrate the flexibility that you have to manage the product lifecycle after you integrate the two server products. + +- [Application Lifecycle Management: Microsoft Project Server 2010 and TFS 2010, Better Together](http://go.microsoft.com/fwlink/?LinkId=222614) + +- [Top-Down Planning of Business Requirements within an Enterprise Project using Team Foundation Server and Project Server](http://go.microsoft.com/fwlink/?LinkId=222610) + +- [Managing Project Details in an Enterprise Project Plan Mapped to a Team Project in Team Foundation Server](http://go.microsoft.com/fwlink/?LinkId=222611) + +- [Making Agile Team Progress Visible to the Project Management Office](http://go.microsoft.com/fwlink/?LinkId=222612) + +- [Managing Field Mappings for Integration of Team Foundation Server and Project Server](http://go.microsoft.com/fwlink/?LinkId=222613) + \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/system-and-setup-requirements.md b/docs/work/tfs-ps-sync/system-and-setup-requirements.md new file mode 100644 index 00000000000..1fba0c6d5d2 --- /dev/null +++ b/docs/work/tfs-ps-sync/system-and-setup-requirements.md @@ -0,0 +1,96 @@ +--- +title: System and setup requirements to support TFS-Project Server integration | TFS +description: Requirements for Team Foundation Server Extensions for Project Server +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: adaa1930-a8f9-4bd8-8c91-02bd7b8d9d5d +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# System and setup requirements to support TFS-Project Server integration + +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> You can synchronize data between Visual Studio Team Foundation Server (TFS) and Microsoft Project Server by installing Team Foundation Server Extensions for Project Server. You can install the extensions on Project Server 2010 with SP1 or Project Server 2013. + + To ask a question of the community, see the following forum post on the Microsoft website: [Team Foundation Server and Project Server Integration](http://go.microsoft.com/fwlink/?LinkId=207282). + +## <a name="prereq"></a> Prerequisite software + You must have the following software installed before you configure the integration between Team Foundation Server and Project Server: + +- **For administrators of Team Foundation Server**: + + - Visual Studio Team Foundation Server 2013 + + - A version of Visual Studio 2013 or Team Explorer 2013 must be installed on the same machine that will be used to configure the integration of the two server products. + +- **For administrators of Project Server**: One of the following versions of Project Server: + + - Project Server 2010 with SP1. + + - Project Server 2013. + + > [!IMPORTANT] + > For Project Server 2010, the SharePoint web application for the instance of PWA must be set to **Classic Mode Authentication**. You will not be able to register it if the authentication is set to **Claims Based Authentication**. + > + > For Project Server 2013, both **Classic Mode** and **Claims Based** authentication are supported. + +- **For project managers**: Visual Studio 2012 and one of the following versions of Microsoft Project must be installed on the same machine that will be used to manage enterprise project plans that will participate in data synchronization with team projects: + + - Project Professional 2007 with SP2 and the update that you can download from the following page on the Microsoft website: [Description of the Office Project 2007 hotfix package (Project-x-none.msp): February 23, 2010](http://go.microsoft.com/fwlink/?LinkId=211633). + + - Project Professional 2007 with SP3. + + - Project Professional 2010. + + - Project Professional 2013. + +> [!IMPORTANT] +> Active Directory is not required, but it is highly recommended that you deploy Active Directory in your network to synchronize the accounts of users, groups, and services that are valid within Team Foundation Server and Project Server. + +## <a name="installreq"></a> Installation requirements + The following table summarizes the software that you must install to support the data synchronization between the two server products. To install software, you must have administrative permissions on the machine where the software is installed. + +|Software|Install on| +|--------------|----------------| +|Visual Studio 2013 or Team Explorer 2013|Each machine on which Project Professional is used to synchronize data between enterprise project plans and team projects and each machine that is used to administer the configuration of the two server products. **Note:** You can download Team Explorer 2013 from [Visual Studio 2013 Download](http://www.microsoft.com/visualstudio/eng/2013-downloads).| +|Visual Studio Team Foundation Server 2013|Each application-tier server that hosts Team Foundation Server and that will participate in synchronizing data with Project Server. For more information, see [Install](../../tfs-server/install/get-started.md).| +|Team Foundation Server Extensions for Project Server|Each web-tier and application-tier server that hosts Project Server and that will participate in synchronizing data with Team Foundation Server.<br /><br /> For more information, see [How to: Add Project Server to Team Foundation Server](https://msdn.microsoft.com/library/hh548139.aspx).| + +## <a name="configreq"></a> Configuration requirements + Before you can synchronize data between the two server products, you must first configure several points of integration between them. The following sequence describes the main configuration elements that are required: + +1. **Project Server must be configured**. Before you configure the integration of TFS and Project Server, you must have configured Project Server to support your enterprise project plans. You must have defined at least once instance of Project Web Access or Project Web App (PWA) that will participate in data synchronization. + +2. **At least one enterprise project plan must be defined**. Before you can map the project plan with a team project, you must have created the plan and published it to Project Server. + +3. **At least one team project collection must be defined**. Before you can map a collection to an instance of PWA, you must define that collection. + +4. **The team project that you want to synchronize must be defined**. You must have a team project that you will map to an enterprise project plan. You can synchronize data with any team project. Also, before you upload field mappings to a team project collection, you must have defined a team project for that collection. + +5. **Configure the integration**. As the following illustration shows, you must perform six main steps when you configure the integration of the two server products. + + ![Provisioning Project Server-Team Foundation Server](_img/pstfs_provisioning.png "PSTFS_Provisioning") + + For more information, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + +6. **Customize the field mappings**. You will have to customize the default field mappings if you are mapping a project plan to a team project that was created from the Visual Studio Scrum process template. + + You might have to customize the field mappings if the team project was not created from a Microsoft process template, either Agile Software Development or Capability Maturity Model Integration (CMMI) Process Improvement. Also, if you have customized the types of work items in your team project, you might have to further customize the field mappings to support data synchronization. + + For more information, see [Customize the field mapping](customize-field-mapping-tfs-project-server.md). + +## <a name="mapping"></a> Mapping components and the synchronization process + To understand how components map to one another and the synchronization process, see the following topics: + +- [Map components](map-project-server-components.md) + +- [Synchronization process overview](synchronization-process-overview.md) + + +## Related notes + [Configuration quick reference](configuration-quick-reference.md) + [Assign permissions](assign-permissions-support-tfs-project-server-integration.md) + [Map integration components](map-integration-components.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/toc.yml b/docs/work/tfs-ps-sync/toc.yml new file mode 100644 index 00000000000..4a9ca05fb0d --- /dev/null +++ b/docs/work/tfs-ps-sync/toc.yml @@ -0,0 +1,110 @@ +- name: Overview (TFS-PS) + items: + - name: Third-party support for synchronization + href: ../office/sync-ps-tfs.md + - name: Native synchronization support + href: synchronize-tfs-project-server.md + - name: Synchronization overview + href: synchronization-process-overview.md + - name: Overview of integration features + href: overview-tfs-project-server-integration.md +- name: Concepts + items: + - name: Operational differences in managing projects using TFS and Project + href: operational-differences.md + - name: Work with resource rollup + href: work-with-resource-rollup.md + - name: Understand how updates to specific fields are managed + href: understand-how-updates-to-specific-fields-managed.md + - name: Manage projects overview + href: manage-projects.md + - name: Map integration components + href: map-integration-components.md +- name: How-to Guides + items: + - name: Top-down planning of business requirements + href: top-down-plan-mapped-team-project.md + - name: Manage project details + href: manage-project-details.md + - name: Make Agile team progress visible + href: make-agile-team-progress-visible-to-the-pmo.md + - name: Monitor submissions and resolve rejections + href: monitor-submissions-resolve-rejections.md + - name: Remove items that aren't synchronizing + href: remove-items-not-synching.md + - name: Customize the field mapping + href: customize-field-mapping-tfs-project-server.md + - name: Remove a component + href: remove-component-from-synchronization.md + - name: Update an existing installation + href: update-version-compatibility-requirements.md + - name: Upgrade Project Server 2010 to Project Server 2013 + href: upgrade-ps-2010-to-ps-2013.md + - name: Remove TFS-Project Server integration + href: ../office/remove-tfs-ps-integration.md + - name: Map a previously bound project plan + href: map-project-plan-previously-bound.md + - name: Change your deployment configuration + href: change-deployment-configuration.md + - name: Administrate TFS-Project Server integration + items: + - name: Administrative overview + href: administrate-integration-tfs-project-server.md + - name: Configure TFS-Project Server integration + href: configure-tfs-project-server-integration.md + - name: Assign permissions to support TFS-Project Server integration + href: assign-permissions-support-tfs-project-server-integration.md + - name: Associate enterprise projects to team projects + href: manage-associations-enterprise-projects.md + - name: Specify work item types + href: specify-wits-to-synchronize.md +- name: Reference + items: + - name: Configuration quick reference + href: configuration-quick-reference.md + - name: System and setup requirements + href: system-and-setup-requirements.md + - name: Map components + href: map-project-server-components.md + - name: Change the retry or resubmit interval + href: change-synchronization-retry-or-resubmit-interval.md + - name: Map components + items: + - name: Register an instance + href: register-pwa.md + - name: Map a team project collection + href: map-team-project-collection-to-pwa.md + - name: Manage mappings + href: manage-mappings-enterprise-project-team-project.md + - name: Define work item types to synchronize + href: define-work-item-types-available-synchronization.md + - name: Manage field mappings + href: manage-field-mappings.md + - name: View error messages + href: view-synch-error-messages.md + - name: Customize the field mapping + items: + - name: Field mapping reference + href: field-mapping-xml-element-reference.md + - name: Project Server fields that support synchronization + href: project-server-fields-added-to-tfs.md + - name: Restrictions on mapping fields + href: restrictions-mapping-ps-fields.md + - name: Added elements to WIT definitions + href: xml-elements-added-to-wit-definition.md +- name: Troubleshooting + items: + - name: Resolve validation errors + href: resolve-validation-errors.md + - name: Resolve TFS-Office integration issues + href: ../office/tfs-office-integration-issues.md + - name: View error messages + href: view-synch-error-messages.md + - name: Verify synchronization + href: verify-synch-process.md + - name: Known issues and workarounds + href: known-issues-and-workarounds.md +- name: Resources + items: + - name: Project Connect Marketplace extension + href: https://marketplace.visualstudio.com/items?itemName=TVT.TVT-PjO diff --git a/docs/work/tfs-ps-sync/top-down-plan-mapped-team-project.md b/docs/work/tfs-ps-sync/top-down-plan-mapped-team-project.md new file mode 100644 index 00000000000..13b41481cf4 --- /dev/null +++ b/docs/work/tfs-ps-sync/top-down-plan-mapped-team-project.md @@ -0,0 +1,167 @@ +--- +title: Top-down planning of business requirements within an enterprise project plan mapped to a team project | TFS +description: Maintain scheduling data and resource usage for requirements in the mapped enterprise project plan and team project. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 9760e3f2-2c1a-4c05-8d3d-c25abc79289a +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Top-down planning of business requirements within an enterprise project plan mapped to a team project +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> As a project manager, you can manage the high-level business requirements in Microsoft Project Server while the development team manages task details in Visual Studio Team Foundation Server. You can define requirements and view the rollup of resources and effort, and you can also view the impact on the schedule as the development team defines, estimates, and updates its detailed tasks. The synchronization engine for Team Foundation Server and Project Server maintains scheduling data and resource usage for requirements in the mapped enterprise project plan and team project. + +> [!NOTE] +> If you want to manage both the deliverables and the tasks by using Project Server, see [Manage project details](manage-project-details.md). + + Before you can perform top-down planning in an enterprise project plan, you must first associate it with the team project. For more information, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). Before you associate the plan with the project, you should review [Recommended Configurations to Support Top-Down Planning](#Requirements) later in this topic. + + + +> [!NOTE] +> For a demonstration video, see the following page on the Microsoft website: [Top-Down Planning of Business Requirements within an Enterprise Project using Team Foundation Server and Project Server](http://go.microsoft.com/fwlink/?LinkId=222610). Some details may differ between the procedures demonstrated in the video and those described here because this video was made for the previous release of Team Foundation Server. + + **Requirements** + + To perform the procedures in this topic, the following permissions must be assigned: + +- To publish tasks from an enterprise project plan to Team Foundation, the resource who is assigned to the task must be a member of the **Contributors** group for the team project. + +- To update work items in Team Foundation and submit them to Project Server, users must be members of the **Contributors** group for the team project. Also, users must be members of the **Team Members** group for Project Web Access or Project Web App (PWA) or must have the Open Project and View Project Site permissions in Project. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="Overview"></a> Process Overview of Top-Down Planning by Using Project Server + As the following illustration shows, 10 main steps occur in the synchronization of requirements between the project plan and the team project. + + ![PS-TFS resource rollup workflow process](_img/pstfs_rollup_workflow.png "PSTFS_Rollup_Workflow") + + The synchronization engine maintains scheduling data for requirements in both the project plan and team project. Team Foundation automatically calculates the rollup of remaining and actual work by resource based on the tasks that are linked to each requirement. As team members update tasks, the roll-up values are automatically updated for the requirements in the team project, and status updates appear in the instance of PWA for the approval of the project manager. The following table summarizes the tasks that are performed. + +||| +|-|-| +|**Project Manager**|As a project manager, you perform the following tasks in Project or PWA:<br /><br /> ![Step 1](_img/procguid_1.png "ProcGuid_1") Define deliverables, features, or requirements in your enterprise project plan.<br /><br /> ![Step 2](_img/procguid_2.png "ProcGuid_2") Save and publish the project plan to Project Server.<br /><br /> ![Step 8](_img/procguid_8.png "ProcGuid_8") Review the progress of each deliverable, and adjust the schedule based on updated information.<br /><br /> ![9](_img/procguid_9.png "ProcGuid_9") Set a baseline, and track progress against the baseline.| +|**Synchronization Engine**|For each requirement that is set to publish, the synchronization engine performs the following tasks:<br /><br /> ![Step 3](_img/procguid_3.png "ProcGuid_3") Creates a requirement work item in the team project that is mapped to the enterprise plan. The engine also creates a link that binds the requirement in Project to the work item in Team Foundation.<br /><br /> ![Step 7](_img/procguid_7.png "ProcGuid_7") Creates a status update as updates occur in Team Foundation for each mapped field for each published requirement. These updates appear in the approval queue for the project manager to review.| +|**Team Lead**|In Team Foundation, the team lead and team members perform the following tasks:<br /><br /> ![Step 4](_img/procguid_4.png "ProcGuid_4") Review the deliverables that are added to the team project.<br /><br /> ![Step 5](_img/procguid_5.png "ProcGuid_5") Define the tasks that are required to implement each deliverable, and verify that each task is linked to its deliverable.<br /><br /> ![Step 6](_img/procguid_6.png "ProcGuid_6") Estimate the work that is required for each task, and define it as **Remaining Work**.<br /><br /> ![10](_img/procguid_10.png "ProcGuid_10") Update the **Remaining Work** and **Completed Work** fields for each task.| + + +## <a name="Requirements"></a> Recommended Configurations to Support Top-Down Planning + To support the process that was outlined in the previous section, you must map the enterprise project plan to the team project. The following table describes the recommended configurations for both the team project and mappings. For more information, see [Associate enterprise projects and team projects](manage-associations-enterprise-projects.md). + +|Area to configure|Recommended configuration|Notes| +|-----------------------|-------------------------------|-----------| +|Process template for team project|Microsoft Solutions Framework (MSF) for Capability Maturity Model Integration (CMMI) Process Improvement|The CMMI template provides requirement and task types of work items. You can use the backlog and board pages to manage your backlog and plan and run your sprints. Or, you can use shared queries that you open in Excel to quickly define and link tasks to requirements.| +|Project mapping|`/workItemTypes:Requirement`|When you map the enterprise project plan to the team project, specify the requirement as the work item type. You can also disallow fixed work for tasks. Fixed work is one of three types of tasks that you can use in Project. For more information, see [Change the task type Project uses to calculate task duration](http://go.microsoft.com/fwlink/?LinkId=203354).| +|Field mapping|`/useDefaultFieldMappings`|You can use the default field mappings. No additional field mappings are required.| +|Resource Names|You must add team members to the Team Members group for each instance of PWA, or you must grant them the Open Project and View Project Site permissions in Project. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md).<br /><br /> Also, you must add all team members to the enterprise resource pool and the resource pool for the project plan.|You must grant permissions to all user accounts that are assigned as resources in the project plan or that are named in the Assigned To field for a work item. These users submit status updates that flow into the status queue for the instance of PWA.<br /><br /> All names that are assigned to the **Resource Names** field must be recognized as valid contributors of the team project.| +|Project managers|Accounts of users of Project Professional must be granted **View Project-level information** or assigned as members of the **Reader** group in Team Foundation for team projects to which they will publish.|You must grant project managers permissions to modify work items for those team projects that are mapped to their enterprise project plans.| + +## <a name="PMTasks"></a> Project Manager Tasks and Best Practices + Best or required practices are provided for the following tasks that the project manager performs: + +- [Define Requirements](#definerequirements) + +- [Approve Status Updates](#ApproveUpdates) + +- [Review the Schedule, and Set a Baseline](#ReviewSchedule) + +- [Preview Updates and Impacts on Critical Path](#determineimpacts) + + In addition to these activities, you can also view the assignment of work to resources. For more information, see [Work with resource rollup](work-with-resource-rollup.md). + +### <a name="definerequirements"></a> Define Requirements + When you define requirements, you should assign them to the development team lead. As the following illustration shows, you must also set the **Publish to Team Project** field to **Yes**, and the **Work Item Type** field to **Requirement**. If only one type of work item is mapped for the team project, it is set automatically. + +> [!NOTE] +> If you expect the development lead to provide work estimates, you should set either the Remaining Work field to 0 hours or the Duration field to 0 days. + + ![Setting Requirements to be Published](_img/tfs-ps_pp_detailed.png "TFS-PS_PP_Detailed") + +> [!IMPORTANT] +> Text30 is the default Project field that is associated with the **Work Item Type** column that is used in synchronizing tasks with work items. If you ever connect the project plan to Team Foundation Server by using the **Choose Team Project** option on the Team ribbon menu, an additional Project field that is also labeled **Work Item Type**, becomes available. This field, with a default Project field of Text24, supports mapping of project plans that are bound to Team Foundation but does not support synchronizing plans. The Text24-based field contains the full list of work item types for the team project. You can verify whether you have the correct field by pointing to it and verifying whether **Text30** appears. + + You should set only those requirements that you want to have tracked in Team Foundation. After you have completed the requirement definitions, you can save and publish the project plan to Project Server. As the following illustration shows, a status notification in the lower-left corner indicates when the publishing is completed. + +> [!NOTE] +> When you publish your plan, the Team Foundation add-in to Project validates the data that you specified. If a required field is not defined or if a value is not allowed, you must resolve those errors. For more information, see [Resolve validation errors](resolve-validation-errors.md). + + ![Publishing progress appears in status bar](_img/tfs-ps_pp_published.png "TFS-PS_PP_Published") + +### <a name="ApproveUpdates"></a> Approve Status Updates + As the team makes progress on the requirements, status updates appear in your approval queue. As the following illustration shows, you can view the updates to your published requirements and the resources that are assigned to tasks. At a glance, you can see which tasks have been updated and the details of each update. + + ![Approval Center with Status Update](_img/tfs-ps_pwa_approvalcenter.png "TFS-PS_PWA_ApprovalCenter") + + You can click a status update to open the Task Details window, as the following illustration shows. You can review the changed values for each field that is mapped for synchronization. + + ![Task details](_img/tfs-ps_pp_taskdetails_pwa.png "TFS-PS_PP_TaskDetails_PWA") + +> [!NOTE] +> To update your enterprise project plan with the changes that are submitted from Team Foundation, you must accept the updates. + + You can accept or reject an update and add a comment. For example, you may reject an update because you disagree with an estimate, a team member entered an inaccurate value, or you want to request that tasks are reassigned so that the work is accomplished more quickly. + +### <a name="ReviewSchedule"></a> Review the Schedule, and Set a Baseline + After you have approved the status updates, you can update the schedule and balance workload in Project, and you can set a baseline that is based on the estimates. As the following illustration shows, the estimates that are defined for the Shopping Cart requirement appear in Project. + + ![Rollup of estimated work](_img/tfs-ps_pp_rollup.png "TFS-PS_PP_RollUp") + + To maintain control of your schedule, you set a baseline to track the team progress against the target schedule. For more information, see the following page on the Microsoft website: [Create or update a baseline or an interim plan](http://go.microsoft.com/fwlink/?LinkId=203362). + +### <a name="determineimpacts"></a> Preview Updates and Impacts on the Critical Path + As team members make progress, they update the **Remaining Work** and **Completed Work** fields for each task. These values roll up for each requirement that is published to Team Foundation. Before you approve the updates, you can preview the impact that the updates will have on the critical path by clicking **Preview Updates** in the **Approval Center**. + + After you approve the status updates, you can view the updates to your project schedule. When a requirement takes longer than estimated, you can determine whether changes to estimates affect the critical path. + + You can alert the team lead when an adverse effect to the schedule will occur and the team project tasks must be adjusted. + +## <a name="DevTeamTasks"></a> Development Team Tasks and Best Practices + As a contributor to a team project, you can use the backlog, task board, and work item pages in the TFS web portal to perform the following tasks: + +- [Review the New Requirements](#review) + +- [Define, Estimate, and Link Tasks to Each Requirement](#DefineTasks) + +- [Update Remaining and Completed Work](#updateremaining) + +- [Address Rejected Updates to Requirements](#addressrejectedupdates) + +### <a name="review"></a> Review the New Requirements + New requirements published to Project Server automatically appear in the team project. Open the backlog page in the web portal and identify the requirements that have been added. For example, the following illustration shows that three requirements have been added to the team project. + + ![Product backlog page showing new requirements](_img/tfs-ps_te_wrkbrk_newreq.png "TFS-PS_TE_WrkBrk_NewReq") +Product Backlog Page + + By opening the work item in Team Explorer, you can view the **History** field to see when the synchronization engine created the work item, as the following illustration shows. + + ![History and Project Server synch message](_img/tfs-ps_pp_history.png "TFS-PS_PP_History") +History of work item added by Project Server Sync + +### <a name="DefineTasks"></a> Define and Estimate Tasks That Are Linked to Each Requirement + Once the requirement has been added to Team Foundation Server, and then added to an iteration, you can quickly define and estimate tasks by using the sprint backlog page in the web portal. As shown in the following illustration, ![Step 1](_img/procguid_1.png "ProcGuid_1") choose the ![Add task icon on task board page (TFS web portal)](_img/alm_twa_addtask_icon.png "ALM_TWA_AddTask_Icon"), ![Step 2](_img/procguid_2.png "ProcGuid_2") type a **Title** for the task and assign it to a team member, ![Step 3](_img/procguid_3.png "ProcGuid_3") type a value for the work required in **Remaining Work**, and then ![Step 4](_img/procguid_4.png "ProcGuid_4") choose the **Save and Close** button. The task automatically links to the requirement with the Parent-Child link. + + ![Add New Linked Work Item](_img/tfs-ps_te_addlinkedtasks_wb.png "TFS-PS_TE_AddLinkedTasks_WB") + + . + + The following illustration shows how the tasks have been divided for two requirements assigned to Iteration 0. For more information, see [Sprint planning](../scrum/sprint-planning.md) + +> [!NOTE] +> The **Remaining Work** field for the parent work items automatically show the sum of all work defined for its child tasks. + + ![Work breakdown of tasks shown in Excel](_img/tfs-ps_excel_wrkbrk_taskplan.png "TFS-PS_Excel_WrkBrk_TaskPlan") + + As an alternative, you can open the Work Breakdown query in Excel and quickly define linked tasks and estimate work. See [Bulk add or modify work items with Excel](../office/bulk-add-modify-work-items-excel.md). + +### <a name="updateremaining"></a> Update Remaining and Completed Work + As work progresses, each team member should update the **Remaining Work** and **Completed Work** fields for each of their tasks. If more time is required to complete a task, additional time is added to the Remaining Work field. Updates are reflected in the rollup of the requirement. + +### <a name="addressrejectedupdates"></a> Address Rejected Updates to Requirements + When a project manager rejects a status update to a requirement, the information appears in the **History** field, and the **Last Approval Status** field on the **Project Server** tab indicates **rejected**. After an update to a work item has been rejected, the work item can no longer be synchronized. You must address the rejection status before the work item can be synchronized again. You can create a team query to find work items whose update statuses were rejected. For more information, see [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md). + +## Related notes +- [Understand how updates to specific fields are managed](understand-how-updates-to-specific-fields-managed.md) +- [Synchronization process overview](synchronization-process-overview.md) +- [Manage projects](manage-projects.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/understand-how-updates-to-specific-fields-managed.md b/docs/work/tfs-ps-sync/understand-how-updates-to-specific-fields-managed.md new file mode 100644 index 00000000000..c463c234885 --- /dev/null +++ b/docs/work/tfs-ps-sync/understand-how-updates-to-specific-fields-managed.md @@ -0,0 +1,104 @@ +--- +title: Understand how updates to specific fields are managed | TFS +description: Understand how updates to specific fields are managed between Team Foundation Server (TFS) and Project Server. +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 67f9887f-f023-4e3e-8873-fb3f1854438f +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Understand how updates to specific fields are managed +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> You should review this topic if one or more fields are not synchronizing as you expect between Visual Studio Team Foundation Server and Microsoft Project Server. The data type of the affected field or fields, the `OnConflict` field mapping attribute, and task hierarchy affect how the synchronization engine updates specific fields. Tasks will not update correctly if the project manager rejects one or more submission updates or if the project plan was not published. If the plan was not published, nested child work items cannot flow into the approval queue. + + + +## <a name="overview"></a> Overview of the Update Field Process + As the following illustration shows, data moves from Project Server, to Team Foundation Server, to the status queue in an instance of PWA, to the enterprise project plan, and finally back to Project Server. The following table provides additional notes about the synchronization process and how fields are updated during each step of the process. + +> [!IMPORTANT] +> When a work item or task has been scheduled to participate in synchronization, you cannot remove it from synchronization except by deleting the task from the project plan. You cannot modify the **Publish to Team Project** value that is assigned to a task, and you cannot change the **Submit to Project Server** field in Team Foundation. Also, you cannot change a task to a different type of work item after it has been published to or submitted from Team Foundation Server. + + ![Updates to Mapped and Mirror Fields](_img/tfs-ps_fieldupdates.png "TFS-PS_FieldUpdates") + +|Step|Synchronization process|Field updates| +|----------|-------------------------------|-------------------| +|![Step 1](_img/procguid_1.png "ProcGuid_1")|**Team Foundation synchronization**: The synchronization engine automatically detects additions and changes that were published to Project Server and pulls those updates into Team Foundation Server.|Only fields that are mapped from Project Server to Team Foundation Server (`targetToTfs` mapping) are updated in this step. The synchronization engine always updates the mirror field but updates the reference field only when the `OnConflict` attribute is set to `PSWin`. However, when a task is published to Project Server for the first time, both the reference field and the mirror field are set, regardless of the value to which the `OnConflict` attribute was assigned. Mirror fields are read-only.<br /><br /> By default, the `OnConflict` attribute is unspecified for the Remaining Work and Completed Work fields, which allows the mapped fields to differ between Team Foundation Server and Project Server. For more information, see [Updates to Fields that Contain Hours](#updates_hours) later in this topic.| +|![Step 2](_img/procguid_2.png "ProcGuid_2")|**Status synchronization**: As team members add or modify work items that are set to Submit to Project Server, the synchronization engine automatically submits updates to the status queue.|Only fields that are mapped for submission to the status queue (`tfsToTarget` mapping) are submitted.<br /><br /> Changes to start and end dates are submitted only when the work item is submitted for the first time. Because fields in Team Foundation map to resource fields in Project, updates are made to resource fields such as Resource Remaining Work and Resource Completed Work.| +|![Step 3](_img/procguid_3.png "ProcGuid_3")|**Approval synchronization**: When an update is approved, it appears within the enterprise project plan. Notification of approval or rejection is written to the work item history in Team Foundation.|The Team Foundation Add-in for Project Professional ensures correct synchronization of the values for the pjTask* fields and pjResource\* fields. Therefore, you must use Project Professional from a client computer on which Visual Studio 2013 or Team Explorer 2013 has been installed to edit your enterprise project plans that are mapped to a team project.| +|![Step 4](_img/procguid_4.png "ProcGuid_4")|**Publish synchronization**: When the project manager publishes the project plan, the updates are written to Project Server.|Changes to all tasks in the project plan are updated in Project Server.| + + For more information, see the following topics: + +- [Synchronization process overview](synchronization-process-overview.md) + +- [Customize the field mapping](customize-field-mapping-tfs-project-server.md) + +- [Field mapping reference](field-mapping-xml-element-reference.md) + +- [Restrictions on mapping fields](restrictions-mapping-ps-fields.md) + +## <a name="rejections"></a> Rejected Submission Updates + When a project manager rejects a status update to either a requirement or a task, the corresponding work item is no longer synchronized until the rejection is resolved. The reason for the rejection appears in the **History** field, and the **Last Approval Status** field on the **Project Server** tab indicates **Rejected**. A team member must address the rejection status to resume synchronization of the work item. + + You can create a team query to find work items whose update status was rejected. For more information, see [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md). + +## <a name="updates_title"></a> Updates to Title or Task Names + The Title field in Team Foundation Server and the task Name in Project Server participate in a two-way synchronization process. In other words, a change in one server is always updated in the other server. However, you can change this behavior if you change the mapping for the Title (System.Title) field. + +## <a name="updates_dates"></a> Updates to Start and Finish Dates + Scheduling fields participate in a one-way synchronization process. In other words, Start Date and Finish Date fields in Team Foundation Server always reflect the values that were assigned in Project Server, and changes that are made to these fields in Team Foundation Server are never submitted to Project Server. This rule is enforced because Project uses a scheduling engine to determine the start and finish dates of tasks. + + By default, Start Date and Finish Date fields are mapped with `OnConflict="PSWin"`, which cause the date fields in Team Foundation to always reflect the values that are assigned in Project Server. Even if you change the mapping attribute to allow for two sets of books, changes to the date fields in Team Foundation are not submitted to Project Server, except when the work item is submitted for the first time. After the first synchronization event, these fields reflect updates that were made to the project plan. + +## <a name="updates_hours"></a> Updates to Fields that Contain Hours + By default, the Completed Hours and Remaining Hours fields participate in a synchronization process that maintains two sets of books. Changes to hours can occur in either the project plan or Team Foundation. However, changes do not necessarily overwrite information in either location. An undefined `OnConflict` attribute for mapping fields enforces this feature. + + As indicated in the following scenarios below, the fields are updated based on who is making the updates and whether the updates are accepted into the project plan. + +- When a team member updates hours and the project manager approves the submissions and publishes the plan, both reference and mirror fields will match with the next synchronization of Team Foundation Server. + +- When a team member updates hours and the project manager rejects the submissions, the updates are not accepted into the project plan. The values for the reference field and mirror field will differ. + +- When a project manager changes the hours in the project plan, only the mirror field is updated with the next synchronization of Team Foundation Server. + + When task hours vary between the two server products, the team lead and project manager are expected to reconcile the differences. In this manner, each person can update their work independently while staying aware of changes that the other made. For information about how to find fields whose values do not match their mirror fields, see [Find Work Items Where the Work in Team Foundation Differs from that in Project Server](monitor-submissions-resolve-rejections.md#FindDiffWorkWIs). + + Whenever a project manager sets a baseline, the value of the **Original Estimate** field in Team Foundation is set or updated, as the following illustration shows. By default, this field is mapped to the `OnConflict="PSWin"` attribute. + + ![Work estimates](_img/tfs-ps_te_detailedplan_originalestimate.png "TFS-PS_TE_DetailedPlan_OriginalEstimate") + +> [!NOTE] +> Because the Visual Studio Scrum process template does not use the Completed Work and Original Estimate fields, you must add these fields to the types of work items that you want to participate in data synchronization. Also, you must modify the task type definition to remove the `<EMPTY />` workflow statements. For more information, see [Required Changes to Make When Mapping to a Team Project That Was Created From the Scrum Process Template](customize-field-mapping-tfs-project-server.md#scrummodifications). + +## <a name="updates_names"></a> Updates to the Assignment or Resource Name Fields + The Assigned To field in Team Foundation maps to the Resource Name field in Project Server. By default, this field is mapped to the `OnConflict="PSWin"` attribute. When you assign resources to tasks in the enterprise project plan, consider the following rules: + +- The synchronization engine does not synchronize resource information between both server products. By default, Team Foundation Server synchronizes its resources from Active Directory, but Project Server does not. You can add resources manually in Project Server or, as a best practice, synchronize resources with Active Directory. To assign a resource to a task in an enterprise project plan that participates in synchronization with Team Foundation Server, you must add the resource to Project Server. You add a resource by adding it to the Team Members group in the instance of PWA, or you grant the resource the Open Project and View Project Site permissions in Project. You must also add the resource to the resource list for the enterprise project plan and then publish the project plan for the synchronization engine to have access to the updated resource list. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +- If you are managing project details, assign only one resource to each task. If the task requires multiple resources, divide it into subtasks, and assign one resource to each subtask. + + If you are managing the business requirements only through top-down planning, assign each user story or requirement to the development lead. + + When you publish your project plan, the client add-in for Team Foundation verifies that only one resource has been assigned to each task. If multiple resources have been assigned to a task, a **Validation Resolution** dialog box appears, and you must specify only one resource as the active assignment. For more information, see [Resolve validation errors](resolve-validation-errors.md). + +- After a task is linked or mapped to a work item, you can assign or reassign resources only to tasks that are not rolled up. A rolled-up task is associated with a work item that contains child work items that are not linked. Usually, rolled-up tasks contain multiple names in the Resource Name field. The synchronization engine transmits the rollup of resources and the number of hours that each resource worked. For more information, see [Work with resource rollup](work-with-resource-rollup.md). + +## <a name="updates_nested_tasks"></a> Summary Tasks, Task Hierarchy, and Submissions of Work Items that Are Nested at Multiple Levels + By design, the synchronization engine does not update Project fields for linked tasks that have subtasks in the enterprise project plan. The synchronization process skips updates of these tasks because the project plan calculates the work for them. Changes to the title and other non-work fields are also not updated for these tasks. This behavior is a known limitation of the integration of the two server products. + + When a project manager publishes a detailed set of tasks that include requirements and linked tasks to Team Foundation Server, the synchronization engine locks the task hierarchy. Team members cannot modify the task hierarchy in Team Foundation, but they can reassign tasks to team members in the team project. As the following illustration shows, tasks are listed under their requirements, and the hierarchical links between parent and children tasks are locked (![Locked link icon](_img/icon_lockedlink.png "Icon_lockedLink")). The locked links indicate that the requirements and child tasks have been added to a team project from Project Server. Only the project manager from the project plan can modify the task hierarchy. + + ![Work breakdown schedule in Team Explorer](_img/tfs-ps_te_detailedplan_workbreakdown.png "TFS-PS_TE_DetailedPlan_WorkBreakdown") + + When a team submits multiple levels of work items from Team Foundation to Project Server, the first level must be approved and published to Project Server before the next level can be submitted. If a team submits a batch of new work items that includes three levels of child items, for example, the project manager must publish the project plan four times for all work items to be synchronized with Project Server. As the project manager approves each level of work items and publishes them to Project Server, the hierarchical link relationships are locked in Team Foundation until the entire link hierarchy is locked. Team members cannot modify the hierarchy for these mapped work items. + +## <a name="updates_fields_tables"></a> Updates to Fields that Are Associated with Pick Lists or Lookup Tables + When you map Team Foundation Server fields that are associated with a pick list or Project Server fields that are associated with a lookup table, you must consider additional steps to ensure a good user experience. The synchronization engine does not automatically create the counterpart associated lists or synchronize their allowed values in the other server. As a best practice, you should create lookup tables in Project Server to match the pick lists that are defined in Team Foundation and create pick lists in Team Foundation to match lookup tables that are defined in Project Server. If a pick list or lookup table changes, you must always manually update the corresponding list in the other server product. + +## Related notes + [Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md) + [Manage projects](manage-projects.md) + [Customize the field mapping](customize-field-mapping-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/update-version-compatibility-requirements.md b/docs/work/tfs-ps-sync/update-version-compatibility-requirements.md new file mode 100644 index 00000000000..dfd497fe7bb --- /dev/null +++ b/docs/work/tfs-ps-sync/update-version-compatibility-requirements.md @@ -0,0 +1,54 @@ +--- +title: Update an existing installation and version compatibility requirements | TFS +description: Update an existing installation and version compatibility requirements when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: aa45b668-d753-4837-a5cc-ffdc82f08c1c +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- + +# Update an existing installation and version compatibility requirements +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> You should follow the guidelines in this topic when you update an existing deployment to Visual Studio Team Foundation Server 2013 (TFS). Updating a deployment requires upgrading the instances of TFS, Microsoft Project Server, and Visual Studio clients. + + For administration purposes, you should upgrade the Visual Studio clients that you use for administration to the same software version as that running Team Foundation Server and Project Server. While clients running Visual Studio 2008 or Visual Studio 2010 are compatible with the updated deployment for the purposes of data synchronization, clients that will run the `TFSAdmin ProjectServer` commands must be at the same version level. + + To locate the most recent version of the software for integrating Team Foundation Server and Project Server, see [System and setup requirements](system-and-setup-requirements.md). + + + **Requirements** + + To perform the procedures in this topic, your **Administer Project Server integration** permission for the team project collection must be set to **Allow**. Also, the service account for TFS must be granted the necessary permissions to interact with the instance of Project Web Access or Project Web App (PWA) that will participate in data synchronization. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +## <a name="options"></a> Recommended update sequence + To update an existing deployment to the latest version of Visual Studio Team Foundation Server, perform the following actions. + +> [!NOTE] +> You do not need to unmap or unregister any mapped or registered components prior to upgrading the software. + +- Upgrade TFS according to the instructions provided in the Installation Guide: [Upgrade Team Foundation Server](../../tfs-server/upgrade/get-started.md). + + > [!IMPORTANT] + > Upgrading to Visual Studio Team Foundation Server 2013 requires 64-bit machines. Also, to install Team Foundation Server Extensions for Project Server requires that Project Server is installed on 64-bit machines. + +- Uninstall the Team Foundation Server and Project Server Integration Feature Pack from Project Server. + +- Install the Team Foundation Server Extensions for Project Server according to the instructions provided in the Installation Guide: [Install Team Foundation Server Extensions for Project Server](https://msdn.microsoft.com/library/hh549244.aspx). + + Install the extensions on each machine that will participate in data synchronization according to the following versions: + + - Each web-tier and application-tier server that hosts Project Server 2010. + +- Upgrade any clients that you will use to run `TfsAdmin ProjectServer` commands to Visual Studio 2013. + +## <a name="changes"></a> Changes introduced in the latest version of Visual Studio and TFS Extensions for Project Server + Visual Studio Team Foundation Server 2013 and Team Foundation Server Extensions for Project Server introduce the following changes: + +- As part of upgrading an instance of TFS or deploying a new installation based on Visual Studio Team Foundation Server 2013, a new transform is introduced in the mapping of fields between TFS and Project Server. The new transform is applied to the **Remaining Work** and **Completed Work** fields. When the synchronization engine detects a hierarchy under a work item that is synchronized with Project Server, it performs a roll-up for the work and assignments to send to Project Server. However, with the `transformType` set to `ClearValueIfParent`, the synchronization engine clears the work fields on the parent work item to avoid incorrect data in reports. For more information, see [Field Mapping XML Element Reference](field-mapping-xml-element-reference.md). + +## Related notes + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) + [Synchronize TFS with Project Server](synchronize-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/upgrade-ps-2010-to-ps-2013.md b/docs/work/tfs-ps-sync/upgrade-ps-2010-to-ps-2013.md new file mode 100644 index 00000000000..4f599cf75ec --- /dev/null +++ b/docs/work/tfs-ps-sync/upgrade-ps-2010-to-ps-2013.md @@ -0,0 +1,66 @@ +--- +title: Upgrade Microsoft Project Server 2010 to Microsoft Project Server 2013 | TFS +description: Upgrade Microsoft Project Server 2010 to Microsoft Project Server 2013 when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: d28658f8-d503-4e67-95e3-ab304462daa9 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Upgrade Microsoft Project Server 2010 to Microsoft Project Server 2013 +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +You can upgrade to Microsoft Project Server 2013 from a Project Server 2010 deployment that integrates with Visual Studio Team Foundation Server 2013 (TFS) by following the instructions provided in this topic. + +> [!NOTE] +> You cannot upgrade directly from Project Server 2007 to Project Server 2013. Instead, you first upgrade the app-tier and web-tier servers to Project Server 2010, then upgrade the required databases to Project Server 2013. For information about how to upgrade from Project Server 2007 to Project Server 2010, see the following resources on Microsoft TechNet: +> +> - [Upgrade and Migration for Project Server 2010 TechNet Resource Center](http://go.microsoft.com/fwlink/?LinkId=262119) +> - [Microsoft Project Server 2010 Upgrade SuperFlow Center](http://go.microsoft.com/fwlink/p/?LinkId=253657) + +## Upgrade process + +#### Upgrade Project Server 2010 to Project Server 2013 + +- Follow the instructions provided on Microsoft TechNet (above) to upgrade your Project Server 2010 deployment. + +#### Synchronize Project Server and Active Directory security groups + +- If you have moved from Windows authentication to Claims Based Authentication, synchronize the Active Directory security groups with Project Server. + + For instructions, see [Manage security group synchronization with Active Directory in Project Server 2013](http://technet.microsoft.com/library/gg750243.aspx). + +#### Set or verify database permissions + +- Add the service account of the web application pool for Project Server, and grant the following required permissions: **Alter any Schema**, **Create Table**, **Delete**, **Execute**, **Insert**, **Select**, and **Update**. + + See [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +#### Add required accounts to security groups + +- Add user and service accounts to the required security groups. + + For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +#### Register the new PWA + +1. Open a Command Prompt window on a computer that has either Visual Studio or Team Explorer installed, and enter: + + ``` + cd %programfiles%\Microsoft Visual Studio 11.0\Common7\IDE + ``` + + On a 64-bit edition of Windows, replace **%programfiles%** with **%programfiles(x86)%**. + +2. Enter the following command: + + ``` + TfsAdmin ProjectServer /RegisterPwa /tfs:TfsURL /previousPWA:URLFor2010 /PWA:URLFor2013 + ``` + + For more information, see [Register an instance of PWA](register-pwa.md). + +## Related notes + [Update an existing installation](update-version-compatibility-requirements.md) + [Synchronize TFS with Project Server](synchronize-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/verify-synch-process.md b/docs/work/tfs-ps-sync/verify-synch-process.md new file mode 100644 index 00000000000..72dd07dadeb --- /dev/null +++ b/docs/work/tfs-ps-sync/verify-synch-process.md @@ -0,0 +1,40 @@ +--- +title: Verify the synchronization process for TFS-Project Server integration | TFS +description: Verify the synchronization process for TFS-Project Server integration when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 767af0db-6c5d-4c1e-b2a3-8b4ffbd8ff6d +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Verify the synchronization process for TFS-Project Server integration +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> If you suspect that the data in Visual Studio Team Foundation Server and Microsoft Project Server is not synchronizing as you expect, you can review the following checklist to verify or troubleshoot operations. + +- **Resolve post-installation and configuration issues**. If you configure the two server products but synchronization does not start as you expect, you can review the following configuration elements: + + - Verify that all prerequisite software and cumulative updates have been installed. For more information, see [Prerequisite software](system-and-setup-requirements.md#prereq). + + - (Project Server 2010 only) Verify that the SharePoint Configuration Wizard has been run after any cumulative updates have been installed. For more information, see [Upgrade Microsoft Project Server 2010 to Microsoft Project Server 2013](upgrade-ps-2010-to-ps-2013.md). + + - Verify that all required permissions have been assigned. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + +- **Verify the health of the synchronization engine**: If synchronization had been performing as you expect before a problem occurred, you can perform the following procedures: + + - **Check synchronization messages**. By using the `/GetSyncMessages` option of the `TFSAdmin ProjectServer` command-line tool, you can display the errors that were logged most recently for a team project collection. For more information, see [View error messages](view-synch-error-messages.md). + + - **Review how fields get updated**. If you find that one or more fields are not being updated as you expect, review the information in [Understand how updates to specific fields are managed](understand-how-updates-to-specific-fields-managed.md). In particular, you might discover why a field is not being updated even though no synchronization messages are being logged. The data type of the field, the `OnConflict` attribute for mapping fields, and the task hierarchy affect how the synchronization engine updates specific fields. + + - **Review the synchronization process**. You can manage the integration of the two server products more effectively if you understand how the synchronization engine manages the flow of data between them. The engine synchronizes data in three ways. It captures and updates task-related and resource-related data in both server products while respecting the ownership of data by the project manager in the project plan. For more information, see [Synchronization process overview](synchronization-process-overview.md). + + - **Check known issues and workarounds**. If an error appears, you can determine whether you have encountered a known issue and whether a workaround has been identified. For more information, see [Known issues and workarounds](known-issues-and-workarounds.md). + + - Verify that the Team Foundation Background Job Agent is running. For more information, see [Stop and start services, application pools, and websites](../../tfs-server/admin/stop-start-stuff.md). + + If you have reviewed these suggestions and you still suspect a problem, visit the following forum on the Microsoft website: [Team Foundation Server and Project Server Integration](http://go.microsoft.com/fwlink/?LinkId=207282). + +## Related notes + [Known issues and workarounds](known-issues-and-workarounds.md) + [Administer TFS-Project Server integration](administrate-integration-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/view-synch-error-messages.md b/docs/work/tfs-ps-sync/view-synch-error-messages.md new file mode 100644 index 00000000000..b6047849f2a --- /dev/null +++ b/docs/work/tfs-ps-sync/view-synch-error-messages.md @@ -0,0 +1,77 @@ +--- +title: View synchronization engine error messages | TFS +description: View synchronization engine error messages when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: cd4e04e2-7a15-4a2c-8833-301f1292cdba +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# View synchronization engine error messages +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> To help troubleshoot the integration of Visual Studio Team Foundation Server (TFS) and Microsoft Project Server, you can display a list of recent synchronization errors. You can display the most recent errors that were logged for a team project collection by using the `/GetSyncMessages` option of the **TFSAdmin ProjectServer** command-line tool. + +> [!NOTE] +> For information about the synchronization process, see [Overview of integration features](overview-tfs-project-server-integration.md). + + To run the **TfsAdmin** command-line tool, open a Command Prompt window where either Visual Studio or Team Explorer is installed and enter: + +``` +cd %programfiles(x86)%\Microsoft Visual Studio 12.0\Common7\IDE +``` + + On a 32-bit edition of Windows, replace **%programfiles(x86)%** with **%programfiles%.**. + + **Requirements** + + To use this command, your **Administer Project Server integration** permission must be set to **Allow** for the team project collection. Also, the service account for Team Foundation Server must be granted the necessary permissions to interact with the instance of Project Web Access or Project Web App (PWA) that will participate in data synchronization. For more information, see [Assign permissions](assign-permissions-support-tfs-project-server-integration.md). + + + +## Syntax + +``` +TfsAdmin ProjectServer /GetSyncMessages /collection:tpcUrl +``` + +#### Parameters + +|**Parameter**|**Description**| +|-------------------|---------------------| +|**/collection**: `tpcUrl`|Specifies the uniform resource locator (URL) of a team project collection. You specify the URI in the following format:<br /><br /> **http**://*ServerName:Port/VirtualDirectoryName/CollectionName*<br /><br /> If you do not specify a virtual directory, you specify the URI in the following format:<br /><br /> **http**://*ServerName:Port/CollectionName*| +|**/?** or **help**|Displays information about the command.| + +## Return value + The **/GetSyncMessages** option displays a tab-delimited set of messages with their column headers. The following information appears for each message: + +- **Date**: Date when the message was logged. + +- **Team Project Collection Name\Team Project Name**: Names of the team project collection and the team project. + +- **Project Name**: Name of the enterprise project plan. + +- **Message**: Content of the message. + + These messages are extracted from the synchronization job log. The `/GetSyncMessages` option truncates the messages that are much longer than average. When this truncation occurs, the following message appears: + + **There are additional errors that have been truncated from the log. These errors can be viewed in the event log for the application-tier server(s).** + + You can view the complete message by opening the event log for the corresponding application-tier server. + +## Example + The following example retrieves the error messages that have been logged for DefaultCollection, which is defined on the MyTFSServer application-tier server. + +``` +TfsAdmin ProjectServer /GetSyncMessages /collection:http://MyTFSServer:8080/tfs/DefaultCollection + +``` + +> [!TIP] +> You can use standard command-line syntax to send the output to a file. For example, you can specify **>c:\output.txt**. + +## Related notes + [Overview of integration features](overview-tfs-project-server-integration.md) + [Known issues and workarounds](known-issues-and-workarounds.md) + [Map integration components](map-integration-components.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/work-with-resource-rollup.md b/docs/work/tfs-ps-sync/work-with-resource-rollup.md new file mode 100644 index 00000000000..9f9deda39ba --- /dev/null +++ b/docs/work/tfs-ps-sync/work-with-resource-rollup.md @@ -0,0 +1,122 @@ +--- +title: Work with resource rollup in enterprise projects mapped to team projects | TFS +description: Work with resource rollup in enterprise projects mapped to team projects when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 72efdffb-ea99-4b89-b681-53bc1dcb2ac9 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# Work with resource rollup in enterprise projects mapped to team projects +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="Top"></a> As a project manager or resource manager, you can track work that is allocated to resources in either Microsoft Project Professional or Team Foundation. The synchronization engine for Visual Studio Team Foundation Server and Microsoft Project Server supports the flow of rollup calculations and resource data, referred to as resource rollup, between the two server products. You can view the assignment of work by resources in Project Professional or from Project Web Access or Project Web App (PWA). Regardless of the method that you use to manage your project plan, you can use resource rollup to view resource allocation and work estimates, perform resource leveling, and determine whether a resource is over-allocated within a single project or across multiple projects. + +> [!NOTE] +> You can view resource rollup only for an enterprise project plan that is mapped to a team project. For more information, see [Configure TFS-Project Server integration](configure-tfs-project-server-integration.md). + + Because the two server products track work differently, you should become familiar with how data is stored and what happens when it is modified. + + +## <a name="Scenarios"></a> Supported and Unsupported Scenarios + By using resource rollup, project managers can perform the following operations: + +- View resource allocation and work that development teams estimate. + +- Perform resource leveling in Project, and create a schedule baseline. + +- Determine whether a resource who is common to multiple projects in the portfolio is over-allocated. + +- View progress as team members update work hours in Team Foundation. + + Resource rollup does not support the following scenarios: + +- Billing work based on the number of hours that a team member worked per day. Team Foundation reports the total number of hours worked per team member per task but not how many hours each team member worked per day. To provide accurate week-by-week reporting of hours worked, team members should track this by using the timesheets in Project Server. + +- Tracking work per resource based on work items that are successively assigned to multiple team members. When team members reassign a work item with actual work, Team Foundation credits the person to whom the item is assigned currently with all work that has been completed so far. To track accurately the work that each team member performed, you must create separate tasks for each team member. + +## <a name="ViewingAvailability"></a> Viewing Resource Availability + Because Team Foundation supports resource rollup, you can view the Assignment Work by Resource report as the following illustration shows. You can access this report from the instance of PWA. For more information, see the following page on the Microsoft website: [View resource workloads and availability](http://go.microsoft.com/fwlink/?LinkId=207284). + + ![Assignment of work by resource in PWA](_img/ps-tfs_pwa_asswrkavailability.png "PS-TFS_PWA_AssWrkAvailability") + + Before you view work estimates or resource availability, you should publish the enterprise project plan so that Project Server has the most recent updates. For resource rollup, a two-pass sequence is required to capture the allocation of work to resources in Project Server. The following sequence of actions must occur for resource rollup data to flow completely from Team Foundation to Project Server: + +1. Team members submit a parent work item with one or more child tasks to the enterprise project plan. + +2. For the first status update, the synchronization engine submits an update to Project Server with an initial rollup that allocates all work to the primary task owner. + +3. The project manager accepts the status update. + +4. The project manager publishes the project plan. + +5. For subsequent status updates, the synchronization engine submits updates that contain the complete rollup of work that is allocated to each valid user. Also, the engine submits updates for any changes to work, to assignment fields, or to the tree hierarchy for work items. + +6. The project manager accepts the status update. + +7. The project manager publishes the project plan. + + Project Server can store resource rollup information from Team Foundation only for valid resources. For a resource to be valid, the user name must be added to the enterprise resource pool and the project resource pool, and the required permissions to submit status updates in Project Server must have been granted to the user. + + When a rollup task is submitted that contains a child task whose assigned user is an invalid resource, the work for the invalid resource is allocated to the primary owner or active resource for the summary task. Status errors about assignments for unmapped child work items are logged to the parent work item. To resolve these reallocations, you must find the tasks that contain a failed submit status and resolve the issue. For more information, see [Monitor submissions and resolve rejections](monitor-submissions-resolve-rejections.md). + +## <a name="RollupCalculations"></a> Rollup Information from Team Foundation + Rollup is calculated for mapped work items that contain child tasks. Mapped work items have the **Submit to Project Server** field set to **Yes**. The **Remaining Work** and **Completed Work** fields of parent tasks contain the sum of the values of these work-item fields defined for their child tasks. In addition, the synchronization engine provides a rollup of all resources that are assigned to all child tasks and their related work. The engine also stores this information in the Project Server Assignment Data field. + +> [!NOTE] +> You cannot disable resource rollup or rollup calculations. + + Rollup calculations obey the following rules: + +- Apply only to non-mapped work items that are child items whose parents are mapped and set to be published to an enterprise project plan. + +- Ignore child items that are mapped to Project tasks to avoid double-counting of work in the enterprise project plan. + +- Support hierarchies of tasks that contain multiple levels of nesting, that is, parents that contain child items that contain child items. + + As rollup data in Team Foundation changes, the synchronization engine creates status updates to reflect the changes. + +### Rollup of Work Items from Team Foundation to Tasks in Project + The following workflow illustrates how work items in Team Foundation roll up into tasks in Project: + +1. In Team Foundation, the team lead, Peter, breaks down a requirement named Shopping Cart into 10 tasks of five hours each. He assigns four tasks to Jean-Marie and six tasks to Sanjay. The requirement is assigned to Peter. + +2. In Project, the project manager, Svetlana, sees that the Shopping Cart summary task contains the following assignments: + + - one assignment for Peter without any completed or remaining work 0 + + - one assignment for Jean-Marie without any completed work and 20 hours of remaining work + + - one assignment for Sanjay without any completed work and 30 hours of remaining work + +3. As team members complete work, they update their data in Team Foundation. After Jean-Marie has worked six hours on her tasks and Sanjay has worked 12 hours on his tasks, Svetlana sees the following updates to assignments in Project: + + - one assignment for Peter without any completed or remaining work + + - one assignment for Jean-Marie with six hours of completed work and 14 hours of remaining work + + - one assignment for Sanjay with 12 hours of completed work and 18 hours of work remaining + +4. If additional tasks are added and assigned to a new team member, the rollup of work for that person is added to the assignments in Project for the summary task. + +5. If the team lead moves a child task to another parent work item in Team Foundation, any work that was associated with that child task is deleted from the assignments in the summary task in Project. + +6. If the team lead reassigns a child task to another team member, the assignments are adjusted to reflect the rollup of work. Any work that a team member already performed is allocated to the team member who is currently assigned to the work item. + +### Primary or Active Owner for a Task or Work Item + You can assign only one active user to a task that is published to Team Foundation Server. However, multiple resources appear in Project for summary tasks that contain the rollup of child work items. + + When you assign a **Resource** in Project to a task that you will publish to a team project, you must specify a primary or active owner of the task. This information corresponds to the user name in the Assigned To field in Team Foundation. + +### Assigning and Reassigning Resources to Work Items and Tasks + After a task is linked in Team Foundation, it owns rolled-up resource assignments, which are virtually read-only in Project. In Project, you can still reassign tasks that are not rolled up. + + In Team Foundation, you can assign only one person to a work item. The **Assigned To** field can contain only one person name. In Project Professional, you can assign multiple resources to a task. However, tasks that you publish to Team Foundation Server can contain only one active assignment. When you publish your project plan, the client add-in for Team Foundation verifies that only one assignment per task is defined. If multiple resources are assigned to a task, a **Validation Resolution** dialog box appears, and you must specify one resource as the active assignment. For more information, see [Resolve validation errors](resolve-validation-errors.md). + + Team Foundation uses work items to implement workflow. A single work item can be assigned successively to multiple team members, and each member performs some action and completes work. If you want to bill hours based on work that each resource completes, you should have team members update their timesheets in PWA. + +## Related notes + [Overview of integration features](overview-tfs-project-server-integration.md) + [Synchronization process overview](synchronization-process-overview.md) + [Manage projects](manage-projects.md) \ No newline at end of file diff --git a/docs/work/tfs-ps-sync/xml-elements-added-to-wit-definition.md b/docs/work/tfs-ps-sync/xml-elements-added-to-wit-definition.md new file mode 100644 index 00000000000..3dcc34459d6 --- /dev/null +++ b/docs/work/tfs-ps-sync/xml-elements-added-to-wit-definition.md @@ -0,0 +1,119 @@ +--- +title: XML elements added to the definition for the work item type | TFS +description: Shows the XML elements added to the definition for the work item type when using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: visual-studio-tfs-dev14 +ms.technology: vs-devops-wit +ms.assetid: 7f58b123-18df-4382-895e-01f7c9e366f8 +ms.manager: douge +ms.author: kaelli +ms.date: 01/12/2017 +--- +# XML elements added to the definition for the work item type +[!INCLUDE [temp](../_shared/tfs-ps-sync-header.md)] + +<a name="top"></a> You can manually update the definition of a work item type to support synchronization between Visual Studio Team Foundation Server and Microsoft Project Server. On occasion, a problem can occur when you map a work item type and Team Foundation Server does not add the required XML elements to the type definition. This problem can occur when the work item type does not include a `TabGroup` element, or changes to the type prohibit the addition of the necessary elements. In these situations, you can, as this topic describes, manually add the necessary elements to the type definition. These elements specify the fields and form controls that support the addition of the **Project Server** tab to the work item form, as the following illustration shows. For more information, see [Project Server fields that support data synchronization](project-server-fields-added-to-tfs.md). + + ![Project Server Tab default fields](_img/pstfs_projectservertab.png "PSTFS_ProjectServerTab") + + +## <a name="manually_update"></a> To manually update a type definition to display project server fields + To manually add the **Project Server** tab to a work item type, perform the following sequence of steps: + +1. Export the type definition. + +2. Add the required `FIELD` elements to the `FIELDS` section of the type definition. + +3. Add the `Tab` elements to the `FORM` section and within the `TabGroup` element. + +4. Import the type definition. + + For more information, see [Export and import work item types ](https://msdn.microsoft.com/library/ms404856.aspx). + + +## <a name="fields"></a> Elements to add to the FIELDS section + Add the following syntax to the `FIELDS` section of the type definition. For more information, see [Modify a field or add a custom field](../../work/customize/add-modify-field.md). + +``` +<FIELD name="Project Server Submit" refname="Microsoft.Sync.ProjSrv.Submit" type="String"> +   <HELPTEXT>Toggle to set whether the work item updates are sent to Project Server</HELPTEXT> +</FIELD> +<FIELD name="Project Server Enterprise Project" refname="Microsoft.Sync.ProjSrv.ProjectName" type="String"> +   <HELPTEXT>Name of the enterprise project plan in Project Server</HELPTEXT> +</FIELD> +<FIELD name="Project Server Is Linked" refname="Microsoft.Sync.ProjSrv.IsLinkedToProjSrv" type="String"> +   <HELPTEXT>Indicates whether the work item is linked to Project Server</HELPTEXT> +</FIELD> +<FIELD name="Project Server Last Submitted Date" refname="Microsoft.Sync.ProjSrv.LastSubmittedDate" type="DateTime"> +   <HELPTEXT>Date of the most recent submission to Project Server</HELPTEXT> +</FIELD> +<FIELD name="Project Server Last Submit Status" refname="Microsoft.Sync.ProjSrv.LastSubmitStatus" type="String"> +   <HELPTEXT>Status of success or failure for the most recent submission to Project Server</HELPTEXT> +</FIELD> +<FIELD name="Project Server Last Reviewed Date" refname="Microsoft.Sync.ProjSrv.LastReviewedDate" type="DateTime"> +   <HELPTEXT>Date of the most recent approval by the project manager</HELPTEXT> +</FIELD> +<FIELD name="Project Server Last Review Status" refname="Microsoft.Sync.ProjSrv.LastReviewStatus" type="String"> +   <HELPTEXT>State of the most recent approval by the project manager</HELPTEXT> +</FIELD> +<FIELD name="Project Server Completed Work" refname="Mirror.Microsoft.VSTS.Scheduling.CompletedWork" type="Double" /> +<FIELD name="Project Server Remaining Work" refname="Mirror.Microsoft.VSTS.Scheduling.RemainingWork" type="Double" /> +<FIELD name="Project Server Original Estimate" refname="Mirror.Microsoft.VSTS.Scheduling.OriginalEstimate" type="Double" /> +<FIELD name="Project Server Health" refname="Mirror.Microsoft.VSTS.Common.Health" type="String" /> + +``` + + +## <a name="form"></a> Elements to add to the FORM section + To manually add the **Project Server** tab to a work item type, open the type definition file, find the `FORM` section, and then add the following syntax to the `TabGroup` section. For more information, see [Design the work item form](../reference/design-work-item-form.md). + +> [!NOTE] +> You can assign any label to the `name` attribute for each `Control` element as long as the label is unique within the type definition. You use the `name` attribute when you want the same field to appear in more than one location on the form. Several fields on the **Project Server** tab appear elsewhere on the work item form. For more information, see [Control](https://msdn.microsoft.com/library/aa337625.aspx). + +``` +<Tab Label="Project Server"> +   <Group> +      <Column PercentWidth="50"> +         <Group Label="Publish"> +            <Column PercentWidth="100"> +               <Control FieldName="Microsoft.Sync.ProjSrv.Submit" name="SubmitName" Type="FieldControl" Label="&Submit to Project Server:" LabelPosition="Left" /> +               <Control FieldName="Microsoft.Sync.ProjSrv.ProjectName" name="ProjectName" Type="FieldControl" Label="Enterprise &Project:" LabelPosition="Left" /> +            </Column> +         </Group> +            </Column> +            <Column PercentWidth="50"> +         <Group Label="Status"> +           <Column PercentWidth="100"> +               <Control FieldName="Microsoft.Sync.ProjSrv.IsLinkedToProjSrv" name="IsLinkedName" Type="FieldControl" Label="&Linked to Project Server:" LabelPosition="Left" ReadOnly="True" /> +               <Control FieldName="Microsoft.Sync.ProjSrv.LastSubmitStatus" name="LastSubmitName" Type="FieldControl" Label="Last S&ubmit Status:" LabelPosition="Left" ReadOnly="True" /> +               <Control FieldName="Microsoft.Sync.ProjSrv.LastSubmittedDate" name="LastSubmittedName" Type="FieldControl" Label="Last Sub&mitted Date:" LabelPosition="Left" ReadOnly="True" /> +               <Control FieldName="Microsoft.Sync.ProjSrv.LastReviewedDate" name="LastReviewedName" Type="FieldControl" Label="Last Approval Date:" LabelPosition="Left" ReadOnly="True" /> +               <Control FieldName="Microsoft.Sync.ProjSrv.LastReviewStatus" name="LastReviewName" Type="FieldControl" Label="Last Approval Status:" LabelPosition="Left" ReadOnly="True" /> +            </Column> +         </Group> +      </Column> +   </Group> +   <Group Label="Mapped Fields (Project Plan : Work Item)"> +      <Column PercentWidth="50"> +         <Control FieldName="Mirror.Microsoft.VSTS.Scheduling.CompletedWork" name="CompletedWorkMirrorName" Type="FieldControl" Label="Completed Work" LabelPosition="Left" ReadOnly="True" /> +         <Control FieldName="Mirror.Microsoft.VSTS.Scheduling.RemainingWork" name="RemainingWorkMirrorName" Type="FieldControl" Label="Remaining Work" LabelPosition="Left" ReadOnly="True" /> +      </Column> +      <Column PercentWidth="50"> +         <Control FieldName="Microsoft.VSTS.Scheduling.CompletedWork" name="CompletedWorkName" Type="FieldControl" /> +         <Control FieldName="Microsoft.VSTS.Scheduling.RemainingWork" name="RemainingWorkName" Type="FieldControl" /> +      </Column> +   </Group> +   <Group Label="Mapped Fields (Project Plan)"> +      <Column PercentWidth="100"> +         <Control FieldName="Mirror.Microsoft.VSTS.Scheduling.OriginalEstimate" name="OriginalEstimateMirrorName" Type="FieldControl" Label="Original Estimate" LabelPosition="Left" ReadOnly="True" /> +      </Column> +   </Group> +</Tab> + +``` + + +## Related notes + [Add or modify a field](../customize/add-modify-field.md) + [Export and import work item types](https://msdn.microsoft.com/library/ms404856.aspx) + [Design the work item form](../reference/design-work-item-form.md) + [Customize the field mapping](customize-field-mapping-tfs-project-server.md) \ No newline at end of file diff --git a/docs/work/track/_img/10.png b/docs/work/track/_img/10.png new file mode 100644 index 00000000000..d6f5ec94554 Binary files /dev/null and b/docs/work/track/_img/10.png differ diff --git a/docs/work/track/_img/11.png b/docs/work/track/_img/11.png new file mode 100644 index 00000000000..28c1e75cd81 Binary files /dev/null and b/docs/work/track/_img/11.png differ diff --git a/docs/work/track/_img/12.png b/docs/work/track/_img/12.png new file mode 100644 index 00000000000..cf7d57781c9 Binary files /dev/null and b/docs/work/track/_img/12.png differ diff --git a/docs/work/track/_img/13.png b/docs/work/track/_img/13.png new file mode 100644 index 00000000000..9b1877f8773 Binary files /dev/null and b/docs/work/track/_img/13.png differ diff --git a/docs/work/track/_img/14.png b/docs/work/track/_img/14.png new file mode 100644 index 00000000000..6ddd56a3e6a Binary files /dev/null and b/docs/work/track/_img/14.png differ diff --git a/docs/work/track/_img/15.png b/docs/work/track/_img/15.png new file mode 100644 index 00000000000..864acd3f954 Binary files /dev/null and b/docs/work/track/_img/15.png differ diff --git a/docs/work/track/_img/16.png b/docs/work/track/_img/16.png new file mode 100644 index 00000000000..3f774334554 Binary files /dev/null and b/docs/work/track/_img/16.png differ diff --git a/docs/work/track/_img/17.png b/docs/work/track/_img/17.png new file mode 100644 index 00000000000..6ab49f9adbc Binary files /dev/null and b/docs/work/track/_img/17.png differ diff --git a/docs/work/track/_img/18.png b/docs/work/track/_img/18.png new file mode 100644 index 00000000000..fae57c825da Binary files /dev/null and b/docs/work/track/_img/18.png differ diff --git a/docs/work/track/_img/19.png b/docs/work/track/_img/19.png new file mode 100644 index 00000000000..60ead0a7cd6 Binary files /dev/null and b/docs/work/track/_img/19.png differ diff --git a/docs/work/track/_img/22.png b/docs/work/track/_img/22.png new file mode 100644 index 00000000000..6953b22001e Binary files /dev/null and b/docs/work/track/_img/22.png differ diff --git a/docs/work/track/_img/3.png b/docs/work/track/_img/3.png new file mode 100644 index 00000000000..66b051c0c1d Binary files /dev/null and b/docs/work/track/_img/3.png differ diff --git a/docs/work/track/_img/4.png b/docs/work/track/_img/4.png new file mode 100644 index 00000000000..2898e69cfce Binary files /dev/null and b/docs/work/track/_img/4.png differ diff --git a/docs/work/track/_img/5.png b/docs/work/track/_img/5.png new file mode 100644 index 00000000000..e12445166ee Binary files /dev/null and b/docs/work/track/_img/5.png differ diff --git a/docs/work/track/_img/6.png b/docs/work/track/_img/6.png new file mode 100644 index 00000000000..9e299839641 Binary files /dev/null and b/docs/work/track/_img/6.png differ diff --git a/docs/work/track/_img/8.png b/docs/work/track/_img/8.png new file mode 100644 index 00000000000..34587e18cc4 Binary files /dev/null and b/docs/work/track/_img/8.png differ diff --git a/docs/work/track/_img/9.png b/docs/work/track/_img/9.png new file mode 100644 index 00000000000..473749fdaf3 Binary files /dev/null and b/docs/work/track/_img/9.png differ diff --git a/docs/work/track/_img/ALM_HA_AllChanges.png b/docs/work/track/_img/ALM_HA_AllChanges.png new file mode 100644 index 00000000000..30395dce38d Binary files /dev/null and b/docs/work/track/_img/ALM_HA_AllChanges.png differ diff --git a/docs/work/track/_img/ALM_HA_HistoryQuery.png b/docs/work/track/_img/ALM_HA_HistoryQuery.png new file mode 100644 index 00000000000..939e2bd8968 Binary files /dev/null and b/docs/work/track/_img/ALM_HA_HistoryQuery.png differ diff --git a/docs/work/track/_img/IC588262.png b/docs/work/track/_img/IC588262.png new file mode 100644 index 00000000000..f136d8cdf9d Binary files /dev/null and b/docs/work/track/_img/IC588262.png differ diff --git a/docs/work/track/_img/IC588289.png b/docs/work/track/_img/IC588289.png new file mode 100644 index 00000000000..30fdf27ea1c Binary files /dev/null and b/docs/work/track/_img/IC588289.png differ diff --git a/docs/work/track/_img/IC588323.png b/docs/work/track/_img/IC588323.png new file mode 100644 index 00000000000..71020ca8c89 Binary files /dev/null and b/docs/work/track/_img/IC588323.png differ diff --git a/docs/work/track/_img/IC588324.png b/docs/work/track/_img/IC588324.png new file mode 100644 index 00000000000..0992e92789b Binary files /dev/null and b/docs/work/track/_img/IC588324.png differ diff --git a/docs/work/track/_img/IC589934.png b/docs/work/track/_img/IC589934.png new file mode 100644 index 00000000000..2ebdb62ea03 Binary files /dev/null and b/docs/work/track/_img/IC589934.png differ diff --git a/docs/work/track/_img/IC666631.png b/docs/work/track/_img/IC666631.png new file mode 100644 index 00000000000..d8267b6dc4f Binary files /dev/null and b/docs/work/track/_img/IC666631.png differ diff --git a/docs/work/track/_img/IC673344.png b/docs/work/track/_img/IC673344.png new file mode 100644 index 00000000000..c6ac31b38e2 Binary files /dev/null and b/docs/work/track/_img/IC673344.png differ diff --git a/docs/work/track/_img/IC764665.png b/docs/work/track/_img/IC764665.png new file mode 100644 index 00000000000..49126beb6aa Binary files /dev/null and b/docs/work/track/_img/IC764665.png differ diff --git a/docs/work/track/_img/IC775501.png b/docs/work/track/_img/IC775501.png new file mode 100644 index 00000000000..80c22758e8f Binary files /dev/null and b/docs/work/track/_img/IC775501.png differ diff --git a/docs/work/track/_img/IC777601.png b/docs/work/track/_img/IC777601.png new file mode 100644 index 00000000000..ae7e6121461 Binary files /dev/null and b/docs/work/track/_img/IC777601.png differ diff --git a/docs/work/track/_img/add-tags-query.png b/docs/work/track/_img/add-tags-query.png new file mode 100644 index 00000000000..ace63ab1163 Binary files /dev/null and b/docs/work/track/_img/add-tags-query.png differ diff --git a/docs/work/track/_img/add-tags-to-query-results.png b/docs/work/track/_img/add-tags-to-query-results.png new file mode 100644 index 00000000000..1f3fbb84b52 Binary files /dev/null and b/docs/work/track/_img/add-tags-to-query-results.png differ diff --git a/docs/work/track/_img/add-tags-to-work-items-vso-tfs.png b/docs/work/track/_img/add-tags-to-work-items-vso-tfs.png new file mode 100644 index 00000000000..3d7d3b36d29 Binary files /dev/null and b/docs/work/track/_img/add-tags-to-work-items-vso-tfs.png differ diff --git a/docs/work/track/_img/administer/ALM_AN_Administer.png b/docs/work/track/_img/administer/ALM_AN_Administer.png new file mode 100644 index 00000000000..4b647612e7f Binary files /dev/null and b/docs/work/track/_img/administer/ALM_AN_Administer.png differ diff --git a/docs/work/track/_img/administer/ALM_AN_AlertsForMember.png b/docs/work/track/_img/administer/ALM_AN_AlertsForMember.png new file mode 100644 index 00000000000..2053c09f290 Binary files /dev/null and b/docs/work/track/_img/administer/ALM_AN_AlertsForMember.png differ diff --git a/docs/work/track/_img/administer/ALM_AN_Result.png b/docs/work/track/_img/administer/ALM_AN_Result.png new file mode 100644 index 00000000000..fdcdb8abe49 Binary files /dev/null and b/docs/work/track/_img/administer/ALM_AN_Result.png differ diff --git a/docs/work/track/_img/administer/ALM_AN_Shortcut.png b/docs/work/track/_img/administer/ALM_AN_Shortcut.png new file mode 100644 index 00000000000..9e59ce0614b Binary files /dev/null and b/docs/work/track/_img/administer/ALM_AN_Shortcut.png differ diff --git a/docs/work/track/_img/administer/ALM_AN_TeamMember.png b/docs/work/track/_img/administer/ALM_AN_TeamMember.png new file mode 100644 index 00000000000..460c33e65da Binary files /dev/null and b/docs/work/track/_img/administer/ALM_AN_TeamMember.png differ diff --git a/docs/work/track/_img/example-query-config-chart-sum-remaining-work-pivot-chart.png b/docs/work/track/_img/example-query-config-chart-sum-remaining-work-pivot-chart.png new file mode 100644 index 00000000000..647d7386f7c Binary files /dev/null and b/docs/work/track/_img/example-query-config-chart-sum-remaining-work-pivot-chart.png differ diff --git a/docs/work/track/_img/example-search-box-queries/IC533396.png b/docs/work/track/_img/example-search-box-queries/IC533396.png new file mode 100644 index 00000000000..a5a1c808c2c Binary files /dev/null and b/docs/work/track/_img/example-search-box-queries/IC533396.png differ diff --git a/docs/work/track/_img/example-search-box-queries/IC552976.png b/docs/work/track/_img/example-search-box-queries/IC552976.png new file mode 100644 index 00000000000..780fbc9133e Binary files /dev/null and b/docs/work/track/_img/example-search-box-queries/IC552976.png differ diff --git a/docs/work/track/_img/example-search-box-queries/IC588317.png b/docs/work/track/_img/example-search-box-queries/IC588317.png new file mode 100644 index 00000000000..439c6deb43d Binary files /dev/null and b/docs/work/track/_img/example-search-box-queries/IC588317.png differ diff --git a/docs/work/track/_img/example-search-box-queries/IC588318.png b/docs/work/track/_img/example-search-box-queries/IC588318.png new file mode 100644 index 00000000000..a59ded63348 Binary files /dev/null and b/docs/work/track/_img/example-search-box-queries/IC588318.png differ diff --git a/docs/work/track/_img/example-search-box-queries/IC588319.png b/docs/work/track/_img/example-search-box-queries/IC588319.png new file mode 100644 index 00000000000..fef7f3e02d9 Binary files /dev/null and b/docs/work/track/_img/example-search-box-queries/IC588319.png differ diff --git a/docs/work/track/_img/example-work-item-queries/IC588290.png b/docs/work/track/_img/example-work-item-queries/IC588290.png new file mode 100644 index 00000000000..8f8ffddf2ef Binary files /dev/null and b/docs/work/track/_img/example-work-item-queries/IC588290.png differ diff --git a/docs/work/track/_img/example-work-item-queries/IC588291.png b/docs/work/track/_img/example-work-item-queries/IC588291.png new file mode 100644 index 00000000000..227928048d9 Binary files /dev/null and b/docs/work/track/_img/example-work-item-queries/IC588291.png differ diff --git a/docs/work/track/_img/example-work-item-queries/IC675038.png b/docs/work/track/_img/example-work-item-queries/IC675038.png new file mode 100644 index 00000000000..1c96499a024 Binary files /dev/null and b/docs/work/track/_img/example-work-item-queries/IC675038.png differ diff --git a/docs/work/track/_img/example-work-item-queries/IC675039.png b/docs/work/track/_img/example-work-item-queries/IC675039.png new file mode 100644 index 00000000000..a4bb52b73f8 Binary files /dev/null and b/docs/work/track/_img/example-work-item-queries/IC675039.png differ diff --git a/docs/work/track/_img/example-work-item-queries/IC697729.png b/docs/work/track/_img/example-work-item-queries/IC697729.png new file mode 100644 index 00000000000..e4279dc9896 Binary files /dev/null and b/docs/work/track/_img/example-work-item-queries/IC697729.png differ diff --git a/docs/work/track/_img/example-work-item-queries/IC720125.png b/docs/work/track/_img/example-work-item-queries/IC720125.png new file mode 100644 index 00000000000..ef6af1b4524 Binary files /dev/null and b/docs/work/track/_img/example-work-item-queries/IC720125.png differ diff --git a/docs/work/track/_img/example-work-item-queries/IC736440.png b/docs/work/track/_img/example-work-item-queries/IC736440.png new file mode 100644 index 00000000000..9b4ead906cd Binary files /dev/null and b/docs/work/track/_img/example-work-item-queries/IC736440.png differ diff --git a/docs/work/track/_img/filter-a-list-using-tags.png b/docs/work/track/_img/filter-a-list-using-tags.png new file mode 100644 index 00000000000..80aea938338 Binary files /dev/null and b/docs/work/track/_img/filter-a-list-using-tags.png differ diff --git a/docs/work/track/_img/filtered-list-based-on-tags.png b/docs/work/track/_img/filtered-list-based-on-tags.png new file mode 100644 index 00000000000..1fd930fb3ba Binary files /dev/null and b/docs/work/track/_img/filtered-list-based-on-tags.png differ diff --git a/docs/work/track/_img/follow-pull-request.png b/docs/work/track/_img/follow-pull-request.png new file mode 100644 index 00000000000..cd875b4e7a4 Binary files /dev/null and b/docs/work/track/_img/follow-pull-request.png differ diff --git a/docs/work/track/_img/hist-audit-choose-history-tab-tfs.png b/docs/work/track/_img/hist-audit-choose-history-tab-tfs.png new file mode 100644 index 00000000000..357bf5866a5 Binary files /dev/null and b/docs/work/track/_img/hist-audit-choose-history-tab-tfs.png differ diff --git a/docs/work/track/_img/hist-audit-query-team-explorer.png b/docs/work/track/_img/hist-audit-query-team-explorer.png new file mode 100644 index 00000000000..6e6bc7aa710 Binary files /dev/null and b/docs/work/track/_img/hist-audit-query-team-explorer.png differ diff --git a/docs/work/track/_img/hist-audit-query-ts-bt.png b/docs/work/track/_img/hist-audit-query-ts-bt.png new file mode 100644 index 00000000000..9dbc1be5a39 Binary files /dev/null and b/docs/work/track/_img/hist-audit-query-ts-bt.png differ diff --git a/docs/work/track/_img/hist-audit-wi-form-vsts-tab.png b/docs/work/track/_img/hist-audit-wi-form-vsts-tab.png new file mode 100644 index 00000000000..9afff2a9f08 Binary files /dev/null and b/docs/work/track/_img/hist-audit-wi-form-vsts-tab.png differ diff --git a/docs/work/track/_img/hist-audit-wi-form.png b/docs/work/track/_img/hist-audit-wi-form.png new file mode 100644 index 00000000000..1de400c2171 Binary files /dev/null and b/docs/work/track/_img/hist-audit-wi-form.png differ diff --git a/docs/work/track/_img/link-controls-restrictions-field-reference/IC588293.png b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588293.png new file mode 100644 index 00000000000..029a4b52574 Binary files /dev/null and b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588293.png differ diff --git a/docs/work/track/_img/link-controls-restrictions-field-reference/IC588294.png b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588294.png new file mode 100644 index 00000000000..8dc210c2d72 Binary files /dev/null and b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588294.png differ diff --git a/docs/work/track/_img/link-controls-restrictions-field-reference/IC588333.png b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588333.png new file mode 100644 index 00000000000..6d9d7651934 Binary files /dev/null and b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588333.png differ diff --git a/docs/work/track/_img/link-controls-restrictions-field-reference/IC588335.png b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588335.png new file mode 100644 index 00000000000..0629c5f8901 Binary files /dev/null and b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588335.png differ diff --git a/docs/work/track/_img/link-controls-restrictions-field-reference/IC588336.png b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588336.png new file mode 100644 index 00000000000..345205661a0 Binary files /dev/null and b/docs/work/track/_img/link-controls-restrictions-field-reference/IC588336.png differ diff --git a/docs/work/track/_img/link-controls-restrictions-field-reference/IC589934.png b/docs/work/track/_img/link-controls-restrictions-field-reference/IC589934.png new file mode 100644 index 00000000000..2ebdb62ea03 Binary files /dev/null and b/docs/work/track/_img/link-controls-restrictions-field-reference/IC589934.png differ diff --git a/docs/work/track/_img/link-controls-restrictions-field-reference/IC673344.png b/docs/work/track/_img/link-controls-restrictions-field-reference/IC673344.png new file mode 100644 index 00000000000..c6ac31b38e2 Binary files /dev/null and b/docs/work/track/_img/link-controls-restrictions-field-reference/IC673344.png differ diff --git a/docs/work/track/_img/link-controls-restrictions-field-reference/IC674469.png b/docs/work/track/_img/link-controls-restrictions-field-reference/IC674469.png new file mode 100644 index 00000000000..53f050302cc Binary files /dev/null and b/docs/work/track/_img/link-controls-restrictions-field-reference/IC674469.png differ diff --git a/docs/work/track/_img/link-git-commit-items.png b/docs/work/track/_img/link-git-commit-items.png new file mode 100644 index 00000000000..1b84965efd3 Binary files /dev/null and b/docs/work/track/_img/link-git-commit-items.png differ diff --git a/docs/work/track/_img/link-tracking-artifact-to-artifact-link-types.png b/docs/work/track/_img/link-tracking-artifact-to-artifact-link-types.png new file mode 100644 index 00000000000..2b286fbb397 Binary files /dev/null and b/docs/work/track/_img/link-tracking-artifact-to-artifact-link-types.png differ diff --git a/docs/work/track/_img/link-tracking-work-item-link-types.png b/docs/work/track/_img/link-tracking-work-item-link-types.png new file mode 100644 index 00000000000..b51f558c3df Binary files /dev/null and b/docs/work/track/_img/link-tracking-work-item-link-types.png differ diff --git a/docs/work/track/_img/link-tracking-work-item-test-case-link-types.png b/docs/work/track/_img/link-tracking-work-item-test-case-link-types.png new file mode 100644 index 00000000000..abda18e7d7c Binary files /dev/null and b/docs/work/track/_img/link-tracking-work-item-test-case-link-types.png differ diff --git a/docs/work/track/_img/link-tracking-work-item-to-model-diagrams-link-types.png b/docs/work/track/_img/link-tracking-work-item-to-model-diagrams-link-types.png new file mode 100644 index 00000000000..1749f69e1a2 Binary files /dev/null and b/docs/work/track/_img/link-tracking-work-item-to-model-diagrams-link-types.png differ diff --git a/docs/work/track/_img/link-tracking-work-item-to-url-link-types.png b/docs/work/track/_img/link-tracking-work-item-to-url-link-types.png new file mode 100644 index 00000000000..2466336865b Binary files /dev/null and b/docs/work/track/_img/link-tracking-work-item-to-url-link-types.png differ diff --git a/docs/work/track/_img/link-work-items-new-form-control.png b/docs/work/track/_img/link-work-items-new-form-control.png new file mode 100644 index 00000000000..8377d8a37d4 Binary files /dev/null and b/docs/work/track/_img/link-work-items-new-form-control.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/affected-by-cmmi.png b/docs/work/track/_img/link-work-items-support-traceability/affected-by-cmmi.png new file mode 100644 index 00000000000..835170e338d Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/affected-by-cmmi.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/affects-cmmi.png b/docs/work/track/_img/link-work-items-support-traceability/affects-cmmi.png new file mode 100644 index 00000000000..1c512c03724 Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/affects-cmmi.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/child-tree-forward.png b/docs/work/track/_img/link-work-items-support-traceability/child-tree-forward.png new file mode 100644 index 00000000000..066e90b105a Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/child-tree-forward.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/duplicate-of-tree-reverse.png b/docs/work/track/_img/link-work-items-support-traceability/duplicate-of-tree-reverse.png new file mode 100644 index 00000000000..fa0afc585be Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/duplicate-of-tree-reverse.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/duplicate-tree-forward.png b/docs/work/track/_img/link-work-items-support-traceability/duplicate-tree-forward.png new file mode 100644 index 00000000000..e9b96f1ef01 Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/duplicate-tree-forward.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/parent-tree-reverse.png b/docs/work/track/_img/link-work-items-support-traceability/parent-tree-reverse.png new file mode 100644 index 00000000000..f089f012fc3 Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/parent-tree-reverse.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/predecessor-dependency-reverse.png b/docs/work/track/_img/link-work-items-support-traceability/predecessor-dependency-reverse.png new file mode 100644 index 00000000000..157dc3e4601 Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/predecessor-dependency-reverse.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/related-network.png b/docs/work/track/_img/link-work-items-support-traceability/related-network.png new file mode 100644 index 00000000000..1fe9257f256 Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/related-network.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/successor-dependency-forward.png b/docs/work/track/_img/link-work-items-support-traceability/successor-dependency-forward.png new file mode 100644 index 00000000000..258391a9978 Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/successor-dependency-forward.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/tested-by-dependency-forward.png b/docs/work/track/_img/link-work-items-support-traceability/tested-by-dependency-forward.png new file mode 100644 index 00000000000..258391a9978 Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/tested-by-dependency-forward.png differ diff --git a/docs/work/track/_img/link-work-items-support-traceability/tests-dependency-reverse.png b/docs/work/track/_img/link-work-items-support-traceability/tests-dependency-reverse.png new file mode 100644 index 00000000000..699343f9e06 Binary files /dev/null and b/docs/work/track/_img/link-work-items-support-traceability/tests-dependency-reverse.png differ diff --git a/docs/work/track/_img/organize-queries-drop-down-menu-old-exp.png b/docs/work/track/_img/organize-queries-drop-down-menu-old-exp.png new file mode 100644 index 00000000000..d7120b053b9 Binary files /dev/null and b/docs/work/track/_img/organize-queries-drop-down-menu-old-exp.png differ diff --git a/docs/work/track/_img/organize-queries-drop-down-menu.png b/docs/work/track/_img/organize-queries-drop-down-menu.png new file mode 100644 index 00000000000..76d65fd2f15 Binary files /dev/null and b/docs/work/track/_img/organize-queries-drop-down-menu.png differ diff --git a/docs/work/track/_img/personal/ALM_AN_CustomAlerts.png b/docs/work/track/_img/personal/ALM_AN_CustomAlerts.png new file mode 100644 index 00000000000..1b59d8d8983 Binary files /dev/null and b/docs/work/track/_img/personal/ALM_AN_CustomAlerts.png differ diff --git a/docs/work/track/_img/personal/ALM_AN_DefiningAlerts.png b/docs/work/track/_img/personal/ALM_AN_DefiningAlerts.png new file mode 100644 index 00000000000..5d4808be116 Binary files /dev/null and b/docs/work/track/_img/personal/ALM_AN_DefiningAlerts.png differ diff --git a/docs/work/track/_img/personal/ALM_AN_Email.png b/docs/work/track/_img/personal/ALM_AN_Email.png new file mode 100644 index 00000000000..6a20818cdb2 Binary files /dev/null and b/docs/work/track/_img/personal/ALM_AN_Email.png differ diff --git a/docs/work/track/_img/personal/ALM_AN_ManageAlerts.png b/docs/work/track/_img/personal/ALM_AN_ManageAlerts.png new file mode 100644 index 00000000000..c9112c86bf7 Binary files /dev/null and b/docs/work/track/_img/personal/ALM_AN_ManageAlerts.png differ diff --git a/docs/work/track/_img/personal/ALM_AN_Options.png b/docs/work/track/_img/personal/ALM_AN_Options.png new file mode 100644 index 00000000000..b26ecb11136 Binary files /dev/null and b/docs/work/track/_img/personal/ALM_AN_Options.png differ diff --git a/docs/work/track/_img/personal/ALM_AN_Templates.png b/docs/work/track/_img/personal/ALM_AN_Templates.png new file mode 100644 index 00000000000..0e80f563707 Binary files /dev/null and b/docs/work/track/_img/personal/ALM_AN_Templates.png differ diff --git a/docs/work/track/_img/productivity/_img/ALM_PRD_CodeSearch.png b/docs/work/track/_img/productivity/_img/ALM_PRD_CodeSearch.png new file mode 100644 index 00000000000..4ed5be9d4e4 Binary files /dev/null and b/docs/work/track/_img/productivity/_img/ALM_PRD_CodeSearch.png differ diff --git a/docs/work/track/_img/productivity/_img/ALM_PRD_ID_PR.png b/docs/work/track/_img/productivity/_img/ALM_PRD_ID_PR.png new file mode 100644 index 00000000000..68b5f3a905e Binary files /dev/null and b/docs/work/track/_img/productivity/_img/ALM_PRD_ID_PR.png differ diff --git a/docs/work/track/_img/productivity/_img/ALM_PRD_SearchWorkItems.png b/docs/work/track/_img/productivity/_img/ALM_PRD_SearchWorkItems.png new file mode 100644 index 00000000000..39e6d4ed5ea Binary files /dev/null and b/docs/work/track/_img/productivity/_img/ALM_PRD_SearchWorkItems.png differ diff --git a/docs/work/track/_img/productivity/_img/mail-to-at-mention-user.png b/docs/work/track/_img/productivity/_img/mail-to-at-mention-user.png new file mode 100644 index 00000000000..8d5278fdf23 Binary files /dev/null and b/docs/work/track/_img/productivity/_img/mail-to-at-mention-user.png differ diff --git a/docs/work/track/_img/productivity/_img/prod-tips-backlogs-key-shortcuts.png b/docs/work/track/_img/productivity/_img/prod-tips-backlogs-key-shortcuts.png new file mode 100644 index 00000000000..cc38be0854c Binary files /dev/null and b/docs/work/track/_img/productivity/_img/prod-tips-backlogs-key-shortcuts.png differ diff --git a/docs/work/track/_img/productivity/_img/prod-tips-code-key-shortcuts.png b/docs/work/track/_img/productivity/_img/prod-tips-code-key-shortcuts.png new file mode 100644 index 00000000000..f36d63b7af5 Binary files /dev/null and b/docs/work/track/_img/productivity/_img/prod-tips-code-key-shortcuts.png differ diff --git a/docs/work/track/_img/productivity/_img/prod-tips-global-key-shortcuts.png b/docs/work/track/_img/productivity/_img/prod-tips-global-key-shortcuts.png new file mode 100644 index 00000000000..20e92683d5a Binary files /dev/null and b/docs/work/track/_img/productivity/_img/prod-tips-global-key-shortcuts.png differ diff --git a/docs/work/track/_img/q-by-closed-time-period.png b/docs/work/track/_img/q-by-closed-time-period.png new file mode 100644 index 00000000000..b78e394926f Binary files /dev/null and b/docs/work/track/_img/q-by-closed-time-period.png differ diff --git a/docs/work/track/_img/q-by-date-last-30-days.png b/docs/work/track/_img/q-by-date-last-30-days.png new file mode 100644 index 00000000000..e8265d2736c Binary files /dev/null and b/docs/work/track/_img/q-by-date-last-30-days.png differ diff --git a/docs/work/track/_img/q-by-done-current-iteration.png b/docs/work/track/_img/q-by-done-current-iteration.png new file mode 100644 index 00000000000..41897d3b391 Binary files /dev/null and b/docs/work/track/_img/q-by-done-current-iteration.png differ diff --git a/docs/work/track/_img/q-by-resolved-today.png b/docs/work/track/_img/q-by-resolved-today.png new file mode 100644 index 00000000000..6e8c1b78772 Binary files /dev/null and b/docs/work/track/_img/q-by-resolved-today.png differ diff --git a/docs/work/track/_img/q-by-specific-date.png b/docs/work/track/_img/q-by-specific-date.png new file mode 100644 index 00000000000..7b9f04eacb2 Binary files /dev/null and b/docs/work/track/_img/q-by-specific-date.png differ diff --git a/docs/work/track/_img/q-by-state-changed-within-last-week.png b/docs/work/track/_img/q-by-state-changed-within-last-week.png new file mode 100644 index 00000000000..82a1d6f7e97 Binary files /dev/null and b/docs/work/track/_img/q-by-state-changed-within-last-week.png differ diff --git a/docs/work/track/_img/queries-all-filter.png b/docs/work/track/_img/queries-all-filter.png new file mode 100644 index 00000000000..00763e40764 Binary files /dev/null and b/docs/work/track/_img/queries-all-filter.png differ diff --git a/docs/work/track/_img/queries-favorite-picker.png b/docs/work/track/_img/queries-favorite-picker.png new file mode 100644 index 00000000000..ea4fd2793d0 Binary files /dev/null and b/docs/work/track/_img/queries-favorite-picker.png differ diff --git a/docs/work/track/_img/queries-favorites-pivot.png b/docs/work/track/_img/queries-favorites-pivot.png new file mode 100644 index 00000000000..dad9271c5bb Binary files /dev/null and b/docs/work/track/_img/queries-favorites-pivot.png differ diff --git a/docs/work/track/_img/queries-triage.png b/docs/work/track/_img/queries-triage.png new file mode 100644 index 00000000000..6a7b35a8111 Binary files /dev/null and b/docs/work/track/_img/queries-triage.png differ diff --git a/docs/work/track/_img/query-active-bugs-editor-vso.png b/docs/work/track/_img/query-active-bugs-editor-vso.png new file mode 100644 index 00000000000..42d12663ede Binary files /dev/null and b/docs/work/track/_img/query-active-bugs-editor-vso.png differ diff --git a/docs/work/track/_img/query-build-integration-bugs-linked-test-cases.png b/docs/work/track/_img/query-build-integration-bugs-linked-test-cases.png new file mode 100644 index 00000000000..8e507f07a41 Binary files /dev/null and b/docs/work/track/_img/query-build-integration-bugs-linked-test-cases.png differ diff --git a/docs/work/track/_img/query-by-date-example.png b/docs/work/track/_img/query-by-date-example.png new file mode 100644 index 00000000000..cec1612b63f Binary files /dev/null and b/docs/work/track/_img/query-by-date-example.png differ diff --git a/docs/work/track/_img/query-effort-active-bugs-count-summary.png b/docs/work/track/_img/query-effort-active-bugs-count-summary.png new file mode 100644 index 00000000000..194ef2f1d2b Binary files /dev/null and b/docs/work/track/_img/query-effort-active-bugs-count-summary.png differ diff --git a/docs/work/track/_img/query-effort-config-chart-count-bugs-area-state-pivot-chart.png b/docs/work/track/_img/query-effort-config-chart-count-bugs-area-state-pivot-chart.png new file mode 100644 index 00000000000..fa6c0142344 Binary files /dev/null and b/docs/work/track/_img/query-effort-config-chart-count-bugs-area-state-pivot-chart.png differ diff --git a/docs/work/track/_img/query-effort-config-chart-count-bugs-state-pivot-chart.png b/docs/work/track/_img/query-effort-config-chart-count-bugs-state-pivot-chart.png new file mode 100644 index 00000000000..d79fdf233ca Binary files /dev/null and b/docs/work/track/_img/query-effort-config-chart-count-bugs-state-pivot-chart.png differ diff --git a/docs/work/track/_img/query-effort-config-chart-sum-story-points-burnup.png b/docs/work/track/_img/query-effort-config-chart-sum-story-points-burnup.png new file mode 100644 index 00000000000..af2258b36c5 Binary files /dev/null and b/docs/work/track/_img/query-effort-config-chart-sum-story-points-burnup.png differ diff --git a/docs/work/track/_img/query-effort-config-chart-sum-story-points-iteration.png b/docs/work/track/_img/query-effort-config-chart-sum-story-points-iteration.png new file mode 100644 index 00000000000..b92b2592924 Binary files /dev/null and b/docs/work/track/_img/query-effort-config-chart-sum-story-points-iteration.png differ diff --git a/docs/work/track/_img/query-effort-sum-story-points-active-closed.png b/docs/work/track/_img/query-effort-sum-story-points-active-closed.png new file mode 100644 index 00000000000..a826f1cc625 Binary files /dev/null and b/docs/work/track/_img/query-effort-sum-story-points-active-closed.png differ diff --git a/docs/work/track/_img/query-effort-sum-story-points-iteration.png b/docs/work/track/_img/query-effort-sum-story-points-iteration.png new file mode 100644 index 00000000000..a31699c3479 Binary files /dev/null and b/docs/work/track/_img/query-effort-sum-story-points-iteration.png differ diff --git a/docs/work/track/_img/query-effort-tasks-bugs-list.png b/docs/work/track/_img/query-effort-tasks-bugs-list.png new file mode 100644 index 00000000000..937999f0fb5 Binary files /dev/null and b/docs/work/track/_img/query-effort-tasks-bugs-list.png differ diff --git a/docs/work/track/_img/query-fields-operators-values-variables/IC425364.png b/docs/work/track/_img/query-fields-operators-values-variables/IC425364.png new file mode 100644 index 00000000000..423ce33cd19 Binary files /dev/null and b/docs/work/track/_img/query-fields-operators-values-variables/IC425364.png differ diff --git a/docs/work/track/_img/query-fields-operators-values-variables/IC425365.png b/docs/work/track/_img/query-fields-operators-values-variables/IC425365.png new file mode 100644 index 00000000000..d77f34ea343 Binary files /dev/null and b/docs/work/track/_img/query-fields-operators-values-variables/IC425365.png differ diff --git a/docs/work/track/_img/query-fields-operators-values-variables/IC588311.png b/docs/work/track/_img/query-fields-operators-values-variables/IC588311.png new file mode 100644 index 00000000000..1f3777f948f Binary files /dev/null and b/docs/work/track/_img/query-fields-operators-values-variables/IC588311.png differ diff --git a/docs/work/track/_img/query-fields-operators-values-variables/IC588312.png b/docs/work/track/_img/query-fields-operators-values-variables/IC588312.png new file mode 100644 index 00000000000..d0f7a28b615 Binary files /dev/null and b/docs/work/track/_img/query-fields-operators-values-variables/IC588312.png differ diff --git a/docs/work/track/_img/query-fields-operators-values-variables/IC588313.png b/docs/work/track/_img/query-fields-operators-values-variables/IC588313.png new file mode 100644 index 00000000000..faa42872515 Binary files /dev/null and b/docs/work/track/_img/query-fields-operators-values-variables/IC588313.png differ diff --git a/docs/work/track/_img/query-fields-operators-values-variables/IC588314.png b/docs/work/track/_img/query-fields-operators-values-variables/IC588314.png new file mode 100644 index 00000000000..34f1a2bdd75 Binary files /dev/null and b/docs/work/track/_img/query-fields-operators-values-variables/IC588314.png differ diff --git a/docs/work/track/_img/query-kanban-fields.png b/docs/work/track/_img/query-kanban-fields.png new file mode 100644 index 00000000000..4a87f7670bc Binary files /dev/null and b/docs/work/track/_img/query-kanban-fields.png differ diff --git a/docs/work/track/_img/query-link-attach-all-items-tree-query.png b/docs/work/track/_img/query-link-attach-all-items-tree-query.png new file mode 100644 index 00000000000..24b576a4acf Binary files /dev/null and b/docs/work/track/_img/query-link-attach-all-items-tree-query.png differ diff --git a/docs/work/track/_img/query-reactivated-items.png b/docs/work/track/_img/query-reactivated-items.png new file mode 100644 index 00000000000..30a55203e91 Binary files /dev/null and b/docs/work/track/_img/query-reactivated-items.png differ diff --git a/docs/work/track/_img/query-results-with-tags-listed.png b/docs/work/track/_img/query-results-with-tags-listed.png new file mode 100644 index 00000000000..dabc5bb0d25 Binary files /dev/null and b/docs/work/track/_img/query-results-with-tags-listed.png differ diff --git a/docs/work/track/_img/query-using-at-current-iteration-macro.png b/docs/work/track/_img/query-using-at-current-iteration-macro.png new file mode 100644 index 00000000000..e639d3657ea Binary files /dev/null and b/docs/work/track/_img/query-using-at-current-iteration-macro.png differ diff --git a/docs/work/track/_img/rich-text-ui-te.png b/docs/work/track/_img/rich-text-ui-te.png new file mode 100644 index 00000000000..697a03b76fe Binary files /dev/null and b/docs/work/track/_img/rich-text-ui-te.png differ diff --git a/docs/work/track/_img/rich-text-ui-team-services.png b/docs/work/track/_img/rich-text-ui-team-services.png new file mode 100644 index 00000000000..85192c1a963 Binary files /dev/null and b/docs/work/track/_img/rich-text-ui-team-services.png differ diff --git a/docs/work/track/_img/rich-text-ui-web-portal.png b/docs/work/track/_img/rich-text-ui-web-portal.png new file mode 100644 index 00000000000..61d56b023ce Binary files /dev/null and b/docs/work/track/_img/rich-text-ui-web-portal.png differ diff --git a/docs/work/track/_img/set-alerts-from-profile-menu.png b/docs/work/track/_img/set-alerts-from-profile-menu.png new file mode 100644 index 00000000000..e8562d1ef26 Binary files /dev/null and b/docs/work/track/_img/set-alerts-from-profile-menu.png differ diff --git a/docs/work/track/_img/set-permissions-deny-for-query.png b/docs/work/track/_img/set-permissions-deny-for-query.png new file mode 100644 index 00000000000..25ec32114c2 Binary files /dev/null and b/docs/work/track/_img/set-permissions-deny-for-query.png differ diff --git a/docs/work/track/_img/set-permissions-query-folder-security.png b/docs/work/track/_img/set-permissions-query-folder-security.png new file mode 100644 index 00000000000..4e6777d2cd6 Binary files /dev/null and b/docs/work/track/_img/set-permissions-query-folder-security.png differ diff --git a/docs/work/track/_img/set-permissions-triage-folder-dialog.png b/docs/work/track/_img/set-permissions-triage-folder-dialog.png new file mode 100644 index 00000000000..a610254f55f Binary files /dev/null and b/docs/work/track/_img/set-permissions-triage-folder-dialog.png differ diff --git a/docs/work/track/_img/set-query-perm-new-folder.png b/docs/work/track/_img/set-query-perm-new-folder.png new file mode 100644 index 00000000000..de0c39d21f4 Binary files /dev/null and b/docs/work/track/_img/set-query-perm-new-folder.png differ diff --git a/docs/work/track/_img/set-query-perm-security-menu-option.png b/docs/work/track/_img/set-query-perm-security-menu-option.png new file mode 100644 index 00000000000..11abca20f6d Binary files /dev/null and b/docs/work/track/_img/set-query-perm-security-menu-option.png differ diff --git a/docs/work/track/_img/share-plans-attachment-controls-tfs.png b/docs/work/track/_img/share-plans-attachment-controls-tfs.png new file mode 100644 index 00000000000..91486b3bd85 Binary files /dev/null and b/docs/work/track/_img/share-plans-attachment-controls-tfs.png differ diff --git a/docs/work/track/_img/share-plans-attachment-menu-options.png b/docs/work/track/_img/share-plans-attachment-menu-options.png new file mode 100644 index 00000000000..757f4f161a6 Binary files /dev/null and b/docs/work/track/_img/share-plans-attachment-menu-options.png differ diff --git a/docs/work/track/_img/share-plans-attachment-tab-team-explorer.png b/docs/work/track/_img/share-plans-attachment-tab-team-explorer.png new file mode 100644 index 00000000000..22096dbb425 Binary files /dev/null and b/docs/work/track/_img/share-plans-attachment-tab-team-explorer.png differ diff --git a/docs/work/track/_img/share-plans-attachment-tab-vsts.png b/docs/work/track/_img/share-plans-attachment-tab-vsts.png new file mode 100644 index 00000000000..a06506c66a9 Binary files /dev/null and b/docs/work/track/_img/share-plans-attachment-tab-vsts.png differ diff --git a/docs/work/track/_img/share-plans-attachments-tfs-web-portal-tools.png b/docs/work/track/_img/share-plans-attachments-tfs-web-portal-tools.png new file mode 100644 index 00000000000..9f0b9fd01d2 Binary files /dev/null and b/docs/work/track/_img/share-plans-attachments-tfs-web-portal-tools.png differ diff --git a/docs/work/track/_img/share-plans-copy-URL-wi-eclipse.png b/docs/work/track/_img/share-plans-copy-URL-wi-eclipse.png new file mode 100644 index 00000000000..341dc68cc31 Binary files /dev/null and b/docs/work/track/_img/share-plans-copy-URL-wi-eclipse.png differ diff --git a/docs/work/track/_img/share-plans-copy-URL-wi-tfs.png b/docs/work/track/_img/share-plans-copy-URL-wi-tfs.png new file mode 100644 index 00000000000..0eceae56592 Binary files /dev/null and b/docs/work/track/_img/share-plans-copy-URL-wi-tfs.png differ diff --git a/docs/work/track/_img/share-plans-email-release-definition-send.png b/docs/work/track/_img/share-plans-email-release-definition-send.png new file mode 100644 index 00000000000..c5deba3223a Binary files /dev/null and b/docs/work/track/_img/share-plans-email-release-definition-send.png differ diff --git a/docs/work/track/_img/share-plans-email-release-definition.png b/docs/work/track/_img/share-plans-email-release-definition.png new file mode 100644 index 00000000000..b696bb97746 Binary files /dev/null and b/docs/work/track/_img/share-plans-email-release-definition.png differ diff --git a/docs/work/track/_img/share-plans-email-selected-work-items-tfs-15.png b/docs/work/track/_img/share-plans-email-selected-work-items-tfs-15.png new file mode 100644 index 00000000000..e7a6416737d Binary files /dev/null and b/docs/work/track/_img/share-plans-email-selected-work-items-tfs-15.png differ diff --git a/docs/work/track/_img/share-plans-email-summary-list-ts.png b/docs/work/track/_img/share-plans-email-summary-list-ts.png new file mode 100644 index 00000000000..830bfd4197a Binary files /dev/null and b/docs/work/track/_img/share-plans-email-summary-list-ts.png differ diff --git a/docs/work/track/_img/share-plans-email-summary-list-web-portal.png b/docs/work/track/_img/share-plans-email-summary-list-web-portal.png new file mode 100644 index 00000000000..66fe3d14a20 Binary files /dev/null and b/docs/work/track/_img/share-plans-email-summary-list-web-portal.png differ diff --git a/docs/work/track/_img/share-plans-email-work-item-list-eclipse.png b/docs/work/track/_img/share-plans-email-work-item-list-eclipse.png new file mode 100644 index 00000000000..ee0c27f5e23 Binary files /dev/null and b/docs/work/track/_img/share-plans-email-work-item-list-eclipse.png differ diff --git a/docs/work/track/_img/share-plans-email-work-item-list.png b/docs/work/track/_img/share-plans-email-work-item-list.png new file mode 100644 index 00000000000..dcc5653d94b Binary files /dev/null and b/docs/work/track/_img/share-plans-email-work-item-list.png differ diff --git a/docs/work/track/_img/share-plans-email-work-item-te.png b/docs/work/track/_img/share-plans-email-work-item-te.png new file mode 100644 index 00000000000..f3e9a33abc7 Binary files /dev/null and b/docs/work/track/_img/share-plans-email-work-item-te.png differ diff --git a/docs/work/track/_img/share-plans-email-work-item-tfs.png b/docs/work/track/_img/share-plans-email-work-item-tfs.png new file mode 100644 index 00000000000..11b7dd35bb5 Binary files /dev/null and b/docs/work/track/_img/share-plans-email-work-item-tfs.png differ diff --git a/docs/work/track/_img/share-plans-email-work-item-ts.png b/docs/work/track/_img/share-plans-email-work-item-ts.png new file mode 100644 index 00000000000..e046c429e3a Binary files /dev/null and b/docs/work/track/_img/share-plans-email-work-item-ts.png differ diff --git a/docs/work/track/_img/share-plans-print-work-item-details.png b/docs/work/track/_img/share-plans-print-work-item-details.png new file mode 100644 index 00000000000..a9287acb7e5 Binary files /dev/null and b/docs/work/track/_img/share-plans-print-work-item-details.png differ diff --git a/docs/work/track/_img/share-plans-storyboard-tfs-web-tab.png b/docs/work/track/_img/share-plans-storyboard-tfs-web-tab.png new file mode 100644 index 00000000000..5b6baf6e2a5 Binary files /dev/null and b/docs/work/track/_img/share-plans-storyboard-tfs-web-tab.png differ diff --git a/docs/work/track/_img/share-plans-storyboard-vs-tab.png b/docs/work/track/_img/share-plans-storyboard-vs-tab.png new file mode 100644 index 00000000000..bfea38158c7 Binary files /dev/null and b/docs/work/track/_img/share-plans-storyboard-vs-tab.png differ diff --git a/docs/work/track/_img/share-plans-storyboard-vsts-menu.png b/docs/work/track/_img/share-plans-storyboard-vsts-menu.png new file mode 100644 index 00000000000..858fd4d9bba Binary files /dev/null and b/docs/work/track/_img/share-plans-storyboard-vsts-menu.png differ diff --git a/docs/work/track/_img/state-change-history-diagram.png b/docs/work/track/_img/state-change-history-diagram.png new file mode 100644 index 00000000000..f3c01255783 Binary files /dev/null and b/docs/work/track/_img/state-change-history-diagram.png differ diff --git a/docs/work/track/_img/tags-bulk-add.png b/docs/work/track/_img/tags-bulk-add.png new file mode 100644 index 00000000000..7a8354cd2f0 Binary files /dev/null and b/docs/work/track/_img/tags-bulk-add.png differ diff --git a/docs/work/track/_img/team/ALM_AN_ManageTeamAlerts.png b/docs/work/track/_img/team/ALM_AN_ManageTeamAlerts.png new file mode 100644 index 00000000000..6068633e678 Binary files /dev/null and b/docs/work/track/_img/team/ALM_AN_ManageTeamAlerts.png differ diff --git a/docs/work/track/_img/team/ALM_AN_TeamAlertTypes.png b/docs/work/track/_img/team/ALM_AN_TeamAlertTypes.png new file mode 100644 index 00000000000..55fe333cd80 Binary files /dev/null and b/docs/work/track/_img/team/ALM_AN_TeamAlertTypes.png differ diff --git a/docs/work/track/_img/team/ALM_AN_TeamNewAlerts.png b/docs/work/track/_img/team/ALM_AN_TeamNewAlerts.png new file mode 100644 index 00000000000..bd613d3772c Binary files /dev/null and b/docs/work/track/_img/team/ALM_AN_TeamNewAlerts.png differ diff --git a/docs/work/track/_img/team/ALM_AN_TeamSelector.png b/docs/work/track/_img/team/ALM_AN_TeamSelector.png new file mode 100644 index 00000000000..5ca402cfe37 Binary files /dev/null and b/docs/work/track/_img/team/ALM_AN_TeamSelector.png differ diff --git a/docs/work/track/_img/unassign-a-tag.png b/docs/work/track/_img/unassign-a-tag.png new file mode 100644 index 00000000000..0c32e607220 Binary files /dev/null and b/docs/work/track/_img/unassign-a-tag.png differ diff --git a/docs/work/track/_img/using-queries-active-bugs-ts.png b/docs/work/track/_img/using-queries-active-bugs-ts.png new file mode 100644 index 00000000000..166cd1f7eb4 Binary files /dev/null and b/docs/work/track/_img/using-queries-active-bugs-ts.png differ diff --git a/docs/work/track/_img/using-queries-new-query-ts.png b/docs/work/track/_img/using-queries-new-query-ts.png new file mode 100644 index 00000000000..ad64b6cc2bc Binary files /dev/null and b/docs/work/track/_img/using-queries-new-query-ts.png differ diff --git a/docs/work/track/_img/using-queries-query-across-all-projects-tfs.png b/docs/work/track/_img/using-queries-query-across-all-projects-tfs.png new file mode 100644 index 00000000000..3ddd3050b40 Binary files /dev/null and b/docs/work/track/_img/using-queries-query-across-all-projects-tfs.png differ diff --git a/docs/work/track/_img/using-queries-query-across-projects.png b/docs/work/track/_img/using-queries-query-across-projects.png new file mode 100644 index 00000000000..7d983b5bb64 Binary files /dev/null and b/docs/work/track/_img/using-queries-query-across-projects.png differ diff --git a/docs/work/track/_img/using-queries-query-across-select-projects.png b/docs/work/track/_img/using-queries-query-across-select-projects.png new file mode 100644 index 00000000000..ce97661c5ce Binary files /dev/null and b/docs/work/track/_img/using-queries-query-across-select-projects.png differ diff --git a/docs/work/track/_img/using-queries-search-box-ts.png b/docs/work/track/_img/using-queries-search-box-ts.png new file mode 100644 index 00000000000..541af65a548 Binary files /dev/null and b/docs/work/track/_img/using-queries-search-box-ts.png differ diff --git a/docs/work/track/_img/using-queries-search-box.png b/docs/work/track/_img/using-queries-search-box.png new file mode 100644 index 00000000000..2a3fc8e9ce1 Binary files /dev/null and b/docs/work/track/_img/using-queries-search-box.png differ diff --git a/docs/work/track/add-tags-to-work-items.md b/docs/work/track/add-tags-to-work-items.md new file mode 100644 index 00000000000..efd8de66964 --- /dev/null +++ b/docs/work/track/add-tags-to-work-items.md @@ -0,0 +1,322 @@ +--- +title: Add tags to work items +description: Add tags to work items to categorize and filter lists when working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 79A08F31-BB8A-48BD-AD17-477EE0B76BC7 +ms.manager: douge +ms.author: kaelli +ms.date: 06/02/2017 +--- + +# Add tags to work items to categorize and filter lists and boards + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +Tagging work items helps you quickly filter the product backlog or a work +item query by categories that you define. +A tag corresponds to a one or two keyword phrase that you define and that +supports your needs to filter a backlog or query, or define a query. + +You can add and modify tags from the web portal, from Team Explorer plug-in for Visual Studio. Also, you can open a query in [Excel](../office/bulk-add-modify-work-items-excel.md) to perform bulk modifications of tags. + + +>[!NOTE] +><b>Feature availability: </b>Some features are only available from the web portal or a Team Foundation client such as Visual Studio or the Eclipse plug-in, Team Explorer Everywhere (TEE).   + + +<table width="100%" > +<tr valign="bottom"> +<th width="27%">Task +</th> +<th width="12%">VSTS +</th> +<th width="12%"><br/>TFS 2015<br/>Web portal +</th> +<th width="12%">TFS 2015.1<br/>Web portal +</th> +<th width="12%">TFS 2017<br/>Web portal +</th> +<th width="16%">Visual Studio &<br/>Eclipse plug-in <sup>1</sup> +</th> +<th width="7%">Excel <sup>2</sup> +</th> +</tr> + +<tr> +<td>[Add and assign tags](#assign) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> + +</tr> + +<tr> +<td>[Bulk add or remove tags](#bulk-modify) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td> +</td> +<td> +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td> +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> + +</tr> + + + +<tr> +<td>[Query based on tags](#query) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> + +</tr> + + + +<tr> +<td>[Show tags in your backlogs or query results](#show-tags) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> + +</tr> + + +<tr> +<td>[Filter lists or query results](#filter) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td> +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> + +</tr> + + +<tr> +<td>[Filter the Kanban board](../how-to/filter-backlog-or-board.md) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td> +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td> +</td> +<td> +</td> + +</tr> + +<tr> +<td>[Update work items ](#assign) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> + +</tr> + + +<tr> +<td>Sort query results using tags +</td> +<td> +</td> +<td> +</td> +<td> +</td> +<td> +</td> +<td> +</td> +<td>![checkmark](../_img/icons/checkmark.png) +</td> + +</tr> + +</table> + +1. Team Explorer Everywhere is the Eclipse plug-in which supports connection to VSTS and TFS. See [Visual Studio Team Explorer Everywhere (TEE)](https://java.visualstudio.com/Docs/tools/eclipse). +2. Requires the TFS Office Integration add-in. See [Bulk add or modify work items with Excel](../office/bulk-add-modify-work-items-excel.md) for details. + + + +By default, all Contributors are granted permissions to create and modify tags. + + +<a id="assign"></a> +## Add and assign tags + +1. From the web portal, open a work item and add a tag. Click Add and type your keyword. Or, select from the list of previously assigned tags. + + ![Add one or more tags to a work item](_img/add-tags-to-work-items-vso-tfs.png) + +2. To add several tags at one time, type a comma between tags. Tags are case sensitive. + + Tags that appear in the tag bar are already assigned to the work item. To unassign a tag, simply choose the x on the tag,![Delete a tag assigned to a work item](_img/unassign-a-tag.png). + + +<a id="bulk-modify"></a> +##Bulk add or remove tags + +You can bulk update work items to add or remove tags. + +>[!NOTE] +><b>Feature availability: </b>The bulk modify tags feature from the web portal is available from VSTS and TFS 2017 or later versions.    + +- When connecting to VSTS and TFS 2017: Bulk modify tags in the same way as you [bulk modify other fields using the web portal](../backlogs/bulk-modify-work-items.md#tags), or use [Excel](../office/bulk-add-modify-work-items-excel.md). + + ![Edit work items - Add tags](_img/tags-bulk-add.png) + +- When connecting to TFS 2015 or earlier versions: [Use Excel to bulk modify tags](../office/bulk-add-modify-work-items-excel.md). + +Bulk modify of tags from the Visual Studio client isn't supported. + +<a id="query"></a> +##Query for work items based on tags + + +>[!NOTE] +><b>Feature availability: </b>To add tags to a query clause, you must work from VSTS and TFS 2013.2 or later versions.   + +To query work items based on tags, add a clause for each tag you want to use to support your query. + +For example, here we query for all work items that are tagged either ```performance``` or ```security```. + +<img src="_img/add-tags-query.png" alt="Query based on tags" style="border: 2px solid #C3C3C3;" /> + +<a id="show-tags"></a> +##Show tags in your backlog or query results + +1. Open Column Options to add the Tags field to the product backlog or a work item query. + + ![Add Tags to the selected columns to display](_img/add-tags-to-query-results.png) + +2. All tags that are assigned to the listed work items appear. + + ![View with Tags column added](_img/query-results-with-tags-listed.png) + + +<a id="filter"></a> +## Filter lists using tags +From the web portal, you can filter backlogs, boards, and query results. + +1. Turn on filtering and choose a tag. + + ![Choose a tag to filter the list by that tag](_img/filter-a-list-using-tags.png) + + The list refreshes. Only those work items with the selected tag are displayed. Filtering the list disables add-a-backlog-item panel, stack ranking, and forecasting. + + ![Filtered list disables other features](_img/filtered-list-based-on-tags.png) + +2. To apply a sub-filter, choose another tag. You filter successively by choosing from the set of tags that appear in the filter tag bar. To start your filter process over, choose All to show all tags. + +3. To show all items, choose All or choose the Tag filter image on backlog and queries pages filter icon to turn filtering off. + +##Related notes + +Tags are a shared resource, they're associated with a team project and not a team. If your team project contains multiple teams, all teams will add to and work from the same set of tags. +- [Use the query editor to list and manage queries](using-queries.md) +- [Show tags on cards](../customize/customize-cards.md) +- [Bulk modify work items from the web portal](../backlogs/bulk-modify-work-items.md) +- [Bulk modify work items from Excel](../office/bulk-add-modify-work-items-excel.md) + +See also the [Visual Studio Marketplace](https://marketplace.visualstudio.com/search?term=tags&target=VS&category=All%20categories&vsVersion=&sortBy=Relevance) for extensions that support managing tags. + +###Filter backlogs or boards using tags + +If you've added tags to your backlog or board items, you can filter your backlog list using the ![tag filter icon](../_img/icons/tag_filter_icon.png) tag filter. + +To filter the Kanban board using tags, make sure that you first [customize cards to Show tags](../customize/customize-cards.md). + +>[!NOTE] +><b>Feature availability: </b>This feature is currently supported only on the Kanban board from VSTS or the web portal for TFS 2015 Update 1 or later version. + +To learn more about filtering, see [Filter your backlog or board](../how-to/filter-backlog-or-board.md). + +###Limits on number of tags +While no hard limit exists, creating more than 100K tags for a team project collection can negatively impact performance. Also, the auto-complete dropdown menu for the tag control displays a maximum of 200 tags. When more than 200 tags are defined, begin typing to cause the tag control to display relevant tags. + +You can't assign more than 100 tags to a work item or you'll receive the following message: + + TF401243: Failed to save work item because too many new tags were added to the work item. + +Simply save the work item with the tags (100 or less) that you've added, and then you can add more tags. + +Limit queries to fewer than 25 tags. More than that and the query will likely time out. + +###Delete or remove tags + +You can't delete a tag itself. However, if you delete a tag from all work items to which it's currently assigned, the system will delete the tag. The system automatically deletes unassigned tags after 3 days of disuse. + +If you misspell a tag, don't assign the misspelled tag to any work item and the system will automatically delete it within 3 days. + +###Add tags to the default column view on the product backlog + +Modify the ProcessConfiguration file to include ```System.Tags``` in the set of fields to display. See Process configuration XML element reference. + +###Add or modify tags using an API +You can use ```WorkItem.Fields``` or Work Item Field Explorer, provided with the Process Editor, to determine if the Tags field is editable (IsEditable). To acquire the Process Editor: +> - For TFS 2017 and later versions, [install the TFS Process Template editor from the Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=KarthikBalasubramanianMSFT.TFSProcessTemplateEditor). +> - For TFS 2015 and earlier versions, install [TFS Power Tools](https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.MicrosoftVisualStudioTeamFoundationServer2015Power). diff --git a/docs/work/track/adhoc-vs-managed-queries.md b/docs/work/track/adhoc-vs-managed-queries.md new file mode 100644 index 00000000000..fc8044b5c61 --- /dev/null +++ b/docs/work/track/adhoc-vs-managed-queries.md @@ -0,0 +1,52 @@ +--- +title: Adhoc vs managed queries +description: Use adhoc or built-in search/managed queries to find work items using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 5A96317D-5A10-44CB-B2F9-F166BBAE916B +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 06/02/2017 +--- + +# Adhoc vs managed work item queries + +<b>VSTS | TFS 2018 | TFS 2017</b> + + +>[!NOTE] +>**Feature availability:**  The Work item search feature is available from VSTS. + +You have two ways to perform work item searches: adhoc and managed. You perform adhoc queries using the work item search box (shown below), whereas you perform managed queries using the built-in search function available from the Work hub, Queries page. + +![Search Work Items Text Box](_img/using-queries-search-box-ts.png) + +**Use adhoc queries when you want to:** +- Find a specific work item using its ID or a keyword +- Find one or more work items across all team projects in a fast, flexible manner +- Perform full text search across all work item fields +- Review work items assigned to a specific team member +- Search against specific work item fields to quickly narrow down a list of work items +- Determine what key words will support a managed search + + >[!NOTE] + >With Work item search, searches are performed against a full-text search engine that has indexed all work item fields. + +**Use managed queries when you want to:** +- Review or triage a group of work items +- Perform bulk updates on several work items such as change Assign To, Iteration Path, or more +- Review parent-child or dependent links among work items +- Create a status or trend chart from a flat list query +- Create a list of work items that you'll export to [Excel](../office/bulk-add-modify-work-items-excel.md) or [Project](../office/create-your-backlog-tasks-using-project.md) (requires that you have installed the [Team Foundation Server Standalone Office Integration 2015 (free)](https://www.visualstudio.com/downloads/#team-foundation-server-office-integration-2015-update-3-1) plug-in) + + +## Work item search box context +Note that with Work item search, the work item search box is repurposed to support adhoc queries. In order to initiate a managed search, you need to open the **Work>Queries** page. + + +##Resources + +- [Use the query editor to create managed queries](using-queries.md) +- [Code and work item search](../../search/index.md) + \ No newline at end of file diff --git a/docs/work/track/alerts-and-notifications.md b/docs/work/track/alerts-and-notifications.md new file mode 100644 index 00000000000..8f8353e91ab --- /dev/null +++ b/docs/work/track/alerts-and-notifications.md @@ -0,0 +1,126 @@ +--- +title: Set alerts, get notified when changes occur +description: Set alerts to get email notifications when changes occur to source code, git, work items, and builds when using Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 50bac275-61fd-4ded-9c41-ec4c2412160e +ms.manager: douge +ms.author: kaelli +ms.date: 03/16/2017 +--- + +# Set alerts, get notified when changes occur + +<b>TFS 2017 | TFS 2015 | TFS 2013</b> + + +>[!IMPORTANT] +>This topic describes how to manage alerts or email notifications when working from the web portal for an on-premises TFS. If you work in VSTS and TFS 2017.1 or later version, see [Manage your notifications](../../notifications/manage-personal-notifications.md) and [Manage notifications for a team](../../collaborate/manage-team-notifications.md). + + +As changes occur to work items, code reviews, source control files, and builds, you can receive email notifications for alerts that you define. For example, you can set an alert to be notified whenever a bug that you opened is resolved or a work item is assigned to you. You can set personal alerts or [team alerts](#team-alerts). + +## Set alerts just for yourself + +1. Open alerts management (My alerts from your profile menu). If you don't see this option, then you must [configure an SMTP server to support TFS](../../tfs-server/admin/setup-customize-alerts.md). + + ![Manage individual alerts from the web portal](_img/set-alerts-from-profile-menu.png) + +2. Enter one or more email addresses. Separate addresses with a semi-colon. + + ![Set email address for alerts](_img/personal/ALM_AN_Email.png) + +3. Select the check box for each alert of interest. **My work items** and **My build** refer to work items and builds that you created. + + ![Manage TFS alerts](_img/personal/ALM_AN_ManageAlerts.png) + + Alert templates reference a customizable query. + + The following alert types appear when your team project is provisioned with Git for version control: + - **A commit is pushed to this team project** + - **A pull request I've participated in is created or updated** + - **A build quality changes** + + <blockquote style="font-size: 13px"><b>Tip:  </b>When you clear an alert, you also clear all email addresses defined for the alert. </blockquote>   + +4. For more options, open custom alerts and choose one of the options available. Also, you can open a basic alert and modify its settings, such as changing the email format from HTML to plain text or SOAP. + + ![Open custom alerts](_img/personal/ALM_AN_CustomAlerts.png) + +5. Define alert filters in the same way you define query filters. + + ![Fill out the custom alerts form](_img/personal/ALM_AN_DefiningAlerts.png) + + For a list of available fields, see [Index of work item fields](../guidance/work-item-field.md). + +6. For even more options, open the Select New Alert Template. + + ![Open all alert options](_img/personal/ALM_AN_Options.png) + +7. Choose from one of the several alert types listed. + + ![Choose an alert type from all options listed](_img/personal/ALM_AN_Templates.png) + + +<a id="team-alerts"></a> + +## Set alerts for your team +1. If you're not a team administrator, [get added as one](../scale/add-team-administrator.md). You need to be a team, project, or project collection administrator to create team alerts. + +2. Open team alerts from Manage TFS Alerts. + + ![Open team alerts](_img/team/ALM_AN_ManageTeamAlerts.png) + +3. Expand the team and open Select New Alert Template. + + ![Work Item Alerts link on the Alerts admin page](_img/team/ALM_AN_TeamNewAlerts.png) + +4. Choose an alert type. + + ![Choose an alert type for the team](_img/team/ALM_AN_TeamAlertTypes.png) + +5. Notice how the subscriber is set to the team context. Alerts are sent to each team member based on their preferred email address, which they set through their profile. + + ![Subscriber set to team context](_img/team/ALM_AN_TeamSelector.png) + + <blockquote style="font-size: 13px"><b>Tip:  </b>For the team context, the alert query interprets the **@Me** variable as anyone who is a member of the team. </blockquote>   + +You can set filters for as many as 20 different alert types, specify the email addresses for yourself and other team members, and select the delivery format. Also, you can set team alerts to keep all team members notified of important changes. + +##Administer alerts for a team project +To administer alerts for a team project, you must be a member of the Project Collection Administrator or Team Foundation Administrator groups. To get added, see [Add an administrator](../../security/set-project-collection-level-permissions.md). If you're not a member of these groups, you won't see the options available for administering alerts. + +As an administrator, you can view, create, edit, and delete alerts for team members and teams. + +###View alerts set for a team project + +* From the web admin page for a team project, open the Alerts tab and expand All alerts. + + ![Expand All Alerts](_img/administer/ALM_AN_Administer.png) + +###Find alerts set for a team member or team + +* Choose the name of the team member from the drop down list, or type the name in the search box. + + ![Choose the team member whose alerts you want to edit](_img/administer/ALM_AN_TeamMember.png) + + ![Alerts listed for selected team member](_img/administer/ALM_AN_Result.png) + +###Create, edit, or delete an alert +1. To create an alert for a team member, first find the alerts defined for that subscriber as described in the previous step. Then, create an alert in the same way that a team member creates alerts. + + ![Create an alert for a team member](_img/administer/ALM_AN_AlertsForMember.png) + + To create an alert for a team, first find the alerts assigned to that team, and then create an alert in the same way. The team should appear in the Subscriber field. + +2. To edit or delete an alert, open it from the short cut menu. + + ![Open or delete an alert for a team member](_img/administer/ALM_AN_Shortcut.png) + +##Related notes + +- [Follow a work item or pull request](../../collaborate/follow-work-items.md) +- [Manage your notifications](../../notifications/manage-personal-notifications.md) (VSTS, TFS 2017.1) +- [Manage notifications for a team](../../collaborate/manage-team-notifications.md) (VSTS, TFS 2017.1) +- [Account preferences](../../accounts/account-preferences.md) +- [Work effectively from your account hub](../../connect/account-home-pages.md) (VSTS, TFS 2017.1) diff --git a/docs/work/track/breadcrumb/toc.yml b/docs/work/track/breadcrumb/toc.yml new file mode 100644 index 00000000000..43287126ff3 --- /dev/null +++ b/docs/work/track/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Agile + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=agile + items: + - name: Queries + tocHref: /vsts/ + topicHref: /vsts/work/track/index \ No newline at end of file diff --git a/docs/work/track/build-test-integration.md b/docs/work/track/build-test-integration.md new file mode 100644 index 00000000000..74dbaefdf93 --- /dev/null +++ b/docs/work/track/build-test-integration.md @@ -0,0 +1,282 @@ +--- +title: Build and test integration queries +description: Track work by creating queries based on build and test integration fields in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 6e162a82-c98b-4c94-862c-addcdcbc182d +ms.manager: douge +ms.author: kaelli +ms.date: 04/14/2017 +--- + + +# Query based on build and test integration fields + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Build and test integration work item fields support the following actions: +- Associate bugs with the builds where they were found or fixed +- Query for bugs associated with a build +- Mark test cases as either manual or automated, and store information to support automated test cases +- For test cases and shared steps, define the action and validation steps and the data that are used to perform tests. + +<!--- include information on limits of querying by test case --> + + +### Useful filters +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="50%">Filter for</th> +<th width="50%">Include these query clauses</th> +</tr> +<tr> +<td>Automated test cases +</td> +<td> +        ```Work Item Type _ = _ Test Case``` +```And Automation Status _ = _ Automated``` +</td> +</tr> + +<tr> +<td>Query-based test suites +</td> +<td> +        ```Work Item Type _ = _ Test Suite``` +```And Test Suite Type _ = _ Query Based``` +</td> +</tr> + + +<tr> +<td>Requirement-based test suites +</td> +<td> +        ```Work Item Type _ = _ Test Suite``` +```And Test Suite Type _ = _ Requirement Based``` +</td> +</tr> + +</tbody> +</table> + +<a id="linked-bugs"/> +##List bugs and the test cases that test them + +Open a new query, set the query type to Work items and direct links. Filter for bugs in the top-level and add the filter for Test Cases in the linked work items filter. + +<img src="_img/query-build-integration-bugs-linked-test-cases.png" alt="List bugs and the test cases that test them" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +>You can't construct a query that shows a hierarchical view of Test Plans, Test Suites, and Test Cases. These items aren't linked together using parent-child link types. You can [view the hierarchy through the Test Plans page of the Test hub](../../manual-test/getting-started/create-a-test-plan.md). + +## Build and test data fields + +The following table describes the fields that are defined in one or more of the test WITs. For information about data types and field attributes, see [Define and modify work item fields](../reference/define-modify-work-item-fields.md). + +To customize a field or pick list, see [Add or modify a field to support queries, reports, and workflow](../customize/add-modify-field.md). + + +<table width="100%"> +<thead> +<tr> + <th width="17%">Field name</th> + <th width="66%">Description</th> + <th width="17%">Work item type</th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p>Automation Status<sup> 1</sup></p></td> +<td><p>The status of a test case. You can specify the following values:</p> +<ul> +<li><p><strong>Automated</strong></p></li> +<li><p><strong>Not Automated</strong></p></li> +<li><p><strong>Planned</strong></p></li> +</ul> +<p>To run automated tests, see [Automate a test case in Microsoft Test Manager](https://msdn.microsoft.com/en-us/library/dd380741.aspx).</p> +<p>Reference name=Microsoft.VSTS.TCM.AutomationStatus, Data type=String</p> +</td> +<td>Test Case</td> + +</tr> +<tr> +<td><p>Found In<sup> 2</sup></p></td> +<td><p>Product build number, also known as a revision, in which a bug was found.</p> +<p>Reference name=Microsoft.VSTS.Build.FoundIn, Data type=String</p> +<blockquote> +**Note:** You can also use the **Found in build** link type to link a work item to a build. This link type is available from VSTS and only work with the current build processes (not XAML builds). +</blockquote> +</td> +<td>Bug</td> + +</tr> +<tr> +<td><p>Integration Build<sup> 2</sup></p></td> +<td><p>Product build number that incorporates the code or fixes a bug.</p> +<p>Reference name=Microsoft.VSTS.Build.IntegrationBuild, Data type=String</p> +<blockquote> +**Note:** You can also use the **Integrated in build** link type to link a work item to a build. This link type is available from VSTS and only work with the current build processes (not XAML builds). +</blockquote> +</td> +<td>All</td> +</tr> + +<tr> +<td><p>Issue</p></td> +<td><p>Indicates that the Shared Steps is associated with an expected result. Allowed values are <strong>Yes</strong> and <strong>No</strong>. </p> +<p>Reference name=Microsoft.VSTS.Common.Issue, Data type=String</p></td> +<td>Shared Steps</td> +</tr> +<tr> +<td><p>Parameters<sup> 3</sup></p></td> +<td><p>Contains the parameters to use when running a manual test. </p> +<p>Microsoft.VSTS.TCM.Parameters, Data type=HTML</p></td> +<td>Shared Parameters, Shared Steps, Test Case</td> +</tr> +<tr> +<td><p>Steps</p></td> +<td><p>The action and validation steps that are required to perform the test.</p> +<p>Microsoft.VSTS.TCM.Steps, Data type=TestStepsControl</p></td> +<td>Shared Steps, Test Case</td> +</tr> +<tr> +<td><p>System Info</p></td> +<td><p>Information about the software and system configuration that is relevant to the test.</p> +<p>Microsoft.VSTS.TCM.SystemInfo, Data type=HTML</p></td> +<td>Bug, Feedback Response</td> +</tr> +<tr> + <td> +Repro Steps (or Steps to reproduce) + </td> + <td> + <p>The steps that are required to reproduce unexpected behavior. Capture enough information so that other team members can understand the full impact of the problem as well as whether they have fixed the bug. This includes actions taken to find or reproduce the bug and expected behavior. +</p> + <p>Reference name=Microsoft.VSTS.TCM.ReproSteps, Data type=HTML</p> + </td> +<td>Bug</td> +</tr> + +<tr> +<td><p>Test Suite Type<sup> 1,4</sup></p></td> +<td><p>The test suite category. Allowed values are:</p> +<ul> +<li><p><strong>Query Based</strong>: Use to group together test cases that have a particular characteristic - for example, all the tests that have Priority=1. The suite will automatically include every test case that is returned by the query that you define.</p></li> +<li><p><strong>Static</strong>: Use to group together test cases designed to track the test status of backlog items. Each test case that you add to a requirement-based test suite is automatically linked to the backlog item.</p></li> +<li><p><strong>Requirement Based</strong>: Use to group together test cases with any characteristics or test suites.</p></li> +</ul> +<p>For more information, see [Create a test plan](../../manual-test/getting-started/create-a-test-plan.md).</p> + + <p>Reference name=Microsoft.VSTS.TCM.TestSuiteType, Data type=String</p> + </td> +<td><p>Test Suite</p></td> +</tr> +</tbody> +</table> + +**Notes** +1. Do not customize the pick list for these fields. The system accepts only those values listed. +2. By adding a `GLOBALLIST` element to the `FIELD` definition, you can provide a drop-down menu of builds that users can choose from. To learn how, see [Fields that support integration with test, build, and version control](https://msdn.microsoft.com/en-us/library/ms194965.aspx). +3. Requires TFS 2013.2 or TFS 2013.3 to be installed on the application-tier server and existing team projects to be updated to support Shared Parameters. To learn more, see Configure features after a TFS upgrade. +4. Requires TFS 2013.3 to be installed on the application-tier server and existing team projects to be updated to support Test Plan and Test Suite. + +## Additional fields + +The following fields do not appear on work item forms, but these fields are tracked for test cases or test suites. You can use some of these fields to filter queries and create reports. (None of these fields are added to the data warehouse nor indexed.) + + + +<table width="100%"> +<thead> +<tr> + <th width="17%">Field name</th> + <th width="66%">Description</th> + <th width="17%">Work item type</th> +</tr> +</thead> +<tbody valign="top"> +<tr> +<td><p>Automated Test Storage</p></td> +<td><p>The assembly that contains the test that automates the test case.</p> + <p>Reference name=Microsoft.VSTS.TCM.AutomatedTestStorage, Data type=String</p></td> +<td><p>Test Case</p></td> +</tr> +<tr> +<td><p>Automated Test Type</p></td> +<td><p>The type of test that automates the test case.</p> +<p>Reference name=Microsoft.VSTS.TCM.AutomatedTestType, Data type=String</p> +</td> +<td>Test Case</td> +</tr> + +<tr> +<td><p>AutomatedTestId</p></td> +<td><p>The ID of the test that automates the test case. </p> +<p>Reference name=Microsoft.VSTS.TCM.AutomatedTestId, Data type=String</p></td> +<td>Test Case</td> + +</tr> +<tr> +<td><p>AutomatedTestName</p></td> +<td><p>The name of the test that is used to automate the test case.</p> +<p>Reference name=Microsoft.VSTS.TCM.AutomatedTestName, Data type=String</p></td> +<td><p>Test Case</p></td> + +</tr> +<tr> +<td><p>LocalDataSource</p></td> +<td><p>The local data source that supports the test. </p> +<p>Reference name=Microsoft.VSTS.TCM.LocalDataSource, Data type=HTML</p></td> +<td><p>Test Case</p></td> + +</tr> +<tr> +<td><p>Query Text</p></td> +<td><p>Field used to capture the query defined for a Query-based suite type.</p> +<p>Reference name=Microsoft.VSTS.TCM.QueryText, Data type=PlainText</p></td> +<td><p>Test Suite</p></td> +</tr> +<tr> +<td><p>Test Suite Audit <sup> 1</sup></p></td> +<td><p>Tracks additional operations performed when modifying a test suite, for example: adding tests to a test suite or changing configurations. This field can be viewed through the History tab or through a separate query. There will be a consolidated history view, including changes performed to work items field and changes resulting from related artifacts such as test points and configurations.</p> +<p>Reference name=Microsoft.VSTS.TCM.TestSuiteAudit, Data type=PlainText</p></td> +<td>Test Suite</td> +</tr> + +<tr> +<td><p>Test Suite Type ID <sup>1, 2</sup></p></td> +<td><p>A system assigned value that corresponds to the test suite category and only applicable to test suites. Assigned values are:</p> +<ul> +<li><p><strong>1</strong> (Static)</p></li> +<li><p><strong>2</strong> (Query-based)</p></li> +<li><p><strong>3</strong> (Requirement- based)</p></li> +</ul> +<p>Reference name=Microsoft.VSTS.TCM.TestSuiteTypeId, Data type=Integer</p></td> +<td>Test Suite</td> +</tr> +</tbody> +</table> + +**Notes** +1. Requires TFS 2013.3 to be installed on the application-tier server and existing team projects to be updated to support Test Plan and Test Suite. +2. Do not customize the pick list for these fields. The system accepts only those values listed. + +## Related notes + +- [Work item field index](../guidance/work-item-field.md) +- [Drive Git development from a work item](../backlogs/connect-work-items-to-git-dev-ops.md) +- [Link work items to support traceability and manage dependencies](link-work-items-support-traceability.md) +- [Link and attachment queries](linking-attachments.md) + +###Availability of test work item types (TFS) + +Test Manager and the test work item types (WITs) use the following fields to track test plans, progress, and results. The availability of the WITs is based on the version of TFS installed on your application-tier. To learn more about using these WITs, see [Create a test plan](../../manual-test/getting-started/create-a-test-plan.md). + +|TFS 2013.0|TFS 2013.2|TFS 2013.3 and later versions| +|---|---|---| +|<ul><li>Bug</li><li>Shared Steps</li><li>Test Case</li></ul>|<ul><li>Bug</li><li>Shared Parameters</li><li>Shared Steps</li><li>Test Case</li></ul>|<ul><li>Bug</li><li>Shared Parameters</li><li>Shared Steps</li><li>Test Case</li><li>Test Plan</li><li>Test Suite</li></ul>| + +To learn more about upgrading an existing team project to get WITs that your team project currently doesn't have, see [Configure features after an upgrade](../customize/configure-features-after-upgrade.md). + diff --git a/docs/work/track/example-queries.md b/docs/work/track/example-queries.md new file mode 100644 index 00000000000..60634fd8a93 --- /dev/null +++ b/docs/work/track/example-queries.md @@ -0,0 +1,81 @@ +--- +title: Create managed queries +description: Track work by creating queries to list items using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-wit +ms.assetid: 285a014e-89bf-4e5f-bebf-11094e93d796 +ms.topic: get-started-article +ms.manager: douge +ms.author: kaelli +ms.date: 04/06/2017 +--- + + +# Create managed queries to list, update, or chart work items + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +A query lists a filtered set of work items. You can initiate a query using the the [query editor](using-queries.md). Optionally, you can perform an adhoc search using the [search box](search-box-queries.md). + +With queries, you can perform these functions: + +- List items to perform bulk updates, assign or reassign +- Review work that's in progress or recently closed +- Triage work (set priority, review, update) +- Create a chart and add it to a dashboard +- Create a chart to get a count of items or sum a field +- Create a chart that shows a burndown or burnup over time +- View a tree of parent-child related work items + +For the mechanics of constructing and saving queries, see [Use the query editor to list and manage queries](using-queries.md). For specific examples, click one of the following links. + +## Getting started + +If you are looking for a specific work item, use the adhoc search box. If you want to generate a list of work items to triage, update, chart, or share with others, then use a managed query. + +<!---[Organize and run managed queries](organize-view-run-queries.md)--> +- [Search box queries](search-box-queries.md) +- [Query editor](using-queries.md) +- [Query operators & macros](query-operators-variables.md) + + +<a id="examples"/> +## Example queries + +*You can list work items based on the following criteria...* + +> [!div class="mx-tdBreakAll"] +> |Assignment and<br/>other account-specific fields |<br/>Keywords or phrases |Work item counts<br/>and numeric fields | +> |-------------|----------|---------| +> |- [Active items assigned to me](query-by-workflow-changes.md#me)<br/>- [Closed items that were assigned to me](query-by-workflow-changes.md#me)<br/>- [Active items assigned to my team](query-by-workflow-changes.md#me)<br/>- [Items I've modified in the last 30 days](query-by-workflow-changes.md#me)<br/>- [Items I closed](query-by-workflow-changes.md#workflow-change-who)<br/>- [Items I resolved in the last week](query-by-workflow-changes.md#workflow-change-who) |- [Items containing a keyword/phrase](titles-ids-descriptions.md#keyword)<br/>- [Items not containing a keyword/phrase](titles-ids-descriptions.md#keyword)<br/>- [Items with an undefined field](titles-ids-descriptions.md#undefined-value)<br/>- [Items that belong to a category](titles-ids-descriptions.md#category)|- [Count of active bugs per developer](query-numeric.md#counts)<br/>- [Count of bugs by area and states](query-numeric.md#counts)<br/>- [Sum of story points and their status](query-numeric.md#effort)<br/>- [Burnup chart of user stories for a sprint](query-numeric.md#effort)<br/>- [Sum of remaining work per developer](query-numeric.md#work) | + +> [!div class="mx-tdBreakAll"] +> |History and revision changes |Date field or current iteration |State, reason, or workflow changes | +> |-------------|----------|---------| +> |- [History contains a specific word](history-and-auditing.md)<br/>- [History doesn't contain a specific word](history-and-auditing.md)<br/>- [Reactivated items](history-and-auditing.md)<br/>- [Items closed within a time period](history-and-auditing.md)<br/>- [Items you've been associated with](history-and-auditing.md) |- [Items created in the last 30 days](query-by-date-or-current-iteration.md)<br/>- [Items modified on a specific date](query-by-date-or-current-iteration.md)<br/>- [Items resolved today](query-by-date-or-current-iteration.md)<br/>- [Items closed within a specific time period](query-by-date-or-current-iteration.md) <br/>- [Items whose updated status](query-by-date-or-current-iteration.md)<br/>- [Items closed in the current sprint](query-by-date-or-current-iteration.md) |- [Resolved user stories](query-by-workflow-changes.md#workflow-change)<br/>- [Items I resolved in the last week](query-by-workflow-changes.md#workflow-change) <br/>- - [Items failing acceptance tests](query-by-workflow-changes.md#workflow-change)<br/>- [Items closed within the last 15 days](query-by-workflow-changes.md#workflow-change)<br/>- [Items removed as they're duplicate](query-by-workflow-changes.md)<br/>- [Items closed and then reactivated](query-by-workflow-changes.md#reactivated)<br/>- [Stories in the Code/Doing column](query-by-workflow-changes.md#kanban_query_fields)<br/>- [Items in the Expedite swimlane](query-by-workflow-changes.md#kanban_query_fields)<br/>- [Items in a swimlane containing "Test"](query-by-workflow-changes.md#kanban_query_fields) | + +> [!div class="mx-tdBreakAll"] +> |Links and attachments |Tags |Build and Test fields | +> |-------------|----------|---------| +> |- [All child items of a single epic ](linking-attachments.md)<br/>- [All related items](linking-attachments.md)<br/>- [Items with one or more attachments](linking-attachments.md)<br/>- [Items with 2 or more hyperlinks ](linking-attachments.md) <br/>- [Items containing external links](linking-attachments.md) |- [Items containing a specific tag](add-tags-to-work-items.md)<br/>- [Items that don't contain a specific tag](add-tags-to-work-items.md)<br/>- [Items that contain two or more tags ](add-tags-to-work-items.md) |- [List bugs and linked test cases](build-test-integration.md#linked-bugs)<br/>- [List automated test cases](build-test-integration.md)<br/>- [List requirement-based test suites](build-test-integration.md)<br/>- [List query-based test suites](build-test-integration.md) | + +## Related notes + +- [Work item field index](../guidance/work-item-field.md) +- [Query permissions](set-query-permissions.md) + +To add a custom field to support your query needs, see [Customize your work tracking experience](../customize/customize-work.md). + +To learn about query charts and widgets, see these topics: +- [Chart a flat-list query](../../report/charts.md) +- [Chart for work items widget](../../report/widget-catalog.md#chart-wit-widget) +- [Query results widget](../../report/widget-catalog.md#query-results-widget) +- [Query tile widget](../../report/widget-catalog.md#query-tile-widget) + + +### Query within or across team projects +By default, you query within a single team project. However, using the query editor, you can [query across team projects](using-queries.md#across-projects). + +### Visualize related work and other objects + +You can view related work items and object within a work item form by installing the [Work item visualization extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.WorkItemVisualization) available from the Visual Studio Marketplace. diff --git a/docs/work/track/history-and-auditing.md b/docs/work/track/history-and-auditing.md new file mode 100644 index 00000000000..be56eca9de4 --- /dev/null +++ b/docs/work/track/history-and-auditing.md @@ -0,0 +1,288 @@ +--- +title: History and auditing +description: Track changes and use tools to support audit requirements when working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: A5AC271A-8DF0-40AD-9867-1B1E9E5B1FE9 +ms.manager: douge +ms.author: kaelli +ms.date: 04/14/2017 +--- + +# History & auditing + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +The history of a work item tells you who opened the item, what changed, and why. This information helps you track how an item changes over time. When you enter information in the history field, provide as much information as possible to help the next work item owner understand what has happened and what they have to do. + +You can use either the web portal or Team Explorer to view the history of a work item or find work items based on the contents of the ```History``` field. When you perform a search on the contents of the ```History``` field, it returns only work items that have changes recorded in that field. That is, it doesn't register changes that were made to text in other fields. + + +<a id="team-services" /> +#### VSTS, TFS 2017 + +<img src="_img/hist-audit-query-ts-bt.png" alt="Search for items based on words contained in the History field" style="border: 2px solid #C3C3C3;" /> + +#### TFS 2015, TFS 2013 + +<img src="_img/ALM_HA_HistoryQuery.png" alt="Search for items based on words contained in the History field" style="border: 2px solid #C3C3C3;" /> + +<a id="tee-query-history" /> +<a id="team-explorer" /> +#### Visual Studio, Team Explorer, Team Explorer Everywhere +<img src="_img/hist-audit-query-team-explorer.png" alt="Search for items based on words contained in the History field" style="border: 2px solid #C3C3C3;" /> + + +##List items based on the contents of the History field + +You use the query editor to add the History field to a [query clause](using-queries.md). + +You can filter for work items by the date on which they were changed or for a specific time period. If you limit the scope of your query, it can help with performance by only returning those results that fit the date range that you want to include. + +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="50%">Filter for</th> +<th width="50%">Include these query clauses</th> +</tr> +<tr> +<td>Items whose History field contains the word "reproducible" +</td> +<td> +```History _ Contains Words _ reproducible``` +</td> +</tr> +<tr> +<td>Items whose History field doesn't contain the word "beta" +</td> +<td> +```History _ Does Not Contain Words _ beta``` +</td> +</tr> +<tr> +<td> +Items that contain the phrase "stack traces" and were closed but reactivated +</td> +<td> +            ```History _ Contains Words _ stack traces``` +```And _ State _ Was Ever _ Closed``` +```And _ State _ <> _ Closed ``` +</td> +</tr> +<tr> +<td> +Items closed within a specified time period +</td> +<td> +            ```State _ = _ Done``` +```And _ Closed Date _ > _ 7/1/2015``` +```And _ Closed Date _ <= _ 7/21/2015``` +</td> +</tr> +<tr> +<td> +Items I've been associated with +</td> +<td> +           ```History _ Contains Words _ MyName``` +```Or _ Assigned To _ Was Ever _ @Me``` +</td> +</tr> +</tbody> +</table> + +### Tips for using the query editor +<ul> +<li>Type the complete word or phrase that is specified in the ```History``` fields of those work items that you want to find.</li> +<li>Enter the full text for the word that you want to search. The History field is indexed for full-text search. If you enter only a partial word, the query will not return work items that contain the full word. For example, if the History field contains the phrase *reproducible behavior* and you search for *repro*, the work item will not be found. However, if you search for the complete word *reproducible*, the work item will be found. You can also search for the string with a wild card, such as ```repro*```. </li> +<li>The query editor ignores common words or stop words as defined in [Configure and Manage Stopwords and Stoplists for Full-Text Search](https://msdn.microsoft.com/library/ms142551.aspx).</li> +<li>On the query editor toolbar, click ![Run query](../_img/icons/run_query.png) or ![Run query](../_img/icons/run_query_te.png) icon and confirm that your query returns expected results.</li> +<li>If you don't receive the results you expect, adjust the word or phrase that you entered, and run the query again.</li> +</ul> + + + +## View the history of work items + +An entry is made to the History field each time a work item is saved. To view the history of changes, open an existing work item, and then choose the ![history tab icon](../_img/icons/icon-history-tab-wi.png) or **History** tab, or for some work item types, choose the **Details** tab. + +<a id="team-services-tab" /> +#### VSTS, TFS 2017 + +<img src="_img/hist-audit-wi-form-vsts-tab.png" alt="View History tab - VSTS" style="border: 2px solid #C3C3C3;" /> + +> [!NOTE] +> The History field is no longer a rich-text field. To annotate the work item history, add to the Description or Discussion fields. + + +<a id="web-portal-explorer-tab" /> +#### TFS 2015, TFS 2013 and Team Explorer +To view only the comments that were added to the log, choose the <b>Discussion Only</b> tab. To view all changes made to the item, choose the <b>All Changes</b> tab, and then choose the <b>show all changes</b> link for a specific date and time. + +<img src="_img/hist-audit-choose-history-tab-tfs.png" alt="View History tab - TFS Web portal, Team Explorer" style="border: 2px solid #C3C3C3;" /> + +If you open the work item from the web portal, you'll see the state change history diagram. To see the entire history of state changes, choose **Show all**. + +<img src="_img/state-change-history-diagram.png" alt="State change history diagram (web portal only)" style="border: 2px solid #C3C3C3;" /> + +The history details shown depend on the platform, version, and client you user. + +<a id="team-services-view" /> +#### VSTS, TFS 2017 + +Click an entry in the left pane to view the details of changes made. + +<img src="_img/hist-audit-wi-form.png" alt="History tab - VSTS" style="border: 2px solid #C3C3C3;" /> + + +<a id="explorer" /> +#### TFS 2015, TFS 2013 and Team Explorer + +To view only the comments that were added to the log, choose the <b>Discussion Only</b> tab. To view all changes made to the item, choose the <b>All Changes</b> tab, and then choose the <b>show all changes</b> link for a specific date and time. + +<img src="_img/ALM_HA_AllChanges.png" alt="View change history" style="border: 2px solid #C3C3C3;" /> + + +## Fields that support history, auditing, and revision tracking + +You can use the following fields to filter queries and create reports. Several of these fields are populated with information as a work item progresses from one state to another. Other fields update when the work item is modified. Some fields don't appear on the work item form, but they are tracked for the WITs listed. + + +<table width="100%"> +<tbody valign="top"> +<tr> + <th width="15%">Field name</th> + <th width="70%">Description</th> + <th width="15%">Work item type</th> +</tr> + +<tr> +<td> +<p>Changed By</p> +</td> +<td> +The name of the team member who modified the work item most recently. + <p>Reference name=System.ChangedBy, Data type=String</p> +</td> +<td>All</td> +</tr> +<tr> + <td> + <p>Change Date</p> + </td> + <td> + <p>The date and time when a work item was modified.</p> + <p>Reference name=System.ChangedDate, Data type=DateTime</p> + </td> +<td>All</td> +</tr> +<tr> + <td> + <p>Closed Date <sup>1</sup> </p> + </td> + <td> + <p>The date and time when a work item was closed.</p> + <p>Reference name=Microsoft.VSTS.Common.ClosedDate, Data type=DateTime</p> + </td> +<td>All</td> +</tr> +<tr> + <td> + <p>Created Date</p> + </td> + <td> + <p>The date and time when a work item was created.</p> + <p>Reference name=System.CreatedDate, Data type=DateTime</p> + </td> +<td>All</td> +</tr> +<tr> +<td>History</td> +<td> +The record of changes that were made to the work item after it was created. Every time that the work item is updated, information is appended to the history, which specifies the date of the change, who made the changes, and which fields were changed. +<p>You can add formatted text to the history field. Once you've saved the work item, you can't alter the history. </p> +<p>The ```History``` field, along with the ```Description```, ```Steps to Repro``` and ```Title``` fields are automatically indexed for full-text search as described in [Query fields, operators, and macros](query-operators-variables.md). </p> + + <p>Reference name=System.History, Data type=History</p> + +</td> +<td> +All +</td> +</tr> +<tr> + <td> + <p>Resolved Date <sup>1</sup> </p> + </td> + <td> + <p>The date and time when the work item was moved into a Resolved state. (Agile, CMMI)</p> + + <p>Reference name=Microsoft.VSTS.Common.ResolvedDate, Data type=DateTime</p> + </td> + <td>Bug + </td> +</tr> + +<tr> +<td> +<p>Rev</p> +</td> +<td> +<p>A number that is assigned to the historical revision of a work item. </p> + <p>Reference name=System.Rev, Data type=Integer</p> +</td> +<td>All</td> +</tr> + + +<tr> + <td> + <p>State Change Date</p> + </td> + <td> + <p>The date and time when the value of the State field changed.</p> + <p>Reference name=Microsoft.VSTS.Common.StateChangeDate, Data type=DateTime</p> + </td> +<td>All</td> +</tr> + +<tr> + <td> +Test Suite Audit + </td> + <td> +Tracks additional operations performed when modifying a test suite, for example: adding tests to a test suite or changing configurations. This field can be viewed through the History tab or through a separate query. There will be a consolidated history view, including changes performed to work items field and changes resulting from related artifacts such as test points and configurations. + + </td> + <td> +Test Suite + </td> +</tr> +</tbody> +</table> + +#### Notes: +1. For these fields to be defined for a WIT, they must be included in the ```WORKFLOW``` section of the WIT definition. For example, this syntax is included within the ```FIELDS``` definition when transitioning to a Resolved state: + + ``` + <FIELD refname="Microsoft.VSTS.Common.ResolvedDate"> + <SERVERDEFAULT from="clock" /> + </FIELD> + ``` + +## Related notes +To learn more about creating and saving queries, see also: + +- [Query editor](using-queries.md) +- [Query fields, operators, and macros](query-operators-variables.md) +- [Query by date or current iteration](query-by-date-or-current-iteration.md) + + +### Getting the history programmatically +See the following resources for ways to extract history information programmatically. + +- [Discussion history](https://www.visualstudio.com/integrate/api/wit/history) +- [Work item updates](https://www.visualstudio.com/integrate/api/wit/updates) +- [Work item revisions](https://www.visualstudio.com/integrate/api/wit/revisions) + + diff --git a/docs/work/track/index.md b/docs/work/track/index.md new file mode 100644 index 00000000000..522f5513bcf --- /dev/null +++ b/docs/work/track/index.md @@ -0,0 +1,72 @@ +--- +title: Queries index | VSTS & TFS +description: Use queries to find and list work items, create flat-based query charts in VSTS and and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 07/26/2017 +--- + +# Queries + +List bugs, user stories, or other work items based on field criteria you specify. Then you can review with your team, triage, or perform bulk updates. + +<!--- +## Overview + * name: Individual versus shared queries + href: my-shared-queries.md + * name: View and run a query (IN PROGRESS) + href: view-run-query.md +* [Adhoc vs managed queries](adhoc-vs-managed-queries.md) +* name: Organize and run managed queries (IN PROGRESS) + href: organize-view-run-queries.md + name: Triage work items (IN PROGRESS) + href: triage-work-items.md +--> + +## 5-Minute Quickstarts + +- [View and run a query (In Progress)](view-run-query.md) +- [Perform an adhoc search](search-box-queries.md) + +## Step-by-Step Tutorials + +- [Organize queries (In Progress)](organize-view-run-queries.md) +- [Triage work items (In Progress)](triage-work-items.md) +- [Edit a query](using-queries.md) + +## Samples +- [Example search box queries](search-box-queries.md) +- [Query by title, ID, or description](titles-ids-descriptions.md) +- [Query by assignment or workflow changes](query-by-workflow-changes.md) +- [Query by area or iteration path](query-by-area-iteration-path.md) +- [Query by date or current iteration](query-by-date-or-current-iteration.md) +- [Query history](history-and-auditing.md) +- [Query a numeric field](query-numeric.md) +- [Query by pick list value](planning-ranking-priorities.md) +- [Query by build & test integration fields](build-test-integration.md) +- [Query by links or attachments](linking-attachments.md) + + +## How-to Guides +- [Change column options](/vsts/work/how-to/set-column-options?toc=/vsts/work/track/toc.json&bc=/vsts/work/breadcrumb/toc.json) +- [Email/print work items](/vsts/work/how-to/email-work-items?toc=/vsts/work/track/toc.json&bc=/vsts/work/breadcrumb/toc.json) +- [Filter backlogs, boards, & queries](/vsts/work/how-to/filter-backlog-or-board?toc=/vsts/work/track/toc.json&bc=/vsts/work/breadcrumb/toc.json) + + +## Reference +- [Query fields, operators & macros](query-operators-variables.md) +- [Work item field index](/vsts/work/guidance/work-item-field?toc=/vsts/work/track/toc.json&bc=/vsts/work/breadcrumb/toc.json) +- [WIQL syntax](/vsts/reference/wiql-syntax?toc=/vsts/work/track/toc.json&bc=/vsts/work/breadcrumb/toc.json) +- [Permissions and access for work tracking](/vsts/work/permissions-access-work-tracking?toc=/vsts/work/track/toc.json&bc=/vsts/work/breadcrumb/toc.json) + +## Resources +- [Backlogs](../backlogs/index.md) +- [Kanban](../kanban/index.md) +- [Scrum](../scrum/index.md) +- [Work item customization](../customize/index.md) +- [Wiql Editor (Marketplace extension)](https://marketplace.visualstudio.com/items?itemName=ottostreifel.wiql-editor) +- [Enhanced Export (Marketplace extension)](https://marketplace.visualstudio.com/items?itemName=mskold.mskold-enhanced-export) + \ No newline at end of file diff --git a/docs/work/track/link-work-items-support-traceability.md b/docs/work/track/link-work-items-support-traceability.md new file mode 100644 index 00000000000..701aa122a58 --- /dev/null +++ b/docs/work/track/link-work-items-support-traceability.md @@ -0,0 +1,361 @@ +--- +title: Link work items to support traceability | VSTS & TFS +description: Manage dependencies, link work items to other work items, code and build objects, add hyperlinks, and more +ms.prod: vs-devops-alm +ms.technology: vs-devops-wit +ms.assetid: eb47069f-e49b-424d-a674-91cb733f3518 +ms.manager: douge +ms.author: kaelli +ms.date: 04/03/2017 +--- + +# Link work items to support traceability and manage dependencies + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +By linking work items and other objects, you can track related work, dependencies, and changes made over time. All links are defined with a specific link type. For example, you can use Parent/Child links to link work items to support a hierarchical tree structure. Whereas, the Commit and Branch link types support links between work items and commits and branches, respectively. + +In a nutshell, you can: + +- Link work items to other work items +- Link work items to test cases, and test cases to other test items and test results +- Link work items to code-related objects such as branches, commits, pull requests, and more +- Link select git code-related objects to builds +- Link work items to a web address or to a storyboard or a document on a network share +- Link work items to architecture diagrams (requires Visual Studio Enterprise edition). + +Below, you can learn how to link objects and which link types to use. You can link objects from the web portal or Visual Studio Team Explorer. + +>[!NOTE] +><b>Feature availability: </b> Work item forms and features available to you can differ depending on whether you connect to VSTSor an on-premises Team Foundation Server (TFS), and whether you open the form from the web portal or Visual Studio Team Explorer. + +This topic describes the link types available for your use. For details on linking work items, see [Add link to work items](../backlogs/add-link.md). + +<a id="link-work-items"> </a> +## Link work items to other work items + +There are several system link types used to link work items to each other: two tree topology, one dependency topology, and one network as indicated in the table. Tree topology links support nested hierarchies, tree queries, and several reports. Dependent links support tracking tasks that must be completed before others can be started. And, the **Related** link type supports connecting work items that are at the same level. + +<img src="_img/link-tracking-work-item-link-types.png" alt="Work item link types" style="border: 2px solid #C3C3C3;" /> + +All two-way link types are characterized by a *Forward* and *Reverse* name, such as Parent/Child and Duplicate/Duplicate Of. When you link using one of these names, the linked work item is updated to include a link with the corresponding link type. For example, if you add a Parent link to a work item, the linked work item contains a Child link. + +As a quick reference guide, use the following link types as indicated: + +- Use the **Duplicate** link type when two work items have been created that essentially capture the same information; close one of the work items and keep the other one active +- Use the **Parent/Child** link types when you want to break down work items into smaller items—for example, break down features into stories, or stories into tasks +- Use **Predecessor-Successor** link types when you want to track tasks that must be completed before others can be started; this link type is most often used when you plan work using Project +- Use the **Related** link type when the work items being linked are at the same level—such as two user stories that define features that overlap one another—or to link work items that are defined in different team projects or managed by different teams. + +For additional guidance on choosing link types, review the [Link type descriptions and guidance](#link-type-guidance) in the related notes section. + +You can create links from within a work item form, from a work item that appears in a list of query results, in Microsoft Excel, or in Microsoft Project. You can also use any of the client programs for Team Foundation, such as Team Explorer and the web portal, to create links or attach files. + +Also, you can use the context menu in the web portal or Team Explorer. + +> [!NOTE] +> For each work item, you can add a maximum of 5000 links to other work items. + +## Add a link from one work item to another work item + +You can create links between work items by using one of the links control tabs within a work item form. The user interface to link a work item differs based on the platform, version, and client you use. To link several work items to a new or existing item, see [Add link to work items](../backlogs/add-link.md). + + +[!INCLUDE [temp](../_shared/image-differences.md)] + + +### VSTS +<a id="team-services-link" /> + +From the new work item form (available from the web portal of [VSTS and TFS 2017](../process/new-work-item-experience.md)), you can add a link using the **Related Work** section or from the **Links** tab. + +Open a work item and click the ![Add icon](../_img/icons/Action_Add.png) icon to add a link. + +<img src="_img/link-work-items-new-form-control.png" alt="Web portal, work item form, Related work section, " style="border: 2px solid #C3C3C3;" /> + +Choose **Existing item** to link to a work item or other object using any supported link type. Choose **New item** to initiate a link and define a new work item at the same time. For details, see [Add link to work items](../backlogs/add-link.md). + +<img src="../reference/_img/linkscontrol-related-work-menu-options.png" alt="Links control menu of options" style="border: 2px solid #C3C3C3;" /> + +From the **Related Work** or **Links** tab, you can also perform these actions: + +- Open an associated item or object: click the linked item</li> +- Delete a link: highlight it and click the ![delete icon](../_img/icons/delete_icon.png) delete icon</li> + +From a query results page, you can also perform these actions: +- Link selected items to a new work item </li> +- Link selected items to an existing work item </li> + +For details, see [Add link to work items](../backlogs/add-link.md#link).</p> + +<a id="tfs-portal-link" /> +### TFS 2015, TFS 2013 (Web Portal) + +If you connect to the web portal for TFS 2015 or earlier versions, you can link work items to other work items or supported objects from one of the available link tabs. Some work item types have two or more link control tabs. Each tab is designed to support specific types of links and restricts the types of link relationships made. + +Open a work item and click one of the Links tab. From the links control tab you can link to a new or existing work items, open the linked object, or delete a link. + +![Link controls provided in a work item form](../backlogs/_img/work-items-link-controls.png) + + +<a id="team-explorer-link" /> +### Visual Studio, Team Explorer + +If you primarily work in Visual Studio or Team Explorer, and want to link work items, you can do so in a number of ways. Depending on the work item form and customizations that may have been made to your work item form, you may see several Link tabs. Link tabs can be customized to allow or restrict specific link types. + +Open a work item and click the Links tab. From the links control tab you can link to new or existing work items, open the linked object, edit the link type, delete a link, or open the list of links in a query or Excel or Project. + +![Work item form link toolbar controls](_img/IC673344.png) + +### Team Explorer Everwhere** + +Open a work item and click the Links tab. From the links control tab you can link to new or existing work items, delete a link, or open the linked object. + +![Link control options (Team Explorer, Eclipse)](_img/IC775501.png) + +**Link a work item to an existing work item (Team Explorer)** + +From the Query Results view, you can link a work item to a new or existing work item. Click the work item you want to link, open the context menu for that work item and (1) click Link to an Existing Item... (2)Fill out the dialog that appears, (3) click Save, and then (4) Save Results to save the changes made to the work item. + +![Link to an existing work item](_img/IC588289.png) + +## Link or change parent-child links between work items + +These features let you quickly link or change links that use the parent-child link type: + +- To link backlog items to portfolio backlog items or to change the link structure among these items, [use the mapping pane to organize your backlog](../backlogs/organize-backlog.md). +- To create and link tasks to backlog items, [use the sprint backlog page](../scrum/sprint-planning.md); from the web portal you can also drag-and-drop items to change the link structure. +- To indent (![Indent](_img/IC588323.png)), outdent (![Outdent](_img/IC588324.png)), and change the link structure of a tree hierarchy, you can [re-parent and reorder items from a backlog in the web portal](../backlogs/organize-backlog.md#reparent) or use a [tree query in Team Explorer](using-queries.md#tree-query). + +You can also use Excel or Project to change the link structure. See [Bulk add or modify work items with Excel](../office/bulk-add-modify-work-items-excel.md) and [Create your backlog and tasks using Project](../office/create-your-backlog-tasks-using-project.md). + + +## Link test cases, shared steps, and test results + +You can link work items to test cases using the **Tested/Tested By** link types. You use the same link controls you use to link work items to other work items as [described earlier](#link-work-items). + +The following image shows the full set of link types used in linking test management work item types. most links between test management artifacts occur by executing a task from the Test hub or Microsoft Test Manager. + +<img src="_img/link-tracking-work-item-test-case-link-types.png" alt="Link types used to link test objects " style="border: 2px solid #C3C3C3;" /> + +For example, when you add Shared Steps to a Test Case, they are automatically linked using the **Test Case/Shared Steps** link types. See [Share steps between test cases](../../manual-test/mtm/share-steps-between-test-cases.md). + +**Test case work item form (web portal for TFS 2015)** + +![Create shared steps](_img/IC666631.png) + +From the Test hub you can add test plans, test suites, and test cases—which are linked, but not through a specific link type. Also, the test system creates and manages the associations of test results to test cases and test plans. + + +## Link work items, code artifacts, and builds + +As you develop your software, you can capture which code changes and builds support the completion of a work item. In this way, your team can understand what work was done or how a bug was fixed through the audit trail of changes to the code base. The link types used to construct these links—as illustrated in the following image—are: Branch, Build, Changeset, Commit, Found in build, Integrated in build, Pull Request, and Versioned Item. + +<img src="_img/link-tracking-artifact-to-artifact-link-types.png" alt="Artifact-to-artifact link types" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +>The link types, **Found in build** and **Integrated in build** are available from VSTS and only work with the current build processes (not XAML builds). To learn more about using these link types, see [Drive Git development from a work item](../backlogs/connect-work-items-to-git-dev-ops.md). + +You can add a link from the work item to the supported artifacts using the method [described earlier for linking work items](#link-work-items). However, an easier method is to add the work item ID to a commit, pull request, changeset, or other supported Git or TFVC operation at the time you create those items. Also, you can link work items from the Development section within the [new work item form](../process/new-work-item-experience.md). + +## Link work items and Git code development + +The recommended method is to drive development from the work item or add the work item ID when creating branches, commits (git), changesets (TFVC), pull requests (git). + +Git lets you link work items to commits by using the **Commit** link type. You can do this in several ways: + +- In Visual Studio Team Explorer, add work item IDs before you commit your changes + ![Add work item ID or drag items before you commit your changes](_img/link-git-commit-items.png) +- You can use the [git-commit](http://git-scm.com/docs/git-commit) command and include the work item ID in your comment. For example, you apply this comment #35 Catch null exception to your commit. When you push the commit, the system creates a Commit link between the commit and work item #35. +- And, with the new work item form (available from VSTS and TFS 2017), you can [drive your git development from the work item](../backlogs/connect-work-items-to-git-dev-ops.md) as shown in the following image. + + <img src="../backlogs/_img/drive-git-development-dev-section.png" alt="Work item form, Development section" style="border: 2px solid #C3C3C3;" /> + +## Link work item and TFVC code development + +Team Foundation version control (TFVC) lets you link work items to version control changesets or versioned source code files by using the **Changeset** and **Versioned Item** link types. When you check in pending changes or use My Work to check in changes, [work items are automatically linked to your changes](../../tfvc/check-your-work-team-codebase.md). + +<img src="../../tfvc/_img/check-your-work-team-codebase/ic593474.png" alt="Team Explorer, My Work, Pending Changes, check in" style="border: 2px solid #C3C3C3;" /> + + + +<a id="links-attachments"></a> +## Link to a Web site, network share, storyboard, or document + +You can use the Hyperlinks or Storyboard link type to link a work item to a Web site, network share, or document located on a network share. Both of these link types are one-way links. To add links of this type, you can use the same links controls [described earlier for linking work items](#link-work-items). + +For TFS 2015 and earlier versions, select work item types may show a Storyboards tab which you can use to link to Storyboards. + +<img src="_img/link-tracking-work-item-to-url-link-types.png" alt="Artifact-to-artifact link types" style="border: 2px solid #C3C3C3;" /> + +From the **Storyboards** tab, you can link storyboards that you created using PowerPoint Storyboarding or other application. The Storyboards tab and links control is only available from the web and client work item form for TFS 2015. However, you can still use the Storyboard link type from VSTS and the web portal of TFS 2017 and later versions. + +For process templates associated with TFS 2015 and earlier versions, the **Storyboards** tab links control was added to those work item types used to defined requirements, user stories, or features. When you make changes to a linked storyboard, the work item continues to link to the file with the latest changes. + +![Storyboard links control](_img/IC589934.png) + +By using the Storyboard link type, you differentiate the link your adding to specify a storyboard or document that provides work item specifications. Use this link type to provide your team access to the shared file where they can add their comments. You can also link from a Power Point file to VSTSusing this link type as described [Storyboard your ideas using PowerPoint](../office/storyboard-your-ideas-using-powerpoint.md). + + + +## Link work items to architectural diagrams + +You choose the **Model** link type when you want to link a work item to an architectural diagram created using Visual Studio Enterprise. This link type is only available when you work from Visual Studio Enterprise. With this link type, you can track tasks, test cases, bugs, requirements, issues, or other kinds of work that are associated with specific parts of your model. + +<img src="_img/link-tracking-work-item-to-model-diagrams-link-types.png" alt="Model link type links work items to diagrams" style="border: 2px solid #C3C3C3;" /> + +To link a work item to a diagram, open the work item in Visual Studio, choose the **All Links** or **Other Links** tab and choose the **Model** link type. You can also open the linked diagram from the links tab. + +![Open linked model element from a work item](_img/IC588262.png) + +Or, you can link a model element to a work item. See [Link model elements and work items](https://msdn.microsoft.com/library/dd465152.aspx). + + +## Query for linked work items + +To filter items based on hierarchical links, use the **Tree of work items** query type. To filter items based on all link types, use **Work items and direct links**. + +You can search for work items that not only meet criteria for field values but also that are linked to other work items with specific types of links. This kind of query displays a primary set of work items, which meet the field criteria, and a secondary set, which are linked to items in the primary set. + +For query examples, see [Link and attachment queries](linking-attachments.md). + + +> [!NOTE] +> You can't construct a query that shows a hierarchical view of Test Plans, Test Suites, and Test Cases. These items aren't linked together using Parent/Child or any other link type. You can only view the hierarchy through the [Test Plans page of the Test hub](../../manual-test/getting-started/create-a-test-plan.md). + + +<a id="link-type-guidance"></a> +## Link type descriptions and guidance + +Link types you use to link work items are subject to certain restrictions based on their topology. Use the guidance provided in the following table to choose which link type to use based on the types of queries and reports you'll want to create. To learn more about link type restrictions and topologies, see [LinksControlOptions elements](../reference/link-type-element-reference.md#topology). + + +<table> +<tbody valign="top"> +<tr> +<th width="35%">Link type</th> +<th width="65%">Usage</th> + +<tr> +<td>**Affects-Affected by**<br/>(Dependency topology, CMMI only)<br/> +![Affects link type image](_img/link-work-items-support-traceability/affects-cmmi.png) +![Affected by link type image](_img/link-work-items-support-traceability/affected-by-cmmi.png) +</td> +<td> +<p>Use this directional link to create links between any set of work items, but not ones that would create closed loops. Typically used to track change requests made to requirements.</p> +Restrictions and recommendations: +<ul> +<li><p>You can link a change request to only one requirement using Affects. You can link requirements to as many child change requests as needed using Affected by.</p> +</li> +<li><p>Only use Affects-Affected by links to link work items in the same team project. This action is recommended if you plan to use Excel or Project to modify or update work item data.</p></li> +</ul> </td> +</tr> + +<tr> +<td>**Child-Parent**<br/>(Tree topology)<br/> +![Child link type image](_img/link-work-items-support-traceability/child-tree-forward.png) +![Parent link type image](_img/link-work-items-support-traceability/parent-tree-reverse.png) +</td> +<td> + +Use this directional link to create one-to-many relationships between a single parent to one or more child items. Typical uses include: +<ul> +<li><p>Create a work breakdown structure (WBS). See [Schedule tasks and assign resources using Microsoft Project](../office/create-your-backlog-tasks-using-project.md).</p></li><li><p>Map backlog items to portfolio backlog items. Mapping items automatically creates parent-child links between the items. To learn about mapping, see [Organize your backlog](../backlogs/organize-backlog.md).</p></li><li><p>Maintain task summary relationships. Parent-child links are created for summary tasks and their subordinate tasks.</p></li><li><p>Link tasks to PBIs, user stories, or requirements. Supports Backlog Overview, Stories Overview, and Requirements Overview reports.</p></li></ul>Restrictions and recommendations:<ul><li><p>Use Excel to bulk edit both work items and parent-child links. See [Bulk add or modify work items with Excel](../office/bulk-add-modify-work-items-excel.md).</p></li><li><p>A work item can have only one Parent. A parent work item can have many children.</p></li><li><p>Only use parent-child links to link work items in the same team project. This action is recommended if you plan to use Excel or Project to modify or update work item data.</p></li></ul> </td> +</tr> + +<tr> +<td>**Duplicate-Duplicate of**<br/>(Tree topology)<br/> +![Duplicate link type image](_img/link-work-items-support-traceability/duplicate-tree-forward.png) +![Duplicate of link type image](_img/link-work-items-support-traceability/duplicate-of-tree-reverse.png) +</td> +<td> +<p>Use this directional link to create one-to-many relationships between a single parent to one or more child items. Use to track tasks, bugs, or other work items which are duplicates of one another. </p> +<p>Restrictions and recommendations:</p> +<ul><li><p>A work item can have only one Duplicate. </p></li><li><p>Only use Duplicate/Duplicate Of links to link work items in the same team project. This action is recommended if you plan to use Excel or Project to modify or update work item data.</p></li></ul> </td> +</tr> + +<tr> +<td>**Successor-Predecessor**<br/>(Dependency topology)<br/> +![Duplicate link type image](_img/link-work-items-support-traceability/successor-dependency-forward.png) +![Duplicate of link type image](_img/link-work-items-support-traceability/predecessor-dependency-reverse.png) + +</td> +<td><p>Use this directional link to create links between any set of work items, but not ones that would create closed loops. Typically used to track work that must be completed prior to beginning work on predecessor items.</p> +<ul><li><p>Track tasks that must be completed before others can be started. When you plan work using Project, linked tasks are represented as predecessor-successor links in TFS.</p></li><li><p>Supports one-to-many relationships.</p></li><li><p>Find and view predecessor work items and their successor work items in a two-tiered, direct links query view.</p></li></ul>Restrictions and recommendations:<ul><li><p>An error appears when you attempt to create links that define circular relationships.</p></li><li><p>Create predecessor-successor links only to work items that are within the same team project.<br /> +You can create predecessor-successor links between work items that are defined in different projects. However, if you export a query to Excel or Project, only those work items that are defined for the team project for which the query is defined are imported into the Team Foundation client.</p></li></ul> </td> +</tr> + +</tr> +<tr> +<td>**Related**<br/>(Network topology) <br/> +![Related link type image](_img/link-work-items-support-traceability/related-network.png) + +</td> +<td>Use this non-directional link to create links between any set of work items. + +<ul><li><p>Relate work items that are at the same level, such as two user stories that define features that overlap one another.</p></li><li><p>Link work items that are defined in different team projects and managed by different teams.</p></li><li><p>Find and view work items and their related work items in a two-tiered view.</p></li><li><p>Create simple relationships with few restrictions.</p></li></ul></td> +</tr> + + + +<tr> +<td>**Tested by-Tests**<br/>(Dependency topology)<br/> +![Tested by link type image](_img/link-work-items-support-traceability/tested-by-dependency-forward.png) +![Tests link type image](_img/link-work-items-support-traceability/tests-dependency-reverse.png) +</td> +<td> +<p>Link test cases to work items, such as bugs, user stories, requirements, and product backlog items. For on-premises TFS, there are several SQL reports that depend on these links. See [Review team activities to support useful reports](../../report/admin/review-team-activities-for-useful-reports.md#monitor-progress)</p> +</td> +</tr> + +<tr> +<td>**Test Case-Shared Steps**<br/>(Dependency topology)<br/> +![Tested by link type image](_img/link-work-items-support-traceability/tested-by-dependency-forward.png) +![Tests link type image](_img/link-work-items-support-traceability/tests-dependency-reverse.png) +</td> +<td> +<p>Use to link test cases to shared steps. To learn more, see [Share steps between test cases](../../manual-test/mtm/share-steps-between-test-cases.md).</p> +</td> +</tr> + + +<tr> +<td>**Referenced By-References**<br/>(Dependency topology)<br/> +![Tested by link type image](_img/link-work-items-support-traceability/tested-by-dependency-forward.png) +![Tests link type image](_img/link-work-items-support-traceability/tests-dependency-reverse.png) +</td> +<td> +<p>Use to link test cases to shared parameters. To learn more, see [Repeat a test with different data](../../manual-test/repeat-test-with-different-data.md). </p> +</td> +</tr> + + +</tbody> +</table> + + +## Related notes + +You should now have a broad understanding of the various link relationships you can create to track dependencies and create an audit trail for your code development. + +Once you've formed a link relationship, you can't edit the link type of that relationship from the web portal, but you can do it from Team Explorer. + +For additional information, see these topics: + +- [Add link to multiple work items](../backlogs/add-link.md) +- [Share plans, add attachments](share-plans.md) +- [Use mapping to link backlog items to features and epics](../backlogs/organize-backlog.md) +- [Bulk modify links using Excel](../office/bulk-add-modify-work-items-excel.md) + +### Visualize related work and other objects + +You can view related work items and object within a work item form by installing the [Work item visualization extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.WorkItemVisualization) available from the Visual Studio Marketplace. + +### Customized link types (TFS) + +If you connect to an on-premises TFS, you can create custom link types; export and import definitions of link types; and delete, activate, deactivate, and reactivate types of links. See the following topics: + +- [Link type element reference](https://msdn.microsoft.com/library/dd293527.aspx) +- [Manage link types (witadmin)](https://msdn.microsoft.com/library/dd273716.aspx) + + diff --git a/docs/work/track/linking-attachments.md b/docs/work/track/linking-attachments.md new file mode 100644 index 00000000000..2193516c983 --- /dev/null +++ b/docs/work/track/linking-attachments.md @@ -0,0 +1,322 @@ +--- +title: Link and attachment queries | VSTS & TFS +description: QUery work items based on link type, link count, link restrictions, and attachment file count in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 219717a0-de6e-4f70-8558-54f813f82507 +ms.manager: douge +ms.author: kaelli +ms.date: 05/10/2017 +--- + +# Link and attachment queries + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can [link work items to track related work and dependencies](link-work-items-support-traceability.md) and [attach files to share information with your team](share-plans.md#attachments). You can then list work items based on their link type, link count, or attachment file count. + +## Query based on link or attachment counts + +<p>You can filter for work items by the link type, link count, or attachment count. </p> + +<table valign="top"> +<tbody valign="top"> +<tr> + <th> + <p>Filter for</p> + </th> + <th> + <p>Include these query clauses</p> + </th> +</tr> +<tr> + <td> + <p>Items with attachments</p> + </td> + <td> + <p> + ```Attached File Count >= 1``` + </p> + </td> +</tr> +<tr> + <td> + <p>Items with 2 or more hyperlinks</p> + </td> + <td> + <p> + ```Hyperlink Count >= 2``` + </p> + </td> +</tr> +<tr> + <td> + <p>Items containing external links</p> + </td> + <td> + <p> + ```External Link Count >=1``` + </p> + </td> +</tr> +<tr> + <td> + <p>Items that contain between 3 and 7 Related links</p> + </td> + <td> + <p> +    ```Related Link Count >=3``` + </p> + <p> + ```And``` + </p> + <p> +    ```Related Link Count <=7``` + </p> + </td> +</tr> +</tbody> +</table> + + + +## List hierarchical items in a tree view + +Add a query and select **Tree of work items** to begin your query. You should see something similar to the following: + +<img src="_img/query-link-attach-all-items-tree-query.png" alt="Query editor, new tree of work items query" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +>You can't construct a query that shows a hierarchical view of Test Plans, Test Suites, and Test Cases. These items aren't linked together using parent-child link types. You can [view the hierarchy through the Test Plans page of the Test hub](../../manual-test/getting-started/create-a-test-plan.md). + +From there, you can add additional query clauses or change the Filter options for linked work items. + + +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="50%">Filter for</th> +<th width="50%">Include these query clauses</th> +</tr> +<tr> +<td>View only child items of work item 645 +</td> +<td>Add to Filters for top level work items: +```ID = 645``` +</td> +</tr> +<tr> +<td>Tasks or bugs +</td> +<td> +Add to Filters for linked work items: +```Work Item Type In Task,Bug``` +</td> +</tr> +<tr> +<td> +Items assigned to my team (Web) +</td> +<td> +Add to both top and bottom filters: +```Assigned to In Group [Fabrikam Fiber]\Web``` +</td> +</tr> + +<tr> +<td> +Parent items of tasks assigned to me: +</td> +<td> +Change Filter options to **Match linked work items first** +Add to Filters for linked work items: +```Assigned To = @Me``` +</td> +</tr> + +</tbody> +</table> + + +## List items based on linked dependents + +The following example shows a dependent linked query that returns items with dependencies on work managed by other teams and other team projects. Use this query to see all dependent work items that link to active Product Backlog Items or Bugs that have not been removed, closed, or completed. Only those dependent work items that are under a product area other than the **Phone Save\\Phone Customers** are returned. + +![Work Items and Dependent Links Query](_img/example-work-item-queries/IC588290.png) + +**Why this works:** + +- Removing the **Team Project = @Project** clause enables all dependent linked work items that match the filter criteria to be listed, no matter which team project they belong to in the collection. + +- Grouping each of two clauses returns all **Product Backlog Item**s on the backlog or in progress, and the second grouped clause returns all **Bug**s on the backlog or in progress. + +- Grouping the two clauses with the **OR** operator at the start of the second clause returns work items that match either of the two filter criteria. + +- Choosing the **Only return items that have the specified links** returns only top-level work items that have dependencies. + +- Choosing **Return links of any type** returns all linked work items that match the filter criteria for linked work items, in this case, returning all work items that are not under the **Phone Saver\\Phone Customers** area path, and aren't completed or removed. + +The following image shows the query results that are returned. + +![Direct links query results](_img/example-work-item-queries/IC588291.png) + + + +## Link and attachment fields + +The following table describes fields associated with links and attachments. Most of these fields do not appear on the work item forms but are tracked for all work item types. + +<table><thead> +<tr> +<th width="15%"><p><strong>Field name</strong></p></th> +<th width="70%"><p><strong>Description</strong></p></th> +<th width="18%"><p><strong>Work item type</strong></p></th> +</thead> +<tbody valign="top"> +<tr> +<td><p>Attachment File Count</p></td> +<td><p>The number of files attached to the work item and stored in the work item tracking database..</p> +<p>Reference Name=System.AttachedFileCount, Data type=Integer</p> + +<blockquote> +![note icon](../_img/icons/note-icon.png)<br/> +For VSTS, you can add up to 100 attachments to a work item. Attempts to add more result in an error message upon saving the work item. +</blockquote>  +</td> +<td><p>All</p></td> +</tr> + +<tr> +<td><p>External Link Count</p></td> +<td><p>The number of links from the work item to artifacts that are not work items. such as pull requests, commits, changesets, or other link types.</p> +<p>Reference Name=System.ExternalLinkCount, Data type=Integer</p></td> +<td><p>All</p></td> +</tr> +<tr> +<td><p>Hyperlink Count</p></td> +<td><p>The number of hyperlinks that are defined for the work item.</p><p>Reference Name=System.HyperLinkCount, Data type=Integer</p></td> +<td>All</td> +</tr> +<tr> +<td><p>Link Comment</p></td> +<td><p>Contains comments from the team member who created the link. You can configure this field to appear as a column in a list of links on a work item form. (Not supported in query editor.) </p><p>Reference Name=System.Links.Comment, Data type=PlainText</p> +</td> +<td>All</td> +</tr> +<tr> +<td><p>Related Link Count</p></td> +<td><p>The number of links defined for a work item with the Related link type. </p><p>Reference Name=System.RelatedLinkCount, Data type=Integer</p> +</td> +<td>All</td> +</tr> +<tr> +<td><p>Link Description</p></td> +<td><p>Contains the work item type, ID, and title of the work item that is the target of the link. You can configure this field to appear as a column in a list of links on a work item form. (Not supported in query editor.) </p> +<p>Reference Name=System.Links.Description, Data type=PlainText</p></td> +<td>All</td> +</tr> +</tbody> +</table> + + +## Related notes + +- [Add link to multiple work items](../backlogs/add-link.md) +- [Link work items to support traceability](link-work-items-support-traceability.md) +- [Query editor](using-queries.md) +- [Query fields, operators, and macros](query-operators-variables.md) +- [Add work items](../backlogs/add-work-items.md) +- [Work item field index](../guidance/work-item-field.md) + + + +### Visualize related work and other objects + +You can view related work items and object within a work item form by installing the [Work item visualization extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.WorkItemVisualization) available from the Visual Studio Marketplace. + + + +### Add custom link types or customize the links controls + +To add link types (TFS only), see [Manage link types [witadmin]](../reference/witadmin/manage-link-types.md). + +All tabs that support creating links between work items are implemented by using the **LinksControl** element on the work item form. This element controls filtering and restricting the types of work items to which you can link, the types of links that you can create, and whether you can link to work items in another team project. To customize the link controls and restrictions, you modify the definition of the `LinksControlOptions` for a work item type, see [LinksControlOptions XML elements](../reference/linkscontroloptions-xml-elements.md). + + + +<!--- + +### Reports that require links between work items + +The default TFS process templates provide reports that require you to create links between specific work items. + +<table> +<thead> +<tr> +<th><p>Process template</p></th> +<th><p>Report</p></th> +<th><p>Link requirements</p></th> +</tr> +</thead> +<tbody> +<tr> +<td><p>Scrum</p></td> +<td><p>[Backlog Overview (Scrum)](https://msdn.microsoft.com/library/dn641200.aspx)</p></td> +<td><p>Link PBIs and tasks (Parent-Child) and PBIs and test cases (Tested by-Tests).</p></td> +</tr> +<tr> +<td><p>Agile</p></td> +<td><p>[Stories Overview Report (Agile)](https://msdn.microsoft.com/library/dd380648.aspx)</p> +<p>[Stories Progress Report (Agile)](https://msdn.microsoft.com/library/dd380641.aspx)</p></td> +<td><p>Link user stories and tasks (Parent-Child) and user stories and test cases (Tested by-Tests). Link each bug to the test case that identified the code defect (Tested By) or link it to the user story (Related).</p></td> +</tr> +<tr> +<td><p>CMMI</p></td> +<td><p>[Requirements Overview Report (CMMI)](https://msdn.microsoft.com/en-us/library/ee461517.aspx)</p> +<p> [Requirements Progress Report (CMMI)](https://msdn.microsoft.com/en-us/library/ee461582.aspx) </p></td> +<td><p>Link requirements and tasks (Parent-Child) and requirements and test cases(Tested by-Tests). Link each bug to the test case that identified the code defect (Tested By) or link it to the requirement (Related).</p></td> +</tr> +</tbody> +</table> + + +### Default data fields in lists of links + +All lists of links display these data fields: + +- Work item +- ID +- Work Item Type +- Title +- Assigned to +- State +- [Link Comment] + +You can add or remove columns from the list of links, and you can customize the default columns and the column order. For more information, see [LinksControlOptions XML elements](../reference/linkscontroloptions-xml-elements.md). + +For more information about these fields, see [Titles, IDs, and descriptions](titles-ids-descriptions.md) and [Create managed queries](example-queries.md). + + +### Link toolbar buttons + +Each tab has a toolbar with buttons. The links control toolbar for the web portal, shown here, has a subset of these controls: + +Links control toolbar (Team Explorer) + +![](_img/link-controls-restrictions-field-reference/IC673344.png) + +These buttons become available only after you perform a specific action: + +- The button to create a work item that is linked to the open work item (![](_img/link-controls-restrictions-field-reference/IC674469.png)) becomes available only after you save the open work item. + +- The buttons to open the list of work items in a query (![](_img/link-controls-restrictions-field-reference/IC588335.png)) and ![](_img/link-controls-restrictions-field-reference/IC588294.png) **Open in Microsoft Office** become available only when at least one work item is listed in the links control tab. + +- The buttons to open a work item (![](_img/link-controls-restrictions-field-reference/IC588293.png)), edit a link (![](_img/link-controls-restrictions-field-reference/IC588336.png)), and delete a link (![](_img/link-controls-restrictions-field-reference/IC588333.png)) become available only after you click one or more work items listed in the links control tab. + +The **Storyboards** links control restricts users to add links only to storyboards or network shared files. With this control, you can add a new link, open a linked item, and delete a link. Also, only the the web portal version displays the **Start Storyboarding** link within the toolbar. + +Storyboards links control (the web portal) +![](_img/link-controls-restrictions-field-reference/IC589934.png) + +--> + diff --git a/docs/work/track/my-shared-queries.md b/docs/work/track/my-shared-queries.md new file mode 100644 index 00000000000..f22aa3308f1 --- /dev/null +++ b/docs/work/track/my-shared-queries.md @@ -0,0 +1,69 @@ +--- +title: Individual versus shared queries | VSTS & TFS +description: Work with queries to support your and team usage +ms.prod: vs-devops-alm +ms.technology: vs-devops-wit +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/11/2017 +--- + + +# Individual versus shared queries + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +!!! WORK IN PROGRESS !!! + + +Managed queries help you find work items that you want to review, triage, update, or list in a report. Also, with flat-list queries, you can create status and trend charts and place them on your team dashboard. + +To quickly find a work item by ID, simply enter the ID in the [work item search box](search-box-queries.md). Or, you can enter a keyword to list items containing the keyword in its title, description, or history. + +Otherwise, you can use the Query Editor to craft simple or more complex queries based on the filter clauses you specify. Start by choosing from these three query types: +* [Flat list of work items](using-queries.md#flat-list-query) +* [Hierarchical list using a tree query](using-queries.md#tree-query) +* [List showing dependencies using a direct links query](using-queries.md#directs-link-query) + + +Managed queries are useful for monitoring progress. All team projects created with a default process come with a defined set of managed queries. Here are a few of the ways that you can use managed queries... + +**Teams** + +- Active, resolved, or reactivated bugs +- Bugs being worked on this sprint +- Features or user stories to release with the next sprint or release cycle +- Items that have been reviewed or need review (you can use a tag or custom field) +- High priority service issues +- Customer support tickets +- Status or trend charts built from flat-list queries + +**Individual** +- Tasks, bugs, or user stories assigned to me +- Work I'm focused on this sprint +- Work I completed in the past week or sprint + +As your organization scales, the number of queries can quickly multiple. It helps to implement a plan to organize the shared query set and use Favorites to quickly mark those queries that you or your team is interested in monitoring. + +Here are some of the tools you can use to manage queries: +- Create query folders +- Favorite queries +- Search across all or favorited queries (new) +- Grant or revoke permissions to add shared queries + + +### General guidance +- Create a new folder under the Shared Queries folder for each new team added to a team project + + + + +Quick tips on shared queries +If you are new to VSTS and TFS and shared queries, review these tips to learn how you can manage work more effectively: + +To find work items that are assigned to you, add @Me as the value for the Assigned To field in one of the query clauses. +All valid users with standard access can create queries and folders under the My Queries area. To create queries and query folders under Shared Queries, you must have the Contribute permission set. For more information, see Set permissions on queries. +You can modify any query by adding criteria to focus on a product area, an iteration, or another field. To modify a query, open the query editor. +You can open any query in Excel or Project, where you can modify the query and publish your changes to the database for tracking work items. +You can visualize progress by creating a pie-chart, column chart, or other chart for flat-list queries. diff --git a/docs/work/track/organize-view-run-queries.md b/docs/work/track/organize-view-run-queries.md new file mode 100644 index 00000000000..a655610e379 --- /dev/null +++ b/docs/work/track/organize-view-run-queries.md @@ -0,0 +1,87 @@ +--- +title: Organize and view queries | VSTS & TFS +description: Manage your queries by using favorites and folders +ms.prod: vs-devops-alm +ms.technology: vs-devops-wit +ms.assetid: BAD9F638-3F26-4FE3-8A7D-F5C0793BE8AC +ms.topic: get-started-article +ms.manager: douge +ms.author: kaelli +ms.date: 05/31/2017 +--- + + +# Organize, view, and run queries + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +!!! WORK IN PROGRESS !!! + +## Enable or disable the New queries experience + +The New queries experience provides more screen room to view and triage query results. It also allows you to search within the set of queries you've defined or that are shared across your team project. + +## View queries + +To view queries defined for a team project, open the **Work>Queries** page. + +**New queries experience** + +The page opens to **Favorites** which lists all queries you have favorited. + +- Click **All** to view all queries defined for the team project +- Expand a folder to view queries within the folder +- Click a query title to run the query +- Click the star icon to favorite or unfavorite a query +- Open the context menu to access other options: + + <img src="_img/organize-queries-drop-down-menu.png" alt="New query experience, Query context menu, shared query" style="border: 2px solid #C3C3C3;"/> + + +**Old queries experience** + +The page opens to the **Assigned to me** query which lists all work items current assigned to you. + +- Click **All** to view all queries defined for the team project +- Expand a Shared Queries folder to view queries within the folder +- Click a query title to run the query +- Open the context menu to access other options: + + <img src="_img/organize-queries-drop-down-menu-old-exp.png" alt="Old query experience, Query context menu, shared query" style="border: 2px solid #C3C3C3;"/> + +You can change the permissions set for a shared query folder or shared query. For details, see [Set query permissions](set-query-permissions.md). + + +## Add a query folder (UI changes) + + - move queries into a folder (drag and drop) or do a Rename to move it into a different folder + - Or you can copy it by doing a Save As + + + +## View favorited queries, favorite a query (UI changes) + +(NEW - across all team projects) + + + + +## Search on queries (New query experience) + + +## Run a query +- Select a query from the drop down menu (NEW) + + +## Sort a query + + +## Create a new query (UI changes) + • Move query to a different folder + + + +## Related notes + +- [Set query permissions](set-query-permissions.md) + diff --git a/docs/work/track/planning-ranking-priorities.md b/docs/work/track/planning-ranking-priorities.md new file mode 100644 index 00000000000..01a947b8d71 --- /dev/null +++ b/docs/work/track/planning-ranking-priorities.md @@ -0,0 +1,190 @@ +--- +title: Pick list queries | VSTS & TFS +description: Creating queries based on planning, ranking, and priority, integer and pick list fields in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: ca05800c-905a-407f-bea8-a7ee32b65973 +ms.manager: douge +ms.author: kaelli +ms.date: 04/14/2017 +--- + +# Query by pick list value + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You use planning, ranking, and priority fields to specify which work the team should complete first. By ranking and prioritizing work items, all team members gain an understanding of the relative importance of the work that they must accomplish. + +You rank and prioritize work items when you [Create your backlog](../backlogs/create-your-backlog.md). + +## Example pick list queries + +Most of the planning fields described in the next section are either an integer or string field. For example queries of estimates or rich-text fields, see [Query by numeric fields](query-numeric.md) and [Query by titles, IDs, and rich-text fields](titles-ids-descriptions.md). + +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="50%">Filter for</th> +<th width="50%">Include these query clauses</th> +</tr> +<tr> +<td>List blocked tasks (Scrum)<br/> +(Blocked field is type String) +</td> +<td> +           ```Work Item Type _ In _ Task``` +```And _ Blocked _ = _ Yes``` +</td> +</tr> +<tr> +<td>Priority 1 bugs +<br/> +(Priority field is type Integer) +</td> +<td> +           ```Work Item Type _ In _ Bug``` +```And _ Priority _ = _ 1``` +</td> +</tr> +<tr> +<td> +Features and stories that address Architectural areas<br/> +(Value Area field is type String) +</td> +<td> +           ```Work Item Type _ In _ Feature,User Story``` +```And _ Value Area _ = _ Architectural``` +</td> +</tr> + +</tbody> +</table> + +##Fields used to plan and prioritize work +<p>The following table describes the fields that you can use to plan and prioritize work. Some fields are only valid for a specific process—[Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md).</p> +<table width="100%"> +<thead> +<tr> + <th width="17%">Field name</th> + <th width="66%">Description</th> + <th width="17%">Work item type</th> +</tr> +</thead> +<tbody valign="top"> +<tr> + <td><p>Backlog Priority <sup>1</sup></p></td> + <td><p>A number usually assigned by a background process used to track the list order of items on a backlog or board in the web portal.</p> +<p>Reference name=Microsoft.VSTS.Common.BacklogPriority, Data type=Double</p> </td> + <td><p>Bug, Epic, Feature, Product backlog item, Task (Scrum)</p></td> +</tr> + +<tr> + <td><p>Blocked</p></td> + <td><p>Indicates whether a team member is prevented from making progress toward implementing a requirement or task or resolving a bug, change request, or risk. If an issue has been opened to track a blocking problem, a link should be made to the issue.</p><p>You can specify <strong>Yes</strong> or <strong>No</strong>.</p> +<p>Reference name=Microsoft.VSTS.CMMI.Blocked, Data type=String</p> </td> + <td><p>Bug, Change Request, Requirement, Risk, Task (CMMI, Scrum)</p> +</td> +</tr> + + +<tr> + <td><p>Committed</p></td> + <td><p>Indicates whether the requirement is committed in the project or not. You can specify <strong>Yes</strong> or <strong>No</strong>.</p> +<p>Reference name=Microsoft.VSTS.CMMI.Committed, Data type=String</p></td> + + <td><p>Requirement (CMMI)</p></td> +</tr> +<tr> + <td><p>Escalate</p></td> + <td><p>Indicates whether the issue is affecting the critical path of the project plan. You can specify <strong>Yes</strong> or <strong>No</strong>.</p> +<p>Reference name=Microsoft.VSTS.CMMI.Escalate, Data type=String</p></td> + <td><p>Issue (CMMI)</p></td> +</tr> + +<tr> + <td><p>Priority <sup>1</sup></p></td> + <td><p>A subjective rating of the bug, issue, task, or test case as it relates to the business. You can specify the following values:</p> +<ul style="list-style-type:none"> +<li><p><strong>1</strong>:  Product cannot ship without the successful resolution of the work item, and it should be addressed as soon as possible.</p></li> +<li><p><strong>2</strong>:  Product cannot ship without the successful resolution of the work item, but it does not need to be addressed immediately.</p></li> +<li><p><strong>3</strong>:  Resolution of the work item is optional based on resources, time, and risk.</p></li></ul> +<p>Reference name=Microsoft.VSTS.Common.Priority, Data type=Integer</p> </td> + <td><p>Bug, Change Request, Epic, Feature, Impediment, Issue, Product backlog item, Requirement, Risk, Shared Step, Task, Test Case, User Story</p></td> +</tr> + + +<tr> + <td><p>Risk</p></td> + <td><p>A subjective rating of the relative uncertainty around the successful completion of a user story.</p><p>Defined allowed values are:</p><ul style="list-style-type:none"><li><p><strong>1 - High</strong></p></li><li><p><strong>2 - Medium</strong></p></li><li><p><strong>3 - Low</strong></p></li></ul> +<p>Reference name=Microsoft.VSTS.Common.Risk, Data type=String</p></td> + <td><p>Epic, Feature, User Story (Agile) </p></td> +</tr> + +<tr> + <td><p>Severity <sup>1</sup></p></td> + <td><p>A subjective rating of the impact of a bug on the project. You can specify the following values:</p><ul style="list-style-type:none"><li><p><strong>1 - Critical</strong></p></li><li><p><strong>2 - High</strong></p></li><li><p><strong>3 - Medium</strong></p></li><li><p><strong>4 - Low</strong></p></li></ul> +<p>Reference name=Microsoft.VSTS.Common.Severity, Data type=String</p> </td> + <td>Bug, Issue (CMMI), Risk (CMMI)</td> +</tr> + +<tr> + <td><p>Stack Rank <sup>2</sup></p></td> + <td><p>A number, usually assigned by a background process, used to track the list order of items on a backlog or board in the web portal.</p> +<p>Reference name=Microsoft.VSTS.Common.StackRank, Data type=Double</p></td> + <td><p>Bug, Epic, Feature, Requirement (CMMI), Risk (CMMI), Task, User Story (Agile) </p> +</td> +</tr> + +<tr> + <td><p>Time Criticality</p></td> + <td><p>A subjective unit of measure that captures the how the business value decreases over time. Higher values indicate that the epic or feature is inherently more time critical than those items with lower values.</p> +<p>Reference name=Microsoft.VSTS.Common.TimeCriticality, Data type=Double</p> </td> + + <td>Epic, Feature</td> +</tr> + +<tr> + <td><p>Triage</p></td> + <td><p>Indicates the type of triage decision that is pending for the work item. You use this field when the work item is in the <strong>Proposed</strong> state.</p><p>You can specify one of the following values:</p><ul><li><p><strong>Pending</strong> (default)</p></li><li><p><strong>More Info</strong></p></li><li><p><strong>Info Received</strong></p></li><li><p><strong>Triaged</strong></p></li></ul> +<p>Reference name=Microsoft.VSTS.Common.Triage, Data type=String</p></td> + <td><p>CMMI only: Bug, Change Request, Epic, Feature, Issue, Requirement, Task </p></td> +</tr> +<tr> + <td><p>Value Area <sup>1</sup></p></td> + <td><p>The area of customer value addressed by the epic, feature, or backlog item. Values include:</p><ul><li><p><strong>Architectural</strong> – technical services to implement business features that deliver solution</p></li><li><p><strong>Business</strong> – services that fulfill customers or stakeholder needs that directly deliver customer value to support the business (Default)</p></li></ul> +<p>Reference name=Microsoft.VSTS.Common.BusinessValue, Data type=String</p> </td> + + <td>Bug, Epic, Feature, Product Backlog Item (Scrum) Requirement (CMMI), User Story (Agile)</td> +</tr> + +</tbody> +</table> + +####Notes: +0. To change the menu selection, see [Add or modify a field, customize a pick list](../customize/add-modify-field.md). +0. The sequence of items on the product backlog page is determined according to where you have added the items or dragged the items on the page. As you drag items, a background process updates either the Backlog Priority (Scrum) or Stack Rank (Agile, CMMI) field which is assigned to `type="Order"` in the ProcessConfiguration file. + + +## Related notes + +- [Query by a numeric field](query-numeric.md) +- [Work item field index](../guidance/work-item-field.md) +- [Data types and work item fields](../reference/define-modify-work-item-fields.md). + +###More on Backlog Priority or Stack Rank fields + +The Backlog Priority and Stack Rank fields don't appear on the work item forms. (To learn why, see [Where is the field on the work item form to order the backlog?](http://blogs.msdn.com/b/visualstudioalm/archive/2014/07/08/where-is-the-field-on-the-work-item-form-to-order-the-backlog.aspx). + +To add the field to the form: + +- **VSTS**: Add the Stack Rank field to a work item type ([for the custom process that your team project references](../process/customize-process-form.md)). +- **TFS**: [Modify the WIT XML definition to add the following control element](../customize/add-modify-wit.md): + + `<Control FieldName="Microsoft.VSTS.Common.StackRank" Type="FieldControl" Label="Stack Rank" LabelPosition="Left" />` + + or, for Scrum + + `<Control FieldName="Microsoft.VSTS.Common.BacklogPriority" Type="FieldControl" Label="Stack Rank" LabelPosition="Left" />` + + + \ No newline at end of file diff --git a/docs/work/track/queries-preview.md b/docs/work/track/queries-preview.md new file mode 100644 index 00000000000..75691d5241e --- /dev/null +++ b/docs/work/track/queries-preview.md @@ -0,0 +1,61 @@ +--- +title: New queries experience +description: Highlights the features made available with the changes to the new Queries hub layout +ms.prod: vs-devops-alm +ms.technology: vs-devops-agile +ms.article: get-started-article +ms.assetid: 9E69373B-8902-43C9-9F29-4BE0948077DC +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 09/07/2017 +--- + +# New Queries experience + +**VSTS** + +>[!NOTE] +><b>Feature availability: </b>The New queries experience is in preview for VSTS and available when you enable it from the web portal. + +We have launched a preview version of a modernized Queries Hub in your VSTS account. You can enable it from the [Preview features menu](../../collaborate/preview-features.md) that you access from your account profile. + +## What's new in the Queries hub + +### User Focused Navigation +When you enable the preview of the **Work>Queries** hub, you’ll notice that the left pane is gone. To navigate quickly between your favorite queries, use the dropdown in the query title. + +<img src="_img/queries-favorite-picker.png" alt="List of favorite queries to run" style="border: 1px solid #cccccc;"/> + +Alternatively, browse all your personal and shared queries in the new directory pages and favorite what is important to you. You can get to the query directory using the "Queries" breadcrumb. + +<img src="_img/queries-favorites-pivot.png" alt="List of queries separated into personal favorites and team favorites groups" style="border: 1px solid #cccccc;"/> + +In addition the directory pages highlight new metadata for each query including: + * The type of query + * The path within the hierarchy + * Who last modified it + * When it was last modified + +### Find queries faster with filtering +The query directory pages now include a filter bar that lets you quickly search for any query you care about. + +<img src="_img/queries-all-filter.png" alt="List of all queries in the project filtered by WIT IQ criteria" style="border: 1px solid #cccccc;"/> + +### Other improvements +Besides the big changes listed above, here are some other improvements: +* Create and edit followed work item queries with the @Follows macro +* "Save as" now copies charts to the new query +* Compact command bar and expanded quick filter capabilities + +## What's next? +We plan to continue to invest in the Queries Hub beyond the new features in this preview. Some things to look forward to include: +* Simplified column configuration experience +* Expanded query filtering capabilities to filter by folders + +## Send us your feedback +Let us know what you think in the comment box that appears when you toggle the new hub on or off. Additionally, feel free to reach out to us via Developer Community with suggestions or issues. See also our [comprehensive feedback and support page](../../provide-feedback.md). + +## Related notes + +- [Work from the account home page](../../connect/account-home-pages.md) \ No newline at end of file diff --git a/docs/work/track/query-by-area-iteration-path.md b/docs/work/track/query-by-area-iteration-path.md new file mode 100644 index 00000000000..392cb4aec9d --- /dev/null +++ b/docs/work/track/query-by-area-iteration-path.md @@ -0,0 +1,63 @@ +--- +title: Query by area or iteration path | VSTS & TFS +description: Find or list work items based on their area or iteration path in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 65066197-F5BE-45F3-898E-1BA3C7BFDCA3 +ms.manager: douge +ms.author: kaelli +ms.date: 06/01/2016 +--- + + +# Query by area or iteration path + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Add examples of usage for areas and iteration paths. +Mention node names. +Tips for usage + + +<a name="field-reference"></a> +## Classification field reference + +These fields appear on the forms for all WITs. + +|**Field name**|**Description**|**Reference name**| +|---|---|---| +|**Area Path**|Groups work items into product feature or team areas. The area must be a valid node in the project hierarchy.|System.AreaPath| +|**Iteration Path**|Groups work items by named sprints or time periods. The iteration must be a valid node in the project hierarchy.|System.IterationPath| + +For each field, data path=```TreePath```, reportable type=```Dimension```, index attribute=```True```. + +If you define a path name that is longer than 256 characters, you will not be able to specify it in Microsoft Project. To avoid this problem, define path names of no more than 10 characters, and do not nest nodes more than 14 levels deep. + +You can't apply most field rules to the System.AreaPath and System.IterationPath fields. To learn more, see [Apply a field rule](../reference/apply-rule-work-item-field.md). + +The following fields do not appear on work item forms but are tracked for each work item type. These fields provide a numeric value for each classification value that is defined for a team project. You can use these fields to filter queries and create reports. + +|**Field name**|**Description**|**Reference name**|**Data type**| +|---|---|---|---| +|Area ID|The unique ID of the area to which this work item is assigned.|System.AreaId|Integer| +|Iteration ID|The unique ID of the iteration to which this work item is assigned.|System.IterationId|Integer| +|Node Name|The name of the leaf node of an area path. For example, if the area path is Project\A1\B2\C3, the node name is C3.|System.NodeName|String| + +The default reportable type is none. Area ID and Iteration ID are indexed, Node Name is not. To learn more about field attributes, see [Work item data type reference](../reference/define-modify-work-item-fields.md). + + + +## Related notes + +* [Add another team](../scale/multiple-teams.md) +* [Set team defaults](../scale/set-team-defaults.md) +* [Customize iteration paths](../customize/set-iteration-paths-sprints.md) +* [Customize area paths](../customize/set-area-paths.md) +* [Manage team assets ](../scale/manage-team-assets.md) +* [Set permissions and access for work tracking](../how-to/set-permissions-access-work-tracking.md) + + +<a name="field-rules"></a> +### Supported field rules + +For the Hosted XML and On-premises XML process models, you can apply rules to fields. However, for system fields (System.XXX), such as the Area Path and Iteration Path, you can [specify only a small subset of rules](../reference/apply-rule-work-item-field.md#system), such as ```HELPTEXT``` and ```READONLY``` to fields. \ No newline at end of file diff --git a/docs/work/track/query-by-date-or-current-iteration.md b/docs/work/track/query-by-date-or-current-iteration.md new file mode 100644 index 00000000000..569f11f5dda --- /dev/null +++ b/docs/work/track/query-by-date-or-current-iteration.md @@ -0,0 +1,288 @@ +--- +title: Query by date or current iteration | VSTS & TFS +description: Find or list work items based on a date or a team's current iteration using Agile tools and Scrum methods when working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 95D9F558-E3C4-4D5F-BB69-76A3BD7625D8 +ms.manager: douge +ms.author: kaelli +ms.date: 08/04/2016 +--- + +# Query by date or current iteration + +[!INCLUDE [temp](../_shared/dev15-version-header.md)] + +<p>Two query macros help you find work items based on when changes occurred or if they belong to the current sprint. To list work items based on when they were created, closed, resolved, or changed state─use **@Today** or specify dates. For queries that list work items based on their assignment to a team's current sprint, use **@CurrentIteration**.</p> +<p>For example, you can find work items that were modified in the last 3 days with the following query.</p> + +![Editor query filter based on recent changes](_img/query-by-date-example.png) + + +##Query for items based on when changes occurred + +You can filter for work items by the date on which they were changed or for a specific time period. If you limit the scope of your query, it can help with performance by only returning those results that fit the date range that you want to include. If you're new to creating queries, see [Use the query editor to list and manage queries](using-queries.md). + +Not all fields are valid for all work item types (WITs). Jump to <a href="#date_fields">date fields</a> for the set of fields you can include in queries and which WITs they apply to. Enter dates in the format accepted by your computer's operating system. + +<table valign="top"> +<tbody valign="top"> +<tr> + <th width="25%"> + <p>Filter for</p> + </th> + <th> + <p>Include these query clauses</p> + </th> +</tr> +<tr> + <td> + <p>Items created in the last 30 days</p> + </td> + <td> + ![Clause for finding items created in the last 30 days](_img/q-by-date-last-30-days.png) + </td> +</tr> +<tr> + <td> + <p>Items modified on a specific date</p> + </td> + <td> + ![Clause for finding items changed on a specific date](_img/q-by-specific-date.png) + </td> +</tr> +<tr> + <td> + <p>Items resolved today</p> + </td> + <td>![Clause for finding items resolved today](_img/q-by-resolved-today.png) + </td> +</tr> +<tr> + <td> + <p>Items closed within a specified time period</p> + </td> + <td>![Clause for finding items closed within a specified time period](_img/q-by-closed-time-period.png) + </td> +</tr> +<tr> + <td> + <p>Items whose status was updated within the last week</p> + </td> + <td>![Clause for finding items whose status was updated within the last week](_img/q-by-state-changed-within-last-week.png) + </td> +</tr> +<tr> + <td> + <p>Items closed during the current sprint (the `@CurrentIteration` macro references the sprint defined for the current team context) </p> + </td> + <td>![Clause for finding items closed during the current sprint](_img/q-by-done-current-iteration.png) + </td> +</tr> +</tbody> +</table> + + +<a id="current-iteration"> </a> + +## Query for items based on belonging to a team's current iteration +If your team follows Scrum processes, you [schedule work to be completed in sprints](../scrum/define-sprints.md). You can track the progress of requirements, bugs, and other work to be completed in the current sprint using the **@CurrentIteration** macro. + +Prior to creating or updating a query to use the **@CurrentIteration** macro, make sure you [select your team](#team_view). The **@CurrentIteration** macro references the current team selected in the web portal. + +Any item assigned to a sprint which corresponds to the current iteration path for the team will be found. For example, if a team is on Sprint 5, then the query will return items assigned to Sprint 5. Later, when the team is working in Sprint 6, the same query will return items assigned to Sprint 6. + +![Query filter using the @CurrentIteration macro](_img/query-using-at-current-iteration-macro.png) + +You can't use the **@CurrentIteration** macro from some [clients, features, or REST APIs](#current_sprint_restrict). + +<a id="date_fields"> </a> + +## Date fields +<p>You can use date fields to filter your queries. Some of these fields are populated with information as a work item progresses from one state to another. Several of these fields do not appear on the work item form, but they are tracked for those WITs listed in the following table.</p> + +<table> +<tbody valign="top"> +<tr> + <th width="14%">Field name</th> + <th>Description</th> + <th>Work item type</th> +</tr> +<tr> + <td> + <p>Activated Date <sup>1</sup> </p> + </td> + <td> + <p>The date and time when the work item was created or when its status was changed from closed, completed, or done to a new or active state. </p> + <p>Reference name=Microsoft.VSTS.Common.ActivatedDate, Data type=DateTime</p> + </td> + <td> + <p>All</p> + </td> +</tr> +<tr> + <td> + <p>Change Date</p> + </td> + <td> + <p>The date and time when a work item was modified.</p> + <p>Reference name=System.ChangedDate, Data type=DateTime</p> + </td> + <td> + <p>All</p> + </td> +</tr> +<tr> + <td> + <p>Closed Date <sup>1</sup> </p> + + </td> + <td> + <p>The date and time when a work item was closed.</p> + <p>Reference name=Microsoft.VSTS.Common.ClosedDate, Data type=DateTime</p> + </td> + <td> + <p>All</p> + </td> +</tr> +<tr> + <td> + <p>Created Date</p> + </td> + <td> + <p>The date and time when a work item was created.</p> + <p>Reference name=System.CreatedDate, Data type=DateTime</p> + </td> + <td> + <p>All</p> + </td> +</tr> +<tr> + <td> + <p>Due Date</p> + </td> + <td> + <p>The forecasted due date for an issue to be resolved.</p> +<p>Reference name=Microsoft.VSTS.Scheduling.DueDate, Data type=DateTime</p> + </td> + <td> + <p>Issue (Agile)</p> + </td> +</tr> + + +<tr> + <td> + <p>Finish Date <sup>2</sup> </p> + </td> + <td> + <p>The date and time when the schedule indicates that the task will be completed. </p> +<p>Reference name=Microsoft.VSTS.Scheduling.FinishDate, Data type=DateTime</p> + </td> + <td> + <p>Task, Bug</p> + </td> +</tr> +<tr> + <td> + <p>Resolved Date <sup>1</sup> </p> + </td> + <td> + <p>The date and time when the work item was moved into a Resolved state. </p> + <p>Reference name=Microsoft.VSTS.Common.ResolvedDate, Data type=DateTime</p> + </td> + <td> + <p>Bug (Agile, CMMI)</p> + </td> +</tr> +<tr> + <td> + <p>Start Date <sup>2</sup> </p> + </td> + <td> + <p>The date and time when the schedule indicates that the task will start. </p> +<p>Reference name=Microsoft.VSTS.Scheduling.StartDate, Data type=DateTime</p> + </td> + <td> + <p>Task, Bug</p> + </td> +</tr> + + +<tr> + <td> + <p>State Change Date</p> + </td> + <td> + <p>The date and time when the value of the State field changed.</p> + <p>Reference name=Microsoft.VSTS.Common.StateChangeDate, Data type=DateTime</p> + </td> + <td> + <p>All</p> + </td> +</tr> +<tr> + <td> + <p>Target Date</p> + </td> + <td> + <p>The date by which a feature should be completed. </p> +<p>Reference name=Microsoft.VSTS.Scheduling.TargetDate, Data type=DateTime</p> + </td> + <td> + <p>Feature</p> + </td> +</tr> + + + +</tbody> +</table> + +#### Notes: + +1. For these fields to be defined for a WIT, they must be included in the ```WORKFLOW``` section of the WIT definition. For example, this syntax is included within the ```FIELDS``` definition when transitioning to a Resolved state: + ``` + <FIELD refname="Microsoft.VSTS.Common.ResolvedDate /> + <SERVERDEFAULT from="clock" /> + </FIELD > + ``` + +2. Start and Finish Date fields are calculated if you create a project plan in Microsoft Project and then synchronize that plan with tasks that are stored in TFS or VSTS. These fields do not appear on the work item form, but they are calculated for those backlog items and tasks that are linked to backlog items. You can view their read-only values in results from a query or from Microsoft Excel or Project. For more information, see [Create your backlog and tasks using Project](../office/create-your-backlog-tasks-using-project.md). + + +##Related notes +To query for items based on text entered in the History field, see +[History and auditing](history-and-auditing.md). + +- [Create managed queries to list, update, or chart work items ](example-queries.md) +- [Query editor](using-queries.md) +- [Query operators & macros](query-operators-variables.md) +- [Work item field index](../guidance/work-item-field.md) +- [Query permissions](set-query-permissions.md) + + + +<a id="team_view"> </a> + + + +<a id="current_sprint_restrict"> </a> + +###Client restrictions on the use of @CurrentIteration macro +You can use the **@CurrentIteration** macro in a query from the following clients: +<ul> + <li> + <p>Web portal that connects to VSTS</p> + </li> + <li> + <p>Web portal that connects to an on-premises TFS 2015 or later version</p> + </li> + <li> + <p>Visual Studio 2015 or Team Explorer 2015 or later versions connected to VSTS and TFS 2015 or later versions.</p> + </li> +</ul> + +An error occurs if you open a query that contains the **@CurrentIteration** macro in earlier versions of Visual Studio, or from Excel or Project. Also, the macro cannot be used when [copying or cloning test suites and test cases](https://msdn.microsoft.com/library/hh543843.aspx), [defining alerts](alerts-and-notifications.md), or with [REST APIs](../../integrate/get-started/rest/basics.md). + + \ No newline at end of file diff --git a/docs/work/track/query-by-workflow-changes.md b/docs/work/track/query-by-workflow-changes.md new file mode 100644 index 00000000000..01c699d7b73 --- /dev/null +++ b/docs/work/track/query-by-workflow-changes.md @@ -0,0 +1,475 @@ +--- +title: Query by account, user name, workflow or board changes +description: Find or list work items based on changes made to their assignment, state or Kanban board column or swimlane +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 1FD042F2-D503-40A3-A6C7-1E25A0F664C6 +ms.manager: douge +ms.author: kaelli +ms.date: 08/18/2017 +--- + +# Query by assignment, workflow or Kanban board changes + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +Workflow states support tracking the status of work as it moves from a new state to a closed or a done state. Kanban query fields support tracking the status of work as it moves from one column or swimlane to another on the Kanban board. + +>[!NOTE] +><b>Feature availability: </b>Kanban query fields are available from VSTS and TFS 2015.1 or later version. + +Each workflow consists of a set of states, valid transitions between states, and reasons for transitioning the work item to the selected state. [Workflow states and reasons](../guidance/choose-process.md#workflow-states) differ among the work item types (WITs) and default processes used to create your team project. + +Most work items move from a New, Active, or Proposed state to a Done or Closed state. As each work item moves from one state to another, the item might also be reassigned to various members of the team. For example, a tester might create a bug that is assigned to another team member during triage. When the other team member resolves the bug, it is reassigned to the tester who created it. + +<a id="reactivated"/> + +For example, you can find all work items that were closed but then reactivated. By specifying the Changed Date field, you can focus on reactivations that occurred today, yesterday, or in the last week. + +![Query Editor filter for reactivated items](_img/query-reactivated-items.png) + +You can also use the Activated By and Activated Date fields, or other workflow fields. + +>[!TIP] +>Not all fields are valid for all WITs. Jump to [Workflow and Kanban query fields](#Workflow and Kanban board fields) for the set of fields you can include in queries and which WITs they apply to. + +If you're new to creating queries, see [Use the query editor to list and manage queries](using-queries.md). + + + +<a id="me"/> +## Query by assignment and account-specific fields + +You can use the search box or query editor to quickly find work items based on assignment. Also, you can filter for work items based on who changed, resolved, or closed a work item. By specifying a time period, you can scope your query even further which can help with performance. + +Use **=** to find current assignments, **Was Ever** to list items based on past assignments, and @Me to scope to your account name. + +<table valign="top"> +<tbody valign="top"> +<tr> + <th> + <p>Filter for</p> + </th> + <th> + <p>Include these query clauses</p> + </th> +</tr> +<tr> + <td> + <p>Active items assigned to me</p> + </td> + <td> + <p style="margin-bottom:0px"> +            ```Assigned To _ = _ @Me```</p> +<p style="margin-bottom:0px">```And _ State _ = _ Active```</p> +</td> +</tr> +<tr> +<tr> + <td> + <p>Closed items that at some point was assigned to me</p> + </td> + <td> + <p style="margin-bottom:0px"> +            ```Assigned To _ Was Ever _ @Me```</p> +<p style="margin-bottom:0px">```And _ State _ = _ Closed```</p> + </td> +</tr> +<tr> + <td> + <p>Active user stories assigned to my (Web) team</p> + </td> + <td> + <p style="margin-bottom:0px"> +            ```Work Item Type = User Story```</p> +<p style="margin-bottom:0px">```And _ State _ = _ Active```</p> +<p style="margin-bottom:0px">```And _ Assigned To _ In Group _ [FabrikamFiber]\Web```</p> + </td> +</tr> +<tr> + <td> + <p>Items I've modified in the last 30 days</p> + </td> + <td> + <p style="margin-bottom:0px"> +            ```Changed By _ = _ @Me```</p> +<p style="margin-bottom:0px">```And _ Changed Date _ >= _ @Today-30```</p> + </td> +</tr> + +<tr> + <td> + <p>Unassigned items (leave the Value blank)</p> + </td> + <td> + <p style="margin-bottom:0px"> +            ```Assigned To _ = _ ```</p> + </td> +</tr> + +</tbody> +</table> + +![Was Ever operator to query for past assignment](_img/example-work-item-queries/IC697729.png) + +### Filter based on membership in a group + +To filter on items assigned to someone who belongs to a VSTS or TFS group, use the **In Group** operator. + +![Filter based on assignment to a TFS security group](_img/example-work-item-queries/IC675038.png) + +You can use the **In Group** or **Not In Group** operators to filter a query based on several values that are members of a group, or that are not members of a group. Examples of groups are teams, VSTS/TFS groups, and work item categories. + + +>[!NOTE] +>**In Group** clauses don't support references to Azure Active Directory (AAD) groups. + +<a id="workflow-change"/> + +##List items based on workflow changes + +You use the State, Reason, and Resolved Reason fields to query for items based on workflow changes. + +<table valign="top"> +<tbody valign="top"> +<tr> + <th>Filter for</th> + <th>Include these query clauses</th> +</tr> +<tr> + <td> + <p>Resolved stories + </p> +</td> + <td> + <p style="margin-bottom:0px"> +            ```Work Item Type _ = _ User Story```</p> +<p style="margin-bottom:0px">```And _ State _ = _ Resolved```</p> + </td> +</tr> +<tr> + <td> + <p>Items removed as they're duplicate </p> + </td> + <td> + <p style="margin-bottom:0px"> +            ```State _ = _ Removed```</p> +<p style="margin-bottom:0px">```And _ Reason _ = _ Duplicate```</p> + </td> +</tr> + +<tr> + <td> + <p>Items failing acceptance tests </p> + </td> + <td> + <p style="margin-bottom:0px"> + ```Resolved Reason = Acceptance tests fail``` + </p> + </td> +</tr> +<tr> + <td> + <p>Items closed within the last 15 days</p> + </td> + <td> + <p style="margin-bottom:0px"> +            ```State _ = _ Closed```</p> +<p style="margin-bottom:0px">```And _ Closed Date _ > _ @Today-15```</p> + </td> +</tr> +</tbody> +</table> + +<a id="workflow-change-who"/> +##List items based on who made workflow changes + +You can quickly find items that you changed, resolved or closed. You can also find items that were changed by other team members. Several fields—such as the Created By, Changed By, Resolved By, and Closed By—are populated based on changes to the workflow. + +<table valign="top"> +<tbody valign="top"> +<tr> + <th>Filter for</th> + <th>Include these query clauses</th> +</tr> +<tr> + <td> + <p>User Stories that I closed </p> +</td> + <td> + <p style="margin-bottom:0px"> +            ```Work Item Type _ = _ User Story```</p> +<p style="margin-bottom:0px">```And _ Closed By _ = _ @Me```</p> + </td> +</tr> +<tr> + <td> + <p>Items I resolved in the last week</p> + </td> + <td> + <p style="margin-bottom:0px"> +            ```Resolved By _ = _ @Me```</p> +<p style="margin-bottom:0px">```And _ Resolved Date _ >= _ @Today-7```</p> + </td> +</tr> +</tbody> +</table> + + +<a id="kanban_query_fields"> </a> + +##List items based on Kanban board changes + +<blockquote><span style="font-size:1.0em;"><b>Feature availability: </b>Kanban query fields are currently available from VSTS or from TFS 2015 Update 1 or later versions. </span></blockquote> + +Using the Kanban query fields—Board Column, Board Column Done, and Board Lane—you can list work items according to their flow status on the Kanban board. And, you can create a [status or trend chart](../../Report/charts.md) based on these queries. + +For example, you can list items based on the team area path, and if they are in a specific custom Kanban column and swimlane. If you rename a column or swimlane, you'll need to update the query filters to reflect the new name. For more ideas, see this blog post: [New fields bring Kanban goodness to queries, and more](https://blogs.msdn.microsoft.com/visualstudioalm/2015/10/19/new-fields-bring-kanban-goodness-to-queries-and-more/) + +<img src="_img/query-kanban-fields.png" alt="Query filter on Kanban board fields" style="border: 2px solid #C3C3C3;" /> + + +>[!NOTE] +>Queries are now scoped to the current team project by default. Check the **Query across projects** to find work items defined in other team projects within the collection. + + +<table valign="top"> +<tbody valign="top"> +<tr> + <th>Filter for</th> + <th>Include these query clauses</th> +</tr> +<tr> + <td> + <p>User Stories in the Code/Doing column</p> +</td> + <td> + + <p style="margin-bottom:0px"> +            ```Work Item Type = User Story```</p> +<p style="margin-bottom:0px">```And _ Board Column _ = _ Code```</p> +<p style="margin-bottom:0px">```And _ Board Column Done _ = _ False```</p> + + </td> +</tr> +<tr> + <td> + <p>Items in the Expedite swimlane</p> + </td> + <td> + <p> + ```Board Lane _ = _ Expedite``` + </p> + </td> +</tr> +<tr> + <td> + <p>Items in any swimlane that contains "Test"</p> + </td> + <td> + <p> + ```Board Lane _ Contains _ Test``` + </p> + </td> +</tr> +</tbody> +</table> + + +<a id="kanban-query-results"> </a> + +>[!IMPORTANT] +>Work items that appear on more then one team's Kanban board can yield query results that don't meet your expectations. Because each team can customize the Kanban board columns and swimlanes, the values assigned to work items which appear on different boards may not be the same. The primary work around for this issue is to maintain single ownership of work items by [team area path](../scale/set-team-defaults.md). Another option is to [add custom workflow states (VSTS)](../process/customize-process-workflow.md) which all teams can use.</blockquote> + + +<a id="workflow-fields"> </a> + +##Workflow and Kanban board fields +You can use the following fields to filter your queries or build reports. Some of these fields are populated with information as a work item progresses from one state to another, or you move an item in the [Kanban board](../kanban/kanban-basics.md) to a different column or swimlane. Several of these fields do not appear on the work item form, but they are tracked for those WITs listed in the following table. + +For information about data types and default field attributes, see [Work item data type reference](../reference/define-modify-work-item-fields.md). + +<table width="100%"> +<thead> +<tr> + <th width="17%">Field name</th> + <th width="56%">Description</th> + <th width="12%">Data type </th> + <th width="15%">Work item type</th> +</tr> +</thead> +<tbody valign="top"> +<tr> + <td>Activated By <sup>1, 2</sup> </td> + <td>The name of the team member who created the work item or changed its status from closed, completed, or done state to a new or active state. +<p>Reference name=Microsoft.VSTS.Common.ActivatedBy</p></td> + <td>String</td> + <td>All</td> +</tr> + +<tr> + <td>Activated Date <sup>2</sup></td> + <td>The date and time when the work item was created or when its status was changed from closed, completed, or done to a new or active state. +<p>Reference name=Microsoft.VSTS.Common.ActivatedDate</p></td> + <td>DateTime</td> + <td>All</td> +</tr> + +<tr> + <td>Assigned To <sup>1, 2, 3</sup> </td> + <td>The name of the team member who currently owns the work item. For additional information, see [Note 1 on synchronization and person-name fields](#sync) and [Assign work items to a team member](#assigned_to-field). +<p>Reference name=System.AssignedTo</p></td> + <td>String</td> + <td>All</td> +</tr> + + +<tr> + <td>Board Column <sup>2, 3, 4</sup> </td> + <td>The current Kanban board column assignment of the work item, for example: Active, Closed, Committed, Done, or other custom column assignment. +<p>Reference name=System.BoardColumn</p></td> + <td>String</td> + <td>Requirement Category <sup>5</sup> </td> +</tr> +<tr> + <td>Board Column Done <sup>4</sup></td> + <td> + <p>The current assignment of the work item to Doing (False) or Done (True) Kanban column. Only assigned when [split-columns](../kanban/split-columns.md) has been enabled for a Kanban board column. </p> +<p>Reference name=System.BoardColumnDone</p></td> + <td>Boolean</td> + <td>Requirement Category <sup>5</sup> </td> +</tr> +<tr> + <td> + <p>Board Lane <sup>2, 3, 4</sup> </p> + </td> + <td>The current Kanban board swimlane assignment of the work item, for example: Default, Expedite, Blocked, or other custom swimlane assignment. +<p>Reference name=System.BoardLane</p></td> + <td>String</td> + <td>Requirement Category <sup>5</sup> </td> +</tr> + + +<tr> + <td>Closed By <sup>1, 2</sup> </td> + <td>The name of the team member who set the state to closed, completed, or done. +<p>Reference name=System.ClosedBy</p></td> + <td>String</td> + <td>All</td> +</tr> + +<tr> + <td>Closed Date</td> + <td>The date and time when a work item was closed. +<p>Reference name=Microsoft.VSTS.Common.ClosedDate</p></td> + <td>DateTime</td> + <td>All</td> +</tr> + +<tr> + <td>Created By <sup>1, 2</sup> </td> + <td>The name of the team member who created the work item. +<p>Reference name=Microsoft.VSTS.Common.CreatedBy</p></td> + <td>String</td> + <td>All</td> +</tr> + +<tr> + <td>Created Date</td> + <td>The date and time when a work item was created. +<p>Reference name=Microsoft.VSTS.Common.CreatedDate</p></td> + <td>DateTime</td> + <td>All</td> +</tr> + +<tr> + <td>Reason <sup>2, 3</sup> </td> + <td>The reason why the work item is in the current state. +<p>Values are defined within the ```WORKFLOW``` section of the WIT definition using the ```REASON``` element. To modify the defined reasons, see Change the workflow for a work item type.</p> +<p>Reference name=System.Reason</p></td> + <td>String</td> + <td>All (except Test Case and Shared Steps)</td> +</tr> + +<tr> + <td>Resolved By <sup>1, 2</sup> </td> + <td>The date and time when the work item was moved into a resolved or done state. +<p>Reference name=Microsoft.VSTS.Common.ResolvedBy</p></td> + <td>String</td> + <td>All</td> +</tr> + +<tr> + <td>Resolved Date <sup>2</sup> </td> + <td>The date and time when the work item was moved into a resolved or done state. +<p>Reference name=Microsoft.VSTS.Common.ResolvedDate</p></td> + <td>DateTime</td> + <td>All</td> +</tr> + +<tr> + <td>Resolved Reason <sup>2</sup> </td> + <td>The reason why a work item was resolved. For example, the user story is code complete or the bug is fixed. +<p>This field is read-only and only valid for Agile and CMMI work item types.</p> +<p>Reference name=Microsoft.VSTS.Common.ResolvedReason</p></td> + <td>String</td> + <td>All (Agile, CMMI)</td> +</tr> + + +<tr> + <td>Reviewed By </td> + <td>The name of the team member who responded to a code review request and is cataloged in the code review response. </p> + <p>Reference name=Microsoft.VSTS.Common.ReviewedBy</p> + </td> + <td>String</td> + <td>Code Review Response + </td> +</tr> + +<tr> + <td>State <sup>2, 3</sup> </td> + <td>The current state of the work item. This field allows you to update the status of a work item as it progresses from new or active to a done or closed state. + <p>Values are defined within the ```WORKFLOW``` section of the WIT definition using the ```STATE``` element. To add a custom state to VSTS, see [Customize the workflow for a process](../process/customize-process-workflow.md). To add or modify States or the workflow for TFS, see [Change the workflow for a work item type](../reference/change-workflow-wit.md).</p> +<p>Reference name=System.State</p></td> + <td>String</td> + <td>All</td> +</tr> + + +<tr> + <td>State Changed Date</td> + <td>The date and time when the value of the State field changed. +<p>Reference name=Microsoft.VSTS.Common.StateChangeDate</p></td> + <td>DateTime</td> + <td>All</td> +</tr> + +</tbody> +</table> + +####Notes + +<a id="sync"> </a> +1. By default, system synchronizes system-defined person-name fields with Active Directory (TFS) or Azure Active Directory (VSTS). These fields include: Activated By, Assigned To, Closed By, Created By, and Resolved By. You can grant access to a team project by adding security groups that you created in AD or AAD or by adding accounts to existing or custom groups defined from the collection setting Security hub. See [Set up groups for use in TFS deployments](../../tfs-server/admin/setup-ad-groups.md). + + You can enable or disable synchronization for a person-name field by using the **witadmin changefields** command-line tool. You can also synchronize custom person-name fields by specifying the **syncnamechanges** attribute. See [Manage work item fields](../reference/witadmin/manage-work-item-fields.md) and [FIELD (Definition) element reference](https://msdn.microsoft.com/library/aa337627.aspx). + +2. Reportable field with attribute set to Dimension. Reportable data is exported to the data warehouse and can be included in Excel or SQL Server reports. For on-premises TFS, use the [**witadmin changefield** command](../reference/witadmin/manage-work-item-fields.md) to change the reportable attribute for a field. + +3. Indexed field. Enabling indexing for a field may increase the performance of finding work items whose queries specify that field. For on-premises TFS, use the [**witadmin indexfield** command](../reference/witadmin/manage-work-item-fields.md) to change the index attribute for a field. + +4. Available only from VSTS or from TFS 2015.1 or later version. + +5. This field applies to all work item types that appear on the Kanban board. This includes all WITs added to the Requirement Category and may include those added to the Bug Category based on the team setting for [Show bugs on boards and backlogs](../customize/show-bugs-on-backlog.md). + If you want to modify a board-related field, such as Board Column or Board Lane, from the work item form, you must add it to the form. For more information, see [Add or modify a work item field](../customize/add-modify-field.md). + + +##Related notes + +For more query examples, see [Create managed queries](example-queries.md). + +<a id="assigned_to-field"> </a> + +[!INCLUDE [temp](../_shared/rest-apis-queries.md)] + \ No newline at end of file diff --git a/docs/work/track/query-numeric.md b/docs/work/track/query-numeric.md new file mode 100644 index 00000000000..70ea648f96f --- /dev/null +++ b/docs/work/track/query-numeric.md @@ -0,0 +1,348 @@ +--- +title: Query by numeric field | VSTS & TFS +description: Track work by creating queries based on effort, story points, schedules, or time tracking fields in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 78fe418f-fbd8-4ae2-97d7-c754c14dd3cd +ms.manager: douge +ms.author: kaelli +ms.date: 11/02/2016 +--- + + +# Query by numeric fields + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +How do I determine how much work each developer has completed on my team? Is there a way to sum up the effort or story points for an iteration? + +The most common numeric fields track effort for items in the Requirements category or estimated, remaining, and completed work for items in the Task category. With queries you can list the work items of interest, and then define a chart that shows either a count of work items or a sum of a numeric field. + + +###Tips for developing chart-based-queries: + +- You can only add charts for flat-list queries +- Chart options reference either query filters or fields displayed through column options +- Save changes you make to your query prior to adding or modifying a chart. +- To group one or more clauses, select them and then choose the ![Group Query Clause icon](../_img/icons/group-clauses-icon.png) group clauses icon. To ungroup, click on the grouped clause. + +For additional details on creating queries and chart-based-queries, see [Use the query editor to list and manage queries](using-queries.md) and [Charts](../../report/charts.md). If you want to add a custom field to track and generate sums of other numeric values, see [Add or modify a field](../customize/add-modify-field.md). + +### Useful filters +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="36%">Filter for</th> +<th width="64%">Include these query clauses</th> +</tr> +<tr> +<td>User stories or bugs +</td> +<td> +```Work Item Type _ In _ User Story,Bug``` +</td> +</tr> +<tr> +<td>Tasks or bugs +</td> +<td> +```Work Item Type _ In _ Task,Bug``` +</td> +</tr> +<tr> +<td> +Items that are Active or Closed +</td> +<td> +```State _ In _ Active,Closed``` +</td> +</tr> + +<tr> +<td> +Items in the Requirements category +</td> +<td> +```Work Item Type _ In Group _ Microsoft.RequirementCategory``` +</td> +</tr> + + +<tr> +<td> +Unestimated user stories +</td> +<td> +```Story Points _ <> _ (leave Value field blank) ``` +</td> +</tr> + +</tbody> +</table> + + +<a id="counts"/> +## Queries and charts based on counts + +All queries show a count of items when you run the query. Here we define a flat-list query that filters for bugs in any state. + +<img src="_img/query-effort-active-bugs-count-summary.png" alt="Query bugs any state, count of work items summary" style="border: 2px solid #C3C3C3;" /> + +In addition, all charts contain a Values selection designed to display a count of work items within the chart. + +### Count of bugs per developer + +Create an active bugs query and modify the column options to show Assigned To and State. Then, add a pivot chart that displays the assignments and state. + +<img src="_img/query-effort-config-chart-count-bugs-state-pivot-chart.png" alt="Configure chart, count of bugs by developer, area, pivot chart" style="border: 2px solid #C3C3C3;" /> + +### Count of bugs by state and area + +Using the same flat-list query that filters for bugs shown in the previous section, you can show a count based on area. Modify the column options to show the Area Path. Then, add a pivot chart that displays the state and area path. + +<img src="_img/query-effort-config-chart-count-bugs-area-state-pivot-chart.png" alt="Configure chart, count of bugs by area, state, pivot chart" style="border: 2px solid #C3C3C3;" /> + +<a id="effort"/> +##Queries and charts based on effort or story points + +You can assign Story Points to user stories or bugs when you work in an Agile process. Or, Effort to product backlog items and bugs when you work in a Scrum process. For more information, see [Agile](../guidance/agile-process.md), [Scrum](../guidance/scrum-process.md), or [CMMI](../guidance/cmmi-process.md) work item types and workflow topics. + +### Sum of story points and their status + +>[!NOTE] +>**Feature availability**: The **Sum** feature is supported on VSTS and TFS 2013.4 and later versions. + +Create a query that filters for User Story as the work item type and modify the column options to show Story Points and State. + +<img src="_img/query-effort-sum-story-points-iteration.png" alt="Query editor, flat list, open stories" style="border: 2px solid #C3C3C3;" /> + +Then, add a stacked bar chart that sums the Story Points. + +<img src="_img/query-effort-config-chart-sum-story-points-iteration.png" alt="Configure chart, sum of story points per iteration, stacked bar chart" style="border: 2px solid #C3C3C3;" /> + +>[!NOTE] +>For information on system-defined cumulative flow diagrams, see [Cumulative flow](../../report/guidance/cumulative-flow.md). + +###Show a burnup chart of user stories for an iteration + +Create a query that filters for User Story as the work item type and in the Active or Closed state. Modify the column options to show Story Points. + +<img src="_img/query-effort-sum-story-points-active-closed.png" alt="Query editor, flat list, user stories - active or closed" style="border: 2px solid #C3C3C3;" /> + +Then, add a stacked area trend chart that sums the Story Points. + +<img src="_img/query-effort-config-chart-sum-story-points-burnup.png" alt="Configure chart, sum of story points per iteration, stacked bar chart" style="border: 2px solid #C3C3C3;" /> + +<a id="work"/> +##Queries and charts based on remaining and completed work + +Based on the process your team project references, you can assign the following fields to tasks or bugs. + +| Process | Available fields | +|---------|---------|---------| +| Agile | Original Estimate, Remaining Work, Completed Work | +| Scrum | Remaining Work | +| CMMI | Original Estimate, Remaining Work, Completed Work | + + + + + +### Sum of remaining work per developer + +>[!NOTE] +>**Feature availability**: The **Sum** feature is supported on VSTS and TFS 2013.4 and later versions. + +If you follow Scrum practices and estimate Remaining Work for your tasks and bugs, you can get a roll up of the amount of work remaining for each developer with the following query and chart. By using the In operator and including both Task and Bug, you include any bugs that are being tracked as tasks. + +<img src="_img/query-effort-tasks-bugs-list.png" alt="Query of tasks and bugs for sprint" style="border: 2px solid #C3C3C3;" /> + +Add Remaining Work as a column option to the query and save. To view a sum of the remaining work, add a pivot chart as shown. + +<img src="_img/example-query-config-chart-sum-remaining-work-pivot-chart.png" alt="Configure chart, sum of remaining work by developer, area, pivot chart" style="border: 2px solid #C3C3C3;" /> + + +>[!NOTE] +>For information on system-defined sprint burndown charts, see [Sprint burndown](../scrum/sprint-burndown.md). + + +## Fields used to estimate and track work + +The following table describes the activity-based and numeric fields that you can use to track work. For information on date-related fields, such as Start Date, Finish Date, and Target Date, see [Query by date or current iteration](query-by-date-or-current-iteration.md). + + +<table width="100%"> +<thead> +<tr> + <th width="17%">Field name</th> + <th width="66%">Description</th> + <th width="17%">Work item type</th> +</tr> +</thead> +<tbody valign="top"> +<tr> + <td><p>Activity <sup>1, 2</sup></p></td> + <td><p>The type of activity that is required to perform a task.To learn more about how this field is used, see [Capacity planning](../scale/capacity-planning.md). Allowed values are:</p><ul><li><p>Deployment</p></li><li><p>Design</p></li><li><p>Development</p></li><li><p>Documentation</p></li><li><p>Requirements</p></li><li><p>Testing</p></li></ul> + + + <blockquote><b>Note:</b> This field <sup>3</sup> is also used to calculate capacity by activity. It is assigned to <code>type="Activity"</code> in the ProcessConfiguration file. +</blockquote> +<p>Reference name=Microsoft.VSTS.Common.Activity, Data type=String</p> +</td> + <td>Task, Bug<sup>4</sup> (Agile and Scrum)</td> + +</tr> +<tr> + <td><p>Business Value</p></td> + <td><p>A subjective unit of measure that captures the relative business value of a product backlog item or feature compared to other items of the same type. An item that is assigned a higher number should be considered as having more business value than an item that is assigned a lower number.</p><p>Reference name=Microsoft.VSTS.Common.BusinessValue, Data type=Integer</p> </td> + <td>Epic, Feature</td> +</tr> + +<tr> + <td><p>Completed Work</p></td> + <td><p>The amount of work that has been spent implementing a task. You can specify work in hours or in days. There are no inherent time units associated with this field.</p> +<p>Reference name=Microsoft.VSTS.Scheduling.CompletedWork, Data type=Double</p> +</td> +<td>Task, Bug<sup>4</sup></td> +</tr> +<tr> + <td><p>Discipline <sup>1, 2</sup></p></td> + <td><p>The type of activity or discipline that is assigned to a task. To learn more about how this field is used, see [Capacity planning](../scale/capacity-planning.md). Allowed values are:</p><ul><li><p>Analysis</p></li><li><p>Development</p></li><li><p>Test</p></li><li><p>User Education</p></li><li><p>User Experience</p></li></ul><blockquote>Note: This field <sup>3</sup> is also used to calculate capacity by activity. It is assigned to <code>type="Activity"</code> in the ProcessConfiguration file. +</blockquote> + +<p>Reference name=Microsoft.VSTS.Common.Discipline, Data type=String</p> +</td> +<td>Task, Bug <sup>4</sup> (CMMI)</td> +</tr> + +<tr> + <td><p>Effort</p></td> + <td><p>A subjective unit of measure that captures the size of a bug or product backlog item. If you assign more effort to an item, you indicate that more work is required to implement it. </p><p>This field <sup>3</sup> is also used to calculate team velocity and forecasting. It is assigned to <code>type="Effort"</code> in the ProcessConfiguration file.</p> +<p>Reference name=Microsoft.VSTS.Scheduling.Effort, Data type=Double</p> +</td> +<td>Product Backlog Item, Bug <sup>4</sup> (Scrum)</td> +</tr> +<tr> + <td><p>Story Points</p></td> + <td><p>A subjective unit of measure that captures the size of a user story. If you assign more points to a user story, you indicate that more work is required to implement it.</p><p>This field <sup>3</sup> is also used to calculate team velocity and forecasting. It is assigned to <code>type="Effort"</code> in the ProcessConfiguration file. </p> +<p>Reference name=Microsoft.VSTS. Scheduling.StoryPoints, Data type=Double</p> +</td> +<td>User Story, Bug <sup>4</sup> (Agile)</td> +</tr> +<tr> + <td><p>Size </p></td> + <td><p>A subjective unit of measure that captures the size of a requirement. The larger the size, the more work is required to implement it. </p><p>This field<sup>3</sup> is also used to calculate team velocity and forecasting. It is assigned to <code>type="Effort"</code> in the ProcessConfiguration file. </p> +<p>Reference name=Microsoft.VSTS. Scheduling.Size, Data type=Double</p> +</td> + <td>Requirement, Bug <sup>4</sup> (CMMI)</td> +</tr> +<tr> + <td><p>Original Estimate</p></td> + <td><p>The amount of work required to complete a task. You can specify work in hours or in days. There are no inherent time units associated with this field. </p> +<p>Reference name=Microsoft.VSTS.Scheduling.OriginalEstimate, Data type=Double</p> +</td> + <td>Task, Bug <sup>4</sup> (Agile and CMMI)</td> +<tr> + <td><p>Remaining Work</p></td> + <td><p>The amount of work that remains to finish a task. You can specify work in hours or in days. There are no inherent time units associated with this field.</p> +<p>This field <sup>3</sup> is also used to calculate burn down. It is assigned to <code>type="RemainingWork"</code> in the ProcessConfiguration file.</p> +<blockquote> +<b>Note:</b> For VSTS, the task board always shows "h" for hours in relationship to Remaining Work. For TFS, you can modify the ProcessConfiguration filefor the Remaining Work type field to specify "d" for days, or other preferred label. +</blockquote> +<p>Reference name=Microsoft.VSTS.Scheduling.RemainingWork, Data type=Double</p> +</td> + <td>Task, Bug<sup>4</sup></td> +</tr> + +<tr> + <td><p>Requires Review</p></td> + <td><p>Indicates the task requires review. You can specify <strong>Yes</strong> or <strong>No</strong> (default).</p> + +<p>Reference name=Microsoft.VSTS.CMMI.RequiresReview, Data type=String</p> +</td> + <td>Task (CMMI)</td> +</tr> + +<tr> + <td><p>Requires Test</p></td> + <td><p>Indicates the task requires a test. You can specify <strong>Yes</strong> or <strong>No</strong> (default).</p> + +<p>Reference name="Microsoft.VSTS.CMMI.RequiresTest, Data type=String</p> +</td> + <td>Task (CMMI)</td> +</tr> + + +<tr> + <td><p>Task Type<sup>1</sup></p></td> + <td><p>Specifies the kind of task to implement. Allowed values are:</p><ul><li><p>Corrective Action</p></li><li><p>Mitigation Action</p></li><li><p>Planned</p></li></ul> +<p>Reference name=Microsoft.VSTS.CMMI.TaskType, Data type=String</p> +</td> + <td>Task, Bug<sup>4</sup> (CMMI process)</td> +</tr> + + + +</tbody> +</table> + +**Notes:** + +1. To change the menu selection (on-premises TFS only), see [Add or modify a field, customize a pick list](../customize/add-modify-field.md). +2. The values displayed in the [Capacity page](../scale/capacity-planning.md) for Activity(Agile or Scrum) or Discipline (CMMI) reflect a union of all values defined for the field in all team projects within the project collection instance. Therefore, to restrict the values that appear for Capacity on the sprint backlog pages, you must make the values match in all the team projects for the field assigned to `type="Activity"`.</p> + +3. To change the ProcessConfiguration field assignment (on-premises TFS only), see [Process configuration XML element reference](../reference/process-configuration-xml-element.md). + +4. Each team can configure their Agile tools to determine if [bugs are treated similar to requirements or tasks](#show-bugs). Since bugs can appear either with requirements or tasks, fields used to estimate effort at the requirement-level and the task-level are included in the work item form. + +## Related notes +For information on adding custom fields, see [Customize your work tracking experience](../customize/customize-work.md). + +The main tools you use to plan and track work are described here: +- [Create your backlog](../backlogs/create-your-backlog.md) +- [Sprint planning](../scrum/sprint-planning.md) +- [Capacity planning](../scale/capacity-planning.md) +- [Task board](../scrum/task-board.md) +- [Kanban board](../kanban/kanban-basics.md) + +For more information on using work items and queries, see: +- [Query editor](using-queries.md) +- [Query fields, operators, and macros](query-operators-variables.md) +- [Add work items](../backlogs/add-work-items.md) +- [Work item field index](../guidance/work-item-field.md) +- [Create managed queries](example-queries.md) + +<a id="show-bugs"/> + +<a id="rollup"/> +### Rollup numeric values across work item types + +Rollup provides summed values of select fields for all child work items of a parent. Natively, VSTS and TFS provide rollup of Remaining Work for tasks on the Task board. For other rollup requirements, see the following topics: +- [Support rollup of work and other fields](../reference/support-rollup-of-work-and-other-fields.md) +-[Rollup estimated and actual work using Project](../office/rollup-estimated-and-actual-work-using-project.md) +- [Create rollup charts with Power BI](../../report/powerbi/create-rollup-charts.md) + +<a id="category"/> +### What items appear in the Requirement or Task categories? + +The default assignments of work item types to each category are listed below for each process. + +| Process | Requirement category | Task category | +|---------|---------|---------| +| Agile | User Story | Task | +| Scrum | Product Backlog Item | Task | +| CMMI | Requirement | Task | + +However, each team can determine if the Bug work item type appears in either the Requirement or Task category. See [Show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md). + +Also, you can add custom work item types to a backlog. For details, see [Add or modify a work item type, Add a custom WIT to a backlog or board ](../customize/add-modify-wit.md). + + +<!--- +For more information about how to track work, see [Sprint planning](../scrum/sprint-planning.md). + + By tracking work, you gain more insight into which user stories, requirements, or backlog items are almost finished and what the team burn rate is. Several reports and dashboards provide charts that display the data that these fields contain. + +You specify the level of effort for the tasks that you are assigned. + +--> \ No newline at end of file diff --git a/docs/work/track/query-operators-variables.md b/docs/work/track/query-operators-variables.md new file mode 100644 index 00000000000..6f92434b69c --- /dev/null +++ b/docs/work/track/query-operators-variables.md @@ -0,0 +1,335 @@ +--- +title: Query fields, operators, and macros/variables | VSTS & TFS +description: Descriptions for field data types, operators, and macros/variables used by the Query Editor in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 814c2dca-cf8f-44bf-bba1-a5d8e293fc05 +ms.manager: douge +ms.author: kaelli +ms.date: 04/04/2017 +--- + + +# Query fields, operators, and macros + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You find and create lists of work items by creating work item queries. By defining one or more clauses, you filter from all work items within a team project or team project collection to return the set of work items that interest you. For each clause, you specify a field, an operator, and a value or variable. + +For example, you can search for all work items assigned to you by specifying the **Assigned To** field, the equals (=) operator, and the as **@Me** variable which represents your user account. + +**Sample query clause** + +<table> +<tr> + <th>And/Or</th> + <th>Field</th> + <th>Operator</th> + <th>Value</th></tr> +<tr> + <td><p><strong>And</strong></p></td> + <td><p><strong>Assigned To</strong></p></td> + <td><p><strong>=</strong></p></td> + <td><p><strong>@Me</strong></p></td> +</tr> +</table> + + +For more general information about queries, see [Use the query editor to list and manage queries](using-queries.md). For information about how to navigate within the query editor or query view using keyboard shortcuts, see [Keyboard shortcuts](../../reference/keyboard-shortcuts.md?toc=/vsts/work/track/toc.json&bc=/vsts/work/track/breadcrumb/toc.json). + +**Checklist for how to define a query clause:** + +1. In the first empty row, under the **Field** column heading, choose the down arrow to display the list of available fields, and choose an item in the list. + + For more information, see [Query Fields and Values](#fields-values). + +2. In the same row, under the **Operator** column heading, choose the down arrow to display the list of available operators, and choose an item in the list. + + For more information, see [Operators](#operators). + +3. In the same row, under the **Value** column heading, either type a value, or choose the down arrow, and choose an item in the list. + + For more information about how to use variables to specify the current team project, user, or date, see [Variables](#variables). + +5. To add a clause, choose **Click here to add a new clause** or **Add a new clause**. + + You can add a clause to the end of the query, insert a clause after an existing clause (![](_img/query-fields-operators-values-variables/IC588311.png)), and remove (![](_img/query-fields-operators-values-variables/IC588312.png)), group (![](_img/query-fields-operators-values-variables/IC588313.png)), and ungroup (![](_img/query-fields-operators-values-variables/IC588314.png)) clauses as needed. + +<a id="and-or" /> +## And/Or + +You specify **And** or **Or** to create logical expressions of your query clauses. Specify **And** to find work items that meet the criteria in both the current clause and the previous clause. Specify **Or** to find work items that meet the criterion in either the current clause or the previous clause. + +You can add one new clause for each work item field in order to refine your search criteria, so that it returns only the set of work items that you want. If you do not receive the results that you expect from your query, you can add, remove, group, or ungroup query clauses to refine your query results. + +Query clauses can be grouped to operate as a single unit separate from the rest of the query, similar to putting parentheses around an expression in a mathematical equation or logic statement. When you group clauses, the **AND** or **OR** for the first clause in the group applies to the whole group. + +As the following example shows, the grouped clauses are translated to the corresponding logical expression. The first expression returns work items that are priority 1, as well as all active bugs of any priority. The second expression returns all active priority 1 work items, plus all priority 1 bugs whether they are active or not. + +|Grouped clauses|Logical expression| +|---|---| +|![](_img/query-fields-operators-values-variables/IC425364.png)|Priority=1 OR (Work Item Type=Bug AND State=Active)| +|![](_img/query-fields-operators-values-variables/IC425365.png)|Priority=1 AND (Work Item Type=Bug OR State=Active)| + +For more information, see [Use the query editor to list and manage queries](using-queries.md). + +<a id="fields-values" /> +## Query field data types and values + +The value you specify for a field must conform to the data type for that field. The following table lists the supported data types: + +<table valign="top"> +<thead> +<tr> +<th width="12%"><p>Data type</p></th> +<th width="88%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> + <td><p><strong>Boolean</strong> </p></td> + <td><p>Specifies a field that takes on a True/False value. </p> +<blockquote style="font-size: 13px"><b>Feature availability:</b> The Boolean data type field is only supported for VSTS and TFS 2017 and later versions. +</blockquote> +</td></tr> + +<tr> + <td><p><strong>DateTime</strong> </p></td> + <td><p>A Coordinated Universal Time (UTC) moment in time. You can specify a variable, such as <strong>@Today</strong> or <strong>@Today-1</strong>, or a value, such as 1/1/2012. For query examples, see [Query by date or@CurrentIteration](query-by-date-or-current-iteration.md). </p></td></tr> +<tr> + <td><p><strong>Double</strong> </p></td> + <td><p>A real number, such as 0.2 or 3.5. For query examples, see [Query by numeric fields](query-numeric.md). </p></td></tr> +<tr> + <td><p><strong>GUID</strong> </p></td> + <td><p>A character string that represents a unique ID.</p></td></tr> +<tr> + <td><p><strong>History</strong> </p></td> + <td><p>Custom formatted field used to track historical information. This data type is only used to support the <strong>History</strong> field. This field is automatically indexed for full-text search when full-text search is available. See [Full-Text and partial word searches](#full-text) described later in this topic. For query examples, see [History and auditing](history-and-auditing.md). </p></td></tr> +<tr> + <td><p> <strong>HTML</strong> </p></td> + <td><p>Text strings that support formatted descriptions, such as the <strong>Description</strong> or <strong>Repro Steps</strong> fields. These fields are automatically indexed for full-text search when full-text search is available. See [Full-Text and partial word searches](#full-text) described later in this topic. To query rich-text fields, see [Query by titles, IDs, and rich-text fields](titles-ids-descriptions.md). </p> +</td> +</tr> +<tr> + <td><p> <strong>Integer</strong> </p></td> + <td><p>A 32-bit integer that is signed, such as 0, 1, 2, 34.</p></td></tr> +<tr> + <td><p> <strong>PlainText</strong> </p></td> + <td><p>Text strings that support long descriptions, such as the <strong>Application Start Information</strong> field. These fields are automatically indexed for full-text search, when full-text search is available. See [Full-Text and partial word searches](#full-text) described later in this topic. To query plain-text fields, see [Query by titles, IDs, and rich-text fields](titles-ids-descriptions.md).</p></td></tr> +<tr> + <td><p> <strong>String</strong> </p></td> + <td><p>Short text string that can contain up to 255 Unicode characters. String text fields are often used to support pick lists or drop-down menus. </p></td></tr> +<tr> + <td><p> <strong>TreePath</strong> </p></td> + <td><p>A branching tree structure, such as an Area Path or Iteration path. You must choose an item in a list of valid values. You can find work items that equal or are under a tree structure. For more information, see [Add and modify area and iteration paths](../customize/set-area-paths.md).</p></td></tr></tbody> +</table> + +<a id="operators" /> +## Query operators + +You can use query operators in the following table to specify how each value in a clause must relate to the corresponding value in a work item. For information about the data type that is assigned to work item fields, see [Work item field reference](../guidance/work-item-field.md). + +<table width="100%"> +<thead valign="bottom"> +<tr> +<th width="16%">Query operator</th> +<th width="44%">Returns work items if the value in the work item matches the criteria listed</th> +<th width="40%">Applicable data types</th> +</tr> +</thead> +<tbody valign="top"> +<tr> + <td><p><strong>=</strong></p></td> + <td><p>Matches the value in the clause.</p></td> + <td><p>Number, which includes <strong>Double</strong>, <strong>GUID</strong>, <strong>Integer</strong>, and <strong>String</strong>, <strong>DateTime</strong>, and <strong>TreePath</strong></p><p></p></td></tr> +<tr> + <td><p><strong><></strong></p></td> + <td><p>Does not match the value in the clause.</p></td> + <td><p>Number, <strong>String</strong>, <strong>DateTime</strong>, and <strong>TreePath</strong></p></td></tr> +<tr> + <td><p><strong>></strong></p></td> + <td><p>Is larger than the value in the clause.</p></td> + <td><p>Number, <strong>String</strong>, and <strong>DateTime</strong></p></td></tr> +<tr> + <td><p><strong><</strong></p></td> + <td><p>Is less than the value in the clause.</p></td> + <td><p>Number, <strong>String</strong>, and <strong>DateTime</strong></p></td></tr> +<tr> + <td><p><strong>>=</strong></p></td> + <td><p>Is larger than or equal to the value in the clause.</p></td> + <td><p>Number, <strong>String</strong>, and <strong>DateTime</strong></p></td></tr> +<tr> + <td><p><strong><=</strong></p></td> + <td><p>Is less than or equal to the value in the clause.</p></td> + <td><p>Number, <strong>String</strong>, and <strong>DateTime</strong></p></td></tr> +<tr> + <td><p><strong>=[Field]</strong></p></td> + <td><p>Matches the value that is contained in the specified field.</p></td> + <td><p>Name of a field that is of the same data type as the specified field</p></td></tr> +<tr> + <td><p><strong><>[Field]</strong></p></td> + <td><p>Does not match the value that is contained in the specified field.</p></td> + <td><p>Name of a field that is of the same data type as the specified field</p></td></tr> +<tr> + <td><p><strong>>[Field]</strong></p></td> + <td><p>Is larger than the value that is contained in the specified field.</p></td> + <td><p>Name of a field that is of the same data type as the specified field</p></td></tr> +<tr> + <td><p><strong><[Field]</strong></p></td> + <td><p>Is less than the value that is contained in the specified field.</p></td> + <td><p>Name of a field that is of the same data type as the specified field</p></td></tr> +<tr> + <td><p><strong>>=[Field]</strong></p></td> + <td><p>Is larger than or equal to the value that is contained in the specified field.</p></td> + <td><p>Name of a field that is of the same data type as the specified field</p></td></tr> +<tr> + <td><p><strong><=[Field]</strong></p></td> + <td><p>Is less than or equal to the value that is contained in the specified field.</p></td> + <td><p>Name of a field that is of the same data type as the specified field</p></td></tr> +<tr> + <td><p><strong>Contains</strong></p></td> + <td><p>Contains an exact or partial match of the text string within the field you selected for filtering.</p></td> + <td><p> <strong>String</strong> </p></td></tr> +<tr> + <td><p><strong>Does Not Contain</strong></p></td> + <td><p>Does not contain an exact or partial match of the text string within the field you selected for filtering.</p></td> + <td><p> <strong>String</strong> </p></td></tr> +<tr> + <td><p><strong>Contains Words</strong></p></td> + <td><p>Contains the exact text string or words within the field you selected for filtering. You can also enter partial words or phrases that contain the wildcard character, <strong></strong>*. For restrictions, see [Full-text searches] (#full-text) for server and collation requirements.</p></td> + <td><p>Long-text fields that are indexed for full-text search, which correspond to all <strong>PlainText</strong> and <strong>HTML</strong> fields and <strong>Title</strong>.</p></td></tr> +<tr> + <td><p><strong>Does Not Contain Words</strong></p></td> + <td><p>Does not contain the exact text string or words within the field you selected for filtering.</p></td> + <td><p>Text fields that are indexed for full text search.</p></td></tr> +<tr> + <td><p><strong>In</strong></p></td> + <td><p>Matches any value in a delimited set. For example, you can find work items whose IDs are 100, 101, and 102 if you specify those values for the ID field.</p> +<blockquote><strong>Important:</strong> Separate values with the list separator that corresponds to the regional settings that are defined for your client computer. For example, you might use a comma(,). +</blockquote> +</td> + <td><p>Number, <strong>String</strong>, <strong>DateTime</strong>, <strong>TreePath</strong></p></td></tr> +<tr> + <td><p><strong>In Group</strong></p></td> + <td><p>Matches a value that is a member of the group in the clause. Groups correspond to the name of a category or a TFS group. For example, you can create a query to find all work items that are assigned to members of the Contributors group or to a team. Team groups are created when you create a team. The name of team groups follows the pattern [<em>Team Project Name</em>]\ <em>Team Name</em>.</p><p>You can't specify a security or email distribution group as a value.</p><p>For worked examples, see [Create managed queries](example-queries.md).</p></td> + <td><p> <strong>String</strong> that matches the name of a user group or category group in Team Foundation Server.</p> +<blockquote><strong>Note:</strong> You can use the <strong>In Group</strong> operator only with fields that use the <strong>String</strong> data type or the <strong>Work Item Type</strong> field. The operator cannot be used to query Azure Active Directory groups. +</blockquote> +<p>For information about category groups, see [Use categories to group work item types](../reference/use-categories-to-group-work-item-types.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json). For more information about Azure Active Directory and VSTS, see [Access with Azure Active Directory groups](../../accounts/manage-azure-active-directory-groups-vsts.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json).</p></td></tr> +<tr> + <td><p><strong>Not in Group</strong></p></td> + <td><p>Does not match a value that is a member of the group in the clause.</p></td> + <td><p> <strong>String</strong> that matches the name of a user group in Team Foundation Server or a category group defined for a team project.</p> +<blockquote><strong>Note:</strong> You can use the <strong>Not In Group</strong> operator only with fields that use the <strong>String</strong> data type or the <strong>Work Item Type</strong> field. The operator cannot be used to query Azure Active Directory groups. +</blockquote> +<p>For more information about Azure Active Directory and VSTS, see [Access with Azure Active Directory groups](../../accounts/manage-azure-active-directory-groups-vsts.md?toc=/vsts/accounts/toc.json&bc=/vsts/accounts/breadcrumb/toc.json).</p></td> +</tr> +<tr> + <td><p><strong>Was Ever</strong></p></td> + <td><p>Matches the value in the clause at any previous point.</p></td> + <td><p> <strong>String</strong> , <strong>DateTime</strong></p></td></tr> +<tr> + <td><p><strong>Under</strong></p></td> + <td><p>Matches the value in the clause or is contained under the node in the clause.</p></td> + <td><p> <strong>TreePath</strong> </p></td></tr> +<tr> + <td><p><strong>Not Under</strong></p></td> + <td><p>Does not match the value in the clause and is not contained under the node in the clause.</p></td> + <td><p> <strong>TreePath</strong> </p></td></tr></tbody> +</table> + +<a id="variables" /> +<a id="macros" /> +## Query macros or variables + +You can use the macros described in the following table to filter your queries based on specific fields. + + +<table> +<thead valign="bottom"> +<tr> +<th width="14%"><p>Macro</p></th> +<th width="84%"><p>Description</p></th> +</tr> +</thead> +<tbody valign="top"> +<tr> + <td><b>[Any]</b></td> + <td>Use in conjuction with the **Work Item Type** field to search across all work item types. For example, `Work Item Type=[Any]` won't place any filters based on the work item type. +</td> +</tr> + + +<tr> + <td>**@CurrentIteration**</td> + <td>Use in conjuction with the **Iteration Path** field to automatically filter for work items assigned to the current sprint based on the [current team focus or context](../how-to/switch-team-context-work.md). For specific examples, see [Query by date or current iteration](query-by-date-or-current-iteration.md). +<blockquote><strong>Feature availability:</strong> The **@CurrentIteration** macro is supported for VSTS and TFS 2015 and later versions. The macro only works when run from the web portal. +</blockquote> +</td> +</tr> + +<tr> + <td><b>@Follows</b></td> + <td>Use in conjuction with the **ID** field and **In** operator to list all work items that you are following. To learn more about the Follow feature, see [Follow a work item or pull request](../../collaborate/follow-work-items.md). +<blockquote><strong>Feature availability:</strong> The **@Follow** macro is supported for VSTS and TFS 2017 and later versions. +</blockquote> +</td> +</tr> + +<tr> + <td>**@Me**</td> + <td>Use in conjunction with an identity or user account field to automatically search for items associated with your user or account name. For example, you can find work items that you opened with the clause `Created By=@Me`. For additional examples, see [Query by assignment, workflow or Kanban board changes](query-by-workflow-changes.md). +</td> +</tr> +<!--- +<tr> + <td><b>@MyRecentActivity</b></td> + <td>Use in conjuction with the **ID** field and **In** operator to list all work items that you are following. To learn more about the Follow feature, see [Follow a work item or pull request](../../collaborate/follow-work-items.md). +<blockquote><strong>Feature availability:</strong> The **@MyRecentActivity** macro is supported for VSTS and TFS 2018 and later versions. +</blockquote> +</td> +</tr> +--> + +<tr> + <td>**@Project**</td> + <td>Use in conjuction with the **Team Project** field to filter for work items in the current team project. For example, you can find all the work items in the current team project with the clause `Team Project=@Project`. + +<blockquote><b>Feature availability:</b> For VSTS and TFS 2015.1 and later versions, the system automatically defaults to filtering based on the current team project. To learn more, see [Query across team projects](using-queries.md#across-projects). +</blockquote> +</td> +</tr> + +<tr> + <td>**@Today**</td> + <td>Use with a `DateTime` field to filter for work items that relate to the current date or to an earlier date. You can also modify the **@Today** macro by subtracting days. For example, you can find all items created in the last week with the clause `Created Date=@Today-7`. For additional examples, see [Query by date or current iteration](query-by-date-or-current-iteration.md).</td> +</tr> + +</tbody> +</table> + + +<a id="full-text" /> +## Full-text and partial word searches + +Specify **Contains** or **Does Not Contain** to search against exact or partial matches of a word or phrase. Specify **Contains Words** or **Does Not Contain Words** to search against an exact phrase or to use the wildcard character, **\***. These operators use the full-text search index. You can only use the wildcard character at the end of a partial word or phrase. + +For examples, see [Example work item queries](example-queries.md) and [Query for work items using the History field](history-and-auditing.md). + +>[!NOTE] +>Not all deployments support full-text searches. For example, SQL Express and SQL Azure, which support VSTS platform, do not support full-text search. In these instances, you will only see the **Contains** and **Does not Contain** operators. + +**Contains Words** and **Does Not Contain Words** filter items based on the full-text search index created for long-text fields. Team Foundation automatically indexes all long-text fields with a data type of **PlainText** and **HTML** and the **Title** field for full-text search. The index and operators are only available when the SQL Server that supports Team Foundation Server supports full-text search. + +Full-text searches require a SQL collation that corresponds to a language which has a word breaker registered with SQL Server. If the collation settings for the team project collection database used for your Team Foundation Server instance do not correspond to a supported language, your search results may not match your expectations. In these cases, you might try using the **Contains** or **Does Not Contain** operators. + +For more information, see [Full-Text Search Queries and Collation Settings](../../tfs-server/install/sql-server/collation-requirements.md). + +## Query indexed fields + +In addition to the full-text search index, a query index is created. It is based on those fields that have indexing enabled. The query index improves the response time when you run queries that include indexed fields. + +By default, the following fields are indexed: **Assigned To**, **Created Date**, **Changed By**, **State**, **Reason**, **Area ID**, **Iteration ID**, and **Work Item Type**. If there are other fields that your team frequently uses in their queries, you can add them to the query index. + +You use the **witadmin indexfield** command to enable or disable indexing for a field. See [Manage work item fields](../reference/witadmin/manage-work-item-fields.md?toc=/vsts/work/customize/toc.json&bc=/vsts/work/customize/breadcrumb/toc.json). + diff --git a/docs/work/track/search-box-queries.md b/docs/work/track/search-box-queries.md new file mode 100644 index 00000000000..4ec585d58bb --- /dev/null +++ b/docs/work/track/search-box-queries.md @@ -0,0 +1,211 @@ +--- +title: Use the search box for quick queries | VSTS & TFS +description: Use the search box to create a query and filter for assigned to, created by, state, or work item type +ms.prod: vs-devops-alm +ms.technology: vs-devops-wit +ms.topic: get-started-article +ms.assetid: D5A98F10-AAD2-46DD-91DE-41497CF5ECEF +ms.manager: douge +ms.author: kaelli +ms.date: 08/28/2017 +--- + + +# Perform an adhoc search + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +<a id="search-box"/> + +You can find items using shortcut filters or by specifying keywords or phrases, specific fields/field values, assignment or date modifications, or using Equals, Contains, and Not operators. + +<!---Search box queries automatically scope to the items defined to the team project you're currently connected to. To search across team projects, use the [query editor](using-queries.md). Also, searching is not case-sensitive.--> + +<a id="search-selector" /> +<a id="search-box" /> +## Code search vs work item search + +<!--- +>[!NOTE] +><b>Feature availability: </b>You can add the Code Search extension to [VSTS or by upgrading to TFS 2017](../../search/code/administration.md). + +If you've added the [Code Search extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-code-search) to VSTS and TFS 2017, you'll notice that the search box moves to the top row, and you can quickly switch between work item and code searches. --> + +The search box retains the last used search context for each hub. To learn more about code search, see [Get started with Code Search](../../search/code/code-search.md). + +[!INCLUDE [temp](../_shared/search-box.md)] + +Type the ID in the Search work items box and then choose the search icon. The Search work items box is available from a team project context. + + + +### VSTS and TFS 2017 +![Search Work Items Text Box](_img/using-queries-search-box-ts.png) + +Click within the box to view the set of filters for [assignment, workflow state](query-by-workflow-changes.md), [keyword, or work item type](titles-ids-descriptions.md). + +### TFS 2015 +![Search Work Items Text Box](_img/using-queries-search-box.png) + +Use the ![context menu icon](../_img/icons/context_menu.png) context menu to add a filter based on [assignment or workflow status](query-by-workflow-changes.md), [a keyword or work item type](titles-ids-descriptions.md). + +For example, enter ```A=@Me T=Task``` to list all tasks assigned to you. + + + +## Use shortcut filters + +Open the ![Context Menu Icon](_img/example-search-box-queries/IC533396.png) context menu and select an option. + +<table><tr><td>Context menu for search box (web portal)<p><img src="_img/example-search-box-queries/IC588318.png" alt="Search box shortcut menu (web portal)"></td><td>Context menu for search box (Team Explorer)<p><img src="_img/example-search-box-queries/IC588319.png" alt="Search box menu (Team Explorer)"></td></tr></table> + +You can enter or select one or more of the following shortcut identifiers: + +- `A` =for **A**ssigned To, (for example, `A:Annie` or `A=@me`). + +- `C` for = **C**reated By, (for example, `C:Peter` or `C=@me`). + +- `S` for = **S**tate, (for example, `S=New`). + +- `T` for = Work Item **T**ype, (for example, `T=Task`). + +Use the `@Me` and `@Today` macros to specify your user name or today's date. + +Use the `=`, `:`, and `–` operators to specify the operations **Equals**, **Contains**, and **Not**, respectively. + +Finding work items using the search box (Team Explorer) + +![Find a work item using the search text box](_img/example-search-box-queries/IC552976.png) + +You can combine shortcuts and use search operators within the search box. + +In Team Explorer, use the ![Search box clear icon (Team Explorer)](_img/example-search-box-queries/IC588317.png) **Clear** button to remove content from the search box. To switch your context to the search box from within Visual Studio, enter **Ctrl+'**. + +<a id="keywords" /> +## Find items based on keywords or phrases + +Keywords or phrases that you type into the search box return a list of work items that contain those keywords or phrases in the **Description**, **Repro Steps**, or **Title** fields. You must enclose each phrase in quotation marks. + +In the **Search work items** box, type a keyword or phrase that appears in the **Title**, **Description**, or **Repro Steps** fields for the work items of interest. + +Enclose multiple words in quotation marks. + +For example, to find work items with the specified keywords in the **Title** or **Description** fields: + +- For the keyword "duplication" enter **duplication**. +- For the phrase "Getting Started" enter **"Getting Started"**. +- For the phrase "Getting Started" or the keyword "feature" enter **feature "Getting Started"**. + +|Filter for items that contain these keywords or phrases:|Type the following string:| +|---|---| +|duplication|`duplication`| +|Getting Started|`"Getting Started"`| +|feature and Getting Started|`feature "Getting Started"`| + +You can perform partial or exact match queries on a keyword or a phrase contained within any text field. Or, you can perform a full-text search query by filtering on keywords and phrases contained within the full-text search index. Team Foundation automatically indexes all long-text fields with a data type of **PlainText** and **HTML** and the **Title** field for full-text search. + +## Find items based on specific fields and field values + +To find work items based on a keyword or phrase contained within other text string fields, specify either the friendly name or the reference name of the field. Enclose each phrase in quotation marks. You can determine the friendly name of a field by hovering over the field within a work item form. To determine the reference name of commonly used fields or to find a field that is not listed on the form, see [Work item field index](../guidance/work-item-field.md). + +|Filter for items that meet this criteria:|Type the following string:| +|---|---| +|Contains one attached file.|`System.AttachedFileCount=1`| +|Cut user stories.|`T:Story Reason=Cut`<br/>Or<br/>`T="User Story" System.Reason=Cut`| +|Resolved by Peter.|`"Resolved By":Peter` <br/>Or<br/>`Microsoft.VSTS.Common.ResolvedBy:Peter` | +|Modified today.|`"Changed Date"=@Today`| +|Created yesterday as a test activity.|`"Created Date"=@Today-1 Activity=Test `| + +>[!NOTE] +>Some fields, such as **History** and **Description**, do not support partial word text searches. For example, if the **History** field contains the phrase `reproducible behavior` and you search for `History:repro` the work item will not be found. However, if you search for the complete string `History:reproducible` the work item will be found. + +## Use @Me or @Today macros + +The **@Me** macro expands to the full name of the current user in any work item search. The **@Me** macro is especially useful for creating a search that you can share with other users, and it can simplify your work by reducing the number of characters you must type to specify your own user name. For a description of all macros, see [Query fields, operators, and macros, Query macros or variables](query-operators-variables.md#macros). + +<table width="100%"> +<tbody valign="top"> +<tr> +<th width="50%">Filter for</th> +<th width="50%">Type the following string</th> +</tr> +<tr> +<td>Currently assigned to you +</td> +<td> +`A=@Me` +</td> +</tr> + +<tr> +<td>Created by you +</td> +<td> +`C=@Me` +</td> +</tr> + + +<tr> +<td>Resolved yesterday +</td> +<td> +`"Resolved Date"=@Today-1` +</td> +</tr> + +<tr> +<td>Modified 7 days ago +</td> +<td> +`System.ChangedDate=@Today-7` +</td> +</tr> + +<tr> +<td> +Created yesterday under the Phone Saver team +</td> +<td> +           ```Created Date _ = _ @Today-1``` +```And _ Area Path _ = _ FabrikamFiber\Phone Saver``` + +</td> +</tr> + +</tbody> +</table> + + +## Use Equals, Contains, and Not operators + +Use these search operators to specify search criteria: + +   **=** (EQUALS) to search for exact matches of text. +   **:** (CONTAINS) to search for partial matches of text. +   **–** (NOT) to exclude work items that contain certain text. The NOT operator can only be used with field names. + +The following examples show how to use operators when you create a search string. + +|Filter for items that meet this criteria:|Type the following string:| +|---|---| +|Assigned to Peter and not Active.|`A:Peter -S=Active`| +|In which the Activity field was not `Development`.|`- Activity=Development`| +|Resolved by Peter.|`"Resolved By":Peter`| +|Contain the keyword `triage` in the title or description, are not assigned to you, and are not closed.|`triage -A=@me -S=Closed`| +|Active bugs that are assigned to you that do not contain the keyword `bugbash` in the title.|`S=Active T=bug A=@Me -Title:bugbash` + + +## Related notes + +- [Adhoc versus managed queries](adhoc-vs-managed-queries.md) +- [Use the query editor to list and manage queries](using-queries.md) +- [Query fields, operators, and macros](query-operators-variables.md) +- [Work item field index](../guidance/work-item-field.md) + +[!INCLUDE [temp](../_shared/image-differences.md)] + +### Does the search box support less than/greater than operators? + +No. The search box doesn't recognize comparison operators such as greater than (>) or less than (<). It translates queries with these operators into a search phrase. + diff --git a/docs/work/track/set-query-permissions.md b/docs/work/track/set-query-permissions.md new file mode 100644 index 00000000000..9c732ca086e --- /dev/null +++ b/docs/work/track/set-query-permissions.md @@ -0,0 +1,98 @@ +--- +title: Set query permissions | VSTS & TFS +description: How to guide for setting permissions on work item queries when working in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) item types +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 682f0eb0-462d-41e2-b6a2-41949d1b90fb +ms.manager: douge +ms.author: kaelli +ms.date: 08/02/2017 +--- + + +# Set permissions on queries and query folders + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +As with most team project objects, you can control who has access by setting permissions. With queries, you can configure users and groups to create, delete, view, and manage permissions of shared queries and shared query folders. + +All users can create and edit their own queries and save them under My Queries. + +By creating folders under Shared Queries, you can grant permissions to users for each folder. For example, if you have several teams contributing to a team project, then you might want to create a folder under Shared Queries for each team to manage their own set of shared queries. + +You set permissions from the web portal. By default, only members of the Project Collection Administrators group or Project Administrators group can create or edit a shared query and manage permissions. + +[!INCLUDE [temp](../_shared/image-differences.md)] + +## Set permissions on a new query folder + +1. If you're not a member of the project administrators group, [get added](../../security/set-project-collection-level-permissions.md), or have your **Edit project-level information** permission set to **Allow**. + +2. Create a folder. + + <img src="_img/set-query-perm-new-folder.png" alt="New query folder link on queries context menu" style="border: 2px solid #C3C3C3;" /> + +3. Open permissions for the folder you just created. + + <img src="_img/set-permissions-query-folder-security.png" alt="Permissions dialog for a query" style="border: 2px solid #C3C3C3;" /> + +4. Change the permissions so that the team member or group can contribute and manage permissions for the folder. + + Here we add the Web team and grant them permissions to create and manage permissions to all queries and folders under the Triage folder. + + <img src="_img/set-permissions-triage-folder-dialog.png" alt="Permissions dialog for a query" style="border: 2px solid #C3C3C3;" /> + + Use the **Add** menu to add a user identity or group. + + **Contribute** allows team members to create and edit queries and folders under the folder where the permissions were granted. And, **Manage Permissions** allows team members to manage the permission settings on queries and subfolders. + +5. (Optional) Turn inheritance off. Default is On. By turning inheritance off for a folder, you disallow inheritance of permissions that exist up the chain of query folders. To learn more, see [Permissions, Inheritance](../../security/about-permissions.md#inheritance). + +## Set permissions on shared query + +To keep anyone else from modifying a shared query that you create, you may want to set permissions on a specific query. You can do this by opening the permissions dialog for the specific query. + +0. Open permissions for the query. + + <img src="_img/set-query-perm-security-menu-option.png" alt="Permissions dialog for a query" style="border: 2px solid #C3C3C3;" /> + +4. Change the permissions so that the team member or group can't edit, delete, or change permissions for the query. + + Here we deny permissions for project admins. + + <img src="_img/set-permissions-deny-for-query.png" alt="Permissions dialog for a query, set to deny" style="border: 2px solid #C3C3C3;" /> + +## Related notes + +With queries, you can not only list work items, you can create status and trend charts and add them to dashboards. You can learn more about permissions and working with queries from these resources: + +- [Run and edit queries](using-queries.md) +- [Dashboards](../../report/dashboards.md) +- [Add a chart to a dashboard](../../report/add-charts-to-dashboard.md) +- [Permissions and access](../../security/permissions-access.md) + +### Q & A +<!-- BEGINSECTION class="md-qanda" --> + +#### Q: Can I change the owner of a query or folder? + +**A:** No. This feature was removed for TFS 2015. You can only enable permissions for users and groups from the permissions window for the query or folder. + +#### Q: Can I add folders to team favorites? + +**A:** No. You can only add folders under My Queries and under Shared Queries. + +#### Q: Are the queries and folders I create from the web portal the same as in Team Explorer? + +**A:** Yes. You might have to refresh your browser or client to see changes you make in another client. + +#### Q: Can I move a query or a folder? + +**A:** Yes. In the web portal, choose **Rename** from the context menu. In Team Explorer for Visual Studio, simply drag the folder to the new location. + +In Team Explorer for Eclipse, choose **Move** from the context menu and select the folder to which you want to move the item. + +<!-- ENDSECTION --> + +[!INCLUDE [temp](../_shared/help-support-shared.md)] \ No newline at end of file diff --git a/docs/work/track/share-plans.md b/docs/work/track/share-plans.md new file mode 100644 index 00000000000..791bc4de3a2 --- /dev/null +++ b/docs/work/track/share-plans.md @@ -0,0 +1,245 @@ +--- +title: Share work plans | VSTS & TFS +description: Email links, Copy URL, and share information about work items, queries, and more when connected to Visual Studio Team Services (VSTS) or Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 5edac6b9-2642-419a-8745-9e91ee40993b +ms.manager: douge +ms.author: kaelli +ms.date: 08/10/2017 +--- + +# Share work plans and progress + +<b>VSTS | TFS 2018 | TFS 2017 | TFS 2015 | TFS 2013 | Visual Studio 2017 | Visual Studio 2015 | Team Explorer Everywhere </b> + +Using work items to track your work provides a host of benefits, including the ability to easily share information. You can capture most information within the work item Description or other rich-text formatted field. If you need to maintain the information in a different format, you can easily link to or attach a file. + +Here's a list of the most common ways in which teams share information and plans using work item tracking. + +>[!NOTE] +><b>Feature availability: </b>Some features are only available from the web portal or a Team Foundation client such as Visual Studio or the Eclipse plug-in, Team Explorer Everywhere (TEE). + + +<table > +<thead align="center"> +<tr > +<th align="left" width="46%">Task/feature </th> +<th align="center" width="15%">Web portal</th> +<th align="center" width="15%">Visual Studio</th> +<th align="center" width="24%">TEE (Eclipse plug-in)</th> + +</tr> +</thead> +<tbody align="center" > + + +<tr> +<td align="left">[Rich text fields](#rich-text) </td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> + +</tr> + + +<tr> +<td align="left">[Link objects](#link-items), [attach files](#attachments)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> + +</tr> + +<tr> +<td align="left">[Storyboard and link to storyboards](#storyboard)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> +<td>![checkmark](../_img/icons/checkmark.png)</td> + +</tr> + + +</tbody> +</table> + +In addition, if you have stakeholders who don't contribute code but want to contribute to the discussion and review progress, make sure you provide them [stakeholder access](../../quickstart/get-started-stakeholder.md) so that they can view work items and dashboards. + + + + +<a id="rich-text"></a> + +## Rich text fields + +To convey detailed information, you can format text and insert images inline within the description field or any HTML field type. + +The rich text formatting toolbar appears above each text box that can be formatted. It only becomes active when you click within the text box. You can format text in HTML data fields, such as the Description, Accepted Criteria, and History. Available fields depend on the work item type, if you've [customized the process](../process/customize-process.md), and the platform you work on. + +The specific set of formatting features differs depending on the client you use. In all clients, you can bold, italicize, and underline text. You can also add and remove hyperlinks, format text as ordered or unordered lists, and add images. + +# [Browser](#tab/browser) +#### VSTS & TFS 2017, Rich text formatting toolbar + +<img src="_img/rich-text-ui-team-services.png" alt="Rich text tool bar - VSTS" style="border: 2px solid #C3C3C3;" /> + +In VSTS, you can use the ![Remove format](../_img/icons/remove-formatting-icon.png) icon or CTRL+Spacebar to remove formatting from highlighted text. + +> [!NOTE] +> The History field is no longer a rich-text field. To annotate the work item history, add to the Description or Discussion fields. + +<a id="tfs-portal-rich-text" /> +#### TFS 2015, TFS 2013, Team Explorer Everywhere, Rich text formatting toolbar + +<img src="_img/rich-text-ui-web-portal.png" alt="Rich text tool bar - web portal" style="border: 2px solid #C3C3C3;" /> + +# [Visual Studio](#tab/visual-studio) + +<a id="team-explorer-rich-text" /> +#### Visual Studio, Rich text formatting toolbar + +<img src="_img/rich-text-ui-te.png" alt="Rich text tool bar - Team Explorer" style="border: 2px solid #C3C3C3;" /> + +From Team Explorer you can choose the font, font size, and text and background colors. + +If inline images aren't displaying correctly, see [Resolve images that don't display in Team Explorer](#images-missing-te). + +You can also use the following shortcut keys to format your text: +- **Bold**: Ctrl+B +- *Italic*: Ctrl+I +- <u>Underscore</u>: Ctrl+U + +You can copy and paste HTML text or an image from another application directly into the text box using Ctrl+C and Ctrl+V shortcuts. + +--- + + +<a id="link-items"></a> +## Link items + +To support traceability and add context to work items, you can link items to other work items or objects. From a links control tab, you can choose from various link types to based on the objects you want to link to. + +Again, your link options will differ depending on the client you use. For specific guidance, see these resources: + +- [Add link to work items](../backlogs/add-link.md) +- [Link items to support traceability and manage dependencies](link-work-items-support-traceability.md) + + +<a id="attachments"></a> + +## Attach files + +To help track a work item, use the ![Attachment tab icon](../backlogs/_img/icon-attachments-tab-wi.png) or **Attachments** tab to attach a file with supplemental information. + +For example, you can attach a screen image that illustrates a problem, a line of code in a text file, a log, an e-mail thread, or a product feature's specification. + +<a id="team-services" /> +# [Browser](#tab/browser) +#### VSTS & TFS 2017, Attachment control toolbar + +<img src="_img/share-plans-attachment-tab-vsts.png" alt="Attachment controls, web portal VSTS" style="border: 2px solid #C3C3C3;" /> + +> [!TIP] +> From VSTS, you can drag and drop files into the attachment area. From the browse menu, you can multi-select several files and attach within a single action. Also, from VSTS and TFS 2017.1 and later versions, you can add attachments to your pull request comments. You can also add attachments in pull request comments by drag-and-drop or by browsing. For details, see [Syntax support for Markdown files, widgets, and pull request comments, Attachments](../../reference/markdown-guidance.md#attach). + +You can edit, open, save, or delete an attachment by clicking an attachment and opening it's ![actions icon](../_img/icons/actions-icon.png) actions menu. + +<img src="_img/share-plans-attachment-menu-options.png" alt="Attachment menu options, VSTS" style="border: 2px solid #C3C3C3;" /> + +> [!NOTE] +> For VSTS, you can add up to 100 attachments to a work item. Attempts to add more result in an error message upon saving the work item. + + +<a id="tfs-portal" /> +#### TFS 2015, TFS 2013, & Team Explorer Everywhere, Attachment control toolbar + +<img src="_img/share-plans-attachments-tfs-web-portal-tools.png" alt="Attachment controls, web portal (on-premises TFS), and Eclipse" style="border: 2px solid #C3C3C3;" /> + +Click the ![plus icon](../_img/icons/Action_Add.png) plus icon to add an attachment. Click an item and then click ![open icon](../_img/icons/open-icon.png) to open the attachment or ![download icon](../_img/icons/download-icon.png) to save a copy. + + +<a id="team-explorer" /> +# [Visual Studio](#tab/visual-studio) + +#### Visual Studio Team Explorer, Attachment control toolbar + +<img src="_img/share-plans-attachment-controls-tfs.png" alt="Attachment controls, web portal (on-premises TFS), Visual Studio and Eclipse" style="border: 2px solid #C3C3C3;" /> + +> [!TIP] +> From Visual Studio, you can drag and drop files into the attachment area. + +Click the ![plus icon](../_img/icons/Action_Add.png) plus icon to add an attachment. + +Click one or more items and then right-click to open the menu options to download or delete several attachments. + +<img src="_img/share-plans-attachment-tab-team-explorer.png" alt="Attachment menu options, Team Explorer" style="border: 2px solid #C3C3C3;" /> + +By default, the size of work item attachments is limited to 4 MB. For on-premises deployments, you can use the TFS web service to [increase the size of files you attach up to 2GB](https://msdn.microsoft.com/library/ms400780.aspx). + +--- + +<a id="storyboard"></a> +## Storyboard +Storyboarding your ideas and goals increases visual understanding. With [PowerPoint Storyboarding](../office/storyboard-your-ideas-using-powerpoint.md) you can bring your ideas to life with storyboard shapes, text, animation, and all the other features that PowerPoint provides. + +> [!NOTE] +> **Feature availability:** Storyboarding with PowerPoint requires [Office PowerPoint 2007 or later](http://www.microsoftstore.com/store/msstore/pd/PowerPoint-2010/productID.216564300) and the TFS Storyboarding add-in. You install the TFS Storyboarding add-in for PowerPoint by installing one of the latest editions of [Visual Studio (2013 or later)](https://www.visualstudio.com/downloads/download-visual-studio-vs) or [Team Foundation Server Standalone Office Integration 2015 (free)](https://www.visualstudio.com/downloads/#team-foundation-server-office-integration-2015-update-3-1). + +By linking your storyboard to a work item, you provide your team access to the shared file where they can add their comments. From the ![Links tab icon](../backlogs/_img/icon-links-tab-wi.png), **Links**, or a **Storyboards** tab, you can link storyboards that you created using PowerPoint Storyboarding or other application. When you make changes to a linked storyboard, the work item continues to link to the file with the latest changes. + + +<a id="team-services-storyboard" /> +# [Browser](#tab/browser) + +#### VSTS & TFS 2017, Start storyboarding + +You can open Storyboarding with PowerPoint from the ![actions icon](../_img/icons/actions-icon.png) actions menu within a work item form. + +<img src="_img/share-plans-storyboard-vsts-menu.png" alt="Start storyboarding within work item web form, web portal VSTS" style="border: 2px solid #C3C3C3;" /> + +To link to an existing storyboard, click the ![Links page icon](../_img/icons/icon-links-tab-wi.png) Links tab and add a storyboard link. + + +<a id="tfs-portal-storyboard" /> + +**TFS 2015, TFS 2013, & Team Explorer Everywhere, Storyboards tab control** + +From the **Storyboards** tab, click Start Storyboarding to open Storyboarding with PowerPoint. Or, you can link to an existing storyboard. + +<img src="_img/share-plans-storyboard-tfs-web-tab.png" alt="Storyboard links control" style="border: 2px solid #C3C3C3;" /> + + +<a id="team-explorer-storyboard" /> +# [Visual Studio](#tab/visual-studio) +#### Visual Studio, Storyboards tab control + +<img src="_img/share-plans-storyboard-vs-tab.png" alt="Storyboards tab, Visual Studio Team Explorer and Eclipse" style="border: 2px solid #C3C3C3;" /> + +To open PowerPoint with storyboarding, see [Storyboard your ideas using PowerPoint](../office/storyboard-your-ideas-using-powerpoint.md). + +--- + +## Related notes + +As you can see, there are many ways to share information using work items alone. See these additional tools and features to support planning, tracking, and sharing information with your team. + +- [Dashboards](../../report/dashboards.md) +- [Add and edit a wiki](../../collaborate/add-edit-wiki.md) + +### SharePoint project portal (on-premises TFS) + +If you work from an on-premises TFS, you can use a SharePoint site to share and access documents from your team project. Your team can use the SharePoint site, also referred to as the project portal, to share information in the following ways: +- Share data contained in reports or dashboards +- Share team progress using predefined or customized SharePoint dashboards +- Share documents, files, images +- Share team knowledge and processes using the SharePoint wiki. + +To learn more, see [Share information using the project portal](../../report/sharepoint-dashboards/share-information-using-the-project-portal.md). + +[!INCLUDE [temp](../../_shared/images-not-appearing-vs.md)] + +### Marketplace extensions + +You may find additional ways to share information and collaborate as a team by adding a [Marketplace extension](https://marketplace.visualstudio.com/?targetId=754f8691-19ce-47a2-a1e8-ebeab1e67955#VSTS). + + diff --git a/docs/work/track/titles-ids-descriptions.md b/docs/work/track/titles-ids-descriptions.md new file mode 100644 index 00000000000..899fb936bb5 --- /dev/null +++ b/docs/work/track/titles-ids-descriptions.md @@ -0,0 +1,187 @@ +--- +title: Query by title, ID, or rich-text fields | VSTS & TFS +description: Example work queries based on titles, IDs, rich-text fields in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: c0b1fcb1-c4f4-4651-a401-171fa4372518 +ms.manager: douge +ms.author: kaelli +ms.date: 04/14/2017 +--- + +# Query by titles, IDs, and rich-text fields +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +When you want to find work items based on a keyword or phrase, you can do so by entering the [keyword or phrase within the search box](search-box-queries.md#keywords). This initiates a new query which you can modify as needed to further refine your filter criteria, as described in this topic. + +[!INCLUDE [temp](../_shared/search-box.md)] + +<a id="keyword"/> +## List items based on keywords or phrases + +Use **Contains** and **Contains Words** to list items that partially or exactly match the words or phrase that you enter. + +![Editor for flat list query for filtering key words](_img/example-work-item-queries/IC675039.png) + +Choose **Contains** or **Does Not Contain** to search against exact or partial matches of a word or phrase. Choose **Contains Words** or **Does Not Contain Words** to search against an exact phrase or to use the wildcard character, <b>*</b>. These operators use the full-text search index. + + + +<a id="undefined-value"/> +## List items based on undefined field values + +You can find work items that have an undefined field value by using the equals operator (=) and leaving the Value for the field blank. For example, the following filters will list all work items of type Task whose Activity field is blank. + +![Filter based on blank entries](_img/example-work-item-queries/IC736440.png) + +To list work items based on a field that isn't blank, use the not operator (<>) and leave the Value blank. + +<a id="category"/> +### List items based on categories + +To filter work items based on the category they belong to, use the **In Group** operator. For example, the following filter criteria will return all work items that are in the current team project, assigned to the team member, and defined as belonging to the Bug Category. + +![Query clause to find work items by category](_img/example-work-item-queries/IC720125.png) + + +## Common fields for most work item types + +The following table describes common fields used to filter queries. The **ID** fields uniquely identify work items in a list. Use the **Title** field to distinguish the work item from all others of the same type. The **Description** and other rich-text (data type=HTML) fields provide additional information that is needed to implement work and track changes. After a work item is created, you can modify all fields except for the **ID**. When you add and save a work item, the ID is assigned by the system and cannot be changed.  + +>**Note:**  The system automatically indexes all long-text fields with a data type of **PlainText** and **HTML** fields for full-text search. This includes the **Title**, **Description**, and **Steps to Repro** fields. For more information and server and collation requirements applicable to on-premises TFS, see [Query fields, operators, values, and variables - Full-text and partial word searches](query-operators-variables.md#full-text). + + +<table width="100%"> +<tbody valign="top"> +<tr> + <th width="17%">Field name</th> + <th width="66%">Description</th> + <th width="17%">Work item type</th> +</tr> +<tr> + <td><p>Acceptance Criteria <sup>1</sup></p></td> + <td><p>A description of the criteria to be met before the bug or product backlog item can be closed.</p><p>Before work begins on a bug or product backlog item, the criteria for customer acceptance should be described as clearly as possible. Conversations between the team and customers to define the acceptance criteria will help ensure that your team understands your customers' expectations. The acceptance criteria can be used as the basis for acceptance tests so that you can more effectively evaluate whether an item has been satisfactorily completed.</p> +<p>Reference name=Microsoft.VSTS.Common.AcceptanceCriteria, Data type=HTML</p> </td> + <td><p>Bug, Epic, Feature, Product backlog item (Scrum)</p></td> + +</tr> +<tr> + <td> +Description <sup>1, 2</sup> + </td> + <td> + <p>Use this field to provide indepth information about a work item.</p> + <p>Reference name=System.Description, Data type=HTML</p> + </td> +<td>All</td> +</tr> +<tr> +<td> +ID +</td> +<td> +The unique identifier that is assigned to a work item. Work item IDs are unique across all team projects and within a team project collection. + <p>Reference name=System.Id, Data type=Integer</p> +</td> +<td>All</td> +</tr> + +<tr> + <td> +Repro Steps (or Steps to reproduce) <sup>1</sup> + </td> + <td> + <p>The steps that are required to reproduce unexpected behavior. Capture enough information so that other team members can understand the full impact of the problem as well as whether they have fixed the bug. This includes actions taken to find or reproduce the bug and expected behavior. +</p> + <p>Reference name=Microsoft.VSTS.TCM.ReproSteps, Data type=HTML</p> + </td> +<td>Bug</td> +</tr> + + +<tr> + <td><p>Resolution</p></td> + <td><p>Describes how an impediment was resolved.</p> +<p>Reference name=Microsoft.VSTS.Common.Resolution, Data type=HTML</p> </td> + <td><p>Impediment (Scrum)</p></td> + +</tr> + +<tr> + <td> +System Info<sup>1</sup> + </td> + <td> + <p>Information about the software and system configuration that is relevant to the bug, code review, or feedback. </p> + + <p>Reference name=Microsoft.VSTS.TCM.SystemInfo, Data type=HTML</p> + </td> + <td>Bug, Code Review Request, Feedback Request + </td> +</tr> + +<tr> +<td> +Team Project +</td> +<td> +<p>The team project to which a work item belongs. Add this field to a query when you want to filter your list to items in one or more team projects. </p> +<blockquote>**Note:**  For VSTS or for TFS 2015.1 and later versions, you must check the Query across projects option in the query editor for this field to appear in the drop down field list. To learn more, see [Example queries, query across team projects](using-queries.md#across-projects). </blockquote> + + <p>Reference name=System.TeamProject, Data type=String</p> +</td> +<td>All</td> +</tr> + +<tr> + <td> +Title + </td> + <td> + <p>A short description that summarizes what the work item is and helps team members distinguish it from other work items in a list.</p> + <p>Reference name=System.Title, Data type=String</p> + </td> +<td>All</td> +</tr> + +<tr> + <td> +Work Item Type + </td> + <td> + <p>The name of the work item type. Work item types are defined based on the process used when you created your team project. For an overview, see [Choose process](../guidance/choose-process.md). To learn how to add a custom work item type, see [Add or modify a work item type](../customize/add-modify-wit.md). </p> +<p>To filter work items based on their [category assignment](#category), you can use the **In Group** and **Not In Group** operators and select a category from the drop-down list. + <p>Reference name=System.WorkItemType, Data type=String</p> + </td> +<td>All</td> +</tr> +</tbody> +</table> + + +####Notes: + +0. To learn more about working with rich-text fields, see [Share plans](share-plans.md#rich-text). +0. Upon upgrade to Team Foundation Server 2012, the Description field was changed from a field type of PlainText to **HTML**. Using the **witadmin changefield** command you can revert the data type for this field. See [Manage work item fields (witadmin)](../reference/witadmin/manage-work-item-fields.md). + +## Related notes +- [Query editor](using-queries.md) +- [Add work items](../backlogs/add-work-items.md) +- [Work item field index](../guidance/work-item-field.md) +- [Create managed queries](example-queries.md) + +<a id="category"/> +###What items appear in the Requirement or Task categories? + +The default assignments of work item types to each category are listed below for each process. + +| Process | Requirement category | Task category | +|---------|---------|---------| +| Agile | User Story | Task | +| Scrum | Product Backlog Item | Task | +| CMMI | Requirement | Task | + +However, each team can determine if the Bug work item type appears in either the Requirement or Task category. See [Show bugs on backlogs and boards](../customize/show-bugs-on-backlog.md). + +Also, you can add custom work item types to a backlog. For details, see [Add or modify a work item type, Add a custom WIT to a backlog or board ](../customize/add-modify-wit.md). + diff --git a/docs/work/track/toc.yml b/docs/work/track/toc.yml new file mode 100644 index 00000000000..ed09ceb7874 --- /dev/null +++ b/docs/work/track/toc.yml @@ -0,0 +1,69 @@ +- name: Queries + href: index.md +- name: Overview + items: + - name: Create managed queries to list, update, or chart work items + href: example-queries.md + - name: Adhoc vs managed queries + href: /vsts/work/track/adhoc-vs-managed-queries?toc=/vsts/work/track/toc.json&bc=/vsts/work/track/breadcrumb/toc.json +- name: Quickstarts + items: + - name: Search box query + href: search-box-queries.md +- name: Tutorials + items: + - name: Edit a query + href: using-queries.md + - name: Bulk modify (web) + href: ../backlogs/bulk-modify-work-items.md?toc=/vsts/work/track/toc.json&bc=/vsts/work/track/breadcrumb/toc.json +- name: Samples + items: + - name: Query by title, ID, or description + href: titles-ids-descriptions.md + - name: Query by assignment or workflow changes + href: query-by-workflow-changes.md + - name: Query by area or iteration path + href: query-by-area-iteration-path.md + - name: Query by date or current iteration + href: query-by-date-or-current-iteration.md + - name: Query history + href: history-and-auditing.md + - name: Query a numeric field + href: query-numeric.md + - name: Query by pick list value + href: planning-ranking-priorities.md + - name: Query by build & test integration fields + href: build-test-integration.md + - name: Query by links or attachments + href: linking-attachments.md +- name: How-to Guides + items: + - name: "Filter backlogs & queries" + href: /vsts/work/backlogs/filter-backlogs?toc=/vsts/work/track/toc.json&bc=/vsts/work/track/breadcrumb/toc.json + - name: Copy list of work items + href: /vsts/work/backlogs/copy-list?toc=/vsts/work/track/toc.json&bc=/vsts/work/track/breadcrumb/toc.json + - name: Change column options + href: /vsts/work/how-to/set-column-options?toc=/vsts/work/track/toc.json&bc=/vsts/work/track/breadcrumb/toc.json +- name: Reference + items: + - name: "Query fields, operators & macros" + href: query-operators-variables.md + - name: Work item field index + href: /vsts/work/guidance/work-item-field?toc=/vsts/work/track/toc.json&bc=/vsts/work/track/breadcrumb/toc.json + - name: WIQL syntax + href: /vsts/reference/wiql-syntax?toc=/vsts/work/track/toc.json&bc=/vsts/work/track/breadcrumb/toc.json + - name: Keyboard shortcuts + href: ../../reference/keyboard-shortcuts.md?toc=/vsts/work/track/toc.json&bc=/vsts/work/track/breadcrumb/toc.json +- name: Resources + items: + - name: Work Items + href: ../work-items/index.md + - name: Backlogs + href: ../backlogs/index.md + - name: Customization + href: ../customize/index.md + - name: Wiql Editor (Marketplace extension) + href: https://marketplace.visualstudio.com/items?itemName=ottostreifel.wiql-editor + - name: Enhanced Export (Marketplace extension) + href: https://marketplace.visualstudio.com/items?itemName=mskold.mskold-enhanced-export + diff --git a/docs/work/track/triage-work-items.md b/docs/work/track/triage-work-items.md new file mode 100644 index 00000000000..eb16471d1cf --- /dev/null +++ b/docs/work/track/triage-work-items.md @@ -0,0 +1,57 @@ +--- +title: Organize and view queries | VSTS & TFS +description: Manage your queries by using favorites and folders +ms.prod: vs-devops-alm +ms.technology: vs-devops-wit +ms.assetid: 486A876F-A04F-4DC7-829C-94E88BB9B7E1 +ms.topic: get-started-article +ms.manager: douge +ms.author: kaelli +ms.date: 06/22/2017 +--- + + +# Triage work items +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +!!! WORK IN PROGRESS !!! + +Using a work item query you can review and update a set of work items. Oftentimes team use the triage mode for a query to perform the following tasks: +- Set the priority of a bug or work item +- Assign a work item to a sprint or team member +- Add details to the description, acceptance criteria, or repo steps +- Link related work items +- Update the status of work items + + + + +Query triage mode. + +<a id="triage"> </a> +##Triage bugs + +Once you've started coding and testing, you'll want to hold periodic triage meetings to review and prioritize your bugs. How frequently you meet and for how long depends on your situation. Typically, the project owner runs the bug triage meetings, and team leads, business analysts and other stakeholders who can speak about specific project risks attend them. + +The project owner can create or open a shared query for new and reopened bugs to generate a list of bugs to be triaged. + +###Bug queries +Open a shared query or [use the query editor](using-queries.md) to create useful bug queries, such as the following: +- Active bugs by priority (```State <> Done``` or ```State <> Closed```) +- In Progress bugs (```State = Committed``` or ```State = Active```) +- Bugs to fix for a target release (```Tags Contains RTM```) +- Recent bugs - bugs opened within the last 3 weeks (```Created Date > @Today-21```) + +Once you have the queries of interest to your team, you can [create status or trend charts](../../Report/charts.md) that you can also pin to a [team dashboard](../../report/dashboards.md). + +###Triage mode in query results + +From the query results page, you can quickly move up and down within the list of bug work items using the up and down arrows. As you review each bug, you can assign it, add details, or set priority. + +<img src="../backlogs/_img/scrum-active-bug-triage-mode-co.png" alt="Triage query results" style="border: 2px solid #C3C3C3;" /> + + +##Related notes + +- [Set query permissions](set-query-permissions.md) + diff --git a/docs/work/track/using-queries.md b/docs/work/track/using-queries.md new file mode 100644 index 00000000000..3fd13844d29 --- /dev/null +++ b/docs/work/track/using-queries.md @@ -0,0 +1,283 @@ +--- +title: Create managed queries with the Query Editor | VSTS & TFS +description: Create flat-list, tree, or direct-links queries to list, triage, update, and chart work items +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: 364000d3-200a-495a-bfb9-83915240af67 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/11/2017 +--- + +# Use the query editor to create managed queries + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + + +You can create queries in VSTS, the web portal for Team Foundation Server (TFS), and Team Explorer. Also, you can open a query in [Excel](../office/bulk-add-modify-work-items-excel.md) or [Project](../office/create-your-backlog-tasks-using-project.md) to perform bulk additions and modifications. + +For details on constructing query clauses and information on each query operator—such as, `Contains`, `In`, `In Group`, and `<>`(not operator) —and macros, see [Query fields, operators, and macros](query-operators-variables.md). For an index of example queries, see [Create managed queries](example-queries.md#examples). + +In this topic you'll learn: + +> [!div class="checklist"] +> * How to open and edit a query +> * How to add or create a query +> * How to group query clauses +> * Understand when to use a flat-list, tree, or direct-links query +> * How to query across team projects + + +[!INCLUDE [temp](../_shared/image-differences.md)] + +<a id="flat-list-query"/> +## Open and edit a query + +The easiest way to define a query is to start with an existing shared query. +The following example shows how to find all closed bugs by modifying the +Active Bugs shared query provided with the Agile process template. Examples are based on the user interface provided through the web portal. + +1. Open a shared query. For example, from the web portal, open the Active Bugs or similar flat list query. + + <img src="_img/using-queries-active-bugs-ts.png" alt="Web portal, Work>Queries, Open Shared queries, Active Bugs" style="border: 2px solid #C3C3C3;" />  + + >[!TIP] + >If you're working in Visual Studio Team Explorer, open the **Work** page to access your queries and shared queries. If Team Explorer isn't visible, click **View>Team Explorer** from the top level menu. + +2. Edit the query to find closed bugs and then run the query. + Use ![Insert new filter line](_img/3.png) to insert a clause above the current clause. Use ![Remove this filter line](_img/4.png) to delete a clause. Queries are automatically scoped to the current team project. To find work items defined in several team projects, see [Query across team projects](using-queries.md#across-projects). + + **VSTS, TFS 2017, TFS 2015:** + + <img src="_img/query-active-bugs-editor-vso.png" alt="Web portal, Queries page, Editor view of a Flat List Query" style="border: 2px solid #C3C3C3;" />  + + **TFS 2013:** + ![Editor View of a Flat List Query - On-premises TFS](_img/5.png) + +3. Save the query to your My Queries folder. + + ![Save Query As](_img/6.png) + + To save a query to the Shared Queries folder, you need to be a [team administrator](../scale/manage-team-assets.md), a member of the [Project Administrators group](../../accounts/add-users.md), or have your Contribute permissions on the folder set to Allow. To learn more, see [Set query permissions](set-query-permissions.md). + +<a id="flat-list" /> +## Create a query + +You can start a fresh, new query from the Queries page in the web portal or the Work Items page in Team Explorer. + +<img src="_img/using-queries-new-query-ts.png" alt="Queries page, Choose New query from the drop down menu" style="border: 2px solid #C3C3C3;" />  + +### Group clauses + +Grouped clauses operate as a single unit separate from the rest of the query, similar to putting parentheses around a mathematical equation or logic expression. The And or Or operator for the first clause in the group applies to the whole group. + +In the next example, the first expression returns all work items that are priority 1 and all active bugs of any priority. The second expression returns all active priority 1 work items and all priority 1 bugs, whether they are active or not. + +| Grouped clauses | Logical expression | +| ------------------------------------------------- | ----------------------------------------------------- | +| ![Filter Using an OR/AND Operator](_img/8.png) | Priority = 1 OR (Work Item Type=Bug AND State=Active) | +| ![Filter Using an AND/OR OR Operator](_img/9.png) | Priority = 1 AND (Work Item Type=Bug OR State=Active) | + +To group one or more clauses, select them and then choose the ![Group Query Clause icon](../_img/icons/group-clauses-icon.png) group clauses icon. + +<img src="_img/10.png" alt="Web portal, Group Selected Query Clauses" style="border: 2px solid #C3C3C3;" />  + +If your query results do not return your expected set of work items, follow these steps: + +- Make sure that each clause is defined as you intended. +- Verify And/Or assignments to each clause. If your results contain more work items than expected, often an Or clause is present instead of an And clause. +- Determine if you need to group or change the grouping of the query clauses and the And/Or assignments of each grouped clause. +- Add more query clauses to refine your query filter criteria. +- Review the options available to specify [fields, operators, and values](query-operators-variables.md). + +<a id="tree-query" /> +### Use a tree query to view hierarchies + +Use the tree query (![Tree Query](_img/11.png)) to view a multi-tiered, nested list of work items. For example, you can view all backlog items and their linked tasks. + +![Results List Showing a Tree Query](_img/12.png) + +Expand (Expand node (![Expand node, web portal](_img/13.png)) or collapse (![Collapse node, web portal](_img/14.png)) leaf nodes to focus on different parts of the tree. + +Define the filter criteria for both parent and child work items. + +![Alt text](_img/15.png) + +To find linked children, select Match top-level work items first. To find linked parents, select Match linked work items first. + +>[!NOTE] +>You can't construct a query that shows a hierarchical view of Test Plans, Test Suites, and Test Cases. These items aren't linked together using parent-child link types. You can [view the hierarchy through the Test Plans page of the Test hub](../../manual-test/getting-started/create-a-test-plan.md). + +<a id="directs-link-query" /> +## Use direct links to view dependencies + +Use the direct links query (![Direct Links Query](_img/16.png)) to track work items that depend on other tracked work, such as tasks, bugs, issues, or features. For example, you can view backlog items that depend on other items being implemented or a bug being fixed. + +![Direct Links Query Results](_img/17.png) + +Use the direct links query to track dependencies your team has that other teams work on, or manage commitments your team has made to other teams. Specify the filter criteria for both top and linked work items, and select the types of links used to filter the dependencies. + +![Direct Links Query Editor](_img/18.png) + +Filter your first-tier list of work items by choosing one of these options: + +- Only return work items that have the specified links: First-tier work items are returned, but only if they have links to work items specified by the linked work items filter criteria. + +- Return all top level work items: All first-tier work items are returned regardless of the linked work items filter criteria. Second-tier work items that are linked to the first tier are returned if they match the linked work items filter criteria. + +- Only return work items that do not have the specified links: First-tier work items are returned, but only if they do not have links to work items specified by the linked work items filter criteria. + +To learn more about each link type, see [Link work items to support traceability and manage dependencies](link-work-items-support-traceability.md). + + +<a id="across-projects" /> +## Query across team projects +By default, shared queries and new queries are scoped to the current team project. However, you can create queries to find work items defined within the team project collection. You save cross-project queries under a specific team project. + +> [!NOTE] +> <b>Feature availability: </b>The **Query across projects** feature is supported from VSTS and the web portal for TFS 2015.1 or later version. + +### VSTS and TFS 2015.1 +To list work items defined in two or more team projects, checkmark **Query across projects**. For example, the following query finds all features created in all team projects within the last 30 days. + +<img src="_img/using-queries-query-across-projects.png" alt="Web portal, Queries page, Query Editor, Checkbox, Query across team projects" style="border: 2px solid #C3C3C3;" /> + +With the Query across projects checked, you can add the Team Project field to filter to a select number of team projects. + +<img src="_img/using-queries-query-across-select-projects.png" alt="VSTS and TFS 2015.1, Web portal, Query across select team projects using the In operator" style="border: 2px solid #C3C3C3;" />  + +>[!NOTE] +>Separate multiple project names with the list separator that corresponds to the regional settings defined for your client computer, for example, a comma (,). + +The Team Project field becomes available only after you check **Query across projects**.  Moreover, when Query across projects is unchecked, only those fields from those WITs defined in the current team project appear in the Field drop-down menu. When Query across projects is checked, all fields from all WITs defined in all team projects in the collection appear in the Field drop-down menu. + +### TFS 2015, TFS 2013 +To find all features created in all team projects within the last 30 days, remove the **Team Project=@Project** clause from the query. + +<img src="_img/using-queries-query-across-all-projects-tfs.png" alt="TFS 2013-2015, Web portal, Query across select team projects using the In operator" style="border: 2px solid #C3C3C3;" />  + +All fields from all WITs defined in all team projects in the collection always appear in the Field drop-down menu. + +Use **Team Project=@Project** to scope the query to find only those work items defined for the current team project. + +<a id="favorite-query"> </a> +## Add a query to the dashboard or share it with your team +To add a query to the home page or a dashboard, open the ![Context Menu Icon](_img/22.png) context menu for the query and [add it to a specific dashboard or as a team favorite](../../report/dashboards.md). + +Share queries with your team by adding them to a folder under the Shared Queries space. To save a query to a Shared Queries folder, get added to the [project administrators group](../../accounts/add-users.md) or have your [permissions set for a folder under Shared Queries](set-query-permissions.md). + +You can only add shared queries to dashboards or as team favorites, and only if you have [team administrator or project administrator permissions](../scale/manage-team-assets.md). + +## Related notes + +That's the basics about using queries. For an index of query examples, see [Create managed queries](example-queries.md#examples). To add a custom field to track additional data, see [Customize your work tracking experience](../customize/customize-work.md). + +If you want to export a query to Excel, you can do that from [Excel or Visual Studio/Team Explorer](../office/bulk-add-modify-work-items-excel.md). Or, to export a query directly from the web portal Queries page, install the [VSTS Open in Excel Marketplace extension](https://marketplace.visualstudio.com/items?itemName=blueprint.vsts-open-work-items-in-excel). This extension will add in **Open in Excel** link to the toolbar of the query results page. + +See also: +- [Adhoc versus managed queries](adhoc-vs-managed-queries.md) +- [Add work items](../backlogs/add-work-items.md) +- [Work item field index](../guidance/work-item-field.md) +- [Chart a flat-list query](../../report/charts.md) +- [Create Excel reports from a query (TFS)](../../report/excel/create-status-and-trend-excel-reports.md) +- [Change column options](../how-to/set-column-options.md) + + +### Task board versus query list items + +You may notice and wonder why the contents of the task board differ from those listed with its created query? To learn more, see [Task board items versus query list items](../backlogs-boards-plans.md#task-board-items). + +### Export a query +From the query editor in Team Explorer, use the File menu to save a query as a .wiq file. When you create a team project, the shared queries are created based on [.wiq files defined in a process](../reference/process-templates/define-work-item-query-process-template.md). + +<a id="define-query-hyperlink" /> +### Define a query as a hyperlink +The easiest way to define a hyperlink is to create a query that matches what you want and then copy the URL for the query. The hyperlink uses the work item query language (WIQL), which resembles Transact-SQL. For details about constructing WIQLs, see [Syntax for the Work Item Query Language (WIQL)](../../reference/wiql-syntax.md). + +VSTS and TFS 2015 require that you encode the WIQL portion of the URL syntax. You can use any URL encoder tool to encode your URL. + +TFS 2013 and previous versions didn't require encoding. + +>[!NOTE] +>Most browsers enforce a limit of between 2000 and 2083 characters for a URL string. + + +**VSTS syntax** + +``` +https://{youraccount}.visualstudio.com/DefaultCollection/{TeamProjectName}/{TeamName}/_workitems?_a=query&wiql={Encoded WorkItemQueryLanguage] +``` +For example, the following hyperlink lists the ID and title of all active bugs defined under the FabrikamFiber/Web area path for the fabrikam.visualstudio.com account. + +``` +https://fabrikam.visualstudio.com/DefaultCollection/_workitems?_a=query&wiql=SELECT%20%5BSystem.ID%5D%2C%20%5BSystem.Title%5D%20FROM%20WorkItems%20WHERE%20%5BSystem.TeamProject%5D%3D'FabrikamFiber'%20AND%20%5BSystem.WorkItemType%5D%3D'Bug'%20AND%20%5BSystem.State%5D%3D'Active'%20AND%20%5BSystem.AreaPath%5D%3D'FabrikamFiber%5CWeb' +``` + +The decoded WIQL conforms to: + +``` +SELECT [System.ID], [System.Title] + FROM WorkItems + WHERE [System.TeamProject]='FabrikamFiber' + AND [System.WorkItemType]='Bug' + AND [System.State]='Active' + AND [System.AreaPath]='FabrikamFiber\Web' +``` + +**TFS 2015 syntax** + +``` +https://{ServerName}/{CollectionName}/{TeamProjectName}/_workitems?_a=query&wiql={Encoded WorkItemQueryLanguage] +``` + +The ```_workitems?``` entry has replaced the ```q.aspx?``` entry used in the syntax for TFS 2013 and previous versions. + +For example, the following hyperlink lists the ID, title, and state of all bugs under the FabrikamFiber/Web area path hosted on the fabrikam server. + +``` +http://fabrikam:8080/tfs/DefaultCollection/FabrikamFiber/_workitems?_a=query&wiql=SELECT%20%5BSystem.ID%5D%2C%20%5BSystem.Title%5D%2C%20%5BSystem.State%5D%20FROM%20WorkItems%20WHERE%20%5BSystem.TeamProject%5D%3D'FabrikamFiber'%20AND%20%5BSystem.WorkItemType%5D%3D'Bug'%20AND%20%5BSystem.AreaPath%5D%3D'FabrikamFiber%5CWeb'%20%20 +``` + +Which is comparable to the non-encoded entry: + +``` +http://fabrikam:8080/tfs/DefaultCollection/FabrikamFiber/_workitems?_a=query&wiql= +SELECT [System.ID], [System.Title], [System.State] + FROM WorkItems + WHERE [System.TeamProject]='FabrikamFiber' + AND [System.WorkItemType]='Bug' + AND [System.AreaPath]='FabrikamFiber\Web' +``` + +**TFS 2013 and previous versions syntax** + +``` +https://{ServerName}/{CollectionName}/q.aspx?pname={TeamProjectName}&wiql={WorkItemQueryLanguage] +``` +For example, the following hyperlink lists the ID, title, and state of all bugs that have build number 9.0.30304 for the FabrikamFiber team project hosted on the fabrikam server. + +``` +http://fabrikam:8080/tfs/DefaultCollection/q.aspx?pname=FabrikamFiber&wiql= +SELECT [System.ID], [System.Title], [System.State] + FROM WorkItems + WHERE [System.TeamProject]='FabrikamFiber' + AND [System.WorkItemType]='Bug' + AND [System.FoundIn]='9.0.30304' +``` + + + +### Programmatically query for work items +You can create dynamic queries using one of the following resources: + +- **REST APIs:**  [Work item queries and query folders](https://visualstudio.com/integrate/api/wit/queries.md) and [Work item query language](https://visualstudio.com/integrate/api/wit/wiql.md) +- **SDK:**  [Query for Bugs, Tasks, and Other Work Items](https://msdn.microsoft.com/library/bb130306.aspx). + + +See also: +- [Syntax for the Work Item Query Language (WIQL)](../../reference/wiql-syntax.md) +- [Wiql Editor, a Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ottostreifel.wiql-editor) + +> [!NOTE] +> For queries made against VSTS, the WIQL length must not exceed 32K characters. The system won't allow you to create or run queries that exceed that length. diff --git a/docs/work/track/view-run-query.md b/docs/work/track/view-run-query.md new file mode 100644 index 00000000000..a6a031d9f87 --- /dev/null +++ b/docs/work/track/view-run-query.md @@ -0,0 +1,18 @@ +--- +title: View or run a query | VSTS & TFS +description: View a list of queries or run a query using Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.prod: vs-devops-alm +ms.technology: vs-devops-wit +ms.assetid: +ms.topic: get-started-article +ms.manager: douge +ms.author: kaelli +ms.date: 08/29/2017 +--- + + +# View or run a query + +<b>VSTS</b> + +New topic - WORK IN PROGRESS. \ No newline at end of file diff --git a/docs/work/troubleshoot/resolve-backlog-reorder-issues.md b/docs/work/troubleshoot/resolve-backlog-reorder-issues.md new file mode 100644 index 00000000000..8f2dc69c1fd --- /dev/null +++ b/docs/work/troubleshoot/resolve-backlog-reorder-issues.md @@ -0,0 +1,85 @@ +--- +title: Resolve backlog issues | VSTS & TFS +description: Resolve error messages when working in backlogs or boards in Visual Studio Team Services (VSTS) and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: BDEAA5D4-83A3-49FC-BEEB-EE685E92B68B +ms.manager: douge +ms.author: kaelli +ms.date: 06/01/2017 +--- + + + +<a id="display-hierarchy"> </a> +# Fix "Ordering backlog items is disabled" + +When a sprint backlog contains same-category, nested work items—as described in the next section, [How backlogs and boards display hierarchical (nested) items](#nested)—the system disables the drag-and-drop reorder feature. It does this as it determines that not all items display under these circumstances. + +To fix this, take the following actions: + +1. Click the **Create query** link on the backlog page. + + ![Create query of backlog](../_img/backlogs-boards-create-query.png) + +2. Open the query (click the link that appears). + +3. Review the list of items to determine which items are nested. For example, the following query shows that a bug is a child of a user story. Because the team has configured their backlog to display user stories and bugs at the same level (Requirements category), this corresponds to a nested item that disables the ordering feature. + + ![Query of backlog with a nested item](../_img/backlogs-boards-query-nested-items.png) + +4. Remove all parent-child links that exist among nested items. + +5. Return to the backlog page and refresh the page. + + +<a id="nested"> </a> +## How backlogs and boards display hierarchical (nested) items + +While you can create a hierarchy of backlog items, tasks, and bugs—we don't recommend that you create same-category hierarchies. That is, don't create parent-child links among work items of the same type, such as story-story, bug-bug, task-task. The reason is that the Kanban board, sprint backlog, and task board only show the last node in a same-category hierarchy, called the leaf node. For example, if you link items within a same-category hierarchy that is four levels deep, only the items at the fourth level appear on the Kanban board, sprint backlog, and task board. + +Instead of nesting requirements, bugs, and tasks, we recommend that you maintain a flat list. In other words, only create parent-child links one level deep between items that belong to a different category. Use the Feature work item type when you want to group user stories (Agile), product backlog items (Scrum), or requirements (CMMI). You can [quickly map product backlog items to features](../backlogs/organize-backlog.md), which creates parent-child links in the background. + +<img src="../customize/_img/create-hierarchy-with-different-wits.png" alt="Create work items using different hiearchy" style="border: 2px solid #C3C3C3;" /> + +<a id="leaf-nodes"> </a> +## When you track bugs as requirements + +As mentioned previously, [each team can choose how they want to track bugs](../customize/show-bugs-on-backlog.md) to behave like requirements, or tasks, or as neither. + +When you make a bug or requirement a child of another bug or requirement, all items appear on the product backlog page, but only the child bug or requirement appears on the Kanban board. For example, the third user story, *Interim save on long form*, has a child bug, *Save takes too long*. + +The child bug, *Save takes too long*, appears on the Kanban board, but not the parent user story. + +**All bugs and requirements appear on the backlog** + +![Child bug appears on backlog ](../customize/_img/bugs-appear-on-backlog.png) + +**Only leaf nodes appear on the Kanban board** + +![Kanban board, leaf node bug appears](../customize/_img/bugs-appear-on-board.png) + +<a id="bugs-as-tasks"> </a> +## When you track bugs as tasks + +When you choose to have bugs appear in the backlog with tasks, linking tasks and bugs to their parent requirements groups them accordingly on the sprint backlog and task board. + +However, if you create parent-child links between a requirement and a bug, and the bug and a task, as shown here, the task will appear on the sprint backlog and task board, but not the bug. + +**Hierarchy of items assigned to the sprint backlog** + +![Sprint backlog query shows linked bug and task ](../customize/_img/sprint-backlog-hierarchy.png) + +**Only leaf nodes appear on the sprint backlog** + +![Sprint backlog, leaf node task ](../customize/_img/sprint-backlog-leaf-only.png) + +**Only leaf nodes appear on the task board** +![Sprint board, leaf node task appears](../customize/_img/bugs-appear-on-taskboard.png) + +Is there a workaround to display intermediate nodes within a hierarchy? Not at this time. You can always check the entire list of items assigned to a sprint by using the **Create Query** link. + + +## Related notes + +- [Backlogs, boards, and plans](../backlogs-boards-plans.md) \ No newline at end of file diff --git a/docs/work/work-items/_img/work-items-filter-bug.png b/docs/work/work-items/_img/work-items-filter-bug.png new file mode 100644 index 00000000000..ef9925730fa Binary files /dev/null and b/docs/work/work-items/_img/work-items-filter-bug.png differ diff --git a/docs/work/work-items/_img/work-items-hub-new.png b/docs/work/work-items/_img/work-items-hub-new.png new file mode 100644 index 00000000000..f218190267a Binary files /dev/null and b/docs/work/work-items/_img/work-items-hub-new.png differ diff --git a/docs/work/work-items/_img/work-items-hub.png b/docs/work/work-items/_img/work-items-hub.png new file mode 100644 index 00000000000..71f46eea8ba Binary files /dev/null and b/docs/work/work-items/_img/work-items-hub.png differ diff --git a/docs/work/work-items/about-work-items.md b/docs/work/work-items/about-work-items.md new file mode 100644 index 00000000000..e5cc6217bb4 --- /dev/null +++ b/docs/work/work-items/about-work-items.md @@ -0,0 +1,149 @@ +--- +title: How work items are used to plan and track work in VSTS & TFS +description: Use work items to plan, track, and collaborate with others when developing software apps +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/03/2017 +--- + +# About work items + +[!INCLUDE [temp](../_shared/version-vsts-tfs-all-versions.md)] + +You can use work items to track anything you need to track. + +Each work item represents an object stored in the work item data store. Each work item is assigned a unique identifier, an ID, which is unique within an account or project collection. + +## Work item types + +To track different types of work, different work item types (WITs) are defined. The WITs available to you differ depending on the process or process template used to create your team project. + +For example, the following WITs are available to you when you choose the Agile team project. + +<img src="../guidance/_img/agile-process-plan-wits.png" alt="Agile process, WITs used to plan and track" style="border: 2px solid #C3C3C3;" /> + +To learn more about processes and process templates, see [Choose a process](../guidance/choose-process.md). + + +## Work item form + +Each work item supports tracking data contained in work item fields. Also, it captures changes as updates are made within the History field. + +Each form contains a number of controls as shown below and described in [Work item form controls](../concepts/work-item-form-controls.md). + +![Work item form to track features or user stories](../backlogs/_img/add-work-item-vsts-user-story-form.png) + + +<a id="assign-work-items"></a> +## Assign work items to a team member + +You can only assign a work item to one person at a time. The Assigned To field is person-name field designed to hold an account identity recognizable by VSTS or TFS. + +By default, the system synchronizes system-defined person-name fields with Azure Active Directory (VSTS) or Active Directory (TFS). These fields include: Activated By, Assigned To, Closed By, Created By, and Resolved By. + +You can grant access to a team project by adding security groups that you created in AD or AAD or by adding accounts to existing or custom groups defined from the collection setting Security hub. See these topics for more information: + +- [Access with Azure Active Directory (Azure AD)](../../accounts/add-users-to-aad.md) +- [Set up groups for use in TFS deployments](../../tfs-server/admin/setup-ad-groups.md). + +Anyone who has read-write access to a team project can assign work items to a team member. This includes team members and [stakeholders](../../quickstart/get-started-stakeholder.md). + +Within the work item form, such as the web form shown, click the Assigned To field to select a team member to assign the work item to. Or, you can begin typing the name of a team member to quickly focus your search to a select few. + +![Web work item form, Assign to field](../_shared/_img/assign-work-items.png) + +Note the following: +- You can assign a work item only to team members recognized by the system, ones that you have added as team members +- The default list of names available in the drop-down menu for the Assigned To field contains all user accounts added to the [VSTS account](../../accounts/add-team-members-vs.md) or [TFS team project](../../accounts/add-users.md). These accounts are all members of the Project Collection Valid Users group. Also, these names are automatically synchronized with Azure Active Direct or Active Directory when AAD or AD is configured as part of the account (VSTS) or deployment (TFS). +- Some drop-down menus that support assignment from the backlog or board pages in the web portal are automatically limited to team members +- Over time, the drop-down menu of person-name fields will display most recently selected names +- The system shows the display name and adds the account name when required to disambiguate identical display names +- You can assign a work item to one and only one team member at a time. If work is split across two or more team members, then you should consider creating additional work items that you'll assign to each member responsible for the work to be completed +- You can assign several work items at once from the backlog or query results, see [Bulk modify work items](../backlogs/bulk-modify-work-items.md) for details. + + +>[!NOTE] +>**On-premises TFS only**: To minimize the list of names that appear in the drop-down menus of person-name fields, you can scope the field to only those groups that you want to appear in the menu. You do this by adding one or more of the following child elements to the **FIELD** definition in the work item type definition: **ALLOWEDVALUES**, **PROHIBITEDVALUES**, and **VALIDUSER**. For details, see [Apply a field rule](../reference/apply-rule-work-item-field.md). + + +<a id="assign-to-sprint"></a> +## Assign work items to a sprint + +To schedule work items to be worked on during at specific time period, you assign the Iteration field. to learn more, see [Schedule sprints](../scrum/define-sprints.md). + +## Find or list work items + +You can use the search box to perform an adhoc search to find specific work items based on select field criteria. + +Or, you can create a query to perform a managed search which will list work items based on your query criteria. With manage searches you can perform a number of other tasks, such as to triage work items, create a trend or status chart and add to the dashboard, and more. + +To learn more, see these topics: +- [Queries overview](../track/example-queries.md) +- [Adhoc vs managed queries](../track/adhoc-vs-managed-queries.md) +- [Managed queries](../track/using-queries.md) +- [Charts](../../report/charts.md) +- [Dashboards](../../report/dashboards.md) + +## Customize a WIT + +You can add or modify the fields contained within a WIT or add a custom WIT. The process you use depends on the process model in affect for your team project. + +To learn more, see [Customize your work tracking experience](../customize/customize-work.md#process-models). + + +## Fill in work item fields quickly using work item templates + +With work item templates you can quickly create work items which have pre-populated values for your team's commonly used fields. For example, you can create a task template that will set the area path, iteration path, and discipline or activity whenever you use it to create a task. + +Based on the platform or version you use, you can perform the following tasks. +- Capture a work item as a template +- Add a work item using a template +- Apply templates to work items +- Manage work item templates + +Prior to creating templates, consider how you and your team(s) will use the templates. If you'll be using several templates, determine a naming convention that will help users easily select the right template for their use. + +If you want to use custom fields in your templates, define those fields prior to creating your templates. See [Customize a field for a process](../process/customize-process-field.md) for VSTS, and [Add or modify a field](../customize/add-modify-field.md) for on-premises TFS. + +You can specify any number of fields you want, including ones that the user will change—such as Title or Description. If you want the work item assigned to a specific team, define the team Area Path as part of the template. + +Once you have a template defined, you can share it via email or a dashboard. Copy the link to the template and paste it within a markdown widget or through the Welcome page. See [Markdown guidance](../../reference/markdown-guidance.md). + +To learn more, see [Use templates to add and update work items](../backlogs/work-item-template.md). + + +## Try this next + +> [!div class="nextstepaction"] +> [Add a work item](/vsts/work/backlogs/add-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) + + +### Required permissions + +As a member added to the Contributors group of a team project, you can use most features provided under the **Work** hub. + +If you've been added with stakeholder access, you are limited to certain features. For details, see [Work as a Stakeholder](../../quickstart/get-started-stakeholder.md). + +To learn more about permissions and access, see [Permissions and access for work tracking](../permissions-access-work-tracking.md). + + +<a id="clients"></a> +### Clients that support tracking work items +You can add work items from various clients, such as: +- From the web portal backlog pages, you can add user stories, backlog items, features, and epics from the [quick add panel](../backlogs/create-your-backlog.md). +- From the [Team Explorer add-in to Visual Studio](../../connect/work-team-explorer.md), you can add most types of work items from the Work page. +- If you work in [Eclipse](https://eclipse.org/home/newcomers.php), you can create work items using [Team Explorer Everywhere](https://www.visualstudio.com/products/team-explorer-everywhere-vs). +- From Test Manager or the web portal, you can can [create test cases that automatically link to a user story or product backlog item](../../manual-test/getting-started/create-test-cases.md). +- You can create bugs from the web portal, Visual Studio, or when [testing with Test Manager](https://msdn.microsoft.com/library/dd286731.aspx). + +For an overview of all clients that connect to your team project, see [Tools and clients that connect to VSTS and TFS](../../tools.md). + + + + + + \ No newline at end of file diff --git a/docs/work/work-items/breadcrumb/toc.yml b/docs/work/work-items/breadcrumb/toc.yml new file mode 100644 index 00000000000..ef348e47665 --- /dev/null +++ b/docs/work/work-items/breadcrumb/toc.yml @@ -0,0 +1,11 @@ +- name: VSTS and TFS + tocHref: /vsts/ + topicHref: /vsts/index + items: + - name: Agile + tocHref: /vsts/ + topicHref: /vsts/index#pivot=services&panel=agile + items: + - name: Work Items + tocHref: /vsts/ + topicHref: /vsts/work/work-items/index \ No newline at end of file diff --git a/docs/work/work-items/index.md b/docs/work/work-items/index.md new file mode 100644 index 00000000000..c1eaf58938b --- /dev/null +++ b/docs/work/work-items/index.md @@ -0,0 +1,68 @@ +--- +title: Index to topics for work item tracking in VSTS & TFS +description: Index to topics for planning and tracking work in VSTS and Team Foundation Server (TFS) +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: +ms.manager: douge +ms.author: kaelli +ms.date: 08/28/2017 +--- + +# Work Items + + +Track the features and requirements you're developing, code defects or bugs, and other particulars using work items. + +<!--- +## Overview +[About work items](about-work-items.md) +--> + +## 5-Minute Quickstarts + +- [Add work items](/vsts/work/backlogs/add-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Drive Git development](/vsts/work/backlogs/connect-work-items-to-git-dev-ops?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) + +## Step-by-Step Tutorials + +- [Manage bugs](/vsts/work/backlogs/manage-bugs?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Manage issues](/vsts/work/backlogs/manage-issues-impediments?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Move, change, or delete items](/vsts/work/backlogs/remove-delete-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Copy/clone work items](/vsts/work/backlogs/copy-clone-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Link work items](/vsts/work/backlogs/add-link?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Bulk modify (web)](/vsts/work/backlogs/bulk-modify-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Follow work](/vsts/collaborate/follow-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) + + +## Concepts + +- [Agile process guidance](/vsts/work/guidance/agile-process?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [CMMI process guidance](/vsts/work/guidance/cmmi-process?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Scrum process guidance](/vsts/work/guidance/scrum-process?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) + +## How-to Guides +- [Use @mentions to further discussion](/vsts/notifications/at-mentions?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Use #ID to link to work items](/vsts/notifications/add-links-to-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Use work item form controls](/vsts/work/concepts/work-item-form-controls?toc=/vsts/work/work-items/toc.json) +- [Add tags to work items](/vsts/work/track/add-tags-to-work-items?toc=/vsts/work/work-items/toc.json) +- [Use work item templates](/vsts/work/backlogs/work-item-template?toc=/vsts/work/work-items/toc.json) +- [Go mobile](/vsts/collaborate/mobile-work?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Email/print work items](../how-to/email-work-items.md) +- [Bulk add or modify (Excel)](/vsts/work/office/bulk-add-modify-work-items-excel?toc=/vsts/work/work-items/toc.json) + +## Reference +- [Permissions and access for work tracking](/vsts/work/permissions-access-work-tracking?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) +- [Work item field index](/vsts/work/guidance/work-item-field?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json) + + +## Resources + +- [Kanban](../kanban/index.md) +- [Scrum](../scrum/index.md) +- [Backlogs](../backlogs/index.md) +- [Queries](../track/index.md) +- [Customization](../customize/index.md) + + + diff --git a/docs/work/work-items/toc.yml b/docs/work/work-items/toc.yml new file mode 100644 index 00000000000..5b7b7f9bf44 --- /dev/null +++ b/docs/work/work-items/toc.yml @@ -0,0 +1,146 @@ +- name: Work Items + href: index.md +- name: Overview + items: + - name: About work items + href: about-work-items.md +- name: Quickstarts + items: + - name: Add a work item + href: /vsts/work/backlogs/add-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Drive Git development + href: /vsts/work/backlogs/connect-work-items-to-git-dev-ops?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json +- name: Tutorials + items: + - name: Follow work + href: /vsts/collaborate/follow-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Manage bugs + href: /vsts/work/backlogs/manage-bugs?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Manage issues or impediments + href: /vsts/work/backlogs/manage-issues-impediments?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: "Move, change, or delete items" + href: /vsts/work/backlogs/remove-delete-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Link work items + href: /vsts/work/backlogs/add-link?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Bulk modify (web) + href: /vsts/work/backlogs/bulk-modify-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Copy/clone work items + href: /vsts/work/backlogs/copy-clone-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json +- name: Concepts + items: + - name: Work item form controls + href: /vsts/work/concepts/work-item-form-controls?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: "Link types & link relationships" + href: /vsts/work/track/link-work-items-support-traceability?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json toc.json + - name: Share work plans + href: /vsts/work/track/share-plans?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: New work item experience + href: /vsts/work/process/new-work-item-experience?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/breadcrumb/toc.json + - name: Permissions and access for work tracking + href: /vsts/work/permissions-access-work-tracking?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Agile process guidance + href: /vsts/work/guidance/agile-process?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/breadcrumb/toc.json + items: + - name: "Agile work item types & workflow" + href: /vsts/work/guidance/agile-process-workflow?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/breadcrumb/toc.json + - name: Scrum process guidance + href: /vsts/work/guidance/scrum-process?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/breadcrumb/toc.json + items: + - name: "Scrum work item types & workflow" + href: /vsts/work/guidance/scrum-process-workflow?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/breadcrumb/toc.json + - name: CMMI process guidance + href: /vsts/work/guidance/cmmi-process?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + items: + - name: "CMMI work item types & workflow" + href: /vsts/work/guidance/cmmi-process-workflow?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: CMMI background + href: /vsts/work/guidance/cmmi/guidance-background-to-cmmi?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Project management + href: /vsts/work/guidance/cmmi/guidance-project-management?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + items: + - name: Project activities + href: /vsts/work/guidance/cmmi/guidance-project-activities?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/breadcrumb/toc.json + - name: Project inception + href: /vsts/work/guidance/cmmi/guidance-project-inception?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/breadcrumb/toc.json + - name: Plan a project + href: /vsts/work/guidance/cmmi/guidance-plan-a-project-cmmi?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Manage change + href: /vsts/work/guidance/cmmi/guidance-manage-change?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Manage risk + href: /vsts/work/guidance/cmmi/guidance-manage-risks?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Iteration activities + href: /vsts/work/guidance/cmmi/guidance-iteration-activities?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Plan an iteration + href: /vsts/work/guidance/cmmi/guidance-plan-an-iteration-cmmi?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Manage issues + href: /vsts/work/guidance/cmmi/guidance-manage-issues-cmmi?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Engineering + href: /vsts/work/guidance/cmmi/guidance-engineering?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + items: + - name: Develop requirements + href: /vsts/work/guidance/cmmi/guidance-develop-requirements?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Arrange requirements into a product plan + href: /vsts/work/guidance/cmmi/arrange-requirements-into-a-product-plan?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Create a solution architecture + href: /vsts/work/guidance/cmmi/guidance-create-solution-architecture?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Implement development tasks + href: /vsts/work/guidance/cmmi/guidance-implement-development-tasks?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Build a product + href: /vsts/work/guidance/cmmi/guidance-build-product?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Track bugs + href: /vsts/work/guidance/cmmi/track-bugs?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json +- name: How-to Guides + items: + - name: "Use @mentions to further discussion" + href: /vsts/notifications/at-mentions?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: "Use #ID to link to work items" + href: /vsts/notifications/add-links-to-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Add tags to work items + href: /vsts/work/track/add-tags-to-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Use work item templates + href: /vsts/work/productivity/work-item-template?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Go mobile + href: /vsts/collaborate/mobile-work?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Email/print work items + href: /vsts/work/how-to/email-work-items?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Define area paths + href: /vsts/work/customize/set-area-paths?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Define iteration paths + href: /vsts/work/customize/set-iteration-paths-sprints?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: "Manage permissions & access" + href: /vsts/work/how-to/set-permissions-access-work-tracking?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Switch project or team focus + href: /vsts/work/how-to/switch-team-context-work?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Bulk add or modify (Excel) + href: /vsts/work/office/bulk-add-modify-work-items-excel?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Get started as a Stakeholder + href: /vsts/quickstart/get-started-stakeholder?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json +- name: Reference + items: + - name: Work item field index + href: /vsts/work/guidance/work-item-field?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + items: + - name: "Code review & feedback field reference" + href: /vsts/work/guidance/guidance-code-review-feedback-field-reference?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: "Bugs, issues, & risks field reference" + href: /vsts/work/guidance/cmmi/guidance-bugs-issues-risks-field-reference-cmmi?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Change request field reference + href: /vsts/work/guidance/cmmi/guidance-change-request-field-reference-cmmi?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Requirements field reference + href: /vsts/work/guidance/cmmi/guidance-requirements-field-reference-cmmi?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Review meeting field reference + href: /vsts/work/guidance/cmmi/guidance-review-meeting-field-reference-cmmi?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json + - name: Clients that support work tracking + href: /vsts/tools?toc=/vsts/work/work-items/toc.json&bc=/vsts/work/work-items/breadcrumb/toc.json +- name: Resources + items: + - name: Kanban + href: ../kanban/index.md + - name: Scrum + href: ../scrum/index.md + - name: Backlogs + href: ../backlogs/index.md + - name: Queries + href: ../track/index.md + - name: Customization + href: ../customize/index.md diff --git a/docs/work/work-items/view-add-work-items.md b/docs/work/work-items/view-add-work-items.md new file mode 100644 index 00000000000..b79d35256db --- /dev/null +++ b/docs/work/work-items/view-add-work-items.md @@ -0,0 +1,56 @@ +--- +title: View and add work items | Team Services +description: View and add work items using the work items page +ms.technology: vs-devops-wit +ms.prod: vs-devops-alm +ms.assetid: EBDE0739-FAE6-4BEA-8F59-E9D20AFE5FE8 +ms.manager: douge +ms.author: kaelli +ms.topic: get-started-article +ms.date: 08/18/2017 +--- + +# View and add work items using the Work Items page + +**VSTS** + +>[!NOTE] +><b>Feature availability: </b>The **Work Items** page is in preview and currently available from Team Services only. + +We have launched the preview of the new **Work Items** page under the **Work** hub in your VSTS account. You can enable it from the [Preview features menu](../../collaborate/preview-features.md) that you access from your account profile. + +The set of features available to you through this page and its personalized pivots and filter functions will help streamline your ability to find work items important to you defined across teams within a team project. + +<img src="_img/work-items-hub.png" alt="Work hub, Work Items page, Add a work item" style="border: 2px solid #C3C3C3;" /> + +## View work items + +With the Work Items views, you can focus on relevant items inside a team project via these five pivots: + +* **Assigned to me**: lists all work items assigned to you in the project in the order they were last updated. To open or update a work item, simply click its title. +* **Following**: lists all work items that you're [following](../../collaborate/follow-work-items.md). +* **Mentioned**: lists all work items in which you've been mentioned in the last 30 days. +* **My activity**: lists all work items that you have recently viewed or updated. +* **Recently created**: lists all work items recently created in the project. + +## Add a work item +Add a work item from within the hub is just one click away. You can add a work item for any type that's enabled in the project from the **New item** drop down menu. + +<img src="_img/work-items-hub-new.png" alt="Work hub, Work Items page, Add a work item" style="border: 2px solid #C3C3C3;" /> + +## Filter to create personal views +Work items can be filtered by typing a keyword or using one or more of the fields provided, such as work item type, assigned to, state, and tags. The page remembers the filters you set for each pivot, supporting personalized views across all pivots. + +<img src="_img/work-items-filter-bug.png" alt="Filter Work Items page" style="border: 2px solid #C3C3C3;" /> + + +## Got feedback? + +Fill out the comment box that appears when you turn the feature off. See also our [comprehensive feedback and support page](../../provide-feedback.md). + +## Related notes +- [Work from the account home page](../../connect/account-home-pages.md) +- [Enable preview features](../../collaborate/preview-features.md) + + + \ No newline at end of file diff --git a/index.md b/index.md new file mode 100644 index 00000000000..6c38455a516 --- /dev/null +++ b/index.md @@ -0,0 +1 @@ +# Welcome to test-docset! \ No newline at end of file diff --git a/release-notes/2012/_img/10_29_01.png b/release-notes/2012/_img/10_29_01.png new file mode 100644 index 00000000000..2bb9144a579 Binary files /dev/null and b/release-notes/2012/_img/10_29_01.png differ diff --git a/release-notes/2012/_img/10_29_02.png b/release-notes/2012/_img/10_29_02.png new file mode 100644 index 00000000000..d6285ea8033 Binary files /dev/null and b/release-notes/2012/_img/10_29_02.png differ diff --git a/release-notes/2012/_img/10_29_03.png b/release-notes/2012/_img/10_29_03.png new file mode 100644 index 00000000000..7edbe8db0c1 Binary files /dev/null and b/release-notes/2012/_img/10_29_03.png differ diff --git a/release-notes/2012/_img/11_19_01.png b/release-notes/2012/_img/11_19_01.png new file mode 100644 index 00000000000..f34842b1450 Binary files /dev/null and b/release-notes/2012/_img/11_19_01.png differ diff --git a/release-notes/2012/_img/11_19_02.png b/release-notes/2012/_img/11_19_02.png new file mode 100644 index 00000000000..062f163ab9d Binary files /dev/null and b/release-notes/2012/_img/11_19_02.png differ diff --git a/release-notes/2012/_img/11_19_03.png b/release-notes/2012/_img/11_19_03.png new file mode 100644 index 00000000000..2fa0fab2123 Binary files /dev/null and b/release-notes/2012/_img/11_19_03.png differ diff --git a/release-notes/2012/_img/12_10_01.png b/release-notes/2012/_img/12_10_01.png new file mode 100644 index 00000000000..6ab2361276b Binary files /dev/null and b/release-notes/2012/_img/12_10_01.png differ diff --git a/release-notes/2012/_img/12_10_02.png b/release-notes/2012/_img/12_10_02.png new file mode 100644 index 00000000000..248aa8531a7 Binary files /dev/null and b/release-notes/2012/_img/12_10_02.png differ diff --git a/release-notes/2012/_img/12_10_03.png b/release-notes/2012/_img/12_10_03.png new file mode 100644 index 00000000000..c97072e51d6 Binary files /dev/null and b/release-notes/2012/_img/12_10_03.png differ diff --git a/release-notes/2012/_img/12_10_04.png b/release-notes/2012/_img/12_10_04.png new file mode 100644 index 00000000000..f22d9dfe5ff Binary files /dev/null and b/release-notes/2012/_img/12_10_04.png differ diff --git a/release-notes/2012/_img/8_13_01.png b/release-notes/2012/_img/8_13_01.png new file mode 100644 index 00000000000..4da3d693d51 Binary files /dev/null and b/release-notes/2012/_img/8_13_01.png differ diff --git a/release-notes/2012/_img/8_13_02.png b/release-notes/2012/_img/8_13_02.png new file mode 100644 index 00000000000..19477960e5d Binary files /dev/null and b/release-notes/2012/_img/8_13_02.png differ diff --git a/release-notes/2012/_img/8_13_03.png b/release-notes/2012/_img/8_13_03.png new file mode 100644 index 00000000000..fafc31c7b1f Binary files /dev/null and b/release-notes/2012/_img/8_13_03.png differ diff --git a/release-notes/2012/_img/8_13_04.png b/release-notes/2012/_img/8_13_04.png new file mode 100644 index 00000000000..a02ea60e1eb Binary files /dev/null and b/release-notes/2012/_img/8_13_04.png differ diff --git a/release-notes/2012/_img/8_27_01.png b/release-notes/2012/_img/8_27_01.png new file mode 100644 index 00000000000..7c42c41ae2d Binary files /dev/null and b/release-notes/2012/_img/8_27_01.png differ diff --git a/release-notes/2012/_img/8_27_02.png b/release-notes/2012/_img/8_27_02.png new file mode 100644 index 00000000000..761b4851d33 Binary files /dev/null and b/release-notes/2012/_img/8_27_02.png differ diff --git a/release-notes/2012/_img/8_27_03.png b/release-notes/2012/_img/8_27_03.png new file mode 100644 index 00000000000..a0351e54490 Binary files /dev/null and b/release-notes/2012/_img/8_27_03.png differ diff --git a/release-notes/2012/_img/8_27_04.png b/release-notes/2012/_img/8_27_04.png new file mode 100644 index 00000000000..0ed528b1657 Binary files /dev/null and b/release-notes/2012/_img/8_27_04.png differ diff --git a/release-notes/2012/_img/8_27_05.png b/release-notes/2012/_img/8_27_05.png new file mode 100644 index 00000000000..1feecba4911 Binary files /dev/null and b/release-notes/2012/_img/8_27_05.png differ diff --git a/release-notes/2012/_img/8_27_06.png b/release-notes/2012/_img/8_27_06.png new file mode 100644 index 00000000000..be1aaa93787 Binary files /dev/null and b/release-notes/2012/_img/8_27_06.png differ diff --git a/release-notes/2012/_img/8_6_01.png b/release-notes/2012/_img/8_6_01.png new file mode 100644 index 00000000000..2fab13bbbdc Binary files /dev/null and b/release-notes/2012/_img/8_6_01.png differ diff --git a/release-notes/2012/_img/8_6_02.png b/release-notes/2012/_img/8_6_02.png new file mode 100644 index 00000000000..0b411f8910b Binary files /dev/null and b/release-notes/2012/_img/8_6_02.png differ diff --git a/release-notes/2012/_img/8_6_03.png b/release-notes/2012/_img/8_6_03.png new file mode 100644 index 00000000000..4b777a93c56 Binary files /dev/null and b/release-notes/2012/_img/8_6_03.png differ diff --git a/release-notes/2012/_img/9_17_01.png b/release-notes/2012/_img/9_17_01.png new file mode 100644 index 00000000000..8bb3fdc86f5 Binary files /dev/null and b/release-notes/2012/_img/9_17_01.png differ diff --git a/release-notes/2012/_img/9_17_02.png b/release-notes/2012/_img/9_17_02.png new file mode 100644 index 00000000000..824aa638019 Binary files /dev/null and b/release-notes/2012/_img/9_17_02.png differ diff --git a/release-notes/2012/_img/9_17_03.png b/release-notes/2012/_img/9_17_03.png new file mode 100644 index 00000000000..651840d440e Binary files /dev/null and b/release-notes/2012/_img/9_17_03.png differ diff --git a/release-notes/2012/_img/9_17_04.png b/release-notes/2012/_img/9_17_04.png new file mode 100644 index 00000000000..65cf83c86da Binary files /dev/null and b/release-notes/2012/_img/9_17_04.png differ diff --git a/release-notes/2012/aug-06-team-services.md b/release-notes/2012/aug-06-team-services.md new file mode 100644 index 00000000000..c8eea8b1589 --- /dev/null +++ b/release-notes/2012/aug-06-team-services.md @@ -0,0 +1,37 @@ +--- +title: Team Foundation Service updates - Aug 6 +description: VSTS release notes for August 6 2012 +ms.assetid: 23fc5dd7-6fc3-4e95-b518-9ae63ec8fbcd +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Aug 6 + +Welcome to our Team Foundation Service news feed. Bookmark this page because it’s going to be a great way to learn about happenings on the service. Every sprint (every 3 weeks) and sometimes more often we’ll update this page with information on the latest service updates – including important bug fixes and new features. + +As you’ve probably [seen](http://blogs.msdn.com/b/jasonz/archive/2012/08/01/final-build-for-vs-2012-availability-and-launch-dates-ahead.aspx), we’ve just recently released VS/TFS 2012 and .NET 4.5 to manufacturing. We’re pretty excited to be done and handing it off to production. Over the past few months, we’ve turned more and more of our attention to advancing our service as our work on TFS 2012 has wound down. The arrival rate of new online features will continue to accelerate over the next couple of months. This sprint (sprint 34) we have a few nice improvements to share (including this new “News” section) but we’ve got a few goodies we’re saving up too. Stay tuned to see some super cool stuff become available. + +The “big” improvement in this update is a highly requested new feature on the task board. For a while now, people have been asking to be able to use the task board drag and drop to be able to move tasks between people and user stories. Today we deployed that capability. In the screenshot below I am dragging the “Add color to the UI” task from abjork to bharry_msft. At the same time I am dragging it from To Do to In Progress. This one drag operation will both assign the task to me and change its state to In Progress. The same drag operations work if you are pivoted by user story rather than team member. It’s a handy productivity enhancement for stand-ups. + +![Drag and assign a task in one step](_img/8_6_01.png) + +We’ve also improved the Azure Continuous Deployment feature we released in June. You now get a good summary of your app deployment steps in the build report. This makes it easier to get a holistic view of the state of your build/deployment. This summary is for a cloud app. You get less detail for a web site but you’ll still get something. + +![Build report with deployment summary](_img/8_6_02.png) + +We’ve also made a variety of updates to the welcome site content – a new [article on Code Review](https://www.visualstudio.com/en-us/get-started/get-code-reviewed-vs) and updates to all the screen shots to reflect some of the styling changes we’ve made in the past couple of months. + +Lastly, we’ve updated our service status page to contain more information about expected maintenance windows, service interruptions, etc. You can still go to the service blog if you like but this brings it all to the main site and saves you the click to the blog. + +![Service status page](_img/8_6_03.png) + +As I said at the beginning a few simple improvements that just make the experience better. Stay tuned for news on some more significant enhancements coming soon. + +Thanks, + +Brian Harry \ No newline at end of file diff --git a/release-notes/2012/aug-13-team-services.md b/release-notes/2012/aug-13-team-services.md new file mode 100644 index 00000000000..be67b390788 --- /dev/null +++ b/release-notes/2012/aug-13-team-services.md @@ -0,0 +1,47 @@ +--- +title: Team Foundation Service updates - Aug 13 +description: VSTS release notes for August 13 2012 +ms.assetid: e9fe612f-7435-4cf5-b476-666952ef9139 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Aug 13 + +While our existing support for Scrum remains very popular, we’ve been watching closely the growing interest in kanban. Today, we’re announcing and releasing a new kanban board for Team Foundation Service. Now you can manage your project with Scrum, with kanban or you can combine them to get the best of both by using kanban visualize the flow of your Scrum backlog items. Scrum and kanban are both work management strategies that involve breaking down a problem and then visually transitioning work through a series of states. In general, you tend to use more states with kanban than Scrum and you use limits on states called Work In Progress (or WIP) limits to control how much work can be in each state. While Scrum uses the burn down chart to visualize and manage work through an iteration, kanban uses the Cumulative Flow Diagram to visualize work across your entire backlog. Visualizing the backlog in this manner helps you identify bottlenecks in your process. + +A full philosophical debate about the differences between [Scrum](http://en.wikipedia.org/wiki/Scrum_(development)) and [kanban](http://en.wikipedia.org/wiki/Kanban_(development)) would fill volumes so I won’t try to cover it here. If you want to learn more I recommend you start checking out the Wikipedia articles on Scrum and kanban. Regardless of the approach you prefer, we want the decision to be yours. + +The centerpiece of our new kanban support is a new kanban board associated with your product backlog. Below you can see my Scrum project with 4 states: New, Approved, Committed and Done. Each user story is a card and the column represents the state. The cards are colored based on their state – grey for work that hasn’t started, blue for in progress and green for completed work. You’ll also notice some numbers at the top of the columns (like 4/4). This is your work in progress tally. That’s saying that you have 4 user stories in progress and a Work In Progress limit is 4 – so all is good. More on this in a minute. + +![Kanban board](_img/8_13_01.png) + +You’ll also notice, in the upper right hand corner a cumulative flow diagram that can be zoomed by clicking on it to provide a full view of the flow of your work. + +![Cumulative flow chart](_img/8_13_02.png) + +If you put more work in a state than your work in progress limits allow, then we’ll flag it for you – notice the APPROVED header and the associated WIP count is now red. + +![Work in progress limits](_img/8_13_03.png) + +Of course, you get to decide what your work in progress limits are. Just click on the numbers and set it to what ever you want it to be. + +![Setting the WIP limit](_img/8_13_04.png) + +This is just the beginning of our kanban support. We’re practicing build-measure-learn by getting this out to you early. There are a few things that I already know you’ll notice and miss. Probably the biggest one is in the inability to add/remove/change the states. Right now you have to use the states defined by the process template you created your project with. We’re in the process of adding support for customizable states so look for it in an upcoming sprint. There are a handful of other things that we’re already working on, including - + +1.Edits directly on the card (like in our Agile task board. +2.Dragging a card back from Approved to New. Today, the work around is open the card, change the state to Removed and save (without closing), then change the state back to New and Save & Close. We’ll fix this quickly. +3.and more... + +But more importantly than that, in the spirit of Build-Measure-Learn, we want to know what enhancements you want to see. Get started using kanban on your project today. + +We’re committed to continuing to bring great tools to Agile development teams. Team Foundation Service will continue to be the easiest way to get started and move fast with the latest in software development and collaboration tools. You can learn more about our kanban board [here in our learn section](https://www.visualstudio.com/en-us/get-started/share-your-code-in-GIT-vs). Please try it out ([sign-up](http://go.microsoft.com/fwlink/?LinkId=307137) for a new account; existing users can [sign-in](https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1366668045&rver=6.0.5276.0&wp=MCLBI&wlcxt=VisualStudio%24VisualStudio%24VisualStudio&wreply=https%3a%2f%2ftfs.visualstudio.com%2faccount%2ftfs-subscriptions%3fauth_redirect%3d1&lc=1033&id=290275&mkt=en-US)) and let us know what you think. + +Thanks, + +Brian Harry \ No newline at end of file diff --git a/release-notes/2012/aug-27-team-services.md b/release-notes/2012/aug-27-team-services.md new file mode 100644 index 00000000000..3256e04b3ac --- /dev/null +++ b/release-notes/2012/aug-27-team-services.md @@ -0,0 +1,64 @@ +--- +title: Team Foundation Service updates - Aug 27 +description: VSTS release notes for August 27 2012 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 98cc1eb1-1b6f-415d-814b-da3d8a02d90c +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Aug 27 + +Last sprint was mostly focused on new project management features – kanban and some task board improvements. This sprint, we’ve turned our attention to more code centric improvements. + +##A new source viewer and diff experience + +Probably the most exciting improvement this sprint is a new source viewer and diff experience. Until this sprint, we had a very simple source code browsing experience. You can see an example here… + +![old source viewer](_img/8_27_01.png) + +This sprint, we are releasing a much improved source browsing experience… The first thing that is immediately obvious is that the new viewer supports syntax highlighting. We currently support syntax coloring for Batch files, CoffeeScript, C++, C#, CSS, F#, HTML, Jade, Java, JavaScript, PHP, ASP.NET Razor, Visual Basic, and XML. If there are others that are important to you let us know and we’ll get them on the backlog. + +![new source viewer](_img/8_27_02.png) + +We’ve also added a search experience to the source viewer so that you don’t have to use just the built in browser search. It supports regular expressions (click the R circle), whole word matches (the W circle) and Case sensitive matches (the C circle). Matches highlight in the document as you type and you can use the up and down arrows to move between matches. + +![search in source viewer](_img/8_27_03.png) + +The new source viewer has also been used to replace our previous “diff” experience. In addition to the syntax highlighting and search experience I listed above, it provides a richer diff experience – including a “diff map”, diffs within a line, and more… + +![diff viewer](_img/8_27_04.png) + +##Updates to the hosted build image + +We updated the build VM image on our hosted build service, adding some new components that people have been asking for… We’ve added SharePoint 2010 to the hosted build image so that you can now do hosted builds of your SharePoint components. There are a number of other things that we are working on (WiX, Phone Tools, etc) that we weren’t quite able to get in for this update but will as soon as we can. + +##Basic auth support + +A couple of weeks ago we [announced](http://blogs.msdn.com/b/bharry/archive/2012/08/13/announcing-git-integration-with-tfs.aspx) support for bridging between local Git repositories and TFS servers. At the time I explained it didn’t work for Team Foundation Service but support would be coming soon. It’s here now! It’s worth noting that, in the short term Git-tf has been available, this rose to the [2nd top voted suggestion](http://gittf.codeplex.com/workitem/3). This makes it so that both of the top two suggestions have now been addressed. + +Part of today’s rollout is support for basic authentication which enables two important new scenarios: + +1. Using the Team Explorer Everywhere command line with Team Foundation Service. You will need to download the latest TEE client to get this to work (we had to make a recent bug fix for basic auth). +2. Using Git-tf with Team Foundation Service. + +To enable basic auth for your account, you need to create alternate credentials. Unfortunately, we can’t use your LiveID credentials with basic auth. These credentials will not replace your LiveID credentials. You will still log into the service with your LiveID and most tools you connect with will use LiveID. The reason for the alternate basic auth credentials is that LiveID requires an interactive web page login and there are scenarios where that is not an appropriate solution. The alternate credentials give us a simple username/password pair that can be used in the appropriate scenarios (like Git-tf and the TEE command line). To enable alternate credentials, you need to edit your user profile. + +![My profile on the team project home page](_img/8_27_05.png) + +Click the “Enable alternate credentials and set password” link on the Credentials page. + +![Enable alternate credentials on the user profile page](_img/8_27_06.png) + +Then enter a password and save the changes. You now have a username and password you can use with the cross platform TEE command line and with the Git-tf command line. See the [learn content](https://www.visualstudio.com/en-us/get-started/share-your-code-in-GIT-vs) for more info on how to use this. + +That’s it for sprint 35. We’re already busy on sprint 36 and looking forward to bringing more great stuff your way. Please feel free to use our [UserVoice site](https://visualstudio.uservoice.com/forums/330519-vso) if you want to help prioritize our investments. + +By the way, we've updated this page so you can bookmark it ([http://tfs.visualstudio.com/en-us/news/](http://tfs.visualstudio.com/en-us/news/)), and you'll always get the most recent news. + +Thanks, + +Brian Harry \ No newline at end of file diff --git a/release-notes/2012/dec-10-team-services.md b/release-notes/2012/dec-10-team-services.md new file mode 100644 index 00000000000..8c2be26325c --- /dev/null +++ b/release-notes/2012/dec-10-team-services.md @@ -0,0 +1,51 @@ +--- +title: Team Foundation Service updates - Dec 10 +description: VSTS release notes for December 10 2012 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: ee451bdd-10c8-44cc-9d26-4b95a07035b2 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Dec 10 + +As part of our ongoing efforts to make sure that Team Foundation Server is a great home for developers, we’ve been investing more in the web experience for version control. We are shipping the first round of these improvements in this sprint, but expect more goodness to follow over the coming weeks and months. + +The first thing that you will notice is purely cosmetic. We’ve renamed the “Source” hub and changed the hub order. It’s now the first thing after the team home page and we’ve called it “Code”, making the top bar read “Code, Work, Build” which I think makes a fine motto to live life by. + +![Code, Work, Build in the new web version control experience](_img/12_10_01.png) + +Clicking into the Code hub brings you into the updated Code Explorer view. We've been trying to make the explorer much more productive while also cleaning things up a bit. The navigation pane on the left hand side is now a full folder view allowing you to drill into your folder structure. Also you can easily switch between files by simply clicking on them. If you do not want to see the navigation pane then just click on the arrow to collapse it. It will remember your preference next time you come to this page. + +As you drill down into the folders you will notice that if you stay in a folder for a while then the details of the last changeset that affected each file are fetched for you along with the check-in comment and the person who made the change. Clicking on the file will show you the contents of it in the [rich code viewer that we've had since August](https://www.visualstudio.com/en-us/articles/news/2012/aug-27-team-services). But if you click on the changeset comment it will take you to a fantastic, newly improved changeset summary view showing you exactly what happened in the changeset all from a single page. This even includes inline diffs for files that have been edited and a summary of the total number of files edited, added or deleted. + +![Changeset summary view](_img/12_10_02.png) + +By default the navigation pane is minimized when looking at the changeset summary, but you can click on the arrow on the left hand side if you want to expand the view to look at the individual files in the changeset. Alternatively, you can just click on the filename in the changeset summary view to see the contents of the file including a full diff view – also allowing you to switch between a side-by-side or inline diff view of the files depending on what you prefer. + +![Side-by-side diff view of a file](_img/12_10_03.png) + +Jumping back to the code explorer, you can easily see the history for the current path you are viewing by selecting the history tab. Here you will see a list of changesets affecting that path (or children of it) and you can quickly drill down into any of the changesets. + +![History view in code explorer](_img/12_10_04.png) + +If you want to only see changes that you personally made then you can click “my changes”. For more complex changeset filtering, select the “advanced search” link as shown above. For example, you can filter by team member name, a date range or changeset range. + +As I mentioned, this is the first of a series of improvements to this area that you should see coming over the next few sprints. I appreciate that we’ve moved things around quite a bit this time. We’ve got most of the core structure that we want in place now and the experience we’ve had dogfooding this internally is that the changes have not been too disruptive to people adjusting to the new UI. The improvements made to the left hand navigation pane alone have hugely increased productivity when browsing around the source code. That said, we currently have one minor feature that we want to improve. There is no way to type a changeset number in and quickly go to it without using the advanced search panel in the history view. We’ll be doing some work in a future sprint to make this easier to get to, but for now I hope you’ll find the other changes we’ve made worth it. Let us know what you think. + +While the changes to the version control experience are the biggest UI change we’ve made this sprint, we’ve been busy elsewhere. In our ongoing attempt to keep the hosted build machine updated with the latest & greatest, we added the following to the hosted build machines this sprint: + +- [Azure SDK 1.8](https://www.windowsazure.com/en-us/develop/net/) +- [TypeScript 0.8.1](http://typescript.codeplex.com/) +- VS 2012 Update 1 - VS is installed on the build image to ensure you can build everything on the build machine that you can on your dev box using VS. We updated the VS image to the recently released Update 1. + +Besides a bunch of bug fixes, that’s it for sprint 40. As always, let us know how we’re doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Happy holidays!! We’re not planning a deployment on New Year’s Eve (for obvious reasons) so we’ll see you again after the new year. + +Thanks, + +Martin Woodward and Jamie Cool \ No newline at end of file diff --git a/release-notes/2012/nov-19-team-services.md b/release-notes/2012/nov-19-team-services.md new file mode 100644 index 00000000000..4d8abe35118 --- /dev/null +++ b/release-notes/2012/nov-19-team-services.md @@ -0,0 +1,41 @@ +--- +title: Team Foundation Service updates - Nov 19 +description: VSTS release notes for November 19 2012 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: df593025-ff5b-4410-88bb-b350ea9f19f1 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Nov 19 + +##Send work items in email + +Have you ever wanted to grab a set of work items or a query result and send them in email? In this sprint we added the ability to do just that. This feature was in previous releases of Team Foundation Server, but unfortunately was omitted in the 2012 release. Today, we’ve added it back to the service, and will be shipping it to on-premise customers as a part of VS Update 2. + +How does it work? You start from a query in the work items hub. From the toolbar, click the email icon. You can also select individual work items (or multiple items by holding down the CTRL key) and then click Email selected work items from the context menu. + +![Send work items in email](_img/11_19_01.png) + +Enter the name(s) of a person in your project, format the mail to your liking, and click Send. Quick and easy. + +![Send work items in email](_img/11_19_02.png) + +##Build file counts and sizes + +Build summary reports have been updated to include the count and size of files synced to a hosted build machine. Because we have a 1 GB limit for disk space in these environments, this information can help when diagnosing build failures due to running out of disk space. The count and size data is found on the diagnostics tab of the build summary report. Look for the Get Workspace step in the workflow. + +![Build file counts and sizes](_img/11_19_03.png) + +##Account landing page + +Finally, we made some very minor updates to the account landing page to improve the discoverability of the new team project action. + +That’s our list for sprint 39. As always, let us know how we’re doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). See you again on December 10th. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2012/oct-08-team-services.md b/release-notes/2012/oct-08-team-services.md new file mode 100644 index 00000000000..eda7f8b7e45 --- /dev/null +++ b/release-notes/2012/oct-08-team-services.md @@ -0,0 +1,38 @@ +--- +title: Team Foundation Service updates - Oct 8 +description: VSTS release notes for October 8 2012 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: e39e465e-4faa-4dfe-99ca-afbadf7d4ec2 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Oct 8 + +##400 character paths on the server + +One of the top votes on [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) is eliminating the 260 character path limit for developers. As Brian Harry mentioned on his [blog](http://blogs.msdn.com/b/bharry/archive/2012/09/12/visual-studio-update-this-fall.aspx), we have been working on eliminating the server side part of this problem. With this release, we have upped the path limit you can use in TFS version control to 400 characters. While this does not change the 260 path limit on the client, it is a step in the right direction. + +You may be asking yourself, what good are longer paths on the server if I can’t use those paths on the client? One of the reasons folks hit the path limit problem is when they take a source tree that is already long & start to try to put a branch structure on top of it. Now you will be able to organize your source tree on the server however you want, up to 400 characters. If you choose to do this, you still have to be careful that whatever subset of that tree you are planning to sync down in your workspace is still less than 260 characters total. So for example, if you sync a particular branch (a common practice we see) then you will need to continue to make sure each individual branch is less than 260 characters deep. Also be sure to reserve some of those 260 characters for the local part of the path (ex. c:/src). + +So how can you start using long server paths? It’s enabled right now on the service. However support for longer paths required some updates to the client. So to create longer paths, you need VS 2012 Update 1. You can [download the update here](http://go.microsoft.com/fwlink/?LinkId=266498). We will be releasing the official quarterly update to TFS 2012 at the same time the corresponding VS 2012 update is available. Learn more about our new VS & TFS update cadence [in this blog post](http://blogs.msdn.com/b/bharry/archive/2012/09/12/visual-studio-update-this-fall.aspx). The good news is you can try this out today & the quarterly updates to TFS 2012 & VS 2012 with this support is not far away. + +Since this change required an updated to the client, once the upcoming VS 2012 update is available, it’s recommended that you update all of your clients to this version if your team wants to use long paths. If an older client attempts to retrieve a source path that is longer than it can handle locally it will fail in the same manner it does today if your “local path + source path” exceeds the maximum allowed length. Of course older clients will work just fine against servers using long paths as long as they only map a portion of the tree that fits into the 1st 260 characters. + +##Updated learn section + +We have also updated the [learn](https://www.visualstudio.com/en-us/get-started/) section of the site & added several new articles: + +- [Use the Hosted Build Controller](https://www.visualstudio.com/en-us/get-started/hosted-build-controller-vs) +- [Set up an Ant Build in the Cloud](https://www.visualstudio.com/en-us/get-started/build-your-eclipse-projects-vs) + +On the topic of build, there is one warning we wanted to pass along. We gave you instructions in [Set up a Build](https://www.visualstudio.com/en-us/get-started/build-your-apps-vs) that worked, but had a really bad side-effect. With hosted build today, your build drops are put into your VC path. If you simply map the root of your team project for the build, your old build drops are included with the source that is copied to the build machine when a new build is queued. Yikes. We’ve fixed the instructions. If you’ve set up a build using our old instructions, cloak your drops folder. You can look at step 5 for details. + +That’s it for sprint 37. See you again in 3 weeks. + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2012/oct-29-team-services.md b/release-notes/2012/oct-29-team-services.md new file mode 100644 index 00000000000..1db9ce17392 --- /dev/null +++ b/release-notes/2012/oct-29-team-services.md @@ -0,0 +1,47 @@ +--- +title: Team Foundation Service updates - Oct 29 +description: VSTS release notes for October 29 2012 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 0d3e5cc9-4814-40a6-b551-f32c85e94aae +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Oct 29 + +The update to the service this week contains a lot of bug fixes & one new feature in the build space. + +##Build drops + +With this update we are introducing a new option for hosted build drops. First some background. With the on-premise version of TFS, outputs from a build are dropped onto a file share. When we first introduced the hosted build service, dropping the outputs to a file share wasn’t an option since the build service does not have access to file shares inside your firewall. We solved this problem by putting the build outputs into a /drops folder in version control. + +Beyond solving the immediate problem of where to put the build output, this also had some very nice characteristics. It allowed build drops to go into a location managed by TFS. Meaning you didn’t have to get a separate file share setup & the build outputs are backed up with all of your other TFS data. However, it also came with some drawbacks. For example, users now had to be sure to cloak the drops folder or their syncs would get increasingly long. In addition, each build drop generated multiple new commits, which effected the history for the entire repo & triggering unwanted version control notifications. + +With this release we are introducing a new option for storing build outputs on the TFS server, managed by TFS, but not in the version control repository. Our goal is for this to have the advantages of drops in version control without the drawbacks. This drop location will be the replacement for the current version control mechanism and will eventually be available for on premises TFS customers as well. We have some further enhancements to add to this drop location, but eventually it will fully replace the existing version control option. In this update they exist side-by-side. We ask that you start migrating your build definitions away from version control drops to server drops as you are able to. + +So how do you use it? + +In the Visual Studio 2012 Update 1 RC client (you must have the new client) customers will have this additional option for storing build drops when using the hosted build service. The option is called "Copy build output to server". + +![Setting build drop location](_img/10_29_01.png) + +For the first version of this feature we store your build output in a zip file on the server and give you a link to download that zip. + +![Download drop](_img/10_29_02.png) + +You will have the ability to view your build diagnostic logs in TFS Web Access or download your logs as a zip. Being able to view the detailed diagnostics log is a handy new feature that you can use for easier build debugging regardless of where you are dropping the build outputs. Beyond just viewing the log, you easily jump from one error to the next. + +![Diagnostic logs](_img/10_29_03.png) + +##Continued UX updates + +As we mentioned in our last release notes, our plan is to continue refining the UI to ensure it’s easy to use and visually appealing. In this update we have updated the grid headers across the site so they are consistent in all experiences. We've worked at getting the right level of contrast between the column headers and the content as well as improving padding between the toolbar, grid headers, and grid content. + +That’s it for sprint 38. See you again in 3 weeks. + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2012/oct-31-team-services.md b/release-notes/2012/oct-31-team-services.md new file mode 100644 index 00000000000..4572425009f --- /dev/null +++ b/release-notes/2012/oct-31-team-services.md @@ -0,0 +1,27 @@ +--- +title: Team Foundation Service updates - Oct 31 +description: VSTS release notes for October 31 2012 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 0ac905d5-e2a5-4418-af6d-1aa5e17b1581 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Oct 31 + +##Team Foundation Service is Released! + +One year ago, at the first BUILD conference, we unveiled the limited preview of Team Foundation Service. At Tech Ed, in June, we removed the “invitation code” mechanism and opened it up for anyone to try in a public preview. Now, a year after its introduction, we’re announcing that the service is out of Preview and is now available for full production use. + +The new url for the service is [http://tfs.visualstudio.com](http://tfs.visualstudio.com/). The old url ([http://tfspreview.com](http://tfspreview.com/)) will continue to work for the foreseeable future but you should plan on starting to use the new url. If you already have an account, you can now access it at http://[youraccountname].visualstudio.com. Other than that, all of your data is still there (if you have a tfspreview account already) and all of the capabilities remain and the service will continue to advance every sprint (3 weeks). If you don’t already have an account, create one now and give it a try. + +As part of this release, we have disclosed additional information about pricing. Although the service has now been released, our full billing infrastructure is not yet in place. See the [pricing page](https://www.visualstudio.com/en-us/products/visual-studio-online-overview-vs) to learn more about the current status and how we expect it to evolve. + +This represents the culmination of a lot of work over the last year and we are super excited about this milestone. We hope you enjoy the service and look forward to any feedback you have. + +Thanks, + +Brian Harry \ No newline at end of file diff --git a/release-notes/2012/sep-17-team-services.md b/release-notes/2012/sep-17-team-services.md new file mode 100644 index 00000000000..7f013438404 --- /dev/null +++ b/release-notes/2012/sep-17-team-services.md @@ -0,0 +1,59 @@ +--- +title: Team Foundation Service updates - Sep 17 +description: VSTS release notes for September 27 2012 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 8b7d5798-e6f4-4757-b743-0e9ea276fa1c +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Sep 17 + +Another three weeks and another set of updates to the Team Foundation Service. The long Labor Day weekend shortened our sprint a bit; nonetheless, we’ve got a few new capabilities to share. + +##Drag & drop sprint planning + +We made an update to our sprint planning page to make assigning work easier. Previously, you were required to open each work item and manually update the Assigned To field or Activity field. This worked, but was a bit cumbersome when trying to load balance work across the team. Now, assigning work is as simple as dragging and dropping a task on a team member or activity type. In the screenshot below you can see that I’m dragging the “Build the find logic” task to Brian… + +![Assigning a to do item by dragging it onto a team member in the capacity pane](_img/9_17_01.png) + +And in the next screen, you can see that the task is now assigned to Brian and the capacity bars have been updated. + +![To do item assigned](_img/9_17_02.png) + +##Expand & collapse the left panel + +Another useful update in this sprint is ability to collapse the left panel on individual pages. Clicking the small chevron on the left panel will collapse the panel and give you back a bit of screen real estate. For convenience, the panel remembers its state from screen to screen. + +![Backlog page with the left panel expanded](_img/9_17_03.png) + +![Backlog page with the left panel collasped](_img/9_17_04.png) + +##Continued UX updates + +Earlier this summer we pushed a fairly [big update](http://blogs.msdn.com/b/bharry/archive/2012/07/16/team-foundation-service-updates-7-16.aspx) to the navigation of the site. As we continue to update the service we’ll be refining the UI to ensure it’s easy to use and visually appealing. In this update we removed the more traditional tabs from the UI and replaced them with a colored hyperlink. It’s subtle, but another step towards reducing chrome in the UI and making it easier to focus on your data. + +##Process templates + +We made a small change to both the Agile and Scrum process templates and updated the version numbers for both to 6.1 and 2.1 respectively. The change was to relax the workflow for items on the product backlog by allowing you to transition from any state to any other state. The driving force behind this update was feedback from the community. Many of you asked us for a less restrictive workflow on these work items. Our [recent addition of the kanban board](aug-13-team-services.md) highlighted just how restrictive the work flow was. For example, if you were using the Scrum process template and you moved a PBI or Bug from "New" to "Approved", you couldn't move back again! This has now been fixed. The CMMI template remains unchanged. + +##Build verbosity + +In a move to reduce our storage footprint, we’ve removed diagnostic information from the build summary report. If you’re interested in diagnostic information, it’s now only available in the build diagnostic logs included with the drop. In a future update, we’ll be adding the ability to view your diagnostic logs directly through the web UI. + +##Xcode with Git-tf + +If you’re using Xcode in your environment, we published a [new article](https://www.visualstudio.com/en-us/get-started/share-your-xcode-projects-vs) describing how to use Git and Xcode with Team Foundation Service. + +##News RSS feed + +Finally, as [promised](http://blogs.msdn.com/b/bharry/archive/2012/08/27/team-foundation-service-updates-8-27.aspx) we’ve enabled an [RSS feed](https://www.visualstudio.com/team-services/updates/?feed=product_updates) on our news section so you can more easily keep track of what we’re doing. + +That’s the list for sprint 36. We’ll have another update for you in 3 more weeks. Remember to visit our [User Voice](https://visualstudio.uservoice.com/forums/330519-vso) site to give us feedback on our priorities and investments. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2013/_img/07_29_01.png b/release-notes/2013/_img/07_29_01.png new file mode 100644 index 00000000000..48fed17bcd2 Binary files /dev/null and b/release-notes/2013/_img/07_29_01.png differ diff --git a/release-notes/2013/_img/07_29_02.png b/release-notes/2013/_img/07_29_02.png new file mode 100644 index 00000000000..fb435f3a34b Binary files /dev/null and b/release-notes/2013/_img/07_29_02.png differ diff --git a/release-notes/2013/_img/07_29_03.png b/release-notes/2013/_img/07_29_03.png new file mode 100644 index 00000000000..2861f471368 Binary files /dev/null and b/release-notes/2013/_img/07_29_03.png differ diff --git a/release-notes/2013/_img/10_21_01.png b/release-notes/2013/_img/10_21_01.png new file mode 100644 index 00000000000..a9004d089ec Binary files /dev/null and b/release-notes/2013/_img/10_21_01.png differ diff --git a/release-notes/2013/_img/10_21_02.png b/release-notes/2013/_img/10_21_02.png new file mode 100644 index 00000000000..bb5a2bde6dd Binary files /dev/null and b/release-notes/2013/_img/10_21_02.png differ diff --git a/release-notes/2013/_img/11_08_01.png b/release-notes/2013/_img/11_08_01.png new file mode 100644 index 00000000000..1c29eb5712d Binary files /dev/null and b/release-notes/2013/_img/11_08_01.png differ diff --git a/release-notes/2013/_img/11_08_02.png b/release-notes/2013/_img/11_08_02.png new file mode 100644 index 00000000000..80042c7b594 Binary files /dev/null and b/release-notes/2013/_img/11_08_02.png differ diff --git a/release-notes/2013/_img/11_13_01.png b/release-notes/2013/_img/11_13_01.png new file mode 100644 index 00000000000..5b15670e943 Binary files /dev/null and b/release-notes/2013/_img/11_13_01.png differ diff --git a/release-notes/2013/_img/11_13_02.png b/release-notes/2013/_img/11_13_02.png new file mode 100644 index 00000000000..2bd08297f00 Binary files /dev/null and b/release-notes/2013/_img/11_13_02.png differ diff --git a/release-notes/2013/_img/11_13_03.png b/release-notes/2013/_img/11_13_03.png new file mode 100644 index 00000000000..a89fa1d3836 Binary files /dev/null and b/release-notes/2013/_img/11_13_03.png differ diff --git a/release-notes/2013/_img/11_13_04.png b/release-notes/2013/_img/11_13_04.png new file mode 100644 index 00000000000..7d703868f79 Binary files /dev/null and b/release-notes/2013/_img/11_13_04.png differ diff --git a/release-notes/2013/_img/11_13_05.png b/release-notes/2013/_img/11_13_05.png new file mode 100644 index 00000000000..170b38550de Binary files /dev/null and b/release-notes/2013/_img/11_13_05.png differ diff --git a/release-notes/2013/_img/11_13_06.png b/release-notes/2013/_img/11_13_06.png new file mode 100644 index 00000000000..97e7c9ff0b6 Binary files /dev/null and b/release-notes/2013/_img/11_13_06.png differ diff --git a/release-notes/2013/_img/11_13_07.png b/release-notes/2013/_img/11_13_07.png new file mode 100644 index 00000000000..6d2560dd6f1 Binary files /dev/null and b/release-notes/2013/_img/11_13_07.png differ diff --git a/release-notes/2013/_img/11_13_08.png b/release-notes/2013/_img/11_13_08.png new file mode 100644 index 00000000000..8387d4531d0 Binary files /dev/null and b/release-notes/2013/_img/11_13_08.png differ diff --git a/release-notes/2013/_img/11_13_09.png b/release-notes/2013/_img/11_13_09.png new file mode 100644 index 00000000000..d3e33ca1983 Binary files /dev/null and b/release-notes/2013/_img/11_13_09.png differ diff --git a/release-notes/2013/_img/11_13_10.png b/release-notes/2013/_img/11_13_10.png new file mode 100644 index 00000000000..e1e5f3e57be Binary files /dev/null and b/release-notes/2013/_img/11_13_10.png differ diff --git a/release-notes/2013/_img/11_13_11.png b/release-notes/2013/_img/11_13_11.png new file mode 100644 index 00000000000..16a19a79aa5 Binary files /dev/null and b/release-notes/2013/_img/11_13_11.png differ diff --git a/release-notes/2013/_img/11_13_12.png b/release-notes/2013/_img/11_13_12.png new file mode 100644 index 00000000000..9bf3b7c4813 Binary files /dev/null and b/release-notes/2013/_img/11_13_12.png differ diff --git a/release-notes/2013/_img/12_11_01.png b/release-notes/2013/_img/12_11_01.png new file mode 100644 index 00000000000..359f7bb5d25 Binary files /dev/null and b/release-notes/2013/_img/12_11_01.png differ diff --git a/release-notes/2013/_img/12_11_02.png b/release-notes/2013/_img/12_11_02.png new file mode 100644 index 00000000000..4b1665fabff Binary files /dev/null and b/release-notes/2013/_img/12_11_02.png differ diff --git a/release-notes/2013/_img/1_21_01.png b/release-notes/2013/_img/1_21_01.png new file mode 100644 index 00000000000..91238410b0f Binary files /dev/null and b/release-notes/2013/_img/1_21_01.png differ diff --git a/release-notes/2013/_img/1_30_01.png b/release-notes/2013/_img/1_30_01.png new file mode 100644 index 00000000000..e85d512fc74 Binary files /dev/null and b/release-notes/2013/_img/1_30_01.png differ diff --git a/release-notes/2013/_img/1_30_02.png b/release-notes/2013/_img/1_30_02.png new file mode 100644 index 00000000000..0483e9ee05b Binary files /dev/null and b/release-notes/2013/_img/1_30_02.png differ diff --git a/release-notes/2013/_img/1_30_03.png b/release-notes/2013/_img/1_30_03.png new file mode 100644 index 00000000000..4e3eeff0cb5 Binary files /dev/null and b/release-notes/2013/_img/1_30_03.png differ diff --git a/release-notes/2013/_img/1_30_04.png b/release-notes/2013/_img/1_30_04.png new file mode 100644 index 00000000000..e8b8dd4a00c Binary files /dev/null and b/release-notes/2013/_img/1_30_04.png differ diff --git a/release-notes/2013/_img/1_30_05.png b/release-notes/2013/_img/1_30_05.png new file mode 100644 index 00000000000..278af92c08b Binary files /dev/null and b/release-notes/2013/_img/1_30_05.png differ diff --git a/release-notes/2013/_img/1_30_06.png b/release-notes/2013/_img/1_30_06.png new file mode 100644 index 00000000000..9084a5c1bfc Binary files /dev/null and b/release-notes/2013/_img/1_30_06.png differ diff --git a/release-notes/2013/_img/1_30_07.png b/release-notes/2013/_img/1_30_07.png new file mode 100644 index 00000000000..2c830e23b20 Binary files /dev/null and b/release-notes/2013/_img/1_30_07.png differ diff --git a/release-notes/2013/_img/1_30_08.png b/release-notes/2013/_img/1_30_08.png new file mode 100644 index 00000000000..40d4c1de0bf Binary files /dev/null and b/release-notes/2013/_img/1_30_08.png differ diff --git a/release-notes/2013/_img/1_30_09.png b/release-notes/2013/_img/1_30_09.png new file mode 100644 index 00000000000..42daf0578ce Binary files /dev/null and b/release-notes/2013/_img/1_30_09.png differ diff --git a/release-notes/2013/_img/1_30_10.png b/release-notes/2013/_img/1_30_10.png new file mode 100644 index 00000000000..ae3e4b5eeb1 Binary files /dev/null and b/release-notes/2013/_img/1_30_10.png differ diff --git a/release-notes/2013/_img/1_30_11.png b/release-notes/2013/_img/1_30_11.png new file mode 100644 index 00000000000..ecb502cbab1 Binary files /dev/null and b/release-notes/2013/_img/1_30_11.png differ diff --git a/release-notes/2013/_img/1_7_01.png b/release-notes/2013/_img/1_7_01.png new file mode 100644 index 00000000000..5694819b1b4 Binary files /dev/null and b/release-notes/2013/_img/1_7_01.png differ diff --git a/release-notes/2013/_img/1_7_02.png b/release-notes/2013/_img/1_7_02.png new file mode 100644 index 00000000000..0fe004aa09f Binary files /dev/null and b/release-notes/2013/_img/1_7_02.png differ diff --git a/release-notes/2013/_img/1_7_03.png b/release-notes/2013/_img/1_7_03.png new file mode 100644 index 00000000000..0c4dbb227b9 Binary files /dev/null and b/release-notes/2013/_img/1_7_03.png differ diff --git a/release-notes/2013/_img/1_7_04.png b/release-notes/2013/_img/1_7_04.png new file mode 100644 index 00000000000..dc9b98b76d9 Binary files /dev/null and b/release-notes/2013/_img/1_7_04.png differ diff --git a/release-notes/2013/_img/1_7_05.png b/release-notes/2013/_img/1_7_05.png new file mode 100644 index 00000000000..cb353c89e2c Binary files /dev/null and b/release-notes/2013/_img/1_7_05.png differ diff --git a/release-notes/2013/_img/1_7_06.png b/release-notes/2013/_img/1_7_06.png new file mode 100644 index 00000000000..5caaa9f8a12 Binary files /dev/null and b/release-notes/2013/_img/1_7_06.png differ diff --git a/release-notes/2013/_img/1_7_07.png b/release-notes/2013/_img/1_7_07.png new file mode 100644 index 00000000000..1fdaf25b157 Binary files /dev/null and b/release-notes/2013/_img/1_7_07.png differ diff --git a/release-notes/2013/_img/1_7_08.png b/release-notes/2013/_img/1_7_08.png new file mode 100644 index 00000000000..5617d97e6ab Binary files /dev/null and b/release-notes/2013/_img/1_7_08.png differ diff --git a/release-notes/2013/_img/1_9_01.png b/release-notes/2013/_img/1_9_01.png new file mode 100644 index 00000000000..96d24d5f959 Binary files /dev/null and b/release-notes/2013/_img/1_9_01.png differ diff --git a/release-notes/2013/_img/2_11_01.png b/release-notes/2013/_img/2_11_01.png new file mode 100644 index 00000000000..7016ab08850 Binary files /dev/null and b/release-notes/2013/_img/2_11_01.png differ diff --git a/release-notes/2013/_img/2_11_02.png b/release-notes/2013/_img/2_11_02.png new file mode 100644 index 00000000000..bd0c6478730 Binary files /dev/null and b/release-notes/2013/_img/2_11_02.png differ diff --git a/release-notes/2013/_img/2_11_03.png b/release-notes/2013/_img/2_11_03.png new file mode 100644 index 00000000000..8f901f6c9fd Binary files /dev/null and b/release-notes/2013/_img/2_11_03.png differ diff --git a/release-notes/2013/_img/2_11_04.png b/release-notes/2013/_img/2_11_04.png new file mode 100644 index 00000000000..cfa637161f3 Binary files /dev/null and b/release-notes/2013/_img/2_11_04.png differ diff --git a/release-notes/2013/_img/2_11_05.png b/release-notes/2013/_img/2_11_05.png new file mode 100644 index 00000000000..bf57fb8515a Binary files /dev/null and b/release-notes/2013/_img/2_11_05.png differ diff --git a/release-notes/2013/_img/2_11_06.png b/release-notes/2013/_img/2_11_06.png new file mode 100644 index 00000000000..d065342a6d3 Binary files /dev/null and b/release-notes/2013/_img/2_11_06.png differ diff --git a/release-notes/2013/_img/2_11_07.png b/release-notes/2013/_img/2_11_07.png new file mode 100644 index 00000000000..268f08daf7c Binary files /dev/null and b/release-notes/2013/_img/2_11_07.png differ diff --git a/release-notes/2013/_img/3_22_01.png b/release-notes/2013/_img/3_22_01.png new file mode 100644 index 00000000000..4983fd1a39a Binary files /dev/null and b/release-notes/2013/_img/3_22_01.png differ diff --git a/release-notes/2013/_img/3_22_02.png b/release-notes/2013/_img/3_22_02.png new file mode 100644 index 00000000000..cc96d0ba39b Binary files /dev/null and b/release-notes/2013/_img/3_22_02.png differ diff --git a/release-notes/2013/_img/3_22_03.png b/release-notes/2013/_img/3_22_03.png new file mode 100644 index 00000000000..9ea61d5d43b Binary files /dev/null and b/release-notes/2013/_img/3_22_03.png differ diff --git a/release-notes/2013/_img/3_4_01.png b/release-notes/2013/_img/3_4_01.png new file mode 100644 index 00000000000..0fe3fc4d769 Binary files /dev/null and b/release-notes/2013/_img/3_4_01.png differ diff --git a/release-notes/2013/_img/3_4_02.png b/release-notes/2013/_img/3_4_02.png new file mode 100644 index 00000000000..cdd809486b5 Binary files /dev/null and b/release-notes/2013/_img/3_4_02.png differ diff --git a/release-notes/2013/_img/3_4_03.png b/release-notes/2013/_img/3_4_03.png new file mode 100644 index 00000000000..3295d16f623 Binary files /dev/null and b/release-notes/2013/_img/3_4_03.png differ diff --git a/release-notes/2013/_img/3_4_04.png b/release-notes/2013/_img/3_4_04.png new file mode 100644 index 00000000000..a71b9316794 Binary files /dev/null and b/release-notes/2013/_img/3_4_04.png differ diff --git a/release-notes/2013/_img/3_4_05.png b/release-notes/2013/_img/3_4_05.png new file mode 100644 index 00000000000..b0c43bb6ffc Binary files /dev/null and b/release-notes/2013/_img/3_4_05.png differ diff --git a/release-notes/2013/_img/3_4_06.png b/release-notes/2013/_img/3_4_06.png new file mode 100644 index 00000000000..cd71fa4c50a Binary files /dev/null and b/release-notes/2013/_img/3_4_06.png differ diff --git a/release-notes/2013/_img/5_13_01.png b/release-notes/2013/_img/5_13_01.png new file mode 100644 index 00000000000..ee904e39970 Binary files /dev/null and b/release-notes/2013/_img/5_13_01.png differ diff --git a/release-notes/2013/_img/5_13_02.png b/release-notes/2013/_img/5_13_02.png new file mode 100644 index 00000000000..0045c10a8b5 Binary files /dev/null and b/release-notes/2013/_img/5_13_02.png differ diff --git a/release-notes/2013/_img/5_13_03.png b/release-notes/2013/_img/5_13_03.png new file mode 100644 index 00000000000..9d5e595d0a7 Binary files /dev/null and b/release-notes/2013/_img/5_13_03.png differ diff --git a/release-notes/2013/_img/5_13_04.png b/release-notes/2013/_img/5_13_04.png new file mode 100644 index 00000000000..fdf85e86d74 Binary files /dev/null and b/release-notes/2013/_img/5_13_04.png differ diff --git a/release-notes/2013/_img/5_13_05.png b/release-notes/2013/_img/5_13_05.png new file mode 100644 index 00000000000..e670b1d7d22 Binary files /dev/null and b/release-notes/2013/_img/5_13_05.png differ diff --git a/release-notes/2013/_img/5_13_06.png b/release-notes/2013/_img/5_13_06.png new file mode 100644 index 00000000000..6d1af5f39db Binary files /dev/null and b/release-notes/2013/_img/5_13_06.png differ diff --git a/release-notes/2013/_img/5_13_07.png b/release-notes/2013/_img/5_13_07.png new file mode 100644 index 00000000000..4d4a372eedc Binary files /dev/null and b/release-notes/2013/_img/5_13_07.png differ diff --git a/release-notes/2013/_img/5_13_08.png b/release-notes/2013/_img/5_13_08.png new file mode 100644 index 00000000000..891731ba483 Binary files /dev/null and b/release-notes/2013/_img/5_13_08.png differ diff --git a/release-notes/2013/_img/5_28_01.png b/release-notes/2013/_img/5_28_01.png new file mode 100644 index 00000000000..374cd627ba6 Binary files /dev/null and b/release-notes/2013/_img/5_28_01.png differ diff --git a/release-notes/2013/_img/5_28_02.png b/release-notes/2013/_img/5_28_02.png new file mode 100644 index 00000000000..9e1ed7a76bf Binary files /dev/null and b/release-notes/2013/_img/5_28_02.png differ diff --git a/release-notes/2013/_img/6_03_01.png b/release-notes/2013/_img/6_03_01.png new file mode 100644 index 00000000000..7e7cf9827ef Binary files /dev/null and b/release-notes/2013/_img/6_03_01.png differ diff --git a/release-notes/2013/_img/6_03_02.png b/release-notes/2013/_img/6_03_02.png new file mode 100644 index 00000000000..2baec3abea1 Binary files /dev/null and b/release-notes/2013/_img/6_03_02.png differ diff --git a/release-notes/2013/_img/6_03_03.png b/release-notes/2013/_img/6_03_03.png new file mode 100644 index 00000000000..8dd315ff65b Binary files /dev/null and b/release-notes/2013/_img/6_03_03.png differ diff --git a/release-notes/2013/_img/6_03_04.png b/release-notes/2013/_img/6_03_04.png new file mode 100644 index 00000000000..703403896dc Binary files /dev/null and b/release-notes/2013/_img/6_03_04.png differ diff --git a/release-notes/2013/_img/6_03_05.png b/release-notes/2013/_img/6_03_05.png new file mode 100644 index 00000000000..0566665e22d Binary files /dev/null and b/release-notes/2013/_img/6_03_05.png differ diff --git a/release-notes/2013/_img/6_03_06.png b/release-notes/2013/_img/6_03_06.png new file mode 100644 index 00000000000..3ed76293683 Binary files /dev/null and b/release-notes/2013/_img/6_03_06.png differ diff --git a/release-notes/2013/_img/6_03_07.png b/release-notes/2013/_img/6_03_07.png new file mode 100644 index 00000000000..031c2bf427d Binary files /dev/null and b/release-notes/2013/_img/6_03_07.png differ diff --git a/release-notes/2013/_img/6_19_01.png b/release-notes/2013/_img/6_19_01.png new file mode 100644 index 00000000000..cb1d9299b50 Binary files /dev/null and b/release-notes/2013/_img/6_19_01.png differ diff --git a/release-notes/2013/_img/6_19_02.png b/release-notes/2013/_img/6_19_02.png new file mode 100644 index 00000000000..0f2870c1a90 Binary files /dev/null and b/release-notes/2013/_img/6_19_02.png differ diff --git a/release-notes/2013/_img/6_19_03.png b/release-notes/2013/_img/6_19_03.png new file mode 100644 index 00000000000..c671eac181f Binary files /dev/null and b/release-notes/2013/_img/6_19_03.png differ diff --git a/release-notes/2013/_img/6_19_04.png b/release-notes/2013/_img/6_19_04.png new file mode 100644 index 00000000000..56824e8b384 Binary files /dev/null and b/release-notes/2013/_img/6_19_04.png differ diff --git a/release-notes/2013/_img/6_19_05.png b/release-notes/2013/_img/6_19_05.png new file mode 100644 index 00000000000..9a055b9fe19 Binary files /dev/null and b/release-notes/2013/_img/6_19_05.png differ diff --git a/release-notes/2013/_img/6_19_06.png b/release-notes/2013/_img/6_19_06.png new file mode 100644 index 00000000000..76500f7dbea Binary files /dev/null and b/release-notes/2013/_img/6_19_06.png differ diff --git a/release-notes/2013/_img/6_26_01.png b/release-notes/2013/_img/6_26_01.png new file mode 100644 index 00000000000..9dedb8f2f5e Binary files /dev/null and b/release-notes/2013/_img/6_26_01.png differ diff --git a/release-notes/2013/_img/6_26_02.png b/release-notes/2013/_img/6_26_02.png new file mode 100644 index 00000000000..29345866023 Binary files /dev/null and b/release-notes/2013/_img/6_26_02.png differ diff --git a/release-notes/2013/_img/7_10_01.png b/release-notes/2013/_img/7_10_01.png new file mode 100644 index 00000000000..e3476fe9836 Binary files /dev/null and b/release-notes/2013/_img/7_10_01.png differ diff --git a/release-notes/2013/_img/7_10_02.png b/release-notes/2013/_img/7_10_02.png new file mode 100644 index 00000000000..0ff7ac8b1d6 Binary files /dev/null and b/release-notes/2013/_img/7_10_02.png differ diff --git a/release-notes/2013/_img/7_10_03.png b/release-notes/2013/_img/7_10_03.png new file mode 100644 index 00000000000..c20ea949dec Binary files /dev/null and b/release-notes/2013/_img/7_10_03.png differ diff --git a/release-notes/2013/_img/7_10_04.png b/release-notes/2013/_img/7_10_04.png new file mode 100644 index 00000000000..505af493b16 Binary files /dev/null and b/release-notes/2013/_img/7_10_04.png differ diff --git a/release-notes/2013/_img/8_19_01.png b/release-notes/2013/_img/8_19_01.png new file mode 100644 index 00000000000..895e39c4e79 Binary files /dev/null and b/release-notes/2013/_img/8_19_01.png differ diff --git a/release-notes/2013/_img/8_19_02.png b/release-notes/2013/_img/8_19_02.png new file mode 100644 index 00000000000..16a1c1dd919 Binary files /dev/null and b/release-notes/2013/_img/8_19_02.png differ diff --git a/release-notes/2013/_img/8_19_03.png b/release-notes/2013/_img/8_19_03.png new file mode 100644 index 00000000000..28443b983c2 Binary files /dev/null and b/release-notes/2013/_img/8_19_03.png differ diff --git a/release-notes/2013/_img/9_09_01.png b/release-notes/2013/_img/9_09_01.png new file mode 100644 index 00000000000..9e683d38623 Binary files /dev/null and b/release-notes/2013/_img/9_09_01.png differ diff --git a/release-notes/2013/_img/9_09_02.png b/release-notes/2013/_img/9_09_02.png new file mode 100644 index 00000000000..897f9d6a2e5 Binary files /dev/null and b/release-notes/2013/_img/9_09_02.png differ diff --git a/release-notes/2013/_img/9_09_03.png b/release-notes/2013/_img/9_09_03.png new file mode 100644 index 00000000000..faef597d4be Binary files /dev/null and b/release-notes/2013/_img/9_09_03.png differ diff --git a/release-notes/2013/_img/9_09_04.png b/release-notes/2013/_img/9_09_04.png new file mode 100644 index 00000000000..cb8261f0762 Binary files /dev/null and b/release-notes/2013/_img/9_09_04.png differ diff --git a/release-notes/2013/_img/9_09_05.png b/release-notes/2013/_img/9_09_05.png new file mode 100644 index 00000000000..3cc75675bc9 Binary files /dev/null and b/release-notes/2013/_img/9_09_05.png differ diff --git a/release-notes/2013/_img/9_30_01.png b/release-notes/2013/_img/9_30_01.png new file mode 100644 index 00000000000..0c1b7e7a19c Binary files /dev/null and b/release-notes/2013/_img/9_30_01.png differ diff --git a/release-notes/2013/_img/9_30_02.png b/release-notes/2013/_img/9_30_02.png new file mode 100644 index 00000000000..4926f1df413 Binary files /dev/null and b/release-notes/2013/_img/9_30_02.png differ diff --git a/release-notes/2013/apr-25-team-services.md b/release-notes/2013/apr-25-team-services.md new file mode 100644 index 00000000000..e5c1dbaf3ab --- /dev/null +++ b/release-notes/2013/apr-25-team-services.md @@ -0,0 +1,29 @@ +--- +title: Team Foundation Service updates - Apr 25 +description: VSTS release notes for April 25 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 7696bc78-b73a-40ba-b1db-8c13ff4aa111 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Apr 25 + +You may have noticed April 15th came and went with no mention of any Team Foundation Service update. If everything had been “normal” April 15th would have been the date for our Sprint 46 deployment. Unfortunately, nothing has been normal. + +In our March 22nd deployment we made some pretty significant architectural rearrangements to the service. I [mentioned it a couple of times on my blog](http://blogs.msdn.com/b/bharry/archive/2013/03/22/team-foundation-service-update-mar-22.aspx). Sadly, things did not go well with that update or the weeks that followed. Some of it was our own fault and should have been preventable. Some of it was bad luck - getting affected by a few issues around us. Regardless, the last month has not been a particularly good one for the service. The issues really started on Tue, March 26th with a variety of service performance and availability issues. In the weeks that followed, we diagnosed and patched quite a few issues with bug fixes and mitigations rolling out almost every day. The service was never really completely down but we had issues during the peak usage windows daily. Within about a week, the worst of those issues were resolved but problems causing slow and failed builds on the build service persisted for a few weeks. + +Today, the service is almost back to “normal”. Builds are still a little slower than they should be. We understand the problem and are working to address the final issue. + +We apologize for any and all interruptions and lost work time this caused. We knew it was a big change and did a lot of work to prep for it. We learned a number of things and believe we can do better. You can read more [details on my blog](http://blogs.msdn.com/b/bharry/archive/2013/04/23/sprint-45-service-issues.aspx) to learn about some of the issues we hit. + +Today we deployed our Sprint 46 build – a week and a half late. However, due to the intense effort we put into addressing the service health, we didn’t really get any new visible features in this update. Service stability was really an “all hands on deck” effort. We’ve got a bunch of new capabilities under development and we’re expecting them to show up over the next couple of sprints. + +Sprint 47 is expected to complete and deploy on schedule and we’re working hard to ensure it goes much more smoothly and is more like most of our updates have been over the past year. I just can’t apologize enough for the issues of the past few weeks and I am looking forward to a long run of very uneventful and compelling updates. + +Thanks, + +Brian diff --git a/release-notes/2013/aug-19-team-services.md b/release-notes/2013/aug-19-team-services.md new file mode 100644 index 00000000000..7793f4bd3fd --- /dev/null +++ b/release-notes/2013/aug-19-team-services.md @@ -0,0 +1,45 @@ +--- +title: Team Foundation Service updates - Aug 19 +description: VSTS release notes for August 19 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 220217d7-1206-4845-b11b-7a7b0573ac73 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Aug 19 + +This sprint, we have a couple of areas of improvement. The first one I want to talk about is our new “Release archive”. A year or so ago, we adopted this faster cadence of 3 week service updates, multiple VS Updates and a 2013 release only 12 months after VS 2012. In the past several months, especially as the release of VS 2013 has become closer, we’ve had a lot of questions about which features are available and in what release – particularly “Which on premises release will a given cloud feature show up in?”. So today we’ve introduced a way for you to know – a [Release archive](https://www.visualstudio.com/news/release-archive-team-services.md). + +##Release archive + +Here’s a snip from the middle of the page. The first column is the date that the feature was first introduced on the service. The third column is the on-premises release for the feature. "--“ means that we don’t currently have a targeted on-premises release, or that the feature is not relevant to on-premises. We’ve decided not to show every single small change to the service to avoid overwhelming you with an unbearably long list. Instead, we’ve tried to list the more significant changes – and still it’s a long list. J + +![Release archive](_img/8_19_01.png) + +For now you can access this page through the [Release archive](https://www.visualstudio.com/en-us/articles/news/features-timeline) link. On Wednesday, we’ll be adding a link to the [Team Foundation Service News](https://www.visualstudio.com/team-services/updates/) page so you can get to it from there. + +##Code commenting improvements + +We’ve made a round of improvements based on feedback to make comments more discoverable and to allow you to navigate them more easily. Among other things, you can now see which changesets or commits have comments in them from the history view. + +![Code comments improvements](_img/8_19_02.png) + +We’ve also made it easier to work with comments in a specific changeset or commit. You can now move back and forward through the comments. Also, you can use the tree view to navigate and filter the comments. + +![More improvements for code comments](_img/8_19_03.png) + +The team is really focused on finishing up TFS 2013 right now. So, in general, new features on the service are going to continue be a bit light for the next few weeks as our focus stays there. We’ve got one more nice “big” new feature to show you before we wrap up the 2013 feature set (and move on to the 2013.1 feature set). Stay tuned for that in the next few weeks. As always let us know how we're doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Brian Harry + + + + + + diff --git a/release-notes/2013/dec-11-team-services.md b/release-notes/2013/dec-11-team-services.md new file mode 100644 index 00000000000..82fc9577630 --- /dev/null +++ b/release-notes/2013/dec-11-team-services.md @@ -0,0 +1,45 @@ +--- +title: Visual Studio Online updates - Dec 11 +description: VSTS release notes for December 11 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 6e13356b-2fb3-45eb-8e41-38d7d423ac8e +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates - Dec 11 + +This is our first sprint deployment since our Commercial Public Preview launch in mid-Nov. Unfortunately, we had some instability following that launch. We’ve been hard at work since then fixing the issues, firming up our testing, adding additional resiliency into the system, etc. I [wrote at length](http://blogs.msdn.com/b/bharry/archive/2013/11/25/a-rough-patch.aspx) about some of the issues we hit on my blog. Please be assured that we will do everything we can to provide you a seamless and reliable experience. We are committed to doing work every sprint to make the service more reliable. Please let us know anytime we are failing to meet your expectations. + +In addition to working on reliability, we’ve got a few nice new features this sprint… + +##Application Insights – Response Stacked Distribution + +When trying to understand trends in your application’s performance, average request time is not very useful. Simple averages mask outliers and do not provide you with a clear picture of your customer’s experience. People typically use percentiles or a similar approach to better understand what’s really happening. In this update we have added a new way to analyze and understand performance trends that we call the Response Stacked Distribution tile. By visualizing the trend over time, you will be better able to see how code changes have changed your responsiveness. + +![Response Distribution tile](_img/12_11_01.png) + +This tile simultaneously allows visibility into the trend of the overall request rates and the distribution of response times between them. + +##Application Insights – Windows Store App support + +In the initial release of Application Insights, we provided telemetry SDKs for web server, Windows Phone 8 and a JavaScript (for sending telemetry from the browser). In today’s update we added support for Windows Store apps. As with our other SDKs, you can use this capability to emit telemetry from your app for analysis in the Application Insights portal. + +You can read more about emitting telemetry from your Windows Store apps on [MSDN](https://msdn.microsoft.com/en-us/library/). And, we published the SDK to [NuGet.org](http://www.nuget.org/packages/Microsoft.ApplicationInsights.Telemetry.WindowsPhone/) for consumption. + +![NuGet gallery screen](_img/12_11_02.png) + +##Asynchronous backlogs + +Finally, we’ve made a few nice improvements to the performance of product backlogs (Backlogs, under the “Work” hub) that I want to bring to your attention. Prior to today’s update, switching between your backlogs (features, stories/PBIs/requirements, and tasks) resulted in a full page postback on each and every click. This is something that’s been on our backlog to improve for quite some time and I’m happy to report that moving between backlogs is now done asynchronously and with no postback. The result is a much faster and more fluid experience. Enjoy. + +##Holidays + +We’re not planning another deployment until after the New Year so this will be it for 2013. Happy holidays everyone! + +Thanks, + +Brian diff --git a/release-notes/2013/feb-11-team-services.md b/release-notes/2013/feb-11-team-services.md new file mode 100644 index 00000000000..f564ad939de --- /dev/null +++ b/release-notes/2013/feb-11-team-services.md @@ -0,0 +1,77 @@ +--- +title: Team Foundation Service updates - Feb 11 +description: VSTS release notes for February 11 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 566cb23b-4e26-4e37-8494-8791fcce6317 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Feb 11 + +We have a fair number of updates this sprint. + +##Continuous Integration for Git based Team Projects + +Recently we announced the ability to use Git as your source control system with TFS. Not all automated build features are supported yet for Team Projects using Git. Today we are taking a big step in filling that gap by enabling the Continuous Integration (CI) trigger for Git based builds. Now you can build your project every time someone commits to Git. + +Note: To enable CI for Git builds you need [CTP3 of Visual Studio 2012 Update 2](http://go.microsoft.com/fwlink/?LinkId=273878). + +##Test Case Management Improvements + +Last sprint we launched a web based test case management experience. Today we have several improvements to add to it. + +1. **View test step attachments when you run tests** + +Any attachments that you have added to test steps when you created your test case (using Microsoft Test Manager) can now be viewed inline when you run the test using the Test Runner. If the attachment happens to be an image, it will show the actual image with the test steps. For other types of attachment, it shows the filename and size. Click the attachment to open it up in a separate browser instance. + +![View test step attachments](_img/2_11_01.png) + +2. **Add attachments when you run a test** + +You can now add attachments to a test when you run it using Test Runner. These attachments can be log files you want to add, screenshots you have taken manually, or any other file. This helps you to document what happens when you run the test. + +![Add attachments](_img/2_11_02.png) + +You can view all the attachments from the bottom bar in Test Runner. + +![View attachments](_img/2_11_03.png) + +If you want to look at them later, you can view them with the test results from Analyze Test Run in Microsoft Test Manager. + +3. **Pause and resume tests in Test Runner** + +You can now pause a test you are running. All the changes you make before you pause are preserved. For example, marking test steps as pass/fail, any comments added to a test step or test case, any attachments added to a test case and any bugs created. This lets you pause a test if you have to reboot as part of a test case, or where the dependency item may not be ready at the time of execution, or maybe you just need to go home and stop testing for the day and want to start where you left off the next day. + +![Pause tests](_img/2_11_04.png) + +When you are ready to start testing again, you can resume the test at the same point from the Test hub. + +![Resume tests](_img/2_11_05.png) + +##Work Item Tagging Improvements + +If you’ve been using the new tagging feature, you may be wondering how to delete a tag that is no longer used on any work item. Now you don’t have to. Any tag that is no longer referenced by any work item will be automatically removed from the system by a background job. This cleanup job runs daily and cleans up tags that have not been used for 3 days. + +##Version Control Improvements + +You can now download the contents of your VC repo as a zip file. Just right click in the code browser and choose **Download as Zip**. If you only want to download a part of your tree, just right click on the folder you want to download. + +![Download as a zip file](_img/2_11_06.png) + +Last sprint we added the ability in the web UI to track renames in the commit and file history for Git projects. This week we’ve expanded this support to TFVC based Team Projects. Now your web history will follow rename, branch & merge operations. + +##Query Using OData + +Also of note, during this sprint [Brian Keller announced](http://blogs.msdn.com/b/briankel/archive/2013/01/24/bringing-odata-to-team-foundation-service.aspx) the launch of the [Team Foundation Service OData API (Beta)](https://tfsodata.visualstudio.com/). You can use this api to query over the data in TFS service account using the OData protocol. There is even a Windows 8 sample application (with source) that you can use to try it out. + +![Odata](_img/2_11_07.png) + +That's it for this sprint. See you again in 3 weeks. As always, let us know what you think and how we’re doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Jamie Cool diff --git a/release-notes/2013/jan-07-team-services.md b/release-notes/2013/jan-07-team-services.md new file mode 100644 index 00000000000..04fe562055e --- /dev/null +++ b/release-notes/2013/jan-07-team-services.md @@ -0,0 +1,76 @@ +--- +title: Team Foundation Service updates - Jan 7 +description: VSTS release notes for January 7 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: f0935abb-f6e4-4301-9d04-397b1c83b246 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Jan 7 + +Happy New Year! This morning we made our first set of updates to the service for the 2013 calendar year. This sprint was relatively light due to the holidays, but we do have a few incremental changes to existing functionality that I want to highlight. + +##Basic auth updates + +Back in [last August](https://www.visualstudio.com/en-us/articles/news/2012/aug-27-team-services) we introduced support for basic authentication. Originally this was to allow the bridging of local Git repositories and TFS with Git-TF, however we’ve found people wanting to do more things using the basic authentication mechanism. Today we’re introducing a couple of updates to allow the basic auth scheme to work with more services. First we now allow you to enter a secondary user name with your alternate credentials. + +Why another user name? Some applications get tripped up when they come across special characters (ex: the “@” character in an email address) during authentication. This change allows you to specify a secondary user name not in the form of an e-mail address for use with these applications. The secondary user name is not required. So if you’re not running into any trouble today, you’ve got nothing to worry about. + +![Alternate authentication credentials](_img/1_7_01.png) + +We did make a few changes to the way our Basic authentication mechanism behaves to make it more compatible with other services. This means that if you were previously using Basic authentication from the [Team Explorer Everywhere command line](https://www.microsoft.com/en-us/download/details.aspx?id=30661), or from [Git-TF](https://www.microsoft.com/en-us/download/details.aspx?id=30474), then you need to update to the very latest versions of those clients. We apologize for the inconvenience here. It should be the last major change at the protocol level so it shouldn’t happen again soon. + +##Email work items from backlogs + +In our [November 19th update](https://www.visualstudio.com/en-us/articles/news/2012/nov-19-team-services) we announced the ability to send emails for work item queries. In this sprint we added the ability to send email directly from the backlog pages as well. You’ll now see the send email toolbar button on both the product backlog and sprint backlog pages. + +![Email work items from backlogs](_img/1_7_02.png) + +The steps to use the feature are the same. From the toolbar, click the **email** icon. You can also select a single item and click **Email selected work item** from the context menu. Enter the name(s) of a person in your project, format your message, and click **Send**. + +![Send email](_img/1_7_03.png) + +##Web version control + +As we [mentioned last time](https://www.visualstudio.com/en-us/articles/news/2012/dec-10-team-services), you are going to be seeing some improvements to the web based version control experiences in the next few updates. This time round we fixed a bug we introduced in the way we were displaying times in version control across time zones. We also brought back an easy way to search for changesets by id. + +![Search for changesets by id](_img/1_7_04.png) + +The search box that is in the top right hand corner of the screen is now more context sensitive. Enter a number into it when browsing source control and it now assumes you are looking for a changeset id rather than a work item id. + +We’ve also been making a big push to give you the most number of pixels possible to concentrate on the things that you want to do. Now when you browse the contents of a file the download button has become an icon and has moved up into the toolbar which gives you 3 extra lines of source that you can view before scrolling. + +![Browsing the contents of a file](_img/1_7_05.png) + +If you want to see even more lines, we added another button to take the code into “fullscreen” mode. This is available when you are browsing files and doing comparisons. To go back to the normal view simply click the **Exit full screen mode** link. + +![Browsing the contents of a file](_img/1_7_06.png) + +In the last update we showed off the new inline diff features. We have now added inline viewing and also diffing for images such as gifs, jpegs and png files. If you do a file comparison on an image that has changed, you now get to see the old and new image together so that you can play a little game of spot the difference. We’re going to be iterating on the image diffing functionality to make it even more useful but as you can see from the screen shot, it is already pretty handy. + +![Diff images](_img/1_7_07.png) + +##Collapsible left panel + +Finally, in our last update on [December 10th](/news/2012/dec-10-team-services.md) our code pages received an update to the collapsed left panel which included a vertical label on the collapsed view. In this sprint we carried that change forward to all our left panels. For example, when you collapse the left panel on the backlog page, you’ll now see the label **Backlog Explorer** on the collapsed view. + +![Collapsible left panel](_img/1_7_08.png) + +We’ve got a lot coming your way in the next few months. As always, let us know how we’re doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Our next deployment is coming on January 21st so we’ll see you again in two weeks. + +Thanks, + +Aaron Bjork + + + + + + + diff --git a/release-notes/2013/jan-09-team-services.md b/release-notes/2013/jan-09-team-services.md new file mode 100644 index 00000000000..0d2a615720f --- /dev/null +++ b/release-notes/2013/jan-09-team-services.md @@ -0,0 +1,30 @@ +--- +title: Team Foundation Service updates - Jan 9 +description: VSTS release notes for January 9 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 8359e77b-38a3-4558-8cee-6f9751cb9704 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Jan 9 + +##Account rename + +One of the most requested features to date has been the ability to rename your account. We are happy to report that starting today, you can rename your account directly through the admin UI. We don’t often release new features outside our normal 3 week cadence, but this feature has been in such high demand that we decided to get it out the door the moment it was ready. + +Click the small gear in the top right hand corner of the navigation and then click the **Control Panel** navigation link. Click the **Settings** tab, and then the **Change** link under **Advanced administration tasks**. You’ll see the dialog below warning you about everything that could go wrong when you do this (don't panic, just read the directions carefully). We no doubt have some beautification work to do on this dialog, but we didn’t want that to stop us from getting the feature out the door. + +![Rename account](_img/1_9_01.png) + +Simply follow the instructions on the page and your account URL will be renamed. + +As always, let us know how we’re doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and (Twitter)[http://twitter.com/search?q=%23tfservice]. + +Thanks, + +Aaron Bjork + diff --git a/release-notes/2013/jan-21-team-services.md b/release-notes/2013/jan-21-team-services.md new file mode 100644 index 00000000000..76d868c1de9 --- /dev/null +++ b/release-notes/2013/jan-21-team-services.md @@ -0,0 +1,28 @@ +--- +title: Team Foundation Service updates - Jan 21 +description: VSTS release notes for January 21 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: d5e11b3d-9e8d-4964-ba4e-821ff1a00a49 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Jan 21 + +##Explore and Compare + +Just one small update for everyone in this sprint. In our continued effort to improve the web based version control experience we added some handy new functionality to changesets. You’ll now see a dropdown menu next to each file in a changeset. Clicking the dropdown provides a few new options including comparing to either the previous version or latest version, downloading the file, and exploring the source tree as of this version. + +![Explore and compare](_img/1_21_01.png) + +That’s it for this sprint. + +As always, let us know how we’re doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Aaron Bjork + diff --git a/release-notes/2013/jan-30-team-services.md b/release-notes/2013/jan-30-team-services.md new file mode 100644 index 00000000000..717d0a4ca1a --- /dev/null +++ b/release-notes/2013/jan-30-team-services.md @@ -0,0 +1,86 @@ +--- +title: Team Foundation Service updates - Jan 30 +description: VSTS release notes for January 30 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: e856a07a-2d14-4846-8db7-0741898f2c85 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Jan 30 + +Today is a big step forward in our journey for the Team Foundation Service. Over the past several months, we have been working on a set of changes to make TFS more lightweight and to continue to adapt to the evolving modern devops processes. Today we unveil several of these improvements. This is just the beginning and we have a lot more work planned. Over the next several months, we’ll continue to evolve and expand these improvements. + +Here is what we have for you right now: + +##Work Item Tagging + +We don’t currently support customization of your process (work item types, etc) on the service. And, even in the on premises product, customizing it can be more involved than some want to undertake. Some teams, particularly smaller ones, don’t need an involved process. They just need a set of work items – tasks, bugs, maybe user stories and they want a very simple and flexible way to flag or categorize work items in order to organize them. Today we are releasing the first version of work item tagging that allows just this. + +Tags show up at the top of every work item. They are free form text that you can associate with any work item – no need to customize the process template or anything. + +![Work item tags](./_img/1_30_01.png) + +Adding a new tag is easy, you can pick from a list of existing tags. The list auto filters as you type. Or you can type a new one. + +![Add a new tag](./_img/1_30_02.png) + +On the product backlog and in the query results, you can see the tags on the work items. Then you can quickly and easily filter using the tags. + +![Tags on the product backlog](./_img/1_30_03.png) + +For instance, here I’ve filtered to just the backlog items that have been Designed and Costed. Just click a tag in the tag bar on the right to add it to the filter and click a tag on the left to remove it. + +![Filtering with the tags](./_img/1_30_04.png) + +##Git Support + +The biggest change today is the introduction of Git support into the Team Foundation Service. App development has evolved to increasingly be organized as semi-autonomous services, lots of code sharing, and built by distributed and often independent teams. This means we are seeing more and more of a role for distributed version control in many development teams. This Git support does not replace the existing centralized TFS version control system – which many teams will still find matches their needs, but adds a choice for people who want a DVCS experience. For each project you create, you can choose whether you want to use TFS version control or Git. + +With this update to the service, we have introduced fully fledged and 100% compatible Git support. You can use our ever improving web based source control experience to browse a Git repo. Note it looks just like today’s source browsing experience except that there’s a Git branch selector and an icon that make it super easy to clone the repo. + +![Git support](./_img/1_30_05.png) + +You can browse commits. + +![Browse commits](./_img/1_30_06.png) + +Explore changes, etc. + +![Explore changes](./_img/1_30_07.png) + +But it’s genuine Git and can be accessed from any Git client – like XCode, any OSS Git command line, etc. + +![Access from Xcode](./_img/1_30_08.png) + +And, we are working on an integrated Git experience in Visual Studio. Note, it’s an experience in Team Explorer. But you can see it’s Git from the branch selector and the use of Git, rather than TFS, terminology. + +![Visual Studio with Git](./_img/1_30_09.png) + +Our approach to Git will be to fully integrate it into our devops experience – you can link commits to work items, do automated builds of Git repos, get a fully integrated VS experience and access it from any platform. We think adding a Git option will help TFS be applicable to even more work styles. + +You can read more about how to get started with the new Git support in our learn content [here](https://www.visualstudio.com/get-started/share-your-code-in-GIT-vs). + +What we released today is just the beginning. The Git support today is just scratching the surface of what we plan to provide. There’s enough there to get going and use it in real projects. Expect that in every sprint over the next several months it will continue to advance. + +##Test Case Management + +Many people do some amount of manual testing as part of their app development cycle. We have a product called [Microsoft Test Professional](https://www.microsoft.com/en-us/download/details.aspx?id=30662) that enables you to plan, execute and track manual testing activity. We’ve gotten feedback from our Test Professional users that there are scenarios where installing a rich client app in the test environment is prohibitive and a zero impact web experience is really needed. In this release of the service, we are previewing (note the little * on the Test hub indicating this is a preview feature) a web based manual test experience. + +The new top level Test hub has a list of test plans, suites and test cases. You can see who the test cases are assigned to and their status. From here you can add, remove and edit test cases. + +![Visual Studio with Git](./_img/1_30_10.png) + +You can also “run” them, launching a simple web based manual test runner experience that allows you to follow the test case, step by step and sign off on each step as pass or fail. + +![Run manual tests](./_img/1_30_11.png) + +Please check all these improvements out. As always, let us know what you think and how we’re doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Brian Harry + diff --git a/release-notes/2013/jul-10-team-services.md b/release-notes/2013/jul-10-team-services.md new file mode 100644 index 00000000000..c0155114518 --- /dev/null +++ b/release-notes/2013/jul-10-team-services.md @@ -0,0 +1,47 @@ +--- +title: Team Foundation Service updates - July 10 +description: VSTS release notes for July 10 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: fb442da5-ffd1-4c26-9864-78fa94c32735 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - July 10 + +A few updates were pushed to the service this morning that you’ll want to take note of. + +##Backlog Mapping + +First, the Agile Portfolio Management feature announced back on [June 3rd](jun-03-team-services.md) has an improved backlog linking experience. The new mapping panel allows you to quickly link items on your team’s product backlog directly to a “higher level” features backlog. When turned on, you can simply drag an item from your product backlog onto an item in the feature backlog to create the link. In the screenshot below, notice the two items at the bottom of the backlog that are un-parented. These are items that have been added to my product backlog but aren’t yet linked to a feature. + +![Backlog with unmapped items](_img/7_10_01.png) + +Next, you can see that I’ve turned on the mapping panel and I’m now viewing both my product backlog and feature backlog side by side. I’m dragging the “Deleting a ticket” backlog item to the “Ticket administration” feature and in doing so, creating a [parent-child link](https://msdn.microsoft.com/library/dd286633.aspx) between the two. + +![Dropping a backlog item on a feature in the mapping pane](_img/7_10_02.png) + +Finally, the “Ticket administration” feature is now pulled into my view as it’s now a parent to the “Delete a ticket” item. Give it a shot and let us know what you think. If you’ve got specific feedback you’d like to share, send it my way on [twitter](https://twitter.com/aaronbjork). + +![The backlog item mapped to it's parent feature](_img/7_10_03.png) + +##Team Permissions + +We also made a change today to “who can do what” at the team level. Before today’s changes, all team members could perform the following actions: + +- Editing team areas (the area path where the team backlog is stored) +- Editing team iterations (the iterations the team is participating in) +- Editing Kanban columns including WIP limits + +With today’s change, we’ve restricted these permissions to only team administrators. To add new team administrators, you’ll need to go to the administration page for your team. There you can select users you’d like to grant these permissions to. + +![Team permissions](_img/7_10_04.png) + +That’s it for sprint 50. As always let us know how we're doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice) + +Thanks, + +Aaron Bjork diff --git a/release-notes/2013/jul-29-team-services.md b/release-notes/2013/jul-29-team-services.md new file mode 100644 index 00000000000..6a30f60afaf --- /dev/null +++ b/release-notes/2013/jul-29-team-services.md @@ -0,0 +1,53 @@ +--- +title: Team Foundation Service updates - July 29 +description: VSTS release notes for July 29 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 0847839d-1513-46fa-a8e6-41c5cf5ec0f5 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - July 29 + +##Improved permission management for Git repos + +In a continuation of our goal to offer a great [enterprise grade Git](http://blogs.msdn.com/b/bharry/archive/2013/06/19/enterprise-grade-git.aspx) solution, we have added a number of enhancements to permission management for Git repos. The most notable is the introduction of branch level permissions. You can now control who has the ability to push certain branches to the server. This lets you have Git repos the whole team can work on, but with branches that only specific people are allowed to push to. + +We also added a few more permissions at the repo level. You can now control who can push new branches or tags to a repository. This lets you manage branch proliferation on the team’s golden repo. Finally, you can now configure the default permissions for all repos in a team project at once. For teams that have lots of repositories, this makes it much easier to manage permission changes. + +You can access all of this from the repository management page in project administration. + + + +##Additional version control improvements + +We now use [Gravatar](http://en.gravatar.com/) in the web, just like our VS client tooling for Git. When viewing Git repositories that contain commits from outside your organization, we now attempt to request a profile image from Gravatar. This option can be disabled in the Version Control admin settings for Git based projects. In this new options area, you will also find an option to disable the automatic linking of commits to work items when they contain #1234 syntax. This is useful when importing Git repositories whose work items do not reside in your TFS server. We also improved the image diffing capabilities, including adding a pixel diff. + +In addition, we made some improvements to the [lightweight code commenting](jun-03-team-services.md) feature we introduced back in June. There is now a handy Send Email icon for Changesets, Shelvesets and Commits which allows you to send a permalink to that source control artifact. This includes data about the files in it and any comments left against those files. It comes in handy if you've left some ad-hoc comments on someone's code and you want to make sure they know about them. + +Finally, based on user feedback, the shortcut keys when entering code comments have now changed to be "Enter" for save, "Esc" for cancel and "Shift+Enter" for new line. Previously to save you had to press "Ctrl+Enter" but we found less than 7% of comments had one or more newline characters in them. So we optimized for the common case. + +##Team room Git push events + +Before today’s update, we only supported showing Team Foundation Version Control changeset events. Going forward you can now see Git push events as well. The **Manage events** dialog has been updated to show a list of repositories for all Git projects. Simply choose a Git based Team Project, choose the repository you want push events from, and check the checkbox to enable the event. + + + +##Team room emoticons + +We’ve had support for emoticons in the team room since it launched on the service back on June 3rd. However, they weren’t easy to discover because we didn’t have a UI to create them. I’m happy to report that we’ve now got an emoticon picker right on the chat window. You can still type the emoticon character set as before, or you can use the picker to find the emoticon you’re after :). + + + +##Deleting team rooms + +And finally, we received a lot of customer feedback indicating users want to delete rooms, especially the ones “automagically” created for you when you create new team projects. Room admins will now see "Delete" as an option on the context menu next to each room. Deleting a room deletes all messages in the room history so be sure you've copied any content you need. + +That’s a wrap on sprint 51. See you again in 3 weeks. As always let us know how we're doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2013/jun-03-team-services.md b/release-notes/2013/jun-03-team-services.md new file mode 100644 index 00000000000..675e3534a20 --- /dev/null +++ b/release-notes/2013/jun-03-team-services.md @@ -0,0 +1,68 @@ +--- +title: Team Foundation Service Updates for TechEd 2013 +description: VSTS release notes for June 3 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 9f20ce95-1478-47e5-94e7-37d942316c28 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service Updates for TechEd 2013 + +Today, we released a new set of features on Team Foundation Service that we’ve been incubating for several sprints. There are some fairly significant ones here. + +##Agile Portfolio Management + +We introduced a new set of features that enable organizations with larger projects, multiple teams and backlogs to be able to decompose their backlogs at multiple granularities and roll up work. At each level you can have a backlog and kanban board. Each team can have a backlog of "backlog items" that contributes to a joint “Features” backlog. This is just the beginning and, roughly, every sprint it will get better. + +![Features and backlog items hierarchy](_img/6_03_01.png) + +##Lightweight code commenting + +Lightweight code commenting is a new feature in our web experience that allows people to easily comment on code. It provides a very nice inline experience for commenting either on whole files or on changes. Code commenting enables interactive or time shifted conversations about code and can be done in a browser so, among other things, it will work wherever you are – including your favorite browser enabled cell phone. + +![Lightweight code commenting](_img/6_03_02.png) + +##Team Room + +One of the core value propositions of Team Foundation Service is to help software development teams collaborate. This is usually by providing transparency into what is happening in the software development process so that everyone stays up to date and knows how to make the best decisions. Today, we introduced on the service a new feature called “Team Rooms”. A Team Room is a durable collaboration space that records everything happening in your team. You can configure notifications – checkins, builds, code reviews, etc to go into the Team Room and it becomes a living record of the activity in the project. You can also have conversations with the rest of your team in the room. It’s always “on” and “permanently” recorded, allowing people to catch up on what’s happened while they were out, go back and find previous conversations, etc. + +![Team Room](_img/6_03_03.png) + +##Continued progress on web based testing + +Over the past 6 months or so, we released constant improvements to our capabilities. We’ve been building out the test case management capabilities to allow you to more fully manage your test plans without having to switch to the Test Professional client. You can now create/modify test plans, suites and shared steps on the web. + +![Manage your test plans](_img/6_03_04.png) + +We’ve also improved test editing by enabling you to add step attachments, use shared steps, parameterize step data and more. + +![Improved test editing](_img/6_03_05.png) + +And we’ve improved the test running experience making it easier to capture screenshots, etc. + +##Cloud Load Testing + +Today we released a preview of an entirely new service component – **Cloud Load Testing**. I’m incredibly excited about this new ability. Since VS 2005, we’ve supported Load Testing in Visual Studio Ultimate. It allows you to validate performance, scale and reliability of your server apps. However, you have to set up and configure your own infrastructure to run load tests. With our new Team Foundation Service based load test solution, you can now load test your apps without configuring any infrastructure. Just use Visual Studio Ultimate Edition to create a load test and point it at Team Foundation Service and say Go! And soon you have load test results for your application. We think this is going to be particularly valuable for people building Azure applications who want to verify the scalability of their apps before opening them to a broad user base. + +To run a cloud based load test on Team Foundation Service, just create/record a load test and choose the option in your test settings. + +![Choose to run your load test in the cloud](_img/6_03_06.png) + +And in a short time, you’ll see the progress on your test: + +![Progress on your load test](_img/6_03_07.png) + +You can’t quite take advantage of this feature yet. While the service side is ready, you are going to need an update to the VS Ultimate client to take advantage of it. You’ll be able to start using it once you download and install the VS 2013 Preview available at the Build conference. + +Please note the service is in “Preview” and as such we will be limiting the number and size of runs you will be able to do before the service releases. If you would like to join our early adopter program and exercise the service on some larger scale runs, let me know. + +We’re really excited to have some very cool new features available on the service and we hope you like them. Please let us know what you think. + +Thanks, + +Brian + diff --git a/release-notes/2013/jun-19-team-services.md b/release-notes/2013/jun-19-team-services.md new file mode 100644 index 00000000000..bdcecbcc52e --- /dev/null +++ b/release-notes/2013/jun-19-team-services.md @@ -0,0 +1,55 @@ +--- +title: Team Foundation Service updates - Jun 19 +description: VSTS release notes for June 19 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: e75ce623-bca3-43fd-8b9d-fe45038a2802 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Jun 19 + +We’ve got a few updates to share as a part of today’s deployment. + +##Agile Portfolio Management + +1. First, we made a couple of usability updates to the Agile Portfolio Management features announced and released back on June 3rd. + +Each backlog in the backlog explorer is now adorned with a clickable color bar that allows you to drill up or down between backlogs. In the screenshot below, you can see that I’m on the Features backlog and that I’ve drilled down to see related Backlog items and Tasks. This provides a very quick and easy way to traverse the relationships between backlogs. The view filter on the right side of the toolbar has also been updated to include the color bars and a clearer description. + +![Backlog navigation](_img/6_19_01.png) + +2. Second, you’ll also notice items on your backlogs now include a green plus button allowing you to quickly decompose each item. + +![Backlog decomposition](_img/6_19_02.png) + +##Testing Updates + +You can now easily transition from the Test hub on the web directly to Microsoft Test Manager (MTM) by clicking the Open using client button/context menu. Doing so will open up MTM (assuming that it has already been installed) and connect directly to your Team Project and test plan. + +![Opening MTM from the web](_img/6_19_03.png) + +And, you can now edit the values for parameters in test steps directly through the test runner. While running a test, double-click the value of a parameter to change its value. + +![Editing parameters during test execution](_img/6_19_04.png) + +##Out with the Red + +Since the inception of the service we’ve used the color red to denote the administrative portion of the web interface. Well, after listening to many of you tell us that red was not the right color (typically using very colorful language), we’ve gone ahead and made a change. The administrative pages of the service now use our standard blue color. + +![New blue admin color](_img/6_19_05.png) + +##Terms of Service + +Finally, you will notice after today’s update that we’re asking each user of the service to review their profile information and accept the terms of service and privacy statement again. When doing this, please ensure that your contact e-mail is up to date so that we can keep in touch and keep you up to speed on the latest changes and announcements related to the service. + +![Reviewing your profile information](_img/6_19_06.png) + +That’s it for Sprint 49. + +Thanks! + +Aaron Bjork diff --git a/release-notes/2013/jun-26-team-services.md b/release-notes/2013/jun-26-team-services.md new file mode 100644 index 00000000000..7b660baed2f --- /dev/null +++ b/release-notes/2013/jun-26-team-services.md @@ -0,0 +1,44 @@ +--- +title: Team Foundation Service updates - Jun 26 +description: VSTS release notes for June 26 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: de8ae787-f7be-4567-a0fc-a82b9bff98bb +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Jun 26 + +It’s an exciting day today as we announced and released Visual Studio 2013 Preview. Visit [Soma's blog](http://blogs.msdn.com/b/somasegar/archive/2013/06/26/visual-studio-2013-preview.aspx) to read about the details. Related to that announcement we have a few changes to the service that you’ll want to know about. + +##Windows 8.1 support in the build service + +We have added a second pool of build machines to the hosted service. This new pool is running Windows Server 2012 R2 which allows you to build Windows 8.1 store apps. To build a Windows 8.1 store app you need to configure your build definition to use the second pool. + +To enable this feature, navigate your browser to the build section in your hosted account. You will see a new notification banner at the top of the page that will allow you to enable this new build pool for your account. Once you have enabled the pool, a new build controller will become available for you to use. To use this controller, open your build definition in Visual Studio, go to the Build Defaults section and select the Windows 8.1 Preview Controller. + +##Pasting images into work items + +With today’s changes, you can now paste images directly from your clipboard into any HTML control on your work items (Description field, History, Repro Steps, etc) when using Internet Explorer 11 Preview or Chrome as your browser. + +![Pasting images into work items](_img/6_26_01.png) + +##Opening Microsoft Test Runner + +Customers can now easily transition from the Test Hub in web access to the Microsoft Test Runner (MTR) by clicking the Run using client button/context menu. Doing so opens MTR and loads the selected test cases for data collection during manual testing. To use this capability, you need an updated MTR client from [Visual Studio Update 3](http://go.microsoft.com/fwlink/?LinkID=273878) (also released today). + +![Opening MTR from the web](_img/6_26_02.png) + +That’s it for today. + +Thanks. + +Aaron Bjork + + + + + diff --git a/release-notes/2013/mar-04-team-services.md b/release-notes/2013/mar-04-team-services.md new file mode 100644 index 00000000000..02a628ce6eb --- /dev/null +++ b/release-notes/2013/mar-04-team-services.md @@ -0,0 +1,77 @@ +--- +title: Team Foundation Service updates - Mar 4 +description: VSTS release notes for March 4 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: d95cc29e-4ccf-4c6d-a661-96eed05ad7c5 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Mar 4 + +Before we get to the new capabilities in today’s update, I want to announce some planned downtime for the service. + +**Saturday March 23rd we’ll be taking the service offline for 15 minutes sometime between 11:00 AM EST and 2:00 PM EST.** + +As we get closer to the event, we’ll be posting updates on our [service blog](http://blogs.msdn.com/b/tfservice/) with additional details. Please plan accordingly, and we apologize in advance for any inconvenience this causes. + +Now, let’s talk about some of the improvements in today's update… + +##Customizable Kanban Swim Lanes + +When we first introduced our kanban board [back in August of last year](https://www.visualstudio.com/en-us/articles/news/2012/aug-13-team-services), we knew a few key features were missing from the experience; most noticeably, the ability to customize the swim lanes on the board. Today we’re happy to announce that customizable swim lanes are here! + +How does it work? Navigate to your board from the backlog hub. Click the new **Customize Columns** option from the toolbar. Now you can configure the swim lanes (columns) for your board. + +![Configure swim lanes](_img/3_4_01.png) + +The swim lanes on a board are unique to each team, but they map directly to the shared work item states in your project. This allows you to give each team the autonomy to manage their workflow as needed. However, you still retain the ability to make sense of all the work by querying across teams on state. + +As you add new swim lanes, pick the appropriate work item state to map it to. As before, each swim lane supports a visual WIP (work in process) limit. You can use the arrows to re-order, or just click and drag a swim lane to move it around. In this example, I’ve added two new states named “Grooming” and “Groomed” and I’ve assigned them to the New and Approved states respectively. + +![Add and map swim lanes](_img/3_4_02.png) + +When I click **OK**, my kanban board is refreshed with the new customized swim lanes. I can now move backlog items through these swim lanes, letting the board automatically update the work item states for me. Additionally, the cumulative flow diagram above the board adjusts automatically to reflect the customized swim lanes. + +![Customized swim lanes](_img/3_4_03.png) + +##Edit Test Steps When You Run Tests + +In this sprint, you can now make changes to test steps inline when you run a test. + +When you run a test case, you sometimes find issues with the test itself that need to be fixed. The issue could be that new functionality has been added or removed, missing context in the steps, or something as simple as a spelling mistake. You want to make those corrections to the step immediately without having to change context. + +For example, in the below screenshot, the word “features” in step #2 is misspelled. + +![Issue with test case](_img/3_4_04.png) + +To fix this, you can now just double-click the step and correct the misspelling. After you click **Save**, the changes are persisted and you can continue to run the test – all without having to interrupt your context or workflow. + +![Edit test case to fix it](_img/3_4_05.png) + +**Note:** Currently, if the test step contains any parameters (either in the action or expected result) then you cannot edit the step inline. You will see a warning message about this. + +In future sprints, we will enable adding and deleting existing test steps and modifying the order of steps when you run a test. + +##Annotate/Blame + +In this sprint we added the annotate view on source files. We’re quite proud of this implementation so let us know what you think. This works for files in both TFVC and Git repositories. Simply browse to a file in your project and click the new annotate icon in the toolbar. + +![Annotate source file](_img/3_4_06.png) + +A margin slides out next to the file showing you who made changes to the file, when those changes were made and a link to the details of each revision. Now you can compare this with the changeset or commit previous. + +The blocks in the margin have a subtle color gradation to help you visually identify the age of the changes. The latest change is always the darkest and the oldest change is the lightest. All in all it’s a very nice, clean blame experience that we hope both users of Git and TFVC will find useful. + +##Scheduled Builds for Git Based Team Projects + +Finally, this sprint we enabled support for scheduled builds with Git repositories. You can now build your Git repos using a build definition that is triggered on a daily schedule. + +**Note:** To enable CI for Git builds you need [CTP3 of Visual Studio 2012 Update 2](http://go.microsoft.com/fwlink/?LinkId=273878). + +That’s our list for sprint 44. There are of course lots of bug fixes, performance improvements and minor tweaks as well based on your feedback. Keep the feedback coming on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, \ No newline at end of file diff --git a/release-notes/2013/mar-22-team-services.md b/release-notes/2013/mar-22-team-services.md new file mode 100644 index 00000000000..521e21efab6 --- /dev/null +++ b/release-notes/2013/mar-22-team-services.md @@ -0,0 +1,49 @@ +--- +title: Team Foundation Service updates - Mar 22 +description: VSTS release notes for March 22 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: cb4abbef-5cca-433a-b70d-5c2c759a8dec +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Mar 22 + +We have added improvements to our Git support and test case management for you this sprint. + +##Branches View + +In this sprint we added a new branches view for team projects using Git. This lets you see: + +- All the branches in your repo in one place +- The last commit and who did that commit for each branch +- How far ahead and behind each branch is from the current active branch + +For example, in the screenshot below "master" is the current branch. The green bars indicate how many commits that branch has that “master” doesn’t. The red bars indicate how many commits that branch is missing. + +![Branches view](_img/3_22_01.png) + +You can also compare two branches. View the list of commits and the summary of code diffs that are different between branches. + +![Compare branches](_img/3_22_02.png) + +**Note:** Unlike most of the recent web access code improvements, this view is specific to team projects using Git. While our goal is to mirror the experiences as much as possible, that doesn’t always make sense. For example, the shelveset view is unique to TFVC. For this branches view, we want to make the most of the features offered by Git and help support common Git workflows. + +##Test Case Management + +Our web based test runner also got some nice additions this sprint: + +- Select multiple test steps and mark them pass/fail in one action +- Double-click a test step to reorder, add or delete steps on the fly +- (See below) Hover over an inline image to view a larger version - no need to open it in a browser window + +![Issue with test case](_img/3_22_03.png) + +That’s all for this sprint. As always let us know how we're doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Jamie Cool diff --git a/release-notes/2013/may-13-team-services.md b/release-notes/2013/may-13-team-services.md new file mode 100644 index 00000000000..e02e6c06f57 --- /dev/null +++ b/release-notes/2013/may-13-team-services.md @@ -0,0 +1,79 @@ +--- +title: Team Foundation Service updates - May 13 +description: VSTS release notes for May 13 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 6def2b57-0807-4355-a22f-7d10d74ccb8c +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - May 13 + +After being relatively quiet on the “news” front in our last sprint, I’m happy to share that we’ve got quite a few updates in today’s deployment. + +##Color + +Let’s start with color. We’ve long known that our site lacked color. Blue and grey were the predominant colors and they seemed to overwhelm most experiences. With today’s update, we’ve introduced color in a few key places. The most obvious is on work items. All work items are now assigned a color in the process template definition. The color appears in the web UI as a “color bar” on query results and backlogs. It is the background color for cards on your task boards and kanban boards. The result is that you can now glance at a query result or backlog and easily differentiate between work item types. + +######Before + +![Work items view before](_img/5_13_01.png) + +######After + +![Work items view after](_img/5_13_02.png) + +##Icons and sentence casing + +Most of the icons in our toolbars and menus have been revamped. The changes are subtle. Many of the icons got a splash of color and most use thinner borders. + +We also updated the site to use sentence casing (the first letter of the first word is capitalized) on all headings, toolbars, etc. We had a fair amount of inconsistency here before, and we’re happy to see it all coming together. The only place we diverge here is our main navigation hubs which remain upper case. + +######Before + +![Icons and sentence casing before](_img/5_13_03.png) + +######After + +![Icons and sentence casing after](_img/5_13_04.png) + +##Navigation + +Three small updates were made to our navigation across the site. First, notice that the task board navigation hub has been moved from the top level down to the iteration. A side effect of this change is that you can now view a task board for past and future iterations, not just the current iteration (I can hear some of you cheering as you read this). This was a [very popular item](http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2901542-ability-to-view-task-board-for-past-sprints) on our UserVoice site and I’m happy to report that it’s marked as completed! + +![Navigation](_img/5_13_05.png) + +Second, we updated the navigation layer to remember the hub you last visited. This is especially handy when moving between WORK and CODE sections which each have multiple hubs. And finally, we changed the Team Foundation Service logo and text in the header to link directly to your account home page instead of our welcome portal. + +##Git multi-repo support + +When using Git in the Enterprise you will want your repositories modular and self-contained. This is to manage the history and permissions to your various modules in discrete components. Feedback was showing us that some people were creating multiple team projects just to have additional Git repositories. Rather than encouraging people down that route we’ve enabled multiple repositories per team project. This is a feature for more advanced users, by default you still just get one (the same name as your team project). Now you can select the repository name in the code explorer to switch to another repository in your team project. + +![Code explorer with multiple repositories](_img/5_13_06.png) + +The drop down gives you a filter and you can click **Manage repositories** to create, rename or delete repositories. You can also manage the security permissions on them in the new Version Control administration page. + +![Multiple repositories](_img/5_13_07.png) + +If you rename a repository then you will need to manually update the remote URL where you have cloned it. Right now you can only use the advanced Team Explorer integration when the repository is the default one (i.e. the repository with the same name as the team project). You can still clone, push and pull into the other repositories in your team project from Visual Studio, but you’ll need to do this by cloning manually from the remote URL. A future version of the Git integration in Visual Studio will help you get connected to them more easily. + +This was a [relatively new item](http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3811952-allow-multiple-git-repositories-in-a-single-team-p) requested on UserVoice and we’re happy to mark it as done. + +##Branded login page + +The final change in this sprint’s deployment is an update to our login page so that it’s now a branded Team Foundation Service experience. This was something we got a lot of feedback on. The flow prior to this update used a generic Microsoft account sign in page. This created a somewhat confusing experience. + +![Multiple repositories](_img/5_13_08.png) + +That’s it for sprint 47. Let us know what you think. We're listening on [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Aaron Bjork + + + + diff --git a/release-notes/2013/may-28-team-services.md b/release-notes/2013/may-28-team-services.md new file mode 100644 index 00000000000..36c3f8a9b92 --- /dev/null +++ b/release-notes/2013/may-28-team-services.md @@ -0,0 +1,46 @@ +--- +title: Team Foundation Service updates - May 28 +description: VSTS release notes for May 28 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 07422a87-fd33-4a13-a201-5fe9b7bc694f +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - May 28 + +##Build IaaS + +Over the past few months, we’ve been working hard on our build service. You haven’t seen much from it yet but the benefits really come to life with today’s deployment. We’ve been working on porting our build pool from the older Azure VM Roles to the new Azure IaaS VMs. There are a number of benefits that come from this: + +- You have more disk space to work with on the build machine. IaaS VMs allow for much more disk space than VM Roles did. +- You can build Windows Store apps. This is because we can now run Windows Server 2012 VM images rather than Windows 2008 R2. +- The build service is less expensive and time consuming to manage. While you won’t see that directly, you will see some indirect benefits in our ability to keep the build image more up to date with new SDK releases. + +While we were working on this, Azure released the new 2.0 SDK and we have now updated the build service to support it. + +As I write this, we are currently in the middle of a switch over from the old pool to the new pool. We are currently running 10% of our builds on the new pool and by the time this news article is published we should be running at least 50% of our build load on the new pool. Within a week 100% should be on the new pool. + +There’s no easy way to tell, in this transition period, whether or not your account is configured to run on the old pool or the new pool. The easiest way to do it would be to create a simple Windows Store app, check it in and submit a build for it. If it succeeds, you are on the new pool. + +##Git Alerts + +Today we turned on email alerts for Git projects. You can now create email alerts that are triggered when commits are pushed to the service. Push alerts may be filtered by author, committer, pusher, comment, project, and/or repository. If you've never used alerts before, click your name in the page header and select **My Alerts**. From this dialog you can configure which alerts you want to subscribe to and where you want the alerts sent. + +![Git alerts for Team Foundation Service](_img/5_28_01.png) + +##Backlogs + +Finally, we made a few small changes to how your product backlog works. First, the hub has been renamed to just "Backlogs", and your actual product backlog has been named according to the process template you're using (Agile = "Stories", Scrum = "Backlog Items", CMMI = "Requirements"). We also updated the logic of the product backlog to now __show all items until they reach the completed/done state__. Previously, when an item on your backlog was assigned to a sprint and moved to an in progress state, it would disappear from the backlog. This has been changed so that items only disappear from the backlog after being marked as completed/done. + +**Note:** This could result in some items re-appearing on your backlog that were never marked as completed/done. + +![Backlog with in progress items](_img/5_28_02.png) + +That’s it for now. We should have a whole bunch of new stuff next sprint. Stay tuned. + +Thanks, +Brian \ No newline at end of file diff --git a/release-notes/2013/nov-08-team-services.md b/release-notes/2013/nov-08-team-services.md new file mode 100644 index 00000000000..e46fb1d3bd2 --- /dev/null +++ b/release-notes/2013/nov-08-team-services.md @@ -0,0 +1,38 @@ +--- +title: Team Foundation Service updates - Nov 8 +description: VSTS release notes for November 08 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 16f98008-1ba7-4b07-ae6b-07490f37822b +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Nov 8 + +You might be wondering why we’re updating the service today instead of on Monday (our normal deployment). Well, we’ve got some big events happening next week – [https://www.visualstudio.com/](https://www.visualstudio.com/). Because of those events we moved our normal Monday deployment up a few days. On to the good stuff… + +##Chart Pinning + +This morning we enabled the ability to pin [work item charts](http://tfs.visualstudio.com/en-us/news/2013-sep-9) to your team & project home pages. We’re expecting this to be a fan favorite as it allows you a very easy way to provide visibility to key data in your projects. With this change we also took the opportunity to decouple the action of “pinning” something from the concept of a “team favorite”. Pinning is now a completely separate action from adding to team favorites. This change applies to work item queries, source folders, and build definitions. Your home page is now based on pinned items only (don't worry, we migrated all team favorites to pinned items). + +![Charts pinned to the team project home page](_img/11_08_01.png) + +One thing to note is that we updated our security model so that only team admins can pin and un-pin items. + +##Load Test Improvements + +If you’re a user of our load test service you’ll be pleased to learn we made an update so that the key performance counters graph is now available for completed runs – instead of only for in progress or active runs. Before today’s change you had to download the load test run report for completed runs and view the graph separately. + +![Load test chart](_img/11_08_02.png) + +We also updated our service configuration to support load tests with up to 20 agents. Learn how to modify the number of agents for your runs here. + +That’s it for today’s update. We’ll have more to talk about next week so don’t forget to check back on Wednesday, Nov 13. As always let us know what you think on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads) and Twitter. + +Thanks, + +Aaron Bjork + diff --git a/release-notes/2013/nov-13-team-services.md b/release-notes/2013/nov-13-team-services.md new file mode 100644 index 00000000000..a110415f900 --- /dev/null +++ b/release-notes/2013/nov-13-team-services.md @@ -0,0 +1,119 @@ +--- +title: Visual Studio Online updates - Nov 13 +description: VSTS release notes for November 13 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 18bb7318-c598-49ff-bbcc-ed92e2e419a0 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates - Nov 13 + +##Announcing Visual Studio Online + +Today we take a very significant step in the evolution of our developer services. There are many pieces to it so bear with me while I get to them all. And please read all the way to the end for some exciting announcements. + +![New branding for Visual Studio Online](_img/11_13_01.png) + +The first thing you will notice is that we’ve changed our name. What was Team Foundation Service is now Visual Studio Online. The name change is not due to any one change we are making today but rather an indicator that Visual Studio Online is the services component of our developer tools. It will, of course, continue to support all the kinds of development you do – Windows, Azure, Java, iOS, etc. and the IDE you need – Visual Studio, Eclipse, XCode, Android Studio, etc. But the name does indicate a continued broadening of our offering – you’ll see some more on this below if you continue to read. + +![New Visual Studio Online site](_img/11_13_02.png) + +With our new name comes a new portal. This is now a combined portal, including the breadth of our Visual Studio, Visual Studio Online and MSDN offerings. There’s a ton of useful information about our products, some “How-to” content for getting started, the latest news and more. http://www.visualstudio.com is the only url you have to remember. From here you can sign in and get to your profile page which now has links both to the account you own and to all the accounts you’ve been invited to participate in. + +![Your profile page](_img/11_13_03.png) + +##Visual Studio Online is Open for Business + +Even bigger news is that we have now enabled paid usage of the service. Officially the service is in what we call “Commercial Preview” as we work through any issues that we may have with the billing system before announcing “General Availability” sometime in 2014. You can sign up for or transition your existing account to a paid account starting today. + +Don’t worry though. First off, everyone who is a member of an account today has their use grandfathered as a free “Early Adopter” for 90 days. This will give everyone a few months to look at and understand the plans, ask questions and decide what to do. And, of course, we’ll continue to have free accounts for small teams. I don’t want to go into all the details here, but I do want to highlight a few key points… + +-Every account gets 5 “Basic” users for free. +-Eligible MSDN subscriptions include VS Online access - there are no additional per user costs for MSDN subscribers. +-You license users and you pay for “consumable resources” – like automated builds, load tests, etc beyond the free quantities included with every account. +-While the service is in Commercial Preview, all list prices are reduced by 50% to account for the fact that the service is still officially a “preview”. +-Among the plans, you will find an option for small teams that allows you to license both VS Online and the VS Professional IDE on a monthly basis. This can be a very flexible and cost effective way for a small team to stay up to date with the latest version of Visual Studio. + +You can read all the offer details [here](https://www.visualstudio.com/products/visual-studio-online-overview-vs) on our new portal. + +I assume some people will decide, for any number of reasons, that it’s time for them to migrate from the cloud to an on-premises Team Foundation Server installation. We promised months ago that we would provide a good migration path and we will. It’s not quite ready yet, but we’re expecting to have it available for anyone to use by January – at least a month before the “Early Adopter” period is over. This solution will enable you to export all of your data from VS Online as a Team Project Collection that can be imported into TFS. We’ll provide more details in a future news post. + +To get started with a paid account, the first thing to understand is that we are coupling your VS Online subscription to your Windows Azure account. VS Online is a Windows Azure resource and you can manage your subscription and billing with Windows Azure and, consequently, take advantage of all of the Windows Azure purchasing options and discounts. To get a detailed walk-through, visit our [getting started topic](https://www.visualstudio.com/get-started/set-up-billing-for-your-account-vs). + +![Set up your billing](_img/11_13_04.png) + +Once your account is connected, you can use the [Windows Azure portal](https://manage.windowsazure.com/) to change your subscription. + +![Assign licenses in the Windows Azure portal](_img/11_13_05.png) + +Use the new Users hub in VS Online to assign licenses to users. + +![Assign your licenses from Visual Studio Online](_img/11_13_06.png) + +##Getting Support is Easy + +Among the features of the new site you will find a new [support page](https://www.visualstudio.com/support/support-overview-vs) that provides you with a full set of options for getting support – including a list of commonly asked questions, links to forums, contact info for customer support and more. We want to make it as easy as we can for you to get any help that you need. + +##Announcing Visual Studio Online “Monaco” + +With Visual Studio Online we want to offer a broad range of tools and services that support the different kinds of development you do. In support of that vision, today we are announcing the preview of “Monaco”, a new development service specifically designed for building and maintaining Windows Azure Websites. With Monaco, we want to provide developers with a lightweight, friction free companion to the Visual Studio desktop IDE that is accessible from any device on any platform. Monaco is a rich, browser based, code focused development environment optimized for the Windows Azure platform, making it easy to start building and maintaining applications for the cloud. + +###Getting Started + +To get started with Monaco you must first enable editing for your website. This is done on a per website basis, on the CONFIGURE tab in the Windows Azure Portal for your site, in the “general” section. + +![Get started with Monaco](_img/11_13_07.png) + +Once you enable editing, a link to “Edit in Visual Studio Online” will appear on the DASHBOARD tab of the portal, under “quick glance”. + +![Quick glance view](_img/11_13_08.png) + +You’ll be prompted for your deployment credentials. These are also available in the quick glance section of the portal. Once you are authenticated, you will be directed to the Monaco environment where you can start editing your site. + +###The Monaco Environment + +Changes are automatically saved and are live. Monaco has great support for HTML5 and JavaScript applications (including TypeScript and Node) as well as PHP applications. You can edit VB and C# ASP.NET Web Applications in Monaco. You can use MSBuild from the Console to compile the project. + +![Using Monaco](_img/11_13_09.png) + +This is just a brief overview of Monaco in order to get you up and running. For more information, check out the new video series for Monaco on Channel 9. + +##Announcing Application Insights Limited Preview + +Today we began a preview of Application Insights, a brand new service available through Visual Studio Online. Application Insights collects, processes and presents a wide variety of telemetry including performance, usage, availability, exception, crash, environment, log and developer-supplied data from all components of a modern application – including clients (devices and browser), servers, databases and services. + +With this “360 degree view” of your application, Application Insights can quickly detect availability and performance problems, alert you, pinpoint their root cause and connect you to rich diagnostic experiences in Visual Studio for diagnosis and repair. It also supports continuous, data-driven improvement of an application. For example it highlights which features are most and least used, where users get “stuck” in an application, where and why exceptions are occurring, which client platforms are being used with which OS versions, and where performance optimizations will make the biggest impact on compute costs. + +###Custom dashboards + +In addition to “out of the box” pre-configured insights and reports, you can create custom dashboards showing the metrics you care most about. + +![Customize your dashboards](_img/11_13_10.png) + +###Integration with Visual Studio + +One of the cooler things about Application Insights is its integration with Visual Studio. When your availability tests fail, or exceptions occur, Application Insights can bring you right to the offending line of code in the version of the source that is actually in production. + +![Find a line of code that's causing an issue](_img/11_13_11.png) + +###Where should I focus my attention next sprint? + +Without Application Insights, “what’s next” decisions are often guesswork. But with Application Insights, you’ll understand what users are doing, where they are succeeding, and which platforms matter most. If you want to instrument your application, you can capture any sort of custom insight. With this insight, your continuous improvement efforts can be more focused and impactful. + +![See which browsers your customers use](_img/11_13_12.png) + +###Next Steps + +If you are already Visual Studio Online user and want to participate in the limited preview, request an invitation code via the new Application Insights tile on your Visual Studio Online home page. If you aren’t yet a Visual Studio Online user, you can quickly sign up [here](http://go.microsoft.com/fwlink/?LinkId=307137). + +As always we’re eager to hear any feedback on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads) and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Brian Harry + + diff --git a/release-notes/2013/oct-17-team-services.md b/release-notes/2013/oct-17-team-services.md new file mode 100644 index 00000000000..82482da7975 --- /dev/null +++ b/release-notes/2013/oct-17-team-services.md @@ -0,0 +1,27 @@ +--- +title: Team Foundation Service updates - Oct 17 +description: VSTS release notes for October 17 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: c93f5236-1c77-4d41-8200-29bfb66edd7c +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Oct 17 + +##Build Image Update + +Today we interrupt our normally scheduled 3 week update cadence with a bonus update to the service. + +It’s a big day for Microsoft platforms with the launch of Windows 8.1, Windows Server 2012 R2 and Visual Studio 2013. As a result we have refreshed our build machine image. It now includes Visual Studio 2013 RTM. + +In the next sprint deployment which is upcoming shortly, we will be updating the operating system on the build machine image to Windows Server 2012 R2. This will enable folks to build Windows 8.1 apps using the cloud build service. + +As always let us know how we're doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](https://twitter.com/search?q=%23tfservice). + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2013/oct-21-team-services.md b/release-notes/2013/oct-21-team-services.md new file mode 100644 index 00000000000..0e8d0f23253 --- /dev/null +++ b/release-notes/2013/oct-21-team-services.md @@ -0,0 +1,37 @@ +--- +title: Team Foundation Service updates - Oct 21 +description: VSTS release notes for October 21 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 79a305c6-4033-453a-89e8-f957f0f19ad1 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Oct 21 + +##Account and project pages + +Our account and project pages received a long overdue face lift today. We’ve known for some time that these pages needed some attention and I’m happy to announce that the new bits rolled out to the service this morning. You’ll notice that the new design is more visually appealing and makes better use of screen real estate on wider resolutions. We also took the time to incorporate our news feed directly into your account home page so you stay up to date on the latest updates being made to the service. + +![New account home page](_img/10_21_01.png) + +![New project home page](_img/10_21_02.png) + +##Remembering your last team room + +Finally, we did a bit of work to ensure that the Rooms hub now remembers the last team room you visited and takes you directly there. + +##Updated Build Image + +We also updated the build image operating system to Windows Server 2012 R2. This enables you to use the hosted build controller for Windows 8.1 apps. + +That’s it for sprint 55. As always let us know how we're doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Aaron Bjork + + diff --git a/release-notes/2013/sep-09-team-services.md b/release-notes/2013/sep-09-team-services.md new file mode 100644 index 00000000000..9c15846cb62 --- /dev/null +++ b/release-notes/2013/sep-09-team-services.md @@ -0,0 +1,64 @@ +--- +title: Team Foundation Service updates - Sep 9 +description: VSTS release notes for September 09 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: a58950a3-279f-4f24-bee4-7934e81d52f6 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Sep 9 + +We’ve got lots to share with you in today’s deployment. Buckle up… + +##Work Item Charts + +Today we turned on a new feature that allows you to create charts from your work item query results. Each query now has a new Charts view. From that view you can create charts based on the data returned by the query. + +![Create charts from your work item query](_img/9_09_01.png) + +If you’re familiar with our on-premises reporting the first question you’re probably going to ask is “How often is this data refreshed?” The answer is “instantly”. There’s no warehouse or cube involved in this feature. It’s simply a visualization of the data returned by the query result. Today we have these chart types: pie, bar, column, stacked bar, and a pivot table. + +![Configure your chart](_img/9_09_02.png) + +This is an area that is a clear priority for us as we move forward. We’ve known since the service launched that our reporting story needed to start improving. Consider this our first step. There are some clear limitations today including no support for hierarchical or linked queries, no trend charts, and no viewing experience outside of the charts tab. + +You can expect us to talk about reporting more and more as we move through the remainder of this year. Stay tuned! Our immediate next steps will be to include trend charts as well as enabling the ability to pin charts to your project & team home pages. + +##Bulk Edit of Test Cases + +Editing test steps is often a tedious process. To make that task easier we created a new grid style view for fast editing. Simply select the new grid view option on the list of test cases and from a single screen you can bulk add & edit test cases and their test steps. You can also paste directly into and from Excel for easy editing outside the browser. This new view should drastically reduce the number of clicks needed to manage test cases. Let us know what you think. + +![Bulk edit and entry with test grid](_img/9_09_03.png) + +##Deleting Team Projects + +Today’s update brings the ability to delete team projects directly from the administration control panel (no more having to use a command line tool). Navigate to your project administration page and move up a level to the DefaultCollection. From there you can choose to delete the team project from the context menu on the project. **WARNING** – please tread carefully here!! There’s no “undo” with this scenario, so if you’re ready to delete a team project, please make sure you’re REALLY ready to delete it. + +![Delete a team project](_img/9_09_04.png) + +##Portfolio Backlog Sorting + +If you’ve been using the [new portfolio backlogs](https://www.visualstudio.com/en-us/articles/news/2013/jun-19-team-services), you may have noticed some annoying behavior around sorting when using the Scrum process template. If you pivoted up to view features mapped to backlog items or bugs on your backlog, all the unmapped bugs were sorted to the top of the backlog. That gave a view that didn’t reflect the actual order of the backlog. Argh! I’m happy to report that this has been fixed. As you pivot up or down your backlog, order now always reflects the order of the backlog. + +##Work Items from Code Discussion + +You can now create work items directly from [code comments](https://www.visualstudio.com/en-us/articles/news/2013/jun-03-team-services). Just click the new work item button on the right side of the comment and you’re off and running. As you would expect, work items created through this experience are automatically linked to the changeset you’re working from. + +![Create a bug directly from code comments](_img/9_09_05.png) + +That’s it for this sprint 53! As always let us know how we're doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Aaron Bjork + + + + + + + diff --git a/release-notes/2013/sep-30-team-services.md b/release-notes/2013/sep-30-team-services.md new file mode 100644 index 00000000000..c78f893cb62 --- /dev/null +++ b/release-notes/2013/sep-30-team-services.md @@ -0,0 +1,52 @@ +--- +title: Team Foundation Service updates - Sep 30 +description: VSTS release notes for September 30 2013 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 4f79eafa-0844-4cb4-acd0-18332d982205 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Foundation Service updates - Sep 30 + +We have three new improvements to existing features in this sprint. + +##New Language Support for Code Syntax Highlighting + +In our source based web views, we have rich syntax highlighting for code. Today we expanded the number of file types we support to include: + +-PowerShell +-Python +-Ruby +-Lua +-Less +-ini + +##Color Picking in Charts + +In the [last deployment](https://www.visualstudio.com/en-us/articles/news/2013/sep-09-team-services), we added a new work item chart feature. By popular demand, we now allow you to edit the colors for each series on a chart. Simply click on a series in the chart and pick a color from the color picker. + +![Color picker for charts](_img/9_30_01.png) + +##Column Options for the Test Case Grid View + +Also in the [last deployment](/news/2013/sep-9-team-services.md), we enabled the grid view for easy authoring of test cases. In this deployment, we are enhancing the grid view to support more test case work item fields. The "Column Options" controls what fields you will see in both the list view and the grid view. + +![More fields in the grid view](_img/9_30_02.png) + +Note: The grid view will only show test case work item fields - it will not show fields such as Outcome, Assigned + +Tester, Configurations etc., which are associated with running tests. + +That’s it for this sprint 54. As always let us know how we're doing on [User Voice](https://visualstudio.uservoice.com/forums/330519-vso), the [MSDN Forums](http://social.msdn.microsoft.com/Forums/en-US/TFService/threads), and [Twitter](http://twitter.com/search?q=%23tfservice). + +Thanks, + +Jamie Cool + + + + diff --git a/release-notes/2014/_img/10_14_01.png b/release-notes/2014/_img/10_14_01.png new file mode 100644 index 00000000000..5799ae88e86 Binary files /dev/null and b/release-notes/2014/_img/10_14_01.png differ diff --git a/release-notes/2014/_img/10_14_02.png b/release-notes/2014/_img/10_14_02.png new file mode 100644 index 00000000000..1715527a9d6 Binary files /dev/null and b/release-notes/2014/_img/10_14_02.png differ diff --git a/release-notes/2014/_img/10_14_03.png b/release-notes/2014/_img/10_14_03.png new file mode 100644 index 00000000000..01d86bed714 Binary files /dev/null and b/release-notes/2014/_img/10_14_03.png differ diff --git a/release-notes/2014/_img/10_28_01.png b/release-notes/2014/_img/10_28_01.png new file mode 100644 index 00000000000..f2ce7282cc7 Binary files /dev/null and b/release-notes/2014/_img/10_28_01.png differ diff --git a/release-notes/2014/_img/11_04_01.png b/release-notes/2014/_img/11_04_01.png new file mode 100644 index 00000000000..00e04ae0edc Binary files /dev/null and b/release-notes/2014/_img/11_04_01.png differ diff --git a/release-notes/2014/_img/11_04_02.png b/release-notes/2014/_img/11_04_02.png new file mode 100644 index 00000000000..a0ff8eaabda Binary files /dev/null and b/release-notes/2014/_img/11_04_02.png differ diff --git a/release-notes/2014/_img/11_04_03.png b/release-notes/2014/_img/11_04_03.png new file mode 100644 index 00000000000..7196be5849a Binary files /dev/null and b/release-notes/2014/_img/11_04_03.png differ diff --git a/release-notes/2014/_img/11_04_04.png b/release-notes/2014/_img/11_04_04.png new file mode 100644 index 00000000000..a460dedaaee Binary files /dev/null and b/release-notes/2014/_img/11_04_04.png differ diff --git a/release-notes/2014/_img/11_04_05.png b/release-notes/2014/_img/11_04_05.png new file mode 100644 index 00000000000..897c457aebd Binary files /dev/null and b/release-notes/2014/_img/11_04_05.png differ diff --git a/release-notes/2014/_img/11_04_06.png b/release-notes/2014/_img/11_04_06.png new file mode 100644 index 00000000000..f46f28f93bf Binary files /dev/null and b/release-notes/2014/_img/11_04_06.png differ diff --git a/release-notes/2014/_img/11_04_07.png b/release-notes/2014/_img/11_04_07.png new file mode 100644 index 00000000000..4fd2ba117a3 Binary files /dev/null and b/release-notes/2014/_img/11_04_07.png differ diff --git a/release-notes/2014/_img/12_02_01.png b/release-notes/2014/_img/12_02_01.png new file mode 100644 index 00000000000..1e1d42ff304 Binary files /dev/null and b/release-notes/2014/_img/12_02_01.png differ diff --git a/release-notes/2014/_img/12_02_02.png b/release-notes/2014/_img/12_02_02.png new file mode 100644 index 00000000000..ec15b0398d4 Binary files /dev/null and b/release-notes/2014/_img/12_02_02.png differ diff --git a/release-notes/2014/_img/12_02_03.png b/release-notes/2014/_img/12_02_03.png new file mode 100644 index 00000000000..e0a3f9ddd55 Binary files /dev/null and b/release-notes/2014/_img/12_02_03.png differ diff --git a/release-notes/2014/_img/12_02_04.png b/release-notes/2014/_img/12_02_04.png new file mode 100644 index 00000000000..cf796dbc936 Binary files /dev/null and b/release-notes/2014/_img/12_02_04.png differ diff --git a/release-notes/2014/_img/12_02_05.png b/release-notes/2014/_img/12_02_05.png new file mode 100644 index 00000000000..c305baec8b5 Binary files /dev/null and b/release-notes/2014/_img/12_02_05.png differ diff --git a/release-notes/2014/_img/12_02_06.png b/release-notes/2014/_img/12_02_06.png new file mode 100644 index 00000000000..a2d52f699d6 Binary files /dev/null and b/release-notes/2014/_img/12_02_06.png differ diff --git a/release-notes/2014/_img/12_02_07.png b/release-notes/2014/_img/12_02_07.png new file mode 100644 index 00000000000..50bd105f462 Binary files /dev/null and b/release-notes/2014/_img/12_02_07.png differ diff --git a/release-notes/2014/_img/12_17_01.png b/release-notes/2014/_img/12_17_01.png new file mode 100644 index 00000000000..76df25c6fa0 Binary files /dev/null and b/release-notes/2014/_img/12_17_01.png differ diff --git a/release-notes/2014/_img/12_17_02.png b/release-notes/2014/_img/12_17_02.png new file mode 100644 index 00000000000..2e68d765254 Binary files /dev/null and b/release-notes/2014/_img/12_17_02.png differ diff --git a/release-notes/2014/_img/12_17_03.png b/release-notes/2014/_img/12_17_03.png new file mode 100644 index 00000000000..be916f85edb Binary files /dev/null and b/release-notes/2014/_img/12_17_03.png differ diff --git a/release-notes/2014/_img/12_17_04.png b/release-notes/2014/_img/12_17_04.png new file mode 100644 index 00000000000..7e9f5de1cff Binary files /dev/null and b/release-notes/2014/_img/12_17_04.png differ diff --git a/release-notes/2014/_img/12_17_05.png b/release-notes/2014/_img/12_17_05.png new file mode 100644 index 00000000000..9236138acec Binary files /dev/null and b/release-notes/2014/_img/12_17_05.png differ diff --git a/release-notes/2014/_img/12_17_06.png b/release-notes/2014/_img/12_17_06.png new file mode 100644 index 00000000000..a8b5ad35d36 Binary files /dev/null and b/release-notes/2014/_img/12_17_06.png differ diff --git a/release-notes/2014/_img/12_17_07.png b/release-notes/2014/_img/12_17_07.png new file mode 100644 index 00000000000..5aee5c2167b Binary files /dev/null and b/release-notes/2014/_img/12_17_07.png differ diff --git a/release-notes/2014/_img/12_17_08.png b/release-notes/2014/_img/12_17_08.png new file mode 100644 index 00000000000..ee3b57c1dfa Binary files /dev/null and b/release-notes/2014/_img/12_17_08.png differ diff --git a/release-notes/2014/_img/1_22_01.png b/release-notes/2014/_img/1_22_01.png new file mode 100644 index 00000000000..8f791791306 Binary files /dev/null and b/release-notes/2014/_img/1_22_01.png differ diff --git a/release-notes/2014/_img/1_22_02.png b/release-notes/2014/_img/1_22_02.png new file mode 100644 index 00000000000..37cf7cc073c Binary files /dev/null and b/release-notes/2014/_img/1_22_02.png differ diff --git a/release-notes/2014/_img/1_22_03.png b/release-notes/2014/_img/1_22_03.png new file mode 100644 index 00000000000..99e1bccbce1 Binary files /dev/null and b/release-notes/2014/_img/1_22_03.png differ diff --git a/release-notes/2014/_img/2_10_01.png b/release-notes/2014/_img/2_10_01.png new file mode 100644 index 00000000000..3ee8f5937b9 Binary files /dev/null and b/release-notes/2014/_img/2_10_01.png differ diff --git a/release-notes/2014/_img/2_10_02.png b/release-notes/2014/_img/2_10_02.png new file mode 100644 index 00000000000..8dc677d5ac1 Binary files /dev/null and b/release-notes/2014/_img/2_10_02.png differ diff --git a/release-notes/2014/_img/2_28_01.png b/release-notes/2014/_img/2_28_01.png new file mode 100644 index 00000000000..818b384c0a7 Binary files /dev/null and b/release-notes/2014/_img/2_28_01.png differ diff --git a/release-notes/2014/_img/3_18_01.png b/release-notes/2014/_img/3_18_01.png new file mode 100644 index 00000000000..93c25db7f7f Binary files /dev/null and b/release-notes/2014/_img/3_18_01.png differ diff --git a/release-notes/2014/_img/3_18_02.png b/release-notes/2014/_img/3_18_02.png new file mode 100644 index 00000000000..2cd295515bc Binary files /dev/null and b/release-notes/2014/_img/3_18_02.png differ diff --git a/release-notes/2014/_img/4_3_01.png b/release-notes/2014/_img/4_3_01.png new file mode 100644 index 00000000000..9883dc2ff68 Binary files /dev/null and b/release-notes/2014/_img/4_3_01.png differ diff --git a/release-notes/2014/_img/4_3_02.png b/release-notes/2014/_img/4_3_02.png new file mode 100644 index 00000000000..4c6ecc8cfb6 Binary files /dev/null and b/release-notes/2014/_img/4_3_02.png differ diff --git a/release-notes/2014/_img/4_3_03.png b/release-notes/2014/_img/4_3_03.png new file mode 100644 index 00000000000..8227d02820a Binary files /dev/null and b/release-notes/2014/_img/4_3_03.png differ diff --git a/release-notes/2014/_img/5_12_01.png b/release-notes/2014/_img/5_12_01.png new file mode 100644 index 00000000000..cbf121bfcd9 Binary files /dev/null and b/release-notes/2014/_img/5_12_01.png differ diff --git a/release-notes/2014/_img/5_12_02.png b/release-notes/2014/_img/5_12_02.png new file mode 100644 index 00000000000..c46bfb25350 Binary files /dev/null and b/release-notes/2014/_img/5_12_02.png differ diff --git a/release-notes/2014/_img/5_20_01.png b/release-notes/2014/_img/5_20_01.png new file mode 100644 index 00000000000..4f461c9e073 Binary files /dev/null and b/release-notes/2014/_img/5_20_01.png differ diff --git a/release-notes/2014/_img/5_20_02.png b/release-notes/2014/_img/5_20_02.png new file mode 100644 index 00000000000..62229ee3f24 Binary files /dev/null and b/release-notes/2014/_img/5_20_02.png differ diff --git a/release-notes/2014/_img/5_20_03.png b/release-notes/2014/_img/5_20_03.png new file mode 100644 index 00000000000..7877918e284 Binary files /dev/null and b/release-notes/2014/_img/5_20_03.png differ diff --git a/release-notes/2014/_img/5_20_04.png b/release-notes/2014/_img/5_20_04.png new file mode 100644 index 00000000000..cda6969f7ff Binary files /dev/null and b/release-notes/2014/_img/5_20_04.png differ diff --git a/release-notes/2014/_img/6_10_01.png b/release-notes/2014/_img/6_10_01.png new file mode 100644 index 00000000000..e6d9ed72fb3 Binary files /dev/null and b/release-notes/2014/_img/6_10_01.png differ diff --git a/release-notes/2014/_img/7_1_01.png b/release-notes/2014/_img/7_1_01.png new file mode 100644 index 00000000000..316befff357 Binary files /dev/null and b/release-notes/2014/_img/7_1_01.png differ diff --git a/release-notes/2014/_img/7_1_02.png b/release-notes/2014/_img/7_1_02.png new file mode 100644 index 00000000000..936bad3e8ea Binary files /dev/null and b/release-notes/2014/_img/7_1_02.png differ diff --git a/release-notes/2014/_img/7_1_03.png b/release-notes/2014/_img/7_1_03.png new file mode 100644 index 00000000000..98a5f36e30e Binary files /dev/null and b/release-notes/2014/_img/7_1_03.png differ diff --git a/release-notes/2014/_img/7_21_01.png b/release-notes/2014/_img/7_21_01.png new file mode 100644 index 00000000000..f33dad2dece Binary files /dev/null and b/release-notes/2014/_img/7_21_01.png differ diff --git a/release-notes/2014/_img/7_21_02.png b/release-notes/2014/_img/7_21_02.png new file mode 100644 index 00000000000..f627ae191dc Binary files /dev/null and b/release-notes/2014/_img/7_21_02.png differ diff --git a/release-notes/2014/_img/7_21_03.png b/release-notes/2014/_img/7_21_03.png new file mode 100644 index 00000000000..f21d41e4309 Binary files /dev/null and b/release-notes/2014/_img/7_21_03.png differ diff --git a/release-notes/2014/_img/7_21_04.png b/release-notes/2014/_img/7_21_04.png new file mode 100644 index 00000000000..9619bd300b6 Binary files /dev/null and b/release-notes/2014/_img/7_21_04.png differ diff --git a/release-notes/2014/_img/8_18_01.png b/release-notes/2014/_img/8_18_01.png new file mode 100644 index 00000000000..14896373583 Binary files /dev/null and b/release-notes/2014/_img/8_18_01.png differ diff --git a/release-notes/2014/_img/8_18_02.png b/release-notes/2014/_img/8_18_02.png new file mode 100644 index 00000000000..6a3731f40b4 Binary files /dev/null and b/release-notes/2014/_img/8_18_02.png differ diff --git a/release-notes/2014/_img/8_27_01.png b/release-notes/2014/_img/8_27_01.png new file mode 100644 index 00000000000..eb72c8d8a4b Binary files /dev/null and b/release-notes/2014/_img/8_27_01.png differ diff --git a/release-notes/2014/_img/8_27_02.png b/release-notes/2014/_img/8_27_02.png new file mode 100644 index 00000000000..a4c36038df2 Binary files /dev/null and b/release-notes/2014/_img/8_27_02.png differ diff --git a/release-notes/2014/_img/8_27_03.png b/release-notes/2014/_img/8_27_03.png new file mode 100644 index 00000000000..b16416bbc92 Binary files /dev/null and b/release-notes/2014/_img/8_27_03.png differ diff --git a/release-notes/2014/_img/9_04_01.png b/release-notes/2014/_img/9_04_01.png new file mode 100644 index 00000000000..a2b9df6bc77 Binary files /dev/null and b/release-notes/2014/_img/9_04_01.png differ diff --git a/release-notes/2014/_img/9_04_02.png b/release-notes/2014/_img/9_04_02.png new file mode 100644 index 00000000000..0397c970ef0 Binary files /dev/null and b/release-notes/2014/_img/9_04_02.png differ diff --git a/release-notes/2014/_img/9_04_03.png b/release-notes/2014/_img/9_04_03.png new file mode 100644 index 00000000000..bf3606eb96b Binary files /dev/null and b/release-notes/2014/_img/9_04_03.png differ diff --git a/release-notes/2014/_img/9_04_04.png b/release-notes/2014/_img/9_04_04.png new file mode 100644 index 00000000000..e53e43371d6 Binary files /dev/null and b/release-notes/2014/_img/9_04_04.png differ diff --git a/release-notes/2014/_img/9_04_05.png b/release-notes/2014/_img/9_04_05.png new file mode 100644 index 00000000000..d7774fdf591 Binary files /dev/null and b/release-notes/2014/_img/9_04_05.png differ diff --git a/release-notes/2014/_img/9_04_06.png b/release-notes/2014/_img/9_04_06.png new file mode 100644 index 00000000000..188ad79f90b Binary files /dev/null and b/release-notes/2014/_img/9_04_06.png differ diff --git a/release-notes/2014/_img/9_23_01.png b/release-notes/2014/_img/9_23_01.png new file mode 100644 index 00000000000..b3e11e92eea Binary files /dev/null and b/release-notes/2014/_img/9_23_01.png differ diff --git a/release-notes/2014/_img/9_23_02.png b/release-notes/2014/_img/9_23_02.png new file mode 100644 index 00000000000..d71434c789d Binary files /dev/null and b/release-notes/2014/_img/9_23_02.png differ diff --git a/release-notes/2014/_img/9_23_03.png b/release-notes/2014/_img/9_23_03.png new file mode 100644 index 00000000000..e2f4359dd1a Binary files /dev/null and b/release-notes/2014/_img/9_23_03.png differ diff --git a/release-notes/2014/apr-03-team-services.md b/release-notes/2014/apr-03-team-services.md new file mode 100644 index 00000000000..4c1bc8119f8 --- /dev/null +++ b/release-notes/2014/apr-03-team-services.md @@ -0,0 +1,85 @@ +--- +title: Visual Studio Online General Availability +description: VSTS release notes for April 3 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: bfe41b66-a230-42f6-b0f0-07f2b164496c +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online General Availability + +##General Availability of Visual Studio Online + +Today we’re announcing the general availability (GA) of Visual Studio Online, an important milestone in our journey as a service. GA of a service is the moral equivalent of the final release of version 1 of a “boxed product”—it marks the transition from preview to full commercial service. Of course, it’s been a journey with many steps along the way and there will be many more milestones ahead as we add new services, new features, etc. + +You’re probably wondering how this impacts your account and team projects living on the service. Let me provide a few details that I think will help… + +###Early adopter + +First, it’s important to note that the “early adopter” period of Visual Studio Online is nearing its end. If you’ve signed up for the service prior to December 13 th of 2013, some of your users are likely assigned “early adopter licenses” giving them access to the full set of features on Visual Studio Online, even features reserved for paid plans and MSDN subscribers. This is what we call an “early adopter”. + +On May 7 th, 2014, the early adopter period will end. Don’t worry, this still means that you have 5 free Basic users licenses associated with your account, but for additional users you’ll need to purchase and assign a different user license. You can learn about the user licenses available to you [here](https://www.visualstudio.com/products/visual-studio-online-overview-vs). If you’ve still got questions, don’t hesitate to jump over to the [FAQ](https://www.visualstudio.com/en-us/support/early-adopter-faq-vs) for the early adopter program. + +###SLA + +Part of our GA announcement is the addition of a financially-backed SLA for our services. We’ve made major investments to Visual Studio Online over the last few months to ensure it’s the best platform for you to use in planning, tracking, building, testing and operating your next software project. We’ve announced our general availability and backed it with an SLA, because we stand behind the reliability of our service and can promise to refund customers if they experience outages. + +-We guarantee at least 99.9% availability of Visual Studio Online for users under each **Visual Studio Online user plan** to access the associated Visual Studio Online account. +-We guarantee at least 99.9% availability to execute build operations using the paid **Visual Studio Online Build Service**. +-We guarantee at least 99.9% availability to execute load testing operations using the paid **Visual Studio Load Testing Service**. + +All availability is calculated over a monthly billing cycle. For more details, please visit: [http://www.windowsazure.com/en-us/support/legal/sla/](http://www.windowsazure.com/en-us/support/legal/sla/). + +###Data Export Window + +Many of our users started out with VS Online before we’d painted much of a picture of what the future would look like. Some group of them may want to take this transition to GA as an opportunity to reconsider their devops configuration and move to an on-premises TFS server. Starting today, we’re enabling a data export window for any customer that has been on the service and wants to “opt out”. For the next 6 weeks, you have the option to export your data from Visual Studio Online in a format that can be imported to Team Foundation Server 2013 Update 2. In order to get access to the export capability, contact customer support ([vsoexportsupport@microsoft.com](mailto:vsoexportsupport@microsoft.com)) and we’ll be sure to get it switched on right away and provide you instructions on what to do. + +##Application Insights Limited Preview + +Application Insights, first [announced](https://www.visualstudio.com/en-us/articles/news/2013/nov-13-team-services) back in November of 2013, is moving to “Limited Preview” and an invitation code is no longer required to try it out. With this change you can login to Visual Studio Online and start using Application Insights by selecting “Try Application Insights” tile. + +![Visual Studio Online: Try Application Insights](_img/4_3_01.png) + +##Shared Parameters for Test Cases + +Finally, we’ve turned on a new feature today that gives you the ability to re-use Test Case parameters. If you’re like me, you often want to run a test case multiple times, each time with different sets of test data. You can do this by adding parameter names to test steps and specifying parameter values in the test case. But, if you use the same parameter values in multiple test cases, you have to manage all such test cases individually, one at a time. Argh. This can lead to a lot of overhead and turn into a maintenance nightmare. With today’s deployment, you can use “Shared Parameters” to consolidate similar parameter data in a single location and reference it across multiple Test Cases. Moreover, when you update shared parameters, it’s reflected in all referenced Test Cases automatically. To get started, convert your existing local parameters in test cases to shared parameters or create new ones by navigating to the Parameters tab in Test hub. + +![convert your existing local parameters to shared parameters](_img/4_3_02.png) + +![Creating new shared parameters](_img/4_3_03.png) + +That’s all the news for today. Thank you to each and every one of you that has given us feedback on the service and helped us reach today’s important milestone! + +Thanks, + +Brian Harry + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/release-notes/2014/aug-18-team-services.md b/release-notes/2014/aug-18-team-services.md new file mode 100644 index 00000000000..ff23d286b98 --- /dev/null +++ b/release-notes/2014/aug-18-team-services.md @@ -0,0 +1,40 @@ +--- +title: Project Welcome pages – Aug 18 +description: VSTS release notes for August 18 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 1d640b87-d9b8-412c-a03c-340d9735d181 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Project Welcome pages - Aug 18 + +Following up on last sprint’s support for [using corporate identities with existing accounts](jul-21-team-services.md), we’ve now enabled auto-approval for the preview, enabling anyone to link their existing Visual Studio Online account to Azure Active Directory. + +##Project Welcome pages + +This sprint, we’re releasing Project Welcome pages. Welcome pages enable you to easily provide documentation for project visitors and participants about what the project is, how to participate, who to contact, other resources, and so on. Welcome pages are simple. They are just markdown files checked into the root of your Team Foundation Version Control project tree (for example, $/Dark Horse/README.md) or into the root of any Git repo in your project. The default welcome page will be “README.md”, but you can have as many as you like covering different aspects of your project and they will appear in a panel to the left of the welcome page. Here’s an example from one of our projects. + +We are using GitHub Flavored Markdown (GFM) as implemented in the [Marked](https://github.com/chjj/marked) library by Chris Jeffrey. It’s really easy to write and quite flexible. If you want to learn more about how to use project welcome pages, check out [Martin’s blog post](http://aka.ms/ProjectHomepage) for more details. + +![Project welcome page](_img/8_18_01.png) + + +##Tagging support in the Test Hub + +We’ve now enabled support for tags on test cases in the Test Hub. You can see the tags in the test list and easily filter down to the test cases you are most interested in. It’s another nice usability improvement for test case management. + +![Tags applied to a test case](_img/8_18_02.png) + +##Lots of little things + +There are lots of other nice little improvements—bug fixes, performance improvements, usability improvements, and more. One that’s worth giving a minor mention to is that we are working on improving the experience of managing hierarchical backlogs. This sprint we added the ability to assign work to iterations by dragging the work item and dropping it on the iteration. We’ll have more improvements in this area next sprint. + +Enjoy! + +Thanks, + +Brian Harry \ No newline at end of file diff --git a/release-notes/2014/aug-27-team-services.md b/release-notes/2014/aug-27-team-services.md new file mode 100644 index 00000000000..97220f43d7a --- /dev/null +++ b/release-notes/2014/aug-27-team-services.md @@ -0,0 +1,42 @@ +--- +title: Stakeholder licensing – Aug 27 +description: VSTS release notes for August 27 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 7cabae70-f736-4013-a69a-9df0a2c2b59b +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Stakeholder licensing – Aug 27 + +##A license for Stakeholders + +We’re delivering on the new "stakeholder license" that [I promised](http://blogs.msdn.com/b/bharry/archive/2014/07/09/upcoming-vs-online-licensing-changes.aspx) a few weeks ago. With this license, being activated today, any number of users in an account can be assigned a stakeholder license at no charge. + +![Assigning a stakeholder license](_img/8_27_01.png) + +Stakeholders have access to the project home page and most of the "work" related functionality. + +![Stakeholder view of the project](_img/8_27_02.png) + +*(click to zoom)* + +This includes the ability to view the backlog, add and edit items, run work item queries and more. + +![Stakeholder adding a project backlog item](_img/8_27_03.png) + +*(click to zoom)* + +I hope and expect that enabling this will eliminate a lot of the friction in enabling the entire organization to participate in projects. Learn more about what you can do with a [stakeholder license](https://www.visualstudio.com/get-started/work-as-a-stakeholder-vs). + +Enjoy! + +Thanks, + +Brian Harry + + + diff --git a/release-notes/2014/dec-02-team-services.md b/release-notes/2014/dec-02-team-services.md new file mode 100644 index 00000000000..1dca2b99db9 --- /dev/null +++ b/release-notes/2014/dec-02-team-services.md @@ -0,0 +1,71 @@ +--- +title: A new identity control – Dec 2 +description: VSTS release notes for Decemeber 02 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: eef013c8-9727-404d-9ef4-b8386d797d0b +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#A new identity control – Dec 2 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +We’ve got another sprint packed full of improvements for you… + +##Identity control and avatars + +One of my personal favorites in this week’s deployment is our new work item identity control. We’ve never really had a proper identity control in the product—instead, we made do with a simple drop-down list with alphabetically sorted names. It worked, but it was cumbersome when working with long lists and didn’t provide any additional information when dealing with people with the same name. Today that all changes as we roll out a shiny new identity control. The new control includes a user’s full name, avatar, and email address. + +![Identity control on a work item](_img/12_02_01.png) + +It should be very intuitive to use. When you put focus on the control, it starts by giving you an MRU (most recently used) list of people you’ve recently assigned work items to. If the person you’re after isn’t in that list, just click Search and we’ll pull back matching results from the users in your account. And, not only are we providing a new identity control, but we’ve refactored a bunch of places where we display a user’s name to include their avatar. You’ll now see avatars on cards on your work items, boards, and a bunch of additional places. + +![Avatars](_img/12_02_02.png) + +We know there might be a few rough edges to iron out here, so please let us know what you think. You can contact me directly on twitter at [@aaronbjork](http://twitter.com/aaronbjork) with any feedback. + +##Pull request improvements + +Next, let me walk through a few changes to the pull request experience. Code comments that are added during pull requests now have a state property that can be used to help you manage the feedback from reviewers. When created, comment states are initially set to **Active**, and may be changed to **Resolved**, **Won't Fix**, or **Closed** to communicate the results of the comment back to the reviewers. There is also a new view option in the Explorer view for the pull request to highlight only the Active comments. + +![Comment states](_img/12_02_03.png) + +And, in place of the simple Approved/Rejected voting choices, we have added more states to enable reviewers to provide more granular feedback. There are now two affirmative states: **Approved** and **Approved with Comments**, one neutral state: **No response**, and two negative states: **Code Not ReadyYet** and **Rejected**. Happy pull requesting. + +![Voting options](_img/12_02_04.png) + +##Taskboard changes + +We made three updates to the Taskboard this sprint that I want to call your attention to. First, we now auto-collapse completed stories/PBIs on your board so that you don’t have to collapse them manually each time you open the board. This should help bring attention to unfinished work and save you a few clicks. + +Second, we changed what happens when you move a story or PBI out of the current sprint and into a future sprint. Previously, all tasks including completed tasks were moved to the destination sprint. With today’s update, completed tasks are left in the sprint in which they were completed, and only tasks that are not finished are moved into the destination sprint. + +Finally, we changed the upper bound limit on the board from 500 items to 1000. We had a few of you telling us that you had boards with more than 500 tasks on them and were bumping into that upper bound. + +##Kanban board persisted column headers + +We’re starting in a on a bunch of improvements to our Kanban boards. Some of the initial ones are quite small, but they’re aimed at making the boards more usable. This sprint we made a simple change to keep the column headers in view when scrolling vertically. Stay tuned for more updates to the board in coming sprints. + +![Column headers persisted on Kanban boards](_img/12_02_05.png) + +##Sharing personal queries + +Finally, we’ve heard from many of you that it’s annoying that you can’t share ad hoc personal queries that live in your My Queries folder. It’s common to build a new query, save it to your My Queries folder, and then want to share it with someone on the team without having to pollute the Shared Queries folder. Now, you can just click the new **Copy query URL** command from your personal query and you’ll get a URL to the query that can be shared. Note that the URL will expire after 90 days. + +![Copying the query URL](_img/12_02_06.png) + +##Release Management Preview as Visual Studio Online service + +On November 12, we announced that Release Management is now available as a Visual Studio Online service as a Preview feature. With this, you can now configure [Release Management Update 4 client](http://go.microsoft.com/?linkid=9843000) to connect to a Visual Studio Online account. Once connected, you can and then [set up and manage releases to Azure](http://blogs.msdn.com/b/visualstudioalm/archive/2014/11/11/using-release-management-vso-service-to-manage-releases.aspx). + +![Connecting Release Management to a VSO account](_img/12_02_07.png) + +That’s it for this sprint. Keep all the feedback coming on [Twitter](https://twitter.com/VisualStudio) and [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso). + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2014/dec-17-team-services.md b/release-notes/2014/dec-17-team-services.md new file mode 100644 index 00000000000..f12e6077bd5 --- /dev/null +++ b/release-notes/2014/dec-17-team-services.md @@ -0,0 +1,91 @@ +--- +title: Quick code editing, backlog filtering, and more – Dec 17 +description: VSTS release notes for Decemeber 17 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: b3b83314-3e24-4e41-a94d-02fda9d458a4 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Quick code editing, backlog filtering, and more – Dec 17 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +Before we jump into the changes coming this week, I want to call out that this will be our last deployment of 2014. Our next sprint ends right in the middle of the holiday season, so we’ve chosen to skip that deployment. We’ll see you again in late January with our next update. Happy holidays everyone! + +##Quick code editing + +This sprint we added the ability to make a quick edit to a file in version control directly from your web browser and then commit those changes straight back to the service. When browsing a source file, you now have an Edit command that puts the file into editing mode. Changes can then be made inline, complete with color coding and formatting support. As soon as you click the Save command, we create a new commit/changeset with your changes. Use the diff view to see exactly what changes you’re making before committing the changes. If the file is a Markdown or HTML file, you can also preview your changes before you save them. + +![Quick code editing](_img/12_17_01.png) + +Not only can you edit files, but we also added the ability to add, delete and rename files directly from the web. To add a new file (or files), right-click a folder in your repository and select **Add file(s)**, enter your check-in/commit comment, and you’re ready to go. The days are gone when you have to download your entire codebase just to rename or delete a file! + +![Adding a file](_img/12_17_02.png) + +The new editing capabilities also show up in the **Welcome** hub, making it easy to create documentation for your projects. If you don't have a README.md file you can start with our template guide and commit your own. + +![Creating a README file](_img/12_17_03.png) + +We also enabled the ability to create links to existing (or new) markdown files by following the syntax in the screenshot below. Don’t worry if the page doesn’t exist, because you can edit and commit the new file when you click the link, wiki style. + +![Linking to a new page](_img/12_17_04.png) + +With these features we hope the creation and editing of your project documentation is easy and fast! + +##Filtering on backlogs and queries + +Today we turned on a new feature that lets you quickly filter backlogs and query results. On the toolbar you’ll notice a new filter textbox. Just type in text from the items you’re looking for… + +![Filtering backlogs and queries](_img/12_17_05.png) + +…and the backlog/result is immediately filtered to only show items with the matching text. This feature is really handy when you’re scanning a long backlog or query result for a specific item (or set of items). Note that the matching is done on data in the displayed columns—including tags. + +![Immediate filtering results](_img/12_17_06.png) + +While drag-and-drop reordering is disabled when filtering, the context menu on each item still lets you move an item to the top of your backlog or to a specific position. + +##Sprint backlog and task board improvements + +We made three usability updates to sprint backlogs and the task board. + +First, on all your sprint backlogs you can now drag and drop items to reorder and reparent. Just grab an item from the backlog and drop it in the correct location to reorder, and if you need to reparent a task, just grab it and drop it on the new parent. + +![Drag-and-drop reparenting](_img/12_17_07.png) + +The reparenting logic also works on the task board, making it easy to take a task from one story and move it to another. We also heard your feedback that you want a quick way to add items back to the product backlog, so we made sure you could drag stories from both the sprint backlog and task board directly to the product backlog (or any other sprint). + +![Reordering and reparenting on the task board](_img/12_17_08.png) + +And, you might have noticed in the screenshot above that we made a small change to show a summary of all work not started and in progress on collapsed stories. All these changes came directly from your feedback. We’re happy to mark them as complete on UserVoice. + +[https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2296825](https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2296825) + +[https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6769822](https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6769822) + +[https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6569087](https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6569087) + +##New integrations: Slack and Azuqua + +We are happy to announce two new integrations going live this sprint: Slack and Azuqua. [Slack](http://www.slack.com/) is a popular team collaboration service that helps teams be more productive by keeping all communications in one place (and easily searchable from virtually anywhere). [Azuqua](http://www.azuqua.com/) enables regular users to wire together complex business processes across multiple cloud services, including Facebook, Twitter, and Jira, without writing any code. + +To learn more about these and the 20+ other integrations, visit [Visual Studio Online Integrations](https://www.visualstudio.com/en-us/explore/vso-integrations-directory-vs). + +##Preview APIs for adding and updating files in source control + +REST APIs for adding, editing, renaming, and deleting files in TF Version Control and Git projects are now available for preview. These JSON-based APIs (which are used by the new quick code editing feature) enable you to create Changeset and Push resources via POST operations. For Git, you can add and update files in an existing branch or create a new branch. You can also rename, move, and delete files. One limitation, which will be addressed in the next deployment, is that these APIs are currently only callable when using basic authentication (not OAuth). + +To learn more about these APIs, see [Visual Studio Online REST API Versions and History](https://www.visualstudio.com/en-us/integrate/get-started/get-started-rest-versions-vsi). + +##CodeLens for Visual Studio Online in Preview + +Finally, we turned on the CodeLens feature for all Visual Studio Online accounts with today’s deployment. If you’re not familiar with CodeLens, head over to our [devops blog](http://blogs.msdn.com/b/visualstudioalm/archive/2014/12/11/codelens-in-visual-studio-online-is-now-in-public-preview.aspx) to read about how you can start using it. + +That’s a wrap for this sprint and for the 2014 calendar year. If you’re ever interested in looking back over the changes we’ve made in the last year, visit our [features timeline](https://www.visualstudio.com/en-us/articles/news/features-timeline), where we catalog all the updates to the service and map them to on-premise updates of Team Foundation Server. Thank you. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2014/feb-10-team-services.md b/release-notes/2014/feb-10-team-services.md new file mode 100644 index 00000000000..d02c0963d11 --- /dev/null +++ b/release-notes/2014/feb-10-team-services.md @@ -0,0 +1,31 @@ +--- +title: Visual Studio Online updates - Feb 10 +description: VSTS release notes for February 10 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 31b56eea-567c-4296-aa78-29cf0065ce87 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates - Feb 10 + +##Exporting test artifacts + +With today’s update, you can now export test plans, test suites, and test cases along with their respective properties. Having this capability allows you to easily share test artifacts with stakeholders who do not have access to the Test hub in Visual Studio Online. To make use of the feature, simply right-click on any suite and click **Export**. Choose the artifacts and properties you want to export and then click **Email** or **Print**. + +![Export Test Artifacts](_img/2_10_01.png) + +##New “create tags” permission + +We’ve also surfaced a new permission that allows you to manage who can create new work item tags in your project. This permission, named “Create tag definition,” limits who can add new tags into the system. Users without this permission can still adorn work items with existing tags. This capability gives you the ability to manage your tag cloud by not allowing every user to create new ad-hoc tags. + +![Tag Permission](_img/2_10_02.png) + +We’re always anxious to hear your feedback. Let us know how we’re doing at [http://www.visualstudio.com/support/support-overview-vs](https://www.visualstudio.com/support/support-overview-vs). + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2014/feb-28-team-services.md b/release-notes/2014/feb-28-team-services.md new file mode 100644 index 00000000000..0c51d432919 --- /dev/null +++ b/release-notes/2014/feb-28-team-services.md @@ -0,0 +1,37 @@ +--- +title: Visual Studio Online updates - Feb 28 +description: VSTS release notes for February 28 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 6b3bfa29-ef59-4d97-85cb-f604e6ba9052 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates - Feb 28 + +Today’s update delivers some nice capabilities for teams developing Java projects on Visual Studio Online. This update coincides with the release of [Team Explorer Everywhere 2013 Update 1](https://www.microsoft.com/en-us/download/details.aspx?id=40785). The combination together enable more options for where you can build and manage Java. The key service-specific highlights are described below. See [Brian Harry's blog](http://blogs.msdn.com/b/bharry/) to learn more about how to start using some of these new features. + +##Build support for Java code managed in Git + +With today’s update, Java code managed in a Git repository on Visual Studio Online can be built on the hosted build controller using Ant or Maven. Prior to this, only Java code in Team Foundation Version Control (TF VC) projects could be built. Team Explorer Everywhere 2013 Update 1 provides support for creating a build definition for Git-based projects, and just like with a .NET build defined in Visual Studio, you can control how the build is triggered and, in the case of Continuous Integration (CI), you can control what branches a code push will trigger a build on. + +![Build support for Java code managed in Git](_img/2_28_01.png) + +##Java JDK, Ant, and Maven libraries preinstalled in hosted build + +The latest versions of the Oracle Java JDK, Apache Ant, and Apache Maven libraries are now available on the hosted build controller and no longer need to be checked into version control. This greatly simplifies the setup process for new Java builds and speeds up build time due to these libraries not needing to be extracted on every build. + +For existing small and medium Java projects being built on the service today, a noticeable improvement in build time should be seen once you update your build definitions and exclude the Java JDK and Ant libraries from the build workspace and remove the ANTServerPath and JavaServerPath properties from your tfsbuild.proj files. + +##Maven support for TF version control projects + +Maven can now be used to build Java projects managed in TF VC projects on Visual Studio Online. Previously, the only build technology option available for Java projects on a hosted build controller was Ant. + +To learn more about setting up a build for Java project on Visual Studio Online, see the Build your Eclipse projects page on the Get Started area of visualstudio.com. + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2014/jan-22-team-services.md b/release-notes/2014/jan-22-team-services.md new file mode 100644 index 00000000000..6dd5aaa2703 --- /dev/null +++ b/release-notes/2014/jan-22-team-services.md @@ -0,0 +1,40 @@ +--- +title: Visual Studio Online updates – Jan 22 +description: VSTS release notes for January 21 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 6ca7d730-1127-4b8f-8fa6-8357f999ac0f +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates – Jan 22 + +We’re back from the New Year and excited to talk about a few improvements to the service. + +##Querying tags + +The first change I want to highlight is that we’ve enabled the ability to query work item tags. Tags are an easy and effective way to “mark up” work items with additional meta-data. However, without the ability to write and save queries that leverage those tags, they’re just not as useful as they could be. Today’s update changes all that. The tags field appears in the work item query editor just like other fields and works with the **Contains ** and **Does Not Contain** operators. These operators use whole word matching (not case sensitive), and will return exact matches only. For example, if you create a query that looks for work items with the tag “Website”, your search will return "Website" tags, but not tags like "Website Related". + +![Screenshot of querying tags interface](_img/1_22_01.png) + +##Removing weekends from the Burndown + +We’ve added a new team configuration setting that enables you to specify the working days for your teams – effectively giving you the ability to remove those pesky weekend days from your burndown charts. If you follow us on [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) you know that this particular item is near the top of the list of things you’ve told us you can’t live without. Each team in your project controls this setting independently to enable teams in different geos to work more effectively in the same team project. + +![Screenshot of working days interface](_img/1_22_02.png) + +##Configurable CFD dates + +Finally, we’ve added a new start date property to the continuous flow diagram (CFD) on your product backlog. Previously the start date was hard coded to the day you created your team project. We’ve found that people often create their projects before they start “working” and were frustrated that their cumulative flow diagrams always started with a long “inactive” period. Click the ellipsis in the top right hand corner of the chart to add a custom start date. + +![Screenshot of start date property interface](_img/1_22_03.png) + +That’s it for this sprint. + +Thanks, + +Aaron Bjork + diff --git a/release-notes/2014/jul-01-team-services.md b/release-notes/2014/jul-01-team-services.md new file mode 100644 index 00000000000..7a354a916bc --- /dev/null +++ b/release-notes/2014/jul-01-team-services.md @@ -0,0 +1,49 @@ +--- +title: Visual Studio Online Updates - Jul 1 +description: VSTS release notes for July 1 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: eba4333e-0b1c-4f8a-9465-842eecb18210 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates – Jul 1 + +We’re back this week with a few usability improvements for backlogs and a shiny new REST API and service hook for pull requests. + +##Hiding work in progress on the backlog + +Last year we made a change to the product backlog functionality so that work in progress would remain on the backlog until finished. The change was in response to customer feedback, but unfortunately our fix created a brand-new issue for teams that don’t want to see work in progress. Today’s update gets it right by making the view configurable through a simple switch at the top of the backlog that toggles the display of work in progress on and off. The backlog will persist your last setting, so you can set the configuration that works for you and be done. + +![Hiding work in progress on the backlog](_img/7_1_01.png) + +##full Screen on the backlog and boards + +We’ve heard from many of you that the ability to hide all the chrome in the UI and have full-screen views of the backlog and boards is helpful, especially in scenarios where you’re running a daily standup or viewing large backlogs. Today’s update includes a toggle to enter “full screen mode” for all the pages under the Backlogs hub. Enjoy the screen real estate! + +![Full screen view on the backlog](_img/7_1_02.png) + +##Move to position on the backlog + +And, we’ve implemented a handy new context menu feature that lets you move an item on your backlog directly to the top or to a specific position on the backlog. This is especially nice when dealing with longer backlogs where drag-and-drop isn’t as convenient. Click the small arrow on a selected item in your backlog, or right-click with your mouse to access the new functionality. Along with this change, we removed from the work item forms the actual number that’s used for backlog ordering. + +![Move to position on the backlog](_img/7_1_03.png) + +##REST APIs and service hook support for pull requests + +Finally, you can now create, update, delete, query, and manage reviewers and votes for Pull Requests programmatically using the new [Pull Requests REST APIs](https://www.visualstudio.com/integrate/reference/reference-vso-git-pullrequests-vsi). With the addition of service hook event support for pull requests, your applications and services can get notified when pull requests are created or updated. For example, if your team is using a third-party collaboration service like Kato, HipChat, Flowdock, or Campfire, you can configure service hook subscriptions to post important events to that service (such as when a Pull Request is opened against your team’s repository). To learn more about enabling integration between your Visual Studio Online projects and custom and third-party services, see [Integrate with other services](https://www.visualstudio.com/get-started/integrating-with-service-hooks-vs). + +That’s it for this sprint. Let us know how we’re doing on [Twitter](https://twitter.com/VisualStudio) and [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso). + +Thanks, + +Aaron Bjork + + + + + + diff --git a/release-notes/2014/jul-21-team-services.md b/release-notes/2014/jul-21-team-services.md new file mode 100644 index 00000000000..f8cd6de5028 --- /dev/null +++ b/release-notes/2014/jul-21-team-services.md @@ -0,0 +1,74 @@ +--- +title: Visual Studio Online Updates - Jul 21 +description: VSTS release notes for July 21 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: edebda1d-d3f2-4c89-9f3b-7f2b5712a397 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online Updates - Jul 21 + +We have lots to share with you in this week’s deployment. So let’s get into it… + +##Using corporate identities with existing accounts + +A [popular request](http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2605763-adfs-federated-authentication-for-visual-studio-on) for the service has been corporate identity (Active Directory) support for accounts. A [couple of releases ago](may-20-team-services.md) we added the ability to create a new account and connect it to a directory. With this release you can now add a directory to your **existing** Visual Studio Online account. + +Some of the key benefits of connecting a directory to your account include the ability to: leverage centralized identity management, enable single sign-on across cloud services, enforce multi-factor authentication, and integrate with an on-premises Active Directory. When you connect your account to a directory, we preserve your team members’ work item history and links, team memberships, and user plan. + +To get going, head over to the Azure Management portal, link your account, and navigate to the Configure tab, where you set up the directory connection. This feature is in preview, so to activate it you must request access. We are approving these requests quickly and you will receive an email once you have been given access. + +![Your account is connected to your directory](_img/7_21_01.png) + +We have updated our getting started documentation for organizational access to help you get going. + +[Manage Organizational Access for your account](https://www.visualstudio.com/get-started/manage-organization-access-for-your-account-vs) + +##Viewing existing projects in the Azure Preview Portal + +At Build, the new Azure Preview portal was launched ([portal.azure.com](http://portal.azure.com/)). Brian has a [blog post](http://blogs.msdn.com/b/bharry/archive/2014/04/03/visual-studio-online-integration-in-the-azure-portal.aspx) covering the integration with Visual Studio Online. Up until now you could only use the Preview Portal with VS Online accounts created from the Preview portal itself. With this release, you can use your existing VS Online account and team projects as well. To get going, link your account to the Azure Management portal and add corporate identity support to it as outlined above. In the portal you can experience some of DevOps and cloud development scenarios we have enabled. This is just a start and there are many gaps, so we’d love to get your [feedback](http://feedback.azure.com/forums/223579-windows-azure-portal-preview) to help us shape what we do next. + +![Viewing existing projects in the Azure Preview Portal](_img/7_21_02.png) + +##Trend charts + aggregation + +We’ve also enabled a new feature to create trend charts and do aggregation on work item queries. When you create a new work item chart, you’ll see three new chart types: Stacked Area, Area, and Line. These charts allow you to create trends across a one-week, two-week, or four-week time range. In addition, you can now sum a field value across work items returned in the query instead of just doing counts. Just like other charts, these new chart types can be pinned to your home pages to create rich team and project dashboards. + +![create trends across a one-week, two-week, or four-week time range](_img/7_21_03.png) + +##Test Hub added to the Advanced License + +Brian [recently shared](http://blogs.msdn.com/b/bharry/archive/2014/07/09/upcoming-vs-online-licensing-changes.aspx) some licensing changes we are making in VS Online. Effective today, we are including web-based test case management (the Test Hub) for users with an Advanced license. As before, users with Visual Studio Test Professional with MSDN, Visual Studio Premium with MSDN and Visual Studio Ultimate with MSDN licenses will continue to have access to test management capabilities on Visual Studio Online. This change is something many of you asked for we hope you like it! The Stakeholder licensing changes Brian talked about will be coming in a future service update. + +##Deleting your account + +In this sprint we also added the ability for an account owner to [delete their account](https://www.visualstudio.com/get-started/delete-your-account-vs). Simply navigate to account settings in the collection administration page. From there, select delete account and follow the instructions. **WARNING:** when you delete an account, it will be disabled and all users of the account will lose access immediately. If you have set up billing, it will be discontinued after the current billing cycle. All metered services like builds and load test runs will be stopped immediately. Your account will then be in this state for 90 days, after which it will be deleted permanently. If at any point during this time, you need to recover the account, you can [contact support](https://www.visualstudio.com/en-us/support/cloud-services-assisted-support-vs) to re-enable the account. + +![Delete your account](_img/7_21_04.png) + +That’s the list for sprint 68. As Brian mentioned in [his blog](http://blogs.msdn.com/b/bharry/archive/2014/05/01/visual-studio-online-update-may-1st.aspx), the Visual Studio Online deployments are an event that takes a few days. Depending on your account, you may not see these new features until the deployment is complete. You can find the latest status of the deployment on the [Support](https://www.visualstudio.com/support/support-overview-vs) page. Remember to visit our [User Voice](https://visualstudio.uservoice.com/forums/330519-vso) site to give us feedback on our priorities and investments. + +Thank you! + +Sean McBreen + + + + + + + + + + + + + + + + + diff --git a/release-notes/2014/jun-10-team-services.md b/release-notes/2014/jun-10-team-services.md new file mode 100644 index 00000000000..0ea401ee9a0 --- /dev/null +++ b/release-notes/2014/jun-10-team-services.md @@ -0,0 +1,26 @@ +--- +title: Visual Studio Online Updates - Jun 10 +description: VSTS release notes for June 10 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: cf8a4f31-2f47-44ee-8014-6a435f273ebb +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates – Jun 10 + +##Review and Merge code with Pull Requests + +Pull Requests have been one of the top [customer requests](https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3891599-tfservice-git-pull-requests) for Git projects since we enabled Git on Visual Studio Online. With today’s update, developers can now use Pull Requests to help review and merge their code. Pull Requests enable developers working in topic branches to get feedback on their changes from other developers prior to submitting the code into the mainline. Any developer participating in the review can see the code changes, leave comments in the code, and give a “thumbs up” approval if they’re satisfied with those changes. For many teams, Pull Requests are a critical component of the developer workflow in Git, and we’re excited to finally bring that experience to Visual Studio Online. + +![Pull Requests](_img/6_10_01.png) + +You can learn more about Pull Requests on the [Visual Studio devops blog](http://go.microsoft.com/fwlink/?prd=12493&pver=1.0&sbp=TFS&plcid=0x409&clcid=0x409&ar=VC&sar=Pull%20Request). + +Thanks, + +Matt Mitrik + diff --git a/release-notes/2014/mar-18-team-services.md b/release-notes/2014/mar-18-team-services.md new file mode 100644 index 00000000000..0418729d2f8 --- /dev/null +++ b/release-notes/2014/mar-18-team-services.md @@ -0,0 +1,31 @@ +--- +title: Visual Studio Online updates - Mar 18 +description: VSTS release notes for March 18 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: b8c94e45-6582-474c-9fc9-2706dc40bc01 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates - Mar 18 + +##Getting started with Application Insights + +The first change in today’s update is an improved getting started experience for first time users of Application Insights. The steps necessary to set up monitoring for a website are now dramatically simpler—just enter the name of your application and a URL to the actual site, and you’re ready to go. We also modified the default failure notification rules to email you directly when the website is unavailable or nonresponsive. + +![Getting started](_img/3_18_01.png) + +##Search across your application trace logs + +Today’s update also includes a new trace log search feature. If your application uses Log4Net, NLog or Trace Listener, you can configure your app to use search. To make use of the feature, select **Search** under the **Diagnostics** Hub. The configuration page helps you configure and instrument your app quickly for telemetry collection. + +![Search across trace logs](_img/3_18_02.png) + +We are anxious to hear your feedback. Let us know how we’re doing at [http://www.visualstudio.com/support](https://www.visualstudio.com/support). + +Thanks, + +Victor Mushkatin \ No newline at end of file diff --git a/release-notes/2014/may-12-team-services.md b/release-notes/2014/may-12-team-services.md new file mode 100644 index 00000000000..e2da3cb82ec --- /dev/null +++ b/release-notes/2014/may-12-team-services.md @@ -0,0 +1,91 @@ +--- +title: Visual Studio Online Updates - May 12 +description: VSTS release notes for May 12 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: c2b37732-0483-4345-9832-b0cda35b8c5e +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates – May 12 + +##Integrate with Visual Studio Online + +Today we are releasing a preview of a new way to extend and integrate with Visual Studio Online using REST, OAuth, and service hooks. With this deployment you can: + +-Integrate with many of the most popular cloud services; such as Trello, Campfire, Github, UserVoice, Zendesk and many more +-Develop custom apps and services that extend the power of Visual Studio Online + +You can find more information about the types of scenarios now possible at our [Visual Studio Online Integration](https://www.visualstudio.com/integrate/explore/explore-vso-vsi) hub. + +###REST APIs + +Our JSON REST APIs enable a lightweight way to work with Visual Studio Online from virtually any device, platform, or technology stack, including Windows, Android, iOS, Node.js, and others. You can create and query work items, queue a build, get recent team room messages, access source code, and accomplish almost any team or code management task. + +[Learn the basics](https://www.visualstudio.com/integrate/get-started/get-started-rest-basics-vsi) + +[Explore the APIs](https://www.visualstudio.com/integrate/reference/reference-vso-overview-vsi) + +###Authorization + +With OAuth 2.0 support in Visual Studio Online, now you can safely access information and perform operations on Visual Studio Online on behalf of a user. OAuth enables users to safely grant your app or service access to their resources. + +[Authorizing with OAuth](https://www.visualstudio.com/integrate/get-started/get-started-auth-oauth2-vsi) + +[Registering your app](https://app.vssps.visualstudio.com/app/register?_ga=1.9631093.1191187031.1470846728) + +###Service Hooks + +Service hooks let your app or service get notified instantly when an event happens in Visual Studio Online. With service hooks your app or service can avoid continuously polling to check for changes, such as completed builds, commits/checkins, or work item changes. This enables powerful integration scenarios where Visual Studio online can inform another service of a change, enabling the use of both services together. + +There are three options for receiving events: + +1.Use a generic web hook. +2.Use one of the service hooks built for a specific service. An initial set are provided as part of this release. More will be added over time and we will be enabling third-party service hook submission in the future. +3.Use [Zapier](http://www.zapier.com/) to link a Visual Studio Online service hook to another service that Zapier supports. Look for Visual Studio Online in Zapier’s service list. +Services hooks can be found as a new hub in project administration. + +![Selecting a target service](_img/5_12_01.png) + +[Learn more](https://www.visualstudio.com/get-started/integrate/integrating-with-service-hooks-vs) + +[Creating subscriptions programmatically](https://www.visualstudio.com/integrate/reference/reference-vso-hooks-subscriptions-vsi) + +[Supported events](https://www.visualstudio.com/integrate/get-started/get-started-service-hooks-events-vsi) + +###Extensibility Preview + +re anxious to get your feedback and officially release them. While in preview, the REST APIs may change. You can protect yourself by ensuring you pass the appropriate version as part of your requests. As these features evolve in preview, you will have time to migrate forward. For more information, see [Get started with the REST APIs](https://msdn.microsoft.com/library/bb165336.aspx). + +Give it a try. We can’t wait to see what you come up with. + +##Service Migration with OpsHub + +Since we launched Visual Studio Online, many of our on-premises Team Foundation Server customers who have loved used TFS have wanted to start using Visual Studio Online. One of the things customers have asked us to help them with for that transition is to be able to migrate their work items, test cases, test results, and source code files in version control repositories. Today, we’re happy to announce a free migration utility that we have partnered with OpsHub to create that will help you with a one-way migration of the most commonly requested artifacts in TFS to bring them to your Visual Studio Online account. You can now find it on the [Visual Studio Gallery](http://aka.ms/OpsHubVSOMigrationUtility): + +![Service Migration Utility](_img/5_12_02.png) + +The migration utility will take you through a step-by-step process for mapping your team projects in Team Foundation Server on-premises to Visual Studio Online team projects. Team projects using standard process templates from TFS 2010, TFS 2012, and TFS 2013 are supported with this free migration utility, and you do not need to have upgraded the process templates used by the team projects or upgrade to the latest version of TFS 2013 to use the utility. Once you are finished migrating to Visual Studio Online, you’ll be on our latest version, able to take advantage of all of the latest features automatically! + +We suggest you test out your migration before having your team come on board. You’ll want to get a sense of how long your migration will take, see whether you run into any issues to be addressed, and give yourself a chance to inspect the test migration after it is finished. You can always [delete the team project](http://blogs.msdn.com/b/buckh/archive/2013/09/13/how-to-delete-a-team-project-from-team-foundation-service.aspx) in Visual Studio Online and run the migration utility as many times as you need to until you are satisfied with your migration plan. + +For those with more advanced scenarios, such as integrating or synchronizing TFS and Visual Studio Online with other devops tools (HP devops/Quality Center, IBM Rational, Atlassian Jira, etc.) and enable customized business rules during the migration with customized process templates, OpsHub also has a commercially available offering to help: the [OpsHub Integration Platform](http://aka.ms/OpsHub). Also, keep in mind some data will ultimately not be migrated with this free utility, such as builds, team room history, lab management environments, team and personal favorites, work item queries, alerts, security and permissions, team settings, and other types of data. You’ll want to keep backup copies of your Team Foundation Server databases around in case you need data that isn’t migrated. + +If you have any additional questions, the OpsHub team will be monitoring for questions marked with the OpsHub and visual-studio-online tags on [StackOverflow](http://stackoverflow.com/questions/tagged/visual-studio-online)! + +Thanks, + +Will Smythe + + + + + + + + + + diff --git a/release-notes/2014/may-20-team-services.md b/release-notes/2014/may-20-team-services.md new file mode 100644 index 00000000000..3bc27fb0820 --- /dev/null +++ b/release-notes/2014/may-20-team-services.md @@ -0,0 +1,87 @@ +--- +title: Visual Studio Online Updates - May 20 +description: VSTS release notes for May 20 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 764a35d1-3785-45ef-b339-8c2714b4f836 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Visual Studio Online updates – May 20 + +##Using corporate identities + +For a while now, one of the [top customer requests](http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2605763-adfs-federated-authentication-for-visual-studio-on) for Visual Studio Online has been the ability to connect with corporate (Active Directory) identities rather than Microsoft accounts (Live IDs). Today we are taking an important next step on that journey. With this deployment you can now create a new Visual Studio Online account linked to an Azure Active Directory (AAD) tenant. Linking to an Azure Active Directory allows customers to centralize identity management, enable single sign-on across a broad array of cloud services, enforce multi-factor authentication and integrate with an on-premises Active Directory. This also allows you to use the same identity management across your Office 365 deployment and Visual Studio Online. + +**Important:** Unfortunately, we do not yet support linking an existing VS Online account to AAD, and therefore there’s no way to use your AD credentials to log into an account you’ve already created. However, that scenario is next on our list and we are hard at work and will enable it as soon as we can. + +[Find out more about Azure Active Directory](http://azure.microsoft.com/en-us/documentation/services/active-directory/) + +###Create a new account and connect it to Azure Active Directory + +You can create a new account linked to an AAD tenant either from within the Azure portal or from the Visual Studio Online account creation experience. We’ve provided a [tutorial](https://www.visualstudio.com/en-us/get-started/connect-to-vs) on how to do it. + +![Logging into VS Online](_img/5_20_01.png) + +Once created, everything that you can do with a Visual Studio Online account works as you would expect including full clients support: i.e., clients and tools that support Visual Studio Online can connect to AAD-backed accounts. One nice thing about Azure Active Directory is that it supports linking to other AAD tenants and “external users” for enabling Microsoft account (Live ID) access to your AAD—meaning that it’s easy for you to work with people outside your organization by linking them to your AAD tenant but still maintaining central control. + +It’s also possible to create an Azure Active Directory–connected Visual Studio Online account from the Azure Management Portal: + +![Azure Management Portal](_img/5_20_02.png) + +If you want to find out more, head over to: + +[Connecting to an Azure Active Directory based account](https://www.visualstudio.com/en-us/get-started/connect-to-vs) + +###Leverage your MSDN Visual Studio Online benefit with organizational credentials + +One benefit of an MSDN subscription is access to Visual Studio Online accounts. However, MSDN subscriptions require sign-in with a Microsoft account (Live ID). With the introduction of Azure Active Directory support for VS Online, we’ve added the ability to associate your Visual Studio Online MSDN benefit with work or school account, enabling you to get VS Online “credit” for your MSDN subscription when you log into VS Online with those credentials. + +![Accessing VS Online from My Account on MSDN Subscriptions](_img/5_20_03.png) + +[Associating your Visual Studio Online benefit with a work account](https://msdn.microsoft.com/subscriptions/dn531048.aspx) + +[Which MSDN Subscriptions include the Visual Studio Online benefit](https://www.visualstudio.com/en-us/get-started/assign-licenses-to-users-vs#EligibleMSDNSubscriptions) + +##Copy/Paste Shared Parameter Data between VS Online and Excel + +With [Shared Parameters for Test Cases](apr-03-team-services.md), we introduced the ability to share test parameter data across test cases. You could get started with shared parameters by authoring new data or converting existing local parameters to shared parameters, but importing existing data from sources such as Excel was not possible. To enable the import scenario, with this deployment, we are enabling copy-paste functionality from Excel to shared parameter grid and vice versa. You can also copy-paste parameter data across grids. + +![Copying and pasting shared parameters in Excel](_img/5_20_04.png) + +##End of data export period + +Finally, the window for data export functionality is coming to a close on **May 20 th, 2014**. As Brian detailed in his [blog post](http://blogs.msdn.com/b/bharry/archive/2014/02/21/vs-online-early-adopter-program-extended-to-may-7-2014.aspx), we scoped the capability, for now, to aiding people through the transition; but we will remain attentive to customer feedback in the space. Even though we are discontinuing high-fidelity data export, we still maintain the promise that your data is yours. If you cancel your account or need to get your data out, please feel free to use our TFS features and APIs to extract any and all of your data at any time. + +That’s the list for Sprint 65. As Brian mentioned in [his blog](http://blogs.msdn.com/b/bharry/archive/2014/05/01/visual-studio-online-update-may-1st.aspx), the Visual Studio Online deployments are an event that takes a few days. Depending on your account, you may not see these new features until the deployment is complete. You can find the latest status of the deployment on the [Support](https://www.visualstudio.com/support/support-overview-vs) page. Remember to visit our [User Voice](https://visualstudio.uservoice.com/forums/330519-vso) site to give us feedback on our priorities and investments. + +Thank you + +Sean McBreen + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/release-notes/2014/nov-04-team-services.md b/release-notes/2014/nov-04-team-services.md new file mode 100644 index 00000000000..b92e2839d37 --- /dev/null +++ b/release-notes/2014/nov-04-team-services.md @@ -0,0 +1,71 @@ +--- +title: Turn bugs on/off on your backlog – Nov 4 +description: VSTS release notes for November 04 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 31dc487d-11d6-4aea-9c4f-255b4bd61bf5 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Turn bugs on/off on your backlog – Nov 4 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +Lots to cover this sprint, so let’s jump right in… + +##Bugs on the backlog + +This one has been a long time coming, but you can now configure (per team) whether or not you want bugs to appear on your backlog. This setting was previously available through process template configuration (XML files) and only supported on-premises at the Team Project level. Today’s update brings this ability to **all** team projects and **all** teams regardless of process. If bugs are turned on, they’ll show up in your backlog alongside your User Stories, PBIs, and Requirements where they can be prioritized and assigned to sprints for decomposition. + +![Bugs displayed in the backlog](_img/11_04_01.png) + +Click the admin gear icon and navigate to the settings view for each team in your project to toggle bugs on or off. + +![Selecting bugs in project settings](_img/11_04_02.png) + +In future updates you can expect more configurations like these, including configuring how bugs appear on your sprint taskboards. Stay tuned. + +##Test execution charts + +We’ve extended our charting capability to include test artifacts in the Test hub. Each test plan now includes a prepackaged chart showing the progress of all tests in the plan, and of course you can create as many snapshot and trend charts as necessary to monitor and track your test authoring activity. Like all charts, test charts can be pinned to your team and project home pages for visibility and sharing. And in case you’re wondering, yes: even Stakeholders can view test charts pinned to the home page. We’ve got a detailed walkthrough in our [Get Started](https://www.visualstudio.com/get-started/track-test-status-vs) section where you can learn more. + +![Test execution chart](_img/11_04_03.png) + +##Recent test results + +When a test fails, it’s usually helpful to understand when it last passed, and possibly, on what configuration. With the **Recent test results** pane, you can browse the most recent test results associated with a test case for all configurations, across all test suites and test plans. Toggle on the **Test details** pane and pick **Test results** as your view. + +![Viewing test results](_img/11_04_04.png) + +##Preview Markdown and HTML files in Code Explorer + +When browsing Markdown files or HTML files in source control, it's often useful to see the rendered contents of those files rather than the raw source code. In this sprint we added the ability to show a preview of those files directly from the **Code Explorer**. Simply browse to any *.md file and the contents will be rendered as Markdown; or browse to any *.htm or *.html file to see a preview of the file. If you want to see the raw source code, you still can. Simply click on the new **Show raw content** button on the right of the toolbar. + +![Previewing a markdown file](_img/11_04_05.png) + +##Browse link dialog + +We’ve added a new dialog to all work item forms to aid in creating link relationships between existing work items. Prior to this change, you were forced to know the ID of the item you wanted to link to. Now you can select a query to browse, specify the ID(s), or search by title across the work item domain. + +![Browse link dialog](_img/11_04_06.png) + +##REST batch support + +The new batch endpoint for [REST APIs](https://www.visualstudio.com/integrate/reference/reference-vso-overview-vsi) lets you create and update multiple work items in a single call. For example, you can now change the states of a large number of work items or even create multiple work items and link them together, all in a single call. + +##Third-party OAuth scopes + +We’ve enhanced our third-party authorization support by adding new OAuth scope options. OAuth is an industry standard approach for authorizing third-party apps and services to access resources on a user’s behalf. Scopes control which resources and operations a third-party app or service has access to. Until now, Visual Studio Online supported just a single scope. This scope granted full read and write access to all resources and operations available via our REST APIs; this was overkill for many scenarios. We now offer 12 scopes. Each scope represents a logical bucket of capability. For example, **Work items (read)** provides read-only access to the work items and queries that the user has access to. Developers pick the scope(s) their app requires when they register their app with Visual Studio Online. These scopes are then presented to the user when authorization to that app is requested. + +![Authorize application dialog](_img/11_04_07.png) + +To learn more about Visual Studio Online authorization for third-party apps and services, see [Authorize access with OAuth 2.0](https://www.visualstudio.com/en-us/integrate/get-started/get-started-auth-oauth2-vsi). + +That’s it for Sprint 73. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2014/oct-14-team-services.md b/release-notes/2014/oct-14-team-services.md new file mode 100644 index 00000000000..c217d344e4a --- /dev/null +++ b/release-notes/2014/oct-14-team-services.md @@ -0,0 +1,39 @@ +--- +title: Test artifacts as work items – Oct 14 +description: VSTS release notes for October 14 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: cfb7eacd-1d58-492d-83a2-c645ceae76cf +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Test artifacts as work items – Oct 14 + +##Test artifacts as work items + +Work item based Test Plans and Test Suites, which were available with [TFS 2013 Update 3](http://blogs.msdn.com/b/bharry/archive/2014/05/30/visual-studio-team-foundation-server-2013-update-3-ctp1-vs-2013-3-1-if-you-wish.aspx), are now available on Visual Studio Online. Now that Test suites are work items you can assign owners to each suite and use the Summary field to capture important notes. Changes to Test Plans and Test Suites can be audited with work item history and permissions can be managed at a more granular level with the new **Manage Test Suites** permission. + +Have a look at the screenshots below. In the first you’ll see the test artifacts as displayed inside the Test hub. We’ve got a Test Plan (“Sprint 72 Tests”), two Test Suites (“Sprint 72 Tests”, and “98: Copy/paste the preserves HTML formatting”), and three associated Tests Cases. + +![Test artifacts as displayed in the Test hub](_img/10_14_01.png) + +And below you’ll see the new Test Suite work item opened directly from this view. + +![Test Suite work item opened directly from this view](_img/10_14_02.png) + +Do note that any changes you make to these work items, including destroy, will be reflected across all the associated test artifacts. You can read more about how these artifacts work together at our Get Started topic [Create a test plan](https://www.visualstudio.com/get-started/create-a-test-plan-vs). + +##Copy and paste query results + +It’s common to want to grab the results of a work item query and shoot them to a colleague for review. This sprint we added a new command that preserves the table formatting of query results when copying and pasting. The new **Copy as HTML** context menu option will preserve the table structure from your query result so you can paste it into an email or other document type. In the screenshot below I’ve copied results from a work item query and pasted them directly into a new email for easy sharing. + +![Work item query results pasted directly into a new email](_img/10_14_03.png) + +That’s it for this deployment. Keep the feedback coming on [Twitter](https://twitter.com/VisualStudio) and [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso). + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2014/oct-28-team-services.md b/release-notes/2014/oct-28-team-services.md new file mode 100644 index 00000000000..f2a4e63bfe5 --- /dev/null +++ b/release-notes/2014/oct-28-team-services.md @@ -0,0 +1,53 @@ +--- +title: European Datacenter & REST 1.0 - Oct 28 +description: VSTS release notes for October 28 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 7e1aadad-f21b-4243-9083-9b6c4f515eec +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#European Datacenter & REST 1.0 - Oct 28 + +##European Datacenter + +By popular demand, with today’s update, you can now create VS Online accounts in the Azure “West Europe” region, based in the Netherlands. You can get started by going to [http://visualstudio.com](http://visualstudio.com/) and creating a new account. The account creation page will auto detect the data center that’s nearest to you, or you can click the “change options” link to override the choice. + +![Creating a West Europe account](_img/10_28_01.png) + +When you locate an account in a region, all of the “account data” is limited to that region and does not leave. There is some data that is not limited to the region: our directory of accounts, user directory information, and some diagnostic and operational data are examples of things that are “global data” and not restricted only to the selected region. However, your source, work items, builds, and other data all will only exist in the selected region. There is currently no way to move an existing account from one region to another. Enabling this is the next thing on our list, but is likely to take a few months. + +Application Insights, which is still in preview, is not available in Europe, but will be by the time it officially releases. + +We plan to add additional regions around the world, but have not finalized the roadmap. Feel free to use [http://visualstudio.uservoice.com](http://visualstudio.uservoice.com/) to tell us where the next region should be. + +##Visual Studio Online REST API version 1.0 is here + +In May, we announced the public preview of a new set of REST APIs for Visual Studio Online. Today, we are happy to announce that these APIs have graduated to 1.0 release status. This marks an important milestone in our journey to support easier integration between Visual Studio Online and other services, including your own custom tools and services. + +The 1.0 designation means we have locked these APIs from any breaking changes going forward. As a developer, this means you can bind your app to the 1.0 API version and sleep well at night knowing future Visual Studio Online deployments won’t break your app. + +Although the 1.0 set is locked from a breaking change standpoint, it is not locked from a feature standpoint. New APIs can be added to the 1.0 set and nonbreaking enhancements may even be introduced to APIs already released. A few existing preview APIs (like Git Pull Requests) remain in preview today, but will eventually graduate into the 1.0 set (this is mainly due to significant changes coming soon). + +To learn more about how to use the APIs, check out [Get started with the REST APIs](https://www.visualstudio.com/integrate/get-started/get-started-rest-basics-vsi). + +To explore the available APIs, see the [Visual Studio Online REST API Reference](https://www.visualstudio.com/integrate/reference/reference-vso-overview-vsi). + +**Developers with existing apps using the 1.0 preview APIs:** you should start migrating to the release 1.0 APIs as soon as possible. Graduated preview APIs (any API in the 1.0 set) are subject to stop working in 12 weeks from today. To learn more about versioning and migrating, see the [versioning and migration](https://www.visualstudio.com/en-us/integrate/get-started/get-started-rest-versions-vsi) page. + +##Service hooks is out of preview + +I am also happy to announce that the service hooks features is out of preview and is a fully supported feature of Visual Studio Online. Service hooks let your app or service get notified instantly when an event happens in Visual Studio Online. With service hooks your app or service can avoid continuously polling to check for changes, such as completed builds, commits or check-ins, or work item changes. + +Visual Studio Online supports 14 services out of the box, including Trello, UserVoice, HipChat, AppVeyor, MyGet, Flowdock, Zendesk, Kato, Zapier, Campfire, Azure, and more. You can also use service hooks with your own custom solutions, enabling your solutions to react efficiently when events happen in your Visual Studio Online projects. + +To learn more about service hooks and the services with which you can integrate out of the box, visit [Integrate with other services](https://www.visualstudio.com/get-started/integrating-with-service-hooks-vs). + +Keep all the great feedback coming on [Twitter](https://twitter.com/VisualStudio) and [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso). + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2014/sep-04-team-services.md b/release-notes/2014/sep-04-team-services.md new file mode 100644 index 00000000000..c01cf0fba9a --- /dev/null +++ b/release-notes/2014/sep-04-team-services.md @@ -0,0 +1,78 @@ +--- +title: Query usability, Hubot, new charts, and more - Sep 4 +description: VSTS release notes for September 04 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 9d658d0e-70f2-4703-b4c1-5d36b5accd75 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Query usability, Hubot, new charts, and more - Sep 4 + +We've got lots of incremental improvements in today’s update. I’m not sure the best way to summarize them for you, so let’s just jump right in… + +##Work Item query improvements + +We made a bunch of incremental improvements around working with work items in the context of a query. The screenshot below highlights the changes you’ll see on a work item. + +-Email command allowing you to send a nicely formatted email directly from the work item form. +-A new toolbar command to return directly to the query result you navigated from. If you’re a keyboard shortcut enthusiast, we’ve hooked up this command to ALT+Q. And if you’re used to using browser commands, the browser back button will do the same thing without resetting your position in the query. +-Full screen mode is now enabled on all queries and on all work items. Just click the command in the toolbar to ditch all the chrome and maximize screen real estate. +-Additionally, we included a new right-click command on query results that allow you to open a work item in a new browser tab (not shown in the screenshot). + +![Return to Qureyr with Highlights](_img/9_04_01.png) + +##Quick search through tree controls + +Often when triaging or assigning work items it’s necessary to change the area and/or iteration path. However, it’s not uncommon for these trees to be deep and difficult to navigate. In this sprint we implemented an inline search that matches values in the tree as you type. In the screenshot below you can see that only the matching leaf values (and their parents) are being displayed as I type. + +![Area Path Search with Highlights](_img/9_04_02.png) + +##Longer trend charts + +We added two new chart durations to work item charts – **Last 12 weeks** and **Last year**. These charts don’t plot the data daily, instead they use the data from the first day of the week or month respectively. We’re keeping a close eye on these charts to ensure our sampling is correct, so let us know if these new options don’t match expectations or work well for your scenarios. + +![Charts with Highlights](_img/9_04_03.png) + +##More cards! + +We added a simple configuration to our Kanban board to let you increase the number of cards that show up in the first or last column on your boards. Before today’s change this number was capped at 20. Enjoy. + +![Kanban Cards with Highlight](_img/9_04_04.png) + +##Test Cases related to Test Suites + +It’s very common for test cases to end up belonging to more than one test suite. Because of this, you want to know the relationships a test case has before you start editing. Today’s deployment brings a new view that allows you to do just that. Simply change the pane filter to **Test Suite** and you’ll have visibility to all related test suites. + +![Test suites pane](_img/9_04_05.png) + +##WIT REST API v1.0 (preview 2) + +You all gave us a ton of feedback on our first preview of the v1.0 REST APIs that we've taken to heart and used to redesign our WIT API. Highlights include: + +-Easier to create and patch work items +-Easier to execute ad-hoc WIQL commands +-Enumeration of area and iterations +-New metadata APIs to enumerate work item types, link types, categories and fields +-Less verbose JSON objects + +[Documentation](https://www.visualstudio.com/integrate/reference/reference-vso-work-item-overview-vsi) has been updated so give it a try and let us know what you think. + +##Event and resource versioning within service hooks + +On a related note, for those of you building integrations with Visual Studio Online via service hooks, we now provide an advanced setting on the Web Hooks and Azure consumer services to let you (or your users) control what version of the WIT service hook events to receive—v1.1 or v1.2. This feature is useful in letting app developers control what version of WIT artifacts are delivered to their services when work item events happen in Visual Studio Online. Existing web hook subscriptions will continue to receive the v1.1 format. + +##Hello Hubot + +With the help of our community, we now have support for connecting Visual Studio Online Team Rooms to the popular, open source chat bot service [Hubot](https://github.com/github/hubot). Hubot integration helps improve productivity by making it simple to create work items, queue a build, recall what you last worked on, and more—all from within a Visual Studio Online team room. And with an extensible infrastructure, you can extend what your Hubot service can do by adding community or custom built scripts. Get started today by [setting up your own Hubot service](http://go.microsoft.com/fwlink/?LinkID=402677) that you can connect to your Team Rooms. + +![Hubot](_img/9_04_06.png) + +That’s it for this sprint. Keep all the great feedback coming on [Twitter](https://twitter.com/VisualStudio) and [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso). + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2014/sep-23-team-services.md b/release-notes/2014/sep-23-team-services.md new file mode 100644 index 00000000000..8b6b4be176c --- /dev/null +++ b/release-notes/2014/sep-23-team-services.md @@ -0,0 +1,41 @@ +--- +title: Work item improvements - Sep 23 +description: VSTS release notes for September 23 2014 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 2e03cd71-13f5-41d8-a82d-6ea1b4f66b6d +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Work item improvements - Sep 23 + +**Note**: The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +This week’s deployment has a few work items usability improvements I’m sure you’ll appreciate. Let’s take a look. + +##Maximizing text area fields + +We’ve added a new “maximize” command to all text area controls to help improve the readability and usability of long text fields. Whether you’re triaging a bug with an embedded stack trace or reviewing a backlog item with a lengthy description, it can be very frustrating to have to scroll within a tiny viewport to get the information you need. See the **Steps to Reproduce** field in the screenshot below. + +![new bug](_img/9_23_01.png) + +Today’s update adds a new maximize command to each text area control allowing you to expand the text area to fill your viewport for improved readability. Click it once to maximize, click it again or use the ESC key to return to the full work item view. + +![Full work item view](_img/9_23_02.png) + +##Navigating to links + +We also made a simple improvement to allow you to follow a hyperlink embedded in a text area control by holding down the CTRL key and clicking the link. Previously, you were forced to click the link and then select a “navigate to…” command at the top of the text area. Today’s change should feel much more natural and familiar. + +![Navigating to links](_img/9_23_03.png) + +##Work item performance improvements + +And last but not least, we made a few performance optimizations to ensure work items are loading fast. We changed our rendering logic to only load controls for the data present on screen, rather than rending and then hiding controls for data on additional tabs. We applied similar logic to the query tree folder. We now load the queries and folders progressively as you drill through, instead of loading the entire tree folder every time you navigate to the queries hub. If you have a very deep query folder tree with hundreds (if not thousands) or queries, you should notice a substantial improvement. That’s it for Sprint 71. Let us know what you think on [Twitter](https://twitter.com/VisualStudio) and [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso). + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2015/_img/10_30_01.png b/release-notes/2015/_img/10_30_01.png new file mode 100644 index 00000000000..672d7b65a20 Binary files /dev/null and b/release-notes/2015/_img/10_30_01.png differ diff --git a/release-notes/2015/_img/10_30_02.png b/release-notes/2015/_img/10_30_02.png new file mode 100644 index 00000000000..42ad46f97f6 Binary files /dev/null and b/release-notes/2015/_img/10_30_02.png differ diff --git a/release-notes/2015/_img/10_30_03.png b/release-notes/2015/_img/10_30_03.png new file mode 100644 index 00000000000..4364cebb6a4 Binary files /dev/null and b/release-notes/2015/_img/10_30_03.png differ diff --git a/release-notes/2015/_img/10_30_04.png b/release-notes/2015/_img/10_30_04.png new file mode 100644 index 00000000000..173042f9c0a Binary files /dev/null and b/release-notes/2015/_img/10_30_04.png differ diff --git a/release-notes/2015/_img/10_30_05.png b/release-notes/2015/_img/10_30_05.png new file mode 100644 index 00000000000..690e522dd1d Binary files /dev/null and b/release-notes/2015/_img/10_30_05.png differ diff --git a/release-notes/2015/_img/10_8_01.png b/release-notes/2015/_img/10_8_01.png new file mode 100644 index 00000000000..76b53b28d3a Binary files /dev/null and b/release-notes/2015/_img/10_8_01.png differ diff --git a/release-notes/2015/_img/10_8_02.png b/release-notes/2015/_img/10_8_02.png new file mode 100644 index 00000000000..871b3339e56 Binary files /dev/null and b/release-notes/2015/_img/10_8_02.png differ diff --git a/release-notes/2015/_img/10_8_03.png b/release-notes/2015/_img/10_8_03.png new file mode 100644 index 00000000000..ffd20b635ae Binary files /dev/null and b/release-notes/2015/_img/10_8_03.png differ diff --git a/release-notes/2015/_img/10_8_04.png b/release-notes/2015/_img/10_8_04.png new file mode 100644 index 00000000000..5a7ed056e95 Binary files /dev/null and b/release-notes/2015/_img/10_8_04.png differ diff --git a/release-notes/2015/_img/11_18_01.png b/release-notes/2015/_img/11_18_01.png new file mode 100644 index 00000000000..8401428383e Binary files /dev/null and b/release-notes/2015/_img/11_18_01.png differ diff --git a/release-notes/2015/_img/11_18_02.png b/release-notes/2015/_img/11_18_02.png new file mode 100644 index 00000000000..f65122cc1a8 Binary files /dev/null and b/release-notes/2015/_img/11_18_02.png differ diff --git a/release-notes/2015/_img/11_18_03.png b/release-notes/2015/_img/11_18_03.png new file mode 100644 index 00000000000..f21f19a3eb7 Binary files /dev/null and b/release-notes/2015/_img/11_18_03.png differ diff --git a/release-notes/2015/_img/11_18_04.png b/release-notes/2015/_img/11_18_04.png new file mode 100644 index 00000000000..300e6251486 Binary files /dev/null and b/release-notes/2015/_img/11_18_04.png differ diff --git a/release-notes/2015/_img/11_18_05.png b/release-notes/2015/_img/11_18_05.png new file mode 100644 index 00000000000..6a3fe4eea7b Binary files /dev/null and b/release-notes/2015/_img/11_18_05.png differ diff --git a/release-notes/2015/_img/11_24_01.png b/release-notes/2015/_img/11_24_01.png new file mode 100644 index 00000000000..5ae623a77b7 Binary files /dev/null and b/release-notes/2015/_img/11_24_01.png differ diff --git a/release-notes/2015/_img/11_24_02.png b/release-notes/2015/_img/11_24_02.png new file mode 100644 index 00000000000..d1870988311 Binary files /dev/null and b/release-notes/2015/_img/11_24_02.png differ diff --git a/release-notes/2015/_img/11_24_03.png b/release-notes/2015/_img/11_24_03.png new file mode 100644 index 00000000000..86e5f749150 Binary files /dev/null and b/release-notes/2015/_img/11_24_03.png differ diff --git a/release-notes/2015/_img/11_24_04.png b/release-notes/2015/_img/11_24_04.png new file mode 100644 index 00000000000..d77f1246116 Binary files /dev/null and b/release-notes/2015/_img/11_24_04.png differ diff --git a/release-notes/2015/_img/11_24_05.png b/release-notes/2015/_img/11_24_05.png new file mode 100644 index 00000000000..db135d28f2c Binary files /dev/null and b/release-notes/2015/_img/11_24_05.png differ diff --git a/release-notes/2015/_img/11_24_06.png b/release-notes/2015/_img/11_24_06.png new file mode 100644 index 00000000000..f9e9eb33cdd Binary files /dev/null and b/release-notes/2015/_img/11_24_06.png differ diff --git a/release-notes/2015/_img/12_10_01.png b/release-notes/2015/_img/12_10_01.png new file mode 100644 index 00000000000..724033a9fad Binary files /dev/null and b/release-notes/2015/_img/12_10_01.png differ diff --git a/release-notes/2015/_img/12_10_02.png b/release-notes/2015/_img/12_10_02.png new file mode 100644 index 00000000000..354b9cd1c14 Binary files /dev/null and b/release-notes/2015/_img/12_10_02.png differ diff --git a/release-notes/2015/_img/12_10_03.png b/release-notes/2015/_img/12_10_03.png new file mode 100644 index 00000000000..68011adeb09 Binary files /dev/null and b/release-notes/2015/_img/12_10_03.png differ diff --git a/release-notes/2015/_img/12_10_04.png b/release-notes/2015/_img/12_10_04.png new file mode 100644 index 00000000000..ce1dab52bc5 Binary files /dev/null and b/release-notes/2015/_img/12_10_04.png differ diff --git a/release-notes/2015/_img/12_10_05.png b/release-notes/2015/_img/12_10_05.png new file mode 100644 index 00000000000..e4b42e3062d Binary files /dev/null and b/release-notes/2015/_img/12_10_05.png differ diff --git a/release-notes/2015/_img/12_10_06.png b/release-notes/2015/_img/12_10_06.png new file mode 100644 index 00000000000..005098b19b9 Binary files /dev/null and b/release-notes/2015/_img/12_10_06.png differ diff --git a/release-notes/2015/_img/12_10_07.png b/release-notes/2015/_img/12_10_07.png new file mode 100644 index 00000000000..37fe515e461 Binary files /dev/null and b/release-notes/2015/_img/12_10_07.png differ diff --git a/release-notes/2015/_img/1_27_01.png b/release-notes/2015/_img/1_27_01.png new file mode 100644 index 00000000000..f877a71b2ff Binary files /dev/null and b/release-notes/2015/_img/1_27_01.png differ diff --git a/release-notes/2015/_img/1_27_02.png b/release-notes/2015/_img/1_27_02.png new file mode 100644 index 00000000000..6983e30086a Binary files /dev/null and b/release-notes/2015/_img/1_27_02.png differ diff --git a/release-notes/2015/_img/1_27_03.png b/release-notes/2015/_img/1_27_03.png new file mode 100644 index 00000000000..04f8d941a30 Binary files /dev/null and b/release-notes/2015/_img/1_27_03.png differ diff --git a/release-notes/2015/_img/2_18_01.png b/release-notes/2015/_img/2_18_01.png new file mode 100644 index 00000000000..7d72fcd9f2a Binary files /dev/null and b/release-notes/2015/_img/2_18_01.png differ diff --git a/release-notes/2015/_img/2_18_02.png b/release-notes/2015/_img/2_18_02.png new file mode 100644 index 00000000000..562c2259544 Binary files /dev/null and b/release-notes/2015/_img/2_18_02.png differ diff --git a/release-notes/2015/_img/2_18_03.png b/release-notes/2015/_img/2_18_03.png new file mode 100644 index 00000000000..659f48fc7db Binary files /dev/null and b/release-notes/2015/_img/2_18_03.png differ diff --git a/release-notes/2015/_img/2_18_04.png b/release-notes/2015/_img/2_18_04.png new file mode 100644 index 00000000000..53ccd4d4c1a Binary files /dev/null and b/release-notes/2015/_img/2_18_04.png differ diff --git a/release-notes/2015/_img/3_10_01.png b/release-notes/2015/_img/3_10_01.png new file mode 100644 index 00000000000..d5ce32eba0d Binary files /dev/null and b/release-notes/2015/_img/3_10_01.png differ diff --git a/release-notes/2015/_img/3_10_02.png b/release-notes/2015/_img/3_10_02.png new file mode 100644 index 00000000000..7b727ac179e Binary files /dev/null and b/release-notes/2015/_img/3_10_02.png differ diff --git a/release-notes/2015/_img/3_10_03.png b/release-notes/2015/_img/3_10_03.png new file mode 100644 index 00000000000..635489cc29d Binary files /dev/null and b/release-notes/2015/_img/3_10_03.png differ diff --git a/release-notes/2015/_img/3_10_04.png b/release-notes/2015/_img/3_10_04.png new file mode 100644 index 00000000000..f178433b8a1 Binary files /dev/null and b/release-notes/2015/_img/3_10_04.png differ diff --git a/release-notes/2015/_img/3_10_05.png b/release-notes/2015/_img/3_10_05.png new file mode 100644 index 00000000000..e1e3eb3fd7e Binary files /dev/null and b/release-notes/2015/_img/3_10_05.png differ diff --git a/release-notes/2015/_img/3_27_01.png b/release-notes/2015/_img/3_27_01.png new file mode 100644 index 00000000000..d2095e24ed7 Binary files /dev/null and b/release-notes/2015/_img/3_27_01.png differ diff --git a/release-notes/2015/_img/3_27_02.png b/release-notes/2015/_img/3_27_02.png new file mode 100644 index 00000000000..52ab724c354 Binary files /dev/null and b/release-notes/2015/_img/3_27_02.png differ diff --git a/release-notes/2015/_img/3_27_03.png b/release-notes/2015/_img/3_27_03.png new file mode 100644 index 00000000000..05718631263 Binary files /dev/null and b/release-notes/2015/_img/3_27_03.png differ diff --git a/release-notes/2015/_img/3_27_04.png b/release-notes/2015/_img/3_27_04.png new file mode 100644 index 00000000000..2ed6c384c67 Binary files /dev/null and b/release-notes/2015/_img/3_27_04.png differ diff --git a/release-notes/2015/_img/3_27_05.png b/release-notes/2015/_img/3_27_05.png new file mode 100644 index 00000000000..b9ecdd3b35e Binary files /dev/null and b/release-notes/2015/_img/3_27_05.png differ diff --git a/release-notes/2015/_img/4_10_01.png b/release-notes/2015/_img/4_10_01.png new file mode 100644 index 00000000000..082d8d719ac Binary files /dev/null and b/release-notes/2015/_img/4_10_01.png differ diff --git a/release-notes/2015/_img/4_10_02.png b/release-notes/2015/_img/4_10_02.png new file mode 100644 index 00000000000..a7d65527129 Binary files /dev/null and b/release-notes/2015/_img/4_10_02.png differ diff --git a/release-notes/2015/_img/4_10_03.png b/release-notes/2015/_img/4_10_03.png new file mode 100644 index 00000000000..e93c81b7377 Binary files /dev/null and b/release-notes/2015/_img/4_10_03.png differ diff --git a/release-notes/2015/_img/4_10_04.png b/release-notes/2015/_img/4_10_04.png new file mode 100644 index 00000000000..369f502b261 Binary files /dev/null and b/release-notes/2015/_img/4_10_04.png differ diff --git a/release-notes/2015/_img/4_10_05.png b/release-notes/2015/_img/4_10_05.png new file mode 100644 index 00000000000..18692f46463 Binary files /dev/null and b/release-notes/2015/_img/4_10_05.png differ diff --git a/release-notes/2015/_img/4_22_01.png b/release-notes/2015/_img/4_22_01.png new file mode 100644 index 00000000000..24c6cf8ac1c Binary files /dev/null and b/release-notes/2015/_img/4_22_01.png differ diff --git a/release-notes/2015/_img/4_22_02.png b/release-notes/2015/_img/4_22_02.png new file mode 100644 index 00000000000..160df7e502c Binary files /dev/null and b/release-notes/2015/_img/4_22_02.png differ diff --git a/release-notes/2015/_img/4_22_03.png b/release-notes/2015/_img/4_22_03.png new file mode 100644 index 00000000000..bcafeb729b6 Binary files /dev/null and b/release-notes/2015/_img/4_22_03.png differ diff --git a/release-notes/2015/_img/4_22_04.png b/release-notes/2015/_img/4_22_04.png new file mode 100644 index 00000000000..de61e262d80 Binary files /dev/null and b/release-notes/2015/_img/4_22_04.png differ diff --git a/release-notes/2015/_img/4_24_01.png b/release-notes/2015/_img/4_24_01.png new file mode 100644 index 00000000000..918b5291deb Binary files /dev/null and b/release-notes/2015/_img/4_24_01.png differ diff --git a/release-notes/2015/_img/4_27_01.png b/release-notes/2015/_img/4_27_01.png new file mode 100644 index 00000000000..99945bde5c7 Binary files /dev/null and b/release-notes/2015/_img/4_27_01.png differ diff --git a/release-notes/2015/_img/4_27_02.png b/release-notes/2015/_img/4_27_02.png new file mode 100644 index 00000000000..d21db75db0e Binary files /dev/null and b/release-notes/2015/_img/4_27_02.png differ diff --git a/release-notes/2015/_img/4_27_03.png b/release-notes/2015/_img/4_27_03.png new file mode 100644 index 00000000000..1d6f46bec16 Binary files /dev/null and b/release-notes/2015/_img/4_27_03.png differ diff --git a/release-notes/2015/_img/4_27_04.png b/release-notes/2015/_img/4_27_04.png new file mode 100644 index 00000000000..769cdd3828e Binary files /dev/null and b/release-notes/2015/_img/4_27_04.png differ diff --git a/release-notes/2015/_img/4_27_05.png b/release-notes/2015/_img/4_27_05.png new file mode 100644 index 00000000000..0442a3ca802 Binary files /dev/null and b/release-notes/2015/_img/4_27_05.png differ diff --git a/release-notes/2015/_img/4_27_06.png b/release-notes/2015/_img/4_27_06.png new file mode 100644 index 00000000000..fd812ee2d29 Binary files /dev/null and b/release-notes/2015/_img/4_27_06.png differ diff --git a/release-notes/2015/_img/5_11_01.png b/release-notes/2015/_img/5_11_01.png new file mode 100644 index 00000000000..99043d15bbe Binary files /dev/null and b/release-notes/2015/_img/5_11_01.png differ diff --git a/release-notes/2015/_img/5_11_02.png b/release-notes/2015/_img/5_11_02.png new file mode 100644 index 00000000000..5a856ce4e75 Binary files /dev/null and b/release-notes/2015/_img/5_11_02.png differ diff --git a/release-notes/2015/_img/5_11_03.png b/release-notes/2015/_img/5_11_03.png new file mode 100644 index 00000000000..57cbf50c880 Binary files /dev/null and b/release-notes/2015/_img/5_11_03.png differ diff --git a/release-notes/2015/_img/5_11_04.png b/release-notes/2015/_img/5_11_04.png new file mode 100644 index 00000000000..389e154f6ff Binary files /dev/null and b/release-notes/2015/_img/5_11_04.png differ diff --git a/release-notes/2015/_img/5_15_01.png b/release-notes/2015/_img/5_15_01.png new file mode 100644 index 00000000000..0fdc32bb6c4 Binary files /dev/null and b/release-notes/2015/_img/5_15_01.png differ diff --git a/release-notes/2015/_img/5_15_02.png b/release-notes/2015/_img/5_15_02.png new file mode 100644 index 00000000000..ec4d32a73b2 Binary files /dev/null and b/release-notes/2015/_img/5_15_02.png differ diff --git a/release-notes/2015/_img/5_15_03.png b/release-notes/2015/_img/5_15_03.png new file mode 100644 index 00000000000..608b2895866 Binary files /dev/null and b/release-notes/2015/_img/5_15_03.png differ diff --git a/release-notes/2015/_img/5_15_04.png b/release-notes/2015/_img/5_15_04.png new file mode 100644 index 00000000000..17fdcf3be27 Binary files /dev/null and b/release-notes/2015/_img/5_15_04.png differ diff --git a/release-notes/2015/_img/5_15_05.png b/release-notes/2015/_img/5_15_05.png new file mode 100644 index 00000000000..6d37dda0621 Binary files /dev/null and b/release-notes/2015/_img/5_15_05.png differ diff --git a/release-notes/2015/_img/5_15_06.png b/release-notes/2015/_img/5_15_06.png new file mode 100644 index 00000000000..83dd80d8100 Binary files /dev/null and b/release-notes/2015/_img/5_15_06.png differ diff --git a/release-notes/2015/_img/5_15_07.png b/release-notes/2015/_img/5_15_07.png new file mode 100644 index 00000000000..c4e16262b7d Binary files /dev/null and b/release-notes/2015/_img/5_15_07.png differ diff --git a/release-notes/2015/_img/5_15_08.png b/release-notes/2015/_img/5_15_08.png new file mode 100644 index 00000000000..2c178c3537f Binary files /dev/null and b/release-notes/2015/_img/5_15_08.png differ diff --git a/release-notes/2015/_img/5_15_09.png b/release-notes/2015/_img/5_15_09.png new file mode 100644 index 00000000000..6df7719d05f Binary files /dev/null and b/release-notes/2015/_img/5_15_09.png differ diff --git a/release-notes/2015/_img/6_3_01.png b/release-notes/2015/_img/6_3_01.png new file mode 100644 index 00000000000..a713282e3f7 Binary files /dev/null and b/release-notes/2015/_img/6_3_01.png differ diff --git a/release-notes/2015/_img/6_3_02.png b/release-notes/2015/_img/6_3_02.png new file mode 100644 index 00000000000..4581b624db8 Binary files /dev/null and b/release-notes/2015/_img/6_3_02.png differ diff --git a/release-notes/2015/_img/6_3_03.png b/release-notes/2015/_img/6_3_03.png new file mode 100644 index 00000000000..b984ab32787 Binary files /dev/null and b/release-notes/2015/_img/6_3_03.png differ diff --git a/release-notes/2015/_img/6_3_04.png b/release-notes/2015/_img/6_3_04.png new file mode 100644 index 00000000000..72873a2b46a Binary files /dev/null and b/release-notes/2015/_img/6_3_04.png differ diff --git a/release-notes/2015/_img/6_3_05.png b/release-notes/2015/_img/6_3_05.png new file mode 100644 index 00000000000..1173e3f4100 Binary files /dev/null and b/release-notes/2015/_img/6_3_05.png differ diff --git a/release-notes/2015/_img/7_17_01.png b/release-notes/2015/_img/7_17_01.png new file mode 100644 index 00000000000..2fbd6609b4c Binary files /dev/null and b/release-notes/2015/_img/7_17_01.png differ diff --git a/release-notes/2015/_img/7_17_02.png b/release-notes/2015/_img/7_17_02.png new file mode 100644 index 00000000000..4feddc40a86 Binary files /dev/null and b/release-notes/2015/_img/7_17_02.png differ diff --git a/release-notes/2015/_img/7_17_03.png b/release-notes/2015/_img/7_17_03.png new file mode 100644 index 00000000000..bf1681b2ac5 Binary files /dev/null and b/release-notes/2015/_img/7_17_03.png differ diff --git a/release-notes/2015/_img/7_17_04.png b/release-notes/2015/_img/7_17_04.png new file mode 100644 index 00000000000..d7d3648a232 Binary files /dev/null and b/release-notes/2015/_img/7_17_04.png differ diff --git a/release-notes/2015/_img/7_17_05.png b/release-notes/2015/_img/7_17_05.png new file mode 100644 index 00000000000..ff7c8927afb Binary files /dev/null and b/release-notes/2015/_img/7_17_05.png differ diff --git a/release-notes/2015/_img/7_7_01.png b/release-notes/2015/_img/7_7_01.png new file mode 100644 index 00000000000..a8072d1c067 Binary files /dev/null and b/release-notes/2015/_img/7_7_01.png differ diff --git a/release-notes/2015/_img/7_7_02.png b/release-notes/2015/_img/7_7_02.png new file mode 100644 index 00000000000..e0a9a351592 Binary files /dev/null and b/release-notes/2015/_img/7_7_02.png differ diff --git a/release-notes/2015/_img/7_7_03.png b/release-notes/2015/_img/7_7_03.png new file mode 100644 index 00000000000..d83d7bf8b03 Binary files /dev/null and b/release-notes/2015/_img/7_7_03.png differ diff --git a/release-notes/2015/_img/7_7_04.png b/release-notes/2015/_img/7_7_04.png new file mode 100644 index 00000000000..759eed696a4 Binary files /dev/null and b/release-notes/2015/_img/7_7_04.png differ diff --git a/release-notes/2015/_img/8_26_01.png b/release-notes/2015/_img/8_26_01.png new file mode 100644 index 00000000000..375c14908a8 Binary files /dev/null and b/release-notes/2015/_img/8_26_01.png differ diff --git a/release-notes/2015/_img/8_26_02.png b/release-notes/2015/_img/8_26_02.png new file mode 100644 index 00000000000..3205b804ac0 Binary files /dev/null and b/release-notes/2015/_img/8_26_02.png differ diff --git a/release-notes/2015/_img/8_26_03.png b/release-notes/2015/_img/8_26_03.png new file mode 100644 index 00000000000..09dd739737e Binary files /dev/null and b/release-notes/2015/_img/8_26_03.png differ diff --git a/release-notes/2015/_img/8_26_04.png b/release-notes/2015/_img/8_26_04.png new file mode 100644 index 00000000000..08db7b35a22 Binary files /dev/null and b/release-notes/2015/_img/8_26_04.png differ diff --git a/release-notes/2015/_img/8_7_01.png b/release-notes/2015/_img/8_7_01.png new file mode 100644 index 00000000000..2fbabca4c17 Binary files /dev/null and b/release-notes/2015/_img/8_7_01.png differ diff --git a/release-notes/2015/_img/8_7_02.gif b/release-notes/2015/_img/8_7_02.gif new file mode 100644 index 00000000000..fdd92b2be63 Binary files /dev/null and b/release-notes/2015/_img/8_7_02.gif differ diff --git a/release-notes/2015/_img/8_7_03.png b/release-notes/2015/_img/8_7_03.png new file mode 100644 index 00000000000..ee31c3afc0d Binary files /dev/null and b/release-notes/2015/_img/8_7_03.png differ diff --git a/release-notes/2015/_img/9_18_01.png b/release-notes/2015/_img/9_18_01.png new file mode 100644 index 00000000000..9c610647cbd Binary files /dev/null and b/release-notes/2015/_img/9_18_01.png differ diff --git a/release-notes/2015/_img/9_18_02.png b/release-notes/2015/_img/9_18_02.png new file mode 100644 index 00000000000..bcc93f4992c Binary files /dev/null and b/release-notes/2015/_img/9_18_02.png differ diff --git a/release-notes/2015/_img/9_18_03.png b/release-notes/2015/_img/9_18_03.png new file mode 100644 index 00000000000..fe8919238f0 Binary files /dev/null and b/release-notes/2015/_img/9_18_03.png differ diff --git a/release-notes/2015/_img/9_18_04.png b/release-notes/2015/_img/9_18_04.png new file mode 100644 index 00000000000..05b71f29e6e Binary files /dev/null and b/release-notes/2015/_img/9_18_04.png differ diff --git a/release-notes/2015/_img/9_18_05.png b/release-notes/2015/_img/9_18_05.png new file mode 100644 index 00000000000..b9792cde237 Binary files /dev/null and b/release-notes/2015/_img/9_18_05.png differ diff --git a/release-notes/2015/apr-10-team-services.md b/release-notes/2015/apr-10-team-services.md new file mode 100644 index 00000000000..6ac2d7c7f6a --- /dev/null +++ b/release-notes/2015/apr-10-team-services.md @@ -0,0 +1,61 @@ +--- +title: Card configuration options – Apr 10 +description: VSTS release notes for April 10 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 585770d3-173f-4c37-bad9-acfb4ea143ff +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Card configuration options – Apr 10 + +**Note:** The improvements discussed in this post will be rolling out over the next two weeks. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Configure cards + +The first thing I’ll highlight is that you now have configuration options for the data showing up on your cards—for both the Kanban board and the Taskboard. The picture below shows the new dialog for customizing how cards look on your Kanban board. You can turn the ID on or off, select how the assigned to field is displayed, and choose to show tags directly on your cards. These options are per team (or backlog) and per work item so that you have maximum flexibility. With regards to customizing cards, this is just the beginning of a bunch of work we have planned in this area. Stay tuned. + +![Card configuration options](_img/4_10_01.png) + +**Note:** The option to show tags on your cards is only available on Kanban boards. We'll be turning this feature on for Taskboards in our next deployment. + +![Card configuration options dialog](_img/4_10_02.png) + +##Markdown editing for definition of done + +Last sprint we turned on a feature called Definition of Done giving you the ability to specify a shared definition of done for each column on your board. This sprint we’ve added [Markdown](http://daringfireball.net/projects/markdown/syntax) support to give you a great experience for formatted text (bullets, numbering, links, etc.) in your definitions. + +![Definition of done with Markdown](_img/4_10_03.png) + +##CFD options + +If you’re familiar with the cumulative flow diagram (CFD) that shows up above your backlogs and Kanban boards, you’re probably aware that the light grey area representing new items on your backlog often dwarfs other information on this chart. We’ve introduced a new option to turn off this series on the CFD, making the chart much more usable and useful. Open the CFD chart and click the gear in the top right to access the options available. + +![CFD display options](_img/4_10_04.png) + +##Web history view for Git projects + +This sprint we also made a change to the code history hub by introducing a new view: **Branch Updates**. This view (only available for Git projects) shows all updates for a given branch, grouping commits by push and pull request activity. This view provides developers new insight into how their Git repo is being updated over time, and provides traceability from history to pull requests. + + +![Branch Updates view for Git projects](_img/4_10_05.png) + +##Cloud load testing support for 100 cores + +Finally, we enabled last week [support for up to 100 cores](http://blogs.msdn.com/b/visualstudioalm/archive/2015/03/23/announcing-100-core-support-for-vso-cloud-load-testing-and-more.aspx) (from the earlier limit of 20 cores) for the Cloud Load Testing service. This means that customers can now simulate five times the user load they were able to simulate earlier. + +If you have questions, feel free to reach out on [Twitter](https://twitter.com/VisualStudio) ([@aaronbjork](https://twitter.com/aaronbjork)). And if you’ve got ideas on what you’d like to see prioritized, head over to UserVoice to add either an idea or your support to an existing idea. + +Thanks, + +Aaron Bjork + + + + + + + diff --git a/release-notes/2015/apr-22-team-services.md b/release-notes/2015/apr-22-team-services.md new file mode 100644 index 00000000000..74c39629bc6 --- /dev/null +++ b/release-notes/2015/apr-22-team-services.md @@ -0,0 +1,62 @@ +--- +title: Application Insights – Synthetic Data Filtering, New Usage Experience for ASP.NET, and Daily Active User Calculations – Apr 22 +description: VSTS release notes for April 22 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 40e151ba-193b-4f02-9b66-60d8788b70db +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Application Insights – Synthetic Data Filtering, New Usage Experience for ASP.NET, and Daily Active User Calculations – Apr 22 + +##Synthetic data is filtered out of request metrics + +Search robots or web tests that monitor availability generate some of the traffic received by your web app. This synthetic traffic might invalidate various metrics in Application Insights so that it does not accurately reflect the numbers of real users and the performance they experience. + +Beginning from this release Application Insights differentiates telemetry collected from real end-users from telemetry originated by various synthetic sources. By using filtering and grouping in Diagnostic Search and Metrics Explorer, you can now choose to see data only from real end-users, only from synthetic traffic, or both: + +![Filtering for real user traffic](_img/4_22_01.png) + +You’ll now see these labels: + +- In Overview: ‘Usage analytics (excluding synthetic traffic)’ +- In Usage analytics: ‘(Excluding synthetic traffic)’ +- In drill-in experiences, the filter is turned on by default: + +![Filtering for real traffic turned on by default in drill-in experiences](_img/4_22_02.png) + +##New Usage experience for ASP.NET, Java and other applications + +The ASP.NET Overview Lens in the Applications Insights portal has a new and improved look – this helps you get a 360 view of the state of your application without scrolling. + +Usage content and drill-in experiences are designed to support two main scenarios: + +1. Daily review of activity, adoption and interaction. + +The four controls under Usage analytics show counts over 24 hours, and the trend in comparison to the previous 24 hours. Clicking these controls provides more detail: + +![Daily activity review: usage analytics control panel](_img/4_22_03.png) + +2. Deeper analysis of activity and trends over a longer time period (7 days default). From the Overview blade, click Usage: + +![Accessing usage analytics for longer time periods](_img/4_22_04.png) + + This takes you to the Usage analytics blade, which answers questions about adoption, engagement, interaction and environment. + +##Usage Reports Calculation for Daily Active Users + +A new calculation for Daily Active Users (DAU) has been added to the usage reports. DAU presents the average number of the daily active users over the time period you have set. The calculation uses data from complete days only. + + +##Feedback please! + +That’s a wrap for Sprint 81. Next update immediately after [Build 2015](http://www.buildwindows.com/). If you want to let us know how we are doing, please submit bugs questions and issues to [Forums](https://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=ApplicationInsights), bugs to [Connect](http://connect.microsoft.com/VisualStudio) (select Application Insights), and suggestions to [User Voice](http://visualstudio.uservoice.com/forums/121579-visual-studio/category/77108-application-insights). + +Thanks, + +David Lubash + + diff --git a/release-notes/2015/apr-24-team-services.md b/release-notes/2015/apr-24-team-services.md new file mode 100644 index 00000000000..31a65dbe067 --- /dev/null +++ b/release-notes/2015/apr-24-team-services.md @@ -0,0 +1,28 @@ +--- +title: Team Project Rename – April 24 +description: Our top user request is now in Visual Studio Online and ready for feedback - customers can now rename team projects in their accounts. +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: ef604992-a297-4aae-b08c-cc96e1ab8de1 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Team Project Rename – Apr 24 + +Today we are very happy to announce that our #1 voted UserVoice story, with upwards of 6,000 votes, is ready for teams to start trying and giving feedback. Visual Studio Online customers can now rename team projects in their accounts. + +You can access the feature from the admin area in either the Project or Collection Overview page. The screenshot below shows the Collection entry point, via a context menu action. + +![Rename menu item in the team project context menu on the project collection administration page](_img/4_24_01.png) + +We’ve worked to make team project rename as seamless as possible by automatically updating names that we have access to and minimizing reaction work to team members. There are still some manual steps—some of which we’ll add automation for over the next couple of deployments—but for the most part reaction work is small. The document [Rename a team project](http://go.microsoft.com/fwlink/p?LinkId=528893) highlights the artifacts (Client caches, Git remotes, etc.) that require some extra attention. + +It has been a long time in the making, but it feels good to finally call this feature done and get it into your hands. + +Thanks, + +Mario Rodriguez + diff --git a/release-notes/2015/apr-27-team-services.md b/release-notes/2015/apr-27-team-services.md new file mode 100644 index 00000000000..a576d71e8d1 --- /dev/null +++ b/release-notes/2015/apr-27-team-services.md @@ -0,0 +1,60 @@ +--- +title: Add fields to cards, board filtering – Apr 27 +description: VSTS release notes for April 27 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 485496af-5b81-42da-818f-0161141488ef +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Add fields to cards, board filtering – Apr 27 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Adding fields to cards + +Continuing with our work to give you more card and board flexibility, this sprint we turned on the ability to add additional fields to cards on the Kanban board. Fields like title and assigned to are generally wanted on every card, but it’s often nice to bring a bit more information to cards so you can take action on them without having to open them for more details. Notice in the picture below that the Bug cards have both the Severity and Priority fields added. + +![Kanban board showing fields added to Bug cards](_img/4_27_01.png) + +This new setting is per team and work item type, and allows for up to 10 additional fields to be added. + +![Configuring additional fields](_img/4_27_02.png) + +In a few more sprints we’ll have even more here, letting you use conditional formatting rules based on field/value pairs. Stay tuned. **Note:** The option to show additional fields is available only on Kanban boards. We'll be turning this feature on for Taskboards in our next deployment. + +##Kanban board filtering + +Another nice improvement you’ll notice is the ability to filter the Kanban board. Type any text you like in the filter box in the top right, and the board automatically hides all cards not matching the text entered. Filtering works on all data displayed on the cards—including title, ID, assigned to, tags, and any additional fields added. + +![Entering filter text on the Kanban board](_img/4_27_03.png) + +There’s an additional filter box in the first column that filters only new work. This is handy when you’re looking for something from your backlog and you don’t want to lose context of all the other work that’s already in flight. + +![Kanban board: filtering new items](_img/4_27_04.png) + +We also added a simple new feature that lets you collapse the first column of the board to get it out of the way. Just click the little chevron in the top of the first column and it collapses out of the way. + +![Collapsing the first column on the Kanban board](_img/4_27_05.png) + +##Card options on the Taskboard + +Last sprint we enabled a set of configuration options on the Kanban board (adding tags, the ID field, etc.). This sprint those options make their way to the Taskboard. The functionality is identical to the Kanban board, allowing you to pick display options for each work item type on your Taskboard. + +![Card options on the Taskboard](_img/4_27_06.png) + +##Account Restore + +And finally, we’ve added a new capability that enables you to restore a deleted account. This has been a pain point for quite a few customers who have deleted accounts, only to realize later that they still need data from the account. With today's update, account owners can now restore a deleted account as long as it's within 90 days of when the account was deleted. + +1. Go to your profile page by selecting your identity on the top right corner. +2. Click **Restore** on the deleted account. + + That’s it for this sprint. We’ll be back in three weeks with more goodness. If you have questions, feel free to reach out on [Twitter](https://twitter.com/VisualStudio) ([@aaronbjork](https://twitter.com/aaronbjork)). And if you’ve got ideas on what you’d like to see prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to either add an idea or add your support to an existing one. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2015/aug-07-team-services.md b/release-notes/2015/aug-07-team-services.md new file mode 100644 index 00000000000..62a7482c3cb --- /dev/null +++ b/release-notes/2015/aug-07-team-services.md @@ -0,0 +1,45 @@ +--- +title: Multi-select backlog items, reorder when changing columns, client libraries availability – Aug 7 +description: VSTS release notes for August 7 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 8e5ea1bd-811a-46eb-8b25-f12f449b1c93 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Multi-select backlog items, reorder when changing columns, client libraries availability – Aug 7 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Multi-select items on the product backlog + +On the product backlog, many have wanted to select multiple items when performing actions. Well, now you can! On all the backlogs, you can select multiple items (using shift-click) and perform any of the actions in the context menu: + +![Multi-select options in the context menu](_img/8_7_01.png) + +We are currently working on enabling drag operations on multiple items; for example, [drag/drop reordering](http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2970520-drag-and-drop-reordering-for-multiple-consecutive) or dragging to an iteration. Look for this soon. + +##Reorder cards when changing columns + +Ever get frustrated when you drag a card to a column and then it drops to some place that didn’t make sense, sometimes scrolling the browser to that location? Yeah, we didn’t like that either, and we fixed it. You can now reorder the card when you change the column, so the card will stay where you drop it. We also eliminated the auto-scrolling we used to do, so the board keeps it location after you drop. + +![Reordering a card as you change columns](_img/8_7_02.gif) + +##Color tags and titles on your cards + +We’ve added two small, but powerful ways to add visual cues to your board. You can now change the color and style of title text as well as add color to specific tags. To try this out, click the gear icon. You can format title text under “Styles” and color tags under “Tag colors”. + +![Formatting title text and tag colors](_img/8_7_03.png) + +##Libraries for integrating with Visual Studio Online now available at nuget.org + +For .NET developers building Windows apps and services that integrate with Visual Studio Online, NuGet packages containing libraries for integrating with work item tracking, version control, build, and other services are now available. These packages replace the traditional TFS Client OM installer and make it easy to acquire and redistribute the libraries needed by your app or service. To learn more, see the [overview of the client library packages](http://go.microsoft.com/fwlink/?LinkId=613084). + +If you have questions, feel free to reach out on Twitter. ([@aaronbjork](https://twitter.com/aaronbjork) is always listening). Ideas? Head over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Enjoy! + +Gregg Boer \ No newline at end of file diff --git a/release-notes/2015/aug-26-team-services.md b/release-notes/2015/aug-26-team-services.md new file mode 100644 index 00000000000..9924393cbf9 --- /dev/null +++ b/release-notes/2015/aug-26-team-services.md @@ -0,0 +1,45 @@ +--- +title: Sprint planning improvements and SonarQube analysis build tasks – Aug 26 +description: VSTS release notes for August 26 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: a08691ea-e68d-4846-a306-adb0e30b28b4 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Sprint planning improvements and SonarQube analysis build tasks – Aug 26 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +**Renaming columns in place + +You can now rename columns on your Kanban board in place, without having to jump into the configuration dialog. Over time, we’ll be adding more functionality inline, including adding, deleting, and reordering columns. + +![Renaming in place](_img/8_26_01.png) + +##Choosing users for capacity planning + +This sprint we tweaked the capacity planning experience to give you complete control over who participates. You now have two new buttons on the toolbar that allow you to add any member to your sprint plan (including those outside your team), as well as adding any missing team members. As you can see in the screenshot below, I’m searching for Noah and adding him directly into my plan for Sprint 87. + +![Adding a team member directly to a sprint plan](_img/8_26_02.png) + +##Burndown with available capacity + +The burndown chart now has a line showing available capacity during a sprint, in addition to the existing ideal trend line. This view provides you and your team with a better idea of whether you're on track to finish all your work during the sprint. This line is built on the capacity data described above, including individual and team days off. We’ve marked [this suggestion](http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4381480-burndown-chart-should-use-the-capacity-of-the-team) on UserVoice as completed. + +![Burndown chart showing available capacity](_img/8_26_03.png) + +##SonarQube analysis build tasks + +Finally, you can now execute a SonarQube analysis in conjunction with MSBuild. Before your build steps that execute the actual MsBuild, insert a **SonarQube for MSBuild - Begin Analysis** task to specify the SonarQube project parameters, the connection to the SonarQube server, and (until SonarQube 5.2 ships) the connection to the SonarQube database. After the build and any test tasks, simply append a **SonarQube for MSBuild - End Analysis** task to complete the analysis and send the data off to SonarQube. You can learn more about SonarQube analysis in this [blog post](http://blogs.msdn.com/b/visualstudioalm/archive/2015/08/24/build-tasks-for-sonarqube-analysis.aspx). + +![SonarQube build analysis settings](_img/8_26_04.png) + +That’s a wrap for our deployment this week. As always, please reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)) if you have questions. If you have ideas on what you’d like to see us do next, head over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2015/dec-10-team-services.md b/release-notes/2015/dec-10-team-services.md new file mode 100644 index 00000000000..c61731f91fe --- /dev/null +++ b/release-notes/2015/dec-10-team-services.md @@ -0,0 +1,84 @@ +--- +title: Custom work item fields and more – Dec 10 +description: VSTS release notes for December 10 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 85a01555-f03d-4f49-8d8e-173db66cb79c +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Custom work item fields and more – Dec 10 + +We’ve got quite a few things to cover in this week’s deployment. Let’s jump right in… + +##Custom work item fields + +I’m happy to announce that, with our deployment this week, all customers now have the ability to customize work items. This new capability includes: + +- Adding new fields (date/time, string, integer, decimal) +- Rearranging work item layouts +- Process inheritance +- Process security + +![Customizing a work item](_img/12_10_01.png) + +As many of you know, we’ve been waiting quite a while to get this capability ready for VS Team Services. While we’re excited about this first step, I want to assure you that we’re far from done. Our next steps will include support for pick-list fields, state customization, HTML fields, completely custom work item types, completely custom processes, and more. You can read all about today’s updates in Justin’s [blog post](http://blogs.msdn.com/b/visualstudioalm/archive/2015/08/24/adding-a-custom-field-to-a-work-item.aspx?wa=wsignin1.0). + +##Work item discussion + +One of the most common requests from users of our new work item form has been the ability to see discussions in the main page and in the context of other fields. You’ll now find the discussion experience lives on the bottom left of all work item types and lets you interact with others without having to move away from the core fields. The new discussion experience also includes support for @mentions (people) and #mentions (other work items) directly in the discussion control. + +![Work item discussion](_img/12_10_02.png) + +##Work item history improvements + +Today’s update also includes some improvements to the history experience for all work item types. + +- Pagination and revision count +- Separation of the state graph from history +- Auto-expansion of the most recent revision +- Absolute timestamps +- Some UX styling improvements +- Performance improvements + +Most of these changes are cosmetic, but you’ll see more coming to improve work item history next year. + +##Deleting work items + +And finally (and I can’t believe I’m actually saying it), you now have the ability to delete work items, complete with a recycle bin experience! This capability replaces the previously used "Removed" states on work items. We’ve implemented delete as a unique permission, so you can hang on to fine-grained control over who has access to this capability. + +![Deleting a work item](_img/12_10_03.png) + +##Dashboards edit mode + +We’ve added a new mode to all dashboards called “edit mode”. Edit mode helps prevent the inadvertent moving of widgets on your dashboards during the day-to-day consumption experience. To enter edit mode, click the pencil icon in the bottom right-side of your dashboard. Once in edit mode, you can remove, rearrange, configure, and add new widgets. + +![Dashboards edit mode](_img/12_10_04.png) + +##Keyboard shortcuts + +Continuing on with the global shortcut keys announced last time, we have now enabled keyboard support for the TEST hub: + +![Keyboard shortcuts for the Test hub](_img/12_10_05.png) + +##On-Premises support for Exploratory Testing extension: + +You can now use the browser-based exploratory testing extension to connect to your on-premises Team Foundation Servers (TFS 2015 RTM and TFS 2015 Update1), in addition to your VSTS accounts. Support for TFS 2013 and TFS 2012 will be coming later. + +![Connecting to your TFS server](_img/12_10_06.png) + +##Scope code search using path filters + +We’ve heard from many of you that you’d like to be able to filter your code search results by file path. With this update we’ve included a path filter in the left pane enabling you to scope search results for both TFVC and Git projects to a specified folder. Code Search also remembers the user’s last settings such as the project, repository, and path searched, and automatically applies these in subsequent queries. + +![Filtering code search results by path](_img/12_10_07.png) + +That’s it for Sprint 92. Please reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)) if you have questions. If you have ideas on things you’d like to see us prioritize, head over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork + diff --git a/release-notes/2015/feb-18-team-services.md b/release-notes/2015/feb-18-team-services.md new file mode 100644 index 00000000000..6713b10332c --- /dev/null +++ b/release-notes/2015/feb-18-team-services.md @@ -0,0 +1,55 @@ +--- +title: Kanban split columns, inline adding and editing – Feb 18 +description: VSTS release notes for February 18 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: b6ba0a5e-3260-4dd0-937d-9491c29e01b8 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Kanban split columns, inline adding and editing – Feb 18 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +This week’s deployment brings a brand new look to our boards and some new functionality that many of you have been waiting for. Let’s jump right in… + +##Adding and editing directly from the board + +First, notice that all cards have a slightly updated look—cards are now a bit wider, and have a solid white background (instead of a colored background). Why the changes? We’re laying the groundwork for more customization options on the cards, including adornments, additional fields, and tags. Those customizations options aren’t ready in this deployment, but they’re coming soon, so stay tuned. + +Next, we’ve updated all boards to support adding new cards and inline editing. The Kanban board now has a **New item** button at the top of the first column that adds a new card. Once added, all data on the card can be edited directly from the card itself. + +![Kanban board: Adding new item, in-card editing](_img/2_18_01.png) + +The Taskboard received similar styling updates. The **New item** button adds a Task directly to the story, and all data on the Taskboard can be edited inline. + +![Taskboard: Adding new item](_img/2_18_02.png) + +##Split columns on the Kanban board + +Next, we’ve added a new feature to our Kanban board called “Split Columns”. Kanban teams use a pull model to move work through the board. To do this effectively, each column on your board is split into two subcolumns—Doing and Done. Moving a card into the Done column provides a clear signal that work is ready to progress, and that the card can be pulled by the person/team who owns that next stage. + +Click the Customize Columns link on the toolbar to split any of the columns on your board. + +![Splitting columns on the Kanban board](_img/2_18_03.png) + +##Assign multiple people to test suites + +We enabled this sprint the ability to invite multiple sign-off owners to run the same test cases. Right-click a test suite in the Test hub and you’ll be presented with a dialog to assign individuals and email them about the work. Doing so will iterate through each test case in the test suite and create a test for each individual. In the mail sent, a link is provided that takes the user directly to the tests assigned. + +![Assigning tests to multiple team members](_img/2_18_04.png) + +Application Insights in the Azure Preview Portal + +Finally, we want to give everyone a heads up that new customers on-boarding apps to Application Insights must now use [Application Insights in the Azure Preview Portal](http://azure.microsoft.com/en-us/services/application-insights/). While existing users of Application Insights in the Visual Studio Online Portal are unaffected, we recommend all customers begin monitoring in the Azure Preview Portal. Because historical data will not migrate between portals, adding the second telemetry collection will ensure monitoring is unaffected while you transition your apps. + +Additional information is available here: [Application Insights: Moving from Visual Studio Online Portal to Azure Preview Portal](http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/06/application-insights-moving-from-visual-studio-online-portal-to-azure-preview-portal.aspx) + +Feel free to reach out with feedback on [Twitter](https://twitter.com/VisualStudio) and don’t forget to share what you’d like to see us prioritize on [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso). + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2015/jan-27-team-services.md b/release-notes/2015/jan-27-team-services.md new file mode 100644 index 00000000000..ae1b4ae6e39 --- /dev/null +++ b/release-notes/2015/jan-27-team-services.md @@ -0,0 +1,50 @@ +--- +title: VS Online Basic license expanded – Jan 27 +description: VSTS release notes for January 27 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 3e7d714e-d58d-4e18-a2c9-0faf6fd3f1d8 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#VS Online Basic license expanded – Jan 27 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Basic license expanded + +First and foremost, I’m excited to announce that this week we are rolling out upgrades across Visual Studio Online to make the following features available to ***all users*** with a “Basic” license: + +- Web-based test execution +- Agile portfolio management +- Work item chart authoring +- Team Rooms + +This change means all teams of five or fewer members have access to these features in Visual Studio Online for free, while larger teams can access this functionality at a much lower price point. Brian Harry will be talking more about the impact of this change on his blog at [http://blogs.msdn.com/bharry](http://blogs.msdn.com/bharry). + +Now that the big news is out of the bag, let’s jump into a few improvements to the service… + +##Taskboard improvements + +We made three changes to the Taskboard this sprint that I want to highlight. First, you can now reorder Tasks directly on the Taskboard. Just grab a tile and move it around to change its order. The picture below demonstrates, as you can see that I’m dragging Task 1 from the first position to the last position. + +![Dragging a task](_img/1_27_01.png) + +Second, notice that the parent user story now looks more like a card, matching its visual representation in other parts of the product. And finally, we updated both the Taskboard and the iteration backlog views to include unparented Tasks. This means that ***all*** Tasks assigned to an iteration now show up regardless of whether or not they are parented to a user story. + +![Unparented tasks](_img/1_27_02.png) + +##Editing tiles on the Kanban board + +We also turned on the ability to edit the assigned user and effort values for cards on your Kanban boards. This is the first in a series of changes coming that accrue toward a complete add, edit, and reorder experience directly from the board. Last week I outlined the [list of improvements](http://blogs.msdn.com/b/visualstudioalm/archive/2015/01/21/agile-project-management-futures.aspx) like this that are on their way in upcoming sprints. + +![Editing Kanban tiles](_img/1_27_03.png) + +Feel free to reach out with feedback on [Twitter](https://twitter.com/VisualStudio) and don’t forget to share what you’d like to see us prioritize on [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso). + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2015/jul-07-team-services.md b/release-notes/2015/jul-07-team-services.md new file mode 100644 index 00000000000..f0ba6cfb8c9 --- /dev/null +++ b/release-notes/2015/jul-07-team-services.md @@ -0,0 +1,45 @@ +--- +title: Card colors and personal access tokens – Jul 7 +description: VSTS release notes for July 7 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 66780d76-a567-492d-b0ef-eccf20b89633 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Card colors and personal access tokens – Jul 7 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Card coloring on Kanban board + +I’m excited to let you know that our update this week brings the ability to change the color of cards on your boards – finally! You can now configure boards to include custom formatting based on any value on your work items. Setting this up is very easy… just click the gear icon on the top of your board, select **Card styles**, and create a rule for the color you’d like to add. You can see in the example below that my board has two rules configured. The first rule colors all Bugs with a red background. The second rule colors all work items tagged with the value “Taskboard” a yellow color. + +![Card coloring](_img/7_7_01.png) + +![Card coloring rules](_img/7_7_02.png) + +This feature is initially only available on Kanban board, but we’re enabling it on the Taskboard with our next deployment… stay tuned. + +##Personal access tokens + +Personal access tokens have been a request from customers looking for a more secure option to alternate authentication credentials. With this week’s update you can now create personal access tokens that limit the lifetime, account, and scope of activities the token is authorized to access. You can see in the example below that I’ve created a token named “Code Read” that provides only read access to Code assets in my personal account, for 90 days. With this new capability you now have much finer grained control over access to assets inside your projects. + +![Personal Access Tokens](_img/7_7_03.png) + +To setup a personal access token click your name in the top right and select **My Profile**. From there choose **Security > Personal access tokens**. + +##Adding work directly to a sprint + +We also made a small change this sprint to allow you to add new backlog items directly to your sprint backlogs. Previously, the only way to add new work to requirements or bugs to a sprint was to add them to the product backlog, and then drag each item one at a time to the correct sprint. + +![Adding work directly to a sprint](_img/7_7_04.png) + +That’s it for our sprint 84 deployment. If you have questions, feel free to reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)). If you have ideas on what you’d like to see use do next, head over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2015/jul-17-team-services.md b/release-notes/2015/jul-17-team-services.md new file mode 100644 index 00000000000..abd7307641c --- /dev/null +++ b/release-notes/2015/jul-17-team-services.md @@ -0,0 +1,71 @@ +--- +title: Multiple activities per team member – Jul 17 +description: VSTS release notes for July 17 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 8262711a-b981-49ea-ad6f-442ae416dfd0 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Multiple activities per team member – Jul 17 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Multiple activities per team member + +When planning capacity for a sprint, you can now assign multiple activities to a single team member. Just hover over or click on a row, then click the “…” menu to add a new activity. If you have someone who does both development and testing, you can fine tune the capacity to match your team’s skill sets. This has been a [popular request on UserVoice](https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2308935) for quite a while, and we are excited to finally give you this feature. We expect better planned iterations from all of you now! + +![Multiple activities per team member](_img/7_17_01.png) + +##Configure settings directly from backlogs/boards + +We have been working hard to consolidate our configuration options into a single place. You will now see the gear icon appear on all the backlog and board pages. Clicking it shows all the settings available for that page. As new settings become available, you’ll find them here. + +![Easy access to configuration](_img/7_17_02.png) + +##Hide empty fields on cards + +We have added the ability to hide empty fields on the card. This means less whitespace, smaller cards, and more cards on your board! To enable this feature, click the gear icon, select “Fields”, and uncheck “Show empty fields”. + +![Hidden fields on the card](_img/7_17_03.png) + +##Card coloring on Taskboard + +In the [July 7th release](jul-07-team-services.md), we added the ability to change the color of cards on your board. This deployment brings that functionality to the Taskboard as well. In addition, we’ve also added support of macros: @Today, @Me, and @CurrentIteration. This opens up some cool opportunities to add visual language to your board. In the example below, we show a rule that turns cards grey if they haven’t been touched in 2 days. + +![Coloring a card conditionally with a macro](_img/7_17_04.png) + +##Drag any item to an iteration from anywhere + +You can now drag any work item from any board or any backlog to a sprint. Yup, that’s right. Any item from anywhere. No more guessing when you can drag and when you can’t. It all just works. + +##Build your projects hosted in GitHub + +You can now setup a continuous integration build in Visual Studio Online for projects hosted on GitHub. With this feature enabled, code pushed to GitHub triggers a build in Visual Studio Online. The build results page provides a direct link to the associated commit in GitHub, with the status of the commit(s) updated to reflect the status of the build. You can also show the status of your build directly on your GitHub repo's readme file or on your own web site using the “build badge” feature. + +![A successful build of a GitHub-hosted project](_img/7_17_05.png) + +Note: a basic version of this feature has been available since April, but the process to set up the connection to your GitHub repository is now faster and easier with this deployment. + +To learn more about this feature, see [Build your GitHub-hosted projects in Visual Studio Online](http://go.microsoft.com/fwlink/?LinkID=618519). + +##New Visual Studio Online integrations + +The number of tools and services that integrate with Visual Studio Online continues to grow! Check them all out in the [Visual Studio Online Integrations(https://www.visualstudio.com/explore/vso-integrations-directory-vs)] directory, including these services new to the directory: + +- [Aha](http://go.microsoft.com/fwlink/?LinkId=618521)!: helps busy product managers create brilliant product strategy and roadmaps. The Visual Studio Online integration enables you to push work item updates in your team projects to your Aha! products, and to open new work items directly from Aha! +- [GitHub](http://go.microsoft.com/fwlink/?LinkId=618519): build/continuous integration support for GitHub repositories right from Visual Studio Online. +- [Power BI](http://go.microsoft.com/fwlink/?LinkID=618520): easily visualize data through dashboards and reports for your team projects. Initially, support for version control (TF Version Control and Git) data is available. +- [TestRail](https://www.visualstudio.com/en-us/explore/vso-integration-testrail-vs): provides comprehensive web-based test case management. Create work items in your team project from test result and link test cases to work items. + +If you have a tool or service that integrates with Visual Studio Online, we want to know about it! Send an e-mail to [vsointegration@microsoft.com](mailto:vsointegration@microsoft.com). + +There you have it. If you have questions, feel free to reach out on Twitter. ([@aaronbjork](https://twitter.com/aaronbjork) is always listening). Ideas? Head over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Enjoy! + +Gregg Boer + diff --git a/release-notes/2015/jun-03-team-services.md b/release-notes/2015/jun-03-team-services.md new file mode 100644 index 00000000000..9a16f29c3a8 --- /dev/null +++ b/release-notes/2015/jun-03-team-services.md @@ -0,0 +1,56 @@ +--- +title: Swim lanes, #mention, Build test steps – Jun 3 +description: VSTS release notes for June 3 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 6f3afec0-bf60-46c0-82d5-48f8d60edc30 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Swim lanes, #mention, Build test steps – Jun 3 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Kanban swim lanes + +Today’s update brings the ability to create swim lanes on your Kanban boards. A swim lane is a horizontal lane used to categorize work; the most common use is the creation of an “expedite lane” for emergency work that can skip queues and preempt other work. Our boards support creating as many lanes as the team needs. Just collapse them out of the way when not in use. To add a swim lane, click the gear in the top right hand corner of your board. Enjoy! + +![Swim lanes on the Kanban board](_img/6_3_01.png) + +###Mention work items + +Have you ever wished that you could quickly mention or provide a link to a work item related to the comments you are leaving for a pull request? This week’s deployment brings a new feature we call #mentions, making it very easy to mention a work item when leaving code comments. Simply type "#" next time you are leaving a code comment to trigger the suggestions box. You can narrow down the list of suggested work items by entering keywords or the exact work item ID. + +![Creating a #mention work item](_img/6_3_02.png) + +When the mention is saved, a link to the work item form is created. This lets other users get better context for the work item you are mentioning. + +![Viewing a #mention item](_img/6_3_03.png) + +Mentions are supported in changesets, shelvesets, git commit discussion comments, and pull request discussions. We’ve got a lot more planned along these lines, so stay tuned. + +##Automated testing in Build vNext + +In our [last deployment](may-15-team-services.md) we announced the preview of the next version of our Build system. With this deployment, we’ve turned on a bunch of related testing features. The new capabilities allow you to configure two test types: tests that run locally on the build machine (typically used for unit tests), and tests that run on remote machines in a distributed fashion. You can read more about all of this in a recent blog post: [http://aka.ms/testingblog](http://aka.ms/testingblog). + +![Selecting from available tests](_img/6_3_04.png) + +We’ve also released a new hub dedicated to browsing and analyzing test runs across both XAML Builds and Build-Deploy-Test workflows. This new page supports querying on test runs and test results, assigning owners to test failures, tracking their analysis, and filing bugs. A basic set of charts is generated for each of the test runs, and you can download test attachments (examples: trx files, code coverage files) to drill down further. + +![Viewing the test hub](_img/6_3_05.png) + +##Team settings API + +And finally, our API for settings such as team subscriptions to area paths and iterations, bug behavior, and capacity, is now in public preview. Documentation can be found at [https://www.visualstudio.com/integrate/api/work/overview](https://www.visualstudio.com/integrate/api/work/overview). + +If you have any questions, feel free to reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)). If you have ideas on what you’d like to see us do next, head over to UserVoice to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork + + + diff --git a/release-notes/2015/mar-10-team-services.md b/release-notes/2015/mar-10-team-services.md new file mode 100644 index 00000000000..f4bea154794 --- /dev/null +++ b/release-notes/2015/mar-10-team-services.md @@ -0,0 +1,65 @@ +--- +title: @CurrentIteration query token, Kanban reordering and DoD – Mar 10 +description: VSTS release notes for March 10 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: f6257ea6-3ccc-42b2-83e2-5ee83a400558 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#@CurrentIteration query token, Kanban reordering and DoD – Mar 10 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Current iteration query token + +Let’s start with an item that’s been on our backlog for quite some time—the ability to specify a token that represents the current iteration in iteration-based queries. As you know, iterations have dates associated with them. As you move from iteration to iteration, it’s very tedious to update all the queries used to track work for the next iteration. Today’s update brings the addition of a new query token, @CurrentIteration, that returns the current iteration based on today’s date. The screenshot below shows how this would work in context of a query that tracks unfinished work in a sprint (iteration). + +![@CurrentIteration in the context of a query](_img/3_10_01.png) + +There are some limitations with this new token that I want to explain. First, it doesn’t work in Excel. I know… I’m sure many of you will chastise me for this. The token relies on understanding your team context, and unfortunately Excel doesn’t have all the information needed to determine which iteration is current. We’ll work on improving this going forward, but didn’t want it to hold up the token's seeing the light of day. Support for the new token will exist in VS 2015 and VS 2013 Update 5. + +[User Voice #121579](https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2293180-creating-queries-token-for-current-iteration) has been marked as done! + +##Reordering on the Kanban board + +Let’s switch gears and talk about a few more updates to our Kanban boards. First, we’ve turned on reordering items on the board. You can now move items up and down in priority within each column on your board. Any changes made on the board are also reflected directly on the backlog. In fact, with this change many of you may choose to use the board over the backlog, as the board now supports adding, inline editing, and reordering. + +![Reordering on the Kanban board](_img/3_10_02.png) + +##Kanban definition of done + +As work moves through your board, it’s critical that you and your team are on the same page about what “done” means for each column. Today’s deployment brings a new capability that lets you specify a definition of done for each column on your board. Columns with a definition now include a small icon in the header that communicates the agreed-upon definition. + +![Definition of Done icon on the Kanban board](_img/3_10_03.png) + +##Responsive card sizes + +We made an adjustment to both the Kanban board and Taskboard to implement responsive auto-sizing based on the length of the title. Cards on the Kanban board now grow vertically in relation to the title, and horizontally in relation to your browser. Cards on the Taskboard grow horizontally, but we’ve chosen to leave cards on the Taskboard with a fixed size, given that most titles on Tasks are short. You can see in the screenshot below how the cards are wider than the sections above. + +![Responsive card sizes](_img/3_10_04.png) + +##Bugs on the Taskboard + +Late last year we started work on a set of features designed to provide you with flexibility around how [bug work items show up on your backlogs](https://www.visualstudio.com/en-us/articles/news/2014/nov-04-team-services) and boards. Today’s deployment brings a new option that lets you choose to have bugs show up on your Taskboard just like tasks. In this mode, bugs that are children of requirements (stories, PBIs, etc.) are added to the Taskboard swim lane for the appropriate requirement. + +![Bugs in the appropriate swim lanes on the Taskboard](_img/3_10_05.png) + +Go to the admin section for your team to adjust this setting. Going forward, we’ll add even more flexibility here so that bugs can show in both places (on the backlog and as children of requirements). + +##Syntax highlight for XML, Sass, Objective-C, R + +The code editor in the web portal has been updated to support syntax highlighting for more languages and content types. The latest additions include Objective-C, R, Sass, and files containing XML content (even if the extension isn't .xml). + +##CodeLens for accounts in West Europe + +And our last bit of news is that [CodeLens](https://msdn.microsoft.com/en-us/library/dn269218.aspx) is now in Public Preview for Visual Studio Online accounts in the West Europe region. You will need Visual Studio Ultimate 2013 Update 4 or Visual Studio 2015 Preview or later and your code should be checked into Team Foundation Version Control in Visual Studio Online. + +That’s it for Sprint 79. If you have questions about what we’ve shipped today, please reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)). And don’t forget to share what you’d like to see us prioritize on [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso). See you again in three weeks. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2015/mar-27-team-services.md b/release-notes/2015/mar-27-team-services.md new file mode 100644 index 00000000000..c246dd4e379 --- /dev/null +++ b/release-notes/2015/mar-27-team-services.md @@ -0,0 +1,54 @@ +--- +title: Application Insights - save search page, pause export and alerts on export fail - Mar 27 +description: VSTS release notes for March 27 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: dedb8bbf-6bf8-44c6-a101-9144f60d4781 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Application Insights - save search page, pause export and alerts on export fail - Mar 27 + +We release updates to [Visual Studio Application Insights](http://azure.microsoft.com/documentation/articles/app-insights-get-started/) every week. You'll find these updates already in place today. + +##Save search pages + +After you've carefully configured a [Diagnostic Search](http://azure.microsoft.com/documentation/articles/app-insights-diagnostic-search/) page with some filters, a search string and time range, you don't want to have to go through all that every time you re-open the Search blade. + +Now you can save it as a named favorite and re-open it later. And if you like, you can share it with your team. +To save the search page you made, click **Favorites** and give it a name: + +![Diagnostic search: save page as favorite](_img/3_27_01.png) + +To get back to the same search, click Favorites **in the Application Insights resource blade:** + +![In Application Insights overview blade, choose Favorites](_img/3_27_02.png) + +If you saved the search with an absolute time range, you see the same results every time, for as long as the telemetry is stored. If you saved it with a relative time range, you always get results for that range relative to now – for example, for the last 24h. + +##Stop and Start Continuous Export + +You can temporarily disable Continuous Export. While export is disabled, no telemetry is saved to storage. + +![Open a Continuous Export and click Disable](_img/3_27_03.png) + +When you enable it again, export starts from the next telemetry that arrives. Telemetry that arrived while it was disabled is not exported. + +![Open the Continuous Export and click Enable](_img/3_27_04.png) + +##Continuous Export: email notification when export fails + +If [Continuous Export](http://azure.microsoft.com/documentation/articles/app-insights-export-telemetry/) can’t send events to the chosen destination, Application Insights sends email notification to Subscription admins, with suggestions for fixing the problem. + +![Sample alert email](_img/3_27_05.png) + +##Feedback please! + +That’s a wrap for Sprint 80. Next update in three weeks. If you want to let us know how we are doing, please submit bugs questions and issues to [Forums](http://stackoverflow.com/questions/tagged/ms-application-insights), bugs to [Connect](https://connect.microsoft.com/VisualStudio/Feedback/LoadSubmitFeedbackForm?FormID=6076) (select Application Insights), and suggestions to [User Voice](http://visualstudio.uservoice.com/forums/121579-visual-studio/category/77108-application-insights). + +Thanks, + +David Lubash \ No newline at end of file diff --git a/release-notes/2015/may-11-team-services.md b/release-notes/2015/may-11-team-services.md new file mode 100644 index 00000000000..275a59a644e --- /dev/null +++ b/release-notes/2015/may-11-team-services.md @@ -0,0 +1,57 @@ +--- +title: Application Insights: Public Preview; iOS and Android; performance counters and unhandled exceptions for Java apps; and time range selection +description: VSTS release notes for May 11 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: ab2dd5ed-ac45-46ed-96a5-64e8a09b324a +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Application Insights: Public Preview; iOS and Android; performance counters and unhandled exceptions for Java apps; and time range selection + +Application Insights is now in Public Preview, and what a journey it has been getting here. [Public Preview was announced](http://azure.microsoft.com/blog/2015/04/29/announcing-application-insights-public-preview-2/) at //Build/, along with our [Pricing Plans](http://azure.microsoft.com/pricing/details/application-insights/). + +During the last sprint we wrapped up some features, while preparing for conference season and the announcement of Public Preview. The new release of Visual Studio 2015 RC has some improvements in how we integrate with the NuGet package manager. It supports additional project types, including Windows 10. + +##iOS and Android support + +Our [iOS](http://azure.microsoft.com/documentation/articles/app-insights-ios/) and [Android](http://azure.microsoft.com/documentation/articles/app-insights-android/) SDKs are now released, together with supporting overview pages in the portal. They provide usage insights and crash diagnostics, thanks to the powerful capabilities we are integrating from [HockeyApp](http://blogs.msdn.com/b/somasegar/archive/2014/12/11/microsoft-acquires-hockeyapp-leading-mobile-crash-analytics-and-beta-distribution-service-for-ios-android-and-windows-phone.aspx). + +##Performance counters for Java applications + +The latest release of the SDK for Java (version 0.9.3) collects performance counters and unhandled exceptions. + +From the Overview blade, click Servers to see performance counters. + +![Performance counters for Java apps](_img/5_11_01.png) + +If you want to see other performance counters, you can edit the Application Insights configuration file and choose from any counters exposed by the JMV or Windows. The information about these performance counters will be visible as custom metrics in Metric Explorer. + +![Custom metrics for performance counters](_img/5_11_02.png) + +##Unhandled exceptions in Java apps + +Unhandled exceptions are displayed in the same way as custom exceptions. To see them, click Failures on the Overview blade. + +![Unhandled exceptions in Java apps](_img/5_11_03.png) + +##Drag-across to select a time range + +You can now drag to select a specific time range within a chart on the ASP.NET overview blade. Grab the small triangles near the x-axis: + +![Fine time selection process](_img/5_11_04.png) + +A zoomed-in view of this region appears in a child Metrics Explorer blade. + +##That's Sprint 82 + +Wrapping up Sprint 82 was exciting as it aligned with some major announcements, and our continued integration with Visual Studio 2015 RC, which released during the same week. + +We are very interested in hearing about how we are doing, so please submit questions and issues to [Forums](https://social.msdn.microsoft.com/Forums/vstudio/en-US/home?forum=ApplicationInsights), bugs to [Connect](http://connect.microsoft.com/VisualStudio) (select Application Insights), and suggestions to [User Voice](http://visualstudio.uservoice.com/forums/121579-visual-studio/category/77108-application-insights). + +Thanks, + +David Lubash \ No newline at end of file diff --git a/release-notes/2015/may-15-team-services.md b/release-notes/2015/may-15-team-services.md new file mode 100644 index 00000000000..4cc61dfa062 --- /dev/null +++ b/release-notes/2015/may-15-team-services.md @@ -0,0 +1,103 @@ +--- +title: Build preview, updated backlog navigation, branch policies, and more... – May 15 +description: VSTS release notes for May 15 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: fbacd947-48da-4483-b04b-60170c11b221 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Build preview, updated backlog navigation, branch policies, and more... – May 15 + +**Note:** The improvements discussed in this post will be rolling out over the next week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +You might think that this would be a light deployment for us, given all the [announcements](http://blogs.msdn.com/b/bharry/archive/2015/04/29/visual-studio-and-team-foundation-server-at-build-2015.aspx) made over the past two weeks at [BUILD](http://buildwindows.com/) and [Ignite](http://ignite.microsoft.com/)… but you’d be wrong. :-) Let’s jump right in… + +##Build Preview now publicly available + +The next version of our build system is now publicly available on Visual Studio Online. In addition to all of the [new capabilities](http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/12/build-futures.aspx), you also have access to the Hosted queue, enabling you to run builds on Virtual Machines running in Azure. For our initial public preview, any builds you run in the hosted pool will not count against your 60 free build minutes or subscription. + +![New build system in preview](_img/5_15_01.png) + +Included in the preview is support for building projects hosted in public or private GitHub repositories. You can now set up a continuous integration build in Visual Studio Online that kicks off when code is pushed to your GitHub repository. The build results page provides a link to the associated GitHub commits and the status of these commits updates based on the result of the build. You can also show the status of the build on your GitHub repository’s readme file or on your own web site. To enable, navigate to the **General** tab of your build definition and check the **Badge enabled** box. You can then embed the provided image URL onto a markdown or HTML page so users can see the latest status of the repository. + +To learn more, please visit [https://msdn.microsoft.com/en-us/Library/vs/alm/Build/overview](https://msdn.microsoft.com/en-us/Library/vs/alm/Build/overview). + +##Backlog navigation updates + +This week’s deployment brings a major overhaul to the navigation of backlogs. There’s a lot here, so let me highlight a few things you’ll want to note. + +From every backlog, you can now drill down into the levels below, all the way down to Tasks. In addition, from every backlog, you can now toggle on/off the levels above your backlog using the **Parents** filter. Items not owned by the team, but pulled in based on relationship, display with a hollowed-out color bar. This lets you at a glance differentiate items your team owns from those owned by other teams. + +Finally, you can reorder and reparent in every view! Just drag and drop in any of these views to reorder items and change relationships. + +![Reordering items in the Backlog](_img/5_15_02.png) + +##Opt-in to portfolio backlog levels + +Related to the navigation updates, you can now turn off backlog levels that your team isn’t using. Prior to this update, all backlog levels were forced on every team. Each backlog level is now “opt-in” allowing you to configure the levels appropriate for your team. Click the gear at the top of the page, select the team you’re configuring, and then choose the backlog levels you need. + +![Choosing portfolio backlog levels](_img/5_15_03.png) + +##SAFe support and process updates + +We updated our three out-of-the-box process templates to include new fields and a new work item type, Epic, to better support the Scaled Agile Framework (SAFe). + +![New work item type, Epic](_img/5_15_04.png) + +The Epic work item is also bound to a new optional backlog level. Using the steps above, you can turn/off this new level as desired. We also made a few process updates to address some usability issues. You can read more about the process changes in a [post](http://blogs.msdn.com/b/visualstudioalm/archive/2015/05/14/scaled-agile-framework-visual-studio-online-process-template-updates.aspx) written by Gregg Boer. + +##Kanban and Taskboard improvements + +The Kanban board gets a bit more love this sprint with three new features. + +- Custom fields added to your cards are now directly editable from the board. +- The first and last columns on your board are now collapsible. +- The first column now supports paging when filtering across long backlogs + +![Kanban board improvements](_img/5_15_05.png) + +The Taskboard gets a bunch of love as well, including things we added to the Kanban board in previous sprints: + +- Adding custom fields to cards +- Custom fields added to your cards are now directly editable from the board (just like above) +- Adding tags to cards + +We also tweaked the card layout a bit to optimize for smaller titles, ensuring that you can get the maximum numbers of cards on your board. + +![Taskboard tiles tweaked for smaller layout](_img/5_15_06.png) + +##Branch policies + +To help teams using Git improve the quality of code going into their repo, we’ve added a new capability to set policies on branches. These new policies enable teams to configure requirements for their development branches that are enforced by the server when pushing or merging pull requests. Build breaks can be prevented by using the build policy to require that all changes entering a branch pass a configured build. + +![Setting branch pull request policies](_img/5_15_07.png) + +Code review policies can be used to set a minimum number of reviewers for pull requests, or even require specific users to review changes made to specific portions of your codebase. + +![Setting code review requirements](_img/5_15_08.png) + +##OAuth support for accessing Git repos on VSO + +Third-party tools and services can now access Git repositories hosted in Visual Studio Online via the "vso.code" or "vso.code_write" OAuth scopes. This enables source code access from standard Git tools and enables clone, fetch, and push operations. Previously, enabling access was available only through our REST API. See [Authorize access with OAuth 2.0](https://www.visualstudio.com/integrate/get-started/auth/oauth) for more details. + +##New filtering options for Git service hook events + +You can now filter Git Push and Git Pull Request service hook events by group membership. For example, you can now trigger a notification to HipChat or Slack only when someone on your team creates a pull request or pushes a code change. For push events, you can choose a group to which the person that pushed must belong. For pull requests, you can choose a group to which the pull request originator belongs and/or choose a group that must be included in the set of reviewers. + +To learn more about all the services, see [Integrate with service hooks](https://www.visualstudio.com/get-started/integrate/integrating-with-service-hooks-vs). + +##Power BI & Visual Studio Online + +Finally, at the [BUILD](http://buildwindows.com/) conference two weeks ago, we announced our new Power BI integration for VS Online. If you have not had a chance to see it yet, read [Jeff Levinson’s post](http://blogs.msdn.com/b/visualstudioalm/archive/2015/05/04/gain-understanding-and-insights-into-projects-in-visual-studio-online-with-power-bi.aspx) on how to get started. + +![Power BI integration](_img/5_15_09.png) + +That’s a wrap for sprint 82. If you have questions, feel free to reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)). If you have ideas on what you’d like to see us prioritize, head over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2015/nov-18-team-services.md b/release-notes/2015/nov-18-team-services.md new file mode 100644 index 00000000000..0f8c45e30bf --- /dev/null +++ b/release-notes/2015/nov-18-team-services.md @@ -0,0 +1,89 @@ +--- +title: Extensions, Previews, and more – Nov 18 +description: VSTS release notes for November 18 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: a3dd10a2-5d57-4168-9b5a-0a14e82ac9eb +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Extensions, Previews, and more – Nov 18 + +Today is our [Connect(); developer event](http://connect2015.visualstudio.com/) and we have a ton of news for VS Online… + +##Visual Studio Team Services + +Let’s start the news with our new name! Visual Studio Online has been renamed to Visual Studio Team Services. Only the official name has changed; everything else, like your url—<account>.visualstudio.com—remains the same. We’ve seen a ton of confusion with people thinking VS Online is a browser-based IDE. Of course, it is not. The name change is part of our effort to dispel some of that confusion. It will undoubtedly take a while for all occurrences of Visual Studio Online to be changed, but expect it will gradually happen. + +##Extensions and the new Marketplace + +Today we are introducing a new extensions model for VSTS and a marketplace to find and install them. Extensions enable first-class, integrated experiences that extend and enhance the Team Services web experience, either by adding new capabilities or integrating with existing services. Extensions can contribute—hubs, custom controls, context menus, dashboard widgets, build and release tasks, and more. + +Users can discover extensions via the new Visual Studio Marketplace. The Marketplace provides a single place for developers to find extensions for Visual Studio, Visual Studio Team Services, and Visual Studio Code. The marketplace will support both community and commercial extensions. Start browsing the Marketplace today: [https://marketplace.visualstudio.com](https://marketplace.visualstudio.com/). + +![Visual Studio Marketplace](_img/11_18_01.png) + +There are lots of Team Services extensions available in the marketplace today, but there’s room for a whole lot more. Developing extensions is straightforward and anyone can do it. To get started, visit [http://aka.ms/vsoextensions](http://aka.ms/vsoextensions). + +##Release Management public preview + +Today, we are announcing the public preview of Release Management service in Team Services. Using Release Management, you can automate the delivery of your software all the way to production. You can define multiple environments to stage your releases through to manage testing, sign-off and exposure. It is an essential element of DevOps that helps your team continuously deliver software to your customers at a faster pace and with lower risk. + +To use Release Management, create release definitions, in which you specify the automation steps that should be run in each environment. These automation steps deploy your software and run tests against it. You can group multiple environments in each definition to model your software lifecycle. You can then set up the deployment in each environment to be automatically triggered upon completion of a build, or on successful deployment to a previous environment. + +![Browsing release definitions](_img/11_18_02.png) + +This Release Management update has a number of improvements over our previous version: + +- Manage releases from the Team Services Web UI rather than installing a desktop app. +- Use the same agents, task model, and extensibility model as the new Build system, enabling seamless migration from continuous delivery to staged release practices. +- It has fewer concepts and is easier to get started. + +For more information, and to get started, see the full documentation at [http://aka.ms/rmpreview](http://aka.ms/rmpreview). + +##Package Management public preview + +Today, we are announcing the public preview of a [new package management service](http://blogs.msdn.com/b/visualstudioalm/archive/2015/08/27/announcing-package-management-for-vso-tfs.aspx) on Visual Studio Team Services. This initial preview supports NuGet, but we’ll be adding support additional packaging systems over time. + +This new package management service allows you to create and host Nuget feeds for your organization with no effort. You can use the feeds to publish/manage OSS packages you use, or to publish private packages that you want to share within your organization. The Team Services build-and-release system has tasks that will both publish and restore any Nuget packages you host. + +![Package management service](_img/11_18_03.png) + +##Code Search public preview + +Today, we are announcing the public preview of Code Search in Visual Studio Team Services. With this release you can search for code across all of your TFVC and Git projects in your VSTS account. Not only can you perform full text matching, but for C#, C and C++, you can search for specific contexts, like class definitions, comments, properties, etc. You can enable this preview feature on your VSTS account by installing the Code Search extension. [Learn more about Code Search extension](https://marketplace.visualstudio.com/items/ms.vss-code-search). + +![Code search](_img/11_18_04.png) + +##Test results in Build + +Testing is an important part of a DevOps process. Today we showed a new set of test experiences integrated into the CI/CD experience in Team Services that allows you to get actionable information about your test results. You can try out this new experience by opening the Tests tab on the Build summary page. The first thing you’ll notice is an aggregate summary of test results across all test runs in the build. Tests that were passing in the previous build, but have failed in the current build are flagged as “New failures,” helping you identify possible regressions. For tests that are continuing to fail, you can see how stale the failures are and navigate to the build in which the tests first failed. We have an improved experience to browse failed tests—you can group by different pivots like container, priority, and more. To help you debug a failed test, we show you the error message, stack trace, attachments, and bugs associated with the test in the details pane. Finally, you can find out if a test is flaky by looking at the trend of last ten outcomes of the test. We are releasing this experience as a preview feature on Visual Studio Team Services, and plan to add new features like trend charts, historical results, and more in the upcoming months. You can read more about this experience on the [Visual Studio devops blog](http://blogs.msdn.com/b/visualstudioalm/archive/2015/11/13/test-results-in-build.aspx). + +![Reviewing build test results](_img/11_18_05.png) + +##Exploratory Testing extension + +Since 2010, we’ve had a very nice exploratory testing tool that enables you to do manual exploratory testing, capture and mark up screen shots, collect diagnostic information, file bugs, etc. Today we are announcing the preview of a new browser-based exploratory testing extension. You can now perform exploratory testing of your web applications at any time, right from your Chrome browser, on any platform (Windows, Mac, or Linux)—no need for predefined test cases or test steps. Support for other browsers, like Edge, Firefox, etc., is coming soon. + +Learn more about the Exploratory Testing extension [here](https://marketplace.visualstudio.com/items/ms.vss-exploratorytesting-web) or this [blog](http://blogs.msdn.com/b/visualstudioalm/archive/2015/11/19/announcing-easy-to-use-web-based-exploratory-test-for-visual-studio-team-services.aspx). + +##Test Manager extension + +We’re changing the way you purchase test case management capabilities with Visual Studio Team Services. Until, now, the way you purchased them (assuming you didn’t have a qualifying MSDN subscription) was to buy an Advanced user license for VS Online. Now, with the introduction of the marketplace and Team Services Extensions, we’re eliminating the Advanced License and providing those same capabilities in the Test Manager extension. So now VS Team Services customers, rather than buying an Advanced user license, buy a user license (formerly known as a “Basic user”) and the Test Manager extension. Other than the way it is packaged/named, there’s no change in price or capability. Existing Advanced Users will be seamlessly transitioned to the new model. Learn more about the [Test Manager extension](https://marketplace.visualstudio.com/items/ms.vss-testmanager-web). + +Thanks, + +Brian Harry + + + + + + + + + + diff --git a/release-notes/2015/nov-24-team-services.md b/release-notes/2015/nov-24-team-services.md new file mode 100644 index 00000000000..d59128e1f54 --- /dev/null +++ b/release-notes/2015/nov-24-team-services.md @@ -0,0 +1,66 @@ +--- +title: Git and TFVC together, Package Management build tasks, and more – Nov 24 +description: VSTS release notes for November 24 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: cc94e94f-389a-493a-9044-3fb7e9ad2e27 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Git and TFVC together, Package Management build tasks, and more – Nov 24 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Git and TFVC in the same team project + +Big news! In this sprint, we’ve added the ability to add Git repositories to a team project that was created with TFVC or vice versa. This makes it easier for you to migrate some or all of your code to Git while keeping all the important data in your team project, such as build definitions and work items. + +![Adding a Git repository to a TFVC project](_img/11_24_01.png) + +##Package Management build tasks + +At [Connect()](https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2015/) last week, we launched the new [Package Management](http://blogs.msdn.com/b/visualstudioalm/archive/2015/08/27/announcing-package-management-for-vso-tfs.aspx) preview for VSTS that enables you to share, host, secure, and release binary components across teams. You can get the preview from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items/ms.feed). + +Package management is an important part of your continuous delivery workflow, and we’ve made it even easier to work with your Team Builds and releases. The NuGet Installer and NuGet Publisher build tasks have been updated to work seamlessly with the new Team Services feeds. You can now publish to any authenticated NuGet feed or package source using a service connection, and you’ll see an option to use an internal feed. + +![The NuGet Publisher build task](_img/11_24_02.png) + +##Implement a task once for multiple platforms + +Many build and release tasks are simple wrappers around command line tools that run across multiple platforms. You now have the option to implement a task in JavaScript using the NodeHandler, and it can run on the Windows, Linux, or Mac agents. + +##Pull Request Widget for Dashboards + +Last sprint, we launched the new Dashboards feature that replaces your existing team homepage. We continue to expand the widget catalog and are excited to announce the new pull request widget. With the new widget, you can see pull requests assigned to the team, assigned to you, or created by you in a specified repository. The widget also allows users to navigate quickly to an individual pull request or see the summary of pull requests in the repository. + +![VIewing pull requests assigned to the team](_img/11_24_03.png) + +##@mention and #ID in code + +With this release, you now have the ability to send a direct notification to anyone on your team by using the ‘@’ symbol to mention people. The @mention feature works in pull request discussions in commit comments, changeset comments, and shelveset comments, and we’ll be bringing to it more places across the entire product. The person you @mention will receive an email alert with your comment and a link to the commit, changeset, or shelveset. + +![Using @mention in a discussion](_img/11_24_04.png) + +Also, you can now mention work items by using the ‘#’ symbol in pull request discussions in commit comments, changeset comments, and shelveset comments. You’ll see an auto-complete list of your most recently used work items, so it’s easy to find what you need. Mentioned work items are clickable and open a new tab to the work item experience. + +![Using # to mention a work item in a discussion](_img/11_24_05.png) + +##Reordering cards on boards + +With this sprint, you can now specify how cards will be reordered on boards to optimize for how your team works. You can choose between two card reordering behaviors: freely reorder on the board, or strictly follow the backlog order when changing columns. + +##Global shortcut keys + +For all those keyboard users out there, you’ll love this announcement! Today, we are launching the first set of keyboard shortcuts for the Code and Work hubs to enable easy navigation without ever taking your hands off your keyboard. + +![Global shortcut keys](_img/11_24_06.png) + +Please reach out on Twitter ([@karenkayliu](https://twitter.com/karenkayliu)) if you have thoughts, comments, or questions about anything described here. And please help us prioritize by heading over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Karen Ng + diff --git a/release-notes/2015/oct-08-team-services.md b/release-notes/2015/oct-08-team-services.md new file mode 100644 index 00000000000..2cd3cfd5d86 --- /dev/null +++ b/release-notes/2015/oct-08-team-services.md @@ -0,0 +1,66 @@ +--- +title: AAD Group Support – Oct 8 +description: VSTS release notes for October 8 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.assetid: 5CB114EA-EC65-4FF8-BC71-1B7E4B15D921 +ms.manager: douge +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#AAD Group Support – Oct 8 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Azure Active Directory Group support + +I’m excited to announce that we now have support for [Azure Active Directory](https://www.microsoft.com/en-us/server-cloud/products/azure-active-directory/) (Azure AD) Groups across Visual Studio Online, giving you an easier way to control who can access your team's resources and business assets. If you already use Microsoft services like Office 365 or Azure AD, you can use the same identities now with your VSO account. Azure AD [works with your VSO account](https://www.visualstudio.com/get-started/setup/manage-organization-access-for-your-account-vs) to control access and authenticate users through your organization's directory. + +When you use [Azure AD groups](https://azure.microsoft.com/en-us/documentation/articles/active-directory-manage-groups) to organize directory members, you can reuse those groups to manage permissions in bulk for your VSO account. Just add the Azure AD group to the VSO group that you want, for example, built-in VSO groups like Project Collection Administrators or Contributors, or manually-created VSO groups like your project management team. Azure AD group members will inherit the same permissions from that VSO group, so you don't have to manage VSO group members one at a time. When you add an Azure AD group to a VSO group, we will also auto-assign the best available license when a member of that Azure AD group logs into the VSO account. You can learn more about adding Azure AD groups in VSO under [Manage account access with Azure AD groups](https://www.visualstudio.com/get-started/setup/manage-organization-access-for-your-account-vs). + +##Starting with Git, made easy + +We made a set of changes this sprint to make it easier for you to get started with an empty Git repository, or to clone an existing repo. From the clone command you’ll now see a menu with a bunch of helpful information and actions including creating credentials, cloning in Visual Studio, the full repo URL, and step-by-step instructions for various clients. You’ll also see a similar experience when creating a brand new repo. We’re keen on making it easy to get started here, so let us know if we got it right. + +![Cloning a Git repo in Visual Studio](_img/10_8_01.png) + +##Improved commit details + +The commit details summary experience has been improved to show the commit message at the top with the extended message below it. It also defaults to showing a diff with parent 1, which works well with the new pull request experience that always creates a merge commit. + +![Viewing commit details](_img/10_8_02.png) + +##SonarQube analysis from a Maven build task + +With this week’s deployment you now can perform a SonarQube analysis simply by checking a new option provided on Maven build tasks. + +![The SonarQube analysic option for Maven build tasks](_img/10_8_03.png) + +##PREVIEW: New Work Item form + +And finally, we’ve turned on a preview of our new work item experience that we’d like you to try out. The new form doesn’t just bring a new look and feel, but is one of the key building blocks toward: + +- Work item customization, including states, fields, and types +- A rich work item discussion experience +- Improved code and build integration + +![New work item form (preview)](_img/10_8_04.png) + +Over the next few weeks we’ll be blogging about more of the upcoming changes; in the meantime we’d love to hear from you about your initial reaction to the new form. Know that we’ve already heard from early adopters that data density needs to be improved, so look for that to come very soon. As you’re evaluating for yourself, you can switch back and forth to the old form by clicking the ellipsis (…) in the command bar. + +Please reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)) if you have thoughts, comments, or questions about anything described here. And please help us prioritize by heading over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork + + + + + + + + + diff --git a/release-notes/2015/oct-30-team-services.md b/release-notes/2015/oct-30-team-services.md new file mode 100644 index 00000000000..f654e9b020f --- /dev/null +++ b/release-notes/2015/oct-30-team-services.md @@ -0,0 +1,78 @@ +--- +title: Dashboards, improved pull requests, test results and more – Oct 30 +description: VSTS release notes for October 30 2015 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 961ad637-4194-4b9c-8042-0d4537a71b43 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Dashboards, improved pull requests, test results and more – Oct 30 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Dashboards + +I’m excited to announce that we have released our [dashboards feature](http://blogs.msdn.com/b/visualstudioalm/archive/2015/08/26/agile-project-management-futures-august-2015.aspx) in Visual Studio Online! Dashboards are a customizable canvas and replace your existing Team Overview page. They enable your team to visualize status and monitor progress across your project. + +![Dashboards](_img/10_30_01.png) + +- **Create multiple dashboards.** Until now, the Team Overview page was the only page that teams could use to pin widgets. Now, as a team admin, you can create multiple dashboards using the plus (+) button next to an existing dashboard or through the dashboard manager. The dashboard manager is accessible through the settings icon on the dashboard. +- **Customizable dashboards.** The existing project home pages are now a completely customizable experience, giving you full control of all the data on your screen. As a team admin, you can rearrange, remove, or add the widgets that you want and use. A new widget catalog is accessible to team admins through the large green plus (+) button at the lower right side of the dashboard. +- **New dashboard widgets.** All the pieces of data that used to be available on the previous Team Overview page are now available through the widget catalog. You can still add multiple charts to the dashboard through the Work, Test, and Build hubs. In addition, we’ve brought new widgets into the catalog: a conditional query tile (that allows you to set red or green if the number of work items crosses a threshold); a code tile (recent commits in the last seven days); a query results widget (allows you to see all work items from a query); and a markdown widget (enables custom text, images, and links). + +We are continuing to invest in additional widgets that pull data from all parts of the production: Work, Code, Build, Test, and Release. Widgets are written as [extensions](https://www.visualstudio.com/integrate/extensions/overview), allowing you to write and share your own widgets. As we continue to roll in this space, we’d love to hear what kinds of widgets you’d like to see us invest in. If you’ve got feedback here, please reach out to us at [dashboard-feedback@microsoft.com](mailto:dashboard-feedback@microsoft.com) and continue to help us build an incredible product. + +##Improved pull request experience + +We made a set of changes this sprint to improve the existing pull request experience to make it easier for you to find the pull requests you care about and remove the noise. The pull request hub now has additional filters to help find PRs that are “Mine” (assigned to me, created by me, assigned to your team) or “All”. In addition, PR discussions allow hiding of unwanted system messages, and options allow you to customize the merge message and delete the source branch. + +![Pull request](_img/10_30_02.png) + +We really want to make sure we have a simple to use pull request experience, so let us know if we got it right. + +##Manual test iteration results + +You can now view manual test results, including test step outcomes, test attachments and comments in the Runs tab in the Test hub group. Previously, viewing this detailed test result information was possible only with Microsoft Test Manager (MTM). To get started, open the Recent Test Results pane and then open a test result. + +![Manual test results](_img/10_30_03.png) + +##Retention policy for test results + +We've simplified test result data cleanup and removed the dependency on tools like the Test Attachment Cleaner. With the new feature to manage test result retention policies, you can now clean up all test result data in the system, including test runs, test results, and test attachments that are older than a specified number of days. This retention policy is configured at a team project level. You can specify separate policies for automated and manual test results, offering the flexibility to retain manual test results longer than automated test results. + +![Test results retention policies](_img/10_30_04.png) + +We are also integrating test retention with the retention policy of the new build system (Build vNext) by adding functionality to delete test results when builds are deleted. More information about this feature is available on the [Visual Studio devops blog](http://blogs.msdn.com/b/visualstudioalm/archive/2015/10/08/test-result-data-retention-with-team-foundation-server-2015.aspx). + +##Reorder and re-parent tasks from the Kanban board + +We’ve introduced the ability to reorder and re-parent tasks within a checklist direction from the Kanban board, making it easier to manage tasks. + +![Reordering on the Kanban board](_img/10_30_05.png) + +##Extensibility on the work item form + +For those of you eager to get started writing [extensions](https://www.visualstudio.com/integrate/extensions/overview), the ability to extend both the existing and the new work item form is now available! The open extensibility points include: + +- New page contributions shown as an additional page on the work item form +- New group contributions will be added as a group in the form +- New action contributions will be added as a toolbar button + +##PREVIEW: Updates to the new work item form + +Last sprint we released a preview of the new work item form. Since then, we’ve received feedback that the state field feels too much like a label, which causes discoverability issues. So we’ve enabled state coloring in the new work item form to differentiate the first, middle, and last states to create a visual language for this field. + +Please reach out on Twitter ([@karenkayliu](https://twitter.com/karenkayliu)) if you have thoughts, comments, or questions about anything described here. And please help us prioritize by heading over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Karen Ng + + + + + diff --git a/release-notes/2015/sep-18-team-services.md b/release-notes/2015/sep-18-team-services.md new file mode 100644 index 00000000000..095c9eb809c --- /dev/null +++ b/release-notes/2015/sep-18-team-services.md @@ -0,0 +1,81 @@ +--- +title: Kanban Updates, new Branch Policies, and more... – Sep 18 +description: VSTS release notes for September 18 2015 +ms.assetid: 9232867d-6a5f-4716-8d60-c3e5debc311d +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Kanban Updates, new Branch Policies, and more... – Sep 18 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Inline tasks on the Kanban board + +This sprint we’ve enabled a new feature that lets you break down stories on your Kanban board, without having to leave the board. Tasks can now be added, edited, and marked as done directly from the parent card on your board. A summary of the roll-up status indicates how many Tasks have been completed and how many remain. + +![Working with tasks directly on the Kanban board](_img/9_18_01.png) + +##Query and display of Kanban fields + +Data from your Kanban board, including the board column, column done indicator, and board swim lane, are all now available, enabling you to create queries, charts, and styling rules based on them. These fields show up in all column option pickers, and can be exported as read-only fields in Excel. You’ll see three new fields in work item experiences: + +1. Board Column: current Kanban board column the work item is in. +2. Board Column Done: False (Doing) or True (Done) value depending on whether the work item is in the Doing or Done split column on the Kanban board. +3. Board Lane: current Kanban board swim lane. + +I’m happy to report that [UserVoice item #121579](http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6590592-enable-kanban-column-field-to-be-used-in-work-item) has been marked as completed. + +![Querying Kanban fields](_img/9_18_02.png) + +##Multi-select items on the backlog + +[Last month](aug-07-team-services.md) we enabled multi-select on the product backlog… we’re back this sprint with some additional capabilities including: + +- Drag-and-drop reordering and re-parenting +- Dragging items to an iteration +- Dragging items to the mapping pane +- Support for "move to top" and "move to position" on the context menu + +![Dragging multiple items on the backlog](_img/9_18_03.png) + +##Branch policy to require linked work items + +We now have a branch policy to require associated work items for any pull request. Like the code reviewer and build policies, any code submitted to the branch must be submitted via pull request. When a pull request is created, the associated commits will be inspected for work item links, and if there is at least one link, the policy will be fulfilled. Also, you can now link work items to pull requests directly, and if the pull request is directly linked to at least one work item, the policy will be fulfilled. If no work items are linked to the pull request or the associated commits, the policy will fail. + +![Setting branch policies](_img/9_18_04.png) + +##Export test outcomes + +The Export Test Plan feature in Test Hub lets you email or print a test plan in a review-friendly format. Until now, you could export test authoring–centric information such as test plan, test suite hierarchy, test configurations and test cases. We are now enabling support for exporting test execution information, allowing you to share detailed status of test execution progress with stakeholders. + +![Sample test execution export](_img/9_18_05.png) + +In the export selection dialog, you can choose to export the latest test outcome, which will export the latest test result for all tests of a test case, including fields like the time when the test was run, the build that was tested, the configuration that was tested, the tester who was assigned the test and the identity who actually ran the test. + +##Work item trend and rollup reporting in Power BI + +Earlier this month we blogged about improvements in the Visual Studio Online Power BI Connector to support trend and rollup reporting. Have a look at [Jeff’s blog post](http://blogs.msdn.com/b/visualstudioalm/archive/2015/09/04/general-availability-of-work-item-trend-and-rollup-reporting-in-power-bi.aspx) for more details. + +##Support for publishing xUnit results + +And finally, we’ve added the ability to publish xUnit results natively through the **Publish Test Results** task. + +That’s it for sprint 88. Please reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)) if you have questions. If you have ideas on things you’d like to see us prioritize, head over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork + + + + + + + + + diff --git a/release-notes/2016/_img/10_12_01.png b/release-notes/2016/_img/10_12_01.png new file mode 100644 index 00000000000..d7142990c7e Binary files /dev/null and b/release-notes/2016/_img/10_12_01.png differ diff --git a/release-notes/2016/_img/10_12_02.png b/release-notes/2016/_img/10_12_02.png new file mode 100644 index 00000000000..efac1459281 Binary files /dev/null and b/release-notes/2016/_img/10_12_02.png differ diff --git a/release-notes/2016/_img/10_12_03.png b/release-notes/2016/_img/10_12_03.png new file mode 100644 index 00000000000..d858944f20b Binary files /dev/null and b/release-notes/2016/_img/10_12_03.png differ diff --git a/release-notes/2016/_img/10_12_04.png b/release-notes/2016/_img/10_12_04.png new file mode 100644 index 00000000000..0401f03821f Binary files /dev/null and b/release-notes/2016/_img/10_12_04.png differ diff --git a/release-notes/2016/_img/10_12_05.png b/release-notes/2016/_img/10_12_05.png new file mode 100644 index 00000000000..e09878c3400 Binary files /dev/null and b/release-notes/2016/_img/10_12_05.png differ diff --git a/release-notes/2016/_img/10_12_06.png b/release-notes/2016/_img/10_12_06.png new file mode 100644 index 00000000000..90d5a9bb9ea Binary files /dev/null and b/release-notes/2016/_img/10_12_06.png differ diff --git a/release-notes/2016/_img/10_12_07.png b/release-notes/2016/_img/10_12_07.png new file mode 100644 index 00000000000..d716d0024d1 Binary files /dev/null and b/release-notes/2016/_img/10_12_07.png differ diff --git a/release-notes/2016/_img/10_12_08.png b/release-notes/2016/_img/10_12_08.png new file mode 100644 index 00000000000..99844468d26 Binary files /dev/null and b/release-notes/2016/_img/10_12_08.png differ diff --git a/release-notes/2016/_img/10_12_09.png b/release-notes/2016/_img/10_12_09.png new file mode 100644 index 00000000000..f630a72f4ee Binary files /dev/null and b/release-notes/2016/_img/10_12_09.png differ diff --git a/release-notes/2016/_img/10_12_10.png b/release-notes/2016/_img/10_12_10.png new file mode 100644 index 00000000000..52921990900 Binary files /dev/null and b/release-notes/2016/_img/10_12_10.png differ diff --git a/release-notes/2016/_img/10_12_11.png b/release-notes/2016/_img/10_12_11.png new file mode 100644 index 00000000000..436854b8d0e Binary files /dev/null and b/release-notes/2016/_img/10_12_11.png differ diff --git a/release-notes/2016/_img/10_12_12.png b/release-notes/2016/_img/10_12_12.png new file mode 100644 index 00000000000..e2b5e0c3f0d Binary files /dev/null and b/release-notes/2016/_img/10_12_12.png differ diff --git a/release-notes/2016/_img/10_12_13.png b/release-notes/2016/_img/10_12_13.png new file mode 100644 index 00000000000..17cb0345f64 Binary files /dev/null and b/release-notes/2016/_img/10_12_13.png differ diff --git a/release-notes/2016/_img/10_12_14.png b/release-notes/2016/_img/10_12_14.png new file mode 100644 index 00000000000..68ba246f94a Binary files /dev/null and b/release-notes/2016/_img/10_12_14.png differ diff --git a/release-notes/2016/_img/10_12_15.png b/release-notes/2016/_img/10_12_15.png new file mode 100644 index 00000000000..ca939d95705 Binary files /dev/null and b/release-notes/2016/_img/10_12_15.png differ diff --git a/release-notes/2016/_img/10_12_16.png b/release-notes/2016/_img/10_12_16.png new file mode 100644 index 00000000000..1cd07f6805e Binary files /dev/null and b/release-notes/2016/_img/10_12_16.png differ diff --git a/release-notes/2016/_img/10_12_17.png b/release-notes/2016/_img/10_12_17.png new file mode 100644 index 00000000000..6599c983a0e Binary files /dev/null and b/release-notes/2016/_img/10_12_17.png differ diff --git a/release-notes/2016/_img/10_12_18.png b/release-notes/2016/_img/10_12_18.png new file mode 100644 index 00000000000..b3a697a477a Binary files /dev/null and b/release-notes/2016/_img/10_12_18.png differ diff --git a/release-notes/2016/_img/10_12_19.png b/release-notes/2016/_img/10_12_19.png new file mode 100644 index 00000000000..1e6ae2046ad Binary files /dev/null and b/release-notes/2016/_img/10_12_19.png differ diff --git a/release-notes/2016/_img/10_12_20.png b/release-notes/2016/_img/10_12_20.png new file mode 100644 index 00000000000..615827ae70e Binary files /dev/null and b/release-notes/2016/_img/10_12_20.png differ diff --git a/release-notes/2016/_img/11_02_01.png b/release-notes/2016/_img/11_02_01.png new file mode 100644 index 00000000000..6ecc45581f6 Binary files /dev/null and b/release-notes/2016/_img/11_02_01.png differ diff --git a/release-notes/2016/_img/11_02_02.png b/release-notes/2016/_img/11_02_02.png new file mode 100644 index 00000000000..4d5da636253 Binary files /dev/null and b/release-notes/2016/_img/11_02_02.png differ diff --git a/release-notes/2016/_img/11_02_03.png b/release-notes/2016/_img/11_02_03.png new file mode 100644 index 00000000000..7a75dbfc7a4 Binary files /dev/null and b/release-notes/2016/_img/11_02_03.png differ diff --git a/release-notes/2016/_img/11_02_04.png b/release-notes/2016/_img/11_02_04.png new file mode 100644 index 00000000000..a986364be6c Binary files /dev/null and b/release-notes/2016/_img/11_02_04.png differ diff --git a/release-notes/2016/_img/11_02_05.png b/release-notes/2016/_img/11_02_05.png new file mode 100644 index 00000000000..c15bd3067d8 Binary files /dev/null and b/release-notes/2016/_img/11_02_05.png differ diff --git a/release-notes/2016/_img/11_02_06.png b/release-notes/2016/_img/11_02_06.png new file mode 100644 index 00000000000..8a117d8567c Binary files /dev/null and b/release-notes/2016/_img/11_02_06.png differ diff --git a/release-notes/2016/_img/11_02_07.png b/release-notes/2016/_img/11_02_07.png new file mode 100644 index 00000000000..20d2022c540 Binary files /dev/null and b/release-notes/2016/_img/11_02_07.png differ diff --git a/release-notes/2016/_img/11_02_08.png b/release-notes/2016/_img/11_02_08.png new file mode 100644 index 00000000000..2d5f0e3ce89 Binary files /dev/null and b/release-notes/2016/_img/11_02_08.png differ diff --git a/release-notes/2016/_img/11_02_10.png b/release-notes/2016/_img/11_02_10.png new file mode 100644 index 00000000000..5d2af69477e Binary files /dev/null and b/release-notes/2016/_img/11_02_10.png differ diff --git a/release-notes/2016/_img/11_23_01.png b/release-notes/2016/_img/11_23_01.png new file mode 100644 index 00000000000..77913e1dd50 Binary files /dev/null and b/release-notes/2016/_img/11_23_01.png differ diff --git a/release-notes/2016/_img/11_23_02.png b/release-notes/2016/_img/11_23_02.png new file mode 100644 index 00000000000..ab28c65593d Binary files /dev/null and b/release-notes/2016/_img/11_23_02.png differ diff --git a/release-notes/2016/_img/11_23_03.png b/release-notes/2016/_img/11_23_03.png new file mode 100644 index 00000000000..fa8698b78fe Binary files /dev/null and b/release-notes/2016/_img/11_23_03.png differ diff --git a/release-notes/2016/_img/11_23_04.png b/release-notes/2016/_img/11_23_04.png new file mode 100644 index 00000000000..a4b39536998 Binary files /dev/null and b/release-notes/2016/_img/11_23_04.png differ diff --git a/release-notes/2016/_img/11_23_05.png b/release-notes/2016/_img/11_23_05.png new file mode 100644 index 00000000000..917b4e747f2 Binary files /dev/null and b/release-notes/2016/_img/11_23_05.png differ diff --git a/release-notes/2016/_img/11_23_06.png b/release-notes/2016/_img/11_23_06.png new file mode 100644 index 00000000000..79ad6fdc902 Binary files /dev/null and b/release-notes/2016/_img/11_23_06.png differ diff --git a/release-notes/2016/_img/11_23_07.png b/release-notes/2016/_img/11_23_07.png new file mode 100644 index 00000000000..fc1dffafff4 Binary files /dev/null and b/release-notes/2016/_img/11_23_07.png differ diff --git a/release-notes/2016/_img/11_23_08.png b/release-notes/2016/_img/11_23_08.png new file mode 100644 index 00000000000..fa6c7345be2 Binary files /dev/null and b/release-notes/2016/_img/11_23_08.png differ diff --git a/release-notes/2016/_img/11_23_09.png b/release-notes/2016/_img/11_23_09.png new file mode 100644 index 00000000000..3a534a6b388 Binary files /dev/null and b/release-notes/2016/_img/11_23_09.png differ diff --git a/release-notes/2016/_img/1_25_01.png b/release-notes/2016/_img/1_25_01.png new file mode 100644 index 00000000000..f021b8a39f9 Binary files /dev/null and b/release-notes/2016/_img/1_25_01.png differ diff --git a/release-notes/2016/_img/1_25_02.png b/release-notes/2016/_img/1_25_02.png new file mode 100644 index 00000000000..128b0573dce Binary files /dev/null and b/release-notes/2016/_img/1_25_02.png differ diff --git a/release-notes/2016/_img/1_25_03.png b/release-notes/2016/_img/1_25_03.png new file mode 100644 index 00000000000..b754d91cd74 Binary files /dev/null and b/release-notes/2016/_img/1_25_03.png differ diff --git a/release-notes/2016/_img/1_25_04.png b/release-notes/2016/_img/1_25_04.png new file mode 100644 index 00000000000..2450e5e8654 Binary files /dev/null and b/release-notes/2016/_img/1_25_04.png differ diff --git a/release-notes/2016/_img/1_25_05.png b/release-notes/2016/_img/1_25_05.png new file mode 100644 index 00000000000..fbead5b1de8 Binary files /dev/null and b/release-notes/2016/_img/1_25_05.png differ diff --git a/release-notes/2016/_img/1_25_06.png b/release-notes/2016/_img/1_25_06.png new file mode 100644 index 00000000000..e0b1a998967 Binary files /dev/null and b/release-notes/2016/_img/1_25_06.png differ diff --git a/release-notes/2016/_img/1_25_07.png b/release-notes/2016/_img/1_25_07.png new file mode 100644 index 00000000000..763e9429f75 Binary files /dev/null and b/release-notes/2016/_img/1_25_07.png differ diff --git a/release-notes/2016/_img/1_25_08.png b/release-notes/2016/_img/1_25_08.png new file mode 100644 index 00000000000..81d383e2b08 Binary files /dev/null and b/release-notes/2016/_img/1_25_08.png differ diff --git a/release-notes/2016/_img/1_25_09.png b/release-notes/2016/_img/1_25_09.png new file mode 100644 index 00000000000..ef541fa6e64 Binary files /dev/null and b/release-notes/2016/_img/1_25_09.png differ diff --git a/release-notes/2016/_img/1_25_10.png b/release-notes/2016/_img/1_25_10.png new file mode 100644 index 00000000000..2b10dd4698f Binary files /dev/null and b/release-notes/2016/_img/1_25_10.png differ diff --git a/release-notes/2016/_img/1_25_11.png b/release-notes/2016/_img/1_25_11.png new file mode 100644 index 00000000000..a17bd313e8f Binary files /dev/null and b/release-notes/2016/_img/1_25_11.png differ diff --git a/release-notes/2016/_img/1_25_12.png b/release-notes/2016/_img/1_25_12.png new file mode 100644 index 00000000000..1b0c563c4ac Binary files /dev/null and b/release-notes/2016/_img/1_25_12.png differ diff --git a/release-notes/2016/_img/1_25_13.png b/release-notes/2016/_img/1_25_13.png new file mode 100644 index 00000000000..a1235b324f3 Binary files /dev/null and b/release-notes/2016/_img/1_25_13.png differ diff --git a/release-notes/2016/_img/1_25_14.png b/release-notes/2016/_img/1_25_14.png new file mode 100644 index 00000000000..904b720c195 Binary files /dev/null and b/release-notes/2016/_img/1_25_14.png differ diff --git a/release-notes/2016/_img/1_25_15.png b/release-notes/2016/_img/1_25_15.png new file mode 100644 index 00000000000..668c595fe98 Binary files /dev/null and b/release-notes/2016/_img/1_25_15.png differ diff --git a/release-notes/2016/_img/1_25_16.png b/release-notes/2016/_img/1_25_16.png new file mode 100644 index 00000000000..198cab533bb Binary files /dev/null and b/release-notes/2016/_img/1_25_16.png differ diff --git a/release-notes/2016/_img/1_25_17.png b/release-notes/2016/_img/1_25_17.png new file mode 100644 index 00000000000..790ba0764aa Binary files /dev/null and b/release-notes/2016/_img/1_25_17.png differ diff --git a/release-notes/2016/_img/1_25_18.png b/release-notes/2016/_img/1_25_18.png new file mode 100644 index 00000000000..2b05947509c Binary files /dev/null and b/release-notes/2016/_img/1_25_18.png differ diff --git a/release-notes/2016/_img/1_25_19.png b/release-notes/2016/_img/1_25_19.png new file mode 100644 index 00000000000..2f5884b24bc Binary files /dev/null and b/release-notes/2016/_img/1_25_19.png differ diff --git a/release-notes/2016/_img/1_25_20.png b/release-notes/2016/_img/1_25_20.png new file mode 100644 index 00000000000..dd95b051c78 Binary files /dev/null and b/release-notes/2016/_img/1_25_20.png differ diff --git a/release-notes/2016/_img/1_25_21.png b/release-notes/2016/_img/1_25_21.png new file mode 100644 index 00000000000..561f0fbf4ca Binary files /dev/null and b/release-notes/2016/_img/1_25_21.png differ diff --git a/release-notes/2016/_img/1_25_22.png b/release-notes/2016/_img/1_25_22.png new file mode 100644 index 00000000000..c35befb4f1c Binary files /dev/null and b/release-notes/2016/_img/1_25_22.png differ diff --git a/release-notes/2016/_img/1_25_23.png b/release-notes/2016/_img/1_25_23.png new file mode 100644 index 00000000000..a58e4ab0c44 Binary files /dev/null and b/release-notes/2016/_img/1_25_23.png differ diff --git a/release-notes/2016/_img/1_25_24.png b/release-notes/2016/_img/1_25_24.png new file mode 100644 index 00000000000..af91bb6d21e Binary files /dev/null and b/release-notes/2016/_img/1_25_24.png differ diff --git a/release-notes/2016/_img/1_25_25.png b/release-notes/2016/_img/1_25_25.png new file mode 100644 index 00000000000..93a57ca1c7d Binary files /dev/null and b/release-notes/2016/_img/1_25_25.png differ diff --git a/release-notes/2016/_img/1_25_26.png b/release-notes/2016/_img/1_25_26.png new file mode 100644 index 00000000000..7d527a03304 Binary files /dev/null and b/release-notes/2016/_img/1_25_26.png differ diff --git a/release-notes/2016/_img/2_16_01.png b/release-notes/2016/_img/2_16_01.png new file mode 100644 index 00000000000..e60ab162487 Binary files /dev/null and b/release-notes/2016/_img/2_16_01.png differ diff --git a/release-notes/2016/_img/2_16_02.png b/release-notes/2016/_img/2_16_02.png new file mode 100644 index 00000000000..72ca4ebea19 Binary files /dev/null and b/release-notes/2016/_img/2_16_02.png differ diff --git a/release-notes/2016/_img/2_16_03.png b/release-notes/2016/_img/2_16_03.png new file mode 100644 index 00000000000..698ded9b21a Binary files /dev/null and b/release-notes/2016/_img/2_16_03.png differ diff --git a/release-notes/2016/_img/2_16_04.png b/release-notes/2016/_img/2_16_04.png new file mode 100644 index 00000000000..edcf3d7323b Binary files /dev/null and b/release-notes/2016/_img/2_16_04.png differ diff --git a/release-notes/2016/_img/2_16_05.png b/release-notes/2016/_img/2_16_05.png new file mode 100644 index 00000000000..8ec1bf345ef Binary files /dev/null and b/release-notes/2016/_img/2_16_05.png differ diff --git a/release-notes/2016/_img/2_16_06.png b/release-notes/2016/_img/2_16_06.png new file mode 100644 index 00000000000..9ae8f8e2274 Binary files /dev/null and b/release-notes/2016/_img/2_16_06.png differ diff --git a/release-notes/2016/_img/2_16_07.png b/release-notes/2016/_img/2_16_07.png new file mode 100644 index 00000000000..196629011d5 Binary files /dev/null and b/release-notes/2016/_img/2_16_07.png differ diff --git a/release-notes/2016/_img/3_24_01.png b/release-notes/2016/_img/3_24_01.png new file mode 100644 index 00000000000..8edff73e5fe Binary files /dev/null and b/release-notes/2016/_img/3_24_01.png differ diff --git a/release-notes/2016/_img/3_24_02.png b/release-notes/2016/_img/3_24_02.png new file mode 100644 index 00000000000..c0ebaabab5a Binary files /dev/null and b/release-notes/2016/_img/3_24_02.png differ diff --git a/release-notes/2016/_img/3_24_03.png b/release-notes/2016/_img/3_24_03.png new file mode 100644 index 00000000000..1a2479ed7c8 Binary files /dev/null and b/release-notes/2016/_img/3_24_03.png differ diff --git a/release-notes/2016/_img/3_24_04.png b/release-notes/2016/_img/3_24_04.png new file mode 100644 index 00000000000..1db31e8f84d Binary files /dev/null and b/release-notes/2016/_img/3_24_04.png differ diff --git a/release-notes/2016/_img/3_24_05.png b/release-notes/2016/_img/3_24_05.png new file mode 100644 index 00000000000..9275f812a7a Binary files /dev/null and b/release-notes/2016/_img/3_24_05.png differ diff --git a/release-notes/2016/_img/3_24_06.png b/release-notes/2016/_img/3_24_06.png new file mode 100644 index 00000000000..10e5627fb0b Binary files /dev/null and b/release-notes/2016/_img/3_24_06.png differ diff --git a/release-notes/2016/_img/3_3_01.png b/release-notes/2016/_img/3_3_01.png new file mode 100644 index 00000000000..731e120ec3b Binary files /dev/null and b/release-notes/2016/_img/3_3_01.png differ diff --git a/release-notes/2016/_img/3_3_02.png b/release-notes/2016/_img/3_3_02.png new file mode 100644 index 00000000000..4d4847c03fd Binary files /dev/null and b/release-notes/2016/_img/3_3_02.png differ diff --git a/release-notes/2016/_img/3_3_03.png b/release-notes/2016/_img/3_3_03.png new file mode 100644 index 00000000000..4adf45d04ad Binary files /dev/null and b/release-notes/2016/_img/3_3_03.png differ diff --git a/release-notes/2016/_img/3_3_04.png b/release-notes/2016/_img/3_3_04.png new file mode 100644 index 00000000000..695b1ee11b1 Binary files /dev/null and b/release-notes/2016/_img/3_3_04.png differ diff --git a/release-notes/2016/_img/3_3_05.png b/release-notes/2016/_img/3_3_05.png new file mode 100644 index 00000000000..fd369be8c2d Binary files /dev/null and b/release-notes/2016/_img/3_3_05.png differ diff --git a/release-notes/2016/_img/3_3_06.png b/release-notes/2016/_img/3_3_06.png new file mode 100644 index 00000000000..8441b8d8fbf Binary files /dev/null and b/release-notes/2016/_img/3_3_06.png differ diff --git a/release-notes/2016/_img/3_3_07.png b/release-notes/2016/_img/3_3_07.png new file mode 100644 index 00000000000..885d3bc3990 Binary files /dev/null and b/release-notes/2016/_img/3_3_07.png differ diff --git a/release-notes/2016/_img/3_3_08.png b/release-notes/2016/_img/3_3_08.png new file mode 100644 index 00000000000..da3554c8579 Binary files /dev/null and b/release-notes/2016/_img/3_3_08.png differ diff --git a/release-notes/2016/_img/4_13_01.png b/release-notes/2016/_img/4_13_01.png new file mode 100644 index 00000000000..578fa313269 Binary files /dev/null and b/release-notes/2016/_img/4_13_01.png differ diff --git a/release-notes/2016/_img/4_13_02.png b/release-notes/2016/_img/4_13_02.png new file mode 100644 index 00000000000..576a60a3547 Binary files /dev/null and b/release-notes/2016/_img/4_13_02.png differ diff --git a/release-notes/2016/_img/4_13_03.png b/release-notes/2016/_img/4_13_03.png new file mode 100644 index 00000000000..99f8fd4e654 Binary files /dev/null and b/release-notes/2016/_img/4_13_03.png differ diff --git a/release-notes/2016/_img/4_13_04.png b/release-notes/2016/_img/4_13_04.png new file mode 100644 index 00000000000..7476ec5838d Binary files /dev/null and b/release-notes/2016/_img/4_13_04.png differ diff --git a/release-notes/2016/_img/4_13_05.png b/release-notes/2016/_img/4_13_05.png new file mode 100644 index 00000000000..571d7b2e177 Binary files /dev/null and b/release-notes/2016/_img/4_13_05.png differ diff --git a/release-notes/2016/_img/4_13_06.png b/release-notes/2016/_img/4_13_06.png new file mode 100644 index 00000000000..217fc8763ed Binary files /dev/null and b/release-notes/2016/_img/4_13_06.png differ diff --git a/release-notes/2016/_img/4_13_07.png b/release-notes/2016/_img/4_13_07.png new file mode 100644 index 00000000000..78d098724c9 Binary files /dev/null and b/release-notes/2016/_img/4_13_07.png differ diff --git a/release-notes/2016/_img/4_13_08.png b/release-notes/2016/_img/4_13_08.png new file mode 100644 index 00000000000..48fd9f99bfb Binary files /dev/null and b/release-notes/2016/_img/4_13_08.png differ diff --git a/release-notes/2016/_img/4_13_09.png b/release-notes/2016/_img/4_13_09.png new file mode 100644 index 00000000000..91b79048e84 Binary files /dev/null and b/release-notes/2016/_img/4_13_09.png differ diff --git a/release-notes/2016/_img/4_13_10.png b/release-notes/2016/_img/4_13_10.png new file mode 100644 index 00000000000..f59be329313 Binary files /dev/null and b/release-notes/2016/_img/4_13_10.png differ diff --git a/release-notes/2016/_img/4_13_11.png b/release-notes/2016/_img/4_13_11.png new file mode 100644 index 00000000000..c5063ec4f1a Binary files /dev/null and b/release-notes/2016/_img/4_13_11.png differ diff --git a/release-notes/2016/_img/5_06_01.png b/release-notes/2016/_img/5_06_01.png new file mode 100644 index 00000000000..082afd2a914 Binary files /dev/null and b/release-notes/2016/_img/5_06_01.png differ diff --git a/release-notes/2016/_img/5_06_02.png b/release-notes/2016/_img/5_06_02.png new file mode 100644 index 00000000000..a069e215779 Binary files /dev/null and b/release-notes/2016/_img/5_06_02.png differ diff --git a/release-notes/2016/_img/5_06_03.png b/release-notes/2016/_img/5_06_03.png new file mode 100644 index 00000000000..1f9a4d6538d Binary files /dev/null and b/release-notes/2016/_img/5_06_03.png differ diff --git a/release-notes/2016/_img/5_06_04.png b/release-notes/2016/_img/5_06_04.png new file mode 100644 index 00000000000..c81c2160bdc Binary files /dev/null and b/release-notes/2016/_img/5_06_04.png differ diff --git a/release-notes/2016/_img/5_06_05.png b/release-notes/2016/_img/5_06_05.png new file mode 100644 index 00000000000..3c4d32a8357 Binary files /dev/null and b/release-notes/2016/_img/5_06_05.png differ diff --git a/release-notes/2016/_img/5_06_06.png b/release-notes/2016/_img/5_06_06.png new file mode 100644 index 00000000000..47810f7251a Binary files /dev/null and b/release-notes/2016/_img/5_06_06.png differ diff --git a/release-notes/2016/_img/5_06_07.png b/release-notes/2016/_img/5_06_07.png new file mode 100644 index 00000000000..d74f5be2b3b Binary files /dev/null and b/release-notes/2016/_img/5_06_07.png differ diff --git a/release-notes/2016/_img/5_06_08.png b/release-notes/2016/_img/5_06_08.png new file mode 100644 index 00000000000..d2408c225cb Binary files /dev/null and b/release-notes/2016/_img/5_06_08.png differ diff --git a/release-notes/2016/_img/5_06_09.png b/release-notes/2016/_img/5_06_09.png new file mode 100644 index 00000000000..c6290cc8c32 Binary files /dev/null and b/release-notes/2016/_img/5_06_09.png differ diff --git a/release-notes/2016/_img/5_06_10.png b/release-notes/2016/_img/5_06_10.png new file mode 100644 index 00000000000..049ea9e6534 Binary files /dev/null and b/release-notes/2016/_img/5_06_10.png differ diff --git a/release-notes/2016/_img/5_06_11.png b/release-notes/2016/_img/5_06_11.png new file mode 100644 index 00000000000..99b028bab08 Binary files /dev/null and b/release-notes/2016/_img/5_06_11.png differ diff --git a/release-notes/2016/_img/5_06_12.png b/release-notes/2016/_img/5_06_12.png new file mode 100644 index 00000000000..0a600283c66 Binary files /dev/null and b/release-notes/2016/_img/5_06_12.png differ diff --git a/release-notes/2016/_img/5_06_13.png b/release-notes/2016/_img/5_06_13.png new file mode 100644 index 00000000000..da73f44f55a Binary files /dev/null and b/release-notes/2016/_img/5_06_13.png differ diff --git a/release-notes/2016/_img/6_01_01.png b/release-notes/2016/_img/6_01_01.png new file mode 100644 index 00000000000..04c1686e0c9 Binary files /dev/null and b/release-notes/2016/_img/6_01_01.png differ diff --git a/release-notes/2016/_img/6_01_02.png b/release-notes/2016/_img/6_01_02.png new file mode 100644 index 00000000000..9ac320d9326 Binary files /dev/null and b/release-notes/2016/_img/6_01_02.png differ diff --git a/release-notes/2016/_img/6_01_03.png b/release-notes/2016/_img/6_01_03.png new file mode 100644 index 00000000000..2b9bacab246 Binary files /dev/null and b/release-notes/2016/_img/6_01_03.png differ diff --git a/release-notes/2016/_img/6_01_04.png b/release-notes/2016/_img/6_01_04.png new file mode 100644 index 00000000000..916f6bc3ee5 Binary files /dev/null and b/release-notes/2016/_img/6_01_04.png differ diff --git a/release-notes/2016/_img/6_01_05.png b/release-notes/2016/_img/6_01_05.png new file mode 100644 index 00000000000..68d0b0017eb Binary files /dev/null and b/release-notes/2016/_img/6_01_05.png differ diff --git a/release-notes/2016/_img/6_01_06.png b/release-notes/2016/_img/6_01_06.png new file mode 100644 index 00000000000..c5418732e42 Binary files /dev/null and b/release-notes/2016/_img/6_01_06.png differ diff --git a/release-notes/2016/_img/6_01_07.png b/release-notes/2016/_img/6_01_07.png new file mode 100644 index 00000000000..5cca8186573 Binary files /dev/null and b/release-notes/2016/_img/6_01_07.png differ diff --git a/release-notes/2016/_img/6_01_08.png b/release-notes/2016/_img/6_01_08.png new file mode 100644 index 00000000000..9f56ab15c08 Binary files /dev/null and b/release-notes/2016/_img/6_01_08.png differ diff --git a/release-notes/2016/_img/6_01_09.png b/release-notes/2016/_img/6_01_09.png new file mode 100644 index 00000000000..30e74b1529c Binary files /dev/null and b/release-notes/2016/_img/6_01_09.png differ diff --git a/release-notes/2016/_img/6_01_10.png b/release-notes/2016/_img/6_01_10.png new file mode 100644 index 00000000000..eefceb76d6d Binary files /dev/null and b/release-notes/2016/_img/6_01_10.png differ diff --git a/release-notes/2016/_img/6_01_11.png b/release-notes/2016/_img/6_01_11.png new file mode 100644 index 00000000000..7403fdb2392 Binary files /dev/null and b/release-notes/2016/_img/6_01_11.png differ diff --git a/release-notes/2016/_img/6_17_01.png b/release-notes/2016/_img/6_17_01.png new file mode 100644 index 00000000000..99526e79b4b Binary files /dev/null and b/release-notes/2016/_img/6_17_01.png differ diff --git a/release-notes/2016/_img/6_17_02.png b/release-notes/2016/_img/6_17_02.png new file mode 100644 index 00000000000..65885ac6b61 Binary files /dev/null and b/release-notes/2016/_img/6_17_02.png differ diff --git a/release-notes/2016/_img/6_17_03.png b/release-notes/2016/_img/6_17_03.png new file mode 100644 index 00000000000..4077364b82c Binary files /dev/null and b/release-notes/2016/_img/6_17_03.png differ diff --git a/release-notes/2016/_img/6_17_04.png b/release-notes/2016/_img/6_17_04.png new file mode 100644 index 00000000000..f99a8b3d2c0 Binary files /dev/null and b/release-notes/2016/_img/6_17_04.png differ diff --git a/release-notes/2016/_img/6_17_05.png b/release-notes/2016/_img/6_17_05.png new file mode 100644 index 00000000000..2c66b1fdd44 Binary files /dev/null and b/release-notes/2016/_img/6_17_05.png differ diff --git a/release-notes/2016/_img/6_17_06.png b/release-notes/2016/_img/6_17_06.png new file mode 100644 index 00000000000..3591c689ac1 Binary files /dev/null and b/release-notes/2016/_img/6_17_06.png differ diff --git a/release-notes/2016/_img/6_17_07.png b/release-notes/2016/_img/6_17_07.png new file mode 100644 index 00000000000..9aa8ce5fe00 Binary files /dev/null and b/release-notes/2016/_img/6_17_07.png differ diff --git a/release-notes/2016/_img/6_17_08.png b/release-notes/2016/_img/6_17_08.png new file mode 100644 index 00000000000..d5022df36ff Binary files /dev/null and b/release-notes/2016/_img/6_17_08.png differ diff --git a/release-notes/2016/_img/6_17_09.png b/release-notes/2016/_img/6_17_09.png new file mode 100644 index 00000000000..cd95b373012 Binary files /dev/null and b/release-notes/2016/_img/6_17_09.png differ diff --git a/release-notes/2016/_img/6_17_10.png b/release-notes/2016/_img/6_17_10.png new file mode 100644 index 00000000000..6ee644b2ef1 Binary files /dev/null and b/release-notes/2016/_img/6_17_10.png differ diff --git a/release-notes/2016/_img/6_17_11.png b/release-notes/2016/_img/6_17_11.png new file mode 100644 index 00000000000..226e5a6ad9a Binary files /dev/null and b/release-notes/2016/_img/6_17_11.png differ diff --git a/release-notes/2016/_img/6_17_12.png b/release-notes/2016/_img/6_17_12.png new file mode 100644 index 00000000000..786194b5d05 Binary files /dev/null and b/release-notes/2016/_img/6_17_12.png differ diff --git a/release-notes/2016/_img/6_17_13.png b/release-notes/2016/_img/6_17_13.png new file mode 100644 index 00000000000..74fcba3ecd1 Binary files /dev/null and b/release-notes/2016/_img/6_17_13.png differ diff --git a/release-notes/2016/_img/7_07_01.png b/release-notes/2016/_img/7_07_01.png new file mode 100644 index 00000000000..efff6926202 Binary files /dev/null and b/release-notes/2016/_img/7_07_01.png differ diff --git a/release-notes/2016/_img/7_07_02.png b/release-notes/2016/_img/7_07_02.png new file mode 100644 index 00000000000..5dd3ec3f18a Binary files /dev/null and b/release-notes/2016/_img/7_07_02.png differ diff --git a/release-notes/2016/_img/7_07_03.png b/release-notes/2016/_img/7_07_03.png new file mode 100644 index 00000000000..659fc88409d Binary files /dev/null and b/release-notes/2016/_img/7_07_03.png differ diff --git a/release-notes/2016/_img/7_07_04.png b/release-notes/2016/_img/7_07_04.png new file mode 100644 index 00000000000..038ea2c99b4 Binary files /dev/null and b/release-notes/2016/_img/7_07_04.png differ diff --git a/release-notes/2016/_img/7_07_05.png b/release-notes/2016/_img/7_07_05.png new file mode 100644 index 00000000000..b21db95e812 Binary files /dev/null and b/release-notes/2016/_img/7_07_05.png differ diff --git a/release-notes/2016/_img/7_07_06.png b/release-notes/2016/_img/7_07_06.png new file mode 100644 index 00000000000..4ecb734ac02 Binary files /dev/null and b/release-notes/2016/_img/7_07_06.png differ diff --git a/release-notes/2016/_img/7_07_07.png b/release-notes/2016/_img/7_07_07.png new file mode 100644 index 00000000000..0a6335c1c22 Binary files /dev/null and b/release-notes/2016/_img/7_07_07.png differ diff --git a/release-notes/2016/_img/7_07_08.png b/release-notes/2016/_img/7_07_08.png new file mode 100644 index 00000000000..81673c789e0 Binary files /dev/null and b/release-notes/2016/_img/7_07_08.png differ diff --git a/release-notes/2016/_img/7_29_01.png b/release-notes/2016/_img/7_29_01.png new file mode 100644 index 00000000000..f02955a9c35 Binary files /dev/null and b/release-notes/2016/_img/7_29_01.png differ diff --git a/release-notes/2016/_img/7_29_02.png b/release-notes/2016/_img/7_29_02.png new file mode 100644 index 00000000000..5effab68c02 Binary files /dev/null and b/release-notes/2016/_img/7_29_02.png differ diff --git a/release-notes/2016/_img/7_29_03.png b/release-notes/2016/_img/7_29_03.png new file mode 100644 index 00000000000..4f022c5f2bb Binary files /dev/null and b/release-notes/2016/_img/7_29_03.png differ diff --git a/release-notes/2016/_img/7_29_04.png b/release-notes/2016/_img/7_29_04.png new file mode 100644 index 00000000000..788c40d5e50 Binary files /dev/null and b/release-notes/2016/_img/7_29_04.png differ diff --git a/release-notes/2016/_img/7_29_05.png b/release-notes/2016/_img/7_29_05.png new file mode 100644 index 00000000000..a508f5e2dbf Binary files /dev/null and b/release-notes/2016/_img/7_29_05.png differ diff --git a/release-notes/2016/_img/7_29_06.png b/release-notes/2016/_img/7_29_06.png new file mode 100644 index 00000000000..d7ae0216775 Binary files /dev/null and b/release-notes/2016/_img/7_29_06.png differ diff --git a/release-notes/2016/_img/7_29_07.png b/release-notes/2016/_img/7_29_07.png new file mode 100644 index 00000000000..3b59562990d Binary files /dev/null and b/release-notes/2016/_img/7_29_07.png differ diff --git a/release-notes/2016/_img/7_29_08.png b/release-notes/2016/_img/7_29_08.png new file mode 100644 index 00000000000..b7c024afb09 Binary files /dev/null and b/release-notes/2016/_img/7_29_08.png differ diff --git a/release-notes/2016/_img/7_29_09.png b/release-notes/2016/_img/7_29_09.png new file mode 100644 index 00000000000..6a40ec5341b Binary files /dev/null and b/release-notes/2016/_img/7_29_09.png differ diff --git a/release-notes/2016/_img/7_29_10.png b/release-notes/2016/_img/7_29_10.png new file mode 100644 index 00000000000..09f91fe8e5e Binary files /dev/null and b/release-notes/2016/_img/7_29_10.png differ diff --git a/release-notes/2016/_img/7_29_11.png b/release-notes/2016/_img/7_29_11.png new file mode 100644 index 00000000000..0a744e194dc Binary files /dev/null and b/release-notes/2016/_img/7_29_11.png differ diff --git a/release-notes/2016/_img/7_29_12.png b/release-notes/2016/_img/7_29_12.png new file mode 100644 index 00000000000..346b1a4937b Binary files /dev/null and b/release-notes/2016/_img/7_29_12.png differ diff --git a/release-notes/2016/_img/7_29_13.png b/release-notes/2016/_img/7_29_13.png new file mode 100644 index 00000000000..bdefb2e49a1 Binary files /dev/null and b/release-notes/2016/_img/7_29_13.png differ diff --git a/release-notes/2016/_img/7_29_14.png b/release-notes/2016/_img/7_29_14.png new file mode 100644 index 00000000000..44cb406fee7 Binary files /dev/null and b/release-notes/2016/_img/7_29_14.png differ diff --git a/release-notes/2016/_img/7_29_15.png b/release-notes/2016/_img/7_29_15.png new file mode 100644 index 00000000000..1cf2680ed2c Binary files /dev/null and b/release-notes/2016/_img/7_29_15.png differ diff --git a/release-notes/2016/_img/7_29_16.png b/release-notes/2016/_img/7_29_16.png new file mode 100644 index 00000000000..b9185556f3f Binary files /dev/null and b/release-notes/2016/_img/7_29_16.png differ diff --git a/release-notes/2016/_img/7_29_17.png b/release-notes/2016/_img/7_29_17.png new file mode 100644 index 00000000000..188c19e142f Binary files /dev/null and b/release-notes/2016/_img/7_29_17.png differ diff --git a/release-notes/2016/_img/8_17_01.png b/release-notes/2016/_img/8_17_01.png new file mode 100644 index 00000000000..5c2c0fbf3eb Binary files /dev/null and b/release-notes/2016/_img/8_17_01.png differ diff --git a/release-notes/2016/_img/8_17_02.png b/release-notes/2016/_img/8_17_02.png new file mode 100644 index 00000000000..7e4c4e48098 Binary files /dev/null and b/release-notes/2016/_img/8_17_02.png differ diff --git a/release-notes/2016/_img/8_17_03.png b/release-notes/2016/_img/8_17_03.png new file mode 100644 index 00000000000..f5de84447b8 Binary files /dev/null and b/release-notes/2016/_img/8_17_03.png differ diff --git a/release-notes/2016/_img/8_17_04.png b/release-notes/2016/_img/8_17_04.png new file mode 100644 index 00000000000..56e5f9f8549 Binary files /dev/null and b/release-notes/2016/_img/8_17_04.png differ diff --git a/release-notes/2016/_img/8_17_05.png b/release-notes/2016/_img/8_17_05.png new file mode 100644 index 00000000000..256d91fade9 Binary files /dev/null and b/release-notes/2016/_img/8_17_05.png differ diff --git a/release-notes/2016/_img/8_17_06.png b/release-notes/2016/_img/8_17_06.png new file mode 100644 index 00000000000..f44ed77a940 Binary files /dev/null and b/release-notes/2016/_img/8_17_06.png differ diff --git a/release-notes/2016/_img/8_17_07.png b/release-notes/2016/_img/8_17_07.png new file mode 100644 index 00000000000..796fab8a7a1 Binary files /dev/null and b/release-notes/2016/_img/8_17_07.png differ diff --git a/release-notes/2016/_img/8_17_08.png b/release-notes/2016/_img/8_17_08.png new file mode 100644 index 00000000000..f99ef6fdfcd Binary files /dev/null and b/release-notes/2016/_img/8_17_08.png differ diff --git a/release-notes/2016/_img/8_17_09.png b/release-notes/2016/_img/8_17_09.png new file mode 100644 index 00000000000..30e3427c416 Binary files /dev/null and b/release-notes/2016/_img/8_17_09.png differ diff --git a/release-notes/2016/_img/8_17_10.png b/release-notes/2016/_img/8_17_10.png new file mode 100644 index 00000000000..946ef190019 Binary files /dev/null and b/release-notes/2016/_img/8_17_10.png differ diff --git a/release-notes/2016/_img/8_17_11.png b/release-notes/2016/_img/8_17_11.png new file mode 100644 index 00000000000..21c6b9e0d34 Binary files /dev/null and b/release-notes/2016/_img/8_17_11.png differ diff --git a/release-notes/2016/_img/8_17_12.png b/release-notes/2016/_img/8_17_12.png new file mode 100644 index 00000000000..050e196e543 Binary files /dev/null and b/release-notes/2016/_img/8_17_12.png differ diff --git a/release-notes/2016/_img/8_17_13.png b/release-notes/2016/_img/8_17_13.png new file mode 100644 index 00000000000..e12e63eaa5c Binary files /dev/null and b/release-notes/2016/_img/8_17_13.png differ diff --git a/release-notes/2016/_img/8_17_14.png b/release-notes/2016/_img/8_17_14.png new file mode 100644 index 00000000000..46220270f98 Binary files /dev/null and b/release-notes/2016/_img/8_17_14.png differ diff --git a/release-notes/2016/_img/8_17_15.png b/release-notes/2016/_img/8_17_15.png new file mode 100644 index 00000000000..b9e09b9443c Binary files /dev/null and b/release-notes/2016/_img/8_17_15.png differ diff --git a/release-notes/2016/_img/8_17_16.png b/release-notes/2016/_img/8_17_16.png new file mode 100644 index 00000000000..9a52b30bc96 Binary files /dev/null and b/release-notes/2016/_img/8_17_16.png differ diff --git a/release-notes/2016/_img/8_17_17.png b/release-notes/2016/_img/8_17_17.png new file mode 100644 index 00000000000..8d3702cd319 Binary files /dev/null and b/release-notes/2016/_img/8_17_17.png differ diff --git a/release-notes/2016/_img/8_17_18.png b/release-notes/2016/_img/8_17_18.png new file mode 100644 index 00000000000..744242ba8f3 Binary files /dev/null and b/release-notes/2016/_img/8_17_18.png differ diff --git a/release-notes/2016/_img/8_17_19.png b/release-notes/2016/_img/8_17_19.png new file mode 100644 index 00000000000..cf513e0c5ec Binary files /dev/null and b/release-notes/2016/_img/8_17_19.png differ diff --git a/release-notes/2016/_img/8_17_20.png b/release-notes/2016/_img/8_17_20.png new file mode 100644 index 00000000000..0c4d91a7655 Binary files /dev/null and b/release-notes/2016/_img/8_17_20.png differ diff --git a/release-notes/2016/_img/8_17_21.png b/release-notes/2016/_img/8_17_21.png new file mode 100644 index 00000000000..3321097a64d Binary files /dev/null and b/release-notes/2016/_img/8_17_21.png differ diff --git a/release-notes/2016/_img/8_17_22.png b/release-notes/2016/_img/8_17_22.png new file mode 100644 index 00000000000..40b764aadfd Binary files /dev/null and b/release-notes/2016/_img/8_17_22.png differ diff --git a/release-notes/2016/_img/8_17_23.png b/release-notes/2016/_img/8_17_23.png new file mode 100644 index 00000000000..777ad8a0114 Binary files /dev/null and b/release-notes/2016/_img/8_17_23.png differ diff --git a/release-notes/2016/_img/8_17_24.png b/release-notes/2016/_img/8_17_24.png new file mode 100644 index 00000000000..d07f58b5910 Binary files /dev/null and b/release-notes/2016/_img/8_17_24.png differ diff --git a/release-notes/2016/_img/8_17_25.png b/release-notes/2016/_img/8_17_25.png new file mode 100644 index 00000000000..be7079918e9 Binary files /dev/null and b/release-notes/2016/_img/8_17_25.png differ diff --git a/release-notes/2016/_img/9_02_01.png b/release-notes/2016/_img/9_02_01.png new file mode 100644 index 00000000000..d213ef2f3c7 Binary files /dev/null and b/release-notes/2016/_img/9_02_01.png differ diff --git a/release-notes/2016/_img/9_02_02.png b/release-notes/2016/_img/9_02_02.png new file mode 100644 index 00000000000..2aa86d0bffb Binary files /dev/null and b/release-notes/2016/_img/9_02_02.png differ diff --git a/release-notes/2016/_img/9_02_03.png b/release-notes/2016/_img/9_02_03.png new file mode 100644 index 00000000000..9bb84523c56 Binary files /dev/null and b/release-notes/2016/_img/9_02_03.png differ diff --git a/release-notes/2016/_img/9_02_04.png b/release-notes/2016/_img/9_02_04.png new file mode 100644 index 00000000000..82c453e1a2f Binary files /dev/null and b/release-notes/2016/_img/9_02_04.png differ diff --git a/release-notes/2016/_img/9_02_05.png b/release-notes/2016/_img/9_02_05.png new file mode 100644 index 00000000000..27a0152513b Binary files /dev/null and b/release-notes/2016/_img/9_02_05.png differ diff --git a/release-notes/2016/_img/9_02_06.png b/release-notes/2016/_img/9_02_06.png new file mode 100644 index 00000000000..a29ab105b6b Binary files /dev/null and b/release-notes/2016/_img/9_02_06.png differ diff --git a/release-notes/2016/_img/9_02_07.png b/release-notes/2016/_img/9_02_07.png new file mode 100644 index 00000000000..301b4e3a373 Binary files /dev/null and b/release-notes/2016/_img/9_02_07.png differ diff --git a/release-notes/2016/_img/9_02_08.png b/release-notes/2016/_img/9_02_08.png new file mode 100644 index 00000000000..39f43dbd8f0 Binary files /dev/null and b/release-notes/2016/_img/9_02_08.png differ diff --git a/release-notes/2016/_img/9_02_09.png b/release-notes/2016/_img/9_02_09.png new file mode 100644 index 00000000000..53d2e38713e Binary files /dev/null and b/release-notes/2016/_img/9_02_09.png differ diff --git a/release-notes/2016/_img/9_02_10.png b/release-notes/2016/_img/9_02_10.png new file mode 100644 index 00000000000..d263c5b2973 Binary files /dev/null and b/release-notes/2016/_img/9_02_10.png differ diff --git a/release-notes/2016/_img/9_21_01.png b/release-notes/2016/_img/9_21_01.png new file mode 100644 index 00000000000..eb3a11601ed Binary files /dev/null and b/release-notes/2016/_img/9_21_01.png differ diff --git a/release-notes/2016/_img/9_21_02.png b/release-notes/2016/_img/9_21_02.png new file mode 100644 index 00000000000..86661e57275 Binary files /dev/null and b/release-notes/2016/_img/9_21_02.png differ diff --git a/release-notes/2016/_img/9_21_03.png b/release-notes/2016/_img/9_21_03.png new file mode 100644 index 00000000000..c1230adcb6d Binary files /dev/null and b/release-notes/2016/_img/9_21_03.png differ diff --git a/release-notes/2016/_img/9_21_04.png b/release-notes/2016/_img/9_21_04.png new file mode 100644 index 00000000000..9940558ab0d Binary files /dev/null and b/release-notes/2016/_img/9_21_04.png differ diff --git a/release-notes/2016/_img/9_21_05.png b/release-notes/2016/_img/9_21_05.png new file mode 100644 index 00000000000..00e4e108580 Binary files /dev/null and b/release-notes/2016/_img/9_21_05.png differ diff --git a/release-notes/2016/_img/9_21_06.png b/release-notes/2016/_img/9_21_06.png new file mode 100644 index 00000000000..d828ec1d375 Binary files /dev/null and b/release-notes/2016/_img/9_21_06.png differ diff --git a/release-notes/2016/_img/9_21_07.png b/release-notes/2016/_img/9_21_07.png new file mode 100644 index 00000000000..2bd936227cc Binary files /dev/null and b/release-notes/2016/_img/9_21_07.png differ diff --git a/release-notes/2016/_img/9_21_08.png b/release-notes/2016/_img/9_21_08.png new file mode 100644 index 00000000000..a1523080798 Binary files /dev/null and b/release-notes/2016/_img/9_21_08.png differ diff --git a/release-notes/2016/_img/9_21_09.png b/release-notes/2016/_img/9_21_09.png new file mode 100644 index 00000000000..83c47968ea5 Binary files /dev/null and b/release-notes/2016/_img/9_21_09.png differ diff --git a/release-notes/2016/_img/9_21_10.png b/release-notes/2016/_img/9_21_10.png new file mode 100644 index 00000000000..682d256e86d Binary files /dev/null and b/release-notes/2016/_img/9_21_10.png differ diff --git a/release-notes/2016/_img/9_21_11.png b/release-notes/2016/_img/9_21_11.png new file mode 100644 index 00000000000..1549caa41c3 Binary files /dev/null and b/release-notes/2016/_img/9_21_11.png differ diff --git a/release-notes/2016/apr-13-team-services.md b/release-notes/2016/apr-13-team-services.md new file mode 100644 index 00000000000..f01af823026 --- /dev/null +++ b/release-notes/2016/apr-13-team-services.md @@ -0,0 +1,153 @@ +--- +title: Work item follow, move & change type - April 13 +description: VSTS release notes for April 13 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: f610379d-99b9-4f49-ae17-7dc6d488c566 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Work item follow, move & change type - April 13 + +**Note**: The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +Let’s start by walking through some of the improvements we’ve made in the Work hub… + +##Follow a work item + +You can now setup an alert for tracking changes to a single work item just by clicking on the new "Follow" button in the form. When you follow a work item, you'll be notified any time the work item changes – including field updates, links, attachments, and comments. Here is a work item that I’m following closely and * **almost*** made it into these release notes. + +![Follow a work item](_img/4_13_01.png) + +This is the first feature in a set of personal notifications improvements we are continuing to update. Stay tuned for more updates here. + +For details, see [Follow a work item](https://msdn.microsoft.com/Library/vs/alm/work/track/follow-work-items). + +##Change work item type + +You can now easily change the type of a work item, or multiple work items. Simply select your preferred type, add a comment, and hit change. The form will update as a result of the selected type and you will have a chance to review before saving to commit the change. + +Change type is also an option during a work item move if the type you are moving does not exist in the destination team project. + +![Change a work item type](_img/4_13_02.png) + +For details see [Move, change, and delete work items](https://msdn.microsoft.com/Library/vs/alm/work/backlogs/remove-delete-work-items) or [Bulk modify work items](https://msdn.microsoft.com/Library/vs/alm/work/backlogs/bulk-modify-work-items). + +##Work Item move (single or bulk) + +Users may now move a work item(s) between team projects. The work item ID remains the same and all of the work item's revisions are moved. Users may also change type during a move and add a comment to be included as part of the work item's discussion section. + +##Kanban board live updates + +Your Kanban board is now Live + +Have you been hitting F5 to figure out what's going on throughout the day with your Kanban board? Try the icon below. + +![Kanban live updates](_img/4_13_03.png) + +What is Live Updates? + +When anyone in your team creates, updates, or deletes a work item on the board, you will receive live updates on your board immediately. Also, if the administrator makes board or team level updates such as adding a new column or enabling bugs on backlog, you will be notified to refresh the board to update your board layout. + +All you need to do now is, enable the tower icon on your Kanban board and start collaborating with your team. + +##Pick lists for work Items + +The biggest ask since we opened up process changes has been to add fields with lists of values – we call these picklists. In TFS, we have rules (AllowedValues/SuggestedValue/ProhibitedValue) as well as global lists that help provide this functionality, but they’re fairly complex and can be difficult to configure. Instead of thinking about picklists as a set of rules, we’ve made lists a first class concept. You can define items in a list and then back a picklist field with a list. + +![Add a field to a bug](_img/4_13_04.png) + +##Checklist improvements + +We’ve made a number of improvements to how Checklists work. + +Checklists titles now appear as hyperlinks. You can click on the title to open the work item form. + +![Click on the title to open work item](_img/4_13_05.png) + +Checklists now also support context menu that allows to open, edit, or delete checklist items. + +![Checklist context menu](_img/4_13_06.png) + +##Build to Line number + +Have you ever wished you could just jump from a build error to the line of code that caused it? Now you can. Looking at the latest error (thanks Scott!) on the primary build we use as a pull request policy internally, I see this: + +![Build error](_img/4_13_07.png) + +Clicking on the error link, opens up the source file causing the build error: + +![Jump to line number](_img/4_13_08.png) + +##Build log view supports much larger logs + +The previous log view only supported logs up to 10,000 lines. The new viewer is based on the Monaco editor used in VS Code and will support logs up to 150,000 lines. + +##Java Build templates + +We’ve made it even easier for Java developers to get started with build by adding build templates for Ant, Maven and Gradle. + +![Java Build templates](_img/4_13_09.png) + +Xamarin Build Tasks + +We made some significant improvements to our Xamarin support: + +-The [Xamarin.Android](https://msdn.microsoft.com/library/vs/alm/build/steps/build/xamarin-android) step now supports Mac and Linux +-The [Xamarin.iOS](https://msdn.microsoft.com/library/vs/alm/build/steps/build/xamarin-ios) step now supports signing and packaging +-[Xamarin Test Cloud](https://msdn.microsoft.com/library/vs/alm/build/steps/test/xamarin-test-cloud) results can be displayed on the build summary page +-A new [Xamarin component restore](https://msdn.microsoft.com/en-us/library/vs/alm/build/steps/package/xamarin-component-restore) step +-The [NuGet Installer](https://msdn.microsoft.com/en-us/library/vs/alm/build/steps/package/nuget-installer) step now supports Mac OS + +Finally, the Xamarin build definition templates were enhanced to use these new tasks. [Build your Xamarin app](https://msdn.microsoft.com/en-us/Library/vs/alm/Build/apps/xamarin). + +##Widget SDK: Reusable CSS and DOM templates + +When building widgets for the Dashboard, developers can now use the same CSS that we apply to our widgets. This helps developers get started using great widget styles that have a consistent look and feel with VSTS. You can learn how to incorporate these styles in your widget by visiting our [integration docs](http://aka.ms/widgetSDKStyles). + +##Adding users from the team members widget + +It’s never been easier to add somebody to your team. + +![Add to team](_img/4_13_10.png) + +##Collection in the domain + +Your Team Services account URL just got 18 characters shorter. We’ve removed “/DefaultCollection” from the path. While it’s small, but welcome change. It’s the beginning of a larger journey to how we structure accounts. [Learn more here](https://blogs.msdn.microsoft.com/visualstudioalm/2016/04/09/merging-the-concepts-of-account-and-collection/). + +Note that existing accounts will still give out the longer URL for Git Clones in the Code hub. This is because to use the new shorter URL in VS, you will need to reconnect Team Explorer using the shorter URL. Today you either need to use the long or the short URL for an account in VS, you can’t intermingle. Once we have enough clients updated such that they just work seamlessly with either type, we’ll change the default Git Clone URL to the shorter one as well. + +Last but not least, we have a set of Release Management improvements. + +##Release Management - Email release summary + +Send the details of a release including all the sections (deployment status, work items, commits, build details, etc) to email recipients. + +[video] + +##Release Management – Dashboard widget for release definition summary + +Pin a release definition to the dashboard, and have a summary of releases for that definition easily visible to your team. + +[video] + +##Release Management - Deploy based on conditions in multiple environments + +Until now, you could do parallel deployments (fork deployments), but could not start a deployment to an environment based on status in multiple environments (join deployments). Now, you can. + +[video] + +##Release Management - Provision VMs or run a PS script using SCVMM extension + +Additional features have been added to the SCVMM extension in the Visual Studio Marketplace to provision a virtual machine from a template in SCVMM library or to run a SCVMM Powershell script. + +![SCVMM](_img/4_13_11.png) + +As always, any ideas on things you’d like to see us prioritize, head over to [UserVoice](http://visualstudio.uservoice.com/forums/121579-visual-studio) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2016/aug-17-team-services.md b/release-notes/2016/aug-17-team-services.md new file mode 100644 index 00000000000..4f1548f0bb0 --- /dev/null +++ b/release-notes/2016/aug-17-team-services.md @@ -0,0 +1,259 @@ +--- +title: Pull Requests refresh and much, much more – Aug 17 +description: VSTS release notes for August 17 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 7ecf0247-57e9-4439-97cc-730d78905324 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Pull Requests refresh and much, much more – Aug 17 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. + +Lots of stuff this sprint, lets jump in… + +##Pull requests + +The pull request experience has some major updates this release, bringing some really powerful diff capabilities, a new commenting experience, and an entirely refreshed UI. + +###Redesigned UI + +When opening a pull request, the new look and feel is evident immediately. We’ve reorganized the header to summarize all of the critical states and actions, making them accessible from every view in the experience. + +![Pull request header](_img/8_17_01.png) + +###Overview + +The Overview now highlights the pull request description and makes it easier than ever to give feedback. Events and comments are shown with the newest items on top to help reviewers see the latest changes and comments front and center. Policies, work items, and reviewers are all provided in detail and reorganized to be more clear and concise. + +![Pull request overview](_img/8_17_02.png) + +###Files + +The biggest new feature in this release is the ability to see past updates made to a pull request. A few sprints ago ([July 7th](jul-07-team-services.md)), we released the ability to properly track comments as a pull request is updated with changes. However, it’s not always easy to see what’s between updates. In the Files view, you can now see exactly what changed each time new code is pushed to your pull request. This is really useful if you’ve given feedback on some code and want to see exactly how it changed isolated from all of the other changes in the review. + +![Viewing changes on a pull request](_img/8_17_03.png) + +###Updates + +The new Updates view is used to show how the pull request is changing over time. While the Files view shows how the files have changed over time, the Updates view shows the commits added in each update. If a force push ever happens, the Updates view will continue to show the past updates as they occurred in history. + +![Updates view](_img/8_17_04.png) + +The Commits view is useful in conjunction with the Updates view to show the current changes to be merged when the PR is completed. + +###Comments, now with markdown and emoji + +Use the full power of markdown in all of your discussions, including formatting, code with syntax highlighting, links, images, and emoji. The commenting controls also have a more user friendly editing experience allowing multiple comments to be edited (and then saved) at one time. + +![Comments](_img/8_17_05.png) + +###Auto-complete pull requests waiting on policies + +Teams that are using branch policies ([https://www.visualstudio.com/en-us/docs/git/branch-policies](https://www.visualstudio.com/en-us/docs/git/branch-policies)) to protect their branches will want to check out the auto-complete action. Many times, the author of a pull request will be ready to merge their PR, but they’re waiting on a build to finish before they can click Complete. Other times, the build is passing, but there is one reviewer that hasn’t given the final approval. In these cases, the auto-complete action lets the author set the PR to automatically complete as soon as the policies are all approved. + +![Auto-complete](_img/8_17_06.png) + +Just like the manual complete action, the author has a chance to customize the message of the merge commit and select the appropriate merge options. + +![Selecting auto-complete options](_img/8_17_07.png) + +Once auto-complete has been set, the pull request will display a banner that confirms that the auto-complete is set and waiting for policies to complete. + +![Auto-complete banner](_img/8_17_08.png) + +When all of the policies have been met (i.e., the build completes, or that final approval is granted), the pull request will be merged using the options and comments specified. As expected, if there is a build failure or the reviewer doesn’t approve, the PR will remain active until the policies are passing. + +##Code + +###Clone Git repositories from your browser using Tower + +Now, when viewing a Team Services Git repository in your browser, you can invoke cloning of the repository with the Tower Git client by selecting the “Clone with Tower” button. Tower is an excellent Git client for Mac, and a Windows version is in beta. For more information, see [https://www.git-tower.com/](https://www.git-tower.com/). + +##Packages + +###Download packages without NuGet + +You can now download a package directly from the Package Management web interface. Look for the Download button on any package. + +![Package download button on Package Management UI](_img/8_17_09.png) + +###Get started quickly + +We’ve also updated the empty feed and connect to feed experiences to help you jump quickly into the most common Package Management tasks: pushing and restoring packages. Look for the new bright blue Connect to feed button in the upper right. + +![Connect to feed button](_img/8_17_10.png) + +![Connect to feed options](_img/8_17_11.png) + +##Continuous integration + +###Queue Jenkins jobs from builds and releases + +In addition to the existing Jenkins service hook, Team Services provides a new way to integrate with Jenkins. The “Jenkins Queue Job” task allows queuing Jenkins jobs and pipelines from Team Services builds and releases. This enables scenarios such as building with Team Services and deploying with Jenkins, using Jenkins for continuous integration (CI) with a Team Services Git repository, or configuring a Jenkins job to validate Team Services pull requests. For more information, see [https://youtu.be/9F7Gmc13oDM](https://youtu.be/9F7Gmc13oDM) and [https://github.com/jenkinsci/tfs-plugin](https://github.com/jenkinsci/tfs-plugin). + +###Jenkins service hook enhancements + +The Jenkins service hook has been enhanced to support Jenkins’ Cross-Site Request Forgery (CSRF) prevention using crumbs. Also, the service hook now has optional, tighter integration with the TFS Plugin for Jenkins for added traceability between Team Services Git commits and Jenkins builds. + +###Run SSH commands on remote machines from builds and releases + +The SSH task provides a way to run commands and scripts on remote machines via secure shell (SSH) as part of Team Services builds and releases. This enables deployment and validation scenarios such as installation of build artifacts on a Docker container or Linux virtual machine. For more information, see [https://blogs.msdn.microsoft.com/visualstudioalm/2016/07/30/ssh-build-task/](https://blogs.msdn.microsoft.com/visualstudioalm/2016/07/30/ssh-build-task/). + +###Create archives from builds and releases + +A new build task called “Archive Files” allows packaging and compressing files in multiple archive formats such as .zip, .tar, .tar.gz, and .7z. For more information, see [https://blogs.msdn.microsoft.com/visualstudioalm/2016/07/12/archive-files-build-task-for-team-services/](https://blogs.msdn.microsoft.com/visualstudioalm/2016/07/12/archive-files-build-task-for-team-services/). + +###Copy files over SSH from builds and releases + +The “Copy Files Over SSH” task allows copying files from Team Services builds and releases to remote machines using the secure SCP or SFTP protocol. This enables deployment and validation scenarios such as copying build artifacts to a Docker container or Linux virtual machine for testing or deployment. + +###Download Jenkins artifacts to builds and releases + +The “Jenkins Download Artifacts” task allows downloading build artifacts from Jenkins to Team Services for use in a build or release process. This enables scenarios such as building in Jenkins and testing, signing, packaging, consuming, or releasing from Team Services. For more information, see [https://youtu.be/9F7Gmc13oDM](https://youtu.be/9F7Gmc13oDM). + +###Use FTP or FTPS to upload files from builds and releases + +The “FTP Upload” task allows uploading files via FTP or FTPS as part of Team Services builds and releases. Upload entire folder structures, file patterns, or precisely selected individual files. You may choose to overwrite an existing structure or flatten directory structures on the FTP server. For more information, see [https://youtu.be/oPnVyXlku4I](https://youtu.be/oPnVyXlku4I). + +###Google Play Extension improvements + +The VSTS Extension for Google Play contains deployment tasks for automating the release, promotion, and roll- out of app updates to the Google Play store from Team Services builds or releases. It has had numerous improvements, including support for apps with multiple APKs. For more information, see [https://marketplace.visualstudio.com/items?itemName=ms-vsclient.google-play](https://marketplace.visualstudio.com/items?itemName=ms-vsclient.google-play). + +###Maven and Gradle tasks produce a build summary when running a SonarQube analysis + +When you enable the “Run SonarQube Analysis” option in the Maven or Gradle build tasks, you will now get a link on the SonarQube project. This is a first step. We are working on a richer build summary showing quality gate results. + +##Build Definitions + +Welcome to the new build definitions UX! The experience focuses on the builds you own and care about. We hope you enjoy the richer and more personalized views into the status and quality of your code. + +###Favorites and more in the Mine tab + +Here you'll find the builds you care about most. The **Mine** tab features your favorites, team favorites, and builds of code that you've checked in. + +![Definitions, Mine](_img/8_17_12.png) + +The 7-day pass rate shows the percentage of builds that succeeded or partially succeeded out of all the builds completed during the past week. The arrow tells you if today's builds are doing better or worse than the 7-day rate. + +###Queued tab shows current builds and recent history + +When you want to see what's happening right now and in recent history, check out the **Queued** tab. + +![Definitions, Queued](_img/8_17_13.png) + +###All Definitions tab adds folders + +Does your team have a lot of build defintions. You can now use folders to keep them organized in the **All Definitions** tab. + +![Definitions, All](_img/8_17_14.png) + +![Manage folders](_img/8_17_15.png) + +**Tip:** Have a batch of definitions that need the same permissions? Put them in a folder and then you can give permissions to the folder. + +![Manage folders](_img/8_17_16.png) + +###Improved build details + +When you click down to focus on a specific build, we now give you a lot more information about what's happening and overall code quality. + +![Definition summary](_img/8_17_17.png) + +![Definition history](_img/8_17_18.png) + +###View and queue XAML builds + +Still have some XAML builds? Visual Studio is still your primary tool for editing and managing XAML builds. The **XAML** tab provides a companion experience so you can view and queue those builds in your web browser. + +##Work + +###Work item templates + +We added the ability to create rich work item templates directly into the native web experience. This capability was previously very limited in the web, and only available in this new form through a Visual Studio power tool. Teams can now create and manage a set of templates for quickly modifying common fields. + +![Work item template option](_img/8_17_19.png) + +###Quickly “Unfollow” work item + +The “Followed work items” view now lets you quickly unfollow one (or many) work items by unfollowing directly from the context menu. + +###Drag and drop attachments + +Work item attachments can now be created by simply dragging and dropping a file directly onto the Attachments tab. We also added support for attaching multiple files and editing the comments of attachments. + +![Drag and drop work item attachment](_img/8_17_20.png) + +###Assigned to Me widget + +We added a new widget to the catalog that summarizes all the open work assigned to the logged in user. This widget can be dragged onto any dashboard to allow users to “at a glance” see the work on their plate that needs attention. The widget supports sorting and quick filtering by type. + +![Assigned to Me widget](_img/8_17_21.png) + +###Dashboard permissions + +You can now adjust the permissions team members have with regards to dashboards. Click the wrench icon on the top of the dashboard and pick the setting you’d like. You can choose between the following options: + +-Team admins only can add, edit, and delete dashboards +-Team admins and team members can add, edit, and delete dashboards +-Team members can edit dashboards (add and configure widgets) + +###Sprint Overview widget + +We heard your feedback that the Sprint Overview was confusing, and made a few adjustments. The widget has been redesigned to show clearly the number of days remaining in the sprint, and a quick summary of the work not started, in progress, and completed. + +![Sprint Overview widget](_img/8_17_22.png) + +##Test + +###Configure test outcomes for tests across different test suites + +We have now added the ability to configure the behavior of test outcomes for tests shared across different test suites under the same test plan. If this option is selected, and you set the outcome for a test (mark it as Pass/Fail/Blocked either from the Test hub, Web runner, Microsoft Test Runner or from cards on Kanban board), that outcome will propagate to all the other tests present across different test suites under the same test plan, with the same configuration. Users can set the “Configure test outcomes” option for a particular test plan either from the Test hub test plan context menu or from the Kanban board test page in the common settings configuration dialog. This option is turned off by default and you will have to explicitly enable it to take effect. + +###Test Run and Test Result summary - traceability to Releases and manual test artifacts + +We are added more properties Test Run and Test Result summary pages to help you navigate to the artifacts like Releases and Test plans with a single click. If tests are run in the Release workflow, the properties show the Release and Environments in which the tests ran. For manual tests, you can find the Test Plan, Test Suite and the Test Case associated with a manual test result. + +![Test run and test result summary views](_img/8_17_23.png) + +##Marketplace + +###Unpublish extension - Removing a public extension from the Marketplace + +You can unpublish free extensions, if you no longer want to offer them in the Marketplace or published by mistake. Here are some scenarios where you might want to remove your extension from Marketplace: + +-You developed another extension and no longer want to offer the current one. +-Your extension has a problem, so you want to remove your extension from Marketplace until you have resolved the problem. +-You published your extension as public by mistake + +To unpublish, select the extension on your [Marketplace publisher page](https://aka.ms/vsmarketplace-manage) and choose Unpublish on the menu. Your extension will be unpublished immediately from Marketplace and new users won’t be able to install it. Ratings and reviews for your extension will stay intact. To offer your extension again in Marketplace, choose Publish on the menu. + +Important: If you must remove your extension due to legal or security problems, contact the [Marketplace team](http://aka.ms/vsmarketplace-contact). We will review the request and manually delete the extension. + +##Administration + +###Rate Limits – Delaying user requests to avoid outages + +Team Services, like many Software-as-a-Service solutions, uses multi-tenancy to reduce costs and to enhance scalability and performance. This leaves users vulnerable to performance issues and even outages when other users of their shared resources have spikes in their consumption. To combat these problems, we are beginning to introduce rate limiting, which slows down user requests for individuals above our thresholds when their shared resources are in danger of being overwhelmed. + +Our current thresholds are quite high: two hundred times the consumption of a typical user. As such, we do not expect a large number of users to be impacted. When users experience rate limiting, their requests will be delayed, not blocked. The amount of the delay will depend on their sustained level of consumption—it may be as little as a few milliseconds per request or as much as thirty seconds. If their consumption goes to zero, or if their shared resources are no longer in danger of being overwhelmed, the delays will stop after a period of not more than five minutes. If their consumption remains high and their shared resources remain in danger of being overwhelmed, the delays can continue indefinitely. + +When an individual user’s requests are slowed down by a significant amount, an email will be sent to that user and a warning banner will appear in the Web UI. + +![Rate limit warning banner](_img/8_17_24.png) + +If the user does not have an email address—for example, if the “user” is actually a build service account—the notification email will be sent to the members of the project collection administrators group. The warning banner and the notification email will both include links to a new Usage page, which can be used to investigate the usage that exceeded our thresholds, as well as the requests that were delayed. + +![Usage page showing rate limiting instance](_img/8_17_25.png) + +These changes will be rolled out slowly to avoid having unexpected impacts on large numbers of users. As such, the Usage page may not be available in all accounts for some time. For more information, see [https://www.visualstudio.com/en-us/docs/reference/rate-limits](https://www.visualstudio.com/en-us/docs/reference/rate-limits). + +That’s it for this sprint. If you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2016/feb-16-team-services.md b/release-notes/2016/feb-16-team-services.md new file mode 100644 index 00000000000..373ac18e11a --- /dev/null +++ b/release-notes/2016/feb-16-team-services.md @@ -0,0 +1,136 @@ +--- +title: Search extensions on Marketplace, Flexible build policy for Git, SCVMM Support and more – Feb 16 +description: VSTS release notes for February 16 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 8356f67c-3c1a-4094-a8af-e1c63b3b39aa +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Search extensions on Marketplace, Flexible build policy for Git, SCVMM Support and more – Feb 16 + +We have lot to cover with this week’s deployment. So let’s jump right in ... + +##Package management is now available in Europe and Australia + +You can download the Package management extension from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.feed). + +##Search on Visual Studio Marketplace + +Search has been a highly requested feature for Visual Studio Marketplace. With this release we are bringing in basic search support for Visual Studio Marketplace in VSTS and Visual Studio Code extensions. Integrated search is currently not supported for the Visual Studio extensions; searching for the same will currently redirect you to a new tab with results shown from the Visual Studio Gallery. + +##Work item query charts in the dashboard catalog + +You can now add charts for work item queries to the dashboard from the widget catalog. These charts are configurable. You can choose a query, a chart type, and visualization options while staying in the dashboard context. Chart types include pie, bar, column, stacked bar, line, area, and stacked area. You can also display data in a pivot table. And, you can still add charts from the Charts tab in the Work hub and configure them just like you've always done. + +![Configuring a work item query chart for the dashboard](_img/2_16_01.png) + +##Cumulative flow diagram widget + +Using a cumulative flow diagram can help visualize your work in progress to diagnose any bottlenecks happening in your software development process. In this sprint, we’ve added a cumulative flow widget to the dashboard to look at the flow of work in your backlog for a rolling period or a specific iteration. + +![Cumulative flow diagram widget](_img/2_16_02.png) + +##Build retention + +TFS Administrators can optionally specify a maximum amount of time to keep build records in the database after they have been deleted before they are permanently destroyed. You can find this setting under the Build section of the Collection admin page. Setting the value to 0 will prevent builds from being automatically destroyed. + +For VSTS this setting is fixed at 30 days. + +##Flexible build policy for Git + +The build policy for Git repos has been updated to provide a more flexible experience for assessing build quality of a pull request. These are especially useful for larger teams or applications with longer builds. Teams now have three options to adjust the criteria that must be met in order to fulfill the policy. The only option that existed until this deployment is a strict option that requires a new build any time the target branch changes. While this effectively eliminates build breaks, it can be tedious to remerge and rebuild changes in a repo with a lot of activity. + +The first new option is more relaxed: new builds are not required if the target changes. Builds are still required if the source branch changes, as is the case with all of the policy options. This option is like a buddy-build: it provides an assessment of build quality outside of the developer's environment, but it doesn't prevent build breaks. + +The second new option is the ability to provide a window of time in which a successful build is considered valid. For example, once a pull request has been built successfully, updating the target branch won't immediately invalidate that build result. Instead, a timer will begin, and the user will have until that timer expires to complete their pull request. If the time expires, they must remerge and rebuild their changes to fulfill the policy. This option is a good middle ground between the other two it won't eliminate build breaks, but it reduces the likelihood without making it tedious to merge PRs. + +##SonarQube Quality Gates in Build + +When doing a SonarQube analysis with SonarQube 5.3 or later, you can now specify to fail the build if the Quality Gates for the analyzed SonarQube project are not respected. + +![Configuring SonarQube quality gates for a build](_img/2_16_03.png) + +##RM: UI extensibility + +By simply logging from your tasks in a special way, you can publish new sections into Release summary. For example, having the following line in your task will produce a new section called "Attachments". + +Write-Verbose ##vso[Task.UploadSummary] Attachments.md + +You can also add new sections or new tabs in Release summary using UI contribution points. Documentation and contracts for these contribution pointes will be found [here](https://www.visualstudio.com/en-us/integrate/extensions/reference/targets/overview) soon. + +##SCVMM support + +Using the [SCVMM Integration](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.scvmmapp) extension for System Center Virtual Machine Manager (SCVMM), you can now connect to a SCVMM server and easily provision VMs, and perform actions on them like create snapshot, revert snapshot, start, stop etc. These VMs can then be used in Build/RM workflows just like standard and Azure environments. + +![Configuring SCVVMM](_img/2_16_04.png) + +##Exploratory Testing improvements + +The [Exploratory Testing](https://marketplace.visualstudio.com/items/ms.vss-exploratorytesting-web) extension can be found in the Visual Studio Marketplace. + +##Standalone Mode + +In this mode, you can jot down notes, take screenshots (optionally annotate them) and create bugs without connecting to VSTS/TFS. Share your findings with your team in the form of a report containing details of all the bugs created. + +Avoid duplicate bugs + +You can now search and view similar bugs: as you create a bug, the extension will automatically search and list existing bugs based on the Title match. You can optionally update an existing bug with the new information you have collected, thereby avoiding creation of duplicate bugs. + +![Finding similar bugs](_img/2_16_05.png) +![Viewing similar bugs](_img/2_16_06.png) + +##Web-based reports for load tests + +This has been a long-requested feature. You can now view reports for your load tests on the web and analyze load test runs to identify any performance issues in your app. + +You can view key performance metrics such as the Avg. response time, RPS, failed requests, etc., along with application performance charts that indicate key metrics over the entire duration of the load test run. + +Important diagnostics information such as test errors and status messages from the load test run is available in the diagnostics tab. + +![Viewing a web report for load tests](_img/2_16_07.png) + +##Other Improvements + +####Azure SQL Database Deployment task + +Deploy an Azure SQL Database to an existing Azure SQL Server. The Azure SQL Database deployment task now supports both Azure Classic and Azure Resource Manager connection. You can find more details at the [GitHub project](https://github.com/Microsoft/vso-agent-tasks/blob/master/Tasks/SqlAzureDacpacDeployment/README.md). + +####Delete Test Plan + +You can now delete test plans directly from the Test Hub, which has been one of the top [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso/suggestions/5875605-visual-studio-online-add-ability-to-delete-a-tes) items for Test. + +#####mention + +When a user adds a comment with a #mention, the mentioned work item will be added as a related link to the work item. We did this to let you quickly get an overview all related work and to easily create a bidirectional link. + +####Keyboard shortcuts for Kanban board + +You can now click a work item on the Kanban board and use keyboard shortcut keys for common tasks. Here's a sample of what you can do: + +-Create new work items +-Move work items within or across columns and swimlanes +-Expand and collapse work items + +That’s all :-) + +As always, we welcome your feedback. For problems, let us know via Send-a-Smile in Visual Studio Team Services. For suggestions, let us know at the [User Voice site](http://visualstudio.uservoice.com/forums/330519-vso). + +Thanks + +Anand Kamat + + + + + + + + + + + + diff --git a/release-notes/2016/jan-25-team-services.md b/release-notes/2016/jan-25-team-services.md new file mode 100644 index 00000000000..4ce2ff77a97 --- /dev/null +++ b/release-notes/2016/jan-25-team-services.md @@ -0,0 +1,236 @@ +--- +title: Dashboard widget SDK, create branch from work item, test visualizations and so much more – Jan 25 +description: VSTS release notes for January 25 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 5f275e4c-86c9-44fa-8d53-cf7a0d1d792a +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Dashboard widget SDK, create branch from work item, test visualizations and so much more – Jan 25 + +Happy New Year! Because of the holidays, we skipped our December deployment, so we have a ton of exciting things to announce this week. There’s a long list, so let’s jump in… + +##Public preview of the dashboard widget SDK + +It’s here! When we launched dashboards, we mentioned that our widgets are written as [extensions](https://www.visualstudio.com/integrate/extensions/overview), which would also allow you to write and share your own widgets in time. Today, we’re releasing a public preview of our widget SDK. You can get started at [Add a dashboard widget](https://www.visualstudio.com/integrate/extensions/develop/add-dashboard-widget). + +As a reminder, widgets are implemented as a [contribution point](https://www.visualstudio.com/integrate/extensions/develop/contributions-overview) in the extension framework. You’ll need some knowledge of JavaScript, HTML, CSS, and a good idea to build a widget. If you run into issues or have feedback, feel free reach out to us at vsointegration@microsoft<dot>com. + +##Create branch and links to related artifacts + +I’m excited to announce that you can now create a branch directly from a work item! The work item form has a new development section that displays linked branches, commits, and pull requests, and helps users take the next steps in their development workflow by providing context-aware links such as "Create a branch". When a branch is created this way, links will automatically be created to the related work item, enabling faster and simpler workflows. + +![Creating a new branch from a work item](_img/1_25_01.png) + +You will also be able to create a branch directly from the Kanban board. + +![Creating a branch directly from the Kanban board](_img/1_25_02.png) + +In the same way as the work item form, the pull request details view has been updated to include a Related Work Items section. The Related Work Items section lists all of the work items that are linked to a given pull request and provides a simple experience for adding links to more work items. + +![Related work items section in pull request details view](_img/1_25_03.png) + +##Build widgets in the catalog + +As I wrote about in the [dashboards futures blog](http://blogs.msdn.com/b/visualstudioalm/archive/2016/01/11/dashboards-futures-january-2016.aspx), one area we’re focusing on is improving the discoverability and ease in bringing different charts to your dashboard. With this update, you’ll see a new option to add a build history chart from the dashboard catalog, and you’ll be able to configure the build definition displayed directly from the dashboard. + +![Adding a build history chart from the dashboard catalog](_img/1_25_04.png) + +##Markdown widget with file from repository + +The first version of the markdown widget allowed custom markdown stored inside the widget. You can now choose to display any markdown file in your existing repository. + +![Selecting a markdown file for display in the widget](_img/1_25_05.png) + +Or add the file to any dashboard in your team project directly from the Code Explorer. + +![Displaying a markdown file in a dashboard](_img/1_25_06.png) + +##Auto-refresh dashboards + +With today’s update, we’re enabling an option to auto-refresh a specific dashboard every 5 minutes. This is a great way to put the dashboard on your TV monitor or hallway screen and keep it updated. + +![Auto-refresh options](_img/1_25_07.png) + +##Richer visualizations in the build summary page + +####Code coverage + +You’ll now see a graphical representation of the code coverage charts on the build summary page. + +![Code coverage charts](_img/1_25_08.png) + +####Quality trend chart and test duration trend chart + +With this update, we’ve added two new trend charts to the Tests tab on the build summary page. The first chart shows the count of test failures over pass percentage, and the second chart shows test duration over the count of tests. + +![Test failures and test duration charts on build summary](_img/1_25_09.png) + +Clicking each chart will open up a detailed information view, and you can also add them to your dashboard. + +![Test failures and test duration on the dashboard](_img/1_25_10.png) + +##View passed test results and file bugs in build summary page + +One of the top asks that we’ve heard is to view passed test results, in addition to failed tests in the Tests tab on the build summary page. We have added the outcome filter that lets you view passed, failed or all test results. If multiple tests are failing for the same reason, you can now file a single bug for those multiple test failures. + +![Passed and failed tests together in test results](_img/1_25_11.png) + +##Test summary in build status notification email + +You can now find the number of tests that were run, and how many of them passed or failed in the build notification email itself, without opening the build summary page in Team Web Access. + +##Support for editing tags in the bulk edit dialog + +We’re heard your feedback on working with tags, and with this update, you’ll now able to add and remove tags from multiple work items using the bulk edit dialog. + +![Adding and removing tags in bulk edit](_img/1_25_12.png) + +##Deleting a custom field + +In the last [deployment](https://www.visualstudio.com/en-us/articles/news/2015/dec-10-team-services), we introduced the ability to customize work items and add new fields. With this update, users with process editing permissions can now delete custom fields created within their process. This action will delete all data associated with the field, including current values and revision history, and free up the field name for reuse. You can delete a field from the Fields tab on the process administration page. To delete a field, it must first be removed from all work item types that reference it. + +##Keyboard shortcuts + +Following our trend from the last few sprints, we are continuing to add more keyboard shortcuts across the product. Today we’re releasing a set for the Code hub. + +![The latest keyboard shortcuts for Code hub](_img/1_25_13.png) + +##Test plan improvements + +####Filter test plans + +You can now set a filter for test plans that is backed by a query. This allows you to customize the set of test plans you want to work with in the Test hub. + +![Filtering test plans](_img/1_25_14.png) + +####Tests from child suites + +You can now see all tests from the current suite and its child suites with one click—this lets you perform certain operations spanning the suite hierarchy from one place. + +These operations include: + +-Assign testers +-Estimate test planning based on prior test execution (new fields LastRunBy, LastRunDuration, and Build have now been added to Column Options) +-Launch tests for manual testing from the selected suite. + +![Showing tests from child suites](_img/1_25_15.png) + +##Exploratory testing improvements + +The exploratory testing extension can be found in the marketplace: [https://marketplace.visualstudio.com/items/ms.vss-exploratorytesting-web](https://marketplace.visualstudio.com/items/ms.vss-exploratorytesting-web) + +####Search on teams within projects + +You can now search for your team in the search box without needing to browse the project hierarchy tree. This is useful for quick discovery when there is a large number of projects or teams. + +![Search for your team directly](_img/1_25_16.png) +![Search across projects](_img/1_25_17.png) + +####**Explore work item** + +You can now search for a work item from within the exploratory testing session and then associate it with the session. This enables you to refer to the acceptance criteria/description during your exploratory testing and allows end-to-end traceability between any bugs you file during your exploratory session and the selected work item. + +![Search for a work item within exploratory testing](_img/1_25_18.png) + +####**Create tasks** + +You can now capture the issues found during the exploratory testing either as bugs or as tasks, depending on the process followed by the team (agile, scrum or CMMI). + +![Create bugs or tasks from exploratory testing](_img/1_25_19.png) + +##Release orchestration improvements + +We have made a number of improvements to give you better control in managing your release processes. + +####**Better control over order of environments in a release** + +On each environment in a release definition, you will now have the flexibility to model a trigger/deployment condition. You will no longer be constrained to have a linear pipeline. + +For example, these scenarios now light up: + +1.Once a build is completed, you can deploy and run automated tests in parallel on multiple environments/configurations. +2.Once the release is successfully deployed on a Dev environment, you can deploy and test it on multiple QA environments in parallel. +3.You can set the deployment to production to be always triggered manually. +You will also be able to skip environments and manually promote the release to a selected environment. + +![Trigger an automated deployment conditionally](_img/1_25_20.png) + +####**Better control over order of environments** + +To have better control on how multiple pending releases get deployed into a given environment, we have introduced queuing policies for environments. Your CI pipeline may produce builds faster than they can be deployed onto environments in a release management process. Or, multiple releases may be queued up on Prod waiting for an approval after they have passed QA, and it may be desirable to just deploy the last one. + +![Queuing policy options](_img/1_25_21.png) + +####**Better control over time of deployment into an environment** + +You may want to approve a release to be deployed to Prod environment now, but in fact, want that deployment to happen at midnight. We have introduced the ability to defer the deployment at the time of approval. + +![Deferring a deployment](_img/1_25_22.png) + +####**Better control over approvals** + +You may want to configure multiple approvers for an environment, and control whether those approvers can approve in parallel or require an order. We added approval options to help you control this. + +![Configuring approval options](_img/1_25_23.png) + +##Retention policies for releases + +With this update, you can now control how long releases are retained. You can set a retention policy for each release definition. + +The default retention policy for all release definitions is 60 days. By default, releases that have not been deployed or modified for 60 days will be automatically deleted. For releases created prior to this change, they will be retained for 365 days. This policy comes into effect only for new releases that you create after this deployment. + +![Setting a retention policy](_img/1_25_24.png) + +At this point, the retention policies for release management are independent from builds. In a future version, we will help you retain builds based on their usage in release management. + +For more information, see [documentation](https://msdn.microsoft.com/en-us/Library/vs/alm/Release/overview-rmpreview) for release management. You can track all of the new features as and when they get deployed in the [What's new section](https://msdn.microsoft.com/en-us/Library/vs/alm/Release/getting-started/release-notes). Have a question? Follow us on Twitter (@vsreleasemgmt). + +##UI extensibility for release management + +You can now publish new sections into the release summary by using a specific syntax. For example, having the following line in your task will produce a new section called "Attachments": + +Write-Verbose ##vso[Task.UploadSummary] Attachments.md + +You can also add new sections or new tabs in the release summary using UI contribution points. Learn more about these contacts here: + +[https://www.visualstudio.com/en-us/integrate/extensions/reference/targets/overview](https://www.visualstudio.com/en-us/integrate/extensions/reference/targets/overview) + +##Search scope selector + +With this update, we’ve added the ability to choose what to search for—code or work item—directly from the search box. Your last search target is persisted for a given hub. + +![Selecting a search scope](_img/1_25_25.png) + +If you don’t code search in your account, make sure to grab the extension from the marketplace: [https://marketplace.visualstudio.com/items/ms.vss-code-search](https://marketplace.visualstudio.com/items/ms.vss-code-search) + +##Search across Git and TFVC projects + +You can now search for code in Git repositories added to your existing team project created with TFVC. Similarly, you can also search for code in TFVC repositories added to an existing team project created with Git repositories. + +![Searching across Git and TFVC projects](_img/1_25_26.png) + +Whew! That was a long list of improvements. + +Feel free to reach me on Twitter ([@karenkayliu](https://twitter.com/karenkayliu)) if you have thoughts, comments, or questions about anything described here. And please help us prioritize by heading over to [UserVoice](http://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Enjoy! + +Thanks, + +Karen Ng + + + + + + + + + + + diff --git a/release-notes/2016/jul-07-team-services.md b/release-notes/2016/jul-07-team-services.md new file mode 100644 index 00000000000..efe7e0f23ba --- /dev/null +++ b/release-notes/2016/jul-07-team-services.md @@ -0,0 +1,131 @@ +--- +title: Resize charts, PR comment tracking, RM updates and more – Jul 7 +description: VSTS release notes for July 7 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 8a3e5bae-91b5-44d0-8d79-ec4b61393f6d +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Resize charts, PR comment tracking, RM updates and more – Jul 7 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Work + +###Resizable WIT charts on dashboards + +We've gotten a lot of requests from customers to provide larger charts that show more information. By making the WIT chart widgets resizable, we've done just that. In addition, users can open the chart in a lightbox. This allows users to see an expanded view of any WIT chart on the dashboard regardless of its original size. + +###Filter boards to a parent work item + +Team members can now filter their boards to view progress accruing to a specific parent work item. For example, a user can view user stories that are linked to a feature, or view work across two or more features that roll up to an epic. This feature, much like Checklists, is one more step in our effort to bring visibility through to the different backlog levels. + +###Links front and center + +The work item form has been updated to include a new Related Work links control. Now, you'll be able to create, modify, and link work items from the front page of the form. + +![Updated work item form](_img/7_07_01.png) + +###Test settings configuration for Kanban board + +Using the new Tests page in the common settings configuration dialog on the Kanban board, you can now control the test plan under which the inline tests are created. Prior to this, any tests created on a card would automatically be added to a newly created test plan, provided no test plans existed that matched the area and iteration paths of the card. Now, you can override this behavior by configuring an existing test plan of your choice: all the tests will then be added to the selected test plan going forward. Note that this functionality is only enabled if the Test annotation feature is turned on. + +You can easily traverse to the underlying test plan and test suite under which the tests are created, directly from a card on the Kanban board. Clicking this link will take you to the Test hub, open the right test plan, and then select the specific suite that controls those inline tests. + +![Test link on Kanban card](_img/7_07_02.png) + +##Code + +###Comment tracking for pull requests + +Pull requests in VSTS have been improved to show comments left in files on the proper line, even if those files have been changed since the comments were added. Previously, comments were always shown on the line of the file where they were originally added, even if the file contents changed—in other words, a comment on line 10 would always be shown on line 10. With the latest improvements, the comments follow the code to show what the user expects—if a comment was added on line 10, and two new lines were subsequently added to the beginning of the file, the comment will be shown on line 12. + +Here's an example change with a comment on line 13. + +![Code comment in original place](_img/7_07_03.png) + +Even after the code has changed to shift the line with the original comment from 13 to 14, the comment is appearing in the expected place (line 14). + +![Code comment automatically moved](_img/7_07_04.png) + +We think this improvement is a big step forward for improving the code commenting experience in pull requests. In the near future we have even more improvements coming, including improved comment placement for renamed or moved files. + +##Continuous integration + +###Browse Code Coverage reports in the web + +A new Code Coverage tab has been enabled on the Build summary page. Users uploading Code Coverage data in Jacoco or Cobertura formats will be able to browse the HTML report generated by the tool in the Code Coverage tab. + +![Code coverage tab](_img/7_07_05.png) + +###Maven and Gradle tasks produce a build summary when running a SonarQube analysis + +When you enable the Run SonarQube Analysis option in the Maven or Gradle build tasks, you will now get a link on the SonarQube project. This is a first step. We are working on a richer build summary showing quality gate results. + +![SonarQube Analysis Report link](_img/7_07_06.png) + +##Release + +###Agent queue role-based security + +To control permissions for users and groups on agent pools and queues, you had to add them into two predefined groups for the pools and queues without any further control. You can now choose a user or group as being a reader, user, or administrator for the agent pool or queue, and get clarity on what permissions are assigned. + +###Task-level time-outs + +This feature enables users to set a time-out on an individual task (in addition to a time-out that can be already set on the entire deployment). The same feature works for tasks both in Build and Release. + +###Import/Export/Clone release definition + +Based on popular demand, we have now incorporated the ability to clone, export, and import release definitions within the Release hub in Team Services without requiring you to install an extension. If you are using Team Foundation Server 2015 U2 or higher, you can still download and install the extension from the [marketplace](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.rm-import-export). + +###Web app deployment using ARM + +This is a new version of the Azure Web App deployment task using the MSDeploy & Azure Resource Manager service connection. This enables new functionality that the existing one doesn’t have. For example, users can deploy Azure web jobs and Azure API apps in addition to ASPNET 4, Node.js, and Python-based web apps. We have also enabled support for common publish options, the ability to "Retain App Data", taking "App Offline" and the ability to "Remove additional files at destination". We have more work planned in future sprints such as supporting configuration transformations. + +###Partially successful deployments + +This feature enables a deployment to be partially successful when a task marked with “Continue on error” flag fails. When a deployment to an environment succeeds partially, it can still trigger subsequent deployments to other environments. + +###View and download attachments associated with releases + +Would you like to upload additional logs or diagnostics or images when running tasks in a release? This feature enables users to upload additional files during deployments. To upload a new file, use the following agent command in your script: + +Write-host "##vso[task.uploadfile]<filename>" + +The file is then available as part of the release logs. When you download all the logs associated with the release, you will be able to retrieve this file as well. + +###Github artifacts for RM + +Continuing with the work we started last sprint on using Git and TFVC as artifact sources directly in RM, for this Sprint, we enabled the same for Github. If you need to deploy Node.js, JS, or PHP applications, where an explicit build step is not needed, and if you are using Github for managing your code, then you can now directly configure a Github artifact source in a release definition. + +###.NET SQL Extension + +The [IIS Web App deployment using WinRM extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.iiswebapp) in Marketplace has been extended to support database DACPAC deployments. With this, users can deploy and manage IIS web app and databases, both from TFS and Team Services. + +##Test + +###Image action log in Web Test runner + +In the Web runner when using Chrome, in addition to screenshots and screen recordings, you can now capture on-demand image action logs from your web apps. You specify the browser window on which to capture your actions—all actions on that window (any existing or new tabs you open in that window), or any new child browser windows you launch, will automatically be captured and correlated against the test steps being tested in the Web runner. These image action logs are then added to any bugs you file during the run and also attached to the current test result. This leverages the capability from the Chrome-based [Exploratory testing extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web). + +![Capturing on-demand image action logs](_img/7_07_07.png) + +###Order tests in Test hub + +Test teams can now order the test suites as per their needs. Prior to this capability, the suites were only ordered alphabetically. Now, using the drag-and-drop capability in Test hub, suites can be reordered among the peer suites or moved to another suite in the hierarchy. This addresses the following [User Voice](https://visualstudio.uservoice.com/forums/330519-vso/suggestions/2726830-add-ability-to-order-test-suites) item under manual testing/test case management. + +![Drag-and-drop test reordering](_img/7_07_08.png) + +###Pick a build to test with + +You can now pick the build you want to test with and then launch the Web runner, using “Run with options” in Test hub. Any bug filed during the run will be automatically associated with the build selected. In addition, the test outcome is also published against that specific build. Once we release the Microsoft Test Manager 2016 (MTM) client, you can use the same mechanism to specify the build and the data collectors to use with the Microsoft Test Runner (MTR) client, without having to configure them in MTM first. Stay tuned for more on this. + +That’s it for this sprint. If you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2016/jul-29-team-services.md b/release-notes/2016/jul-29-team-services.md new file mode 100644 index 00000000000..edaf9f2df07 --- /dev/null +++ b/release-notes/2016/jul-29-team-services.md @@ -0,0 +1,139 @@ +--- +title: Release, test and Git/TFVC history view improvements – Jul 29 +description: VSTS release notes for July 29 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 47937cb7-c488-4d34-add0-c40320d08483 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Release, test and Git/TFVC history view improvements – Jul 29 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Git & TFVC – History view and diff view updates + +The history view for commits, change sets, shelve sets, and branch updates gets a more modern avatar. + +![Modern avatars in history view](_img/7_29_01.png) + +You will also see the modern path explorer on the top of the commit history view, letting you now browse files from within the history view rather than switching contexts to the explorer view. + +The summary diff view has been improved to emphasize which parts of a line were modified, making it easier to review changes to files. + +![Summary diff view](_img/7_29_02.png) + +The new Git repository creation dialog has been improved by letting users add a ReadMe file. Adding a ReadMe to the repository not only helps others understand the purpose of the codebase, but also lets you clone the repository immediately. + +![Creating a new repository, with README option](_img/7_29_03.png) + +##Restrict Package Management feed creation + +Project Collection Administrators can now restrict the permission to create feeds to selected users using the new Package Management settings dialog. + +![Accessing the Package Management Settings dialog](_img/7_29_04.png) + +##Release management improvements – Azure deployments, release policies + +###Agent queue management + +Now you can create queues from within a team project by selecting a pool which is not referenced by any other queue in the team project or create a queue with a new pool. + +![Viewing agent queues](_img/7_29_05.png) + +![Creating an agent queue](_img/7_29_06.png) + +###Azure deployments + +Now, setting up an Azure Service endpoint is easy: you just need to select the subscription on which to create a service endpoint, and you are ready to deploy to Azure. + +![Adding an Azure service endpoint](_img/7_29_07.png) + +-Users can now automatically set up an ARM service connection by selecting the subscriptions linked with the Azure Active Directory that is backing the VSTS account. +-Note: A new Azure Service Principal will be created and assigned the Contributor role, having access to all the resources in the selected subscription. You can modify the Service Principal access from [Azure portal](http://portal.azure.com/) > Subscriptions > Users > Roles. + +-Prerequisites: +-The VSTS account should be backed by an Azure Active Directory. For more info, see the Visual Studio article [Team Services: Access with Azure Active Directory (Azure AD)](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/manage-organization-access-for-your-account-vs). +-Note: Only Azure subscriptions that are linked with the Active Directory are listed. + +You can now deploy to **Azure National Cloud environments**. While setting up an Azure Classic service connection: + +-You can select the Environment option to target the desired Azure National Clouds, namely, Azure Cloud (default), Azure China Cloud, Azure US Government, and Azure German Cloud. +-You can set up the service connection with either the Certificate or the Credentials option. Once it’s configured, you can use the service connection with the tasks that deploy to Azure Classic endpoints: for example, Azure Web App Deployment, Azure Cloud Service deployment, and Azure tasks that take an Azure Connection Type of ”Classic.” + +![Adding an Azure Classic connection](_img/7_29_08.png) + +###Policies – Soft delete releases + +When you delete a release (or if a release is deleted by the retention policy), it will now be added to the Deleted tab. Deleted releases stay in this area for a fixed period of time (two weeks), and are then deleted permanently. During this period, you can undelete a release and reset its retention period. + +![Deleted releases tab](_img/7_29_09.png) + +###Policies – Retention of releases and builds + +You may often want to retain releases that have been deployed to your production environment longer than those that were just deployed to QA environments. This feature allows you to configure retention setting based on the environments to which a release has been deployed. Furthermore, you can now retain builds that are part of releases as long as the releases are present in the system. A release will hold onto the builds that are associated with it until the release is deleted. Such builds will be retained irrespective of the retention policy on the builds themselves. Once you delete a release, or once the retention policy deletes a release, the associated builds are released, and the builds’ own retention policies kick in (which in turn might cause those builds to be deleted). + +![Setting retention policies in different environments](_img/7_29_10.png) + +###Release definition authoring improvements – linked artifacts improvements + +We have improved certain experiences associated with linking multiple artifact sources to a release definition. First, each of the artifacts is downloaded into a folder on the agent called the “source alias.” You can now edit the source alias of a linked artifact. You can do this, for instance, when you change the name of the build definition, and you want to use a source alias that reflects the name of the build definition. Second, a number of variables of the format Build.* (e.g., Build.BuildId, Build.BuildNumber) are made available to tasks. When multiple sources are associated with a release, these variables are populated based on the build that triggered the release, or based on some random build. Now, this has been made more predictable. You can mark a certain artifact source as primary, and the information pertaining to that source is used to populate the Build.* variables. + +You can also filter releases by branch (of the build that got deployed) on the Release Explorer page. + +###Release – redeploy after success + +When a deployment to an environment fails, you may want to be able to redeploy an older release that already succeeded once in that environment. This feature lets you do just that. When you try to redeploy an older release, you will be shown the list of commits as well as the list of work items that will be rolled back. You just need to make sure that the automation scripts for deployment can really handle the rollback scenario. That is still on you. + +![Redeploying an older release](_img/7_29_11.png) + +##Test traceability and release environments support in Test History + +Users can now track the quality of their requirements right on their Dashboard. We already have a solution for requirements quality for our Planned Testing users, and we are bringing it to users who follow Continuous Testing. Link your automated tests directly to requirements, and then use Dashboard widgets to track the quality of requirements you are interested in tracking, pulling the quality data from build or release. + +![Requirements quality](_img/7_29_12.png) + +A few weeks back, we enabled [viewing history of an automated test](jun-17-team-services.md) grouped by various branches against which the test was run. In this deployment, we are adding support for viewing the history of an automated test grouped by various release environments in which the test is run. If you are modelling release environments as release pipelines or test environments, and running tests across such environments, you can find out if a test is passing in, say, the dev environment, but failing in the Integration environment, or passing with an environment that has English locale, but failing in an environment that has Turkish locale. For each environment, you will find the status of the latest test result, and if the test has failed on that environment, you will also find the release since which the test has been failing. + +##Exploratory testing improvements – view unexplored work items, capture web page load data + +In addition to seeing the details of all the explored work items in the Recent exploratory sessions view, filtered by All or My sessions for a given date range, we have now added the ability to also see a list of all work items that have ***not*** been explored, in the same view. You start by specifying a shared query for work items in which you are interested, and the sessions page shows a list of all the work items from the query with a breakdown of both explored and unexplored items in the summary section. In addition, using the “Unexplored Work Item” group by pivot, you can see the list of items that have not been explored yet. This is extremely useful to track down how many stories have not been explored or gone through a bug-bash yet. + +![Viewing unexplored work items exploratory testing](_img/7_29_13.png) + +We have added a new background capture capability to the [exploratory testing extension](https://chrome.google.com/webstore/detail/exploratory-testing-previ/gnldpbnocfnlkkicnaplmkaphfdnlplb) – capturing of web page load data. Just as the image action log captured your actions performed on a web app being explored, in the form of images in the background, the page load functionality automatically captures details for a web page to complete the load operation. Instead of relying on subjective, perceived slowness of web page load, you can objectively quantify the slowness in the bug now. Once the bug is filed, in addition to the tile view, a detailed report is also attached to the bug, which can help the developer with the initial set of investigations. + +![Creating a new bug with captured page load data](_img/7_29_14.png) + +![Detailed report attached to the bug](_img/7_29_15.png) + +##Dashboard improvements + +You can now copy widgets, with configuration, to other dashboards from the widget's menu. + +You can also now drag widgets from the catalog onto their dashboards. + +##Java PMD analysis in Gradle build task + +You can now request a PMD analysis in the Gradle build task and see the number of issues in the build summary. The Artefact tab of the build summary contains the results of the PMD static analysis. Multiple pom files are supported. For the moment, this only works with the Linux agent. + +![Selecting a PMD analysis be run in the Gradle build task](_img/7_29_16.png) + +##User management – export users and licenses + +Finally, you can now easily export users and their licenses to excel. Simply go to the Users hub, under All Users, and select "Export users" on the toolbar. + +##Backlog extension points + +We have exposed a new extension point on the backlog. With this deployment, extensions can target the pane on the right side, where mapping and work details are today. + +![Build extension point for right-side mapping and work details panes](_img/7_29_17.png) + +That’s a lot for this sprint! If you have comments or questions, please reach out on Twitter ([@gopinach](https://twitter.com/gopinach)). If you have ideas for things you’d like to see us prioritize, head over to [UserVoice](http://visualstudio.uservoice.com/forums/121579-visual-studio) to add your idea or vote for an existing one. + +Thanks, + +Gopinath Chigakkagari \ No newline at end of file diff --git a/release-notes/2016/jun-01-team-services.md b/release-notes/2016/jun-01-team-services.md new file mode 100644 index 00000000000..74aa5ab90c3 --- /dev/null +++ b/release-notes/2016/jun-01-team-services.md @@ -0,0 +1,131 @@ +--- +title: SSH connections to Git repos, Docker integration, and more – June 1 +description: VSTS release notes for June 1 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 97422998-d25a-4e10-a77a-28cca7641dd4 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#SSH connections to Git repos, Docker integration, and more – June 1 + +With this release we’re introducing new agile features as well as enhancements to dashboards, coding, package management, test, and build and release management. + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Agile + +###Filtering in Kanban board + +Personalize your Kanban boards by setting filters on users, iterations, work item types, and tags. These filters will persist so that you can view your personalized board, even when you connect from multiple devices. + +![Setting filters on the Kanban board](_img/6_01_01.png) + +###Process configuration REST APIs + +This public API allows users to get the process configuration of a given project. The process configuration contains the following settings: + +-**TypeFields:** abstractions of customizable fields that are used in the agile tooling. For example, the type of the "Story points" field is "Effort". +-**Backlog definitions:** define what work item types are on each of the backlogs. + +This is a frequently requested API from customers building extensions. With this data, an extension can know how to leverage process-specific fields to enable common scenarios in the agile tools (such as changing the activity or effort of a work item, knowing what work items are included at a given backlog level, or determining whether teams are identified by area path or a custom field). The documentation is available here: [https://www.visualstudio.com/integrate/api/work/overview](https://www.visualstudio.com/integrate/api/work/overview) + +###Default iteration path for new work items + +When you create a new work item from the Queries tab or from the New Work Item dashboard widget, the iteration path of that work item is always set to the current iteration. This is not what all teams want, because it will mean that bugs could show up on the task board immediately. With this improvement, teams can choose the default iteration path (a specific one or the current iteration) that should be used for new work items. Navigate to the administration area for your team to choose a default iteration. + +##Code + +###SSH clients can connect to Git repos + +Team Services Git repos now support SSH connections. This makes it easy for many development tools, build systems, and other services to connect, especially if you develop on Mac or Linux. You can get the SSH clone URL for your repo from the Clone button on the web, and also manage SSH keys on your profile page. + +![Managing SSH connections to Git repos](_img/6_01_02.png) + +SSH has been enabled on all existing accounts. For the next sprint, SSH won't be enabled on new accounts until a few hours after the account is created. That restriction will go away shortly. + +###Redesigned Branches page + +The Branches page has been completely redesigned. It has a "mine" pivot that shows the branches I created, pushed to, or favorited. Each branch shows its build and pull requests status, as well as other commands like Delete. If there is a slash in a branch name, like "features/jeremy/fix-bug", it's shown as a tree, so it's easy to browse through a large list of branches. If you know the name of your branch, you can search to find the one you want quickly. + +![Branches page showing the Mine pivot](_img/6_01_03.png) + +###Create and send links to specific sections of code + +Share code references easily with code links. Just select text in a file and click the Link icon. It will copy a link to the selected code. When someone views that link, the code you highlighted will have a gold background. It even works for partial line selections. + +![Creating a link to code](_img/6_01_04.png) + +##Package + +###API updates for package management + +We’re shipping two updates to our API to help you understand and manage the contents of your feeds. + +1. New additions to the [Packages API](https://www.visualstudio.com/integrate/api/packaging/packages) enable you to get details about all the packages in a feed, about a particular package, and about all the versions of a package. This means you can now retrieve your packages programmatically without using NuGet. +2. A new [Polling API](https://www.visualstudio.com/integrate/api/packaging/polling) lets you check for updates to feeds and the packages in them. This can help you keep tabs on frequently-updated feeds and react to newly-added packages. + +##Test + +###Screenshot and system info support in Chrome Web runner + +In the Web runner when using Chrome, you can now take screenshots and annotate them inline. These screenshots are automatically added to the current Test step and also show up as part of any bugs you file. Similarly, the system information data is automatically captured and included as part of any bugs you file from the Web runner. It leverages the capability from the Chrome-based [Exploratory testing extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web) for capturing both screenshots and system info. + +![Capturing a screen in the Web runner](_img/6_01_05.png) + +###Ordering of tests in Test Hub + +You can now order manual tests from within the Test Hub, irrespective of the type of suite in which they’re included. You can simply drag and drop one or more tests or use the context menu to reorder tests. Once the ordering is completed, you can sort your tests by the Order field and then run them in that order from the Web runner. You can also order the tests directly on a user story card on the Kanban board. This completes one of the long-pending [user voice items](https://visualstudio.uservoice.com/forums/330519-vso/suggestions/4147125-enable-changing-the-order-of-test-cases-on-the-web) (with 495 votes) under manual testing. + +![Ordering tests](_img/6_01_06.png) + +![Ordering tasks on the Kanban board](_img/6_01_07.png) + +##Build and Release + +###Docker integration for build and release management + +Take advantage of the VS Team Services cloud-based build capabilities to build your Docker images and upload them to the Docker Hub as part of your continuous integration flow. Then, deploy those images to a number of Docker hosts as part of Release Management. The [Marketplace extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker) adds all the service endpoint types and tasks necessary for you to work with Docker from VS Team Services. + +![Running a Docker image](_img/6_01_08.png) + +###SonarQube results in pull request view + +If the build run to merge a pull request contains SonarQube MSBuild tasks, you will now see new code analysis issues as discussion comments in the pull request. This experience works for any language for which a plug-in is installed on the SonarQube server. For more information, see this blog post. + +![SonarQube analysis comments](_img/6_01_09.png) + +###Test results trend for build + +We have added a new ”Test result trend” widget to the Widget Gallery. Use this widget to add a test result trend chart to the dashboard of up to the 30 most recent builds for a build definition. Widget configuration options can help you customize the chart to include pivots like passed test count, failed test count, total test count, pass percentage and test duration. + +![Test results trend widget](_img/6_01_10.png) + +###Service hooks for release management + +Send release notifications when new releases are created, when deployments are started or completed, or when approvals are pending or completed. Integrate with third-party tools such as Slack to receive such notifications. + +###TeamCity artifacts for release management + +If you are a TeamCity user, you can now consume TeamCity builds as artifacts in Release Management. Install the TeamCity artifacts extension from Visual Studio Marketplace to setup a TeamCity service endpoint. Then, configure your release definitions to deploy artifacts produced by TeamCity builds. + +![LInking a TeamCity artifact source](_img/6_01_11.png) + +###Release Management Client SDK + +If you need to work with Release Management REST APIs, we now have a [C# client SDK](https://www.nuget.org/packages/Microsoft.VisualStudio.Services.Release.Client/) available as a nuget package. A sample usage can be found here: [http://blogs.msdn.com/b/chandananjani/archive/2016/04/28/using-releasehttpclient-for-interacting-with-releasemanagement-service.aspx](http://blogs.msdn.com/b/chandananjani/archive/2016/04/28/using-releasehttpclient-for-interacting-with-releasemanagement-service.aspx) + +##Dashboards + +###Dashboards REST APIs + +You can now use REST APIs to programmatically add, delete and get information on a dashboard. The APIs also let you add, remove, update, replace, and get information on a widget or a list of widgets on a dashboard. The documentation is available on [Visual Studio online docs](https://aka.ms/dashboardapi). + +A number of features in this release are directly based on feedback that you submitted. If have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Vijay Machiraju \ No newline at end of file diff --git a/release-notes/2016/jun-17-team-services.md b/release-notes/2016/jun-17-team-services.md new file mode 100644 index 00000000000..846fababff1 --- /dev/null +++ b/release-notes/2016/jun-17-team-services.md @@ -0,0 +1,164 @@ +--- +title: Git & TFVC updates plus improved test traceability … – June 20 +description: VSTS release notes for June 17 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: fa3df506-57bb-4910-9dca-4bf1b567b97e +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Git & TFVC updates plus improved test traceability … – June 20 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +##Git & TFVC – Browsing branches + +The branches page scales to massive repos with thousands of branches. If there are more than 100 branches at the root or in a folder, it only shows the first 100, which is what the vast majority of people use. If you don't want to browse thousands of branches, the search box—with substring matching—will quickly find the branch you want. + +##Git & TFVC – Ahead/behind + +Ahead/behind has returned! This was a sorely-missed feature that didn't make it into the initial redesign of the branches page. It shows the number of commits that a branch is ahead or behind when compared to the repo's default branch. + +![Ahead/behind](_img/6_17_01.png) + +##Git & TFVC – Branch picker includes “Mine” + +Now it's easy to quickly switch to the branches you care about. The branch picker defaults to "Mine," which shows the branches you created, pushed to, and favorited. This is the same experience as the Branches page. To favorite a branch go to the Branches page, and search or browse for the branches you care about, and click the star. + +![Branch picker featuring Mine](_img/6_17_02.png) + +##Git & TFVC – Path control + +The new path control in Explorer makes it easier to navigate files in your repo, even if you close the tree control. It's one click to jump to a parent folder, and you can click in the control to copy or type a new path. Since the new control is next to the branch picker, you get even more vertical space to view a folder or file. + +![Path control in Explorer](_img/6_17_03.png) + +##Git & TFVC – File type icons + +You will see new file icons matching the extension of the file in the explorer, pull requests, commit details, shelveset, changeset, or any other view that shows a list of files. + +![New file type icons](_img/6_17_04.png) + +##Work Items – An improved header + +Let's take a look at a few updates to the work item header that you'll want to be aware of. First, the amount of space that the header takes up has been optimized, improving your experience on devices with lower resolutions. We've made "Save" and "Save and Close" the clear CTA (call to action) on the form and increased their clickable area significantly. No more wondering around where the save icon is located. And, we made a small change to move the State and Reason fields closer together. + +![Improved work item header](_img/6_17_05.png) + +##Work Items – Custom states + +The first milestone in bringing states customization to Team Services is here. With this deployment, you can customize the states on your inherited work item types. We have added a new states node to the work item type process administrator page where you can view and modify the workflow for that work item type. More information is available at this [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/?p=17495). + +##Exploratory Testing – Insights + +You can now view the completed exploratory testing sessions, either at a team or individual level, for a given time period created using the [exploratory testing extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web). You can get to this insights page by clicking the “Recent exploratory sessions” link in the Runs hub within the Test Hub group in web access. This new view helps you derive meaningful insights, including: + +-The summary view that shows a breakdown of the work items explored, the work items created, and the session owners, along with the total time spent on these sessions. +-The group-by view that can be pivoted by either explored work-items or sessions or session owners or none. For any pivot, you can either view the list of all work items (bugs, tasks, test cases) created or scope the list down to a specific work item type. +-The details pane view that displays information based on selection in the group-by view. For a selected pivot row (say explored work items), you can view its summary information in the details pane, such as the total number of sessions, the total time spent across these sessions, the session owners who explored it, and the bugs/tasks/test cases created against it, along with their state and priority. For a selected work item row, you can view its work item form inline and make changes as appropriate. + +![Insights in exploratory testing](_img/6_17_06.png) + +##Exploratory Testing – Auto stop screen recordings + +We have now added the ability to automatically stop a screen recording and attach it to a bug being filed in the exploratory testing extension. Prior to this, there was no indication that the ongoing screen recording would be discarded unless it is explicitly stopped prior to filing the bug. + +![automatically stop and attach a screen recording](_img/6_17_07.png) + +With this deployment, the exploratory testing extension also supports localized versions of TFS 2015 RTM and above. + +##Screen recording support in Web runner (for Chrome) + +In the Web runner when using Chrome, you can now capture on-demand screen recordings of not just the web apps, but also your desktop apps. These screen recordings are automatically added to the current test result and show up as part of any bugs you file. This leverages the capability from the Chrome-based [exploratory testing extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web). + +##Bugs filed as children – Web runner/Exploratory testing extension + +When running tests in Web runner, launched either from a card on the board or from a requirement-based suite in Test hub, any new bugs filed will now be automatically created as a child to that user story. Similarly, if you are exploring a user story from the [exploratory testing extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web), any new bugs you file will also be created as a child to that user story. This new behavior allows for simpler traceability across stories and bugs. In certain scenarios, such as adding to an existing bug that already has a parent defined, a Related link will be created instead. + +##Test – History across branches + +It’s a common scenario for an individual test to run on multiple branches, environments and configurations. When such a test fails, it’s important to identify whether the failure is contained to development branches such as the master branch, or release branches that deploy to production environments. You can now visualize the history of a test across various branches by looking at the History tab in result summary page. Navigate to the first build in which the failure was introduced for additional context: commits and build logs. We plan to add support for visualizing history across additional pivots (environments and configurations) in upcoming sprints. + +![History tab in the result summary page](_img/6_17_08.png) + +##Test – Automated testing for SCVMM and VMWare + +Users can dynamically set up test machines in the cloud with Azure, or on premises using SCVMM or VMWare, and use these machines to run their tests in a distributed manner. Users can use one of the machine provisioning tasks— [Azure, SCVMM or VMWare](https://marketplace.visualstudio.com/items?itemname=ms-vscs-rm.vmwareapp)—followed by the [Run Functional Tests task](https://www.visualstudio.com/en-us/docs/build/steps/test/run-functional-tests) to run tests. For more information, please see the [Visual Studio docs](http://go.microsoft.com/fwlink/?LinkId=799813). + +##Release – Test status visibility + +It’s a recommended practice to use Release Environments to deploy applications and run tests. With this deployment, we have integrated test pass rates of Release Environments in the environments section of the release summary page. As shown in the screenshot below, if an environment has failed, you can quickly infer if the failure is because of failing tests by looking at the Tests column. Click on the pass rate to navigate to the tests tab and investigate the failing tests for that environment. + +![Tests tab showing failing tests](_img/6_17_09.png) + +##Release – Support Java PMD analysis in Maven build task + +You can now request a PMD analysis in the Maven build task and see the number of issues in the build summary. The Artefact tab of the build summary contains the results of the PMD static analysis. Multiple pom files are supported. For the moment, this only works with the Linux agent. More information is available at this [blog post](http://https/blogs.msdn.microsoft.com/visualstudioalm/2016/06/15/the-maven-build-task-now-supports-pmd-analysis-out-of-the-box). + +![Running a PMD analysis in the Maven build task](_img/6_17_10.png) + +##Build – SonarQube with a Gradle build task + +You can now trigger a SonarQube analysis in the Gradle build task by checking **Run SonarQube Analysis**, and providing the endpoint, the SonarQube project name, the project key and the version. More information is available at this [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/06/15/the-gradle-build-task-now-supports-sonarqube-analysis). + +![SonarQube analysis in the Gradle build task](_img/6_17_11.png) + +##Release – Passing oauth tokens to scripts + +You might often need to run custom PS scripts in Release Management, which invoke REST APIs to create work items or query for more information about a build. You can now check an option in the environment to make a VSTS OAuth token available to such scripts. + +![OAuth token option](_img/6_17_12.png) + +Here is a simple example on how to get a build definition: + +$url = "$($env:SYSTEM_TEAMFOUNDATIONCOLLECTIONURI)$env:SYSTEM_TEAMPROJECTID/_apis/build/definitions/$($env:SYSTEM_DEFINITIONID)?api-version=2.0" + Write-Host "URL: $url" + $definition = Invoke-RestMethod -Uri $url -Headers @{ + Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN" + } + Write-Host "Definition = $($definition | ConvertTo-Json -Depth 1000)" + +##Build – Enable path filters for Git CI triggers + +CI triggers for hosted Git repositories can include or exclude certain paths. This enables you to configure a build definition to run only when files in specific paths have changed. + +![Enabling path filters for Git CI triggers](_img/6_17_13.png) + +##Build – Updated hosted pool software + +We’ve updated the software available in our hosted build pool to include: + +-.NET Core RC2 Tooling +-Service Fabric runtime, SDK, and tools for Visual Studio 2015 + +For a full list of software, see [https://www.visualstudio.com/en-us/docs/build/agents/hosted-pool](https://www.visualstudio.com/en-us/docs/build/agents/hosted-pool). + +##Dashboards – Resizable query results widget + +Teams can now configure the size of the dashboard's Query Results widget, allowing it to display more results. + +##Third-party plugins – Jenkins plug-in to RM + +Users of Jenkins CI can now create releases more easily using the [Team Services Continuous Deployment](https://wiki.jenkins-ci.org/display/JENKINS/VS+Team+Services+Continuous+Deployment+Plugin) plugin. Add post-build steps right into your Jenkins CI project to create a new release. This, along with the ability for Release Management to understand and download Jenkins artifacts, provides a great end-to-end integration between these two tools. + +##Marketplace – Publisher review responses + +Signed-in users who have Owner/Creator/Contributor permissions on a publisher will see an additional reply option next to a review. Clicking it will open a dialog box that will allow them to respond to a review. The response will show up under the existing review with the extension icon and publisher display name. + +##Team Rooms – Build vNext support + +And finally, it has been always possible to add notifications of XAML builds in the team room. In this latest deployment we added the ability to receive notifications from Build vNext as well. + +As always, if you have comments or questions, please reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)). If you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork + + + + + diff --git a/release-notes/2016/mar-03-team-services.md b/release-notes/2016/mar-03-team-services.md new file mode 100644 index 00000000000..cedea32553f --- /dev/null +++ b/release-notes/2016/mar-03-team-services.md @@ -0,0 +1,112 @@ +--- +title: Better exploratory testing, test results for release environments, squash merge, and more – Mar 3 +description: VSTS release notes for March 3 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 66042038-4458-4bd3-8257-91e3cd7c7ee4 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Better exploratory testing, test results for release environments, squash merge, and more – Mar 3 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +Our deployment this week is jam-packed with new value. Let’s start by looking at test results in release environments. + +##View test results for each release environment + +We’ve enabled a feature that lets you view test quality and test results in context of release. The Tests tab in the Release summary page will show you test status of each environment in which tests have run. The status includes count of passed and failed tests, pass percentage, and test duration, for a particular environment or for the entire release, across all environments. You can drill down into the error message, stack trace and test attachments for failed tests without having to navigate away from the Release summary page. From here you can create bugs for failed tests and auto-populate the bug with related information (error messages, stack traces, etc.). + +![Viewing test results](_img/3_3_01.png) + +##Triggers: Deploy based on completion in multiple environments (join) + +Additionally, you can now create release definitions that release to an environment (say, Prod) automatically after a successful deploy to multiple environments (for example, QA1 and QA2). This is an extension to the set of features aimed at providing more control over complex release orchestrations. + +##Epic and Feature board drill-down + +Last summer we released a [feature](https://www.visualstudio.com/en-us/articles/news/2015/sep-18-team-services) that lets you drill down to tasks directly from a Kanban board of stories. We’ve extended that feature to boards at any level, giving you the ability to drill down on your Epic and Feature boards. The checklist format lets you easily mark work as completed, and provides a handy bird’s eye view of the completed versus outstanding work. + +![Board drill-down](_img/3_3_02.png) + +##Exploratory testing directly from a work item + +You can now launch an exploratory testing session for a specific work item, directly from within the product. We’ve added entry points on all cards, grids, and in the Test hub. This lets you associate the selected work item to your testing session and view the acceptance criteria and description from within the extension. It also creates end-to-end traceability between any bugs or tasks you file and the selected work item. The [Exploratory Testing](https://marketplace.visualstudio.com/items/ms.vss-exploratorytesting-web) extension can be found in the Visual Studio Marketplace. + +![Exploratory testing directly from a work item](_img/3_3_03.png) + +##Data collection: Image action log + +The Exploratory Testing extension also gives you a new option to add the steps that led to the bug automatically with just one click. Select the **Include image action log** option to capture the mouse, keyboard, and touch actions, and add the corresponding text and images directly into the bug or task. + +![The include-image-action-log option](_img/3_3_04.png) + +##Create test cases based on Image action log data + +You can also now create test cases during your exploratory session, wherein the test steps with images are automatically filled in for you. Simultaneous test design and test execution is the basis of true exploratory testing, and this new capability makes this a reality. You can edit the text captured, add the expected result, uncheck rows not relevant, and save it for upcoming test passes/runs. + +![Creating a test case based on image action log data](_img/3_3_05.png) + +##Assigning configurations to test plans, test suites and test cases + +Assigning configurations just got easier as we turned on a new feature that allow you to assign test configurations to a test plan, test suite or test case(s) directly from within the Test hub. Right-click an item, select **Assign configurations to** …, and you’re off and running. The ability to create and manage test configurations and test configuration variables from within the Test Hub is coming next. + +![Assigning configurations to a test suite](_img/3_3_06.png) + +##Squash merge pull requests + +When completing a pull request, you now have the option to squash merge. This new option will produce a single commit containing the changes from the topic branch that will be applied to the target branch. The most notable difference between a regular merge and a squash merge is that the squash merge commit will only have one parent commit. This will mean a simpler history graph, as any intermediate commits made to the topic branch will not be reachable in the resulting commit graph. + +![Completing a pull request with squash merge option](_img/3_3_07.png) + +##Clone in IntelliJ, Android Studio, etc. + +Right from your repo on the web, you can clone in IntelliJ, Android Studio, and other IDEs. All you need is the latest version of the VS Team Services plug-in for your IDE to save precious time getting started with a new repo. + +![Cloning a repo in Android Studio](_img/3_3_08.png) + +##Gated builds for Team Foundation Version Control (TFVC) + +Team build now supports creating a gated trigger for a build definition on a TFVC repository. You can read more here [https://msdn.microsoft.com/Library/vs/alm/Build/define/triggers#gated](https://msdn.microsoft.com/Library/vs/alm/Build/define/triggers#gated). + +##Automated testing on Azure environments + +Using the “Azure Resource Group Deployment” task, users can provision Azure resources (such as virtual machines) using a template file, and then deploy the latest build into those resources using resource extensions (for example,, the DSC resource extension). The same Azure resources can be used in the "Visual Studio Test Agent Deployment" and "Run Functional Tests" tasks to run tests in a fast, efficient and distributed way. + +##NuGet package delist + +We’ve added the ability to permanently delist packages from a feed. When a package is delisted, it no longer shows up in any package listing, whether on the web, the NuGet Visual Studio extension, or nuget.exe. Delisted packages remain downloadable by specifying an exact version, which allows the Restore workflow to continue working. To permanently delist a package, run: + +nuget.exe delete <package ID> <package version> -Source <NuGet v2 endpoint URL> -ApiKey VST + +##Office connector + +We had originally included the Office 365 Connector in these notes. Unfortunately, this is not available yet. We’re investigating a few open issues, and we’ll update this post as soon as we have more information. Thank you for your patience. + +That’s it! Lots of great new value here. Feel free to reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)) if you have questions. If you have ideas on things you’d like to see us prioritize, head over to [UserVoice](http://visualstudio.uservoice.com/forums/121579-visual-studio) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork + + + + + + + + + + + + + + + + + + + diff --git a/release-notes/2016/mar-24-team-services.md b/release-notes/2016/mar-24-team-services.md new file mode 100644 index 00000000000..a597ec0691c --- /dev/null +++ b/release-notes/2016/mar-24-team-services.md @@ -0,0 +1,95 @@ +--- +title: Improved commit traceability, custom multiline fields, and board/test integration - Mar 24 +description: VSTS release notes for March 24 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 82e1be4f-ab46-40e1-a3f2-ad8fb9e18a67 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Improved commit traceability, custom multiline fields, and board/test integration - Mar 24 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +Let’s start by walking through some of the improvements we’ve made in the Code hub… + +##Commit traceability + +Build status (success or failure) is now clearly visible in the Code Explorer and Commit Details views. More details are just a click away, so you’ll always know if the changes in the commit passed the build or not. You can also customize which builds post status in the repository options for the build definition. + +Additionally, the latest changes to the Commit Details view provide deeper insights about your changes. If you’re using pull requests to merge your changes, you’ll see the link to the pull request that introduced the changes into the master branch (or in the case of a merge commit, the PR that created it). When your changes have reached master, the branch link will appear to confirm that the changes have been included. + +![Commit tracing in pull request](_img/3_24_01.png) + +On a related note, it’s also now easier to add and remove reviewers from your pull requests. To add a reviewer or group to your pull request, simply enter their name into the search box in the Reviewers section. To remove a reviewer, hover over their tile in the reviewers’ section and click the X to remove them. + +![Removing a reviewer](_img/3_24_02.png) + +##View Git LFS files in the web + +If you’re already working with large files in Git (audio, video, datasets, etc.), then you know that Git Large File Storage (LFS) replaces these files with pointers inside Git, while storing the file contents in a remote server, like Team Services. This deployment now makes it possible to view the full contents of these large files by simply clicking the file in the repo of your Team Services account. + +##Git for Windows now includes Team Services authentication by default + +[Git for Windows 2.7.4](https://git-scm.com/download/win) now installs the [Windows Credential Helper](https://github.com/Microsoft/Git-Credential-Manager-for-Windows). This means that Windows users can now simply install the latest version of Git and start working against Team Services. If the user needs to authenticate, they will get an interactive prompt—no need for alternate credentials or personal access tokens. For Linux and Mac users, they can achieve the same experience using the [Git Credential Manager for Mac and Linux](https://github.com/Microsoft/Git-Credential-Manager-for-Mac-and-Linux). + +##Custom multiline text fields + +We’ve added multiline text fields to the list of types available when customizing your work items. These fields allow rich formatting (bold, underline, bullets, inline images, etc.), and are great for capturing data about your work that needs a bit more space. For now, you can only place these fields in the first column of your work items. Support for more layout options will come later. + +![A custom multiline text field](_img/3_24_03.png) + +##Test progress from your cards + +Over the past few months you’ve seen us adding more and more functionality to cards on your boards. Our latest deployment brings the capability to add, view, and interact with test cases directly from your stories. Use the new **Add Test** menu option to create a linked Test case, and then monitor status directly from the card as things progress. + +![Test options from your card](_img/3_24_04.png) + +With this new capability, you can now perform the following actions directly from a card on your board. + +-Add tests +-Open tests +-Reparent a test by dragging/dropping from one user story to another +-Copy the same test to another user story using CTRL+Drag/Drop (for scenarios where the same test case tests more than one user story) +-Update the test status by quickly marking it Pass/Fail/etc. +-Run the test by launching it in the Web Test Runner, from which you can pass or fail individual steps, file bugs, etc. +-View a summary of the roll-up status indicating how many tests have passed and how many remain for that story + +If you need advanced test management capabilities (like assign testers, assign configurations, centralized parameters, exporting test results, etc.), you can then switch over to Test Hub and start using the default test plan/requirement-based suites that have been auto-created for you. You can learn about this capability [here](https://msdn.microsoft.com/en-us/Library/vs/alm/Work/kanban/add-run-update-tests). + +##Capture screen recordings + +Building on all the recent improvements to the [Exploratory Testing](https://marketplace.visualstudio.com/items/ms.vss-exploratorytesting-web) extension, this deployment brings the ability to perform on-demand screen recordings that are automatically attached to the task or bug being filed. Support for audio is coming next. + +![Capturing a screen recording](_img/3_24_05.png) + +##Queue a Run by specifying your test suite + +Test plans and test suites can now trigger automated runs in builds using the “Run Functional Tests” task. Results will appear in the Tests tab on your Build Summary pages, as well as in the Test Hub. Use the new Test Suite group to get a quick view of all suites run and their quality. + +##Configuration management in the Test Hub + +We’ve brought test configuration management to the web UI by adding a new Configurations tab within the Test Hub. Here you’ll find all your configurations, ready for you to configure as needed. + +##Enable build result extensions to specify order and column + +Build result section extensions can now specify which column and the order in which they appear. The result view has two columns, and all extensions will be in the first column by default. **Note**: All third-party extensions will appear after the build result sections we include. + +![Configuring the order and column](_img/3_24_06.png) + +##Configure status API reporting for a build definition + +You can now choose which build definitions report their status back to the Git status API. This is particularly useful if you have many definitions that build a given repository or branch, but only have one that represents the real health. + +##Tab contribution point + +And finally, for those of you writing extensions, we’ve added a new contribution point on the board and backlog pages to allow you to write extensions as a pivot tab next to Board/Backlog/[Capacity] tabs. + +Feel free to reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)) if you have questions. As always, any ideas on things you’d like to see us prioritize, head over to UserVoice to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2016/may-06-team-services.md b/release-notes/2016/may-06-team-services.md new file mode 100644 index 00000000000..bdb438df57e --- /dev/null +++ b/release-notes/2016/may-06-team-services.md @@ -0,0 +1,141 @@ +--- +title: RM updates, email formatting, a checkbox control, and more – May 6 +description: VSTS release notes for May 6 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: db77360b-f4ce-4fbf-8b76-af6d400f3e43 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#RM updates, email formatting, a checkbox control, and more – May 6 + +**Note:** The improvements discussed in this post will be rolling out throughout the week. Please follow progress of the deployment at [http://blogs.msdn.com/b/vsoservice/](http://blogs.msdn.com/b/vsoservice/). + +There’s so much in our deployment this week that I really don’t know where to begin. I’m going to start with a few items that I’m thrilled we’re knocking off our list... + +##Email improvements + +First, we’ve significantly improved the formatting and usability of emails sent by Team Services. You may have noticed some of this already, but we’re completely overhauling the format of emails sent by the service. Emails now include a consistent header, a clear call to action, and improved formatting to make sure the information in the mail is easier to consume and understand. Additionally, all these emails are being designed to ensure they render well on mobile devices. + +![Improved formatting and usability of emails](_img/5_06_01.png) + +##Checkbox control + +Moving on to another long overdue item… with this deployment, you can now add a checkbox control to your work items. This new field type (Boolean) has all the properties of normal fields and can be added to any type in your process. When displayed on cards or in a query result, the value is shown as True/False. For guidance on how to add a Boolean field to your process, please see [Customize a field for a process](https://msdn.microsoft.com/en-us/Library/vs/alm/Work/process/customize-process-field) in our documentation. + +![Checkbox control added to a work item](_img/5_06_02.png) + +##Work Item page management + +On a related note, project admins can now add new completely custom pages to a work item layout. These pages support all the field types that exist, and can be configured with groups as needed. We’re still working on additional layouts (coming soon), but for now you can add pages that have the standard 50% - 25% - 25% columns. With this feature also comes the ability to place long text fields (HTML fields) in any column on the form. + +##Turning board annotations on/off + +We are giving you more control of the additional information that shows on the cards on your boards. You can now select annotations that you want to view on your Kanban cards. Simply unselect an annotation and it will disappear from the cards on your Kanban board. The first two annotations to show up here are child work items (tasks in this example) and the Test annotation. + +![Controlling annotations in Settings](_img/5_06_03.png) + +##Clear Formatting command + +We’ve added a new command to all rich text controls on work items that lets you clear all formatting from selected text. If you’re like me, you’ve probably been burned in the past by copying and pasting formatted text into this field that you can’t undo (or clear). Now you can simply highlight any text, select the **Clear Formatting** toolbar button (or press CTRL+Spacebar), and you'll see the text return to its default format. + +##Dashboard updates + +Let’s look at a few updates to dashboards that you’ll want to be aware of. First, the Query Tile widget now supports up to 10 conditional rules and has selectable colors. This is extremely handy when you want to use these tiles as KPIs to identify health and/or action that may be needed. + +![Selecting rules and colors for Query Tiles](_img/5_06_04.png) + +We’ve also redesigned our widget catalog to accommodate the growing set of widgets and deliver a better overall experience. The new design includes an improved search experience and has been restyled to match the design of our widget configuration panels. + +![Selecting from the widget catalog](_img/5_06_05.png) + +The Pull Request widget now supports multiple sizes, allowing users to control the height of the widget. We’re working on making most of the widgets we ship resizable, so look for more here. Finally, the New Work Item widget now allows you to select the default work item type, instead of forcing you to select the most common type you’re creating over and over from the drop-down list. + +##Adding attachments during manual testing + +We’ve updated the Web test runner to give you the ability to add test step attachments during manual testing. These step result attachments automatically show up in any bugs you file in the session and subsequently in the Test results pane. + +![Adding a test step attachment](_img/5_06_06.png) + +##Test plan/suite columns + +We’ve added new columns to the Test results pane that show you the test plan and test suite under which the test results were executed in. These columns provide much-needed context when drilling into results for your tests. + +![New columns in the Test results pane.](_img/5_06_07.png) + +##Build and release summary updates + +There are two new bits of information that will show up on your build and release summaries. First, you’ll notice that console logs are now available in the Test pivot. Console logs are published as test result attachments and can be previewed in the Tests tab in the Build summary and Release summary panes. + +![Console logs and test duration in the Tests tab](_img/5_06_08.png) + +Second, it’s very common to need to understand and identify test cases or containers that take the most time to run. You can now find this information by sorting the Duration column in the Tests tab in the Build/Release summary panes. In addition to the duration of individual tests, you can also look at aggregate duration of test containers or test runs by grouping by the respective pivots. + +##Release Management improvements + +This release brings with it quite a few Release Management (RM) improvements. Let’s walk through the new capabilities… + +First, Release Management now supports linking repositories (both Git and Team Foundation Version Control) as artifact sources directly to a release definition, enabling you to consume resources in your repos without having to publish build artifacts with the same files. **Note:** There is no support yet for auto-triggering new releases when a commit is made into these repositories, but that work is in flight, so stay tuned. + +![Linking a repository in Release Management](_img/5_06_09.png) + +Additionally, you’ll find these new features: + +-**Copy, Export, Import.** We’ve published a [new extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.rm-clone-rd) in the Marketplace that lets you copy, import, and export release definitions. These features will be available in the product soon, but this extension should help fill the gap until they show up natively. + +![Cloning a release definition](_img/5_06_10.png) + +-**Schedule Based Deployment Condition.** You can now configure a condition on an environment to pick up the successful deployments (or the latest one) from another environment and promote them at the selected time. This capability allows you to have time-based deployments that happen on a repeatable schedule. Chose the Deployment Condition tab in your environment to configure the schedule. + +-**Release Management REST APIs.** You can now use the REST APIs for Release Management service. They are published at: [https://www.visualstudio.com/en-us/integrate/api/overview](https://www.visualstudio.com/en-us/integrate/api/overview). Most of these APIs work with the on-premises releases of RM features in TFS 2015 Update 2 as well (changes between TFS and Team Services versions are indicated in the API docs). You can find some basic examples on how to use these APIs in this [blog post](http://blogs.msdn.com/b/chandananjani/archive/2016/04/15/using-releasemanagement-rest-api-s.aspx). + +-**Simplified Release Definition Wizard.** We’ve simplified the wizard to create release definitions. You can enter most of the inputs to setup a definition with a single environment in this wizard. We have also simplified the process for adding more environments into a definition or to clone an environment. + +![Simplified release definition wizard](_img/5_06_11.png) + +-**New Job Execution Variables.** Below are a set of variables now available that let you access information about artifact sources when executing deployment jobs. These variables are available in the format: RELEASE_ARTIFACTS_<Alias>_<VariableName>. <Alias> represents the artifact source that is included in the release definition. You can find the name of the alias in the Artifacts tab of a release definition. <VariableName> will be one of the following: + +DEFINITIONID +BUILDNUMBER +BUILDID +REPOSITORY_NAME +SOURCEBRANCH +SOURCEBRANCHNAME +SOURCEVERSION +BUILDURI +REQUESTEDFORID +REPOSITORY_PROVIDER +REQUESTEDFOR +TYPE +Note: For scripts, replace the underscore with a period. + +##Improved build and pull request traceability + +The traceability between builds and pull requests has improved, making it easy to navigate from a PR to a build and back. In the build details view for a build triggered by a pull request, the source will now show a link to the pull request that queued the build. In the Build Definitions view, any build triggered by a pull request will provide a link to the pull request in the "Triggered By" column. Finally, the Build Explorer view will list pull requests in the source column. + +##Team Project rename permission + +The permission controlling which users can rename a team project has changed. Previously, users with **Edit project-level information** permission for a team project could rename it. Now users can be granted or denied the ability to rename a team project through the new **Rename team project** permission. + +##Admin settings Work hub + +We've introduced a new "Work" hub in the Admin settings page that combines general settings, Iterations, and Areas in a single tab. + +With this change, users will see clear differences between project-level settings and team settings. For team settings, users will only see areas and iterations that are relevant to their team. At a project level, the settings page will enable admins to manage areas and iterations for the entire project. Additionally, for project area paths, a new column called "Teams" has been added to make it convenient for admins to tell quickly and easily which teams have selected a specific area path. + +![Work hub](_img/5_06_12.png) + +##UX improvements + +The final thing I want to point out is that you might be noticing some subtle changes to our UX and visual style across the product—larger font ramp, high DPI icons, cleaner visuals, etc. This deployment brings additional changes, most notably we’ve restyled the majority of the dialogs with a cleaner look and feel. This is part of a continued commitment to improving the visual presentation of Team Services, and you can expect each of the areas of the product to improve gradually over the coming deployments. + +![Restyled, cleaner dialog box](_img/5_06_13.png) + +There’s a lot here, so I hope you made it to the end. As always, free to reach out on Twitter ([@aaronbjork](https://twitter.com/aaronbjork)) if you have questions. If you have ideas on things you’d like to see us prioritize, head over to [UserVoice](http://visualstudio.uservoice.com/forums/121579-visual-studio) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2016/nov-02-team-services.md b/release-notes/2016/nov-02-team-services.md new file mode 100644 index 00000000000..d837c2e2106 --- /dev/null +++ b/release-notes/2016/nov-02-team-services.md @@ -0,0 +1,76 @@ +--- +title: Microsoft Teams integration, repo favorites, and new package management and release management regions – Nov 2 +description: VSTS release notes for Nov 2 2016 +ms.ContentId: 171e69be-42f9-48f1-af6d-c08ed0093f92 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#Microsoft Teams integration, repo favorites, and new package management and release management regions – Nov 2 + +**Note:** The improvements discussed in this post will be rolling out throughout the next week. + +There are some exciting new features this sprint. + +##Package Management in India and Brazil +Package Management is now available to Team Services accounts hosted in the South India and Brazil South Azure regions. To get started, [install the extension from the Marketplace](https://marketplace.visualstudio.com/items?itemName=ms.feed). + +##Microsoft Teams integration +Microsoft Teams is a new chat-based workspace in Office365 that makes collaborating on software projects with Team Services a breeze. Team Services users can stay up to date with alerts for work items, pull requests, commits, and builds using the Connectors within Microsoft Teams. Starting November 9, users will also be able to bring their Kanban boards right into Microsoft Teams. For more information, see our [blog](https://blogs.msdn.microsoft.com/visualstudioalm/2016/11/02/microsoft-teams-integration-with-team-services/). + +![Microsoft Teams](_img/11_02_10.png) + +##Repo favorites +You can now favorite the repos you work with most frequently. In the repo picker, you will see tabs for __All repositories__ and your __Favorites__. Click the star to add a repository to your list of Favorites. + +![repo favorites](_img/11_02_01.png) + +##Rollback build definitions +You can roll a build definition back to a previous version by going to the __History__ tab when editing a build definition. + +##Disable the sync and checkout of sources in a build +Starting with the 2.108 agent, you can optionally disable the automatic source sync and checkout for Git. This will enable you to handle the source operations in a task or script instead of relying on the agent’s built-in behavior. All standard source-related variables like Source.Version, Source.Branch and Build.SourcesDirectory are set. + +##Docker extension enhancements +There have been a number of enhancements to the [Docker extension in the marketplace](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker): +* Docker Compose run action +* Restart policy for Docker run +* Ensuring the registry host is specified on logout +* Bug fixes + +##.NET Core build task +We added support for building, testing and publishing .NET core applications with a dedicated .NET Core task for project.json templates. + +![.net core task](_img/11_02_08.png) + +##Build and release management templates +We have added support for new templates in Build and Release for building ASP.NET/ASP.NET core and deploying to Azure web applications. + +![build template](_img/11_02_06.png) + +![release template](_img/11_02_07.png) + +##ASP.NET Core and NodeJs deployments +The Azure Web App task now supports ASP.NET Core and NodeJs applications. You just specify the folder with all application contents for deployment. This task can run on Linux platforms for deploying ASP.NET Core or Node-based applications. + +##Azure Web App Service manage task +We added a new task for managing Azure Web App services. Currently, this task has support for swapping any slot to production. + +##Release Management available in multiple regions +The Release Management service is now available in Europe, Australia, Brazil, and India regions in addition to the US. All of your Release Management data is now co-located with the rest of your Team Services account data. + +##REST client helpers for Test Step operations +Users will now be able to create, modify and delete test steps and test step attachments in Test Case work items using the helper classes we have added to the REST client (see the [RestApi-Sample](https://github.com/pankagar/RESTApi-Sample)). + +##Test case description in Web runner +Customers often use the test case description field for capturing the prerequisites that must be met before the test case execution can start. With this update, users will now be able to view the test case description information in the Web runner by using the __Show description__ option. + +![test case description](_img/11_02_05.png) + +As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2016/nov-16-team-services.md b/release-notes/2016/nov-16-team-services.md new file mode 100644 index 00000000000..dd1804bdaae --- /dev/null +++ b/release-notes/2016/nov-16-team-services.md @@ -0,0 +1,39 @@ +--- +title: Package Management GA, Release Management GA, import to Team Services, and work item search preview - Nov 16 +description: VSTS release notes for Nov 16 2016 +ms.ContentId: 7f5bfa37-c879-429c-a55c-e1b74036c1a1 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#Package Management GA, Release Management GA, import to Team Services, and work item search preview - Nov 16 + +We hope you are enjoying the Connect() conference! We have announced and released some exciting new things today. + +##Package Management General Availability +Today, we announce the general availability of Package Management. Package Management now hosts NuGet and npm packages and helps you manage the lifecycle of your packages with new features like release views. It continues to offer best-in-class support for the latest NuGet updates and great integration with Team Build. + +Packages enable you to share code across your organization: you can compose a large product, develop multiple products based on a common shared framework, or create and share reusable components and libraries. Package Management facilitates code sharing by hosting your packages, sharing them with the people you select, and making them easily accessible to Team Build and Release Management. + +The Package Management extension is available in the [marketplace](https://marketplace.visualstudio.com/items?itemName=ms.feed). You can find more information in this [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/11/16/package-management-ga-nuget-npm-more/). + +##Release Management General Availability +We are excited to announce the general availability of Release Management in Visual Studio Team Services. Release Management is also available in Team Foundation Server 2017. Using Release Management, you can fully automate the delivery of your software all the way to production. It is an essential element of DevOps that helps your team continuously deliver software to your customers at a faster pace and with lower risk. + +To use Release Management, first create release definitions and then configure environments and specify automation steps in each environment to deploy the software and run tests against it. You can set up automatic deployment to the environments as soon as the build is available to deliver value continuously to your customers. You can also configure approvals on each environment. + +You can find more information in the [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/11/16/announcing-general-availability-of-release-management/). + +##Database Import Service +We are announcing the preview of the TFS Database Import Service for Visual Studio Team Services. Team Foundation Server customers have been asking Microsoft to be able to import their TFS databases to take advantage of all the great capabilities of Visual Studio Team Services. + +You can find more information in this [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/11/16/import-your-tfs-database-into-visual-studio-team-services/). Our guide and tooling is available [here](https://aka.ms/TFSImportData). + +##Work Item Search preview +We are also announcing the public preview of Work Item Search in Visual Studio Team Services. Work Item Search provides fast and flexible search across all your work items over all projects in an account. + +You can use the Work Item Search full text search engine to easily search for terms across all work item fields and efficiently locate relevant work items. Use in-line search filters on any work item field to narrow down quickly to a list of work items. + +The extension is available in the [marketplace](https://marketplace.visualstudio.com/items?itemName=ms.vss-workitem-search). You can find more information in the [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/11/16/announcing-public-preview-for-work-item-search/). diff --git a/release-notes/2016/nov-23-team-services.md b/release-notes/2016/nov-23-team-services.md new file mode 100644 index 00000000000..292de4f30d2 --- /dev/null +++ b/release-notes/2016/nov-23-team-services.md @@ -0,0 +1,110 @@ +--- +title: Follow a PR, task versioning, and search for commits in branches – Nov 23 +description: VSTS release notes for Nov 23 2016 +ms.ContentId: 3ddd918f-81cd-4745-9b1c-4fb6f1dae6fd +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#Follow a PR, task versioning, and search for commits in branches – Nov 23 + +**Note:** The improvements discussed in this post will be rolling out throughout the next week. + +We have a bunch of new features rolling out this sprint. + +##Search for commits in branches +You can now search for a commit in a specified branch or a tag by clicking on the __Search in branches__ button on the commit details page. + +![commit search](_img/11_23_03.png) + +You can select tags and branches in the window to view whether these branches and tags contain the particular commit. + +![commit search dialog](_img/11_23_04.png) + +##Search for a file or folder in commit history +Similar to the files tab, users can now search for a file or folder in a repository and see the history of commits for that file or folder. For any Git repository, go to the path control box on the History tab and start typing to initiate a history search experience for the file or folder you are looking for. + +![commit history](_img/11_23_06.png) + +##Follow a pull request +You can now follow a pull request to stay notified of any changes via email alerts. The option to __Follow__ is available in the context menu. + +![Follow PR](_img/11_23_01.png) + +##Restart pull request merge +Another option has been added to re-attempt the merge for a pull request where the target branch has been updated. This __Restart merge__ option is useful when you want to verify that recent changes to the target branch haven’t created conflicts or broken your PR build. + +##Completion blocked on rejected pull requests +Branches that have the code review policy set will notice that the PR is unable to be completed if it is rejected by one or more reviewers. Many users expect this behavior, so we’ve changed the default behavior. For teams that want the original behavior, there is a new option in the branch policy setting page. + +![code review policy](_img/11_23_02.png) + +##Markdown in pull request description +Spice up your pull request description with Markdown. The same Markdown support you know and love in pull request comments is now available in the pull request description. + +##Task versioning for Build and Release definitions +By popular request, we’re giving you control over the major version of a task that you run in your build or release. We expect this change to result in fewer unpredictable errors that were caused by automatic updates to the agent and task version. You now specify the major version of the task on the __Build__ tab of your definition, or on the __Environments__ tab of your release definition. + +When a minor version is released (for example, 1.2 to 1.3), you get that change automatically in your build. But if a new major version is released (for example 2.0), then your build stays locked to version 1.3 until you edit the definition and manually change to the new major version. A flag in the build definition alerts you to new major versions. + +If you select a version named something such as __1.* (preview)__, keep in mind that this version is still under development and might have known problems. + +> __Tip:__ In a build definition you’ve got a few options to test a new major version of a task: + * If you change the version and have problems, you can revert the change from the history tab. + * Clone the build definition and test the cloned definition with the new major task version. + +##Hosted Linux pool preview +We’re offering a preview of our new hosted Linux pool to enable you to build and release on Linux machines without having to configure a private agent. + +The agents in the hosted Linux pool run on an Ubuntu Linux host inside the [vsts-agent-docker container](https://github.com/Microsoft/vsts-agent-docker). This container includes all the standard Java, Node, Docker and .NET Core tooling. When we start the container we map in the Docker socket from the host VM and the working folder from /opt/vsts/work. This enables you to create or spawn other Docker containers as part of your build or release process using either a script or the [Docker extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker) in the Visual Studio Marketplace. + +To use the Hosted Linux pool: +* In your build definition, go to the **General** tab, open the **Default agent queue** menu, and then select **Hosted Linux**. +* In your release definition, go to the **Environments** tab, select your **Run on agent** task, open the **Deployment queue** menu, and then select **Hosted Linux**. + +If you don’t see the option yet, just give it a little time. We’re rolling this option out to accounts over the next few weeks. + +##Build and deploy Docker apps to Azure more easily +To make continuous integration and deployment (CI/CD) of Docker apps a whole lot simpler for you, we’ve: +* Updated the [Docker extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.docker) with support for Azure Container Service and Azure Container Registry. +* Begun a preview of the Hosted Linux pool preview so that you don’t have to set up your own Docker hosts. +* Released [Visual Studio 2017 RC](https://www.visualstudio.com/vs/visual-studio-2017-rc/) and included [new continuous delivery tools](https://www.visualstudio.com/en-us/docs/build/apps/aspnet/aspnetcore-docker-to-azure) for ASP.NET Core Preview apps. You can use these tools to configure a CI/CD process quickly in Team Services. Any ASP.NET Core project with Docker support enabled can be set up to run an automated build and deployment to Azure Container Service with every Git push. + +##New licensing model for Build and Release Management +Over the next two weeks, Build and Release Management will move from the current agent-based licensing model to a concurrent pipeline based licensing model. Each pipeline lets you run one build or deploy one release at a time. The maximum number of concurrent builds that you can run and releases that you can deploy at the same time is limited only by the number of pipelines that you have. + +Your Team Services account includes these free amounts: +* __One free Hosted Pipeline:__ With this free hosted pipeline, you get 4 hours (240 minutes) per month and a maximum duration of 30 minutes per build or deployment. If you just need more build time for once concurrent build or release, [buy another hosted pipeline](https://marketplace.visualstudio.com/items?itemName=ms.build-release-hosted-pipelines) without the 4-hour limit to increase your maximum duration per build or deployment up to 6 hours. For more concurrent builds or releases, [buy more hosted pipelines](https://marketplace.visualstudio.com/items?itemName=ms.build-release-hosted-pipelines). +* __One free Private Pipeline:__ With this free private pipeline, run unlimited concurrent builds or deploy one release at a time in Team Foundation Server 2017, or run one build or deploy one release at a time in Team Services on agent software from Microsoft. Private agents are now free and unlimited. In TFS, each Visual Studio Enterprise subscriber also contributes a private pipeline that you can use. You can also [buy more private pipelines](https://marketplace.visualstudio.com/items?itemName=ms.build-release-private-pipelines). + +For more information, see [Concurrent build and release pipelines in Team Services](https://www.visualstudio.com/en-us/docs/release/getting-started/concurrent-pipelines-ts) and [Concurrent release pipelines in TFS](https://www.visualstudio.com/en-us/docs/release/getting-started/concurrent-pipelines-tfs). + +If you previously bought private agents in the Azure portal, they’ll automatically roll into private pipelines. Similarly, any hosted agents that you purchased become Hosted pipelines. With the new licensing model, you can register any number of private agents with your account. In effect, the new model gives you more than what the previous model did, for the same price. + +##NuGet + Credential Provider Bundle updated +We’ve updated the NuGet + Credential Provider Bundle to NuGet 3.5. NuGet 3.5 contains many [performance improvements and bug fixes](https://docs.nuget.org/ndocs/release-notes/nuget-3.5-rtm), and we recommend updating to it at your convenience. + +##Delete test artifacts +Customers already had the ability to delete work items, except for test artifacts and any work items which are linked to test artifacts. With this update, users will now have the ability to permanently delete test artifacts—test plans, test suites, test cases, shared parameters and shared steps—both from the __Test__ hub and the __Work__ hub by using the __Permanently delete__ option in the work item form context menu. + +![delete test artifacts menu](_img/11_23_07.png) + +Deletion of a test artifact not only deletes the selected artifact but also all the child items like child test suites, tests across all configurations and testers, their test result history and other associated history that fall in its hierarchy. In the confirmation dialog box, users can view the impact of their delete operation to help them make an informed decision. + +![delete test artifacts confirm](_img/11_23_08.png) + +##Inline service connections in Build and Release +With this feature, you can create service connections right in the build/release definition without having to navigate to the __Services__ tab. This will be auto-enabled for all extensions which are defined declaratively, such as Docker, Jenkins, VMWare, and SCVMM. + +##Link build artifacts from another team project +Until now, release definitions could only link artifact sources from the current project. Now, you can now link build artifacts from another project as well. While linking an artifact, the project drop down will list all the projects in the account. + +![build artifacts](_img/11_23_09.png) + +As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Erin Dormier \ No newline at end of file diff --git a/release-notes/2016/oct-12-team-services.md b/release-notes/2016/oct-12-team-services.md new file mode 100644 index 00000000000..9651d3fb721 --- /dev/null +++ b/release-notes/2016/oct-12-team-services.md @@ -0,0 +1,174 @@ +--- +title: New navigation, Test & Feedback extension GA, and cherry-pick – Oct 12 +description: VSTS release notes for October 12 2016 +ms.ContentId: 6f6e8dae-afd4-485f-acb2-63b71913dfaa +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#New navigation, Test & Feedback extension GA, and cherry-pick – Oct 12 + +**Note:** The improvements discussed in this post will be rolling out throughout the next week. + +We have a lot of new features rolling out this sprint! + +##New navigation experience is On by default +In mid-August, we enabled an opt-in mode allowing customers to preview our new navigation experience as detailed by Brian Harry on his [blog](https://blogs.msdn.microsoft.com/bharry/2016/08/18/new-navigation-for-team-services/). We’ve collected feedback and made refinements since then, preparing the feature for broad availability. I am happy to announce that with this sprint’s deployment, we will be defaulting to the new navigation experience on all accounts. We’ve made this decision based on the following data: +* 93% of users that opted into the new nav did not return to the previous version, aligning with the positive user feedback we received +* 30%+ of the web traffic is now serving the new nav, and this number continues to grow. This gives us both confidence on quality and significant coverage of use cases +* Since the opt-in release, over 20 usability and bug fixes have reported by users and all have been addressed + +The most constructive feedback we have received is that users want to manage this change, and we need to be respectful of that. In this sprint, we are still allowing users to opt out of the new experience. This provides admins and users with a window to prepare and accommodate their teams for the change. Our current plan is to remove the previous nav next sprint, and continue to innovate our navigation using the new navigation experience as the base going foward. + +##Cherry-pick and revert + +We’ve added two new features that make it easier to port or back out changes from the web portal: Cherry-pick and Revert. + +Use the cherry-pick command to port changes in a pull request to multiple branches. A typical use case is when a bug needs to be hotfixed, but should also be fixed in the mainline. Once you’ve created your pull request that contains the fix to the hotfix branch, you can easily cherry-pick the same fix into the master branch. If the PR is active, you can find the __Cherry-pick__ command on the context menu. + +![cherry pick](_img/10_12_03.png) + +If you want to cherry-pick a change from a completed PR, the command will appear alongside the completion message. + +![cherry pick pull request](_img/10_12_04.png) + +In both cases, you’ll be directed to an experience that applies the change to a new branch and sets up the PR. + +![cherry pick dialog](_img/10_12_05.png) + +You can revert changes on completed PRs. Find the PR that introduced the bad change, click __Revert__, and follow the steps to create a PR that backs out the unwanted changes. + +![revert](_img/10_12_06.png) + +If you have ideas on things you’d like to see, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services) to add your idea or vote for an existing one. + +##Commit page improvements +We are making the user experience of the commit details page and commit history page modern and highly performant. You will be able to find and act on important information related to the commit at a bird’s-eye view. + +Here is an example of the commit details page: + +![commit details](_img/10_12_17.png) + +Here is the commit history page: + +![commit history](_img/10_12_18.png) + +##Configurable compare branch +You can now set your compare branch to something other than the default branch. This setting will be remembered on a per-user basis. Pull requests and new branches created from the __Branches__ page will be based off the branch you set as the compare branch. + +Your default branch will automatically be set as the compare branch as denoted by the badge. + +![default compare](_img/10_12_07.png) + +You can change the compare branch by selecting __Set as compare branch__ in the context menu. + +![set compare](_img/10_12_08.png) + +You will then see the compare branch appear at the top of your __Mine__ and __All__ views. + +![compare](_img/10_12_09.png) + +##Find a file or folder +You can quickly search for a file or folder in a repository using the __Code__ hub in your Team Services project. The result lists items from your current folder followed by files and folders across the repository. + +For any Git repository, go to the path control box, and start typing to initiate a navigation search experience for the file or folder you are looking for. + +![find files](_img/10_12_19.png) + +For those of us who love keyboard shortcuts, we added the functionality in the __Code / Files__ view to launch the Find a File experience by just hitting “t” on any repos Files view. With the up/down arrows, you go up and down the results, click or press Enter to open a result, or with Esc, you close the Find a File experience. + +![find file shortcuts](_img/10_12_20.png) + +##Suggested value in work item pick lists +Custom picklist fields can be configured to allow users to enter their own values beyond the provided list values in the picklist field. + +This feature also enables users to use picklist fields with the multi-value control extension available in the [marketplace](https://marketplace.visualstudio.com/). + +##Xcode 8 signing and exporting packages in the Xcode Build Task +The Xcode task now supports building your projects using Xcode 8 automatic signing. You can install the certs and provisioning profiles on the build server manually, or have the task install them by specifying the __File Contents__ options. + +![Xcode signing](_img/10_12_01.png) + +Xcode 8 requires specifying an export options plist when exporting an app package (IPA) from an archive (.xcarchive). The Xcode task now automatically identifies the export method if you are using Xcode 8 or Xcode 7. You can specify the export method or specify a custom plist file from the Xcode task. If you are using an Xcode version older than Xcode 7, the task falls back to using the old tool (xcrun) for creating the app package. + +![Xcode export](_img/10_12_02.png) + +##FindBugs in the Gradle build task +You can now request FindBugs standalone static analysis in the Gradle build task (in addition to the PMD and Checkstyle analysis). The results of the static analysis appear in the build summary, and resulting files are available from the __Artifact__ tab of the build result. + +For more details see [Maven and Gradle build tasks support powerful code analysis tools](https://blogs.msdn.microsoft.com/visualstudioalm/2016/10/12/maven-and-gradle-build-tasks-support-powerful-code-analysis-tools/). +##Build improvements + +###Visual Studio “15” build task +The Visual Studio Build and MSBuild tasks can now locate Visual Studio “15” installations. You no longer need to explicitly specify the path to MSBuild.exe 15.0 in your build configuration. + +###git-lfs and shallow clone +The 2.107.x build agent now supports Git shallow clone and git-lfs. More details are at https://www.visualstudio.com/en-us/docs/build/define/repository. + +###Updated hosted build pool +The hosted build pool has been updated: +* Azure SDK 2.9.1 +* WIX 3.10 +* SQL lite for Windows Phone 8.1 +* Xamarin Stable Cycle 8 SR 0 +* Windows 10 SDK 14393 +* .NET 4.6.2 +* Git 2.10.1 + +### New places to search +You can now search for builds in the __Mine__ and __Queued__ tabs. + +##Email support for AAD groups +This feature enables you to @mention and receive emails from AAD groups which you are in. + +![AAD email](_img/10_12_16.png) + +##Multiple schedules in releases +Want to schedule your releases to be created more than one time in a day? You can now configure multiple scheduled triggers in a release definition. + +![release schedule](_img/10_12_12.png) + +##Azure resource group improvements +Currently, when using the Azure resource group task, there is no way to validate if the ARM template is syntactically correct and would be accepted by the Azure Resource Manager without actually deploying the resources. This enhancement allows a new deployment mode called __Validation Only__ where users can find problems with the template authoring before creating actual Azure resources. + +Another enhancement to the Azure resource group task is to allow either incremental or complete deployments. Currently, the task deploys the ARM templates using the Incremental mode. Incremental mode handles deployments as incremental updates to the resource group. It does not modify resources that exist in the resource group but are not specified in the template. Complete mode deletes resources that are not in your template. By default, incremental mode is used. + +![resource groups](_img/10_12_13.png) + +##Azure CLI task +The new Azure CLI task supports running Azure CLI commands on cross platform agents like Windows, Linux and Mac. The task supports both Classic and ARM subscriptions. It supports two modes of providing the script, one as a linked artifact and another as an inline script. + +![cli](_img/10_12_14.png) + +##Simplified Azure endpoint creation +In an earlier sprint, we made it easier to create a new Azure Resource Manager service endpoint from Team Services. That experience only worked in accounts that are backed by an Azure Active Directory. In this deployment, we are bringing the same simplified experience for all the other accounts that are not backed by an AAD. So, if you are a MSA user and have an Azure subscription that you would like to deploy to from Team Services, you can create an Azure endpoint without having to run tedious Powershell scripts or following a blog. + +![Azure endpoint](_img/10_12_15.png) + +##Test & Feedback extension general availability + +We are pleased to announce that __Exploratory Testing__ extension is now __Test & Feedback__ extension and is free for all. You can find more information in the [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/10/08/test-feedback-overview/). + +##Testing improvements +###Update existing bugs from Web Runner +In addition to creating new bugs from the Web runner, now you can also update an existing bug. All the diagnostic data collected, repro steps, and links for traceability from the current session are automatically added to the existing bug. + +![test runner](_img/10_12_10.png) + +###Test hub contribution point +We have added a new contribution point (“ms.vss-test-web.test-plan-pivot-tabs”) within the __Test plan__ hub to allow developers to write extensions as a pivot tab, that appears next to the __Tests__ and __Charts__ tab. + +![contribution point](_img/10_12_11.png) + +###Visual Studio subscribers automatically use their free license +VSTS will now automatically recognize Visual Studio subscribers as they log into their Team Services account. This will override the Stakeholder access level as well as free up a Basic access level for the account. + +For this reason, there is no longer a need to assign users the Eligible Visual Studio/MSDN subscriber from the drop down menu. + +As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool diff --git a/release-notes/2016/sep-02-team-services.md b/release-notes/2016/sep-02-team-services.md new file mode 100644 index 00000000000..3162c028c7e --- /dev/null +++ b/release-notes/2016/sep-02-team-services.md @@ -0,0 +1,109 @@ +--- +title: Custom work item types and stakeholder support for exploratory testing – Sept 2 +description: VSTS release notes for September 02 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 6dacf469-d201-4cc9-8fd4-4fab64c975bc +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Custom work item types and stakeholder support for exploratory testing – Sept 2 + +**Note:** The improvements discussed in this post will be rolling out throughout the next week. + +We have some exciting new features this sprint! + +##Custom work item types + +I’m very happy to roll out in this latest sprint the ability to create custom work item types (WITs) and place them on the backlog and board level of your choice. Choose the fields, layout, and color for each custom type you add, and then use them in your projects as needed. For more information about all the capabilities here, see [Custom work item types on Team Services](https://blogs.msdn.microsoft.com/visualstudioalm/?p=20935). + +##Work item history tab + +The work item history tab has been redesigned to provide a better experience for exploring changes made to work items. Individual revisions are now grouped by date buckets and summarized in a left pane, complete with adornment icons that help you quickly identify changes. Quickly scan the history pane to spot the revisions with comments, work item state changes, assignment changes, attachments, and links. We’ve also made quite a few “under the hood” changes to ensure better performance for work items with lots of revisions. + +![Redesigned work item history tab](_img/9_02_01.png) + +##Managing a NuGet package's lifecycle + +It's now easier to deprecate and remove NuGet packages you’re not using. Look for the new **Unlist** and **Delete** buttons next to a package's name. Unlisting a package hides it from search results and prevents it from being restored except when the exact version is requested by the NuGet client. This operation is equivalent to running nuget.exe delete on the command line, and is reversible by clicking the Relist button. Deleting a package is a permanent operation that prevents restoration of the package. This option will break builds that depend on this package. In addition, at present feeds are immutable, so they will not accept a new package with the same version as a deleted package. + +Note: You must be a feed contributor to unlist and a feed owner to delete a package. + +##Build queue tab + +We've implemented a new design for the Queued builds page that shows a longer list of queued and running builds, and in a more intuitive fashion. Let us know what you think. + +![Redesigned Queued Builds page](_img/9_02_02.png) + +##Hosted build pool build agent + +The Hosted Build Pool is migrating to the 2.x build agent. We expect this migration to be a non-event for the vast majority of users. However, we have seen a few cases where custom build tasks are not compatible due to reflection across internal APIs or reliance to specific agent folder layout. If you run into any issues, please let us know. + +##Xamarin License step removed + +The Xamarin License step is no longer necessary and has been removed from the build templates shipped with VSTS and TFS 15. As part of this effort we will also deprecate the task. All build definitions that use this task should be updated to remove it in order to prevent any disruption when the task is finally removed. + +##Jenkins with untrusted SSL certificates + +Jenkins connections can now be configured to accept untrusted SSL certificates of Jenkins servers. This is useful when Team Services service hooks or build/release processes integrate with Jenkins. For example, if a Jenkins server is configured to use SSL with a self-signed certificate or a certificate that cannot be verified by a Certificate Authority (CA), this setting will allow administrators to deliberately trust the certificate anyway. For more information about Jenkins integration capabilities, see [Team Services Integration with Jenkins Jobs, Pipelines, and Artifacts](https://blogs.msdn.microsoft.com/visualstudioalm/2016/08/18/tfs-integration-jenkins-jobs-pipelines-artifacts/). + +![Adding a Jenkins connection with untrusted SSL certificates](_img/9_02_03.png) + +##Apple App Store extension + +We’ve released a new extension in our marketplace with deployment tasks for automating the release and promotion of app updates to the Apple App Store, including releasing updates to TestFlight for Beta Testing. This reduces the effort needed to keep your deployments up-to-date, since you can simply push changes to the configured source control branches and let your CI or CD processes take care of the rest. For more information, see [https://marketplace.visualstudio.com/items?itemName=ms-vsclient.app-store](https://marketplace.visualstudio.com/items?itemName=ms-vsclient.app-store). + +##Request feedback + +You can now request feedback from stakeholders directly from features/stories using the **Request Feedback** option in the work item menu. Provide a simple set of instructions that are sent to them directly, prompting for the areas of the product you’d like input. + +![The new Request Feedback form](_img/9_02_04.png) + +Stakeholders can respond to the feedback request by clicking the **Provide feedback** link, which automatically configures the Exploratory testing extension with the selected feedback request (it will prompt to install the extension, if not already installed). Stakeholders can then use the full capture capabilities of the extension to capture their findings and submit their feedback in the form of feedback response/bug/task work-items. + +![Feedback request alert](_img/9_02_05.png) + +![Creating a new feedback response](_img/9_02_06.png) + +In addition to the solicited flow mentioned above, stakeholders can also use the extension to provide voluntary feedback. They can invoke the extension, select the **Stakeholder** mode in the Connection settings page, and connect to the account and Project/Team to whom they wish to provide feedback. They can then use the extension to capture their findings and submit their feedback in the form of feedback response/bug/task work-items. + +![Selecting Stakeholder mode in Connection settings](_img/9_02_07.png) + +##Checkstyle static analysis + +You can now request a [CheckStyle](https://docs.gradle.org/current/userguide/checkstyle_plugin.html) standalone analysis based on the [Sun Java rules](https://raw.githubusercontent.com/checkstyle/checkstyle/checkstyle-6.1.1/sun_checks.xml) in the Gradle build task. The Artifact tab of the build summary contains the results of the CheckStyle static analysis. This now works in every agent (including the Hosted agent). + +![Selecting the Run Checkstyle option in Gradle builds](_img/9_02_08.png) + +##Deployment manual intervention + +You can now pause execution during deployment to an environment. Including a **Manual Intervention** task enables you to pause a deployment, perform manual steps, and then resume further automated steps. You can also reject the deployment and prevent further steps from executing after a manual intervention. + +![Adding a Manual Intervention task to a deployment](_img/9_02_09.png) + +You should note that a manual intervention task splits the overall execution into three phases. The first phase runs on an agent, and after it is done, the agent is released. The manual intervention phase does not require any agent. After it is completed, any tasks following the manual intervention task are run in the third phase, possibly on a different agent. The artifacts are downloaded during both the agent phases, since different agents may be used for both of them. You should not assume that the state from the first phase is available during subsequent phases. + +##Service endpoint improvements + +A **Test** option has been added to all the endpoint creation dialogs so that users can first test that the entered values are accurate. The **Test** link makes a REST call to the external service using the information entered, and returns success when the REST call passes. + +Another enhancement to the endpoints is the introduction of icons. Endpoint type authors can specify the icon to be displayed for each endpoint of their new type. + +##SQL database deployment task + +The Azure SQL Database Deployment task has been enhanced to run SQL scripts against an Azure SQL DB. The scripts can be provided as a file or inline within the task. + +![The enhanced Azure SQL Database deployment task](_img/9_02_10.png) + +##User lifecycle management improvements + +We made changes to better support securing access to your Team Service. Check out this [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2016/08/23/user-lifecycle-management-improvements-in-visual-studio-team-services/) for all the details. + +As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2016/sep-21-team-services.md b/release-notes/2016/sep-21-team-services.md new file mode 100644 index 00000000000..8e28f704620 --- /dev/null +++ b/release-notes/2016/sep-21-team-services.md @@ -0,0 +1,114 @@ +--- +title: Import Git repos and view work item attachments – Sept 21 +description: VSTS release notes for September 21 2016 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.manager: douge +ms.assetid: 4fcf0a54-198f-419f-8c50-0155af0dd574 +ms.date: 06/01/2016 +ms.author: douge +author: yukom +--- + +#Import Git repos and view work item attachments – Sept 21 + +**Note:** The improvements discussed in this post will be rolling out throughout the next week. + +We have some exciting new features this sprint! + +##View work item attachments + +Continuing to improve the work item attachment experience, you can now view attached images without leaving the work item. When you click an image in the attachment grid, we will create a lightbox to view the image. + +##Work item type layout improvements + +Our layout admin page for work item types has been improved so that group and page contributions can be managed at a work item type level. You can now hide group and page contributions from particular work items and control their positioning in the new form to optimize your process. + +![wit layout admin](_img/9_21_01.png) + +Another improvement in this area is the ability to add custom controls to your work item form. Developers can target this contribution and you will be able to add and configure them for your different work item types. + +![custom controls](_img/9_21_02.png) + +##Disable work item types + +With this release, you can disable both inherited and custom work item types. Disabling a work item type will prevent creation of new work items of that type. Existing work items will continue to appear on the backlog/board and query results, and can still be modified. + +To disable a work item type, go to the work item type’s **Overview** tab on the **Process** administration page and check the disable box. + +##Import repository + +Customers can now import a Git repository from GitHub, BitBucket, GitLab, or other locations. You can import into either a new or an existing empty repository. + +###Import into a new repository +From the repository selector drop-down, click **Import repository**. + +![import new repo](_img/9_21_09.png) + +If the source repository is a publicly available repository, then simply provide the clone URL of the source repository and you are good to go. + +However, if the source repository is a private repository and can be accessed using basic authentication (username-password, personal access token, etc.), then check the “Requires authorization” check-box to provide the corresponding credentials. + +![import private repo](_img/9_21_10.png) + +###Import into an existing empty repository + +On the **Files page**, click the **Import repository** button and provide the clone URL. You will need to provide credentials if the source repository is private and requires authentication. + +![import existing repo](_img/9_21_11.png) + +##Markdown preview button + +When viewing a diff of a markdown file in a commit, push, or pull request, you can now easily toggle to see the resulting rendered view. + +##Confirmation for deleting repos + +To prevent accidental repository deletions, you now have to type the name of the repository that you wish to delete to confirm the action. + +##Add .gitignore during repo creation + +While creating a new Git repository, customers can now add and associate a .gitignore file with their repository. A .gitignore file specifies files that Git should ignore while performing a commit. + +The dialog allows users to select one of the many available .gitignore templates. + +![gitignore](_img/9_21_04.png) + +##Verify bugs from work item + +You can now verify a bug by re-running the tests which identified the bug. You can invoke the **Verify** option from the bug work item form context menu to launch the relevant test case in the web runner. Perform your validation using the web runner and update the bug work item directly within the web runner. + +![verify bugs](_img/9_21_05.png) + +##Xcode Build task xcpretty formatting + +You can now format your xcodebuild output with [xcpretty](https://github.com/supermarin/xcpretty). You can also publish JUnit test results to Team Services with xcodebuild. Previously, [xctool](https://github.com/facebook/xctool) had to be used as the build tool to publish test results. Now, to enable xcpretty, check **Use xcpretty** and uncheck **Use xctool** in the **Advanced** section of the Xcode task. + +![xcpretty](_img/9_21_03.png) + +##Publish Jenkins test and code coverage results + +The **Jenkins Queue Job** build and release task can now retrieve test and code coverage results from a Jenkins job or pipeline. This requires installation of the TFS Plugin for Jenkins 5.2.0 or later on your Jenkins server and configuring the post-build action **Collect Results for TFS/Team Services**. After results are retrieved from Jenkins, they can be published to Team Services with the **Publish Test Results** or **Publish Code Coverage** build tasks. + +##Build summary for Maven and Gradle tasks + +When you enable the **Run SonarQube Analysis** option in the Maven or Gradle build tasks, you get a link on the SonarQube project. You can request a full analysis to see the quality gates details, and choose to break the build if they are not met. + +![maven and gradle](_img/9_21_06.png) + +##FindBugs and CheckStyle in Maven build tasks + +You can now request FindBugs and CheckStyle standalone static analysis in the Maven build task (in addition to the PMD analysis). The results of the static analysis appear in the build summary, and resulting files are available from the Artifact tab of the build result. + +![FindBugs](_img/9_21_07.png) + +##Deployment status widget + +A build can be deployed and tested in different release environments across multiple release definitions. In such a scenario, the **Deployment status** widget shows you a consolidated status of the deployment and test pass rate across multiple environments for a recent set of builds from a build definition. + +![Deployment widget](_img/9_21_08.png) + +If you have ideas on things you’d like to see, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool diff --git a/release-notes/2017/_img/01_05_01.png b/release-notes/2017/_img/01_05_01.png new file mode 100644 index 00000000000..1d1c1e22b7b Binary files /dev/null and b/release-notes/2017/_img/01_05_01.png differ diff --git a/release-notes/2017/_img/01_05_02.png b/release-notes/2017/_img/01_05_02.png new file mode 100644 index 00000000000..2ed37d1db0f Binary files /dev/null and b/release-notes/2017/_img/01_05_02.png differ diff --git a/release-notes/2017/_img/01_05_03.png b/release-notes/2017/_img/01_05_03.png new file mode 100644 index 00000000000..9d2c7c54716 Binary files /dev/null and b/release-notes/2017/_img/01_05_03.png differ diff --git a/release-notes/2017/_img/01_05_04.png b/release-notes/2017/_img/01_05_04.png new file mode 100644 index 00000000000..bb75bf2e162 Binary files /dev/null and b/release-notes/2017/_img/01_05_04.png differ diff --git a/release-notes/2017/_img/01_05_05.png b/release-notes/2017/_img/01_05_05.png new file mode 100644 index 00000000000..c4977fbcd8f Binary files /dev/null and b/release-notes/2017/_img/01_05_05.png differ diff --git a/release-notes/2017/_img/01_05_06.png b/release-notes/2017/_img/01_05_06.png new file mode 100644 index 00000000000..cb165bc1612 Binary files /dev/null and b/release-notes/2017/_img/01_05_06.png differ diff --git a/release-notes/2017/_img/01_05_07.png b/release-notes/2017/_img/01_05_07.png new file mode 100644 index 00000000000..e8e63092923 Binary files /dev/null and b/release-notes/2017/_img/01_05_07.png differ diff --git a/release-notes/2017/_img/01_05_08.png b/release-notes/2017/_img/01_05_08.png new file mode 100644 index 00000000000..5d734be2a9a Binary files /dev/null and b/release-notes/2017/_img/01_05_08.png differ diff --git a/release-notes/2017/_img/01_05_09.png b/release-notes/2017/_img/01_05_09.png new file mode 100644 index 00000000000..c045a0e172e Binary files /dev/null and b/release-notes/2017/_img/01_05_09.png differ diff --git a/release-notes/2017/_img/01_05_10.png b/release-notes/2017/_img/01_05_10.png new file mode 100644 index 00000000000..463129125d3 Binary files /dev/null and b/release-notes/2017/_img/01_05_10.png differ diff --git a/release-notes/2017/_img/01_05_11.png b/release-notes/2017/_img/01_05_11.png new file mode 100644 index 00000000000..a725ce80748 Binary files /dev/null and b/release-notes/2017/_img/01_05_11.png differ diff --git a/release-notes/2017/_img/01_05_12.png b/release-notes/2017/_img/01_05_12.png new file mode 100644 index 00000000000..b7d681adde0 Binary files /dev/null and b/release-notes/2017/_img/01_05_12.png differ diff --git a/release-notes/2017/_img/01_05_13.png b/release-notes/2017/_img/01_05_13.png new file mode 100644 index 00000000000..202007897d4 Binary files /dev/null and b/release-notes/2017/_img/01_05_13.png differ diff --git a/release-notes/2017/_img/01_05_14.png b/release-notes/2017/_img/01_05_14.png new file mode 100644 index 00000000000..82a74386371 Binary files /dev/null and b/release-notes/2017/_img/01_05_14.png differ diff --git a/release-notes/2017/_img/01_05_15.png b/release-notes/2017/_img/01_05_15.png new file mode 100644 index 00000000000..d09428dea16 Binary files /dev/null and b/release-notes/2017/_img/01_05_15.png differ diff --git a/release-notes/2017/_img/01_05_16.png b/release-notes/2017/_img/01_05_16.png new file mode 100644 index 00000000000..ddc98d5dd23 Binary files /dev/null and b/release-notes/2017/_img/01_05_16.png differ diff --git a/release-notes/2017/_img/01_05_17.png b/release-notes/2017/_img/01_05_17.png new file mode 100644 index 00000000000..8e2f4c39dbd Binary files /dev/null and b/release-notes/2017/_img/01_05_17.png differ diff --git a/release-notes/2017/_img/01_05_18.png b/release-notes/2017/_img/01_05_18.png new file mode 100644 index 00000000000..639220e4381 Binary files /dev/null and b/release-notes/2017/_img/01_05_18.png differ diff --git a/release-notes/2017/_img/01_05_19.png b/release-notes/2017/_img/01_05_19.png new file mode 100644 index 00000000000..526297af0e4 Binary files /dev/null and b/release-notes/2017/_img/01_05_19.png differ diff --git a/release-notes/2017/_img/01_05_20.png b/release-notes/2017/_img/01_05_20.png new file mode 100644 index 00000000000..cc871493aee Binary files /dev/null and b/release-notes/2017/_img/01_05_20.png differ diff --git a/release-notes/2017/_img/01_05_21.png b/release-notes/2017/_img/01_05_21.png new file mode 100644 index 00000000000..b268d5ba8b4 Binary files /dev/null and b/release-notes/2017/_img/01_05_21.png differ diff --git a/release-notes/2017/_img/01_05_22.png b/release-notes/2017/_img/01_05_22.png new file mode 100644 index 00000000000..bb3839e6df2 Binary files /dev/null and b/release-notes/2017/_img/01_05_22.png differ diff --git a/release-notes/2017/_img/01_05_23.png b/release-notes/2017/_img/01_05_23.png new file mode 100644 index 00000000000..e8e63092923 Binary files /dev/null and b/release-notes/2017/_img/01_05_23.png differ diff --git a/release-notes/2017/_img/01_05_24.png b/release-notes/2017/_img/01_05_24.png new file mode 100644 index 00000000000..3d92199050f Binary files /dev/null and b/release-notes/2017/_img/01_05_24.png differ diff --git a/release-notes/2017/_img/01_05_25.png b/release-notes/2017/_img/01_05_25.png new file mode 100644 index 00000000000..8f7a6bff532 Binary files /dev/null and b/release-notes/2017/_img/01_05_25.png differ diff --git a/release-notes/2017/_img/01_05_26.png b/release-notes/2017/_img/01_05_26.png new file mode 100644 index 00000000000..1ce7345d50d Binary files /dev/null and b/release-notes/2017/_img/01_05_26.png differ diff --git a/release-notes/2017/_img/01_05_27.png b/release-notes/2017/_img/01_05_27.png new file mode 100644 index 00000000000..598d8ae60cf Binary files /dev/null and b/release-notes/2017/_img/01_05_27.png differ diff --git a/release-notes/2017/_img/01_05_28.png b/release-notes/2017/_img/01_05_28.png new file mode 100644 index 00000000000..a2fb53e601f Binary files /dev/null and b/release-notes/2017/_img/01_05_28.png differ diff --git a/release-notes/2017/_img/01_05_29.png b/release-notes/2017/_img/01_05_29.png new file mode 100644 index 00000000000..adacf432494 Binary files /dev/null and b/release-notes/2017/_img/01_05_29.png differ diff --git a/release-notes/2017/_img/01_05_30.png b/release-notes/2017/_img/01_05_30.png new file mode 100644 index 00000000000..c5679cb6de3 Binary files /dev/null and b/release-notes/2017/_img/01_05_30.png differ diff --git a/release-notes/2017/_img/01_05_31.png b/release-notes/2017/_img/01_05_31.png new file mode 100644 index 00000000000..53b5f946887 Binary files /dev/null and b/release-notes/2017/_img/01_05_31.png differ diff --git a/release-notes/2017/_img/01_05_32.png b/release-notes/2017/_img/01_05_32.png new file mode 100644 index 00000000000..851c102244c Binary files /dev/null and b/release-notes/2017/_img/01_05_32.png differ diff --git a/release-notes/2017/_img/01_05_33.png b/release-notes/2017/_img/01_05_33.png new file mode 100644 index 00000000000..90d4b4d877f Binary files /dev/null and b/release-notes/2017/_img/01_05_33.png differ diff --git a/release-notes/2017/_img/01_05_34.png b/release-notes/2017/_img/01_05_34.png new file mode 100644 index 00000000000..2ae9ef6aba7 Binary files /dev/null and b/release-notes/2017/_img/01_05_34.png differ diff --git a/release-notes/2017/_img/01_05_35.png b/release-notes/2017/_img/01_05_35.png new file mode 100644 index 00000000000..d359527b420 Binary files /dev/null and b/release-notes/2017/_img/01_05_35.png differ diff --git a/release-notes/2017/_img/01_05_36.png b/release-notes/2017/_img/01_05_36.png new file mode 100644 index 00000000000..425b744a080 Binary files /dev/null and b/release-notes/2017/_img/01_05_36.png differ diff --git a/release-notes/2017/_img/01_25_01.png b/release-notes/2017/_img/01_25_01.png new file mode 100644 index 00000000000..3d6daa1caab Binary files /dev/null and b/release-notes/2017/_img/01_25_01.png differ diff --git a/release-notes/2017/_img/01_25_02.png b/release-notes/2017/_img/01_25_02.png new file mode 100644 index 00000000000..af351a4e18d Binary files /dev/null and b/release-notes/2017/_img/01_25_02.png differ diff --git a/release-notes/2017/_img/01_25_03.png b/release-notes/2017/_img/01_25_03.png new file mode 100644 index 00000000000..9a5ba259c19 Binary files /dev/null and b/release-notes/2017/_img/01_25_03.png differ diff --git a/release-notes/2017/_img/01_25_04.png b/release-notes/2017/_img/01_25_04.png new file mode 100644 index 00000000000..631acbed56b Binary files /dev/null and b/release-notes/2017/_img/01_25_04.png differ diff --git a/release-notes/2017/_img/01_25_05.png b/release-notes/2017/_img/01_25_05.png new file mode 100644 index 00000000000..7e72431d35f Binary files /dev/null and b/release-notes/2017/_img/01_25_05.png differ diff --git a/release-notes/2017/_img/01_25_06.png b/release-notes/2017/_img/01_25_06.png new file mode 100644 index 00000000000..a5c7a3bd6fe Binary files /dev/null and b/release-notes/2017/_img/01_25_06.png differ diff --git a/release-notes/2017/_img/01_25_07.png b/release-notes/2017/_img/01_25_07.png new file mode 100644 index 00000000000..c36883e36a7 Binary files /dev/null and b/release-notes/2017/_img/01_25_07.png differ diff --git a/release-notes/2017/_img/01_25_08.png b/release-notes/2017/_img/01_25_08.png new file mode 100644 index 00000000000..7afdbb1b46b Binary files /dev/null and b/release-notes/2017/_img/01_25_08.png differ diff --git a/release-notes/2017/_img/01_25_09.png b/release-notes/2017/_img/01_25_09.png new file mode 100644 index 00000000000..6a5013a4f41 Binary files /dev/null and b/release-notes/2017/_img/01_25_09.png differ diff --git a/release-notes/2017/_img/01_25_10.png b/release-notes/2017/_img/01_25_10.png new file mode 100644 index 00000000000..31cb8005721 Binary files /dev/null and b/release-notes/2017/_img/01_25_10.png differ diff --git a/release-notes/2017/_img/01_25_11.png b/release-notes/2017/_img/01_25_11.png new file mode 100644 index 00000000000..c535b74f8a9 Binary files /dev/null and b/release-notes/2017/_img/01_25_11.png differ diff --git a/release-notes/2017/_img/01_25_12.png b/release-notes/2017/_img/01_25_12.png new file mode 100644 index 00000000000..f5a13fba45e Binary files /dev/null and b/release-notes/2017/_img/01_25_12.png differ diff --git a/release-notes/2017/_img/01_25_13.png b/release-notes/2017/_img/01_25_13.png new file mode 100644 index 00000000000..6fdeddfc212 Binary files /dev/null and b/release-notes/2017/_img/01_25_13.png differ diff --git a/release-notes/2017/_img/01_25_14.png b/release-notes/2017/_img/01_25_14.png new file mode 100644 index 00000000000..6bace6a5132 Binary files /dev/null and b/release-notes/2017/_img/01_25_14.png differ diff --git a/release-notes/2017/_img/01_25_15.png b/release-notes/2017/_img/01_25_15.png new file mode 100644 index 00000000000..531d0646178 Binary files /dev/null and b/release-notes/2017/_img/01_25_15.png differ diff --git a/release-notes/2017/_img/01_25_16.png b/release-notes/2017/_img/01_25_16.png new file mode 100644 index 00000000000..102a7a84279 Binary files /dev/null and b/release-notes/2017/_img/01_25_16.png differ diff --git a/release-notes/2017/_img/01_25_17.png b/release-notes/2017/_img/01_25_17.png new file mode 100644 index 00000000000..dfd7330a1d0 Binary files /dev/null and b/release-notes/2017/_img/01_25_17.png differ diff --git a/release-notes/2017/_img/01_25_build-editor-add-task.png b/release-notes/2017/_img/01_25_build-editor-add-task.png new file mode 100644 index 00000000000..3f3236468df Binary files /dev/null and b/release-notes/2017/_img/01_25_build-editor-add-task.png differ diff --git a/release-notes/2017/_img/01_25_build-editor-new-build-definition.png b/release-notes/2017/_img/01_25_build-editor-new-build-definition.png new file mode 100644 index 00000000000..69a3a5fa00c Binary files /dev/null and b/release-notes/2017/_img/01_25_build-editor-new-build-definition.png differ diff --git a/release-notes/2017/_img/01_25_build-editor-new-build-editor-switch.png b/release-notes/2017/_img/01_25_build-editor-new-build-editor-switch.png new file mode 100644 index 00000000000..0b5c5cb8de7 Binary files /dev/null and b/release-notes/2017/_img/01_25_build-editor-new-build-editor-switch.png differ diff --git a/release-notes/2017/_img/01_25_build-editor-process-parameters.png b/release-notes/2017/_img/01_25_build-editor-process-parameters.png new file mode 100644 index 00000000000..bebe28c84c4 Binary files /dev/null and b/release-notes/2017/_img/01_25_build-editor-process-parameters.png differ diff --git a/release-notes/2017/_img/02_15_01.png b/release-notes/2017/_img/02_15_01.png new file mode 100644 index 00000000000..eef9eae0a5d Binary files /dev/null and b/release-notes/2017/_img/02_15_01.png differ diff --git a/release-notes/2017/_img/02_15_02.png b/release-notes/2017/_img/02_15_02.png new file mode 100644 index 00000000000..09598108a9d Binary files /dev/null and b/release-notes/2017/_img/02_15_02.png differ diff --git a/release-notes/2017/_img/02_15_03.png b/release-notes/2017/_img/02_15_03.png new file mode 100644 index 00000000000..02cadc0e7fa Binary files /dev/null and b/release-notes/2017/_img/02_15_03.png differ diff --git a/release-notes/2017/_img/02_15_04.png b/release-notes/2017/_img/02_15_04.png new file mode 100644 index 00000000000..bb4dcbbd090 Binary files /dev/null and b/release-notes/2017/_img/02_15_04.png differ diff --git a/release-notes/2017/_img/02_15_05.png b/release-notes/2017/_img/02_15_05.png new file mode 100644 index 00000000000..ed5d3ded13c Binary files /dev/null and b/release-notes/2017/_img/02_15_05.png differ diff --git a/release-notes/2017/_img/02_15_06.png b/release-notes/2017/_img/02_15_06.png new file mode 100644 index 00000000000..a2e2515f188 Binary files /dev/null and b/release-notes/2017/_img/02_15_06.png differ diff --git a/release-notes/2017/_img/02_15_07.png b/release-notes/2017/_img/02_15_07.png new file mode 100644 index 00000000000..0668180ee8b Binary files /dev/null and b/release-notes/2017/_img/02_15_07.png differ diff --git a/release-notes/2017/_img/02_15_08.png b/release-notes/2017/_img/02_15_08.png new file mode 100644 index 00000000000..69eec8e041a Binary files /dev/null and b/release-notes/2017/_img/02_15_08.png differ diff --git a/release-notes/2017/_img/02_15_09.png b/release-notes/2017/_img/02_15_09.png new file mode 100644 index 00000000000..5e4fca21dd5 Binary files /dev/null and b/release-notes/2017/_img/02_15_09.png differ diff --git a/release-notes/2017/_img/02_15_10.png b/release-notes/2017/_img/02_15_10.png new file mode 100644 index 00000000000..a88012d9766 Binary files /dev/null and b/release-notes/2017/_img/02_15_10.png differ diff --git a/release-notes/2017/_img/02_15_11.png b/release-notes/2017/_img/02_15_11.png new file mode 100644 index 00000000000..361644c777e Binary files /dev/null and b/release-notes/2017/_img/02_15_11.png differ diff --git a/release-notes/2017/_img/02_15_12.png b/release-notes/2017/_img/02_15_12.png new file mode 100644 index 00000000000..05d12a80daf Binary files /dev/null and b/release-notes/2017/_img/02_15_12.png differ diff --git a/release-notes/2017/_img/02_15_13.png b/release-notes/2017/_img/02_15_13.png new file mode 100644 index 00000000000..f58d0789783 Binary files /dev/null and b/release-notes/2017/_img/02_15_13.png differ diff --git a/release-notes/2017/_img/02_15_14.png b/release-notes/2017/_img/02_15_14.png new file mode 100644 index 00000000000..67787d88133 Binary files /dev/null and b/release-notes/2017/_img/02_15_14.png differ diff --git a/release-notes/2017/_img/02_15_15.png b/release-notes/2017/_img/02_15_15.png new file mode 100644 index 00000000000..c2c7cb15611 Binary files /dev/null and b/release-notes/2017/_img/02_15_15.png differ diff --git a/release-notes/2017/_img/02_15_16.png b/release-notes/2017/_img/02_15_16.png new file mode 100644 index 00000000000..6af45cc9dfd Binary files /dev/null and b/release-notes/2017/_img/02_15_16.png differ diff --git a/release-notes/2017/_img/02_15_17.png b/release-notes/2017/_img/02_15_17.png new file mode 100644 index 00000000000..e83f1244c65 Binary files /dev/null and b/release-notes/2017/_img/02_15_17.png differ diff --git a/release-notes/2017/_img/02_15_18.png b/release-notes/2017/_img/02_15_18.png new file mode 100644 index 00000000000..52a26776253 Binary files /dev/null and b/release-notes/2017/_img/02_15_18.png differ diff --git a/release-notes/2017/_img/02_15_19.png b/release-notes/2017/_img/02_15_19.png new file mode 100644 index 00000000000..d23513fd4db Binary files /dev/null and b/release-notes/2017/_img/02_15_19.png differ diff --git a/release-notes/2017/_img/03_08_01.png b/release-notes/2017/_img/03_08_01.png new file mode 100644 index 00000000000..a0674a8f2fd Binary files /dev/null and b/release-notes/2017/_img/03_08_01.png differ diff --git a/release-notes/2017/_img/03_08_02.png b/release-notes/2017/_img/03_08_02.png new file mode 100644 index 00000000000..3bfe75b4030 Binary files /dev/null and b/release-notes/2017/_img/03_08_02.png differ diff --git a/release-notes/2017/_img/03_08_03.png b/release-notes/2017/_img/03_08_03.png new file mode 100644 index 00000000000..f5c9510ba74 Binary files /dev/null and b/release-notes/2017/_img/03_08_03.png differ diff --git a/release-notes/2017/_img/03_08_04.png b/release-notes/2017/_img/03_08_04.png new file mode 100644 index 00000000000..21b5191a5c3 Binary files /dev/null and b/release-notes/2017/_img/03_08_04.png differ diff --git a/release-notes/2017/_img/03_08_05.png b/release-notes/2017/_img/03_08_05.png new file mode 100644 index 00000000000..25ec1b4346a Binary files /dev/null and b/release-notes/2017/_img/03_08_05.png differ diff --git a/release-notes/2017/_img/03_08_06.png b/release-notes/2017/_img/03_08_06.png new file mode 100644 index 00000000000..a1922b49af0 Binary files /dev/null and b/release-notes/2017/_img/03_08_06.png differ diff --git a/release-notes/2017/_img/03_08_07.png b/release-notes/2017/_img/03_08_07.png new file mode 100644 index 00000000000..fdab8c571ec Binary files /dev/null and b/release-notes/2017/_img/03_08_07.png differ diff --git a/release-notes/2017/_img/03_08_08.png b/release-notes/2017/_img/03_08_08.png new file mode 100644 index 00000000000..21b52a735e0 Binary files /dev/null and b/release-notes/2017/_img/03_08_08.png differ diff --git a/release-notes/2017/_img/03_08_09.png b/release-notes/2017/_img/03_08_09.png new file mode 100644 index 00000000000..a2b206638a3 Binary files /dev/null and b/release-notes/2017/_img/03_08_09.png differ diff --git a/release-notes/2017/_img/03_29_01.png b/release-notes/2017/_img/03_29_01.png new file mode 100644 index 00000000000..b1f5e251b4f Binary files /dev/null and b/release-notes/2017/_img/03_29_01.png differ diff --git a/release-notes/2017/_img/03_29_02.png b/release-notes/2017/_img/03_29_02.png new file mode 100644 index 00000000000..d47e20044f6 Binary files /dev/null and b/release-notes/2017/_img/03_29_02.png differ diff --git a/release-notes/2017/_img/03_29_03.png b/release-notes/2017/_img/03_29_03.png new file mode 100644 index 00000000000..e34e8c24d8f Binary files /dev/null and b/release-notes/2017/_img/03_29_03.png differ diff --git a/release-notes/2017/_img/03_29_04.png b/release-notes/2017/_img/03_29_04.png new file mode 100644 index 00000000000..a449d94a674 Binary files /dev/null and b/release-notes/2017/_img/03_29_04.png differ diff --git a/release-notes/2017/_img/03_29_05.png b/release-notes/2017/_img/03_29_05.png new file mode 100644 index 00000000000..c5794e72fd8 Binary files /dev/null and b/release-notes/2017/_img/03_29_05.png differ diff --git a/release-notes/2017/_img/03_29_06.png b/release-notes/2017/_img/03_29_06.png new file mode 100644 index 00000000000..091f59b27fa Binary files /dev/null and b/release-notes/2017/_img/03_29_06.png differ diff --git a/release-notes/2017/_img/03_29_07.png b/release-notes/2017/_img/03_29_07.png new file mode 100644 index 00000000000..8164672181f Binary files /dev/null and b/release-notes/2017/_img/03_29_07.png differ diff --git a/release-notes/2017/_img/03_29_08.png b/release-notes/2017/_img/03_29_08.png new file mode 100644 index 00000000000..a70897ddb54 Binary files /dev/null and b/release-notes/2017/_img/03_29_08.png differ diff --git a/release-notes/2017/_img/03_29_09.png b/release-notes/2017/_img/03_29_09.png new file mode 100644 index 00000000000..29e86ffa5e9 Binary files /dev/null and b/release-notes/2017/_img/03_29_09.png differ diff --git a/release-notes/2017/_img/03_29_10.png b/release-notes/2017/_img/03_29_10.png new file mode 100644 index 00000000000..6558ade4986 Binary files /dev/null and b/release-notes/2017/_img/03_29_10.png differ diff --git a/release-notes/2017/_img/03_29_11.png b/release-notes/2017/_img/03_29_11.png new file mode 100644 index 00000000000..02cc055a705 Binary files /dev/null and b/release-notes/2017/_img/03_29_11.png differ diff --git a/release-notes/2017/_img/03_29_12.png b/release-notes/2017/_img/03_29_12.png new file mode 100644 index 00000000000..def7f2dbee7 Binary files /dev/null and b/release-notes/2017/_img/03_29_12.png differ diff --git a/release-notes/2017/_img/03_29_13.png b/release-notes/2017/_img/03_29_13.png new file mode 100644 index 00000000000..dbd7d4123d9 Binary files /dev/null and b/release-notes/2017/_img/03_29_13.png differ diff --git a/release-notes/2017/_img/03_29_14.png b/release-notes/2017/_img/03_29_14.png new file mode 100644 index 00000000000..a81c3934c3d Binary files /dev/null and b/release-notes/2017/_img/03_29_14.png differ diff --git a/release-notes/2017/_img/03_29_15.png b/release-notes/2017/_img/03_29_15.png new file mode 100644 index 00000000000..c9db9e3800a Binary files /dev/null and b/release-notes/2017/_img/03_29_15.png differ diff --git a/release-notes/2017/_img/03_29_16.png b/release-notes/2017/_img/03_29_16.png new file mode 100644 index 00000000000..19fd3bdf07a Binary files /dev/null and b/release-notes/2017/_img/03_29_16.png differ diff --git a/release-notes/2017/_img/03_29_17.png b/release-notes/2017/_img/03_29_17.png new file mode 100644 index 00000000000..9cf932bdd8f Binary files /dev/null and b/release-notes/2017/_img/03_29_17.png differ diff --git a/release-notes/2017/_img/03_29_18.png b/release-notes/2017/_img/03_29_18.png new file mode 100644 index 00000000000..c0b4411d440 Binary files /dev/null and b/release-notes/2017/_img/03_29_18.png differ diff --git a/release-notes/2017/_img/03_29_19.png b/release-notes/2017/_img/03_29_19.png new file mode 100644 index 00000000000..c233d3dc4ed Binary files /dev/null and b/release-notes/2017/_img/03_29_19.png differ diff --git a/release-notes/2017/_img/04-19-01.png b/release-notes/2017/_img/04-19-01.png new file mode 100644 index 00000000000..61a9364e250 Binary files /dev/null and b/release-notes/2017/_img/04-19-01.png differ diff --git a/release-notes/2017/_img/04_19_01.png b/release-notes/2017/_img/04_19_01.png new file mode 100644 index 00000000000..2d10cd26e91 Binary files /dev/null and b/release-notes/2017/_img/04_19_01.png differ diff --git a/release-notes/2017/_img/04_19_02.png b/release-notes/2017/_img/04_19_02.png new file mode 100644 index 00000000000..c2365c3afd8 Binary files /dev/null and b/release-notes/2017/_img/04_19_02.png differ diff --git a/release-notes/2017/_img/04_19_03.png b/release-notes/2017/_img/04_19_03.png new file mode 100644 index 00000000000..5703aa20b2e Binary files /dev/null and b/release-notes/2017/_img/04_19_03.png differ diff --git a/release-notes/2017/_img/04_19_04.png b/release-notes/2017/_img/04_19_04.png new file mode 100644 index 00000000000..a34dce60156 Binary files /dev/null and b/release-notes/2017/_img/04_19_04.png differ diff --git a/release-notes/2017/_img/04_19_05.png b/release-notes/2017/_img/04_19_05.png new file mode 100644 index 00000000000..18590e61504 Binary files /dev/null and b/release-notes/2017/_img/04_19_05.png differ diff --git a/release-notes/2017/_img/04_19_06.png b/release-notes/2017/_img/04_19_06.png new file mode 100644 index 00000000000..3f5a7cb6a5f Binary files /dev/null and b/release-notes/2017/_img/04_19_06.png differ diff --git a/release-notes/2017/_img/04_19_07.png b/release-notes/2017/_img/04_19_07.png new file mode 100644 index 00000000000..663aa93f52e Binary files /dev/null and b/release-notes/2017/_img/04_19_07.png differ diff --git a/release-notes/2017/_img/04_19_08.png b/release-notes/2017/_img/04_19_08.png new file mode 100644 index 00000000000..dfb3e26856f Binary files /dev/null and b/release-notes/2017/_img/04_19_08.png differ diff --git a/release-notes/2017/_img/04_19_09.png b/release-notes/2017/_img/04_19_09.png new file mode 100644 index 00000000000..4e1dbbfc051 Binary files /dev/null and b/release-notes/2017/_img/04_19_09.png differ diff --git a/release-notes/2017/_img/04_19_10.png b/release-notes/2017/_img/04_19_10.png new file mode 100644 index 00000000000..a23ee94287f Binary files /dev/null and b/release-notes/2017/_img/04_19_10.png differ diff --git a/release-notes/2017/_img/04_19_11.png b/release-notes/2017/_img/04_19_11.png new file mode 100644 index 00000000000..af5fec09ef7 Binary files /dev/null and b/release-notes/2017/_img/04_19_11.png differ diff --git a/release-notes/2017/_img/05_10_01.png b/release-notes/2017/_img/05_10_01.png new file mode 100644 index 00000000000..eddd3f41507 Binary files /dev/null and b/release-notes/2017/_img/05_10_01.png differ diff --git a/release-notes/2017/_img/05_10_02.png b/release-notes/2017/_img/05_10_02.png new file mode 100644 index 00000000000..1f5d72f9bd8 Binary files /dev/null and b/release-notes/2017/_img/05_10_02.png differ diff --git a/release-notes/2017/_img/05_10_03.png b/release-notes/2017/_img/05_10_03.png new file mode 100644 index 00000000000..ddfedef9a16 Binary files /dev/null and b/release-notes/2017/_img/05_10_03.png differ diff --git a/release-notes/2017/_img/05_10_04.png b/release-notes/2017/_img/05_10_04.png new file mode 100644 index 00000000000..755656da2b3 Binary files /dev/null and b/release-notes/2017/_img/05_10_04.png differ diff --git a/release-notes/2017/_img/05_10_05.png b/release-notes/2017/_img/05_10_05.png new file mode 100644 index 00000000000..50b1979867c Binary files /dev/null and b/release-notes/2017/_img/05_10_05.png differ diff --git a/release-notes/2017/_img/05_10_06.png b/release-notes/2017/_img/05_10_06.png new file mode 100644 index 00000000000..c4ce535fb02 Binary files /dev/null and b/release-notes/2017/_img/05_10_06.png differ diff --git a/release-notes/2017/_img/05_10_07.png b/release-notes/2017/_img/05_10_07.png new file mode 100644 index 00000000000..4133047a88d Binary files /dev/null and b/release-notes/2017/_img/05_10_07.png differ diff --git a/release-notes/2017/_img/05_10_08.png b/release-notes/2017/_img/05_10_08.png new file mode 100644 index 00000000000..2979002146c Binary files /dev/null and b/release-notes/2017/_img/05_10_08.png differ diff --git a/release-notes/2017/_img/05_10_09.png b/release-notes/2017/_img/05_10_09.png new file mode 100644 index 00000000000..60a2d2da575 Binary files /dev/null and b/release-notes/2017/_img/05_10_09.png differ diff --git a/release-notes/2017/_img/05_10_10.png b/release-notes/2017/_img/05_10_10.png new file mode 100644 index 00000000000..29de28f62a6 Binary files /dev/null and b/release-notes/2017/_img/05_10_10.png differ diff --git a/release-notes/2017/_img/05_10_11.png b/release-notes/2017/_img/05_10_11.png new file mode 100644 index 00000000000..4f0a496256a Binary files /dev/null and b/release-notes/2017/_img/05_10_11.png differ diff --git a/release-notes/2017/_img/05_10_12.png b/release-notes/2017/_img/05_10_12.png new file mode 100644 index 00000000000..2f8b4ec2397 Binary files /dev/null and b/release-notes/2017/_img/05_10_12.png differ diff --git a/release-notes/2017/_img/05_10_13.png b/release-notes/2017/_img/05_10_13.png new file mode 100644 index 00000000000..7844d57c6f9 Binary files /dev/null and b/release-notes/2017/_img/05_10_13.png differ diff --git a/release-notes/2017/_img/05_10_14.png b/release-notes/2017/_img/05_10_14.png new file mode 100644 index 00000000000..2b21c169b4d Binary files /dev/null and b/release-notes/2017/_img/05_10_14.png differ diff --git a/release-notes/2017/_img/05_10_15.png b/release-notes/2017/_img/05_10_15.png new file mode 100644 index 00000000000..fcc7bdb379b Binary files /dev/null and b/release-notes/2017/_img/05_10_15.png differ diff --git a/release-notes/2017/_img/05_10_16.png b/release-notes/2017/_img/05_10_16.png new file mode 100644 index 00000000000..c42247b3a87 Binary files /dev/null and b/release-notes/2017/_img/05_10_16.png differ diff --git a/release-notes/2017/_img/05_10_17.png b/release-notes/2017/_img/05_10_17.png new file mode 100644 index 00000000000..2f8b46d07ca Binary files /dev/null and b/release-notes/2017/_img/05_10_17.png differ diff --git a/release-notes/2017/_img/05_10_18.png b/release-notes/2017/_img/05_10_18.png new file mode 100644 index 00000000000..ee7edd4c5bd Binary files /dev/null and b/release-notes/2017/_img/05_10_18.png differ diff --git a/release-notes/2017/_img/05_10_19.png b/release-notes/2017/_img/05_10_19.png new file mode 100644 index 00000000000..75dc5410650 Binary files /dev/null and b/release-notes/2017/_img/05_10_19.png differ diff --git a/release-notes/2017/_img/05_10_20.png b/release-notes/2017/_img/05_10_20.png new file mode 100644 index 00000000000..803c8ccc181 Binary files /dev/null and b/release-notes/2017/_img/05_10_20.png differ diff --git a/release-notes/2017/_img/05_10_21.png b/release-notes/2017/_img/05_10_21.png new file mode 100644 index 00000000000..33fe8c37701 Binary files /dev/null and b/release-notes/2017/_img/05_10_21.png differ diff --git a/release-notes/2017/_img/05_10_22.png b/release-notes/2017/_img/05_10_22.png new file mode 100644 index 00000000000..28114a6a881 Binary files /dev/null and b/release-notes/2017/_img/05_10_22.png differ diff --git a/release-notes/2017/_img/05_10_23.png b/release-notes/2017/_img/05_10_23.png new file mode 100644 index 00000000000..97fb9c2138d Binary files /dev/null and b/release-notes/2017/_img/05_10_23.png differ diff --git a/release-notes/2017/_img/05_10_24.png b/release-notes/2017/_img/05_10_24.png new file mode 100644 index 00000000000..079e9d837dd Binary files /dev/null and b/release-notes/2017/_img/05_10_24.png differ diff --git a/release-notes/2017/_img/05_10_25.png b/release-notes/2017/_img/05_10_25.png new file mode 100644 index 00000000000..c5b6ddb7812 Binary files /dev/null and b/release-notes/2017/_img/05_10_25.png differ diff --git a/release-notes/2017/_img/06_01_01.png b/release-notes/2017/_img/06_01_01.png new file mode 100644 index 00000000000..b13ed761f7c Binary files /dev/null and b/release-notes/2017/_img/06_01_01.png differ diff --git a/release-notes/2017/_img/06_01_02.png b/release-notes/2017/_img/06_01_02.png new file mode 100644 index 00000000000..e777fe916df Binary files /dev/null and b/release-notes/2017/_img/06_01_02.png differ diff --git a/release-notes/2017/_img/06_01_03.png b/release-notes/2017/_img/06_01_03.png new file mode 100644 index 00000000000..78765468c87 Binary files /dev/null and b/release-notes/2017/_img/06_01_03.png differ diff --git a/release-notes/2017/_img/06_01_04.png b/release-notes/2017/_img/06_01_04.png new file mode 100644 index 00000000000..87b6736398f Binary files /dev/null and b/release-notes/2017/_img/06_01_04.png differ diff --git a/release-notes/2017/_img/06_01_05.png b/release-notes/2017/_img/06_01_05.png new file mode 100644 index 00000000000..42d309c01a0 Binary files /dev/null and b/release-notes/2017/_img/06_01_05.png differ diff --git a/release-notes/2017/_img/06_01_06.png b/release-notes/2017/_img/06_01_06.png new file mode 100644 index 00000000000..0b2bbd1ef48 Binary files /dev/null and b/release-notes/2017/_img/06_01_06.png differ diff --git a/release-notes/2017/_img/06_01_07.png b/release-notes/2017/_img/06_01_07.png new file mode 100644 index 00000000000..f4e43c650fe Binary files /dev/null and b/release-notes/2017/_img/06_01_07.png differ diff --git a/release-notes/2017/_img/06_01_08.png b/release-notes/2017/_img/06_01_08.png new file mode 100644 index 00000000000..757cf6b6e9f Binary files /dev/null and b/release-notes/2017/_img/06_01_08.png differ diff --git a/release-notes/2017/_img/06_01_09.png b/release-notes/2017/_img/06_01_09.png new file mode 100644 index 00000000000..4d8c252b2f9 Binary files /dev/null and b/release-notes/2017/_img/06_01_09.png differ diff --git a/release-notes/2017/_img/06_01_10.png b/release-notes/2017/_img/06_01_10.png new file mode 100644 index 00000000000..9b2a47fd6fb Binary files /dev/null and b/release-notes/2017/_img/06_01_10.png differ diff --git a/release-notes/2017/_img/06_01_11.jpg b/release-notes/2017/_img/06_01_11.jpg new file mode 100644 index 00000000000..13c58bb9208 Binary files /dev/null and b/release-notes/2017/_img/06_01_11.jpg differ diff --git a/release-notes/2017/_img/06_01_11.png b/release-notes/2017/_img/06_01_11.png new file mode 100644 index 00000000000..1a9908b9596 Binary files /dev/null and b/release-notes/2017/_img/06_01_11.png differ diff --git a/release-notes/2017/_img/06_01_12.png b/release-notes/2017/_img/06_01_12.png new file mode 100644 index 00000000000..0161a89eb7a Binary files /dev/null and b/release-notes/2017/_img/06_01_12.png differ diff --git a/release-notes/2017/_img/06_01_13.png b/release-notes/2017/_img/06_01_13.png new file mode 100644 index 00000000000..0dcb1b29b60 Binary files /dev/null and b/release-notes/2017/_img/06_01_13.png differ diff --git a/release-notes/2017/_img/06_01_14.png b/release-notes/2017/_img/06_01_14.png new file mode 100644 index 00000000000..008065f3429 Binary files /dev/null and b/release-notes/2017/_img/06_01_14.png differ diff --git a/release-notes/2017/_img/06_01_15.png b/release-notes/2017/_img/06_01_15.png new file mode 100644 index 00000000000..58f5f85ed39 Binary files /dev/null and b/release-notes/2017/_img/06_01_15.png differ diff --git a/release-notes/2017/_img/06_01_16.png b/release-notes/2017/_img/06_01_16.png new file mode 100644 index 00000000000..22f4aa64478 Binary files /dev/null and b/release-notes/2017/_img/06_01_16.png differ diff --git a/release-notes/2017/_img/06_01_17.png b/release-notes/2017/_img/06_01_17.png new file mode 100644 index 00000000000..b6345464198 Binary files /dev/null and b/release-notes/2017/_img/06_01_17.png differ diff --git a/release-notes/2017/_img/06_01_18.png b/release-notes/2017/_img/06_01_18.png new file mode 100644 index 00000000000..2bd7853abbc Binary files /dev/null and b/release-notes/2017/_img/06_01_18.png differ diff --git a/release-notes/2017/_img/06_22_00.png b/release-notes/2017/_img/06_22_00.png new file mode 100644 index 00000000000..405698f1b46 Binary files /dev/null and b/release-notes/2017/_img/06_22_00.png differ diff --git a/release-notes/2017/_img/06_22_01.png b/release-notes/2017/_img/06_22_01.png new file mode 100644 index 00000000000..ec6082882a3 Binary files /dev/null and b/release-notes/2017/_img/06_22_01.png differ diff --git a/release-notes/2017/_img/06_22_02.png b/release-notes/2017/_img/06_22_02.png new file mode 100644 index 00000000000..7a6460201c5 Binary files /dev/null and b/release-notes/2017/_img/06_22_02.png differ diff --git a/release-notes/2017/_img/06_22_03.png b/release-notes/2017/_img/06_22_03.png new file mode 100644 index 00000000000..7508ef986e2 Binary files /dev/null and b/release-notes/2017/_img/06_22_03.png differ diff --git a/release-notes/2017/_img/06_22_04.png b/release-notes/2017/_img/06_22_04.png new file mode 100644 index 00000000000..e22129d7a74 Binary files /dev/null and b/release-notes/2017/_img/06_22_04.png differ diff --git a/release-notes/2017/_img/06_22_05.png b/release-notes/2017/_img/06_22_05.png new file mode 100644 index 00000000000..ef22814919e Binary files /dev/null and b/release-notes/2017/_img/06_22_05.png differ diff --git a/release-notes/2017/_img/06_22_06.png b/release-notes/2017/_img/06_22_06.png new file mode 100644 index 00000000000..ee17895c134 Binary files /dev/null and b/release-notes/2017/_img/06_22_06.png differ diff --git a/release-notes/2017/_img/06_22_07.png b/release-notes/2017/_img/06_22_07.png new file mode 100644 index 00000000000..d790154b260 Binary files /dev/null and b/release-notes/2017/_img/06_22_07.png differ diff --git a/release-notes/2017/_img/06_22_08.png b/release-notes/2017/_img/06_22_08.png new file mode 100644 index 00000000000..19388c6fc55 Binary files /dev/null and b/release-notes/2017/_img/06_22_08.png differ diff --git a/release-notes/2017/_img/06_22_09.png b/release-notes/2017/_img/06_22_09.png new file mode 100644 index 00000000000..52b62ba6764 Binary files /dev/null and b/release-notes/2017/_img/06_22_09.png differ diff --git a/release-notes/2017/_img/06_22_10.png b/release-notes/2017/_img/06_22_10.png new file mode 100644 index 00000000000..fd35bc79ddb Binary files /dev/null and b/release-notes/2017/_img/06_22_10.png differ diff --git a/release-notes/2017/_img/06_22_11.png b/release-notes/2017/_img/06_22_11.png new file mode 100644 index 00000000000..0eb820e9840 Binary files /dev/null and b/release-notes/2017/_img/06_22_11.png differ diff --git a/release-notes/2017/_img/06_22_12.png b/release-notes/2017/_img/06_22_12.png new file mode 100644 index 00000000000..8e93168a650 Binary files /dev/null and b/release-notes/2017/_img/06_22_12.png differ diff --git a/release-notes/2017/_img/06_22_13.png b/release-notes/2017/_img/06_22_13.png new file mode 100644 index 00000000000..98c5e105164 Binary files /dev/null and b/release-notes/2017/_img/06_22_13.png differ diff --git a/release-notes/2017/_img/06_22_14.png b/release-notes/2017/_img/06_22_14.png new file mode 100644 index 00000000000..3cd0f22a0ff Binary files /dev/null and b/release-notes/2017/_img/06_22_14.png differ diff --git a/release-notes/2017/_img/06_22_15.png b/release-notes/2017/_img/06_22_15.png new file mode 100644 index 00000000000..aab5bceaee5 Binary files /dev/null and b/release-notes/2017/_img/06_22_15.png differ diff --git a/release-notes/2017/_img/06_22_16.png b/release-notes/2017/_img/06_22_16.png new file mode 100644 index 00000000000..6f65a1e5d52 Binary files /dev/null and b/release-notes/2017/_img/06_22_16.png differ diff --git a/release-notes/2017/_img/06_22_17.png b/release-notes/2017/_img/06_22_17.png new file mode 100644 index 00000000000..db5f9e3349b Binary files /dev/null and b/release-notes/2017/_img/06_22_17.png differ diff --git a/release-notes/2017/_img/06_22_18.png b/release-notes/2017/_img/06_22_18.png new file mode 100644 index 00000000000..74af9afad9e Binary files /dev/null and b/release-notes/2017/_img/06_22_18.png differ diff --git a/release-notes/2017/_img/06_22_19.png b/release-notes/2017/_img/06_22_19.png new file mode 100644 index 00000000000..1b216a571f1 Binary files /dev/null and b/release-notes/2017/_img/06_22_19.png differ diff --git a/release-notes/2017/_img/06_22_20.png b/release-notes/2017/_img/06_22_20.png new file mode 100644 index 00000000000..af34c77c124 Binary files /dev/null and b/release-notes/2017/_img/06_22_20.png differ diff --git a/release-notes/2017/_img/06_22_21.png b/release-notes/2017/_img/06_22_21.png new file mode 100644 index 00000000000..f39d9d2681b Binary files /dev/null and b/release-notes/2017/_img/06_22_21.png differ diff --git a/release-notes/2017/_img/06_22_22.png b/release-notes/2017/_img/06_22_22.png new file mode 100644 index 00000000000..ffcd153849e Binary files /dev/null and b/release-notes/2017/_img/06_22_22.png differ diff --git a/release-notes/2017/_img/06_22_23.png b/release-notes/2017/_img/06_22_23.png new file mode 100644 index 00000000000..d9dc1c18d21 Binary files /dev/null and b/release-notes/2017/_img/06_22_23.png differ diff --git a/release-notes/2017/_img/06_22_24.png b/release-notes/2017/_img/06_22_24.png new file mode 100644 index 00000000000..227df9d9d79 Binary files /dev/null and b/release-notes/2017/_img/06_22_24.png differ diff --git a/release-notes/2017/_img/06_22_25.png b/release-notes/2017/_img/06_22_25.png new file mode 100644 index 00000000000..2ab3ed0f01c Binary files /dev/null and b/release-notes/2017/_img/06_22_25.png differ diff --git a/release-notes/2017/_img/06_22_26.png b/release-notes/2017/_img/06_22_26.png new file mode 100644 index 00000000000..3f0b7a7415e Binary files /dev/null and b/release-notes/2017/_img/06_22_26.png differ diff --git a/release-notes/2017/_img/06_22_27.png b/release-notes/2017/_img/06_22_27.png new file mode 100644 index 00000000000..225ddcff226 Binary files /dev/null and b/release-notes/2017/_img/06_22_27.png differ diff --git a/release-notes/2017/_img/06_22_28.png b/release-notes/2017/_img/06_22_28.png new file mode 100644 index 00000000000..0edaa7e8196 Binary files /dev/null and b/release-notes/2017/_img/06_22_28.png differ diff --git a/release-notes/2017/_img/06_22_29.png b/release-notes/2017/_img/06_22_29.png new file mode 100644 index 00000000000..a7ee312aec3 Binary files /dev/null and b/release-notes/2017/_img/06_22_29.png differ diff --git a/release-notes/2017/_img/06_22_30.png b/release-notes/2017/_img/06_22_30.png new file mode 100644 index 00000000000..6646efe07d1 Binary files /dev/null and b/release-notes/2017/_img/06_22_30.png differ diff --git a/release-notes/2017/_img/06_22_31.png b/release-notes/2017/_img/06_22_31.png new file mode 100644 index 00000000000..6f08b0a38f7 Binary files /dev/null and b/release-notes/2017/_img/06_22_31.png differ diff --git a/release-notes/2017/_img/06_22_32.png b/release-notes/2017/_img/06_22_32.png new file mode 100644 index 00000000000..fdde2f061c9 Binary files /dev/null and b/release-notes/2017/_img/06_22_32.png differ diff --git a/release-notes/2017/_img/06_22_33.png b/release-notes/2017/_img/06_22_33.png new file mode 100644 index 00000000000..14fcdcf71f0 Binary files /dev/null and b/release-notes/2017/_img/06_22_33.png differ diff --git a/release-notes/2017/_img/06_22_34.png b/release-notes/2017/_img/06_22_34.png new file mode 100644 index 00000000000..675c47ab14a Binary files /dev/null and b/release-notes/2017/_img/06_22_34.png differ diff --git a/release-notes/2017/_img/06_22_35.png b/release-notes/2017/_img/06_22_35.png new file mode 100644 index 00000000000..18ec6f604f6 Binary files /dev/null and b/release-notes/2017/_img/06_22_35.png differ diff --git a/release-notes/2017/_img/06_22_default-build-queue-on-tasks-tab-required.png b/release-notes/2017/_img/06_22_default-build-queue-on-tasks-tab-required.png new file mode 100644 index 00000000000..15295977a9f Binary files /dev/null and b/release-notes/2017/_img/06_22_default-build-queue-on-tasks-tab-required.png differ diff --git a/release-notes/2017/_img/06_22_export-build-definition.png b/release-notes/2017/_img/06_22_export-build-definition.png new file mode 100644 index 00000000000..220b5609509 Binary files /dev/null and b/release-notes/2017/_img/06_22_export-build-definition.png differ diff --git a/release-notes/2017/_img/06_22_import-build-definition.png b/release-notes/2017/_img/06_22_import-build-definition.png new file mode 100644 index 00000000000..098f67f9e39 Binary files /dev/null and b/release-notes/2017/_img/06_22_import-build-definition.png differ diff --git a/release-notes/2017/_img/06_22_pick-a-build-definition-from-the-build-summary.png b/release-notes/2017/_img/06_22_pick-a-build-definition-from-the-build-summary.png new file mode 100644 index 00000000000..aaeac921ff8 Binary files /dev/null and b/release-notes/2017/_img/06_22_pick-a-build-definition-from-the-build-summary.png differ diff --git a/release-notes/2017/_img/07_14_00.png b/release-notes/2017/_img/07_14_00.png new file mode 100644 index 00000000000..e27960c46e9 Binary files /dev/null and b/release-notes/2017/_img/07_14_00.png differ diff --git a/release-notes/2017/_img/07_14_01.png b/release-notes/2017/_img/07_14_01.png new file mode 100644 index 00000000000..f1d6e60955b Binary files /dev/null and b/release-notes/2017/_img/07_14_01.png differ diff --git a/release-notes/2017/_img/07_14_02.png b/release-notes/2017/_img/07_14_02.png new file mode 100644 index 00000000000..bf3f35042e3 Binary files /dev/null and b/release-notes/2017/_img/07_14_02.png differ diff --git a/release-notes/2017/_img/07_14_03.png b/release-notes/2017/_img/07_14_03.png new file mode 100644 index 00000000000..b22a83cf5d3 Binary files /dev/null and b/release-notes/2017/_img/07_14_03.png differ diff --git a/release-notes/2017/_img/07_14_04.png b/release-notes/2017/_img/07_14_04.png new file mode 100644 index 00000000000..c1298ea93f2 Binary files /dev/null and b/release-notes/2017/_img/07_14_04.png differ diff --git a/release-notes/2017/_img/07_14_05.png b/release-notes/2017/_img/07_14_05.png new file mode 100644 index 00000000000..753d085d16d Binary files /dev/null and b/release-notes/2017/_img/07_14_05.png differ diff --git a/release-notes/2017/_img/07_14_06.png b/release-notes/2017/_img/07_14_06.png new file mode 100644 index 00000000000..70d4d94c065 Binary files /dev/null and b/release-notes/2017/_img/07_14_06.png differ diff --git a/release-notes/2017/_img/07_14_07.png b/release-notes/2017/_img/07_14_07.png new file mode 100644 index 00000000000..7c011d3c9a1 Binary files /dev/null and b/release-notes/2017/_img/07_14_07.png differ diff --git a/release-notes/2017/_img/07_14_08.png b/release-notes/2017/_img/07_14_08.png new file mode 100644 index 00000000000..31c007301ef Binary files /dev/null and b/release-notes/2017/_img/07_14_08.png differ diff --git a/release-notes/2017/_img/07_14_09.png b/release-notes/2017/_img/07_14_09.png new file mode 100644 index 00000000000..d1580c970eb Binary files /dev/null and b/release-notes/2017/_img/07_14_09.png differ diff --git a/release-notes/2017/_img/07_14_10.png b/release-notes/2017/_img/07_14_10.png new file mode 100644 index 00000000000..32310121941 Binary files /dev/null and b/release-notes/2017/_img/07_14_10.png differ diff --git a/release-notes/2017/_img/07_14_11.png b/release-notes/2017/_img/07_14_11.png new file mode 100644 index 00000000000..d535d5acdba Binary files /dev/null and b/release-notes/2017/_img/07_14_11.png differ diff --git a/release-notes/2017/_img/07_14_12.png b/release-notes/2017/_img/07_14_12.png new file mode 100644 index 00000000000..8412260244e Binary files /dev/null and b/release-notes/2017/_img/07_14_12.png differ diff --git a/release-notes/2017/_img/07_14_13.png b/release-notes/2017/_img/07_14_13.png new file mode 100644 index 00000000000..bbb9467ec9a Binary files /dev/null and b/release-notes/2017/_img/07_14_13.png differ diff --git a/release-notes/2017/_img/07_14_14.png b/release-notes/2017/_img/07_14_14.png new file mode 100644 index 00000000000..f113862902d Binary files /dev/null and b/release-notes/2017/_img/07_14_14.png differ diff --git a/release-notes/2017/_img/07_14_15.png b/release-notes/2017/_img/07_14_15.png new file mode 100644 index 00000000000..6433c4b7eed Binary files /dev/null and b/release-notes/2017/_img/07_14_15.png differ diff --git a/release-notes/2017/_img/07_14_16.png b/release-notes/2017/_img/07_14_16.png new file mode 100644 index 00000000000..08329f38e8a Binary files /dev/null and b/release-notes/2017/_img/07_14_16.png differ diff --git a/release-notes/2017/_img/07_14_17.png b/release-notes/2017/_img/07_14_17.png new file mode 100644 index 00000000000..84a33ea7875 Binary files /dev/null and b/release-notes/2017/_img/07_14_17.png differ diff --git a/release-notes/2017/_img/07_14_18.png b/release-notes/2017/_img/07_14_18.png new file mode 100644 index 00000000000..16c3e166482 Binary files /dev/null and b/release-notes/2017/_img/07_14_18.png differ diff --git a/release-notes/2017/_img/07_14_19.png b/release-notes/2017/_img/07_14_19.png new file mode 100644 index 00000000000..889bd71053b Binary files /dev/null and b/release-notes/2017/_img/07_14_19.png differ diff --git a/release-notes/2017/_img/07_14_20.png b/release-notes/2017/_img/07_14_20.png new file mode 100644 index 00000000000..91dbeefa774 Binary files /dev/null and b/release-notes/2017/_img/07_14_20.png differ diff --git a/release-notes/2017/_img/07_14_21.png b/release-notes/2017/_img/07_14_21.png new file mode 100644 index 00000000000..3b91a7a458f Binary files /dev/null and b/release-notes/2017/_img/07_14_21.png differ diff --git a/release-notes/2017/_img/07_14_22.png b/release-notes/2017/_img/07_14_22.png new file mode 100644 index 00000000000..a10831d7a16 Binary files /dev/null and b/release-notes/2017/_img/07_14_22.png differ diff --git a/release-notes/2017/_img/07_14_23.png b/release-notes/2017/_img/07_14_23.png new file mode 100644 index 00000000000..44828a08a5d Binary files /dev/null and b/release-notes/2017/_img/07_14_23.png differ diff --git a/release-notes/2017/_img/08_04_01.png b/release-notes/2017/_img/08_04_01.png new file mode 100644 index 00000000000..4275cc873e6 Binary files /dev/null and b/release-notes/2017/_img/08_04_01.png differ diff --git a/release-notes/2017/_img/08_04_02.png b/release-notes/2017/_img/08_04_02.png new file mode 100644 index 00000000000..e1fa8a920c4 Binary files /dev/null and b/release-notes/2017/_img/08_04_02.png differ diff --git a/release-notes/2017/_img/08_04_03.png b/release-notes/2017/_img/08_04_03.png new file mode 100644 index 00000000000..060f3a50ce7 Binary files /dev/null and b/release-notes/2017/_img/08_04_03.png differ diff --git a/release-notes/2017/_img/08_04_04.png b/release-notes/2017/_img/08_04_04.png new file mode 100644 index 00000000000..1785c8aeb81 Binary files /dev/null and b/release-notes/2017/_img/08_04_04.png differ diff --git a/release-notes/2017/_img/08_04_05.png b/release-notes/2017/_img/08_04_05.png new file mode 100644 index 00000000000..e6e4b84484e Binary files /dev/null and b/release-notes/2017/_img/08_04_05.png differ diff --git a/release-notes/2017/_img/08_04_06.png b/release-notes/2017/_img/08_04_06.png new file mode 100644 index 00000000000..971aef94339 Binary files /dev/null and b/release-notes/2017/_img/08_04_06.png differ diff --git a/release-notes/2017/_img/08_04_07.png b/release-notes/2017/_img/08_04_07.png new file mode 100644 index 00000000000..a065cf22284 Binary files /dev/null and b/release-notes/2017/_img/08_04_07.png differ diff --git a/release-notes/2017/_img/08_04_08.png b/release-notes/2017/_img/08_04_08.png new file mode 100644 index 00000000000..8dcd2ea5047 Binary files /dev/null and b/release-notes/2017/_img/08_04_08.png differ diff --git a/release-notes/2017/_img/08_04_09.png b/release-notes/2017/_img/08_04_09.png new file mode 100644 index 00000000000..982246bccbf Binary files /dev/null and b/release-notes/2017/_img/08_04_09.png differ diff --git a/release-notes/2017/_img/08_04_10.png b/release-notes/2017/_img/08_04_10.png new file mode 100644 index 00000000000..8cac546c73f Binary files /dev/null and b/release-notes/2017/_img/08_04_10.png differ diff --git a/release-notes/2017/_img/08_04_11.png b/release-notes/2017/_img/08_04_11.png new file mode 100644 index 00000000000..895dbd54566 Binary files /dev/null and b/release-notes/2017/_img/08_04_11.png differ diff --git a/release-notes/2017/_img/08_04_12.png b/release-notes/2017/_img/08_04_12.png new file mode 100644 index 00000000000..784eb21bdd8 Binary files /dev/null and b/release-notes/2017/_img/08_04_12.png differ diff --git a/release-notes/2017/_img/08_04_12a.png b/release-notes/2017/_img/08_04_12a.png new file mode 100644 index 00000000000..d59dd80beef Binary files /dev/null and b/release-notes/2017/_img/08_04_12a.png differ diff --git a/release-notes/2017/_img/08_04_13.png b/release-notes/2017/_img/08_04_13.png new file mode 100644 index 00000000000..9b4a4f53ed8 Binary files /dev/null and b/release-notes/2017/_img/08_04_13.png differ diff --git a/release-notes/2017/_img/08_04_14.png b/release-notes/2017/_img/08_04_14.png new file mode 100644 index 00000000000..3bf8c07dff9 Binary files /dev/null and b/release-notes/2017/_img/08_04_14.png differ diff --git a/release-notes/2017/_img/08_04_15.png b/release-notes/2017/_img/08_04_15.png new file mode 100644 index 00000000000..09e8b6d29b7 Binary files /dev/null and b/release-notes/2017/_img/08_04_15.png differ diff --git a/release-notes/2017/_img/08_04_16.png b/release-notes/2017/_img/08_04_16.png new file mode 100644 index 00000000000..38973d30ea3 Binary files /dev/null and b/release-notes/2017/_img/08_04_16.png differ diff --git a/release-notes/2017/_img/08_04_17.png b/release-notes/2017/_img/08_04_17.png new file mode 100644 index 00000000000..0ce22eed174 Binary files /dev/null and b/release-notes/2017/_img/08_04_17.png differ diff --git a/release-notes/2017/_img/08_04_18.png b/release-notes/2017/_img/08_04_18.png new file mode 100644 index 00000000000..57a68b1f774 Binary files /dev/null and b/release-notes/2017/_img/08_04_18.png differ diff --git a/release-notes/2017/_img/08_04_19.png b/release-notes/2017/_img/08_04_19.png new file mode 100644 index 00000000000..980a91b4978 Binary files /dev/null and b/release-notes/2017/_img/08_04_19.png differ diff --git a/release-notes/2017/_img/08_04_20.png b/release-notes/2017/_img/08_04_20.png new file mode 100644 index 00000000000..08ba1982a3c Binary files /dev/null and b/release-notes/2017/_img/08_04_20.png differ diff --git a/release-notes/2017/_img/08_04_21.png b/release-notes/2017/_img/08_04_21.png new file mode 100644 index 00000000000..858947c4d1a Binary files /dev/null and b/release-notes/2017/_img/08_04_21.png differ diff --git a/release-notes/2017/_img/08_04_22.png b/release-notes/2017/_img/08_04_22.png new file mode 100644 index 00000000000..ee50ebe9d9a Binary files /dev/null and b/release-notes/2017/_img/08_04_22.png differ diff --git a/release-notes/2017/_img/08_04_23.png b/release-notes/2017/_img/08_04_23.png new file mode 100644 index 00000000000..22a607aa0bf Binary files /dev/null and b/release-notes/2017/_img/08_04_23.png differ diff --git a/release-notes/2017/_img/08_04_24.png b/release-notes/2017/_img/08_04_24.png new file mode 100644 index 00000000000..519feb20ec1 Binary files /dev/null and b/release-notes/2017/_img/08_04_24.png differ diff --git a/release-notes/2017/_img/08_04_25.png b/release-notes/2017/_img/08_04_25.png new file mode 100644 index 00000000000..d66f86644f2 Binary files /dev/null and b/release-notes/2017/_img/08_04_25.png differ diff --git a/release-notes/2017/_img/08_04_26.png b/release-notes/2017/_img/08_04_26.png new file mode 100644 index 00000000000..ec30c5627ed Binary files /dev/null and b/release-notes/2017/_img/08_04_26.png differ diff --git a/release-notes/2017/_img/08_04_27.png b/release-notes/2017/_img/08_04_27.png new file mode 100644 index 00000000000..18ee2c9d842 Binary files /dev/null and b/release-notes/2017/_img/08_04_27.png differ diff --git a/release-notes/2017/_img/08_04_28.png b/release-notes/2017/_img/08_04_28.png new file mode 100644 index 00000000000..0d0211a9b97 Binary files /dev/null and b/release-notes/2017/_img/08_04_28.png differ diff --git a/release-notes/2017/_img/08_04_29.png b/release-notes/2017/_img/08_04_29.png new file mode 100644 index 00000000000..73b25e52160 Binary files /dev/null and b/release-notes/2017/_img/08_04_29.png differ diff --git a/release-notes/2017/_img/08_04_30.png b/release-notes/2017/_img/08_04_30.png new file mode 100644 index 00000000000..7a96e481f78 Binary files /dev/null and b/release-notes/2017/_img/08_04_30.png differ diff --git a/release-notes/2017/_img/08_04_31.png b/release-notes/2017/_img/08_04_31.png new file mode 100644 index 00000000000..5dd94629ea4 Binary files /dev/null and b/release-notes/2017/_img/08_04_31.png differ diff --git a/release-notes/2017/_img/08_04_32.png b/release-notes/2017/_img/08_04_32.png new file mode 100644 index 00000000000..83ca046a901 Binary files /dev/null and b/release-notes/2017/_img/08_04_32.png differ diff --git a/release-notes/2017/_img/08_04_33.png b/release-notes/2017/_img/08_04_33.png new file mode 100644 index 00000000000..b9544e64681 Binary files /dev/null and b/release-notes/2017/_img/08_04_33.png differ diff --git a/release-notes/2017/_img/08_04_34.png b/release-notes/2017/_img/08_04_34.png new file mode 100644 index 00000000000..e2c919658f2 Binary files /dev/null and b/release-notes/2017/_img/08_04_34.png differ diff --git a/release-notes/2017/_img/08_04_35.png b/release-notes/2017/_img/08_04_35.png new file mode 100644 index 00000000000..be139b949f5 Binary files /dev/null and b/release-notes/2017/_img/08_04_35.png differ diff --git a/release-notes/2017/_img/08_04_36.png b/release-notes/2017/_img/08_04_36.png new file mode 100644 index 00000000000..eeb27734994 Binary files /dev/null and b/release-notes/2017/_img/08_04_36.png differ diff --git a/release-notes/2017/_img/08_28_01.png b/release-notes/2017/_img/08_28_01.png new file mode 100644 index 00000000000..1167c165bd7 Binary files /dev/null and b/release-notes/2017/_img/08_28_01.png differ diff --git a/release-notes/2017/_img/08_28_02.png b/release-notes/2017/_img/08_28_02.png new file mode 100644 index 00000000000..f2deeacba9f Binary files /dev/null and b/release-notes/2017/_img/08_28_02.png differ diff --git a/release-notes/2017/_img/08_28_03.png b/release-notes/2017/_img/08_28_03.png new file mode 100644 index 00000000000..8491165792c Binary files /dev/null and b/release-notes/2017/_img/08_28_03.png differ diff --git a/release-notes/2017/_img/08_28_04.png b/release-notes/2017/_img/08_28_04.png new file mode 100644 index 00000000000..4f0cbf654b6 Binary files /dev/null and b/release-notes/2017/_img/08_28_04.png differ diff --git a/release-notes/2017/_img/08_28_05.png b/release-notes/2017/_img/08_28_05.png new file mode 100644 index 00000000000..f218190267a Binary files /dev/null and b/release-notes/2017/_img/08_28_05.png differ diff --git a/release-notes/2017/_img/08_28_06.png b/release-notes/2017/_img/08_28_06.png new file mode 100644 index 00000000000..e1de72ea98b Binary files /dev/null and b/release-notes/2017/_img/08_28_06.png differ diff --git a/release-notes/2017/_img/08_28_07.png b/release-notes/2017/_img/08_28_07.png new file mode 100644 index 00000000000..261393462ac Binary files /dev/null and b/release-notes/2017/_img/08_28_07.png differ diff --git a/release-notes/2017/_img/08_28_08.png b/release-notes/2017/_img/08_28_08.png new file mode 100644 index 00000000000..087ae9b29c9 Binary files /dev/null and b/release-notes/2017/_img/08_28_08.png differ diff --git a/release-notes/2017/_img/08_28_09.png b/release-notes/2017/_img/08_28_09.png new file mode 100644 index 00000000000..e5cfcc62aa8 Binary files /dev/null and b/release-notes/2017/_img/08_28_09.png differ diff --git a/release-notes/2017/_img/08_28_10.png b/release-notes/2017/_img/08_28_10.png new file mode 100644 index 00000000000..17f972d7654 Binary files /dev/null and b/release-notes/2017/_img/08_28_10.png differ diff --git a/release-notes/2017/_img/08_28_11.png b/release-notes/2017/_img/08_28_11.png new file mode 100644 index 00000000000..0a4a47aba7b Binary files /dev/null and b/release-notes/2017/_img/08_28_11.png differ diff --git a/release-notes/2017/_img/08_28_12.png b/release-notes/2017/_img/08_28_12.png new file mode 100644 index 00000000000..1eb540f3be4 Binary files /dev/null and b/release-notes/2017/_img/08_28_12.png differ diff --git a/release-notes/2017/_img/08_28_13.png b/release-notes/2017/_img/08_28_13.png new file mode 100644 index 00000000000..315d42b72e5 Binary files /dev/null and b/release-notes/2017/_img/08_28_13.png differ diff --git a/release-notes/2017/_img/08_28_14.png b/release-notes/2017/_img/08_28_14.png new file mode 100644 index 00000000000..bc5764cae9c Binary files /dev/null and b/release-notes/2017/_img/08_28_14.png differ diff --git a/release-notes/2017/_img/08_28_15.png b/release-notes/2017/_img/08_28_15.png new file mode 100644 index 00000000000..6ba28c1083b Binary files /dev/null and b/release-notes/2017/_img/08_28_15.png differ diff --git a/release-notes/2017/_img/08_28_16.png b/release-notes/2017/_img/08_28_16.png new file mode 100644 index 00000000000..b3168ea5b50 Binary files /dev/null and b/release-notes/2017/_img/08_28_16.png differ diff --git a/release-notes/2017/_img/08_28_17.png b/release-notes/2017/_img/08_28_17.png new file mode 100644 index 00000000000..30f2421324e Binary files /dev/null and b/release-notes/2017/_img/08_28_17.png differ diff --git a/release-notes/2017/_img/08_28_18.png b/release-notes/2017/_img/08_28_18.png new file mode 100644 index 00000000000..0d7e35bc24c Binary files /dev/null and b/release-notes/2017/_img/08_28_18.png differ diff --git a/release-notes/2017/_img/08_28_19.png b/release-notes/2017/_img/08_28_19.png new file mode 100644 index 00000000000..2636212da55 Binary files /dev/null and b/release-notes/2017/_img/08_28_19.png differ diff --git a/release-notes/2017/_img/08_28_20.png b/release-notes/2017/_img/08_28_20.png new file mode 100644 index 00000000000..b7cf3ccf4f3 Binary files /dev/null and b/release-notes/2017/_img/08_28_20.png differ diff --git a/release-notes/2017/_img/08_28_21.png b/release-notes/2017/_img/08_28_21.png new file mode 100644 index 00000000000..32b8c458b5c Binary files /dev/null and b/release-notes/2017/_img/08_28_21.png differ diff --git a/release-notes/2017/_img/08_28_22.png b/release-notes/2017/_img/08_28_22.png new file mode 100644 index 00000000000..b53a58ee3c3 Binary files /dev/null and b/release-notes/2017/_img/08_28_22.png differ diff --git a/release-notes/2017/_img/08_28_23.png b/release-notes/2017/_img/08_28_23.png new file mode 100644 index 00000000000..9eb2b7834c8 Binary files /dev/null and b/release-notes/2017/_img/08_28_23.png differ diff --git a/release-notes/2017/_img/08_28_24.png b/release-notes/2017/_img/08_28_24.png new file mode 100644 index 00000000000..524ce2eced5 Binary files /dev/null and b/release-notes/2017/_img/08_28_24.png differ diff --git a/release-notes/2017/_img/08_28_25.png b/release-notes/2017/_img/08_28_25.png new file mode 100644 index 00000000000..0bdaf907490 Binary files /dev/null and b/release-notes/2017/_img/08_28_25.png differ diff --git a/release-notes/2017/_img/08_28_26.png b/release-notes/2017/_img/08_28_26.png new file mode 100644 index 00000000000..7c3fb455aa6 Binary files /dev/null and b/release-notes/2017/_img/08_28_26.png differ diff --git a/release-notes/2017/_img/08_28_27.png b/release-notes/2017/_img/08_28_27.png new file mode 100644 index 00000000000..2d3c513036f Binary files /dev/null and b/release-notes/2017/_img/08_28_27.png differ diff --git a/release-notes/2017/_img/08_28_28.png b/release-notes/2017/_img/08_28_28.png new file mode 100644 index 00000000000..90817691fd6 Binary files /dev/null and b/release-notes/2017/_img/08_28_28.png differ diff --git a/release-notes/2017/_img/08_28_29.png b/release-notes/2017/_img/08_28_29.png new file mode 100644 index 00000000000..69a690b0cc6 Binary files /dev/null and b/release-notes/2017/_img/08_28_29.png differ diff --git a/release-notes/2017/_img/08_28_30.png b/release-notes/2017/_img/08_28_30.png new file mode 100644 index 00000000000..3cafc160ddc Binary files /dev/null and b/release-notes/2017/_img/08_28_30.png differ diff --git a/release-notes/2017/_img/NodeVersionSpec-process-variable.png b/release-notes/2017/_img/NodeVersionSpec-process-variable.png new file mode 100644 index 00000000000..8974e62dcbe Binary files /dev/null and b/release-notes/2017/_img/NodeVersionSpec-process-variable.png differ diff --git a/release-notes/2017/_img/build-definition-options-tab-multi-configuration-enabled.png b/release-notes/2017/_img/build-definition-options-tab-multi-configuration-enabled.png new file mode 100644 index 00000000000..46d4e884ca8 Binary files /dev/null and b/release-notes/2017/_img/build-definition-options-tab-multi-configuration-enabled.png differ diff --git a/release-notes/2017/_img/build-definition-options-tab.png b/release-notes/2017/_img/build-definition-options-tab.png new file mode 100644 index 00000000000..ef4658748b1 Binary files /dev/null and b/release-notes/2017/_img/build-definition-options-tab.png differ diff --git a/release-notes/2017/_img/build-definition-tasks-tab.png b/release-notes/2017/_img/build-definition-tasks-tab.png new file mode 100644 index 00000000000..db7cd9e5dd0 Binary files /dev/null and b/release-notes/2017/_img/build-definition-tasks-tab.png differ diff --git a/release-notes/2017/_img/multiple-builds-of-node-js-running-in-parallel.png b/release-notes/2017/_img/multiple-builds-of-node-js-running-in-parallel.png new file mode 100644 index 00000000000..e8e01c29c5e Binary files /dev/null and b/release-notes/2017/_img/multiple-builds-of-node-js-running-in-parallel.png differ diff --git a/release-notes/2017/apr-19-team-services.md b/release-notes/2017/apr-19-team-services.md new file mode 100644 index 00000000000..febefeba25a --- /dev/null +++ b/release-notes/2017/apr-19-team-services.md @@ -0,0 +1,160 @@ +--- +title: Delivery timeline markers, commit graph, and build and release improvements – Apr 19 +description: VSTS release notes for Apr 19 2017 +ms.ContentId: 36adccf7-a9b9-4009-8cc3-7f9bdbb42a56 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#Delivery timeline markers, git graph, and build and release improvements – Apr 19 + +**Note:** The features discussed in this post will be rolling out over the next three weeks. + +This deployment, we introduce the git graph. We’ve also updated many build and release tasks and extensions, as well as made improvements to the Marketplace. + +##Delivery timeline markers +Have you been looking for a way to highlight key dates on your [Delivery Plan](https://blogs.msdn.microsoft.com/visualstudioalm/2017/01/23/new-feature-delivery-plans-for-visual-studio-team-services/)? Now you can with plan markers. Plan markers let you visualize key dates for teams directly on your deliver plan. Markers have an associated color and label. The label shows up when you click the marker dot. + +![delivery timeline](_img/04_19_01.png) + +##Visualize your git repository +Team Services now supports showing a graph while showing commit history for repositories or files. Now you can easily create a mental model of all your branches and commits for your git repositories using git graph. The graph shows all your commits in topological order. + +![git graph](_img/04_19_10.png) + +The key elements of the git graph include: +1. The git graph is right-aligned, so commits associated with the default branch or the selected branch appear on the right while the rest of the graph grows on the left. +2. Merge commits are represented by grey dots connected to their first parent and second parent. +3. Normal commits are represented by blue dots. +4. If the parent commit of a commit is not visible in the view port on the next 50 commits, then we excise the commit connection. Once you click the arrow, the commit is connected to its parent commit. + +![git graph elements](_img/04_19_11.png) + +##Git commit comments use the new discussion control +Like we added for TFVC last sprint, lightweight comments left on git commits has been updated to use the new discussion control. This brings support for Markdown in those comments, and rounds out all of the code-commenting features in the web for both git and TFVC to use the latest experience. + +##Improved package list +As part of moving the updated Package Management web experience to an on-by-default preview, we made a few final tweaks. Most visibly, we’ve added more metadata (source and release views) to the package list and also made the columns resizable. + +![package](_img/04_19_02.png) + +##Build tool installers + +> **Preview feature** +> +> To use this capability you must enable the **Task tool installers** [preview feature](/docs/collaborate/preview-features) for your account. + +Have you been wishing you could install a tool or runtime on the fly (even on a hosted agent) just in time for your CI build? Do you need to validate your app or library against multiple versions of a dependency such as Node.js? Today we're announcing tool installers that enable you to install one or more versions of tools sets on the fly. + +For example, you could set up your build process to run and validate your app for multiple versions of Node.js. First specify a comma-delimited list of versions in a variable that you can modify at queue time. + +![NodeVersionSpec process variable](_img/NodeVersionSpec-process-variable.png) + +Next enable multi-configuration. If you've got enough agents and concurrent pipelines, you can even run the builds in parallel. + +![build definition options tab](_img/build-definition-options-tab.png) + +![build definition options tab multi configuration enabled](_img/build-definition-options-tab-multi-configuration-enabled.png) + +And last, add the Node.js tool installer task. + +![build definition tasks tab](_img/build-definition-tasks-tab.png) + +Save and queue the build, to see your app validated with multiple versions of Node.js. + +![multiple builds of node js running in parallel](_img/multiple-builds-of-node-js-running-in-parallel.png) + +At the moment we've got the Node Tool Installer task. We don't yet have runtime environments like Java, or tools like NuGet or cURL. + +Want to try it? See [Tool installers](/docs/build/concepts/process/tasks#tool-installers). + +##SSH deployment improvements +The __Copy Files Over SSH__ build/release task now supports tildes(~) in the destination path to simplify copying files to a remote user’s home directory.  Also, a new option allows causing the build/release to fail when no files are found to copy. + +The SSH build/release task now supports running scripts with Windows line endings on remote Linux or macOS machines. + +##Deploy to Azure Government Cloud +Customers with Azure subscriptions in Government clouds can now configure [Azure Resource Manager service endpoint](/docs/build/concepts/library/service-endpoints#sep-azure-rm) to target national clouds. + +With this, you can now use Release Management to deploy any application to Azure resources hosted in government clouds, using the same deployment tasks. + +![government cloud](_img/04_19_09.png) + +##Timeout enhancements for the Manual Intervention task +The __Manual Intervention__ task can now be automatically rejected or resumed after it is pending for the specified timeout or 60 days, whichever is earlier. The timeout value can be specified in the control options section of the task.  + +##Release Logs Page Improvements +In this deployment, we have improved the release logs page experience: +* You can directly click the URLs in the log viewer. +* You can search for keywords in the logs. +* You can view large log files without downloading them. + +##Azure App Service task enhancements and templates for Python and PHP applications +New __Azure App Service__ release definition templates have been added for deploying Python (Bottle, Django, Flask) and PHP applications. The new template contains the updated __App Service Deploy__ task.  + +When the Python release definition template is used, the __App Service Deploy__ task gets prepopulated with an inline deployment script which makes pip (dependency manager) install the applications dependencies. The correct web.config gets generated based on the Python framework used. + +When the PHP release definition template is used, the __App Service Deploy__ task gets pre-populated with a deployment script which makes Composer (dependency manager) install the application’s dependencies. + +##Deploy Java to Azure Web Apps +The __Azure App Service Deploy__ build/release task now supports deployment of Java WAR files to an Azure Web App.  When creating a new build definition, you can choose to begin with a new build template: __Java Deploy to Azure Web App.__ This simplifies getting started by building your project with Ant, Gradle, or Maven, and deploying the results to Azure.  An Azure Web App slot can be specified to allow uploading to a staging slot before swapping that deployment with a production slot. + +##Java code coverage enhancements + +The __Publish Code Coverage Results__ build task reports Cobertura or JaCoCo code coverage as part of a build.  It now supports specifying wildcards and minimatch patterns in __Summary File__ and __Report Directory__ fields, allowing the files and directories to be resolved on a per-build basis for paths that change between builds. + +##Maven and SonarQube improvements +The Maven build task now allows specifying a SonarQube project for analysis results in cases where it differs from what is specified in the Maven pom.xml file. + +##Improved Jenkins integration +The __Jenkins Queue Job__ build/release task now supports running Jenkins multibranch pipeline jobs while displaying the Jenkins console output in Team Services.  Pipeline results are published to the Team Services build summary. + +![jenkins](_img/04_19_04.png) + +##Google Play extension enhancements +The [Google Play extension](https://marketplace.visualstudio.com/items?itemName=ms-vsclient.google-play) now supports simultaneously releasing and replacing multiple APK version codes at a time, replacing registered screenshots with a new set to avoid accumulation, and explicitly specifying the locale of a change log. + +##iOS DevOps enhancements +The [Apple App Store extension](https://marketplace.visualstudio.com/items?itemName=ms-vsclient.app-store) now supports two-step verification (two-factor authentication) and releasing builds to external testers. + +![app store](_img/04_19_03.png) + +__Install Apple Certificate (Preview)__ is a new build task that installs a P12 signing certificate on the agent for use by a subsequent Xcode or Xamarin.iOS build. + +__Install Apple Profile (Preview)__ is a new build task for installing provisioning profiles on the agent for use by a subsequent Xcode or Xamarin.iOS build. + +MSBuild, Xamarin.Android, and Xamarin.iOS build tasks now support building with the Visual Studio for Mac tool set. + +##Extension hub for Marketplace Publishers +We are launching a new feature for our publishers in Marketplace to help track and analyze how the extension is performing and take required actions from the new extension hub. To view the extension's hub, visit your [publisher page](https://marketplace.visualstudio.com/manage) and select the extension. + +###Uninstall +Now you will have access to how many users have uninstalled your extension, what are they sharing as feedback, top reasons of uninstall and daily trend of uninstall to take the required actions. You can use search for text and dates to analyze and draw more insights from the detailed feedback. If your extension is paid you can also use Contact feature to reach out to your users for transactional communication. Marketplace will broker the first communication with the user as our privacy policy doesn’t allow direct sharing of customer email address. Refer the [Marketplace Publisher Agreement](http://aka.ms/vsmarketplace-agreement) for guidance on communication with customers. + +![uninstall stats](_img/04_19_07.png) + +###Ratings and Review +This tab will give you the information of the average rating for the selected time period, the average rating by number of reviewers, and the daily trend of average rating. The details section provides all the reviews and your responses in transactional view. You can take actions of **Reply** or **Edit** of a previous response and better manage engagement with your extension users. You can also **Appeal** to void a review from this tab if the issue reported is due to Marketplace or the underlying platform. If the issue is valid, we shall void the rating. + +![ratings report](_img/04_19_08.png) + +###Export to Excel +Uninstall, Rating and Review, and Acquisition data are also available for download in XLS format to aid creating your own custom reports. Acquisition data in the user experience will be available shortly. + +##Contact extension customers +Publishers of paid extensions can now reach out to the customers for transactional communication. This can be done via the contact action in the new Publisher stats reports page. + +![extension customers](_img/04_19_05.png) + +##Request Marketplace feedback to be excluded from ratings +You can now appeal to void a rating from the publishers hub if it the issue reported is due to the Marketplace or the underlying platform. Visit the extension report __Rating and Review__ tab and select the __Appeal__ action and write to the Marketplace admin team for review. If the issue is valid, we will void the rating. + +![marketplace ratings](_img/04_19_06.png) + +We think these features will help improve your workflows while addressing feedback, but we would love to hear what you think. Please don’t hesitate to send a smile or frown through the web portal, or send other comments through the [Team Services Developer Community](https://developercommunity.visualstudio.com/spaces/21/index.html). As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool diff --git a/release-notes/2017/aug-04-team-services.md b/release-notes/2017/aug-04-team-services.md new file mode 100644 index 00000000000..3ecbc9de8fa --- /dev/null +++ b/release-notes/2017/aug-04-team-services.md @@ -0,0 +1,282 @@ +--- +title: Visual Studio Team Services (VSTS) Sprint 121 Update +description: Visual Studio Team Services (VSTS) release notes for Sprint 121 Update on August 4 2017 including Wiki in Public Preview and Ansible Integration +ms.ContentId: 63246e8f-c7a0-4f3a-8c75-a30c30502139 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: alexn +author: alexn +--- + +#Visual Studio Team Services (VSTS) Sprint 121 Update + +In the __Sprint 121 Update__ we’re introducing the native Wiki in Visual Studio Team Services (VSTS) and a number of features to make VSTS better integrated and more consistent across your workflow. Some feature highlights include: +- [Wiki in Public Preview](#wiki-in-public-preview) - Help your team members understand, use, and contribute to your project. +- [Ansible integration for Release](#ansible-extension-on-marketplace) - Execute a playbook on inventory nodes with Ansible. +- [Branch management (stale, re-create, pushes page)](#identify-stale-branches) - Identify stale branches, re-create deleted branches, and view pushes. +- [Pull Request extensibility in Public Preview](#pull-request-status-extensibility-in-public-preview) - Use the new API to extend the Pull Request workflow. +- [Improved exploratory testing traceability](#exploratory-testing-traceability-improvements-for-work-item-links-iterations-and-area-paths) - Improved testing work item defaults and linking +- Filter consistency across [boards](#filtering-on-kanban-board) and [test cases](#filters-for-test-case-work-items-in-test-plans-and-suites-in-test-hub) - Find the work items you care about quickly. + +We will also start asking a few of you for feedback from within VSTS to help us make the product better. Read more about in-product feedback in the [Feedback](#feedback) section below. + + +> [!NOTE] +> The features discussed in this post will be rolling out over the next three weeks. + +##Work +###Copy work item processes +You can now create a copy of an inherited process to use as a starting point for a new process, or to prepare and test process changes. + +![Copy process](_img/08_04_31.png) + +If you make a change to the process that is used by one or more team projects, each of these team projects will see these changes immediately. Often, that is not what you want. Instead, you want to bundle the changes to your process and test your changes before they are rolled out to all team projects. You can do this by following these steps: +1. Create a copy of the process that you want to change. +2. Make your changes to the duplicated process. Since no team project is using this process, these changes are not affecting anyone. +3. To test your changes, create a test project based on this duplicated process if you don't have any yet. If you have already created a test project before, you can change the process of the test project using the __Change team project to use \<process name\>__ option from the context menu. +4. Now it is time to deploy the changes. To do this, you change the process of the team projects which need the new changes. Select the __Change team project to use \<process name\>__ option from the context menu. +5. Optionally, you can disable or delete the original process. + +###Updated order of the last column in the Kanban board +If you added a custom state to your work item type, you might have noticed that the last column on the Kanban board always presented the card that was closed earliest. We’ve found that seeing the card closed most recently is often more helpful. + +The root cause of this behavior is that the last column of the Kanban board is ordered descending on the __Closed Date__ field. In our processes (Scrum, Agile, CMMI), each work item type includes rules to set this field when it is transitioned to the __Closed__ or __Done__ state (depending on the process and work item type). However, if you add a custom state we didn't automatically add rules to set the __Closed Date__ field to support the new state. If you’d move a work item from the __New__ state to the __Closed__ or __Done__ state, the __Closed Date__ would have an empty value. Our query engine puts empty values on top when ordering descending. So on the Kanban board, you would see the cards on top that were closed earliest. + +We first made sure that we are adding the right set of rules to the work items in case you are adding a custom state. You will not see an empty __Closed Date__ anymore when closing a work item. +We will not backfill existing closed work items. To ensure that you will see the most recently closed cards on the top in the Kanban board, we have also updated the ordering logic on the last column of the Kanban board to put cards with empty values for the __Closed Date__ field at the bottom. + +###See the projects using a process +If you want to know the team projects which use your process, you can now navigate to the new page to show all projects that are using your process. + +![Projects using process](_img/08_04_34.png) + +###Filtering on Kanban board +Our Kanban board experiences now makes use of our common filtering component and is consistent with our grid filtering experience for work items. This new filtering control brings improved usability and a consistent interface to all members of your team. + +![Filtering on Kanban](_img/08_04_01.png) + +With the move to the common filtering component here and in other experiences, the search interaction in our command bar has changed its position and now appears with the rest of our filters. To access it simply click the filter icon. Searching for your work items is still one click away and clicking on this icon immediately sets focus on the keyword filter. In the upcoming sprint we will enable a keyword shortcut (Ctrl + F) that will allow members of your team to bring the filter in view by only using their keyboard. Note how the search interaction was previously next to the filter button. + +![Filtering on Kanban before](_img/08_04_35.png) + +##Code +###Wiki in Public Preview +Each project in VSTS now supports its own Wiki. Now you can conveniently write pages that help your team members understand, use, and contribute to your project.  + +![Wiki](_img/08_04_26.png) + +Some of the key features of the new Wiki include: +- Simplified editing experience using [markdown syntax](https://www.visualstudio.com/docs/reference/markdown-guidance). + +![Wiki markdown](_img/08_04_27.png) + +- Powerful page management pane that allows to reorder, re-parent, and manage pages.  +- Ability to filter pages by title for large wikis. + +![Wiki menu](_img/08_04_28.png) + +- [Offline updates](https://www.visualstudio.com/docs/collaborate/add-edit-wiki#clone-your-wiki-repo-and-edit-wiki-pages-offline) of Wiki for power users. + +Learn more about [getting started with Wiki](https://www.visualstudio.com/docs/collaborate/add-edit-wiki#create-your-wiki-and-first-wiki-page).  + +The [Wiki extension](https://marketplace.visualstudio.com/items?itemName=ms-devlabs.wiki) on the Marketplace is now deprecated. If you are an existing Wiki extension user, then you can migrate your wiki pages to the new wiki using an this [migration tool](https://github.com/Microsoft/vsts-wikiTools). Learn more to [migrate your existing wiki pages to the new Wiki](https://www.visualstudio.com/docs/collaborate/migrate-extension-wiki-pages). + +###Improvements in Wiki edit experience +The new Wiki edit experience now supports HTML tags in markdown.  + +![Wiki HTML](_img/08_04_29.png) + +You can also conveniently resize images in the markdown folder. + +![Wiki resize](_img/08_04_30.png) + +###Revert a Wiki revision +As you use Wiki more, there is a chance you’ll save unintended changes. Now you can revert a revision to a Wiki page by going to the revision details and clicking on the __Revert__ button. + +![revert wiki](_img/08_04_12a.png) + +![revert wiki confirm](_img/08_04_12.png) + +###Create a Wiki page from a broken link +During Wiki creation, we’ve observed a pattern that people create a table of contents on a Wiki page that includes non-existent links. Then people would click on these links to create the actual pages. In our earlier experience, we were handling this scenario by giving a warning suggesting that the link was broken, or that the page did not exist. Now, we are handling this as a mainstream scenario for Wiki by allowing you to create pages instead. + +![broken wiki links](_img/08_04_13.png) + +###Setting to turn off web editing for TFVC repos +Teams that use TFVC often use check-in policies in Visual Studio to ensure code quality. However, because check-in policies are enforced on the client, code that is edited on the web isn’t subjected to the same policies. + +Several people have asked for a way to disable web-editing to protect against changes that bypass check-in policies. We’ve enabled a way for you to turn off web-editing (adding, deleting, renaming, and editing) for TFVC on a project/repository basis. + +To disallow web-editing from the **Files** page go to __Settings__, then __Version Control__. Click on the TFVC repo in the tree, navigate to the Options pivot, and uncheck **Enable web-editing for this TFVC repository.** By default, web-editing is enabled. Note: Editing the README from the __Project Overview page__ is unaffected. + +![Web editing setting](_img/08_04_02.png) + +If you attempt a web-edit in a project with web-editing disabled, you will be notified that web-editing is not allowed. + +![Web editing dialog](_img/08_04_03.png) + +This has been developed based on a [related suggestion](https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/9699246-quick-code-editing-switch-or-warning). + +###Identify stale branches +Keeping your repository clean by deleting branches you no longer need enables teams to find branches they care about and set favorites at the right granularity. However, if you have lots of branches in your repo, it can be hard to figure out which are inactive and can be deleted. We’ve now made it easier to identify “stale” branches (branches that point to commits older than 3 months). To see your stale branches, go to the **Stale** pivot on the **Branches** page. + +![Stale branches](_img/08_04_04.png) + +###Search for a deleted branch and re-create it +When a branch is accidentally deleted from the server, it can be difficult to figure out what happened to it. Now you can search for a deleted branch, see who deleted it and when, and re-create it if you wish. + +To search for a deleted branch, enter the full branch name into the branch search box. It will return any existing branches that match that text. You will also see an option to search for an exact match in the list of deleted branches. Click the link to search deleted branches. + +![Search deleted branches](_img/08_04_05.png) + +If a match is found, you will see who deleted it and when. You can also restore the branch. + +![Restore deleted branch](_img/08_04_06.png) + +Restoring the branch will re-create it at the commit to which is last pointed. However, it will not restore policies and permissions. + +###Branch updates page is now Pushes +The **Branch Updates** page has tremendous value. However, it was hidden as a pivot under the **History** hub. Now the branch updates page will be visible as a hub called **Pushes** under **Code**, alongside **Commits**, **Branches**, **Tags**, and **Pull Requests**. The new URL for the pushes page is: https://\<accountname\>/\<projectname\>/_git/\<reponame\>/pushes. The old URLs will continue to function. + +![pushes](_img/08_04_10.png) + +At the same time, the **History** hub is now renamed to **Commits** since the hub only shows commits. We received feedback that people were finding it difficult to troubleshoot commit related issues because the commit list view only showed detailed time on-hover. Now the commit list view across VSTS will show date and time in dd/mm/yy hh:mm format. The new URL for commits page is: https://\<accountname\>/\<projectname\>/_git/\<reponame\>/commits. The old URLs will continue to function. + +![commits](_img/08_04_11.png) + +###Retain filename when moving from Files to Commits +We heard feedback from people that when they filter the directory to a particular file in the **Files** pivot of the **Code** hub and later flip to the **History** pivot, the filename doesn’t persisted if the commit changed more than 1,000 files. This resulted in people having to load more files and filter content to find the file and was impacting productivity. Developers normally work in the same directory and want to persist to the directories they work in as they trace changes. Now, we persist the filename as you move between **Code** hub pivots regardless of the number of files changed in a commit. This means that you do not have to click on **Load More** to find the file you want. + +###Pull Request Status Extensibility in Public Preview +Using branch policies can be a great way to increase the quality of your code. However, those policies have been limited to only the integrations provided natively by VSTS. Using the new PR Status API and the corresponding branch policy, 3rd party services can participate in the PR workflow just like native VSTS features.   + +When a service posts to the Status API for a pull request, it will immediately appear in the __PR details__ view in a new __Status__ section. The status section shows the description and creates a link to the URL provided by the service. Status entries also support an action menu (...) that is extensible for new actions to be added by web extensions.   + +![status section](_img/08_04_07.png) + +Status alone does not block completion of a PR - that’s where the policy comes in. Once PR status has been posted, a policy can then be configured. From the branch policies experience, a new policy is available to **Require approval from external services**. Select **+ Add service** to begin the process. + +![status policy add](_img/08_04_08.png) + +In the dialog, select the service that’s posting the status from the list and select the desired policy options.   + +![status policy dialog](_img/08_04_09.png) + +Once the policy is active, the status will be shown in the __Policies__ section, under __Required__ or __Optional__ as appropriate, and the PR completion will be enforced as appropriate.  + +To learn more about the status API, and to try it out for yourself, check out the [documentation](https://go.microsoft.com/fwlink/?linkid=854107) and [samples](https://go.microsoft.com/fwlink/?linkid=854108). + +##Build +###Let contributed build sections control section visibility +Previously if you were using an extension that had build tasks and build summary sections, you’d see the build summary section even if you weren’t using the build task in that build. Now, you can choose to hide or show that section in the build summary page by adding the following line in your extension code and setting the value to true or false: + +`VSS.getConfiguration().setSectionVisibility("$(publisherId).$(extensionId).$(sectionId)", false);` + +View the sample included in the [Microsoft vsts-extension-samples repository](https://github.com/Microsoft/vsts-extension-samples/blob/master/build-results-enhancer/src/enhancer/status.ts). + +###Variable group support +Variable groups have been available to use in release definitions, and now they are ready to be used in build definitions too. Learn more about [creating a variable group](https://www.visualstudio.com/docs/build/concepts/library/variable-groups). This has been developed and prioritized based on related suggestions for [project-level build/release variables](https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/14515326-project-level-build-release-variables) and [variable groups in build definitions](https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/17646697-make-library-variable-groups-available-for-use-in). + +###dotnet task supports authenticated feeds, web projects +The next major version of the __dotnet__ task (2.x) addresses many of your feedback requests and fixes a set of bugs we’ve tracked for a while. +1. First, __dotnet__ now supports authenticated package sources like Package Management, so you don’t need to use the __NuGet__ task anymore to restore packages from private package sources. +2. The behavior of __Path to project(s)__ field has changed in the 2.0 version of the task. In previous versions of the task, if the project file(s) matching the specified pattern were not found, the task used to log a warning and then succeed. In such scenarios it can sometimes be challenging to understand why the build succeeded but dependencies were not restored. Now the task will fail if the project file(s) matching the specified pattern are not found. This is in line with the behavior of other tasks and is easy to understand and use. +3. In previous versions of the task’s publish command, the task modified the output path by putting all the files in a folder that was named after the project file name, even when you passed an explicit output path. This makes it hard to chain commands together. Now you have control over the output path file. + +We’ve also released a new **dotnet Tool Installer** task that controls the version of dotnet available on the PATH and used by the new dotnet task. So, to use a newer version of __dotnet__, just add a __dotnet Tool Installer__ task at the beginning of your build.  + +##Release +###Ansible Extension on Marketplace  +We have released a new [extension](https://marketplace.visualstudio.com/items?itemName=ms-vscs-rm.vss-services-ansible) that includes a build/release task to integrate with [Ansible](http://docs.ansible.com/ansible/latest/index.html) and execute a given **Playbook** on a specified list of **Inventory** nodes via command line interface. +Ansible uses **[Playbooks](http://docs.ansible.com/ansible/latest/playbooks.html)** which express configurations, deployment, and orchestration steps in YAML format. Each **Playbook** maps a group of hosts to a set of roles. Each role is represented by calls to Ansible tasks. +An **[Inventory](http://docs.ansible.com/ansible/latest/intro_inventory.html)** file is a description of the host nodes that can be accessed by Ansible. + +The task requires that the **Playbook** and **Inventory** files be located either on a private Linux agent or on a remote machine where an Ansible automation engine has been installed. An SSH endpoint needs to be set up if the Ansible is located on a remote machine. **Inventory** can also be specified inline, as **Dynamic Inventory**, or as a **Host** list. + +![Ansible extension](_img/08_04_18.png) + +###Variable groups, Retention, and Options tab now available in the new Release Definition Editor +The new Release Definition Editor continues to move toward feature parity with the old editor. With this deployment, you can now link/unlink to variable groups, set retention policy for individual environments, and modify release definition-level settings such as release number format from the **Options** tab. You can also save an environment as a deployment template, set environment level permissions, and re-order phases within the **Tasks** tab. The ability to filter/compare process variables across environments is just a couple of sprints away. + +![release variables](_img/08_04_14.png) + +Use environment level operations to save as template and set security. + +![environment menu items](_img/08_04_15.png) + +###Release status badge in Code hub +Today, if you want to know whether a commit is deployed to your customer production environment, you first identify which build consumes the commit and then check all the release environments where this build is deployed. Now this experience is much easier with the integration of the deployment status in the **Code** hub status badge to show the list of environments that your code is deployed to. For every deployment, status is posted to the latest commit that was part of the deployment. If a commit is deployed to multiple release definitions (with multiple environments) then each has an entry in the badge, with status shown for each environment. This improves the traceability of code commit to deployments. + +![release status badge](_img/08_04_16.png) + +By default, when you create a release definition, deployment status is posted for all environments. However, you can selectively choose the environments whose deployment status should be displayed in the status badge (e.g. only show production environments). + +![deployment status option](_img/08_04_17.png) + +###Enhancements to Build definition menu when adding artifacts +When adding build artifacts to a release definition, you can now view the definitions with their folder organization information and simplify choosing the desired definition. This makes it easy to differentiate the same build definition name but in different folders. + +![add artifact](_img/08_04_19.png) + +The list of definitions is filtered based on those that contain the filter term. + +###Revert your release definition to older version +Today, if a release definition is updated, you can’t directly revert to a previous version. The only way is to look into the release definition history to find the diff of the changes, and then manually edit the release definition. +Now, using the **Revert Definition** feature, you can choose, and revert back to any older version of a release definition from the release definition **History** tab. + +![revert release definition](_img/08_04_20.png) + +##Test +###Exploratory testing traceability improvements for work item links, iterations, and area paths +Based on the feedback we received from teams doing exploratory testing, we are improving traceability links while filing bugs, tasks, or test cases from the [Test & Feedback extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web). Bugs and tasks created while exploring requirements will now be created with the same area path and iteration as that of the requirement instead of team defaults. Test cases created while exploring requirements will now be linked with a __Tests <-> Tested By__ link instead of the __Parent <-> Child__ link so that the test cases you create are automatically added to requirement based test suites. Finally, work items created while not specifically exploring any requirement will be filed in the team’s default iteration instead of the current iteration so that no new work items come into the current iteration after the sprint planning is complete. + +###Screenshot and annotation support for desktop apps with Chrome browser for manual tests +We are adding support for one of the top suggestions from manual testing - capturing screenshots of desktop applications from the **Web Test Runner** in **Test** hub. Until now, you had to use **Test Runner** in **Microsoft Test Manager** to capture screenshots of desktop apps. You need to install the [Test & Feedback extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web) to use this functionality. We are rolling out support for Chrome browser, and Firefox will follow shortly thereafter.  + +###Filters for Test Case work items in Test Plans and Suites in Test Hub +In addition to the filters on **Test** fields like __Outcome__, __Configuration__, and __Tester__, you can now filter on Test Case work item fields like __Title__, __State__, and __Assigned To__.  + +![test case filters](_img/08_04_21.png) + +###Test trend charts for Release Environments and Test Runs +We are adding support for **Release Environments** in the **Test Result Trend** widget so that you can track status of test environments on VSTS dashboards. Like the way you to do for test results in **Build**, you can now create trend charts showing test pass rate, count of total, passed or failed tests, and test duration for **Release Environments**. You can also filer the charts to a specific test run within an environment with the **Test Run** title filter.  + +![test trend charts](_img/08_04_22.png) + +###Markdown formatting support for Test Run and Test Result comments +We are adding support for formatting **Test Run** and **Test Result** comments with [markdown syntax](https://www.visualstudio.com/docs/reference/markdown-guidance). You can use this feature to create formatted text or quick links to URLs in your comments. You can update **Test Result** comments in the **Result Summary** page with **Update analysis** and **Test Run** comments in the **Run Summary** page with **Update comments** in **Test** hub. + +###Add link to existing bug for a failing test +While analyzing the test result in the **Build** or **Release** summary page, or in the **Test** hub, you can now associate an existing bug to a failed test. This is helpful when a test is failing for a known reason that has a bug already filed. + +##Insights +###Re-order favorite groups +You can now re-order the groups on the account **My favorites** page using the up and down arrows in each group header.  + +![re-order favorite groups](_img/08_04_23.png) + +##Marketplace +###Enable Visual Studio Code direct install option in Marketplace +To install an extension, you had to copy install command and then browse to **Visual Studio Code** and execute it. Now you can directly install the extension from the Marketplace with a single click. For those using **Visual Studio Code** in the enterprise, a VSIX package download option is also available now. Here is an example with the [PowerShell extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell). + +![Visual Studio Code install](_img/08_04_24.png) + +##Feedback +With this release, we will begin asking a small subset of you for feedback on VSTS using the industry standard “how likely are you to recommend” question, followed by an optional explanation. We expect this will give us insight into how you are feeling about VSTS overall on a regular basis so that we can learn quickly from both encouraging and critical feedback. We expect this will be a more accurate and timely approach than the email surveys we’ve relied on thus far to collect this type of feedback. + +As we roll this out, we are extremely mindful to guard against this becoming too annoying or getting in the way of your use of VSTS. We will only prompt the minimum number of people necessary to collect statistically relevant results for each major release. To further minimize interruptions, we’ll only ask people who visit the account and project home pages. Also, if you dismiss or click out of the dialog, we’ll prompt only a couple more times before we stop prompting you. We promise to ask you for feedback only once every 3 months and likely even less frequently, based on overall response rates. We also promise to read all the feedback, look for trends, and share the high-level insights with you from time to time. + +Thank you in advance for participating in this feedback channel as we continue to find ways to learn about you and improve our service to better meet your needs. + +![Feedback dialog](_img/08_04_36.png) + +###Problems, suggestions, or questions +We would love to hear what you think about these features. Report a problem or provide a suggestion if you have ideas on things you’d like to see us prioritize through the new feedback menu. + +![Feedback menu](_img/07_14_00.png) + +You can also get advice and your questions answers by the community on [Stack Overflow](https://stackoverflow.com/questions/tagged/vs-team-services). + +Thanks, + +Anand Kamat \ No newline at end of file diff --git a/release-notes/2017/aug-28-team-services.md b/release-notes/2017/aug-28-team-services.md new file mode 100644 index 00000000000..59fc5d8dcc9 --- /dev/null +++ b/release-notes/2017/aug-28-team-services.md @@ -0,0 +1,324 @@ +--- +title: Customizable work item rules – VSTS Sprint 122 Update +description: Visual Studio Team Services (VSTS) release notes for Sprint 122 Update on August 28 2017 with customizable work item rules, forks, and work items hub. +ms.ContentId: 1d14aa73-d447-4d5e-8ea4-f1890b1d5c29 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: alexn +author: alexn +--- + +# Customizable work item rules – VSTS Sprint 122 Update + +In the __Sprint 122 Update__ of Visual Studio Team Services (VSTS) we’re announcing the general availability of customizable work item rules to automate work item behavior. This is key to leveraging the simplicity of the Inheritance process model. Read more about [Customizable work item rules](#customizable-work-item-rules) below. + +Some of the other key feature highlights include: + +- [Forks](#fork-a-repo) - Enable broader contributions within an account. +- [Work Items hub](#work-items-hub) - Use personalized pivots to find and interact with work items important to you. +- [File minimap](#file-minimap), [Bracket matching](#bracket-matching), and [Toggle white space](#toggle-white-space) - Get a quick overview of the code and edit with ease. +- [CI builds for Bitbucket repos](#ci-builds-for-bitbucket-repositories) - If Bitbucket is your repo platform of choice, we’ve got you covered. +- [New Release Definition Editor](#new-release-definition-editor) - Rich release definition editing preview feature now turned on and generally available. +- [Streamlined user management](#streamlined-user-management) - Preview feature now turned on and generally available. + +> **Note** +> +> The features discussed in this post will be rolling out over the next three weeks. + +## Work + +### Work Items hub + +> **Preview feature** +> +> To use this capability you must have the **New Work Items Hub** [preview feature](https://www.visualstudio.com/docs/collaborate/preview-features) enabled on your profile and/or account. + +The **Work Items** hub allows you to focus on relevant items inside a team project via 5 pivots: + +- Assigned to me - All work items assigned to you in the project in the order they’re last updated. To open or update a work item, click its title. +- Following - All work items you’re following. +- Mentioned - All work items you’ve been mentioned in, for the last 30 days. +- My activity - All work items that you have recently viewed or updated. +- Recently created - All work items recently created in the project. + +<img src="_img/08_28_04.png"; alt="work item hub" style="border:2px solid Silver; display: block; margin: auto;" /> + +Creating a work item from within the hub is just one click away: + +<img src="_img/08_28_05.png"; alt="new item menu" style="border:2px solid Silver; display: block; margin: auto;" /> + +Work items can be filtered by typing a keyword, or using different fields such as work item type, assigned to, state, and tags. These filters are remembered and you can create truly personal views for each pivot. + +<img src="_img/08_28_06.png"; alt="filters" style="border:2px solid Silver; display: block; margin: auto;" /> + +While developing the new **Work Items** hub, we wanted to ensure that you could re-create each one of the pivots via the **Query Editor**. Previously, we supported querying on items that you’re following and that were assigned to you but this sprint we created two new macros: @RecentMentions and @MyRecentActivity. With these, you can now create a query and obtain the work items where you’ve been mentioned in the last 30 days or create a query that returns your latest activity. Here’s a sneak peek of how these macros can be used: + +<img src="_img/08_28_29.png"; alt="filters" style="border:2px solid Silver; display: block; margin: auto;" /> + +See the [documentation for the Work Items hub](https://www.visualstudio.com/docs/work/work-items/view-add-work-items) for more information. + +### Customizable work item rules + +Whether it be automatically setting the value of certain work item fields or defining the behavior of those fields in specific states, project admins can now use rules to automate the behavior of work item fields and ease the burden on their teams. Here are just a few examples of the key scenarios you will be able to configure using rules. + +- When a work item state changes to **Active**, make **Remaining Work** a required field +- When a work item is **Proposed** and the **Original Estimate** is changed, copy the value of **Original Estimate** to the **Remaining Work** field +- When you add a custom state, with its own by/date field types, you can use rules to automatically set those fields’ values on state transitions +- When a work item state changes, set the value of custom by/date fields + +<img src="_img/08_28_01.png"; alt="custom rules" style="border:2px solid Silver; display: block; margin: auto;" /> + +To get started with rules, simply follow these steps: + +<img src="_img/08_28_02.png"; alt="customize menu action" style="border:2px solid Silver; display: block; margin: auto;" /> + +1. Select **Customize** from the work item’s context menu +1. Create or select an existing inherited process +1. Select the work item type you would like to add rules on, click **Rules**, and click **New rule** + +Check out the [documentation for custom rules](https://www.visualstudio.com/docs/work/process/custom-rules) for more information. + +### Mentioned support for the My work items page + +We’ve added a new **Mentioned** pivot under the **My work items** page. Inside this pivot, you can review the work items where you have been mentioned in the last 30 days. With this new view, you can quickly take action on items that require your input and stay up to date on conversations that are relevant to you. + +<img src="_img/08_28_07.png"; alt="mentioned work" style="border:2px solid Silver; display: block; margin: auto;" /> + +This same pivot is also available via our mobile experience, bringing consistency between both mobile and desktop. + +<img src="_img/08_28_30.png"; alt="mentioned work" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Custom Fields and Tags in Notifications + +Notifications can now be defined using conditions on custom fields and tags; not only when they change but when certain values are met. This has been a top customer suggestion in UserVoice (see [6059328](https://visualstudio.uservoice.com/forums/330519-visual-studio-team-services/suggestions/6059328-use-tags-in-alerts) and [2436843](https://visualstudio.uservoice.com/forums/330519-visual-studio-team-services/suggestions/2436843-custom-fields-in-work-item-alerts)), and will allow for a more robust set of notifications that can be set for work items. + +<img src="_img/08_28_03.png"; alt="custom work item notification settings" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Inline add on Delivery Plans + +New feature ideas can arrive at any moment, so we’ve made it easier to add new features directly to your **Delivery Plans**. Simply click the **New item** button available on hover, enter a name, and hit enter. A new feature will be created with the area path and iteration path you’d expect. + +<img src="_img/08_28_26.png"; alt="inline add on delivery plans" style="border:2px solid Silver; display: block; margin: auto;" /> + +## Code + +### Fork a repo + +> **Preview feature** +> +> This capability is enabled through the **Git Forks** [preview feature](https://www.visualstudio.com/docs/collaborate/preview-features) on your account. +> +> With this update you can fork and push changes back **within an account**. This is the 1st step on our journey with forks. The next step will be to enable you to fork a repository into a different VSTS account. + +A fork is a complete, server-side copy of a repository, including all files, commits, and (optionally) branches. Forks are a great way to isolate experimental, risky, or confidential changes from the original codebase. Once you’re ready to share those changes, it’s easy to use pull requests to push the changes back to the original repository. + +Using forks, you can also allow a broad range of people to contribute to your repository without giving them direct commit access. Instead, they commit their work to their own fork of the repository. This gives you the opportunity to review their changes in a pull request before accepting those changes into the central repository. + +<img src="_img/08_28_27.png"; alt="create fork" style="border:2px solid Silver; display: block; margin: auto;" /> + +#### What’s in a fork + +A fork starts with all the contents of its upstream (original) repository. When you create a fork, you can choose whether to include all branches or limit to only the default branch. None of the permissions, policies, or build definitions are applied. The new fork acts as if someone cloned the original repository, then pushed to a new, empty repository. After a fork has been created, new files, folders, and branches are not shared between the repositories unless a PR carries them along. + +#### Sharing code between forks + +You can create PRs in either direction: from fork to upstream, or upstream to fork. The most common direction will be from fork to upstream. The destination repository’s permissions, policies, builds, and work items will apply to the PR. + +Read the [documentation for forks](https://www.visualstudio.com/docs/git/concepts/forks) for more information. + +### File minimap + +You can now view a minimap of a file as you view or edit to give you a quick overview of the code. To turn on the minimap, open the **Command Palette** (F1 or right-click) and select **Toggle Minimap**. + +<img src="_img/08_28_08.png"; alt="file minimap" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Bracket matching + +When editing or viewing a file, there are now guidelines on the left side to make it easy to match your brackets. + +<img src="_img/08_28_09.png"; alt="bracket matching" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Toggle white space + +You can now toggle white space on and off when viewing or editing a file. We are still developing a feature that will allow you to toggle white space when diff’ing. To view white space, open the **Command Palette** (F1 or right-click) and select **Toggle White Space**, which allows you to differentiate between spaces and tabs. + +<img src="_img/08_28_10.png"; alt="toggle white space" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Updated email templates for push notification + +Push notifications have been updated to match the new email templates that are optimized to be clear, concise, and actionable. The subject line helps you clearly distinguish push emails, identify the branch, repo, and author, and summarize the number of commits included in the push. These changes also make it easier to create rules and filters to help manage these email notifications. + +The email body is consistent with other emails, emphasizing why the email was sent, who initiated the action, and exactly what happened. Specific to push alerts, the details about the repo, branch, files, and commits are all included to help inform the recipients about the scope of the changes. The main call to action for push alerts is **View Push**, which will open the pushes view for the specific push that generated the alert. + +<img src="_img/08_28_11.png"; alt="push template" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Complete Work Items settings + +The feature to [complete work items when completing pull requests](https://www.visualstudio.com/articles/news/2017/jul-14-team-services#automatically-complete-work-items-when-completing-pull-requests) now has a new repository setting to control the default behavior. The new setting to **Remember user preferences for completing work items with pull requests** is enabled by default, and will honor the user’s last state when completing future PRs in the repo. If the new setting is disabled, then the **Complete linked work items after merging** option will default to disabled for all PRs in the repository. Users can still choose to transition linked work items when completing PRs, but they will need to opt-in each time. + +### Find lost commits due to a Force Push + +You can perform a git force push and update a remote ref even if it is not an ancestor of the local ref. This may cause others to lose commits and it can be very hard to identify the root cause. In the new pushes view, we have made force pushes noticeable in order to help troubleshoot issues related to missing commits. + +<img src="_img/08_28_12.png"; alt="force push" style="border:2px solid Silver; display: block; margin: auto;" /> + +Clicking on the force push tag takes you to the removed commit. + +<img src="_img/08_28_13.png"; alt="removed commits" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Update default repo permissions for admins + +For new repositories and new projects, administrators will no longer be granted git force push permission by default. This helps prevent unintentional force pushes, such as when you forget to change branches. (**Bypass Policy** already works this way for the same reason). Administrators who need to perform a force push can update their permissions at the branch, repo, or **All Repositories** level to allow force push. + +## Build + +### CI builds for Bitbucket repositories + +It's now possible to run CI builds from connected Bitbucket repositories. To get started, set up a [service endpoint to connect to Bitbucket](/vsts/build-release/concepts/library/service-endpoints). Then in your build definition, on the Tasks tab select the Bitbucket source. + +<img src="_img/08_28_25.png"; alt="get sources bitbucket repo" style="border:2px solid Silver; display: block; margin: auto;" /> + +After that, enable CI on the **Triggers** tab, and you’re good to go. + +This feature works only for builds in VSTS accounts and with cloud-hosted Bitbucket repositories. + +### Pause build definitions + +You can now pause or disable build definitions. If you plan to make changes to your build definition and you want to avoid queuing any new builds until you are done simply disable the build definition. Similarly, if you plan to upgrade agent machines, you can choose to pause a build definition, which enables VSTS to still accept new build requests but hold them in queue without running until you resume the definition. + +### Task input validations support + +Typing the parameters in build definition tasks can sometimes be error prone. With task input validation, task authors can ensure appropriate values are specified. Validation expressions follow the familiar expression syntax used for task conditions and can use any of the supported functions besides the general functions supported by task conditions, including URL, IPV4, email, number range, sha1, length, or match. + +Read more about the goals and usage on the [vsts-tasks repo page](https://github.com/Microsoft/vsts-tasks/blob/master/docs/taskinputvalidation.md). + +## Release + +### New Release Definition Editor + +> **Preview feature** +> +> This capability is enabled through the **New Release Definition Editor** [preview feature](https://www.visualstudio.com/docs/collaborate/preview-features) on your profile and/or account. + +Earlier last month we announced a [preview of the new release definition editor](https://www.visualstudio.com/articles/news/2017/jul-14-team-services#new-release-definition-editor-preview). Thank you to all who have been using it and giving us feedback! With this release, we have turned on the [new release definition editor](https://www.visualstudio.com/docs/build/preview/release-definition-editor) for everyone by default. An administrator can disable it from the [Preview features option](https://www.visualstudio.com/docs/collaborate/preview-features) in their account profile menu. + +### Enhancements in new Release Definition editor + +#### Delete custom templates + +You can now delete custom templates in the new release definition editor. + +<img src="_img/08_28_14.png"; alt="delete custom templates" style="border:2px solid Silver; display: block; margin: auto;" /> + +#### Visually handle permissions on the editor + +The new release definition editor now has specific in context messages to handle the various [permissions](https://www.visualstudio.com/docs/build/concepts/policies/permissions#release-permissions). + +#### Drag and drop tasks across phases + +Using the drag/drop gesture, you can easily reorder phases or tasks within or across similar phases. Additionally you can also clone tasks using Ctrl+drag/drop. + +### Release Template Extensibility + +Release templates let you create a baseline for you to get started when defining a release process. Previously, you could upload new ones to your account, but now authors can include release templates in their extensions. You can find an [example on the GitHub repo](https://github.com/Microsoft/vsts-rm-extensions/tree/master/Extensions/EnvironmentTemplateSample). + +### Conditional release tasks and phases + +Similar to [conditional build tasks](https://www.visualstudio.com/docs/build/concepts/process/conditions), you can now run a task or phase only if specific conditions are met. This will help you in modeling rollback scenarios. + +If the built-in conditions don’t meet your needs, or if you need more fine-grained control over when the task or phase runs, you can specify custom conditions. Express the condition as a nested set of functions. The agent evaluates the innermost function and works its way outwards. The final result is a boolean value that determines if the task to be run. + +<img src="_img/08_28_16.png"; alt="conditional release phases" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Approve multiple environments + +Managing approvals with releases is now simpler. For pipelines having the same approver for multiple environments that deploy in parallel, the approver currently need to act on each of the approvals separately. With this feature, you can now complete multiple pending approvals at the same time. + +<img src="_img/08_28_22.png"; alt="approve multiple environments" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Requests history for service endpoints + +Service endpoints enable connection to external and remote services to execute tasks for a build or deployment. The endpoints are configured in project scope and shared between multiple build and release definitions. Service endpoint owners can now get a consolidated view of builds and deployments using an endpoint, which can help to improve auditing and governance. + +<img src="_img/08_28_23.png"; alt="approve multiple environments" style="border:2px solid Silver; display: block; margin: auto;" /> + +## Test + +### Upload attachments to test runs and test results + +You can now attach files such as screenshots and log files to test runs or test results as additional information. Up to this point, this capabilitity was only available through the Microsoft Test Manager (MTM) client, forcing you to switch context between the **Test** hub in VSTS/TFS and the MTM client. + +### Test batching + +In the Visual Studio test task in Build/Release management, options are available to control how tests should be grouped (batched) for efficient execution. Tests can be grouped in two ways: + +1. Based on the number of tests and agents participating in the run, which simply groups tests into a number of batches of a specified size. +1. Based on past running time of tests, which considers past running time to create batches of tests such that each batch has approximately equal running time. Quick running tests get batched together while longer running tests may belong to a separate batch. This option can be combined with the multi-agent phase setting to reduce the total test time to a minimum. + +<img src="_img/08_28_28.png"; alt="approve multiple environments" style="border:2px solid Silver; display: block; margin: auto;" /> + +### JMeter 3.2 for load testing + +Cloud load testing agents are now able to run the JMeter 3.2 engine. Load tests can now leverage the improved HTTP Sampler. + +## Users and authentication + +### Streamlined user management + +> **Preview feature** +> +> This capability is enabled through the **Streamlined User Management** [preview feature](https://www.visualstudio.com/docs/collaborate/preview-features) on your profile and/or account. + +Effective user management helps administrators ensure they are paying for the right resources and enabling the right access in their projects. We’ve repeatedly heard in support calls, and from our customers that they want capabilities to simplify this process in VSTS. This sprint, we are releasing an experience to general availability, which begins to address these issues. See the [documentation for the User hub](https://www.visualstudio.com/docs/setup-admin/team-services/manage-users-and-access-user-hub-team-services) for more information. Here are some of the changes that you’ll see light up: + +#### Invite people to the account in one easy step + +Administrators can now add users to an account, with the proper extensions, access level, and group memberships at the same time, enabling their users to hit the ground running. You can also invite up to 50 users at once through the new invitation experience. + +<img src="_img/08_28_17.png"; alt="new account invitation" style="border:2px solid Silver; display: block; margin: auto;" /> + +#### More information when managing users + +The **Manage users** page now shows you more information to help you understand users in your account at a glance. The table of users includes a new column called **Extensions** that lists the extensions each user has access to. + +<img src="_img/08_28_18.png"; alt="new user page" style="border:2px solid Silver; display: block; margin: auto;" /> + +#### Detailed view of individual users + +Additionally, you can view and change the access level, extensions, and group memberships that a specific user has access to through the context menu provided for each selected user – a one-stop shop to understand and adjust everything a user has access to. + +<img src="_img/08_28_19.png"; alt="new detailed user view" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Adding User to Projects and Teams + +We want to make sure each of your administrators has the tools they need to easily get your team up and running. As part of this effort, we are releasing an improved project invitation dialog. This new dialog enables your project administrators to easily add users to the teams which they should be a member of. If you are a project or team administrator, you can access this dialog by clicking the **Add** button on your project home page or the **Team Members** widget. + +<img src="_img/08_28_20.png"; alt="project invite" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Graph REST APIs in Public Preview + +The **Graph REST API** resources allow developers to write applications that manage users, groups and group memberships in VSTS. The API set covers key user management scenarios including adding an MSA or AAD user to VSTS, creating a VSTS group, and adding/removing members from a VSTS group. Learn more about the API in our [documentation and samples](https://www.visualstudio.com/docs/integrate/api/graph/overview). + +### Profile Card + +We want to promote better connections between users within VSTS. As a part of this effort, we’re updating the user profile card, which allows you to interact with, and learn more about others within your VSTS account. Through integration with your default email and IM client, you can send emails and start chats directly from the profile card. Profile cards can be activated within work items, pull requests, and security settings by clicking on the contact card icon, profile picture, or a user’s name within comments. + +Azure Active Directory (AAD) users will be able to see a users **Reports to** hierarchy as well as direct reports. + +<img src="_img/08_28_21.png"; alt="profile card" style="border:2px solid Silver; display: block; margin: auto;" /> + +### Improved authentication documentation and samples + +In the past, our REST documentation has been focused solely on using PATs for access to our REST APIs. We’ve updated our documentation for extensions and integrations to give guidance on how best to authenticate given your application scenario. Whether you’re developing a native client application, interactive web app, or simply calling an API via Powershell, we have clear sample on how best to authenticate with VSTS. For more information see the [documentation](https://www.visualstudio.com/docs/integrate/get-started/authentication/authentication_guidance). + +## Feedback + +We would love to hear what you think about these features. Report a problem or provide a suggestion if you have ideas on things you’d like to see us prioritize through the new feedback menu. + +<img src="_img/07_14_00.png"; alt="Feedback menu" style="border:1px solid Silver; display: block; margin: auto;" /> + +You can also get advice and your questions answers by the community on [Stack Overflow](https://stackoverflow.com/questions/tagged/vs-team-services). + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2017/feb-15-team-services.md b/release-notes/2017/feb-15-team-services.md new file mode 100644 index 00000000000..295244062e7 --- /dev/null +++ b/release-notes/2017/feb-15-team-services.md @@ -0,0 +1,140 @@ +--- +title: PR usability improvements & richer Github build integration – Feb 15 +description: VSTS release notes for Feb 15 2017 +ms.ContentId: 9b76c2f3-39ce-4c98-9cef-237853ee0349 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#PR usability improvements & richer Github build integration – Feb 15 + +**Note:** The improvements discussed in this post are features that will be rolling out over the next three weeks. + +We have a few feature improvements this sprint. Let’s get right into it... + +##Improved support for team PR notifications +Working with pull requests that are assigned to teams is getting a lot easier. When a PR is created or updated, email alerts will now be sent to all members of all teams that are assigned to the PR. + +This feature is in preview and requires an account admin to enable it from the __Preview features__ panel (available under the profile menu). + +![preview panel](_img/02_15_08.png) + +After selecting __for this account__, switch on the __Team expansion for notifications__ feature. + +![team notification preview](_img/02_15_09.png) + +In a future release, we’ll be adding support for PRs assigned to Azure Active Directory (AAD) groups and teams containing AAD groups. + +##Improved CTAs for PR author and reviewers +For teams using branch policies, it can sometimes be hard to know exactly what action is required when you view a pull request. If the main call to action is the __Complete__ button, does that mean it’s ready to complete? Using information about the person viewing the page and the state of configured branch policies, the PR view will now present the call to action that makes the most sense for that user. + +When policies are configured, but aren’t yet passing, the __Complete__ button will now encourage the use of the __Auto-complete__ feature. It’s not likely that you’ll be able to complete the PR successfully if policies are blocking, so we offer an option that will complete the PR when those policies eventually pass. + +![cta in pr](_img/02_15_11.png) + +For reviewers, it’s more likely that you’ll want to approve a PR than complete it, so reviewers will see the __Approve__ button highlighted as the main CTA if you haven’t approved yet. + +![cta approve](_img/02_15_12.png) + +Once approved, reviewers will see the __Complete__ (or __Auto-complete__) button highlighted as the CTA for those cases where a reviewer is also the person completing the PR. + +##Actionable comments +In a PR with more than a few comments, it can be hard to keep track of all of the conversations. To help users better manage comments, we’ve simplified the process of resolving items that have been addressed with a number of enhancements: +  +* In the header for every PR, you’ll now see a count of the comments that have been resolved. + +![pr header](_img/02_15_13.png) + +* When a comment has been addressed, you can resolve it with a single click.  + +![resolve button](_img/02_15_15.png) + +* If you have comments to add while you’re resolving, you can reply and resolve in a single gesture. + +![reply and resolve](_img/02_15_16.png) + +* As comments are resolved, you’ll see the count go up until everything has been addressed. + +![pr header](_img/02_15_17.png) + +* The filter in the Overview has been improved to enable filtering by various comment states and to show the count of comments for each filter option. + +![pr filter](_img/02_15_14.png) + +##Updates view shows rebase and force push +In the __Pull Request details__ view, the __Updates__ tab has been improved to show when a force push has occurred and if the base commit has changed. These two features are really useful if you rebase changes in your topic branches before completing your PRs. Reviewers will now have enough info to know exactly what’s happened. + +![updates views](_img/02_15_10.png) + +##Improved commit filtering +You can now filter the commit history results by [advanced filtering options](https://www.git-scm.com/docs/git-log). You can filter commits by: +* full history +* full history with simplified merges +* first parent +* simple history (This is the default filter setting) + +![filtering](_img/02_15_01.png) + +##Maintenance for working directories +You can now configure agent pools to periodically clean up stale working directories and repositories. This should reduce the potential for the agents to run out of disk space. The maintenance is done per agent, not per machine; so if you have multiple agents on a single machine, you may still run into disk space issues. + +![agent maintenance](_img/02_15_03.png) + +##Agent selection improvement +The agent selection now takes machine activity into account when allocating an agent for a build or release. This will cause a build or release to be sent to an agent on an idle machine before selecting agents on a machine with other agents that are currently busy. + +##Run tests using Agent Phases +Using the __Visual Studio Test task__, you can now run automated tests using agent phases. + +We now have a unified automation agent across build, release and test. This brings in the following benefits: +1. You can leverage an agent pool for your testing needs. +2. Run tests in different modes using the same __Visual Studio Test task__, based on your needs—single agent–based run, multi-agent–based distributed test run or a multi-configuration run to run tests on, say, different browsers. + +![agent phases](_img/02_15_18.png) + +For more information, refer to the [this post](https://aka.ms/testingwithphases). + +##Multiple versions of Extension tasks +Extension authors can now create extensions with multiple versions of a given task, which enables them to ship patches for each major version they have in production. + +See [Reference for creating custom build tasks within extensions](https://www.visualstudio.com/en-us/docs/integrate/extensions/develop/build-task-schema). + +##Extension management permissions and new email notifications +Any user or group can be given permission to manage extensions for the account. Previously, only account administrators could review extension requests or install, disable, or uninstall extensions. To grant this permission, an administrator can navigate to the __Extensions__ admin hub by opening the __Marketplace__ menu, selecting __Manage extensions__, and then click the __Security button__. + +![extension permissions](_img/02_15_02.png) + +Also new this sprint, a user who requests an extension is now notified via email when that request is approved or rejected. + +##Updated Package Management experience +We’ve updated the Package Management user experience to make it faster, address common user-reported issues, and make room for upcoming package lifecycle features. [Learn more about the update here](https://www.visualstudio.com/en-us/docs/package/preview/updated-experience), or turn it on using the toggle in the __Packages__ hub. + +![package management](_img/02_15_19.png) + +##Support for AAD conditional access +Team Services can now be explicitly selected as the target for Azure Active Directory (AAD) conditional access policy. This lets enterprises control where and how their users can access VSTS. Visit the [Microsoft Azure documentation site](https://docs.microsoft.com/en-us/azure/active-directory/active-directory-conditional-access) to learn more about conditional access policy (CAP). + +NOTE: CAP is enforced when a user signs into VSTS with their AAD credentials. Therefore, subsequent accesses to VSTS via mechanisms including personal access tokens, alternate authentication, OAuth and SSH keys do not fall under conditional access policy. + +![aad conditional access](_img/02_15_05.png) + +##Pipelines queue +We have now moved all the Team Services accounts from the agent-based pricing model to [pipeline-based pricing model](https://www.visualstudio.com/docs/build/concepts/licensing/concurrent-pipelines-ts). In this new model, users can run as many builds or releases concurrently as the number of pipelines configured in their account. Additional builds and releases beyond this limit are queued and wait for earlier builds and releases to complete. The __Pipelines queue__ feature provides users with more visibility into where their builds or releases are. + +![resource limits](_img/02_15_06.png) + +On launching the __Pipelines queue__, you can see the following information: +1. Builds and releases waiting for a pipeline to execute and their position in the waiting queue. +2. Builds and releases currently running using available pipelines. + +![release in progress](_img/02_15_07.png) + +While your build/release is waiting for a pipeline, you can also directly launch this view from inside the build/release logs page and find its current position in the pipeline queue and other details. + +We think these features will help improve your workflows while addressing feedback, but we would love to hear what you think. Please don’t hesitate to send a smile or frown through the web portal, or send other comments through the [Team Services Developer Community] (https://developercommunity.visualstudio.com/spaces/21/index.html). As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool diff --git a/release-notes/2017/jan-05-team-services.md b/release-notes/2017/jan-05-team-services.md new file mode 100644 index 00000000000..2ed3129ecc8 --- /dev/null +++ b/release-notes/2017/jan-05-team-services.md @@ -0,0 +1,236 @@ +--- +title: Getting personal – Jan 5 +description: VSTS release notes for Jan 5 2017 +ms.ContentId: 9b76c2f3-39ce-4c98-9cef-237853ee0349 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#Getting personal – Jan 5 + +**Note:** The improvements discussed in this post will be rolling out throughout the next week. + +Happy new year! You may have noticed we skipped our last deployment due to the holidays, so this deployment comes with two sprints of goodies. One of the key themes across the team is to bring more social and personal experiences into the product. You’re going to see a steady stream of those new experiences throughout the year. We’re starting the year with the first collection of these. + +##Try out new features we are working on +Your feedback is super important to us, and getting this feedback while we are still developing a feature helps ensure we create something that you and our other customers will love. At the same time, we know new features can be disruptive. Therefore, starting with this release, select features we are working on will be made available for you to opt in and try early. Opt in when you are ready and opt out at anytime. + +To see the features available for you to try, go to __Preview features__ in the profile menu. + +![preview menu](_img/01_05_32.png) + +Switch the toggle to opt in or out of a feature. + +![preview toggle](_img/01_05_34.png) + +Note that some features are only available to account administrators to turn on or off for all users in the account. + +##Your Team Services is even more personalized +With this release, it is super easy for you to access artifacts that are most important for you. The redesigned account page has a personalized experience that shows the Projects, Favorites, Work, and Pull Requests you care about. This makes it a great way to start your day. You can go to one place and quickly find everything you need to do and care about. + +###Projects +The __Projects__ page is the one stop for you to access your recently visited projects and teams. You can also browse or look up all projects and teams within your account and then quickly navigate to the relevant hub for that project. + +![project homepage](_img/01_05_24.png) + +###My Favorites +The __Favorites__ page allows you to view all your favorite artifacts in one place. So the next time you visit a project, team, repo, branch, build definition, or query of your interest, simply favorite it so that you can quickly navigate to it from the favorites page. + +![homepage favorites](_img/01_05_25.png) + +###My Work +Start your day at the __My work items__ page to access easily all the work items assigned to you across all projects. It also lets you check and access the status of all the work items that you are following or those that you recently viewed. + +![homepage mywork](_img/01_05_26.png) + +###My Pull Requests +If you work on a lot of repos across multiple projects, it’s a pain to get to the pull requests that you created or those that require your review. Not anymore! The __My Pull Requests__ page shows all pull requests that require your attention in one place. + +![homepage pull requests](_img/01_05_27.png) + +###How do I get there? +You can easily navigate to your personalized account page in Team Services by clicking the Visual Studio logo on the top left of the navigation bar. You can also hover over the logo and directly navigate to your recent project or one of the account home page pivots. We’ve also promoted Dashboards up as a top-level menu item. + +![homepage navigation](_img/01_05_28.png) + +###How to opt in +Like most major changes to the user experience, we are phasing this change in gradually to minimize the disruption of the change. To try out the feature, hover over your avatar image then click __Preview features__. Set the toggle for __New Account Landing Page__ to __On__. If you want to revert to the current experience, click on the avatar image, click __Preview features__, then toggle __New Account Landing Page__ to __Off__ . In a future sprint we will switch this to on by default and then remove the ability to revert to the old experience. + +![homepage opt in](_img/01_05_32.png) + +##Your project gets an identity +There’s now one place to get an overview of your project. The new project page makes it easy to view and edit the project description, view and add members, and check up on the latest activity. It’s even easier to get started with a new project and leverage all the built-in DevOps functionality of Team Services. + +###Improved getting started experience +The new project page guides you to get started quickly by adding code to your repository when you choose one of the options to clone, push, import, or simply initialize a repo. You can easily get started by adding members, setting up builds, or adding work from this page. + +![homepage project](_img/01_05_29.png) + +###Talk about your project +Create an identity and describe the vision and objectives of your project. The new project home page pulls data from the various hubs to give visitors a bird’s-eye view of your project activity. + +![project overview](_img/01_05_30.png) + +##Attachments in PR discussions +You can now add attachments to your pull request comments. Attachments can be added by drag-and-drop or by browsing. For images, attachments can be added by simply pasting from the clipboard. Adding an attachment automatically updates the comment to include a Markdown reference to the new attachment. + +![PR attachments](_img/01_05_02.png) + +##Support file exclusions in the required reviewer policy +When specifying required reviewers for specific file paths, you can now exclude paths by using a “!” prefix to the path you want to exclude. For example, you can use this to exclude a docs folder from your normally required signoff. + +![file exclusions](_img/01_05_01.png) + +##Highlight the PRs that have updates +It’s now easier than ever to see the updates to your pull requests. In the PR list view, PRs with changes since you've last seen them are shown with a new updates column that shows a roll-up of the changes. + +![PR updated files](_img/01_05_03.png) + +When you view a PR that has changes, you’ll see a similar summary message in the overview, where new pushes and comment threads are highlighted in blue. Clicking the __View code updates__ link will navigate to the __Files__ view, where a diff of the new changes since you last viewed the pull request is shown. This feature makes it easy to follow up on a PR where the author made changes in response to feedback. + +![PR summary](_img/01_05_04.png) + +##Branch policy for PR merge strategy +We’ve added a new branch policy that lets you define a strategy for merging pull requests for each branch. Previously, the decision to either merge or squash was chosen by each user at the time a PR was completed. If enabled, this policy will override the user’s preferences, enforcing the requirement set by the policy. + +![branch policy](_img/01_05_05.png) + +##Expose merge conflict information +If there are any files with conflicts in a pull request, the details about those conflicts will now be visible in the overview. Each conflicting file will be listed along with a short summary of the type of conflict between the source and target branches. + +![merge conflicts](_img/01_05_06.png) + +##Team Room deprecation +With so many good solutions available that integrate well with TFS and Team Services, such as [Slack](https://slack.com/) and [Microsoft Teams](https://products.office.com/en-US/microsoft-teams/group-chat-software), we have made a decision to deprecate our Team Room feature from both TFS and Team Services. If you are working in Team Services, you will see a new yellow banner appear that communicates our plan. Later this year, we plan to turn off the Team Room feature completely. + +There are several alternatives you can use. The Team room is used both for a notification hub as well as for chat. TFS and Team Services already integrate with many other collaboration products including [Microsoft Teams](https://products.office.com/en-US/microsoft-teams/group-chat-software), [Slack](https://slack.com/), [HipChat](https://www.hipchat.com/), [Campfire](https://campfirenow.com/) and [Flowdock](https://www.flowdock.com/). You can also use [Zapier](https://zapier.com/) to create your own integrations, or get very granular control over the notifications that show up. + +More information is available in this [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2017/01/04/deprecation-of-the-team-rooms-in-team-services-and-tfs/). + +##New notification settings experience +Notifications help you and your teams stay informed about activity in your Team Services projects. With this update, it’s now easier to manage what notifications you and your teams receive. + +Users now have their own account-level experience for managing notification settings (available via the profile menu). + +![notification settings](_img/01_05_19.png) + +This view lets users manage personal subscriptions they have created. It also shows subscriptions created by team administrators for all projects in the account. + +![notification profile](_img/01_05_20.png) + +Learn more about [managing personal notification settings](https://aka.ms/vstsmanagenotifications). + +##New delivery options for team subscriptions +Team administrators can manage subscriptions shared by all members of the team in the __Notifications__ hub under team settings. Two new delivery options are now available when configuring a team subscription: send the email notification to a specific email address (like the team’s distribution list), or send the notification to only team members associated with the activity. + +![notification delivery](_img/01_05_21.png) + +Learn more about [managing team subscriptions](https://aka.ms/vststeamnotifications). + +##Out of the box notifications (preview) +Prior to this feature, users would need to manually opt in to any notifications they wanted to receive. With out-of-the-box notifications (which currently must be enabled by an account administrator), users automatically receive notifications for events such as: + +* The user is assigned a work item +* The user is added or removed as a reviewer to a pull request +* The user has a pull request that is updated +* The user has a build that completes + +These subscriptions appear in the new user notifications experience, and users can easily choose to opt out of any of them. + +![notifications oob](_img/01_05_35.png) + +To enable this feature for the account, an account administrator needs to go to __Preview features__ under the profile menu, select __From this account__ from the drop-down, then toggle on the __Out of the box notifications__ feature. + +![notifications oob opt in](_img/01_05_33.png) + +Learn more about [out of the box subscriptions](https://aka.ms/vstsoobnotifications). + +##New hosted build image +We have deployed a new hosted build image with the following updates: +* .NET Core 1.1 +* Android SDK v25 +* Azure CLI 0.10.7 +* Azure PS 3.1.0 +* Azure SDK 2.9.6 +* Cmake 3.7.1 +* Git for Windows 2.10.2 +* Git LFS 1.5.2 +* Node 6.9.1 +* Service Fabric SDK 2.3.311 +* Service Fabric 5.3.311 +* Typescript 2.0.6 for Visual Studio 2015 +* Permissions changes to allow building of .NET 3.5 ASP.NET Web Forms projects + +##Firefox support for Test & Feedback extension +We are happy to announce the General Availability of the Test & Feedback extension for Firefox. You can download the Firefox add-on from our [marketplace](https://marketplace.visualstudio.com/items?itemName=ms.vss-exploratorytesting-web) site. + +__Note:__ Support for Edge browser is also in the works; stay tuned for more updates + +##Favorites for Test Plans +You can now favorite the Test Plans you work with most frequently. In the __Test Plans__ picker, you will see tabs for __All__ your Test Plans and __Favorites__. Click the star icon to add a Test Plan to your list of favorites. The favorited Test Plans are accessible in the Test Plans picker and from the __Favorites__ tab in the new account home page. You can also filter Test Plans by searching on the title field. + +![test plans](_img/01_05_09.png) + +![test favorites](_img/01_05_10.png) + +##Test Impact Analysis for managed automated tests +Test Impact Analysis for managed automated tests is now available via a checkbox in the __2.* preview__ version of the VSTest task. + +![test impact](_img/01_05_36.png) + +If enabled, only the relevant set of managed automated tests that need to be run to validate a given code change will run. Test Impact Analysis requires the latest version of Visual Studio, and is presently supported in CI for managed automated tests. + +##SonarQube MSBuild tasks +SonarQube MSBuild tasks are now available from an extension provided by SonarSource. For more details, please read [SonarSource have announced their own SonarQube Team Services / TFS integration](https://blogs.msdn.microsoft.com/visualstudioalm/2016/12/13/sonarsource-have-announced-their-own-sonarqube-team-services-tfs-integration/). + +##Improved experience for Code Search results +There have been improvements to the Code Search results pane: + +* The filename is more prominent and clickable +* We've added contextual actions: + * Browse file + * Download + * Copy path + * Get link to file + +![code search](_img/01_05_15.png) + +##Release Management parallel execution +Release Management now supports a parallel execution option for a phase. Select this option to fan out a phase by using either __Multi-configuration__ or __Multi-agent__ as a phase multiplier option. + +![parallel execution](_img/01_05_12.png) + +* __Multi-configuration__: Select this option to run the phase for each multi-configuration value. For example, if you wanted to deploy to two different geos at the same time, using a variable __ReleasePlatform__ defined on the Variables tab with values "east-US, west-US" would run the phase in parallel, one with a value of "east-US" and the other "west-US”. +* __Multi-agent__: Select this option to run the phase with one or more tasks on multiple agents in parallel. + +##Inline service endpoints +You can now create an endpoint within a build or release definition without having to switch to the __Services__ tab. To do so, click the __Add__ link next to the endpoint field. + +![endpoints](_img/01_05_11.png) + +##Multiple release triggers with branch and tag filters +Release management now supports setting up CD triggers on multiple Build artifact sources. When added, a new release is created automatically when a new artifact version is available for any of the specified artifact sources. + +You can also specify the source branch for the new build to trigger a release. Additionally, tag filters can be set to further filter the builds that should trigger a release. + +![triggers](_img/01_05_16.png) + +##Set defaults for artifact sources in RM +Users can define the default artifact version to deploy in a release when linking an artifact source in a definition. When a release is created automatically, the default version for all the artifact sources will be deployed. + +![default artifact](_img/01_05_17.png) + +##Variable groups support in RM +Variable groups are used to group your variables and their values that you want to make available across multiple release definitions. You can also manage security for variable groups and chose who can view, edit and consume the variables from the variable groups in your release definitions. + +Open __Library__ tab in __Build & Release__ hub and choose __+ Variable group__ in the toolbar. Find more information about variable groups under [Release definitions in Microsoft Release Management](https://www.visualstudio.com/en-us/docs/release/author-release-definition/more-release-definition#var-groups) in the Visual Studio documentation. + +![default artifact](_img/01_05_18.png) + +As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2017/jan-25-team-services.md b/release-notes/2017/jan-25-team-services.md new file mode 100644 index 00000000000..fd55ba0e7f7 --- /dev/null +++ b/release-notes/2017/jan-25-team-services.md @@ -0,0 +1,170 @@ +--- +title: Delivery Plans and mobile work item form – Jan 25 +description: VSTS release notes for Jan 25 2017 +ms.ContentId: 9b76c2f3-39ce-4c98-9cef-237853ee0349 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#Delivery Plans and mobile work item form – Jan 25 + +**Note:** The improvements discussed in this post will be rolling out throughout the next week. + +We have some big new features to introduce this sprint! Let’s get right into it... + +##Delivery plans +We are excited to announce the preview of Delivery Plans! Delivery Plans help you drive alignment across teams by overlaying several backlogs onto your delivery schedule (iterations). Tailor plans to include the backlogs, teams, and work items you want to view. 100% interactive plans allow you to make adjustments as you go. Head over to the marketplace to install the new [Delivery Plans extension](https://marketplace.visualstudio.com/items?itemName=ms.vss-plans). + +![delivery plans](_img/01_25_15.png) + +For more information, see our [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2017/01/23/new-feature-delivery-plans-for-visual-studio-team-services/). + +##Mobile work item form preview +We’re releasing a preview of our mobile-friendly work item form for Visual Studio Team Services! This mobile work item form brings an optimized look and feel that’s both modern and useful. + +![mobile form](_img/01_25_01.png) + +You can access the mobile form on your mobile device via the link contained within your @mentions and follows emails, or by accessing work items from within the new account pages. Along with the good looks, this preview already supports optimized controls like the state picker, area and iteration selectors, multi-line text fields, tag creation/removal, history, and more. + +![mobile form state](_img/01_25_02.png) + +In future sprints, we will be working to make discussions mobile-friendly, so stay tuned. If you want to provide some feedback, please use the __Send Feedback__ experience in the banner at the top of the form. We look forward to hearing from you! + +![mobile form feedback](_img/01_25_03.png) + +See our [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2017/01/24/the-mobile-work-item-form/) for more information. + +##Build editor preview + +This month we’re offering a preview of a new design aimed at making it easier for you to create and edit build definitions. Click the switch to give it a try. + +![build editor switch](_img/01_25_build-editor-new-build-editor-switch.png) + +If you change your mind, you can toggle it off. However, eventually after we feel it’s ready for prime time, the preview editor will replace the current editor. So please give it a try and [give us feedback](https://visualstudio.uservoice.com/forums/330519-team-services). + +The new editor has all the capabilities of the old editor along with several new capabilities and enhancements to existing features: + +**Search for a template** + +Search for the template you want and then apply it, or start with an empty process. + +![build editor new build definition](_img/01_25_build-editor-new-build-definition.png) + +**Quickly find and add a task right where you want it** + +Search for the task you want to use, and then after you’ve found it, you can add it after the currently selected task on the left side, or drag and drop it where you want it to go. + +![build editor add task](_img/01_25_build-editor-add-task.png) + +You can also drag and drop a task to move it, or drag and drop while holding the Ctrl key to copy the task. + +**Use process parameters to pass key arguments to your tasks** + +You can now use process parameters to make it easier for users of your build definition or template to specify the most important bits of data without having to go deep into your tasks. + +![build editor process parameters](_img/01_25_build-editor-process-parameters.png) + +If you create a new build from some of the built-in templates (for example, **Visual Studio** and **Maven**), you can see examples of how these work. + +**Learn more** + +The new editor includes a few other enhancements, such as giving you quicker access to your sources settings. For more details, see [Preview of our new build editor](https://www.visualstudio.com/docs/build/preview/2017-user-experience). + +##Repo admin permission changes +For Git repos, we’ve divided the __Administer__ permission into several more granular permissions. This gives you more flexibility to decide who can perform what actions. For instance, you may allow anyone in your account to create new repositories, but disallow them from deleting repos or adding new users to a repo. The new permissions are: +* Administer: add/remove users and permissions +* Create: create a new repo +* Delete: delete a repo +* Rename: rename a repo +* Edit policies: configure branch policies +* Remove others’ locks: remove branch locks set by another user + +These permissions can be applied to all repositories in a project or to individual repositories. + +##Branch policy improvements +This sprint, we have a few improvements for branch policies. In the __Policies__ section, the required and optional policies are now grouped into sections, clarifying exactly which policies are required in order to complete a PR. Required reviewers are also summarized in the required section, and will only be marked as passing when all required reviewers have approved. + +![policies](_img/01_25_05.png) + +For users that need to bypass policies (and have the required permissions), a new experience will be shown on the __Complete__ dialog. Any policies that are not met will be shown in a warning message, and a new explicit option to opt-in to override policies will be presented. Checking the override option will enable the __Override & Complete__ action, which will complete the PR, overriding any failing policies. + +![bypass](_img/01_25_06.png) + +##PR comment improvements +To help users better identify the new comments in their PR, we’ve added some additional decoration to the new replies in existing discussion threads. Comments in the files view will also highlight threads that have new comments. + +![PR comments](_img/01_25_04.png) + +##Discussion control toolbar +Markdown is a powerful tool when adding comments to pull requests, but it can be hard to remember the syntax. To make this easier, we’ve added a toolbar to the discussion control that will insert the appropriate Markdown syntax to add common formatting. Headings, boldface, italics, links, code, and lists can all be added using the new toolbar controls, and features like @ and # mentions can be entered using the toolbar as well. Keyboard shortcuts are available for boldface (CTRL + B), italics (CTRL + I), and creating links (CTRL + K). + +![discussion toolbar](_img/01_25_07.png) + +##View PRs for a commit +You can now view all associated pull requests for a commit on the __commit details__ page. From the image below, you can see that: + +* In the associated pull request drop-down, there are two pull requests associated with this commit. +* Pull request #2 brought this commit to master. +* The same commit was brought into branch 4 via pull request #1. + +![PR in commits](_img/01_25_08.png) + +##Release views in Package Management +We’ve added a new feature to Package Management called __release views.__ Release views represent a subset of package-versions in your feed that you’ve __promoted__ into that release view. Creating a release view and sharing it with your package’s consumers enables you to control which versions they take a dependency on. This is particularly useful in continuous integration scenarios where you’re frequently publishing updated package versions, but may not want to announce or support each published version. + +[Check out the docs](https://www.visualstudio.com/en-us/docs/package/feeds/about-release-views) to get started. + +##npmjs.com upstream now caches packages +npm feeds in Package Management now support npmjs.com as an __upstream source with caching.__ By enabling this option, your feed will transparently proxy and cache packages from npmjs.com, which means that you’ll only need to get a particular package@version from npmjs.com once. Future requests for that package will be served directly from your Team Services account. If a package is removed from npmjs.com, you’ll still be able to get the cached version of it from Team Services. See [Use packages from npmjs.com](https://www.visualstudio.com/en-us/docs/package/npm/upstream-sources) for more information. + +##Run tests built using Visual Studio 2017 +Using the __Deploy Test Agent__ and __Run Functional Tests__ tasks in CI/CD pipeline, you can now install Test Agents for Visual Studio 2017 RC and run tests that were built using Visual Studio 2017. + +![run tests](_img/01_25_09.png) + +##Track changes to test steps +In the past, it was difficult to understand which test steps had changed in test case work items because work item history did not format the changes. With this deployment, we have added formatting for test steps in work item history that shows which exact steps were edited, added, or deleted. For steps that were edited, you can compare the changes by looking at the updated step and the previous step. Converting existing steps to shared steps and adding new shared steps are also captured in the new history view. + +![test steps](_img/01_25_10.png) + +##Sorting on work item search results +Until now, work item search results were always ordered by relevance. You can now sort the results by Assigned To, Changed Date, Created Date, ID, Relevance, State, Tags, Title, and Work Item Type. Note that relevance remains the default mode of sorting for work item search results. + +![search](_img/01_25_11.png) + +##Linking to changelog on the Marketplace +Publishers can now create and link to a changelog for their extensions on the Marketplace. + +###For Team Services extensions: +You can now include a __changelog__ object in the content section of the manifest with a path property that points to the Changelog Markdown file within the extension. + +###For VS Code extensions: +If CHANGELOG.md is placed in the extension’s workspace root, it will be automatically included by the vsce publishing tool. More details can be found within [VS Code documentation](http://code.visualstudio.com/updates/v1_7#_extension-authoring). + +##Release action in Build summary +We are now supporting a __Release__ action, available in the __Build__ summary action bar, so it is easy for you to create a release for a build. + +![release action](_img/01_25_16.png) + +##Security for variable groups +Security for variable groups is now governed through a set of roles such as __Creator__ and __Administrator__. + +By default, the below roles are assigned. +* Creator role to Contributors +* Administrator role to Project Collection Administrators, Project Administrators, Build Administrators, and Release Administrators +* Reader role to Valid Project Users + +The defaults can be overridden for all variable groups or for a specific one. + +![variable group](_img/01_25_17.png) + +##Web app deployment history in Azure portal +Release management now updates the deployment logs of Azure App Service when a deployment is done by using the App Service deployment task. Users can view deployment history in the Azure portal by selecting the __Continuous delivery__ option in the __App Service__ blade. + +As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork diff --git a/release-notes/2017/jul-14-team-services.md b/release-notes/2017/jul-14-team-services.md new file mode 100644 index 00000000000..356da32d0ff --- /dev/null +++ b/release-notes/2017/jul-14-team-services.md @@ -0,0 +1,186 @@ +--- +title: New Release Definition Editor and improved pull request workflows – July 14 +description: VSTS release notes for July 13 2017 +ms.ContentId: 3db4e4d9-ac9e-426c-81bc-dac28ea16988 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: alexn +author: alexn +--- + +# New Release Definition Editor and improved pull request workflows – July 14 + +**Note:** The features discussed in this post will be rolling out over the next three weeks. + +Last sprint we talked about the continuing refresh of our web experience. The big thing we’re excited about this sprint is the new __Release Definition Editor__ going into preview. It is based off the new CI editor we released not long ago, and it’s a good example of the overall direction that we are going. It’s not just a cleaner experience, it is structurally different in that it lets you visualize your release process. It lets you work with Release in the way you think about your system. We are going to be bringing this same approach to the runtime views as well so that you can visualize a release as it progresses. Unlocking all of your data with richer, easier to consume visualizations is something we are trying to do across the product. Read more about the new [__Release Definition Editor__ preview](#new-release-definition-editor-preview) below. + +![visualize pipeline](_img/07_14_08.png) + +And of course, there are lots of other improvements across the product this sprint. Let’s jump in! + +##Work +###Migrate team projects between two inherited processes with the same parent +We have improved the experience to migrate your team projects between processes within the same system process. If you previously wanted to let a team project use __MyScrum B__ instead of __MyScrum A__, you had to move the team project to the __Scrum__ system process first. Not only was that causing confusion, it was not possible to do this when your inherited process included a custom work item type. In the improved experience, we will allow you to change the process of a team project as long as they have the same custom work item types.  + +Many customers have asked us how to prepare and test changes of a process without affecting existing customers. This feature is a critical piece of that experience. With the next deployment, we will allow you to create a copy of an inherited process. Once that is done, you can create a copy of a process, make modifications to the copied process. Then create a temporary team project based on the modified process to test your changes. Once you have validated the changes, you can change the process of the production team projects. + +###Filtering on Backlogs, Sprints, and Queries +All of our existing work item tracking grid experiences (queries, backlogs, sprints backlogs, and test case management) now make use of our common, consistent filtering component. Beyond applying a keyword filter across displayed columns and selecting tags, with this new component, you can also filter on work item types, states, and assigned to in order quickly to get to the work items you are looking for. Here’s a sneak peek: + +![Filtering on backlogs sprints and queries](_img/07_14_01.png) + +Over the next couple of sprints, we will be bringing this same filtering experience into our Kanban board, our task board, and our Delivery Plans extension so stay tuned! + +###Expand to show empty fields on a Kanban card +Today, you have the option to add additional fields to a card and then __hide empty fields__ in board settings to remove unnecessary clutter from the board. The drawback to this feature was that once an empty field was hidden, the only way to update the field was to open the work item form. With the newly available expand option on Kanban cards, you can now benefit from hiding empty fields across the board, but still have single click access to update a particular field on a card. Simply hover over the card and look for the down chevron at the bottom of the card to update the hidden field. + +![Show empty card fields closed](_img/07_14_02.png) + +Click the down chevron at the bottom of the card to update the field. + +![Show empty card fields open](_img/07_14_23.png) + +##Code +###Automatically complete work items when completing pull requests +If you’re linking work items to your PRs, keeping everything up to date just got simpler. Now, when you complete a PR, you’ll have the option to automatically complete the linked work items after the PR has been merged successfully. If you’re using policies and set PRs to auto-complete, you’ll see the same option. No more remembering to revisit work items to update the state once the PR has completed - VSTS will do it for you.   + +![Complete work items](_img/07_14_16.png) + +###Policies: Reset votes on push/new iteration +Teams opting for a more strict approval workflow in PRs can now opt-in to a new feature - the ability to reset votes when new changes are pushed. The new setting is an option under the policy to __Require a minimum number of reviewers__. + +![Reset votes setting](_img/07_14_17.png) + +When set, this option will cause all votes from all reviewers to be reset any time the source branch of the PR is updated. The PR timeline will record an entry any time the votes are reset as a result of this option. + +![Reset votes timeline](_img/07_14_18.png) + +###Notifications: Great email templates for pull request workflows +Pull request email alerts have been refreshed to make them clear, concise, and actionable. The subject line will begin with the PR title and secondary information, like the repo name, and ID will be deferred to the end.  The name of the author has been added to the subject to make it simpler to apply rules and filters based on the person that’s created the PR.   + +The body of the alert emails has a refreshed template that first summarizes why the alert was sent, followed by the critical metadata (title, branch names, and description), and a main call-to-action button. Additional details like the reviewers, files, and commits are included further down the email. + +![Email body](_img/07_14_21.png) + +For most alerts, the call-to-action will be to view the pull request in the web. However, when you’re notified about a specific comment, the call-to-action will __link directly to that comment__ so you can easily find the code and prior conversation for context.   + +![Email view comment](_img/07_14_22.png) + +###Pull request details: View original diff for code comments +Sometimes, it’s hard to make sense out of a PR comment after the code it’s referencing has changed (many times, when a requested change has been made).   + +![Code after](_img/07_14_19.png) + +When this happens, you’ll now see a badge with an update number that you can click to see what the code looked like at the time the comment was originally created.   + +![Code before](_img/07_14_20.png) + +###Task lists in pull request descriptions and comments +When preparing a PR or commenting you sometimes have a short list of things that you want to track but then end up editing the text or adding multiple comments. Lightweight task lists are a great way to track progress on a list of todos as either a PR creator or reviewer in the description or a single, consolidated comment. Click on the Markdown toolbar to get started or apply the format to selected text. + +![Task list toolbar](_img/07_14_13.png) + +Once you’ve added a task list, you can simply check the boxes to mark items as completed. These are expressed and stored within the comment as `[ ]` and `[x]` in Markdown. See [Markdown guidance](https://www.visualstudio.com/docs/reference/markdown-guidance#checklist-or-task-list) for more information. + +![Task list complete](_img/07_14_14.png) + +###Ability to “Like” comments in pull requests +Show your support for a PR comment with a single click on the __like__ button. You can see the list of all people that liked the comment by hovering over the button.   + +![Like comments](_img/07_14_15.png) + +##Build +### Pull request build variables +You can now get the pull request ID, source branch, and target branch from  [build variables](https://www.visualstudio.com/en-us/docs/build/define/variables). + +### Faster publishing of artifacts from Windows agents to file shares +We’ve added an option to make it faster to publish artifacts from Windows agents to file shares. In the __Publish Build Artifacts__ task arguments, select **Enable Copy Concurrency** to enable multi-threaded mode and copy multiple files at the same time. This is equivalent to `robocopy /mt`. Optionally you can specify the number of threads in the **Copy Concurrency Value** (the default is 8). + +##Release +###New Release Definition Editor (Preview) +> **Preview feature** +> +> To use this capability, enable [**New Release Definition Editor**](https://www.visualstudio.com/docs/build/preview/release-definition-editor) for yourself or your account. See [Enable preview features](https://www.visualstudio.com/docs/collaborate/preview-features) for more details. + +Have you ever struggled to create a mental model of how the deployments to your environments would progress? We are introducing the pipeline view for your release definitions that will show how your deployments flow. Approvals, environment and deployment settings are now in-context and easily configurable. + +####Visualization of the pipeline +The pipeline in the editor provides a graphical view of how deployments will progress in a release. The artifacts will be consumed by the release and deployed to the environments. The layout and linking of the environments reflects the trigger settings defined for each environment. + +![Visualize pipeline](_img/07_14_08.png) + +####In context configuration UI +Artifacts, release triggers, pre deployment / post deployment approvals, environment properties and deployment settings are now in-context and easily configurable. + +![In context config](_img/07_14_09.png) +  +####Applying deployment templates +The list of featured templates are shown when creating a new environment.  + +![Templates](_img/07_14_10.png) +   +####Improved task and phase editor +All the enhancements in the new build definition editor are now available in the release definition editor, too. You can search for tasks and add them either by using the __Add__ button or by using drag/drop. You can reorder or clone tasks using drag/drop.  + +![Task and phase editor](_img/07_14_11.png) + +###Task group references +Task groups are created for use across multiple release and build definitions but we’ve heard that there is confusion with not knowing which definitions are impacted by a task group change. This feature adds the __References__ tab to show the list of build and release definitions using the task group so that you can make changes with confidence. + +###Task group versioning +When making changes to task groups, it can feel risky because the change is effective to all definitions that use the task group. With task group versioning, now you can draft and preview task group versions while still offering stable versions to your most important definitions until you are ready to switch. After some drafting and iteration, you can publish a stable version and, while publishing, if the changes are breaking in nature, you can choose to publish the task group as preview (a new major version). Alternatively you can publish it directly as an updated stable version. + +When a new major (or preview) version of the task group is available, the definition editor will advise you that there is a new version. If that major version is preview, you even see a “try it out” message. When the task group comes out of preview, definitions using it will be auto-updated, sliding along that major channel. + +![Save as draft](_img/07_14_04.png) + +![Publish as preview](_img/07_14_05.png) + +###Task group import and export +Although task groups have enabled reuse within a project, we know that recreating a task group across projects and accounts can be painful. With task group import/export, as we’ve done for release definitions, now you can export as a JSON file and import where you want it. We’ve also enabled nested task groups, which first expand when they are exported. + +![Publish as preview](_img/07_14_07.png) + +###Multi Configuration support in Server Side (Agentless) tasks +By specifying variable multipliers for server side (agentless) tasks, you can now run the same set of tasks in a phase on multiple configurations, which run in parallel. + +![multi config support](_img/07_14_06.png) + +###Code information in Release with Jenkins CI +In __Release__, we want to have better integration with popular CI systems like Jenkins. Today, in the __release summary__ tab, we show code commits only if the CI build is coming from VSTS. This feature enables code information for Jenkins CI artifacts as well when the Jenkins server is reachable by the agent executing the release. + +![Code info in Release with Jenkins](_img/07_14_03.png) + +##Insights +###Velocity Widget for the Analytics Extension + +The [Marketplace Extension for Analytics](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics) now supports the __Velocity__ widget. + +With this powerful widget, you can chart your team’s velocity by Story Points, work item count, or any custom field. +With advanced options, you can compare what your team delivered as compared to plan, as well as highlighting work that was completed late.  + +![Velocity Widget](_img/07_14_12.png) + +##Shared +###Notifications: Give team admins control over the delivery of notifications targeting the team +A team admin can now control how notifications targeting the team are delivered. The options are send email notifications to each team member, send one notification to a specific email address, or do not send any notifications. This feature is particularly useful for pull request notifications where a team can be added as a reviewer. Previously, the team would not be notified. + +A team admin can configure their team’s default delivery preference via the team’s __Notification settings__ hub. + +##Marketplace +###Constraints on SVG images, screenshots and badges +Due to security concerns, we have added SVG constraints to make extensions safer. +* The icons and screenshot can no longer be SVG. +* The badges provided in the manifest can not be SVGs unless they are from [approved badge providers](https://www.visualstudio.com/docs/integrate/extensions/develop/manifest#approvedbadges). +* Images in README.md and CHANGELOG.md can not be SVGs unless they are from approved badge providers. + +##Feedback +We would love to hear what you think about these features. Report a problem or provide a suggestion if you have ideas on things you’d like to see us prioritize through the new feedback menu. + +![Feedback menu](_img/07_14_00.png) + +You can also get advice and your questions answers by the community on [Stack Overflow](https://stackoverflow.com/questions/tagged/vs-team-services). + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2017/jun-01-team-services.md b/release-notes/2017/jun-01-team-services.md new file mode 100644 index 00000000000..18436d020d2 --- /dev/null +++ b/release-notes/2017/jun-01-team-services.md @@ -0,0 +1,166 @@ +--- +title: New Visual Studio Enterprise pipeline benefit, mobile work item form GA, and source based release triggers – June 1 +description: VSTS release notes for June 1 2017 +ms.ContentId: d07ea7a5-92ec-4d13-b1ac-49180b237a97 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +# New Visual Studio Enterprise pipeline benefit, mobile work item form GA, and source based release triggers – June 1 + +**Note:** The features discussed in this post will be rolling out over the next three weeks. + +This week we have something for just about everyone, with a broad set of changes across the entire product: +* Our WIT mobile forms have GA’d and the first experiences on our new analytics services are here. +* Build and Release have a host of new improvements from our customer request list and VS Enterprise users got a nice new benefit. +* We also continue on our journey to make notifications great and customizable across the entire product. + +##Mobile work item form general availability +The mobile experience for work items in VSTS is now out of preview! We have a full end-to-end experience that includes an optimized look and feel for work items and provides an easy way to interact with items that are assigned to you, that you’re following, or that you have visited or edited recently from your phone. + +![mobile wit](_img/06_01_01.png) + +Along with the good looks, this experience supports optimized controls for all field types. + +![mobile wit fields](_img/06_01_02.png) + +With the new mobile navigation, users can reach any other mobile-ready parts of VSTS and get back to the full desktop site in case they need to interact with other hubs. We hope you’ll enjoy the upgraded experience. If you want to provide some feedback, please use the __Send Feedback__ experience in the navigation sidebar. + +![mobile wit nav](_img/06_01_03.png) + +##New widgets for Analytics extension +The [Marketplace Extension for Analytics](https://marketplace.visualstudio.com/items?itemName=ms.vss-analytics) enables three new dashboard widgets for Visual Studio Team Services (VSTS). The __Cycle Time,__ __Lead Time,__ and __Cumulative Flow Diagram__ widgets are designed to provide additional insight beyond what’s currently available in VSTS.  + +![analytics](_img/06_01_04.png) + +##Path filtering support for Git notifications +Instead of getting notifications for all folders in a repo, you can now choose to get notified when team members create pull requests or push code in only the folders that you care about. When creating custom Git push or Git pull requests email notification subscriptions, you will see a new option to filter these notifications by folder path. + +![git notification PR filter](_img/06_01_08.png) + +##More pull request comments filtering options +Comments in both the pull request overview and the files view now have the same options. You can also filter to see only the discussions you participated in. + +![PR comments filter](_img/06_01_09.png) + +##Search for a commit in branches starting with a prefix +If you have branch structure in a hierarchical format where all branches are prefixed with a text, then this feature will help you to find a commit in all the branches starting with that prefix text. For example, if you want to see whether a commit made its way to all branches that are prefixed with "dev" then simply type "dev" in the search box and select __Search in branches starting with "dev"__. + +![prefix search](_img/06_01_10.png) + +## Visual Studio Enterprise benefit for pipelines in Team Services + +Until now, you were able to get a free private pipeline for every Visual Studio Enterprise subscription added to your on-premises TFS server. The same benefit was not available in Team Services. + +Sometime in the next few weeks, we’ll add the Visual Studio Enterprise subscriptions pipeline benefit to your Team Services account. The more Enterprise users you have in your account, the more concurrent builds and releases you can run on your private agents without having to pay anything extra. + +![visual studio enterprise subscriber pipelines](_img/06_01_07.png) + +## Work with secure files such as Apple certificates + +We’ve added a general-purpose [secure files library](https://www.visualstudio.com/en-us/docs/build/concepts/library/secure-files). + +![secure-files-library](_img/06_01_18.png) + +Use the secure files library to store files such as signing certificates, Apple Provisioning Profiles, Android Keystore files, and SSH keys on the server without having to commit them to your source repository. + +The contents of secure files are encrypted and can only be used during build or release processes by referencing them from a task. Secure files are available across multiple build and release definitions in the team project based on security settings. Secure files follow the Library security model. + +We’ve also added some Apple tasks that leverage this new feature: + +* [Utility: Install Apple Certificate](https://www.visualstudio.com/en-us/docs/build/steps/utility/install-apple-certificate) + +* [Utility: Install Apple Provisioning Profile](https://www.visualstudio.com/en-us/docs/build/steps/utility/install-apple-provisioning-profile) + +## Extensions with build templates + +Build templates let you create a baseline for users to get started with defining their build process. We ship a number of them in the box today and while you could upload new ones to your account, it was never possible for extension authors to include new templates as part of an extension. You can now include build templates in your extensions. For example: + +```json +{ "id": "Template1", + "type": "ms.vss-build.template", + "targets": [ "ms.vss-build.templates" ], + "properties": { "name": "Template1" } } +``` + +For the full example, see https://github.com/Microsoft/vsts-extension-samples/tree/master/fabrikam-build-extension. + +> [!TIP] +> You can use this capability to offer and share the same custom template across all your team projects. + +## Deprecate a task in an extension + +You can now deprecate a task in your extension. To make it work, you must add the following variable to the latest version of your task: + +```json +"deprecated": true +``` + +When the user searches for deprecated tasks, we push these tasks to the end and group them under a collapsible section that’s collapsed by default. If a definition is already using a deprecated task, we show a deprecated task badge to encourage users to switch to the replacement. + +![deprecated task](_img/06_01_05.png) + +You can help your users learn about the replacement task by mentioning it in the task description. The description will then point folks using the task in the right direction from both the task catalog and the existing build/release definitions. + +![deprecated task description](_img/06_01_06.png) + +## Task group references + +Task groups let you define a set of tasks that you can add to your build or release definitions. This is handy if you need to use the same grouping of tasks in multiple builds or releases. To help you track the consumers of a task group, you now have a view into the build definitions, release definitions, and task groups that reference your task group. + +![task-group-references](_img/06_01_17.png)) + +When you try to delete a task group that’s still referenced, we warn you and give you a link to this page. + +##Variables Support in Manual Intervention task +The __Manual Intervention__ task now supports the use of variables within the instruction text shown to users when the task runs, at the point where the user can resume execution of the release process or reject it. Any variables defined and available in the release can be included, and the values will be used in the notifications as well as in the email sent to users.  + +![manual intervention variables](_img/06_01_12.png) + +![manual intervention pending](_img/06_01_13.png) + +##Control releases to an environment based on the source branch +A release definition can be configured to trigger a deployment automatically when a new release is created, typically after a build of the source succeeds. However, you may want to deploy only builds from specific branches of the source, rather than when any build succeeds. + +For example, you may want all builds to be deployed to Dev and Test environments, but only specific builds deployed to Production. Previously you were required to maintain two release pipelines for this purpose, one for the Dev and Test environments and another for the Production environment. + +Release Management now supports the use of artifact filters for each environment. This means you can specify the releases that will be deployed to each environment when the deployment trigger conditions (such as a build succeeding and creating a new release) are met. In the __Trigger__ section of the environment __Deployment conditions__ dialog, select the artifact conditions such as the source branch and tags for builds that will trigger a new deployment to that environment. + +![deployment conditions](_img/06_01_14.png) + +In addition, the __Release Summary__ page now contains a pop-up tip that indicates the reason for all “not started” deployments to be in that state, and suggests how or when the deployment will start. + +![pop up tip](_img/06_01_15.png) + +##Release Triggers for Git repositories as an artifact source +Release Management now supports configuring a continuous deployment trigger for Git repositories linked to a release definition in any of the team projects in the same account. This lets you trigger a release automatically when a new commit is made to the repository. You can also specify a branch in the Git repository for which commits will trigger a release. + +![release triggers](_img/06_01_16.png) + +##On-demand triggering of automated tests +The __Test__ hub now supports triggering automated test cases from test plans and test suites. Running automated tests from the __Test__ hub can be set up similarly to the way you run tests in a scheduled fashion in __Release Environments__. You will need to setup an environment in the release definition using the __Run automated tests from test plans__ template and associate it with the test plan to run the automated tests. See the [documentation](https://www.visualstudio.com/en-us/docs/test/continuous-testing/run-automated-tests-from-test-hub) for step by step guidance on how to set up environments and run automated tests from the __Test__ hub. + +![test trigger](_img/06_01_11.jpg) + +##Acquisition data in Extension Hub for Marketplace publishers +Publishers of free extensions will now have access to aggregated acquisition data in the selected time period, daily trend on extension page views with acquisition, uptake on VSTS and TFS connected, and conversion from page views to acquisition. This data is also available for download in XLS format to aid creating your own custom reports. + +##Q&A for Marketplace publishers +The __Q&A__ tab will give the publisher a snapshot of all questions by your users with the nonresponded queries on the top. You can reply or edit a previous response and manage engagement better with your extension users.  + +##GitHub and Custom Q&A support for marketplace extensions +Publishers can choose between __Marketplace Q&A__, __GitHub issues__ or custom __Q&A__, as their support system for the Q&A section in the marketplace. If you use GitHub repo, the marketplace will link users in the Q&A section to your GitHub issues. You can use the marketplace for custom Q&A or choose to disable the Q&A section on your extension using the __CustomerQnASupport__ property in the manifest for VS/VSTS extensions or the __qna__ field for VSCode extensions.   + +##Retain VSTS identity when navigating to Marketplace from VSTS +Marketplace users will now be able to retain their identity and will be automatically signed in when navigating to the Marketplace from the VSTS/TFS marketplace icon. + +##AAD sign-in address rename +We have updated the way we resolve identities in VSTS. Users can now freely change their signp-in addresses through AAD without losing access to their VSTS resources. + +We would love to hear what you think about these features. Please don’t hesitate to send a smile or frown through the web portal, or send other comments through the [Team Services Developer Community](https://developercommunity.visualstudio.com/spaces/21/index.html). As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool \ No newline at end of file diff --git a/release-notes/2017/jun-22-team-services.md b/release-notes/2017/jun-22-team-services.md new file mode 100644 index 00000000000..b29822c2c6d --- /dev/null +++ b/release-notes/2017/jun-22-team-services.md @@ -0,0 +1,309 @@ +--- +title: Git Tags web view, build definition import/export, and improved user management – June 22 +description: VSTS release notes for June 22 2017 +ms.ContentId: b94f1350-a53f-4d0b-af2d-a31832ee7799 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: alexn +author: alexn +--- + +# Git Tags web view, build definition import/export, and improved user management – June 22 + +**Note:** The features discussed in this post will be rolling out over the next three weeks. + +Relax, sit back, and get comfortable. You’re going to be here for a while. We’ve got lots of updates this sprint across the entire product. + +You’ve probably noticed that we’ve been continuing to evolve our web portal for a while now. We know it’s the primary way folks interact with the product. We want to have a great overall web experience and we’ve been working to get there in incremental steps. Having a great web experience means multiple things to us. It means you can accomplish the work you need to do with ease. It means that it’s an accessible experience, so everyone on your team can use it. It also means an experience that is visually appealing and a pleasant place to do your work. + +In addition to plenty of just-plain-new features, you’ll find numerous examples of us continuing to take steps to improve the web portal across all of those goals this sprint. So let’s dive in! + +##Shared fields across processes +When you create a field, you can choose to create a new field or use an existing one. With this deployment, we have made it possible for you to use an existing field from a different process. This should help your organization to query across team projects that use a different process. + +If you change the description or the picklist values of a shared field, it will affect all work item types where the field is used. + +![Fields across processes](_img/06_22_00.png) + +##Work item type icons +We have made a global commitment to make our products fully accessible to our customers. As part of that commitment, we have been working to find and address many accessibility issues—anywhere from keyboard patterns to visual design and layout. + +Work item tracking has relied solely on color in many experiences to convey work item type. However, this is problematic for our color-blind or low-vision users who may not be able to distinguish between items due to similarities in color. To increase the scanability of work item types for all our customers, we have introduced icons to our visual language of work item types. You can [customize your work item types](https://www.visualstudio.com/docs/work/process/customize-process-wit#change-description-icon-or-color-of-a-custom-wit) by choosing from our icon library. + +Color bars conveying type on the backlog and queries grids have been replaced with colored icons. + +![Colored icons in query](_img/06_22_01.png) + +Cards on the board now include a type icon. + +![Board with icon type](_img/06_22_02.png) + +##Show/hide work item field borders +Over the last couple of months, we’ve discovered that, for some of our more traditional users, not having field borders in our work item form leads to confusion and is too far away from home. To alleviate this confusion, this sprint we’ve enabled a profile setting to show/hide work item field borders. This will help give the form a more traditional look and will give users the choice of what works best for them. + +![Chrome-less work item form](_img/06_22_03.png) + +Change the setting through your Visual Studio profile. + +![profile setting](_img/06_22_35.png) + +##Extensions block work item save +Work item form custom controls, groups, and pages can now [block work item save](https://www.visualstudio.com/en-us/docs/integrate/extensions/reference/client/api/tfs/workitemtracking/services/workitemformservice#seterror) to validate data and ensure the user fills out any required information before saving the work item form. + +##Collapsible pull request comments +Reviewing code is a critical part of the pull request experience, so we’ve added new features to make it easier for reviewers to focus on the code. Code reviewers can easily hide comments to get them out of the way when reviewing new code for the first time. + +![Hide comments](_img/06_22_30.png) + +Hiding comments hides them from the tree view and collapses the comment threads in the file view: + +![Collapsed comment](_img/06_22_31.png) + +When comments are collapsed, they can be expanded easily by clicking the icon in the margin, and then collapsed again with another click. Tooltips make it easy to peek at a comment without seeing the entire thread. + +![Collapsed tooltip](_img/06_22_32.png) + +##Improved workflow when approving with suggestions +Using the __auto-complete__ option with pull requests is a great way to improve your productivity, but it shouldn’t cut short any active discussions with code reviewers. To better facilitate those discussions, the __Approve with suggestions__ vote will now prompt when a pull request is set to complete automatically. The user will have the option to cancel the auto-complete so that their feedback can be read, or keep the auto-complete set and allow the pull request to be completed automatically when all policies are fulfilled. + +![prompt](_img/06_22_11.png) + +##Filter pull request tree by file name +Finding a specific file in a pull request is easier than ever. The new filter box in the Files view lets users filter down the list of files in the tree view. + +![unfiltered](_img/06_22_33.png) + +The filter matches any part of the path of the files in the pull request, so you can search by folder names, partial paths, file names, or extensions. + +![filtered](_img/06_22_34.png) + +##Richer pull request callout on commit details page +The pull request callout on the commit details page shows more relevant information to help you diagnose better. Now we also show the **first pull request** that introduced the commit to any branch and the **pull request associated with the default branch** in the callout. + +![pull request callout](_img/06_22_12.png) + +##Filter tree view in Code +Now you don’t need to scroll through all the files that a commit may have modified to just get to your files. The tree view on commit details, pull requests, shelveset details, and changeset details page now supports file and folder filtering. This is a smart filter that shows child files of a folder when you filter by folder name and shows a collapsed tree view of a file to show the file hierarchy when you filter by file name. + +Find a file or folder filter on commit tree: + +![find a file filter](_img/06_22_13.png) + +Filtered view on commit tree: + +![filtered view](_img/06_22_14.png) + +##Git tags web view +###View tags +You can view all the tags on your repository on the **Tags** page. If you manage all your tags as releases, then a user can visit the tags page to get a bird’s-eye view of all the product releases. + +![view tags on tags page](_img/06_22_15.png) + +You can easily differentiate between a lightweight and an annotated tag here, as annotated tags show the tagger and the creation date alongside the associated commit, while lightweight tags only show the commit information. + +###Delete tags +There can be times when you want to delete a tag from your remote repo. It could be due to a typo in the tag name, or you you might have tagged the wrong commit. You can easily delete tags from the VSTS UI by clicking the context menu of a tag on the __Tags__ page and selecting __Delete tag__. + +**Note:** Deleting tags on remote repos should be exercised with caution. + +![delete tags](_img/06_22_16.png) + +###Filtering tags +For old repositories, the number of tags can grow significantly with time; there can also be repositories that have tags created in hierarchies, which can make finding tags difficult. + +If you are unable to find the tag that you were looking for on the tag page, then you can simply search for the tag name using the filter on top of the Tags page. + +![filtering tags](_img/06_22_17.png) + +###Tags security +Now you can grant granular permissions to users of the repo to manage tags. You can give users the permission to delete tags or manage tags from this interface, + +![tags security](_img/06_22_18.png) + +Read more about git tags at the [Microsoft DevOps blog](https://blogs.msdn.microsoft.com/visualstudioalm/2017/06/14/view-tags-for-git-repositories/). + +## Export and import build definitions + +Build definitions are implemented internally as .json files, so you can see details on changes in the file’s history. You can already clone and make templates from your build definitions, but many users have wanted to take a copy of their CI build logic and reuse it in another team project. In fact it’s been a [top-ten request on UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services/category/145254-ci-build). + +We’re pleased to announce that now you can do it! + +![export build definition](_img/06_22_export-build-definition.png) + +![import build definition](_img/06_22_import-build-definition.png) + +## Visual Studio latest and hosted agent pools + +We’re changing the model for how you deal with hosted agents and different versions of Visual Studio. Due to architectural, storage, and performance limitations, we’re no longer going to offer multiple versions of Visual Studio on a single hosted agent pool. For details on the history and rationale for these changes, see [Visual Studio Services VS Hosted Pools](https://github.com/Microsoft/vsts-tasks/blob/master/docs/vshostedpools.md) on GitHub. + +In this release you’ll see the following changes: + +* You must now explicitly select a queue when you create a build definition (no default). + +* To make it easier, we’re moving the default queue to the **Tasks** tab, in the **Process** section. + +![default build queue on tasks tab](_img/06_22_default-build-queue-on-tasks-tab-required.png) + +* The [Visual Studio Build](https://www.visualstudio.com/docs/build/steps/build/visual-studio-build) and [MSBuild](https://www.visualstudio.com/docs/build/steps/build/msbuild) tasks now default to the **Latest** setting for the version argument. + +Coming soon you’ll see more changes. For example, the following hosted pools (and corresponding queues) will be: + +* Hosted VS2017 + +* Hosted VS2015 + +* Hosted Deprecated (previously called “Hosted Pool”) + +* Hosted Linux Preview + +## Reminder: The hosted XAML controller is going away + +> [!IMPORTANT] +> We’re going to shut down the deprecated hosted XAML build controller on July 1st, 2017. After this shutdown, you’ll no longer be able to use hosted agents to run your XAML builds. + +We recommend that you migrate to our new task-based build system, which includes access to hosted agents to run your builds. See our recently published guide to [migrate from XAML builds to new builds](https://www.visualstudio.com/docs/build/actions/migrate-from-xaml-builds). + +However, if you still need to run XAML builds during the migration, then you should set up a private XAML build controller now. To use private XAML controllers and agents, you need to have sufficient private pipelines in your account. For details, see [I’m looking for the hosted XAML build controller. Where did it go?](https://www.visualstudio.com/en-us/docs/build/concepts/agents/hosted#im-looking-for-the-hosted-xaml-build-controller-where-did-it-go) + +## Build definition menu on build summary page + +From the build summary page, you can now navigate to the build summary for other definitions. + +![pick a build definition from the build summary](_img/06_22_pick-a-build-definition-from-the-build-summary.png) + +This control is also available on the history page. + +##Release Triggers: Continuous deployment for changes pushed to a Git repository +Release Management has always provided the capability to configure continuous deployment when a build completes. However, now you can also configure continuous deployment on Git Push. This means that you can link GitHub and Team Foundation Git repositories as artifact sources to a release definition, and then trigger releases automatically for applications such as Node.JS and PHP that are not generated from a build and so do not need a build action for continuous deployment. + +##Enhancements to server-side tasks +We have made two enhancements to server-side tasks (tasks that run within a server phase). + +We have added a new task that can be used to invoke any generic HTTP REST API as part of the automated pipeline. For example, it can be used to invoke specific processing with an Azure function, and wait for it to be completed. + +![new task REST API](_img/06_22_27.png) + +We have also added a __Control options__ section to all server-side tasks. Task behavior now includes setting the __Enabled__, __Continue on error__, __Always run__, and __Timeout__ options. + +![control options](_img/06_22_28.png) + +##Consume Secrets from an Azure Key Vault as variables +We have added first-class support for integrating with Azure Key Vault in Team Services by linking variable groups to Key Vault secrets. This means you can consume secret variables in Team Services and manage secret values completely within Azure Key Vault, without changing anything on the Team Services side (for example, password rotation). + +To enable this feature in the __Variable Groups__ page, use the toggle button __Link secrets from an Azure key vault as variables__. After configuring the vault details, choose __+Add__ and select the specific secrets from your vault that are to be mapped to this variable group. + +![add secrets](_img/06_22_29.png) + +After you have created a variable group mapped to Azure Key Vault, you can link it to your release definitions, as documented in [Variable groups](https://www.visualstudio.com/en-us/docs/build/concepts/library/variable-groups). + +Note that it’s just the secret names that are mapped to the variable group variables, not the values. The actual values (the latest version) of each secret will be fetched and consumed during the release. + +##Package Management experience updates +We got some great feedback on the updated __Package Management__ experience when we turned it on by default, so we have made a few more updates. + +Package URLs now work with the package name and version, rather than using GUIDs. This makes it easier to hand-craft package URLs. The format is: https://\<account\>.visualstudio.com/\<project|team\>/_packaging?feed=\<feed\>&package=\<package\>&version=\<version\>&protocolType=\<NuGet|Npm\>&_a=package. + +![Friendly URI](_img/06_22_04.png) + +You can now hide deleted package versions from all feed users (no more strikethrough packages!), in response to [this UserVoice suggestion](https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/17719306-add-ui-toggle-to-hide-show-packages-that-have-been). + +![hide](_img/06_22_05.png) + +Any action that you could perform on the package details page can now be performed from the context menu in the list of packages. + +The package list contains a new __Last pushed__ column with humanized dates so you can easily find recently-updated packages. + +![Last Pushed Column](_img/06_22_06.png) + +##Package build task updates +We’ve made comprehensive updates to the __NuGet__, __npm__, __Maven__, and __dotnet__ build tasks, including fixes to most of the issues logged in the [vsts-tasks repo on GitHub](https://github.com/microsoft/vsts-tasks). + +###New unified NuGet task +We’ve combined the __NuGet Restore__, __NuGet Packager__, and __NuGet Publisher__ task into a unified __NuGet__ build task to align better with the rest of the build task library; the new task uses NuGet 4.0.0 by default. Accordingly, we’ve deprecated the old tasks, and we recommend moving to the new NuGet task as you have time. This change coincides with a wave of improvements outlined below that you’ll only be able to access by using the combined task. + +As part of this work, we’ve also released a new __NuGet Tool Installer__ task that controls the version of NuGet available on the PATH and used by the new NuGet task. So, to use a newer version of NuGet, just add a __NuGet Tool Installer__ task at the beginning of your build. + +![NuGet](_img/06_22_07.png) + +###npm build task updates +Whether you’re building your npm project on Windows, Linux, or Mac the new __NPM__ build task will accommodate. We have also reorganized the task to make both __npm install__ and __npm publish__ easier. For __install__ and __publish__, we have simplified credential acquisition so that credentials for registries listed in your project’s .npmrc file can be safely stored in a [service endpoint](https://www.visualstudio.com/en-us/docs/build/concepts/library/service-endpoints). Alternatively, if you’re using a VSTS feed, we have a picker that will let you select a feed, and then we will generate a .npmrc with requisite credentials that are used by the build agent. + +###Working outside your account/collection +It’s now easier to work with feeds outside your VSTS account, whether they’re __Package Management__ feeds in another VSTS account or TFS server or non-Package Management feeds like NuGet.org/npmjs.com, Artifactory, or MyGet. Dedicated __Service Endpoint__ types for NuGet, npm, and Maven make it easy to enter the correct credentials and enable the build tasks to work seamlessly across package download and package push operations. + +![Cross-account](_img/06_22_08.png) + +###Feed picker for VSTS/TFS feeds +We always recommend checking in a configuration file (e.g. NuGet.Config, .npmrc, etc.) so that your source repository has a record of where your packages came from. However, we’ve heard a set of scenarios where this isn’t ideal, so we’ve added a new __Use packages from this VSTS/TFS feed__ option that allows you to select a feed and automatically generate a configuration file that will be used for that build step. + +![feed picker](_img/06_22_09.png) + +###NuGet “Allow duplicates to be skipped” option +We heard from many NuGet customers that they generate a set of packages, only some of which may have updates (and therefore updated version numbers). The __NuGet__ build task has a new __Allow duplicates to be skipped__ option that will enable the task to continue if it tries to push packages to a VSTS/TFS feed where the version is already in use. + +###Maven and dotnet now support authenticated feeds +Unlike __NuGet__ and __npm__, the __Maven__ and __dotnet__ build tasks did not previously work with authenticated feeds. We’ve added all the same goodness outlined above (feed picker, working outside your account improvements) to the __Maven__ and __dotnet__ tasks so you can work easily with VSTS/TFS and external feeds/repositories and have a consistent experience across all the package types supported by __Package Management__. + +![dotnet](_img/06_22_10.png) + +##Project Collection Administrators can link/make initial purchase +Now any Project Collect Administrator, not just the account owner, can make the first Marketplace purchase. This makes it easier for accounts with multiple Project Collection Administrators to pay for VSTS. + +##Deep link to remove your spending limit easily during a Marketplace purchase +If you want to use the Azure subscription that came with your Visual Studio or MSDN subscription to pay for Marketplace purchases, you need to remove your spending limit and add a credit card. With this release, we’ve added a deep link to make it easy to remove the spending limit for your subscription. We also check to make sure you remove the limit indefinitely, so your Marketplace purchases won’t be interrupted. For more information, see [How to set up billing Q&A](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/set-up-billing-for-your-account-vs#q-which-azure-subscriptions-can-i-link-to-my-team-services-account-and-use-for-billing). + +![deep link to remove spending limit](_img/06_22_19.png) + +##Improvements to OAuth permissions page +The OAuth permissions page has been updated to make it easy for a user to see which identity they are authorizing permissions to prior to deciding whether to authorize the application. + +##Streamlined user management (preview) + +> **Preview feature** +> +> To use this capability, you must be a Project Collection Administrator and enable **Streamlined User Management** [preview feature](https://mseng.visualstudio.com/docs/collaborate/preview-features) for yourself or your account. + +Based on feedback from you, we’re releasing a set of updates to our new user management experiences that continue to make your life easier when trying to get your teammates up and running. + +###Bulk remove users +Have you ever needed to remove multiple users from an account at once and found it cumbersome? Now, it is as easy as selecting multiple users and choosing __Remove user__ from the drop down. + +![bulk remove users](_img/06_22_20.png) + +###Optionally add users to projects +We’ve kept the ability to add users to projects in the new account-level Users page, but have made it optional so administrators don’t have to deal with project membership up front unless they need to. + +![optional add](_img/06_22_21.png) + +###Easily view subscriptions +We heard confusion over building subscription detection to __Basic__ access levels in the new experience loud and clear, and have brought back the ability to explicitly choose Visual Studio Subscription detection from the add users dialog. + +![view subscriptions](_img/06_22_22.png) + +Administrators can now also easily see and filter the users who have subscriptions in the account by selecting the subscription from the **Summary** pane, as well as see what resources a user is receiving from the subscription. + +![filter users](_img/06_22_23.png) + +![user resources](_img/06_22_24.png) + +##Enhanced Publisher experience with Sales Transactions for Paid extensions +###Acquisition and sales data in Extension Hub for paid extension publishers on the Marketplace +Publishers of paid extensions will now have access to aggregated acquisition data in the selected period or overall. This includes daily trends on extension page views, trials, and buys for VSTS and TFS Connected. A conversion from page views to acquisition funnel is also included. This data is also available for download in XLS format to aid creating your own custom reports. + +###Sales transactions +This tab gives the publisher aggregated counts of all transactions (New, upgrade, downgrade and cancel) for users such as quantities of licenses and accounts with trends to understand the uptake of the extension. + +Both acquisition and sales tab also share the transaction details which gives publishers access to details of each transaction with date, account, changed quantity and trial end dates. This data can be searched and download in XLS to perform custom reporting. They can also now reach out to the customers for transactional communication using the contact action in the new __Publisher stats__ reports page. + +![enhanced publisher experience](_img/06_22_25.png) + +###Setup Power BI Content Pack +Publishers can also use the __Extension Statistics Power BI__ content pack to gain insight and analyze the progress of the extension. All data elements available in the extension hub are also available in the Power BI content pack. The content pack contains a complete analytic data model (tables, relationships and measures), a set of default reports, and a default dashboard. Reports and dashboards are fully customizable, but the data model is not. More details are available at [Visualstudio.com](https://www.visualstudio.com/en-us/docs/integrate/extensions/extension-statistics-powerbi-contentpack). + +![extension statistics Power BI content pack](_img/06_22_26.png) + +We would love to hear what you think about these features. Report any problems through [Team Services Developer Community](https://developercommunity.visualstudio.com/spaces/21/index.html) and get advice on [Stack Overflow](https://stackoverflow.com/questions/tagged/vs-team-services). As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-team-services) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool diff --git a/release-notes/2017/mar-08-team-services.md b/release-notes/2017/mar-08-team-services.md new file mode 100644 index 00000000000..fdd1d459d81 --- /dev/null +++ b/release-notes/2017/mar-08-team-services.md @@ -0,0 +1,93 @@ +--- +title: Customized backlog levels, mobile work item form improvements, notifications for extensions – Mar 8 +description: VSTS release notes for Mar 08 2017 +ms.ContentId: 9b76c2f3-39ce-4c98-9cef-237853ee0349 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#Customized backlog levels, mobile work item form improvements, notifications for extensions – Mar 8 + +**Note:** The features discussed in this post will be rolling out over the next three weeks. + +We have been focusing on improving your Team Services experience. This sprint includes several items, such as mobile work item form improvements and custom backlog levels. Let’s get into these features! + +##Delivery Plans field criteria +Delivery Plans have become more customizable with the addition of field criteria. This will give you greater control of which work items appear on your plans. Because field criteria is part of the plan, everyone will always see this same view of work. You can see in the example below that we are using field criteria to show only a certain work item type (bug) that contains a tag value (Argo). + +![delivery plans](_img/03_08_04.png) + +##New mobile discussion experience +Our mobile discussion experience has been optimized to provide a mobile-friendly, streamlined experience for submitting a comment. Discussion is the most common action that takes place in a mobile device. We look forward to hearing what you think about our new experience! + +![mobile discussion menu](_img/03_08_01.png) + +![mobile discussion](_img/03_08_02.png) + +##Optimized mobile identity picker +It is now extremely easy to assign a work item to a different user from your phone. The control has been optimized to provide a great mobile experience when filtering, searching, and selecting a user. + +![mobile identity](_img/03_08_03.png) + +##Customized backlog levels +Users can now add new backlog levels to manage the hierarchy of their work items and name them in a way that makes sense for their work item types. Users can also rename and recolor existing backlog levels, such as Stories or Features. See [Customize your backlogs or boards for a process](https://www.visualstudio.com/en-us/docs/work/process/customize-process-backlogs-boards) for details on how to get started. + +![backlog levels](_img/03_08_05.png) + +##Custom work item identity fields +Users can now add custom identity fields to their projects. This allows users to define additional fields like “Assigned To”, which will give users a people-picker experience to select people as the field value. In this initial release, all users in the Team Services account will be valid values for each identity field. + +##Pull Request improvements for teams +If you’re a member of multiple teams, you will now see all of the PRs assigned to those teams listed in the __My Pull Requests__ view. This makes the __My Pull Requests__ view the one stop you need to visit to see all the PRs on your plate. + +![pr](_img/03_08_07.png) + +In a future release, we’ll add teams to the __Pull Requests__ hub under __Code__ to make it easier to see all of your PRs for a single project. + +##New policy for no active comments +Ensure that all comments in your pull requests are being addressed with the new __Comments__ policy. With this policy enabled, active comments will block completion of the PR, forcing all comments to be resolved. Reviewers that leave comments for the PR author but optimistically approve the pull request can be sure that an author that’s eager to merge won’t miss any comments. + +![pr policy](_img/03_08_06.png) + +##Build agent upgrade status +When an agent is being upgraded, it now indicates the status of the upgrade in the queue and pool management portal. + +##Github pull request builds +For a while, we’ve provided CI builds from your GitHub repo. Now we’re adding a new trigger so you can build your GitHub pull requests automatically. After the build is done, we report back with a comment in your GitHub pull request. + +For security, we only build pull requests when both the source and target are within the same repo. We don’t build pull requests from a forked repo. + +![github builds](_img/02_15_04.png) + +##Keep track of your free hosted agent minutes +You can now see how many free hosted agent minutes you've used. + +![build minutes](_img/03_08_09.png) + +##Out-of-the-box notifications enabled by default - coming soon +For your awareness, we are planning to enable [out-of-the-box notifications](https://www.visualstudio.com/en-us/articles/news/2017/jan-05-team-services#out-of-the-box-notifications-preview) by default in our next update in about three weeks. If this feature is already enabled in your account, there will be no impact. If you haven’t enabled this feature, it will be enabled by default in our next update. Account admins will still have the option to opt out of this feature. + +##Getting notified when extensions are installed, require attention, and more +Admins, or those with the ability to manage extensions for an account, are now automatically notified when an extension is installed, uninstalled, enabled, disabled, or requires attention in the account. This is especially useful in larger accounts where multiple people have the responsibility of managing extensions. Admins can turn off these notifications by navigating to __Notification__ settings under the profile menu and switching off the extensions toggle. + +Admins can also define custom subscriptions for extension-related events in the account. For example, an admin can get notified whenever any extension is updated in the account. + +Users can also now turn off automatic notifications about their extension requests. + +##Release level approvals +You can now choose to automatically approve deployments that were automatically triggered after successful deployment to another environment. Approving a chain of deployments (which have the same approvers) can be done at one go if you choose to not approve every deployment. + +Let’s say you have two environments Dev and Test, with the predeployment approvers set to “userA” and “userB,” with both of them required to approve the deployment. If the policy on Test is set as shown below, during deployment time it will be sufficient for userA and userB to approve only Dev. Deployment to Test will get auto-approved. If the deployment to Test is triggered manually, the approvals will be required before deployment to ensure correct approvals. + +![release approvers](_img/03_08_08.png) + +##.NET Core tasks support project files +With the current update, we are enhancing .NET core tasks to support *.csproj files in addition to project.json. You can now use Visual Studio 2017 on your build agents to build .NET core applications using csproj files. + +We think these features will help improve your workflows while addressing feedback, but we would love to hear what you think. Please don’t hesitate to send a smile or frown through the web portal, or send other comments through the [Team Services Developer Community] (https://developercommunity.visualstudio.com/spaces/21/index.html). As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Aaron Bjork \ No newline at end of file diff --git a/release-notes/2017/mar-29-team-services.md b/release-notes/2017/mar-29-team-services.md new file mode 100644 index 00000000000..1ec92dcd11b --- /dev/null +++ b/release-notes/2017/mar-29-team-services.md @@ -0,0 +1,150 @@ +--- +title: PR filtering by people and improved Azure resource group template parameter experience – Mar 29 +description: VSTS release notes for Mar 29 2017 +ms.ContentId: 524ad78c-8313-4e3b-aa2e-3bd2981f3f61 +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#PR filtering by people and improved Azure resource group template parameter experience – Mar 29 + +**Note:** The features discussed in this post will be rolling out over the next three weeks. + +We have several exciting new features this sprint, including Pull Request and Release Management improvements. Let’s get into the details! + +##Work item search for discussions +Work item search now supports searching the __discussion__ field. Users can discover relevant content in __discussions__ both by full text search and by applying the discussion filter (discussion:) to the search query. + +![wit search](_img/03_29_12.png) + +##Pull Request filtering by people +It’s now easier to find pull requests! We’ve added new filtering options to allow you to find PRs created by a specific author or assigned to a specific reviewer. + +![pr filter](_img/03_29_15.png) + +Simply select a user from the author or reviewer filter, and the list will be updated to show only the PRs that match the filter.  + +![pr filtered](_img/03_29_16.png) + +##Reason required when bypassing pull request policies +Users that are bypassing pull request policies must now specify a reason. In the __Complete pull request__ dialog, users will see a new __Reason__ field, if they choose to bypass. + +![bypass dialog](_img/03_29_17.png) + +After entering the reason and completing the pull request, the message will be displayed in the __Overview__. + +![bypass message](_img/03_29_18.png) + +##Add and view Git tags +###View git tags on commits +If your team has been using Git tags to mark a specific point in the history of your repository, then your commits will now show the tags that you have created. You will be able view tags for a specific commit in the __commit list__ view and the __details__ page. + +![show tags](_img/03_29_01.png) + +###Add tags to commits +Instead of creating tags from the command line and pushing the tags to the repository, you can now simply go to a commit and add a tag. The tag creation dialog will also let you tag any other ref on the repo. + +![create tag details](_img/03_29_02.png) + +The commit list view also supports a context menu. No need to go to the __commit details__ page to create tags and create new branches. + +![create tag history](_img/03_29_03.png) + +![tag branch](_img/03_29_04.png) + +Coming soon: +* __Tags__ page that shows all tags in a repository +* Ability to delete tags + +##Updated Changeset and Shelveset pages +We have modernized the changeset and shelveset pages in TFVC. Both pages are made more accessible for our customers who use assistive technologies. The new pages also have a new header that contains the changeset title and associated information about the changeset, such as author details. + +![changeset page](_img/03_29_05.png) + +Both changeset and shelveset pages also host the a new markdown discussion control that will allow to type comments in markdown, @mention users, associate work items using #, and easily attach files and images. + +![changeset discussion](_img/03_29_06.png) + +##Import repositories from TFVC to Git +Users can migrate code from their TFVC repositories to Git repositories in the same account. To start migration, select __Import Repository__ from the repository selector drop-down. + +![import repo](_img/03_29_07.png) + +Individual folders or branches can be imported to the Git repository, or the entire TFVC repository can be imported (minus the branches). Users can also import up to 180 days of history.   + +![import repo complete](_img/03_29_08.png) + +## Multiple recipients included on the same email (preview) +With this feature enabled, the recipients of an email notification are combined on the TO line of a single email. Previously, individual emails were sent to each recipient. This made it difficult to know who else received the notification and to have a conversation about the activity over email. Also, if you are a member of multiple groups that receive a notification, you will now only get one email, instead of one per group. + +This feature applies to default (out of the box) and team subscriptions that are capable of targeting multiple recipients. For example, with this and the __Out of the box notifications__ feature enabled, all reviewers (except for those that have opt’ed out) of an updated pull request will be included on a single email. + +This feature can be enabled by an account admin by switching on the account-level __Combine email recipients__ via the __Preview features__ panel under the user menu. + +## Conditional build tasks +If you’re looking for more control over your build tasks, such as a task to clean things up or send a message when something goes wrong, we’re now offering four built-in choices for you to control when a task is run: + +![run this task menu](_img/03_29_19.png) + +If you are looking for more flexibility, such as a task to run only for certain branches, with certain triggers, under certain conditions, you can express your own **custom conditions**: + +``` +and(failed(), eq(variables['Build.Reason'], 'PullRequest')) +``` + +See [Specify conditions for running a task](https://www.visualstudio.com/en-us/docs/build/concepts/process/conditions). + +##Package Management adds npm READMEs and download button +You can now see the README of any npm package that includes a README.md in the package. READMEs can help your team document and share knowledge about your packages. + +You can also download any npm package using the __Download__ button in the command bar. + +![npm readme](_img/03_29_13.png) + +##Updated Package Management experience available to all accounts +After some additional tuning and some bug fixes, we’ve made the [updated __Package Management__ experience](https://www.visualstudio.com/en-us/articles/news/2017/feb-15-team-services#updated-package-management-experience) available to all accounts. Learn more about the update [here](https://www.visualstudio.com/en-us/docs/package/preview/updated-experience), or turn it on using the toggle in the __Packages__ hub. + +![package experience](_img/03_29_14.png) + +##Override template parameters in Azure resource group deployments +Currently in Azure resource group deployment tasks, users select the template.json and the parameters.json and provide the override parameter values in a text box, following a specific syntax. This experience is now enhanced so the template parameters are rendered in a grid which allows them to be edited and overridden. Users can access this feature by clicking the __...__ next to the override parameters field, which opens a dialog with the template parameters along with their default values and allowed values (if defined in the template and parameter .json files). This feature requires that CORS rules are enabled at the source. If template and parameter json files are in Azure storage blob, refer to [this documentation](https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Cross-Origin-Resource-Sharing--CORS--Support-for-the-Azure-Storage-Services?redirectedfrom=MSDN#understanding-cors-requests) to enable CORS. + +![Azure RD parameters](_img/03_29_10.png) + +##Continuous Delivery in the Azure portal supports any Git repo +You can now configure a continuous delivery (CD) workflow for the __Azure App Service__ no matter which Git repository you use to manage your code. Until now, you could select an App Service in the Azure Portal and setup continuous delivery for that service in just a few clicks, but only if you managed your code either in a VSTS Git repository or in GitHub. You can now get the same simple experience for any public or private Git repository, provided that repository is accessible from the Internet. With a few clicks in the Azure portal, you can set up a build and release definition in Team Services that will periodically check your Git repository for any changes, sync those changes, run an automated build and test, followed by a deployment to Azure App Service. As your needs evolve, you can customize these definitions to support multiple environments, more complex testing, or deployment upon manual approval. + +##Separation of duties for deployment requester and approvers +Previously, environment owners could restrict release creators from approving deployments of the release to an environment. Users could, however, manually start deployment of a release created by another user, and approve it themselves. + +We have now filled this gap by considering the deployment creator as a separate user role for deployments. Either the release creator or deployment creator can be restricted from approving the deployments. + +##Set maximum number of parallel deployments +This feature gives you control on how multiple pending releases are deployed into a given environment. For example, if your release pipeline performs validation of builds in a QA environment and the rate of generation of builds is faster than the rate of completion of the deployments, you may configure multiple agents and as many builds to get validated in parallel. That means each of the builds generated gets validated, and the wait time is dependent in the number of available agents. + +With this feature, we let you optimize validations by enabling you to perform validation on the _n_ most recent builds in parallel and cancel the older deployment requests. + +![parallel deployments](_img/03_29_11.png) + +##Q&A support for Marketplace extensions +Users can now post questions for any extension on the [__Marketplace__](https://marketplace.visualstudio.com/) from the __item details__ page and have one-on-one public conversations with publishers of that extension. Email notifications are sent to publishers (owners and contributor roles) and users when a question is posted or responded to. With this, users now have two distinct feedback channels: one to rate or review an extension and the other to ask questions and receive answers from publishers. + +![marketplace qa](_img/03_29_09.png) + +##Enhancements to display publisher’s terms, license, and privacy policy in Marketplace +It is now mandatory for all paid extensions on [__Marketplace__](https://marketplace.visualstudio.com/) to have a License and Privacy Policy. The License and Privacy Policy can be defined in the manifest file under the links property. More details are available at https://www.visualstudio.com/en-us/docs/integrate/extensions/develop/manifest. + +The License and Privacy Policy is also available in the __extension details__ page and presented when the user downloads the extension. + +##Improved sign-out +In the past, users have been unable to completely Sign out of their account when clicking __Sign out__. With these changes, users will be able to globally sign out from all Visual Studio resources. The vast majority of users should see no impact from this change, but we have found that some customers may experience issues signing into the product due to group policy–based security settings around trusted sites. This only affects sign in/out using Edge and Internet Explorer. Other browsers will be unaffected. + +During sign-in, if you are redirected back to the sign-in page again, you are likely encountering this problem and you can either switch browsers or add an entry into your __Internet Options trusted sites zone__. In addition, organizations experiencing this can correct the group policy for their entire organization in a similar manner. More information can be found in the [KB article](https://support.microsoft.com/en-us/help/4013279/can-t-sign-in-to-visual-studio-team-services-through-internet-explorer). + +We think these features will help improve your workflows while addressing feedback, but we would love to hear what you think. Please don’t hesitate to send a smile or frown through the web portal, or send other comments through the [Team Services Developer Community](https://developercommunity.visualstudio.com/spaces/21/index.html). As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool diff --git a/release-notes/2017/may-11-team-services.md b/release-notes/2017/may-11-team-services.md new file mode 100644 index 00000000000..df2297f2fd0 --- /dev/null +++ b/release-notes/2017/may-11-team-services.md @@ -0,0 +1,254 @@ +--- +title: Delivery plans and simple VM deployment – May 11 +description: VSTS release notes for May 11 2017 +ms.ContentId: bf9d6890-7a2f-4105-9687-61e406b1cdec +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.author: egeaney +author: egeaney +--- + +#VM deployment and Delivery Plans – May 11 + +**Note:** The features discussed in this post will be rolling out over the next three weeks. + +This sprint has our //Build conference deliverables in it, so it’s a big one, especially in the CI/CD space. + +One of our goals is to keep lowering the barrier to entry for automating your application deployment. The ease with which teams can deploy and validate their application is a huge part of how quickly they are able to ship. While our CI/CD system is completely open, by doing deep integrations with Azure we can make setting up deployments extremely simple. It also unlocks many opportunities for richer workflows that span both development and operations. To that end, we are continuing to strive to make VSTS + Azure the best end-to-end DevOps experience. + +This sprint brings a bunch of new capabilities toward realizing that goal. We have significantly expanded the breadth of app type we support: +* We now support using the automation agent on the VMs to which you deploy and using it to drive your application deployment. This has easily been our most requested feature for Release Management and we’re excited for it go live. +* We continue to give more and more focus to containers. This sprint, we introduce native support for Kubernetes and Service Fabric, the latter being a great option for Windows containers. +* We already have great support for deploying to Azure Web Apps, but we’ve expanded the app types we support with our native task to include Node, PHP & Linux Web Apps with containers. We’ve also expanded the entry point for setting up CI/CD with more options in the Azure portal configuration UI and introduced the ability to set up CI/CD for Azure Web Apps from the AZ CLI. + +Let’s dive in! + +##VM Deployment (Public Preview) +Release Management now supports robust out-of-the-box multi-machine deployment. You can now orchestrate deployments across multiple machines and perform rolling updates while ensuring high availability of the application throughout. + +Agent-based deployment capability relies on the same build and deployment agents. However, unlike the current approach where you install the build and deployment agents on a set of proxy servers in an agent pool and drive deployments to remote target servers, you install the agent on each of your target servers directly and drive rolling deployment to those servers. You can use the full task catalog on your target machines. + +A deployment group is a logical group of targets (machines) with agents installed on each of them. Deployment groups represent your physical environments, such as single-box Dev, multi-machine QA, and a farm of machines for UAT/Prod. They also specify the security context for your physical environments. + +![deployment groups](_img/05_10_22.png) + +You can use this against any VM that you register our agent with. We’ve also made it very easy to register with Azure with support for a Azure VM extension that auto-installs the agent when the VM spins up. We will automatically inherit the tags on the Azure VM when it’s registered in VSTS. + +Once you have a deployment group, you simply configure what you want us to execute on that deployment group. You can control what gets run on which machines using tags and control how fast or slow the rollout happens. + +![configure deployment groups](_img/05_10_23.png) + +When the deployment is run, the logs show the progression across the entire group of machines you are targeting. + +![deployment groups progress](_img/05_10_24.png) + +This feature is now an integrated part of Release Management. There are no additional licenses required to use it. + +##Azure virtual machine scale set deployment +Another common pattern being use for deployment is to create a full machine image for each version of the application and then deploy that. To make that easier we have anew __Build immutable machine image__ task uses Packer to generate a machine image after deploying applications and all the required prerequisites. The tasks takes either deployment script or packer configuration template to create the machine image and stores it in an Azure Storage account. This image can than be used for Azure Virtual Machine Scale Set deployments that work well for this type of immutable image deployment. + +##Built-in tasks for building and deploying container based applications +With this release we have pulled most of the tasks in our Docker extension into the product by default, improved them, and introduced a set of new tasks and templates for making a set of container scenarios easier. +* __Docker:__ Build, push, or run Docker images, or run a Docker command. This task can be used with Docker or Azure Container registry. You can now use our built-in service principal authentication with ACR to make it even easier to use. +* __Docker-Compose:__ Build, push, or run multi-container Docker applications. This task can be used with Docker or Azure Container registry. +* __Kubernetes:__ Deploy, configure, or update your Kubernetes cluster in Azure Container Service by running kubectl commands. +* __Service Fabric:__ Deploy containers to a Service Fabric Cluster. Service Fabric is the best choice today for running Windows Containers in the cloud. In fact, this is where more and more of VSTS itself is running each sprint. +  +##Azure Web App deployment updates +We have made many enhancements for Azure Web Applications: +* Azure App Service deployment task supports Node.js, Python applications to be deployed. +* Azure App Service deployment task supports deploying to Azure Web App for Linux using containers. +* Azure portal Continuous Delivery is expanded now support Node applications. + +We have also introduced CI/CD support into the latest version of the Azure CLI for configuring CI/CD. Here is an example: + +``` +az appservice web source-control config --name mywebapp --resource-group mywebapp_rg --repo-url https://myaccount.visualstudio.com/myproject/_git/myrepo --cd-provider vsts --cd-app-type AspNetCore +``` +##Install an SSH key during a build or release +A new preview task, __Install SSH Key (Preview)__, installs an SSH key prior to a build or release and removes it from the agent when the build or release completes. The installed key can be used for fetching code from a Git repository or submodules, running deployment scripts, or other activities that require SSH authentication. It will be improved in the future to support passphrases and other capabilities. + +## Retiring the old editor +Over the next few weeks we'll be retiring the old build definition editor. We’ve designed the new editor to provide a more intuitive experience, fix some pain points, and add new capabilities. We hope that you’ll find it easier to use templates, add tasks, and change settings. And now you can use process parameters to make it easier to specify the most important bits of data without having to go deep into your tasks. Learn more in this [blog post](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/10/announcing-general-availability-of-the-new-build-editor/). + +## Heads up: The hosted XAML controller is going away +On July 1st, 2017, we will stop supporting XAML Build controllers in our Team Services hosted build pool. You will still be able to do XAML-based builds, but you will need to set up your own (private) controller/agent. You can do this either in a cloud VM (such as Azure) or on your own on-premises hardware. To use private XAML controllers and agents, you need to have sufficient private pipelines in your account. For details, see the topic [I’m looking for the hosted XAML build controller. Where did it go?](https://www.visualstudio.com/en-us/docs/build/concepts/agents/hosted#im-looking-for-the-hosted-xaml-build-controller-where-did-it-go). + +Over time, you should be planning to migrate to our newer pipeline/task-based build version, where you will have access to the full range of capabilities, including hosted builds. + +## Tasks fail if Visual Studio 2017 is specified but not present on agent +The [Visual Studio Build](https://www.visualstudio.com/en-us/docs/build/steps/build/visual-studio-build) and [MSBuild](https://www.visualstudio.com/en-us/docs/build/steps/build/msbuild) tasks enable you to select a specific version of Visual Studio. Until now, if the **Visual Studio 2017** version was not available, these tasks would automatically pick the next available version. + +We’re changing this behavior. Now the build will fail if you select **Visual Studio 2017** but it is not present on the agent. + +We made this change for the following reasons: + +* Newer app types such as .NET Core do not compile with older build tools. They explicitly require Visual Studio 2017 or newer. + +* You get more consistent and predictable results when you use the same exact version of Visual Studio. + +* Whenever build tasks fall back, you may get compilation errors that are difficult to understand. + +> [!TIP] +> +> If you're using hosted agents on Team Services, make sure to select the **Hosted VS2017** queue. If you're using private agents, make sure to use a queue connected with a pool that has agents with Visual Studio 2017, and no agents that have only earlier versions of Visual Studio. + + +##Automatic linking from work items to builds +With this new setting in the build definition, users can track the builds that have incorporated their work without having to search through a large set of builds manually. Each successful build associated with the work item automatically appears in the development section of the work item form. + +To enable this feature, toggle the setting under __Options__ in your build definition. + +Note: the feature is only available for definitions building Team Services Git or TFVC repos and only through the new build definition editor. + +![wit build linking](_img/05_10_01.png) + +##Delivery Plans general availability +We are excited to announce that Delivery Plans is out of preview and is now included in the basic access level of VSTS. Delivery Plans is an organizational tool that helps users drive cross-team visibility and alignment by tracking work status on an iteration-based calendar. Users can tailor their plan to include any team or backlog level from across projects in the account. Furthermore, __Field Criteria__ on Plans enables users to further customize their view, while __Markers__ highlight important dates.  + +Delivery Plans is currently only available for VSTS; however, it will be included in the upcoming TFS 2017 Update 2 release.  + +Check out the marketplace page for [Delivery Plans](https://marketplace.visualstudio.com/items?itemName=ms.vss-plans) to learn more and install the extension. + +![delivery plans](_img/05_10_17.png) + +##Work item search general availability +Thank you all for installing and using the [Work Item Search preview](https://marketplace.visualstudio.com/items?itemName=ms.vss-workitem-search) from the marketplace. It has been one of our most highly rated extensions. With this release, we are making it easier for you to use work item search by making it a built-in feature of VSTS. + +You can get started with work item search using the search box: + +![wit search](_img/05_10_06.png) + +##Updated process customization experience +We have modernized our pages when customizing your process. The page now includes a breadcrumb in the top to clearly show the context you are in when editing the process or the work item types inside the process. + +![wit process](_img/05_10_18.png) + +Also, it’s much easier to start customizing your work item form. When you select __Customize__ from the context menu in a work item, we automatically create an inherited process for you (if you are not already using one) and bring you into the layout editor.  + +![wit process context menu](_img/05_10_19.png) + +Lastly, we have added a page that shows all fields in the collection. Previously, you could remove a field from a process, but that wouldn’t delete the field from your collection. You can now go to the Fields page, pick your field, and permanently delete it from the collection. + +![wit process fields](_img/05_10_20.png) + +##Modify out-of-the-box fields +We have made it possible for users to set a field from one of the OOB processes (Agile, Scrum, or CMMI) as required or set its default value. Previously, when the user edited one of these fields (such as Priority, Description, or Business Value), there were only two tabs on the Edit dialog: Definition and Layout. With the new release, we have added a new tab, __Options,__ that allows users to make these fields required, or give them default values. For example, users can make the __Business Value__ field required or default the __Priority__ field to "3". + +![wit oob fields](_img/05_10_21.png) + +##Files hub improvements +We’ve made several updates to the __Files__ hub to improve the viewing and editing experiences. + +For viewing, we’ve added pivots that let you view the README in the current folder, preview Markdown files, compare a file to a previous version, and view blame. + +![files viewing](_img/05_10_03.png) + +![files compare](_img/05_10_04.png) + +For editing, you can now preview your changes, easily add a comment, commit to a new branch, and link work items. + +![files editing](_img/05_10_05.png) + +##Git LFS file locking +We have added the Git LFS [file locking](https://github.com/git-lfs/git-lfs/blob/master/docs/api/locking.md) feature. This allows teams working with large, undiffable files to avoid losing work when two or more people attempt to edit the same file at once. Before anyone can begin editing the file, they take a lock, which notifies the server. When anyone else attempts to take a lock, the server rejects the request, letting the second person know that someone else is already working on that file. Please upgrade to [Git LFS 2.1](https://github.com/git-lfs/git-lfs/releases) or higher to use this feature. + +##New branch policies configuration experience +We’ve redesigned the branch policies configuration experience and added some great new capabilities. One of the most powerful features is the ability to configure policies for branch folders. You can do this from the __Branches__ view by selecting a branch folder and choosing __Branch policies__ from the context menu.   + +![configure branch policies](_img/05_10_10.png) + +This will open the new policies configuration UX, where you can configure policies that apply to all of the branches in the branch folder.   + +![policies page](_img/05_10_11.png) + +If you’re using the build policy, you can now configure multiple builds for a single branch. There are also new options to specify the type of trigger—automatic or manual. Manual triggers are useful for things like automated test runs that might take a long time to run, and you only really need to run once before completing the pull request. The build policy also has a display name that is useful if you’re configuring multiple builds. + +![manual build](_img/05_10_12.png) + +Once you’ve configured a manually triggered policy, users can run it by selecting the __Queue build__ option in the __Policies__ section for the pull request. + +![manual build queue](_img/05_10_13.png) + +For required reviewer policies, we added the ability for administrators to specify a note that will be appended to the pull request timelime when the policy applies. + +![required reviewer dialog](_img/05_10_14.png) + +![required reviewer note](_img/05_10_15.png) + +##Share pull requests with teams +The __Share Pull Request__ action is a handy way to notify reviewers. In this release, we’ve added support for teams and groups, so you can notify everyone involved the pull request in a single step. + +![share pull requests with team](_img/05_10_07.png) + +##Default notifications for PR comments +Stay up to date with the conversations happing in your PRs with the new comment notifications. For PRs that you've created, you will automatically be notified any time a user adds a new comment thread or replies to an existing thread. When you comment on another user's PR, you'll be notified about any future replies to comment threads that you create or reply to.   + +![default PR notifications](_img/05_10_08.png) + +These notifications are available as part of the out of the box subscriptions, and are configurable on the __Notifications__ settings page.  + +##Improved team pull request notifications +Teams that are using Azure Active Directory (Azure AD) with Team Services to manage their groups will now have the option to use those groups with pull requests. When you create a pull request, you can assign Azure AD groups to it. They’re added just like any other reviewer or group. + +![AAD notification](_img/05_10_09.png) + +Azure AD groups behave like other groups when voting on pull requests. Any member of the group who votes on a pull request will have their vote counted as a vote for the group. If you’re using branch policies and have configured specific reviewers for the repo, you can now use Azure AD groups in addition to Team Services groups. + +When an Azure AD group is added to review a pull request, that group will also be notified about the pull request activity using the group’s email address.   + +##New tree view control +The Pull Request Files view, Git commit details, Git push details, TFVC Shelveset details, TFVC Changeset details, TFVC Changesets hub and Git history hub have been updated with a new tree view control. The tree view has a few usability improvements. First, we’ve changed the view to show a condensed tree view that automatically collapses empty folder nodes, maximizing the number of files that are in view.   + +The tree also shows comments in a more compact way. Files with comments show a child item for each comment thread, with the avatar indicating the user that created the thread. New comment threads and those with replies are indicated by the blue dot, and the count of replies is summarized with a count. + +![new tree view](_img/05_10_16.png) + +##Maven for Package Management (Public Preview) +Java developers share components by packaging up their code in Maven artifacts (the Java equivalent of a NuGet package). Team Services customers needing a place to host Maven artifacts used to have to use third-party services, like Nexus or Artifactory, to meet their needs.  We’re proud to announce that [Team Services Package Management](https://marketplace.visualstudio.com/items?itemName=ms.feed) now supports hosting Maven artifacts! Check out our [getting started guide](https://www.visualstudio.com/en-us/docs/package/preview/maven-docs). + +##NuGet Restore, Command, and Tool Installer build tasks +We’ve made major updates to the __NuGet Installer__ (now called __NuGet Restore__) task, and added two new NuGet tasks: __NuGet Command__ and __NuGet Tool Installer__. Most notably, the __NuGet Command__ and __NuGet Restore__ tasks now use nuget.exe 4.0.0 by default. + +The __NuGet Tool Installer__ puts you in control of the version of NuGet used by both the __NuGet Restore__ and __NuGet Command__ tasks. By default, the tasks will use a well-known, tested version. If you want to override that, simply add a __NuGet Tool Installer__ step before your other NuGet build steps. + +__NuGet Restore__ is now optimized for the most common scenario of restoring packages before a Visual Studio Build step. It also has better support for small projects that share a single NuGet feed: you can now pick a Team Services feed and have it added to an auto-generated NuGet.Config. + +##Combined email recipients for notifications now enabled by default +Recipients for the same email notification are now included together on the to: line and sent a single email. Previously, individual emails were sent to each recipient. This made it difficult to know who else received the notification and to have a conversation about the event over email. This feature applies to out-of-the-box as well as team subscriptions that are capable of targeting multiple recipients. For example, all reviewers of a pull request are now sent a single email when a change is made to the pull request. + +This feature is on by default, but can be disabled by an account administrator by switching off the account-level __Combine email recipients__ feature via the __Preview features__ panel under the user profile menu.  + +Learn more about [combining email recipients](https://www.visualstudio.com/en-us/docs/collaborate/manage-team-notifications). + +##Out-of-the-box notifications out of preview +The out-of-the-box notifications feature is now out of preview and available on all accounts. Users and teams are now automatically notified via email when there is activity in the account directly relevant to them, such as: + +* when a work item is assigned to a user +* when a user or team is added as a reviewer to a pull request +* when a user or team is a reviewer on a pull request that is updated +* when another user responds to a pull request comment +* when a build requested by a user completes +* when an extension is installed or requested (admins only) + +Users can unsubscribe from any of these subscriptions by going to Notification settings under the user profile menu and then switching off the appropriate toggle(s). Note: These default subscriptions apply to the current account only. + +An account admin can disable one or more of these automatic subscriptions by navigating to the account-level __Notifications__ hub under the settings gear. Any of these subscriptions can be disabled by clicking __Disable__ under the "..." action. Once a subscription is disabled, it will no longer appear for users in their personal notification settings page. + +Learn more about [out-of-the-box notifications](https://www.visualstudio.com/en-us/docs/collaborate/manage-personal-notifications#out-of-the-box-notifications). + +##Enhanced publisher experience in the Marketplace +Publishers of free extensions will now have access to new acquisition data, including aggregated acquisition in the selected time period to overall acquisition, daily trend on extension page views with acquisition, uptake on Team Services and TFS Connected, and conversion from page views to acquisition. This data is also available for download in XLS format to help you create your own custom reports. + +The __Q&A__ tab will give you a snapshot of all questions by your users, with the nonresponded queries on the top. You can take actions by replying or editing a previous response and better manage engagement with your extension users.  + +##Owner and contributor roles can purchase through the Marketplace +We added the ability for Azure subscription owner and contributor roles to purchase through the Visual Studio Marketplace. Previously, only Azure subscription admins and co-admins could purchase. This required delegating full subscription admin rights and was only possible via the [classic Azure portal](https://manage.windowsazure.com/). Now, by adding a user as an owner or contributor from the [new Azure portal](https://portal.azure.com/), they can make purchases for your team through the Marketplace. + +![marketplace](_img/05_10_25.png) + +We would love to hear what you think about these features. Please don’t hesitate to send a smile or frown through the web portal, or send other comments through the [Team Services Developer Community](https://developercommunity.visualstudio.com/spaces/21/index.html). As always, if you have ideas on things you’d like to see us prioritize, head over to [UserVoice](https://visualstudio.uservoice.com/forums/330519-vso) to add your idea or vote for an existing one. + +Thanks, + +Jamie Cool diff --git a/release-notes/TOC.md b/release-notes/TOC.md new file mode 100644 index 00000000000..5169a36219f --- /dev/null +++ b/release-notes/TOC.md @@ -0,0 +1,109 @@ +# [Features timeline](index.md) +# 2017 +## [August 28](2017/aug-28-team-services.md) +## [August 4](2017/aug-04-team-services.md) +## [July 14](2017/jul-14-team-services.md) +## [June 22](2017/jun-22-team-services.md) +## [June 1](2017/jun-01-team-services.md) +## [May 11](2017/may-11-team-services.md) +## [April 19](2017/apr-19-team-services.md) +## [March 29](2017/mar-29-team-services.md) +## [March 8](2017/mar-08-team-services.md) +## [February 15](2017/feb-15-team-services.md) +## [January 25](2017/jan-25-team-services.md) +## [January 5](2017/jan-05-team-services.md) +# 2016 +## [November 23](2016/nov-23-team-services.md) +## [November 16](2016/nov-16-team-services.md) +## [November 2](2016/nov-02-team-services.md) +## [October 12](2016/oct-12-team-services.md) +## [September 21](2016/sep-21-team-services.md) +## [September 2](2016/sep-02-team-services.md) +## [August 17](2016/aug-17-team-services.md) +## [July 29](2016/jul-29-team-services.md) +## [July 7](2016/jul-07-team-services.md) +## [June 17](2016/jun-17-team-services.md) +## [June 1](2016/jun-01-team-services.md) +## [May 6](2016/may-06-team-services.md) +## [April 13](2016/apr-13-team-services.md) +## [March 24](2016/mar-24-team-services.md) +## [March 3](2016/mar-03-team-services.md) +## [February 16](2016/feb-16-team-services.md) +## [January 25](2016/jan-25-team-services.md) +# 2015 +## [December 10](2015/dec-10-team-services.md) +## [November 24](2015/nov-24-team-services.md) +## [November 18](2015/nov-18-team-services.md) +## [October 30](2015/oct-30-team-services.md) +## [October 8](2015/oct-08-team-services.md) +## [September 18](2015/sep-18-team-services.md) +## [August 26](2015/aug-26-team-services.md) +## [August 7](2015/aug-07-team-services.md) +## [July 17](2015/jul-17-team-services.md) +## [July 7](2015/jul-07-team-services.md) +## [June 3](2015/jun-03-team-services.md) +## [May 15](2015/may-15-team-services.md) +## [May 11](2015/may-11-team-services.md) +## [April 27](2015/apr-27-team-services.md) +## [April 24](2015/apr-24-team-services.md) +## [April 22](2015/apr-22-team-services.md) +## [April 10](2015/apr-10-team-services.md) +## [March 27](2015/mar-27-team-services.md) +## [March 10](2015/mar-10-team-services.md) +## [February 18](2015/feb-18-team-services.md) +## [January 27](2015/jan-27-team-services.md) +# 2014 +## [December 17](2014/dec-17-team-services.md) +## [December 2](2014/dec-02-team-services.md) +## [November 4](2014/nov-04-team-services.md) +## [October 28](2014/oct-28-team-services.md) +## [October 14](2014/oct-14-team-services.md) +## [September 23](2014/sep-23-team-services.md) +## [September 4](2014/sep-04-team-services.md) +## [August 27](2014/aug-27-team-services.md) +## [August 18](2014/aug-18-team-services.md) +## [July 21](2014/jul-21-team-services.md) +## [July 1](2014/jul-01-team-services.md) +## [June 10](2014/jun-10-team-services.md) +## [May 20](2014/may-20-team-services.md) +## [May 12](2014/may-12-team-services.md) +## [April 3](2014/apr-03-team-services.md) +## [March 18](2014/mar-18-team-services.md) +## [February 28](2014/feb-28-team-services.md) +## [February 10](2014/feb-10-team-services.md) +## [January 22](2014/jan-22-team-services.md) +# 2013 +## [December 11](2013/dec-11-team-services.md) +## [November 13](2013/nov-13-team-services.md) +## [November 8](2013/nov-08-team-services.md) +## [October 21](2013/oct-21-team-services.md) +## [October 17](2013/oct-17-team-services.md) +## [September 30](2013/sep-30-team-services.md) +## [September 9](2013/sep-09-team-services.md) +## [August 19](2013/aug-19-team-services.md) +## [July 29](2013/jul-29-team-services.md) +## [July 10](2013/jul-10-team-services.md) +## [June 26](2013/jun-26-team-services.md) +## [June 19](2013/jun-19-team-services.md) +## [June 3](2013/jun-03-team-services.md) +## [May 28](2013/may-28-team-services.md) +## [May 13](2013/may-13-team-services.md) +## [April 25](2013/apr-25-team-services.md) +## [March 22](2013/mar-22-team-services.md) +## [March 4](2013/mar-04-team-services.md) +## [February 11](2013/feb-11-team-services.md) +## [January 30](2013/jan-30-team-services.md) +## [January 21](2013/jan-21-team-services.md) +## [January 9](2013/jan-09-team-services.md) +## [January 7](2013/jan-07-team-services.md) +# 2012 +## [December 10](2012/dec-10-team-services.md) +## [November 19](2012/nov-19-team-services.md) +## [October 31](2012/oct-31-team-services.md) +## [October 29](2012/oct-29-team-services.md) +## [October 8](2012/oct-08-team-services.md) +## [September 17](2012/sep-17-team-services.md) +## [August 27](2012/aug-27-team-services.md) +## [August 13](2012/aug-13-team-services.md) +## [August 6](2012/aug-06-team-services.md) +# [Subscribe to Updates](https://www.visualstudio.com/team-services/updates/?feed=product_updates) \ No newline at end of file diff --git a/release-notes/docfx.json b/release-notes/docfx.json index c967e70194a..884a55e4a2e 100644 --- a/release-notes/docfx.json +++ b/release-notes/docfx.json @@ -1,37 +1,38 @@ -{ - "build": { - "content": [ - { - "files": [ - "**/*.md" - ], - "exclude": [ - "**/obj/**", - "**/includes/**", - "README.md", - "LICENSE", - "LICENSE-CODE", - "ThirdPartyNotices" - ] - } - ], - "resource": [ - { - "files": [ - "**/*.png", - "**/*.jpg" - ], - "exclude": [ - "**/obj/**", - "**/includes/**" - ] - } - ], - "overwrite": [], - "externalReference": [], - "globalMetadata": {}, - "fileMetadata": {}, - "template": [], - "dest": "release-notes" - } +{ + "build": { + "content": [ + { + "files": [ + "**/*.md" + ], + "exclude": [ + "**/obj/**", + "**/includes/**", + "README.md", + "LICENSE", + "LICENSE-CODE", + "ThirdPartyNotices" + ] + } + ], + "resource": [ + { + "files": [ + "**/*.png", + "**/*.jpg", + "**/*.gif" + ], + "exclude": [ + "**/obj/**", + "**/includes/**" + ] + } + ], + "overwrite": [], + "externalReference": [], + "globalMetadata": {}, + "fileMetadata": {}, + "template": [], + "dest": "release-notes" + } } \ No newline at end of file diff --git a/release-notes/index.md b/release-notes/index.md new file mode 100644 index 00000000000..cb8576e4897 --- /dev/null +++ b/release-notes/index.md @@ -0,0 +1,3289 @@ +--- +title: Team Services Feature Updates +description: VSTS feature updates and release notes +ms.prod: vs-devops-alm +ms.technology: vs-devops-articles +ms.contentid: 96c3bb9f-b3c8-4093-9d2a-a18c6e97c859 +--- + +# VSTS Features Timeline + +### Features under development + +This feature list is a peek into our roadmap. It identifies some of the significant features we are currently working on and a rough timeframe for when you can expect to see them. It is not comprehensive but is intended to provide some visibility into key investments. Most features are linked to a blog post and/or UserVoice entry where you can learn more and comment. These features and dates are the current plans at this time and are subject to change. The “Planned Date” reflects when the feature will be available on VSTS, the “Server” column reflects when it will be available in TFS on-premises, if applicable, and the “Area” column reflects the area of the product the feature aligns with most. + +<table> + <thead> + <tr><th>Planned Date</th> + <th>Feature</th> + <th>Server</th> + <th>Area</th> + </tr> + </thead> + <tbody> + <tr><td>2017 Q3</td><td>[VSTS Work Item Process – Rules](https://blogs.msdn.microsoft.com/visualstudioalm/2017/01/26/team-services-process-customization-roadmap-jan-2017/)</td><td>--</td><td>Work</td></tr> + <tr><td>2017 Q3</td><td>Work Items – Query page refresh</td><td>TBD</td><td>Work</td></tr> + <tr><td>2017 Q3</td><td>Work Items – Favoriting Backlogs, Boards, and Sprints</td><td>TBD</td><td>Work</td></tr> + <tr><td>2017 Q3</td><td>Work Items – New project work items hub</td><td>TBD</td><td>Work</td></tr> + <tr><td>2017 Q3</td><td>Code search – indexing of multiple Git branches</td><td>TBD</td><td>Code</td></tr> + <tr><td>2017 Q3</td><td>Git – Fork a repository and create pull requests for upstream</td><td>TFS vNext</td><td>Code</td></tr> + <tr><td>2017 Q3</td><td>Git – Project and repo policies for file size and casing</td><td>TBD</td><td>Code</td></tr> + <tr><td>2017 Q3</td><td>Git – Improved Branch Updates design and searching for deleted branches</td><td>TFS vNext</td><td>Code</td></tr> + <tr><td>2017 Q3</td><td>[CI/CD – Concurrent pipelines](https://www.visualstudio.com/docs/build/concepts/licensing/concurrent-pipelines-ts#pipeline-issues) – design improvement to not consume a pipeline until an agent is assigned</td><td>TFS vNext</td><td>Build</td></tr> + <tr><td>2017 Q3</td><td>CI – Multi-phase builds, shared variable groups, and pause processing of a build definition</td><td>TFS vNext</td><td>Build</td></tr> + <tr><td>2017 Q3</td><td>[Agent-based deployment in Release Management](https://blogs.msdn.microsoft.com/visualstudioalm/2017/03/03/deployment-groups/) – UX improvements, Sharing of VMs</td><td>TFS vNext</td><td>Release</td></tr> + <tr><td>2017 Q3</td><td>[Release Management – New RM editor and templates](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/26/new-release-definition-editor-in-team-services/)</td><td>TFS vNext</td><td>Release</td></tr> + <tr><td>2017 Q3</td><td>Release Management improved orchestration – Better notifications on Releases, Branch triggers with include/exclude filters, and ag based triggers and Selective Artifacts</td><td>TBD</td><td>Release</td></tr> + <tr><td>2017 Q3</td><td>Release Management better traceability – Integration with Jenkins, Code, Work, and Package hubs</td><td>TBD</td><td>Release</td></tr> + <tr><td>2017 Q3/Q4</td><td>Azure Portal Continuous Delivery support – Azure App Services (AppTypes/Repos), VMs, and ACS Containers</td><td>TBD</td><td>Release</td></tr> + <tr><td>2017 Q3</td><td>Azure Deployments first class support and task improvements – Kubernetes, VMScaleSet, Azure Functions, and Service Fabric Clusters</td><td>TBD</td><td>Release</td></tr> + <tr><td>2017 Q3</td><td>Package Management – Upstreams sources for public registries (NuGet.org, Maven Central, etc.) and VSTS feeds across the organization and/or account</td><td>TBD</td><td>Package</td></tr> + <tr><td>2017 Q3</td><td>Package Management – Maven general availability</td><td>TFS vNext</td><td>Package</td></tr> + <tr><td>2017 Q3</td><td>Automated Testing – Ability to configure a batch size for better distribution across agents and frequent results publishing</td><td>TFS vNext</td><td>Test</td></tr> + <tr><td>2017 Q3</td><td>Automated Testing – Parallel testing on multiple agents in a pool in build</td><td>TFS vNext</td><td>Test</td></tr> + <tr><td>2017 Q3</td><td>Automated Testing – Support for running ordered tests and webtests in build/release pipelines</td><td>TFS vNext</td><td>Test</td></tr> + <tr><td>2017 Q3</td><td>Automated Testing – Re-run failed tests in Build and RM</td><td>TFS vNext</td><td>Test</td></tr> + <tr><td>2017 Q3</td><td>Automated Testing – Automation agents do not need Visual Studio to run tests (test platform acquisition through alternate means)</td><td>TFS vNext</td><td>Test</td></tr> + <tr><td>2017 Q3</td><td>Manual and Exploratory Testing (XT) – Show requirements based suites (RBS) on Kanban and enable Basic XT users to provide feedback</td><td>TBD</td><td>Test</td></tr> + <tr><td>2017 Q3</td><td>Manual and XT – XT support for Edge</td><td>TBD</td><td>Test</td></tr> + <tr><td>2017 Q3</td><td>Reporting – Burndown and Burnup widget</td><td>TBD</td><td>Insights</td></tr> + <tr><td>2017 Q3</td><td>[Improved user management – bulk editing](https://blogs.msdn.microsoft.com/visualstudioalm/2017/04/04/team-services-large-account-user-management-roadmap-april-2017/)</td><td>TBD</td><td>Shared</td></tr> + <tr><td>2017 Q3</td><td>[Licensing users and extensions using AAD groups](https://blogs.msdn.microsoft.com/visualstudioalm/2017/04/04/team-services-large-account-user-management-roadmap-april-2017/)</td><td>TBD</td><td>Shared</td></tr> + <tr><td>2017 Q3</td><td>[Support for Cloud Solution Providers in managing VSTS accounts and purchases](https://blogs.msdn.microsoft.com/visualstudioalm/2017/05/09/cloud-solution-provider-purchase-from-visual-studio-marketplace-roadmap/)</td><td>TBD</td><td>Shared</td></tr> + <tr><td>2017 Q3</td><td>[Multiple accounts per “organization”](http://blogs.msdn.com/b/visualstudioalm/archive/2016/01/11/how-we-plan-to-enable-creating-multiple-collections-per-account.aspx)</td><td>--</td><td>Shared</td></tr> + <tr><td>2017 Q3</td><td>[Administration – Improved Alternate Authentication experience](https://blogs.msdn.microsoft.com/devops/2017/07/14/improved-alternate-authentication-experience/)</td><td>TBD</td><td>Shared</td></tr> + <tr><td>2017 Q3</td><td>Notifications – CC/BCC (carbon copy) recipient support for email notifications</td><td>TBD</td><td>Shared</td></tr> + <tr><td>2017 Q3</td><td>Simplified experience to more easily acquire VSTS extensions and Visual Studio subscriptions</td><td>--</td><td>Marketplace</td></tr> + <tr><td>2017 Q4</td><td>Work Items – Markdown support</td><td>TBD</td><td>Work</td></tr> + <tr><td>2017 Q4</td><td>Updated Windows shell extension for TFVC</td><td>--</td><td>Code</td></tr> + <tr><td>2017 Q4</td><td>CI/CD – Private Azure agent pools for Build and RM – provide your own image, we manage the lifetime</td><td>--</td><td>Build</td></tr> + <tr><td>2017 Q4</td><td>CI – YAML builds (config as code)</td><td>TFS vNext</td><td>Build</td></tr> + <tr><td>2017 Q4</td><td>VSTS Symbol Server public preview</td><td>TBD</td><td>Build</td></tr> + <tr><td>2017 Q4</td><td>Build – Bring your own subscription</td><td> </td><td>Build</td></tr> + <tr><td>2017 Q4</td><td>Greenlighting – Azure monitoring integration for automated deployments</td><td> </td><td>Release</td></tr> + <tr><td>2017 Q4</td><td>Package Management – CI/CD improvements including release views automation and CI versioning for packages</td><td>TBD</td><td>Package</td></tr> + <tr><td>2017 Q4</td><td>Package Management – Retention policies and package statistics</td><td>TBD</td><td>Package</td></tr> + <tr><td>2017 Q4</td><td>Automated Testing – Support for .NET Core</td><td>TFS vNext</td><td>Test</td></tr> + <tr><td>2017 Q4</td><td>Cloud Load Testing – Integration with Application insights (any subscription)</td><td>--</td><td>Test</td></tr> + <tr><td>2017 Q4</td><td>Public preview for cloud reporting experience</td><td>--</td><td>Insights</td></tr> + <tr><td>2017 Q4</td><td>[TFS Data Import Service for VSTS](https://www.visualstudio.com/articles/migration-overview) general availability</td><td>--</td><td>Shared</td></tr> + <tr><td>2017 Q4</td><td>Encryption at rest for disks used by code and work item search</td><td>--</td><td>Shared</td></tr> + <tr><td>2017 Q4</td><td>Publisher certification process</td><td>--</td><td>Marketplace</td></tr> + </tbody> +</table> + +### Current features + +The features timeline lists significant features delivered to VSTS and the corresponding version of Team Foundation Server. +Versions in the server column are linked to the appropriate download location. You can also +[view the build numbers for each version](#build_numbers). + +<table> + <thead> + <tr> + <th>Service</th> + <th>Feature</th> + <th>Server</th> + </tr> + </thead> + <tbody> + <tr> + <td rowspan="29">[28 Aug 2017](/articles/news/2017/aug-28-team-services)</td> + <td>Work Items hub</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Customizable work item rules</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Mentioned support for the My work items page</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Custom Fields and Tags in Notifications</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Inline add on Delivery Plans</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Forks</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>File minimap</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Bracket matching</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Toggle white space</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Updated email templates for push notification</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Complete Work Items settings</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Find lost commits due to a Force Push</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Update default repo permissions for admins</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>CI builds for Bitbucket repositories</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Pause build definitions</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Task input validations support</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>New Release Definition Editor general availability</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Enhancements in new Release Definition editor</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Release Template Extensibility</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Conditional release tasks and phases</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Approve multiple environments</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Requests history for service endpoints</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Upload attachments to test runs and test results</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Test batching</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>JMeter 3.2 for load testing</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Streamlined user management general availability</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Adding User to Projects and Teams</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Graph REST APIs in Public Preview</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Profile Card</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td rowspan="30">[4 Aug 2017](/articles/news/2017/aug-04-team-services)</td> + <td>Copy work item processes</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Updated order of the last column in the Kanban board</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>See the projects using a process</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Filtering on Kanban board</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Wiki in Public Preview</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Improvements in Wiki edit experience</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Revert a Wiki revision</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Create a Wiki page from a broken link</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Setting to turn off web editing for TFVC repos</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Identify stale branches</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Search for a deleted branch and re-create it</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Branch updates page is now Pushes</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Retain filename when moving from Files to Commits</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Pull Request Status Extensibility in Public Preview</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Let contributed build sections control section visibility</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Variable group support</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>dotnet task supports authenticated feeds, web projects</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Ansible Extension on Marketplace</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Variable groups, Retention, and Options tab now available in the new Release Definition Editor</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Release status badge in Code hub</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Enhancements to Build definition menu when adding artifacts</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Revert your release definition to older version</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Exploratory testing traceability improvements for work item links, iterations, and area paths</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Screenshot and annotation support for desktop apps with Chrome browser for manual tests</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Filters for Test Case work items in Test Plans and Suites in Test Hub</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Test trend charts for Release Environments and Test Runs</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Markdown formatting support for Test Run and Test Result comments</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Add link to existing bug for a failing test</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Re-order favorite groups</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Enable Visual Studio Code direct install option in Marketplace</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="20">[14 Jul 2017](/articles/news/2017/jul-14-team-services)</td> + <td>Migrate team projects between two inherited processes with the same parent</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Filtering on Backlogs, Sprints, and Queries</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Expand to show empty fields on a Kanban card</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Automatically complete work items when completing pull requests</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Policies: Reset votes on push/new iteration</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Notifications: Great email templates for pull request workflows</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Pull request details: View original diff for code comments</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Task lists in pull request descriptions and comments</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Ability to "Like" comments in pull requests</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Pull request build variables</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Faster publishing of artifacts from Windows agents to file shares</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Code information in Release with Jenkins CI</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Task group References</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Task group versioning</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Multi Configuration support in Server Side (Agentless) tasks</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Task group import and export</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>New Release Definition Editor (Preview)</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Velocity Widget for the Analytics Extension</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Notifications: Give team admins control over the delivery of notifications targeting the team</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Constraints on SVG images, screenshots and badges</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="24">[22 Jun 2017](/articles/news/2017/jun-22-team-services)</td> + <td>Fields can be shared across processes</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Work item type icons</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Show/hide work item field borders</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Allow extensions to block work item save</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Collapsible pull request comments</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Improved workflow when approving with suggestions</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Filter pull request tree by file name</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Pull request callout on commit details page becomes richer</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Filter tree view in Code</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Git tags web view</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Export and import build definitions</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Visual Studio latest and hosted agent pools</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Build definition menu on build summary page</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Release Triggers: Continuous deployment for changes pushed to a Git repository</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Enhancements to Server tasks</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Consume Secrets from an Azure Key Vault as variables</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Package Management experience updates</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Package build task updates</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Project Collection Administrators can link/make initial purchase</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Deep link to easily remove your spending limit during a Marketplace purchase</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Improvements to OAuth permissions page</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Streamlined user management (preview)</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Enhanced Publisher experience with Sales Transactions for Paid extensions</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Setup Power BI Content Pack</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="19">[1 Jun 2017](/articles/news/2017/jun-01-team-services)</td> + <td>Mobile work item form general availability</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>New widgets for Analytics extension</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Path filtering support for Git notifications</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>More pull request comments filtering options</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Search for a commit in branches starting with a prefix</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Visual Studio Enterprise benefit for pipelines in Team Services</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Work with secure files such as Apple certificates</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Extensions with build templates</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Deprecate a task in an extension</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Task group references</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Variables Support in Manual Intervention task</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Control releases to an environment based on the source branch</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Release Triggers for Git repositories as an artifact source</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>On-demand triggering of automated tests</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Acquisition data in Extension Hub for Marketplace publishers</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Q&A for Marketplace publishers</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>GitHub and Custom Q&A support for marketplace extensions</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Retain VSTS identity when navigating to Marketplace from VSTS</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>AAD sign in address rename</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="25">[11 May 2017](/articles/news/2017/may-11-team-services)</td> + <td>VM deployment (Public Preview)</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Azure virtual machine scale set</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Built-in tasks for building and deploying container based applications</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Azure Web App deployment updates</td> + <<td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Install an SSH key during a build or release</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Retiring the old editor</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Tasks fail if Visual Studio 2017 is specified but not present on agent</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Automatic linking from work items to builds</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Delivery Plans general availability</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Work item search general availability</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Updated process customization experience</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Modify out of the box fields</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Files hub improvements</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Git LFS file locking</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>New branch policies configuration experience</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Share pull requests with teams</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Default notifications for PR comments</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Improved team PR notifications</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>New tree view control</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Maven for Package Management (Public Preview)</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>NuGet Restore, Command, and Tool Installer build tasks</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Combined email recipients for notifications now enabled by default</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Out of the box notifications out of preview</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Enhanced publisher experience in the Marketplace</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Owner and contributor roles can purchase through the Marketplace</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="19">[19 Apr 2017](/articles/news/2017/apr-19-team-services)</td> + <td>Delivery timeline markers</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Visualize your git repository</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Git commit comments use the new discussion control</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Improved package list</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Build tool installers</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>SSH deployment improvements</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Deploy to Azure Government Cloud</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Timeout enhancements for the Manual Intervention task</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Release Logs Page Improvements</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Azure App Service task enhancements and templates for Python and PHP applications</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Deploy Java to Azure Web Apps</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Java code coverage enhancements</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Maven and SonarQube improvements</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Improved Jenkins integration</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Google Play extension enhancements</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>iOS DevOps enhancements</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Contact extension customers</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Marketplace feedback excluded from ratings</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Reports for Marketplace Publishers</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="17">[29 Mar 2017](/articles/news/2017/mar-29-team-services)</td> + <td>Work item search for discussions</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Pull Request filtering by people</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Reason required when bypassing pull request policies</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Add and view Git tags</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Updated Changeset and Shelveset pages</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Import repositories from TFVC to Git</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Multiple recipients included on the same email (preview)</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Conditional build tasks</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Package Management adds npm READMEs and download button</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Updated Package Management experience available to all accounts</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Override template parameters in Azure resource group deployments</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Continuous Delivery in the Azure portal supports any Git repo</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Separation of duties for deployment requester and approvers</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Set maximum number of parallel deployments</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Q&A support for Marketplace extensions</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Enhancements to display publisher’s terms, license, and privacy policy in Marketplace</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Improved sign-out</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="14">[8 Mar 2017](/articles/news/2017/mar-08-team-services)</td> + <td>Delivery Plans field criteria</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>New mobile discussion experience</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Optimized mobile identity picker</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Customized backlog levels</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Custom work item identity fields</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Pull Request improvements for teams</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>New policy for no active comments</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Build agent upgrade status</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Github pull request builds</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Keep track of your free hosted agent minutes</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Out of the box notifications enabled by default</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Getting notified when extensions are installed, require attention, and more</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Release level approvals</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>.NET Core tasks support project files</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td rowspan="13">[15 Feb 2017](/articles/news/2017/feb-15-team-services)</td> + <td>Improved support for team PR notifications</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Improved CTAs for PR author and reviewers</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Actionable comments</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Updates view shows rebase and force push</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Improved commit filtering</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Maintenance for working directories</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Agent selection improvement</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Run tests using Agent Phases</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Multiple versions of Extension tasks</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Extension management permissions and new email notifications</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Updated Package Management experience</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Support for AAD conditional access</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Pipelines queue</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td rowspan="17">[25 Jan 2017](/articles/news/2017/jan-25-team-services)</td> + <td>Delivery Plans</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Mobile work item form preview</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Build editor preview</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Repo admin permission changes</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Branch policy improvements</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>PR comment improvements</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Discussion control toolbar</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>View PRs for a commit</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Release views in Package Management</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>npmjs.com upstream now caches packages</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Run tests built using Visual Studio 2017</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Track changes to test steps</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Sorting on work item search results</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td>Linking to changelog on the Marketplace</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Release action in Build summary</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Security for variable groups</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Web app deployment history in Azure portal</td> + <td style="background:rgb(155, 192, 230);">2017.2</td> + </tr> + <tr> + <td rowspan="21">[5 Jan 2017](/articles/news/2017/jan-05-team-services)</td> + <td>New account and project home pages</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Attachments in PR discussions</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Support file exclusions in the required reviewer policy</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Highlight the PRs that have updates</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Branch policy for PR merge strategy</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Expose merge conflict information</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Team Room Deprecation Annoucement</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>New notification settings experience</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>New delivery options for team subscriptions</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Out of the box notifications (preview)</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Updated hosted build image</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Firefox support for Test & Feedback extension</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Favorites for Test Plans</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Test Impact Analysis for managed automated tests</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>SonarQube MSBuild tasks</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Improved experience for Search results</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Release Management parallel execution</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Inline service endpoints</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Multiple release triggers with branch and tag filters</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Set defaults for artifact sources in RM</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Variable groups support in RM</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td rowspan="14">[23 Nov 2016](/articles/news/2016/nov-23-team-services)</td> + <td>Search for commits in branches</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Search for a file or folder in commit history</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Follow a pull request</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Restart pull request merge</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Completion blocked on rejected pull requests</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Markdown in pull request description</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Task versioning for Build and Release definitions</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Hosted Linux pool preview</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Build and deploy Docker apps to Azure more easily</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>New licensing model for Build and Release Management</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>NuGet + Credential Provider Bundle updated</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Delete test artifacts</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Inline service connections in Build and Release</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Link build artifacts from another team project</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td rowspan="4">[16 Nov 2016](/articles/news/2016/nov-16-team-services)</td> + <td>Package Management General Availability</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Release Management General Availability</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>TFS Database Import Service</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Work Item Search public preview</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td rowspan="13">[2 Nov 2016](/articles/news/2016/nov-02-team-services)</td> + <td>Package Management in India and Brazil</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Microsoft Teams integration</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Repo Favorites</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Rollback build definitions</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Disable the sync and checkout of sources in a build</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Docker extension enhancements</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>.NET Core build task</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Build and release management templates</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>ASP.NET Core and NodeJs deployments</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Azure Web App Service manage task</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Release Management available in multiple regions</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>REST client helpers for Test Step operations</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Test case description in Web runner</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td rowspan="15">[12 Oct 2016](/articles/news/2016/oct-12-team-services)</td> + <td>New navigation on by default</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Cherry-pick and revert</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Commit page improvements</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Configurable compare branch</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Find a file or folder</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Suggested value in work item pick lists</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Xcode 8 Signing and Exporting Packages in the Xcode Build Task</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>FindBugs in the Gradle build task</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Email support for AAD groups</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Multiple schedules in releases</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Azure resource group improvements</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Azure CLI task</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Simplified Azure endpoint creation</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Test & Feedback extension general availability</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Visual Studio subscribers automatically use their free license</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="13">[21 Sep 2016](/articles/news/2016/sep-21-team-services)</td> + <td>Attachments live preview</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Work item type layout improvements</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Disable work item types</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Import Repository</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Markdown preview button</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Confirmation for deleting repos</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Add .gitignore during repo creation</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Verify bugs from work item</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Xcode Build task xcpretty formatting</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Publish Jenkins test and code coverage results</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Build summary for Maven and Gradle tasks</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>FindBugs and CheckStyle in Maven build tasks</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td>Deployment status widget</td> + <td style="background:rgb(189, 214, 238);">[2017.1](https://go.microsoft.com/fwlink/?LinkId=839593)</td> + </tr> + <tr> + <td rowspan="14">[2 Sep 2016](/articles/news/2016/sep-02-team-services)</td> + <td>Custom work item types</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Work item history tab</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Managing a NuGet package’s lifecycle</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Build queue tab</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Hosted build pool build agent migration</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Xamarin license step removed</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Jenkins with untrusted SSL certificates</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Apple App Store extension</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Request Feedback</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Checkstyle static analysis</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Deployment manual intervention</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Service endpoint improvements</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>SQL database deployment task</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>User lifecycle management improvements</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="22">[17 Aug 2016](/articles/news/2016/aug-17-team-services)</td> + <td>Pull Request improvements: <br /> + Redesigned UI <br /> + Overview <br /> + Files <br /> + Updates <br /> + Comments, now with markdown and emoji <br /> + Auto-complete pull requests waiting on policies</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Clone Git repositories from your browser using Tower</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Download packages without NuGet</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Packages: Get started quickly</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Queue Jenkins jobs from builds and releases</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Jenkins service hook enhancements</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Run SSH commands on remote machines from builds and releases</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Create archives from builds and releases</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Copy files over SSH from builds and releases</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Download Jenkins artifacts to builds and releases</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Use FTP or FTPS to upload files from builds and releases</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Google Play Extension improvements</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Maven and Gradle tasks produce a build summary when running a SonarQube analysis</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Work item templates</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Quickly “Unfollow” work item</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Drag and drop attachments</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Assigned to Me widget</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Dashboard permissions</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Configure test outcomes for tests across different test suites</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Test Run and Test Result summary – traceability to Releases and manual test artifacts</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Unpublish extension – Removing a public extension from the Marketplace</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Rate Limits – Delaying user requests to avoid outages</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="9">[29 Jul 2016](/articles/news/2016/jul-29-team-services) </td> + <td>Git and TFVC – History view and diff view updates</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Restrict Package Management feed creation</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release management improvements – Azure deployments, release policies: <br /> + Agent queue management <br /> + Azure deployments <br /> + Policies – Soft delete releases <br /> + Policies – Retention of releases and builds <br /> + Release definition authoring improvements – linked artifacts improvements <br /> + Release – redeploy after success</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Test traceability and release environments support in Test History</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Exploratory testing improvements – view unexplored work items, capture web page load data</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Dashboard improvements</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Java PMD analysis in Gradle build task</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>User management – export users and licenses</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Backlog extension points</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="18">[7 Jul 2016](/articles/news/2016/jul-07-team-services)  </td> + <td>Resizable WIT charts on dashboards</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Filter boards to a parent work item</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Links front and center</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Test settings configuration for Kanban board</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Comment tracking for pull requests</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Browse Code Coverage reports in the web</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Maven and Gradle tasks produce a build summary when running a SonarQube analysis</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Agent queue role-based security</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Task-level time-outs</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Import/Export/Clone release definition</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Web app deployment using ARM</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Partially successful deployments</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>View and download attachments associated with releases</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Github artifacts for RM</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>.NET SQL Extension</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Image action log in Web Test runner</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Order tests in Test hub</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Pick a build to test with</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="22">[17 Jun 2016](/articles/news/2016/jun-17-team-services)</td> + <td>Git & TFVC – Browsing branches</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Git & TFVC – Ahead/behind</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Git & TFVC – Branch picker includes “Mine”</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Git & TFVC – Path control</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Git & TFVC – File type icons</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Work Items – An improved header</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Work Items – Custom states</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Exploratory Testing – Insights</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Exploratory Testing – Auto stop screen recordings</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Screen recording support in Web runner (for Chrome) </td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Bugs filed as children – Web runner / Exploratory testing extension</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Test – History across branches</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Test – Automated testing for SCVMM and VMWare</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release – Test status visibility</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release – Support Java PMD analysis in Maven build task</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release – Passing oauth tokens to scripts</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Build – Enable path filters for Git CI triggers</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Build – Updated hosted pool software</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Dashboards – Resizable query results widget</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Third-party plugins – Jenkins plug-in to RM</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Marketplace – Publisher review responses</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Team Rooms – Build vNext support</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="1">[6 Jun 2016](https://blogs.msdn.microsoft.com/visualstudioalm/2016/06/06/visual-studio-team-services-is-in-brazil/)</td> + <td>Brazil region for Visual Studio Team Services</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="15">[1 Jun 2016](/articles/news/2016/jun-01-team-services)</td> + <td>Filtering in Kanban board</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Process configuration REST APIs</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Dashboards REST APIs</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>SSH clients can connect to Git repos</td> + <td style="background:rgb(177, 232, 179);">2015.3</td> + </tr> + <tr> + <td>Redesigned Branches page</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Create and send links to specific sections of code</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>API updates for package management</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Screenshot and system info support in Chrome Web runner</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Ordering of tests in Test Hub</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Docker integration for build and release management</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>SonarQube results in pull request view</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Test results trend for build</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Service hooks for release management</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>TeamCity artifacts for release management</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release Management Client SDK</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="19">[6 May 2016](/articles/news/2016/may-06-team-services)</td> + <td>Email improvements</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Checkbox control</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Work Item page management</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Turning board annotations on/off</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Clear Formatting command</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Dashboard updates</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Adding attachments during manual testing</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Test plan/suite columns</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Build and release summary updates</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release Management repository linking</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Copy, Export, and Import release definitions</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Schedule based deployments</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release Management REST APIs</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Simplified Release definition wizard</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>New Release Management job execution variables</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Improved build and pull request traceability</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Team Project rename permission</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Admin settings Work hub</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>UX improvements</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="17">[13 Apr 2016](/articles/news/2016/apr-13-team-services)</td> + <td>Follow a work item</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Change work item type</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Work Item move (single or bulk)</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Kanban board live updates</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Pick lists for work Items</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Checklist improvements</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Build to Line number</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Build log view supports much larger logs</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Java Build templates</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Xamarin Build Tasks</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Widget SDK: Reusable CSS and DOM templates</td> + <td style="background:rgb(177, 232, 179);">2015.3</td> + </tr> + <tr> + <td>Adding users from the team members widget</td> + <td style="background:rgb(177, 232, 179);">2015.3</td> + </tr> + <tr> + <td>Collection in the domain</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Release Management – Email release summary</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release Management – Dashboard widget for release definition summary</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release Management – Deploy based on conditions in multiple environments</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Release Management – Provision VMs or run a PS script using SCVMM extension</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="11">[24 Mar 2016](/articles/news/2016/mar-24-team-services)</td> + <td>Commit traceability</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>View Git LFS files in the web</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Git for Windows now includes Team Services authentication by default</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Custom multiline text fields</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Test progress from your cards</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Capture screen recordings</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Queue a Run by specifying your test suite</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Configuration management in the Test Hub</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Enable build result extensions to specify order and column</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Configure status API reporting for a build definition</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Tab contribution point</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="13">[3 Mar 2016](/articles/news/2016/mar-03-team-services)</td> + <td>View test results for each release environment</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Triggers: Deploy based on completion in multiple environments (join)</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Epic and Feature board drill-down</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Exploratory testing directly from a work item</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Data collection: Image action log</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Create test cases based on Image action log data</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Assigning configurations to test plans, test suites and test cases</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Squash merge pull requests</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Clone in IntelliJ, Android Studio, etc.</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Gated builds for Team Foundation Version Control (TFVC)</td> + <td style="background:rgb(198, 239, 200);">2015.2</td> + </tr> + <tr> + <td>Automated testing on Azure environments</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>NuGet package delist</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Office connector</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="13">[16 Feb 2016](/articles/news/2016/feb-16-team-services)</td> + <td>Package management is now available in Europe and Australia</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Search for extensions on Visual Studio Marketplace</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Work item query charts in the dashboard catalog</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Cumulative flow diagram widget</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Flexible build policy for Git</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>SonarQube Quality Gates in Build</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>RM: UI extensibility</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>SCVMM support</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Exploratory Testing improvements</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Azure SQL Database Deployment task</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Delete Test Plan</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>#mention</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Keyboard shortcuts for Kanban board</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td rowspan="17">[25 Jan 2016](/articles/news/2016/jan-25-team-services)</td> + <td>Public preview of the dashboard widget SDK</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Create branch and links to related artifacts</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Build widgets in the catalog</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Markdown widget with file from repository</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Auto-refresh dashboards</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Richer visualizations in the build summary page</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>View passed test results and file bugs in build summary page</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Test summary in build status notification email</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Support for editing tags in the bulk edit dialog</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Deleting a custom field</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Keyboard shortcuts</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Test plan improvements</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Exploratory testing improvements</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Release orchestration improvements</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>UI extensibility for release management</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Search scope selector</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Search across Git and TFVC projects</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="8">[10 Dec 2015](/articles/news/2015/dec-10-team-services)</td> + <td>Custom work item fields</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Work item discussion</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Work item history improvements</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Deleting work items</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Dashboards edit mode</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Keyboard shortcuts</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>On-Premises support for Exploratory Testing extension:</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Scope code search using path filters</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td rowspan="7">[24 Nov 2015](/articles/news/2015/nov-24-team-services)</td> + <td>Git and TFVC in the same team project</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Package Management build tasks</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Implement a task once for multiple platforms</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Pull Request Widget for Dashboards</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>@mention and #ID in code</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Reordering cards on boards</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Global shortcut keys</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td rowspan="7">[18 Nov 2015](/articles/news/2015/nov-18-team-services)</td> + <td>Extensions and Marketplace</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Release Management public preview</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Package Management public preview</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Code Search public preview</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Test Results in Build</td> + <td style="background:rgb(198, 239, 200);">[2015.2](http://go.microsoft.com/fwlink/?LinkId=615439)</td> + </tr> + <tr> + <td>Exploratory Testing extension</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Test Manager extension</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="6">[30 Oct 2015](/articles/news/2015/oct-30-team-services)</td> + <td>Dashboards</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Improved pull request experience</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Manual test iteration results</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Retention policy for test results</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Reorder and re-parent tasks from the Kanban board</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>PREVIEW: New Work Item form</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="5">[8 Oct 2015](/articles/news/2015/oct-08-team-services)</td> + <td>Azure Active Directory Group support</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>Starting with Git, made easy</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Improved commit details</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>SonarQube analysis from a Maven build task</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>PREVIEW: New Work Item form</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td rowspan="7">[18 Sep 2015](/articles/news/2015/sep-18-team-services)</td> + <td>Inline tasks on the Kanban board</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Query and display of Kanban fields</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Multi-select items on the backlog</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Branch policy to require linked work items</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Export test outcomes</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Work item trend and rollup reporting in Power BI</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td>Support for publishing xUnit results</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td rowspan="4">[26 Aug 2015](/articles/news/2015/aug-26-team-services)</td> + <td>Rename columns in place</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Choosing users for capacity planning</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Burndown with available capacity</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>SonarQube analysis build tasks</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td rowspan="4">[7 Aug 2015](/articles/news/2015/aug-07-team-services)</td> + <td>Multi-select items on the product backlog</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Reorder cards when changing columns</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Color tags and titles on your cards</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Libraries for integrating with VSTS now available at nuget.org</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="1">[22 Jul 2015](http://blogs.msdn.com/b/visualstudioalm/archive/2015/07/22/reporting-on-work-items-with-power-bi.aspx)</td> + <td>Power BI reporting on Work Item data</td> + <td style="background:rgb(232, 232, 232);">Future</td> + </tr> + <tr> + <td rowspan="7">[17 Jul 2015](/articles/news/2015/jul-17-team-services)</td> + <td>Multiple activities per team member</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Configure settings directly from backlogs/boards</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Hide empty fields on cards</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Card coloring on Taskboard</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Drag any item to an iteration from anywhere</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Build your projects hosted in GitHub</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td>New VSTS integrations</td> + <td style="background:rgb(232, 232, 232);">--</td> + </tr> + <tr> + <td rowspan="3">[7 Jul 2015](/articles/news/2015/jul-07-team-services)</td> + <td>Card coloring on Kanban board</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Personal access tokens</td> + <td style="background:rgb(240, 245, 251);">[2017](http://go.microsoft.com/fwlink/?LinkId=831912)</td> + </tr> + <tr> + <td>Adding work directly to a sprint</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td rowspan="4">[3 Jun 2015](/articles/news/2015/jun-03-team-services)</td> + <td>Kanban swim lanes</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>#Mention work items</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Automated testing in Build vNext</td> + <td style="background:rgb(217, 247, 219);">[2015.1](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Team settings API</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td rowspan="7">[15 May 2015](/articles/news/2015/may-15-team-services)</td> + <td>Build vNext</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Backlog navigation update</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Opt-in to portfolio backlogs</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Improved SAFe support</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Kanban collapsed columns</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Git branch policies</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Power BI & VSO</td> + <td>--</td> + </tr> + <tr> + <td>[11 May 2015](/articles/news/2015/may-11-team-services)</td> + <td>Application Insights: <br /> + iOS and Android support <br /> + Performance counters for Java applications <br /> + Unhandled exceptions in Java apps <br /> + Drag-across to select a time range</td> + <td>--</td> + </tr> + <tr> + <td>[8 May 2015](http://blogs.msdn.com/b/bharry/archive/2015/05/10/vs-online-hosted-in-australia.aspx)</td> + <td>Australia region for Visual Studio Team Services</td> + <td>--</td> + </tr> + <tr> + <td>[29 April 2015](http://azure.microsoft.com/blog/2015/04/29/announcing-application-insights-public-preview-2/)</td> + <td>Application Insights Public Commercial Preview</td> + <td>--</td> + </tr> + <tr> + <td>[29 April 2015](https://www.visualstudio.com/integrate/extensions/overview)</td> + <td>Extensions</td> + <td style="background:rgb(198, 239, 200);">2015.2</td> + </tr> + <tr> + <td rowspan="4">[27 Apr 2015](/articles/news/2015/apr-27-team-services)</td> + <td>Adding fields to cards</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Kanban board filtering</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Card options on the Taskboard</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Account restore</td> + <td>--</td> + </tr> + <tr> + <td>[24 Apr 2015](/articles/news/2015/apr-24-team-services)</td> + <td>Team Project Rename</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>[22 Apr 2015](/articles/news/2015/apr-22-team-services)</td> + <td>Application Insights: <br /> + Synthetic data filtering <br /> + New usage experience for ASP.NET, Java and other applications <br /> + Daily Active User calculations</td> + <td>--</td> + </tr> + <tr> + <td>[17 Apr 2015](http://blogs.msdn.com/b/visualstudioalm/archive/2015/04/17/general-availability-of-codelens-in-visual-studio-online.aspx)</td> + <td>CodeLens General Availability on Visual Studio Team Services</td> + <td>--</td> + </tr> + <tr> + <td rowspan="4">[10 Apr 2015](/articles/news/2015/apr-10-team-services)</td> + <td>Configure cards</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Markdown editing for definition of done</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>CFD options</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Web history view for Git projects</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>[27 Mar 2015](/articles/news/2015/mar-27-team-services)</td> + <td>Application Insights: Save search page, pause export and export on alert fail</td> + <td>--</td> + </tr> + <tr> + <td rowspan="7">[10 Mar 2015](/articles/news/2015/mar-10-team-services)</td> + <td>Current iteration query token</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Reordering on the Kanban board</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Kanban definition of done</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Responsive card sizes</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Bugs on the Taskboard</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Syntax highlight for XML, Sass, Objective-C, R</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>CodeLens for accounts in West Europe</td> + <td>--</td> + </tr> + <tr> + <td>[9 Mar 2015](http://azure.microsoft.com/en-us/documentation/articles/app-insights-java-get-started/)</td> + <td>Application Insights support for Java</td> + <td>--</td> + </tr> + <tr> + <td rowspan="4">[18 Feb 2015](/articles/news/2015/feb-18-team-services)</td> + <td>Adding and editing directly from the board</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Split columns on the Kanban board</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Assign multiple people to test suites</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Application Insights in the Azure Preview Portal</td> + <td>--</td> + </tr> + <tr> + <td>[13 Feb 2015](http://blogs.msdn.com/b/visualstudioalm/archive/2015/02/13/announcing-limited-preview-for-visual-studio-online-code-search.aspx)</td> + <td>Limited preview for Code Search</td> + <td>--</td> + </tr> + <tr> + <td>[29 Jan 2015](http://azure.microsoft.com/en-us/updates/application-insights-support-for-windows-phone-and-windows-store/)</td> + <td>Application Insights support for Windows Phone and Windows Store Applications</td> + <td>--</td> + </tr> + <tr> + <td rowspan="4">[27 Jan 2015](/articles/news/2015/jan-27-team-services)</td> + <td>Basic license upgraded</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Reordering on the Taskboard</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Unparented Tasks on the Taskboard</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Inline editing on the Kanban board</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>[15 Jan 2015](http://blogs.msdn.com/b/bharry/archive/2015/01/15/visual-studio-online-iso-27001-certification-and-european-model-clauses.aspx)</td> + <td>VS Online ISO 27001 Certification</td> + <td>--</td> + </tr> + <tr> + <td rowspan="6">[17 Dec 2014](/articles/news/2014/dec-17-team-services)</td> + <td>Quick code editing</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Filtering on backlogs and queries</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Sprint backlog and task board improvements</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>New integrations: Slack and Azuqua</td> + <td>--</td> + </tr> + <tr> + <td>Preview APIs for adding and updating files in source control</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>CodeLens for Visual Studio Team Services</td> + <td>--</td> + </tr> + <tr> + <td rowspan="2">11 Dec 2014</td> + <td>[Application Insights Status Monitor and SDK updates](http://azure.microsoft.com/en-us/updates/application-insights-status-monitor-and-sdk-updated/)</td> + <td>--</td> + </tr> + <tr> + <td>[Application Insights includes telemetry export and segmentation editing](http://azure.microsoft.com/en-us/updates/application-insights-adds-telemetry-export-and-segmentation-chart-editing/)</td> + <td>--</td> + </tr> + <tr> + <td rowspan="5">[2 Dec 2014](/articles/news/2014/dec-02-team-services)</td> + <td>Identity control and avatars</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Pull Request improvements</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Taskboard changes</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Kanban board persisted column headers</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Sharing personal queries</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>[12 Nov 2014](/articles/news/2014/dec-02-team-services#nov12)</td> + <td>Release Management Preview as VSTS service</td> + <td>--</td> + </tr> + <tr> + <td rowspan="7">[4 Nov 2014](/articles/news/2014/nov-04-team-services)</td> + <td>Bugs on the backlog</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>Test execution charts</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>Recent test results</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>Preview Markdown and HTML files in Code Explorer</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Browse link dialog</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>REST batch support</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Third-party OAuth scopes</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td rowspan="3">[28 Oct 2014](/articles/news/2014/oct-28-team-services)</td> + <td>European Datacenter</td> + <td>--</td> + </tr> + <tr> + <td>VSTS REST API version 1.0 is here</td> + <td>--</td> + </tr> + <tr> + <td>Service hooks is out of preview</td> + <td>--</td> + </tr> + <tr> + <td rowspan="2">[14 Oct 2014](/articles/news/2014/oct-14-team-services)</td> + <td>Test artifacts as work items</td> + <td style="background:rgb(216, 194, 239);">[2013.3](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>Copy and paste query results</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td rowspan="3">[23 Sep 2014](/articles/news/2014/sep-23-team-services)</td> + <td>Maximizing text area fields</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>Navigating to links</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>Work item performance improvements</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td rowspan="6">[4 Sep 2014](/articles/news/2014/sep-04-team-services)</td> + <td>Work Item query improvements</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>Quick search through tree controls</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>Longer trend charts</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Test Cases related to Test Suites</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>WIT REST API v1.2</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Event and resource versioning within service hooks</td> + <td>--</td> + </tr> + <tr> + <td>[27 Aug 2014](/articles/news/2014/aug-27-team-services)</td> + <td>A license for Stakeholders</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td rowspan="2">[18 Aug 2014](/articles/news/2014/aug-18-team-services)</td> + <td>Project Welcome pages</td> + <td style="background:rgb(232, 255, 234);">[2015](http://go.microsoft.com/fwlink/?LinkId=533008)</td> + </tr> + <tr> + <td>Tagging support in the Test Hub</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td rowspan="5">[21 Jul 2014](/articles/news/2014/jul-21-team-services)</td> + <td>Using corporate identities with existing accounts</td> + <td>--</td> + </tr> + <tr> + <td>Viewing existing projects in the Azure Preview Portal</td> + <td>--</td> + </tr> + <tr> + <td>Trend charts + aggregation</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>Test Hub added to the Advanced License</td> + <td>--</td> + </tr> + <tr> + <td>Deleting your account</td> + <td>--</td> + </tr> + <tr> + <td rowspan="3">[1 Jul 2014](/articles/news/2014/jul-01-team-services)</td> + <td>Hiding work in progress on the backlog</td> + <td style="background:rgb(216, 194, 239);">[2013.3](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>Full Screen on the backlog and boards</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>Move to position on the backlog</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td>[10 Jun 2014](/articles/news/2014/jun-10-team-services)</td> + <td>Pull Requests</td> + <td style="background:rgb(231, 179, 249);">[2013.4](http://go.microsoft.com/fwlink/?LinkId=510319)</td> + </tr> + <tr> + <td rowspan="3">[20 May 2014](/articles/news/2014/may-20-team-services)</td> + <td>Using corporate identities</td> + <td>--</td> + </tr> + <tr> + <td>Copy/Paste shared parameter data between VS Online and Excel</td> + <td style="background:rgb(216, 194, 239);">[2013.3](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>End of data export period</td> + <td>--</td> + </tr> + <tr> + <td rowspan="2">[12 May 2014](/articles/news/2014/may-12-team-services)</td> + <td>Integrate with Visual Studio Team Services</td> + <td>--</td> + </tr> + <tr> + <td>Service Migration with OpsHub</td> + <td>--</td> + </tr> + <tr> + <td rowspan="3">[3 Apr 2014](/articles/news/2014/apr-03-team-services)</td> + <td>General Availability of Visual Studio Team Services</td> + <td>--</td> + </tr> + <tr> + <td>Application Insights Limited Preview</td> + <td>--</td> + </tr> + <tr> + <td>Shared Parameters for Test Cases</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td rowspan="2">[18 Mar 2014](/articles/news/2014/mar-18-team-services)</td> + <td>Getting started with Application Insights</td> + <td>--</td> + </tr> + <tr> + <td>Search across your application trace logs</td> + <td>--</td> + </tr> + <tr> + <td rowspan="3">[28 Feb 2014](/articles/news/2014/feb-28-team-services)</td> + <td>Build support for Java code managed in Git</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>Java JDK, Ant, and Maven libraries preinstalled in hosted build</td> + <td>--</td> + </tr> + <tr> + <td>Maven support for TF version control projects</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="2">[10 Feb 2014](/articles/news/2014/feb-10-team-services)</td> + <td>Exporting test artifacts</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>New “create tags” permission</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td rowspan="3">[22 Jan 2014](/articles/news/2014/jan-22-team-services)</td> + <td>Querying tags</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>Removing weekends from the Burndown</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>Configurable CFD dates</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td rowspan="3">[11 Dec 2013](/articles/news/2013/dec-11-team-services)</td> + <td>Application Insights – Response Stacked Distribution</td> + <td>--</td> + </tr> + <tr> + <td>Application Insights – Windows Store App support</td> + <td>--</td> + </tr> + <tr> + <td>Asynchronous backlogs</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td rowspan="3">[13 Nov 2013](/articles/news/2013/nov-13-team-services)</td> + <td>Commercial preview</td> + <td>--</td> + </tr> + <tr> + <td>Application Insights limited preview</td> + <td>--</td> + </tr> + <tr> + <td>Live editing of Windows Azure sites</td> + <td>--</td> + </tr> + <tr> + <td>[8 Nov 2013](/articles/news/2013/nov-08-team-services)</td> + <td>Work item chart pinning</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>[21 Oct 2013](/articles/news/2013/oct-21-team-services)</td> + <td>New account and project pages</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>[17 Oct 2013](/articles/news/2013/oct-17-team-services)</td> + <td>Build images updated to VS 2013</td> + <td>--</td> + </tr> + <tr> + <td rowspan="3">[30 Sep 2013](/articles/news/2013/sep-30-team-services)</td> + <td>New languages supported for code syntax highlighting</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>Color picking in charts</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td>Column options for the test case grid view</td> + <td style="background:rgb(229, 212, 247);">[2013.2](http://go.microsoft.com/fwlink/?LinkId=392762)</td> + </tr> + <tr> + <td rowspan="4">[9 Sep 2013](/articles/news/2013/sep-09-team-services)</td> + <td>Work item charts</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Bulk edit of test cases</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Delete a team project</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Work items from code discussion</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>[19 Aug 2013](/articles/news/2013/aug-19-team-services)</td> + <td>Improved code commenting</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="3">[29 Jul 2013](/articles/news/2013/jul-29-team-services)</td> + <td>Improved permission management for Git repos</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Team room Git push events</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Deleting team rooms</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="2" style="text-align:left;">[10 Jul 2013](/articles/news/2013/jul-10-team-services)</td> + <td>Backlog mapping</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Team permission changes</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="3">[26 Jun 2013](/articles/news/2013/jun-26-team-services)</td> + <td>Windows 8.1 support in hosted build</td> + <td>--</td> + </tr> + <tr> + <td>Paste images into work items in the web</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Open Microsoft Test Runner from web</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="3">[19 Jun 2013](/articles/news/2013/jun-19-team-services)</td> + <td>Agile Portfolio Management updates – view filter and quick decompose</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Open MTM from web</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Admin panel color change</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="5">[3 Jun 2013](/articles/news/2013/jun-03-team-services)</td> + <td>Agile Portfolio Management</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Lightweight code commenting</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Team Room</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Create/modify test plans through Web UI</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Cloud load testing</td> + <td>--</td> + </tr> + <tr> + <td rowspan="3">[28 May 2013](/articles/news/2013/may-28-team-services)</td> + <td>Build IaaS</td> + <td>--</td> + </tr> + <tr> + <td>Git alerts</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Backlog updates – name changed to "backlogs" and now backlogs show all items until they reach the completed state</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="4">[13 May 2013](/articles/news/2013/may-13-team-services)</td> + <td>Work item colors based on process template settings</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Usability updates – icon updates and sentence casing</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Navigation updates in Web UI, including ability to view past iterations</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Git multi-repo support</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="2">[22 Mar 2013](/articles/news/2013/mar-22-team-services)</td> + <td>Branches view for Git</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>TCM Improvements – bulk edit test step pass/fail, double click test step reorder, hover over inline images</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="4">[4 Mar 2013](/articles/news/2013/mar-04-team-services)</td> + <td>Customizable Kanban columns</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>TCM improvements – edit test steps when running tests</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Annotate/Blame for version control</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Scheduled builds for Git-based projects</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td rowspan="4">[11 Feb 2013](/articles/news/2013/feb-11-team-services)</td> + <td>Continuous Integration for Git</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>TCM improvements – view test step attachments when running tests, add attachments when running tests, pause and resume tests in Test Runner</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>WIT tagging cleanup for unused tags</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Download as Zip for version control</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td rowspan="3">[30 Jan 2013](/articles/news/2013/jan-30-team-services)</td> + <td>Work item tagging</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Git support</td> + <td style="background:rgb(243, 232, 255);">[2013](http://go.microsoft.com/fwlink/p/?LinkId=306566)</td> + </tr> + <tr> + <td>Test Hub in Web UI</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>[21 Jan 2013](/articles/news/2013/jan-21-team-services)</td> + <td>Changeset context menu in Web UI</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>[9 Jan 2013](/articles/news/2013/jan-09-team-services)</td> + <td>Account rename of Team Foundation Service account</td> + <td>--</td> + </tr> + <tr> + <td rowspan="5">[7 Jan 2013](/articles/news/2013/jan-07-team-services)</td> + <td>Email work items from backlog</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Search for changesets by ID in Web UI</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Full screen mode for code viewing</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Inline diff of images in version control</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Collapsible left pane in all left panels in Web UI</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td rowspan="3">[10 Dec 2012](/articles/news/2012/dec-10-team-services)</td> + <td>Renamed Source to Code in Web UI hub</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Code Explorer updates in Web UI</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Hosted build updates for Azure SDK 1.8, TypeScript 0.8.1, and VS 2012 Update 1</td> + <td>--</td> + </tr> + <tr> + <td rowspan="2">[19 Nov 2012](/articles/news/2012/nov-19-team-services)</td> + <td>Send work items in email from TFS web access</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Build file counts and sizes in summary reports</td> + <td style="background:rgb(189, 214, 238);">[2012.2](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>[31 Oct 2012](/articles/news/2012/oct-31-team-services)</td> + <td>General availability of Team Foundation Service</td> + <td>--</td> + </tr> + <tr> + <td>[29 Oct 2012](/articles/news/2012/oct-29-team-services)</td> + <td>Build drops</td> + <td>--</td> + </tr> + <tr> + <td>[8 Oct 2012](/articles/news/2012/oct-08-team-services)</td> + <td>400 character server paths for version control</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td rowspan="3">[17 Sep 2012](/articles/news/2012/sep-17-team-services)</td> + <td>Drag/drop in sprint planning to assign to person or activity</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Web usability improvements (tabs and UX modified, collapse left pane in work items)</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Process template updates to Agile 6.1 and Scrum 2.1</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td rowspan="4">[27 Aug 2012](/articles/news/2012/aug-27-team-services)</td> + <td>Improved source browsing, viewing, and searching</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Improved source "diff"</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Hosted builds of SharePoint components</td> + <td>--</td> + </tr> + <tr> + <td>Basic authentication support</td> + <td>--</td> + </tr> + <tr> + <td rowspan="3">[13 Aug 2012](/articles/news/2012/aug-13-team-services)</td> + <td>Kanban board</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Cumulative Flow Diagram</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>WIP Limits</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td rowspan="2">[6 Aug 2012](/articles/news/2012/aug-06-team-services)</td> + <td>Drag/drop in task board to move tasks between people and stories</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + <tr> + <td>Azure continuous deployment summary report</td> + <td>[2012.1](https://www.microsoft.com/en-us/download/details.aspx?id=39305)</td> + </tr> + </tbody> +</table> + +###Server Build Numbers + +<table> +<thead> + <tr> + <th>Release</th> + <th>Build</th> + </tr> +</thead> +<tbody> + <tr> + <td style="background:rgb(155, 192, 230);">2017.2</td> + <td>--</td> + </tr> + <tr> + <td style="background:rgb(189, 214, 238);">2017.1</td> + <td>15.112.26307.00</td> + </tr> + <tr> + <td style="background:rgb(240, 245, 251);">2017 RTM</td> + <td>15.105.25910.00</td> + </tr> + <tr> + <td style="background:rgb(177, 232, 179);">2015.3</td> + <td>14.102.25423.00</td> + </tr> + <tr> + <td style="background:rgb(198, 239, 200);">2015.2</td> + <td>14.95.25122.00</td> + </tr> + <tr /> + <tr> + <td style="background:rgb(217, 247, 219);">2015.1</td> + <td>14.0.24720.00</td> + </tr> + <tr> + <td style="background:rgb(232, 255, 234);">2015 RTM</td> + <td>14.0.23128.00*</td> + </tr> + <tr> + <td style="background:rgb(231, 179, 249);">2013.4</td> + <td>12.0.31101.00</td> + </tr> + <tr> + <td style="background:rgb(216, 194, 239);">2013.3</td> + <td>12.0.30723.00</td> + </tr> + <tr> + <td style="background:rgb(229, 212, 247);">2013.2</td> + <td>12.0.30324.00</td> + </tr> + <tr> + <td style="background:rgb(243, 232, 255);">2013 RTM</td> + <td>12.0.21005.01</td> + </tr> + <tr> + <td style="background:rgb(155, 192, 230);">2012.3</td> + <td>11.0.60610.01</td> + </tr> + <tr> + <td style="background:rgb(189, 214, 238);">2012.2</td> + <td>11.0.60315.01</td> + </tr> + <tr> + <td>2012.1</td> + <td>11.0.51106.01</td> + </tr> + <tr> + <td style="background:rgb(240, 245, 251);">2012 RTM</td> + <td>11.0.50727.01</td> + </tr> + </tbody> + </table> +* TFS 2015 RTM has multiple build numbers, due to the componentized nature of its build and packaging process. The number of the installer, which will show up in Add/Remove Programs, is 14.0.23129.01. The number of the majority of the assemblies, which will show up in the TFS Administration Console, is 14.0.23128.00. \ No newline at end of file diff --git a/toc.yml b/toc.yml new file mode 100644 index 00000000000..3ed3004ee74 --- /dev/null +++ b/toc.yml @@ -0,0 +1,179 @@ +- name: Team Services + href: index.md +- name: Overview + items: + - name: Devops for Team Services & TFS + href: devops-alm-overview.md + - name: Essential services + href: services.md +- name: Quickstarts + items: + - name: Set up/sign up with Team Services + href: setup-admin/team-services/sign-up-for-visual-studio-team-services.md + - name: Get started coding with Git + href: git/gitquickstart.md + - name: Get started coding with TFVC + href: tfvc/share-your-code-in-tfvc-vs.md + - name: Get started tracking work + href: work/overview.md + - name: Get started with CI/CD + href: build/get-started/ci-cd-part-1.md + - name: Get started testing + href: test/index.md + - name: Get started as a Stakeholder + href: quickstart/get-started-stakeholder.md +- name: Tutorials + items: + - name: Set your preferences + href: setup-admin/account-preferences.md + - name: Set favorites + href: collaborate/set-favorites.md + - name: Follow work & pull requests + href: collaborate/follow-work-items.md + - name: Enable preview features + href: collaborate/preview-features.md + - name: Authenticate with personal access tokens + href: setup-admin/team-services/use-personal-access-tokens-to-authenticate.md + - name: Share information + items: + - name: Share your project vision + href: collaborate/project-vision-status.md + - name: Add & edit a wiki + href: collaborate/add-edit-wiki.md + - name: Create a readme for your repo + href: git/create-a-readme.md + - name: Share work plans + href: work/track/share-plans.md + - name: Team dashboards + href: report/dashboards.md + - name: Manage notifications (alerts) + items: + - name: Follow work & pull requests + href: collaborate/follow-work-items.md + - name: Personal notifications + href: collaborate/manage-personal-notifications.md + - name: Team notifications + href: collaborate/manage-team-notifications.md + - name: Set personal or team alerts (TFS) + href: work/track/alerts-and-notifications.md + - name: Campfire + href: collaborate/campfire.md + - name: Flowdock + href: collaborate/flowdock.md + - name: Hipchat + href: collaborate/hipchat.md + - name: Slack + href: collaborate/slack.md + - name: Collaborate in a team room + href: collaborate/collaborate-in-a-team-room.md +- name: Concepts + items: + - name: Team projects, teams, and repos (NEW) + href: get-started/team-projects-teams-repos.md + - name: Access levels (NEW) + href: concepts/access-level.md + - name: Source control (NEW) + href: concepts/source-control.md + - name: Kanban & Agile (NEW) + href: concepts/kanban-agile.md + - name: Continuous integration (NEW) + href: concepts/continuous-integration-deployment.md + - name: Key concepts + href: concepts.md + - name: Essential services + href: services.md + - name: Clients & tools + href: tools.md + - name: Software development roles + href: roles.md + - name: How Team Services & TFS differ + href: about-vsts-tfs.md +- name: How-to guides + items: + - name: Go mobile + href: collaborate/mobile-work.md + - name: Switch project or team focus + href: /team-services/work/how-to/switch-team-context-work + - name: Connect to a team project + href: connect/connect-team-projects.md + - name: Add & manage teams + href: /team-services/work/scale/multiple-teams + - name: Navigation + items: + - name: Work in the web portal + href: connect/work-web-portal.md + - name: Work from your account hub + href: connect/account-home-pages.md + - name: Manage users & access(Team Services) + items: + - name: Add and manage users + href: /team-services/setup-admin/team-services/add-account-users-assign-access-levels-team-services + - name: Add administrators + href: /team-services/setup-admin/add-administrator-tfs + - name: Manage permissions + href: /team-services/setup-admin/tfs/admin/change-permission-levels + - name: Manage users & access(TFS) + items: + - name: Add users to team projects + href: /team-services/setup-admin/add-users + - name: Manage permissions + href: /team-services/setup-admin/tfs/admin/change-permission-levels + - name: Change access levels (TFS) + href: /team-services/work/connect/change-access-levels + - name: Install TFS + items: + - name: Get started + href: /team-services/setup-admin/tfs/install/get-started + - name: Single server + href: /team-services/setup-admin/tfs/install/single-server + - name: Dual server + href: /team-services/setup-admin/tfs/install/dual-server + - name: Multiple servers + href: /team-services/setup-admin/tfs/install/multiple-server +- name: Reference + items: + - name: Permissions & access + href: setup-admin/permissions-access.md + - name: Permissions guide (NEW) + - name: Productivity tips + href: work/productivity/productivity-tips.md + - name: Keyboard shortcuts + href: reference/keyboard-shortcuts.md + - name: Markdown guidance + href: reference/markdown-guidance.md + - name: Features index + href: alm-devops-features.md + - name: FAQs + href: faqs.md + - name: Migrate from TFS to Team Services + href: migrate-to-vsts-from-tfs.md + - name: Navigate in the web portal + href: connect/work-web-portal.md + - name: Navigate in Team Explorer + href: connect/work-team-explorer.md +- name: Troubleshooting + items: + - name: Resolve connection issues (NEW TOPIC) + - name: Get support, provide feedback + href: provide-feedback.md +- name: Resources + items: + - name: Team Services, Account Management + href: /team-services/setup-admin/team-services/overview + - name: TFS, Administration + href: /team-services/setup-admin/get-started + - name: Marketplace & Billing + href: /docs/marketplace/overview + items: + - name: Visual Studio Subscriptions + href: /docs/marketplace/vs-subscriptions/buy-vs-subscriptions + - name: Try extensions for free + href: /docs/setup-admin/team-services/try-additional-features-vs + - name: Get more features for Team Services + href: /docs/marketplace/get-vsts-extensions + - name: Pricing: Team Services + href: https://www.visualstudio.com/team-services/pricing/ + - name: Pricing: TFS + href: https://www.visualstudio.com/team-services/tfs-pricing/ + - name: Collaborate with Microsoft Teams + href: https://marketplace.visualstudio.com/items?itemName=ms-vsts.vss-services-teams